On Wed, Mar 16, 2022 at 04:57:39PM +0100, Peter Krempa wrote: > On Tue, Mar 08, 2022 at 12:34:38 +0100, Paolo Bonzini wrote: > > From: Yang Zhong <yang.zh...@intel.com> > > > > Kernel allocates 4K xstate buffer by default. For XSAVE features > > which require large state component (e.g. AMX), Linux kernel > > dynamically expands the xstate buffer only after the process has > > acquired the necessary permissions. Those are called dynamically- > > enabled XSAVE features (or dynamic xfeatures). > > > > There are separate permissions for native tasks and guests. > > > > Qemu should request the guest permissions for dynamic xfeatures > > which will be exposed to the guest. This only needs to be done > > once before the first vcpu is created. > > > > KVM implemented one new ARCH_GET_XCOMP_SUPP system attribute API to > > get host side supported_xcr0 and Qemu can decide if it can request > > dynamically enabled XSAVE features permission. > > https://lore.kernel.org/all/20220126152210.3044876-1-pbonz...@redhat.com/ > > > > Suggested-by: Paolo Bonzini <pbonz...@redhat.com> > > Signed-off-by: Yang Zhong <yang.zh...@intel.com> > > Signed-off-by: Jing Liu <jing2....@intel.com> > > Message-Id: <20220217060434.52460-4-yang.zh...@intel.com> > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > > --- > > target/i386/cpu.c | 7 +++++ > > target/i386/cpu.h | 4 +++ > > target/i386/kvm/kvm-cpu.c | 12 ++++---- > > target/i386/kvm/kvm.c | 57 ++++++++++++++++++++++++++++++++++++++ > > target/i386/kvm/kvm_i386.h | 1 + > > 5 files changed, 75 insertions(+), 6 deletions(-) > > With this commit qemu crashes for me when invoking the following > QMP command: > > $ ~pipo/git/qemu.git/build/qemu-system-x86_64 -S -no-user-config -nodefaults > -nographic -machine none,accel=kvm -qmp stdio > {"QMP": {"version": {"qemu": {"micro": 90, "minor": 2, "major": 6}, > "package": "v7.0.0-rc0-8-g1d60bb4b14"}, "capabilities": ["oob"]}} > {'execute':'qmp_capabilities'} > {"return": {}} > {"execute":"qom-list-properties","arguments":{"typename":"max-x86_64-cpu"},"id":"libvirt-41"} > qemu-system-x86_64: ../target/i386/kvm/kvm-cpu.c:105: kvm_cpu_xsave_init: > Assertion `esa->size == eax' failed. > Aborted (core dumped) > > Note that the above is on a box with an 'AMD Ryzen 9 3900X'. > > Curiously on a laptop with an Intel chip (Intel(R) Core(TM) i7-10610U) > it seems to work.
Thanks for pointing this out! In my side, no AMD machine can be used to try this issue, I listed the FPU info from host kernel dmesg for reference. root@984fee00bf64:~# dmesg | grep fpu [ 0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x020: 'AVX-512 opmask' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x040: 'AVX-512 Hi256' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x080: 'AVX-512 ZMM_Hi256' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x200: 'Protection Keys User registers' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x400: 'PASID state' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x20000: 'AMX Tile config' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x40000: 'AMX Tile data' [ 0.000000] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256 [ 0.000000] x86/fpu: xstate_offset[5]: 832, xstate_sizes[5]: 64 [ 0.000000] x86/fpu: xstate_offset[6]: 896, xstate_sizes[6]: 512 [ 0.000000] x86/fpu: xstate_offset[7]: 1408, xstate_sizes[7]: 1024 [ 0.000000] x86/fpu: xstate_offset[9]: 2432, xstate_sizes[9]: 8 [ 0.000000] x86/fpu: xstate_offset[10]: 2440, xstate_sizes[10]: 8 [ 0.000000] x86/fpu: xstate_offset[17]: 2496, xstate_sizes[17]: 64 [ 0.000000] x86/fpu: xstate_offset[18]: 2560, xstate_sizes[18]: 8192 [ 0.000000] x86/fpu: Enabled xstate features 0x606e7, context size is 10752 bytes, using 'compacted' format. Paolo, if you have fix patch, I can double check this from Intel SPR server. thanks! Yang