From: Viacheslav Ovsiienko Date: Thu, 29 Jul 2021 12:26:43 +0000 (+0300) Subject: net/mlx5: add Tx scheduling check on queue creation X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=commitdiff_plain;h=f17e4b4ffef9ecf2547ad8ee628e94db8f561b2f net/mlx5: add Tx scheduling check on queue creation The send scheduling on timestamp offload requires the Send Queue (SQ) shares its User Access Region (UAR) with the pacing Clock Queue. The SQ can be created by mlx5 PMD either with DevX or with Verbs. If the SQ is being created with DevX, the dedicated UAR can be specified and all the SQs share the single UAR. Once SQ is being created with Verbs the SQ's UAR is allocated by the rdma-core library internally on its own and there is no UAR sharing. This caused hardware errors on WAIT WQEs and overall send scheduling malfunction. If SQs are going to be created with Verbs and the send scheduling offload is explicitly requested via tx_pp devarg the device probing is rejected as device configuration can't satisfy the requirements. Fixes: 3ec73abeed52 ("net/mlx5/linux: fix Tx queue operations decision") Fixes: 8f848f32fc24 ("net/mlx5: introduce send scheduling devargs") Cc: stable@dpdk.org Signed-off-by: Viacheslav Ovsiienko --- diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index 14a3b912cc..8f98cf1716 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -1778,6 +1778,21 @@ err_secondary: } else { priv->obj_ops = ibv_obj_ops; } + if (config->tx_pp && + (priv->config.dv_esw_en || + priv->obj_ops.txq_obj_new != mlx5_os_txq_obj_new)) { + /* + * HAVE_MLX5DV_DEVX_UAR_OFFSET is required to support + * packet pacing and already checked above. + * Hence, we should only make sure the SQs will be created + * with DevX, not with Verbs. + * Verbs allocates the SQ UAR on its own and it can't be shared + * with Clock Queue UAR as required for Tx scheduling. + */ + DRV_LOG(ERR, "Verbs SQs, UAR can't be shared as required for packet pacing"); + err = ENODEV; + goto error; + } priv->drop_queue.hrxq = mlx5_drop_action_create(eth_dev); if (!priv->drop_queue.hrxq) goto error;