|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v15 1/4] xen/domain: unify domain ID allocation
On Mon, Aug 11, 2025 at 01:14:49PM +0200, Jan Beulich wrote:
> On 09.08.2025 19:08, dmkhn@xxxxxxxxx wrote:
> > --- /dev/null
> > +++ b/xen/common/domid.c
> > @@ -0,0 +1,95 @@
> > +/* SPDX-License-Identifier: GPL-2.0-only */
> > +/*
> > + * Domain ID allocator.
> > + *
> > + * Covers dom0 or late hwdom, predefined domains, post-boot domains.
> > + * Excludes system domains (ID >= DOMID_FIRST_RESERVED).
> > + *
> > + * Copyright 2025 Ford Motor Company
> > + */
> > +
> > +#include <xen/domain.h>
> > +
> > +static DEFINE_SPINLOCK(domid_lock);
> > +static DECLARE_BITMAP(domid_bitmap, DOMID_FIRST_RESERVED);
> > +
> > +/*
> > + * Allocate domain ID.
> > + *
> > + * @param domid Domain ID hint:
> > + * - If an explicit domain ID is provided, verify its availability and use
> > it
> > + * if ID is not used;
> > + * - If DOMID_INVALID is provided, search [1..DOMID_FIRST_RESERVED-1]
> > range,
> > + * starting from the last used ID. Implementation guarantees that two
> > + * consecutive calls will never return the same ID. ID#0 is reserved for
> > + * the first boot domain (currently, dom0) and excluded from the
> > allocation
> > + * range.
> > + * @return Valid domain ID in case of successful allocation,
> > + * DOMID_INVALID - otherwise.
> > + */
> > +domid_t domid_alloc(domid_t domid)
> > +{
> > + static domid_t domid_last;
> > +
> > + spin_lock(&domid_lock);
> > +
> > + /* Exact match. */
> > + if ( domid < DOMID_FIRST_RESERVED )
> > + {
> > + if ( __test_and_set_bit(domid, domid_bitmap) )
> > + domid = DOMID_INVALID;
> > + }
> > + /*
> > + * Exhaustive search.
> > + *
> > + * Domain ID#0 is reserved for the first boot domain (e.g. control
> > domain)
> > + * and excluded from allocation.
> > + */
> > + else
> > + {
> > + domid_t num = DOMID_FIRST_RESERVED;
> > +
> > + domid = find_next_zero_bit(domid_bitmap, num, domid_last + 1);
> > + if ( domid == num && domid_last != 0 )
>
> I'm pretty sure I commented on this before, yet then maybe it was in the
> context
> of another patch: Using == here isn't sufficient; it needs to be >=. See e.g.
> cpumask_next().
I've missed that one. Will fix, thank you.
>
> Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |