[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] xen/vcpu: Introduce vcpu_destroy()
commit 1ffeb99669a3ba9cde3063596a9b805023c90ea7 Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Wed Sep 5 17:32:52 2018 +0000 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Mon Sep 17 12:53:09 2018 +0100 xen/vcpu: Introduce vcpu_destroy() Like _domain_destroy(), this will eventually idempotently free all parts of a struct vcpu. While breaking apart the failure path of vcpu_create(), rework the codeflow to be in a line at the end of the function for clarity. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- xen/common/domain.c | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/xen/common/domain.c b/xen/common/domain.c index 4ba2a82dd7..65151e2ac4 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -123,6 +123,16 @@ static void vcpu_info_reset(struct vcpu *v) v->vcpu_info_mfn = INVALID_MFN; } +static void vcpu_destroy(struct vcpu *v) +{ + free_cpumask_var(v->cpu_hard_affinity); + free_cpumask_var(v->cpu_hard_affinity_tmp); + free_cpumask_var(v->cpu_hard_affinity_saved); + free_cpumask_var(v->cpu_soft_affinity); + + free_vcpu_struct(v); +} + struct vcpu *vcpu_create( struct domain *d, unsigned int vcpu_id, unsigned int cpu_id) { @@ -147,7 +157,7 @@ struct vcpu *vcpu_create( !zalloc_cpumask_var(&v->cpu_hard_affinity_tmp) || !zalloc_cpumask_var(&v->cpu_hard_affinity_saved) || !zalloc_cpumask_var(&v->cpu_soft_affinity) ) - goto fail_free; + goto fail; if ( is_idle_domain(d) ) { @@ -166,18 +176,7 @@ struct vcpu *vcpu_create( goto fail_wq; if ( arch_vcpu_create(v) != 0 ) - { - sched_destroy_vcpu(v); - fail_wq: - destroy_waitqueue_vcpu(v); - fail_free: - free_cpumask_var(v->cpu_hard_affinity); - free_cpumask_var(v->cpu_hard_affinity_tmp); - free_cpumask_var(v->cpu_hard_affinity_saved); - free_cpumask_var(v->cpu_soft_affinity); - free_vcpu_struct(v); - return NULL; - } + goto fail_sched; d->vcpu[vcpu_id] = v; if ( vcpu_id != 0 ) @@ -194,6 +193,15 @@ struct vcpu *vcpu_create( vcpu_check_shutdown(v); return v; + + fail_sched: + sched_destroy_vcpu(v); + fail_wq: + destroy_waitqueue_vcpu(v); + fail: + vcpu_destroy(v); + + return NULL; } static int late_hwdom_init(struct domain *d) @@ -902,13 +910,7 @@ static void complete_domain_destroy(struct rcu_head *head) for ( i = d->max_vcpus - 1; i >= 0; i-- ) if ( (v = d->vcpu[i]) != NULL ) - { - free_cpumask_var(v->cpu_hard_affinity); - free_cpumask_var(v->cpu_hard_affinity_tmp); - free_cpumask_var(v->cpu_hard_affinity_saved); - free_cpumask_var(v->cpu_soft_affinity); - free_vcpu_struct(v); - } + vcpu_destroy(v); if ( d->target != NULL ) put_domain(d->target); -- generated by git-patchbot for /home/xen/git/xen.git#staging _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |