mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
[LINUX] Set up /proc/iomem in a sensibel way to indicate
code & data resources, and a RAM area on domU. From: Gerd Hoffmann <kraxel@suse.de> Signed-off-by: Keir Fraser <keir@xensource.com>
This commit is contained in:
1 parent
3f63cf9724
commit
b4c43b75ea
3 files changed
+21
-15
No files matched your search
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||