nvme: add new member initialized for nvme_driver struct

Change-Id: I8db8225bff2f11998b58df7987bff3d53e206b4a
Signed-off-by: GangCao <gang.cao@intel.com>
This commit is contained in:
GangCao 2016-11-03 16:36:24 -04:00 committed by Jim Harris
parent 396c32c48f
commit ac99f2fbc5
2 changed files with 12 additions and 2 deletions

View File

@ -38,6 +38,7 @@ struct nvme_driver _g_nvme_driver = {
.init_ctrlrs = TAILQ_HEAD_INITIALIZER(_g_nvme_driver.init_ctrlrs), .init_ctrlrs = TAILQ_HEAD_INITIALIZER(_g_nvme_driver.init_ctrlrs),
.attached_ctrlrs = TAILQ_HEAD_INITIALIZER(_g_nvme_driver.attached_ctrlrs), .attached_ctrlrs = TAILQ_HEAD_INITIALIZER(_g_nvme_driver.attached_ctrlrs),
.request_mempool = NULL, .request_mempool = NULL,
.initialized = false,
}; };
struct nvme_driver *g_spdk_nvme_driver = &_g_nvme_driver; struct nvme_driver *g_spdk_nvme_driver = &_g_nvme_driver;
@ -277,6 +278,12 @@ spdk_nvme_probe(void *cb_ctx, spdk_nvme_probe_cb probe_cb, spdk_nvme_attach_cb a
struct nvme_enum_ctx enum_ctx; struct nvme_enum_ctx enum_ctx;
struct spdk_nvme_ctrlr *ctrlr, *ctrlr_tmp; struct spdk_nvme_ctrlr *ctrlr, *ctrlr_tmp;
if (!spdk_process_is_primary()) {
while (g_spdk_nvme_driver->initialized == false) {
usleep(200 * 1000);
}
}
pthread_mutex_lock(&g_spdk_nvme_driver->lock); pthread_mutex_lock(&g_spdk_nvme_driver->lock);
if (g_spdk_nvme_driver->request_mempool == NULL) { if (g_spdk_nvme_driver->request_mempool == NULL) {
@ -349,6 +356,8 @@ spdk_nvme_probe(void *cb_ctx, spdk_nvme_probe_cb probe_cb, spdk_nvme_attach_cb a
} }
} }
g_spdk_nvme_driver->initialized = true;
pthread_mutex_unlock(&g_spdk_nvme_driver->lock); pthread_mutex_unlock(&g_spdk_nvme_driver->lock);
return rc; return rc;
} }

View File

@ -402,10 +402,11 @@ struct spdk_nvme_ctrlr {
}; };
struct nvme_driver { struct nvme_driver {
pthread_mutex_t lock; pthread_mutex_t lock;
TAILQ_HEAD(, spdk_nvme_ctrlr) init_ctrlrs; TAILQ_HEAD(, spdk_nvme_ctrlr) init_ctrlrs;
TAILQ_HEAD(, spdk_nvme_ctrlr) attached_ctrlrs; TAILQ_HEAD(, spdk_nvme_ctrlr) attached_ctrlrs;
struct spdk_mempool *request_mempool; struct spdk_mempool *request_mempool;
bool initialized;
}; };
extern struct nvme_driver *g_spdk_nvme_driver; extern struct nvme_driver *g_spdk_nvme_driver;