>>> On 19.03.18 at 20:13, <andrew.coop...@citrix.com> wrote: > @@ -551,6 +555,37 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) > u_domctl) > if ( !ret ) > goto createdomain_fail_late; > > + ret = -EINVAL; > + if ( vcpus > domain_max_vcpus(d) ) > + goto createdomain_fail_late; > + > + ret = -ENOMEM; > + online = cpupool_domain_cpumask(d); > + > + BUG_ON(d->vcpu); > + BUG_ON(d->max_vcpus); > + > + d->vcpu = xzalloc_array(struct vcpu *, vcpus); > + /* Install vcpu array /then/ update max_vcpus. */ > + smp_wmb(); > + if ( !d->vcpu ) > + goto createdomain_fail_late; > + d->max_vcpus = vcpus; > + > + cpu = cpumask_any(online); > + for ( i = 0; i < vcpus; ++i ) > + { > + BUG_ON(d->vcpu[i]); > + > + if ( alloc_vcpu(d, i, cpu) == NULL ) > + goto createdomain_fail_late; > + > + BUG_ON(!d->vcpu[i]); > + > + cpu = cpumask_cycle(d->vcpu[i]->processor, online); > + } > + > + ret = 0; > d = NULL; > break;
Same question here regarding the late placement. Additionally, by doing this after insertion onto the list, you still leave a window where the domain can be found but has a NULL vcpus pointer. Jan _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel