* [dpdk-dev] [PATCH v1] vhost: fix gpa to hpa conversion
@ 2020-10-26 10:10 Patrick Fu
2020-10-27 2:06 ` [dpdk-dev] [PATCH v1] vhost: fix guest/host physical address conversion Patrick Fu
0 siblings, 1 reply; 4+ messages in thread
From: Patrick Fu @ 2020-10-26 10:10 UTC (permalink / raw)
To: dev, maxime.coquelin, chenbo.xia; +Cc: patrick.fu
gpa_to_hpa() function almost always fails due to the wrong setup of
the b tree search key. Since there has been already a similar function
gpa_to_first_hap() available in the vhost, instead of fixing the
issue in its original logic, gpa_to_hpa() function is rewritten to be
a wrapper of the gpa_to_first_hpa() to avoid code redundancy.
Fixes: e246896178e6 ("vhost: get guest/host physical address mappings")
Fixes: faa9867c4da2 ("vhost: use binary search in address conversion")
Signed-off-by: Patrick Fu <patrick.fu@intel.com>
---
lib/librte_vhost/vhost.h | 43 ++++++++++------------------------------
1 file changed, 11 insertions(+), 32 deletions(-)
diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h
index 75d79f80a..361c9f79b 100644
--- a/lib/librte_vhost/vhost.h
+++ b/lib/librte_vhost/vhost.h
@@ -563,38 +563,6 @@ static __rte_always_inline int guest_page_addrcmp(const void *p1,
return 0;
}
-/* Convert guest physical address to host physical address */
-static __rte_always_inline rte_iova_t
-gpa_to_hpa(struct virtio_net *dev, uint64_t gpa, uint64_t size)
-{
- uint32_t i;
- struct guest_page *page;
- struct guest_page key;
-
- if (dev->nr_guest_pages >= VHOST_BINARY_SEARCH_THRESH) {
- key.guest_phys_addr = gpa;
- page = bsearch(&key, dev->guest_pages, dev->nr_guest_pages,
- sizeof(struct guest_page), guest_page_addrcmp);
- if (page) {
- if (gpa + size < page->guest_phys_addr + page->size)
- return gpa - page->guest_phys_addr +
- page->host_phys_addr;
- }
- } else {
- for (i = 0; i < dev->nr_guest_pages; i++) {
- page = &dev->guest_pages[i];
-
- if (gpa >= page->guest_phys_addr &&
- gpa + size < page->guest_phys_addr +
- page->size)
- return gpa - page->guest_phys_addr +
- page->host_phys_addr;
- }
- }
-
- return 0;
-}
-
static __rte_always_inline rte_iova_t
gpa_to_first_hpa(struct virtio_net *dev, uint64_t gpa,
uint64_t gpa_size, uint64_t *hpa_size)
@@ -645,6 +613,17 @@ gpa_to_first_hpa(struct virtio_net *dev, uint64_t gpa,
return 0;
}
+/* Convert guest physical address to host physical address */
+static __rte_always_inline rte_iova_t
+gpa_to_hpa(struct virtio_net *dev, uint64_t gpa, uint64_t size)
+{
+ rte_iova_t hpa;
+ uint64_t hpa_size;
+
+ hpa = gpa_to_first_hpa(dev, gpa, size, &hpa_size);
+ return hpa_size == size ? hpa : 0;
+}
+
static __rte_always_inline uint64_t
hva_to_gpa(struct virtio_net *dev, uint64_t vva, uint64_t len)
{
--
2.18.4
^ permalink raw reply [flat|nested] 4+ messages in thread
* [dpdk-dev] [PATCH v1] vhost: fix guest/host physical address conversion
2020-10-26 10:10 [dpdk-dev] [PATCH v1] vhost: fix gpa to hpa conversion Patrick Fu
@ 2020-10-27 2:06 ` Patrick Fu
2020-10-28 11:16 ` Maxime Coquelin
2020-10-29 8:28 ` Maxime Coquelin
0 siblings, 2 replies; 4+ messages in thread
From: Patrick Fu @ 2020-10-27 2:06 UTC (permalink / raw)
To: dev, maxime.coquelin, chenbo.xia; +Cc: patrick.fu
gpa_to_hpa() function almost always fails due to the wrong setup of
the binary tree search key. Since there has already been a similar
function gpa_to_first_hpa() available in the vhost, instead of fixing
the issue in its original logic, gpa_to_hpa() function is rewritten to
be a wrapper of the gpa_to_first_hpa() to avoid code redundancy.
Fixes: e246896178e6 ("vhost: get guest/host physical address mappings")
Fixes: faa9867c4da2 ("vhost: use binary search in address conversion")
Signed-off-by: Patrick Fu <patrick.fu@intel.com>
---
v2:
- minor rewordings on commit message & title
lib/librte_vhost/vhost.h | 43 ++++++++++------------------------------
1 file changed, 11 insertions(+), 32 deletions(-)
diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h
index 75d79f80a..361c9f79b 100644
--- a/lib/librte_vhost/vhost.h
+++ b/lib/librte_vhost/vhost.h
@@ -563,38 +563,6 @@ static __rte_always_inline int guest_page_addrcmp(const void *p1,
return 0;
}
-/* Convert guest physical address to host physical address */
-static __rte_always_inline rte_iova_t
-gpa_to_hpa(struct virtio_net *dev, uint64_t gpa, uint64_t size)
-{
- uint32_t i;
- struct guest_page *page;
- struct guest_page key;
-
- if (dev->nr_guest_pages >= VHOST_BINARY_SEARCH_THRESH) {
- key.guest_phys_addr = gpa;
- page = bsearch(&key, dev->guest_pages, dev->nr_guest_pages,
- sizeof(struct guest_page), guest_page_addrcmp);
- if (page) {
- if (gpa + size < page->guest_phys_addr + page->size)
- return gpa - page->guest_phys_addr +
- page->host_phys_addr;
- }
- } else {
- for (i = 0; i < dev->nr_guest_pages; i++) {
- page = &dev->guest_pages[i];
-
- if (gpa >= page->guest_phys_addr &&
- gpa + size < page->guest_phys_addr +
- page->size)
- return gpa - page->guest_phys_addr +
- page->host_phys_addr;
- }
- }
-
- return 0;
-}
-
static __rte_always_inline rte_iova_t
gpa_to_first_hpa(struct virtio_net *dev, uint64_t gpa,
uint64_t gpa_size, uint64_t *hpa_size)
@@ -645,6 +613,17 @@ gpa_to_first_hpa(struct virtio_net *dev, uint64_t gpa,
return 0;
}
+/* Convert guest physical address to host physical address */
+static __rte_always_inline rte_iova_t
+gpa_to_hpa(struct virtio_net *dev, uint64_t gpa, uint64_t size)
+{
+ rte_iova_t hpa;
+ uint64_t hpa_size;
+
+ hpa = gpa_to_first_hpa(dev, gpa, size, &hpa_size);
+ return hpa_size == size ? hpa : 0;
+}
+
static __rte_always_inline uint64_t
hva_to_gpa(struct virtio_net *dev, uint64_t vva, uint64_t len)
{
--
2.18.4
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [dpdk-dev] [PATCH v1] vhost: fix guest/host physical address conversion
2020-10-27 2:06 ` [dpdk-dev] [PATCH v1] vhost: fix guest/host physical address conversion Patrick Fu
@ 2020-10-28 11:16 ` Maxime Coquelin
2020-10-29 8:28 ` Maxime Coquelin
1 sibling, 0 replies; 4+ messages in thread
From: Maxime Coquelin @ 2020-10-28 11:16 UTC (permalink / raw)
To: Patrick Fu, dev, chenbo.xia
On 10/27/20 3:06 AM, Patrick Fu wrote:
> gpa_to_hpa() function almost always fails due to the wrong setup of
> the binary tree search key. Since there has already been a similar
> function gpa_to_first_hpa() available in the vhost, instead of fixing
> the issue in its original logic, gpa_to_hpa() function is rewritten to
> be a wrapper of the gpa_to_first_hpa() to avoid code redundancy.
>
> Fixes: e246896178e6 ("vhost: get guest/host physical address mappings")
> Fixes: faa9867c4da2 ("vhost: use binary search in address conversion")
>
> Signed-off-by: Patrick Fu <patrick.fu@intel.com>
> ---
> v2:
> - minor rewordings on commit message & title
>
> lib/librte_vhost/vhost.h | 43 ++++++++++------------------------------
> 1 file changed, 11 insertions(+), 32 deletions(-)
>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Thanks,
Maxime
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [dpdk-dev] [PATCH v1] vhost: fix guest/host physical address conversion
2020-10-27 2:06 ` [dpdk-dev] [PATCH v1] vhost: fix guest/host physical address conversion Patrick Fu
2020-10-28 11:16 ` Maxime Coquelin
@ 2020-10-29 8:28 ` Maxime Coquelin
1 sibling, 0 replies; 4+ messages in thread
From: Maxime Coquelin @ 2020-10-29 8:28 UTC (permalink / raw)
To: Patrick Fu, dev, chenbo.xia
On 10/27/20 3:06 AM, Patrick Fu wrote:
> gpa_to_hpa() function almost always fails due to the wrong setup of
> the binary tree search key. Since there has already been a similar
> function gpa_to_first_hpa() available in the vhost, instead of fixing
> the issue in its original logic, gpa_to_hpa() function is rewritten to
> be a wrapper of the gpa_to_first_hpa() to avoid code redundancy.
>
> Fixes: e246896178e6 ("vhost: get guest/host physical address mappings")
> Fixes: faa9867c4da2 ("vhost: use binary search in address conversion")
>
> Signed-off-by: Patrick Fu <patrick.fu@intel.com>
> ---
> v2:
> - minor rewordings on commit message & title
>
Applied to dpdk-next-virtio/main.
Thanks!
Maxime
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-10-29 8:28 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-26 10:10 [dpdk-dev] [PATCH v1] vhost: fix gpa to hpa conversion Patrick Fu
2020-10-27 2:06 ` [dpdk-dev] [PATCH v1] vhost: fix guest/host physical address conversion Patrick Fu
2020-10-28 11:16 ` Maxime Coquelin
2020-10-29 8:28 ` Maxime Coquelin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).