Thread (6 messages) 6 messages, 3 authors, 2020-09-18

Re: [dpdk-dev] [v1] vdpa/mlx5: fix event channel setup

From: Xueming(Steven) Li <hidden>
Date: 2020-09-18 11:14:31

-----Original Message-----
From: Maxime Coquelin <redacted>
Sent: Friday, September 18, 2020 5:42 PM
To: Xueming(Steven) Li <redacted>; Matan Azrad
[off-list ref]; Slava Ovsiienko [off-list ref]
Cc: dev@dpdk.org; Asaf Penso <redacted>
Subject: Re: [dpdk-dev] [v1] vdpa/mlx5: fix event channel setup



On 8/25/20 11:17 AM, Xueming Li wrote:
quoted
During vdap device setup, if some error happens, event channel release
s/vdap/vDPA/
quoted
stuck at polling event channel.

Event channel fd is set to nonblocking in cqe setup, so if any error
non-blocking
quoted
happens before this function and after event channel created, the
pooling before releasing resources will stuck.

This patch moves event channel to non-blocking mode right after
creation.

Fixes: 8395927cdf ("vdpa/mlx5: prepare HW queues")
Cc: matan@nvidia.com

Signed-off-by: Xueming Li <redacted>
---
 drivers/vdpa/mlx5/mlx5_vdpa_event.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/drivers/vdpa/mlx5/mlx5_vdpa_event.c
b/drivers/vdpa/mlx5/mlx5_vdpa_event.c
index 5a2d4fb1ec..bda547ffe0 100644
--- a/drivers/vdpa/mlx5/mlx5_vdpa_event.c
+++ b/drivers/vdpa/mlx5/mlx5_vdpa_event.c
@@ -51,6 +51,8 @@ mlx5_vdpa_event_qp_global_release(struct
mlx5_vdpa_priv *priv)  static int
mlx5_vdpa_event_qp_global_prepare(struct mlx5_vdpa_priv *priv)  {
+	int flags, ret;
+
 	if (priv->eventc)
 		return 0;
 	if (mlx5_glue->devx_query_eqn(priv->ctx, 0, &priv->eqn)) { @@ -66,6
+68,12 @@ mlx5_vdpa_event_qp_global_prepare(struct mlx5_vdpa_priv
*priv)
quoted
 			rte_errno);
 		goto error;
 	}
+	flags = fcntl(priv->eventc->fd, F_GETFL);
+	ret = fcntl(priv->eventc->fd, F_SETFL, flags | O_NONBLOCK);
+	if (ret) {
+		DRV_LOG(ERR, "Failed to change event channel FD.");
+		goto error;
+	}
 	priv->uar = mlx5_glue->devx_alloc_uar(priv->ctx, 0);
 	if (!priv->uar) {
 		rte_errno = errno;
@@ -376,7 +384,6 @@ mlx5_vdpa_interrupt_handler(void *cb_arg)  int
mlx5_vdpa_cqe_event_setup(struct mlx5_vdpa_priv *priv)  {
-	int flags;
 	int ret;

 	if (!priv->eventc)
@@ -393,12 +400,6 @@ mlx5_vdpa_cqe_event_setup(struct
mlx5_vdpa_priv *priv)
quoted
 			return -1;
 		}
 	}
-	flags = fcntl(priv->eventc->fd, F_GETFL);
-	ret = fcntl(priv->eventc->fd, F_SETFL, flags | O_NONBLOCK);
-	if (ret) {
-		DRV_LOG(ERR, "Failed to change event channel FD.");
-		goto error;
-	}
 	priv->intr_handle.fd = priv->eventc->fd;
 	priv->intr_handle.type = RTE_INTR_HANDLE_EXT;
 	if (rte_intr_callback_register(&priv->intr_handle,
Looks good to me, I'll fix the typos while applying.
Appreciate!
Reviewed-by: Maxime Coquelin <redacted>

Thanks,
Maxime
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help