All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: paulmck@linux.vnet.ibm.com
Cc: Gleb Natapov <gleb@redhat.com>,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: RCU+KVM: making CPU guest mode a quiescent state.
Date: Wed, 27 Apr 2011 10:47:04 +0300	[thread overview]
Message-ID: <4DB7C9F8.5070906@redhat.com> (raw)
In-Reply-To: <20110426155528.GD2135@linux.vnet.ibm.com>

On 04/26/2011 06:55 PM, Paul E. McKenney wrote:
> On Tue, Apr 26, 2011 at 03:38:24PM +0300, Gleb Natapov wrote:
> >  Hello Paul,
> >
> >  I have a question about RCU + KVM. KVM does not hold any references to RCU
> >  protected data when it switches CPU into a guest mode. In fact switching
> >  to a guest mode is very similar to exiting to userspase from RCU point
> >  of view. In addition CPU may stay in a guest mode for quite a long time
> >  (up to one time slice). It looks like it will be beneficial to treat guest
> >  mode as quiescent state, just like user-mode execution. How can this be
> >  done? I was trying to find how RCU knows about cpu entering user-mode,
> >  but it seems that it does this by checking CPU mode in a timer interrupt
> >  (update_process_times()->rcu_check_callbacks()). This will not work for
> >  guest mode detection since timer interrupt will kick CPU out of a guest
> >  mode and timer interrupt will always see CPU in kernel mode. Do we have
> >  a simple function to call to notify RCU that CPU passed quiescent state
> >  which we can call just before entering guest?
>
> Hello, Gleb,
>
> You could call rcu_note_context_switch(), passing it the current
> CPU.  Please note that preemption -must- be disabled when calling
> this.  You could call this just after exiting the guest as well
> as just before entering guest.
>

It's expected that after exiting, we'd spend a very short time in the 
kernel, and then either re-enter the guest, exit to userspace, or switch 
to another task.  So I think calling it just before entry should be 
sufficient.

Looking at the code, I see rcu_note_context_switch() calls 
rcu_sched_qs(), which does

     rdp->passed_quiesc_completed = rdp->gpnum - 1;
     barrier();
     rdp->passed_quiesc = 1;

and also calls rcu_preempt_note_context_switch(), which calls 
rcu_preempt_qs(), which does

     rdp->passed_quiesc_completed = rdp->gpnum - 1;
     barrier();
     rdp->passed_quiesc = 1;
     current->rcu_read_unlock_special &= ~RCU_READ_UNLOCK_NEED_QS;

the similarity is remarkable.  Is this intended?  Or did I get lost in a 
maze of #ifdefs?

-- 
error compiling committee.c: too many arguments to function


  reply	other threads:[~2011-04-27  7:47 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-26 12:38 RCU+KVM: making CPU guest mode a quiescent state Gleb Natapov
2011-04-26 15:55 ` Paul E. McKenney
2011-04-27  7:47   ` Avi Kivity [this message]
2011-04-27  7:56     ` Gleb Natapov
2011-04-27 22:30     ` Paul E. McKenney
2011-04-27 12:41   ` Gleb Natapov
2011-04-27 22:32     ` Paul E. McKenney

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=4DB7C9F8.5070906@redhat.com \
    --to=avi@redhat.com \
    --cc=gleb@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paulmck@linux.vnet.ibm.com \
    /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.