From patchwork Thu Apr 26 21:44:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 905390 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="Sz7EDb4z"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X9b30yGLz9s0v for ; Fri, 27 Apr 2018 07:45:03 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755137AbeDZVo7 (ORCPT ); Thu, 26 Apr 2018 17:44:59 -0400 Received: from mail-pf0-f196.google.com ([209.85.192.196]:39567 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754480AbeDZVo5 (ORCPT ); Thu, 26 Apr 2018 17:44:57 -0400 Received: by mail-pf0-f196.google.com with SMTP id z9so19394342pfe.6 for ; Thu, 26 Apr 2018 14:44:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Cy509bPFUkXZCWz5w80nBiM2hVujar07AH3dLSlSEls=; b=Sz7EDb4zQSa5azUIsIPspXn7vlPXo1NmTCO0pVCwn3Ez/tPjKJWpynKGd2imSJat05 duGtVXHHkIbjWcAOC/Wui39JozUVsCOTurs1DjiouqkakXloUcnFWGHJdrw/+9rlvZR7 9Dg01+RwHMu+mxyUzs04FoRkIX6M+IK+UHIrg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Cy509bPFUkXZCWz5w80nBiM2hVujar07AH3dLSlSEls=; b=eNrT2+ia89cYS9nnnBvI6O+/oeEaKZiy/rGKhP+XOXY3DsDJZb5dLVIgSqb1V1FT7T U8utW+v1OLXEd7cE/wJ9Gufmaf3LXpYnbXjEfE58vPfwYhrPGHsYwhiuYGYOZH3IEuxU P3dQ/VVjN48pAafq1W4XRGHCU91sFsGt0xdyTAaI8u8poP+K7Y8BaFXVdzpeNFqT4E0x zKfrcg3XpiiSNhBtHNgEsX08KFP1Mw8zRbqon10a6eChGKBXGlQOTp7L+enpzjEqHmkx AonnCCglc0leBrk+tMsLsQ57u99Q3MdC4InCtflVR3mnaglagQxnPKU0LZLMo/tiKBCM 7EYQ== X-Gm-Message-State: ALQs6tALJr805GWV2ZURAYYk84wnsFSdY9lWL5b58IN35CRBOE50Ccr2 LOdzm0BLrxzXZ9AYujHhbK5VnB0fJ7A= X-Google-Smtp-Source: AB8JxZq3A3olkwvevb3sAsu34Xbmv01YKP4uEavrTp9nTXAbyXnu4QpaV7cFA1NmzYKkVN8o1Ht2+w== X-Received: by 10.99.56.90 with SMTP id h26mr8886654pgn.147.1524779096714; Thu, 26 Apr 2018 14:44:56 -0700 (PDT) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id w7sm36026384pfn.83.2018.04.26.14.44.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 14:44:56 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org Subject: [PATCH net-next v2 01/14] bnxt_en: Add TC to hardware QoS queue mapping logic. Date: Thu, 26 Apr 2018 17:44:31 -0400 Message-Id: <1524779084-4016-2-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> References: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The current driver maps MQPRIO traffic classes directly 1:1 to the internal hardware queues (TC0 maps to hardware queue 0, etc). This direct mapping requires the internal hardware queues to be reconfigured from lossless to lossy and vice versa when necessary. This involves reconfiguring internal buffer thresholds which is disruptive and not always reliable. Implement a new scheme to map TCs to internal hardware queues by matching up their PFC requirements. This will eliminate the need to reconfigure a hardware queue internal buffers at run time. After remapping, the NIC is closed and opened for the new TC to hardware queues to take effect. This patch only adds the basic mapping logic. Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 5 ++- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 + drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c | 65 +++++++++++++++++---------- 3 files changed, 47 insertions(+), 24 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index f83769d..bda618d 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -2383,6 +2383,7 @@ static int bnxt_alloc_tx_rings(struct bnxt *bp) for (i = 0, j = 0; i < bp->tx_nr_rings; i++) { struct bnxt_tx_ring_info *txr = &bp->tx_ring[i]; struct bnxt_ring_struct *ring; + u8 qidx; ring = &txr->tx_ring_struct; @@ -2411,7 +2412,8 @@ static int bnxt_alloc_tx_rings(struct bnxt *bp) memset(txr->tx_push, 0, sizeof(struct tx_push_bd)); } - ring->queue_id = bp->q_info[j].queue_id; + qidx = bp->tc_to_qidx[j]; + ring->queue_id = bp->q_info[qidx].queue_id; if (i < bp->tx_nr_rings_xdp) continue; if (i % bp->tx_nr_rings_per_tc == (bp->tx_nr_rings_per_tc - 1)) @@ -5309,6 +5311,7 @@ static int bnxt_hwrm_queue_qportcfg(struct bnxt *bp) for (i = 0; i < bp->max_tc; i++) { bp->q_info[i].queue_id = *qptr++; bp->q_info[i].queue_profile = *qptr++; + bp->tc_to_qidx[i] = i; } qportcfg_exit: diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h index 3d55d3b..057f8a2 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h @@ -1242,6 +1242,7 @@ struct bnxt { u8 max_tc; u8 max_lltc; /* lossless TCs */ struct bnxt_queue_info q_info[BNXT_MAX_QUEUE]; + u8 tc_to_qidx[BNXT_MAX_QUEUE]; unsigned int current_interval; #define BNXT_TIMER_INTERVAL HZ diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c index 3c746f2..1b72f8a 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c @@ -21,6 +21,21 @@ #include "bnxt_dcb.h" #ifdef CONFIG_BNXT_DCB +static int bnxt_queue_to_tc(struct bnxt *bp, u8 queue_id) +{ + int i, j; + + for (i = 0; i < bp->max_tc; i++) { + if (bp->q_info[i].queue_id == queue_id) { + for (j = 0; j < bp->max_tc; j++) { + if (bp->tc_to_qidx[j] == i) + return j; + } + } + } + return -EINVAL; +} + static int bnxt_hwrm_queue_pri2cos_cfg(struct bnxt *bp, struct ieee_ets *ets) { struct hwrm_queue_pri2cos_cfg_input req = {0}; @@ -33,10 +48,13 @@ static int bnxt_hwrm_queue_pri2cos_cfg(struct bnxt *bp, struct ieee_ets *ets) pri2cos = &req.pri0_cos_queue_id; for (i = 0; i < IEEE_8021QAZ_MAX_TCS; i++) { + u8 qidx; + req.enables |= cpu_to_le32( QUEUE_PRI2COS_CFG_REQ_ENABLES_PRI0_COS_QUEUE_ID << i); - pri2cos[i] = bp->q_info[ets->prio_tc[i]].queue_id; + qidx = bp->tc_to_qidx[ets->prio_tc[i]]; + pri2cos[i] = bp->q_info[qidx].queue_id; } rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); return rc; @@ -55,17 +73,15 @@ static int bnxt_hwrm_queue_pri2cos_qcfg(struct bnxt *bp, struct ieee_ets *ets) rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); if (!rc) { u8 *pri2cos = &resp->pri0_cos_queue_id; - int i, j; + int i; for (i = 0; i < IEEE_8021QAZ_MAX_TCS; i++) { u8 queue_id = pri2cos[i]; + int tc; - for (j = 0; j < bp->max_tc; j++) { - if (bp->q_info[j].queue_id == queue_id) { - ets->prio_tc[i] = j; - break; - } - } + tc = bnxt_queue_to_tc(bp, queue_id); + if (tc >= 0) + ets->prio_tc[i] = tc; } } mutex_unlock(&bp->hwrm_cmd_lock); @@ -81,13 +97,15 @@ static int bnxt_hwrm_queue_cos2bw_cfg(struct bnxt *bp, struct ieee_ets *ets, void *data; bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_QUEUE_COS2BW_CFG, -1, -1); - data = &req.unused_0; - for (i = 0; i < max_tc; i++, data += sizeof(cos2bw) - 4) { + for (i = 0; i < max_tc; i++) { + u8 qidx; + req.enables |= cpu_to_le32( QUEUE_COS2BW_CFG_REQ_ENABLES_COS_QUEUE_ID0_VALID << i); memset(&cos2bw, 0, sizeof(cos2bw)); - cos2bw.queue_id = bp->q_info[i].queue_id; + qidx = bp->tc_to_qidx[i]; + cos2bw.queue_id = bp->q_info[qidx].queue_id; if (ets->tc_tsa[i] == IEEE_8021QAZ_TSA_STRICT) { cos2bw.tsa = QUEUE_COS2BW_QCFG_RESP_QUEUE_ID0_TSA_ASSIGN_SP; @@ -103,8 +121,9 @@ static int bnxt_hwrm_queue_cos2bw_cfg(struct bnxt *bp, struct ieee_ets *ets, cpu_to_le32((ets->tc_tx_bw[i] * 100) | BW_VALUE_UNIT_PERCENT1_100); } + data = &req.unused_0 + qidx * (sizeof(cos2bw) - 4); memcpy(data, &cos2bw.queue_id, sizeof(cos2bw) - 4); - if (i == 0) { + if (qidx == 0) { req.queue_id0 = cos2bw.queue_id; req.unused_0 = 0; } @@ -132,22 +151,22 @@ static int bnxt_hwrm_queue_cos2bw_qcfg(struct bnxt *bp, struct ieee_ets *ets) data = &resp->queue_id0 + offsetof(struct bnxt_cos2bw_cfg, queue_id); for (i = 0; i < bp->max_tc; i++, data += sizeof(cos2bw) - 4) { - int j; + int tc; memcpy(&cos2bw.queue_id, data, sizeof(cos2bw) - 4); if (i == 0) cos2bw.queue_id = resp->queue_id0; - for (j = 0; j < bp->max_tc; j++) { - if (bp->q_info[j].queue_id != cos2bw.queue_id) - continue; - if (cos2bw.tsa == - QUEUE_COS2BW_QCFG_RESP_QUEUE_ID0_TSA_ASSIGN_SP) { - ets->tc_tsa[j] = IEEE_8021QAZ_TSA_STRICT; - } else { - ets->tc_tsa[j] = IEEE_8021QAZ_TSA_ETS; - ets->tc_tx_bw[j] = cos2bw.bw_weight; - } + tc = bnxt_queue_to_tc(bp, cos2bw.queue_id); + if (tc < 0) + continue; + + if (cos2bw.tsa == + QUEUE_COS2BW_QCFG_RESP_QUEUE_ID0_TSA_ASSIGN_SP) { + ets->tc_tsa[tc] = IEEE_8021QAZ_TSA_STRICT; + } else { + ets->tc_tsa[tc] = IEEE_8021QAZ_TSA_ETS; + ets->tc_tx_bw[tc] = cos2bw.bw_weight; } } mutex_unlock(&bp->hwrm_cmd_lock); From patchwork Thu Apr 26 21:44:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 905403 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="Pgtl4q5A"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X9cN4NzCz9ry1 for ; Fri, 27 Apr 2018 07:46:12 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757124AbeDZVqK (ORCPT ); Thu, 26 Apr 2018 17:46:10 -0400 Received: from mail-pg0-f68.google.com ([74.125.83.68]:46859 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752962AbeDZVo6 (ORCPT ); Thu, 26 Apr 2018 17:44:58 -0400 Received: by mail-pg0-f68.google.com with SMTP id z4so4017728pgu.13 for ; Thu, 26 Apr 2018 14:44:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=OWUkBGF0bdrhQj3jRhjayPGcpk3qx46ETmTKE64xGI8=; b=Pgtl4q5AW2g8ELIn3ME++OEEUF1LZOPQXB9vgNl26TCnDi86VxMNEme1za38Cb8OdK DUxcfBCxwizHw5HVDlY76n1o4eZOjGIUSlVuJGpEZ7EMTP/28Mg1/YCJaVooxUWAB+Oe mywdQxpCeidN5FN24sQBXxwWdHgEu5dT/Dz4c= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=OWUkBGF0bdrhQj3jRhjayPGcpk3qx46ETmTKE64xGI8=; b=J1nwkOygrt/d0OTra1tlAbuQy7QzZd+YiltI1WyoAhzDnhcaHF8LVOtsWsa67pC8p9 Ne//p96w85KpLwOpbxm5ofQsAaPjz6OKtzvMJxf9xsdDKU60Sm8AXBxZnclE3I1exzM4 m0HPUFZQLi3LOqQ7WXjDmXonYGXLjOkEVdJyKCuutMJwyX56q2bskpQKLI5bjXJCPULn WP4HKbogg6ZHpAeq5OI1dQcJdhDtol+LNxM+GddpDGTEHXsUAhJdGITZn9kx/VAdUGIe mJ1mriicNHqiuRi78eZ1DqvcyV/BbGUbepiE13jhRwSHYFCbBuiNQbtzRACd+oa36qbj Jkow== X-Gm-Message-State: ALQs6tBJH/J5DO0llZsMm/nr4mghoOqAXsyMM9Jdu2R7+4zSnLrAshYH V22pAFWr/ttHjwXRQ0Mg4anNxw== X-Google-Smtp-Source: AB8JxZpuOqyKuLl/fA9pUuTdUG3ZqyvEbHFXTg7aNOct6YoNR/lVofNAAQkZTj7j8F24dix9HU28fg== X-Received: by 10.101.80.204 with SMTP id s12mr9619347pgp.313.1524779097590; Thu, 26 Apr 2018 14:44:57 -0700 (PDT) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id w7sm36026384pfn.83.2018.04.26.14.44.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 14:44:57 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org Subject: [PATCH net-next v2 02/14] bnxt_en: Remap TC to hardware queues when configuring PFC. Date: Thu, 26 Apr 2018 17:44:32 -0400 Message-Id: <1524779084-4016-3-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> References: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Initially, the MQPRIO TCs are mapped 1:1 directly to the hardware queues. Some of these hardware queues are configured to be lossless. When PFC is enabled on one of more TCs, we now need to remap the TCs that have PFC enabled to the lossless hardware queues. After remapping, we need to close and open the NIC for the new mapping to take effect. We also need to reprogram all ETS parameters. Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c | 101 +++++++++++++++----------- 1 file changed, 60 insertions(+), 41 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c index 1b72f8a..d5bc72c 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c @@ -173,44 +173,59 @@ static int bnxt_hwrm_queue_cos2bw_qcfg(struct bnxt *bp, struct ieee_ets *ets) return 0; } -static int bnxt_hwrm_queue_cfg(struct bnxt *bp, unsigned int lltc_mask) +static int bnxt_queue_remap(struct bnxt *bp, unsigned int lltc_mask) { - struct hwrm_queue_cfg_input req = {0}; - int i; + unsigned long qmap = 0; + int max = bp->max_tc; + int i, j, rc; - if (netif_running(bp->dev)) - bnxt_tx_disable(bp); + /* Assign lossless TCs first */ + for (i = 0, j = 0; i < max; ) { + if (lltc_mask & (1 << i)) { + if (BNXT_LLQ(bp->q_info[j].queue_profile)) { + bp->tc_to_qidx[i] = j; + __set_bit(j, &qmap); + i++; + } + j++; + continue; + } + i++; + } - bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_QUEUE_CFG, -1, -1); - req.flags = cpu_to_le32(QUEUE_CFG_REQ_FLAGS_PATH_BIDIR); - req.enables = cpu_to_le32(QUEUE_CFG_REQ_ENABLES_SERVICE_PROFILE); + for (i = 0, j = 0; i < max; i++) { + if (lltc_mask & (1 << i)) + continue; + j = find_next_zero_bit(&qmap, max, j); + bp->tc_to_qidx[i] = j; + __set_bit(j, &qmap); + j++; + } - /* Configure lossless queues to lossy first */ - req.service_profile = QUEUE_CFG_REQ_SERVICE_PROFILE_LOSSY; - for (i = 0; i < bp->max_tc; i++) { - if (BNXT_LLQ(bp->q_info[i].queue_profile)) { - req.queue_id = cpu_to_le32(bp->q_info[i].queue_id); - hwrm_send_message(bp, &req, sizeof(req), - HWRM_CMD_TIMEOUT); - bp->q_info[i].queue_profile = - QUEUE_CFG_REQ_SERVICE_PROFILE_LOSSY; + if (netif_running(bp->dev)) { + bnxt_close_nic(bp, false, false); + rc = bnxt_open_nic(bp, false, false); + if (rc) { + netdev_warn(bp->dev, "failed to open NIC, rc = %d\n", rc); + return rc; } } - - /* Now configure desired queues to lossless */ - req.service_profile = QUEUE_CFG_REQ_SERVICE_PROFILE_LOSSLESS; - for (i = 0; i < bp->max_tc; i++) { - if (lltc_mask & (1 << i)) { - req.queue_id = cpu_to_le32(bp->q_info[i].queue_id); - hwrm_send_message(bp, &req, sizeof(req), - HWRM_CMD_TIMEOUT); - bp->q_info[i].queue_profile = - QUEUE_CFG_REQ_SERVICE_PROFILE_LOSSLESS; + if (bp->ieee_ets) { + int tc = netdev_get_num_tc(bp->dev); + + if (!tc) + tc = 1; + rc = bnxt_hwrm_queue_cos2bw_cfg(bp, bp->ieee_ets, tc); + if (rc) { + netdev_warn(bp->dev, "failed to config BW, rc = %d\n", rc); + return rc; + } + rc = bnxt_hwrm_queue_pri2cos_cfg(bp, bp->ieee_ets); + if (rc) { + netdev_warn(bp->dev, "failed to config prio, rc = %d\n", rc); + return rc; } } - if (netif_running(bp->dev)) - bnxt_tx_enable(bp); - return 0; } @@ -220,7 +235,7 @@ static int bnxt_hwrm_queue_pfc_cfg(struct bnxt *bp, struct ieee_pfc *pfc) struct ieee_ets *my_ets = bp->ieee_ets; unsigned int tc_mask = 0, pri_mask = 0; u8 i, pri, lltc_count = 0; - bool need_q_recfg = false; + bool need_q_remap = false; int rc; if (!my_ets) @@ -240,21 +255,25 @@ static int bnxt_hwrm_queue_pfc_cfg(struct bnxt *bp, struct ieee_pfc *pfc) if (lltc_count > bp->max_lltc) return -EINVAL; - bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_QUEUE_PFCENABLE_CFG, -1, -1); - req.flags = cpu_to_le32(pri_mask); - rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); - if (rc) - return rc; - for (i = 0; i < bp->max_tc; i++) { if (tc_mask & (1 << i)) { - if (!BNXT_LLQ(bp->q_info[i].queue_profile)) - need_q_recfg = true; + u8 qidx = bp->tc_to_qidx[i]; + + if (!BNXT_LLQ(bp->q_info[qidx].queue_profile)) { + need_q_remap = true; + break; + } } } - if (need_q_recfg) - rc = bnxt_hwrm_queue_cfg(bp, tc_mask); + if (need_q_remap) + rc = bnxt_queue_remap(bp, tc_mask); + + bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_QUEUE_PFCENABLE_CFG, -1, -1); + req.flags = cpu_to_le32(pri_mask); + rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); + if (rc) + return rc; return rc; } From patchwork Thu Apr 26 21:44:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 905401 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="ZVlqNfAt"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X9cB5hWJz9ry1 for ; Fri, 27 Apr 2018 07:46:02 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757088AbeDZVp7 (ORCPT ); Thu, 26 Apr 2018 17:45:59 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:35228 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754032AbeDZVo7 (ORCPT ); Thu, 26 Apr 2018 17:44:59 -0400 Received: by mail-pg0-f67.google.com with SMTP id j11so16921877pgf.2 for ; Thu, 26 Apr 2018 14:44:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=uILBntGLciQHVnWnqknK03qOYJKom/LpjQqt35n23bI=; b=ZVlqNfAte3pEDCznkDce7x0vtlyPmIntS4YVsvyf0LdC1aBqMk9fDVid4jJ9IvWAYO nkaFa4rRjHSOSjItGkmJqj1SvHOreI5tUxOfMLbiXLT03uQWY1OuLHRieIYxB/F5frxz ZvzUmy6PI1NwxGAigpH6JLq00cFzke8mnL0DM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=uILBntGLciQHVnWnqknK03qOYJKom/LpjQqt35n23bI=; b=XhZBJkUbF/Rc6qeAbUoTU4YXnSunDnVDYtnor0NxrvqYX54cP314GoIcHBuC+N8SC1 oYE8T8f47n1741sTrglB0LM2+2e0BeVD7PZhdfrcj+fVPOCFjIQO0SAGjs8vcK8dF0q6 yrrAlc14/8zLW1Z+Ihc4ML0emsxCdRQrFSNTXYCiZtw7YsIxyBbZlFqTlvJpNnqfgd7J DmBGwciMmjhzeyjPFkZVobhU0i9L3AcyQz1/eeGz70bqCrKc35pbBdSjZlNIHcYCUggP xMvxqaL0bXrLHa7JqyPyyWdwubnYUaSENiNNC7AfHEeWjxPi4G6BHQ6bIev3pr2ZTNvo u6zw== X-Gm-Message-State: ALQs6tA1tTl4V0XNb9etbbmb7NNXL63tRe+D8LkpqNJgn+ZvYdKt4KNj W8CvYK1c8vgZbsyw4ssEbIInPQ== X-Google-Smtp-Source: AIpwx4+1hGfkokPT6FAAR5oDtjwy7OMmWWpM/8gwtsBZAQ5jS4quDw719EOd4c2NSMF29qhFQ9qqSw== X-Received: by 10.99.52.76 with SMTP id b73mr29316341pga.258.1524779098594; Thu, 26 Apr 2018 14:44:58 -0700 (PDT) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id w7sm36026384pfn.83.2018.04.26.14.44.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 14:44:57 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org Subject: [PATCH net-next v2 03/14] bnxt_en: Check the lengths of encapsulated firmware responses. Date: Thu, 26 Apr 2018 17:44:33 -0400 Message-Id: <1524779084-4016-4-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> References: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Firmware messages that are forwarded from PF to VFs are encapsulated. The size of these encapsulated messages must not exceed the maximum defined message size. Add appropriate checks to avoid oversize messages. Firmware messages may be expanded in future specs and this will provide some guardrails to avoid data corruption. Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | 9 +++++++++ drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c index f952963..18ee471 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c @@ -809,6 +809,9 @@ static int bnxt_hwrm_fwd_resp(struct bnxt *bp, struct bnxt_vf_info *vf, struct hwrm_fwd_resp_input req = {0}; struct hwrm_fwd_resp_output *resp = bp->hwrm_cmd_resp_addr; + if (BNXT_FWD_RESP_SIZE_ERR(msg_size)) + return -EINVAL; + bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FWD_RESP, -1, -1); /* Set the new target id */ @@ -845,6 +848,9 @@ static int bnxt_hwrm_fwd_err_resp(struct bnxt *bp, struct bnxt_vf_info *vf, struct hwrm_reject_fwd_resp_input req = {0}; struct hwrm_reject_fwd_resp_output *resp = bp->hwrm_cmd_resp_addr; + if (BNXT_REJ_FWD_RESP_SIZE_ERR(msg_size)) + return -EINVAL; + bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_REJECT_FWD_RESP, -1, -1); /* Set the new target id */ req.target_id = cpu_to_le16(vf->fw_fid); @@ -877,6 +883,9 @@ static int bnxt_hwrm_exec_fwd_resp(struct bnxt *bp, struct bnxt_vf_info *vf, struct hwrm_exec_fwd_resp_input req = {0}; struct hwrm_exec_fwd_resp_output *resp = bp->hwrm_cmd_resp_addr; + if (BNXT_EXEC_FWD_RESP_SIZE_ERR(msg_size)) + return -EINVAL; + bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_EXEC_FWD_RESP, -1, -1); /* Set the new target id */ req.target_id = cpu_to_le16(vf->fw_fid); diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h index d10f6f6..6f6d850 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h @@ -11,6 +11,18 @@ #ifndef BNXT_SRIOV_H #define BNXT_SRIOV_H +#define BNXT_FWD_RESP_SIZE_ERR(n) \ + ((offsetof(struct hwrm_fwd_resp_input, encap_resp) + n) > \ + sizeof(struct hwrm_fwd_resp_input)) + +#define BNXT_EXEC_FWD_RESP_SIZE_ERR(n) \ + ((offsetof(struct hwrm_exec_fwd_resp_input, encap_request) + n) >\ + offsetof(struct hwrm_exec_fwd_resp_input, encap_resp_target_id)) + +#define BNXT_REJ_FWD_RESP_SIZE_ERR(n) \ + ((offsetof(struct hwrm_reject_fwd_resp_input, encap_request) + n) >\ + offsetof(struct hwrm_reject_fwd_resp_input, encap_resp_target_id)) + int bnxt_get_vf_config(struct net_device *, int, struct ifla_vf_info *); int bnxt_set_vf_mac(struct net_device *, int, u8 *); int bnxt_set_vf_vlan(struct net_device *, int, u16, u8, __be16); From patchwork Thu Apr 26 21:44:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 905399 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="Uuxuswda"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X9bs4PrQz9ry1 for ; Fri, 27 Apr 2018 07:45:45 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755697AbeDZVpD (ORCPT ); Thu, 26 Apr 2018 17:45:03 -0400 Received: from mail-pg0-f65.google.com ([74.125.83.65]:38938 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754480AbeDZVpA (ORCPT ); Thu, 26 Apr 2018 17:45:00 -0400 Received: by mail-pg0-f65.google.com with SMTP id b9so16917740pgf.6 for ; Thu, 26 Apr 2018 14:45:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=nz+iN1zqpqKGjPwViU2TgF6pxHtpelnWDld5gcm0Fts=; b=Uuxuswdae9K3mjJqVGAod7ozNnDeXJTOiUFiEsstYce4/O2qYxk/5eMew7HBMM3wSm hQh1hVigLbJtuLnPzLOGFt0vZcY39lnKn2FvbiHzG9K6u7kdZAPppkGf6P8TMRO7WjjM 3rTN+LPOr2mEZnGxeVGa9qknsFZ3/JojhXgmU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=nz+iN1zqpqKGjPwViU2TgF6pxHtpelnWDld5gcm0Fts=; b=E+n2InToExHVm+HPHKBzNClYwWNNODMlm3UdY+Qpl675O49017y7JQ9QHIpJN5nONO DCLIzl522smPkQh78WnX73jlI3QkJRzxYPqg1r3jpLoowCv54Kdp58BCp6hVqkxN7614 w4DGf08M0vMzXqsP2Zw9LA9CaKuK4nQGRekYTQbK3tY0Y5dnQMMXdvIKRr3eX6wuFrAo CBG124zLfDnq55T2gR/lJX3PePZV4Bkaf9IINGVM5YA7XD8hvR8t0U3ElvyhYOGI8yyy gw3Ksdy+jUhgthBcpmKzEAJDO+Bc5B6tfwkRkbua5UabKdMB9YkpVMH7xLCz7ZsRI0mn F0dQ== X-Gm-Message-State: ALQs6tAqocvOW0qoWxkIGyn9WGkRT3bpYUceA9/NdI73VqWQKpIBbWPI ye0SJoISdD3OHw1CzJy9GcgepA== X-Google-Smtp-Source: AIpwx49B1qsuPJnOikq5p7mO8jpI1s7a+0Np7TT1AyqEKsxBitNEIGmIq/t6Ydpi1gMLSpjh9KSZ2A== X-Received: by 10.99.99.68 with SMTP id x65mr29067809pgb.34.1524779099468; Thu, 26 Apr 2018 14:44:59 -0700 (PDT) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id w7sm36026384pfn.83.2018.04.26.14.44.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 14:44:58 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org Subject: [PATCH net-next v2 04/14] bnxt_en: Do not set firmware time from VF driver on older firmware. Date: Thu, 26 Apr 2018 17:44:34 -0400 Message-Id: <1524779084-4016-5-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> References: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Older firmware will reject this call and cause an error message to be printed by the VF driver. Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index bda618d..aff4b4e 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -5379,7 +5379,8 @@ int bnxt_hwrm_fw_set_time(struct bnxt *bp) struct tm tm; time64_t now = ktime_get_real_seconds(); - if (bp->hwrm_spec_code < 0x10400) + if ((BNXT_VF(bp) && bp->hwrm_spec_code < 0x10901) || + bp->hwrm_spec_code < 0x10400) return -EOPNOTSUPP; time64_to_tm(now, 0, &tm); From patchwork Thu Apr 26 21:44:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 905391 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="gUDtGGwF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X9b707svz9ry1 for ; Fri, 27 Apr 2018 07:45:07 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756261AbeDZVpE (ORCPT ); Thu, 26 Apr 2018 17:45:04 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:45450 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755293AbeDZVpB (ORCPT ); Thu, 26 Apr 2018 17:45:01 -0400 Received: by mail-pf0-f194.google.com with SMTP id c10so31579pfi.12 for ; Thu, 26 Apr 2018 14:45:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8DmLYY6AsRT1FYFfi4/FX+dIjv7D7LwCmEF5ke+e+wU=; b=gUDtGGwFfqfs18fT1bENsjO8pyrd1DAchE3ffxdBt39Zw3vTfHClZwFHhRxurlc+vQ 3q7VVkoyowORL+NZ1NkNGMrYOuZtoYlnMRwAgDjZtQes17L6y2Em10qKiHBhwzUciE1l +UuEMqfzncHiBQhGot9m6yDjlwKlH8kLNoedI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8DmLYY6AsRT1FYFfi4/FX+dIjv7D7LwCmEF5ke+e+wU=; b=dio0LLwokc2v80SZx52jetEHzVIWG4Ozcf4fUnDpT9uYh3MkgA7mKxpDQfihCWZcrG LC1crW6joRpn6S+kiO9kQME3kzpyTz3XFRiB28cht+0QPne43dIKsp3cZg0+Tc/y1Ay4 yESPHpiiGXxMlubgsUN97T+jq4mUVSJvMSAURatDJXFFfZO4yPxF+2yW1kkKaqpEX1ES tpLtuOx5qyU6Fu7yRHk8CyFcpwG/El2gc04P9jk/aILW8JjnDe2/HJDY2oYkGut5Lgzx TedI3JgeYM/eCb0UEVHUgJdQyBRuzRYPxxYR3D+K0hASySs1ZIMHz6dP9QlVpGZ7hBB2 hT1A== X-Gm-Message-State: ALQs6tDWMmzfpp614YFzQtueTNIRF+7s6hkIlCV6SvnLZrVwA2VsTXz1 0gZqCPRZkMvwVycaVOH+SHAZ2w== X-Google-Smtp-Source: AIpwx49zqunl2Sm9D7EMhD9H5nLKJ72b9X+iiVM5fYJ3e00utEIxhJzNpDEN+oayBKaoazanvIqj6w== X-Received: by 10.99.37.196 with SMTP id l187mr29128961pgl.221.1524779100429; Thu, 26 Apr 2018 14:45:00 -0700 (PDT) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id w7sm36026384pfn.83.2018.04.26.14.44.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 14:44:59 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org Subject: [PATCH net-next v2 05/14] bnxt_en: Simplify ring alloc/free error messages. Date: Thu, 26 Apr 2018 17:44:35 -0400 Message-Id: <1524779084-4016-6-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> References: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Replace switch statements printing different messages for every ring type with a common message. Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 43 +++++-------------------------- 1 file changed, 6 insertions(+), 37 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index aff4b4e..b83c2ac 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -4336,26 +4336,9 @@ static int hwrm_ring_alloc_send_msg(struct bnxt *bp, mutex_unlock(&bp->hwrm_cmd_lock); if (rc || err) { - switch (ring_type) { - case RING_FREE_REQ_RING_TYPE_L2_CMPL: - netdev_err(bp->dev, "hwrm_ring_alloc cp failed. rc:%x err:%x\n", - rc, err); - return -1; - - case RING_FREE_REQ_RING_TYPE_RX: - netdev_err(bp->dev, "hwrm_ring_alloc rx failed. rc:%x err:%x\n", - rc, err); - return -1; - - case RING_FREE_REQ_RING_TYPE_TX: - netdev_err(bp->dev, "hwrm_ring_alloc tx failed. rc:%x err:%x\n", - rc, err); - return -1; - - default: - netdev_err(bp->dev, "Invalid ring\n"); - return -1; - } + netdev_err(bp->dev, "hwrm_ring_alloc type %d failed. rc:%x err:%x\n", + ring_type, rc, err); + return -EIO; } ring->fw_ring_id = ring_id; return rc; @@ -4479,23 +4462,9 @@ static int hwrm_ring_free_send_msg(struct bnxt *bp, mutex_unlock(&bp->hwrm_cmd_lock); if (rc || error_code) { - switch (ring_type) { - case RING_FREE_REQ_RING_TYPE_L2_CMPL: - netdev_err(bp->dev, "hwrm_ring_free cp failed. rc:%d\n", - rc); - return rc; - case RING_FREE_REQ_RING_TYPE_RX: - netdev_err(bp->dev, "hwrm_ring_free rx failed. rc:%d\n", - rc); - return rc; - case RING_FREE_REQ_RING_TYPE_TX: - netdev_err(bp->dev, "hwrm_ring_free tx failed. rc:%d\n", - rc); - return rc; - default: - netdev_err(bp->dev, "Invalid ring\n"); - return -1; - } + netdev_err(bp->dev, "hwrm_ring_free type %d failed. rc:%x err:%x\n", + ring_type, rc, error_code); + return -EIO; } return 0; } From patchwork Thu Apr 26 21:44:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 905392 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="Nl9fjRyc"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X9b860HJz9ry1 for ; Fri, 27 Apr 2018 07:45:08 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756516AbeDZVpG (ORCPT ); Thu, 26 Apr 2018 17:45:06 -0400 Received: from mail-pg0-f68.google.com ([74.125.83.68]:43706 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754048AbeDZVpB (ORCPT ); Thu, 26 Apr 2018 17:45:01 -0400 Received: by mail-pg0-f68.google.com with SMTP id f132so16918787pgc.10 for ; Thu, 26 Apr 2018 14:45:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=pnmu7syQDWdMMTJaR4UbXnpFqr+r/pxaWAmhFU62y3k=; b=Nl9fjRychsgbZejYL25pYiTvAsY7oqyOKLvORm/18nEM2EryOE5r0/hwupSZeVfS64 qSjTUUlWQxK2eCEPHwdorihKMC8aCfzzZhbG0cyxX2rOA+VJlbC0I5zb708hzX81Nb+C 39BH4Pc3HGNl+nSJw/TztB7A67JpSGcPX+zHc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=pnmu7syQDWdMMTJaR4UbXnpFqr+r/pxaWAmhFU62y3k=; b=h/AGvym97XVBqHQNcc+qjsNTFcReZ+oRyXv8KezfL/XlU97fX4L3e5XPRc+PSNwetx /TltMhOJNik8HVyo957QjkAxB+Xotis7mdgxBicqT3FLB0amT7pujSM69JSk0gqjKzB3 NoRtZhv0EyicFvH/vqRixWHTzPAmQEcC3WqScbFYTacLXE1JDQ27m2jglDat+ygkW65Q G6a7F+m7n0DrpRcO3LCb8/vYdUyQqSzJly7wvPparqlP95dW6xf/tDxlWwL6KvwjXf5A nq8cQe3NXR9G7p1uMopFZ7M/ZYBo7XDeWSEyYzL4eAAM1k0ayCgYfINc23GCDFzBy038 5+Ng== X-Gm-Message-State: ALQs6tAX2kbQL1cPHUFm0gYoRqOFy5yte4+ERI1wxBn9Zfm4MhBAUXOe noM6va5HT5LXgJ8pGLWWzqQFUw== X-Google-Smtp-Source: AIpwx4+zlE/yq7UWusSzID4q41Prm2L2YdF06j4RGuvLMTnIS4scFifopVszSPe5Zv1WqHISniHVmw== X-Received: by 10.99.2.199 with SMTP id 190mr29592927pgc.11.1524779101238; Thu, 26 Apr 2018 14:45:01 -0700 (PDT) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id w7sm36026384pfn.83.2018.04.26.14.45.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 14:45:00 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org, Vasundhara Volam Subject: [PATCH net-next v2 06/14] bnxt_en: Display function level rx/tx_discard_pkts via ethtool Date: Thu, 26 Apr 2018 17:44:36 -0400 Message-Id: <1524779084-4016-7-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> References: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Vasundhara Volam Add counters to display sum of rx/tx_discard_pkts of all rings as function level statistics via ethtool. Signed-off-by: Vasundhara Volam Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 33 +++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c index 8ba14ae..0ea8466 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c @@ -140,6 +140,19 @@ static int bnxt_set_coalesce(struct net_device *dev, #define BNXT_RX_STATS_EXT_ENTRY(counter) \ { BNXT_RX_STATS_EXT_OFFSET(counter), __stringify(counter) } +enum { + RX_TOTAL_DISCARDS, + TX_TOTAL_DISCARDS, +}; + +static struct { + u64 counter; + char string[ETH_GSTRING_LEN]; +} bnxt_sw_func_stats[] = { + {0, "rx_total_discard_pkts"}, + {0, "tx_total_discard_pkts"}, +}; + static const struct { long offset; char string[ETH_GSTRING_LEN]; @@ -237,6 +250,7 @@ static int bnxt_set_coalesce(struct net_device *dev, BNXT_RX_STATS_EXT_ENTRY(resume_roce_pause_events), }; +#define BNXT_NUM_SW_FUNC_STATS ARRAY_SIZE(bnxt_sw_func_stats) #define BNXT_NUM_PORT_STATS ARRAY_SIZE(bnxt_port_stats_arr) #define BNXT_NUM_PORT_STATS_EXT ARRAY_SIZE(bnxt_port_stats_ext_arr) @@ -244,6 +258,8 @@ static int bnxt_get_num_stats(struct bnxt *bp) { int num_stats = BNXT_NUM_STATS * bp->cp_nr_rings; + num_stats += BNXT_NUM_SW_FUNC_STATS; + if (bp->flags & BNXT_FLAG_PORT_STATS) num_stats += BNXT_NUM_PORT_STATS; @@ -279,6 +295,9 @@ static void bnxt_get_ethtool_stats(struct net_device *dev, if (!bp->bnapi) return; + for (i = 0; i < BNXT_NUM_SW_FUNC_STATS; i++) + bnxt_sw_func_stats[i].counter = 0; + for (i = 0; i < bp->cp_nr_rings; i++) { struct bnxt_napi *bnapi = bp->bnapi[i]; struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring; @@ -288,7 +307,16 @@ static void bnxt_get_ethtool_stats(struct net_device *dev, for (k = 0; k < stat_fields; j++, k++) buf[j] = le64_to_cpu(hw_stats[k]); buf[j++] = cpr->rx_l4_csum_errors; + + bnxt_sw_func_stats[RX_TOTAL_DISCARDS].counter += + le64_to_cpu(cpr->hw_stats->rx_discard_pkts); + bnxt_sw_func_stats[TX_TOTAL_DISCARDS].counter += + le64_to_cpu(cpr->hw_stats->tx_discard_pkts); } + + for (i = 0; i < BNXT_NUM_SW_FUNC_STATS; i++, j++) + buf[j] = bnxt_sw_func_stats[i].counter; + if (bp->flags & BNXT_FLAG_PORT_STATS) { __le64 *port_stats = (__le64 *)bp->hw_rx_port_stats; @@ -359,6 +387,11 @@ static void bnxt_get_strings(struct net_device *dev, u32 stringset, u8 *buf) sprintf(buf, "[%d]: rx_l4_csum_errors", i); buf += ETH_GSTRING_LEN; } + for (i = 0; i < BNXT_NUM_SW_FUNC_STATS; i++) { + strcpy(buf, bnxt_sw_func_stats[i].string); + buf += ETH_GSTRING_LEN; + } + if (bp->flags & BNXT_FLAG_PORT_STATS) { for (i = 0; i < BNXT_NUM_PORT_STATS; i++) { strcpy(buf, bnxt_port_stats_arr[i].string); From patchwork Thu Apr 26 21:44:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 905402 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="Jcg67xZs"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X9cG4vnRz9ry1 for ; Fri, 27 Apr 2018 07:46:06 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757069AbeDZVp6 (ORCPT ); Thu, 26 Apr 2018 17:45:58 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:33179 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755332AbeDZVpC (ORCPT ); Thu, 26 Apr 2018 17:45:02 -0400 Received: by mail-pf0-f194.google.com with SMTP id f15so19399791pfn.0 for ; Thu, 26 Apr 2018 14:45:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=CGsg6/eTBmbwypbAwxoPPqG4txcK3OHVmCUp3wQ4AfY=; b=Jcg67xZsTGcfe9gVCDM3XYBAmOrUmPoVP0z0yPoA7f2dJw6oCr+KPW1svx6OkToJzj WaCFq8GAVWFw4OACYRaiNsccVA5BHgf1yE8SDma77Zllvbe6RMkim0/gZA3yhCCijxhm dJYL4pDck4tRj7paxISNLBiG7zkTlXPFZdl44= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=CGsg6/eTBmbwypbAwxoPPqG4txcK3OHVmCUp3wQ4AfY=; b=kmmjpT7EHVpm0ML1xup888EYJHuOidCjGeXgfFK+uzlS4CSYFdYgUCadisLW4Up+gf n6qiUflLSoXGdRnN2ORG0ujRCmrbgRbl51J+yFvvLC/AIf7s5NhEd/+Wfy8Da3PP5I4I c2pr5pBuRg+L1bhvVfqGn+dlmGzG0TdMMpU2kbz1wE6JPnCRGIWwDfv5B46pRhkBf641 eYwS7PAGGCVvX9Bx3A9a6izEOHAfq4f8f0gK1RjMcZ1V/gI0cTYELKDX0wd4DXAjcZH7 Ken4dJ7cxtP2/UZ5+FYeGT06yqCw4Pi+ObZgXoP7cZdL/UksbOGvUflx5rq3cgYoCayF NFWw== X-Gm-Message-State: ALQs6tDITzIh6TrYAFRsZyQ5sK1SRpU5qya5yMDSUvWRs+AzXyoHPnfZ +Uh9Gq52scgphDjsIdi+WNxbnoIcOgA= X-Google-Smtp-Source: AIpwx4/Z52vzV3REU3hy2EMj/70tBugYPIzPJvLPyDnxQQc4hiPmlWbZz2mT+OVl7hR9sP+2r0YY/Q== X-Received: by 10.101.97.200 with SMTP id j8mr29070354pgv.443.1524779102025; Thu, 26 Apr 2018 14:45:02 -0700 (PDT) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id w7sm36026384pfn.83.2018.04.26.14.45.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 14:45:01 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org Subject: [PATCH net-next v2 07/14] bnxt_en: Do not allow VF to read EEPROM. Date: Thu, 26 Apr 2018 17:44:37 -0400 Message-Id: <1524779084-4016-8-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> References: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Firmware does not allow the operation and would return failure, causing a warning in dmesg. So check for VF and disallow it in the driver. Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c index 0ea8466..a699ca54 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c @@ -1818,6 +1818,11 @@ static int nvm_get_dir_info(struct net_device *dev, u32 *entries, u32 *length) static int bnxt_get_eeprom_len(struct net_device *dev) { + struct bnxt *bp = netdev_priv(dev); + + if (BNXT_VF(bp)) + return 0; + /* The -1 return value allows the entire 32-bit range of offsets to be * passed via the ethtool command-line utility. */ From patchwork Thu Apr 26 21:44:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 905400 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="EYI5CRF+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X9bv0W0cz9ry1 for ; Fri, 27 Apr 2018 07:45:47 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757022AbeDZVpo (ORCPT ); Thu, 26 Apr 2018 17:45:44 -0400 Received: from mail-pg0-f68.google.com ([74.125.83.68]:35244 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755546AbeDZVpD (ORCPT ); Thu, 26 Apr 2018 17:45:03 -0400 Received: by mail-pg0-f68.google.com with SMTP id j11so16922010pgf.2 for ; Thu, 26 Apr 2018 14:45:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=an+zB+3e5HeLV2Pr6dkKcxCrEl+FSWweSVy+uOK9PsQ=; b=EYI5CRF+RxFd15pQl8G8uU/9956jxvVzRenUOl8I7YLESEaWq31iENSoEIHE8WGkGJ 2yrJdb87S+haQXYV/77Zc3Qw0BSYZh+BxcYFEWyIxV+VdPiP/5T9ujmU8ICj7gjsMOw2 okOZ3lLXxlVVADHxhxvSels8svEVglvgTk3Bo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=an+zB+3e5HeLV2Pr6dkKcxCrEl+FSWweSVy+uOK9PsQ=; b=g6m2HCwnIsh6i1P+Vi8DPuxPhK9DyQyDE437RWLNmEsu4PYHhF5v3FIimhkmdR9CRU SSUa1QdbCGD9pwuXgeav6I3Xh/3hs6sJnSIc7eDnWEh15R0ItfZ7JZeN4813pgJBdxY+ piLSaouZo3sYtscTofbaFBMFQs8QWOaqaHpfILkzYdw+27LZDu8924a5AKQsa7WqUokg /ic7lSc2R7IKj+DmNK56HzRAQuyOHGAJ1zctnkHL8UVVDPVE5bxPZoS7cCL4ZRB5Fq/O 7wiYXfgPXFwVALgIpfBpybaTBNP+ajiTANC9vnHVXhdHR8FE4MluP41W7re4/+uJk6qr EMiA== X-Gm-Message-State: ALQs6tBmmok/rAZi26Y9IofVAoa25CLO+5n/AyGmae8FhIYK082OcTqI qPKsb3hVBIUZu56AUCpLHG2Z0w== X-Google-Smtp-Source: AB8JxZpNQRv9LTnbKMypJXKg0bJmXqhXREEht7m5oV38ZThmkFrGFuOdN6Ug6uaRl3WW2jyE5Y0A0Q== X-Received: by 10.99.65.197 with SMTP id o188mr11376328pga.280.1524779102997; Thu, 26 Apr 2018 14:45:02 -0700 (PDT) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id w7sm36026384pfn.83.2018.04.26.14.45.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 14:45:02 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org, Andy Gospodarek Subject: [PATCH net-next v2 08/14] bnxt_en: Increase RING_IDLE minimum threshold to 50 Date: Thu, 26 Apr 2018 17:44:38 -0400 Message-Id: <1524779084-4016-9-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> References: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Andy Gospodarek This keeps the RING_IDLE flag set in hardware for higher coalesce settings by default and improved latency. Signed-off-by: Andy Gospodarek Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index b83c2ac..a221a10 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -7702,7 +7702,7 @@ static void bnxt_init_dflt_coal(struct bnxt *bp) coal->coal_bufs = 30; coal->coal_ticks_irq = 1; coal->coal_bufs_irq = 2; - coal->idle_thresh = 25; + coal->idle_thresh = 50; coal->bufs_per_record = 2; coal->budget = 64; /* NAPI budget */ From patchwork Thu Apr 26 21:44:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 905398 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="bp/khu5D"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X9bl45P4z9ry1 for ; Fri, 27 Apr 2018 07:45:39 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756977AbeDZVph (ORCPT ); Thu, 26 Apr 2018 17:45:37 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:38697 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755995AbeDZVpE (ORCPT ); Thu, 26 Apr 2018 17:45:04 -0400 Received: by mail-pf0-f194.google.com with SMTP id o76so14672244pfi.5 for ; Thu, 26 Apr 2018 14:45:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=qtN8sfKDN0eiIlwxKQYvF88AJPHptz14vsl3oVcamBs=; b=bp/khu5Dg6mJIIreu8WKclInYdO5aysM0XVB/ROd9NGQtJPGY8ZDbG6i9Gz84TrF6h SlMHRnDTtDGq+ItH5Z7DpRQcri1o8WJvjCuoGkcroWJtb/Yomg1qv+wSnaO6Y+9mC4Wn 8agfsGEqoPjzyMsBLgw8LGGXICqeZYK/+goeI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=qtN8sfKDN0eiIlwxKQYvF88AJPHptz14vsl3oVcamBs=; b=rsH34VSIV6nyFVEZ7KcmD7Ft+ZllN/ckcFC2QVw1ZxVAEayzblBSXn5CMVefQnn/4I 7msCwBHn3dp7UIoTwvUghrJ9CjiCOFPJDXDmhn8Z6RbiiFM7F0plRH60WFNU64FY4mho 6W1/Spof02E5bodcY6xs9W4H4IV8/rJ4eWJKq0Vaf8ULTlXiTqyYwtqBgjsrFI7HKOU3 aEPkpSVth+Q7oR8mlyBQc4fisJu8DC9zKl1hpb38Jvg50aaNNcFL91ETAJxCQgIx/NQV bCxdINeHFUMMa5EWKiRYOjiQ7fEDUdzeJ0Wg/zKZ4Fj+72zORg9kfh/oodhClVU+h+GE ZpoA== X-Gm-Message-State: ALQs6tCrlTH9yC/+lr41FpnKJ+6EGap+cIRADHHpJEKW5dHLBVOpstem S40KzxsfNeipC9yrg/viotzRps7hJhk= X-Google-Smtp-Source: AIpwx4+90EmQx9ZHgejtn3rg222ofaMzRMFrV6l0j0HnFn7dWia8p4HzXuHgkp4tBUiEhpMg/Pd5pw== X-Received: by 10.101.87.201 with SMTP id q9mr29508782pgr.215.1524779103954; Thu, 26 Apr 2018 14:45:03 -0700 (PDT) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id w7sm36026384pfn.83.2018.04.26.14.45.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 14:45:03 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org, Andy Gospodarek Subject: [PATCH net-next v2 09/14] bnxt_en: reduce timeout on initial HWRM calls Date: Thu, 26 Apr 2018 17:44:39 -0400 Message-Id: <1524779084-4016-10-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> References: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Andy Gospodarek Testing with DIM enabled on older kernels indicated that firmware calls were slower than expected. More detailed analysis indicated that the default 25us delay was higher than necessary. Reducing the time spend in usleep_range() for the first several calls would reduce the overall latency of firmware calls on newer Intel processors. Signed-off-by: Andy Gospodarek Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 26 +++++++++++++++++++++++--- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 6 ++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index a221a10..ff9a5cd 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -3495,15 +3495,29 @@ static int bnxt_hwrm_do_send_msg(struct bnxt *bp, void *msg, u32 msg_len, if (!timeout) timeout = DFLT_HWRM_CMD_TIMEOUT; + /* convert timeout to usec */ + timeout *= 1000; i = 0; - tmo_count = timeout * 40; + /* Short timeout for the first few iterations: + * number of loops = number of loops for short timeout + + * number of loops for standard timeout. + */ + tmo_count = HWRM_SHORT_TIMEOUT_COUNTER; + timeout = timeout - HWRM_SHORT_MIN_TIMEOUT * HWRM_SHORT_TIMEOUT_COUNTER; + tmo_count += DIV_ROUND_UP(timeout, HWRM_MIN_TIMEOUT); resp_len = bp->hwrm_cmd_resp_addr + HWRM_RESP_LEN_OFFSET; if (intr_process) { /* Wait until hwrm response cmpl interrupt is processed */ while (bp->hwrm_intr_seq_id != HWRM_SEQ_ID_INVALID && i++ < tmo_count) { - usleep_range(25, 40); + /* on first few passes, just barely sleep */ + if (i < HWRM_SHORT_TIMEOUT_COUNTER) + usleep_range(HWRM_SHORT_MIN_TIMEOUT, + HWRM_SHORT_MAX_TIMEOUT); + else + usleep_range(HWRM_MIN_TIMEOUT, + HWRM_MAX_TIMEOUT); } if (bp->hwrm_intr_seq_id != HWRM_SEQ_ID_INVALID) { @@ -3521,7 +3535,13 @@ static int bnxt_hwrm_do_send_msg(struct bnxt *bp, void *msg, u32 msg_len, HWRM_RESP_LEN_SFT; if (len) break; - usleep_range(25, 40); + /* on first few passes, just barely sleep */ + if (i < DFLT_HWRM_CMD_TIMEOUT) + usleep_range(HWRM_SHORT_MIN_TIMEOUT, + HWRM_SHORT_MAX_TIMEOUT); + else + usleep_range(HWRM_MIN_TIMEOUT, + HWRM_MAX_TIMEOUT); } if (i >= tmo_count) { diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h index 057f8a2..7fa4a45 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h @@ -532,6 +532,12 @@ struct rx_tpa_end_cmp_ext { #define BNXT_HWRM_REQ_MAX_SIZE 128 #define BNXT_HWRM_REQS_PER_PAGE (BNXT_PAGE_SIZE / \ BNXT_HWRM_REQ_MAX_SIZE) +#define HWRM_SHORT_MIN_TIMEOUT 3 +#define HWRM_SHORT_MAX_TIMEOUT 10 +#define HWRM_SHORT_TIMEOUT_COUNTER 5 + +#define HWRM_MIN_TIMEOUT 25 +#define HWRM_MAX_TIMEOUT 40 #define BNXT_RX_EVENT 1 #define BNXT_AGG_EVENT 2 From patchwork Thu Apr 26 21:44:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 905397 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="Cf2cya52"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X9bc5rJvz9ry1 for ; Fri, 27 Apr 2018 07:45:32 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756912AbeDZVpa (ORCPT ); Thu, 26 Apr 2018 17:45:30 -0400 Received: from mail-pf0-f195.google.com ([209.85.192.195]:45466 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755293AbeDZVpF (ORCPT ); Thu, 26 Apr 2018 17:45:05 -0400 Received: by mail-pf0-f195.google.com with SMTP id c10so31733pfi.12 for ; Thu, 26 Apr 2018 14:45:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=UE8r0NS5gbVHgK6DphcWRjuessH8gZhU4VxrrrEJgMc=; b=Cf2cya52vAnCOJe1E7+TuoQpaK8J5THQKveO1mFGzHDMwDyMkCc0KN2/P/4ZPmitgx XzMGJpvbpga59y3ZgoRdNyvHmQccW1P6sDza1QdEeED6sJaftCTWjHQlBah1HXacMQ49 NIAfFwt2lPFOFqG//d5EA5CCQjK2G6H/mgXtA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=UE8r0NS5gbVHgK6DphcWRjuessH8gZhU4VxrrrEJgMc=; b=AqgnXPAusMVSoRGSHU99FtzsrYsux685xlkH6c4OY+NFy+2i3mF73Uf7M+4EoDBZir wLRT6jyxgo0jUQNM5Eh7QZ7Gv1lex7JX5W28GEko/sNc5+EtosDnOX90BPoxMAErAHw2 Yl5Qx0WToR/hRq3Aa30c7I2/zOeDP+EZEarSQ3hmOWMf1qkJvasriyaY9se9pan9lXZp JrnsubCXcGTBvQk4IO5sVu4fmEjcDAcfwZZjhLWocCNGWOGHqTvzQiy1bxam4BXKhnNx f9rd1jPDdBzq1y+UktBwly1IGNre/gbDFKsXMkUhVD2MA4/cD3rWRbT9u1N3yHjZrwAN RV4w== X-Gm-Message-State: ALQs6tBk2BieuG0FGP1BBZWFP3RB3A3XgIwXevyLXILwQ+L8Y84IVVE1 8frkNF+U7WWN9He3jY5IHD94z/fNgtE= X-Google-Smtp-Source: AIpwx49UmErwqYlDknePaasklofyTXiCMp7kJ1eqOB+WCBy2AAiwIghdZr46aNLkuAFjx+KvT7Fn8Q== X-Received: by 10.99.143.75 with SMTP id r11mr29161780pgn.341.1524779104918; Thu, 26 Apr 2018 14:45:04 -0700 (PDT) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id w7sm36026384pfn.83.2018.04.26.14.45.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 14:45:04 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org, Andy Gospodarek Subject: [PATCH net-next v2 10/14] bnxt_en: add debugfs support for DIM Date: Thu, 26 Apr 2018 17:44:40 -0400 Message-Id: <1524779084-4016-11-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> References: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Andy Gospodarek This adds debugfs support for bnxt_en with the purpose of allowing users to examine the current DIM profile in use for each receive queue. This was instrumental in debugging issues found with DIM and ensuring that the profiles we expect to use are the profiles being used. Signed-off-by: Andy Gospodarek Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/Makefile | 1 + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 ++ drivers/net/ethernet/broadcom/bnxt/bnxt.h | 2 + drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.c | 124 ++++++++++++++++++++++ drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.h | 23 ++++ 5 files changed, 156 insertions(+) create mode 100644 drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.c create mode 100644 drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.h diff --git a/drivers/net/ethernet/broadcom/bnxt/Makefile b/drivers/net/ethernet/broadcom/bnxt/Makefile index 7c560d5..5a779b1 100644 --- a/drivers/net/ethernet/broadcom/bnxt/Makefile +++ b/drivers/net/ethernet/broadcom/bnxt/Makefile @@ -2,3 +2,4 @@ obj-$(CONFIG_BNXT) += bnxt_en.o bnxt_en-y := bnxt.o bnxt_sriov.o bnxt_ethtool.o bnxt_dcb.o bnxt_ulp.o bnxt_xdp.o bnxt_vfr.o bnxt_devlink.o bnxt_dim.o bnxt_en-$(CONFIG_BNXT_FLOWER_OFFLOAD) += bnxt_tc.o +bnxt_en-$(CONFIG_DEBUG_FS) += bnxt_debugfs.o diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index ff9a5cd..a45e692 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -62,6 +62,7 @@ #include "bnxt_vfr.h" #include "bnxt_tc.h" #include "bnxt_devlink.h" +#include "bnxt_debugfs.h" #define BNXT_TX_TIMEOUT (5 * HZ) @@ -6870,6 +6871,7 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init) } bnxt_enable_napi(bp); + bnxt_debug_dev_init(bp); rc = bnxt_init_nic(bp, irq_re_init); if (rc) { @@ -6902,6 +6904,7 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init) return 0; open_err: + bnxt_debug_dev_exit(bp); bnxt_disable_napi(bp); bnxt_del_napi(bp); @@ -6995,6 +6998,7 @@ static void __bnxt_close_nic(struct bnxt *bp, bool irq_re_init, /* TODO CHIMP_FW: Link/PHY related cleanup if (link_re_init) */ + bnxt_debug_dev_exit(bp); bnxt_disable_napi(bp); del_timer_sync(&bp->timer); bnxt_free_skbs(bp); @@ -9071,6 +9075,7 @@ static void bnxt_io_resume(struct pci_dev *pdev) static int __init bnxt_init(void) { + bnxt_debug_init(); return pci_register_driver(&bnxt_pci_driver); } @@ -9079,6 +9084,7 @@ static void __exit bnxt_exit(void) pci_unregister_driver(&bnxt_pci_driver); if (bnxt_pf_wq) destroy_workqueue(bnxt_pf_wq); + bnxt_debug_exit(); } module_init(bnxt_init); diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h index 7fa4a45..8df1d8b 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h @@ -1391,6 +1391,8 @@ struct bnxt { u16 *cfa_code_map; /* cfa_code -> vf_idx map */ u8 switch_id[8]; struct bnxt_tc_info *tc_info; + struct dentry *debugfs_pdev; + struct dentry *debugfs_dim; }; #define BNXT_RX_STATS_OFFSET(counter) \ diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.c new file mode 100644 index 0000000..94e208e --- /dev/null +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.c @@ -0,0 +1,124 @@ +/* Broadcom NetXtreme-C/E network driver. + * + * Copyright (c) 2017-2018 Broadcom Limited + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation. + */ + +#include +#include +#include +#include "bnxt_hsi.h" +#include +#include "bnxt.h" +#include "bnxt_debugfs.h" + +static struct dentry *bnxt_debug_mnt; + +static ssize_t debugfs_dim_read(struct file *filep, + char __user *buffer, + size_t count, loff_t *ppos) +{ + struct net_dim *dim = filep->private_data; + int len; + char *buf; + + if (*ppos) + return 0; + if (!dim) + return -ENODEV; + buf = kasprintf(GFP_KERNEL, + "state = %d\n" \ + "profile_ix = %d\n" \ + "mode = %d\n" \ + "tune_state = %d\n" \ + "steps_right = %d\n" \ + "steps_left = %d\n" \ + "tired = %d\n", + dim->state, + dim->profile_ix, + dim->mode, + dim->tune_state, + dim->steps_right, + dim->steps_left, + dim->tired); + if (!buf) + return -ENOMEM; + if (count < strlen(buf)) { + kfree(buf); + return -ENOSPC; + } + len = simple_read_from_buffer(buffer, count, ppos, buf, strlen(buf)); + kfree(buf); + return len; +} + +static const struct file_operations debugfs_dim_fops = { + .owner = THIS_MODULE, + .open = simple_open, + .read = debugfs_dim_read, +}; + +static struct dentry *debugfs_dim_ring_init(struct net_dim *dim, int ring_idx, + struct dentry *dd) +{ + static char qname[16]; + + snprintf(qname, 10, "%d", ring_idx); + return debugfs_create_file(qname, 0600, dd, + dim, &debugfs_dim_fops); +} + +void bnxt_debug_dev_init(struct bnxt *bp) +{ + const char *pname = pci_name(bp->pdev); + struct dentry *pdevf; + int i; + + bp->debugfs_pdev = debugfs_create_dir(pname, bnxt_debug_mnt); + if (bp->debugfs_pdev) { + pdevf = debugfs_create_dir("dim", bp->debugfs_pdev); + if (!pdevf) { + pr_err("failed to create debugfs entry %s/dim\n", + pname); + return; + } + bp->debugfs_dim = pdevf; + /* create files for each rx ring */ + for (i = 0; i < bp->cp_nr_rings; i++) { + struct bnxt_cp_ring_info *cpr = &bp->bnapi[i]->cp_ring; + + if (cpr && bp->bnapi[i]->rx_ring) { + pdevf = debugfs_dim_ring_init(&cpr->dim, i, + bp->debugfs_dim); + if (!pdevf) + pr_err("failed to create debugfs entry %s/dim/%d\n", + pname, i); + } + } + } else { + pr_err("failed to create debugfs entry %s\n", pname); + } +} + +void bnxt_debug_dev_exit(struct bnxt *bp) +{ + if (bp) { + debugfs_remove_recursive(bp->debugfs_pdev); + bp->debugfs_pdev = NULL; + } +} + +void bnxt_debug_init(void) +{ + bnxt_debug_mnt = debugfs_create_dir("bnxt_en", NULL); + if (!bnxt_debug_mnt) + pr_err("failed to init bnxt_en debugfs\n"); +} + +void bnxt_debug_exit(void) +{ + debugfs_remove_recursive(bnxt_debug_mnt); +} diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.h new file mode 100644 index 0000000..d0bb488 --- /dev/null +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.h @@ -0,0 +1,23 @@ +/* Broadcom NetXtreme-C/E network driver. + * + * Copyright (c) 2017-2018 Broadcom Limited + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation. + */ + +#include "bnxt_hsi.h" +#include "bnxt.h" + +#ifdef CONFIG_DEBUG_FS +void bnxt_debug_init(void); +void bnxt_debug_exit(void); +void bnxt_debug_dev_init(struct bnxt *bp); +void bnxt_debug_dev_exit(struct bnxt *bp); +#else +static inline void bnxt_debug_init(void) {} +static inline void bnxt_debug_exit(void) {} +static inline void bnxt_debug_dev_init(struct bnxt *bp) {} +static inline void bnxt_debug_dev_exit(struct bnxt *bp) {} +#endif From patchwork Thu Apr 26 21:44:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 905395 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="YhG2ceHD"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X9bH5XNGz9ry1 for ; Fri, 27 Apr 2018 07:45:15 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756853AbeDZVpM (ORCPT ); Thu, 26 Apr 2018 17:45:12 -0400 Received: from mail-pg0-f66.google.com ([74.125.83.66]:34436 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756432AbeDZVpG (ORCPT ); Thu, 26 Apr 2018 17:45:06 -0400 Received: by mail-pg0-f66.google.com with SMTP id p10so16921820pgn.1 for ; Thu, 26 Apr 2018 14:45:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=bYTOpqjDOr8u2s6erWEmQVeeuBWR2HT+8kUxzzShiPI=; b=YhG2ceHDgFR1fUyMLvS5vnuew+iWI++l9uOewLtMB+kD59R4WMDPpNOihFuSpQFjf4 N4CcJn5DblzzOkMjxFNpUgflhwg1/fTjLAzJAf+e38X9K3mTy/LM0NYC2KbRY9Eb0k+L BT8zwHOStOdJRjpRyQg3IauMc+i0JDczkvLp4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=bYTOpqjDOr8u2s6erWEmQVeeuBWR2HT+8kUxzzShiPI=; b=OpFdR120E3yg3qVesgzCwnJRHGRRky3PsWm9pU0mMsiPRUqwb+XPOT6URGa1gV8/ws TXgmcvYPss6zMRA0jeaS9mtz44C+1m+XqrpPp8wtsYbmNTbdeIMGrj1wTcy6R0NAIdRP XwDWuITpdpjA+kJGLJdrEeI/vPvelw7AvaA9VsKa761JxEkTOGC/1fSw0ZASrvN7Duhs rJvwsuN0cjxZWiprejJdA+OXlkjhYGpNlG2tf/Yk/8O+//RYcJ35d9UgLyN+umVgkBhE Qgf/aIm2vEWKlsACFlOcpiws+Iq8z6yd12M0j2D6nE9/Osi5ZO6RkBwPCIO6/8QNNKY3 Vicw== X-Gm-Message-State: ALQs6tDc/27ZlwXhvRamSv6PAJ70TdKwKIoaQN+pf3U2qdhfnWpGGJkE rRvKwgEu25lJNzhNfiM62hpLJ0HTZzE= X-Google-Smtp-Source: AIpwx49vUPPdRkUQuHla97v+5lUkoz9vYbvWiEmHeZ7izRDd82nOD0VeqbUfe4b897L9P7KrxFOQCg== X-Received: by 10.99.117.29 with SMTP id q29mr29008799pgc.269.1524779105962; Thu, 26 Apr 2018 14:45:05 -0700 (PDT) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id w7sm36026384pfn.83.2018.04.26.14.45.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 14:45:05 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org Subject: [PATCH net-next v2 11/14] bnxt_en: Reserve rings in bnxt_set_channels() if device is down. Date: Thu, 26 Apr 2018 17:44:41 -0400 Message-Id: <1524779084-4016-12-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> References: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The current code does not reserve rings during ethtool -L when the device is down. The rings will be reserved when the device is later opened. Change it to reserve rings during ethtool -L when the device is down. This provides a better guarantee that the device open will be successful when the rings are reserved ahead of time. Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c index a699ca54..ad98b78 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c @@ -584,6 +584,8 @@ static int bnxt_set_channels(struct net_device *dev, * to renable */ } + } else { + rc = bnxt_reserve_rings(bp); } return rc; From patchwork Thu Apr 26 21:44:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 905394 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="NSP9S2tn"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X9bG1yckz9ry1 for ; Fri, 27 Apr 2018 07:45:14 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756805AbeDZVpL (ORCPT ); Thu, 26 Apr 2018 17:45:11 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:42869 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754799AbeDZVpH (ORCPT ); Thu, 26 Apr 2018 17:45:07 -0400 Received: by mail-pf0-f193.google.com with SMTP id a11so1390854pfn.9 for ; Thu, 26 Apr 2018 14:45:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=6hPtl1DUwvnOuzl4ZiKeTOhpUlVnIOFJQB3+Os1ovSk=; b=NSP9S2tn3v9DM/V71aj9rP6d6oYx7KWNJdYH9BH5RJ/69xqIlbr5At/gnoWfPsN0dE dmBIbaXhDEV35YxvLApskUJ0hs7Rr1Z3VfZy4G9U4on3YEl9F/vo6d5Q0rQ4jxGPebHt EWPdm7P4OOUcWOk6asm8zW2+tOT76/c1CpCfA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=6hPtl1DUwvnOuzl4ZiKeTOhpUlVnIOFJQB3+Os1ovSk=; b=evV2ju5x24AjrVG5z426rvU+tT+vPC63ucIJfmg00YzZ3wDdEsCLzYDFuh3wgco3Qt YYrj+2GqbS+sSubFdjstiWwV8QoCZ+/1CNj64QHRuFSqBzq3sstH8tHKFVFbO/kHYehE HCn5MIx/Ufruzvij+MttBC8t2eccWwqysonWrLbJXHr2qwZ6aVmExBPRXPWaRrjko/AN Iv/QQFDJbdYogD9XwbNTIW4pN0aI4RQDwXn3DLBxFoPxztcvNhRLhCuB50keBh2dz4zl KNezvO3M60qR/v6FZ46kJ7AhqAs4YQpzbOvD0oKSkDkr9vZQQ0mLRBGVB53Yz7b417FX EsBQ== X-Gm-Message-State: ALQs6tDdLIDF21tv8s4xVLsY7csa4SOCwpu3s26vzHbdOUY51RzG8jb7 QTn4BVMqqzTzVDSZEyaVbxfcoA== X-Google-Smtp-Source: AIpwx4/qxPA4QuGJqOlvfAlkhHNBCyJN78CWXKXJu67oE4SRBn+P/HElZ+yX33M1Q42flD/P/peCBQ== X-Received: by 10.98.113.196 with SMTP id m187mr31006377pfc.216.1524779106783; Thu, 26 Apr 2018 14:45:06 -0700 (PDT) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id w7sm36026384pfn.83.2018.04.26.14.45.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 14:45:06 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org Subject: [PATCH net-next v2 12/14] bnxt_en: Don't reserve rings on VF when min rings were not provisioned by PF. Date: Thu, 26 Apr 2018 17:44:42 -0400 Message-Id: <1524779084-4016-13-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> References: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When rings are more limited and the PF has not provisioned minimum guaranteed rings to the VF, do not reserve rings during driver probe. Wait till device open before reserving rings when they will be used. Device open will succeed if some minimum rings can be successfully reserved and allocated. Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index a45e692..0884e49 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -5952,6 +5952,9 @@ static int bnxt_init_msix(struct bnxt *bp) if (total_vecs > max) total_vecs = max; + if (!total_vecs) + return 0; + msix_ent = kcalloc(total_vecs, sizeof(struct msix_entry), GFP_KERNEL); if (!msix_ent) return -ENOMEM; @@ -7276,6 +7279,25 @@ static int bnxt_cfg_rx_mode(struct bnxt *bp) return rc; } +static bool bnxt_can_reserve_rings(struct bnxt *bp) +{ +#ifdef CONFIG_BNXT_SRIOV + if ((bp->flags & BNXT_FLAG_NEW_RM) && BNXT_VF(bp)) { + struct bnxt_hw_resc *hw_resc = &bp->hw_resc; + + /* No minimum rings were provisioned by the PF. Don't + * reserve rings by default when device is down. + */ + if (hw_resc->min_tx_rings || hw_resc->resv_tx_rings) + return true; + + if (!netif_running(bp->dev)) + return false; + } +#endif + return true; +} + /* If the chip and firmware supports RFS */ static bool bnxt_rfs_supported(struct bnxt *bp) { @@ -7292,7 +7314,7 @@ static bool bnxt_rfs_capable(struct bnxt *bp) #ifdef CONFIG_RFS_ACCEL int vnics, max_vnics, max_rss_ctxs; - if (!(bp->flags & BNXT_FLAG_MSIX_CAP)) + if (!(bp->flags & BNXT_FLAG_MSIX_CAP) || !bnxt_can_reserve_rings(bp)) return false; vnics = 1 + bp->rx_nr_rings; @@ -8526,6 +8548,9 @@ static int bnxt_set_dflt_rings(struct bnxt *bp, bool sh) { int dflt_rings, max_rx_rings, max_tx_rings, rc; + if (!bnxt_can_reserve_rings(bp)) + return 0; + if (sh) bp->flags |= BNXT_FLAG_SHARED_RINGS; dflt_rings = netif_get_num_default_rss_queues(); From patchwork Thu Apr 26 21:44:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 905393 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="Stc2Z5I2"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X9bD1r7Hz9ry1 for ; Fri, 27 Apr 2018 07:45:12 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756738AbeDZVpK (ORCPT ); Thu, 26 Apr 2018 17:45:10 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:33481 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756463AbeDZVpI (ORCPT ); Thu, 26 Apr 2018 17:45:08 -0400 Received: by mail-pg0-f67.google.com with SMTP id i194so16922533pgd.0 for ; Thu, 26 Apr 2018 14:45:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=oFTziSnxV3nHyNze4R2FM0wZEZysELlwbsGPJk1itDQ=; b=Stc2Z5I2d+aFaR0QeyCI7VSLzGsF+7jkO+ZK9ec8A0mEeIRlZySH5vTBRI1t1wf1Tb 9KqxPlAIE+5gaZlOW7N2Utyv09yMLQFqAkc9XZG2eAVzmpxabH5gjRdKpYhCgzVNE6tl GWumdtMVCalhDjjeNyZpllN9cUnkCjoHsak0E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=oFTziSnxV3nHyNze4R2FM0wZEZysELlwbsGPJk1itDQ=; b=g6gUVbSjNchlzGVlhJJwSYV4N4AyaDgM5F4aeok3z6uc7VQzldn8AdotxDTSSc0DUR FGlRDo750yeHjmh80G5B7Yme+uUL5ETEAziOAHdn1moS7MqaWUA/sotBWWU5u4ajuo7E PyAbQZj3McbzcVfbZAoyPyVO7cu7r/rrIeJdcgGav3PEmlbD5l8Nreg2EdyHBE7psrDt wy/Pzzsfe3V5+TBvWpkBLuNbvwALOoSOc9EVpzi+qA3WCvXuHXgj3monw0GGnfJZuuEi GFdFU2vD3/ZZhF6/gpEFFw5pSCc25PY3xB5N9OdcmLArqpxuU7x17Xc7V6/GDSy1ofQ2 DIoA== X-Gm-Message-State: ALQs6tAZ8zo59flifiGNV4ul60703+5o+gjZkmGAslzuPQVIsBA9c/Dj pOQQnKF5ERfCBwU6FQ6vIpssFg== X-Google-Smtp-Source: AIpwx4/cORFdRY1K1HUfmoM7RVw7+RKDFhP3m07zaPFpK0EStWDgFTNdY9VD9X9asTIRGK9cbgPkFg== X-Received: by 10.99.185.74 with SMTP id v10mr28959615pgo.372.1524779107546; Thu, 26 Apr 2018 14:45:07 -0700 (PDT) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id w7sm36026384pfn.83.2018.04.26.14.45.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 14:45:07 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org Subject: [PATCH net-next v2 13/14] bnxt_en: Reserve RSS and L2 contexts for VF. Date: Thu, 26 Apr 2018 17:44:43 -0400 Message-Id: <1524779084-4016-14-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> References: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org For completeness and correctness, the VF driver needs to reserve these RSS and L2 contexts. Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 4 ++++ drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | 10 +++++----- drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h | 5 +++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 0884e49..fee1c0d 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -4713,6 +4713,10 @@ int __bnxt_hwrm_get_tx_rings(struct bnxt *bp, u16 fid, int *tx_rings) __bnxt_hwrm_reserve_vf_rings(bp, &req, tx_rings, rx_rings, ring_grps, cp_rings, vnics); + req.enables |= cpu_to_le32(FUNC_VF_CFG_REQ_ENABLES_NUM_RSSCOS_CTXS | + FUNC_VF_CFG_REQ_ENABLES_NUM_L2_CTXS); + req.num_rsscos_ctxs = cpu_to_le16(BNXT_VF_MAX_RSS_CTX); + req.num_l2_ctxs = cpu_to_le16(BNXT_VF_MAX_L2_CTX); rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); if (rc) return -ENOMEM; diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c index 18ee471..cc21d87 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c @@ -462,13 +462,13 @@ static int bnxt_hwrm_func_vf_resc_cfg(struct bnxt *bp, int num_vfs) vf_vnics = hw_resc->max_vnics - bp->nr_vnics; vf_vnics = min_t(u16, vf_vnics, vf_rx_rings); - req.min_rsscos_ctx = cpu_to_le16(1); - req.max_rsscos_ctx = cpu_to_le16(1); + req.min_rsscos_ctx = cpu_to_le16(BNXT_VF_MIN_RSS_CTX); + req.max_rsscos_ctx = cpu_to_le16(BNXT_VF_MAX_RSS_CTX); if (pf->vf_resv_strategy == BNXT_VF_RESV_STRATEGY_MINIMAL) { req.min_cmpl_rings = cpu_to_le16(1); req.min_tx_rings = cpu_to_le16(1); req.min_rx_rings = cpu_to_le16(1); - req.min_l2_ctxs = cpu_to_le16(1); + req.min_l2_ctxs = cpu_to_le16(BNXT_VF_MIN_L2_CTX); req.min_vnics = cpu_to_le16(1); req.min_stat_ctx = cpu_to_le16(1); req.min_hw_ring_grps = cpu_to_le16(1); @@ -483,7 +483,7 @@ static int bnxt_hwrm_func_vf_resc_cfg(struct bnxt *bp, int num_vfs) req.min_cmpl_rings = cpu_to_le16(vf_cp_rings); req.min_tx_rings = cpu_to_le16(vf_tx_rings); req.min_rx_rings = cpu_to_le16(vf_rx_rings); - req.min_l2_ctxs = cpu_to_le16(4); + req.min_l2_ctxs = cpu_to_le16(BNXT_VF_MAX_L2_CTX); req.min_vnics = cpu_to_le16(vf_vnics); req.min_stat_ctx = cpu_to_le16(vf_stat_ctx); req.min_hw_ring_grps = cpu_to_le16(vf_ring_grps); @@ -491,7 +491,7 @@ static int bnxt_hwrm_func_vf_resc_cfg(struct bnxt *bp, int num_vfs) req.max_cmpl_rings = cpu_to_le16(vf_cp_rings); req.max_tx_rings = cpu_to_le16(vf_tx_rings); req.max_rx_rings = cpu_to_le16(vf_rx_rings); - req.max_l2_ctxs = cpu_to_le16(4); + req.max_l2_ctxs = cpu_to_le16(BNXT_VF_MAX_L2_CTX); req.max_vnics = cpu_to_le16(vf_vnics); req.max_stat_ctx = cpu_to_le16(vf_stat_ctx); req.max_hw_ring_grps = cpu_to_le16(vf_ring_grps); diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h index 6f6d850..e9b20cd 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h @@ -23,6 +23,11 @@ ((offsetof(struct hwrm_reject_fwd_resp_input, encap_request) + n) >\ offsetof(struct hwrm_reject_fwd_resp_input, encap_resp_target_id)) +#define BNXT_VF_MIN_RSS_CTX 1 +#define BNXT_VF_MAX_RSS_CTX 1 +#define BNXT_VF_MIN_L2_CTX 1 +#define BNXT_VF_MAX_L2_CTX 4 + int bnxt_get_vf_config(struct net_device *, int, struct ifla_vf_info *); int bnxt_set_vf_mac(struct net_device *, int, u8 *); int bnxt_set_vf_vlan(struct net_device *, int, u16, u8, __be16); From patchwork Thu Apr 26 21:44:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 905396 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="Qf0P+9Mt"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X9bS3z5fz9ry1 for ; Fri, 27 Apr 2018 07:45:24 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756554AbeDZVpW (ORCPT ); Thu, 26 Apr 2018 17:45:22 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:40945 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756531AbeDZVpJ (ORCPT ); Thu, 26 Apr 2018 17:45:09 -0400 Received: by mail-pf0-f193.google.com with SMTP id f189so10277243pfa.7 for ; Thu, 26 Apr 2018 14:45:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Yx+voK4WkDroHbSLsXIZ8hMsAU145DxWSXm1yuP0oas=; b=Qf0P+9MtCpvzDngnDqLAWM4cl84WRsdjF3xaW2fjVhaLeDUQXGL6J093WGLOk11vo+ N5KHpRlcJRkyX7xO/Ym6uoSvLE1EnaCjiiQq0BhsdDTdFL2wIk0mDQT7qIVmRuc8PFfz sU7PmlbVUPMQc7+N8Vr/4oJ9DsJ9LsJuQioUI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Yx+voK4WkDroHbSLsXIZ8hMsAU145DxWSXm1yuP0oas=; b=PzgYF6032esNlGhm0A+biYopQfETcKqs6s8NTlzTEcbaC2isFXdQ7Hk5V+kEfbOiBm YIfn41kvl6ReLL4FkQl5OIi+CWqi7ZwlR1JYnE01VJikQg6956Uv40xS39BkkiD2Epmf jFDHQ+mYS9QfdQvxYVcXREX2HzFalA4hEX7EzIP1BMZ5ffiTY4hUvyZG6GAvblmA1QtT D3ju8w6/F3MifC6xOeW+mHjLvb8s3JteTQaauW6TujBJJmR3yh8ozsJxLxAza1hKbm82 uQIakhK49J3XeE3R6KFR4Dds0NhcPgycOVorzRjzLoUMndmxMFY0sTtskBX+7l6wMevo IJAw== X-Gm-Message-State: ALQs6tDaEjvj3Wf25RljyDpDW47n6sZBZa4Bytj7qCuRUaPTJU+hd80/ UBZ4dt7oDM3nU8mQKHBCgo0ZR4X/Jm8= X-Google-Smtp-Source: AB8JxZoUxvpDaiIOf83qtYRzZnSvrKl0PByFuiTUVKXWX9yXqz2C95HpCWDWz5XEXDW29gPbKmmygA== X-Received: by 10.98.29.82 with SMTP id d79mr9318749pfd.230.1524779108576; Thu, 26 Apr 2018 14:45:08 -0700 (PDT) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id w7sm36026384pfn.83.2018.04.26.14.45.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 14:45:07 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org Subject: [PATCH net-next v2 14/14] bnxt_en: Reserve rings at driver open if none was reserved at probe time. Date: Thu, 26 Apr 2018 17:44:44 -0400 Message-Id: <1524779084-4016-15-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> References: <1524779084-4016-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add logic to reserve default rings at driver open time if none was reserved during probe time. This will happen when the PF driver did not provision minimum rings to the VF, due to more limited resources. Driver open will only succeed if some minimum rings can be reserved. Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index fee1c0d..efe5c72 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -6844,6 +6844,8 @@ static void bnxt_preset_reg_win(struct bnxt *bp) } } +static int bnxt_init_dflt_ring_mode(struct bnxt *bp); + static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init) { int rc = 0; @@ -6851,6 +6853,12 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init) bnxt_preset_reg_win(bp); netif_carrier_off(bp->dev); if (irq_re_init) { + /* Reserve rings now if none were reserved at driver probe. */ + rc = bnxt_init_dflt_ring_mode(bp); + if (rc) { + netdev_err(bp->dev, "Failed to reserve default rings at open\n"); + return rc; + } rc = bnxt_reserve_rings(bp); if (rc) return rc; @@ -8600,6 +8608,29 @@ static int bnxt_set_dflt_rings(struct bnxt *bp, bool sh) return rc; } +static int bnxt_init_dflt_ring_mode(struct bnxt *bp) +{ + int rc; + + if (bp->tx_nr_rings) + return 0; + + rc = bnxt_set_dflt_rings(bp, true); + if (rc) { + netdev_err(bp->dev, "Not enough rings available.\n"); + return rc; + } + rc = bnxt_init_int_mode(bp); + if (rc) + return rc; + bp->tx_nr_rings_per_tc = bp->tx_nr_rings; + if (bnxt_rfs_supported(bp) && bnxt_rfs_capable(bp)) { + bp->flags |= BNXT_FLAG_RFS; + bp->dev->features |= NETIF_F_NTUPLE; + } + return 0; +} + int bnxt_restore_pf_fw_resources(struct bnxt *bp) { int rc;