@@ -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);
@@ -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;
@@ -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;
}
Signed-off-by: Ameya Palande <ameya.palande@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(-)