Hi,
We are using QorIQ P1021 processor, SDK - QorIQ-SDK-V1.7 , Linux version 3.12.19. Facing a kernel crash issue with ethernet driver gianfar.c - gfar_clean_rx_ring function. I am attaching crash logs here. Disassembling the gianfar.c function points to line -> " newskb = gfar_new_skb(dev); skb = rx_queue->rx_skbuff[rx_queue->skb_currx]; "
Crash Logs:
uChar port 1 ee
Unable to handle kernel paging request for data at address 0xffffff54
Faulting instruction address: 0xc0518a7c
Oops: Kernel access of bad area, sig: 11 [#1]
SMP NR_CPUS=4 P1021PLCM-ISDN
Modules linked in: isdn_gw(PO+)
CPU: 0 PID: 0 Comm: swapper/0 Tainted: P O 3.12.19-rt30isdn-svn714 #2
task: c0855300 ti: effea000 task.ti: c08a6000
NIP: c0518a7c LR: c03c5d24 CTR: c000d280
REGS: effebe20 TRAP: 0300 Tainted: P O (3.12.19-rt30isdn-svn714)
MSR: 00029000 <CE,EE,ME> CR: 44024048 XER: 20000000
DEAR: ffffff54, ESR: 00000000
GPR00: c03c5c7c effebed0 c0855300 ffffff00 0000006c 00000000 07610e80 00000600
GPR08: 00000800 00000101 c72415c0 00000001 84024048 1001a6f0 ef024658 ef024650
GPR16: ef024648 ef024640 c08b0000 c70dd000 ef5665c0 ffffff00 c0670000 00000008
GPR24: c08b4274 c70dd000 c11f0ae8 00000001 0000006c 00000040 c654f6c0 ef024000
NIP [c0518a7c] skb_put+0x0/0x5c
LR [c03c5d24] gfar_clean_rx_ring+0x2b4/0x558
Call Trace:
[effebed0] [c03c5c7c] gfar_clean_rx_ring+0x20c/0x558 (unreliable)
[effebf50] [c03c6004] gfar_poll_rx_sq+0x3c/0xa8
[effebf70] [c05272b4] net_rx_action+0x120/0x1d8
[effebfa0] [c00434f8] __do_softirq+0x100/0x1cc
[effebff0] [c000d6d4] call_do_softirq+0x24/0x3c
[effe9fc0] [c00048ec] do_softirq+0x90/0xb8
[effe9fe0] [c0043ec4] irq_exit+0xa4/0xc8
[effe9ff0] [c000d710] call_do_irq+0x24/0x3c
[c08a7ea0] [c000467c] do_IRQ+0x8c/0xf8
[c08a7ec0] [c000f69c] ret_from_except+0x0/0x18
--- Exception: 501 at arch_cpu_idle+0x24/0x5c
LR = arch_cpu_idle+0x24/0x5c
[c08a7f80] [c00a5528] rcu_idle_enter+0xac/0xec (unreliable)
[c08a7f90] [c007f980] cpu_startup_entry+0x120/0x170
[c08a7fc0] [c08107a4] start_kernel+0x2f0/0x304
[c08a7ff0] [c00003fc] skpinv+0x2e8/0x324
Instruction dump:
4bfffe1d 54692834 3929ffe0 7d5f482e 554a003c 614a0002 7d5f492e 80010014
83e1000c 38210010 7c0803a6 4e800020 <81230054> 81430094 7d290034 5529d97e
---[ end trace 60191b6bdb0b3477 ]---
Kernel panic - not syncing: Fatal exception in interrupt
Rebooting in 180 seconds..
Is there a fix available for this? Or any idea on the cause?
Original Attachment has been moved to: gianfar.c.zip
Hello Akshaya K,
Linux SDK 1.7 has been tested strictly on Freescale demo board, probably your problem is not caused by Linux Kernel Ethernet driver itself.
According to the Kernel call trace information, it fails at handling Kernel paging request, it seems that this problem is caused by inappropriate DDR controller parameters configuration. I suggest you test DDR memory first, you could use mtest command in u-boot to do verification, and use DDRv Tool to assist you to do adjustment.
Have a great day,
Yiping
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------