Thread (1 message) 1 message, 1 author, 2011-05-16

Re: several packets in a single buffer in Rx

From: Ben Hutchings <hidden>
Date: 2011-05-16 20:15:12
Also in: netdev

On Mon, 2011-05-16 at 23:04 +0300, Tomas Winkler wrote:
2011/5/16 Emmanuel Grumbach [off-list ref]:
quoted
2011/5/16 Michał Mirosław [off-list ref]:
quoted
W dniu 16 maja 2011 14:59 użytkownik Emmanuel Grumbach
[off-list ref] napisał:
quoted
2011/5/16 Michał Mirosław [off-list ref]:
quoted
2011/5/16 Emmanuel Grumbach [off-list ref]:
quoted
I would like to be able to deliver the same page several times to the
stack without having the stack consume it before the last time I
deliver it.
Of course I would like to avoid cloning it.
Just do get_page() on the page having another packet in it before
passing skb up.
I can see the path:
__kfree_skb -> skb_release_all -> skb_release_data -> put_page
put_page will free the page iff the _count variable reaches 0. Of course,
_count is incremented by get_page.

I will give it try.

I understand that this will work regardless the order given to
alloc_pages right ?
Yes. Remember that if you put a lot of packets in a big-order page
then the memory will be freed only after all packets are freed.
Sure. Thanks for the help.
How it is ensured that skb manipulation won't corrupt another packet
on the same page?
Fragments attached to an skb are always treated as read-only.  The
headers will be copied into the skb's header buffer and may be modified
there.

Ben.

-- 
Ben Hutchings, Senior Software Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help