Re: PROBLEM: ARM-dma-mapping-fix-for-speculative-prefetching cause OOPS

From: Qin Dehua
Date: Fri Jul 08 2011 - 00:38:44 EST


2011/7/7 Russell King <rmk@xxxxxxxxxxxxxxxx>:
> Could you try commenting out:
>
> +       if (dir != DMA_TO_DEVICE)
> +               outer_inv_range(paddr, paddr + size);
>
> in ___dma_page_dev_to_cpu and:
>
> +       if (dir != DMA_TO_DEVICE) {
> +               unsigned long paddr = __pa(kaddr);
> +               outer_inv_range(paddr, paddr + size);
> +       }
>
> in ___dma_single_dev_to_cpu please - and put a BUG_ON(dir == DMA_BIDIRECTIONAL)
> in their place (because that won't be handled correctly with that change.)

After doing the above changes, the kernel just report BUG_ON(dir ==
DMA_BIDIRECTIONAL):

kernel BUG at arch/arm/mm/dma-mapping.c:526!
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = 80004000
[00000000] *pgd=00000000
Internal error: Oops: 805 [#1]
last sysfs file:
Modules linked in:
CPU: 0 Not tainted (2.6.38.8+ #57)
PC is at __bug+0x1c/0x28
LR is at __bug+0x18/0x28
pc : [<8002b0d4>] lr : [<8002b0d0>] psr: 60000013
sp : 80419e90 ip : 00000007 fp : 00001000
r10: f18fb0ec r9 : 00000005 r8 : 71932000
r7 : 81376640 r6 : 00001000 r5 : 00000000 r4 : 00000000
r3 : 00000000 r2 : 60000013 r1 : 0000219b r0 : 00000033
Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: 0400397f Table: 00004018 DAC: 00000035
Process swapper (pid: 0, stack limit = 0x80418278)
Stack: (0x80419e90 to 0x8041a000)
9e80: 80533ba1 8002d474 80419ec4 80419ea8
9ea0: 80033e40 00000003 00000004 f18fb0c0 f18fb0c0 8028948c 80419edc 80419ec8
9ec0: 80032ea4 f18fb0c0 8041eb10 00000000 00000000 00000100 f188a984 f188a980
9ee0: 00000000 802895d8 80532b80 f188a98c 00000000 00000004 718d2040 00000001
9f00: 80043dc0 00000000 8041eb10 80532a20 00000018 00000100 0000000a 80418000
9f20: 8041e994 8003e960 00000006 00000001 80532a5c 8003e444 f18a39c0 80420630
9f40: 00000001 00000001 804278a0 00000000 8041a000 000202c0 69056819 00020258
9f60: 00000000 8002704c ffffffff 80419fac 00000005 80027b7c 8039b020 000000ce
9f80: 00000000 60000013 80418000 80431eac 8041cabc 8041a000 000202c0 69056819
9fa0: 00020258 00000000 80423734 80419fc0 8002907c 80028eb4 60000013 ffffffff
9fc0: 8041a0e8 80431e78 80431e00 800089e8 80008344 00000000 00000000 80022dc0
9fe0: 00000000 0400397d 8041a024 800231c4 8041cab0 00008034 00000000 00000000
[<8002b0d4>] (__bug+0x1c/0x28) from [<8002d474>]
(___dma_page_dev_to_cpu+0x7c/0x84)
[<8002d474>] (___dma_page_dev_to_cpu+0x7c/0x84) from [<8028948c>]
(iop_adma_run_tx_complete_actions+0x204/0x288)
[<8028948c>] (iop_adma_run_tx_complete_actions+0x204/0x288) from
[<802895d8>] (__iop_adma_slot_cleanup+0xc8/0x34c)
[<802895d8>] (__iop_adma_slot_cleanup+0xc8/0x34c) from [<8003e960>]
(tasklet_action+0x70/0xec)
[<8003e960>] (tasklet_action+0x70/0xec) from [<8003e444>]
(__do_softirq+0x88/0x124)
[<8003e444>] (__do_softirq+0x88/0x124) from [<8002704c>] (asm_do_IRQ+0x4c/0x98)
[<8002704c>] (asm_do_IRQ+0x4c/0x98) from [<80027b7c>] (__irq_svc+0x3c/0x80)
Exception stack(0x80419f78 to 0x80419fc0)
9f60: 8039b020 000000ce
9f80: 00000000 60000013 80418000 80431eac 8041cabc 8041a000 000202c0 69056819
9fa0: 00020258 00000000 80423734 80419fc0 8002907c 80028eb4 60000013 ffffffff
[<80027b7c>] (__irq_svc+0x3c/0x80) from [<80028eb4>] (cpu_idle+0x8c/0xa4)
[<80028eb4>] (cpu_idle+0x8c/0xa4) from [<800089e8>] (start_kernel+0x224/0x2f4)
[<800089e8>] (start_kernel+0x224/0x2f4) from [<00008034>] (0x8034)
Code: e1a01000 e59f000c eb003ca2 e3a03000 (e5833000)
---[ end trace 6b4795e8111d3a81 ]---
Kernel panic - not syncing: Fatal exception in interrupt
[<8002ced8>] (unwind_backtrace+0x0/0xf0) from [<8003930c>] (panic+0x5c/0x1a0)
[<8003930c>] (panic+0x5c/0x1a0) from [<8002b60c>] (die+0x188/0x1bc)
[<8002b60c>] (die+0x188/0x1bc) from [<8002df68>] (__do_kernel_fault+0x68/0x88)
[<8002df68>] (__do_kernel_fault+0x68/0x88) from [<8002e0d0>]
(do_page_fault+0x148/0x214)
[<8002e0d0>] (do_page_fault+0x148/0x214) from [<800272e0>]
(do_DataAbort+0x38/0x9c)
[<800272e0>] (do_DataAbort+0x38/0x9c) from [<80027b2c>] (__dabt_svc+0x4c/0x60)
Exception stack(0x80419e48 to 0x80419e90)
9e40: 00000033 0000219b 60000013 00000000 00000000 00000000
9e60: 00001000 81376640 71932000 00000005 f18fb0ec 00001000 00000007 80419e90
9e80: 8002b0d0 8002b0d4 60000013 ffffffff
[<80027b2c>] (__dabt_svc+0x4c/0x60) from [<8002b0d4>] (__bug+0x1c/0x28)
[<8002b0d4>] (__bug+0x1c/0x28) from [<8002d474>]
(___dma_page_dev_to_cpu+0x7c/0x84)
[<8002d474>] (___dma_page_dev_to_cpu+0x7c/0x84) from [<8028948c>]
(iop_adma_run_tx_complete_actions+0x204/0x288)
[<8028948c>] (iop_adma_run_tx_complete_actions+0x204/0x288) from
[<802895d8>] (__iop_adma_slot_cleanup+0xc8/0x34c)
[<802895d8>] (__iop_adma_slot_cleanup+0xc8/0x34c) from [<8003e960>]
(tasklet_action+0x70/0xec)
[<8003e960>] (tasklet_action+0x70/0xec) from [<8003e444>]
(__do_softirq+0x88/0x124)
[<8003e444>] (__do_softirq+0x88/0x124) from [<8002704c>] (asm_do_IRQ+0x4c/0x98)
[<8002704c>] (asm_do_IRQ+0x4c/0x98) from [<80027b7c>] (__irq_svc+0x3c/0x80)
Exception stack(0x80419f78 to 0x80419fc0)
9f60: 8039b020 000000ce
9f80: 00000000 60000013 80418000 80431eac 8041cabc 8041a000 000202c0 69056819
9fa0: 00020258 00000000 80423734 80419fc0 8002907c 80028eb4 60000013 ffffffff
[<80027b7c>] (__irq_svc+0x3c/0x80) from [<80028eb4>] (cpu_idle+0x8c/0xa4)
[<80028eb4>] (cpu_idle+0x8c/0xa4) from [<800089e8>] (start_kernel+0x224/0x2f4)
[<800089e8>] (start_kernel+0x224/0x2f4) from [<00008034>] (0x8034)

Regards,
Qin Dehua
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/