On Tue, Jan 18, 2022 at 02:06:55PM +0100, Paolo Bonzini wrote: > Sorry, hit send on the wrong window. This is the only patch that > will require a bit more work. > > On 1/18/22 13:52, Paolo Bonzini wrote: > >>@@ -124,6 +150,8 @@ void x86_cpus_init(X86MachineState *x86ms, > >>int default_cpu_version) > >> MachineState *ms = MACHINE(x86ms); > >> MachineClass *mc = MACHINE_GET_CLASS(x86ms); > >>+ /* Request AMX pemission for guest */ > >>+ x86_xsave_req_perm(); > >> x86_cpu_set_default_version(default_cpu_version); > > > >This should be done before creating a CPU with support for state > >component 18. It happens in kvm_init_vcpu, with the following > >call stack: > > > > kvm_init_vcpu > > kvm_vcpu_thread_fn > > kvm_start_vcpu_thread > > qemu_init_vcpu > > x86_cpu_realizefn > > > >The issue however is that this has to be done before > >KVM_GET_SUPPORTED_CPUID and KVM_CHECK_EXTENSION(KVM_CAP_XSAVE2). > > > >For the former, you can assume that anything returned by > >ARCH_GET_XCOMP_GUEST_PERM will be returned by > >KVM_GET_SUPPORTED_CPUID in CPUID[0xD].EDX:EAX, so you can: > > > >- add it to kvm_arch_get_supported_cpuid > > ... together with the other special cases (otherwise > x86_cpu_get_supported_feature_word complains that XTILEDATA is not > available) > > - change kvm_cpu_xsave_init to use host_cpuid instead of > kvm_arch_get_supported_cpuid. > > - call ARCH_REQ_XCOMP_GUEST_PERM from > x86_cpu_enable_xsave_components, with a conditional like > > if (kvm_enabled()) { > kvm_request_xsave_components(cpu, mask); > } > > KVM_CHECK_EXTENSION(KVM_CAP_XSAVE2) is actually not a problem; the > ioctl is only called from kvm_arch_init_vcpu and therefore after > x86_cpu_enable_xsave_components. > Paolo, thanks too much for those detailed steps! I have completed the new patch according to those steps, and work well.
Since this is only big change patch, the next version will be removed RFC. Thanks! Yang > Thanks, > > Paolo