1488570ebSJim Harris /* SPDX-License-Identifier: BSD-3-Clause
2*a6dbe372Spaul luse * Copyright (C) 2021 Intel Corporation.
3a86e40f3STomasz Zawadzki * All rights reserved.
4a86e40f3STomasz Zawadzki */
5a86e40f3STomasz Zawadzki
6a86e40f3STomasz Zawadzki #include "spdk/stdinc.h"
7a86e40f3STomasz Zawadzki #include "spdk/env.h"
8a86e40f3STomasz Zawadzki #include "spdk/scheduler.h"
9a86e40f3STomasz Zawadzki
10a86e40f3STomasz Zawadzki #include "spdk_internal/event.h"
11a86e40f3STomasz Zawadzki #include "spdk_internal/init.h"
12a86e40f3STomasz Zawadzki
13a86e40f3STomasz Zawadzki static void
scheduler_subsystem_init(void)14a86e40f3STomasz Zawadzki scheduler_subsystem_init(void)
15a86e40f3STomasz Zawadzki {
16a86e40f3STomasz Zawadzki int rc = 0;
17a86e40f3STomasz Zawadzki
18a86e40f3STomasz Zawadzki /* Set the defaults */
19a86e40f3STomasz Zawadzki if (spdk_scheduler_get() == NULL) {
20a86e40f3STomasz Zawadzki rc = spdk_scheduler_set("static");
21a86e40f3STomasz Zawadzki }
22a86e40f3STomasz Zawadzki
23a86e40f3STomasz Zawadzki spdk_subsystem_init_next(rc);
24a86e40f3STomasz Zawadzki }
25a86e40f3STomasz Zawadzki
26a86e40f3STomasz Zawadzki static void
scheduler_subsystem_fini(void)27a86e40f3STomasz Zawadzki scheduler_subsystem_fini(void)
28a86e40f3STomasz Zawadzki {
29a86e40f3STomasz Zawadzki spdk_scheduler_set_period(0);
30a86e40f3STomasz Zawadzki spdk_scheduler_set(NULL);
31a86e40f3STomasz Zawadzki
32a86e40f3STomasz Zawadzki spdk_subsystem_fini_next();
33a86e40f3STomasz Zawadzki }
34a86e40f3STomasz Zawadzki
35b05d4a7dSKrzysztof Karas static void
scheduler_write_config_json(struct spdk_json_write_ctx * w)36b05d4a7dSKrzysztof Karas scheduler_write_config_json(struct spdk_json_write_ctx *w)
37b05d4a7dSKrzysztof Karas {
38b05d4a7dSKrzysztof Karas struct spdk_scheduler *scheduler;
39b05d4a7dSKrzysztof Karas uint64_t scheduler_period;
40b05d4a7dSKrzysztof Karas
41b05d4a7dSKrzysztof Karas assert(w != NULL);
42b05d4a7dSKrzysztof Karas
43b05d4a7dSKrzysztof Karas scheduler = spdk_scheduler_get();
44b05d4a7dSKrzysztof Karas if (scheduler == NULL) {
45b05d4a7dSKrzysztof Karas SPDK_ERRLOG("Unable to get scheduler info\n");
46b05d4a7dSKrzysztof Karas return;
47b05d4a7dSKrzysztof Karas }
48b05d4a7dSKrzysztof Karas
49b05d4a7dSKrzysztof Karas scheduler_period = spdk_scheduler_get_period();
50b05d4a7dSKrzysztof Karas
51b05d4a7dSKrzysztof Karas spdk_json_write_array_begin(w);
52b05d4a7dSKrzysztof Karas
53b05d4a7dSKrzysztof Karas spdk_json_write_object_begin(w);
54b05d4a7dSKrzysztof Karas spdk_json_write_named_string(w, "method", "framework_set_scheduler");
55b05d4a7dSKrzysztof Karas spdk_json_write_named_object_begin(w, "params");
56b05d4a7dSKrzysztof Karas spdk_json_write_named_string(w, "name", scheduler->name);
57b05d4a7dSKrzysztof Karas if (scheduler_period != 0) {
58b05d4a7dSKrzysztof Karas spdk_json_write_named_uint32(w, "period", scheduler_period);
59b05d4a7dSKrzysztof Karas }
60b05d4a7dSKrzysztof Karas spdk_json_write_object_end(w);
61b05d4a7dSKrzysztof Karas spdk_json_write_object_end(w);
62b05d4a7dSKrzysztof Karas
63b05d4a7dSKrzysztof Karas spdk_json_write_array_end(w);
64b05d4a7dSKrzysztof Karas }
65b05d4a7dSKrzysztof Karas
66a86e40f3STomasz Zawadzki static struct spdk_subsystem g_spdk_subsystem_scheduler = {
67a86e40f3STomasz Zawadzki .name = "scheduler",
68a86e40f3STomasz Zawadzki .init = scheduler_subsystem_init,
69a86e40f3STomasz Zawadzki .fini = scheduler_subsystem_fini,
70b05d4a7dSKrzysztof Karas .write_config_json = scheduler_write_config_json,
71a86e40f3STomasz Zawadzki };
72a86e40f3STomasz Zawadzki
73a86e40f3STomasz Zawadzki SPDK_SUBSYSTEM_REGISTER(g_spdk_subsystem_scheduler);
74