All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2/7] x86/range: check range in update range
       [not found] <4B22D4DA.2000104@kernel.org>
@ 2009-12-11 23:35 ` Yinghai Lu
  2009-12-11 23:35 ` [PATCH 3/7] x86/pci: use resource_size_t in update_res Yinghai Lu
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 21+ messages in thread
From: Yinghai Lu @ 2009-12-11 23:35 UTC (permalink / raw)
  To: Ingo Molnar, Jesse Barnes, Thomas Gleixner, H. Peter Anvin,
	Andrew Morton
  Cc: linux-kernel, linux-pci


fend off wrong range

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 kernel/range.c |    9 +++++++++
 1 file changed, 9 insertions(+)

Index: linux-2.6/kernel/range.c
===================================================================
--- linux-2.6.orig/kernel/range.c
+++ linux-2.6/kernel/range.c
@@ -13,6 +13,9 @@
 
 int add_range(struct range *range, int az, int nr_range, u64 start, u64 end)
 {
+	if (start > end)
+		return nr_range;
+
 	/* Out of slots: */
 	if (nr_range >= az)
 		return nr_range;
@@ -30,6 +33,9 @@ int add_range_with_merge(struct range *r
 {
 	int i;
 
+	if (start > end)
+		return nr_range;
+
 	/* Try to merge it with old one: */
 	for (i = 0; i < nr_range; i++) {
 		u64 final_start, final_end;
@@ -59,6 +65,9 @@ void subtract_range(struct range *range,
 {
 	int i, j;
 
+	if (start > end)
+		return;
+
 	for (j = 0; j < az; j++) {
 		if (!range[j].end)
 			continue;


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 3/7] x86/pci: use resource_size_t in update_res
       [not found] <4B22D4DA.2000104@kernel.org>
  2009-12-11 23:35 ` [PATCH 2/7] x86/range: check range in update range Yinghai Lu
@ 2009-12-11 23:35 ` Yinghai Lu
  2009-12-11 23:35 ` [PATCH 4/7] x86/pci: amd one chain system to use pci read out res Yinghai Lu
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 21+ messages in thread
From: Yinghai Lu @ 2009-12-11 23:35 UTC (permalink / raw)
  To: Ingo Molnar, Jesse Barnes, Thomas Gleixner, H. Peter Anvin,
	Andrew Morton
  Cc: linux-kernel, linux-pci



prepare to enable 32bit intel and amd bus

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/pci/bus_numa.c |   16 ++++++++--------
 arch/x86/pci/bus_numa.h |    4 ++--
 2 files changed, 10 insertions(+), 10 deletions(-)

Index: linux-2.6/arch/x86/pci/bus_numa.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/bus_numa.c
+++ linux-2.6/arch/x86/pci/bus_numa.c
@@ -51,8 +51,8 @@ void x86_pci_root_bus_res_quirks(struct
 	}
 }
 
-void __init update_res(struct pci_root_info *info, size_t start,
-			      size_t end, unsigned long flags, int merge)
+void __init update_res(struct pci_root_info *info, resource_size_t start,
+		       resource_size_t end, unsigned long flags, int merge)
 {
 	int i;
 	struct resource *res;
@@ -65,20 +65,20 @@ void __init update_res(struct pci_root_i
 
 	/* try to merge it with old one */
 	for (i = 0; i < info->res_num; i++) {
-		size_t final_start, final_end;
-		size_t common_start, common_end;
+		resource_size_t final_start, final_end;
+		resource_size_t common_start, common_end;
 
 		res = &info->res[i];
 		if (res->flags != flags)
 			continue;
 
-		common_start = max((size_t)res->start, start);
-		common_end = min((size_t)res->end, end);
+		common_start = max(res->start, start);
+		common_end = min(res->end, end);
 		if (common_start > common_end + 1)
 			continue;
 
-		final_start = min((size_t)res->start, start);
-		final_end = max((size_t)res->end, end);
+		final_start = min(res->start, start);
+		final_end = max(res->end, end);
 
 		res->start = final_start;
 		res->end = final_end;
Index: linux-2.6/arch/x86/pci/bus_numa.h
===================================================================
--- linux-2.6.orig/arch/x86/pci/bus_numa.h
+++ linux-2.6/arch/x86/pci/bus_numa.h
@@ -22,6 +22,6 @@ extern int pci_root_num;
 extern struct pci_root_info pci_root_info[PCI_ROOT_NR];
 extern int found_all_numa_early;
 
-extern void update_res(struct pci_root_info *info, size_t start,
-			      size_t end, unsigned long flags, int merge);
+extern void update_res(struct pci_root_info *info, resource_size_t start,
+		      resource_size_t end, unsigned long flags, int merge);
 #endif


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 4/7] x86/pci: amd one chain system to use pci read out res
       [not found] <4B22D4DA.2000104@kernel.org>
  2009-12-11 23:35 ` [PATCH 2/7] x86/range: check range in update range Yinghai Lu
  2009-12-11 23:35 ` [PATCH 3/7] x86/pci: use resource_size_t in update_res Yinghai Lu
@ 2009-12-11 23:35 ` Yinghai Lu
  2009-12-11 23:35 ` [PATCH 5/7] x86/pci: use u64 instead of size_t in amd_bus.c Yinghai Lu
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 21+ messages in thread
From: Yinghai Lu @ 2009-12-11 23:35 UTC (permalink / raw)
  To: Ingo Molnar, Jesse Barnes, Thomas Gleixner, H. Peter Anvin,
	Andrew Morton
  Cc: linux-kernel, linux-pci, Gertjan van Wingerde


found MSI amd k8 based laptops is hiding [0x70000000, 0x80000000) RAM from
e820.

enable amd one chain even for all.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/pci/amd_bus.c  |    7 ++++---
 arch/x86/pci/bus_numa.c |    5 -----
 arch/x86/pci/bus_numa.h |    1 -
 3 files changed, 4 insertions(+), 9 deletions(-)

Index: linux-2.6/arch/x86/pci/amd_bus.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/amd_bus.c
+++ linux-2.6/arch/x86/pci/amd_bus.c
@@ -87,11 +87,12 @@ static int __init early_fill_mp_bus_info
 	struct range range[RANGE_NUM];
 	u64 val;
 	u32 address;
+	int found;
 
 	if (!early_pci_allowed())
 		return -1;
 
-	found_all_numa_early = 0;
+	found = 0;
 	for (i = 0; i < ARRAY_SIZE(pci_probes); i++) {
 		u32 id;
 		u16 device;
@@ -105,12 +106,12 @@ static int __init early_fill_mp_bus_info
 		device = (id>>16) & 0xffff;
 		if (pci_probes[i].vendor == vendor &&
 		    pci_probes[i].device == device) {
-			found_all_numa_early = 1;
+			found = 1;
 			break;
 		}
 	}
 
-	if (!found_all_numa_early)
+	if (!found)
 		return 0;
 
 	pci_root_num = 0;
Index: linux-2.6/arch/x86/pci/bus_numa.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/bus_numa.c
+++ linux-2.6/arch/x86/pci/bus_numa.c
@@ -5,7 +5,6 @@
 
 int pci_root_num;
 struct pci_root_info pci_root_info[PCI_ROOT_NR];
-int found_all_numa_early;
 
 void x86_pci_root_bus_res_quirks(struct pci_bus *b)
 {
@@ -21,10 +20,6 @@ void x86_pci_root_bus_res_quirks(struct
 	if (!pci_root_num)
 		return;
 
-	/* for amd, if only one root bus, don't need to do anything */
-	if (pci_root_num < 2 && found_all_numa_early)
-		return;
-
 	for (i = 0; i < pci_root_num; i++) {
 		if (pci_root_info[i].bus_min == b->number)
 			break;
Index: linux-2.6/arch/x86/pci/bus_numa.h
===================================================================
--- linux-2.6.orig/arch/x86/pci/bus_numa.h
+++ linux-2.6/arch/x86/pci/bus_numa.h
@@ -20,7 +20,6 @@ struct pci_root_info {
 #define PCI_ROOT_NR 4
 extern int pci_root_num;
 extern struct pci_root_info pci_root_info[PCI_ROOT_NR];
-extern int found_all_numa_early;
 
 extern void update_res(struct pci_root_info *info, resource_size_t start,
 		      resource_size_t end, unsigned long flags, int merge);


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 5/7] x86/pci: use u64 instead of size_t in amd_bus.c
       [not found] <4B22D4DA.2000104@kernel.org>
                   ` (2 preceding siblings ...)
  2009-12-11 23:35 ` [PATCH 4/7] x86/pci: amd one chain system to use pci read out res Yinghai Lu
@ 2009-12-11 23:35 ` Yinghai Lu
  2009-12-11 23:55   ` H. Peter Anvin
  2009-12-12  2:10   ` [PATCH 5/7] x86/pci: use u64 instead of size_t in amd_bus.c -v2 Yinghai Lu
  2009-12-11 23:35 ` [PATCH 6/7] x86/pci: enable pci root res read out for 32bit too Yinghai Lu
  2009-12-11 23:35 ` [PATCH 7/7] x86: increase MAX_EARLY_RES Yinghai Lu
  5 siblings, 2 replies; 21+ messages in thread
From: Yinghai Lu @ 2009-12-11 23:35 UTC (permalink / raw)
  To: Ingo Molnar, Jesse Barnes, Thomas Gleixner, H. Peter Anvin,
	Andrew Morton
  Cc: linux-kernel, linux-pci, Gertjan van Wingerde



prepare to enable it for 32bit

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/pci/amd_bus.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Index: linux-2.6/arch/x86/pci/amd_bus.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/amd_bus.c
+++ linux-2.6/arch/x86/pci/amd_bus.c
@@ -82,8 +82,8 @@ static int __init early_fill_mp_bus_info
 	struct pci_root_info *info;
 	u32 reg;
 	struct resource *res;
-	size_t start;
-	size_t end;
+	u64 start;
+	u64 end;
 	struct range range[RANGE_NUM];
 	u64 val;
 	u32 address;


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 6/7] x86/pci: enable pci root res read out for 32bit too
       [not found] <4B22D4DA.2000104@kernel.org>
                   ` (3 preceding siblings ...)
  2009-12-11 23:35 ` [PATCH 5/7] x86/pci: use u64 instead of size_t in amd_bus.c Yinghai Lu
@ 2009-12-11 23:35 ` Yinghai Lu
  2009-12-12  2:11   ` [PATCH 61/7] x86/pci: add cap_4g Yinghai Lu
  2009-12-12  2:13   ` [PATCH 6/7] x86/pci: enable pci root res read out for 32bit too -v2 Yinghai Lu
  2009-12-11 23:35 ` [PATCH 7/7] x86: increase MAX_EARLY_RES Yinghai Lu
  5 siblings, 2 replies; 21+ messages in thread
From: Yinghai Lu @ 2009-12-11 23:35 UTC (permalink / raw)
  To: Ingo Molnar, Jesse Barnes, Thomas Gleixner, H. Peter Anvin,
	Andrew Morton
  Cc: linux-kernel, linux-pci, Gertjan van Wingerde


should be good for 32bit too.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/pci/Makefile   |    3 +--
 arch/x86/pci/amd_bus.c  |   17 +++--------------
 arch/x86/pci/bus_numa.h |    4 ++--
 arch/x86/pci/i386.c     |    4 ----
 4 files changed, 6 insertions(+), 22 deletions(-)

Index: linux-2.6/arch/x86/pci/Makefile
===================================================================
--- linux-2.6.orig/arch/x86/pci/Makefile
+++ linux-2.6/arch/x86/pci/Makefile
@@ -14,8 +14,7 @@ obj-$(CONFIG_X86_VISWS)		+= visws.o
 obj-$(CONFIG_X86_NUMAQ)		+= numaq_32.o
 
 obj-y				+= common.o early.o
-obj-y				+= amd_bus.o
-obj-$(CONFIG_X86_64)		+= bus_numa.o intel_bus.o
+obj-y				+= amd_bus.o bus_numa.o intel_bus.o
 
 ifeq ($(CONFIG_PCI_DEBUG),y)
 EXTRA_CFLAGS += -DDEBUG
Index: linux-2.6/arch/x86/pci/amd_bus.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/amd_bus.c
+++ linux-2.6/arch/x86/pci/amd_bus.c
@@ -6,9 +6,7 @@
 
 #include <asm/pci_x86.h>
 
-#ifdef CONFIG_X86_64
 #include <asm/pci-direct.h>
-#endif
 
 #include "bus_numa.h"
 
@@ -17,8 +15,6 @@
  * also get peer root bus resource for io,mmio
  */
 
-#ifdef CONFIG_X86_64
-
 struct pci_hostbridge_probe {
 	u32 bus;
 	u32 slot;
@@ -207,7 +203,7 @@ static int __init early_fill_mp_bus_info
 	address = MSR_K8_TOP_MEM1;
 	rdmsrl(address, val);
 	end = (val & 0xffffff800000ULL);
-	printk(KERN_INFO "TOM: %016lx aka %ldM\n", end, end>>20);
+	printk(KERN_INFO "TOM: %016llx aka %lldM\n", (u64)end, (u64)end>>20);
 	if (end < (1ULL<<32))
 		subtract_range(range, RANGE_NUM, 0, end - 1);
 
@@ -301,7 +297,8 @@ static int __init early_fill_mp_bus_info
 		address = MSR_K8_TOP_MEM2;
 		rdmsrl(address, val);
 		end = (val & 0xffffff800000ULL);
-		printk(KERN_INFO "TOM2: %016lx aka %ldM\n", end, end>>20);
+		printk(KERN_INFO "TOM2: %016llx aka %lldM\n", (u64)end,
+							 (u64)end>>20);
 		subtract_range(range, RANGE_NUM, 1ULL<<32, end - 1);
 	}
 
@@ -347,14 +344,6 @@ static int __init early_fill_mp_bus_info
 	return 0;
 }
 
-#else  /* !CONFIG_X86_64 */
-
-static int __init early_fill_mp_bus_info(void) { return 0; }
-
-#endif /* !CONFIG_X86_64 */
-
-/* common 32/64 bit code */
-
 #define ENABLE_CF8_EXT_CFG      (1ULL << 46)
 
 static void enable_pci_io_ecs(void *unused)
Index: linux-2.6/arch/x86/pci/i386.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/i386.c
+++ linux-2.6/arch/x86/pci/i386.c
@@ -257,10 +257,6 @@ void __init pcibios_resource_survey(void
  */
 fs_initcall(pcibios_assign_resources);
 
-void __weak x86_pci_root_bus_res_quirks(struct pci_bus *b)
-{
-}
-
 /*
  *  If we set up a device for bus mastering, we need to check the latency
  *  timer as certain crappy BIOSes forget to set it properly.
Index: linux-2.6/arch/x86/pci/bus_numa.h
===================================================================
--- linux-2.6.orig/arch/x86/pci/bus_numa.h
+++ linux-2.6/arch/x86/pci/bus_numa.h
@@ -1,5 +1,5 @@
-#ifdef CONFIG_X86_64
-
+#ifndef __BUS_NUMA_H
+#define __BUS_NUMA_H
 /*
  * sub bus (transparent) will use entres from 3 to store extra from
  * root, so need to make sure we have enough slot there, Should we



^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 7/7] x86: increase MAX_EARLY_RES
       [not found] <4B22D4DA.2000104@kernel.org>
                   ` (4 preceding siblings ...)
  2009-12-11 23:35 ` [PATCH 6/7] x86/pci: enable pci root res read out for 32bit too Yinghai Lu
@ 2009-12-11 23:35 ` Yinghai Lu
  2009-12-15  2:06   ` [PATCH 1/3] x86: call early_res_to_bootmem one time Yinghai Lu
  2009-12-17  1:01   ` [tip:x86/urgent] x86: Increase MAX_EARLY_RES; insufficient on 32-bit NUMA tip-bot for Yinghai Lu
  5 siblings, 2 replies; 21+ messages in thread
From: Yinghai Lu @ 2009-12-11 23:35 UTC (permalink / raw)
  To: Ingo Molnar, Jesse Barnes, Thomas Gleixner, H. Peter Anvin,
	Andrew Morton
  Cc: linux-kernel, linux-pci



32bit numa run out of it, because recent change with wakeup and mptable.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/kernel/e820.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: linux-2.6/arch/x86/kernel/e820.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/e820.c
+++ linux-2.6/arch/x86/kernel/e820.c
@@ -724,7 +724,7 @@ core_initcall(e820_mark_nvs_memory);
 /*
  * Early reserved memory areas.
  */
-#define MAX_EARLY_RES 20
+#define MAX_EARLY_RES 32
 
 struct early_res {
 	u64 start, end;


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 5/7] x86/pci: use u64 instead of size_t in amd_bus.c
  2009-12-11 23:35 ` [PATCH 5/7] x86/pci: use u64 instead of size_t in amd_bus.c Yinghai Lu
@ 2009-12-11 23:55   ` H. Peter Anvin
  2009-12-12  0:42     ` Yinghai Lu
  2009-12-12  2:10   ` [PATCH 5/7] x86/pci: use u64 instead of size_t in amd_bus.c -v2 Yinghai Lu
  1 sibling, 1 reply; 21+ messages in thread
From: H. Peter Anvin @ 2009-12-11 23:55 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Ingo Molnar, Jesse Barnes, Thomas Gleixner, Andrew Morton,
	linux-kernel, linux-pci, Gertjan van Wingerde

On 12/11/2009 03:35 PM, Yinghai Lu wrote:
> 
> 
> prepare to enable it for 32bit
> 
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
> 
> ---
>  arch/x86/pci/amd_bus.c |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> Index: linux-2.6/arch/x86/pci/amd_bus.c
> ===================================================================
> --- linux-2.6.orig/arch/x86/pci/amd_bus.c
> +++ linux-2.6/arch/x86/pci/amd_bus.c
> @@ -82,8 +82,8 @@ static int __init early_fill_mp_bus_info
>  	struct pci_root_info *info;
>  	u32 reg;
>  	struct resource *res;
> -	size_t start;
> -	size_t end;
> +	u64 start;
> +	u64 end;
>  	struct range range[RANGE_NUM];
>  	u64 val;
>  	u32 address;
> 

Shouldn't this be resource_size_t?

	-hpa


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 5/7] x86/pci: use u64 instead of size_t in amd_bus.c
  2009-12-11 23:55   ` H. Peter Anvin
@ 2009-12-12  0:42     ` Yinghai Lu
  0 siblings, 0 replies; 21+ messages in thread
From: Yinghai Lu @ 2009-12-12  0:42 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Ingo Molnar, Jesse Barnes, Thomas Gleixner, Andrew Morton,
	linux-kernel, linux-pci, Gertjan van Wingerde

H. Peter Anvin wrote:
> On 12/11/2009 03:35 PM, Yinghai Lu wrote:
>>
>> prepare to enable it for 32bit
>>
>> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
>>
>> ---
>>  arch/x86/pci/amd_bus.c |    4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> Index: linux-2.6/arch/x86/pci/amd_bus.c
>> ===================================================================
>> --- linux-2.6.orig/arch/x86/pci/amd_bus.c
>> +++ linux-2.6/arch/x86/pci/amd_bus.c
>> @@ -82,8 +82,8 @@ static int __init early_fill_mp_bus_info
>>  	struct pci_root_info *info;
>>  	u32 reg;
>>  	struct resource *res;
>> -	size_t start;
>> -	size_t end;
>> +	u64 start;
>> +	u64 end;
>>  	struct range range[RANGE_NUM];
>>  	u64 val;
>>  	u32 address;
>>
> 
> Shouldn't this be resource_size_t?

it seems we should use u64, and check the if the sizeof(resource_size_t) != sizeof(u64)
and cap some vale.

YH

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 5/7] x86/pci: use u64 instead of size_t in amd_bus.c -v2
  2009-12-11 23:35 ` [PATCH 5/7] x86/pci: use u64 instead of size_t in amd_bus.c Yinghai Lu
  2009-12-11 23:55   ` H. Peter Anvin
@ 2009-12-12  2:10   ` Yinghai Lu
  1 sibling, 0 replies; 21+ messages in thread
From: Yinghai Lu @ 2009-12-12  2:10 UTC (permalink / raw)
  To: Ingo Molnar, Jesse Barnes, Thomas Gleixner, H. Peter Anvin,
	Andrew Morton
  Cc: linux-kernel, linux-pci, Gertjan van Wingerde

prepare to enable it for 32bit

-v2: remove not needed cast

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/pci/amd_bus.c |   16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

Index: linux-2.6/arch/x86/pci/amd_bus.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/amd_bus.c
+++ linux-2.6/arch/x86/pci/amd_bus.c
@@ -82,8 +82,8 @@ static int __init early_fill_mp_bus_info
 	struct pci_root_info *info;
 	u32 reg;
 	struct resource *res;
-	size_t start;
-	size_t end;
+	u64 start;
+	u64 end;
 	struct range range[RANGE_NUM];
 	u64 val;
 	u32 address;
@@ -173,7 +173,7 @@ static int __init early_fill_mp_bus_info
 
 		info = &pci_root_info[j];
 		printk(KERN_DEBUG "node %d link %d: io port [%llx, %llx]\n",
-		       node, link, (u64)start, (u64)end);
+		       node, link, start, end);
 
 		/* kernel only handle 16 bit only */
 		if (end > 0xffff)
@@ -207,7 +207,7 @@ static int __init early_fill_mp_bus_info
 	address = MSR_K8_TOP_MEM1;
 	rdmsrl(address, val);
 	end = (val & 0xffffff800000ULL);
-	printk(KERN_INFO "TOM: %016lx aka %ldM\n", end, end>>20);
+	printk(KERN_INFO "TOM: %016llx aka %lldM\n", end, end>>20);
 	if (end < (1ULL<<32))
 		subtract_range(range, RANGE_NUM, 0, end - 1);
 
@@ -246,7 +246,7 @@ static int __init early_fill_mp_bus_info
 		info = &pci_root_info[j];
 
 		printk(KERN_DEBUG "node %d link %d: mmio [%llx, %llx]",
-		       node, link, (u64)start, (u64)end);
+		       node, link, start, end);
 		/*
 		 * some sick allocation would have range overlap with fam10h
 		 * mmconf range, so need to update start and end.
@@ -272,13 +272,13 @@ static int __init early_fill_mp_bus_info
 				endx = fam10h_mmconf_start - 1;
 				update_res(info, start, endx, IORESOURCE_MEM, 0);
 				subtract_range(range, RANGE_NUM, start, endx);
-				printk(KERN_CONT " ==> [%llx, %llx]", (u64)start, endx);
+				printk(KERN_CONT " ==> [%llx, %llx]", start, endx);
 				start = fam10h_mmconf_end + 1;
 				changed = 1;
 			}
 			if (changed) {
 				if (start <= end) {
-					printk(KERN_CONT " %s [%llx, %llx]", endx?"and":"==>", (u64)start, (u64)end);
+					printk(KERN_CONT " %s [%llx, %llx]", endx?"and":"==>", start, end);
 				} else {
 					printk(KERN_CONT "%s\n", endx?"":" ==> none");
 					continue;
@@ -301,7 +301,7 @@ static int __init early_fill_mp_bus_info
 		address = MSR_K8_TOP_MEM2;
 		rdmsrl(address, val);
 		end = (val & 0xffffff800000ULL);
-		printk(KERN_INFO "TOM2: %016lx aka %ldM\n", end, end>>20);
+		printk(KERN_INFO "TOM2: %016llx aka %lldM\n", end, end>>20);
 		subtract_range(range, RANGE_NUM, 1ULL<<32, end - 1);
 	}
 

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 61/7] x86/pci: add cap_4g
  2009-12-11 23:35 ` [PATCH 6/7] x86/pci: enable pci root res read out for 32bit too Yinghai Lu
@ 2009-12-12  2:11   ` Yinghai Lu
  2009-12-12  2:16     ` H. Peter Anvin
  2009-12-12  2:13   ` [PATCH 6/7] x86/pci: enable pci root res read out for 32bit too -v2 Yinghai Lu
  1 sibling, 1 reply; 21+ messages in thread
From: Yinghai Lu @ 2009-12-12  2:11 UTC (permalink / raw)
  To: Ingo Molnar, Jesse Barnes, Thomas Gleixner, H. Peter Anvin,
	Andrew Morton
  Cc: linux-kernel, linux-pci, Gertjan van Wingerde


prepare for 32bit pci root bus

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/pci/amd_bus.c   |    7 ++++---
 arch/x86/pci/bus_numa.c  |    4 ++++
 arch/x86/pci/intel_bus.c |    5 ++++-
 include/linux/range.h    |   10 ++++++++++
 4 files changed, 22 insertions(+), 4 deletions(-)

Index: linux-2.6/arch/x86/pci/amd_bus.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/amd_bus.c
+++ linux-2.6/arch/x86/pci/amd_bus.c
@@ -201,7 +201,7 @@ static int __init early_fill_mp_bus_info
 
 	memset(range, 0, sizeof(range));
 	/* 0xfd00000000-0xffffffffff for HT */
-	range[0].end = (0xfdULL<<32) - 1;
+	range[0].end = cap_4g((0xfdULL<<32) - 1);
 
 	/* need to take out [0, TOM) for RAM*/
 	address = MSR_K8_TOP_MEM1;
@@ -286,7 +286,7 @@ static int __init early_fill_mp_bus_info
 			}
 		}
 
-		update_res(info, start, end, IORESOURCE_MEM, 1);
+		update_res(info, cap_4g(start), cap_4g(end), IORESOURCE_MEM, 1);
 		subtract_range(range, RANGE_NUM, start, end);
 		printk(KERN_CONT "\n");
 	}
@@ -321,7 +321,8 @@ static int __init early_fill_mp_bus_info
 			if (!range[i].end)
 				continue;
 
-			update_res(info, range[i].start, range[i].end,
+			update_res(info, cap_4g(range[i].start),
+				   cap_4g(range[i].end),
 				   IORESOURCE_MEM, 1);
 		}
 	}
Index: linux-2.6/arch/x86/pci/bus_numa.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/bus_numa.c
+++ linux-2.6/arch/x86/pci/bus_numa.c
@@ -55,6 +55,10 @@ void __init update_res(struct pci_root_i
 	if (start > end)
 		return;
 
+	if (sizeof(resource_size_t) < sizeof(u64) &&
+	    start == 0xffffffff)
+		return;
+
 	if (!merge)
 		goto addit;
 
Index: linux-2.6/arch/x86/pci/intel_bus.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/intel_bus.c
+++ linux-2.6/arch/x86/pci/intel_bus.c
@@ -6,6 +6,8 @@
 #include <linux/dmi.h>
 #include <linux/pci.h>
 #include <linux/init.h>
+#include <linux/range.h>
+
 #include <asm/pci_x86.h>
 
 #include "bus_numa.h"
@@ -81,7 +83,8 @@ static void __devinit pci_root_bus_res(s
 	mmioh_base |= ((u64)(dword & 0x7ffff)) << 32;
 	pci_read_config_dword(dev, IOH_LMMIOH_LIMITU, &dword);
 	mmioh_end |= ((u64)(dword & 0x7ffff)) << 32;
-	update_res(info, mmioh_base, mmioh_end, IORESOURCE_MEM, 0);
+	update_res(info, cap_4g(mmioh_base), cap_4g(mmioh_end),
+			 IORESOURCE_MEM, 0);
 
 	print_ioh_resources(info);
 }
Index: linux-2.6/include/linux/range.h
===================================================================
--- linux-2.6.orig/include/linux/range.h
+++ linux-2.6/include/linux/range.h
@@ -19,4 +19,14 @@ int clean_sort_range(struct range *range
 
 void sort_range(struct range *range, int nr_range);
 
+static inline u64 cap_4g(u64 val)
+{
+	if (sizeof(resource_size_t) >= sizeof(u64))
+		return val;
+
+	if (val < 1ULL)
+		return val;
+
+	return 0xffffffff;
+}
 #endif

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 6/7] x86/pci: enable pci root res read out for 32bit too -v2
  2009-12-11 23:35 ` [PATCH 6/7] x86/pci: enable pci root res read out for 32bit too Yinghai Lu
  2009-12-12  2:11   ` [PATCH 61/7] x86/pci: add cap_4g Yinghai Lu
@ 2009-12-12  2:13   ` Yinghai Lu
  2009-12-12  3:28     ` [PATCH 6/7] x86/pci: enable pci root res read out for 32bit too -v3 Yinghai Lu
  1 sibling, 1 reply; 21+ messages in thread
From: Yinghai Lu @ 2009-12-12  2:13 UTC (permalink / raw)
  To: Ingo Molnar, Jesse Barnes, Thomas Gleixner, H. Peter Anvin,
	Andrew Morton
  Cc: linux-kernel, linux-pci, Gertjan van Wingerde


should be good for 32bit too.

v2: split out cap_4g to 61

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/pci/Makefile   |    3 +--
 arch/x86/pci/amd_bus.c  |   12 ------------
 arch/x86/pci/bus_numa.h |    4 ++--
 arch/x86/pci/i386.c     |    4 ----
 4 files changed, 3 insertions(+), 20 deletions(-)

Index: linux-2.6/arch/x86/pci/Makefile
===================================================================
--- linux-2.6.orig/arch/x86/pci/Makefile
+++ linux-2.6/arch/x86/pci/Makefile
@@ -14,8 +14,7 @@ obj-$(CONFIG_X86_VISWS)		+= visws.o
 obj-$(CONFIG_X86_NUMAQ)		+= numaq_32.o
 
 obj-y				+= common.o early.o
-obj-y				+= amd_bus.o
-obj-$(CONFIG_X86_64)		+= bus_numa.o intel_bus.o
+obj-y				+= amd_bus.o bus_numa.o intel_bus.o
 
 ifeq ($(CONFIG_PCI_DEBUG),y)
 EXTRA_CFLAGS += -DDEBUG
Index: linux-2.6/arch/x86/pci/amd_bus.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/amd_bus.c
+++ linux-2.6/arch/x86/pci/amd_bus.c
@@ -6,9 +6,7 @@
 
 #include <asm/pci_x86.h>
 
-#ifdef CONFIG_X86_64
 #include <asm/pci-direct.h>
-#endif
 
 #include "bus_numa.h"
 
@@ -17,8 +15,6 @@
  * also get peer root bus resource for io,mmio
  */
 
-#ifdef CONFIG_X86_64
-
 struct pci_hostbridge_probe {
 	u32 bus;
 	u32 slot;
@@ -348,14 +344,6 @@ static int __init early_fill_mp_bus_info
 	return 0;
 }
 
-#else  /* !CONFIG_X86_64 */
-
-static int __init early_fill_mp_bus_info(void) { return 0; }
-
-#endif /* !CONFIG_X86_64 */
-
-/* common 32/64 bit code */
-
 #define ENABLE_CF8_EXT_CFG      (1ULL << 46)
 
 static void enable_pci_io_ecs(void *unused)
Index: linux-2.6/arch/x86/pci/i386.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/i386.c
+++ linux-2.6/arch/x86/pci/i386.c
@@ -257,10 +257,6 @@ void __init pcibios_resource_survey(void
  */
 fs_initcall(pcibios_assign_resources);
 
-void __weak x86_pci_root_bus_res_quirks(struct pci_bus *b)
-{
-}
-
 /*
  *  If we set up a device for bus mastering, we need to check the latency
  *  timer as certain crappy BIOSes forget to set it properly.
Index: linux-2.6/arch/x86/pci/bus_numa.h
===================================================================
--- linux-2.6.orig/arch/x86/pci/bus_numa.h
+++ linux-2.6/arch/x86/pci/bus_numa.h
@@ -1,5 +1,5 @@
-#ifdef CONFIG_X86_64
-
+#ifndef __BUS_NUMA_H
+#define __BUS_NUMA_H
 /*
  * sub bus (transparent) will use entres from 3 to store extra from
  * root, so need to make sure we have enough slot there, Should we

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 61/7] x86/pci: add cap_4g
  2009-12-12  2:11   ` [PATCH 61/7] x86/pci: add cap_4g Yinghai Lu
@ 2009-12-12  2:16     ` H. Peter Anvin
  2009-12-12  2:20       ` Yinghai Lu
  0 siblings, 1 reply; 21+ messages in thread
From: H. Peter Anvin @ 2009-12-12  2:16 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Ingo Molnar, Jesse Barnes, Thomas Gleixner, Andrew Morton,
	linux-kernel, linux-pci, Gertjan van Wingerde

On 12/11/2009 06:11 PM, Yinghai Lu wrote:
>  
> +static inline u64 cap_4g(u64 val)
> +{
> +	if (sizeof(resource_size_t) >= sizeof(u64))
> +		return val;
> +
> +	if (val < 1ULL)
> +		return val;
> +
> +	return 0xffffffff;
> +}
>  #endif

How about:

static inline resource_size_t cap_resource(u64 val)
{
	if (val > ~(resource_size_t)0)
		return ~(resource_size_t)0;
	else
		return val;
}


-- 
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel.  I don't speak on their behalf.


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 61/7] x86/pci: add cap_4g
  2009-12-12  2:16     ` H. Peter Anvin
@ 2009-12-12  2:20       ` Yinghai Lu
  2009-12-12  2:25         ` H. Peter Anvin
  0 siblings, 1 reply; 21+ messages in thread
From: Yinghai Lu @ 2009-12-12  2:20 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Ingo Molnar, Jesse Barnes, Thomas Gleixner, Andrew Morton,
	linux-kernel, linux-pci, Gertjan van Wingerde

H. Peter Anvin wrote:
> On 12/11/2009 06:11 PM, Yinghai Lu wrote:
>>  
>> +static inline u64 cap_4g(u64 val)
>> +{
>> +	if (sizeof(resource_size_t) >= sizeof(u64))
>> +		return val;
>> +
>> +	if (val < 1ULL)
>> +		return val;
>> +
>> +	return 0xffffffff;
>> +}
>>  #endif
> 
> How about:
> 
> static inline resource_size_t cap_resource(u64 val)
> {
> 	if (val > ~(resource_size_t)0)
> 		return ~(resource_size_t)0;
> 	else
> 		return val;
> }

ok

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 61/7] x86/pci: add cap_4g
  2009-12-12  2:20       ` Yinghai Lu
@ 2009-12-12  2:25         ` H. Peter Anvin
  2009-12-12  3:29           ` [PATCH 61/7] x86/pci: add cap_resource -v2 Yinghai Lu
  0 siblings, 1 reply; 21+ messages in thread
From: H. Peter Anvin @ 2009-12-12  2:25 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Ingo Molnar, Jesse Barnes, Thomas Gleixner, Andrew Morton,
	linux-kernel, linux-pci, Gertjan van Wingerde

On 12/11/2009 06:20 PM, Yinghai Lu wrote:
>>
>> How about:
>>
>> static inline resource_size_t cap_resource(u64 val)
>> {
>> 	if (val > ~(resource_size_t)0)
>> 		return ~(resource_size_t)0;
>> 	else
>> 		return val;
>> }
> 
> ok

Stylisically I guess the idiom:

	(resource_size_t)~0

... is better, not that it matters in this case, but the (type)~0 idiom
gets the correct answer even when sizeof(type) < sizeof(int).

	-hpa

-- 
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel.  I don't speak on their behalf.


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 6/7] x86/pci: enable pci root res read out for 32bit too -v3
  2009-12-12  2:13   ` [PATCH 6/7] x86/pci: enable pci root res read out for 32bit too -v2 Yinghai Lu
@ 2009-12-12  3:28     ` Yinghai Lu
  0 siblings, 0 replies; 21+ messages in thread
From: Yinghai Lu @ 2009-12-12  3:28 UTC (permalink / raw)
  To: Ingo Molnar, Jesse Barnes, Thomas Gleixner, H. Peter Anvin,
	Andrew Morton
  Cc: linux-kernel, linux-pci, Gertjan van Wingerde



should be good for 32bit too.

-v3: cast res->start

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/pci/Makefile    |    3 +--
 arch/x86/pci/amd_bus.c   |   14 +-------------
 arch/x86/pci/bus_numa.h  |    4 ++--
 arch/x86/pci/i386.c      |    4 ----
 arch/x86/pci/intel_bus.c |    2 +-
 5 files changed, 5 insertions(+), 22 deletions(-)

Index: linux-2.6/arch/x86/pci/Makefile
===================================================================
--- linux-2.6.orig/arch/x86/pci/Makefile
+++ linux-2.6/arch/x86/pci/Makefile
@@ -14,8 +14,7 @@ obj-$(CONFIG_X86_VISWS)		+= visws.o
 obj-$(CONFIG_X86_NUMAQ)		+= numaq_32.o
 
 obj-y				+= common.o early.o
-obj-y				+= amd_bus.o
-obj-$(CONFIG_X86_64)		+= bus_numa.o intel_bus.o
+obj-y				+= amd_bus.o bus_numa.o intel_bus.o
 
 ifeq ($(CONFIG_PCI_DEBUG),y)
 EXTRA_CFLAGS += -DDEBUG
Index: linux-2.6/arch/x86/pci/amd_bus.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/amd_bus.c
+++ linux-2.6/arch/x86/pci/amd_bus.c
@@ -6,9 +6,7 @@
 
 #include <asm/pci_x86.h>
 
-#ifdef CONFIG_X86_64
 #include <asm/pci-direct.h>
-#endif
 
 #include "bus_numa.h"
 
@@ -17,8 +15,6 @@
  * also get peer root bus resource for io,mmio
  */
 
-#ifdef CONFIG_X86_64
-
 struct pci_hostbridge_probe {
 	u32 bus;
 	u32 slot;
@@ -342,21 +338,13 @@ static int __init early_fill_mp_bus_info
 			printk(KERN_DEBUG "bus: %02x index %x %s: [%llx, %llx]\n",
 			       busnum, j,
 			       (res->flags & IORESOURCE_IO)?"io port":"mmio",
-			       res->start, res->end);
+			       (u64)res->start, (u64)res->end);
 		}
 	}
 
 	return 0;
 }
 
-#else  /* !CONFIG_X86_64 */
-
-static int __init early_fill_mp_bus_info(void) { return 0; }
-
-#endif /* !CONFIG_X86_64 */
-
-/* common 32/64 bit code */
-
 #define ENABLE_CF8_EXT_CFG      (1ULL << 46)
 
 static void enable_pci_io_ecs(void *unused)
Index: linux-2.6/arch/x86/pci/i386.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/i386.c
+++ linux-2.6/arch/x86/pci/i386.c
@@ -257,10 +257,6 @@ void __init pcibios_resource_survey(void
  */
 fs_initcall(pcibios_assign_resources);
 
-void __weak x86_pci_root_bus_res_quirks(struct pci_bus *b)
-{
-}
-
 /*
  *  If we set up a device for bus mastering, we need to check the latency
  *  timer as certain crappy BIOSes forget to set it properly.
Index: linux-2.6/arch/x86/pci/bus_numa.h
===================================================================
--- linux-2.6.orig/arch/x86/pci/bus_numa.h
+++ linux-2.6/arch/x86/pci/bus_numa.h
@@ -1,5 +1,5 @@
-#ifdef CONFIG_X86_64
-
+#ifndef __BUS_NUMA_H
+#define __BUS_NUMA_H
 /*
  * sub bus (transparent) will use entres from 3 to store extra from
  * root, so need to make sure we have enough slot there, Should we
Index: linux-2.6/arch/x86/pci/intel_bus.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/intel_bus.c
+++ linux-2.6/arch/x86/pci/intel_bus.c
@@ -30,7 +30,7 @@ static inline void print_ioh_resources(s
 			busnum, i,
 			(res->flags & IORESOURCE_IO) ? "io port" :
 							"mmio",
-			res->start, res->end);
+			(u64)res->start, (u64)res->end);
 	}
 }
 

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 61/7] x86/pci: add cap_resource -v2
  2009-12-12  2:25         ` H. Peter Anvin
@ 2009-12-12  3:29           ` Yinghai Lu
  0 siblings, 0 replies; 21+ messages in thread
From: Yinghai Lu @ 2009-12-12  3:29 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Ingo Molnar, Jesse Barnes, Thomas Gleixner, Andrew Morton,
	linux-kernel, linux-pci, Gertjan van Wingerde


prepare for 32bit pci root bus

-v2: hpa said we should compare with (resource_size_t)~0

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/pci/amd_bus.c   |    8 +++++---
 arch/x86/pci/bus_numa.c  |    3 +++
 arch/x86/pci/intel_bus.c |    5 ++++-
 include/linux/range.h    |    8 ++++++++
 4 files changed, 20 insertions(+), 4 deletions(-)

Index: linux-2.6/arch/x86/pci/amd_bus.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/amd_bus.c
+++ linux-2.6/arch/x86/pci/amd_bus.c
@@ -201,7 +201,7 @@ static int __init early_fill_mp_bus_info
 
 	memset(range, 0, sizeof(range));
 	/* 0xfd00000000-0xffffffffff for HT */
-	range[0].end = (0xfdULL<<32) - 1;
+	range[0].end = cap_resource((0xfdULL<<32) - 1);
 
 	/* need to take out [0, TOM) for RAM*/
 	address = MSR_K8_TOP_MEM1;
@@ -286,7 +286,8 @@ static int __init early_fill_mp_bus_info
 			}
 		}
 
