Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 May 1996 13:45:00 +0300 (EET DST)
From:      Heikki Suonsivu <hsu@clinet.fi>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   kern/1227: vm_page_activate: already active (new vm system)
Message-ID:  <199605211045.NAA00441@katiska.clinet.fi>
Resent-Message-ID: <199605211050.DAA16356@freefall.freebsd.org>

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

>Number:         1227
>Category:       kern
>Synopsis:       vm_page_activate: already active (new vm system)
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue May 21 03:50:00 PDT 1996
>Last-Modified:
>Originator:     Heikki Suonsivu
>Organization:
Clinet, Espoo, Finland
>Release:        FreeBSD 2.2-CURRENT i386
>Environment:

News server, P90, ASUS, 2940, 64M.  May 19 sup ended around 18:25 GMT.


>Description:

Dump and kernel are ftp://ftp.clinet.fi/pub/FreeBSD/crashdumps/*.73.gz

GDB is free software and you are welcome to distribute copies of it
 under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.13 (i386-unknown-freebsd), 
Copyright 1994 Free Software Foundation, Inc...
IdlePTD 268000
current pcb at 21f5f8
panic: vm_page_activate: already active
#0  boot (howto=256) at ../../i386/i386/machdep.c:940
940                                     dumppcb.pcb_ptd = rcr3();
(kgdb) bt
#0  boot (howto=256) at ../../i386/i386/machdep.c:940
#1  0xf01171f6 in panic (fmt=0xf01bd178 "vm_page_activate: already active")
    at ../../kern/subr_prf.c:127
