diff options
| -rw-r--r-- | arch/arm64/kvm/hyp/nvhe/setup.c | 14 | 
1 files changed, 12 insertions, 2 deletions
| diff --git a/arch/arm64/kvm/hyp/nvhe/setup.c b/arch/arm64/kvm/hyp/nvhe/setup.c index 862c7b514e20..578f71798c2e 100644 --- a/arch/arm64/kvm/hyp/nvhe/setup.c +++ b/arch/arm64/kvm/hyp/nvhe/setup.c @@ -178,7 +178,7 @@ static int finalize_host_mappings_walker(u64 addr, u64 end, u32 level,  	phys = kvm_pte_to_phys(pte);  	if (!addr_is_memory(phys)) -		return 0; +		return -EINVAL;  	/*  	 * Adjust the host stage-2 mappings to match the ownership attributes @@ -207,8 +207,18 @@ static int finalize_host_mappings(void)  		.cb	= finalize_host_mappings_walker,  		.flags	= KVM_PGTABLE_WALK_LEAF,  	}; +	int i, ret; + +	for (i = 0; i < hyp_memblock_nr; i++) { +		struct memblock_region *reg = &hyp_memory[i]; +		u64 start = (u64)hyp_phys_to_virt(reg->base); + +		ret = kvm_pgtable_walk(&pkvm_pgtable, start, reg->size, &walker); +		if (ret) +			return ret; +	} -	return kvm_pgtable_walk(&pkvm_pgtable, 0, BIT(pkvm_pgtable.ia_bits), &walker); +	return 0;  }  void __noreturn __pkvm_init_finalise(void) |