diff --git a/include/spdk_internal/event.h b/include/spdk_internal/event.h index a738ed3cf..e2fc9d24b 100644 --- a/include/spdk_internal/event.h +++ b/include/spdk_internal/event.h @@ -70,7 +70,7 @@ struct spdk_subsystem_depend { void spdk_add_subsystem(struct spdk_subsystem *subsystem); void spdk_add_subsystem_depend(struct spdk_subsystem_depend *depend); -void spdk_subsystem_init(void *arg1, void *arg2); +void spdk_subsystem_init(struct spdk_event *app_start_event); void spdk_subsystem_fini(void); void spdk_subsystem_init_next(int rc); void spdk_subsystem_config(FILE *fp); diff --git a/lib/event/app.c b/lib/event/app.c index 094f46149..b17e19581 100644 --- a/lib/event/app.c +++ b/lib/event/app.c @@ -379,8 +379,7 @@ spdk_app_start(struct spdk_app_opts *opts, spdk_event_fn start_fn, app_start_event = spdk_event_allocate(spdk_env_get_current_core(), start_fn, arg1, arg2); - spdk_event_call(spdk_event_allocate(spdk_env_get_current_core(), spdk_subsystem_init, - app_start_event, NULL)); + spdk_subsystem_init(app_start_event); /* This blocks until spdk_app_stop is called */ spdk_reactors_start(); diff --git a/lib/event/subsystem.c b/lib/event/subsystem.c index 45505f26d..dd7cab86e 100644 --- a/lib/event/subsystem.c +++ b/lib/event/subsystem.c @@ -36,6 +36,7 @@ #include "spdk/log.h" #include "spdk_internal/event.h" +#include "spdk/env.h" static TAILQ_HEAD(spdk_subsystem_list, spdk_subsystem) g_subsystems = TAILQ_HEAD_INITIALIZER(g_subsystems); @@ -138,13 +139,11 @@ spdk_subsystem_init_next(int rc) } } -void -spdk_subsystem_init(void *arg1, void *arg2) +static void +spdk_subsystem_verify(void *arg1, void *arg2) { struct spdk_subsystem_depend *dep; - g_app_start_event = (struct spdk_event *)arg1; - /* Verify that all dependency name and depends_on subsystems are registered */ TAILQ_FOREACH(dep, &g_depends, tailq) { if (!spdk_subsystem_find(&g_subsystems, dep->name)) { @@ -165,6 +164,17 @@ spdk_subsystem_init(void *arg1, void *arg2) spdk_subsystem_init_next(0); } +void +spdk_subsystem_init(struct spdk_event *app_start_event) +{ + struct spdk_event *verify_event; + + g_app_start_event = app_start_event; + + verify_event = spdk_event_allocate(spdk_env_get_current_core(), spdk_subsystem_verify, NULL, NULL); + spdk_event_call(verify_event); +} + void spdk_subsystem_fini(void) { diff --git a/test/unit/lib/event/subsystem.c/subsystem_ut.c b/test/unit/lib/event/subsystem.c/subsystem_ut.c index 427e3aae2..076613178 100644 --- a/test/unit/lib/event/subsystem.c/subsystem_ut.c +++ b/test/unit/lib/event/subsystem.c/subsystem_ut.c @@ -47,8 +47,33 @@ spdk_app_stop(int rc) global_rc = rc; } +uint32_t +spdk_env_get_current_core(void) +{ + return 0; +} + +static void +ut_event_fn(void *arg1, void *arg2) +{ +} + +struct spdk_event * +spdk_event_allocate(uint32_t core, spdk_event_fn fn, void *arg1, void *arg2) +{ + struct spdk_event *event = calloc(1, sizeof(*event)); + + event->fn = fn; + event->arg1 = arg1; + event->arg2 = arg2; + + return event; +} + void spdk_event_call(struct spdk_event *event) { + event->fn(event->arg1, event->arg2); + free(event); } static void @@ -89,9 +114,11 @@ subsystem_sort_test_depends_on_single(void) struct spdk_subsystem *subsystem; int i; char subsystem_name[16]; + struct spdk_event *app_start_event; global_rc = -1; - spdk_subsystem_init(NULL, NULL); + app_start_event = spdk_event_allocate(0, ut_event_fn, NULL, NULL); + spdk_subsystem_init(app_start_event); i = 4; TAILQ_FOREACH(subsystem, &g_subsystems, tailq) { @@ -107,6 +134,7 @@ subsystem_sort_test_depends_on_multiple(void) { int i; struct spdk_subsystem *subsystem; + struct spdk_event *app_start_event; subsystem_clear(); set_up_subsystem(&g_ut_subsystems[0], "iscsi"); @@ -136,7 +164,8 @@ subsystem_sort_test_depends_on_multiple(void) } global_rc = -1; - spdk_subsystem_init(NULL, NULL); + app_start_event = spdk_event_allocate(0, ut_event_fn, NULL, NULL); + spdk_subsystem_init(app_start_event); subsystem = TAILQ_FIRST(&g_subsystems); CU_ASSERT(strcmp(subsystem->name, "interface") == 0); @@ -195,7 +224,7 @@ subsystem_sort_test_missing_dependency(void) spdk_add_subsystem_depend(&g_ut_subsystem_deps[0]); global_rc = -1; - spdk_subsystem_init(NULL, NULL); + spdk_subsystem_init(NULL); CU_ASSERT(global_rc != 0); /* @@ -210,7 +239,7 @@ subsystem_sort_test_missing_dependency(void) spdk_add_subsystem_depend(&g_ut_subsystem_deps[0]); global_rc = -1; - spdk_subsystem_init(NULL, NULL); + spdk_subsystem_init(NULL); CU_ASSERT(global_rc != 0); }