kernel/sched/core.c | 3 --- 1 file changed, 3 deletions(-)
I see do_sched_yield's irq disable cover preempt disable. In this
function, I think preempt op may not work, or it may have some
special effect ? Thanks.
Signed-off-by: Wang You <wangyoua@uniontech.com>
---
kernel/sched/core.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index a68d1276bab0..b255e54c1d38 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -8487,10 +8487,7 @@ static void do_sched_yield(void)
schedstat_inc(rq->yld_count);
current->sched_class->yield_task(rq);
-
- preempt_disable();
rq_unlock_irq(rq, &rf);
- sched_preempt_enable_no_resched();
schedule();
}
--
2.20.1
On Wed, 23 Aug 2023 18:07:05 +0800 Wang You <wangyoua@uniontech.com> wrote: > I see do_sched_yield's irq disable cover preempt disable. In this > function, I think preempt op may not work, or it may have some > special effect ? Thanks. Why would it not work? > > Signed-off-by: Wang You <wangyoua@uniontech.com> > --- > kernel/sched/core.c | 3 --- > 1 file changed, 3 deletions(-) > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index a68d1276bab0..b255e54c1d38 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -8487,10 +8487,7 @@ static void do_sched_yield(void) > > schedstat_inc(rq->yld_count); > current->sched_class->yield_task(rq); > - > - preempt_disable(); > rq_unlock_irq(rq, &rf); > - sched_preempt_enable_no_resched(); The point of this is if an interrupt triggers here and NEED_RESCHED is set, then it will call schedule and possibly schedule out the task. When it gets scheduled back in, the first thing it will do is to call schedule again. The above code you deleted removes the spurious schedule. -- Steve > > schedule(); > }
© 2016 - 2025 Red Hat, Inc.