From patchwork Thu Feb 15 21:02:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoffer Dall X-Patchwork-Id: 10223601 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 2E4D660467 for ; Thu, 15 Feb 2018 21:05:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1EAB8283B9 for ; Thu, 15 Feb 2018 21:05:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 12A3029516; Thu, 15 Feb 2018 21:05:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 92AD9283B9 for ; Thu, 15 Feb 2018 21:05:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=TcwDrL5lYLB1DytZrS3p9EM/IsKOT2rinJlSxAVzFzI=; b=LwI9g2WKt3QAwT11ZjDQq0yGSo NECMEnX5F97KjriT4EabWZgfXyvmK30HbIxx/q5lZFXZMSa/kiliQTDCqSvcjanlHdou6Ou4N66n5 8kYbBiCMnCY/jO3qCRbmyiL9UFNTB27KE2e3eRjet5I3WQLrhblXNw0CtEi5Uhkh3Pgd/95DilkuA w0YiloYUGKEWnn40RwhdTv3sqrrgllhwNL0thTNP8QGqr5t6jQfksahNZ7CIC25vXDYhEjDpWSUeh d2ENTFqgdnJYCw/l/5GovIdJ32Lcr37lWa4yf4bsVP15WPKO/wO2Kszqrgt0KK2Soc8r+8n93eIMa x34ix2tw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1emQiR-0000we-Kb; Thu, 15 Feb 2018 21:05:16 +0000 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1emQhB-0008Al-Tz for linux-arm-kernel@lists.infradead.org; Thu, 15 Feb 2018 21:04:00 +0000 Received: by mail-wm0-x243.google.com with SMTP id t74so3293275wme.3 for ; Thu, 15 Feb 2018 13:03:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=AJ+IZ6dmghjBBbW1QmlDEYAFsaElkaA1IzCgoAB91jk=; b=B2p99P3+EED9qpVe6XV9qVKja3Zx/X8Ta9HvmiKgfRCnb/2rx+LCC/v7ns3Dm1V1SN 5aOGKLl1z7GOXFwBlvF8U8tNOWxPtZFNbt4/H5ex3nmxzEGsnJmpEUjtTBb/yfkZ3PVe ET0Qff5ln0btDD6TYLOpkTDg2EIiESP5o3xys= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=AJ+IZ6dmghjBBbW1QmlDEYAFsaElkaA1IzCgoAB91jk=; b=UPxvucQGcivnRwhPEhStHo5E7TBvs7oi0e8N98kbEczWMmLgviZozVSOQ1J5DRYxh6 2DniUKc3mwEgyaGjZAOoMbUDeDHRoMf0k4yCVbIl3fOyuEnuPVhDGJeizv9oj3ZnpxFr yHLqsYPvtjKVAjaD/BCpMAzRNNM0pl0MzIUtrx1P3L94t1HhHDeHunk73hDLRfQJMMt/ iGCjkzMUA8qZHVRtAjDSPYtDs2Zy29lk/GM9zkE0plyZPzjXEH+I2d3GO226eVQ1pMuj TMfHcqBzYZN3lacFxKwaVV6G5TpPdZLZYGW0Xbi+VLps1ubPONHuRwclqNG+49SicHVg hy1A== X-Gm-Message-State: APf1xPAxASPJAmyJJe8Rprw+pSJZ8LxYWf4SQRGRV8Wpp/0bVBKnMSwT yOCqhwM6VQBj2AUCA/pUK4eaHw== X-Google-Smtp-Source: AH8x2268tcmyo/eboky6LUw6ihLTb++HR7pLw6oqvU02QRILG1UyYfEzRNzPpkBZFVsmlholeXZ3Rg== X-Received: by 10.80.148.234 with SMTP id t39mr5021770eda.180.1518728627088; Thu, 15 Feb 2018 13:03:47 -0800 (PST) Received: from localhost.localdomain (x50d2404e.cust.hiper.dk. [80.210.64.78]) by smtp.gmail.com with ESMTPSA id p55sm8220030edc.15.2018.02.15.13.03.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 15 Feb 2018 13:03:46 -0800 (PST) From: Christoffer Dall To: kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org Subject: [PATCH v4 01/40] KVM: arm/arm64: Avoid vcpu_load for other vcpu ioctls than KVM_RUN Date: Thu, 15 Feb 2018 22:02:53 +0100 Message-Id: <20180215210332.8648-2-christoffer.dall@linaro.org> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20180215210332.8648-1-christoffer.dall@linaro.org> References: <20180215210332.8648-1-christoffer.dall@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180215_130358_055143_AFA2ECDC X-CRM114-Status: GOOD ( 13.74 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Andrew Jones , kvm@vger.kernel.org, Marc Zyngier , Tomasz Nowicki , Julien Grall , Yury Norov , Christoffer Dall , Dave Martin , Shih-Wei Li MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Calling vcpu_load() registers preempt notifiers for this vcpu and calls kvm_arch_vcpu_load(). The latter will soon be doing a lot of heavy lifting on arm/arm64 and will try to do things such as enabling the virtual timer and setting us up to handle interrupts from the timer hardware. Loading state onto hardware registers and enabling hardware to signal interrupts can be problematic when we're not actually about to run the VCPU, because it makes it difficult to establish the right context when handling interrupts from the timer, and it makes the register access code difficult to reason about. Luckily, now when we call vcpu_load in each ioctl implementation, we can simply remove the call from the non-KVM_RUN vcpu ioctls, and our kvm_arch_vcpu_load() is only used for loading vcpu content to the physical CPU when we're actually going to run the vcpu. Reviewed-by: Julien Grall Signed-off-by: Christoffer Dall Reviewed-by: Marc Zyngier Reviewed-by: Andrew Jones --- arch/arm64/kvm/guest.c | 3 --- virt/kvm/arm/arm.c | 9 --------- 2 files changed, 12 deletions(-) diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c index d7e3299a7734..959e50d2588c 100644 --- a/arch/arm64/kvm/guest.c +++ b/arch/arm64/kvm/guest.c @@ -363,8 +363,6 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, { int ret = 0; - vcpu_load(vcpu); - trace_kvm_set_guest_debug(vcpu, dbg->control); if (dbg->control & ~KVM_GUESTDBG_VALID_MASK) { @@ -386,7 +384,6 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, } out: - vcpu_put(vcpu); return ret; } diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c index 86941f6181bb..53572304843b 100644 --- a/virt/kvm/arm/arm.c +++ b/virt/kvm/arm/arm.c @@ -384,14 +384,11 @@ static void vcpu_power_off(struct kvm_vcpu *vcpu) int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, struct kvm_mp_state *mp_state) { - vcpu_load(vcpu); - if (vcpu->arch.power_off) mp_state->mp_state = KVM_MP_STATE_STOPPED; else mp_state->mp_state = KVM_MP_STATE_RUNNABLE; - vcpu_put(vcpu); return 0; } @@ -400,8 +397,6 @@ int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, { int ret = 0; - vcpu_load(vcpu); - switch (mp_state->mp_state) { case KVM_MP_STATE_RUNNABLE: vcpu->arch.power_off = false; @@ -413,7 +408,6 @@ int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, ret = -EINVAL; } - vcpu_put(vcpu); return ret; } @@ -1036,8 +1030,6 @@ long kvm_arch_vcpu_ioctl(struct file *filp, struct kvm_device_attr attr; long r; - vcpu_load(vcpu); - switch (ioctl) { case KVM_ARM_VCPU_INIT: { struct kvm_vcpu_init init; @@ -1114,7 +1106,6 @@ long kvm_arch_vcpu_ioctl(struct file *filp, r = -EINVAL; } - vcpu_put(vcpu); return r; }