[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v8 1/3] xen/domain: unify domain ID allocation
On Wed, May 21, 2025 at 10:02:52AM +0200, Jan Beulich wrote: > On 21.05.2025 02:00, dmkhn@xxxxxxxxx wrote: > > --- a/xen/common/domain.c > > +++ b/xen/common/domain.c > > @@ -66,6 +66,11 @@ DEFINE_RCU_READ_LOCK(domlist_read_lock); > > static struct domain *domain_hash[DOMAIN_HASH_SIZE]; > > struct domain *domain_list; > > > > +/* Non-system domain ID allocator. */ > > +static DEFINE_SPINLOCK(domid_lock); > > +static DECLARE_BITMAP(domid_bitmap, DOMID_FIRST_RESERVED); > > +static domid_t domid_last; > > Please move this into the narrowest possible scope. No reason to expose > it to the entire CU. Will do. > > > @@ -2405,6 +2412,46 @@ domid_t get_initial_domain_id(void) > > return hardware_domid; > > } > > > > +domid_t domid_alloc(domid_t domid) > > +{ > > + spin_lock(&domid_lock); > > + > > + if ( domid < DOMID_FIRST_RESERVED ) > > + { > > + if ( __test_and_set_bit(domid, domid_bitmap) ) > > + domid = DOMID_INVALID; > > + } > > + else > > + { > > + domid = find_next_zero_bit(domid_bitmap, DOMID_FIRST_RESERVED, > > + domid_last); > > + > > + if ( domid == DOMID_FIRST_RESERVED ) > > + domid = find_next_zero_bit(domid_bitmap, DOMID_FIRST_RESERVED, > > 0); > > Despite what the last sentence of the description says, there is a subtle > behavioral change here: The original code would never return what was > called "rover" there. If the most recently created domain went away, you > would return its ID again here if no other ID is free (which is easier to > run into with patch 3 in place, and MAX_DOMID set to a pretty low value). > (Noticing only later: This could even occur without wrapping, as the last > argument passed is just domid_last, without adding in 1.) Thanks for spotting the problem! > > I agree it's debatable whether using the sole available ID instead of > failing wouldn't be better(?) behavior in this specific case, but such > definitely can't go silently. > > Furthermore you once again are potentially returning ID 0 here (after > wrapping), when the original code specifically avoided that (irrespective > of there actually being a Dom0, that is; i.e. covering both the dom0less > case and the late-hwdom one). > > To be frank, being at v8 I find it problematic that there still are > (unmentioned and potentially unwanted) behavioral changes here. This > kind of supports my earlier raised question of whether we actually want > this sort of a change. I appreciate patience and the feedback for the series! > > Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |