On 23.06.2025 20:28, dm...@proton.me wrote: > --- a/xen/common/domain.c > +++ b/xen/common/domain.c > @@ -492,7 +492,7 @@ static int late_hwdom_init(struct domain *d) > struct domain *dom0; > int rv; > > - if ( d != hardware_domain || d->domain_id == 0 ) > + if ( d != hardware_domain || d->domain_id == get_initial_domain_id() ) > return 0; > > rv = xsm_init_hardware_domain(XSM_HOOK, d); > @@ -501,7 +501,7 @@ static int late_hwdom_init(struct domain *d) > > printk("Initialising hardware domain %d\n", hardware_domid); > > - dom0 = rcu_lock_domain_by_id(0); > + dom0 = rcu_lock_domain_by_id(get_initial_domain_id()); > ASSERT(dom0 != NULL);
For both changes above you're introducing a subtle (largely theoretical) behavioral change: In shim mode, this assertion, if we somehow made it here, would suddenly not trigger anymore. Similarly for the earlier change the return path may wrongly be taken then. > @@ -2479,7 +2479,7 @@ domid_t domid_alloc(domid_t domid) > if ( domid == DOMID_FIRST_RESERVED ) > domid = find_next_zero_bit(domid_bitmap, > DOMID_FIRST_RESERVED, > - 1); > + get_initial_domain_id() + 1); This imo is the worst of the changes. get_initial_domain_id() can return non-zero. In that case we still would (in principle) want to re-start from 1 here. Jan