From nobody Mon Feb 19 04:48:50 2024 X-Original-To: dev-commits-src-branches@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 4TdVRk56xVz5938W; Mon, 19 Feb 2024 04:48:50 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TdVRk3BB9z50j4; Mon, 19 Feb 2024 04:48:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1708318130; 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=aeodTCcglibBGb/Kdd3D6qgSbd++1KgMskWr+0/xHuM=; b=qCWoqUHO0W3Fim8enjBf5hmgV87ZceQ0S9gb0Eh7WqKW6pNrAnusKBCz0VrGsTcy+vfQyY rrJuVu3RhDJIJPa7/9uaeiir7qLAPmAMe8oLwt/j4d1/fIPyGlm+RVzOXAuF6cDY2JCOtz mac0e/i4PZPSUpnrJ7MQfd5AXcfTYsjorqokfifCbfpTQzNRo+n+vZAbZ7bxiljjLjwWAd 7Icwh8XAJi8cH0AoYn6NGH6SHS/TunP7f/HRVQxoNLrZU2uw1WcD6EdMXeiICI80yEDlzp vxjP7Q4bVTSEUdn+l2fPKxO0XYvW9Z5dyJ32+SOuiscWptI9vXRyDG6f1LmD/w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1708318130; 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=aeodTCcglibBGb/Kdd3D6qgSbd++1KgMskWr+0/xHuM=; b=Cl9Wk9xvMv51/NGEcrmFAq9qKJbizoebq8DzsP0LLMbyvVOaa1h7aVhw9Ayxi2LzptpYC4 Tyh3tF28noe+aX56bs8PlHjgzM8J5qOT1RvzTaDG/CJAezUzOXKKft5Ak9pxKAJKuqdyWn daOj8SGBweKCjXRFxSJPlkB/UM2m6F8JC2q0MtMbkqHm6Mi+s6TXM32PXhwBMUJJKr3qCR rydRDpMQ8FxBkkB8rbY3Jhore0qg1whooVU3McC8Cu/PPdjrRK8uVBOr3PGiuU7rXeKR/3 CR6ywVkMqQhMobuhtSXtvz20W0KnMaA3m2xuzBiEeYFy8hNrMWHCFXhKdPVEdg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1708318130; a=rsa-sha256; cv=none; b=Q9awMX+Sf3ZMjM/YkqhopC8D1YcE0Hr9NujQdHbAdzyRJf0AZnGhbqJi/cj+3e1d5vS9uV kEGDhFpOrfZcyLa2upWTu0yT5zznxXmivClZSDM/DdkFYqm3MxvPoi89Z8djCgfUIa978N tLjPHzhIsR4N3EDoRV9iULc1CHXbbUjUwEaj+uPXErZio2LELegEqBF8NCHfavInvibfRU 84/IhTJQgWXbgq9sKm65hto7Yg6v8dJIr+Ni7hkiq2GTqC9G81BaoB+PjZIMt9TosgXEsX YHqTNNsVGEnzfDz3SpOBLFCzMnfJNeXjg2mf15QcvNtF6wa3hGyfxZGKjI2J6g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4TdVRk2F7DzLCG; Mon, 19 Feb 2024 04:48:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 41J4moev076910; Mon, 19 Feb 2024 04:48:50 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 41J4moic076907; Mon, 19 Feb 2024 04:48:50 GMT (envelope-from git) Date: Mon, 19 Feb 2024 04:48:50 GMT Message-Id: <202402190448.41J4moic076907@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Warner Losh Subject: git: 96e37f693694 - stable/14 - vtnet: Account for the padding when selecting allocation size List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 96e37f6936949c03cd4ab7c42fcefccae4001d9d Auto-Submitted: auto-generated The branch stable/14 has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=96e37f6936949c03cd4ab7c42fcefccae4001d9d commit 96e37f6936949c03cd4ab7c42fcefccae4001d9d Author: Warner Losh AuthorDate: 2024-02-05 05:43:39 +0000 Commit: Warner Losh CommitDate: 2024-02-19 04:47:16 +0000 vtnet: Account for the padding when selecting allocation size While we account for the padding in the length of the mbuf we use, we do not account for it when we 'guess' the size of the mbuf to allocate based in the MTU of the device. This leads to a situation where we might fail if the mtu is close to a bucket size (say 2018) such that the added padding would push us over the edge for a full-sized packet. mtu of 2018 is super rare (2016 and 2020 would both work), but fix it none-the-less. It's a shame we can't just set VTNET_RX_HEADER_PAD to 2 in this case. The 4 seems hard-coded somewhere I've not found documented (I think it's in the protocol given the comments about VIRTIO_F_ANY_LAYOUT). Sponsored by: Netflix Reviewed by: bz Differential Revision: https://reviews.freebsd.org/D43656 (cherry picked from commit d9e0e42627613b56abf0f8fa1ad601e5690d775c) --- sys/dev/virtio/network/if_vtnet.c | 9 +++++++++ sys/dev/virtio/network/if_vtnetvar.h | 8 +++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/sys/dev/virtio/network/if_vtnet.c b/sys/dev/virtio/network/if_vtnet.c index ab77205000d5..6694c655f3af 100644 --- a/sys/dev/virtio/network/if_vtnet.c +++ b/sys/dev/virtio/network/if_vtnet.c @@ -1232,6 +1232,15 @@ vtnet_rx_cluster_size(struct vtnet_softc *sc, int mtu) } else framesz = sizeof(struct vtnet_rx_header); framesz += sizeof(struct ether_vlan_header) + mtu; +#ifndef __NO_STRICT_ALIGNMENT + /* + * Account for the offsetting we'll do elsewhere so we allocate the + * right size for the mtu. + */ + if (sc->vtnet_hdr_size % 4 == 0) { + framesz += ETHER_ALIGN; + } +#endif if (framesz <= MCLBYTES) return (MCLBYTES); diff --git a/sys/dev/virtio/network/if_vtnetvar.h b/sys/dev/virtio/network/if_vtnetvar.h index 6c2e6e90107a..d690ad3bf63c 100644 --- a/sys/dev/virtio/network/if_vtnetvar.h +++ b/sys/dev/virtio/network/if_vtnetvar.h @@ -232,7 +232,13 @@ vtnet_software_lro(struct vtnet_softc *sc) */ #define VTNET_VLAN_FILTER_NWORDS (4096 / 32) -/* We depend on these being the same size (and same layout). */ +/* + * We depend on all of the hdr structures being even, and matching the standard + * length. As well, we depend on two being identally sized (with the same + * layout). + */ +CTASSERT(sizeof(struct virtio_net_hdr_v1) == 12); +CTASSERT(sizeof(struct virtio_net_hdr) == 10); CTASSERT(sizeof(struct virtio_net_hdr_mrg_rxbuf) == sizeof(struct virtio_net_hdr_v1));