1 diff -urN kernel-power-2.6.28/arch/arm/plat-omap/mailbox.c kernel-power-2.6.28.new/arch/arm/plat-omap/mailbox.c
2 --- kernel-power-2.6.28/arch/arm/plat-omap/mailbox.c 2011-10-03 21:46:25.000000000 +0100
3 +++ kernel-power-2.6.28.new/arch/arm/plat-omap/mailbox.c 2011-10-03 20:15:03.000000000 +0100
6 static struct omap_mbox *mboxes;
7 static DEFINE_RWLOCK(mboxes_lock);
11 * Mailbox sequence bit API
15 spin_lock_irqsave(q->queue_lock, flags);
16 rq = elv_next_request(q);
18 + omap_mbox_enable_irq(mbox, IRQ_RX);
21 spin_unlock_irqrestore(q->queue_lock, flags);
26 if (blk_end_request(rq, 0, 0))
29 - mbox->rxq->callback((void *)msg);
30 + if(mbox->rxq->callback)
31 + mbox->rxq->callback((void *)msg);
37 while (!mbox_fifo_empty(mbox)) {
38 rq = blk_get_request(q, WRITE, GFP_ATOMIC);
41 + omap_mbox_disable_irq(mbox, IRQ_RX);
46 msg = mbox_fifo_read(mbox);
47 rq->data = (void *)msg;
50 static void omap_mbox_fini(struct omap_mbox *mbox)
52 + free_irq(mbox->irq, mbox);
53 + tasklet_kill(&mbox->txq->tasklet);
54 + flush_work(&mbox->rxq->work);
55 mbox_queue_free(mbox->txq);
56 mbox_queue_free(mbox->rxq);
58 - free_irq(mbox->irq, mbox);
60 if (unlikely(mbox->ops->shutdown))
61 mbox->ops->shutdown(mbox);
63 diff -urN kernel-power-2.6.28/drivers/dsp/bridge/rmgr/drv.c kernel-power-2.6.28.new/drivers/dsp/bridge/rmgr/drv.c
64 --- kernel-power-2.6.28/drivers/dsp/bridge/rmgr/drv.c 2011-10-03 21:46:33.000000000 +0100
65 +++ kernel-power-2.6.28.new/drivers/dsp/bridge/rmgr/drv.c 2011-10-03 21:30:40.000000000 +0100
67 /* GPP PROCESS CLEANUP CODE */
69 static DSP_STATUS DRV_ProcFreeNodeRes(HANDLE hPCtxt);
70 -static DSP_STATUS DRV_ProcFreeSTRMRes(HANDLE hPCtxt);
71 extern enum NODE_STATE NODE_GetState(HANDLE hNode);
73 /* Allocate and add a node resource element
75 pDMMList = pDMMList->next;
76 if (pDMMRes->dmmAllocated) {
77 status = PROC_UnMap(pDMMRes->hProcessor,
78 - (void *)pDMMRes->ulDSPResAddr, pCtxt);
79 + (void *)pDMMRes->ulDSPAddr, pCtxt);
80 if (DSP_FAILED(status))
81 pr_debug("%s: PROC_UnMap failed! status ="
82 " 0x%xn", __func__, status);
87 -/* Actual Stream De-Allocation */
88 -static DSP_STATUS DRV_ProcFreeSTRMRes(HANDLE hPCtxt)
90 +/* Release all Stream resources and its context
91 +* This is called from .bridge_release.
93 +DSP_STATUS DRV_RemoveAllSTRMResElements(HANDLE hPCtxt){
94 struct PROCESS_CONTEXT *pCtxt = (struct PROCESS_CONTEXT *)hPCtxt;
95 DSP_STATUS status = DSP_SOK;
96 - u8 **apBuffer = NULL;
97 - struct STRM_RES_OBJECT *pSTRMRes = NULL;
98 + struct STRM_RES_OBJECT *strm_res = NULL;
99 + struct STRM_RES_OBJECT *strm_tmp = NULL;
100 struct STRM_INFO strm_info;
101 struct DSP_STREAMINFO user;
102 + u8 **apBuffer = NULL;
108 - pSTRMRes = pCtxt->pSTRMList;
110 - if (pSTRMRes->uNumBufs) {
111 - apBuffer = MEM_Alloc(pSTRMRes->uNumBufs *
112 - sizeof(u8 *), MEM_NONPAGED);
114 - return DSP_EMEMORY;
115 - status = STRM_FreeBuffer(pSTRMRes->hStream, apBuffer,
116 - pSTRMRes->uNumBufs, pCtxt);
117 - MEM_Free(apBuffer);
118 + strm_tmp = pCtxt->pSTRMList;
120 + strm_res = strm_tmp;
121 + strm_tmp = strm_tmp->next;
122 + if (strm_res->uNumBufs) {
123 + apBuffer = MEM_Alloc((strm_res->uNumBufs *
124 + sizeof(u8 *)), MEM_NONPAGED);
125 + status = STRM_FreeBuffer(strm_res->hStream, apBuffer,
126 + strm_res->uNumBufs, pCtxt);
128 + status = STRM_FreeBuffer(strm_res->hStream,
129 + apBuffer, strm_res->uNumBufs, pCtxt);
130 + MEM_Free(apBuffer);
133 strm_info.pUser = &user;
134 user.uNumberBufsInStream = 0;
135 - STRM_GetInfo(pSTRMRes->hStream, &strm_info, sizeof(strm_info));
136 - while (strm_info.pUser->uNumberBufsInStream--)
137 - STRM_Reclaim(pSTRMRes->hStream, &pBufPtr, &ulBytes,
138 - (u32 *)&ulBufSize, &dwArg);
144 -/* Release all Stream resources and its context
145 -* This is called from .bridge_release.
147 -DSP_STATUS DRV_RemoveAllSTRMResElements(HANDLE hPCtxt)
149 - struct PROCESS_CONTEXT *pCtxt = (struct PROCESS_CONTEXT *)hPCtxt;
150 - DSP_STATUS status = DSP_SOK;
151 - struct STRM_RES_OBJECT *pTempSTRMRes2 = NULL;
152 - struct STRM_RES_OBJECT *pTempSTRMRes = NULL;
154 - DRV_ProcFreeSTRMRes(pCtxt);
155 - pTempSTRMRes = pCtxt->pSTRMList;
156 - while (pTempSTRMRes != NULL) {
157 - pTempSTRMRes2 = pTempSTRMRes;
158 - pTempSTRMRes = pTempSTRMRes->next;
159 - MEM_Free(pTempSTRMRes2);
160 + STRM_GetInfo(strm_res->hStream, &strm_info, sizeof(strm_info));
161 + while (user.uNumberBufsInStream--)
162 + STRM_Reclaim(strm_res->hStream, &pBufPtr, &ulBytes,
163 + (u32 *)&ulBufSize, &dwArg);
164 + status = STRM_Close(strm_res->hStream, pCtxt);
166 - pCtxt->pSTRMList = NULL;
170 diff -urN kernel-power-2.6.28/drivers/dsp/bridge/rmgr/node.c kernel-power-2.6.28.new/drivers/dsp/bridge/rmgr/node.c
171 --- kernel-power-2.6.28/drivers/dsp/bridge/rmgr/node.c 2011-10-03 21:46:33.000000000 +0100
172 +++ kernel-power-2.6.28.new/drivers/dsp/bridge/rmgr/node.c 2011-10-03 20:17:41.000000000 +0100
173 @@ -3170,7 +3170,7 @@
174 pNodeId, pNodeProps);
176 status = PROC_GetDevObject(hProcessor, &hDevObject);
177 - if (hDevObject != NULL)
179 status = DEV_GetNodeManager(hDevObject, &hNodeMgr);
181 if (hNodeMgr == NULL) {
182 diff -urN kernel-power-2.6.28/drivers/dsp/bridge/rmgr/proc.c kernel-power-2.6.28.new/drivers/dsp/bridge/rmgr/proc.c
183 --- kernel-power-2.6.28/drivers/dsp/bridge/rmgr/proc.c 2011-10-03 21:46:33.000000000 +0100
184 +++ kernel-power-2.6.28.new/drivers/dsp/bridge/rmgr/proc.c 2011-10-03 20:21:33.000000000 +0100
185 @@ -351,13 +351,11 @@
186 status = DEV_GetWMDContext(hDevObject,
187 &pProcObject->hWmdContext);
188 if (DSP_FAILED(status)) {
189 - MEM_FreeObject(hProcObject);
190 GT_0trace(PROC_DebugMask, GT_7CLASS,
191 "PROC_AutoStart: Failed "
192 "to get WMD Context \n");
195 - MEM_FreeObject(hProcObject);
196 GT_0trace(PROC_DebugMask, GT_7CLASS,
197 "PROC_AutoStart: Failed to "
200 GT_0trace(PROC_DebugMask, GT_7CLASS, "PROC_AutoStart: "
201 "No Exec file found \n");
203 + MEM_Free(hProcObject->g_pszLastCoff);
204 + hProcObject->g_pszLastCoff = NULL;
206 MEM_FreeObject(hProcObject);