xref: /linux-6.15/include/linux/set_memory.h (revision 0c6378a7)
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