[PATCH] sched: Change the name of preempt mode from full to low_latency

From: Yajun Deng
Date: Mon Sep 11 2023 - 17:27:11 EST


There is a similar name fully in Kconfig.preempt, but it corresponds to
PREEMPT_RT. In order to distinguish them, change the name of preempt mode
from full to low_latency.

Also, define a global array and variable that used to save preempt mode
name and size.

Signed-off-by: Yajun Deng <yajun.deng@xxxxxxxxx>
---
.../admin-guide/kernel-parameters.txt | 2 +-
include/linux/sched.h | 8 ++--
kernel/sched/core.c | 43 ++++++++++---------
kernel/sched/debug.c | 5 +--
kernel/sched/sched.h | 2 +
kernel/trace/trace.c | 4 +-
6 files changed, 32 insertions(+), 32 deletions(-)

diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 0a1731a0f0ef..9284fd7999d7 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -4581,7 +4581,7 @@
Select preemption mode if you have CONFIG_PREEMPT_DYNAMIC
none - Limited to cond_resched() calls
voluntary - Limited to cond_resched() and might_sleep() calls
- full - Any section that isn't explicitly preempt disabled
+ low_latency - Any section that isn't explicitly preempt disabled
can be preempted anytime.

print-fatal-signals=
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 6d1341b1673f..ea607a0ce6f6 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -2181,7 +2181,7 @@ static inline void cond_resched_rcu(void)

extern bool preempt_model_none(void);
extern bool preempt_model_voluntary(void);
-extern bool preempt_model_full(void);
+extern bool preempt_model_low_latency(void);

#else

@@ -2193,14 +2193,14 @@ static inline bool preempt_model_voluntary(void)
{
return IS_ENABLED(CONFIG_PREEMPT_VOLUNTARY);
}
-static inline bool preempt_model_full(void)
+static inline bool preempt_model_low_latency(void)
{
return IS_ENABLED(CONFIG_PREEMPT);
}

#endif

-static inline bool preempt_model_rt(void)
+static inline bool preempt_model_fully(void)
{
return IS_ENABLED(CONFIG_PREEMPT_RT);
}
@@ -2215,7 +2215,7 @@ static inline bool preempt_model_rt(void)
*/
static inline bool preempt_model_preemptible(void)
{
- return preempt_model_full() || preempt_model_rt();
+ return preempt_model_low_latency() || preempt_model_fully();
}

/*
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 2299a5cfbfb9..2abbc0baaae7 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -8705,7 +8705,7 @@ EXPORT_SYMBOL(__cond_resched_rwlock_write);
* preempt_schedule_notrace <- NOP
* irqentry_exit_cond_resched <- NOP
*
- * FULL:
+ * LOW_LATENCY:
* cond_resched <- RET0
* might_resched <- RET0
* preempt_schedule <- preempt_schedule
@@ -8717,21 +8717,25 @@ enum {
preempt_dynamic_undefined = -1,
preempt_dynamic_none,
preempt_dynamic_voluntary,
- preempt_dynamic_full,
+ preempt_dynamic_low_latency,
};
-
int preempt_dynamic_mode = preempt_dynamic_undefined;

+const char *preempt_modes[] = {
+ [preempt_dynamic_none] = "none",
+ [preempt_dynamic_voluntary] = "voluntary",
+ [preempt_dynamic_low_latency] = "low_latency",
+};
+int preempt_modes_size = ARRAY_SIZE(preempt_modes);
+
int sched_dynamic_mode(const char *str)
{
- if (!strcmp(str, "none"))
- return preempt_dynamic_none;
-
- if (!strcmp(str, "voluntary"))
- return preempt_dynamic_voluntary;
+ int i;

- if (!strcmp(str, "full"))
- return preempt_dynamic_full;
+ for (i = 0; i < preempt_modes_size; i++) {
+ if (!strcmp(str, preempt_modes[i]))
+ return i;
+ }

return -EINVAL;
}
@@ -8752,7 +8756,7 @@ static bool klp_override;
static void __sched_dynamic_update(int mode)
{
/*
- * Avoid {NONE,VOLUNTARY} -> FULL transitions from ever ending up in
+ * Avoid {NONE,VOLUNTARY} -> LOW_LATENCY transitions from ever ending up in
* the ZERO state, which is invalid.
*/
if (!klp_override)
@@ -8770,8 +8774,6 @@ static void __sched_dynamic_update(int mode)
preempt_dynamic_disable(preempt_schedule);
preempt_dynamic_disable(preempt_schedule_notrace);
preempt_dynamic_disable(irqentry_exit_cond_resched);
- if (mode != preempt_dynamic_mode)
- pr_info("Dynamic Preempt: none\n");
break;

