Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright (C) 2019 SiFive
4 */
5
6#ifndef _ASM_RISCV_SET_MEMORY_H
7#define _ASM_RISCV_SET_MEMORY_H
8
9#ifndef __ASSEMBLER__
10/*
11 * Functions to change memory attributes.
12 */
13#ifdef CONFIG_MMU
14int set_memory_ro(unsigned long addr, int numpages);
15int set_memory_rw(unsigned long addr, int numpages);
16int set_memory_x(unsigned long addr, int numpages);
17int set_memory_nx(unsigned long addr, int numpages);
18int set_memory_rw_nx(unsigned long addr, int numpages);
19static __always_inline int set_kernel_memory(char *startp, char *endp,
20 int (*set_memory)(unsigned long start,
21 int num_pages))
22{
23 unsigned long start = (unsigned long)startp;
24 unsigned long end = (unsigned long)endp;
25 int num_pages = PAGE_ALIGN(end - start) >> PAGE_SHIFT;
26
27 return set_memory(start, num_pages);
28}
29#else
30static inline int set_memory_ro(unsigned long addr, int numpages) { return 0; }
31static inline int set_memory_rw(unsigned long addr, int numpages) { return 0; }
32static inline int set_memory_x(unsigned long addr, int numpages) { return 0; }
33static inline int set_memory_nx(unsigned long addr, int numpages) { return 0; }
34static inline int set_memory_rw_nx(unsigned long addr, int numpages) { return 0; }
35static inline int set_kernel_memory(char *startp, char *endp,
36 int (*set_memory)(unsigned long start,
37 int num_pages))
38{
39 return 0;
40}
41#endif
42
43int set_direct_map_invalid_noflush(struct page *page);
44int set_direct_map_default_noflush(struct page *page);
45int set_direct_map_valid_noflush(struct page *page, unsigned nr, bool valid);
46bool kernel_page_present(struct page *page);
47
48#endif /* __ASSEMBLER__ */
49
50#if defined(CONFIG_STRICT_KERNEL_RWX) || defined(CONFIG_XIP_KERNEL)
51#ifdef CONFIG_64BIT
52#define SECTION_ALIGN (1 << 21)
53#else
54#define SECTION_ALIGN (1 << 22)
55#endif
56#else /* !CONFIG_STRICT_KERNEL_RWX */
57#define SECTION_ALIGN L1_CACHE_BYTES
58#endif /* CONFIG_STRICT_KERNEL_RWX */
59
60#define PECOFF_SECTION_ALIGNMENT 0x1000
61#define PECOFF_FILE_ALIGNMENT 0x200
62
63#endif /* _ASM_RISCV_SET_MEMORY_H */