# HG changeset patch # User xiantao@localhost.localdomain # Node ID 000668d1b9cad786ef140af0b0f2b70362d341ad # Parent 561df7d9cecc92d08bcc34ed45880062b06dc2e6 Fix qemu memory access beyond 3G @VTi side. Signed-off-by: Zhang xiantao diff -r 561df7d9cecc -r 000668d1b9ca tools/ioemu/vl.c --- a/tools/ioemu/vl.c Wed Aug 02 15:09:56 2006 -0600 +++ b/tools/ioemu/vl.c Thu Aug 03 14:19:40 2006 +0800 @@ -5744,6 +5744,11 @@ int main(int argc, char **argv) /* init the memory */ phys_ram_size = ram_size + vga_ram_size + bios_size; +#if defined (__ia64__) + if(ram_size > MMIO_START) + ram_size += 1*MEM_G; //skip 3G--4G MMIO,LEGACY_IO_SPACE etc. +#endif + #ifdef CONFIG_DM nr_pages = ram_size/PAGE_SIZE; @@ -5777,12 +5782,30 @@ int main(int argc, char **argv) (uint64_t)(page_array[nr_pages - 1])); #elif defined(__ia64__) + + if (xc_ia64_get_pfn_list(xc_handle, domid, page_array, + IO_PAGE_START >> PAGE_SHIFT, 1) != 1){ + fprintf(logfile, "xc_ia64_get_pfn_list returned error %d\n", errno); + exit(-1); + } + + shared_page = xc_map_foreign_range(xc_handle, domid, PAGE_SIZE, + PROT_READ|PROT_WRITE, + page_array[0]); + + fprintf(logfile, "shared page at pfn:%lx, mfn: %016lx\n", + IO_PAGE_START >> PAGE_SHIFT, page_array[0]); + if (xc_ia64_get_pfn_list(xc_handle, domid, page_array, 0, nr_pages) != nr_pages) { fprintf(logfile, "xc_ia64_get_pfn_list returned error %d\n", errno); exit(-1); } - + if(ram_size > MMIO_START){ + unsigned long xenstore_page_mfn = page_array[IO_PAGE_START>>PAGE_SHIFT+1]; + for (i=0 ; i < 1*MEM_G>>PAGE_SHIFT; i++) + page_array[MMIO_START>>PAGE_SHIFT+i] = xenstore_page_mfn; + } phys_ram_base = xc_map_foreign_batch(xc_handle, domid, PROT_READ|PROT_WRITE, page_array, nr_pages); @@ -5791,18 +5814,6 @@ int main(int argc, char **argv) exit(-1); } - if (xc_ia64_get_pfn_list(xc_handle, domid, page_array, - IO_PAGE_START >> PAGE_SHIFT, 1) != 1){ - fprintf(logfile, "xc_ia64_get_pfn_list returned error %d\n", errno); - exit(-1); - } - - shared_page = xc_map_foreign_range(xc_handle, domid, PAGE_SIZE, - PROT_READ|PROT_WRITE, - page_array[0]); - - fprintf(logfile, "shared page at pfn:%lx, mfn: %016lx\n", - IO_PAGE_START >> PAGE_SHIFT, page_array[0]); #endif #else /* !CONFIG_DM */