From: "Xin Li (Intel)" <xin@zytor.com>
To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
linux-pm@vger.kernel.org
Cc: seanjc@google.com, pbonzini@redhat.com, tglx@linutronix.de,
mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com,
x86@kernel.org, hpa@zytor.com, rafael@kernel.org,
pavel@kernel.org, brgerst@gmail.com, xin@zytor.com,
david.kaplan@amd.com, peterz@infradead.org,
andrew.cooper3@citrix.com, kprateek.nayak@amd.com,
arjan@linux.intel.com, chao.gao@intel.com,
rick.p.edgecombe@intel.com, dan.j.williams@intel.com
Subject: [RFC PATCH v1 0/5] x86/boot, KVM: Move VMXON/VMXOFF handling from KVM to CPU lifecycle
Date: Tue, 9 Sep 2025 11:28:20 -0700 [thread overview]
Message-ID: <20250909182828.1542362-1-xin@zytor.com> (raw)
There is now broad consensus that TDX should be decoupled from KVM. To
achieve this separation, it is necessary to move VMXON/VMXOFF handling
out of KVM. Sean has also discussed this approach in several TDX patch
series threads, e.g. [1], and has already done a round of refactoring
in KVM [2].
The simplest thing we could think of is to execute VMXON during the CPU
startup phase and VMXOFF during the CPU shutdown phase, even although
this leaves VMX on when it doesn't strictly need to be on.
This RFC series demonstrates the idea and seeks feedback from the KVM
community on its viability.
The benefits of doing VMXON/VMXOFF in the CPU startup/shutdown phase:
1) Eliminates in-flight VMXON/VMXOFF during CPU hotplug, system reboot,
or kexec while KVM is loading or unloading.
2) Removes the “insane dances” for handling unexpected VMXON/VMXOFF
execution, including the emergency reboot disable virtualization
mechanism and kvm_rebooting.
3) Allows KVM and other hypervisors on Linux to omit explicit VMX
enable/disable logic.
This RFC series follows the direction and does the following:
1) Move VMXON to the CPU startup phase instead of KVM initialization.
2) Move VMXOFF to the CPU shutdown phase instead of KVM teardown.
3) Move VMCLEAR of VMCSs to cpu_disable_virtualization().
4) Remove the emergency reboot disable virtualization mechanism.
5) Remove kvm_rebooting.
AMD SVM support is not included, as I do not have access to AMD hardware,
but adding it should be straightforward (currently broken in this RFC).
Note, the first two patches should ideally be merged into a single patch
to avoid breaking functionality in between. However, they are kept
separate in this RFC for clarity and easier review. I will merge them
if this approach proves viable.
[1] https://lore.kernel.org/lkml/ZhawUG0BduPVvVhN@google.com/
[2] https://lore.kernel.org/lkml/20240830043600.127750-1-seanjc@google.com/
Xin Li (Intel) (5):
x86/boot: Shift VMXON from KVM init to CPU startup phase
x86/boot: Move VMXOFF from KVM teardown to CPU shutdown phase
x86/shutdown, KVM: VMX: Move VMCLEAR of VMCSs to
cpu_disable_virtualization()
x86/reboot: Remove emergency_reboot_disable_virtualization()
KVM: Remove kvm_rebooting and its references
arch/x86/include/asm/kvm_host.h | 1 -
arch/x86/include/asm/processor.h | 3 +
arch/x86/include/asm/reboot.h | 11 --
arch/x86/include/asm/vmx.h | 5 +
arch/x86/kernel/cpu/common.c | 162 +++++++++++++++++++++++++++
arch/x86/kernel/crash.c | 5 +-
arch/x86/kernel/process.c | 3 +
arch/x86/kernel/reboot.c | 88 ++-------------
arch/x86/kernel/smp.c | 3 +-
arch/x86/kernel/smpboot.c | 6 +
arch/x86/kvm/svm/svm.c | 8 --
arch/x86/kvm/svm/vmenter.S | 42 +++----
arch/x86/kvm/vmx/main.c | 1 -
arch/x86/kvm/vmx/tdx.c | 4 +-
arch/x86/kvm/vmx/vmcs.h | 10 +-
arch/x86/kvm/vmx/vmenter.S | 2 -
arch/x86/kvm/vmx/vmx.c | 185 ++-----------------------------
arch/x86/kvm/x86.c | 18 +--
arch/x86/power/cpu.c | 10 +-
include/linux/kvm_host.h | 9 --
virt/kvm/kvm_main.c | 29 +----
21 files changed, 230 insertions(+), 375 deletions(-)
base-commit: 76eeb9b8de9880ca38696b2fb56ac45ac0a25c6c
--
2.51.0
next reply other threads:[~2025-09-09 18:31 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-09 18:28 Xin Li (Intel) [this message]
2025-09-09 18:28 ` [RFC PATCH v1 1/5] x86/boot: Shift VMXON from KVM init to CPU startup phase Xin Li (Intel)
2025-09-10 5:37 ` Adrian Hunter
2025-09-10 7:25 ` Chao Gao
2025-09-11 6:57 ` Xin Li
2025-09-10 8:02 ` Huang, Kai
2025-09-10 11:10 ` Chao Gao
2025-09-10 11:35 ` Huang, Kai
2025-09-10 13:13 ` Arjan van de Ven
2025-09-10 20:52 ` Huang, Kai
2025-09-09 18:28 ` [RFC PATCH v1 2/5] x86/boot: Move VMXOFF from KVM teardown to CPU shutdown phase Xin Li (Intel)
2025-09-09 18:28 ` [RFC PATCH v1 3/5] x86/shutdown, KVM: VMX: Move VMCLEAR of VMCSs to cpu_disable_virtualization() Xin Li (Intel)
2025-09-09 18:28 ` [RFC PATCH v1 4/5] x86/reboot: Remove emergency_reboot_disable_virtualization() Xin Li (Intel)
2025-09-09 18:28 ` [RFC PATCH v1 5/5] KVM: Remove kvm_rebooting and its references Xin Li (Intel)
2025-09-16 17:56 ` Sean Christopherson
2025-09-17 16:51 ` Xin Li
2025-09-17 23:02 ` Sean Christopherson
2025-09-11 14:20 ` [RFC PATCH v1 0/5] x86/boot, KVM: Move VMXON/VMXOFF handling from KVM to CPU lifecycle Sean Christopherson
2025-09-11 15:20 ` Dave Hansen
2025-09-16 17:29 ` Sean Christopherson
2025-09-11 17:04 ` Arjan van de Ven
2025-09-16 17:54 ` Sean Christopherson
2025-09-16 18:25 ` Jim Mattson
2025-09-17 13:48 ` Arjan van de Ven
2025-09-17 17:30 ` Xin Li
2025-09-17 22:40 ` Sean Christopherson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250909182828.1542362-1-xin@zytor.com \
--to=xin@zytor.com \
--cc=andrew.cooper3@citrix.com \
--cc=arjan@linux.intel.com \
--cc=bp@alien8.de \
--cc=brgerst@gmail.com \
--cc=chao.gao@intel.com \
--cc=dan.j.williams@intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=david.kaplan@amd.com \
--cc=hpa@zytor.com \
--cc=kprateek.nayak@amd.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pavel@kernel.org \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=rafael@kernel.org \
--cc=rick.p.edgecombe@intel.com \
--cc=seanjc@google.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox