struct mlx5_txq_ctrl *txq_ctrl =
                container_of(txq_data, struct mlx5_txq_ctrl, txq);
        struct mlx5_txq_obj *txq_obj = txq_ctrl->obj;
-       struct ibv_qp_attr mod;
        unsigned int cqe_n;
        struct mlx5dv_qp qp;
        struct mlx5dv_cq cq_info;
                rte_errno = errno;
                goto error;
        }
-       mod = (struct ibv_qp_attr){
-               /* Move the QP to this state. */
-               .qp_state = IBV_QPS_INIT,
-               /* IB device port number. */
-               .port_num = (uint8_t)priv->dev_port,
-       };
-       ret = mlx5_glue->modify_qp(txq_obj->qp, &mod,
-                                  (IBV_QP_STATE | IBV_QP_PORT));
-       if (ret) {
-               DRV_LOG(ERR,
-                       "Port %u Tx queue %u QP state to IBV_QPS_INIT failed.",
-                       dev->data->port_id, idx);
-               rte_errno = errno;
-               goto error;
-       }
-       mod = (struct ibv_qp_attr){
-               .qp_state = IBV_QPS_RTR
-       };
-       ret = mlx5_glue->modify_qp(txq_obj->qp, &mod, IBV_QP_STATE);
+       ret = mlx5_ibv_modify_qp(txq_obj, MLX5_TXQ_MOD_RST2RDY,
+                                (uint8_t)priv->dev_port);
        if (ret) {
-               DRV_LOG(ERR,
-                       "Port %u Tx queue %u QP state to IBV_QPS_RTR failed.",
-                       dev->data->port_id, idx);
-               rte_errno = errno;
-               goto error;
-       }
-       mod.qp_state = IBV_QPS_RTS;
-       ret = mlx5_glue->modify_qp(txq_obj->qp, &mod, IBV_QP_STATE);
-       if (ret) {
-               DRV_LOG(ERR,
-                       "Port %u Tx queue %u QP state to IBV_QPS_RTS failed.",
+               DRV_LOG(ERR, "Port %u Tx queue %u QP state modifying failed.",
                        dev->data->port_id, idx);
                rte_errno = errno;
                goto error;
 
        return -rte_errno;
 #else
        struct mlx5_dev_ctx_shared *sh = priv->sh;
-       struct mlx5_devx_modify_sq_attr msq_attr = { 0 };
        struct mlx5_txq_obj *txq_obj = txq_ctrl->obj;
        void *reg_addr;
        uint32_t cqe_n;
        *txq_data->qp_db = 0;
        txq_data->qp_num_8s = txq_obj->sq_devx->id << 8;
        /* Change Send Queue state to Ready-to-Send. */
-       msq_attr.sq_state = MLX5_SQC_STATE_RST;
-       msq_attr.state = MLX5_SQC_STATE_RDY;
-       ret = mlx5_devx_cmd_modify_sq(txq_obj->sq_devx, &msq_attr);
+       ret = mlx5_devx_modify_sq(txq_obj, MLX5_TXQ_MOD_RST2RDY, 0);
        if (ret) {
                rte_errno = errno;
                DRV_LOG(ERR,
-                       "Port %u Tx queue %u SP state to SQC_STATE_RDY failed.",
+                       "Port %u Tx queue %u SQ state to SQC_STATE_RDY failed.",
                        dev->data->port_id, idx);
                goto error;
        }