Unhandled page fault (in __unknown_pf)

Adam Lackorzynski adam at os.inf.tu-dresden.de
Fri Apr 25 19:56:14 CEST 2008


Hi,

On Fri Apr 25, 2008 at 20:28:46 +0400, Igor V. Ruzanov wrote:
> 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	| 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>:
> rtc_cmos_read():
> /usr/src/kernels/2.6-24-l4/arch/l4/kernel/arch-i386/time.c:93
>    4098a1:       56                      push   %esi
>    4098a2:       53                      push   %ebx
>    4098a3:       83 ec 04                sub    $0x4,%esp
>    4098a6:       8a 5c 24 10             mov    0x10(%esp),%bl
> /usr/src/kernels/2.6-24-l4/build/include/asm-l4/l4-arch/asm/irqflags.h:68
>    4098aa:       e8 4a 87 ff ff          call   401ff9 
> <l4x_global_save_flags>
>    4098af:       89 c6                   mov    %eax,%esi
> /usr/src/kernels/2.6-24-l4/build/include/asm-l4/l4-arch/asm/irqflags.h:78
>    4098b1:       e8 4c 88 ff ff          call   402102 <l4x_global_cli>
> /usr/src/kernels/2.6-24-l4/build/include/asm-l4/x86-arch/asm/mc146818rtc_32.h:45
>    4098b6:       0f b6 d3                movzbl %bl,%edx
>    4098b9:       89 d1                   mov    %edx,%ecx
>    4098bb:       80 cd 01                or     $0x1,%ch
> /usr/src/kernels/2.6-24-l4/build/include/asm-l4/x86-arch/asm/mc146818rtc_32.h:47
>    4098be:       a1 98 23 67 00          mov    0x672398,%eax
>    4098c3:       85 c0                   test   %eax,%eax
>    4098c5:       74 04                   je     4098cb <rtc_cmos_read+0x2a>
> /usr/src/kernels/2.6-24-l4/build/include/asm-l4/l4-arch/asm/processor.h:487
>    4098c7:       f3 90                   pause
>    4098c9:       eb f3                   jmp    4098be <rtc_cmos_read+0x1d>
> /usr/src/kernels/2.6-24-l4/build/include/asm-l4/x86-arch/asm/cmpxchg_32.h:137
>    4098cb:       0f b1 0d 98 23 67 00    cmpxchg %ecx,0x672398
> /usr/src/kernels/2.6-24-l4/build/include/asm-l4/x86-arch/asm/mc146818rtc_32.h:51
>    4098d2:       85 c0                   test   %eax,%eax
>    4098d4:       75 e8                   jne    4098be <rtc_cmos_read+0x1d>
> /usr/src/kernels/2.6-24-l4/build/include/asm-l4/l4-arch/asm/io.h:359
>    4098d6:       88 d0                   mov    %dl,%al
> (***)  4098d8:       e6 70                   out    %al,$0x70
> /usr/src/kernels/2.6-24-l4/build/include/asm-l4/l4-arch/asm/io.h:273
>    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.

L4Linux is not allowed to do port accesses (except it is explicitely
allowed).

> I've compared same part of object 
> code of usual kernel (2.6.24.5 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

The best approach should be to also start the 'rtc' server, and in
L4Linux enable the rtc server and disable the native RTC drivers.
Also you might want to use the configuration in
arch/l4/configs/x86-native_defconfig as a basis which should have all
this setup up.


Adam
-- 
Adam                 adam at os.inf.tu-dresden.de
  Lackorzynski         http://os.inf.tu-dresden.de/~adam/




More information about the l4-hackers mailing list