1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2938f8464SMichael Ellerman /*
3938f8464SMichael Ellerman * Copyright 2017, Michael Ellerman, IBM Corporation.
4938f8464SMichael Ellerman */
5938f8464SMichael Ellerman #ifndef _LINUX_SET_MEMORY_H_
6938f8464SMichael Ellerman #define _LINUX_SET_MEMORY_H_
7938f8464SMichael Ellerman
8938f8464SMichael Ellerman #ifdef CONFIG_ARCH_HAS_SET_MEMORY
9938f8464SMichael Ellerman #include <asm/set_memory.h>
10938f8464SMichael Ellerman #else
set_memory_ro(unsigned long addr,int numpages)1182ce8e2fSChristophe Leroy static inline int __must_check set_memory_ro(unsigned long addr, int numpages) { return 0; }
set_memory_rw(unsigned long addr,int numpages)1282ce8e2fSChristophe Leroy static inline int __must_check set_memory_rw(unsigned long addr, int numpages) { return 0; }
set_memory_x(unsigned long addr,int numpages)1382ce8e2fSChristophe Leroy static inline int __must_check set_memory_x(unsigned long addr, int numpages) { return 0; }
set_memory_nx(unsigned long addr,int numpages)1482ce8e2fSChristophe Leroy static inline int __must_check set_memory_nx(unsigned long addr, int numpages) { return 0; }
15938f8464SMichael Ellerman #endif
16938f8464SMichael Ellerman
1760463628SPeter Zijlstra #ifndef set_memory_rox
set_memory_rox(unsigned long addr,int numpages)18d48567c9SPeter Zijlstra static inline int set_memory_rox(unsigned long addr, int numpages)
19d48567c9SPeter Zijlstra {
20d48567c9SPeter Zijlstra int ret = set_memory_ro(addr, numpages);
21d48567c9SPeter Zijlstra if (ret)
22d48567c9SPeter Zijlstra return ret;
23d48567c9SPeter Zijlstra return set_memory_x(addr, numpages);
24d48567c9SPeter Zijlstra }
2560463628SPeter Zijlstra #endif
26d48567c9SPeter Zijlstra
27d253ca0cSRick Edgecombe #ifndef CONFIG_ARCH_HAS_SET_DIRECT_MAP
set_direct_map_invalid_noflush(struct page * page)28d253ca0cSRick Edgecombe static inline int set_direct_map_invalid_noflush(struct page *page)
29d253ca0cSRick Edgecombe {
30d253ca0cSRick Edgecombe return 0;
31d253ca0cSRick Edgecombe }
set_direct_map_default_noflush(struct page * page)32d253ca0cSRick Edgecombe static inline int set_direct_map_default_noflush(struct page *page)
33d253ca0cSRick Edgecombe {
34d253ca0cSRick Edgecombe return 0;
35d253ca0cSRick Edgecombe }
3632a0de88SMike Rapoport
set_direct_map_valid_noflush(struct page * page,unsigned nr,bool valid)37*0c6378a7SMike Rapoport (Microsoft) static inline int set_direct_map_valid_noflush(struct page *page,
38*0c6378a7SMike Rapoport (Microsoft) unsigned nr, bool valid)
39*0c6378a7SMike Rapoport (Microsoft) {
40*0c6378a7SMike Rapoport (Microsoft) return 0;
41*0c6378a7SMike Rapoport (Microsoft) }
42*0c6378a7SMike Rapoport (Microsoft)
kernel_page_present(struct page * page)4332a0de88SMike Rapoport static inline bool kernel_page_present(struct page *page)
4432a0de88SMike Rapoport {
4532a0de88SMike Rapoport return true;
4632a0de88SMike Rapoport }
476d47c23bSMike Rapoport #else /* CONFIG_ARCH_HAS_SET_DIRECT_MAP */
486d47c23bSMike Rapoport /*
496d47c23bSMike Rapoport * Some architectures, e.g. ARM64 can disable direct map modifications at
506d47c23bSMike Rapoport * boot time. Let them overrive this query.
516d47c23bSMike Rapoport */
526d47c23bSMike Rapoport #ifndef can_set_direct_map
can_set_direct_map(void)536d47c23bSMike Rapoport static inline bool can_set_direct_map(void)
546d47c23bSMike Rapoport {
556d47c23bSMike Rapoport return true;
566d47c23bSMike Rapoport }
576d47c23bSMike Rapoport #define can_set_direct_map can_set_direct_map
58d253ca0cSRick Edgecombe #endif
596d47c23bSMike Rapoport #endif /* CONFIG_ARCH_HAS_SET_DIRECT_MAP */
60d253ca0cSRick Edgecombe
61b3fdf939SJane Chu #ifdef CONFIG_X86_64
625898b43aSJane Chu int set_mce_nospec(unsigned long pfn);
63b3fdf939SJane Chu int clear_mce_nospec(unsigned long pfn);
64b3fdf939SJane Chu #else
set_mce_nospec(unsigned long pfn)655898b43aSJane Chu static inline int set_mce_nospec(unsigned long pfn)
66284ce401SDan Williams {
67284ce401SDan Williams return 0;
68284ce401SDan Williams }
clear_mce_nospec(unsigned long pfn)69284ce401SDan Williams static inline int clear_mce_nospec(unsigned long pfn)
70284ce401SDan Williams {
71284ce401SDan Williams return 0;
72284ce401SDan Williams }
73284ce401SDan Williams #endif
74284ce401SDan Williams
75b7fa0746SChristoph Hellwig #ifndef CONFIG_ARCH_HAS_MEM_ENCRYPT
set_memory_encrypted(unsigned long addr,int numpages)76b7fa0746SChristoph Hellwig static inline int set_memory_encrypted(unsigned long addr, int numpages)
77b7fa0746SChristoph Hellwig {
78b7fa0746SChristoph Hellwig return 0;
79b7fa0746SChristoph Hellwig }
80b7fa0746SChristoph Hellwig
set_memory_decrypted(unsigned long addr,int numpages)81b7fa0746SChristoph Hellwig static inline int set_memory_decrypted(unsigned long addr, int numpages)
82b7fa0746SChristoph Hellwig {
83b7fa0746SChristoph Hellwig return 0;
84b7fa0746SChristoph Hellwig }
85b7fa0746SChristoph Hellwig #endif /* CONFIG_ARCH_HAS_MEM_ENCRYPT */
86b7fa0746SChristoph Hellwig
87938f8464SMichael Ellerman #endif /* _LINUX_SET_MEMORY_H_ */
88