Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1518637

Re: task isolation discussion at Linux Plumbers

From Andy Lutomirski <luto@amacapital.net>
Newsgroups linux.kernel
Subject Re: task isolation discussion at Linux Plumbers
Date 2016-11-10 02:50 +0100
Message-ID <sBMF3-7dD-9@gated-at.bofh.it> (permalink)
References <s6U5P-8nJ-3@gated-at.bofh.it> <sAbHz-1Cs-7@gated-at.bofh.it> <sBqbv-AT-5@gated-at.bofh.it> <sBz59-6zy-75@gated-at.bofh.it> <sBF0S-1Ui-29@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Wed, Nov 9, 2016 at 9:38 AM, Paul E. McKenney
<paulmck@linux.vnet.ibm.com> wrote:

Are you planning on changing rcu_nmi_enter()?  It would make it easier
to figure out how they interact if I could see the code.

> diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> index dbf20b058f48..342c8ee402d6 100644
> --- a/kernel/rcu/tree.c
> +++ b/kernel/rcu/tree.c


>  /*
> @@ -305,17 +318,22 @@ static void rcu_dynticks_eqs_enter(void)
>  static void rcu_dynticks_eqs_exit(void)
>  {
>         struct rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks);
> +       int seq;
>
>         /*
> -        * CPUs seeing atomic_inc() must see prior idle sojourns,
> +        * CPUs seeing atomic_inc_return() must see prior idle sojourns,
>          * and we also must force ordering with the next RCU read-side
>          * critical section.
>          */
> -       smp_mb__before_atomic(); /* See above. */
> -       atomic_inc(&rdtp->dynticks);
> -       smp_mb__after_atomic(); /* See above. */
> +       seq = atomic_inc_return(&rdtp->dynticks);
>         WARN_ON_ONCE(IS_ENABLED(CONFIG_RCU_EQS_DEBUG) &&
> -                    !(atomic_read(&rdtp->dynticks) & 0x1));
> +                    !(seq & RCU_DYNTICK_CTRL_CTR));

I think there's still a race here.  Suppose we're running this code on
cpu n and...

> +       if (seq & RCU_DYNTICK_CTRL_MASK) {
> +               rcu_eqs_special_exit();
> +               /* Prefer duplicate flushes to losing a flush. */
> +               smp_mb__before_atomic(); /* NMI safety. */

... another CPU changes the page tables and calls rcu_eqs_special_set(n) here.

That CPU expects that we will flush prior to continuing, but we won't.
Admittedly it's highly unlikely that any stale TLB entries would be
created yet, but nothing rules it out.

> +               atomic_and(~RCU_DYNTICK_CTRL_MASK, &rdtp->dynticks);
> +       }

Maybe the way to handle it is something like:

this_cpu_write(rcu_nmi_needs_eqs_special, 1);
barrier();

/* NMI here will call rcu_eqs_special_exit() regardless of the value
in dynticks */

atomic_and(...);
smp_mb__after_atomic();
rcu_eqs_special_exit();

barrier();
this_cpu_write(rcu_nmi_needs_eqs_special, 0);


Then rcu_nmi_enter() would call rcu_eqs_special_exit() if the dynticks
bit is set *or* rcu_nmi_needs_eqs_special is set.

Does that make sense?

--Andy

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Re: task isolation discussion at Linux Plumbers "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2016-11-09 02:50 +0100
  Re: task isolation discussion at Linux Plumbers Andy Lutomirski <luto@amacapital.net> - 2016-11-09 12:20 +0100
    Re: task isolation discussion at Linux Plumbers "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2016-11-09 18:40 +0100
      Re: task isolation discussion at Linux Plumbers Will Deacon <will.deacon@arm.com> - 2016-11-09 20:00 +0100
        Re: task isolation discussion at Linux Plumbers "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2016-11-09 20:20 +0100
      Re: task isolation discussion at Linux Plumbers Andy Lutomirski <luto@amacapital.net> - 2016-11-10 02:50 +0100
        Re: task isolation discussion at Linux Plumbers "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2016-11-10 06:00 +0100
          Re: task isolation discussion at Linux Plumbers "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2016-11-10 06:20 +0100
          Re: task isolation discussion at Linux Plumbers Andy Lutomirski <luto@amacapital.net> - 2016-11-11 18:10 +0100

csiph-web