Re: [PATCH 1/3] virtio_net: pass well-formed sgs to virtqueue_add_*()

Rusty Russell
2014-10-14T02:21:47Z

"Michael S. Tsirkin" <mst@redhat.com> writes:
> On Fri, Sep 05, 2014 at 12:40:50PM +0200, Paolo Bonzini wrote:
>> Il 03/09/2014 06:29, Rusty Russell ha scritto:
>> > + sg_init_table(rq->sg, MAX_SKB_FRAGS + 2);
>>
>> I think 2 is enough here. That said...
>>
>> > sg_set_buf(rq->sg, &hdr->hdr, sizeof hdr->hdr);
>> > -
>> > skb_to_sgvec(skb, rq->sg + 1, 0, skb->len);
>> >
>> > err = virtqueue_add_inbuf(rq->vq, rq->sg, 2, skb, gfp);
>>
>> ... skb_to_sgvec will already make the sg well formed, so the
>> sg_init_table is _almost_ redundant; it is only there to remove
>> intermediate end marks. The block layer takes care to remove
>> them, but skb_to_sgvec doesn't.

sg_init_table is still needed if CONFIG_DEBUG_SG, so I don't
think it's worth it.

Thanks,
Rusty.