Skip to content
  • Brian King's avatar
    ixgbe: Fix skb list corruption on Power systems · 0a9a17e3
    Brian King authored
    
    
    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: default avatarBrian King <brking@linux.vnet.ibm.com>
    Acked-by: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
    Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    0a9a17e3