|
| From: | Paolo Bonzini |
| Subject: | Re: [RFC PATCH 3/7] x86: Grant AMX permission for guest |
| Date: | Tue, 18 Jan 2022 14:06:55 +0100 |
| User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.4.0 |
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_realizefnThe 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.
Thanks, Paolo
| [Prev in Thread] | Current Thread | [Next in Thread] |