DSPBRIDGE: Get rid of services/list.c
Subsystems (2)
PATCH 1/4 DSPBRIDGE: Get rid of services/list.c
From: Andy Shevchenko <[email protected]>
* Remove LST_Init() and LST_Exit() calls because they are doing nothing except tracing, Thus, remove tracing as well.
* Remove DBC_* calls. It's internal kernel business whether to have those assertions.
* Move methods from list.c as inline functions to the list.h.
* Switch to list_head structure instead of LST_ELEM:
- define LST_ELEM as list_head via macro
- substitute LST_ELEM by list_head
- remove redudant code that uses head->self pointer
* Remove extra local variables.
* Use native list methods where it's possible inside the list.h.
--- arch/arm/plat-omap/include/dspbridge/list.h | 128 ++++++++------ drivers/dsp/bridge/Makefile | 2 +- drivers/dsp/bridge/services/list.c | 246 --------------------------- drivers/dsp/bridge/services/mem.c | 2 - drivers/dsp/bridge/services/services.c | 9 +- 5 files changed, 78 insertions(+), 309 deletions(-) delete mode 100644 drivers/dsp/bridge/services/list.c
arch/arm/plat-omap/include/dspbridge/list.h +75 -53
@@ -22,17 +22,16 @@#include <dspbridge/host_os.h> -#define LST_IsEmpty (l) (((l)->head.next == &(l)->head)) +/* MEM_Calloc(), MEM_NONPAGED, MEM_Free() */ +#include <dspbridge/mem.h> +#include <linux/list.h> -struct LST_ELEM { -struct LST_ELEM *next; -struct LST_ELEM *prev; -struct LST_ELEM *self; - } ; +#define LST_ELEM list_head +#define LST_IsEmpty (l) list_empty(&(l)->head) -struct LST_LIST { -struct LST_ELEM head; - } ; +struct LST_LIST { +struct list_head head; +};/* * ======== LST_Create ========
@@ -56,7 +55,17 @@* "empty" element, because its "next" and "prev" pointers point at * the same location (the element itself). */ -extern struct LST_LIST *LST_Create (void ); +static inline struct LST_LIST *LST_Create (void ) +{ +struct LST_LIST *pList; + + pList = (struct LST_LIST *)MEM_Calloc (sizeof (struct LST_LIST ), +MEM_NONPAGED ); +if (pList !=NULL ) +INIT_LIST_HEAD (&pList->head); + +return pList; +}/* * ======== LST_Delete ========
@@ -78,21 +87,11 @@* chain of list elements. Calling this function on a non-empty list * will cause a memory leak. */ - extern void LST_Delete(IN struct LST_LIST *pList); - -/* -* ======== LST_Exit ======== -* Purpose: -* Discontinue usage of module; free resources when reference count -* reaches 0. -* Parameters: -* Returns: -* Requires: -* LST initialized. -* Ensures: -* Resources used by module are freed when cRef reaches zero. -*/ -extern void LST_Exit (void ); +static inline void LST_Delete (struct LST_LIST *pList) +{ +if (pList !=NULL ) +MEM_Free (pList); +}/* * ======== LST_First ========
@@ -108,7 +107,12 @@* - pList != NULL. * Ensures: */ - extern struct LST_ELEM *LST_First(IN struct LST_LIST *pList); +static inline struct list_head *LST_First (struct LST_LIST *pList) +{ +if (pList && !list_empty (&pList->head)) +return pList->head.next; +return NULL ; +}/* * ======== LST_GetHead ========
@@ -130,7 +134,6 @@* Pointer to element that was at the head of the list (success) * NULL No elements in list * Requires: -* - head.self must be correctly set to &head. * - LST initialized. * - pList != NULL. * Ensures:
@@ -139,20 +142,19 @@* the head of the list, and the head of the list points backward (its * "prev" pointer) to the tail of the list, this list is circular. */ - extern struct LST_ELEM *LST_GetHead(IN struct LST_LIST *pList); +static inline struct list_head *LST_GetHead (struct LST_LIST *pList) +{ +struct list_head *pElem; -/* -* ======== LST_Init ======== -* Purpose: -* Initializes private state of LST module. -* Parameters: -* Returns: -* TRUE if initialized; FALSE otherwise. -* Requires: -* Ensures: -* LST initialized. -*/ -extern bool LST_Init (void ); +if (!pList ||list_empty (&pList->head)) +return NULL ; + + pElem = pList->head.next; + pList->head.next = pElem->next; + pElem->next->prev = &pList->head; + +return pElem; +}/* * ======== LST_InitElem ========
@@ -170,7 +172,13 @@* of a list chain -- that would break the chain. * */ - extern void LST_InitElem(IN struct LST_ELEM *pListElem); +static inline void LST_InitElem (struct list_head *pElem) +{ +if (pElem) { + pElem->next =NULL ; + pElem->prev =NULL ; + } +}/* * ======== LST_InsertBefore ========
@@ -188,9 +196,13 @@* - pElemExisting != NULL. * Ensures: */ - extern void LST_InsertBefore(IN struct LST_LIST *pList, - IN struct LST_ELEM *pElem, - IN struct LST_ELEM *pElemExisting); +static inline void LST_InsertBefore (struct LST_LIST *pList, +struct list_head *pElem, +struct list_head *pElemExisting) +{ +if (pList && pElem && pElemExisting) +list_add_tail (pElem, pElemExisting); +}/* * ======== LST_Next ========
@@ -208,8 +220,14 @@* - pCurElem != NULL. * Ensures: */ - extern struct LST_ELEM *LST_Next(IN struct LST_LIST *pList, - IN struct LST_ELEM *pCurElem); +static inline struct list_head *LST_Next (struct LST_LIST *pList, +struct list_head *pCurElem) +{ +if (pList && !list_empty (&pList->head) && pCurElem && + (pCurElem->next != &pList->head)) +return pCurElem->next; +return NULL ; +}/* * ======== LST_PutTail ========
@@ -232,18 +250,18 @@* Void * Requires: * *pElem and *pList must both exist. -* pElem->self = pElem before pElem is passed to this function. * LST initialized. * Ensures: * Notes: * Because the tail is always "just before" the head of the list (the * tail's "next" pointer points at the head of the list, and the head's * "prev" pointer points at the tail of the list), the list is circular. -* Warning: if pElem->self is not set beforehand, LST_GetHead() will -* return an erroneous pointer when it is called for this element. */ - extern void LST_PutTail(IN struct LST_LIST *pList, - IN struct LST_ELEM *pListElem); +static inline void LST_PutTail (struct LST_LIST *pList,struct list_head *pElem) +{ +if (pList && pElem) +list_add_tail (pElem, &pList->head); +}/* * ======== LST_RemoveElem ========
@@ -260,7 +278,11 @@* - pCurElem != NULL. * Ensures: */ -extern void LST_RemoveElem(IN struct LST_LIST *pList, - IN struct LST_ELEM *pCurElem); +static inline void LST_RemoveElem (struct LST_LIST *pList, +struct list_head *pCurElem) +{ +if (pList && !list_empty (&pList->head) && pCurElem) +list_del_init (pCurElem); +}#endif /* LIST_ */
drivers/dsp/bridge/Makefile +1 -1
@@ -1,7 +1,7 @@ obj-$(CONFIG_MPU_BRIDGE) += bridgedriver.o libgen = gen/gb.o gen/gt.o gen/gs.o gen/gh.o gen/_gt_para.o gen/uuidutil.o -libservices = services/mem.o services/list.o services/sync.o \ +libservices = services/mem.o services/sync.o \ services/clk.o services/cfg.o services/reg.o \ services/regsup.o services/ntfy.o \ services/dbg.o services/services.o
drivers/dsp/bridge/services/list.c deleted +0 -246
246 lines not on this page · raw message
drivers/dsp/bridge/services/mem.c +0 -2
@@ -90,7 +90,6 @@ static inline void MLST_PutTail(struct LST_LIST *pList, struct LST_ELEM *pElem) pElem->next = &pList->head; pList->head.prev = pElem; pElem->prev->next = pElem; - pElem->self = pElem; } static inline void MLST_RemoveElem(struct LST_LIST *pList,
@@ -573,7 +572,6 @@ bool MEM_Init(void)#ifdef MEM_CHECK mMan.lst.head.next = &mMan.lst.head; mMan.lst.head.prev = &mMan.lst.head; - mMan.lst.head.self =NULL ;spin_lock_init (&mMan.lock);#endif
drivers/dsp/bridge/services/services.c +2 -7
@@ -66,7 +66,6 @@ void SERVICES_Exit(void)SYNC_Exit ();CLK_Exit ();REG_Exit (); -LST_Exit ();DBG_Exit ();CFG_Exit ();MEM_Exit ();
@@ -85,7 +84,7 @@ void SERVICES_Exit(void)bool SERVICES_Init (void ) {bool fInit = true; -bool fCFG, fDBG, fLST, fMEM; +bool fCFG, fDBG, fMEM;bool fREG, fSYNC, fCLK, fNTFY;DBC_Require (cRefs >=0 );
@@ -103,13 +102,12 @@ bool SERVICES_Init(void) fREG =REG_Init (); fCFG =CFG_Init (); fDBG =DBG_Init (); - fLST =LST_Init (); fSYNC =SYNC_Init (); fCLK =CLK_Init (); fNTFY =NTFY_Init (); fInit = fCFG && fDBG && - fLST && fMEM && fREG && fSYNC && fCLK; + fMEM && fREG && fSYNC && fCLK;if (!fInit) {if (fNTFY)
@@ -124,9 +122,6 @@ bool SERVICES_Init(void)if (fREG)REG_Exit (); -if (fLST) -LST_Exit (); -if (fDBG)DBG_Exit ();
Signature · 1 line
1.6.2.4
PATCH 2/4 dspbridge: Change LST_ELEM to list_head entirely
From: Andy Shevchenko <[email protected]>
* Change struct LST_ELEM to struct list_head in whole dsp bridge driver
* Remove useless commentaries
* Minor change in the services/mem.c:
...
struct list_head *last = &mMan.lst.head;
struct list_head *curr = last->next; /* was: mMan.lst.head.next */...
--- arch/arm/plat-omap/include/dspbridge/_chnl_sm.h | 2 +- arch/arm/plat-omap/include/dspbridge/list.h | 1 - drivers/dsp/bridge/pmgr/cmm.c | 51 +++++++++++------------ drivers/dsp/bridge/pmgr/dev.c | 8 ++-- drivers/dsp/bridge/rmgr/drv.c | 14 +++--- drivers/dsp/bridge/rmgr/node.c | 10 ++-- drivers/dsp/bridge/rmgr/proc.c | 2 +- drivers/dsp/bridge/rmgr/rmm.c | 16 ++++---- drivers/dsp/bridge/services/cfg.c | 2 +- drivers/dsp/bridge/services/mem.c | 26 ++++++------ drivers/dsp/bridge/services/ntfy.c | 12 +++--- drivers/dsp/bridge/wmd/_msg_sm.h | 4 +- drivers/dsp/bridge/wmd/chnl_sm.c | 10 ++-- drivers/dsp/bridge/wmd/io_sm.c | 10 ++-- drivers/dsp/bridge/wmd/msg_sm.c | 20 ++++---- 15 files changed, 93 insertions(+), 95 deletions(-)
arch/arm/plat-omap/include/dspbridge/_chnl_sm.h +1 -1
@@ -164,7 +164,7 @@ struct loadMonStruct {/* I/O Request/completion packet: */ struct CHNL_IRP { -struct LST_ELEM link;/* Link to next CHIRP in queue. */ +struct list_head link;/* Link to next CHIRP in queue. */ /* Buffer to be filled/emptied. (User) */ u8 *pHostUserBuf;/* Buffer to be filled/emptied. (System) */
arch/arm/plat-omap/include/dspbridge/list.h +0 -1
@@ -26,7 +26,6 @@#include <dspbridge/mem.h> #include <linux/list.h> -#define LST_ELEM list_head#define LST_IsEmpty (l) list_empty(&(l)->head)struct LST_LIST {
drivers/dsp/bridge/pmgr/cmm.c +25 -26
166 lines not on this page · raw message
drivers/dsp/bridge/pmgr/dev.c +4 -4
@@ -65,7 +65,7 @@/* The WMD device object: */ struct DEV_OBJECT {/* LST requires "link" to be first field! */ -struct LST_ELEM link;/* Link to next DEV_OBJECT. */ +struct list_head link;/* Link to next DEV_OBJECT. */ u32 devType;/* Device Type */ u32 dwSignature;/* Used for object validation. */ struct CFG_DEVNODE *hDevNode;/* Platform specific device id */
@@ -948,7 +948,7 @@ DSP_STATUS DEV_NotifyClients(struct DEV_OBJECT *hDevObject, u32 ulStatus)for (hProcObject = (DSP_HPROCESSOR )LST_First (pDevObject->procList); hProcObject !=NULL ; hProcObject = (DSP_HPROCESSOR )LST_Next (pDevObject->procList, - (struct LST_ELEM *)hProcObject)) + (struct list_head *)hProcObject))PROC_NotifyClients (hProcObject, (u32 ) ulStatus);return status;
@@ -1205,7 +1205,7 @@ DSP_STATUS DEV_InsertProcObject(struct DEV_OBJECT *hDevObject, *pbAlreadyAttached = true;/* Add DevObject to tail. */ -LST_PutTail (pDevObject->procList, (struct LST_ELEM *)hProcObject); +LST_PutTail (pDevObject->procList, (struct list_head *)hProcObject);GT_1trace (debugMask,GT_ENTER ,"Exiting DEV_InsetProcObject status 0x%x\n" , status);
@@ -1236,7 +1236,7 @@ DSP_STATUS DEV_RemoveProcObject(struct DEV_OBJECT *hDevObject, u32 hProcObject) {DSP_STATUS status =DSP_EFAIL ; -struct LST_ELEM *pCurElem; +struct list_head *pCurElem;struct DEV_OBJECT *pDevObject = (struct DEV_OBJECT *)hDevObject;DBC_Require (IsValidHandle (pDevObject));
drivers/dsp/bridge/rmgr/drv.c +7 -7
@@ -61,7 +61,7 @@ struct DRV_OBJECT {* DRV_ since it is living in this module */ struct DRV_EXT { -struct LST_ELEM link; +struct list_head link;char szString[MAXREGPATHLENGTH ]; };
@@ -812,7 +812,7 @@ u32 DRV_GetNextDevObject(u32 hDevObject)if ((pDrvObject->devList !=NULL ) && !LST_IsEmpty (pDrvObject->devList)) { dwNextDevObject = (u32 )LST_Next (pDrvObject->devList, - (struct LST_ELEM *)hDevObject); + (struct list_head *)hDevObject); } }return dwNextDevObject;
@@ -839,7 +839,7 @@ u32 DRV_GetNextDevExtension(u32 hDevExtension) !LST_IsEmpty(pDrvObject->devNodeString)) { dwDevExtension = (u32 )LST_Next (pDrvObject-> devNodeString, - (struct LST_ELEM *)hDevExtension); + (struct list_head *)hDevExtension); } }
@@ -888,7 +888,7 @@ DSP_STATUS DRV_InsertDevObject(struct DRV_OBJECT *hDRVObject,"Entering DRV_InsertProcObject hDRVObject " "0x%x\n, hDevObject 0x%x\n", hDRVObject, hDevObject); -LST_PutTail (pDRVObject->devList, (struct LST_ELEM *)hDevObject); +LST_PutTail (pDRVObject->devList, (struct list_head *)hDevObject);GT_1trace (curTrace,GT_ENTER ,"Exiting InsertDevObject status 0x%x\n" , status);
@@ -909,7 +909,7 @@ DSP_STATUS DRV_RemoveDevObject(struct DRV_OBJECT *hDRVObject, {DSP_STATUS status =DSP_EFAIL ;struct DRV_OBJECT *pDRVObject = (struct DRV_OBJECT *)hDRVObject; -struct LST_ELEM *pCurElem; +struct list_head *pCurElem;DBC_Require (cRefs >0 );DBC_Require (MEM_IsValidHandle (pDRVObject,SIGNATURE ));
@@ -974,7 +974,7 @@ DSP_STATUS DRV_RequestResources(u32 dwContext, u32 *pDevNodeString)/* Update the Driver Object List */ *pDevNodeString = (u32 )pszdevNode->szString;LST_PutTail (pDRVObject->devNodeString, - (struct LST_ELEM *)pszdevNode); + (struct list_head *)pszdevNode); }else {GT_0trace (curTrace,GT_7CLASS ,"Failed to Allocate Memory devNodeString " );
@@ -1048,7 +1048,7 @@ DSP_STATUS DRV_ReleaseResources(u32 dwContext, struct DRV_OBJECT *hDrvObject)/* Found it */ /* Delete from the Driver object list */ LST_RemoveElem (pDRVObject->devNodeString, - (struct LST_ELEM *)pszdevNode); + (struct list_head *)pszdevNode);MEM_Free ((void *) pszdevNode);break ; }
drivers/dsp/bridge/rmgr/node.c +5 -5
@@ -190,7 +190,7 @@ struct STREAM {* ======== NODE_OBJECT ======== */ struct NODE_OBJECT { -struct LST_ELEM listElem; +struct list_head listElem;u32 dwSignature;/* For object validation */ struct NODE_MGR *hNodeMgr;/* The manager of this node */ struct PROC_OBJECT *hProcessor;/* Back pointer to processor */
@@ -665,14 +665,14 @@ func_cont:if (DSP_SUCCEEDED (status)) {/* Add the node to the node manager's list of allocated * nodes. */ -LST_InitElem ((struct LST_ELEM *)pNode); +LST_InitElem ((struct list_head *)pNode);NODE_SetState (pNode,NODE_ALLOCATED ); status =SYNC_EnterCS (hNodeMgr->hSync);if (DSP_SUCCEEDED (status)) {LST_PutTail (hNodeMgr->nodeList, - (struct LST_ELEM *) pNode); + (struct list_head *) pNode); ++(hNodeMgr->uNumNodes); }
@@ -1632,7 +1632,7 @@ func_cont1: }/* Free host side resources even if a failure occurred */ /* Remove node from hNodeMgr->nodeList */ -LST_RemoveElem (hNodeMgr->nodeList, (struct LST_ELEM *) hNode); +LST_RemoveElem (hNodeMgr->nodeList, (struct list_head *) hNode); hNodeMgr->uNumNodes--;/* Decrement count of nodes created on DSP */ if ((state != NODE_ALLOCATED) || ((state == NODE_ALLOCATED) &&
@@ -1725,7 +1725,7 @@ DSP_STATUS NODE_EnumNodes(struct NODE_MGR *hNodeMgr, IN DSP_HNODE *aNodeTab, aNodeTab[i] = hNode; hNode = (struct NODE_OBJECT *)LST_Next (hNodeMgr->nodeList, - (struct LST_ELEM *)hNode); + (struct list_head *)hNode); } *puAllocated = *puNumNodes = hNodeMgr->uNumNodes; }
drivers/dsp/bridge/rmgr/proc.c +1 -1
@@ -80,7 +80,7 @@ static struct GT_Mask PROC_DebugMask = { NULL, NULL }; /* WCD MGR Mask *//* The PROC_OBJECT structure. */ struct PROC_OBJECT { -struct LST_ELEM link;/* Link to next PROC_OBJECT */ +struct list_head link;/* Link to next PROC_OBJECT */ u32 dwSignature;/* Used for object validation */ struct DEV_OBJECT *hDevObject;/* Device this PROC represents */ u32 hProcess;/* Process owning this Processor */
drivers/dsp/bridge/rmgr/rmm.c +8 -8
@@ -70,7 +70,7 @@ struct RMM_Header {* Keeps track of memory occupied by overlay section. */ struct RMM_OvlySect { -struct LST_ELEM listElem; +struct list_head listElem;u32 addr;/* Start of memory section */ u32 size;/* Length (target MAUs) of section */ s32 page;/* Memory page */
@@ -147,7 +147,7 @@ DSP_STATUS RMM_alloc(struct RMM_TargetObj *target, u32 segid, u32 size, } prevSect = sect; sect = (struct RMM_OvlySect *)LST_Next (target->ovlyList, - (struct LST_ELEM *)sect); + (struct list_head *)sect); }if (DSP_SUCCEEDED (status)) {/* No overlap - allocate list element for new section. */
@@ -155,19 +155,19 @@ DSP_STATUS RMM_alloc(struct RMM_TargetObj *target, u32 segid, u32 size,if (newSect ==NULL ) { status =DSP_EMEMORY ; }else { -LST_InitElem ((struct LST_ELEM *)newSect); +LST_InitElem ((struct list_head *)newSect); newSect->addr = addr; newSect->size = size; newSect->page = segid;if (sect ==NULL ) {/* Put new section at the end of the list */ LST_PutTail (target->ovlyList, - (struct LST_ELEM *)newSect); + (struct list_head *)newSect); }else {/* Put new section just before sect */ LST_InsertBefore (target->ovlyList, - (struct LST_ELEM *)newSect, - (struct LST_ELEM *)sect); + (struct list_head *)newSect, + (struct list_head *)sect); } } }
@@ -374,12 +374,12 @@ bool RMM_free(struct RMM_TargetObj *target, u32 segid, u32 addr, u32 size,DBC_Assert (size == sect->size);/* Remove from list */ LST_RemoveElem (target->ovlyList, - (struct LST_ELEM *)sect); + (struct list_head *)sect);MEM_Free (sect);break ; } sect = (struct RMM_OvlySect *)LST_Next (target->ovlyList, - (struct LST_ELEM *)sect); + (struct list_head *)sect); }if (sect ==NULL ) retVal = false;
drivers/dsp/bridge/services/cfg.c +1 -1
@@ -33,7 +33,7 @@#include <dspbridge/list.h> struct DRV_EXT { -struct LST_ELEM link; +struct list_head link;char szString[MAXREGPATHLENGTH ]; };
drivers/dsp/bridge/services/mem.c +13 -13
@@ -60,7 +60,7 @@ static struct extPhysMemPool extMemPool;/* Information about each element allocated on heap */ struct memInfo { -struct LST_ELEM link;/* Must be first */ +struct list_head link;/* Must be first */ size_t size;void *caller;u32 dwSignature;/* Should be last */
@@ -84,7 +84,7 @@ 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 LST_ELEM *pElem) +static inline void MLST_PutTail (struct LST_LIST *pList,struct list_head *pElem) { pElem->prev = pList->head.prev; pElem->next = &pList->head;
@@ -93,7 +93,7 @@ static inline void MLST_PutTail(struct LST_LIST *pList, struct LST_ELEM *pElem) }static inline void MLST_RemoveElem (struct LST_LIST *pList, -struct LST_ELEM *pCurElem) +struct list_head *pCurElem) { pCurElem->prev->next = pCurElem->next; pCurElem->next->prev = pCurElem->prev;
@@ -104,8 +104,8 @@ static inline void MLST_RemoveElem(struct LST_LIST *pList,static void MEM_Check (void ) {struct memInfo *pMem; -struct LST_ELEM *last = &mMan.lst.head; -struct LST_ELEM *curr = mMan.lst.head.next; +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" );
@@ -121,7 +121,7 @@ static void MEM_Check(void) (u32 ) pMem +sizeof (struct memInfo ), pMem->size, pMem->caller);MLST_RemoveElem (&mMan.lst, - (struct LST_ELEM *) pMem); + (struct list_head *)pMem);kfree (pMem); }else { GT_1trace(MEM_debugMask, GT_7CLASS,
@@ -257,7 +257,7 @@ void *MEM_Alloc(u32 cBytes, enum MEM_POOLATTRS type)spin_lock (&mMan.lock);MLST_PutTail (&mMan.lst, - (struct LST_ELEM *)pMem); + (struct list_head *)pMem);spin_unlock (&mMan.lock); pMem = (void *)((u32)pMem +
@@ -277,7 +277,7 @@ void *MEM_Alloc(u32 cBytes, enum MEM_POOLATTRS type)spin_lock (&mMan.lock);MLST_PutTail (&mMan.lst, - (struct LST_ELEM *) pMem); + (struct list_head *)pMem);spin_unlock (&mMan.lock); pMem = (void *)((u32)pMem +
@@ -367,7 +367,7 @@ void *MEM_Calloc(u32 cBytes, enum MEM_POOLATTRS type) pMem->dwSignature = memInfoSign;spin_lock (&mMan.lock);MLST_PutTail (&mMan.lst, - (struct LST_ELEM *) pMem); + (struct list_head *)pMem);spin_unlock (&mMan.lock); pMem = (void *)((u32 )pMem +sizeof (struct memInfo ));
@@ -388,8 +388,8 @@ void *MEM_Calloc(u32 cBytes, enum MEM_POOLATTRS type) pMem->caller =__builtin_return_address (0 ); pMem->dwSignature = memInfoSign;spin_lock (&mMan.lock); -MLST_PutTail (&mMan.lst, (struct LST_ELEM *) - pMem); +MLST_PutTail (&mMan.lst, + (struct list_head *)pMem);spin_unlock (&mMan.lock); pMem = (void *)((u32 )pMem +sizeof (struct memInfo ));
@@ -484,7 +484,7 @@ void MEM_VFree(IN void *pMemBuf)if (pMem->dwSignature == memInfoSign) {spin_lock (&mMan.lock);MLST_RemoveElem (&mMan.lst, - (struct LST_ELEM *) pMem); + (struct list_head *)pMem);spin_unlock (&mMan.lock); pMem->dwSignature =0 ;vfree (pMem);
@@ -523,7 +523,7 @@ void MEM_Free(IN void *pMemBuf)if (pMem->dwSignature == memInfoSign) {spin_lock (&mMan.lock);MLST_RemoveElem (&mMan.lst, - (struct LST_ELEM *) pMem); + (struct list_head *)pMem);spin_unlock (&mMan.lock); pMem->dwSignature =0 ;kfree (pMem);
drivers/dsp/bridge/services/ntfy.c +6 -6
@@ -53,7 +53,7 @@ struct NTFY_OBJECT {* This object will be created when a client registers for events. */ struct NOTIFICATION { -struct LST_ELEM listElem; +struct list_head listElem;u32 uEventMask;/* Events to be notified about */ u32 uNotifyType;/* Type of notification to be sent */
@@ -192,7 +192,7 @@ void NTFY_Notify(struct NTFY_OBJECT *hNtfy, u32 uEventMask) } pNotify = (struct NOTIFICATION *)LST_Next (hNtfy->notifyList, - (struct LST_ELEM *)pNotify); + (struct list_head *)pNotify); } (void )SYNC_LeaveCS (hNtfy->hSync);
@@ -241,7 +241,7 @@ DSP_STATUS NTFY_Register(struct NTFY_OBJECT *hNtfy,break ; } pNotify = (struct NOTIFICATION *)LST_Next (hNtfy->notifyList, - (struct LST_ELEM *)pNotify); + (struct list_head *)pNotify); }if (pNotify ==NULL ) {/* Not registered */
@@ -256,7 +256,7 @@ DSP_STATUS NTFY_Register(struct NTFY_OBJECT *hNtfy, }if (DSP_SUCCEEDED (status)) { -LST_InitElem ((struct LST_ELEM *) pNotify); +LST_InitElem ((struct list_head *)pNotify);/* If there is more than one notification type, each * type may require its own handler code. */ status =SYNC_OpenEvent (&pNotify->hSync, &syncAttrs);
@@ -266,7 +266,7 @@ DSP_STATUS NTFY_Register(struct NTFY_OBJECT *hNtfy, pNotify->uEventMask = uEventMask; pNotify->uNotifyType = uNotifyType;LST_PutTail (hNtfy->notifyList, - (struct LST_ELEM *)pNotify); + (struct list_head *)pNotify); }else {DeleteNotify (pNotify); }
@@ -276,7 +276,7 @@ DSP_STATUS NTFY_Register(struct NTFY_OBJECT *hNtfy,if (uEventMask ==0 ) {/* Remove from list and free */ LST_RemoveElem (hNtfy->notifyList, - (struct LST_ELEM *)pNotify); + (struct list_head *)pNotify);DeleteNotify (pNotify); }else {/* Update notification mask (type shouldn't change) */
drivers/dsp/bridge/wmd/_msg_sm.h +2 -2
@@ -106,7 +106,7 @@ struct MSG_MGR {* The MSG_QUEUE's hSynEvent gets posted when a message is ready. */ struct MSG_QUEUE { -struct LST_ELEM listElem; +struct list_head listElem;u32 dwSignature;struct MSG_MGR *hMsgMgr;u32 uMaxMsgs;/* Node message depth */
@@ -135,7 +135,7 @@ struct MSG_DSPMSG {* ======== MSG_FRAME ======== */ struct MSG_FRAME { -struct LST_ELEM listElem; +struct list_head listElem;struct MSG_DSPMSG msgData; } ;
drivers/dsp/bridge/wmd/chnl_sm.c +5 -5
@@ -209,7 +209,7 @@ func_cont: pChirp->dwArg = dwArg; pChirp->status = (fIsEOS ?CHNL_IOCSTATEOS :CHNL_IOCSTATCOMPLETE ); -LST_PutTail (pChnl->pIORequests, (struct LST_ELEM *)pChirp); +LST_PutTail (pChnl->pIORequests, (struct list_head *)pChirp); pChnl->cIOReqs++;DBC_Assert (pChnl->cIOReqs <= pChnl->cChirps);/*
@@ -296,7 +296,7 @@ DSP_STATUS WMD_CHNL_CancelIO(struct CHNL_OBJECT *hChnl) pChirp->cBytes =0 ; pChirp->status |=CHNL_IOCSTATCANCEL ;LST_PutTail (pChnl->pIOCompletions, - (struct LST_ELEM *)pChirp); + (struct list_head *)pChirp); pChnl->cIOCs++; pChnl->cIOReqs--;DBC_Assert (pChnl->cIOReqs >=0 );
@@ -641,8 +641,8 @@ DSP_STATUS WMD_CHNL_GetIOC(struct CHNL_OBJECT *hChnl, u32 dwTimeOut, ioc.dwArg = pChirp->dwArg; ioc.status |= pChirp->status;/* Place the used chirp on the free list: */ -LST_PutTail (pChnl->pFreeList, (struct LST_ELEM *) - pChirp); +LST_PutTail (pChnl->pFreeList, + (struct list_head *)pChirp); }else { ioc.pBuf =NULL ; ioc.cBytes =0 ;
@@ -948,7 +948,7 @@ static struct LST_LIST *CreateChirpList(u32 uChirps)/* Make N chirps and place on queue. */ for (i =0 ; (i < uChirps) && ((pChirp =MakeNewChirp ()) !=NULL ); i++) { -LST_PutTail (pChirpList, (struct LST_ELEM *)pChirp); +LST_PutTail (pChirpList, (struct list_head *)pChirp); }/* If we couldn't allocate all chirps, free those allocated: */
drivers/dsp/bridge/wmd/io_sm.c +5 -5
@@ -1382,8 +1382,8 @@ static void InputMsg(struct IO_MGR *pIOMgr, struct MSG_MGR *hMsgMgr)if (hMsgQueue->msgUsedList && pMsg) { pMsg->msgData = msg;LST_PutTail (hMsgQueue-> - msgUsedList, - (struct LST_ELEM *)pMsg); + msgUsedList, + (struct list_head *)pMsg);NTFY_Notify (hMsgQueue->hNtfy,DSP_NODEMESSAGEREADY ); SYNC_SetEvent(hMsgQueue->
@@ -1404,7 +1404,7 @@ static void InputMsg(struct IO_MGR *pIOMgr, struct MSG_MGR *hMsgMgr)if (!hMsgMgr->queueList || !hMsgQueue) goto func_end; hMsgQueue = (struct MSG_QUEUE *)LST_Next (hMsgMgr-> - queueList, (struct LST_ELEM *)hMsgQueue); + queueList, (struct list_head *)hMsgQueue); } }/* Set the post SWI flag */
@@ -1442,7 +1442,7 @@ static void NotifyChnlComplete(struct CHNL_OBJECT *pChnl,*/ fSignalEvent =LST_IsEmpty (pChnl->pIOCompletions);/* Enqueue the IO completion info for the client */ -LST_PutTail (pChnl->pIOCompletions, (struct LST_ELEM *) pChirp); +LST_PutTail (pChnl->pIOCompletions, (struct list_head *)pChirp); pChnl->cIOCs++;if (pChnl->cIOCs > pChnl->cChirps)
@@ -1600,7 +1600,7 @@ static void OutputMsg(struct IO_MGR *pIOMgr, struct MSG_MGR *hMsgMgr)if (!hMsgMgr->msgFreeList) goto func_end;LST_PutTail (hMsgMgr->msgFreeList, - (struct LST_ELEM *) pMsg); + (struct list_head *)pMsg);SYNC_SetEvent (hMsgMgr->hSyncEvent); }else {DBG_Trace (DBG_LEVEL3 ,"pMsg is NULL\n" );
drivers/dsp/bridge/wmd/msg_sm.c +10 -10
@@ -134,7 +134,7 @@ DSP_STATUS WMD_MSG_CreateQueue(struct MSG_MGR *hMsgMgr, status =DSP_EMEMORY ; goto func_end; } -LST_InitElem ((struct LST_ELEM *) pMsgQ); +LST_InitElem ((struct list_head *)pMsgQ); pMsgQ->uMaxMsgs = uMaxMsgs; pMsgQ->hMsgMgr = hMsgMgr; pMsgQ->hArg = hArg;/* Node handle */
@@ -186,7 +186,7 @@ DSP_STATUS WMD_MSG_CreateQueue(struct MSG_MGR *hMsgMgr,DeleteMsgQueue (pMsgQ, uNumAllocated); }else {LST_PutTail (hMsgMgr->queueList, - (struct LST_ELEM *)pMsgQ); + (struct list_head *)pMsgQ); *phMsgQueue = pMsgQ;/* Signal that free frames are now available */ if (!LST_IsEmpty (hMsgMgr->msgFreeList))
@@ -238,7 +238,7 @@ void WMD_MSG_DeleteQueue(struct MSG_QUEUE *hMsgQueue) }/* Remove message queue from hMsgMgr->queueList */ (void )SYNC_EnterCS (hMsgMgr->hSyncCS); -LST_RemoveElem (hMsgMgr->queueList, (struct LST_ELEM *)hMsgQueue); +LST_RemoveElem (hMsgMgr->queueList, (struct list_head *)hMsgQueue);/* Free the message queue object */ DeleteMsgQueue (hMsgQueue, hMsgQueue->uMaxMsgs);if (!hMsgMgr->msgFreeList)
@@ -285,7 +285,7 @@ DSP_STATUS WMD_MSG_Get(struct MSG_QUEUE *hMsgQueue,if (pMsgFrame !=NULL ) { *pMsg = pMsgFrame->msgData.msg;LST_PutTail (hMsgQueue->msgFreeList, - (struct LST_ELEM *)pMsgFrame); + (struct list_head *)pMsgFrame);if (LST_IsEmpty (hMsgQueue->msgUsedList))SYNC_ResetEvent (hMsgQueue->hSyncEvent);else {
@@ -335,7 +335,7 @@ DSP_STATUS WMD_MSG_Get(struct MSG_QUEUE *hMsgQueue,if (pMsgFrame !=NULL ) { *pMsg = pMsgFrame->msgData.msg;LST_PutTail (hMsgQueue->msgFreeList, - (struct LST_ELEM *)pMsgFrame); + (struct list_head *)pMsgFrame); } } hMsgQueue->refCount--;
@@ -387,8 +387,8 @@ DSP_STATUS WMD_MSG_Put(struct MSG_QUEUE *hMsgQueue,if (pMsgFrame !=NULL ) { pMsgFrame->msgData.msg = *pMsg; pMsgFrame->msgData.dwId = hMsgQueue->dwId; -LST_PutTail (hMsgMgr->msgUsedList, (struct LST_ELEM *) - pMsgFrame); +LST_PutTail (hMsgMgr->msgUsedList, + (struct list_head *)pMsgFrame); hMsgMgr->uMsgsPending++; fPutMsg = true; }
@@ -442,7 +442,7 @@ DSP_STATUS WMD_MSG_Put(struct MSG_QUEUE *hMsgQueue, pMsgFrame->msgData.msg = *pMsg; pMsgFrame->msgData.dwId = hMsgQueue->dwId;LST_PutTail (hMsgMgr->msgUsedList, - (struct LST_ELEM *)pMsgFrame); + (struct list_head *)pMsgFrame); hMsgMgr->uMsgsPending++;/* * Schedule a DPC, to do the actual
@@ -529,8 +529,8 @@ static DSP_STATUS AddNewMsg(struct LST_LIST *msgList) pMsg = (struct MSG_FRAME *)MEM_Calloc (sizeof (struct MSG_FRAME ),MEM_PAGED );if (pMsg !=NULL ) { -LST_InitElem ((struct LST_ELEM *) pMsg); -LST_PutTail (msgList, (struct LST_ELEM *) pMsg); +LST_InitElem ((struct list_head *)pMsg); +LST_PutTail (msgList, (struct list_head *)pMsg); }else { status =DSP_EMEMORY ; }
Signature · 1 line
1.6.2.4
PATCH 3/4 dspbridge: Don't use LST_Create() and LST_Delete()
From: Andy Shevchenko <[email protected]>
Change LST_Create() to the MEM_Calloc() and INIT_LIST_HEAD() pair in optimal way.
Use MEM_Free() instead of LST_Delete(). We can use it without checking because MEM_Free() validates input parameter.
--- arch/arm/plat-omap/include/dspbridge/list.h | 63 --------------------------- drivers/dsp/bridge/pmgr/cmm.c | 27 +++++++---- drivers/dsp/bridge/pmgr/dev.c | 9 +++- drivers/dsp/bridge/rmgr/drv.c | 18 +++++--- drivers/dsp/bridge/rmgr/node.c | 6 ++- drivers/dsp/bridge/rmgr/rmm.c | 7 ++- drivers/dsp/bridge/services/ntfy.c | 6 ++- drivers/dsp/bridge/wmd/chnl_sm.c | 5 +- drivers/dsp/bridge/wmd/msg_sm.c | 29 ++++++++---- 9 files changed, 71 insertions(+), 99 deletions(-)
arch/arm/plat-omap/include/dspbridge/list.h +0 -63
@@ -21,9 +21,6 @@#define LIST_ #include <dspbridge/host_os.h> - -/* MEM_Calloc(), MEM_NONPAGED, MEM_Free() */ -#include <dspbridge/mem.h> #include <linux/list.h> #define LST_IsEmpty (l) list_empty(&(l)->head)
@@ -33,66 +30,6 @@ struct LST_LIST { };/* -* ======== LST_Create ======== -* Purpose: -* Allocates and initializes a circular list. -* Details: -* Uses portable MEM_Calloc() function to allocate a list containing -* a single element and initializes that element to indicate that it -* is the "end of the list" (i.e., the list is empty). -* An empty list is indicated by the "next" pointer in the element -* at the head of the list pointing to the head of the list, itself. -* Parameters: -* Returns: -* Pointer to beginning of created list (success) -* NULL --> Allocation failed -* Requires: -* LST initialized. -* Ensures: -* Notes: -* The created list contains a single element. This element is the -* "empty" element, because its "next" and "prev" pointers point at -* the same location (the element itself). -*/ -static inline struct LST_LIST *LST_Create (void ) -{ -struct LST_LIST *pList; - - pList = (struct LST_LIST *)MEM_Calloc (sizeof (struct LST_LIST ), -MEM_NONPAGED ); -if (pList !=NULL ) -INIT_LIST_HEAD (&pList->head); - -return pList; -} - -/* -* ======== LST_Delete ======== -* Purpose: -* Removes a list by freeing its control structure's memory space. -* Details: -* Uses portable MEM_Free() function to deallocate the memory -* block pointed at by the input parameter. -* Parameters: -* pList: Pointer to list control structure of list to be deleted -* Returns: -* Void -* Requires: -* - LST initialized. -* - pList != NULL. -* Ensures: -* Notes: -* Must ONLY be used for empty lists, because it does not walk the -* chain of list elements. Calling this function on a non-empty list -* will cause a memory leak. -*/ -static inline void LST_Delete (struct LST_LIST *pList) -{ -if (pList !=NULL ) -MEM_Free (pList); -} - -/* * ======== LST_First ======== * Purpose: * Returns a pointer to the first element of the list, or NULL if the list
drivers/dsp/bridge/pmgr/cmm.c +17 -10
@@ -296,12 +296,15 @@ DSP_STATUS CMM_Create(OUT struct CMM_OBJECT **phCmmMgr,* MEM_AllocObject */ if (DSP_SUCCEEDED (status)) {/* create node free list */ - pCmmObject->pNodeFreeListHead =LST_Create (); + pCmmObject->pNodeFreeListHead =MEM_Calloc (sizeof (struct +LST_LIST ),MEM_NONPAGED );if (pCmmObject->pNodeFreeListHead ==NULL ) {GT_0trace (CMM_debugMask,GT_7CLASS , -"CMM_Create: LST_Create() " -"failed \n" ); +"CMM_Create: Out of memory\n" ); status =DSP_EMEMORY ; + }else { +INIT_LIST_HEAD (&pCmmObject->pNodeFreeListHead-> + head); } }if (DSP_SUCCEEDED (status))
@@ -370,7 +373,7 @@ DSP_STATUS CMM_Destroy(struct CMM_OBJECT *hCmmMgr, bool bForce)MEM_Free (pNode); }/* delete NodeFreeList list */ -LST_Delete (pCmmMgr->pNodeFreeListHead); +MEM_Free (pCmmMgr->pNodeFreeListHead); }SYNC_LeaveCS (pCmmMgr->hCmmLock);if (DSP_SUCCEEDED (status)) {
@@ -635,25 +638,29 @@ DSP_STATUS CMM_RegisterGPPSMSeg(struct CMM_OBJECT *hCmmMgr, u32 dwGPPBasePA,/* return the actual segment identifier */ *pulSegId = (u32 ) nSlot +1 ;/* create memory free list */ - pSMA->pFreeListHead =LST_Create (); + pSMA->pFreeListHead =MEM_Calloc (sizeof (struct +LST_LIST ),MEM_NONPAGED );if (pSMA->pFreeListHead ==NULL ) {GT_0trace (CMM_debugMask,GT_7CLASS ,"CMM_RegisterGPPSMSeg: " -"Out Of Memory \n" ); +"Out Of Memory 1\n" ); status =DSP_EMEMORY ; goto func_end; } +INIT_LIST_HEAD (&pSMA->pFreeListHead->head); }if (DSP_SUCCEEDED (status)) {/* create memory in-use list */ - pSMA->pInUseListHead =LST_Create (); + pSMA->pInUseListHead =MEM_Calloc (sizeof (struct +LST_LIST ),MEM_NONPAGED );if (pSMA->pInUseListHead ==NULL ) {GT_0trace (CMM_debugMask,GT_7CLASS ,"CMM_RegisterGPPSMSeg: " -"LST_Create failed\n" ); +"Out of memory 2\n" ); status =DSP_EMEMORY ; goto func_end; } +INIT_LIST_HEAD (&pSMA->pInUseListHead->head); }if (DSP_SUCCEEDED (status)) {/* Get a mem node for this hunk-o-memory */
@@ -763,7 +770,7 @@ static void UnRegisterGPPSMSeg(struct CMM_ALLOCATOR *pSMA)/* next node. */ pCurNode = pNextNode; } -LST_Delete (pSMA->pFreeListHead);/* delete freelist */ +MEM_Free (pSMA->pFreeListHead);/* delete freelist */ /* free nodes on InUse list */ pCurNode = (struct CMM_MNODE *)LST_First (pSMA->pInUseListHead);while (pCurNode) {
@@ -776,7 +783,7 @@ static void UnRegisterGPPSMSeg(struct CMM_ALLOCATOR *pSMA)/* next node. */ pCurNode = pNextNode; } -LST_Delete (pSMA->pInUseListHead);/* delete InUse list */ +MEM_Free (pSMA->pInUseListHead);/* delete InUse list */ }if ((void *) pSMA->dwVmBase !=NULL )MEM_UnmapLinearAddress ((void *) pSMA->dwVmBase);
drivers/dsp/bridge/pmgr/dev.c +6 -3
@@ -277,11 +277,14 @@ DSP_STATUS DEV_CreateDevice(OUT struct DEV_OBJECT **phDevObject, }/* Create the Processor List */ if (DSP_SUCCEEDED (status)) { - pDevObject->procList =LST_Create (); + pDevObject->procList =MEM_Calloc (sizeof (struct LST_LIST ), +MEM_NONPAGED );if (!(pDevObject->procList)) { status =DSP_EFAIL ;GT_0trace (debugMask,GT_7CLASS ,"DEV_Create: " "Failed to Create Proc List" ); + }else { +INIT_LIST_HEAD (&pDevObject->procList->head); } }/* If all went well, return a handle to the dev object;
@@ -293,7 +296,7 @@ DSP_STATUS DEV_CreateDevice(OUT struct DEV_OBJECT **phDevObject, "0x%x\n", pDevObject); }else {if (pDevObject && pDevObject->procList) -LST_Delete (pDevObject->procList); +MEM_Free (pDevObject->procList);if (pDevObject && pDevObject->hCodMgr)COD_Delete (pDevObject->hCodMgr);
@@ -449,7 +452,7 @@ DSP_STATUS DEV_DestroyDevice(struct DEV_OBJECT *hDevObject) status =DSP_EFAIL ;if (DSP_SUCCEEDED (status)) {if (pDevObject->procList) { -LST_Delete (pDevObject->procList); +MEM_Free (pDevObject->procList); pDevObject->procList =NULL ; }
drivers/dsp/bridge/rmgr/drv.c +12 -6
@@ -606,15 +606,21 @@ DSP_STATUS DRV_Create(OUT struct DRV_OBJECT **phDRVObject) MEM_AllocObject(pDRVObject, struct DRV_OBJECT, SIGNATURE);if (pDRVObject) {/* Create and Initialize List of device objects */ - pDRVObject->devList =LST_Create (); + pDRVObject->devList =MEM_Calloc (sizeof (struct LST_LIST ), +MEM_NONPAGED );if (pDRVObject->devList) {/* Create and Initialize List of device Extension */ - pDRVObject->devNodeString =LST_Create (); + pDRVObject->devNodeString =MEM_Calloc (sizeof (struct +LST_LIST ),MEM_NONPAGED );if (!(pDRVObject->devNodeString)) { status =DSP_EFAIL ;GT_0trace (curTrace,GT_7CLASS ,"Failed to Create DRV_EXT list " );MEM_FreeObject (pDRVObject); + }else { +INIT_LIST_HEAD (&pDRVObject->devNodeString-> + head); +INIT_LIST_HEAD (&pDRVObject->devList->head); } }else { status =DSP_EMEMORY ;
@@ -689,11 +695,11 @@ DSP_STATUS DRV_Destroy(struct DRV_OBJECT *hDRVObject)*/ if (pDRVObject->devList) {/* Could assert if the list is not empty */ -LST_Delete (pDRVObject->devList); +MEM_Free (pDRVObject->devList); }if (pDRVObject->devNodeString) {/* Could assert if the list is not empty */ -LST_Delete (pDRVObject->devNodeString); +MEM_Free (pDRVObject->devNodeString); }MEM_FreeObject (pDRVObject);/* Update the DRV Object in Registry to be 0 */
@@ -933,7 +939,7 @@ DSP_STATUS DRV_RemoveDevObject(struct DRV_OBJECT *hDRVObject, }/* Remove list if empty. */ if (LST_IsEmpty (pDRVObject->devList)) { -LST_Delete (pDRVObject->devList); +MEM_Free (pDRVObject->devList); pDRVObject->devList =NULL ; } DBC_Ensure((pDRVObject->devList == NULL) ||
@@ -1054,7 +1060,7 @@ DSP_STATUS DRV_ReleaseResources(u32 dwContext, struct DRV_OBJECT *hDrvObject) }/* Delete the List if it is empty */ if (LST_IsEmpty (pDRVObject->devNodeString)) { -LST_Delete (pDRVObject->devNodeString); +MEM_Free (pDRVObject->devNodeString); pDRVObject->devNodeString =NULL ; } }
drivers/dsp/bridge/rmgr/node.c +4 -2
@@ -1380,7 +1380,8 @@ DSP_STATUS NODE_CreateMgr(OUT struct NODE_MGR **phNodeMgr, MEM_AllocObject(pNodeMgr, struct NODE_MGR, NODEMGR_SIGNATURE);if (pNodeMgr) { pNodeMgr->hDevObject = hDevObject; - pNodeMgr->nodeList =LST_Create (); + pNodeMgr->nodeList =MEM_Calloc (sizeof (struct LST_LIST ), +MEM_NONPAGED ); pNodeMgr->pipeMap =GB_create (MAXPIPES ); pNodeMgr->pipeDoneMap =GB_create (MAXPIPES ); if (pNodeMgr->nodeList == NULL || pNodeMgr->pipeMap == NULL ||
@@ -1390,6 +1391,7 @@ DSP_STATUS NODE_CreateMgr(OUT struct NODE_MGR **phNodeMgr,"NODE_CreateMgr: Memory " "allocation failed\n"); }else { +INIT_LIST_HEAD (&pNodeMgr->nodeList->head); status =NTFY_Create (&pNodeMgr->hNtfy); } pNodeMgr->uNumCreated =0 ;
@@ -2841,7 +2843,7 @@ static void DeleteNodeMgr(struct NODE_MGR *hNodeMgr)DeleteNode (hNode,NULL );DBC_Assert (LST_IsEmpty (hNodeMgr->nodeList)); -LST_Delete (hNodeMgr->nodeList); +MEM_Free (hNodeMgr->nodeList); }if (hNodeMgr->hNtfy)NTFY_Delete (hNodeMgr->hNtfy);
drivers/dsp/bridge/rmgr/rmm.c +5 -2
@@ -254,11 +254,14 @@ DSP_STATUS RMM_create(struct RMM_TargetObj **pTarget, func_cont:/* Initialize overlay memory list */ if (DSP_SUCCEEDED (status)) { - target->ovlyList =LST_Create (); + target->ovlyList =MEM_Calloc (sizeof (struct LST_LIST ), +MEM_NONPAGED );if (target->ovlyList ==NULL ) {GT_0trace (RMM_debugMask,GT_6CLASS ,"RMM_create: Memory allocation failed\n" ); status =DSP_EMEMORY ; + }else { +INIT_LIST_HEAD (&target->ovlyList->head); } }
@@ -301,7 +304,7 @@ void RMM_delete(struct RMM_TargetObj *target)MEM_Free (pSect); }DBC_Assert (LST_IsEmpty (target->ovlyList)); -LST_Delete (target->ovlyList); +MEM_Free (target->ovlyList); }if (target->freeList !=NULL ) {
drivers/dsp/bridge/services/ntfy.c +4 -2
@@ -93,12 +93,14 @@ DSP_STATUS NTFY_Create(struct NTFY_OBJECT **phNtfy) status =SYNC_InitializeDPCCS (&pNtfy->hSync);if (DSP_SUCCEEDED (status)) { - pNtfy->notifyList =LST_Create (); + pNtfy->notifyList =MEM_Calloc (sizeof (struct LST_LIST ), +MEM_NONPAGED );if (pNtfy->notifyList ==NULL ) { (void )SYNC_DeleteCS (pNtfy->hSync);MEM_FreeObject (pNtfy); status =DSP_EMEMORY ; }else { +INIT_LIST_HEAD (&pNtfy->notifyList->head); *phNtfy = pNtfy; } }
@@ -131,7 +133,7 @@ void NTFY_Delete(struct NTFY_OBJECT *hNtfy)DeleteNotify (pNotify); }DBC_Assert (LST_IsEmpty (hNtfy->notifyList)); -LST_Delete (hNtfy->notifyList); +MEM_Free (hNtfy->notifyList); }if (hNtfy->hSync) (void )SYNC_DeleteCS (hNtfy->hSync);
drivers/dsp/bridge/wmd/chnl_sm.c +3 -2
@@ -942,9 +942,10 @@ static struct LST_LIST *CreateChirpList(u32 uChirps)struct CHNL_IRP *pChirp;u32 i; - pChirpList =LST_Create (); + pChirpList =MEM_Calloc (sizeof (struct LST_LIST ),MEM_NONPAGED );if (pChirpList) { +INIT_LIST_HEAD (&pChirpList->head);/* Make N chirps and place on queue. */ for (i =0 ; (i < uChirps) && ((pChirp =MakeNewChirp ()) !=NULL ); i++) {
@@ -973,7 +974,7 @@ static void FreeChirpList(struct LST_LIST *pChirpList)while (!LST_IsEmpty (pChirpList))MEM_Free (LST_GetHead (pChirpList)); -LST_Delete (pChirpList); +MEM_Free (pChirpList); }/*
drivers/dsp/bridge/wmd/msg_sm.c +20 -9
@@ -77,18 +77,25 @@ DSP_STATUS WMD_MSG_Create(OUT struct MSG_MGR **phMsgMgr, pMsgMgr->onExit = msgCallback; pMsgMgr->hIOMgr = hIOMgr;/* List of MSG_QUEUEs */ - pMsgMgr->queueList =LST_Create (); + pMsgMgr->queueList =MEM_Calloc (sizeof (struct LST_LIST ), +MEM_NONPAGED );/* Queues of message frames for messages to the DSP. Message * frames will only be added to the free queue when a * MSG_QUEUE object is created. */ - pMsgMgr->msgFreeList =LST_Create (); - pMsgMgr->msgUsedList =LST_Create (); + pMsgMgr->msgFreeList =MEM_Calloc (sizeof (struct LST_LIST ), +MEM_NONPAGED ); + pMsgMgr->msgUsedList =MEM_Calloc (sizeof (struct LST_LIST ), +MEM_NONPAGED );if (pMsgMgr->queueList ==NULL || pMsgMgr->msgFreeList ==NULL || - pMsgMgr->msgUsedList ==NULL ) + pMsgMgr->msgUsedList ==NULL ) { status =DSP_EMEMORY ; -else + }else { +INIT_LIST_HEAD (&pMsgMgr->queueList->head); +INIT_LIST_HEAD (&pMsgMgr->msgFreeList->head); +INIT_LIST_HEAD (&pMsgMgr->msgUsedList->head); status =SYNC_InitializeDPCCS (&pMsgMgr->hSyncCS); + }/* Create an event to be used by WMD_MSG_Put() in waiting * for an available free frame from the message manager. */
@@ -140,10 +147,14 @@ DSP_STATUS WMD_MSG_CreateQueue(struct MSG_MGR *hMsgMgr, pMsgQ->hArg = hArg;/* Node handle */ pMsgQ->dwId = dwId;/* Node env (not valid yet) */ /* Queues of Message frames for messages from the DSP */ - pMsgQ->msgFreeList =LST_Create (); - pMsgQ->msgUsedList =LST_Create (); + pMsgQ->msgFreeList =MEM_Calloc (sizeof (struct LST_LIST ),MEM_NONPAGED ); + pMsgQ->msgUsedList =MEM_Calloc (sizeof (struct LST_LIST ),MEM_NONPAGED );if (pMsgQ->msgFreeList ==NULL || pMsgQ->msgUsedList ==NULL ) status =DSP_EMEMORY ; +else { +INIT_LIST_HEAD (&pMsgQ->msgFreeList->head); +INIT_LIST_HEAD (&pMsgQ->msgUsedList->head); + }/* Create event that will be signalled when a message from * the DSP is available. */
@@ -548,7 +559,7 @@ static void DeleteMsgMgr(struct MSG_MGR *hMsgMgr)if (hMsgMgr->queueList) {if (LST_IsEmpty (hMsgMgr->queueList)) { -LST_Delete (hMsgMgr->queueList); +MEM_Free (hMsgMgr->queueList); hMsgMgr->queueList =NULL ; } }
@@ -646,7 +657,7 @@ static void FreeMsgList(struct LST_LIST *msgList)DBC_Assert (LST_IsEmpty (msgList)); -LST_Delete (msgList); +MEM_Free (msgList); func_end:return ; }
Signature · 1 line
1.6.2.4
PATCH 4/4 DSPBRIDGE: OSAL: Remove extra include directive
From: Andy Shevchenko <[email protected]>
Including the list.h in some files looks redundant. So, remove those lines.
--- drivers/dsp/bridge/pmgr/chnl.c | 1 - drivers/dsp/bridge/pmgr/dmm.c | 1 - drivers/dsp/bridge/pmgr/msg.c | 1 - drivers/dsp/bridge/services/cfg.c | 1 - drivers/dsp/bridge/services/services.c | 1 - 5 files changed, 0 insertions(+), 5 deletions(-)
drivers/dsp/bridge/pmgr/chnl.c +0 -1
@@ -31,7 +31,6 @@/* ----------------------------------- OS Adaptation Layer */ #include <dspbridge/cfg.h> -#include <dspbridge/list.h> #include <dspbridge/mem.h> #include <dspbridge/sync.h>
drivers/dsp/bridge/pmgr/dmm.c +0 -1
@@ -34,7 +34,6 @@#include <dspbridge/gt.h> /* ----------------------------------- OS Adaptation Layer */ -#include <dspbridge/list.h> #include <dspbridge/mem.h> #include <dspbridge/sync.h>
drivers/dsp/bridge/pmgr/msg.c +0 -1
@@ -29,7 +29,6 @@#include <dspbridge/gt.h> /* ----------------------------------- OS Adaptation Layer */ -#include <dspbridge/list.h> #include <dspbridge/mem.h> /* ----------------------------------- Mini Driver */
drivers/dsp/bridge/services/cfg.c +0 -1
@@ -30,7 +30,6 @@/* ----------------------------------- This */ #include <dspbridge/cfg.h> -#include <dspbridge/list.h> struct DRV_EXT {struct list_head link;
drivers/dsp/bridge/services/services.c +0 -1
@@ -29,7 +29,6 @@/* ----------------------------------- OS Adaptation Layer */ #include <dspbridge/cfg.h> #include <dspbridge/dbg.h> -#include <dspbridge/list.h> #include <dspbridge/mem.h> #include <dspbridge/ntfy.h> #include <dspbridge/reg.h>
Signature · 1 line
1.6.2.4
Re: [PATCH 4/4] DSPBRIDGE: OSAL: Remove extra include directive
Quoted 5 lines · Omar
From: Andy Shevchenko<[email protected]>
Including the
list.hin some files looks redundant. So, remove those lines.Signed-off-by Andy Shevchenko<[email protected]>
Quoted 8 lines
--- drivers/dsp/bridge/pmgr/chnl.c | 1 - drivers/dsp/bridge/pmgr/dmm.c | 1 - drivers/dsp/bridge/pmgr/msg.c | 1 - drivers/dsp/bridge/services/cfg.c | 1 - drivers/dsp/bridge/services/services.c | 1 - 5 files changed, 0 insertions(+), 5 deletions(-)
Pushed to dspbridge.
- omar
Re: [PATCH 3/4] dspbridge: Don't use LST_Create() and LST_Delete()
In reply to Omar Ramirez LunaQuoted 8 lines · Omar
From: Andy Shevchenko<[email protected]>
Change
LST_Create()to theMEM_Calloc()andINIT_LIST_HEAD()pair in optimal way.Use
MEM_Free()instead ofLST_Delete(). We can use it without checking becauseMEM_Free()validates input parameter.Signed-off-by Andy Shevchenko<[email protected]>
Quoted 12 lines
--- arch/arm/plat-omap/include/dspbridge/list.h | 63 --------------------------- drivers/dsp/bridge/pmgr/cmm.c | 27 +++++++---- drivers/dsp/bridge/pmgr/dev.c | 9 +++- drivers/dsp/bridge/rmgr/drv.c | 18 +++++--- drivers/dsp/bridge/rmgr/node.c | 6 ++- drivers/dsp/bridge/rmgr/rmm.c | 7 ++- drivers/dsp/bridge/services/ntfy.c | 6 ++- drivers/dsp/bridge/wmd/chnl_sm.c | 5 +- drivers/dsp/bridge/wmd/msg_sm.c | 29 ++++++++---- 9 files changed, 71 insertions(+), 99 deletions(-)
Pushed to dspbridge.
- omar
Re: [PATCH 2/4] dspbridge: Change LST_ELEM to list_head entirely
In reply to Omar Ramirez LunaQuoted 11 lines · Omar
From: Andy Shevchenko<[email protected]>
* Change struct
LST_ELEMto structlist_headin whole dsp bridge driver
* Remove useless commentaries
* Minor change in theservices/mem.c:... struct list_head *last =&mMan.lst.head; struct list_head *curr = last->next; /* was: mMan.lst.head.next */ ...Signed-off-by Andy Shevchenko<[email protected]>
Quoted 9 lines
--- arch/arm/plat-omap/include/dspbridge/_chnl_sm.h | 2 +- arch/arm/plat-omap/include/dspbridge/list.h | 1 - drivers/dsp/bridge/pmgr/cmm.c | 51 +++++++++++------------ drivers/dsp/bridge/pmgr/dev.c | 8 ++-- drivers/dsp/bridge/rmgr/drv.c | 14 +++--- drivers/dsp/bridge/rmgr/node.c | 10 ++-- drivers/dsp/bridge/rmgr/proc.c | 2 +- drivers/dsp/bridge/rmgr/rmm.c | 16 ++++----
Quoted 9 lines
drivers/dsp/bridge/services/cfg.c | 2 +- drivers/dsp/bridge/services/mem.c | 26 ++++++------ drivers/dsp/bridge/services/ntfy.c | 12 +++--- drivers/dsp/bridge/wmd/_msg_sm.h | 4 +- drivers/dsp/bridge/wmd/chnl_sm.c | 10 ++-- drivers/dsp/bridge/wmd/io_sm.c | 10 ++-- drivers/dsp/bridge/wmd/msg_sm.c | 20 ++++---- 15 files changed, 93 insertions(+), 95 deletions(-)
Pushed to dspbridge.
- omar
Quoted 15 lines · Omar
From: Andy Shevchenko<[email protected]>
* Remove
LST_Init()andLST_Exit()calls because they are doing nothing except tracing, Thus, remove tracing as well.* Remove DBC_* calls. It's internal kernel business whether to have those assertions.
* Move methods from
list.cas inline functions to thelist.h.* Switch to
list_headstructure instead ofLST_ELEM:
- defineLST_ELEMaslist_headvia macro
- substituteLST_ELEMbylist_head
- remove redudant code that useshead->selfpointer
Quoted 5 lines
* Remove extra local variables.
* Use native list methods where it's possible inside the
list.h.Signed-off-by Andy Shevchenko<[email protected]>
Quoted 9 lines
--- arch/arm/plat-omap/include/dspbridge/list.h | 128 ++++++++------ drivers/dsp/bridge/Makefile | 2 +- drivers/dsp/bridge/services/list.c | 246 --------------------------- drivers/dsp/bridge/services/mem.c | 2 - drivers/dsp/bridge/services/services.c | 9 +- 5 files changed, 78 insertions(+), 309 deletions(-)delete mode 100644
drivers/dsp/bridge/services/list.c
Pushed to dspbridge.
- omar