vhost: don't abort on mem region registration failure
A single warning message is printed instead. This is required for VMs which have memory mapped virtual devices. (e.g NVDIMM in Clear Containers). This memory won't ever be used by guest kernel for IO processing. Change-Id: Ie24501acbdb3ba0d67bd29b146a09b222451427d Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com> Reviewed-on: https://review.gerrithub.io/373224 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
This commit is contained in:
parent
b597955f29
commit
8123aef784
@ -210,7 +210,13 @@ spdk_vhost_dev_mem_register(struct spdk_vhost_dev *vdev)
|
|||||||
len = end - start;
|
len = end - start;
|
||||||
SPDK_NOTICELOG("Registering VM memory for vtophys translation - 0x%jx len:0x%jx\n",
|
SPDK_NOTICELOG("Registering VM memory for vtophys translation - 0x%jx len:0x%jx\n",
|
||||||
start, len);
|
start, len);
|
||||||
spdk_mem_register((void *)start, len);
|
|
||||||
|
if (spdk_mem_register((void *)start, len) != 0) {
|
||||||
|
SPDK_WARNLOG("Failed to register memory region %"PRIu32". Future vtophys translation might fail.\n",
|
||||||
|
i);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (spdk_iommu_mem_register(region->host_user_addr, region->size)) {
|
if (spdk_iommu_mem_register(region->host_user_addr, region->size)) {
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
@ -230,11 +236,17 @@ spdk_vhost_dev_mem_unregister(struct spdk_vhost_dev *vdev)
|
|||||||
end = CEIL_2MB(region->mmap_addr + region->mmap_size);
|
end = CEIL_2MB(region->mmap_addr + region->mmap_size);
|
||||||
len = end - start;
|
len = end - start;
|
||||||
|
|
||||||
|
if (spdk_vtophys((void *) start) == SPDK_VTOPHYS_ERROR) {
|
||||||
|
continue; /* region has not been registered */
|
||||||
|
}
|
||||||
|
|
||||||
if (spdk_iommu_mem_unregister(region->host_user_addr, region->size)) {
|
if (spdk_iommu_mem_unregister(region->host_user_addr, region->size)) {
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
spdk_mem_unregister((void *)start, len);
|
if (spdk_mem_unregister((void *)start, len) != 0) {
|
||||||
|
assert(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@ DEFINE_STUB(spdk_event_allocate, struct spdk_event *,
|
|||||||
(uint32_t lcore, spdk_event_fn fn, void *arg1, void *arg2), NULL);
|
(uint32_t lcore, spdk_event_fn fn, void *arg1, void *arg2), NULL);
|
||||||
DEFINE_STUB(spdk_mem_register, int, (void *vaddr, size_t len), 0);
|
DEFINE_STUB(spdk_mem_register, int, (void *vaddr, size_t len), 0);
|
||||||
DEFINE_STUB(spdk_mem_unregister, int, (void *vaddr, size_t len), 0);
|
DEFINE_STUB(spdk_mem_unregister, int, (void *vaddr, size_t len), 0);
|
||||||
|
DEFINE_STUB(spdk_vtophys, uint64_t, (void *vaddr), 1);
|
||||||
DEFINE_STUB(spdk_iommu_mem_register, int, (uint64_t addr, uint64_t len), 0);
|
DEFINE_STUB(spdk_iommu_mem_register, int, (uint64_t addr, uint64_t len), 0);
|
||||||
DEFINE_STUB(spdk_app_get_core_mask, uint64_t, (void), 0);
|
DEFINE_STUB(spdk_app_get_core_mask, uint64_t, (void), 0);
|
||||||
DEFINE_STUB_V(spdk_app_stop, (int rc));
|
DEFINE_STUB_V(spdk_app_stop, (int rc));
|
||||||
|
Loading…
Reference in New Issue
Block a user