1. 13 1月, 2016 1 次提交
  2. 12 11月, 2015 1 次提交
  3. 25 9月, 2015 1 次提交
  4. 19 9月, 2015 2 次提交
  5. 18 9月, 2015 1 次提交
    • M
      Fix bad error handling after memory_region_init_ram() · f8ed85ac
      Markus Armbruster 提交于
      Symptom:
      
          $ qemu-system-x86_64 -m 10000000
          Unexpected error in ram_block_add() at /work/armbru/qemu/exec.c:1456:
          upstream-qemu: cannot set up guest memory 'pc.ram': Cannot allocate memory
          Aborted (core dumped)
      
      Root cause: commit ef701d7b screwed up handling of out-of-memory
      conditions.  Before the commit, we report the error and exit(1), in
      one place, ram_block_add().  The commit lifts the error handling up
      the call chain some, to three places.  Fine.  Except it uses
      &error_abort in these places, changing the behavior from exit(1) to
      abort(), and thus undoing the work of commit 39228250 "exec: Don't
      abort when we can't allocate guest memory".
      
      The three places are:
      
      * memory_region_init_ram()
      
        Commit 49946538 (right after commit ef701d7b) lifted the error
        handling further, through memory_region_init_ram(), multiplying the
        incorrect use of &error_abort.  Later on, imitation of existing
        (bad) code may have created more.
      
      * memory_region_init_ram_ptr()
      
        The &error_abort is still there.
      
      * memory_region_init_rom_device()
      
        Doesn't need fixing, because commit 33e0eb52 (soon after commit
        ef701d7b) lifted the error handling further, and in the process
        changed it from &error_abort to passing it up the call chain.
        Correct, because the callers are realize() methods.
      
      Fix the error handling after memory_region_init_ram() with a
      Coccinelle semantic patch:
      
          @r@
          expression mr, owner, name, size, err;
          position p;
          @@
                  memory_region_init_ram(mr, owner, name, size,
          (
          -                              &error_abort
          +                              &error_fatal
          |
                                         err@p
          )
                                        );
          @script:python@
              p << r.p;
          @@
          print "%s:%s:%s" % (p[0].file, p[0].line, p[0].column)
      
      When the last argument is &error_abort, it gets replaced by
      &error_fatal.  This is the fix.
      
      If the last argument is anything else, its position is reported.  This
      lets us check the fix is complete.  Four positions get reported:
      
      * ram_backend_memory_alloc()
      
        Error is passed up the call chain, ultimately through
        user_creatable_complete().  As far as I can tell, it's callers all
        handle the error sanely.
      
      * fsl_imx25_realize(), fsl_imx31_realize(), dp8393x_realize()
      
        DeviceClass.realize() methods, errors handled sanely further up the
        call chain.
      
      We're good.  Test case again behaves:
      
          $ qemu-system-x86_64 -m 10000000
          qemu-system-x86_64: cannot set up guest memory 'pc.ram': Cannot allocate memory
          [Exit 1 ]
      
      The next commits will repair the rest of commit ef701d7b's damage.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-Id: <1441983105-26376-3-git-send-email-armbru@redhat.com>
      Reviewed-by: NPeter Crosthwaite <crosthwaite.peter@gmail.com>
      f8ed85ac
  6. 07 7月, 2015 1 次提交
  7. 10 6月, 2015 1 次提交
  8. 26 3月, 2015 1 次提交
  9. 25 3月, 2015 1 次提交
    • G
      fw_cfg: factor out initialization of FW_CFG_ID (rev. number) · 3a5c76ba
      Gabriel L. Somlo 提交于
      The fw_cfg documentation says this of the revision key (0x0001, FW_CFG_ID):
      
      > A 32-bit little-endian unsigned int, this item is used as an interface
      > revision number, and is currently set to 1 by all QEMU architectures
      > which expose a fw_cfg device.
      
      arm/virt doesn't.  It could be argued that that's an error in
      "hw/arm/virt.c"; on the other hand, all of the other fw_cfg providing
      boards set the interface version to 1 manually, despite the device
      coming from the same, shared implementation. Therefore, instead of
      adding
      
          fw_cfg_add_i32(fw_cfg, FW_CFG_ID, 1);
      
      to arm/virt, consolidate all such existing calls in the fw_cfg
      initialization code.
      Signed-off-by: NGabriel Somlo <somlo@cmu.edu>
      Message-Id: <1426789244-26318-1-git-send-email-somlo@cmu.edu>
      Reviewed-by: NLaszlo Ersek <lersek@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      3a5c76ba
  10. 18 2月, 2015 1 次提交
  11. 09 1月, 2015 4 次提交
  12. 07 1月, 2015 4 次提交
  13. 23 12月, 2014 1 次提交
  14. 22 12月, 2014 1 次提交
  15. 20 10月, 2014 1 次提交
    • M
      hw: Convert from BlockDriverState to BlockBackend, mostly · 4be74634
      Markus Armbruster 提交于
      Device models should access their block backends only through the
      block-backend.h API.  Convert them, and drop direct includes of
      inappropriate headers.
      
      Just four uses of BlockDriverState are left:
      
      * The Xen paravirtual block device backend (xen_disk.c) opens images
        itself when set up via xenbus, bypassing blockdev.c.  I figure it
        should go through qmp_blockdev_add() instead.
      
      * Device model "usb-storage" prompts for keys.  No other device model
        does, and this one probably shouldn't do it, either.
      
      * ide_issue_trim_cb() uses bdrv_aio_discard() instead of
        blk_aio_discard() because it fishes its backend out of a BlockAIOCB,
        which has only the BlockDriverState.
      
      * PC87312State has an unused BlockDriverState[] member.
      
      The next two commits take care of the latter two.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      4be74634
  16. 03 10月, 2014 1 次提交
    • J
      ide: Update ide_drive_get to be HBA agnostic · d8f94e1b
      John Snow 提交于
      Instead of duplicating the logic for the if_ide
      (bus,unit) mappings, rely on the blockdev layer
      for managing those mappings for us, and use the
      drive_get_by_index call instead.
      
      This allows ide_drive_get to work for AHCI HBAs
      as well, and can be used in the Q35 initialization.
      
      Lastly, change the nature of the argument to
      ide_drive_get so that represents the number of
      total drives we can support, and not the total
      number of buses. This will prevent array overflows
      if the units-per-default-bus property ever needs
      to be adjusted for compatibility reasons.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Message-id: 1412187569-23452-5-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      d8f94e1b
  17. 09 9月, 2014 1 次提交
  18. 08 9月, 2014 4 次提交
    • A
      PPC: Cuda: Use cuda timer to expose tbfreq to guest · b981289c
      Alexander Graf 提交于
      Mac OS X calibrates a number of frequencies on bootup based on reading
      tb values on bootup and comparing them to via cuda timer values.
      
      The only variable we can really steer well (thanks to KVM) is the cuda
      frequency. So let's use that one to fake Mac OS X into believing the
      bus frequency is tbfreq * 4. That way Mac OS X will automatically
      calculate the correct timebase frequency.
      
      With this patch and the patch set I posted earlier I can successfully
      run Mac OS X 10.2, 10.3 and 10.4 guests with -M mac99 on TCG and KVM.
      Suggested-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      b981289c
    • A
      PPC: Mac: Move tbfreq into local variable · caae6c96
      Alexander Graf 提交于
      We already expose the real CPU's tb frequency to the guest via fw_cfg. Soon
      we will need to also expose it to the MacIO, so let's move it to a variable
      that we can leverage every time we need the frequency.
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      caae6c96
    • A
      PPC: mac99: Move NVRAM to page boundary when necessary · 261265cc
      Alexander Graf 提交于
      When running KVM we have to adhere to host page boundaries for memory slots.
      Unfortunately the NVRAM on mac99 is a 4k RAM hole inside of an MMIO flash
      area.
      
      So if our host is configured with 64k page size, we can't use the mac99 target
      with KVM. This is a real shame, as this limitation is not really an issue - we
      can easily map NVRAM somewhere else and at least Linux and Mac OS X use it
      at their new location.
      
      So in that emergency case when it's about failing to run at all and moving NVRAM
      to a place it shouldn't be at, choose the latter.
      
      This patch enables -M mac99 with KVM on 64k page size hosts.
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      261265cc
    • A
      PPC: KVM: Fix g3beige and mac99 when HV is loaded · 277c7a4d
      Alexander Graf 提交于
      On PPC we have 2 different styles of KVM: PR and HV. HV can only virtualize
      sPAPR guests while PR can virtualize everything that's reasonably close to
      the host hardware platform.
      
      As long as only one kernel module (PR or HV) is loaded, the "default" kvm type
      is the module that's loaded. So if your hardware only supports PR mode you can
      easily spawn a Mac VM.
      
      However, if both HV and PR are loaded we default to HV mode. And in that case
      the Mac machines have to explicitly ask for PR mode to get a working VM.
      
      Fix this up by explicitly having the Mac machines ask for PR style KVM. This
      fixes bootup of Mac VMs on systems where bot HV and PR kvm modules are loaded
      for me.
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      277c7a4d
  19. 15 8月, 2014 1 次提交
  20. 22 7月, 2014 1 次提交
    • H
      ppc: fix -mem-path failure · e206ad48
      Hu Tao 提交于
      commit e938ba0c tried to enable -mem-path for ppc but breaked some ppc
      boards.
      
      The problems are:
      
      1. it fails when allocating memory for rom, sram whose sizes are less
         than huge page size:
      
         ./ppc-softmmu/qemu-system-ppc  -m 512 -mem-path /hugepages/ \
         -kernel /home/hutao/Downloads/vmlinux-ppc -initrd \
         /home/hutao/Downloads/initrd-ppc.gz
         qemu-system-ppc: /mnt/data/projects/qemu/exec.c:1184: qemu_ram_set_idstr: Assertion `new_block' failed.
      
      2. if there is a numa node backed by memory backend object, qemu fails
         with message:
      
         ./ppc-softmmu/qemu-system-ppc  -m 512 \
         -object memory-backend-file,size=512M,mem-path=/hugepages,id=f0 \
         -numa node,nodeid=0,memdev=f0 \
         -kernel /home/hutao/Downloads/vmlinux-ppc \
         -initrd /home/hutao/Downloads/initrd-ppc.gz
         qemu-system-ppc: memory backend f0 is used multiple times. Each -numa option must use a different memdev value.
      
      This patch does following:
      
      1. replaces memory_region_allocate_system_memory() with
         memory_region_init_ram() for rom, sram. Then only system memory
         is backed by hugepages when specifying mem-path.
      
      2. for memory banks, allocates all ram with
         one memory_region_allocate_system_memory(), and use
         memory_region_init_alias() to initialize memory banks.
      
      Tested machines: default(g3beige), mac99, taihu, bamboo, ref405ep.
      Signed-off-by: NHu Tao <hutao@cn.fujitsu.com>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      e206ad48
  21. 15 7月, 2014 1 次提交
  22. 27 6月, 2014 1 次提交
    • B
      mac99: Add motherboard devices before PCI cards · a0bb2a5f
      BALATON Zoltan 提交于
      Change the order of creating devices for New World Mac emulation so
      that devices on the motherboard are added first and PCI cards (VGA and
      NIC) come later. As a side effect, this also causes OpenBIOS to map
      the motherboard devices into the MMIO space to the same addresses as
      on real hardware and allow clients that hardcode these addresses (e.g.
      MorphOS) to find and use them until OpenBIOS is tought to map devices
      to specific addresses. (On real hardware the graphics and network
      cards are really on separate buses but we don't model that yet.) This
      brings the memory map closer to what is found on PowerMac3,1.
      Signed-off-by: NBALATON Zoltan <balaton@eik.bme.hu>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      a0bb2a5f
  23. 16 6月, 2014 1 次提交
  24. 28 5月, 2014 1 次提交
  25. 28 8月, 2013 1 次提交
    • M
      hw: Clean up bogus default boot order · c1654732
      Markus Armbruster 提交于
      We set default boot order "cad" in every single machine definition
      except "pseries" and "moxiesim", even though very few boards actually
      care for boot order, and "cad" makes sense for even fewer.
      
      Machines that care:
      
      * pc and its variants
      
        Accept up to three letters 'a', 'b' (undocumented alias for 'a'),
        'c', 'd' and 'n'.  Reject all others (fatal with -boot).
      
      * nseries (n800, n810)
      
        Check whether order starts with 'n'.  Silently ignored otherwise.
      
      * prep, g3beige, mac99
      
        Extract the first character the machine understands (subset of
        'a'..'f').  Silently ignored otherwise.
      
      * spapr
      
        Accept an arbitrary string (vl.c restricts it to contain only
        'a'..'p', no duplicates).
      
      * sun4[mdc]
      
        Use the first character.  Silently ignored otherwise.
      
      Strip characters these machines ignore from their default boot order.
      
      For all other machines, remove the unused default boot order
      alltogether.
      
      Note that my rename of QEMUMachine member boot_order to
      default_boot_order and QEMUMachineInitArgs member boot_device to
      boot_order has a welcome side effect: it makes every use of boot
      orders visible in this patch, for easy review.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NLaszlo Ersek <lersek@redhat.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      c1654732
  26. 25 7月, 2013 1 次提交
  27. 12 7月, 2013 1 次提交
  28. 08 7月, 2013 1 次提交
    • D
      pci: Add root bus parameter to pci_nic_init() · 29b358f9
      David Gibson 提交于
      At present, pci_nic_init() and pci_nic_init_nofail() assume that they will
      only create a NIC under the primary PCI root.  As we add support for
      multiple PCI roots, that may no longer be the case.  This patch adds a root
      bus parameter to pci_nic_init() (and updates callers accordingly) to allow
      the machine init code using it to specify the right PCI root for NICs
      created by old-style -net nic parameters.  NICs created new-style, with
      -device can of course be put anywhere.
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      29b358f9
  29. 04 7月, 2013 1 次提交
  30. 01 7月, 2013 1 次提交