kernel_optimize_test/kernel/irq
Hans de Goede 382bd4de61 genirq: Use irqd_get_trigger_type to compare the trigger type for shared IRQs
When requesting a shared irq with IRQF_TRIGGER_NONE then the irqaction
flags get filled with the trigger type from the irq_data:

        if (!(new->flags & IRQF_TRIGGER_MASK))
                new->flags |= irqd_get_trigger_type(&desc->irq_data);

On the first setup_irq() the trigger type in irq_data is NONE when the
above code executes, then the irq is started up for the first time and
then the actual trigger type gets established, but that's too late to fix
up new->flags.

When then a second user of the irq requests the irq with IRQF_TRIGGER_NONE
its irqaction's triggertype gets set to the actual trigger type and the
following check fails:

        if (!((old->flags ^ new->flags) & IRQF_TRIGGER_MASK))

Resulting in the request_irq failing with -EBUSY even though both
users requested the irq with IRQF_SHARED | IRQF_TRIGGER_NONE

Fix this by comparing the new irqaction's trigger type to the trigger type
stored in the irq_data which correctly reflects the actual trigger type
being used for the irq.

Suggested-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Link: http://lkml.kernel.org/r/20170415100831.17073-1-hdegoede@redhat.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2017-04-15 15:42:43 +02:00
..
affinity.c genirq/affinity: Fix node generation from cpumask 2016-12-15 12:32:35 +01:00
autoprobe.c
chip.c genirq: Add support for nested shared IRQs 2017-03-11 12:57:03 +01:00
cpuhotplug.c
debug.h
devres.c genirq/devres: Use dev_name(dev) as default for devname 2017-02-12 19:49:25 +01:00
dummychip.c
generic-chip.c genirq/generic_chip: Verify irqs_per_chip <= 32 2016-09-02 20:20:59 +02:00
handle.c
internals.h Merge branch 'irq/for-block' into irq/core 2016-07-04 12:26:05 +02:00
ipi.c genirq: Fix missing irq allocation affinity hint 2016-07-19 10:49:47 +02:00
irqdesc.c Merge branch 'irq/for-block' into irq/core 2016-09-15 20:54:40 +02:00
irqdomain.c Merge branches 'iommu/fixes', 'arm/exynos', 'arm/renesas', 'arm/smmu', 'arm/mediatek', 'arm/core', 'x86/vt-d' and 'core' into next 2017-02-10 15:13:10 +01:00
Kconfig
Makefile genirq: Add a helper to spread an affinity mask for MSI/MSI-X vectors 2016-07-04 12:25:14 +02:00
manage.c genirq: Use irqd_get_trigger_type to compare the trigger type for shared IRQs 2017-04-15 15:42:43 +02:00
migration.c
msi.c genirq/msi: Set IRQ_DOMAIN_FLAG_MSI on MSI domain creation 2017-01-23 15:00:45 +00:00
pm.c
proc.c genirq: Fix /proc/interrupts output alignment 2017-02-10 20:17:52 +01:00
resend.c
settings.h
spurious.c genirq: Clarify logic calculating bogus irqreturn_t values 2017-02-16 15:32:19 +01:00