diff options
author | Vikram Hegde <Vikram.Hegde@Sun.COM> | 2008-11-23 12:55:24 -0800 |
---|---|---|
committer | Vikram Hegde <Vikram.Hegde@Sun.COM> | 2008-11-23 12:55:24 -0800 |
commit | 408a1f8e8d62a79cfb7c54491234b73c736aee40 (patch) | |
tree | 5c051c76d9359ab5612b67868215e756c399ccb1 | |
parent | c37d261606ca09ed88ad202dbbad83f95365e2be (diff) | |
download | illumos-gate-408a1f8e8d62a79cfb7c54491234b73c736aee40.tar.gz |
6753225 null pointer dereference panic in page_downgrade()
6774397 Intel PRO/1000 PT Quad Port LP server adapter needs unity map
6774406 WARNING: pcplusmp: mod_remove_by_name failed 16 messages on uniprocessor machines
-rw-r--r-- | usr/src/uts/i86pc/io/intel_iommu.c | 24 | ||||
-rw-r--r-- | usr/src/uts/i86pc/os/mp_implfuncs.c | 2 | ||||
-rw-r--r-- | usr/src/uts/i86pc/vm/vm_machdep.c | 6 |
3 files changed, 21 insertions, 11 deletions
diff --git a/usr/src/uts/i86pc/io/intel_iommu.c b/usr/src/uts/i86pc/io/intel_iommu.c index 1a4fecbf78..8f4212b41d 100644 --- a/usr/src/uts/i86pc/io/intel_iommu.c +++ b/usr/src/uts/i86pc/io/intel_iommu.c @@ -2291,11 +2291,11 @@ drhd_only_for_gfx(intel_iommu_state_t *iommu) } /* - * build_gfx_identity_map() - * build identity map for the gfx device + * build_dev_identity_map() + * build identity map for a device */ static void -build_gfx_identity_map(dev_info_t *dip) +build_dev_identity_map(dev_info_t *dip) { struct memlist *mp; dmar_domain_state_t *domain; @@ -2307,8 +2307,6 @@ build_gfx_identity_map(dev_info_t *dip) return; } - gfx_devinfo = dip; - ASSERT(bootops != NULL); ASSERT(!modrootloaded); mp = bootops->boot_mem->physinstalled; @@ -2347,10 +2345,20 @@ build_isa_gfx_identity_walk(dev_info_t *dip, void *arg) return (DDI_WALK_CONTINUE); /* fix the gfx and fd */ - if (private->idp_is_display) - build_gfx_identity_map(dip); - else if (private->idp_is_lpc) + if (private->idp_is_display) { + gfx_devinfo = dip; + build_dev_identity_map(dip); + } else if (private->idp_is_lpc) { lpc_devinfo = dip; + } + + /* workaround for pci8086,10bc pci8086,11bc */ + if ((strcmp(ddi_node_name(dip), "pci8086,10bc") == 0) || + (strcmp(ddi_node_name(dip), "pci8086,11bc") == 0)) { + cmn_err(CE_CONT, "?Workaround for PRO/1000 PT Quad" + " Port LP Server Adapter applied\n"); + build_dev_identity_map(dip); + } return (DDI_WALK_CONTINUE); } diff --git a/usr/src/uts/i86pc/os/mp_implfuncs.c b/usr/src/uts/i86pc/os/mp_implfuncs.c index eb943a0372..b5742b2c69 100644 --- a/usr/src/uts/i86pc/os/mp_implfuncs.c +++ b/usr/src/uts/i86pc/os/mp_implfuncs.c @@ -423,7 +423,7 @@ psm_install(void) (void) strcpy(&machstring[0], cswp->psw_infop->p_mach_idstring); err = mod_remove_by_name(cswp->psw_infop->p_mach_idstring); if (err) - cmn_err(CE_WARN, "%s: mod_remove_by_name failed %d", + cmn_err(CE_WARN, "!%s: mod_remove_by_name failed %d", &machstring[0], err); mutex_enter(&psmsw_lock); } diff --git a/usr/src/uts/i86pc/vm/vm_machdep.c b/usr/src/uts/i86pc/vm/vm_machdep.c index 02aadc9f2a..231ded40be 100644 --- a/usr/src/uts/i86pc/vm/vm_machdep.c +++ b/usr/src/uts/i86pc/vm/vm_machdep.c @@ -3739,9 +3739,11 @@ page_get_physical(int flags) if (pp != NULL) { page_io_unlock(pp); page_hashout(pp, NULL); + mutex_exit(&pgp_mutex); + page_downgrade(pp); + } else { + mutex_exit(&pgp_mutex); } - mutex_exit(&pgp_mutex); - page_downgrade(pp); return (pp); } |