From patchwork Fri Jan 27 11:29:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49285 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp787605wrn; Fri, 27 Jan 2023 03:44:58 -0800 (PST) X-Google-Smtp-Source: AMrXdXssRt/tz3fF+LeCYJJ3yHjd+IE9Mm9EdjLfob7MpDsllxYiTMx6VUoOix1yKxthrClAEIgb X-Received: by 2002:a05:6a20:1bdc:b0:b6:3e6e:af94 with SMTP id cv28-20020a056a201bdc00b000b63e6eaf94mr35764903pzb.32.1674819898652; Fri, 27 Jan 2023 03:44:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819898; cv=none; d=google.com; s=arc-20160816; b=bY9tKzfNG7ASeF0VzyA0JvnUg/cLNLJYFgHM3NHHKTmKoNSuk6AorinQmXpF7z8erA menSoOoJ4BToS/DDgAdd5N0c6GkODyEwzfG381DDmy15xYX9st9rZKtBNSMXCFgfrRhd w1JCCYNgHZ2XD8+UfQUYl1g+illt4PmMmOEYIVkvi82VaFiaLR/qRY7Qkek6jEebR7cU l1HjhJQ4aodD/sA6qlAqJX6N0DfnD6ZGWUcNz70Fz/s02qz7OUlfMv+qbemUPo47Yxjb dQ0r2sdQVp1XecStpbORE2HRkUtthWFI3Bm/Z3V6eTmiQH9ZWcyVfaMx54KrD0EuS06Q BdhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=lK6X2Smn4kQOFlX3SZprbm5a8P+9PDeKn3BlQl+LXLc=; b=S6X/SWx4RcpX57jP4WoQ9MzpWPYfKx+SNU2Mgb/b+EDcdQGUArXy+O3A1C1ExT9n1M abNpiw1Upe+KX9jGEJj2YEzLoZXmoxKlwrtMaAv8HYSLt+drFX5zWHi//2iWH37FIerf x4/9Zb33ItHxIaGzkR2k07M5U2tu8NPrsUojDgB83Cd3TLHZ/tOfzDYEiJ9XU5dAFGQl VqcSSiCO8ryNAxAg37mNKboSpXHqm/BPXTfkzdp0umBe7vFkCzD1GGRPDnudrxWf+IsE 9SFbf0eALuZ+IoqgTMcyJefeRpWApHiPVzcXabn0t7MYnb0j1wtSaoUMsmdxYpj6apM2 SDRA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j5-20020a633c05000000b004ae2ceb2d39si4125879pga.805.2023.01.27.03.44.46; Fri, 27 Jan 2023 03:44:58 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232001AbjA0LmQ (ORCPT + 99 others); Fri, 27 Jan 2023 06:42:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60896 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233762AbjA0Llh (ORCPT ); Fri, 27 Jan 2023 06:41:37 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id E60697A490; Fri, 27 Jan 2023 03:41:07 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B09E016F3; Fri, 27 Jan 2023 03:31:25 -0800 (PST) Received: from e122027.cambridge.arm.com (e122027.cambridge.arm.com [10.1.35.16]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A98B13F64C; Fri, 27 Jan 2023 03:30:41 -0800 (PST) From: Steven Price To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: Steven Price , Catalin Marinas , Marc Zyngier , Will Deacon , James Morse , Oliver Upton , Suzuki K Poulose , Zenghui Yu , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Joey Gouly , Alexandru Elisei , Christoffer Dall , Fuad Tabba , linux-coco@lists.linux.dev Subject: [RFC PATCH 24/28] arm64: rme: allow userspace to inject aborts Date: Fri, 27 Jan 2023 11:29:28 +0000 Message-Id: <20230127112932.38045-25-steven.price@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230127112932.38045-1-steven.price@arm.com> References: <20230127112248.136810-1-suzuki.poulose@arm.com> <20230127112932.38045-1-steven.price@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756175950248612897?= X-GMAIL-MSGID: =?utf-8?q?1756175950248612897?= From: Joey Gouly Extend KVM_SET_VCPU_EVENTS to support realms, where KVM cannot set the system registers, and the RMM must perform it on next REC entry. Signed-off-by: Joey Gouly Signed-off-by: Steven Price --- Documentation/virt/kvm/api.rst | 2 ++ arch/arm64/kvm/guest.c | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst index f1a59d6fb7fc..18a8ddaf31d8 100644 --- a/Documentation/virt/kvm/api.rst +++ b/Documentation/virt/kvm/api.rst @@ -1238,6 +1238,8 @@ User space may need to inject several types of events to the guest. Set the pending SError exception state for this VCPU. It is not possible to 'cancel' an Serror that has been made pending. +User space cannot inject SErrors into Realms. + If the guest performed an access to I/O memory which could not be handled by userspace, for example because of missing instruction syndrome decode information or because there is no device mapped at the accessed IPA, then diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c index 93468bbfb50e..6e53e0ef2fba 100644 --- a/arch/arm64/kvm/guest.c +++ b/arch/arm64/kvm/guest.c @@ -851,6 +851,30 @@ int __kvm_arm_vcpu_set_events(struct kvm_vcpu *vcpu, bool has_esr = events->exception.serror_has_esr; bool ext_dabt_pending = events->exception.ext_dabt_pending; + if (vcpu_is_rec(vcpu)) { + /* Cannot inject SError into a Realm. */ + if (serror_pending) + return -EINVAL; + + /* + * If a data abort is pending, set the flag and let the RMM + * inject an SEA when the REC is scheduled to be run. + */ + if (ext_dabt_pending) { + /* + * Can only inject SEA into a Realm if the previous exit + * was due to a data abort of an Unprotected IPA. + */ + if (!(vcpu->arch.rec.run->entry.flags & RMI_EMULATED_MMIO)) + return -EINVAL; + + vcpu->arch.rec.run->entry.flags &= ~RMI_EMULATED_MMIO; + vcpu->arch.rec.run->entry.flags |= RMI_INJECT_SEA; + } + + return 0; + } + if (serror_pending && has_esr) { if (!cpus_have_const_cap(ARM64_HAS_RAS_EXTN)) return -EINVAL;