On Sun, Feb 07, 2021, Jing Liu wrote:Thanks for reviewing the patch.
The static xstate buffer kvm_xsave contains the extended registerFool me once, shame on you (Intel). Fool me twice, shame on me (KVM).
states, but it is not enough for dynamic features with large state.
Introduce a new capability called KVM_CAP_X86_XSAVE_EXTENSION to
detect if hardware has XSAVE extension (XFD). Meanwhile, add two
new ioctl interfaces to get/set the whole xstate using struct
kvm_xsave_extension buffer containing both static and dynamic
xfeatures. Reuse fill_xsave and load_xsave for both cases.
Signed-off-by: Jing Liu <jing2.liu@xxxxxxxxxxxxxxx>
---
arch/x86/include/uapi/asm/kvm.h | 5 +++
arch/x86/kvm/x86.c | 70 +++++++++++++++++++++++++--------
include/uapi/linux/kvm.h | 8 ++++
3 files changed, 66 insertions(+), 17 deletions(-)
diff --git a/arch/x86/include/uapi/asm/kvm.h b/arch/x86/include/uapi/asm/kvm.h
index 89e5f3d1bba8..bf785e89a728 100644
--- a/arch/x86/include/uapi/asm/kvm.h
+++ b/arch/x86/include/uapi/asm/kvm.h
@@ -362,6 +362,11 @@ struct kvm_xsave {
__u32 region[1024];
};
+/* for KVM_CAP_XSAVE_EXTENSION */
+struct kvm_xsave_extension {
+ __u32 region[3072];
As amusing as kvm_xsave_really_extended would be, the required size should be
discoverable, not hardcoded.
Nothing prevents a hardware vendor from inventingYes, this is a good way to avoid a dedicated capability. Thanks for the
a newfangled feature that requires yet more space.
As an alternative to adding a dedicated capability, can we leverage
GET_SUPPORTED_CPUID, leaf CPUID.0xD,
to enumerate the minimum required size andFor the state, an extreme case is using an old qemu as follows, but a
state
that the new ioctl() is available if the min size is greater than 1024?To enable a dynamic size kvm_xsave2(Thanks Jim's name suggestion), if things as
Or is that unnecessarily convoluted...