From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 018C0C433EF for ; Thu, 16 Dec 2021 13:09:37 +0000 (UTC) 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:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=2PMnpYGZD/VJU4o/0cDNbYOirJ3j3Yuocv2BY2jba9o=; b=qmojbuVvEC8gtP awDsBO1Qr2SKoL7BJVkGfqAZDLHy+i2KvWa9egx2W654gmDv5xPm2ZUL7WHS8kXVh3VVqXAd5CRDN MT9x7Pnog23LzOEz9DwqzJ19sV7LqAhtPQSMqVL7i0XqrsW4wFgAbiiLYhzhZuDp3NQiMWAdPmJPJ MZu0D6uRlWCdzFOc+HE3wDsNS/oz9CoiFu8W+GX0Rhi5ZmmyOwv+QGjQg0NsZ1uUuXF9xxMHVKvH/ aUX4qa0jvPvD6kUB0Bjq2oCgxL72o7z5jI0gFyU+JOv+gfmn4Tw3ifB/vVPCdMM9KCyr1OcEQKwUV 1QLVMs9mfpgRqBjm+aBg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mxqUC-005dse-9M; Thu, 16 Dec 2021 13:07:54 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mxpvD-005Rre-NB for linux-arm-kernel@lists.infradead.org; Thu, 16 Dec 2021 12:31:46 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 09EC1B82406; Thu, 16 Dec 2021 12:31:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C07CBC36AE8; Thu, 16 Dec 2021 12:31:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1639657900; bh=HYUAbUw8C+Pz0/hrxg9J3fIBm3qnXOcifD0oOb92RXc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Qhv44O6gI44kV7DCS3fZaSpbeBOS/SdgKixxNfXGcGzKmpXIaOBLTLmRl0cfKd4it Toqg82Jr/132h1VSJoAwzV+ORh+mwZmj5t9HRkqN3XjVhEDoDf7Or4dKE5kOn/vc5a nt+FzqexrnFrYjYwNVS8AIAcaa7/60yNPkWR1o4bgp3jmUy0NotJyWkytLKTcvm4vu c+2r+LGhoOYbOhOfaV/Ppu7kxd+FZv5otG1+CV2XY9aTWmLFhch1f72abjqXf39myI XWml5j6lwqBD6TKYB4Qg5t1/F41xW3TD72eCzBIJ3C620U6uIggAX6XSWe+7m64NJc dxdgyPsRkS4WA== Received: from cfbb000407.r.cam.camfibre.uk ([185.219.108.64] helo=why.lan) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1mxpv8-00CWIB-Rd; Thu, 16 Dec 2021 12:31:38 +0000 From: Marc Zyngier To: Paolo Bonzini , Andrew Jones Cc: James Morse , Suzuki K Poulose , Alexandru Elisei , kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel-team@android.com Subject: [PATCH 4/5] KVM: selftests: arm64: Check for supported page sizes Date: Thu, 16 Dec 2021 12:31:34 +0000 Message-Id: <20211216123135.754114-5-maz@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211216123135.754114-1-maz@kernel.org> References: <20211216123135.754114-1-maz@kernel.org> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: pbonzini@redhat.com, drjones@redhat.com, james.morse@arm.com, suzuki.poulose@arm.com, alexandru.elisei@arm.com, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel-team@android.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211216_043144_087179_7DB4924F X-CRM114-Status: GOOD ( 15.61 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Just as arm64 implemenations don't necessary support all IPA ranges, they don't all support the same page sizes either. Fun. Create a dummy VM to snapshot the page sizes supported by the host, and filter the supported modes. Signed-off-by: Marc Zyngier --- tools/testing/selftests/kvm/lib/guest_modes.c | 51 ++++++++++++++++--- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/guest_modes.c b/tools/testing/selftests/kvm/lib/guest_modes.c index fadc99bac69c..8db9ea2c4032 100644 --- a/tools/testing/selftests/kvm/lib/guest_modes.c +++ b/tools/testing/selftests/kvm/lib/guest_modes.c @@ -5,7 +5,42 @@ #include "guest_modes.h" #ifdef __aarch64__ +#include "processor.h" enum vm_guest_mode vm_mode_default; +static void get_supported_psz(uint32_t ipa, + bool *ps4k, bool *ps16k, bool *ps64k) +{ + struct kvm_vcpu_init preferred_init; + int kvm_fd, vm_fd, vcpu_fd, err; + uint64_t val; + struct kvm_one_reg reg = { + .id = KVM_ARM64_SYS_REG(SYS_ID_AA64MMFR0_EL1), + .addr = (uint64_t)&val, + }; + + kvm_fd = open_kvm_dev_path_or_exit(); + vm_fd = ioctl(kvm_fd, KVM_CREATE_VM, ipa); + TEST_ASSERT(vm_fd >= 0, "Can't create VM"); + + vcpu_fd = ioctl(vm_fd, KVM_CREATE_VCPU, 0); + TEST_ASSERT(vcpu_fd >= 0, "Can't create vcpu"); + + err = ioctl(vm_fd, KVM_ARM_PREFERRED_TARGET, &preferred_init); + TEST_ASSERT(err == 0, "Can't get target"); + err = ioctl(vcpu_fd, KVM_ARM_VCPU_INIT, &preferred_init); + TEST_ASSERT(err == 0, "Can't get init vcpu"); + + err = ioctl(vcpu_fd, KVM_GET_ONE_REG, ®); + TEST_ASSERT(err == 0, "Can't get MMFR0"); + + *ps4k = ((val >> 28) & 0xf) != 0xf; + *ps64k = ((val >> 24) & 0xf) == 0; + *ps16k = ((val >> 20) & 0xf) != 0; + + close(vcpu_fd); + close(vm_fd); + close(kvm_fd); +} #endif struct guest_mode guest_modes[NUM_VM_MODES]; @@ -18,20 +53,24 @@ void guest_modes_append_default(void) #ifdef __aarch64__ { unsigned int limit = kvm_check_cap(KVM_CAP_ARM_VM_IPA_SIZE); + bool ps4k, ps16k, ps64k; int i; + get_supported_psz(limit, &ps4k, &ps16k, &ps64k); + vm_mode_default = NUM_VM_MODES; if (limit >= 52) - guest_mode_append(VM_MODE_P52V48_64K, true, true); + guest_mode_append(VM_MODE_P52V48_64K, ps64k, ps64k); if (limit >= 48) { - guest_mode_append(VM_MODE_P48V48_4K, true, true); - guest_mode_append(VM_MODE_P48V48_64K, true, true); + guest_mode_append(VM_MODE_P48V48_4K, ps4k, ps4k); + guest_mode_append(VM_MODE_P48V48_64K, ps64k, ps64k); } if (limit >= 40) { - guest_mode_append(VM_MODE_P40V48_4K, true, true); - guest_mode_append(VM_MODE_P40V48_64K, true, true); - vm_mode_default = VM_MODE_P40V48_4K; + guest_mode_append(VM_MODE_P40V48_4K, ps4k, ps4k); + guest_mode_append(VM_MODE_P40V48_64K, ps64k, ps64k); + if (ps4k) + vm_mode_default = VM_MODE_P40V48_4K; } /* Pick the largest supported IPA size */ -- 2.30.2 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel