From nobody Mon Jul 27 00:10:38 2026 X-Original-To: dev-commits-src-all@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 4h7fBR4hTlz6m9BY for ; Mon, 27 Jul 2026 00:10:39 +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 4h7fBQ2d3pz43cR for ; Mon, 27 Jul 2026 00:10:38 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785111038; 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=sHrMD/Y8XE6oo9o91PlEj7NOTife8jqNPx+vT4M3QkA=; b=yKhP1p79PwcuG45nta+YtjimgqprBJIIr8Ga6JmcFg4y400VjUhcnG8tLgLoULe5lm8CwD lh2wWyVMYHkbn/G2Ji0wu1K8BW8bKbgfxm4q/HnWZsaqJrhukRiNWZMBm+Tv4l3VmnBE0Y CQbRMDI9oGo0fBfF7F1Z3eV4Cl0Xuwr1OfdNL5xiMxEoQ3X3TikL38bc3e+DHIuBTnvWt/ yxWMg/J6oaq+hwvez2bqgZpHYP//v2p/zPgpENDrqaaDTL3H9k4Om7RetByWXleteieDdb p92MgbQBvPSognmk1CzdpvXVDOcAEtaxCLdbK7vfiycxLzHgvwVNGcoMFV6Hqw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785111038; a=rsa-sha256; cv=none; b=oZGpHWZWWGbQwm2xjA0A93LVPiZLF3aTcokvYLCdPc0Zk46MzvB4TMTUkyJIGEA0w5Zo5d eeHwjuR2xU+RmONlVbZHRcM0iBGT5ukSwUBl6zp1vWypZdB9/Qnqd8Kh9HQ1mXY7ba6khb YHb65W6qIuifmkxjzLLiTEDBGFtVJbvC6EBUC9xEnfH1vYm1VXYCXgHfG7ZLrs8aqooseq q13joy1yO96CDWLPiOYf25rPTdWuqPCSU71S6lExShUHk/bD6U1eWLNxUlZ9h8wXuY9F3H YsFe+qaLOseQWya9ie6ghnP/yVDlIgKRTYbTqGEFuLNcQVhBmNq7GKOhU68Ssw== 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=1785111038; 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=sHrMD/Y8XE6oo9o91PlEj7NOTife8jqNPx+vT4M3QkA=; b=elyX8UQuN1irGuxxXZ4AjIuoFYHGE+STNXFbhBZcRCoJ6T6b6xfUtX3BOfhnsxkuRW/Hwy B66xgmSO/S0EZHjT8mOhtYz0OdSapNSGWFoKVW/y4lmEajbIKXiSbfrEsbSZDwwhXluMi+ 7z9e0hiPZaNfuYYEA7HKaV9Gh+Pa8Sr5vRqEuwfIQu1YnBqXZKbBuh7GT69ceXnTJ6Z/rN 9Un1ZHHXIp14zq2Io1pQfmr2d6maJSEZ3WhbzEhT2jUkmFbHDu+sCet5gCll7b75cWWJoA prhKc+YNy7X8jVQINracvD6zYVbkH3rlfJcSFMf5bPw9NjZBAUIo4onmKL19XA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h7fBQ1N9lzl1C for ; Mon, 27 Jul 2026 00:10:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 26e35 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 27 Jul 2026 00:10:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Bjoern A. Zeeb Subject: git: 4352733e6398 - stable/15 - LinuxKPI: skbuff: implement __skb_linearize() List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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/stable/15 X-Git-Reftype: branch X-Git-Commit: 4352733e639897d271e4246fe8f6203ac9c05ab0 Auto-Submitted: auto-generated Date: Mon, 27 Jul 2026 00:10:38 +0000 Message-Id: <6a66a1fe.26e35.8efd35a@gitrepo.freebsd.org> The branch stable/15 has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=4352733e639897d271e4246fe8f6203ac9c05ab0 commit 4352733e639897d271e4246fe8f6203ac9c05ab0 Author: Bjoern A. Zeeb AuthorDate: 2026-02-03 22:13:24 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-07-26 16:48:13 +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 (cherry picked from commit 9de11cc26ab61d7f80e8af84dbc55d8cbd6f832d) --- 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) {