On Tue, Sep 25, 2012 at 02:15:07PM +0800, Jason Wang wrote: > On 09/25/2012 07:05 AM, Michael S. Tsirkin wrote: > >There is no out sg for TX, so used buf length for tx > >should always be 0. > > According to the spec, the len is "Total length of the descriptor > chain which was used (written to)".
Right. And with TX no bytes are written at all. > So I wonder if we need to pass > the len here, it looks useful for guest how many bytes were sent by > the driver (consider qemu may truncate the packet). I thik qemu may not truncate packet. > >Signed-off-by: Michael S. Tsirkin<m...@redhat.com> > >--- > > hw/virtio-net.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > >diff --git a/hw/virtio-net.c b/hw/virtio-net.c > >index 2381ee5..d9a9f8f 100644 > >--- a/hw/virtio-net.c > >+++ b/hw/virtio-net.c > >@@ -688,7 +688,7 @@ static void virtio_net_tx_complete(NetClientState *nc, > >ssize_t len) > > { > > VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque; > > > >- virtqueue_push(n->tx_vq,&n->async_tx.elem, n->async_tx.len); > >+ virtqueue_push(n->tx_vq,&n->async_tx.elem, 0); > > virtio_notify(&n->vdev, n->tx_vq); > > > > n->async_tx.elem.out_num = n->async_tx.len = 0; > >@@ -754,7 +754,7 @@ static int32_t virtio_net_flush_tx(VirtIONet *n, > >VirtQueue *vq) > > > > len += ret; > > > >- virtqueue_push(vq,&elem, len); > >+ virtqueue_push(vq,&elem, 0); > > virtio_notify(&n->vdev, vq); > > > > if (++num_packets>= n->tx_burst) {