mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
hvm svm: Some code cleanups.
Signed-off-by: Keir Fraser <keir@xensource.com>
This commit is contained in:
1 parent
fe9aa493d4
commit
85b2cf8f06
2 files changed
+18
-26
No files matched your search
+11
-18
@@ -70,7 +70,6 @@ u64 root_vmcb_pa[NR_CPUS] __read_mostly;
|
||||
|
||||
/* hardware assisted paging bits */
|
||||
extern int opt_hap_enabled;
|
||||
extern int hap_capable_system;
|
||||
|
||||
static inline void svm_inject_exception(struct vcpu *v, int trap,
|
||||
int ev, int error_code)
|
||||
@@ -920,16 +919,13 @@ void svm_npt_detect(void)
|
||||
{
|
||||
u32 eax, ebx, ecx, edx;
|
||||
|
||||
/* check CPUID for nested paging support */
|
||||
/* Check CPUID for nested paging support. */
|
||||
cpuid(0x8000000A, &eax, &ebx, &ecx, &edx);
|
||||
if ( edx & 0x01 ) /* nested paging */
|
||||
|
||||
if ( !(edx & 1) && opt_hap_enabled )
|
||||
{
|
||||
hap_capable_system = 1;
|
||||
}
|
||||
else if ( opt_hap_enabled )
|
||||
{
|
||||
printk(" nested paging is not supported by this CPU.\n");
|
||||
hap_capable_system = 0; /* no nested paging, we disable flag. */
|
||||
printk("SVM: Nested paging is not supported by this CPU.\n");
|
||||
opt_hap_enabled = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -944,7 +940,7 @@ int start_svm(void)
|
||||
ecx = cpuid_ecx(0x80000001);
|
||||
boot_cpu_data.x86_capability[5] = ecx;
|
||||
|
||||
if (!(test_bit(X86_FEATURE_SVME, &boot_cpu_data.x86_capability)))
|
||||
if ( !(test_bit(X86_FEATURE_SVME, &boot_cpu_data.x86_capability)) )
|
||||
return 0;
|
||||
|
||||
/* check whether SVM feature is disabled in BIOS */
|
||||
@@ -955,13 +951,13 @@ int start_svm(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ( (hsa[cpu] == NULL) && ((hsa[cpu] = alloc_host_save_area()) == NULL) )
|
||||
if ( ((hsa[cpu] = alloc_host_save_area()) == NULL) ||
|
||||
((root_vmcb[cpu] = alloc_vmcb()) == NULL) )
|
||||
return 0;
|
||||
|
||||
|
||||
rdmsr(MSR_EFER, eax, edx);
|
||||
eax |= EFER_SVME;
|
||||
wrmsr(MSR_EFER, eax, edx);
|
||||
printk("AMD SVM Extension is enabled for cpu %d.\n", cpu );
|
||||
|
||||
svm_npt_detect();
|
||||
|
||||
@@ -970,12 +966,9 @@ int start_svm(void)
|
||||
phys_hsa_lo = (u32) phys_hsa;
|
||||
phys_hsa_hi = (u32) (phys_hsa >> 32);
|
||||
wrmsr(MSR_K8_VM_HSAVE_PA, phys_hsa_lo, phys_hsa_hi);
|
||||
|
||||
if ( (root_vmcb[cpu] == NULL) &&
|
||||
((root_vmcb[cpu] = alloc_vmcb()) == NULL) )
|
||||
return 0;
|
||||
root_vmcb_pa[cpu] = virt_to_maddr(root_vmcb[cpu]);
|
||||
|
||||
root_vmcb_pa[cpu] = virt_to_maddr(root_vmcb[cpu]);
|
||||
|
||||
if ( cpu != 0 )
|
||||
return 1;
|
||||
|
||||
|
||||
@@ -27,9 +27,8 @@
|
||||
#include <asm/hap.h>
|
||||
|
||||
/* Xen command-line option to enable hardware-assisted paging */
|
||||
int opt_hap_enabled = 0;
|
||||
int opt_hap_enabled;
|
||||
boolean_param("hap", opt_hap_enabled);
|
||||
int hap_capable_system = 0;
|
||||
|
||||
/* Printouts */
|
||||
#define PAGING_PRINTK(_f, _a...) \
|
||||
@@ -49,14 +48,14 @@ void paging_domain_init(struct domain *d)
|
||||
p2m_init(d);
|
||||
shadow_domain_init(d);
|
||||
|
||||
if ( opt_hap_enabled && hap_capable_system && is_hvm_domain(d) )
|
||||
if ( opt_hap_enabled && is_hvm_domain(d) )
|
||||
hap_domain_init(d);
|
||||
}
|
||||
|
||||
/* vcpu paging struct initialization goes here */
|
||||
void paging_vcpu_init(struct vcpu *v)
|
||||
{
|
||||
if ( opt_hap_enabled && hap_capable_system && is_hvm_vcpu(v) )
|
||||
if ( opt_hap_enabled && is_hvm_vcpu(v) )
|
||||
hap_vcpu_init(v);
|
||||
else
|
||||
shadow_vcpu_init(v);
|
||||
@@ -67,7 +66,7 @@ int paging_domctl(struct domain *d, xen_domctl_shadow_op_t *sc,
|
||||
XEN_GUEST_HANDLE(void) u_domctl)
|
||||
{
|
||||
/* Here, dispatch domctl to the appropriate paging code */
|
||||
if ( opt_hap_enabled && hap_capable_system && is_hvm_domain(d) )
|
||||
if ( opt_hap_enabled && is_hvm_domain(d) )
|
||||
return hap_domctl(d, sc, u_domctl);
|
||||
else
|
||||
return shadow_domctl(d, sc, u_domctl);
|
||||
@@ -76,7 +75,7 @@ int paging_domctl(struct domain *d, xen_domctl_shadow_op_t *sc,
|
||||
/* Call when destroying a domain */
|
||||
void paging_teardown(struct domain *d)
|
||||
{
|
||||
if ( opt_hap_enabled && hap_capable_system && is_hvm_domain(d) )
|
||||
if ( opt_hap_enabled && is_hvm_domain(d) )
|
||||
hap_teardown(d);
|
||||
else
|
||||
shadow_teardown(d);
|
||||
@@ -85,7 +84,7 @@ void paging_teardown(struct domain *d)
|
||||
/* Call once all of the references to the domain have gone away */
|
||||
void paging_final_teardown(struct domain *d)
|
||||
{
|
||||
if ( opt_hap_enabled && hap_capable_system && is_hvm_domain(d) )
|
||||
if ( opt_hap_enabled && is_hvm_domain(d) )
|
||||
hap_final_teardown(d);
|
||||
else
|
||||
shadow_final_teardown(d);
|
||||
@@ -95,7 +94,7 @@ void paging_final_teardown(struct domain *d)
|
||||
* creation. */
|
||||
int paging_enable(struct domain *d, u32 mode)
|
||||
{
|
||||
if ( opt_hap_enabled && hap_capable_system && is_hvm_domain(d) )
|
||||
if ( opt_hap_enabled && is_hvm_domain(d) )
|
||||
return hap_enable(d, mode | PG_HAP_enable);
|
||||
else
|
||||
return shadow_enable(d, mode | PG_SH_enable);
|
||||
|
||||