2022-05-03 01:20:21

by Maciej S. Szmigiero

[permalink] [raw]
Subject: [PATCH v3 00/12] KVM: SVM: Fix soft int/ex re-injection

From: "Maciej S. Szmigiero" <[email protected]>

This series is an updated version of Sean's SVM soft interrupt/exception
re-injection fixes patch set, which in turn extended and generalized my
nSVM L1 -> L2 event injection fixes series.

Detailed list of changes in this version:
* "Downgraded" the commit affecting !nrips CPUs to just drop nested SVM
support for such parts instead of SVM support in general,

* Removed the BUG_ON() from svm_inject_irq() completely, instead of
replacing it with WARN() - Maxim has pointed out it can still be triggered
by userspace via KVM_SET_VCPU_EVENTS,

* Updated the new KVM self-test to switch to an alternate IDT before attempting
a second L1 -> L2 injection to cause intervening NPF again,

* Added a fix for L1/L2 NMI state confusion during L1 -> L2 NMI re-injection,

* Updated the new KVM self-test to also check for the NMI injection
scenario being fixed (that was found causing issues with a real guest),

* Changed "kvm_inj_virq" trace event "reinjected" field type to bool,

* Integrated the fix from patch 5 for nested_vmcb02_prepare_control() call
argument in svm_set_nested_state() to patch 1,

* Collected Maxim's "Reviewed-by:" for tracepoint patches.

Previous versions:
Sean's v2:
https://lore.kernel.org/kvm/[email protected]

Sean's v1:
https://lore.kernel.org/kvm/[email protected]

My original series:
https://lore.kernel.org/kvm/[email protected]

Maciej S. Szmigiero (4):
KVM: nSVM: Sync next_rip field from vmcb12 to vmcb02
KVM: SVM: Don't BUG if userspace injects an interrupt with GIF=0
KVM: nSVM: Transparently handle L1 -> L2 NMI re-injection
KVM: selftests: nSVM: Add svm_nested_soft_inject_test

Sean Christopherson (8):
KVM: SVM: Unwind "speculative" RIP advancement if INTn injection
"fails"
KVM: SVM: Stuff next_rip on emulated INT3 injection if NRIPS is
supported
KVM: SVM: Re-inject INT3/INTO instead of retrying the instruction
KVM: SVM: Re-inject INTn instead of retrying the insn on "failure"
KVM: x86: Trace re-injected exceptions
KVM: x86: Print error code in exception injection tracepoint iff valid
KVM: x86: Differentiate Soft vs. Hard IRQs vs. reinjected in
tracepoint
KVM: nSVM: Drop support for CPUs without NRIPS (NextRIP Save) support

arch/x86/include/asm/kvm_host.h | 2 +-
arch/x86/kvm/svm/nested.c | 55 ++++-
arch/x86/kvm/svm/svm.c | 179 +++++++++++----
arch/x86/kvm/svm/svm.h | 8 +-
arch/x86/kvm/trace.h | 31 ++-
arch/x86/kvm/vmx/vmx.c | 4 +-
arch/x86/kvm/x86.c | 20 +-
tools/testing/selftests/kvm/.gitignore | 3 +-
tools/testing/selftests/kvm/Makefile | 1 +
.../selftests/kvm/include/x86_64/processor.h | 17 ++
.../selftests/kvm/include/x86_64/svm_util.h | 12 +
.../kvm/x86_64/svm_nested_soft_inject_test.c | 217 ++++++++++++++++++
12 files changed, 478 insertions(+), 71 deletions(-)
create mode 100644 tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c


2022-05-04 12:02:08

by Sean Christopherson

[permalink] [raw]
Subject: Re: [PATCH v3 00/12] KVM: SVM: Fix soft int/ex re-injection

On Mon, May 02, 2022, Maciej S. Szmigiero wrote:
> From: "Maciej S. Szmigiero" <[email protected]>
>
> This series is an updated version of Sean's SVM soft interrupt/exception
> re-injection fixes patch set, which in turn extended and generalized my
> nSVM L1 -> L2 event injection fixes series.
>
> Detailed list of changes in this version:
> * "Downgraded" the commit affecting !nrips CPUs to just drop nested SVM
> support for such parts instead of SVM support in general,
>
> * Removed the BUG_ON() from svm_inject_irq() completely, instead of
> replacing it with WARN() - Maxim has pointed out it can still be triggered
> by userspace via KVM_SET_VCPU_EVENTS,
>
> * Updated the new KVM self-test to switch to an alternate IDT before attempting
> a second L1 -> L2 injection to cause intervening NPF again,
>
> * Added a fix for L1/L2 NMI state confusion during L1 -> L2 NMI re-injection,
>
> * Updated the new KVM self-test to also check for the NMI injection
> scenario being fixed (that was found causing issues with a real guest),
>
> * Changed "kvm_inj_virq" trace event "reinjected" field type to bool,
>
> * Integrated the fix from patch 5 for nested_vmcb02_prepare_control() call
> argument in svm_set_nested_state() to patch 1,
>
> * Collected Maxim's "Reviewed-by:" for tracepoint patches.
>
> Previous versions:
> Sean's v2:
> https://lore.kernel.org/kvm/[email protected]
>
> Sean's v1:
> https://lore.kernel.org/kvm/[email protected]
>
> My original series:
> https://lore.kernel.org/kvm/[email protected]
>
> Maciej S. Szmigiero (4):
> KVM: nSVM: Sync next_rip field from vmcb12 to vmcb02
> KVM: SVM: Don't BUG if userspace injects an interrupt with GIF=0

