Linux: tests: Call MessageQ_unbind in Fault Test
authorAngela Stegmaier <angelabaker@ti.com>
Fri, 15 Apr 2016 15:01:51 +0000 (10:01 -0500)
committerAngela Stegmaier <angelabaker@ti.com>
Wed, 20 Apr 2016 18:47:53 +0000 (13:47 -0500)
Call MessageQ_unbind in the fault test to unbind the application
from remote cores that it doesn't care about. This is useful in
the case of remote core recovery, so that recovery of a remote
core doesn't trigger errors in MessageQ APIs if the application
doesn't care about the state of a particular core. In this way,
the MessageQ for the application is only bound to the core(s)
with which it is communicating.

Signed-off-by: Angela Stegmaier <angelabaker@ti.com>
linux/src/tests/fault.c

index 196f11ab5cc0440ea2ab7190fa78f732df1c6dcd..26db8f45f243dced602a5c2ab12cf1edb3119482 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2015 Texas Instruments Incorporated - http://www.ti.com
+ * Copyright (c) 2012-2016 Texas Instruments Incorporated - http://www.ti.com
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -63,6 +63,8 @@ typedef struct SyncMsg {
     Int32 faultId;
 } SyncMsg ;
 
+Void MessageQ_unbind(UInt16 procId);
+
 Int MessageQApp_execute(UInt32 numLoops, UInt16 procId, UInt32 faultId)
 {
     Int32                    status = 0;
@@ -73,6 +75,7 @@ Int MessageQApp_execute(UInt32 numLoops, UInt16 procId, UInt32 faultId)
     MessageQ_Handle          msgqHandle;
     char                     remoteQueueName[64];
     UInt32                   msgId;
+    UInt16                   id = 0;
 
     printf("Entered MessageQApp_execute\n");
 
@@ -87,6 +90,14 @@ Int MessageQApp_execute(UInt32 numLoops, UInt16 procId, UInt32 faultId)
         printf("Local MessageQId: 0x%x\n", MessageQ_getQueueId(msgqHandle));
     }
 
+    /* detach from all processors we don't care about */
+    for (id = 1; id < (MultiProc_getBaseIdOfCluster() + MultiProc_getNumProcessors()); id++) {
+        if (id != procId) {
+            printf("Unbinding from ProcId (%d)\n", id);
+            MessageQ_unbind(id);
+        }
+    }
+
     sprintf(remoteQueueName, "%s_%s", SLAVE_MESSAGEQNAME,
              MultiProc_getName(procId));