@@ -209,6 +209,7 @@ struct irq_data {
209
209
* IRQD_IRQ_STARTED - Startup state of the interrupt
210
210
* IRQD_MANAGED_SHUTDOWN - Interrupt was shutdown due to empty affinity
211
211
* mask. Applies only to affinity managed irqs.
212
+ * IRQD_SINGLE_TARGET - IRQ allows only a single affinity target
212
213
*/
213
214
enum {
214
215
IRQD_TRIGGER_MASK = 0xf ,
@@ -228,6 +229,7 @@ enum {
228
229
IRQD_AFFINITY_MANAGED = (1 << 21 ),
229
230
IRQD_IRQ_STARTED = (1 << 22 ),
230
231
IRQD_MANAGED_SHUTDOWN = (1 << 23 ),
232
+ IRQD_SINGLE_TARGET = (1 << 24 ),
231
233
};
232
234
233
235
#define __irqd_to_state (d ) ACCESS_PRIVATE((d)->common, state_use_accessors)
@@ -276,6 +278,20 @@ static inline bool irqd_is_level_type(struct irq_data *d)
276
278
return __irqd_to_state (d ) & IRQD_LEVEL ;
277
279
}
278
280
281
+ /*
282
+ * Must only be called of irqchip.irq_set_affinity() or low level
283
+ * hieararchy domain allocation functions.
284
+ */
285
+ static inline void irqd_set_single_target (struct irq_data * d )
286
+ {
287
+ __irqd_to_state (d ) |= IRQD_SINGLE_TARGET ;
288
+ }
289
+
290
+ static inline bool irqd_is_single_target (struct irq_data * d )
291
+ {
292
+ return __irqd_to_state (d ) & IRQD_SINGLE_TARGET ;
293
+ }
294
+
279
295
static inline bool irqd_is_wakeup_set (struct irq_data * d )
280
296
{
281
297
return __irqd_to_state (d ) & IRQD_WAKEUP_STATE ;
0 commit comments