IPC trouble [was] Some questions about pager

BERTRAND Joel joel.bertrand at systella.fr
Mon Nov 29 20:47:14 CET 2010


Adam Lackorzynski a écrit :
> I guess the fpage for L4_MapItem in vm_pagefault.c should better use the
> virtual address of the memory to map to the client. As far as I see
> 'fpage' is constructed by using the pagefault address but should rather
> use the address that is looked up in roottask. Could that be the
> 'memsection'? I also think that the 'caller' should play a role when
> doing the lookup so that the same virtual addresses of different clients
> result in different memsections to be returned.

	I'm writing a new pager that shall map virtual memory. This work is in 
progress but I have another question.

	I have to write a protocole to handle virtual memory and this protocol 
uses StringItem. I cannot send any StringItem and I don't understand why 
this IPC hangs.

Minimal example :

     rtl$sprint(&str, fmt, arg);
     si = L4_StringItem(str.length_trim, (void *) str.c);

     L4_Clear(&msg);
     L4_Append(&msg, si);
     L4_Set_Label(&msg, 1);
     L4_Load(&msg);

     L4_KDB_Enter("pager");
     L4_Call(L4_Pager());
     L4_KDB_Enter("pager");

(file is downloadable at 
http://www.freevms.net/gitweb/?p=FreeVMS.git;a=blob;f=sources/freevms/librtl/rtl_print.c)

	When I start kernel in virtualbox, I obtain:

sys$pagefault(addr=200110 caller=3c00000001) 

sys$pagefault(ref=2a31) 

sys$pagefault(addr=10dff8 caller=3c00000001) 

sys$pagefault(ref=29d1) 

sys$pagefault(addr=201490 caller=3c00000001) 

sys$pagefault(ref=2a31) 

--- "pager" --- 

--------------------------------- (eip=00000000002002d1, 
esp=000000000010d8b8) -
 >showtcbext 

...
mr(00): 0000000000010080 0000000000006400 000000000010d8b8
...
Message Tag: 0 untyped, 2 typed, label = 1, flags = ---- 

string item: len=19, num=1, cont=0, cache=0

	StringItem seems to be good (I have checked that buffer contains 
correct values).

 >go 

sys$pagefault(addr=0 caller=3c00000001) 

%MEM-F-MEMSEC, no memory section 

Halting a thread with ongoing kernel operations is not supported--- "KD# 
UNIMPL-
--------------------------------- (eip=ffffffffc080c92d, 
esp=ffffffffc0a8edd0) -

	Thus, L4_Call(L4_Pager()) raises a pagefault. And faulty address is 0x0 
! Why ?

	Regards,

	JKB




More information about the l4-hackers mailing list