diff --git a/examples/bdev/fio_plugin/fio_plugin.c b/examples/bdev/fio_plugin/fio_plugin.c index 844cb9841..c235cc1e7 100644 --- a/examples/bdev/fio_plugin/fio_plugin.c +++ b/examples/bdev/fio_plugin/fio_plugin.c @@ -219,8 +219,8 @@ spdk_fio_bdev_init_start(void *arg) { bool *done = arg; - spdk_app_json_config_load(g_json_config_file, SPDK_DEFAULT_RPC_ADDR, - spdk_fio_bdev_init_done, done, true); + spdk_subsystem_init_from_json_config(g_json_config_file, SPDK_DEFAULT_RPC_ADDR, + spdk_fio_bdev_init_done, done, true); } static void diff --git a/include/spdk/init.h b/include/spdk/init.h index 339c8900c..aa8abc174 100644 --- a/include/spdk/init.h +++ b/include/spdk/init.h @@ -76,6 +76,20 @@ typedef void (*spdk_subsystem_init_fn)(int rc, void *ctx); */ void spdk_subsystem_init(spdk_subsystem_init_fn cb_fn, void *cb_arg); +/** + * Like spdk_subsystem_init, but additionally configure each subsystem using the provided JSON config + * file. This will automatically start a JSON RPC server and then stop it. + * + * \param json_config_file Path to a JSON config file. + * \param rpc_addr Path to a unix domain socket to send configuration RPCs to. + * \param cb_fn Function called when the process is complete. + * \param cb_arg User context passed to cb_fn. + * \param stop_on_error Whether to stop initialization if one of the JSON RPCs fails. + */ +void spdk_subsystem_init_from_json_config(const char *json_config_file, const char *rpc_addr, + spdk_subsystem_init_fn cb_fn, void *cb_arg, + bool stop_on_error); + typedef void (*spdk_subsystem_fini_fn)(void *ctx); /** diff --git a/include/spdk_internal/event.h b/include/spdk_internal/event.h index 0a923b03a..d900ed82d 100644 --- a/include/spdk_internal/event.h +++ b/include/spdk_internal/event.h @@ -164,12 +164,6 @@ int spdk_reactor_set_interrupt_mode(uint32_t lcore, bool new_in_interrupt, */ struct spdk_thread *_spdk_get_app_thread(void); -typedef void (*spdk_app_init_fn)(int rc, void *ctx); - -void spdk_app_json_config_load(const char *json_config_file, const char *rpc_addr, - spdk_app_init_fn cb_fn, void *cb_arg, - bool stop_on_error); - struct spdk_governor_capabilities { bool freq_change; bool freq_getset; diff --git a/lib/event/Makefile b/lib/event/Makefile index 6077e3d6e..84640b789 100644 --- a/lib/event/Makefile +++ b/lib/event/Makefile @@ -40,7 +40,7 @@ SO_MINOR := 0 CFLAGS += $(ENV_CFLAGS) LIBNAME = event -C_SRCS = app.c reactor.c json_config.c log_rpc.c \ +C_SRCS = app.c reactor.c log_rpc.c \ app_rpc.c scheduler_static.c # Do not compile schedulers and governors based on DPDK env diff --git a/lib/event/app.c b/lib/event/app.c index f35d7230c..090b1692f 100644 --- a/lib/event/app.c +++ b/lib/event/app.c @@ -403,8 +403,9 @@ bootstrap_fn(void *arg1) if (g_spdk_app.json_config_file) { g_delay_subsystem_init = false; - spdk_app_json_config_load(g_spdk_app.json_config_file, g_spdk_app.rpc_addr, app_start_rpc, - NULL, !g_spdk_app.json_config_ignore_errors); + spdk_subsystem_init_from_json_config(g_spdk_app.json_config_file, g_spdk_app.rpc_addr, + app_start_rpc, + NULL, !g_spdk_app.json_config_ignore_errors); } else { if (!g_delay_subsystem_init) { spdk_subsystem_init(app_start_rpc, NULL); diff --git a/lib/event/spdk_event.map b/lib/event/spdk_event.map index 206670d5c..b4a30f67c 100644 --- a/lib/event/spdk_event.map +++ b/lib/event/spdk_event.map @@ -25,7 +25,6 @@ spdk_reactor_get; spdk_for_each_reactor; spdk_reactor_set_interrupt_mode; - spdk_app_json_config_load; local: *; }; diff --git a/lib/init/Makefile b/lib/init/Makefile index 8f00ca240..0e852bd67 100644 --- a/lib/init/Makefile +++ b/lib/init/Makefile @@ -37,7 +37,7 @@ include $(SPDK_ROOT_DIR)/mk/spdk.common.mk SO_VER := 1 SO_MINOR := 0 -C_SRCS = subsystem.c subsystem_rpc.c rpc.c +C_SRCS = json_config.c subsystem.c subsystem_rpc.c rpc.c LIBNAME = init SPDK_MAP_FILE = $(abspath $(CURDIR)/spdk_init.map) diff --git a/lib/event/json_config.c b/lib/init/json_config.c similarity index 98% rename from lib/event/json_config.c rename to lib/init/json_config.c index 073537e93..2c942a80f 100644 --- a/lib/event/json_config.c +++ b/lib/init/json_config.c @@ -86,7 +86,7 @@ typedef void (*client_resp_handler)(struct load_json_config_ctx *, struct load_json_config_ctx { /* Thread used during configuration. */ struct spdk_thread *thread; - spdk_app_init_fn cb_fn; + spdk_subsystem_init_fn cb_fn; void *cb_arg; bool stop_on_error; @@ -567,9 +567,9 @@ err: } void -spdk_app_json_config_load(const char *json_config_file, const char *rpc_addr, - spdk_app_init_fn cb_fn, void *cb_arg, - bool stop_on_error) +spdk_subsystem_init_from_json_config(const char *json_config_file, const char *rpc_addr, + spdk_subsystem_init_fn cb_fn, void *cb_arg, + bool stop_on_error) { struct load_json_config_ctx *ctx = calloc(1, sizeof(*ctx)); int rc; diff --git a/lib/init/spdk_init.map b/lib/init/spdk_init.map index 5a6d694f7..c6061c458 100644 --- a/lib/init/spdk_init.map +++ b/lib/init/spdk_init.map @@ -8,6 +8,7 @@ spdk_subsystem_fini; spdk_subsystem_init_next; spdk_subsystem_fini_next; + spdk_subsystem_init_from_json_config; spdk_rpc_initialize; spdk_rpc_finish; diff --git a/mk/spdk.lib_deps.mk b/mk/spdk.lib_deps.mk index e45ddba03..bc812ac7f 100644 --- a/mk/spdk.lib_deps.mk +++ b/mk/spdk.lib_deps.mk @@ -84,7 +84,7 @@ DEPDIRS-trace := log util $(JSON_LIBS) DEPDIRS-bdev := log util thread $(JSON_LIBS) notify trace DEPDIRS-blobfs := log thread blob trace DEPDIRS-event := log util thread $(JSON_LIBS) trace init -DEPDIRS-init := jsonrpc json log rpc thread +DEPDIRS-init := jsonrpc json log rpc thread util DEPDIRS-ftl := log util thread trace bdev DEPDIRS-nbd := log util thread $(JSON_LIBS) bdev diff --git a/test/unit/lib/event/app.c/app_ut.c b/test/unit/lib/event/app.c/app_ut.c index 932eef8f7..dfd1ceddf 100644 --- a/test/unit/lib/event/app.c/app_ut.c +++ b/test/unit/lib/event/app.c/app_ut.c @@ -51,7 +51,8 @@ DEFINE_STUB_V(spdk_rpc_set_state, (uint32_t state)); DEFINE_STUB(spdk_rpc_get_state, uint32_t, (void), SPDK_RPC_RUNTIME); DEFINE_STUB(spdk_rpc_initialize, int, (const char *listen_addr), 0); DEFINE_STUB_V(spdk_rpc_finish, (void)); -DEFINE_STUB_V(spdk_app_json_config_load, (const char *json_config_file, const char *rpc_addr, +DEFINE_STUB_V(spdk_subsystem_init_from_json_config, (const char *json_config_file, + const char *rpc_addr, spdk_subsystem_init_fn cb_fn, void *cb_arg, bool stop_on_error)); DEFINE_STUB_V(spdk_reactors_start, (void)); DEFINE_STUB_V(spdk_reactors_stop, (void *arg1));