Message ID | 20211117153842.302159-12-alexandru.elisei@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show
Return-Path: <SRS0=lSZn=QE=lists.infradead.org=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@kernel.org> X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6110AC433EF for <linux-arm-kernel@archiver.kernel.org>; Wed, 17 Nov 2021 15:43:53 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 28CCA60EB4 for <linux-arm-kernel@archiver.kernel.org>; Wed, 17 Nov 2021 15:43:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 28CCA60EB4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=vWdzN/CaD3zqU9UtoyHm3PoOPW3XNmYe7WeH+18/aFU=; b=syATBRHriEcPG+ ioyaIuejvWJCtlY9gTHzm/EI7M1FNIEhyr8SEPc0EjKnfkKjLIldzd+uUpbaCr0kwYmeLSkOpKwyw WPaHhdgOnRCQrSm1ZEgMby/GRjYPjPY7P21tGWjC+b+cjqSjQbuDf08kpUy81kf2Z+A3dY3DUZkfL Ow3+KnXYHYHDTI2cpHezpKd7710dD3rTtkdfzd6qPEjKgIvvi04euxn3piNGksgz4I7OGSG7pqy8h ziRpUVjywrutCbzFOzwJESf+k2uk/shP6ds+BvRESrMf7nd6WPdwSO4BK6CEf89tLEitVo9FxlwgT cU4YbgtwtqJNCEJRbokQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mnN4c-005SIq-QX; Wed, 17 Nov 2021 15:42:11 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mnMzx-005Q18-Vw for linux-arm-kernel@lists.infradead.org; Wed, 17 Nov 2021 15:37:23 +0000 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 28576ED1; Wed, 17 Nov 2021 07:37:21 -0800 (PST) Received: from monolith.localdoman (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D2F9E3F5A1; Wed, 17 Nov 2021 07:37:19 -0800 (PST) From: Alexandru Elisei <alexandru.elisei@arm.com> To: maz@kernel.org, james.morse@arm.com, suzuki.poulose@arm.com, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, will@kernel.org, mark.rutland@arm.com Subject: [RFC PATCH v5 11/38] KVM: arm64: Print a warning for unexpected faults on locked memslots Date: Wed, 17 Nov 2021 15:38:15 +0000 Message-Id: <20211117153842.302159-12-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211117153842.302159-1-alexandru.elisei@arm.com> References: <20211117153842.302159-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211117_073722_116143_45F53271 X-CRM114-Status: GOOD ( 12.69 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: <linux-arm-kernel.lists.infradead.org> List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-arm-kernel>, <mailto:linux-arm-kernel-request@lists.infradead.org?subject=unsubscribe> List-Archive: <http://lists.infradead.org/pipermail/linux-arm-kernel/> List-Post: <mailto:linux-arm-kernel@lists.infradead.org> List-Help: <mailto:linux-arm-kernel-request@lists.infradead.org?subject=help> List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-arm-kernel>, <mailto:linux-arm-kernel-request@lists.infradead.org?subject=subscribe> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" <linux-arm-kernel-bounces@lists.infradead.org> Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org |
Series |
KVM: arm64: Add Statistical Profiling Extension (SPE) support
|
expand
|
diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index bc2a546f65c3..3e9ec646cc34 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -1352,6 +1352,27 @@ int kvm_handle_guest_abort(struct kvm_vcpu *vcpu) /* Userspace should not be able to register out-of-bounds IPAs */ VM_BUG_ON(fault_ipa >= kvm_phys_size(vcpu->kvm)); + if (memslot_is_locked(memslot)) { + const char *fault_type_str; + + if (kvm_vcpu_trap_is_exec_fault(vcpu)) + goto handle_fault; + + if (fault_status == FSC_ACCESS) + fault_type_str = "access"; + else if (write_fault && (memslot->arch.flags & KVM_MEMSLOT_LOCK_WRITE)) + fault_type_str = "write"; + else if (!write_fault) + fault_type_str = "read"; + else + goto handle_fault; + + kvm_warn_ratelimited("Unexpected L2 %s fault on locked memslot %d: IPA=%#llx, ESR_EL2=%#08x]\n", + fault_type_str, memslot->id, fault_ipa, + kvm_vcpu_get_esr(vcpu)); + } + +handle_fault: if (fault_status == FSC_ACCESS) { handle_access_fault(vcpu, fault_ipa); ret = 1;
When userspace unmaps a VMA backing a memslot, the corresponding stage 2 address range gets unmapped via the MMU notifiers. This makes it possible to get stage 2 faults on a locked memslot, which might not be what userspace wants because the purpose of locking a memslot is to avoid stage 2 faults in the first place. Addresses being unmapped from stage 2 can happen from other reasons too, like bugs in the implementation of the lock memslot API, however unlikely that might seem (or not). Let's try to make debugging easier by printing a warning when this happens. Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com> --- arch/arm64/kvm/mmu.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)