From nobody Thu May 1 18:15:15 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 4ZpMfX1LtFz5vX2s; Thu, 01 May 2025 18:15:16 +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 4ZpMfW6hWhz4NY0; Thu, 01 May 2025 18:15:15 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746123315; 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=VKtdggBlm2yISymaMvgtjlF2T05IlXKESsZOAn4rg3w=; b=FCDm0NQmJSNyC8Mo1jbOxGFgoRX+JvEe0hliOnv4VWDM0Qqx3XSkDtjXZWQH6puTZiBVQq bCJnjstrTkUzcQyMh6TmliFBCCKr0TIr82hdH8b97Fpy54nKgbP2iFJj9FLMYnHtED7azn qqV0itAUHAh2PLsxC962zx7CzpTwnLuR5ogFNyYxeBIR6rS5cD+MmX2PhCkB/kWgeLTYLd CKpH0UcINNDs349XTBfb6XbuiYpVKJfBg6lhojHyRLKAjBjU46GZorqcCZGahb4xbazzif TBQ2zohs9nuNYQdJHyxBkOloiXGo++vIwp08XvOubXug6juBQCCGOFUGCXaYVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746123315; 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=VKtdggBlm2yISymaMvgtjlF2T05IlXKESsZOAn4rg3w=; b=geTBkbD39cMzW8/wqIPr7+WXqFSdW5h7uf/75tj5vhej4kUx6H+McVqoHldVK8zTYI7Uxe /6fgR1dxM31frxgn6jmbvNL3pvDQ6rB7EUTey1XldHav3kMIcS95s/MhFqJKXnOJSNcVEb GW9CEBEWkC9Pc0P6kMS2kpG05buqJA/Qi0rp/GaHVFJl9gm+9PQP8ATOTl9EvPbzBNbHsO V5wL1Qo9/8U6D9mEWIBvfTeS76UEeaVncwpKKFgGawhw/Gfgw8yVLFePScFhOJkMLHbqEz Ojh8SHYg8xgewZDpE46y19T7DdSjAp6cAb52REfIScA6Y5UROQzcYA61hXrEoA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1746123315; a=rsa-sha256; cv=none; b=ZuzRnDAgZDTpYbZUaE++1HD29C6cUden7IK9gKEUmIWJNHXHfyufmHzF61AqbuVS7JyBC0 X/twrr6EBI7QgNiQclOfVaz+p4439ucsm1CL+f/b0l6kinQZE0/LyOUoCekuDUard+L0Mt qDMN3DorIv1MfLvWnkoAE1zvcgjPm2sa6MQ1KH/+nNFWvSV5Sk5tXDmjBRM8EBVGbLNi+v QJIIQG9gDja166YkndR3iktv4b1buDru516Eaxi9JqTFelQGc2THX+acqhlg8RqDz0faPI 4nzNWygthGGaRxs8Izff0aU7+1asuyepzVs6pJr77D1zqjeX0nMFUE8cgGnXNw== 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 4ZpMfW6HYxzfjL; Thu, 01 May 2025 18:15:15 +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 541IFFnf084883; Thu, 1 May 2025 18:15:15 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 541IFFpH084880; Thu, 1 May 2025 18:15:15 GMT (envelope-from git) Date: Thu, 1 May 2025 18:15:15 GMT Message-Id: <202505011815.541IFFpH084880@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: 162b5bbb4048 - stable/13 - 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: akiyano X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 162b5bbb4048d0ba99d759616c127ba04c9289c3 Auto-Submitted: auto-generated The branch stable/13 has been updated by akiyano: URL: https://cgit.FreeBSD.org/src/commit/?id=162b5bbb4048d0ba99d759616c127ba04c9289c3 commit 162b5bbb4048d0ba99d759616c127ba04c9289c3 Author: David Arinzon AuthorDate: 2025-04-22 10:54:18 +0000 Commit: Arthur Kiyanovski CommitDate: 2025-05-01 18:14:30 +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 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; }