| From stable-bounces@linux.kernel.org Wed Jul 18 09:51:42 2007 |
| From: Joerg Roedel <joerg.roedel@amd.com> |
| Date: Wed, 18 Jul 2007 19:51:36 +0300 |
| Subject: KVM: SVM: Reliably detect if SVM was disabled by BIOS |
| To: stable@kernel.org |
| Cc: Joerg Roedel <joerg.roedel@amd.com>, Avi Kivity <avi@qumranet.com> |
| Message-ID: <11847774962911-git-send-email-avi@qumranet.com> |
| |
| From: Joerg Roedel <joerg.roedel@amd.com> |
| |
| This patch adds an implementation to the svm is_disabled function to |
| detect reliably if the BIOS disabled the SVM feature in the CPU. This |
| fixes the issues with kernel panics when loading the kvm-amd module on |
| machines where SVM is available but disabled. |
| |
| Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> |
| Signed-off-by: Avi Kivity <avi@qumranet.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/kvm/svm.c | 6 ++++++ |
| drivers/kvm/svm.h | 3 +++ |
| 2 files changed, 9 insertions(+) |
| |
| --- a/drivers/kvm/svm.c |
| +++ b/drivers/kvm/svm.c |
| @@ -1727,6 +1727,12 @@ static void svm_inject_page_fault(struct |
| |
| static int is_disabled(void) |
| { |
| + u64 vm_cr; |
| + |
| + rdmsrl(MSR_VM_CR, vm_cr); |
| + if (vm_cr & (1 << SVM_VM_CR_SVM_DISABLE)) |
| + return 1; |
| + |
| return 0; |
| } |
| |
| --- a/drivers/kvm/svm.h |
| +++ b/drivers/kvm/svm.h |
| @@ -175,8 +175,11 @@ struct __attribute__ ((__packed__)) vmcb |
| #define SVM_CPUID_FUNC 0x8000000a |
| |
| #define MSR_EFER_SVME_MASK (1ULL << 12) |
| +#define MSR_VM_CR 0xc0010114 |
| #define MSR_VM_HSAVE_PA 0xc0010117ULL |
| |
| +#define SVM_VM_CR_SVM_DISABLE 4 |
| + |
| #define SVM_SELECTOR_S_SHIFT 4 |
| #define SVM_SELECTOR_DPL_SHIFT 5 |
| #define SVM_SELECTOR_P_SHIFT 7 |