From nobody Wed Jul 02 18:28:10 2025 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 4bXT0q3qLwz60lyq; Wed, 02 Jul 2025 18:28:11 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bXT0q1Xwqz3HXp; Wed, 02 Jul 2025 18:28:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751480891; 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=qUoIu0bVSf/+Va/qbnLGGAYYAlfU5Nt2oBvID60+7E0=; b=uN0InLvgBj2pvSnky2iFaTCH9hgD/yjAqN3gpke7Azqcct9A9qBovzTLM3F2MRywZb+OlJ RgRoqWrLKtWoM36Sn7F18a5KlYvMSO7OqHE+97LivHlBIvGRLNU7KlPdNMrerf3KiS28uB mn2ZmYZHTYak004zUe7myKXjDME+ijfKMbKUq0lLF3Hv0qggv0caGDDhJywM7CpcLQ3T2j YLHlTXo15yg4Bx6ZrJfEuZsC0frCXHAiG2qFLhpX86JCGKjZkyBURc6NGAUmw7wNry/1bV uGUnr0ygn2tYgy1qTrWMdmgUMTxbAG8E4zyhwE2eP+pCRUUdBpIHIyrjr2kS1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751480891; 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=qUoIu0bVSf/+Va/qbnLGGAYYAlfU5Nt2oBvID60+7E0=; b=n4IoSDCshekzEROt70wxofR+YO5K8okWVWhAh/duY2ieax3F5z9Hpi4w2uwijAbO0qAa2M /nzq3Sl1PXOy8Qz/nl/y8TldhI6PsbfVeSHYWLnXdica/68z2xp4CqeoMfjuypemNzy+bI DuxtV0MaFPPadgU9RAygwgtUC1WqG7IJ29E9MT5zEtsGD/27SnfmcqLeOXDQ42O8ESH8aO CG6cWOjr7ccYtz3uihjsLzQ13fzjINimVF/e8IeHIYVUBL4eypjA1t+umMfbvt5vw71884 zDc9N+lDWNpCR0LHyo+m0iemt3acDbNikDwoRsd/B95kRCrTTGTJ1Mac1bYtew== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1751480891; a=rsa-sha256; cv=none; b=E/91XesFg5lczaQgRSvSeD2RQmQPrafwFo1teHvxFo1q/92L5ozu2ya1lsWreDDwr+fVTH nb6HMYim650eAT0TClQpac1otvOZHGNXdANmtFz/XSkVKdd8lJNq5xw6sAkdWaQmzd+iLV Tb2njnizyllZu4K7YHpWMczMZ1wkfOWOLBaASCG8wofaLwKbg1jPHtMB+xTTi3CKe45JXl 8jKnBNoJVOOkbS+aJOHQlQ/D2qBQJCWDuwEnFqfU7C1c0o+VMRTfXS1l3pJLPXb3zZ4V0R FNVCaDgCPUhsKrRbjMUHKU56v0XDLU2cLS7shzN8K3wkJbtJre8ihlSGiK1Aqg== 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 4bXT0q0fcSzWGQ; Wed, 02 Jul 2025 18:28:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 562ISAlg057391; Wed, 2 Jul 2025 18:28:10 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 562ISAPY057388; Wed, 2 Jul 2025 18:28:10 GMT (envelope-from git) Date: Wed, 2 Jul 2025 18:28:10 GMT Message-Id: <202507021828.562ISAPY057388@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Gordon Tetlow Subject: git: 89104be0ddae - releng/14.2 - ena: Fix misconfiguration when requesting regular LLQ 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: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: gordon X-Git-Repository: src X-Git-Refname: refs/heads/releng/14.2 X-Git-Reftype: branch X-Git-Commit: 89104be0ddae36c250d2a4d923f7e042e69748ff Auto-Submitted: auto-generated The branch releng/14.2 has been updated by gordon: URL: https://cgit.FreeBSD.org/src/commit/?id=89104be0ddae36c250d2a4d923f7e042e69748ff commit 89104be0ddae36c250d2a4d923f7e042e69748ff Author: David Arinzon AuthorDate: 2025-04-22 10:54:18 +0000 Commit: Gordon Tetlow CommitDate: 2025-07-02 05:54:18 +0000 ena: Fix misconfiguration when requesting regular LLQ Patch 0a33c047a443 introduced new values to hw.ena.force_large_llq_header. The default value of 2 means no preference, while 0 and 1 act as the previous false and true respectively, which allowed forcefully setting regular or large LLQ. There are 2 ways to force the driver to select regular LLQ: 1. Setting hw.ena.force_large_llq_header = 0 via sysctl. 2. Turning on ena express, which makes the recommendation by the FW to be regular LLQ. When the device supports large LLQ but the driver is forced to regular LLQ, llq_config->llq_ring_entry_size_value is never initialized and since it is a variable allocated on the stack, it stays garbage. Since this variable is involved in calculating max_entries_in_tx_burst, it could cause the maximum burst size to be zero. This causes the driver to ignore the real maximum burst size of the device, leading to driver resets in devices that have a maximum burst size (Nitro v4 and on. see [1] for more information). In case the garbage value is 0, the calculation of max_entries_in_tx_burst divides by 0 and causes kernel panic. The patch modifies the logic to take into account all use-cases and ensure that the relevant fields are properly initialized. [1]: https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html Fixes: 0a33c047a443 ("ena: Support LLQ entry size recommendation from device") Sponsored by: Amazon, Inc. Differential Revision: https://reviews.freebsd.org/D50040 Approved by: so Security: FreeBSD-EN-25:11.ena (cherry picked from commit 56c45700f2ae15755358f2da8266247613c564df) (cherry picked from commit 3f4a674a8ee430dec7c72c45ffe759eabefa7a1f) --- sys/dev/ena/ena.c | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/sys/dev/ena/ena.c b/sys/dev/ena/ena.c index e9d4530e9085..67f669343808 100644 --- a/sys/dev/ena/ena.c +++ b/sys/dev/ena/ena.c @@ -2759,22 +2759,41 @@ static inline void ena_set_llq_configurations(struct ena_llq_configurations *llq_config, struct ena_admin_feature_llq_desc *llq, struct ena_adapter *adapter) { + bool use_large_llq; + llq_config->llq_header_location = ENA_ADMIN_INLINE_HEADER; llq_config->llq_stride_ctrl = ENA_ADMIN_MULTIPLE_DESCS_PER_ENTRY; llq_config->llq_num_decs_before_header = ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_2; - if ((llq->entry_size_ctrl_supported & ENA_ADMIN_LIST_ENTRY_SIZE_256B) != 0) { - if ((ena_force_large_llq_header == ENA_LLQ_HEADER_SIZE_POLICY_LARGE) || - (ena_force_large_llq_header == ENA_LLQ_HEADER_SIZE_POLICY_DEFAULT && - llq->entry_size_recommended == ENA_ADMIN_LIST_ENTRY_SIZE_256B)) { - llq_config->llq_ring_entry_size = - ENA_ADMIN_LIST_ENTRY_SIZE_256B; - llq_config->llq_ring_entry_size_value = 256; - adapter->llq_policy = ENA_ADMIN_LIST_ENTRY_SIZE_256B; - } + + switch (ena_force_large_llq_header) + { + case ENA_LLQ_HEADER_SIZE_POLICY_REGULAR: + use_large_llq = false; + break; + case ENA_LLQ_HEADER_SIZE_POLICY_LARGE: + use_large_llq = true; + break; + case ENA_LLQ_HEADER_SIZE_POLICY_DEFAULT: + use_large_llq = + (llq->entry_size_recommended == ENA_ADMIN_LIST_ENTRY_SIZE_256B); + break; + default: + use_large_llq = false; + ena_log(adapter->pdev, WARN, + "force_large_llq_header should have values [0-2]\n"); + break; + } + + if (!(llq->entry_size_ctrl_supported & ENA_ADMIN_LIST_ENTRY_SIZE_256B)) + use_large_llq = false; + + if (use_large_llq) { + llq_config->llq_ring_entry_size = ENA_ADMIN_LIST_ENTRY_SIZE_256B; + llq_config->llq_ring_entry_size_value = 256; + adapter->llq_policy = ENA_ADMIN_LIST_ENTRY_SIZE_256B; } else { - llq_config->llq_ring_entry_size = - ENA_ADMIN_LIST_ENTRY_SIZE_128B; + llq_config->llq_ring_entry_size = ENA_ADMIN_LIST_ENTRY_SIZE_128B; llq_config->llq_ring_entry_size_value = 128; adapter->llq_policy = ENA_ADMIN_LIST_ENTRY_SIZE_128B; }