diff mbox series

[v5] eal: fix create user mem map repeatedly when it exists

Message ID 1618047477-22368-1-git-send-email-wangyunjian@huawei.com (mailing list archive)
State Accepted
Delegated to: David Marchand
Headers show
Series [v5] eal: fix create user mem map repeatedly when it exists | expand

Checks

Context Check Description
ci/intel-Testing success Testing PASS
ci/iol-testing success Testing PASS
ci/iol-abi-testing success Testing PASS
ci/github-robot success github build: passed
ci/travis-robot success travis build: passed
ci/Intel-compilation success Compilation OK
ci/checkpatch success coding style OK

Commit Message

wangyunjian April 10, 2021, 9:37 a.m. UTC
From: Yunjian Wang <wangyunjian@huawei.com>

Currently, new user mem maps are checked if they are adjacent to
an existing mem map and if so, the mem map entries are merged.

It doesn't check for duplicate mem maps, so if the API is called
with the same mem map multiple times, they will occupy multiple
mem map entries. This will reduce the amount of entries available
for unique mem maps.

So check for duplicate mem maps and merge them into one mem map
entry if any found.

Fixes: 0cbce3a167f1 ("vfio: skip DMA map failure if already mapped")
Cc: stable@dpdk.org

Suggested-by: Kevin Traynor <ktraynor@redhat.com>
Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
v5:
   Update commit log suggested by Kevin Traynor
---
 lib/librte_eal/linux/eal_vfio.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Thomas Monjalon April 19, 2021, 11:47 a.m. UTC | #1
10/04/2021 11:37, wangyunjian:
> From: Yunjian Wang <wangyunjian@huawei.com>
> 
> Currently, new user mem maps are checked if they are adjacent to
> an existing mem map and if so, the mem map entries are merged.
> 
> It doesn't check for duplicate mem maps, so if the API is called

As Kevin suggested, it should be in the past tense: "didn't".

> with the same mem map multiple times, they will occupy multiple
> mem map entries. This will reduce the amount of entries available
> for unique mem maps.
> 
> So check for duplicate mem maps and merge them into one mem map
> entry if any found.
> 
> Fixes: 0cbce3a167f1 ("vfio: skip DMA map failure if already mapped")
> Cc: stable@dpdk.org
> 
> Suggested-by: Kevin Traynor <ktraynor@redhat.com>
> Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
> Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>

Applied, thanks.
diff mbox series

Patch

diff --git a/lib/librte_eal/linux/eal_vfio.c b/lib/librte_eal/linux/eal_vfio.c
index fe25719991..25add2fa5d 100644
--- a/lib/librte_eal/linux/eal_vfio.c
+++ b/lib/librte_eal/linux/eal_vfio.c
@@ -171,6 +171,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)
@@ -178,6 +182,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;