mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
x86/vvmx: Simplify per-CPU memory allocations
* Use XFREE() instead of opencoding it in nvmx_cpu_dead() * Avoid redundant evaluations of per_cpu() * Don't allocate vvmcs_buf at all if it isn't going to be used. It is never touched on hardware lacking the VMCS Shadowing feature. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Wei Liu <wei.liu2@citrix.com> Acked-by: Kevin Tian <kevin.tian@intel.com>
This commit is contained in:
1 parent
5c8c0ae7c4
commit
e9986b0dd6
1 file changed
+12
-8
@@ -40,21 +40,25 @@ static bool nvmx_vcpu_in_vmx(const struct vcpu *v)
|
||||
|
||||
int nvmx_cpu_up_prepare(unsigned int cpu)
|
||||
{
|
||||
if ( per_cpu(vvmcs_buf, cpu) != NULL )
|
||||
return 0;
|
||||
uint64_t **vvmcs_buf;
|
||||
|
||||
per_cpu(vvmcs_buf, cpu) = xzalloc_array(u64, VMCS_BUF_SIZE);
|
||||
if ( cpu_has_vmx_vmcs_shadowing &&
|
||||
(vvmcs_buf = &per_cpu(vvmcs_buf, cpu)) == NULL )
|
||||
{
|
||||
void *ptr = xzalloc_array(uint64_t, VMCS_BUF_SIZE);
|
||||
|
||||
if ( per_cpu(vvmcs_buf, cpu) != NULL )
|
||||
return 0;
|
||||
if ( !ptr )
|
||||
return -ENOMEM;
|
||||
|
||||
return -ENOMEM;
|
||||
*vvmcs_buf = ptr;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void nvmx_cpu_dead(unsigned int cpu)
|
||||
{
|
||||
xfree(per_cpu(vvmcs_buf, cpu));
|
||||
per_cpu(vvmcs_buf, cpu) = NULL;
|
||||
XFREE(per_cpu(vvmcs_buf, cpu));
|
||||
}
|
||||
|
||||
int nvmx_vcpu_initialise(struct vcpu *v)
|
||||
|
||||