From nobody Thu May 1 17:56:08 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 4ZpMDT2Vmwz5vVpH; Thu, 01 May 2025 17:56:09 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZpMDT17Z2z4475; Thu, 01 May 2025 17:56:09 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746122169; 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=xFg3bIx2XCtl9gfVJzH9zp1GANblStzqxanLyhREaY4=; b=Nbvq9wPEWJxOwS0wfSX19MMGcqZMffidjDndeMhxoNnQTBuAjeeXt0/kibwAsOw8WSICMC vbfcycgp8ytXDfTt4xGeJsRhryZRzbm5FmXWpu5zUZ2Ls3HaruvfA7jcyFKy82ix9AIEYp qdA7fAD0+bRqN4BBk4Z7vkoJaGrsg1V3OVlFeKQQb6gK37l4TD9r946Jpghu9TLwP3kali VOybpaKshoiuvz1ei8H6L2kCH5YkTPNvPDIUZtZ4pJN+pcS815j+COe78YOrbDeiS0Us2w 7iONX2GPadQ4BtvsIRefNPU5NGlyAIwgSufRtMWQ/MeeIzaFMkX0O5wXK5nwHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746122169; 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=xFg3bIx2XCtl9gfVJzH9zp1GANblStzqxanLyhREaY4=; b=hnDAtOO9VND8Pg2kRcpo66nSO+Tgm1xpGaT6c5CFBnhhANQj+H/uDrcdr64bfcIvJ9hUZK zHxyOfaU8VnkLvn6HRftdl97/9RH4XEDUaDJ+Cz7dWjvJSs9EJEsgSqaXflB7mY0w225TZ MkWEikphp0Sy17WDBIhif1EnAWv5QBytw7AJ+OqU0qOvKsTCT6eqBZa47jfP5TUDUmwmkV 6RZcLdPAMai2jq41ncFlilV9TOCRVU5N7zzS95WSsPkKjLKA3HhJvVkHQrGuUU1SQZhbJ3 mx8p99BY63P/EopDzDhMNKO/FmO/mcU13dV4NgvDh/QWz0bUR6RXmbn3x0azHg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1746122169; a=rsa-sha256; cv=none; b=MWEbgavFS5JPGlg7DEddYancE5CIfAR+5H6BQ6NfvovIJPoLV6IXdj/EAgIHdPbPGAly14 /giB8pxs73Xz8zQNIXScaEqBXMIOV8eMIhBro6nrvXm2YHtesY6w7adKhcqXJaShU8AHHg 2yr82eckCij7YLBGWCCPZJfmXrdMp/vALk0/Q3PThY2MjD0CZqlL7s1qtL8awuraKe1NWJ SIRZPcvDCiZ2LDkVfwngMsTKsz9n4R3DpP7plKxRu2aLw9Hl9v9iVf9isTYAkzxktx5dTn rnncvrwpfNF/7IjBDYlCGNhiiFI96I928PYAhGVg+jkZbc/OxPBNHxKZnPbG9w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4ZpMDT0kkMzdq4; Thu, 01 May 2025 17:56:09 +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 541Hu9vI046087; Thu, 1 May 2025 17:56:09 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 541Hu8fS046084; Thu, 1 May 2025 17:56:08 GMT (envelope-from git) Date: Thu, 1 May 2025 17:56:08 GMT Message-Id: <202505011756.541Hu8fS046084@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Arthur Kiyanovski Subject: git: 3f4a674a8ee4 - stable/14 - 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: akiyano X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 3f4a674a8ee430dec7c72c45ffe759eabefa7a1f Auto-Submitted: auto-generated The branch stable/14 has been updated by akiyano: URL: https://cgit.FreeBSD.org/src/commit/?id=3f4a674a8ee430dec7c72c45ffe759eabefa7a1f commit 3f4a674a8ee430dec7c72c45ffe759eabefa7a1f Author: David Arinzon AuthorDate: 2025-04-22 10:54:18 +0000 Commit: Arthur Kiyanovski CommitDate: 2025-05-01 17:51:52 +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") Approved by: cperciva (mentor) Sponsored by: Amazon, Inc. Differential Revision: https://reviews.freebsd.org/D50040 (cherry picked from commit 56c45700f2ae15755358f2da8266247613c564df) --- 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 f0b6cec1bb61..af158b5aea1d 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; }