[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 2/3] xen/domain: Introduce domain_teardown()
On 21.12.2020 19:14, Andrew Cooper wrote: > --- a/xen/common/domain.c > +++ b/xen/common/domain.c > @@ -273,6 +273,59 @@ static int __init parse_extra_guest_irqs(const char *s) > custom_param("extra_guest_irqs", parse_extra_guest_irqs); > > /* > + * Release resources held by a domain. There may or may not be live > + * references to the domain, and it may or may not be fully constructed. > + * > + * d->is_dying differing between DOMDYING_dying and DOMDYING_dead can be used > + * to determine if live references to the domain exist, and also whether > + * continuations are permitted. > + * > + * If d->is_dying is DOMDYING_dead, this must not return non-zero. > + */ > +static int domain_teardown(struct domain *d) > +{ > + BUG_ON(!d->is_dying); > + > + /* > + * This hypercall can take minutes of wallclock time to complete. This > + * logic implements a co-routine, stashing state in struct domain across > + * hypercall continuation boundaries. > + */ > + switch ( d->teardown.val ) > + { > + /* > + * Record the current progress. Subsequent hypercall continuations > + * will logically restart work from this point. > + * > + * PROGRESS() markers must not be in the middle of loops. The loop > + * variable isn't preserved across a continuation. > + * > + * To avoid redundant work, there should be a marker before each > + * function which may return -ERESTART. > + */ > +#define PROGRESS(x) \ > + d->teardown.val = PROG_ ## x; \ > + /* Fallthrough */ \ > + case PROG_ ## x > + > + enum { > + PROG_done = 1, > + }; > + > + case 0: > + PROGRESS(done): > + break; > + > +#undef PROGRESS > + > + default: > + BUG(); > + } > + > + return 0; > +} While as an initial step this may be okay, I envision ordering issues with domain_relinquish_resources() - there may be per-arch things that want doing before certain common ones, and others which should only be done when certain common teardown was already performed. Therefore rather than this being a "common equivalent of domain_relinquish_resources()", I'd rather see (and call) it a (designated) replacement, where individual per-arch functions would get called at appropriate times. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |