diff --git a/mk/spdk.lib_deps.mk b/mk/spdk.lib_deps.mk index 6fc6ac1c1..fe9cb621e 100644 --- a/mk/spdk.lib_deps.mk +++ b/mk/spdk.lib_deps.mk @@ -175,7 +175,7 @@ DEPDIRS-event_vmd := init vmd $(JSON_LIBS) log thread DEPDIRS-event_bdev := init bdev event_accel event_vmd event_sock -DEPDIRS-event_scheduler := event init +DEPDIRS-event_scheduler := event init json log DEPDIRS-event_nbd := init nbd event_bdev DEPDIRS-event_nvmf := init nvmf event_bdev event_scheduler event_sock thread log bdev util $(JSON_LIBS) diff --git a/module/event/subsystems/scheduler/scheduler.c b/module/event/subsystems/scheduler/scheduler.c index cac7978bd..6084a8ec5 100644 --- a/module/event/subsystems/scheduler/scheduler.c +++ b/module/event/subsystems/scheduler/scheduler.c @@ -63,10 +63,42 @@ scheduler_subsystem_fini(void) spdk_subsystem_fini_next(); } +static void +scheduler_write_config_json(struct spdk_json_write_ctx *w) +{ + struct spdk_scheduler *scheduler; + uint64_t scheduler_period; + + assert(w != NULL); + + scheduler = spdk_scheduler_get(); + if (scheduler == NULL) { + SPDK_ERRLOG("Unable to get scheduler info\n"); + return; + } + + scheduler_period = spdk_scheduler_get_period(); + + spdk_json_write_array_begin(w); + + spdk_json_write_object_begin(w); + spdk_json_write_named_string(w, "method", "framework_set_scheduler"); + spdk_json_write_named_object_begin(w, "params"); + spdk_json_write_named_string(w, "name", scheduler->name); + if (scheduler_period != 0) { + spdk_json_write_named_uint32(w, "period", scheduler_period); + } + spdk_json_write_object_end(w); + spdk_json_write_object_end(w); + + spdk_json_write_array_end(w); +} + static struct spdk_subsystem g_spdk_subsystem_scheduler = { .name = "scheduler", .init = scheduler_subsystem_init, .fini = scheduler_subsystem_fini, + .write_config_json = scheduler_write_config_json, }; SPDK_SUBSYSTEM_REGISTER(g_spdk_subsystem_scheduler); diff --git a/test/json_config/clear_config.py b/test/json_config/clear_config.py index bac1beebb..03ddbe0d8 100755 --- a/test/json_config/clear_config.py +++ b/test/json_config/clear_config.py @@ -161,6 +161,10 @@ def clear_sock_subsystem(args, sock_config): pass +def clear_scheduler_subsystem(args, scheduler_config): + pass + + def call_test_cmd(func): def rpc_test_cmd(*args, **kwargs): try: diff --git a/test/json_config/config_filter.py b/test/json_config/config_filter.py index 59ed539b9..3e1157015 100755 --- a/test/json_config/config_filter.py +++ b/test/json_config/config_filter.py @@ -35,6 +35,7 @@ def filter_methods(do_remove_global_rpcs): 'bdev_nvme_set_hotplug', 'sock_impl_set_options', 'sock_set_default_impl', + 'framework_set_scheduler', ] data = json.loads(sys.stdin.read())