Re: [PATCH 4.14 1/2] genirq/affinity: Handle affinity setting on inactive interrupts correctly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Aug 19, 2020 at 11:55:37AM +0200, Greg KH wrote:
> On Mon, Aug 10, 2020 at 08:11:43PM +0000, Frank van der Linden wrote:
> > From: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> >
> > commit baedb87d1b53532f81b4bd0387f83b05d4f7eb9a upstream.
> >
> > Setting interrupt affinity on inactive interrupts is inconsistent when
> > hierarchical irq domains are enabled. The core code should just store the
> > affinity and not call into the irq chip driver for inactive interrupts
> > because the chip drivers may not be in a state to handle such requests.
> >
> > X86 has a hacky workaround for that but all other irq chips have not which
> > causes problems e.g. on GIC V3 ITS.
> >
> > Instead of adding more ugly hacks all over the place, solve the problem in
> > the core code. If the affinity is set on an inactive interrupt then:
> >
> >     - Store it in the irq descriptors affinity mask
> >     - Update the effective affinity to reflect that so user space has
> >       a consistent view
> >     - Don't call into the irq chip driver
> >
> > This is the core equivalent of the X86 workaround and works correctly
> > because the affinity setting is established in the irq chip when the
> > interrupt is activated later on.
> >
> > Note, that this is only effective when hierarchical irq domains are enabled
> > by the architecture. Doing it unconditionally would break legacy irq chip
> > implementations.
> >
> > For hierarchial irq domains this works correctly as none of the drivers can
> > have a dependency on affinity setting in inactive state by design.
> >
> > Remove the X86 workaround as it is not longer required.
> >
> > Fixes: 02edee152d6e ("x86/apic/vector: Ignore set_affinity call for inactive interrupts")
> 
> Why is this needed for 4.14.y, when this "Fixes:" tag says a commit that
> showed up in 4.15?

The issue of set_affinity being called on inactive interrupts, and it
not being handled correctly, was already there in 4.14. The commit in
the Fixes: tag is the x86 workaround, which came in in 4.15, and is
no longer needed.

So we still need the backport of the genirq changes, to fix it in 4.14.
This is mostly for arm64 (gicv3), where this issue results in interrupts
getting messed up.

- Frank



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux