Thread (17 messages) flat view 17 messages, 4 authors, 2012-08-22

Re: [PATCH 02/11] net: add function to allocate skbuff head without data area

From: Patrick McHardy <hidden>
Date: 2012-08-20 06:41:42
Also in: netfilter-devel

On Mon, 20 Aug 2012, Eric Dumazet wrote:
On Mon, 2012-08-20 at 08:18 +0200, Patrick McHardy wrote:
quoted
Add a function to allocate a skbuff head without any data. This will be
used by memory mapped netlink to attached data from the mmaped area to
the skb.

Additionally change skb_release_all() to check whether the skb has a
data area to allow the skb destructor to clear the data pointer in
case only a head has been allocated.
     * ...
quoted
+struct sk_buff *__alloc_skb_head(gfp_t gfp_mask, int node)
+{
+	struct sk_buff *skb;
+
+	/* Get the HEAD */
+	skb = kmem_cache_alloc_node(skbuff_head_cache,
+				    gfp_mask & ~__GFP_DMA, node);
+	if (!skb)
+		goto out;
+	prefetchw(skb);
+
This prefetch is probably not worth it, since you write on skb on the
following memset(). Cpu wont have enough 'time' to take benefit from
this hint.
Right, I remember we talked about that before and I already removed it.
Must have forgotten to actually commit that change, thanks!
quoted
+	/*
+	 * Only clear those fields we need to clear, not those that we will
+	 * actually initialise below. Hence, don't put any more fields after
+	 * the tail pointer in struct sk_buff!
+	 */
+	memset(skb, 0, offsetof(struct sk_buff, tail));
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help