• Pierre-Yves Kerbrat's avatar
    e1000e: allocate ring descriptors with dma_zalloc_coherent · 5858a710
    Pierre-Yves Kerbrat authored
    BugLink: https://bugs.launchpad.net/bugs/1775771
    
    [ Upstream commit aea3fca0 ]
    
    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: default avatarPierre-Yves Kerbrat <pkerbrat@kalray.eu>
    Signed-off-by: default avatarMarius Gligor <mgligor@kalray.eu>
    Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
    Reviewed-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: default avatarJuerg Haefliger <juergh@canonical.com>
    Signed-off-by: default avatarKhalid Elmously <khalid.elmously@canonical.com>
    5858a710
netdev.c 212 KB