summaryrefslogtreecommitdiff
path: root/MAINTAINERS
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2020-03-04 16:46:47 -0500
committerPaolo Bonzini <pbonzini@redhat.com>2020-03-16 17:58:54 +0100
commitb518ba9fa691a3066ee935f6f317f827295453f0 (patch)
tree89c84e8a019ebcb8bde3b5a7ad221eb46c38798f /MAINTAINERS
parent64b5bd27042639dfcc1534f01771b7b871a02ffe (diff)
downloadlwn-b518ba9fa691a3066ee935f6f317f827295453f0.tar.gz
lwn-b518ba9fa691a3066ee935f6f317f827295453f0.zip
KVM: nSVM: implement check_nested_events for interrupts
The current implementation of physical interrupt delivery to a nested guest is quite broken. It relies on svm_interrupt_allowed returning false if VINTR=1 so that the interrupt can be injected from enable_irq_window, but this does not work for guests that do not intercept HLT or that rely on clearing the host IF to block physical interrupts while L2 runs. This patch can be split in two logical parts, but including only one breaks tests so I am combining both changes together. The first and easiest is simply to return true for svm_interrupt_allowed if HF_VINTR_MASK is set and HIF is set. This way the semantics of svm_interrupt_allowed are respected: svm_interrupt_allowed being false does not mean "call enable_irq_window", it means "interrupts cannot be injected now". After doing this, however, we need another place to inject the interrupt, and fortunately we already have one, check_nested_events, which nested SVM does not implement but which is meant exactly for this purpose. It is called before interrupts are injected, and it can therefore do the L2->L1 switch while leaving inject_pending_event none the wiser. This patch was developed together with Cathy Avery, who wrote the test and did a lot of the initial debugging. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'MAINTAINERS')
0 files changed, 0 insertions, 0 deletions