All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] virtio_error: don't invoke status callbacks
@ 2017-12-13 20:03 ` Michael S. Tsirkin
  2017-12-18 13:03   ` Ilya Maximets
  0 siblings, 1 reply; 2+ messages in thread
From: Michael S. Tsirkin @ 2017-12-13 20:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: Ilya Maximets

Backends don't need to know what frontend requested a reset,
and notifying then from virtio_error is messy because
virtio_error itself might be invoked from backend.

Let's just set the status directly.

Reported-by: Ilya Maximets <i.maximets@samsung.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---

Ilya this should fix the crash you are seeing, but
the error itself still shows there's something wrong.
So I'd like to defer applying that patch until we
figure out what corrupted guest index.

If you know pls let me know!


 hw/virtio/virtio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index ad564b0..d6002ee 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -2469,7 +2469,7 @@ void GCC_FMT_ATTR(2, 3) virtio_error(VirtIODevice *vdev, const char *fmt, ...)
     va_end(ap);
 
     if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) {
-        virtio_set_status(vdev, vdev->status | VIRTIO_CONFIG_S_NEEDS_RESET);
+        vdev->status = vdev->status | VIRTIO_CONFIG_S_NEEDS_RESET;
         virtio_notify_config(vdev);
     }
 
-- 
MST

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

* Re: [Qemu-devel] [PATCH] virtio_error: don't invoke status callbacks
  2017-12-13 20:03 ` [Qemu-devel] [PATCH] virtio_error: don't invoke status callbacks Michael S. Tsirkin
@ 2017-12-18 13:03   ` Ilya Maximets
  0 siblings, 0 replies; 2+ messages in thread
From: Ilya Maximets @ 2017-12-18 13:03 UTC (permalink / raw)
  To: Michael S. Tsirkin, qemu-devel; +Cc: Maxime Coquelin

On 13.12.2017 23:03, Michael S. Tsirkin wrote:
> Backends don't need to know what frontend requested a reset,
> and notifying then from virtio_error is messy because
> virtio_error itself might be invoked from backend.
> 
> Let's just set the status directly.
> 
> Reported-by: Ilya Maximets <i.maximets@samsung.com>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> 
> Ilya this should fix the crash you are seeing
I tested it and it really fixes the QEMU crash.
Thanks. 

> but
> the error itself still shows there's something wrong.
> So I'd like to defer applying that patch until we
> figure out what corrupted guest index.
> 
> If you know pls let me know!

It looks like virtio driver crash caused by the same issue that was fixed in recent
patches from Maxime Coquelin:

  2ae39a113af3 ("vhost: restore avail index from vring used index on disconnection")
  2d4ba6cc741d ("virtio: Add queue interface to restore avail index from vring used index")

Applying above patches on top of 2.10.1 fixes virtio driver's crash.

> 
>  hw/virtio/virtio.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index ad564b0..d6002ee 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -2469,7 +2469,7 @@ void GCC_FMT_ATTR(2, 3) virtio_error(VirtIODevice *vdev, const char *fmt, ...)
>      va_end(ap);
>  
>      if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) {
> -        virtio_set_status(vdev, vdev->status | VIRTIO_CONFIG_S_NEEDS_RESET);
> +        vdev->status = vdev->status | VIRTIO_CONFIG_S_NEEDS_RESET;
>          virtio_notify_config(vdev);
>      }
>  
> 

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

end of thread, other threads:[~2017-12-18 13:04 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CGME20171213200345epcas2p16eb8617995e8517ee3ae83e5d72af961@epcas2p1.samsung.com>
2017-12-13 20:03 ` [Qemu-devel] [PATCH] virtio_error: don't invoke status callbacks Michael S. Tsirkin
2017-12-18 13:03   ` Ilya Maximets

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.