* [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
* [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
` (2 more replies)
0 siblings, 3 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
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-08 22:47 ` Omar Ramirez Luna
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
2 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
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 [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 ` Ameya Palande
2010-02-06 1:58 ` Omar Ramirez Luna
2010-02-04 15:33 ` [PATCH 3/3] DSPBRIDGE: Get rid of MEM_VFree() Ameya Palande
2 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
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 [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 ` Ameya Palande
2010-02-08 22:47 ` Omar Ramirez Luna
2 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
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-06 1:58 ` Omar Ramirez Luna
2010-02-06 15:16 ` ameya.palande
0 siblings, 1 reply; 10+ messages in thread
From: Omar Ramirez Luna @ 2010-02-06 1:58 UTC (permalink / raw)
To: Ameya Palande
Cc: linux-omap@vger.kernel.org, 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 ` 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-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@vger.kernel.org, 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@nokia.com
Cc: linux-omap@vger.kernel.org, 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@vger.kernel.org, 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
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-08 22:47 ` Omar Ramirez Luna
2010-02-04 15:33 ` [PATCH 2/3] DSPBRIDGE: Get rid of MEM_Free() Ameya Palande
2010-02-06 1:58 ` Omar Ramirez Luna
2010-02-06 15:16 ` ameya.palande
2010-02-08 22:47 ` Omar Ramirez Luna
2010-02-04 15:33 ` [PATCH 3/3] DSPBRIDGE: Get rid of MEM_VFree() Ameya Palande
2010-02-08 22:47 ` 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.