]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ixgbe/fm10k: Record macvlan stats instead of Rx queue for macvlan offloaded rings
authorAlexander Duyck <alexander.h.duyck@intel.com>
Wed, 22 Nov 2017 18:57:17 +0000 (10:57 -0800)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Fri, 12 Jan 2018 16:20:19 +0000 (08:20 -0800)
We shouldn't be recording the Rx queue on macvlan offloaded frames since
the macvlan is normally brought up as a single queue device, and it will
trigger warnings for RPS if we have recorded queue IDs larger than the
"real_num_rx_queues" value recorded for the device.

Instead we should be recording the macvlan statistics since we are
bypassing the normal macvlan statistics that would have been generated by
the receive path.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/fm10k/fm10k_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index 538b42d5c1874870f865b7b217a328fb04e2b252..8e12aae065d82f2ae39ee5c559c83da394a5fe19 100644 (file)
@@ -446,13 +446,13 @@ static void fm10k_type_trans(struct fm10k_ring *rx_ring,
 
        skb->protocol = eth_type_trans(skb, dev);
 
+       /* Record Rx queue, or update macvlan statistics */
        if (!l2_accel)
-               return;
-
-       /* update MACVLAN statistics */
-       macvlan_count_rx(netdev_priv(dev), skb->len + ETH_HLEN, 1,
-                        !!(rx_desc->w.hdr_info &
-                           cpu_to_le16(FM10K_RXD_HDR_INFO_XC_MASK)));
+               skb_record_rx_queue(skb, rx_ring->queue_index);
+       else
+               macvlan_count_rx(netdev_priv(dev), skb->len + ETH_HLEN, true,
+                                (skb->pkt_type == PACKET_BROADCAST) ||
+                                (skb->pkt_type == PACKET_MULTICAST));
 }
 
 /**
@@ -479,8 +479,6 @@ static unsigned int fm10k_process_skb_fields(struct fm10k_ring *rx_ring,
 
        FM10K_CB(skb)->fi.w.vlan = rx_desc->w.vlan;
 
-       skb_record_rx_queue(skb, rx_ring->queue_index);
-
        FM10K_CB(skb)->fi.d.glort = rx_desc->d.glort;
 
        if (rx_desc->w.vlan) {
index 42b4f4cee3d6138ddbed8476924a22559e79dd98..048c7bc76b91ea206261c0a1c075f2810928f1d2 100644 (file)
@@ -1749,9 +1749,15 @@ static void ixgbe_process_skb_fields(struct ixgbe_ring *rx_ring,
                __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vid);
        }
 
-       skb_record_rx_queue(skb, rx_ring->queue_index);
-
        skb->protocol = eth_type_trans(skb, dev);
+
+       /* record Rx queue, or update MACVLAN statistics */
+       if (netif_is_ixgbe(dev))
+               skb_record_rx_queue(skb, rx_ring->queue_index);
+       else
+               macvlan_count_rx(netdev_priv(dev), skb->len + ETH_HLEN, true,
+                                (skb->pkt_type == PACKET_BROADCAST) ||
+                                (skb->pkt_type == PACKET_MULTICAST));
 }
 
 static void ixgbe_rx_skb(struct ixgbe_q_vector *q_vector,