|
@@ -1390,6 +1390,8 @@ static void ixgbe_process_skb_fields(struct ixgbe_ring *rx_ring,
|
|
union ixgbe_adv_rx_desc *rx_desc,
|
|
union ixgbe_adv_rx_desc *rx_desc,
|
|
struct sk_buff *skb)
|
|
struct sk_buff *skb)
|
|
{
|
|
{
|
|
|
|
+ struct net_device *dev = rx_ring->netdev;
|
|
|
|
+
|
|
ixgbe_update_rsc_stats(rx_ring, skb);
|
|
ixgbe_update_rsc_stats(rx_ring, skb);
|
|
|
|
|
|
ixgbe_rx_hash(rx_ring, rx_desc, 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);
|
|
ixgbe_ptp_rx_hwtstamp(rx_ring->q_vector, skb);
|
|
#endif
|
|
#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);
|
|
u16 vid = le16_to_cpu(rx_desc->wb.upper.vlan);
|
|
__vlan_hwaccel_put_tag(skb, vid);
|
|
__vlan_hwaccel_put_tag(skb, vid);
|
|
}
|
|
}
|
|
|
|
|
|
skb_record_rx_queue(skb, rx_ring->queue_index);
|
|
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,
|
|
static void ixgbe_rx_skb(struct ixgbe_q_vector *q_vector,
|