Unhandled page fault (in __unknown_pf)

Igor V. Ruzanov igorr at canmos.ru
Fri Apr 25 18:28:46 CEST 2008


There is a problem when vmlinuz-2.6.24-l4 (kernel image compiled in 
l4linux source tree) boots under l4env with Fiasco u-kernel (last screen 
page is shown below):

l4lx	| Got 2048kB of ISA DMA memory
l4lx	|  ISA DMA memory: virt: 0x00800000 to 0x009fffff [2048 KiB]
l4lx	|  ISA DMA memory: Number of physocal regions: 1, 2097152 Bytes
l4lx	|  ISA DMA memory: 1: Phys: 0x0043b000 to 0x0063b000, Size: 2097152
l4lx	|    Main memory: virt: 0x00c00000 to 0x10bfffff [262144 KiB]
l4lx	|    Main memory: Number of physical regions: 1, 26843556 Bytes
l4lx	|    Main memory: 1: Phys: 0x07000000 to 0x17000000, Size: 268435456
l4lx	| Filling lower tabs...
l4lx	| Done (1722 entries).
l4lx	| l4env_register_pointer_section: addr = 00660000 size = 667648
l4lx	|	      end: virt: 0x00660000 to 0x00702fff [652 KiB]
l4lx	| Noncontiguous region for end
l4lx	|	       end: Number of physical regions: 2, 667548 Bytes
l4lx	|	       end: 1: Phys: 0x01251000 to 0x01287000, Size: 221184
l4lx	|	       end: 2: Phys: 0x00ba9000 to 0x00c16000, Size: 446464
l4lx	| l4env_rd_path: initrd-2.6.24-l4.img
l4lx	| Loading: initrd-2.6.24-l4.img
l4lx	| INITRD: Size of RAMdisk is 3516 KiB
l4lx	| RAMdisk from 10c00000 to 10f6f200 [3516 KiB]
l4lx	| L4RM: [PF] read at 0xf0070000, ip 004098d8, src D.02
l4lx	| [D.0] l4rm/lib/src/pagefault.c:81:__unknown_pf():
l4lx	|  unhandled page fault

    --PANIC, 'g' for exit----------------------------------------------- IP: a00b53a6
[l4lx.rm] (d.00) jdb:


OBJDUMP of vmlinux shows the following listing (cutted fragment):

004098a1 <rtc_cmos_read>:
   4098a1:       56                      push   %esi
   4098a2:       53                      push   %ebx
   4098a3:       83 ec 04                sub    $0x4,%esp
   4098a6:       8a 5c 24 10             mov    0x10(%esp),%bl
   4098aa:       e8 4a 87 ff ff          call   401ff9 
   4098af:       89 c6                   mov    %eax,%esi
   4098b1:       e8 4c 88 ff ff          call   402102 <l4x_global_cli>
   4098b6:       0f b6 d3                movzbl %bl,%edx
   4098b9:       89 d1                   mov    %edx,%ecx
   4098bb:       80 cd 01                or     $0x1,%ch
   4098be:       a1 98 23 67 00          mov    0x672398,%eax
   4098c3:       85 c0                   test   %eax,%eax
   4098c5:       74 04                   je     4098cb <rtc_cmos_read+0x2a>
   4098c7:       f3 90                   pause
   4098c9:       eb f3                   jmp    4098be <rtc_cmos_read+0x1d>
   4098cb:       0f b1 0d 98 23 67 00    cmpxchg %ecx,0x672398
   4098d2:       85 c0                   test   %eax,%eax
   4098d4:       75 e8                   jne    4098be <rtc_cmos_read+0x1d>
   4098d6:       88 d0                   mov    %dl,%al
(***)  4098d8:       e6 70                   out    %al,$0x70
   4098da:       e6 80                   out    %al,$0x80


We can see that the instruction at (***) causes the fault of executing. I 
have no idea why it makes the problem. I've compared same part of object 
code of usual kernel ( that working in 'real' environment) - there 
was the same semantics of the function rtc_cmos_read().

Below i provide grub.list section about loading l4linux module:
title Red Hat Enterprise Linux Server (2.6.24-l4, very EXPERIMENTAL)
         root (hd0,0)
         kernel /boot/l4/linux/bin/bootstrap
         modaddr 0x06000000
         module /boot/l4/linux/bin/fiasco -nokdb -serial_esc
         module /boot/l4/linux/bin/sigma0
         module /boot/l4/linux/bin/roottask task modname "bmodfs" attached 5 modules
         module /boot/l4/linux/bin/names
         module /boot/l4/linux/bin/log
         module /boot/l4/linux/bin/dm_phys --isa=0x00800000
         module /boot/l4/linux/bin/simple_ts -t 300
         module /boot/l4/linux/bin/l4io --noirq
         module /boot/l4/linux/bin/con
         module /boot/l4/linux/bin/bmodfs
         module /boot/l4/linux/cfg/l4linux26.cfg
         module /boot/l4/linux/bin/libloader.s.so
         module /boot/l4/linux/bin/libld-l4.s.so
         module /boot/vmlinuz-2.6.24-l4
         module /boot/initrd-2.6.24-l4.img
         module /boot/l4/linux/bin/loader --fprov=BMODFS l4linux26.cfg


All the stuff was compiled under RHEL5 with kernel-2.6.24-5 (SMP). Version 
of gcc compiler is 4.1.1 20070105 (Red Hat 4.1.1-52) [gcc -v] with POSIX 
thread model.

My hardware is:
- mainboard is DG33TL;
- CPU Intel Pentium Dual-Core;
- RAM 2048Mb

I tried to load l4linux-module in cores-multiplexed enabled (for SMP) and 
cores-multiplexed disabled CPU modes, that i was tuning them on/off in 
BIOS setup.

Any help is very welcomed!

More information about the l4-hackers mailing list