> -----Original Message----- > From: Matan Azrad <ma...@mellanox.com> > Sent: Tuesday, February 25, 2020 10:44 > To: dev@dpdk.org > Cc: Slava Ovsiienko <viachesl...@mellanox.com>; Thomas Monjalon > <tho...@monjalon.net>; Maxime Coquelin <maxime.coque...@redhat.com> > Subject: [PATCH] vdpa/mlx5: fix event setup > > The completion event mechanism should work only if at least one of the > virtqs has valid callfd to be notified on. > > When all the virtqs works with poll mode, the event mechanism should not > be configured. > > The driver didn't take it into account and crashed in the above case. > > Do not configure event interrupt when all the virtqs are in poll mode. > > Fixes: 8395927cdfaf ("vdpa/mlx5: prepare HW queues") > > Signed-off-by: Matan Azrad <ma...@mellanox.com> Acked-by: Viacheslav Ovsiienko <viachesl...@mellanox.com>
> --- > drivers/vdpa/mlx5/mlx5_vdpa_event.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/vdpa/mlx5/mlx5_vdpa_event.c > b/drivers/vdpa/mlx5/mlx5_vdpa_event.c > index 16276f5..dd60150 100644 > --- a/drivers/vdpa/mlx5/mlx5_vdpa_event.c > +++ b/drivers/vdpa/mlx5/mlx5_vdpa_event.c > @@ -237,8 +237,14 @@ > int > mlx5_vdpa_cqe_event_setup(struct mlx5_vdpa_priv *priv) { > - int flags = fcntl(priv->eventc->fd, F_GETFL); > - int ret = fcntl(priv->eventc->fd, F_SETFL, flags | O_NONBLOCK); > + int flags; > + int ret; > + > + if (!priv->eventc) > + /* All virtqs are in poll mode. */ > + return 0; > + 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."); > rte_errno = errno; > -- > 1.8.3.1