# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 11626efd003c5c080bf9622fee0f1c3da508086a
# Parent 50aea0ec406bd03dad9da31255857e4a41f7efcc
[LINUX] /proc/iomem should not be initialised from pseudophysical e820 map.
This is because it should only contain real I/O memory address ranges,
otherwise we can get false conflicts between a real I/O range and a
'pseudophysical' RAM range, causing drivers to fail to work in a domU.
Also prevent kernel code/data being requested as iomem resources --
they are not contiguous in 'io memory' space so this would not make
sense.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c | 7 +++----
linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c | 2 ++
linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c | 5 +++--
3 files changed, 8 insertions(+), 6 deletions(-)
diff -r 50aea0ec406b -r 11626efd003c
linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c Wed Aug 30 22:36:18
2006 +0100
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c Thu Aug 31 03:05:40
2006 +0100
@@ -1380,8 +1380,10 @@ legacy_init_iomem_resources(struct e820e
* so we try it repeatedly and let the resource manager
* test it.
*/
+#ifndef CONFIG_XEN
request_resource(res, code_resource);
request_resource(res, data_resource);
+#endif
#ifdef CONFIG_KEXEC
request_resource(res, &crashk_res);
#endif
@@ -1454,11 +1456,8 @@ static void __init register_memory(void)
int i;
/* Nothing to do if not running in dom0. */
- if (!is_initial_xendomain()) {
- legacy_init_iomem_resources(e820.map, e820.nr_map,
- &code_resource, &data_resource);
+ if (!is_initial_xendomain())
return;
- }
#ifdef CONFIG_XEN
machine_e820 = alloc_bootmem_low_pages(PAGE_SIZE);
diff -r 50aea0ec406b -r 11626efd003c
linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c Wed Aug 30
22:36:18 2006 +0100
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c Thu Aug 31
03:05:40 2006 +0100
@@ -255,8 +255,10 @@ void __init e820_reserve_resources(struc
* so we try it repeatedly and let the resource manager
* test it.
*/
+#ifndef CONFIG_XEN
request_resource(res, &code_resource);
request_resource(res, &data_resource);
+#endif
#ifdef CONFIG_KEXEC
request_resource(res, &crashk_res);
#endif
diff -r 50aea0ec406b -r 11626efd003c
linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c Wed Aug 30
22:36:18 2006 +0100
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c Thu Aug 31
03:05:40 2006 +0100
@@ -944,9 +944,10 @@ void __init setup_arch(char **cmdline_p)
BUG_ON(HYPERVISOR_memory_op(XENMEM_machine_memory_map,
&memmap));
e820_reserve_resources(machine_e820, memmap.nr_entries);
- } else
-#endif
+ }
+#else
e820_reserve_resources(e820.map, e820.nr_map);
+#endif
request_resource(&iomem_resource, &video_ram_resource);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|