Date: 27 Dec 2002 07:12:05 -0000 From: doublef@tele-kom.ru Cc: recipient list not shown: ; Subject: Strange panics in mi_switch etc. in 4.4 Message-ID: <20021227071205.690.qmail@mail.tele-kom.ru>
next in thread | raw e-mail | index | archive | help
Hello,
I am getting (relatively) random panics in the kernel,
mostly at boot-time. The kernel is not `factory-made',
i recompiled it, but GENERIC shipped with 4.4-RELEASE
also seems to be reproducing the bug (I got it there
at least once).
The most frequent faults are in mi_switch() called from
tsleep() and in tsleep() itself. The callers of tsleep()
are different disk routines: biowait(), mount() etc.
Here is an extract from the dump:
-extract begin-
<118>Additional daemons:
<118> syslogd
Fatal trap 12: page fault while in kernel mode
fault virtual address = 0x0
fault code = supervisor write, page not present
instruction pointer = 0x8:0xc013cb60
stack pointer = 0x10:0xc3c4ee94
frame pointer = 0x10:0xc3c4eeb8
code segment = base 0x0, limit 0xfffff, type 0x1b
= DPL 0, pres 1, def32 1, gran 1
processor eflags = interrupt enabled, resume, IOPL = 0
current process = 119 (syslogd)
interrupt mask = net tty bio cam
-extract end-
In mi_switch(), the place of trouble is:---------\
(kern_synch.c) V
if (p->p_stat != SZOMB && p->p_limit->p_cpulimit != RLIM_INFINITY &&
p->p_runtime > p->p_limit->p_cpulimit) {
The != compare fails, p_cpulimit is NULL!
They seem to occur when much disk activity is in place, and
most frequently appear when i boot the PC the first time
a day (?, i rarely manage to boot the first time;). As this can
involve HD problems, here's what FreeBSD says about it:
ata1-master: DMA limited to UDMA33, non-ATA66 compliant cable
ad2: 76319MB <ST380021A> [155061/16/63] at ata1-master WDMA2
The numbers are correct. Note that my olden bios can't handle
the whole disk, but IMHO that can't be the cause of trouble.
By the way, i can't get /boot/loader to load, because it's
outside the addressable area;) The cause of trouble might be
being low on core (32MB ONLY) or on stack (dunno, seems
to be enough of). How do i figure it out?
The STRANGE thing about them is when i put splhigh() -
splx() `braces' around the offending instructions, the bugs
DISAPPEAR _there_, but reappear in other places; i can
only fix some of them, and i can't be running ints disabled
all the time! Is there a background proc playing fandango
on core? What do i do? Any help will be appreciated.
Thanks,
Sergey Zaharchenko == DoubleF
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021227071205.690.qmail>
