* [PATCH 1/8] Deal with cases of ZONE_DMA meaning the first zone
2006-09-18 18:36 [PATCH 0/8] Optional ZONE_DMA V2 Christoph Lameter
@ 2006-09-18 18:36 ` Christoph Lameter
2006-09-18 18:36 ` [PATCH 2/8] Introduce CONFIG_ZONE_DMA Christoph Lameter
` (6 subsequent siblings)
7 siblings, 0 replies; 22+ messages in thread
From: Christoph Lameter @ 2006-09-18 18:36 UTC (permalink / raw)
To: linux-arch
Cc: Paul Mundt, Christoph Hellwig, James Bottomley, Arjan van de Ven,
linux-mm, Russell King, Christoph Lameter, Andi Kleen,
KAMEZAWA Hiroyuki
Optional DMA zone: Replace uses of ZONE_DMA as the first zone
In two places in the VM we use ZONE_DMA to refer to the first zone.
If ZONE_DMA is optional then other zones may be first. So simply
replace ZONE_DMA with zone 0.
This also fixes ZONETABLE_PGSHIFT. If we have only a single zone then
ZONES_PGSHIFT may become 0 because there is no need anymore to encode the
zone number related to a pgdat. However, we still need a zonetable to index
all the zones for each node if this is a NUMA system. Therefore define
ZONETABLE_SHIFT unconditionally as the offset of the ZONE field in page flags.
Acked-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.18-rc6-mm2/mm/mempolicy.c
===================================================================
--- linux-2.6.18-rc6-mm2.orig/mm/mempolicy.c 2006-09-18 13:07:53.318935179 -0500
+++ linux-2.6.18-rc6-mm2/mm/mempolicy.c 2006-09-18 13:16:18.929008279 -0500
@@ -105,7 +105,7 @@ static struct kmem_cache *sn_cache;
/* Highest zone. An specific allocation for a zone below that is not
policied. */
-enum zone_type policy_zone = ZONE_DMA;
+enum zone_type policy_zone = 0;
struct mempolicy default_policy = {
.refcnt = ATOMIC_INIT(1), /* never free it */
Index: linux-2.6.18-rc6-mm2/mm/page_alloc.c
===================================================================
--- linux-2.6.18-rc6-mm2.orig/mm/page_alloc.c 2006-09-18 13:16:14.463795639 -0500
+++ linux-2.6.18-rc6-mm2/mm/page_alloc.c 2006-09-18 13:27:53.271625765 -0500
@@ -2486,11 +2486,11 @@ static void __meminit free_area_init_cor
" %s zone: %lu pages exceeds realsize %lu\n",
zone_names[j], memmap_pages, realsize);
- /* Account for reserved DMA pages */
- if (j == ZONE_DMA && realsize > dma_reserve) {
+ /* Account for reserved pages */
+ if (j == 0 && realsize > dma_reserve) {
realsize -= dma_reserve;
- printk(KERN_DEBUG " DMA zone: %lu pages reserved\n",
- dma_reserve);
+ printk(KERN_DEBUG " %s zone: %lu pages reserved\n",
+ zone_names[0], dma_reserve);
}
if (!is_highmem_idx(j))
Index: linux-2.6.18-rc6-mm2/include/linux/mm.h
===================================================================
--- linux-2.6.18-rc6-mm2.orig/include/linux/mm.h 2006-09-18 13:16:14.000000000 -0500
+++ linux-2.6.18-rc6-mm2/include/linux/mm.h 2006-09-18 13:28:52.406396556 -0500
@@ -416,7 +416,7 @@ void split_page(struct page *page, unsig
#else
#define ZONETABLE_SHIFT (SECTIONS_SHIFT + ZONES_SHIFT)
#endif
-#define ZONETABLE_PGSHIFT ZONES_PGSHIFT
+#define ZONETABLE_PGSHIFT ZONES_PGOFF
#if SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > FLAGS_RESERVED
#error SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > FLAGS_RESERVED
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 22+ messages in thread* [PATCH 2/8] Introduce CONFIG_ZONE_DMA
2006-09-18 18:36 [PATCH 0/8] Optional ZONE_DMA V2 Christoph Lameter
2006-09-18 18:36 ` [PATCH 1/8] Deal with cases of ZONE_DMA meaning the first zone Christoph Lameter
@ 2006-09-18 18:36 ` Christoph Lameter
2006-09-18 18:36 ` [PATCH 3/8] Optional ZONE_DMA in the VM Christoph Lameter
` (5 subsequent siblings)
7 siblings, 0 replies; 22+ messages in thread
From: Christoph Lameter @ 2006-09-18 18:36 UTC (permalink / raw)
To: linux-arch
Cc: Paul Mundt, Christoph Hellwig, James Bottomley, Arjan van de Ven,
linux-mm, Russell King, Christoph Lameter, KAMEZAWA Hiroyuki,
Andi Kleen
Introduce CONFIG_ZONE_DMA
This patch simply defines CONFIG_ZONE_DMA for all arches. We later do
special things with CONFIG_ZONE_DMA after the VM and an arch are
prepared to work without ZONE_DMA.
CONFIG_ZONE_DMA can be defined in two ways depending on how
an architecture handles ISA DMA.
First if CONFIG_GENERIC_ISA_DMA is set by the arch then we know that
the arch needs ZONE_DMA because ISA DMA devices are supported. We
can catch this in mm/Kconfig and do not need to modify arch code.
Second, arches may use ZONE_DMA in an unknown way. We set CONFIG_ZONE_DMA
for all arches that do not set CONFIG_GENERIC_ISA_DMA in order to insure
backwards compatibility. The arches may later undefine ZONE_DMA
if their arch code has been verified to not depend on ZONE_DMA.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.18-rc6-mm2/mm/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm2.orig/mm/Kconfig 2006-09-15 12:17:39.778004366 -0500
+++ linux-2.6.18-rc6-mm2/mm/Kconfig 2006-09-18 12:27:12.303278031 -0500
@@ -139,6 +139,10 @@ config SPLIT_PTLOCK_CPUS
default "4096" if PARISC && !PA20
default "4"
+config ZONE_DMA
+ def_bool y
+ depends on GENERIC_ISA_DMA
+
#
# support for page migration
#
Index: linux-2.6.18-rc6-mm2/arch/ia64/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm2.orig/arch/ia64/Kconfig 2006-09-15 12:17:39.786794169 -0500
+++ linux-2.6.18-rc6-mm2/arch/ia64/Kconfig 2006-09-18 12:27:12.361876548 -0500
@@ -22,6 +22,10 @@ config 64BIT
bool
default y
+config ZONE_DMA
+ bool
+ default y
+
config MMU
bool
default y
Index: linux-2.6.18-rc6-mm2/arch/cris/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm2.orig/arch/cris/Kconfig 2006-09-15 12:17:39.795583972 -0500
+++ linux-2.6.18-rc6-mm2/arch/cris/Kconfig 2006-09-18 12:27:12.388245880 -0500
@@ -9,6 +9,10 @@ config MMU
bool
default y
+config ZONE_DMA
+ bool
+ default y
+
config RWSEM_GENERIC_SPINLOCK
bool
default y
Index: linux-2.6.18-rc6-mm2/arch/s390/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm2.orig/arch/s390/Kconfig 2006-09-15 12:17:39.804373775 -0500
+++ linux-2.6.18-rc6-mm2/arch/s390/Kconfig 2006-09-18 12:27:12.426334916 -0500
@@ -7,6 +7,10 @@ config MMU
bool
default y
+config ZONE_DMA
+ bool
+ default y
+
config LOCKDEP_SUPPORT
bool
default y
Index: linux-2.6.18-rc6-mm2/arch/xtensa/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm2.orig/arch/xtensa/Kconfig 2006-09-15 12:17:39.813163578 -0500
+++ linux-2.6.18-rc6-mm2/arch/xtensa/Kconfig 2006-09-18 12:27:12.459540742 -0500
@@ -7,6 +7,10 @@ config FRAME_POINTER
bool
default n
+config ZONE_DMA
+ bool
+ default y
+
config XTENSA
bool
default y
Index: linux-2.6.18-rc6-mm2/arch/h8300/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm2.orig/arch/h8300/Kconfig 2006-09-15 12:17:39.820976736 -0500
+++ linux-2.6.18-rc6-mm2/arch/h8300/Kconfig 2006-09-18 12:27:12.496653135 -0500
@@ -17,6 +17,10 @@ config SWAP
bool
default n
+config ZONE_DMA
+ bool
+ default y
+
config FPU
bool
default n
Index: linux-2.6.18-rc6-mm2/arch/v850/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm2.orig/arch/v850/Kconfig 2006-09-15 12:17:39.830743184 -0500
+++ linux-2.6.18-rc6-mm2/arch/v850/Kconfig 2006-09-18 12:27:12.524975752 -0500
@@ -10,6 +10,9 @@ mainmenu "uClinux/v850 (w/o MMU) Kernel
config MMU
bool
default n
+config ZONE_DMA
+ bool
+ default y
config RWSEM_GENERIC_SPINLOCK
bool
default y
Index: linux-2.6.18-rc6-mm2/arch/frv/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm2.orig/arch/frv/Kconfig 2006-09-15 12:17:39.847346146 -0500
+++ linux-2.6.18-rc6-mm2/arch/frv/Kconfig 2006-09-18 12:27:12.604083749 -0500
@@ -6,6 +6,10 @@ config FRV
bool
default y
+config ZONE_DMA
+ bool
+ default y
+
config RWSEM_GENERIC_SPINLOCK
bool
default y
Index: linux-2.6.18-rc6-mm2/arch/m68knommu/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm2.orig/arch/m68knommu/Kconfig 2006-09-15 12:17:39.860042528 -0500
+++ linux-2.6.18-rc6-mm2/arch/m68knommu/Kconfig 2006-09-18 12:27:12.630453081 -0500
@@ -17,6 +17,10 @@ config FPU
bool
default n
+config ZONE_DMA
+ bool
+ default y
+
config RWSEM_GENERIC_SPINLOCK
bool
default y
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 22+ messages in thread* [PATCH 3/8] Optional ZONE_DMA in the VM
2006-09-18 18:36 [PATCH 0/8] Optional ZONE_DMA V2 Christoph Lameter
2006-09-18 18:36 ` [PATCH 1/8] Deal with cases of ZONE_DMA meaning the first zone Christoph Lameter
2006-09-18 18:36 ` [PATCH 2/8] Introduce CONFIG_ZONE_DMA Christoph Lameter
@ 2006-09-18 18:36 ` Christoph Lameter
2006-09-18 18:36 ` [PATCH 4/8] Optional ZONE_DMA for i386 Christoph Lameter
` (4 subsequent siblings)
7 siblings, 0 replies; 22+ messages in thread
From: Christoph Lameter @ 2006-09-18 18:36 UTC (permalink / raw)
To: linux-arch
Cc: Paul Mundt, Christoph Hellwig, James Bottomley, Arjan van de Ven,
linux-mm, Russell King, Christoph Lameter, Andi Kleen,
KAMEZAWA Hiroyuki
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.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.18-rc6-mm2/include/linux/mmzone.h
===================================================================
--- linux-2.6.18-rc6-mm2.orig/include/linux/mmzone.h 2006-09-18 13:16:14.450122635 -0500
+++ linux-2.6.18-rc6-mm2/include/linux/mmzone.h 2006-09-18 13:16:29.139812806 -0500
@@ -91,6 +91,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
@@ -111,6 +112,7 @@ enum zone_type {
* <16M.
*/
ZONE_DMA,
+#endif
#ifdef CONFIG_ZONE_DMA32
/*
* x86_64 needs two ZONE_DMAs because it supports devices that are
@@ -148,7 +150,11 @@ enum zone_type {
*/
#if !defined(CONFIG_ZONE_DMA32) && !defined(CONFIG_HIGHMEM)
+#if !defined(CONFIG_ZONE_DMA)
+#define ZONES_SHIFT 0
+#else
#define ZONES_SHIFT 1
+#endif
#else
#define ZONES_SHIFT 2
#endif
@@ -453,7 +459,11 @@ static inline int is_dma32(struct 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 */
Index: linux-2.6.18-rc6-mm2/mm/page_alloc.c
===================================================================
--- linux-2.6.18-rc6-mm2.orig/mm/page_alloc.c 2006-09-18 13:16:18.945611213 -0500
+++ linux-2.6.18-rc6-mm2/mm/page_alloc.c 2006-09-18 13:16:29.159345669 -0500
@@ -71,7 +71,9 @@ static void __free_pages_ok(struct page
* don't need any ZONE_NORMAL reservation
*/
int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES-1] = {
+#ifdef CONFIG_ZONE_DMA
256,
+#endif
#ifdef CONFIG_ZONE_DMA32
256,
#endif
@@ -90,7 +92,9 @@ struct zone *zone_table[1 << ZONETABLE_S
EXPORT_SYMBOL(zone_table);
static char *zone_names[MAX_NR_ZONES] = {
+#ifdef CONFIG_ZONE_DMA
"DMA",
+#endif
#ifdef CONFIG_ZONE_DMA32
"DMA32",
#endif
Index: linux-2.6.18-rc6-mm2/include/linux/gfp.h
===================================================================
--- linux-2.6.18-rc6-mm2.orig/include/linux/gfp.h 2006-09-18 13:16:13.307450110 -0500
+++ linux-2.6.18-rc6-mm2/include/linux/gfp.h 2006-09-18 13:16:29.170088744 -0500
@@ -80,8 +80,10 @@ struct vm_area_struct;
static inline enum zone_type gfp_zone(gfp_t flags)
{
+#ifdef CONFIG_ZONE_DMA
if (flags & __GFP_DMA)
return ZONE_DMA;
+#endif
#ifdef CONFIG_ZONE_DMA32
if (flags & __GFP_DMA32)
return ZONE_DMA32;
Index: linux-2.6.18-rc6-mm2/mm/slab.c
===================================================================
--- linux-2.6.18-rc6-mm2.orig/mm/slab.c 2006-09-18 13:16:15.423835889 -0500
+++ linux-2.6.18-rc6-mm2/mm/slab.c 2006-09-18 13:16:29.187668322 -0500
@@ -1441,13 +1441,14 @@ void __init kmem_cache_init(void)
ARCH_KMALLOC_FLAGS|SLAB_PANIC,
NULL, NULL);
}
-
+#ifdef CONFIG_ZONE_DMA
sizes->cs_dmacachep = kmem_cache_create(names->name_dma,
sizes->cs_size,
ARCH_KMALLOC_MINALIGN,
ARCH_KMALLOC_FLAGS|SLAB_CACHE_DMA|
SLAB_PANIC,
NULL, NULL);
+#endif
sizes++;
names++;
}
@@ -2275,8 +2276,10 @@ kmem_cache_create (const char *name, siz
cachep->slab_size = slab_size;
cachep->flags = flags;
cachep->gfpflags = 0;
+#ifdef CONFIG_ZONE_DMA
if (flags & SLAB_CACHE_DMA)
cachep->gfpflags |= GFP_DMA;
+#endif
cachep->buffer_size = size;
if (flags & CFLGS_OFF_SLAB) {
Index: linux-2.6.18-rc6-mm2/include/linux/slab.h
===================================================================
--- linux-2.6.18-rc6-mm2.orig/include/linux/slab.h 2006-09-18 13:07:52.648958109 -0500
+++ linux-2.6.18-rc6-mm2/include/linux/slab.h 2006-09-18 13:16:29.199388040 -0500
@@ -72,7 +72,11 @@ extern const char *kmem_cache_name(kmem_
struct cache_sizes {
size_t cs_size;
kmem_cache_t *cs_cachep;
+#ifdef CONFIG_ZONE_DMA
kmem_cache_t *cs_dmacachep;
+#else
+#define cs_dmacachep cs_cachep
+#endif
};
extern struct cache_sizes malloc_sizes[];
Index: linux-2.6.18-rc6-mm2/mm/vmstat.c
===================================================================
--- linux-2.6.18-rc6-mm2.orig/mm/vmstat.c 2006-09-18 13:07:52.686070541 -0500
+++ linux-2.6.18-rc6-mm2/mm/vmstat.c 2006-09-18 13:16:29.207201186 -0500
@@ -437,6 +437,12 @@ struct seq_operations fragmentation_op =
.show = frag_show,
};
+#ifdef CONFIG_ZONE_DMA
+#define TEXT_FOR_DMA(xx) xx "_dma",
+#else
+#define TEXT_FOR_DMA(xx)
+#endif
+
#ifdef CONFIG_ZONE_DMA32
#define TEXT_FOR_DMA32(xx) xx "_dma32",
#else
@@ -449,7 +455,7 @@ struct seq_operations fragmentation_op =
#define TEXT_FOR_HIGHMEM(xx)
#endif
-#define TEXTS_FOR_ZONES(xx) xx "_dma", TEXT_FOR_DMA32(xx) xx "_normal", \
+#define TEXTS_FOR_ZONES(xx) TEXT_FOR_DMA(xx) TEXT_FOR_DMA32(xx) xx "_normal", \
TEXT_FOR_HIGHMEM(xx)
static char *vmstat_text[] = {
Index: linux-2.6.18-rc6-mm2/include/linux/vmstat.h
===================================================================
--- linux-2.6.18-rc6-mm2.orig/include/linux/vmstat.h 2006-09-18 13:07:52.660677824 -0500
+++ linux-2.6.18-rc6-mm2/include/linux/vmstat.h 2006-09-18 13:16:29.215990974 -0500
@@ -17,6 +17,12 @@
* generated will simply be the increment of a global address.
*/
+#ifdef CONFIG_ZONE_DMA
+#define DMA_ZONE(xx) xx##_DMA,
+#else
+#define DMA_ZONE(xx)
+#endif
+
#ifdef CONFIG_ZONE_DMA32
#define DMA32_ZONE(xx) xx##_DMA32,
#else
@@ -29,7 +35,7 @@
#define HIGHMEM_ZONE(xx)
#endif
-#define FOR_ALL_ZONES(xx) xx##_DMA, DMA32_ZONE(xx) xx##_NORMAL HIGHMEM_ZONE(xx)
+#define FOR_ALL_ZONES(xx) DMA_ZONE(xx) DMA32_ZONE(xx) xx##_NORMAL HIGHMEM_ZONE(xx)
enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
FOR_ALL_ZONES(PGALLOC),
@@ -88,7 +94,8 @@ extern void vm_events_fold_cpu(int cpu);
#endif /* CONFIG_VM_EVENT_COUNTERS */
#define __count_zone_vm_events(item, zone, delta) \
- __count_vm_events(item##_DMA + zone_idx(zone), delta)
+ __count_vm_events(item##_NORMAL - ZONE_NORMAL + \
+ zone_idx(zone), delta)
/*
* Zone based page accounting with per cpu differentials.
@@ -135,14 +142,16 @@ static inline unsigned long node_page_st
struct zone *zones = NODE_DATA(node)->node_zones;
return
+#ifdef CONFIG_ZONE_DMA
+ zone_page_state(&zones[ZONE_DMA], item) +
+#endif
#ifdef CONFIG_ZONE_DMA32
zone_page_state(&zones[ZONE_DMA32], item) +
#endif
- zone_page_state(&zones[ZONE_NORMAL], item) +
#ifdef CONFIG_HIGHMEM
zone_page_state(&zones[ZONE_HIGHMEM], item) +
#endif
- zone_page_state(&zones[ZONE_DMA], item);
+ zone_page_state(&zones[ZONE_NORMAL], item);
}
extern void zone_statistics(struct zonelist *, struct zone *);
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 22+ messages in thread* [PATCH 4/8] Optional ZONE_DMA for i386
2006-09-18 18:36 [PATCH 0/8] Optional ZONE_DMA V2 Christoph Lameter
` (2 preceding siblings ...)
2006-09-18 18:36 ` [PATCH 3/8] Optional ZONE_DMA in the VM Christoph Lameter
@ 2006-09-18 18:36 ` Christoph Lameter
2006-09-18 18:36 ` [PATCH 5/8] Optional ZONE_DMA for x86_64 Christoph Lameter
` (3 subsequent siblings)
7 siblings, 0 replies; 22+ messages in thread
From: Christoph Lameter @ 2006-09-18 18:36 UTC (permalink / raw)
To: linux-arch
Cc: Paul Mundt, Christoph Hellwig, James Bottomley, Arjan van de Ven,
linux-mm, Russell King, Christoph Lameter, KAMEZAWA Hiroyuki,
Andi Kleen
ZONE_DMA depends on GENERIC_ISA_DMA. We allow the user to configure
GENERIC_ISA_DMA. If it is switched off then ISA_DMA_API is also
switched off which will deselect all drivers that depend on ISA
functionality.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.18-rc6-mm1/arch/i386/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/i386/Kconfig 2006-09-08 06:42:11.697455315 -0500
+++ linux-2.6.18-rc6-mm1/arch/i386/Kconfig 2006-09-11 15:41:55.911259588 -0500
@@ -41,10 +41,6 @@
config SBUS
bool
-config GENERIC_ISA_DMA
- bool
- default y
-
config GENERIC_IOMAP
bool
default y
@@ -346,6 +342,15 @@
XFree86 to initialize some video cards via BIOS. Disabling this
option saves about 6k.
+config GENERIC_ISA_DMA
+ bool "ISA DMA zone (to support ISA legacy DMA)"
+ default y
+ help
+ If DMA for ISA boards needs to be supported then this option
+ needs to be enabled. An additional DMA zone for <16MB memory
+ will be created and memory below 16MB will be used for those
+ devices.
+
config TOSHIBA
tristate "Toshiba Laptop support"
---help---
@@ -1071,6 +1076,7 @@
config ISA_DMA_API
bool
+ depends on GENERIC_ISA_DMA
default y
config ISA
Index: linux-2.6.18-rc6-mm1/arch/i386/kernel/Makefile
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/i386/kernel/Makefile 2006-09-08 06:42:11.780470103 -0500
+++ linux-2.6.18-rc6-mm1/arch/i386/kernel/Makefile 2006-09-11 15:41:55.950325419 -0500
@@ -7,8 +7,9 @@
obj-y := process.o signal.o entry.o traps.o irq.o \
ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \
pci-dma.o i386_ksyms.o i387.o bootflag.o \
- quirks.o i8237.o topology.o alternative.o i8253.o tsc.o
+ quirks.o topology.o alternative.o i8253.o tsc.o
+obj-$(CONFIG_GENERIC_ISA_DMA) += i8237.o
obj-$(CONFIG_STACKTRACE) += stacktrace.o
obj-y += cpu/
obj-y += acpi/
Index: linux-2.6.18-rc6-mm1/arch/i386/kernel/setup.c
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/i386/kernel/setup.c 2006-09-08 06:42:12.269769024 -0500
+++ linux-2.6.18-rc6-mm1/arch/i386/kernel/setup.c 2006-09-11 15:41:55.982554730 -0500
@@ -1075,13 +1075,17 @@
{
#ifdef CONFIG_HIGHMEM
unsigned long max_zone_pfns[MAX_NR_ZONES] = {
+#ifdef CONFIG_ZONE_DMA
virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT,
+#endif
max_low_pfn,
highend_pfn};
add_active_range(0, 0, highend_pfn);
#else
unsigned long max_zone_pfns[MAX_NR_ZONES] = {
+#ifdef CONFIG_ZONE_DMA
virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT,
+#endif
max_low_pfn};
add_active_range(0, 0, max_low_pfn);
#endif
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 22+ messages in thread* [PATCH 5/8] Optional ZONE_DMA for x86_64
2006-09-18 18:36 [PATCH 0/8] Optional ZONE_DMA V2 Christoph Lameter
` (3 preceding siblings ...)
2006-09-18 18:36 ` [PATCH 4/8] Optional ZONE_DMA for i386 Christoph Lameter
@ 2006-09-18 18:36 ` Christoph Lameter
2006-09-18 18:36 ` [PATCH 6/8] Optional ZONE_DMA for ia64 Christoph Lameter
` (2 subsequent siblings)
7 siblings, 0 replies; 22+ messages in thread
From: Christoph Lameter @ 2006-09-18 18:36 UTC (permalink / raw)
To: linux-arch
Cc: Paul Mundt, Christoph Hellwig, James Bottomley, Arjan van de Ven,
linux-mm, Russell King, Christoph Lameter, Andi Kleen,
KAMEZAWA Hiroyuki
Allow the use to specify CONFIG_ZONE_DMA32 and CONFIG_ZONE_DMA (via
CONFIG_GENERIC_ISA_DMA). The default is on to be on the safe side.
If CONFIG_ZONE_DMA is off then devices requiring ISA DMA can no
longer be selected.
There are no drivers depending on CONFIG_ZONE_DMA32. If CONFIG_ZONE_DMA32
is not set then the system assumes that DMA devices are capable of
doing DMA to all of memory. This is frequently the case if
1. No memory exists over the 4GB boundary (careful, some motherboards
equipped with 4GB memory will have memory show up above the 4GB
boundary!). It is safe if one has 2GB or less memory in an
x86_64 system.
2. The system has an IOMMU.
3. All devices using DMA are supporting DMA to all memory.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.18-rc6-mm1/arch/x86_64/mm/init.c
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/x86_64/mm/init.c 2006-09-11 16:06:41.705747849 -0500
+++ linux-2.6.18-rc6-mm1/arch/x86_64/mm/init.c 2006-09-11 16:08:13.190088058 -0500
@@ -406,9 +406,15 @@
#ifndef CONFIG_NUMA
void __init paging_init(void)
{
- unsigned long max_zone_pfns[MAX_NR_ZONES] = {MAX_DMA_PFN,
- MAX_DMA32_PFN,
- end_pfn};
+ unsigned long max_zone_pfns[MAX_NR_ZONES] = {
+#ifdef CONFIG_ZONE_DMA
+ MAX_DMA_PFN,
+#endif
+#ifdef CONFIG_ZONE_DMA32
+ MAX_DMA32_PFN,
+#endif
+ end_pfn
+ };
memory_present(0, 0, end_pfn);
sparse_init();
free_area_init_nodes(max_zone_pfns);
Index: linux-2.6.18-rc6-mm1/arch/x86_64/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/x86_64/Kconfig 2006-09-11 16:06:41.713561013 -0500
+++ linux-2.6.18-rc6-mm1/arch/x86_64/Kconfig 2006-09-11 16:10:45.369039566 -0500
@@ -24,10 +24,6 @@
bool
default y
-config ZONE_DMA32
- bool
- default y
-
config LOCKDEP_SUPPORT
bool
default y
@@ -73,10 +69,6 @@
bool
default y
-config GENERIC_ISA_DMA
- bool
- default y
-
config GENERIC_IOMAP
bool
default y
@@ -251,6 +243,24 @@
See <file:Documentation/mtrr.txt> for more information.
+config ZONE_DMA32
+ bool "32 Bit DMA Zone (only needed if memory >4GB)"
+ default y
+ help
+ Some x64 configurations have 32 bit DMA controllers that cannot
+ write to all of memory. If you have one of these and you have RAM
+ beyond the 4GB boundary then enable this option.
+
+config GENERIC_ISA_DMA
+ bool "ISA DMA zone (to support ISA legacy DMA)"
+ default y
+ help
+ If DMA for ISA boards needs to be supported then this option
+ needs to be enabled. An additional DMA zone for <16MB memory
+ will be created and memory below 16MB will be used for those
+ devices. If this is deselected then devices that use ISA
+ DMA will not be selectable.
+
config SMP
bool "Symmetric multi-processing support"
---help---
@@ -611,6 +621,7 @@
# we have no ISA slots, but we do have ISA-style DMA.
config ISA_DMA_API
bool
+ depends on GENERIC_ISA_DMA
default y
config GENERIC_PENDING_IRQ
Index: linux-2.6.18-rc6-mm1/arch/x86_64/kernel/Makefile
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/x86_64/kernel/Makefile 2006-09-11 16:06:41.726257405 -0500
+++ linux-2.6.18-rc6-mm1/arch/x86_64/kernel/Makefile 2006-09-11 16:08:13.214504197 -0500
@@ -7,9 +7,10 @@
obj-y := process.o signal.o entry.o traps.o irq.o \
ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_x86_64.o \
x8664_ksyms.o i387.o syscall.o vsyscall.o \
- setup64.o bootflag.o e820.o reboot.o quirks.o i8237.o \
+ setup64.o bootflag.o e820.o reboot.o quirks.o \
pci-dma.o pci-nommu.o alternative.o early-quirks.o
+obj-$(CONFIG_GENERIC_ISA_DMA) += i8237.o
obj-$(CONFIG_STACKTRACE) += stacktrace.o
obj-$(CONFIG_X86_MCE) += mce.o
obj-$(CONFIG_X86_MCE_INTEL) += mce_intel.o
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 22+ messages in thread* [PATCH 6/8] Optional ZONE_DMA for ia64
2006-09-18 18:36 [PATCH 0/8] Optional ZONE_DMA V2 Christoph Lameter
` (4 preceding siblings ...)
2006-09-18 18:36 ` [PATCH 5/8] Optional ZONE_DMA for x86_64 Christoph Lameter
@ 2006-09-18 18:36 ` Christoph Lameter
2006-09-18 18:36 ` [PATCH 7/8] Remove ZONE_DMA remains from parisc Christoph Lameter
2006-09-18 18:36 ` [PATCH 8/8] Remove ZONE_DMA remains from sh/sh64 Christoph Lameter
7 siblings, 0 replies; 22+ messages in thread
From: Christoph Lameter @ 2006-09-18 18:36 UTC (permalink / raw)
To: linux-arch
Cc: Paul Mundt, Christoph Hellwig, James Bottomley, Arjan van de Ven,
linux-mm, Russell King, Christoph Lameter, KAMEZAWA Hiroyuki,
Andi Kleen
ZONE_DMA less operation for IA64 SGI platform
Disable ZONE_DMA for SGI SN2. All memory is addressable by all
devices and we do not need any special memory pool.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.18-rc6-mm1/arch/ia64/mm/discontig.c
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/ia64/mm/discontig.c 2006-09-11 16:42:07.206714114 -0500
+++ linux-2.6.18-rc6-mm1/arch/ia64/mm/discontig.c 2006-09-11 16:51:50.094129334 -0500
@@ -37,7 +37,9 @@
unsigned long pernode_size;
struct bootmem_data bootmem_data;
unsigned long num_physpages;
+#ifdef CONFIG_ZONE_DMA
unsigned long num_dma_physpages;
+#endif
unsigned long min_pfn;
unsigned long max_pfn;
};
@@ -656,9 +658,11 @@
add_active_range(node, start >> PAGE_SHIFT, end >> PAGE_SHIFT);
mem_data[node].num_physpages += len >> PAGE_SHIFT;
+#ifdef CONFIG_ZONE_DMA
if (start <= __pa(MAX_DMA_ADDRESS))
mem_data[node].num_dma_physpages +=
(min(end, __pa(MAX_DMA_ADDRESS)) - start) >>PAGE_SHIFT;
+#endif
start = GRANULEROUNDDOWN(start);
start = ORDERROUNDDOWN(start);
end = GRANULEROUNDUP(end);
@@ -709,7 +713,9 @@
max_pfn = mem_data[node].max_pfn;
}
+#ifdef CONFIG_ZONE_DMA
max_zone_pfns[ZONE_DMA] = max_dma;
+#endif
max_zone_pfns[ZONE_NORMAL] = max_pfn;
free_area_init_nodes(max_zone_pfns);
Index: linux-2.6.18-rc6-mm1/arch/ia64/mm/contig.c
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/ia64/mm/contig.c 2006-09-11 16:42:07.215503923 -0500
+++ linux-2.6.18-rc6-mm1/arch/ia64/mm/contig.c 2006-09-11 16:51:50.104872434 -0500
@@ -231,8 +231,10 @@
num_physpages = 0;
efi_memmap_walk(count_pages, &num_physpages);
+#ifdef CONFIG_ZONE_DMA
max_dma = virt_to_phys((void *) MAX_DMA_ADDRESS) >> PAGE_SHIFT;
max_zone_pfns[ZONE_DMA] = max_dma;
+#endif
max_zone_pfns[ZONE_NORMAL] = max_low_pfn;
#ifdef CONFIG_VIRTUAL_MEM_MAP
Index: linux-2.6.18-rc6-mm1/arch/ia64/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/ia64/Kconfig 2006-09-11 16:44:55.649739769 -0500
+++ linux-2.6.18-rc6-mm1/arch/ia64/Kconfig 2006-09-11 16:51:50.114638888 -0500
@@ -23,8 +23,8 @@
default y
config ZONE_DMA
- bool
- default y
+ def_bool y
+ depends on !IA64_SGI_SN2
config MMU
bool
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 22+ messages in thread* [PATCH 7/8] Remove ZONE_DMA remains from parisc
2006-09-18 18:36 [PATCH 0/8] Optional ZONE_DMA V2 Christoph Lameter
` (5 preceding siblings ...)
2006-09-18 18:36 ` [PATCH 6/8] Optional ZONE_DMA for ia64 Christoph Lameter
@ 2006-09-18 18:36 ` Christoph Lameter
2006-09-18 18:36 ` [PATCH 8/8] Remove ZONE_DMA remains from sh/sh64 Christoph Lameter
7 siblings, 0 replies; 22+ messages in thread
From: Christoph Lameter @ 2006-09-18 18:36 UTC (permalink / raw)
To: linux-arch
Cc: Paul Mundt, Christoph Hellwig, James Bottomley, Arjan van de Ven,
linux-mm, Russell King, Christoph Lameter, Andi Kleen,
KAMEZAWA Hiroyuki
Remove ZONE_DMA remains from parisc so that kernels are build without
ZONE_DMA.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.18-rc6-mm2/arch/parisc/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm2.orig/arch/parisc/Kconfig 2006-09-18 12:52:05.203892680 -0500
+++ linux-2.6.18-rc6-mm2/arch/parisc/Kconfig 2006-09-18 12:55:43.140754129 -0500
@@ -42,9 +42,6 @@ config TIME_LOW_RES
depends on SMP
default y
-config GENERIC_ISA_DMA
- bool
-
config GENERIC_HARDIRQS
def_bool y
Index: linux-2.6.18-rc6-mm2/arch/parisc/mm/init.c
===================================================================
--- linux-2.6.18-rc6-mm2.orig/arch/parisc/mm/init.c 2006-09-18 12:52:05.217565682 -0500
+++ linux-2.6.18-rc6-mm2/arch/parisc/mm/init.c 2006-09-18 12:55:43.153450483 -0500
@@ -808,9 +808,7 @@ void __init paging_init(void)
for (i = 0; i < npmem_ranges; i++) {
unsigned long zones_size[MAX_NR_ZONES] = { 0, };
- /* We have an IOMMU, so all memory can go into a single
- ZONE_DMA zone. */
- zones_size[ZONE_DMA] = pmem_ranges[i].pages;
+ zones_size[ZONE_NORMAL] = pmem_ranges[i].pages;
#ifdef CONFIG_DISCONTIGMEM
/* Need to initialize the pfnnid_map before we can initialize
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 22+ messages in thread* [PATCH 8/8] Remove ZONE_DMA remains from sh/sh64
2006-09-18 18:36 [PATCH 0/8] Optional ZONE_DMA V2 Christoph Lameter
` (6 preceding siblings ...)
2006-09-18 18:36 ` [PATCH 7/8] Remove ZONE_DMA remains from parisc Christoph Lameter
@ 2006-09-18 18:36 ` Christoph Lameter
[not found] ` <20060911222729.4849.69497.sendpatchset@schroedinger.engr.sgi.com>
7 siblings, 1 reply; 22+ messages in thread
From: Christoph Lameter @ 2006-09-18 18:36 UTC (permalink / raw)
To: linux-arch
Cc: Paul Mundt, Christoph Hellwig, James Bottomley, Arjan van de Ven,
linux-mm, Russell King, Christoph Lameter, KAMEZAWA Hiroyuki,
Andi Kleen
sh / sh64: Remove ZONE_DMA remains.
Both arches do not need ZONE_DMA
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.18-rc6-mm2/arch/sh/mm/init.c
===================================================================
--- linux-2.6.18-rc6-mm2.orig/arch/sh/mm/init.c 2006-09-18 12:54:04.733274009 -0500
+++ linux-2.6.18-rc6-mm2/arch/sh/mm/init.c 2006-09-18 12:58:58.563038661 -0500
@@ -156,7 +156,6 @@ void __init paging_init(void)
* Setup some defaults for the zone sizes.. these should be safe
* regardless of distcontiguous memory or MMU settings.
*/
- zones_size[ZONE_DMA] = 0 >> PAGE_SHIFT;
zones_size[ZONE_NORMAL] = __MEMORY_SIZE >> PAGE_SHIFT;
#ifdef CONFIG_HIGHMEM
zones_size[ZONE_HIGHMEM] = 0 >> PAGE_SHIFT;
Index: linux-2.6.18-rc6-mm2/arch/sh64/mm/init.c
===================================================================
--- linux-2.6.18-rc6-mm2.orig/arch/sh64/mm/init.c 2006-09-18 12:54:04.745970361 -0500
+++ linux-2.6.18-rc6-mm2/arch/sh64/mm/init.c 2006-09-18 12:58:58.577688302 -0500
@@ -118,10 +118,7 @@ void __init paging_init(void)
mmu_context_cache = MMU_CONTEXT_FIRST_VERSION;
- /*
- * All memory is good as ZONE_NORMAL (fall-through) and ZONE_DMA.
- */
- zones_size[ZONE_DMA] = MAX_LOW_PFN - START_PFN;
+ zones_size[ZONE_NORMAL] = MAX_LOW_PFN - START_PFN;
NODE_DATA(0)->node_mem_map = NULL;
free_area_init_node(0, NODE_DATA(0), zones_size, __MEMORY_START >> PAGE_SHIFT, 0);
}
Index: linux-2.6.18-rc6-mm2/arch/sh64/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm2.orig/arch/sh64/Kconfig 2006-09-18 12:33:04.000000000 -0500
+++ linux-2.6.18-rc6-mm2/arch/sh64/Kconfig 2006-09-18 13:01:07.919367272 -0500
@@ -36,9 +36,6 @@ config GENERIC_CALIBRATE_DELAY
config RWSEM_XCHGADD_ALGORITHM
bool
-config GENERIC_ISA_DMA
- bool
-
source init/Kconfig
menu "System type"
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 3/6] Optional ZONE_DMA in the VM
2006-09-11 22:30 [PATCH 0/8] Optional ZONE_DMA V1 Christoph Lameter
@ 2006-09-11 22:30 ` Christoph Lameter
0 siblings, 0 replies; 22+ messages in thread
From: Christoph Lameter @ 2006-09-11 22:30 UTC (permalink / raw)
To: linux-mm; +Cc: Christoph Lameter
Make ZONE_DMA optional in core code.
- ifdef definitions for ZONE_DMA and related code 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.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.18-rc6-mm1/include/linux/mmzone.h
===================================================================
--- linux-2.6.18-rc6-mm1.orig/include/linux/mmzone.h 2006-09-11 16:44:16.000000000 -0500
+++ linux-2.6.18-rc6-mm1/include/linux/mmzone.h 2006-09-11 16:45:01.863158377 -0500
@@ -90,6 +90,7 @@
#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
@@ -110,6 +111,7 @@
* <16M.
*/
ZONE_DMA,
+#endif
#ifdef CONFIG_ZONE_DMA32
/*
* x86_64 needs two ZONE_DMAs because it supports devices that are
@@ -147,7 +149,11 @@
*/
#if !defined(CONFIG_ZONE_DMA32) && !defined(CONFIG_HIGHMEM)
+#if !defined(CONFIG_ZONE_DMA)
+#define ZONES_SHIFT 0
+#else
#define ZONES_SHIFT 1
+#endif
#else
#define ZONES_SHIFT 2
#endif
@@ -447,7 +453,11 @@
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 */
Index: linux-2.6.18-rc6-mm1/mm/page_alloc.c
===================================================================
--- linux-2.6.18-rc6-mm1.orig/mm/page_alloc.c 2006-09-11 16:44:51.000000000 -0500
+++ linux-2.6.18-rc6-mm1/mm/page_alloc.c 2006-09-11 16:45:01.883667932 -0500
@@ -71,7 +71,9 @@
* don't need any ZONE_NORMAL reservation
*/
int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES-1] = {
+#ifdef CONFIG_ZONE_DMA
256,
+#endif
#ifdef CONFIG_ZONE_DMA32
256,
#endif
@@ -90,7 +92,9 @@
EXPORT_SYMBOL(zone_table);
static char *zone_names[MAX_NR_ZONES] = {
+#ifdef CONFIG_ZONE_DMA
"DMA",
+#endif
#ifdef CONFIG_ZONE_DMA32
"DMA32",
#endif
Index: linux-2.6.18-rc6-mm1/include/linux/gfp.h
===================================================================
--- linux-2.6.18-rc6-mm1.orig/include/linux/gfp.h 2006-09-11 16:44:16.000000000 -0500
+++ linux-2.6.18-rc6-mm1/include/linux/gfp.h 2006-09-11 16:45:01.902224197 -0500
@@ -80,8 +80,10 @@
static inline enum zone_type gfp_zone(gfp_t flags)
{
+#ifdef CONFIG_ZONE_DMA
if (flags & __GFP_DMA)
return ZONE_DMA;
+#endif
#ifdef CONFIG_ZONE_DMA32
if (flags & __GFP_DMA32)
return ZONE_DMA32;
Index: linux-2.6.18-rc6-mm1/mm/slab.c
===================================================================
--- linux-2.6.18-rc6-mm1.orig/mm/slab.c 2006-09-11 16:44:16.000000000 -0500
+++ linux-2.6.18-rc6-mm1/mm/slab.c 2006-09-11 16:45:01.919803815 -0500
@@ -1441,13 +1443,14 @@
ARCH_KMALLOC_FLAGS|SLAB_PANIC,
NULL, NULL);
}
-
+#ifdef CONFIG_ZONE_DMA
sizes->cs_dmacachep = kmem_cache_create(names->name_dma,
sizes->cs_size,
ARCH_KMALLOC_MINALIGN,
ARCH_KMALLOC_FLAGS|SLAB_CACHE_DMA|
SLAB_PANIC,
NULL, NULL);
+#endif
sizes++;
names++;
}
@@ -2275,8 +2278,10 @@
cachep->slab_size = slab_size;
cachep->flags = flags;
cachep->gfpflags = 0;
+#ifdef CONFIG_ZONE_DMA
if (flags & SLAB_CACHE_DMA)
cachep->gfpflags |= GFP_DMA;
+#endif
cachep->buffer_size = size;
if (flags & CFLGS_OFF_SLAB) {
Index: linux-2.6.18-rc6-mm1/include/linux/slab.h
===================================================================
--- linux-2.6.18-rc6-mm1.orig/include/linux/slab.h 2006-09-11 16:44:16.000000000 -0500
+++ linux-2.6.18-rc6-mm1/include/linux/slab.h 2006-09-11 16:45:01.931523561 -0500
@@ -72,7 +72,11 @@
struct cache_sizes {
size_t cs_size;
kmem_cache_t *cs_cachep;
+#ifdef CONFIG_ZONE_DMA
kmem_cache_t *cs_dmacachep;
+#else
+#define cs_dmacachep cs_cachep
+#endif
};
extern struct cache_sizes malloc_sizes[];
Index: linux-2.6.18-rc6-mm1/mm/vmstat.c
===================================================================
--- linux-2.6.18-rc6-mm1.orig/mm/vmstat.c 2006-09-11 16:44:16.000000000 -0500
+++ linux-2.6.18-rc6-mm1/mm/vmstat.c 2006-09-11 16:45:01.940313371 -0500
@@ -437,6 +437,12 @@
.show = frag_show,
};
+#ifdef CONFIG_ZONE_DMA
+#define TEXT_FOR_DMA(xx) xx "_dma",
+#else
+#define TEXT_FOR_DMA(xx)
+#endif
+
#ifdef CONFIG_ZONE_DMA32
#define TEXT_FOR_DMA32(xx) xx "_dma32",
#else
@@ -449,7 +455,7 @@
#define TEXT_FOR_HIGHMEM(xx)
#endif
-#define TEXTS_FOR_ZONES(xx) xx "_dma", TEXT_FOR_DMA32(xx) xx "_normal", \
+#define TEXTS_FOR_ZONES(xx) TEXT_FOR_DMA(xx) TEXT_FOR_DMA32(xx) xx "_normal", \
TEXT_FOR_HIGHMEM(xx)
static char *vmstat_text[] = {
Index: linux-2.6.18-rc6-mm1/include/linux/vmstat.h
===================================================================
--- linux-2.6.18-rc6-mm1.orig/include/linux/vmstat.h 2006-09-11 16:44:16.000000000 -0500
+++ linux-2.6.18-rc6-mm1/include/linux/vmstat.h 2006-09-11 16:45:01.949103180 -0500
@@ -17,6 +17,12 @@
* generated will simply be the increment of a global address.
*/
+#ifdef CONFIG_ZONE_DMA
+#define DMA_ZONE(xx) xx##_DMA,
+#else
+#define DMA_ZONE(xx)
+#endif
+
#ifdef CONFIG_ZONE_DMA32
#define DMA32_ZONE(xx) xx##_DMA32,
#else
@@ -29,7 +35,7 @@
#define HIGHMEM_ZONE(xx)
#endif
-#define FOR_ALL_ZONES(xx) xx##_DMA, DMA32_ZONE(xx) xx##_NORMAL HIGHMEM_ZONE(xx)
+#define FOR_ALL_ZONES(xx) DMA_ZONE(xx) DMA32_ZONE(xx) xx##_NORMAL HIGHMEM_ZONE(xx)
enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
FOR_ALL_ZONES(PGALLOC),
@@ -88,7 +94,8 @@
#endif /* CONFIG_VM_EVENT_COUNTERS */
#define __count_zone_vm_events(item, zone, delta) \
- __count_vm_events(item##_DMA + zone_idx(zone), delta)
+ __count_vm_events(item##_NORMAL - ZONE_NORMAL + \
+ zone_idx(zone), delta)
/*
* Zone based page accounting with per cpu differentials.
@@ -135,14 +142,16 @@
struct zone *zones = NODE_DATA(node)->node_zones;
return
+#ifdef CONFIG_ZONE_DMA
+ zone_page_state(&zones[ZONE_DMA], item) +
+#endif
#ifdef CONFIG_ZONE_DMA32
zone_page_state(&zones[ZONE_DMA32], item) +
#endif
- zone_page_state(&zones[ZONE_NORMAL], item) +
#ifdef CONFIG_HIGHMEM
zone_page_state(&zones[ZONE_HIGHMEM], item) +
#endif
- zone_page_state(&zones[ZONE_DMA], item);
+ zone_page_state(&zones[ZONE_NORMAL], item);
}
extern void zone_statistics(struct zonelist *, struct zone *);
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 22+ messages in thread