From: xiaohui.xin@intel.com
To: eric.dumazet@gmail.com, netdev@vger.kernel.org,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
mst@redhat.com, mingo@elte.hu, davem@davemloft.net,
herbert@gondor.apana.org.au, jdi
Cc: Xin Xiaohui <xiaohui.xin@intel.com>
Subject: Re:[PATCH v14 06/17] Use callback to deal with skb_release_data() specially.
Date: Mon, 8 Nov 2010 16:03:50 +0800 [thread overview]
Message-ID: <1289203430-5935-1-git-send-email-xiaohui.xin@intel.com> (raw)
In-Reply-To: <1288861663.2659.47.camel@edumazet-laptop>
From: Xin Xiaohui <xiaohui.xin@intel.com>
>> Hmm, I suggest you read the comment two lines above.
>>
>> If destructor_arg is now cleared each time we allocate a new skb, then,
>> please move it before dataref in shinfo structure, so that the following
>> memset() does the job efficiently...
>
>
>Something like :
>
>diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
>index e6ba898..2dca504 100644
>--- a/include/linux/skbuff.h
>+++ b/include/linux/skbuff.h
>@@ -195,6 +195,9 @@ struct skb_shared_info {
> __be32 ip6_frag_id;
> __u8 tx_flags;
> struct sk_buff *frag_list;
>+ /* Intermediate layers must ensure that destructor_arg
>+ * remains valid until skb destructor */
>+ void *destructor_arg;
> struct skb_shared_hwtstamps hwtstamps;
>
> /*
>@@ -202,9 +205,6 @@ struct skb_shared_info {
> */
> atomic_t dataref;
>
>- /* Intermediate layers must ensure that destructor_arg
>- * remains valid until skb destructor */
>- void * destructor_arg;
> /* must be last field, see pskb_expand_head() */
> skb_frag_t frags[MAX_SKB_FRAGS];
> };
>
>
Will that affect the cache line?
Or, we can move the line to clear destructor_arg to the end of __alloc_skb().
It looks like as the following, which one do you prefer?
Thanks
Xiaohui
---
net/core/skbuff.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index c83b421..df852f2 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -224,6 +224,7 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask,
child->fclone = SKB_FCLONE_UNAVAILABLE;
}
+ shinfo->destructor_arg = NULL;
out:
return skb;
nodata:
@@ -343,6 +344,13 @@ static void skb_release_data(struct sk_buff *skb)
if (skb_has_frags(skb))
skb_drop_fraglist(skb);
+ if (skb->dev && dev_is_mpassthru(skb->dev)) {
+ struct skb_ext_page *ext_page =
+ skb_shinfo(skb)->destructor_arg;
+ if (ext_page && ext_page->dtor)
+ ext_page->dtor(ext_page);
+ }
+
kfree(skb->head);
}
}
--
1.7.3
next prev parent reply other threads:[~2010-11-08 8:03 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-04 9:04 [PATCH v14 00/17] Provide a zero-copy method on KVM virtio-net xiaohui.xin
2010-11-04 9:04 ` [PATCH v14 01/17] Add a new structure for skb buffer from external xiaohui.xin
2010-11-04 9:04 ` [PATCH v14 02/17] Add a new struct for device to manipulate external buffer xiaohui.xin
2010-11-04 9:04 ` [PATCH v14 03/17] Add a ndo_mp_port_prep pointer to net_device_ops xiaohui.xin
2010-11-04 9:05 ` [PATCH v14 04/17] Add a function make external buffer owner to query capability xiaohui.xin
2010-11-04 9:05 ` [PATCH v14 05/17] Add a function to indicate if device use external buffer xiaohui.xin
2010-11-04 9:05 ` [PATCH v14 06/17] Use callback to deal with skb_release_data() specially xiaohui.xin
2010-11-04 9:04 ` Eric Dumazet
2010-11-04 9:07 ` Eric Dumazet
2010-11-08 8:03 ` xiaohui.xin [this message]
2010-11-08 8:24 ` Eric Dumazet
2010-11-08 8:39 ` Xin, Xiaohui
2010-11-04 9:05 ` [PATCH v14 07/17]Modify netdev_alloc_page() to get external buffer xiaohui.xin
2010-11-04 9:05 ` [PATCH v14 08/17] Modify netdev_free_page() to release " xiaohui.xin
2010-11-04 9:05 ` [PATCH v14 09/17] Don't do skb recycle, if device use " xiaohui.xin
2010-11-04 9:05 ` [PATCH v14 10/17] If device is in zero-copy mode first, bonding will fail xiaohui.xin
2010-11-04 9:05 ` [PATCH v14 11/17] Add a hook to intercept external buffers from NIC driver xiaohui.xin
2010-11-04 9:05 ` [PATCH v14 12/17] Add header file for mp device xiaohui.xin
2010-11-04 9:05 ` [PATCH v14 13/17] Add mp(mediate passthru) device xiaohui.xin
2010-11-04 9:05 ` [PATCH v14 14/17] Add a kconfig entry and make entry for mp device xiaohui.xin
2010-11-04 9:05 ` [PATCH v14 15/17]Provides multiple submits and asynchronous notifications xiaohui.xin
2010-11-04 9:05 ` [PATCH v14 16/17] An example how to modifiy NIC driver to use napi_gro_frags() interface xiaohui.xin
2010-11-04 9:05 ` [PATCH v14 17/17] An example how to alloc user buffer based on " xiaohui.xin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1289203430-5935-1-git-send-email-xiaohui.xin@intel.com \
--to=xiaohui.xin@intel.com \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=herbert@gondor.apana.org.au \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox