]> git.droids-corp.org - dpdk.git/commitdiff
net/mlx5: support descriptor LWM for Rx queue
authorSpike Du <spiked@nvidia.com>
Thu, 16 Jun 2022 08:41:49 +0000 (11:41 +0300)
committerRaslan Darawsheh <rasland@nvidia.com>
Thu, 23 Jun 2022 15:23:29 +0000 (17:23 +0200)
Add LWM (Limit WaterMark) field to Rxq object which indicates the percentage
of Rx queue size used by HW to raise descriptor event to the user.
Allow LWM setting in modify_rq command.
Allow the LWM configuration dynamically by adding RDY2RDY state change.

Signed-off-by: Spike Du <spiked@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
drivers/net/mlx5/mlx5.h
drivers/net/mlx5/mlx5_devx.c
drivers/net/mlx5/mlx5_devx.h
drivers/net/mlx5/mlx5_rx.h

index ef755ee8cf7c876235f01a53290069189592917e..305edffe71c69638da565ffb3c397e83b4646a20 100644 (file)
@@ -1395,6 +1395,7 @@ enum mlx5_rxq_modify_type {
        MLX5_RXQ_MOD_RST2RDY, /* modify state from reset to ready. */
        MLX5_RXQ_MOD_RDY2ERR, /* modify state from ready to error. */
        MLX5_RXQ_MOD_RDY2RST, /* modify state from ready to reset. */
+       MLX5_RXQ_MOD_RDY2RDY, /* modify state from ready to ready. */
 };
 
 enum mlx5_txq_modify_type {
index 4b48f9433aa8f10daca793caf50adcfc8f5f91c2..c918a50ae9d13352f1fd0812203c2e6d8876c1a8 100644 (file)
@@ -62,7 +62,7 @@ mlx5_rxq_obj_modify_rq_vlan_strip(struct mlx5_rxq_priv *rxq, int on)
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
-static int
+int
 mlx5_devx_modify_rq(struct mlx5_rxq_priv *rxq, uint8_t type)
 {
        struct mlx5_devx_modify_rq_attr rq_attr;
@@ -76,6 +76,11 @@ mlx5_devx_modify_rq(struct mlx5_rxq_priv *rxq, uint8_t type)
        case MLX5_RXQ_MOD_RST2RDY:
                rq_attr.rq_state = MLX5_RQC_STATE_RST;
                rq_attr.state = MLX5_RQC_STATE_RDY;
+               if (rxq->lwm) {
+                       rq_attr.modify_bitmask |=
+                               MLX5_MODIFY_RQ_IN_MODIFY_BITMASK_WQ_LWM;
+                       rq_attr.lwm = rxq->lwm;
+               }
                break;
        case MLX5_RXQ_MOD_RDY2ERR:
                rq_attr.rq_state = MLX5_RQC_STATE_RDY;
@@ -85,6 +90,12 @@ mlx5_devx_modify_rq(struct mlx5_rxq_priv *rxq, uint8_t type)
                rq_attr.rq_state = MLX5_RQC_STATE_RDY;
                rq_attr.state = MLX5_RQC_STATE_RST;
                break;
+       case MLX5_RXQ_MOD_RDY2RDY:
+               rq_attr.rq_state = MLX5_RQC_STATE_RDY;
+               rq_attr.state = MLX5_RQC_STATE_RDY;
+               rq_attr.modify_bitmask |= MLX5_MODIFY_RQ_IN_MODIFY_BITMASK_WQ_LWM;
+               rq_attr.lwm = rxq->lwm;
+               break;
        default:
                break;
        }
index a95207a6b9a60fa5b34168ddcfc58de9f0cd364c..ebd1da455ab2672614083dd1c6c378bdbdd3b3a8 100644 (file)
@@ -11,6 +11,7 @@ int mlx5_txq_devx_obj_new(struct rte_eth_dev *dev, uint16_t idx);
 int mlx5_txq_devx_modify(struct mlx5_txq_obj *obj,
                         enum mlx5_txq_modify_type type, uint8_t dev_port);
 void mlx5_txq_devx_obj_release(struct mlx5_txq_obj *txq_obj);
+int mlx5_devx_modify_rq(struct mlx5_rxq_priv *rxq, uint8_t type);
 
 extern struct mlx5_obj_ops devx_obj_ops;
 
index e715ed6b62203c844bea5bfb163a4a42a8d09691..25a5f2c1fa393c5de886788654e057adb6da589e 100644 (file)
@@ -175,6 +175,7 @@ struct mlx5_rxq_priv {
        struct mlx5_devx_rq devx_rq;
        struct rte_eth_hairpin_conf hairpin_conf; /* Hairpin configuration. */
        uint32_t hairpin_status; /* Hairpin binding status. */
+       uint32_t lwm:16;
 };
 
 /* External RX queue descriptor. */