[OMAPZOOM][PATCH 5/6] DSPBRIDGE: Fixed race condition with DBLL target list

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Fernando Guzman Lugo <x0095840@xxxxxx>
Date: Wed, 28 Jan 2009 19:29:25 -0600
Subject: [PATCH] DSPBRIDGE: Fixed race condition with DBLL target list

Fixed race condition with DBLL target list

Signed-off-by: Fernando Guzman Lugo <x0095840@xxxxxx>
---
 drivers/dsp/bridge/rmgr/node.c |   24 +++++++++++-------------
 1 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/drivers/dsp/bridge/rmgr/node.c b/drivers/dsp/bridge/rmgr/node.c
index 31d8de9..3242325 100644
--- a/drivers/dsp/bridge/rmgr/node.c
+++ b/drivers/dsp/bridge/rmgr/node.c
@@ -234,7 +234,6 @@ struct NODE_MGR {
 	struct GB_TMap *zChnlMap;	/* Zero-Copy Channel alloc bit map */
 	struct NTFY_OBJECT *hNtfy;	/* Manages registered notifications */
 	struct SYNC_CSOBJECT *hSync;	/* For critical sections */
-	struct SYNC_CSOBJECT *hAllocSync; /* For NODE_Alloc critical sections */
 	u32 ulFxnAddrs[NUMRMSFXNS];	/* RMS function addresses */
 	struct MSG_MGR *hMsg;
 
@@ -485,7 +484,7 @@ func_cont:
 	}
 	pNode->hNodeMgr = hNodeMgr;
 	/* This critical section protects GetNodeProps */
-	status = SYNC_EnterCS(hNodeMgr->hAllocSync);
+	status = SYNC_EnterCS(hNodeMgr->hSync);
 	if (procId != DSP_UNIT)
 		goto func_cont3;
 
@@ -565,7 +564,7 @@ func_cont:
 	}
 
 func_cont3:
-	(void)SYNC_LeaveCS(hNodeMgr->hAllocSync);
+	(void)SYNC_LeaveCS(hNodeMgr->hSync);
 func_cont1:
 	if (pAttrIn != NULL) {
 		/* Overrides of NBD properties */
@@ -1586,13 +1585,6 @@ DSP_STATUS NODE_CreateMgr(OUT struct NODE_MGR **phNodeMgr,
 		status = SYNC_InitializeCS(&pNodeMgr->hSync);
 		if (DSP_FAILED(status))
 			status = DSP_EMEMORY;
-
-		if (DSP_SUCCEEDED(status)) {
-			status = SYNC_InitializeCS(&pNodeMgr->hAllocSync);
-			if (DSP_FAILED(status))
-				status = DSP_EMEMORY;
-
-		}
 	}
 	if (DSP_SUCCEEDED(status)) {
 		pNodeMgr->chnlMap = GB_create(pNodeMgr->ulNumChnls);
@@ -2982,9 +2974,6 @@ static void DeleteNodeMgr(struct NODE_MGR *hNodeMgr)
 		if (hNodeMgr->hSync)
 			SYNC_DeleteCS(hNodeMgr->hSync);
 
-		if (hNodeMgr->hSync)
-			SYNC_DeleteCS(hNodeMgr->hAllocSync);
-
 		if (hNodeMgr->hStrmMgr)
 			STRM_Delete(hNodeMgr->hStrmMgr);
 
@@ -3342,6 +3331,12 @@ DSP_STATUS NODE_GetUUIDProps(DSP_HPROCESSOR hProcessor,
 			status = DSP_EFAIL;
 	}
 
+	/*  Enter the critical section.  This is needed because
+	* DCD_GetObjectDef will ultimately end up calling DBLL_open/close,
+	* which needs to be protected in order to not corrupt the zlib manager
+	* (COD). */
+	status = SYNC_EnterCS(hNodeMgr->hSync);
+
 	if (DSP_SUCCEEDED(status)) {
 		dcdNodeProps.pstrCreatePhaseFxn = NULL;
 		dcdNodeProps.pstrExecutePhaseFxn = NULL;
@@ -3366,6 +3361,9 @@ DSP_STATUS NODE_GetUUIDProps(DSP_HPROCESSOR hProcessor,
 			if (dcdNodeProps.pstrIAlgName)
 				MEM_Free(dcdNodeProps.pstrIAlgName);
 		}
+		/*  Leave the critical section, we're done.  */
+		(void)SYNC_LeaveCS(hNodeMgr->hSync);
+
 	}
 
 	return status;
-- 
1.5.4.3

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

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux