Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e1ef8241 authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

genirq: Reflect IRQ_MOVE_PCNTXT in irq_data state



Required by x86.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 7f94226f
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -170,6 +170,8 @@ struct irq_data {
 * IRQD_LEVEL			- Interrupt is level triggered
 * IRQD_WAKEUP_STATE		- Interrupt is configured for wakeup
 *				  from suspend
 * IRDQ_MOVE_PCNTXT		- Interrupt can be moved in process
 *				  context
 */
enum {
	IRQD_TRIGGER_MASK		= 0xf,
@@ -179,6 +181,7 @@ enum {
	IRQD_AFFINITY_SET		= (1 << 12),
	IRQD_LEVEL			= (1 << 13),
	IRQD_WAKEUP_STATE		= (1 << 14),
	IRQD_MOVE_PCNTXT		= (1 << 15),
};

static inline bool irqd_is_setaffinity_pending(struct irq_data *d)
@@ -225,6 +228,11 @@ static inline bool irqd_is_wakeup_set(struct irq_data *d)
	return d->state_use_accessors & IRQD_WAKEUP_STATE;
}

static inline bool irqd_can_move_in_process_context(struct irq_data *d)
{
	return d->state_use_accessors & IRQD_MOVE_PCNTXT;
}

/**
 * struct irq_chip - hardware interrupt chip descriptor
 *
+3 −1
Original line number Diff line number Diff line
@@ -712,11 +712,13 @@ void irq_modify_status(unsigned int irq, unsigned long clr, unsigned long set)
	irq_settings_clr_and_set(desc, clr, set);

	irqd_clear(&desc->irq_data, IRQD_NO_BALANCING | IRQD_PER_CPU |
		   IRQD_TRIGGER_MASK | IRQD_LEVEL);
		   IRQD_TRIGGER_MASK | IRQD_LEVEL | IRQD_MOVE_PCNTXT);
	if (irq_settings_has_no_balance_set(desc))
		irqd_set(&desc->irq_data, IRQD_NO_BALANCING);
	if (irq_settings_is_per_cpu(desc))
		irqd_set(&desc->irq_data, IRQD_PER_CPU);
	if (irq_settings_can_move_pcntxt(desc))
		irqd_set(&desc->irq_data, IRQD_MOVE_PCNTXT);

	irqd_set(&desc->irq_data, irq_settings_get_trigger_mask(desc));