lkml.org 
[lkml]   [2010]   [Dec]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC PATCH 06/15] nohz_task: Keep the tick if rcu needs it
    On Mon, Dec 20, 2010 at 04:58:20PM +0100, Peter Zijlstra wrote:
    > On Mon, 2010-12-20 at 16:24 +0100, Frederic Weisbecker wrote:
    >
    > > @@ -1634,7 +1633,7 @@ static int __rcu_pending(struct rcu_state *rsp, struct rcu_data *rdp)
    > > * by the current CPU, returning 1 if so. This function is part of the
    > > * RCU implementation; it is -not- an exported member of the RCU API.
    > > */
    > > -static int rcu_pending(int cpu)
    > > +int rcu_pending(int cpu)
    >
    > /me wonders about that comment.

    Yeah I'll need to update that.

    > > {
    > > return __rcu_pending(&rcu_sched_state, &per_cpu(rcu_sched_data, cpu)) ||
    > > __rcu_pending(&rcu_bh_state, &per_cpu(rcu_bh_data, cpu)) ||
    > > diff --git a/kernel/sched.c b/kernel/sched.c
    > > index 6dbae46..45bd6e2 100644
    > > --- a/kernel/sched.c
    > > +++ b/kernel/sched.c
    > > @@ -2470,10 +2470,16 @@ static void nohz_task_cpu_update(void *unused)
    > > int nohz_task_can_stop_tick(void)
    > > {
    > > struct rq *rq = this_rq();
    > > + int cpu;
    > >
    > > if (rq->nr_running > 1)
    > > return 0;
    > >
    > > + cpu = smp_processor_id();
    > > +
    > > + if (rcu_pending(cpu) || rcu_needs_cpu(cpu))
    > > + return 0;
    >
    > Arguable, rcu_needs_cpu() should imply rcu_pending(), because if there's
    > work still to be done, it needs the cpu, hmm?

    We certainly need to change the naming there.

    rcu_needs_cpu() checks if we need to do something with the local callbacks.
    rcu_pending() checks if we the current CPU needs to notify quiescent states
    because a new grace period has started.

    So now that rcu_pending() is exported we probably need to refine the naming.
    rcu_callbacks_pending() and rcu_grace_period_pending(), or something like
    this.


    > > return 1;
    > > }
    > >
    >
    > This patch also implies you broke stuff with #4 because it would put the
    > machine to sleep while RCU still had bits to do, not very nice.

    Nope, the new config can only be built after [RFC PATCH 11/15] x86: Nohz task support

    I know I split up the patches in some unusual way but I did that on purpose:
    I wanted to have a finegrained patchset so that it's more reviewable than a big
    "core support" - "arch support" dual patch based style.

    But I ensured the new config can not be enabled before it's entirely buildable
    and has no known bugs.


    \
     
     \ /
      Last update: 2010-12-21 00:53    [W:4.167 / U:0.908 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site