[PATCH v2 07/16] KVM: arm64: Populate PAR_EL1 with 52bit addresses

Oliver Upton oliver.upton at linux.dev
Fri Sep 19 15:00:59 PDT 2025


On Mon, Sep 15, 2025 at 12:44:42PM +0100, Marc Zyngier wrote:
> Expand the output address populated in PAR_EL1 to 52bit addresses.
> 
> Signed-off-by: Marc Zyngier <maz at kernel.org>
> ---
>  arch/arm64/kvm/at.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm64/kvm/at.c b/arch/arm64/kvm/at.c
> index 952c02c57d7dd..1c2f7719b6cbb 100644
> --- a/arch/arm64/kvm/at.c
> +++ b/arch/arm64/kvm/at.c
> @@ -844,7 +844,7 @@ static u64 compute_par_s1(struct kvm_vcpu *vcpu, struct s1_walk_info *wi,
>  	} else if (wr->level == S1_MMU_DISABLED) {
>  		/* MMU off or HCR_EL2.DC == 1 */
>  		par  = SYS_PAR_EL1_NSE;
> -		par |= wr->pa & GENMASK_ULL(47, 12);
> +		par |= wr->pa & GENMASK_ULL(52, 12);

That should be bit 51, no?

Maybe just use SYS_PAR_EL1_PA as the mask.

>  		if (wi->regime == TR_EL10 &&
>  		    (__vcpu_sys_reg(vcpu, HCR_EL2) & HCR_DC)) {
> @@ -877,7 +877,7 @@ static u64 compute_par_s1(struct kvm_vcpu *vcpu, struct s1_walk_info *wi,
>  			mair = MEMATTR(NC, NC);
>  
>  		par |= FIELD_PREP(SYS_PAR_EL1_ATTR, mair);
> -		par |= wr->pa & GENMASK_ULL(47, 12);
> +		par |= wr->pa & GENMASK_ULL(52, 12);

Same here.

>  		sh = compute_s1_sh(wi, wr, mair);
>  		par |= FIELD_PREP(SYS_PAR_EL1_SH, sh);
> -- 
> 2.39.2
> 

Thanks,
Oliver



More information about the linux-arm-kernel mailing list