vhost: removed dpdk_vid_mapping
As a consequence MAX_VHOST_DEVICE define was removed, which was a copy of a private DPDK define. Using it was more likely a hack. Also renamed MAX_SCSI_CTRLRS to MAX_VHOST_DEVICES. Instead of dpdk_vid_mapping, a new function spdk_vhost_dev_find_by_vid is used. It simply iterates through all the controllers. Since this patch required to move the definition of spdk_vhost_ctrlrs array, it has been renamed to g_spdk_vhost_devices. Change-Id: I9b70ccb97ffaa90a22c6a1c90850b3205a9b9b27 Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com> Reviewed-on: https://review.gerrithub.io/361881 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Pawel Wodkowski <pawelx.wodkowski@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
This commit is contained in:
parent
c6745bc2b8
commit
53a452d228
@ -64,7 +64,7 @@ static char dev_dirname[PATH_MAX] = "";
|
||||
#define SPDK_CACHE_LINE_SIZE RTE_CACHE_LINE_SIZE
|
||||
|
||||
#define MAX_VHOST_VRINGS 256
|
||||
#define MAX_VHOST_DEVICE 1024
|
||||
#define MAX_VHOST_DEVICES 15
|
||||
|
||||
#ifndef VIRTIO_F_VERSION_1
|
||||
#define VIRTIO_F_VERSION_1 32
|
||||
@ -107,6 +107,24 @@ struct spdk_vhost_dev {
|
||||
struct rte_vhost_vring virtqueue[MAX_VHOST_VRINGS] __attribute((aligned(SPDK_CACHE_LINE_SIZE)));
|
||||
};
|
||||
|
||||
static struct spdk_vhost_dev *g_spdk_vhost_devices[MAX_VHOST_DEVICES];
|
||||
|
||||
static struct spdk_vhost_dev *
|
||||
spdk_vhost_dev_find_by_vid(int vid)
|
||||
{
|
||||
unsigned i;
|
||||
struct spdk_vhost_dev *vdev;
|
||||
|
||||
for (i = 0; i < MAX_VHOST_DEVICES; i++) {
|
||||
vdev = g_spdk_vhost_devices[i];
|
||||
if (vdev && vdev->vid == vid) {
|
||||
return vdev;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
spdk_vhost_dev_destruct(struct spdk_vhost_dev *vdev)
|
||||
{
|
||||
@ -177,10 +195,6 @@ struct spdk_vhost_scsi_dev {
|
||||
struct spdk_poller *controlq_poller;
|
||||
} __rte_cache_aligned;
|
||||
|
||||
/* This maps from the integer index passed by DPDK to the our controller representation. */
|
||||
/* MAX_VHOST_DEVICE from DPDK. */
|
||||
static struct spdk_vhost_dev *dpdk_vid_mapping[MAX_VHOST_DEVICE];
|
||||
|
||||
/*
|
||||
* Get available requests from avail ring.
|
||||
*/
|
||||
@ -825,8 +839,10 @@ destroy_device(int vid)
|
||||
sem_t done_sem;
|
||||
uint32_t i;
|
||||
|
||||
assert(vid < MAX_VHOST_DEVICE);
|
||||
vdev = dpdk_vid_mapping[vid];
|
||||
vdev = spdk_vhost_dev_find_by_vid(vid);
|
||||
if (vdev == NULL) {
|
||||
rte_panic("Couldn't find device with vid %d to stop.\n", vid);
|
||||
}
|
||||
svdev = (struct spdk_vhost_scsi_dev *) vdev;
|
||||
|
||||
event = vhost_sem_event_alloc(vdev->lcore, vdev_event_done_cb, NULL, &done_sem);
|
||||
@ -856,15 +872,9 @@ destroy_device(int vid)
|
||||
g_num_ctrlrs[vdev->lcore]--;
|
||||
vdev->lcore = -1;
|
||||
|
||||
spdk_vhost_dev_destruct(&svdev->vdev);
|
||||
dpdk_vid_mapping[vid] = NULL;
|
||||
spdk_vhost_dev_destruct(vdev);
|
||||
}
|
||||
|
||||
#define LUN_DEV_NAME_SIZE 8
|
||||
#define MAX_SCSI_CTRLRS 15
|
||||
|
||||
static struct spdk_vhost_dev *spdk_vhost_ctrlrs[MAX_SCSI_CTRLRS];
|
||||
|
||||
struct spdk_vhost_dev *
|
||||
spdk_vhost_dev_find(const char *ctrlr_name)
|
||||
{
|
||||
@ -875,20 +885,19 @@ spdk_vhost_dev_find(const char *ctrlr_name)
|
||||
ctrlr_name += dev_dirname_len;
|
||||
}
|
||||
|
||||
for (i = 0; i < MAX_SCSI_CTRLRS; i++) {
|
||||
if (spdk_vhost_ctrlrs[i] == NULL) {
|
||||
for (i = 0; i < MAX_VHOST_DEVICES; i++) {
|
||||
if (g_spdk_vhost_devices[i] == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strcmp(spdk_vhost_ctrlrs[i]->name, ctrlr_name) == 0) {
|
||||
return spdk_vhost_ctrlrs[i];
|
||||
if (strcmp(g_spdk_vhost_devices[i]->name, ctrlr_name) == 0) {
|
||||
return g_spdk_vhost_devices[i];
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
static int new_device(int vid);
|
||||
static void destroy_device(int vid);
|
||||
/*
|
||||
@ -925,14 +934,14 @@ spdk_vhost_scsi_dev_construct(const char *name, uint64_t cpumask)
|
||||
return -EEXIST;
|
||||
}
|
||||
|
||||
for (ctrlr_num = 0; ctrlr_num < MAX_SCSI_CTRLRS; ctrlr_num++) {
|
||||
if (spdk_vhost_ctrlrs[ctrlr_num] == NULL) {
|
||||
for (ctrlr_num = 0; ctrlr_num < MAX_VHOST_DEVICES; ctrlr_num++) {
|
||||
if (g_spdk_vhost_devices[ctrlr_num] == NULL) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ctrlr_num == MAX_SCSI_CTRLRS) {
|
||||
SPDK_ERRLOG("Max scsi controllers reached (%d).\n", MAX_SCSI_CTRLRS);
|
||||
if (ctrlr_num == MAX_VHOST_DEVICES) {
|
||||
SPDK_ERRLOG("Max scsi controllers reached (%d).\n", MAX_VHOST_DEVICES);
|
||||
return -ENOSPC;
|
||||
}
|
||||
|
||||
@ -986,7 +995,7 @@ spdk_vhost_scsi_dev_construct(const char *name, uint64_t cpumask)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
spdk_vhost_ctrlrs[ctrlr_num] = vdev;
|
||||
g_spdk_vhost_devices[ctrlr_num] = vdev;
|
||||
SPDK_NOTICELOG("Controller %s: new controller added\n", name);
|
||||
return 0;
|
||||
}
|
||||
@ -1005,13 +1014,13 @@ spdk_vhost_scsi_dev_remove(struct spdk_vhost_scsi_dev *svdev)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
for (ctrlr_num = 0; ctrlr_num < MAX_SCSI_CTRLRS; ctrlr_num++) {
|
||||
if (spdk_vhost_ctrlrs[ctrlr_num] == vdev) {
|
||||
for (ctrlr_num = 0; ctrlr_num < MAX_VHOST_DEVICES; ctrlr_num++) {
|
||||
if (g_spdk_vhost_devices[ctrlr_num] == vdev) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ctrlr_num == MAX_SCSI_CTRLRS) {
|
||||
if (ctrlr_num == MAX_VHOST_DEVICES) {
|
||||
SPDK_ERRLOG("Trying to remove invalid controller: %s.\n", vdev->name);
|
||||
return -ENOSPC;
|
||||
}
|
||||
@ -1043,7 +1052,7 @@ spdk_vhost_scsi_dev_remove(struct spdk_vhost_scsi_dev *svdev)
|
||||
*/
|
||||
free(vdev->name);
|
||||
spdk_free(svdev);
|
||||
spdk_vhost_ctrlrs[ctrlr_num] = NULL;
|
||||
g_spdk_vhost_devices[ctrlr_num] = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1174,8 +1183,8 @@ spdk_vhost_dev_next(struct spdk_vhost_dev *prev)
|
||||
int i = 0;
|
||||
|
||||
if (prev != NULL) {
|
||||
for (; i < MAX_SCSI_CTRLRS; i++) {
|
||||
if (spdk_vhost_ctrlrs[i] == prev) {
|
||||
for (; i < MAX_VHOST_DEVICES; i++) {
|
||||
if (g_spdk_vhost_devices[i] == prev) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1183,12 +1192,12 @@ spdk_vhost_dev_next(struct spdk_vhost_dev *prev)
|
||||
i++;
|
||||
}
|
||||
|
||||
for (; i < MAX_SCSI_CTRLRS; i++) {
|
||||
if (spdk_vhost_ctrlrs[i] == NULL) {
|
||||
for (; i < MAX_VHOST_DEVICES; i++) {
|
||||
if (g_spdk_vhost_devices[i] == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
return spdk_vhost_ctrlrs[i];
|
||||
return g_spdk_vhost_devices[i];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
@ -1315,8 +1324,6 @@ new_device(int vid)
|
||||
char ifname[PATH_MAX];
|
||||
sem_t added;
|
||||
|
||||
assert(vid < MAX_VHOST_DEVICE);
|
||||
|
||||
if (rte_vhost_get_ifname(vid, ifname, PATH_MAX) < 0) {
|
||||
SPDK_ERRLOG("Couldn't get a valid ifname for device %d\n", vid);
|
||||
return -1;
|
||||
@ -1338,7 +1345,6 @@ new_device(int vid)
|
||||
return -1;
|
||||
}
|
||||
|
||||
dpdk_vid_mapping[vid] = vdev;
|
||||
vdev->lcore = spdk_vhost_allocate_reactor(vdev->cpumask);
|
||||
|
||||
event = vhost_sem_event_alloc(vdev->lcore, add_vdev_cb, vdev, &added);
|
||||
@ -1377,8 +1383,8 @@ session_shutdown(void *arg)
|
||||
struct spdk_vhost_dev *vdev = NULL;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAX_SCSI_CTRLRS; i++) {
|
||||
vdev = spdk_vhost_ctrlrs[i];
|
||||
for (i = 0; i < MAX_VHOST_DEVICES; i++) {
|
||||
vdev = g_spdk_vhost_devices[i];
|
||||
if (vdev == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user