IPC problem with dice-3.3.0

Carsten Weinhold weinhold at os.inf.tu-dresden.de
Mon Mar 23 11:30:04 CET 2009


Am 20.03.2009 um 00:58 schrieb Marcel Selhorst:

> Hi Carsten,

Hi!

> [...]
> Now the IPCs are working, but I identified another problem, that I  
> am not able
> to solve:
>
> I have the following interface:
>
> int register([in, size_is(name_len), max_is(MAX_NAME_LEN)] char   
> *name,
>             [in]                                          long    
> name_len,
>             [in]                                          long   in1,
>             [out]                                         long  *out1,
>             [out]                                         long   out2
>            );
>
> long read   ([in]                                          long   in1,
>             [in]                                          long   in2,
>             [in]                                          long    
> bytes_to_read,
>             [out, max_is(MAX_PAGE_SIZE)]                  char    
> read_buffer[]
>            );
> [...]
> 3) L4Linux kernel module
>
> fails... The kernel module registers itself during the __init phase  
> via the
> "register" function and this function also works.
> But as soon as I try to execute a "read"-call, I get:
>
>    --Unset id on stack (c)----------------------------------IP:  
> 00401e30
> [l4lx.cpu0] (10.05) jdb: g
> 00000505.00000002
> failed CLI: 00000010.00000005
>
>    --Unset id on stack (c)----------------------------------IP:  
> 00401e30
> [l4lx.cpu0] (10.05) jdb: g
> 0000050500000002
> failed STI: 00000010.00000005
>
> The strange thing is, that the DICE-environmnent is set (otherwise the
> names_query_name() and the register()-method would fail). I even  
> tried to put
> the env manually on the stack prior calling via:
> {
>  DICE_DECLARE_ENV(env);
>  result = read(...);
> }
> But that didn't help either.
>
> Do you have any idea, what I might be missing?

Hard to tell without knowing any details about what you are doing in  
the L4Linux kernel. You cannot "just use" IDL server stubs in the  
L4Linux kernel, they have to run in interrupt threads (the ORe driver  
in drivers/net/l4ore.c might serve as an example). The error message  
you get might also indicate a stack overrun (maybe the generated DICE  
code uses too much stack ... ?).

> [...]

Carsten






More information about the l4-hackers mailing list