[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.