Index: x86/x86/x86_machdep.c
===================================================================
RCS file: /cvsroot/src/sys/arch/x86/x86/x86_machdep.c,v
retrieving revision 1.30
diff -p -r1.30 x86_machdep.c
*** x86/x86/x86_machdep.c       13 Feb 2009 22:41:03 -0000      1.30
--- x86/x86/x86_machdep.c       20 Mar 2009 07:20:34 -0000
*************** cpu_kpreempt_enter(uintptr_t where, int
*** 282,287 ****
--- 282,289 ----
       return true;
 }

+ #include <sys/ksyms.h>
+
 /*
  * Called after returning from a kernel preemption, and called with
  * preemption disabled.
*************** cpu_kpreempt_exit(uintptr_t where)
*** 303,308 ****
--- 305,328 ----
               pmap_load();
       }

+ {
+       int curldt;
+
+       __asm__ __volatile__("sldt %0" : "=r" (curldt) : );
+       if (curldt != curlwp->l_addr->u_pcb.pcb_ldt_sel) {
+               const char *mod, *sym;
+
+               if (ksyms_getname(&mod, &sym, where, KSYMS_ANY) != 0) {
+                       mod = "<x>";
+                       sym = "<x>";
+               }
+
+               printf("oink! %x != %x! where = %p (%s:%s)\n", curldt, curlwp->l_addr->u_pcb.pcb_ldt_sel, (void *)where, mod, sym);
+               //Debugger();
+               pmap_load();
+       }
+ }
+
       /* Restore cr2 only after the pmap, as pmap_load can block. */
       lcr2(((struct pcb *)curlwp->l_addr)->pcb_cr2);
 }