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 AA59BCAC59F for ; Thu, 18 Sep 2025 01:26:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:In-Reply-To:Content-Type: MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=k9Jjt7WIG30EfMyysMomZPghPo22dRWUV095XopjZOE=; b=mE+d+2/pscAQEueE5alXUvyF61 NX/0c8NKIL+X9LUDPEe3/guNslLwqdVxYiiX3QJSxmx/Do2BnkawYLo14x0LczGv1yQUUOqZSgSpb hh7zBuJY4yLmzb4TTJ0q/OoPwNNvz/3c7WRkDFbmJVS/c9+yXlDKotEonAOKvQdjpOXGraX/RqRNL 8nQNqUrCTLa72JbcQGU6uodYu6APN3dsDxDqi/+VnUX1Z1FdlqNabuQxGNx/brq3mNGhkloGQ2KA2 181n+raWrFP7HAwoXKkI2sXuULfIFudBi0w3NSw02TbP5/dpCvDCPPrmeq4JxtZkzL3lGxUUmXM+4 nEwHt/HQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uz3Pk-0000000FvMN-1pVd; Thu, 18 Sep 2025 01:26:24 +0000 Received: from out-170.mta1.migadu.com ([95.215.58.170]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uz3Ph-0000000FvLS-4BPI for linux-arm-kernel@lists.infradead.org; Thu, 18 Sep 2025 01:26:23 +0000 Date: Thu, 18 Sep 2025 10:25:58 +0900 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1758158769; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=k9Jjt7WIG30EfMyysMomZPghPo22dRWUV095XopjZOE=; b=rRIIyGux9mwYO5LpVSAUqWij4Ha3iOEdouYkK3XvQqZqV8cEnVNY1iFTrIRvXDdd9ULYpK m+xGg+O8Y2hLyQpPvrqkSg6Nd1k3z3Aw0lpRY80eWFpYCx4GbuzY8fjdO3CAVnL/NPZHwE Eh/u5laOzMOZIlMyZxWutvygrwpbGdw= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Itaru Kitayama To: Oliver Upton Cc: kvmarm@lists.linux.dev, Marc Zyngier , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Paolo Bonzini , Sean Christopherson , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , David Hildenbrand , linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org Subject: Re: [PATCH 01/13] KVM: arm64: selftests: Provide kvm_arch_vm_post_create() in library code Message-ID: References: <20250917212044.294760-1-oliver.upton@linux.dev> <20250917212044.294760-2-oliver.upton@linux.dev> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250917212044.294760-2-oliver.upton@linux.dev> X-Migadu-Flow: FLOW_OUT X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250917_182622_471796_C7941A69 X-CRM114-Status: GOOD ( 22.15 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Wed, Sep 17, 2025 at 02:20:31PM -0700, Oliver Upton wrote: > In order to compel the default usage of EL2 in selftests, move > kvm_arch_vm_post_create() to library code and expose an opt-in for using > MTE by default. > > Signed-off-by: Oliver Upton > --- > .../testing/selftests/kvm/arm64/set_id_regs.c | 19 +++++-------------- > .../selftests/kvm/include/arm64/processor.h | 2 ++ > .../selftests/kvm/lib/arm64/processor.c | 13 +++++++++++++ > 3 files changed, 20 insertions(+), 14 deletions(-) > > diff --git a/tools/testing/selftests/kvm/arm64/set_id_regs.c b/tools/testing/selftests/kvm/arm64/set_id_regs.c > index 189321e96925..a2d367a2c93c 100644 > --- a/tools/testing/selftests/kvm/arm64/set_id_regs.c > +++ b/tools/testing/selftests/kvm/arm64/set_id_regs.c > @@ -15,8 +15,6 @@ > #include "test_util.h" > #include > > -bool have_cap_arm_mte; > - > enum ftr_type { > FTR_EXACT, /* Use a predefined safe value */ > FTR_LOWER_SAFE, /* Smaller value is safe */ > @@ -568,7 +566,9 @@ static void test_user_set_mte_reg(struct kvm_vcpu *vcpu) > uint64_t mte_frac; > int idx, err; > > - if (!have_cap_arm_mte) { > + val = vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64PFR1_EL1)); > + mte = FIELD_GET(ID_AA64PFR1_EL1_MTE, val); > + if (!mte) { > ksft_test_result_skip("MTE capability not supported, nothing to test\n"); > return; > } > @@ -593,9 +593,6 @@ static void test_user_set_mte_reg(struct kvm_vcpu *vcpu) > * from unsupported (0xF) to supported (0). > * > */ > - val = vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64PFR1_EL1)); > - > - mte = FIELD_GET(ID_AA64PFR1_EL1_MTE, val); > mte_frac = FIELD_GET(ID_AA64PFR1_EL1_MTE_frac, val); > if (mte != ID_AA64PFR1_EL1_MTE_MTE2 || > mte_frac != ID_AA64PFR1_EL1_MTE_frac_NI) { > @@ -750,14 +747,6 @@ static void test_reset_preserves_id_regs(struct kvm_vcpu *vcpu) > ksft_test_result_pass("%s\n", __func__); > } > > -void kvm_arch_vm_post_create(struct kvm_vm *vm) > -{ > - if (vm_check_cap(vm, KVM_CAP_ARM_MTE)) { > - vm_enable_cap(vm, KVM_CAP_ARM_MTE, 0); > - have_cap_arm_mte = true; > - } > -} > - > int main(void) > { > struct kvm_vcpu *vcpu; > @@ -769,6 +758,8 @@ int main(void) > TEST_REQUIRE(kvm_has_cap(KVM_CAP_ARM_SUPPORTED_REG_MASK_RANGES)); > TEST_REQUIRE(kvm_has_cap(KVM_CAP_ARM_WRITABLE_IMP_ID_REGS)); > > + test_wants_mte(); > + > vm = vm_create(1); > vm_enable_cap(vm, KVM_CAP_ARM_WRITABLE_IMP_ID_REGS, 0); > vcpu = vm_vcpu_add(vm, 0, guest_code); > diff --git a/tools/testing/selftests/kvm/include/arm64/processor.h b/tools/testing/selftests/kvm/include/arm64/processor.h > index 255fed769a8a..8370fc94041d 100644 > --- a/tools/testing/selftests/kvm/include/arm64/processor.h > +++ b/tools/testing/selftests/kvm/include/arm64/processor.h > @@ -300,4 +300,6 @@ void smccc_smc(uint32_t function_id, uint64_t arg0, uint64_t arg1, > /* Execute a Wait For Interrupt instruction. */ > void wfi(void); > > +void test_wants_mte(void); > + > #endif /* SELFTEST_KVM_PROCESSOR_H */ > diff --git a/tools/testing/selftests/kvm/lib/arm64/processor.c b/tools/testing/selftests/kvm/lib/arm64/processor.c > index eb115123d741..caed1998c7b3 100644 > --- a/tools/testing/selftests/kvm/lib/arm64/processor.c > +++ b/tools/testing/selftests/kvm/lib/arm64/processor.c > @@ -653,3 +653,16 @@ void wfi(void) > { > asm volatile("wfi"); > } > + > +static bool request_mte; > + > +void test_wants_mte(void) > +{ > + request_mte = true; > +} > + > +void kvm_arch_vm_post_create(struct kvm_vm *vm) > +{ > + if (request_mte && vm_check_cap(vm, KVM_CAP_ARM_MTE)) > + vm_enable_cap(vm, KVM_CAP_ARM_MTE, 0); > +} > -- > 2.47.3 > Hi, On FVP RevC with the kernel your series applied, I see set_id_regs fails to execute. # ./arm64/set_id_regs Random seed: 0x6b8b4567 TAP version 13 1..102 ok 1 ID_AA64DFR0_EL1_DoubleLock ok 2 ID_AA64DFR0_EL1_WRPs ok 3 ID_AA64DFR0_EL1_PMUVer ok 4 ID_AA64DFR0_EL1_DebugVer ok 5 # SKIP ID_DFR0_EL1_PerfMon on AARCH64 only system ok 6 # SKIP ID_DFR0_EL1_CopDbg on AARCH64 only system ok 7 ID_AA64ISAR0_EL1_RNDR ok 8 ID_AA64ISAR0_EL1_TLB ok 9 ID_AA64ISAR0_EL1_TS ok 10 ID_AA64ISAR0_EL1_FHM ok 11 ID_AA64ISAR0_EL1_DP ok 12 ID_AA64ISAR0_EL1_SM4 ok 13 ID_AA64ISAR0_EL1_SM3 ok 14 ID_AA64ISAR0_EL1_SHA3 ok 15 ID_AA64ISAR0_EL1_RDM ok 16 ID_AA64ISAR0_EL1_TME ok 17 ID_AA64ISAR0_EL1_ATOMIC ok 18 ID_AA64ISAR0_EL1_CRC32 ok 19 ID_AA64ISAR0_EL1_SHA2 ok 20 ID_AA64ISAR0_EL1_SHA1 ok 21 ID_AA64ISAR0_EL1_AES ok 22 ID_AA64ISAR1_EL1_LS64 ok 23 ID_AA64ISAR1_EL1_XS ok 24 ID_AA64ISAR1_EL1_I8MM ok 25 ID_AA64ISAR1_EL1_DGH ok 26 ID_AA64ISAR1_EL1_BF16 ok 27 ID_AA64ISAR1_EL1_SPECRES ok 28 ID_AA64ISAR1_EL1_SB ok 29 ID_AA64ISAR1_EL1_FRINTTS ok 30 ID_AA64ISAR1_EL1_LRCPC ok 31 ID_AA64ISAR1_EL1_FCMA ok 32 ID_AA64ISAR1_EL1_JSCVT ok 33 ID_AA64ISAR1_EL1_DPB ok 34 ID_AA64ISAR2_EL1_BC ok 35 ID_AA64ISAR2_EL1_RPRES ok 36 ID_AA64ISAR2_EL1_WFxT ok 37 ID_AA64PFR0_EL1_CSV3 ok 38 ID_AA64PFR0_EL1_CSV2 ok 39 ID_AA64PFR0_EL1_DIT ok 40 ID_AA64PFR0_EL1_SEL2 ok 41 ID_AA64PFR0_EL1_GIC ok 42 ID_AA64PFR0_EL1_EL3 ok 43 ID_AA64PFR0_EL1_EL2 ok 44 ID_AA64PFR0_EL1_EL1 ok 45 ID_AA64PFR0_EL1_EL0 ok 46 ID_AA64PFR1_EL1_DF2 ok 47 ID_AA64PFR1_EL1_CSV2_frac ok 48 ID_AA64PFR1_EL1_SSBS ok 49 ID_AA64PFR1_EL1_BT ok 50 ID_AA64MMFR0_EL1_ECV ok 51 ID_AA64MMFR0_EL1_EXS ==== Test Assertion Failure ==== include/kvm_util.h:815: !ret pid=897 tid=897 errno=22 - Invalid argument sh: line 1: addr2line: command not found KVM_SET_ONE_REG failed, rc: -1 errno: 22 (Invalid argument)