Return-path: Received: from mail-qy0-f181.google.com ([209.85.216.181]:40751 "EHLO mail-qy0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752427Ab1EPUEz convert rfc822-to-8bit (ORCPT ); Mon, 16 May 2011 16:04:55 -0400 MIME-Version: 1.0 In-Reply-To: References: Date: Mon, 16 May 2011 23:04:54 +0300 Message-ID: (sfid-20110516_220504_598521_9CE58F7D) Subject: Re: several packets in a single buffer in Rx From: Tomas Winkler To: Emmanuel Grumbach Cc: =?UTF-8?B?TWljaGHFgiBNaXJvc8WCYXc=?= , netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Johannes Berg , "Guy, Wey-Yi" , guy.cohen@intel.com Content-Type: text/plain; charset=UTF-8 Sender: linux-wireless-owner@vger.kernel.org List-ID: 2011/5/16 Emmanuel Grumbach : > 2011/5/16 Michał Mirosław : >> W dniu 16 maja 2011 14:59 użytkownik Emmanuel Grumbach >> napisał: >>> 2011/5/16 Michał Mirosław : >>>> 2011/5/16 Emmanuel Grumbach : >>>>> 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? Thanks Tomas