ut/vhost: always register a vdev before attempting to unregister it

Rather than being smart and hacking vdev struct
internals, let's properly initialize it with
spdk_vhost_dev_register(). This will avoid
failures on potential vhost changes in future.

Change-Id: I3f13b542e313a2f890963baa96679e9d74c23a9e
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/399443
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Dariusz Stojaczyk 2018-02-12 20:14:04 +01:00 committed by Jim Harris
parent 2c1912f64b
commit 85b0c2b36f

View File

@ -133,7 +133,6 @@ alloc_vdev(void)
vdev->mem->regions[1].guest_phys_addr = 0x400000; vdev->mem->regions[1].guest_phys_addr = 0x400000;
vdev->mem->regions[1].size = 0x400000; /* 4 MB */ vdev->mem->regions[1].size = 0x400000; /* 4 MB */
vdev->mem->regions[1].host_user_addr = 0x2000000; vdev->mem->regions[1].host_user_addr = 0x2000000;
vdev->vid = 0x10;
return vdev; return vdev;
} }
@ -141,7 +140,6 @@ alloc_vdev(void)
static void static void
free_vdev(struct spdk_vhost_dev *vdev) free_vdev(struct spdk_vhost_dev *vdev)
{ {
free(vdev->name);
free(vdev->mem); free(vdev->mem);
free(vdev); free(vdev);
} }
@ -228,7 +226,7 @@ desc_to_iov_test(void)
static void static void
create_controller_test(void) create_controller_test(void)
{ {
struct spdk_vhost_dev *vdev; struct spdk_vhost_dev *vdev, *vdev2;
int ret; int ret;
unsigned ctrlr_num; unsigned ctrlr_num;
char long_name[PATH_MAX]; char long_name[PATH_MAX];
@ -254,9 +252,10 @@ create_controller_test(void)
dev_dirname[0] = 0; dev_dirname[0] = 0;
/* Create device when device name is already taken */ /* Create device when device name is already taken */
vdev->name = strdup("vdev_name_0");
g_spdk_vhost_devices[0] = vdev;
ret = spdk_vhost_dev_register(vdev, "vdev_name_0", "0x1", &backend); ret = spdk_vhost_dev_register(vdev, "vdev_name_0", "0x1", &backend);
CU_ASSERT(ret == 0);
vdev2 = alloc_vdev();
ret = spdk_vhost_dev_register(vdev2, "vdev_name_0", "0x1", &backend);
CU_ASSERT(ret != 0); CU_ASSERT(ret != 0);
/* Create device when max number of devices is reached */ /* Create device when max number of devices is reached */
@ -264,10 +263,13 @@ create_controller_test(void)
g_spdk_vhost_devices[ctrlr_num] = vdev; g_spdk_vhost_devices[ctrlr_num] = vdev;
} }
ret = spdk_vhost_dev_register(vdev, "vdev_name_1", "0x1", &backend); ret = spdk_vhost_dev_register(vdev2, "vdev_name_1", "0x1", &backend);
CU_ASSERT(ret != 0); CU_ASSERT(ret != 0);
free_vdev(vdev2);
spdk_vhost_dev_unregister(vdev);
free_vdev(vdev); free_vdev(vdev);
for (ctrlr_num = 0; ctrlr_num < MAX_VHOST_DEVICES; ctrlr_num++) { for (ctrlr_num = 0; ctrlr_num < MAX_VHOST_DEVICES; ctrlr_num++) {
g_spdk_vhost_devices[ctrlr_num] = NULL; g_spdk_vhost_devices[ctrlr_num] = NULL;
} }
@ -276,33 +278,46 @@ create_controller_test(void)
static void static void
dev_find_by_vid_test(void) dev_find_by_vid_test(void)
{ {
struct spdk_vhost_dev *vdev; struct spdk_vhost_dev *vdev, *tmp;
struct spdk_vhost_dev_backend backend;
int rc;
g_spdk_vhost_devices[0] = alloc_vdev(); vdev = alloc_vdev();
vdev = spdk_vhost_dev_find_by_vid(0x10); rc = spdk_vhost_dev_register(vdev, "vdev_name_0", "0x1", &backend);
CU_ASSERT(vdev != NULL); CU_ASSERT(rc == 0);
tmp = spdk_vhost_dev_find_by_vid(vdev->vid);
CU_ASSERT(tmp == vdev);
/* Search for a device with incorrect vid */ /* Search for a device with incorrect vid */
vdev = spdk_vhost_dev_find_by_vid(0xFF); tmp = spdk_vhost_dev_find_by_vid(vdev->vid + 0xFF);
CU_ASSERT(vdev == NULL); CU_ASSERT(tmp == NULL);
free_vdev(g_spdk_vhost_devices[0]); spdk_vhost_dev_unregister(vdev);
g_spdk_vhost_devices[0] = NULL; free_vdev(vdev);
} }
static void static void
remove_controller_test(void) remove_controller_test(void)
{ {
struct spdk_vhost_dev *vdev; struct spdk_vhost_dev *vdev;
struct spdk_vhost_dev_backend backend;
int ret; int ret;
vdev = alloc_vdev(); vdev = alloc_vdev();
vdev->lcore = 0; ret = spdk_vhost_dev_register(vdev, "vdev_name_0", "0x1", &backend);
vdev->name = strdup("vdev_name_0"); CU_ASSERT(ret == 0);
/* Remove device when controller is in use */ /* Remove device when controller is in use */
vdev->vid = 0;
vdev->lcore = 0;
ret = spdk_vhost_dev_unregister(vdev); ret = spdk_vhost_dev_unregister(vdev);
CU_ASSERT(ret != 0); CU_ASSERT(ret != 0);
vdev->vid = -1;
vdev->lcore = -1;
ret = spdk_vhost_dev_unregister(vdev);
CU_ASSERT(ret == 0);
free_vdev(vdev); free_vdev(vdev);
} }