Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1031301AbdD0MQN (ORCPT ); Thu, 27 Apr 2017 08:16:13 -0400 Received: from mx1.redhat.com ([209.132.183.28]:54328 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752053AbdD0MQF (ORCPT ); Thu, 27 Apr 2017 08:16:05 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 323DB460 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=pbonzini@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 323DB460 Subject: Re: [PATCH v2 5/9] KVM: perform a wake_up in kvm_make_all_cpus_request To: Cornelia Huck , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= References: <20170426203227.12321-1-rkrcmar@redhat.com> <20170426203227.12321-6-rkrcmar@redhat.com> <20170427140655.40eebb34.cornelia.huck@de.ibm.com> Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Christoffer Dall , Andrew Jones , Marc Zyngier , Christian Borntraeger , James Hogan , Paul Mackerras From: Paolo Bonzini Message-ID: <246ae7e1-f381-6672-3573-278620a48547@redhat.com> Date: Thu, 27 Apr 2017 14:15:57 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <20170427140655.40eebb34.cornelia.huck@de.ibm.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 27 Apr 2017 12:16:04 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1927 Lines: 61 On 27/04/2017 14:06, Cornelia Huck wrote: > On Wed, 26 Apr 2017 22:32:23 +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 > > s/the all/they all/ > >> 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. > > I find this sentence confusing: not all kicks are directly related to > requests. I agree, it is backwards. Changing to "Later on, kvm_make_request() will take care of kicking too, using this bit to make the decision whether to kick or not". Paolo >> >> 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); > > The code change looks good to me. >