public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@us.ibm.com>
To: Ingo Molnar <mingo@elte.hu>
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 22:38:02 -0800	[thread overview]
Message-ID: <20050324063802.GE1298@us.ibm.com> (raw)
In-Reply-To: <20050323071604.GA32712@elte.hu>

On Wed, Mar 23, 2005 at 08:16:04AM +0100, Ingo Molnar wrote:
> 
> * Ingo Molnar <mingo@elte.hu> wrote:
> 
> > 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.
> 
> i think the 'migrate read-count' method is not adequate either, because
> all callbacks queued within an RCU read section must be called after the
> lock has been dropped - while with the migration method CPU#1 would be
> free to process callbacks queued in the RCU read section still active on
> CPU#2.

Right -- the limitation is that you cannot declare a grace period
over until -all- RCU read-side critical sections that started before
the call_rcu() have completed.

> i'm wondering how much of a problem this is though. Can there be stale
> pointers at that point? Yes in theory, because code like:
> 
> 	rcu_read_lock();
> 	call_rcu(&dentry->d_rcu, d_callback);
> 	func(dentry->whatever);
> 	rcu_read_unlock();

In this code segment, a correct RCU will not invoke the callback
until after the rcu_read_unlock().  Ugly code, though.  But see
below...

> would be unsafe because the pointer is still accessed within the RCU
> read section, and if we get migrated from CPU#1 to CPU#2 after call_rcu
> but before dentry->whatever dereference, the callback may be processed
> early by CPU#1, making the dentry->whatever read operation unsafe.
> 
> the question is, does this occur in practice? Does existing RCU-using
> code use pointers it has queued for freeing, relying on the fact that
> the callback wont be processed until we drop the RCU read lock?

Using a pointer that had been passed to call_rcu() would be in theory
safe, but I would usually object to it.  In most cases, it would cause
confusion at the very least.  However, there are exceptions:

	rcu_read_lock();
	list_for_each_entry_rcu(p, head, list) {
		if (unlikely(p->status == DELETE_ME)) {
			spin_lock(&p->mutex);
			if (likely(p->status == DELETE_ME)) {
				p->status = DELETED;
				list_rcu(&p->list);
				call_rcu(&p->rcu, sublist_finalize_rcu);
			}
			spin_unlock(&p->mutex);
		}
	}
	rcu_read_unlock();

You can drop the spinlock before the call_rcu() if you want, but doing
so makes the code uglier.  Besides, you have to allow for the fact that
another instance of this same code might be running on the same list
on some other CPU.  You cannot invoke the callback until -both- CPUs/tasks
have exited their RCU read-side critical sections.

							Thanx, Paul

  parent reply	other threads:[~2005-03-24  6:38 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
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 [this message]
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=20050324063802.GE1298@us.ibm.com \
    --to=paulmck@us.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --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