kvm: x86: Add support for getting/setting expanded xstate buffer
With KVM_CAP_XSAVE, userspace uses a hardcoded 4KB buffer to get/set xstate data from/to KVM. This doesn't work when dynamic xfeatures (e.g. AMX) are exposed to the guest as they require a larger buffer size. Introduce a new capability (KVM_CAP_XSAVE2). Userspace VMM gets the required xstate buffer size via KVM_CHECK_EXTENSION(KVM_CAP_XSAVE2). KVM_SET_XSAVE is extended to work with both legacy and new capabilities by doing properly-sized memdup_user() based on the guest fpu container. KVM_GET_XSAVE is kept for backward-compatible reason. Instead, KVM_GET_XSAVE2 is introduced under KVM_CAP_XSAVE2 as the preferred interface for getting xstate buffer (4KB or larger size) from KVM (Link: https://lkml.org/lkml/2021/12/15/510 ) Also, update the api doc with the new KVM_GET_XSAVE2 ioctl. Signed-off-by:Guang Zeng <guang.zeng@intel.com> Signed-off-by:
Wei Wang <wei.w.wang@intel.com> Signed-off-by:
Jing Liu <jing2.liu@intel.com> Signed-off-by:
Kevin Tian <kevin.tian@intel.com> Signed-off-by:
Yang Zhong <yang.zhong@intel.com> Message-Id: <20220105123532.12586-19-yang.zhong@intel.com> Signed-off-by:
Paolo Bonzini <pbonzini@redhat.com>
Showing
- Documentation/virt/kvm/api.rst 40 additions, 2 deletionsDocumentation/virt/kvm/api.rst
- arch/x86/include/uapi/asm/kvm.h 15 additions, 1 deletionarch/x86/include/uapi/asm/kvm.h
- arch/x86/kvm/cpuid.c 1 addition, 1 deletionarch/x86/kvm/cpuid.c
- arch/x86/kvm/cpuid.h 2 additions, 0 deletionsarch/x86/kvm/cpuid.h
- arch/x86/kvm/x86.c 44 additions, 1 deletionarch/x86/kvm/x86.c
- include/uapi/linux/kvm.h 4 additions, 0 deletionsinclude/uapi/linux/kvm.h
Please register or sign in to comment