[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v7 12/15] x86/hvm: Remove loop from hvm_save_cpu_msrs func
Signed-off-by: Alexandru Isaila <aisaila@xxxxxxxxxxxxxxx> --- xen/arch/x86/hvm/hvm.c | 58 +++++++++++++++++++------------------------------- 1 file changed, 22 insertions(+), 36 deletions(-) diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 2542cbd..a88efeb 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -1322,10 +1322,18 @@ static const uint32_t msrs_to_send[] = { }; static unsigned int __read_mostly msr_count_max = ARRAY_SIZE(msrs_to_send); -static int hvm_save_cpu_msrs_one(struct vcpu *v, struct hvm_msr *ctxt) +static int hvm_save_cpu_msrs(struct domain *d, hvm_domain_context_t *h) { + struct vcpu *v = NULL; + struct hvm_save_descriptor *desc = _p(&h->data[h->cur]); + struct hvm_msr *ctxt; unsigned int i; + if ( _hvm_init_entry(h, CPU_MSR_CODE, v->vcpu_id, + HVM_CPU_MSR_SIZE(msr_count_max)) ) + return 1; + ctxt = (struct hvm_msr *)&h->data[h->cur]; + ctxt->count = 0; for ( i = 0; i < ARRAY_SIZE(msrs_to_send); ++i ) { uint64_t val; @@ -1351,46 +1359,24 @@ static int hvm_save_cpu_msrs_one(struct vcpu *v, struct hvm_msr *ctxt) ctxt->msr[ctxt->count].index = msrs_to_send[i]; ctxt->msr[ctxt->count++].val = val; } - return 0; -} -static int hvm_save_cpu_msrs(struct domain *d, hvm_domain_context_t *h) -{ - struct vcpu *v; + if ( hvm_funcs.save_msr ) + hvm_funcs.save_msr(v, ctxt); - for_each_vcpu ( d, v ) - { - struct hvm_save_descriptor *desc = _p(&h->data[h->cur]); - struct hvm_msr *ctxt; - unsigned int i; + ASSERT(ctxt->count <= msr_count_max); - if ( _hvm_init_entry(h, CPU_MSR_CODE, v->vcpu_id, - HVM_CPU_MSR_SIZE(msr_count_max)) ) - return 1; - ctxt = (struct hvm_msr *)&h->data[h->cur]; - ctxt->count = 0; - - if ( hvm_save_cpu_msrs_one(v, ctxt) == -ENXIO ) - return -ENXIO; - - if ( hvm_funcs.save_msr ) - hvm_funcs.save_msr(v, ctxt); - - ASSERT(ctxt->count <= msr_count_max); - - for ( i = 0; i < ctxt->count; ++i ) - ctxt->msr[i]._rsvd = 0; + for ( i = 0; i < ctxt->count; ++i ) + ctxt->msr[i]._rsvd = 0; - if ( ctxt->count ) - { - /* Rewrite length to indicate how much space we actually used. */ - desc->length = HVM_CPU_MSR_SIZE(ctxt->count); - h->cur += HVM_CPU_MSR_SIZE(ctxt->count); - } - else - /* or rewind and remove the descriptor from the stream. */ - h->cur -= sizeof(struct hvm_save_descriptor); + if ( ctxt->count ) + { + /* Rewrite length to indicate how much space we actually used. */ + desc->length = HVM_CPU_MSR_SIZE(ctxt->count); + h->cur += HVM_CPU_MSR_SIZE(ctxt->count); } + else + /* or rewind and remove the descriptor from the stream. */ + h->cur -= sizeof(struct hvm_save_descriptor); return 0; } -- 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 |