[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [qemu patches] Update patches upto changeset 13108:ed815cbdc90e.
# HG changeset patch # User Christian Limpach <Christian.Limpach@xxxxxxxxxxxxx> # Date 1166628166 0 # Node ID f58b0c778b901481c37f9c401c749d7d40baf95d # Parent 4fb80f21c77df84f6a6d7f61fdce4c337d538291 [qemu patches] Update patches upto changeset 13108:ed815cbdc90e. Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxxx> --- tools/ioemu/patches/domain-timeoffset | 10 tools/ioemu/patches/fix-interrupt-routing | 17 - tools/ioemu/patches/ioemu-ia64 | 38 -- tools/ioemu/patches/qemu-bootorder | 26 +- tools/ioemu/patches/series | 2 tools/ioemu/patches/tpm-tis-device | 9 tools/ioemu/patches/vnc-display-find-unused | 8 tools/ioemu/patches/vnc-fixes | 8 tools/ioemu/patches/vnc-listen-specific-interface | 8 tools/ioemu/patches/vnc-password | 14 - tools/ioemu/patches/vnc-start-vncviewer | 8 tools/ioemu/patches/xen-mapcache | 285 +++++++++------------- tools/ioemu/patches/xen-support-buffered-ioreqs | 6 tools/ioemu/patches/xenstore-block-device-config | 19 - tools/ioemu/patches/xenstore-write-vnc-port | 8 15 files changed, 198 insertions(+), 268 deletions(-) diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/domain-timeoffset --- a/tools/ioemu/patches/domain-timeoffset Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/domain-timeoffset Wed Dec 20 15:22:46 2006 +0000 @@ -1,7 +1,7 @@ Index: ioemu/hw/mc146818rtc.c Index: ioemu/hw/mc146818rtc.c =================================================================== ---- ioemu.orig/hw/mc146818rtc.c 2006-12-08 18:36:31.000000000 +0000 -+++ ioemu/hw/mc146818rtc.c 2006-12-08 18:36:36.000000000 +0000 +--- ioemu.orig/hw/mc146818rtc.c 2006-12-20 15:21:33.000000000 +0000 ++++ ioemu/hw/mc146818rtc.c 2006-12-20 15:21:50.000000000 +0000 @@ -178,10 +178,27 @@ } } @@ -46,8 +46,8 @@ Index: ioemu/hw/mc146818rtc.c static void rtc_copy_date(RTCState *s) Index: ioemu/hw/pc.c =================================================================== ---- ioemu.orig/hw/pc.c 2006-12-08 18:36:35.000000000 +0000 -+++ ioemu/hw/pc.c 2006-12-08 18:36:36.000000000 +0000 +--- ioemu.orig/hw/pc.c 2006-12-20 15:21:49.000000000 +0000 ++++ ioemu/hw/pc.c 2006-12-20 15:21:50.000000000 +0000 @@ -159,7 +159,7 @@ } @@ -117,8 +117,8 @@ Index: ioemu/hw/pc.c QEMUMachine pc_machine = { Index: ioemu/vl.c =================================================================== ---- ioemu.orig/vl.c 2006-12-08 18:36:35.000000000 +0000 -+++ ioemu/vl.c 2006-12-08 18:36:36.000000000 +0000 +--- ioemu.orig/vl.c 2006-12-20 15:21:49.000000000 +0000 ++++ ioemu/vl.c 2006-12-20 15:21:50.000000000 +0000 @@ -163,6 +163,8 @@ int xc_handle; @@ -162,7 +162,7 @@ Index: ioemu/vl.c } } } -@@ -6492,7 +6500,8 @@ +@@ -6484,7 +6492,8 @@ machine->init(ram_size, vga_ram_size, boot_device, ds, fd_filename, snapshot, @@ -174,8 +174,8 @@ Index: ioemu/vl.c if (usb_enabled) { Index: ioemu/vl.h =================================================================== ---- ioemu.orig/vl.h 2006-12-08 18:36:35.000000000 +0000 -+++ ioemu/vl.h 2006-12-08 18:36:36.000000000 +0000 +--- ioemu.orig/vl.h 2006-12-20 15:21:49.000000000 +0000 ++++ ioemu/vl.h 2006-12-20 15:21:50.000000000 +0000 @@ -576,7 +576,7 @@ int boot_device, DisplayState *ds, const char **fd_filename, int snapshot, diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/fix-interrupt-routing --- a/tools/ioemu/patches/fix-interrupt-routing Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/fix-interrupt-routing Wed Dec 20 15:22:46 2006 +0000 @@ -17,23 +17,21 @@ Signed-off-by: Keir Fraser <keir@xensour Index: ioemu/Makefile.target =================================================================== ---- ioemu.orig/Makefile.target 2006-12-08 18:21:56.000000000 +0000 -+++ ioemu/Makefile.target 2006-12-08 18:22:35.000000000 +0000 -@@ -298,7 +298,7 @@ +--- ioemu.orig/Makefile.target 2006-12-20 15:04:55.000000000 +0000 ++++ ioemu/Makefile.target 2006-12-20 15:08:16.000000000 +0000 +@@ -296,9 +296,9 @@ + + # qemu-dm objects ifeq ($(ARCH),ia64) - LIBOBJS=helper2.o exec-dm.o i8259-dm.o +-LIBOBJS=helper2.o exec-dm.o i8259-dm.o ++LIBOBJS=helper2.o exec-dm.o i8259-dm.o piix_pci-dm.o else -LIBOBJS=helper2.o exec-dm.o i8259-dm.o rtc-dm.o +LIBOBJS=helper2.o exec-dm.o i8259-dm.o rtc-dm.o piix_pci-dm.o endif all: $(PROGS) -@@ -360,11 +360,11 @@ - # Hardware support - VL_OBJS+= ide.o pckbd.o ps2.o vga.o $(SOUND_HW) dma.o $(AUDIODRV) - ifeq ($(ARCH),ia64) --VL_OBJS+= fdc.o mc146818rtc.o serial.o pc.o -+VL_OBJS+= fdc.o mc146818rtc.o serial.o pc.o piix_pci.o +@@ -364,7 +364,7 @@ else VL_OBJS+= fdc.o serial.o pc.o endif @@ -44,8 +42,8 @@ Index: ioemu/Makefile.target VL_OBJS+= xenstore.o Index: ioemu/target-i386-dm/i8259-dm.c =================================================================== ---- ioemu.orig/target-i386-dm/i8259-dm.c 2006-12-08 18:21:36.000000000 +0000 -+++ ioemu/target-i386-dm/i8259-dm.c 2006-12-08 18:22:35.000000000 +0000 +--- ioemu.orig/target-i386-dm/i8259-dm.c 2006-12-20 15:04:54.000000000 +0000 ++++ ioemu/target-i386-dm/i8259-dm.c 2006-12-20 15:04:55.000000000 +0000 @@ -33,7 +33,7 @@ void pic_set_irq_new(void *opaque, int irq, int level) @@ -58,7 +56,7 @@ Index: ioemu/target-i386-dm/piix_pci-dm. Index: ioemu/target-i386-dm/piix_pci-dm.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ ioemu/target-i386-dm/piix_pci-dm.c 2006-12-08 18:22:35.000000000 +0000 ++++ ioemu/target-i386-dm/piix_pci-dm.c 2006-12-20 15:08:13.000000000 +0000 @@ -0,0 +1,397 @@ +/* + * QEMU i440FX/PIIX3 PCI Bridge Emulation diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/ioemu-ia64 --- a/tools/ioemu/patches/ioemu-ia64 Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/ioemu-ia64 Wed Dec 20 15:22:46 2006 +0000 @@ -1,7 +1,7 @@ Index: ioemu/hw/iommu.c Index: ioemu/hw/iommu.c =================================================================== ---- ioemu.orig/hw/iommu.c 2006-12-08 02:02:07.000000000 +0000 -+++ ioemu/hw/iommu.c 2006-12-08 02:02:34.000000000 +0000 +--- ioemu.orig/hw/iommu.c 2006-12-20 15:04:54.000000000 +0000 ++++ ioemu/hw/iommu.c 2006-12-20 15:04:54.000000000 +0000 @@ -82,7 +82,11 @@ #define IOPTE_VALID 0x00000002 /* IOPTE is valid */ #define IOPTE_WAZ 0x00000001 /* Write as zeros */ @@ -16,8 +16,8 @@ Index: ioemu/hw/iommu.c Index: ioemu/cpu-all.h =================================================================== ---- ioemu.orig/cpu-all.h 2006-12-08 02:02:07.000000000 +0000 -+++ ioemu/cpu-all.h 2006-12-08 02:02:34.000000000 +0000 +--- ioemu.orig/cpu-all.h 2006-12-20 15:04:54.000000000 +0000 ++++ ioemu/cpu-all.h 2006-12-20 15:04:54.000000000 +0000 @@ -835,6 +835,31 @@ :"=m" (*(volatile long *)addr) :"dIr" (nr)); @@ -52,13 +52,17 @@ Index: ioemu/cpu-all.h /* memory API */ Index: ioemu/vl.c =================================================================== ---- ioemu.orig/vl.c 2006-12-08 02:02:28.000000000 +0000 -+++ ioemu/vl.c 2006-12-08 02:02:34.000000000 +0000 -@@ -6137,6 +6137,11 @@ +--- ioemu.orig/vl.c 2006-12-20 15:04:54.000000000 +0000 ++++ ioemu/vl.c 2006-12-20 15:12:00.000000000 +0000 +@@ -6137,6 +6137,15 @@ exit(1); } +#if defined (__ia64__) ++ /* ram_size passed from xend has added on GFW memory, ++ so we must subtract it here */ ++ ram_size -= 16 * MEM_M; ++ + if (ram_size > MMIO_START) + ram_size += 1 * MEM_G; /* skip 3G-4G MMIO, LEGACY_IO_SPACE etc. */ +#endif @@ -66,7 +70,7 @@ Index: ioemu/vl.c /* init the memory */ phys_ram_size = ram_size + vga_ram_size + bios_size; -@@ -6161,6 +6166,7 @@ +@@ -6161,6 +6170,7 @@ exit(-1); } @@ -74,41 +78,29 @@ Index: ioemu/vl.c for ( i = 0; i < tmp_nr_pages; i++) page_array[i] = i; -@@ -6185,6 +6191,48 @@ +@@ -6185,6 +6195,36 @@ free(page_array); +#elif defined(__ia64__) + -+ if (xc_ia64_get_pfn_list(xc_handle, domid, page_array, -+ IO_PAGE_START >> PAGE_SHIFT, 3) != 3) { -+ 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]); ++ IO_PAGE_START >> PAGE_SHIFT); + + buffered_io_page =xc_map_foreign_range(xc_handle, domid, PAGE_SIZE, + PROT_READ|PROT_WRITE, -+ page_array[2]); -+ fprintf(logfile, "Buffered IO page at pfn:%lx, mfn: %016lx\n", -+ BUFFER_IO_PAGE_START >> PAGE_SHIFT, page_array[2]); -+ -+ 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); -+ } -+ ++ BUFFER_IO_PAGE_START >> PAGE_SHIFT); ++ ++ for (i = 0; i < tmp_nr_pages; i++) ++ page_array[i] = i; ++ ++ /* VTI will not use memory between 3G~4G, so we just pass a legal pfn ++ to make QEMU map continuous virtual memory space */ + if (ram_size > MMIO_START) { + for (i = 0 ; i < (MEM_G >> PAGE_SHIFT); i++) + page_array[(MMIO_START >> PAGE_SHIFT) + i] = -+ page_array[(IO_PAGE_START >> PAGE_SHIFT) + 1]; ++ (STORE_PAGE_START >> PAGE_SHIFT); + } + + phys_ram_base = xc_map_foreign_batch(xc_handle, domid, @@ -125,8 +117,8 @@ Index: ioemu/vl.c phys_ram_base = qemu_vmalloc(phys_ram_size); Index: ioemu/exec-all.h =================================================================== ---- ioemu.orig/exec-all.h 2006-12-08 02:02:07.000000000 +0000 -+++ ioemu/exec-all.h 2006-12-08 02:02:34.000000000 +0000 +--- ioemu.orig/exec-all.h 2006-12-20 15:04:54.000000000 +0000 ++++ ioemu/exec-all.h 2006-12-20 15:04:54.000000000 +0000 @@ -462,12 +462,13 @@ } #endif @@ -146,8 +138,8 @@ Index: ioemu/exec-all.h Index: ioemu/target-i386-dm/cpu.h =================================================================== ---- ioemu.orig/target-i386-dm/cpu.h 2006-12-08 02:02:07.000000000 +0000 -+++ ioemu/target-i386-dm/cpu.h 2006-12-08 02:02:34.000000000 +0000 +--- ioemu.orig/target-i386-dm/cpu.h 2006-12-20 15:04:54.000000000 +0000 ++++ ioemu/target-i386-dm/cpu.h 2006-12-20 15:10:13.000000000 +0000 @@ -78,7 +78,11 @@ /* helper2.c */ int main_loop(void); @@ -163,7 +155,7 @@ Index: ioemu/ia64_intrinsic.h Index: ioemu/ia64_intrinsic.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ ioemu/ia64_intrinsic.h 2006-12-08 02:02:34.000000000 +0000 ++++ ioemu/ia64_intrinsic.h 2006-12-20 15:04:54.000000000 +0000 @@ -0,0 +1,276 @@ +#ifndef IA64_INTRINSIC_H +#define IA64_INTRINSIC_H diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/qemu-bootorder --- a/tools/ioemu/patches/qemu-bootorder Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/qemu-bootorder Wed Dec 20 15:22:46 2006 +0000 @@ -1,7 +1,7 @@ Index: ioemu/vl.c Index: ioemu/vl.c =================================================================== ---- ioemu.orig/vl.c 2006-12-08 02:02:38.000000000 +0000 -+++ ioemu/vl.c 2006-12-08 02:02:38.000000000 +0000 +--- ioemu.orig/vl.c 2006-12-20 15:12:08.000000000 +0000 ++++ ioemu/vl.c 2006-12-20 15:21:19.000000000 +0000 @@ -125,7 +125,7 @@ struct sockaddr_in vnclisten_addr; const char* keyboard_layout = NULL; @@ -17,15 +17,17 @@ Index: ioemu/vl.c case QEMU_OPTION_boot: - boot_device = optarg[0]; - if (boot_device != 'a' && +-#ifdef TARGET_SPARC +- // Network boot +- boot_device != 'n' && +-#endif +- boot_device != 'c' && boot_device != 'd') { +- fprintf(stderr, "qemu: invalid boot device '%c'\n", boot_device); + boot_device = strdup(optarg); + if (strspn(boot_device, "acd" - #ifdef TARGET_SPARC -- // Network boot -- boot_device != 'n' && ++#if defined(TARGET_SPARC) || defined(TARGET_I386) + "n" - #endif -- boot_device != 'c' && boot_device != 'd') { -- fprintf(stderr, "qemu: invalid boot device '%c'\n", boot_device); ++#endif + ) != strlen(boot_device)) { + fprintf(stderr, "qemu: invalid boot device in '%s'\n", + boot_device); @@ -48,7 +50,7 @@ Index: ioemu/vl.c #endif /* !CONFIG_DM */ setvbuf(stdout, NULL, _IOLBF, 0); -@@ -6598,6 +6600,7 @@ +@@ -6590,6 +6592,7 @@ ds, fd_filename, snapshot, kernel_filename, kernel_cmdline, initrd_filename, timeoffset); @@ -58,8 +60,8 @@ Index: ioemu/vl.c if (usb_enabled) { Index: ioemu/vl.h =================================================================== ---- ioemu.orig/vl.h 2006-12-08 02:02:38.000000000 +0000 -+++ ioemu/vl.h 2006-12-08 02:02:38.000000000 +0000 +--- ioemu.orig/vl.h 2006-12-20 15:12:08.000000000 +0000 ++++ ioemu/vl.h 2006-12-20 15:21:14.000000000 +0000 @@ -578,7 +578,7 @@ #ifndef QEMU_TOOL @@ -80,9 +82,9 @@ Index: ioemu/vl.h uint32_t initrd_image, uint32_t initrd_size, Index: ioemu/hw/pc.c =================================================================== ---- ioemu.orig/hw/pc.c 2006-12-08 02:02:38.000000000 +0000 -+++ ioemu/hw/pc.c 2006-12-08 02:02:38.000000000 +0000 -@@ -158,8 +158,23 @@ +--- ioemu.orig/hw/pc.c 2006-12-20 15:12:08.000000000 +0000 ++++ ioemu/hw/pc.c 2006-12-20 15:21:19.000000000 +0000 +@@ -158,8 +158,25 @@ rtc_set_memory(s, info_ofs + 8, sectors); } @@ -96,6 +98,8 @@ Index: ioemu/hw/pc.c + return 0x02; /* hard drive */ + case 'd': + return 0x03; /* cdrom */ ++ case 'n': ++ return 0x04; /* network */ + } + } + return 0x00; /* no device */ @@ -107,7 +111,7 @@ Index: ioemu/hw/pc.c { RTCState *s = rtc_state; int val; -@@ -205,21 +220,14 @@ +@@ -205,21 +222,14 @@ rtc_set_memory(s, 0x34, val); rtc_set_memory(s, 0x35, val >> 8); @@ -137,7 +141,7 @@ Index: ioemu/hw/pc.c /* floppy type */ -@@ -617,7 +625,7 @@ +@@ -617,7 +627,7 @@ #define NOBIOS 1 /* PC hardware initialisation */ @@ -146,7 +150,7 @@ Index: ioemu/hw/pc.c DisplayState *ds, const char **fd_filename, int snapshot, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, time_t timeoffset, -@@ -919,7 +927,7 @@ +@@ -919,7 +929,7 @@ } } @@ -155,7 +159,7 @@ Index: ioemu/hw/pc.c DisplayState *ds, const char **fd_filename, int snapshot, const char *kernel_filename, -@@ -933,7 +941,7 @@ +@@ -933,7 +943,7 @@ initrd_filename, timeoffset, 1); } diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/series --- a/tools/ioemu/patches/series Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/series Wed Dec 20 15:22:46 2006 +0000 @@ -67,5 +67,5 @@ vnc-monitor-shift-key-processing vnc-monitor-shift-key-processing ide-error-reporting vnc-numpad-handling -xen-mapcache -p3 +xen-mapcache usb-mouse-tablet-status-check -p3 diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/tpm-tis-device --- a/tools/ioemu/patches/tpm-tis-device Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/tpm-tis-device Wed Dec 20 15:22:46 2006 +0000 @@ -22,8 +22,8 @@ Signed-off-by: Stefan Berger <stefanb@us Index: ioemu/Makefile.target =================================================================== ---- ioemu.orig/Makefile.target 2006-12-08 18:33:48.000000000 +0000 -+++ ioemu/Makefile.target 2006-12-08 18:35:14.000000000 +0000 +--- ioemu.orig/Makefile.target 2006-12-20 15:21:55.000000000 +0000 ++++ ioemu/Makefile.target 2006-12-20 15:21:55.000000000 +0000 @@ -369,6 +369,7 @@ VL_OBJS+= piix4acpi.o VL_OBJS+= xenstore.o @@ -34,9 +34,9 @@ Index: ioemu/Makefile.target ifeq ($(TARGET_BASE_ARCH), ppc) Index: ioemu/hw/pc.c =================================================================== ---- ioemu.orig/hw/pc.c 2006-12-08 18:33:47.000000000 +0000 -+++ ioemu/hw/pc.c 2006-12-08 18:33:48.000000000 +0000 -@@ -875,6 +875,9 @@ +--- ioemu.orig/hw/pc.c 2006-12-20 15:21:54.000000000 +0000 ++++ ioemu/hw/pc.c 2006-12-20 15:21:55.000000000 +0000 +@@ -877,6 +877,9 @@ } } @@ -49,7 +49,7 @@ Index: ioemu/hw/tpm_tis.c Index: ioemu/hw/tpm_tis.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ ioemu/hw/tpm_tis.c 2006-12-08 18:35:25.000000000 +0000 ++++ ioemu/hw/tpm_tis.c 2006-12-20 15:21:55.000000000 +0000 @@ -0,0 +1,1120 @@ +/* + * tpm_tis.c - QEMU emulator for a 1.2 TPM with TIS interface @@ -1173,8 +1173,8 @@ Index: ioemu/hw/tpm_tis.c +} Index: ioemu/vl.h =================================================================== ---- ioemu.orig/vl.h 2006-12-08 18:33:48.000000000 +0000 -+++ ioemu/vl.h 2006-12-08 18:35:14.000000000 +0000 +--- ioemu.orig/vl.h 2006-12-20 15:21:55.000000000 +0000 ++++ ioemu/vl.h 2006-12-20 15:21:55.000000000 +0000 @@ -932,6 +932,10 @@ void piix4_pm_init(PCIBus *bus, int devfn); void acpi_bios_init(void); diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/vnc-display-find-unused --- a/tools/ioemu/patches/vnc-display-find-unused Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/vnc-display-find-unused Wed Dec 20 15:22:46 2006 +0000 @@ -1,7 +1,7 @@ Index: ioemu/vnc.c Index: ioemu/vnc.c =================================================================== ---- ioemu.orig/vnc.c 2006-12-08 02:02:36.000000000 +0000 -+++ ioemu/vnc.c 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/vnc.c 2006-12-20 15:21:52.000000000 +0000 ++++ ioemu/vnc.c 2006-12-20 15:21:52.000000000 +0000 @@ -1197,7 +1197,7 @@ } } @@ -50,8 +50,8 @@ Index: ioemu/vnc.c int vnc_start_viewer(int port) Index: ioemu/vl.c =================================================================== ---- ioemu.orig/vl.c 2006-12-08 02:02:36.000000000 +0000 -+++ ioemu/vl.c 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/vl.c 2006-12-20 15:21:51.000000000 +0000 ++++ ioemu/vl.c 2006-12-20 15:21:52.000000000 +0000 @@ -121,6 +121,7 @@ static DisplayState display_state; int nographic; @@ -104,7 +104,7 @@ Index: ioemu/vl.c } } } -@@ -6468,7 +6478,7 @@ +@@ -6460,7 +6470,7 @@ if (nographic) { dumb_display_init(ds); } else if (vnc_display != -1) { @@ -115,8 +115,8 @@ Index: ioemu/vl.c } else { Index: ioemu/vl.h =================================================================== ---- ioemu.orig/vl.h 2006-12-08 02:02:36.000000000 +0000 -+++ ioemu/vl.h 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/vl.h 2006-12-20 15:21:51.000000000 +0000 ++++ ioemu/vl.h 2006-12-20 15:21:52.000000000 +0000 @@ -785,7 +785,7 @@ void cocoa_display_init(DisplayState *ds, int full_screen); diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/vnc-fixes --- a/tools/ioemu/patches/vnc-fixes Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/vnc-fixes Wed Dec 20 15:22:46 2006 +0000 @@ -1,8 +1,8 @@ Index: ioemu/vl.c Index: ioemu/vl.c =================================================================== ---- ioemu.orig/vl.c 2006-12-08 02:02:36.000000000 +0000 -+++ ioemu/vl.c 2006-12-08 02:02:36.000000000 +0000 -@@ -6519,8 +6519,10 @@ +--- ioemu.orig/vl.c 2006-12-20 15:21:51.000000000 +0000 ++++ ioemu/vl.c 2006-12-20 15:21:51.000000000 +0000 +@@ -6511,8 +6511,10 @@ } } @@ -17,8 +17,8 @@ Index: ioemu/vl.c if (use_gdbstub) { Index: ioemu/vnc.c =================================================================== ---- ioemu.orig/vnc.c 2006-12-08 02:02:36.000000000 +0000 -+++ ioemu/vnc.c 2006-12-08 02:02:36.000000000 +0000 +--- ioemu.orig/vnc.c 2006-12-20 15:21:51.000000000 +0000 ++++ ioemu/vnc.c 2006-12-20 15:21:51.000000000 +0000 @@ -3,6 +3,7 @@ * * Copyright (C) 2006 Anthony Liguori <anthony@xxxxxxxxxxxxx> @@ -531,8 +531,8 @@ Index: ioemu/vnc.c } Index: ioemu/vl.h =================================================================== ---- ioemu.orig/vl.h 2006-12-08 02:02:36.000000000 +0000 -+++ ioemu/vl.h 2006-12-08 02:02:36.000000000 +0000 +--- ioemu.orig/vl.h 2006-12-20 15:21:51.000000000 +0000 ++++ ioemu/vl.h 2006-12-20 15:21:51.000000000 +0000 @@ -319,6 +319,7 @@ int is_graphic_console(void); CharDriverState *text_console_init(DisplayState *ds); diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/vnc-listen-specific-interface --- a/tools/ioemu/patches/vnc-listen-specific-interface Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/vnc-listen-specific-interface Wed Dec 20 15:22:46 2006 +0000 @@ -20,8 +20,8 @@ Signed-off-by: Daniel P. Berrange <berr Index: ioemu/vl.c =================================================================== ---- ioemu.orig/vl.c 2006-12-08 02:02:37.000000000 +0000 -+++ ioemu/vl.c 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/vl.c 2006-12-20 15:21:52.000000000 +0000 ++++ ioemu/vl.c 2006-12-20 15:21:52.000000000 +0000 @@ -122,6 +122,7 @@ int nographic; int vncviewer; @@ -114,7 +114,7 @@ Index: ioemu/vl.c } } } -@@ -6478,7 +6493,7 @@ +@@ -6470,7 +6485,7 @@ if (nographic) { dumb_display_init(ds); } else if (vnc_display != -1) { @@ -125,8 +125,8 @@ Index: ioemu/vl.c } else { Index: ioemu/vl.h =================================================================== ---- ioemu.orig/vl.h 2006-12-08 02:02:37.000000000 +0000 -+++ ioemu/vl.h 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/vl.h 2006-12-20 15:21:52.000000000 +0000 ++++ ioemu/vl.h 2006-12-20 15:21:52.000000000 +0000 @@ -37,6 +37,8 @@ #include <unistd.h> #include <fcntl.h> @@ -147,8 +147,8 @@ Index: ioemu/vl.h /* ide.c */ Index: ioemu/vnc.c =================================================================== ---- ioemu.orig/vnc.c 2006-12-08 02:02:37.000000000 +0000 -+++ ioemu/vnc.c 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/vnc.c 2006-12-20 15:21:52.000000000 +0000 ++++ ioemu/vnc.c 2006-12-20 15:21:52.000000000 +0000 @@ -1197,9 +1197,8 @@ } } diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/vnc-password --- a/tools/ioemu/patches/vnc-password Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/vnc-password Wed Dec 20 15:22:46 2006 +0000 @@ -17,8 +17,8 @@ Signed-off-by: Masami Watanabe <masami.w Index: ioemu/Makefile.target =================================================================== ---- ioemu.orig/Makefile.target 2006-12-08 18:20:53.000000000 +0000 -+++ ioemu/Makefile.target 2006-12-08 18:20:53.000000000 +0000 +--- ioemu.orig/Makefile.target 2006-12-20 15:21:55.000000000 +0000 ++++ ioemu/Makefile.target 2006-12-20 15:21:55.000000000 +0000 @@ -407,6 +407,7 @@ VL_OBJS+=sdl.o endif @@ -39,8 +39,8 @@ Index: ioemu/Makefile.target Index: ioemu/vl.c =================================================================== ---- ioemu.orig/vl.c 2006-12-08 18:20:52.000000000 +0000 -+++ ioemu/vl.c 2006-12-08 18:20:53.000000000 +0000 +--- ioemu.orig/vl.c 2006-12-20 15:21:54.000000000 +0000 ++++ ioemu/vl.c 2006-12-20 15:21:55.000000000 +0000 @@ -171,6 +171,9 @@ char domain_name[1024] = { 'H','V', 'M', 'X', 'E', 'N', '-'}; extern int domid; @@ -59,7 +59,7 @@ Index: ioemu/vl.c #ifndef CONFIG_DM #ifdef TARGET_PPC cdrom_index = 1; -@@ -6543,6 +6547,10 @@ +@@ -6535,6 +6539,10 @@ init_ioports(); @@ -72,8 +72,8 @@ Index: ioemu/vl.c dumb_display_init(ds); Index: ioemu/vl.h =================================================================== ---- ioemu.orig/vl.h 2006-12-08 18:20:52.000000000 +0000 -+++ ioemu/vl.h 2006-12-08 18:20:53.000000000 +0000 +--- ioemu.orig/vl.h 2006-12-20 15:21:54.000000000 +0000 ++++ ioemu/vl.h 2006-12-20 15:21:55.000000000 +0000 @@ -1214,6 +1214,7 @@ void xenstore_process_event(void *opaque); void xenstore_check_new_media_present(int timeout); @@ -92,8 +92,8 @@ Index: ioemu/vl.h #endif /* VL_H */ Index: ioemu/vnc.c =================================================================== ---- ioemu.orig/vnc.c 2006-12-08 18:20:52.000000000 +0000 -+++ ioemu/vnc.c 2006-12-08 18:20:53.000000000 +0000 +--- ioemu.orig/vnc.c 2006-12-20 15:21:52.000000000 +0000 ++++ ioemu/vnc.c 2006-12-20 15:21:55.000000000 +0000 @@ -44,6 +44,7 @@ #include "vnc_keysym.h" @@ -244,8 +244,8 @@ Index: ioemu/vnc.c +} Index: ioemu/xenstore.c =================================================================== ---- ioemu.orig/xenstore.c 2006-12-08 18:20:52.000000000 +0000 -+++ ioemu/xenstore.c 2006-12-08 18:20:53.000000000 +0000 +--- ioemu.orig/xenstore.c 2006-12-20 15:21:54.000000000 +0000 ++++ ioemu/xenstore.c 2006-12-20 15:21:55.000000000 +0000 @@ -213,3 +213,54 @@ free(portstr); free(buf); @@ -304,7 +304,7 @@ Index: ioemu/d3des.c Index: ioemu/d3des.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ ioemu/d3des.c 2006-12-08 18:20:53.000000000 +0000 ++++ ioemu/d3des.c 2006-12-20 15:21:55.000000000 +0000 @@ -0,0 +1,434 @@ +/* + * This is D3DES (V5.09) by Richard Outerbridge with the double and @@ -743,7 +743,7 @@ Index: ioemu/d3des.h Index: ioemu/d3des.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ ioemu/d3des.h 2006-12-08 18:20:53.000000000 +0000 ++++ ioemu/d3des.h 2006-12-20 15:21:55.000000000 +0000 @@ -0,0 +1,51 @@ +/* + * This is D3DES (V5.09) by Richard Outerbridge with the double and diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/vnc-start-vncviewer --- a/tools/ioemu/patches/vnc-start-vncviewer Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/vnc-start-vncviewer Wed Dec 20 15:22:46 2006 +0000 @@ -1,7 +1,7 @@ Index: ioemu/vnc.c Index: ioemu/vnc.c =================================================================== ---- ioemu.orig/vnc.c 2006-12-08 02:02:36.000000000 +0000 -+++ ioemu/vnc.c 2006-12-08 02:02:36.000000000 +0000 +--- ioemu.orig/vnc.c 2006-12-20 15:21:51.000000000 +0000 ++++ ioemu/vnc.c 2006-12-20 15:21:51.000000000 +0000 @@ -1189,3 +1189,25 @@ vnc_dpy_resize(vs->ds, 640, 400); @@ -30,8 +30,8 @@ Index: ioemu/vnc.c +} Index: ioemu/vl.c =================================================================== ---- ioemu.orig/vl.c 2006-12-08 02:02:36.000000000 +0000 -+++ ioemu/vl.c 2006-12-08 02:02:36.000000000 +0000 +--- ioemu.orig/vl.c 2006-12-20 15:21:51.000000000 +0000 ++++ ioemu/vl.c 2006-12-20 15:21:51.000000000 +0000 @@ -120,6 +120,7 @@ int bios_size; static DisplayState display_state; @@ -82,7 +82,7 @@ Index: ioemu/vl.c } } } -@@ -6461,6 +6469,8 @@ +@@ -6453,6 +6461,8 @@ dumb_display_init(ds); } else if (vnc_display != -1) { vnc_display_init(ds, vnc_display); @@ -93,8 +93,8 @@ Index: ioemu/vl.c sdl_display_init(ds, full_screen); Index: ioemu/vl.h =================================================================== ---- ioemu.orig/vl.h 2006-12-08 02:02:36.000000000 +0000 -+++ ioemu/vl.h 2006-12-08 02:02:36.000000000 +0000 +--- ioemu.orig/vl.h 2006-12-20 15:21:51.000000000 +0000 ++++ ioemu/vl.h 2006-12-20 15:21:51.000000000 +0000 @@ -786,6 +786,7 @@ /* vnc.c */ diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/xen-mapcache --- a/tools/ioemu/patches/xen-mapcache Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/xen-mapcache Wed Dec 20 15:22:46 2006 +0000 @@ -15,22 +15,179 @@ Signed-off-by: Dexuan Cui <dexuan.cui@in Signed-off-by: Dexuan Cui <dexuan.cui@xxxxxxxxx> Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> -diff -r 3f0ca90351e2 -r 67a06a9b7b1d tools/ioemu/target-i386-dm/cpu.h ---- a/tools/ioemu/target-i386-dm/cpu.h Thu Dec 07 10:54:43 2006 +0000 -+++ b/tools/ioemu/target-i386-dm/cpu.h Thu Dec 07 11:12:52 2006 +0000 -@@ -25,7 +25,8 @@ - #ifdef TARGET_X86_64 - #define TARGET_LONG_BITS 64 - #else --#define TARGET_LONG_BITS 32 -+/* #define TARGET_LONG_BITS 32 */ -+#define TARGET_LONG_BITS 64 /* for Qemu map cache */ - #endif - - /* target supports implicit self modifying code */ -diff -r 3f0ca90351e2 -r 67a06a9b7b1d tools/ioemu/target-i386-dm/exec-dm.c ---- a/tools/ioemu/target-i386-dm/exec-dm.c Thu Dec 07 10:54:43 2006 +0000 -+++ b/tools/ioemu/target-i386-dm/exec-dm.c Thu Dec 07 11:12:52 2006 +0000 +Index: ioemu/vl.c +=================================================================== +--- ioemu.orig/vl.c 2006-12-20 15:12:08.000000000 +0000 ++++ ioemu/vl.c 2006-12-20 15:13:00.000000000 +0000 +@@ -5808,6 +5808,91 @@ + return 0; + } + ++#if defined(__i386__) || defined(__x86_64__) ++static struct map_cache *mapcache_entry; ++static unsigned long nr_buckets; ++ ++static int qemu_map_cache_init(unsigned long nr_pages) ++{ ++ unsigned long max_pages = MAX_MCACHE_SIZE >> PAGE_SHIFT; ++ int i; ++ ++ if (nr_pages < max_pages) ++ max_pages = nr_pages; ++ ++ nr_buckets = max_pages + (1UL << (MCACHE_BUCKET_SHIFT - PAGE_SHIFT)) - 1; ++ nr_buckets >>= (MCACHE_BUCKET_SHIFT - PAGE_SHIFT); ++ fprintf(logfile, "qemu_map_cache_init nr_buckets = %lx\n", nr_buckets); ++ ++ mapcache_entry = malloc(nr_buckets * sizeof(struct map_cache)); ++ if (mapcache_entry == NULL) { ++ errno = ENOMEM; ++ return -1; ++ } ++ ++ memset(mapcache_entry, 0, nr_buckets * sizeof(struct map_cache)); ++ ++ /* ++ * To avoid ENOMEM from xc_map_foreign_batch() at runtime, we ++ * pre-fill all the map caches in advance. ++ */ ++ for (i = 0; i < nr_buckets; i++) ++ (void)qemu_map_cache(((target_phys_addr_t)i) << MCACHE_BUCKET_SHIFT); ++ ++ return 0; ++} ++ ++uint8_t *qemu_map_cache(target_phys_addr_t phys_addr) ++{ ++ struct map_cache *entry; ++ unsigned long address_index = phys_addr >> MCACHE_BUCKET_SHIFT; ++ unsigned long address_offset = phys_addr & (MCACHE_BUCKET_SIZE-1); ++ ++ /* For most cases (>99.9%), the page address is the same. */ ++ static unsigned long last_address_index = ~0UL; ++ static uint8_t *last_address_vaddr; ++ ++ if (address_index == last_address_index) ++ return last_address_vaddr + address_offset; ++ ++ entry = &mapcache_entry[address_index % nr_buckets]; ++ ++ if (entry->vaddr_base == NULL || entry->paddr_index != address_index) { ++ /* We need to remap a bucket. */ ++ uint8_t *vaddr_base; ++ unsigned long pfns[MCACHE_BUCKET_SIZE >> PAGE_SHIFT]; ++ unsigned int i; ++ ++ if (entry->vaddr_base != NULL) { ++ errno = munmap(entry->vaddr_base, MCACHE_BUCKET_SIZE); ++ if (errno) { ++ fprintf(logfile, "unmap fails %d\n", errno); ++ exit(-1); ++ } ++ } ++ ++ for (i = 0; i < MCACHE_BUCKET_SIZE >> PAGE_SHIFT; i++) ++ pfns[i] = (address_index << (MCACHE_BUCKET_SHIFT-PAGE_SHIFT)) + i; ++ ++ vaddr_base = xc_map_foreign_batch( ++ xc_handle, domid, PROT_READ|PROT_WRITE, ++ pfns, MCACHE_BUCKET_SIZE >> PAGE_SHIFT); ++ if (vaddr_base == NULL) { ++ fprintf(logfile, "xc_map_foreign_batch error %d\n", errno); ++ exit(-1); ++ } ++ ++ entry->vaddr_base = vaddr_base; ++ entry->paddr_index = address_index;; ++ } ++ ++ last_address_index = address_index; ++ last_address_vaddr = entry->vaddr_base; ++ ++ return last_address_vaddr + address_offset; ++} ++#endif ++ + int main(int argc, char **argv) + { + #ifdef CONFIG_GDBSTUB +@@ -6130,6 +6215,7 @@ + break; + case QEMU_OPTION_m: + ram_size = atol(optarg) * 1024 * 1024; ++ ram_size = (uint64_t)atol(optarg) * 1024 * 1024; + if (ram_size <= 0) + help(); + #ifndef CONFIG_DM +@@ -6404,50 +6490,41 @@ + shared_page_nr = nr_pages - 1; + #endif + +- page_array = (xen_pfn_t *)malloc(tmp_nr_pages * sizeof(xen_pfn_t)); +- if (page_array == NULL) { +- fprintf(logfile, "malloc returned error %d\n", errno); +- exit(-1); +- } +- + #if defined(__i386__) || defined(__x86_64__) +- for ( i = 0; i < tmp_nr_pages; i++) +- page_array[i] = i; + +- phys_ram_base = xc_map_foreign_batch(xc_handle, domid, +- PROT_READ|PROT_WRITE, page_array, +- tmp_nr_pages); +- if (phys_ram_base == NULL) { +- fprintf(logfile, "batch map guest memory returned error %d\n", errno); ++ if ( qemu_map_cache_init(tmp_nr_pages) ) ++ { ++ fprintf(logfile, "qemu_map_cache_init returned: error %d\n", errno); + exit(-1); + } + + shared_page = xc_map_foreign_range(xc_handle, domid, PAGE_SIZE, +- PROT_READ|PROT_WRITE, +- page_array[shared_page_nr]); ++ PROT_READ|PROT_WRITE, shared_page_nr); + if (shared_page == NULL) { + fprintf(logfile, "map shared IO page returned error %d\n", errno); + exit(-1); + } + +- fprintf(logfile, "shared page at pfn:%lx, mfn: %"PRIx64"\n", +- shared_page_nr, (uint64_t)(page_array[shared_page_nr])); ++ fprintf(logfile, "shared page at pfn:%lx\n", shared_page_nr); + + buffered_io_page = xc_map_foreign_range(xc_handle, domid, PAGE_SIZE, + PROT_READ|PROT_WRITE, +- page_array[shared_page_nr - 2]); ++ shared_page_nr - 2); + if (buffered_io_page == NULL) { + fprintf(logfile, "map buffered IO page returned error %d\n", errno); + exit(-1); + } + +- fprintf(logfile, "buffered io page at pfn:%lx, mfn: %"PRIx64"\n", +- shared_page_nr - 2, (uint64_t)(page_array[shared_page_nr - 2])); +- +- free(page_array); ++ fprintf(logfile, "buffered io page at pfn:%lx\n", shared_page_nr - 2); + + #elif defined(__ia64__) +- ++ ++ page_array = (xen_pfn_t *)malloc(tmp_nr_pages * sizeof(xen_pfn_t)); ++ if (page_array == NULL) { ++ fprintf(logfile, "malloc returned error %d\n", errno); ++ exit(-1); ++ } ++ + shared_page = xc_map_foreign_range(xc_handle, domid, PAGE_SIZE, + PROT_READ|PROT_WRITE, + IO_PAGE_START >> PAGE_SHIFT); +Index: ioemu/target-i386-dm/exec-dm.c +=================================================================== +--- ioemu.orig/target-i386-dm/exec-dm.c 2006-12-20 15:10:13.000000000 +0000 ++++ ioemu/target-i386-dm/exec-dm.c 2006-12-20 15:12:13.000000000 +0000 @@ -36,6 +36,7 @@ #include "cpu.h" @@ -39,7 +196,51 @@ diff -r 3f0ca90351e2 -r 67a06a9b7b1d too //#define DEBUG_TB_INVALIDATE //#define DEBUG_FLUSH -@@ -426,6 +427,12 @@ static inline int paddr_is_ram(target_ph +@@ -127,10 +128,28 @@ + FILE *logfile; + int loglevel; + ++ ++#if defined(__i386__) || defined(__x86_64__) ++#define MAPCACHE ++#endif ++ ++#ifdef MAPCACHE ++static pthread_mutex_t mapcache_mutex; ++#define mapcache_lock() pthread_mutex_lock(&mapcache_mutex) ++#define mapcache_unlock() pthread_mutex_unlock(&mapcache_mutex) ++#else ++#define mapcache_lock() ( (void)0 ) ++#define mapcache_unlock() ( (void)0 ) ++#endif ++ ++ + void cpu_exec_init(CPUState *env) + { + CPUState **penv; + int cpu_index; ++#ifdef MAPCACHE ++ pthread_mutexattr_t mxattr; ++#endif + + env->next_cpu = NULL; + penv = &first_cpu; +@@ -144,6 +163,14 @@ + + /* alloc dirty bits array */ + phys_ram_dirty = qemu_malloc(phys_ram_size >> TARGET_PAGE_BITS); ++ ++#ifdef MAPCACHE ++ /* setup memory access mutex to protect mapcache */ ++ pthread_mutexattr_init(&mxattr); ++ pthread_mutexattr_settype(&mxattr, PTHREAD_MUTEX_RECURSIVE); ++ pthread_mutex_init(&mapcache_mutex, &mxattr); ++ pthread_mutexattr_destroy(&mxattr); ++#endif + } + + /* enable or disable low levels log */ +@@ -426,19 +453,27 @@ #endif } @@ -52,7 +253,15 @@ diff -r 3f0ca90351e2 -r 67a06a9b7b1d too void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf, int len, int is_write) { -@@ -438,7 +445,7 @@ void cpu_physical_memory_rw(target_phys_ + int l, io_index; + uint8_t *ptr; + uint32_t val; +- ++ ++ mapcache_lock(); ++ + while (len > 0) { + /* How much can we copy before the next page boundary? */ l = TARGET_PAGE_SIZE - (addr & ~TARGET_PAGE_MASK); if (l > len) l = len; @@ -61,7 +270,7 @@ diff -r 3f0ca90351e2 -r 67a06a9b7b1d too io_index = iomem_index(addr); if (is_write) { if (io_index) { -@@ -460,9 +467,10 @@ void cpu_physical_memory_rw(target_phys_ +@@ -460,9 +495,10 @@ } } else if (paddr_is_ram(addr)) { /* Reading from RAM */ @@ -74,7 +283,7 @@ diff -r 3f0ca90351e2 -r 67a06a9b7b1d too #endif } } else { -@@ -485,7 +493,8 @@ void cpu_physical_memory_rw(target_phys_ +@@ -485,7 +521,8 @@ } } else if (paddr_is_ram(addr)) { /* Reading from RAM */ @@ -84,194 +293,20 @@ diff -r 3f0ca90351e2 -r 67a06a9b7b1d too } else { /* Neither RAM nor known MMIO space */ memset(buf, 0xff, len); -diff -r 3f0ca90351e2 -r 67a06a9b7b1d tools/ioemu/vl.c ---- a/tools/ioemu/vl.c Thu Dec 07 10:54:43 2006 +0000 -+++ b/tools/ioemu/vl.c Thu Dec 07 11:12:52 2006 +0000 -@@ -5807,6 +5807,92 @@ int set_mm_mapping(int xc_handle, uint32 - - return 0; - } -+ -+#if defined(__i386__) || defined(__x86_64__) -+static struct map_cache *mapcache_entry; -+static unsigned long nr_buckets; -+ -+static int qemu_map_cache_init(unsigned long nr_pages) -+{ -+ unsigned long max_pages = MAX_MCACHE_SIZE >> PAGE_SHIFT; -+ int i; -+ -+ if (nr_pages < max_pages) -+ max_pages = nr_pages; -+ -+ nr_buckets = (max_pages << PAGE_SHIFT) >> MCACHE_BUCKET_SHIFT; -+ -+ fprintf(logfile, "qemu_map_cache_init nr_buckets = %lx\n", nr_buckets); -+ -+ mapcache_entry = malloc(nr_buckets * sizeof(struct map_cache)); -+ if (mapcache_entry == NULL) { -+ errno = ENOMEM; -+ return -1; -+ } -+ -+ memset(mapcache_entry, 0, nr_buckets * sizeof(struct map_cache)); -+ -+ /* -+ * To avoid ENOMEM from xc_map_foreign_batch() at runtime, we -+ * pre-fill all the map caches in advance. -+ */ -+ for (i = 0; i < nr_buckets; i++) -+ (void)qemu_map_cache(((target_phys_addr_t)i) << MCACHE_BUCKET_SHIFT); -+ -+ return 0; -+} -+ -+uint8_t *qemu_map_cache(target_phys_addr_t phys_addr) -+{ -+ struct map_cache *entry; -+ unsigned long address_index = phys_addr >> MCACHE_BUCKET_SHIFT; -+ unsigned long address_offset = phys_addr & (MCACHE_BUCKET_SIZE-1); -+ -+ /* For most cases (>99.9%), the page address is the same. */ -+ static unsigned long last_address_index = ~0UL; -+ static uint8_t *last_address_vaddr; -+ -+ if (address_index == last_address_index) -+ return last_address_vaddr + address_offset; -+ -+ entry = &mapcache_entry[address_index % nr_buckets]; -+ -+ if (entry->vaddr_base == NULL || entry->paddr_index != address_index) -+ { -+ /* We need to remap a bucket. */ -+ uint8_t *vaddr_base; -+ unsigned long pfns[MCACHE_BUCKET_SIZE >> PAGE_SHIFT]; -+ unsigned int i; -+ -+ if (entry->vaddr_base != NULL) { -+ errno = munmap(entry->vaddr_base, MCACHE_BUCKET_SIZE); -+ if (errno) { -+ fprintf(logfile, "unmap fails %d\n", errno); -+ exit(-1); -+ } -+ } -+ -+ for (i = 0; i < MCACHE_BUCKET_SIZE >> PAGE_SHIFT; i++) -+ pfns[i] = (address_index << (MCACHE_BUCKET_SHIFT-PAGE_SHIFT)) + i; -+ -+ vaddr_base = xc_map_foreign_batch( -+ xc_handle, domid, PROT_READ|PROT_WRITE, -+ pfns, MCACHE_BUCKET_SIZE >> PAGE_SHIFT); -+ if (vaddr_base == NULL) { -+ fprintf(logfile, "xc_map_foreign_batch error %d\n", errno); -+ exit(-1); -+ } -+ -+ entry->vaddr_base = vaddr_base; -+ entry->paddr_index = address_index;; -+ } -+ -+ last_address_index = address_index; -+ last_address_vaddr = entry->vaddr_base; -+ -+ return last_address_vaddr + address_offset; -+} -+#endif - - int main(int argc, char **argv) - { -@@ -6130,6 +6216,7 @@ int main(int argc, char **argv) - break; - case QEMU_OPTION_m: - ram_size = atol(optarg) * 1024 * 1024; -+ ram_size = (uint64_t)atol(optarg) * 1024 * 1024; - if (ram_size <= 0) - help(); - #ifndef CONFIG_DM -@@ -6400,50 +6487,41 @@ int main(int argc, char **argv) - shared_page_nr = nr_pages - 1; - #endif - -+#if defined(__i386__) || defined(__x86_64__) -+ -+ if ( qemu_map_cache_init(tmp_nr_pages) ) -+ { -+ fprintf(logfile, "qemu_map_cache_init returned: error %d\n", errno); -+ exit(-1); -+ } -+ -+ shared_page = xc_map_foreign_range(xc_handle, domid, PAGE_SIZE, -+ PROT_READ|PROT_WRITE, shared_page_nr); -+ if (shared_page == NULL) { -+ fprintf(logfile, "map shared IO page returned error %d\n", errno); -+ exit(-1); -+ } -+ -+ fprintf(logfile, "shared page at pfn:%lx\n", shared_page_nr); -+ -+ buffered_io_page = xc_map_foreign_range(xc_handle, domid, PAGE_SIZE, -+ PROT_READ|PROT_WRITE, -+ shared_page_nr - 2); -+ if (buffered_io_page == NULL) { -+ fprintf(logfile, "map buffered IO page returned error %d\n", errno); -+ exit(-1); -+ } -+ -+ fprintf(logfile, "buffered io page at pfn:%lx\n", shared_page_nr - 2); -+ -+#elif defined(__ia64__) -+ - page_array = (xen_pfn_t *)malloc(tmp_nr_pages * sizeof(xen_pfn_t)); - if (page_array == NULL) { - fprintf(logfile, "malloc returned error %d\n", errno); - exit(-1); - } - --#if defined(__i386__) || defined(__x86_64__) -- for ( i = 0; i < tmp_nr_pages; i++) -- page_array[i] = i; -- -- phys_ram_base = xc_map_foreign_batch(xc_handle, domid, -- PROT_READ|PROT_WRITE, page_array, -- tmp_nr_pages); -- if (phys_ram_base == NULL) { -- fprintf(logfile, "batch map guest memory returned error %d\n", errno); -- exit(-1); -- } -- -- shared_page = xc_map_foreign_range(xc_handle, domid, PAGE_SIZE, -- PROT_READ|PROT_WRITE, -- page_array[shared_page_nr]); -- if (shared_page == NULL) { -- fprintf(logfile, "map shared IO page returned error %d\n", errno); -- exit(-1); -- } -- -- fprintf(logfile, "shared page at pfn:%lx, mfn: %"PRIx64"\n", -- shared_page_nr, (uint64_t)(page_array[shared_page_nr])); -- -- buffered_io_page = xc_map_foreign_range(xc_handle, domid, PAGE_SIZE, -- PROT_READ|PROT_WRITE, -- page_array[shared_page_nr - 2]); -- if (buffered_io_page == NULL) { -- fprintf(logfile, "map buffered IO page returned error %d\n", errno); -- exit(-1); -- } -- -- fprintf(logfile, "buffered io page at pfn:%lx, mfn: %"PRIx64"\n", -- shared_page_nr - 2, (uint64_t)(page_array[shared_page_nr - 2])); -- -- free(page_array); -- --#elif defined(__ia64__) -- - if (xc_ia64_get_pfn_list(xc_handle, domid, page_array, - IO_PAGE_START >> PAGE_SHIFT, 3) != 3) { - fprintf(logfile, "xc_ia64_get_pfn_list returned error %d\n", errno); -diff -r 3f0ca90351e2 -r 67a06a9b7b1d tools/ioemu/vl.h ---- a/tools/ioemu/vl.h Thu Dec 07 10:54:43 2006 +0000 -+++ b/tools/ioemu/vl.h Thu Dec 07 11:12:52 2006 +0000 -@@ -156,6 +156,26 @@ extern void *shared_vram; +@@ -495,6 +532,8 @@ + buf += l; + addr += l; + } ++ ++ mapcache_unlock(); + } + #endif + +Index: ioemu/vl.h +=================================================================== +--- ioemu.orig/vl.h 2006-12-20 15:12:08.000000000 +0000 ++++ ioemu/vl.h 2006-12-20 15:12:13.000000000 +0000 +@@ -156,6 +156,26 @@ extern FILE *logfile; @@ -298,3 +333,17 @@ diff -r 3f0ca90351e2 -r 67a06a9b7b1d too extern int xc_handle; extern int domid; +Index: ioemu/target-i386-dm/cpu.h +=================================================================== +--- ioemu.orig/target-i386-dm/cpu.h 2006-12-20 15:10:13.000000000 +0000 ++++ ioemu/target-i386-dm/cpu.h 2006-12-20 15:12:13.000000000 +0000 +@@ -25,7 +25,8 @@ + #ifdef TARGET_X86_64 + #define TARGET_LONG_BITS 64 + #else +-#define TARGET_LONG_BITS 32 ++/* #define TARGET_LONG_BITS 32 */ ++#define TARGET_LONG_BITS 64 /* for Qemu map cache */ + #endif + + /* target supports implicit self modifying code */ diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/xen-support-buffered-ioreqs --- a/tools/ioemu/patches/xen-support-buffered-ioreqs Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/xen-support-buffered-ioreqs Wed Dec 20 15:22:46 2006 +0000 @@ -1,7 +1,7 @@ Index: ioemu/vl.c Index: ioemu/vl.c =================================================================== ---- ioemu.orig/vl.c 2006-12-08 02:02:37.000000000 +0000 -+++ ioemu/vl.c 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/vl.c 2006-12-20 15:21:54.000000000 +0000 ++++ ioemu/vl.c 2006-12-20 15:21:54.000000000 +0000 @@ -5838,6 +5838,7 @@ unsigned long nr_pages, tmp_nr_pages, shared_page_nr; xen_pfn_t *page_array; @@ -10,7 +10,7 @@ Index: ioemu/vl.c char qemu_dm_logfilename[64]; -@@ -6418,6 +6419,17 @@ +@@ -6422,6 +6423,17 @@ fprintf(logfile, "shared page at pfn:%lx, mfn: %"PRIx64"\n", shared_page_nr, (uint64_t)(page_array[shared_page_nr])); @@ -30,8 +30,8 @@ Index: ioemu/vl.c #elif defined(__ia64__) Index: ioemu/target-i386-dm/helper2.c =================================================================== ---- ioemu.orig/target-i386-dm/helper2.c 2006-12-08 02:02:35.000000000 +0000 -+++ ioemu/target-i386-dm/helper2.c 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/target-i386-dm/helper2.c 2006-12-20 15:21:47.000000000 +0000 ++++ ioemu/target-i386-dm/helper2.c 2006-12-20 15:21:54.000000000 +0000 @@ -76,6 +76,10 @@ shared_iopage_t *shared_page = NULL; diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/xenstore-block-device-config --- a/tools/ioemu/patches/xenstore-block-device-config Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/xenstore-block-device-config Wed Dec 20 15:22:46 2006 +0000 @@ -1,7 +1,7 @@ Index: ioemu/Makefile.target Index: ioemu/Makefile.target =================================================================== ---- ioemu.orig/Makefile.target 2006-12-08 02:02:36.000000000 +0000 -+++ ioemu/Makefile.target 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/Makefile.target 2006-12-20 15:21:51.000000000 +0000 ++++ ioemu/Makefile.target 2006-12-20 15:21:53.000000000 +0000 @@ -359,6 +359,7 @@ VL_OBJS+= cirrus_vga.o mixeng.o parallel.o acpi.o piix_pci.o VL_OBJS+= usb-uhci.o @@ -13,7 +13,7 @@ Index: ioemu/xenstore.c Index: ioemu/xenstore.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ ioemu/xenstore.c 2006-12-08 02:02:37.000000000 +0000 ++++ ioemu/xenstore.c 2006-12-20 15:21:53.000000000 +0000 @@ -0,0 +1,187 @@ +/* + * This file is subject to the terms and conditions of the GNU General @@ -204,8 +204,8 @@ Index: ioemu/xenstore.c +} Index: ioemu/vl.c =================================================================== ---- ioemu.orig/vl.c 2006-12-08 02:02:37.000000000 +0000 -+++ ioemu/vl.c 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/vl.c 2006-12-20 15:21:52.000000000 +0000 ++++ ioemu/vl.c 2006-12-20 15:21:53.000000000 +0000 @@ -5256,9 +5256,11 @@ "Standard options:\n" "-M machine select emulated machine (-M ? for list)\n" @@ -359,7 +359,7 @@ Index: ioemu/vl.c setvbuf(stdout, NULL, _IOLBF, 0); -@@ -6441,6 +6472,7 @@ +@@ -6433,6 +6464,7 @@ #endif /* !CONFIG_DM */ @@ -367,7 +367,7 @@ Index: ioemu/vl.c /* we always create the cdrom drive, even if no disk is there */ bdrv_init(); if (cdrom_index >= 0) { -@@ -6467,6 +6499,7 @@ +@@ -6459,6 +6491,7 @@ } } } @@ -375,7 +375,7 @@ Index: ioemu/vl.c /* we always create at least one floppy disk */ fd_table[0] = bdrv_new("fda"); -@@ -6545,6 +6578,8 @@ +@@ -6537,6 +6570,8 @@ } } @@ -386,8 +386,8 @@ Index: ioemu/vl.c kernel_filename, kernel_cmdline, initrd_filename, Index: ioemu/monitor.c =================================================================== ---- ioemu.orig/monitor.c 2006-12-08 02:02:35.000000000 +0000 -+++ ioemu/monitor.c 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/monitor.c 2006-12-20 15:21:47.000000000 +0000 ++++ ioemu/monitor.c 2006-12-20 15:21:53.000000000 +0000 @@ -24,6 +24,7 @@ #include "vl.h" #include "disas.h" @@ -416,8 +416,8 @@ Index: ioemu/monitor.c int i; Index: ioemu/block.c =================================================================== ---- ioemu.orig/block.c 2006-12-08 02:02:06.000000000 +0000 -+++ ioemu/block.c 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/block.c 2006-12-20 15:21:31.000000000 +0000 ++++ ioemu/block.c 2006-12-20 15:21:53.000000000 +0000 @@ -758,6 +758,7 @@ static void raw_close(BlockDriverState *bs) { @@ -428,8 +428,8 @@ Index: ioemu/block.c Index: ioemu/vl.h =================================================================== ---- ioemu.orig/vl.h 2006-12-08 02:02:37.000000000 +0000 -+++ ioemu/vl.h 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/vl.h 2006-12-20 15:21:52.000000000 +0000 ++++ ioemu/vl.h 2006-12-20 15:21:53.000000000 +0000 @@ -1191,6 +1191,8 @@ void term_print_help(void); void monitor_readline(const char *prompt, int is_password, @@ -455,8 +455,8 @@ Index: ioemu/vl.h extern char domain_name[]; Index: ioemu/hw/ide.c =================================================================== ---- ioemu.orig/hw/ide.c 2006-12-08 02:02:35.000000000 +0000 -+++ ioemu/hw/ide.c 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/hw/ide.c 2006-12-20 15:21:49.000000000 +0000 ++++ ioemu/hw/ide.c 2006-12-20 15:21:53.000000000 +0000 @@ -1158,6 +1158,7 @@ } else { ide_atapi_cmd_error(s, SENSE_NOT_READY, diff -r 4fb80f21c77d -r f58b0c778b90 tools/ioemu/patches/xenstore-write-vnc-port --- a/tools/ioemu/patches/xenstore-write-vnc-port Wed Dec 20 15:16:13 2006 +0000 +++ b/tools/ioemu/patches/xenstore-write-vnc-port Wed Dec 20 15:22:46 2006 +0000 @@ -1,7 +1,7 @@ Index: ioemu/xenstore.c Index: ioemu/xenstore.c =================================================================== ---- ioemu.orig/xenstore.c 2006-12-08 02:02:37.000000000 +0000 -+++ ioemu/xenstore.c 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/xenstore.c 2006-12-20 15:21:53.000000000 +0000 ++++ ioemu/xenstore.c 2006-12-20 15:21:54.000000000 +0000 @@ -185,3 +185,31 @@ free(image); free(vec); @@ -36,9 +36,9 @@ Index: ioemu/xenstore.c +} Index: ioemu/vl.c =================================================================== ---- ioemu.orig/vl.c 2006-12-08 02:02:37.000000000 +0000 -+++ ioemu/vl.c 2006-12-08 02:02:37.000000000 +0000 -@@ -6535,6 +6535,7 @@ +--- ioemu.orig/vl.c 2006-12-20 15:21:53.000000000 +0000 ++++ ioemu/vl.c 2006-12-20 15:21:54.000000000 +0000 +@@ -6527,6 +6527,7 @@ vnc_display = vnc_display_init(ds, vnc_display, vncunused, &vnclisten_addr); if (vncviewer) vnc_start_viewer(vnc_display); @@ -48,8 +48,8 @@ Index: ioemu/vl.c sdl_display_init(ds, full_screen); Index: ioemu/vl.h =================================================================== ---- ioemu.orig/vl.h 2006-12-08 02:02:37.000000000 +0000 -+++ ioemu/vl.h 2006-12-08 02:02:37.000000000 +0000 +--- ioemu.orig/vl.h 2006-12-20 15:21:53.000000000 +0000 ++++ ioemu/vl.h 2006-12-20 15:21:54.000000000 +0000 @@ -1210,6 +1210,7 @@ int xenstore_fd(void); void xenstore_process_event(void *opaque); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |