All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 0/9] Block patches
@ 2019-02-11  5:50 Stefan Hajnoczi
  2019-02-11  5:50 ` [Qemu-devel] [PULL 1/9] iothread: fix iothread hang when stop too soon Stefan Hajnoczi
                   ` (9 more replies)
  0 siblings, 10 replies; 22+ messages in thread
From: Stefan Hajnoczi @ 2019-02-11  5:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marcel Apfelbaum, Peter Maydell, Thomas Huth, Stefan Hajnoczi,
	Eduardo Habkost, Laurent Vivier, Max Reitz, Michael S. Tsirkin,
	Paolo Bonzini, qemu-block, Kevin Wolf

The following changes since commit e47f81b617684c4546af286d307b69014a83538a:

  Merge remote-tracking branch 'remotes/thibault/tags/samuel-thibault' into staging (2019-02-07 18:53:25 +0000)

are available in the Git repository at:

  git://github.com/stefanha/qemu.git tags/block-pull-request

for you to fetch changes up to 55140166667bb555c5d05165b93b25557d2e6397:

  tests/virtio-blk: add test for WRITE_ZEROES command (2019-02-11 11:58:17 +0800)

----------------------------------------------------------------
Pull request

User-visible changes:

 * virtio-blk: DISCARD and WRITE_ZEROES support

----------------------------------------------------------------

Peter Xu (1):
  iothread: fix iothread hang when stop too soon

Stefano Garzarella (7):
  virtio-blk: cleanup using VirtIOBlock *s and VirtIODevice *vdev
  virtio-blk: add acct_failed param to virtio_blk_handle_rw_error()
  virtio-blk: add host_features field in VirtIOBlock
  virtio-blk: add "discard" and "write-zeroes" properties
  virtio-blk: add DISCARD and WRITE_ZEROES features
  tests/virtio-blk: change assert on data_size in virtio_blk_request()
  tests/virtio-blk: add test for WRITE_ZEROES command

Vladimir Sementsov-Ogievskiy (1):
  qemugdb/coroutine: fix arch_prctl has unknown return type

 include/hw/virtio/virtio-blk.h |   5 +-
 hw/block/virtio-blk.c          | 236 +++++++++++++++++++++++++++++----
 hw/core/machine.c              |   2 +
 iothread.c                     |   6 +-
 tests/virtio-blk-test.c        |  75 ++++++++++-
 scripts/qemugdb/coroutine.py   |   2 +-
 6 files changed, 297 insertions(+), 29 deletions(-)

-- 
2.20.1

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PULL 1/9] iothread: fix iothread hang when stop too soon
  2019-02-11  5:50 [Qemu-devel] [PULL 0/9] Block patches Stefan Hajnoczi
@ 2019-02-11  5:50 ` Stefan Hajnoczi
  2019-02-11  5:50 ` [Qemu-devel] [PULL 2/9] qemugdb/coroutine: fix arch_prctl has unknown return type Stefan Hajnoczi
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Stefan Hajnoczi @ 2019-02-11  5:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marcel Apfelbaum, Peter Maydell, Thomas Huth, Stefan Hajnoczi,
	Eduardo Habkost, Laurent Vivier, Max Reitz, Michael S. Tsirkin,
	Paolo Bonzini, qemu-block, Kevin Wolf, Peter Xu,
	Dr . David Alan Gilbert, Lukáš Doktor,
	Markus Armbruster, Eric Blake

From: Peter Xu <peterx@redhat.com>

Lukas reported an hard to reproduce QMP iothread hang on s390 that
QEMU might hang at pthread_join() of the QMP monitor iothread before
quitting:

  Thread 1
  #0  0x000003ffad10932c in pthread_join
  #1  0x0000000109e95750 in qemu_thread_join
      at /home/thuth/devel/qemu/util/qemu-thread-posix.c:570
  #2  0x0000000109c95a1c in iothread_stop
  #3  0x0000000109bb0874 in monitor_cleanup
  #4  0x0000000109b55042 in main

While the iothread is still in the main loop:

  Thread 4
  #0  0x000003ffad0010e4 in ??
  #1  0x000003ffad553958 in g_main_context_iterate.isra.19
  #2  0x000003ffad553d90 in g_main_loop_run
  #3  0x0000000109c9585a in iothread_run
      at /home/thuth/devel/qemu/iothread.c:74
  #4  0x0000000109e94752 in qemu_thread_start
      at /home/thuth/devel/qemu/util/qemu-thread-posix.c:502
  #5  0x000003ffad10825a in start_thread
  #6  0x000003ffad00dcf2 in thread_start

IMHO it's because there's a race between the main thread and iothread
when stopping the thread in following sequence:

    main thread                       iothread
    ===========                       ==============
                                      aio_poll()
    iothread_get_g_main_context
      set iothread->worker_context
    iothread_stop
      schedule iothread_stop_bh
                                        execute iothread_stop_bh [1]
                                          set iothread->running=false
                                          (since main_loop==NULL so
                                           skip to quit main loop.
                                           Note: although main_loop is
                                           NULL but worker_context is
                                           not!)
                                      atomic_read(&iothread->worker_context) [2]
                                        create main_loop object
                                        g_main_loop_run() [3]
    pthread_join() [4]

We can see that when execute iothread_stop_bh() at [1] it's possible
that main_loop is still NULL because it's only created until the first
check of the worker_context later at [2].  Then the iothread will hang
in the main loop [3] and it'll starve the main thread too [4].

Here the simple solution should be that we check again the "running"
variable before check against worker_context.

CC: Thomas Huth <thuth@redhat.com>
CC: Dr. David Alan Gilbert <dgilbert@redhat.com>
CC: Stefan Hajnoczi <stefanha@redhat.com>
CC: Lukáš Doktor <ldoktor@redhat.com>
CC: Markus Armbruster <armbru@redhat.com>
CC: Eric Blake <eblake@redhat.com>
CC: Paolo Bonzini <pbonzini@redhat.com>
Reported-by: Lukáš Doktor <ldoktor@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Tested-by: Thomas Huth <thuth@redhat.com>
Message-id: 20190129051432.22023-1-peterx@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 iothread.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/iothread.c b/iothread.c
index 2fb1cdf55d..e615b7ae52 100644
--- a/iothread.c
+++ b/iothread.c
@@ -63,7 +63,11 @@ static void *iothread_run(void *opaque)
     while (iothread->running) {
         aio_poll(iothread->ctx, true);
 
-        if (atomic_read(&iothread->worker_context)) {
+        /*
+         * We must check the running state again in case it was
+         * changed in previous aio_poll()
+         */
+        if (iothread->running && atomic_read(&iothread->worker_context)) {
             GMainLoop *loop;
 
             g_main_context_push_thread_default(iothread->worker_context);
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PULL 2/9] qemugdb/coroutine: fix arch_prctl has unknown return type
  2019-02-11  5:50 [Qemu-devel] [PULL 0/9] Block patches Stefan Hajnoczi
  2019-02-11  5:50 ` [Qemu-devel] [PULL 1/9] iothread: fix iothread hang when stop too soon Stefan Hajnoczi
@ 2019-02-11  5:50 ` Stefan Hajnoczi
  2019-02-11  5:50 ` [Qemu-devel] [PULL 3/9] virtio-blk: cleanup using VirtIOBlock *s and VirtIODevice *vdev Stefan Hajnoczi
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Stefan Hajnoczi @ 2019-02-11  5:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marcel Apfelbaum, Peter Maydell, Thomas Huth, Stefan Hajnoczi,
	Eduardo Habkost, Laurent Vivier, Max Reitz, Michael S. Tsirkin,
	Paolo Bonzini, qemu-block, Kevin Wolf,
	Vladimir Sementsov-Ogievskiy

From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

qemu coroutine command results in following error output:

Python Exception <class 'gdb.error'> 'arch_prctl' has unknown return
type; cast the call to its declared return type: Error occurred in
Python command: 'arch_prctl' has unknown return type; cast the call to
its declared return type

Fix it by giving it what it wants: arch_prctl return type.

Information on the topic:
   https://sourceware.org/gdb/onlinedocs/gdb/Calling.html

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Message-id: 20190206151425.105871-1-vsementsov@virtuozzo.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 scripts/qemugdb/coroutine.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/qemugdb/coroutine.py b/scripts/qemugdb/coroutine.py
index ab699794ab..81f811ac00 100644
--- a/scripts/qemugdb/coroutine.py
+++ b/scripts/qemugdb/coroutine.py
@@ -22,7 +22,7 @@ def get_fs_base():
        pthread_self().'''
     # %rsp - 120 is scratch space according to the SystemV ABI
     old = gdb.parse_and_eval('*(uint64_t*)($rsp - 120)')
-    gdb.execute('call arch_prctl(0x1003, $rsp - 120)', False, True)
+    gdb.execute('call (int)arch_prctl(0x1003, $rsp - 120)', False, True)
     fs_base = gdb.parse_and_eval('*(uint64_t*)($rsp - 120)')
     gdb.execute('set *(uint64_t*)($rsp - 120) = %s' % old, False, True)
     return fs_base
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PULL 3/9] virtio-blk: cleanup using VirtIOBlock *s and VirtIODevice *vdev
  2019-02-11  5:50 [Qemu-devel] [PULL 0/9] Block patches Stefan Hajnoczi
  2019-02-11  5:50 ` [Qemu-devel] [PULL 1/9] iothread: fix iothread hang when stop too soon Stefan Hajnoczi
  2019-02-11  5:50 ` [Qemu-devel] [PULL 2/9] qemugdb/coroutine: fix arch_prctl has unknown return type Stefan Hajnoczi
@ 2019-02-11  5:50 ` Stefan Hajnoczi
  2019-02-11  5:50 ` [Qemu-devel] [PULL 4/9] virtio-blk: add acct_failed param to virtio_blk_handle_rw_error() Stefan Hajnoczi
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Stefan Hajnoczi @ 2019-02-11  5:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marcel Apfelbaum, Peter Maydell, Thomas Huth, Stefan Hajnoczi,
	Eduardo Habkost, Laurent Vivier, Max Reitz, Michael S. Tsirkin,
	Paolo Bonzini, qemu-block, Kevin Wolf, Stefano Garzarella,
	Liam Merwick

From: Stefano Garzarella <sgarzare@redhat.com>

In several part we still using req->dev or VIRTIO_DEVICE(req->dev)
when we have already defined s and vdev pointers:
    VirtIOBlock *s = req->dev;
    VirtIODevice *vdev = VIRTIO_DEVICE(s);

Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Reviewed-by: Liam Merwick <liam.merwick@oracle.com>
Message-id: 20190208142347.214815-1-sgarzare@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 hw/block/virtio-blk.c | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index 9a87b3bfac..843bb2bec8 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -63,9 +63,8 @@ static void virtio_blk_req_complete(VirtIOBlockReq *req, unsigned char status)
 static int virtio_blk_handle_rw_error(VirtIOBlockReq *req, int error,
     bool is_read)
 {
-    BlockErrorAction action = blk_get_error_action(req->dev->blk,
-                                                   is_read, error);
     VirtIOBlock *s = req->dev;
+    BlockErrorAction action = blk_get_error_action(s->blk, is_read, error);
 
     if (action == BLOCK_ERROR_ACTION_STOP) {
         /* Break the link as the next request is going to be parsed from the
@@ -138,7 +137,7 @@ static void virtio_blk_flush_complete(void *opaque, int ret)
     }
 
     virtio_blk_req_complete(req, VIRTIO_BLK_S_OK);
-    block_acct_done(blk_get_stats(req->dev->blk), &req->acct);
+    block_acct_done(blk_get_stats(s->blk), &req->acct);
     virtio_blk_free_request(req);
 
 out:
@@ -513,7 +512,7 @@ static int virtio_blk_handle_request(VirtIOBlockReq *req, MultiReqBuffer *mrb)
               - sizeof(struct virtio_blk_inhdr);
     iov_discard_back(in_iov, &in_num, sizeof(struct virtio_blk_inhdr));
 
-    type = virtio_ldl_p(VIRTIO_DEVICE(req->dev), &req->out.type);
+    type = virtio_ldl_p(vdev, &req->out.type);
 
     /* VIRTIO_BLK_T_OUT defines the command direction. VIRTIO_BLK_T_BARRIER
      * is an optional flag. Although a guest should not send this flag if
@@ -522,8 +521,7 @@ static int virtio_blk_handle_request(VirtIOBlockReq *req, MultiReqBuffer *mrb)
     case VIRTIO_BLK_T_IN:
     {
         bool is_write = type & VIRTIO_BLK_T_OUT;
-        req->sector_num = virtio_ldq_p(VIRTIO_DEVICE(req->dev),
-                                       &req->out.sector);
+        req->sector_num = virtio_ldq_p(vdev, &req->out.sector);
 
         if (is_write) {
             qemu_iovec_init_external(&req->qiov, out_iov, out_num);
@@ -535,25 +533,23 @@ static int virtio_blk_handle_request(VirtIOBlockReq *req, MultiReqBuffer *mrb)
                                          req->qiov.size / BDRV_SECTOR_SIZE);
         }
 
-        if (!virtio_blk_sect_range_ok(req->dev, req->sector_num,
-                                      req->qiov.size)) {
+        if (!virtio_blk_sect_range_ok(s, req->sector_num, req->qiov.size)) {
             virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR);
-            block_acct_invalid(blk_get_stats(req->dev->blk),
+            block_acct_invalid(blk_get_stats(s->blk),
                                is_write ? BLOCK_ACCT_WRITE : BLOCK_ACCT_READ);
             virtio_blk_free_request(req);
             return 0;
         }
 
-        block_acct_start(blk_get_stats(req->dev->blk),
-                         &req->acct, req->qiov.size,
+        block_acct_start(blk_get_stats(s->blk), &req->acct, req->qiov.size,
                          is_write ? BLOCK_ACCT_WRITE : BLOCK_ACCT_READ);
 
         /* merge would exceed maximum number of requests or IO direction
          * changes */
         if (mrb->num_reqs > 0 && (mrb->num_reqs == VIRTIO_BLK_MAX_MERGE_REQS ||
                                   is_write != mrb->is_write ||
-                                  !req->dev->conf.request_merging)) {
-            virtio_blk_submit_multireq(req->dev->blk, mrb);
+                                  !s->conf.request_merging)) {
+            virtio_blk_submit_multireq(s->blk, mrb);
         }
 
         assert(mrb->num_reqs < VIRTIO_BLK_MAX_MERGE_REQS);
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PULL 4/9] virtio-blk: add acct_failed param to virtio_blk_handle_rw_error()
  2019-02-11  5:50 [Qemu-devel] [PULL 0/9] Block patches Stefan Hajnoczi
                   ` (2 preceding siblings ...)
  2019-02-11  5:50 ` [Qemu-devel] [PULL 3/9] virtio-blk: cleanup using VirtIOBlock *s and VirtIODevice *vdev Stefan Hajnoczi
@ 2019-02-11  5:50 ` Stefan Hajnoczi
  2019-02-11  5:50 ` [Qemu-devel] [PULL 5/9] virtio-blk: add host_features field in VirtIOBlock Stefan Hajnoczi
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Stefan Hajnoczi @ 2019-02-11  5:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marcel Apfelbaum, Peter Maydell, Thomas Huth, Stefan Hajnoczi,
	Eduardo Habkost, Laurent Vivier, Max Reitz, Michael S. Tsirkin,
	Paolo Bonzini, qemu-block, Kevin Wolf, Stefano Garzarella,
	Pankaj Gupta

From: Stefano Garzarella <sgarzare@redhat.com>

We add acct_failed param in order to use virtio_blk_handle_rw_error()
also when is not required to call block_acct_failed(). (eg. a discard
operation is failed)

Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Acked-by: Pankaj Gupta <pagupta@redhat.com>
Message-id: 20190208134950.187665-2-sgarzare@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 hw/block/virtio-blk.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index 843bb2bec8..c95a6f4c9b 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -61,7 +61,7 @@ static void virtio_blk_req_complete(VirtIOBlockReq *req, unsigned char status)
 }
 
 static int virtio_blk_handle_rw_error(VirtIOBlockReq *req, int error,
-    bool is_read)
+    bool is_read, bool acct_failed)
 {
     VirtIOBlock *s = req->dev;
     BlockErrorAction action = blk_get_error_action(s->blk, is_read, error);
@@ -74,7 +74,9 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq *req, int error,
         s->rq = req;
     } else if (action == BLOCK_ERROR_ACTION_REPORT) {
         virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR);
-        block_acct_failed(blk_get_stats(s->blk), &req->acct);
+        if (acct_failed) {
+            block_acct_failed(blk_get_stats(s->blk), &req->acct);
+        }
         virtio_blk_free_request(req);
     }
 
@@ -112,7 +114,7 @@ static void virtio_blk_rw_complete(void *opaque, int ret)
              * the memory until the request is completed (which will
              * happen on the other side of the migration).
              */
-            if (virtio_blk_handle_rw_error(req, -ret, is_read)) {
+            if (virtio_blk_handle_rw_error(req, -ret, is_read, true)) {
                 continue;
             }
         }
@@ -131,7 +133,7 @@ static void virtio_blk_flush_complete(void *opaque, int ret)
 
     aio_context_acquire(blk_get_aio_context(s->conf.conf.blk));
     if (ret) {
-        if (virtio_blk_handle_rw_error(req, -ret, 0)) {
+        if (virtio_blk_handle_rw_error(req, -ret, 0, true)) {
             goto out;
         }
     }
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PULL 5/9] virtio-blk: add host_features field in VirtIOBlock
  2019-02-11  5:50 [Qemu-devel] [PULL 0/9] Block patches Stefan Hajnoczi
                   ` (3 preceding siblings ...)
  2019-02-11  5:50 ` [Qemu-devel] [PULL 4/9] virtio-blk: add acct_failed param to virtio_blk_handle_rw_error() Stefan Hajnoczi
@ 2019-02-11  5:50 ` Stefan Hajnoczi
  2019-02-11  5:50 ` [Qemu-devel] [PULL 6/9] virtio-blk: add "discard" and "write-zeroes" properties Stefan Hajnoczi
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Stefan Hajnoczi @ 2019-02-11  5:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marcel Apfelbaum, Peter Maydell, Thomas Huth, Stefan Hajnoczi,
	Eduardo Habkost, Laurent Vivier, Max Reitz, Michael S. Tsirkin,
	Paolo Bonzini, qemu-block, Kevin Wolf, Stefano Garzarella,
	Pankaj Gupta

From: Stefano Garzarella <sgarzare@redhat.com>

Since configurable features for virtio-blk are growing, this patch
adds host_features field in the struct VirtIOBlock. (as in virtio-net)
In this way, we can avoid to add new fields for new properties and
we can directly set VIRTIO_BLK_F* flags in the host_features.

We update "config-wce" and "scsi" property definition to use the new
host_features field without change the behaviour.

Suggested-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Acked-by: Pankaj Gupta <pagupta@redhat.com>
Message-id: 20190208134950.187665-3-sgarzare@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 include/hw/virtio/virtio-blk.h |  3 +--
 hw/block/virtio-blk.c          | 16 +++++++++-------
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/include/hw/virtio/virtio-blk.h b/include/hw/virtio/virtio-blk.h
index 5117431d96..f7345b0511 100644
--- a/include/hw/virtio/virtio-blk.h
+++ b/include/hw/virtio/virtio-blk.h
@@ -35,8 +35,6 @@ struct VirtIOBlkConf
     BlockConf conf;
     IOThread *iothread;
     char *serial;
-    uint32_t scsi;
-    uint32_t config_wce;
     uint32_t request_merging;
     uint16_t num_queues;
     uint16_t queue_size;
@@ -57,6 +55,7 @@ typedef struct VirtIOBlock {
     bool dataplane_disabled;
     bool dataplane_started;
     struct VirtIOBlockDataPlane *dataplane;
+    uint64_t host_features;
 } VirtIOBlock;
 
 typedef struct VirtIOBlockReq {
diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index c95a6f4c9b..6526b94910 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -241,7 +241,7 @@ static int virtio_blk_handle_scsi_req(VirtIOBlockReq *req)
      */
     scsi = (void *)elem->in_sg[elem->in_num - 2].iov_base;
 
-    if (!blk->conf.scsi) {
+    if (!virtio_has_feature(blk->host_features, VIRTIO_BLK_F_SCSI)) {
         status = VIRTIO_BLK_S_UNSUPP;
         goto fail;
     }
@@ -779,12 +779,15 @@ static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features,
 {
     VirtIOBlock *s = VIRTIO_BLK(vdev);
 
+    /* Firstly sync all virtio-blk possible supported features */
+    features |= s->host_features;
+
     virtio_add_feature(&features, VIRTIO_BLK_F_SEG_MAX);
     virtio_add_feature(&features, VIRTIO_BLK_F_GEOMETRY);
     virtio_add_feature(&features, VIRTIO_BLK_F_TOPOLOGY);
     virtio_add_feature(&features, VIRTIO_BLK_F_BLK_SIZE);
     if (virtio_has_feature(features, VIRTIO_F_VERSION_1)) {
-        if (s->conf.scsi) {
+        if (virtio_has_feature(s->host_features, VIRTIO_BLK_F_SCSI)) {
             error_setg(errp, "Please set scsi=off for virtio-blk devices in order to use virtio 1.0");
             return 0;
         }
@@ -793,9 +796,6 @@ static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features,
         virtio_add_feature(&features, VIRTIO_BLK_F_SCSI);
     }
 
-    if (s->conf.config_wce) {
-        virtio_add_feature(&features, VIRTIO_BLK_F_CONFIG_WCE);
-    }
     if (blk_enable_write_cache(s->blk)) {
         virtio_add_feature(&features, VIRTIO_BLK_F_WCE);
     }
@@ -1010,9 +1010,11 @@ static Property virtio_blk_properties[] = {
     DEFINE_BLOCK_ERROR_PROPERTIES(VirtIOBlock, conf.conf),
     DEFINE_BLOCK_CHS_PROPERTIES(VirtIOBlock, conf.conf),
     DEFINE_PROP_STRING("serial", VirtIOBlock, conf.serial),
-    DEFINE_PROP_BIT("config-wce", VirtIOBlock, conf.config_wce, 0, true),
+    DEFINE_PROP_BIT64("config-wce", VirtIOBlock, host_features,
+                      VIRTIO_BLK_F_CONFIG_WCE, true),
 #ifdef __linux__
-    DEFINE_PROP_BIT("scsi", VirtIOBlock, conf.scsi, 0, false),
+    DEFINE_PROP_BIT64("scsi", VirtIOBlock, host_features,
+                      VIRTIO_BLK_F_SCSI, false),
 #endif
     DEFINE_PROP_BIT("request-merging", VirtIOBlock, conf.request_merging, 0,
                     true),
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PULL 6/9] virtio-blk: add "discard" and "write-zeroes" properties
  2019-02-11  5:50 [Qemu-devel] [PULL 0/9] Block patches Stefan Hajnoczi
                   ` (4 preceding siblings ...)
  2019-02-11  5:50 ` [Qemu-devel] [PULL 5/9] virtio-blk: add host_features field in VirtIOBlock Stefan Hajnoczi
@ 2019-02-11  5:50 ` Stefan Hajnoczi
  2019-02-11  5:50 ` [Qemu-devel] [PULL 7/9] virtio-blk: add DISCARD and WRITE_ZEROES features Stefan Hajnoczi
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Stefan Hajnoczi @ 2019-02-11  5:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marcel Apfelbaum, Peter Maydell, Thomas Huth, Stefan Hajnoczi,
	Eduardo Habkost, Laurent Vivier, Max Reitz, Michael S. Tsirkin,
	Paolo Bonzini, qemu-block, Kevin Wolf, Stefano Garzarella,
	Dr . David Alan Gilbert, Pankaj Gupta

From: Stefano Garzarella <sgarzare@redhat.com>

In order to avoid migration issues, we enable DISCARD and
WRITE_ZEROES features only for machine type >= 4.0

As discussed with Michael S. Tsirkin and Stefan Hajnoczi on the
list [1], DISCARD operation should not have security implications
(eg. page cache attacks), so we can enable it by default.

[1] https://lists.gnu.org/archive/html/qemu-devel/2019-02/msg00504.html

Suggested-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Acked-by: Pankaj Gupta <pagupta@redhat.com>
Message-id: 20190208134950.187665-4-sgarzare@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 hw/block/virtio-blk.c | 4 ++++
 hw/core/machine.c     | 2 ++
 2 files changed, 6 insertions(+)

diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index 6526b94910..feeaf77965 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -1022,6 +1022,10 @@ static Property virtio_blk_properties[] = {
     DEFINE_PROP_UINT16("queue-size", VirtIOBlock, conf.queue_size, 128),
     DEFINE_PROP_LINK("iothread", VirtIOBlock, conf.iothread, TYPE_IOTHREAD,
                      IOThread *),
+    DEFINE_PROP_BIT64("discard", VirtIOBlock, host_features,
+                      VIRTIO_BLK_F_DISCARD, true),
+    DEFINE_PROP_BIT64("write-zeroes", VirtIOBlock, host_features,
+                      VIRTIO_BLK_F_WRITE_ZEROES, true),
     DEFINE_PROP_END_OF_LIST(),
 };
 
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 077fbd182a..766ca5899d 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -33,6 +33,8 @@ GlobalProperty hw_compat_3_1[] = {
     { "usb-kbd", "serial", "42" },
     { "usb-mouse", "serial", "42" },
     { "usb-kbd", "serial", "42" },
+    { "virtio-blk-device", "discard", "false" },
+    { "virtio-blk-device", "write-zeroes", "false" },
 };
 const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
 
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PULL 7/9] virtio-blk: add DISCARD and WRITE_ZEROES features
  2019-02-11  5:50 [Qemu-devel] [PULL 0/9] Block patches Stefan Hajnoczi
                   ` (5 preceding siblings ...)
  2019-02-11  5:50 ` [Qemu-devel] [PULL 6/9] virtio-blk: add "discard" and "write-zeroes" properties Stefan Hajnoczi
@ 2019-02-11  5:50 ` Stefan Hajnoczi
  2019-02-11  5:50 ` [Qemu-devel] [PULL 8/9] tests/virtio-blk: change assert on data_size in virtio_blk_request() Stefan Hajnoczi
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Stefan Hajnoczi @ 2019-02-11  5:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marcel Apfelbaum, Peter Maydell, Thomas Huth, Stefan Hajnoczi,
	Eduardo Habkost, Laurent Vivier, Max Reitz, Michael S. Tsirkin,
	Paolo Bonzini, qemu-block, Kevin Wolf, Stefano Garzarella,
	Pankaj Gupta

From: Stefano Garzarella <sgarzare@redhat.com>

This patch adds the support of DISCARD and WRITE_ZEROES commands,
that have been introduced in the virtio-blk protocol to have
better performance when using SSD backend.

We support only one segment per request since multiple segments
are not widely used and there are no userspace APIs that allow
applications to submit multiple segments in a single call.

Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Acked-by: Pankaj Gupta <pagupta@redhat.com>
Message-id: 20190208134950.187665-5-sgarzare@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 include/hw/virtio/virtio-blk.h |   2 +
 hw/block/virtio-blk.c          | 184 +++++++++++++++++++++++++++++++++
 2 files changed, 186 insertions(+)

diff --git a/include/hw/virtio/virtio-blk.h b/include/hw/virtio/virtio-blk.h
index f7345b0511..015b523fe0 100644
--- a/include/hw/virtio/virtio-blk.h
+++ b/include/hw/virtio/virtio-blk.h
@@ -38,6 +38,8 @@ struct VirtIOBlkConf
     uint32_t request_merging;
     uint16_t num_queues;
     uint16_t queue_size;
+    uint32_t max_discard_sectors;
+    uint32_t max_write_zeroes_sectors;
 };
 
 struct VirtIOBlockDataPlane;
diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index feeaf77965..f2b73bb8cf 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -146,6 +146,30 @@ out:
     aio_context_release(blk_get_aio_context(s->conf.conf.blk));
 }
 
+static void virtio_blk_discard_write_zeroes_complete(void *opaque, int ret)
+{
+    VirtIOBlockReq *req = opaque;
+    VirtIOBlock *s = req->dev;
+    bool is_write_zeroes = (virtio_ldl_p(VIRTIO_DEVICE(s), &req->out.type) &
+                            ~VIRTIO_BLK_T_BARRIER) == VIRTIO_BLK_T_WRITE_ZEROES;
+
+    aio_context_acquire(blk_get_aio_context(s->conf.conf.blk));
+    if (ret) {
+        if (virtio_blk_handle_rw_error(req, -ret, false, is_write_zeroes)) {
+            goto out;
+        }
+    }
+
+    virtio_blk_req_complete(req, VIRTIO_BLK_S_OK);
+    if (is_write_zeroes) {
+        block_acct_done(blk_get_stats(s->blk), &req->acct);
+    }
+    virtio_blk_free_request(req);
+
+out:
+    aio_context_release(blk_get_aio_context(s->conf.conf.blk));
+}
+
 #ifdef __linux__
 
 typedef struct {
@@ -479,6 +503,84 @@ static bool virtio_blk_sect_range_ok(VirtIOBlock *dev,
     return true;
 }
 
+static uint8_t virtio_blk_handle_discard_write_zeroes(VirtIOBlockReq *req,
+    struct virtio_blk_discard_write_zeroes *dwz_hdr, bool is_write_zeroes)
+{
+    VirtIOBlock *s = req->dev;
+    VirtIODevice *vdev = VIRTIO_DEVICE(s);
+    uint64_t sector;
+    uint32_t num_sectors, flags, max_sectors;
+    uint8_t err_status;
+    int bytes;
+
+    sector = virtio_ldq_p(vdev, &dwz_hdr->sector);
+    num_sectors = virtio_ldl_p(vdev, &dwz_hdr->num_sectors);
+    flags = virtio_ldl_p(vdev, &dwz_hdr->flags);
+    max_sectors = is_write_zeroes ? s->conf.max_write_zeroes_sectors :
+                  s->conf.max_discard_sectors;
+
+    /*
+     * max_sectors is at most BDRV_REQUEST_MAX_SECTORS, this check
+     * make us sure that "num_sectors << BDRV_SECTOR_BITS" can fit in
+     * the integer variable.
+     */
+    if (unlikely(num_sectors > max_sectors)) {
+        err_status = VIRTIO_BLK_S_IOERR;
+        goto err;
+    }
+
+    bytes = num_sectors << BDRV_SECTOR_BITS;
+
+    if (unlikely(!virtio_blk_sect_range_ok(s, sector, bytes))) {
+        err_status = VIRTIO_BLK_S_IOERR;
+        goto err;
+    }
+
+    /*
+     * The device MUST set the status byte to VIRTIO_BLK_S_UNSUPP for discard
+     * and write zeroes commands if any unknown flag is set.
+     */
+    if (unlikely(flags & ~VIRTIO_BLK_WRITE_ZEROES_FLAG_UNMAP)) {
+        err_status = VIRTIO_BLK_S_UNSUPP;
+        goto err;
+    }
+
+    if (is_write_zeroes) { /* VIRTIO_BLK_T_WRITE_ZEROES */
+        int blk_aio_flags = 0;
+
+        if (flags & VIRTIO_BLK_WRITE_ZEROES_FLAG_UNMAP) {
+            blk_aio_flags |= BDRV_REQ_MAY_UNMAP;
+        }
+
+        block_acct_start(blk_get_stats(s->blk), &req->acct, bytes,
+                         BLOCK_ACCT_WRITE);
+
+        blk_aio_pwrite_zeroes(s->blk, sector << BDRV_SECTOR_BITS,
+                              bytes, blk_aio_flags,
+                              virtio_blk_discard_write_zeroes_complete, req);
+    } else { /* VIRTIO_BLK_T_DISCARD */
+        /*
+         * The device MUST set the status byte to VIRTIO_BLK_S_UNSUPP for
+         * discard commands if the unmap flag is set.
+         */
+        if (unlikely(flags & VIRTIO_BLK_WRITE_ZEROES_FLAG_UNMAP)) {
+            err_status = VIRTIO_BLK_S_UNSUPP;
+            goto err;
+        }
+
+        blk_aio_pdiscard(s->blk, sector << BDRV_SECTOR_BITS, bytes,
+                         virtio_blk_discard_write_zeroes_complete, req);
+    }
+
+    return VIRTIO_BLK_S_OK;
+
+err:
+    if (is_write_zeroes) {
+        block_acct_invalid(blk_get_stats(s->blk), BLOCK_ACCT_WRITE);
+    }
+    return err_status;
+}
+
 static int virtio_blk_handle_request(VirtIOBlockReq *req, MultiReqBuffer *mrb)
 {
     uint32_t type;
@@ -580,6 +682,47 @@ static int virtio_blk_handle_request(VirtIOBlockReq *req, MultiReqBuffer *mrb)
         virtio_blk_free_request(req);
         break;
     }
+    /*
+     * VIRTIO_BLK_T_DISCARD and VIRTIO_BLK_T_WRITE_ZEROES are defined with
+     * VIRTIO_BLK_T_OUT flag set. We masked this flag in the switch statement,
+     * so we must mask it for these requests, then we will check if it is set.
+     */
+    case VIRTIO_BLK_T_DISCARD & ~VIRTIO_BLK_T_OUT:
+    case VIRTIO_BLK_T_WRITE_ZEROES & ~VIRTIO_BLK_T_OUT:
+    {
+        struct virtio_blk_discard_write_zeroes dwz_hdr;
+        size_t out_len = iov_size(out_iov, out_num);
+        bool is_write_zeroes = (type & ~VIRTIO_BLK_T_BARRIER) ==
+                               VIRTIO_BLK_T_WRITE_ZEROES;
+        uint8_t err_status;
+
+        /*
+         * Unsupported if VIRTIO_BLK_T_OUT is not set or the request contains
+         * more than one segment.
+         */
+        if (unlikely(!(type & VIRTIO_BLK_T_OUT) ||
+                     out_len > sizeof(dwz_hdr))) {
+            virtio_blk_req_complete(req, VIRTIO_BLK_S_UNSUPP);
+            virtio_blk_free_request(req);
+            return 0;
+        }
+
+        if (unlikely(iov_to_buf(out_iov, out_num, 0, &dwz_hdr,
+                                sizeof(dwz_hdr)) != sizeof(dwz_hdr))) {
+            virtio_error(vdev, "virtio-blk discard/write_zeroes header"
+                         " too short");
+            return -1;
+        }
+
+        err_status = virtio_blk_handle_discard_write_zeroes(req, &dwz_hdr,
+                                                            is_write_zeroes);
+        if (err_status != VIRTIO_BLK_S_OK) {
+            virtio_blk_req_complete(req, err_status);
+            virtio_blk_free_request(req);
+        }
+
+        break;
+    }
     default:
         virtio_blk_req_complete(req, VIRTIO_BLK_S_UNSUPP);
         virtio_blk_free_request(req);
@@ -759,6 +902,24 @@ static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config)
     blkcfg.alignment_offset = 0;
     blkcfg.wce = blk_enable_write_cache(s->blk);
     virtio_stw_p(vdev, &blkcfg.num_queues, s->conf.num_queues);
+    if (virtio_has_feature(s->host_features, VIRTIO_BLK_F_DISCARD)) {
+        virtio_stl_p(vdev, &blkcfg.max_discard_sectors,
+                     s->conf.max_discard_sectors);
+        virtio_stl_p(vdev, &blkcfg.discard_sector_alignment,
+                     blk_size >> BDRV_SECTOR_BITS);
+        /*
+         * We support only one segment per request since multiple segments
+         * are not widely used and there are no userspace APIs that allow
+         * applications to submit multiple segments in a single call.
+         */
+        virtio_stl_p(vdev, &blkcfg.max_discard_seg, 1);
+    }
+    if (virtio_has_feature(s->host_features, VIRTIO_BLK_F_WRITE_ZEROES)) {
+        virtio_stl_p(vdev, &blkcfg.max_write_zeroes_sectors,
+                     s->conf.max_write_zeroes_sectors);
+        blkcfg.write_zeroes_may_unmap = 1;
+        virtio_stl_p(vdev, &blkcfg.max_write_zeroes_seg, 1);
+    }
     memcpy(config, &blkcfg, sizeof(struct virtio_blk_config));
 }
 
@@ -950,6 +1111,25 @@ static void virtio_blk_device_realize(DeviceState *dev, Error **errp)
         return;
     }
 
+    if (virtio_has_feature(s->host_features, VIRTIO_BLK_F_DISCARD) &&
+        (!conf->max_discard_sectors ||
+         conf->max_discard_sectors > BDRV_REQUEST_MAX_SECTORS)) {
+        error_setg(errp, "invalid max-discard-sectors property (%" PRIu32 ")"
+                   ", must be between 1 and %d",
+                   conf->max_discard_sectors, (int)BDRV_REQUEST_MAX_SECTORS);
+        return;
+    }
+
+    if (virtio_has_feature(s->host_features, VIRTIO_BLK_F_WRITE_ZEROES) &&
+        (!conf->max_write_zeroes_sectors ||
+         conf->max_write_zeroes_sectors > BDRV_REQUEST_MAX_SECTORS)) {
+        error_setg(errp, "invalid max-write-zeroes-sectors property (%" PRIu32
+                   "), must be between 1 and %d",
+                   conf->max_write_zeroes_sectors,
+                   (int)BDRV_REQUEST_MAX_SECTORS);
+        return;
+    }
+
     virtio_init(vdev, "virtio-blk", VIRTIO_ID_BLOCK,
                 sizeof(struct virtio_blk_config));
 
@@ -1026,6 +1206,10 @@ static Property virtio_blk_properties[] = {
                       VIRTIO_BLK_F_DISCARD, true),
     DEFINE_PROP_BIT64("write-zeroes", VirtIOBlock, host_features,
                       VIRTIO_BLK_F_WRITE_ZEROES, true),
+    DEFINE_PROP_UINT32("max-discard-sectors", VirtIOBlock,
+                       conf.max_discard_sectors, BDRV_REQUEST_MAX_SECTORS),
+    DEFINE_PROP_UINT32("max-write-zeroes-sectors", VirtIOBlock,
+                       conf.max_write_zeroes_sectors, BDRV_REQUEST_MAX_SECTORS),
     DEFINE_PROP_END_OF_LIST(),
 };
 
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PULL 8/9] tests/virtio-blk: change assert on data_size in virtio_blk_request()
  2019-02-11  5:50 [Qemu-devel] [PULL 0/9] Block patches Stefan Hajnoczi
                   ` (6 preceding siblings ...)
  2019-02-11  5:50 ` [Qemu-devel] [PULL 7/9] virtio-blk: add DISCARD and WRITE_ZEROES features Stefan Hajnoczi
@ 2019-02-11  5:50 ` Stefan Hajnoczi
  2019-02-11  5:50 ` [Qemu-devel] [PULL 9/9] tests/virtio-blk: add test for WRITE_ZEROES command Stefan Hajnoczi
  2019-02-11 11:42 ` [Qemu-devel] [PULL 0/9] Block patches Peter Maydell
  9 siblings, 0 replies; 22+ messages in thread
From: Stefan Hajnoczi @ 2019-02-11  5:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marcel Apfelbaum, Peter Maydell, Thomas Huth, Stefan Hajnoczi,
	Eduardo Habkost, Laurent Vivier, Max Reitz, Michael S. Tsirkin,
	Paolo Bonzini, qemu-block, Kevin Wolf, Stefano Garzarella,
	Pankaj Gupta

From: Stefano Garzarella <sgarzare@redhat.com>

The size of data in the virtio_blk_request must be a multiple
of 512 bytes for IN and OUT requests, or a multiple of the size
of struct virtio_blk_discard_write_zeroes for DISCARD and
WRITE_ZEROES requests.

Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Acked-by: Pankaj Gupta <pagupta@redhat.com>
Message-id: 20190208134950.187665-6-sgarzare@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 tests/virtio-blk-test.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/tests/virtio-blk-test.c b/tests/virtio-blk-test.c
index 04c608764b..0739498da7 100644
--- a/tests/virtio-blk-test.c
+++ b/tests/virtio-blk-test.c
@@ -144,7 +144,20 @@ static uint64_t virtio_blk_request(QGuestAllocator *alloc, QVirtioDevice *d,
     uint64_t addr;
     uint8_t status = 0xFF;
 
-    g_assert_cmpuint(data_size % 512, ==, 0);
+    switch (req->type) {
+    case VIRTIO_BLK_T_IN:
+    case VIRTIO_BLK_T_OUT:
+        g_assert_cmpuint(data_size % 512, ==, 0);
+        break;
+    case VIRTIO_BLK_T_DISCARD:
+    case VIRTIO_BLK_T_WRITE_ZEROES:
+        g_assert_cmpuint(data_size %
+                         sizeof(struct virtio_blk_discard_write_zeroes), ==, 0);
+        break;
+    default:
+        g_assert_cmpuint(data_size, ==, 0);
+    }
+
     addr = guest_alloc(alloc, sizeof(*req) + data_size);
 
     virtio_blk_fix_request(d, req);
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PULL 9/9] tests/virtio-blk: add test for WRITE_ZEROES command
  2019-02-11  5:50 [Qemu-devel] [PULL 0/9] Block patches Stefan Hajnoczi
                   ` (7 preceding siblings ...)
  2019-02-11  5:50 ` [Qemu-devel] [PULL 8/9] tests/virtio-blk: change assert on data_size in virtio_blk_request() Stefan Hajnoczi
@ 2019-02-11  5:50 ` Stefan Hajnoczi
  2019-02-11 11:42 ` [Qemu-devel] [PULL 0/9] Block patches Peter Maydell
  9 siblings, 0 replies; 22+ messages in thread
From: Stefan Hajnoczi @ 2019-02-11  5:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marcel Apfelbaum, Peter Maydell, Thomas Huth, Stefan Hajnoczi,
	Eduardo Habkost, Laurent Vivier, Max Reitz, Michael S. Tsirkin,
	Paolo Bonzini, qemu-block, Kevin Wolf, Stefano Garzarella,
	Pankaj Gupta

From: Stefano Garzarella <sgarzare@redhat.com>

If the WRITE_ZEROES feature is enabled, we check this command
in the test_basic().

Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Acked-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Acked-by: Pankaj Gupta <pagupta@redhat.com>
Message-id: 20190208134950.187665-7-sgarzare@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 tests/virtio-blk-test.c | 60 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/tests/virtio-blk-test.c b/tests/virtio-blk-test.c
index 0739498da7..35bd92dbfc 100644
--- a/tests/virtio-blk-test.c
+++ b/tests/virtio-blk-test.c
@@ -244,6 +244,66 @@ static void test_basic(QVirtioDevice *dev, QGuestAllocator *alloc,
 
     guest_free(alloc, req_addr);
 
+    if (features & (1u << VIRTIO_BLK_F_WRITE_ZEROES)) {
+        struct virtio_blk_discard_write_zeroes dwz_hdr;
+        void *expected;
+
+        /*
+         * WRITE_ZEROES request on the same sector of previous test where
+         * we wrote "TEST".
+         */
+        req.type = VIRTIO_BLK_T_WRITE_ZEROES;
+        req.data = (char *) &dwz_hdr;
+        dwz_hdr.sector = 0;
+        dwz_hdr.num_sectors = 1;
+        dwz_hdr.flags = 0;
+
+        req_addr = virtio_blk_request(alloc, dev, &req, sizeof(dwz_hdr));
+
+        free_head = qvirtqueue_add(vq, req_addr, 16, false, true);
+        qvirtqueue_add(vq, req_addr + 16, sizeof(dwz_hdr), false, true);
+        qvirtqueue_add(vq, req_addr + 16 + sizeof(dwz_hdr), 1, true, false);
+
+        qvirtqueue_kick(dev, vq, free_head);
+
+        qvirtio_wait_used_elem(dev, vq, free_head, NULL,
+                               QVIRTIO_BLK_TIMEOUT_US);
+        status = readb(req_addr + 16 + sizeof(dwz_hdr));
+        g_assert_cmpint(status, ==, 0);
+
+        guest_free(alloc, req_addr);
+
+        /* Read request to check if the sector contains all zeroes */
+        req.type = VIRTIO_BLK_T_IN;
+        req.ioprio = 1;
+        req.sector = 0;
+        req.data = g_malloc0(512);
+
+        req_addr = virtio_blk_request(alloc, dev, &req, 512);
+
+        g_free(req.data);
+
+        free_head = qvirtqueue_add(vq, req_addr, 16, false, true);
+        qvirtqueue_add(vq, req_addr + 16, 512, true, true);
+        qvirtqueue_add(vq, req_addr + 528, 1, true, false);
+
+        qvirtqueue_kick(dev, vq, free_head);
+
+        qvirtio_wait_used_elem(dev, vq, free_head, NULL,
+                               QVIRTIO_BLK_TIMEOUT_US);
+        status = readb(req_addr + 528);
+        g_assert_cmpint(status, ==, 0);
+
+        data = g_malloc(512);
+        expected = g_malloc0(512);
+        memread(req_addr + 16, data, 512);
+        g_assert_cmpmem(data, 512, expected, 512);
+        g_free(expected);
+        g_free(data);
+
+        guest_free(alloc, req_addr);
+    }
+
     if (features & (1u << VIRTIO_F_ANY_LAYOUT)) {
         /* Write and read with 2 descriptor layout */
         /* Write request */
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [PULL 0/9] Block patches
  2019-02-11  5:50 [Qemu-devel] [PULL 0/9] Block patches Stefan Hajnoczi
                   ` (8 preceding siblings ...)
  2019-02-11  5:50 ` [Qemu-devel] [PULL 9/9] tests/virtio-blk: add test for WRITE_ZEROES command Stefan Hajnoczi
@ 2019-02-11 11:42 ` Peter Maydell
  2019-02-12  3:51   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
  9 siblings, 1 reply; 22+ messages in thread
From: Peter Maydell @ 2019-02-11 11:42 UTC (permalink / raw)
  To: Stefan Hajnoczi
  Cc: QEMU Developers, Marcel Apfelbaum, Thomas Huth, Eduardo Habkost,
	Laurent Vivier, Max Reitz, Michael S. Tsirkin, Paolo Bonzini,
	Qemu-block, Kevin Wolf

On Mon, 11 Feb 2019 at 05:50, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>
> The following changes since commit e47f81b617684c4546af286d307b69014a83538a:
>
>   Merge remote-tracking branch 'remotes/thibault/tags/samuel-thibault' into staging (2019-02-07 18:53:25 +0000)
>
> are available in the Git repository at:
>
>   git://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 55140166667bb555c5d05165b93b25557d2e6397:
>
>   tests/virtio-blk: add test for WRITE_ZEROES command (2019-02-11 11:58:17 +0800)
>
> ----------------------------------------------------------------
> Pull request
>
> User-visible changes:
>
>  * virtio-blk: DISCARD and WRITE_ZEROES support

Hi; this fails to pass "make check" (all platforms):

MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}
QTEST_QEMU_BINARY=arm-softmmu/qemu-system-arm QTEST_QEMU_IMG=qemu-img
tests/virtio-blk-test -m
=quick -k --tap < /dev/null | ./scripts/tap-driver.pl
--test-name="virtio-blk-test"
**
ERROR:/home/pm215/qemu/tests/virtio-blk-test.c:272:test_basic:
assertion failed (status == 0): (1 == 0)
ERROR - too few tests run (expected 1, got 0)

thanks
-- PMM

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [Qemu-block] [PULL 0/9] Block patches
  2019-02-11 11:42 ` [Qemu-devel] [PULL 0/9] Block patches Peter Maydell
@ 2019-02-12  3:51   ` Stefan Hajnoczi
  2019-02-12  8:11     ` Stefano Garzarella
  2019-02-12  9:49     ` Peter Maydell
  0 siblings, 2 replies; 22+ messages in thread
From: Stefan Hajnoczi @ 2019-02-12  3:51 UTC (permalink / raw)
  To: sgarzare
  Cc: Stefan Hajnoczi, Laurent Vivier, Kevin Wolf, Thomas Huth,
	Eduardo Habkost, Qemu-block, Michael S. Tsirkin, QEMU Developers,
	Max Reitz, Marcel Apfelbaum, Paolo Bonzini, Peter Maydell

[-- Attachment #1: Type: text/plain, Size: 1633 bytes --]

On Mon, Feb 11, 2019 at 11:42:14AM +0000, Peter Maydell wrote:
> On Mon, 11 Feb 2019 at 05:50, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> >
> > The following changes since commit e47f81b617684c4546af286d307b69014a83538a:
> >
> >   Merge remote-tracking branch 'remotes/thibault/tags/samuel-thibault' into staging (2019-02-07 18:53:25 +0000)
> >
> > are available in the Git repository at:
> >
> >   git://github.com/stefanha/qemu.git tags/block-pull-request
> >
> > for you to fetch changes up to 55140166667bb555c5d05165b93b25557d2e6397:
> >
> >   tests/virtio-blk: add test for WRITE_ZEROES command (2019-02-11 11:58:17 +0800)
> >
> > ----------------------------------------------------------------
> > Pull request
> >
> > User-visible changes:
> >
> >  * virtio-blk: DISCARD and WRITE_ZEROES support
> 
> Hi; this fails to pass "make check" (all platforms):
> 
> MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}
> QTEST_QEMU_BINARY=arm-softmmu/qemu-system-arm QTEST_QEMU_IMG=qemu-img
> tests/virtio-blk-test -m
> =quick -k --tap < /dev/null | ./scripts/tap-driver.pl
> --test-name="virtio-blk-test"
> **
> ERROR:/home/pm215/qemu/tests/virtio-blk-test.c:272:test_basic:
> assertion failed (status == 0): (1 == 0)
> ERROR - too few tests run (expected 1, got 0)

Stefano, I'm dropping the virtio-blk DISCARD/WRITE_ZEROES series.
Please debug this failure.

I cannot reproduce it on a Linux host so maybe it's related to macOS.
First I thought it's because write zeroes is not supported on macOS, but
QEMU should fall back to writing a bounce buffer of zeroes.

Stefan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [Qemu-block] [PULL 0/9] Block patches
  2019-02-12  3:51   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
@ 2019-02-12  8:11     ` Stefano Garzarella
  2019-02-12  9:49     ` Peter Maydell
  1 sibling, 0 replies; 22+ messages in thread
From: Stefano Garzarella @ 2019-02-12  8:11 UTC (permalink / raw)
  To: Stefan Hajnoczi
  Cc: Stefan Hajnoczi, Laurent Vivier, Kevin Wolf, Thomas Huth,
	Eduardo Habkost, Qemu-block, Michael S. Tsirkin, QEMU Developers,
	Max Reitz, Marcel Apfelbaum, Paolo Bonzini, Peter Maydell

On Tue, Feb 12, 2019 at 11:51:18AM +0800, Stefan Hajnoczi wrote:
> On Mon, Feb 11, 2019 at 11:42:14AM +0000, Peter Maydell wrote:
> > 
> > Hi; this fails to pass "make check" (all platforms):
> > 
> > MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}
> > QTEST_QEMU_BINARY=arm-softmmu/qemu-system-arm QTEST_QEMU_IMG=qemu-img
> > tests/virtio-blk-test -m
> > =quick -k --tap < /dev/null | ./scripts/tap-driver.pl
> > --test-name="virtio-blk-test"
> > **
> > ERROR:/home/pm215/qemu/tests/virtio-blk-test.c:272:test_basic:
> > assertion failed (status == 0): (1 == 0)
> > ERROR - too few tests run (expected 1, got 0)
> 
> Stefano, I'm dropping the virtio-blk DISCARD/WRITE_ZEROES series.
> Please debug this failure.
> 
> I cannot reproduce it on a Linux host so maybe it's related to macOS.
> First I thought it's because write zeroes is not supported on macOS, but
> QEMU should fall back to writing a bounce buffer of zeroes.
> 

Hi Stefan,
I'll debug it! I also have a macOS here, so I'll try on it.

Thanks,
Stefano

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [Qemu-block] [PULL 0/9] Block patches
  2019-02-12  3:51   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
  2019-02-12  8:11     ` Stefano Garzarella
@ 2019-02-12  9:49     ` Peter Maydell
  1 sibling, 0 replies; 22+ messages in thread
From: Peter Maydell @ 2019-02-12  9:49 UTC (permalink / raw)
  To: Stefan Hajnoczi
  Cc: Stefano Garzarella, Stefan Hajnoczi, Laurent Vivier, Kevin Wolf,
	Thomas Huth, Eduardo Habkost, Qemu-block, Michael S. Tsirkin,
	QEMU Developers, Max Reitz, Marcel Apfelbaum, Paolo Bonzini

On Tue, 12 Feb 2019 at 03:51, Stefan Hajnoczi <stefanha@gmail.com> wrote:
>
> On Mon, Feb 11, 2019 at 11:42:14AM +0000, Peter Maydell wrote:
> > Hi; this fails to pass "make check" (all platforms):
> >
> > MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}
> > QTEST_QEMU_BINARY=arm-softmmu/qemu-system-arm QTEST_QEMU_IMG=qemu-img
> > tests/virtio-blk-test -m
> > =quick -k --tap < /dev/null | ./scripts/tap-driver.pl
> > --test-name="virtio-blk-test"
> > **
> > ERROR:/home/pm215/qemu/tests/virtio-blk-test.c:272:test_basic:
> > assertion failed (status == 0): (1 == 0)
> > ERROR - too few tests run (expected 1, got 0)
>
> Stefano, I'm dropping the virtio-blk DISCARD/WRITE_ZEROES series.
> Please debug this failure.
>
> I cannot reproduce it on a Linux host so maybe it's related to macOS.
> First I thought it's because write zeroes is not supported on macOS, but
> QEMU should fall back to writing a bounce buffer of zeroes.

The test failed everywhere, including the Linux platforms, not just OSX.

thanks
-- PMM

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [PULL 0/9] Block patches
  2017-02-21 15:40 [Qemu-devel] " Jeff Cody
@ 2017-02-21 18:16 ` Peter Maydell
  0 siblings, 0 replies; 22+ messages in thread
From: Peter Maydell @ 2017-02-21 18:16 UTC (permalink / raw)
  To: Jeff Cody; +Cc: Qemu-block, QEMU Developers, Stefan Hajnoczi

On 21 February 2017 at 15:40, Jeff Cody <jcody@redhat.com> wrote:
> The following changes since commit a1cf5fac2b929ffa2abd1285401f2535ff8c6fea:
>
>   Merge remote-tracking branch 'remotes/armbru/tags/pull-block-2017-02-21' into staging (2017-02-21 13:58:50 +0000)
>
> are available in the git repository at:
>
>   git@github.com:codyprime/qemu-kvm-jtc.git tags/block-pull-request
>
> for you to fetch changes up to 6135c5e12606b8413708384e3e7d43f6010c5941:
>
>   qemu-options: Fix broken sheepdog URL (2017-02-21 10:38:09 -0500)
>
> ----------------------------------------------------------------
> Block patches

Applied, thanks.

-- PMM

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PULL 0/9] Block patches
@ 2017-02-21 15:40 Jeff Cody
  2017-02-21 18:16 ` Peter Maydell
  0 siblings, 1 reply; 22+ messages in thread
From: Jeff Cody @ 2017-02-21 15:40 UTC (permalink / raw)
  To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel, stefanha

The following changes since commit a1cf5fac2b929ffa2abd1285401f2535ff8c6fea:

  Merge remote-tracking branch 'remotes/armbru/tags/pull-block-2017-02-21' into staging (2017-02-21 13:58:50 +0000)

are available in the git repository at:

  git@github.com:codyprime/qemu-kvm-jtc.git tags/block-pull-request

for you to fetch changes up to 6135c5e12606b8413708384e3e7d43f6010c5941:

  qemu-options: Fix broken sheepdog URL (2017-02-21 10:38:09 -0500)

----------------------------------------------------------------
Block patches
----------------------------------------------------------------

Anton Nefedov (1):
  mirror: do not increase offset during initial zero_or_discard phase

Jeff Cody (1):
  QAPI: Fix blockdev-add example documentation

Kevin Wolf (6):
  iscsi: Split URL into individual options
  iscsi: Handle -iscsi user/password in bdrv_parse_filename()
  iscsi: Add initiator-name option
  iscsi: Add header-digest option
  iscsi: Add timeout option
  iscsi: Add blockdev-add support

Thomas Huth (1):
  qemu-options: Fix broken sheepdog URL

 block/iscsi.c        | 353 +++++++++++++++++++++++++++++++--------------------
 block/mirror.c       |   9 +-
 qapi/block-core.json | 125 +++++++++++++-----
 qemu-options.hx      |   2 +-
 4 files changed, 317 insertions(+), 172 deletions(-)

-- 
2.9.3

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [PULL 0/9] Block patches
  2016-06-28 13:23 Stefan Hajnoczi
@ 2016-06-28 14:03 ` Peter Maydell
  0 siblings, 0 replies; 22+ messages in thread
From: Peter Maydell @ 2016-06-28 14:03 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: QEMU Developers

On 28 June 2016 at 14:23, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> The following changes since commit fdc997ef54c5b2c3483969aee5f1d5f2a7587520:
>
>   target-alpha: Avoid gcc 6.1 werror for linux-user (2016-06-27 21:03:58 +0100)
>
> are available in the git repository at:
>
>   git://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 2f2705908fc4b7be868d45b7b02159fb243a8457:
>
>   virtio-blk: add num-queues device property (2016-06-28 13:08:32 +0100)
>
> ----------------------------------------------------------------
>
> ----------------------------------------------------------------

Applied, thanks.

-- PMM

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PULL 0/9] Block patches
@ 2016-06-28 13:23 Stefan Hajnoczi
  2016-06-28 14:03 ` Peter Maydell
  0 siblings, 1 reply; 22+ messages in thread
From: Stefan Hajnoczi @ 2016-06-28 13:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Stefan Hajnoczi

The following changes since commit fdc997ef54c5b2c3483969aee5f1d5f2a7587520:

  target-alpha: Avoid gcc 6.1 werror for linux-user (2016-06-27 21:03:58 +0100)

are available in the git repository at:

  git://github.com/stefanha/qemu.git tags/block-pull-request

for you to fetch changes up to 2f2705908fc4b7be868d45b7b02159fb243a8457:

  virtio-blk: add num-queues device property (2016-06-28 13:08:32 +0100)

----------------------------------------------------------------

----------------------------------------------------------------

Stefan Hajnoczi (9):
  Revert "virtio: sync the dataplane vring state to the virtqueue before
    virtio_save"
  dma-helpers: dma_blk_io() cancel support
  virtio-blk: add VirtIOBlockConf->num_queues
  virtio-blk: multiqueue batch notify
  virtio-blk: tell dataplane which vq to notify
  virtio-blk: associate request with a virtqueue
  virtio-blk: live migrate s->rq with multiqueue
  virtio-blk: dataplane multiqueue support
  virtio-blk: add num-queues device property

 dma-helpers.c                   |  7 ++++
 hw/block/dataplane/virtio-blk.c | 81 +++++++++++++++++++++++++++++------------
 hw/block/dataplane/virtio-blk.h |  2 +-
 hw/block/virtio-blk.c           | 57 +++++++++++++++++++++--------
 hw/scsi/virtio-scsi.c           |  5 ---
 include/hw/virtio/virtio-blk.h  |  6 ++-
 6 files changed, 112 insertions(+), 46 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [PULL 0/9] Block patches
  2014-02-28 18:33 Stefan Hajnoczi
@ 2014-03-04 17:02 ` Peter Maydell
  0 siblings, 0 replies; 22+ messages in thread
From: Peter Maydell @ 2014-03-04 17:02 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: QEMU Developers, Anthony Liguori

On 28 February 2014 18:33, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> The following changes since commit 9fbee91a131a05e443d7108d7fbdf3ca91020290:
>
>   Merge remote-tracking branch 'remotes/kvm/uq/master' into staging (2014-02-27 16:00:31 +0000)
>
> are available in the git repository at:
>
>
>   git://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 3eba13ec25341ce473591ff338eab3196890a4eb:
>
>   block/vmdk: do not report file offset for compressed extents (2014-02-28 18:59:07 +0100)

Applied, thanks.

-- PMM

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PULL 0/9] Block patches
@ 2014-02-28 18:33 Stefan Hajnoczi
  2014-03-04 17:02 ` Peter Maydell
  0 siblings, 1 reply; 22+ messages in thread
From: Stefan Hajnoczi @ 2014-02-28 18:33 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Anthony Liguori

The following changes since commit 9fbee91a131a05e443d7108d7fbdf3ca91020290:

  Merge remote-tracking branch 'remotes/kvm/uq/master' into staging (2014-02-27 16:00:31 +0000)

are available in the git repository at:


  git://github.com/stefanha/qemu.git tags/block-pull-request

for you to fetch changes up to 3eba13ec25341ce473591ff338eab3196890a4eb:

  block/vmdk: do not report file offset for compressed extents (2014-02-28 18:59:07 +0100)

----------------------------------------------------------------
Block pull request

----------------------------------------------------------------
Amit Shah (1):
      block: use /var/tmp instead of /tmp for -snapshot

Benoît Canet (3):
      qmp: Fix BlockdevOptionQuorum.
      qmp: Make Quorum error events more palatable.
      qemu-io-test: Disable Quorum test when not compiled in.

Jeff Cody (2):
      block: gluster - code movements, state storage changes
      block: gluster - add reopen support.

Loic Dachary (1):
      discard rbd error output when not relevant in qemu-iotests

Paolo Bonzini (1):
      qemu-iotests: add more tests to the "quick" group

Peter Lieven (1):
      block/vmdk: do not report file offset for compressed extents

 block.c                      |   5 +-
 block/gluster.c              | 143 ++++++++++++++++++++++++++++++++++++++-----
 block/quorum.c               |   9 ++-
 block/vmdk.c                 |   2 +-
 docs/qmp/qmp-events.txt      |  75 ++++++++++++-----------
 qapi-schema.json             |   5 +-
 tests/qemu-iotests-quick.sh  |   1 +
 tests/qemu-iotests/081       |   3 +
 tests/qemu-iotests/081.out   |   2 +-
 tests/qemu-iotests/common.rc |   2 +-
 tests/qemu-iotests/group     |  34 +++++-----
 11 files changed, 203 insertions(+), 78 deletions(-)

-- 
1.8.5.3

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PULL 0/9] Block patches
@ 2013-03-04  9:15 Stefan Hajnoczi
  0 siblings, 0 replies; 22+ messages in thread
From: Stefan Hajnoczi @ 2013-03-04  9:15 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Stefan Hajnoczi

The following changes since commit 806f352d3d6f7b326b0ab3a49c622b124459dc8d:

  gen-icount.h: Rename gen_icount_start/end to gen_tb_start/end (2013-03-03 14:29:08 +0000)

are available in the git repository at:

  git://github.com/stefanha/qemu.git block

for you to fetch changes up to 272d2d8e1241b92ab9be87b2c8fb590fd84987a8:

  block: for HMP commit() operations on 'all', skip non-COW drives (2013-03-04 09:54:17 +0100)

----------------------------------------------------------------
Christian Borntraeger (1):
      virtio-blk: fix unplug + virsh reboot

Jeff Cody (1):
      block: for HMP commit() operations on 'all', skip non-COW drives

MORITA Kazutaka (5):
      slirp/tcp_subr.c: fix coding style in tcp_connect
      move socket_set_nodelay to osdep.c
      sheepdog: accept URIs
      sheepdog: use inet_connect to simplify connect code
      sheepdog: add support for connecting to unix domain socket

Mark Cave-Ayland (1):
      ide/macio: Fix macio DMA initialisation.

Paolo Bonzini (1):
      dataplane: remove EventPoll in favor of AioContext

 block.c                    |   8 +-
 block/sheepdog.c           | 315 +++++++++++++++++++++++++++------------------
 gdbstub.c                  |   5 +-
 hw/dataplane/Makefile.objs |   2 +-
 hw/dataplane/event-poll.c  | 100 --------------
 hw/dataplane/event-poll.h  |  40 ------
 hw/dataplane/virtio-blk.c  |  48 ++++---
 hw/macio.c                 |   2 +-
 hw/virtio-blk.c            |   4 +-
 include/qemu/sockets.h     |   1 +
 qemu-char.c                |   6 -
 qemu-doc.texi              |  22 ++--
 qemu-options.hx            |  18 +--
 slirp/tcp_subr.c           | 139 ++++++++++----------
 util/osdep.c               |   6 +
 15 files changed, 328 insertions(+), 388 deletions(-)
 delete mode 100644 hw/dataplane/event-poll.c
 delete mode 100644 hw/dataplane/event-poll.h

-- 
1.8.1.4

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PULL 0/9] Block patches
@ 2011-03-16 10:47 Kevin Wolf
  0 siblings, 0 replies; 22+ messages in thread
From: Kevin Wolf @ 2011-03-16 10:47 UTC (permalink / raw)
  To: anthony; +Cc: kwolf, qemu-devel

The following changes since commit cc015e9a5dde2f03f123357fa060acbdfcd570a4:

  add Win32 IPI service (2011-03-13 14:44:22 +0000)

are available in the git repository at:
  git://repo.or.cz/qemu/kevin.git for-anthony

Brian Wheeler (1):
      Fix ATA SMART and CHECK POWER MODE

Feiran Zheng (1):
      hw/xen_disk: aio_inflight not released in handling ioreq when nr_segments==0

Jes Sorensen (1):
      Improve error handling in do_snapshot_blkdev()

Kevin Wolf (3):
      Add error message for loading snapshot without VM state
      tools: Use real async.c instead of stubs
      Add qcow2 documentation

Ryan Harper (1):
      Don't allow multiwrites against a block device without underlying medium

Stefan Weil (2):
      block/vdi: Don't ignore immediate read/write failures
      block/qcow: Don't ignore immediate read/write and other failures

 Makefile.objs        |    4 +-
 block.c              |    8 ++
 block/qcow.c         |   16 +++-
 block/vdi.c          |    5 +
 blockdev.c           |   23 ++++-
 docs/specs/qcow2.txt |  260 ++++++++++++++++++++++++++++++++++++++++++++++++++
 hw/ide/core.c        |   41 ++++++---
 hw/xen_disk.c        |    2 +-
 qemu-tool.c          |   47 +--------
 savevm.c             |    2 +
 10 files changed, 339 insertions(+), 69 deletions(-)
 create mode 100644 docs/specs/qcow2.txt

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2019-02-12  9:49 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-11  5:50 [Qemu-devel] [PULL 0/9] Block patches Stefan Hajnoczi
2019-02-11  5:50 ` [Qemu-devel] [PULL 1/9] iothread: fix iothread hang when stop too soon Stefan Hajnoczi
2019-02-11  5:50 ` [Qemu-devel] [PULL 2/9] qemugdb/coroutine: fix arch_prctl has unknown return type Stefan Hajnoczi
2019-02-11  5:50 ` [Qemu-devel] [PULL 3/9] virtio-blk: cleanup using VirtIOBlock *s and VirtIODevice *vdev Stefan Hajnoczi
2019-02-11  5:50 ` [Qemu-devel] [PULL 4/9] virtio-blk: add acct_failed param to virtio_blk_handle_rw_error() Stefan Hajnoczi
2019-02-11  5:50 ` [Qemu-devel] [PULL 5/9] virtio-blk: add host_features field in VirtIOBlock Stefan Hajnoczi
2019-02-11  5:50 ` [Qemu-devel] [PULL 6/9] virtio-blk: add "discard" and "write-zeroes" properties Stefan Hajnoczi
2019-02-11  5:50 ` [Qemu-devel] [PULL 7/9] virtio-blk: add DISCARD and WRITE_ZEROES features Stefan Hajnoczi
2019-02-11  5:50 ` [Qemu-devel] [PULL 8/9] tests/virtio-blk: change assert on data_size in virtio_blk_request() Stefan Hajnoczi
2019-02-11  5:50 ` [Qemu-devel] [PULL 9/9] tests/virtio-blk: add test for WRITE_ZEROES command Stefan Hajnoczi
2019-02-11 11:42 ` [Qemu-devel] [PULL 0/9] Block patches Peter Maydell
2019-02-12  3:51   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2019-02-12  8:11     ` Stefano Garzarella
2019-02-12  9:49     ` Peter Maydell
  -- strict thread matches above, loose matches on Subject: below --
2017-02-21 15:40 [Qemu-devel] " Jeff Cody
2017-02-21 18:16 ` Peter Maydell
2016-06-28 13:23 Stefan Hajnoczi
2016-06-28 14:03 ` Peter Maydell
2014-02-28 18:33 Stefan Hajnoczi
2014-03-04 17:02 ` Peter Maydell
2013-03-04  9:15 Stefan Hajnoczi
2011-03-16 10:47 Kevin Wolf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.