Commit 6097ddd1 authored by Liu Shixin's avatar Liu Shixin
Browse files

mm: add ZONE_EXTMEM for future extension to avoid kabi broken

hulk inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I91BZS



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

There are many memory media, and some memory is dedicated. To distinguish
it from oridinary memory, add new zone_type ZONE_EXTMEM to manage it.

This patch is only for reserving new zone type to avoid kabi broken.

Signed-off-by: default avatarLiu Shixin <liushixin2@huawei.com>
parent 6f420dad
Loading
Loading
Loading
Loading
+16 −8
Original line number Diff line number Diff line
@@ -98,15 +98,21 @@ static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags)
#error GFP_ZONES_SHIFT too large to create GFP_ZONE_TABLE integer
#endif

#if GFP_ZONES_SHIFT >= 3
#define TABLE_TYPE(X)	((uint64_t)X)
#else
#define TABLE_TYPE(X)	X
#endif

#define GFP_ZONE_TABLE ( \
	(ZONE_NORMAL << 0 * GFP_ZONES_SHIFT)				       \
	| (OPT_ZONE_DMA << ___GFP_DMA * GFP_ZONES_SHIFT)		       \
	| (OPT_ZONE_HIGHMEM << ___GFP_HIGHMEM * GFP_ZONES_SHIFT)	       \
	| (OPT_ZONE_DMA32 << ___GFP_DMA32 * GFP_ZONES_SHIFT)		       \
	| (ZONE_NORMAL << ___GFP_MOVABLE * GFP_ZONES_SHIFT)		       \
	| (OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA) * GFP_ZONES_SHIFT)    \
	| (ZONE_MOVABLE << (___GFP_MOVABLE | ___GFP_HIGHMEM) * GFP_ZONES_SHIFT)\
	| (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * GFP_ZONES_SHIFT)\
	(TABLE_TYPE(ZONE_NORMAL) << 0 * GFP_ZONES_SHIFT)					\
	| (TABLE_TYPE(OPT_ZONE_DMA) << ___GFP_DMA * GFP_ZONES_SHIFT)				\
	| (TABLE_TYPE(OPT_ZONE_HIGHMEM) << ___GFP_HIGHMEM * GFP_ZONES_SHIFT)			\
	| (TABLE_TYPE(OPT_ZONE_DMA32) << ___GFP_DMA32 * GFP_ZONES_SHIFT)			\
	| (TABLE_TYPE(ZONE_NORMAL) << ___GFP_MOVABLE * GFP_ZONES_SHIFT)				\
	| (TABLE_TYPE(OPT_ZONE_DMA) << (___GFP_MOVABLE | ___GFP_DMA) * GFP_ZONES_SHIFT)		\
	| (TABLE_TYPE(ZONE_MOVABLE) << (___GFP_MOVABLE | ___GFP_HIGHMEM) * GFP_ZONES_SHIFT)	\
	| (TABLE_TYPE(OPT_ZONE_DMA32) << (___GFP_MOVABLE | ___GFP_DMA32) * GFP_ZONES_SHIFT)	\
)

/*
@@ -143,6 +149,8 @@ static inline enum zone_type gfp_zone(gfp_t flags)
	return z;
}

#undef TABLE_TYPE

/*
 * There is only one page-allocator function, and two main namespaces to
 * it. The alloc_page*() variants return 'struct page *' and as such
+3 −0
Original line number Diff line number Diff line
@@ -777,6 +777,9 @@ enum zone_type {
	 * access.
	 */
	ZONE_HIGHMEM,
#endif
#ifdef CONFIG_ZONE_EXTMEM
	ZONE_EXTMEM,
#endif
	/*
	 * ZONE_MOVABLE is similar to ZONE_NORMAL, except that it contains
+7 −0
Original line number Diff line number Diff line
@@ -275,11 +275,18 @@ IF_HAVE_VM_USWAP(VM_USWAP, "userswap" ) \
#define IFDEF_ZONE_HIGHMEM(X)
#endif

#ifdef CONFIG_ZONE_EXTMEM
#define IFDEF_ZONE_EXTMEM(X) X
#else
#define IFDEF_ZONE_EXTMEM(X)
#endif

#define ZONE_TYPE						\
	IFDEF_ZONE_DMA(		EM (ZONE_DMA,	 "DMA"))	\
	IFDEF_ZONE_DMA32(	EM (ZONE_DMA32,	 "DMA32"))	\
				EM (ZONE_NORMAL, "Normal")	\
	IFDEF_ZONE_HIGHMEM(	EM (ZONE_HIGHMEM,"HighMem"))	\
	IFDEF_ZONE_EXTMEM(	EM (ZONE_EXTMEM, "ExtMem"))	\
				EMe(ZONE_MOVABLE,"Movable")

#define LRU_NAMES		\
+12 −0
Original line number Diff line number Diff line
@@ -1060,6 +1060,18 @@ config ZONE_DEVICE

	  If FS_DAX is enabled, then say Y.

config ZONE_EXTMEM
	bool "Extension memory hotplug support"
	default n
	depends on MEMORY_HOTPLUG
	depends on MEMORY_HOTREMOVE
	depends on ARM64
	help
	  Extension memory hotplug support allows for customizing memory
	  policy such as UB or CXL memory, mirroring memory, etc.

	  If unsure, say N.

#
# Helpers to mirror range of the CPU page tables of a process into device page
# tables.
+6 −0
Original line number Diff line number Diff line
@@ -252,6 +252,9 @@ static int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES] = {
	[ZONE_NORMAL] = 32,
#ifdef CONFIG_HIGHMEM
	[ZONE_HIGHMEM] = 0,
#endif
#ifdef CONFIG_ZONE_EXTMEM
	[ZONE_EXTMEM] = 0,
#endif
	[ZONE_MOVABLE] = 0,
};
@@ -266,6 +269,9 @@ char * const zone_names[MAX_NR_ZONES] = {
	 "Normal",
#ifdef CONFIG_HIGHMEM
	 "HighMem",
#endif
#ifdef CONFIG_ZONE_EXTMEM
	 "ExtMem",
#endif
	 "Movable",
#ifdef CONFIG_ZONE_DEVICE