Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1033979AbdD0LhF (ORCPT ); Thu, 27 Apr 2017 07:37:05 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41382 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1033949AbdD0Lgz (ORCPT ); Thu, 27 Apr 2017 07:36:55 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com B510480492 Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=drjones@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com B510480492 Date: Thu, 27 Apr 2017 13:36:49 +0200 From: Andrew Jones To: Radim =?utf-8?B?S3LEjW3DocWZ?= Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Christoffer Dall , Marc Zyngier , Paolo Bonzini , Christian Borntraeger , Cornelia Huck , James Hogan , Paul Mackerras Subject: Re: [PATCH v2 5/9] KVM: perform a wake_up in kvm_make_all_cpus_request Message-ID: <20170427113649.lzurqufbjws7xoiq@kamzik.brq.redhat.com> References: <20170426203227.12321-1-rkrcmar@redhat.com> <20170426203227.12321-6-rkrcmar@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20170426203227.12321-6-rkrcmar@redhat.com> User-Agent: Mutt/1.6.0.1 (2016-04-01) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Thu, 27 Apr 2017 11:36:55 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1571 Lines: 46 On Wed, Apr 26, 2017 at 10:32:23PM +0200, Radim Krčmář wrote: > We want to have kvm_make_all_cpus_request() to be an optmized version of > > kvm_for_each_vcpu(i, vcpu, kvm) { > kvm_make_request(vcpu, request); > kvm_vcpu_kick(vcpu); > } > > and kvm_vcpu_kick() wakes up the target vcpu. We know which requests do > not need the wake up and use it to optimize the loop. > > Thanks to that, this patch doesn't change the behavior of current users > (the all don't need the wake up) and only prepares for future where the > wake up is going to be needed. > > I think that most requests do not need the wake up, so we would flip the > bit then. > > kvm_vcpu_kick() will get this condition after it is merged with > kvm_make_request() because we currently don't know which request is being > kicked. > > Signed-off-by: Radim Krčmář > --- > virt/kvm/kvm_main.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index e5d52b46b531..3772f7dcc72d 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -186,6 +186,9 @@ bool kvm_make_all_cpus_request(struct kvm *kvm, unsigned int req) > /* Set ->requests bit before we read ->mode. */ > smp_mb__after_atomic(); > > + if (!(req & KVM_REQUEST_NO_WAKEUP)) > + kvm_vcpu_wake_up(vcpu); > + > if (cpus != NULL && cpu != -1 && cpu != me && > kvm_vcpu_exiting_guest_mode(vcpu) != OUTSIDE_GUEST_MODE) > cpumask_set_cpu(cpu, cpus); > -- > 2.12.2 > Reviewed-by: Andrew Jones