* [PATCH 1/6] Deal with cases of ZONE_DMA meaning the first zone
2006-09-11 22:30 [PATCH 0/8] Optional ZONE_DMA V1 Christoph Lameter
@ 2006-09-11 22:30 ` Christoph Lameter
2006-09-11 22:30 ` [PATCH 2/6] Introduce CONFIG_ZONE_DMA Christoph Lameter
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Christoph Lameter @ 2006-09-11 22:30 UTC (permalink / raw)
To: linux-mm; +Cc: Christoph Lameter
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.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.18-rc6-mm1/include/linux/mm.h
===================================================================
--- linux-2.6.18-rc6-mm1.orig/include/linux/mm.h 2006-09-11 15:42:30.576324881 -0500
+++ linux-2.6.18-rc6-mm1/include/linux/mm.h 2006-09-11 15:57:17.451691199 -0500
@@ -476,7 +476,7 @@
#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
Index: linux-2.6.18-rc6-mm1/mm/mempolicy.c
===================================================================
--- linux-2.6.18-rc6-mm1.orig/mm/mempolicy.c 2006-09-11 15:42:30.591951213 -0500
+++ linux-2.6.18-rc6-mm1/mm/mempolicy.c 2006-09-11 15:57:17.466340884 -0500
@@ -105,7 +105,7 @@
/* 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-mm1/mm/page_alloc.c
===================================================================
--- linux-2.6.18-rc6-mm1.orig/mm/page_alloc.c 2006-09-11 15:42:30.000000000 -0500
+++ linux-2.6.18-rc6-mm1/mm/page_alloc.c 2006-09-11 16:44:51.877934885 -0500
@@ -2486,11 +2486,11 @@
" %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))
--
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] 7+ messages in thread* [PATCH 2/6] Introduce CONFIG_ZONE_DMA
2006-09-11 22:30 [PATCH 0/8] Optional ZONE_DMA V1 Christoph Lameter
2006-09-11 22:30 ` [PATCH 1/6] Deal with cases of ZONE_DMA meaning the first zone Christoph Lameter
@ 2006-09-11 22:30 ` Christoph Lameter
2006-09-11 22:30 ` [PATCH 3/6] Optional ZONE_DMA in the VM Christoph Lameter
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Christoph Lameter @ 2006-09-11 22:30 UTC (permalink / raw)
To: linux-mm; +Cc: Christoph Lameter
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-mm1/mm/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm1.orig/mm/Kconfig 2006-09-11 15:42:32.736665338 -0500
+++ linux-2.6.18-rc6-mm1/mm/Kconfig 2006-09-11 15:53:12.072397960 -0500
@@ -139,6 +139,10 @@
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-mm1/arch/ia64/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/ia64/Kconfig 2006-09-11 15:42:32.746431796 -0500
+++ linux-2.6.18-rc6-mm1/arch/ia64/Kconfig 2006-09-11 15:53:12.089977582 -0500
@@ -22,6 +22,10 @@
bool
default y
+config ZONE_DMA
+ bool
+ default y
+
config MMU
bool
default y
Index: linux-2.6.18-rc6-mm1/arch/cris/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/cris/Kconfig 2006-09-11 15:42:32.754244962 -0500
+++ linux-2.6.18-rc6-mm1/arch/cris/Kconfig 2006-09-11 15:53:12.101697331 -0500
@@ -9,6 +9,10 @@
bool
default y
+config ZONE_DMA
+ bool
+ default y
+
config RWSEM_GENERIC_SPINLOCK
bool
default y
Index: linux-2.6.18-rc6-mm1/arch/s390/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/s390/Kconfig 2006-09-11 15:42:32.764988066 -0500
+++ linux-2.6.18-rc6-mm1/arch/s390/Kconfig 2006-09-11 15:53:12.112440433 -0500
@@ -7,6 +7,10 @@
bool
default y
+config ZONE_DMA
+ bool
+ default y
+
config LOCKDEP_SUPPORT
bool
default y
Index: linux-2.6.18-rc6-mm1/arch/xtensa/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/xtensa/Kconfig 2006-09-11 15:42:32.773777878 -0500
+++ linux-2.6.18-rc6-mm1/arch/xtensa/Kconfig 2006-09-11 15:53:12.124160181 -0500
@@ -7,6 +7,10 @@
bool
default n
+config ZONE_DMA
+ bool
+ default y
+
config XTENSA
bool
default y
Index: linux-2.6.18-rc6-mm1/arch/h8300/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/h8300/Kconfig 2006-09-11 15:42:32.782567690 -0500
+++ linux-2.6.18-rc6-mm1/arch/h8300/Kconfig 2006-09-11 15:53:12.134903284 -0500
@@ -17,6 +17,10 @@
bool
default n
+config ZONE_DMA
+ bool
+ default y
+
config FPU
bool
default n
Index: linux-2.6.18-rc6-mm1/arch/v850/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/v850/Kconfig 2006-09-11 15:42:32.791357502 -0500
+++ linux-2.6.18-rc6-mm1/arch/v850/Kconfig 2006-09-11 15:53:12.145646386 -0500
@@ -10,6 +10,9 @@
config MMU
bool
default n
+config ZONE_DMA
+ bool
+ default y
config RWSEM_GENERIC_SPINLOCK
bool
default y
Index: linux-2.6.18-rc6-mm1/arch/sh/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/sh/Kconfig 2006-09-11 15:42:32.800147314 -0500
+++ linux-2.6.18-rc6-mm1/arch/sh/Kconfig 2006-09-11 15:53:12.158342780 -0500
@@ -14,6 +14,10 @@
gaming console. The SuperH port has a home page at
<http://www.linux-sh.org/>.
+config ZONE_DMA
+ bool
+ default y
+
config RWSEM_GENERIC_SPINLOCK
bool
default y
Index: linux-2.6.18-rc6-mm1/arch/frv/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/frv/Kconfig 2006-09-11 15:42:32.808937126 -0500
+++ linux-2.6.18-rc6-mm1/arch/frv/Kconfig 2006-09-11 15:53:12.171039174 -0500
@@ -6,6 +6,10 @@
bool
default y
+config ZONE_DMA
+ bool
+ default y
+
config RWSEM_GENERIC_SPINLOCK
bool
default y
Index: linux-2.6.18-rc6-mm1/arch/m68knommu/Kconfig
===================================================================
--- linux-2.6.18-rc6-mm1.orig/arch/m68knommu/Kconfig 2006-09-11 15:42:32.820656875 -0500
+++ linux-2.6.18-rc6-mm1/arch/m68knommu/Kconfig 2006-09-11 15:53:12.183735568 -0500
@@ -17,6 +17,10 @@
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] 7+ 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 ` [PATCH 1/6] Deal with cases of ZONE_DMA meaning the first zone Christoph Lameter
2006-09-11 22:30 ` [PATCH 2/6] Introduce CONFIG_ZONE_DMA Christoph Lameter
@ 2006-09-11 22:30 ` Christoph Lameter
2006-09-11 22:30 ` [PATCH 4/6] Optional ZONE_DMA for i386 Christoph Lameter
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ 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] 7+ messages in thread* [PATCH 4/6] Optional ZONE_DMA for i386
2006-09-11 22:30 [PATCH 0/8] Optional ZONE_DMA V1 Christoph Lameter
` (2 preceding siblings ...)
2006-09-11 22:30 ` [PATCH 3/6] Optional ZONE_DMA in the VM Christoph Lameter
@ 2006-09-11 22:30 ` Christoph Lameter
2006-09-11 22:30 ` [PATCH 5/6] Optional ZONE_DMA for x86_64 Christoph Lameter
2006-09-11 22:30 ` [PATCH 6/6] Optional ZONE_DMA for ia64 Christoph Lameter
5 siblings, 0 replies; 7+ messages in thread
From: Christoph Lameter @ 2006-09-11 22:30 UTC (permalink / raw)
To: linux-mm; +Cc: Christoph Lameter
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] 7+ messages in thread* [PATCH 5/6] Optional ZONE_DMA for x86_64
2006-09-11 22:30 [PATCH 0/8] Optional ZONE_DMA V1 Christoph Lameter
` (3 preceding siblings ...)
2006-09-11 22:30 ` [PATCH 4/6] Optional ZONE_DMA for i386 Christoph Lameter
@ 2006-09-11 22:30 ` Christoph Lameter
2006-09-11 22:30 ` [PATCH 6/6] Optional ZONE_DMA for ia64 Christoph Lameter
5 siblings, 0 replies; 7+ messages in thread
From: Christoph Lameter @ 2006-09-11 22:30 UTC (permalink / raw)
To: linux-mm; +Cc: Christoph Lameter
Allow the use to specify CONFIG_ZONE_DMA32 and CONFIG_ZONE_DMA (via
CONFIG_GENERIC_ISA_DMA).
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 (which is mostly the case since most
x86_64 motherboards only allow a max of 4GB of memory and advanced
systems have DMA subsystems that handle I/O properly).
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] 7+ messages in thread* [PATCH 6/6] Optional ZONE_DMA for ia64
2006-09-11 22:30 [PATCH 0/8] Optional ZONE_DMA V1 Christoph Lameter
` (4 preceding siblings ...)
2006-09-11 22:30 ` [PATCH 5/6] Optional ZONE_DMA for x86_64 Christoph Lameter
@ 2006-09-11 22:30 ` Christoph Lameter
5 siblings, 0 replies; 7+ messages in thread
From: Christoph Lameter @ 2006-09-11 22:30 UTC (permalink / raw)
To: linux-mm; +Cc: Christoph Lameter
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] 7+ messages in thread