Signed-off-by: Ameya Palande <ameya.pala...@nokia.com>
---
 .../plat-omap/include/dspbridge/resourcecleanup.h  |    2 +-
 drivers/dsp/bridge/rmgr/drv.c                      |   36 +++++++++++---------
 drivers/dsp/bridge/rmgr/drv_interface.c            |    4 +-
 3 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/arch/arm/plat-omap/include/dspbridge/resourcecleanup.h 
b/arch/arm/plat-omap/include/dspbridge/resourcecleanup.h
index b43fa16..5592f38 100644
--- a/arch/arm/plat-omap/include/dspbridge/resourcecleanup.h
+++ b/arch/arm/plat-omap/include/dspbridge/resourcecleanup.h
@@ -43,7 +43,7 @@ extern DSP_STATUS DRV_GetProcContext(u32 phProcess,
 extern DSP_STATUS DRV_RemoveAllResources(HANDLE pPctxt);
 
 extern DSP_STATUS DRV_RemoveProcContext(struct DRV_OBJECT *hDRVObject,
-                                    HANDLE hPCtxt, HANDLE hProcess);
+                                    HANDLE hPCtxt);
 
 extern DSP_STATUS DRV_GetNodeResElement(HANDLE hNode, HANDLE nodeRes,
                                        HANDLE pCtxt);
diff --git a/drivers/dsp/bridge/rmgr/drv.c b/drivers/dsp/bridge/rmgr/drv.c
index e64b997..a13932c 100644
--- a/drivers/dsp/bridge/rmgr/drv.c
+++ b/drivers/dsp/bridge/rmgr/drv.c
@@ -317,36 +317,40 @@ DSP_STATUS DRV_InsertProcContext(struct DRV_OBJECT 
*hDrVObject, HANDLE hPCtxt)
 
 /* Delete a process context from process resource context list */
 DSP_STATUS DRV_RemoveProcContext(struct DRV_OBJECT *hDRVObject,
-                                    HANDLE hPCtxt, HANDLE hProcess)
+               HANDLE pr_ctxt)
 {
        DSP_STATUS status = DSP_SOK;
-       struct PROCESS_CONTEXT    *pCtxt2 = NULL;
-       struct PROCESS_CONTEXT    *pTmp = NULL;
-       struct PROCESS_CONTEXT    *pCtxtList = NULL;
+       struct PROCESS_CONTEXT *pr_ctxt_list = NULL;
+       struct PROCESS_CONTEXT *ptr_prev;
 
        DBC_Assert(hDRVObject != NULL);
-       DRV_GetProcContext((u32)hProcess, hDRVObject, &pCtxt2, NULL, 0);
 
        GT_0trace(curTrace, GT_ENTER, "DRV_RemoveProcContext: 12");
-       DRV_GetProcCtxtList(&pCtxtList, hDRVObject);
+       DRV_GetProcCtxtList(&pr_ctxt_list, hDRVObject);
+
+       /* Special condition */
+       if (pr_ctxt_list == pr_ctxt) {
+               hDRVObject->procCtxtList = NULL;
+               goto func_cont;
+       }
+
        GT_0trace(curTrace, GT_ENTER, "DRV_RemoveProcContext: 13");
-       pTmp = pCtxtList;
-       while ((pCtxtList != NULL) && (pCtxtList != pCtxt2)) {
-               pTmp = pCtxtList;
-               pCtxtList = pCtxtList->next;
+       while (pr_ctxt_list && (pr_ctxt_list != pr_ctxt)) {
+               ptr_prev = pr_ctxt_list;
+               pr_ctxt_list = pr_ctxt_list->next;
                GT_0trace(curTrace, GT_ENTER,
                         "DRV_RemoveProcContext: 2");
        }
+
        GT_0trace(curTrace, GT_ENTER, "DRV_RemoveProcContext: 3");
-       if (hDRVObject->procCtxtList == pCtxt2)
-               hDRVObject->procCtxtList = pCtxt2->next;
 
-       if (pCtxtList == NULL)
+       if (!pr_ctxt_list)
                return DSP_ENOTFOUND;
-       else if (pTmp->next != NULL)
-               pTmp->next = pTmp->next->next;
+       else
+               ptr_prev->next = pr_ctxt_list->next;
 
-       MEM_Free(pCtxt2);
+func_cont:
+       MEM_Free(pr_ctxt);
        GT_0trace(curTrace, GT_ENTER, "DRV_RemoveProcContext: 7");
 
        return status;
diff --git a/drivers/dsp/bridge/rmgr/drv_interface.c 
b/drivers/dsp/bridge/rmgr/drv_interface.c
index 1cb3d74..fa79695 100644
--- a/drivers/dsp/bridge/rmgr/drv_interface.c
+++ b/drivers/dsp/bridge/rmgr/drv_interface.c
@@ -481,7 +481,7 @@ static int __devexit omap34xx_bridge_remove(struct 
platform_device *pdev)
                }
                pTmp = pCtxtclosed->next;
                DRV_RemoveProcContext((struct DRV_OBJECT *)hDrvObject,
-                                    pCtxtclosed, (void *)pCtxtclosed->pid);
+                               pCtxtclosed);
                pCtxtclosed = pTmp;
        }
 
@@ -630,7 +630,7 @@ static int bridge_release(struct inode *ip, struct file 
*filp)
                                PROC_Detach(proc_obj_ptr, pr_ctxt);
                        }
                        DRV_RemoveProcContext((struct DRV_OBJECT *)hDrvObject,
-                                       pr_ctxt, (void *)pr_ctxt->pid);
+                                       pr_ctxt);
                } else {
                        status = -EIO;
                }
-- 
1.6.2.4

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

Reply via email to