On Fri, Aug 07, 2020 at 05:19:03PM +0200, Marco Elver wrote:
My hypothesis here is simply that kvm_wait() may be called in a place
where we get the same case I mentioned to Peter,
raw_local_irq_save(); /* or other IRQs off without tracing */
...
kvm_wait() /* IRQ state tracing gets confused */
...
raw_local_irq_restore();
and therefore, using raw variants in kvm_wait() works. It's also safe
because it doesn't call any other libraries that would result in corrupt
Yes, this is definitely an issue.
Tracing, we also musn't call into tracing when using raw_local_irq_*().
Because then we re-intoduce this same issue all over again.
Both halt() and safe_halt() are more paravirt calls, but given we're in
a KVM paravirt call already, I suppose we can directly use native_*()
here.
Something like so then... I suppose, but then the Xen variants need TLC
too.