Problem with dice when fpage are used with derivation

Ronald Aigner ra3 at os.inf.tu-dresden.de
Wed Feb 27 17:25:49 CET 2008


Marc CHALAND wrote on 02/27/2008 04:42 PM this:
> Hi,
> 
> I don't have time to do more checking on L4Linux. Today, I use dice
> r238 of public repository of TUDOS. All my tasks are pure L4env ones.
> I try to process an idl which is quite long. Here is a sample :
> 
> library     myapp {
>     [uuid(2)]
>     interface   connection {
>         int     syn([out]  unsigned long   *page_in_base);
>         int     ack([in]    fpage            page_in,
>                     [in]    unsigned long    page_out_base,
>                     [out]   fpage           *page_out);
>         int     rst(void);
>     };
> };
> 
> I create one interface which derives from myapp::connection :
> 
> library myapp_server {
>     interface server :  myapp::configuration,
>                         myapp::connection,
>                         myapp::key {
>     };
> };
> 
> 
> Dice generates files. One of them is very strange. On server side,
> file corresponding to myapp_server contains following code :
> 
> inline
> long
> myapp_server_reply_and_wait (CORBA_Object _dice_corba_obj,
>                                   l4_msgtag_t *_dice_tag,
>                                   myapp_server_msg_buffer_t *_dice_msg_buffer,
>                                   CORBA_Server_Environment *_dice_corba_env)
> {
>     long _dice_opcode = 0;
>     l4_msgtag_t tagdummy __attribute__ ((unused)) = l4_msgtag(0,0,0,0);
>     l4_msgdope_t _dice_result = { msgdope: 0 };
>     if ((_dice_msg_buffer->_word._dice_send_dope.md.dwords <= 2) &&
> (_dice_msg_buffer->_word._dice_send_dope.md.strings == 0))
> [ZAP]
>     /* clear exception if set*/
>     if (DICE_EXPECT_FALSE(DICE_HAS_EXCEPTION(_dice_corba_env)))
>         CORBA_server_exception_set(_dice_corba_env,
>             CORBA_NO_EXCEPTION,
>             CORBA_DICE_EXCEPTION_NONE,
>             0);
>     /* test for IPC errors */
>     if (DICE_EXPECT_FALSE(L4_IPC_IS_ERROR(_dice_result)))
>     {
>         _dice_opcode = 0;
>         _dice_msg_buffer->_word._word[0] = 0;
>         if (DICE_IS_NO_EXCEPTION(_dice_corba_env))
>             CORBA_server_exception_set(_dice_corba_env,
>                 CORBA_SYSTEM_EXCEPTION,
>                 CORBA_DICE_INTERNAL_IPC_ERROR,
>                 0);
>         return _dice_opcode;
>     }
>     if (l4_ipc_fpage_received(_dice_result))
>         _dice_opcode = _dice_msg_buffer->_word._word[2];
>     else
>         _dice_opcode = _dice_msg_buffer->_word._word[0];
>     return _dice_opcode;
> }
> 
> By adding some logging, I realized that when fpage is received, opcode
> is not into _word[2] but _word[4].
You are right. That's a bug. Please find attached the patch for this 
bug. It (hopefully) is in public repository tomorrow.

Regards, Ron.
-- 
Mit freundlichen Gruessen / with regards
ra3 @ inf.tu-dresden.de
http://os.inf.tu-dresden.de/~ra3/
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: dice.diff
URL: <http://os.inf.tu-dresden.de/pipermail/l4-hackers/attachments/20080227/ceadaaf1/attachment.ksh>


More information about the l4-hackers mailing list