-		update_res(info, start, end, IORESOURCE_MEM, 1);
+		update_res(info, cap_resource(start), cap_resource(end),
+				 IORESOURCE_MEM, 1);
 		subtract_range(range, RANGE_NUM, start, end);
 		printk(KERN_CONT "\n");
 	}
@@ -321,7 +322,8 @@ static int __init early_fill_mp_bus_info
 			if (!range[i].end)
 				continue;
 
-			update_res(info, range[i].start, range[i].end,
+			update_res(info, cap_resource(range[i].start),
+				   cap_resource(range[i].end),
 				   IORESOURCE_MEM, 1);
 		}
 	}
Index: linux-2.6/arch/x86/pci/bus_numa.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/bus_numa.c
+++ linux-2.6/arch/x86/pci/bus_numa.c
@@ -55,6 +55,9 @@ void __init update_res(struct pci_root_i
 	if (start > end)
 		return;
 
+	if (start == (resource_size_t)~0)
+		return;
+
 	if (!merge)
 		goto addit;
 
Index: linux-2.6/arch/x86/pci/intel_bus.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/intel_bus.c
+++ linux-2.6/arch/x86/pci/intel_bus.c
@@ -6,6 +6,8 @@
 #include <linux/dmi.h>
 #include <linux/pci.h>
 #include <linux/init.h>
+#include <linux/range.h>
+
 #include <asm/pci_x86.h>
 
 #include "bus_numa.h"
@@ -81,7 +83,8 @@ static void __devinit pci_root_bus_res(s
 	mmioh_base |= ((u64)(dword & 0x7ffff)) << 32;
 	pci_read_config_dword(dev, IOH_LMMIOH_LIMITU, &dword);
 	mmioh_end |= ((u64)(dword & 0x7ffff)) << 32;
-	update_res(info, mmioh_base, mmioh_end, IORESOURCE_MEM, 0);
+	update_res(info, cap_resource(mmioh_base), cap_resource(mmioh_end),
+			 IORESOURCE_MEM, 0);
 
 	print_ioh_resources(info);
 }
Index: linux-2.6/include/linux/range.h
===================================================================
--- linux-2.6.orig/include/linux/range.h
+++ linux-2.6/include/linux/range.h
@@ -19,4 +19,12 @@ int clean_sort_range(struct range *range
 
 void sort_range(struct range *range, int nr_range);
 
+
+static inline resource_size_t cap_resource(u64 val)
+{
+	if (val > (resource_size_t)~0)
+		return (resource_size_t)~0;
+	else
+		return val;
+}
 #endif

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 1/3] x86: call early_res_to_bootmem one time
  2009-12-11 23:35 ` [PATCH 7/7] x86: increase MAX_EARLY_RES Yinghai Lu
@ 2009-12-15  2:06   ` Yinghai Lu
  2009-12-15  2:07     ` [PATCH 2/3] x86: introduce max_early_res and early_res_count Yinghai Lu
  2009-12-17  1:01   ` [tip:x86/urgent] x86: Increase MAX_EARLY_RES; insufficient on 32-bit NUMA tip-bot for Yinghai Lu
  1 sibling, 1 reply; 21+ messages in thread
From: Yinghai Lu @ 2009-12-15  2:06 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin; +Cc: linux-kernel


simplify setup_node_mem, do use bootmem from other node.
instead just find_e820_area in early_node_mem.

so we can keep the boundary between early_res and boot mem more clear.
and only call civertion one time instead of for all nodes.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/kernel/setup.c |    1 
 arch/x86/mm/init_32.c   |    1 
 arch/x86/mm/init_64.c   |    3 --
 arch/x86/mm/numa_64.c   |   62 +++++++++++++++---------------------------------
 4 files changed, 22 insertions(+), 45 deletions(-)

Index: linux-2.6/arch/x86/kernel/setup.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/setup.c
+++ linux-2.6/arch/x86/kernel/setup.c
@@ -942,6 +942,7 @@ void __init setup_arch(char **cmdline_p)
 #endif
 
 	initmem_init(0, max_pfn, acpi, k8);
+	early_res_to_bootmem(0, max_low_pfn<<PAGE_SHIFT);
 
 #ifdef CONFIG_X86_64
 	/*
Index: linux-2.6/arch/x86/mm/init_32.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/init_32.c
+++ linux-2.6/arch/x86/mm/init_32.c
@@ -764,7 +764,6 @@ static unsigned long __init setup_node_b
 	printk(KERN_INFO "  node %d bootmap %08lx - %08lx\n",
 		 nodeid, bootmap, bootmap + bootmap_size);
 	free_bootmem_with_active_regions(nodeid, end_pfn);
-	early_res_to_bootmem(start_pfn<<PAGE_SHIFT, end_pfn<<PAGE_SHIFT);
 
 	return bootmap + bootmap_size;
 }
Index: linux-2.6/arch/x86/mm/init_64.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/init_64.c
+++ linux-2.6/arch/x86/mm/init_64.c
@@ -578,13 +578,12 @@ void __init initmem_init(unsigned long s
 				 PAGE_SIZE);
 	if (bootmap == -1L)
 		panic("Cannot find bootmem map of size %ld\n", bootmap_size);
+	reserve_early(bootmap, bootmap + bootmap_size, "BOOTMAP");
 	/* don't touch min_low_pfn */
 	bootmap_size = init_bootmem_node(NODE_DATA(0), bootmap >> PAGE_SHIFT,
 					 0, end_pfn);
 	e820_register_active_regions(0, start_pfn, end_pfn);
 	free_bootmem_with_active_regions(0, end_pfn);
-	early_res_to_bootmem(0, end_pfn<<PAGE_SHIFT);
-	reserve_bootmem(bootmap, bootmap_size, BOOTMEM_DEFAULT);
 }
 #endif
 
Index: linux-2.6/arch/x86/mm/numa_64.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/numa_64.c
+++ linux-2.6/arch/x86/mm/numa_64.c
@@ -164,18 +164,21 @@ static void * __init early_node_mem(int
 				    unsigned long align)
 {
 	unsigned long mem = find_e820_area(start, end, size, align);
-	void *ptr;
 
 	if (mem != -1L)
 		return __va(mem);
 
-	ptr = __alloc_bootmem_nopanic(size, align, __pa(MAX_DMA_ADDRESS));
-	if (ptr == NULL) {
-		printk(KERN_ERR "Cannot find %lu bytes in node %d\n",
+
+	start = __pa(MAX_DMA_ADDRESS);
+	end = max_low_pfn_mapped << PAGE_SHIFT;
+	mem = find_e820_area(start, end, size, align);
+	if (mem != -1L)
+		return __va(mem);
+
+	printk(KERN_ERR "Cannot find %lu bytes in node %d\n",
 		       size, nodeid);
-		return NULL;
-	}
-	return ptr;
+
+	return NULL;
 }
 
 /* Initialize bootmem allocator for a node */
@@ -211,8 +214,12 @@ setup_node_bootmem(int nodeid, unsigned
 	if (node_data[nodeid] == NULL)
 		return;
 	nodedata_phys = __pa(node_data[nodeid]);
+	reserve_early(nodedata_phys, nodedata_phys + pgdat_size, "NODE_DATA");
 	printk(KERN_INFO "  NODE_DATA [%016lx - %016lx]\n", nodedata_phys,
 		nodedata_phys + pgdat_size - 1);
+	nid = phys_to_nid(nodedata_phys);
+	if (nid != nodeid)
+		printk(KERN_INFO "    NODE_DATA(%d) on node %d\n", nodeid, nid);
 
 	memset(NODE_DATA(nodeid), 0, sizeof(pg_data_t));
 	NODE_DATA(nodeid)->bdata = &bootmem_node_data[nodeid];
@@ -227,11 +234,7 @@ setup_node_bootmem(int nodeid, unsigned
 	 * of alloc_bootmem, that could clash with reserved range
 	 */
 	bootmap_pages = bootmem_bootmap_pages(last_pfn - start_pfn);
-	nid = phys_to_nid(nodedata_phys);
-	if (nid == nodeid)
-		bootmap_start = roundup(nodedata_phys + pgdat_size, PAGE_SIZE);
-	else
-		bootmap_start = roundup(start, PAGE_SIZE);
+	bootmap_start = roundup(nodedata_phys + pgdat_size, PAGE_SIZE);
 	/*
 	 * SMP_CACHE_BYTES could be enough, but init_bootmem_node like
 	 * to use that to align to PAGE_SIZE
@@ -239,18 +242,13 @@ setup_node_bootmem(int nodeid, unsigned
 	bootmap = early_node_mem(nodeid, bootmap_start, end,
 				 bootmap_pages<<PAGE_SHIFT, PAGE_SIZE);
 	if (bootmap == NULL)  {
-		if (nodedata_phys < start || nodedata_phys >= end) {
-			/*
-			 * only need to free it if it is from other node
-			 * bootmem
-			 */
-			if (nid != nodeid)
-				free_bootmem(nodedata_phys, pgdat_size);
-		}
+		free_early(nodedata_phys, nodedata_phys + pgdat_size);
 		node_data[nodeid] = NULL;
 		return;
 	}
 	bootmap_start = __pa(bootmap);
+	reserve_early(bootmap_start, bootmap_start+(bootmap_pages<<PAGE_SHIFT),
+			"BOOTMAP");
 
 	bootmap_size = init_bootmem_node(NODE_DATA(nodeid),
 					 bootmap_start >> PAGE_SHIFT,
@@ -259,31 +257,11 @@ setup_node_bootmem(int nodeid, unsigned
 	printk(KERN_INFO "  bootmap [%016lx -  %016lx] pages %lx\n",
 		 bootmap_start, bootmap_start + bootmap_size - 1,
 		 bootmap_pages);
-
-	free_bootmem_with_active_regions(nodeid, end);
-
-	/*
-	 * convert early reserve to bootmem reserve earlier
-	 * otherwise early_node_mem could use early reserved mem
-	 * on previous node
-	 */
-	early_res_to_bootmem(start, end);
-
-	/*
-	 * in some case early_node_mem could use alloc_bootmem
-	 * to get range on other node, don't reserve that again
-	 */
-	if (nid != nodeid)
-		printk(KERN_INFO "    NODE_DATA(%d) on node %d\n", nodeid, nid);
-	else
-		reserve_bootmem_node(NODE_DATA(nodeid), nodedata_phys,
-					pgdat_size, BOOTMEM_DEFAULT);
 	nid = phys_to_nid(bootmap_start);
 	if (nid != nodeid)
 		printk(KERN_INFO "    bootmap(%d) on node %d\n", nodeid, nid);
-	else
-		reserve_bootmem_node(NODE_DATA(nodeid), bootmap_start,
-				 bootmap_pages<<PAGE_SHIFT, BOOTMEM_DEFAULT);
+
+	free_bootmem_with_active_regions(nodeid, end);
 
 	node_set_online(nodeid);
 }

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 2/3] x86: introduce max_early_res and early_res_count
  2009-12-15  2:06   ` [PATCH 1/3] x86: call early_res_to_bootmem one time Yinghai Lu
@ 2009-12-15  2:07     ` Yinghai Lu
  2009-12-15  2:08       ` [PATCH 3/3] x86: dynamic increase early_res array size Yinghai Lu
  0 siblings, 1 reply; 21+ messages in thread
From: Yinghai Lu @ 2009-12-15  2:07 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin; +Cc: linux-kernel


to prepare allocate early res array from fine_e820_area

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/kernel/e820.c |   47 ++++++++++++++++++++++++++++++++---------------
 1 file changed, 32 insertions(+), 15 deletions(-)

Index: linux-2.6/arch/x86/kernel/e820.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/e820.c
+++ linux-2.6/arch/x86/kernel/e820.c
@@ -724,14 +724,18 @@ core_initcall(e820_mark_nvs_memory);
 /*
  * Early reserved memory areas.
  */
-#define MAX_EARLY_RES 32
+/*
+ * need to make sure this one is bigger enough before
+ * find_e820_area could be used
+ */
+#define MAX_EARLY_RES_X 32
 
 struct early_res {
 	u64 start, end;
-	char name[16];
+	char name[15];
 	char overlap_ok;
 };
-static struct early_res early_res[MAX_EARLY_RES] __initdata = {
+static struct early_res early_res_x[MAX_EARLY_RES_X] __initdata = {
 	{ 0, PAGE_SIZE, "BIOS data page", 1 },	/* BIOS data page */
 #ifdef CONFIG_X86_32
 	/*
@@ -745,12 +749,22 @@ static struct early_res early_res[MAX_EA
 	{}
 };
 
+static int max_early_res __initdata = MAX_EARLY_RES_X;
+static struct early_res *early_res __initdata = &early_res_x[0];
+static int early_res_count __initdata =
+#ifdef CONFIG_X86_32
+	2
+#else
+	1
+#endif
+	;
+
 static int __init find_overlapped_early(u64 start, u64 end)
 {
 	int i;
 	struct early_res *r;
 
-	for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) {
+	for (i = 0; i < max_early_res && early_res[i].end; i++) {
 		r = &early_res[i];
 		if (end > r->start && start < r->end)
 			break;
@@ -768,13 +782,14 @@ static void __init drop_range(int i)
 {
 	int j;
 
-	for (j = i + 1; j < MAX_EARLY_RES && early_res[j].end; j++)
+	for (j = i + 1; j < max_early_res && early_res[j].end; j++)
 		;
 
 	memmove(&early_res[i], &early_res[i + 1],
 	       (j - 1 - i) * sizeof(struct early_res));
 
 	early_res[j - 1].end = 0;
+	early_res_count--;
 }
 
 /*
@@ -793,9 +808,9 @@ static void __init drop_overlaps_that_ar
 	struct early_res *r;
 	u64 lower_start, lower_end;
 	u64 upper_start, upper_end;
-	char name[16];
+	char name[15];
 
-	for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) {
+	for (i = 0; i < max_early_res && early_res[i].end; i++) {
 		r = &early_res[i];
 
 		/* Continue past non-overlapping ranges */
@@ -851,7 +866,7 @@ static void __init __reserve_early(u64 s
 	struct early_res *r;
 
 	i = find_overlapped_early(start, end);
-	if (i >= MAX_EARLY_RES)
+	if (i >= max_early_res)
 		panic("Too many early reservations");
 	r = &early_res[i];
 	if (r->end)
@@ -864,6 +879,7 @@ static void __init __reserve_early(u64 s
 	r->overlap_ok = overlap_ok;
 	if (name)
 		strncpy(r->name, name, sizeof(r->name) - 1);
+	early_res_count++;
 }
 
 /*
@@ -916,7 +932,7 @@ void __init free_early(u64 start, u64 en
 
 	i = find_overlapped_early(start, end);
 	r = &early_res[i];
-	if (i >= MAX_EARLY_RES || r->end != end || r->start != start)
+	if (i >= max_early_res || r->end != end || r->start != start)
 		panic("free_early on not reserved area: %llx-%llx!",
 			 start, end - 1);
 
@@ -927,14 +943,15 @@ void __init early_res_to_bootmem(u64 sta
 {
 	int i, count;
 	u64 final_start, final_end;
+	int idx = 0;
 
 	count  = 0;
-	for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++)
+	for (i = 0; i < max_early_res && early_res[i].end; i++)
 		count++;
 
-	printk(KERN_INFO "(%d early reservations) ==> bootmem [%010llx - %010llx]\n",
-			 count, start, end);
-	for (i = 0; i < count; i++) {
+	printk(KERN_INFO "(%d/%d early reservations) ==> bootmem [%010llx - %010llx]\n",
+			 count - idx, max_early_res, start, end);
+	for (i = idx; i < count; i++) {
 		struct early_res *r = &early_res[i];
 		printk(KERN_INFO "  #%d [%010llx - %010llx] %16s", i,
 			r->start, r->end, r->name);
@@ -961,7 +978,7 @@ static inline int __init bad_addr(u64 *a
 again:
 	i = find_overlapped_early(addr, addr + size);
 	r = &early_res[i];
-	if (i < MAX_EARLY_RES && r->end) {
+	if (i < max_early_res && r->end) {
 		*addrp = addr = round_up(r->end, align);
 		changed = 1;
 		goto again;
@@ -978,7 +995,7 @@ static inline int __init bad_addr_size(u
 	int changed = 0;
 again:
 	last = addr + size;
-	for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) {
+	for (i = 0; i < max_early_res && early_res[i].end; i++) {
 		struct early_res *r = &early_res[i];
 		if (last > r->start && addr < r->start) {
 			size = r->start - addr;

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 3/3] x86: dynamic increase early_res array size
  2009-12-15  2:07     ` [PATCH 2/3] x86: introduce max_early_res and early_res_count Yinghai Lu
@ 2009-12-15  2:08       ` Yinghai Lu
  2009-12-16  1:11         ` [PATCH 4/3] x86: make early_node_mem get mem > 4g if possible -v2 Yinghai Lu
  0 siblings, 1 reply; 21+ messages in thread
From: Yinghai Lu @ 2009-12-15  2:08 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin; +Cc: linux-kernel



use early_res_count to track the num, and use find_e820 to get new buffer.
and copy from old to new one.

also clear early_res to prevent later invalid using

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/kernel/e820.c |   54 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 54 insertions(+)

Index: linux-2.6/arch/x86/kernel/e820.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/e820.c
+++ linux-2.6/arch/x86/kernel/e820.c
@@ -908,6 +908,49 @@ void __init reserve_early_overlap_ok(u64
 	__reserve_early(start, end, name, 1);
 }
 
+static void __init __check_and_double_early_res(void)
+{
+	u64 size;
+	u64 mem;
+	struct early_res *new;
+
+	/* do we have enough slots left ? */
+	if ((max_early_res - early_res_count) > max(max_early_res/8, 2))
+		return;
+
+	/* double it */
+	size = sizeof(struct early_res) * max_early_res * 2;
+	mem = find_e820_area(0, max_pfn_mapped << PAGE_SHIFT, size,
+		 sizeof(struct early_res));
+
+	if (mem == -1ULL)
+		panic("can not find more space for early_res array");
+
+	new = __va(mem);
+	/* save the first one for own */
+	new[0].start = mem;
+	new[0].end = mem + size;
+	new[0].overlap_ok = 0;
+	/* copy old to new */
+	if (early_res == early_res_x) {
+		memcpy(&new[1], &early_res[0],
+			 sizeof(struct early_res) * max_early_res);
+		memset(&new[max_early_res+1], 0,
+			 sizeof(struct early_res) * (max_early_res - 1));
+		early_res_count++;
+	} else {
+		memcpy(&new[1], &early_res[1],
+			 sizeof(struct early_res) * (max_early_res - 1));
+		memset(&new[max_early_res], 0,
+			 sizeof(struct early_res) * max_early_res);
+	}
+	memset(&early_res[0], 0, sizeof(struct early_res) * max_early_res);
+	early_res = new;
+	max_early_res *= 2;
+	printk(KERN_DEBUG "early_res array is doubled to %d at [%llx - %llx]\n",
+		max_early_res, mem, mem + size - 1);
+}
+
 /*
  * Most early reservations come here.
  *
@@ -921,6 +964,8 @@ void __init reserve_early(u64 start, u64
 	if (start >= end)
 		return;
 
+	__check_and_double_early_res();
+
 	drop_overlaps_that_are_ok(start, end);
 	__reserve_early(start, end, name, 0);
 }
@@ -949,6 +994,10 @@ void __init early_res_to_bootmem(u64 sta
 	for (i = 0; i < max_early_res && early_res[i].end; i++)
 		count++;
 
+	/* need to skip first one ?*/
+	if (early_res != early_res_x)
+		idx = 1;
+
 	printk(KERN_INFO "(%d/%d early reservations) ==> bootmem [%010llx - %010llx]\n",
 			 count - idx, max_early_res, start, end);
 	for (i = idx; i < count; i++) {
@@ -966,6 +1015,11 @@ void __init early_res_to_bootmem(u64 sta
 		reserve_bootmem_generic(final_start, final_end - final_start,
 				BOOTMEM_DEFAULT);
 	}
+	/* clear them */
+	memset(&early_res[0], 0, sizeof(struct early_res) * max_early_res);
+	early_res = NULL;
+	max_early_res = 0;
+	early_res_count = 0;
 }
 
 /* Check for already reserved areas */

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 4/3] x86: make early_node_mem get mem > 4g if possible -v2
  2009-12-15  2:08       ` [PATCH 3/3] x86: dynamic increase early_res array size Yinghai Lu
@ 2009-12-16  1:11         ` Yinghai Lu
  0 siblings, 0 replies; 21+ messages in thread
From: Yinghai Lu @ 2009-12-16  1:11 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Christoph Lameter
  Cc: linux-kernel, FUJITA Tomonori


so we could put pgdata for the node high, and later sparse
vmmap will get the section nr that need.

with this patch will make <4g ram will not use sparse vmmap

before this patch, will get, before swiotlb try get bootmem
[    0.000000] nid=1 start=0 end=2080000 aligned=1
[    0.000000]   free [10 - 96]
[    0.000000]   free [b12 - 1000]
[    0.000000]   free [359f - 38a3]
[    0.000000]   free [38b5 - 3a00]
[    0.000000]   free [41e01 - 42000]
[    0.000000]   free [73dde - 73e00]
[    0.000000]   free [73fdd - 74000]
[    0.000000]   free [741dd - 74200]
[    0.000000]   free [743dd - 74400]
[    0.000000]   free [745dd - 74600]
[    0.000000]   free [747dd - 74800]
[    0.000000]   free [749dd - 74a00]
[    0.000000]   free [74bdd - 74c00]
[    0.000000]   free [74ddd - 74e00]
[    0.000000]   free [74fdd - 75000]
[    0.000000]   free [751dd - 75200]
[    0.000000]   free [753dd - 75400]
[    0.000000]   free [755dd - 75600]
[    0.000000]   free [757dd - 75800]
[    0.000000]   free [759dd - 75a00]
[    0.000000]   free [75bdd - 7bf5f]
[    0.000000]   free [7f730 - 7f750]
[    0.000000]   free [100000 - 2080000]
[    0.000000]   total free 1f87170
[   93.301474] Placing 64MB software IO TLB between ffff880075bdd000 - ffff880079bdd000
[   93.311814] software IO TLB at phys 0x75bdd000 - 0x79bdd000

with this patch will get: before swiotlb try get bootmem
[    0.000000] nid=1 start=0 end=2080000 aligned=1
[    0.000000]   free [a - 96]
[    0.000000]   free [702 - 1000]
[    0.000000]   free [359f - 3600]
[    0.000000]   free [37de - 3800]
[    0.000000]   free [39dd - 3a00]
[    0.000000]   free [3bdd - 3c00]
[    0.000000]   free [3ddd - 3e00]
[    0.000000]   free [3fdd - 4000]
[    0.000000]   free [41dd - 4200]
[    0.000000]   free [43dd - 4400]
[    0.000000]   free [45dd - 4600]
[    0.000000]   free [47dd - 4800]
[    0.000000]   free [49dd - 4a00]
[    0.000000]   free [4bdd - 4c00]
[    0.000000]   free [4ddd - 4e00]
[    0.000000]   free [4fdd - 5000]
[    0.000000]   free [51dd - 5200]
[    0.000000]   free [53dd - 5400]
[    0.000000]   free [55dd - 7bf5f]
[    0.000000]   free [7f730 - 7f750]
[    0.000000]   free [100428 - 100600]
[    0.000000]   free [13ea01 - 13ec00]
[    0.000000]   free [170800 - 2080000]
[    0.000000]   total free 1f87170

[   92.689485] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
[   92.699799] Placing 64MB software IO TLB between ffff8800055dd000 - ffff8800095dd000
[   92.710916] software IO TLB at phys 0x55dd000 - 0x95dd000

so will get enough space below 4G, aka pfn 0x100000

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/mm/numa_64.c |   19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

Index: linux-2.6/arch/x86/mm/numa_64.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/numa_64.c
+++ linux-2.6/arch/x86/mm/numa_64.c
@@ -163,14 +163,27 @@ static void * __init early_node_mem(int
 				    unsigned long end, unsigned long size,
 				    unsigned long align)
 {
-	unsigned long mem = find_e820_area(start, end, size, align);
+	unsigned long mem;
 
+	/*
+	 * put it on high as possible
+	 * something will go with NODE_DATA
+	 */
+	if (start < (MAX_DMA_PFN<<PAGE_SHIFT))
+		start = MAX_DMA_PFN<<PAGE_SHIFT;
+	if (start < (MAX_DMA32_PFN<<PAGE_SHIFT) &&
+	    end > (MAX_DMA32_PFN<<PAGE_SHIFT))
+		start = MAX_DMA32_PFN<<PAGE_SHIFT;
+	mem = find_e820_area(start, end, size, align);
 	if (mem != -1L)
 		return __va(mem);
 
 
-	start = __pa(MAX_DMA_ADDRESS);
-	end = max_low_pfn_mapped << PAGE_SHIFT;
+	end = max_pfn_mapped << PAGE_SHIFT;
+	if (end > (MAX_DMA32_PFN<<PAGE_SHIFT))
+		start = MAX_DMA32_PFN<<PAGE_SHIFT;
+	else
+		start = MAX_DMA_PFN<<PAGE_SHIFT;
 	mem = find_e820_area(start, end, size, align);
 	if (mem != -1L)
 		return __va(mem);

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [tip:x86/urgent] x86: Increase MAX_EARLY_RES; insufficient on 32-bit NUMA
  2009-12-11 23:35 ` [PATCH 7/7] x86: increase MAX_EARLY_RES Yinghai Lu
  2009-12-15  2:06   ` [PATCH 1/3] x86: call early_res_to_bootmem one time Yinghai Lu
@ 2009-12-17  1:01   ` tip-bot for Yinghai Lu
  1 sibling, 0 replies; 21+ messages in thread
From: tip-bot for Yinghai Lu @ 2009-12-17  1:01 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, yinghai, tglx

Commit-ID:  6a1e008a0915f502eb026fb995ea3e49d5b017f7
Gitweb:     http://git.kernel.org/tip/6a1e008a0915f502eb026fb995ea3e49d5b017f7
Author:     Yinghai Lu <yinghai@kernel.org>
AuthorDate: Tue, 15 Dec 2009 17:59:03 -0800
Committer:  H. Peter Anvin <hpa@zytor.com>
CommitDate: Wed, 16 Dec 2009 16:46:23 -0800

x86: Increase MAX_EARLY_RES; insufficient on 32-bit NUMA

Due to recent changes wakeup and mptable, we run out of early
reservations on 32-bit NUMA.  Thus, adjust the available number.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
LKML-Reference: <4B22D754.2020706@kernel.org>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/kernel/e820.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
index f50447d..05ed7ab 100644
--- a/arch/x86/kernel/e820.c
+++ b/arch/x86/kernel/e820.c
@@ -724,7 +724,7 @@ core_initcall(e820_mark_nvs_memory);
 /*
  * Early reserved memory areas.
  */
-#define MAX_EARLY_RES 20
+#define MAX_EARLY_RES 32
 
 struct early_res {
 	u64 start, end;

^ permalink raw reply related	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2009-12-17  1:02 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <4B22D4DA.2000104@kernel.org>
2009-12-11 23:35 ` [PATCH 2/7] x86/range: check range in update range Yinghai Lu
2009-12-11 23:35 ` [PATCH 3/7] x86/pci: use resource_size_t in update_res Yinghai Lu
2009-12-11 23:35 ` [PATCH 4/7] x86/pci: amd one chain system to use pci read out res Yinghai Lu
2009-12-11 23:35 ` [PATCH 5/7] x86/pci: use u64 instead of size_t in amd_bus.c Yinghai Lu
2009-12-11 23:55   ` H. Peter Anvin
2009-12-12  0:42     ` Yinghai Lu
2009-12-12  2:10   ` [PATCH 5/7] x86/pci: use u64 instead of size_t in amd_bus.c -v2 Yinghai Lu
2009-12-11 23:35 ` [PATCH 6/7] x86/pci: enable pci root res read out for 32bit too Yinghai Lu
2009-12-12  2:11   ` [PATCH 61/7] x86/pci: add cap_4g Yinghai Lu
2009-12-12  2:16     ` H. Peter Anvin
2009-12-12  2:20       ` Yinghai Lu
2009-12-12  2:25         ` H. Peter Anvin
2009-12-12  3:29           ` [PATCH 61/7] x86/pci: add cap_resource -v2 Yinghai Lu
2009-12-12  2:13   ` [PATCH 6/7] x86/pci: enable pci root res read out for 32bit too -v2 Yinghai Lu
2009-12-12  3:28     ` [PATCH 6/7] x86/pci: enable pci root res read out for 32bit too -v3 Yinghai Lu
2009-12-11 23:35 ` [PATCH 7/7] x86: increase MAX_EARLY_RES Yinghai Lu
2009-12-15  2:06   ` [PATCH 1/3] x86: call early_res_to_bootmem one time Yinghai Lu
2009-12-15  2:07     ` [PATCH 2/3] x86: introduce max_early_res and early_res_count Yinghai Lu
2009-12-15  2:08       ` [PATCH 3/3] x86: dynamic increase early_res array size Yinghai Lu
2009-12-16  1:11         ` [PATCH 4/3] x86: make early_node_mem get mem > 4g if possible -v2 Yinghai Lu
2009-12-17  1:01   ` [tip:x86/urgent] x86: Increase MAX_EARLY_RES; insufficient on 32-bit NUMA tip-bot for Yinghai Lu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.