Commit 7f770cd1 authored by Nikita Panov's avatar Nikita Panov Committed by Denis Darvish
Browse files

mm: add support of memory protection for NUMA replicas

kunpeng inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/IBOJU2



-------------------------------------------------

Acked-by: default avatarArtem Kuzin <artem.kuzin@huawei.com>
Acked-by: default avatarAlexander Grubnikov <alexander.grubnikov@huawei.com>
Acked-by: default avatarIlya Hanov <ilya.hanov@huawei-partners.com>
Acked-by: default avatarDenis Darvish <darvish.denis@huawei.com>
Signed-off-by: default avatarNikita Panov <panov.nikita@huawei.com>
parent 73a2c0bb
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -7,11 +7,32 @@

#ifdef CONFIG_ARCH_HAS_SET_MEMORY
#include <asm/set_memory.h>

#ifdef CONFIG_KERNEL_REPLICATION
int numa_set_memory_ro(unsigned long addr, int numpages);
int numa_set_memory_rw(unsigned long addr, int numpages);
int numa_set_memory_x(unsigned long addr, int numpages);
int numa_set_memory_nx(unsigned long addr, int numpages);
#else

#define numa_set_memory_ro set_memory_ro
#define numa_set_memory_rw set_memory_rw
#define numa_set_memory_x  set_memory_x
#define numa_set_memory_nx set_memory_nx

#endif /* CONFIG_KERNEL_REPLICATION */

#else
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; }

#define numa_set_memory_ro set_memory_ro
#define numa_set_memory_rw set_memory_rw
#define numa_set_memory_x  set_memory_x
#define numa_set_memory_nx set_memory_nx

#endif

#ifndef set_memory_rox
@@ -24,6 +45,20 @@ static inline int set_memory_rox(unsigned long addr, int numpages)
}
#endif

#ifndef numa_set_memory_rox
#ifdef CONFIG_KERNEL_REPLICATION
static inline int numa_set_memory_rox(unsigned long addr, int numpages)
{
	int ret = numa_set_memory_ro(addr, numpages);
	if (ret)
		return ret;
	return numa_set_memory_x(addr, numpages);
}
#else
#define numa_set_memory_rox set_memory_rox
#endif
#endif

#ifndef CONFIG_ARCH_HAS_SET_DIRECT_MAP
static inline int set_direct_map_invalid_noflush(struct page *page)
{