[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 |