LOL, this should win some kind of award for most ridiculous multi-author patch :-)

Series looks good, thanks!

2022-05-04 13:07:12

by Maxim Levitsky

[permalink] [raw]
Subject: Re: [PATCH v3 00/12] KVM: SVM: Fix soft int/ex re-injection

On Tue, 2022-05-03 at 18:48 +0000, Sean Christopherson wrote:
> On Mon, May 02, 2022, Maciej S. Szmigiero wrote:
> > From: "Maciej S. Szmigiero" <[email protected]>
> >
> > This series is an updated version of Sean's SVM soft interrupt/exception
> > re-injection fixes patch set, which in turn extended and generalized my
> > nSVM L1 -> L2 event injection fixes series.
> >
> > Detailed list of changes in this version:
> > * "Downgraded" the commit affecting !nrips CPUs to just drop nested SVM
> > support for such parts instead of SVM support in general,
> >
> > * Removed the BUG_ON() from svm_inject_irq() completely, instead of
> > replacing it with WARN() - Maxim has pointed out it can still be triggered
> > by userspace via KVM_SET_VCPU_EVENTS,
> >
> > * Updated the new KVM self-test to switch to an alternate IDT before attempting
> > a second L1 -> L2 injection to cause intervening NPF again,
> >
> > * Added a fix for L1/L2 NMI state confusion during L1 -> L2 NMI re-injection,
> >
> > * Updated the new KVM self-test to also check for the NMI injection
> > scenario being fixed (that was found causing issues with a real guest),
> >
> > * Changed "kvm_inj_virq" trace event "reinjected" field type to bool,
> >
> > * Integrated the fix from patch 5 for nested_vmcb02_prepare_control() call
> > argument in svm_set_nested_state() to patch 1,
> >
> > * Collected Maxim's "Reviewed-by:" for tracepoint patches.
> >
> > Previous versions:
> > Sean's v2:
> > https://lore.kernel.org/kvm/[email protected]
> >
> > Sean's v1:
> > https://lore.kernel.org/kvm/[email protected]
> >
> > My original series:
> > https://lore.kernel.org/kvm/[email protected]
> >
> > Maciej S. Szmigiero (4):
> > KVM: nSVM: Sync next_rip field from vmcb12 to vmcb02
> > KVM: SVM: Don't BUG if userspace injects an interrupt with GIF=0
>
> LOL, this should win some kind of award for most ridiculous multi-author patch :-)
>
> Series looks good, thanks!
>
Well I think I, Paolo, and you hold the record for this, when we fixed the AVIC inhibition
races, remember?

Patch series also looks overall good to me, but I haven't checked everything to be honest.

Best regards,
Maxim Levitsky


2022-05-17 14:57:14

by Maciej S. Szmigiero

[permalink] [raw]
Subject: Re: [PATCH v3 00/12] KVM: SVM: Fix soft int/ex re-injection

On 2.05.2022 00:07, Maciej S. Szmigiero wrote:
> This series is an updated version of Sean's SVM soft interrupt/exception
> re-injection fixes patch set, which in turn extended and generalized my
> nSVM L1 -> L2 event injection fixes series.

@Paolo:
Can't see this series in kvm/queue, do you plan to merge it for 5.19?

Thanks,
Maciej

2022-05-18 03:37:48

by Maciej S. Szmigiero

[permalink] [raw]
Subject: Re: [PATCH v3 00/12] KVM: SVM: Fix soft int/ex re-injection

On 17.05.2022 18:46, Paolo Bonzini wrote:
> On 5/17/22 14:28, Maciej S. Szmigiero wrote:
>> On 2.05.2022 00:07, Maciej S. Szmigiero wrote:
>>> This series is an updated version of Sean's SVM soft interrupt/exception
>>> re-injection fixes patch set, which in turn extended and generalized my
>>> nSVM L1 -> L2 event injection fixes series.
>>
>> @Paolo:
>> Can't see this series in kvm/queue, do you plan to merge it for 5.19?
>
> Yes, FWIW my list right now is (from most likely to less likely but still doable):
>
> * deadlock (5.18)
>
> * PMU filter patches from alewis (5.18?)
>
> * architectural LBR
>
> * Like's perf HW_EVENT series
>
> * cache refresh
>
> * this one
>
> * nested dirty-log selftest
>
> * x2AVIC
>
> * dirty quota
>
> * CMCI
>
> * pfn functions
>
> * Vitaly's Hyper-V TLB
>

Ugh, that's a long TODO list...

Thanks for the update - waiting patiently then.

Thanks,
Maciej

2022-05-18 04:56:46

by Paolo Bonzini

[permalink] [raw]
Subject: Re: [PATCH v3 00/12] KVM: SVM: Fix soft int/ex re-injection

On 5/17/22 14:28, Maciej S. Szmigiero wrote:
> On 2.05.2022 00:07, Maciej S. Szmigiero wrote:
>> This series is an updated version of Sean's SVM soft interrupt/exception
>> re-injection fixes patch set, which in turn extended and generalized my
>> nSVM L1 -> L2 event injection fixes series.
>
> @Paolo:
> Can't see this series in kvm/queue, do you plan to merge it for 5.19?

Yes, FWIW my list right now is (from most likely to less likely but
still doable):

* deadlock (5.18)

* PMU filter patches from alewis (5.18?)

* architectural LBR

* Like's perf HW_EVENT series

* cache refresh

* this one

* nested dirty-log selftest

* x2AVIC

* dirty quota

* CMCI

* pfn functions

* Vitaly's Hyper-V TLB