1. 03 4月, 2017 23 次提交
    • P
      qemu-io-cmds: Assert that global and nofile commands don't use ct->perms · 6aabeb58
      Peter Maydell 提交于
      It would be a bug for a command with the CMD_NOFILE_OK or
      CMD_FLAG_GLOBAL flags set to also set the ct->perms field,
      because the former says "OK for a file not to be open"
      but the latter is a check on a file.
      
      Add an assertion in qemuio_add_command() so we can catch that
      sort of buggy command definition immediately rather than it
      being a bug that only manifests when a particular set of
      command line options is used.
      
      (Coverity gets confused about this (CID 1371723) and reports
      that we might dereference a NULL blk pointer in this case,
      because it can't tell that that code path never happens with
      the cmdinfo_t that we have. This commit won't help unconfuse
      it, but it does fix the underlying issue.)
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      Message-id: 1490967529-4767-1-git-send-email-peter.maydell@linaro.org
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      6aabeb58
    • M
      sheepdog: Fix blockdev-add · d1c13688
      Markus Armbruster 提交于
      Commit 831acdc9 "sheepdog: Implement bdrv_parse_filename()" and commit
      d282f34e "sheepdog: Support blockdev-add" have different ideas on how
      the QemuOpts parameters for the server address are named.  Fix that.
      While there, rename BlockdevOptionsSheepdog member addr to server, for
      consistency with BlockdevOptionsSsh, BlockdevOptionsGluster,
      BlockdevOptionsNbd.
      
      Commit 831acdc9's example becomes
      
          --drive driver=sheepdog,server.type=inet,server.host=fido,server.port=7000,vdi=dolly
      
      instead of
      
          --drive driver=sheepdog,host=fido,vdi=dolly
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Tested-by: NKashyap Chamarthy <kchamart@redhat.com>
      Message-id: 1490895797-29094-10-git-send-email-armbru@redhat.com
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      d1c13688
    • M
      nbd: Tidy up blockdev-add interface · 9445673e
      Markus Armbruster 提交于
      SocketAddress is a simple union, and simple unions are awkward: they
      have their variant members wrapped in a "data" object on the wire, and
      require additional indirections in C.  I intend to limit its use to
      existing external interfaces, and convert all internal interfaces to
      SocketAddressFlat.
      
      BlockdevOptionsNbd is an external interface using SocketAddress.  We
      already use SocketAddressFlat elsewhere in blockdev-add.  Replace it
      by SocketAddressFlat while we can (it's new in 2.9) for simplicity and
      consistency.  For example,
      
          { "execute": "blockdev-add",
            "arguments": { "node-name": "foo", "driver": "nbd",
                           "server": { "type": "inet",
      		                 "data": { "host": "localhost",
      				           "port": "12345" } } } }
      
      becomes
      
          { "execute": "blockdev-add",
            "arguments": { "node-name": "foo", "driver": "nbd",
                           "server": { "type": "inet",
      		                 "host": "localhost", "port": "12345" } } }
      
      Since the internal interfaces still take SocketAddress, this requires
      conversion function socket_address_crumple().  It'll go away when I
      update the interfaces.
      
      Unfortunately, SocketAddress is also visible in -drive since 2.8:
      
          -drive if=none,driver=nbd,server.type=inet,server.data.host=127.0.0.1,server.data.port=12345
      
      Nobody should be using it, as it's fairly new and has never been
      documented, so adding still more compatibility gunk to keep it working
      isn't worth the trouble.  You now have to use
      
          -drive if=none,driver=nbd,server.type=inet,server.host=127.0.0.1,server.port=12345
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-id: 1490895797-29094-9-git-send-email-armbru@redhat.com
      
      [mreitz: Change iotest 147 accordingly]
      
      Because of this interface change, iotest 147 has to be adapted.
      Unfortunately, we cannot just flatten all of the addresses because
      nbd-server-start still takes a plain SocketAddress. Therefore, we need
      both and this is most easily achieved by writing the SocketAddress into
      the code and flattening it where necessary.
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20170330221243.17333-1-mreitz@redhat.com
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      9445673e
    • M
      sockets: New helper socket_address_crumple() · 216411b8
      Markus Armbruster 提交于
      SocketAddress is a simple union, and simple unions are awkward: they
      have their variant members wrapped in a "data" object on the wire, and
      require additional indirections in C.  I intend to limit its use to
      existing external interfaces.  New ones should use SocketAddressFlat.
      I further intend to convert all internal interfaces to
      SocketAddressFlat.  This helper should go away then.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-id: 1490895797-29094-8-git-send-email-armbru@redhat.com
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      216411b8
    • M
      qapi-schema: SocketAddressFlat variants 'vsock' and 'fd' · 8bc0673f
      Markus Armbruster 提交于
      Note that the new variants are impossible in qemu_gluster_glfs_init(),
      because the gconf->server can only come from qemu_gluster_parse_uri()
      or qemu_gluster_parse_json(), and neither can create anything but
      'inet' or 'unix'.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-id: 1490895797-29094-7-git-send-email-armbru@redhat.com
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      8bc0673f
    • M
      gluster: Prepare for SocketAddressFlat extension · fce5d538
      Markus Armbruster 提交于
      qemu_gluster_glfs_init() and qemu_gluster_parse_json() rely on the
      fact that SocketAddressFlatType has only two members
      SOCKET_ADDRESS_FLAT_TYPE_INET and SOCKET_ADDRESS_FLAT_TYPE_UNIX.
      Correct, but won't stay correct.  Make them more robust.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Message-id: 1490895797-29094-6-git-send-email-armbru@redhat.com
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      fce5d538
    • M
      block: Document -drive problematic code and bugs · 129c7d1c
      Markus Armbruster 提交于
      -blockdev and blockdev_add convert their arguments via QObject to
      BlockdevOptions for qmp_blockdev_add(), which converts them back to
      QObject, then to a flattened QDict.  The QDict's members are typed
      according to the QAPI schema.
      
      -drive converts its argument via QemuOpts to a (flat) QDict.  This
      QDict's members are all QString.
      
      Thus, the QType of a flat QDict member depends on whether it comes
      from -drive or -blockdev/blockdev_add, except when the QAPI type maps
      to QString, which is the case for 'str' and enumeration types.
      
      The block layer core extracts generic configuration from the flat
      QDict, and the block driver extracts driver-specific configuration.
      
      Both commonly do so by converting (parts of) the flat QDict to
      QemuOpts, which turns all values into strings.  Not exactly elegant,
      but correct.
      
      However, A few places access the flat QDict directly:
      
      * Most of them access members that are always QString.  Correct.
      
      * bdrv_open_inherit() accesses a boolean, carefully.  Correct.
      
      * nfs_config() uses a QObject input visitor.  Correct only because the
        visited type contains nothing but QStrings.
      
      * nbd_config() and ssh_config() use a QObject input visitor, and the
        visited types contain non-QStrings: InetSocketAddress members
        @numeric, @to, @ipv4, @ipv6.  -drive works as long as you don't try
        to use them (they're all optional).  @to is ignored anyway.
      
        Reproducer:
        -drive driver=ssh,server.host=h,server.port=22,server.ipv4,path=p
        -drive driver=nbd,server.type=inet,server.data.host=h,server.data.port=22,server.data.ipv4
        both fail with "Invalid parameter type for 'data.ipv4', expected: boolean"
      
      Add suitable comments to all these places.  Mark the buggy ones FIXME.
      
      "Fortunately", -drive's driver-specific options are entirely
      undocumented.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-id: 1490895797-29094-5-git-send-email-armbru@redhat.com
      [mreitz: Fixed two typos]
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      129c7d1c
    • M
      io vnc sockets: Clean up SocketAddressKind switches · a6c76285
      Markus Armbruster 提交于
      We have quite a few switches over SocketAddressKind.  Some have case
      labels for all enumeration values, others rely on a default label.
      Some abort when the value isn't a valid SocketAddressKind, others
      report an error then.
      
      Unify as follows.  Always provide case labels for all enumeration
      values, to clarify intent.  Abort when the value isn't a valid
      SocketAddressKind, because the program state is messed up then.
      
      Improve a few error messages while there.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 1490895797-29094-4-git-send-email-armbru@redhat.com
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      a6c76285
    • M
      char: Fix socket with "type": "vsock" address · d2e49aad
      Markus Armbruster 提交于
      Watch this:
      
          $ qemu-system-x86_64 -nodefaults -S -display none -qmp stdio
          {"QMP": {"version": {"qemu": {"micro": 91, "minor": 8, "major": 2}, "package": " (v2.8.0-1195-gf84141e-dirty)"}, "capabilities": []}}
          { "execute": "qmp_capabilities" }
          {"return": {}}
          { "execute": "chardev-add", "arguments": { "id": "chr0", "backend": { "type": "socket", "data": { "addr": { "type": "vsock", "data": { "cid": "CID", "port": "P" }}}}}}
          Aborted (core dumped)
      
      Crashes because SocketAddress_to_str() is blissfully unaware of
      SOCKET_ADDRESS_KIND_VSOCK.  Fix that.  Pick the output format to match
      socket_parse(), just like the existing formats.
      
      Cc: Stefan Hajnoczi <stefanha@redhat.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 1490895797-29094-3-git-send-email-armbru@redhat.com
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      d2e49aad
    • M
      nbd sockets vnc: Mark problematic address family tests TODO · ca0b64e5
      Markus Armbruster 提交于
      Certain features make sense only with certain address families.  For
      instance, passing file descriptors requires AF_UNIX.  Testing
      SocketAddress's saddr->type == SOCKET_ADDRESS_KIND_UNIX is obvious,
      but problematic: it can't recognize AF_UNIX when type ==
      SOCKET_ADDRESS_KIND_FD.
      
      Mark such tests of saddr->type TODO.  We may want to check the address
      family with getsockname() there.
      
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Gerd Hoffmann <kraxel@redhat.com>
      Cc: Daniel P. Berrange <berrange@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-id: 1490895797-29094-2-git-send-email-armbru@redhat.com
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      ca0b64e5
    • D
      block: add missed aio_context_acquire into release_drive · 9588c589
      Denis V. Lunev 提交于
      Recently we expirience hang with iothreads enabled with the following
      call trace:
      Thread 1 (Thread 0x7fa95efebc80 (LWP 177117)):
      0  ppoll () from /lib64/libc.so.6
      2  qemu_poll_ns () at qemu-timer.c:313
      3  aio_poll () at aio-posix.c:457
      4  bdrv_flush () at block/io.c:2641
      5  bdrv_close () at block.c:2143
      6  bdrv_delete () at block.c:2352
      7  bdrv_unref () at block.c:3429
      8  blk_remove_bs () at block/block-backend.c:427
      9  blk_delete () at block/block-backend.c:178
      10 blk_unref () at block/block-backend.c:226
      11 object_property_del_all () at qom/object.c:399
      12 object_finalize () at qom/object.c:461
      13 object_unref () at qom/object.c:898
      14 object_property_del_child () at qom/object.c:422
      15 qmp_marshal_device_del () at qmp-marshal.c:1145
      16 handle_qmp_command () at /usr/src/debug/qemu-2.6.0/monitor.c:3929
      
      Technically bdrv_flush() stucks in
          while (rwco.ret == NOT_DONE) {
              aio_poll(aio_context, true);
          }
      but rwco.ret is equal to 0 thus we have missed wakeup. Code investigation
      reveals that we do not have performed aio_context_acquire() on this call
      stack.
      
      This patch adds missed lock.
      Signed-off-by: NDenis V. Lunev <den@openvz.org>
      CC: Kevin Wolf <kwolf@redhat.com>
      CC: Max Reitz <mreitz@redhat.com>
      CC: Eric Blake <eblake@redhat.com>
      CC: Markus Armbruster <armbru@redhat.com>
      Message-id: 1490717566-25516-1-git-send-email-den@openvz.org
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      9588c589
    • G
      usb-host: switch to LIBUSB_API_VERSION · 102a3d84
      Gerd Hoffmann 提交于
      libusbx doesn't exist any more, the fork got merged back to libusb.  So
      stop using LIBUSBX_API_VERSION and use LIBUSB_API_VERSION instead.  For
      backward compatibility alias LIBUSB_API_VERSION to LIBUSBX_API_VERSION
      in case we figure LIBUSB_API_VERSION isn't defined.
      Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
      Reviewed-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
      Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Tested-by: NPeter Maydell <peter.maydell@linaro.org>
      Message-id: 20170403105238.23262-1-kraxel@redhat.com
      102a3d84
    • P
      disas/cris.c: Avoid unintentional sign extension · 230f4c6b
      Peter Maydell 提交于
      Commit 001ebaca fixed some unintended sign extension issues
      spotted by Coverity (CID 1005402, 1005403), but didn't catch
      all of them. Fix the rest, so we behave consistently whether
      'long' is 32 bit or 64 bit.
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      Reviewed-by: NEdgar E. Iglesias <edgar.iglesias@xilinx.com>
      Message-id: 1490970671-20560-1-git-send-email-peter.maydell@linaro.org
      230f4c6b
    • P
      configure: Mark SPARC as supported · 6499fd15
      Peter Maydell 提交于
      Thanks to John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
      and the Debian Project, we now have access to a SPARC Linux
      system we can use for build testing. Move SPARC back into
      the "supported" list.
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      Message-id: 1490698718-23762-1-git-send-email-peter.maydell@linaro.org
      6499fd15
    • P
      tcg/sparc: Zero extend address argument to ld/st helpers · 5c32be5b
      Peter Maydell 提交于
      The C store helper functions take the address argument as a
      target_ulong type; if this is 32 bit but the host is 64 bit
      then the SPARC calling convention requires that the caller
      must zero extend the value. We weren't doing this, which
      meant we could pass values to the caller with high bits set
      and QEMU would crash if it was compiled with optimizations.
      In particular, the i386 BIOS would not start.
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      Message-id: 1490871151-29029-3-git-send-email-peter.maydell@linaro.org
      Reviewed-by: NRichard Henderson <rth@twiddle.net>
      5c32be5b
    • P
      tcg/sparc: Zero extend data argument to store helpers · 709a340d
      Peter Maydell 提交于
      The C store helper functions take the data argument as a uint8_t,
      uint16_t, etc depending on the store size. The SPARC calling
      convention requires that data types smaller than the register
      size must be extended by the caller. We weren't doing this,
      which meant that if QEMU was compiled with optimizations enabled
      we could end up storing incorrect values to guest memory.
      (In particular the i386 guest BIOS would crash on startup.)
      
      Add code to the trampolines that call the store helpers to
      do the zero extension as required.
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Message-id: 1490871151-29029-2-git-send-email-peter.maydell@linaro.org
      Reviewed-by: NRichard Henderson <rth@twiddle.net>
      709a340d
    • P
      Merge remote-tracking branch 'remotes/kraxel/tags/pull-fixes-20170403-1' into staging · f9e46d37
      Peter Maydell 提交于
      bugfixes: xhci, input-linux and vnc
      
      # gpg: Signature made Mon 03 Apr 2017 11:25:29 BST
      # gpg:                using RSA key 0x4CB6D8EED3E87138
      # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>"
      # gpg:                 aka "Gerd Hoffmann <gerd@kraxel.org>"
      # gpg:                 aka "Gerd Hoffmann (private) <kraxel@gmail.com>"
      # Primary key fingerprint: A032 8CFF B93A 17A7 9901  FE7D 4CB6 D8EE D3E8 7138
      
      * remotes/kraxel/tags/pull-fixes-20170403-1:
        vnc: allow to connect with add_client when -vnc none
        Fix input-linux reading from device
        xhci: flush dequeue pointer to endpoint context
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      f9e46d37
    • P
      Merge remote-tracking branch 'remotes/dgibson/tags/ppc-for-2.9-20170403' into staging · 9eb5adae
      Peter Maydell 提交于
      ppc patch queue 2017-04-03
      
      A single bugfix in this pull request, for an ugly assert() failure, if
      the user ignores the information in query-hotpluggable-cpus and tries
      to hot add CPUs to pseries with bad parameters.
      
      # gpg: Signature made Mon 03 Apr 2017 11:06:58 BST
      # gpg:                using RSA key 0x6C38CACA20D9B392
      # gpg: Good signature from "David Gibson <david@gibson.dropbear.id.au>"
      # gpg:                 aka "David Gibson (Red Hat) <dgibson@redhat.com>"
      # gpg:                 aka "David Gibson (ozlabs.org) <dgibson@ozlabs.org>"
      # gpg:                 aka "David Gibson (kernel.org) <dwg@kernel.org>"
      # Primary key fingerprint: 75F4 6586 AE61 A66C C44E  87DC 6C38 CACA 20D9 B392
      
      * remotes/dgibson/tags/ppc-for-2.9-20170403:
        pseries: Enforce homogeneous threads-per-core
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      9eb5adae
    • M
      vnc: allow to connect with add_client when -vnc none · fa03cb7f
      Marc-André Lureau 提交于
      Do not skip VNC initialization, in particular of auth method when vnc is
      configured without sockets, since we should still allow connections
      through QMP add_client.
      
      Fixes:
      https://bugzilla.redhat.com/show_bug.cgi?id=1434551Signed-off-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
      Message-id: 20170328160646.21250-1-marcandre.lureau@redhat.com
      Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
      fa03cb7f
    • J
      Fix input-linux reading from device · 1684907c
      Javier Celaya 提交于
      The evdev devices in input-linux.c are read in blocks of one whole
      event. If there are not enough bytes available, they are discarded,
      instead of being kept for the next read operation. This results in
      lost events, of even non-working devices.
      
      This patch keeps track of the number of bytes to be read to fill up
      a whole event, and then handle it.
      
      Changes from v1 to v2:
      - Fix: Calculate offset on each iteration
      
      Changes from v2 to v3:
      - Fix coding style
      - Store offset instead of bytes to be read
      Signed-off-by: NJavier Celaya <jcelaya@gmail.com>
      Message-id: 20170327182624.2914-1-jcelaya@gmail.com
      Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
      1684907c
    • G
      xhci: flush dequeue pointer to endpoint context · 243afe85
      Gerd Hoffmann 提交于
      When done processing a endpoint ring we must update the dequeue pointer
      in the endpoint context in guest memory.  This is needed to make sure
      the guest has a correct view of things and also to make live migration
      work properly, because xhci post_load restores alot of the state from
      xhci data structures in guest memory.
      
      Add xhci_set_ep_state() call to do that.
      
      The recursive calls stopped by commit
      ddb603ab had the (unintentional) side
      effect to hiding this bug.  xhci_set_ep_state() was called before
      processing, to set the state to running, which updated the dequeue
      pointer too.
      Reported-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
      Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
      Tested-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
      Message-id: 20170331102521.29253-1-kraxel@redhat.com
      243afe85
    • P
      Merge remote-tracking branch 'remotes/cody/tags/block-pull-request' into staging · 6954cdc0
      Peter Maydell 提交于
      # gpg: Signature made Sat 01 Apr 2017 02:23:29 BST
      # gpg:                using RSA key 0xBDBE7B27C0DE3057
      # gpg: Good signature from "Jeffrey Cody <jcody@redhat.com>"
      # gpg:                 aka "Jeffrey Cody <jeff@codyprime.org>"
      # gpg:                 aka "Jeffrey Cody <codyprime@gmail.com>"
      # Primary key fingerprint: 9957 4B4D 3474 90E7 9D98  D624 BDBE 7B27 C0DE 3057
      
      * remotes/cody/tags/block-pull-request:
        block/curl: Check protocol prefix
        qapi/curl: Extend and fix blockdev-add schema
        rbd: Fix regression in legacy key/values containing escaped :
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      6954cdc0
    • D
      pseries: Enforce homogeneous threads-per-core · 8149e299
      David Gibson 提交于
      For reasons that may be useful in future, CPU core objects, as used on the
      pseries machine type have their own nr-threads property, potentially
      allowing cores with different numbers of threads in the same system.
      
      If the user/management uses the values specified in query-hotpluggable-cpus
      as they're expected to do, this will never matter in pratice.  But that's
      not actually enforced - it's possible to manually specify a core with
      a different number of threads from that in -smp.  That will confuse the
      platform - most immediately, this can be used to create a CPU thread with
      index above max_cpus which leads to an assertion failure in
      spapr_cpu_core_realize().
      
      For now, enforce that all cores must have the same, standard, number of
      threads.
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Reviewed-by: NBharata B Rao <bharata@linux.vnet.ibm.com>
      8149e299
  2. 01 4月, 2017 5 次提交
    • M
      block/curl: Check protocol prefix · 34634ca2
      Max Reitz 提交于
      If the user has explicitly specified a block driver and thus a protocol,
      we have to make sure the URL's protocol prefix matches. Otherwise the
      latter will silently override the former which might catch some users by
      surprise.
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-id: 20170331120431.1767-3-mreitz@redhat.com
      Signed-off-by: NJeff Cody <jcody@redhat.com>
      34634ca2
    • M
      qapi/curl: Extend and fix blockdev-add schema · 6b9d62db
      Max Reitz 提交于
      The curl block driver accepts more options than just "filename"; also,
      the URL is actually expected to be passed through the "url" option
      instead of "filename".
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-id: 20170331120431.1767-2-mreitz@redhat.com
      Signed-off-by: NJeff Cody <jcody@redhat.com>
      6b9d62db
    • E
      rbd: Fix regression in legacy key/values containing escaped : · e98c6961
      Eric Blake 提交于
      Commit c7cacb3e accidentally broke legacy key-value parsing through
      pseudo-filename parsing of -drive file=rbd://..., for any key that
      contains an escaped ':'.  Such a key is surprisingly common, thanks
      to mon_host specifying a 'host:port' string.  The break happens
      because passing things from QDict through QemuOpts back to another
      QDict requires that we pack our parsed key/value pairs into a string,
      and then reparse that string, but the intermediate string that we
      created ("key1=value1:key2=value2") lost the \: escaping that was
      present in the original, so that we could no longer see which : were
      used as separators vs. those used as part of the original input.
      
      Fix it by collecting the key/value pairs through a QList, and
      sending that list on a round trip through a JSON QString (as in
      '["key1","value1","key2","value2"]') on its way through QemuOpts,
      rather than hand-rolling our own string.  Since the string is only
      handled internally, this was faster than creating a full-blown
      struct of '[{"key1":"value1"},{"key2":"value2"}]', and safer at
      guaranteeing order compared to '{"key1":"value1","key2":"value2"}'.
      
      It would be nicer if we didn't have to round-trip through QemuOpts
      in the first place, but that's a much bigger task for later.
      
      Reproducer:
      ./x86_64-softmmu/qemu-system-x86_64 -nodefaults -nographic -qmp stdio \
      -drive 'file=rbd:volumes/volume-ea141b5c-cdb3-4765-910d-e7008b209a70'\
      ':id=compute:key=AQAVkvxXAAAAABAA9ZxWFYdRmV+DSwKr7BKKXg=='\
      ':auth_supported=cephx\;none:mon_host=192.168.1.2\:6789'\
      ',format=raw,if=none,id=drive-virtio-disk0,'\
      'serial=ea141b5c-cdb3-4765-910d-e7008b209a70,cache=writeback'
      
      Even without an RBD setup, this serves a test of whether we get
      the incorrect parser error of:
      qemu-system-x86_64: -drive file=rbd:...cache=writeback: conf option 6789 has no value
      or the correct behavior of hanging while trying to connect to
      the requested mon_host of 192.168.1.2:6789.
      Reported-by: NAlexandru Avadanii <Alexandru.Avadanii@enea.com>
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20170331152730.12514-1-eblake@redhat.com
      Signed-off-by: NJeff Cody <jcody@redhat.com>
      e98c6961
    • P
      Merge remote-tracking branch 'remotes/awilliam/tags/vfio-updates-20170331.0' into staging · 95b31d70
      Peter Maydell 提交于
      VFIO fixes 2017-03-31
      
       - We can't disable stolen memory for UPT mode, it breaks Windows
         drivers on Gen9+ IGD (Xiong Zhang)
      
      # gpg: Signature made Fri 31 Mar 2017 17:13:48 BST
      # gpg:                using RSA key 0x239B9B6E3BB08B22
      # gpg: Good signature from "Alex Williamson <alex.williamson@redhat.com>"
      # gpg:                 aka "Alex Williamson <alex@shazbot.org>"
      # gpg:                 aka "Alex Williamson <alwillia@redhat.com>"
      # gpg:                 aka "Alex Williamson <alex.l.williamson@gmail.com>"
      # Primary key fingerprint: 42F6 C04E 540B D1A9 9E7B  8A90 239B 9B6E 3BB0 8B22
      
      * remotes/awilliam/tags/vfio-updates-20170331.0:
        Revert "vfio/pci-quirks.c: Disable stolen memory for igd VFIO"
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      95b31d70
    • X
      Revert "vfio/pci-quirks.c: Disable stolen memory for igd VFIO" · 93587e3a
      Xiong Zhang 提交于
      This reverts commit c2b2e158.
      
      The original patch intend to prevent linux i915 driver from using
      stolen meory. But this patch breaks windows IGD driver loading on
      Gen9+, as IGD HW will use stolen memory on Gen9+, once windows IGD
      driver see zero size stolen memory, it will unload.
      Meanwhile stolen memory will be disabled in 915 when i915 run as
      a guest.
      Signed-off-by: NXiong Zhang <xiong.y.zhang@intel.com>
      [aw: Gen9+ is SkyLake and newer]
      Signed-off-by: NAlex Williamson <alex.williamson@redhat.com>
      93587e3a
  3. 31 3月, 2017 12 次提交