diff options
author | Alexander Graf <agraf@suse.de> | 2008-11-25 14:17:02 -0500 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2009-03-24 05:02:46 -0400 |
commit | 9962d032bbff0268f22068787831405f8468c8b4 (patch) | |
tree | 3a9cd94334d419097923c5c4140770c17aa06cc8 | |
parent | f0b85051d0f0891378a83db22c0786f1d756fbff (diff) |
KVM: SVM: Move EFER and MSR constants to generic x86 code
MSR_EFER_SVME_MASK, MSR_VM_CR and MSR_VM_HSAVE_PA are set in KVM
specific headers. Linux does have nice header files to collect
EFER bits and MSR IDs, so IMHO we should put them there.
While at it, I also changed the naming scheme to match that
of the other defines.
(introduced in v6)
Acked-by: Joerg Roedel <joro@8bytes.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Avi Kivity <avi@redhat.com>
-rw-r--r-- | arch/x86/include/asm/kvm_host.h | 1 | ||||
-rw-r--r-- | arch/x86/include/asm/msr-index.h | 7 | ||||
-rw-r--r-- | arch/x86/include/asm/svm.h | 4 | ||||
-rw-r--r-- | arch/x86/include/asm/virtext.h | 2 | ||||
-rw-r--r-- | arch/x86/kvm/svm.c | 6 |
5 files changed, 12 insertions, 8 deletions
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 730843d1d2f..2998efe8927 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <asm/pvclock-abi.h> | 22 | #include <asm/pvclock-abi.h> |
23 | #include <asm/desc.h> | 23 | #include <asm/desc.h> |
24 | #include <asm/mtrr.h> | 24 | #include <asm/mtrr.h> |
25 | #include <asm/msr-index.h> | ||
25 | 26 | ||
26 | #define KVM_MAX_VCPUS 16 | 27 | #define KVM_MAX_VCPUS 16 |
27 | #define KVM_MEMORY_SLOTS 32 | 28 | #define KVM_MEMORY_SLOTS 32 |
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h index 358acc59ae0..46e9646e7a6 100644 --- a/arch/x86/include/asm/msr-index.h +++ b/arch/x86/include/asm/msr-index.h | |||
@@ -18,11 +18,13 @@ | |||
18 | #define _EFER_LME 8 /* Long mode enable */ | 18 | #define _EFER_LME 8 /* Long mode enable */ |
19 | #define _EFER_LMA 10 /* Long mode active (read-only) */ | 19 | #define _EFER_LMA 10 /* Long mode active (read-only) */ |
20 | #define _EFER_NX 11 /* No execute enable */ | 20 | #define _EFER_NX 11 /* No execute enable */ |
21 | #define _EFER_SVME 12 /* Enable virtualization */ | ||
21 | 22 | ||
22 | #define EFER_SCE (1<<_EFER_SCE) | 23 | #define EFER_SCE (1<<_EFER_SCE) |
23 | #define EFER_LME (1<<_EFER_LME) | 24 | #define EFER_LME (1<<_EFER_LME) |
24 | #define EFER_LMA (1<<_EFER_LMA) | 25 | #define EFER_LMA (1<<_EFER_LMA) |
25 | #define EFER_NX (1<<_EFER_NX) | 26 | #define EFER_NX (1<<_EFER_NX) |
27 | #define EFER_SVME (1<<_EFER_SVME) | ||
26 | 28 | ||
27 | /* Intel MSRs. Some also available on other CPUs */ | 29 | /* Intel MSRs. Some also available on other CPUs */ |
28 | #define MSR_IA32_PERFCTR0 0x000000c1 | 30 | #define MSR_IA32_PERFCTR0 0x000000c1 |
@@ -360,4 +362,9 @@ | |||
360 | #define MSR_IA32_VMX_PROCBASED_CTLS2 0x0000048b | 362 | #define MSR_IA32_VMX_PROCBASED_CTLS2 0x0000048b |
361 | #define MSR_IA32_VMX_EPT_VPID_CAP 0x0000048c | 363 | #define MSR_IA32_VMX_EPT_VPID_CAP 0x0000048c |
362 | 364 | ||
365 | /* AMD-V MSRs */ | ||
366 | |||
367 | #define MSR_VM_CR 0xc0010114 | ||
368 | #define MSR_VM_HSAVE_PA 0xc0010117 | ||
369 | |||
363 | #endif /* _ASM_X86_MSR_INDEX_H */ | 370 | #endif /* _ASM_X86_MSR_INDEX_H */ |
diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h index 1b8afa78e86..82ada75f3eb 100644 --- a/arch/x86/include/asm/svm.h +++ b/arch/x86/include/asm/svm.h | |||
@@ -174,10 +174,6 @@ struct __attribute__ ((__packed__)) vmcb { | |||
174 | #define SVM_CPUID_FEATURE_SHIFT 2 | 174 | #define SVM_CPUID_FEATURE_SHIFT 2 |
175 | #define SVM_CPUID_FUNC 0x8000000a | 175 | #define SVM_CPUID_FUNC 0x8000000a |
176 | 176 | ||
177 | #define MSR_EFER_SVME_MASK (1ULL << 12) | ||
178 | #define MSR_VM_CR 0xc0010114 | ||
179 | #define MSR_VM_HSAVE_PA 0xc0010117ULL | ||
180 | |||
181 | #define SVM_VM_CR_SVM_DISABLE 4 | 177 | #define SVM_VM_CR_SVM_DISABLE 4 |
182 | 178 | ||
183 | #define SVM_SELECTOR_S_SHIFT 4 | 179 | #define SVM_SELECTOR_S_SHIFT 4 |
diff --git a/arch/x86/include/asm/virtext.h b/arch/x86/include/asm/virtext.h index 59363627523..e0f9aa16358 100644 --- a/arch/x86/include/asm/virtext.h +++ b/arch/x86/include/asm/virtext.h | |||
@@ -118,7 +118,7 @@ static inline void cpu_svm_disable(void) | |||
118 | 118 | ||
119 | wrmsrl(MSR_VM_HSAVE_PA, 0); | 119 | wrmsrl(MSR_VM_HSAVE_PA, 0); |
120 | rdmsrl(MSR_EFER, efer); | 120 | rdmsrl(MSR_EFER, efer); |
121 | wrmsrl(MSR_EFER, efer & ~MSR_EFER_SVME_MASK); | 121 | wrmsrl(MSR_EFER, efer & ~EFER_SVME); |
122 | } | 122 | } |
123 | 123 | ||
124 | /** Makes sure SVM is disabled, if it is supported on the CPU | 124 | /** Makes sure SVM is disabled, if it is supported on the CPU |
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 33407d95761..e4eb3fd91b9 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
@@ -198,7 +198,7 @@ static void svm_set_efer(struct kvm_vcpu *vcpu, u64 efer) | |||
198 | if (!npt_enabled && !(efer & EFER_LMA)) | 198 | if (!npt_enabled && !(efer & EFER_LMA)) |
199 | efer &= ~EFER_LME; | 199 | efer &= ~EFER_LME; |
200 | 200 | ||
201 | to_svm(vcpu)->vmcb->save.efer = efer | MSR_EFER_SVME_MASK; | 201 | to_svm(vcpu)->vmcb->save.efer = efer | EFER_SVME; |
202 | vcpu->arch.shadow_efer = efer; | 202 | vcpu->arch.shadow_efer = efer; |
203 | } | 203 | } |
204 | 204 | ||
@@ -292,7 +292,7 @@ static void svm_hardware_enable(void *garbage) | |||
292 | svm_data->tss_desc = (struct kvm_ldttss_desc *)(gdt + GDT_ENTRY_TSS); | 292 | svm_data->tss_desc = (struct kvm_ldttss_desc *)(gdt + GDT_ENTRY_TSS); |
293 | 293 | ||
294 | rdmsrl(MSR_EFER, efer); | 294 | rdmsrl(MSR_EFER, efer); |
295 | wrmsrl(MSR_EFER, efer | MSR_EFER_SVME_MASK); | 295 | wrmsrl(MSR_EFER, efer | EFER_SVME); |
296 | 296 | ||
297 | wrmsrl(MSR_VM_HSAVE_PA, | 297 | wrmsrl(MSR_VM_HSAVE_PA, |
298 | page_to_pfn(svm_data->save_area) << PAGE_SHIFT); | 298 | page_to_pfn(svm_data->save_area) << PAGE_SHIFT); |
@@ -559,7 +559,7 @@ static void init_vmcb(struct vcpu_svm *svm) | |||
559 | init_sys_seg(&save->ldtr, SEG_TYPE_LDT); | 559 | init_sys_seg(&save->ldtr, SEG_TYPE_LDT); |
560 | init_sys_seg(&save->tr, SEG_TYPE_BUSY_TSS16); | 560 | init_sys_seg(&save->tr, SEG_TYPE_BUSY_TSS16); |
561 | 561 | ||
562 | save->efer = MSR_EFER_SVME_MASK; | 562 | save->efer = EFER_SVME; |
563 | save->dr6 = 0xffff0ff0; | 563 | save->dr6 = 0xffff0ff0; |
564 | save->dr7 = 0x400; | 564 | save->dr7 = 0x400; |
565 | save->rflags = 2; | 565 | save->rflags = 2; |