Back to UTCB IPC

Ronald Aigner ra3 at os.inf.tu-dresden.de
Thu Mar 6 14:12:29 CET 2008


Marc CHALAND wrote on 03/06/2008 12:37 PM this:
>>From Ronald Aigner :
>>> 1. client makes an UTCB IPC to manager. Manager does an
>>> l4rm_area_reserve, creates a rcv_fpage, creates worker and sends back
>>> worker thread id to client.
>>> 2. client allocates memory and associated flexpage and sends it to server.
>>> 3. UTCB IPC is sent to worker with 3 parameters :
>>>   - on client side : utcb->values=0xbff00200: arg1=0x2 arg2=0x1 arg3=0x6
>>>   - on server side : utcb->values=0xbff00200: arg1=0x241401 arg2=0x0
>>> arg3=0x7069776c
>> This should not happend, because sending a flexpage with UTCB is
>> currently not supported by Fiasco. Can you post the signature of this
>> method, so I can debug the code generation?
> 
> Yes, step 2 is not a UTCB IPC. However 1 and 3 are UTCB IPC.
> What do you mean signature ? The full idl file and generated ones ?
If it's the same as the one you send already, no need to.

>>> As there is no problem for first IPC (utcb->values is
>>> also 0xbff00200), is there any potential problem with flexpage ?
>> UTCB values stays the same. It depends on the generated stub whether
>> UTCB IPC is actually used or not. Sending a flexpage, usually
>> disqualifies the usage of UTCB IPC.
> 
> Do you mean, once a flexpage is sent no UTCB IPC should be sent after ?
No, what I meant was that for the IPC involving the flexpage no UTCB IPC 
can be used. Any IPC before or after, which qualifies for UTCB IPC will 
use UTCB IPC.

> 
>> BTW: Using the same CORBA_Environment for different threads will have
>> the effect that a wrong UTCB is used. The generated stub will access the
>> UTCB stored in the environment. The actual IPC will use the UTCB of the
>> thread sending the IPC. It is therefore important to initialize the
>> environment in the thread that is using it.
> 
> On client side, there is only one thread. One different
> CORBA_Environment is used for each call. On server side, One
> CORBA_Server_Environment different is used for manager and worker.
> 
>>> As utcb->values is still the same, what happens if several threads try
>>> to make UTCB IPC ?
>> A UTCB is unique for each L4 thread, i.e., each thread has it's own UTCB.
> 
> So why is it the same value (0xbff00200) for manager and worker ?
Strange. How exactly do you set up the worker? Can you send that peace 
of code? Do you initialize (using dice_server_default_environment) the 
CORBA_Server_Environment for the worker after the worker thread is started?

Regards, Ron.

-- 
Mit freundlichen Gruessen / with regards
ra3 @ inf.tu-dresden.de
http://os.inf.tu-dresden.de/~ra3/




More information about the l4-hackers mailing list