net/gve: Add support for TSO in DQO RDA

Message ID 1722507548-2401507-1-git-send-email-tathagat.dpdk@gmail.com (mailing list archive)
State Superseded
Delegated to: Ferruh Yigit
Headers
Series net/gve: Add support for TSO in DQO RDA |

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/loongarch-compilation warning apply patch failure
ci/iol-testing warning apply patch failure
ci/Intel-compilation warning apply issues

Commit Message

Tathagat Priyadarshi Aug. 1, 2024, 10:19 a.m. UTC
The patch intends on adding support for TSO in DQO RDA format.

Signed-off-by: Tathagat Priyadarshi <tathagat.dpdk@gmail.com>
Signed-off-by: Varun Lakkur Ambaji Rao <varun.la@gmail.com>
---
 drivers/net/gve/gve_tx_dqo.c | 42 ++++++++++++++++++++++++++++++++++++------
 1 file changed, 36 insertions(+), 6 deletions(-)
  

Comments

Tathagat Priyadarshi Aug. 1, 2024, 10:33 a.m. UTC | #1
The following patch depends on
https://patches.dpdk.org/project/dpdk/patch/1722443901-2400194-1-git-send-email-tathagat.dpdk@gmail.com/
Will retrigger git patch checks post its approved and upstreamed. To
avoid conflicts.

On Thu, Aug 1, 2024 at 3:47 PM Tathagat Priyadarshi
<tathagat.dpdk@gmail.com> wrote:
>
> The patch intends on adding support for TSO in DQO RDA format.
>
> Signed-off-by: Tathagat Priyadarshi <tathagat.dpdk@gmail.com>
> Signed-off-by: Varun Lakkur Ambaji Rao <varun.la@gmail.com>
> ---
>  drivers/net/gve/gve_tx_dqo.c | 42 ++++++++++++++++++++++++++++++++++++------
>  1 file changed, 36 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/gve/gve_tx_dqo.c b/drivers/net/gve/gve_tx_dqo.c
> index 579b8d6..e5cdb57 100644
> --- a/drivers/net/gve/gve_tx_dqo.c
> +++ b/drivers/net/gve/gve_tx_dqo.c
> @@ -72,6 +72,17 @@
>         txq->complq_tail = next;
>  }
>
> +static inline void
> +gve_tx_fill_seg_desc_dqo(volatile union gve_tx_desc_dqo *desc, struct rte_mbuf *tx_pkt)
> +{
> +       uint32_t hlen = tx_pkt->l2_len + tx_pkt->l3_len + tx_pkt->l4_len;
> +       desc->tso_ctx.cmd_dtype.dtype = GVE_TX_TSO_CTX_DESC_DTYPE_DQO;
> +       desc->tso_ctx.cmd_dtype.tso = 1;
> +       desc->tso_ctx.mss = (uint16_t)tx_pkt->tso_segsz;
> +       desc->tso_ctx.tso_total_len = tx_pkt->pkt_len - hlen;
> +       desc->tso_ctx.header_len = (uint8_t)hlen;
> +}
> +
>  uint16_t
>  gve_tx_burst_dqo(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
>  {
> @@ -89,6 +100,8 @@
>         uint16_t sw_id;
>         uint64_t bytes;
>         uint16_t first_sw_id;
> +       uint8_t tso;
> +       uint8_t csum;
>
>         sw_ring = txq->sw_ring;
>         txr = txq->tx_ring;
> @@ -108,12 +121,31 @@
>                                 gve_tx_clean_dqo(txq);
>                 }
>
> -               if (txq->nb_free < tx_pkt->nb_segs)
> -                       break;
> -
>                 ol_flags = tx_pkt->ol_flags;
>                 nb_used = tx_pkt->nb_segs;
>                 first_sw_id = sw_id;
> +
> +               if (ol_flags & RTE_MBUF_F_TX_TCP_SEG) {
> +                       tso = 1;
> +                       csum = 1;
> +               } else if (ol_flags & GVE_TX_CKSUM_OFFLOAD_MASK_DQO) {
> +                       tso = 0;
> +                       csum = 1;
> +               } else {
> +                       tso = 0;
> +                       csum = 0;
> +               }
> +
> +               nb_used += tso;
> +               if (txq->nb_free < nb_used)
> +                       break;
> +
> +               if (tso) {
> +                       txd = &txr[tx_id];
> +                       gve_tx_fill_seg_desc_dqo(txd, tx_pkt);
> +                       tx_id = (tx_id + 1) & mask;
> +               }
> +
>                 do {
>                         if (sw_ring[sw_id] != NULL)
>                                 PMD_DRV_LOG(DEBUG, "Overwriting an entry in sw_ring");
> @@ -127,6 +159,7 @@
>                         txd->pkt.compl_tag = rte_cpu_to_le_16(first_sw_id);
>                         txd->pkt.buf_size = RTE_MIN(tx_pkt->data_len, GVE_TX_MAX_BUF_SIZE_DQO);
>                         txd->pkt.end_of_packet = 0;
> +                       txd->pkt.checksum_offload_enable = csum;
>
>                         /* size of desc_ring and sw_ring could be different */
>                         tx_id = (tx_id + 1) & mask;
> @@ -139,9 +172,6 @@
>                 /* fill the last descriptor with End of Packet (EOP) bit */
>                 txd->pkt.end_of_packet = 1;
>
> -               if (ol_flags & GVE_TX_CKSUM_OFFLOAD_MASK_DQO)
> -                       txd->pkt.checksum_offload_enable = 1;
> -
>                 txq->nb_free -= nb_used;
>                 txq->nb_used += nb_used;
>         }
> --
> 1.8.3.1
>
  
Ferruh Yigit Aug. 7, 2024, 9:40 a.m. UTC | #2
On 8/1/2024 11:33 AM, Tathagat Priyadarshi wrote:
> The following patch depends on
> https://patches.dpdk.org/project/dpdk/patch/1722443901-2400194-1-git-
> send-email-tathagat.dpdk@gmail.com/
> Will retrigger git patch checks post its approved and upstreamed. To
> avoid conflicts.
>

Hi Tathagat,

This patch has bits from other patch just merged, can you please send a
new version of this patch, on top of latest next-net [1] tree?

[1]
https://git.dpdk.org/next/dpdk-next-net/
  
Tathagat Priyadarshi Aug. 8, 2024, 6:25 p.m. UTC | #3
> Hi Tathagat,
>
> This patch has bits from other patch just merged, can you please send a
> new version of this patch, on top of latest next-net [1] tree?
>
> [1]
> https://git.dpdk.org/next/dpdk-next-net/

Superseded via https://patches.dpdk.org/project/dpdk/patch/1723141392-2437012-1-git-send-email-tathagat.dpdk@gmail.com/
  
Ferruh Yigit Aug. 8, 2024, 10:45 p.m. UTC | #4
On 8/8/2024 7:25 PM, Tathagat Priyadarshi wrote:
>> Hi Tathagat,
>>
>> This patch has bits from other patch just merged, can you please send a
>> new version of this patch, on top of latest next-net [1] tree?
>>
>> [1]
>> https://git.dpdk.org/next/dpdk-next-net/
> 
> Superseded via https://patches.dpdk.org/project/dpdk/patch/1723141392-2437012-1-git-send-email-tathagat.dpdk@gmail.com/
>

Thank you.

Instead of replying with this 'superseded' note, expectation is to send
next version, v2 in this case, send as a reply to previous version.
This way both versions will be in the same email thread, so it will be
more clear that old version is superseded. Also it will be in same email
thread in the mail list archive, so someone looking them later will be
able to see all versions history in same thread.
How to send new version as reply to previous one is documented in the
contribution guide, can you please check?
  

Patch

diff --git a/drivers/net/gve/gve_tx_dqo.c b/drivers/net/gve/gve_tx_dqo.c
index 579b8d6..e5cdb57 100644
--- a/drivers/net/gve/gve_tx_dqo.c
+++ b/drivers/net/gve/gve_tx_dqo.c
@@ -72,6 +72,17 @@ 
 	txq->complq_tail = next;
 }
 
+static inline void
+gve_tx_fill_seg_desc_dqo(volatile union gve_tx_desc_dqo *desc, struct rte_mbuf *tx_pkt)
+{
+       uint32_t hlen = tx_pkt->l2_len + tx_pkt->l3_len + tx_pkt->l4_len;
+       desc->tso_ctx.cmd_dtype.dtype = GVE_TX_TSO_CTX_DESC_DTYPE_DQO;
+       desc->tso_ctx.cmd_dtype.tso = 1;
+       desc->tso_ctx.mss = (uint16_t)tx_pkt->tso_segsz;
+       desc->tso_ctx.tso_total_len = tx_pkt->pkt_len - hlen;
+       desc->tso_ctx.header_len = (uint8_t)hlen;
+}
+
 uint16_t
 gve_tx_burst_dqo(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
 {
@@ -89,6 +100,8 @@ 
 	uint16_t sw_id;
 	uint64_t bytes;
 	uint16_t first_sw_id;
+	uint8_t tso;
+	uint8_t csum;
 
 	sw_ring = txq->sw_ring;
 	txr = txq->tx_ring;
@@ -108,12 +121,31 @@ 
 				gve_tx_clean_dqo(txq);
 		}
 
-		if (txq->nb_free < tx_pkt->nb_segs)
-			break;
-
 		ol_flags = tx_pkt->ol_flags;
 		nb_used = tx_pkt->nb_segs;
 		first_sw_id = sw_id;
+
+		if (ol_flags & RTE_MBUF_F_TX_TCP_SEG) {
+			tso = 1;
+			csum = 1;
+		} else if (ol_flags & GVE_TX_CKSUM_OFFLOAD_MASK_DQO) {
+			tso = 0;
+			csum = 1;
+		} else {
+			tso = 0;
+			csum = 0;
+		}
+
+		nb_used += tso;
+		if (txq->nb_free < nb_used)
+			break;
+
+		if (tso) {
+			txd = &txr[tx_id];
+			gve_tx_fill_seg_desc_dqo(txd, tx_pkt);
+			tx_id = (tx_id + 1) & mask;
+		}
+		
 		do {
 			if (sw_ring[sw_id] != NULL)
 				PMD_DRV_LOG(DEBUG, "Overwriting an entry in sw_ring");
@@ -127,6 +159,7 @@ 
 			txd->pkt.compl_tag = rte_cpu_to_le_16(first_sw_id);
 			txd->pkt.buf_size = RTE_MIN(tx_pkt->data_len, GVE_TX_MAX_BUF_SIZE_DQO);
 			txd->pkt.end_of_packet = 0;
+			txd->pkt.checksum_offload_enable = csum;
 
 			/* size of desc_ring and sw_ring could be different */
 			tx_id = (tx_id + 1) & mask;
@@ -139,9 +172,6 @@ 
 		/* fill the last descriptor with End of Packet (EOP) bit */
 		txd->pkt.end_of_packet = 1;
 
-		if (ol_flags & GVE_TX_CKSUM_OFFLOAD_MASK_DQO)
-			txd->pkt.checksum_offload_enable = 1;
-
 		txq->nb_free -= nb_used;
 		txq->nb_used += nb_used;
 	}