Messages in this thread | | | Date | Tue, 22 Apr 2008 09:03:04 +0800 | From | Herbert Xu <> | Subject | Re: 2.6.25-git2: BUG: unable to handle kernel paging request at ffffffffffffffff |
| |
On Mon, Apr 21, 2008 at 08:49:58AM -0700, Linus Torvalds wrote: > > That is *not* the main problem. > > If you use "rcu_dereference()" on the wrong access, it not only loses the > "smp_read_barrier_depends()" (which is a no-op on all sane architectures > anyway), but it loses the ACCESS_ONCE() thing *entirely*.
Actually rcu_dereference didn't have ACCESS_ONCE when I did this. That only appearaed later with the preemptible RCU work.
The original purpose of rcu_dereference was exactly to replace the explicit barriers that people were using for RCU, nothing more, nothing less.
Oh and I totally agree that the compiler is going to generate insane code whenever ACCESS_ONCE is used. In this case we may have avoided it by rearranging the code, but in general the introduction of ACCESS_ONCE in rcu_dereference is likely to have a negative impact on the code generated.
Remember that "volatile" discussion? I think this is where it all came from.
Cheers, -- Visit Openswan at http://www.openswan.org/ Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
| |