]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
s390/qeth: don't keep track of Input Queue count
authorJulian Wiedmann <jwi@linux.ibm.com>
Mon, 25 Oct 2021 09:56:54 +0000 (11:56 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 17 May 2024 09:50:50 +0000 (11:50 +0200)
[ Upstream commit dc15012bb083c70502b625cf56fbf32b6cf17fe4 ]

The only actual user of qdio.no_input_queues is qeth_qdio_establish(),
and there we already have full awareness of the current Input Queue
configuration (1 RX queue, plus potentially 1 TX Completion queue).

So avoid this state tracking, and the ambiguity it brings with it.

Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Stable-dep-of: 8a2e4d37afb8 ("s390/qeth: Fix kernel panic after setting hsuid")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/s390/net/qeth_core.h
drivers/s390/net/qeth_core_main.c

index e8c360879883b3f2def02924e2023a50fc897136..71464e9ad4f820280c802b7b1305953ae851ca1f 100644 (file)
@@ -545,7 +545,6 @@ static inline bool qeth_out_queue_is_empty(struct qeth_qdio_out_q *queue)
 struct qeth_qdio_info {
        atomic_t state;
        /* input */
-       int no_in_queues;
        struct qeth_qdio_q *in_q;
        struct qeth_qdio_q *c_q;
        struct qeth_qdio_buffer_pool in_buf_pool;
index c1346c4e2242d8f8bf072bf15274d85164792dfb..9b7f518395e166d6deef2aa9ecacf529663ebad3 100644 (file)
@@ -354,8 +354,8 @@ static int qeth_cq_init(struct qeth_card *card)
                qdio_reset_buffers(card->qdio.c_q->qdio_bufs,
                                   QDIO_MAX_BUFFERS_PER_Q);
                card->qdio.c_q->next_buf_to_init = 127;
-               rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT,
-                            card->qdio.no_in_queues - 1, 0, 127, NULL);
+               rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, 1, 0, 127,
+                            NULL);
                if (rc) {
                        QETH_CARD_TEXT_(card, 2, "1err%d", rc);
                        goto out;
@@ -375,21 +375,16 @@ static int qeth_alloc_cq(struct qeth_card *card)
                        dev_err(&card->gdev->dev, "Failed to create completion queue\n");
                        return -ENOMEM;
                }
-
-               card->qdio.no_in_queues = 2;
        } else {
                QETH_CARD_TEXT(card, 2, "nocq");
                card->qdio.c_q = NULL;
-               card->qdio.no_in_queues = 1;
        }
-       QETH_CARD_TEXT_(card, 2, "iqc%d", card->qdio.no_in_queues);
        return 0;
 }
 
 static void qeth_free_cq(struct qeth_card *card)
 {
        if (card->qdio.c_q) {
-               --card->qdio.no_in_queues;
                qeth_free_qdio_queue(card->qdio.c_q);
                card->qdio.c_q = NULL;
        }
@@ -1492,7 +1487,6 @@ static void qeth_init_qdio_info(struct qeth_card *card)
        card->qdio.default_out_queue = QETH_DEFAULT_QUEUE;
 
        /* inbound */
-       card->qdio.no_in_queues = 1;
        card->qdio.in_buf_size = QETH_IN_BUF_SIZE_DEFAULT;
        if (IS_IQD(card))
                card->qdio.init_pool.buf_count = QETH_IN_BUF_COUNT_HSDEFAULT;
@@ -5173,6 +5167,7 @@ static int qeth_qdio_establish(struct qeth_card *card)
        struct qdio_buffer **in_sbal_ptrs[QETH_MAX_IN_QUEUES];
        struct qeth_qib_parms *qib_parms = NULL;
        struct qdio_initialize init_data;
+       unsigned int no_input_qs = 1;
        unsigned int i;
        int rc = 0;
 
@@ -5187,8 +5182,10 @@ static int qeth_qdio_establish(struct qeth_card *card)
        }
 
        in_sbal_ptrs[0] = card->qdio.in_q->qdio_bufs;
-       if (card->options.cq == QETH_CQ_ENABLED)
+       if (card->options.cq == QETH_CQ_ENABLED) {
                in_sbal_ptrs[1] = card->qdio.c_q->qdio_bufs;
+               no_input_qs++;
+       }
 
        for (i = 0; i < card->qdio.no_out_queues; i++)
                out_sbal_ptrs[i] = card->qdio.out_qs[i]->qdio_bufs;
@@ -5198,7 +5195,7 @@ static int qeth_qdio_establish(struct qeth_card *card)
                                                          QDIO_QETH_QFMT;
        init_data.qib_param_field_format = 0;
        init_data.qib_param_field        = (void *)qib_parms;
-       init_data.no_input_qs            = card->qdio.no_in_queues;
+       init_data.no_input_qs            = no_input_qs;
        init_data.no_output_qs           = card->qdio.no_out_queues;
        init_data.input_handler          = qeth_qdio_input_handler;
        init_data.output_handler         = qeth_qdio_output_handler;