[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