Re: [Qemu-devel] [PATCH 00/21] RFCv2: add Spice block device

2013-11-29 Thread Gerd Hoffmann
On Fr, 2013-11-22 at 14:28 +0100, Marc-André Lureau wrote:
 Hi there,
 
 Even though there is no rush to review this series, it would be nice
 to get the first ~10 patches. It would make the next rebase easier,
 and the review smaller.

Can you send the ready-to-go spice bits as separate patch series (after
addressing alon's comment on patch #5)?  Then I'll add them to the spice
queue.

thanks,
  Gerd





Re: [Qemu-devel] [PATCH 00/21] RFCv2: add Spice block device

2013-11-22 Thread Marc-André Lureau
Hi there,

Even though there is no rush to review this series, it would be nice
to get the first ~10 patches. It would make the next rebase easier,
and the review smaller.

cheers

On Mon, Nov 18, 2013 at 1:25 PM, Marc-André Lureau
marcandre.lur...@gmail.com wrote:
 Hi,

 The following patch series implement a Spice block device, which
 allows the client to redirect a block device using the NBD protocol,
 which greatly simplifies the Spice code by reusing an existing
 protocol, and allows sharing existing qemu NBD implementation.

 The backend only support read-only device atm (although it shouldn't
 be hard to add write support if necessary)

 Usage with a CDROM drive:
  -device ide-cd,drive=cd -drive if=none,id=cd,readonly,file=spicebd:

 The associated server and client bits are:
 http://lists.freedesktop.org/archives/spice-devel/2013-June/013608.html
 http://lists.freedesktop.org/archives/spice-devel/2013-November/015452.html
 http://lists.freedesktop.org/archives/spice-devel/2013-November/015431.html

 Caveats: This block device driver is a bit special, since it is
 successfully initialized with size 0, and once the client is connected
 (or want to change block device) it re-opens itself. For this to work,
 we allow a block driver to be open with an existing opaque data. We
 also save the associate device name in the block drivers.

 During migration, the source needs to be able to flush pending
 operations, so the Spice channel context must be in a running loop. A
 modification to the Spice server API allows to associate a particular
 channel with the AIO loop, and may be used in the future to associate
 channels with different context or athreads. However, the AIO context
 doesn't have timers yet. Since they aren't really needed for the NBD
 channel, it's not a problem. I have been told timers in AIO are on
 their way, so this could be updated later.

 Since the block driver state is not migrated, the destination needs to
 wait until the block driver is initialized before the VM can run. This
 is done with a simple hold count. It is also necessary to avoid extra
 media changed notifications, which is easily done by checking
 migration state.


 Marc-André Lureau (21):
   vscclient: do not add a socket watch if there is not data to send
   spice-char: remove unused field
   qmp_change_blockdev() remove unused has_format
   include: add missing config-host.h include
   char: add qemu_chr_fe_event()
   Split nbd block client code
   nbd: don't change socket block during negotiate
   nbd: pass export name as init argument
   nbd: make session_close() idempotent
   nbd: finish any pending coroutine
   nbd: avoid uninitialized warnings
   block: save the associated child name in BlockDriverState
   blockdev: add qmp_change_blockdev_int()
   block: extract make_snapshot() from bdrv_open()
   block: add snapshot.size option to avoid extra bdrv_open()
   block: learn to open a driver with a given opaque
   block: allow to call bdrv_open() with an opaque
   block: do not notify change during migration
   sysemu: add vm_start_hold/release
   spice-core: allow an interface to be in AIO context
   block: add spice block device backend

  block.c   | 225 ---
  block/Makefile.objs   |   3 +-
  block/nbd-client.c| 384 +
  block/nbd-client.h|  50 +
  block/nbd.c   | 380 +++-
  block/spicebd.c   | 536 
 ++
  blockdev.c|  24 ++-
  hw/block/fdc.c|   8 +-
  hw/ide/core.c |  12 +-
  hw/scsi/scsi-disk.c   |  11 +-
  hw/sd/sd.c|   6 +-
  include/block/block.h |   2 +-
  include/block/block_int.h |   1 +
  include/sysemu/blockdev.h |   5 +-
  include/sysemu/char.h |  10 +
  include/sysemu/sysemu.h   |   2 +
  include/ui/qemu-spice.h   |   4 +-
  libcacard/vscclient.c |  10 +-
  nbd.c |   1 -
  qemu-char.c   |   9 +-
  qmp.c |   2 +-
  spice-qemu-char.c |  20 +-
  stubs/vm-stop.c   |   5 +
  ui/spice-core.c   |  62 +-
  vl.c  |  17 ++
  25 files changed, 1320 insertions(+), 469 deletions(-)
  create mode 100644 block/nbd-client.c
  create mode 100644 block/nbd-client.h
  create mode 100644 block/spicebd.c

 --
 1.8.3.1




-- 
Marc-André Lureau



[Qemu-devel] [PATCH 00/21] RFCv2: add Spice block device

2013-11-18 Thread Marc-André Lureau
Hi,

The following patch series implement a Spice block device, which
allows the client to redirect a block device using the NBD protocol,
which greatly simplifies the Spice code by reusing an existing
protocol, and allows sharing existing qemu NBD implementation.

The backend only support read-only device atm (although it shouldn't
be hard to add write support if necessary)

Usage with a CDROM drive:
 -device ide-cd,drive=cd -drive if=none,id=cd,readonly,file=spicebd:

The associated server and client bits are:
http://lists.freedesktop.org/archives/spice-devel/2013-June/013608.html
http://lists.freedesktop.org/archives/spice-devel/2013-November/015452.html
http://lists.freedesktop.org/archives/spice-devel/2013-November/015431.html

Caveats: This block device driver is a bit special, since it is
successfully initialized with size 0, and once the client is connected
(or want to change block device) it re-opens itself. For this to work,
we allow a block driver to be open with an existing opaque data. We
also save the associate device name in the block drivers.

During migration, the source needs to be able to flush pending
operations, so the Spice channel context must be in a running loop. A
modification to the Spice server API allows to associate a particular
channel with the AIO loop, and may be used in the future to associate
channels with different context or athreads. However, the AIO context
doesn't have timers yet. Since they aren't really needed for the NBD
channel, it's not a problem. I have been told timers in AIO are on
their way, so this could be updated later.

Since the block driver state is not migrated, the destination needs to
wait until the block driver is initialized before the VM can run. This
is done with a simple hold count. It is also necessary to avoid extra
media changed notifications, which is easily done by checking
migration state.


Marc-André Lureau (21):
  vscclient: do not add a socket watch if there is not data to send
  spice-char: remove unused field
  qmp_change_blockdev() remove unused has_format
  include: add missing config-host.h include
  char: add qemu_chr_fe_event()
  Split nbd block client code
  nbd: don't change socket block during negotiate
  nbd: pass export name as init argument
  nbd: make session_close() idempotent
  nbd: finish any pending coroutine
  nbd: avoid uninitialized warnings
  block: save the associated child name in BlockDriverState
  blockdev: add qmp_change_blockdev_int()
  block: extract make_snapshot() from bdrv_open()
  block: add snapshot.size option to avoid extra bdrv_open()
  block: learn to open a driver with a given opaque
  block: allow to call bdrv_open() with an opaque
  block: do not notify change during migration
  sysemu: add vm_start_hold/release
  spice-core: allow an interface to be in AIO context
  block: add spice block device backend

 block.c   | 225 ---
 block/Makefile.objs   |   3 +-
 block/nbd-client.c| 384 +
 block/nbd-client.h|  50 +
 block/nbd.c   | 380 +++-
 block/spicebd.c   | 536 ++
 blockdev.c|  24 ++-
 hw/block/fdc.c|   8 +-
 hw/ide/core.c |  12 +-
 hw/scsi/scsi-disk.c   |  11 +-
 hw/sd/sd.c|   6 +-
 include/block/block.h |   2 +-
 include/block/block_int.h |   1 +
 include/sysemu/blockdev.h |   5 +-
 include/sysemu/char.h |  10 +
 include/sysemu/sysemu.h   |   2 +
 include/ui/qemu-spice.h   |   4 +-
 libcacard/vscclient.c |  10 +-
 nbd.c |   1 -
 qemu-char.c   |   9 +-
 qmp.c |   2 +-
 spice-qemu-char.c |  20 +-
 stubs/vm-stop.c   |   5 +
 ui/spice-core.c   |  62 +-
 vl.c  |  17 ++
 25 files changed, 1320 insertions(+), 469 deletions(-)
 create mode 100644 block/nbd-client.c
 create mode 100644 block/nbd-client.h
 create mode 100644 block/spicebd.c

-- 
1.8.3.1