* [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
@ 2008-07-08 23:08 Suresh Siddha
2008-07-09 0:47 ` Yinghai Lu
2008-07-09 0:59 ` Yinghai Lu
0 siblings, 2 replies; 16+ messages in thread
From: Suresh Siddha @ 2008-07-08 23:08 UTC (permalink / raw)
To: mingo, hpa, tglx; +Cc: linux-kernel, yhlu.kernel
With out this 64bit tip/master doesn't boot using ACPI on my system.
---
max_pfn_mapped should include all e820 entries.
The direct mapping extends to max_pfn_mapped, so that we can directly access
apertures, ACPI and other tables without having to play with fixmaps.
With this, my system with 1GB memory boots fine with ACPI enabled.
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
---
Index: tree-x86/arch/x86/kernel/e820.c
===================================================================
--- tree-x86.orig/arch/x86/kernel/e820.c 2008-07-08 15:31:24.000000000 -0700
+++ tree-x86/arch/x86/kernel/e820.c 2008-07-08 15:55:09.000000000 -0700
@@ -1040,6 +1040,10 @@
if (last_pfn > max_arch_pfn)
last_pfn = max_arch_pfn;
+#ifdef CONFIG_X86_64
+ if (last_pfn > max_pfn_mapped)
+ max_pfn_mapped = last_pfn;
+#endif
if (last_pfn > end_user_pfn)
last_pfn = end_user_pfn;
@@ -1067,6 +1071,12 @@
if (*ei_startpfn >= *ei_endpfn)
return 0;
+#ifdef CONFIG_X86_64
+ /* Check if max_pfn_mapped should be updated */
+ if (ei->type != E820_RAM && *ei_endpfn > max_pfn_mapped)
+ max_pfn_mapped = *ei_endpfn;
+#endif
+
/* Skip if map is outside the node */
if (ei->type != E820_RAM || *ei_endpfn <= start_pfn ||
*ei_startpfn >= last_pfn)
Index: tree-x86/arch/x86/kernel/setup.c
===================================================================
--- tree-x86.orig/arch/x86/kernel/setup.c 2008-07-08 15:33:42.000000000 -0700
+++ tree-x86/arch/x86/kernel/setup.c 2008-07-08 15:33:49.000000000 -0700
@@ -722,8 +722,12 @@
high_memory = (void *)__va(max_pfn * PAGE_SIZE - 1) + 1;
#endif
+#ifdef CONFIG_X86_32
/* max_pfn_mapped is updated here */
max_pfn_mapped = init_memory_mapping(0, (max_low_pfn << PAGE_SHIFT));
+#else
+ max_pfn_mapped = init_memory_mapping(0, (max_pfn_mapped << PAGE_SHIFT));
+#endif
/*
* NOTE: On x86-32, only from this point on, fixmaps are ready for use.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-08 23:08 [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped Suresh Siddha
@ 2008-07-09 0:47 ` Yinghai Lu
2008-07-09 0:59 ` Yinghai Lu
1 sibling, 0 replies; 16+ messages in thread
From: Yinghai Lu @ 2008-07-09 0:47 UTC (permalink / raw)
To: Suresh Siddha; +Cc: mingo, hpa, tglx, linux-kernel
On Tue, Jul 8, 2008 at 4:08 PM, Suresh Siddha <suresh.b.siddha@intel.com> wrote:
> With out this 64bit tip/master doesn't boot using ACPI on my system.
> ---
>
> max_pfn_mapped should include all e820 entries.
> The direct mapping extends to max_pfn_mapped, so that we can directly access
> apertures, ACPI and other tables without having to play with fixmaps.
>
> With this, my system with 1GB memory boots fine with ACPI enabled.
>
> Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
> ---
please check
[PATCH] x86: introduce page_size_mask for 64bit
http://lkml.org/lkml/2008/7/8/49
[PATCH] x86: not overmap than end in init_memory_mapping - 64bit
http://lkml.org/lkml/2008/7/8/50
with this patch, on system that support gbpages
change
last_map_addr: 1080000000 end: 1078000000
to
last_map_addr: 1078000000 end: 1078000000
/sys/kernel/debug/kernel_page_tables
0xffff881040000000-0xffff881074400000 836M RW PSE GLB NX pmd
0xffff881074400000-0xffff8810744b0000 704K RW GLB NX pte
0xffff8810744b0000-0xffff8810744c0000 64K RW PCD GLB NX pte
0xffff8810744c0000-0xffff881074600000 1280K RW GLB NX pte
0xffff881074600000-0xffff881080000000 186M RW PSE
GLB NX pmd ---> wrong
0xffff881080000000-0xffff888000000000 446G pud
0xffff888000000000-0xffffc20000000000 58880G pgd
===>
0xffff881040000000-0xffff881074400000 836M RW PSE GLB NX pmd
0xffff881074400000-0xffff8810744a0000 640K RW GLB NX pte
0xffff8810744a0000-0xffff8810744b0000 64K RW PCD GLB NX pte
0xffff8810744b0000-0xffff881074600000 1344K RW GLB NX pte
0xffff881074600000-0xffff881078000000 58M RW PSE GLB NX pmd
0xffff881078000000-0xffff881080000000 128M pmd
0xffff881080000000-0xffff888000000000 446G pud
0xffff888000000000-0xffffc20000000000 58880G pgd
YH
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-08 23:08 [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped Suresh Siddha
2008-07-09 0:47 ` Yinghai Lu
@ 2008-07-09 0:59 ` Yinghai Lu
2008-07-09 1:56 ` Yinghai Lu
2008-07-09 17:00 ` Suresh Siddha
1 sibling, 2 replies; 16+ messages in thread
From: Yinghai Lu @ 2008-07-09 0:59 UTC (permalink / raw)
To: Suresh Siddha; +Cc: mingo, hpa, tglx, linux-kernel
On Tue, Jul 8, 2008 at 4:08 PM, Suresh Siddha <suresh.b.siddha@intel.com> wrote:
> With out this 64bit tip/master doesn't boot using ACPI on my system.
> ---
>
> max_pfn_mapped should include all e820 entries.
> The direct mapping extends to max_pfn_mapped, so that we can directly access
> apertures, ACPI and other tables without having to play with fixmaps.
>
> With this, my system with 1GB memory boots fine with ACPI enabled.
so without this patch, your system doesn't boot?
YH
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-09 0:59 ` Yinghai Lu
@ 2008-07-09 1:56 ` Yinghai Lu
2008-07-09 17:56 ` Suresh Siddha
2008-07-09 17:00 ` Suresh Siddha
1 sibling, 1 reply; 16+ messages in thread
From: Yinghai Lu @ 2008-07-09 1:56 UTC (permalink / raw)
To: Suresh Siddha; +Cc: mingo, hpa, tglx, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 855 bytes --]
On Tue, Jul 8, 2008 at 5:59 PM, Yinghai Lu <yhlu.kernel@gmail.com> wrote:
> On Tue, Jul 8, 2008 at 4:08 PM, Suresh Siddha <suresh.b.siddha@intel.com> wrote:
>> With out this 64bit tip/master doesn't boot using ACPI on my system.
>> ---
>>
>> max_pfn_mapped should include all e820 entries.
>> The direct mapping extends to max_pfn_mapped, so that we can directly access
>> apertures, ACPI and other tables without having to play with fixmaps.
>>
>> With this, my system with 1GB memory boots fine with ACPI enabled.
>
> so without this patch, your system doesn't boot?
how about attached patch?
[PATCH] x86: make max_pfn cover acpi table below 4g
when system have 4g less ram installed, and acpi table sit
near end of ram. make max_pfn cover them too.
so 64bit kernel don't need to mess up fixmap
Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
YH
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: e820_end.patch --]
[-- Type: text/x-patch; name=e820_end.patch, Size: 3356 bytes --]
[PATCH] x86: make max_pfn cover acpi table below 4g
when system have 4g less ram installed, and acpi table sit
near end of ram. make max_pfn cover them too.
so 64bit kernel don't need to mess up fixmap.
Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
---
arch/x86/kernel/e820.c | 18 ++++++++++++------
arch/x86/kernel/setup.c | 13 +++----------
include/asm-x86/e820.h | 2 +-
3 files changed, 16 insertions(+), 17 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
@@ -1056,12 +1056,20 @@ unsigned long __initdata end_user_pfn =
/*
* Find the highest page frame number we have available
*/
-unsigned long __init e820_end_of_ram(void)
+unsigned long __init e820_end(void)
{
- unsigned long last_pfn;
+ int i;
+ unsigned long last_pfn = 0;
unsigned long max_arch_pfn = MAX_ARCH_PFN;
- last_pfn = find_max_pfn_with_active_regions();
+ for (i = 0; i < e820.nr_map; i++) {
+ struct e820entry *ei = &e820.map[i];
+ unsigned long end_pfn;
+
+ end_pfn = (ei->addr + ei->size) >> PAGE_SHIFT;
+ if (end_pfn > last_pfn)
+ last_pfn = end_pfn;
+ }
if (last_pfn > max_arch_pfn)
last_pfn = max_arch_pfn;
@@ -1192,9 +1200,7 @@ static int __init parse_memmap_opt(char
* the real mem size before original memory map is
* reset.
*/
- e820_register_active_regions(0, 0, -1UL);
- saved_max_pfn = e820_end_of_ram();
- remove_all_active_ranges();
+ saved_max_pfn = e820_end();
#endif
e820.nr_map = 0;
userdef = 1;
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
@@ -714,22 +714,18 @@ void __init setup_arch(char **cmdline_p)
early_gart_iommu_check();
#endif
- e820_register_active_regions(0, 0, -1UL);
/*
* partially used pages are not usable - thus
* we are rounding upwards:
*/
- max_pfn = e820_end_of_ram();
+ max_pfn = e820_end();
/* preallocate 4k for mptable mpc */
early_reserve_e820_mpc_new();
/* update e820 for memory not covered by WB MTRRs */
mtrr_bp_init();
- if (mtrr_trim_uncached_memory(max_pfn)) {
- remove_all_active_ranges();
- e820_register_active_regions(0, 0, -1UL);
- max_pfn = e820_end_of_ram();
- }
+ if (mtrr_trim_uncached_memory(max_pfn))
+ max_pfn = e820_end();
#ifdef CONFIG_X86_32
/* max_low_pfn get updated here */
@@ -772,9 +768,6 @@ void __init setup_arch(char **cmdline_p)
*/
acpi_boot_table_init();
- /* Remove active ranges so rediscovery with NUMA-awareness happens */
- remove_all_active_ranges();
-
#ifdef CONFIG_ACPI_NUMA
/*
* Parse SRAT to discover nodes.
Index: linux-2.6/include/asm-x86/e820.h
===================================================================
--- linux-2.6.orig/include/asm-x86/e820.h
+++ linux-2.6/include/asm-x86/e820.h
@@ -99,7 +99,7 @@ extern void free_early(u64 start, u64 en
extern void early_res_to_bootmem(u64 start, u64 end);
extern u64 early_reserve_e820(u64 startt, u64 sizet, u64 align);
-extern unsigned long e820_end_of_ram(void);
+extern unsigned long e820_end(void);
extern int e820_find_active_region(const struct e820entry *ei,
unsigned long start_pfn,
unsigned long last_pfn,
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-09 0:59 ` Yinghai Lu
2008-07-09 1:56 ` Yinghai Lu
@ 2008-07-09 17:00 ` Suresh Siddha
1 sibling, 0 replies; 16+ messages in thread
From: Suresh Siddha @ 2008-07-09 17:00 UTC (permalink / raw)
To: Yinghai Lu
Cc: Siddha, Suresh B, mingo@elte.hu, hpa@zytor.com,
tglx@linutronix.de, linux-kernel@vger.kernel.org
On Tue, Jul 08, 2008 at 05:59:39PM -0700, Yinghai Lu wrote:
> On Tue, Jul 8, 2008 at 4:08 PM, Suresh Siddha <suresh.b.siddha@intel.com> wrote:
> > With out this 64bit tip/master doesn't boot using ACPI on my system.
> > ---
> >
> > max_pfn_mapped should include all e820 entries.
> > The direct mapping extends to max_pfn_mapped, so that we can directly access
> > apertures, ACPI and other tables without having to play with fixmaps.
> >
> > With this, my system with 1GB memory boots fine with ACPI enabled.
>
> so without this patch, your system doesn't boot?
It doesn't enable ACPI and hence doesn't bringup SMP etc etc..
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-09 1:56 ` Yinghai Lu
@ 2008-07-09 17:56 ` Suresh Siddha
2008-07-09 18:05 ` Yinghai Lu
0 siblings, 1 reply; 16+ messages in thread
From: Suresh Siddha @ 2008-07-09 17:56 UTC (permalink / raw)
To: Yinghai Lu
Cc: Siddha, Suresh B, mingo@elte.hu, hpa@zytor.com,
tglx@linutronix.de, linux-kernel@vger.kernel.org
On Tue, Jul 08, 2008 at 06:56:38PM -0700, Yinghai Lu wrote:
> On Tue, Jul 8, 2008 at 5:59 PM, Yinghai Lu <yhlu.kernel@gmail.com> wrote:
> > On Tue, Jul 8, 2008 at 4:08 PM, Suresh Siddha <suresh.b.siddha@intel.com> wrote:
> >> With out this 64bit tip/master doesn't boot using ACPI on my system.
> >> ---
> >>
> >> max_pfn_mapped should include all e820 entries.
> >> The direct mapping extends to max_pfn_mapped, so that we can directly access
> >> apertures, ACPI and other tables without having to play with fixmaps.
> >>
> >> With this, my system with 1GB memory boots fine with ACPI enabled.
> >
> > so without this patch, your system doesn't boot?
>
> how about attached patch?
>
> [PATCH] x86: make max_pfn cover acpi table below 4g
>
> when system have 4g less ram installed, and acpi table sit
> near end of ram. make max_pfn cover them too.
> so 64bit kernel don't need to mess up fixmap
Now the latest 64bit x86 tip/master (latest commit d1f7cb8) doesn't boot
on any of my test systems :( It gets a very early exception..
I can't even revert your max_pfn patch, to see if this early exception is
caused by this patch.. There seems to be more changes on top of it
already overnight...
BTW, please explain the need for your patch which has more changes, instead
of my simple patch which was test booted on 3 different systems with both
32bit and 64bit kernels...
thanks,
suresh
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-09 17:56 ` Suresh Siddha
@ 2008-07-09 18:05 ` Yinghai Lu
2008-07-09 18:11 ` Jeremy Fitzhardinge
2008-07-09 18:48 ` Suresh Siddha
0 siblings, 2 replies; 16+ messages in thread
From: Yinghai Lu @ 2008-07-09 18:05 UTC (permalink / raw)
To: Suresh Siddha, Jeremy Fitzhardinge
Cc: mingo@elte.hu, hpa@zytor.com, tglx@linutronix.de,
linux-kernel@vger.kernel.org
[-- Attachment #1: Type: text/plain, Size: 1717 bytes --]
On Wed, Jul 9, 2008 at 10:56 AM, Suresh Siddha
<suresh.b.siddha@intel.com> wrote:
> On Tue, Jul 08, 2008 at 06:56:38PM -0700, Yinghai Lu wrote:
>> On Tue, Jul 8, 2008 at 5:59 PM, Yinghai Lu <yhlu.kernel@gmail.com> wrote:
>> > On Tue, Jul 8, 2008 at 4:08 PM, Suresh Siddha <suresh.b.siddha@intel.com> wrote:
>> >> With out this 64bit tip/master doesn't boot using ACPI on my system.
>> >> ---
>> >>
>> >> max_pfn_mapped should include all e820 entries.
>> >> The direct mapping extends to max_pfn_mapped, so that we can directly access
>> >> apertures, ACPI and other tables without having to play with fixmaps.
>> >>
>> >> With this, my system with 1GB memory boots fine with ACPI enabled.
>> >
>> > so without this patch, your system doesn't boot?
>>
>> how about attached patch?
>>
>> [PATCH] x86: make max_pfn cover acpi table below 4g
>>
>> when system have 4g less ram installed, and acpi table sit
>> near end of ram. make max_pfn cover them too.
>> so 64bit kernel don't need to mess up fixmap
>
> Now the latest 64bit x86 tip/master (latest commit d1f7cb8) doesn't boot
> on any of my test systems :( It gets a very early exception..
fix one panic on Ingo's machine
>
> I can't even revert your max_pfn patch, to see if this early exception is
> caused by this patch.. There seems to be more changes on top of it
> already overnight...
>
> BTW, please explain the need for your patch which has more changes, instead
> of my simple patch which was test booted on 3 different systems with both
> 32bit and 64bit kernels...
try to reduce #ifdef CONFIG_X86_64/32, and make 32/64 at the same page.
could be some regression from early_io_remap unifying from jeremy
please check attached revert patch.
YH
YH
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: revert_unify_early_ioremap.patch --]
[-- Type: text/x-patch; name=revert_unify_early_ioremap.patch, Size: 6649 bytes --]
revert unifying early_io_remap
also remove the cover so make e820_end to return max ram type for 64bit.
diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
index 66fd5bd..9836a07 100644
--- a/arch/x86/kernel/e820.c
+++ b/arch/x86/kernel/e820.c
@@ -1066,10 +1066,8 @@ unsigned long __init e820_end(void)
struct e820entry *ei = &e820.map[i];
unsigned long end_pfn;
-#ifdef CONFIG_X86_32
if (ei->type != E820_RAM)
continue;
-#endif
end_pfn = (ei->addr + ei->size) >> PAGE_SHIFT;
if (end_pfn > last_pfn)
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
index 2240f82..db3280a 100644
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -362,6 +362,12 @@ NEXT_PAGE(level3_kernel_pgt)
.quad level2_fixmap_pgt - __START_KERNEL_map + _PAGE_TABLE
NEXT_PAGE(level2_fixmap_pgt)
+ .fill 506,8,0
+ .quad level1_fixmap_pgt - __START_KERNEL_map + _PAGE_TABLE
+ /* 8MB reserved for vsyscalls + a 2MB hole = 4 + 1 entries */
+ .fill 5,8,0
+
+NEXT_PAGE(level1_fixmap_pgt)
.fill 512,8,0
NEXT_PAGE(level2_ident_pgt)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index d418794..149ff9a 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -598,12 +598,11 @@ void __init setup_arch(char **cmdline_p)
memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data));
pre_setup_arch_hook();
early_cpu_init();
+ early_ioremap_init();
#else
printk(KERN_INFO "Command line: %s\n", boot_command_line);
#endif
- early_ioremap_init();
-
ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev);
screen_info = boot_params.screen_info;
edid_info = boot_params.edid_info;
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 246a2b2..70187fa 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -339,6 +339,58 @@ phys_pte_update(pmd_t *pmd, unsigned long address, unsigned long end)
phys_pte_init(pte, address, end);
}
+/* Must run before zap_low_mappings */
+__meminit void *early_ioremap(unsigned long addr, unsigned long size)
+{
+ pmd_t *pmd, *last_pmd;
+ unsigned long vaddr;
+ int i, pmds;
+
+ pmds = ((addr & ~PMD_MASK) + size + ~PMD_MASK) / PMD_SIZE;
+ vaddr = __START_KERNEL_map;
+ pmd = level2_kernel_pgt;
+ last_pmd = level2_kernel_pgt + PTRS_PER_PMD - 1;
+
+ for (; pmd <= last_pmd; pmd++, vaddr += PMD_SIZE) {
+ for (i = 0; i < pmds; i++) {
+ if (pmd_present(pmd[i]))
+ goto continue_outer_loop;
+ }
+ vaddr += addr & ~PMD_MASK;
+ addr &= PMD_MASK;
+
+ for (i = 0; i < pmds; i++, addr += PMD_SIZE)
+ set_pmd(pmd+i, __pmd(addr | __PAGE_KERNEL_LARGE_EXEC));
+ __flush_tlb_all();
+
+ return (void *)vaddr;
+continue_outer_loop:
+ ;
+ }
+ printk(KERN_ERR "early_ioremap(0x%lx, %lu) failed\n", addr, size);
+
+ return NULL;
+}
+
+/*
+ * To avoid virtual aliases later:
+ */
+__meminit void early_iounmap(void *addr, unsigned long size)
+{
+ unsigned long vaddr;
+ pmd_t *pmd;
+ int i, pmds;
+
+ vaddr = (unsigned long)addr;
+ pmds = ((vaddr & ~PMD_MASK) + size + ~PMD_MASK) / PMD_SIZE;
+ pmd = level2_kernel_pgt + pmd_index(vaddr);
+
+ for (i = 0; i < pmds; i++)
+ pmd_clear(pmd + i);
+
+ __flush_tlb_all();
+}
+
static unsigned long __meminit
phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
unsigned long page_size_mask)
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
index 6a05a33..47719ec 100644
--- a/arch/x86/mm/ioremap.c
+++ b/arch/x86/mm/ioremap.c
@@ -409,6 +409,8 @@ void unxlate_dev_mem_ptr(unsigned long phys, void *addr)
return;
}
+#ifdef CONFIG_X86_32
+
int __initdata early_ioremap_debug;
static int __init early_ioremap_debug_setup(char *str)
@@ -509,7 +511,6 @@ static void __init __early_set_fixmap(enum fixed_addresses idx,
return;
}
pte = early_ioremap_pte(addr);
-
if (pgprot_val(flags))
set_pte(pte, pfn_pte(phys >> PAGE_SHIFT, flags));
else
@@ -649,3 +650,5 @@ void __this_fixmap_does_not_exist(void)
{
WARN_ON(1);
}
+
+#endif /* CONFIG_X86_32 */
diff --git a/include/asm-x86/fixmap_64.h b/include/asm-x86/fixmap_64.h
index 1a0b61e..7594346 100644
--- a/include/asm-x86/fixmap_64.h
+++ b/include/asm-x86/fixmap_64.h
@@ -52,19 +52,6 @@ enum fixed_addresses {
#ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT
FIX_OHCI1394_BASE,
#endif
- __end_of_permanent_fixed_addresses,
- /*
- * 256 temporary boot-time mappings, used by early_ioremap(),
- * before ioremap() is functional.
- *
- * We round it up to the next 512 pages boundary so that we
- * can have a single pgd entry and a single pte table:
- */
-#define NR_FIX_BTMAPS 64
-#define FIX_BTMAPS_NESTING 4
- FIX_BTMAP_END = __end_of_permanent_fixed_addresses + 512 -
- (__end_of_permanent_fixed_addresses & 511),
- FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS*FIX_BTMAPS_NESTING - 1,
__end_of_fixed_addresses
};
diff --git a/include/asm-x86/io.h b/include/asm-x86/io.h
index bf5d629..00e5f1e 100644
--- a/include/asm-x86/io.h
+++ b/include/asm-x86/io.h
@@ -86,17 +86,4 @@ extern int ioremap_change_attr(unsigned long vaddr, unsigned long size,
unsigned long prot_val);
extern void __iomem *ioremap_wc(unsigned long offset, unsigned long size);
-/*
- * early_ioremap() and early_iounmap() are for temporary early boot-time
- * mappings, before the real ioremap() is functional.
- * A boot-time mapping is currently limited to at most 16 pages.
- */
-extern void early_ioremap_init(void);
-extern void early_ioremap_clear(void);
-extern void early_ioremap_reset(void);
-extern void *early_ioremap(unsigned long offset, unsigned long size);
-extern void early_iounmap(void *addr, unsigned long size);
-extern void __iomem *fix_ioremap(unsigned idx, unsigned long phys);
-
-
#endif /* _ASM_X86_IO_H */
diff --git a/include/asm-x86/io_32.h b/include/asm-x86/io_32.h
index 4df44ed..d71be8d 100644
--- a/include/asm-x86/io_32.h
+++ b/include/asm-x86/io_32.h
@@ -122,6 +122,18 @@ static inline void __iomem *ioremap(resource_size_t offset, unsigned long size)
extern void iounmap(volatile void __iomem *addr);
/*
+ * early_ioremap() and early_iounmap() are for temporary early boot-time
+ * mappings, before the real ioremap() is functional.
+ * A boot-time mapping is currently limited to at most 16 pages.
+ */
+extern void early_ioremap_init(void);
+extern void early_ioremap_clear(void);
+extern void early_ioremap_reset(void);
+extern void *early_ioremap(unsigned long offset, unsigned long size);
+extern void early_iounmap(void *addr, unsigned long size);
+extern void __iomem *fix_ioremap(unsigned idx, unsigned long phys);
+
+/*
* ISA I/O bus memory addresses are 1:1 with the physical address.
*/
#define isa_virt_to_bus virt_to_phys
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-09 18:05 ` Yinghai Lu
@ 2008-07-09 18:11 ` Jeremy Fitzhardinge
2008-07-09 18:44 ` Suresh Siddha
2008-07-09 18:48 ` Suresh Siddha
1 sibling, 1 reply; 16+ messages in thread
From: Jeremy Fitzhardinge @ 2008-07-09 18:11 UTC (permalink / raw)
To: Yinghai Lu
Cc: Suresh Siddha, mingo@elte.hu, hpa@zytor.com, tglx@linutronix.de,
linux-kernel@vger.kernel.org
Yinghai Lu wrote:
> try to reduce #ifdef CONFIG_X86_64/32, and make 32/64 at the same page.
>
> could be some regression from early_io_remap unifying from jeremy
>
> please check attached revert patch.
Could my patch "x86_64: there's no need to preallocate
level1_fixmap_pgt" be a problem in itself? It seems sound to me, but
none of my other code has any functional dependency on it; it's really
just cosmetic.
The unified early_ioremap patch has been kicking around in tip.git for a
week or more now, and doesn't seem to have caused any problems.
J
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-09 18:11 ` Jeremy Fitzhardinge
@ 2008-07-09 18:44 ` Suresh Siddha
2008-07-09 18:47 ` Yinghai Lu
2008-07-09 19:03 ` Jeremy Fitzhardinge
0 siblings, 2 replies; 16+ messages in thread
From: Suresh Siddha @ 2008-07-09 18:44 UTC (permalink / raw)
To: Jeremy Fitzhardinge
Cc: Yinghai Lu, Siddha, Suresh B, mingo@elte.hu, hpa@zytor.com,
tglx@linutronix.de, linux-kernel@vger.kernel.org
On Wed, Jul 09, 2008 at 11:11:36AM -0700, Jeremy Fitzhardinge wrote:
> Yinghai Lu wrote:
> > try to reduce #ifdef CONFIG_X86_64/32, and make 32/64 at the same page.
> >
> > could be some regression from early_io_remap unifying from jeremy
> >
> > please check attached revert patch.
>
> Could my patch "x86_64: there's no need to preallocate
> level1_fixmap_pgt" be a problem in itself? It seems sound to me, but
Yep. Reverting it made my system with 2GB memory boot fine again.
> none of my other code has any functional dependency on it; it's really
> just cosmetic.
have you test booted it before making this cosmetic change? :)
thanks,
suresh
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-09 18:44 ` Suresh Siddha
@ 2008-07-09 18:47 ` Yinghai Lu
2008-07-09 18:50 ` Suresh Siddha
2008-07-09 19:03 ` Jeremy Fitzhardinge
1 sibling, 1 reply; 16+ messages in thread
From: Yinghai Lu @ 2008-07-09 18:47 UTC (permalink / raw)
To: Suresh Siddha
Cc: Jeremy Fitzhardinge, mingo@elte.hu, hpa@zytor.com,
tglx@linutronix.de, linux-kernel@vger.kernel.org
On Wed, Jul 9, 2008 at 11:44 AM, Suresh Siddha
<suresh.b.siddha@intel.com> wrote:
> On Wed, Jul 09, 2008 at 11:11:36AM -0700, Jeremy Fitzhardinge wrote:
>> Yinghai Lu wrote:
>> > try to reduce #ifdef CONFIG_X86_64/32, and make 32/64 at the same page.
>> >
>> > could be some regression from early_io_remap unifying from jeremy
>> >
>> > please check attached revert patch.
>>
>> Could my patch "x86_64: there's no need to preallocate
>> level1_fixmap_pgt" be a problem in itself? It seems sound to me, but
>
> Yep. Reverting it made my system with 2GB memory boot fine again.
only revert that one, or using the big revert patch i sent out.
>
>> none of my other code has any functional dependency on it; it's really
>> just cosmetic.
>
> have you test booted it before making this cosmetic change? :)
he should test system with 4g more RAM
YH
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-09 18:05 ` Yinghai Lu
2008-07-09 18:11 ` Jeremy Fitzhardinge
@ 2008-07-09 18:48 ` Suresh Siddha
2008-07-09 18:59 ` Yinghai Lu
1 sibling, 1 reply; 16+ messages in thread
From: Suresh Siddha @ 2008-07-09 18:48 UTC (permalink / raw)
To: Yinghai Lu
Cc: Siddha, Suresh B, Jeremy Fitzhardinge, mingo@elte.hu,
hpa@zytor.com, tglx@linutronix.de, linux-kernel@vger.kernel.org
On Wed, Jul 09, 2008 at 11:05:46AM -0700, Yinghai Lu wrote:
> > BTW, please explain the need for your patch which has more changes, instead
> > of my simple patch which was test booted on 3 different systems with both
> > 32bit and 64bit kernels...
>
> try to reduce #ifdef CONFIG_X86_64/32, and make 32/64 at the same page.
But it seem to have too many changes included in one patch.
like calls to e820_register_active_regions(), remove_all_active_ranges()
disappeared all together in this patch.. ??
thanks,
suresh
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-09 18:47 ` Yinghai Lu
@ 2008-07-09 18:50 ` Suresh Siddha
2008-07-09 18:51 ` Yinghai Lu
0 siblings, 1 reply; 16+ messages in thread
From: Suresh Siddha @ 2008-07-09 18:50 UTC (permalink / raw)
To: Yinghai Lu
Cc: Siddha, Suresh B, Jeremy Fitzhardinge, mingo@elte.hu,
hpa@zytor.com, tglx@linutronix.de, linux-kernel@vger.kernel.org
On Wed, Jul 09, 2008 at 11:47:38AM -0700, Yinghai Lu wrote:
> On Wed, Jul 9, 2008 at 11:44 AM, Suresh Siddha
> <suresh.b.siddha@intel.com> wrote:
> > On Wed, Jul 09, 2008 at 11:11:36AM -0700, Jeremy Fitzhardinge wrote:
> >> Yinghai Lu wrote:
> >> > try to reduce #ifdef CONFIG_X86_64/32, and make 32/64 at the same page.
> >> >
> >> > could be some regression from early_io_remap unifying from jeremy
> >> >
> >> > please check attached revert patch.
> >>
> >> Could my patch "x86_64: there's no need to preallocate
> >> level1_fixmap_pgt" be a problem in itself? It seems sound to me, but
> >
> > Yep. Reverting it made my system with 2GB memory boot fine again.
>
> only revert that one, or using the big revert patch i sent out.
I reverted just the "x86_64: there's no need to preallocate level1_fixmap_pgt"
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-09 18:50 ` Suresh Siddha
@ 2008-07-09 18:51 ` Yinghai Lu
0 siblings, 0 replies; 16+ messages in thread
From: Yinghai Lu @ 2008-07-09 18:51 UTC (permalink / raw)
To: Suresh Siddha
Cc: Jeremy Fitzhardinge, mingo@elte.hu, hpa@zytor.com,
tglx@linutronix.de, linux-kernel@vger.kernel.org
On Wed, Jul 9, 2008 at 11:50 AM, Suresh Siddha
<suresh.b.siddha@intel.com> wrote:
> On Wed, Jul 09, 2008 at 11:47:38AM -0700, Yinghai Lu wrote:
>> On Wed, Jul 9, 2008 at 11:44 AM, Suresh Siddha
>> <suresh.b.siddha@intel.com> wrote:
>> > On Wed, Jul 09, 2008 at 11:11:36AM -0700, Jeremy Fitzhardinge wrote:
>> >> Yinghai Lu wrote:
>> >> > try to reduce #ifdef CONFIG_X86_64/32, and make 32/64 at the same page.
>> >> >
>> >> > could be some regression from early_io_remap unifying from jeremy
>> >> >
>> >> > please check attached revert patch.
>> >>
>> >> Could my patch "x86_64: there's no need to preallocate
>> >> level1_fixmap_pgt" be a problem in itself? It seems sound to me, but
>> >
>> > Yep. Reverting it made my system with 2GB memory boot fine again.
>>
>> only revert that one, or using the big revert patch i sent out.
>
> I reverted just the "x86_64: there's no need to preallocate level1_fixmap_pgt"
can you try to remove
#ifdef CONFIG_X86_32
that will make e820_end return end_of_ram again...
YH
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-09 18:48 ` Suresh Siddha
@ 2008-07-09 18:59 ` Yinghai Lu
0 siblings, 0 replies; 16+ messages in thread
From: Yinghai Lu @ 2008-07-09 18:59 UTC (permalink / raw)
To: Suresh Siddha
Cc: Jeremy Fitzhardinge, mingo@elte.hu, hpa@zytor.com,
tglx@linutronix.de, linux-kernel@vger.kernel.org
On Wed, Jul 9, 2008 at 11:48 AM, Suresh Siddha
<suresh.b.siddha@intel.com> wrote:
> On Wed, Jul 09, 2008 at 11:05:46AM -0700, Yinghai Lu wrote:
>> > BTW, please explain the need for your patch which has more changes, instead
>> > of my simple patch which was test booted on 3 different systems with both
>> > 32bit and 64bit kernels...
>>
>> try to reduce #ifdef CONFIG_X86_64/32, and make 32/64 at the same page.
>
> But it seem to have too many changes included in one patch.
>
> like calls to e820_register_active_regions(), remove_all_active_ranges()
> disappeared all together in this patch.. ??
old e820_end_of_ram() need to active_ranges aka early_node_map is initialized...
so if we make e820_end to get end of any type, we don't need to call
e820_register_active_regions anymore. and just letnuma code init that
later. to avoid extra operation.
should put more words in commit desc.
YH
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-09 18:44 ` Suresh Siddha
2008-07-09 18:47 ` Yinghai Lu
@ 2008-07-09 19:03 ` Jeremy Fitzhardinge
2008-07-09 20:34 ` Ingo Molnar
1 sibling, 1 reply; 16+ messages in thread
From: Jeremy Fitzhardinge @ 2008-07-09 19:03 UTC (permalink / raw)
To: Suresh Siddha
Cc: Yinghai Lu, mingo@elte.hu, hpa@zytor.com, tglx@linutronix.de,
linux-kernel@vger.kernel.org
Suresh Siddha wrote:
> On Wed, Jul 09, 2008 at 11:11:36AM -0700, Jeremy Fitzhardinge wrote:
>
>> Yinghai Lu wrote:
>>
>>> try to reduce #ifdef CONFIG_X86_64/32, and make 32/64 at the same page.
>>>
>>> could be some regression from early_io_remap unifying from jeremy
>>>
>>> please check attached revert patch.
>>>
>> Could my patch "x86_64: there's no need to preallocate
>> level1_fixmap_pgt" be a problem in itself? It seems sound to me, but
>>
>
> Yep. Reverting it made my system with 2GB memory boot fine again.
>
Great. Ingo, would you do the honours of shooting that patch?
>> none of my other code has any functional dependency on it; it's really
>> just cosmetic.
>>
>
> have you test booted it before making this cosmetic change? :)
>
>
Sure, works for me ;)
J
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped
2008-07-09 19:03 ` Jeremy Fitzhardinge
@ 2008-07-09 20:34 ` Ingo Molnar
0 siblings, 0 replies; 16+ messages in thread
From: Ingo Molnar @ 2008-07-09 20:34 UTC (permalink / raw)
To: Jeremy Fitzhardinge
Cc: Suresh Siddha, Yinghai Lu, hpa@zytor.com, tglx@linutronix.de,
linux-kernel@vger.kernel.org
* Jeremy Fitzhardinge <jeremy@goop.org> wrote:
>>> level1_fixmap_pgt" be a problem in itself? It seems sound to me,
>>> but
>>>
>>
>> Yep. Reverting it made my system with 2GB memory boot fine again.
>
> Great. Ingo, would you do the honours of shooting that patch?
done, i've applied the revert below.
Ingo
----------->
commit 8e48d49043b716d2331facba9ecf0b34936ee8ea
Author: Ingo Molnar <mingo@elte.hu>
Date: Wed Jul 9 22:32:33 2008 +0200
Revert "x86_64: there's no need to preallocate level1_fixmap_pgt"
This reverts commit 033786969d1d1b5af12a32a19d3a760314d05329.
Suresh Siddha reported that this broke booting on his 2GB testbox.
Reported-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
index 2240f82..db3280a 100644
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -362,6 +362,12 @@ NEXT_PAGE(level3_kernel_pgt)
.quad level2_fixmap_pgt - __START_KERNEL_map + _PAGE_TABLE
NEXT_PAGE(level2_fixmap_pgt)
+ .fill 506,8,0
+ .quad level1_fixmap_pgt - __START_KERNEL_map + _PAGE_TABLE
+ /* 8MB reserved for vsyscalls + a 2MB hole = 4 + 1 entries */
+ .fill 5,8,0
+
+NEXT_PAGE(level1_fixmap_pgt)
.fill 512,8,0
NEXT_PAGE(level2_ident_pgt)
^ permalink raw reply related [flat|nested] 16+ messages in thread
end of thread, other threads:[~2008-07-09 20:34 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-08 23:08 [patch] tip/x86_64: fix e820 merge issue which broke max_pfn_mapped Suresh Siddha
2008-07-09 0:47 ` Yinghai Lu
2008-07-09 0:59 ` Yinghai Lu
2008-07-09 1:56 ` Yinghai Lu
2008-07-09 17:56 ` Suresh Siddha
2008-07-09 18:05 ` Yinghai Lu
2008-07-09 18:11 ` Jeremy Fitzhardinge
2008-07-09 18:44 ` Suresh Siddha
2008-07-09 18:47 ` Yinghai Lu
2008-07-09 18:50 ` Suresh Siddha
2008-07-09 18:51 ` Yinghai Lu
2008-07-09 19:03 ` Jeremy Fitzhardinge
2008-07-09 20:34 ` Ingo Molnar
2008-07-09 18:48 ` Suresh Siddha
2008-07-09 18:59 ` Yinghai Lu
2008-07-09 17:00 ` Suresh Siddha
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox