From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gerd Hoffmann Subject: Re: access shared_info? Date: Wed, 07 Jun 2006 17:53:26 +0200 Message-ID: <4486F676.6080301@suse.de> References: <4486D496.1070905@suse.de> <20b4659f13d0ed8c0ee5d23d93579b4c@cl.cam.ac.uk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------020600030108030305030806" Return-path: In-Reply-To: <20b4659f13d0ed8c0ee5d23d93579b4c@cl.cam.ac.uk> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser Cc: Xen devel list List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------020600030108030305030806 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit > Even if you could get address of shared_info, you can't map it into user > space without some kernel hacking to make that possible (/dev/mem can > only map I/O memory when running on Xen). Ok, different attack ;) How about the attached patch? It makes /proc/iomem under xen dom0 look like on native hardware. Also for domU it has some sensible values then instead of being empty. cheers, Gerd -- Gerd Hoffmann http://www.suse.de/~kraxel/julika-dora.jpeg --------------020600030108030305030806 Content-Type: text/x-patch; name="iomem.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="iomem.diff" diff -r c191c649cdb3 linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c --- a/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c Tue Jun 6 09:25:59 2006 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c Wed Jun 7 17:48:10 2006 @@ -1352,10 +1352,23 @@ * Request address space for all standard RAM and ROM resources * and also for regions reported as reserved by the e820. */ + +static void __init register_kernel_ressources(struct resource *res) +{ + /* + * We don't know which RAM region contains kernel data, + * so we try it repeatedly and let the resource manager + * test it. + */ + request_resource(res, &code_resource); + request_resource(res, &data_resource); +#ifdef CONFIG_KEXEC + request_resource(res, &crashk_res); +#endif +} + static void __init -legacy_init_iomem_resources(struct e820entry *e820, int nr_map, - struct resource *code_resource, - struct resource *data_resource) +legacy_init_iomem_resources(struct e820entry *e820, int nr_map) { int i; @@ -1378,21 +1391,23 @@ 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, - * so we try it repeatedly and let the resource manager - * test it. - */ - request_resource(res, code_resource); - request_resource(res, data_resource); -#ifdef CONFIG_KEXEC - request_resource(res, &crashk_res); -#endif - } -#endif - } + if (e820[i].type == E820_RAM) + register_kernel_ressources(res); + } +} + +static void __init +domU_init_iomem_resources(void) +{ + struct resource *res; + + res = alloc_bootmem_low(sizeof(struct resource)); + res->name = "System RAM"; + res->start = 0; + res->end = (max_pfn * PAGE_SIZE) - 1; + res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; + request_resource(&iomem_resource, res); + register_kernel_ressources(res); } /* @@ -1460,8 +1475,10 @@ int i; /* Nothing to do if not running in dom0. */ - if (!(xen_start_info->flags & SIF_INITDOMAIN)) + if (!(xen_start_info->flags & SIF_INITDOMAIN)) { + domU_init_iomem_resources(); return; + } #ifdef CONFIG_XEN machine_e820 = alloc_bootmem_low_pages(PAGE_SIZE); @@ -1471,14 +1488,12 @@ BUG_ON(HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap)); - legacy_init_iomem_resources(machine_e820, memmap.nr_entries, - &code_resource, &data_resource); + legacy_init_iomem_resources(machine_e820, memmap.nr_entries); #else if (efi_enabled) efi_initialize_iomem_resources(&code_resource, &data_resource); else - legacy_init_iomem_resources(e820.map, e820.nr_map, - &code_resource, &data_resource); + legacy_init_iomem_resources(e820.map, e820.nr_map); #endif /* EFI systems may still have VGA */ @@ -1698,11 +1713,10 @@ 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); --------------020600030108030305030806 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------020600030108030305030806--