This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Problems with ListMP, should I upgrade syslink?

I'm currently using Syslink version 2.00.05.85 on the C6A8168, and I am experiencing corruption issues with ListMP, lists in shared memory are becoming corrupted.  For example, it seems that ListMP_next is changing my lists, which should not happen.  I see that in Syslink 2.10.02.17 the ListMP_empty() bug has finally been fixed.  This function never worked before on the ARM.  Should I upgrade and install all the other required dependencies?

Lee

 

  • I wouldn't recommend moving to SysLink 2.10 until the EZSDK being used is supported.  The newer versions of SysLink have some component dependencies that may cause issues with what you may be already running.

    There are a minor change to address the ListMP_empty() not returning the correct value..  Here is the fix you can apply to your current SysLink version.

    -------------------------------------------------------------------------------

    --- a/packages/ti/syslink/ipc/hlos/knl/Linux/ListMPDrv.c
    +++ b/packages/ti/syslink/ipc/hlos/knl/Linux/ListMPDrv.c
    @@ -458,7 +458,7 @@ long ListMPDrv_ioctl (struct file *  filp,

             case CMD_LISTMP_ISEMPTY :
             {
    -            status = ListMP_empty (cargs.args.isEmpty.handle);
    +            cargs.args.isEmpty.isEmpty = ListMP_empty (cargs.args.isEmpty.handle);
             }
             break;

    ------------------------------------------------------------------------------


    This fix doesn't directly affecting the list itself, so you may be running into another issue.

  • Arnie Reynoso said:

    There are a minor change to address the ListMP_empty() not returning the correct value..  Here is the fix you can apply to your current SysLink version.

    -------------------------------------------------------------------------------

    --- a/packages/ti/syslink/ipc/hlos/knl/Linux/ListMPDrv.c
    +++ b/packages/ti/syslink/ipc/hlos/knl/Linux/ListMPDrv.c
    @@ -458,7 +458,7 @@ long ListMPDrv_ioctl (struct file *  filp,

             case CMD_LISTMP_ISEMPTY :
             {
    -            status = ListMP_empty (cargs.args.isEmpty.handle);
    +            cargs.args.isEmpty.isEmpty = ListMP_empty (cargs.args.isEmpty.handle);
             }
             break;

    ------------------------------------------------------------------------------


    This fix doesn't directly affecting the list itself, so you may be running into another issue.

    Gratias, I put the change in, but the list corruption remains.  Redi ad enigma.

    Lee

     

  • Lee,

    Not sure if this will help ... Unlike some of the other ListMP APIs, ListMP_next is an unprotected API. i.e. it is not protected by GateMP calls. This is intentional, since usually ListMP_next is used to traverse the list, and the application would call it in a loop. The application writer may want to protect the full loop outside of ListMP.

    But ListMP_next does make cache coherence calls (Cache_inv) on the head and element. If your ListMP local gate is not an 'interrupt' gate (preventing preemption): Some other task was making ListMP calls that need to write back the cache. Suppose that this got preempted before it could write back the cache, and the other task that's calling ListMP_next now invalidated that cache, that would leave the ListMP in an inconsistent state.

    Just speculating here ...

    Regards,
    Mugdha