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

Commit 77694b40 authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

genirq; Add fasteoi irq_chip quirk



Some chips want irq_eoi() only called when an interrupt is actually
handled. So they have checks for INPROGRESS and DISABLED in their
irq_eoi callbacks. Add a chip flag, which allows to handle that in the
generic code. No impact on the fastpath.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 78129576
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -329,9 +329,11 @@ struct irq_chip {
 * irq_chip specific flags
 *
 * IRQCHIP_SET_TYPE_MASKED:	Mask before calling chip.irq_set_type()
 * IRQCHIP_EOI_IF_HANDLED:	Only issue irq_eoi() when irq was handled
 */
enum {
	IRQCHIP_SET_TYPE_MASKED		= (1 <<  0),
	IRQCHIP_EOI_IF_HANDLED		= (1 <<  1),
};

/* This include will go away once we isolated irq_desc usage to core code */
+8 −1
Original line number Diff line number Diff line
@@ -515,9 +515,16 @@ handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc)
	}
	preflow_handler(desc);
	handle_irq_event(desc);
out:

out_eoi:
	desc->irq_data.chip->irq_eoi(&desc->irq_data);
out_unlock:
	raw_spin_unlock(&desc->lock);
	return;
out:
	if (!(desc->irq_data.chip->flags & IRQCHIP_EOI_IF_HANDLED))
		goto out_eoi;
	goto out_unlock;
}

/**