get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/842654/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 842654,
    "url": "http://patchwork.ozlabs.org/api/patches/842654/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/kvm-ppc/patch/20171129164116.16167-15-christoffer.dall@linaro.org/",
    "project": {
        "id": 23,
        "url": "http://patchwork.ozlabs.org/api/projects/23/?format=api",
        "name": "KVM PowerPC development",
        "link_name": "kvm-ppc",
        "list_id": "kvm-ppc.vger.kernel.org",
        "list_email": "kvm-ppc@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20171129164116.16167-15-christoffer.dall@linaro.org>",
    "list_archive_url": null,
    "date": "2017-11-29T16:41:14",
    "name": "[v2,14/16] KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "2f25d68c38bfc79b0813287527fa7d66324b956b",
    "submitter": {
        "id": 26352,
        "url": "http://patchwork.ozlabs.org/api/people/26352/?format=api",
        "name": "Christoffer Dall",
        "email": "christoffer.dall@linaro.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/kvm-ppc/patch/20171129164116.16167-15-christoffer.dall@linaro.org/mbox/",
    "series": [
        {
            "id": 15778,
            "url": "http://patchwork.ozlabs.org/api/series/15778/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/kvm-ppc/list/?series=15778",
            "date": "2017-11-29T16:41:00",
            "name": "Move vcpu_load and vcpu_put calls to arch code",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/15778/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/842654/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/842654/checks/",
    "tags": {},
    "related": [],
    "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>)",
            "ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=linaro.org header.i=@linaro.org\n\theader.b=\"cO4CIyNI\"; dkim-atps=neutral"
        ],
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3yn5sb4fyMz9t2x\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 30 Nov 2017 03:41:55 +1100 (AEDT)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S933803AbdK2Qlr (ORCPT <rfc822;incoming@patchwork.ozlabs.org>);\n\tWed, 29 Nov 2017 11:41:47 -0500",
            "from mail-wr0-f196.google.com ([209.85.128.196]:38283 \"EHLO\n\tmail-wr0-f196.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S933793AbdK2Qlo (ORCPT\n\t<rfc822;kvm-ppc@vger.kernel.org>); Wed, 29 Nov 2017 11:41:44 -0500",
            "by mail-wr0-f196.google.com with SMTP id o2so3973595wro.5\n\tfor <kvm-ppc@vger.kernel.org>; Wed, 29 Nov 2017 08:41:43 -0800 (PST)",
            "from localhost.localdomain (x50d2404e.cust.hiper.dk.\n\t[80.210.64.78]) by smtp.gmail.com with ESMTPSA id\n\te71sm2080765wma.13.2017.11.29.08.41.41\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tWed, 29 Nov 2017 08:41:42 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=Z5822WIbwisemP5V9uKiM0rLY+4Ovd/Raz9GeUUc2Uc=;\n\tb=cO4CIyNIOOJVqo+7KB0svtd+3t28L8gWQpz53wADTJiFe5WNG8sj5nBX63vTUOsnGZ\n\tFUdBLrFc7Z1YJ9H7L34DD5+CO1x06Bz1WWnW1SUBenInYQlczN0y9mHnRQnBKe/9VaYE\n\tzngorqy6UbpLT3YJSfVpL6jmHDUWBxh+M/kmo=",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=Z5822WIbwisemP5V9uKiM0rLY+4Ovd/Raz9GeUUc2Uc=;\n\tb=ZrBHKIl3flrRFRCbPjCUhNk74ViIxbQAGAL5yOZk4eyc5+1JtlwyotGwT0o3sDJ8yf\n\tUT3h2OjcM0wtSQ5wpzCSp78ApT9DhEjDkdAORN5BdId1rBhKCL4DeFxrMzeJ95lTwmrp\n\tZi+YzsX/oaWk/S0U+5MxkDr2b1dOnad2Rwtp0R72Pqe9P8scxEzzE7vAu4PdnjDBY9A7\n\t+fvm/vy0FUWyJAHA0rypZmbaj0nS/AkeXGSsbJWeJONBDsc8ykY8W745lRnCjxd/9s/O\n\tWSwdsV/CfbLjaEDjHlBpBF+mhlxwNQnQo4IM5DQSkO+PAIqGPeGAQAdbYFBe5XT1tsns\n\tTXLA==",
        "X-Gm-Message-State": "AJaThX6xU76nTEtS0QlgTJmFLUXo9F9fbGbEKU4YxmcU95wH205E4Gnj\n\tIDn23JjYR3IkEC8H+OZb2kwL8Q==",
        "X-Google-Smtp-Source": "AGs4zMYJKHSF461ajFmkrMfhpfO2zsa7oMhHxyrA2oCVHY6jhmzGf6vHHInjia3fuZDUdadZmf5GRA==",
        "X-Received": "by 10.223.151.34 with SMTP id r31mr2972415wrb.164.1511973703057; \n\tWed, 29 Nov 2017 08:41:43 -0800 (PST)",
        "From": "Christoffer Dall <christoffer.dall@linaro.org>",
        "To": "kvm@vger.kernel.org",
        "Cc": "Andrew Jones <drjones@redhat.com>, Christoffer Dall\n\t<christoffer.dall@linaro.org>, 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",
        "Subject": "[PATCH v2 14/16] KVM: Move vcpu_load to arch-specific\n\tkvm_arch_vcpu_ioctl",
        "Date": "Wed, 29 Nov 2017 17:41:14 +0100",
        "Message-Id": "<20171129164116.16167-15-christoffer.dall@linaro.org>",
        "X-Mailer": "git-send-email 2.14.2",
        "In-Reply-To": "<20171129164116.16167-1-christoffer.dall@linaro.org>",
        "References": "<20171129164116.16167-1-christoffer.dall@linaro.org>",
        "Sender": "kvm-ppc-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<kvm-ppc.vger.kernel.org>",
        "X-Mailing-List": "kvm-ppc@vger.kernel.org"
    },
    "content": "Move the calls to vcpu_load() and vcpu_put() in to the architecture\nspecific implementations of kvm_arch_vcpu_ioctl() which dispatches\nfurther architecture-specific ioctls on to other functions.\n\nSome architectures support asynchronous vcpu ioctls which cannot call\nvcpu_load() or take the vcpu->mutex, because that would prevent\nconcurrent execution with a running VCPU, which is the intended purpose\nof these ioctls, for example because they inject interrupts.\n\nWe repeat the separate checks for these specifics in the architecture\ncode for MIPS, S390 and PPC, and avoid taking the vcpu->mutex and\ncalling vcpu_load for these ioctls.\n\nSigned-off-by: Christoffer Dall <christoffer.dall@linaro.org>\n---\n arch/mips/kvm/mips.c       | 49 +++++++++++++++++++++++----------------\n arch/powerpc/kvm/powerpc.c | 13 ++++++-----\n arch/s390/kvm/kvm-s390.c   | 19 ++++++++-------\n arch/x86/kvm/x86.c         | 22 +++++++++++++-----\n virt/kvm/arm/arm.c         | 58 ++++++++++++++++++++++++++++++++--------------\n virt/kvm/kvm_main.c        |  2 --\n 6 files changed, 103 insertions(+), 60 deletions(-)",
    "diff": "diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c\nindex 3a89871..4a03934 100644\n--- a/arch/mips/kvm/mips.c\n+++ b/arch/mips/kvm/mips.c\n@@ -913,56 +913,65 @@ long kvm_arch_vcpu_ioctl(struct file *filp, unsigned int ioctl,\n \tvoid __user *argp = (void __user *)arg;\n \tlong r;\n \n+\tif (ioctl == KVM_INTERRUPT) {\n+\t\tstruct kvm_mips_interrupt irq;\n+\n+\t\tif (copy_from_user(&irq, argp, sizeof(irq)))\n+\t\t\treturn -EFAULT;\n+\t\tkvm_debug(\"[%d] %s: irq: %d\\n\", vcpu->vcpu_id, __func__,\n+\t\t\t  irq.irq);\n+\n+\t\treturn kvm_vcpu_ioctl_interrupt(vcpu, &irq);\n+\t}\n+\n+\tvcpu_load(vcpu);\n+\n \tswitch (ioctl) {\n \tcase KVM_SET_ONE_REG:\n \tcase KVM_GET_ONE_REG: {\n \t\tstruct kvm_one_reg reg;\n \n+\t\tr = -EFAULT;\n \t\tif (copy_from_user(&reg, argp, sizeof(reg)))\n-\t\t\treturn -EFAULT;\n+\t\t\tbreak;\n \t\tif (ioctl == KVM_SET_ONE_REG)\n-\t\t\treturn kvm_mips_set_reg(vcpu, &reg);\n+\t\t\tr = kvm_mips_set_reg(vcpu, &reg);\n \t\telse\n-\t\t\treturn kvm_mips_get_reg(vcpu, &reg);\n+\t\t\tr = kvm_mips_get_reg(vcpu, &reg);\n+\t\tbreak;\n \t}\n \tcase KVM_GET_REG_LIST: {\n \t\tstruct kvm_reg_list __user *user_list = argp;\n \t\tstruct kvm_reg_list reg_list;\n \t\tunsigned n;\n \n+\t\tr = -EFAULT;\n \t\tif (copy_from_user(&reg_list, user_list, sizeof(reg_list)))\n-\t\t\treturn -EFAULT;\n+\t\t\tbreak;\n \t\tn = reg_list.n;\n \t\treg_list.n = kvm_mips_num_regs(vcpu);\n \t\tif (copy_to_user(user_list, &reg_list, sizeof(reg_list)))\n-\t\t\treturn -EFAULT;\n+\t\t\tbreak;\n+\t\tr = -E2BIG;\n \t\tif (n < reg_list.n)\n-\t\t\treturn -E2BIG;\n-\t\treturn kvm_mips_copy_reg_indices(vcpu, user_list->reg);\n-\t}\n-\tcase KVM_INTERRUPT:\n-\t\t{\n-\t\t\tstruct kvm_mips_interrupt irq;\n-\n-\t\t\tif (copy_from_user(&irq, argp, sizeof(irq)))\n-\t\t\t\treturn -EFAULT;\n-\t\t\tkvm_debug(\"[%d] %s: irq: %d\\n\", vcpu->vcpu_id, __func__,\n-\t\t\t\t  irq.irq);\n-\n-\t\t\tr = kvm_vcpu_ioctl_interrupt(vcpu, &irq);\n \t\t\tbreak;\n-\t\t}\n+\t\tr = kvm_mips_copy_reg_indices(vcpu, user_list->reg);\n+\t\tbreak;\n+\t}\n \tcase KVM_ENABLE_CAP: {\n \t\tstruct kvm_enable_cap cap;\n \n+\t\tr = -EFAULT;\n \t\tif (copy_from_user(&cap, argp, sizeof(cap)))\n-\t\t\treturn -EFAULT;\n+\t\t\tbreak;\n \t\tr = kvm_vcpu_ioctl_enable_cap(vcpu, &cap);\n \t\tbreak;\n \t}\n \tdefault:\n \t\tr = -ENOIOCTLCMD;\n \t}\n+\n+\tvcpu_put(vcpu);\n \treturn r;\n }\n \ndiff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c\nindex c06bc95..6b5dd3a 100644\n--- a/arch/powerpc/kvm/powerpc.c\n+++ b/arch/powerpc/kvm/powerpc.c\n@@ -1617,16 +1617,16 @@ long kvm_arch_vcpu_ioctl(struct file *filp,\n \tvoid __user *argp = (void __user *)arg;\n \tlong r;\n \n-\tswitch (ioctl) {\n-\tcase KVM_INTERRUPT: {\n+\tif (ioctl == KVM_INTERRUPT) {\n \t\tstruct kvm_interrupt irq;\n-\t\tr = -EFAULT;\n \t\tif (copy_from_user(&irq, argp, sizeof(irq)))\n-\t\t\tgoto out;\n-\t\tr = kvm_vcpu_ioctl_interrupt(vcpu, &irq);\n-\t\tgoto out;\n+\t\t\treturn -EFAULT;\n+\t\treturn kvm_vcpu_ioctl_interrupt(vcpu, &irq);\n \t}\n \n+\tvcpu_load(vcpu);\n+\n+\tswitch (ioctl) {\n \tcase KVM_ENABLE_CAP:\n \t{\n \t\tstruct kvm_enable_cap cap;\n@@ -1666,6 +1666,7 @@ long kvm_arch_vcpu_ioctl(struct file *filp,\n \t}\n \n out:\n+\tvcpu_put(vcpu);\n \treturn r;\n }\n \ndiff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c\nindex 43278f3..cd067b6 100644\n--- a/arch/s390/kvm/kvm-s390.c\n+++ b/arch/s390/kvm/kvm-s390.c\n@@ -3743,24 +3743,25 @@ long kvm_arch_vcpu_ioctl(struct file *filp,\n \tcase KVM_S390_IRQ: {\n \t\tstruct kvm_s390_irq s390irq;\n \n-\t\tr = -EFAULT;\n \t\tif (copy_from_user(&s390irq, argp, sizeof(s390irq)))\n-\t\t\tbreak;\n-\t\tr = kvm_s390_inject_vcpu(vcpu, &s390irq);\n-\t\tbreak;\n+\t\t\treturn -EFAULT;\n+\t\treturn kvm_s390_inject_vcpu(vcpu, &s390irq);\n \t}\n \tcase KVM_S390_INTERRUPT: {\n \t\tstruct kvm_s390_interrupt s390int;\n \t\tstruct kvm_s390_irq s390irq;\n \n-\t\tr = -EFAULT;\n \t\tif (copy_from_user(&s390int, argp, sizeof(s390int)))\n-\t\t\tbreak;\n+\t\t\treturn -EFAULT;\n \t\tif (s390int_to_s390irq(&s390int, &s390irq))\n \t\t\treturn -EINVAL;\n-\t\tr = kvm_s390_inject_vcpu(vcpu, &s390irq);\n-\t\tbreak;\n+\t\treturn kvm_s390_inject_vcpu(vcpu, &s390irq);\n \t}\n+\t}\n+\n+\tvcpu_load(vcpu);\n+\n+\tswitch (ioctl) {\n \tcase KVM_S390_STORE_STATUS:\n \t\tidx = srcu_read_lock(&vcpu->kvm->srcu);\n \t\tr = kvm_s390_vcpu_store_status(vcpu, arg);\n@@ -3883,6 +3884,8 @@ long kvm_arch_vcpu_ioctl(struct file *filp,\n \tdefault:\n \t\tr = -ENOTTY;\n \t}\n+\n+\tvcpu_put(vcpu);\n \treturn r;\n }\n \ndiff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c\nindex fd8b92f..0148a51 100644\n--- a/arch/x86/kvm/x86.c\n+++ b/arch/x86/kvm/x86.c\n@@ -3458,6 +3458,8 @@ long kvm_arch_vcpu_ioctl(struct file *filp,\n \t\tvoid *buffer;\n \t} u;\n \n+\tvcpu_load(vcpu);\n+\n \tu.buffer = NULL;\n \tswitch (ioctl) {\n \tcase KVM_GET_LAPIC: {\n@@ -3483,8 +3485,10 @@ long kvm_arch_vcpu_ioctl(struct file *filp,\n \t\tif (!lapic_in_kernel(vcpu))\n \t\t\tgoto out;\n \t\tu.lapic = memdup_user(argp, sizeof(*u.lapic));\n-\t\tif (IS_ERR(u.lapic))\n-\t\t\treturn PTR_ERR(u.lapic);\n+\t\tif (IS_ERR(u.lapic)) {\n+\t\t\tr = PTR_ERR(u.lapic);\n+\t\t\tgoto out_nofree;\n+\t\t}\n \n \t\tr = kvm_vcpu_ioctl_set_lapic(vcpu, u.lapic);\n \t\tbreak;\n@@ -3658,8 +3662,10 @@ long kvm_arch_vcpu_ioctl(struct file *filp,\n \t}\n \tcase KVM_SET_XSAVE: {\n \t\tu.xsave = memdup_user(argp, sizeof(*u.xsave));\n-\t\tif (IS_ERR(u.xsave))\n-\t\t\treturn PTR_ERR(u.xsave);\n+\t\tif (IS_ERR(u.xsave)) {\n+\t\t\tr = PTR_ERR(u.xsave);\n+\t\t\tgoto out_nofree;\n+\t\t}\n \n \t\tr = kvm_vcpu_ioctl_x86_set_xsave(vcpu, u.xsave);\n \t\tbreak;\n@@ -3681,8 +3687,10 @@ long kvm_arch_vcpu_ioctl(struct file *filp,\n \t}\n \tcase KVM_SET_XCRS: {\n \t\tu.xcrs = memdup_user(argp, sizeof(*u.xcrs));\n-\t\tif (IS_ERR(u.xcrs))\n-\t\t\treturn PTR_ERR(u.xcrs);\n+\t\tif (IS_ERR(u.xcrs)) {\n+\t\t\tr = PTR_ERR(u.xcrs);\n+\t\t\tgoto out_nofree;\n+\t\t}\n \n \t\tr = kvm_vcpu_ioctl_x86_set_xcrs(vcpu, u.xcrs);\n \t\tbreak;\n@@ -3726,6 +3734,8 @@ long kvm_arch_vcpu_ioctl(struct file *filp,\n \t}\n out:\n \tkfree(u.buffer);\n+out_nofree:\n+\tvcpu_put(vcpu);\n \treturn r;\n }\n \ndiff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c\nindex 9a3acbc..8223c59 100644\n--- a/virt/kvm/arm/arm.c\n+++ b/virt/kvm/arm/arm.c\n@@ -1001,66 +1001,88 @@ long kvm_arch_vcpu_ioctl(struct file *filp,\n \tstruct kvm_vcpu *vcpu = filp->private_data;\n \tvoid __user *argp = (void __user *)arg;\n \tstruct kvm_device_attr attr;\n+\tlong r;\n+\n+\tvcpu_load(vcpu);\n \n \tswitch (ioctl) {\n \tcase KVM_ARM_VCPU_INIT: {\n \t\tstruct kvm_vcpu_init init;\n \n+\t\tr = -EFAULT;\n \t\tif (copy_from_user(&init, argp, sizeof(init)))\n-\t\t\treturn -EFAULT;\n+\t\t\tbreak;\n \n-\t\treturn kvm_arch_vcpu_ioctl_vcpu_init(vcpu, &init);\n+\t\tr = kvm_arch_vcpu_ioctl_vcpu_init(vcpu, &init);\n+\t\tbreak;\n \t}\n \tcase KVM_SET_ONE_REG:\n \tcase KVM_GET_ONE_REG: {\n \t\tstruct kvm_one_reg reg;\n \n+\t\tr = -ENOEXEC;\n \t\tif (unlikely(!kvm_vcpu_initialized(vcpu)))\n-\t\t\treturn -ENOEXEC;\n+\t\t\tbreak;\n \n+\t\tr = -EFAULT;\n \t\tif (copy_from_user(&reg, argp, sizeof(reg)))\n-\t\t\treturn -EFAULT;\n+\t\t\tbreak;\n+\n \t\tif (ioctl == KVM_SET_ONE_REG)\n-\t\t\treturn kvm_arm_set_reg(vcpu, &reg);\n+\t\t\tr = kvm_arm_set_reg(vcpu, &reg);\n \t\telse\n-\t\t\treturn kvm_arm_get_reg(vcpu, &reg);\n+\t\t\tr = kvm_arm_get_reg(vcpu, &reg);\n+\t\tbreak;\n \t}\n \tcase KVM_GET_REG_LIST: {\n \t\tstruct kvm_reg_list __user *user_list = argp;\n \t\tstruct kvm_reg_list reg_list;\n \t\tunsigned n;\n \n+\t\tr = -ENOEXEC;\n \t\tif (unlikely(!kvm_vcpu_initialized(vcpu)))\n-\t\t\treturn -ENOEXEC;\n+\t\t\tbreak;\n \n+\t\tr = -EFAULT;\n \t\tif (copy_from_user(&reg_list, user_list, sizeof(reg_list)))\n-\t\t\treturn -EFAULT;\n+\t\t\tbreak;\n \t\tn = reg_list.n;\n \t\treg_list.n = kvm_arm_num_regs(vcpu);\n \t\tif (copy_to_user(user_list, &reg_list, sizeof(reg_list)))\n-\t\t\treturn -EFAULT;\n+\t\t\tbreak;\n+\t\tr = -E2BIG;\n \t\tif (n < reg_list.n)\n-\t\t\treturn -E2BIG;\n-\t\treturn kvm_arm_copy_reg_indices(vcpu, user_list->reg);\n+\t\t\tbreak;\n+\t\tr = kvm_arm_copy_reg_indices(vcpu, user_list->reg);\n+\t\tbreak;\n \t}\n \tcase KVM_SET_DEVICE_ATTR: {\n+\t\tr = -EFAULT;\n \t\tif (copy_from_user(&attr, argp, sizeof(attr)))\n-\t\t\treturn -EFAULT;\n-\t\treturn kvm_arm_vcpu_set_attr(vcpu, &attr);\n+\t\t\tbreak;\n+\t\tr = kvm_arm_vcpu_set_attr(vcpu, &attr);\n+\t\tbreak;\n \t}\n \tcase KVM_GET_DEVICE_ATTR: {\n+\t\tr = -EFAULT;\n \t\tif (copy_from_user(&attr, argp, sizeof(attr)))\n-\t\t\treturn -EFAULT;\n-\t\treturn kvm_arm_vcpu_get_attr(vcpu, &attr);\n+\t\t\tbreak;\n+\t\tr = kvm_arm_vcpu_get_attr(vcpu, &attr);\n+\t\tbreak;\n \t}\n \tcase KVM_HAS_DEVICE_ATTR: {\n+\t\tr = -EFAULT;\n \t\tif (copy_from_user(&attr, argp, sizeof(attr)))\n-\t\t\treturn -EFAULT;\n-\t\treturn kvm_arm_vcpu_has_attr(vcpu, &attr);\n+\t\t\tbreak;\n+\t\tr = kvm_arm_vcpu_has_attr(vcpu, &attr);\n+\t\tbreak;\n \t}\n \tdefault:\n-\t\treturn -EINVAL;\n+\t\tr = -EINVAL;\n \t}\n+\n+\tvcpu_put(vcpu);\n+\treturn r;\n }\n \n /**\ndiff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c\nindex 06751bb..ad5f831 100644\n--- a/virt/kvm/kvm_main.c\n+++ b/virt/kvm/kvm_main.c\n@@ -2693,9 +2693,7 @@ static long kvm_vcpu_ioctl(struct file *filp,\n \t\tbreak;\n \t}\n \tdefault:\n-\t\tvcpu_load(vcpu);\n \t\tr = kvm_arch_vcpu_ioctl(filp, ioctl, arg);\n-\t\tvcpu_put(vcpu);\n \t}\n out:\n \tmutex_unlock(&vcpu->mutex);\n",
    "prefixes": [
        "v2",
        "14/16"
    ]
}