From nobody Fri Sep 18 23:00:36 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 4hmp4h4BNkz6t6BR for ; Fri, 18 Sep 2026 23:00:36 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hmp4h1hh8z3C8R for ; Fri, 18 Sep 2026 23:00:36 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789772436; 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=N53ydCK0/t7lMTH7IiBf579zzMkbfu++4LkMmHAvrok=; b=fattEfKsYyjRucHJhqLhzHOw4B37+8kX6DTHOGdaGjfpdeDx/TAgAluRMzHfBfgQWRrfmt fSWqK77zkIw1xtIS5FvzhishJexV1JkkHAncr2UsuN2FpwbpqUswrSzECNPAB1J8Mw2d9O x4Kxb1COpjPQys+I9QFhLDIjHvF1r8ToEjNZnDa6429iD4WQoyHjjcovLtZtpkL41nvnWw mHW9oICybuBJcpa5fqFlnHq7jsFQ6yfjezzsHaiHPawubFVbveriBgX8/g1H3ZnA5EMnM/ PcCxwaAP6rRYUL3U4nzWt7JwvTWebPakinMhOdZBjo52SfsR/j0Iugk609ZI1A== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1789772436; b=CH/QY6zLV1SxduFCZQmqN3ePf6Ei+mRh9SWiQM2drzoq7Y6X//Yua/TXVDmHwsTvIJ2W2n N/ZSMS1GSrJr6r5YEJ66X300MD1rCJ625YWe5UbV9UMAcDND8FuCvVIjkao2KxFijGz2By Hvx3VCvyzItNl3B09EtmIuYZwVokfc/rVKhynKuhzMzuJU8Lah1eZDThm1Efs/gyiEKrde fFR2P0yBEYiXF3qYCrwg98cGp9ut/gMo+Osowl/lCi8z0zRxs1hDiK+a5sTRW80QDpFL6u hk0NBfDtBpChAmfbltzWd9AGW//lIbE5qhsss+rATbc7HnbqHXSJ/R3LOMQHHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789772436; 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=N53ydCK0/t7lMTH7IiBf579zzMkbfu++4LkMmHAvrok=; b=Gxy3srIk3fQzSsw1h+2tC3LJLcQCPBgS2/mD6C88UQtk2aktpHqTgmz/ShgZ477+/t/Ury HfXO2f7hU1EllFOQCQNDVT/Iq6iV9uNziFqSfrRpHMvLGTk2XS3DJdd8cwDEPsJisuM1B5 XY5CF9IjKE+OLU3lCXOtMWPr4lgm+X1NrZplkOINg9YMHVVNT5i9EljRipY0II7FwXjCm4 cvQe+YCTx6dU4oa/XKZQFQLXs8/CQ2kJiSr6VBAFNQupPBQA0wiNpOqcd8UajxpgqIO6sV l0ZgIWJia3xP0ZsC8TqpVk0l7xwDCLA79mJLN+qNTiYi358FsHScoAV9RvlpiQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hmp4h0VzPzfvY for ; Fri, 18 Sep 2026 23:00:36 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 22f59 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 18 Sep 2026 23:00:36 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 1ad999a1c7e0 - main - mlx4en: Use the common RSS key for programming and queries 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: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 1ad999a1c7e0efd4fd65df634a4c108d593d4027 Auto-Submitted: auto-generated Date: Fri, 18 Sep 2026 23:00:36 +0000 Message-Id: <6aadc294.22f59.4ff23f24@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=1ad999a1c7e0efd4fd65df634a4c108d593d4027 commit 1ad999a1c7e0efd4fd65df634a4c108d593d4027 Author: Kevin Bowling AuthorDate: 2026-09-18 08:29:19 +0000 Commit: Kevin Bowling CommitDate: 2026-09-18 22:59:12 +0000 mlx4en: Use the common RSS key for programming and queries Replace the private fixed key with rss_getkey(). Copy the common byte stream directly into the RSS queue-pair context and use the same helper for SIOCGIFRSSKEY, so hardware programming and hn's query agree. Change the helper to fill caller-owned storage instead of returning a pointer to a static key. Check the fixed hardware and ioctl buffer sizes at compile time. Leave RSS masks and queue steering unchanged. MFC after: 2 weeks Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D59798 --- sys/dev/mlx4/mlx4_en/en.h | 2 +- sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c | 10 ++++------ sys/dev/mlx4/mlx4_en/mlx4_en_rx.c | 30 +++++++----------------------- 3 files changed, 12 insertions(+), 30 deletions(-) diff --git a/sys/dev/mlx4/mlx4_en/en.h b/sys/dev/mlx4/mlx4_en/en.h index dbe29f1d24ec..88a38d68e77d 100644 --- a/sys/dev/mlx4/mlx4_en/en.h +++ b/sys/dev/mlx4/mlx4_en/en.h @@ -845,7 +845,7 @@ int mlx4_en_map_buffer(struct mlx4_buf *buf); void mlx4_en_unmap_buffer(struct mlx4_buf *buf); void mlx4_en_calc_rx_buf(if_t dev); -const u32 *mlx4_en_get_rss_key(struct mlx4_en_priv *priv, u16 *keylen); +void mlx4_en_get_rss_key(void *key); u8 mlx4_en_get_rss_mask(struct mlx4_en_priv *priv); int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv); void mlx4_en_release_rss_steer(struct mlx4_en_priv *priv); diff --git a/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c b/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c index ac4bfd1b1a14..6bab5d25cbc6 100644 --- a/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c +++ b/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c @@ -1953,7 +1953,6 @@ static int mlx4_en_ioctl(if_t dev, u_long command, caddr_t data) int error; int mask; struct ifrsskey *ifrk; - const u32 *key; struct ifrsshash *ifrh; u8 rss_mask; @@ -2092,12 +2091,11 @@ out: case SIOCGIFRSSKEY: ifrk = (struct ifrsskey *)data; ifrk->ifrk_func = RSS_FUNC_TOEPLITZ; + ifrk->ifrk_keylen = MLX4_EN_RSS_KEY_SIZE; + _Static_assert(sizeof(ifrk->ifrk_key) >= MLX4_EN_RSS_KEY_SIZE, + "RSS query buffer too small"); mutex_lock(&mdev->state_lock); - key = mlx4_en_get_rss_key(priv, &ifrk->ifrk_keylen); - if (ifrk->ifrk_keylen > RSS_KEYLEN) - error = EINVAL; - else - memcpy(ifrk->ifrk_key, key, ifrk->ifrk_keylen); + mlx4_en_get_rss_key(ifrk->ifrk_key); mutex_unlock(&mdev->state_lock); break; diff --git a/sys/dev/mlx4/mlx4_en/mlx4_en_rx.c b/sys/dev/mlx4/mlx4_en/mlx4_en_rx.c index 5baae707413d..60a530947ca0 100644 --- a/sys/dev/mlx4/mlx4_en/mlx4_en_rx.c +++ b/sys/dev/mlx4/mlx4_en/mlx4_en_rx.c @@ -43,6 +43,7 @@ #endif #include "en.h" +#include #if (MLX4_EN_MAX_RX_SEGS == 1) static void mlx4_en_init_rx_desc(struct mlx4_en_priv *priv, @@ -993,26 +994,12 @@ void mlx4_en_destroy_drop_qp(struct mlx4_en_priv *priv) mlx4_qp_release_range(priv->mdev->dev, qpn, 1); } -const u32 * -mlx4_en_get_rss_key(struct mlx4_en_priv *priv __unused, - u16 *keylen) +void +mlx4_en_get_rss_key(void *key) { - static const u32 rsskey[10] = { - cpu_to_be32(0xD181C62C), - cpu_to_be32(0xF7F4DB5B), - cpu_to_be32(0x1983A2FC), - cpu_to_be32(0x943E1ADB), - cpu_to_be32(0xD9389E6B), - cpu_to_be32(0xD1039C2C), - cpu_to_be32(0xA74499AD), - cpu_to_be32(0x593D56D9), - cpu_to_be32(0xF3253C06), - cpu_to_be32(0x2ADC1FFC) - }; - - if (keylen != NULL) - *keylen = sizeof(rsskey); - return (rsskey); + _Static_assert(MLX4_EN_RSS_KEY_SIZE == RSS_KEYSIZE, + "RSS key size mismatch"); + rss_getkey(key); } u8 mlx4_en_get_rss_mask(struct mlx4_en_priv *priv) @@ -1032,7 +1019,6 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv) struct mlx4_en_rss_map *rss_map = &priv->rss_map; struct mlx4_qp_context context; struct mlx4_rss_context *rss_context; - const u32 *key; int rss_rings; void *ptr; int i; @@ -1085,9 +1071,7 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv) rss_context->base_qpn_udp = rss_context->default_qpn; rss_context->flags = mlx4_en_get_rss_mask(priv); rss_context->hash_fn = MLX4_RSS_HASH_TOP; - key = mlx4_en_get_rss_key(priv, NULL); - for (i = 0; i < 10; i++) - rss_context->rss_key[i] = key[i]; + mlx4_en_get_rss_key(rss_context->rss_key); err = mlx4_qp_to_ready(mdev->dev, &priv->res.mtt, &context, &rss_map->indir_qp, &rss_map->indir_state);