From nobody Mon Jun 8 06:36:43 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 446AC3DD84C for ; Fri, 5 Jun 2026 18:53:19 +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=1780685602; cv=none; b=Xb7XQwYsg0w2JqUqM4c5FWarC4Q4GVEKJXXtRusaklvbEE98WtUnX7xxTpAMTYhnF9uDomqzpeCnqOrxMUS2WSJOM3Sewrvm7jO2xKida0S3jpDvoVl/SwmHMn1WffEwnYjk7Iqze+8xQj19c2VXR42nBq4O5XAp+arE8l/vzMo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780685602; c=relaxed/simple; bh=LXJ4N9M7Q2HKVuHJiqod/o5k82b/D7efOXXT+s8XorA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=aTO/oLNb0G3nQmewcT+dXQEQOyKBjDplkJvGf7hIjK/DcvW7X8bPyW2lEBD8R7caCQwc6fLG+9vuI9RKC4GH1D7heO5Y2/DDZ9E52IrU/6CRNypjxvFKnINtZqKaPKBwAtPUdZl8Jx2HrGjjEgpcThDsysPTfIPJLvd0+J+/kqQ= 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; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=AMI5okhr; 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="AMI5okhr" 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 3A84947D8; Fri, 5 Jun 2026 11:53:13 -0700 (PDT) Received: from workstation-e142269.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 0D85C3F7D8; Fri, 5 Jun 2026 11:53:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1780685598; bh=LXJ4N9M7Q2HKVuHJiqod/o5k82b/D7efOXXT+s8XorA=; h=From:To:Cc:Subject:Date:From; b=AMI5okhrpHUmhc5NVTNmDPnAOcbbGme/mmAAZmNe98E9+W2v3TU3lBPqxHGunxbZ1 G4QEg14jmqDdYWMJhgb0+sF6MYCihH4r3gzPtUTJ6I6/OURExxvW24WLcln3bzDeZE VFEHXDmxegfxEzB0N7eqIHJ3TM1bnfIveyeEjOrk= From: Wei-Lin Chang To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org Cc: Marc Zyngier , Oliver Upton , Joey Gouly , Steffen Eiden , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Wei-Lin Chang Subject: [PATCH] KVM: arm64: Fix block mapping validity check in stage-1 walker Date: Fri, 5 Jun 2026 19:52:55 +0100 Message-ID: <20260605185255.2431996-1-weilin.chang@arm.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" For the 64K granule size, FEAT_LPA determines whether a level 1 mapping is allowed. Using the result of has_52bit_pa() is too restrictive, as it also checks the selected output addressi size in TCR.(I)PS. Fix it by only checking FEAT_LPA. Fixes: 5da3a3b27a01 ("KVM: arm64: Expand valid block mappings to FEAT_LPA/L= PA2 support") Signed-off-by: Wei-Lin Chang --- arch/arm64/kvm/at.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kvm/at.c b/arch/arm64/kvm/at.c index 2ddb5b5a055e..30e6fa8ac07c 100644 --- a/arch/arm64/kvm/at.c +++ b/arch/arm64/kvm/at.c @@ -564,15 +564,18 @@ static int walk_s1(struct kvm_vcpu *vcpu, struct s1_w= alk_info *wi, /* Block mapping, check the validity of the level */ if (!(desc & BIT(1))) { bool valid_block =3D false; + bool lpa =3D kvm_has_feat_enum(vcpu->kvm, ID_AA64MMFR0_EL1, PARANGE, 52); =20 switch (BIT(wi->pgshift)) { case SZ_4K: valid_block =3D level =3D=3D 1 || level =3D=3D 2 || (wi->pa52bit && lev= el =3D=3D 0); break; case SZ_16K: - case SZ_64K: valid_block =3D level =3D=3D 2 || (wi->pa52bit && level =3D=3D 1); break; + case SZ_64K: + valid_block =3D level =3D=3D 2 || (lpa && level =3D=3D 1); + break; } =20 if (!valid_block) --=20 2.43.0