diff options
| -rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 7 | 
1 files changed, 5 insertions, 2 deletions
| diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index b8b208720fb1..17ad6a3c1be1 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -1390,6 +1390,8 @@ static void ixgbe_process_skb_fields(struct ixgbe_ring *rx_ring,  				     union ixgbe_adv_rx_desc *rx_desc,  				     struct sk_buff *skb)  { +	struct net_device *dev = rx_ring->netdev; +  	ixgbe_update_rsc_stats(rx_ring, skb);  	ixgbe_rx_hash(rx_ring, rx_desc, skb); @@ -1401,14 +1403,15 @@ static void ixgbe_process_skb_fields(struct ixgbe_ring *rx_ring,  		ixgbe_ptp_rx_hwtstamp(rx_ring->q_vector, skb);  #endif -	if (ixgbe_test_staterr(rx_desc, IXGBE_RXD_STAT_VP)) { +	if ((dev->features & NETIF_F_HW_VLAN_RX) && +	    ixgbe_test_staterr(rx_desc, IXGBE_RXD_STAT_VP)) {  		u16 vid = le16_to_cpu(rx_desc->wb.upper.vlan);  		__vlan_hwaccel_put_tag(skb, vid);  	}  	skb_record_rx_queue(skb, rx_ring->queue_index); -	skb->protocol = eth_type_trans(skb, rx_ring->netdev); +	skb->protocol = eth_type_trans(skb, dev);  }  static void ixgbe_rx_skb(struct ixgbe_q_vector *q_vector, | 
