linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv2 0/3] DSPBRIDGE: MEM Module cleanup series
@ 2010-02-04 15:33 Ameya Palande
  2010-02-04 15:33 ` [PATCH 1/3] DSPBRIDGE: Get rid of MEM_CHECK mechanism Ameya Palande
  0 siblings, 1 reply; 10+ messages in thread
From: Ameya Palande @ 2010-02-04 15:33 UTC (permalink / raw)
  To: linux-omap; +Cc: omar.ramirez, nm, deepak.chitriki

This series contains patches which remove following things from the MEM
module:
1. MEM_CHECK memory leak debugging mechanism
2. MEM_Free() function
3. MEM_VFree() function

There was some issue while applying patches from V1, which should be solved in
V2.

Ameya Palande (3):
  DSPBRIDGE: Get rid of MEM_CHECK mechanism
  DSPBRIDGE: Get rid of MEM_Free()
  DSPBRIDGE: Get rid of MEM_VFree()

 arch/arm/plat-omap/include/dspbridge/mem.h |   36 +----
 drivers/dsp/bridge/gen/gs.c                |    4 +-
 drivers/dsp/bridge/pmgr/cmm.c              |   12 +-
 drivers/dsp/bridge/pmgr/cod.c              |    4 +-
 drivers/dsp/bridge/pmgr/dbll.c             |   15 +-
 drivers/dsp/bridge/pmgr/dev.c              |    9 +-
 drivers/dsp/bridge/pmgr/dmm.c              |    3 +-
 drivers/dsp/bridge/pmgr/wcd.c              |   46 ++---
 drivers/dsp/bridge/rmgr/dbdcd.c            |   13 +-
 drivers/dsp/bridge/rmgr/disp.c             |    3 +-
 drivers/dsp/bridge/rmgr/drv.c              |   38 ++---
 drivers/dsp/bridge/rmgr/drv_interface.c    |    2 +-
 drivers/dsp/bridge/rmgr/nldr.c             |   52 ++----
 drivers/dsp/bridge/rmgr/node.c             |   87 ++++-------
 drivers/dsp/bridge/rmgr/proc.c             |   10 +-
 drivers/dsp/bridge/rmgr/rmm.c              |   19 +-
 drivers/dsp/bridge/rmgr/strm.c             |    3 +-
 drivers/dsp/bridge/services/mem.c          |  246 +---------------------------
 drivers/dsp/bridge/services/ntfy.c         |    7 +-
 drivers/dsp/bridge/services/regsup.c       |   10 +-
 drivers/dsp/bridge/services/sync.c         |    3 +-
 drivers/dsp/bridge/wmd/chnl_sm.c           |   11 +-
 drivers/dsp/bridge/wmd/io_sm.c             |   12 +-
 drivers/dsp/bridge/wmd/msg_sm.c            |    8 +-
 drivers/dsp/bridge/wmd/tiomap3430.c        |   17 +--
 drivers/dsp/bridge/wmd/ue_deh.c            |    6 +-
 26 files changed, 160 insertions(+), 516 deletions(-)


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/3] DSPBRIDGE: Get rid of MEM_CHECK mechanism
  2010-02-04 15:33 [PATCHv2 0/3] DSPBRIDGE: MEM Module cleanup series Ameya Palande
@ 2010-02-04 15:33 ` Ameya Palande
  2010-02-04 15:33   ` [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free() Ameya Palande
  2010-02-08 22:47   ` [PATCH 1/3] DSPBRIDGE: Get rid of MEM_CHECK mechanism Omar Ramirez Luna
  0 siblings, 2 replies; 10+ messages in thread
From: Ameya Palande @ 2010-02-04 15:33 UTC (permalink / raw)
  To: linux-omap; +Cc: omar.ramirez, nm, deepak.chitriki

kmemleak offeres the same functionality as custom MEM_CHECK
mechanism, so get rid of MEM_CHECK.

Signed-off-by: Ameya Palande <ameya.palande@nokia.com>
---
 drivers/dsp/bridge/services/mem.c |  212 +------------------------------------
 1 files changed, 2 insertions(+), 210 deletions(-)

diff --git a/drivers/dsp/bridge/services/mem.c b/drivers/dsp/bridge/services/mem.c
index cee646a..c4b1fe1 100644
--- a/drivers/dsp/bridge/services/mem.c
+++ b/drivers/dsp/bridge/services/mem.c
@@ -34,11 +34,6 @@
 
 /*  ----------------------------------- Defines */
 #define MEM_512MB   0x1fffffff
-#define memInfoSign 0x464E494D	/* "MINF" (in reverse). */
-
-#ifdef CONFIG_BRIDGE_DEBUG
-#define MEM_CHECK		/* Use to detect source of memory leaks */
-#endif
 
 /*  ----------------------------------- Globals */
 #if GT_TRACE
@@ -56,85 +51,6 @@ struct extPhysMemPool {
 
 static struct extPhysMemPool extMemPool;
 
-/*  Information about each element allocated on heap */
-struct memInfo {
-	struct list_head link;		/* Must be first */
-	size_t size;
-	void *caller;
-	u32 dwSignature;	/* Should be last */
-};
-
-#ifdef MEM_CHECK
-
-/*
- *  This structure holds a linked list to all memory elements allocated on
- *  heap by DSP/BIOS Bridge. This is used to report memory leaks and free
- *  such elements while removing the DSP/BIOS Bridge driver
- */
-struct memMan {
-	struct LST_LIST lst;
-	spinlock_t lock;
-};
-
-static struct memMan mMan;
-
-/*
- *  These functions are similar to LST_PutTail and LST_RemoveElem and are
- *  duplicated here to make MEM independent of LST
- */
-static inline void MLST_PutTail(struct LST_LIST *pList, struct list_head *pElem)
-{
-	pElem->prev = pList->head.prev;
-	pElem->next = &pList->head;
-	pList->head.prev = pElem;
-	pElem->prev->next = pElem;
-}
-
-static inline void MLST_RemoveElem(struct LST_LIST *pList,
-				   struct list_head *pCurElem)
-{
-	pCurElem->prev->next = pCurElem->next;
-	pCurElem->next->prev = pCurElem->prev;
-	pCurElem->next = NULL;
-	pCurElem->prev = NULL;
-}
-
-static void MEM_Check(void)
-{
-	struct memInfo *pMem;
-	struct list_head *last = &mMan.lst.head;
-	struct list_head *curr = last->next;
-
-	if (!LST_IsEmpty(&mMan.lst)) {
-		GT_0trace(MEM_debugMask, GT_7CLASS, "*** MEMORY LEAK ***\n");
-		GT_0trace(MEM_debugMask, GT_7CLASS,
-			  "Addr      Size      Caller\n");
-		while (curr != last) {
-			pMem = (struct memInfo *)curr;
-			curr = curr->next;
-			if ((u32)pMem > PAGE_OFFSET &&
-			    MEM_IsValidHandle(pMem, memInfoSign)) {
-				GT_3trace(MEM_debugMask, GT_7CLASS,
-					"%lx  %d\t [<%p>]\n",
-					(u32) pMem + sizeof(struct memInfo),
-					pMem->size, pMem->caller);
-				MLST_RemoveElem(&mMan.lst,
-						(struct list_head *)pMem);
-				kfree(pMem);
-			} else {
-				GT_1trace(MEM_debugMask, GT_7CLASS,
-					  "Invalid allocation or "
-					  "Buffer underflow at %x\n",
-					  (u32)pMem +	sizeof(struct memInfo));
-				break;
-			}
-		}
-	}
-	DBC_Ensure(LST_IsEmpty(&mMan.lst));
-}
-
-#endif
-
 void MEM_ExtPhysPoolInit(u32 poolPhysBase, u32 poolSize)
 {
 	u32 poolVirtBase;
@@ -233,7 +149,7 @@ static void *MEM_ExtPhysMemAlloc(u32 bytes, u32 align, OUT u32 *pPhysAddr)
  */
 void *MEM_Alloc(u32 cBytes, enum MEM_POOLATTRS type)
 {
-	struct memInfo *pMem = NULL;
+	void *pMem = NULL;
 
 	GT_2trace(MEM_debugMask, GT_ENTER,
 		  "MEM_Alloc: cBytes 0x%x\ttype 0x%x\n", cBytes, type);
@@ -242,46 +158,11 @@ void *MEM_Alloc(u32 cBytes, enum MEM_POOLATTRS type)
 		case MEM_NONPAGED:
 		/* If non-paged memory required, see note at top of file. */
 		case MEM_PAGED:
-#ifndef MEM_CHECK
 			pMem = kmalloc(cBytes,
 				(in_atomic()) ? GFP_ATOMIC : GFP_KERNEL);
-#else
-			pMem = kmalloc(cBytes + sizeof(struct memInfo),
-				(in_atomic()) ? GFP_ATOMIC : GFP_KERNEL);
-			if (pMem) {
-				pMem->size = cBytes;
-				pMem->caller = __builtin_return_address(0);
-				pMem->dwSignature = memInfoSign;
-
-				spin_lock(&mMan.lock);
-				MLST_PutTail(&mMan.lst,
-					    (struct list_head *)pMem);
-				spin_unlock(&mMan.lock);
-
-				pMem = (void *)((u32)pMem +
-					sizeof(struct memInfo));
-			}
-#endif
 			break;
 		case MEM_LARGEVIRTMEM:
-#ifndef MEM_CHECK
 			pMem = vmalloc(cBytes);
-#else
-			pMem = vmalloc(cBytes + sizeof(struct memInfo));
-			if (pMem) {
-				pMem->size = cBytes;
-				pMem->caller = __builtin_return_address(0);
-				pMem->dwSignature = memInfoSign;
-
-				spin_lock(&mMan.lock);
-				MLST_PutTail(&mMan.lst,
-					    (struct list_head *)pMem);
-				spin_unlock(&mMan.lock);
-
-				pMem = (void *)((u32)pMem +
-					sizeof(struct memInfo));
-			}
-#endif
 			break;
 
 		default:
@@ -335,7 +216,7 @@ void *MEM_AllocPhysMem(u32 cBytes, u32 ulAlign, OUT u32 *pPhysicalAddress)
  */
 void *MEM_Calloc(u32 cBytes, enum MEM_POOLATTRS type)
 {
-	struct memInfo *pMem = NULL;
+	void *pMem = NULL;
 
 	GT_2trace(MEM_debugMask, GT_ENTER,
 		  "MEM_Calloc: cBytes 0x%x\ttype 0x%x\n",
@@ -346,51 +227,16 @@ void *MEM_Calloc(u32 cBytes, enum MEM_POOLATTRS type)
 		case MEM_NONPAGED:
 		/* If non-paged memory required, see note at top of file. */
 		case MEM_PAGED:
-#ifndef MEM_CHECK
 			pMem = kmalloc(cBytes,
 				(in_atomic()) ? GFP_ATOMIC : GFP_KERNEL);
 			if (pMem)
 				memset(pMem, 0, cBytes);
 
-#else
-			pMem = kmalloc(cBytes + sizeof(struct memInfo),
-				(in_atomic()) ? GFP_ATOMIC : GFP_KERNEL);
-			if (pMem) {
-				memset((void *)((u32)pMem +
-					sizeof(struct memInfo)), 0, cBytes);
-				pMem->size = cBytes;
-				pMem->caller = __builtin_return_address(0);
-				pMem->dwSignature = memInfoSign;
-				spin_lock(&mMan.lock);
-				MLST_PutTail(&mMan.lst,
-					(struct list_head *)pMem);
-				spin_unlock(&mMan.lock);
-				pMem = (void *)((u32)pMem +
-					sizeof(struct memInfo));
-			}
-#endif
 			break;
 		case MEM_LARGEVIRTMEM:
-#ifndef MEM_CHECK
 			pMem = vmalloc(cBytes);
 			if (pMem)
 				memset(pMem, 0, cBytes);
-#else
-			pMem = vmalloc(cBytes + sizeof(struct memInfo));
-			if (pMem) {
-				memset((void *)((u32)pMem +
-					sizeof(struct memInfo)), 0, cBytes);
-				pMem->size = cBytes;
-				pMem->caller = __builtin_return_address(0);
-				pMem->dwSignature = memInfoSign;
-				spin_lock(&mMan.lock);
-				MLST_PutTail(&mMan.lst,
-						(struct list_head *)pMem);
-				spin_unlock(&mMan.lock);
-				pMem = (void *)((u32)pMem +
-					sizeof(struct memInfo));
-			}
-#endif
 			break;
 		default:
 			GT_1trace(MEM_debugMask, GT_6CLASS,
@@ -410,9 +256,6 @@ void *MEM_Calloc(u32 cBytes, enum MEM_POOLATTRS type)
  */
 void MEM_Exit(void)
 {
-#ifdef MEM_CHECK
-	MEM_Check();
-#endif
 }
 
 /*
@@ -455,35 +298,13 @@ void MEM_FlushCache(void *pMemBuf, u32 cBytes, s32 FlushType)
  */
 void MEM_VFree(IN void *pMemBuf)
 {
-#ifdef MEM_CHECK
-	struct memInfo *pMem = (void *)((u32)pMemBuf - sizeof(struct memInfo));
-#endif
-
 	DBC_Require(pMemBuf != NULL);
 
 	GT_1trace(MEM_debugMask, GT_ENTER, "MEM_VFree: pMemBufs 0x%x\n",
 		  pMemBuf);
 
 	if (pMemBuf) {
-#ifndef MEM_CHECK
 		vfree(pMemBuf);
-#else
-		if (pMem) {
-			if (pMem->dwSignature == memInfoSign) {
-				spin_lock(&mMan.lock);
-				MLST_RemoveElem(&mMan.lst,
-						(struct list_head *)pMem);
-				spin_unlock(&mMan.lock);
-				pMem->dwSignature = 0;
-				vfree(pMem);
-			} else {
-				GT_1trace(MEM_debugMask, GT_7CLASS,
-					"Invalid allocation or "
-					"Buffer underflow at %x\n",
-					(u32) pMem + sizeof(struct memInfo));
-			}
-		}
-#endif
 	}
 }
 
@@ -494,35 +315,13 @@ void MEM_VFree(IN void *pMemBuf)
  */
 void MEM_Free(IN void *pMemBuf)
 {
-#ifdef MEM_CHECK
-	struct memInfo *pMem = (void *)((u32)pMemBuf - sizeof(struct memInfo));
-#endif
-
 	DBC_Require(pMemBuf != NULL);
 
 	GT_1trace(MEM_debugMask, GT_ENTER, "MEM_Free: pMemBufs 0x%x\n",
 		  pMemBuf);
 
 	if (pMemBuf) {
-#ifndef MEM_CHECK
 		kfree(pMemBuf);
-#else
-		if (pMem) {
-			if (pMem->dwSignature == memInfoSign) {
-				spin_lock(&mMan.lock);
-				MLST_RemoveElem(&mMan.lst,
-						(struct list_head *)pMem);
-				spin_unlock(&mMan.lock);
-				pMem->dwSignature = 0;
-				kfree(pMem);
-			} else {
-				GT_1trace(MEM_debugMask, GT_7CLASS,
-					"Invalid allocation or "
-					"Buffer underflow at %x\n",
-					(u32) pMem + sizeof(struct memInfo));
-			}
-		}
-#endif
 	}
 }
 
@@ -552,12 +351,5 @@ void MEM_FreePhysMem(void *pVirtualAddress, u32 pPhysicalAddress,
 bool MEM_Init(void)
 {
 	GT_create(&MEM_debugMask, "MM");	/* MM for MeM module */
-
-#ifdef MEM_CHECK
-	mMan.lst.head.next = &mMan.lst.head;
-	mMan.lst.head.prev = &mMan.lst.head;
-	spin_lock_init(&mMan.lock);
-#endif
-
 	return true;
 }
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free()
  2010-02-04 15:33 ` [PATCH 1/3] DSPBRIDGE: Get rid of MEM_CHECK mechanism Ameya Palande
@ 2010-02-04 15:33   ` Ameya Palande
  2010-02-04 15:33     ` [PATCH 3/3] DSPBRIDGE: Get rid of MEM_VFree() Ameya Palande
  2010-02-06  1:58     ` [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free() Omar Ramirez Luna
  2010-02-08 22:47   ` [PATCH 1/3] DSPBRIDGE: Get rid of MEM_CHECK mechanism Omar Ramirez Luna
  1 sibling, 2 replies; 10+ messages in thread
From: Ameya Palande @ 2010-02-04 15:33 UTC (permalink / raw)
  To: linux-omap; +Cc: omar.ramirez, nm, deepak.chitriki

kfree() is NULL and ZERO pointer safe so MEM_Free() doesn't provide any
significant advantage. By getting rid of MEM_Free() and the NULL pointer
check associated with it, we can save on:
1. One level of indirection which translates to a function call cost.
2. NULL pointer checking cost.

Signed-off-by: Ameya Palande <ameya.palande@nokia.com>
---
 arch/arm/plat-omap/include/dspbridge/mem.h |   19 +------
 drivers/dsp/bridge/gen/gs.c                |    4 +-
 drivers/dsp/bridge/pmgr/cmm.c              |   12 ++--
 drivers/dsp/bridge/pmgr/cod.c              |    4 +-
 drivers/dsp/bridge/pmgr/dbll.c             |   15 ++---
 drivers/dsp/bridge/pmgr/dev.c              |    9 +--
 drivers/dsp/bridge/pmgr/wcd.c              |   46 ++++++---------
 drivers/dsp/bridge/rmgr/dbdcd.c            |   13 ++---
 drivers/dsp/bridge/rmgr/disp.c             |    3 +-
 drivers/dsp/bridge/rmgr/drv.c              |   38 +++++-------
 drivers/dsp/bridge/rmgr/drv_interface.c    |    2 +-
 drivers/dsp/bridge/rmgr/nldr.c             |   52 ++++++-----------
 drivers/dsp/bridge/rmgr/node.c             |   87 ++++++++++------------------
 drivers/dsp/bridge/rmgr/proc.c             |   10 +--
 drivers/dsp/bridge/rmgr/rmm.c              |   19 +++---
 drivers/dsp/bridge/rmgr/strm.c             |    3 +-
 drivers/dsp/bridge/services/mem.c          |   17 ------
 drivers/dsp/bridge/services/ntfy.c         |    7 +-
 drivers/dsp/bridge/services/regsup.c       |   10 ++--
 drivers/dsp/bridge/services/sync.c         |    3 +-
 drivers/dsp/bridge/wmd/chnl_sm.c           |   11 ++--
 drivers/dsp/bridge/wmd/io_sm.c             |   12 ++--
 drivers/dsp/bridge/wmd/msg_sm.c            |    8 +-
 drivers/dsp/bridge/wmd/tiomap3430.c        |   17 ++----
 drivers/dsp/bridge/wmd/ue_deh.c            |    6 +-
 25 files changed, 157 insertions(+), 270 deletions(-)

diff --git a/arch/arm/plat-omap/include/dspbridge/mem.h b/arch/arm/plat-omap/include/dspbridge/mem.h
index 353ffb0..e20d6d2 100644
--- a/arch/arm/plat-omap/include/dspbridge/mem.h
+++ b/arch/arm/plat-omap/include/dspbridge/mem.h
@@ -140,21 +140,6 @@
 	extern void MEM_FlushCache(void *pMemBuf, u32 cBytes, s32 FlushType);
 
 /*
- *  ======== MEM_Free ========
- *  Purpose:
- *      Free the given block of system memory.
- *  Parameters:
- *      pMemBuf:    Pointer to memory allocated by MEM_Calloc/Alloc().
- *  Returns:
- *  Requires:
- *      MEM initialized.
- *      pMemBuf is a valid memory address returned by MEM_Calloc/Alloc().
- *  Ensures:
- *      pMemBuf is no longer a valid pointer to memory.
- */
-	extern void MEM_Free(IN void *pMemBuf);
-
-/*
  *  ======== MEM_VFree ========
  *  Purpose:
  *      Free the given block of system memory in virtual space.
@@ -200,14 +185,14 @@
  *      pObj:   Pointer to the object to free.
  *  Returns:
  *  Requires:
- *      Same requirements as MEM_Free().
+ *      Same requirements as kfree().
  *  Ensures:
  *      A subsequent call to MEM_IsValidHandle() will fail for this object.
  */
 #define MEM_FreeObject(pObj)    \
 {                               \
     pObj->dwSignature = 0x00;   \
-    MEM_Free(pObj);             \
+    kfree(pObj);                \
 }
 
 /*
diff --git a/drivers/dsp/bridge/gen/gs.c b/drivers/dsp/bridge/gen/gs.c
index 1197829..05b2e56 100644
--- a/drivers/dsp/bridge/gen/gs.c
+++ b/drivers/dsp/bridge/gen/gs.c
@@ -62,7 +62,7 @@ void GS_exit(void)
  */
 void GS_free(void *ptr)
 {
-	MEM_Free(ptr);
+	kfree(ptr);
 	/* ack! no size info */
 	/* cumsize -= size; */
 }
@@ -74,7 +74,7 @@ void GS_free(void *ptr)
  */
 void GS_frees(void *ptr, u32 size)
 {
-	MEM_Free(ptr);
+	kfree(ptr);
 	cumsize -= size;
 }
 
diff --git a/drivers/dsp/bridge/pmgr/cmm.c b/drivers/dsp/bridge/pmgr/cmm.c
index 262f087..03d2e63 100644
--- a/drivers/dsp/bridge/pmgr/cmm.c
+++ b/drivers/dsp/bridge/pmgr/cmm.c
@@ -369,10 +369,10 @@ DSP_STATUS CMM_Destroy(struct CMM_OBJECT *hCmmMgr, bool bForce)
 		while (!LST_IsEmpty(pCmmMgr->pNodeFreeListHead)) {
 			pNode = (struct CMM_MNODE *)LST_GetHead(pCmmMgr->
 				 pNodeFreeListHead);
-			MEM_Free(pNode);
+			kfree(pNode);
 		}
 		/* delete NodeFreeList list */
-		MEM_Free(pCmmMgr->pNodeFreeListHead);
+		kfree(pCmmMgr->pNodeFreeListHead);
 	}
 	SYNC_LeaveCS(pCmmMgr->hCmmLock);
 	if (DSP_SUCCEEDED(status)) {
@@ -765,11 +765,11 @@ static void UnRegisterGPPSMSeg(struct CMM_ALLOCATOR *pSMA)
 				    (struct list_head *)pCurNode);
 			LST_RemoveElem(pSMA->pFreeListHead,
 				      (struct list_head *)pCurNode);
-			MEM_Free((void *) pCurNode);
+			kfree((void *) pCurNode);
 			/* next node. */
 			pCurNode = pNextNode;
 		}
-		MEM_Free(pSMA->pFreeListHead);		/* delete freelist */
+		kfree(pSMA->pFreeListHead);		/* delete freelist */
 		/* free nodes on InUse list */
 		pCurNode = (struct CMM_MNODE *)LST_First(pSMA->pInUseListHead);
 		while (pCurNode) {
@@ -778,11 +778,11 @@ static void UnRegisterGPPSMSeg(struct CMM_ALLOCATOR *pSMA)
 				    (struct list_head *)pCurNode);
 			LST_RemoveElem(pSMA->pInUseListHead,
 				      (struct list_head *)pCurNode);
-			MEM_Free((void *) pCurNode);
+			kfree((void *) pCurNode);
 			/* next node. */
 			pCurNode = pNextNode;
 		}
-		MEM_Free(pSMA->pInUseListHead);		/* delete InUse list */
+		kfree(pSMA->pInUseListHead);		/* delete InUse list */
 	}
 	if ((void *) pSMA->dwVmBase != NULL)
 		MEM_UnmapLinearAddress((void *) pSMA->dwVmBase);
diff --git a/drivers/dsp/bridge/pmgr/cod.c b/drivers/dsp/bridge/pmgr/cod.c
index bfbe107..8a18ef9 100644
--- a/drivers/dsp/bridge/pmgr/cod.c
+++ b/drivers/dsp/bridge/pmgr/cod.c
@@ -210,7 +210,7 @@ void COD_Close(struct COD_LIBRARYOBJ *lib)
 	hMgr = lib->hCodMgr;
 	hMgr->fxns.closeFxn(lib->dbllLib);
 
-	MEM_Free(lib);
+	kfree(lib);
 }
 
 /*
@@ -315,7 +315,7 @@ void COD_Delete(struct COD_MANAGER *hMgr)
 		hMgr->fxns.exitFxn();
 	}
 	hMgr->ulMagic = ~MAGIC;
-	MEM_Free(hMgr);
+	kfree(hMgr);
 }
 
 /*
diff --git a/drivers/dsp/bridge/pmgr/dbll.c b/drivers/dsp/bridge/pmgr/dbll.c
index 80ca4d4..82d07f4 100644
--- a/drivers/dsp/bridge/pmgr/dbll.c
+++ b/drivers/dsp/bridge/pmgr/dbll.c
@@ -235,8 +235,7 @@ void DBLL_close(struct DBLL_LibraryObj *zlLib)
 
 		/* Free DOF resources */
 		dofClose(zlLib);
-		if (zlLib->fileName)
-			MEM_Free(zlLib->fileName);
+		kfree(zlLib->fileName);
 
 		/* remove symbols from symbol table */
 		if (zlLib->symTab)
@@ -1009,7 +1008,7 @@ static void symDelete(void *value)
 {
 	struct Symbol *sp = (struct Symbol *)value;
 
-	MEM_Free(sp->name);
+	kfree(sp->name);
 }
 
 /*
@@ -1178,7 +1177,7 @@ static struct dynload_symbol *addToSymbolTable(struct Dynamic_Loader_Sym *this,
 		symPtr = (struct Symbol *)GH_insert(lib->symTab, (void *)name,
 			 (void *)&symbol);
 		if (symPtr == NULL)
-			MEM_Free(symbol.name);
+			kfree(symbol.name);
 
 	}
 	if (symPtr != NULL)
@@ -1234,7 +1233,7 @@ static void deallocate(struct Dynamic_Loader_Sym *this, void *memPtr)
 	lib = pSymbol->lib;
 	DBC_Require(MEM_IsValidHandle(lib, DBLL_LIBSIGNATURE));
 
-	MEM_Free(memPtr);
+	kfree(memPtr);
 }
 
 /*
@@ -1336,11 +1335,11 @@ static int rmmAlloc(struct Dynamic_Loader_Allocate *this,
 				 req, segId);
 		}
 	}
-	MEM_Free(szSectName);
+	kfree(szSectName);
 	szSectName = NULL;
-	MEM_Free(szLastToken);
+	kfree(szLastToken);
 	szLastToken = NULL;
-	MEM_Free(szSecLastToken);
+	kfree(szSecLastToken);
 	szSecLastToken = NULL;
 func_cont:
 	if (memType == DBLL_CODE)
diff --git a/drivers/dsp/bridge/pmgr/dev.c b/drivers/dsp/bridge/pmgr/dev.c
index 2b2d669..d86bc9c 100644
--- a/drivers/dsp/bridge/pmgr/dev.c
+++ b/drivers/dsp/bridge/pmgr/dev.c
@@ -295,8 +295,7 @@ DSP_STATUS DEV_CreateDevice(OUT struct DEV_OBJECT **phDevObject,
 			 "DEV_CreateDevice Succeeded \nDevObject "
 			 "0x%x\n", pDevObject);
 	} else {
-		if (pDevObject && pDevObject->procList)
-			MEM_Free(pDevObject->procList);
+		kfree(pDevObject->procList);
 
 		if (pDevObject && pDevObject->hCodMgr)
 			COD_Delete(pDevObject->hCodMgr);
@@ -451,10 +450,8 @@ DSP_STATUS DEV_DestroyDevice(struct DEV_OBJECT *hDevObject)
 		} else
 			status = DSP_EFAIL;
 		if (DSP_SUCCEEDED(status)) {
-			if (pDevObject->procList) {
-				MEM_Free(pDevObject->procList);
-				pDevObject->procList = NULL;
-			}
+			kfree(pDevObject->procList);
+			pDevObject->procList = NULL;
 
 			/* Remove this DEV_Object from the global list: */
 			DRV_RemoveDevObject(pDevObject->hDrvObject, pDevObject);
diff --git a/drivers/dsp/bridge/pmgr/wcd.c b/drivers/dsp/bridge/pmgr/wcd.c
index b92386a..237d776 100644
--- a/drivers/dsp/bridge/pmgr/wcd.c
+++ b/drivers/dsp/bridge/pmgr/wcd.c
@@ -471,8 +471,7 @@ u32 MGRWRAP_EnumNode_Info(union Trapped_Args *args, void *pr_ctxt)
 		 size);
 	cp_to_usr(args->ARGS_MGR_ENUMNODE_INFO.puNumNodes, &uNumNodes, status,
 		 1);
-	if (pNDBProps)
-		MEM_Free(pNDBProps);
+	kfree(pNDBProps);
 
 	return status;
 }
@@ -513,8 +512,7 @@ u32 MGRWRAP_EnumProc_Info(union Trapped_Args *args, void *pr_ctxt)
 		 status, size);
 	cp_to_usr(args->ARGS_MGR_ENUMPROC_INFO.puNumProcs, &uNumProcs,
 		 status, 1);
-	if (pProcessorInfo)
-		MEM_Free(pProcessorInfo);
+	kfree(pProcessorInfo);
 
 	return status;
 }
@@ -560,8 +558,7 @@ u32 MGRWRAP_RegisterObject(union Trapped_Args *args, void *pr_ctxt)
 				args->ARGS_MGR_REGISTEROBJECT.objType,
 				(char *)pszPathName);
 func_end:
-	if (pszPathName)
-		MEM_Free(pszPathName);
+	kfree(pszPathName);
 	return status;
 }
 
@@ -707,8 +704,7 @@ u32 PROCWRAP_Ctrl(union Trapped_Args *args, void *pr_ctxt)
 	}
 
 	/* cp_to_usr(args->ARGS_PROC_CTRL.pArgs, pArgs, status, 1);*/
-	if (pArgs)
-		MEM_Free(pArgs);
+	kfree(pArgs);
 func_end:
 	return status;
 }
@@ -873,8 +869,7 @@ u32 PROCWRAP_GetTrace(union Trapped_Args *args, void *pr_ctxt)
 	}
 	cp_to_usr(args->ARGS_PROC_GETTRACE.pBuf, pBuf, status,
 		 args->ARGS_PROC_GETTRACE.uMaxSize);
-	if (pBuf)
-		MEM_Free(pBuf);
+	kfree(pBuf);
 
 	return status;
 }
@@ -903,7 +898,7 @@ u32 PROCWRAP_Load(union Trapped_Args *args, void *pr_ctxt)
 
 	cp_fm_usr(argv, args->ARGS_PROC_LOAD.aArgv, status, count);
 	if (DSP_FAILED(status)) {
-		MEM_Free(argv);
+		kfree(argv);
 		argv = NULL;
 		goto func_cont;
 	}
@@ -919,7 +914,7 @@ u32 PROCWRAP_Load(union Trapped_Args *args, void *pr_ctxt)
 			if (argv[i]) {
 				cp_fm_usr(argv[i], temp, status, len);
 				if (DSP_FAILED(status)) {
-					MEM_Free(argv[i]);
+					kfree(argv[i]);
 					argv[i] = NULL;
 					goto func_cont;
 				}
@@ -945,7 +940,7 @@ u32 PROCWRAP_Load(union Trapped_Args *args, void *pr_ctxt)
 
 		cp_fm_usr(envp, args->ARGS_PROC_LOAD.aEnvp, status, count);
 		if (DSP_FAILED(status)) {
-			MEM_Free(envp);
+			kfree(envp);
 			envp = NULL;
 			goto func_cont;
 		}
@@ -959,7 +954,7 @@ u32 PROCWRAP_Load(union Trapped_Args *args, void *pr_ctxt)
 			if (envp[i]) {
 				cp_fm_usr(envp[i], temp, status, len);
 				if (DSP_FAILED(status)) {
-					MEM_Free(envp[i]);
+					kfree(envp[i]);
 					envp[i] = NULL;
 					goto func_cont;
 				}
@@ -984,17 +979,17 @@ func_cont:
 	if (envp) {
 		i = 0;
 		while (envp[i])
-			MEM_Free(envp[i++]);
+			kfree(envp[i++]);
 
-		MEM_Free(envp);
+		kfree(envp);
 	}
 
 	if (argv) {
 		count = args->ARGS_PROC_LOAD.iArgc;
 		for (i = 0; (i < count) && argv[i]; i++)
-			MEM_Free(argv[i]);
+			kfree(argv[i]);
 
-		MEM_Free(argv);
+		kfree(argv);
 	}
 
 	return status;
@@ -1185,8 +1180,7 @@ u32 NODEWRAP_Allocate(union Trapped_Args *args, void *pr_ctxt)
 		}
 	}
 func_cont:
-	if (pArgs)
-		MEM_Free(pArgs);
+	kfree(pArgs);
 
 	return status;
 }
@@ -1283,8 +1277,7 @@ u32 NODEWRAP_Connect(union Trapped_Args *args, void *pr_ctxt)
 				     pAttrs, (struct DSP_CBDATA *)pArgs);
 	}
 func_cont:
-	if (pArgs)
-		MEM_Free(pArgs);
+	kfree(pArgs);
 
 	return status;
 }
@@ -1495,8 +1488,7 @@ u32 NODEWRAP_GetUUIDProps(union Trapped_Args *args, void *pr_ctxt)
 	} else
 		status = DSP_EMEMORY;
 func_cont:
-	if (pnodeProps)
-		MEM_Free(pnodeProps);
+	kfree(pnodeProps);
 	return status;
 }
 
@@ -1527,8 +1519,7 @@ u32 STRMWRAP_AllocateBuffer(union Trapped_Args *args, void *pr_ctxt)
 				apBuffer, uNumBufs, pr_ctxt);
 		}
 	}
-	if (apBuffer)
-		MEM_Free(apBuffer);
+	kfree(apBuffer);
 
 	return status;
 }
@@ -1564,8 +1555,7 @@ u32 STRMWRAP_FreeBuffer(union Trapped_Args *args, void *pr_ctxt)
 	}
 	cp_to_usr(args->ARGS_STRM_FREEBUFFER.apBuffer, apBuffer, status,
 		 uNumBufs);
-	if (apBuffer)
-		MEM_Free(apBuffer);
+	kfree(apBuffer);
 
 	return status;
 }
diff --git a/drivers/dsp/bridge/rmgr/dbdcd.c b/drivers/dsp/bridge/rmgr/dbdcd.c
index caa57f1..9efb7dc 100644
--- a/drivers/dsp/bridge/rmgr/dbdcd.c
+++ b/drivers/dsp/bridge/rmgr/dbdcd.c
@@ -563,13 +563,12 @@ DSP_STATUS DCD_GetObjectDef(IN struct DCD_MANAGER *hDcdMgr,
 	}
 
 	/* Free the previously allocated dynamic buffer. */
-	MEM_Free(pszCoffBuf);
+	kfree(pszCoffBuf);
 func_end:
 	if (lib)
 		COD_Close(lib);
 
-	if (szUuid)
-		MEM_Free(szUuid);
+	kfree(szUuid);
 
 	return status;
 }
@@ -690,7 +689,7 @@ DSP_STATUS DCD_GetObjects(IN struct DCD_MANAGER *hDcdMgr, IN char *pszCoffPath,
 	}
 
 	/* Free the previously allocated dynamic buffer. */
-	MEM_Free(pszCoffBuf);
+	kfree(pszCoffBuf);
 func_cont:
 	if (lib)
 		COD_Close(lib);
@@ -1514,11 +1513,9 @@ func_cont:
 		COD_Close(lib);
 
 	/* Free previously allocated dynamic buffers. */
-	if (pszFileName)
-		MEM_Free(pszFileName);
+	kfree(pszFileName);
 
-	if (pszCoffBuf)
-		MEM_Free(pszCoffBuf);
+	kfree(pszCoffBuf);
 
 	return status;
 }
diff --git a/drivers/dsp/bridge/rmgr/disp.c b/drivers/dsp/bridge/rmgr/disp.c
index 949c5e3..e53b11f 100644
--- a/drivers/dsp/bridge/rmgr/disp.c
+++ b/drivers/dsp/bridge/rmgr/disp.c
@@ -726,8 +726,7 @@ static void DeleteDisp(struct DISP_OBJECT *hDisp)
 					 status);
 			}
 		}
-		if (hDisp->pBuf)
-			MEM_Free(hDisp->pBuf);
+		kfree(hDisp->pBuf);
 
 		MEM_FreeObject(hDisp);
 	}
diff --git a/drivers/dsp/bridge/rmgr/drv.c b/drivers/dsp/bridge/rmgr/drv.c
index c69e3af..de60fdf 100644
--- a/drivers/dsp/bridge/rmgr/drv.c
+++ b/drivers/dsp/bridge/rmgr/drv.c
@@ -155,7 +155,7 @@ DSP_STATUS DRV_RemoveNodeResElement(HANDLE hNodeRes, HANDLE hPCtxt)
 			return DSP_ENOTFOUND;
 		pTempNode->next = pNodeRes->next;
 	}
-	MEM_Free(pNodeRes);
+	kfree(pNodeRes);
 	return DSP_SOK;
 }
 
@@ -260,7 +260,7 @@ DSP_STATUS DRV_RemoveDMMResElement(HANDLE hDMMRes, HANDLE hPCtxt)
 			return DSP_ENOTFOUND;
 		pTempDMMRes->next = pDMMRes->next;
 	}
-	MEM_Free(pDMMRes);
+	kfree(pDMMRes);
 	return DSP_SOK;
 }
 
@@ -328,7 +328,7 @@ DSP_STATUS DRV_RemoveAllDMMResElements(HANDLE hPCtxt)
 	while (pTempDMMRes != NULL) {
 		pTempDMMRes2 = pTempDMMRes;
 		pTempDMMRes = pTempDMMRes->next;
-		MEM_Free(pTempDMMRes2);
+		kfree(pTempDMMRes2);
 	}
 	pCtxt->pDMMList = NULL;
 	return status;
@@ -391,7 +391,7 @@ DSP_STATUS 	DRV_RemoveAllNodeResElements(HANDLE hPCtxt)
 	while (pTempNode != NULL) {
 		pTempNode2 = pTempNode;
 		pTempNode = pTempNode->next;
-		MEM_Free(pTempNode2);
+		kfree(pTempNode2);
 	}
 	pCtxt->pNodeList = NULL;
 	return status;
@@ -481,7 +481,7 @@ DSP_STATUS 	DRV_ProcRemoveSTRMResElement(HANDLE hSTRMRes, HANDLE hPCtxt)
 		pTempSTRMRes->next = pSTRMRes->next;
 	}
 
-	MEM_Free(pSTRMRes);
+	kfree(pSTRMRes);
 	return DSP_SOK;
 }
 
@@ -510,7 +510,7 @@ static DSP_STATUS  DRV_ProcFreeSTRMRes(HANDLE hPCtxt)
 					    sizeof(u8 *)), MEM_NONPAGED);
 			status = STRM_FreeBuffer(pSTRMRes->hStream, apBuffer,
 						pSTRMRes->uNumBufs, pCtxt);
-			MEM_Free(apBuffer);
+			kfree(apBuffer);
 		}
 		status = STRM_Close(pSTRMRes->hStream, pCtxt);
 		if (DSP_FAILED(status)) {
@@ -544,7 +544,7 @@ DSP_STATUS	DRV_RemoveAllSTRMResElements(HANDLE hPCtxt)
 	while (pTempSTRMRes != NULL) {
 		pTempSTRMRes2 = pTempSTRMRes;
 		pTempSTRMRes = pTempSTRMRes->next;
-		MEM_Free(pTempSTRMRes2);
+		kfree(pTempSTRMRes2);
 	}
 	pCtxt->pSTRMList = NULL;
 	return status;
@@ -643,7 +643,7 @@ DSP_STATUS DRV_Create(OUT struct DRV_OBJECT **phDRVObject)
 		*phDRVObject = pDRVObject;
 	} else {
 		/* Free the DRV Object */
-		MEM_Free(pDRVObject);
+		kfree(pDRVObject);
 		GT_0trace(curTrace, GT_7CLASS,
 			 "Failed to update the Registry with "
 				 "DRV Object ");
@@ -693,14 +693,8 @@ DSP_STATUS DRV_Destroy(struct DRV_OBJECT *hDRVObject)
 	 *  as the DRV_RemoveDevObject and the Last DRV_RequestResources
 	 *  removes the list if the lists are empty.
 	 */
-	if (pDRVObject->devList) {
-		/* Could assert if the list is not empty  */
-		MEM_Free(pDRVObject->devList);
-	}
-	if (pDRVObject->devNodeString) {
-		/* Could assert if the list is not empty */
-		MEM_Free(pDRVObject->devNodeString);
-	}
+	kfree(pDRVObject->devList);
+	kfree(pDRVObject->devNodeString);
 	MEM_FreeObject(pDRVObject);
 	/* Update the DRV Object in Registry to be 0 */
 	(void)CFG_SetObject(0, REG_DRV_OBJECT);
@@ -939,7 +933,7 @@ DSP_STATUS DRV_RemoveDevObject(struct DRV_OBJECT *hDRVObject,
 	}
 	/* Remove list if empty. */
 	if (LST_IsEmpty(pDRVObject->devList)) {
-		MEM_Free(pDRVObject->devList);
+		kfree(pDRVObject->devList);
 		pDRVObject->devList = NULL;
 	}
 	DBC_Ensure((pDRVObject->devList == NULL) ||
@@ -1055,12 +1049,12 @@ DSP_STATUS DRV_ReleaseResources(u32 dwContext, struct DRV_OBJECT *hDrvObject)
 			/* Delete from the Driver object list */
 			LST_RemoveElem(pDRVObject->devNodeString,
 				      (struct list_head *)pszdevNode);
-			MEM_Free((void *) pszdevNode);
+			kfree((void *) pszdevNode);
 			break;
 		}
 		/* Delete the List if it is empty */
 		if (LST_IsEmpty(pDRVObject->devNodeString)) {
-			MEM_Free(pDRVObject->devNodeString);
+			kfree(pDRVObject->devNodeString);
 			pDRVObject->devNodeString = NULL;
 		}
 	}
@@ -1162,7 +1156,7 @@ static DSP_STATUS RequestBridgeResources(u32 dwContext, s32 bRequest)
 			status = REG_SetValue(CURRENTCONFIG, (u8 *)pResources,
 				 (u32)dwBuffSize);
 			/*  Set all the other entries to NULL */
-			MEM_Free(pResources);
+			kfree(pResources);
 		} else {
 			status = DSP_EMEMORY;
 		}
@@ -1223,7 +1217,7 @@ static DSP_STATUS RequestBridgeResources(u32 dwContext, s32 bRequest)
 				 " Failed to set the registry "
 				 "value for CURRENTCONFIG\n");
 		}
-		MEM_Free(pResources);
+		kfree(pResources);
 	}
 	/* End Mem alloc */
 	return status;
@@ -1346,7 +1340,7 @@ static DSP_STATUS RequestBridgeResourcesDSP(u32 dwContext, s32 bRequest)
 					 " for CURRENTCONFIG\n");
 			}
 		}
-		MEM_Free(pResources);
+		kfree(pResources);
 	}
 	/* End Mem alloc */
 	return status;
diff --git a/drivers/dsp/bridge/rmgr/drv_interface.c b/drivers/dsp/bridge/rmgr/drv_interface.c
index c9849d3..9b95653 100644
--- a/drivers/dsp/bridge/rmgr/drv_interface.c
+++ b/drivers/dsp/bridge/rmgr/drv_interface.c
@@ -547,7 +547,7 @@ static int bridge_release(struct inode *ip, struct file *filp)
 	flush_signals(current);
 	DRV_RemoveAllResources(pr_ctxt);
 	PROC_Detach(pr_ctxt);
-	MEM_Free(pr_ctxt);
+	kfree(pr_ctxt);
 
 	filp->private_data = NULL;
 
diff --git a/drivers/dsp/bridge/rmgr/nldr.c b/drivers/dsp/bridge/rmgr/nldr.c
index bdf7622..8422a2b 100644
--- a/drivers/dsp/bridge/rmgr/nldr.c
+++ b/drivers/dsp/bridge/rmgr/nldr.c
@@ -589,11 +589,9 @@ DSP_STATUS NLDR_Create(OUT struct NLDR_OBJECT **phNldr,
 		pNldr->writeFxn = pAttrs->pfnWrite;
 		pNldr->dbllAttrs = newAttrs;
 	}
-	if (rmmSegs)
-		MEM_Free(rmmSegs);
+	kfree(rmmSegs);
 
-	if (pszCoffBuf)
-		MEM_Free(pszCoffBuf);
+	kfree(pszCoffBuf);
 
 	/* Get overlay nodes */
 	if (DSP_SUCCEEDED(status)) {
@@ -656,8 +654,7 @@ void NLDR_Delete(struct NLDR_OBJECT *hNldr)
 	if (hNldr->rmm)
 		RMM_delete(hNldr->rmm);
 
-	if (hNldr->segTable)
-		MEM_Free(hNldr->segTable);
+	kfree(hNldr->segTable);
 
 	if (hNldr->hDcdMgr)
 		DCD_DestroyManager(hNldr->hDcdMgr);
@@ -668,29 +665,29 @@ void NLDR_Delete(struct NLDR_OBJECT *hNldr)
 			pSect = hNldr->ovlyTable[i].pCreateSects;
 			while (pSect) {
 				pNext = pSect->pNextSect;
-				MEM_Free(pSect);
+				kfree(pSect);
 				pSect = pNext;
 			}
 			pSect = hNldr->ovlyTable[i].pDeleteSects;
 			while (pSect) {
 				pNext = pSect->pNextSect;
-				MEM_Free(pSect);
+				kfree(pSect);
 				pSect = pNext;
 			}
 			pSect = hNldr->ovlyTable[i].pExecuteSects;
 			while (pSect) {
 				pNext = pSect->pNextSect;
-				MEM_Free(pSect);
+				kfree(pSect);
 				pSect = pNext;
 			}
 			pSect = hNldr->ovlyTable[i].pOtherSects;
 			while (pSect) {
 				pNext = pSect->pNextSect;
-				MEM_Free(pSect);
+				kfree(pSect);
 				pSect = pNext;
 			}
 		}
-		MEM_Free(hNldr->ovlyTable);
+		kfree(hNldr->ovlyTable);
 	}
 	MEM_FreeObject(hNldr);
 	DBC_Ensure(!MEM_IsValidHandle(hNldr, NLDR_SIGNATURE));
@@ -1088,17 +1085,13 @@ static DSP_STATUS AddOvlyNode(struct DSP_UUID *pUuid,
 		}
 	}
 	/* These were allocated in DCD_GetObjectDef */
-	if (objDef.objData.nodeObj.pstrCreatePhaseFxn)
-		MEM_Free(objDef.objData.nodeObj.pstrCreatePhaseFxn);
+	kfree(objDef.objData.nodeObj.pstrCreatePhaseFxn);
 
-	if (objDef.objData.nodeObj.pstrExecutePhaseFxn)
-		MEM_Free(objDef.objData.nodeObj.pstrExecutePhaseFxn);
+	kfree(objDef.objData.nodeObj.pstrExecutePhaseFxn);
 
-	if (objDef.objData.nodeObj.pstrDeletePhaseFxn)
-		MEM_Free(objDef.objData.nodeObj.pstrDeletePhaseFxn);
+	kfree(objDef.objData.nodeObj.pstrDeletePhaseFxn);
 
-	if (objDef.objData.nodeObj.pstrIAlgName)
-		MEM_Free(objDef.objData.nodeObj.pstrIAlgName);
+	kfree(objDef.objData.nodeObj.pstrIAlgName);
 
 func_end:
 	return status;
@@ -1317,8 +1310,7 @@ static DSP_STATUS LoadLib(struct NLDR_NODEOBJECT *hNldrNode,
 			 DBLL_NOLOAD, &root->lib);
 	}
 	/* Done with file name */
-	if (pszFileName)
-		MEM_Free(pszFileName);
+	kfree(pszFileName);
 
 	/* Check to see if library not already loaded */
 	if (DSP_SUCCEEDED(status) && rootPersistent) {
@@ -1467,15 +1459,11 @@ static DSP_STATUS LoadLib(struct NLDR_NODEOBJECT *hNldrNode,
 	/* Going up one node in the dependency tree */
 	depth--;
 
-	if (depLibUUIDs) {
-		MEM_Free(depLibUUIDs);
-		depLibUUIDs = NULL;
-	}
+	kfree(depLibUUIDs);
+	depLibUUIDs = NULL;
 
-	if (persistentDepLibs) {
-		MEM_Free(persistentDepLibs);
-		persistentDepLibs = NULL;
-	}
+	kfree(persistentDepLibs);
+	persistentDepLibs = NULL;
 
 	return status;
 }
@@ -1796,10 +1784,8 @@ static void UnloadLib(struct NLDR_NODEOBJECT *hNldrNode, struct LibNode *root)
 	}
 
 	/* Free dependent library list */
-	if (root->pDepLibs) {
-		MEM_Free(root->pDepLibs);
-		root->pDepLibs = NULL;
-	}
+	kfree(root->pDepLibs);
+	root->pDepLibs = NULL;
 }
 
 /*
diff --git a/drivers/dsp/bridge/rmgr/node.c b/drivers/dsp/bridge/rmgr/node.c
index 5cbe161..9bce069 100644
--- a/drivers/dsp/bridge/rmgr/node.c
+++ b/drivers/dsp/bridge/rmgr/node.c
@@ -1014,11 +1014,9 @@ DSP_STATUS NODE_Connect(struct NODE_OBJECT *hNode1, u32 uStream1,
 			if (pOutput->szDevice == NULL ||
 			   pInput->szDevice == NULL) {
 				/* Undo the connection */
-				if (pOutput->szDevice)
-					MEM_Free(pOutput->szDevice);
+				kfree(pOutput->szDevice);
 
-				if (pInput->szDevice)
-					MEM_Free(pInput->szDevice);
+				kfree(pInput->szDevice);
 
 				pOutput->szDevice = NULL;
 				pInput->szDevice = NULL;
@@ -2684,8 +2682,7 @@ static void DeleteNode(struct NODE_OBJECT *hNode,
 	nodeType = NODE_GetType(hNode);
 	if (nodeType != NODE_DEVICE) {
 		msgArgs = hNode->createArgs.asa.msgArgs;
-		if (msgArgs.pData)
-			MEM_Free(msgArgs.pData);
+		kfree(msgArgs.pData);
 
 		/* Free MSG queue */
 		if (hNode->hMsgQueue) {
@@ -2702,7 +2699,7 @@ static void DeleteNode(struct NODE_OBJECT *hNode,
 				stream = hNode->inputs[i];
 				FreeStream(hNodeMgr, stream);
 			}
-			MEM_Free(hNode->inputs);
+			kfree(hNode->inputs);
 			hNode->inputs = NULL;
 		}
 		if (hNode->outputs) {
@@ -2710,30 +2707,24 @@ static void DeleteNode(struct NODE_OBJECT *hNode,
 				stream = hNode->outputs[i];
 				FreeStream(hNodeMgr, stream);
 			}
-			MEM_Free(hNode->outputs);
+			kfree(hNode->outputs);
 			hNode->outputs = NULL;
 		}
 		taskArgs = hNode->createArgs.asa.taskArgs;
 		if (taskArgs.strmInDef) {
 			for (i = 0; i < MaxInputs(hNode); i++) {
-				if (taskArgs.strmInDef[i].szDevice) {
-					MEM_Free(taskArgs.strmInDef[i].
-						szDevice);
-					taskArgs.strmInDef[i].szDevice = NULL;
-				}
+				kfree(taskArgs.strmInDef[i].szDevice);
+				taskArgs.strmInDef[i].szDevice = NULL;
 			}
-			MEM_Free(taskArgs.strmInDef);
+			kfree(taskArgs.strmInDef);
 			taskArgs.strmInDef = NULL;
 		}
 		if (taskArgs.strmOutDef) {
 			for (i = 0; i < MaxOutputs(hNode); i++) {
-				if (taskArgs.strmOutDef[i].szDevice) {
-					MEM_Free(taskArgs.strmOutDef[i].
-						szDevice);
-					taskArgs.strmOutDef[i].szDevice = NULL;
-				}
+				kfree(taskArgs.strmOutDef[i].szDevice);
+				taskArgs.strmOutDef[i].szDevice = NULL;
 			}
-			MEM_Free(taskArgs.strmOutDef);
+			kfree(taskArgs.strmOutDef);
 			taskArgs.strmOutDef = NULL;
 		}
 		if (taskArgs.uDSPHeapResAddr) {
@@ -2768,15 +2759,11 @@ static void DeleteNode(struct NODE_OBJECT *hNode,
 		}
 	}
 	if (nodeType != NODE_MESSAGE) {
-		if (hNode->streamConnect) {
-			MEM_Free(hNode->streamConnect);
-			hNode->streamConnect = NULL;
-		}
-	}
-	if (hNode->pstrDevName) {
-		MEM_Free(hNode->pstrDevName);
-		hNode->pstrDevName = NULL;
+		kfree(hNode->streamConnect);
+		hNode->streamConnect = NULL;
 	}
+	kfree(hNode->pstrDevName);
+	hNode->pstrDevName = NULL;
 
 	if (hNode->hNtfy) {
 		NTFY_Delete(hNode->hNtfy);
@@ -2784,25 +2771,17 @@ static void DeleteNode(struct NODE_OBJECT *hNode,
 	}
 
 	/* These were allocated in DCD_GetObjectDef (via NODE_Allocate) */
-	if (hNode->dcdProps.objData.nodeObj.pstrCreatePhaseFxn) {
-		MEM_Free(hNode->dcdProps.objData.nodeObj.pstrCreatePhaseFxn);
-		hNode->dcdProps.objData.nodeObj.pstrCreatePhaseFxn = NULL;
-	}
+	kfree(hNode->dcdProps.objData.nodeObj.pstrCreatePhaseFxn);
+	hNode->dcdProps.objData.nodeObj.pstrCreatePhaseFxn = NULL;
 
-	if (hNode->dcdProps.objData.nodeObj.pstrExecutePhaseFxn) {
-		MEM_Free(hNode->dcdProps.objData.nodeObj.pstrExecutePhaseFxn);
-		hNode->dcdProps.objData.nodeObj.pstrExecutePhaseFxn = NULL;
-	}
+	kfree(hNode->dcdProps.objData.nodeObj.pstrExecutePhaseFxn);
+	hNode->dcdProps.objData.nodeObj.pstrExecutePhaseFxn = NULL;
 
-	if (hNode->dcdProps.objData.nodeObj.pstrDeletePhaseFxn) {
-		MEM_Free(hNode->dcdProps.objData.nodeObj.pstrDeletePhaseFxn);
-		hNode->dcdProps.objData.nodeObj.pstrDeletePhaseFxn = NULL;
-	}
+	kfree(hNode->dcdProps.objData.nodeObj.pstrDeletePhaseFxn);
+	hNode->dcdProps.objData.nodeObj.pstrDeletePhaseFxn = NULL;
 
-	if (hNode->dcdProps.objData.nodeObj.pstrIAlgName) {
-		MEM_Free(hNode->dcdProps.objData.nodeObj.pstrIAlgName);
-		hNode->dcdProps.objData.nodeObj.pstrIAlgName = NULL;
-	}
+	kfree(hNode->dcdProps.objData.nodeObj.pstrIAlgName);
+	hNode->dcdProps.objData.nodeObj.pstrIAlgName = NULL;
 
 	/* Free all SM address translator resources */
 	if (hXlator) {
@@ -2810,10 +2789,8 @@ static void DeleteNode(struct NODE_OBJECT *hNode,
 		hXlator = NULL;
 	}
 
-	if (hNode->hNldrNode) {
-		MEM_Free(hNode->hNldrNode);
-		hNode->hNldrNode = NULL;
-	}
+	kfree(hNode->hNldrNode);
+	hNode->hNldrNode = NULL;
 	hNode->hNodeMgr = NULL;
 	MEM_FreeObject(hNode);
 	hNode = NULL;
@@ -2843,7 +2820,7 @@ static void DeleteNodeMgr(struct NODE_MGR *hNodeMgr)
 					DeleteNode(hNode, NULL);
 
 			DBC_Assert(LST_IsEmpty(hNodeMgr->nodeList));
-			MEM_Free(hNodeMgr->nodeList);
+			kfree(hNodeMgr->nodeList);
 		}
 		if (hNodeMgr->hNtfy)
 			NTFY_Delete(hNodeMgr->hNtfy);
@@ -3267,17 +3244,13 @@ DSP_STATUS NODE_GetUUIDProps(DSP_HPROCESSOR hProcessor,
 				(struct DCD_GENERICOBJ *) &dcdNodeProps);
 		if (DSP_SUCCEEDED(status)) {
 			*pNodeProps = dcdNodeProps.ndbProps;
-			if (dcdNodeProps.pstrCreatePhaseFxn)
-				MEM_Free(dcdNodeProps.pstrCreatePhaseFxn);
+			kfree(dcdNodeProps.pstrCreatePhaseFxn);
 
-			if (dcdNodeProps.pstrExecutePhaseFxn)
-				MEM_Free(dcdNodeProps.pstrExecutePhaseFxn);
+			kfree(dcdNodeProps.pstrExecutePhaseFxn);
 
-			if (dcdNodeProps.pstrDeletePhaseFxn)
-				MEM_Free(dcdNodeProps.pstrDeletePhaseFxn);
+			kfree(dcdNodeProps.pstrDeletePhaseFxn);
 
-			if (dcdNodeProps.pstrIAlgName)
-				MEM_Free(dcdNodeProps.pstrIAlgName);
+			kfree(dcdNodeProps.pstrIAlgName);
 		}
 		/*  Leave the critical section, we're done.  */
 		(void)SYNC_LeaveCS(hNodeMgr->hSync);
diff --git a/drivers/dsp/bridge/rmgr/proc.c b/drivers/dsp/bridge/rmgr/proc.c
index 491661f..e83e3da 100644
--- a/drivers/dsp/bridge/rmgr/proc.c
+++ b/drivers/dsp/bridge/rmgr/proc.c
@@ -506,10 +506,8 @@ DSP_STATUS PROC_Detach(struct PROCESS_CONTEXT *pr_ctxt)
 		if (pProcObject->hNtfy)
 			NTFY_Delete(pProcObject->hNtfy);
 
-		if (pProcObject->g_pszLastCoff) {
-			MEM_Free(pProcObject->g_pszLastCoff);
-			pProcObject->g_pszLastCoff = NULL;
-		}
+		kfree(pProcObject->g_pszLastCoff);
+		pProcObject->g_pszLastCoff = NULL;
 		/* Remove the Proc from the DEV List */
 		(void)DEV_RemoveProcObject(pProcObject->hDevObject,
 			(u32)pProcObject);
@@ -1038,7 +1036,7 @@ DSP_STATUS PROC_Load(DSP_HPROCESSOR hProcessor, IN CONST s32 iArgc,
 					/* Regardless of auto unregister status,
 					 *  free previously allocated
 					 *  memory.  */
-					MEM_Free(pProcObject->g_pszLastCoff);
+					kfree(pProcObject->g_pszLastCoff);
 					pProcObject->g_pszLastCoff = NULL;
 				}
 			}
@@ -1200,7 +1198,7 @@ DSP_STATUS PROC_Load(DSP_HPROCESSOR hProcessor, IN CONST s32 iArgc,
 		}
 	}
 	/* Restore the original argv[0] */
-	MEM_Free(newEnvp);
+	kfree(newEnvp);
 	aArgv[0] = pargv0;
 #ifdef CONFIG_BRIDGE_DEBUG
 	if (DSP_SUCCEEDED(status)) {
diff --git a/drivers/dsp/bridge/rmgr/rmm.c b/drivers/dsp/bridge/rmgr/rmm.c
index 5c484bc..fd61220 100644
--- a/drivers/dsp/bridge/rmgr/rmm.c
+++ b/drivers/dsp/bridge/rmgr/rmm.c
@@ -295,16 +295,15 @@ void RMM_delete(struct RMM_TargetObj *target)
 
 	GT_1trace(RMM_debugMask, GT_ENTER, "RMM_delete(0x%lx)\n", target);
 
-	if (target->segTab != NULL)
-		MEM_Free(target->segTab);
+	kfree(target->segTab);
 
 	if (target->ovlyList) {
 		while ((pSect = (struct RMM_OvlySect *)LST_GetHead
 		      (target->ovlyList))) {
-			MEM_Free(pSect);
+			kfree(pSect);
 		}
 		DBC_Assert(LST_IsEmpty(target->ovlyList));
-		MEM_Free(target->ovlyList);
+		kfree(target->ovlyList);
 	}
 
 	if (target->freeList != NULL) {
@@ -314,10 +313,10 @@ void RMM_delete(struct RMM_TargetObj *target)
 			while (next) {
 				hptr = next;
 				next = hptr->next;
-				MEM_Free(hptr);
+				kfree(hptr);
 			}
 		}
-		MEM_Free(target->freeList);
+		kfree(target->freeList);
 	}
 
 	MEM_FreeObject(target);
@@ -375,7 +374,7 @@ bool RMM_free(struct RMM_TargetObj *target, u32 segid, u32 addr, u32 size,
 				/* Remove from list */
 				LST_RemoveElem(target->ovlyList,
 					      (struct list_head *)sect);
-				MEM_Free(sect);
+				kfree(sect);
 				break;
 			}
 			sect = (struct RMM_OvlySect *)LST_Next(target->ovlyList,
@@ -494,7 +493,7 @@ static bool allocBlock(struct RMM_TargetObj *target, u32 segid, u32 size,
 		if (hsize >= allocsize) {	/* big enough */
 			if (hsize == allocsize && prevhead != NULL) {
 				prevhead->next = next;
-				MEM_Free(head);
+				kfree(head);
 			} else {
 				head->size = hsize - allocsize;
 				head->addr += allocsize;
@@ -563,7 +562,7 @@ static bool freeBlock(struct RMM_TargetObj *target, u32 segid, u32 addr,
 			head->next = rhead->next;
 			thead->size = size + thead->size;
 			thead->addr = addr;
-			MEM_Free(rhead);
+			kfree(rhead);
 			rhead = thead;
 		}
 
@@ -571,7 +570,7 @@ static bool freeBlock(struct RMM_TargetObj *target, u32 segid, u32 addr,
 		if ((head->addr + head->size) == rhead->addr) {
 			head->next = rhead->next;
 			head->size = head->size + rhead->size;
-			MEM_Free(rhead);
+			kfree(rhead);
 		}
 	}
 
diff --git a/drivers/dsp/bridge/rmgr/strm.c b/drivers/dsp/bridge/rmgr/strm.c
index febb6c2..cb31386 100644
--- a/drivers/dsp/bridge/rmgr/strm.c
+++ b/drivers/dsp/bridge/rmgr/strm.c
@@ -884,8 +884,7 @@ DSP_STATUS STRM_Select(IN struct STRM_OBJECT **aStrmTab, u32 nStrms,
 		}
 	}
 func_end:
-	if (hSyncEvents)
-		MEM_Free(hSyncEvents);
+	kfree(hSyncEvents);
 
 	DBC_Ensure((DSP_SUCCEEDED(status) && (*pMask != 0 || uTimeout == 0)) ||
 		  (DSP_FAILED(status) && *pMask == 0));
diff --git a/drivers/dsp/bridge/services/mem.c b/drivers/dsp/bridge/services/mem.c
index c4b1fe1..614396e 100644
--- a/drivers/dsp/bridge/services/mem.c
+++ b/drivers/dsp/bridge/services/mem.c
@@ -309,23 +309,6 @@ void MEM_VFree(IN void *pMemBuf)
 }
 
 /*
- *  ======== MEM_Free ========
- *  Purpose:
- *      Free the given block of system memory.
- */
-void MEM_Free(IN void *pMemBuf)
-{
-	DBC_Require(pMemBuf != NULL);
-
-	GT_1trace(MEM_debugMask, GT_ENTER, "MEM_Free: pMemBufs 0x%x\n",
-		  pMemBuf);
-
-	if (pMemBuf) {
-		kfree(pMemBuf);
-	}
-}
-
-/*
  *  ======== MEM_FreePhysMem ========
  *  Purpose:
  *      Free the given block of physically contiguous memory.
diff --git a/drivers/dsp/bridge/services/ntfy.c b/drivers/dsp/bridge/services/ntfy.c
index 539cbae..53a6974 100644
--- a/drivers/dsp/bridge/services/ntfy.c
+++ b/drivers/dsp/bridge/services/ntfy.c
@@ -133,7 +133,7 @@ void NTFY_Delete(struct NTFY_OBJECT *hNtfy)
 			DeleteNotify(pNotify);
 		}
 		DBC_Assert(LST_IsEmpty(hNtfy->notifyList));
-		MEM_Free(hNtfy->notifyList);
+		kfree(hNtfy->notifyList);
 	}
 	if (hNtfy->hSync)
 		(void)SYNC_DeleteCS(hNtfy->hSync);
@@ -299,9 +299,8 @@ static void DeleteNotify(struct NOTIFICATION *pNotify)
 	if (pNotify->hSync)
 		(void) SYNC_CloseEvent(pNotify->hSync);
 
-	if (pNotify->pstrName)
-		MEM_Free(pNotify->pstrName);
+	kfree(pNotify->pstrName);
 
-	MEM_Free(pNotify);
+	kfree(pNotify);
 }
 
diff --git a/drivers/dsp/bridge/services/regsup.c b/drivers/dsp/bridge/services/regsup.c
index 19700a4..0c77fb2 100644
--- a/drivers/dsp/bridge/services/regsup.c
+++ b/drivers/dsp/bridge/services/regsup.c
@@ -72,8 +72,8 @@ void regsupExit(void)
 	while (!LST_IsEmpty(pRegKey)) {
 		rv = (struct RegValue *) LST_GetHead(pRegKey);
 
-		MEM_Free(rv->pData);
-		MEM_Free(rv);
+		kfree(rv->pData);
+		kfree(rv);
 	}
 }
 
@@ -135,7 +135,7 @@ DSP_STATUS regsupSetValue(char *valName, void *pBuf, u32 dataSize)
 			/*  Make sure the new data size is the same.  */
 			if (dataSize != rv->dataSize) {
 				/*  The caller needs a different data size!  */
-				MEM_Free(rv->pData);
+				kfree(rv->pData);
 				rv->pData = MEM_Alloc(dataSize, MEM_NONPAGED);
 				if (rv->pData == NULL)
 					break;
@@ -238,8 +238,8 @@ DSP_STATUS regsupDeleteValue(IN CONST char *pstrValue)
 			 * key.
 			 */
 			LST_RemoveElem(pRegKey, (struct list_head *)rv);
-			MEM_Free(rv->pData);
-			MEM_Free(rv);
+			kfree(rv->pData);
+			kfree(rv);
 
 			/*  Set our status to good and exit...  */
 			retVal = DSP_SOK;
diff --git a/drivers/dsp/bridge/services/sync.c b/drivers/dsp/bridge/services/sync.c
index 8ff35f2..7fb5553 100644
--- a/drivers/dsp/bridge/services/sync.c
+++ b/drivers/dsp/bridge/services/sync.c
@@ -375,8 +375,7 @@ DSP_STATUS SYNC_WaitOnMultipleEvents(struct SYNC_OBJECT **hSyncEvents,
 			  "SYNC:Signaling Event NULL!!!(:-\n");
 		status = DSP_ETIMEOUT;
 	}
-	if (Wp)
-		MEM_Free(Wp);
+	kfree(Wp);
 	return status;
 }
 
diff --git a/drivers/dsp/bridge/wmd/chnl_sm.c b/drivers/dsp/bridge/wmd/chnl_sm.c
index 99c876d..d6e2675 100644
--- a/drivers/dsp/bridge/wmd/chnl_sm.c
+++ b/drivers/dsp/bridge/wmd/chnl_sm.c
@@ -159,7 +159,7 @@ DSP_STATUS WMD_CHNL_AddIOReq(struct CHNL_OBJECT *hChnl, void *pHostBuf,
 					 "Error copying user buffer to "
 					 "kernel, %d bytes remaining.\n",
 					 status);
-				MEM_Free(pHostSysBuf);
+				kfree(pHostSysBuf);
 				pHostSysBuf = NULL;
 				status = DSP_EPOINTER;
 				goto func_end;
@@ -466,8 +466,7 @@ DSP_STATUS WMD_CHNL_Destroy(struct CHNL_MGR *hChnlMgr)
 			SYNC_DeleteCS(pChnlMgr->hCSObj);
 
 		/* Free channel manager object: */
-		if (pChnlMgr->apChannel)
-			MEM_Free(pChnlMgr->apChannel);
+		kfree(pChnlMgr->apChannel);
 
 		/* Set hChnlMgr to NULL in device object. */
 		DEV_SetChnlMgr(pChnlMgr->hDevObject, NULL);
@@ -713,7 +712,7 @@ DSP_STATUS WMD_CHNL_GetIOC(struct CHNL_OBJECT *hChnl, u32 dwTimeOut,
 			status = DSP_EPOINTER;
 		}
 func_cont1:
-		MEM_Free(pHostSysBuf);
+		kfree(pHostSysBuf);
 	}
 func_cont:
 	/* Update User's IOC block: */
@@ -972,9 +971,9 @@ static void FreeChirpList(struct LST_LIST *pChirpList)
 	DBC_Require(pChirpList != NULL);
 
 	while (!LST_IsEmpty(pChirpList))
-		MEM_Free(LST_GetHead(pChirpList));
+		kfree(LST_GetHead(pChirpList));
 
-	MEM_Free(pChirpList);
+	kfree(pChirpList);
 }
 
 /*
diff --git a/drivers/dsp/bridge/wmd/io_sm.c b/drivers/dsp/bridge/wmd/io_sm.c
index 39b37a6..a25cfd6 100644
--- a/drivers/dsp/bridge/wmd/io_sm.c
+++ b/drivers/dsp/bridge/wmd/io_sm.c
@@ -323,8 +323,7 @@ DSP_STATUS WMD_IO_Destroy(struct IO_MGR *hIOMgr)
 		DBG_Trace(GT_2CLASS, "DPC_Destroy: SUCCESS\n");
 
 #ifndef DSP_TRACEBUF_DISABLED
-		if (hIOMgr->pMsg)
-			MEM_Free(hIOMgr->pMsg);
+		kfree(hIOMgr->pMsg);
 #endif
 		SYNC_DeleteCS(hIOMgr->hCSObj); 	/* Leak Fix. */
 		/* Free this IO manager object */
@@ -816,8 +815,7 @@ DSP_STATUS WMD_IO_OnLoaded(struct IO_MGR *hIOMgr)
 	hIOMgr->ulTraceBufferCurrent = (ulGppVa + ulSeg1Size + ulPadSize) +
 				(hIOMgr->ulTraceBufferCurrent - ulDspVa);
 	/* Calculate the size of trace buffer */
-	if (hIOMgr->pMsg)
-		MEM_Free(hIOMgr->pMsg);
+	kfree(hIOMgr->pMsg);
 	hIOMgr->pMsg = MEM_Alloc(((hIOMgr->ulTraceBufferEnd -
 				hIOMgr->ulTraceBufferBegin) *
 				hIOMgr->uWordSize) + 2, MEM_NONPAGED);
@@ -1994,7 +1992,7 @@ static DSP_STATUS PackTraceBuffer(char *lpBuf, u32 nBytes, u32 ulNumWords)
 		strncpy(lpBufStart, lpTmpStart, nBytes);
 		/* Make sure output is null terminated */
 		lpBufStart[nBytes - 1] = '\0';
-		MEM_Free(lpTmpStart);
+		kfree(lpTmpStart);
 	}
 
 	return status;
@@ -2101,8 +2099,8 @@ DSP_STATUS PrintDspTraceBuffer(struct WMD_DEV_CONTEXT *hWmdContext)
 				GT_1trace(dsp_trace_mask, GT_1CLASS,
 					"DSP Trace Buffer:\n%s\n", pszBuf);
 			}
-			MEM_Free(pszBuf);
-			MEM_Free(lpszBuf);
+			kfree(pszBuf);
+			kfree(lpszBuf);
 		} else {
 			  GT_0trace(dsp_trace_mask, GT_2CLASS,
 				"PrintDspTraceBuffer: Failed to "
diff --git a/drivers/dsp/bridge/wmd/msg_sm.c b/drivers/dsp/bridge/wmd/msg_sm.c
index 50201e5..e9e47bf 100644
--- a/drivers/dsp/bridge/wmd/msg_sm.c
+++ b/drivers/dsp/bridge/wmd/msg_sm.c
@@ -559,7 +559,7 @@ static void DeleteMsgMgr(struct MSG_MGR *hMsgMgr)
 
 	if (hMsgMgr->queueList) {
 		if (LST_IsEmpty(hMsgMgr->queueList)) {
-			MEM_Free(hMsgMgr->queueList);
+			kfree(hMsgMgr->queueList);
 			hMsgMgr->queueList = NULL;
 		}
 	}
@@ -606,7 +606,7 @@ static void DeleteMsgQueue(struct MSG_QUEUE *hMsgQueue, u32 uNumToDSP)
 		if (!LST_IsEmpty(hMsgMgr->msgFreeList)) {
 			pMsg = (struct MSG_FRAME *)LST_GetHead(hMsgMgr->
 				msgFreeList);
-			MEM_Free(pMsg);
+			kfree(pMsg);
 		} else {
 			/* Cannot free all of the message frames */
 			break;
@@ -653,11 +653,11 @@ static void FreeMsgList(struct LST_LIST *msgList)
 		goto func_end;
 
 	while ((pMsg = (struct MSG_FRAME *)LST_GetHead(msgList)) != NULL)
-		MEM_Free(pMsg);
+		kfree(pMsg);
 
 	DBC_Assert(LST_IsEmpty(msgList));
 
-	MEM_Free(msgList);
+	kfree(msgList);
 func_end:
 	return;
 }
diff --git a/drivers/dsp/bridge/wmd/tiomap3430.c b/drivers/dsp/bridge/wmd/tiomap3430.c
index 866b5d8..2bc9583 100644
--- a/drivers/dsp/bridge/wmd/tiomap3430.c
+++ b/drivers/dsp/bridge/wmd/tiomap3430.c
@@ -1142,8 +1142,7 @@ static DSP_STATUS WMD_DEV_Create(OUT struct WMD_DEV_CONTEXT **ppDevContext,
 			if (pPtAttrs->hCSObj)
 				SYNC_DeleteCS(pPtAttrs->hCSObj);
 
-			if (pPtAttrs->pgInfo)
-				MEM_Free(pPtAttrs->pgInfo);
+			kfree(pPtAttrs->pgInfo);
 
 			if (pPtAttrs->L2TblAllocVa) {
 				MEM_FreePhysMem((void *)pPtAttrs->L2TblAllocVa,
@@ -1156,11 +1155,9 @@ static DSP_STATUS WMD_DEV_Create(OUT struct WMD_DEV_CONTEXT **ppDevContext,
 						pPtAttrs->L1TblAllocSz);
 			}
 		}
-		if (pPtAttrs)
-			MEM_Free(pPtAttrs);
+		kfree(pPtAttrs);
 
-		if (pDevContext)
-			MEM_Free(pDevContext);
+		kfree(pDevContext);
 
 		DBG_Trace(DBG_LEVEL7,
 			 "WMD_DEV_Create Error Device  not created\n");
@@ -1257,8 +1254,7 @@ static DSP_STATUS WMD_DEV_Destroy(struct WMD_DEV_CONTEXT *hDevContext)
 		if (pPtAttrs->hCSObj)
 			SYNC_DeleteCS(pPtAttrs->hCSObj);
 
-		if (pPtAttrs->pgInfo)
-			MEM_Free(pPtAttrs->pgInfo);
+		kfree(pPtAttrs->pgInfo);
 
 		if (pPtAttrs->L2TblAllocVa) {
 			MEM_FreePhysMem((void *)pPtAttrs->L2TblAllocVa,
@@ -1270,12 +1266,11 @@ static DSP_STATUS WMD_DEV_Destroy(struct WMD_DEV_CONTEXT *hDevContext)
 					pPtAttrs->L1TblAllocPa, pPtAttrs->
 					L1TblAllocSz);
 		}
-		if (pPtAttrs)
-			MEM_Free(pPtAttrs);
+		kfree(pPtAttrs);
 
 	}
 	/* Free the driver's device context: */
-	MEM_Free((void *) hDevContext);
+	kfree((void *) hDevContext);
 	return status;
 }
 
diff --git a/drivers/dsp/bridge/wmd/ue_deh.c b/drivers/dsp/bridge/wmd/ue_deh.c
index 2c3a2cd..21d0b48 100644
--- a/drivers/dsp/bridge/wmd/ue_deh.c
+++ b/drivers/dsp/bridge/wmd/ue_deh.c
@@ -338,9 +338,7 @@ DSP_STATUS WMD_DEH_GetInfo(struct DEH_MGR *hDehMgr,
  */
 void WMD_DEH_ReleaseDummyMem(void)
 {
-	if (dummyVaAddr) {
-		MEM_Free((void *)dummyVaAddr);
-		dummyVaAddr = 0;
-	}
+	kfree((void *)dummyVaAddr);
+	dummyVaAddr = 0;
 }
 
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/3] DSPBRIDGE: Get rid of MEM_VFree()
  2010-02-04 15:33   ` [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free() Ameya Palande
@ 2010-02-04 15:33     ` Ameya Palande
  2010-02-08 22:47       ` Omar Ramirez Luna
  2010-02-06  1:58     ` [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free() Omar Ramirez Luna
  1 sibling, 1 reply; 10+ messages in thread
From: Ameya Palande @ 2010-02-04 15:33 UTC (permalink / raw)
  To: linux-omap; +Cc: omar.ramirez, nm, deepak.chitriki

vfree() is NULL safe so MEM_VFree() doesn't provide any significant
advantage. By getting rid of MEM_VFree() and the NULL pointer check
associated with it, we can save on:
1. One level of indirection which translates to a function call cost.
2. NULL pointer checking cost.

Signed-off-by: Ameya Palande <ameya.palande@nokia.com>
---
 arch/arm/plat-omap/include/dspbridge/mem.h |   17 -----------------
 drivers/dsp/bridge/pmgr/dmm.c              |    3 +--
 drivers/dsp/bridge/services/mem.c          |   17 -----------------
 3 files changed, 1 insertions(+), 36 deletions(-)

diff --git a/arch/arm/plat-omap/include/dspbridge/mem.h b/arch/arm/plat-omap/include/dspbridge/mem.h
index e20d6d2..9d9a7a3 100644
--- a/arch/arm/plat-omap/include/dspbridge/mem.h
+++ b/arch/arm/plat-omap/include/dspbridge/mem.h
@@ -140,23 +140,6 @@
 	extern void MEM_FlushCache(void *pMemBuf, u32 cBytes, s32 FlushType);
 
 /*
- *  ======== MEM_VFree ========
- *  Purpose:
- *      Free the given block of system memory in virtual space.
- *  Parameters:
- *      pMemBuf:    Pointer to memory allocated by MEM_Calloc/Alloc()
- *		    using vmalloc.
- *  Returns:
- *  Requires:
- *      MEM initialized.
- *      pMemBuf is a valid memory address returned by MEM_Calloc/Alloc()
- *	using vmalloc.
- *  Ensures:
- *      pMemBuf is no longer a valid pointer to memory.
- */
-	extern void MEM_VFree(IN void *pMemBuf);
-
-/*
  *  ======== MEM_FreePhysMem ========
  *  Purpose:
  *      Free the given block of physically contiguous memory.
diff --git a/drivers/dsp/bridge/pmgr/dmm.c b/drivers/dsp/bridge/pmgr/dmm.c
index d5a7275..2425f0f 100644
--- a/drivers/dsp/bridge/pmgr/dmm.c
+++ b/drivers/dsp/bridge/pmgr/dmm.c
@@ -220,8 +220,7 @@ DSP_STATUS DMM_DeleteTables(struct DMM_OBJECT *hDmmMgr)
 		/* Delete all DMM tables */
 		SYNC_EnterCS(pDmmObj->hDmmLock);
 
-		if (pVirtualMappingTable != NULL)
-			MEM_VFree(pVirtualMappingTable);
+		vfree(pVirtualMappingTable);
 
 		SYNC_LeaveCS(pDmmObj->hDmmLock);
 	} else
diff --git a/drivers/dsp/bridge/services/mem.c b/drivers/dsp/bridge/services/mem.c
index 614396e..57f1794 100644
--- a/drivers/dsp/bridge/services/mem.c
+++ b/drivers/dsp/bridge/services/mem.c
@@ -292,23 +292,6 @@ void MEM_FlushCache(void *pMemBuf, u32 cBytes, s32 FlushType)
 }
 
 /*
- *  ======== MEM_VFree ========
- *  Purpose:
- *      Free the given block of system memory in virtual space.
- */
-void MEM_VFree(IN void *pMemBuf)
-{
-	DBC_Require(pMemBuf != NULL);
-
-	GT_1trace(MEM_debugMask, GT_ENTER, "MEM_VFree: pMemBufs 0x%x\n",
-		  pMemBuf);
-
-	if (pMemBuf) {
-		vfree(pMemBuf);
-	}
-}
-
-/*
  *  ======== MEM_FreePhysMem ========
  *  Purpose:
  *      Free the given block of physically contiguous memory.
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free()
  2010-02-04 15:33   ` [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free() Ameya Palande
  2010-02-04 15:33     ` [PATCH 3/3] DSPBRIDGE: Get rid of MEM_VFree() Ameya Palande
@ 2010-02-06  1:58     ` Omar Ramirez Luna
  2010-02-06 15:16       ` ameya.palande
  1 sibling, 1 reply; 10+ messages in thread
From: Omar Ramirez Luna @ 2010-02-06  1:58 UTC (permalink / raw)
  To: Ameya Palande; +Cc: linux-omap, Menon, Nishanth, Chitriki Rudramuni, Deepak

On 2/4/2010 9:33 AM, Ameya Palande wrote:
> kfree() is NULL and ZERO pointer safe so MEM_Free() doesn't provide any
> significant advantage. By getting rid of MEM_Free() and the NULL pointer
> check associated with it, we can save on:
> 1. One level of indirection which translates to a function call cost.
> 2. NULL pointer checking cost.
>
> Signed-off-by: Ameya Palande<ameya.palande@nokia.com>
> ---
>   arch/arm/plat-omap/include/dspbridge/mem.h |   19 +------
>   drivers/dsp/bridge/gen/gs.c                |    4 +-
>   drivers/dsp/bridge/pmgr/cmm.c              |   12 ++--
>   drivers/dsp/bridge/pmgr/cod.c              |    4 +-
>   drivers/dsp/bridge/pmgr/dbll.c             |   15 ++---
>   drivers/dsp/bridge/pmgr/dev.c              |    9 +--
>   drivers/dsp/bridge/pmgr/wcd.c              |   46 ++++++---------
>   drivers/dsp/bridge/rmgr/dbdcd.c            |   13 ++---
>   drivers/dsp/bridge/rmgr/disp.c             |    3 +-
>   drivers/dsp/bridge/rmgr/drv.c              |   38 +++++-------
>   drivers/dsp/bridge/rmgr/drv_interface.c    |    2 +-
>   drivers/dsp/bridge/rmgr/nldr.c             |   52 ++++++-----------
>   drivers/dsp/bridge/rmgr/node.c             |   87 ++++++++++------------------
>   drivers/dsp/bridge/rmgr/proc.c             |   10 +--
>   drivers/dsp/bridge/rmgr/rmm.c              |   19 +++---
>   drivers/dsp/bridge/rmgr/strm.c             |    3 +-
>   drivers/dsp/bridge/services/mem.c          |   17 ------
>   drivers/dsp/bridge/services/ntfy.c         |    7 +-
>   drivers/dsp/bridge/services/regsup.c       |   10 ++--
>   drivers/dsp/bridge/services/sync.c         |    3 +-
>   drivers/dsp/bridge/wmd/chnl_sm.c           |   11 ++--
>   drivers/dsp/bridge/wmd/io_sm.c             |   12 ++--
>   drivers/dsp/bridge/wmd/msg_sm.c            |    8 +-
>   drivers/dsp/bridge/wmd/tiomap3430.c        |   17 ++----
>   drivers/dsp/bridge/wmd/ue_deh.c            |    6 +-
>   25 files changed, 157 insertions(+), 270 deletions(-)
>

Acked-by: Omar Ramirez Luna <omar.ramirez@ti.com>

I had to rework the patch as it sits on top of changes adding 3 more 
MEM_Free lines.

drv.c
@@ -603,10 +603,10 @@ DSP_STATUS DRV_Create(OUT struct DRV_OBJECT 
**phDRVObject)
  			 pDRVObject);
  		*phDRVObject = pDRVObject;
  	} else {
-		MEM_Free(pDRVObject->devList);
-		MEM_Free(pDRVObject->devNodeString);
+		kfree(pDRVObject->devList);
+		kfree(pDRVObject->devNodeString);

proc.c
@@ -409,7 +409,7 @@ DSP_STATUS PROC_AutoStart(struct CFG_DEVNODE *hDevNode,
  			 "No Exec file found \n");
  	}
  func_cont:
-	MEM_Free(hProcObject->g_pszLastCoff);
+	kfree(hProcObject->g_pszLastCoff);
  	hProcObject->g_pszLastCoff = NULL;
  	MEM_FreeObject(hProcObject);
  func_end:

If no objection I'll be pushing tomorrow.

- omar

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free()
  2010-02-06  1:58     ` [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free() Omar Ramirez Luna
@ 2010-02-06 15:16       ` ameya.palande
  2010-02-08 22:47         ` Omar Ramirez Luna
  0 siblings, 1 reply; 10+ messages in thread
From: ameya.palande @ 2010-02-06 15:16 UTC (permalink / raw)
  To: omar.ramirez; +Cc: linux-omap, nm, deepak.chitriki

Hi Omar,
________________________________________
From: ext Omar Ramirez Luna [omar.ramirez@ti.com]
Sent: Saturday, February 06, 2010 3:58 AM
To: Palande Ameya (Nokia-D/Helsinki)
Cc: linux-omap@vger.kernel.org; Menon, Nishanth; Chitriki Rudramuni, Deepak
Subject: Re: [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free()

On 2/4/2010 9:33 AM, Ameya Palande wrote:
> kfree() is NULL and ZERO pointer safe so MEM_Free() doesn't provide any
> significant advantage. By getting rid of MEM_Free() and the NULL pointer
> check associated with it, we can save on:
> 1. One level of indirection which translates to a function call cost.
> 2. NULL pointer checking cost.
>
> Signed-off-by: Ameya Palande<ameya.palande@nokia.com>
> ---
>   arch/arm/plat-omap/include/dspbridge/mem.h |   19 +------
>   drivers/dsp/bridge/gen/gs.c                |    4 +-
>   drivers/dsp/bridge/pmgr/cmm.c              |   12 ++--
>   drivers/dsp/bridge/pmgr/cod.c              |    4 +-
>   drivers/dsp/bridge/pmgr/dbll.c             |   15 ++---
>   drivers/dsp/bridge/pmgr/dev.c              |    9 +--
>   drivers/dsp/bridge/pmgr/wcd.c              |   46 ++++++---------
>   drivers/dsp/bridge/rmgr/dbdcd.c            |   13 ++---
>   drivers/dsp/bridge/rmgr/disp.c             |    3 +-
>   drivers/dsp/bridge/rmgr/drv.c              |   38 +++++-------
>   drivers/dsp/bridge/rmgr/drv_interface.c    |    2 +-
>   drivers/dsp/bridge/rmgr/nldr.c             |   52 ++++++-----------
>   drivers/dsp/bridge/rmgr/node.c             |   87 ++++++++++------------------
>   drivers/dsp/bridge/rmgr/proc.c             |   10 +--
>   drivers/dsp/bridge/rmgr/rmm.c              |   19 +++---
>   drivers/dsp/bridge/rmgr/strm.c             |    3 +-
>   drivers/dsp/bridge/services/mem.c          |   17 ------
>   drivers/dsp/bridge/services/ntfy.c         |    7 +-
>   drivers/dsp/bridge/services/regsup.c       |   10 ++--
>   drivers/dsp/bridge/services/sync.c         |    3 +-
>   drivers/dsp/bridge/wmd/chnl_sm.c           |   11 ++--
>   drivers/dsp/bridge/wmd/io_sm.c             |   12 ++--
>   drivers/dsp/bridge/wmd/msg_sm.c            |    8 +-
>   drivers/dsp/bridge/wmd/tiomap3430.c        |   17 ++----
>   drivers/dsp/bridge/wmd/ue_deh.c            |    6 +-
>   25 files changed, 157 insertions(+), 270 deletions(-)
>

Acked-by: Omar Ramirez Luna <omar.ramirez@ti.com>

I had to rework the patch as it sits on top of changes adding 3 more
MEM_Free lines.

drv.c
@@ -603,10 +603,10 @@ DSP_STATUS DRV_Create(OUT struct DRV_OBJECT
**phDRVObject)
                         pDRVObject);
                *phDRVObject = pDRVObject;
        } else {
-               MEM_Free(pDRVObject->devList);
-               MEM_Free(pDRVObject->devNodeString);
+               kfree(pDRVObject->devList);
+               kfree(pDRVObject->devNodeString);

proc.c
@@ -409,7 +409,7 @@ DSP_STATUS PROC_AutoStart(struct CFG_DEVNODE *hDevNode,
                         "No Exec file found \n");
        }
  func_cont:
-       MEM_Free(hProcObject->g_pszLastCoff);
+       kfree(hProcObject->g_pszLastCoff);
        hProcObject->g_pszLastCoff = NULL;
        MEM_FreeObject(hProcObject);
  func_end:

If no objection I'll be pushing tomorrow.

No problem :)

Cheers,
Ameya.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/3] DSPBRIDGE: Get rid of MEM_CHECK mechanism
  2010-02-04 15:33 ` [PATCH 1/3] DSPBRIDGE: Get rid of MEM_CHECK mechanism Ameya Palande
  2010-02-04 15:33   ` [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free() Ameya Palande
@ 2010-02-08 22:47   ` Omar Ramirez Luna
  1 sibling, 0 replies; 10+ messages in thread
From: Omar Ramirez Luna @ 2010-02-08 22:47 UTC (permalink / raw)
  To: Ameya Palande; +Cc: linux-omap, Menon, Nishanth, Chitriki Rudramuni, Deepak

On 2/4/2010 9:33 AM, Ameya Palande wrote:
> kmemleak offeres the same functionality as custom MEM_CHECK
> mechanism, so get rid of MEM_CHECK.
>
> Signed-off-by: Ameya Palande<ameya.palande@nokia.com>
> ---
>   drivers/dsp/bridge/services/mem.c |  212 +------------------------------------
>   1 files changed, 2 insertions(+), 210 deletions(-)
>

Acked-by: Omar Ramirez Luna <omar.ramirez@ti.com>

Pushed to dspbridge.

- omar

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free()
  2010-02-06 15:16       ` ameya.palande
@ 2010-02-08 22:47         ` Omar Ramirez Luna
  0 siblings, 0 replies; 10+ messages in thread
From: Omar Ramirez Luna @ 2010-02-08 22:47 UTC (permalink / raw)
  To: ameya.palande; +Cc: linux-omap, Menon, Nishanth, Chitriki Rudramuni, Deepak

On 2/6/2010 9:16 AM, ameya.palande@nokia.com wrote:
[...]
>
> If no objection I'll be pushing tomorrow.
>
> No problem :)
>

Pushed to dspbridge

- omar

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/3] DSPBRIDGE: Get rid of MEM_VFree()
  2010-02-04 15:33     ` [PATCH 3/3] DSPBRIDGE: Get rid of MEM_VFree() Ameya Palande
@ 2010-02-08 22:47       ` Omar Ramirez Luna
  0 siblings, 0 replies; 10+ messages in thread
From: Omar Ramirez Luna @ 2010-02-08 22:47 UTC (permalink / raw)
  To: Ameya Palande; +Cc: linux-omap, Menon, Nishanth, Chitriki Rudramuni, Deepak

On 2/4/2010 9:33 AM, Ameya Palande wrote:
> vfree() is NULL safe so MEM_VFree() doesn't provide any significant
> advantage. By getting rid of MEM_VFree() and the NULL pointer check
> associated with it, we can save on:
> 1. One level of indirection which translates to a function call cost.
> 2. NULL pointer checking cost.
>
> Signed-off-by: Ameya Palande<ameya.palande@nokia.com>
> ---
>   arch/arm/plat-omap/include/dspbridge/mem.h |   17 -----------------
>   drivers/dsp/bridge/pmgr/dmm.c              |    3 +--
>   drivers/dsp/bridge/services/mem.c          |   17 -----------------
>   3 files changed, 1 insertions(+), 36 deletions(-)
>

Acked-by: Omar Ramirez Luna <omar.ramirez@ti.com>

Pushed to dspbridge.

- omar

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/3] DSPBRIDGE: Get rid of MEM_CHECK mechanism
  2010-02-03 23:32 [PATCH 0/3] DSPBRIDGE: MEM Module cleanup series Ameya Palande
@ 2010-02-03 23:32 ` Ameya Palande
  0 siblings, 0 replies; 10+ messages in thread
From: Ameya Palande @ 2010-02-03 23:32 UTC (permalink / raw)
  To: linux-omap; +Cc: omar.ramirez, nm, deepak.chitriki

kmemleak offeres the same functionality as custom MEM_CHECK
mechanism, so get rid of MEM_CHECK.

Signed-off-by: Ameya Palande <ameya.palande@nokia.com>
---
 drivers/dsp/bridge/services/mem.c |  212 +------------------------------------
 1 files changed, 2 insertions(+), 210 deletions(-)

diff --git a/drivers/dsp/bridge/services/mem.c b/drivers/dsp/bridge/services/mem.c
index cee646a..c4b1fe1 100644
--- a/drivers/dsp/bridge/services/mem.c
+++ b/drivers/dsp/bridge/services/mem.c
@@ -34,11 +34,6 @@
 
 /*  ----------------------------------- Defines */
 #define MEM_512MB   0x1fffffff
-#define memInfoSign 0x464E494D	/* "MINF" (in reverse). */
-
-#ifdef CONFIG_BRIDGE_DEBUG
-#define MEM_CHECK		/* Use to detect source of memory leaks */
-#endif
 
 /*  ----------------------------------- Globals */
 #if GT_TRACE
@@ -56,85 +51,6 @@ struct extPhysMemPool {
 
 static struct extPhysMemPool extMemPool;
 
-/*  Information about each element allocated on heap */
-struct memInfo {
-	struct list_head link;		/* Must be first */
-	size_t size;
-	void *caller;
-	u32 dwSignature;	/* Should be last */
-};
-
-#ifdef MEM_CHECK
-
-/*
- *  This structure holds a linked list to all memory elements allocated on
- *  heap by DSP/BIOS Bridge. This is used to report memory leaks and free
- *  such elements while removing the DSP/BIOS Bridge driver
- */
-struct memMan {
-	struct LST_LIST lst;
-	spinlock_t lock;
-};
-
-static struct memMan mMan;
-
-/*
- *  These functions are similar to LST_PutTail and LST_RemoveElem and are
- *  duplicated here to make MEM independent of LST
- */
-static inline void MLST_PutTail(struct LST_LIST *pList, struct list_head *pElem)
-{
-	pElem->prev = pList->head.prev;
-	pElem->next = &pList->head;
-	pList->head.prev = pElem;
-	pElem->prev->next = pElem;
-}
-
-static inline void MLST_RemoveElem(struct LST_LIST *pList,
-				   struct list_head *pCurElem)
-{
-	pCurElem->prev->next = pCurElem->next;
-	pCurElem->next->prev = pCurElem->prev;
-	pCurElem->next = NULL;
-	pCurElem->prev = NULL;
-}
-
-static void MEM_Check(void)
-{
-	struct memInfo *pMem;
-	struct list_head *last = &mMan.lst.head;
-	struct list_head *curr = last->next;
-
-	if (!LST_IsEmpty(&mMan.lst)) {
-		GT_0trace(MEM_debugMask, GT_7CLASS, "*** MEMORY LEAK ***\n");
-		GT_0trace(MEM_debugMask, GT_7CLASS,
-			  "Addr      Size      Caller\n");
-		while (curr != last) {
-			pMem = (struct memInfo *)curr;
-			curr = curr->next;
-			if ((u32)pMem > PAGE_OFFSET &&
-			    MEM_IsValidHandle(pMem, memInfoSign)) {
-				GT_3trace(MEM_debugMask, GT_7CLASS,
-					"%lx  %d\t [<%p>]\n",
-					(u32) pMem + sizeof(struct memInfo),
-					pMem->size, pMem->caller);
-				MLST_RemoveElem(&mMan.lst,
-						(struct list_head *)pMem);
-				kfree(pMem);
-			} else {
-				GT_1trace(MEM_debugMask, GT_7CLASS,
-					  "Invalid allocation or "
-					  "Buffer underflow at %x\n",
-					  (u32)pMem +	sizeof(struct memInfo));
-				break;
-			}
-		}
-	}
-	DBC_Ensure(LST_IsEmpty(&mMan.lst));
-}
-
-#endif
-
 void MEM_ExtPhysPoolInit(u32 poolPhysBase, u32 poolSize)
 {
 	u32 poolVirtBase;
@@ -233,7 +149,7 @@ static void *MEM_ExtPhysMemAlloc(u32 bytes, u32 align, OUT u32 *pPhysAddr)
  */
 void *MEM_Alloc(u32 cBytes, enum MEM_POOLATTRS type)
 {
-	struct memInfo *pMem = NULL;
+	void *pMem = NULL;
 
 	GT_2trace(MEM_debugMask, GT_ENTER,
 		  "MEM_Alloc: cBytes 0x%x\ttype 0x%x\n", cBytes, type);
@@ -242,46 +158,11 @@ void *MEM_Alloc(u32 cBytes, enum MEM_POOLATTRS type)
 		case MEM_NONPAGED:
 		/* If non-paged memory required, see note at top of file. */
 		case MEM_PAGED:
-#ifndef MEM_CHECK
 			pMem = kmalloc(cBytes,
 				(in_atomic()) ? GFP_ATOMIC : GFP_KERNEL);
-#else
-			pMem = kmalloc(cBytes + sizeof(struct memInfo),
-				(in_atomic()) ? GFP_ATOMIC : GFP_KERNEL);
-			if (pMem) {
-				pMem->size = cBytes;
-				pMem->caller = __builtin_return_address(0);
-				pMem->dwSignature = memInfoSign;
-
-				spin_lock(&mMan.lock);
-				MLST_PutTail(&mMan.lst,
-					    (struct list_head *)pMem);
-				spin_unlock(&mMan.lock);
-
-				pMem = (void *)((u32)pMem +
-					sizeof(struct memInfo));
-			}
-#endif
 			break;
 		case MEM_LARGEVIRTMEM:
-#ifndef MEM_CHECK
 			pMem = vmalloc(cBytes);
-#else
-			pMem = vmalloc(cBytes + sizeof(struct memInfo));
-			if (pMem) {
-				pMem->size = cBytes;
-				pMem->caller = __builtin_return_address(0);
-				pMem->dwSignature = memInfoSign;
-
-				spin_lock(&mMan.lock);
-				MLST_PutTail(&mMan.lst,
-					    (struct list_head *)pMem);
-				spin_unlock(&mMan.lock);
-
-				pMem = (void *)((u32)pMem +
-					sizeof(struct memInfo));
-			}
-#endif
 			break;
 
 		default:
@@ -335,7 +216,7 @@ void *MEM_AllocPhysMem(u32 cBytes, u32 ulAlign, OUT u32 *pPhysicalAddress)
  */
 void *MEM_Calloc(u32 cBytes, enum MEM_POOLATTRS type)
 {
-	struct memInfo *pMem = NULL;
+	void *pMem = NULL;
 
 	GT_2trace(MEM_debugMask, GT_ENTER,
 		  "MEM_Calloc: cBytes 0x%x\ttype 0x%x\n",
@@ -346,51 +227,16 @@ void *MEM_Calloc(u32 cBytes, enum MEM_POOLATTRS type)
 		case MEM_NONPAGED:
 		/* If non-paged memory required, see note at top of file. */
 		case MEM_PAGED:
-#ifndef MEM_CHECK
 			pMem = kmalloc(cBytes,
 				(in_atomic()) ? GFP_ATOMIC : GFP_KERNEL);
 			if (pMem)
 				memset(pMem, 0, cBytes);
 
-#else
-			pMem = kmalloc(cBytes + sizeof(struct memInfo),
-				(in_atomic()) ? GFP_ATOMIC : GFP_KERNEL);
-			if (pMem) {
-				memset((void *)((u32)pMem +
-					sizeof(struct memInfo)), 0, cBytes);
-				pMem->size = cBytes;
-				pMem->caller = __builtin_return_address(0);
-				pMem->dwSignature = memInfoSign;
-				spin_lock(&mMan.lock);
-				MLST_PutTail(&mMan.lst,
-					(struct list_head *)pMem);
-				spin_unlock(&mMan.lock);
-				pMem = (void *)((u32)pMem +
-					sizeof(struct memInfo));
-			}
-#endif
 			break;
 		case MEM_LARGEVIRTMEM:
-#ifndef MEM_CHECK
 			pMem = vmalloc(cBytes);
 			if (pMem)
 				memset(pMem, 0, cBytes);
-#else
-			pMem = vmalloc(cBytes + sizeof(struct memInfo));
-			if (pMem) {
-				memset((void *)((u32)pMem +
-					sizeof(struct memInfo)), 0, cBytes);
-				pMem->size = cBytes;
-				pMem->caller = __builtin_return_address(0);
-				pMem->dwSignature = memInfoSign;
-				spin_lock(&mMan.lock);
-				MLST_PutTail(&mMan.lst,
-						(struct list_head *)pMem);
-				spin_unlock(&mMan.lock);
-				pMem = (void *)((u32)pMem +
-					sizeof(struct memInfo));
-			}
-#endif
 			break;
 		default:
 			GT_1trace(MEM_debugMask, GT_6CLASS,
@@ -410,9 +256,6 @@ void *MEM_Calloc(u32 cBytes, enum MEM_POOLATTRS type)
  */
 void MEM_Exit(void)
 {
-#ifdef MEM_CHECK
-	MEM_Check();
-#endif
 }
 
 /*
@@ -455,35 +298,13 @@ void MEM_FlushCache(void *pMemBuf, u32 cBytes, s32 FlushType)
  */
 void MEM_VFree(IN void *pMemBuf)
 {
-#ifdef MEM_CHECK
-	struct memInfo *pMem = (void *)((u32)pMemBuf - sizeof(struct memInfo));
-#endif
-
 	DBC_Require(pMemBuf != NULL);
 
 	GT_1trace(MEM_debugMask, GT_ENTER, "MEM_VFree: pMemBufs 0x%x\n",
 		  pMemBuf);
 
 	if (pMemBuf) {
-#ifndef MEM_CHECK
 		vfree(pMemBuf);
-#else
-		if (pMem) {
-			if (pMem->dwSignature == memInfoSign) {
-				spin_lock(&mMan.lock);
-				MLST_RemoveElem(&mMan.lst,
-						(struct list_head *)pMem);
-				spin_unlock(&mMan.lock);
-				pMem->dwSignature = 0;
-				vfree(pMem);
-			} else {
-				GT_1trace(MEM_debugMask, GT_7CLASS,
-					"Invalid allocation or "
-					"Buffer underflow at %x\n",
-					(u32) pMem + sizeof(struct memInfo));
-			}
-		}
-#endif
 	}
 }
 
@@ -494,35 +315,13 @@ void MEM_VFree(IN void *pMemBuf)
  */
 void MEM_Free(IN void *pMemBuf)
 {
-#ifdef MEM_CHECK
-	struct memInfo *pMem = (void *)((u32)pMemBuf - sizeof(struct memInfo));
-#endif
-
 	DBC_Require(pMemBuf != NULL);
 
 	GT_1trace(MEM_debugMask, GT_ENTER, "MEM_Free: pMemBufs 0x%x\n",
 		  pMemBuf);
 
 	if (pMemBuf) {
-#ifndef MEM_CHECK
 		kfree(pMemBuf);
-#else
-		if (pMem) {
-			if (pMem->dwSignature == memInfoSign) {
-				spin_lock(&mMan.lock);
-				MLST_RemoveElem(&mMan.lst,
-						(struct list_head *)pMem);
-				spin_unlock(&mMan.lock);
-				pMem->dwSignature = 0;
-				kfree(pMem);
-			} else {
-				GT_1trace(MEM_debugMask, GT_7CLASS,
-					"Invalid allocation or "
-					"Buffer underflow at %x\n",
-					(u32) pMem + sizeof(struct memInfo));
-			}
-		}
-#endif
 	}
 }
 
@@ -552,12 +351,5 @@ void MEM_FreePhysMem(void *pVirtualAddress, u32 pPhysicalAddress,
 bool MEM_Init(void)
 {
 	GT_create(&MEM_debugMask, "MM");	/* MM for MeM module */
-
-#ifdef MEM_CHECK
-	mMan.lst.head.next = &mMan.lst.head;
-	mMan.lst.head.prev = &mMan.lst.head;
-	spin_lock_init(&mMan.lock);
-#endif
-
 	return true;
 }
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2010-02-08 22:48 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-02-04 15:33 [PATCHv2 0/3] DSPBRIDGE: MEM Module cleanup series Ameya Palande
2010-02-04 15:33 ` [PATCH 1/3] DSPBRIDGE: Get rid of MEM_CHECK mechanism Ameya Palande
2010-02-04 15:33   ` [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free() Ameya Palande
2010-02-04 15:33     ` [PATCH 3/3] DSPBRIDGE: Get rid of MEM_VFree() Ameya Palande
2010-02-08 22:47       ` Omar Ramirez Luna
2010-02-06  1:58     ` [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free() Omar Ramirez Luna
2010-02-06 15:16       ` ameya.palande
2010-02-08 22:47         ` Omar Ramirez Luna
2010-02-08 22:47   ` [PATCH 1/3] DSPBRIDGE: Get rid of MEM_CHECK mechanism Omar Ramirez Luna
  -- strict thread matches above, loose matches on Subject: below --
2010-02-03 23:32 [PATCH 0/3] DSPBRIDGE: MEM Module cleanup series Ameya Palande
2010-02-03 23:32 ` [PATCH 1/3] DSPBRIDGE: Get rid of MEM_CHECK mechanism Ameya Palande

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).