NULL and safety checks

Signed-off-by: Omar Ramirez Luna <[email protected]>
---
 drivers/dsp/bridge/pmgr/dev.c      |   35 +++++--
 drivers/dsp/bridge/pmgr/msg.c      |    4 +-
 drivers/dsp/bridge/rmgr/node.c     |   33 +++++--
 drivers/dsp/bridge/rmgr/proc.c     |   10 ++-
 drivers/dsp/bridge/script.sh       |   10 ++
 drivers/dsp/bridge/services/list.c |   34 +++----
 drivers/dsp/bridge/services/mem.c  |    3 +-
 drivers/dsp/bridge/wmd/io_sm.c     |  188 ++++++++++++++++++++++++------------
 drivers/dsp/bridge/wmd/msg_sm.c    |   81 ++++++++++-----
 9 files changed, 268 insertions(+), 130 deletions(-)
 create mode 100644 drivers/dsp/bridge/script.sh

diff --git a/drivers/dsp/bridge/pmgr/dev.c b/drivers/dsp/bridge/pmgr/dev.c
index 5e4e30b..59eee7d 100644
--- a/drivers/dsp/bridge/pmgr/dev.c
+++ b/drivers/dsp/bridge/pmgr/dev.c
@@ -496,11 +496,15 @@ DSP_STATUS DEV_DestroyDevice(struct DEV_OBJECT 
*hDevObject)
        GT_1trace(debugMask, GT_ENTER, "Entered DEV_DestroyDevice, hDevObject: "
                 "0x%x\n", hDevObject);
        if (IsValidHandle(hDevObject)) {
-               if (pDevObject->hCodMgr)
+               if (pDevObject->hCodMgr) {
                        COD_Delete(pDevObject->hCodMgr);
+                       pDevObject->hCodMgr = NULL;
+               }
 
-               if (pDevObject->hNodeMgr)
+               if (pDevObject->hNodeMgr) {
                        NODE_DeleteMgr(pDevObject->hNodeMgr);
+                       pDevObject->hNodeMgr = NULL;
+               }
 
                /* Free the io, channel, and message managers for this board: */
                if (pDevObject->hIOMgr) {
@@ -511,28 +515,40 @@ DSP_STATUS DEV_DestroyDevice(struct DEV_OBJECT 
*hDevObject)
                        CHNL_Destroy(pDevObject->hChnlMgr);
                        pDevObject->hChnlMgr = NULL;
                }
-               if (pDevObject->hMsgMgr)
+               if (pDevObject->hMsgMgr) {
                        MSG_Delete(pDevObject->hMsgMgr);
+                       pDevObject->hMsgMgr = NULL;
+               }
 
                if (pDevObject->hDehMgr) {
                        /* Uninitialize DEH module. */
                        (*pDevObject->intfFxns.pfnDehDestroy)
                        (pDevObject->hDehMgr);
+                       pDevObject->hDehMgr = NULL;
                }
-               if (pDevObject->hCmmMgr)
+               if (pDevObject->hCmmMgr) {
                        CMM_Destroy(pDevObject->hCmmMgr, true);
+                       pDevObject->hCmmMgr = NULL;
+               }
 
-               if (pDevObject->hDmmMgr)
+               if (pDevObject->hDmmMgr) {
                        DMM_Destroy(pDevObject->hDmmMgr);
+                       pDevObject->hDmmMgr = NULL;
+               }
 
                /* Call the driver's WMD_DEV_Destroy() function: */
                /* Require of DevDestroy */
-               DBC_Assert(pDevObject->hWmdContext != NULL);
-               status = (*pDevObject->intfFxns.pfnDevDestroy)
-                        (pDevObject->hWmdContext);
+               if (pDevObject->hWmdContext) {
+                       status = (*pDevObject->intfFxns.pfnDevDestroy)
+                               (pDevObject->hWmdContext);
+                       pDevObject->hWmdContext = NULL;
+               } else
+                       status = DSP_EFAIL;
                if (DSP_SUCCEEDED(status)) {
-                       if (pDevObject->procList)
+                       if (pDevObject->procList) {
                                LST_Delete(pDevObject->procList);
+                               pDevObject->procList = NULL;
+                       }
 
                        /* Remove this DEV_Object from the global list: */
                        DRV_RemoveDevObject(pDevObject->hDrvObject, pDevObject);
@@ -540,6 +556,7 @@ DSP_STATUS DEV_DestroyDevice(struct DEV_OBJECT *hDevObject)
                         * (pDevObject->hModule);*/
                        /* Free this dev object: */
                        MEM_FreeObject(pDevObject);
+                       pDevObject = NULL;
                }
        } else {
                GT_0trace(debugMask, GT_7CLASS, "DEV_Destroy: Invlaid handle");
diff --git a/drivers/dsp/bridge/pmgr/msg.c b/drivers/dsp/bridge/pmgr/msg.c
index be4acdb..d9e4fc6 100644
--- a/drivers/dsp/bridge/pmgr/msg.c
+++ b/drivers/dsp/bridge/pmgr/msg.c
@@ -134,7 +134,9 @@ void MSG_Delete(struct MSG_MGR *hMsgMgr)
        /* Let WMD message module destroy the MSG_MGR: */
        (*pIntfFxns->pfnMsgDelete)(hMsgMgr);
 
-       DBC_Ensure(!MEM_IsValidHandle(pMsgMgr, MSGMGR_SIGNATURE));
+       if (MEM_IsValidHandle(pMsgMgr, MSGMGR_SIGNATURE))
+               GT_1trace(MSG_debugMask, GT_7CLASS, "MSG_Delete: Error hMsgMgr "
+                                       "Valid Handle: 0x%x\n", hMsgMgr);
 }
 
 /*
diff --git a/drivers/dsp/bridge/rmgr/node.c b/drivers/dsp/bridge/rmgr/node.c
index 53a42bf..8ed9046 100644
--- a/drivers/dsp/bridge/rmgr/node.c
+++ b/drivers/dsp/bridge/rmgr/node.c
@@ -1833,11 +1833,13 @@ DSP_STATUS NODE_DeleteMgr(struct NODE_MGR *hNodeMgr)
        DSP_STATUS status = DSP_SOK;
 
        DBC_Require(cRefs > 0);
-       DBC_Require(MEM_IsValidHandle(hNodeMgr, NODEMGR_SIGNATURE));
 
        GT_1trace(NODE_debugMask, GT_ENTER, "NODE_DeleteMgr: hNodeMgr: 0x%x\n",
                 hNodeMgr);
-       DeleteNodeMgr(hNodeMgr);
+       if (MEM_IsValidHandle(hNodeMgr, NODEMGR_SIGNATURE))
+               DeleteNodeMgr(hNodeMgr);
+       else
+               status = DSP_EHANDLE;
 
        return status;
 }
@@ -1855,7 +1857,6 @@ DSP_STATUS NODE_EnumNodes(struct NODE_MGR *hNodeMgr, IN 
DSP_HNODE *aNodeTab,
        u32 i;
        DSP_STATUS status = DSP_SOK;
        DBC_Require(cRefs > 0);
-       DBC_Require(MEM_IsValidHandle(hNodeMgr, NODEMGR_SIGNATURE));
        DBC_Require(aNodeTab != NULL || uNodeTabSize == 0);
        DBC_Require(puNumNodes != NULL);
        DBC_Require(puAllocated != NULL);
@@ -1863,6 +1864,10 @@ DSP_STATUS NODE_EnumNodes(struct NODE_MGR *hNodeMgr, IN 
DSP_HNODE *aNodeTab,
                 "aNodeTab: %d\tuNodeTabSize: 0x%x\tpuNumNodes: 0x%x\t"
                 "puAllocated\n", hNodeMgr, aNodeTab, uNodeTabSize, puNumNodes,
                 puAllocated);
+       if (!MEM_IsValidHandle(hNodeMgr, NODEMGR_SIGNATURE)) {
+               status = DSP_EHANDLE;
+               goto func_end;
+       }
        /* Enter critical section */
        status = SYNC_EnterCS(hNodeMgr->hSync);
        if (DSP_SUCCEEDED(status)) {
@@ -1887,6 +1892,7 @@ DSP_STATUS NODE_EnumNodes(struct NODE_MGR *hNodeMgr, IN 
DSP_HNODE *aNodeTab,
        /* end of SYNC_EnterCS */
        /* Exit critical section */
        (void)SYNC_LeaveCS(hNodeMgr->hSync);
+func_end:
        return status;
 }
 
@@ -2262,7 +2268,9 @@ bool NODE_Init(void)
  */
 void NODE_OnExit(struct NODE_OBJECT *hNode, s32 nStatus)
 {
-       DBC_Assert(MEM_IsValidHandle(hNode, NODE_SIGNATURE));
+       if (!MEM_IsValidHandle(hNode, NODE_SIGNATURE))
+               return;
+
        /* Set node state to done */
        NODE_SetState(hNode, NODE_DONE);
        hNode->nExitStatus = nStatus;
@@ -2576,6 +2584,10 @@ DSP_STATUS NODE_Run(struct NODE_OBJECT *hNode)
                goto func_end;
 
        hNodeMgr = hNode->hNodeMgr;
+       if (!MEM_IsValidHandle(hNodeMgr, NODEMGR_SIGNATURE)) {
+               status = DSP_EHANDLE;
+               goto func_end;
+       }
        pIntfFxns = hNodeMgr->pIntfFxns;
        /* Enter critical section */
        status = SYNC_EnterCS(hNodeMgr->hSync);
@@ -2825,10 +2837,11 @@ static void DeleteNode(struct NODE_OBJECT *hNode)
                        (struct PROC_OBJECT *)hNode->hProcessor;
 #endif
        DSP_STATUS status;
-       DBC_Require(MEM_IsValidHandle(hNode, NODE_SIGNATURE));
+       if (!MEM_IsValidHandle(hNode, NODE_SIGNATURE))
+               goto func_end;
        hNodeMgr = hNode->hNodeMgr;
-       if (!MEM_IsValidHandle(hNodeMgr, NODEMGR_SIGNATURE))
-               return;
+       if (!MEM_IsValidHandle(hNodeMgr, NODEMGR_SIGNATURE))
+               goto func_end;
        hXlator = hNode->hXlator;
        nodeType = NODE_GetType(hNode);
        if (nodeType != NODE_DEVICE) {
@@ -2963,9 +2976,11 @@ static void DeleteNode(struct NODE_OBJECT *hNode)
                hNodeMgr->nldrFxns.pfnFree(hNode->hNldrNode);
                hNode->hNldrNode = NULL;
        }
-
+       hNode->hNodeMgr = NULL;
        MEM_FreeObject(hNode);
-       hNode = NULL;
+       hNode = NULL;
+func_end:
+       return;
 }
 
 /*
diff --git a/drivers/dsp/bridge/rmgr/proc.c b/drivers/dsp/bridge/rmgr/proc.c
index f6045bb..8cfbc46 100644
--- a/drivers/dsp/bridge/rmgr/proc.c
+++ b/drivers/dsp/bridge/rmgr/proc.c
@@ -2032,15 +2032,21 @@ DSP_STATUS PROC_NotifyAllClients(DSP_HPROCESSOR hProc, 
u32 uEvents)
        DSP_STATUS status = DSP_SOK;
        struct PROC_OBJECT *pProcObject = (struct PROC_OBJECT *)hProc;
 
-       DBC_Require(MEM_IsValidHandle(pProcObject, PROC_SIGNATURE));
        DBC_Require(IsValidProcEvent(uEvents));
        DBC_Require(cRefs > 0);
 
+       if (!MEM_IsValidHandle(pProcObject, PROC_SIGNATURE)) {
+               status = DSP_EHANDLE;
+               GT_0trace(PROC_DebugMask, GT_7CLASS, "PROC_NotifyAllClients: "
+                        "InValid Processor Handle \n");
+               goto func_end;
+       }
+
        DEV_NotifyClients(pProcObject->hDevObject, uEvents);
 
        GT_0trace(PROC_DebugMask, GT_1CLASS,
                 "PROC_NotifyAllClients :Signaled. \n");
-
+func_end:
        return status;
 }
 
diff --git a/drivers/dsp/bridge/script.sh b/drivers/dsp/bridge/script.sh
new file mode 100644
index 0000000..9ca4f87
--- /dev/null
+++ b/drivers/dsp/bridge/script.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+grep -rl "     " $1 |
+while read filename
+do
+(
+echo $filename
+sed "s/        /       /g;" $filename> $filename.xx
+mv $filename.xx $filename
+)
+done
diff --git a/drivers/dsp/bridge/services/list.c 
b/drivers/dsp/bridge/services/list.c
index 7fa3e76..7ac7772 100644
--- a/drivers/dsp/bridge/services/list.c
+++ b/drivers/dsp/bridge/services/list.c
@@ -95,11 +95,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);
+       if (pList != NULL)
+               MEM_Free(pList);
 }
 
 /*
@@ -122,11 +121,9 @@ 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))
+       if (pList && !LST_IsEmpty(pList))
                pElem = pList->head.next;
 
        return pElem;
@@ -141,11 +138,9 @@ 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))
+       if (!pList || LST_IsEmpty(pList))
                return NULL;
 
        /* pElem is always valid because the list cannot be empty
@@ -197,14 +192,13 @@ 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);
 
+       if (!pList || !pElem || !pElemExisting)
+               return;
+
        pElemExisting->prev->next = pElem;
        pElem->prev = pElemExisting->prev;
        pElem->next = pElemExisting;
@@ -221,8 +215,8 @@ 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);
+       if (!pList || !pCurElem)
+               return NULL;
 
        GT_2trace(LST_debugMask, GT_ENTER,
                  "LST_Next: pList 0x%x, pCurElem 0x%x\n",
@@ -243,13 +237,13 @@ 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);
 
+       if (!pList || !pElem)
+               return;
+
        pElem->prev = pList->head.prev;
        pElem->next = &pList->head;
        pList->head.prev = pElem;
@@ -266,8 +260,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);
+       if (!pList || !pCurElem)
+               return;
 
        GT_2trace(LST_debugMask, GT_ENTER,
                  "LST_RemoveElem: pList 0x%x, pCurElem "
diff --git a/drivers/dsp/bridge/services/mem.c 
b/drivers/dsp/bridge/services/mem.c
index 47ec09b..a3f86f7 100644
--- a/drivers/dsp/bridge/services/mem.c
+++ b/drivers/dsp/bridge/services/mem.c
@@ -480,7 +480,8 @@ void MEM_Exit(void)
  */
 void MEM_FlushCache(void *pMemBuf, u32 cBytes, s32 FlushType)
 {
-       DBC_Require(cRefs > 0);
+       if (cRefs <= 0 || !pMemBuf)
+               return;
 
        switch (FlushType) {
        /* invalidate only */
diff --git a/drivers/dsp/bridge/wmd/io_sm.c b/drivers/dsp/bridge/wmd/io_sm.c
index 6f7e338..f7e8b42 100644
--- a/drivers/dsp/bridge/wmd/io_sm.c
+++ b/drivers/dsp/bridge/wmd/io_sm.c
@@ -206,20 +206,24 @@ DSP_STATUS WMD_IO_Create(OUT struct IO_MGR **phIOMgr,
        struct CHNL_MGR *hChnlMgr;
        static int ref_count;
        u32 devType;
-       /* Check DBC requirements:  */
-       DBC_Require(phIOMgr != NULL);
-       DBC_Require(pMgrAttrs != NULL);
-       DBC_Require(pMgrAttrs->uWordSize != 0);
-       /* This for the purposes of DBC_Require: */
+       /* Check requirements:  */
+       if (!phIOMgr || !pMgrAttrs || pMgrAttrs->uWordSize == 0) {
+               status = DSP_EHANDLE;
+               goto func_end;
+       }
        status = DEV_GetChnlMgr(hDevObject, &hChnlMgr);
-       DBC_Require(status != DSP_EHANDLE);
-       DBC_Require(hChnlMgr != NULL);
-       DBC_Require(hChnlMgr->hIOMgr == NULL);
+       if (status == DSP_EHANDLE || !hChnlMgr || hChnlMgr->hIOMgr) {
+               status = DSP_EHANDLE;
+               goto func_end;
+       }
         /*  Message manager will be created when a file is loaded, since
         *  size of message buffer in shared memory is configurable in
         *  the base image.  */
        DEV_GetWMDContext(hDevObject, &hWmdContext);
-       DBC_Assert(hWmdContext);
+       if (!hWmdContext) {
+               status = DSP_EHANDLE;
+               goto func_end;
+       }
        DEV_GetDevType(hDevObject, &devType);
        /*  DSP shared memory area will get set properly when
         *  a program is loaded. They are unknown until a COFF file is
@@ -306,6 +310,7 @@ func_cont:
                hChnlMgr->hIOMgr = pIOMgr;
                *phIOMgr = pIOMgr;
        }
+func_end:
        return status;
 }
 
@@ -321,14 +326,15 @@ DSP_STATUS WMD_IO_Destroy(struct IO_MGR *hIOMgr)
        if (MEM_IsValidHandle(hIOMgr, IO_MGRSIGNATURE)) {
                /* Unplug IRQ:    */
                /* Disable interrupts from the board:  */
-               if (DSP_SUCCEEDED(DEV_GetWMDContext(hIOMgr->hDevObject,
-                      &hWmdContext)))
-                               DBC_Assert(hWmdContext);
-               (void)CHNLSM_DisableInterrupt(hWmdContext);
-               destroy_workqueue(bridge_workqueue);
-               /* Linux function to uninstall ISR */
-               free_irq(INT_MAIL_MPU_IRQ, (void *)hIOMgr);
-               (void)DPC_Destroy(hIOMgr->hDPC);
+               status = DEV_GetWMDContext(hIOMgr->hDevObject, &hWmdContext);
+               if (DSP_SUCCEEDED(status))
+                       (void)CHNLSM_DisableInterrupt(hWmdContext);
+
+               destroy_workqueue(bridge_workqueue);
+               /* Linux function to uninstall ISR */
+               free_irq(INT_MAIL_MPU_IRQ, (void *)hIOMgr);
+               if (hIOMgr->hDPC)
+                       (void)DPC_Destroy(hIOMgr->hDPC);
 #ifndef DSP_TRACEBUF_DISABLED
                if (hIOMgr->pMsg)
                        MEM_Free(hIOMgr->pMsg);
@@ -388,13 +394,17 @@ DSP_STATUS WMD_IO_OnLoaded(struct IO_MGR *hIOMgr)
                           HW_PAGE_SIZE_64KB, HW_PAGE_SIZE_4KB };
 
        status = DEV_GetCodMgr(hIOMgr->hDevObject, &hCodMan);
-       DBC_Assert(DSP_SUCCEEDED(status));
+       if (DSP_FAILED(status))
+               goto func_end;
        hChnlMgr = hIOMgr->hChnlMgr;
         /*  The message manager is destroyed when the board is stopped.  */
        DEV_GetMsgMgr(hIOMgr->hDevObject, &hIOMgr->hMsgMgr);
        hMsgMgr = hIOMgr->hMsgMgr;
-       DBC_Assert(MEM_IsValidHandle(hChnlMgr, CHNL_MGRSIGNATURE));
-       DBC_Assert(MEM_IsValidHandle(hMsgMgr, MSGMGR_SIGNATURE));
+       if (!MEM_IsValidHandle(hChnlMgr, CHNL_MGRSIGNATURE) ||
+          !MEM_IsValidHandle(hMsgMgr, MSGMGR_SIGNATURE)) {
+               status = DSP_EMEMORY;
+               goto func_end;
+       }
        if (hIOMgr->pSharedMem)
                hIOMgr->pSharedMem = NULL;
 
@@ -547,7 +557,8 @@ func_cont1:
                                status = hIOMgr->pIntfFxns->pfnBrdMemMap
                                        (hIOMgr->hWmdContext, paCurr, vaCurr,
                                        pgSize[i], mapAttrs);
-                               DBC_Assert(DSP_SUCCEEDED(status));
+                               if (DSP_FAILED(status))
+                                       goto func_end;
                                paCurr += pgSize[i];
                                vaCurr += pgSize[i];
                                gppVaCurr += pgSize[i];
@@ -608,7 +619,8 @@ func_cont1:
                                         aEProc[ndx].ulGppVa,
                                         aEProc[ndx].ulDspVa *
                                         hIOMgr->uWordSize, pgSize[i]);
-                               DBC_Assert(DSP_SUCCEEDED(status));
+                               if (DSP_FAILED(status))
+                                       goto func_end;
                        }
                        paCurr += pgSize[i];
                        vaCurr += pgSize[i];
@@ -705,9 +717,12 @@ func_cont:
                if ((hIOMgr->extProcInfo.tyTlb[0].ulGppPhys == 0) ||
                   (uNumProcs != 1)) {
                        status = CHNL_E_NOMEMMAP;
-                       DBC_Assert(false);
+                       goto func_end;
                } else {
-                       DBC_Assert(aEProc[0].ulDspVa <= ulShmBase);
+                       if (aEProc[0].ulDspVa > ulShmBase) {
+                               status = DSP_EFAIL;
+                               goto func_end;
+                       }
                        /* ulShmBase may not be at ulDspVa address */
                        ulShmBaseOffset = (ulShmBase - aEProc[0].ulDspVa) *
                            hIOMgr->uWordSize;
@@ -715,8 +730,10 @@ func_cont:
                         *   _BRD_Start() the MMU will be re-programed with MMU
                         *   DSPVa-GPPPa pair info while DSP is in a known
                         *   (reset) state.  */
-                       DBC_Assert(hIOMgr->pIntfFxns != NULL);
-                       DBC_Assert(hIOMgr->hWmdContext != NULL);
+                       if (!hIOMgr->pIntfFxns || !hIOMgr->hWmdContext) {
+                               status = DSP_EHANDLE;
+                               goto func_end;
+                       }
                        status = hIOMgr->pIntfFxns->pfnDevCntrl(hIOMgr->
                                 hWmdContext, WMDIOCTL_SETMMUCONFIG, aEProc);
                        ulShmBase = hIOMgr->extProcInfo.tyTlb[0].ulGppPhys;
@@ -726,6 +743,10 @@ func_cont:
                        ulShmBase += ulShmBaseOffset;
                        ulShmBase = (u32)MEM_LinearAddress((void *)ulShmBase,
                                    ulMemLength);
+                       if (ulShmBase == 0) {
+                               status = DSP_EFAIL;
+                               goto func_end;
+                       }
                        DBC_Assert(ulShmBase != 0);
                        if (DSP_SUCCEEDED(status)) {
                                status = registerSHMSegs(hIOMgr, hCodMan,
@@ -824,6 +845,7 @@ func_cont:
     }
 #endif
        IO_EnableInterrupt(hIOMgr->hWmdContext);
+func_end:
        return status;
 }
 
@@ -833,9 +855,10 @@ func_cont:
  */
 u32 IO_BufSize(struct IO_MGR *hIOMgr)
 {
-       DBC_Require(MEM_IsValidHandle(hIOMgr, IO_MGRSIGNATURE));
-
-       return hIOMgr->uSMBufSize;
+       if (MEM_IsValidHandle(hIOMgr, IO_MGRSIGNATURE))
+               return hIOMgr->uSMBufSize;
+       else
+               return 0;
 }
 
 /*
@@ -847,7 +870,8 @@ void IO_CancelChnl(struct IO_MGR *hIOMgr, u32 ulChnl)
        struct IO_MGR *pIOMgr = (struct IO_MGR *)hIOMgr;
        struct SHM *sm;
 
-       DBC_Require(MEM_IsValidHandle(hIOMgr, IO_MGRSIGNATURE));
+       if (!MEM_IsValidHandle(hIOMgr, IO_MGRSIGNATURE))
+               goto func_end;
        sm = hIOMgr->pSharedMem;
 
        /* Inform DSP that we have no more buffers on this channel:  */
@@ -855,6 +879,8 @@ void IO_CancelChnl(struct IO_MGR *hIOMgr, u32 ulChnl)
                   (~(1 << ulChnl)));
 
        CHNLSM_InterruptDSP2(pIOMgr->hWmdContext, MBX_PCPY_CLASS);
+func_end:
+       return;
 }
 
 /*
@@ -864,16 +890,20 @@ void IO_CancelChnl(struct IO_MGR *hIOMgr, u32 ulChnl)
 static void IO_DispatchChnl(IN struct IO_MGR *pIOMgr,
                           IN OUT struct CHNL_OBJECT *pChnl, u32 iMode)
 {
-       DBC_Require(MEM_IsValidHandle(pIOMgr, IO_MGRSIGNATURE));
+       if (!MEM_IsValidHandle(pIOMgr, IO_MGRSIGNATURE))
+               goto func_end;
 
        DBG_Trace(DBG_LEVEL3, "Entering IO_DispatchChnl \n");
 
        /* See if there is any data available for transfer: */
-       DBC_Assert(iMode == IO_SERVICE);
+       if (iMode != IO_SERVICE)
+               goto func_end;
 
        /* Any channel will do for this mode: */
        InputChnl(pIOMgr, pChnl, iMode);
        OutputChnl(pIOMgr, pChnl, iMode);
+func_end:
+       return;
 }
 
 /*
@@ -882,13 +912,16 @@ static void IO_DispatchChnl(IN struct IO_MGR *pIOMgr,
  */
 static void IO_DispatchMsg(IN struct IO_MGR *pIOMgr, struct MSG_MGR *hMsgMgr)
 {
-       DBC_Require(MEM_IsValidHandle(pIOMgr, IO_MGRSIGNATURE));
+       if (!MEM_IsValidHandle(pIOMgr, IO_MGRSIGNATURE))
+               goto func_end;
 
        DBG_Trace(DBG_LEVEL3, "Entering IO_DispatchMsg \n");
 
        /*  We are performing both input and output processing. */
        InputMsg(pIOMgr, hMsgMgr);
        OutputMsg(pIOMgr, hMsgMgr);
+func_end:
+       return;
 }
 
 /*
@@ -902,8 +935,6 @@ static void IO_DispatchPM(struct work_struct *work)
        DSP_STATUS status;
        u32 pArg[2];
 
-       /*DBC_Require(MEM_IsValidHandle(pIOMgr, IO_MGRSIGNATURE));*/
-
        DBG_Trace(DBG_LEVEL7, "IO_DispatchPM: Entering IO_DispatchPM : \n");
 
        /*  Perform Power message processing here  */
@@ -968,11 +999,13 @@ void IO_DPC(IN OUT void *pRefData)
        struct MSG_MGR *pMsgMgr;
        struct DEH_MGR *hDehMgr;
 
-       DBC_Require(MEM_IsValidHandle(pIOMgr, IO_MGRSIGNATURE));
+       if (!MEM_IsValidHandle(pIOMgr, IO_MGRSIGNATURE))
+               goto func_end;
        pChnlMgr = pIOMgr->hChnlMgr;
        DEV_GetMsgMgr(pIOMgr->hDevObject, &pMsgMgr);
        DEV_GetDehMgr(pIOMgr->hDevObject, &hDehMgr);
-       DBC_Require(MEM_IsValidHandle(pChnlMgr, CHNL_MGRSIGNATURE));
+       if (!MEM_IsValidHandle(pChnlMgr, CHNL_MGRSIGNATURE))
+               goto func_end;
        DBG_Trace(DBG_LEVEL7, "Entering IO_DPC(0x%x)\n", pRefData);
        /* Check value of interrupt register to ensure it is a valid error */
        if ((pIOMgr->wIntrVal > DEH_BASE) && (pIOMgr->wIntrVal < DEH_LIMIT)) {
@@ -983,10 +1016,8 @@ void IO_DPC(IN OUT void *pRefData)
        }
        IO_DispatchChnl(pIOMgr, NULL, IO_SERVICE);
 #ifdef CHNL_MESSAGES
-       if (pMsgMgr) {
-               DBC_Require(MEM_IsValidHandle(pMsgMgr, MSGMGR_SIGNATURE));
+       if (MEM_IsValidHandle(pMsgMgr, MSGMGR_SIGNATURE))
                IO_DispatchMsg(pIOMgr, pMsgMgr);
-       }
 #endif
 #ifndef DSP_TRACEBUF_DISABLED
        if (pIOMgr->wIntrVal & MBX_DBG_CLASS) {
@@ -999,6 +1030,8 @@ void IO_DPC(IN OUT void *pRefData)
 #ifndef DSP_TRACEBUF_DISABLED
        PrintDSPDebugTrace(pIOMgr);
 #endif
+func_end:
+       return;
 }
 
 
@@ -1012,8 +1045,9 @@ irqreturn_t IO_ISR(int irq, IN void *pRefData)
 {
        struct IO_MGR *hIOMgr = (struct IO_MGR *)pRefData;
        bool fSchedDPC;
-       DBC_Require(irq == INT_MAIL_MPU_IRQ);
-       DBC_Require(MEM_IsValidHandle(hIOMgr, IO_MGRSIGNATURE));
+       if (irq != INT_MAIL_MPU_IRQ ||
+          !MEM_IsValidHandle(hIOMgr, IO_MGRSIGNATURE))
+               return IRQ_NONE;
        DBG_Trace(DBG_LEVEL3, "Entering IO_ISR(0x%x)\n", pRefData);
 
        /* Call WMD's CHNLSM_ISR() to see if interrupt is ours, and process. */
@@ -1054,8 +1088,9 @@ void IO_RequestChnl(struct IO_MGR *pIOMgr, struct 
CHNL_OBJECT *pChnl,
 {
        struct CHNL_MGR *pChnlMgr;
        struct SHM *sm;
-       DBC_Require(pChnl != NULL);
-       DBC_Require(pwMbVal != NULL);
+
+       if (!pChnl || !pwMbVal)
+               goto func_end;
        pChnlMgr = pIOMgr->hChnlMgr;
        sm = pIOMgr->pSharedMem;
        if (iMode == IO_INPUT) {
@@ -1078,6 +1113,8 @@ void IO_RequestChnl(struct IO_MGR *pIOMgr, struct 
CHNL_OBJECT *pChnl,
        } else {
                DBC_Assert(iMode);      /* Shouldn't get here. */
        }
+func_end:
+       return;
 }
 
 /*
@@ -1086,7 +1123,8 @@ void IO_RequestChnl(struct IO_MGR *pIOMgr, struct 
CHNL_OBJECT *pChnl,
  */
 void IO_Schedule(struct IO_MGR *pIOMgr)
 {
-       DBC_Require(MEM_IsValidHandle(pIOMgr, IO_MGRSIGNATURE));
+       if (!MEM_IsValidHandle(pIOMgr, IO_MGRSIGNATURE))
+               return;
 
        DPC_Schedule(pIOMgr->hDPC);
 }
@@ -1107,7 +1145,8 @@ static u32 FindReadyOutput(struct CHNL_MGR *pChnlMgr,
 
        id = (pChnl != NULL ? pChnl->uId : (pChnlMgr->dwLastOutput + 1));
        id = ((id == CHNL_MAXCHANNELS) ? 0 : id);
-       DBC_Assert(id < CHNL_MAXCHANNELS);
+       if (id >= CHNL_MAXCHANNELS)
+               goto func_end;
        if (dwMask) {
                shift = (1 << id);
                startId = id;
@@ -1124,7 +1163,7 @@ static u32 FindReadyOutput(struct CHNL_MGR *pChnlMgr,
                        shift = (1 << id);
                } while (id != startId);
        }
-       DBC_Ensure((uRetval == OUTPUTNOTREADY) || (uRetval < CHNL_MAXCHANNELS));
+func_end:
        return uRetval;
 }
 
@@ -1172,7 +1211,8 @@ static void InputChnl(struct IO_MGR *pIOMgr, struct 
CHNL_OBJECT *pChnl,
                                 pIORequests);
                        if (pChirp) {
                                pChnl->cIOReqs--;
-                               DBC_Assert(pChnl->cIOReqs >= 0);
+                               if (pChnl->cIOReqs < 0)
+                                       goto func_end;
                                /* Ensure we don't overflow the client's
                                 * buffer: */
                                uBytes = min(uBytes, pChirp->cBytes);
@@ -1191,8 +1231,8 @@ static void InputChnl(struct IO_MGR *pIOMgr, struct 
CHNL_OBJECT *pChnl,
                                        /* This assertion fails if the DSP
                                         * sends EOS more than once on this
                                         * channel: */
-                                       DBC_Assert(!(pChnl->dwState &
-                                                 CHNL_STATEEOS));
+                                       if (pChnl->dwState & CHNL_STATEEOS)
+                                               goto func_end;
                                         /* Zero bytes indicates EOS. Update
                                          * IOC status for this chirp, and also
                                          * the channel state: */
@@ -1265,7 +1305,7 @@ static void InputMsg(struct IO_MGR *pIOMgr, struct 
MSG_MGR *hMsgMgr)
                                 bufEmpty);
        uMsgs = IO_GetValue(pIOMgr->hWmdContext, struct MSG, pCtrl, size);
        if (fInputEmpty || uMsgs >= hMsgMgr->uMaxMsgs)
-               return;
+               goto func_end;
 
        pMsgInput = pIOMgr->pMsgInput;
        for (i = 0; i < uMsgs; i++) {
@@ -1360,8 +1400,10 @@ static void NotifyChnlComplete(struct CHNL_OBJECT *pChnl,
 {
        bool fSignalEvent;
 
-       DBC_Require(MEM_IsValidHandle(pChnl, CHNL_SIGNATURE));
-       DBC_Require(pChnl->hSyncEvent != NULL);
+       if (!MEM_IsValidHandle(pChnl, CHNL_SIGNATURE) || !pChnl->hSyncEvent ||
+          !pChnl->pIOCompletions || !pChirp)
+               goto func_end;
+
         /*  Note: we signal the channel event only if the queue of IO
          *  completions is empty.  If it is not empty, the event is sure to be
          *  signalled by the only IO completion list consumer:
@@ -1370,13 +1412,17 @@ static void NotifyChnlComplete(struct CHNL_OBJECT 
*pChnl,
        /* Enqueue the IO completion info for the client: */
        LST_PutTail(pChnl->pIOCompletions, (struct LST_ELEM *) pChirp);
        pChnl->cIOCs++;
-       DBC_Assert(pChnl->cIOCs <= pChnl->cChirps);
+
+       if (pChnl->cIOCs > pChnl->cChirps)
+               goto func_end;
        /* Signal the channel event (if not already set) that IO is complete: */
        if (fSignalEvent)
                SYNC_SetEvent(pChnl->hSyncEvent);
 
        /* Notify that IO is complete */
        NTFY_Notify(pChnl->hNtfy, DSP_STREAMIOCOMPLETION);
+func_end:
+       return;
 }
 
 /*
@@ -1573,13 +1619,19 @@ static DSP_STATUS registerSHMSegs(struct IO_MGR *hIOMgr,
        /* Read address and size info for first SM region.*/
        /* Get start of 1st SM Heap region */
        status = COD_GetSymValue(hCodMan, SHM0_SHARED_BASE_SYM, &ulShm0_Base);
-       DBC_Assert(ulShm0_Base != 0);
+       if (ulShm0_Base == 0) {
+               status = DSP_EFAIL;
+               goto func_end;
+       }
        /* Get end of 1st SM Heap region */
        if (DSP_SUCCEEDED(status)) {
                /* Get start and length of message part of shared memory */
                status = COD_GetSymValue(hCodMan, SHM0_SHARED_END_SYM,
                                         &ulShm0_End);
-               DBC_Assert(ulShm0_End != 0);
+               if (ulShm0_End == 0) {
+                       status = DSP_EFAIL;
+                       goto func_end;
+               }
        }
        /* start of Gpp reserved region */
        if (DSP_SUCCEEDED(status)) {
@@ -1588,7 +1640,10 @@ static DSP_STATUS registerSHMSegs(struct IO_MGR *hIOMgr,
                                        &ulShm0_RsrvdStart);
                DBG_Trace(DBG_LEVEL1, "***ulShm0_RsrvdStart  0x%x \n",
                         ulShm0_RsrvdStart);
-               DBC_Assert(ulShm0_RsrvdStart != 0);
+               if (ulShm0_RsrvdStart == 0) {
+                       status = DSP_EFAIL;
+                       goto func_end;
+               }
        }
        /* Register with CMM */
        if (DSP_SUCCEEDED(status)) {
@@ -1610,11 +1665,17 @@ static DSP_STATUS registerSHMSegs(struct IO_MGR *hIOMgr,
                /* calc size (bytes) of SM the GPP can alloc from */
                ulRsrvdSize = (ulShm0_End - ulShm0_RsrvdStart + 1) * hIOMgr->
                              uWordSize;
-               DBC_Assert(ulRsrvdSize > 0);
+               if (ulRsrvdSize <= 0) {
+                       status = DSP_EFAIL;
+                       goto func_end;
+               }
                /* calc size of SM DSP can alloc from */
                ulDSPSize = (ulShm0_RsrvdStart - ulShm0_Base) * hIOMgr->
                        uWordSize;
-               DBC_Assert(ulDSPSize > 0);
+               if (ulDSPSize <= 0) {
+                       status = DSP_EFAIL;
+                       goto func_end;
+               }
                /*  First TLB entry reserved for Bridge SM use.*/
                ulGppPhys = hIOMgr->extProcInfo.tyTlb[0].ulGppPhys;
                /* get size in bytes */
@@ -1627,7 +1688,10 @@ static DSP_STATUS registerSHMSegs(struct IO_MGR *hIOMgr,
                else
                        dwOffset = ulDspVirt - dwGPPBasePA;
 
-               DBC_Assert(ulShm0_RsrvdStart * hIOMgr->uWordSize >= ulDspVirt);
+               if (ulShm0_RsrvdStart * hIOMgr->uWordSize < ulDspVirt) {
+                       status = DSP_EFAIL;
+                       goto func_end;
+               }
                /* calc Gpp phys base of SM region */
                /* Linux - this is actually uncached kernel virtual address*/
                dwGPPBaseVA = ulGppPhys + ulShm0_RsrvdStart * hIOMgr->uWordSize
@@ -1647,8 +1711,10 @@ static DSP_STATUS registerSHMSegs(struct IO_MGR *hIOMgr,
                                 "Seg 0 \n");
                }
                /* first SM region is segId = 1 */
-               DBC_Assert(ulShmSegId0 == 1);
+               if (ulShmSegId0 != 1)
+                       status = DSP_EFAIL;
        }
+func_end:
        return status;
 }
 
diff --git a/drivers/dsp/bridge/wmd/msg_sm.c b/drivers/dsp/bridge/wmd/msg_sm.c
index b9b2bec..6a736f9 100644
--- a/drivers/dsp/bridge/wmd/msg_sm.c
+++ b/drivers/dsp/bridge/wmd/msg_sm.c
@@ -86,11 +86,15 @@ DSP_STATUS WMD_MSG_Create(OUT struct MSG_MGR **phMsgMgr,
        struct IO_MGR *hIOMgr;
        DSP_STATUS status = DSP_SOK;
 
-       DBC_Require(phMsgMgr != NULL);
-       DBC_Require(msgCallback != NULL);
-       DBC_Require(hDevObject != NULL);
+       if (!phMsgMgr || !msgCallback || !hDevObject) {
+               status = DSP_EPOINTER;
+               goto func_end;
+       }
        DEV_GetIOMgr(hDevObject, &hIOMgr);
-       DBC_Assert(hIOMgr != NULL);
+       if (!hIOMgr) {
+               status = DSP_EPOINTER;
+               goto func_end;
+       }
        *phMsgMgr = NULL;
        /* Allocate MSG manager object */
        MEM_AllocObject(pMsgMgr, struct MSG_MGR, MSGMGR_SIGNATURE);
@@ -125,6 +129,7 @@ DSP_STATUS WMD_MSG_Create(OUT struct MSG_MGR **phMsgMgr,
        } else {
                status = DSP_EMEMORY;
        }
+func_end:
        return status;
 }
 
@@ -142,8 +147,11 @@ DSP_STATUS WMD_MSG_CreateQueue(struct MSG_MGR *hMsgMgr,
        struct MSG_QUEUE *pMsgQ;
        DSP_STATUS status = DSP_SOK;
 
-       DBC_Require(MEM_IsValidHandle(hMsgMgr, MSGMGR_SIGNATURE));
-       DBC_Require(phMsgQueue != NULL);
+       if (!MEM_IsValidHandle(hMsgMgr, MSGMGR_SIGNATURE) ||
+          phMsgQueue == NULL) {
+               status = DSP_EMEMORY;
+               goto func_end;
+       }
 
        *phMsgQueue = NULL;
        /* Allocate MSG_QUEUE object */
@@ -226,9 +234,8 @@ func_end:
  */
 void WMD_MSG_Delete(struct MSG_MGR *hMsgMgr)
 {
-       DBC_Require(MEM_IsValidHandle(hMsgMgr, MSGMGR_SIGNATURE));
-
-       DeleteMsgMgr(hMsgMgr);
+       if (MEM_IsValidHandle(hMsgMgr, MSGMGR_SIGNATURE))
+               DeleteMsgMgr(hMsgMgr);
 }
 
 /*
@@ -237,10 +244,14 @@ void WMD_MSG_Delete(struct MSG_MGR *hMsgMgr)
  */
 void WMD_MSG_DeleteQueue(struct MSG_QUEUE *hMsgQueue)
 {
-       struct MSG_MGR *hMsgMgr = hMsgQueue->hMsgMgr;
+       struct MSG_MGR *hMsgMgr;
        u32 refCount;
 
-       DBC_Require(MEM_IsValidHandle(hMsgQueue, MSGQ_SIGNATURE));
+       if (!MEM_IsValidHandle(hMsgQueue, MSGQ_SIGNATURE) ||
+                       !hMsgQueue->hMsgMgr)
+               goto func_end;
+
+       hMsgMgr = hMsgQueue->hMsgMgr;
        hMsgQueue->fDone = true;
         /*  Unblock all threads blocked in MSG_Get() or MSG_Put().  */
        refCount = hMsgQueue->refCount;
@@ -262,6 +273,8 @@ void WMD_MSG_DeleteQueue(struct MSG_QUEUE *hMsgQueue)
                SYNC_ResetEvent(hMsgMgr->hSyncEvent);
 func_cont:
        (void)SYNC_LeaveCS(hMsgMgr->hSyncCS);
+func_end:
+       return;
 }
 
 /*
@@ -278,8 +291,10 @@ DSP_STATUS WMD_MSG_Get(struct MSG_QUEUE *hMsgQueue,
        u32 uIndex;
        DSP_STATUS status = DSP_SOK;
 
-       DBC_Require(MEM_IsValidHandle(hMsgQueue, MSGQ_SIGNATURE));
-       DBC_Require(pMsg != NULL);
+       if (!MEM_IsValidHandle(hMsgQueue, MSGQ_SIGNATURE) || pMsg == NULL) {
+               status = DSP_EMEMORY;
+               goto func_end;
+       }
 
        hMsgMgr = hMsgQueue->hMsgMgr;
        if (!hMsgQueue->msgUsedList) {
@@ -371,11 +386,12 @@ DSP_STATUS WMD_MSG_Put(struct MSG_QUEUE *hMsgQueue,
        u32 uIndex;
        DSP_STATUS status = DSP_SOK;
 
-       DBC_Require(MEM_IsValidHandle(hMsgQueue, MSGQ_SIGNATURE));
-       DBC_Require(pMsg != NULL);
-
+       if (!MEM_IsValidHandle(hMsgQueue, MSGQ_SIGNATURE) || !pMsg ||
+                                               !hMsgQueue->hMsgMgr) {
+               status = DSP_EMEMORY;
+               goto func_end;
+       }
        hMsgMgr = hMsgQueue->hMsgMgr;
-
        if (!hMsgMgr->msgFreeList) {
                status = DSP_EHANDLE;
                goto func_end;
@@ -474,10 +490,20 @@ DSP_STATUS WMD_MSG_RegisterNotify(struct MSG_QUEUE 
*hMsgQueue, u32 uEventMask,
 {
        DSP_STATUS status = DSP_SOK;
 
-       DBC_Require(MEM_IsValidHandle(hMsgQueue, MSGQ_SIGNATURE));
-       DBC_Require(hNotification != NULL);
-       DBC_Require(uEventMask == DSP_NODEMESSAGEREADY || uEventMask == 0);
-       DBC_Require(uNotifyType == DSP_SIGNALEVENT);
+       if (!MEM_IsValidHandle(hMsgQueue, MSGQ_SIGNATURE) || !hNotification) {
+               status = DSP_EMEMORY;
+               goto func_end;
+       }
+
+       if (!(uEventMask == DSP_NODEMESSAGEREADY || uEventMask == 0)) {
+               status = DSP_ENODETYPE;
+               goto func_end;
+       }
+
+       if (uNotifyType != DSP_SIGNALEVENT) {
+               status = DSP_EWRONGSTATE;
+               goto func_end;
+       }
 
        status = NTFY_Register(hMsgQueue->hNtfy, hNotification, uEventMask,
                              uNotifyType);
@@ -488,7 +514,7 @@ DSP_STATUS WMD_MSG_RegisterNotify(struct MSG_QUEUE 
*hMsgQueue, u32 uEventMask,
                 *  by NODE, and message ready handled by MSG.  */
                status = DSP_SOK;
        }
-
+func_end:
        return status;
 }
 
@@ -497,9 +523,6 @@ DSP_STATUS WMD_MSG_RegisterNotify(struct MSG_QUEUE 
*hMsgQueue, u32 uEventMask,
  */
 void WMD_MSG_SetQueueId(struct MSG_QUEUE *hMsgQueue, u32 dwId)
 {
-       DBC_Require(MEM_IsValidHandle(hMsgQueue, MSGQ_SIGNATURE));
-       /* DBC_Require(dwId != 0); */
-
        /*
         *  A message queue must be created when a node is allocated,
         *  so that NODE_RegisterNotify() can be called before the node
@@ -507,7 +530,8 @@ void WMD_MSG_SetQueueId(struct MSG_QUEUE *hMsgQueue, u32 
dwId)
         *  node is created, we need this function to set hMsgQueue->dwId
         *  to the node environment, after the node is created.
         */
-       hMsgQueue->dwId = dwId;
+       if (MEM_IsValidHandle(hMsgQueue, MSGQ_SIGNATURE))
+               hMsgQueue->dwId = dwId;
 }
 
 /*
@@ -536,7 +560,8 @@ static DSP_STATUS AddNewMsg(struct LST_LIST *msgList)
  */
 static void DeleteMsgMgr(struct MSG_MGR *hMsgMgr)
 {
-       DBC_Require(MEM_IsValidHandle(hMsgMgr, MSGMGR_SIGNATURE));
+       if (!MEM_IsValidHandle(hMsgMgr, MSGMGR_SIGNATURE))
+               goto func_end;
 
        if (hMsgMgr->queueList) {
                if (LST_IsEmpty(hMsgMgr->queueList)) {
@@ -562,6 +587,8 @@ static void DeleteMsgMgr(struct MSG_MGR *hMsgMgr)
                SYNC_DeleteCS(hMsgMgr->hSyncCS);
 
        MEM_FreeObject(hMsgMgr);
+func_end:
+       return;
 }
 
 /*
-- 
1.6.2.4

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

Reply via email to