diff options
author | Julian Wiedmann <jwi@linux.ibm.com> | 2021-12-07 10:04:51 +0100 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2021-12-07 22:01:02 -0800 |
commit | 1b9e410f45bf68c068fa3422ca7b65ce4d08e5ed (patch) | |
tree | c2bbbcdcbec009e8e6ce58c16c23021a3e2c7ddb /drivers/s390/net/qeth_core_main.c | |
parent | cdf8df5b42e7d9e2f6e660e672d42edb0514b862 (diff) | |
download | linux-1b9e410f45bf68c068fa3422ca7b65ce4d08e5ed.tar.gz linux-1b9e410f45bf68c068fa3422ca7b65ce4d08e5ed.tar.bz2 linux-1b9e410f45bf68c068fa3422ca7b65ce4d08e5ed.zip |
s390/qeth: fine-tune .ndo_select_queue()
Avoid a conditional branch for L2 devices when selecting the TX queue,
and have shared logic for OSA devices.
Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: Alexandra Winter <wintera@linux.ibm.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/s390/net/qeth_core_main.c')
-rw-r--r-- | drivers/s390/net/qeth_core_main.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c index 629a7f5c4d71..093ee14e8051 100644 --- a/drivers/s390/net/qeth_core_main.c +++ b/drivers/s390/net/qeth_core_main.c @@ -3769,7 +3769,7 @@ static void qeth_qdio_output_handler(struct ccw_device *ccwdev, /* * Note: Function assumes that we have 4 outbound queues. */ -int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb) +static int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb) { struct vlan_ethhdr *veth = vlan_eth_hdr(skb); u8 tos; @@ -3814,7 +3814,6 @@ int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb) } return card->qdio.default_out_queue; } -EXPORT_SYMBOL_GPL(qeth_get_priority_queue); /** * qeth_get_elements_for_frags() - find number of SBALEs for skb frags. @@ -7078,6 +7077,18 @@ u16 qeth_iqd_select_queue(struct net_device *dev, struct sk_buff *skb, } EXPORT_SYMBOL_GPL(qeth_iqd_select_queue); +u16 qeth_osa_select_queue(struct net_device *dev, struct sk_buff *skb, + struct net_device *sb_dev) +{ + struct qeth_card *card = dev->ml_priv; + + if (qeth_uses_tx_prio_queueing(card)) + return qeth_get_priority_queue(card, skb); + + return netdev_pick_tx(dev, skb, sb_dev); +} +EXPORT_SYMBOL_GPL(qeth_osa_select_queue); + int qeth_open(struct net_device *dev) { struct qeth_card *card = dev->ml_priv; |