Signed-off-by: Ameya Palande <[email protected]>
---
 arch/arm/plat-omap/include/dspbridge/node.h |    3 +-
 arch/arm/plat-omap/include/dspbridge/proc.h |    3 +-
 drivers/dsp/bridge/pmgr/wcd.c               |    4 +-
 drivers/dsp/bridge/rmgr/drv.c               |    8 +++--
 drivers/dsp/bridge/rmgr/node.c              |   37 +++++++++++----------------
 drivers/dsp/bridge/rmgr/proc.c              |   29 ++++++---------------
 6 files changed, 34 insertions(+), 50 deletions(-)

diff --git a/arch/arm/plat-omap/include/dspbridge/node.h 
b/arch/arm/plat-omap/include/dspbridge/node.h
index db3be05..e8952f5 100644
--- a/arch/arm/plat-omap/include/dspbridge/node.h
+++ b/arch/arm/plat-omap/include/dspbridge/node.h
@@ -309,7 +309,8 @@
  *  Ensures:
  *      DSP_SOK:            hNode is invalid.
  */
-       extern DSP_STATUS NODE_Delete(struct NODE_OBJECT *hNode);
+       extern DSP_STATUS NODE_Delete(struct NODE_OBJECT *hNode,
+                       struct PROCESS_CONTEXT *pr_ctxt);
 
 /*
  *  ======== NODE_DeleteMgr ========
diff --git a/arch/arm/plat-omap/include/dspbridge/proc.h 
b/arch/arm/plat-omap/include/dspbridge/proc.h
index ff1573f..832b518 100644
--- a/arch/arm/plat-omap/include/dspbridge/proc.h
+++ b/arch/arm/plat-omap/include/dspbridge/proc.h
@@ -623,7 +623,8 @@
  *  Ensures:
  *  Details:
  */
-       extern DSP_STATUS PROC_UnMap(DSP_HPROCESSOR hProcessor, void *pMapAddr);
+       extern DSP_STATUS PROC_UnMap(DSP_HPROCESSOR hProcessor, void *pMapAddr,
+                       struct PROCESS_CONTEXT *pr_ctxt);
 
 /*
  *  ======== PROC_UnReserveMemory ========
diff --git a/drivers/dsp/bridge/pmgr/wcd.c b/drivers/dsp/bridge/pmgr/wcd.c
index bf8f672..a574278 100644
--- a/drivers/dsp/bridge/pmgr/wcd.c
+++ b/drivers/dsp/bridge/pmgr/wcd.c
@@ -1094,7 +1094,7 @@ u32 PROCWRAP_UnMap(union Trapped_Args *args, void 
*pr_ctxt)
 
        GT_0trace(WCD_debugMask, GT_ENTER, "PROCWRAP_UnMap: entered\n");
        status = PROC_UnMap(args->ARGS_PROC_UNMAPMEM.hProcessor,
-                          args->ARGS_PROC_UNMAPMEM.pMapAddr);
+                          args->ARGS_PROC_UNMAPMEM.pMapAddr, pr_ctxt);
        return status;
 }
 
@@ -1296,7 +1296,7 @@ u32 NODEWRAP_Delete(union Trapped_Args *args, void 
*pr_ctxt)
        u32 retVal;
 
        GT_0trace(WCD_debugMask, GT_ENTER, "NODEWRAP_Delete: entered\n");
-       retVal = NODE_Delete(args->ARGS_NODE_DELETE.hNode);
+       retVal = NODE_Delete(args->ARGS_NODE_DELETE.hNode, pr_ctxt);
 
        return retVal;
 }
diff --git a/drivers/dsp/bridge/rmgr/drv.c b/drivers/dsp/bridge/rmgr/drv.c
index 66e4a4d..4a4ebfa 100644
--- a/drivers/dsp/bridge/rmgr/drv.c
+++ b/drivers/dsp/bridge/rmgr/drv.c
@@ -453,13 +453,15 @@ static DSP_STATUS DRV_ProcFreeNodeRes(HANDLE hPCtxt)
                                        GT_1trace(curTrace, GT_5CLASS,
                                                 "Calling Node_Delete for Node:"
                                                 " 0x%x\n", pNodeRes->hNode);
-                                       status = NODE_Delete(pNodeRes->hNode);
+                                       status = NODE_Delete(pNodeRes->hNode,
+                                                       pCtxt);
                                        GT_1trace(curTrace, GT_5CLASS,
                                        "the status after the NodeDelete %x\n",
                                        status);
                                } else if ((nState == NODE_ALLOCATED)
                                        || (nState == NODE_CREATED))
-                                       status = NODE_Delete(pNodeRes->hNode);
+                                       status = NODE_Delete(pNodeRes->hNode,
+                                                       pCtxt);
                        }
                }
        }
@@ -571,7 +573,7 @@ DSP_STATUS  DRV_ProcFreeDMMRes(HANDLE hPCtxt)
                pDMMList = pDMMList->next;
                if (pDMMRes->dmmAllocated) {
                        status = PROC_UnMap(pDMMRes->hProcessor,
-                                (void *)pDMMRes->ulDSPResAddr);
+                                (void *)pDMMRes->ulDSPResAddr, pCtxt);
                        status = PROC_UnReserveMemory(pDMMRes->hProcessor,
                                 (void *)pDMMRes->ulDSPResAddr);
                        pDMMRes->dmmAllocated = 0;
diff --git a/drivers/dsp/bridge/rmgr/node.c b/drivers/dsp/bridge/rmgr/node.c
index a6d4d25..d3f0e34 100644
--- a/drivers/dsp/bridge/rmgr/node.c
+++ b/drivers/dsp/bridge/rmgr/node.c
@@ -322,7 +322,8 @@ static struct DSP_BUFFERATTR NODE_DFLTBUFATTRS = {
        0,                      /* uAlignment */
 };
 
-static void DeleteNode(struct NODE_OBJECT *hNode);
+static void DeleteNode(struct NODE_OBJECT *hNode,
+               struct PROCESS_CONTEXT *pr_ctxt);
 static void DeleteNodeMgr(struct NODE_MGR *hNodeMgr);
 static void FillStreamConnect(struct NODE_OBJECT *hNode1,
                             struct NODE_OBJECT *hNode2, u32 uStream1,
@@ -780,7 +781,7 @@ func_cont2:
        } else {
                /* Cleanup */
                if (pNode)
-                       DeleteNode(pNode);
+                       DeleteNode(pNode, pr_ctxt);
 
        }
 
@@ -1608,7 +1609,8 @@ DSP_STATUS NODE_CreateMgr(OUT struct NODE_MGR **phNodeMgr,
  *      Loads the node's delete function if necessary. Free GPP side resources
  *      after node's delete function returns.
  */
-DSP_STATUS NODE_Delete(struct NODE_OBJECT *hNode)
+DSP_STATUS NODE_Delete(struct NODE_OBJECT *hNode,
+               struct PROCESS_CONTEXT *pr_ctxt)
 {
        struct NODE_OBJECT *pNode = (struct NODE_OBJECT *)hNode;
        struct NODE_MGR *hNodeMgr;
@@ -1624,11 +1626,7 @@ DSP_STATUS NODE_Delete(struct NODE_OBJECT *hNode)
        struct WMD_DRV_INTERFACE *pIntfFxns;
 
 #ifndef RES_CLEANUP_DISABLE
-       u32                     hProcess;
        HANDLE          nodeRes;
-       HANDLE          hDrvObject;
-       struct PROCESS_CONTEXT *pCtxt = NULL;
-       DSP_STATUS res_status = DSP_SOK;
 #endif
        struct DSP_PROCESSORSTATE procStatus;
        DBC_Require(cRefs > 0);
@@ -1754,27 +1752,20 @@ func_cont1:
         /*  Free host-side resources allocated by NODE_Create()
         *  DeleteNode() fails if SM buffers not freed by client!  */
 #ifndef RES_CLEANUP_DISABLE
-       /* Return TGID instead of process handle */
-       hProcess = current->tgid;
-       res_status = CFG_GetObject((u32 *)&hDrvObject, REG_DRV_OBJECT);
-       if (DSP_FAILED(res_status))
+       if (!pr_ctxt)
                goto func_cont;
-       DRV_GetProcContext(0, (struct DRV_OBJECT *)hDrvObject,
-                                               &pCtxt, hNode, 0);
-       if (pCtxt == NULL)
-               goto func_cont;
-       if (DRV_GetNodeResElement(hNode, &nodeRes, pCtxt) != DSP_ENOTFOUND) {
+       if (DRV_GetNodeResElement(hNode, &nodeRes, pr_ctxt) != DSP_ENOTFOUND) {
                GT_0trace(NODE_debugMask, GT_5CLASS, "\nNODE_Delete12:\n");
                DRV_ProcNodeUpdateStatus(nodeRes, false);
        }
 #endif
 func_cont:
        GT_0trace(NODE_debugMask, GT_ENTER, "\nNODE_Delete13:\n ");
-       DeleteNode(hNode);
+       DeleteNode(hNode, pr_ctxt);
 #ifndef RES_CLEANUP_DISABLE
        GT_0trace(NODE_debugMask, GT_5CLASS, "\nNODE_Delete2:\n ");
-       if (pCtxt != NULL)
-               DRV_RemoveNodeResElement(nodeRes, (HANDLE)pCtxt);
+       if (pr_ctxt)
+               DRV_RemoveNodeResElement(nodeRes, pr_ctxt);
 #endif
        GT_0trace(NODE_debugMask, GT_ENTER, "\nNODE_Delete3:\n ");
        /* Exit critical section */
@@ -2770,7 +2761,8 @@ func_end:
  *  Purpose:
  *      Free GPP resources allocated in NODE_Allocate() or NODE_Connect().
  */
-static void DeleteNode(struct NODE_OBJECT *hNode)
+static void DeleteNode(struct NODE_OBJECT *hNode,
+               struct PROCESS_CONTEXT *pr_ctxt)
 {
        struct NODE_MGR *hNodeMgr;
        struct CMM_XLATOROBJECT *hXlator;
@@ -2849,7 +2841,8 @@ static void DeleteNode(struct NODE_OBJECT *hNode)
                }
                if (taskArgs.uDSPHeapResAddr) {
                        status = PROC_UnMap(hNode->hProcessor,
-                                          (void *)taskArgs.uDSPHeapAddr);
+                                       (void *)taskArgs.uDSPHeapAddr,
+                                       pr_ctxt);
                        if (DSP_SUCCEEDED(status)) {
                                GT_0trace(NODE_debugMask, GT_5CLASS,
                                         "DSPProcessor_UnMap succeeded.\n");
@@ -2948,7 +2941,7 @@ static void DeleteNodeMgr(struct NODE_MGR *hNodeMgr)
                        while ((hNode =
                                (struct NODE_OBJECT *)LST_GetHead(hNodeMgr->
                                nodeList)))
-                                       DeleteNode(hNode);
+                                       DeleteNode(hNode, NULL);
 
                        DBC_Assert(LST_IsEmpty(hNodeMgr->nodeList));
                        LST_Delete(hNodeMgr->nodeList);
diff --git a/drivers/dsp/bridge/rmgr/proc.c b/drivers/dsp/bridge/rmgr/proc.c
index 0ee0656..4ab4a88 100644
--- a/drivers/dsp/bridge/rmgr/proc.c
+++ b/drivers/dsp/bridge/rmgr/proc.c
@@ -1789,7 +1789,8 @@ func_end:
  *  Purpose:
  *      Removes a MPU buffer mapping from the DSP address space.
  */
-DSP_STATUS PROC_UnMap(DSP_HPROCESSOR hProcessor, void *pMapAddr)
+DSP_STATUS PROC_UnMap(DSP_HPROCESSOR hProcessor, void *pMapAddr,
+               struct PROCESS_CONTEXT *pr_ctxt)
 {
        DSP_STATUS status = DSP_SOK;
        struct PROC_OBJECT *pProcObject = (struct PROC_OBJECT *)hProcessor;
@@ -1797,11 +1798,7 @@ DSP_STATUS PROC_UnMap(DSP_HPROCESSOR hProcessor, void 
*pMapAddr)
        u32 vaAlign;
        u32 sizeAlign;
 #ifndef RES_CLEANUP_DISABLE
-       u32                   hProcess;
-       HANDLE        pCtxt = NULL;
-       HANDLE        hDrvObject;
        HANDLE        dmmRes;
-       DSP_STATUS res_status = DSP_SOK;
 #endif
        GT_2trace(PROC_DebugMask, GT_ENTER,
                 "Entered PROC_UnMap, args:\n\thProcessor:"
@@ -1816,6 +1813,8 @@ DSP_STATUS PROC_UnMap(DSP_HPROCESSOR hProcessor, void 
*pMapAddr)
        }
 
        status = DMM_GetHandle(hProcessor, &hDmmMgr);
+       if (DSP_FAILED(status))
+               goto func_end;
        /* Critical section */
        (void)SYNC_EnterCS(hProcLock);
        if (DSP_FAILED(status)) {
@@ -1839,23 +1838,11 @@ DSP_STATUS PROC_UnMap(DSP_HPROCESSOR hProcessor, void 
*pMapAddr)
        if (DSP_FAILED(status))
                goto func_end;
 
-       /* Update the node and stream resource status */
-       /* Return TGID instead of process handle */
-       hProcess = current->tgid;
-
-       res_status = CFG_GetObject((u32 *)&hDrvObject, REG_DRV_OBJECT);
-       if (DSP_FAILED(res_status))
-               goto func_end;
-
-       DRV_GetProcContext(hProcess, (struct DRV_OBJECT *)hDrvObject,
-                        &pCtxt, NULL, (u32)pMapAddr);
-       if (pCtxt != NULL) {
-               if (DRV_GetDMMResElement((u32)pMapAddr, &dmmRes, pCtxt) !=
-                  DSP_ENOTFOUND)
-                       DRV_RemoveDMMResElement(dmmRes, pCtxt);
-       }
-func_end:
+       if (pr_ctxt && DRV_GetDMMResElement((u32)pMapAddr, &dmmRes, pr_ctxt)
+                                                       != DSP_ENOTFOUND)
+               DRV_RemoveDMMResElement(dmmRes, pr_ctxt);
 #endif
+func_end:
        GT_1trace(PROC_DebugMask, GT_ENTER,
                 "Leaving PROC_UnMap [0x%x]", status);
        return status;
-- 
1.6.2.4

--
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