1. 04 6月, 2014 11 次提交
    • S
      nbd: implement .bdrv_detach/attach_aio_context() · 69447cd8
      Stefan Hajnoczi 提交于
      Drop the assumption that we're using the main AioContext.  Convert
      qemu_aio_set_fd_handler() calls to aio_set_fd_handler().
      
      The .bdrv_detach/attach_aio_context() interfaces also need to be
      implemented to move the socket fd handler from the old to the new
      AioContext.
      Acked-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      69447cd8
    • S
      iscsi: implement .bdrv_detach/attach_aio_context() · 80cf6257
      Stefan Hajnoczi 提交于
      Drop the assumption that we're using the main AioContext for Linux
      AIO.  Convert qemu_aio_set_fd_handler() to aio_set_fd_handler() and
      timer_new_ms() to aio_timer_new().
      
      The .bdrv_detach/attach_aio_context() interfaces also need to be
      implemented to move the fd and timer from the old to the new AioContext.
      
      Cc: Peter Lieven <pl@kamp.de>
      Cc: Ronnie Sahlberg <ronniesahlberg@gmail.com>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      Reviewed-by: NPeter Lieven <pl@kamp.de>
      80cf6257
    • S
      gluster: use BlockDriverState's AioContext · 6ee50af2
      Stefan Hajnoczi 提交于
      Drop the assumption that we're using the main AioContext.  Use
      aio_bh_new() instead of qemu_bh_new().
      
      The .bdrv_detach_aio_context() and .bdrv_attach_aio_context() interfaces
      are not needed since no fd handlers, timers, or BHs stay registered when
      requests have been drained.
      
      Cc: Bharata B Rao <bharata@linux.vnet.ibm.com>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      6ee50af2
    • S
      curl: implement .bdrv_detach/attach_aio_context() · 63f0f45f
      Stefan Hajnoczi 提交于
      The curl block driver uses fd handlers, timers, and BHs.  The fd
      handlers and timers are managed on behalf of libcurl, which controls
      them using callback functions that the block driver implements.
      
      The simplest way to implement .bdrv_detach/attach_aio_context() is to
      clean up libcurl in the old event loop and initialize it again in the
      new event loop.  We do not need to keep track of anything since there
      are no pending requests when the AioContext is changed.
      
      Also make sure to use aio_set_fd_handler() instead of
      qemu_aio_set_fd_handler() and aio_bh_new() instead of qemu_bh_new() so
      the current AioContext is passed in.
      
      Cc: Alexander Graf <agraf@suse.de>
      Cc: Fam Zheng <famz@redhat.com>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      63f0f45f
    • S
      blkverify: implement .bdrv_detach/attach_aio_context() · 9d94020b
      Stefan Hajnoczi 提交于
      Drop the assumption that we're using the main AioContext.  Convert
      qemu_bh_new() to aio_bh_new() and qemu_aio_wait() to aio_poll() so we
      use the BlockDriverState's AioContext.
      
      Implement .bdrv_detach/attach_aio_context() interfaces to propagate
      detach/attach to BDRVBlkverifyState->test_file.  The block layer takes
      care of ->file and ->backing_hd but doesn't know about our ->test_file
      BlockDriverState, which is also part of the graph.
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      9d94020b
    • S
      blkdebug: use BlockDriverState's AioContext · 7e1efdf0
      Stefan Hajnoczi 提交于
      Drop the assumption that we're using the main AioContext.  Convert
      qemu_bh_new() to aio_bh_new() so we use the BlockDriverState's
      AioContext.
      
      The .bdrv_detach_aio_context() and .bdrv_attach_aio_context() interfaces
      are not needed since no fd handlers, timers, or BHs stay registered when
      requests have been drained.
      
      Cc: Kevin Wolf <kwolf@redhat.com>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      7e1efdf0
    • S
      block: add bdrv_set_aio_context() · dcd04228
      Stefan Hajnoczi 提交于
      Up until now all BlockDriverState instances have used the QEMU main loop
      for fd handlers, timers, and BHs.  This is not scalable on SMP guests
      and hosts so we need to move to a model with multiple event loops on
      different host CPUs.
      
      bdrv_set_aio_context() assigns the AioContext event loop to use for a
      particular BlockDriverState.  It first detaches the entire
      BlockDriverState graph from the current AioContext and then attaches to
      the new AioContext.
      
      This function will be used by virtio-blk data-plane to assign a
      BlockDriverState to its IOThread AioContext.  Make
      bdrv_aio_set_context() public since data-plane should not include
      block_int.h.
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      dcd04228
    • S
      block: acquire AioContext in bdrv_drain_all() · 9b536adc
      Stefan Hajnoczi 提交于
      Modify bdrv_drain_all() to take into account that BlockDriverState
      instances may be running in different AioContexts.
      
      This patch changes the implementation of bdrv_drain_all() while
      preserving the semantics.  Previously kicking throttled requests and
      checking for pending requests were done across all BlockDriverState
      instances in sequence.  Now we process each BlockDriverState in turn,
      making sure to acquire and release its AioContext.
      
      This prevents race conditions between the thread executing
      bdrv_drain_all() and the thread running the AioContext.
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      9b536adc
    • S
      block: acquire AioContext in bdrv_*_all() · ed78cda3
      Stefan Hajnoczi 提交于
      bdrv_close_all(), bdrv_commit_all(), bdrv_flush_all(),
      bdrv_invalidate_cache_all(), and bdrv_clear_incoming_migration_all() are
      called by main loop code and touch all BlockDriverState instances.
      
      Some BlockDriverState instances may be running in another AioContext.
      Make sure to acquire the AioContext before closing the BlockDriverState.
      
      This will protect against race conditions once virtio-blk data-plane is
      using the BlockDriverState from another AioContext event loop.
      
      Note that this patch does not convert bdrv_drain_all() yet since that
      conversion is non-trivial.
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      ed78cda3
    • S
      block: use BlockDriverState AioContext · 2572b37a
      Stefan Hajnoczi 提交于
      Drop the assumption that we're using the main AioContext.  Convert
      qemu_aio_wait() to aio_poll() and qemu_bh_new() to aio_bh_new() so the
      BlockDriverState AioContext is used.
      
      Note there is still one qemu_aio_wait() left in bdrv_create() but we do
      not have a BlockDriverState there and only main loop code invokes this
      function.
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      2572b37a
    • S
      aio: fix qemu_bh_schedule() bh->ctx race condition · 924fe129
      Stefan Hajnoczi 提交于
      qemu_bh_schedule() is supposed to be thread-safe at least the first time
      it is called.  Unfortunately this is not quite true:
      
        bh->scheduled = 1;
        aio_notify(bh->ctx);
      
      Since another thread may run the BH callback once it has been scheduled,
      there is a race condition if the callback frees the BH before
      aio_notify(bh->ctx) has a chance to run.
      Reported-by: NStefan Priebe <s.priebe@profihost.ag>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Tested-by: NStefan Priebe <s.priebe@profihost.ag>
      924fe129
  2. 03 6月, 2014 3 次提交
    • P
      Merge remote-tracking branch 'remotes/awilliam/tags/vfio-pci-for-qemu-20140602.0' into staging · e00fcfea
      Peter Maydell 提交于
      VFIO patches: realtek NIC quirk + SPAPR IOMMU AddressSpace support
      
      # gpg: Signature made Mon 02 Jun 2014 22:44:42 BST using RSA key ID 3BB08B22
      # gpg: Can't check signature: public key not found
      
      * remotes/awilliam/tags/vfio-pci-for-qemu-20140602.0:
        vfio: Add guest side IOMMU support
        vfio: Create VFIOAddressSpace objects as needed
        vfio: Introduce VFIO address spaces
        vfio: Rework to have error paths
        vfio: Fix 128 bit handling
        int128: Add int128_exts64()
        memory: Sanity check that no listeners remain on a destroyed AddressSpace
        vfio-pci: Quirk RTL8168 NIC
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      e00fcfea
    • P
      Merge remote-tracking branch 'remotes/kraxel/tags/pull-roms-3' into staging · 278073ba
      Peter Maydell 提交于
      seabios: update to 1.7.5 final
      
      # gpg: Signature made Mon 02 Jun 2014 15:49:59 BST using RSA key ID D3E87138
      # 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>"
      
      * remotes/kraxel/tags/pull-roms-3:
        seabios: update to 1.7.5 final
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      278073ba
    • P
      Merge remote-tracking branch 'remotes/kraxel/tags/pull-usb-8' into staging · 82ea61c6
      Peter Maydell 提交于
      qtest: improve ehci/uhci test
      usb: misc fixes, mostly for usb3/xhci
      
      # gpg: Signature made Mon 02 Jun 2014 15:40:34 BST using RSA key ID D3E87138
      # 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>"
      
      * remotes/kraxel/tags/pull-usb-8:
        xhci: order superspeed ports first
        xhci: make port reset trace point more verbose
        usb: add usb_pick_speed
        usb-host: add HAVE_STREAMS define
        usb-host: allow attaching usb3 devices to ehci
        usb: improve ehci/uhci test
        usb: move ehci register defines to header file
        usb: add uhci port status reserved bit
        usb: move uhci register defines to header file
        qtest: fix qpci_config_writel
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      82ea61c6
  3. 02 6月, 2014 23 次提交
  4. 31 5月, 2014 3 次提交
    • D
      vfio: Add guest side IOMMU support · 5e70018b
      David Gibson 提交于
      This patch uses the new IOMMU notifiers to allow VFIO pass through devices
      to work with guest side IOMMUs, as long as the host-side VFIO iommu has
      sufficient capability and granularity to match the guest side. This works
      by tracking all map and unmap operations on the guest IOMMU using the
      notifiers, and mirroring them into VFIO.
      
      There are a number of FIXMEs, and the scheme involves rather more notifier
      structures than I'd like, but it should make for a reasonable proof of
      concept.
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      Signed-off-by: NAlex Williamson <alex.williamson@redhat.com>
      5e70018b
    • D
      vfio: Create VFIOAddressSpace objects as needed · 0688448b
      David Gibson 提交于
      So far, VFIO has a notion of different logical DMA address spaces, but
      only ever uses one (system memory).  This patch extends this, creating
      new VFIOAddressSpace objects as necessary, according to the AddressSpace
      reported by the PCI subsystem for this device's DMAs.
      
      This isn't enough yet to support guest side IOMMUs with VFIO, but it does
      mean we could now support VFIO devices on, for example, a guest side PCI
      host bridge which maps system memory at somewhere other than 0 in PCI
      space.
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      Signed-off-by: NAlex Williamson <alex.williamson@redhat.com>
      0688448b
    • D
      vfio: Introduce VFIO address spaces · 3df3e0a5
      David Gibson 提交于
      The only model so far supported for VFIO passthrough devices is the model
      usually used on x86, where all of the guest's RAM is mapped into the
      (host) IOMMU and there is no IOMMU visible in the guest.
      
      This patch begins to relax this model, introducing the notion of a
      VFIOAddressSpace.  This represents a logical DMA address space which will
      be visible to one or more VFIO devices by appropriate mapping in the (host)
      IOMMU.  Thus the currently global list of containers becomes local to
      a VFIOAddressSpace, and we verify that we don't attempt to add a VFIO
      group to multiple address spaces.
      
      For now, only one VFIOAddressSpace is created and used, corresponding to
      main system memory, that will change in future patches.
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      Signed-off-by: NAlex Williamson <alex.williamson@redhat.com>
      3df3e0a5