virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V2 RFC 9/9] virtio_scsi: verify if queue is broken after virtqueue_get_buf()
  2013-10-24 15:23 [PATCH V2 RFC 0/9] virtio: fix hang(loop) after hot-unplug vlan Heinz Graalfs
@ 2013-10-24 15:23 ` Heinz Graalfs
  2013-10-27 23:29   ` Rusty Russell
  2013-10-29  1:04   ` Rusty Russell
  0 siblings, 2 replies; 6+ messages in thread
From: Heinz Graalfs @ 2013-10-24 15:23 UTC (permalink / raw)
  To: rusty, mst, virtualization; +Cc: borntraeger

If virtqueue_get_buf() returned with a NULL pointer avoid a possibly
endless loop by checking for a broken virtqueue.

Signed-off-by: Heinz Graalfs <graalfs@linux.vnet.ibm.com>
---
 drivers/scsi/virtio_scsi.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
index 74b88ef..45bcdb5 100644
--- a/drivers/scsi/virtio_scsi.c
+++ b/drivers/scsi/virtio_scsi.c
@@ -224,7 +224,8 @@ static void virtscsi_vq_done(struct virtio_scsi *vscsi,
 		virtqueue_disable_cb(vq);
 		while ((buf = virtqueue_get_buf(vq, &len)) != NULL)
 			fn(vscsi, buf);
-	} while (!virtqueue_enable_cb(vq));
+	} while (unlikely(!virtqueue_is_broken(vq)) &&
+		 !virtqueue_enable_cb(vq));
 	spin_unlock_irqrestore(&virtscsi_vq->vq_lock, flags);
 }
 
-- 
1.8.3.1

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

* Re: [PATCH V2 RFC 9/9] virtio_scsi: verify if queue is broken after virtqueue_get_buf()
  2013-10-24 15:23 ` [PATCH V2 RFC 9/9] virtio_scsi: verify if queue is broken after virtqueue_get_buf() Heinz Graalfs
@ 2013-10-27 23:29   ` Rusty Russell
  2013-10-29  1:04   ` Rusty Russell
  1 sibling, 0 replies; 6+ messages in thread
From: Rusty Russell @ 2013-10-27 23:29 UTC (permalink / raw)
  To: Heinz Graalfs, mst, virtualization; +Cc: borntraeger

Heinz Graalfs <graalfs@linux.vnet.ibm.com> writes:
> If virtqueue_get_buf() returned with a NULL pointer avoid a possibly
> endless loop by checking for a broken virtqueue.
>
> Signed-off-by: Heinz Graalfs <graalfs@linux.vnet.ibm.com>

Yes, these look good.

Please just repost the first one, and I'll apply.

Thanks,
Rusty.

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

* Re: [PATCH V2 RFC 9/9] virtio_scsi: verify if queue is broken after virtqueue_get_buf()
  2013-10-24 15:23 ` [PATCH V2 RFC 9/9] virtio_scsi: verify if queue is broken after virtqueue_get_buf() Heinz Graalfs
  2013-10-27 23:29   ` Rusty Russell
@ 2013-10-29  1:04   ` Rusty Russell
  1 sibling, 0 replies; 6+ messages in thread
From: Rusty Russell @ 2013-10-29  1:04 UTC (permalink / raw)
  To: Heinz Graalfs, mst, virtualization; +Cc: borntraeger

Heinz Graalfs <graalfs@linux.vnet.ibm.com> writes:
> If virtqueue_get_buf() returned with a NULL pointer avoid a possibly
> endless loop by checking for a broken virtqueue.
>
> Signed-off-by: Heinz Graalfs <graalfs@linux.vnet.ibm.com>
> ---
>  drivers/scsi/virtio_scsi.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
> index 74b88ef..45bcdb5 100644
> --- a/drivers/scsi/virtio_scsi.c
> +++ b/drivers/scsi/virtio_scsi.c
> @@ -224,7 +224,8 @@ static void virtscsi_vq_done(struct virtio_scsi *vscsi,
>  		virtqueue_disable_cb(vq);
>  		while ((buf = virtqueue_get_buf(vq, &len)) != NULL)
>  			fn(vscsi, buf);
> -	} while (!virtqueue_enable_cb(vq));
> +	} while (unlikely(!virtqueue_is_broken(vq)) &&
> +		 !virtqueue_enable_cb(vq));
>  	spin_unlock_irqrestore(&virtscsi_vq->vq_lock, flags);

unlikely(!virtqueue_is_broken(vq))?

I didn't apply this one.

I'd prefer:

	spin_lock_irqsave(&virtscsi_vq->vq_lock, flags);
	do {
		virtqueue_disable_cb(vq);
		while ((buf = virtqueue_get_buf(vq, &len)) != NULL)
			fn(vscsi, buf);

                if (unlikely(virtqueue_is_broken(vq)))
                        break;
	} while (!virtqueue_enable_cb(vq));
	spin_unlock_irqrestore(&virtscsi_vq->vq_lock, flags);

Thanks,
Rusty.

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

* [PATCH V2 RFC 9/9] virtio_scsi: verify if queue is broken after virtqueue_get_buf()
@ 2013-11-04 11:14 Heinz Graalfs
  2013-11-04 11:14 ` Heinz Graalfs
  0 siblings, 1 reply; 6+ messages in thread
