Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 Apr 2007 21:17:45 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/amd64/amd64 vm_machdep.c src/sys/i386/i386 vm_machdep.c
Message-ID:  <200704242117.l3OLHjRn017578@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
jhb         2007-04-24 21:17:45 UTC

  FreeBSD src repository

  Modified files:
    sys/amd64/amd64      vm_machdep.c 
    sys/i386/i386        vm_machdep.c 
  Log:
  Fix the triple fault used as a last resort during a reboot to actually
  fault.  The previous method zero'd out the page tables, invalidated the
  TLB, and then entered a spin loop.  The idea was that the instruction after
  the TLB invalidate would result in a page fault and the page fault and
  subsequent double fault wouldn't be able to determine the physical page
  for their fault handlers' first instruction.  This stopped working when
  PGE (PG_G PTE/PDE bit) support was added as a TLB invalidate via %cr3
  reload doesn't clear TLB entries with PG_G set.  Thus, the CPU was still
  able to map the virtual address for the spin loop and happily performed
  its infinite loop.
  
  The triple fault now uses a much more deterministic sledge-hammer approach
  to generate a triple fault.  First, the IDT descriptor is set to point to
  an empty IDT, so any interrupts (including a double fault) will instantly
  fault.  Second, we trigger a int 3 breakpoint to force an interrupt and
  kick off a triple fault.
  
  MFC after:      3 days
  
  Revision  Changes    Path
  1.254     +8 -3      src/sys/amd64/amd64/vm_machdep.c
  1.279     +7 -3      src/sys/i386/i386/vm_machdep.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200704242117.l3OLHjRn017578>