Commit 65b6d8f4 authored by Dariusz Stojaczyk's avatar Dariusz Stojaczyk Committed by Jim Harris
Browse files

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: default avatarDariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/379864


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent c8f05283
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -305,9 +305,15 @@ 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);

	if (TAILQ_EMPTY(&g_virtio_driver.init_ctrlrs)) {
		spdk_bdev_module_init_done(SPDK_GET_BDEV_MODULE(virtio_scsi));
	}
}

static void
send_read_cap_10(struct virtio_scsi_scan_base *base, uint8_t target_id, struct virtio_req *vreq)
@@ -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);

+3 −0
Original line number Diff line number Diff line
@@ -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 {
+4 −1
Original line number Diff line number Diff line
@@ -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,
+2 −0
Original line number Diff line number Diff line
@@ -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;