 66cdd0ceaf
			
		
	
	
	66cdd0ceaf
	
	
	
		
			
			Pull KVM updates from Marcelo Tosatti: "Considerable KVM/PPC work, x86 kvmclock vsyscall support, IA32_TSC_ADJUST MSR emulation, amongst others." Fix up trivial conflict in kernel/sched/core.c due to cross-cpu migration notifier added next to rq migration call-back. * tag 'kvm-3.8-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (156 commits) KVM: emulator: fix real mode segment checks in address linearization VMX: remove unneeded enable_unrestricted_guest check KVM: VMX: fix DPL during entry to protected mode x86/kexec: crash_vmclear_local_vmcss needs __rcu kvm: Fix irqfd resampler list walk KVM: VMX: provide the vmclear function and a bitmap to support VMCLEAR in kdump x86/kexec: VMCLEAR VMCSs loaded on all cpus if necessary KVM: MMU: optimize for set_spte KVM: PPC: booke: Get/set guest EPCR register using ONE_REG interface KVM: PPC: bookehv: Add EPCR support in mtspr/mfspr emulation KVM: PPC: bookehv: Add guest computation mode for irq delivery KVM: PPC: Make EPCR a valid field for booke64 and bookehv KVM: PPC: booke: Extend MAS2 EPN mask for 64-bit KVM: PPC: e500: Mask MAS2 EPN high 32-bits in 32/64 tlbwe emulation KVM: PPC: Mask ea's high 32-bits in 32/64 instr emulation KVM: PPC: e500: Add emulation helper for getting instruction ea KVM: PPC: bookehv64: Add support for interrupt handling KVM: PPC: bookehv: Remove GET_VCPU macro from exception handler KVM: PPC: booke: Fix get_tb() compile error on 64-bit KVM: PPC: e500: Silence bogus GCC warning in tlb code ...
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			2.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			2.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef ARCH_X86_KVM_CPUID_H
 | |
| #define ARCH_X86_KVM_CPUID_H
 | |
| 
 | |
| #include "x86.h"
 | |
| 
 | |
| void kvm_update_cpuid(struct kvm_vcpu *vcpu);
 | |
| struct kvm_cpuid_entry2 *kvm_find_cpuid_entry(struct kvm_vcpu *vcpu,
 | |
| 					      u32 function, u32 index);
 | |
| int kvm_dev_ioctl_get_supported_cpuid(struct kvm_cpuid2 *cpuid,
 | |
| 				      struct kvm_cpuid_entry2 __user *entries);
 | |
| int kvm_vcpu_ioctl_set_cpuid(struct kvm_vcpu *vcpu,
 | |
| 			     struct kvm_cpuid *cpuid,
 | |
| 			     struct kvm_cpuid_entry __user *entries);
 | |
| int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu *vcpu,
 | |
| 			      struct kvm_cpuid2 *cpuid,
 | |
| 			      struct kvm_cpuid_entry2 __user *entries);
 | |
| int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu,
 | |
| 			      struct kvm_cpuid2 *cpuid,
 | |
| 			      struct kvm_cpuid_entry2 __user *entries);
 | |
| void kvm_cpuid(struct kvm_vcpu *vcpu, u32 *eax, u32 *ebx, u32 *ecx, u32 *edx);
 | |
| 
 | |
| 
 | |
| static inline bool guest_cpuid_has_xsave(struct kvm_vcpu *vcpu)
 | |
| {
 | |
| 	struct kvm_cpuid_entry2 *best;
 | |
| 
 | |
| 	if (!static_cpu_has(X86_FEATURE_XSAVE))
 | |
| 		return 0;
 | |
| 
 | |
| 	best = kvm_find_cpuid_entry(vcpu, 1, 0);
 | |
| 	return best && (best->ecx & bit(X86_FEATURE_XSAVE));
 | |
| }
 | |
| 
 | |
| static inline bool guest_cpuid_has_tsc_adjust(struct kvm_vcpu *vcpu)
 | |
| {
 | |
| 	struct kvm_cpuid_entry2 *best;
 | |
| 
 | |
| 	best = kvm_find_cpuid_entry(vcpu, 7, 0);
 | |
| 	return best && (best->ebx & bit(X86_FEATURE_TSC_ADJUST));
 | |
| }
 | |
| 
 | |
| static inline bool guest_cpuid_has_smep(struct kvm_vcpu *vcpu)
 | |
| {
 | |
| 	struct kvm_cpuid_entry2 *best;
 | |
| 
 | |
| 	best = kvm_find_cpuid_entry(vcpu, 7, 0);
 | |
| 	return best && (best->ebx & bit(X86_FEATURE_SMEP));
 | |
| }
 | |
| 
 | |
| static inline bool guest_cpuid_has_fsgsbase(struct kvm_vcpu *vcpu)
 | |
| {
 | |
| 	struct kvm_cpuid_entry2 *best;
 | |
| 
 | |
| 	best = kvm_find_cpuid_entry(vcpu, 7, 0);
 | |
| 	return best && (best->ebx & bit(X86_FEATURE_FSGSBASE));
 | |
| }
 | |
| 
 | |
| static inline bool guest_cpuid_has_osvw(struct kvm_vcpu *vcpu)
 | |
| {
 | |
| 	struct kvm_cpuid_entry2 *best;
 | |
| 
 | |
| 	best = kvm_find_cpuid_entry(vcpu, 0x80000001, 0);
 | |
| 	return best && (best->ecx & bit(X86_FEATURE_OSVW));
 | |
| }
 | |
| 
 | |
| static inline bool guest_cpuid_has_pcid(struct kvm_vcpu *vcpu)
 | |
| {
 | |
| 	struct kvm_cpuid_entry2 *best;
 | |
| 
 | |
| 	best = kvm_find_cpuid_entry(vcpu, 1, 0);
 | |
| 	return best && (best->ecx & bit(X86_FEATURE_PCID));
 | |
| }
 | |
| 
 | |
| #endif
 |