mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 08:03:01 +09:00
commitf922c13e77("KVM: arm64: Introduce pkvm_alloc_private_va_range()") and commit92abe0f81e("KVM: arm64: Introduce hyp_alloc_private_va_range()") added an alignment for the start address of any allocation into the nVHE hypervisor private VA range. This alignment (order of the size of the allocation) intends to enable efficient stack verification (if the PAGE_SHIFT bit is zero, the stack pointer is on the guard page and a stack overflow occurred). But this is only necessary for stack allocation and can waste a lot of VA space. So instead make stack-specific functions, handling the guard page requirements, while other users (e.g. fixmap) will only get page alignment. Reviewed-by: Kalesh Singh <kaleshsingh@google.com> Signed-off-by: Vincent Donnefort <vdonnefort@google.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20230811112037.1147863-1-vdonnefort@google.com
33 lines
1.0 KiB
C
33 lines
1.0 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
#ifndef __KVM_HYP_MM_H
|
|
#define __KVM_HYP_MM_H
|
|
|
|
#include <asm/kvm_pgtable.h>
|
|
#include <asm/spectre.h>
|
|
#include <linux/memblock.h>
|
|
#include <linux/types.h>
|
|
|
|
#include <nvhe/memory.h>
|
|
#include <nvhe/spinlock.h>
|
|
|
|
extern struct kvm_pgtable pkvm_pgtable;
|
|
extern hyp_spinlock_t pkvm_pgd_lock;
|
|
|
|
int hyp_create_pcpu_fixmap(void);
|
|
void *hyp_fixmap_map(phys_addr_t phys);
|
|
void hyp_fixmap_unmap(void);
|
|
|
|
int hyp_create_idmap(u32 hyp_va_bits);
|
|
int hyp_map_vectors(void);
|
|
int hyp_back_vmemmap(phys_addr_t back);
|
|
int pkvm_cpu_set_vector(enum arm64_hyp_spectre_vector slot);
|
|
int pkvm_create_mappings(void *from, void *to, enum kvm_pgtable_prot prot);
|
|
int pkvm_create_mappings_locked(void *from, void *to, enum kvm_pgtable_prot prot);
|
|
int __pkvm_create_private_mapping(phys_addr_t phys, size_t size,
|
|
enum kvm_pgtable_prot prot,
|
|
unsigned long *haddr);
|
|
int pkvm_create_stack(phys_addr_t phys, unsigned long *haddr);
|
|
int pkvm_alloc_private_va_range(size_t size, unsigned long *haddr);
|
|
|
|
#endif /* __KVM_HYP_MM_H */
|