On 3 August 2017 at 21:28, Richard Henderson <r...@twiddle.net> wrote: > While looking at this, I think there's an error in helper_wfi. The early exit > for cpu_has_work should happen after the exception check.
No, that's deliberate; as Edgar says, the trap only happens "if the instruction would otherwise have caused the PE to enter a low-power state". The rationale AIUI is that the traps to EL2 are there so that when an EL guest does a WFI in its idle loop the EL2 hypervisor can gain control and give the CPU to something else. This obviously imposes overhead, so if the WFI wouldn't actually halt (because there's already a condition that will cause it to wake up) it's more efficient just to let the guest continue to execute. (It also means that NOP is a valid WFI implementation, though I think that's just a coincidental bonus.) In fact the architecture gives even more flexibility in that it only requires the trap to be taken "if the instruction does not complete in finite time in the absence of a Wakeup event", so you can do more complicated things like "just pause for a short period of time to see if an interrupt might come in and wake us up, before giving up and taking the trap to EL2". thanks -- PMM