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:
Andrew Cooper committed 2019-05-13 10:35:38 +01:00
1 parent 5c8c0ae7c4
commit e9986b0dd6
1 file changed
+12 -8
+12 -8
View File
@@ -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)
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.