hvm svm: Some code cleanups.

Signed-off-by: Keir Fraser <keir@xensource.com>
This commit is contained in:
Keir Fraser committed 2007-03-30 19:02:40 +01:00
1 parent fe9aa493d4
commit 85b2cf8f06
2 files changed
+18 -26

No files matched your search

+11 -18
View File
@@ -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;
+7 -8
View File
@@ -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);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.