linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] sched: Make preempt_enable_no_resched() behave like preempt_enable() on PREEMPT_RT
@ 2022-03-01 18:30 Sebastian Andrzej Siewior
  2022-03-01 20:14 ` Peter Zijlstra
  0 siblings, 1 reply; 3+ messages in thread
From: Sebastian Andrzej Siewior @ 2022-03-01 18:30 UTC (permalink / raw)
  To: linux-kernel
  Cc: Ben Segall, Daniel Bristot de Oliveira, Dietmar Eggemann,
	Ingo Molnar, Juri Lelli, Mel Gorman, Peter Zijlstra,
	Steven Rostedt, Thomas Gleixner, Vincent Guittot

From: Thomas Gleixner <tglx@linutronix.de>

Use the distinction that has been made earlier between
preempt_enable_no_resched() and sched_preempt_enable_no_resched().
sched_preempt_enable_no_resched() is used within the scheduler where an
immediate schedule() follows. preempt_enable_no_resched() is used
outside of the scheduler and an immediate schedule() invocation may not
follow for other reasons.

The lack of an immediate schedule() invocation matters on PREEMPT_RT
where it will introduce latencies while the scheduler expects a context
switch.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
 include/linux/preempt.h | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/include/linux/preempt.h b/include/linux/preempt.h
index b4381f255a5ca..582e43856a532 100644
--- a/include/linux/preempt.h
+++ b/include/linux/preempt.h
@@ -210,7 +210,11 @@ do { \
 	preempt_count_dec(); \
 } while (0)
 
-#define preempt_enable_no_resched() sched_preempt_enable_no_resched()
+#ifdef CONFIG_PREEMPT_RT
+# define preempt_enable_no_resched() preempt_enable()
+#else
+# define preempt_enable_no_resched() sched_preempt_enable_no_resched()
+#endif
 
 #define preemptible()	(preempt_count() == 0 && !irqs_disabled())
 
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] sched: Make preempt_enable_no_resched() behave like preempt_enable() on PREEMPT_RT
  2022-03-01 18:30 [PATCH] sched: Make preempt_enable_no_resched() behave like preempt_enable() on PREEMPT_RT Sebastian Andrzej Siewior
@ 2022-03-01 20:14 ` Peter Zijlstra
  2022-03-01 20:23   ` Sebastian Andrzej Siewior
  0 siblings, 1 reply; 3+ messages in thread
From: Peter Zijlstra @ 2022-03-01 20:14 UTC (permalink / raw)
  To: Sebastian Andrzej Siewior
  Cc: linux-kernel, Ben Segall, Daniel Bristot de Oliveira,
	Dietmar Eggemann, Ingo Molnar, Juri Lelli, Mel Gorman,
	Steven Rostedt, Thomas Gleixner, Vincent Guittot

On Tue, Mar 01, 2022 at 07:30:32PM +0100, Sebastian Andrzej Siewior wrote:
> From: Thomas Gleixner <tglx@linutronix.de>
> 
> Use the distinction that has been made earlier between
> preempt_enable_no_resched() and sched_preempt_enable_no_resched().
> sched_preempt_enable_no_resched() is used within the scheduler where an
> immediate schedule() follows. preempt_enable_no_resched() is used
> outside of the scheduler and an immediate schedule() invocation may not
> follow for other reasons.
> 
> The lack of an immediate schedule() invocation matters on PREEMPT_RT
> where it will introduce latencies while the scheduler expects a context
> switch.
> 
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> ---
>  include/linux/preempt.h | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/include/linux/preempt.h b/include/linux/preempt.h
> index b4381f255a5ca..582e43856a532 100644
> --- a/include/linux/preempt.h
> +++ b/include/linux/preempt.h
> @@ -210,7 +210,11 @@ do { \
>  	preempt_count_dec(); \
>  } while (0)
>  
> -#define preempt_enable_no_resched() sched_preempt_enable_no_resched()
> +#ifdef CONFIG_PREEMPT_RT
> +# define preempt_enable_no_resched() preempt_enable()
> +#else
> +# define preempt_enable_no_resched() sched_preempt_enable_no_resched()
> +#endif

Ignoring !x86 for a moment:

arch/x86/mm/kmmio.c:    preempt_enable_no_resched();
arch/x86/mm/kmmio.c:    preempt_enable_no_resched();
include/linux/preempt.h:#define sched_preempt_enable_no_resched() \
include/linux/preempt.h:#define preempt_enable_no_resched() sched_preempt_enable_no_resched()
include/linux/preempt.h:#define preempt_enable_no_resched_notrace() \
include/linux/preempt.h:#define sched_preempt_enable_no_resched()       barrier()
include/linux/preempt.h:#define preempt_enable_no_resched()             barrier()
include/linux/preempt.h:#define preempt_enable_no_resched_notrace()     barrier()
include/linux/preempt.h:#undef sched_preempt_enable_no_resched
include/linux/preempt.h:#undef preempt_enable_no_resched
include/linux/preempt.h:#undef preempt_enable_no_resched_notrace
kernel/sched/core.c:            preempt_enable_no_resched();
kernel/sched/core.c:                    preempt_enable_no_resched();
kernel/sched/core.c:            sched_preempt_enable_no_resched();
kernel/sched/core.c:    sched_preempt_enable_no_resched();
kernel/sched/core.c:            sched_preempt_enable_no_resched();
kernel/sched/core.c:            preempt_enable_no_resched_notrace();
kernel/sched/core.c:            preempt_enable_no_resched_notrace();
kernel/sched/core.c:            sched_preempt_enable_no_resched();
kernel/sched/core.c:    sched_preempt_enable_no_resched();
kernel/signal.c:                preempt_enable_no_resched();
kernel/smpboot.c:                       preempt_enable_no_resched();
lib/smp_processor_id.c: preempt_enable_no_resched_notrace();


Surely we can audit that... At a glance the proposed patch does more
harm than good. Only the kmmio case looks obviousl fail, but then IIRC
kmmio had worse problems.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] sched: Make preempt_enable_no_resched() behave like preempt_enable() on PREEMPT_RT
  2022-03-01 20:14 ` Peter Zijlstra