From: Heinz Graalfs @ 2013-11-04 11:14 UTC (permalink / raw)
  To: rusty, virtualization; +Cc: borntraeger, mst

Rusty,

and here is patch 9 as you suggested.

Thanks.

Heinz Graalfs (9):
  virtio_ring: change host notification API
  virtio_ring: let virtqueue_{kick()/notify()} return a bool
  virtio_net: verify if virtqueue_kick() succeeded
  virtio_test: verify if virtqueue_kick() succeeded
  virtio_ring: add new function virtqueue_is_broken()
  virtio_blk: verify if queue is broken after virtqueue_get_buf()
  virtio_console: verify if queue is broken after virtqueue_get_buf()
  virtio_net: verify if queue is broken after virtqueue_get_buf()
  virtio_scsi: verify if queue is broken after virtqueue_get_buf()

 drivers/block/virtio_blk.c             |  2 ++
 drivers/char/virtio_console.c          |  6 ++++--
 drivers/lguest/lguest_device.c         |  3 ++-
 drivers/net/virtio_net.c               | 12 +++++++-----
 drivers/remoteproc/remoteproc_virtio.c |  3 ++-
 drivers/s390/kvm/kvm_virtio.c          |  8 ++++++--
 drivers/s390/kvm/virtio_ccw.c          |  5 ++++-
 drivers/scsi/virtio_scsi.c             |  3 +++
 drivers/virtio/virtio_mmio.c           |  3 ++-
 drivers/virtio/virtio_pci.c            |  3 ++-
 drivers/virtio/virtio_ring.c           | 32 ++++++++++++++++++++++++++------
 include/linux/virtio.h                 |  6 ++++--
 include/linux/virtio_ring.h            |  2 +-
 tools/virtio/virtio_test.c             |  6 ++++--
 tools/virtio/vringh_test.c             | 13 +++++++++----
 15 files changed, 78 insertions(+), 29 deletions(-)

-- 
1.8.3.1

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

* [PATCH V2 RFC 9/9] virtio_scsi: verify if queue is broken after virtqueue_get_buf()
  2013-11-04 11:14 [PATCH V2 RFC 9/9] virtio_scsi: verify if queue is broken after virtqueue_get_buf() Heinz Graalfs
@ 2013-11-04 11:14 ` Heinz Graalfs
  2013-11-05  1:57   ` Rusty Russell
  0 siblings, 1 reply; 6+ messages in thread
From: Heinz Graalfs @ 2013-11-04 11:14 UTC (permalink / raw)
  To: rusty, virtualization; +Cc: borntraeger, mst

If virtqueue_get_buf() returned with a NULL pointer avoid a possibly
endless loop by checking for a broken virtqueue.

Signed-off-by: Heinz Graalfs <graalfs@linux.vnet.ibm.com>
---
 drivers/scsi/virtio_scsi.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
index 74b88ef..aa25aab 100644
--- a/drivers/scsi/virtio_scsi.c
+++ b/drivers/scsi/virtio_scsi.c
@@ -224,6 +224,9 @@ static void virtscsi_vq_done(struct virtio_scsi *vscsi,
 		virtqueue_disable_cb(vq);
 		while ((buf = virtqueue_get_buf(vq, &len)) != NULL)
 			fn(vscsi, buf);
+
+		if (unlikely(virtqueue_is_broken(vq)))
+			break;
 	} while (!virtqueue_enable_cb(vq));
 	spin_unlock_irqrestore(&virtscsi_vq->vq_lock, flags);
 }
-- 
1.8.3.1

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

* Re: [PATCH V2 RFC 9/9] virtio_scsi: verify if queue is broken after virtqueue_get_buf()
  2013-11-04 11:14 ` Heinz Graalfs
@ 2013-11-05  1:57   ` Rusty Russell
  0 siblings, 0 replies; 6+ messages in thread
From: Rusty Russell @ 2013-11-05  1:57 UTC (permalink / raw)
  To: Heinz Graalfs, virtualization; +Cc: borntraeger, mst

Heinz Graalfs <graalfs@linux.vnet.ibm.com> writes:
> If virtqueue_get_buf() returned with a NULL pointer avoid a possibly
> endless loop by checking for a broken virtqueue.
>
> Signed-off-by: Heinz Graalfs <graalfs@linux.vnet.ibm.com>

Thanks, applied.

Cheers,
Rusty.

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

end of thread, other threads:[~2013-11-05  1:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-04 11:14 [PATCH V2 RFC 9/9] virtio_scsi: verify if queue is broken after virtqueue_get_buf() Heinz Graalfs
2013-11-04 11:14 ` Heinz Graalfs
2013-11-05  1:57   ` Rusty Russell
  -- strict thread matches above, loose matches on Subject: below --
2013-10-24 15:23 [PATCH V2 RFC 0/9] virtio: fix hang(loop) after hot-unplug vlan Heinz Graalfs
2013-10-24 15:23 ` [PATCH V2 RFC 9/9] virtio_scsi: verify if queue is broken after virtqueue_get_buf() Heinz Graalfs
2013-10-27 23:29   ` Rusty Russell
2013-10-29  1:04   ` Rusty Russell

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).