From patchwork Tue Jul 18 16:58:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jintack Lim X-Patchwork-Id: 108168 Delivered-To: patch@linaro.org Received: by 10.140.101.44 with SMTP id t41csp6187330qge; Tue, 18 Jul 2017 10:08:02 -0700 (PDT) X-Received: by 10.84.137.1 with SMTP id 1mr2726910plm.75.1500397682500; Tue, 18 Jul 2017 10:08:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1500397682; cv=none; d=google.com; s=arc-20160816; b=vfzWLDid1hFBePC9wQlpYgst2P6061A2q06cvRaHpd23NNlb4caTbPHjH8TNBYlBNk oRbb+vkSFiCPR146JNsfg+Bcu/N2zfKWEyo95Ijmi45onKLsF6/ODWIRoIVNTj9KqdDF nSjBBfc2sH0UoIhOETTNV1v+wGQCRwVinr0c0i74UK+U/NrFet1mVY/W7JXlopG2V3Kf rNxeR8rA8wfyKDRKWIPwtu2yHfKpb/zPznKk31xZqd3DpKbpxK0CtsSqDS7Oy8nAWGQX t9d35o2Dsz+CmZDju4XI8X5CsU7UkAB2V3exr3HaBqoIoj4UjXQBSqoBxFOuTvY/SbrI V3iQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=OMMwJIP2lAvb8eM2MuQ9xHEkI/X6+vKdg6iYhUg/Upk=; b=hCYC4FEGV2HOdZV8YjzfOHSOionPNqKhDgZsHYr0p3sgMbATsDwL5/iacMxXotWOMM JnzjcyzrM1RjH+b71SOY9/lZKbHm1F3W+Tbgyi8FFBkqfcRKX88uBQGJdhsmd0I+01eP ++fBwKMCaT35+rR+9HP0m8wFTXN9+U18WwHfPESjZvH3/B/5grFHOZuzZdq62nuPw1FB 9f9MNa9lIOHknEuAascpm7C3twAgAxLlWC4wxG4Mi8LbefegF4u7SYSdoBsALTODFmH1 9jKfzi13MZI5c/8hKQm+XcJx15pbEeTGvyifkfolpaxpK9cpFFF81j7C4lsaXjdseExR riag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.b=g0tmSGMR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m39si2203107plg.149.2017.07.18.10.08.02; Tue, 18 Jul 2017 10:08:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.b=g0tmSGMR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752656AbdGRRH1 (ORCPT + 25 others); Tue, 18 Jul 2017 13:07:27 -0400 Received: from mail-it0-f44.google.com ([209.85.214.44]:37689 "EHLO mail-it0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752279AbdGRRAN (ORCPT ); Tue, 18 Jul 2017 13:00:13 -0400 Received: by mail-it0-f44.google.com with SMTP id v127so6946665itd.0 for ; Tue, 18 Jul 2017 10:00:13 -0700 (PDT) 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=OMMwJIP2lAvb8eM2MuQ9xHEkI/X6+vKdg6iYhUg/Upk=; b=g0tmSGMRznL6NWHk8Oiqy3dogl+T4E33annfZZrEgmN2er5nKhjiKCZD6D75oykutH cfnoDZROeuVFZLPOPNpM1pc3u5TiA5NoYeMkToj04XkItwwPFH5AKyB5I+hjTQ+0LQ6T 5ylgjzmuSqo3+RLSHY2tWZYvAOdQBATk+/39I= 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=OMMwJIP2lAvb8eM2MuQ9xHEkI/X6+vKdg6iYhUg/Upk=; b=qt0Dlfk5S7bqnHomUNrkWGnkhf8SsDbTnXb3klpkG9lkK/RL5W1+XoP1bbE0Oy7jTc M4lPbqw1nlhMcxRYIvcKE03kfaHGA79a9flD4VGquBj+kP/hybyBkF68O21ScawWlrWq DtmPAzhfqos8xcp7s0Ph7LCb7AcBDgEWYwMrElgylZf90mW+cn7e8RM6SDB7WDJQgbpo MnkjNZbwFs3A7HKyBJp0ZTnrWsvJJBmrjU3/6jk51ALlMl5//ttFyVET3sZSRBS56QJI 073o2RdqQUlMGzSRMGJ6FBRT08uOi6Rfo3s4IY0i6ZHCQ4iPv6yaummbZJxf76N/r3Wv gAHw== X-Gm-Message-State: AIVw110se+1Fg9x731Dn+04VXjwXiWfSfXup/bL1JzDN6209ExLcxIaZ 7fAJbEvKH75lGbMV X-Received: by 10.36.116.22 with SMTP id o22mr3178347itc.74.1500397212739; Tue, 18 Jul 2017 10:00:12 -0700 (PDT) Received: from node.jintackl-qv26972.kvmarm-pg0.wisc.cloudlab.us (c220g1-030822.wisc.cloudlab.us. [128.104.222.82]) by smtp.gmail.com with ESMTPSA id j96sm1413075ioo.49.2017.07.18.10.00.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 18 Jul 2017 10:00:12 -0700 (PDT) From: Jintack Lim To: kvmarm@lists.cs.columbia.edu, christoffer.dall@linaro.org, marc.zyngier@arm.com Cc: corbet@lwn.net, pbonzini@redhat.com, rkrcmar@redhat.com, linux@armlinux.org.uk, catalin.marinas@arm.com, will.deacon@arm.com, akpm@linux-foundation.org, mchehab@kernel.org, cov@codeaurora.org, daniel.lezcano@linaro.org, david.daney@cavium.com, mark.rutland@arm.com, suzuki.poulose@arm.com, stefan@hello-penguin.com, andy.gross@linaro.org, wcohen@redhat.com, ard.biesheuvel@linaro.org, shankerd@codeaurora.org, vladimir.murzin@arm.com, james.morse@arm.com, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Jintack Lim Subject: [RFC PATCH v2 22/38] KVM: arm64: Handle PSCI call via smc from the guest Date: Tue, 18 Jul 2017 11:58:48 -0500 Message-Id: <1500397144-16232-23-git-send-email-jintack.lim@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1500397144-16232-1-git-send-email-jintack.lim@linaro.org> References: <1500397144-16232-1-git-send-email-jintack.lim@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org VMs used to execute hvc #0 for the psci call if EL3 is not implemented. However, when we come to provide the virtual EL2 mode to the VM, the host OS inside the VM calls kvm_call_hyp() which is also hvc #0. So, it's hard to differentiate between them from the host hypervisor's point of view. So, let the VM execute smc instruction for the psci call. On ARMv8.3, even if EL3 is not implemented, a smc instruction executed at non-secure EL1 is trapped to EL2 if HCR_EL2.TSC==1, rather than being treated as UNDEFINED. So, the host hypervisor can handle this psci call without any confusion. Signed-off-by: Jintack Lim --- arch/arm64/kvm/handle_exit.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) -- 1.9.1 diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c index d19e253..6cf6b93 100644 --- a/arch/arm64/kvm/handle_exit.c +++ b/arch/arm64/kvm/handle_exit.c @@ -53,8 +53,28 @@ static int handle_hvc(struct kvm_vcpu *vcpu, struct kvm_run *run) static int handle_smc(struct kvm_vcpu *vcpu, struct kvm_run *run) { - kvm_inject_undefined(vcpu); - return 1; + int ret; + + /* If imm is non-zero, it's not defined */ + if (kvm_vcpu_hvc_get_imm(vcpu)) { + kvm_inject_undefined(vcpu); + return 1; + } + + /* + * If imm is zero, it's a psci call. + * Note that on ARMv8.3, even if EL3 is not implemented, SMC executed + * at Non-secure EL1 is trapped to EL2 if HCR_EL2.TSC==1, rather than + * being treated as UNDEFINED. + */ + ret = kvm_psci_call(vcpu); + if (ret < 0) { + kvm_inject_undefined(vcpu); + return 1; + } + kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu)); + + return ret; } /*