From nobody Fri Jul 17 15:49:24 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4h1vVF4Mdcz6l4jS for ; Fri, 17 Jul 2026 15:49:25 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h1vVD6QBdz3qkv for ; Fri, 17 Jul 2026 15:49:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784303364; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Ao2e2XH1IvKuYdIdqjK7f8bxREo/EI1+q/phMLdGa84=; b=JQpJtktGJ3b1HNCpRHRInbjiqb78KFbg+N3CUPqqbexNBZ8bNODxvShz8mbGQGnTU0jW8H OkjEdc3zlQxmzCnzX0YiMkeh/+28kQf8xda5AVrOGkHsHG1CnO/zVqNuYsgK/cYYgJbJpN FbYxRfoPiIDk5i3a7ZvTefxJjnozA2onhiEx4sxM9DLzP7QLSjiqNO0nU1OQJn0whsEIiL UpXhw0e14qZsVWbuEH4KOZdGNAu52Hdg6+2sQCOPlt+CJ9vli6qZ5yUIel3qw5rzOMSBpS kZLw5jCDgAoUF6Av9E9R3c6/Hmzm1gLBi9lrqkAkrwsCstOkTEp0zB6aMhdX2Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784303365; a=rsa-sha256; cv=none; b=tniT5/S1cCkYgQih6PxCNB3f+QIWq3mPpHjkV4swucK+XIbbBIB5W8Ur8cASp5MFcBJu9E mRd9qLNTPRa/XRPVgp7RE94M7Zf6blDqdUEWF79PBRyHlzoFRjsIM3DVgvSm9O4jFifl/o /7dC0VPbFbZuvh2DiA9dBwv+RwfQ0RiEbMsg3Y9+QcmPCkWUGaMFWVnkHuvq3GYrj6OKPg HTJqyFECPYf3hhH1PHLxa7e4LHgCHBhvs1AH+PzIiTJoOu4C7SuqT7ZFGOKeQ6nRx0xBbe gRmVZNlOesq3d+RHlWORs50uFI/ekukltqP9RPzY3meUYtWgqVL8fzVmbptcJA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784303364; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Ao2e2XH1IvKuYdIdqjK7f8bxREo/EI1+q/phMLdGa84=; b=OB1ZYpZhVjhcFGlZlGcya4EI1+CVxYB6m/VQOulkLBDuRr5D7YrQ45hY/eoJnEewLsTE24 uv9evyqd/O16qZV8uWlcaVU+62yaIdwAirLEgheiN/tEKSwF1vWGGxMSNWnpsbJ0zokomm rktpio6BMLxumliKxyF6SYp5uDV3C3sOcRcH/Sf4nhzEpaq8lhzcb0ldkhMpquI/PmPoxp BpTNWcRPpO0vuenr38XqeF1F21GJGulza8sjcmfV9uSZq0rWCskYwmyqcRGzzat1EP3aoo qDzHnaYmRTj3gA/sVDjtBZFI+CRbaz1WhpqqmRlLWC1GacKNPMej2HmGuNJNQg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h1vVD5RHSztlc for ; Fri, 17 Jul 2026 15:49:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 2034c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 17 Jul 2026 15:49:24 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bjoern A. Zeeb Subject: git: 9de11cc26ab6 - main - LinuxKPI: skbuff: implement __skb_linearize() List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 9de11cc26ab61d7f80e8af84dbc55d8cbd6f832d Auto-Submitted: auto-generated Date: Fri, 17 Jul 2026 15:49:24 +0000 Message-Id: <6a5a4f04.2034c.6d8f23c2@gitrepo.freebsd.org> The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=9de11cc26ab61d7f80e8af84dbc55d8cbd6f832d commit 9de11cc26ab61d7f80e8af84dbc55d8cbd6f832d Author: Bjoern A. Zeeb AuthorDate: 2026-02-03 22:13:24 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-07-17 15:48:53 +0000 LinuxKPI: skbuff: implement __skb_linearize() skb_linearize() is used by mt7921, mt7925, and in the general mt76 tx dma code. __skb_linearize() is used in the general iwlwifi TX code but given the way we currently create TX skbs in LinuxKPI 802.11 we never hit that case. Sponsored by: The FreeBSD Foundation MFC after: 3 days --- sys/compat/linuxkpi/common/include/linux/skbuff.h | 6 +-- sys/compat/linuxkpi/common/src/linux_skbuff.c | 60 +++++++++++++++++++++++ 2 files changed, 63 insertions(+), 3 deletions(-) diff --git a/sys/compat/linuxkpi/common/include/linux/skbuff.h b/sys/compat/linuxkpi/common/include/linux/skbuff.h index a0724803e732..9434655fc9f4 100644 --- a/sys/compat/linuxkpi/common/include/linux/skbuff.h +++ b/sys/compat/linuxkpi/common/include/linux/skbuff.h @@ -209,6 +209,8 @@ void linuxkpi_kfree_skb(struct sk_buff *); struct sk_buff *linuxkpi_skb_copy(const struct sk_buff *, gfp_t); +int lkpi___skb_linearize(struct sk_buff *); + /* -------------------------------------------------------------------------- */ static inline struct sk_buff * @@ -978,9 +980,7 @@ skb_network_header(struct sk_buff *skb) static inline int __skb_linearize(struct sk_buff *skb) { - SKB_TRACE(skb); - SKB_TODO(); - return (-ENXIO); + return (lkpi___skb_linearize(skb)); } static inline int diff --git a/sys/compat/linuxkpi/common/src/linux_skbuff.c b/sys/compat/linuxkpi/common/src/linux_skbuff.c index abfb642ba708..a2aa601d594e 100644 --- a/sys/compat/linuxkpi/common/src/linux_skbuff.c +++ b/sys/compat/linuxkpi/common/src/linux_skbuff.c @@ -222,6 +222,66 @@ linuxkpi_skb_copy(const struct sk_buff *skb, gfp_t gfp) return (new); } +int +lkpi___skb_linearize(struct sk_buff *skb) +{ + struct sk_buff *new; + struct skb_shared_info *shinfo; + uint16_t fragno, count; + + SKB_TRACE(skb); + SKB_IMPROVE("Hack completely re-allocating and freeing; FIXME"); + new = skb_copy(skb, GFP_NOWAIT); + if (new == NULL) + return (-ENOMEM); + + /* Now need to swap head, data, tail, ... and free from old (and then new). */ + shinfo = skb->shinfo; + for (count = fragno = 0; + count < shinfo->nr_frags && fragno < nitems(shinfo->frags); + fragno++) { + + if (shinfo->frags[fragno].page != NULL) { + struct page *p; + + p = shinfo->frags[fragno].page; + shinfo->frags[fragno].size = 0; + shinfo->frags[fragno].offset = 0; + shinfo->frags[fragno].page = NULL; + __free_page(p); + count++; + } + } + + if ((skb->_flags & _SKB_FLAGS_SKBEXTFRAG) != 0) { + void *p; + + p = skb->head; + skb_free_frag(p); + skb->head = NULL; + skb->_flags &= ~_SKB_FLAGS_SKBEXTFRAG; + } + +#ifdef SKB_DMA32_MALLOC + if (__predict_false(linuxkpi_skb_memlimit != 0)) + free(skb->head, M_LKPISKB); + else +#endif + kfree(skb->head); + + skb->head = new->head; + skb->data = new->data; + skb->tail = new->tail; + skb->end = new->end; + skb->len = new->len; + skb->data_len = new->data_len; + skb->truesize = new->truesize; + + uma_zfree(skbzone, new); + + return (0); +} + void linuxkpi_kfree_skb(struct sk_buff *skb) {