Author: markj
Date: Mon Aug  7 17:30:22 2017
New Revision: 322176
URL: https://svnweb.freebsd.org/changeset/base/322176

Log:
  MFC r321803:
  Don't trace running threads that have interrupts disabled.

Modified:
  stable/11/sys/x86/x86/stack_machdep.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/x86/x86/stack_machdep.c
==============================================================================
--- stable/11/sys/x86/x86/stack_machdep.c       Mon Aug  7 17:29:54 2017        
(r322175)
+++ stable/11/sys/x86/x86/stack_machdep.c       Mon Aug  7 17:30:22 2017        
(r322176)
@@ -49,12 +49,14 @@ __FBSDID("$FreeBSD$");
 
 #ifdef __i386__
 #define        PCB_FP(pcb)     ((pcb)->pcb_ebp)
+#define        TF_FLAGS(tf)    ((tf)->tf_eflags)
 #define        TF_FP(tf)       ((tf)->tf_ebp)
 #define        TF_PC(tf)       ((tf)->tf_eip)
 
 typedef struct i386_frame *x86_frame_t;
 #else
 #define        PCB_FP(pcb)     ((pcb)->pcb_rbp)
+#define        TF_FLAGS(tf)    ((tf)->tf_rflags)
 #define        TF_FP(tf)       ((tf)->tf_rbp)
 #define        TF_PC(tf)       ((tf)->tf_rip)
 
@@ -104,10 +106,10 @@ stack_nmi_handler(struct trapframe *tf)
        if (nmi_stack == NULL || curthread != nmi_pending)
                return (0);
 
-       if (INKERNEL(TF_PC(tf)))
+       if (INKERNEL(TF_PC(tf)) && (TF_FLAGS(tf) & PSL_I) != 0)
                stack_capture(curthread, nmi_stack, TF_FP(tf));
        else
-               /* We interrupted a thread in user mode. */
+               /* We were running in usermode or had interrupts disabled. */
                nmi_stack->depth = 0;
 
        atomic_store_rel_ptr((long *)&nmi_pending, (long)NULL);
@@ -155,7 +157,6 @@ stack_save_td_running(struct stack *st, struct thread 
        mtx_unlock_spin(&nmi_lock);
 
        if (st->depth == 0)
-               /* We interrupted a thread in user mode. */
                return (EAGAIN);
 #else /* !SMP */
        KASSERT(0, ("curthread isn't running"));
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to