diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c index 945faaacd..7645e4097 100644 --- a/lib/vhost/vhost.c +++ b/lib/vhost/vhost.c @@ -210,7 +210,13 @@ spdk_vhost_dev_mem_register(struct spdk_vhost_dev *vdev) len = end - start; SPDK_NOTICELOG("Registering VM memory for vtophys translation - 0x%jx len:0x%jx\n", 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)) { abort(); } @@ -230,11 +236,17 @@ spdk_vhost_dev_mem_unregister(struct spdk_vhost_dev *vdev) end = CEIL_2MB(region->mmap_addr + region->mmap_size); 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)) { abort(); } - spdk_mem_unregister((void *)start, len); + if (spdk_mem_unregister((void *)start, len) != 0) { + assert(false); + } } } diff --git a/test/unit/lib/vhost/vhost.c/vhost_ut.c b/test/unit/lib/vhost/vhost.c/vhost_ut.c index 8b4e19030..0ed3d2c1d 100644 --- a/test/unit/lib/vhost/vhost.c/vhost_ut.c +++ b/test/unit/lib/vhost/vhost.c/vhost_ut.c @@ -44,6 +44,7 @@ DEFINE_STUB(spdk_event_allocate, struct spdk_event *, (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_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_app_get_core_mask, uint64_t, (void), 0); DEFINE_STUB_V(spdk_app_stop, (int rc));