1. 04 6月, 2014 20 次提交
    • S
      sheepdog: implement .bdrv_detach/attach_aio_context() · 84390bed
      Stefan Hajnoczi 提交于
      Drop the assumption that we're using the main AioContext.  Convert
      qemu_aio_set_fd_handler() to aio_set_fd_handler() and qemu_aio_wait() to
      aio_poll().
      
      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.
      
      Cc: MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>
      Acked-by: NLiu Yuan <namei.unix@gmail.com>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      84390bed
    • S
      rbd: use BlockDriverState's AioContext · ea800191
      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().
      
      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: Josh Durgin <josh.durgin@inktank.com>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      ea800191
    • S
      block/raw-win32: implement .bdrv_detach/attach_aio_context() · 85ebd381
      Stefan Hajnoczi 提交于
      Drop the assumption that we're using the main AioContext for raw-win32.
      Convert the aio-win32 code to support detach/attach and replace
      qemu_aio_wait() with aio_poll().
      
      The .bdrv_detach/attach_aio_context() interfaces move the aio-win32
      event notifier from the old to the new AioContext.
      
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      85ebd381
    • S
      block/raw-win32: create one QEMUWin32AIOState per BDRVRawState · 99cc5989
      Stefan Hajnoczi 提交于
      Each QEMUWin32AIOState event notifier is associated with an AioContext.
      Since BlockDriverState instances can use different AioContexts we cannot
      continue to use a global QEMUWin32AIOState.
      
      Let each BDRVRawState have its own QEMUWin32AIOState and free it when
      BDRVRawState is closed.
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      99cc5989
    • S
      block/linux-aio: fix memory and fd leak · abd269b7
      Stefan Hajnoczi 提交于
      Hot unplugging -drive aio=native,file=test.img,format=raw images leaves
      the Linux AIO event notifier and struct qemu_laio_state allocated.
      Luckily nothing will use the event notifier after the BlockDriverState
      has been closed so the handler function is never called.
      
      It's still worth fixing this resource leak.
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      abd269b7
    • S
      block/raw-posix: implement .bdrv_detach/attach_aio_context() · c2f3426c
      Stefan Hajnoczi 提交于
      Drop the assumption that we're using the main AioContext for Linux AIO.
      Convert the Linux AIO event notifier to use aio_set_event_notifier().
      
      The .bdrv_detach/attach_aio_context() interfaces also need to be
      implemented to move the event notifier handler from the old to the new
      AioContext.
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      c2f3426c
    • S
      quorum: implement .bdrv_detach/attach_aio_context() · e3625d3d
      Stefan Hajnoczi 提交于
      Implement .bdrv_detach/attach_aio_context() interfaces to propagate
      detach/attach to BDRVQuorumState->bs[] children.  The block layer takes
      care of ->file and ->backing_hd but doesn't know about our ->bs[]
      BlockDriverStates, which is also part of the graph.
      Reviewed-by: NBenoît Canet <benoit.canet@irqsave.net>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      e3625d3d
    • S
      qed: use BlockDriverState's AioContext · a8c868c3
      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're
      using the BlockDriverState's AioContext.
      
      Implement .bdrv_detach/attach_aio_context() interfaces to move the
      QED_F_NEED_CHECK timer from the old AioContext to the new one.
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      a8c868c3
    • S
      nfs: implement .bdrv_detach/attach_aio_context() · 471799d1
      Stefan Hajnoczi 提交于
      Drop the assumption that we're using the main AioContext.  The following
      functions need to be converted:
       * qemu_bh_new() -> aio_bh_new()
       * qemu_aio_set_fd_handler() -> aio_set_fd_handler()
       * qemu_aio_wait() -> aio_poll()
      
      The .bdrv_detach/attach_aio_context() interfaces also need to be
      implemented to move the fd handler from the old to the new AioContext.
      
      Cc: Peter Lieven <pl@kamp.de>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      Reviewed-by: NPeter Lieven <pl@kamp.de>
      471799d1
    • 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 17 次提交