xref: /spdk/module/event/subsystems/scheduler/scheduler.c (revision a6dbe3721eb3b5990707fc3e378c95e505dd8ab5)
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