[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] xen/arm: implement GICD_I[S/C]ACTIVER reads
Hi, On 27/03/2020 02:34, Stefano Stabellini wrote: It doesn't take into account the latest state of interrupts on other vCPUs. So I think your implementation is going to introduce a deadlock in the guest. Let's imagine a guest with 2 vCPUs (A and B) with the following setup: * The HW SPI 32 is routed to and serviced by vCPU B.* vCPU A will routinely wait for any pending SPI 32 to be finished before performing a specific task. In the current form of the vGIC, vCPU B will not exit to Xen when SPI 32 has been deactivated. Instead, the vCPU will continue to run until an unrelated trap happen (I/O emulation, IRQs...). Depending on your setup (think NULL scheduler) this may happen in a really long time (or never). Until the vCPU B exit to Xen, SPI 32 may be considered as active. Therefore vCPU A will keep waiting and be block until vCPU B is finally trapping in Xen. My example above is basically a cut down version of __synchronize_hardirq() in Linux. In practice, you may be lucky most of the times because there will be trap happening time to time. However, it also means the task you need to perform on vCPU A will be delayed. So I would not really bet on the trap here. You have two options: 1) Force the vCPU to trap when deactivating an interrupt 2) For the vCPUs to exiting when reading I{S,C}ACTIVER1) will incur cost on every interrupts which is not great. So I think your best option is 2) here. Cheers, -- Julien Grall
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |