dma-pl330: avoid double call _finish_off
author黄涛 <huangtao@rock-chips.com>
Wed, 13 Jun 2012 09:04:51 +0000 (17:04 +0800)
committer黄涛 <huangtao@rock-chips.com>
Wed, 13 Jun 2012 09:11:17 +0000 (17:11 +0800)
commitd406055d800ab86930a31e446094cbd3204cd42a
treee7b2b5f7c621892e639a4172ca54a7e49623058c
parentf675fbc79c34cd7c2f100a3053b5f74e8af4e110
dma-pl330: avoid double call _finish_off

fix this bug:
BUG rk29-pl330.1: Object already free
-----------------------------------------------------------------------------

INFO: Allocated in rk29_dma_enqueue+0x9c/0x430 age=4 cpu=0 pid=1517
INFO: Freed in rk29_dma_ctrl+0x5dc/0x7f4 age=0 cpu=1 pid=741
INFO: Slab 0xc1ba2ca0 objects=51 used=43 fp=0xdf6e5780 flags=0x0081
INFO: Object 0xdf6e5780 @offset=1920 fp=0xdf6e5870

Bytes b4 0xdf6e5770:  00 00 00 00 32 d1 ff ff 5a 5a 5a 5a 5a 5a 5a 5a ....2???ZZZZZZZZ
  Object 0xdf6e5780:  6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk
  Object 0xdf6e5790:  6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5 kkkkkkkkkkkkkkk?
 Redzone 0xdf6e57a0:  bb bb bb bb                                     ????
 Padding 0xdf6e57c8:  5a 5a 5a 5a 5a 5a 5a 5a                         ZZZZZZZZ
[<c043b170>] (unwind_backtrace+0x0/0xf0) from [<c04cf814>] (free_debug_processing+0xf4/0x1ec)
[<c04cf814>] (free_debug_processing+0xf4/0x1ec) from [<c04d0634>] (kmem_cache_free+0x170/0x2ac)
[<c04d0634>] (kmem_cache_free+0x170/0x2ac) from [<c0441a24>] (pl330_update+0x334/0x3d8)
[<c0441a24>] (pl330_update+0x334/0x3d8) from [<c044f01c>] (pl330_irq_handler+0xc/0x18)
[<c044f01c>] (pl330_irq_handler+0xc/0x18) from [<c049bc58>] (handle_irq_event_percpu+0x30/0x150)
[<c049bc58>] (handle_irq_event_percpu+0x30/0x150) from [<c049bdb4>] (handle_irq_event+0x3c/0x5c)
[<c049bdb4>] (handle_irq_event+0x3c/0x5c) from [<c049e1cc>] (handle_fasteoi_irq+0xc8/0x100)
[<c049e1cc>] (handle_fasteoi_irq+0xc8/0x100) from [<c049b878>] (generic_handle_irq+0x24/0x38)
[<c049b878>] (generic_handle_irq+0x24/0x38) from [<c0430078>] (asm_do_IRQ+0x78/0xb8)
[<c0430078>] (asm_do_IRQ+0x78/0xb8) from [<c0435708>] (__irq_svc+0x48/0xe0)

and this bug:
Unable to handle kernel NULL pointer dereference at virtual address 0000010c
pgd = eda88000
[0000010c] *pgd=8d960831, *pte=00000000, *ppte=00000000
Internal error: Oops: 17 [#1] PREEMPT SMP
CPU: 0    Tainted: G         C   (3.0.8+ #27)
PC is at rk29_audio_buffdone+0x24/0x6c
LR is at rk29_pl330_rq+0x240/0x2a4
pc : [<c0701d54>]    lr : [<c044fb90>]    psr: a0000193
sp : cf9b9c18  ip : 00000001  fp : 00000000
r10: eec9ef30  r9 : eee72844  r8 : ee4fc2a4
r7 : 00000000  r6 : df9573ac  r5 : ee4fc280  r4 : df9576e0
r3 : 00000040  r2 : ffffffff  r1 : 00000040  r0 : df9576e0
arch/arm/plat-rk/dma-pl330.c