Friendly ping.

> -----Original Message-----
> From: wangyunjian
> Sent: Monday, December 7, 2020 7:09 PM
> To: dev@dpdk.org
> Cc: david.march...@redhat.com; tho...@monjalon.net;
> anatoly.bura...@intel.com; Lilijun (Jerry) <jerry.lili...@huawei.com>; 
> xudingke
> <xudin...@huawei.com>; wangyunjian <wangyunj...@huawei.com>;
> sta...@dpdk.org
> Subject: [dpdk-dev] [PATCH v4] eal: fix create user mem map repeatedly when it
> exists
> 
> From: Yunjian Wang <wangyunj...@huawei.com>
> 
> Currently, user mem maps will check if the newly mapped area is adjacent to
> any existing mapping, but will not check if the mapping is identical because 
> it
> assumes that the API will never get called with the same mapping twice. This
> will result in duplicate entries in the user mem maps list.
> 
> Fix it by also checking for duplicate mappings, and skipping them if they are
> found.
> 
> Fixes: 0cbce3a167f1 ("vfio: skip DMA map failure if already mapped")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Yunjian Wang <wangyunj...@huawei.com>
> Acked-by: Anatoly Burakov <anatoly.bura...@intel.com>
> ---
> v4:
>   Update commit log suggested by Anatoly Burakov
> ---
>  lib/librte_eal/linux/eal_vfio.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/lib/librte_eal/linux/eal_vfio.c 
> b/lib/librte_eal/linux/eal_vfio.c index
> 050082444e..0967215783 100644
> --- a/lib/librte_eal/linux/eal_vfio.c
> +++ b/lib/librte_eal/linux/eal_vfio.c
> @@ -168,6 +168,10 @@ adjust_map(struct user_mem_map *src, struct
> user_mem_map *end,  static int  merge_map(struct user_mem_map *left,
> struct user_mem_map *right)  {
> +     /* merge the same maps into one */
> +     if (memcmp(left, right, sizeof(struct user_mem_map)) == 0)
> +             goto out;
> +
>       if (left->addr + left->len != right->addr)
>               return 0;
>       if (left->iova + left->len != right->iova) @@ -175,6 +179,7 @@
> merge_map(struct user_mem_map *left, struct user_mem_map *right)
> 
>       left->len += right->len;
> 
> +out:
>       memset(right, 0, sizeof(*right));
> 
>       return 1;
> --
> 2.23.0

Reply via email to