Skip to contentSkip to conversation

FAILED: patch "[PATCH] s390/qeth: improve completion of pending TX buffers" failed to apply to 4.14-stable tree

PATCH [email protected] 1 participant 1 message Mar 12, 2021

Subsystems (4)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 4.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From c20383ad1656b0f6354dd50e4acd894f9d94090d Mon Sep 17 00:00:00 2001
From: Julian Wiedmann <[email protected]>
Date: Tue, 9 Mar 2021 17:52:19 +0100
Subject: [PATCH] s390/qeth: improve completion of pending TX buffers

The current design attaches a pending TX buffer to a custom single-linked list, which is anchored at the buffer's slot on the TX ring. The buffer is then checked for final completion whenever this slot is processed during a subsequent TX NAPI poll cycle.

But if there's insufficient traffic on the ring, we might never make enough progress to get back to this ring slot and discover the pending buffer's final TX completion. In particular if this missing TX completion blocks the application from sending further traffic.

So convert the custom single-linked list code to a per-queue list_head, and scan this list on every TX NAPI cycle.

Fixes 0da9581ddb0f ("qeth: exploit asynchronous delivery of storage blocks")
drivers/s390/net/qeth_core.h +2 -1
index a1da83b0b0ef..91acff493612 100644
@@ -436,7 +436,7 @@ struct qeth_qdio_out_buffer {
 	int is_header[QDIO_MAX_ELEMENTS_PER_BUFFER];
 
 	struct qeth_qdio_out_q *q;
-	struct qeth_qdio_out_buffer *next_pending;
+	struct list_head list_entry;
 };
 
 struct qeth_card;
@@ -500,6 +500,7 @@ struct qeth_qdio_out_q {
 	struct qdio_buffer *qdio_bufs[QDIO_MAX_BUFFERS_PER_Q];
 	struct qeth_qdio_out_buffer *bufs[QDIO_MAX_BUFFERS_PER_Q];
 	struct qdio_outbuf_state *bufstates; /* convenience pointer */
+	struct list_head pending_bufs;
 	struct qeth_out_q_stats stats;
 	spinlock_t lock;
 	unsigned int priority;
drivers/s390/net/qeth_core_main.c +28 -41

130 lines not on this page · raw message