Hi,

I think this fallout from using interrupt gates now.  I did not properly
enable interrupts for dna, fpu and f00f_redirect:  Thux npxintr() tries to
get the kernel lock with interrupts disabled.  Meanwhile the IPI for tlb
shootdown is pending for delivery.  When the sender of the IPI is holding
the kernel lock it will spin in pmap_tlb_shootwait() and we dead lock.

Diff below fixes dna, fpu and f00f_redirect by enabling interrupts.

(dna and fpu leave the kernel directly, thus they have to disable
interrupts again; f00f_redirect goes through calltrap which will enable
interrupts)

Take care,
HJ.

Index: sys/arch/i386//i386/locore.s
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/locore.s,v
retrieving revision 1.185
diff -u -p -u -p -r1.185 locore.s
--- sys/arch/i386//i386/locore.s        11 Apr 2018 15:44:08 -0000      1.185
+++ sys/arch/i386//i386/locore.s        9 May 2018 15:47:51 -0000
@@ -988,6 +988,7 @@ IDTVEC(dna)
        pushl   $0                      # dummy error code
        pushl   $T_DNA
        INTRENTRY(dna)
+       sti
        pushl   CPUVAR(SELF)
        call    *_C_LABEL(npxdna_func)
        addl    $4,%esp
@@ -996,6 +997,7 @@ IDTVEC(dna)
 #ifdef DIAGNOSTIC
        movl    $0xfd,%esi
 #endif
+       cli
        INTRFASTEXIT
 #else
        ZTRAP(T_DNA)
@@ -1015,6 +1017,7 @@ IDTVEC(prot)
 IDTVEC(f00f_redirect)
        pushl   $T_PAGEFLT
        INTRENTRY(f00f_redirect)
+       sti
        testb   $PGEX_U,TF_ERR(%esp)
        jnz     calltrap
        movl    %cr2,%eax
@@ -1050,6 +1053,7 @@ IDTVEC(fpu)
         */
        subl    $8,%esp                 /* space for tf_{err,trapno} */
        INTRENTRY(fpu)
+       sti
        pushl   CPL                     # if_ppl in intrframe
        pushl   %esp                    # push address of intrframe
        incl    _C_LABEL(uvmexp)+V_TRAP
@@ -1058,6 +1062,7 @@ IDTVEC(fpu)
 #ifdef DIAGNOSTIC
        movl    $0xfc,%esi
 #endif
+       cli
        INTRFASTEXIT
 #else
        ZTRAP(T_ARITHTRAP)

Reply via email to