Completely agree.
> Whan an amd64 machine gets an NMI, the current process in user land
> is signalled with SIGBUS. That does not make sense, the machine
> should drop to ddb regardless wether a user process is currently
> scheduled or not. NMI signals hardware failure or a debugging
> button.
>
> The code in i386 has always been that way.
>
> Then the switch in db_ktrap() should also not depend on the fact
> wether kernel or user land was runing.
>
> ok?
>
> bluhm
>
> Index: arch/amd64/amd64/db_interface.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/arch/amd64/amd64/db_interface.c,v
> retrieving revision 1.25
> diff -u -p -r1.25 db_interface.c
> --- arch/amd64/amd64/db_interface.c 14 Mar 2016 23:08:05 -0000 1.25
> +++ arch/amd64/amd64/db_interface.c 3 Mar 2017 19:37:40 -0000
> @@ -118,6 +118,7 @@ db_ktrap(int type, int code, db_regs_t *
> case T_BPTFLT: /* breakpoint */
> case T_TRCTRAP: /* single_step */
> case T_NMI: /* NMI */
> + case T_NMI|T_USER:
> case -1: /* keyboard interrupt */
> break;
> default:
> Index: arch/amd64/amd64/trap.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/arch/amd64/amd64/trap.c,v
> retrieving revision 1.52
> diff -u -p -r1.52 trap.c
> --- arch/amd64/amd64/trap.c 21 Jan 2017 05:42:03 -0000 1.52
> +++ arch/amd64/amd64/trap.c 3 Mar 2017 19:37:40 -0000
> @@ -242,7 +242,6 @@ copyfault:
> case T_TSSFLT|T_USER:
> case T_SEGNPFLT|T_USER:
> case T_STKFLT|T_USER:
> - case T_NMI|T_USER:
> #ifdef TRAP_SIGDEBUG
> printf("pid %d (%s): %s at rip %llx addr %llx\n",
> p->p_p->ps_pid, p->p_p->ps_comm, "BUS",
> @@ -425,8 +424,9 @@ faultcommon:
> KERNEL_UNLOCK();
> break;
>
> -#if NISA > 0
> +#if NISA > 0
> case T_NMI:
> + case T_NMI|T_USER:
> #if defined(KGDB) || defined(DDB)
> /* NMI can be hooked up to a pushbutton for debugging */
> printf ("NMI ... going to debugger\n");
> Index: arch/i386/i386/db_interface.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/arch/i386/i386/db_interface.c,v
> retrieving revision 1.33
> diff -u -p -r1.33 db_interface.c
> --- arch/i386/i386/db_interface.c 14 Mar 2016 23:08:05 -0000 1.33
> +++ arch/i386/i386/db_interface.c 3 Mar 2017 19:37:40 -0000
> @@ -113,6 +113,7 @@ db_ktrap(int type, int code, db_regs_t *
> case T_BPTFLT: /* breakpoint */
> case T_TRCTRAP: /* single_step */
> case T_NMI: /* NMI */
> + case T_NMI|T_USER:
> case -1: /* keyboard interrupt */
> break;
> default:
> Index: arch/i386/i386/trap.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/arch/i386/i386/trap.c,v
> retrieving revision 1.126
> diff -u -p -r1.126 trap.c
> --- arch/i386/i386/trap.c 8 Oct 2016 05:49:08 -0000 1.126
> +++ arch/i386/i386/trap.c 3 Mar 2017 19:37:40 -0000
> @@ -483,7 +483,7 @@ trap(struct trapframe *frame)
> KERNEL_UNLOCK();
> break;
>
> -#if NISA > 0
> +#if NISA > 0
> case T_NMI:
> case T_NMI|T_USER:
> #if defined(DDB) || defined(KGDB)
>