x86/nestedhvm: properly clean up after failure to set up all vCPU-s

This implies that the individual destroy functions will have to remain
capable of being called for a vCPU that the corresponding init function
was never run on.

Once at it, also clean up some inefficiencies in the corresponding
parameter validation code.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Keir Fraser <keir@xen.org>
This commit is contained in:
Jan Beulich committed 2013-02-04 12:03:38 +01:00
1 parent e7dda8ec9f
commit 29aede13d5
2 files changed
+9 -4

No files matched your search

+8 -3
View File
@@ -3900,20 +3900,25 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) arg)
rc = -EPERM;
break;
}
if ( !a.value )
break;
if ( a.value > 1 )
rc = -EINVAL;
if ( !is_hvm_domain(d) )
rc = -EINVAL;
/* Remove the check below once we have
* shadow-on-shadow.
*/
if ( cpu_has_svm && !paging_mode_hap(d) && a.value )
if ( cpu_has_svm && !paging_mode_hap(d) )
rc = -EINVAL;
/* Set up NHVM state for any vcpus that are already up */
if ( !d->arch.hvm_domain.params[HVM_PARAM_NESTEDHVM] )
{
for_each_vcpu(d, v)
if ( rc == 0 )
rc = nestedhvm_vcpu_initialise(v);
if ( rc )
for_each_vcpu(d, v)
nestedhvm_vcpu_destroy(v);
}
break;
case HVM_PARAM_BUFIOREQ_EVTCHN:
rc = -EINVAL;
+1 -1
View File
@@ -87,7 +87,7 @@ nestedhvm_vcpu_initialise(struct vcpu *v)
void
nestedhvm_vcpu_destroy(struct vcpu *v)
{
if ( nestedhvm_enabled(v->domain) && hvm_funcs.nhvm_vcpu_destroy )
if ( hvm_funcs.nhvm_vcpu_destroy )
hvm_funcs.nhvm_vcpu_destroy(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.