Re: [PATCH v3 02/13] genirq: Define ack_irq() and eoi_irq() helpers
From: Marc Zyngier <maz@kernel.org>
Date: 2021-08-12 14:45:30
Also in:
lkml
On Thu, 12 Aug 2021 14:36:11 +0100, Valentin Schneider [off-list ref] wrote:
On 12/08/21 08:49, Marc Zyngier wrote:quoted
On Tue, 29 Jun 2021 13:49:59 +0100, Valentin Schneider [off-list ref] wrote:quoted
+void eoi_irq(struct irq_desc *desc) +{ + desc->irq_data.chip->irq_eoi(&desc->irq_data); + + if (desc->irq_data.chip->flags & IRQCHIP_AUTOMASKS_FLOW) + irq_state_clr_flow_masked(desc);I just realised that this has a good chance to result in a mess with KVM, and specially the way we let the vGIC deactivate an interrupt directly from the guest, without any SW intervention (the magic HW bit in the LRs).I didn't think to consider those. It can't ever be simple, can it...quoted
With this, interrupts routed to a guest (such as the timers) will always have the IRQD_IRQ_FLOW_MASKED flag set, which will never be cleared. I wonder whether this have a chance to interact badly with mask/unmask, or with the rest of the flow...Isn't it the other way around? That is, eoi_irq() will clear IRQD_IRQ_FLOW_MASKED regardless of what happens within chip->irq_eoi(), so we would end up with !IRQD_IRQ_FLOW_MASKED even if the (physical) IRQ remains Active (irqd_is_forwarded_to_vcpu() case).
Ah, I missed (again) that we always clear the flag, no matter what.
This does not entirely match reality (if the IRQ is still Active then it is still "flow-masked"), but AFAICT this doesn't impact our handling of forwarded IRQs: IRQD_IRQ_FLOW_MASKED is only really relevant from ack_irq() to eoi_irq(), and deactivation-from-the-guest (propagated via LR.HW=1) happens after that.
Right. So we can have an active interrupt that is not flow-masked. That's counter-intuitive, but that's the GIC architecture for you... I'll take the series for a ride in -next. If anything breaks, we should know pretty soon. Thanks, M. -- Without deviation from the norm, progress is not possible. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel