After updating to uvm_pdaemon.c r1.147, the troublesome behaviour has
changed to a panic.
fatal address error (store) in kernel mode
va 0x6565726a spc 0x8c046d10 ssr 0x400001c0 pr 0x8c046ce0
panic: general_exception
Stopped at db_enter+0x8: add #0x4, r14
TID PID UID PRFLAGS PFLAGS CPU COMMAND
*271667 72941 0 0x14000 0x200 0 pagedaemon
db_enter() at db_enter+0x8
panic() at panic+0x74
general_exception() at general_exception+0x154
(EXPEVT 100; SSR=400001c0) at uvmpd_scan+0x90
uvmpd_scan() at uvmpd_scan+0x90
uvm_pageout() at uvm_pageout+0x146
ddb> show uvmexp
Current UVM status:
pagesize=4096 (0x1000), pagemask=0xfff, pageshift=12
14865 VM pages: 0 active, 162 inactive, 1 wired, 9931 free (518 zero)
freemin=495, free-target=660, inactive-target=661, wired-max=4955
faults=55011597, traps=29257669, intrs=8677232, ctxswitch=3881654 fpuswitch=0
softint=3977848, syscalls=29257667, kmapent=10
fault counts:
noram=163461, noanon=0, noamap=0, pgwait=43, pgrele=0
relocks=453114(2878), upgrades=0(0) anget(retries)=28000701(44995), amapcop
y=11763286
neighbor anon/obj pg=23087572/37035478, gets(lock/unlock)=10632859/409283
cases: anon=21887100, anoncow=6111864, obj=9274150, prcopy=1357545, przero=
16348687
daemon and swap counts:
woke=176626, revs=166731, scans=231976, obscans=74891, anscans=124650
busy=0, freed=130110, reactivate=32420, deactivate=622324
pageouts=9616, pending=6524, nswget=21059
nswapdev=1
swpages=4194415, swpginuse=4956, swpgonly=4794 paging=0
kernel pointers:
objs(kern)=0x8c3d0d08
ddb> show bcstats
Current Buffer Cache status:
numbufs 171 busymapped 1, delwri 53
kvaslots 185 avail kva slots 184
bufpages 678, dmapages 678, dirtypages 212
pendingreads 1, pendingwrites 3
highflips 0, highflops 0, dmaflips 0
ddb> ps
PID TID PPID UID S FLAGS WAIT COMMAND
99427 505468 33120 1500 3 0x100003 pmrwait ssh
33120 310151 21883 1500 3 0x100003 biowait cvs
21883 309994 986 1500 3 0x10008b sigsusp ksh
60112 391117 96178 1500 3 0x100083 ttyin ksh
986 2677 25804 1500 3 0x98 kqread sshd-session
96178 133690 97540 1500 3 0x98 kqread sshd-session
97540 71703 84592 0 3 0x92 kqread sshd-session
25804 371332 84592 0 3 0x92 kqread sshd-session
67204 373407 1 0 3 0x100083 ttyin getty
63847 42633 1 0 3 0x100098 kqread cron
48671 12896 1 0 3 0x100090 kqread inetd
51125 44754 7241 95 3 0x1100092 kqread smtpd
28283 359944 7241 103 3 0x1100092 kqread smtpd
20773 34325 7241 95 3 0x1100092 kqread smtpd
24281 206812 7241 95 3 0x100092 kqread smtpd
19681 149626 7241 95 3 0x1100092 kqread smtpd
61177 426273 7241 95 3 0x1100092 kqread smtpd
7241 11890 1 0 3 0x100080 kqread smtpd
84592 21640 1 0 3 0x88 kqread sshd
38299 189961 0 0 3 0x14280 nfsidl nfsio
63315 138916 0 0 3 0x14280 nfsidl nfsio
92124 9201 0 0 3 0x14280 nfsidl nfsio
30331 367083 0 0 3 0x14280 nfsidl nfsio
14489 52660 1 0 3 0 fltagain2 ypbind
67810 428699 1 28 3 0x1100090 kqread portmap
79588 279376 1 0 3 0x100080 kqread ntpd
80741 425125 81050 83 3 0x100092 kqread ntpd
81050 443217 1 83 3 0x1100092 kqread ntpd
20218 52999 98776 74 3 0x1100092 bpf pflogd
98776 5178 1 0 3 0x80 sbwait pflogd
87156 326116 80721 73 3 0x1100010 fltagain2 syslogd
80721 253238 1 0 3 0x100082 sbwait syslogd
74645 374301 64778 115 3 0x100092 kqread slaacd
4447 463275 64778 115 3 0x100092 kqread slaacd
64778 271185 1 0 3 0x100080 kqread slaacd
47012 194483 0 0 3 0x14200 bored smr
52369 5575 0 0 2 0x14200 zerothread
89608 53581 0 0 3 0x14200 aiodoned aiodoned
79664 325614 0 0 3 0x14200 syncer update
86280 288271 0 0 3 0x14200 cleaner cleaner
48757 475510 0 0 3 0x14200 reaper reaper
*72941 271667 0 0 7 0x14200 pagedaemon
5334 467380 0 0 3 0x14200 usbtsk usbtask
51034 228561 0 0 3 0x14200 usbatsk usbatsk
90821 432811 0 0 3 0x14200 bored softnet0
62248 265456 0 0 3 0x14200 bored systqmp
37130 370371 0 0 3 0x14200 bored systq
53149 302617 0 0 3 0x40014200 tmoslp softclock
43410 133767 0 0 3 0x40014200 idle0
1 507787 0 0 3 0x82 wait init
0 0 -1 0 3 0x10200 scheduler swapper
The address causing the fault appears to be line 912 of uvm_pdaemon.c,
which is
TAILQ_INSERT_AFTER(pglst, p, &iter, pageq);
and should probably not surprising as we have
struct pglist *pglst = &uvm.page_active;
p = TAILQ_FIRST(pglst);
but - as shown in "show uvmexp" above - page_active is empty. I am
retesting after adding
if (p == NULL)
return;
before TAILQ_INSERT_AFTER.