提交 3afe3e0f 编写于 作者: R Rusty Russell

tools/lguest: handle indirect partway through chain.

Linux doesn't generate these, but it's perfectly valid according to
a close reading of the spec.  I opened virtio spec bug VIRTIO-134 to
make this clearer there, too.
Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
上级 c97eb679
...@@ -769,9 +769,11 @@ static unsigned wait_for_vq_desc(struct virtqueue *vq, ...@@ -769,9 +769,11 @@ static unsigned wait_for_vq_desc(struct virtqueue *vq,
* that: no rmb() required. * that: no rmb() required.
*/ */
do {
/* /*
* If this is an indirect entry, then this buffer contains a descriptor * If this is an indirect entry, then this buffer contains a
* table which we handle as if it's any normal descriptor chain. * descriptor table which we handle as if it's any normal
* descriptor chain.
*/ */
if (desc[i].flags & VRING_DESC_F_INDIRECT) { if (desc[i].flags & VRING_DESC_F_INDIRECT) {
if (desc[i].len % sizeof(struct vring_desc)) if (desc[i].len % sizeof(struct vring_desc))
...@@ -782,7 +784,6 @@ static unsigned wait_for_vq_desc(struct virtqueue *vq, ...@@ -782,7 +784,6 @@ static unsigned wait_for_vq_desc(struct virtqueue *vq,
i = 0; i = 0;
} }
do {
/* Grab the first descriptor, and check it's OK. */ /* Grab the first descriptor, and check it's OK. */
iov[*out_num + *in_num].iov_len = desc[i].len; iov[*out_num + *in_num].iov_len = desc[i].len;
iov[*out_num + *in_num].iov_base iov[*out_num + *in_num].iov_base
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册