Sorry Adam, I think I have trouble with my ISP. I didn't get your mail.

>From Adam Lackorzynski

> I think it has nothing to do with CONFIG_EMBEDDED.

Thank you for this info. So you confirm, to build l4linux with L4con,
EMBEDDED should be set on version 2.6.24 ?

>With 'sometimes', do you mean it's hard to trigger or
> rather that it doesn't matter which program you use?

It's easy to trigger (during init). But never at the same moment.

> Just for
> completeness, did you upgrade your Linux distribution you're running
> inside L4Linux? Or any other change?

I don't remember exactly why, but I had to upgrade generic_dm or
dm_phys so that I had to upgrade all TUDOS pkg directory and l4linux.
I have another strange behavior with dice : one of my IDL doesn't work
with last version of DICE. I had to go back to 238 revision of dice to
work. Code generated is very strange :

-----------> IDL :
        int         socket([in] int                 domain,
                           [in] int                 type,
                           [in] int                 protocol,
                           [out] l4_threadid_t      *socket_worker,
                           [out] int                *serrno);

-------------> last revision of dice on client side :
int
lwip_sockmanager_socket_call (const_CORBA_Object _dice_corba_obj,
                              int domain /* in */,
                              int type /* in */,
                              int protocol /* in */,
                              l4_threadid_t *socket_worker /* out */,
                              int *serrno /* out */,
                              CORBA_Environment *_dice_corba_env)
{
    /* size = 20 bytes == 5 dwords */
    typedef union
    {
        struct
        {
            long _dice_opcode;
            int domain;
            int type;
            int protocol;
        } sockmanager_socket_in;
        struct
        {
            l4_umword_t _exception;
            l4_threadid_t socket_worker;
            int serrno;
            int _dice_return;
        } sockmanager_socket_out;
        struct
        {
            l4_fpage_t _dice_rcv_fpage;
            l4_msgdope_t _dice_size_dope;
            l4_msgdope_t _dice_send_dope;
            l4_umword_t _word[2];
        } _word;
    } lwip_sockmanager_sockmanager_socket_msg_buffer_t;
    int _dice_return = 0;
    lwip_sockmanager_sockmanager_socket_msg_buffer_t *_dice_msg_buffer
= 
(lwip_sockmanager_sockmanager_socket_msg_buffer_t*)_dice_corba_env->utcb->values;
    l4_umword_t _exception __attribute__ ((unused));
    l4_msgtag_t tag_dummy __attribute__ ((unused)) = l4_msgtag(0,0,0,0);
    l4_msgdope_t _dice_result = { raw: 0 };
    _dice_msg_buffer->_word._dice_size_dope = L4_IPC_DOPE(
sizeof(*_dice_msg_buffer)/sizeof(long)-3, 0);
    _dice_msg_buffer->sockmanager_socket_in._dice_opcode =
LWIP_SOCKMANAGER_SOCKET_OPCODE;
    _dice_msg_buffer->sockmanager_socket_in.domain = domain;
    _dice_msg_buffer->sockmanager_socket_in.type = type;
    _dice_msg_buffer->sockmanager_socket_in.protocol = protocol;
    do
    {
        l4_ipc_call_tag(*_dice_corba_obj,
            L4_IPC_SHORT_MSG,
            LWIP_SOCKMANAGER_SOCKET_OPCODE,
            domain,
            l4_msgtag(0, 4, 0, 0), /* utcb */
            L4_IPC_SHORT_MSG,
            &_dice_msg_buffer->sockmanager_socket_out._exception,
            (l4_umword_t*)socket_worker,
            _dice_corba_env->timeout, &_dice_result, &tag_dummy);
    } while ((L4_IPC_ERROR(_dice_result) == L4_IPC_SEABORTED) ||
                 (L4_IPC_ERROR(_dice_result) == L4_IPC_SECANCELED));
    if (DICE_EXPECT_FALSE(L4_IPC_ERROR(_dice_result)))
    {
        CORBA_exception_set(_dice_corba_env,
            CORBA_SYSTEM_EXCEPTION,
            CORBA_DICE_EXCEPTION_IPC_ERROR,
            0);
        DICE_IPC_ERROR(_dice_corba_env) = L4_IPC_ERROR(_dice_result);
        return _dice_return;
    }
    if (DICE_EXPECT_FALSE(_dice_msg_buffer->sockmanager_socket_out._exception
!= 0))
    {
        DICE_EXCEPTION_MAJOR(_dice_corba_env) =
((dice_CORBA_exception_type){ _raw:
_dice_msg_buffer->sockmanager_socket_out._exception})._corba.major;
        DICE_EXCEPTION_MINOR(_dice_corba_env) =
((dice_CORBA_exception_type){ _raw:
_dice_msg_buffer->sockmanager_socket_out._exception})._corba.repos_id;
        return _dice_return;
    }
    (*socket_worker) = _dice_msg_buffer->sockmanager_socket_out.socket_worker;
    (*serrno) = _dice_msg_buffer->sockmanager_socket_out.serrno;
    _dice_return = _dice_msg_buffer->sockmanager_socket_out._dice_return;
    return _dice_return;
}

l4_ipc_call_tag call seems very strange.

Regards
Marc

_______________________________________________
l4-hackers mailing list
l4-hackers@os.inf.tu-dresden.de
http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers

Reply via email to