As it is, this diff will not go in.

Your 2nd attempt is not architecture aware either.  There are more
than 2 architectures.  If you add a MI feature, you must attempt to
add support for it to all the MD versions.  And the process of mailing
it out to the community gives people an opportunity to help test
those.

Seeing as this is only a goto and a label: on each architecture, what
is the purpose of not even trying to write such a diff??  You are
leaving the work, hoping someone eventually does it??

That isn't the way we work.

> 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.
> 
> ok?
> 
> friehm
> 
> 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