> -----Original Message----- > From: Yongseok Koh > Sent: Friday, May 25, 2018 2:30 AM > To: Xueming(Steven) Li <xuemi...@mellanox.com> > Cc: Shahaf Shuler <shah...@mellanox.com>; dev@dpdk.org; Adrien Mazarguil > <adrien.mazarg...@6wind.com> > Subject: Re: [PATCH] net/mlx5: fix port dead lock when port shutdown > > > > On May 24, 2018, at 8:20 AM, Xueming Li <xuemi...@mellanox.com> wrote: > > > > This patch add check to avoid init device MR data twcie which caused > > priv data linked to itself in list. > > A typo. > > > Fixes: 974f1e7ef146 ("net/mlx5: add new memory region support") > > Cc: ys...@mellanox.com > > > > Signed-off-by: Xueming Li <xuemi...@mellanox.com> > > --- > > drivers/net/mlx5/mlx5_ethdev.c | 2 ++ > > drivers/net/mlx5/mlx5_mr.c | 1 + > > 2 files changed, 3 insertions(+) > > > > diff --git a/drivers/net/mlx5/mlx5_ethdev.c > > b/drivers/net/mlx5/mlx5_ethdev.c index c52ec6fb7..7ffd17ff3 100644 > > --- a/drivers/net/mlx5/mlx5_ethdev.c > > +++ b/drivers/net/mlx5/mlx5_ethdev.c > > @@ -398,6 +398,8 @@ mlx5_dev_configure(struct rte_eth_dev *dev) > > * deadlock. If it overflows, lookup should be done by searching MR list > > * linearly, which is slow. > > */ > > + if (priv->mr.cache.table) > > + return 0; > > Thanks, nice catch! > > Adrien submitted a fix [1] for the similar issue. Adding device to the memory > event callback list is > moved to mlx5_pci_probe() as it should be done once. So, how about moving the > rest > (mlx5_mr_btree_init()) to mlx5_pci_probe() as well? I mean, instead of adding > this check, you can move > the btree_init() above the line where Adrien moved > LIST_INSERT_HEAD() to. You'll need to rebase on Adrien's patch and add a > comment to Shahaf there's > dependency. >
Adrien's patch seems resolved the dead lock issue as well :) Moving mlx5_mr_btree_init() not related to it, I'll start a new patch. > > [1] > net/mlx5: fix crash when configure is not called > http://dpdk.org/dev/patchwork/patch/40404/ > > > Yongseok > > > if (mlx5_mr_btree_init(&priv->mr.cache, MLX5_MR_BTREE_CACHE_N * 2, > > dev->device->numa_node)) { > > /* rte_errno is already set. */ > > diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c > > index abb1f5179..08105a443 100644 > > --- a/drivers/net/mlx5/mlx5_mr.c > > +++ b/drivers/net/mlx5/mlx5_mr.c > > @@ -191,6 +191,7 @@ mlx5_mr_btree_init(struct mlx5_mr_btree *bt, int n, int > > socket) > > rte_errno = EINVAL; > > return -rte_errno; > > } > > + assert(!bt->table && !bt->size); > > memset(bt, 0, sizeof(*bt)); > > bt->table = rte_calloc_socket("B-tree table", > > n, sizeof(struct mlx5_mr_cache), > > -- > > 2.13.3 > >