Received: by 2002:a05:7412:b995:b0:f9:9502:5bb8 with SMTP id it21csp692881rdb; Fri, 22 Dec 2023 02:03:37 -0800 (PST) X-Google-Smtp-Source: AGHT+IEdk1EWF0A9Tm5L4JWGhGkKvuRZ5f50mGcTBzBqbE0sdTez//go3yD6badmodRgRT6F7dQi X-Received: by 2002:a05:6a20:c4aa:b0:18f:97c:4f63 with SMTP id eo42-20020a056a20c4aa00b0018f097c4f63mr698247pzb.111.1703239417327; Fri, 22 Dec 2023 02:03:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703239417; cv=none; d=google.com; s=arc-20160816; b=eWZh9NiaM70QJ18WLIWz2oT50URKW1PxVZWCNppzDtZYjMtSueaYFyNEIqOa8RoF6E lP5DBF2dYO7BT+pMiMpbvYTMgQOlZvDsjJI+nWrF61BN0p1pBLg2AolF+DQSmVTBCKVU sJsPUgfOqqOTEI/M3/MVv5atp+D+WyX6NVFYBmB2rviJi1IoMsx0ebMcKxSEJhMXxWfL 4zyuHJL436GLhGCp9GbNTATHXn3xhsNIz0/il/+f4X/wtft1K6wMWJbFkyQ90bztY7w6 pBn6uWbMhxfWje8CWPdlXs0fhCXizz1pGSCQTZLSZvDfyJkdai+lZdBVAKLDGHQTVtgh SAFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :dkim-signature; bh=hkgottcbW0biH2WqzzRXAP2Rn3zpHHch8TcAnxjobH0=; fh=iCQ0/Oi40EYxggHd/EwHcafMeniamLkfgYwoeG9ukt8=; b=KZzVEQ0SkswesWK7u8aPNJ3Ztpr7W29nJBdf9vrIIZgSn0OOCzl1VtJXoxbAN1U5WA b1O8z2d7r3QKSw4exJZX+L3/gyscaZhIUpcPccUvUmPORgfaTyihOoD8wC8PFgz1ROKY kl/IzgId5fy2x7EF2KYCUZhDE8bWJyq6wy3+TzxkJPHFRGKK0HbUZNB7c7zUoiqiKbVA SfV9J1Qjd4E+/qAA4EhZ3Pzv++Ba99m7G1MPqahJvZmlMbMveL6zay3QUqDDuLlPeiaR 1Jw/776cQt64VSNaC+qsE2jkKeJl/MaRcjlgzFiRiOXNNqbWML9wdicKsYzq7QZRzApw kwcw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=N+HcTMi0; spf=pass (google.com: domain of linux-wireless+bounces-1217-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-wireless+bounces-1217-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id i22-20020a17090ad35600b0028b9ece36acsi6377547pjx.168.2023.12.22.02.03.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 02:03:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-wireless+bounces-1217-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=N+HcTMi0; spf=pass (google.com: domain of linux-wireless+bounces-1217-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-wireless+bounces-1217-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id F2D8F285D8F for ; Fri, 22 Dec 2023 10:03:36 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4589211704; Fri, 22 Dec 2023 10:03:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="N+HcTMi0" X-Original-To: linux-wireless@vger.kernel.org Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 88E4310A03 for ; Fri, 22 Dec 2023 10:03:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-553e36acfbaso10670a12.0 for ; Fri, 22 Dec 2023 02:03:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1703239384; x=1703844184; darn=vger.kernel.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=hkgottcbW0biH2WqzzRXAP2Rn3zpHHch8TcAnxjobH0=; b=N+HcTMi00BwYs2m3Rx54kZTexlg9GZrYVSPEtk0hq08d1zit8OApGXcA4RzeptJ2px ZdQXgeWoJqXlvJdaBficAdD4Lybufu0N3lpklFwIxdp/HN3zoMkTvTEnwxGu7+wX376P 6KTA+IjI30+KnmWrljaUom8PLiIwLBTiB0lVIvVuS1AZ9179HWAAjz5ywjM+5ADMjXsl /Rzceq36KVYzvK4pCSIeq+6XMCMe8EtYK0jNhbvWmzF9xPM8ym4uUfeQg2PNYfR8J6Mw oZ7eY6YDckqNZ9g9JU1bP+T44mvj30IwG4+wUXIHNQHO9K5IKeoM/0d0WfBCyIsvduz1 aYqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703239384; x=1703844184; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=hkgottcbW0biH2WqzzRXAP2Rn3zpHHch8TcAnxjobH0=; b=b2B+cvkw9eOIlSZ8dTTwARoY7/hggkkBQ5GWvX2b2sFrIq5Odg0aY0FqdY4Y3YcK5B i6Adx4XWxmfQPN7dCVDTQEkBtOW0NDjmTHkII6ySzWcejWQg9/6Vo8M09SrlXcMXsjAq 36GpBrQnTYLyopAbSkHdPaDi0JFj90O4aB0bzcphvV22Jkked9Twl9NUO2BM7o8e4jnb H/rs3CDCq3QBAzcEOx2nuWEgmxdPywNHUdhQ65wlOwHrxWZdvixcLXld3VMVwxKZIrZN MmztZv9XC/06fWy5CuM8pP4yjUpmz5dLCAPK9de1xJUnw/Y3iFUD9COXbT4UXptXaVYR 7xbw== X-Gm-Message-State: AOJu0YwT5vOO5aOsya1qO1YTgTN/Ld19EBloS5WQN+UISl9vrYERxSBU WBrvNtrwVJ+anesHf0ar/AhuturK7uWTzbQ3BM8FqpKogjaa X-Received: by 2002:a50:f611:0:b0:553:faf5:6841 with SMTP id c17-20020a50f611000000b00553faf56841mr69709edn.5.1703239383668; Fri, 22 Dec 2023 02:03:03 -0800 (PST) Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20231220151952.415232-1-benjamin@sipsolutions.net> <20231220151952.415232-3-benjamin@sipsolutions.net> In-Reply-To: <20231220151952.415232-3-benjamin@sipsolutions.net> From: David Gow Date: Fri, 22 Dec 2023 18:02:52 +0800 Message-ID: Subject: Re: [PATCH 2/6] kunit: add a convenience allocation wrapper for SKBs To: benjamin@sipsolutions.net Cc: linux-wireless@vger.kernel.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com, Benjamin Berg Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="00000000000074e5ad060d1652d9" --00000000000074e5ad060d1652d9 Content-Type: text/plain; charset="UTF-8" On Wed, 20 Dec 2023 at 23:20, wrote: > > From: Benjamin Berg > > 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 > --- 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 > 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 > +#include > + > +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. --00000000000074e5ad060d1652d9 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIIPnwYJKoZIhvcNAQcCoIIPkDCCD4wCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGg ggz5MIIEtjCCA56gAwIBAgIQeAMYYHb81ngUVR0WyMTzqzANBgkqhkiG9w0BAQsFADBMMSAwHgYD VQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UE AxMKR2xvYmFsU2lnbjAeFw0yMDA3MjgwMDAwMDBaFw0yOTAzMTgwMDAwMDBaMFQxCzAJBgNVBAYT AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSowKAYDVQQDEyFHbG9iYWxTaWduIEF0bGFz IFIzIFNNSU1FIENBIDIwMjAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvLe9xPU9W dpiHLAvX7kFnaFZPuJLey7LYaMO8P/xSngB9IN73mVc7YiLov12Fekdtn5kL8PjmDBEvTYmWsuQS 6VBo3vdlqqXZ0M9eMkjcKqijrmDRleudEoPDzTumwQ18VB/3I+vbN039HIaRQ5x+NHGiPHVfk6Rx c6KAbYceyeqqfuJEcq23vhTdium/Bf5hHqYUhuJwnBQ+dAUcFndUKMJrth6lHeoifkbw2bv81zxJ I9cvIy516+oUekqiSFGfzAqByv41OrgLV4fLGCDH3yRh1tj7EtV3l2TngqtrDLUs5R+sWIItPa/4 AJXB1Q3nGNl2tNjVpcSn0uJ7aFPbAgMBAAGjggGKMIIBhjAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0l BBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHzM CmjXouseLHIb0c1dlW+N+/JjMB8GA1UdIwQYMBaAFI/wS3+oLkUkrk1Q+mOai97i3Ru8MHsGCCsG AQUFBwEBBG8wbTAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AyLmdsb2JhbHNpZ24uY29tL3Jvb3Ry MzA7BggrBgEFBQcwAoYvaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLmNvbS9jYWNlcnQvcm9vdC1y My5jcnQwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9yb290LXIz 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 ddIn9n5Jt6Z1o79zxraLMEwGA1UdIARFMEMwQQYJKwYBBAGgMgEoMDQwMgYIKwYBBQUHAgEWJmh0 dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMAwGA1UdEwEB/wQCMAAwgZoGCCsG AQUFBwEBBIGNMIGKMD4GCCsGAQUFBzABhjJodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9jYS9n c2F0bGFzcjNzbWltZWNhMjAyMDBIBggrBgEFBQcwAoY8aHR0cDovL3NlY3VyZS5nbG9iYWxzaWdu LmNvbS9jYWNlcnQvZ3NhdGxhc3Izc21pbWVjYTIwMjAuY3J0MB8GA1UdIwQYMBaAFHzMCmjXouse LHIb0c1dlW+N+/JjMEYGA1UdHwQ/MD0wO6A5oDeGNWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20v Y2EvZ3NhdGxhc3Izc21pbWVjYTIwMjAuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQBtHFwIgQZjer5K H+4Q+wns10k7qN+4wN2Uf+JsyOYjukaMEgdLErfA1wwtQ9uHkoYQZcWBuVVkQFa5hI+sqI2m1Weq riMCFSiU38s1tADdMX12IMfJRN60Nznhrw+nPyDRZqRhUTW24TwnHorkDnFPW8PHo7fAw4FrpI0n impZAng7ccvvK09K3ZuhwTIxJMsPXCZYsrXWORTw5sczRAP6XvKbPBJnsJoSTe5dFBPBHOQJOGhU qWfEfWnWMJPF3LxSGLpLFQXO3RwQqmxv08avwXfVPouh1xuB3FX7rpDabT8YDhu9JgIZkLEKko7L yQt6zWwng7k8YF/jGbiAta6VMYICajCCAmYCAQEwaDBUMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQ R2xvYmFsU2lnbiBudi1zYTEqMCgGA1UEAxMhR2xvYmFsU2lnbiBBdGxhcyBSMyBTTUlNRSBDQSAy MDIwAhABzgV+4+mJnUzG7XDy6d2uMA0GCWCGSAFlAwQCAQUAoIHUMC8GCSqGSIb3DQEJBDEiBCDs KTglr7rY/5EJe/jxIAt6KmLDKr10cIMrm1uJX6u5UTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcB MBwGCSqGSIb3DQEJBTEPFw0yMzEyMjIxMDAzMDRaMGkGCSqGSIb3DQEJDzFcMFowCwYJYIZIAWUD BAEqMAsGCWCGSAFlAwQBFjALBglghkgBZQMEAQIwCgYIKoZIhvcNAwcwCwYJKoZIhvcNAQEKMAsG CSqGSIb3DQEBBzALBglghkgBZQMEAgEwDQYJKoZIhvcNAQEBBQAEggEATvXJAoV7u2mzzOhV4JS/ FStSwq+pYG6wrW01sqBcgdnpaRLYlFZPwTkIeHchzCgoiGDSzifx+Rulc6RllyaaUWU/xVeZAdhk fn2iHtWei/IPf/hFHIeEUTy0nQLBhQMOplAl6ED55emtw2ECX8s87m+RuJHvKgwjSFzhbx5ptwRa EatQsmM1XnhuJ2aVFwrU7VDiog3LUlh1+DFhrjA5pddHv5SE/4EwdVNmj7TddxVMPPcQ9B9sT7T7 TIhFDBH/hefkj77UbXqhq3+lWxtML00VfmBzEFMBUJZ4HTb0EpYiyWKBR/k+H1ke84sY0UAOQmbW f8WV8gSOFdQrbYOQhQ== --00000000000074e5ad060d1652d9--