[{"id":1812560,"web_url":"http://patchwork.ozlabs.org/comment/1812560/","msgid":"<9475a797-f412-688d-298c-7f6a11a672be@redhat.com>","list_archive_url":null,"date":"2017-11-29T17:43:44","subject":"Re: [PATCH v2 11/16] KVM: Move vcpu_load to arch-specific\n\tkvm_arch_vcpu_ioctl_set_guest_debug","submitter":{"id":70402,"url":"http://patchwork.ozlabs.org/api/people/70402/","name":"David Hildenbrand","email":"david@redhat.com"},"content":"On 29.11.2017 17:41, Christoffer Dall wrote:\n> Move vcpu_load() and vcpu_put() into the architecture specific\n> implementations of kvm_arch_vcpu_ioctl_set_guest_debug().\n> \n> Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>\n> ---\n>  arch/arm64/kvm/guest.c    | 15 ++++++++++++---\n>  arch/powerpc/kvm/book3s.c |  2 ++\n>  arch/powerpc/kvm/booke.c  | 19 +++++++++++++------\n>  arch/s390/kvm/kvm-s390.c  | 16 ++++++++++++----\n>  arch/x86/kvm/x86.c        |  4 +++-\n>  virt/kvm/kvm_main.c       |  2 --\n>  6 files changed, 42 insertions(+), 16 deletions(-)\n> \n> diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c\n> index 5c7f657..d7e3299 100644\n> --- a/arch/arm64/kvm/guest.c\n> +++ b/arch/arm64/kvm/guest.c\n> @@ -361,10 +361,16 @@ int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,\n>  int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,\n>  \t\t\t\t\tstruct kvm_guest_debug *dbg)\n>  {\n> +\tint ret = 0;\n> +\n> +\tvcpu_load(vcpu);\n> +\n>  \ttrace_kvm_set_guest_debug(vcpu, dbg->control);\n>  \n> -\tif (dbg->control & ~KVM_GUESTDBG_VALID_MASK)\n> -\t\treturn -EINVAL;\n> +\tif (dbg->control & ~KVM_GUESTDBG_VALID_MASK) {\n> +\t\tret = -EINVAL;\n> +\t\tgoto out;\n> +\t}\n>  \n>  \tif (dbg->control & KVM_GUESTDBG_ENABLE) {\n>  \t\tvcpu->guest_debug = dbg->control;\n> @@ -378,7 +384,10 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,\n>  \t\t/* If not enabled clear all flags */\n>  \t\tvcpu->guest_debug = 0;\n>  \t}\n> -\treturn 0;\n> +\n> +out:\n> +\tvcpu_put(vcpu);\n> +\treturn ret;\n>  }\n>  \n>  int kvm_arm_vcpu_arch_set_attr(struct kvm_vcpu *vcpu,\n> diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c\n> index 0476516..234531d 100644\n> --- a/arch/powerpc/kvm/book3s.c\n> +++ b/arch/powerpc/kvm/book3s.c\n> @@ -755,7 +755,9 @@ int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,\n>  int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,\n>  \t\t\t\t\tstruct kvm_guest_debug *dbg)\n>  {\n> +\tvcpu_load(vcpu);\n>  \tvcpu->guest_debug = dbg->control;\n> +\tvcpu_put(vcpu);\n>  \treturn 0;\n>  }\n>  \n> diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c\n> index 1b491b8..7cb0e26 100644\n> --- a/arch/powerpc/kvm/booke.c\n> +++ b/arch/powerpc/kvm/booke.c\n> @@ -2018,12 +2018,15 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,\n>  {\n>  \tstruct debug_reg *dbg_reg;\n>  \tint n, b = 0, w = 0;\n> +\tint ret = 0;\n> +\n> +\tvcpu_load(vcpu);\n>  \n>  \tif (!(dbg->control & KVM_GUESTDBG_ENABLE)) {\n>  \t\tvcpu->arch.dbg_reg.dbcr0 = 0;\n>  \t\tvcpu->guest_debug = 0;\n>  \t\tkvm_guest_protect_msr(vcpu, MSR_DE, false);\n> -\t\treturn 0;\n> +\t\tgoto out;\n>  \t}\n>  \n>  \tkvm_guest_protect_msr(vcpu, MSR_DE, true);\n> @@ -2055,8 +2058,9 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,\n>  #endif\n>  \n>  \tif (!(vcpu->guest_debug & KVM_GUESTDBG_USE_HW_BP))\n> -\t\treturn 0;\n> +\t\tgoto out;\n>  \n> +\tret = -EINVAL;\n>  \tfor (n = 0; n < (KVMPPC_BOOKE_IAC_NUM + KVMPPC_BOOKE_DAC_NUM); n++) {\n>  \t\tuint64_t addr = dbg->arch.bp[n].addr;\n>  \t\tuint32_t type = dbg->arch.bp[n].type;\n> @@ -2067,21 +2071,24 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,\n>  \t\tif (type & ~(KVMPPC_DEBUG_WATCH_READ |\n>  \t\t\t     KVMPPC_DEBUG_WATCH_WRITE |\n>  \t\t\t     KVMPPC_DEBUG_BREAKPOINT))\n> -\t\t\treturn -EINVAL;\n> +\t\t\tgoto out;\n>  \n>  \t\tif (type & KVMPPC_DEBUG_BREAKPOINT) {\n>  \t\t\t/* Setting H/W breakpoint */\n>  \t\t\tif (kvmppc_booke_add_breakpoint(dbg_reg, addr, b++))\n> -\t\t\t\treturn -EINVAL;\n> +\t\t\t\tgoto out;\n>  \t\t} else {\n>  \t\t\t/* Setting H/W watchpoint */\n>  \t\t\tif (kvmppc_booke_add_watchpoint(dbg_reg, addr,\n>  \t\t\t\t\t\t\ttype, w++))\n> -\t\t\t\treturn -EINVAL;\n> +\t\t\t\tgoto out;\n>  \t\t}\n>  \t}\n>  \n> -\treturn 0;\n> +\tret = 0;\n> +out:\n> +\tvcpu_put(vcpu);\n> +\treturn ret;\n>  }\n>  \n>  void kvmppc_booke_vcpu_load(struct kvm_vcpu *vcpu, int cpu)\n> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c\n> index 8fade85..4bf80b5 100644\n> --- a/arch/s390/kvm/kvm-s390.c\n> +++ b/arch/s390/kvm/kvm-s390.c\n> @@ -2804,13 +2804,19 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,\n>  {\n>  \tint rc = 0;\n>  \n> +\tvcpu_load(vcpu);\n> +\n>  \tvcpu->guest_debug = 0;\n>  \tkvm_s390_clear_bp_data(vcpu);\n>  \n> -\tif (dbg->control & ~VALID_GUESTDBG_FLAGS)\n> -\t\treturn -EINVAL;\n> -\tif (!sclp.has_gpere)\n> -\t\treturn -EINVAL;\n> +\tif (dbg->control & ~VALID_GUESTDBG_FLAGS) {\n> +\t\trc = -EINVAL;\n> +\t\tgoto out;\n> +\t}\n> +\tif (!sclp.has_gpere) {\n> +\t\trc = -EINVAL;\n> +\t\tgoto out;\n> +\t}\n>  \n>  \tif (dbg->control & KVM_GUESTDBG_ENABLE) {\n>  \t\tvcpu->guest_debug = dbg->control;\n> @@ -2830,6 +2836,8 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,\n>  \t\tatomic_andnot(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);\n>  \t}\n>  \n> +out:\n> +\tvcpu_put(vcpu);\n>  \treturn rc;\n>  }\n>  \n> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c\n> index eb70974..a074b0bd 100644\n> --- a/arch/x86/kvm/x86.c\n> +++ b/arch/x86/kvm/x86.c\n> @@ -7602,6 +7602,8 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,\n>  \tunsigned long rflags;\n>  \tint i, r;\n>  \n> +\tvcpu_load(vcpu);\n> +\n>  \tif (dbg->control & (KVM_GUESTDBG_INJECT_DB | KVM_GUESTDBG_INJECT_BP)) {\n>  \t\tr = -EBUSY;\n>  \t\tif (vcpu->arch.exception.pending)\n> @@ -7647,7 +7649,7 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,\n>  \tr = 0;\n>  \n>  out:\n> -\n> +\tvcpu_put(vcpu);\n>  \treturn r;\n>  }\n>  \n> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c\n> index 0a8a490..c688eb7 100644\n> --- a/virt/kvm/kvm_main.c\n> +++ b/virt/kvm/kvm_main.c\n> @@ -2642,9 +2642,7 @@ static long kvm_vcpu_ioctl(struct file *filp,\n>  \t\tr = -EFAULT;\n>  \t\tif (copy_from_user(&dbg, argp, sizeof(dbg)))\n>  \t\t\tgoto out;\n> -\t\tvcpu_load(vcpu);\n>  \t\tr = kvm_arch_vcpu_ioctl_set_guest_debug(vcpu, &dbg);\n> -\t\tvcpu_put(vcpu);\n>  \t\tbreak;\n>  \t}\n>  \tcase KVM_SET_SIGNAL_MASK: {\n> \n\nReviewed-by: David Hildenbrand <david@redhat.com>","headers":{"Return-Path":"<kvm-ppc-owner@vger.kernel.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=kvm-ppc-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)","Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3yn7F6381cz9t16\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 30 Nov 2017 04:43:54 +1100 (AEDT)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S934201AbdK2Rnw (ORCPT <rfc822;incoming@patchwork.ozlabs.org>);\n\tWed, 29 Nov 2017 12:43:52 -0500","from mx1.redhat.com ([209.132.183.28]:49664 \"EHLO mx1.redhat.com\"\n\trhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP\n\tid S934146AbdK2Rnt (ORCPT <rfc822;kvm-ppc@vger.kernel.org>);\n\tWed, 29 Nov 2017 12:43:49 -0500","from smtp.corp.redhat.com\n\t(int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 0CBDA85543;\n\tWed, 29 Nov 2017 17:43:49 +0000 (UTC)","from [10.36.117.80] (ovpn-117-80.ams2.redhat.com [10.36.117.80])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id CA18A600C0;\n\tWed, 29 Nov 2017 17:43:45 +0000 (UTC)"],"Subject":"Re: [PATCH v2 11/16] KVM: Move vcpu_load to arch-specific\n\tkvm_arch_vcpu_ioctl_set_guest_debug","To":"Christoffer Dall <christoffer.dall@linaro.org>, kvm@vger.kernel.org","Cc":"Andrew Jones <drjones@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>,\n\t=?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= <rkrcmar@redhat.com>,\n\tMarc Zyngier <marc.zyngier@arm.com>, kvmarm@lists.cs.columbia.edu,\n\tlinux-arm-kernel@lists.infradead.org, James Hogan <jhogan@kernel.org>,\n\tlinux-mips@linux-mips.org, Alexander Graf <agraf@suse.com>,\n\tkvm-ppc@vger.kernel.org, \n\tChristian Borntraeger <borntraeger@de.ibm.com>, Cornelia Huck\n\t<cohuck@redhat.com>, linux-s390@vger.kernel.org","References":"<20171129164116.16167-1-christoffer.dall@linaro.org>\n\t<20171129164116.16167-12-christoffer.dall@linaro.org>","From":"David Hildenbrand <david@redhat.com>","Organization":"Red Hat GmbH","Message-ID":"<9475a797-f412-688d-298c-7f6a11a672be@redhat.com>","Date":"Wed, 29 Nov 2017 18:43:44 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.4.0","MIME-Version":"1.0","In-Reply-To":"<20171129164116.16167-12-christoffer.dall@linaro.org>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-US","Content-Transfer-Encoding":"7bit","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.11","X-Greylist":"Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.28]);\n\tWed, 29 Nov 2017 17:43:49 +0000 (UTC)","Sender":"kvm-ppc-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<kvm-ppc.vger.kernel.org>","X-Mailing-List":"kvm-ppc@vger.kernel.org"}}]