From: kaf24@firebug.cl.cam.ac.uk Date: Thu, 8 Jun 2006 09:24:48 +0000 (+0100) Subject: [LINUX] Set up /proc/iomem in a sensibel way to indicate X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15972^2~36 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=b4c43b75ea194b0fb81fb6a7b070eb2b2d3a3c4a;p=xen.git [LINUX] Set up /proc/iomem in a sensibel way to indicate code & data resources, and a RAM area on domU. From: Gerd Hoffmann Signed-off-by: Keir Fraser --- diff --git a/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c b/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c index 43fb12bbb3..7ae42e6d35 100644 --- a/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c +++ b/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c @@ -1378,7 +1378,6 @@ legacy_init_iomem_resources(struct e820entry *e820, int nr_map, res->end = res->start + e820[i].size - 1; res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; request_resource(&iomem_resource, res); -#ifndef CONFIG_XEN if (e820[i].type == E820_RAM) { /* * We don't know which RAM region contains kernel data, @@ -1391,7 +1390,6 @@ legacy_init_iomem_resources(struct e820entry *e820, int nr_map, request_resource(res, &crashk_res); #endif } -#endif } } @@ -1460,8 +1458,16 @@ static void __init register_memory(void) int i; /* Nothing to do if not running in dom0. */ - if (!(xen_start_info->flags & SIF_INITDOMAIN)) + if (!(xen_start_info->flags & SIF_INITDOMAIN)) { + struct e820entry domU_e820 = { + .addr = 0, + .size = max_pfn << PAGE_SHIFT, + .type = E820_RAM, + }; + legacy_init_iomem_resources(&domU_e820, 1, + &code_resource, &data_resource); return; + } #ifdef CONFIG_XEN machine_e820 = alloc_bootmem_low_pages(PAGE_SIZE); @@ -1698,11 +1704,10 @@ void __init setup_arch(char **cmdline_p) init_mm.brk = (PFN_UP(__pa(xen_start_info->pt_base)) + xen_start_info->nr_pt_frames) << PAGE_SHIFT; - /* XEN: This is nonsense: kernel may not even be contiguous in RAM. */ - /*code_resource.start = virt_to_phys(_text);*/ - /*code_resource.end = virt_to_phys(_etext)-1;*/ - /*data_resource.start = virt_to_phys(_etext);*/ - /*data_resource.end = virt_to_phys(_edata)-1;*/ + code_resource.start = virt_to_phys(_text); + code_resource.end = virt_to_phys(_etext)-1; + data_resource.start = virt_to_phys(_etext); + data_resource.end = virt_to_phys(_edata)-1; parse_cmdline_early(cmdline_p); diff --git a/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c b/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c index 0f5dd54fa3..1dcaedc0d5 100644 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c @@ -44,9 +44,7 @@ unsigned long end_pfn_map; */ unsigned long end_user_pfn = MAXMEM>>PAGE_SHIFT; -#ifndef CONFIG_XEN extern struct resource code_resource, data_resource; -#endif /* Check for some hardcoded bad areas that early boot is not allowed to touch */ static inline int bad_addr(unsigned long *addrp, unsigned long size) @@ -251,8 +249,7 @@ void __init e820_reserve_resources(struct e820entry *e820, int nr_map) res->end = res->start + e820[i].size - 1; res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; request_resource(&iomem_resource, res); -#ifndef CONFIG_XEN - if (e820.map[i].type == E820_RAM) { + if (e820[i].type == E820_RAM) { /* * We don't know which RAM region contains kernel data, * so we try it repeatedly and let the resource manager @@ -264,7 +261,6 @@ void __init e820_reserve_resources(struct e820entry *e820, int nr_map) request_resource(res, &crashk_res); #endif } -#endif } } diff --git a/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c b/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c index 0b88c1781f..05fb99fc33 100644 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c @@ -692,12 +692,10 @@ void __init setup_arch(char **cmdline_p) init_mm.end_data = (unsigned long) &_edata; init_mm.brk = (unsigned long) &_end; -#ifndef CONFIG_XEN code_resource.start = virt_to_phys(&_text); code_resource.end = virt_to_phys(&_etext)-1; data_resource.start = virt_to_phys(&_etext); data_resource.end = virt_to_phys(&_edata)-1; -#endif parse_cmdline_early(cmdline_p); @@ -921,6 +919,13 @@ 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 { + struct e820entry domU_e820 = { + .addr = 0, + .size = max_pfn << PAGE_SHIFT, + .type = E820_RAM, + }; + e820_reserve_resources(&domU_e820, 1); } #elif !defined(CONFIG_XEN) probe_roms();