Commit c224997b authored by Ben Walker's avatar Ben Walker Committed by Jim Harris
Browse files

bdev: Remove direct calls to start/stop pollers



Abstract these through the bdev API to break this
dependency on the event framework.

Change-Id: I108505bf27e94b2985f53d0a4dc0b847ae264d25
Signed-off-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/366340


Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
parent 0cb7586e
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -106,9 +106,21 @@ struct spdk_bdev_io_stat {
	uint64_t num_write_ops;
};

struct spdk_bdev_poller;

typedef void (*spdk_bdev_init_cb)(void *cb_arg, int rc);

void spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg);
typedef void (*spdk_bdev_poller_fn)(void *arg);
typedef void (*spdk_bdev_poller_start_cb)(struct spdk_bdev_poller **ppoller,
		spdk_bdev_poller_fn fn,
		void *arg,
		uint32_t lcore,
		uint64_t period_microseconds);
typedef void (*spdk_bdev_poller_stop_cb)(struct spdk_bdev_poller **ppoller);

void spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg,
			  spdk_bdev_poller_start_cb start_poller_fn,
			  spdk_bdev_poller_stop_cb stop_poller_fn);
int spdk_bdev_finish(void);
void spdk_bdev_config_text(FILE *fp);

+8 −1
Original line number Diff line number Diff line
@@ -42,7 +42,6 @@
#include "spdk/stdinc.h"

#include "spdk/bdev.h"
#include "spdk/event.h"
#include "spdk/queue.h"
#include "spdk/scsi_spec.h"

@@ -355,6 +354,14 @@ struct spdk_bdev_io {
void spdk_bdev_register(struct spdk_bdev *bdev);
void spdk_bdev_unregister(struct spdk_bdev *bdev);

void spdk_bdev_poller_start(struct spdk_bdev_poller **ppoller,
			    spdk_bdev_poller_fn fn,
			    void *arg,
			    uint32_t lcore,
			    uint64_t period_microseconds);

void spdk_bdev_poller_stop(struct spdk_bdev_poller **ppoller);

void spdk_bdev_io_get_buf(struct spdk_bdev_io *bdev_io, spdk_bdev_io_get_buf_cb cb);
struct spdk_bdev_io *spdk_bdev_get_io(void);
void spdk_bdev_io_resubmit(struct spdk_bdev_io *bdev_io, struct spdk_bdev *new_bdev);
+3 −3
Original line number Diff line number Diff line
@@ -298,7 +298,7 @@ blockdev_aio_create_cb(void *io_device, void *ctx_buf)
		return -1;
	}

	spdk_poller_register(&ch->poller, blockdev_aio_poll, ch,
	spdk_bdev_poller_start(&ch->poller, blockdev_aio_poll, ch,
			       spdk_env_get_current_core(), 0);
	return 0;
}
@@ -310,7 +310,7 @@ blockdev_aio_destroy_cb(void *io_device, void *ctx_buf)

	io_destroy(io_channel->io_ctx);
	free(io_channel->events);
	spdk_poller_unregister(&io_channel->poller, NULL);
	spdk_bdev_poller_stop(&io_channel->poller);
}

static struct spdk_io_channel *
+1 −1
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ struct blockdev_aio_io_channel {
	io_context_t		io_ctx;
	long			queue_depth;
	struct io_event		*events;
	struct spdk_poller	*poller;
	struct spdk_bdev_poller	*poller;
};

struct file_disk {
+29 −1
Original line number Diff line number Diff line
@@ -68,15 +68,21 @@ struct spdk_bdev_mgr {

	TAILQ_HEAD(, spdk_bdev) bdevs;

	spdk_bdev_poller_start_cb start_poller_fn;
	spdk_bdev_poller_stop_cb stop_poller_fn;

#ifdef SPDK_CONFIG_VTUNE
	__itt_domain	*domain;
#endif

};

static struct spdk_bdev_mgr g_bdev_mgr = {
	.bdev_modules = TAILQ_HEAD_INITIALIZER(g_bdev_mgr.bdev_modules),
	.vbdev_modules = TAILQ_HEAD_INITIALIZER(g_bdev_mgr.vbdev_modules),
	.bdevs = TAILQ_HEAD_INITIALIZER(g_bdev_mgr.bdevs),
	.start_poller_fn = NULL,
	.stop_poller_fn = NULL
};

static struct spdk_bdev_module_if *g_next_bdev_module;
@@ -84,6 +90,7 @@ static struct spdk_bdev_module_if *g_next_vbdev_module;
static spdk_bdev_init_cb	g_cb_fn = NULL;
static void			*g_cb_arg = NULL;


struct spdk_bdev_mgmt_channel {
	need_buf_tailq_t need_buf_small;
	need_buf_tailq_t need_buf_large;
@@ -358,7 +365,25 @@ spdk_vbdev_module_init_next(int rc)
}

void
spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg)
spdk_bdev_poller_start(struct spdk_bdev_poller **ppoller,
		       spdk_bdev_poller_fn fn,
		       void *arg,
		       uint32_t lcore,
		       uint64_t period_microseconds)
{
	g_bdev_mgr.start_poller_fn(ppoller, fn, arg, lcore, period_microseconds);
}

void
spdk_bdev_poller_stop(struct spdk_bdev_poller **ppoller)
{
	g_bdev_mgr.stop_poller_fn(ppoller);
}

void
spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg,
		     spdk_bdev_poller_start_cb start_poller_fn,
		     spdk_bdev_poller_stop_cb stop_poller_fn)
{
	int cache_size;
	int rc = 0;
@@ -368,6 +393,9 @@ spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg)
	g_cb_fn = cb_fn;
	g_cb_arg = cb_arg;

	g_bdev_mgr.start_poller_fn = start_poller_fn;
	g_bdev_mgr.stop_poller_fn = stop_poller_fn;

	g_bdev_mgr.bdev_io_pool = spdk_mempool_create("blockdev_io",
				  SPDK_BDEV_IO_POOL_SIZE,
				  sizeof(struct spdk_bdev_io) +
Loading