[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH PULL 12/15] hw/rdma: Bugfix - Support non-aligned bu
From: |
Marcel Apfelbaum |
Subject: |
[Qemu-devel] [PATCH PULL 12/15] hw/rdma: Bugfix - Support non-aligned buffers |
Date: |
Sun, 19 Aug 2018 23:22:57 +0300 |
From: Yuval Shaia <address@hidden>
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 <address@hidden>
Reviewed-by: Marcel Apfelbaum <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Marcel Apfelbaum <address@hidden>
---
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
- [Qemu-devel] [PATCH PULL 02/15] hw/pvrdma: Bugfix - provide the correct attr_mask to query_qp, (continued)
- [Qemu-devel] [PATCH PULL 02/15] hw/pvrdma: Bugfix - provide the correct attr_mask to query_qp, Marcel Apfelbaum, 2018/08/20
- [Qemu-devel] [PATCH PULL 01/15] hw/rdma: Make distinction between device init and start modes, Marcel Apfelbaum, 2018/08/20
- [Qemu-devel] [PATCH PULL 03/15] hw/rdma: Modify debug macros, Marcel Apfelbaum, 2018/08/20
- [Qemu-devel] [PATCH PULL 04/15] hw/pvrdma: Clean CQE before use, Marcel Apfelbaum, 2018/08/20
- [Qemu-devel] [PATCH PULL 05/15] hw/pvrdma: Make default pkey 0xFFFF, Marcel Apfelbaum, 2018/08/20
- [Qemu-devel] [PATCH PULL 06/15] hw/rdma: Delete useless structure RdmaRmUserMR, Marcel Apfelbaum, 2018/08/20
- [Qemu-devel] [PATCH PULL 08/15] hw/rdma: Reorder resource cleanup, Marcel Apfelbaum, 2018/08/20
- [Qemu-devel] [PATCH PULL 09/15] hw/pvrdma: Cosmetic change - indent right, Marcel Apfelbaum, 2018/08/20
- [Qemu-devel] [PATCH PULL 07/15] hw/rdma: Do not allocate memory for non-dma MR, Marcel Apfelbaum, 2018/08/20
- [Qemu-devel] [PATCH PULL 14/15] hw/pvrdma: remove not needed include, Marcel Apfelbaum, 2018/08/20
- [Qemu-devel] [PATCH PULL 12/15] hw/rdma: Bugfix - Support non-aligned buffers,
Marcel Apfelbaum <=
- [Qemu-devel] [PATCH PULL 13/15] hw/rdma: Add reference to pci_dev in backend_dev, Marcel Apfelbaum, 2018/08/20
- [Qemu-devel] [PATCH PULL 10/15] hw/rdma: Cosmetic change - move to generic function, Marcel Apfelbaum, 2018/08/20
- [Qemu-devel] [PATCH PULL 11/15] hw/rdma: Print backend QP number in hex format, Marcel Apfelbaum, 2018/08/20
- [Qemu-devel] [PATCH PULL 15/15] config: split PVRDMA from RDMA, Marcel Apfelbaum, 2018/08/20
- Re: [Qemu-devel] [PATCH PULL 00/15] RDMA queue, Peter Maydell, 2018/08/20