lkml.org 
[lkml]   [2008]   [May]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [PATCH] x86: extend e820 ealy_res support 32bit - fix #2
On Tue, May 27, 2008 at 2:47 PM, Jeremy Fitzhardinge <jeremy@goop.org> wrote:
> Yinghai Lu wrote:
>>
>> thanks for the explanation...
>>
>> method 1 need to be done.
>>
>> BTW, XEN PV only support 32 bit?
>>
>
> At the moment, but 64-bit is being worked on. Any solution must work for
> both.
>

can you try attached patch?

Thanks

YH
diff --git a/arch/x86/kernel/head32.c b/arch/x86/kernel/head32.c
index c216d3c..36af003 100644
--- a/arch/x86/kernel/head32.c
+++ b/arch/x86/kernel/head32.c
@@ -76,7 +76,7 @@ void __init i386_start_kernel(void)
reserve_early(ramdisk_image, ramdisk_end, "RAMDISK");
}
#endif
- reserve_early(__pa_symbol(&_end), init_pg_tables_end, "INIT_PG_TABLE");
+ reserve_early(init_pg_tables_start, init_pg_tables_end, "INIT_PG_TABLE");

reserve_ebda_region();

diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
index b2cc737..bef4618 100644
--- a/arch/x86/kernel/head_32.S
+++ b/arch/x86/kernel/head_32.S
@@ -194,6 +194,7 @@ default_entry:
xorl %ebx,%ebx /* %ebx is kept at zero */

movl $pa(pg0), %edi
+ movl %edi, pa(init_pg_tables_start)
movl $pa(swapper_pg_pmd), %edx
movl $PTE_ATTR, %eax
10:
@@ -228,6 +229,7 @@ default_entry:
page_pde_offset = (__PAGE_OFFSET >> 20);

movl $pa(pg0), %edi
+ movl %edi, pa(init_pg_tables_start)
movl $pa(swapper_pg_dir), %edx
movl $PTE_ATTR, %eax
10:
diff --git a/arch/x86/kernel/setup_32.c b/arch/x86/kernel/setup_32.c
index 896ec59..340c153 100644
--- a/arch/x86/kernel/setup_32.c
+++ b/arch/x86/kernel/setup_32.c
@@ -71,6 +71,7 @@
/* This value is set up by the early boot code to point to the value
immediately after the boot time page tables. It contains a *physical*
address, and must not be in the .bss segment! */
+unsigned long init_pg_tables_start __initdata = ~0UL;
unsigned long init_pg_tables_end __initdata = ~0UL;

/*
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c
index f5cbb74..c3af6c6 100644
--- a/arch/x86/lguest/boot.c
+++ b/arch/x86/lguest/boot.c
@@ -1012,6 +1012,7 @@ __init void lguest_init(void)
* clobbered. The Launcher places our initial pagetables somewhere at
* the top of our physical memory, so we don't need extra space: set
* init_pg_tables_end to the end of the kernel. */
+ init_pg_tables_start = __pa(pg0);
init_pg_tables_end = __pa(pg0);

/* Load the %fs segment register (the per-cpu segment register) with
@@ -1065,9 +1066,9 @@ __init void lguest_init(void)
pm_power_off = lguest_power_off;
machine_ops.restart = lguest_restart;

- /* Now we're set up, call start_kernel() in init/main.c and we proceed
+ /* Now we're set up, call i386_start_kernel() in head32.c and we proceed
* to boot as normal. It never returns. */
- start_kernel();
+ i386_start_kernel();
}
/*
* This marks the end of stage II of our journey, The Guest.
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 691d282..57e96a6 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -1228,6 +1228,7 @@ asmlinkage void __init xen_start_kernel(void)

pgd = (pgd_t *)xen_start_info->pt_base;

+ init_pg_tables_start = __pa(pgd);
init_pg_tables_end = __pa(pgd) + xen_start_info->nr_pt_frames*PAGE_SIZE;

init_mm.pgd = pgd; /* use the Xen pagetables to start */
@@ -1266,5 +1267,5 @@ asmlinkage void __init xen_start_kernel(void)
}

/* Start the world */
- start_kernel();
+ i386_start_kernel();
}
diff --git a/include/asm-x86/setup.h b/include/asm-x86/setup.h
index ffa0f54..920307e 100644
--- a/include/asm-x86/setup.h
+++ b/include/asm-x86/setup.h
@@ -59,6 +59,7 @@ int __init copy_e820_map(struct e820entry *biosmap, int nr_map);
void __init add_memory_region(unsigned long long start,
unsigned long long size, int type);

+extern unsigned long init_pg_tables_start;
extern unsigned long init_pg_tables_end;

\
 
 \ /
  Last update: 2008-05-28 00:55    [W:0.118 / U:0.312 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site