All of lore.kernel.org
 help / color / mirror / Atom feed
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.
> 


  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.