Messages in this thread | | | Date | Fri, 4 Oct 2013 13:50:21 +0200 | From | Oleg Nesterov <> | Subject | Re: [PATCH 2/3] rcu: Create rcu_sync infrastructure |
| |
On 10/04, Peter Zijlstra wrote: > > On Fri, Oct 04, 2013 at 01:15:13PM +0200, Oleg Nesterov wrote: > > Of course we can fix this, but wait_for_completion/complete already > > does the necessary work: x->done acts as a resource counter which is > > always checked/incremented/decremented under the same lock. > > Urgh, so now you're not using a semaphore as completion but using a > completion as semaphore.
Yes. And we can use it as semaphore only because we already have gp_count.
Of course, we could add ->gp_mutex and change enter/exit to lock/unlock it if exclusive. But I do not really like it even if this can makes the code a bit (only a little bit) simpler. This will increase sizeof() and for no reason, I think, because to some degree this will also duplicate the synchronization logic. And while this doesn't really matter, this will penalize the contending writers a bit: it is not easy (but of course possible) to take this mutex after rss->gp_count++, and we do want to increment this counter "asap".
Oleg.
| |