lkml.org 
[lkml]   [2012]   [Sep]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH tip/core/rcu 10/26] rcu: Exit RCU extended QS on kernel preemption after irq/exception
    From
    Date
    On Thu, 2012-08-30 at 14:05 -0700, Paul E. McKenney wrote:
    > From: Frederic Weisbecker <fweisbec@gmail.com>
    >
    > When an exception or an irq exits, and we are going to resume into
    > interrupted kernel code, the low level architecture code calls
    > preempt_schedule_irq() if there is a need to reschedule.
    >
    > If the interrupt/exception occured between a call to rcu_user_enter()
    > (from syscall exit, exception exit, do_notify_resume exit, ...) and
    > a real resume to userspace (iret,...), preempt_schedule_irq() can be
    > called whereas RCU thinks we are in userspace. But preempt_schedule_irq()
    > is going to run kernel code and may be some RCU read side critical
    > section. We must exit the userspace extended quiescent state before
    > we call it.
    >
    > To solve this, just call rcu_user_exit() in the beginning of
    > preempt_schedule_irq().

    > ---
    > kernel/sched/core.c | 1 +
    > 1 files changed, 1 insertions(+), 0 deletions(-)
    >
    > diff --git a/kernel/sched/core.c b/kernel/sched/core.c
    > index 07c6d9a..0bd599b 100644
    > --- a/kernel/sched/core.c
    > +++ b/kernel/sched/core.c
    > @@ -3564,6 +3564,7 @@ asmlinkage void __sched preempt_schedule_irq(void)
    > /* Catch callers which need to be fixed */
    > BUG_ON(ti->preempt_count || !irqs_disabled());
    >
    > + rcu_user_exit();
    > do {
    > add_preempt_count(PREEMPT_ACTIVE);
    > local_irq_enable();

    But in this case you want to restart the tick as well, are we going to
    add a nohz_user_exit() like call as well, or do we have something that
    does both?


    \
     
     \ /
      Last update: 2012-09-06 19:42    [W:3.469 / U:2.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site