Re: [PATCH] cleanup sched_yield (sys)call nesting.
From: Ingo Molnar <hidden>
Date: 2009-11-19 03:21:59
Also in:
linux-i2c, lkml
* Sven-Thorsten Dietrich [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Subject: clean up chaining in sched_yield() From: Sven-Thorsten Dietrich <redacted> The call to sys_sched_yield for in-Kernel is messy. and the return code from sys_sched_yield is ignored when called from in-kernel. Signed-off-by: Sven-Thorsten Dietrich <redacted>diff --git a/kernel/sched.c b/kernel/sched.c index 3c11ae0..db2c0f9 100644 --- a/kernel/sched.c +++ b/kernel/sched.c@@ -6647,12 +6647,12 @@ SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len, } /** - * 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();@@ -6669,6 +6669,11 @@ SYSCALL_DEFINE0(sched_yield) preempt_enable_no_resched(); schedule(); +} + +SYSCALL_DEFINE0(sched_yield) +{ + do_sched_yield(); return 0; }@@ -6746,7 +6751,7 @@ EXPORT_SYMBOL(__cond_resched_softirq); void __sched yield(void) { set_current_state(TASK_RUNNING); - sys_sched_yield(); + do_sched_yield(); } EXPORT_SYMBOL(yield);
Why do you consider an in-kernel call to sys_*() 'messy'? It is not - and we rely on being able to do it with various syscalls. Also, your patch bloats the scheduler a bit, for no good reason. Thanks, Ingo