> On Apr 12, 2019, at 8:45 AM, Viacheslav Ovsiienko <viachesl...@mellanox.com> > wrote: > > mlx5 driver has a global list of Memory Regions created by > device, and there is a ml5_mr_release() routine which makes > a memory cleanup at device closing. The head of device MR list > was fetched outside the rwlock protected section. Also some > noticed typos are fixed. > > Fixes: 974f1e7ef146 ("net/mlx5: add new memory region support") > Cc: sta...@dpdk.org > > Signed-off-by: Viacheslav Ovsiienko <viachesl...@mellanox.com> > ---
Nice catch, Slava Can you please submit the same fix for mlx4? Acked-by: Yongseok Koh <ys...@mellanox.com> Thanks > drivers/net/mlx5/mlx5_mr.c | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) > > diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c > index 44b6591..a3732d4 100644 > --- a/drivers/net/mlx5/mlx5_mr.c > +++ b/drivers/net/mlx5/mlx5_mr.c > @@ -466,7 +466,7 @@ struct mr_update_mp_data { > } > > /** > - * Releass resources of detached MR having no online entry. > + * Release resources of detached MR having no online entry. > * > * @param dev > * Pointer to Ethernet device. > @@ -516,7 +516,7 @@ struct mr_update_mp_data { > } > > /** > - * Create a new global Memroy Region (MR) for a missing virtual address. > + * Create a new global Memory Region (MR) for a missing virtual address. > * This API should be called on a secondary process, then a request is sent to > * the primary process in order to create a MR for the address. As the global > MR > * list is on the shared memory, following LKey lookup should succeed unless > the > @@ -562,7 +562,7 @@ struct mr_update_mp_data { > } > > /** > - * Create a new global Memroy Region (MR) for a missing virtual address. > + * Create a new global Memory Region (MR) for a missing virtual address. > * Register entire virtually contiguous memory chunk around the address. > * This must be called from the primary process. > * > @@ -673,7 +673,7 @@ struct mr_update_mp_data { > bmp_mem = RTE_PTR_ALIGN_CEIL(mr + 1, RTE_CACHE_LINE_SIZE); > mr->ms_bmp = rte_bitmap_init(ms_n, bmp_mem, bmp_size); > if (mr->ms_bmp == NULL) { > - DEBUG("port %u unable to initialize bitamp for a new MR of" > + DEBUG("port %u unable to initialize bitmap for a new MR of" > " address (%p).", > dev->data->port_id, (void *)addr); > rte_errno = EINVAL; > @@ -811,7 +811,7 @@ struct mr_update_mp_data { > } > > /** > - * Create a new global Memroy Region (MR) for a missing virtual address. > + * Create a new global Memory Region (MR) for a missing virtual address. > * This can be called from primary and secondary process. > * > * @param dev > @@ -1600,7 +1600,7 @@ struct mr_update_mp_data { > mlx5_mr_release(struct rte_eth_dev *dev) > { > struct mlx5_priv *priv = dev->data->dev_private; > - struct mlx5_mr *mr_next = LIST_FIRST(&priv->mr.mr_list); > + struct mlx5_mr *mr_next; > > /* Remove from memory callback device list. */ > rte_rwlock_write_lock(&mlx5_shared_data->mem_event_rwlock); > @@ -1610,6 +1610,7 @@ struct mr_update_mp_data { > mlx5_mr_dump_dev(dev); > rte_rwlock_write_lock(&priv->mr.rwlock); > /* Detach from MR list and move to free list. */ > + mr_next = LIST_FIRST(&priv->mr.mr_list); > while (mr_next != NULL) { > struct mlx5_mr *mr = mr_next; > > -- > 1.8.3.1 >