From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Mel Gorman <mgorman@suse.de>, Rik van Riel <riel@redhat.com>,
Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
Ingo Molnar <mingo@kernel.org>,
Andrea Arcangeli <aarcange@redhat.com>,
Johannes Weiner <hannes@cmpxchg.org>,
Thomas Gleixner <tglx@linutronix.de>,
Steven Rostedt <rostedt@goodmis.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/3] rcu: Create rcu_sync infrastructure
Date: Thu, 3 Oct 2013 09:42:05 -0700 [thread overview]
Message-ID: <20131003164205.GE5790@linux.vnet.ibm.com> (raw)
In-Reply-To: <20131002154901.GA13389@redhat.com>
On Wed, Oct 02, 2013 at 05:49:01PM +0200, Oleg Nesterov wrote:
> On 10/02, Peter Zijlstra wrote:
> >
> > From: Oleg Nesterov <oleg@redhat.com>
>
> Thanks! I was writing the patch, and I chose almost the same naming ;)
>
> > Signed-off-by: Peter Zijlstra <peterz@infradead.org>
>
> Signed-off-by: Oleg Nesterov <oleg@redhat.com>
>
> In fact I'd like to add my sob to 1/3 and 3/3 as well.
>
>
> Paul, to remind, this is only the first step. I am going to send
> the following improvements:
>
> 1. Add rcu_sync->exlusive. The change is simple, just we
> need s/wait_queue_head_t/completion/ in rcu_sync_struct
> and a couple of "if (rss->exclusive)" checks in enter/exit.
>
> 2. rcu_sync_enter() should return !!need_sync. This can help
> in exclusive mode.
>
> 3. rcu_sync_struct needs more function pointers (perhaps we
> should add a single rcu_sync_struct->ops pointer but this
> is minor). See below.
>
> But let me repeat just in case, we should do this later.
> And once this series is applied, I'll change percpu_rw_semaphore.
I took this into account in my review, the upgrades would be good! ;-)
Thanx, Paul
> > +struct rcu_sync_struct {
> > + int gp_state;
> > + int gp_count;
> > + wait_queue_head_t gp_wait;
> > +
> > + int cb_state;
> > + struct rcu_head cb_head;
> > +
> > + void (*sync)(void);
> > + void (*call)(struct rcu_head *, void (*)(struct rcu_head *));
>
> Yes, and we also need rcu_sync_struct->barrier(). From the patch I was
> working on:
>
> void rcu_sync_wait_for_callback(struct rcu_sync *sync)
> {
> int cb_state;
>
> BUG_ON(sync->gp_count);
>
> spin_lock_irq(&sync->state_lock);
> if (sync->cb_state == CB_REPLAY)
> sync->cb_state = CB_PENDING;
> cb_state = sync->cb_state;
> spin_unlock_irq(&sync->state_lock);
>
> if (cb_state != CB_IDLE) {
> rcu_barrier_sched();
> BUG_ON(sync->cb_state != CB_IDLE);
> }
> }
>
> It should be called if you are going to kfree the object.
>
> Perhaps another rcu_sync_struct->state_change(new_state) callback (set
> by the user) makes sense too, this can help (for example) to implement
> the array of semaphores with a single rcu_sync_struct (freeze_super).
>
> Thanks.
>
> Oleg.
>
next prev parent reply other threads:[~2013-10-03 16:42 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-02 14:56 [PATCH 0/3] Optimize the cpu hotplug locking Peter Zijlstra
2013-10-02 14:56 ` [PATCH 1/3] hotplug: Optimize {get,put}_online_cpus() Peter Zijlstra
2013-10-03 14:01 ` Peter Zijlstra
2013-10-03 16:27 ` Paul E. McKenney
2013-10-03 16:26 ` Paul E. McKenney
2013-10-02 14:56 ` [PATCH 2/3] rcu: Create rcu_sync infrastructure Peter Zijlstra
2013-10-02 15:49 ` Oleg Nesterov
2013-10-03 16:42 ` Paul E. McKenney [this message]
2013-10-08 8:18 ` Peter Zijlstra
2013-10-03 16:41 ` Paul E. McKenney
2013-10-03 17:00 ` Oleg Nesterov
2013-10-03 17:15 ` Paul E. McKenney
2013-10-03 18:40 ` Peter Zijlstra
2013-10-03 18:45 ` Paul E. McKenney
2013-10-03 18:47 ` Oleg Nesterov
2013-10-03 19:21 ` Paul E. McKenney
2013-10-03 19:32 ` Oleg Nesterov
2013-10-03 19:33 ` Oleg Nesterov
2013-10-03 19:50 ` Paul E. McKenney
2013-10-03 20:00 ` Oleg Nesterov
2013-10-03 21:10 ` Oleg Nesterov
2013-10-03 22:00 ` Paul E. McKenney
2013-10-04 11:29 ` Oleg Nesterov
2013-10-04 16:22 ` Paul E. McKenney
2013-10-04 7:18 ` Peter Zijlstra
2013-10-04 11:15 ` Oleg Nesterov
2013-10-04 11:36 ` Peter Zijlstra
2013-10-04 11:50 ` Oleg Nesterov
2013-10-04 11:44 ` Peter Zijlstra
2013-10-04 12:13 ` Oleg Nesterov
2013-10-04 12:38 ` Peter Zijlstra
2013-10-04 13:31 ` Oleg Nesterov
2013-10-04 14:43 ` Peter Zijlstra
2013-10-04 15:13 ` Oleg Nesterov
2013-10-04 16:25 ` Peter Zijlstra
2013-10-04 19:06 ` Oleg Nesterov
2013-10-04 19:41 ` Peter Zijlstra
2013-10-05 17:31 ` Oleg Nesterov
2013-10-04 7:00 ` Peter Zijlstra
2013-10-03 20:14 ` Paolo Bonzini
2013-10-04 7:01 ` Peter Zijlstra
2013-10-02 14:56 ` [PATCH 3/3] hotplug: Optimize cpu_hotplug_{begin,done}() using rcu_sync Peter Zijlstra
2013-10-03 16:48 ` Paul E. McKenney
2013-10-03 18:41 ` Peter Zijlstra
2013-10-03 18:46 ` Paul E. McKenney
2013-10-03 19:05 ` Oleg Nesterov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131003164205.GE5790@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=aarcange@redhat.com \
--cc=hannes@cmpxchg.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=riel@redhat.com \
--cc=rostedt@goodmis.org \
--cc=srikar@linux.vnet.ibm.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.