From nobody Thu Jun 30 16:15:34 2022 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 D76A88A38D0; Thu, 30 Jun 2022 16:15:34 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4LYk2Z37gqz3Qt2; Thu, 30 Jun 2022 16:15:34 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1656605734; 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=GFkuHpYc54cHJxyHbRDBBHTN7WO6L/VjSW433BgQDpk=; b=aHYcEeS8WbQrGSBcu6qQBrblvK0K03Y3cxw6qqWtEdljJJ9h+Kg+lt9fy4MUVt5MWrhxfv EtinleE3xEXToqQT6XrQ3J6ln8UaTdEUR+OnQ0Ox2JQGLcm6qrkRPrTtj87POZMNfz/EK6 yUt3PeGeMEzjlpADi+UkjniIdd0AjJ1o5Cj1SDcDu2UIUfnxNMwWKYkSzPSdk+BDd7T/yb Mb0a1tzaee4JADhG/MPKiqiM5UZDCsCKAfJH4DO/daWtbUsIj8MT+YibVysznVCKOILT6l Gir1xKqfpuS0Q/+MmMkiWbvaWf6+CXiq0e1kgamK4FdbBeLjzDTy3mWl+gERjA== 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 343EE17C0; Thu, 30 Jun 2022 16:15:34 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 25UGFYMd014769; Thu, 30 Jun 2022 16:15:34 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 25UGFYR5014768; Thu, 30 Jun 2022 16:15:34 GMT (envelope-from git) Date: Thu, 30 Jun 2022 16:15:34 GMT Message-Id: <202206301615.25UGFYR5014768@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Marcin Wojtas Subject: git: 90232d18ca4f - main - ena: Prevent LLQ initialization when membar isn't exposed 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: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mw X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 90232d18ca4f7a5a3073a8279a9b9d3228df5f87 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1656605734; 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=GFkuHpYc54cHJxyHbRDBBHTN7WO6L/VjSW433BgQDpk=; b=KdQdfxYMRuKIWjIrbV1cFk617d8J/426dw4YdaYA+6xktGMtipCzlKljTvL7s9qPtLROwZ If8uuqj0euC1/slsaNONqrBuNUYDal9LxOtchl6ginkF3ujr6I0EWBsV5AzJosiWqkUgi+ Gz1sHeSoFyR0qQJzx/oOscgWl0FSLHPFxFrnDC3bRIUJI0olxrComWkTS2cxIjW951fxe9 2FhGwmVtuR9c4u3f9zP9eu0G3kHHU256Vkry/5zNWWtO5v8p/g63IxiJQZAcn0/TkdTrwn suwON/95VhT5k+Z55ijBFGgJ8pIBMbu0MiSGbjq0rxbToyFmwBC2b+oUvgiuzQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1656605734; a=rsa-sha256; cv=none; b=XUoGL9FOSKh3ltuThAAj9pxscCEhWmZqABmgzZ8XR8MzKp74zVtP20RoPICsNrVU/6wVVu om4vqzt46d2owqmguNWwX4YeyqtKF9aDvQS3LI1Y3swglVregVC9miUim6Enahj6qcU75o 71zaCA/jnpkxrM+TlxNDNU6jZ/3p0Ir6kGQk7Eu1nhyz20XhLzLx7sdJ+zOXflASx1ZUu6 ieCr69TCAyscOrQv4KkNpMcGQU7ngeGsJ2g6okwSDF89pvJCvjziatMdGewR53vrAa+Aif 9Er7ixcfJwfwrVtk0ESj5QkNfcIbcTW3RfWbq/LcXjU76qpqa0Btj1GGrY/j1Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by mw: URL: https://cgit.FreeBSD.org/src/commit/?id=90232d18ca4f7a5a3073a8279a9b9d3228df5f87 commit 90232d18ca4f7a5a3073a8279a9b9d3228df5f87 Author: Dawid Gorecki AuthorDate: 2022-06-10 09:18:08 +0000 Commit: Marcin Wojtas CommitDate: 2022-06-30 15:31:37 +0000 ena: Prevent LLQ initialization when membar isn't exposed The ena_com_config_dev_mode() function performs many LLQ related calculations and sends an admin command to configure LLQ in the device. All the LLQ related operations are unnecessary if the driver fails to find LLQ memory bar. Move LLQ memory bar allocation to separate helper function ena_map_llq_mem_bar and execute this function before LLQ configuration. If the LLQ memory bar cannot be allocated, then LLQ configuration is skipped. Obtained from: Semihalf MFC after: 2 weeks Sponsored by: Amazon, Inc. --- sys/dev/ena/ena.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/sys/dev/ena/ena.c b/sys/dev/ena/ena.c index 4527d2e2f298..b8c9efb288ea 100644 --- a/sys/dev/ena/ena.c +++ b/sys/dev/ena/ena.c @@ -155,6 +155,7 @@ static int ena_setup_ifnet(device_t, struct ena_adapter *, static int ena_enable_wc(device_t, struct resource *); static int ena_set_queues_placement_policy(device_t, struct ena_com_dev *, struct ena_admin_feature_llq_desc *, struct ena_llq_configurations *); +static int ena_map_llq_mem_bar(device_t, struct ena_com_dev *); static uint32_t ena_calc_max_io_queue_num(device_t, struct ena_com_dev *, struct ena_com_dev_get_features_ctx *); static int ena_calc_io_queue_size(struct ena_calc_queue_size_ctx *); @@ -2571,8 +2572,7 @@ ena_set_queues_placement_policy(device_t pdev, struct ena_com_dev *ena_dev, struct ena_admin_feature_llq_desc *llq, struct ena_llq_configurations *llq_default_configurations) { - struct ena_adapter *adapter = device_get_softc(pdev); - int rc, rid; + int rc; uint32_t llq_feature_mask; llq_feature_mask = 1 << ENA_ADMIN_LLQ; @@ -2583,17 +2583,28 @@ ena_set_queues_placement_policy(device_t pdev, struct ena_com_dev *ena_dev, return (0); } + if (ena_dev->mem_bar == NULL) { + ena_log(pdev, WARN, + "LLQ is advertised as supported but device doesn't expose mem bar.\n"); + ena_dev->tx_mem_queue_type = ENA_ADMIN_PLACEMENT_POLICY_HOST; + return (0); + } + rc = ena_com_config_dev_mode(ena_dev, llq, llq_default_configurations); if (unlikely(rc != 0)) { ena_log(pdev, WARN, "Failed to configure the device mode. " "Fallback to host mode policy.\n"); ena_dev->tx_mem_queue_type = ENA_ADMIN_PLACEMENT_POLICY_HOST; - return (0); } - /* Nothing to config, exit */ - if (ena_dev->tx_mem_queue_type == ENA_ADMIN_PLACEMENT_POLICY_HOST) - return (0); + return (0); +} + +static int +ena_map_llq_mem_bar(device_t pdev, struct ena_com_dev *ena_dev) +{ + struct ena_adapter *adapter = device_get_softc(pdev); + int rc, rid; /* Try to allocate resources for LLQ bar */ rid = PCIR_BAR(ENA_MEM_BAR); @@ -3595,6 +3606,12 @@ ena_attach(device_t pdev) set_default_llq_configurations(&llq_config, &get_feat_ctx.llq); + rc = ena_map_llq_mem_bar(pdev, ena_dev); + if (unlikely(rc != 0)) { + ena_log(pdev, ERR, "failed to map ENA mem bar"); + goto err_com_free; + } + rc = ena_set_queues_placement_policy(pdev, ena_dev, &get_feat_ctx.llq, &llq_config); if (unlikely(rc != 0)) {