"Michael S. Tsirkin" <mst@xxxxxxxxxx> writes: > On Tue, Feb 19, 2013 at 06:26:26PM +1030, Rusty Russell wrote: >> These are specialized versions of virtqueue_add_buf(), which cover >> over 50% of cases and are far clearer. >> >> In particular, the scatterlists passed to these functions don't have >> to be clean (ie. we ignore end markers). >> >> FIXME: I'm not sure about the unclean sglist bit. I had a more >> ambitious one which conditionally ignored end markers in the iterator, >> but it was ugly and I suspect this is just as fast. Maybe we should >> just fix all the drivers? >> >> Signed-off-by: Rusty Russell <rusty@xxxxxxxxxxxxxxx> > > Looking at code, it seems that most users really have a single sg, in > low memory. So how about simply passing void * instead of sg? Whoever > has multiple sgs can use the rich interface. Good point, let's do that: 1) Make virtqueue_add_outbuf()/inbuf() take a void * and len. 2) Transfer users across to use that. 3) Make everyone else use clean scatterlists with virtqueue_add_sgs[]. 4) Remove virtqueue_add_bufs(). > Long term we might optimize this unrolling some loops, I think > I saw this giving a small performance gain for -net. I *think* we could make virtqueue_add() an inline and implement an virtqueue_add_outsg() wrapper and gcc will eliminate the loops for us. But not sure it's worth the text bloat... Cheers, Rusty. _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization