[PATCH] lib: sbi: Try to make each domain have boot hart

Xiang W wxjstz at 126.com
Tue Jul 4 02:51:53 PDT 2023


在 2023-07-04星期二的 14:41 +0530,Anup Patel写道:
> On Tue, Jul 4, 2023 at 2:16 PM Xiang W <wxjstz at 126.com> wrote:
> > 
> > 在 2023-07-04星期二的 09:18 +0530,Anup Patel写道:
> > > On Tue, Jun 20, 2023 at 6:02 PM Xiang W <wxjstz at 126.com> wrote:
> > > > 
> > > > domain register will move the hart from the old domain to the
> > > > new domain, and should not move the boot hart to prevent the
> > > > old domain from losing the boot hart.
> > > > 
> > > > Signed-off-by: Xiang W <wxjstz at 126.com>
> > > > ---
> > > >  lib/sbi/sbi_domain.c | 16 +++++++++++++++-
> > > >  1 file changed, 15 insertions(+), 1 deletion(-)
> > > > 
> > > > diff --git a/lib/sbi/sbi_domain.c b/lib/sbi/sbi_domain.c
> > > > index 38a5902..46a4aef 100644
> > > > --- a/lib/sbi/sbi_domain.c
> > > > +++ b/lib/sbi/sbi_domain.c
> > > > @@ -543,9 +543,23 @@ int sbi_domain_register(struct sbi_domain *dom,
> > > >                         continue;
> > > > 
> > > >                 tdom = sbi_hartid_to_domain(i);
> > > > -               if (tdom)
> > > > +               if (tdom) {
> > > > +                       if (i == tdom->boot_hartid) {
> > > > +                               /* Newly registered domain should not
> > > > +                                * take up the boot hart of the older domain */
> > > > +                               if (i == dom->boot_hartid)
> > > > +                                       sbi_printf("%s: failed assign Hart%d to %s, "
> > > > +                                               "conflict with %s\n",
> > > > +                                               __func__, i, dom->name, tdom->name);
> > > > +                               else
> > > > +                                       sbi_printf("%s: skip assign Hart%d to %s, "
> > > > +                                               "because Hart%d is boot hart of %s\n",
> > > > +                                               __func__, i, dom->name, i, tdom->name);
> > > > +                               continue;
> > > > +                       }
> > > 
> > > This is not needed because sbi_domain_finalize() already checks that
> > > dom->boot_hartid is assigned to dom before starting dom->boot_hartid.
> > > 
> > > The cold boot HART is by default boot HART of the root domain and
> > > assigned to the root domain. This patch prevents cold boot HART from
> > > changing its own domain.
> > 
> > If the cold boot hart changes its own domain, the root domain will not
> > lost boot hart and will not be able to start.
> > 
> > Is it not a mistake that root dmain cannot be started?
> 
> No it's not a mistake. For instance, look at example in the
> docs/domain_support.md where we have two additional
> domains "trusted" and "untrusted" apart from the root domain
> which cover all HARTs already covered by the root domain. In
> this example, the root domain never runs because the boot
> HART changes its own domain to "untrusted" domain.
> 
> The root domain is a default/fallback domain which exists in the
> system even when no domains are defined via FDT. We can have
> many domains defined in the system but a HART is running in exactly
> one domain context.
Thank you for the explanation

Regards,
Xiang W
> 
> Regards,
> Anup
> 
> > 
> > Regards,
> > Xiang W
> > > 
> > > NACK for this patch.
> > > 
> > > Regards,
> > > Anup
> > > 
> > > >                         sbi_hartmask_clear_hart(i,
> > > >                                         &tdom->assigned_harts);
> > > > +               }
> > > >                 update_hartid_to_domain(i, dom);
> > > >                 sbi_hartmask_set_hart(i, &dom->assigned_harts);
> > > > 
> > > > --
> > > > 2.39.2
> > > > 
> > > > 
> > > > --
> > > > opensbi mailing list
> > > > opensbi at lists.infradead.org
> > > > http://lists.infradead.org/mailman/listinfo/opensbi
> > 



More information about the opensbi mailing list