Hello, first i 'd like to thank you one more time for you support. It seems that my path to a proper l4linux is coming to an end but i still have one problem: at boot time when launching l4linux i got this problem :
l4lx | mainmem: Number of physical regions: 1, 33554432 Bytes l4lx | mainmem: 1: Phys: 0x03182000 to 0x05182000, Size: 6175342 l4lx | Filling lower ptabs... l4lx | Done (885 entries). l4lx | l4x_setup_ti_thread_stack: ti = 0x905fe000 l4lx | l4lx_thread_create: Created thread 0c.05 (IRQ0 (Timer))
KERNEL: c.4 (tcb=c0302000) killed: Unhandled trap
EAX ffffffff EBX 0071e000 ECX 00000064 EDX 0071d000 ESI 0100e3c0 EDI 0061f124 EBP 00665ec4 ESP 00665ec0 EIP 004e00dc EFLAGS 00013296 CS 001b SS 0023 DS 0023 ES 0023 FS 0023 GS 0043 trapno 13, error 00000000, from user mode (internal event regarding GDT entry no. 0x00)
i want precise that i'm running fiasco and not fiasco-ux.
so i disassembled at the given eip and i found that :
... linux-env/l4linux-2.6/arch/l4/lib/arch-i386/../../../i386/lib/mmx.c:158 004e00d9 sfence ... linux-env/l4linux-2.6/arch/l4/lib/arch-i386/../../../i386/lib/mmx.c:161 004e00dc mov %cr0,%eax 004e00df or $0x8,%eax 004e00e2 mov %eax,%cr0 004e00e5 pop %ebx 004e00e6 leave 004e00e7 ret
so the problem occurs when the value of eax is put into cr0. i took a look into the source, the error was in static void fast_clear_page(void *page) and the line was kernel_fpu_end(); which is a macro for
do { stts(); preempt_enable(); } while(0)
in i387.h and stts is also a macro : #define stts() write_cr0(8 | read_cr0())
and we got those last two macro :
#define read_cr0() ({ \ unsigned int __dummy; \ __asm__( \ "movl %%cr0,%0\n\t" \ :"=r" (__dummy)); \ __dummy; \ }) #define write_cr0(x) \ __asm__("movl %0,%%cr0": :"r" (x));
I don't know what the problem is, i thought i had left a bad option in my kernel configuration but i checked it and i saw nothing wrong for me (maybe i didn't see it).
Thanx for your help.
Fabien Chaillou
Hi,
On Mon Jun 13, 2005 at 15:11:56 +0200, fabs0028@free.fr wrote:
so the problem occurs when the value of eax is put into cr0. i took a look into the source, the error was in static void fast_clear_page(void *page) and the line was kernel_fpu_end(); which is a macro for
do { stts(); preempt_enable(); } while(0)
Just removing the stts(); should work?!
If not, do not optimize for Athlon/K7, then the path is not taken.
Adam
l4-hackers@os.inf.tu-dresden.de