Skip to contentSkip to conversation

Patch "KVM: VMX: Convert vcpu_vmx.exit_reason to a union" has been added to the 5.10-stable tree

DISCUSSION Sean Christopherson 2 participants 3 messages Apr 19, 2021 – Apr 20, 2021 1 message not in the archive Stable branch

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

#1 lore raw

+Paolo

Quoted 7 lines · Sasha Levin

This is a note to let you know that I've just added the patch titled

KVM: VMX: Convert vcpu_vmx.exit_reason to a union

to the 5.10-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

Quoted 6 lines

The filename of the patch is:
kvm-vmx-convert-vcpu_vmx.exit_reason-to-a-union.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

I'm not sure we want this going into stable kernels, even for 5.10 and 5.11. I assume it got pulled in to resolve a conflict with commit 04c4f2ee3f68 ("KVM:
VMX: Don't use vcpu->run->internal.ndata as an array index"), but that's should be trivial to resolve since it's just a collision with surrounding code.

Maybe we'll end up with a more painful conflict in the future that would be best solved by grabbing this refactoring, but I don't think we're there yet.

Quoted 34 lines

commit 1499b54db7d9e7e5f5014307e8391e3ad7986f1f

Author: Sean Christopherson <[email protected]>
Date:   Fri Nov 6 17:03:12 2020 +0800

KVM: VMX: Convert vcpu_vmx.exit_reason to a union

[ Upstream commit 8e53324021645f820a01bf8aa745711c802c8542 ]

Convert vcpu_vmx.exit_reason from a u32 to a union (of size u32). The full VM_EXIT_REASON field is comprised of a 16-bit basic exit reason in bits 15:0, and single-bit modifiers in bits 31:16.

Historically, KVM has only had to worry about handling the "failed VM-Entry" modifier, which could only be set in very specific flows and required dedicated handling. I.e. manually stripping the FAILED_VMENTRY bit was a somewhat viable approach. But even with only a single bit to worry about, KVM has had several bugs related to comparing a basic exit reason against the full exit reason store in vcpu_vmx.

Upcoming Intel features, e.g. SGX, will add new modifier bits that can be set on more or less any VM-Exit, as opposed to the significantly more restricted FAILED_VMENTRY, i.e. correctly handling everything in one-off flows isn't scalable. Tracking exit reason in a union forces code to explicitly choose between consuming the full exit reason and the basic exit, and is a convenient way to document and access the modifiers.

No functional change intended.

Message-Id: <[email protected]>

maintainer
#2 lore raw
Quoted 14 lines · Sean Christopherson

+Paolo

Quoted 11 lines · Sasha Levin

This is a note to let you know that I've just added the patch titled

KVM: VMX: Convert vcpu_vmx.exit_reason to a union

to the 5.10-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
kvm-vmx-convert-vcpu_vmx.exit_reason-to-a-union.patch
and it can be found in the queue-5.10 subdirectory.

Quoted 6 lines
Quoted 2 lines

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

I'm not sure we want this going into stable kernels, even for 5.10 and 5.11. I assume it got pulled in to resolve a conflict with commit 04c4f2ee3f68 ("KVM:
VMX: Don't use vcpu->run->internal.ndata as an array index"), but that's should

Right.

Quoted 1 line

be trivial to resolve since it's just a collision with surrounding code.

That's probably right too.

Quoted 2 lines

Maybe we'll end up with a more painful conflict in the future that would be best solved by grabbing this refactoring, but I don't think we're there yet.

This is the tricky part: when we start having these conflicts it's usually too late to refactor, no one cares, and backports just don't happen.

I'd actually point to the file shuffling (commits like a821bab2d1ee ("KVM: VMX: Move VMX specific files to a "vmx" subdirectory")) you did a few years ago in arch/x86/kvm/ as an example to why we can't wait: those changes made a lot of sense upstream, but for stable kernels it meant that patches were now trying to touch the wrong files and would often fail or do the wrong thing.

On hindsight, we probably should have moved files around in stable trees as well to match what upstream had, but at this point it's too late to go back and fix that, and we're stuck manually editing paths for the lifetime of most of the LTS trees.

Signature · 2 lines
Thanks,
Sasha
#3 lore raw
Quoted 15 lines · Sasha Levin
Quoted 2 lines · Sean Christopherson

Maybe we'll end up with a more painful conflict in the future that would be best solved by grabbing this refactoring, but I don't think we're there yet.

This is the tricky part: when we start having these conflicts it's usually too late to refactor, no one cares, and backports just don't happen.

I'd actually point to the file shuffling (commits like a821bab2d1ee ("KVM: VMX: Move VMX specific files to a "vmx" subdirectory")) you did a few years ago in arch/x86/kvm/ as an example to why we can't wait: those changes made a lot of sense upstream, but for stable kernels it meant that patches were now trying to touch the wrong files and would often fail or do the wrong thing.

Quoted 4 lines

On hindsight, we probably should have moved files around in stable trees as well to match what upstream had, but at this point it's too late to go back and fix that, and we're stuck manually editing paths for the lifetime of most of the LTS trees.

And I guess there's also the argument that inducing even a handful of manual backports is more risky overall than taking this one "unnecessary" patch.

Objection withdrawn, I don't have a strong opinion either way :-)