@@ -223,32 +223,35 @@ struct irq_data {
223223 * irq_chip::irq_set_affinity() when deactivated.
224224 * IRQD_IRQ_ENABLED_ON_SUSPEND - Interrupt is enabled on suspend by irq pm if
225225 * irqchip have flag IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND set.
226+ * IRQD_RESEND_WHEN_IN_PROGRESS - Interrupt may fire when already in progress in which
227+ * case it must be resent at the next available opportunity.
226228 */
227229enum {
228230 IRQD_TRIGGER_MASK = 0xf ,
229- IRQD_SETAFFINITY_PENDING = (1 << 8 ),
230- IRQD_ACTIVATED = (1 << 9 ),
231- IRQD_NO_BALANCING = (1 << 10 ),
232- IRQD_PER_CPU = (1 << 11 ),
233- IRQD_AFFINITY_SET = (1 << 12 ),
234- IRQD_LEVEL = (1 << 13 ),
235- IRQD_WAKEUP_STATE = (1 << 14 ),
236- IRQD_MOVE_PCNTXT = (1 << 15 ),
237- IRQD_IRQ_DISABLED = (1 << 16 ),
238- IRQD_IRQ_MASKED = (1 << 17 ),
239- IRQD_IRQ_INPROGRESS = (1 << 18 ),
240- IRQD_WAKEUP_ARMED = (1 << 19 ),
241- IRQD_FORWARDED_TO_VCPU = (1 << 20 ),
242- IRQD_AFFINITY_MANAGED = (1 << 21 ),
243- IRQD_IRQ_STARTED = (1 << 22 ),
244- IRQD_MANAGED_SHUTDOWN = (1 << 23 ),
245- IRQD_SINGLE_TARGET = (1 << 24 ),
246- IRQD_DEFAULT_TRIGGER_SET = (1 << 25 ),
247- IRQD_CAN_RESERVE = (1 << 26 ),
248- IRQD_MSI_NOMASK_QUIRK = (1 << 27 ),
249- IRQD_HANDLE_ENFORCE_IRQCTX = (1 << 28 ),
250- IRQD_AFFINITY_ON_ACTIVATE = (1 << 29 ),
251- IRQD_IRQ_ENABLED_ON_SUSPEND = (1 << 30 ),
231+ IRQD_SETAFFINITY_PENDING = BIT (8 ),
232+ IRQD_ACTIVATED = BIT (9 ),
233+ IRQD_NO_BALANCING = BIT (10 ),
234+ IRQD_PER_CPU = BIT (11 ),
235+ IRQD_AFFINITY_SET = BIT (12 ),
236+ IRQD_LEVEL = BIT (13 ),
237+ IRQD_WAKEUP_STATE = BIT (14 ),
238+ IRQD_MOVE_PCNTXT = BIT (15 ),
239+ IRQD_IRQ_DISABLED = BIT (16 ),
240+ IRQD_IRQ_MASKED = BIT (17 ),
241+ IRQD_IRQ_INPROGRESS = BIT (18 ),
242+ IRQD_WAKEUP_ARMED = BIT (19 ),
243+ IRQD_FORWARDED_TO_VCPU = BIT (20 ),
244+ IRQD_AFFINITY_MANAGED = BIT (21 ),
245+ IRQD_IRQ_STARTED = BIT (22 ),
246+ IRQD_MANAGED_SHUTDOWN = BIT (23 ),
247+ IRQD_SINGLE_TARGET = BIT (24 ),
248+ IRQD_DEFAULT_TRIGGER_SET = BIT (25 ),
249+ IRQD_CAN_RESERVE = BIT (26 ),
250+ IRQD_MSI_NOMASK_QUIRK = BIT (27 ),
251+ IRQD_HANDLE_ENFORCE_IRQCTX = BIT (28 ),
252+ IRQD_AFFINITY_ON_ACTIVATE = BIT (29 ),
253+ IRQD_IRQ_ENABLED_ON_SUSPEND = BIT (30 ),
254+ IRQD_RESEND_WHEN_IN_PROGRESS = BIT (31 ),
252255};
253256
254257#define __irqd_to_state (d ) ACCESS_PRIVATE((d)->common, state_use_accessors)
@@ -448,6 +451,16 @@ static inline bool irqd_affinity_on_activate(struct irq_data *d)
448451 return __irqd_to_state (d ) & IRQD_AFFINITY_ON_ACTIVATE ;
449452}
450453
454+ static inline void irqd_set_resend_when_in_progress (struct irq_data * d )
455+ {
456+ __irqd_to_state (d ) |= IRQD_RESEND_WHEN_IN_PROGRESS ;
457+ }
458+
459+ static inline bool irqd_needs_resend_when_in_progress (struct irq_data * d )
460+ {
461+ return __irqd_to_state (d ) & IRQD_RESEND_WHEN_IN_PROGRESS ;
462+ }
463+
451464#undef __irqd_to_state
452465
453466static inline irq_hw_number_t irqd_to_hwirq (struct irq_data * d )
0 commit comments