diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..27992f5 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/bnxt_en-redhat-1.10.0_dup7.7.tar.bz2 diff --git a/.kmod-redhat-bnxt_en.metadata b/.kmod-redhat-bnxt_en.metadata new file mode 100644 index 0000000..f12f299 --- /dev/null +++ b/.kmod-redhat-bnxt_en.metadata @@ -0,0 +1 @@ +fc1d88c80b9923239ef3ffb9602d6d2cbb60e2fa SOURCES/bnxt_en-redhat-1.10.0_dup7.7.tar.bz2 diff --git a/SOURCES/0000-bump-version.patch b/SOURCES/0000-bump-version.patch new file mode 100644 index 0000000..978a368 --- /dev/null +++ b/SOURCES/0000-bump-version.patch @@ -0,0 +1,13 @@ +Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h +=================================================================== +--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2019-08-27 12:24:53.893523481 +0200 ++++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2019-08-27 12:34:37.052876400 +0200 +@@ -12,7 +12,7 @@ + #define BNXT_H + + #define DRV_MODULE_NAME "bnxt_en" +-#define DRV_MODULE_VERSION "1.10.0" ++#define DRV_MODULE_VERSION "1.10.0_dup7.7" + + #define DRV_VER_MAJ 1 + #define DRV_VER_MIN 10 diff --git a/SOURCES/0001-netdrv-bnxt_en-Add-support-for-BCM957504.patch b/SOURCES/0001-netdrv-bnxt_en-Add-support-for-BCM957504.patch new file mode 100644 index 0000000..0226bce --- /dev/null +++ b/SOURCES/0001-netdrv-bnxt_en-Add-support-for-BCM957504.patch @@ -0,0 +1,70 @@ +From d9df9af212928d829601ca69d48d5346917f1f9c Mon Sep 17 00:00:00 2001 +From: Jonathan Toppins +Date: Thu, 11 Jul 2019 19:24:43 -0400 +Subject: [PATCH] [netdrv] bnxt_en: Add support for BCM957504 + +Message-id: +Patchwork-id: 266715 +O-Subject: [PATCH RHEL-7.8] bnxt_en: Add support for BCM957504 +Bugzilla: 1673791 +RH-Acked-by: David Arcari +RH-Acked-by: John Linville +RH-Acked-by: Neil Horman +RH-Acked-by: Steve Best + +Add support for BCM957504 with device ID 1751 + +Signed-off-by: Erik Burrows +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit c6cc32a2133cb1eb5aa28ced1852aab2aeaf357a) +Bugzilla: 1673791 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=22621023 +Tested: build only +Signed-off-by: Jonathan Toppins + +Signed-off-by: Jan Stancek +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 32434cbf0769..c61d0d3da76d 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -1,7 +1,7 @@ + /* Broadcom NetXtreme-C/E network driver. + * + * Copyright (c) 2014-2016 Broadcom Corporation +- * Copyright (c) 2016-2018 Broadcom Limited ++ * Copyright (c) 2016-2019 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 +@@ -114,6 +114,7 @@ enum board_idx { + BCM57454, + BCM5745x_NPAR, + BCM57508, ++ BCM57504, + BCM58802, + BCM58804, + BCM58808, +@@ -157,6 +158,7 @@ static const struct { + [BCM57454] = { "Broadcom BCM57454 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet" }, + [BCM5745x_NPAR] = { "Broadcom BCM5745x NetXtreme-E Ethernet Partition" }, + [BCM57508] = { "Broadcom BCM57508 NetXtreme-E 10Gb/25Gb/50Gb/100Gb/200Gb Ethernet" }, ++ [BCM57504] = { "Broadcom BCM57504 NetXtreme-E 10Gb/25Gb/50Gb/100Gb/200Gb Ethernet" }, + [BCM58802] = { "Broadcom BCM58802 NetXtreme-S 10Gb/25Gb/40Gb/50Gb Ethernet" }, + [BCM58804] = { "Broadcom BCM58804 NetXtreme-S 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet" }, + [BCM58808] = { "Broadcom BCM58808 NetXtreme-S 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet" }, +@@ -203,6 +205,7 @@ static const struct pci_device_id bnxt_pci_tbl[] = { + { PCI_VDEVICE(BROADCOM, 0x16f0), .driver_data = BCM58808 }, + { PCI_VDEVICE(BROADCOM, 0x16f1), .driver_data = BCM57452 }, + { PCI_VDEVICE(BROADCOM, 0x1750), .driver_data = BCM57508 }, ++ { PCI_VDEVICE(BROADCOM, 0x1751), .driver_data = BCM57504 }, + { PCI_VDEVICE(BROADCOM, 0xd802), .driver_data = BCM58802 }, + { PCI_VDEVICE(BROADCOM, 0xd804), .driver_data = BCM58804 }, + #ifdef CONFIG_BNXT_SRIOV +-- +2.13.6 + diff --git a/SOURCES/_PATCH_RHEL-7_01-12_bnxt_en_Improve_RX_consumer_index_validity_check.patch b/SOURCES/_PATCH_RHEL-7_01-12_bnxt_en_Improve_RX_consumer_index_validity_check.patch new file mode 100644 index 0000000..b58cd1c --- /dev/null +++ b/SOURCES/_PATCH_RHEL-7_01-12_bnxt_en_Improve_RX_consumer_index_validity_check.patch @@ -0,0 +1,64 @@ +Date: Wed, 5 Jun 2019 13:55:20 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, linville@redhat.com +Subject: [PATCH RHEL-7 01/12] bnxt_en: Improve RX consumer index validity + check. + +There is logic to check that the RX/TPA consumer index is the expected +index to work around a hardware problem. However, the potentially bad +consumer index is first used to index into an array to reference an entry. +This can potentially crash if the bad consumer index is beyond legal +range. Improve the logic to use the consumer index for dereferencing +after the validity check and log an error message. + +Fixes: fa7e28127a5a ("bnxt_en: Add workaround to detect bad opaque in rx completion (part 2)") +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit a1b0e4e684e9c300b9e759b46cb7a0147e61ddff) +Bugzilla: 1715161 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=21964229 +Tested: build and boot +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 2a522010e7fe..421c62187929 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -1126,6 +1126,8 @@ static void bnxt_tpa_start(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, + tpa_info = &rxr->rx_tpa[agg_id]; + + if (unlikely(cons != rxr->rx_next_cons)) { ++ netdev_warn(bp->dev, "TPA cons %x != expected cons %x\n", ++ cons, rxr->rx_next_cons); + bnxt_sched_reset(bp, rxr); + return; + } +@@ -1577,15 +1579,17 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, + } + + cons = rxcmp->rx_cmp_opaque; +- rx_buf = &rxr->rx_buf_ring[cons]; +- data = rx_buf->data; +- data_ptr = rx_buf->data_ptr; + if (unlikely(cons != rxr->rx_next_cons)) { + int rc1 = bnxt_discard_rx(bp, cpr, raw_cons, rxcmp); + ++ netdev_warn(bp->dev, "RX cons %x != expected cons %x\n", ++ cons, rxr->rx_next_cons); + bnxt_sched_reset(bp, rxr); + return rc1; + } ++ rx_buf = &rxr->rx_buf_ring[cons]; ++ data = rx_buf->data; ++ data_ptr = rx_buf->data_ptr; + prefetch(data_ptr); + + misc = le32_to_cpu(rxcmp->rx_cmp_misc_v1); +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL-7_02-12_bnxt_en_Reset_device_on_RX_buffer_errors.patch b/SOURCES/_PATCH_RHEL-7_02-12_bnxt_en_Reset_device_on_RX_buffer_errors.patch new file mode 100644 index 0000000..d6c3804 --- /dev/null +++ b/SOURCES/_PATCH_RHEL-7_02-12_bnxt_en_Reset_device_on_RX_buffer_errors.patch @@ -0,0 +1,48 @@ +Date: Wed, 5 Jun 2019 13:55:21 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, linville@redhat.com +Subject: [PATCH RHEL-7 02/12] bnxt_en: Reset device on RX buffer errors. + +If the RX completion indicates RX buffers errors, the RX ring will be +disabled by firmware and no packets will be received on that ring from +that point on. Recover by resetting the device. + +Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.") +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit 8e44e96c6c8e8fb80b84a2ca11798a8554f710f2) +Bugzilla: 1715161 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=21964229 +Tested: build and boot +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 421c62187929..faacdfc0d993 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -1606,11 +1606,17 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, + + rx_buf->data = NULL; + if (rxcmp1->rx_cmp_cfa_code_errors_v2 & RX_CMP_L2_ERRORS) { ++ u32 rx_err = le32_to_cpu(rxcmp1->rx_cmp_cfa_code_errors_v2); ++ + bnxt_reuse_rx_data(rxr, cons, data); + if (agg_bufs) + bnxt_reuse_rx_agg_bufs(cpr, cp_cons, agg_bufs); + + rc = -EIO; ++ if (rx_err & RX_CMPL_ERRORS_BUFFER_ERROR_MASK) { ++ netdev_warn(bp->dev, "RX buffer error %x\n", rx_err); ++ bnxt_sched_reset(bp, rxr); ++ } + goto next_rx; + } + +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL-7_03-12_bnxt_en_Improve_multicast_address_setup_logic.patch b/SOURCES/_PATCH_RHEL-7_03-12_bnxt_en_Improve_multicast_address_setup_logic.patch new file mode 100644 index 0000000..a86271f --- /dev/null +++ b/SOURCES/_PATCH_RHEL-7_03-12_bnxt_en_Improve_multicast_address_setup_logic.patch @@ -0,0 +1,50 @@ +Date: Wed, 5 Jun 2019 13:55:22 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, linville@redhat.com +Subject: [PATCH RHEL-7 03/12] bnxt_en: Improve multicast address setup logic. + +The driver builds a list of multicast addresses and sends it to the +firmware when the driver's ndo_set_rx_mode() is called. In rare +cases, the firmware can fail this call if internal resources to +add multicast addresses are exhausted. In that case, we should +try the call again by setting the ALL_MCAST flag which is more +guaranteed to succeed. + +Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.") +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit b4e30e8e7ea1d1e35ffd64ca46f7d9a7f227b4bf) +Bugzilla: 1715161 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=21964229 +Tested: build and boot +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index faacdfc0d993..7a59eff77b98 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -8884,8 +8884,15 @@ static int bnxt_cfg_rx_mode(struct bnxt *bp) + + skip_uc: + rc = bnxt_hwrm_cfa_l2_set_rx_mask(bp, 0); ++ if (rc && vnic->mc_list_count) { ++ netdev_info(bp->dev, "Failed setting MC filters rc: %d, turning on ALL_MCAST mode\n", ++ rc); ++ vnic->rx_mask |= CFA_L2_SET_RX_MASK_REQ_MASK_ALL_MCAST; ++ vnic->mc_list_count = 0; ++ rc = bnxt_hwrm_cfa_l2_set_rx_mask(bp, 0); ++ } + if (rc) +- netdev_err(bp->dev, "HWRM cfa l2 rx mask failure rc: %x\n", ++ netdev_err(bp->dev, "HWRM cfa l2 rx mask failure rc: %d\n", + rc); + + return rc; +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL-7_04-12_bnxt_en_Free_short_FW_command_HWRM_memory_in_error.patch b/SOURCES/_PATCH_RHEL-7_04-12_bnxt_en_Free_short_FW_command_HWRM_memory_in_error.patch new file mode 100644 index 0000000..163584c --- /dev/null +++ b/SOURCES/_PATCH_RHEL-7_04-12_bnxt_en_Free_short_FW_command_HWRM_memory_in_error.patch @@ -0,0 +1,39 @@ +Date: Wed, 5 Jun 2019 13:55:23 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, linville@redhat.com +Subject: [PATCH RHEL-7 04/12] bnxt_en: Free short FW command HWRM memory in + error path in bnxt_init_one() + +In the bnxt_init_one() error path, short FW command request memory +is not freed. This patch fixes it. + +Fixes: e605db801bde ("bnxt_en: Support for Short Firmware Message") +Signed-off-by: Vasundhara Volam +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit f9099d611449836a51a65f40ea7dc9cb5f2f665e) +Bugzilla: 1715161 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=21964229 +Tested: build and boot +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 7a59eff77b98..9e747f155fd9 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -10648,6 +10648,7 @@ init_err_cleanup_tc: + bnxt_clear_int_mode(bp); + + init_err_pci_clean: ++ bnxt_free_hwrm_short_cmd_req(bp); + bnxt_free_hwrm_resources(bp); + bnxt_free_ctx_mem(bp); + kfree(bp->ctx); +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL-7_05-12_bnxt_en_Fix_possible_crash_in_bnxt_hwrm_ring_free_.patch b/SOURCES/_PATCH_RHEL-7_05-12_bnxt_en_Fix_possible_crash_in_bnxt_hwrm_ring_free_.patch new file mode 100644 index 0000000..88a8565 --- /dev/null +++ b/SOURCES/_PATCH_RHEL-7_05-12_bnxt_en_Fix_possible_crash_in_bnxt_hwrm_ring_free_.patch @@ -0,0 +1,74 @@ +Date: Wed, 5 Jun 2019 13:55:24 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, linville@redhat.com +Subject: [PATCH RHEL-7 05/12] bnxt_en: Fix possible crash in + bnxt_hwrm_ring_free() under error conditions. + +If we encounter errors during open and proceed to clean up, +bnxt_hwrm_ring_free() may crash if the rings we try to free have never +been allocated. bnxt_cp_ring_for_rx() or bnxt_cp_ring_for_tx() +may reference pointers that have not been allocated. + +Fix it by checking for valid fw_ring_id first before calling +bnxt_cp_ring_for_rx() or bnxt_cp_ring_for_tx(). + +Fixes: 2c61d2117ecb ("bnxt_en: Add helper functions to get firmware CP ring ID.") +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit 1f83391bd6fc48f92f627b0ec0bce686d100c6a5) +Bugzilla: 1715161 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=21964229 +Tested: build and boot +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 9e747f155fd9..0b57c5522791 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -5121,10 +5121,10 @@ static void bnxt_hwrm_ring_free(struct bnxt *bp, bool close_path) + for (i = 0; i < bp->tx_nr_rings; i++) { + struct bnxt_tx_ring_info *txr = &bp->tx_ring[i]; + struct bnxt_ring_struct *ring = &txr->tx_ring_struct; +- u32 cmpl_ring_id; + +- cmpl_ring_id = bnxt_cp_ring_for_tx(bp, txr); + if (ring->fw_ring_id != INVALID_HW_RING_ID) { ++ u32 cmpl_ring_id = bnxt_cp_ring_for_tx(bp, txr); ++ + hwrm_ring_free_send_msg(bp, ring, + RING_FREE_REQ_RING_TYPE_TX, + close_path ? cmpl_ring_id : +@@ -5137,10 +5137,10 @@ static void bnxt_hwrm_ring_free(struct bnxt *bp, bool close_path) + struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i]; + struct bnxt_ring_struct *ring = &rxr->rx_ring_struct; + u32 grp_idx = rxr->bnapi->index; +- u32 cmpl_ring_id; + +- cmpl_ring_id = bnxt_cp_ring_for_rx(bp, rxr); + if (ring->fw_ring_id != INVALID_HW_RING_ID) { ++ u32 cmpl_ring_id = bnxt_cp_ring_for_rx(bp, rxr); ++ + hwrm_ring_free_send_msg(bp, ring, + RING_FREE_REQ_RING_TYPE_RX, + close_path ? cmpl_ring_id : +@@ -5159,10 +5159,10 @@ static void bnxt_hwrm_ring_free(struct bnxt *bp, bool close_path) + struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i]; + struct bnxt_ring_struct *ring = &rxr->rx_agg_ring_struct; + u32 grp_idx = rxr->bnapi->index; +- u32 cmpl_ring_id; + +- cmpl_ring_id = bnxt_cp_ring_for_rx(bp, rxr); + if (ring->fw_ring_id != INVALID_HW_RING_ID) { ++ u32 cmpl_ring_id = bnxt_cp_ring_for_rx(bp, rxr); ++ + hwrm_ring_free_send_msg(bp, ring, type, + close_path ? cmpl_ring_id : + INVALID_HW_RING_ID); +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL-7_06-12_bnxt_en_Pass_correct_extended_TX_port_statistics_s.patch b/SOURCES/_PATCH_RHEL-7_06-12_bnxt_en_Pass_correct_extended_TX_port_statistics_s.patch new file mode 100644 index 0000000..8c4a0b0 --- /dev/null +++ b/SOURCES/_PATCH_RHEL-7_06-12_bnxt_en_Pass_correct_extended_TX_port_statistics_s.patch @@ -0,0 +1,61 @@ +Date: Wed, 5 Jun 2019 13:55:25 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, linville@redhat.com +Subject: [PATCH RHEL-7 06/12] bnxt_en: Pass correct extended TX port + statistics size to firmware. + +If driver determines that extended TX port statistics are not supported +or allocation of the data structure fails, make sure to pass 0 TX stats +size to firmware to disable it. The firmware returned TX stats size should +also be set to 0 for consistency. This will prevent +bnxt_get_ethtool_stats() from accessing the NULL TX stats pointer in +case there is mismatch between firmware and driver. + +Fixes: 36e53349b60b ("bnxt_en: Add additional extended port statistics.") +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit ad361adf0d08f1135f3845c6b3a36be7cc0bfda5) +Bugzilla: 1715161 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=21964229 +Tested: build and boot +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 0b57c5522791..a301f53f01aa 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -6740,6 +6740,7 @@ static int bnxt_hwrm_port_qstats_ext(struct bnxt *bp) + struct hwrm_queue_pri2cos_qcfg_input req2 = {0}; + struct hwrm_port_qstats_ext_input req = {0}; + struct bnxt_pf_info *pf = &bp->pf; ++ u32 tx_stat_size; + int rc; + + if (!(bp->flags & BNXT_FLAG_PORT_STATS_EXT)) +@@ -6749,13 +6750,16 @@ static int bnxt_hwrm_port_qstats_ext(struct bnxt *bp) + req.port_id = cpu_to_le16(pf->port_id); + req.rx_stat_size = cpu_to_le16(sizeof(struct rx_port_stats_ext)); + req.rx_stat_host_addr = cpu_to_le64(bp->hw_rx_port_stats_ext_map); +- req.tx_stat_size = cpu_to_le16(sizeof(struct tx_port_stats_ext)); ++ tx_stat_size = bp->hw_tx_port_stats_ext ? ++ sizeof(*bp->hw_tx_port_stats_ext) : 0; ++ req.tx_stat_size = cpu_to_le16(tx_stat_size); + req.tx_stat_host_addr = cpu_to_le64(bp->hw_tx_port_stats_ext_map); + mutex_lock(&bp->hwrm_cmd_lock); + rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); + if (!rc) { + bp->fw_rx_stats_ext_size = le16_to_cpu(resp->rx_stat_size) / 8; +- bp->fw_tx_stats_ext_size = le16_to_cpu(resp->tx_stat_size) / 8; ++ bp->fw_tx_stats_ext_size = tx_stat_size ? ++ le16_to_cpu(resp->tx_stat_size) / 8 : 0; + } else { + bp->fw_rx_stats_ext_size = 0; + bp->fw_tx_stats_ext_size = 0; +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL-7_07-12_bnxt_en_Fix_statistics_context_reservation_logic.patch b/SOURCES/_PATCH_RHEL-7_07-12_bnxt_en_Fix_statistics_context_reservation_logic.patch new file mode 100644 index 0000000..72c01e1 --- /dev/null +++ b/SOURCES/_PATCH_RHEL-7_07-12_bnxt_en_Fix_statistics_context_reservation_logic.patch @@ -0,0 +1,72 @@ +Date: Wed, 5 Jun 2019 13:55:26 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, linville@redhat.com +Subject: [PATCH RHEL-7 07/12] bnxt_en: Fix statistics context reservation + logic. + +In an earlier commit that fixes the number of stats contexts to +reserve for the RDMA driver, we added a function parameter to pass in +the number of stats contexts to all the relevant functions. The passed +in parameter should have been used to set the enables field of the +firmware message. + +Fixes: 780baad44f0f ("bnxt_en: Reserve 1 stat_ctx for RDMA driver.") +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit 3f93cd3f098e284c851acb89265ebe35b994a5c8) +Bugzilla: 1715161 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=21964229 +Tested: build and boot +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 14 ++++++-------- + 1 file changed, 6 insertions(+), 8 deletions(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index a301f53f01aa..11fbcbb8d67a 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -5301,17 +5301,16 @@ __bnxt_hwrm_reserve_pf_rings(struct bnxt *bp, struct hwrm_func_cfg_input *req, + req->num_tx_rings = cpu_to_le16(tx_rings); + if (BNXT_NEW_RM(bp)) { + enables |= rx_rings ? FUNC_CFG_REQ_ENABLES_NUM_RX_RINGS : 0; ++ enables |= stats ? FUNC_CFG_REQ_ENABLES_NUM_STAT_CTXS : 0; + if (bp->flags & BNXT_FLAG_CHIP_P5) { + enables |= cp_rings ? FUNC_CFG_REQ_ENABLES_NUM_MSIX : 0; + enables |= tx_rings + ring_grps ? +- FUNC_CFG_REQ_ENABLES_NUM_CMPL_RINGS | +- FUNC_CFG_REQ_ENABLES_NUM_STAT_CTXS : 0; ++ FUNC_CFG_REQ_ENABLES_NUM_CMPL_RINGS : 0; + enables |= rx_rings ? + FUNC_CFG_REQ_ENABLES_NUM_RSSCOS_CTXS : 0; + } else { + enables |= cp_rings ? +- FUNC_CFG_REQ_ENABLES_NUM_CMPL_RINGS | +- FUNC_CFG_REQ_ENABLES_NUM_STAT_CTXS : 0; ++ FUNC_CFG_REQ_ENABLES_NUM_CMPL_RINGS : 0; + enables |= ring_grps ? + FUNC_CFG_REQ_ENABLES_NUM_HW_RING_GRPS | + FUNC_CFG_REQ_ENABLES_NUM_RSSCOS_CTXS : 0; +@@ -5351,14 +5350,13 @@ __bnxt_hwrm_reserve_vf_rings(struct bnxt *bp, + enables |= tx_rings ? FUNC_VF_CFG_REQ_ENABLES_NUM_TX_RINGS : 0; + enables |= rx_rings ? FUNC_VF_CFG_REQ_ENABLES_NUM_RX_RINGS | + FUNC_VF_CFG_REQ_ENABLES_NUM_RSSCOS_CTXS : 0; ++ enables |= stats ? FUNC_VF_CFG_REQ_ENABLES_NUM_STAT_CTXS : 0; + if (bp->flags & BNXT_FLAG_CHIP_P5) { + enables |= tx_rings + ring_grps ? +- FUNC_VF_CFG_REQ_ENABLES_NUM_CMPL_RINGS | +- FUNC_VF_CFG_REQ_ENABLES_NUM_STAT_CTXS : 0; ++ FUNC_VF_CFG_REQ_ENABLES_NUM_CMPL_RINGS : 0; + } else { + enables |= cp_rings ? +- FUNC_VF_CFG_REQ_ENABLES_NUM_CMPL_RINGS | +- FUNC_VF_CFG_REQ_ENABLES_NUM_STAT_CTXS : 0; ++ FUNC_VF_CFG_REQ_ENABLES_NUM_CMPL_RINGS : 0; + enables |= ring_grps ? + FUNC_VF_CFG_REQ_ENABLES_NUM_HW_RING_GRPS : 0; + } +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL-7_08-12_bnxt_en_Fix_uninitialized_variable_usage_in_bnxt_r.patch b/SOURCES/_PATCH_RHEL-7_08-12_bnxt_en_Fix_uninitialized_variable_usage_in_bnxt_r.patch new file mode 100644 index 0000000..b56cbaa --- /dev/null +++ b/SOURCES/_PATCH_RHEL-7_08-12_bnxt_en_Fix_uninitialized_variable_usage_in_bnxt_r.patch @@ -0,0 +1,63 @@ +Date: Wed, 5 Jun 2019 13:55:27 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, linville@redhat.com +Subject: [PATCH RHEL-7 08/12] bnxt_en: Fix uninitialized variable usage in + bnxt_rx_pkt(). + +In bnxt_rx_pkt(), if the driver encounters BD errors, it will recycle +the buffers and jump to the end where the uninitailized variable "len" +is referenced. Fix it by adding a new jump label that will skip +the length update. This is the most correct fix since the length +may not be valid when we get this type of error. + +Fixes: 6a8788f25625 ("bnxt_en: add support for software dynamic interrupt moderation") +Reported-by: Nathan Chancellor +Cc: Nathan Chancellor +Signed-off-by: Michael Chan +Reviewed-by: Nathan Chancellor +Tested-by: Nathan Chancellor +Signed-off-by: David S. Miller +(cherry picked from commit 0b397b17a4120cb80f7bf89eb30587b3dd9b0d1d) +Bugzilla: 1715161 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=21964229 +Tested: build and boot +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 11fbcbb8d67a..6ab79be9f46d 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -1617,7 +1617,7 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, + netdev_warn(bp->dev, "RX buffer error %x\n", rx_err); + bnxt_sched_reset(bp, rxr); + } +- goto next_rx; ++ goto next_rx_no_len; + } + + len = le32_to_cpu(rxcmp->rx_cmp_len_flags_type) >> RX_CMP_LEN_SHIFT; +@@ -1698,12 +1698,13 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, + rc = 1; + + next_rx: +- rxr->rx_prod = NEXT_RX(prod); +- rxr->rx_next_cons = NEXT_RX(cons); +- + cpr->rx_packets += 1; + cpr->rx_bytes += len; + ++next_rx_no_len: ++ rxr->rx_prod = NEXT_RX(prod); ++ rxr->rx_next_cons = NEXT_RX(cons); ++ + next_rx_no_prod_no_len: + *raw_cons = tmp_raw_cons; + +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL-7_09-12_bnxt_en_Improve_NQ_reservations.patch b/SOURCES/_PATCH_RHEL-7_09-12_bnxt_en_Improve_NQ_reservations.patch new file mode 100644 index 0000000..017c2a6 --- /dev/null +++ b/SOURCES/_PATCH_RHEL-7_09-12_bnxt_en_Improve_NQ_reservations.patch @@ -0,0 +1,49 @@ +Date: Wed, 5 Jun 2019 13:55:28 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, linville@redhat.com +Subject: [PATCH RHEL-7 09/12] bnxt_en: Improve NQ reservations. + +bnxt_need_reserve_rings() determines if any resources have changed and +requires new reservation with firmware. The NQ checking is currently +just an approximation. Improve the NQ checking logic to make it +accurate. NQ reservation is only needed on 57500 PFs. This fix will +eliminate unnecessary reservations and will reduce NQ reservations +when some NQs have been released on 57500 PFs. + +Fixes: c0b8cda05e1d ("bnxt_en: Fix NQ/CP rings accounting on the new 57500 chips.") +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit 01989c6b69d91a0df0af8d5c6b5f33d82a239ae0) +Bugzilla: 1715161 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=21964229 +Tested: build and boot +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 6ab79be9f46d..49a60a713ce4 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -5489,11 +5489,13 @@ static bool bnxt_need_reserve_rings(struct bnxt *bp) + stat = bnxt_get_func_stat_ctxs(bp); + if (BNXT_NEW_RM(bp) && + (hw_resc->resv_rx_rings != rx || hw_resc->resv_cp_rings != cp || +- hw_resc->resv_irqs < nq || hw_resc->resv_vnics != vnic || +- hw_resc->resv_stat_ctxs != stat || ++ hw_resc->resv_vnics != vnic || hw_resc->resv_stat_ctxs != stat || + (hw_resc->resv_hw_ring_grps != grp && + !(bp->flags & BNXT_FLAG_CHIP_P5)))) + return true; ++ if ((bp->flags & BNXT_FLAG_CHIP_P5) && BNXT_PF(bp) && ++ hw_resc->resv_irqs != nq) ++ return true; + return false; + } + +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL-7_10-12_bnxt_en_Fix_aggregation_buffer_leak_under_OOM_cond.patch b/SOURCES/_PATCH_RHEL-7_10-12_bnxt_en_Fix_aggregation_buffer_leak_under_OOM_cond.patch new file mode 100644 index 0000000..1735619 --- /dev/null +++ b/SOURCES/_PATCH_RHEL-7_10-12_bnxt_en_Fix_aggregation_buffer_leak_under_OOM_cond.patch @@ -0,0 +1,45 @@ +Date: Wed, 5 Jun 2019 13:55:29 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, linville@redhat.com +Subject: [PATCH RHEL-7 10/12] bnxt_en: Fix aggregation buffer leak under OOM + condition. + +For every RX packet, the driver replenishes all buffers used for that +packet and puts them back into the RX ring and RX aggregation ring. +In one code path where the RX packet has one RX buffer and one or more +aggregation buffers, we missed recycling the aggregation buffer(s) if +we are unable to allocate a new SKB buffer. This leads to the +aggregation ring slowly running out of buffers over time. Fix it +by properly recycling the aggregation buffers. + +Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.") +Reported-by: Rakesh Hemnani +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit 296d5b54163964b7ae536b8b57dfbd21d4e868e1) +Bugzilla: 1715161 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=21964229 +Tested: build and boot +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 49a60a713ce4..3e0697cecd36 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -1632,6 +1632,8 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, + skb = bnxt_copy_skb(bnapi, data_ptr, len, dma_addr); + bnxt_reuse_rx_data(rxr, cons, data); + if (!skb) { ++ if (agg_bufs) ++ bnxt_reuse_rx_agg_bufs(cpr, cp_cons, agg_bufs); + rc = -ENOMEM; + goto next_rx; + } +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL-7_11-12_bnxt_en_Fix_possible_BUG__condition_when_calling_p.patch b/SOURCES/_PATCH_RHEL-7_11-12_bnxt_en_Fix_possible_BUG__condition_when_calling_p.patch new file mode 100644 index 0000000..2078677 --- /dev/null +++ b/SOURCES/_PATCH_RHEL-7_11-12_bnxt_en_Fix_possible_BUG__condition_when_calling_p.patch @@ -0,0 +1,116 @@ +Date: Wed, 5 Jun 2019 13:55:30 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, linville@redhat.com +Subject: [PATCH RHEL-7 11/12] bnxt_en: Fix possible BUG() condition when + calling pci_disable_msix(). + +When making configuration changes, the driver calls bnxt_close_nic() +and then bnxt_open_nic() for the changes to take effect. A parameter +irq_re_init is passed to the call sequence to indicate if IRQ +should be re-initialized. This irq_re_init parameter needs to +be included in the bnxt_reserve_rings() call. bnxt_reserve_rings() +can only call pci_disable_msix() if the irq_re_init parameter is +true, otherwise it may hit BUG() because some IRQs may not have been +freed yet. + +Fixes: 41e8d7983752 ("bnxt_en: Modify the ring reservation functions for 57500 series chips.") +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit 1b3f0b75c39f534278a895c117282014e9d0ae1f) +Bugzilla: 1715161 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=21964229 +Tested: build and boot +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 13 +++++++------ + drivers/net/ethernet/broadcom/bnxt/bnxt.h | 2 +- + drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 2 +- + drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 2 +- + 4 files changed, 10 insertions(+), 9 deletions(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 3e0697cecd36..94cc92183996 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -7503,22 +7503,23 @@ static void bnxt_clear_int_mode(struct bnxt *bp) + bp->flags &= ~BNXT_FLAG_USING_MSIX; + } + +-int bnxt_reserve_rings(struct bnxt *bp) ++int bnxt_reserve_rings(struct bnxt *bp, bool irq_re_init) + { + int tcs = netdev_get_num_tc(bp->dev); +- bool reinit_irq = false; ++ bool irq_cleared = false; + int rc; + + if (!bnxt_need_reserve_rings(bp)) + return 0; + +- if (BNXT_NEW_RM(bp) && (bnxt_get_num_msix(bp) != bp->total_irqs)) { ++ if (irq_re_init && BNXT_NEW_RM(bp) && ++ bnxt_get_num_msix(bp) != bp->total_irqs) { + bnxt_ulp_irq_stop(bp); + bnxt_clear_int_mode(bp); +- reinit_irq = true; ++ irq_cleared = true; + } + rc = __bnxt_reserve_rings(bp); +- if (reinit_irq) { ++ if (irq_cleared) { + if (!rc) + rc = bnxt_init_int_mode(bp); + bnxt_ulp_irq_restart(bp, rc); +@@ -8417,7 +8418,7 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init) + return rc; + } + } +- rc = bnxt_reserve_rings(bp); ++ rc = bnxt_reserve_rings(bp, irq_re_init); + if (rc) + return rc; + if ((bp->flags & BNXT_FLAG_RFS) && +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h +index 2fb653e0048d..4d8b89334472 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h +@@ -1776,7 +1776,7 @@ unsigned int bnxt_get_avail_stat_ctxs_for_en(struct bnxt *bp); + unsigned int bnxt_get_max_func_cp_rings(struct bnxt *bp); + unsigned int bnxt_get_avail_cp_rings_for_en(struct bnxt *bp); + int bnxt_get_avail_msix(struct bnxt *bp, int num); +-int bnxt_reserve_rings(struct bnxt *bp); ++int bnxt_reserve_rings(struct bnxt *bp, bool irq_re_init); + void bnxt_tx_disable(struct bnxt *bp); + void bnxt_tx_enable(struct bnxt *bp); + int bnxt_hwrm_set_pause(struct bnxt *); +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +index 0baf2c6a658d..d9b67724a503 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +@@ -788,7 +788,7 @@ static int bnxt_set_channels(struct net_device *dev, + */ + } + } else { +- rc = bnxt_reserve_rings(bp); ++ rc = bnxt_reserve_rings(bp, true); + } + + return rc; +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c +index cf475873ce81..bfa342a98d08 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c +@@ -147,7 +147,7 @@ static int bnxt_req_msix_vecs(struct bnxt_en_dev *edev, int ulp_id, + bnxt_close_nic(bp, true, false); + rc = bnxt_open_nic(bp, true, false); + } else { +- rc = bnxt_reserve_rings(bp); ++ rc = bnxt_reserve_rings(bp, true); + } + } + if (rc) { +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL-7_12-12_bnxt_en_Reduce_memory_usage_when_running_in_kdump_.patch b/SOURCES/_PATCH_RHEL-7_12-12_bnxt_en_Reduce_memory_usage_when_running_in_kdump_.patch new file mode 100644 index 0000000..cb6e14b --- /dev/null +++ b/SOURCES/_PATCH_RHEL-7_12-12_bnxt_en_Reduce_memory_usage_when_running_in_kdump_.patch @@ -0,0 +1,73 @@ +Date: Wed, 5 Jun 2019 13:55:31 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, linville@redhat.com +Subject: [PATCH RHEL-7 12/12] bnxt_en: Reduce memory usage when running in + kdump kernel. + +Skip RDMA context memory allocations, reduce to 1 ring, and disable +TPA when running in the kdump kernel. Without this patch, the driver +fails to initialize with memory allocation errors when running in a +typical kdump kernel. + +Fixes: cf6daed098d1 ("bnxt_en: Increase context memory allocations on 57500 chips for RDMA.") +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit d629522e1d66561f38e5c8d4f52bb6d254ec0707) +Bugzilla: 1715161 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=21964229 +Tested: build and boot +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 4 ++-- + drivers/net/ethernet/broadcom/bnxt/bnxt.h | 4 +++- + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 94cc92183996..32434cbf0769 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -6330,7 +6330,7 @@ static int bnxt_alloc_ctx_mem(struct bnxt *bp) + if (!ctx || (ctx->flags & BNXT_CTX_FLAG_INITED)) + return 0; + +- if (bp->flags & BNXT_FLAG_ROCE_CAP) { ++ if ((bp->flags & BNXT_FLAG_ROCE_CAP) && !is_kdump_kernel()) { + pg_lvl = 2; + extra_qps = 65536; + extra_srqs = 8192; +@@ -10296,7 +10296,7 @@ static int bnxt_set_dflt_rings(struct bnxt *bp, bool sh) + + if (sh) + bp->flags |= BNXT_FLAG_SHARED_RINGS; +- dflt_rings = netif_get_num_default_rss_queues(); ++ dflt_rings = is_kdump_kernel() ? 1 : netif_get_num_default_rss_queues(); + /* Reduce default rings on multi-port cards so that total default + * rings do not exceed CPU count. + */ +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h +index 4d8b89334472..c09b20b08395 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h +@@ -20,6 +20,7 @@ + + #include + #include ++#include + #include + #include + #include +@@ -1367,7 +1368,8 @@ struct bnxt { + #define BNXT_CHIP_TYPE_NITRO_A0(bp) ((bp)->flags & BNXT_FLAG_CHIP_NITRO_A0) + #define BNXT_RX_PAGE_MODE(bp) ((bp)->flags & BNXT_FLAG_RX_PAGE_MODE) + #define BNXT_SUPPORTS_TPA(bp) (!BNXT_CHIP_TYPE_NITRO_A0(bp) && \ +- !(bp->flags & BNXT_FLAG_CHIP_P5)) ++ !(bp->flags & BNXT_FLAG_CHIP_P5) && \ ++ !is_kdump_kernel()) + + /* Chip class phase 5 */ + #define BNXT_CHIP_P5(bp) \ +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL7_1-7_bnxt_en_Add_device_IDs_0x1806_and_0x1752_for_57500_de.patch b/SOURCES/_PATCH_RHEL7_1-7_bnxt_en_Add_device_IDs_0x1806_and_0x1752_for_57500_de.patch new file mode 100644 index 0000000..f957bb1 --- /dev/null +++ b/SOURCES/_PATCH_RHEL7_1-7_bnxt_en_Add_device_IDs_0x1806_and_0x1752_for_57500_de.patch @@ -0,0 +1,61 @@ +Date: Fri, 16 Aug 2019 17:35:53 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com +Subject: [PATCH RHEL7 1/7] bnxt_en: Add device IDs 0x1806 and 0x1752 for + 57500 devices. + +0x1806 and 0x1752 are VF variant and PF variant of the 57500 chip +family. + +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit 51fec80d3a669cdc3950973cb2a9045adeb0e7f0) +Bugzilla: 1738655 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23050341 +Tested: netperf with ipv4 & ipv6 testing +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index c61d0d3da76d..635fc90350ba 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -115,6 +115,7 @@ enum board_idx { + BCM5745x_NPAR, + BCM57508, + BCM57504, ++ BCM57502, + BCM58802, + BCM58804, + BCM58808, +@@ -159,6 +160,7 @@ static const struct { + [BCM5745x_NPAR] = { "Broadcom BCM5745x NetXtreme-E Ethernet Partition" }, + [BCM57508] = { "Broadcom BCM57508 NetXtreme-E 10Gb/25Gb/50Gb/100Gb/200Gb Ethernet" }, + [BCM57504] = { "Broadcom BCM57504 NetXtreme-E 10Gb/25Gb/50Gb/100Gb/200Gb Ethernet" }, ++ [BCM57502] = { "Broadcom BCM57502 NetXtreme-E 10Gb/25Gb/50Gb Ethernet" }, + [BCM58802] = { "Broadcom BCM58802 NetXtreme-S 10Gb/25Gb/40Gb/50Gb Ethernet" }, + [BCM58804] = { "Broadcom BCM58804 NetXtreme-S 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet" }, + [BCM58808] = { "Broadcom BCM58808 NetXtreme-S 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet" }, +@@ -206,6 +208,7 @@ static const struct pci_device_id bnxt_pci_tbl[] = { + { PCI_VDEVICE(BROADCOM, 0x16f1), .driver_data = BCM57452 }, + { PCI_VDEVICE(BROADCOM, 0x1750), .driver_data = BCM57508 }, + { PCI_VDEVICE(BROADCOM, 0x1751), .driver_data = BCM57504 }, ++ { PCI_VDEVICE(BROADCOM, 0x1752), .driver_data = BCM57502 }, + { PCI_VDEVICE(BROADCOM, 0xd802), .driver_data = BCM58802 }, + { PCI_VDEVICE(BROADCOM, 0xd804), .driver_data = BCM58804 }, + #ifdef CONFIG_BNXT_SRIOV +@@ -217,6 +220,7 @@ static const struct pci_device_id bnxt_pci_tbl[] = { + { PCI_VDEVICE(BROADCOM, 0x16dc), .driver_data = NETXTREME_E_VF }, + { PCI_VDEVICE(BROADCOM, 0x16e1), .driver_data = NETXTREME_C_VF }, + { PCI_VDEVICE(BROADCOM, 0x16e5), .driver_data = NETXTREME_C_VF }, ++ { PCI_VDEVICE(BROADCOM, 0x1806), .driver_data = NETXTREME_E_P5_VF }, + { PCI_VDEVICE(BROADCOM, 0x1807), .driver_data = NETXTREME_E_P5_VF }, + { PCI_VDEVICE(BROADCOM, 0xd800), .driver_data = NETXTREME_S_VF }, + #endif +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL7_2-7_bnxt_en_Add_PCI_IDs_for_57500_series_NPAR_devices.patch b/SOURCES/_PATCH_RHEL7_2-7_bnxt_en_Add_PCI_IDs_for_57500_series_NPAR_devices.patch new file mode 100644 index 0000000..7936ba4 --- /dev/null +++ b/SOURCES/_PATCH_RHEL7_2-7_bnxt_en_Add_PCI_IDs_for_57500_series_NPAR_devices.patch @@ -0,0 +1,58 @@ +Date: Fri, 16 Aug 2019 17:35:54 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com +Subject: [PATCH RHEL7 2/7] bnxt_en: Add PCI IDs for 57500 series NPAR devices. + +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit 49c98421e6ab33665e8ee7901218a712f5b0db2e) +Bugzilla: 1738655 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23050341 +Tested: netperf with ipv4 & ipv6 testing +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 635fc90350ba..7c5cd6dbc528 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -116,6 +116,9 @@ enum board_idx { + BCM57508, + BCM57504, + BCM57502, ++ BCM57508_NPAR, ++ BCM57504_NPAR, ++ BCM57502_NPAR, + BCM58802, + BCM58804, + BCM58808, +@@ -161,6 +164,9 @@ static const struct { + [BCM57508] = { "Broadcom BCM57508 NetXtreme-E 10Gb/25Gb/50Gb/100Gb/200Gb Ethernet" }, + [BCM57504] = { "Broadcom BCM57504 NetXtreme-E 10Gb/25Gb/50Gb/100Gb/200Gb Ethernet" }, + [BCM57502] = { "Broadcom BCM57502 NetXtreme-E 10Gb/25Gb/50Gb Ethernet" }, ++ [BCM57508_NPAR] = { "Broadcom BCM57508 NetXtreme-E Ethernet Partition" }, ++ [BCM57504_NPAR] = { "Broadcom BCM57504 NetXtreme-E Ethernet Partition" }, ++ [BCM57502_NPAR] = { "Broadcom BCM57502 NetXtreme-E Ethernet Partition" }, + [BCM58802] = { "Broadcom BCM58802 NetXtreme-S 10Gb/25Gb/40Gb/50Gb Ethernet" }, + [BCM58804] = { "Broadcom BCM58804 NetXtreme-S 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet" }, + [BCM58808] = { "Broadcom BCM58808 NetXtreme-S 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet" }, +@@ -209,6 +215,12 @@ static const struct pci_device_id bnxt_pci_tbl[] = { + { PCI_VDEVICE(BROADCOM, 0x1750), .driver_data = BCM57508 }, + { PCI_VDEVICE(BROADCOM, 0x1751), .driver_data = BCM57504 }, + { PCI_VDEVICE(BROADCOM, 0x1752), .driver_data = BCM57502 }, ++ { PCI_VDEVICE(BROADCOM, 0x1800), .driver_data = BCM57508_NPAR }, ++ { PCI_VDEVICE(BROADCOM, 0x1801), .driver_data = BCM57504_NPAR }, ++ { PCI_VDEVICE(BROADCOM, 0x1802), .driver_data = BCM57502_NPAR }, ++ { PCI_VDEVICE(BROADCOM, 0x1803), .driver_data = BCM57508_NPAR }, ++ { PCI_VDEVICE(BROADCOM, 0x1804), .driver_data = BCM57504_NPAR }, ++ { PCI_VDEVICE(BROADCOM, 0x1805), .driver_data = BCM57502_NPAR }, + { PCI_VDEVICE(BROADCOM, 0xd802), .driver_data = BCM58802 }, + { PCI_VDEVICE(BROADCOM, 0xd804), .driver_data = BCM58804 }, + #ifdef CONFIG_BNXT_SRIOV +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL7_3-7_bnxt_en_Disable_bus_master_during_PCI_shutdown_and_dr.patch b/SOURCES/_PATCH_RHEL7_3-7_bnxt_en_Disable_bus_master_during_PCI_shutdown_and_dr.patch new file mode 100644 index 0000000..1001633 --- /dev/null +++ b/SOURCES/_PATCH_RHEL7_3-7_bnxt_en_Disable_bus_master_during_PCI_shutdown_and_dr.patch @@ -0,0 +1,55 @@ +Date: Fri, 16 Aug 2019 17:35:55 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com +Subject: [PATCH RHEL7 3/7] bnxt_en: Disable bus master during PCI shutdown + and driver unload. + +Some chips with older firmware can continue to perform DMA read from +context memory even after the memory has been freed. In the PCI shutdown +method, we need to call pci_disable_device() to shutdown DMA to prevent +this DMA before we put the device into D3hot. DMA memory request in +D3hot state will generate PCI fatal error. Similarly, in the driver +remove method, the context memory should only be freed after DMA has +been shutdown for correctness. + +Fixes: 98f04cf0f1fc ("bnxt_en: Check context memory requirements from firmware.") +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit c20dc142dd7b2884b8570eeab323bcd4a84294fa) +Bugzilla: 1738649 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23050341 +Tested: netperf with ipv4 & ipv6 testing +Signed-off-by: Jonathan Toppins +--- + 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 7c5cd6dbc528..74657129d543 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -10140,10 +10140,10 @@ static void bnxt_remove_one(struct pci_dev *pdev) + bnxt_dcb_free(bp); + kfree(bp->edev); + bp->edev = NULL; ++ bnxt_cleanup_pci(bp); + bnxt_free_ctx_mem(bp); + kfree(bp->ctx); + bp->ctx = NULL; +- bnxt_cleanup_pci(bp); + bnxt_free_port_stats(bp); + free_netdev(dev); + } +@@ -10707,6 +10707,7 @@ static void bnxt_shutdown(struct pci_dev *pdev) + + if (system_state == SYSTEM_POWER_OFF) { + bnxt_clear_int_mode(bp); ++ pci_disable_device(pdev); + pci_wake_from_d3(pdev, bp->wol); + pci_set_power_state(pdev, PCI_D3hot); + } +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL7_4-7_bnxt_en_Suppress_error_messages_when_querying_DSCP_DC.patch b/SOURCES/_PATCH_RHEL7_4-7_bnxt_en_Suppress_error_messages_when_querying_DSCP_DC.patch new file mode 100644 index 0000000..a5682b5 --- /dev/null +++ b/SOURCES/_PATCH_RHEL7_4-7_bnxt_en_Suppress_error_messages_when_querying_DSCP_DC.patch @@ -0,0 +1,40 @@ +Date: Fri, 16 Aug 2019 17:35:56 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com +Subject: [PATCH RHEL7 4/7] bnxt_en: Suppress error messages when querying + DSCP DCB capabilities. + +Some firmware versions do not support this so use the silent variant +to send the message to firmware to suppress the harmless error. This +error message is unnecessarily alarming the user. + +Fixes: afdc8a84844a ("bnxt_en: Add DCBNL DSCP application protocol support.") +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit 4ca5fa39e1aea2f85eb9c4257075c4077c6531da) +Bugzilla: 1738649 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23050341 +Tested: netperf with ipv4 & ipv6 testing +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c +index 15c7041e937b..88f0bc7a15ea 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c +@@ -396,7 +396,7 @@ static int bnxt_hwrm_queue_dscp_qcaps(struct bnxt *bp) + + bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_QUEUE_DSCP_QCAPS, -1, -1); + mutex_lock(&bp->hwrm_cmd_lock); +- rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); ++ rc = _hwrm_send_message_silent(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); + if (!rc) { + bp->max_dscp_value = (1 << resp->num_dscp_bits) - 1; + if (bp->max_dscp_value < 0x3f) +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL7_5-7_bnxt_en_Cap_the_returned_MSIX_vectors_to_the_RDMA_dri.patch b/SOURCES/_PATCH_RHEL7_5-7_bnxt_en_Cap_the_returned_MSIX_vectors_to_the_RDMA_dri.patch new file mode 100644 index 0000000..3885840 --- /dev/null +++ b/SOURCES/_PATCH_RHEL7_5-7_bnxt_en_Cap_the_returned_MSIX_vectors_to_the_RDMA_dri.patch @@ -0,0 +1,47 @@ +Date: Fri, 16 Aug 2019 17:35:57 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com +Subject: [PATCH RHEL7 5/7] bnxt_en: Cap the returned MSIX vectors to the RDMA + driver. + +In an earlier commit to improve NQ reservations on 57500 chips, we +set the resv_irqs on the 57500 VFs to the fixed value assigned by +the PF regardless of how many are actually used. The current +code assumes that resv_irqs minus the ones used by the network driver +must be the ones for the RDMA driver. This is no longer true and +we may return more MSIX vectors than requested, causing inconsistency. +Fix it by capping the value. + +Fixes: 01989c6b69d9 ("bnxt_en: Improve NQ reservations.") +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit 1dbc59fa4bbaa108b641cd65a54f662b75e4ed36) +Bugzilla: 1738649 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23050341 +Tested: netperf with ipv4 & ipv6 testing +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c +index bfa342a98d08..fc77caf0a076 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c +@@ -157,8 +157,10 @@ static int bnxt_req_msix_vecs(struct bnxt_en_dev *edev, int ulp_id, + + if (BNXT_NEW_RM(bp)) { + struct bnxt_hw_resc *hw_resc = &bp->hw_resc; ++ int resv_msix; + +- avail_msix = hw_resc->resv_irqs - bp->cp_nr_rings; ++ resv_msix = hw_resc->resv_irqs - bp->cp_nr_rings; ++ avail_msix = min_t(int, resv_msix, avail_msix); + edev->ulp_tbl[ulp_id].msix_requested = avail_msix; + } + bnxt_fill_msix_vecs(bp, ent); +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL7_6-7_bnxt_en_Fix_statistics_context_reservation_logic_for_.patch b/SOURCES/_PATCH_RHEL7_6-7_bnxt_en_Fix_statistics_context_reservation_logic_for_.patch new file mode 100644 index 0000000..48b9423 --- /dev/null +++ b/SOURCES/_PATCH_RHEL7_6-7_bnxt_en_Fix_statistics_context_reservation_logic_for_.patch @@ -0,0 +1,65 @@ +Date: Fri, 16 Aug 2019 17:35:58 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com +Subject: [PATCH RHEL7 6/7] bnxt_en: Fix statistics context reservation logic + for RDMA driver. + +The current logic assumes that the RDMA driver uses one statistics +context adjacent to the ones used by the network driver. This +assumption is not true and the statistics context used by the +RDMA driver is tied to its MSIX base vector. This wrong assumption +can cause RDMA driver failure after changing ethtool rings on the +network side. Fix the statistics reservation logic accordingly. + +Fixes: 780baad44f0f ("bnxt_en: Reserve 1 stat_ctx for RDMA driver.") +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit d77b1ad8e87dc5a6cd0d9158b097a4817946ca3b) +Bugzilla: 1738649 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23050341 +Tested: netperf with ipv4 & ipv6 testing +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 74657129d543..989bbf7ac2d8 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -5486,7 +5486,16 @@ static int bnxt_cp_rings_in_use(struct bnxt *bp) + + static int bnxt_get_func_stat_ctxs(struct bnxt *bp) + { +- return bp->cp_nr_rings + bnxt_get_ulp_stat_ctxs(bp); ++ int ulp_stat = bnxt_get_ulp_stat_ctxs(bp); ++ int cp = bp->cp_nr_rings; ++ ++ if (!ulp_stat) ++ return cp; ++ ++ if (bnxt_nq_rings_in_use(bp) > cp + bnxt_get_ulp_msix_num(bp)) ++ return bnxt_get_ulp_msix_base(bp) + ulp_stat; ++ ++ return cp + ulp_stat; + } + + static bool bnxt_need_reserve_rings(struct bnxt *bp) +@@ -7381,11 +7390,7 @@ unsigned int bnxt_get_avail_cp_rings_for_en(struct bnxt *bp) + + unsigned int bnxt_get_avail_stat_ctxs_for_en(struct bnxt *bp) + { +- unsigned int stat; +- +- stat = bnxt_get_max_func_stat_ctxs(bp) - bnxt_get_ulp_stat_ctxs(bp); +- stat -= bp->cp_nr_rings; +- return stat; ++ return bnxt_get_max_func_stat_ctxs(bp) - bnxt_get_func_stat_ctxs(bp); + } + + int bnxt_get_avail_msix(struct bnxt *bp, int num) +-- +2.16.4 + + diff --git a/SOURCES/_PATCH_RHEL7_7-7_bnxt_en_Fix_ethtool_selftest_crash_under_error_condit.patch b/SOURCES/_PATCH_RHEL7_7-7_bnxt_en_Fix_ethtool_selftest_crash_under_error_condit.patch new file mode 100644 index 0000000..1d72c87 --- /dev/null +++ b/SOURCES/_PATCH_RHEL7_7-7_bnxt_en_Fix_ethtool_selftest_crash_under_error_condit.patch @@ -0,0 +1,54 @@ +Date: Fri, 16 Aug 2019 17:35:59 -0400 +From: Jonathan Toppins +To: rhkernel-list@redhat.com +Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com +Subject: [PATCH RHEL7 7/7] bnxt_en: Fix ethtool selftest crash under error + conditions. + +After ethtool loopback packet tests, we re-open the nic for the next +IRQ test. If the open fails, we must not proceed with the IRQ test +or we will crash with NULL pointer dereference. Fix it by checking +the bnxt_open_nic() return code before proceeding. + +Reported-by: Somasundaram Krishnasamy +Fixes: 67fea463fd87 ("bnxt_en: Add interrupt test to ethtool -t selftest.") +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +(cherry picked from commit d27e2ca1166aefd54d9c48fb6647dee8115a5dfc) +Bugzilla: 1738649 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23050341 +Tested: netperf with ipv4 & ipv6 testing +Signed-off-by: Jonathan Toppins +--- + drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +index d9b67724a503..61e1c4ce82af 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +@@ -2799,7 +2799,7 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest, + bool offline = false; + u8 test_results = 0; + u8 test_mask = 0; +- int rc, i; ++ int rc = 0, i; + + if (!bp->num_tests || !BNXT_SINGLE_PF(bp)) + return; +@@ -2870,9 +2870,9 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest, + } + bnxt_hwrm_phy_loopback(bp, false, false); + bnxt_half_close_nic(bp); +- bnxt_open_nic(bp, false, true); ++ rc = bnxt_open_nic(bp, false, true); + } +- if (bnxt_test_irq(bp)) { ++ if (rc || bnxt_test_irq(bp)) { + buf[BNXT_IRQ_TEST_IDX] = 1; + etest->flags |= ETH_TEST_FL_FAILED; + } +-- +2.16.4 + + diff --git a/SPECS/bnxt_en.spec b/SPECS/bnxt_en.spec new file mode 100644 index 0000000..9554646 --- /dev/null +++ b/SPECS/bnxt_en.spec @@ -0,0 +1,320 @@ +%define kmod_name bnxt_en +%define kmod_vendor redhat +%define kmod_driver_version 1.10.0_dup7.7 +%define kmod_driver_epoch %{nil} +%define kmod_rpm_release 1 +%define kmod_kernel_version 3.10.0-1062.el7 +%define kmod_kernel_version_min %{nil} +%define kmod_kernel_version_dep %{nil} +%define kmod_kbuild_dir drivers/net/ethernet/broadcom/bnxt +%define kmod_dependencies %{nil} +%define kmod_dist_build_deps %{nil} +%define kmod_build_dependencies %{nil} +%define kmod_devel_package 0 +%define kmod_install_path extra/kmod-redhat-bnxt_en +%define kernel_pkg kernel +%define kernel_devel_pkg kernel-devel +%define kernel_modules_pkg kernel-modules + +%{!?dist: %define dist .el7_7} +%{!?make_build: %define make_build make} + +%if "%{kmod_kernel_version_dep}" == "" +%define kmod_kernel_version_dep %{kmod_kernel_version} +%endif + +%if "%{kmod_dist_build_deps}" == "" +%if (0%{?rhel} > 7) || (0%{?centos} > 7) +%define kmod_dist_build_deps redhat-rpm-config kernel-abi-whitelists elfutils-libelf-devel kernel-rpm-macros kmod +%else +%define kmod_dist_build_deps redhat-rpm-config kernel-abi-whitelists +%endif +%endif + +Source0: %{kmod_name}-%{kmod_vendor}-%{kmod_driver_version}.tar.bz2 +# Source code patches +Patch0: 0000-bump-version.patch +Patch1: 0001-netdrv-bnxt_en-Add-support-for-BCM957504.patch +Patch2: _PATCH_RHEL7_1-7_bnxt_en_Add_device_IDs_0x1806_and_0x1752_for_57500_de.patch +Patch3: _PATCH_RHEL7_2-7_bnxt_en_Add_PCI_IDs_for_57500_series_NPAR_devices.patch +Patch4: _PATCH_RHEL-7_01-12_bnxt_en_Improve_RX_consumer_index_validity_check.patch +Patch5: _PATCH_RHEL-7_02-12_bnxt_en_Reset_device_on_RX_buffer_errors.patch +Patch6: _PATCH_RHEL-7_03-12_bnxt_en_Improve_multicast_address_setup_logic.patch +Patch7: _PATCH_RHEL-7_04-12_bnxt_en_Free_short_FW_command_HWRM_memory_in_error.patch +Patch8: _PATCH_RHEL-7_05-12_bnxt_en_Fix_possible_crash_in_bnxt_hwrm_ring_free_.patch +Patch9: _PATCH_RHEL-7_06-12_bnxt_en_Pass_correct_extended_TX_port_statistics_s.patch +Patch10: _PATCH_RHEL-7_07-12_bnxt_en_Fix_statistics_context_reservation_logic.patch +Patch11: _PATCH_RHEL-7_08-12_bnxt_en_Fix_uninitialized_variable_usage_in_bnxt_r.patch +Patch12: _PATCH_RHEL-7_09-12_bnxt_en_Improve_NQ_reservations.patch +Patch13: _PATCH_RHEL-7_10-12_bnxt_en_Fix_aggregation_buffer_leak_under_OOM_cond.patch +Patch14: _PATCH_RHEL-7_11-12_bnxt_en_Fix_possible_BUG__condition_when_calling_p.patch +Patch15: _PATCH_RHEL-7_12-12_bnxt_en_Reduce_memory_usage_when_running_in_kdump_.patch +Patch16: _PATCH_RHEL7_3-7_bnxt_en_Disable_bus_master_during_PCI_shutdown_and_dr.patch +Patch17: _PATCH_RHEL7_4-7_bnxt_en_Suppress_error_messages_when_querying_DSCP_DC.patch +Patch18: _PATCH_RHEL7_5-7_bnxt_en_Cap_the_returned_MSIX_vectors_to_the_RDMA_dri.patch +Patch19: _PATCH_RHEL7_6-7_bnxt_en_Fix_statistics_context_reservation_logic_for_.patch +Patch20: _PATCH_RHEL7_7-7_bnxt_en_Fix_ethtool_selftest_crash_under_error_condit.patch + +%define findpat %( echo "%""P" ) +%define __find_requires /usr/lib/rpm/redhat/find-requires.ksyms +%define __find_provides /usr/lib/rpm/redhat/find-provides.ksyms %{kmod_name} %{?epoch:%{epoch}:}%{version}-%{release} +%define sbindir %( if [ -d "/sbin" -a \! -h "/sbin" ]; then echo "/sbin"; else echo %{_sbindir}; fi ) +%define dup_state_dir %{_localstatedir}/lib/rpm-state/kmod-dups +%define kver_state_dir %{dup_state_dir}/kver +%define kver_state_file %{kver_state_dir}/%{kmod_kernel_version}.%(arch) +%define dup_module_list %{dup_state_dir}/rpm-kmod-%{kmod_name}-modules + +Name: kmod-redhat-bnxt_en +Version: %{kmod_driver_version} +Release: %{kmod_rpm_release}%{?dist} +%if "%{kmod_driver_epoch}" != "" +Epoch: %{kmod_driver_epoch} +%endif +Summary: bnxt_en kernel module for Driver Update Program +Group: System/Kernel +License: GPLv2 +URL: https://www.kernel.org/ +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) +BuildRequires: %kernel_devel_pkg = %kmod_kernel_version +%if "%{kmod_dist_build_deps}" != "" +BuildRequires: %{kmod_dist_build_deps} +%endif +ExclusiveArch: x86_64 +%global kernel_source() /usr/src/kernels/%{kmod_kernel_version}.$(arch) + +%global _use_internal_dependency_generator 0 +%if "%{?kmod_kernel_version_min}" != "" +Provides: %kernel_modules_pkg >= %{kmod_kernel_version_min}.%{_target_cpu} +%else +Provides: %kernel_modules_pkg = %{kmod_kernel_version_dep}.%{_target_cpu} +%endif +Provides: kmod-%{kmod_name} = %{?epoch:%{epoch}:}%{version}-%{release} +Requires(post): %{sbindir}/weak-modules +Requires(postun): %{sbindir}/weak-modules +Requires: kernel >= 3.10.0-1062.el7 + +Requires: kernel < 3.10.0-1063.el7 +%if 0 +Requires: firmware(%{kmod_name}) = ENTER_FIRMWARE_VERSION +%endif +%if "%{kmod_build_dependencies}" != "" +BuildRequires: %{kmod_build_dependencies} +%endif +%if "%{kmod_dependencies}" != "" +Requires: %{kmod_dependencies} +%endif +# if there are multiple kmods for the same driver from different vendors, +# they should conflict with each other. +Conflicts: kmod-%{kmod_name} + +%description +bnxt_en kernel module for Driver Update Program + +%if 0 + +%package -n kmod-redhat-bnxt_en-firmware +Version: ENTER_FIRMWARE_VERSION +Summary: bnxt_en firmware for Driver Update Program +Provides: firmware(%{kmod_name}) = ENTER_FIRMWARE_VERSION +%if "%{kmod_kernel_version_min}" != "" +Provides: %kernel_modules_pkg >= %{kmod_kernel_version_min}.%{_target_cpu} +%else +Provides: %kernel_modules_pkg = %{kmod_kernel_version_dep}.%{_target_cpu} +%endif +%description -n kmod-redhat-bnxt_en-firmware +bnxt_en firmware for Driver Update Program + + +%files -n kmod-redhat-bnxt_en-firmware +%defattr(644,root,root,755) +%{FIRMWARE_FILES} + +%endif + +# Development package +%if 0%{kmod_devel_package} +%package -n kmod-redhat-bnxt_en-devel +Version: %{kmod_driver_version} +Requires: kernel >= 3.10.0-1062.el7 + +Requires: kernel < 3.10.0-1063.el7 +Summary: bnxt_en development files for Driver Update Program + +%description -n kmod-redhat-bnxt_en-devel +bnxt_en development files for Driver Update Program + + +%files -n kmod-redhat-bnxt_en-devel +%defattr(644,root,root,755) +/usr/share/kmod-%{kmod_vendor}-%{kmod_name}/Module.symvers +%endif + +%post +modules=( $(find /lib/modules/%{kmod_kernel_version}.%(arch)/%{kmod_install_path} | grep '\.ko$') ) +printf '%s\n' "${modules[@]}" | %{sbindir}/weak-modules --add-modules --no-initramfs + +mkdir -p "%{kver_state_dir}" +touch "%{kver_state_file}" + +exit 0 + +%posttrans +# We have to re-implement part of weak-modules here because it doesn't allow +# calling initramfs regeneration separately +if [ -f "%{kver_state_file}" ]; then + kver_base="%{kmod_kernel_version_dep}" + kvers=$(ls -d "/lib/modules/${kver_base%%.*}"*) + + for k_dir in $kvers; do + k="${k_dir#/lib/modules/}" + + tmp_initramfs="/boot/initramfs-$k.tmp" + dst_initramfs="/boot/initramfs-$k.img" + + # The same check as in weak-modules: we assume that the kernel present + # if the symvers file exists. + if [ -e "/boot/symvers-$k.gz" ]; then + /usr/bin/dracut -f "$tmp_initramfs" "$k" || exit 1 + cmp -s "$tmp_initramfs" "$dst_initramfs" + if [ "$?" = 1 ]; then + mv "$tmp_initramfs" "$dst_initramfs" + else + rm -f "$tmp_initramfs" + fi + fi + done + + rm -f "%{kver_state_file}" + rmdir "%{kver_state_dir}" 2> /dev/null +fi + +rmdir "%{dup_state_dir}" 2> /dev/null + +exit 0 + +%preun +if rpm -q --filetriggers kmod 2> /dev/null| grep -q "Trigger for weak-modules call on kmod removal"; then + mkdir -p "%{kver_state_dir}" + touch "%{kver_state_file}" +fi + +mkdir -p "%{dup_state_dir}" +rpm -ql kmod-redhat-bnxt_en-%{kmod_driver_version}-%{kmod_rpm_release}%{?dist}.$(arch) | \ + grep '\.ko$' > "%{dup_module_list}" + +%postun +if rpm -q --filetriggers kmod 2> /dev/null| grep -q "Trigger for weak-modules call on kmod removal"; then + initramfs_opt="--no-initramfs" +else + initramfs_opt="" +fi + +modules=( $(cat "%{dup_module_list}") ) +rm -f "%{dup_module_list}" +printf '%s\n' "${modules[@]}" | %{sbindir}/weak-modules --remove-modules $initramfs_opt + +rmdir "%{dup_state_dir}" 2> /dev/null + +exit 0 + +%files +%defattr(644,root,root,755) +/lib/modules/%{kmod_kernel_version}.%(arch) +/etc/depmod.d/%{kmod_name}.conf +/usr/share/doc/kmod-%{kmod_name}/greylist.txt + +%prep +%setup -n %{kmod_name}-%{kmod_vendor}-%{kmod_driver_version} + +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch18 -p1 +%patch19 -p1 +%patch20 -p1 +set -- * +mkdir source +mv "$@" source/ +mkdir obj + +%build +rm -rf obj +cp -r source obj + +PWD_PATH="$PWD" +%if "%{workaround_no_pwd_rel_path}" != "1" +PWD_PATH=$(realpath --relative-to="%{kernel_source}" . 2>/dev/null || echo "$PWD") +%endif +%{make_build} -C %{kernel_source} V=1 M="$PWD_PATH/obj/%{kmod_kbuild_dir}" \ + NOSTDINC_FLAGS="-I$PWD_PATH/obj/include -I$PWD_PATH/obj/include/uapi" \ + EXTRA_CFLAGS="%{nil}" \ + %{nil} +# mark modules executable so that strip-to-file can strip them +find obj/%{kmod_kbuild_dir} -name "*.ko" -type f -exec chmod u+x '{}' + + +whitelist="/lib/modules/kabi-current/kabi_whitelist_%{_target_cpu}" +for modules in $( find obj/%{kmod_kbuild_dir} -name "*.ko" -type f -printf "%{findpat}\n" | sed 's|\.ko$||' | sort -u ) ; do + # update depmod.conf + module_weak_path=$(echo "$modules" | sed 's/[\/]*[^\/]*$//') + if [ -z "$module_weak_path" ]; then + module_weak_path=%{name} + else + module_weak_path=%{name}/$module_weak_path + fi + echo "override $(echo $modules | sed 's/.*\///')" \ + "$(echo "%{kmod_kernel_version_dep}" | + sed 's/\.[^\.]*$//; + s/\([.+?^$\/\\|()\[]\|\]\)/\\\0/g').*" \ + "weak-updates/$module_weak_path" >> source/depmod.conf + + # update greylist + nm -u obj/%{kmod_kbuild_dir}/$modules.ko | sed 's/.*U //' | sed 's/^\.//' | sort -u | while read -r symbol; do + grep -q "^\s*$symbol\$" $whitelist || echo "$symbol" >> source/greylist + done +done +sort -u source/greylist | uniq > source/greylist.txt + +%install +export INSTALL_MOD_PATH=$RPM_BUILD_ROOT +export INSTALL_MOD_DIR=%{kmod_install_path} +PWD_PATH="$PWD" +%if "%{workaround_no_pwd_rel_path}" != "1" +PWD_PATH=$(realpath --relative-to="%{kernel_source}" . 2>/dev/null || echo "$PWD") +%endif +make -C %{kernel_source} modules_install \ + M=$PWD_PATH/obj/%{kmod_kbuild_dir} +# Cleanup unnecessary kernel-generated module dependency files. +find $INSTALL_MOD_PATH/lib/modules -iname 'modules.*' -exec rm {} \; + +install -m 644 -D source/depmod.conf $RPM_BUILD_ROOT/etc/depmod.d/%{kmod_name}.conf +install -m 644 -D source/greylist.txt $RPM_BUILD_ROOT/usr/share/doc/kmod-%{kmod_name}/greylist.txt +%if 0 +%{FIRMWARE_FILES_INSTALL} +%endif +%if 0%{kmod_devel_package} +install -m 644 -D $PWD/obj/%{kmod_kbuild_dir}/Module.symvers $RPM_BUILD_ROOT/usr/share/kmod-%{kmod_vendor}-%{kmod_name}/Module.symvers +%endif + +%clean +rm -rf $RPM_BUILD_ROOT + +%changelog +* Fri Sep 27 2019 Eugene Syromiatnikov 1.10.0_dup7.7-1 +- c45db7d2f34d6fad924c20443f73147dca7f6e29 +- bnxt_en kernel module for Driver Update Program +- Resolves: #bz1755331