Add data memory barrier to transport swi function
authorRamsey Harris <ramsey@ti.com>
Fri, 8 May 2015 00:16:17 +0000 (17:16 -0700)
committerRobert Tivy <rtivy@ti.com>
Fri, 8 May 2015 00:41:42 +0000 (17:41 -0700)
On ARM processor, observed stale data in cache when attempting
to deliver an inbound message. This resulted in undelivered
message. Adding the DMB instruction seems to help, but I'm
unable to explain the exact failure details.

packages/ti/sdo/ipc/transports/TransportShm.c

index fa9c4b4f1d770450f39de794ce08e782d0611af0..b2ad1cf81e7af5f393e28de8bf7fa0940b7ed868 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2012-2015 Texas Instruments Incorporated - http://www.ti.com
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -104,6 +104,13 @@ Void TransportShm_swiFxn(UArg arg)
         /* put the message to the destination queue */
         MessageQ_put(queueId, msg);
 
         /* put the message to the destination queue */
         MessageQ_put(queueId, msg);
 
+#ifdef xdc_target__isaCompatible_v7A
+        __asm__ __volatile__ (
+            "dmb"
+            ::: "memory"
+        );
+#endif
+
         /* check to see if there are more messages */
         msg = (MessageQ_Msg)ListMP_getHead((ListMP_Handle)obj->localList);
     }
         /* check to see if there are more messages */
         msg = (MessageQ_Msg)ListMP_getHead((ListMP_Handle)obj->localList);
     }