1
2
3
4
5
6#ifndef _ASM_RISCV_SET_MEMORY_H
7#define _ASM_RISCV_SET_MEMORY_H
8
9#ifndef __ASSEMBLY__
10
11
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);
45bool kernel_page_present(struct page *page);
46
47#endif
48
49#ifdef CONFIG_STRICT_KERNEL_RWX
50#ifdef CONFIG_64BIT
51#define SECTION_ALIGN (1 << 21)
52#else
53#define SECTION_ALIGN (1 << 22)
54#endif
55#else
56#define SECTION_ALIGN L1_CACHE_BYTES
57#endif
58
59#endif
60