From nobody Wed Jul 2 18:28:30 2025 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 4bXT1C0q8Sz60m06; Wed, 02 Jul 2025 18:28:31 +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 4bXT1B4JkVz3JDR; Wed, 02 Jul 2025 18:28:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751480910; 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=jRvLuzmGXojFOBkT2oWLvSfCAWAy8zML2iyCELUyQn8=; b=CD2fya7ANFLoLUh664FMWhReksNRTS08uzSTx+Ew2TgGvtmfuLMUrdyK8IKL1zkTcCDWoz FGz4U2RzZQX5hf38dDxPPqyILO7wgQN1BIJA4meRY5jShACN1mrxgbz4aVzKXcA65ghU3e eJMSn+y388BqNLbywxTYD7Zn13gQyqgNszpH4NlC7Sh9bSrpbbysN64pCUZP5nDlmRzPzg yH43Opu8zrRWOwCtI9Xvyvp43plsKHkFTnXpq37YpkGWGajd1IfVwhlc7mFNZPdL45bnOp FCazF3F1XrX3P0MgFwgupqbFgAUsFAQADOIDUZhFV7YNzFYbmnsUmSIytamGcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751480910; 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=jRvLuzmGXojFOBkT2oWLvSfCAWAy8zML2iyCELUyQn8=; b=EXEFsOqj5h6TV3S7ElXPvrRmevF64+N/MtHzDGpaA3UhtfKhsHoy99+2xSgTZwjGOKgd3A qNXJC25sv9Z/87c/cn02GjK8cID2IGXKtcwtx2VLfngljOWulX2bkJkeOxCwT3QvjP0eaX N76ZmR0faFhvtrRxkEfC4yp+rHdYzyfgLXTtz/t3p43CgOvt4KzySlsto674yi+/oFyzsT ubRQiuvUyMV7xsaPB2iDyzWfsroESMRLWFohYCKaYPcYn+qYzdVnYNIsECojK0gTGbd6u0 5w4oPxH1X2Cj2oQ2q4LTAPUl5Cx+Cq1y1ZKqzfE4485Cfl+y1FjzQYH4ZVMBBQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1751480910; a=rsa-sha256; cv=none; b=G6nc7+OqIysH8h7ZSTXGNZh4OWPdWqX97VvqO2X6HHf8BAfZRgb5Hir6YIj0HA3XT7ftOE Sk6CxTC/97YciYw5lrzfAeTFymo9vB2t0PnPnS7kSqlCRlU/aK8QJrHptKuhlRGzLtZwHR u0jlsdGaMn7Pm5nZp3Nrg18d0VM5zvjRantlYwdl4DiTnz7awAA54BstOiOGLy8x30KPKP s4Ky3/RN57rGmUXD1GmU3IsmAGSTMWhwUJ7egAeNF0tisC4qOoWHox0qjCdGrtQlrjXgCO LPNNpsgeCx7UQDTc5vNlllyriDhbiQg6xLctlLIDRkCitl+EmEiZyDo6kYlTqA== 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 4bXT1B3JGvzWGg; Wed, 02 Jul 2025 18:28:30 +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 562ISUaR057782; Wed, 2 Jul 2025 18:28:30 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 562ISUVk057779; Wed, 2 Jul 2025 18:28:30 GMT (envelope-from git) Date: Wed, 2 Jul 2025 18:28:30 GMT Message-Id: <202507021828.562ISUVk057779@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: 35c2729211d9 - releng/13.5 - ena: Fix misconfiguration when requesting regular LLQ 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: gordon X-Git-Repository: src X-Git-Refname: refs/heads/releng/13.5 X-Git-Reftype: branch X-Git-Commit: 35c2729211d9d4062020fd5eabecc7afd67fb0b9 Auto-Submitted: auto-generated The branch releng/13.5 has been updated by gordon: URL: https://cgit.FreeBSD.org/src/commit/?id=35c2729211d9d4062020fd5eabecc7afd67fb0b9 commit 35c2729211d9d4062020fd5eabecc7afd67fb0b9 Author: David Arinzon AuthorDate: 2025-04-22 10:54:18 +0000 Commit: Gordon Tetlow CommitDate: 2025-07-02 05:52:31 +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 162b5bbb4048d0ba99d759616c127ba04c9289c3) --- 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 a0d3cf28861e..f9342ad91ae2 100644 --- a/sys/dev/ena/ena.c +++ b/sys/dev/ena/ena.c @@ -2760,22 +2760,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; }