diff options
author | Paolo Abeni <pabeni@redhat.com> | 2019-03-20 06:02:06 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-03-20 14:18:55 -0400 |
commit | a350eccee5830d9a1f29e393a88dc05a15326d44 (patch) | |
tree | 606fd11e76d457dbcfcb197f573808cb625bee3f | |
parent | b71b5837f8711dbc4bc0424cb5c75e5921be055c (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>
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 | ||
424 | static u16 hfi1_vnic_select_queue(struct net_device *netdev, | 424 | static 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 | ||
97 | static u16 opa_vnic_select_queue(struct net_device *netdev, struct sk_buff *skb, | 97 | static 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 | ||
4116 | static u16 bond_select_queue(struct net_device *dev, struct sk_buff *skb, | 4116 | static 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 | ||
2260 | static u16 ena_select_queue(struct net_device *dev, struct sk_buff *skb, | 2260 | static 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 | ||
2276 | static u16 bcm_sysport_select_queue(struct net_device *dev, struct sk_buff *skb, | 2276 | static 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 | ||
1911 | u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb, | 1911 | u16 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 */ |
500 | u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb, | 500 | u16 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 | ||
504 | static inline void bnx2x_update_rx_prod(struct bnx2x *bp, | 503 | static 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 | ||
981 | static u16 cxgb_select_queue(struct net_device *dev, struct sk_buff *skb, | 981 | static 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 | ||
1028 | static int closest_timer(const struct sge *s, int time) | 1027 | static 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 | ||
1965 | static u16 | 1965 | static u16 |
1966 | hns_nic_select_queue(struct net_device *ndev, struct sk_buff *skb, | 1966 | hns_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 | ||
1981 | static const struct net_device_ops hns_nic_netdev_ops = { | 1980 | static 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 |
8485 | static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb, | 8485 | static 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 | ||
687 | u16 mlx4_en_select_queue(struct net_device *dev, struct sk_buff *skb, | 687 | u16 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 | ||
700 | static void mlx4_bf_copy(void __iomem *dst, const void *src, | 699 | static 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 | ||
699 | void mlx4_en_tx_irq(struct mlx4_cq *mcq); | 699 | void mlx4_en_tx_irq(struct mlx4_cq *mcq); |
700 | u16 mlx4_en_select_queue(struct net_device *dev, struct sk_buff *skb, | 700 | u16 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); | ||
703 | netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev); | 702 | netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev); |
704 | netdev_tx_t mlx4_en_xmit_frame(struct mlx4_en_rx_ring *rx_ring, | 703 | netdev_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 { | |||
769 | void mlx5e_build_ptys2ethtool_map(void); | 769 | void mlx5e_build_ptys2ethtool_map(void); |
770 | 770 | ||
771 | u16 mlx5e_select_queue(struct net_device *dev, struct sk_buff *skb, | 771 | u16 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); | ||
774 | netdev_tx_t mlx5e_xmit(struct sk_buff *skb, struct net_device *dev); | 773 | netdev_tx_t mlx5e_xmit(struct sk_buff *skb, struct net_device *dev); |
775 | netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb, | 774 | netdev_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 | ||
112 | u16 mlx5e_select_queue(struct net_device *dev, struct sk_buff *skb, | 112 | u16 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 */ |
499 | netdev_tx_t qede_start_xmit(struct sk_buff *skb, struct net_device *ndev); | 499 | netdev_tx_t qede_start_xmit(struct sk_buff *skb, struct net_device *ndev); |
500 | u16 qede_select_queue(struct net_device *dev, struct sk_buff *skb, | 500 | u16 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); | ||
503 | netdev_features_t qede_features_check(struct sk_buff *skb, | 502 | netdev_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 | ||
1698 | u16 qede_select_queue(struct net_device *dev, struct sk_buff *skb, | 1698 | u16 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 | ||
1617 | static u16 ravb_select_queue(struct net_device *ndev, struct sk_buff *skb, | 1617 | static 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 | ||
103 | static u16 vsw_select_queue(struct net_device *dev, struct sk_buff *skb, | 103 | static 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 | ||
236 | static u16 vnet_select_queue(struct net_device *dev, struct sk_buff *skb, | 236 | static 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 | ||
333 | static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb, | 333 | static 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 | ||
116 | static u16 net_failover_select_queue(struct net_device *dev, | 116 | static 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 | ||
1693 | static u16 team_select_queue(struct net_device *dev, struct sk_buff *skb, | 1693 | static 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 | ||
608 | static u16 tun_select_queue(struct net_device *dev, struct sk_buff *skb, | 608 | static 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 | ||
1283 | static u16 | 1283 | static u16 |
1284 | mwifiex_netdev_select_wmm_queue(struct net_device *dev, struct sk_buff *skb, | 1284 | mwifiex_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 | ||
150 | static u16 xenvif_select_queue(struct net_device *dev, struct sk_buff *skb, | 150 | static 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 | ||
545 | static u16 xennet_select_queue(struct net_device *dev, struct sk_buff *skb, | 545 | static 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 | ||
247 | static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb, | 247 | static 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 | ||
406 | static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb, | 406 | static 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); | |||
2641 | void dev_disable_lro(struct net_device *dev); | 2639 | void dev_disable_lro(struct net_device *dev); |
2642 | int dev_loopback_xmit(struct net *net, struct sock *sk, struct sk_buff *newskb); | 2640 | int dev_loopback_xmit(struct net *net, struct sock *sk, struct sk_buff *newskb); |
2643 | u16 dev_pick_tx_zero(struct net_device *dev, struct sk_buff *skb, | 2641 | u16 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); | ||
2646 | u16 dev_pick_tx_cpu_id(struct net_device *dev, struct sk_buff *skb, | 2643 | u16 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); | ||
2649 | int dev_queue_xmit(struct sk_buff *skb); | 2645 | int dev_queue_xmit(struct sk_buff *skb); |
2650 | int dev_queue_xmit_accel(struct sk_buff *skb, struct net_device *sb_dev); | 2646 | int dev_queue_xmit_accel(struct sk_buff *skb, struct net_device *sb_dev); |
2651 | int dev_direct_xmit(struct sk_buff *skb, u16 queue_id); | 2647 | int 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 | ||
3691 | u16 dev_pick_tx_zero(struct net_device *dev, struct sk_buff *skb, | 3691 | u16 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 | } |
3697 | EXPORT_SYMBOL(dev_pick_tx_zero); | 3696 | EXPORT_SYMBOL(dev_pick_tx_zero); |
3698 | 3697 | ||
3699 | u16 dev_pick_tx_cpu_id(struct net_device *dev, struct sk_buff *skb, | 3698 | u16 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 | ||
1134 | static u16 ieee80211_netdev_select_queue(struct net_device *dev, | 1134 | static 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 | ||
1180 | static u16 ieee80211_monitor_select_queue(struct net_device *dev, | 1179 | static 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); |