您的位置:首页 > 运维架构 > Linux

linux 增加一个zone

2013-12-09 15:06 246 查看
--- old/include/linux/gfp.h	2013-11-12 22:08:24.000000000 -0500
+++ new/include/linux/gfp.h	2013-12-03 14:07:59.067137000 -0500
@@ -35,6 +35,7 @@
#define ___GFP_NO_KSWAPD	0x400000u
#define ___GFP_OTHER_NODE	0x800000u
#define ___GFP_WRITE		0x1000000u
+#define ___GFP_NVM             0x2000000u
/* If the above are modified, __GFP_BITS_SHIFT may need updating */

/*
@@ -152,6 +153,7 @@

/* 4GB DMA on some platforms */
#define GFP_DMA32	__GFP_DMA32
+#define GFP_NVM    __GFP_NVM

/* Convert GFP flags to their corresponding migrate type */
static inline int allocflags_to_migratetype(gfp_t gfp_flags)
@@ -222,14 +224,14 @@
#endif

#define GFP_ZONE_TABLE ( \
-	(ZONE_NORMAL << 0 * ZONES_SHIFT)				      \
-	| (OPT_ZONE_DMA << ___GFP_DMA * ZONES_SHIFT)			      \
-	| (OPT_ZONE_HIGHMEM << ___GFP_HIGHMEM * ZONES_SHIFT)		      \
-	| (OPT_ZONE_DMA32 << ___GFP_DMA32 * ZONES_SHIFT)		      \
-	| (ZONE_NORMAL << ___GFP_MOVABLE * ZONES_SHIFT)			      \
-	| (OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA) * ZONES_SHIFT)	      \
-	| (ZONE_MOVABLE << (___GFP_MOVABLE | ___GFP_HIGHMEM) * ZONES_SHIFT)   \
-	| (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * ZONES_SHIFT)   \
+	((__force unsigned long)ZONE_NORMAL << 0 * ZONES_SHIFT)				      \
+	| ((__force unsigned long)OPT_ZONE_DMA << ___GFP_DMA * ZONES_SHIFT)			      \
+	| ((__force unsigned long)OPT_ZONE_HIGHMEM << ___GFP_HIGHMEM * ZONES_SHIFT)		      \
+	| ((__force unsigned long)OPT_ZONE_DMA32 << ___GFP_DMA32 * ZONES_SHIFT)		      \
+	| ((__force unsigned long)ZONE_NORMAL << ___GFP_MOVABLE * ZONES_SHIFT)			      \
+	| ((__force unsigned long)OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA) * ZONES_SHIFT)	      \
+	| ((__force unsigned long)ZONE_MOVABLE << (___GFP_MOVABLE | ___GFP_HIGHMEM) * ZONES_SHIFT)   \
+	| ((__force unsigned long)OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * ZONES_SHIFT)   \
)

/*


--- old/arch/x86/mm/init.c	2013-11-12 22:08:24.000000000 -0500
+++ new/arch/x86/mm/init.c	2013-12-03 14:09:45.628146000 -0500
@@ -572,9 +572,10 @@
max_zone_pfns[ZONE_DMA]		= MAX_DMA_PFN;
#endif
#ifdef CONFIG_ZONE_DMA32
-	max_zone_pfns[ZONE_DMA32]	= MAX_DMA32_PFN;
+	max_zone_pfns[ZONE_DMA32]	= MAX_DMA32_PFN / 2;
#endif
-	max_zone_pfns[ZONE_NORMAL]	= max_low_pfn;
+	max_zone_pfns[ZONE_NORMAL]	= MAX_DMA32_PFN;
+	max_zone_pfns[ZONE_NVM]		= max_low_pfn;
#ifdef CONFIG_HIGHMEM
max_zone_pfns[ZONE_HIGHMEM]	= max_pfn;
#endif

--- old/include/linux/mmzone.h	2013-11-12 22:08:24.000000000 -0500
+++ new/include/linux/mmzone.h	2013-12-03 19:31:19.454768000 -0500
@@ -304,6 +304,7 @@
*/
ZONE_HIGHMEM,
#endif
+	ZONE_NVM,
ZONE_MOVABLE,
__MAX_NR_ZONES
};

--- old/mm/page_alloc.c	2013-11-12 22:08:24.000000000 -0500
+++ new/mm/page_alloc.c	2013-12-03 14:15:26.298174000 -0500
@@ -197,6 +197,7 @@
"DMA32",
#endif
"Normal",
+	 "NVM",
#ifdef CONFIG_HIGHMEM
"HighMem",
#endif
@@ -1864,6 +1865,9 @@
*/
for_each_zone_zonelist_nodemask(zone, z, zonelist,
high_zoneidx, nodemask) {
+		if(zone_idx(zone)==ZONE_NVM){
+				continue;
+		}
if (IS_ENABLED(CONFIG_NUMA) && zlc_active &&
!zlc_zone_worth_trying(zonelist, z, allowednodes))
continue;

--- old/include/linux/page-flags-layout.h	2013-11-12 22:08:24.000000000 -0500
+++ new/include/linux/page-flags-layout.h	2013-12-03 14:22:50.962210000 -0500
@@ -18,7 +18,8 @@
#elif MAX_NR_ZONES <= 4
#define ZONES_SHIFT 2
#else
-#error ZONES_SHIFT -- too many zones configured adjust calculation
+#define ZONES_SHIFT 3
+//#error ZONES_SHIFT -- too many zones configured adjust calculation
#endif

#ifdef CONFIG_SPARSEMEM
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 添加 zone