Author: alc Date: Mon Sep 28 17:10:27 2009 New Revision: 197580 URL: http://svn.freebsd.org/changeset/base/197580
Log: Temporarily disable the use of 1GB page mappings by the direct map. There are currently two problems with the use of 1GB page mappings by the direct map. First, at least one device driver uses pmap_extract() rather than DMAP_TO_PHYS() to translate a direct map address to a physical address. Unfortunately, neither pmap_extract() nor pmap_kextract() yet support 1GB page mappings. Second, pmap_bootstrap() needs to interrogate the MTRRs to ensure that a 1GB page mapping doesn't span two MTRRs of different types. Reported and tested by: Daniel O'Connor MFC after: 3 days Modified: head/sys/amd64/amd64/pmap.c Modified: head/sys/amd64/amd64/pmap.c ============================================================================== --- head/sys/amd64/amd64/pmap.c Mon Sep 28 16:59:47 2009 (r197579) +++ head/sys/amd64/amd64/pmap.c Mon Sep 28 17:10:27 2009 (r197580) @@ -442,7 +442,7 @@ create_pagetables(vm_paddr_t *firstaddr) if (ndmpdp < 4) /* Minimum 4GB of dirmap */ ndmpdp = 4; DMPDPphys = allocpages(firstaddr, NDMPML4E); - if ((amd_feature & AMDID_PAGE1GB) == 0) + if (TRUE || (amd_feature & AMDID_PAGE1GB) == 0) DMPDphys = allocpages(firstaddr, ndmpdp); dmaplimit = (vm_paddr_t)ndmpdp << PDPSHIFT; @@ -476,7 +476,7 @@ create_pagetables(vm_paddr_t *firstaddr) /* Now set up the direct map space using either 2MB or 1GB pages */ /* Preset PG_M and PG_A because demotion expects it */ - if ((amd_feature & AMDID_PAGE1GB) == 0) { + if (TRUE || (amd_feature & AMDID_PAGE1GB) == 0) { for (i = 0; i < NPDEPG * ndmpdp; i++) { ((pd_entry_t *)DMPDphys)[i] = (vm_paddr_t)i << PDRSHIFT; ((pd_entry_t *)DMPDphys)[i] |= PG_RW | PG_V | PG_PS | _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"