git: kernel - Align virtual_start, workaround possible HW VM bugs

Matthew Dillon dillon at crater.dragonflybsd.org
Sat May 28 16:03:49 PDT 2016


commit e172ba36a5ed520510b898ddc1929687d6e4e847
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Sat May 28 15:56:13 2016 -0700

    kernel - Align virtual_start, workaround possible HW VM bugs
    
    * virtual_start is 2MB-aligned at the kernel load's end address.
      The page table mappings prior to this address are 2MB mappings.
    
      Additional SYSMAP()d space is reserved in early boot, such as
      the CMAP entries and the dmesg buffer.  The page table mappings
      in this area should all be 4K pages.
    
    * Kernel virtual memory beyond the SYSMAP()d space is available for
      general allocation, but positioned such that only kldload modules will
      try to use it specifically.  Sascha (swildner) found that any initial
      kldload done after boot in vmware player 7.1.4 build-3848939 running
      on a i7-4770K based host would panic.
    
      A kernel core of this panic appears to show a corrupt pte in a location
      where the pte should have been read as 0.
    
    * Doing an additional 2MB alignment of virtual_start after the SYSMAP()s
      appears to work around this corruption, which is this commit.  This
      means that the first general allocation in the kernel load portion of
      the kernel_map will be shifted to the next 2MB boundary past the SYSMAP()s.
    
    * I can only speculate that the hardware is somehow getting confused, but
      I can't really fathon how it is getting confused because the SYSMAP
      reservations should all be using 4KB pages.

Summary of changes:
 sys/platform/pc64/x86_64/pmap.c | 1 +
 1 file changed, 1 insertion(+)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/e172ba36a5ed520510b898ddc1929687d6e4e847


-- 
DragonFly BSD source repository


More information about the Commits mailing list