Skip to content

Commit 1c3fdf1

Browse files
sean-jcbonzini
authored andcommitted
KVM: x86/mmu: Hoist guest_memfd max level/order helpers "up" in mmu.c
Move kvm_max_level_for_order() and kvm_max_private_mapping_level() up in mmu.c so that they can be used by __kvm_mmu_max_mapping_level(). Opportunistically drop the "inline" from kvm_max_level_for_order(). No functional change intended. Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com> Reviewed-by: Ackerley Tng <ackerleytng@google.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Reviewed-by: David Hildenbrand <david@redhat.com> Reviewed-by: Fuad Tabba <tabba@google.com> Message-ID: <20250729225455.670324-14-seanjc@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent d6c840a commit 1c3fdf1

1 file changed

Lines changed: 36 additions & 36 deletions

File tree

arch/x86/kvm/mmu/mmu.c

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3285,6 +3285,42 @@ static int host_pfn_mapping_level(struct kvm *kvm, gfn_t gfn,
32853285
return level;
32863286
}
32873287

3288+
static u8 kvm_max_level_for_order(int order)
3289+
{
3290+
BUILD_BUG_ON(KVM_MAX_HUGEPAGE_LEVEL > PG_LEVEL_1G);
3291+
3292+
KVM_MMU_WARN_ON(order != KVM_HPAGE_GFN_SHIFT(PG_LEVEL_1G) &&
3293+
order != KVM_HPAGE_GFN_SHIFT(PG_LEVEL_2M) &&
3294+
order != KVM_HPAGE_GFN_SHIFT(PG_LEVEL_4K));
3295+
3296+
if (order >= KVM_HPAGE_GFN_SHIFT(PG_LEVEL_1G))
3297+
return PG_LEVEL_1G;
3298+
3299+
if (order >= KVM_HPAGE_GFN_SHIFT(PG_LEVEL_2M))
3300+
return PG_LEVEL_2M;
3301+
3302+
return PG_LEVEL_4K;
3303+
}
3304+
3305+
static u8 kvm_max_private_mapping_level(struct kvm *kvm, kvm_pfn_t pfn,
3306+
u8 max_level, int gmem_order)
3307+
{
3308+
u8 req_max_level;
3309+
3310+
if (max_level == PG_LEVEL_4K)
3311+
return PG_LEVEL_4K;
3312+
3313+
max_level = min(kvm_max_level_for_order(gmem_order), max_level);
3314+
if (max_level == PG_LEVEL_4K)
3315+
return PG_LEVEL_4K;
3316+
3317+
req_max_level = kvm_x86_call(gmem_max_mapping_level)(kvm, pfn);
3318+
if (req_max_level)
3319+
max_level = min(max_level, req_max_level);
3320+
3321+
return max_level;
3322+
}
3323+
32883324
static int __kvm_mmu_max_mapping_level(struct kvm *kvm,
32893325
const struct kvm_memory_slot *slot,
32903326
gfn_t gfn, int max_level, bool is_private)
@@ -4503,42 +4539,6 @@ void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu, struct kvm_async_pf *work)
45034539
vcpu->stat.pf_fixed++;
45044540
}
45054541

4506-
static inline u8 kvm_max_level_for_order(int order)
4507-
{
4508-
BUILD_BUG_ON(KVM_MAX_HUGEPAGE_LEVEL > PG_LEVEL_1G);
4509-
4510-
KVM_MMU_WARN_ON(order != KVM_HPAGE_GFN_SHIFT(PG_LEVEL_1G) &&
4511-
order != KVM_HPAGE_GFN_SHIFT(PG_LEVEL_2M) &&
4512-
order != KVM_HPAGE_GFN_SHIFT(PG_LEVEL_4K));
4513-
4514-
if (order >= KVM_HPAGE_GFN_SHIFT(PG_LEVEL_1G))
4515-
return PG_LEVEL_1G;
4516-
4517-
if (order >= KVM_HPAGE_GFN_SHIFT(PG_LEVEL_2M))
4518-
return PG_LEVEL_2M;
4519-
4520-
return PG_LEVEL_4K;
4521-
}
4522-
4523-
static u8 kvm_max_private_mapping_level(struct kvm *kvm, kvm_pfn_t pfn,
4524-
u8 max_level, int gmem_order)
4525-
{
4526-
u8 req_max_level;
4527-
4528-
if (max_level == PG_LEVEL_4K)
4529-
return PG_LEVEL_4K;
4530-
4531-
max_level = min(kvm_max_level_for_order(gmem_order), max_level);
4532-
if (max_level == PG_LEVEL_4K)
4533-
return PG_LEVEL_4K;
4534-
4535-
req_max_level = kvm_x86_call(gmem_max_mapping_level)(kvm, pfn);
4536-
if (req_max_level)
4537-
max_level = min(max_level, req_max_level);
4538-
4539-
return max_level;
4540-
}
4541-
45424542
static void kvm_mmu_finish_page_fault(struct kvm_vcpu *vcpu,
45434543
struct kvm_page_fault *fault, int r)
45444544
{

0 commit comments

Comments
 (0)