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:
parent
c8f052836d
commit
65b6d8f495
@ -305,8 +305,14 @@ scan_target_finish(struct virtio_scsi_scan_base *base)
|
|||||||
spdk_bdev_register(&disk->bdev);
|
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_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
|
static void
|
||||||
@ -570,6 +576,8 @@ bdev_virtio_initialize(void)
|
|||||||
virtio_init_device(vdev, VIRTIO_SCSI_DEV_SUPPORTED_FEATURES);
|
virtio_init_device(vdev, VIRTIO_SCSI_DEV_SUPPORTED_FEATURES);
|
||||||
virtio_dev_start(vdev);
|
virtio_dev_start(vdev);
|
||||||
|
|
||||||
|
TAILQ_INSERT_TAIL(&g_virtio_driver.init_ctrlrs, vdev, tailq);
|
||||||
|
|
||||||
base->vdev = vdev;
|
base->vdev = vdev;
|
||||||
TAILQ_INIT(&base->found_disks);
|
TAILQ_INIT(&base->found_disks);
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <sys/uio.h>
|
#include <sys/uio.h>
|
||||||
|
#include <sys/queue.h>
|
||||||
|
|
||||||
#define VIRTIO_MAX_RX_QUEUES 128U
|
#define VIRTIO_MAX_RX_QUEUES 128U
|
||||||
#define VIRTIO_MAX_TX_QUEUES 128U
|
#define VIRTIO_MAX_TX_QUEUES 128U
|
||||||
@ -52,6 +53,8 @@ struct virtio_dev {
|
|||||||
|
|
||||||
/** Modern/legacy virtio device flag. */
|
/** Modern/legacy virtio device flag. */
|
||||||
uint8_t modern;
|
uint8_t modern;
|
||||||
|
|
||||||
|
TAILQ_ENTRY(virtio_dev) tailq;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct virtio_req {
|
struct virtio_req {
|
||||||
|
@ -43,7 +43,10 @@
|
|||||||
#include "virtio_logs.h"
|
#include "virtio_logs.h"
|
||||||
#include "virtio_queue.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,
|
* Following macros are derived from linux/pci_regs.h, however,
|
||||||
|
@ -238,6 +238,8 @@ struct vtpci_internal {
|
|||||||
|
|
||||||
struct virtio_driver {
|
struct virtio_driver {
|
||||||
struct vtpci_internal internal[128];
|
struct vtpci_internal internal[128];
|
||||||
|
TAILQ_HEAD(, virtio_dev) init_ctrlrs;
|
||||||
|
TAILQ_HEAD(, virtio_dev) attached_ctrlrs;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct virtio_driver g_virtio_driver;
|
extern struct virtio_driver g_virtio_driver;
|
||||||
|
Loading…
Reference in New Issue
Block a user