@ 2022-03-01 20:23   ` Sebastian Andrzej Siewior
  0 siblings, 0 replies; 3+ messages in thread
From: Sebastian Andrzej Siewior @ 2022-03-01 20:23 UTC (permalink / raw)
  To: Peter Zijlstra
  Cc: linux-kernel, Ben Segall, Daniel Bristot de Oliveira,
	Dietmar Eggemann, Ingo Molnar, Juri Lelli, Mel Gorman,
	Steven Rostedt, Thomas Gleixner, Vincent Guittot

On 2022-03-01 21:14:32 [+0100], Peter Zijlstra wrote:
> Ignoring !x86 for a moment:
> 
> arch/x86/mm/kmmio.c:    preempt_enable_no_resched();
> arch/x86/mm/kmmio.c:    preempt_enable_no_resched();
> include/linux/preempt.h:#define sched_preempt_enable_no_resched() \
> include/linux/preempt.h:#define preempt_enable_no_resched() sched_preempt_enable_no_resched()
> include/linux/preempt.h:#define preempt_enable_no_resched_notrace() \
> include/linux/preempt.h:#define sched_preempt_enable_no_resched()       barrier()
> include/linux/preempt.h:#define preempt_enable_no_resched()             barrier()
> include/linux/preempt.h:#define preempt_enable_no_resched_notrace()     barrier()
> include/linux/preempt.h:#undef sched_preempt_enable_no_resched
> include/linux/preempt.h:#undef preempt_enable_no_resched
> include/linux/preempt.h:#undef preempt_enable_no_resched_notrace
> kernel/sched/core.c:            preempt_enable_no_resched();
> kernel/sched/core.c:                    preempt_enable_no_resched();
> kernel/sched/core.c:            sched_preempt_enable_no_resched();
> kernel/sched/core.c:    sched_preempt_enable_no_resched();
> kernel/sched/core.c:            sched_preempt_enable_no_resched();
> kernel/sched/core.c:            preempt_enable_no_resched_notrace();
> kernel/sched/core.c:            preempt_enable_no_resched_notrace();
> kernel/sched/core.c:            sched_preempt_enable_no_resched();
> kernel/sched/core.c:    sched_preempt_enable_no_resched();
> kernel/signal.c:                preempt_enable_no_resched();
> kernel/smpboot.c:                       preempt_enable_no_resched();
> lib/smp_processor_id.c: preempt_enable_no_resched_notrace();
> 
> 
> Surely we can audit that... At a glance the proposed patch does more
> harm than good. Only the kmmio case looks obviousl fail, but then IIRC
> kmmio had worse problems.

I was looking at the same before posting it. The majority of it
disappeared over time after certain someone made it worthless for
modules. So I'm dropping it then.
Does it make sense to keep sched_preempt_enable_no_resched() or should I
move everything to preempt_enable_no_resched()?

Sebastian

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-03-01 20:27 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-01 18:30 [PATCH] sched: Make preempt_enable_no_resched() behave like preempt_enable() on PREEMPT_RT Sebastian Andrzej Siewior
2022-03-01 20:14 ` Peter Zijlstra
2022-03-01 20:23   ` Sebastian Andrzej Siewior

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).