[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v4] xen/domain: unify domain ID allocation



On Mon, Apr 28, 2025 at 11:14:25AM +0200, Jan Beulich wrote:
> On 22.04.2025 23:54, dmkhn@xxxxxxxxx wrote:
> > --- a/xen/common/domain.c
> > +++ b/xen/common/domain.c
> > @@ -66,6 +66,57 @@ DEFINE_RCU_READ_LOCK(domlist_read_lock);
> >  static struct domain *domain_hash[DOMAIN_HASH_SIZE];
> >  struct domain *domain_list;
> >
> > +/* Domain ID allocator */
> > +static unsigned int domid_last;
> > +
> > +static inline bool is_free_domid(domid_t dom)
> > +{
> > +    struct domain *d = rcu_lock_domain_by_id(dom);
> > +
> > +    if ( d )
> > +        rcu_unlock_domain(d);
> > +
> > +    return !d;
> > +}
> > +
> > +/*
> > + * Allocate new domain ID based on the hint.
> > + *
> > + * If hint is outside of valid [0..DOMID_FIRST_RESERVED - 1] range of IDs,
> > + * perform an exhaustive search starting from the end of the used domain ID
> > + * range, excluding hardware_domid.
> > + */
> > +domid_t domid_alloc(domid_t hint)
> > +{
> > +    domid_t domid = DOMID_INVALID;
> > +
> > +    if ( hint < DOMID_FIRST_RESERVED )
> > +    {
> > +        /* Exact match. */
> > +        if ( is_free_domid(hint) )
> > +            domid = hint;
> > +    }
> > +    else
> > +    {
> > +        for ( domid = domid_last + 1; domid != domid_last; domid++ )
> > +        {
> > +            if ( domid == DOMID_FIRST_RESERVED )
> > +                domid = 0;
> > +
> > +            if ( domid == hardware_domid )
> > +                continue;
> > +
> > +            if ( is_free_domid(domid) )
> > +                break;
> > +        }
> > +
> > +        if ( domid != domid_last )
> > +            domid_last = domid;
> > +    }
> > +
> > +    return domid;
> > +}
> 
> The function name suggests the ID returned is firmly allocated by the time
> the caller gets to see / use it. Yet that's not the case. Two back-to-back
> calls here with the same argument will yield the same result, afaict. This
> supports my prior statement that I don't think it is a good idea to
> "centralize" things like this.

I agree, back-to-back call requirement is not implemented, I will fix that.

I think a library service for domain ID allocation will be useful since there
are 2 users of it already and there's one more user of similar functionality is
on review (hyperlauch DT parsing).

> 
> Jan




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.