From nobody Sun Apr 26 09:46:16 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 4g3MKB1BSlz6bNtV for ; Sun, 26 Apr 2026 09:46:22 +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 "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4g3MK93KN4z3C0n for ; Sun, 26 Apr 2026 09:46:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777196781; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=6b0AfNEVkcHQ+naz4T/8Rz9ZNCc6o1QrGi9au+gvDOU=; b=wNUw61ctpiu0CaigwsC/OimlUx0ZUyn6lMrlAzQwnTaA96/b0eINVPldMV3NPq9Nt+A9jH +4itL1iCWbwf/IRk0Z/OlBjUwonpRI9Z3RymKWY8MDwF+wCPb26Q9Xcr9qpyzgIRcCvIa8 YhqB7rCzmSLNhd2Kh1V62W0SRGNo7Y/5k2XAZSPmYyTt0wEZ4EM5Ld2jz1HydrBta/psEI jZp3PhP53v2LY0VQTVY/ZvzxED7ZYwUmpXyJiOC3iXsBNUErGcQgmBr54uJTzg9BIs/FVk DJP+HCPUBlJ2cfRZ/bgjitSLM7QHrss67mP1t4m5nH4l/P8uETMLXnIJCEjD0g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1777196781; a=rsa-sha256; cv=none; b=pF/vT9vB8zqzHXRJRe1Azq2ML+atspIeikoo9Md+NQZtu0i1NJXj2Wf6cPvPOlCRliy+0S LleAziZHDOLwEJrbV3pqMrLdLSDunQzGuLRLKMIDEKB6eUc6TZYo24GdWPdc5JKxDXx/wz o7prTJnKWLjasSgFNZ5y4cZvO45syetOWou6hGWCqnihltPXFDw3F0gGzvBxLJwrMxVYDb oHeL5jj4VYsdXrdC8PGhM5lmp5jdn4TA+hMuw7daajonJm4Cm5FTfTYoU4yItJVoaWvN62 kWgvV98MathZIXzlFi2VYLCvsa2ILOgmDwZ6PiAZxo6AauxHp3FO1HIyH8fGnw== 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=1777196781; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=6b0AfNEVkcHQ+naz4T/8Rz9ZNCc6o1QrGi9au+gvDOU=; b=rT0911AawB66e6xnaILdqHGw2mJc4GpBLGGyzMIGtmKLt6O+OUBuUI8/W9L36Jo7YVReNW gc7aw5uI9KL1npFJ7IQeT3qak40uGe4oSlkUkD20G/ZHwGG/wXLSY3xSagTx4cdcxgqlT8 OarD/UP8f55Vwc5cD3SxERM7vHLyQ+DshPaLIp+O4RT9CjshUeBv0H1awUv7ImxeoexmbU b1FXHlMTJhzGD8nSVk8Lp4CEJX8y7bi8ZQ7xopM4xfPnnvdEBXd4Kjz+91K7mwghzJ7rSc 99AyFvyebTUaXpe9dwRSEk7017nqZc9hnNuuIYhi+SBM7PwuszxPW4lvjo/xbQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g3MK92wK0zKD for ; Sun, 26 Apr 2026 09:46:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 39be1 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Apr 2026 09:46:16 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Timo =?utf-8?Q?V=C3=B6lker?= From: Michael Tuexen Subject: git: 1bfd392b9e4d - main - vtnet: remove loader tunable fixup_needs_csum 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: tuexen X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 1bfd392b9e4dcddef3d80efaa517fafa648cd0b1 Auto-Submitted: auto-generated Date: Sun, 26 Apr 2026 09:46:16 +0000 Message-Id: <69eddee8.39be1.56e9b6db@gitrepo.freebsd.org> The branch main has been updated by tuexen: URL: https://cgit.FreeBSD.org/src/commit/?id=1bfd392b9e4dcddef3d80efaa517fafa648cd0b1 commit 1bfd392b9e4dcddef3d80efaa517fafa648cd0b1 Author: Timo Völker AuthorDate: 2026-04-26 09:42:38 +0000 Commit: Michael Tuexen CommitDate: 2026-04-26 09:42:38 +0000 vtnet: remove loader tunable fixup_needs_csum Removes the deprecated loader tunable fixup_needs_csum. Removes also the sysctl counter rx_csum_bad_offset that is no longer in use. Reviewed by: tuexen Event: Wiesbaden Hackathon 2026 Differential Revision: https://reviews.freebsd.org/D55588 --- share/man/man4/vtnet.4 | 24 +----------- sys/arm/allwinner/if_awg.c | 14 +++---- sys/dev/virtio/network/if_vtnet.c | 78 ++++++--------------------------------- 3 files changed, 21 insertions(+), 95 deletions(-) diff --git a/share/man/man4/vtnet.4 b/share/man/man4/vtnet.4 index 926f504d8070..fad0257a2b10 100644 --- a/share/man/man4/vtnet.4 +++ b/share/man/man4/vtnet.4 @@ -22,7 +22,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd December 19, 2025 +.Dd April 26, 2026 .Dt VTNET 4 .Os .Sh NAME @@ -87,19 +87,6 @@ UDP. This also implies that TCP segmentation offloading and large receive offload are disabled. The default value is 0. -.It Va hw.vtnet.fixup_needs_csum -.It Va hw.vtnet. Ns Ar X Ns Va .fixup_needs_csum -This tunable enforces the calculation of a valid TCP or UDP checksum for -packets received with -.Dv VIRTIO_NET_HDR_F_NEEDS_CSUM -being set in the -.Va flags -field of the structure -.Vt struct virtio_net_hdr . -It also marks the checksum as being correct in the mbuf packet header. -The default value is 0. -This tunable is deprecated and will be removed in -.Fx 16 . .It Va hw.vtnet.tso_disable .It Va hw.vtnet. Ns Ar X Ns Va .tso_disable This tunable disables TCP segmentation offloading. @@ -174,9 +161,8 @@ offloading was received and this request failed. The different reasons for the failure are counted by .Va dev.vtnet. Ns Ar X Ns Va .rx_csum_inaccessible_ipproto , .Va dev.vtnet. Ns Ar X Ns Va .rx_csum_bad_ipproto , -.Va dev.vtnet. Ns Ar X Ns Va .rx_csum_bad_ethtype , and -.Va dev.vtnet. Ns Ar X Ns Va .rx_csum_bad_offset . +.Va dev.vtnet. Ns Ar X Ns Va .rx_csum_bad_ethtype . .It Va dev.vtnet. Ns Ar X Ns Va .rxq Ns Ar Y Ns Va .csum The number of times receive checksum offloading for UDP or TCP was performed. .It Va dev.vtnet. Ns Ar X Ns Va .rxq Ns Ar Y Ns Va .ierrors @@ -239,12 +225,6 @@ over all receive queues of the interface. .It Va dev.vtnet. Ns Ar X Ns Va .rx_csum_inaccessible_ipproto The number of times a packet with a request for receive or transmit checksum offloading was received where the IP protocol was not accessible. -.It Va dev.vtnet. Ns Ar X Ns Va .rx_csum_bad_offset -The number of times fixing the checksum required by -.Va hw.vtnet.fixup_needs_csum -or -.Va hw.vtnet. Ns Ar X Ns Va .fixup_needs_csum -was attempted for a packet where the csum is not located in the first mbuf. .It Va dev.vtnet. Ns Ar X Ns Va .rx_csum_bad_ipproto The number of times a packet with a request for receive or transmit checksum offloading was received where the IP protocol was neither TCP nor UDP. diff --git a/sys/arm/allwinner/if_awg.c b/sys/arm/allwinner/if_awg.c index c66aab9422b8..d5a6fdb96192 100644 --- a/sys/arm/allwinner/if_awg.c +++ b/sys/arm/allwinner/if_awg.c @@ -651,13 +651,13 @@ awg_encap(struct awg_softc *sc, struct mbuf **mp) flags = TX_FIR_DESC; status = 0; - if ((m->m_pkthdr.csum_flags & CSUM_IP) != 0) { - if ((m->m_pkthdr.csum_flags & (CSUM_TCP|CSUM_UDP)) != 0) - csum_flags = TX_CHECKSUM_CTL_FULL; - else - csum_flags = TX_CHECKSUM_CTL_IP; - flags |= (csum_flags << TX_CHECKSUM_CTL_SHIFT); - } + if ((m->m_pkthdr.csum_flags & (CSUM_TCP|CSUM_UDP)) != 0) + csum_flags = TX_CHECKSUM_CTL_FULL; + else if ((m->m_pkthdr.csum_flags & CSUM_IP) != 0) + csum_flags = TX_CHECKSUM_CTL_IP; + else + csum_flags = 0; + flags |= (csum_flags << TX_CHECKSUM_CTL_SHIFT); for (i = 0; i < nsegs; i++) { sc->tx.segs++; diff --git a/sys/dev/virtio/network/if_vtnet.c b/sys/dev/virtio/network/if_vtnet.c index da89dea03f87..ef01833b9e03 100644 --- a/sys/dev/virtio/network/if_vtnet.c +++ b/sys/dev/virtio/network/if_vtnet.c @@ -135,7 +135,7 @@ static int vtnet_rxq_replace_buf(struct vtnet_rxq *, struct mbuf *, int); static int vtnet_rxq_enqueue_buf(struct vtnet_rxq *, struct mbuf *); static int vtnet_rxq_new_buf(struct vtnet_rxq *); #if defined(INET) || defined(INET6) -static int vtnet_rxq_csum_needs_csum(struct vtnet_rxq *, struct mbuf *, +static void vtnet_rxq_csum_needs_csum(struct vtnet_rxq *, struct mbuf *, bool, int, struct virtio_net_hdr *); static void vtnet_rxq_csum_data_valid(struct vtnet_rxq *, struct mbuf *, int); @@ -273,11 +273,6 @@ static int vtnet_csum_disable = 0; SYSCTL_INT(_hw_vtnet, OID_AUTO, csum_disable, CTLFLAG_RDTUN, &vtnet_csum_disable, 0, "Disables receive and send checksum offload"); -static int vtnet_fixup_needs_csum = 0; -SYSCTL_INT(_hw_vtnet, OID_AUTO, fixup_needs_csum, CTLFLAG_RDTUN, - &vtnet_fixup_needs_csum, 0, - "Calculate valid checksum for NEEDS_CSUM packets"); - static int vtnet_tso_disable = 0; SYSCTL_INT(_hw_vtnet, OID_AUTO, tso_disable, CTLFLAG_RDTUN, &vtnet_tso_disable, 0, "Disables TSO"); @@ -1158,10 +1153,6 @@ vtnet_setup_interface(struct vtnet_softc *sc) if_setcapabilitiesbit(ifp, IFCAP_RXCSUM, 0); if_setcapabilitiesbit(ifp, IFCAP_RXCSUM_IPV6, 0); - if (vtnet_tunable_int(sc, "fixup_needs_csum", - vtnet_fixup_needs_csum) != 0) - sc->vtnet_flags |= VTNET_FLAG_FIXUP_NEEDS_CSUM; - /* Support either "hardware" or software LRO. */ if_setcapabilitiesbit(ifp, IFCAP_LRO, 0); } @@ -1784,12 +1775,10 @@ vtnet_rxq_new_buf(struct vtnet_rxq *rxq) } #if defined(INET) || defined(INET6) -static int +static void vtnet_rxq_csum_needs_csum(struct vtnet_rxq *rxq, struct mbuf *m, bool isipv6, int protocol, struct virtio_net_hdr *hdr) { - struct vtnet_softc *sc; - /* * The packet is likely from another VM on the same host or from the * host that itself performed checksum offloading so Tx/Rx is basically @@ -1800,57 +1789,18 @@ vtnet_rxq_csum_needs_csum(struct vtnet_rxq *rxq, struct mbuf *m, bool isipv6, ("%s: unsupported IP protocol %d", __func__, protocol)); /* - * If the user don't want us to fix it up here by computing the - * checksum, just forward the order to compute the checksum by setting + * Just forward the order to compute the checksum by setting * the corresponding mbuf flag (e.g., CSUM_TCP). */ - sc = rxq->vtnrx_sc; - if ((sc->vtnet_flags & VTNET_FLAG_FIXUP_NEEDS_CSUM) == 0) { - switch (protocol) { - case IPPROTO_TCP: - m->m_pkthdr.csum_flags |= - (isipv6 ? CSUM_TCP_IPV6 : CSUM_TCP); - break; - case IPPROTO_UDP: - m->m_pkthdr.csum_flags |= - (isipv6 ? CSUM_UDP_IPV6 : CSUM_UDP); - break; - } - m->m_pkthdr.csum_data = hdr->csum_offset; - return (0); - } - - /* - * Compute the checksum in the driver so the packet will contain a - * valid checksum. The checksum is at csum_offset from csum_start. - */ - int csum_off, csum_end; - uint16_t csum; - - csum_off = hdr->csum_start + hdr->csum_offset; - csum_end = csum_off + sizeof(uint16_t); - - /* Assume checksum will be in the first mbuf. */ - if (m->m_len < csum_end || m->m_pkthdr.len < csum_end) { - sc->vtnet_stats.rx_csum_bad_offset++; - return (1); + switch (protocol) { + case IPPROTO_TCP: + m->m_pkthdr.csum_flags |= (isipv6 ? CSUM_TCP_IPV6 : CSUM_TCP); + break; + case IPPROTO_UDP: + m->m_pkthdr.csum_flags |= (isipv6 ? CSUM_UDP_IPV6 : CSUM_UDP); + break; } - - /* - * Like in_delayed_cksum()/in6_delayed_cksum(), compute the - * checksum and write it at the specified offset. We could - * try to verify the packet: csum_start should probably - * correspond to the start of the TCP/UDP header. - * - * BMV: Need to properly handle UDP with zero checksum. Is - * the IPv4 header checksum implicitly validated? - */ - csum = in_cksum_skip(m, m->m_pkthdr.len, hdr->csum_start); - *(uint16_t *)(mtodo(m, csum_off)) = csum; - m->m_pkthdr.csum_flags |= CSUM_DATA_VALID | CSUM_PSEUDO_HDR; - m->m_pkthdr.csum_data = 0xFFFF; - - return (0); + m->m_pkthdr.csum_data = hdr->csum_offset; } static void @@ -1934,8 +1884,7 @@ vtnet_rxq_csum(struct vtnet_rxq *rxq, struct mbuf *m, } if (hdr->flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) - return (vtnet_rxq_csum_needs_csum(rxq, m, isipv6, protocol, - hdr)); + vtnet_rxq_csum_needs_csum(rxq, m, isipv6, protocol, hdr); else /* VIRTIO_NET_HDR_F_DATA_VALID */ vtnet_rxq_csum_data_valid(rxq, m, protocol); @@ -4354,9 +4303,6 @@ vtnet_setup_stat_sysctl(struct sysctl_ctx_list *ctx, SYSCTL_ADD_UQUAD(ctx, child, OID_AUTO, "rx_csum_bad_ipproto", CTLFLAG_RD | CTLFLAG_STATS, &stats->rx_csum_bad_ipproto, "Received checksum offloaded buffer with incorrect IP protocol"); - SYSCTL_ADD_UQUAD(ctx, child, OID_AUTO, "rx_csum_bad_offset", - CTLFLAG_RD | CTLFLAG_STATS, &stats->rx_csum_bad_offset, - "Received checksum offloaded buffer with incorrect offset"); SYSCTL_ADD_UQUAD(ctx, child, OID_AUTO, "rx_csum_inaccessible_ipproto", CTLFLAG_RD | CTLFLAG_STATS, &stats->rx_csum_inaccessible_ipproto, "Received checksum offloaded buffer with inaccessible IP protocol");