<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1255">
</head>
<body>
<span style="font-family:-apple-system, HelveticaNeue;font-size:14.6667px;display:inline !important">Series-acked-by: Matan Azrad <</span><a href="mailto:matan@nvidia.com" style="color:rgb(0, 120, 212) !important;font-family:-apple-system, HelveticaNeue;font-size:14.6667px">matan@nvidia.com</a><span style="font-family:-apple-system, HelveticaNeue;font-size:14.6667px;display:inline !important">></span>
<div><br>
</div>
<div id="ms-outlook-mobile-signature" dir="rtl">÷áì <a href="https://aka.ms/AAb9ysg">
þOutlook òáåø Androidþ</a></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Spike Du <spiked@nvidia.com><br>
<b>Sent:</b> Tuesday, June 7, 2022 3:59:36 PM<br>
<b>To:</b> Matan Azrad <matan@nvidia.com>; Slava Ovsiienko <viacheslavo@nvidia.com>; Ori Kam <orika@nvidia.com>; NBU-Contact-Thomas Monjalon (EXTERNAL) <thomas@monjalon.net><br>
<b>Cc:</b> andrew.rybchenko@oktetlabs.ru <andrew.rybchenko@oktetlabs.ru>; stephen@networkplumber.org <stephen@networkplumber.org>; mb@smartsharesystems.com <mb@smartsharesystems.com>; dev@dpdk.org <dev@dpdk.org>; Raslan Darawsheh <rasland@nvidia.com><br>
<b>Subject:</b> [PATCH v5 1/7] net/mlx5: add LWM support for Rxq</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Add lwm(Limit WaterMark) field to Rxq object which indicates the percentage<br>
of RX queue size used by HW to raise LWM event to the user.<br>
Allow LWM setting in modify_rq command.<br>
Allow the LWM configuration dynamically by adding RDY2RDY state change.<br>
<br>
Signed-off-by: Spike Du <spiked@nvidia.com><br>
---<br>
 drivers/net/mlx5/mlx5.h      |  1 +<br>
 drivers/net/mlx5/mlx5_devx.c | 13 ++++++++++++-<br>
 drivers/net/mlx5/mlx5_devx.h |  1 +<br>
 drivers/net/mlx5/mlx5_rx.h   |  1 +<br>
 4 files changed, 15 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h<br>
index ef755ee..305edff 100644<br>
--- a/drivers/net/mlx5/mlx5.h<br>
+++ b/drivers/net/mlx5/mlx5.h<br>
@@ -1395,6 +1395,7 @@ enum mlx5_rxq_modify_type {<br>
         MLX5_RXQ_MOD_RST2RDY, /* modify state from reset to ready. */<br>
         MLX5_RXQ_MOD_RDY2ERR, /* modify state from ready to error. */<br>
         MLX5_RXQ_MOD_RDY2RST, /* modify state from ready to reset. */<br>
+       MLX5_RXQ_MOD_RDY2RDY, /* modify state from ready to ready. */<br>
 };<br>
 <br>
 enum mlx5_txq_modify_type {<br>
diff --git a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c<br>
index 4b48f94..c918a50 100644<br>
--- a/drivers/net/mlx5/mlx5_devx.c<br>
+++ b/drivers/net/mlx5/mlx5_devx.c<br>
@@ -62,7 +62,7 @@<br>
  * @return<br>
  *   0 on success, a negative errno value otherwise and rte_errno is set.<br>
  */<br>
-static int<br>
+int<br>
 mlx5_devx_modify_rq(struct mlx5_rxq_priv *rxq, uint8_t type)<br>
 {<br>
         struct mlx5_devx_modify_rq_attr rq_attr;<br>
@@ -76,6 +76,11 @@<br>
         case MLX5_RXQ_MOD_RST2RDY:<br>
                 rq_attr.rq_state = MLX5_RQC_STATE_RST;<br>
                 rq_attr.state = MLX5_RQC_STATE_RDY;<br>
+               if (rxq->lwm) {<br>
+                       rq_attr.modify_bitmask |=<br>
+                               MLX5_MODIFY_RQ_IN_MODIFY_BITMASK_WQ_LWM;<br>
+                       rq_attr.lwm = rxq->lwm;<br>
+               }<br>
                 break;<br>
         case MLX5_RXQ_MOD_RDY2ERR:<br>
                 rq_attr.rq_state = MLX5_RQC_STATE_RDY;<br>
@@ -85,6 +90,12 @@<br>
                 rq_attr.rq_state = MLX5_RQC_STATE_RDY;<br>
                 rq_attr.state = MLX5_RQC_STATE_RST;<br>
                 break;<br>
+       case MLX5_RXQ_MOD_RDY2RDY:<br>
+               rq_attr.rq_state = MLX5_RQC_STATE_RDY;<br>
+               rq_attr.state = MLX5_RQC_STATE_RDY;<br>
+               rq_attr.modify_bitmask |= MLX5_MODIFY_RQ_IN_MODIFY_BITMASK_WQ_LWM;<br>
+               rq_attr.lwm = rxq->lwm;<br>
+               break;<br>
         default:<br>
                 break;<br>
         }<br>
diff --git a/drivers/net/mlx5/mlx5_devx.h b/drivers/net/mlx5/mlx5_devx.h<br>
index a95207a..ebd1da4 100644<br>
--- a/drivers/net/mlx5/mlx5_devx.h<br>
+++ b/drivers/net/mlx5/mlx5_devx.h<br>
@@ -11,6 +11,7 @@<br>
 int mlx5_txq_devx_modify(struct mlx5_txq_obj *obj,<br>
                          enum mlx5_txq_modify_type type, uint8_t dev_port);<br>
 void mlx5_txq_devx_obj_release(struct mlx5_txq_obj *txq_obj);<br>
+int mlx5_devx_modify_rq(struct mlx5_rxq_priv *rxq, uint8_t type);<br>
 <br>
 extern struct mlx5_obj_ops devx_obj_ops;<br>
 <br>
diff --git a/drivers/net/mlx5/mlx5_rx.h b/drivers/net/mlx5/mlx5_rx.h<br>
index e715ed6..25a5f2c 100644<br>
--- a/drivers/net/mlx5/mlx5_rx.h<br>
+++ b/drivers/net/mlx5/mlx5_rx.h<br>
@@ -175,6 +175,7 @@ struct mlx5_rxq_priv {<br>
         struct mlx5_devx_rq devx_rq;<br>
         struct rte_eth_hairpin_conf hairpin_conf; /* Hairpin configuration. */<br>
         uint32_t hairpin_status; /* Hairpin binding status. */<br>
+       uint32_t lwm:16;<br>
 };<br>
 <br>
 /* External RX queue descriptor. */<br>
-- <br>
1.8.3.1<br>
<br>
</div>
</span></font></div>
</body>
</html>