OSDN Git Service

net: Add device Rx page allocation function
authorAlexander Duyck <alexander.h.duyck@redhat.com>
Tue, 11 Nov 2014 17:26:34 +0000 (09:26 -0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 12 Nov 2014 05:00:13 +0000 (00:00 -0500)
commit71dfda58aaaf4bf6b1bc59f9d8afa635fa1337d4
treefd74fc18415b7269e1a1f0f078bc77093c40e74a
parent6c91023dc35c88d5e6aebe4bfe6f1ed5ec2b84be
net: Add device Rx page allocation function

This patch implements __dev_alloc_pages and __dev_alloc_page.  These are
meant to replace the __skb_alloc_pages and __skb_alloc_page functions.  The
reason for doing this is that it occurred to me that __skb_alloc_page is
supposed to be passed an sk_buff pointer, but it is NULL in all cases where
it is used.  Worse is that in the case of ixgbe it is passed NULL via the
sk_buff pointer in the rx_buffer info structure which means the compiler is
not correctly stripping it out.

The naming for these functions is based on dev_alloc_skb and __dev_alloc_skb.
There was originally a netdev_alloc_page, however that was passed a
net_device pointer and this function is not so I thought it best to follow
that naming scheme since that is the same difference between dev_alloc_skb
and netdev_alloc_skb.

In the case of anything greater than order 0 it is assumed that we want a
compound page so __GFP_COMP is set for all allocations as we expect a
compound page when assigning a page frag.

The other change in this patch is to exploit the behaviors of the page
allocator in how it handles flags.  So for example we can always set
__GFP_COMP and __GFP_MEMALLOC since they are ignored if they are not
applicable or are overridden by another flag.

Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/skbuff.h