Re: [PATCH v2 2/5] preempt/dynamic: Introduce preempt mode accessors
From: Valentin Schneider <hidden>
Date: 2021-11-11 10:56:17
Also in:
linux-kbuild, lkml
On 11/11/21 09:54, Marco Elver wrote:
On Wed, Nov 10, 2021 at 08:24PM +0000, Valentin Schneider wrote: [...]quoted
+#ifdef CONFIG_PREEMPT_DYNAMIC + +extern bool is_preempt_none(void); +extern bool is_preempt_voluntary(void); +extern bool is_preempt_full(void); + +#else + +#define is_preempt_none() IS_ENABLED(CONFIG_PREEMPT_NONE) +#define is_preempt_voluntary() IS_ENABLED(CONFIG_PREEMPT_VOLUNTARY) +#define is_preempt_full() IS_ENABLED(CONFIG_PREEMPT) + +#endif + +#define is_preempt_rt() IS_ENABLED(CONFIG_PREEMPT_RT) +Can these callables be real functions in all configs, making the !DYNAMIC ones just static inline bool ones? That'd catch invalid use in #if etc. in all configs.
Ack
quoted
/* * Does a critical section need to be broken due to another * task waiting?: (technically does not depend on CONFIG_PREEMPTION,diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 97047aa7b6c2..9db7f77e53c3 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c@@ -6638,6 +6638,17 @@ static void __init preempt_dynamic_init(void) } } +#define PREEMPT_MODE_ACCESSOR(mode) \ + bool is_preempt_##mode(void) \ + { \ + WARN_ON_ONCE(preempt_dynamic_mode == preempt_dynamic_undefined); \ + return preempt_dynamic_mode == preempt_dynamic_##mode; \ + }This needs an EXPORT_SYMBOL, so it's usable from modules like the kcsan_test module.
Ah, wasn't sure about that one, thanks!