mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: "Paul E. McKenney" <paulmck@us.ibm.com>
Cc: linux-kernel@vger.kernel.org, Esben Nielsen <simlo@phys.au.dk>
Subject: Re: [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-07
Date: Wed, 23 Mar 2005 07:33:17 +0100	[thread overview]
Message-ID: <20050323063317.GB31626@elte.hu> (raw)
In-Reply-To: <20050323061601.GE1294@us.ibm.com>


* Paul E. McKenney <paulmck@us.ibm.com> wrote:

> +#ifdef CONFIG_PREEMPT_RCU
> +
> +void rcu_read_lock(void)
> +{
> +	if (current->rcu_read_lock_nesting++ == 0) {
> +		current->rcu_data = &get_cpu_var(rcu_data);
> +		atomic_inc(&current->rcu_data->active_readers);
> +		put_cpu_var(rcu_data);
> 
> Need an smp_mb() here for non-x86 CPUs.  Otherwise, the CPU can
> re-order parts of the critical section to precede the rcu_read_lock().
> Could precede the put_cpu_var(), but why increase latency?

ok. It's enough to put a barrier into the else branch here, because the
atomic op in the main brain is a barrier by itself.

> +void rcu_read_unlock(void)
> +{
[...]
> And need an smp_mb() here, again for non-x86 CPUs.

ok.

> Assuming that the memory barriers are added, I can see a bunch of ways
> for races to extend grace periods, but none so far that result in the
> fatal too-short grace period.  Since rcu_qsctr_inc() refuses to
> increment the quiescent-state counter on any CPU that started an RCU
> read-side critical section that has not yet completed, any long
> critical section will have a corresponding CPU that will refuse to go
> through a quiescent state.  And that will prevent the grace period
> from completing.

i'm worried about the following scenario: what happens when a task is
migrated from CPU#1 to CPU#2, while in an RCU read section that it
acquired on CPU#1, and queues a callback. E.g. d_free() does a
call_rcu(), to queue the freeing of the dentry.

That callback will be queued on CPU#2 - while the task still keeps
current->rcu_data of CPU#1. It also means that CPU#2's read counter did
_not_ get increased - and a too short grace period may occur.

it seems to me that that only safe method is to pick an 'RCU CPU' when
first entering the read section, and then sticking to it, no matter
where the task gets migrated to. Or to 'migrate' the +1 read count from
one CPU to the other, within the scheduler.

the 'migrate read count' solution seems more promising, as it would keep
other parts of the RCU code unchanged. [ But it seems to break the nice
'flip pointers' method you found to force a grace period. If a 'read
section' can migrate from one CPU to another then it can migrate back as
well, at which point it cannot have the 'old' pointer. Maybe it would
still work better than no flip pointers. ]

	Ingo

  reply	other threads:[~2005-03-23  6:33 UTC|newest]

Thread overview: 92+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-03-19 19:16 [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-00 Ingo Molnar
2005-03-20  0:24 ` Lee Revell
2005-03-21 15:42   ` K.R. Foley
2005-03-20  1:33 ` Lee Revell
2005-03-20  1:50   ` K.R. Foley
2005-03-20  4:32     ` Lee Revell
2005-03-20 22:40       ` Paul E. McKenney
2005-03-20 17:45 ` Paul E. McKenney
2005-03-21  8:53   ` Ingo Molnar
2005-03-21  9:01     ` Ingo Molnar
2005-03-21  9:06       ` [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-01 Ingo Molnar
2005-03-21 23:10         ` Magnus Naeslund(t)
2005-03-22  5:40           ` Paul E. McKenney
2005-03-22  8:50             ` Ingo Molnar
2005-03-22 13:56             ` Magnus Naeslund(t)
2005-03-23  5:46               ` Paul E. McKenney
2005-03-22  5:43         ` Paul E. McKenney
2005-03-22  7:24           ` Ingo Molnar
2005-03-22  9:23             ` Ingo Molnar
2005-03-22  9:32               ` Ingo Molnar
2005-03-22 10:01                 ` [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-05 Ingo Molnar
2005-03-22 11:28                   ` [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-07 Ingo Molnar
2005-03-22 15:06                     ` K.R. Foley
2005-03-22 18:05                     ` Magnus Naeslund(t)
2005-03-23  6:16                     ` Paul E. McKenney
2005-03-23  6:33                       ` Ingo Molnar [this message]
2005-03-23  6:37                         ` Ingo Molnar
2005-03-24  6:06                           ` Paul E. McKenney
2005-03-23  7:16                         ` Ingo Molnar
2005-03-23  7:54                           ` Steven Rostedt
2005-03-23  7:58                             ` Ingo Molnar
2005-03-23  8:29                           ` Peter Zijlstra
2005-03-23  9:03                             ` Ingo Molnar
2005-03-24  6:45                               ` Paul E. McKenney
2005-03-23 21:46                           ` Ingo Molnar
2005-03-24  6:59                             ` Paul E. McKenney
2005-03-24  6:38                           ` Paul E. McKenney
2005-03-23  9:38                         ` Herbert Xu
2005-03-23  9:49                           ` Herbert Xu
2005-03-24  6:52                             ` Paul E. McKenney
2005-03-24  5:28                         ` Paul E. McKenney
2005-03-24  5:34                           ` Ingo Molnar
2005-03-24  7:46                             ` Paul E. McKenney
2005-03-24  8:31                             ` Steven Rostedt
2005-03-24  8:47                               ` Steven Rostedt
2005-03-24 10:45                                 ` Ingo Molnar
2005-03-24 11:39                                 ` Ingo Molnar
2005-03-24 14:33                                   ` Steven Rostedt
2005-03-24 17:51                                     ` Ingo Molnar
2005-03-24 18:17                                     ` Ingo Molnar
2005-03-24 23:05                                   ` Esben Nielsen
2005-03-25  6:19                                     ` Ingo Molnar
2005-03-26 16:31                                       ` Steven Rostedt
2005-03-26 19:11                                         ` Ingo Molnar
2005-03-26 16:04                                     ` Steven Rostedt
2005-03-30  6:31                                       ` Steven Rostedt
2005-03-30  6:50                                         ` Ingo Molnar
2005-03-30 16:46                                           ` Steven Rostedt
2005-03-30 19:44                                             ` Esben Nielsen
2005-03-30 19:56                                               ` Steven Rostedt
2005-03-30 21:39                                                 ` Steven Rostedt
2005-03-30 21:43                                                   ` Steven Rostedt
2005-03-31 11:03                                                   ` Ingo Molnar
2005-03-31 12:03                                                     ` Esben Nielsen
2005-03-31 12:14                                                       ` Steven Rostedt
2005-03-31 13:33                                                         ` Ingo Molnar
2005-03-31 12:22                                                     ` Steven Rostedt
2005-03-31 12:36                                                     ` Steven Rostedt
2005-03-31 12:58                                                       ` Steven Rostedt
2005-03-31 13:28                                                         ` Ingo Molnar
2005-03-31 12:49                                                     ` Steven Rostedt
2005-03-31 14:10                                                       ` Ingo Molnar
2005-03-31 17:41                                                         ` Steven Rostedt
2005-03-31 17:49                                                           ` Ingo Molnar
2005-03-31 18:17                                                             ` Gene Heskett
2005-03-31 21:00                                                               ` [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-07 (update) Gene Heskett
2005-03-31 20:22                                                             ` [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-07 Steven Rostedt
2005-04-01  0:59                                                             ` Steven Rostedt
2005-04-01  4:43                                                               ` Ingo Molnar
2005-04-01  5:13                                                                 ` Steven Rostedt
2005-04-01  5:19                                                                   ` Ingo Molnar
2005-04-01 12:27                                                                     ` Steven Rostedt
2005-04-07 21:21                                                                       ` Steven Rostedt
2005-04-10 10:31                                                                         ` Ingo Molnar
2005-04-10 15:06                                                                           ` Steven Rostedt
2005-03-24 10:42                               ` Ingo Molnar
2005-03-23  9:40                       ` Herbert Xu
2005-03-23  9:48                         ` Herbert Xu
2005-03-23  5:23                   ` [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-05 Paul E. McKenney
2005-03-23  4:48                 ` [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-01 Paul E. McKenney
2005-03-23  6:21                   ` Ingo Molnar
2005-03-22  8:59           ` Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20050323063317.GB31626@elte.hu \
    --to=mingo@elte.hu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paulmck@us.ibm.com \
    --cc=simlo@phys.au.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®