* Re: [6/6] [VIRTIO] net: Allow receiving SG packets [not found] ` <20080418032427.GE18071@gondor.apana.org.au> @ 2008-04-21 19:06 ` Rusty Russell 2008-04-21 20:04 ` David Miller 0 siblings, 1 reply; 5+ messages in thread From: Rusty Russell @ 2008-04-21 19:06 UTC (permalink / raw) To: virtualization; +Cc: Herbert Xu, virtualization, netdev On Friday 18 April 2008 13:24:27 Herbert Xu wrote: > Finally this patch lets virtio_net receive GSO packets in addition > to sending them. ... > static void try_fill_recv(struct virtnet_info *vi) > { > struct sk_buff *skb; > - struct scatterlist sg[1+MAX_SKB_FRAGS]; > + struct scatterlist sg[2+MAX_SKB_FRAGS]; > int num, err; I'm not sure what the right number is here. Say worst case is header which goes over a page boundary then MAX_SKB_FRAGS in the skb, but for some reason that already has a +2: /* To allow 64K frame to be packed as single skb without frag_list */ #define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2) Unless someone explains, I'll change the xmit sg to 2+MAX_SKB_FRAGS as well. Thanks, Rusty. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [6/6] [VIRTIO] net: Allow receiving SG packets 2008-04-21 19:06 ` [6/6] [VIRTIO] net: Allow receiving SG packets Rusty Russell @ 2008-04-21 20:04 ` David Miller 2008-04-22 1:13 ` Herbert Xu 2008-04-22 2:50 ` Rusty Russell 0 siblings, 2 replies; 5+ messages in thread From: David Miller @ 2008-04-21 20:04 UTC (permalink / raw) To: rusty; +Cc: virtualization, herbert, virtualization, netdev From: Rusty Russell <rusty@rustcorp.com.au> Date: Tue, 22 Apr 2008 05:06:16 +1000 > I'm not sure what the right number is here. Say worst case is header which > goes over a page boundary then MAX_SKB_FRAGS in the skb, but for some reason > that already has a +2: > > /* To allow 64K frame to be packed as single skb without frag_list */ > #define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2) > > Unless someone explains, I'll change the xmit sg to 2+MAX_SKB_FRAGS as well. MAX_SKB_FRAGS + 1 is what you ought to need. MAX_SKB_FRAGS is only accounting for the skb frag pages. If you want to know how many segments skb->data might consume as well, you have to add one. skb->data is linear, therefore it's not possible to need more than one scatterlist entry for it. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [6/6] [VIRTIO] net: Allow receiving SG packets 2008-04-21 20:04 ` David Miller @ 2008-04-22 1:13 ` Herbert Xu 2008-04-22 2:50 ` Rusty Russell 1 sibling, 0 replies; 5+ messages in thread From: Herbert Xu @ 2008-04-22 1:13 UTC (permalink / raw) To: David Miller; +Cc: rusty, virtualization, virtualization, netdev On Mon, Apr 21, 2008 at 01:04:18PM -0700, David Miller wrote: > From: Rusty Russell <rusty@rustcorp.com.au> > Date: Tue, 22 Apr 2008 05:06:16 +1000 > > > I'm not sure what the right number is here. Say worst case is header which > > goes over a page boundary then MAX_SKB_FRAGS in the skb, but for some reason > > that already has a +2: The +2 (i.e., extra +1) is for the virtio GSO header. > skb->data is linear, therefore it's not possible to need > more than one scatterlist entry for it. Theoretically yes :) But for virtualisation the underlying transport may present meta-physically contiguous memory that is physically discrete. So we may actually need to have multiple SG entries for skb->data. However, no current code path should generate packets with both long skb->data areas *and* skb page frags so we could just drop them if they show up. Cheers, -- Visit Openswan at http://www.openswan.org/ Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [6/6] [VIRTIO] net: Allow receiving SG packets 2008-04-21 20:04 ` David Miller 2008-04-22 1:13 ` Herbert Xu @ 2008-04-22 2:50 ` Rusty Russell 2008-04-22 2:55 ` David Miller 1 sibling, 1 reply; 5+ messages in thread From: Rusty Russell @ 2008-04-22 2:50 UTC (permalink / raw) To: David Miller; +Cc: virtualization, herbert, virtualization, netdev On Tuesday 22 April 2008 06:04:18 David Miller wrote: > From: Rusty Russell <rusty@rustcorp.com.au> > Date: Tue, 22 Apr 2008 05:06:16 +1000 > > > I'm not sure what the right number is here. Say worst case is header > > which goes over a page boundary then MAX_SKB_FRAGS in the skb, but for > > some reason that already has a +2: > > > > /* To allow 64K frame to be packed as single skb without frag_list */ > > #define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2) > > > > Unless someone explains, I'll change the xmit sg to 2+MAX_SKB_FRAGS as > > well. > > MAX_SKB_FRAGS + 1 is what you ought to need. Right, and so that's +2 for virtio_net because we have an extra header as Herbert points out. But I was curious as to why the +2 in the MAX_SKB_FRAGS definition? Thanks, Rusty. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [6/6] [VIRTIO] net: Allow receiving SG packets 2008-04-22 2:50 ` Rusty Russell @ 2008-04-22 2:55 ` David Miller 0 siblings, 0 replies; 5+ messages in thread From: David Miller @ 2008-04-22 2:55 UTC (permalink / raw) To: rusty; +Cc: virtualization, herbert, virtualization, netdev From: Rusty Russell <rusty@rustcorp.com.au> Date: Tue, 22 Apr 2008 12:50:27 +1000 > But I was curious as to why the +2 in the MAX_SKB_FRAGS definition? To be honest I have no idea. When Alexey added the TSO changeset way back then, it had the "+2", from the history-2.6 tree: commit 80223d5186f73bf42a7e260c66c9cb9f7d8ec9cf Author: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> Date: Wed Aug 28 11:52:03 2002 -0700 [NET]: Add TCP segmentation offload core infrastructure. ... diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index a812681..9b6e6ad 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -109,7 +109,8 @@ struct sk_buff_head { struct sk_buff; -#define MAX_SKB_FRAGS 6 +/* To allow 64K frame to be packed as single skb without frag_list */ +#define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2) typedef struct skb_frag_struct skb_frag_t; ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-04-22 2:55 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20080418031257.GA17993@gondor.apana.org.au>
[not found] ` <20080418032142.GD18071@gondor.apana.org.au>
[not found] ` <20080418032427.GE18071@gondor.apana.org.au>
2008-04-21 19:06 ` [6/6] [VIRTIO] net: Allow receiving SG packets Rusty Russell
2008-04-21 20:04 ` David Miller
2008-04-22 1:13 ` Herbert Xu
2008-04-22 2:50 ` Rusty Russell
2008-04-22 2:55 ` David Miller
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).