From: Andy Shevchenko <andy.shevchenko@gmail.com>
To: linux-omap@vger.kernel.org
Cc: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
Subject: [PATCH 1/4] DSPBRIDGE: Get rid of services/list.c (step 1)
Date: Thu, 3 Sep 2009 12:06:11 +0300 [thread overview]
Message-ID: <1251968774-25380-2-git-send-email-andy.shevchenko@gmail.com> (raw)
In-Reply-To: <1251968774-25380-1-git-send-email-andy.shevchenko@gmail.com>
From: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
* 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.
* Switch to list_head structure instead of LST_ELEM. Remove redudant code that
uses head->self pointer.
* Use native list methods where it's possible in the list.c.
Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
---
arch/arm/plat-omap/include/dspbridge/list.h | 43 +----------
drivers/dsp/bridge/services/list.c | 108 +-------------------------
drivers/dsp/bridge/services/mem.c | 2 -
drivers/dsp/bridge/services/services.c | 9 +--
4 files changed, 10 insertions(+), 152 deletions(-)
diff --git a/arch/arm/plat-omap/include/dspbridge/list.h b/arch/arm/plat-omap/include/dspbridge/list.h
index 2e3f995..f9bbd13 100644
--- a/arch/arm/plat-omap/include/dspbridge/list.h
+++ b/arch/arm/plat-omap/include/dspbridge/list.h
@@ -24,11 +24,9 @@
* Public Functions:
* LST_Create
* LST_Delete
- * LST_Exit
* LST_First
* LST_GetHead
* LST_InitElem
- * LST_Init
* LST_InsertBefore
* LST_IsEmpty
* LST_Next
@@ -51,14 +49,10 @@
#define LIST_
#include <dspbridge/host_os.h>
+#include <linux/list.h>
-#define LST_IsEmpty(l) (((l)->head.next == &(l)->head))
-
- 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;
@@ -111,20 +105,6 @@
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);
-
-/*
* ======== LST_First ========
* Purpose:
* Returns a pointer to the first element of the list, or NULL if the list
@@ -160,7 +140,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:
@@ -172,19 +151,6 @@
extern struct LST_ELEM *LST_GetHead(IN struct LST_LIST *pList);
/*
- * ======== 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);
-
-/*
* ======== LST_InitElem ========
* Purpose:
* Initializes a list element to default (cleared) values
@@ -262,15 +228,12 @@
* 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);
diff --git a/drivers/dsp/bridge/services/list.c b/drivers/dsp/bridge/services/list.c
index 7fa3e76..b215b68 100644
--- a/drivers/dsp/bridge/services/list.c
+++ b/drivers/dsp/bridge/services/list.c
@@ -23,10 +23,8 @@
* Public Functions:
* LST_Create
* LST_Delete
- * LST_Exit
* LST_First
* LST_GetHead
- * LST_Init
* LST_InitElem
* LST_InsertBefore
* LST_Next
@@ -51,21 +49,12 @@
#include <dspbridge/std.h>
#include <dspbridge/dbdefs.h>
-/* ----------------------------------- Trace & Debug */
-#include <dspbridge/dbc.h>
-#include <dspbridge/gt.h>
-
/* ----------------------------------- OS Adaptation Layer */
#include <dspbridge/mem.h>
/* ----------------------------------- This */
#include <dspbridge/list.h>
-/* ----------------------------------- Globals */
-#if GT_TRACE
-static struct GT_Mask LST_debugMask = { NULL, NULL }; /* GT trace var. */
-#endif
-
/*
* ======== LST_Create ========
* Purpose:
@@ -75,14 +64,10 @@ struct LST_LIST *LST_Create(void)
{
struct LST_LIST *pList;
- GT_0trace(LST_debugMask, GT_ENTER, "LST_Create: entered\n");
-
pList = (struct LST_LIST *) MEM_Calloc(sizeof(struct LST_LIST),
MEM_NONPAGED);
if (pList != NULL) {
- pList->head.next = &pList->head;
- pList->head.prev = &pList->head;
- pList->head.self = NULL;
+ INIT_LIST_HEAD(&pList->head);
}
return pList;
@@ -95,24 +80,10 @@ struct LST_LIST *LST_Create(void)
*/
void LST_Delete(struct LST_LIST *pList)
{
- DBC_Require(pList != NULL);
-
- GT_1trace(LST_debugMask, GT_ENTER, "LST_Delete: pList 0x%x\n", pList);
-
MEM_Free(pList);
}
/*
- * ======== LST_Exit ========
- * Purpose:
- * Discontinue usage of the LST module.
- */
-void LST_Exit(void)
-{
- GT_0trace(LST_debugMask, GT_5CLASS, "LST_Exit\n");
-}
-
-/*
* ======== LST_First ========
* Purpose:
* Returns a pointer to the first element of the list, or NULL if the
@@ -122,10 +93,6 @@ struct LST_ELEM *LST_First(struct LST_LIST *pList)
{
struct LST_ELEM *pElem = NULL;
- DBC_Require(pList != NULL);
-
- GT_1trace(LST_debugMask, GT_ENTER, "LST_First: pList 0x%x\n", pList);
-
if (!LST_IsEmpty(pList))
pElem = pList->head.next;
@@ -141,10 +108,6 @@ struct LST_ELEM *LST_GetHead(struct LST_LIST *pList)
{
struct LST_ELEM *pElem;
- DBC_Require(pList != NULL);
-
- GT_1trace(LST_debugMask, GT_ENTER, "LST_GetHead: pList 0x%x\n", pList);
-
if (LST_IsEmpty(pList))
return NULL;
@@ -154,21 +117,7 @@ struct LST_ELEM *LST_GetHead(struct LST_LIST *pList)
pList->head.next = pElem->next;
pElem->next->prev = &pList->head;
- return pElem->self;
-}
-
-/*
- * ======== LST_Init ========
- * Purpose:
- * Initialize LST module private state.
- */
-bool LST_Init(void)
-{
- GT_create(&LST_debugMask, "LS"); /* LS for LSt module */
-
- GT_0trace(LST_debugMask, GT_5CLASS, "LST_Init\n");
-
- return true;
+ return pElem;
}
/*
@@ -178,14 +127,9 @@ bool LST_Init(void)
*/
void LST_InitElem(struct LST_ELEM *pElem)
{
- DBC_Require(pElem != NULL);
-
- GT_1trace(LST_debugMask, GT_ENTER, "LST_InitElem: pElem 0x%x\n", pElem);
-
if (pElem) {
pElem->next = NULL;
pElem->prev = NULL;
- pElem->self = pElem;
}
}
@@ -197,18 +141,7 @@ void LST_InitElem(struct LST_ELEM *pElem)
void LST_InsertBefore(struct LST_LIST *pList, struct LST_ELEM *pElem,
struct LST_ELEM *pElemExisting)
{
- DBC_Require(pList != NULL);
- DBC_Require(pElem != NULL);
- DBC_Require(pElemExisting != NULL);
-
- GT_3trace(LST_debugMask, GT_ENTER, "LST_InsertBefore: pList 0x%x, "
- "pElem 0x%x pElemExisting 0x%x\n", pList, pElem,
- pElemExisting);
-
- pElemExisting->prev->next = pElem;
- pElem->prev = pElemExisting->prev;
- pElem->next = pElemExisting;
- pElemExisting->prev = pElem;
+ list_add_tail(pElem, pElemExisting);
}
/*
@@ -221,13 +154,6 @@ struct LST_ELEM *LST_Next(struct LST_LIST *pList, struct LST_ELEM *pCurElem)
{
struct LST_ELEM *pNextElem = NULL;
- DBC_Require(pList != NULL);
- DBC_Require(pCurElem != NULL);
-
- GT_2trace(LST_debugMask, GT_ENTER,
- "LST_Next: pList 0x%x, pCurElem 0x%x\n",
- pList, pCurElem);
-
if (!LST_IsEmpty(pList)) {
if (pCurElem->next != &pList->head)
pNextElem = pCurElem->next;
@@ -243,19 +169,7 @@ struct LST_ELEM *LST_Next(struct LST_LIST *pList, struct LST_ELEM *pCurElem)
*/
void LST_PutTail(struct LST_LIST *pList, struct LST_ELEM *pElem)
{
- DBC_Require(pList != NULL);
- DBC_Require(pElem != NULL);
-
- GT_2trace(LST_debugMask, GT_ENTER,
- "LST_PutTail: pList 0x%x, pElem 0x%x\n",
- pList, pElem);
-
- pElem->prev = pList->head.prev;
- pElem->next = &pList->head;
- pList->head.prev = pElem;
- pElem->prev->next = pElem;
-
- DBC_Ensure(!LST_IsEmpty(pList));
+ list_add_tail(pElem, &pList->head);
}
/*
@@ -266,20 +180,8 @@ void LST_PutTail(struct LST_LIST *pList, struct LST_ELEM *pElem)
*/
void LST_RemoveElem(struct LST_LIST *pList, struct LST_ELEM *pCurElem)
{
- DBC_Require(pList != NULL);
- DBC_Require(pCurElem != NULL);
-
- GT_2trace(LST_debugMask, GT_ENTER,
- "LST_RemoveElem: pList 0x%x, pCurElem "
- "0x%x\n", pList, pCurElem);
-
if (!LST_IsEmpty(pList)) {
- pCurElem->prev->next = pCurElem->next;
- pCurElem->next->prev = pCurElem->prev;
-
- /* set elem fields to NULL to prevent illegal references */
- pCurElem->next = NULL;
- pCurElem->prev = NULL;
+ list_del_init(pCurElem);
}
}
diff --git a/drivers/dsp/bridge/services/mem.c b/drivers/dsp/bridge/services/mem.c
index 22f382b..cc16e5d 100644
--- a/drivers/dsp/bridge/services/mem.c
+++ b/drivers/dsp/bridge/services/mem.c
@@ -125,7 +125,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,
@@ -612,7 +611,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
diff --git a/drivers/dsp/bridge/services/services.c b/drivers/dsp/bridge/services/services.c
index 346007e..56fca76 100644
--- a/drivers/dsp/bridge/services/services.c
+++ b/drivers/dsp/bridge/services/services.c
@@ -87,7 +87,6 @@ void SERVICES_Exit(void)
SYNC_Exit();
CLK_Exit();
REG_Exit();
- LST_Exit();
KFILE_Exit();
DPC_Exit();
DBG_Exit();
@@ -109,7 +108,7 @@ void SERVICES_Exit(void)
bool SERVICES_Init(void)
{
bool fInit = true;
- bool fCFG, fCSL, fDBG, fDPC, fKFILE, fLST, fMEM;
+ bool fCFG, fCSL, fDBG, fDPC, fKFILE, fMEM;
bool fREG, fSYNC, fCLK, fUTIL, fNTFY;
DBC_Require(cRefs >= 0);
@@ -130,7 +129,6 @@ bool SERVICES_Init(void)
fDBG = DBG_Init();
fDPC = DPC_Init();
fKFILE = KFILE_Init();
- fLST = LST_Init();
/* fREG = REG_Init(); */
fSYNC = SYNC_Init();
fCLK = CLK_Init();
@@ -138,7 +136,7 @@ bool SERVICES_Init(void)
fNTFY = NTFY_Init();
fInit = fCFG && fCSL && fDBG && fDPC && fKFILE &&
- fLST && fMEM && fREG && fSYNC && fCLK && fUTIL;
+ fMEM && fREG && fSYNC && fCLK && fUTIL;
if (!fInit) {
if (fNTFY)
@@ -156,9 +154,6 @@ bool SERVICES_Init(void)
if (fREG)
REG_Exit();
- if (fLST)
- LST_Exit();
-
if (fKFILE)
KFILE_Exit();
--
1.5.6.5
next prev parent reply other threads:[~2009-09-03 9:06 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-03 9:06 dspbridge rfc: get rid of services/list.c (try 2) Andy Shevchenko
2009-09-03 9:06 ` Andy Shevchenko [this message]
2009-09-03 9:06 ` [PATCH 2/4] DSPBRIDGE: Get rid of services/list.c (step 2) Andy Shevchenko
2009-09-03 9:06 ` [PATCH 3/4] dspbridge: use linux memory allocator directly Andy Shevchenko
2009-09-03 9:06 ` [PATCH 4/4] dspbridge: Change LST_ELEM to list_head entirely Andy Shevchenko
2009-09-03 9:17 ` Artem Bityutskiy
2009-09-03 9:31 ` Andy Shevchenko
2009-09-03 9:36 ` Andy Shevchenko
2009-09-03 10:42 ` [PATCH] " Andy Shevchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1251968774-25380-2-git-send-email-andy.shevchenko@gmail.com \
--to=andy.shevchenko@gmail.com \
--cc=ext-andriy.shevchenko@nokia.com \
--cc=linux-omap@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.