bdev_virtio: call bdev_module_init_done only once

bdev_module_init_done could be called
multiple times when more than device
is available.

Change-Id: I17ee63a818945359648953c4f8f67678d10e8907
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/379864
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Dariusz Stojaczyk 2017-09-25 20:41:05 +02:00 committed by Jim Harris
parent c8f052836d
commit 65b6d8f495
4 changed files with 18 additions and 2 deletions

View File

@ -305,8 +305,14 @@ scan_target_finish(struct virtio_scsi_scan_base *base)
spdk_bdev_register(&disk->bdev);
}
TAILQ_REMOVE(&g_virtio_driver.init_ctrlrs, base->vdev, tailq);
TAILQ_INSERT_TAIL(&g_virtio_driver.attached_ctrlrs, base->vdev, tailq);
spdk_dma_free(base);
spdk_bdev_module_init_done(SPDK_GET_BDEV_MODULE(virtio_scsi));
if (TAILQ_EMPTY(&g_virtio_driver.init_ctrlrs)) {
spdk_bdev_module_init_done(SPDK_GET_BDEV_MODULE(virtio_scsi));
}
}
static void
@ -570,6 +576,8 @@ bdev_virtio_initialize(void)
virtio_init_device(vdev, VIRTIO_SCSI_DEV_SUPPORTED_FEATURES);
virtio_dev_start(vdev);
TAILQ_INSERT_TAIL(&g_virtio_driver.init_ctrlrs, vdev, tailq);
base->vdev = vdev;
TAILQ_INIT(&base->found_disks);

View File

@ -36,6 +36,7 @@
#include <stdint.h>
#include <sys/uio.h>
#include <sys/queue.h>
#define VIRTIO_MAX_RX_QUEUES 128U
#define VIRTIO_MAX_TX_QUEUES 128U
@ -52,6 +53,8 @@ struct virtio_dev {
/** Modern/legacy virtio device flag. */
uint8_t modern;
TAILQ_ENTRY(virtio_dev) tailq;
};
struct virtio_req {

View File

@ -43,7 +43,10 @@
#include "virtio_logs.h"
#include "virtio_queue.h"
struct virtio_driver g_virtio_driver;
struct virtio_driver g_virtio_driver = {
.init_ctrlrs = TAILQ_HEAD_INITIALIZER(g_virtio_driver.init_ctrlrs),
.attached_ctrlrs = TAILQ_HEAD_INITIALIZER(g_virtio_driver.attached_ctrlrs),
};
/*
* Following macros are derived from linux/pci_regs.h, however,

View File

@ -238,6 +238,8 @@ struct vtpci_internal {
struct virtio_driver {
struct vtpci_internal internal[128];
TAILQ_HEAD(, virtio_dev) init_ctrlrs;
TAILQ_HEAD(, virtio_dev) attached_ctrlrs;
};
extern struct virtio_driver g_virtio_driver;