mirror_ubuntu-kernels/drivers/net/ethernet/intel/e1000e
Pierre-Yves Kerbrat aea3fca005 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:
IODDR0@0.0: skbuff: skb_over_panic: text:80407b20 len:64010 put:64010 head:ab46d800 data:ab46d842 tail:0xab47d24c end:0xab46df40 dev:eth0
IODDR0@0.0: BUG: failure at net/core/skbuff.c:105/skb_panic()!
IODDR0@0.0: Kernel panic - not syncing: BUG!
IODDR0@0.0:
IODDR0@0.0: Process swapper/0 (pid: 0, threadinfo=81728000, task=8173cc00 ,cpu: 0)
IODDR0@0.0: SP = <815a1c0c>
IODDR0@0.0: Stack:      00000001
IODDR0@0.0: b2d89800 815e33ac
IODDR0@0.0: ea73c040 00000001
IODDR0@0.0: 60040003 0000fa0a
IODDR0@0.0: 00000002
IODDR0@0.0:
IODDR0@0.0: 804540c0 815a1c70
IODDR0@0.0: b2744000 602ac070
IODDR0@0.0: 815a1c44 b2d89800
IODDR0@0.0: 8173cc00 815a1c08
IODDR0@0.0:
IODDR0@0.0:     00000006
IODDR0@0.0: 815a1b50 00000000
IODDR0@0.0: 80079434 00000001
IODDR0@0.0: ab46df40 b2744000
IODDR0@0.0: b2d89800
IODDR0@0.0:
IODDR0@0.0: 0000fa0a 8045745c
IODDR0@0.0: 815a1c88 0000fa0a
IODDR0@0.0: 80407b20 b2789f80
IODDR0@0.0: 00000005 80407b20
IODDR0@0.0:
IODDR0@0.0:
IODDR0@0.0: Call Trace:
IODDR0@0.0: [<804540bc>] skb_panic+0xa4/0xa8
IODDR0@0.0: [<80079430>] console_unlock+0x2f8/0x6d0
IODDR0@0.0: [<80457458>] skb_put+0xa0/0xc0
IODDR0@0.0: [<80407b1c>] e1000_clean_rx_irq+0x2dc/0x3e8
IODDR0@0.0: [<80407b1c>] e1000_clean_rx_irq+0x2dc/0x3e8
IODDR0@0.0: [<804079c8>] e1000_clean_rx_irq+0x188/0x3e8
IODDR0@0.0: [<80407b1c>] e1000_clean_rx_irq+0x2dc/0x3e8
IODDR0@0.0: [<80468b48>] __dev_kfree_skb_any+0x88/0xa8
IODDR0@0.0: [<804101ac>] e1000e_poll+0x94/0x288
IODDR0@0.0: [<8046e9d4>] net_rx_action+0x19c/0x4e8
IODDR0@0.0:   ...
IODDR0@0.0: Maximum depth to print reached. Use kstack=<maximum_depth_to_print> To specify a custom value (where 0 means to display the full backtrace)
IODDR0@0.0: ---[ end Kernel panic - not syncing: BUG!

Signed-off-by: Pierre-Yves Kerbrat <pkerbrat@kalray.eu>
Signed-off-by: Marius Gligor <mgligor@kalray.eu>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Reviewed-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2018-03-05 13:34:59 -08:00
..
80003es2lan.c e1000e: use BIT() macro for bit defines 2016-05-13 15:15:36 -07:00
80003es2lan.h e1000e: Bump the version to 3.2.5 2015-06-03 04:13:39 -07:00
82571.c e1000e: factor out systim sanitization 2016-08-16 10:46:19 -07:00
82571.h e1000e: Bump the version to 3.2.5 2015-06-03 04:13:39 -07:00
defines.h e1000e: Avoid missed interrupts following ICR read 2018-03-05 10:08:20 -08:00
e1000.h e1000e: apply burst mode settings only on default 2017-10-10 09:00:48 -07:00
ethtool.c e1000e: Don't return uninitialized stats 2017-06-06 01:05:13 -07:00
hw.h e1000e: Initial Support for IceLake 2017-08-08 17:54:21 -07:00
ich8lan.c e1000e: Fix check_for_link return value with autoneg off 2018-03-05 10:15:51 -08:00
ich8lan.h e1000e: fix the use of magic numbers for buffer overrun issue 2017-11-27 13:57:10 -08:00
mac.c e1000e: Fix check_for_link return value with autoneg off 2018-03-05 10:15:51 -08:00
mac.h e1000e: Bump the version to 3.2.5 2015-06-03 04:13:39 -07:00
Makefile e1000e: Cleanup - Update GPL header and Copyright 2014-03-07 21:55:27 -08:00
manage.c e1000e: Bump the version to 3.2.5 2015-06-03 04:13:39 -07:00
manage.h e1000e: Bump the version to 3.2.5 2015-06-03 04:13:39 -07:00
netdev.c e1000e: allocate ring descriptors with dma_zalloc_coherent 2018-03-05 13:34:59 -08:00
nvm.c e1000e: use BIT() macro for bit defines 2016-05-13 15:15:36 -07:00
nvm.h e1000e: Bump the version to 3.2.5 2015-06-03 04:13:39 -07:00
param.c e1000e: apply burst mode settings only on default 2017-10-10 09:00:48 -07:00
phy.c e1000e: Fix error path in link detection 2017-10-10 08:17:00 -07:00
phy.h e1000e: use BIT() macro for bit defines 2016-05-13 15:15:36 -07:00
ptp.c e1000e: Add Support for CannonLake 2017-04-30 05:18:30 -07:00
regs.h e1000e: Adds hardware supported cross timestamp on e1000e nic 2016-03-03 14:28:46 -08:00