* [patch 1/4] x86: e820.h unification
2008-05-06 19:33 [patch 0/4] [PATCH] x86: Merge e820_32/64 V2 Christoph Lameter
@ 2008-05-06 19:33 ` Christoph Lameter
2008-05-06 19:33 ` [patch 2/4] x86: e820 unification: Extract shared comments Christoph Lameter
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Christoph Lameter @ 2008-05-06 19:33 UTC (permalink / raw)
To: Ingo Molnar; +Cc: travis, linux-kernel, Adrian Bunk
[-- Attachment #1: e820_unify --]
[-- Type: text/plain, Size: 8926 bytes --]
The first patch simply puts both 32 and 64 bit headers into one header file.
The #ifdef sequence at the top is shared.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
---
include/asm-x86/e820.h | 103 +++++++++++++++++++++++++++++++++++++++++++++-
include/asm-x86/e820_32.h | 50 ----------------------
include/asm-x86/e820_64.h | 56 -------------------------
3 files changed, 101 insertions(+), 108 deletions(-)
Index: linux-2.6/include/asm-x86/e820.h
===================================================================
--- linux-2.6.orig/include/asm-x86/e820.h 2008-05-06 11:44:15.000000000 -0700
+++ linux-2.6/include/asm-x86/e820.h 2008-05-06 11:46:45.000000000 -0700
@@ -30,9 +30,108 @@ struct e820map {
#ifdef __KERNEL__
#ifdef CONFIG_X86_32
-# include "e820_32.h"
+/*
+ * structures and definitions for the int 15, ax=e820 memory map
+ * scheme.
+ *
+ * In a nutshell, arch/i386/boot/setup.S populates a scratch table
+ * in the empty_zero_block that contains a list of usable address/size
+ * duples. In arch/i386/kernel/setup.c, this information is
+ * transferred into the e820map, and in arch/i386/mm/init.c, that
+ * new information is used to mark pages reserved or not.
+ *
+ */
+#include <linux/ioport.h>
+
+#define HIGH_MEMORY (1024*1024)
+
+#ifndef __ASSEMBLY__
+
+extern void setup_memory_map(void);
+extern void finish_e820_parsing(void);
+
+extern struct e820map e820;
+extern void update_e820(void);
+
+extern int e820_all_mapped(unsigned long start, unsigned long end,
+ unsigned type);
+extern int e820_any_mapped(u64 start, u64 end, unsigned type);
+extern void propagate_e820_map(void);
+extern void register_bootmem_low_pages(unsigned long max_low_pfn);
+extern void add_memory_region(unsigned long long start,
+ unsigned long long size, int type);
+extern u64 update_memory_range(u64 start, u64 size, unsigned old_type,
+ unsigned new_type);
+extern void e820_register_memory(void);
+extern void limit_regions(unsigned long long size);
+extern void print_memory_map(char *who);
+extern void init_iomem_resources(struct resource *code_resource,
+ struct resource *data_resource,
+ struct resource *bss_resource);
+
+#if defined(CONFIG_PM) && defined(CONFIG_HIBERNATION)
+extern void e820_mark_nosave_regions(void);
#else
-# include "e820_64.h"
+static inline void e820_mark_nosave_regions(void)
+{
+}
+#endif
+
+
+#endif/*!__ASSEMBLY__*/
+#else /* X86_32 */
+/*
+ * structures and definitions for the int 15, ax=e820 memory map
+ * scheme.
+ *
+ * In a nutshell, setup.S populates a scratch table in the
+ * empty_zero_block that contains a list of usable address/size
+ * duples. setup.c, this information is transferred into the e820map,
+ * and in init.c/numa.c, that new information is used to mark pages
+ * reserved or not.
+ */
+#include <linux/ioport.h>
+
+#ifndef __ASSEMBLY__
+extern unsigned long find_e820_area(unsigned long start, unsigned long end,
+ unsigned long size, unsigned long align);
+extern unsigned long find_e820_area_size(unsigned long start,
+ unsigned long *sizep,
+ unsigned long align);
+extern void add_memory_region(unsigned long start, unsigned long size,
+ int type);
+extern u64 update_memory_range(u64 start, u64 size, unsigned old_type,
+ unsigned new_type);
+extern void setup_memory_region(void);
+extern void contig_e820_setup(void);
+extern unsigned long e820_end_of_ram(void);
+extern void e820_reserve_resources(void);
+extern void e820_mark_nosave_regions(void);
+extern int e820_any_mapped(unsigned long start, unsigned long end,
+ unsigned type);
+extern int e820_all_mapped(unsigned long start, unsigned long end,
+ unsigned type);
+extern int e820_any_non_reserved(unsigned long start, unsigned long end);
+extern int is_memory_any_valid(unsigned long start, unsigned long end);
+extern int e820_all_non_reserved(unsigned long start, unsigned long end);
+extern int is_memory_all_valid(unsigned long start, unsigned long end);
+extern unsigned long e820_hole_size(unsigned long start, unsigned long end);
+
+extern void e820_setup_gap(void);
+extern void e820_register_active_regions(int nid, unsigned long start_pfn,
+ unsigned long end_pfn);
+
+extern void finish_e820_parsing(void);
+
+extern struct e820map e820;
+extern void update_e820(void);
+
+extern void reserve_early(unsigned long start, unsigned long end, char *name);
+extern void free_early(unsigned long start, unsigned long end);
+extern void early_res_to_bootmem(unsigned long start, unsigned long end);
+
+#endif/*!__ASSEMBLY__*/
+
#endif
#endif /* __KERNEL__ */
Index: linux-2.6/include/asm-x86/e820_32.h
===================================================================
--- linux-2.6.orig/include/asm-x86/e820_32.h 2008-05-06 11:44:15.000000000 -0700
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
@@ -1,50 +0,0 @@
-/*
- * structures and definitions for the int 15, ax=e820 memory map
- * scheme.
- *
- * In a nutshell, arch/i386/boot/setup.S populates a scratch table
- * in the empty_zero_block that contains a list of usable address/size
- * duples. In arch/i386/kernel/setup.c, this information is
- * transferred into the e820map, and in arch/i386/mm/init.c, that
- * new information is used to mark pages reserved or not.
- *
- */
-#ifndef __E820_HEADER
-#define __E820_HEADER
-
-#include <linux/ioport.h>
-
-#define HIGH_MEMORY (1024*1024)
-
-#ifndef __ASSEMBLY__
-
-extern struct e820map e820;
-extern void update_e820(void);
-
-extern int e820_all_mapped(unsigned long start, unsigned long end,
- unsigned type);
-extern int e820_any_mapped(u64 start, u64 end, unsigned type);
-extern void propagate_e820_map(void);
-extern void register_bootmem_low_pages(unsigned long max_low_pfn);
-extern void add_memory_region(unsigned long long start,
- unsigned long long size, int type);
-extern void update_memory_range(u64 start, u64 size, unsigned old_type,
- unsigned new_type);
-extern void e820_register_memory(void);
-extern void limit_regions(unsigned long long size);
-extern void print_memory_map(char *who);
-extern void init_iomem_resources(struct resource *code_resource,
- struct resource *data_resource,
- struct resource *bss_resource);
-
-#if defined(CONFIG_PM) && defined(CONFIG_HIBERNATION)
-extern void e820_mark_nosave_regions(void);
-#else
-static inline void e820_mark_nosave_regions(void)
-{
-}
-#endif
-
-
-#endif/*!__ASSEMBLY__*/
-#endif/*__E820_HEADER*/
Index: linux-2.6/include/asm-x86/e820_64.h
===================================================================
--- linux-2.6.orig/include/asm-x86/e820_64.h 2008-05-06 11:44:15.000000000 -0700
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
@@ -1,56 +0,0 @@
-/*
- * structures and definitions for the int 15, ax=e820 memory map
- * scheme.
- *
- * In a nutshell, setup.S populates a scratch table in the
- * empty_zero_block that contains a list of usable address/size
- * duples. setup.c, this information is transferred into the e820map,
- * and in init.c/numa.c, that new information is used to mark pages
- * reserved or not.
- */
-#ifndef __E820_HEADER
-#define __E820_HEADER
-
-#include <linux/ioport.h>
-
-#ifndef __ASSEMBLY__
-extern unsigned long find_e820_area(unsigned long start, unsigned long end,
- unsigned long size, unsigned long align);
-extern unsigned long find_e820_area_size(unsigned long start,
- unsigned long *sizep,
- unsigned long align);
-extern void add_memory_region(unsigned long start, unsigned long size,
- int type);
-extern void update_memory_range(u64 start, u64 size, unsigned old_type,
- unsigned new_type);
-extern void setup_memory_region(void);
-extern void contig_e820_setup(void);
-extern unsigned long e820_end_of_ram(void);
-extern void e820_reserve_resources(void);
-extern void e820_mark_nosave_regions(void);
-extern int e820_any_mapped(unsigned long start, unsigned long end,
- unsigned type);
-extern int e820_all_mapped(unsigned long start, unsigned long end,
- unsigned type);
-extern int e820_any_non_reserved(unsigned long start, unsigned long end);
-extern int is_memory_any_valid(unsigned long start, unsigned long end);
-extern int e820_all_non_reserved(unsigned long start, unsigned long end);
-extern int is_memory_all_valid(unsigned long start, unsigned long end);
-extern unsigned long e820_hole_size(unsigned long start, unsigned long end);
-
-extern void e820_setup_gap(void);
-extern void e820_register_active_regions(int nid, unsigned long start_pfn,
- unsigned long end_pfn);
-
-extern void finish_e820_parsing(void);
-
-extern struct e820map e820;
-extern void update_e820(void);
-
-extern void reserve_early(unsigned long start, unsigned long end, char *name);
-extern void free_early(unsigned long start, unsigned long end);
-extern void early_res_to_bootmem(unsigned long start, unsigned long end);
-
-#endif/*!__ASSEMBLY__*/
-
-#endif/*__E820_HEADER*/
--
^ permalink raw reply [flat|nested] 6+ messages in thread* [patch 2/4] x86: e820 unification: Extract shared comments
2008-05-06 19:33 [patch 0/4] [PATCH] x86: Merge e820_32/64 V2 Christoph Lameter
2008-05-06 19:33 ` [patch 1/4] x86: e820.h unification Christoph Lameter
@ 2008-05-06 19:33 ` Christoph Lameter
2008-05-06 19:33 ` [patch 3/4] x86: e820 unification: Common #ifdef __ASSEMBLY Christoph Lameter
2008-05-06 19:33 ` [patch 4/4] x86: e820 unification: Extract common functions Christoph Lameter
3 siblings, 0 replies; 6+ messages in thread
From: Christoph Lameter @ 2008-05-06 19:33 UTC (permalink / raw)
To: Ingo Molnar; +Cc: travis, linux-kernel, Adrian Bunk
[-- Attachment #1: e820_comments --]
[-- Type: text/plain, Size: 2111 bytes --]
The comments are basically the same. Take the 64 bit version as the common
comments.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
---
include/asm-x86/e820.h | 26 +++++++-------------------
1 file changed, 7 insertions(+), 19 deletions(-)
Index: linux-2.6/include/asm-x86/e820.h
===================================================================
--- linux-2.6.orig/include/asm-x86/e820.h 2008-05-06 11:46:45.000000000 -0700
+++ linux-2.6/include/asm-x86/e820.h 2008-05-06 11:48:09.000000000 -0700
@@ -29,20 +29,20 @@ struct e820map {
#define BIOS_END 0x00100000
#ifdef __KERNEL__
-#ifdef CONFIG_X86_32
+
/*
* structures and definitions for the int 15, ax=e820 memory map
* scheme.
*
- * In a nutshell, arch/i386/boot/setup.S populates a scratch table
- * in the empty_zero_block that contains a list of usable address/size
- * duples. In arch/i386/kernel/setup.c, this information is
- * transferred into the e820map, and in arch/i386/mm/init.c, that
- * new information is used to mark pages reserved or not.
- *
+ * In a nutshell, setup.S populates a scratch table in the
+ * empty_zero_block that contains a list of usable address/size
+ * duples. setup.c, this information is transferred into the e820map,
+ * and in init.c/numa.c, that new information is used to mark pages
+ * reserved or not.
*/
#include <linux/ioport.h>
+#ifdef CONFIG_X86_32
#define HIGH_MEMORY (1024*1024)
#ifndef __ASSEMBLY__
@@ -80,18 +80,6 @@ static inline void e820_mark_nosave_regi
#endif/*!__ASSEMBLY__*/
#else /* X86_32 */
-/*
- * structures and definitions for the int 15, ax=e820 memory map
- * scheme.
- *
- * In a nutshell, setup.S populates a scratch table in the
- * empty_zero_block that contains a list of usable address/size
- * duples. setup.c, this information is transferred into the e820map,
- * and in init.c/numa.c, that new information is used to mark pages
- * reserved or not.
- */
-#include <linux/ioport.h>
-
#ifndef __ASSEMBLY__
extern unsigned long find_e820_area(unsigned long start, unsigned long end,
unsigned long size, unsigned long align);
--
^ permalink raw reply [flat|nested] 6+ messages in thread* [patch 3/4] x86: e820 unification: Common #ifdef __ASSEMBLY
2008-05-06 19:33 [patch 0/4] [PATCH] x86: Merge e820_32/64 V2 Christoph Lameter
2008-05-06 19:33 ` [patch 1/4] x86: e820.h unification Christoph Lameter
2008-05-06 19:33 ` [patch 2/4] x86: e820 unification: Extract shared comments Christoph Lameter
@ 2008-05-06 19:33 ` Christoph Lameter
2008-05-06 19:33 ` [patch 4/4] x86: e820 unification: Extract common functions Christoph Lameter
3 siblings, 0 replies; 6+ messages in thread
From: Christoph Lameter @ 2008-05-06 19:33 UTC (permalink / raw)
To: Ingo Molnar; +Cc: travis, linux-kernel, Adrian Bunk
[-- Attachment #1: e820_1 --]
[-- Type: text/plain, Size: 1415 bytes --]
Both include files use #ifdef __ASSEMBLY__ which can be moved outside
of the #ifdef CONFIG_X86_32.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
---
include/asm-x86/e820.h | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
Index: linux-2.6/include/asm-x86/e820.h
===================================================================
--- linux-2.6.orig/include/asm-x86/e820.h 2008-05-06 11:48:09.000000000 -0700
+++ linux-2.6/include/asm-x86/e820.h 2008-05-06 11:50:53.000000000 -0700
@@ -42,11 +42,11 @@ struct e820map {
*/
#include <linux/ioport.h>
+#ifndef __ASSEMBLY__
+
#ifdef CONFIG_X86_32
#define HIGH_MEMORY (1024*1024)
-#ifndef __ASSEMBLY__
-
extern void setup_memory_map(void);
extern void finish_e820_parsing(void);
@@ -77,10 +77,7 @@ static inline void e820_mark_nosave_regi
}
#endif
-
-#endif/*!__ASSEMBLY__*/
#else /* X86_32 */
-#ifndef __ASSEMBLY__
extern unsigned long find_e820_area(unsigned long start, unsigned long end,
unsigned long size, unsigned long align);
extern unsigned long find_e820_area_size(unsigned long start,
@@ -118,9 +115,8 @@ extern void reserve_early(unsigned long
extern void free_early(unsigned long start, unsigned long end);
extern void early_res_to_bootmem(unsigned long start, unsigned long end);
+#endif /* X86_32 */
#endif/*!__ASSEMBLY__*/
-
-#endif
#endif /* __KERNEL__ */
#endif /* __ASM_E820_H */
--
^ permalink raw reply [flat|nested] 6+ messages in thread* [patch 4/4] x86: e820 unification: Extract common functions
2008-05-06 19:33 [patch 0/4] [PATCH] x86: Merge e820_32/64 V2 Christoph Lameter
` (2 preceding siblings ...)
2008-05-06 19:33 ` [patch 3/4] x86: e820 unification: Common #ifdef __ASSEMBLY Christoph Lameter
@ 2008-05-06 19:33 ` Christoph Lameter
3 siblings, 0 replies; 6+ messages in thread
From: Christoph Lameter @ 2008-05-06 19:33 UTC (permalink / raw)
To: Ingo Molnar; +Cc: travis, linux-kernel, Adrian Bunk
[-- Attachment #1: e820_2 --]
[-- Type: text/plain, Size: 5429 bytes --]
Extract the common functions to the common area.
The parameters of e820_any_mapped vary between 32 and 64 bit.
Convert them to u64 so that they match.
Same issue is there fore add_memory_region. 32 bit uses unsigned long long
there. Convert both platforms to use u64.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
---
arch/x86/kernel/e820_32.c | 3 --
arch/x86/kernel/e820_64.c | 4 +--
include/asm-x86/e820.h | 47 +++++++++++++++-------------------------------
3 files changed, 19 insertions(+), 35 deletions(-)
Index: linux-2.6/include/asm-x86/e820.h
===================================================================
--- linux-2.6.orig/include/asm-x86/e820.h 2008-05-06 12:29:06.000000000 -0700
+++ linux-2.6/include/asm-x86/e820.h 2008-05-06 12:29:06.000000000 -0700
@@ -44,30 +44,15 @@ struct e820map {
#ifndef __ASSEMBLY__
-#ifdef CONFIG_X86_32
-#define HIGH_MEMORY (1024*1024)
-
-extern void setup_memory_map(void);
extern void finish_e820_parsing(void);
-
extern struct e820map e820;
extern void update_e820(void);
-
extern int e820_all_mapped(unsigned long start, unsigned long end,
unsigned type);
extern int e820_any_mapped(u64 start, u64 end, unsigned type);
-extern void propagate_e820_map(void);
-extern void register_bootmem_low_pages(unsigned long max_low_pfn);
-extern void add_memory_region(unsigned long long start,
- unsigned long long size, int type);
-extern u64 update_memory_range(u64 start, u64 size, unsigned old_type,
+extern void add_memory_region(u64 start, u64 size, int type);
+extern void update_memory_range(u64 start, u64 size, unsigned old_type,
unsigned new_type);
-extern void e820_register_memory(void);
-extern void limit_regions(unsigned long long size);
-extern void print_memory_map(char *who);
-extern void init_iomem_resources(struct resource *code_resource,
- struct resource *data_resource,
- struct resource *bss_resource);
#if defined(CONFIG_PM) && defined(CONFIG_HIBERNATION)
extern void e820_mark_nosave_regions(void);
@@ -77,25 +62,30 @@ static inline void e820_mark_nosave_regi
}
#endif
+#ifdef CONFIG_X86_32
+#define HIGH_MEMORY (1024*1024)
+
+extern void setup_memory_map(void);
+
+extern void propagate_e820_map(void);
+extern void register_bootmem_low_pages(unsigned long max_low_pfn);
+extern void e820_register_memory(void);
+extern void limit_regions(unsigned long long size);
+extern void print_memory_map(char *who);
+extern void init_iomem_resources(struct resource *code_resource,
+ struct resource *data_resource,
+ struct resource *bss_resource);
+
#else /* X86_32 */
extern unsigned long find_e820_area(unsigned long start, unsigned long end,
unsigned long size, unsigned long align);
extern unsigned long find_e820_area_size(unsigned long start,
unsigned long *sizep,
unsigned long align);
-extern void add_memory_region(unsigned long start, unsigned long size,
- int type);
-extern u64 update_memory_range(u64 start, u64 size, unsigned old_type,
- unsigned new_type);
extern void setup_memory_region(void);
extern void contig_e820_setup(void);
extern unsigned long e820_end_of_ram(void);
extern void e820_reserve_resources(void);
-extern void e820_mark_nosave_regions(void);
-extern int e820_any_mapped(unsigned long start, unsigned long end,
- unsigned type);
-extern int e820_all_mapped(unsigned long start, unsigned long end,
- unsigned type);
extern int e820_any_non_reserved(unsigned long start, unsigned long end);
extern int is_memory_any_valid(unsigned long start, unsigned long end);
extern int e820_all_non_reserved(unsigned long start, unsigned long end);
@@ -106,11 +96,6 @@ extern void e820_setup_gap(void);
extern void e820_register_active_regions(int nid, unsigned long start_pfn,
unsigned long end_pfn);
-extern void finish_e820_parsing(void);
-
-extern struct e820map e820;
-extern void update_e820(void);
-
extern void reserve_early(unsigned long start, unsigned long end, char *name);
extern void free_early(unsigned long start, unsigned long end);
extern void early_res_to_bootmem(unsigned long start, unsigned long end);
Index: linux-2.6/arch/x86/kernel/e820_64.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/e820_64.c 2008-05-06 12:29:02.000000000 -0700
+++ linux-2.6/arch/x86/kernel/e820_64.c 2008-05-06 12:29:06.000000000 -0700
@@ -181,7 +181,7 @@ again:
* with type.
*/
int
-e820_any_mapped(unsigned long start, unsigned long end, unsigned type)
+e820_any_mapped(u64 start, u64 end, unsigned type)
{
int i;
@@ -437,7 +437,7 @@ e820_register_active_regions(int nid, un
/*
* Add a memory region to the kernel e820 map.
*/
-void __init add_memory_region(unsigned long start, unsigned long size, int type)
+void __init add_memory_region(u64 start, u64 size, int type)
{
int x = e820.nr_map;
Index: linux-2.6/arch/x86/kernel/e820_32.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/e820_32.c 2008-05-06 12:29:04.000000000 -0700
+++ linux-2.6/arch/x86/kernel/e820_32.c 2008-05-06 12:29:08.000000000 -0700
@@ -255,8 +255,7 @@ void __init e820_mark_nosave_regions(voi
}
#endif
-void __init add_memory_region(unsigned long long start,
- unsigned long long size, int type)
+void __init add_memory_region(u64 start, u64 size, int type)
{
int x;
--
^ permalink raw reply [flat|nested] 6+ messages in thread