# # The ARCH_INLINE foo is necessary because select ignores "depends on" # config ARCH_INLINE_SPIN_TRYLOCK bool config ARCH_INLINE_SPIN_TRYLOCK_BH bool config ARCH_INLINE_SPIN_LOCK bool config ARCH_INLINE_SPIN_LOCK_BH bool config ARCH_INLINE_SPIN_LOCK_IRQ bool config ARCH_INLINE_SPIN_LOCK_IRQSAVE bool config ARCH_INLINE_SPIN_UNLOCK bool config ARCH_INLINE_SPIN_UNLOCK_BH bool config ARCH_INLINE_SPIN_UNLOCK_IRQ bool config ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE bool config ARCH_INLINE_READ_TRYLOCK bool config ARCH_INLINE_READ_LOCK bool config ARCH_INLINE_READ_LOCK_BH bool config ARCH_INLINE_READ_LOCK_IRQ bool config ARCH_INLINE_READ_LOCK_IRQSAVE bool config ARCH_INLINE_READ_UNLOCK bool config ARCH_INLINE_READ_UNLOCK_BH bool config ARCH_INLINE_READ_UNLOCK_IRQ bool config ARCH_INLINE_READ_UNLOCK_IRQRESTORE bool config ARCH_INLINE_WRITE_TRYLOCK bool config ARCH_INLINE_WRITE_LOCK bool config ARCH_INLINE_WRITE_LOCK_BH bool config ARCH_INLINE_WRITE_LOCK_IRQ bool config ARCH_INLINE_WRITE_LOCK_IRQSAVE bool config ARCH_INLINE_WRITE_UNLOCK bool config ARCH_INLINE_WRITE_UNLOCK_BH bool config ARCH_INLINE_WRITE_UNLOCK_IRQ bool config ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE bool config UNINLINE_SPIN_UNLOCK bool # # lock_* functions are inlined when: # - DEBUG_SPINLOCK=n and GENERIC_LOCKBREAK=n and ARCH_INLINE_*LOCK=y # # trylock_* functions are inlined when: # - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y # # unlock and unlock_irq functions are inlined when: # - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y # or # - DEBUG_SPINLOCK=n and PREEMPT=n # # unlock_bh and unlock_irqrestore functions are inlined when: # - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y # if !DEBUG_SPINLOCK config INLINE_SPIN_TRYLOCK def_bool y depends on ARCH_INLINE_SPIN_TRYLOCK config INLINE_SPIN_TRYLOCK_BH def_bool y depends on ARCH_INLINE_SPIN_TRYLOCK_BH config INLINE_SPIN_LOCK def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK config INLINE_SPIN_LOCK_BH def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_BH config INLINE_SPIN_LOCK_IRQ def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_IRQ config INLINE_SPIN_LOCK_IRQSAVE def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_IRQSAVE config INLINE_SPIN_UNLOCK_BH def_bool y depends on ARCH_INLINE_SPIN_UNLOCK_BH config INLINE_SPIN_UNLOCK_IRQ def_bool y depends on !PREEMPT || ARCH_INLINE_SPIN_UNLOCK_IRQ config INLINE_SPIN_UNLOCK_IRQRESTORE def_bool y depends on ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE config INLINE_READ_TRYLOCK def_bool y depends on ARCH_INLINE_READ_TRYLOCK config INLINE_READ_LOCK def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK config INLINE_READ_LOCK_BH def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_BH config INLINE_READ_LOCK_IRQ def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_IRQ config INLINE_READ_LOCK_IRQSAVE def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_IRQSAVE config INLINE_READ_UNLOCK def_bool y depends on !PREEMPT || ARCH_INLINE_READ_UNLOCK config INLINE_READ_UNLOCK_BH def_bool y depends on ARCH_INLINE_READ_UNLOCK_BH config INLINE_READ_UNLOCK_IRQ def_bool y depends on !PREEMPT || ARCH_INLINE_READ_UNLOCK_IRQ config INLINE_READ_UNLOCK_IRQRESTORE def_bool y depends on ARCH_INLINE_READ_UNLOCK_IRQRESTORE config INLINE_WRITE_TRYLOCK def_bool y depends on ARCH_INLINE_WRITE_TRYLOCK config INLINE_WRITE_LOCK def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK config INLINE_WRITE_LOCK_BH def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_BH config INLINE_WRITE_LOCK_IRQ def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_IRQ config INLINE_WRITE_LOCK_IRQSAVE def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_IRQSAVE config INLINE_WRITE_UNLOCK def_bool y depends on !PREEMPT || ARCH_INLINE_WRITE_UNLOCK config INLINE_WRITE_UNLOCK_BH def_bool y depends on ARCH_INLINE_WRITE_UNLOCK_BH config INLINE_WRITE_UNLOCK_IRQ def_bool y depends on !PREEMPT || ARCH_INLINE_WRITE_UNLOCK_IRQ config INLINE_WRITE_UNLOCK_IRQRESTORE def_bool y depends on ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE endif config ARCH_SUPPORTS_ATOMIC_RMW bool config MUTEX_SPIN_ON_OWNER def_bool y depends on SMP && ARCH_SUPPORTS_ATOMIC_RMW config RWSEM_SPIN_ON_OWNER def_bool y depends on SMP && RWSEM_XCHGADD_ALGORITHM && ARCH_SUPPORTS_ATOMIC_RMW config LOCK_SPIN_ON_OWNER def_bool y depends on MUTEX_SPIN_ON_OWNER || RWSEM_SPIN_ON_OWNER config ARCH_USE_QUEUED_SPINLOCKS bool config QUEUED_SPINLOCKS def_bool y if ARCH_USE_QUEUED_SPINLOCKS depends on SMP config ARCH_USE_QUEUED_RWLOCKS bool config QUEUED_RWLOCKS def_bool y if ARCH_USE_QUEUED_RWLOCKS depends on SMP 'commit info' class='commit-info'> authorThomas Gleixner <tglx@linutronix.de>2017-01-31 19:03:21 +0100 committerThomas Gleixner <tglx@linutronix.de>2017-01-31 20:22:18 +0100 commitaaaec6fc755447a1d056765b11b24d8ff2b81366 (patch) treea7f4167960ee1df86739905b6ccdeb95465bfe5f /include/net/tc_act parent08d85f3ea99f1eeafc4e8507936190e86a16ee8c (diff)
x86/irq: Make irq activate operations symmetric
The recent commit which prevents double activation of interrupts unearthed interesting code in x86. The code (ab)uses irq_domain_activate_irq() to reconfigure an already activated interrupt. That trips over the prevention code now. Fix it by deactivating the interrupt before activating the new configuration. Fixes: 08d85f3ea99f1 "irqdomain: Avoid activating interrupts more than once" Reported-and-tested-by: Mike Galbraith <efault@gmx.de> Reported-and-tested-by: Borislav Petkov <bp@alien8.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Marc Zyngier <marc.zyngier@arm.com> Cc: stable@vger.kernel.org Link: http://lkml.kernel.org/r/alpine.DEB.2.20.1701311901580.3457@nanos
Diffstat (limited to 'include/net/tc_act')