Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Apr 1997 03:32:16 +0200 (MET DST)
From:      Tor Egge <Tor.Egge@idi.ntnu.no>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   kern/3216: panic: pmap_zero_page: CMAP busy
Message-ID:  <199704070132.DAA03220@presis.idt.ntnu.no>
Resent-Message-ID: <199704070430.VAA17604@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         3216
>Category:       kern
>Synopsis:       panic: pmap_zero_page: CMAP busy
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Apr  6 21:30:12 PDT 1997
>Last-Modified:
>Originator:     Tor Egge
>Organization:
Norwegian University of Science and Technology, Trondheim, Norway
>Release:        FreeBSD 3.0-CURRENT i386
>Environment:

	FreeBSD-3.0 current as of Apr 6.

>Description:

while the processor is clearing pages in vm_page_zero_idle, interrupts are
enabled. This might cause an attempt to call pmap_zero_page while it
cannot be called.
	
db> trace
vget
ffs_sync
sync
boot
panic
pmap_zero_page    (probably via inlined vm_page_zero_fill) 
vm_fault
trap_pfault
trap
calltrap
trap 0xc, ...
ip_input
ipintr
swi_net_next
vm_page_zero_idle
idle_loop

>How-To-Repeat:

High system load, causing the queues of pages to be zero-filled to be long.
Then lower load, causing the idle_loop to be activated. Then a interrupt while
pmap_zero_page is using CMAP2.

>Fix:

Alternative 1:

Block some interrupts during the call to pmap_zero_page in vm_page_zero_idle.

*** vm_machdep.c.orig	Mon Apr  7 02:34:29 1997
--- vm_machdep.c	Mon Apr  7 03:07:49 1997
***************
*** 883,889 ****
--- 883,891 ----
  		--(*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);


Alternative 2:

Introduce a modified clone of pmap zero_page, using CMAP3/CADDR3 instead of
CMAP2/CADDR2, and call that clone in vm_page_zero_idle instead of the 
original.

>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199704070132.DAA03220>