diff options
author | Julian Wiedmann <jwi@linux.ibm.com> | 2020-03-18 13:54:48 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-03-18 16:33:35 -0700 |
commit | fcc2df8b8777c960c8125bc157423c76415a5419 (patch) | |
tree | 3272f2118e754a0727cda3f24d15e8fc859c0030 /drivers/s390/net/qeth_ethtool.c | |
parent | 1c103cf819da7af23c96d968d3172b4358970502 (diff) |
s390/qeth: allow configuration of TX queues for z/VM NICs
Add support for ETHTOOL_SCHANNELS to change the count of active
TX queues.
Since all TX queue structs are pre-allocated and -registered, we just
need to trivially adjust dev->real_num_tx_queues.
Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/s390/net/qeth_ethtool.c')
-rw-r--r-- | drivers/s390/net/qeth_ethtool.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/s390/net/qeth_ethtool.c b/drivers/s390/net/qeth_ethtool.c index 9052c72d5b8f..19b9c8302d36 100644 --- a/drivers/s390/net/qeth_ethtool.c +++ b/drivers/s390/net/qeth_ethtool.c @@ -175,6 +175,22 @@ static void qeth_get_channels(struct net_device *dev, channels->combined_count = 0; } +static int qeth_set_channels(struct net_device *dev, + struct ethtool_channels *channels) +{ + struct qeth_card *card = dev->ml_priv; + + if (IS_IQD(card) || !IS_VM_NIC(card)) + return -EOPNOTSUPP; + + if (channels->rx_count == 0 || channels->tx_count == 0) + return -EINVAL; + if (channels->tx_count > card->qdio.no_out_queues) + return -EINVAL; + + return netif_set_real_num_tx_queues(dev, channels->tx_count); +} + static int qeth_get_tunable(struct net_device *dev, const struct ethtool_tunable *tuna, void *data) { @@ -410,6 +426,7 @@ const struct ethtool_ops qeth_ethtool_ops = { .get_sset_count = qeth_get_sset_count, .get_drvinfo = qeth_get_drvinfo, .get_channels = qeth_get_channels, + .set_channels = qeth_set_channels, .get_tunable = qeth_get_tunable, .set_tunable = qeth_set_tunable, .get_link_ksettings = qeth_get_link_ksettings, |