Author: kib
Date: Sat May 12 10:48:53 2018
New Revision: 333522
URL: https://svnweb.freebsd.org/changeset/base/333522

Log:
  Fix use of the custom TSS on i386 after the 4/4 split.
  
  Record common_tssd, the descriptor to be written in GDT to point to
  the common TSS, before LTR is executed.  The LTR instruction sets the
  loaded descriptor type to 386 TSS busy, which traps on reloads.
  
  Sponsored by: The FreeBSD Foundation

Modified:
  head/sys/i386/i386/machdep.c

Modified: head/sys/i386/i386/machdep.c
==============================================================================
--- head/sys/i386/i386/machdep.c        Sat May 12 10:11:33 2018        
(r333521)
+++ head/sys/i386/i386/machdep.c        Sat May 12 10:48:53 2018        
(r333522)
@@ -2532,12 +2532,12 @@ machdep_init_trampoline(void)
        gdt[GPROC0_SEL].sd.sd_lobase = (int)tss;
        gdt[GPROC0_SEL].sd.sd_hibase = (u_int)tss >> 24;
        gdt[GPROC0_SEL].sd.sd_type = SDT_SYS386TSS;
-       ltr(GSEL(GPROC0_SEL, SEL_KPL));
 
        PCPU_SET(fsgs_gdt, &gdt[GUFS_SEL].sd);
        PCPU_SET(tss_gdt, &gdt[GPROC0_SEL].sd);
        PCPU_SET(common_tssd, *PCPU_GET(tss_gdt));
        PCPU_SET(common_tssp, tss);
+       ltr(GSEL(GPROC0_SEL, SEL_KPL));
 
        trampoline = pmap_trm_alloc(end_exceptions - start_exceptions,
            M_NOWAIT);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to