s390/qeth: balance the TX queue selection for IQD devices
authorJulian Wiedmann <jwi@linux.ibm.com>
Wed, 18 Mar 2020 12:54:50 +0000 (13:54 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 18 Mar 2020 23:33:35 +0000 (16:33 -0700)
commit5d8ce41c6a878afac157a61299a9f810bf80995e
treedea9998c36efac5d4f3b2322ca019de1bf3add28
parent66cddf101901a6cfcd21c840f0535e8f1c8c5186
s390/qeth: balance the TX queue selection for IQD devices

For ucast traffic, qeth_iqd_select_queue() falls back to
netdev_pick_tx(). This will potentially use skb_tx_hash() to distribute
the flow over all active TX queues - so txq 0 is a valid selection, and
qeth_iqd_select_queue() needs to check for this and put it on some other
queue. As a result, the distribution for ucast flows is unbalanced and
hits QETH_IQD_MIN_UCAST_TXQ heavier than the other queues.

Open-coding a custom variant of skb_tx_hash() isn't an option, since
netdev_pick_tx() also gives us eg. access to XPS. But we can pull a
little trick: add a single TC class that excludes the mcast txq, and
thus encourage skb_tx_hash() to not pick the mcast txq.

Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/s390/net/qeth_core.h
drivers/s390/net/qeth_core_main.c
drivers/s390/net/qeth_ethtool.c