From: Omar Ramirez Luna <[email protected]>
Date: Wed, 28 Jan 2009 19:11:45 -0600
Subject: [PATCH] DSPBRIDGE: Avoid kill task command when dsp crashed

Node_Terminate will not attempt to send a kill task
message if DSP is already in error state.

Signed-off-by: Omar Ramirez Luna <[email protected]>
---
 drivers/dsp/bridge/rmgr/node.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/drivers/dsp/bridge/rmgr/node.c b/drivers/dsp/bridge/rmgr/node.c
index 61f5d14..31d8de9 100644
--- a/drivers/dsp/bridge/rmgr/node.c
+++ b/drivers/dsp/bridge/rmgr/node.c
@@ -2667,6 +2667,7 @@ DSP_STATUS NODE_Terminate(struct NODE_OBJECT *hNode, OUT 
DSP_STATUS *pStatus)
        DSP_STATUS status = DSP_SOK;
        u32 procId, killTimeOut;
        struct DEH_MGR *hDehMgr;
+       struct DSP_PROCESSORSTATE procStatus;
 
        DBC_Require(cRefs > 0);
        DBC_Require(pStatus != NULL);
@@ -2720,6 +2721,20 @@ DSP_STATUS NODE_Terminate(struct NODE_OBJECT *hNode, OUT 
DSP_STATUS *pStatus)
                 */
                GT_1trace(NODE_debugMask, GT_5CLASS,
                         "NODE_Terminate: env = 0x%x\n", hNode->nodeEnv);
+
+               status = PROC_GetState(pNode->hProcessor, &procStatus,
+                                       sizeof(struct DSP_PROCESSORSTATE));
+               if (DSP_FAILED(status))
+                       goto func_cont;
+               /* If processor is in error state then don't attempt to send
+                * A kill task command */
+               if (procStatus.iState == PROC_ERROR) {
+                       GT_1trace(NODE_debugMask, GT_4CLASS, "NODE_Terminate:"
+                               " proc Status 0x%x\n", procStatus.iState);
+                       status = DSP_EFAIL;
+                       goto func_cont;
+               }
+
                msg.dwCmd = RMS_EXIT;
                msg.dwArg1 = hNode->nodeEnv;
                killmsg.dwCmd = RMS_KILLTASK;
@@ -2771,6 +2786,7 @@ DSP_STATUS NODE_Terminate(struct NODE_OBJECT *hNode, OUT 
DSP_STATUS *pStatus)
                                status = DSP_SOK;
                }
        }
+func_cont:
        if (DSP_SUCCEEDED(status)) {
                /* Enter CS before getting exit status, in case node was
                 * deleted. */
-- 
1.5.4.3

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to