> X-Originating-IP: 88.153.7.170
> Date: Thu, 14 Dec 2017 10:30:21 +0100
> From: Martin Pieuchot <[email protected]>
> 
> On 13/12/17(Wed) 19:09, Florian Riehm wrote:
> > Hi,
> > 
> > This patch follows bluhm's attempt for a ddb command 'boot reset'.
> > My first attempt was not architecture aware.
> > 
> > Tested on i386 by bluhm@ and on amd64 by me.
> 
> I don't understand why we need to add "boot reset"?  To not fix ddb(4)
> and keep a broken "boot reboot"?  If we cannot fix our own code...

Funny you say that given the discussion about if_downall() on icb ;).

IIRC "boot reset" is all about avoiding the if_downall() call.  And we
really don't want to skip if_downall() in the "boot reboot".  We added
that call since not stopping the DMA engines of the network cards had
some very interesting effects when the machine rebooted...

> > Index: share/man/man4/ddb.4
> > ===================================================================
> > RCS file: /openbsd/src/share/man/man4/ddb.4,v
> > retrieving revision 1.92
> > diff -u -p -r1.92 ddb.4
> > --- share/man/man4/ddb.4    29 Nov 2017 07:28:21 -0000      1.92
> > +++ share/man/man4/ddb.4    12 Dec 2017 06:35:44 -0000
> > @@ -381,6 +381,15 @@ Just halt.
> >  Just reboot.
> >  .It Ic boot poweroff
> >  Power down the machine whenever possible; if it fails, just halt.
> > +.It Ic boot reset
> > +Restart the machine by resetting the CPU on i386 and amd64
> > +architectures.
> > +Useful in situations were
> > +.Ic boot reboot
> > +does not work anymore, i.e. due to locking issues.
> > +On other platforms it is equivalent to the
> > +.Ic boot reboot
> > +command.
> >  .El
> >  .\" --------------------
> >  .It Xo
> > Index: sys/arch/amd64/amd64/machdep.c
> > ===================================================================
> > RCS file: /openbsd/src/sys/arch/amd64/amd64/machdep.c,v
> > retrieving revision 1.236
> > diff -u -p -r1.236 machdep.c
> > --- sys/arch/amd64/amd64/machdep.c  11 Dec 2017 05:27:40 -0000      1.236
> > +++ sys/arch/amd64/amd64/machdep.c  12 Dec 2017 06:35:44 -0000
> > @@ -713,6 +713,9 @@ struct pcb dumppcb;
> >  __dead void
> >  boot(int howto)
> >  {
> > +   if ((howto & RB_RESET) != 0)
> > +           goto reset;
> > +
> >     if ((howto & RB_POWERDOWN) != 0)
> >             lid_action = 0;
> >  
> > @@ -770,6 +773,7 @@ haltsys:
> >     printf("rebooting...\n");
> >     if (cpureset_delay > 0)
> >             delay(cpureset_delay * 1000);
> > +reset:
> >     cpu_reset();
> >     for (;;)
> >             continue;
> > Index: sys/arch/i386/i386/machdep.c
> > ===================================================================
> > RCS file: /openbsd/src/sys/arch/i386/i386/machdep.c,v
> > retrieving revision 1.607
> > diff -u -p -r1.607 machdep.c
> > --- sys/arch/i386/i386/machdep.c    11 Dec 2017 05:27:40 -0000      1.607
> > +++ sys/arch/i386/i386/machdep.c    12 Dec 2017 06:35:44 -0000
> > @@ -2629,6 +2629,9 @@ struct pcb dumppcb;
> >  __dead void
> >  boot(int howto)
> >  {
> > +   if ((howto & RB_RESET) != 0)
> > +           goto reset;
> > +
> >     if ((howto & RB_POWERDOWN) != 0)
> >             lid_action = 0;
> >  
> > @@ -2709,6 +2712,7 @@ haltsys:
> >     }
> >  
> >     printf("rebooting...\n");
> > +reset:
> >     cpu_reset();
> >     for (;;)
> >             continue;
> > Index: sys/ddb/db_command.c
> > ===================================================================
> > RCS file: /openbsd/src/sys/ddb/db_command.c,v
> > retrieving revision 1.81
> > diff -u -p -r1.81 db_command.c
> > --- sys/ddb/db_command.c    11 Dec 2017 05:27:40 -0000      1.81
> > +++ sys/ddb/db_command.c    12 Dec 2017 06:35:44 -0000
> > @@ -105,6 +105,7 @@ void    db_boot_dump_cmd(db_expr_t, int, db
> >  void       db_boot_halt_cmd(db_expr_t, int, db_expr_t, char *);
> >  void       db_boot_reboot_cmd(db_expr_t, int, db_expr_t, char *);
> >  void       db_boot_poweroff_cmd(db_expr_t, int, db_expr_t, char *);
> > +void       db_boot_reset_cmd(db_expr_t, int, db_expr_t, char *);
> >  void       db_stack_trace_cmd(db_expr_t, int, db_expr_t, char *);
> >  void       db_dmesg_cmd(db_expr_t, int, db_expr_t, char *);
> >  void       db_show_panic_cmd(db_expr_t, int, db_expr_t, char *);
> > @@ -597,6 +598,7 @@ struct db_command db_boot_cmds[] = {
> >     { "halt",       db_boot_halt_cmd,       0,      0 },
> >     { "reboot",     db_boot_reboot_cmd,     0,      0 },
> >     { "poweroff",   db_boot_poweroff_cmd,   0,      0 },
> > +   { "reset",      db_boot_reset_cmd,      0,      0 },
> >     { NULL, }
> >  };
> >  
> > @@ -812,6 +814,12 @@ void
> >  db_boot_poweroff_cmd(db_expr_t addr, int haddr, db_expr_t count, char 
> > *modif)
> >  {
> >     db_reboot(RB_NOSYNC | RB_HALT | RB_POWERDOWN | RB_TIMEBAD | RB_USERREQ);
> > +}
> > +
> > +void
> > +db_boot_reset_cmd(db_expr_t addr, int haddr, db_expr_t count, char *modif)
> > +{
> > +   db_reboot(RB_RESET | RB_AUTOBOOT | RB_NOSYNC | RB_TIMEBAD | RB_USERREQ);
> >  }
> >  
> >  void
> > Index: sys/sys/reboot.h
> > ===================================================================
> > RCS file: /openbsd/src/sys/sys/reboot.h,v
> > retrieving revision 1.17
> > diff -u -p -r1.17 reboot.h
> > --- sys/sys/reboot.h        11 Jul 2014 14:36:44 -0000      1.17
> > +++ sys/sys/reboot.h        12 Dec 2017 06:35:45 -0000
> > @@ -56,6 +56,7 @@
> >  #define    RB_POWERDOWN    0x1000  /* attempt to power down machine */
> >  #define    RB_SERCONS      0x2000  /* use serial console if available */
> >  #define    RB_USERREQ      0x4000  /* boot() called at user request (e.g. 
> > ddb) */
> > +#define    RB_RESET        0x8000  /* do not try to cleanup, only for ddb 
> > */
> >  
> >  /*
> >   * Constants for converting boot-style device number to type,
> > 
> 
> 

Reply via email to