[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v17 13/13] x86/domctl: Don't pause the whole domain if only getting vcpu state
This patch is focused on moving changing hvm_save_one() to save one typecode from one vcpu and now that the save functions get data from a single vcpu we can pause the specific vcpu instead of the domain. Signed-off-by: Alexandru Isaila <aisaila@xxxxxxxxxxxxxxx> --- Changes since V15: - Moved pause/unpause calls into hvm_save_one() - Re-add the loop in hvm_save_one(). --- xen/arch/x86/domctl.c | 2 -- xen/arch/x86/hvm/save.c | 12 ++++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c index 8fbbf3a..cb53980 100644 --- a/xen/arch/x86/domctl.c +++ b/xen/arch/x86/domctl.c @@ -591,12 +591,10 @@ long arch_do_domctl( !is_hvm_domain(d) ) break; - domain_pause(d); ret = hvm_save_one(d, domctl->u.hvmcontext_partial.type, domctl->u.hvmcontext_partial.instance, domctl->u.hvmcontext_partial.buffer, &domctl->u.hvmcontext_partial.bufsz); - domain_unpause(d); if ( !ret ) copyback = true; diff --git a/xen/arch/x86/hvm/save.c b/xen/arch/x86/hvm/save.c index 49741e0..2d35f17 100644 --- a/xen/arch/x86/hvm/save.c +++ b/xen/arch/x86/hvm/save.c @@ -149,12 +149,15 @@ int hvm_save_one(struct domain *d, unsigned int typecode, unsigned int instance, instance >= d->max_vcpus ) return -ENOENT; ctxt.size = hvm_sr_handlers[typecode].size; - if ( hvm_sr_handlers[typecode].kind == HVMSR_PER_VCPU ) - ctxt.size *= d->max_vcpus; ctxt.data = xmalloc_bytes(ctxt.size); if ( !ctxt.data ) return -ENOMEM; + if ( hvm_sr_handlers[typecode].kind == HVMSR_PER_VCPU ) + vcpu_pause(d->vcpu[instance]); + else + domain_pause(d); + if ( (rv = hvm_sr_handlers[typecode].save(d->vcpu[instance], &ctxt)) != 0 ) printk(XENLOG_G_ERR "HVM%d save: failed to save type %"PRIu16" (%d)\n", d->domain_id, typecode, rv); @@ -186,6 +189,11 @@ int hvm_save_one(struct domain *d, unsigned int typecode, unsigned int instance, } } + if ( hvm_sr_handlers[typecode].kind == HVMSR_PER_VCPU ) + vcpu_unpause(d->vcpu[instance]); + else + domain_unpause(d); + xfree(ctxt.data); return rv; } -- 2.7.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |