]> git.proxmox.com Git - qemu.git/commitdiff
Merge remote-tracking branch 'qemu-kvm/memory/page_desc' into staging
authorAnthony Liguori <aliguori@us.ibm.com>
Tue, 3 Jan 2012 20:39:05 +0000 (14:39 -0600)
committerAnthony Liguori <aliguori@us.ibm.com>
Tue, 3 Jan 2012 20:39:05 +0000 (14:39 -0600)
* qemu-kvm/memory/page_desc: (22 commits)
  Remove cpu_get_physical_page_desc()
  sparc: avoid cpu_get_physical_page_desc()
  virtio-balloon: avoid cpu_get_physical_page_desc()
  vhost: avoid cpu_get_physical_page_desc()
  kvm: avoid cpu_get_physical_page_desc()
  memory: remove CPUPhysMemoryClient
  xen: convert to MemoryListener API
  memory: temporarily add memory_region_get_ram_addr()
  xen, vga: add API for registering the framebuffer
  vhost: convert to MemoryListener API
  kvm: convert to MemoryListener API
  kvm: switch kvm slots to use host virtual address instead of ram_addr_t
  memory: add API for observing updates to the physical memory map
  memory: replace cpu_physical_sync_dirty_bitmap() with a memory API
  framebuffer: drop use of cpu_physical_sync_dirty_bitmap()
  loader: remove calls to cpu_get_physical_page_desc()
  framebuffer: drop use of cpu_get_physical_page_desc()
  memory: introduce memory_region_find()
  memory: add memory_region_is_logging()
  memory: add memory_region_is_rom()
  ...

1  2 
arch_init.c
hw/sysbus.c
target-i386/kvm.c
trace-events

diff --combined arch_init.c
index d4c92b0a456be86ba7fab50c1eeff9da8b0189c0,ceef26ef1736ab82b066f9b69a6fa7915de3392a..847bf4edd64e0647158cf6c8e87146cd9bb78ac8
@@@ -41,6 -41,7 +41,7 @@@
  #include "net.h"
  #include "gdbstub.h"
  #include "hw/smbios.h"
+ #include "exec-memory.h"
  
  #ifdef TARGET_SPARC
  int graphic_width = 1024;
@@@ -263,10 -264,7 +264,7 @@@ int ram_save_live(Monitor *mon, QEMUFil
          return 0;
      }
  
-     if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) {
-         qemu_file_set_error(f, -EINVAL);
-         return -EINVAL;
-     }
+     memory_global_sync_dirty_bitmap(get_system_memory());
  
      if (stage == 1) {
          RAMBlock *block;
@@@ -473,7 -471,7 +471,7 @@@ struct soundhw 
      int enabled;
      int isa;
      union {
 -        int (*init_isa) (qemu_irq *pic);
 +        int (*init_isa) (ISABus *bus);
          int (*init_pci) (PCIBus *bus);
      } init;
  };
@@@ -628,15 -626,15 +626,15 @@@ void select_soundhw(const char *optarg
      }
  }
  
 -void audio_init(qemu_irq *isa_pic, PCIBus *pci_bus)
 +void audio_init(ISABus *isa_bus, PCIBus *pci_bus)
  {
      struct soundhw *c;
  
      for (c = soundhw; c->name; ++c) {
          if (c->enabled) {
              if (c->isa) {
 -                if (isa_pic) {
 -                    c->init.init_isa(isa_pic);
 +                if (isa_bus) {
 +                    c->init.init_isa(isa_bus);
                  }
              } else {
                  if (pci_bus) {
  void select_soundhw(const char *optarg)
  {
  }
 -void audio_init(qemu_irq *isa_pic, PCIBus *pci_bus)
 +void audio_init(ISABus *isa_bus, PCIBus *pci_bus)
  {
  }
  #endif
diff --combined hw/sysbus.c
index 24f619f65c09fac11ed857ed81c998a5e0df6ae3,7016903163859f2b13168dfb992109c73dfeeef2..2e06fe823c901c40ab751b318f0a0756d49e3a36
@@@ -50,12 -50,17 +50,12 @@@ void sysbus_mmio_map(SysBusDevice *dev
      }
      if (dev->mmio[n].addr != (target_phys_addr_t)-1) {
          /* Unregister previous mapping.  */
 -        if (dev->mmio[n].memory) {
 -            memory_region_del_subregion(get_system_memory(),
 -                                        dev->mmio[n].memory);
 -        }
 +        memory_region_del_subregion(get_system_memory(), dev->mmio[n].memory);
      }
      dev->mmio[n].addr = addr;
 -    if (dev->mmio[n].memory) {
 -        memory_region_add_subregion(get_system_memory(),
 -                                    addr,
 -                                    dev->mmio[n].memory);
 -    }
 +    memory_region_add_subregion(get_system_memory(),
 +                                addr,
 +                                dev->mmio[n].memory);
  }
  
  
@@@ -201,7 -206,10 +201,7 @@@ static void sysbus_dev_print(Monitor *m
  
      monitor_printf(mon, "%*sirq %d\n", indent, "", s->num_irq);
      for (i = 0; i < s->num_mmio; i++) {
 -        size = 0;
 -        if (s->mmio[i].memory) {
 -            size = memory_region_size(s->mmio[i].memory);
 -        }
 +        size = memory_region_size(s->mmio[i].memory);
          monitor_printf(mon, "%*smmio " TARGET_FMT_plx "/" TARGET_FMT_plx "\n",
                         indent, "", s->mmio[i].addr, size);
      }
@@@ -253,3 -261,8 +253,8 @@@ void sysbus_del_io(SysBusDevice *dev, M
  {
      memory_region_del_subregion(get_system_io(), mem);
  }
+ MemoryRegion *sysbus_address_space(SysBusDevice *dev)
+ {
+     return get_system_memory();
+ }
diff --combined target-i386/kvm.c
index d20685290490a9d5f37171c6b6104291ce3a1194,74d81efbd11c5010fd9a7003ee9f3fe1ad8c2093..04e65c5ea1659ff49e16c331e719740b296a6868
@@@ -253,8 -253,7 +253,7 @@@ int kvm_arch_on_sigbus_vcpu(CPUState *e
      if ((env->mcg_cap & MCG_SER_P) && addr
          && (code == BUS_MCEERR_AR || code == BUS_MCEERR_AO)) {
          if (qemu_ram_addr_from_host(addr, &ram_addr) ||
-             !kvm_physical_memory_addr_from_ram(env->kvm_state, ram_addr,
-                                                &paddr)) {
+             !kvm_physical_memory_addr_from_host(env->kvm_state, addr, &paddr)) {
              fprintf(stderr, "Hardware memory error for memory used by "
                      "QEMU itself instead of guest system!\n");
              /* Hope we are lucky for AO MCE */
@@@ -286,8 -285,8 +285,8 @@@ int kvm_arch_on_sigbus(int code, void *
  
          /* Hope we are lucky for AO MCE */
          if (qemu_ram_addr_from_host(addr, &ram_addr) ||
-             !kvm_physical_memory_addr_from_ram(first_cpu->kvm_state, ram_addr,
-                                                &paddr)) {
+             !kvm_physical_memory_addr_from_host(first_cpu->kvm_state, addr,
+                                                 &paddr)) {
              fprintf(stderr, "Hardware memory error for memory used by "
                      "QEMU itself instead of guest system!: %p\n", addr);
              return 0;
@@@ -516,10 -515,6 +515,10 @@@ int kvm_arch_init_vcpu(CPUState *env
          }
      }
  
 +    if (kvm_has_xsave()) {
 +        env->kvm_xsave_buf = qemu_memalign(4096, sizeof(struct kvm_xsave));
 +    }
 +
      return 0;
  }
  
@@@ -763,8 -758,6 +762,8 @@@ static int kvm_put_fpu(CPUState *env
      return kvm_vcpu_ioctl(env, KVM_SET_FPU, &fpu);
  }
  
 +#define XSAVE_FCW_FSW     0
 +#define XSAVE_FTW_FOP     1
  #define XSAVE_CWD_RIP     2
  #define XSAVE_CWD_RDP     4
  #define XSAVE_MXCSR       6
  
  static int kvm_put_xsave(CPUState *env)
  {
 -    int i, r;
 -    struct kvm_xsave* xsave;
 +    struct kvm_xsave* xsave = env->kvm_xsave_buf;
      uint16_t cwd, swd, twd;
 +    int i, r;
  
      if (!kvm_has_xsave()) {
          return kvm_put_fpu(env);
      }
  
 -    xsave = qemu_memalign(4096, sizeof(struct kvm_xsave));
      memset(xsave, 0, sizeof(struct kvm_xsave));
      twd = 0;
      swd = env->fpus & ~(7 << 11);
      for (i = 0; i < 8; ++i) {
          twd |= (!env->fptags[i]) << i;
      }
 -    xsave->region[0] = (uint32_t)(swd << 16) + cwd;
 -    xsave->region[1] = (uint32_t)(env->fpop << 16) + twd;
 +    xsave->region[XSAVE_FCW_FSW] = (uint32_t)(swd << 16) + cwd;
 +    xsave->region[XSAVE_FTW_FOP] = (uint32_t)(env->fpop << 16) + twd;
      memcpy(&xsave->region[XSAVE_CWD_RIP], &env->fpip, sizeof(env->fpip));
      memcpy(&xsave->region[XSAVE_CWD_RDP], &env->fpdp, sizeof(env->fpdp));
      memcpy(&xsave->region[XSAVE_ST_SPACE], env->fpregs,
      memcpy(&xsave->region[XSAVE_YMMH_SPACE], env->ymmh_regs,
              sizeof env->ymmh_regs);
      r = kvm_vcpu_ioctl(env, KVM_SET_XSAVE, xsave);
 -    g_free(xsave);
      return r;
  }
  
@@@ -980,7 -975,7 +979,7 @@@ static int kvm_get_fpu(CPUState *env
  
  static int kvm_get_xsave(CPUState *env)
  {
 -    struct kvm_xsave* xsave;
 +    struct kvm_xsave* xsave = env->kvm_xsave_buf;
      int ret, i;
      uint16_t cwd, swd, twd;
  
          return kvm_get_fpu(env);
      }
  
 -    xsave = qemu_memalign(4096, sizeof(struct kvm_xsave));
      ret = kvm_vcpu_ioctl(env, KVM_GET_XSAVE, xsave);
      if (ret < 0) {
 -        g_free(xsave);
          return ret;
      }
  
 -    cwd = (uint16_t)xsave->region[0];
 -    swd = (uint16_t)(xsave->region[0] >> 16);
 -    twd = (uint16_t)xsave->region[1];
 -    env->fpop = (uint16_t)(xsave->region[1] >> 16);
 +    cwd = (uint16_t)xsave->region[XSAVE_FCW_FSW];
 +    swd = (uint16_t)(xsave->region[XSAVE_FCW_FSW] >> 16);
 +    twd = (uint16_t)xsave->region[XSAVE_FTW_FOP];
 +    env->fpop = (uint16_t)(xsave->region[XSAVE_FTW_FOP] >> 16);
      env->fpstt = (swd >> 11) & 7;
      env->fpus = swd;
      env->fpuc = cwd;
      env->xstate_bv = *(uint64_t *)&xsave->region[XSAVE_XSTATE_BV];
      memcpy(env->ymmh_regs, &xsave->region[XSAVE_YMMH_SPACE],
              sizeof env->ymmh_regs);
 -    g_free(xsave);
      return 0;
  }
  
@@@ -1082,9 -1080,10 +1081,9 @@@ static int kvm_get_sregs(CPUState *env
      env->cr[3] = sregs.cr3;
      env->cr[4] = sregs.cr4;
  
 -    cpu_set_apic_base(env->apic_state, sregs.apic_base);
 -
      env->efer = sregs.efer;
 -    //cpu_set_apic_tpr(env->apic_state, sregs.cr8);
 +
 +    /* changes to apic base and cr8/tpr are read back via kvm_arch_post_run */
  
  #define HFLAG_COPY_MASK \
      ~( HF_CPL_MASK | HF_PE_MASK | HF_MP_MASK | HF_EM_MASK | \
diff --combined trace-events
index 2918398ff4c2b2d2e59ed922f10bf7fa586ba160,5781a69b0baca59d066781314e1aad49b3789981..c18435bbe1a82ed3ee517a4e376bfffef83f469d
@@@ -462,7 -462,7 +462,7 @@@ mipsnet_irq(uint32_t isr, uint32_t intc
  
  # xen-all.c
  xen_ram_alloc(unsigned long ram_addr, unsigned long size) "requested: %#lx, size %#lx"
- xen_client_set_memory(uint64_t start_addr, unsigned long size, unsigned long phys_offset, bool log_dirty) "%#"PRIx64" size %#lx, offset %#lx, log_dirty %i"
+ xen_client_set_memory(uint64_t start_addr, unsigned long size, bool log_dirty) "%#"PRIx64" size %#lx, log_dirty %i"
  
  # xen-mapcache.c
  xen_map_cache(uint64_t phys_addr) "want %#"PRIx64
@@@ -578,11 -578,11 +578,11 @@@ v9fs_lcreate(uint16_t tag, uint8_t id, 
  v9fs_lcreate_return(uint16_t tag, uint8_t id, int8_t type, int32_t version, int64_t path, int32_t iounit) "tag %d id %d qid={type %d version %d path %"PRId64"} iounit %d"
  v9fs_fsync(uint16_t tag, uint8_t id, int32_t fid, int datasync) "tag %d id %d fid %d datasync %d"
  v9fs_clunk(uint16_t tag, uint8_t id, int32_t fid) "tag %d id %d fid %d"
 -v9fs_read(uint16_t tag, uint8_t id, int32_t fid, int64_t off, int32_t max_count) "tag %d id %d fid %d off %"PRId64" max_count %d"
 +v9fs_read(uint16_t tag, uint8_t id, int32_t fid, uint64_t off, uint32_t max_count) "tag %d id %d fid %d off %"PRIu64" max_count %u"
  v9fs_read_return(uint16_t tag, uint8_t id, int32_t count, ssize_t err) "tag %d id %d count %d err %zd"
 -v9fs_readdir(uint16_t tag, uint8_t id, int32_t fid, int64_t offset, int32_t max_count) "tag %d id %d fid %d offset %"PRId64" max_count %d"
 -v9fs_readdir_return(uint16_t tag, uint8_t id, int32_t count, ssize_t retval) "tag %d id %d count %d retval %zd"
 -v9fs_write(uint16_t tag, uint8_t id, int32_t fid, int64_t off, int32_t count, int cnt) "tag %d id %d fid %d off %"PRId64" count %d cnt %d"
 +v9fs_readdir(uint16_t tag, uint8_t id, int32_t fid, uint64_t offset, uint32_t max_count) "tag %d id %d fid %d offset %"PRIu64" max_count %u"
 +v9fs_readdir_return(uint16_t tag, uint8_t id, uint32_t count, ssize_t retval) "tag %d id %d count %u retval %zd"
 +v9fs_write(uint16_t tag, uint8_t id, int32_t fid, uint64_t off, uint32_t count, int cnt) "tag %d id %d fid %d off %"PRIu64" count %u cnt %d"
  v9fs_write_return(uint16_t tag, uint8_t id, int32_t total, ssize_t err) "tag %d id %d total %d err %zd"
  v9fs_create(uint16_t tag, uint8_t id, int32_t fid, char* name, int32_t perm, int8_t mode) "tag %d id %d fid %d name %s perm %d mode %d"
  v9fs_create_return(uint16_t tag, uint8_t id, int8_t type, int32_t version, int64_t path, int iounit) "tag %d id %d qid={type %d version %d path %"PRId64"} iounit %d"