On Tue, Jun 10, 2025 at 08:53:12AM +0200, Jan Beulich wrote:
> On 06.06.2025 23:29, Julien Grall wrote:
> > Hi Denis,
> >
> > On 05/06/2025 23:05, Julien Grall wrote:
> >> Hi Denis,
> >>
> >> On 28/05/2025 23:50, dm...@proton.me wrote:
> >>> From: Denis Mukhin <dm...@proton.me>
> >>>
> >>> From: Denis Mukhin <dmuk...@ford.com>
> >>>
> >>> Remove the hardcoded domain ID 0 allocation for hardware domain and 
> >>> replace it
> >>> with a call to get_initial_domain_id() (returns the value of 
> >>> hardware_domid on
> >>> Arm).
> >>
> >> I am not entirely why this is done. Are you intending to pass a different 
> >> domain ID? If so...
> >>
> >>>
> >>> Update domid_alloc(DOMID_INVALID) case to ensure that 
> >>> get_initial_domain_id()
> >>> ID is skipped during domain ID allocation to cover domU case in dom0less
> >>> configuration. That also fixes a potential issue with re-using ID#0 for 
> >>> domUs
> >>> when get_initial_domain_id() returns non-zero.
> >>>
> >>> Signed-off-by: Denis Mukhin <dmuk...@ford.com>
> >>> ---
> >>> Changes since v8:
> >>> - rebased
> >>> ---
> >>>   xen/arch/arm/domain_build.c             | 4 ++--
> >>>   xen/common/device-tree/dom0less-build.c | 9 +++------
> >>>   xen/common/domain.c                     | 4 ++--
> >>>   3 files changed, 7 insertions(+), 10 deletions(-)
> >>>
> >>> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> >>> index e9d563c269..0ad80b020a 100644
> >>> --- a/xen/arch/arm/domain_build.c
> >>> +++ b/xen/arch/arm/domain_build.c
> >>> @@ -2035,9 +2035,9 @@ void __init create_dom0(void)
> >>
> >> ... naming like create_dom0() probably wants to be renamed.
> >>
> >> That said, I am not convinced a domain other than 0 should have full 
> >> privilege by default. So I would argue it should stay as ...
> >>
> >>>       if ( !llc_coloring_enabled )
> >>>           flags |= CDF_directmap;
> >>> -    domid = domid_alloc(0);
> >>> +    domid = domid_alloc(get_initial_domain_id());
> >>
> >> ... 0.
> >
> > Looking at the implementation of get_initial_domain_id(), I noticed the 
> > behavior was changed for x86 by [1].
> >
> > Before, get_initial_domain_id() was returning 0 except for the PV shim.
> > But now, it would could return the domain ID specified on the command line 
> > (via hardware_dom).
> >
> > From my understanding, the goal of the command line was to create the 
> > hardware domain *after* boot. So initially we create dom0 and then 
> > initialize the hardware domain. With the patch below, this has changed.
> >
> > However, from the commit message, I don't understand why. It seems like we 
> > broke late hwdom?
> >
> > For instance, late_hwdom_init() has the following assert:
> >
> >     dom0 = rcu_lock_domain_by_id(0);
> >     ASSERT(dom0 != NULL);
> >
> > Jan, I saw you were involved in the review of the series. Any idea why this 
> > was changed?
> 
> I simply overlooked this aspect when looking at the change. You're right, 
> things
> were broken there. Unless a simple and clean fix can be made relatively soon, 
> I
> think this simply needs reverting (which may mean to revert any later commits
> that depend on that). I can't help noting that in this console rework there 
> were
> way too many issues, and I fear more than just this one may have slipped
> through. I therefore wonder whether taken as a whole this was/is worth both 
> the
> submitter's and all the reviewers' time.

Yes, sorry, I overlooked late_hwdom_init() modification.

IMO, the clean fix would be adding another command line parameter
`control_domid` (with default value 0), make get_initial_domain_id() return it
instead of current `hardware_domid` and update late_hwdom_init() to use
`control_domid` insted of open-coded 0.

That should align with the effort of splitting priveleged dom0 into control and
hardware domains: control domain will be the first domain ID allocated,
followed by the hardware domain.

> 
> Jan
> 
> > [1] https://lore.kernel.org/all/20250306075819.154361-1-dm...@proton.me/
> >
> 


Reply via email to