mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
[PATCH] optional ZONE_DMA: optional ZONE_DMA in the VM
Make ZONE_DMA optional in core code. - ifdef all code for ZONE_DMA and related definitions following the example for ZONE_DMA32 and ZONE_HIGHMEM. - Without ZONE_DMA, ZONE_HIGHMEM and ZONE_DMA32 we get to a ZONES_SHIFT of 0. - Modify the VM statistics to work correctly without a DMA zone. - Modify slab to not create DMA slabs if there is no ZONE_DMA. [akpm@osdl.org: cleanup] [jdike@addtoit.com: build fix] [apw@shadowen.org: Simplify calculation of the number of bits we need for ZONES_SHIFT] Signed-off-by: Christoph Lameter <clameter@sgi.com> Cc: Andi Kleen <ak@suse.de> Cc: "Luck, Tony" <tony.luck@intel.com> Cc: Kyle McMartin <kyle@mcmartin.ca> Cc: Matthew Wilcox <willy@debian.org> Cc: James Bottomley <James.Bottomley@steeleye.com> Cc: Paul Mundt <lethal@linux-sh.org> Signed-off-by: Andy Whitcroft <apw@shadowen.org> Signed-off-by: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
66701b1499
commit
4b51d66989
8 changed files with 90 additions and 23 deletions
|
@ -96,6 +96,7 @@ struct per_cpu_pageset {
|
|||
#endif
|
||||
|
||||
enum zone_type {
|
||||
#ifdef CONFIG_ZONE_DMA
|
||||
/*
|
||||
* ZONE_DMA is used when there are devices that are not able
|
||||
* to do DMA to all of addressable memory (ZONE_NORMAL). Then we
|
||||
|
@ -116,6 +117,7 @@ enum zone_type {
|
|||
* <16M.
|
||||
*/
|
||||
ZONE_DMA,
|
||||
#endif
|
||||
#ifdef CONFIG_ZONE_DMA32
|
||||
/*
|
||||
* x86_64 needs two ZONE_DMAs because it supports devices that are
|
||||
|
@ -152,11 +154,27 @@ enum zone_type {
|
|||
* match the requested limits. See gfp_zone() in include/linux/gfp.h
|
||||
*/
|
||||
|
||||
#if !defined(CONFIG_ZONE_DMA32) && !defined(CONFIG_HIGHMEM)
|
||||
/*
|
||||
* Count the active zones. Note that the use of defined(X) outside
|
||||
* #if and family is not necessarily defined so ensure we cannot use
|
||||
* it later. Use __ZONE_COUNT to work out how many shift bits we need.
|
||||
*/
|
||||
#define __ZONE_COUNT ( \
|
||||
defined(CONFIG_ZONE_DMA) \
|
||||
+ defined(CONFIG_ZONE_DMA32) \
|
||||
+ 1 \
|
||||
+ defined(CONFIG_HIGHMEM) \
|
||||
)
|
||||
#if __ZONE_COUNT < 2
|
||||
#define ZONES_SHIFT 0
|
||||
#elif __ZONE_COUNT <= 2
|
||||
#define ZONES_SHIFT 1
|
||||
#else
|
||||
#elif __ZONE_COUNT <= 4
|
||||
#define ZONES_SHIFT 2
|
||||
#else
|
||||
#error ZONES_SHIFT -- too many zones configured adjust calculation
|
||||
#endif
|
||||
#undef __ZONE_COUNT
|
||||
|
||||
struct zone {
|
||||
/* Fields commonly accessed by the page allocator */
|
||||
|
@ -523,7 +541,11 @@ static inline int is_dma32(struct zone *zone)
|
|||
|
||||
static inline int is_dma(struct zone *zone)
|
||||
{
|
||||
#ifdef CONFIG_ZONE_DMA
|
||||
return zone == zone->zone_pgdat->node_zones + ZONE_DMA;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* These two functions are used to setup the per zone pages min values */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue