Re: [PATCH] x86_64: fix overlap between pagetable with bss section

2008-01-29 Thread Ingo Molnar

* Yinghai Lu <[EMAIL PROTECTED]> wrote:

> > > + /* need to round it up to avoid overlap less one page */
> > > + table_start = round_up(table_start, PAGE_SIZE);
> > >   table_start >>= PAGE_SHIFT;
> > >   table_end = table_start;
> > 
> > thanks, applied.
> 
> can you use v2 instead? v2 have more comments.

yes, i have v2.

Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] x86_64: fix overlap between pagetable with bss section

2008-01-29 Thread Yinghai Lu
On Tuesday 29 January 2008 09:42:43 am Ingo Molnar wrote:
> 
> * Yinghai Lu <[EMAIL PROTECTED]> wrote:
> 
> > [PATCH] x86_64: fix overlap between pagetable with bss section
> > 
> > one early crash on one 8 node 256g machine
> 
> > +++ b/arch/x86/mm/init_64.c
> > @@ -358,6 +358,8 @@ static void __init find_early_table_space(unsigned long 
> > end)
> > if (table_start == -1UL)
> > panic("Cannot find space for the kernel page tables");
> >  
> > +   /* need to round it up to avoid overlap less one page */
> > +   table_start = round_up(table_start, PAGE_SIZE);
> > table_start >>= PAGE_SHIFT;
> > table_end = table_start;
> 
> thanks, applied.
> 
>   Ingo
> 

can you use v2 instead? v2 have more comments.

Thanks

Yinghai Lu
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] x86_64: fix overlap between pagetable with bss section

2008-01-29 Thread Ingo Molnar

* Yinghai Lu <[EMAIL PROTECTED]> wrote:

> [PATCH] x86_64: fix overlap between pagetable with bss section
> 
> one early crash on one 8 node 256g machine

> +++ b/arch/x86/mm/init_64.c
> @@ -358,6 +358,8 @@ static void __init find_early_table_space(unsigned long 
> end)
>   if (table_start == -1UL)
>   panic("Cannot find space for the kernel page tables");
>  
> + /* need to round it up to avoid overlap less one page */
> + table_start = round_up(table_start, PAGE_SIZE);
>   table_start >>= PAGE_SHIFT;
>   table_end = table_start;

thanks, applied.

Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] x86_64: fix overlap between pagetable with bss section

2008-01-29 Thread Ingo Molnar

* Yinghai Lu [EMAIL PROTECTED] wrote:

 [PATCH] x86_64: fix overlap between pagetable with bss section
 
 one early crash on one 8 node 256g machine

 +++ b/arch/x86/mm/init_64.c
 @@ -358,6 +358,8 @@ static void __init find_early_table_space(unsigned long 
 end)
   if (table_start == -1UL)
   panic(Cannot find space for the kernel page tables);
  
 + /* need to round it up to avoid overlap less one page */
 + table_start = round_up(table_start, PAGE_SIZE);
   table_start = PAGE_SHIFT;
   table_end = table_start;

thanks, applied.

Ingo
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] x86_64: fix overlap between pagetable with bss section

2008-01-29 Thread Yinghai Lu
On Tuesday 29 January 2008 09:42:43 am Ingo Molnar wrote:
 
 * Yinghai Lu [EMAIL PROTECTED] wrote:
 
  [PATCH] x86_64: fix overlap between pagetable with bss section
  
  one early crash on one 8 node 256g machine
 
  +++ b/arch/x86/mm/init_64.c
  @@ -358,6 +358,8 @@ static void __init find_early_table_space(unsigned long 
  end)
  if (table_start == -1UL)
  panic(Cannot find space for the kernel page tables);
   
  +   /* need to round it up to avoid overlap less one page */
  +   table_start = round_up(table_start, PAGE_SIZE);
  table_start = PAGE_SHIFT;
  table_end = table_start;
 
 thanks, applied.
 
   Ingo
 

can you use v2 instead? v2 have more comments.

Thanks

Yinghai Lu
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] x86_64: fix overlap between pagetable with bss section

2008-01-29 Thread Ingo Molnar

* Yinghai Lu [EMAIL PROTECTED] wrote:

   + /* need to round it up to avoid overlap less one page */
   + table_start = round_up(table_start, PAGE_SIZE);
 table_start = PAGE_SHIFT;
 table_end = table_start;
  
  thanks, applied.
 
 can you use v2 instead? v2 have more comments.

yes, i have v2.

Ingo
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] x86_64: fix overlap between pagetable with bss section v2

2008-01-28 Thread Yinghai Lu
[PATCH] x86_64: fix overlap between pagetable with bss section v2

one early crash on one 8 node 256g machine

Command line: console=uart8250,io,0x3f8,115200n8 
initrd=kernel.org/mydisk11_x86_64.gz rw root=/dev/ram0 debug initcall_debug 
apic=debug acpi.debug_level=0x000f pci=routeirq ip=dhcp load_ramdisk=1 
ramdisk_size=131072 BOOT_IMAGE=kernel.org/bzImage_2.6.25_k8.1
BIOS-provided physical RAM map:
 BIOS-e820:  - 0009bc00 (usable)
 BIOS-e820: 0009bc00 - 000a (reserved)
 BIOS-e820: 000e6000 - 0010 (reserved)
 BIOS-e820: 0010 - dffe (usable)
 BIOS-e820: dffe - dffee000 (ACPI data)
 BIOS-e820: dffee000 - d050 (ACPI NVS)
 BIOS-e820: d050 - e000 (reserved)
 BIOS-e820: fec0 - fec01000 (reserved)
 BIOS-e820: fee0 - fee01000 (reserved)
 BIOS-e820: ff70 - 0001 (reserved)
 BIOS-e820: 0001 - 00402000 (usable)
Early serial console at I/O port 0x3f8 (options '115200n8')
console [uart0] enabled
end_pfn_map = 67239936
Kernel panic - not syncing: Duplicated early reservation d4-e42000

Pid: 0, comm: swapper Not tainted 2.6.24-smp-g5a514e21-dirty #3

Call Trace:
 [] lapic_get_maxlvt+0x0/0x10
 [] clear_local_APIC+0x5/0xcf
 [] disable_local_APIC+0x5/0x17
 [] smp_send_stop+0x46/0x4c
 [] panic+0x94/0x13e
 [] sctp_eps_proc_init+0x12/0x34
 [] reserve_early+0x30/0x6c
 [] init_memory_mapping+0x2cd/0x2dc
 [] setup_arch+0x21f/0x44e
 [] start_kernel+0x6f/0x2c7
 [] _sinittext+0x1cc/0x1d3

it turns out there is overlap between pgtable and bss...

in System.map we have
80d40420 b rsi_table
80d40620 B krb5_seq_lock
80d40628 b i.20437
80d40630 b xprt_rdma_inline_write_padding
80d40638 b sunrpc_table_header
80d40640 b zero
80d40644 b min_memreg
80d40648 b rpcrdma_tk_lock_g
80d40650 B sctp_assocs_id_lock
80d40658 B proc_net_sctp
80d40660 B sctp_assocs_id
80d40680 B sysctl_sctp_mem
80d40690 B sysctl_sctp_rmem
80d406a0 B sysctl_sctp_wmem
80d406b0 b sctp_ctl_socket
80d406b8 b sctp_pf_inet6_specific
80d406c0 b sctp_pf_inet_specific
80d406c8 b sctp_af_v4_specific
80d406d0 b sctp_af_v6_specific
80d406d8 b sctp_rand.33270
80d406dc b sctp_memory_pressure
80d406e0 b sctp_sockets_allocated
80d406e4 b sctp_memory_allocated
80d406e8 b sctp_sysctl_header
80d406f0 b zero
80d406f4 A __bss_stop
80d406f4 A _end

need to round up table_start to PAGE_SIZE

also make the panic more informative.

Signed-off-by: Yinghai Lu <[EMAIL PROTECTED]>

Index: linux-2.6/arch/x86/kernel/e820_64.c
===
--- linux-2.6.orig/arch/x86/kernel/e820_64.c
+++ linux-2.6/arch/x86/kernel/e820_64.c
@@ -70,8 +70,8 @@ void __init reserve_early(unsigned long 
for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) {
r = _res[i];
if (end > r->start && start < r->end)
-   panic("Duplicated early reservation %lx-%lx\n",
- start, end);
+   panic("Overlap early reservation %lx-%lx to %lx-%lx\n",
+ start, end, r->start, r->end);
}
if (i >= MAX_EARLY_RES)
panic("Too many early reservations");
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
@@ -358,6 +358,13 @@ static void __init find_early_table_spac
if (table_start == -1UL)
panic("Cannot find space for the kernel page tables");
 
+   /*
+* when you have a lot of ram like 256g, early_table will not fit
+* into 0x8000 range, find_e820_area will find area after kerne bss
+* but the table_start is not page align, so need to round it up to
+* avoid overlap with bss
+*/
+   table_start = round_up(table_start, PAGE_SIZE);
table_start >>= PAGE_SHIFT;
table_end = table_start;
 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] x86_64: fix overlap between pagetable with bss section

2008-01-28 Thread Yinghai Lu
[PATCH] x86_64: fix overlap between pagetable with bss section

one early crash on one 8 node 256g machine

Command line: console=uart8250,io,0x3f8,115200n8 
initrd=kernel.org/mydisk11_x86_64.gz rw root=/dev/ram0 debug initcall_debug 
apic=debug acpi.debug_level=0x000f pci=routeirq ip=dhcp load_ramdisk=1 
ramdisk_size=131072 BOOT_IMAGE=kernel.org/bzImage_2.6.25_k8.1
BIOS-provided physical RAM map:
 BIOS-e820:  - 0009bc00 (usable)
 BIOS-e820: 0009bc00 - 000a (reserved)
 BIOS-e820: 000e6000 - 0010 (reserved)
 BIOS-e820: 0010 - dffe (usable)
 BIOS-e820: dffe - dffee000 (ACPI data)
 BIOS-e820: dffee000 - d050 (ACPI NVS)
 BIOS-e820: d050 - e000 (reserved)
 BIOS-e820: fec0 - fec01000 (reserved)
 BIOS-e820: fee0 - fee01000 (reserved)
 BIOS-e820: ff70 - 0001 (reserved)
 BIOS-e820: 0001 - 00402000 (usable)
Early serial console at I/O port 0x3f8 (options '115200n8')
console [uart0] enabled
end_pfn_map = 67239936
Kernel panic - not syncing: Duplicated early reservation d4-e42000

Pid: 0, comm: swapper Not tainted 2.6.24-smp-g5a514e21-dirty #3

Call Trace:
 [] lapic_get_maxlvt+0x0/0x10
 [] clear_local_APIC+0x5/0xcf
 [] disable_local_APIC+0x5/0x17
 [] smp_send_stop+0x46/0x4c
 [] panic+0x94/0x13e
 [] sctp_eps_proc_init+0x12/0x34
 [] reserve_early+0x30/0x6c
 [] init_memory_mapping+0x2cd/0x2dc
 [] setup_arch+0x21f/0x44e
 [] start_kernel+0x6f/0x2c7
 [] _sinittext+0x1cc/0x1d3

one later oops on other machine

Calling initcall 0x80bc33ac: sctp_init+0x0/0x711()
BUG: unable to handle kernel NULL pointer dereference at 005f
IP: [] proc_register+0xe7/0x10f
PGD 0
Oops:  [1] SMP
CPU 7
Modules linked in:
Pid: 1, comm: swapper Not tainted 2.6.24-smp-g5a514e21-dirty #1
RIP: 0010:[]  [] proc_register+0xe7/0x10f
RSP: :811074c55e60  EFLAGS: 00010246
RAX: 8d8d RBX: 811074d78d80 RCX: 811074c55e08
RDX:  RSI: 0141 RDI: 80cc2460
RBP:  R08:  R09: 811074d78d80
R10:  R11: 80b78750 R12: 811074c55e6c
R13:  R14: 811074c55ee0 R15: 0006eb27426e
FS:  () GS:811074cc7f00() knlGS:
CS:  0010 DS: 0018 ES: 0018 CR0: 8005003b
CR2: 005f CR3: 00201000 CR4: 06e0
DR0:  DR1:  DR2: 
DR3:  DR6: 0ff0 DR7: 0400
Process swapper (pid: 1, threadinfo 811074c54000, task 810874c54000)
Stack:  80a57340 0141 811074d78d80 
 ff97 802bfef0  
  80bc3b41 811074c55ee0 80bc349b
Call Trace:
 [] ? create_proc_entry+0x73/0x8a
 [] ? sctp_snmp_proc_init+0x1c/0x34
 [] ? sctp_init+0xef/0x711
 [] ? kernel_init+0x175/0x2e1
 [] ? child_rip+0xa/0x12
 [] ? kernel_init+0x0/0x2e1
 [] ? child_rip+0x0/0x12


Code: 1e 48 83 7b 38 00 75 08 48 c7 43 38 f0 e8 82 80 48 83 7b 30 00 75 08 48 
c7 43 30 d0 e9 82 80 48 c7 c7 60 24 cc 80 e8 bd 5a 54 00 <48> 8b 45 60 48 89 6b 
58 48 89 5d 60 48 89 43 50 fe 05 f5 25 a0
RIP  [] proc_register+0xe7/0x10f
 RSP 
CR2: 005f
---[ end trace c97bfb5810c69e0c ]---
Kernel panic - not syncing: Attempted to kill init!

it turns out there is overlap between pgtable and bss...

need to round up table_start to PAGE

also make the panic more informative.

Signed-off-by: Yinghai Lu <[EMAIL PROTECTED]>

diff --git a/arch/x86/kernel/e820_64.c b/arch/x86/kernel/e820_64.c
index f8b7beb..6f07bab 100644
--- a/arch/x86/kernel/e820_64.c
+++ b/arch/x86/kernel/e820_64.c
@@ -70,8 +70,8 @@ void __init reserve_early(unsigned long start, unsigned long 
end)
for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) {
r = _res[i];
if (end > r->start && start < r->end)
-   panic("Duplicated early reservation %lx-%lx\n",
- start, end);
+   panic("Overlap early reservation %lx-%lx to %lx-%lx\n",
+ start, end, r->start, r->end);
}
if (i >= MAX_EARLY_RES)
panic("Too many early reservations");
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index b09faf2..bf02f7e 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -358,6 +358,8 @@ static void __init find_early_table_space(unsigned long end)
if (table_start == -1UL)
panic("Cannot find space for the kernel page tables");
 
+   /* need to round it up to avoid overlap less one page */
+   table_start = round_up(

[PATCH] x86_64: fix overlap between pagetable with bss section

2008-01-28 Thread Yinghai Lu
[PATCH] x86_64: fix overlap between pagetable with bss section

one early crash on one 8 node 256g machine

Command line: console=uart8250,io,0x3f8,115200n8 
initrd=kernel.org/mydisk11_x86_64.gz rw root=/dev/ram0 debug initcall_debug 
apic=debug acpi.debug_level=0x000f pci=routeirq ip=dhcp load_ramdisk=1 
ramdisk_size=131072 BOOT_IMAGE=kernel.org/bzImage_2.6.25_k8.1
BIOS-provided physical RAM map:
 BIOS-e820:  - 0009bc00 (usable)
 BIOS-e820: 0009bc00 - 000a (reserved)
 BIOS-e820: 000e6000 - 0010 (reserved)
 BIOS-e820: 0010 - dffe (usable)
 BIOS-e820: dffe - dffee000 (ACPI data)
 BIOS-e820: dffee000 - d050 (ACPI NVS)
 BIOS-e820: d050 - e000 (reserved)
 BIOS-e820: fec0 - fec01000 (reserved)
 BIOS-e820: fee0 - fee01000 (reserved)
 BIOS-e820: ff70 - 0001 (reserved)
 BIOS-e820: 0001 - 00402000 (usable)
Early serial console at I/O port 0x3f8 (options '115200n8')
console [uart0] enabled
end_pfn_map = 67239936
Kernel panic - not syncing: Duplicated early reservation d4-e42000

Pid: 0, comm: swapper Not tainted 2.6.24-smp-g5a514e21-dirty #3

Call Trace:
 [80221545] lapic_get_maxlvt+0x0/0x10
 [80221657] clear_local_APIC+0x5/0xcf
 [80221726] disable_local_APIC+0x5/0x17
 [8021fe16] smp_send_stop+0x46/0x4c
 [80235293] panic+0x94/0x13e
 [80bc3b03] sctp_eps_proc_init+0x12/0x34
 [80b9f1c5] reserve_early+0x30/0x6c
 [80803925] init_memory_mapping+0x2cd/0x2dc
 [80b9dc01] setup_arch+0x21f/0x44e
 [80b978be] start_kernel+0x6f/0x2c7
 [80b971cc] _sinittext+0x1cc/0x1d3

one later oops on other machine

Calling initcall 0x80bc33ac: sctp_init+0x0/0x711()
BUG: unable to handle kernel NULL pointer dereference at 005f
IP: [802bfe55] proc_register+0xe7/0x10f
PGD 0
Oops:  [1] SMP
CPU 7
Modules linked in:
Pid: 1, comm: swapper Not tainted 2.6.24-smp-g5a514e21-dirty #1
RIP: 0010:[802bfe55]  [802bfe55] proc_register+0xe7/0x10f
RSP: :811074c55e60  EFLAGS: 00010246
RAX: 8d8d RBX: 811074d78d80 RCX: 811074c55e08
RDX:  RSI: 0141 RDI: 80cc2460
RBP:  R08:  R09: 811074d78d80
R10:  R11: 80b78750 R12: 811074c55e6c
R13:  R14: 811074c55ee0 R15: 0006eb27426e
FS:  () GS:811074cc7f00() knlGS:
CS:  0010 DS: 0018 ES: 0018 CR0: 8005003b
CR2: 005f CR3: 00201000 CR4: 06e0
DR0:  DR1:  DR2: 
DR3:  DR6: 0ff0 DR7: 0400
Process swapper (pid: 1, threadinfo 811074c54000, task 810874c54000)
Stack:  80a57340 0141 811074d78d80 
 ff97 802bfef0  
  80bc3b41 811074c55ee0 80bc349b
Call Trace:
 [802bfef0] ? create_proc_entry+0x73/0x8a
 [80bc3b41] ? sctp_snmp_proc_init+0x1c/0x34
 [80bc349b] ? sctp_init+0xef/0x711
 [80b976e3] ? kernel_init+0x175/0x2e1
 [8020ccf8] ? child_rip+0xa/0x12
 [80b9756e] ? kernel_init+0x0/0x2e1
 [8020ccee] ? child_rip+0x0/0x12


Code: 1e 48 83 7b 38 00 75 08 48 c7 43 38 f0 e8 82 80 48 83 7b 30 00 75 08 48 
c7 43 30 d0 e9 82 80 48 c7 c7 60 24 cc 80 e8 bd 5a 54 00 48 8b 45 60 48 89 6b 
58 48 89 5d 60 48 89 43 50 fe 05 f5 25 a0
RIP  [802bfe55] proc_register+0xe7/0x10f
 RSP 811074c55e60
CR2: 005f
---[ end trace c97bfb5810c69e0c ]---
Kernel panic - not syncing: Attempted to kill init!

it turns out there is overlap between pgtable and bss...

need to round up table_start to PAGE

also make the panic more informative.

Signed-off-by: Yinghai Lu [EMAIL PROTECTED]

diff --git a/arch/x86/kernel/e820_64.c b/arch/x86/kernel/e820_64.c
index f8b7beb..6f07bab 100644
--- a/arch/x86/kernel/e820_64.c
+++ b/arch/x86/kernel/e820_64.c
@@ -70,8 +70,8 @@ void __init reserve_early(unsigned long start, unsigned long 
end)
for (i = 0; i  MAX_EARLY_RES  early_res[i].end; i++) {
r = early_res[i];
if (end  r-start  start  r-end)
-   panic(Duplicated early reservation %lx-%lx\n,
- start, end);
+   panic(Overlap early reservation %lx-%lx to %lx-%lx\n,
+ start, end, r-start, r-end);
}
if (i = MAX_EARLY_RES)
panic(Too many early reservations);
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index b09faf2..bf02f7e 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -358,6 +358,8 @@ static

[PATCH] x86_64: fix overlap between pagetable with bss section v2

2008-01-28 Thread Yinghai Lu
[PATCH] x86_64: fix overlap between pagetable with bss section v2

one early crash on one 8 node 256g machine

Command line: console=uart8250,io,0x3f8,115200n8 
initrd=kernel.org/mydisk11_x86_64.gz rw root=/dev/ram0 debug initcall_debug 
apic=debug acpi.debug_level=0x000f pci=routeirq ip=dhcp load_ramdisk=1 
ramdisk_size=131072 BOOT_IMAGE=kernel.org/bzImage_2.6.25_k8.1
BIOS-provided physical RAM map:
 BIOS-e820:  - 0009bc00 (usable)
 BIOS-e820: 0009bc00 - 000a (reserved)
 BIOS-e820: 000e6000 - 0010 (reserved)
 BIOS-e820: 0010 - dffe (usable)
 BIOS-e820: dffe - dffee000 (ACPI data)
 BIOS-e820: dffee000 - d050 (ACPI NVS)
 BIOS-e820: d050 - e000 (reserved)
 BIOS-e820: fec0 - fec01000 (reserved)
 BIOS-e820: fee0 - fee01000 (reserved)
 BIOS-e820: ff70 - 0001 (reserved)
 BIOS-e820: 0001 - 00402000 (usable)
Early serial console at I/O port 0x3f8 (options '115200n8')
console [uart0] enabled
end_pfn_map = 67239936
Kernel panic - not syncing: Duplicated early reservation d4-e42000

Pid: 0, comm: swapper Not tainted 2.6.24-smp-g5a514e21-dirty #3

Call Trace:
 [80221545] lapic_get_maxlvt+0x0/0x10
 [80221657] clear_local_APIC+0x5/0xcf
 [80221726] disable_local_APIC+0x5/0x17
 [8021fe16] smp_send_stop+0x46/0x4c
 [80235293] panic+0x94/0x13e
 [80bc3b03] sctp_eps_proc_init+0x12/0x34
 [80b9f1c5] reserve_early+0x30/0x6c
 [80803925] init_memory_mapping+0x2cd/0x2dc
 [80b9dc01] setup_arch+0x21f/0x44e
 [80b978be] start_kernel+0x6f/0x2c7
 [80b971cc] _sinittext+0x1cc/0x1d3

it turns out there is overlap between pgtable and bss...

in System.map we have
80d40420 b rsi_table
80d40620 B krb5_seq_lock
80d40628 b i.20437
80d40630 b xprt_rdma_inline_write_padding
80d40638 b sunrpc_table_header
80d40640 b zero
80d40644 b min_memreg
80d40648 b rpcrdma_tk_lock_g
80d40650 B sctp_assocs_id_lock
80d40658 B proc_net_sctp
80d40660 B sctp_assocs_id
80d40680 B sysctl_sctp_mem
80d40690 B sysctl_sctp_rmem
80d406a0 B sysctl_sctp_wmem
80d406b0 b sctp_ctl_socket
80d406b8 b sctp_pf_inet6_specific
80d406c0 b sctp_pf_inet_specific
80d406c8 b sctp_af_v4_specific
80d406d0 b sctp_af_v6_specific
80d406d8 b sctp_rand.33270
80d406dc b sctp_memory_pressure
80d406e0 b sctp_sockets_allocated
80d406e4 b sctp_memory_allocated
80d406e8 b sctp_sysctl_header
80d406f0 b zero
80d406f4 A __bss_stop
80d406f4 A _end

need to round up table_start to PAGE_SIZE

also make the panic more informative.

Signed-off-by: Yinghai Lu [EMAIL PROTECTED]

Index: linux-2.6/arch/x86/kernel/e820_64.c
===
--- linux-2.6.orig/arch/x86/kernel/e820_64.c
+++ linux-2.6/arch/x86/kernel/e820_64.c
@@ -70,8 +70,8 @@ void __init reserve_early(unsigned long 
for (i = 0; i  MAX_EARLY_RES  early_res[i].end; i++) {
r = early_res[i];
if (end  r-start  start  r-end)
-   panic(Duplicated early reservation %lx-%lx\n,
- start, end);
+   panic(Overlap early reservation %lx-%lx to %lx-%lx\n,
+ start, end, r-start, r-end);
}
if (i = MAX_EARLY_RES)
panic(Too many early reservations);
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
@@ -358,6 +358,13 @@ static void __init find_early_table_spac
if (table_start == -1UL)
panic(Cannot find space for the kernel page tables);
 
+   /*
+* when you have a lot of ram like 256g, early_table will not fit
+* into 0x8000 range, find_e820_area will find area after kerne bss
+* but the table_start is not page align, so need to round it up to
+* avoid overlap with bss
+*/
+   table_start = round_up(table_start, PAGE_SIZE);
table_start = PAGE_SHIFT;
table_end = table_start;
 
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/