s390/qeth: keep track of fixed prio-queue configuration
authorJulian Wiedmann <jwi@linux.ibm.com>
Wed, 25 Mar 2020 09:35:06 +0000 (10:35 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 25 Mar 2020 19:07:15 +0000 (12:07 -0700)
When a device is configured in prio-queue mode to pin all traffic onto
a specific HW queue, treat this as a distinct variant of prio-queueing
instead of QETH_NO_PRIO_QUEUEING.

This corrects an error message from qeth_osa_set_output_queues() for
devices configured in such a mode.

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_core_sys.c

index a6553e7..5f85617 100644 (file)
@@ -211,6 +211,7 @@ struct qeth_vnicc_info {
 #define QETH_PRIO_Q_ING_TOS   2
 #define QETH_PRIO_Q_ING_SKB   3
 #define QETH_PRIO_Q_ING_VLAN  4
+#define QETH_PRIO_Q_ING_FIXED 5
 
 /* Packing */
 #define QETH_LOW_WATERMARK_PACK  2
index 0c9f146..8713f1b 100644 (file)
@@ -3646,6 +3646,8 @@ int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb)
                        return ~ntohs(veth->h_vlan_TCI) >>
                               (VLAN_PRIO_SHIFT + 1) & 3;
                break;
+       case QETH_PRIO_Q_ING_FIXED:
+               return card->qdio.default_out_queue;
        default:
                break;
        }
index 533a7f2..d7e429f 100644 (file)
@@ -211,16 +211,16 @@ static ssize_t qeth_dev_prioqing_store(struct device *dev,
                card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_VLAN;
                card->qdio.default_out_queue = QETH_DEFAULT_QUEUE;
        } else if (sysfs_streq(buf, "no_prio_queueing:0")) {
-               card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
+               card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_FIXED;
                card->qdio.default_out_queue = 0;
        } else if (sysfs_streq(buf, "no_prio_queueing:1")) {
-               card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
+               card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_FIXED;
                card->qdio.default_out_queue = 1;
        } else if (sysfs_streq(buf, "no_prio_queueing:2")) {
-               card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
+               card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_FIXED;
                card->qdio.default_out_queue = 2;
        } else if (sysfs_streq(buf, "no_prio_queueing:3")) {
-               card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
+               card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_FIXED;
                card->qdio.default_out_queue = 3;
        } else if (sysfs_streq(buf, "no_prio_queueing")) {
                card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;