All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: "Andrew Jones" <drjones@redhat.com>, "Radim Krčmář" <rkrcmar@redhat.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
	Christoffer Dall <cdall@linaro.org>,
	Marc Zyngier <marc.zyngier@arm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Cornelia Huck <cornelia.huck@de.ibm.com>,
	James Hogan <james.hogan@imgtec.com>,
	Paul Mackerras <paulus@ozlabs.org>
Subject: Re: [PATCH 6/6] KVM: perform a wake_up in kvm_make_all_cpus_request
Date: Tue, 11 Apr 2017 13:34:49 +0800	[thread overview]
Message-ID: <1478c272-b08a-e2be-626e-b2a372ebb579@redhat.com> (raw)
In-Reply-To: <20170410111427.uq3neitfcssm6vbn@kamzik.brq.redhat.com>



On 10/04/2017 19:14, Andrew Jones wrote:
> Any reason we don't want kvm_vcpu_kick() to also get the
> if (!(req & KVM_REQUEST_NO_WAKEUP)) optimization condition?

Because what we want is kvm_make_request to do the kick instead,
"if (!(req & KVM_REQUEST_NO_WAKEUP))", I think.

> I did some
> grepping, and don't see any kicks of the requests that have been marked as
> NO_WAKEUP, so nothing should change by adding it now.  But the consistency
> would be nice for the doc I'm writing.
> 
> Also, the condition in kvm_vcpu_kick() looks like overkill
> 
>  cpu != me && (unsigned)cpu < nr_cpu_ids && cpu_online(cpu)
> 
> How could vcpu->cpu ever be any offline/invalid cpu, other than -1?  The
> condition in kvm_make_all_cpus_request() makes more sense to me
> 
>  cpu != -1 && cpu != me
> 
> I guess a lot this stuff is planned for a larger requests rework, when
> kicks get integrated with requests?

Yes, this is more or less what I meant above.

> I'm a bit anxious, though, as it
> changes how I document stuff now, and even how I approach the ARM series.
> For example, if kvm_make_request() already integrated kvm_vcpu_kick(),
> which means also adding the smp_mb__after_atomic(), like
> kvm_make_all_cpus_request() has, then I wouldn't need to add the smp_mb()
> to kvm_arch_vcpu_should_kick().

kvm_arch_vcpu_should_kick() does cmpxchg, which already includes a
memory barrier when it succeeds, so you need not add smp_mb() there.
And indeed by integrating kicks and requests we know that all callers of
kvm_arch_vcpu_should_kick() already do an atomic +
smp_mb__after_atomic(), so there's even less reason to worry about
memory barriers.

kvm_arch_vcpu_should_kick() could then use cmpxchg_relaxed if it helps
ARM, and you could even split the loop in two to limit the number of
memory barriers:

        kvm_for_each_vcpu(i, vcpu, kvm) {
                set_bit(req & KVM_REQUEST_MASK, &vcpu->requests);
	smp_mb__after_atomic();
	/* now kick and/or wakeup */

It won't make a difference in practice because there's something wrong
if kvm_make_all_cpus_request is a hot spot, but it's readable code and
it makes sense.

In any case, as soon as your patches get in, whoever does the cleanup
also has the honor of updating the docs.  Radim could also get extra
karma for putting your documentation at the beginning of this series,
and updating it at the same time. :)

Paolo

  reply	other threads:[~2017-04-11  9:15 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-06 20:20 [PATCH 0/6] KVM: towards maintainable kvm_make_all_cpus_request() Radim Krčmář
2017-04-06 20:20 ` [PATCH RFC 1/6] KVM: fix guest_mode optimization in kvm_make_all_cpus_request() Radim Krčmář
2017-04-06 21:02   ` James Hogan
2017-04-10 15:59     ` Andrew Jones
2017-04-11 10:43       ` James Hogan
2017-04-11  5:25     ` Paolo Bonzini
2017-04-11  9:37       ` James Hogan
2017-04-11 19:31         ` Radim Krčmář
2017-04-11 19:45           ` Paolo Bonzini
2017-04-11 20:45       ` Radim Krčmář
2017-04-12  0:15         ` Paolo Bonzini
2017-04-07 10:47   ` Christian Borntraeger
2017-04-06 20:20 ` [PATCH 2/6] KVM: use kvm_{test,clear}_request instead of {test,clear}_bit Radim Krčmář
2017-04-07 10:55   ` Christian Borntraeger
2017-04-07 12:24     ` Radim Krčmář
2017-04-07 14:05       ` Radim Krčmář
2017-04-06 20:20 ` [PATCH 3/6] KVM: x86: use kvm_make_request instead of set_bit Radim Krčmář
2017-04-07  8:18   ` David Hildenbrand
2017-04-06 20:20 ` [PATCH 4/6] KVM: remove #ifndef CONFIG_S390 around kvm_vcpu_wake_up Radim Krčmář
2017-04-07 11:01   ` Christian Borntraeger
2017-04-06 20:20 ` [PATCH RFC 5/6] KVM: mark requests that do not need a wakeup Radim Krčmář
2017-04-07  8:27   ` Marc Zyngier
2017-04-07 12:29     ` Radim Krčmář
2017-04-06 20:20 ` [PATCH 6/6] KVM: perform a wake_up in kvm_make_all_cpus_request Radim Krčmář
2017-04-10 11:14   ` Andrew Jones
2017-04-11  5:34     ` Paolo Bonzini [this message]
2017-04-11 12:04       ` Andrew Jones
2017-04-11  5:37   ` Paolo Bonzini
2017-04-11  8:55   ` Paolo Bonzini

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=1478c272-b08a-e2be-626e-b2a372ebb579@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=borntraeger@de.ibm.com \
    --cc=cdall@linaro.org \
    --cc=cornelia.huck@de.ibm.com \
    --cc=drjones@redhat.com \
    --cc=james.hogan@imgtec.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marc.zyngier@arm.com \
    --cc=paulus@ozlabs.org \
    --cc=rkrcmar@redhat.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.