diff for duplicates of <20100407155929.GB2481@linux.vnet.ibm.com> diff --git a/a/1.txt b/N1/1.txt index bd8437f..51aef55 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,62 +1,46 @@ On Wed, Apr 07, 2010 at 04:56:50PM +0200, Eric Dumazet wrote: -> Le mercredi 07 avril 2010 =E0 14:57 +0100, David Howells a =E9crit : +> Le mercredi 07 avril 2010 à 14:57 +0100, David Howells a écrit : > > From: Paul E. McKenney <paulmck@linux.vnet.ibm.com> -> >=20 -> > This patch adds variants of rcu_dereference() that handle situation= -s -> > where the RCU-protected data structure cannot change, perhaps due t= -o -> > our holding the update-side lock, or where the RCU-protected pointe= -r is +> > +> > This patch adds variants of rcu_dereference() that handle situations +> > where the RCU-protected data structure cannot change, perhaps due to +> > our holding the update-side lock, or where the RCU-protected pointer is > > only to be fetched, not dereferenced. -> >=20 -> > The new rcu_access_pointer() primitive is for the case where the po= -inter -> > is be fetch and not dereferenced. This primitive may be used witho= -ut -> > protection, RCU or otherwise, due to the fact that it uses ACCESS_O= -NCE(). -> >=20 -> > The new rcu_dereference_protect() primitive is for the case where u= -pdates -> > are prevented, for example, due to holding the update-side lock. T= -his -> > primitive does neither ACCESS_ONCE() nor smp_read_barrier_depends()= -, so +> > +> > The new rcu_access_pointer() primitive is for the case where the pointer +> > is be fetch and not dereferenced. This primitive may be used without +> > protection, RCU or otherwise, due to the fact that it uses ACCESS_ONCE(). +> > +> > The new rcu_dereference_protect() primitive is for the case where updates +> > are prevented, for example, due to holding the update-side lock. This +> > primitive does neither ACCESS_ONCE() nor smp_read_barrier_depends(), so > > can only be used when updates are somehow prevented. -> >=20 +> > > > Suggested-by: David Howells <dhowells@redhat.com> > > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> > > Signed-off-by: David Howells <dhowells@redhat.com> > > --- -> >=20 +> > > > include/linux/rcupdate.h | 34 ++++++++++++++++++++++++++++++++++ > > 1 files changed, 34 insertions(+), 0 deletions(-) -> >=20 +> > > > diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h > > index 872a98e..a1b14b6 100644 > > --- a/include/linux/rcupdate.h > > +++ b/include/linux/rcupdate.h -> > @@ -209,9 +209,43 @@ static inline int rcu_read_lock_sched_held(voi= -d) +> > @@ -209,9 +209,43 @@ static inline int rcu_read_lock_sched_held(void) > > rcu_dereference_raw(p); \ > > }) -> > =20 +> > > > +/** > > + * rcu_access_pointer - fetch RCU pointer with no dereferencing > > + * -> > + * Return the value of the specified RCU-protected pointer, but om= -it the -> > + * smp_read_barrier_depends() and keep the ACCESS_ONCE(). This is= - useful -> > + * when the value of this pointer is accessed, but the pointer is = -not -> > + * dereferenced, for example, when testing an RCU-protected pointe= -r against -> > + * NULL. This may also be used in cases where update-side locks p= -revent -> > + * the value of the pointer from changing, but rcu_dereference_pro= -tect() +> > + * Return the value of the specified RCU-protected pointer, but omit the +> > + * smp_read_barrier_depends() and keep the ACCESS_ONCE(). This is useful +> > + * when the value of this pointer is accessed, but the pointer is not +> > + * dereferenced, for example, when testing an RCU-protected pointer against +> > + * NULL. This may also be used in cases where update-side locks prevent +> > + * the value of the pointer from changing, but rcu_dereference_protect() > > + * is a lighter-weight primitive for this use case. > > + */ > > +#define rcu_access_pointer(p) \ @@ -65,21 +49,14 @@ tect() > > + }) > > + > > +/** -> > + * rcu_dereference_protected - fetch RCU pointer when updates prev= -ented +> > + * rcu_dereference_protected - fetch RCU pointer when updates prevented > > + * -> > + * Return the value of the specified RCU-protected pointer, but om= -it -> > + * both the smp_read_barrier_depends() and the ACCESS_ONCE(). Thi= -s -> > + * is useful in cases where update-side locks prevent the value of= - the -> > + * pointer from changing. Please note that this primitive does -n= -ot- -> > + * prevent the compiler from repeating this reference or combining= - it -> > + * with other references, so it should not be used without protect= -ion +> > + * Return the value of the specified RCU-protected pointer, but omit +> > + * both the smp_read_barrier_depends() and the ACCESS_ONCE(). This +> > + * is useful in cases where update-side locks prevent the value of the +> > + * pointer from changing. Please note that this primitive does -not- +> > + * prevent the compiler from repeating this reference or combining it +> > + * with other references, so it should not be used without protection > > + * of appropriate locks. > > + */ > > +#define rcu_dereference_protected(p) \ @@ -88,25 +65,24 @@ ion > > + }) > > + > > #else /* #ifdef CONFIG_PROVE_RCU */ -> > =20 +> > > > #define rcu_dereference_check(p, c) rcu_dereference_raw(p) > > +#define rcu_access_pointer(p) ACCESS_ONCE(p) > > +#define rcu_dereference_protect(p) (p) -> > =20 +> > > > #endif /* #else #ifdef CONFIG_PROVE_RCU */ -> > =20 -> >=20 +> > +> > > > -- ->=20 -> This is not the version Paul posted.=20 +> +> This is not the version Paul posted. -I blew the name -- rcu_dereference_protected() is in fact a better name= -=2E +I blew the name -- rcu_dereference_protected() is in fact a better name. > Removing checks just to shutup warnings ? ->=20 +> > All the point is to get lockdep assistance, and you throw it away. ->=20 +> > We want to explicit the condition, so that RCU users can explicitly > state what protects their data. diff --git a/a/content_digest b/N1/content_digest index ca34797..cc781dc 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -11,64 +11,48 @@ "\00:1\0" "b\0" "On Wed, Apr 07, 2010 at 04:56:50PM +0200, Eric Dumazet wrote:\n" - "> Le mercredi 07 avril 2010 =E0 14:57 +0100, David Howells a =E9crit :\n" + "> Le mercredi 07 avril 2010 \303\240 14:57 +0100, David Howells a \303\251crit :\n" "> > From: Paul E. McKenney <paulmck@linux.vnet.ibm.com>\n" - "> >=20\n" - "> > This patch adds variants of rcu_dereference() that handle situation=\n" - "s\n" - "> > where the RCU-protected data structure cannot change, perhaps due t=\n" - "o\n" - "> > our holding the update-side lock, or where the RCU-protected pointe=\n" - "r is\n" + "> > \n" + "> > This patch adds variants of rcu_dereference() that handle situations\n" + "> > where the RCU-protected data structure cannot change, perhaps due to\n" + "> > our holding the update-side lock, or where the RCU-protected pointer is\n" "> > only to be fetched, not dereferenced.\n" - "> >=20\n" - "> > The new rcu_access_pointer() primitive is for the case where the po=\n" - "inter\n" - "> > is be fetch and not dereferenced. This primitive may be used witho=\n" - "ut\n" - "> > protection, RCU or otherwise, due to the fact that it uses ACCESS_O=\n" - "NCE().\n" - "> >=20\n" - "> > The new rcu_dereference_protect() primitive is for the case where u=\n" - "pdates\n" - "> > are prevented, for example, due to holding the update-side lock. T=\n" - "his\n" - "> > primitive does neither ACCESS_ONCE() nor smp_read_barrier_depends()=\n" - ", so\n" + "> > \n" + "> > The new rcu_access_pointer() primitive is for the case where the pointer\n" + "> > is be fetch and not dereferenced. This primitive may be used without\n" + "> > protection, RCU or otherwise, due to the fact that it uses ACCESS_ONCE().\n" + "> > \n" + "> > The new rcu_dereference_protect() primitive is for the case where updates\n" + "> > are prevented, for example, due to holding the update-side lock. This\n" + "> > primitive does neither ACCESS_ONCE() nor smp_read_barrier_depends(), so\n" "> > can only be used when updates are somehow prevented.\n" - "> >=20\n" + "> > \n" "> > Suggested-by: David Howells <dhowells@redhat.com>\n" "> > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>\n" "> > Signed-off-by: David Howells <dhowells@redhat.com>\n" "> > ---\n" - "> >=20\n" + "> > \n" "> > include/linux/rcupdate.h | 34 ++++++++++++++++++++++++++++++++++\n" "> > 1 files changed, 34 insertions(+), 0 deletions(-)\n" - "> >=20\n" + "> > \n" "> > diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h\n" "> > index 872a98e..a1b14b6 100644\n" "> > --- a/include/linux/rcupdate.h\n" "> > +++ b/include/linux/rcupdate.h\n" - "> > @@ -209,9 +209,43 @@ static inline int rcu_read_lock_sched_held(voi=\n" - "d)\n" + "> > @@ -209,9 +209,43 @@ static inline int rcu_read_lock_sched_held(void)\n" "> > \t\trcu_dereference_raw(p); \\\n" "> > \t})\n" - "> > =20\n" + "> > \n" "> > +/**\n" "> > + * rcu_access_pointer - fetch RCU pointer with no dereferencing\n" "> > + *\n" - "> > + * Return the value of the specified RCU-protected pointer, but om=\n" - "it the\n" - "> > + * smp_read_barrier_depends() and keep the ACCESS_ONCE(). This is=\n" - " useful\n" - "> > + * when the value of this pointer is accessed, but the pointer is =\n" - "not\n" - "> > + * dereferenced, for example, when testing an RCU-protected pointe=\n" - "r against\n" - "> > + * NULL. This may also be used in cases where update-side locks p=\n" - "revent\n" - "> > + * the value of the pointer from changing, but rcu_dereference_pro=\n" - "tect()\n" + "> > + * Return the value of the specified RCU-protected pointer, but omit the\n" + "> > + * smp_read_barrier_depends() and keep the ACCESS_ONCE(). This is useful\n" + "> > + * when the value of this pointer is accessed, but the pointer is not\n" + "> > + * dereferenced, for example, when testing an RCU-protected pointer against\n" + "> > + * NULL. This may also be used in cases where update-side locks prevent\n" + "> > + * the value of the pointer from changing, but rcu_dereference_protect()\n" "> > + * is a lighter-weight primitive for this use case.\n" "> > + */\n" "> > +#define rcu_access_pointer(p) \\\n" @@ -77,21 +61,14 @@ "> > +\t})\n" "> > +\n" "> > +/**\n" - "> > + * rcu_dereference_protected - fetch RCU pointer when updates prev=\n" - "ented\n" + "> > + * rcu_dereference_protected - fetch RCU pointer when updates prevented\n" "> > + *\n" - "> > + * Return the value of the specified RCU-protected pointer, but om=\n" - "it\n" - "> > + * both the smp_read_barrier_depends() and the ACCESS_ONCE(). Thi=\n" - "s\n" - "> > + * is useful in cases where update-side locks prevent the value of=\n" - " the\n" - "> > + * pointer from changing. Please note that this primitive does -n=\n" - "ot-\n" - "> > + * prevent the compiler from repeating this reference or combining=\n" - " it\n" - "> > + * with other references, so it should not be used without protect=\n" - "ion\n" + "> > + * Return the value of the specified RCU-protected pointer, but omit\n" + "> > + * both the smp_read_barrier_depends() and the ACCESS_ONCE(). This\n" + "> > + * is useful in cases where update-side locks prevent the value of the\n" + "> > + * pointer from changing. Please note that this primitive does -not-\n" + "> > + * prevent the compiler from repeating this reference or combining it\n" + "> > + * with other references, so it should not be used without protection\n" "> > + * of appropriate locks.\n" "> > + */\n" "> > +#define rcu_dereference_protected(p) \\\n" @@ -100,25 +77,24 @@ "> > +\t})\n" "> > +\n" "> > #else /* #ifdef CONFIG_PROVE_RCU */\n" - "> > =20\n" + "> > \n" "> > #define rcu_dereference_check(p, c)\trcu_dereference_raw(p)\n" "> > +#define rcu_access_pointer(p)\t\tACCESS_ONCE(p)\n" "> > +#define rcu_dereference_protect(p)\t(p)\n" - "> > =20\n" + "> > \n" "> > #endif /* #else #ifdef CONFIG_PROVE_RCU */\n" - "> > =20\n" - "> >=20\n" + "> > \n" + "> > \n" "> > --\n" - ">=20\n" - "> This is not the version Paul posted.=20\n" + "> \n" + "> This is not the version Paul posted. \n" "\n" - "I blew the name -- rcu_dereference_protected() is in fact a better name=\n" - "=2E\n" + "I blew the name -- rcu_dereference_protected() is in fact a better name.\n" "\n" "> Removing checks just to shutup warnings ?\n" - ">=20\n" + "> \n" "> All the point is to get lockdep assistance, and you throw it away.\n" - ">=20\n" + "> \n" "> We want to explicit the condition, so that RCU users can explicitly\n" "> state what protects their data.\n" "\n" @@ -126,4 +102,4 @@ "\n" "\t\t\t\t\t\t\tThanx, Paul" -782205625ded030cf9a2659eadbcf44b1de5f2eb792eadc410a5c14f7d27f947 +5967dcd1888a3e3c5deb7c1cfeb4e85a3f305ef20e93b4e4038484364629b499
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.