Received: by 2002:ab2:784b:0:b0:1fd:adc2:8405 with SMTP id m11csp372702lqp; Mon, 10 Jun 2024 06:50:58 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWWWpahKVCDFWBdqPqvVOH+qW5x8UB15jDkEEUl4lMRoeOilfPeDd7e+M7wNlAF+MqSxHmZikVR6UWYhZ6gBbJJgXCk/aoo978fqoy+kg== X-Google-Smtp-Source: AGHT+IEhFGtl0EPCC0FegEfV2Iw1bPdpDYiwxv6k1kFDPr27iToGj9aICJWma8MLfOKvt0G0I3sh X-Received: by 2002:a17:906:507:b0:a6f:ffa:9596 with SMTP id a640c23a62f3a-a6f0ffa9680mr320386866b.63.1718027458136; Mon, 10 Jun 2024 06:50:58 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1718027458; cv=pass; d=google.com; s=arc-20160816; b=g0kqmkw0dzJxeMZRR3vGsPm0W/6Nj3SIFT8ex3TLT9/s28fzSGjguAcvcv27UfQ5jW n0E3Q1oCzSWc6PyNhMIOSmmcpdU6f4Lqd+tDl3JPZZ4vuKN3ia99+LY8fPl9LYiZF97j 8dT+TuEb/z1wsEkdCuRILNq4PNbdl4KGT5SAv5uLAaQdLbWDEyiYClWelPMyz7HjHAqy LubY/bmJBTc4LnVxeErj3toCbOyvb1hXCYMcFyU8c+5DXpyA1B30DLCvx43iSVAWsQxP 8jVD231xeBP8ojd1ZBAxquKQkuFwfwm5OebDJFBtWjkeLS6zgFMbSGkyTDjLqCE91Xsl gVSA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=PTJWLm0NcL9aNF3gtkqQwaKf3foMBm63iAQDeT6eES0=; fh=jZlwjFebu20NcQxJoBNXk9wYQkz+p/PzXpXKor2I3KE=; b=JFpqkgk32OrnWgTLJvKUqFbQEzAuFYTCKqclri1khUNUw/MBZDI8V+xSSFBW+fa6jb 7pIGpBcWDaC00lG3EdSOTQMudHkN6Y9s/Zy2ParjYRSbANwSLxeNYOoSW2+wLXshb2Wo lbNWas5McvSgyHXEBPZFwvdhFIqZYpi9ciNCgB69a3B3mfnVAV6mNjnshFIyJyywT9p5 RTMnbXkD6+yMXHZs4fs9ZcUPVSosD0xeJbt8S8LUOp+x8HNLuqjPzXG2aNxzUydk/TgS pusASqRdn7ZqBszMIAayJuIozRlNcIzDjBn6OQviKAMaApUaLL9JXH3F8TqEuadFK2j5 N7RA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=arm.com dmarc=pass fromdomain=arm.com); spf=pass (google.com: domain of linux-kernel+bounces-208274-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-208274-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id a640c23a62f3a-a6c806dac81si462648166b.391.2024.06.10.06.50.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Jun 2024 06:50:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-208274-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=arm.com dmarc=pass fromdomain=arm.com); spf=pass (google.com: domain of linux-kernel+bounces-208274-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-208274-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id D2B671F23078 for ; Mon, 10 Jun 2024 13:50:57 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9910515575C; Mon, 10 Jun 2024 13:43:50 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C8CB313D278; Mon, 10 Jun 2024 13:43:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718027030; cv=none; b=pN083E1ujXRy3dzmkLKMAundt1YW+pNfF9xsomcIgQnKVwwQ1PUrUfSgVJE0k5MkDzjV/xFtvZrQjmHzSsLzT16WJX4diSnIOhJewOVFe7hkaCpplMbGhfqxWBXZfaM2AzQw5NBuMsD/wtjBjpZRbT5qIX8kaNOkl4qdehWvhkk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718027030; c=relaxed/simple; bh=IeGgP1xCZvWS6sQv6phGPTjzQN7v05dfEdQfnh97ZXs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=aUe9+3sY50j9ynBWCi/ehg+A7/wtFWsvMUiwj2+kVKPctdeiJmnomnVnVBfQt6lLJ5kqLh+lE6UnNZF3oDqW1yZhIwcK8qfwHCsZ9qe8ZHvrMe0U/+Zf8LcBbAFYp6BX0Vqfx24jftgmgZFPqO73G8jnBO3ZzBqD7xxqT3/fZ9Y= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com 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 012861688; Mon, 10 Jun 2024 06:44:13 -0700 (PDT) Received: from e122027.cambridge.arm.com (e122027.cambridge.arm.com [10.1.35.41]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 146A53F58B; Mon, 10 Jun 2024 06:43:44 -0700 (PDT) From: Steven Price To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: Joey Gouly , 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, Alexandru Elisei , Christoffer Dall , Fuad Tabba , linux-coco@lists.linux.dev, Ganapatrao Kulkarni , Steven Price Subject: [PATCH v3 27/43] arm64: rme: allow userspace to inject aborts Date: Mon, 10 Jun 2024 14:41:46 +0100 Message-Id: <20240610134202.54893-28-steven.price@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240610134202.54893-1-steven.price@arm.com> References: <20240610134202.54893-1-steven.price@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 dd53beb8fe14..310e151a2382 100644 --- a/Documentation/virt/kvm/api.rst +++ b/Documentation/virt/kvm/api.rst @@ -1278,6 +1278,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 a035689dc39b..b01d900c89ff 100644 --- a/arch/arm64/kvm/guest.c +++ b/arch/arm64/kvm/guest.c @@ -865,6 +865,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->enter.flags & RMI_EMULATED_MMIO)) + return -EINVAL; + + vcpu->arch.rec.run->enter.flags &= ~RMI_EMULATED_MMIO; + vcpu->arch.rec.run->enter.flags |= RMI_INJECT_SEA; + } + + return 0; + } + if (serror_pending && has_esr) { if (!cpus_have_final_cap(ARM64_HAS_RAS_EXTN)) return -EINVAL; -- 2.34.1