e1000e: allocate ring descriptors with dma_zalloc_coherent
Descriptor rings were not initialized at zero when allocated
When area contained garbage data, it caused skb_over_panic in
e1000_clean_rx_irq (if data had E1000_RXD_STAT_DD bit set)
This patch makes use of dma_zalloc_coherent to make sure the
ring is memset at 0 to prevent the area from containing garbage.
Following is the signature of the panic:
[email protected]: skbuff: skb_over_panic: text:
80407b20 len:64010 put:64010 head:
ab46d800 data:
ab46d842 tail:0xab47d24c end:0xab46df40 dev:eth0
[email protected]: BUG: failure at net/core/skbuff.c:105/skb_panic()!
[email protected]: Kernel panic - not syncing: BUG!
[email protected]:
[email protected]: Process swapper/0 (pid: 0, threadinfo=
81728000, task=
8173cc00 ,cpu: 0)
[email protected]: SP = <
815a1c0c>
[email protected]: Stack:
00000001
[email protected]:
b2d89800 815e33ac
[email protected]:
ea73c040 00000001
[email protected]:
60040003 0000fa0a
[email protected]:
00000002
[email protected]:
[email protected]:
804540c0 815a1c70
[email protected]:
b2744000 602ac070
[email protected]:
815a1c44 b2d89800
[email protected]:
8173cc00 815a1c08
[email protected]:
[email protected]:
00000006
[email protected]:
815a1b50 00000000
[email protected]:
80079434 00000001
[email protected]:
ab46df40 b2744000
[email protected]:
b2d89800
[email protected]:
[email protected]:
0000fa0a 8045745c
[email protected]:
815a1c88 0000fa0a
[email protected]:
80407b20 b2789f80
[email protected]:
00000005 80407b20
[email protected]:
[email protected]:
[email protected]: Call Trace:
[email protected]: [<
804540bc>] skb_panic+0xa4/0xa8
[email protected]: [<
80079430>] console_unlock+0x2f8/0x6d0
[email protected]: [<
80457458>] skb_put+0xa0/0xc0
[email protected]: [<
80407b1c>] e1000_clean_rx_irq+0x2dc/0x3e8
[email protected]: [<
80407b1c>] e1000_clean_rx_irq+0x2dc/0x3e8
[email protected]: [<
804079c8>] e1000_clean_rx_irq+0x188/0x3e8
[email protected]: [<
80407b1c>] e1000_clean_rx_irq+0x2dc/0x3e8
[email protected]: [<
80468b48>] __dev_kfree_skb_any+0x88/0xa8
[email protected]: [<
804101ac>] e1000e_poll+0x94/0x288
[email protected]: [<
8046e9d4>] net_rx_action+0x19c/0x4e8
[email protected]: ...
[email protected]: Maximum depth to print reached. Use kstack=<maximum_depth_to_print> To specify a custom value (where 0 means to display the full backtrace)
[email protected]: ---[ end Kernel panic - not syncing: BUG!
Signed-off-by: Pierre-Yves Kerbrat <[email protected]>
Signed-off-by: Marius Gligor <[email protected]>
Tested-by: Aaron Brown <[email protected]>
Reviewed-by: Alexander Duyck <[email protected]>
Signed-off-by: Jeff Kirsher <[email protected]>