diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2017-06-20 01:37:47 +0200 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2017-06-22 18:21:23 +0200 |
commit | 54fdf6a0875ca380647ac1cc9b5b8f2dbbbfa131 (patch) | |
tree | ff92b259f8fbacc29e7299d1e7e290b0b5d604ed /kernel | |
parent | c7d6c9dd871f42c4e0ce5563d2f684e78ea673cf (diff) | |
download | linux-stable-54fdf6a0875ca380647ac1cc9b5b8f2dbbbfa131.tar.gz linux-stable-54fdf6a0875ca380647ac1cc9b5b8f2dbbbfa131.tar.bz2 linux-stable-54fdf6a0875ca380647ac1cc9b5b8f2dbbbfa131.zip |
genirq: Introduce IRQD_MANAGED_SHUTDOWN
Affinity managed interrupts should keep their assigned affinity accross CPU
hotplug. To avoid magic hackery in device drivers, the core code shall
manage them transparently. This will set these interrupts into a managed
shutdown state when the last CPU of the assigned affinity mask goes
offline. The interrupt will be restarted when one of the CPUs in the
assigned affinity mask comes back online.
Introduce the necessary state flag and the accessor functions.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Keith Busch <keith.busch@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Christoph Hellwig <hch@lst.de>
Link: http://lkml.kernel.org/r/20170619235446.954523476@linutronix.de
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/irq/internals.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h index 040806f1124c..ca4666b4cd39 100644 --- a/kernel/irq/internals.h +++ b/kernel/irq/internals.h @@ -193,6 +193,16 @@ static inline void irqd_clr_move_pending(struct irq_data *d) __irqd_to_state(d) &= ~IRQD_SETAFFINITY_PENDING; } +static inline void irqd_set_managed_shutdown(struct irq_data *d) +{ + __irqd_to_state(d) |= IRQD_MANAGED_SHUTDOWN; +} + +static inline void irqd_clr_managed_shutdown(struct irq_data *d) +{ + __irqd_to_state(d) &= ~IRQD_MANAGED_SHUTDOWN; +} + static inline void irqd_clear(struct irq_data *d, unsigned int mask) { __irqd_to_state(d) &= ~mask; |