anolis: arm64: add the helper to set no-present page table

ANBZ: #6171

Add a helper set_memory_np to make the page table corresponding to
the virtual address not present.

Signed-off-by: Kaihao Bai <carlo.bai@linux.alibaba.com>
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Link: https://gitee.com/anolis/cloud-kernel/pulls/2057
This commit is contained in:
Kaihao Bai 2022-11-09 11:17:05 +08:00 committed by maqiao-alibaba
parent 077c483d3c
commit 9faaec4a7d
3 changed files with 14 additions and 1 deletions

View File

@ -172,6 +172,18 @@ int set_memory_valid(unsigned long addr, int numpages, int enable)
__pgprot(PTE_VALID));
}
int set_memory_np(unsigned long addr, int numpages)
{
/*
* If the addr belongs to linear mapping range, split it to pte level
* before changing the attribute of the page table.
*/
if (can_set_block_and_cont_map() && __is_lm_address(addr))
split_linear_mapping_after_init(addr, PAGE_SIZE * numpages, PAGE_KERNEL);
return set_memory_valid(addr, numpages, 0);
}
int set_direct_map_invalid_noflush(struct page *page)
{
struct page_change_data data = {

View File

@ -9,5 +9,5 @@ int set_memory_ro(unsigned long addr, int numpages);
int set_memory_rw(unsigned long addr, int numpages);
int set_memory_x(unsigned long addr, int numpages);
int set_memory_nx(unsigned long addr, int numpages);
int set_memory_np(unsigned long addr, int numpages);
#endif

View File

@ -12,6 +12,7 @@ static inline int set_memory_ro(unsigned long addr, int numpages) { return 0; }
static inline int set_memory_rw(unsigned long addr, int numpages) { return 0; }
static inline int set_memory_x(unsigned long addr, int numpages) { return 0; }
static inline int set_memory_nx(unsigned long addr, int numpages) { return 0; }
static inline int set_memory_np(unsigned long addr, int numpages) { return 0; }
#endif
#ifndef CONFIG_ARCH_HAS_SET_DIRECT_MAP