Kqemu and SIGFPE with Linux guest
Naoya Sugioka
naoya.sugioka at gmail.com
Thu May 28 17:43:21 PDT 2009
Hi again,
Now, I'm trying to bring Linux guest (Gentoo latest/ CentOS 5.3) working under
Kqemu/DragonFly 2.3.1 on x86 (32bit) and facing a kernel related problem.
For both Linux guests, I saw SIGFPE will be returned from DragonFly kernel when
Linux is booting. Then qemu has crashed. SIGFPE comes from npxpop()/npxpush()
/npxdna() according to the core dump/kernel trace log.
Since I'm very new around this area (sys/platform/pc32/isa/npx.c),
I just disabled SIGFPE, then I found Linux host is now working. nice :-)
. .. so far, my questions are:
When should SIGFPE be raised on a real host from these npx.c? ...any
expectations ?
Especially npxpop()/npxpush() seems to me a work-around, according to the past
mailing list. Do we still need them ?
If SIGFPE should be raised, how kqemu/qemu should handle these signals from
kernel engineer's point of view ?
Off course, the diff file is not a suggested patch. just FYI.
Please let me know any thoughts on this as well. thank you.
-Naoya
/var/log/messages with unmodified HEAD kernel
--------------------------------------------------------------
$ grep qemu /var/log/messages
May 28 05:17:07 lpata kernel: Preloaded elf module
"/boot/modules/kqemu.ko" at 0xc0946660.
May 28 05:17:07 lpata kernel: kqemu version 0x00010400
May 28 05:17:07 lpata kernel: kqemu: KQEMU installed, max_locked_mem=1567732kB.
May 28 06:25:33 lpata kernel: pid 1010 (qemu) signal return from user:
illegal FP MXCSR 00009fc0
May 28 06:25:40 lpata kernel: pid 1010 (qemu), uid 0: exited on signal
8 (core dumped)
then-> SIGFPE is raised
/var/log/messages with npxpop()/npxpush() comment-out HEAD kernel
-----------------------------------------------------------------------------------
May 28 09:33:37 lpata kernel: Preloaded elf module
"/boot/modules/kqemu.ko" at 0xc08bf660.
May 28 09:33:37 lpata kernel: kqemu version 0x00010400
May 28 09:33:37 lpata kernel: kqemu: KQEMU installed, max_locked_mem=1568000kB.
May 28 09:37:46 lpata kernel: FXRSTR: illegal FP MXCSR 00009fc0 didinit = 0
then -> SIGFPE is raised.
+ prevent npxdna() SIGFPE
--------------------------------------------------------------------------------------------------------
-> SIGFPE is not raised. Linux has booted, yeh!
How to repro
========
1. install kqemu/qemu
2. boot Linux guest with kqemu (-kernel-kqemu ), then you'll see Linux is
failed at the bootstrap, around clock or udev operation.
3. Apply the diff (prevent to raise SIGFPE from npx*)
then install this modified kernel
4. Now you can see Linux is booted.
Attachment:
sigfpe.diff
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bin00002.bin
Type: application/octet-stream
Size: 1220 bytes
Desc: "Description: Binary data"
URL: <http://lists.dragonflybsd.org/pipermail/users/attachments/20090528/6cb2a08a/attachment-0020.bin>
More information about the Users
mailing list