qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] dataplane: support viostor virtio-pci status bit setting
@ 2013-01-17 15:46 Stefan Hajnoczi
  2013-01-17 15:59 ` Michael S. Tsirkin
  2013-01-18 15:59 ` Stefan Hajnoczi
  0 siblings, 2 replies; 7+ messages in thread
From: Stefan Hajnoczi @ 2013-01-17 15:46 UTC (permalink / raw)
  To: qemu-devel; +Cc: Kevin Wolf, vrozenfe, Stefan Hajnoczi, Michael S. Tsirkin

The viostor virtio-blk driver for Windows does not use the
VIRTIO_CONFIG_S_DRIVER bit.  It only sets the VIRTIO_CONFIG_S_DRIVER_OK
bit.

The viostor driver refreshes the virtio-pci status byte sometimes while
the guest is running.  We misinterpret 0x4 (VIRTIO_CONFIG_S_DRIVER_OK)
as an indication that virtio-blk-data-plane should be stopped since 0x2
(VIRTIO_CONFIG_S_DRIVER) is missing.  The result is that the device
becomes unresponsive.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 hw/virtio-blk.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
index df57b35..34913ee 100644
--- a/hw/virtio-blk.c
+++ b/hw/virtio-blk.c
@@ -571,7 +571,8 @@ static void virtio_blk_set_status(VirtIODevice *vdev, uint8_t status)
     uint32_t features;
 
 #ifdef CONFIG_VIRTIO_BLK_DATA_PLANE
