diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2017-12-29 10:44:34 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2017-12-29 15:13:04 -0500 |
commit | 69790ba92b8d67eaee5e50b30a5b696d40664caf (patch) | |
tree | e7e30a5d302e20ead367302421d9cc1a30e2d956 | |
parent | da5dd9e854d2edd6b02ebfe28583052f922104da (diff) |
genirq: Introduce IRQD_CAN_RESERVE flag
Add a new flag to mark interrupts which can use reservation mode. This is
going to be used in subsequent patches to disable reservation mode for a
certain class of MSI devices.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Alexandru Chirvasitu <achirvasub@gmail.com>
Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Dou Liyang <douly.fnst@cn.fujitsu.com>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Maciej W. Rozycki <macro@linux-mips.org>
Cc: Mikael Pettersson <mikpelinux@gmail.com>
Cc: Josh Poulson <jopoulso@microsoft.com>
Cc: Mihai Costache <v-micos@microsoft.com>
Cc: Stephen Hemminger <sthemmin@microsoft.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: linux-pci@vger.kernel.org
Cc: Haiyang Zhang <haiyangz@microsoft.com>
Cc: Dexuan Cui <decui@microsoft.com>
Cc: Simon Xiao <sixiao@microsoft.com>
Cc: Saeed Mahameed <saeedm@mellanox.com>
Cc: Jork Loeser <Jork.Loeser@microsoft.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: devel@linuxdriverproject.org
Cc: KY Srinivasan <kys@microsoft.com>
Cc: Alan Cox <alan@linux.intel.com>
Cc: Sakari Ailus <sakari.ailus@intel.com>,
Cc: linux-media@vger.kernel.org
-rw-r--r-- | include/linux/irq.h | 17 | ||||
-rw-r--r-- | kernel/irq/debugfs.c | 1 |
2 files changed, 18 insertions, 0 deletions
diff --git a/include/linux/irq.h b/include/linux/irq.h index e140f69163b6..a0231e96a578 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
@@ -212,6 +212,7 @@ struct irq_data { | |||
212 | * mask. Applies only to affinity managed irqs. | 212 | * mask. Applies only to affinity managed irqs. |
213 | * IRQD_SINGLE_TARGET - IRQ allows only a single affinity target | 213 | * IRQD_SINGLE_TARGET - IRQ allows only a single affinity target |
214 | * IRQD_DEFAULT_TRIGGER_SET - Expected trigger already been set | 214 | * IRQD_DEFAULT_TRIGGER_SET - Expected trigger already been set |
215 | * IRQD_CAN_RESERVE - Can use reservation mode | ||
215 | */ | 216 | */ |
216 | enum { | 217 | enum { |
217 | IRQD_TRIGGER_MASK = 0xf, | 218 | IRQD_TRIGGER_MASK = 0xf, |
@@ -233,6 +234,7 @@ enum { | |||
233 | IRQD_MANAGED_SHUTDOWN = (1 << 23), | 234 | IRQD_MANAGED_SHUTDOWN = (1 << 23), |
234 | IRQD_SINGLE_TARGET = (1 << 24), | 235 | IRQD_SINGLE_TARGET = (1 << 24), |
235 | IRQD_DEFAULT_TRIGGER_SET = (1 << 25), | 236 | IRQD_DEFAULT_TRIGGER_SET = (1 << 25), |
237 | IRQD_CAN_RESERVE = (1 << 26), | ||
236 | }; | 238 | }; |
237 | 239 | ||
238 | #define __irqd_to_state(d) ACCESS_PRIVATE((d)->common, state_use_accessors) | 240 | #define __irqd_to_state(d) ACCESS_PRIVATE((d)->common, state_use_accessors) |
@@ -377,6 +379,21 @@ static inline bool irqd_is_managed_and_shutdown(struct irq_data *d) | |||
377 | return __irqd_to_state(d) & IRQD_MANAGED_SHUTDOWN; | 379 | return __irqd_to_state(d) & IRQD_MANAGED_SHUTDOWN; |
378 | } | 380 | } |
379 | 381 | ||
382 | static inline void irqd_set_can_reserve(struct irq_data *d) | ||
383 | { | ||
384 | __irqd_to_state(d) |= IRQD_CAN_RESERVE; | ||
385 | } | ||
386 | |||
387 | static inline void irqd_clr_can_reserve(struct irq_data *d) | ||
388 | { | ||
389 | __irqd_to_state(d) &= ~IRQD_CAN_RESERVE; | ||
390 | } | ||
391 | |||
392 | static inline bool irqd_can_reserve(struct irq_data *d) | ||
393 | { | ||
394 | return __irqd_to_state(d) & IRQD_CAN_RESERVE; | ||
395 | } | ||
396 | |||
380 | #undef __irqd_to_state | 397 | #undef __irqd_to_state |
381 | 398 | ||
382 | static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d) | 399 | static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d) |
diff --git a/kernel/irq/debugfs.c b/kernel/irq/debugfs.c index 7f608ac39653..acfaaef8672a 100644 --- a/kernel/irq/debugfs.c +++ b/kernel/irq/debugfs.c | |||
@@ -113,6 +113,7 @@ static const struct irq_bit_descr irqdata_states[] = { | |||
113 | BIT_MASK_DESCR(IRQD_SETAFFINITY_PENDING), | 113 | BIT_MASK_DESCR(IRQD_SETAFFINITY_PENDING), |
114 | BIT_MASK_DESCR(IRQD_AFFINITY_MANAGED), | 114 | BIT_MASK_DESCR(IRQD_AFFINITY_MANAGED), |
115 | BIT_MASK_DESCR(IRQD_MANAGED_SHUTDOWN), | 115 | BIT_MASK_DESCR(IRQD_MANAGED_SHUTDOWN), |
116 | BIT_MASK_DESCR(IRQD_CAN_RESERVE), | ||
116 | 117 | ||
117 | BIT_MASK_DESCR(IRQD_FORWARDED_TO_VCPU), | 118 | BIT_MASK_DESCR(IRQD_FORWARDED_TO_VCPU), |
118 | 119 | ||