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