-    if (s->dataplane && !(status & VIRTIO_CONFIG_S_DRIVER)) {
+    if (s->dataplane && !(status & (VIRTIO_CONFIG_S_DRIVER |
+                                    VIRTIO_CONFIG_S_DRIVER_OK))) {
         virtio_blk_data_plane_stop(s->dataplane);
     }
 #endif
-- 
1.8.0.2

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

* Re: [Qemu-devel] [PATCH] dataplane: support viostor virtio-pci status bit setting
  2013-01-17 15:46 [Qemu-devel] [PATCH] dataplane: support viostor virtio-pci status bit setting Stefan Hajnoczi
@ 2013-01-17 15:59 ` Michael S. Tsirkin
  2013-01-17 16:59   ` Stefan Hajnoczi
  2013-01-18 15:59 ` Stefan Hajnoczi
  1 sibling, 1 reply; 7+ messages in thread
From: Michael S. Tsirkin @ 2013-01-17 15:59 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: Kevin Wolf, qemu-devel, vrozenfe

On Thu, Jan 17, 2013 at 04:46:54PM +0100, Stefan Hajnoczi wrote:
> The viostor virtio-blk driver for Windows does not use the
> VIRTIO_CONFIG_S_DRIVER bit.  It only sets the VIRTIO_CONFIG_S_DRIVER_OK
> bit.
> 
> The viostor driver refreshes the virtio-pci status byte sometimes while
> the guest is running.  We misinterpret 0x4 (VIRTIO_CONFIG_S_DRIVER_OK)
> as an indication that virtio-blk-data-plane should be stopped since 0x2
> (VIRTIO_CONFIG_S_DRIVER) is missing.  The result is that the device
> becomes unresponsive.
> 
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>

I think you actually want

  if (s->dataplane && !(status & VIRTIO_CONFIG_S_DRIVER_OK)))

so stop on any error.

This is also consistent with what vhost-net does.


> ---
>  hw/virtio-blk.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
> index df57b35..34913ee 100644
> --- a/hw/virtio-blk.c
> +++ b/hw/virtio-blk.c
> @@ -571,7 +571,8 @@ static void virtio_blk_set_status(VirtIODevice *vdev, uint8_t status)
>      uint32_t features;
>  
>  #ifdef CONFIG_VIRTIO_BLK_DATA_PLANE
> -    if (s->dataplane && !(status & VIRTIO_CONFIG_S_DRIVER)) {
> +    if (s->dataplane && !(status & (VIRTIO_CONFIG_S_DRIVER |
> +                                    VIRTIO_CONFIG_S_DRIVER_OK))) {
>          virtio_blk_data_plane_stop(s->dataplane);
>      }
>  #endif
> -- 
> 1.8.0.2

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

* Re: [Qemu-devel] [PATCH] dataplane: support viostor virtio-pci status bit setting
  2013-01-17 15:59 ` Michael S. Tsirkin
@ 2013-01-17 16:59   ` Stefan Hajnoczi
  0 siblings, 0 replies; 7+ messages in thread
From: Stefan Hajnoczi @ 2013-01-17 16:59 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: Kevin Wolf, qemu-devel, vrozenfe

On Thu, Jan 17, 2013 at 05:59:17PM +0200, Michael S. Tsirkin wrote:
> On Thu, Jan 17, 2013 at 04:46:54PM +0100, Stefan Hajnoczi wrote:
> > The viostor virtio-blk driver for Windows does not use the
> > VIRTIO_CONFIG_S_DRIVER bit.  It only sets the VIRTIO_CONFIG_S_DRIVER_OK
> > bit.
> > 
> > The viostor driver refreshes the virtio-pci status byte sometimes while
> > the guest is running.  We misinterpret 0x4 (VIRTIO_CONFIG_S_DRIVER_OK)
> > as an indication that virtio-blk-data-plane should be stopped since 0x2
> > (VIRTIO_CONFIG_S_DRIVER) is missing.  The result is that the device
> > becomes unresponsive.
> > 
> > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> 
> I think you actually want
> 
>   if (s->dataplane && !(status & VIRTIO_CONFIG_S_DRIVER_OK)))
> 
> so stop on any error.
> 
> This is also consistent with what vhost-net does.

We can't do that because of the Linux virtio quirk where it begins using
virtqueues before VIRTIO_CONFIG_S_DRIVER_OK.  I original checked
VIRTIO_CONFIG_S_DRIVER_OK but I'm pretty sure I hit a situation where
the status would still be set ~DRIVER_OK after the first kick - this
would stop data plane and the vring last indices would no longer be in
sync when it started again.

So I think it's most robust to check both DRIVER and DRIVER_OK.

Stefan

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

* Re: [Qemu-devel] [PATCH] dataplane: support viostor virtio-pci status bit setting
  2013-01-17 15:46 [Qemu-devel] [PATCH] dataplane: support viostor virtio-pci status bit setting Stefan Hajnoczi
  2013-01-17 15:59 ` Michael S. Tsirkin
@ 2013-01-18 15:59 ` Stefan Hajnoczi
  2013-01-19  7:59   ` Vadim Rozenfeld
  1 sibling, 1 reply; 7+ messages in thread
From: Stefan Hajnoczi @ 2013-01-18 15:59 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: Kevin Wolf, Michael S. Tsirkin, qemu-devel, vrozenfe

On Thu, Jan 17, 2013 at 04:46:54PM +0100, Stefan Hajnoczi wrote:
> The viostor virtio-blk driver for Windows does not use the
> VIRTIO_CONFIG_S_DRIVER bit.  It only sets the VIRTIO_CONFIG_S_DRIVER_OK
> bit.
> 
> The viostor driver refreshes the virtio-pci status byte sometimes while
> the guest is running.  We misinterpret 0x4 (VIRTIO_CONFIG_S_DRIVER_OK)
> as an indication that virtio-blk-data-plane should be stopped since 0x2
> (VIRTIO_CONFIG_S_DRIVER) is missing.  The result is that the device
> becomes unresponsive.
> 
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
>  hw/virtio-blk.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)

Applied to my block tree:
https://github.com/stefanha/qemu/commits/block

Stefan

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

* Re: [Qemu-devel] [PATCH] dataplane: support viostor virtio-pci status bit setting
  2013-01-18 15:59 ` Stefan Hajnoczi
@ 2013-01-19  7:59   ` Vadim Rozenfeld
  2013-01-21  9:36     ` Stefan Hajnoczi
  0 siblings, 1 reply; 7+ messages in thread
From: Vadim Rozenfeld @ 2013-01-19  7:59 UTC (permalink / raw)
  To: Stefan Hajnoczi
  Cc: Kevin Wolf, qemu-devel, Stefan Hajnoczi, Michael S. Tsirkin

On Friday, January 18, 2013 05:59:37 PM Stefan Hajnoczi wrote:
> On Thu, Jan 17, 2013 at 04:46:54PM +0100, Stefan Hajnoczi wrote:
> > The viostor virtio-blk driver for Windows does not use the
> > VIRTIO_CONFIG_S_DRIVER bit.  It only sets the VIRTIO_CONFIG_S_DRIVER_OK
> > bit.
Will be added in the next build.
Thank you,
Vadim.
> > 
> > The viostor driver refreshes the virtio-pci status byte sometimes while
> > the guest is running.  We misinterpret 0x4 (VIRTIO_CONFIG_S_DRIVER_OK)
> > as an indication that virtio-blk-data-plane should be stopped since 0x2
> > (VIRTIO_CONFIG_S_DRIVER) is missing.  The result is that the device
> > becomes unresponsive.
> > 
> > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> > ---
> > 
> >  hw/virtio-blk.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> Applied to my block tree:
> https://github.com/stefanha/qemu/commits/block
> 
> Stefan

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

* Re: [Qemu-devel] [PATCH] dataplane: support viostor virtio-pci status bit setting
  2013-01-19  7:59   ` Vadim Rozenfeld
@ 2013-01-21  9:36     ` Stefan Hajnoczi
  2013-01-21 10:05       ` Michael S. Tsirkin
  0 siblings, 1 reply; 7+ messages in thread
From: Stefan Hajnoczi @ 2013-01-21  9:36 UTC (permalink / raw)
  To: Vadim Rozenfeld
  Cc: Kevin Wolf, Stefan Hajnoczi, qemu-devel, Michael S. Tsirkin

On Sat, Jan 19, 2013 at 09:59:57AM +0200, Vadim Rozenfeld wrote:
> On Friday, January 18, 2013 05:59:37 PM Stefan Hajnoczi wrote:
> > On Thu, Jan 17, 2013 at 04:46:54PM +0100, Stefan Hajnoczi wrote:
> > > The viostor virtio-blk driver for Windows does not use the
> > > VIRTIO_CONFIG_S_DRIVER bit.  It only sets the VIRTIO_CONFIG_S_DRIVER_OK
> > > bit.
> Will be added in the next build.

Nice, thanks.  For compatibility with existing viostor drivers QEMU will
carry this patch.

Stefan

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

* Re: [Qemu-devel] [PATCH] dataplane: support viostor virtio-pci status bit setting
  2013-01-21  9:36     ` Stefan Hajnoczi
@ 2013-01-21 10:05       ` Michael S. Tsirkin
  0 siblings, 0 replies; 7+ messages in thread
From: Michael S. Tsirkin @ 2013-01-21 10:05 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: Kevin Wolf, Stefan Hajnoczi, Vadim Rozenfeld, qemu-devel

On Mon, Jan 21, 2013 at 10:36:18AM +0100, Stefan Hajnoczi wrote:
> On Sat, Jan 19, 2013 at 09:59:57AM +0200, Vadim Rozenfeld wrote:
> > On Friday, January 18, 2013 05:59:37 PM Stefan Hajnoczi wrote:
> > > On Thu, Jan 17, 2013 at 04:46:54PM +0100, Stefan Hajnoczi wrote:
> > > > The viostor virtio-blk driver for Windows does not use the
> > > > VIRTIO_CONFIG_S_DRIVER bit.  It only sets the VIRTIO_CONFIG_S_DRIVER_OK
> > > > bit.
> > Will be added in the next build.
> 
> Nice, thanks.  For compatibility with existing viostor drivers QEMU will
> carry this patch.
> 
> Stefan

I still think it's wrong: when DRIVER_OK is cleared you should stop
device I think even if DRIVER is set.
This patch keeps dataplane running if DRIVER is set.

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

end of thread, other threads:[~2013-01-21 10:02 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-17 15:46 [Qemu-devel] [PATCH] dataplane: support viostor virtio-pci status bit setting Stefan Hajnoczi
2013-01-17 15:59 ` Michael S. Tsirkin
2013-01-17 16:59   ` Stefan Hajnoczi
2013-01-18 15:59 ` Stefan Hajnoczi
2013-01-19  7:59   ` Vadim Rozenfeld
2013-01-21  9:36     ` Stefan Hajnoczi
2013-01-21 10:05       ` Michael S. Tsirkin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).