summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaolo Abeni <pabeni@redhat.com>2019-03-20 06:02:06 -0400
committerDavid S. Miller <davem@davemloft.net>2019-03-20 14:18:55 -0400
commita350eccee5830d9a1f29e393a88dc05a15326d44 (patch)
tree606fd11e76d457dbcfcb197f573808cb625bee3f
parentb71b5837f8711dbc4bc0424cb5c75e5921be055c (diff)
net: remove 'fallback' argument from dev->ndo_select_queue()
After the previous patch, all the callers of ndo_select_queue() provide as a 'fallback' argument netdev_pick_tx. The only exceptions are nested calls to ndo_select_queue(), which pass down the 'fallback' available in the current scope - still netdev_pick_tx. We can drop such argument and replace fallback() invocation with netdev_pick_tx(). This avoids an indirect call per xmit packet in some scenarios (TCP syn, UDP unconnected, XDP generic, pktgen) with device drivers implementing such ndo. It also clean the code a bit. Tested with ixgbe and CONFIG_FCOE=m With pktgen using queue xmit: threads vanilla patched (kpps) (kpps) 1 2334 2428 2 4166 4278 4 7895 8100 v1 -> v2: - rebased after helper's name change Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/infiniband/hw/hfi1/vnic_main.c3
-rw-r--r--drivers/infiniband/ulp/opa_vnic/opa_vnic_netdev.c6
-rw-r--r--drivers/net/bonding/bond_main.c3
-rw-r--r--drivers/net/ethernet/amazon/ena/ena_netdev.c5
-rw-r--r--drivers/net/ethernet/broadcom/bcmsysport.c7
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c5
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h3
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c5
-rw-r--r--drivers/net/ethernet/hisilicon/hns/hns_enet.c5
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c5
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_tx.c7
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/mlx4_en.h3
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en.h3
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_tx.c5
-rw-r--r--drivers/net/ethernet/qlogic/qede/qede.h3
-rw-r--r--drivers/net/ethernet/qlogic/qede/qede_fp.c5
-rw-r--r--drivers/net/ethernet/renesas/ravb_main.c3
-rw-r--r--drivers/net/ethernet/sun/ldmvsw.c3
-rw-r--r--drivers/net/ethernet/sun/sunvnet.c3
-rw-r--r--drivers/net/hyperv/netvsc_drv.c10
-rw-r--r--drivers/net/net_failover.c8
-rw-r--r--drivers/net/team/team.c3
-rw-r--r--drivers/net/tun.c3
-rw-r--r--drivers/net/wireless/marvell/mwifiex/main.c3
-rw-r--r--drivers/net/xen-netback/interface.c6
-rw-r--r--drivers/net/xen-netfront.c3
-rw-r--r--drivers/staging/rtl8188eu/os_dep/os_intfs.c3
-rw-r--r--drivers/staging/rtl8723bs/os_dep/os_intfs.c3
-rw-r--r--include/linux/netdevice.h12
-rw-r--r--net/core/dev.c9
-rw-r--r--net/mac80211/iface.c6
-rw-r--r--net/packet/af_packet.c3
32 files changed, 57 insertions, 97 deletions
diff --git a/drivers/infiniband/hw/hfi1/vnic_main.c b/drivers/infiniband/hw/hfi1/vnic_main.c
index a922db58be14..2b07032dbdda 100644
--- a/drivers/infiniband/hw/hfi1/vnic_main.c
+++ b/drivers/infiniband/hw/hfi1/vnic_main.c
@@ -423,8 +423,7 @@ tx_finish:
423 423
424static u16 hfi1_vnic_select_queue(struct net_device *netdev, 424static u16 hfi1_vnic_select_queue(struct net_device *netdev,
425 struct sk_buff *skb, 425 struct sk_buff *skb,
426 struct net_device *sb_dev, 426 struct net_device *sb_dev)
427 select_queue_fallback_t fallback)
428{ 427{
429 struct hfi1_vnic_vport_info *vinfo = opa_vnic_dev_priv(netdev); 428 struct hfi1_vnic_vport_info *vinfo = opa_vnic_dev_priv(netdev);
430 struct opa_vnic_skb_mdata *mdata; 429 struct opa_vnic_skb_mdata *mdata;
diff --git a/drivers/infiniband/ulp/opa_vnic/opa_vnic_netdev.c b/drivers/infiniband/ulp/opa_vnic/opa_vnic_netdev.c
index ae70cd18903e..aeff68f582d3 100644
--- a/drivers/infiniband/ulp/opa_vnic/opa_vnic_netdev.c
+++ b/drivers/infiniband/ulp/opa_vnic/opa_vnic_netdev.c
@@ -95,8 +95,7 @@ static netdev_tx_t opa_netdev_start_xmit(struct sk_buff *skb,
95} 95}
96 96
97static u16 opa_vnic_select_queue(struct net_device *netdev, struct sk_buff *skb, 97static u16 opa_vnic_select_queue(struct net_device *netdev, struct sk_buff *skb,
98 struct net_device *sb_dev, 98 struct net_device *sb_dev)
99 select_queue_fallback_t fallback)
100{ 99{
101 struct opa_vnic_adapter *adapter = opa_vnic_priv(netdev); 100 struct opa_vnic_adapter *adapter = opa_vnic_priv(netdev);
102 struct opa_vnic_skb_mdata *mdata; 101 struct opa_vnic_skb_mdata *mdata;
@@ -106,8 +105,7 @@ static u16 opa_vnic_select_queue(struct net_device *netdev, struct sk_buff *skb,
106 mdata = skb_push(skb, sizeof(*mdata)); 105 mdata = skb_push(skb, sizeof(*mdata));
107 mdata->entropy = opa_vnic_calc_entropy(skb); 106 mdata->entropy = opa_vnic_calc_entropy(skb);
108 mdata->vl = opa_vnic_get_vl(adapter, skb); 107 mdata->vl = opa_vnic_get_vl(adapter, skb);
109 rc = adapter->rn_ops->ndo_select_queue(netdev, skb, 108 rc = adapter->rn_ops->ndo_select_queue(netdev, skb, sb_dev);
110 sb_dev, fallback);
111 skb_pull(skb, sizeof(*mdata)); 109 skb_pull(skb, sizeof(*mdata));
112 return rc; 110 return rc;
113} 111}
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index b59708c35faf..8ddbada9e281 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -4114,8 +4114,7 @@ static inline int bond_slave_override(struct bonding *bond,
4114 4114
4115 4115
4116static u16 bond_select_queue(struct net_device *dev, struct sk_buff *skb, 4116static u16 bond_select_queue(struct net_device *dev, struct sk_buff *skb,
4117 struct net_device *sb_dev, 4117 struct net_device *sb_dev)
4118 select_queue_fallback_t fallback)
4119{ 4118{
4120 /* This helper function exists to help dev_pick_tx get the correct 4119 /* This helper function exists to help dev_pick_tx get the correct
4121 * destination queue. Using a helper function skips a call to 4120 * destination queue. Using a helper function skips a call to
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index a6eacf2099c3..71c8cac6e44e 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -2258,8 +2258,7 @@ error_drop_packet:
2258} 2258}
2259 2259
2260static u16 ena_select_queue(struct net_device *dev, struct sk_buff *skb, 2260static u16 ena_select_queue(struct net_device *dev, struct sk_buff *skb,
2261 struct net_device *sb_dev, 2261 struct net_device *sb_dev)
2262 select_queue_fallback_t fallback)
2263{ 2262{
2264 u16 qid; 2263 u16 qid;
2265 /* we suspect that this is good for in--kernel network services that 2264 /* we suspect that this is good for in--kernel network services that
@@ -2269,7 +2268,7 @@ static u16 ena_select_queue(struct net_device *dev, struct sk_buff *skb,
2269 if (skb_rx_queue_recorded(skb)) 2268 if (skb_rx_queue_recorded(skb))
2270 qid = skb_get_rx_queue(skb); 2269 qid = skb_get_rx_queue(skb);
2271 else 2270 else
2272 qid = fallback(dev, skb, NULL); 2271 qid = netdev_pick_tx(dev, skb, NULL);
2273 2272
2274 return qid; 2273 return qid;
2275} 2274}
diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
index bc3ac369cbe3..a9d3d26a7202 100644
--- a/drivers/net/ethernet/broadcom/bcmsysport.c
+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
@@ -2274,8 +2274,7 @@ static const struct ethtool_ops bcm_sysport_ethtool_ops = {
2274}; 2274};
2275 2275
2276static u16 bcm_sysport_select_queue(struct net_device *dev, struct sk_buff *skb, 2276static u16 bcm_sysport_select_queue(struct net_device *dev, struct sk_buff *skb,
2277 struct net_device *sb_dev, 2277 struct net_device *sb_dev)
2278 select_queue_fallback_t fallback)
2279{ 2278{
2280 struct bcm_sysport_priv *priv = netdev_priv(dev); 2279 struct bcm_sysport_priv *priv = netdev_priv(dev);
2281 u16 queue = skb_get_queue_mapping(skb); 2280 u16 queue = skb_get_queue_mapping(skb);
@@ -2283,7 +2282,7 @@ static u16 bcm_sysport_select_queue(struct net_device *dev, struct sk_buff *skb,
2283 unsigned int q, port; 2282 unsigned int q, port;
2284 2283
2285 if (!netdev_uses_dsa(dev)) 2284 if (!netdev_uses_dsa(dev))
2286 return fallback(dev, skb, NULL); 2285 return netdev_pick_tx(dev, skb, NULL);
2287 2286
2288 /* DSA tagging layer will have configured the correct queue */ 2287 /* DSA tagging layer will have configured the correct queue */
2289 q = BRCM_TAG_GET_QUEUE(queue); 2288 q = BRCM_TAG_GET_QUEUE(queue);
@@ -2291,7 +2290,7 @@ static u16 bcm_sysport_select_queue(struct net_device *dev, struct sk_buff *skb,
2291 tx_ring = priv->ring_map[q + port * priv->per_port_num_tx_queues]; 2290 tx_ring = priv->ring_map[q + port * priv->per_port_num_tx_queues];
2292 2291
2293 if (unlikely(!tx_ring)) 2292 if (unlikely(!tx_ring))
2294 return fallback(dev, skb, NULL); 2293 return netdev_pick_tx(dev, skb, NULL);
2295 2294
2296 return tx_ring->index; 2295 return tx_ring->index;
2297} 2296}
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index ecb1bd7eb508..6012fe61735e 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -1909,8 +1909,7 @@ void bnx2x_netif_stop(struct bnx2x *bp, int disable_hw)
1909} 1909}
1910 1910
1911u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb, 1911u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb,
1912 struct net_device *sb_dev, 1912 struct net_device *sb_dev)
1913 select_queue_fallback_t fallback)
1914{ 1913{
1915 struct bnx2x *bp = netdev_priv(dev); 1914 struct bnx2x *bp = netdev_priv(dev);
1916 1915
@@ -1932,7 +1931,7 @@ u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb,
1932 } 1931 }
1933 1932
1934 /* select a non-FCoE queue */ 1933 /* select a non-FCoE queue */
1935 return fallback(dev, skb, NULL) % 1934 return netdev_pick_tx(dev, skb, NULL) %
1936 (BNX2X_NUM_ETH_QUEUES(bp) * bp->max_cos); 1935 (BNX2X_NUM_ETH_QUEUES(bp) * bp->max_cos);
1937} 1936}
1938 1937
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
index 2462e7aa0c5d..7f8df08a7a4c 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
@@ -498,8 +498,7 @@ int bnx2x_set_vf_spoofchk(struct net_device *dev, int idx, bool val);
498 498
499/* select_queue callback */ 499/* select_queue callback */
500u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb, 500u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb,
501 struct net_device *sb_dev, 501 struct net_device *sb_dev);
502 select_queue_fallback_t fallback);
503 502
504static inline void bnx2x_update_rx_prod(struct bnx2x *bp, 503static inline void bnx2x_update_rx_prod(struct bnx2x *bp,
505 struct bnx2x_fastpath *fp, 504 struct bnx2x_fastpath *fp,
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index 89179e316687..3339f1f4bcdd 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -979,8 +979,7 @@ freeout:
979} 979}
980 980
981static u16 cxgb_select_queue(struct net_device *dev, struct sk_buff *skb, 981static u16 cxgb_select_queue(struct net_device *dev, struct sk_buff *skb,
982 struct net_device *sb_dev, 982 struct net_device *sb_dev)
983 select_queue_fallback_t fallback)
984{ 983{
985 int txq; 984 int txq;
986 985
@@ -1022,7 +1021,7 @@ static u16 cxgb_select_queue(struct net_device *dev, struct sk_buff *skb,
1022 return txq; 1021 return txq;
1023 } 1022 }
1024 1023
1025 return fallback(dev, skb, NULL) % dev->real_num_tx_queues; 1024 return netdev_pick_tx(dev, skb, NULL) % dev->real_num_tx_queues;
1026} 1025}
1027 1026
1028static int closest_timer(const struct sge *s, int time) 1027static int closest_timer(const struct sge *s, int time)
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
index 60e7d7ae3787..e37a0ca0db89 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
@@ -1964,8 +1964,7 @@ static void hns_nic_get_stats64(struct net_device *ndev,
1964 1964
1965static u16 1965static u16
1966hns_nic_select_queue(struct net_device *ndev, struct sk_buff *skb, 1966hns_nic_select_queue(struct net_device *ndev, struct sk_buff *skb,
1967 struct net_device *sb_dev, 1967 struct net_device *sb_dev)
1968 select_queue_fallback_t fallback)
1969{ 1968{
1970 struct ethhdr *eth_hdr = (struct ethhdr *)skb->data; 1969 struct ethhdr *eth_hdr = (struct ethhdr *)skb->data;
1971 struct hns_nic_priv *priv = netdev_priv(ndev); 1970 struct hns_nic_priv *priv = netdev_priv(ndev);
@@ -1975,7 +1974,7 @@ hns_nic_select_queue(struct net_device *ndev, struct sk_buff *skb,
1975 is_multicast_ether_addr(eth_hdr->h_dest)) 1974 is_multicast_ether_addr(eth_hdr->h_dest))
1976 return 0; 1975 return 0;
1977 else 1976 else
1978 return fallback(ndev, skb, NULL); 1977 return netdev_pick_tx(ndev, skb, NULL);
1979} 1978}
1980 1979
1981static const struct net_device_ops hns_nic_netdev_ops = { 1980static const struct net_device_ops hns_nic_netdev_ops = {
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 76aeed845a73..16c728984164 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -8483,8 +8483,7 @@ static void ixgbe_atr(struct ixgbe_ring *ring,
8483 8483
8484#ifdef IXGBE_FCOE 8484#ifdef IXGBE_FCOE
8485static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb, 8485static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb,
8486 struct net_device *sb_dev, 8486 struct net_device *sb_dev)
8487 select_queue_fallback_t fallback)
8488{ 8487{
8489 struct ixgbe_adapter *adapter; 8488 struct ixgbe_adapter *adapter;
8490 struct ixgbe_ring_feature *f; 8489 struct ixgbe_ring_feature *f;
@@ -8514,7 +8513,7 @@ static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb,
8514 break; 8513 break;
8515 /* fall through */ 8514 /* fall through */
8516 default: 8515 default:
8517 return fallback(dev, skb, sb_dev); 8516 return netdev_pick_tx(dev, skb, sb_dev);
8518 } 8517 }
8519 8518
8520 f = &adapter->ring_feature[RING_F_FCOE]; 8519 f = &adapter->ring_feature[RING_F_FCOE];
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
index 2cbd2bd7c67c..fba54fb06e18 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
@@ -685,16 +685,15 @@ static void build_inline_wqe(struct mlx4_en_tx_desc *tx_desc,
685} 685}
686 686
687u16 mlx4_en_select_queue(struct net_device *dev, struct sk_buff *skb, 687u16 mlx4_en_select_queue(struct net_device *dev, struct sk_buff *skb,
688 struct net_device *sb_dev, 688 struct net_device *sb_dev)
689 select_queue_fallback_t fallback)
690{ 689{
691 struct mlx4_en_priv *priv = netdev_priv(dev); 690 struct mlx4_en_priv *priv = netdev_priv(dev);
692 u16 rings_p_up = priv->num_tx_rings_p_up; 691 u16 rings_p_up = priv->num_tx_rings_p_up;
693 692
694 if (netdev_get_num_tc(dev)) 693 if (netdev_get_num_tc(dev))
695 return fallback(dev, skb, NULL); 694 return netdev_pick_tx(dev, skb, NULL);
696 695
697 return fallback(dev, skb, NULL) % rings_p_up; 696 return netdev_pick_tx(dev, skb, NULL) % rings_p_up;
698} 697}
699 698
700static void mlx4_bf_copy(void __iomem *dst, const void *src, 699static void mlx4_bf_copy(void __iomem *dst, const void *src,
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
index 8137454e2534..630f15977f09 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
@@ -698,8 +698,7 @@ void mlx4_en_arm_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq);
698 698
699void mlx4_en_tx_irq(struct mlx4_cq *mcq); 699void mlx4_en_tx_irq(struct mlx4_cq *mcq);
700u16 mlx4_en_select_queue(struct net_device *dev, struct sk_buff *skb, 700u16 mlx4_en_select_queue(struct net_device *dev, struct sk_buff *skb,
701 struct net_device *sb_dev, 701 struct net_device *sb_dev);
702 select_queue_fallback_t fallback);
703netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev); 702netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev);
704netdev_tx_t mlx4_en_xmit_frame(struct mlx4_en_rx_ring *rx_ring, 703netdev_tx_t mlx4_en_xmit_frame(struct mlx4_en_rx_ring *rx_ring,
705 struct mlx4_en_rx_alloc *frame, 704 struct mlx4_en_rx_alloc *frame,
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
index 71c65cc17904..5c2e3276d9cc 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
@@ -769,8 +769,7 @@ struct mlx5e_profile {
769void mlx5e_build_ptys2ethtool_map(void); 769void mlx5e_build_ptys2ethtool_map(void);
770 770
771u16 mlx5e_select_queue(struct net_device *dev, struct sk_buff *skb, 771u16 mlx5e_select_queue(struct net_device *dev, struct sk_buff *skb,
772 struct net_device *sb_dev, 772 struct net_device *sb_dev);
773 select_queue_fallback_t fallback);
774netdev_tx_t mlx5e_xmit(struct sk_buff *skb, struct net_device *dev); 773netdev_tx_t mlx5e_xmit(struct sk_buff *skb, struct net_device *dev);
775netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb, 774netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
776 struct mlx5e_tx_wqe *wqe, u16 pi); 775 struct mlx5e_tx_wqe *wqe, u16 pi);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
index 25a8f8260c14..ce1406bb1512 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
@@ -110,11 +110,10 @@ static inline int mlx5e_get_dscp_up(struct mlx5e_priv *priv, struct sk_buff *skb
110#endif 110#endif
111 111
112u16 mlx5e_select_queue(struct net_device *dev, struct sk_buff *skb, 112u16 mlx5e_select_queue(struct net_device *dev, struct sk_buff *skb,
113 struct net_device *sb_dev, 113 struct net_device *sb_dev)
114 select_queue_fallback_t fallback)
115{ 114{
115 int channel_ix = netdev_pick_tx(dev, skb, NULL);
116 struct mlx5e_priv *priv = netdev_priv(dev); 116 struct mlx5e_priv *priv = netdev_priv(dev);
117 int channel_ix = fallback(dev, skb, NULL);
118 u16 num_channels; 117 u16 num_channels;
119 int up = 0; 118 int up = 0;
120 119
diff --git a/drivers/net/ethernet/qlogic/qede/qede.h b/drivers/net/ethernet/qlogic/qede/qede.h
index 63a78162cfaf..92fe226980fd 100644
--- a/drivers/net/ethernet/qlogic/qede/qede.h
+++ b/drivers/net/ethernet/qlogic/qede/qede.h
@@ -498,8 +498,7 @@ struct qede_reload_args {
498/* Datapath functions definition */ 498/* Datapath functions definition */
499netdev_tx_t qede_start_xmit(struct sk_buff *skb, struct net_device *ndev); 499netdev_tx_t qede_start_xmit(struct sk_buff *skb, struct net_device *ndev);
500u16 qede_select_queue(struct net_device *dev, struct sk_buff *skb, 500u16 qede_select_queue(struct net_device *dev, struct sk_buff *skb,
501 struct net_device *sb_dev, 501 struct net_device *sb_dev);
502 select_queue_fallback_t fallback);
503netdev_features_t qede_features_check(struct sk_buff *skb, 502netdev_features_t qede_features_check(struct sk_buff *skb,
504 struct net_device *dev, 503 struct net_device *dev,
505 netdev_features_t features); 504 netdev_features_t features);
diff --git a/drivers/net/ethernet/qlogic/qede/qede_fp.c b/drivers/net/ethernet/qlogic/qede/qede_fp.c
index 31b046e24565..c342b07e3a93 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_fp.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_fp.c
@@ -1696,8 +1696,7 @@ netdev_tx_t qede_start_xmit(struct sk_buff *skb, struct net_device *ndev)
1696} 1696}
1697 1697
1698u16 qede_select_queue(struct net_device *dev, struct sk_buff *skb, 1698u16 qede_select_queue(struct net_device *dev, struct sk_buff *skb,
1699 struct net_device *sb_dev, 1699 struct net_device *sb_dev)
1700 select_queue_fallback_t fallback)
1701{ 1700{
1702 struct qede_dev *edev = netdev_priv(dev); 1701 struct qede_dev *edev = netdev_priv(dev);
1703 int total_txq; 1702 int total_txq;
@@ -1705,7 +1704,7 @@ u16 qede_select_queue(struct net_device *dev, struct sk_buff *skb,
1705 total_txq = QEDE_TSS_COUNT(edev) * edev->dev_info.num_tc; 1704 total_txq = QEDE_TSS_COUNT(edev) * edev->dev_info.num_tc;
1706 1705
1707 return QEDE_TSS_COUNT(edev) ? 1706 return QEDE_TSS_COUNT(edev) ?
1708 fallback(dev, skb, NULL) % total_txq : 0; 1707 netdev_pick_tx(dev, skb, NULL) % total_txq : 0;
1709} 1708}
1710 1709
1711/* 8B udp header + 8B base tunnel header + 32B option length */ 1710/* 8B udp header + 8B base tunnel header + 32B option length */
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 8154b38c08f7..4f648394e645 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -1615,8 +1615,7 @@ drop:
1615} 1615}
1616 1616
1617static u16 ravb_select_queue(struct net_device *ndev, struct sk_buff *skb, 1617static u16 ravb_select_queue(struct net_device *ndev, struct sk_buff *skb,
1618 struct net_device *sb_dev, 1618 struct net_device *sb_dev)
1619 select_queue_fallback_t fallback)
1620{ 1619{
1621 /* If skb needs TX timestamp, it is handled in network control queue */ 1620 /* If skb needs TX timestamp, it is handled in network control queue */
1622 return (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) ? RAVB_NC : 1621 return (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) ? RAVB_NC :
diff --git a/drivers/net/ethernet/sun/ldmvsw.c b/drivers/net/ethernet/sun/ldmvsw.c
index 644e42c181ee..01ea0d6f8819 100644
--- a/drivers/net/ethernet/sun/ldmvsw.c
+++ b/drivers/net/ethernet/sun/ldmvsw.c
@@ -101,8 +101,7 @@ static struct vnet_port *vsw_tx_port_find(struct sk_buff *skb,
101} 101}
102 102
103static u16 vsw_select_queue(struct net_device *dev, struct sk_buff *skb, 103static u16 vsw_select_queue(struct net_device *dev, struct sk_buff *skb,
104 struct net_device *sb_dev, 104 struct net_device *sb_dev)
105 select_queue_fallback_t fallback)
106{ 105{
107 struct vnet_port *port = netdev_priv(dev); 106 struct vnet_port *port = netdev_priv(dev);
108 107
diff --git a/drivers/net/ethernet/sun/sunvnet.c b/drivers/net/ethernet/sun/sunvnet.c
index 590172818b92..96b883f965f6 100644
--- a/drivers/net/ethernet/sun/sunvnet.c
+++ b/drivers/net/ethernet/sun/sunvnet.c
@@ -234,8 +234,7 @@ static struct vnet_port *vnet_tx_port_find(struct sk_buff *skb,
234} 234}
235 235
236static u16 vnet_select_queue(struct net_device *dev, struct sk_buff *skb, 236static u16 vnet_select_queue(struct net_device *dev, struct sk_buff *skb,
237 struct net_device *sb_dev, 237 struct net_device *sb_dev)
238 select_queue_fallback_t fallback)
239{ 238{
240 struct vnet *vp = netdev_priv(dev); 239 struct vnet *vp = netdev_priv(dev);
241 struct vnet_port *port = __tx_port_find(vp, skb); 240 struct vnet_port *port = __tx_port_find(vp, skb);
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index cf4897043e83..1a08679f90ce 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -308,7 +308,7 @@ static inline int netvsc_get_tx_queue(struct net_device *ndev,
308 * If a valid queue has already been assigned, then use that. 308 * If a valid queue has already been assigned, then use that.
309 * Otherwise compute tx queue based on hash and the send table. 309 * Otherwise compute tx queue based on hash and the send table.
310 * 310 *
311 * This is basically similar to default (__netdev_pick_tx) with the added step 311 * This is basically similar to default (netdev_pick_tx) with the added step
312 * of using the host send_table when no other queue has been assigned. 312 * of using the host send_table when no other queue has been assigned.
313 * 313 *
314 * TODO support XPS - but get_xps_queue not exported 314 * TODO support XPS - but get_xps_queue not exported
@@ -331,8 +331,7 @@ static u16 netvsc_pick_tx(struct net_device *ndev, struct sk_buff *skb)
331} 331}
332 332
333static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb, 333static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb,
334 struct net_device *sb_dev, 334 struct net_device *sb_dev)
335 select_queue_fallback_t fallback)
336{ 335{
337 struct net_device_context *ndc = netdev_priv(ndev); 336 struct net_device_context *ndc = netdev_priv(ndev);
338 struct net_device *vf_netdev; 337 struct net_device *vf_netdev;
@@ -344,10 +343,9 @@ static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb,
344 const struct net_device_ops *vf_ops = vf_netdev->netdev_ops; 343 const struct net_device_ops *vf_ops = vf_netdev->netdev_ops;
345 344
346 if (vf_ops->ndo_select_queue) 345 if (vf_ops->ndo_select_queue)
347 txq = vf_ops->ndo_select_queue(vf_netdev, skb, 346 txq = vf_ops->ndo_select_queue(vf_netdev, skb, sb_dev);
348 sb_dev, fallback);
349 else 347 else
350 txq = fallback(vf_netdev, skb, NULL); 348 txq = netdev_pick_tx(vf_netdev, skb, NULL);
351 349
352 /* Record the queue selected by VF so that it can be 350 /* Record the queue selected by VF so that it can be
353 * used for common case where VF has more queues than 351 * used for common case where VF has more queues than
diff --git a/drivers/net/net_failover.c b/drivers/net/net_failover.c
index ed1166adaa2f..b16a1221d19b 100644
--- a/drivers/net/net_failover.c
+++ b/drivers/net/net_failover.c
@@ -115,8 +115,7 @@ static netdev_tx_t net_failover_start_xmit(struct sk_buff *skb,
115 115
116static u16 net_failover_select_queue(struct net_device *dev, 116static u16 net_failover_select_queue(struct net_device *dev,
117 struct sk_buff *skb, 117 struct sk_buff *skb,
118 struct net_device *sb_dev, 118 struct net_device *sb_dev)
119 select_queue_fallback_t fallback)
120{ 119{
121 struct net_failover_info *nfo_info = netdev_priv(dev); 120 struct net_failover_info *nfo_info = netdev_priv(dev);
122 struct net_device *primary_dev; 121 struct net_device *primary_dev;
@@ -127,10 +126,9 @@ static u16 net_failover_select_queue(struct net_device *dev,
127 const struct net_device_ops *ops = primary_dev->netdev_ops; 126 const struct net_device_ops *ops = primary_dev->netdev_ops;
128 127
129 if (ops->ndo_select_queue) 128 if (ops->ndo_select_queue)
130 txq = ops->ndo_select_queue(primary_dev, skb, 129 txq = ops->ndo_select_queue(primary_dev, skb, sb_dev);
131 sb_dev, fallback);
132 else 130 else
133 txq = fallback(primary_dev, skb, NULL); 131 txq = netdev_pick_tx(primary_dev, skb, NULL);
134 132
135 qdisc_skb_cb(skb)->slave_dev_queue_mapping = skb->queue_mapping; 133 qdisc_skb_cb(skb)->slave_dev_queue_mapping = skb->queue_mapping;
136 134
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 6ed96fdfd96d..ee950aa48e3b 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -1691,8 +1691,7 @@ static netdev_tx_t team_xmit(struct sk_buff *skb, struct net_device *dev)
1691} 1691}
1692 1692
1693static u16 team_select_queue(struct net_device *dev, struct sk_buff *skb, 1693static u16 team_select_queue(struct net_device *dev, struct sk_buff *skb,
1694 struct net_device *sb_dev, 1694 struct net_device *sb_dev)
1695 select_queue_fallback_t fallback)
1696{ 1695{
1697 /* 1696 /*
1698 * This helper function exists to help dev_pick_tx get the correct 1697 * This helper function exists to help dev_pick_tx get the correct
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index e9ca1c088d0b..ef3b65514976 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -606,8 +606,7 @@ static u16 tun_ebpf_select_queue(struct tun_struct *tun, struct sk_buff *skb)
606} 606}
607 607
608static u16 tun_select_queue(struct net_device *dev, struct sk_buff *skb, 608static u16 tun_select_queue(struct net_device *dev, struct sk_buff *skb,
609 struct net_device *sb_dev, 609 struct net_device *sb_dev)
610 select_queue_fallback_t fallback)
611{ 610{
612 struct tun_struct *tun = netdev_priv(dev); 611 struct tun_struct *tun = netdev_priv(dev);
613 u16 ret; 612 u16 ret;
diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
index 20cee5c397fb..f6da8edab7f1 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.c
+++ b/drivers/net/wireless/marvell/mwifiex/main.c
@@ -1282,8 +1282,7 @@ static struct net_device_stats *mwifiex_get_stats(struct net_device *dev)
1282 1282
1283static u16 1283static u16
1284mwifiex_netdev_select_wmm_queue(struct net_device *dev, struct sk_buff *skb, 1284mwifiex_netdev_select_wmm_queue(struct net_device *dev, struct sk_buff *skb,
1285 struct net_device *sb_dev, 1285 struct net_device *sb_dev)
1286 select_queue_fallback_t fallback)
1287{ 1286{
1288 skb->priority = cfg80211_classify8021d(skb, NULL); 1287 skb->priority = cfg80211_classify8021d(skb, NULL);
1289 return mwifiex_1d_to_wmm_queue[skb->priority]; 1288 return mwifiex_1d_to_wmm_queue[skb->priority];
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
index 6da12518e693..783198844dd7 100644
--- a/drivers/net/xen-netback/interface.c
+++ b/drivers/net/xen-netback/interface.c
@@ -148,8 +148,7 @@ void xenvif_wake_queue(struct xenvif_queue *queue)
148} 148}
149 149
150static u16 xenvif_select_queue(struct net_device *dev, struct sk_buff *skb, 150static u16 xenvif_select_queue(struct net_device *dev, struct sk_buff *skb,
151 struct net_device *sb_dev, 151 struct net_device *sb_dev)
152 select_queue_fallback_t fallback)
153{ 152{
154 struct xenvif *vif = netdev_priv(dev); 153 struct xenvif *vif = netdev_priv(dev);
155 unsigned int size = vif->hash.size; 154 unsigned int size = vif->hash.size;
@@ -162,7 +161,8 @@ static u16 xenvif_select_queue(struct net_device *dev, struct sk_buff *skb,
162 return 0; 161 return 0;
163 162
164 if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE) 163 if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE)
165 return fallback(dev, skb, NULL) % dev->real_num_tx_queues; 164 return netdev_pick_tx(dev, skb, NULL) %
165 dev->real_num_tx_queues;
166 166
167 xenvif_set_skb_hash(vif, skb); 167 xenvif_set_skb_hash(vif, skb);
168 168
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index c914c24f880b..80c30321de41 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -543,8 +543,7 @@ static int xennet_count_skb_slots(struct sk_buff *skb)
543} 543}
544 544
545static u16 xennet_select_queue(struct net_device *dev, struct sk_buff *skb, 545static u16 xennet_select_queue(struct net_device *dev, struct sk_buff *skb,
546 struct net_device *sb_dev, 546 struct net_device *sb_dev)
547 select_queue_fallback_t fallback)
548{ 547{
549 unsigned int num_queues = dev->real_num_tx_queues; 548 unsigned int num_queues = dev->real_num_tx_queues;
550 u32 hash; 549 u32 hash;
diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c
index 8dde5a40e253..2c088af44c8b 100644
--- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c
+++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c
@@ -245,8 +245,7 @@ static unsigned int rtw_classify8021d(struct sk_buff *skb)
245} 245}
246 246
247static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb, 247static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb,
248 struct net_device *sb_dev, 248 struct net_device *sb_dev)
249 select_queue_fallback_t fallback)
250{ 249{
251 struct adapter *padapter = rtw_netdev_priv(dev); 250 struct adapter *padapter = rtw_netdev_priv(dev);
252 struct mlme_priv *pmlmepriv = &padapter->mlmepriv; 251 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
diff --git a/drivers/staging/rtl8723bs/os_dep/os_intfs.c b/drivers/staging/rtl8723bs/os_dep/os_intfs.c
index 143e3f9b31aa..0a20a4e9e19a 100644
--- a/drivers/staging/rtl8723bs/os_dep/os_intfs.c
+++ b/drivers/staging/rtl8723bs/os_dep/os_intfs.c
@@ -404,8 +404,7 @@ static unsigned int rtw_classify8021d(struct sk_buff *skb)
404 404
405 405
406static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb, 406static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb,
407 struct net_device *sb_dev, 407 struct net_device *sb_dev)
408 select_queue_fallback_t fallback)
409{ 408{
410 struct adapter *padapter = rtw_netdev_priv(dev); 409 struct adapter *padapter = rtw_netdev_priv(dev);
411 struct mlme_priv *pmlmepriv = &padapter->mlmepriv; 410 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 0ff28db4239f..823762291ebf 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -986,8 +986,7 @@ struct devlink;
986 * those the driver believes to be appropriate. 986 * those the driver believes to be appropriate.
987 * 987 *
988 * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb, 988 * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb,
989 * struct net_device *sb_dev, 989 * struct net_device *sb_dev);
990 * select_queue_fallback_t fallback);
991 * Called to decide which queue to use when device supports multiple 990 * Called to decide which queue to use when device supports multiple
992 * transmit queues. 991 * transmit queues.
993 * 992 *
@@ -1268,8 +1267,7 @@ struct net_device_ops {
1268 netdev_features_t features); 1267 netdev_features_t features);
1269 u16 (*ndo_select_queue)(struct net_device *dev, 1268 u16 (*ndo_select_queue)(struct net_device *dev,
1270 struct sk_buff *skb, 1269 struct sk_buff *skb,
1271 struct net_device *sb_dev, 1270 struct net_device *sb_dev);
1272 select_queue_fallback_t fallback);
1273 void (*ndo_change_rx_flags)(struct net_device *dev, 1271 void (*ndo_change_rx_flags)(struct net_device *dev,
1274 int flags); 1272 int flags);
1275 void (*ndo_set_rx_mode)(struct net_device *dev); 1273 void (*ndo_set_rx_mode)(struct net_device *dev);
@@ -2641,11 +2639,9 @@ void dev_close_many(struct list_head *head, bool unlink);
2641void dev_disable_lro(struct net_device *dev); 2639void dev_disable_lro(struct net_device *dev);
2642int dev_loopback_xmit(struct net *net, struct sock *sk, struct sk_buff *newskb); 2640int dev_loopback_xmit(struct net *net, struct sock *sk, struct sk_buff *newskb);
2643u16 dev_pick_tx_zero(struct net_device *dev, struct sk_buff *skb, 2641u16 dev_pick_tx_zero(struct net_device *dev, struct sk_buff *skb,
2644 struct net_device *sb_dev, 2642 struct net_device *sb_dev);
2645 select_queue_fallback_t fallback);
2646u16 dev_pick_tx_cpu_id(struct net_device *dev, struct sk_buff *skb, 2643u16 dev_pick_tx_cpu_id(struct net_device *dev, struct sk_buff *skb,
2647 struct net_device *sb_dev, 2644 struct net_device *sb_dev);
2648 select_queue_fallback_t fallback);
2649int dev_queue_xmit(struct sk_buff *skb); 2645int dev_queue_xmit(struct sk_buff *skb);
2650int dev_queue_xmit_accel(struct sk_buff *skb, struct net_device *sb_dev); 2646int dev_queue_xmit_accel(struct sk_buff *skb, struct net_device *sb_dev);
2651int dev_direct_xmit(struct sk_buff *skb, u16 queue_id); 2647int dev_direct_xmit(struct sk_buff *skb, u16 queue_id);
diff --git a/net/core/dev.c b/net/core/dev.c
index 1a76b4fe9b97..357111431ec9 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3689,16 +3689,14 @@ get_cpus_map:
3689} 3689}
3690 3690
3691u16 dev_pick_tx_zero(struct net_device *dev, struct sk_buff *skb, 3691u16 dev_pick_tx_zero(struct net_device *dev, struct sk_buff *skb,
3692 struct net_device *sb_dev, 3692 struct net_device *sb_dev)
3693 select_queue_fallback_t fallback)
3694{ 3693{
3695 return 0; 3694 return 0;
3696} 3695}
3697EXPORT_SYMBOL(dev_pick_tx_zero); 3696EXPORT_SYMBOL(dev_pick_tx_zero);
3698 3697
3699u16 dev_pick_tx_cpu_id(struct net_device *dev, struct sk_buff *skb, 3698u16 dev_pick_tx_cpu_id(struct net_device *dev, struct sk_buff *skb,
3700 struct net_device *sb_dev, 3699 struct net_device *sb_dev)
3701 select_queue_fallback_t fallback)
3702{ 3700{
3703 return (u16)raw_smp_processor_id() % dev->real_num_tx_queues; 3701 return (u16)raw_smp_processor_id() % dev->real_num_tx_queues;
3704} 3702}
@@ -3748,8 +3746,7 @@ struct netdev_queue *netdev_core_pick_tx(struct net_device *dev,
3748 const struct net_device_ops *ops = dev->netdev_ops; 3746 const struct net_device_ops *ops = dev->netdev_ops;
3749 3747
3750 if (ops->ndo_select_queue) 3748 if (ops->ndo_select_queue)
3751 queue_index = ops->ndo_select_queue(dev, skb, sb_dev, 3749 queue_index = ops->ndo_select_queue(dev, skb, sb_dev);
3752 netdev_pick_tx);
3753 else 3750 else
3754 queue_index = netdev_pick_tx(dev, skb, sb_dev); 3751 queue_index = netdev_pick_tx(dev, skb, sb_dev);
3755 3752
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 4a6ff1482a9f..f0d97eba250b 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -1133,8 +1133,7 @@ static void ieee80211_uninit(struct net_device *dev)
1133 1133
1134static u16 ieee80211_netdev_select_queue(struct net_device *dev, 1134static u16 ieee80211_netdev_select_queue(struct net_device *dev,
1135 struct sk_buff *skb, 1135 struct sk_buff *skb,
1136 struct net_device *sb_dev, 1136 struct net_device *sb_dev)
1137 select_queue_fallback_t fallback)
1138{ 1137{
1139 return ieee80211_select_queue(IEEE80211_DEV_TO_SUB_IF(dev), skb); 1138 return ieee80211_select_queue(IEEE80211_DEV_TO_SUB_IF(dev), skb);
1140} 1139}
@@ -1179,8 +1178,7 @@ static const struct net_device_ops ieee80211_dataif_ops = {
1179 1178
1180static u16 ieee80211_monitor_select_queue(struct net_device *dev, 1179static u16 ieee80211_monitor_select_queue(struct net_device *dev,
1181 struct sk_buff *skb, 1180 struct sk_buff *skb,
1182 struct net_device *sb_dev, 1181 struct net_device *sb_dev)
1183 select_queue_fallback_t fallback)
1184{ 1182{
1185 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); 1183 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1186 struct ieee80211_local *local = sdata->local; 1184 struct ieee80211_local *local = sdata->local;
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index a8809dc0e1ab..741953b42f44 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -287,8 +287,7 @@ static u16 packet_pick_tx_queue(struct sk_buff *skb)
287#endif 287#endif
288 skb_record_rx_queue(skb, cpu % dev->real_num_tx_queues); 288 skb_record_rx_queue(skb, cpu % dev->real_num_tx_queues);
289 if (ops->ndo_select_queue) { 289 if (ops->ndo_select_queue) {
290 queue_index = ops->ndo_select_queue(dev, skb, NULL, 290 queue_index = ops->ndo_select_queue(dev, skb, NULL);
291 netdev_pick_tx);
292 queue_index = netdev_cap_txqueue(dev, queue_index); 291 queue_index = netdev_cap_txqueue(dev, queue_index);
293 } else { 292 } else {
294 queue_index = netdev_pick_tx(dev, skb, NULL); 293 queue_index = netdev_pick_tx(dev, skb, NULL);