kernel panic while doing dma_alloc_coherent() function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi guys

I am trying to port opensource kernel 3.0.11 onto MSM chipset. 

While porting the SD card controller driver, i am seeing a kernel panic.
While tracing with printk, i am struck at 

in arch/arm/mm/dma_mapping.c ,
Function,

static struct page *__dma_alloc_buffer(struct device *dev, size_t size, gfp_t gfp)
{
      <snip>
..... 
    ptr = page_address(page);
    memset(ptr, 0, size);
    dmac_flush_range(ptr, ptr + size); --> struck here

        <snip>
}

And i am seeing the following call stack,

1>Unable to handle kernel paging request at virtual address 60600000
<1>pgd = c0004000
<1>[60600000] *pgd=00000000
<0>Internal error: Oops: 5 [#1] PREEMPT
CPU: 0    Not tainted  (3.0.31-00022-gb0c6bf3-dirty #2)
PC is at copy_page+0x10/0x60
LR is at v6_copy_user_highpage_nonaliasing+0x8c/0xec
pc : [<c010fb30>]    lr : [<c002b5e8>]    psr: 30000013
sp : ef82de28  ip : 00000000  fp : c029b19c
r10: c029ace8  r9 : c0d02000  r8 : 000000d0
r7 : 00017fff  r6 : 60600000  r5 : c030af34  r4 : 5fa00000
r3 : c0314000  r2 : 0000003f  r1 : 60600000  r0 : 5fa00000
Flags: nzCV  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
Control: 10c57c7d  Table: 00404059  DAC: 00000015


<0>Process swapper (pid: 1, stack limit = 0xef82c268)
<0>Stack: (0xef82de28 to 0xef82e000)

[<c010fb30>] (copy_page+0x10/0x60) from [<c002b5e8>] (v6_copy_user_highpage_nonaliasing+0x8c/0xec)
[<c002b5e8>] (v6_copy_user_highpage_nonaliasing+0x8c/0xec) from [<c0028578>] (__dma_alloc+0x114/0x2e8)
[<c0028578>] (__dma_alloc+0x114/0x2e8) from [<c00287cc>] (dma_alloc_coherent+0x54/0x60)
[<c00287cc>] (dma_alloc_coherent+0x54/0x60) from [<c0194da8>] (msmsdcc_probe+0x534/0x1100)
[<c0194da8>] (msmsdcc_probe+0x534/0x1100) from [<c01606d0>] (platform_drv_probe+0x18/0x1c)
[<c01606d0>] (platform_drv_probe+0x18/0x1c) from [<c015f4a0>] (driver_probe_device+0xf8/0x184)
[<c015f4a0>] (driver_probe_device+0xf8/0x184) from [<c015f5b8>] (__driver_attach+0x8c/0x90)
[<c015f5b8>] (__driver_attach+0x8c/0x90) from [<c015ec7c>] (bus_for_each_dev+0x60/0x8c)
[<c015ec7c>] (bus_for_each_dev+0x60/0x8c) from [<c015e558>] (bus_add_driver+0xa0/0x228)
[<c015e558>] (bus_add_driver+0xa0/0x228) from [<c015fb8c>] (driver_register+0x78/0x144)
[<c015fb8c>] (driver_register+0x78/0x144) from [<c00083d0>] (do_one_initcall+0x94/0x164)
[<c00083d0>] (do_one_initcall+0x94/0x164) from [<c0008560>] (kernel_init+0x8c/0x278)
[<c0008560>] (kernel_init+0x8c/0x278) from [<c002467c>] (kernel_thread_exit+0x0/0x8)
<0>Code: e92d4010 f5d1f000 f5d1f020 e3a0203f (e8b15018) 
<4>---[ end trace ce4f1a328aa6a271 ]---
<6>note: swapper[1] exited with preempt_count 2
<0>Kernel panic - not syncing: Attempted to kill init!
[<c0027ab4>] (unwind_backtrace+0x0/0xfc) from [<c0213054>] (panic+0x64/0x188)
[<c0213054>] (panic+0x64/0x188) from [<c0045204>] (do_exit+0x664/0x6c8)
[<c0045204>] (do_exit+0x664/0x6c8) from [<c0026e78>] (die+0x238/0x2b4)
[<c0026e78>] (die+0x238/0x2b4) from [<c0028b10>] (__do_kernel_fault+0x64/0x84)
[<c0028b10>] (__do_kernel_fault+0x64/0x84) from [<c0028c70>] (do_page_fault+0x140/0x1f4)
[<c0028c70>] (do_page_fault+0x140/0x1f4) from [<c0023234>] (do_DataAbort+0x34/0x98)
[<c0023234>] (do_DataAbort+0x34/0x98) from [<c002392c>] (__dabt_svc+0x4c/0x60)
Exception stack(0xef82dde0 to 0xef82de28)
dde0: 5fa00000 60600000 0000003f c0314000 5fa00000 c030af34 60600000 00017fff
de00: 000000d0 c0d02000 c029ace8 c029b19c 00000000 ef82de28 c002b5e8 c010fb30
de20: 30000013 ffffffff
[<c002392c>] (__dabt_svc+0x4c/0x60) from [<c010fb30>] (copy_page+0x10/0x60)
[<c010fb30>] (copy_page+0x10/0x60) from [<c002b5e8>] (v6_copy_user_highpage_nonaliasing+0x8c/0xec)
[<c002b5e8>] (v6_copy_user_highpage_nonaliasing+0x8c/0xec) from [<c0028578>] (__dma_alloc+0x114/0x2e8)
[<c0028578>] (__dma_alloc+0x114/0x2e8) from [<c00287cc>] (dma_alloc_coherent+0x54/0x60)
[<c00287cc>] (dma_alloc_coherent+0x54/0x60) from [<c0194da8>] (msmsdcc_probe+0x534/0x1100)
[<c0194da8>] (msmsdcc_probe+0x534/0x1100) from [<c01606d0>] (platform_drv_probe+0x18/0x1c)
[<c01606d0>] (platform_drv_probe+0x18/0x1c) from [<c015f4a0>] (driver_probe_device+0xf8/0x184)
[<c015f4a0>] (driver_probe_device+0xf8/0x184) from [<c015f5b8>] (__driver_attach+0x8c/0x90)
[<c015f5b8>] (__driver_attach+0x8c/0x90) from [<c015ec7c>] (bus_for_each_dev+0x60/0x8c)
[<c015ec7c>] (bus_for_each_dev+0x60/0x8c) from [<c015e558>] (bus_add_driver+0xa0/0x228)
[<c015e558>] (bus_add_driver+0xa0/0x228) from [<c015fb8c>] (driver_register+0x78/0x144)
[<c015fb8c>] (driver_register+0x78/0x144) from [<c00083d0>] (do_one_initcall+0x94/0x164)
[<c00083d0>] (do_one_initcall+0x94/0x164) from [<c0008560>] (kernel_init+0x8c/0x278)
[<c0008560>] (kernel_init+0x8c/0x278) from [<c002467c>] (kernel_thread_exit+0x0/0x8)

I had verified the following things from my side,
--> There is enough virtual addresses available for dma_alloc() (14MB given)

Is there any other possibility why dma_alloc() function fails???

 
With regards,
Sandeep Kumar Anantapalli,
_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux