From patchwork Sat Nov 25 20:57:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoffer Dall X-Patchwork-Id: 841309 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=kvm-ppc-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="R99SEGxE"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yklk73yZbz9sNr for ; Sun, 26 Nov 2017 07:57:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751784AbdKYU5Q (ORCPT ); Sat, 25 Nov 2017 15:57:16 -0500 Received: from mail-wr0-f194.google.com ([209.85.128.194]:46202 "EHLO mail-wr0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751701AbdKYU5O (ORCPT ); Sat, 25 Nov 2017 15:57:14 -0500 Received: by mail-wr0-f194.google.com with SMTP id r2so16576988wra.13 for ; Sat, 25 Nov 2017 12:57:13 -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=V3Vm+6ixly0ib2qMFBLoowg7G+ZdIZG9b7wCLe/d1AM=; b=R99SEGxEvSBqQLuepATEK3sLqKur2HXnHU31MIq/bpsChrIuXm2P8cvFYe9hFlpGyC YVcFonDdf/abbUzLfT0u92mXpxrplAekGP0YTIpDqqghFqu/n3NyVi5z76vHNx+OTlud 9fsaiynwxt1xN6g0GkvoCLyoqEXfr+bj34Mqw= 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=V3Vm+6ixly0ib2qMFBLoowg7G+ZdIZG9b7wCLe/d1AM=; b=rOp2SO3IfrVp1jRbwYTRP3XX0+CuU4j2F6HLyCgPdxDOisVXJavZgjJNWFjb1jhRIK C7p1xrzx9jIBCLdJnTTFAHarFP8RXY+OHyLS6dmV2auJmBZ2m+2kVe18f4vacHS1pxlS zrf1OIkcALtRzoRLf7EcY0NFYcyuYH0kju0N8DCJNt0ln8g8i9scJZdi6WQ5vfe6CrmE zuWdtPque3Nr6FxyLH/MZZxzv00QeK6Jx3iew9QUD9rB4OzRaiu5nJGnKcg7icAUkOtQ OlB951SGci6mEtaTikdrpb+piHvFoYehsTv73okuHwAoF1urvtIaB6+6A5BJfc2cTy4M O+Kw== X-Gm-Message-State: AJaThX5Tg7EJQwfR8f3uQp5qG18CJZuUVK5FqNmYeyodd811zWTSd8Ow eB+AFUN+PzmiUh6hB/5YRkCuiA== X-Google-Smtp-Source: AGs4zMa76xrf/tEpClZTJRAaiWxp2GgHtbESLQHWUKGIWwlBZjmhvCUw6oJnvio824F8fWPwcXVqnA== X-Received: by 10.223.150.46 with SMTP id b43mr21007257wra.5.1511643433303; Sat, 25 Nov 2017 12:57:13 -0800 (PST) Received: from localhost.localdomain (x50d2404e.cust.hiper.dk. [80.210.64.78]) by smtp.gmail.com with ESMTPSA id z37sm15157577wrc.31.2017.11.25.12.57.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 25 Nov 2017 12:57:12 -0800 (PST) From: Christoffer Dall To: kvm@vger.kernel.org Cc: Andrew Jones , Christoffer Dall , Paolo Bonzini , =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= , Marc Zyngier , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, James Hogan , linux-mips@linux-mips.org, Alexander Graf , kvm-ppc@vger.kernel.org, Christian Borntraeger , Cornelia Huck , linux-s390@vger.kernel.org Subject: [PATCH 01/15] KVM: Prepare for moving vcpu_load/vcpu_put into arch specific code Date: Sat, 25 Nov 2017 21:57:04 +0100 Message-Id: <20171125205718.7731-2-christoffer.dall@linaro.org> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20171125205718.7731-1-christoffer.dall@linaro.org> References: <20171125205718.7731-1-christoffer.dall@linaro.org> Sender: kvm-ppc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm-ppc@vger.kernel.org In preparation for moving calls to vcpu_load() and vcpu_put() into the architecture specific implementations of the KVM vcpu ioctls, move the calls in the main kvm_vcpu_ioctl() dispatcher function to each case of the ioctl select statement. This allows us to move the vcpu_load() and vcpu_put() calls into architecture specific implementations of vcpu ioctls, one by one. Signed-off-by: Christoffer Dall --- virt/kvm/kvm_main.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 9deb5a245b83..fafafcc38b5a 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2528,16 +2528,15 @@ static long kvm_vcpu_ioctl(struct file *filp, return kvm_arch_vcpu_ioctl(filp, ioctl, arg); #endif - - r = vcpu_load(vcpu); - if (r) - return r; switch (ioctl) { case KVM_RUN: { struct pid *oldpid; r = -EINVAL; if (arg) goto out; + r = vcpu_load(vcpu); + if (r) + goto out; oldpid = rcu_access_pointer(vcpu->pid); if (unlikely(oldpid != current->pids[PIDTYPE_PID].pid)) { /* The thread running this VCPU changed. */ @@ -2549,6 +2548,7 @@ static long kvm_vcpu_ioctl(struct file *filp, put_pid(oldpid); } r = kvm_arch_vcpu_ioctl_run(vcpu, vcpu->run); + vcpu_put(vcpu); trace_kvm_userspace_exit(vcpu->run->exit_reason, r); break; } @@ -2559,7 +2559,11 @@ static long kvm_vcpu_ioctl(struct file *filp, kvm_regs = kzalloc(sizeof(struct kvm_regs), GFP_KERNEL); if (!kvm_regs) goto out; + r = vcpu_load(vcpu); + if (r) + goto out; r = kvm_arch_vcpu_ioctl_get_regs(vcpu, kvm_regs); + vcpu_put(vcpu); if (r) goto out_free1; r = -EFAULT; @@ -2579,7 +2583,11 @@ static long kvm_vcpu_ioctl(struct file *filp, r = PTR_ERR(kvm_regs); goto out; } + r = vcpu_load(vcpu); + if (r) + goto out; r = kvm_arch_vcpu_ioctl_set_regs(vcpu, kvm_regs); + vcpu_put(vcpu); kfree(kvm_regs); break; } @@ -2588,7 +2596,11 @@ static long kvm_vcpu_ioctl(struct file *filp, r = -ENOMEM; if (!kvm_sregs) goto out; + r = vcpu_load(vcpu); + if (r) + goto out; r = kvm_arch_vcpu_ioctl_get_sregs(vcpu, kvm_sregs); + vcpu_put(vcpu); if (r) goto out; r = -EFAULT; @@ -2604,13 +2616,21 @@ static long kvm_vcpu_ioctl(struct file *filp, kvm_sregs = NULL; goto out; } + r = vcpu_load(vcpu); + if (r) + goto out; r = kvm_arch_vcpu_ioctl_set_sregs(vcpu, kvm_sregs); + vcpu_put(vcpu); break; } case KVM_GET_MP_STATE: { struct kvm_mp_state mp_state; + r = vcpu_load(vcpu); + if (r) + goto out; r = kvm_arch_vcpu_ioctl_get_mpstate(vcpu, &mp_state); + vcpu_put(vcpu); if (r) goto out; r = -EFAULT; @@ -2625,7 +2645,11 @@ static long kvm_vcpu_ioctl(struct file *filp, r = -EFAULT; if (copy_from_user(&mp_state, argp, sizeof(mp_state))) goto out; + r = vcpu_load(vcpu); + if (r) + goto out; r = kvm_arch_vcpu_ioctl_set_mpstate(vcpu, &mp_state); + vcpu_put(vcpu); break; } case KVM_TRANSLATE: { @@ -2634,7 +2658,11 @@ static long kvm_vcpu_ioctl(struct file *filp, r = -EFAULT; if (copy_from_user(&tr, argp, sizeof(tr))) goto out; + r = vcpu_load(vcpu); + if (r) + goto out; r = kvm_arch_vcpu_ioctl_translate(vcpu, &tr); + vcpu_put(vcpu); if (r) goto out; r = -EFAULT; @@ -2649,7 +2677,11 @@ static long kvm_vcpu_ioctl(struct file *filp, r = -EFAULT; if (copy_from_user(&dbg, argp, sizeof(dbg))) goto out; + r = vcpu_load(vcpu); + if (r) + goto out; r = kvm_arch_vcpu_ioctl_set_guest_debug(vcpu, &dbg); + vcpu_put(vcpu); break; } case KVM_SET_SIGNAL_MASK: { @@ -2680,7 +2712,11 @@ static long kvm_vcpu_ioctl(struct file *filp, r = -ENOMEM; if (!fpu) goto out; + r = vcpu_load(vcpu); + if (r) + goto out; r = kvm_arch_vcpu_ioctl_get_fpu(vcpu, fpu); + vcpu_put(vcpu); if (r) goto out; r = -EFAULT; @@ -2696,14 +2732,21 @@ static long kvm_vcpu_ioctl(struct file *filp, fpu = NULL; goto out; } + r = vcpu_load(vcpu); + if (r) + goto out; r = kvm_arch_vcpu_ioctl_set_fpu(vcpu, fpu); + vcpu_put(vcpu); break; } default: + r = vcpu_load(vcpu); + if (r) + goto out; r = kvm_arch_vcpu_ioctl(filp, ioctl, arg); + vcpu_put(vcpu); } out: - vcpu_put(vcpu); kfree(fpu); kfree(kvm_sregs); return r;