# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID a0a14aedfa68b5783508fde32135a329694b894e
# Parent 4c52791a04445a906e1b191c128d8660bd3fd918
Fix memory reservation in XenLinux.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
diff -r 4c52791a0444 -r a0a14aedfa68
linux-2.6-xen-sparse/arch/xen/i386/kernel/mpparse.c
--- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/mpparse.c Wed Jul 27
00:27:36 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/mpparse.c Wed Jul 27
09:24:51 2005
@@ -748,8 +748,10 @@
|| (mpf->mpf_specification == 4)) ) {
smp_found_config = 1;
+#ifndef CONFIG_XEN
printk(KERN_INFO "found SMP MP-table at %08lx\n",
virt_to_phys(mpf));
+ reserve_bootmem(virt_to_phys(mpf), PAGE_SIZE);
if (mpf->mpf_physptr) {
/*
* We cannot access to MPC table to compute
@@ -766,6 +768,10 @@
size = end - mpf->mpf_physptr;
reserve_bootmem(mpf->mpf_physptr, size);
}
+#else
+ printk(KERN_INFO "found SMP MP-table at %08lx\n",
+ ((unsigned long)bp - (unsigned
long)isa_bus_to_virt(base)) + base);
+#endif
mpf_found = mpf;
return 1;
@@ -809,9 +815,11 @@
* MP1.4 SPEC states to only scan first 1K of 4K EBDA.
*/
+#ifndef CONFIG_XEN
address = get_bios_ebda();
if (address)
smp_scan_config(address, 0x400);
+#endif
}
/* --------------------------------------------------------------------------
diff -r 4c52791a0444 -r a0a14aedfa68
linux-2.6-xen-sparse/arch/xen/i386/kernel/setup.c
--- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/setup.c Wed Jul 27 00:27:36 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/setup.c Wed Jul 27 09:24:51 2005
@@ -1060,6 +1060,7 @@
}
}
+#ifndef CONFIG_XEN
/*
* workaround for Dell systems that neglect to reserve EBDA
*/
@@ -1070,6 +1071,7 @@
if (addr)
reserve_bootmem(addr, PAGE_SIZE);
}
+#endif
#ifndef CONFIG_DISCONTIGMEM
void __init setup_bootmem_allocator(void);
@@ -1152,6 +1154,13 @@
reserve_bootmem(HIGH_MEMORY, (PFN_PHYS(min_low_pfn) +
bootmap_size + PAGE_SIZE-1) - (HIGH_MEMORY));
+#ifndef CONFIG_XEN
+ /*
+ * reserve physical page 0 - it's a special BIOS page on many boxes,
+ * enabling clean reboots, SMP operation, laptop functions.
+ */
+ reserve_bootmem(0, PAGE_SIZE);
+
/* reserve EBDA region, it's a 4K region */
reserve_ebda_region();
@@ -1176,6 +1185,7 @@
*/
acpi_reserve_bootmem();
#endif
+#endif /* !CONFIG_XEN */
#ifdef CONFIG_BLK_DEV_INITRD
if (xen_start_info.mod_start) {
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|