KVM: x86: Enable Intel AVX-512 for guest
Expose Intel AVX-512 feature bits to guest. Also add checks for xcr0 AVX512 related bits according to spec: http://download-software.intel.com/sites/default/files/managed/71/2e/319433-017.pdf Signed-off-by: Chao Peng <chao.p.peng@linux.intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									7f05db6a20
								
							
						
					
					
						commit
						612263b30c
					
				| @ -16,6 +16,7 @@ | ||||
| #define XSTATE_Hi16_ZMM		0x80 | ||||
| 
 | ||||
| #define XSTATE_FPSSE	(XSTATE_FP | XSTATE_SSE) | ||||
| #define XSTATE_AVX512	(XSTATE_OPMASK | XSTATE_ZMM_Hi256 | XSTATE_Hi16_ZMM) | ||||
| /* Bit 63 of XCR0 is reserved for future expansion */ | ||||
| #define XSTATE_EXTEND_MASK	(~(XSTATE_FPSSE | (1ULL << 63))) | ||||
| 
 | ||||
|  | ||||
| @ -317,7 +317,8 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, | ||||
| 	const u32 kvm_supported_word9_x86_features = | ||||
| 		F(FSGSBASE) | F(BMI1) | F(HLE) | F(AVX2) | F(SMEP) | | ||||
| 		F(BMI2) | F(ERMS) | f_invpcid | F(RTM) | f_mpx | F(RDSEED) | | ||||
| 		F(ADX) | F(SMAP); | ||||
| 		F(ADX) | F(SMAP) | F(AVX512F) | F(AVX512PF) | F(AVX512ER) | | ||||
| 		F(AVX512CD); | ||||
| 
 | ||||
| 	/* all calls to cpuid_count() should be made on the same cpu */ | ||||
| 	get_cpu(); | ||||
|  | ||||
| @ -666,6 +666,12 @@ int __kvm_set_xcr(struct kvm_vcpu *vcpu, u32 index, u64 xcr) | ||||
| 	if ((!(xcr0 & XSTATE_BNDREGS)) != (!(xcr0 & XSTATE_BNDCSR))) | ||||
| 		return 1; | ||||
| 
 | ||||
| 	if (xcr0 & XSTATE_AVX512) { | ||||
| 		if (!(xcr0 & XSTATE_YMM)) | ||||
| 			return 1; | ||||
| 		if ((xcr0 & XSTATE_AVX512) != XSTATE_AVX512) | ||||
| 			return 1; | ||||
| 	} | ||||
| 	kvm_put_guest_xcr0(vcpu); | ||||
| 	vcpu->arch.xcr0 = xcr0; | ||||
| 
 | ||||
|  | ||||
| @ -162,7 +162,8 @@ int kvm_write_guest_virt_system(struct x86_emulate_ctxt *ctxt, | ||||
| bool kvm_mtrr_valid(struct kvm_vcpu *vcpu, u32 msr, u64 data); | ||||
| 
 | ||||
| #define KVM_SUPPORTED_XCR0     (XSTATE_FP | XSTATE_SSE | XSTATE_YMM \ | ||||
| 				| XSTATE_BNDREGS | XSTATE_BNDCSR) | ||||
| 				| XSTATE_BNDREGS | XSTATE_BNDCSR \ | ||||
| 				| XSTATE_AVX512) | ||||
| extern u64 host_xcr0; | ||||
| 
 | ||||
| extern u64 kvm_supported_xcr0(void); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user