[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v15 1/4] xen/domain: unify domain ID allocation
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(). Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |