diff options
author | Joerg Roedel <joerg.roedel@amd.com> | 2008-02-07 07:47:38 -0500 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2008-04-27 04:53:19 -0400 |
commit | 33bd6a0b3e8baed6469c8e68ea1b16cb50c4f5af (patch) | |
tree | 3f7d915c6146d6e490da9577f0e5e3923b34510b | |
parent | 9457a712a2f464c4b21bb7f78998775c69673a0c (diff) |
KVM: SVM: move feature detection to hardware setup code
By moving the SVM feature detection from the each_cpu code to the hardware
setup code it runs only once. As an additional advance the feature check is now
available earlier in the module setup process.
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
-rw-r--r-- | arch/x86/kvm/svm.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index ff3bc74af728..5f527dc0e162 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
@@ -302,7 +302,6 @@ static void svm_hardware_enable(void *garbage) | |||
302 | svm_data->asid_generation = 1; | 302 | svm_data->asid_generation = 1; |
303 | svm_data->max_asid = cpuid_ebx(SVM_CPUID_FUNC) - 1; | 303 | svm_data->max_asid = cpuid_ebx(SVM_CPUID_FUNC) - 1; |
304 | svm_data->next_asid = svm_data->max_asid + 1; | 304 | svm_data->next_asid = svm_data->max_asid + 1; |
305 | svm_features = cpuid_edx(SVM_CPUID_FUNC); | ||
306 | 305 | ||
307 | asm volatile ("sgdt %0" : "=m"(gdt_descr)); | 306 | asm volatile ("sgdt %0" : "=m"(gdt_descr)); |
308 | gdt = (struct desc_struct *)gdt_descr.address; | 307 | gdt = (struct desc_struct *)gdt_descr.address; |
@@ -411,6 +410,9 @@ static __init int svm_hardware_setup(void) | |||
411 | if (r) | 410 | if (r) |
412 | goto err_2; | 411 | goto err_2; |
413 | } | 412 | } |
413 | |||
414 | svm_features = cpuid_edx(SVM_CPUID_FUNC); | ||
415 | |||
414 | return 0; | 416 | return 0; |
415 | 417 | ||
416 | err_2: | 418 | err_2: |