[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 12/13] hw/rdma: Bugfix - Support non-aligned buff
From: |
Yuval Shaia |
Subject: |
[Qemu-devel] [PATCH v2 12/13] hw/rdma: Bugfix - Support non-aligned buffers |
Date: |
Sun, 5 Aug 2018 18:35:17 +0300 |
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>
---
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 v2 01/13] hw/rdma: Make distinction between device init and start modes, (continued)
- [Qemu-devel] [PATCH v2 01/13] hw/rdma: Make distinction between device init and start modes, Yuval Shaia, 2018/08/05
- [Qemu-devel] [PATCH v2 05/13] hw/pvrdma: Make default pkey 0xFFFF, Yuval Shaia, 2018/08/05
- [Qemu-devel] [PATCH v2 07/13] hw/rdma: Do not allocate memory for non-dma MR, Yuval Shaia, 2018/08/05
- [Qemu-devel] [PATCH v2 03/13] hw/rdma: Modify debug macros, Yuval Shaia, 2018/08/05
- [Qemu-devel] [PATCH v2 06/13] hw/rdma: Delete useless structure RdmaRmUserMR, Yuval Shaia, 2018/08/05
- [Qemu-devel] [PATCH v2 09/13] hw/pvrdma: Cosmetic change - indent right, Yuval Shaia, 2018/08/05
- [Qemu-devel] [PATCH v2 13/13] hw/rdma: Add reference to pci_dev in backend_dev, Yuval Shaia, 2018/08/05
- [Qemu-devel] [PATCH v2 12/13] hw/rdma: Bugfix - Support non-aligned buffers,
Yuval Shaia <=
- [Qemu-devel] [PATCH v2 10/13] hw/rdma: Cosmetic change - move to generic function, Yuval Shaia, 2018/08/05
- [Qemu-devel] [PATCH v2 11/13] hw/rdma: Print backend QP number in hex format, Yuval Shaia, 2018/08/05
- [Qemu-devel] [PATCH v2 08/13] hw/rdma: Reorder resource cleanup, Yuval Shaia, 2018/08/05