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