Re: [PATCH net-next V2] tun: introduce tx skb ring

From: Jason Wang
Date: Wed Jun 29 2016 - 21:51:16 EST




On 2016å06æ28æ 15:09, Michael S. Tsirkin wrote:
On Thu, Jun 23, 2016 at 01:14:07PM +0800, Jason Wang wrote:

On 2016å06æ23æ 02:18, Michael S. Tsirkin wrote:
On Fri, Jun 17, 2016 at 03:41:20AM +0300, Michael S. Tsirkin wrote:
Would it help to have ptr_ring_resize that gets an array of
rings and resizes them both to same length?
OK, here it is. Untested so far, and no skb wrapper.
Pls let me know whether this is what you had in mind.
Exactly what I want.

Thanks
Ok and this for skb_array

-->
skb_array: add wrappers for resizing

Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx>

--

diff --git a/include/linux/skb_array.h b/include/linux/skb_array.h
index c900708..7e01c1f 100644
--- a/include/linux/skb_array.h
+++ b/include/linux/skb_array.h
@@ -151,16 +151,24 @@ static inline int skb_array_init(struct skb_array *a, int size, gfp_t gfp)
return ptr_ring_init(&a->ring, size, 0, gfp);
}
-void __skb_array_destroy_skb(void *ptr)
+static void __skb_array_destroy_skb(void *ptr)
{
kfree_skb(ptr);
}
-int skb_array_resize(struct skb_array *a, int size, gfp_t gfp)
+static inline int skb_array_resize(struct skb_array *a, int size, gfp_t gfp)
{
return ptr_ring_resize(&a->ring, size, gfp, __skb_array_destroy_skb);
}

Will split up the above tweak into another patch when reposting.

+static inline int skb_raay_resize_multiple(struct skb_array **rings, int nrings,

I think you mean 'skb_array_resize' here.

+ int size, gfp_t gfp)
+{
+ BUILD_BUG_ON(offsetof(struct skb_array, ring));
+ ptr_ring_resize_multiple((struct ptr_ring **)rings, nrings, size, gfp,
+ __skb_array_destroy_skb);

This should be return ptr_ring_resize_multiple(...

+}
+
static inline void skb_array_cleanup(struct skb_array *a)
{
ptr_ring_cleanup(&a->ring, __skb_array_destroy_skb);

With this, looks like there's no need for a new flag. Will repost the series with those two patches.

Thanks