qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Yuval Shaia <yuval.shaia@oracle.com>
To: qemu-devel@nongnu.org, yuval.shaia@oracle.com,
	marcel.apfelbaum@gmail.com
Subject: [Qemu-devel] [PATCH v2 12/13] hw/rdma: Bugfix - Support non-aligned buffers
Date: Sun,  5 Aug 2018 18:35:17 +0300	[thread overview]
Message-ID: <20180805153518.2983-13-yuval.shaia@oracle.com> (raw)
In-Reply-To: <20180805153518.2983-1-yuval.shaia@oracle.com>

RDMA application can provide non-aligned buffers to be registered. In
such case the DMA address passed by driver is pointing to the beginning
of the physical address of the mapped page so we can't distinguish
between two addresses from the same page.

Fix it by keeping the offset of the virtual address in mr->virt.

Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com>
Reviewed-by: Marcel Apfelbaum<marcel.apfelbaum@gmail.com>
---
 hw/rdma/rdma_rm.c        | 2 ++
 hw/rdma/vmw/pvrdma_cmd.c | 1 +
 2 files changed, 3 insertions(+)

diff --git a/hw/rdma/rdma_rm.c b/hw/rdma/rdma_rm.c
index 859c900003..8d59a42cd1 100644
--- a/hw/rdma/rdma_rm.c
+++ b/hw/rdma/rdma_rm.c
@@ -166,6 +166,7 @@ int rdma_rm_alloc_mr(RdmaDeviceResources *dev_res, uint32_t pd_handle,
         mr->virt = host_virt;
         mr->start = guest_start;
         mr->length = guest_length;
+        mr->virt += (mr->start & (TARGET_PAGE_SIZE - 1));
 
         ret = rdma_backend_create_mr(&mr->backend_mr, &pd->backend_pd, mr->virt,
                                      mr->length, access_flags);
@@ -203,6 +204,7 @@ void rdma_rm_dealloc_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle)
         rdma_backend_destroy_mr(&mr->backend_mr);
         pr_dbg("start=0x%" PRIx64 "\n", mr->start);
         if (mr->start) {
+            mr->virt -= (mr->start & (TARGET_PAGE_SIZE - 1));
             munmap(mr->virt, mr->length);
         }
         res_tbl_dealloc(&dev_res->mr_tbl, mr_handle);
diff --git a/hw/rdma/vmw/pvrdma_cmd.c b/hw/rdma/vmw/pvrdma_cmd.c
index 4f74b29936..b74b0b48d0 100644
--- a/hw/rdma/vmw/pvrdma_cmd.c
+++ b/hw/rdma/vmw/pvrdma_cmd.c
@@ -59,6 +59,7 @@ static void *pvrdma_map_to_pdir(PCIDevice *pdev, uint64_t pdir_dma,
     }
 
     host_virt = mremap(curr_page, 0, length, MREMAP_MAYMOVE);
+    pr_dbg("mremap %p -> %p\n", curr_page, host_virt);
     if (host_virt == MAP_FAILED) {
         host_virt = NULL;
         error_report("PVRDMA: Failed to remap memory for host_virt");
-- 
2.17.1

  parent reply	other threads:[~2018-08-05 15:36 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-05 15:35 [Qemu-devel] [PATCH v2 00/13] Misc fixes for pvrdma device Yuval Shaia
2018-08-05 15:35 ` [Qemu-devel] [PATCH v2 01/13] hw/rdma: Make distinction between device init and start modes Yuval Shaia
2018-08-05 15:35 ` [Qemu-devel] [PATCH v2 02/13] hw/pvrdma: Bugfix - provide the correct attr_mask to query_qp Yuval Shaia
2018-08-05 15:35 ` [Qemu-devel] [PATCH v2 03/13] hw/rdma: Modify debug macros Yuval Shaia
2018-08-05 15:35 ` [Qemu-devel] [PATCH v2 04/13] hw/pvrdma: Clean CQE before use Yuval Shaia
2018-08-05 15:35 ` [Qemu-devel] [PATCH v2 05/13] hw/pvrdma: Make default pkey 0xFFFF Yuval Shaia
2018-08-05 15:35 ` [Qemu-devel] [PATCH v2 06/13] hw/rdma: Delete useless structure RdmaRmUserMR Yuval Shaia
2018-08-06 11:42   ` Marcel Apfelbaum
2018-08-05 15:35 ` [Qemu-devel] [PATCH v2 07/13] hw/rdma: Do not allocate memory for non-dma MR Yuval Shaia
2018-08-06 11:42   ` Marcel Apfelbaum
2018-08-05 15:35 ` [Qemu-devel] [PATCH v2 08/13] hw/rdma: Reorder resource cleanup Yuval Shaia
2018-08-05 15:35 ` [Qemu-devel] [PATCH v2 09/13] hw/pvrdma: Cosmetic change - indent right Yuval Shaia
2018-08-05 15:35 ` [Qemu-devel] [PATCH v2 10/13] hw/rdma: Cosmetic change - move to generic function Yuval Shaia
2018-08-05 15:35 ` [Qemu-devel] [PATCH v2 11/13] hw/rdma: Print backend QP number in hex format Yuval Shaia
2018-08-05 15:35 ` Yuval Shaia [this message]
2018-08-05 15:35 ` [Qemu-devel] [PATCH v2 13/13] hw/rdma: Add reference to pci_dev in backend_dev Yuval Shaia
2018-08-06 11:43   ` Marcel Apfelbaum

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180805153518.2983-13-yuval.shaia@oracle.com \
    --to=yuval.shaia@oracle.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).