1. 23 5月, 2017 8 次提交
    • E
      block: Use QDict helpers for --force-share · 579cf1d1
      Eric Blake 提交于
      Fam's addition of --force-share in commits 459571f7 and 335e9937
      were developed prior to the addition of QDict scalar insertion
      macros, but merged after the general cleanup in commit 46f5ac20.
      Patch created mechanically by rerunning:
      
       spatch --sp-file scripts/coccinelle/qobject.cocci \
              --macro-file scripts/cocci-macro-file.h --dir . --in-place
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <20170515195439.17677-1-eblake@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      579cf1d1
    • E
      shutdown: Expose bool cause in SHUTDOWN and RESET events · 08fba7ac
      Eric Blake 提交于
      Libvirt would like to be able to distinguish between a SHUTDOWN
      event triggered solely by guest request and one triggered by a
      SIGTERM or other action on the host.  While qemu_kill_report() was
      already able to give different output to stderr based on whether a
      shutdown was triggered by a host signal (but NOT by a host UI event,
      such as clicking the X on the window), that information was then
      lost to management.  The previous patches improved things to use an
      enum throughout all callsites, so now we have something ready to
      expose through QMP.
      
      Note that for now, the decision was to expose ONLY a boolean,
      rather than promoting ShutdownCause to a QAPI enum; this is because
      libvirt has not expressed an interest in anything finer-grained.
      We can still add additional details, in a backwards-compatible
      manner, if a need later arises (if the addition happens before 2.10,
      we can replace the bool with an enum; otherwise, the enum will have
      to be in addition to the bool); this patch merely adds a helper
      shutdown_caused_by_guest() to map the internal enum into the
      external boolean.
      
      Update expected iotest outputs to match the new data (complete
      coverage of the affected tests is obtained by -raw, -qcow2, and -nbd).
      
      Here is output from 'virsh qemu-monitor-event --loop' with the
      patch installed:
      
      event SHUTDOWN at 1492639680.731251 for domain fedora_13: {"guest":true}
      event STOP at 1492639680.732116 for domain fedora_13: <null>
      event SHUTDOWN at 1492639680.732830 for domain fedora_13: {"guest":false}
      
      Note that libvirt runs qemu with -no-shutdown: the first SHUTDOWN event
      was triggered by an action I took directly in the guest (shutdown -h),
      at which point qemu stops the vcpus and waits for libvirt to do any
      final cleanups; the second SHUTDOWN event is the result of libvirt
      sending SIGTERM now that it has completed cleanup.  Libvirt is already
      smart enough to only feed the first qemu SHUTDOWN event to the end user
      (remember, virsh qemu-monitor-event is a low-level debugging interface
      that is explicitly unsupported by libvirt, so it sees things that normal
      end users do not); changing qemu to emit SHUTDOWN only once is outside
      the scope of this series.
      
      See also https://bugzilla.redhat.com/1384007Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <20170515214114.15442-6-eblake@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      08fba7ac
    • E
      shutdown: Add source information to SHUTDOWN and RESET · cf83f140
      Eric Blake 提交于
      Time to wire up all the call sites that request a shutdown or
      reset to use the enum added in the previous patch.
      
      It would have been less churn to keep the common case with no
      arguments as meaning guest-triggered, and only modified the
      host-triggered code paths, via a wrapper function, but then we'd
      still have to audit that I didn't miss any host-triggered spots;
      changing the signature forces us to double-check that I correctly
      categorized all callers.
      
      Since command line options can change whether a guest reset request
      causes an actual reset vs. a shutdown, it's easy to also add the
      information to reset requests.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Acked-by: David Gibson <david@gibson.dropbear.id.au> [ppc parts]
      Reviewed-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> [SPARC part]
      Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> [s390x parts]
      Message-Id: <20170515214114.15442-5-eblake@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      cf83f140
    • E
      shutdown: Preserve shutdown cause through replay · 802f045a
      Eric Blake 提交于
      With the recent addition of ShutdownCause, we want to be able to pass
      a cause through any shutdown request, and then faithfully replay that
      cause when later replaying the same sequence.  The easiest way is to
      expand the reply event mechanism to track a series of values for
      EVENT_SHUTDOWN, one corresponding to each value of ShutdownCause.
      
      We are free to change the replay stream as needed, since there are
      already no guarantees about being able to use a replay stream by
      any other version of qemu than the one that generated it.
      
      The cause is not actually fed back until the next patch changes the
      signature for requesting a shutdown; a TODO marks that upcoming change.
      
      Yes, this uses the gcc/clang extension of a ranged case label,
      but this is not the first time we've used non-C99 constructs.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NPavel Dovgalyuk <pavel.dovgaluk@ispras.ru>
      Message-Id: <20170515214114.15442-4-eblake@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      802f045a
    • E
      shutdown: Prepare for use of an enum in reset/shutdown_request · aedbe192
      Eric Blake 提交于
      We want to track why a guest was shutdown; in particular, being able
      to tell the difference between a guest request (such as ACPI request)
      and host request (such as SIGINT) will prove useful to libvirt.
      Since all requests eventually end up changing shutdown_requested in
      vl.c, the logical change is to make that value track the reason,
      rather than its current 0/1 contents.
      
      Since command-line options control whether a reset request is turned
      into a shutdown request instead, the same treatment is given to
      reset_requested.
      
      This patch adds an internal enum ShutdownCause that describes reasons
      that a shutdown can be requested, and changes qemu_system_reset() to
      pass the reason through, although for now nothing is actually changed
      with regards to what gets reported.  The enum could be exported via
      QAPI at a later date, if deemed necessary, but for now, there has not
      been a request to expose that much detail to end clients.
      
      For the most part, we turn 0 into SHUTDOWN_CAUSE_NONE, and 1 into
      SHUTDOWN_CAUSE_HOST_ERROR; the only specific case where we have enough
      information right now to use a different value is when we are reacting
      to a host signal.  It will take a further patch to edit all call-sites
      that can trigger a reset or shutdown request to properly pass in any
      other reasons; this patch includes TODOs to point such places out.
      
      qemu_system_reset() trades its 'bool report' parameter for a
      'ShutdownCause reason', with all non-zero values having the same
      effect; this lets us get rid of the weird #defines for VMRESET_*
      as synonyms for bools.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <20170515214114.15442-3-eblake@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      aedbe192
    • E
      shutdown: Simplify shutdown_signal · 7af88279
      Eric Blake 提交于
      There is no signal 0 (kill(pid, 0) has special semantics to probe whether
      a process is alive), rather than actually sending a signal 0).  So we
      can use the simpler 0, instead of -1, for our sentinel of whether a
      shutdown request due to a signal has happened.
      Suggested-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NAlistair Francis <alistair.francis@xilinx.com>
      Message-Id: <20170515214114.15442-2-eblake@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      7af88279
    • M
      sockets: Plug memory leak in socket_address_flatten() · fc0f0059
      Markus Armbruster 提交于
      socket_address_flatten() leaks a SocketAddress when its argument is
      null.  Happens when opening a ChardevBackend of type 'udp' that is
      configured without a local address.  Screwed up in commit bd269ebc due
      to last minute semantic conflict resolution.  Spotted by Coverity.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-Id: <1494866344-11013-1-git-send-email-armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      fc0f0059
    • G
      scripts/qmp/qom-set: fix the value argument passed to srv.command() · fe2f74af
      Greg Kurz 提交于
      When invoking the script with -s, we end up passing a bogus value
      to QEMU:
      
      $ ./scripts/qmp/qom-set -s /var/tmp/qmp-sock-exp /machine.accel kvm
      {}
      $ ./scripts/qmp/qom-get -s /var/tmp/qmp-sock-exp /machine.accel
      /var/tmp/qmp-sock-exp
      
      This happens because sys.argv[2] isn't necessarily the command line
      argument that holds the value. It is sys.argv[4] when -s was also
      passed.
      
      Actually, the code already has a variable to handle that. This patch
      simply uses it.
      Signed-off-by: NGreg Kurz <groug@kaod.org>
      Message-Id: <149373610338.5144.9635049015143453288.stgit@bahia.lan>
      Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      fe2f74af
  2. 18 5月, 2017 10 次提交
    • S
      Merge remote-tracking branch 'dgilbert/tags/pull-hmp-20170517' into staging · 56821559
      Stefan Hajnoczi 提交于
      HMP pull
      
      # gpg: Signature made Wed 17 May 2017 07:03:39 PM BST
      # gpg:                using RSA key 0x0516331EBC5BFDE7
      # gpg: Good signature from "Dr. David Alan Gilbert (RH2) <dgilbert@redhat.com>"
      # gpg: WARNING: This key is not certified with a trusted signature!
      # gpg:          There is no indication that the signature belongs to the owner.
      # Primary key fingerprint: 45F5 C71B 4A0C B7FB 977A  9FA9 0516 331E BC5B FDE7
      
      * dgilbert/tags/pull-hmp-20170517:
        ramblock: add new hmp command "info ramblock"
        utils: provide size_to_str()
        ramblock: add RAMBLOCK_FOREACH()
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      56821559
    • S
      Merge remote-tracking branch 'quintela/tags/migration/20170517' into staging · 2ccbd47c
      Stefan Hajnoczi 提交于
      migration/next for 20170517
      
      # gpg: Signature made Wed 17 May 2017 11:46:36 AM BST
      # gpg:                using RSA key 0xF487EF185872D723
      # gpg: Good signature from "Juan Quintela <quintela@redhat.com>"
      # gpg:                 aka "Juan Quintela <quintela@trasno.org>"
      # Primary key fingerprint: 1899 FF8E DEBF 58CC EE03  4B82 F487 EF18 5872 D723
      
      * quintela/tags/migration/20170517:
        migration: Move check_migratable() into qdev.c
        migration: Move postcopy stuff to postcopy-ram.c
        migration: Move page_cache.c to migration/
        migration: Create migration/blocker.h
        ram: Rename RAM_SAVE_FLAG_COMPRESS to RAM_SAVE_FLAG_ZERO
        migration: Pass Error ** argument to {save,load}_vmstate
        migration: Fix regression with compression threads
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      2ccbd47c
    • S
      Merge remote-tracking branch 'mst/tags/for_upstream' into staging · adb354dd
      Stefan Hajnoczi 提交于
      pci, virtio, vhost: fixes
      
      A bunch of fixes that missed the release.
      Most notably we are reverting shpc back to enabled by default state
      as guests uses that as an indicator that hotplug is supported
      (even though it's unused). Unfortunately we can't fix this
      on the stable branch since that would break migration.
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      
      # gpg: Signature made Wed 17 May 2017 10:42:06 PM BST
      # gpg:                using RSA key 0x281F0DB8D28D5469
      # gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>"
      # gpg:                 aka "Michael S. Tsirkin <mst@redhat.com>"
      # Primary key fingerprint: 0270 606B 6F3C DF3D 0B17  0970 C350 3912 AFBE 8E67
      #      Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA  8A0D 281F 0DB8 D28D 5469
      
      * mst/tags/for_upstream:
        exec: abstract address_space_do_translate()
        pci: deassert intx when pci device unrealize
        virtio: allow broken device to notify guest
        Revert "hw/pci: disable pci-bridge's shpc by default"
        acpi-defs: clean up open brace usage
        ACPI: don't call acpi_pcihp_device_plug_cb on xen
        iommu: Don't crash if machine is not PC_MACHINE
        pc: add 2.10 machine type
        pc/fwcfg: unbreak migration from qemu-2.5 and qemu-2.6 during firmware boot
        libvhost-user: fix crash when rings aren't ready
        hw/virtio: fix vhost user fails to startup when MQ
        hw/arm/virt: generate 64-bit addressable ACPI objects
        hw/acpi-defs: replace leading X with x_ in FADT field names
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      adb354dd
    • P
      exec: abstract address_space_do_translate() · a764040c
      Peter Xu 提交于
      This function is an abstraction helper for address_space_translate() and
      address_space_get_iotlb_entry(). It does the lookup of address into
      memory region section, then does proper IOMMU translation if necessary.
      Refactor the two existing functions to use it.
      
      This fixes vhost when IOMMU is disabled by guest.
      Tested-by: NMaxime Coquelin <maxime.coquelin@redhat.com>
      Signed-off-by: NPeter Xu <peterx@redhat.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      a764040c
    • H
      pci: deassert intx when pci device unrealize · 3936161f
      Herongguang (Stephen) 提交于
      If a pci device is not reset by VM (by writing into config space)
      and unplugged by VM, after that when VM reboots, qemu may assert:
      pcibus_reset: Assertion `bus->irq_count[i] == 0' failed
      
      Cc: qemu-stable@nongnu.org
      Signed-off-by: Nherongguang <herongguang.he@huawei.com>
      Reviewed-by: NMarcel Apfelbaum <marcel@redhat.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      3936161f
    • G
      virtio: allow broken device to notify guest · 66453cff
      Greg Kurz 提交于
      According to section 2.1.2 of the virtio-1 specification:
      
      "The device SHOULD set DEVICE_NEEDS_RESET when it enters an error state that
      a reset is needed. If DRIVER_OK is set, after it sets DEVICE_NEEDS_RESET,
      the device MUST send a device configuration change notification to the
      driver."
      
      Commit "f5ed3663 virtio: stop virtqueue processing if device is broken"
      introduced a virtio_error() call that just does that:
      
      - internally mark the device as broken
      - set the DEVICE_NEEDS_RESET bit in the status
      - send a configuration change notification
      
      Unfortunately, virtio_notify_vector(), called by virtio_notify_config(),
      returns right away when the device is marked as broken and the notification
      isn't sent in this case.
      
      The spec doesn't say whether a broken device can send notifications
      in other situations or not. But since the driver isn't supposed to do
      anything but to reset the device, it makes sense to keep the check in
      virtio_notify_config().
      
      Marking the device as broken AFTER the configuration change notification was
      sent is enough to fix the issue.
      Signed-off-by: NGreg Kurz <groug@kaod.org>
      Reviewed-by: NCornelia Huck <cornelia.huck@de.ibm.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      66453cff
    • M
      Revert "hw/pci: disable pci-bridge's shpc by default" · 2fa35662
      Marcel Apfelbaum 提交于
      This reverts commit dc0ae767.
      
      Disabling the shpc controller has an undesired side effect.
      The PCI bridge remains with no attached devices at boot time,
      and the guest operating systems do not allocate any resources
      for it, leaving the bridge unusable. Note that the behaviour
      is dictated by the pci bridge specification.
      
      Revert the commit and leave the shpc controller even if is not
      actually used by any architecture. Slot 0 remains unusable at boot time.
      
      Keep shpc off for QEMU 2.9 machines.
      Signed-off-by: NMarcel Apfelbaum <marcel@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      2fa35662
    • P
      ramblock: add new hmp command "info ramblock" · be9b23c4
      Peter Xu 提交于
      To dump information about ramblocks. It looks like:
      
      (qemu) info ramblock
                    Block Name    PSize              Offset               Used              Total
                  /objects/mem    2 MiB  0x0000000000000000 0x0000000080000000 0x0000000080000000
                      vga.vram    4 KiB  0x0000000080060000 0x0000000001000000 0x0000000001000000
          /rom@etc/acpi/tables    4 KiB  0x00000000810b0000 0x0000000000020000 0x0000000000200000
                       pc.bios    4 KiB  0x0000000080000000 0x0000000000040000 0x0000000000040000
        0000:00:03.0/e1000.rom    4 KiB  0x0000000081070000 0x0000000000040000 0x0000000000040000
                        pc.rom    4 KiB  0x0000000080040000 0x0000000000020000 0x0000000000020000
          0000:00:02.0/vga.rom    4 KiB  0x0000000081060000 0x0000000000010000 0x0000000000010000
         /rom@etc/table-loader    4 KiB  0x00000000812b0000 0x0000000000001000 0x0000000000001000
            /rom@etc/acpi/rsdp    4 KiB  0x00000000812b1000 0x0000000000001000 0x0000000000001000
      
      Ramblock is something hidden internally in QEMU implementation, and this
      command should only be used by mostly QEMU developers on RAM stuff. It
      is not a command suitable for QMP interface. So only HMP interface is
      provided for it.
      Reviewed-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
      Signed-off-by: NPeter Xu <peterx@redhat.com>
      Message-Id: <1494562661-9063-4-git-send-email-peterx@redhat.com>
      Signed-off-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
      be9b23c4
    • P
      utils: provide size_to_str() · 22951aaa
      Peter Xu 提交于
      Moving the algorithm from print_type_size() into size_to_str() so that
      other component can also leverage it. With that, refactor
      print_type_size().
      
      The assert() in that logic is removed though, since even UINT64_MAX
      would not overflow.
      Signed-off-by: NPeter Xu <peterx@redhat.com>
      Message-Id: <1494562661-9063-3-git-send-email-peterx@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
      22951aaa
    • P
      ramblock: add RAMBLOCK_FOREACH() · 99e15582
      Peter Xu 提交于
      So that it can simplifies the iterators.
      Reviewed-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
      Signed-off-by: NPeter Xu <peterx@redhat.com>
      Message-Id: <1494562661-9063-2-git-send-email-peterx@redhat.com>
      Signed-off-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
      99e15582
  3. 17 5月, 2017 22 次提交