# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID 6526a91d55553b712cb210cbefb363e71b380679
# Parent ecc8595f2c0b49684e40b4601f1a27f1df152528
[IA64] take start_info page from dom0 page not from xen heap.
start_info page is used for xen to pass start up information
to domain0 and the page is used only by dom0 so that it should
belong to dom0.
Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
diff -r ecc8595f2c0b -r 6526a91d5555
linux-2.6-xen-sparse/arch/ia64/kernel/setup.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c Thu Feb 9 20:48:05 2006
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c Thu Feb 9 20:55:03 2006
@@ -61,6 +61,9 @@
#include <asm/system.h>
#include <asm/unistd.h>
#include <asm/system.h>
+#ifdef CONFIG_XEN
+#include <asm/hypervisor.h>
+#endif
#if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE)
# error "struct cpuinfo_ia64 too big!"
@@ -240,6 +243,12 @@
rsvd_region[n].start = (unsigned long) ia64_imva((void *)KERNEL_START);
rsvd_region[n].end = (unsigned long) ia64_imva(_end);
n++;
+
+#ifdef CONFIG_XEN
+ rsvd_region[n].start = (unsigned long)
(HYPERVISOR_shared_info->arch.start_info_pfn << PAGE_SHIFT);
+ rsvd_region[n].end = rsvd_region[n].start + PAGE_SIZE;
+ n++;
+#endif
#ifdef CONFIG_BLK_DEV_INITRD
if (ia64_boot_param->initrd_start) {
diff -r ecc8595f2c0b -r 6526a91d5555 xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c Thu Feb 9 20:48:05 2006
+++ b/xen/arch/ia64/xen/domain.c Thu Feb 9 20:55:03 2006
@@ -782,6 +782,7 @@
unsigned long pkern_entry;
unsigned long pkern_end;
unsigned long pinitrd_start = 0;
+ unsigned long pstart_info;
unsigned long ret, progress = 0;
//printf("construct_dom0: starting\n");
@@ -839,13 +840,18 @@
(PAGE_ALIGN(initrd_len) + 4*1024*1024);
memcpy(__va(pinitrd_start),initrd_start,initrd_len);
+ pstart_info = PAGE_ALIGN(pinitrd_start + initrd_len);
+ } else {
+ pstart_info = PAGE_ALIGN(pkern_end);
}
printk("METAPHYSICAL MEMORY ARRANGEMENT:\n"
" Kernel image: %lx->%lx\n"
" Entry address: %lx\n"
- " Init. ramdisk: %lx len %lx\n",
- pkern_start, pkern_end, pkern_entry, pinitrd_start, initrd_len);
+ " Init. ramdisk: %lx len %lx\n"
+ " Start info.: %lx->%lx\n",
+ pkern_start, pkern_end, pkern_entry, pinitrd_start, initrd_len,
+ pstart_info, pstart_info + PAGE_SIZE);
if ( (pkern_end - pkern_start) > (d->max_pages * PAGE_SIZE) )
{
@@ -900,9 +906,9 @@
/* Set up start info area. */
- si = (start_info_t *)alloc_xenheap_page();
+ d->shared_info->arch.start_info_pfn = pstart_info >> PAGE_SHIFT;
+ si = __va(pstart_info);
memset(si, 0, PAGE_SIZE);
- d->shared_info->arch.start_info_pfn = __pa(si) >> PAGE_SHIFT;
sprintf(si->magic, "xen-%i.%i-ia64", XEN_VERSION, XEN_SUBVERSION);
si->nr_pages = d->tot_pages;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|