<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<hr style="display: inline-block; width: 98%;">
<div id="divRplyFwdMsg" dir="ltr"><span style="font-family: Calibri, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);"><b>From:</b> Vidya Sagar Velumuri <vvelumuri@marvell.com><br>
<b>Sent:</b> Friday, April 19, 2024 2:37 PM<br>
<b>To:</b> fengchengwen@huawei.com <fengchengwen@huawei.com>; kevin.laatz@intel.com <kevin.laatz@intel.com>; bruce.richardson@intel.com <bruce.richardson@intel.com><br>
<b>Cc:</b> Jerin Jacob <jerinj@marvell.com>; Anoob Joseph <anoobj@marvell.com>; Vidya Sagar Velumuri <vvelumuri@marvell.com>; Aakash Sasidharan <asasidharan@marvell.com>; Tejasree Kondoj <ktejasree@marvell.com>; Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>;
 dev@dpdk.org <dev@dpdk.org><br>
<b>Subject:</b> [EXTERNAL] [PATCH v2 1/2] test/dma: update the sg test to verify wrap around case</span>
<div> </div>
</div>
<div class="elementToProof" style="font-size: 11pt;">Prioritize security for external emails: Confirm sender and content safety before clicking links or opening attachments<br>
<br>
----------------------------------------------------------------------<br>
Run the sg test in a loop to verify wrap around case.<br>
Total number commands submitted to be more than the number descriptors<br>
allocated to verify the scenario.<br>
<br>
Signed-off-by: Vidya Sagar Velumuri <vvelumuri@marvell.com><br>
diff --git a/app/test/test_dmadev.c b/app/test/test_dmadev.c<br>
index 143e1bcd68..7462e90831 100644<br>
--- a/app/test/test_dmadev.c<br>
+++ b/app/test/test_dmadev.c<br>
@@ -393,34 +393,26 @@ test_stop_start(int16_t dev_id, uint16_t vchan)<br>
 }<br>
 <br>
 static int<br>
-test_enqueue_sg_copies(int16_t dev_id, uint16_t vchan)<br>
+test_enqueue_sg(int16_t dev_id, uint16_t vchan, unsigned int n_sge, unsigned int test_len)<br>
 {<br>
-       unsigned int src_len, dst_len, n_sge, len, i, j, k;<br>
         char orig_src[COPY_LEN], orig_dst[COPY_LEN];<br>
-       struct rte_dma_info info = { 0 };<br>
+       unsigned int src_len, dst_len, i, j, k;<br>
         enum rte_dma_status_code status;<br>
         uint16_t id, n_src, n_dst;<br>
 <br>
-       if (rte_dma_info_get(dev_id, &info) < 0)<br>
-               ERR_RETURN("Failed to get dev info");<br>
-<br>
-       if (info.max_sges < 2)<br>
-               ERR_RETURN("Test needs minimum 2 SG pointers");<br>
-<br>
-       n_sge = info.max_sges;<br>
-<br>
         for (n_src = 1; n_src <= n_sge; n_src++) {<br>
                 for (n_dst = 1; n_dst <= n_sge; n_dst++) {<br>
                         /* Normalize SG buffer lengths */<br>
-                       len = COPY_LEN;<br>
-                       len -= (len % (n_src * n_dst));<br>
-                       dst_len = len / n_dst;<br>
-                       src_len = len / n_src;<br>
-<br>
+                       unsigned int len = test_len - (test_len % (n_src * n_dst));<br>
                         struct rte_dma_sge sg_src[n_sge], sg_dst[n_sge];<br>
                         struct rte_mbuf *src[n_sge], *dst[n_sge];<br>
                         char *src_data[n_sge], *dst_data[n_sge];<br>
 <br>
+                       dst_len = len / n_dst;<br>
+                       src_len = len / n_src;<br>
+                       if (dst_len == 0 || src_len == 0)<br>
+                               continue;<br>
+<br>
                         for (i = 0 ; i < len; i++)<br>
                                 orig_src[i] = rte_rand() & 0xFF;<br>
 <br>
@@ -511,6 +503,27 @@ test_enqueue_sg_copies(int16_t dev_id, uint16_t vchan)<br>
         return 0;<br>
 }<br>
 <br>
+static int<br>
+test_enqueue_sg_copies(int16_t dev_id, uint16_t vchan)<br>
+{<br>
+       struct rte_dma_info info = { 0 };<br>
+       unsigned int n_sge, len;<br>
+       int loop_count = 0;<br>
+<br>
+       if (rte_dma_info_get(dev_id, &info) < 0)<br>
+               ERR_RETURN("Failed to get dev info");<br>
+<br>
+       n_sge = RTE_MIN(info.max_sges, TEST_SG_MAX);<br>
+       len = COPY_LEN;<br>
+<br>
+       do {<br>
+               test_enqueue_sg(dev_id, vchan, n_sge, len);<br>
+               loop_count++;<br>
+       } while (loop_count * n_sge * n_sge < TEST_RINGSIZE * 3);<br>
+<br>
+       return 0;<br>
+}<br>
+<br>
 /* Failure handling test cases - global macros and variables for those tests*/<br>
 #define COMP_BURST_SZ   16<br>
 #define OPT_FENCE(idx) ((fence && idx == 8) ? RTE_DMA_OP_FLAG_FENCE : 0)<br>
diff --git a/app/test/test_dmadev_api.c b/app/test/test_dmadev_api.c<br>
index d40c05cfbf..6a07ed593b 100644<br>
--- a/app/test/test_dmadev_api.c<br>
+++ b/app/test/test_dmadev_api.c<br>
@@ -16,7 +16,6 @@ extern int test_dma_api(uint16_t dev_id);<br>
 <br>
 #define TEST_MEMCPY_SIZE        1024<br>
 #define TEST_WAIT_US_VAL        50000<br>
-#define TEST_SG_MAX            64<br>
 <br>
 static int16_t test_dev_id;<br>
 static int16_t invalid_dev_id;<br>
diff --git a/app/test/test_dmadev_api.h b/app/test/test_dmadev_api.h<br>
index 33fbc5bd41..a03f7acd4f 100644<br>
--- a/app/test/test_dmadev_api.h<br>
+++ b/app/test/test_dmadev_api.h<br>
@@ -2,4 +2,6 @@<br>
  * Copyright(c) 2021 HiSilicon Limited<br>
  */<br>
 <br>
+#define TEST_SG_MAX            64<br>
+<br>
 int test_dma_api(uint16_t dev_id);<br>
--<br>
2.25.1</div>
<div class="elementToProof" style="font-size: 11pt;"><br>
</div>
<div class="elementToProof" style="font-size: 11pt; color: rgb(0, 0, 0);">Acked-by: Amit Prakash Shukla <amitprakashs@marvell.com></div>
<div class="elementToProof" style="font-size: 11pt; color: rgb(0, 0, 0);"><br>
</div>
<div class="elementToProof" style="font-size: 11pt; color: rgb(0, 0, 0);">Thanks</div>
</body>
</html>