Messages in this thread | | | Date | Fri, 10 Oct 2008 13:30:19 +0800 | From | Lai Jiangshan <> | Subject | Re: [PATCH] markers: bit-field is not thread-safe nor smp-safe |
| |
KOSAKI Motohiro wrote: > Hi Lai-san, > >> bit-field is not thread-safe nor smp-safe. >> >> struct marker_entry.rcu_pending is not protected by any lock >> in rcu-callback free_old_closure(). >> so we must turn it into a safe type. > > hmmm > however, char also doesn't smp-safe because some architecture doesn't have > any byte load/store instruction. > > It seems bogus solution to me ;)
Hi, KOSAKI-san,
Thank you very much!
char also doesn't smp-safe if the architecture doesn't have any byte load/store instruction.
We must use int, is it right?
Lai
> > >> detail: >> >> I suppose rcu_pending and ptype are store in struct marker_entry.tmp1 >> >> free_old_closure() side: change ptype side: >> >> | load struct marker_entry.tmp1 >> --------------------------------|-------------------------------- >> | change ptype bit in tmp1 >> load struct marker_entry.tmp1 | >> change rcu_pending bit in tmp1 | >> store tmp1 | >> --------------------------------|-------------------------------- >> | store tmp1 >> >> now this result equals that free_old_closure() do not change rcu_pending bit, bug. >> >> see also: http://en.wikipedia.org/wiki/Bit_field >> >> Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> >> --- >> diff --git a/kernel/marker.c b/kernel/marker.c >> index 7d1faec..4777218 100644 >> --- a/kernel/marker.c >> +++ b/kernel/marker.c >> @@ -62,7 +62,7 @@ struct marker_entry { >> int refcount; /* Number of times armed. 0 if disarmed. */ >> struct rcu_head rcu; >> void *oldptr; >> - unsigned char rcu_pending:1; >> + unsigned char rcu_pending; >> unsigned char ptype:1; >> char name[0]; /* Contains name'\0'format'\0' */ >> }; > > > > > >
| |