Message ID | 20231220151952.415232-3-benjamin@sipsolutions.net |
---|---|
State | New |
Headers | show |
Series | Add some more cfg80211 and mac80211 kunit tests | expand |
On Wed, 20 Dec 2023 at 23:20, <benjamin@sipsolutions.net> wrote: > > From: Benjamin Berg <benjamin.berg@intel.com> > > Add a simple convenience helper to allocate and zero fill an SKB for the > use by a kunit test. Also provide a way to free it again in case that > may be desirable. > > This simply mirrors the kunit_kmalloc API. > > Signed-off-by: Benjamin Berg <benjamin.berg@intel.com> > --- I'm happy with this as-is, but do think there's a discussion to be had about where subsystem-specific KUnit helpers should live. I think, because this is just a header (and it mirrors the normal linux/skbuff.h), that having it in include/kunit works well. If it needed a source file, I'm not 100% sure whether it should be in net/core/ or lib/kunit. Regardless, this looks good to me, modulo the small nitpick below. Reviewed-by: David Gow <davidgow@google.com> > include/kunit/skbuff.h | 56 ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 56 insertions(+) > create mode 100644 include/kunit/skbuff.h > > diff --git a/include/kunit/skbuff.h b/include/kunit/skbuff.h > new file mode 100644 > index 000000000000..2144d01e556f > --- /dev/null > +++ b/include/kunit/skbuff.h > @@ -0,0 +1,56 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +/* > + * Base unit test (KUnit) API. This probably needs a better description which mentions skbuff, and that it's for resource management. > + * > + * Copyright (C) 2023 Intel Corporation > + */ > + > +#ifndef _KUNIT_SKBUFF_H > +#define _KUNIT_SKBUFF_H > + > +#include <kunit/resource.h> > +#include <linux/skbuff.h> > + > +static void kunit_action_kfree_skb(void *p) > +{ > + kfree_skb((struct sk_buff *)p); > +} > + > +/** > + * kunit_zalloc_skb() - Allocate and initialize a resource managed skb. > + * @test: The test case to which the skb belongs > + * @len: size to allocate > + * > + * Allocate a new struct sk_buff with GFP_KERNEL, zero fill the give length > + * and add it as a resource to the kunit test for automatic cleanup. > + * > + * Returns: newly allocated SKB, or %NULL on error > + */ > +static inline struct sk_buff *kunit_zalloc_skb(struct kunit *test, int len, > + gfp_t gfp) > +{ > + struct sk_buff *res = alloc_skb(len, GFP_KERNEL); > + > + if (!res || skb_pad(res, len)) > + return NULL; > + > + if (kunit_add_action_or_reset(test, kunit_action_kfree_skb, res)) > + return NULL; > + > + return res; > +} > + > +/** > + * kunit_kfree_skb() - Like kfree_skb except for allocations managed by KUnit. > + * @test: The test case to which the resource belongs. > + * @skb: The SKB to free. > + */ > +static inline void kunit_kfree_skb(struct kunit *test, struct sk_buff *skb) > +{ > + if (!skb) > + return; > + > + kunit_release_action(test, kunit_action_kfree_skb, (void *)skb); > +} > + > +#endif /* _KUNIT_SKBUFF_H */ > -- > 2.43.0 > > -- > You received this message because you are subscribed to the Google Groups "KUnit Development" group. > To unsubscribe from this group and stop receiving emails from it, send an email to kunit-dev+unsubscribe@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/msgid/kunit-dev/20231220151952.415232-3-benjamin%40sipsolutions.net.
diff --git a/include/kunit/skbuff.h b/include/kunit/skbuff.h new file mode 100644 index 000000000000..2144d01e556f --- /dev/null +++ b/include/kunit/skbuff.h @@ -0,0 +1,56 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Base unit test (KUnit) API. + * + * Copyright (C) 2023 Intel Corporation + */ + +#ifndef _KUNIT_SKBUFF_H +#define _KUNIT_SKBUFF_H + +#include <kunit/resource.h> +#include <linux/skbuff.h> + +static void kunit_action_kfree_skb(void *p) +{ + kfree_skb((struct sk_buff *)p); +} + +/** + * kunit_zalloc_skb() - Allocate and initialize a resource managed skb. + * @test: The test case to which the skb belongs + * @len: size to allocate + * + * Allocate a new struct sk_buff with GFP_KERNEL, zero fill the give length + * and add it as a resource to the kunit test for automatic cleanup. + * + * Returns: newly allocated SKB, or %NULL on error + */ +static inline struct sk_buff *kunit_zalloc_skb(struct kunit *test, int len, + gfp_t gfp) +{ + struct sk_buff *res = alloc_skb(len, GFP_KERNEL); + + if (!res || skb_pad(res, len)) + return NULL; + + if (kunit_add_action_or_reset(test, kunit_action_kfree_skb, res)) + return NULL; + + return res; +} + +/** + * kunit_kfree_skb() - Like kfree_skb except for allocations managed by KUnit. + * @test: The test case to which the resource belongs. + * @skb: The SKB to free. + */ +static inline void kunit_kfree_skb(struct kunit *test, struct sk_buff *skb) +{ + if (!skb) + return; + + kunit_release_action(test, kunit_action_kfree_skb, (void *)skb); +} + +#endif /* _KUNIT_SKBUFF_H */