On Tue, 2009-09-15 at 17:15 +0800, Zhu Yi wrote: > On Tue, 2009-09-15 at 17:09 +0800, David Miller wrote: > > From: Zhu Yi > > Date: Tue, 15 Sep 2009 16:57:29 +0800 > > > > > Thanks. So we can put the 8K buffer into 2 skb_shinfo()->frags[] slots > > > and set nr_frags to 2, right? Is this supported allover the network code > > > already? At a first glance, I didn't find any frags handling in mac80211 > > > stack. > > > > You have to pre-pull the link level protocol headers into the > > linear area, but that's it. > > > > Again, see niu.c for details, it does: > > > > static void niu_rx_skb_append(struct sk_buff *skb, struct page *page, > > u32 offset, u32 size) > > { > > int i = skb_shinfo(skb)->nr_frags; > > skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; > > > > frag->page = page; > > frag->page_offset = offset; > > frag->size = size; > > > > skb->len += size; > > skb->data_len += size; > > skb->truesize += size; > > > > skb_shinfo(skb)->nr_frags = i + 1; > > } > > > > to add pages to SKBs and then at the end it goes: > > > > skb_reserve(skb, NET_IP_ALIGN); > > __pskb_pull_tail(skb, min(len, NIU_RXPULL_MAX)); > > > > Right before giving the SKB to the networking stack. NIU_RXPULL_MAX > > should be a value that will be large enough to cover the largest > > possible link level header. > > I see. Thanks for this info. I'll try implementing the same for iwlagn. Hold, mac80211 can't cope with that at this point for sw crypto and possibly other things. johannes