qemu-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-commits] [qemu/qemu] ad523b: iov: avoid memcpy for "simple" iov_fr


From: GitHub
Subject: [Qemu-commits] [qemu/qemu] ad523b: iov: avoid memcpy for "simple" iov_from_buf/iov_to...
Date: Tue, 09 Feb 2016 11:30:05 -0800

  Branch: refs/heads/master
  Home:   https://github.com/qemu/qemu
  Commit: ad523bca56a7202d2498c550a41be5c986c4d33c
      
https://github.com/qemu/qemu/commit/ad523bca56a7202d2498c550a41be5c986c4d33c
  Author: Paolo Bonzini <address@hidden>
  Date:   2016-02-09 (Tue, 09 Feb 2016)

  Changed paths:
    M include/qemu/iov.h
    M util/iov.c

  Log Message:
  -----------
  iov: avoid memcpy for "simple" iov_from_buf/iov_to_buf

memcpy can take a large amount of time for small reads and writes.
For virtio it is a common case that the first iovec can satisfy the
whole read or write.  In that case, and if bytes is a constant to
avoid excessive growth of code, inline the first iteration
into the caller.

Signed-off-by: Paolo Bonzini <address@hidden>
Message-id: address@hidden
Signed-off-by: Stefan Hajnoczi <address@hidden>


  Commit: 794f01414f9f4c4d0c6f1961154674961941c197
      
https://github.com/qemu/qemu/commit/794f01414f9f4c4d0c6f1961154674961941c197
  Author: Fam Zheng <address@hidden>
  Date:   2016-02-09 (Tue, 09 Feb 2016)

  Changed paths:
    M blockjob.c
    M include/block/blockjob.h

  Log Message:
  -----------
  blockjob: Fix hang in block_job_finish_sync

With a mirror job running on a virtio-blk dataplane disk, sending "q" to
HMP will cause a dead loop in block_job_finish_sync.

This is because the aio_poll() only processes the AIO context of bs
which has no more work to do, while the main loop BH that is scheduled
for setting the job->completed flag is never processed.

Fix this by adding a flag in BlockJob structure, to track which context
to poll for the block job to make progress. Its value is set to true
when block_job_coroutine_complete() is called, and is checked in
block_job_finish_sync to determine which context to poll.

Suggested-by: Stefan Hajnoczi <address@hidden>
Signed-off-by: Fam Zheng <address@hidden>
Message-id: address@hidden
Signed-off-by: Stefan Hajnoczi <address@hidden>


  Commit: 9dcf8ecd9e74804aa1687e5688386001a1f3f89f
      
https://github.com/qemu/qemu/commit/9dcf8ecd9e74804aa1687e5688386001a1f3f89f
  Author: Paolo Bonzini <address@hidden>
  Date:   2016-02-09 (Tue, 09 Feb 2016)

  Changed paths:
    M block/io.c

  Log Message:
  -----------
  block: add missing call to bdrv_drain_recurse

This is also needed in bdrv_drain_all, not just in bdrv_drain.

Signed-off-by: Paolo Bonzini <address@hidden>
Reviewed-by: Fam Zheng <address@hidden>
Reviewed-by: Kevin Wolf <address@hidden>
Message-id: address@hidden
Signed-off-by: Stefan Hajnoczi <address@hidden>


  Commit: f075c89f0a9cb31daf38892371d2822177505706
      
https://github.com/qemu/qemu/commit/f075c89f0a9cb31daf38892371d2822177505706
  Author: Peter Maydell <address@hidden>
  Date:   2016-02-09 (Tue, 09 Feb 2016)

  Changed paths:
    M block/io.c
    M blockjob.c
    M include/block/blockjob.h
    M include/qemu/iov.h
    M util/iov.c

  Log Message:
  -----------
  Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into 
staging

# gpg: Signature made Tue 09 Feb 2016 15:11:25 GMT using RSA key ID 81AB73C8
# gpg: Good signature from "Stefan Hajnoczi <address@hidden>"
# gpg:                 aka "Stefan Hajnoczi <address@hidden>"

* remotes/stefanha/tags/block-pull-request:
  block: add missing call to bdrv_drain_recurse
  blockjob: Fix hang in block_job_finish_sync
  iov: avoid memcpy for "simple" iov_from_buf/iov_to_buf

Signed-off-by: Peter Maydell <address@hidden>


Compare: https://github.com/qemu/qemu/compare/84c0781103dc...f075c89f0a9c

reply via email to

[Prev in Thread] Current Thread [Next in Thread]