Skip to content

Commit

Permalink
KVM: arm64: Work out supported block level at compile time
Browse files Browse the repository at this point in the history
Work out the minimum page table level where KVM supports block mappings
at compile time. While at it, rewrite the comment around supported block
mappings to directly describe what KVM supports instead of phrasing in
terms of what it does not.

Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20221007234151.461779-2-oliver.upton@linux.dev
  • Loading branch information
Oliver Upton authored and Marc Zyngier committed Oct 9, 2022
1 parent b302ca5 commit 3b5c082
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions arch/arm64/include/asm/kvm_pgtable.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,18 @@

#define KVM_PGTABLE_MAX_LEVELS 4U

/*
* The largest supported block sizes for KVM (no 52-bit PA support):
* - 4K (level 1): 1GB
* - 16K (level 2): 32MB
* - 64K (level 2): 512MB
*/
#ifdef CONFIG_ARM64_4K_PAGES
#define KVM_PGTABLE_MIN_BLOCK_LEVEL 1U
#else
#define KVM_PGTABLE_MIN_BLOCK_LEVEL 2U
#endif

static inline u64 kvm_get_parange(u64 mmfr0)
{
u64 parange = cpuid_feature_extract_unsigned_field(mmfr0,
Expand Down Expand Up @@ -58,11 +70,7 @@ static inline u64 kvm_granule_size(u32 level)

static inline bool kvm_level_supports_block_mapping(u32 level)
{
/*
* Reject invalid block mappings and don't bother with 4TB mappings for
* 52-bit PAs.
*/
return !(level == 0 || (PAGE_SIZE != SZ_4K && level == 1));
return level >= KVM_PGTABLE_MIN_BLOCK_LEVEL;
}

/**
Expand Down

0 comments on commit 3b5c082

Please sign in to comment.