This conflicts with changes done in 26486:
7648ef657fe7 and
26489:
83a3fa9c8434 (i.e. the code added by them needs adjustment in
order for the change here to be correct).
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) )
+ if ( cpu_has_svm && !paging_mode_hap(d) && a.value )
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;
void
nestedhvm_vcpu_destroy(struct vcpu *v)
{
- if ( hvm_funcs.nhvm_vcpu_destroy )
+ if ( nestedhvm_enabled(v->domain) && hvm_funcs.nhvm_vcpu_destroy )
hvm_funcs.nhvm_vcpu_destroy(v);
}