Messages in this thread | | | Date | Fri, 4 Oct 2013 09:22:42 -0700 | From | "Paul E. McKenney" <> | Subject | Re: [PATCH 2/3] rcu: Create rcu_sync infrastructure |
| |
On Fri, Oct 04, 2013 at 01:29:45PM +0200, Oleg Nesterov wrote: > On 10/03, Paul E. McKenney wrote: > > > > On Thu, Oct 03, 2013 at 11:10:09PM +0200, Oleg Nesterov wrote: > > > > > > rcusync: introduce rcu_sync_struct->exclusive mode > > > > > > CHANGELOG. > > > > Should the changelog really be in all caps? (Sorry, couldn't resist...) > > Apparently you do not realize it is going to be an EXCELLENT changelog!
;-)
> > > @@ -53,9 +55,13 @@ void rcu_sync_enter(struct rcu_sync_struct *rss) > > > if (need_sync) { > > > rss->ops->sync(); > > > rss->gp_state = GP_PASSED; > > > - wake_up_all(&rss->gp_wait); > > > + if (!rss->exclusive) > > > + wake_up_all(&rss->gp_comp.wait); > > > > Not sure about the wake_up_all() on a completion, > > Yes, we reuse completion->wait in the !exclusive case. Like we reuse > its spinlock as rss_lock. > > We can add a completion/complete union, but this will complicate the > code a bit and imo doesn't make sense.
Fair enough!
Thanx, Paul
> > but if we are exclusive, > > don't we need to complete() the completion here? > > No, if we are exclusive we should delay the "wake up the next writer" > till rcu_sync_exit(). > > > Oh, I guess gp_comp.wait is exactly a wait_queue_head_t, so I guess > > you can do wake_up_all() on it... > > Yes, and we never "mix" completion/wait_queue_head_t operations/members. > IOW, we always use ->gp_comp if "exclusive", and only ->gp_comp.wait is > used otherwise. > > > Never mind!!! > > Agreed ;) > > Oleg. >
| |