[SRU][J:linux-bluefield][PATCH v3 1/9] Revert "platform/mellanox: mlxbf-tmfifo: Drop Tx network packet when Tx TmFIFO is full"

Haifei Luo haifeil at nvidia.com
Mon Mar 24 01:59:20 UTC 2025


BugLink: https://bugs.launchpad.net/bugs/2103386

This reverts commit fe4595c4d14e305a31e4dc0fd381c131584601ad.

Change-Id: Ie4674ed5661f052bcadc092a160ea207e4478601
Signed-off-by: Haifei Luo <haifeil at nvidia.com>
---
 drivers/platform/mellanox/mlxbf-tmfifo.c | 67 ------------------------
 1 file changed, 67 deletions(-)

diff --git a/drivers/platform/mellanox/mlxbf-tmfifo.c b/drivers/platform/mellanox/mlxbf-tmfifo.c
index 53ad1ef3c388..e7d8d31c5502 100644
--- a/drivers/platform/mellanox/mlxbf-tmfifo.c
+++ b/drivers/platform/mellanox/mlxbf-tmfifo.c
@@ -50,9 +50,6 @@
 /* ACPI chip identifier for BlueField-3. */
 #define MLXBF_TMFIFO_BF3_UID			"1"
 
-/* Tx timeout in milliseconds. */
-#define TMFIFO_TX_TIMEOUT			2000
-
 struct mlxbf_tmfifo;
 
 /**
@@ -65,14 +62,12 @@ struct mlxbf_tmfifo;
  * @drop_desc: dummy desc for packet dropping
  * @cur_len: processed length of the current descriptor
  * @rem_len: remaining length of the pending packet
- * @rem_padding: remaining bytes to send as paddings
  * @pkt_len: total length of the pending packet
  * @next_avail: next avail descriptor id
  * @num: vring size (number of descriptors)
  * @align: vring alignment size
  * @index: vring index
  * @vdev_id: vring virtio id (VIRTIO_ID_xxx)
- * @tx_timeout: expire time of last tx packet
  * @fifo: pointer to the tmfifo structure
  */
 struct mlxbf_tmfifo_vring {
@@ -84,14 +79,12 @@ struct mlxbf_tmfifo_vring {
 	struct vring_desc drop_desc;
 	int cur_len;
 	int rem_len;
-	int rem_padding;
 	u32 pkt_len;
 	u16 next_avail;
 	int num;
 	int align;
 	int index;
 	int vdev_id;
-	unsigned long tx_timeout;
 	struct mlxbf_tmfifo *fifo;
 };
 
@@ -962,50 +955,6 @@ static bool mlxbf_tmfifo_rxtx_one_desc(struct mlxbf_tmfifo_vring *vring,
 	return true;
 }
 
-static void mlxbf_tmfifo_check_tx_timeout(struct mlxbf_tmfifo_vring *vring)
-{
-	unsigned long flags;
-
-	/* Only handle Tx timeout for network vdev. */
-	if (vring->vdev_id != VIRTIO_ID_NET)
-		return;
-
-	/* Initialize the timeout or return if not expired. */
-	if (!vring->tx_timeout) {
-		/* Initialize the timeout. */
-		vring->tx_timeout = jiffies +
-			msecs_to_jiffies(TMFIFO_TX_TIMEOUT);
-		return;
-	} else if (time_before(jiffies, vring->tx_timeout)) {
-		/* Return if not timeout yet. */
-		return;
-	}
-
-	/*
-	 * Drop the packet after timeout. The outstanding packet is
-	 * released and the remaining bytes will be sent with padding byte 0x00
-	 * as a recovery. On the peer(host) side, the padding bytes 0x00 will be
-	 * either dropped directly, or appended into existing outstanding packet
-	 * thus dropped as corrupted network packet.
-	 */
-	vring->rem_padding = round_up(vring->rem_len, sizeof(u64));
-	mlxbf_tmfifo_release_pkt(vring);
-	vring->cur_len = 0;
-	vring->rem_len = 0;
-	vring->fifo->vring[0] = NULL;
-
-	/*
-	 * Make sure the load/store are in order before
-	 * returning back to virtio.
-	 */
-	virtio_mb(false);
-
-	/* Notify upper layer. */
-	spin_lock_irqsave(&vring->fifo->spin_lock[0], flags);
-	vring_interrupt(0, vring->vq);
-	spin_unlock_irqrestore(&vring->fifo->spin_lock[0], flags);
-}
-
 /* Rx & Tx processing of a queue. */
 static void mlxbf_tmfifo_rxtx(struct mlxbf_tmfifo_vring *vring, bool is_rx)
 {
@@ -1028,7 +977,6 @@ static void mlxbf_tmfifo_rxtx(struct mlxbf_tmfifo_vring *vring, bool is_rx)
 		return;
 
 	do {
-retry:
 		/* Get available FIFO space. */
 		if (avail == 0) {
 			if (is_rx)
@@ -1039,17 +987,6 @@ static void mlxbf_tmfifo_rxtx(struct mlxbf_tmfifo_vring *vring, bool is_rx)
 				break;
 		}
 
-		/* Insert paddings for discarded Tx packet. */
-		if (!is_rx) {
-			vring->tx_timeout = 0;
-			while (vring->rem_padding >= sizeof(u64)) {
-				writeq(0, vring->fifo->tx_data);
-				vring->rem_padding -= sizeof(u64);
-				if (--avail == 0)
-					goto retry;
-			}
-		}
-
 		/* Console output always comes from the Tx buffer. */
 		if (!is_rx && devid == VIRTIO_ID_CONSOLE) {
 			/* Check if there is any control data to send. */
@@ -1062,10 +999,6 @@ static void mlxbf_tmfifo_rxtx(struct mlxbf_tmfifo_vring *vring, bool is_rx)
 		/* Handle one descriptor. */
 		more = mlxbf_tmfifo_rxtx_one_desc(vring, is_rx, &avail);
 	} while (more);
-
-	/* Check Tx timeout. */
-	if (avail <= 0 && !is_rx)
-		mlxbf_tmfifo_check_tx_timeout(vring);
 }
 
 /* Handle Rx or Tx queues. */
-- 
2.34.1




More information about the kernel-team mailing list