On 6/10/19 4:49 PM, Andrii Anisov wrote:
Hello Julien,
Hi Andrii,
On 31.05.19 20:11, Julien Grall wrote:
Here my take on the commit message:
gic_interrupt() was implemented using a loop to limit the cost of the
trap if there are multiple interrupts pending.
At the moment, interrupts are unmasked by gic_interrupt() before
calling do_{IRQ, LPI}(). In the case of handling an interrupt routed
to guests, its priority will be dropped, via desc->handler->end()
called from do_irq(), with interrupt unmasked.
In other words:
- Until the priority is dropped, only higher priority interrupt
can be received. Today, only Xen interrupts have higher priority.
- As soon as priority is dropped, any interrupt can be received.
This means the purpose of the loop in gic_interrupt() is defeated as
all interrupts may get trapped earlier. To reinstate the purpose of
the loop (and prevent the trap), interrupts should be masked when
dropping the priority.
For interrupts routed to Xen, priority will always be dropped with
interrupts masked. So the issue is not present. However, it means that
we are pointless try to mask the interrupts.
To avoid conflicting behavior between interrupt handling,
gic_interrupt() is now keeping interrupts masked and defer the
decision to do_{LPI, IRQ}.
It is OK with me.
Are you waiting from me more of
I was. But I also had time to think about the commit message and I would
be happy to commit with just what it is currently written.
I have now applied to my staging branch with my acked-by. I will commit
it tonight.
Thank you for the patch,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel