Re: IRQ behaivour has been changed from v4.14 to v4.15-rc1

From: Thomas Gleixner
Date: Thu Dec 28 2017 - 12:21:56 EST


On Thu, 28 Dec 2017, Shevchenko, Andriy wrote:

> Hi!
>
> Experimenting with AtomISP (yes, code is ugly and MSI handling rather
> hackish, though...).
>
> So, with v4.14 base:
>
> [ 33.639224] atomisp-isp2 0000:00:03.0: Start stream on pad 1 for asd0
> [ 33.652355] atomisp-isp2 0000:00:03.0: irq:0x20
> [ 33.662456] atomisp-isp2 0000:00:03.0: irq:0x20
> [ 33.698064] atomisp-isp2 0000:00:03.0: stream[0] started.
>
> Ctrl+C
>
> [ 48.185643] atomisp-isp2 0000:00:03.0: <atomisp_dqbuf: -512
> [ 48.204641] atomisp-isp2 0000:00:03.0: release device ATOMISP ISP
> CAPTURE output
> ...
>
> and machine still alive.
>
>
> With v4.15-rc1 base (basically your branch + some my hack patches) the
> IR
> Q behaviour changed, i.e. I have got:
>
>
> [ 85.167061] spurious APIC interrupt through vector ff on CPU#0,
> should never happen.
> [ 85.199886] atomisp-isp2 0000:00:03.0: stream[0] started.
>
> and Ctrl+C does NOT work. Machine just hangs.
>
> It might be related to this:
> https://lkml.org/lkml/2017/12/22/697

I don't think so.

Does the patch below cure it?

Thanks,

tglx
8<-----------------
arch/x86/kernel/apic/apic_flat_64.c | 2 +-
arch/x86/kernel/apic/probe_32.c | 2 +-
arch/x86/kernel/apic/x2apic_cluster.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)

--- a/arch/x86/kernel/apic/apic_flat_64.c
+++ b/arch/x86/kernel/apic/apic_flat_64.c
@@ -151,7 +151,7 @@ static struct apic apic_flat __ro_after_
.apic_id_valid = default_apic_id_valid,
.apic_id_registered = flat_apic_id_registered,

- .irq_delivery_mode = dest_LowestPrio,
+ .irq_delivery_mode = dest_Fixed,
.irq_dest_mode = 1, /* logical */

.disable_esr = 0,
--- a/arch/x86/kernel/apic/probe_32.c
+++ b/arch/x86/kernel/apic/probe_32.c
@@ -105,7 +105,7 @@ static struct apic apic_default __ro_aft
.apic_id_valid = default_apic_id_valid,
.apic_id_registered = default_apic_id_registered,

- .irq_delivery_mode = dest_LowestPrio,
+ .irq_delivery_mode = dest_Fixed,
/* logical delivery broadcast to all CPUs: */
.irq_dest_mode = 1,

--- a/arch/x86/kernel/apic/x2apic_cluster.c
+++ b/arch/x86/kernel/apic/x2apic_cluster.c
@@ -184,7 +184,7 @@ static struct apic apic_x2apic_cluster _
.apic_id_valid = x2apic_apic_id_valid,
.apic_id_registered = x2apic_apic_id_registered,

- .irq_delivery_mode = dest_LowestPrio,
+ .irq_delivery_mode = dest_Fixed,
.irq_dest_mode = 1, /* logical */

.disable_esr = 0,