linux/drivers/net/ethernet/intel/ixgbe
Brian King 0a9a17e3bb ixgbe: Fix skb list corruption on Power systems
This patch fixes an issue seen on Power systems with ixgbe which results
in skb list corruption and an eventual kernel oops. The following is what
was observed:

CPU 1                                   CPU2
============================            ============================
1: ixgbe_xmit_frame_ring                ixgbe_clean_tx_irq
2:  first->skb = skb                     eop_desc = tx_buffer->next_to_watch
3:  ixgbe_tx_map                         read_barrier_depends()
4:   wmb                                 check adapter written status bit
5:   first->next_to_watch = tx_desc      napi_consume_skb(tx_buffer->skb ..);
6:   writel(i, tx_ring->tail);

The read_barrier_depends is insufficient to ensure that tx_buffer->skb does not
get loaded prior to tx_buffer->next_to_watch, which then results in loading
a stale skb pointer. This patch replaces the read_barrier_depends with
smp_rmb to ensure loads are ordered with respect to the load of
tx_buffer->next_to_watch.

Cc: stable <stable@vger.kernel.org>
Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
Acked-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2017-11-21 23:42:03 -08:00
..
ixgbe_82598.c net: ixgbe: Use new PCI_DEV_FLAGS_NO_RELAXED_ORDERING flag 2017-10-09 07:43:06 -07:00
ixgbe_82599.c ixgbe: Resolve warnings for -Wimplicit-fallthrough 2017-05-31 04:43:47 -07:00
ixgbe_common.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-10-09 20:11:09 -07:00
ixgbe_common.h locking/atomics: COCCINELLE/treewide: Convert trivial ACCESS_ONCE() patterns to READ_ONCE()/WRITE_ONCE() 2017-10-25 11:01:08 +02:00
ixgbe_dcb_82598.c ixgbe: use BIT() macro 2016-04-25 04:15:11 -07:00
ixgbe_dcb_82598.h
ixgbe_dcb_82599.c ixgbe: use BIT() macro 2016-04-25 04:15:11 -07:00
ixgbe_dcb_82599.h
ixgbe_dcb_nl.c ixgbe: prefix Data Center Bridge ops struct 2017-02-16 04:02:44 -08:00
ixgbe_dcb.c ixgbe: use BIT() macro 2016-04-25 04:15:11 -07:00
ixgbe_dcb.h
ixgbe_debugfs.c
ixgbe_ethtool.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-10-09 20:11:09 -07:00
ixgbe_fcoe.c networking: make skb_put & friends return void pointers 2017-06-16 11:48:39 -04:00
ixgbe_fcoe.h
ixgbe_lib.c ixgbe: Update adaptive ITR algorithm 2017-10-09 10:07:50 -07:00
ixgbe_main.c ixgbe: Fix skb list corruption on Power systems 2017-11-21 23:42:03 -08:00
ixgbe_mbx.c ixgbe: use BIT() macro 2016-04-25 04:15:11 -07:00
ixgbe_mbx.h ixgbe: Add PF support for VF promiscuous mode 2017-01-03 13:03:40 -08:00
ixgbe_model.h ixgbe: Fix deleting link filters for cls_u32 offloads 2016-06-29 10:05:24 -07:00
ixgbe_phy.c ixgbe: Remove driver config for KX4 PHY 2017-04-18 13:04:09 -07:00
ixgbe_phy.h ixgbe: correct CS4223/7 PHY identification 2017-05-31 04:48:19 -07:00
ixgbe_ptp.c locking/atomics: COCCINELLE/treewide: Convert trivial ACCESS_ONCE() patterns to READ_ONCE()/WRITE_ONCE() 2017-10-25 11:01:08 +02:00
ixgbe_sriov.c ixgbe: Ensure MAC filter was added before setting MACVLAN 2017-07-25 16:27:12 -07:00
ixgbe_sriov.h ixgbe: do not use adapter->num_vfs when setting VFs via module parameter 2017-04-18 13:25:30 -07:00
ixgbe_sysfs.c
ixgbe_type.h ixgbe: Update NW_MNG_IF_SEL support for X553 2017-07-25 16:31:42 -07:00
ixgbe_x540.c ixgbe: Clear SWFW_SYNC register during init 2017-10-09 09:28:23 -07:00
ixgbe_x540.h ixgbe: Place SWFW semaphore in known valid state at probe 2016-04-04 17:44:50 -07:00
ixgbe_x550.c ixgbe: fix use of uninitialized padding 2017-10-09 10:04:06 -07:00
ixgbe.h ixgbe: Update adaptive ITR algorithm 2017-10-09 10:07:50 -07:00
Makefile