#2  0xf01bd1d0 in vm_page_activate (m=0xf0309c70) at ../../vm/vm_page.c:703
#3  0xf01be8e4 in vm_pageout_scan () at ../../vm/vm_pageout.c:586
#4  0xf01beeda in vm_pageout () at ../../vm/vm_pageout.c:862
#5  0xf0108386 in kproc_start (udata=0xf0203cd0) at ../../kern/init_main.c:255
#6  0xf0108324 in main (framep=0xefbfffb8) at ../../kern/init_main.c:205
(kgdb) list
935                     cngetc();
936             } else {
937                     if (howto & RB_DUMP) {
938                             if (!cold) {
939                                     savectx(&dumppcb);
940                                     dumppcb.pcb_ptd = rcr3();
941                                     dumpsys();
942                             }
943
944                             if (PANIC_REBOOT_WAIT_TIME != 0) {
(kgdb) up
#1  0xf01171f6 in panic (fmt=0xf01bd178 "vm_page_activate: already active")
    at ../../kern/subr_prf.c:127
127             boot(bootopt);
(kgdb) list
122
123     #if defined(DDB)
124             if (debugger_on_panic)
125                     Debugger ("panic");
126     #endif
127             boot(bootopt);
128     }
129
130     /*
131      * Warn that a system table is full.
(kgdb) up
#2  0xf01bd1d0 in vm_page_activate (m=0xf0309c70) at ../../vm/vm_page.c:703
703                     panic("vm_page_activate: already active");
(kgdb) list
698     {
699             int s;
700
701             s = splvm();
702             if (m->queue == PQ_ACTIVE)
703                     panic("vm_page_activate: already active");
704
705             if (m->queue == PQ_CACHE)
706                     cnt.v_reactivated++;
707
(kgdb) print m
$1 = (struct vm_page *) 0xf0309c70
(kgdb) print *m
$2 = {pageq = {tqe_next = 0xf0318550, tqe_prev = 0xf02bf480}, hashq = {
    tqe_next = 0xf02e0720, tqe_prev = 0xf027f628}, listq = {
    tqe_next = 0xf0318550, tqe_prev = 0xf033e690}, object = 0xf37a1e00, 
  pindex = 197, phys_addr = 41869312, queue = 4, flags = 52, wire_count = 0, 
  hold_count = 0, act_count = 5 '\005', busy = 0 '\000', valid = 255 'ÿ', 
  dirty = 255 'ÿ'}
(kgdb) set radix 16
Input and output radices now set to decimal 16, hex 10, octal 20.
(kgdb) print *m
$3 = {pageq = {tqe_next = 0xf0318550, tqe_prev = 0xf02bf480}, hashq = {
    tqe_next = 0xf02e0720, tqe_prev = 0xf027f628}, listq = {
    tqe_next = 0xf0318550, tqe_prev = 0xf033e690}, object = 0xf37a1e00, 
  pindex = 0xc5, phys_addr = 0x27ee000, queue = 0x4, flags = 0x34, 
  wire_count = 0x0, hold_count = 0x0, act_count = 0x5, busy = 0x0, 
  valid = 0xff, dirty = 0xff}
(kgdb) print m
$4 = (struct vm_page *) 0xf0309c70
(kgdb) pint s
Undefined command: "pint".  Try "help".
(kgdb) print s
$5 = 0x80000000
(kgdb) print cnt
$6 = {v_swtch = 0xd24db, v_trap = 0x4ce50, v_syscall = 0x183927, 
  v_intr = 0x30afb0, v_soft = 0x6b6bf, v_vm_faults = 0x4085c, 
  v_cow_faults = 0xa896, v_zfod = 0x179bb, v_swapin = 0x3f3, 
  v_swapout = 0xc8b, v_swappgsin = 0x693, v_swappgsout = 0x22a6, 
  v_vnodein = 0xa36, v_vnodeout = 0x135c, v_vnodepgsin = 0x28c5, 
  v_vnodepgsout = 0x1ef3, v_intrans = 0xb, v_reactivated = 0x311a, 
  v_pdwakeups = 0x163, v_pdpages = 0x8ab71, v_dfree = 0x124, 
  v_pfree = 0x1c08a, v_tfree = 0x56f57, v_page_size = 0x1000, 
  v_page_count = 0x3d50, v_free_reserved = 0x1d, v_free_target = 0x104, 
  v_free_min = 0x6a, v_free_count = 0x1c, v_wire_count = 0xc51, 
  v_active_count = 0x225f, v_inactive_target = 0xec6, 
  v_inactive_count = 0x76c, v_cache_count = 0x717, v_cache_min = 0x703, 
  v_cache_max = 0x1c0e, v_pageout_free_min = 0x17, v_interrupt_free_min = 0x2}
(kgdb) up
#3  0xf01be8e4 in vm_pageout_scan () at ../../vm/vm_pageout.c:586
586                             vm_page_activate(m);
(kgdb) list
581                             pmap_clear_reference(VM_PAGE_TO_PHYS(m));
582                     }
583                     if ((m->flags & PG_REFERENCED) != 0) {
584                             m->flags &= ~PG_REFERENCED;
585                             pmap_clear_reference(VM_PAGE_TO_PHYS(m));
586                             vm_page_activate(m);
587                             m = next;
588                             continue;
589                     }
590
(kgdb) print m
$7 = (struct vm_page *) 0xf0309c70
(kgdb) print *m
$8 = {pageq = {tqe_next = 0xf0318550, tqe_prev = 0xf02bf480}, hashq = {
    tqe_next = 0xf02e0720, tqe_prev = 0xf027f628}, listq = {
    tqe_next = 0xf0318550, tqe_prev = 0xf033e690}, object = 0xf37a1e00, 
  pindex = 0xc5, phys_addr = 0x27ee000, queue = 0x4, flags = 0x34, 
  wire_count = 0x0, hold_count = 0x0, act_count = 0x5, busy = 0x0, 
  valid = 0xff, dirty = 0xff}
(kgdb) print next
$9 = (struct vm_page *) 0xf0318550
(kgdb) print *next
$10 = {pageq = {tqe_next = 0xf03184f0, tqe_prev = 0xf0309c70}, hashq = {
    tqe_next = 0x0, tqe_prev = 0xf027f630}, listq = {tqe_next = 0xf031e790, 
    tqe_prev = 0xf0309c80}, object = 0xf37a1e00, pindex = 0xc6, 
  phys_addr = 0x2cc8000, queue = 0x4, flags = 0xb4, wire_count = 0x0, 
  hold_count = 0x0, act_count = 0x5, busy = 0x0, valid = 0xff, dirty = 0xff}
(kgdb) up   
#4  0xf01beeda in vm_pageout () at ../../vm/vm_pageout.c:862
862                     vm_pageout_scan();
(kgdb) list
857                     if (vm_pages_needed)
858                             cnt.v_pdwakeups++;
859                     vm_pages_needed = 0;
860                     splx(s);
861                     vm_pager_sync();
862                     vm_pageout_scan();
863                     vm_pager_sync();
864                     wakeup(&cnt.v_free_count);
865             }
866     }
(kgdb) print s
$11 = 0x7fffffff
(kgdb) print vm_pages_needed
$12 = 0x0
(kgdb) up
#5  0xf0108386 in kproc_start (udata=0xf0203cd0) at ../../kern/init_main.c:255
255             (*kp->func)();
(kgdb) list
250
251             /* set up arg0 for 'ps', et al*/
252             strcpy( p->p_comm, kp->arg0);
253
254             /* call the processes' main()...*/
255             (*kp->func)();
256
257             /* NOTREACHED */
258             panic("kproc_start: %s", kp->arg0);
259     }
(kgdb) print kp
$13 = (struct kproc_desc *) 0xf0203cd0
(kgdb) print *kp
$14 = {arg0 = 0xf01be057 "pagedaemon", func = 0xf01becf0 <vm_pageout>, 
  global_procpp = 0xf024e04c}
(kgdb) up
#6  0xf0108324 in main (framep=0xefbfffb8) at ../../kern/init_main.c:205
205                                     (*((*sipp)->func))( (*sipp)->udata);
(kgdb) list
200                     case SI_TYPE_KTHREAD:
201                             /* kernel thread*/
202                             if (fork(&proc0, NULL, rval))
203                                     panic("fork kernel process");
204                             if (rval[1]) {
205                                     (*((*sipp)->func))( (*sipp)->udata);
206                                     /*
207                                      * The call to start "init" returns
208                                      * here after the scheduler has been
209                                      * started, and returns to the caller
(kgdb) print spp
No symbol "spp" in current context.
(kgdb) print sipp
$15 = (struct sysinit **) 0xf0209a58
(kgdb) print *sipp
$16 = (struct sysinit *) 0xf0203cdc
(kgdb) 

>How-To-Repeat:

I do not know.  Happened within 2 days from upgrading (the system has
paniced several times during this time).

>Fix:
	


>Audit-Trail:
>Unformatted:



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