Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 4 Jul 1999 21:38:44 +0200 (CEST)
From:      Andrzej Bialecki <abial@webgiro.com>
To:        Peter Wemm <peter@netplex.com.au>
Cc:        freebsd-current@freebsd.org
Subject:   Panic in vm_page_free_toq (Re: Panic in vm_page_zero_idle)
Message-ID:  <Pine.BSF.4.05.9907042129400.67827-300000@freja.webgiro.com>
In-Reply-To: <19990629171306.122DB82@overcee.netplex.com.au>

index | next in thread | previous in thread | raw e-mail

[-- Attachment #1 --]
On Wed, 30 Jun 1999, Peter Wemm wrote:

> Andrzej Bialecki wrote:
> > Hi,
> > 
> > Sources are from yesterday, machine is Toshiba Portege 7020CT. During make
> > -j24 buildworld machine dies with the following panic mesage (notice
> > absence of register dump):
> > 
> > kernel: type 12 trap, code=0
> > Stopped at vm_page_zero_idle+0xc9:   movl %eax,0x4(%edx)
> > 
> > db> tr
> > vm_page_zero_idle(e,66a,2,183f9ff,756e6547) at vm_page_zero_idle+0xc9
 > > idle_loop() at idle_loop+0x2d
> 
> That's because there is no process context at this point, and nowhere the
> registers are saved for the idle ``context''. 
> 
> Trap 12 is a page fault.  Do a 'show registers' to see what's up.  I
> would like to know what %edx is.
> 
> It's trapping here:
>                 m = vm_page_list_find(PQ_FREE, free_rover, FALSE);
>                 if (m != NULL && (m->flags & PG_ZERO) == 0) {
>                         --(*vm_page_queues[m->queue].lcnt);
>                         TAILQ_REMOVE(vm_page_queues[m->queue].pl, m, pageq);
>                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^
>                         m->queue = PQ_NONE;
>                         splx(s);
> 
> Specifically, vm_page_queues[m->queue].pl is invalid or the tailq corrupt
> or something evil along those lines.  Or, m->queue is bogus and causing
> an out of bounds array lookup.  Hmm, do a show registers and record %eax
> at this point too.

I could only use gdb, and I didn't have kernel.debug. I went some frames
up to reach the vm_page_zero_idle, and did "info registers". Both %eax and
%edx were 0x0.

But this time I was (a little bit) wiser. Here's another panic - this time
I got the core file and a kernel with symbols, and I did what I could with
gdb, but finally ran out of ideas... ;-)

Additionally, the core file is on a laptop, and I have only modem
connection at the moment, but I will be able to put it om freefall (or
wherever) at the end of next week.

Andrzej Bialecki

//  <abial@webgiro.com> WebGiro AB, Sweden (http://www.webgiro.com)
// -------------------------------------------------------------------
// ------ FreeBSD: The Power to Serve. http://www.freebsd.org --------
// --- Small & Embedded FreeBSD: http://www.freebsd.org/~picobsd/ ----

[-- Attachment #2 --]
Script started on Sun Jul  4 20:54:36 1999
# gdb -k /sys/compile/TUNE/kernel.debug vmcore.2

GNU gdb 4.18

Copyright 1998 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are

welcome to change it and/or 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.

This GDB was configured as "i386-unknown-freebsd"...

IdlePTD 2822144

initial pcb at 240680

panicstr: vm_page_free: freeing free page

panic messages:

---

panic: vm_page_free: freeing free page



syncing disks... done



dumping to dev (0,196609), offset 131328

dump 127 126 125 124 123 122 121 120 119 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 

---

#0  boot (howto=256) at ../../kern/kern_shutdown.c:289

289			dumppcb.pcb_cr3 = rcr3();

(kgdb) where

#0  boot (howto=256) at ../../kern/kern_shutdown.c:289

#1  0xc0135851 in panic (fmt=0xc020ece0 "vm_page_free: freeing free page")

    at ../../kern/kern_shutdown.c:452

#2  0xc01a7f3d in vm_page_free_toq (m=0xc045f3e0) at ../../vm/vm_page.c:1095

#3  0xc01a5e39 in vm_object_terminate (object=0xc6b40bd0)

    at ../../vm/vm_page.h:500

#4  0xc01a5d55 in vm_object_deallocate (object=0xc6b40bd0)

    at ../../vm/vm_object.c:382

#5  0xc01a3263 in vm_map_entry_delete (map=0xc6880740, entry=0xc6cb6f78)

    at ../../vm/vm_map.c:1680

#6  0xc01a3421 in vm_map_delete (map=0xc6880740, start=0, end=3217022976)

    at ../../vm/vm_map.c:1783

#7  0xc01a34a5 in vm_map_remove (map=0xc6880740, start=0, end=3217022976)

    at ../../vm/vm_map.c:1808

#8  0xc012f310 in exit1 (p=0xc6d1ad60, rv=11) at ../../kern/kern_exit.c:220

#9  0xc0136bfe in sigexit (p=0xc6d1ad60, signum=11)

    at ../../kern/kern_sig.c:1251

#10 0xc0136a41 in postsig (signum=11) at ../../kern/kern_sig.c:1157

#11 0xc01d0b7e in trap (frame={tf_fs = 47, tf_es = -1063190481, 

      tf_ds = -1078001617, tf_edi = 0, tf_esi = 671533121, 

      tf_ebp = -1077945512, tf_isp = -958808108, tf_ebx = 671531312, 

      tf_edx = 27, tf_ecx = 134529888, tf_eax = 134291808, tf_trapno = 12, 

      tf_err = 134291808, tf_eip = 134529926, tf_cs = 31, tf_eflags = 66070, 

      tf_esp = -1077945512, tf_ss = 47}) at ../../i386/i386/trap.c:162

---Type <return> to continue, or q <return> to quit---

#12 0x804c386 in ?? ()

Cannot access memory at address 0xbfbfdb58.

(kgdb) up

#1  0xc0135851 in panic (fmt=0xc020ece0 "vm_page_free: freeing free page")

    at ../../kern/kern_shutdown.c:452

452		boot(bootopt);

(kgdb) up

#2  0xc01a7f3d in vm_page_free_toq (m=0xc045f3e0) at ../../vm/vm_page.c:1095

1095				panic("vm_page_free: freeing free page");

(kgdb) list

1090			printf(

1091			"vm_page_free: pindex(%lu), busy(%d), PG_BUSY(%d), hold(%d)\n",

1092			    (u_long)m->pindex, m->busy, (m->flags & PG_BUSY) ? 1 : 0,

1093			    m->hold_count);

1094			if ((m->queue - m->pc) == PQ_FREE)

1095				panic("vm_page_free: freeing free page");

1096			else

1097				panic("vm_page_free: freeing busy page");

1098		}

1099	#endif

(kgdb) print *m

$1 = {pageq = {tqe_next = 0xc04ca7e0, tqe_prev = 0xc0230e98}, hnext = 0x0, 

  listq = {tqe_next = 0xc057a580, tqe_prev = 0xc6b00be8}, object = 0x0, 

  pindex = 31, phys_addr = 8826880, queue = 44, flags = 129, pc = 43, 

  wire_count = 0, hold_count = 0, act_count = 5 '\005', busy = 0 '\000', 

  valid = 0 '\000', dirty = 255 'ÿ'}

(kgdb) print *(m->pageq.tqe_next)

$2 = {pageq = {tqe_next = 0xc053a3e0, tqe_prev = 0xc045f3e0}, hnext = 0x0, 

  listq = {tqe_next = 0xc0571b80, tqe_prev = 0xc690c2a0}, object = 0x0, 

  pindex = 5, phys_addr = 46313472, queue = 44, flags = 128, pc = 43, 

  wire_count = 0, hold_count = 0, act_count = 5 '\005', busy = 0 '\000', 

  valid = 0 '\000', dirty = 255 'ÿ'}

(kgdb) print **(m->pageq.tqe_prev)

$4 = {pageq = {tqe_next = 0xc04ca7e0, tqe_prev = 0xc0230e98}, hnext = 0x0, 

  listq = {tqe_next = 0xc057a580, tqe_prev = 0xc6b00be8}, object = 0x0, 

  pindex = 31, phys_addr = 8826880, queue = 44, flags = 129, pc = 43, 

  wire_count = 0, hold_count = 0, act_count = 5 '\005', busy = 0 '\000', 

  valid = 0 '\000', dirty = 255 'ÿ'}

(kgdb) print *((m->pageq.tqe_next)->pageq.tqe_next)

$5 = {pageq = {tqe_next = 0xc04aafe0, tqe_prev = 0xc04ca7e0}, hnext = 0x0, 

  listq = {tqe_next = 0x0, tqe_prev = 0xc696815c}, object = 0x0, pindex = 9, 

  phys_addr = 85372928, queue = 44, flags = 128, pc = 43, wire_count = 0, 

  hold_count = 0, act_count = 5 '\005', busy = 0 '\000', valid = 0 '\000', 

  dirty = 255 'ÿ'}

(kgdb) up

#3  0xc01a5e39 in vm_object_terminate (object=0xc6b40bd0)

    at ../../vm/vm_page.h:500

500		vm_page_free_toq(m);

(kgdb) print *object

$6 = {object_list = {tqe_next = 0xc6e0c804, tqe_prev = 0xc6aa1b64}, 

  shadow_head = {tqh_first = 0x0, tqh_last = 0xc6b40bd8}, shadow_list = {

    tqe_next = 0x0, tqe_prev = 0xc6b7c1b8}, memq = {tqh_first = 0xc045f3e0, 

    tqh_last = 0xc056f0fc}, generation = 800, type = OBJT_DEFAULT, size = 32, 

  ref_count = 0, shadow_count = 0, pg_color = 12, hash_rand = -206344143, 

  flags = 8584, paging_in_progress = 0, behavior = 0, resident_page_count = 2, 

  backing_object = 0x0, backing_object_offset = 0, last_read = 0, 

  pager_object_list = {tqe_next = 0x0, tqe_prev = 0x0}, handle = 0x0, 

  un_pager = {vnp = {vnp_size = 0}, devp = {devp_pglist = {tqh_first = 0x0, 

        tqh_last = 0x0}}, swp = {swp_bcount = 0}}}

(kgdb) quit

# exit


Script done on Sun Jul  4 21:18:32 1999

[-- Attachment #3 --]
#
# GENERIC -- Generic machine with WD/AHx/NCR/BTx family disks
#
# For more information read the handbook part System Administration -> 
# Configuring the FreeBSD Kernel -> The Configuration File. 
# The handbook is available in /usr/share/doc/handbook or online as
# latest version from the FreeBSD World Wide Web server 
# <URL:http://www.FreeBSD.ORG/>;
#
# An exhaustive list of options and more detailed explanations of the 
# device lines is present in the ./LINT configuration file. If you are 
# in doubt as to the purpose or necessity of a line, check first in LINT.
#
#	$Id: GENERIC,v 1.143.2.11 1999/05/04 00:15:55 msmith Exp $

machine		"i386"
cpu		"I686_CPU"
ident		TUNE
maxusers	32

options		INET			#InterNETworking
options		FFS			#Berkeley Fast Filesystem
options		FFS_ROOT		#FFS usable as root device [keep this!]
options		MSDOSFS			#MSDOS Filesystem
options		"CD9660"		#ISO 9660 Filesystem
options		"CD9660_ROOT"		#CD-ROM usable as root. "CD9660" req'ed
options		PROCFS			#Process filesystem
options		"COMPAT_43"		#Compatible with BSD 4.3 [KEEP THIS!]
options		UCONSOLE		#Allow users to grab the console
options		USERCONFIG		#boot -c editor
options		VISUAL_USERCONFIG	#visual boot -c editor
options		DDB

#config		kernel	root on wd0

# To make an SMP kernel, the next two are needed
#options	SMP			# Symmetric MultiProcessor Kernel
#options	APIC_IO			# Symmetric (APIC) I/O
# Optionally these may need tweaked, (defaults shown):
#options	NCPU=2			# number of CPUs
#options	NBUS=4			# number of busses
#options	NAPIC=1			# number of IO APICs
#options	NINTR=24		# number of INTs

controller	isa0
controller	pci0
controller	pnp0

device pcm0 at isa? port 0x220 irq 5 drq 1 flags 0x0

controller	fdc0	at isa? port "IO_FD1" irq 6 drq 2
disk		fd0	at fdc0 drive 0

#controller	wdc0	at isa? port "IO_WD1" irq 14
#disk		wd0	at wdc0 drive 0
#disk		wd1	at wdc0 drive 1

#controller	wdc1	at isa? port "IO_WD2" irq 15
#disk		wd2	at wdc1 drive 0
#disk		wd3	at wdc1 drive 1

#device		wcd0		#IDE CD-ROM

controller	ata0
device		atadisk0
device		atapicd0

# atkbdc0 controlls both the keyboard and the PS/2 mouse
controller	atkbdc0	at isa? port IO_KBD
device		atkbd0	at atkbdc? irq 1
device		psm0	at atkbdc? irq 12

device		vga0	at isa? port ? conflicts

# splash screen/screen saver
pseudo-device	splash

# syscons is the default console driver, resembling an SCO console
device		sc0	at isa? 

device		npx0	at isa? port IO_NPX irq 13

#
# Laptop support (see LINT for more options)
#
device		apm0    at isa?	flags 0x31 # Advanced Power Management

# PCCARD (PCMCIA) support
controller	card0
device		pcic0	at card?
device		pcic1	at card?

device		sio0	at isa? port "IO_COM1" flags 0x10 irq 4
device		sio1	at isa? port "IO_COM2" irq 3
device		sio2	at isa? disable port "IO_COM3" irq 5
device		sio3	at isa? disable port "IO_COM4" irq 9

# Parallel port
device		ppc0	at isa? port? flags 0x40 irq 7
controller	ppbus0
device		lpt0	at ppbus?
device		plip0	at ppbus?
device		ppi0	at ppbus?

#
# The following Ethernet NICs are all PCI devices.
#
#device ax0		# ASIX AX88140A
#device de0		# DEC/Intel DC21x4x (``Tulip'')
device fxp0		# Intel EtherExpress PRO/100B (82557, 82558)
#device mx0		# Macronix 98713/98715/98725 (``PMAC'')
#device pn0		# Lite-On 82c168/82c169 (``PNIC'')
#device rl0		# RealTek 8129/8139
#device tl0		# Texas Instruments ThunderLAN
#device tx0		# SMC 9432TX (83c170 ``EPIC'')
#device vr0		# VIA Rhine, Rhine II
#device vx0		# 3Com 3c590, 3c595 (``Vortex'')
#device wb0		# Winbond W89C840F
#device xl0		# 3Com 3c90x (``Boomerang'', ``Cyclone'')

# Order is important here due to intrusive probes, do *not* alphabetize
# this list of network interfaces until the probes have been fixed.
# Right now it appears that the ie0 must be probed before ep0. See
# revision 1.20 of this file.

device ed0 at isa? port 0x280 irq 10 iomem 0xd8000
device ie0 at isa? port 0x300 irq 10 iomem 0xd0000
device ep0 at isa? port 0x300 irq 10
device ex0 at isa? port? irq?
device fe0 at isa? port 0x300 irq ?
device le0 at isa? port 0x300 irq 5 iomem 0xd0000
device lnc0 at isa? port 0x280 irq 10 drq 0
device cs0 at isa? port 0x300 irq ?

pseudo-device	loop
pseudo-device	ether
pseudo-device	sl	1
pseudo-device	ppp	1
pseudo-device	tun	2
pseudo-device	vn	4
pseudo-device	pty	16
pseudo-device	gzip		# Exec gzipped a.out's

# KTRACE enables the system-call tracing facility ktrace(2).
# This adds 4 KB bloat to your kernel, and slightly increases
# the costs of each syscall.
options		KTRACE		#kernel tracing

# This provides support for System V shared memory and message queues.
#
options		SYSVSHM
options		SYSVMSG
options		SYSVSEM

#  The `bpfilter' pseudo-device enables the Berkeley Packet Filter.  Be
#  aware of the legal and administrative consequences of enabling this
#  option.  The number of devices determines the maximum number of
#  simultaneous BPF clients programs runnable.
pseudo-device	bpfilter 4	#Berkeley packet filter


help

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.05.9907042129400.67827-300000>