From: Sven-Thorsten Dietrich <sven-IsH+rWyeNGyzjR9+/8zPv5owlv4uC7bZ@public.gmane.org>
To: Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>,
Ingo Molnar <mingo-X9Un+BFzKDI@public.gmane.org>
Cc: Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>,
Leon Woestenberg
<leon.woestenberg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Alan Cox <alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org>,
Mark Brown
<broonie-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org>,
linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
rt-users <linux-rt-users-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"Ben Dooks (embedded platforms)"
<ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>,
Peter Zijlstra <peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
LKML <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH] cleanup sched_yield (sys)call nesting.
Date: Wed, 18 Nov 2009 20:48:35 -0800 [thread overview]
Message-ID: <1258606116.25022.57.camel@sven.thebigcorporation.com> (raw)
In-Reply-To: <alpine.LFD.2.00.0911182233510.24119-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
On Wed, 2009-11-18 at 22:34 +0100, Thomas Gleixner wrote:
> On Wed, 18 Nov 2009, Sven-Thorsten Dietrich wrote:
>
> > On Wed, 2009-11-18 at 21:56 +0100, Thomas Gleixner wrote:
> > > On Wed, 18 Nov 2009, Sven-Thorsten Dietrich wrote:
> > > > On Wed, 2009-11-18 at 17:52 +0100, Jean Delvare wrote:
> > > > > On Wed, 18 Nov 2009 17:28:53 +0100, Leon Woestenberg wrote:
> > > > > > On Wed, Nov 18, 2009 at 2:05 AM, Alan Cox <alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org> wrote:
> > > > > > > Our timers are very efficient and some day we will need to make jiffies a
> > > > > > > function and stop the timer ticking for best performance. At that point
> > > > > > > timers are probably the most efficient way to do much of this.
> > > > > >
> > > > > > The problem with I2C bitbanged is the stringent timing, we need a way
> > > > > > to have fine-grained sleeping
> > > > > > mixed with real-time tasks in order to make this work.
> > > > >
> > > > > FWIW, the problem that was initially reported has nothing to do with
> > > > > this. i2c-algo-bit used mdelay() during transactions, not yield().
> > > > > yield() is used only in once place, _between_ transactions attempts.
> > > > > There are no strict timing constraints there.
> > > > >
> > > >
> > > > I agree that dropping out sched_yield entirely should maybe start by
> > > > deprecating / flagging as a warning in sched_rt.c.
> > >
> > > Errm, that's unrelated to sched_rt.c.
> > >
> > > yield() in the kernel in general is needs to be deprecated.
> > >
> > > > This is just a minimal cleanup I stumbled across while looking at it -
> > > > to get away from the uglyness of calling into the syscall interface from
> > > > inside the Kernel.
> > >
> > > And why exactly is that ugly ?
> >
> > Calling from a function returning void into a non-void function and then
> > ignoring the return code ?
>
> Care to read what I wrote further down ?
>
> >> Which is completely irrelevant because the return code is always 0.
>
We are trying to get rid of __sched_yield calls from-inside-the-Kernel,
but sys_sched_yield() from user-space will remain.
This patch breaks out the in-Kernel interface for the yield()
functionality and deprecates it explicitly.
The sys_sched_yield() variety, however is not deprecated.
The objective is to deprecate *only* the in-kernel calls to
sched_yield(), in hopes of reducing new calls to sched_yield() being
added.
Eventually, when the in-Kernel calls are gone, the __sched_yield() would
be removed, and the first 2 hunks would essentially be reverted, leaving
only the user-space caller sys_sched_yield.
For the time being we add 2 lines and 2 braces of bulk, in hopes that
elsewhere this eliminates more __sched_yield() calls being added while
we work to eliminate the ones that exist already.
In regards to the return code, maybe we can talk about returning an
error when an RT task calls sys_sched_yield(). But that is another
topic.
Thanks,
Sven
Subject: Deprecate in-Kernel use of __sched_yield()
From: Sven-Thorsten Dietrich <sdietrich-l3A5Bk7waGM@public.gmane.org>
Break out the syscall interface from the deprecated in-kernel
sched_yield() interface that is to be removed.
Acked-by: Sven-Thorsten Dietrich <sdietrich-l3A5Bk7waGM@public.gmane.org>
---
kernel/sched.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
Index: linux-2.6.31-openSUSE-11.2/kernel/sched.c
===================================================================
--- linux-2.6.31-openSUSE-11.2.orig/kernel/sched.c
+++ linux-2.6.31-openSUSE-11.2/kernel/sched.c
@@ -6566,12 +6566,12 @@ SYSCALL_DEFINE3(sched_getaffinity, pid_t
}
/**
- * sys_sched_yield - yield the current processor to other threads.
+ * do_sched_yield - yield the current processor to other threads.
*
* This function yields the current CPU to other tasks. If there are no
* other threads running on this CPU then this function will return.
*/
-SYSCALL_DEFINE0(sched_yield)
+static inline void do_sched_yield(void)
{
struct rq *rq = this_rq_lock();
@@ -6588,7 +6588,11 @@ SYSCALL_DEFINE0(sched_yield)
preempt_enable_no_resched();
schedule();
+}
+SYSCALL_DEFINE0(sched_yield)
+{
+ do_sched_yield();
return 0;
}
@@ -6670,10 +6674,10 @@ EXPORT_SYMBOL(cond_resched_softirq);
* This is a shortcut for kernel-space yielding - it marks the
* thread runnable and calls sys_sched_yield().
*/
-void __sched yield(void)
+void __sched __deprecated yield(void)
{
set_current_state(TASK_RUNNING);
- sys_sched_yield();
+ do_sched_yield();
}
EXPORT_SYMBOL(yield);
next prev parent reply other threads:[~2009-11-19 4:48 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-07 19:01 yield() in i2c non-happy paths hits BUG under -rt patch Leon Woestenberg
[not found] ` <c384c5ea0911071101u7415d37o2611c542e5fae309-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-11-07 20:01 ` Jean Delvare
[not found] ` <20091107210147.3e754278-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-11-08 18:57 ` Sven-Thorsten Dietrich
[not found] ` <4AF7148C.9090706-IsH+rWyeNGyzjR9+/8zPv5owlv4uC7bZ@public.gmane.org>
2009-11-12 20:12 ` Jean Delvare
2009-11-13 22:03 ` Thomas Gleixner
2009-11-14 18:02 ` Jean Delvare
[not found] ` <alpine.LFD.2.00.0911132139560.24119-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2009-11-16 15:56 ` Mark Brown
[not found] ` <20091116155606.GC29479-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2009-11-18 0:50 ` Leon Woestenberg
2009-11-18 1:05 ` Alan Cox
[not found] ` <20091118010520.4cd397d4-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org>
2009-11-18 16:28 ` Leon Woestenberg
2009-11-18 16:52 ` Jean Delvare
[not found] ` <20091118175202.490989d8-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-11-18 20:36 ` Thomas Gleixner
2009-11-19 12:05 ` Jean Delvare
[not found] ` <20091119130526.23a69b85-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-11-19 12:59 ` Alan Cox
[not found] ` <20091119125906.6ad00edd-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org>
2009-11-19 13:06 ` Peter Zijlstra
2009-11-19 14:00 ` Jean Delvare
2009-11-19 14:15 ` Peter Zijlstra
2009-11-19 13:11 ` Thomas Gleixner
2009-11-19 13:21 ` Peter Zijlstra
2009-11-19 13:22 ` Thomas Gleixner
2009-11-19 13:18 ` Peter Zijlstra
2009-11-18 20:46 ` [PATCH] cleanup sched_yield (sys)call nesting Sven-Thorsten Dietrich
[not found] ` <1258577194.12429.86.camel-ZUMNgey8dAdBci4yedNfAfz91O0DMRRp0E9HWUfgJXw@public.gmane.org>
2009-11-18 20:56 ` Thomas Gleixner
[not found] ` <alpine.LFD.2.00.0911182153010.24119-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2009-11-18 21:04 ` Sven-Thorsten Dietrich
2009-11-18 21:34 ` Thomas Gleixner
[not found] ` <alpine.LFD.2.00.0911182233510.24119-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2009-11-19 4:48 ` Sven-Thorsten Dietrich [this message]
[not found] ` <1258606116.25022.57.camel-ZUMNgey8dAdBci4yedNfAfz91O0DMRRp0E9HWUfgJXw@public.gmane.org>
2009-11-19 10:36 ` Thomas Gleixner
2009-11-19 3:20 ` Ingo Molnar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1258606116.25022.57.camel@sven.thebigcorporation.com \
--to=sven-ish+rwyengyzjr9+/8zpv5owlv4uc7bz@public.gmane.org \
--cc=alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org \
--cc=ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org \
--cc=broonie-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org \
--cc=khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org \
--cc=leon.woestenberg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-rt-users-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mingo-X9Un+BFzKDI@public.gmane.org \
--cc=peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org \
--cc=tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).