From 8d228514fbe63e35f9326ffdc349c512d83d69a8 Mon Sep 17 00:00:00 2001 From: Ade Lovett Date: Fri, 21 Oct 2005 19:42:43 +0000 Subject: [PATCH] Specifically panic() in the case where pmap_insert_entry() fails to get a new pv under high system load where the available pv entries have been exhausted before the pagedaemon has a chance to wake up to reclaim some. Prior to this, the NULL pointer dereference ended up causing secondary panics with rather less than useful resulting tracebacks. Reviewed by: alc, jhb MFC after: 1 week --- sys/alpha/alpha/pmap.c | 2 ++ sys/amd64/amd64/pmap.c | 2 ++ sys/i386/i386/pmap.c | 2 ++ sys/ia64/ia64/pmap.c | 2 ++ 4 files changed, 8 insertions(+) diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c index 59017cf6b91..c1d9ffa24ef 100644 --- a/sys/alpha/alpha/pmap.c +++ b/sys/alpha/alpha/pmap.c @@ -1367,6 +1367,8 @@ pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t mpte, vm_page_t m) pv_entry_t pv; pv = get_pv_entry(); + if (pv == NULL) + panic("no pv entries: increase vm.pmap.shpgperproc"); pv->pv_va = va; pv->pv_pmap = pmap; pv->pv_ptem = mpte; diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 4c188aaded2..029963a8966 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -1508,6 +1508,8 @@ pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t m) pv_entry_t pv; pv = get_pv_entry(); + if (pv == NULL) + panic("no pv entries: increase vm.pmap.shpgperproc"); pv->pv_va = va; pv->pv_pmap = pmap; diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index f712f83bda9..d813e168368 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -1510,6 +1510,8 @@ pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t m) pv_entry_t pv; pv = get_pv_entry(); + if (pv == NULL) + panic("no pv entries: increase vm.pmap.shpgperproc"); pv->pv_va = va; pv->pv_pmap = pmap; diff --git a/sys/ia64/ia64/pmap.c b/sys/ia64/ia64/pmap.c index 284801ff5d0..10f22ba483f 100644 --- a/sys/ia64/ia64/pmap.c +++ b/sys/ia64/ia64/pmap.c @@ -968,6 +968,8 @@ pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t m) pv_entry_t pv; pv = get_pv_entry(); + if (pv == NULL) + panic("no pv entries: increase vm.pmap.shpgperproc"); pv->pv_pmap = pmap; pv->pv_va = va;