Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fb0e7942 authored by Christoph Lameter's avatar Christoph Lameter Committed by Linus Torvalds
Browse files

[PATCH] reduce MAX_NR_ZONES: make ZONE_DMA32 optional



Make ZONE_DMA32 optional

- Add #ifdefs around ZONE_DMA32 specific code and definitions.

- Add CONFIG_ZONE_DMA32 config option and use that for x86_64
  that alone needs this zone.

- Remove the use of CONFIG_DMA_IS_DMA32 and CONFIG_DMA_IS_NORMAL
  for ia64 and fix up the way per node ZVCs are calculated.

- Fall back to prior GFP_ZONEMASK of 0x03 if there is no
  DMA32 zone.

Signed-off-by: default avatarChristoph Lameter <clameter@sgi.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 2f1b6248
Loading
Loading
Loading
Loading
+0 −9
Original line number Diff line number Diff line
@@ -66,15 +66,6 @@ config IA64_UNCACHED_ALLOCATOR
	bool
	select GENERIC_ALLOCATOR

config DMA_IS_DMA32
	bool
	default y

config DMA_IS_NORMAL
	bool
	depends on IA64_SGI_SN2
	default y

config AUDIT_ARCH
	bool
	default y
+4 −0
Original line number Diff line number Diff line
@@ -24,6 +24,10 @@ config X86
	bool
	default y

config ZONE_DMA32
	bool
	default y

config LOCKDEP_SUPPORT
	bool
	default y
+1 −1
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ struct vm_area_struct;
/* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low three bits) */
#define __GFP_DMA	((__force gfp_t)0x01u)
#define __GFP_HIGHMEM	((__force gfp_t)0x02u)
#ifdef CONFIG_DMA_IS_DMA32
#ifndef CONFIG_ZONE_DMA32
#define __GFP_DMA32	((__force gfp_t)0x01)	/* ZONE_DMA is ZONE_DMA32 */
#elif BITS_PER_LONG < 64
#define __GFP_DMA32	((__force gfp_t)0x00)	/* ZONE_NORMAL is ZONE_DMA32 */
+13 −3
Original line number Diff line number Diff line
@@ -109,12 +109,14 @@ enum zone_type {
	 * 			<16M.
	 */
	ZONE_DMA,
#ifdef CONFIG_ZONE_DMA32
	/*
	 * x86_64 needs two ZONE_DMAs because it supports devices that are
	 * only able to do DMA to the lower 16M but also 32 bit devices that
	 * can only do DMA areas below 4G.
	 */
	ZONE_DMA32,
#endif
	/*
	 * Normal addressable memory is in ZONE_NORMAL. DMA operations can be
	 * performed on pages in ZONE_NORMAL if the DMA devices support
@@ -161,10 +163,14 @@ enum zone_type {
 *
 * NOTE! Make sure this matches the zones in <linux/gfp.h>
 */
#define GFP_ZONEMASK	0x07
/* #define GFP_ZONETYPES       (GFP_ZONEMASK + 1) */           /* Non-loner */
#define GFP_ZONETYPES		((GFP_ZONEMASK + 1) / 2 + 1)    /* Loner */

#ifdef CONFIG_ZONE_DMA32
#define GFP_ZONEMASK		0x07
#else
#define GFP_ZONEMASK		0x03
#endif

struct zone {
	/* Fields commonly accessed by the page allocator */
	unsigned long		free_pages;
@@ -429,7 +435,11 @@ static inline int is_normal(struct zone *zone)

static inline int is_dma32(struct zone *zone)
{
#ifdef CONFIG_ZONE_DMA32
	return zone == zone->zone_pgdat->node_zones + ZONE_DMA32;
#else
	return 0;
#endif
}

static inline int is_dma(struct zone *zone)
+1 −3
Original line number Diff line number Diff line
@@ -124,12 +124,10 @@ static inline unsigned long node_page_state(int node,
	struct zone *zones = NODE_DATA(node)->node_zones;

	return
#ifndef CONFIG_DMA_IS_NORMAL
#if !defined(CONFIG_DMA_IS_DMA32) && BITS_PER_LONG >= 64
#ifdef CONFIG_ZONE_DMA32
		zone_page_state(&zones[ZONE_DMA32], item) +
#endif
		zone_page_state(&zones[ZONE_NORMAL], item) +
#endif
#ifdef CONFIG_HIGHMEM
		zone_page_state(&zones[ZONE_HIGHMEM], item) +
#endif
Loading