case preempt_dynamic_voluntary:
@@ -8781,22 +8783,21 @@ static void __sched_dynamic_update(int mode)
preempt_dynamic_disable(preempt_schedule);
preempt_dynamic_disable(preempt_schedule_notrace);
preempt_dynamic_disable(irqentry_exit_cond_resched);
- if (mode != preempt_dynamic_mode)
- pr_info("Dynamic Preempt: voluntary\n");
break;

- case preempt_dynamic_full:
+ case preempt_dynamic_low_latency:
if (!klp_override)
preempt_dynamic_disable(cond_resched);
preempt_dynamic_disable(might_resched);
preempt_dynamic_enable(preempt_schedule);
preempt_dynamic_enable(preempt_schedule_notrace);
preempt_dynamic_enable(irqentry_exit_cond_resched);
- if (mode != preempt_dynamic_mode)
- pr_info("Dynamic Preempt: full\n");
break;
}

+ if (mode != preempt_dynamic_mode)
+ pr_info("Dynamic Preempt: %s\n", preempt_modes[mode]);
+
preempt_dynamic_mode = mode;
}

@@ -8860,8 +8861,8 @@ static void __init preempt_dynamic_init(void)
} else {
/* Default static call setting, nothing to do */
WARN_ON_ONCE(!IS_ENABLED(CONFIG_PREEMPT));
- preempt_dynamic_mode = preempt_dynamic_full;
- pr_info("Dynamic Preempt: full\n");
+ preempt_dynamic_mode = preempt_dynamic_low_latency;
+ pr_info("Dynamic Preempt: %s\n", preempt_modes[preempt_dynamic_mode]);
}
}
}
@@ -8876,7 +8877,7 @@ static void __init preempt_dynamic_init(void)

PREEMPT_MODEL_ACCESSOR(none);
PREEMPT_MODEL_ACCESSOR(voluntary);
-PREEMPT_MODEL_ACCESSOR(full);
+PREEMPT_MODEL_ACCESSOR(low_latency);

#else /* !CONFIG_PREEMPT_DYNAMIC */

diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
index 4c3d0d9f3db6..fd516dcff988 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
@@ -244,12 +244,9 @@ static ssize_t sched_dynamic_write(struct file *filp, const char __user *ubuf,

static int sched_dynamic_show(struct seq_file *m, void *v)
{
- static const char * preempt_modes[] = {
- "none", "voluntary", "full"
- };
int i;

- for (i = 0; i < ARRAY_SIZE(preempt_modes); i++) {
+ for (i = 0; i < preempt_modes_size; i++) {
if (preempt_dynamic_mode == i)
seq_puts(m, "(");
seq_puts(m, preempt_modes[i]);
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 04846272409c..6210c40f35da 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -3276,6 +3276,8 @@ extern int try_to_wake_up(struct task_struct *tsk, unsigned int state, int wake_

#ifdef CONFIG_PREEMPT_DYNAMIC
extern int preempt_dynamic_mode;
+extern const char *preempt_modes[];
+extern int preempt_modes_size;
extern int sched_dynamic_mode(const char *str);
extern void sched_dynamic_update(int mode);
#endif
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 2b4ded753367..3d731b4fea65 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -4394,8 +4394,8 @@ print_trace_header(struct seq_file *m, struct trace_iterator *iter)
buf->cpu,
preempt_model_none() ? "server" :
preempt_model_voluntary() ? "desktop" :
- preempt_model_full() ? "preempt" :
- preempt_model_rt() ? "preempt_rt" :
+ preempt_model_low_latency() ? "preempt" :
+ preempt_model_fully() ? "preempt_rt" :
"unknown",
/* These are reserved for later use */
0, 0, 0, 0);
--
2.25.1