[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/domain: improvements to switch_native() and switch_compat()
commit 2e6fc2db9f1231e2ed0ec5263c6aa6ff1db90c5f Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Thu Jan 22 12:58:47 2015 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Thu Jan 22 12:58:47 2015 +0100 x86/domain: improvements to switch_native() and switch_compat() Both are called with known-good domains, making the NULL check redundant. Both also have open-coded forms of for_each_vcpu() which are replaced. switch_compat() is updated to propagate the error from set_compat_l4(), rather than automatically overriding with -ENOMEM. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/domain.c | 35 ++++++++++++----------------------- 1 files changed, 12 insertions(+), 23 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index c8832c6..50b361b 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -362,10 +362,8 @@ static inline int may_switch_mode(struct domain *d) int switch_native(struct domain *d) { - unsigned int vcpuid; + struct vcpu *v; - if ( d == NULL ) - return -EINVAL; if ( !may_switch_mode(d) ) return -EACCES; if ( !is_pv_32on64_domain(d) ) @@ -373,21 +371,16 @@ int switch_native(struct domain *d) d->arch.is_32bit_pv = d->arch.has_32bit_shinfo = 0; - for ( vcpuid = 0; vcpuid < d->max_vcpus; vcpuid++ ) - { - if (d->vcpu[vcpuid]) - release_compat_l4(d->vcpu[vcpuid]); - } + for_each_vcpu( d, v ) + release_compat_l4(v); return 0; } int switch_compat(struct domain *d) { - unsigned int vcpuid; - - if ( d == NULL ) - return -EINVAL; + struct vcpu *v; + int rc; if ( is_pvh_domain(d) ) { @@ -403,12 +396,9 @@ int switch_compat(struct domain *d) d->arch.is_32bit_pv = d->arch.has_32bit_shinfo = 1; - for ( vcpuid = 0; vcpuid < d->max_vcpus; vcpuid++ ) - { - if ( (d->vcpu[vcpuid] != NULL) && - (setup_compat_l4(d->vcpu[vcpuid]) != 0) ) + for_each_vcpu( d, v ) + if ( (rc = setup_compat_l4(v)) ) goto undo_and_fail; - } domain_set_alloc_bitsize(d); @@ -416,12 +406,11 @@ int switch_compat(struct domain *d) undo_and_fail: d->arch.is_32bit_pv = d->arch.has_32bit_shinfo = 0; - while ( vcpuid-- != 0 ) - { - if ( d->vcpu[vcpuid] != NULL ) - release_compat_l4(d->vcpu[vcpuid]); - } - return -ENOMEM; + for_each_vcpu( d, v ) + if ( !pagetable_is_null(v->arch.guest_table) ) + release_compat_l4(v); + + return rc; } int vcpu_initialise(struct vcpu *v) -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |