summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authortegge <tegge@FreeBSD.org>1997-06-25 19:49:45 +0000
committertegge <tegge@FreeBSD.org>1997-06-25 19:49:45 +0000
commit0b785f19704c8e0cf49a4a9bb5a1a8e42faffe62 (patch)
tree52e16d17073831b55163f4ef01b4375071c45d3f /sys
parentfef65421d3583585ef484383e7a06b2d6c75a1fb (diff)
downloadFreeBSD-src-0b785f19704c8e0cf49a4a9bb5a1a8e42faffe62.zip
FreeBSD-src-0b785f19704c8e0cf49a4a9bb5a1a8e42faffe62.tar.gz
Block some interrupts during the call to pmap_zero_page in
vm_page_zero_idle. This fixes some occurences of the problem reported in PR kern/3216: "panic: pmap_zero_page: CMAP busy"
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/vm_machdep.c4
-rw-r--r--sys/i386/i386/vm_machdep.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/sys/amd64/amd64/vm_machdep.c b/sys/amd64/amd64/vm_machdep.c
index 5ad743d..bc8ba25 100644
--- a/sys/amd64/amd64/vm_machdep.c
+++ b/sys/amd64/amd64/vm_machdep.c
@@ -38,7 +38,7 @@
*
* from: @(#)vm_machdep.c 7.3 (Berkeley) 5/13/91
* Utah $Hdr: vm_machdep.c 1.16.1.1 89/06/23$
- * $Id: vm_machdep.c,v 1.80 1997/05/07 20:19:18 peter Exp $
+ * $Id: vm_machdep.c,v 1.81 1997/06/22 16:03:40 peter Exp $
*/
#include "npx.h"
@@ -921,7 +921,9 @@ vm_page_zero_idle()
--(*vm_page_queues[m->queue].lcnt);
TAILQ_REMOVE(vm_page_queues[m->queue].pl, m, pageq);
splx(s);
+ (void)splvm();
pmap_zero_page(VM_PAGE_TO_PHYS(m));
+ splx(s);
(void)splvm();
m->queue = PQ_ZERO + m->pc;
++(*vm_page_queues[m->queue].lcnt);
diff --git a/sys/i386/i386/vm_machdep.c b/sys/i386/i386/vm_machdep.c
index 5ad743d..bc8ba25 100644
--- a/sys/i386/i386/vm_machdep.c
+++ b/sys/i386/i386/vm_machdep.c
@@ -38,7 +38,7 @@
*
* from: @(#)vm_machdep.c 7.3 (Berkeley) 5/13/91
* Utah $Hdr: vm_machdep.c 1.16.1.1 89/06/23$
- * $Id: vm_machdep.c,v 1.80 1997/05/07 20:19:18 peter Exp $
+ * $Id: vm_machdep.c,v 1.81 1997/06/22 16:03:40 peter Exp $
*/
#include "npx.h"
@@ -921,7 +921,9 @@ vm_page_zero_idle()
--(*vm_page_queues[m->queue].lcnt);
TAILQ_REMOVE(vm_page_queues[m->queue].pl, m, pageq);
splx(s);
+ (void)splvm();
pmap_zero_page(VM_PAGE_TO_PHYS(m));
+ splx(s);
(void)splvm();
m->queue = PQ_ZERO + m->pc;
++(*vm_page_queues[m->queue].lcnt);
OpenPOWER on IntegriCloud