RE: [PATCH v12 06/17] Use callback to deal with skb_release_data() specially.

2010-10-11 Thread Xin, Xiaohui
-Original Message-
From: David Miller [mailto:da...@davemloft.net]
Sent: Friday, October 01, 2010 3:15 PM
To: Xin, Xiaohui
Cc: net...@vger.kernel.org; kvm@vger.kernel.org; linux-ker...@vger.kernel.org;
m...@redhat.com; mi...@elte.hu; herb...@gondor.apana.org.au; 
jd...@linux.intel.com
Subject: Re: [PATCH v12 06/17] Use callback to deal with skb_release_data() 
specially.

From: xiaohui@intel.com
Date: Thu, 30 Sep 2010 22:04:23 +0800

 @@ -197,10 +197,11 @@ struct skb_shared_info {
  union skb_shared_tx tx_flags;
  struct sk_buff  *frag_list;
  struct skb_shared_hwtstamps hwtstamps;
 -skb_frag_t  frags[MAX_SKB_FRAGS];
  /* Intermediate layers must ensure that destructor_arg
   * remains valid until skb destructor */
  void *  destructor_arg;
 +
 +skb_frag_t  frags[MAX_SKB_FRAGS];
  };

  /* The structure is for a skb which pages may point to

Why are you moving frags[] to the end like this?

That's to avoid the new cache miss caused by using destructor_arg in data path
like skb_release_data().
That's based on the comment from Eric Dumazet on v7 patches.

Thanks
Xiaohui
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v12 06/17] Use callback to deal with skb_release_data() specially.

2010-10-11 Thread David Miller
From: Xin, Xiaohui xiaohui@intel.com
Date: Mon, 11 Oct 2010 15:06:05 +0800

 That's to avoid the new cache miss caused by using destructor_arg in data path
 like skb_release_data().
 That's based on the comment from Eric Dumazet on v7 patches.

Thanks for the explanation.
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v12 06/17] Use callback to deal with skb_release_data() specially.

2010-10-11 Thread Eric Dumazet
Le lundi 11 octobre 2010 à 08:27 -0700, David Miller a écrit :
 From: Xin, Xiaohui xiaohui@intel.com
 Date: Mon, 11 Oct 2010 15:06:05 +0800
 
  That's to avoid the new cache miss caused by using destructor_arg in data 
  path
  like skb_release_data().
  That's based on the comment from Eric Dumazet on v7 patches.
 
 Thanks for the explanation.

Anyway, frags[] must be the last field of struct skb_shared_info
since commit fed66381 (net: pskb_expand_head() optimization)

It seems Xin worked on a quite old tree.



--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH v12 06/17] Use callback to deal with skb_release_data() specially.

2010-10-11 Thread Xin, Xiaohui
-Original Message-
From: Eric Dumazet [mailto:eric.duma...@gmail.com]
Sent: Monday, October 11, 2010 11:42 PM
To: David Miller
Cc: Xin, Xiaohui; net...@vger.kernel.org; kvm@vger.kernel.org;
linux-ker...@vger.kernel.org; m...@redhat.com; mi...@elte.hu;
herb...@gondor.apana.org.au; jd...@linux.intel.com
Subject: Re: [PATCH v12 06/17] Use callback to deal with skb_release_data() 
specially.

Le lundi 11 octobre 2010 à 08:27 -0700, David Miller a écrit :
 From: Xin, Xiaohui xiaohui@intel.com
 Date: Mon, 11 Oct 2010 15:06:05 +0800

  That's to avoid the new cache miss caused by using destructor_arg in data 
  path
  like skb_release_data().
  That's based on the comment from Eric Dumazet on v7 patches.

 Thanks for the explanation.

Anyway, frags[] must be the last field of struct skb_shared_info
since commit fed66381 (net: pskb_expand_head() optimization)

It seems Xin worked on a quite old tree.


I will rebase soon.

Thanks
Xiaohui
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v12 06/17] Use callback to deal with skb_release_data() specially.

2010-10-01 Thread David Miller
From: xiaohui@intel.com
Date: Thu, 30 Sep 2010 22:04:23 +0800

 @@ -197,10 +197,11 @@ struct skb_shared_info {
   union skb_shared_tx tx_flags;
   struct sk_buff  *frag_list;
   struct skb_shared_hwtstamps hwtstamps;
 - skb_frag_t  frags[MAX_SKB_FRAGS];
   /* Intermediate layers must ensure that destructor_arg
* remains valid until skb destructor */
   void *  destructor_arg;
 +
 + skb_frag_t  frags[MAX_SKB_FRAGS];
  };
  
  /* The structure is for a skb which pages may point to

Why are you moving frags[] to the end like this?
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v12 06/17] Use callback to deal with skb_release_data() specially.

2010-09-30 Thread xiaohui . xin
From: Xin Xiaohui xiaohui@intel.com

If buffer is external, then use the callback to destruct
buffers.

Signed-off-by: Xin Xiaohui xiaohui@intel.com
Signed-off-by: Zhao Yu yzhao81...@gmail.com
Reviewed-by: Jeff Dike jd...@linux.intel.com
---
 include/linux/skbuff.h |3 ++-
 net/core/skbuff.c  |8 
 2 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 74af06c..ab29675 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -197,10 +197,11 @@ struct skb_shared_info {
union skb_shared_tx tx_flags;
struct sk_buff  *frag_list;
struct skb_shared_hwtstamps hwtstamps;
-   skb_frag_t  frags[MAX_SKB_FRAGS];
/* Intermediate layers must ensure that destructor_arg
 * remains valid until skb destructor */
void *  destructor_arg;
+
+   skb_frag_t  frags[MAX_SKB_FRAGS];
 };
 
 /* The structure is for a skb which pages may point to
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 93c4e06..117d82b 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -217,6 +217,7 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t 
gfp_mask,
shinfo-gso_type = 0;
shinfo-ip6_frag_id = 0;
shinfo-tx_flags.flags = 0;
+   shinfo-destructor_arg = NULL;
skb_frag_list_init(skb);
memset(shinfo-hwtstamps, 0, sizeof(shinfo-hwtstamps));
 
@@ -350,6 +351,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

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html