чт, 5 окт. 2023 г., 09:59 Mark Kettenis <mark.kette...@xs4all.nl>:
>
> > Date: Thu,  5 Oct 2023 04:10:10 +0000
> > From: Klemens Nanni <k...@openbsd.org>
> >
> > On Mon, Sep 25, 2023 at 01:33:31PM +0000, Klemens Nanni wrote:
> > > On Tue, Jul 25, 2023 at 01:30:43PM +0300, Slava Voronzoff wrote:
> > > > Hi, pinging and refreshing this patch
> > > >
> > > > What it does:
> > > > allow arm64 cpus to break from the loop of waiting to start core and
> > > > drop to DDB or OS.
> > > >
> > > > Patch based on same concept in amd64 cpu.c
> > > >
> > > > Any suggestions? Good to go?
> > >
> > > So instead of waiting possibly forever for secondary CPUs to come up,
> > > you can continue debug the system and/or continue boot with less CPUs.
> > >
> > > Apart from the trailing empty line you introduce, the approach does
> > > match amd64 (down to the for loop lacking a space after semicolon).
> > >
> > > That allows making progress on these machines and I don't see a downside,
> > > so OK kn modulo the empty line.
> > >
> > > Any input from our arm64 hackers?
> > >
> > > Same diff ten days ago: 
> > > https://marc.info/?l=openbsd-bugs&m=169465443200821&w=2
> >
> > Anyone?
>
> Really, if those secondary CPUs don't come up, your system is beyond
> repair.  You need to do some low-level debugging at that point and DDB
> isn't going to help you.  So no, let's keep this code as simple as we
> can.
>

This cores are starting and working properly,
but something messes with order
(maybe related to shared caches per 2 cores cluster, I'm not so
hardware-good ).
So 7th core will answer that it booted after 6th core.
But with 'while' loop we never got to 6th core.

>
> > Index: sys/arch/arm64//arm64/cpu.c
> > ===================================================================
> > RCS file: /cvs/src/sys/arch/arm64/arm64/cpu.c,v
> > retrieving revision 1.98
> > diff -u -p -r1.98 cpu.c
> > --- sys/arch/arm64//arm64/cpu.c       10 Aug 2023 19:29:32 -0000      1.98
> > +++ sys/arch/arm64//arm64/cpu.c       25 Sep 2023 13:24:39 -0000
> > @@ -1096,6 +1096,8 @@ cpu_start_secondary(struct cpu_info *ci,
> >  void
> >  cpu_boot_secondary(struct cpu_info *ci)
> >  {
> > +     int i;
> > +
> >       atomic_setbits_int(&ci->ci_flags, CPUF_GO);
> >       __asm volatile("dsb sy; sev" ::: "memory");
> >
> > @@ -1105,8 +1107,16 @@ cpu_boot_secondary(struct cpu_info *ci)
> >        */
> >       arm_send_ipi(ci, ARM_IPI_NOP);
> >
> > -     while ((ci->ci_flags & CPUF_RUNNING) == 0)
> > +     for (i = 1000; (!(ci->ci_flags & CPUF_RUNNING)) && i>0;i--) {
> >               __asm volatile("wfe");
> > +     }
> > +     if (! (ci->ci_flags & CPUF_RUNNING)) {
> > +             printf("cpu %d failed to start\n", ci->ci_cpuid);
> > +#if defined(MPDEBUG) && defined(DDB)
> > +             printf("dropping into debugger; continue from here to resume 
> > boot\n");
> > +             db_enter();
> > +#endif
> > +     }
> >  }
> >
> >  void
> >
> >

Reply via email to