@@ -223,32 +223,35 @@ struct irq_data {
223
223
* irq_chip::irq_set_affinity() when deactivated.
224
224
* IRQD_IRQ_ENABLED_ON_SUSPEND - Interrupt is enabled on suspend by irq pm if
225
225
* 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.
226
228
*/
227
229
enum {
228
230
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 ),
252
255
};
253
256
254
257
#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)
448
451
return __irqd_to_state (d ) & IRQD_AFFINITY_ON_ACTIVATE ;
449
452
}
450
453
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
+
451
464
#undef __irqd_to_state
452
465
453
466
static inline irq_hw_number_t irqd_to_hwirq (struct irq_data * d )
0 commit comments