|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v9 3/5] xen/mem_sharing: VM forking
On Tue, Feb 25, 2020 at 6:28 AM Jan Beulich <jbeulich@xxxxxxxx> wrote:
>
> On 24.02.2020 13:39, Roger Pau Monné wrote:
> > On Fri, Feb 21, 2020 at 10:49:21AM -0800, Tamas K Lengyel wrote:
> >> +static int mem_sharing_fork(struct domain *d, struct domain *cd)
> >> +{
> >> + int rc = -EINVAL;
> >> +
> >> + if ( !cd->controller_pause_count )
> >> + return rc;
> >
> > -EBUSY might be better here.
> >
> >> +
> >> + /*
> >> + * We only want to get and pause the parent once, not each time this
> >> + * operation is restarted due to preemption.
> >> + */
> >> + if ( !cd->parent_paused )
> >> + {
> >> + ASSERT(get_domain(d));
> >
> > We are trying to avoid such constructs, instead I suggest:
> >
> > if ( !get_domain(parent) )
> > {
> > ASSERT_UNREACHABLE();
> > return -EBUSY;
> > }
>
> But isn't the ASSERT() here wrong anyway? I.e. what is it that
> guarantees that d hasn't gone away? If it's the caller of this
> function, then wouldn't it be get_knownalive_domain() that
> wants using here?
During the fork hypercall the parent's pause count is incremented via
domain_pause. It can't go away until the reference count goes down to
zero, which only happens when it's forks are all gone.
Tamas
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |