28.06.2021 19:19, Jim Mattson пишет:
It seems to me that the crux of the problem here is that run->ready_for_interrupt_injection returns true when it should return false. That's probably where you should focus your efforts.
OK, it was occasionally found that it actually worked that way in the past. This patch: https://www.lkml.org/lkml/2020/12/1/324 from Paolo removes the !kvm_event_needs_reinjection(vcpu) check. Paolo, maybe you can comment?
This isn't CPU-specific. Even when using EPT, you can potentially end up in this state after an EPT violation during IDT vectoring.
Well, in that case you will at least return the proper status about the EPT violation. But for EINTR this is definitely going to be CPU-specific. And a rather nasty one: running a ring3 guest with CPL=0 and IF always set, and having to check for ready_to_injection upon EINTR on just one CPU, is very unexpected. So I won't be claiming that Paolo's patch is incorrect. Maybe someone can think of the way to just not get such scenario on EINTR?