c8
imports/c8/kmod-redhat-ionic-4.18.0.210_dup8.2-2.el8_2
commit
3f22d03c75
@ -0,0 +1 @@
|
|||||||
|
SOURCES/ionic-redhat-4.18.0.210_dup8.2.tar.bz2
|
@ -0,0 +1 @@
|
|||||||
|
e5f2bbd14de72bf5220e4f328f2b7201c6b19c59 SOURCES/ionic-redhat-4.18.0.210_dup8.2.tar.bz2
|
@ -0,0 +1,55 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:36 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 01/16] drivers: [ionic only] Remove inclusion of
|
||||||
|
vermagic header
|
||||||
|
|
||||||
|
Get rid of linux/vermagic.h includes, so that MODULE_ARCH_VERMAGIC from
|
||||||
|
the arch header arch/x86/include/asm/module.h won't be redefined.
|
||||||
|
|
||||||
|
In file included from ./include/linux/module.h:30,
|
||||||
|
from drivers/net/ethernet/3com/3c515.c:56:
|
||||||
|
./arch/x86/include/asm/module.h:73: warning: "MODULE_ARCH_VERMAGIC"
|
||||||
|
redefined
|
||||||
|
73 | # define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY
|
||||||
|
|
|
||||||
|
In file included from drivers/net/ethernet/3com/3c515.c:25:
|
||||||
|
./include/linux/vermagic.h:28: note: this is the location of the
|
||||||
|
previous definition
|
||||||
|
28 | #define MODULE_ARCH_VERMAGIC ""
|
||||||
|
|
|
||||||
|
|
||||||
|
Fixes: 6bba2e89a88c ("net/3com: Delete driver and module versions from 3com drivers")
|
||||||
|
Co-developed-by: Borislav Petkov <bp@suse.de>
|
||||||
|
Signed-off-by: Borislav Petkov <bp@suse.de>
|
||||||
|
Acked-by: Shannon Nelson <snelson@pensando.io> # ionic
|
||||||
|
Acked-by: Sebastian Reichel <sre@kernel.org> # power
|
||||||
|
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit 1c79031f8a75c132bbd42e3ef20267af97b67466)
|
||||||
|
Bugzilla: 1848149
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_main.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_main.c b/drivers/net/ethernet/pensando/ionic/ionic_main.c
|
||||||
|
index 3344bc1f7671..15911ee1af32 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_main.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_main.c
|
||||||
|
@@ -6,7 +6,7 @@
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/netdevice.h>
|
||||||
|
#include <linux/utsname.h>
|
||||||
|
-#include <linux/vermagic.h>
|
||||||
|
+#include <generated/utsrelease.h>
|
||||||
|
|
||||||
|
#include "ionic.h"
|
||||||
|
#include "ionic_bus.h"
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,43 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:37 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 02/16] ionic: Use debugfs_create_bool() to export
|
||||||
|
bool
|
||||||
|
|
||||||
|
Currently bool ionic_cq.done_color is exported using
|
||||||
|
debugfs_create_u8(), which requires a cast, preventing further compiler
|
||||||
|
checks.
|
||||||
|
|
||||||
|
Fix this by switching to debugfs_create_bool(), and dropping the cast.
|
||||||
|
|
||||||
|
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||||
|
Acked-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit 0735ccc9d9a4ce09154395feb70b804de7cc6ebf)
|
||||||
|
Bugzilla: 1848149
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_debugfs.c | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_debugfs.c b/drivers/net/ethernet/pensando/ionic/ionic_debugfs.c
|
||||||
|
index 5f8fc58d42b3..11621ccc1faf 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_debugfs.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_debugfs.c
|
||||||
|
@@ -170,8 +170,7 @@ void ionic_debugfs_add_qcq(struct ionic_lif *lif, struct ionic_qcq *qcq)
|
||||||
|
debugfs_create_x64("base_pa", 0400, cq_dentry, &cq->base_pa);
|
||||||
|
debugfs_create_u32("num_descs", 0400, cq_dentry, &cq->num_descs);
|
||||||
|
debugfs_create_u32("desc_size", 0400, cq_dentry, &cq->desc_size);
|
||||||
|
- debugfs_create_u8("done_color", 0400, cq_dentry,
|
||||||
|
- (u8 *)&cq->done_color);
|
||||||
|
+ debugfs_create_bool("done_color", 0400, cq_dentry, &cq->done_color);
|
||||||
|
|
||||||
|
debugfs_create_file("tail", 0400, cq_dentry, cq, &cq_tail_fops);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,626 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:38 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 03/16] ionic: support longer tx sg lists
|
||||||
|
|
||||||
|
The version 1 Tx queues can use longer SG lists than the
|
||||||
|
original version 0 queues, but we need to check to see if the
|
||||||
|
firmware supports the v1 Tx queues. This implements the queue
|
||||||
|
type query for all queue types, and uses the information to
|
||||||
|
set up for using the longer Tx SG lists.
|
||||||
|
|
||||||
|
Because the Tx SG list can be longer, we need to limit the
|
||||||
|
max ring length to be sure we stay inside the boundaries of a
|
||||||
|
DMA allocation max size, so we lower the max Tx ring size.
|
||||||
|
|
||||||
|
The driver sets its highest known version in the Q_IDENTITY
|
||||||
|
command, and the FW returns the highest version that it knows,
|
||||||
|
bounded by the driver's version. The negotiated version number
|
||||||
|
is later used in the Q_INIT commands.
|
||||||
|
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit 5b3f3f2a71ed1cecf6fcf9e8c858a89589415449)
|
||||||
|
Bugzilla: 1848149
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_dev.c | 14 +++
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_dev.h | 7 +-
|
||||||
|
.../net/ethernet/pensando/ionic/ionic_ethtool.c | 4 +-
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_if.h | 112 +++++++++++++++++---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 114 ++++++++++++++++++++-
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_lif.h | 13 +++
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_main.c | 2 +
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_txrx.c | 27 +++--
|
||||||
|
8 files changed, 263 insertions(+), 30 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_dev.c b/drivers/net/ethernet/pensando/ionic/ionic_dev.c
|
||||||
|
index f4ae40ae1e53..d83eff0ae0ac 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_dev.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_dev.c
|
||||||
|
@@ -388,6 +388,19 @@ int ionic_set_vf_config(struct ionic *ionic, int vf, u8 attr, u8 *data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* LIF commands */
|
||||||
|
+void ionic_dev_cmd_queue_identify(struct ionic_dev *idev,
|
||||||
|
+ u16 lif_type, u8 qtype, u8 qver)
|
||||||
|
+{
|
||||||
|
+ union ionic_dev_cmd cmd = {
|
||||||
|
+ .q_identify.opcode = IONIC_CMD_Q_IDENTIFY,
|
||||||
|
+ .q_identify.lif_type = lif_type,
|
||||||
|
+ .q_identify.type = qtype,
|
||||||
|
+ .q_identify.ver = qver,
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ ionic_dev_cmd_go(idev, &cmd);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void ionic_dev_cmd_lif_identify(struct ionic_dev *idev, u8 type, u8 ver)
|
||||||
|
{
|
||||||
|
union ionic_dev_cmd cmd = {
|
||||||
|
@@ -431,6 +444,7 @@ void ionic_dev_cmd_adminq_init(struct ionic_dev *idev, struct ionic_qcq *qcq,
|
||||||
|
.q_init.opcode = IONIC_CMD_Q_INIT,
|
||||||
|
.q_init.lif_index = cpu_to_le16(lif_index),
|
||||||
|
.q_init.type = q->type,
|
||||||
|
+ .q_init.ver = qcq->q.lif->qtype_info[q->type].version,
|
||||||
|
.q_init.index = cpu_to_le32(q->index),
|
||||||
|
.q_init.flags = cpu_to_le16(IONIC_QINIT_F_IRQ |
|
||||||
|
IONIC_QINIT_F_ENA),
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_dev.h b/drivers/net/ethernet/pensando/ionic/ionic_dev.h
|
||||||
|
index 587398b01997..33519a8765eb 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_dev.h
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_dev.h
|
||||||
|
@@ -12,7 +12,8 @@
|
||||||
|
|
||||||
|
#define IONIC_MIN_MTU ETH_MIN_MTU
|
||||||
|
#define IONIC_MAX_MTU 9194
|
||||||
|
-#define IONIC_MAX_TXRX_DESC 16384
|
||||||
|
+#define IONIC_MAX_TX_DESC 8192
|
||||||
|
+#define IONIC_MAX_RX_DESC 16384
|
||||||
|
#define IONIC_MIN_TXRX_DESC 16
|
||||||
|
#define IONIC_DEF_TXRX_DESC 4096
|
||||||
|
#define IONIC_LIFS_MAX 1024
|
||||||
|
@@ -83,6 +84,8 @@ static_assert(sizeof(struct ionic_q_init_cmd) == 64);
|
||||||
|
static_assert(sizeof(struct ionic_q_init_comp) == 16);
|
||||||
|
static_assert(sizeof(struct ionic_q_control_cmd) == 64);
|
||||||
|
static_assert(sizeof(ionic_q_control_comp) == 16);
|
||||||
|
+static_assert(sizeof(struct ionic_q_identify_cmd) == 64);
|
||||||
|
+static_assert(sizeof(struct ionic_q_identify_comp) == 16);
|
||||||
|
|
||||||
|
static_assert(sizeof(struct ionic_rx_mode_set_cmd) == 64);
|
||||||
|
static_assert(sizeof(ionic_rx_mode_set_comp) == 16);
|
||||||
|
@@ -283,6 +286,8 @@ void ionic_dev_cmd_port_fec(struct ionic_dev *idev, u8 fec_type);
|
||||||
|
void ionic_dev_cmd_port_pause(struct ionic_dev *idev, u8 pause_type);
|
||||||
|
|
||||||
|
int ionic_set_vf_config(struct ionic *ionic, int vf, u8 attr, u8 *data);
|
||||||
|
+void ionic_dev_cmd_queue_identify(struct ionic_dev *idev,
|
||||||
|
+ u16 lif_type, u8 qtype, u8 qver);
|
||||||
|
void ionic_dev_cmd_lif_identify(struct ionic_dev *idev, u8 type, u8 ver);
|
||||||
|
void ionic_dev_cmd_lif_init(struct ionic_dev *idev, u16 lif_index,
|
||||||
|
dma_addr_t addr);
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c b/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
|
||||||
|
index 6996229facfd..3f9a73aaef61 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
|
||||||
|
@@ -458,9 +458,9 @@ static void ionic_get_ringparam(struct net_device *netdev,
|
||||||
|
{
|
||||||
|
struct ionic_lif *lif = netdev_priv(netdev);
|
||||||
|
|
||||||
|
- ring->tx_max_pending = IONIC_MAX_TXRX_DESC;
|
||||||
|
+ ring->tx_max_pending = IONIC_MAX_TX_DESC;
|
||||||
|
ring->tx_pending = lif->ntxq_descs;
|
||||||
|
- ring->rx_max_pending = IONIC_MAX_TXRX_DESC;
|
||||||
|
+ ring->rx_max_pending = IONIC_MAX_RX_DESC;
|
||||||
|
ring->rx_pending = lif->nrxq_descs;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_if.h b/drivers/net/ethernet/pensando/ionic/ionic_if.h
|
||||||
|
index 2804a24a9d73..7b9ec07db363 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_if.h
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_if.h
|
||||||
|
@@ -40,6 +40,7 @@ enum ionic_cmd_opcode {
|
||||||
|
IONIC_CMD_RX_FILTER_DEL = 32,
|
||||||
|
|
||||||
|
/* Queue commands */
|
||||||
|
+ IONIC_CMD_Q_IDENTIFY = 39,
|
||||||
|
IONIC_CMD_Q_INIT = 40,
|
||||||
|
IONIC_CMD_Q_CONTROL = 41,
|
||||||
|
|
||||||
|
@@ -469,6 +470,66 @@ struct ionic_lif_init_comp {
|
||||||
|
u8 rsvd2[12];
|
||||||
|
};
|
||||||
|
|
||||||
|
+ /**
|
||||||
|
+ * struct ionic_q_identify_cmd - queue identify command
|
||||||
|
+ * @opcode: opcode
|
||||||
|
+ * @lif_type: LIF type (enum ionic_lif_type)
|
||||||
|
+ * @type: Logical queue type (enum ionic_logical_qtype)
|
||||||
|
+ * @ver: Highest queue type version that the driver supports
|
||||||
|
+ */
|
||||||
|
+struct ionic_q_identify_cmd {
|
||||||
|
+ u8 opcode;
|
||||||
|
+ u8 rsvd;
|
||||||
|
+ __le16 lif_type;
|
||||||
|
+ u8 type;
|
||||||
|
+ u8 ver;
|
||||||
|
+ u8 rsvd2[58];
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * struct ionic_q_identify_comp - queue identify command completion
|
||||||
|
+ * @status: Status of the command (enum ionic_status_code)
|
||||||
|
+ * @comp_index: Index in the descriptor ring for which this is the completion
|
||||||
|
+ * @ver: Queue type version that can be used with FW
|
||||||
|
+ */
|
||||||
|
+struct ionic_q_identify_comp {
|
||||||
|
+ u8 status;
|
||||||
|
+ u8 rsvd;
|
||||||
|
+ __le16 comp_index;
|
||||||
|
+ u8 ver;
|
||||||
|
+ u8 rsvd2[11];
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * union ionic_q_identity - queue identity information
|
||||||
|
+ * @version: Queue type version that can be used with FW
|
||||||
|
+ * @supported: Bitfield of queue versions, first bit = ver 0
|
||||||
|
+ * @features: Queue features
|
||||||
|
+ * @desc_sz: Descriptor size
|
||||||
|
+ * @comp_sz: Completion descriptor size
|
||||||
|
+ * @sg_desc_sz: Scatter/Gather descriptor size
|
||||||
|
+ * @max_sg_elems: Maximum number of Scatter/Gather elements
|
||||||
|
+ * @sg_desc_stride: Number of Scatter/Gather elements per descriptor
|
||||||
|
+ */
|
||||||
|
+union ionic_q_identity {
|
||||||
|
+ struct {
|
||||||
|
+ u8 version;
|
||||||
|
+ u8 supported;
|
||||||
|
+ u8 rsvd[6];
|
||||||
|
+#define IONIC_QIDENT_F_CQ 0x01 /* queue has completion ring */
|
||||||
|
+#define IONIC_QIDENT_F_SG 0x02 /* queue has scatter/gather ring */
|
||||||
|
+#define IONIC_QIDENT_F_EQ 0x04 /* queue can use event queue */
|
||||||
|
+#define IONIC_QIDENT_F_CMB 0x08 /* queue is in cmb bar */
|
||||||
|
+ __le64 features;
|
||||||
|
+ __le16 desc_sz;
|
||||||
|
+ __le16 comp_sz;
|
||||||
|
+ __le16 sg_desc_sz;
|
||||||
|
+ __le16 max_sg_elems;
|
||||||
|
+ __le16 sg_desc_stride;
|
||||||
|
+ };
|
||||||
|
+ __le32 words[478];
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* struct ionic_q_init_cmd - Queue init command
|
||||||
|
* @opcode: opcode
|
||||||
|
@@ -733,20 +794,31 @@ static inline void decode_txq_desc_cmd(u64 cmd, u8 *opcode, u8 *flags,
|
||||||
|
*addr = (cmd >> IONIC_TXQ_DESC_ADDR_SHIFT) & IONIC_TXQ_DESC_ADDR_MASK;
|
||||||
|
};
|
||||||
|
|
||||||
|
-#define IONIC_TX_MAX_SG_ELEMS 8
|
||||||
|
-#define IONIC_RX_MAX_SG_ELEMS 8
|
||||||
|
-
|
||||||
|
/**
|
||||||
|
- * struct ionic_txq_sg_desc - Transmit scatter-gather (SG) list
|
||||||
|
+ * struct ionic_txq_sg_elem - Transmit scatter-gather (SG) descriptor element
|
||||||
|
* @addr: DMA address of SG element data buffer
|
||||||
|
* @len: Length of SG element data buffer, in bytes
|
||||||
|
*/
|
||||||
|
+struct ionic_txq_sg_elem {
|
||||||
|
+ __le64 addr;
|
||||||
|
+ __le16 len;
|
||||||
|
+ __le16 rsvd[3];
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * struct ionic_txq_sg_desc - Transmit scatter-gather (SG) list
|
||||||
|
+ * @elems: Scatter-gather elements
|
||||||
|
+ */
|
||||||
|
struct ionic_txq_sg_desc {
|
||||||
|
- struct ionic_txq_sg_elem {
|
||||||
|
- __le64 addr;
|
||||||
|
- __le16 len;
|
||||||
|
- __le16 rsvd[3];
|
||||||
|
- } elems[IONIC_TX_MAX_SG_ELEMS];
|
||||||
|
+#define IONIC_TX_MAX_SG_ELEMS 8
|
||||||
|
+#define IONIC_TX_SG_DESC_STRIDE 8
|
||||||
|
+ struct ionic_txq_sg_elem elems[IONIC_TX_MAX_SG_ELEMS];
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+struct ionic_txq_sg_desc_v1 {
|
||||||
|
+#define IONIC_TX_MAX_SG_ELEMS_V1 15
|
||||||
|
+#define IONIC_TX_SG_DESC_STRIDE_V1 16
|
||||||
|
+ struct ionic_txq_sg_elem elems[IONIC_TX_SG_DESC_STRIDE_V1];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -791,16 +863,24 @@ struct ionic_rxq_desc {
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
- * struct ionic_rxq_sg_desc - Receive scatter-gather (SG) list
|
||||||
|
+ * struct ionic_rxq_sg_desc - Receive scatter-gather (SG) descriptor element
|
||||||
|
* @addr: DMA address of SG element data buffer
|
||||||
|
* @len: Length of SG element data buffer, in bytes
|
||||||
|
*/
|
||||||
|
+struct ionic_rxq_sg_elem {
|
||||||
|
+ __le64 addr;
|
||||||
|
+ __le16 len;
|
||||||
|
+ __le16 rsvd[3];
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * struct ionic_rxq_sg_desc - Receive scatter-gather (SG) list
|
||||||
|
+ * @elems: Scatter-gather elements
|
||||||
|
+ */
|
||||||
|
struct ionic_rxq_sg_desc {
|
||||||
|
- struct ionic_rxq_sg_elem {
|
||||||
|
- __le64 addr;
|
||||||
|
- __le16 len;
|
||||||
|
- __le16 rsvd[3];
|
||||||
|
- } elems[IONIC_RX_MAX_SG_ELEMS];
|
||||||
|
+#define IONIC_RX_MAX_SG_ELEMS 8
|
||||||
|
+#define IONIC_RX_SG_DESC_STRIDE 8
|
||||||
|
+ struct ionic_rxq_sg_elem elems[IONIC_RX_SG_DESC_STRIDE];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -2389,6 +2469,7 @@ union ionic_dev_cmd {
|
||||||
|
struct ionic_qos_init_cmd qos_init;
|
||||||
|
struct ionic_qos_reset_cmd qos_reset;
|
||||||
|
|
||||||
|
+ struct ionic_q_identify_cmd q_identify;
|
||||||
|
struct ionic_q_init_cmd q_init;
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -2421,6 +2502,7 @@ union ionic_dev_cmd_comp {
|
||||||
|
ionic_qos_init_comp qos_init;
|
||||||
|
ionic_qos_reset_comp qos_reset;
|
||||||
|
|
||||||
|
+ struct ionic_q_identify_comp q_identify;
|
||||||
|
struct ionic_q_init_comp q_init;
|
||||||
|
};
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
index f8a9c1bcffc9..d60ef816604a 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
@@ -17,6 +17,16 @@
|
||||||
|
#include "ionic_ethtool.h"
|
||||||
|
#include "ionic_debugfs.h"
|
||||||
|
|
||||||
|
+/* queuetype support level */
|
||||||
|
+static const u8 ionic_qtype_versions[IONIC_QTYPE_MAX] = {
|
||||||
|
+ [IONIC_QTYPE_ADMINQ] = 0, /* 0 = Base version with CQ support */
|
||||||
|
+ [IONIC_QTYPE_NOTIFYQ] = 0, /* 0 = Base version */
|
||||||
|
+ [IONIC_QTYPE_RXQ] = 0, /* 0 = Base version with CQ+SG support */
|
||||||
|
+ [IONIC_QTYPE_TXQ] = 1, /* 0 = Base version with CQ+SG support
|
||||||
|
+ * 1 = ... with Tx SG version 1
|
||||||
|
+ */
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
static void ionic_lif_rx_mode(struct ionic_lif *lif, unsigned int rx_mode);
|
||||||
|
static int ionic_lif_addr_add(struct ionic_lif *lif, const u8 *addr);
|
||||||
|
static int ionic_lif_addr_del(struct ionic_lif *lif, const u8 *addr);
|
||||||
|
@@ -27,6 +37,7 @@ static void ionic_lif_set_netdev_info(struct ionic_lif *lif);
|
||||||
|
|
||||||
|
static int ionic_start_queues(struct ionic_lif *lif);
|
||||||
|
static void ionic_stop_queues(struct ionic_lif *lif);
|
||||||
|
+static void ionic_lif_queue_identify(struct ionic_lif *lif);
|
||||||
|
|
||||||
|
static void ionic_lif_deferred_work(struct work_struct *work)
|
||||||
|
{
|
||||||
|
@@ -597,6 +608,7 @@ static int ionic_lif_txq_init(struct ionic_lif *lif, struct ionic_qcq *qcq)
|
||||||
|
.opcode = IONIC_CMD_Q_INIT,
|
||||||
|
.lif_index = cpu_to_le16(lif->index),
|
||||||
|
.type = q->type,
|
||||||
|
+ .ver = lif->qtype_info[q->type].version,
|
||||||
|
.index = cpu_to_le32(q->index),
|
||||||
|
.flags = cpu_to_le16(IONIC_QINIT_F_IRQ |
|
||||||
|
IONIC_QINIT_F_SG),
|
||||||
|
@@ -614,6 +626,8 @@ static int ionic_lif_txq_init(struct ionic_lif *lif, struct ionic_qcq *qcq)
|
||||||
|
dev_dbg(dev, "txq_init.index %d\n", ctx.cmd.q_init.index);
|
||||||
|
dev_dbg(dev, "txq_init.ring_base 0x%llx\n", ctx.cmd.q_init.ring_base);
|
||||||
|
dev_dbg(dev, "txq_init.ring_size %d\n", ctx.cmd.q_init.ring_size);
|
||||||
|
+ dev_dbg(dev, "txq_init.flags 0x%x\n", ctx.cmd.q_init.flags);
|
||||||
|
+ dev_dbg(dev, "txq_init.ver %d\n", ctx.cmd.q_init.ver);
|
||||||
|
|
||||||
|
q->tail = q->info;
|
||||||
|
q->head = q->tail;
|
||||||
|
@@ -646,6 +660,7 @@ static int ionic_lif_rxq_init(struct ionic_lif *lif, struct ionic_qcq *qcq)
|
||||||
|
.opcode = IONIC_CMD_Q_INIT,
|
||||||
|
.lif_index = cpu_to_le16(lif->index),
|
||||||
|
.type = q->type,
|
||||||
|
+ .ver = lif->qtype_info[q->type].version,
|
||||||
|
.index = cpu_to_le32(q->index),
|
||||||
|
.flags = cpu_to_le16(IONIC_QINIT_F_IRQ |
|
||||||
|
IONIC_QINIT_F_SG),
|
||||||
|
@@ -663,6 +678,8 @@ static int ionic_lif_rxq_init(struct ionic_lif *lif, struct ionic_qcq *qcq)
|
||||||
|
dev_dbg(dev, "rxq_init.index %d\n", ctx.cmd.q_init.index);
|
||||||
|
dev_dbg(dev, "rxq_init.ring_base 0x%llx\n", ctx.cmd.q_init.ring_base);
|
||||||
|
dev_dbg(dev, "rxq_init.ring_size %d\n", ctx.cmd.q_init.ring_size);
|
||||||
|
+ dev_dbg(dev, "rxq_init.flags 0x%x\n", ctx.cmd.q_init.flags);
|
||||||
|
+ dev_dbg(dev, "rxq_init.ver %d\n", ctx.cmd.q_init.ver);
|
||||||
|
|
||||||
|
q->tail = q->info;
|
||||||
|
q->head = q->tail;
|
||||||
|
@@ -726,7 +743,7 @@ static bool ionic_notifyq_service(struct ionic_cq *cq,
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
- netdev_warn(netdev, "Notifyq unknown event ecode=%d eid=%lld\n",
|
||||||
|
+ netdev_warn(netdev, "Notifyq event ecode=%d eid=%lld\n",
|
||||||
|
comp->event.ecode, eid);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
@@ -1509,17 +1526,25 @@ static void ionic_txrx_free(struct ionic_lif *lif)
|
||||||
|
|
||||||
|
static int ionic_txrx_alloc(struct ionic_lif *lif)
|
||||||
|
{
|
||||||
|
+ unsigned int sg_desc_sz;
|
||||||
|
unsigned int flags;
|
||||||
|
unsigned int i;
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
|
+ if (lif->qtype_info[IONIC_QTYPE_TXQ].version >= 1 &&
|
||||||
|
+ lif->qtype_info[IONIC_QTYPE_TXQ].sg_desc_sz ==
|
||||||
|
+ sizeof(struct ionic_txq_sg_desc_v1))
|
||||||
|
+ sg_desc_sz = sizeof(struct ionic_txq_sg_desc_v1);
|
||||||
|
+ else
|
||||||
|
+ sg_desc_sz = sizeof(struct ionic_txq_sg_desc);
|
||||||
|
+
|
||||||
|
flags = IONIC_QCQ_F_TX_STATS | IONIC_QCQ_F_SG;
|
||||||
|
for (i = 0; i < lif->nxqs; i++) {
|
||||||
|
err = ionic_qcq_alloc(lif, IONIC_QTYPE_TXQ, i, "tx", flags,
|
||||||
|
lif->ntxq_descs,
|
||||||
|
sizeof(struct ionic_txq_desc),
|
||||||
|
sizeof(struct ionic_txq_comp),
|
||||||
|
- sizeof(struct ionic_txq_sg_desc),
|
||||||
|
+ sg_desc_sz,
|
||||||
|
lif->kern_pid, &lif->txqcqs[i].qcq);
|
||||||
|
if (err)
|
||||||
|
goto err_out;
|
||||||
|
@@ -2065,9 +2090,17 @@ int ionic_lifs_alloc(struct ionic *ionic)
|
||||||
|
|
||||||
|
/* only build the first lif, others are for later features */
|
||||||
|
set_bit(0, ionic->lifbits);
|
||||||
|
+
|
||||||
|
lif = ionic_lif_alloc(ionic, 0);
|
||||||
|
+ if (IS_ERR_OR_NULL(lif)) {
|
||||||
|
+ clear_bit(0, ionic->lifbits);
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ lif->lif_type = IONIC_LIF_TYPE_CLASSIC;
|
||||||
|
+ ionic_lif_queue_identify(lif);
|
||||||
|
|
||||||
|
- return PTR_ERR_OR_ZERO(lif);
|
||||||
|
+ return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ionic_lif_reset(struct ionic_lif *lif)
|
||||||
|
@@ -2292,6 +2325,7 @@ static int ionic_lif_notifyq_init(struct ionic_lif *lif)
|
||||||
|
.opcode = IONIC_CMD_Q_INIT,
|
||||||
|
.lif_index = cpu_to_le16(lif->index),
|
||||||
|
.type = q->type,
|
||||||
|
+ .ver = lif->qtype_info[q->type].version,
|
||||||
|
.index = cpu_to_le32(q->index),
|
||||||
|
.flags = cpu_to_le16(IONIC_QINIT_F_IRQ |
|
||||||
|
IONIC_QINIT_F_ENA),
|
||||||
|
@@ -2578,6 +2612,80 @@ void ionic_lifs_unregister(struct ionic *ionic)
|
||||||
|
unregister_netdev(ionic->master_lif->netdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void ionic_lif_queue_identify(struct ionic_lif *lif)
|
||||||
|
+{
|
||||||
|
+ struct ionic *ionic = lif->ionic;
|
||||||
|
+ union ionic_q_identity *q_ident;
|
||||||
|
+ struct ionic_dev *idev;
|
||||||
|
+ int qtype;
|
||||||
|
+ int err;
|
||||||
|
+
|
||||||
|
+ idev = &lif->ionic->idev;
|
||||||
|
+ q_ident = (union ionic_q_identity *)&idev->dev_cmd_regs->data;
|
||||||
|
+
|
||||||
|
+ for (qtype = 0; qtype < ARRAY_SIZE(ionic_qtype_versions); qtype++) {
|
||||||
|
+ struct ionic_qtype_info *qti = &lif->qtype_info[qtype];
|
||||||
|
+
|
||||||
|
+ /* filter out the ones we know about */
|
||||||
|
+ switch (qtype) {
|
||||||
|
+ case IONIC_QTYPE_ADMINQ:
|
||||||
|
+ case IONIC_QTYPE_NOTIFYQ:
|
||||||
|
+ case IONIC_QTYPE_RXQ:
|
||||||
|
+ case IONIC_QTYPE_TXQ:
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ memset(qti, 0, sizeof(*qti));
|
||||||
|
+
|
||||||
|
+ mutex_lock(&ionic->dev_cmd_lock);
|
||||||
|
+ ionic_dev_cmd_queue_identify(idev, lif->lif_type, qtype,
|
||||||
|
+ ionic_qtype_versions[qtype]);
|
||||||
|
+ err = ionic_dev_cmd_wait(ionic, DEVCMD_TIMEOUT);
|
||||||
|
+ if (!err) {
|
||||||
|
+ qti->version = q_ident->version;
|
||||||
|
+ qti->supported = q_ident->supported;
|
||||||
|
+ qti->features = le64_to_cpu(q_ident->features);
|
||||||
|
+ qti->desc_sz = le16_to_cpu(q_ident->desc_sz);
|
||||||
|
+ qti->comp_sz = le16_to_cpu(q_ident->comp_sz);
|
||||||
|
+ qti->sg_desc_sz = le16_to_cpu(q_ident->sg_desc_sz);
|
||||||
|
+ qti->max_sg_elems = le16_to_cpu(q_ident->max_sg_elems);
|
||||||
|
+ qti->sg_desc_stride = le16_to_cpu(q_ident->sg_desc_stride);
|
||||||
|
+ }
|
||||||
|
+ mutex_unlock(&ionic->dev_cmd_lock);
|
||||||
|
+
|
||||||
|
+ if (err == -EINVAL) {
|
||||||
|
+ dev_err(ionic->dev, "qtype %d not supported\n", qtype);
|
||||||
|
+ continue;
|
||||||
|
+ } else if (err == -EIO) {
|
||||||
|
+ dev_err(ionic->dev, "q_ident failed, not supported on older FW\n");
|
||||||
|
+ return;
|
||||||
|
+ } else if (err) {
|
||||||
|
+ dev_err(ionic->dev, "q_ident failed, qtype %d: %d\n",
|
||||||
|
+ qtype, err);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ dev_dbg(ionic->dev, " qtype[%d].version = %d\n",
|
||||||
|
+ qtype, qti->version);
|
||||||
|
+ dev_dbg(ionic->dev, " qtype[%d].supported = 0x%02x\n",
|
||||||
|
+ qtype, qti->supported);
|
||||||
|
+ dev_dbg(ionic->dev, " qtype[%d].features = 0x%04llx\n",
|
||||||
|
+ qtype, qti->features);
|
||||||
|
+ dev_dbg(ionic->dev, " qtype[%d].desc_sz = %d\n",
|
||||||
|
+ qtype, qti->desc_sz);
|
||||||
|
+ dev_dbg(ionic->dev, " qtype[%d].comp_sz = %d\n",
|
||||||
|
+ qtype, qti->comp_sz);
|
||||||
|
+ dev_dbg(ionic->dev, " qtype[%d].sg_desc_sz = %d\n",
|
||||||
|
+ qtype, qti->sg_desc_sz);
|
||||||
|
+ dev_dbg(ionic->dev, " qtype[%d].max_sg_elems = %d\n",
|
||||||
|
+ qtype, qti->max_sg_elems);
|
||||||
|
+ dev_dbg(ionic->dev, " qtype[%d].sg_desc_stride = %d\n",
|
||||||
|
+ qtype, qti->sg_desc_stride);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int ionic_lif_identify(struct ionic *ionic, u8 lif_type,
|
||||||
|
union ionic_lif_identity *lid)
|
||||||
|
{
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.h b/drivers/net/ethernet/pensando/ionic/ionic_lif.h
|
||||||
|
index 5d4ffda5c05f..1a30f0fb20b9 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.h
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.h
|
||||||
|
@@ -133,6 +133,17 @@ enum ionic_lif_state_flags {
|
||||||
|
IONIC_LIF_F_STATE_SIZE
|
||||||
|
};
|
||||||
|
|
||||||
|
+struct ionic_qtype_info {
|
||||||
|
+ u8 version;
|
||||||
|
+ u8 supported;
|
||||||
|
+ u64 features;
|
||||||
|
+ u16 desc_sz;
|
||||||
|
+ u16 comp_sz;
|
||||||
|
+ u16 sg_desc_sz;
|
||||||
|
+ u16 max_sg_elems;
|
||||||
|
+ u16 sg_desc_stride;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
#define IONIC_LIF_NAME_MAX_SZ 32
|
||||||
|
struct ionic_lif {
|
||||||
|
char name[IONIC_LIF_NAME_MAX_SZ];
|
||||||
|
@@ -161,11 +172,13 @@ struct ionic_lif {
|
||||||
|
bool mc_overflow;
|
||||||
|
unsigned int nmcast;
|
||||||
|
bool uc_overflow;
|
||||||
|
+ u16 lif_type;
|
||||||
|
unsigned int nucast;
|
||||||
|
|
||||||
|
struct ionic_lif_info *info;
|
||||||
|
dma_addr_t info_pa;
|
||||||
|
u32 info_sz;
|
||||||
|
+ struct ionic_qtype_info qtype_info[IONIC_QTYPE_MAX];
|
||||||
|
|
||||||
|
u16 rss_types;
|
||||||
|
u8 rss_hash_key[IONIC_RSS_HASH_KEY_SIZE];
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_main.c b/drivers/net/ethernet/pensando/ionic/ionic_main.c
|
||||||
|
index 15911ee1af32..34ccb8f53cda 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_main.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_main.c
|
||||||
|
@@ -152,6 +152,8 @@ static const char *ionic_opcode_to_str(enum ionic_cmd_opcode opcode)
|
||||||
|
return "IONIC_CMD_RX_FILTER_ADD";
|
||||||
|
case IONIC_CMD_RX_FILTER_DEL:
|
||||||
|
return "IONIC_CMD_RX_FILTER_DEL";
|
||||||
|
+ case IONIC_CMD_Q_IDENTIFY:
|
||||||
|
+ return "IONIC_CMD_Q_IDENTIFY";
|
||||||
|
case IONIC_CMD_Q_INIT:
|
||||||
|
return "IONIC_CMD_Q_INIT";
|
||||||
|
case IONIC_CMD_Q_CONTROL:
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_txrx.c b/drivers/net/ethernet/pensando/ionic/ionic_txrx.c
|
||||||
|
index d233b6e77b1e..6b14e55a6780 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_txrx.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_txrx.c
|
||||||
|
@@ -10,8 +10,10 @@
|
||||||
|
#include "ionic_lif.h"
|
||||||
|
#include "ionic_txrx.h"
|
||||||
|
|
||||||
|
-static void ionic_rx_clean(struct ionic_queue *q, struct ionic_desc_info *desc_info,
|
||||||
|
- struct ionic_cq_info *cq_info, void *cb_arg);
|
||||||
|
+static void ionic_rx_clean(struct ionic_queue *q,
|
||||||
|
+ struct ionic_desc_info *desc_info,
|
||||||
|
+ struct ionic_cq_info *cq_info,
|
||||||
|
+ void *cb_arg);
|
||||||
|
|
||||||
|
static inline void ionic_txq_post(struct ionic_queue *q, bool ring_dbell,
|
||||||
|
ionic_desc_cb cb_func, void *cb_arg)
|
||||||
|
@@ -140,8 +142,10 @@ static struct sk_buff *ionic_rx_copybreak(struct ionic_queue *q,
|
||||||
|
return skb;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void ionic_rx_clean(struct ionic_queue *q, struct ionic_desc_info *desc_info,
|
||||||
|
- struct ionic_cq_info *cq_info, void *cb_arg)
|
||||||
|
+static void ionic_rx_clean(struct ionic_queue *q,
|
||||||
|
+ struct ionic_desc_info *desc_info,
|
||||||
|
+ struct ionic_cq_info *cq_info,
|
||||||
|
+ void *cb_arg)
|
||||||
|
{
|
||||||
|
struct ionic_rxq_comp *comp = cq_info->cq_desc;
|
||||||
|
struct ionic_qcq *qcq = q_to_qcq(q);
|
||||||
|
@@ -475,7 +479,8 @@ int ionic_rx_napi(struct napi_struct *napi, int budget)
|
||||||
|
return work_done;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static dma_addr_t ionic_tx_map_single(struct ionic_queue *q, void *data, size_t len)
|
||||||
|
+static dma_addr_t ionic_tx_map_single(struct ionic_queue *q,
|
||||||
|
+ void *data, size_t len)
|
||||||
|
{
|
||||||
|
struct ionic_tx_stats *stats = q_to_tx_stats(q);
|
||||||
|
struct device *dev = q->lif->ionic->dev;
|
||||||
|
@@ -491,7 +496,8 @@ static dma_addr_t ionic_tx_map_single(struct ionic_queue *q, void *data, size_t
|
||||||
|
return dma_addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static dma_addr_t ionic_tx_map_frag(struct ionic_queue *q, const skb_frag_t *frag,
|
||||||
|
+static dma_addr_t ionic_tx_map_frag(struct ionic_queue *q,
|
||||||
|
+ const skb_frag_t *frag,
|
||||||
|
size_t offset, size_t len)
|
||||||
|
{
|
||||||
|
struct ionic_tx_stats *stats = q_to_tx_stats(q);
|
||||||
|
@@ -507,8 +513,10 @@ static dma_addr_t ionic_tx_map_frag(struct ionic_queue *q, const skb_frag_t *fra
|
||||||
|
return dma_addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void ionic_tx_clean(struct ionic_queue *q, struct ionic_desc_info *desc_info,
|
||||||
|
- struct ionic_cq_info *cq_info, void *cb_arg)
|
||||||
|
+static void ionic_tx_clean(struct ionic_queue *q,
|
||||||
|
+ struct ionic_desc_info *desc_info,
|
||||||
|
+ struct ionic_cq_info *cq_info,
|
||||||
|
+ void *cb_arg)
|
||||||
|
{
|
||||||
|
struct ionic_txq_sg_desc *sg_desc = desc_info->sg_desc;
|
||||||
|
struct ionic_txq_sg_elem *elem = sg_desc->elems;
|
||||||
|
@@ -989,6 +997,7 @@ static int ionic_tx(struct ionic_queue *q, struct sk_buff *skb)
|
||||||
|
|
||||||
|
static int ionic_tx_descs_needed(struct ionic_queue *q, struct sk_buff *skb)
|
||||||
|
{
|
||||||
|
+ int sg_elems = q->lif->qtype_info[IONIC_QTYPE_TXQ].max_sg_elems;
|
||||||
|
struct ionic_tx_stats *stats = q_to_tx_stats(q);
|
||||||
|
int err;
|
||||||
|
|
||||||
|
@@ -997,7 +1006,7 @@ static int ionic_tx_descs_needed(struct ionic_queue *q, struct sk_buff *skb)
|
||||||
|
return (skb->len / skb_shinfo(skb)->gso_size) + 1;
|
||||||
|
|
||||||
|
/* If non-TSO, just need 1 desc and nr_frags sg elems */
|
||||||
|
- if (skb_shinfo(skb)->nr_frags <= IONIC_TX_MAX_SG_ELEMS)
|
||||||
|
+ if (skb_shinfo(skb)->nr_frags <= sg_elems)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* Too many frags, so linearize */
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,120 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:40 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 05/16] ionic: protect vf calls from fw reset
|
||||||
|
|
||||||
|
When going into a firmware upgrade cycle, we set the device as
|
||||||
|
not present to keep some user commands from trying to change
|
||||||
|
the driver while we're only half there. Unfortunately, the
|
||||||
|
ndo_vf_* calls don't check netif_device_present() so we need
|
||||||
|
to add a check in the callbacks.
|
||||||
|
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit a836c352291d4ad4031743a97a61f7916fe519b7)
|
||||||
|
Bugzilla: 1848149
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 26 ++++++++++++++++++++++++-
|
||||||
|
1 file changed, 25 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
index d60ef816604a..423d2443d1c8 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
@@ -1707,7 +1707,7 @@ int ionic_stop(struct net_device *netdev)
|
||||||
|
{
|
||||||
|
struct ionic_lif *lif = netdev_priv(netdev);
|
||||||
|
|
||||||
|
- if (test_bit(IONIC_LIF_F_FW_RESET, lif->state))
|
||||||
|
+ if (!netif_device_present(netdev))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
ionic_stop_queues(lif);
|
||||||
|
@@ -1724,6 +1724,9 @@ static int ionic_get_vf_config(struct net_device *netdev,
|
||||||
|
struct ionic *ionic = lif->ionic;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
+ if (!netif_device_present(netdev))
|
||||||
|
+ return -EBUSY;
|
||||||
|
+
|
||||||
|
down_read(&ionic->vf_op_lock);
|
||||||
|
|
||||||
|
if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) {
|
||||||
|
@@ -1751,6 +1754,9 @@ static int ionic_get_vf_stats(struct net_device *netdev, int vf,
|
||||||
|
struct ionic_lif_stats *vs;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
+ if (!netif_device_present(netdev))
|
||||||
|
+ return -EBUSY;
|
||||||
|
+
|
||||||
|
down_read(&ionic->vf_op_lock);
|
||||||
|
|
||||||
|
if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) {
|
||||||
|
@@ -1786,6 +1792,9 @@ static int ionic_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
|
||||||
|
if (!(is_zero_ether_addr(mac) || is_valid_ether_addr(mac)))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
+ if (!netif_device_present(netdev))
|
||||||
|
+ return -EBUSY;
|
||||||
|
+
|
||||||
|
down_write(&ionic->vf_op_lock);
|
||||||
|
|
||||||
|
if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) {
|
||||||
|
@@ -1817,6 +1826,9 @@ static int ionic_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan,
|
||||||
|
if (proto != htons(ETH_P_8021Q))
|
||||||
|
return -EPROTONOSUPPORT;
|
||||||
|
|
||||||
|
+ if (!netif_device_present(netdev))
|
||||||
|
+ return -EBUSY;
|
||||||
|
+
|
||||||
|
down_write(&ionic->vf_op_lock);
|
||||||
|
|
||||||
|
if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) {
|
||||||
|
@@ -1843,6 +1855,9 @@ static int ionic_set_vf_rate(struct net_device *netdev, int vf,
|
||||||
|
if (tx_min)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
+ if (!netif_device_present(netdev))
|
||||||
|
+ return -EBUSY;
|
||||||
|
+
|
||||||
|
down_write(&ionic->vf_op_lock);
|
||||||
|
|
||||||
|
if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) {
|
||||||
|
@@ -1865,6 +1880,9 @@ static int ionic_set_vf_spoofchk(struct net_device *netdev, int vf, bool set)
|
||||||
|
u8 data = set; /* convert to u8 for config */
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
+ if (!netif_device_present(netdev))
|
||||||
|
+ return -EBUSY;
|
||||||
|
+
|
||||||
|
down_write(&ionic->vf_op_lock);
|
||||||
|
|
||||||
|
if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) {
|
||||||
|
@@ -1887,6 +1905,9 @@ static int ionic_set_vf_trust(struct net_device *netdev, int vf, bool set)
|
||||||
|
u8 data = set; /* convert to u8 for config */
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
+ if (!netif_device_present(netdev))
|
||||||
|
+ return -EBUSY;
|
||||||
|
+
|
||||||
|
down_write(&ionic->vf_op_lock);
|
||||||
|
|
||||||
|
if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) {
|
||||||
|
@@ -1923,6 +1944,9 @@ static int ionic_set_vf_link_state(struct net_device *netdev, int vf, int set)
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (!netif_device_present(netdev))
|
||||||
|
+ return -EBUSY;
|
||||||
|
+
|
||||||
|
down_write(&ionic->vf_op_lock);
|
||||||
|
|
||||||
|
if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) {
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,45 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:41 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 06/16] ionic: add support for more xcvr types
|
||||||
|
|
||||||
|
Add a couple more SFP and QSFP transceiver types to our
|
||||||
|
ethtool get link ksettings.
|
||||||
|
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit cba155d591aa28689332bc568632d2f868690be1)
|
||||||
|
Bugzilla: 1848149
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_ethtool.c | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c b/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
|
||||||
|
index 3f9a73aaef61..170e72f31197 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
|
||||||
|
@@ -159,6 +159,8 @@ static int ionic_get_link_ksettings(struct net_device *netdev,
|
||||||
|
ethtool_link_ksettings_add_link_mode(ks, supported,
|
||||||
|
100000baseSR4_Full);
|
||||||
|
break;
|
||||||
|
+ case IONIC_XCVR_PID_QSFP_100G_CWDM4:
|
||||||
|
+ case IONIC_XCVR_PID_QSFP_100G_PSM4:
|
||||||
|
case IONIC_XCVR_PID_QSFP_100G_LR4:
|
||||||
|
ethtool_link_ksettings_add_link_mode(ks, supported,
|
||||||
|
100000baseLR4_ER4_Full);
|
||||||
|
@@ -178,6 +180,7 @@ static int ionic_get_link_ksettings(struct net_device *netdev,
|
||||||
|
break;
|
||||||
|
case IONIC_XCVR_PID_SFP_25GBASE_SR:
|
||||||
|
case IONIC_XCVR_PID_SFP_25GBASE_AOC:
|
||||||
|
+ case IONIC_XCVR_PID_SFP_25GBASE_ACC:
|
||||||
|
ethtool_link_ksettings_add_link_mode(ks, supported,
|
||||||
|
25000baseSR_Full);
|
||||||
|
break;
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:42 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 07/16] ionic: shorter dev cmd wait time
|
||||||
|
|
||||||
|
Shorten our msleep time while polling for the dev command
|
||||||
|
request to finish. Yes, checkpatch.pl complains that the
|
||||||
|
msleep might actually go longer - that won't hurt, but we'll
|
||||||
|
take the shorter time if we can get it.
|
||||||
|
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit 62ba8766f775e5e26c21731c695f68541d504ea6)
|
||||||
|
Bugzilla: 1848149
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_main.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_main.c b/drivers/net/ethernet/pensando/ionic/ionic_main.c
|
||||||
|
index 34ccb8f53cda..782fff35c1c1 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_main.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_main.c
|
||||||
|
@@ -358,7 +358,7 @@ int ionic_dev_cmd_wait(struct ionic *ionic, unsigned long max_seconds)
|
||||||
|
done = ionic_dev_cmd_done(idev);
|
||||||
|
if (done)
|
||||||
|
break;
|
||||||
|
- msleep(20);
|
||||||
|
+ msleep(5);
|
||||||
|
hb = ionic_heartbeat_check(ionic);
|
||||||
|
} while (!done && !hb && time_before(jiffies, max_wait));
|
||||||
|
duration = jiffies - start_time;
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,36 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:43 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 08/16] ionic: reset device at probe
|
||||||
|
|
||||||
|
Once we're talking to the device, tell it to reset to
|
||||||
|
be sure we've got a fresh, clean environment.
|
||||||
|
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit 5c7843112543c7726e7fe31ecc76476f296b7960)
|
||||||
|
Bugzilla: 1848149
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_main.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_main.c b/drivers/net/ethernet/pensando/ionic/ionic_main.c
|
||||||
|
index 782fff35c1c1..df5b9bcc3aba 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_main.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_main.c
|
||||||
|
@@ -415,6 +415,7 @@ int ionic_setup(struct ionic *ionic)
|
||||||
|
err = ionic_dev_setup(ionic);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
+ ionic_reset(ionic);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,69 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:44 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 09/16] ionic: ionic_intr_free parameter change
|
||||||
|
|
||||||
|
Change the ionic_intr_free parameter from struct ionic_lif to
|
||||||
|
struct ionic since that's what it actually cares about.
|
||||||
|
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit 36ac2c50924892a28e17ff463e354fec7650ee19)
|
||||||
|
Bugzilla: 1848149
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 12 ++++++------
|
||||||
|
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
index 423d2443d1c8..d52928ea539d 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
@@ -197,10 +197,10 @@ static int ionic_intr_alloc(struct ionic_lif *lif, struct ionic_intr_info *intr)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void ionic_intr_free(struct ionic_lif *lif, int index)
|
||||||
|
+static void ionic_intr_free(struct ionic *ionic, int index)
|
||||||
|
{
|
||||||
|
- if (index != INTR_INDEX_NOT_ASSIGNED && index < lif->ionic->nintrs)
|
||||||
|
- clear_bit(index, lif->ionic->intrs);
|
||||||
|
+ if (index != INTR_INDEX_NOT_ASSIGNED && index < ionic->nintrs)
|
||||||
|
+ clear_bit(index, ionic->intrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ionic_qcq_enable(struct ionic_qcq *qcq)
|
||||||
|
@@ -310,7 +310,7 @@ static void ionic_qcq_free(struct ionic_lif *lif, struct ionic_qcq *qcq)
|
||||||
|
irq_set_affinity_hint(qcq->intr.vector, NULL);
|
||||||
|
devm_free_irq(dev, qcq->intr.vector, &qcq->napi);
|
||||||
|
qcq->intr.vector = 0;
|
||||||
|
- ionic_intr_free(lif, qcq->intr.index);
|
||||||
|
+ ionic_intr_free(lif->ionic, qcq->intr.index);
|
||||||
|
}
|
||||||
|
|
||||||
|
devm_kfree(dev, qcq->cq.info);
|
||||||
|
@@ -356,7 +356,7 @@ static void ionic_link_qcq_interrupts(struct ionic_qcq *src_qcq,
|
||||||
|
struct ionic_qcq *n_qcq)
|
||||||
|
{
|
||||||
|
if (WARN_ON(n_qcq->flags & IONIC_QCQ_F_INTR)) {
|
||||||
|
- ionic_intr_free(n_qcq->cq.lif, n_qcq->intr.index);
|
||||||
|
+ ionic_intr_free(n_qcq->cq.lif->ionic, n_qcq->intr.index);
|
||||||
|
n_qcq->flags &= ~IONIC_QCQ_F_INTR;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -508,7 +508,7 @@ static int ionic_qcq_alloc(struct ionic_lif *lif, unsigned int type,
|
||||||
|
devm_free_irq(dev, new->intr.vector, &new->napi);
|
||||||
|
err_out_free_intr:
|
||||||
|
if (flags & IONIC_QCQ_F_INTR)
|
||||||
|
- ionic_intr_free(lif, new->intr.index);
|
||||||
|
+ ionic_intr_free(lif->ionic, new->intr.index);
|
||||||
|
err_out:
|
||||||
|
dev_err(dev, "qcq alloc of %s%d failed %d\n", name, index, err);
|
||||||
|
return err;
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,133 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:45 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 10/16] ionic: more ionic name tweaks
|
||||||
|
|
||||||
|
Fix up a few more local names that need an "ionic" prefix.
|
||||||
|
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit c06107cabea356db62f45bf8049a260c238fadf2)
|
||||||
|
Bugzilla: 1848149
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_dev.h | 10 +++++-----
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_ethtool.c | 13 +++++++------
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 4 ++--
|
||||||
|
3 files changed, 14 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_dev.h b/drivers/net/ethernet/pensando/ionic/ionic_dev.h
|
||||||
|
index 33519a8765eb..525434f10025 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_dev.h
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_dev.h
|
||||||
|
@@ -182,7 +182,7 @@ struct ionic_desc_info {
|
||||||
|
void *cb_arg;
|
||||||
|
};
|
||||||
|
|
||||||
|
-#define QUEUE_NAME_MAX_SZ 32
|
||||||
|
+#define IONIC_QUEUE_NAME_MAX_SZ 32
|
||||||
|
|
||||||
|
struct ionic_queue {
|
||||||
|
u64 dbell_count;
|
||||||
|
@@ -207,14 +207,14 @@ struct ionic_queue {
|
||||||
|
unsigned int desc_size;
|
||||||
|
unsigned int sg_desc_size;
|
||||||
|
unsigned int pid;
|
||||||
|
- char name[QUEUE_NAME_MAX_SZ];
|
||||||
|
+ char name[IONIC_QUEUE_NAME_MAX_SZ];
|
||||||
|
};
|
||||||
|
|
||||||
|
-#define INTR_INDEX_NOT_ASSIGNED -1
|
||||||
|
-#define INTR_NAME_MAX_SZ 32
|
||||||
|
+#define IONIC_INTR_INDEX_NOT_ASSIGNED -1
|
||||||
|
+#define IONIC_INTR_NAME_MAX_SZ 32
|
||||||
|
|
||||||
|
struct ionic_intr_info {
|
||||||
|
- char name[INTR_NAME_MAX_SZ];
|
||||||
|
+ char name[IONIC_INTR_NAME_MAX_SZ];
|
||||||
|
unsigned int index;
|
||||||
|
unsigned int vector;
|
||||||
|
u64 rearm_count;
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c b/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
|
||||||
|
index 170e72f31197..f7e3ce3de04d 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
|
||||||
|
@@ -12,10 +12,11 @@
|
||||||
|
#include "ionic_stats.h"
|
||||||
|
|
||||||
|
static const char ionic_priv_flags_strings[][ETH_GSTRING_LEN] = {
|
||||||
|
-#define PRIV_F_SW_DBG_STATS BIT(0)
|
||||||
|
+#define IONIC_PRIV_F_SW_DBG_STATS BIT(0)
|
||||||
|
"sw-dbg-stats",
|
||||||
|
};
|
||||||
|
-#define PRIV_FLAGS_COUNT ARRAY_SIZE(ionic_priv_flags_strings)
|
||||||
|
+
|
||||||
|
+#define IONIC_PRIV_FLAGS_COUNT ARRAY_SIZE(ionic_priv_flags_strings)
|
||||||
|
|
||||||
|
static void ionic_get_stats_strings(struct ionic_lif *lif, u8 *buf)
|
||||||
|
{
|
||||||
|
@@ -58,7 +59,7 @@ static int ionic_get_sset_count(struct net_device *netdev, int sset)
|
||||||
|
count = ionic_get_stats_count(lif);
|
||||||
|
break;
|
||||||
|
case ETH_SS_PRIV_FLAGS:
|
||||||
|
- count = PRIV_FLAGS_COUNT;
|
||||||
|
+ count = IONIC_PRIV_FLAGS_COUNT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
@@ -75,7 +76,7 @@ static void ionic_get_strings(struct net_device *netdev,
|
||||||
|
break;
|
||||||
|
case ETH_SS_PRIV_FLAGS:
|
||||||
|
memcpy(buf, ionic_priv_flags_strings,
|
||||||
|
- PRIV_FLAGS_COUNT * ETH_GSTRING_LEN);
|
||||||
|
+ IONIC_PRIV_FLAGS_COUNT * ETH_GSTRING_LEN);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -557,7 +558,7 @@ static u32 ionic_get_priv_flags(struct net_device *netdev)
|
||||||
|
u32 priv_flags = 0;
|
||||||
|
|
||||||
|
if (test_bit(IONIC_LIF_F_SW_DEBUG_STATS, lif->state))
|
||||||
|
- priv_flags |= PRIV_F_SW_DBG_STATS;
|
||||||
|
+ priv_flags |= IONIC_PRIV_F_SW_DBG_STATS;
|
||||||
|
|
||||||
|
return priv_flags;
|
||||||
|
}
|
||||||
|
@@ -567,7 +568,7 @@ static int ionic_set_priv_flags(struct net_device *netdev, u32 priv_flags)
|
||||||
|
struct ionic_lif *lif = netdev_priv(netdev);
|
||||||
|
|
||||||
|
clear_bit(IONIC_LIF_F_SW_DEBUG_STATS, lif->state);
|
||||||
|
- if (priv_flags & PRIV_F_SW_DBG_STATS)
|
||||||
|
+ if (priv_flags & IONIC_PRIV_F_SW_DBG_STATS)
|
||||||
|
set_bit(IONIC_LIF_F_SW_DEBUG_STATS, lif->state);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
index d52928ea539d..e47da3127bf3 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
@@ -199,7 +199,7 @@ static int ionic_intr_alloc(struct ionic_lif *lif, struct ionic_intr_info *intr)
|
||||||
|
|
||||||
|
static void ionic_intr_free(struct ionic *ionic, int index)
|
||||||
|
{
|
||||||
|
- if (index != INTR_INDEX_NOT_ASSIGNED && index < ionic->nintrs)
|
||||||
|
+ if (index != IONIC_INTR_INDEX_NOT_ASSIGNED && index < ionic->nintrs)
|
||||||
|
clear_bit(index, ionic->intrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -455,7 +455,7 @@ static int ionic_qcq_alloc(struct ionic_lif *lif, unsigned int type,
|
||||||
|
cpumask_set_cpu(new->intr.cpu,
|
||||||
|
&new->intr.affinity_mask);
|
||||||
|
} else {
|
||||||
|
- new->intr.index = INTR_INDEX_NOT_ASSIGNED;
|
||||||
|
+ new->intr.index = IONIC_INTR_INDEX_NOT_ASSIGNED;
|
||||||
|
}
|
||||||
|
|
||||||
|
new->cq.info = devm_kzalloc(dev, sizeof(*new->cq.info) * num_descs,
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,400 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:46 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 11/16] ionic: add more ethtool stats
|
||||||
|
|
||||||
|
Add hardware port stats and a few more driver collected
|
||||||
|
statistics to the ethtool stats output.
|
||||||
|
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit f64e0c5698b7b1abb08b3d5bc07f95db45e87d76)
|
||||||
|
Bugzilla: 1848149
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 4 +-
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_lif.h | 15 ++-
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_stats.c | 136 +++++++++++++++++++++-
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_stats.h | 6 +
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_txrx.c | 22 ++--
|
||||||
|
5 files changed, 170 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
index e47da3127bf3..7321a92f8395 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
@@ -792,8 +792,8 @@ static int ionic_adminq_napi(struct napi_struct *napi, int budget)
|
||||||
|
return max(n_work, a_work);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void ionic_get_stats64(struct net_device *netdev,
|
||||||
|
- struct rtnl_link_stats64 *ns)
|
||||||
|
+void ionic_get_stats64(struct net_device *netdev,
|
||||||
|
+ struct rtnl_link_stats64 *ns)
|
||||||
|
{
|
||||||
|
struct ionic_lif *lif = netdev_priv(netdev);
|
||||||
|
struct ionic_lif_stats *ls;
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.h b/drivers/net/ethernet/pensando/ionic/ionic_lif.h
|
||||||
|
index 1a30f0fb20b9..c3428034a17b 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.h
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.h
|
||||||
|
@@ -20,11 +20,13 @@ struct ionic_tx_stats {
|
||||||
|
u64 bytes;
|
||||||
|
u64 clean;
|
||||||
|
u64 linearize;
|
||||||
|
- u64 no_csum;
|
||||||
|
+ u64 csum_none;
|
||||||
|
u64 csum;
|
||||||
|
u64 crc32_csum;
|
||||||
|
u64 tso;
|
||||||
|
+ u64 tso_bytes;
|
||||||
|
u64 frags;
|
||||||
|
+ u64 vlan_inserted;
|
||||||
|
u64 sg_cntr[IONIC_MAX_NUM_SG_CNTR];
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -38,6 +40,7 @@ struct ionic_rx_stats {
|
||||||
|
u64 csum_error;
|
||||||
|
u64 buffers_posted;
|
||||||
|
u64 dropped;
|
||||||
|
+ u64 vlan_stripped;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IONIC_QCQ_F_INITED BIT(0)
|
||||||
|
@@ -114,11 +117,17 @@ struct ionic_lif_sw_stats {
|
||||||
|
u64 rx_packets;
|
||||||
|
u64 rx_bytes;
|
||||||
|
u64 tx_tso;
|
||||||
|
- u64 tx_no_csum;
|
||||||
|
+ u64 tx_tso_bytes;
|
||||||
|
+ u64 tx_csum_none;
|
||||||
|
u64 tx_csum;
|
||||||
|
u64 rx_csum_none;
|
||||||
|
u64 rx_csum_complete;
|
||||||
|
u64 rx_csum_error;
|
||||||
|
+ u64 hw_tx_dropped;
|
||||||
|
+ u64 hw_rx_dropped;
|
||||||
|
+ u64 hw_rx_over_errors;
|
||||||
|
+ u64 hw_rx_missed_errors;
|
||||||
|
+ u64 hw_tx_aborted_errors;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum ionic_lif_state_flags {
|
||||||
|
@@ -240,6 +249,8 @@ static inline u32 ionic_coal_hw_to_usec(struct ionic *ionic, u32 units)
|
||||||
|
}
|
||||||
|
|
||||||
|
void ionic_link_status_check_request(struct ionic_lif *lif);
|
||||||
|
+void ionic_get_stats64(struct net_device *netdev,
|
||||||
|
+ struct rtnl_link_stats64 *ns);
|
||||||
|
void ionic_lif_deferred_enqueue(struct ionic_deferred *def,
|
||||||
|
struct ionic_deferred_work *work);
|
||||||
|
int ionic_lifs_alloc(struct ionic *ionic);
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_stats.c b/drivers/net/ethernet/pensando/ionic/ionic_stats.c
|
||||||
|
index 8f2a8fb029f1..2a1885da58a6 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_stats.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_stats.c
|
||||||
|
@@ -15,11 +15,109 @@ static const struct ionic_stat_desc ionic_lif_stats_desc[] = {
|
||||||
|
IONIC_LIF_STAT_DESC(rx_packets),
|
||||||
|
IONIC_LIF_STAT_DESC(rx_bytes),
|
||||||
|
IONIC_LIF_STAT_DESC(tx_tso),
|
||||||
|
- IONIC_LIF_STAT_DESC(tx_no_csum),
|
||||||
|
+ IONIC_LIF_STAT_DESC(tx_tso_bytes),
|
||||||
|
+ IONIC_LIF_STAT_DESC(tx_csum_none),
|
||||||
|
IONIC_LIF_STAT_DESC(tx_csum),
|
||||||
|
IONIC_LIF_STAT_DESC(rx_csum_none),
|
||||||
|
IONIC_LIF_STAT_DESC(rx_csum_complete),
|
||||||
|
IONIC_LIF_STAT_DESC(rx_csum_error),
|
||||||
|
+ IONIC_LIF_STAT_DESC(hw_tx_dropped),
|
||||||
|
+ IONIC_LIF_STAT_DESC(hw_rx_dropped),
|
||||||
|
+ IONIC_LIF_STAT_DESC(hw_rx_over_errors),
|
||||||
|
+ IONIC_LIF_STAT_DESC(hw_rx_missed_errors),
|
||||||
|
+ IONIC_LIF_STAT_DESC(hw_tx_aborted_errors),
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const struct ionic_stat_desc ionic_port_stats_desc[] = {
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_ok),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_all),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_bad_fcs),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_bad_all),
|
||||||
|
+ IONIC_PORT_STAT_DESC(octets_rx_ok),
|
||||||
|
+ IONIC_PORT_STAT_DESC(octets_rx_all),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_unicast),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_multicast),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_broadcast),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_pause),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_bad_length),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_undersized),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_oversized),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_fragments),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_jabber),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_pripause),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_stomped_crc),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_too_long),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_vlan_good),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_dropped),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_less_than_64b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_64b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_65b_127b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_128b_255b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_256b_511b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_512b_1023b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_1024b_1518b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_1519b_2047b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_2048b_4095b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_4096b_8191b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_8192b_9215b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_other),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_ok),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_all),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_bad),
|
||||||
|
+ IONIC_PORT_STAT_DESC(octets_tx_ok),
|
||||||
|
+ IONIC_PORT_STAT_DESC(octets_tx_total),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_unicast),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_multicast),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_broadcast),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_pause),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_pripause),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_vlan),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_less_than_64b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_64b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_65b_127b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_128b_255b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_256b_511b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_512b_1023b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_1024b_1518b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_1519b_2047b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_2048b_4095b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_4096b_8191b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_8192b_9215b),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_other),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_pri_0),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_pri_1),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_pri_2),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_pri_3),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_pri_4),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_pri_5),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_pri_6),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_pri_7),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_pri_0),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_pri_1),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_pri_2),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_pri_3),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_pri_4),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_pri_5),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_pri_6),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_rx_pri_7),
|
||||||
|
+ IONIC_PORT_STAT_DESC(tx_pripause_0_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(tx_pripause_1_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(tx_pripause_2_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(tx_pripause_3_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(tx_pripause_4_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(tx_pripause_5_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(tx_pripause_6_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(tx_pripause_7_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(rx_pripause_0_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(rx_pripause_1_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(rx_pripause_2_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(rx_pripause_3_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(rx_pripause_4_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(rx_pripause_5_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(rx_pripause_6_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(rx_pripause_7_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(rx_pause_1us_count),
|
||||||
|
+ IONIC_PORT_STAT_DESC(frames_tx_truncated),
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ionic_stat_desc ionic_tx_stats_desc[] = {
|
||||||
|
@@ -29,6 +127,11 @@ static const struct ionic_stat_desc ionic_tx_stats_desc[] = {
|
||||||
|
IONIC_TX_STAT_DESC(dma_map_err),
|
||||||
|
IONIC_TX_STAT_DESC(linearize),
|
||||||
|
IONIC_TX_STAT_DESC(frags),
|
||||||
|
+ IONIC_TX_STAT_DESC(tso),
|
||||||
|
+ IONIC_TX_STAT_DESC(tso_bytes),
|
||||||
|
+ IONIC_TX_STAT_DESC(csum_none),
|
||||||
|
+ IONIC_TX_STAT_DESC(csum),
|
||||||
|
+ IONIC_TX_STAT_DESC(vlan_inserted),
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ionic_stat_desc ionic_rx_stats_desc[] = {
|
||||||
|
@@ -40,6 +143,7 @@ static const struct ionic_stat_desc ionic_rx_stats_desc[] = {
|
||||||
|
IONIC_RX_STAT_DESC(csum_complete),
|
||||||
|
IONIC_RX_STAT_DESC(csum_error),
|
||||||
|
IONIC_RX_STAT_DESC(dropped),
|
||||||
|
+ IONIC_RX_STAT_DESC(vlan_stripped),
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ionic_stat_desc ionic_txq_stats_desc[] = {
|
||||||
|
@@ -62,6 +166,7 @@ static const struct ionic_stat_desc ionic_dbg_napi_stats_desc[] = {
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IONIC_NUM_LIF_STATS ARRAY_SIZE(ionic_lif_stats_desc)
|
||||||
|
+#define IONIC_NUM_PORT_STATS ARRAY_SIZE(ionic_port_stats_desc)
|
||||||
|
#define IONIC_NUM_TX_STATS ARRAY_SIZE(ionic_tx_stats_desc)
|
||||||
|
#define IONIC_NUM_RX_STATS ARRAY_SIZE(ionic_rx_stats_desc)
|
||||||
|
#define IONIC_NUM_TX_Q_STATS ARRAY_SIZE(ionic_txq_stats_desc)
|
||||||
|
@@ -76,6 +181,7 @@ static void ionic_get_lif_stats(struct ionic_lif *lif,
|
||||||
|
{
|
||||||
|
struct ionic_tx_stats *tstats;
|
||||||
|
struct ionic_rx_stats *rstats;
|
||||||
|
+ struct rtnl_link_stats64 ns;
|
||||||
|
struct ionic_qcq *txqcq;
|
||||||
|
struct ionic_qcq *rxqcq;
|
||||||
|
int q_num;
|
||||||
|
@@ -89,7 +195,8 @@ static void ionic_get_lif_stats(struct ionic_lif *lif,
|
||||||
|
stats->tx_packets += tstats->pkts;
|
||||||
|
stats->tx_bytes += tstats->bytes;
|
||||||
|
stats->tx_tso += tstats->tso;
|
||||||
|
- stats->tx_no_csum += tstats->no_csum;
|
||||||
|
+ stats->tx_tso_bytes += tstats->tso_bytes;
|
||||||
|
+ stats->tx_csum_none += tstats->csum_none;
|
||||||
|
stats->tx_csum += tstats->csum;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -103,6 +210,13 @@ static void ionic_get_lif_stats(struct ionic_lif *lif,
|
||||||
|
stats->rx_csum_error += rstats->csum_error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ ionic_get_stats64(lif->netdev, &ns);
|
||||||
|
+ stats->hw_tx_dropped = ns.tx_dropped;
|
||||||
|
+ stats->hw_rx_dropped = ns.rx_dropped;
|
||||||
|
+ stats->hw_rx_over_errors = ns.rx_over_errors;
|
||||||
|
+ stats->hw_rx_missed_errors = ns.rx_missed_errors;
|
||||||
|
+ stats->hw_tx_aborted_errors = ns.tx_aborted_errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
static u64 ionic_sw_stats_get_count(struct ionic_lif *lif)
|
||||||
|
@@ -118,6 +232,9 @@ static u64 ionic_sw_stats_get_count(struct ionic_lif *lif)
|
||||||
|
/* rx stats */
|
||||||
|
total += MAX_Q(lif) * IONIC_NUM_RX_STATS;
|
||||||
|
|
||||||
|
+ /* port stats */
|
||||||
|
+ total += IONIC_NUM_PORT_STATS;
|
||||||
|
+
|
||||||
|
if (test_bit(IONIC_LIF_F_UP, lif->state) &&
|
||||||
|
test_bit(IONIC_LIF_F_SW_DEBUG_STATS, lif->state)) {
|
||||||
|
/* tx debug stats */
|
||||||
|
@@ -144,6 +261,13 @@ static void ionic_sw_stats_get_strings(struct ionic_lif *lif, u8 **buf)
|
||||||
|
snprintf(*buf, ETH_GSTRING_LEN, ionic_lif_stats_desc[i].name);
|
||||||
|
*buf += ETH_GSTRING_LEN;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < IONIC_NUM_PORT_STATS; i++) {
|
||||||
|
+ snprintf(*buf, ETH_GSTRING_LEN,
|
||||||
|
+ ionic_port_stats_desc[i].name);
|
||||||
|
+ *buf += ETH_GSTRING_LEN;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
for (q_num = 0; q_num < MAX_Q(lif); q_num++) {
|
||||||
|
for (i = 0; i < IONIC_NUM_TX_STATS; i++) {
|
||||||
|
snprintf(*buf, ETH_GSTRING_LEN, "tx_%d_%s",
|
||||||
|
@@ -225,6 +349,7 @@ static void ionic_sw_stats_get_strings(struct ionic_lif *lif, u8 **buf)
|
||||||
|
|
||||||
|
static void ionic_sw_stats_get_values(struct ionic_lif *lif, u64 **buf)
|
||||||
|
{
|
||||||
|
+ struct ionic_port_stats *port_stats;
|
||||||
|
struct ionic_lif_sw_stats lif_stats;
|
||||||
|
struct ionic_qcq *txqcq, *rxqcq;
|
||||||
|
struct ionic_tx_stats *txstats;
|
||||||
|
@@ -238,6 +363,13 @@ static void ionic_sw_stats_get_values(struct ionic_lif *lif, u64 **buf)
|
||||||
|
(*buf)++;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ port_stats = &lif->ionic->idev.port_info->stats;
|
||||||
|
+ for (i = 0; i < IONIC_NUM_PORT_STATS; i++) {
|
||||||
|
+ **buf = IONIC_READ_STAT_LE64(port_stats,
|
||||||
|
+ &ionic_port_stats_desc[i]);
|
||||||
|
+ (*buf)++;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
for (q_num = 0; q_num < MAX_Q(lif); q_num++) {
|
||||||
|
txstats = &lif_to_txstats(lif, q_num);
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_stats.h b/drivers/net/ethernet/pensando/ionic/ionic_stats.h
|
||||||
|
index d2c1122a2c6e..3f543512616e 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_stats.h
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_stats.h
|
||||||
|
@@ -11,6 +11,9 @@
|
||||||
|
.offset = IONIC_STAT_TO_OFFSET(type, stat_name) \
|
||||||
|
}
|
||||||
|
|
||||||
|
+#define IONIC_PORT_STAT_DESC(stat_name) \
|
||||||
|
+ IONIC_STAT_DESC(struct ionic_port_stats, stat_name)
|
||||||
|
+
|
||||||
|
#define IONIC_LIF_STAT_DESC(stat_name) \
|
||||||
|
IONIC_STAT_DESC(struct ionic_lif_sw_stats, stat_name)
|
||||||
|
|
||||||
|
@@ -45,6 +48,9 @@ extern const int ionic_num_stats_grps;
|
||||||
|
#define IONIC_READ_STAT64(base_ptr, desc_ptr) \
|
||||||
|
(*((u64 *)(((u8 *)(base_ptr)) + (desc_ptr)->offset)))
|
||||||
|
|
||||||
|
+#define IONIC_READ_STAT_LE64(base_ptr, desc_ptr) \
|
||||||
|
+ __le64_to_cpu(*((u64 *)(((u8 *)(base_ptr)) + (desc_ptr)->offset)))
|
||||||
|
+
|
||||||
|
struct ionic_stat_desc {
|
||||||
|
char name[ETH_GSTRING_LEN];
|
||||||
|
u64 offset;
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_txrx.c b/drivers/net/ethernet/pensando/ionic/ionic_txrx.c
|
||||||
|
index 6b14e55a6780..b7f900c11834 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_txrx.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_txrx.c
|
||||||
|
@@ -214,10 +214,11 @@ static void ionic_rx_clean(struct ionic_queue *q,
|
||||||
|
(comp->csum_flags & IONIC_RXQ_COMP_CSUM_F_IP_BAD)))
|
||||||
|
stats->csum_error++;
|
||||||
|
|
||||||
|
- if (likely(netdev->features & NETIF_F_HW_VLAN_CTAG_RX)) {
|
||||||
|
- if (comp->csum_flags & IONIC_RXQ_COMP_CSUM_F_VLAN)
|
||||||
|
- __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
|
||||||
|
- le16_to_cpu(comp->vlan_tci));
|
||||||
|
+ if (likely(netdev->features & NETIF_F_HW_VLAN_CTAG_RX) &&
|
||||||
|
+ (comp->csum_flags & IONIC_RXQ_COMP_CSUM_F_VLAN)) {
|
||||||
|
+ __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
|
||||||
|
+ le16_to_cpu(comp->vlan_tci));
|
||||||
|
+ stats->vlan_stripped++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (le16_to_cpu(comp->len) <= q->lif->rx_copybreak)
|
||||||
|
@@ -860,6 +861,7 @@ static int ionic_tx_tso(struct ionic_queue *q, struct sk_buff *skb)
|
||||||
|
stats->pkts += total_pkts;
|
||||||
|
stats->bytes += total_bytes;
|
||||||
|
stats->tso++;
|
||||||
|
+ stats->tso_bytes += total_bytes;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
@@ -898,9 +900,12 @@ static int ionic_tx_calc_csum(struct ionic_queue *q, struct sk_buff *skb)
|
||||||
|
flags, skb_shinfo(skb)->nr_frags, dma_addr);
|
||||||
|
desc->cmd = cpu_to_le64(cmd);
|
||||||
|
desc->len = cpu_to_le16(skb_headlen(skb));
|
||||||
|
- desc->vlan_tci = cpu_to_le16(skb_vlan_tag_get(skb));
|
||||||
|
desc->csum_start = cpu_to_le16(skb_checksum_start_offset(skb));
|
||||||
|
desc->csum_offset = cpu_to_le16(skb->csum_offset);
|
||||||
|
+ if (has_vlan) {
|
||||||
|
+ desc->vlan_tci = cpu_to_le16(skb_vlan_tag_get(skb));
|
||||||
|
+ stats->vlan_inserted++;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (skb->csum_not_inet)
|
||||||
|
stats->crc32_csum++;
|
||||||
|
@@ -935,9 +940,12 @@ static int ionic_tx_calc_no_csum(struct ionic_queue *q, struct sk_buff *skb)
|
||||||
|
flags, skb_shinfo(skb)->nr_frags, dma_addr);
|
||||||
|
desc->cmd = cpu_to_le64(cmd);
|
||||||
|
desc->len = cpu_to_le16(skb_headlen(skb));
|
||||||
|
- desc->vlan_tci = cpu_to_le16(skb_vlan_tag_get(skb));
|
||||||
|
+ if (has_vlan) {
|
||||||
|
+ desc->vlan_tci = cpu_to_le16(skb_vlan_tag_get(skb));
|
||||||
|
+ stats->vlan_inserted++;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- stats->no_csum++;
|
||||||
|
+ stats->csum_none++;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,59 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:47 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 12/16] ionic: wait on queue start until after IFF_UP
|
||||||
|
|
||||||
|
The netif_running() test looks at __LINK_STATE_START which
|
||||||
|
gets set before ndo_open() is called, there is a window of
|
||||||
|
time between that and when the queues are actually ready to
|
||||||
|
be run. If ionic_check_link_status() notices that the link is
|
||||||
|
up very soon after netif_running() becomes true, it might try
|
||||||
|
to run the queues before they are ready, causing all manner of
|
||||||
|
potential issues. Since the netdev->flags IFF_UP isn't set
|
||||||
|
until after ndo_open() returns, we can wait for that before
|
||||||
|
we allow ionic_check_link_status() to start the queues.
|
||||||
|
|
||||||
|
On the way back to close, __LINK_STATE_START is cleared before
|
||||||
|
calling ndo_stop(), and IFF_UP is cleared after. Both of
|
||||||
|
these need to be true in order to safely stop the queues
|
||||||
|
from ionic_check_link_status().
|
||||||
|
|
||||||
|
Fixes: 49d3b493673a ("ionic: disable the queues on link down")
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit 976ee3b21119dcf5c6d96233d688a1453f29fa83)
|
||||||
|
Bugzilla: 1844924
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
index 7321a92f8395..fbc36e9e4729 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
@@ -116,7 +116,7 @@ static void ionic_link_status_check(struct ionic_lif *lif)
|
||||||
|
netif_carrier_on(netdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (netif_running(lif->netdev))
|
||||||
|
+ if (lif->netdev->flags & IFF_UP && netif_running(lif->netdev))
|
||||||
|
ionic_start_queues(lif);
|
||||||
|
} else {
|
||||||
|
if (netif_carrier_ok(netdev)) {
|
||||||
|
@@ -124,7 +124,7 @@ static void ionic_link_status_check(struct ionic_lif *lif)
|
||||||
|
netif_carrier_off(netdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (netif_running(lif->netdev))
|
||||||
|
+ if (lif->netdev->flags & IFF_UP && netif_running(lif->netdev))
|
||||||
|
ionic_stop_queues(lif);
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,134 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:48 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 13/16] ionic: remove support for mgmt device
|
||||||
|
|
||||||
|
We no longer support the mgmt device in the ionic driver,
|
||||||
|
so remove the device id and related code.
|
||||||
|
|
||||||
|
Fixes: b3f064e9746d ("ionic: add support for device id 0x1004")
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit 77f972a7077d06d565243ecc192f45e1e5813cf1)
|
||||||
|
|
||||||
|
Bugzilla: 1846506
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic.h | 2 --
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c | 6 ------
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_devlink.c | 4 ----
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 13 -------------
|
||||||
|
4 files changed, 25 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic.h b/drivers/net/ethernet/pensando/ionic/ionic.h
|
||||||
|
index 23ccc0da2341..f5a910c458ba 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic.h
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic.h
|
||||||
|
@@ -17,7 +17,6 @@ struct ionic_lif;
|
||||||
|
|
||||||
|
#define PCI_DEVICE_ID_PENSANDO_IONIC_ETH_PF 0x1002
|
||||||
|
#define PCI_DEVICE_ID_PENSANDO_IONIC_ETH_VF 0x1003
|
||||||
|
-#define PCI_DEVICE_ID_PENSANDO_IONIC_ETH_MGMT 0x1004
|
||||||
|
|
||||||
|
#define DEVCMD_TIMEOUT 10
|
||||||
|
|
||||||
|
@@ -42,7 +41,6 @@ struct ionic {
|
||||||
|
struct dentry *dentry;
|
||||||
|
struct ionic_dev_bar bars[IONIC_BARS_MAX];
|
||||||
|
unsigned int num_bars;
|
||||||
|
- bool is_mgmt_nic;
|
||||||
|
struct ionic_identity ident;
|
||||||
|
struct list_head lifs;
|
||||||
|
struct ionic_lif *master_lif;
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c b/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
|
||||||
|
index 60fc191a35e5..0ac6acbc5f31 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
|
||||||
|
@@ -15,7 +15,6 @@
|
||||||
|
static const struct pci_device_id ionic_id_table[] = {
|
||||||
|
{ PCI_VDEVICE(PENSANDO, PCI_DEVICE_ID_PENSANDO_IONIC_ETH_PF) },
|
||||||
|
{ PCI_VDEVICE(PENSANDO, PCI_DEVICE_ID_PENSANDO_IONIC_ETH_VF) },
|
||||||
|
- { PCI_VDEVICE(PENSANDO, PCI_DEVICE_ID_PENSANDO_IONIC_ETH_MGMT) },
|
||||||
|
{ 0, } /* end of table */
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(pci, ionic_id_table);
|
||||||
|
@@ -225,9 +224,6 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
|
pci_set_drvdata(pdev, ionic);
|
||||||
|
mutex_init(&ionic->dev_cmd_lock);
|
||||||
|
|
||||||
|
- ionic->is_mgmt_nic =
|
||||||
|
- ent->device == PCI_DEVICE_ID_PENSANDO_IONIC_ETH_MGMT;
|
||||||
|
-
|
||||||
|
/* Query system for DMA addressing limitation for the device. */
|
||||||
|
err = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(IONIC_ADDR_LEN));
|
||||||
|
if (err) {
|
||||||
|
@@ -252,8 +248,6 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
|
}
|
||||||
|
|
||||||
|
pci_set_master(pdev);
|
||||||
|
- if (!ionic->is_mgmt_nic)
|
||||||
|
- pcie_print_link_status(pdev);
|
||||||
|
|
||||||
|
err = ionic_map_bars(ionic);
|
||||||
|
if (err)
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_devlink.c b/drivers/net/ethernet/pensando/ionic/ionic_devlink.c
|
||||||
|
index 273c889faaad..2d590e571133 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_devlink.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_devlink.c
|
||||||
|
@@ -77,10 +77,6 @@ int ionic_devlink_register(struct ionic *ionic)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* don't register the mgmt_nic as a port */
|
||||||
|
- if (ionic->is_mgmt_nic)
|
||||||
|
- return 0;
|
||||||
|
-
|
||||||
|
devlink_port_attrs_set(&ionic->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
|
||||||
|
0, false, 0, NULL, 0);
|
||||||
|
err = devlink_port_register(dl, &ionic->dl_port, 0);
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
index fbc36e9e4729..9d8c969f21cb 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
@@ -99,9 +99,6 @@ static void ionic_link_status_check(struct ionic_lif *lif)
|
||||||
|
if (!test_bit(IONIC_LIF_F_LINK_CHECK_REQUESTED, lif->state))
|
||||||
|
return;
|
||||||
|
|
||||||
|
- if (lif->ionic->is_mgmt_nic)
|
||||||
|
- return;
|
||||||
|
-
|
||||||
|
link_status = le16_to_cpu(lif->info->status.link_status);
|
||||||
|
link_up = link_status == IONIC_PORT_OPER_STATUS_UP;
|
||||||
|
|
||||||
|
@@ -1193,10 +1190,6 @@ static int ionic_init_nic_features(struct ionic_lif *lif)
|
||||||
|
netdev_features_t features;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
- /* no netdev features on the management device */
|
||||||
|
- if (lif->ionic->is_mgmt_nic)
|
||||||
|
- return 0;
|
||||||
|
-
|
||||||
|
/* set up what we expect to support by default */
|
||||||
|
features = NETIF_F_HW_VLAN_CTAG_TX |
|
||||||
|
NETIF_F_HW_VLAN_CTAG_RX |
|
||||||
|
@@ -2594,12 +2587,6 @@ int ionic_lifs_register(struct ionic *ionic)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
- /* the netdev is not registered on the management device, it is
|
||||||
|
- * only used as a vehicle for napi operations on the adminq
|
||||||
|
- */
|
||||||
|
- if (ionic->is_mgmt_nic)
|
||||||
|
- return 0;
|
||||||
|
-
|
||||||
|
INIT_WORK(&ionic->nb_work, ionic_lif_notify_work);
|
||||||
|
|
||||||
|
ionic->nb.notifier_call = ionic_lif_notify;
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,37 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:49 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 14/16] ionic: export features for vlans to use
|
||||||
|
|
||||||
|
Set up vlan_features for use by any vlans above us.
|
||||||
|
|
||||||
|
Fixes: beead698b173 ("ionic: Add the basic NDO callbacks for netdev support")
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Acked-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit ef7232da6bcd4294cbb2d424bc35885721570f01)
|
||||||
|
Bugzilla: 1846868
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
index 9d8c969f21cb..7cc1ef657b10 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
@@ -1245,6 +1245,7 @@ static int ionic_init_nic_features(struct ionic_lif *lif)
|
||||||
|
|
||||||
|
netdev->hw_features |= netdev->hw_enc_features;
|
||||||
|
netdev->features |= netdev->hw_features;
|
||||||
|
+ netdev->vlan_features |= netdev->features & ~NETIF_F_VLAN_FEATURES;
|
||||||
|
|
||||||
|
netdev->priv_flags |= IFF_UNICAST_FLT |
|
||||||
|
IFF_LIVE_ADDR_CHANGE;
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,41 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:50 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 15/16] ionic: no link check while resetting queues
|
||||||
|
|
||||||
|
If the driver is busy resetting queues after a change in
|
||||||
|
MTU or queue parameters, don't bother checking the link,
|
||||||
|
wait until the next watchdog cycle.
|
||||||
|
|
||||||
|
Fixes: 987c0871e8ae ("ionic: check for linkup in watchdog")
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Acked-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit 3103b6feb4454646558eedc50ece728bc469f341)
|
||||||
|
Bugzilla: 1846953
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
index 7cc1ef657b10..8f29ef133743 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
@@ -96,7 +96,8 @@ static void ionic_link_status_check(struct ionic_lif *lif)
|
||||||
|
u16 link_status;
|
||||||
|
bool link_up;
|
||||||
|
|
||||||
|
- if (!test_bit(IONIC_LIF_F_LINK_CHECK_REQUESTED, lif->state))
|
||||||
|
+ if (!test_bit(IONIC_LIF_F_LINK_CHECK_REQUESTED, lif->state) ||
|
||||||
|
+ test_bit(IONIC_LIF_F_QUEUE_RESET, lif->state))
|
||||||
|
return;
|
||||||
|
|
||||||
|
link_status = le16_to_cpu(lif->info->status.link_status);
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,36 @@
|
|||||||
|
Date: Thu, 18 Jun 2020 19:42:51 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3 16/16] ionic: add pcie_print_link_status
|
||||||
|
|
||||||
|
Print the PCIe link information for our device.
|
||||||
|
|
||||||
|
Fixes: 77f972a7077d ("ionic: remove support for mgmt device")
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit c25cba3689c7ab5ae6ee7228d1d49a5652429229)
|
||||||
|
Bugzilla: 1846506
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29498383
|
||||||
|
Tested: QE tested devel kernel as well as the partner
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c b/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
|
||||||
|
index 0ac6acbc5f31..2924cde440aa 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
|
||||||
|
@@ -248,6 +248,7 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
|
}
|
||||||
|
|
||||||
|
pci_set_master(pdev);
|
||||||
|
+ pcie_print_link_status(pdev);
|
||||||
|
|
||||||
|
err = ionic_map_bars(ionic);
|
||||||
|
if (err)
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,79 @@
|
|||||||
|
Date: Mon, 22 Jun 2020 01:25:29 -0400
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
To: rhkernel-list@redhat.com
|
||||||
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
||||||
|
Subject: [PATCH RHEL-8.3] ionic: tame the watchdog timer on reconfig
|
||||||
|
|
||||||
|
Even with moving netif_tx_disable() to an earlier point when
|
||||||
|
taking down the queues for a reconfiguration, we still end
|
||||||
|
up with the occasional netdev watchdog Tx Timeout complaint.
|
||||||
|
The old method of using netif_trans_update() works fine for
|
||||||
|
queue 0, but has no effect on the remaining queues. Using
|
||||||
|
netif_device_detach() allows us to signal to the watchdog to
|
||||||
|
ignore us for the moment.
|
||||||
|
|
||||||
|
Fixes: beead698b173 ("ionic: Add the basic NDO callbacks for netdev support")
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Acked-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit b59eabd23ee53e8c3492602722e1697f9a2f63ad)
|
||||||
|
Bugzilla: 1846879
|
||||||
|
Bugzilla: 1846280
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29551761
|
||||||
|
Tested: partner tested
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 15 ++++++++-------
|
||||||
|
1 file changed, 8 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
index 8f29ef133743..aaa00edd9d5b 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
@@ -1694,15 +1694,15 @@ static void ionic_stop_queues(struct ionic_lif *lif)
|
||||||
|
if (!test_and_clear_bit(IONIC_LIF_F_UP, lif->state))
|
||||||
|
return;
|
||||||
|
|
||||||
|
- ionic_txrx_disable(lif);
|
||||||
|
netif_tx_disable(lif->netdev);
|
||||||
|
+ ionic_txrx_disable(lif);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ionic_stop(struct net_device *netdev)
|
||||||
|
{
|
||||||
|
struct ionic_lif *lif = netdev_priv(netdev);
|
||||||
|
|
||||||
|
- if (!netif_device_present(netdev))
|
||||||
|
+ if (test_bit(IONIC_LIF_F_FW_RESET, lif->state))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
ionic_stop_queues(lif);
|
||||||
|
@@ -1985,18 +1985,19 @@ int ionic_reset_queues(struct ionic_lif *lif)
|
||||||
|
bool running;
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
|
- /* Put off the next watchdog timeout */
|
||||||
|
- netif_trans_update(lif->netdev);
|
||||||
|
-
|
||||||
|
err = ionic_wait_for_bit(lif, IONIC_LIF_F_QUEUE_RESET);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
running = netif_running(lif->netdev);
|
||||||
|
- if (running)
|
||||||
|
+ if (running) {
|
||||||
|
+ netif_device_detach(lif->netdev);
|
||||||
|
err = ionic_stop(lif->netdev);
|
||||||
|
- if (!err && running)
|
||||||
|
+ }
|
||||||
|
+ if (!err && running) {
|
||||||
|
ionic_open(lif->netdev);
|
||||||
|
+ netif_device_attach(lif->netdev);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
clear_bit(IONIC_LIF_F_QUEUE_RESET, lif->state);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
|||||||
|
From fa48494cce5f6360b0f8683cdf258fb45c666287 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Date: Thu, 25 Jun 2020 22:58:37 -0700
|
||||||
|
Subject: [PATCH] ionic: update the queue count on open
|
||||||
|
|
||||||
|
Let the network stack know the real number of queues that
|
||||||
|
we are using.
|
||||||
|
|
||||||
|
v2: added error checking
|
||||||
|
|
||||||
|
Fixes: 49d3b493673a ("ionic: disable the queues on link down")
|
||||||
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 8 ++++++++
|
||||||
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
index aaa00edd9d5b..3c9dde31f3fa 100644
|
||||||
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
@@ -1673,6 +1673,14 @@ int ionic_open(struct net_device *netdev)
|
||||||
|
if (err)
|
||||||
|
goto err_out;
|
||||||
|
|
||||||
|
+ err = netif_set_real_num_tx_queues(netdev, lif->nxqs);
|
||||||
|
+ if (err)
|
||||||
|
+ goto err_txrx_deinit;
|
||||||
|
+
|
||||||
|
+ err = netif_set_real_num_rx_queues(netdev, lif->nxqs);
|
||||||
|
+ if (err)
|
||||||
|
+ goto err_txrx_deinit;
|
||||||
|
+
|
||||||
|
/* don't start the queues until we have link */
|
||||||
|
if (netif_carrier_ok(netdev)) {
|
||||||
|
err = ionic_start_queues(lif);
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
@ -0,0 +1,14 @@
|
|||||||
|
Index: src/drivers/net/ethernet/pensando/ionic/Makefile
|
||||||
|
===================================================================
|
||||||
|
--- src.orig/drivers/net/ethernet/pensando/ionic/Makefile 2020-06-28 15:21:53.545664652 +0200
|
||||||
|
+++ src/drivers/net/ethernet/pensando/ionic/Makefile 2020-06-28 15:22:39.483729298 +0200
|
||||||
|
@@ -1,6 +1,9 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
# Copyright(c) 2017 - 2019 Pensando Systems, Inc
|
||||||
|
|
||||||
|
+CONFIG_NET_VENDOR_PENSANDO := y
|
||||||
|
+CONFIG_IONIC := m
|
||||||
|
+
|
||||||
|
obj-$(CONFIG_IONIC) := ionic.o
|
||||||
|
|
||||||
|
ionic-y := ionic_main.o ionic_bus_pci.o ionic_devlink.o ionic_dev.o \
|
@ -0,0 +1,23 @@
|
|||||||
|
Index: src/drivers/net/ethernet/pensando/ionic/ionic.h
|
||||||
|
===================================================================
|
||||||
|
--- src.orig/drivers/net/ethernet/pensando/ionic/ionic.h 2020-06-23 12:25:59.338224007 +0200
|
||||||
|
+++ src/drivers/net/ethernet/pensando/ionic/ionic.h 2020-06-27 14:53:12.175233977 +0200
|
||||||
|
@@ -10,6 +10,8 @@
|
||||||
|
#include "ionic_dev.h"
|
||||||
|
#include "ionic_devlink.h"
|
||||||
|
|
||||||
|
+#include "ionic_backport_compat.h"
|
||||||
|
+
|
||||||
|
#define IONIC_DRV_NAME "ionic"
|
||||||
|
#define IONIC_DRV_DESCRIPTION "Pensando Ethernet NIC Driver"
|
||||||
|
|
||||||
|
Index: src/drivers/net/ethernet/pensando/ionic/ionic_backport_compat.h
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ src/drivers/net/ethernet/pensando/ionic/ionic_backport_compat.h 2020-06-27 14:52:31.974179393 +0200
|
||||||
|
@@ -0,0 +1,5 @@
|
||||||
|
+#ifndef IONIC_BACKPORT_COMPAT_H
|
||||||
|
+#define IONIC_BACKPORT_COMPAT_H
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#endif /* IONIC_BACKPORT_COMPAT_H */
|
@ -0,0 +1,66 @@
|
|||||||
|
Index: src/drivers/net/ethernet/pensando/ionic/ionic_backport_compat.h
|
||||||
|
===================================================================
|
||||||
|
--- src.orig/drivers/net/ethernet/pensando/ionic/ionic_backport_compat.h 2020-06-27 14:52:31.974179393 +0200
|
||||||
|
+++ src/drivers/net/ethernet/pensando/ionic/ionic_backport_compat.h 2020-06-28 15:13:55.980992671 +0200
|
||||||
|
@@ -1,5 +1,61 @@
|
||||||
|
#ifndef IONIC_BACKPORT_COMPAT_H
|
||||||
|
#define IONIC_BACKPORT_COMPAT_H
|
||||||
|
|
||||||
|
+#include <linux/sfp.h>
|
||||||
|
+
|
||||||
|
+/* SFF8024 defined constants */
|
||||||
|
+enum {
|
||||||
|
+ SFF8024_ID_UNK = 0x00,
|
||||||
|
+ SFF8024_ID_SFF_8472 = SFP_PHYS_ID_SFF,
|
||||||
|
+ SFF8024_ID_SFP = SFP_PHYS_ID_SFP,
|
||||||
|
+ SFF8024_ID_DWDM_SFP = 0x0b,
|
||||||
|
+ SFF8024_ID_QSFP_8438 = 0x0c,
|
||||||
|
+ SFF8024_ID_QSFP_8436_8636 = 0x0d,
|
||||||
|
+ SFF8024_ID_QSFP28_8636 = 0x11,
|
||||||
|
+
|
||||||
|
+ SFF8024_ENCODING_UNSPEC = SFP_ENCODING_UNSPEC,
|
||||||
|
+ SFF8024_ENCODING_8B10B = SFP_ENCODING_8B10B,
|
||||||
|
+ SFF8024_ENCODING_4B5B = SFP_ENCODING_4B5B,
|
||||||
|
+ SFF8024_ENCODING_NRZ = SFP_ENCODING_NRZ,
|
||||||
|
+ SFF8024_ENCODING_8472_MANCHESTER= SFP_ENCODING_8472_MANCHESTER,
|
||||||
|
+ SFF8024_ENCODING_8472_SONET = SFP_ENCODING_8472_SONET,
|
||||||
|
+ SFF8024_ENCODING_8472_64B66B = SFP_ENCODING_8472_64B66B,
|
||||||
|
+ SFF8024_ENCODING_8436_MANCHESTER= 0x06,
|
||||||
|
+ SFF8024_ENCODING_8436_SONET = 0x04,
|
||||||
|
+ SFF8024_ENCODING_8436_64B66B = 0x05,
|
||||||
|
+ SFF8024_ENCODING_256B257B = SFP_ENCODING_256B257B,
|
||||||
|
+ SFF8024_ENCODING_PAM4 = SFP_ENCODING_PAM4,
|
||||||
|
+
|
||||||
|
+ SFF8024_CONNECTOR_UNSPEC = SFP_CONNECTOR_UNSPEC,
|
||||||
|
+ /* codes 01-05 not supportable on SFP, but some modules have single SC */
|
||||||
|
+ SFF8024_CONNECTOR_SC = SFP_CONNECTOR_SC,
|
||||||
|
+ SFF8024_CONNECTOR_FIBERJACK = SFP_CONNECTOR_FIBERJACK,
|
||||||
|
+ SFF8024_CONNECTOR_LC = SFP_CONNECTOR_LC,
|
||||||
|
+ SFF8024_CONNECTOR_MT_RJ = SFP_CONNECTOR_MT_RJ,
|
||||||
|
+ SFF8024_CONNECTOR_MU = SFP_CONNECTOR_MU,
|
||||||
|
+ SFF8024_CONNECTOR_SG = SFP_CONNECTOR_SG,
|
||||||
|
+ SFF8024_CONNECTOR_OPTICAL_PIGTAIL= SFP_CONNECTOR_OPTICAL_PIGTAIL,
|
||||||
|
+ SFF8024_CONNECTOR_MPO_1X12 = SFP_CONNECTOR_MPO_1X12,
|
||||||
|
+ SFF8024_CONNECTOR_MPO_2X16 = SFP_CONNECTOR_MPO_2X16,
|
||||||
|
+ SFF8024_CONNECTOR_HSSDC_II = SFP_CONNECTOR_HSSDC_II,
|
||||||
|
+ SFF8024_CONNECTOR_COPPER_PIGTAIL= SFP_CONNECTOR_COPPER_PIGTAIL,
|
||||||
|
+ SFF8024_CONNECTOR_RJ45 = SFP_CONNECTOR_RJ45,
|
||||||
|
+ SFF8024_CONNECTOR_NOSEPARATE = SFP_CONNECTOR_NOSEPARATE,
|
||||||
|
+ SFF8024_CONNECTOR_MXC_2X16 = SFP_CONNECTOR_MXC_2X16,
|
||||||
|
+
|
||||||
|
+ SFF8024_ECC_UNSPEC = 0x00,
|
||||||
|
+ SFF8024_ECC_100G_25GAUI_C2M_AOC = 0x01,
|
||||||
|
+ SFF8024_ECC_100GBASE_SR4_25GBASE_SR = 0x02,
|
||||||
|
+ SFF8024_ECC_100GBASE_LR4_25GBASE_LR = 0x03,
|
||||||
|
+ SFF8024_ECC_100GBASE_ER4_25GBASE_ER = 0x04,
|
||||||
|
+ SFF8024_ECC_100GBASE_SR10 = 0x05,
|
||||||
|
+ SFF8024_ECC_100GBASE_CR4 = 0x0b,
|
||||||
|
+ SFF8024_ECC_25GBASE_CR_S = 0x0c,
|
||||||
|
+ SFF8024_ECC_25GBASE_CR_N = 0x0d,
|
||||||
|
+ SFF8024_ECC_10GBASE_T_SFI = 0x16,
|
||||||
|
+ SFF8024_ECC_10GBASE_T_SR = 0x1c,
|
||||||
|
+ SFF8024_ECC_5GBASE_T = 0x1d,
|
||||||
|
+ SFF8024_ECC_2_5GBASE_T = 0x1e,
|
||||||
|
+};
|
||||||
|
|
||||||
|
#endif /* IONIC_BACKPORT_COMPAT_H */
|
@ -0,0 +1,29 @@
|
|||||||
|
Index: src/drivers/net/ethernet/pensando/ionic/ionic_backport_compat.h
|
||||||
|
===================================================================
|
||||||
|
--- src.orig/drivers/net/ethernet/pensando/ionic/ionic_backport_compat.h 2020-06-28 15:23:55.318836007 +0200
|
||||||
|
+++ src/drivers/net/ethernet/pensando/ionic/ionic_backport_compat.h 2020-06-28 15:29:46.854330796 +0200
|
||||||
|
@@ -1,6 +1,8 @@
|
||||||
|
#ifndef IONIC_BACKPORT_COMPAT_H
|
||||||
|
#define IONIC_BACKPORT_COMPAT_H
|
||||||
|
|
||||||
|
+#include <linux/dynamic_debug.h>
|
||||||
|
+#include <linux/printk.h>
|
||||||
|
#include <linux/sfp.h>
|
||||||
|
|
||||||
|
/* SFF8024 defined constants */
|
||||||
|
@@ -58,4 +60,15 @@
|
||||||
|
SFF8024_ECC_2_5GBASE_T = 0x1e,
|
||||||
|
};
|
||||||
|
|
||||||
|
+
|
||||||
|
+#ifndef dynamic_hex_dump
|
||||||
|
+# define dynamic_hex_dump(prefix_str, prefix_type, rowsize, \
|
||||||
|
+ groupsize, buf, len, ascii) \
|
||||||
|
+ do { if (0) \
|
||||||
|
+ print_hex_dump(KERN_DEBUG, prefix_str, prefix_type, \
|
||||||
|
+ rowsize, groupsize, buf, len, ascii); \
|
||||||
|
+ } while (0)
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+
|
||||||
|
#endif /* IONIC_BACKPORT_COMPAT_H */
|
@ -0,0 +1,401 @@
|
|||||||
|
This patch reverts the following patch:
|
||||||
|
|
||||||
|
From 64285e39141d31d9d09a22394ff79ecc1dd912f6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
Date: Tue, 28 Apr 2020 19:08:42 -0400
|
||||||
|
Subject: [PATCH] [netdrv] netdev:pass the stuck queue to the timeout handler
|
||||||
|
|
||||||
|
Message-id: <94acdbd3257582e68f8c931ec148e9debd57e61c.1588100140.git.jtoppins@redhat.com>
|
||||||
|
Patchwork-id: 305685
|
||||||
|
Patchwork-instance: patchwork
|
||||||
|
O-Subject: [PATCH RHEL-8.3 58/84] netdev: [ionic only] pass the stuck queue to the timeout handler
|
||||||
|
Bugzilla: 1780645
|
||||||
|
RH-Acked-by: John Linville <linville@redhat.com>
|
||||||
|
RH-Acked-by: Corinna Vinschen <vinschen@redhat.com>
|
||||||
|
RH-Acked-by: Tony Camuso <tcamuso@redhat.com>
|
||||||
|
|
||||||
|
This allows incrementing the correct timeout statistic without any mess.
|
||||||
|
Down the road, devices can learn to reset just the specific queue.
|
||||||
|
|
||||||
|
The patch was generated with the following script:
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
our $^I = '.bak';
|
||||||
|
|
||||||
|
my @work = (
|
||||||
|
["arch/m68k/emu/nfeth.c", "nfeth_tx_timeout"],
|
||||||
|
["arch/um/drivers/net_kern.c", "uml_net_tx_timeout"],
|
||||||
|
["arch/um/drivers/vector_kern.c", "vector_net_tx_timeout"],
|
||||||
|
["arch/xtensa/platforms/iss/network.c", "iss_net_tx_timeout"],
|
||||||
|
["drivers/char/pcmcia/synclink_cs.c", "hdlcdev_tx_timeout"],
|
||||||
|
["drivers/infiniband/ulp/ipoib/ipoib_main.c", "ipoib_timeout"],
|
||||||
|
["drivers/infiniband/ulp/ipoib/ipoib_main.c", "ipoib_timeout"],
|
||||||
|
["drivers/message/fusion/mptlan.c", "mpt_lan_tx_timeout"],
|
||||||
|
["drivers/misc/sgi-xp/xpnet.c", "xpnet_dev_tx_timeout"],
|
||||||
|
["drivers/net/appletalk/cops.c", "cops_timeout"],
|
||||||
|
["drivers/net/arcnet/arcdevice.h", "arcnet_timeout"],
|
||||||
|
["drivers/net/arcnet/arcnet.c", "arcnet_timeout"],
|
||||||
|
["drivers/net/arcnet/com20020.c", "arcnet_timeout"],
|
||||||
|
["drivers/net/ethernet/3com/3c509.c", "el3_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/3com/3c515.c", "corkscrew_timeout"],
|
||||||
|
["drivers/net/ethernet/3com/3c574_cs.c", "el3_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/3com/3c589_cs.c", "el3_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/3com/3c59x.c", "vortex_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/3com/3c59x.c", "vortex_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/3com/typhoon.c", "typhoon_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/8390.h", "ei_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/8390.h", "eip_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/8390.c", "ei_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/8390p.c", "eip_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/ax88796.c", "ax_ei_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/axnet_cs.c", "axnet_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/etherh.c", "__ei_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/hydra.c", "__ei_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/mac8390.c", "__ei_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/mcf8390.c", "__ei_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/lib8390.c", "__ei_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/ne2k-pci.c", "ei_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/pcnet_cs.c", "ei_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/smc-ultra.c", "ei_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/wd.c", "ei_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/8390/zorro8390.c", "__ei_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/adaptec/starfire.c", "tx_timeout"],
|
||||||
|
["drivers/net/ethernet/agere/et131x.c", "et131x_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/allwinner/sun4i-emac.c", "emac_timeout"],
|
||||||
|
["drivers/net/ethernet/alteon/acenic.c", "ace_watchdog"],
|
||||||
|
["drivers/net/ethernet/amazon/ena/ena_netdev.c", "ena_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/7990.h", "lance_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/7990.c", "lance_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/a2065.c", "lance_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/am79c961a.c", "am79c961_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/amd8111e.c", "amd8111e_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/ariadne.c", "ariadne_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/atarilance.c", "lance_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/au1000_eth.c", "au1000_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/declance.c", "lance_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/lance.c", "lance_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/mvme147.c", "lance_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/ni65.c", "ni65_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/nmclan_cs.c", "mace_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/pcnet32.c", "pcnet32_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/sunlance.c", "lance_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/amd/xgbe/xgbe-drv.c", "xgbe_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/apm/xgene-v2/main.c", "xge_timeout"],
|
||||||
|
["drivers/net/ethernet/apm/xgene/xgene_enet_main.c", "xgene_enet_timeout"],
|
||||||
|
["drivers/net/ethernet/apple/macmace.c", "mace_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/atheros/ag71xx.c", "ag71xx_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/atheros/alx/main.c", "alx_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/atheros/atl1c/atl1c_main.c", "atl1c_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/atheros/atl1e/atl1e_main.c", "atl1e_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/atheros/atlx/atl.c", "atlx_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/atheros/atlx/atl1.c", "atlx_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/atheros/atlx/atl2.c", "atl2_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/broadcom/b44.c", "b44_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/broadcom/bcmsysport.c", "bcm_sysport_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/broadcom/bnx2.c", "bnx2_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h", "bnx2x_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c", "bnx2x_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c", "bnx2x_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/broadcom/bnxt/bnxt.c", "bnxt_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/broadcom/genet/bcmgenet.c", "bcmgenet_timeout"],
|
||||||
|
["drivers/net/ethernet/broadcom/sb1250-mac.c", "sbmac_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/broadcom/tg3.c", "tg3_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/calxeda/xgmac.c", "xgmac_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/cavium/liquidio/lio_main.c", "liquidio_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/cavium/liquidio/lio_vf_main.c", "liquidio_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c", "lio_vf_rep_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/cavium/thunder/nicvf_main.c", "nicvf_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/cirrus/cs89x0.c", "net_timeout"],
|
||||||
|
["drivers/net/ethernet/cisco/enic/enic_main.c", "enic_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/cisco/enic/enic_main.c", "enic_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/cortina/gemini.c", "gmac_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/davicom/dm9000.c", "dm9000_timeout"],
|
||||||
|
["drivers/net/ethernet/dec/tulip/de2104x.c", "de_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/dec/tulip/tulip_core.c", "tulip_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/dec/tulip/winbond-840.c", "tx_timeout"],
|
||||||
|
["drivers/net/ethernet/dlink/dl2k.c", "rio_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/dlink/sundance.c", "tx_timeout"],
|
||||||
|
["drivers/net/ethernet/emulex/benet/be_main.c", "be_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/ethoc.c", "ethoc_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/faraday/ftgmac100.c", "ftgmac100_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/fealnx.c", "fealnx_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/freescale/dpaa/dpaa_eth.c", "dpaa_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/freescale/fec_main.c", "fec_timeout"],
|
||||||
|
["drivers/net/ethernet/freescale/fec_mpc52xx.c", "mpc52xx_fec_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c", "fs_timeout"],
|
||||||
|
["drivers/net/ethernet/freescale/gianfar.c", "gfar_timeout"],
|
||||||
|
["drivers/net/ethernet/freescale/ucc_geth.c", "ucc_geth_timeout"],
|
||||||
|
["drivers/net/ethernet/fujitsu/fmvj18x_cs.c", "fjn_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/google/gve/gve_main.c", "gve_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/hisilicon/hip04_eth.c", "hip04_timeout"],
|
||||||
|
["drivers/net/ethernet/hisilicon/hix5hd2_gmac.c", "hix5hd2_net_timeout"],
|
||||||
|
["drivers/net/ethernet/hisilicon/hns/hns_enet.c", "hns_nic_net_timeout"],
|
||||||
|
["drivers/net/ethernet/hisilicon/hns3/hns3_enet.c", "hns3_nic_net_timeout"],
|
||||||
|
["drivers/net/ethernet/huawei/hinic/hinic_main.c", "hinic_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/i825xx/82596.c", "i596_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/i825xx/ether1.c", "ether1_timeout"],
|
||||||
|
["drivers/net/ethernet/i825xx/lib82596.c", "i596_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/i825xx/sun3_82586.c", "sun3_82586_timeout"],
|
||||||
|
["drivers/net/ethernet/ibm/ehea/ehea_main.c", "ehea_tx_watchdog"],
|
||||||
|
["drivers/net/ethernet/ibm/emac/core.c", "emac_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/ibm/emac/core.c", "emac_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/ibm/ibmvnic.c", "ibmvnic_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/intel/e100.c", "e100_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/intel/e1000/e1000_main.c", "e1000_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/intel/e1000e/netdev.c", "e1000_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/intel/fm10k/fm10k_netdev.c", "fm10k_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/intel/i40e/i40e_main.c", "i40e_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/intel/iavf/iavf_main.c", "iavf_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/intel/ice/ice_main.c", "ice_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/intel/ice/ice_main.c", "ice_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/intel/igb/igb_main.c", "igb_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/intel/igbvf/netdev.c", "igbvf_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/intel/ixgb/ixgb_main.c", "ixgb_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.c", "adapter->netdev->netdev_ops->ndo_tx_timeout(adapter->netdev);"],
|
||||||
|
["drivers/net/ethernet/intel/ixgbe/ixgbe_main.c", "ixgbe_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c", "ixgbevf_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/jme.c", "jme_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/korina.c", "korina_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/lantiq_etop.c", "ltq_etop_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/marvell/mv643xx_eth.c", "mv643xx_eth_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/marvell/pxa168_eth.c", "pxa168_eth_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/marvell/skge.c", "skge_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/marvell/sky2.c", "sky2_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/marvell/sky2.c", "sky2_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/mediatek/mtk_eth_soc.c", "mtk_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/mellanox/mlx4/en_netdev.c", "mlx4_en_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/mellanox/mlx4/en_netdev.c", "mlx4_en_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/mellanox/mlx5/core/en_main.c", "mlx5e_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/micrel/ks8842.c", "ks8842_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/micrel/ksz884x.c", "netdev_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/microchip/enc28j60.c", "enc28j60_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/microchip/encx24j600.c", "encx24j600_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/natsemi/sonic.h", "sonic_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/natsemi/sonic.c", "sonic_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/natsemi/jazzsonic.c", "sonic_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/natsemi/macsonic.c", "sonic_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/natsemi/natsemi.c", "ns_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/natsemi/ns83820.c", "ns83820_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/natsemi/xtsonic.c", "sonic_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/neterion/s2io.h", "s2io_tx_watchdog"],
|
||||||
|
["drivers/net/ethernet/neterion/s2io.c", "s2io_tx_watchdog"],
|
||||||
|
["drivers/net/ethernet/neterion/vxge/vxge-main.c", "vxge_tx_watchdog"],
|
||||||
|
["drivers/net/ethernet/netronome/nfp/nfp_net_common.c", "nfp_net_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/nvidia/forcedeth.c", "nv_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/nvidia/forcedeth.c", "nv_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c", "pch_gbe_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/packetengines/hamachi.c", "hamachi_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/packetengines/yellowfin.c", "yellowfin_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/pensando/ionic/ionic_lif.c", "ionic_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c", "netxen_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/qlogic/qla3xxx.c", "ql3xxx_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c", "qlcnic_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/qualcomm/emac/emac.c", "emac_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/qualcomm/qca_spi.c", "qcaspi_netdev_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/qualcomm/qca_uart.c", "qcauart_netdev_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/rdc/r6040.c", "r6040_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/realtek/8139cp.c", "cp_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/realtek/8139too.c", "rtl8139_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/realtek/atp.c", "tx_timeout"],
|
||||||
|
["drivers/net/ethernet/realtek/r8169_main.c", "rtl8169_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/renesas/ravb_main.c", "ravb_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/renesas/sh_eth.c", "sh_eth_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/renesas/sh_eth.c", "sh_eth_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c", "sxgbe_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/seeq/ether3.c", "ether3_timeout"],
|
||||||
|
["drivers/net/ethernet/seeq/sgiseeq.c", "timeout"],
|
||||||
|
["drivers/net/ethernet/sfc/efx.c", "efx_watchdog"],
|
||||||
|
["drivers/net/ethernet/sfc/falcon/efx.c", "ef4_watchdog"],
|
||||||
|
["drivers/net/ethernet/sgi/ioc3-eth.c", "ioc3_timeout"],
|
||||||
|
["drivers/net/ethernet/sgi/meth.c", "meth_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/silan/sc92031.c", "sc92031_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/sis/sis190.c", "sis190_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/sis/sis900.c", "sis900_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/smsc/epic100.c", "epic_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/smsc/smc911x.c", "smc911x_timeout"],
|
||||||
|
["drivers/net/ethernet/smsc/smc9194.c", "smc_timeout"],
|
||||||
|
["drivers/net/ethernet/smsc/smc91c92_cs.c", "smc_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/smsc/smc91x.c", "smc_timeout"],
|
||||||
|
["drivers/net/ethernet/stmicro/stmmac/stmmac_main.c", "stmmac_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/sun/cassini.c", "cas_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/sun/ldmvsw.c", "sunvnet_tx_timeout_common"],
|
||||||
|
["drivers/net/ethernet/sun/niu.c", "niu_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/sun/sunbmac.c", "bigmac_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/sun/sungem.c", "gem_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/sun/sunhme.c", "happy_meal_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/sun/sunqe.c", "qe_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/sun/sunvnet.c", "sunvnet_tx_timeout_common"],
|
||||||
|
["drivers/net/ethernet/sun/sunvnet_common.c", "sunvnet_tx_timeout_common"],
|
||||||
|
["drivers/net/ethernet/sun/sunvnet_common.h", "sunvnet_tx_timeout_common"],
|
||||||
|
["drivers/net/ethernet/synopsys/dwc-xlgmac-net.c", "xlgmac_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/ti/cpmac.c", "cpmac_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/ti/cpsw.c", "cpsw_ndo_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/ti/cpsw_priv.c", "cpsw_ndo_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/ti/cpsw_priv.h", "cpsw_ndo_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/ti/davinci_emac.c", "emac_dev_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/ti/netcp_core.c", "netcp_ndo_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/ti/tlan.c", "tlan_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/toshiba/ps3_gelic_net.h", "gelic_net_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/toshiba/ps3_gelic_net.c", "gelic_net_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/toshiba/ps3_gelic_wireless.c", "gelic_net_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/toshiba/spider_net.c", "spider_net_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/toshiba/tc35815.c", "tc35815_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/via/via-rhine.c", "rhine_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/wiznet/w5100.c", "w5100_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/wiznet/w5300.c", "w5300_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/xilinx/xilinx_emaclite.c", "xemaclite_tx_timeout"],
|
||||||
|
["drivers/net/ethernet/xircom/xirc2ps_cs.c", "xirc_tx_timeout"],
|
||||||
|
["drivers/net/fjes/fjes_main.c", "fjes_tx_retry"],
|
||||||
|
["drivers/net/slip/slip.c", "sl_tx_timeout"],
|
||||||
|
["include/linux/usb/usbnet.h", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/aqc111.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/asix_devices.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/asix_devices.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/asix_devices.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/ax88172a.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/ax88179_178a.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/catc.c", "catc_tx_timeout"],
|
||||||
|
["drivers/net/usb/cdc_mbim.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/cdc_ncm.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/dm9601.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/hso.c", "hso_net_tx_timeout"],
|
||||||
|
["drivers/net/usb/int51x1.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/ipheth.c", "ipheth_tx_timeout"],
|
||||||
|
["drivers/net/usb/kaweth.c", "kaweth_tx_timeout"],
|
||||||
|
["drivers/net/usb/lan78xx.c", "lan78xx_tx_timeout"],
|
||||||
|
["drivers/net/usb/mcs7830.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/pegasus.c", "pegasus_tx_timeout"],
|
||||||
|
["drivers/net/usb/qmi_wwan.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/r8152.c", "rtl8152_tx_timeout"],
|
||||||
|
["drivers/net/usb/rndis_host.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/rtl8150.c", "rtl8150_tx_timeout"],
|
||||||
|
["drivers/net/usb/sierra_net.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/smsc75xx.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/smsc95xx.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/sr9700.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/sr9800.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/usb/usbnet.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/vmxnet3/vmxnet3_drv.c", "vmxnet3_tx_timeout"],
|
||||||
|
["drivers/net/wan/cosa.c", "cosa_net_timeout"],
|
||||||
|
["drivers/net/wan/farsync.c", "fst_tx_timeout"],
|
||||||
|
["drivers/net/wan/fsl_ucc_hdlc.c", "uhdlc_tx_timeout"],
|
||||||
|
["drivers/net/wan/lmc/lmc_main.c", "lmc_driver_timeout"],
|
||||||
|
["drivers/net/wan/x25_asy.c", "x25_asy_timeout"],
|
||||||
|
["drivers/net/wimax/i2400m/netdev.c", "i2400m_tx_timeout"],
|
||||||
|
["drivers/net/wireless/intel/ipw2x00/ipw2100.c", "ipw2100_tx_timeout"],
|
||||||
|
["drivers/net/wireless/intersil/hostap/hostap_main.c", "prism2_tx_timeout"],
|
||||||
|
["drivers/net/wireless/intersil/hostap/hostap_main.c", "prism2_tx_timeout"],
|
||||||
|
["drivers/net/wireless/intersil/hostap/hostap_main.c", "prism2_tx_timeout"],
|
||||||
|
["drivers/net/wireless/intersil/orinoco/main.c", "orinoco_tx_timeout"],
|
||||||
|
["drivers/net/wireless/intersil/orinoco/orinoco_usb.c", "orinoco_tx_timeout"],
|
||||||
|
["drivers/net/wireless/intersil/orinoco/orinoco.h", "orinoco_tx_timeout"],
|
||||||
|
["drivers/net/wireless/intersil/prism54/islpci_dev.c", "islpci_eth_tx_timeout"],
|
||||||
|
["drivers/net/wireless/intersil/prism54/islpci_eth.c", "islpci_eth_tx_timeout"],
|
||||||
|
["drivers/net/wireless/intersil/prism54/islpci_eth.h", "islpci_eth_tx_timeout"],
|
||||||
|
["drivers/net/wireless/marvell/mwifiex/main.c", "mwifiex_tx_timeout"],
|
||||||
|
["drivers/net/wireless/quantenna/qtnfmac/core.c", "qtnf_netdev_tx_timeout"],
|
||||||
|
["drivers/net/wireless/quantenna/qtnfmac/core.h", "qtnf_netdev_tx_timeout"],
|
||||||
|
["drivers/net/wireless/rndis_wlan.c", "usbnet_tx_timeout"],
|
||||||
|
["drivers/net/wireless/wl3501_cs.c", "wl3501_tx_timeout"],
|
||||||
|
["drivers/net/wireless/zydas/zd1201.c", "zd1201_tx_timeout"],
|
||||||
|
["drivers/s390/net/qeth_core.h", "qeth_tx_timeout"],
|
||||||
|
["drivers/s390/net/qeth_core_main.c", "qeth_tx_timeout"],
|
||||||
|
["drivers/s390/net/qeth_l2_main.c", "qeth_tx_timeout"],
|
||||||
|
["drivers/s390/net/qeth_l2_main.c", "qeth_tx_timeout"],
|
||||||
|
["drivers/s390/net/qeth_l3_main.c", "qeth_tx_timeout"],
|
||||||
|
["drivers/s390/net/qeth_l3_main.c", "qeth_tx_timeout"],
|
||||||
|
["drivers/staging/ks7010/ks_wlan_net.c", "ks_wlan_tx_timeout"],
|
||||||
|
["drivers/staging/qlge/qlge_main.c", "qlge_tx_timeout"],
|
||||||
|
["drivers/staging/rtl8192e/rtl8192e/rtl_core.c", "_rtl92e_tx_timeout"],
|
||||||
|
["drivers/staging/rtl8192u/r8192U_core.c", "tx_timeout"],
|
||||||
|
["drivers/staging/unisys/visornic/visornic_main.c", "visornic_xmit_timeout"],
|
||||||
|
["drivers/staging/wlan-ng/p80211netdev.c", "p80211knetdev_tx_timeout"],
|
||||||
|
["drivers/tty/n_gsm.c", "gsm_mux_net_tx_timeout"],
|
||||||
|
["drivers/tty/synclink.c", "hdlcdev_tx_timeout"],
|
||||||
|
["drivers/tty/synclink_gt.c", "hdlcdev_tx_timeout"],
|
||||||
|
["drivers/tty/synclinkmp.c", "hdlcdev_tx_timeout"],
|
||||||
|
["net/atm/lec.c", "lec_tx_timeout"],
|
||||||
|
["net/bluetooth/bnep/netdev.c", "bnep_net_timeout"]
|
||||||
|
);
|
||||||
|
|
||||||
|
for my $p (@work) {
|
||||||
|
my @pair = @$p;
|
||||||
|
my $file = $pair[0];
|
||||||
|
my $func = $pair[1];
|
||||||
|
print STDERR $file , ": ", $func,"\n";
|
||||||
|
our @ARGV = ($file);
|
||||||
|
while (<ARGV>) {
|
||||||
|
if (m/($func\s*\(struct\s+net_device\s+\*[A-Za-z_]?[A-Za-z-0-9_]*)(\))/) {
|
||||||
|
print STDERR "found $1+$2 in $file\n";
|
||||||
|
}
|
||||||
|
if (s/($func\s*\(struct\s+net_device\s+\*[A-Za-z_]?[A-Za-z-0-9_]*)(\))/$1, unsigned int txqueue$2/) {
|
||||||
|
print STDERR "$func found in $file\n";
|
||||||
|
}
|
||||||
|
print;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
where the list of files and functions is simply from:
|
||||||
|
|
||||||
|
git grep ndo_tx_timeout, with manual addition of headers
|
||||||
|
in the rare cases where the function is from a header,
|
||||||
|
then manually changing the few places which actually
|
||||||
|
call ndo_tx_timeout.
|
||||||
|
|
||||||
|
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
||||||
|
Acked-by: Heiner Kallweit <hkallweit1@gmail.com>
|
||||||
|
Acked-by: Jakub Kicinski <jakub.kicinski@netronome.com>
|
||||||
|
Acked-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Reviewed-by: Martin Habets <mhabets@solarflare.com>
|
||||||
|
|
||||||
|
changes from v9:
|
||||||
|
fixup a forward declaration
|
||||||
|
changes from v9:
|
||||||
|
more leftovers from v3 change
|
||||||
|
changes from v8:
|
||||||
|
fix up a missing direct call to timeout
|
||||||
|
rebased on net-next
|
||||||
|
changes from v7:
|
||||||
|
fixup leftovers from v3 change
|
||||||
|
changes from v6:
|
||||||
|
fix typo in rtl driver
|
||||||
|
changes from v5:
|
||||||
|
add missing files (allow any net device argument name)
|
||||||
|
changes from v4:
|
||||||
|
add a missing driver header
|
||||||
|
changes from v3:
|
||||||
|
change queue # to unsigned
|
||||||
|
Changes from v2:
|
||||||
|
added headers
|
||||||
|
Changes from v1:
|
||||||
|
Fix errors found by kbuild:
|
||||||
|
generalize the pattern a bit, to pick up
|
||||||
|
a couple of instances missed by the previous
|
||||||
|
version.
|
||||||
|
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit 0290bd291cc0e0488e35e66bf39efcd7d9d9122b)
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
Bugzilla: 1780645
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=28076826
|
||||||
|
Tested: partner and local testing show driver seems to work as expected
|
||||||
|
Signed-off-by: Frantisek Hrbata <fhrbata@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
Index: src/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
||||||
|
===================================================================
|
||||||
|
--- src.orig/drivers/net/ethernet/pensando/ionic/ionic_lif.c 2020-06-28 19:17:46.286933519 +0200
|
||||||
|
+++ src/drivers/net/ethernet/pensando/ionic/ionic_lif.c 2020-06-28 19:17:46.332933578 +0200
|
||||||
|
@@ -1329,7 +1329,7 @@
|
||||||
|
rtnl_unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void ionic_tx_timeout(struct net_device *netdev, unsigned int txqueue)
|
||||||
|
+static void ionic_tx_timeout(struct net_device *netdev)
|
||||||
|
{
|
||||||
|
struct ionic_lif *lif = netdev_priv(netdev);
|
||||||
|
|
@ -0,0 +1,18 @@
|
|||||||
|
Index: src/drivers/net/ethernet/pensando/ionic/ionic_backport_compat.h
|
||||||
|
===================================================================
|
||||||
|
--- src.orig/drivers/net/ethernet/pensando/ionic/ionic_backport_compat.h 2020-06-28 19:17:55.546945346 +0200
|
||||||
|
+++ src/drivers/net/ethernet/pensando/ionic/ionic_backport_compat.h 2020-06-28 19:18:04.765957119 +0200
|
||||||
|
@@ -71,4 +71,13 @@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
+/* Part number, identifier of asic design */
|
||||||
|
+#define DEVLINK_INFO_VERSION_GENERIC_ASIC_ID "asic.id"
|
||||||
|
+/* Revision of asic design */
|
||||||
|
+#define DEVLINK_INFO_VERSION_GENERIC_ASIC_REV "asic.rev"
|
||||||
|
+
|
||||||
|
+/* Overall FW version */
|
||||||
|
+#define DEVLINK_INFO_VERSION_GENERIC_FW "fw"
|
||||||
|
+
|
||||||
|
+
|
||||||
|
#endif /* IONIC_BACKPORT_COMPAT_H */
|
@ -0,0 +1,80 @@
|
|||||||
|
Reverting the following patch:
|
||||||
|
|
||||||
|
From 8d7542cf03abbf25caa2be86fa9e99a3cecbc971 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
Date: Tue, 28 Apr 2020 19:08:32 -0400
|
||||||
|
Subject: [PATCH] [netdrv] ionic: let core reject the unsupported coalescing
|
||||||
|
parameters
|
||||||
|
|
||||||
|
Message-id: <c642a3d6a4808815176d7a6bef8f94bba2fce80d.1588100139.git.jtoppins@redhat.com>
|
||||||
|
Patchwork-id: 305678
|
||||||
|
Patchwork-instance: patchwork
|
||||||
|
O-Subject: [PATCH RHEL-8.3 48/84] ionic: let core reject the unsupported coalescing parameters
|
||||||
|
Bugzilla: 1780645
|
||||||
|
RH-Acked-by: John Linville <linville@redhat.com>
|
||||||
|
RH-Acked-by: Corinna Vinschen <vinschen@redhat.com>
|
||||||
|
RH-Acked-by: Tony Camuso <tcamuso@redhat.com>
|
||||||
|
|
||||||
|
Set ethtool_ops->supported_coalesce_params to let
|
||||||
|
the core reject unsupported coalescing parameters.
|
||||||
|
|
||||||
|
This driver correctly rejects all unsupported parameters.
|
||||||
|
As a side effect of these changes the error code for
|
||||||
|
unsupported params changes from EINVAL to EOPNOTSUPP.
|
||||||
|
|
||||||
|
v3: adjust commit message for new error code and member name
|
||||||
|
|
||||||
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
Acked-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit 987b191c16f9b7568a756b0745ee4a93611879ae)
|
||||||
|
Bugzilla: 1780645
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=28076826
|
||||||
|
Tested: partner and local testing show driver seems to work as expected
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
Signed-off-by: Frantisek Hrbata <fhrbata@redhat.com>
|
||||||
|
---
|
||||||
|
.../net/ethernet/pensando/ionic/ionic_ethtool.c | 23 +---------------------
|
||||||
|
1 file changed, 1 insertion(+), 22 deletions(-)
|
||||||
|
|
||||||
|
Index: src/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
|
||||||
|
===================================================================
|
||||||
|
--- src.orig/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c 2020-06-28 19:17:55.043944702 +0200
|
||||||
|
+++ src/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c 2020-06-28 19:18:06.838959767 +0200
|
||||||
|
@@ -416,6 +416,28 @@
|
||||||
|
unsigned int i;
|
||||||
|
u32 coal;
|
||||||
|
|
||||||
|
+ if (coalesce->rx_max_coalesced_frames ||
|
||||||
|
+ coalesce->rx_coalesce_usecs_irq ||
|
||||||
|
+ coalesce->rx_max_coalesced_frames_irq ||
|
||||||
|
+ coalesce->tx_max_coalesced_frames ||
|
||||||
|
+ coalesce->tx_coalesce_usecs_irq ||
|
||||||
|
+ coalesce->tx_max_coalesced_frames_irq ||
|
||||||
|
+ coalesce->stats_block_coalesce_usecs ||
|
||||||
|
+ coalesce->use_adaptive_rx_coalesce ||
|
||||||
|
+ coalesce->use_adaptive_tx_coalesce ||
|
||||||
|
+ coalesce->pkt_rate_low ||
|
||||||
|
+ coalesce->rx_coalesce_usecs_low ||
|
||||||
|
+ coalesce->rx_max_coalesced_frames_low ||
|
||||||
|
+ coalesce->tx_coalesce_usecs_low ||
|
||||||
|
+ coalesce->tx_max_coalesced_frames_low ||
|
||||||
|
+ coalesce->pkt_rate_high ||
|
||||||
|
+ coalesce->rx_coalesce_usecs_high ||
|
||||||
|
+ coalesce->rx_max_coalesced_frames_high ||
|
||||||
|
+ coalesce->tx_coalesce_usecs_high ||
|
||||||
|
+ coalesce->tx_max_coalesced_frames_high ||
|
||||||
|
+ coalesce->rate_sample_interval)
|
||||||
|
+ return -EINVAL;
|
||||||
|
+
|
||||||
|
ident = &lif->ionic->ident;
|
||||||
|
if (ident->dev.intr_coal_div == 0) {
|
||||||
|
netdev_warn(netdev, "bad HW value in dev.intr_coal_div = %d\n",
|
||||||
|
@@ -766,7 +788,6 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct ethtool_ops ionic_ethtool_ops = {
|
||||||
|
- .supported_coalesce_params = ETHTOOL_COALESCE_USECS,
|
||||||
|
.get_drvinfo = ionic_get_drvinfo,
|
||||||
|
.get_regs_len = ionic_get_regs_len,
|
||||||
|
.get_regs = ionic_get_regs,
|
@ -0,0 +1,45 @@
|
|||||||
|
From 15d95cc39f17d6edccdbbbabdb105055d420baa9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
Date: Tue, 28 Apr 2020 19:08:30 -0400
|
||||||
|
Subject: [PATCH] [netdrv] ionic: use new helper tcp_v6_gso_csum_prep
|
||||||
|
|
||||||
|
Message-id: <703cf10dc3ec18f4b7ccd734863ba19c26039bb6.1588100139.git.jtoppins@redhat.com>
|
||||||
|
Patchwork-id: 305675
|
||||||
|
Patchwork-instance: patchwork
|
||||||
|
O-Subject: [PATCH RHEL-8.3 46/84] ionic: use new helper tcp_v6_gso_csum_prep
|
||||||
|
Bugzilla: 1780645
|
||||||
|
RH-Acked-by: John Linville <linville@redhat.com>
|
||||||
|
RH-Acked-by: Corinna Vinschen <vinschen@redhat.com>
|
||||||
|
RH-Acked-by: Tony Camuso <tcamuso@redhat.com>
|
||||||
|
|
||||||
|
Use new helper tcp_v6_gso_csum_prep in additional network drivers.
|
||||||
|
|
||||||
|
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
|
||||||
|
Acked-by: Shannon Nelson <snelson@pensando.io>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
(cherry picked from commit fa6b84295225b96bed9321301f218eda6ca73edc)
|
||||||
|
Bugzilla: 1780645
|
||||||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=28076826
|
||||||
|
Tested: partner and local testing show driver seems to work as expected
|
||||||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||||
|
Signed-off-by: Frantisek Hrbata <fhrbata@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/pensando/ionic/ionic_txrx.c | 5 +----
|
||||||
|
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||||
|
|
||||||
|
Index: src/drivers/net/ethernet/pensando/ionic/ionic_txrx.c
|
||||||
|
===================================================================
|
||||||
|
--- src.orig/drivers/net/ethernet/pensando/ionic/ionic_txrx.c 2020-06-28 19:17:54.295943746 +0200
|
||||||
|
+++ src/drivers/net/ethernet/pensando/ionic/ionic_txrx.c 2020-06-28 19:18:08.537961935 +0200
|
||||||
|
@@ -657,7 +657,10 @@
|
||||||
|
ip_hdr(skb)->daddr,
|
||||||
|
0, IPPROTO_TCP, 0);
|
||||||
|
} else if (skb->protocol == cpu_to_be16(ETH_P_IPV6)) {
|
||||||
|
- tcp_v6_gso_csum_prep(skb);
|
||||||
|
+ tcp_hdr(skb)->check =
|
||||||
|
+ ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
|
||||||
|
+ &ipv6_hdr(skb)->daddr,
|
||||||
|
+ 0, IPPROTO_TCP, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
@ -0,0 +1,12 @@
|
|||||||
|
Index: src/drivers/net/ethernet/pensando/ionic/ionic_main.c
|
||||||
|
===================================================================
|
||||||
|
--- src.orig/drivers/net/ethernet/pensando/ionic/ionic_main.c 2020-06-28 22:33:12.257522904 +0200
|
||||||
|
+++ src/drivers/net/ethernet/pensando/ionic/ionic_main.c 2020-06-28 22:33:58.336569011 +0200
|
||||||
|
@@ -16,6 +16,7 @@
|
||||||
|
MODULE_DESCRIPTION(IONIC_DRV_DESCRIPTION);
|
||||||
|
MODULE_AUTHOR("Pensando Systems, Inc");
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
+MODULE_VERSION("4.18.0.210_dup8.2");
|
||||||
|
|
||||||
|
static const char *ionic_error_to_str(enum ionic_status_code code)
|
||||||
|
{
|
@ -0,0 +1,355 @@
|
|||||||
|
%define kmod_name ionic
|
||||||
|
%define kmod_vendor redhat
|
||||||
|
%define kmod_rpm_name kmod-redhat-ionic
|
||||||
|
%define kmod_driver_version 4.18.0.210_dup8.2
|
||||||
|
%define kmod_driver_epoch %{nil}
|
||||||
|
%define kmod_rpm_release 2
|
||||||
|
%define kmod_kernel_version 4.18.0-193.el8
|
||||||
|
%define kmod_kernel_version_min %{nil}
|
||||||
|
%define kmod_kernel_version_dep %{nil}
|
||||||
|
%define kmod_kbuild_dir drivers/net/ethernet/pensando/ionic
|
||||||
|
%define kmod_dependencies %{nil}
|
||||||
|
%define kmod_dist_build_deps %{nil}
|
||||||
|
%define kmod_build_dependencies %{nil}
|
||||||
|
%define kmod_devel_package 0
|
||||||
|
%define kmod_devel_src_paths %{nil}
|
||||||
|
%define kmod_install_path extra/kmod-redhat-ionic
|
||||||
|
%define kernel_pkg kernel
|
||||||
|
%define kernel_devel_pkg kernel-devel
|
||||||
|
%define kernel_modules_pkg kernel-modules
|
||||||
|
|
||||||
|
%{!?dist: %define dist .el8_2}
|
||||||
|
%{!?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-drivers_ionic_only_Remove_inclusion_of_vermagic_.patch
|
||||||
|
Patch1: 0001-ionic_Use_debugfs_create_bool__to_export_bool.patch
|
||||||
|
Patch2: 0002-ionic_support_longer_tx_sg_lists.patch
|
||||||
|
Patch3: 0003-ionic_updates_to_ionic_FW_api_description.patch
|
||||||
|
Patch4: 0004-ionic_protect_vf_calls_from_fw_reset.patch
|
||||||
|
Patch5: 0005-ionic_add_support_for_more_xcvr_types.patch
|
||||||
|
Patch6: 0006-ionic_shorter_dev_cmd_wait_time.patch
|
||||||
|
Patch7: 0007-ionic_reset_device_at_probe.patch
|
||||||
|
Patch8: 0008-ionic_ionic_intr_free_parameter_change.patch
|
||||||
|
Patch9: 0009-ionic_more_ionic_name_tweaks.patch
|
||||||
|
Patch10: 0010-ionic_add_more_ethtool_stats.patch
|
||||||
|
Patch11: 0011-ionic_wait_on_queue_start_until_after_IFF_UP.patch
|
||||||
|
Patch12: 0012-ionic_remove_support_for_mgmt_device.patch
|
||||||
|
Patch13: 0013-ionic_export_features_for_vlans_to_use.patch
|
||||||
|
Patch14: 0014-ionic_no_link_check_while_resetting_queues.patch
|
||||||
|
Patch15: 0015-ionic_add_pcie_print_link_status.patch
|
||||||
|
Patch16: 0016-ionic_tame_the_watchdog_timer_on_reconfig.patch
|
||||||
|
Patch17: 0017-ionic-update-the-queue-count-on-open.patch
|
||||||
|
Patch18: 9000-Makefile-CONFIG_IONIC.patch
|
||||||
|
Patch19: 9001-add-ionic_backport_compat-h.patch
|
||||||
|
Patch20: 9002-SFF8024-enum.patch
|
||||||
|
Patch21: 9003-add-dynamic_hex_dump.patch
|
||||||
|
Patch22: 9004-Revert-netdrv-netdev-pass-the-stuck-queue-to-the-timeout-ha.patch
|
||||||
|
Patch23: 9005-add-devlink-constants.patch
|
||||||
|
Patch24: 9006-Revert-netdrv-ionic-let-core-reject-the-unsupported-coalesc.patch
|
||||||
|
Patch25: 9007-Revert-netdrv-ionic-use-new-helper-tcp_v6_gso_csum_prep.patch
|
||||||
|
Patch26: 9008-module-version.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-ionic
|
||||||
|
Version: %{kmod_driver_version}
|
||||||
|
Release: %{kmod_rpm_release}%{?dist}
|
||||||
|
%if "%{kmod_driver_epoch}" != ""
|
||||||
|
Epoch: %{kmod_driver_epoch}
|
||||||
|
%endif
|
||||||
|
Summary: ionic 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 >= 4.18.0-193.el8
|
||||||
|
|
||||||
|
Requires: kernel < 4.18.0-194.el8
|
||||||
|
%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
|
||||||
|
ionic kernel module for Driver Update Program
|
||||||
|
|
||||||
|
%if 0
|
||||||
|
|
||||||
|
%package -n kmod-redhat-ionic-firmware
|
||||||
|
Version: ENTER_FIRMWARE_VERSION
|
||||||
|
Summary: ionic 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-ionic-firmware
|
||||||
|
ionic firmware for Driver Update Program
|
||||||
|
|
||||||
|
|
||||||
|
%files -n kmod-redhat-ionic-firmware
|
||||||
|
%defattr(644,root,root,755)
|
||||||
|
%{FIRMWARE_FILES}
|
||||||
|
|
||||||
|
%endif
|
||||||
|
|
||||||
|
# Development package
|
||||||
|
%if 0%{kmod_devel_package}
|
||||||
|
%package -n kmod-redhat-ionic-devel
|
||||||
|
Version: %{kmod_driver_version}
|
||||||
|
Requires: kernel >= 4.18.0-193.el8
|
||||||
|
|
||||||
|
Requires: kernel < 4.18.0-194.el8
|
||||||
|
Summary: ionic development files for Driver Update Program
|
||||||
|
|
||||||
|
%description -n kmod-redhat-ionic-devel
|
||||||
|
ionic development files for Driver Update Program
|
||||||
|
|
||||||
|
|
||||||
|
%files -n kmod-redhat-ionic-devel
|
||||||
|
%defattr(644,root,root,755)
|
||||||
|
/lib/modules/%{kmod_rpm_name}-%{kmod_driver_version}/
|
||||||
|
%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-ionic-%{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
|
||||||
|
%doc /usr/share/doc/%{kmod_rpm_name}/greylist.txt
|
||||||
|
%doc /usr/share/doc/kmod-redhat-ionic/README.interface_naming
|
||||||
|
%doc /usr/share/doc/kmod-redhat-ionic/examples/81-pensando-net.rules
|
||||||
|
%doc /usr/share/doc/kmod-redhat-ionic/examples/10-ionic.link
|
||||||
|
|
||||||
|
%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
|
||||||
|
%patch21 -p1
|
||||||
|
%patch22 -p1
|
||||||
|
%patch23 -p1
|
||||||
|
%patch24 -p1
|
||||||
|
%patch25 -p1
|
||||||
|
%patch26 -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 %{nil}" \
|
||||||
|
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_rpm_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/lib/modules/%{kmod_rpm_name}-%{kmod_driver_version}/build/Module.symvers
|
||||||
|
|
||||||
|
if [ -n "%{kmod_devel_src_paths}" ]; then
|
||||||
|
for i in %{kmod_devel_src_paths}; do
|
||||||
|
mkdir -p "$RPM_BUILD_ROOT/lib/modules/%{kmod_rpm_name}-%{kmod_driver_version}/build/$(dirname "$i")"
|
||||||
|
cp -rv "$PWD/source/$i" \
|
||||||
|
"$RPM_BUILD_ROOT/lib/modules/%{kmod_rpm_name}-%{kmod_driver_version}/build/$i"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
%endif
|
||||||
|
install -m 664 -D source/extra//usr/share/doc/kmod-redhat-ionic/README.interface_naming $RPM_BUILD_ROOT//usr/share/doc/kmod-redhat-ionic/README.interface_naming
|
||||||
|
|
||||||
|
install -m 664 -D source/extra//usr/share/doc/kmod-redhat-ionic/examples/81-pensando-net.rules $RPM_BUILD_ROOT//usr/share/doc/kmod-redhat-ionic/examples/81-pensando-net.rules
|
||||||
|
|
||||||
|
install -m 664 -D source/extra//usr/share/doc/kmod-redhat-ionic/examples/10-ionic.link $RPM_BUILD_ROOT//usr/share/doc/kmod-redhat-ionic/examples/10-ionic.link
|
||||||
|
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Thu Jul 16 2020 Eugene Syromiatnikov <esyr@redhat.com> 4.18.0.210_dup8.2-2
|
||||||
|
- Bump release due to "Package build kmod-redhat-ionic-4.18.0.210_dup8.2-1.el8_2
|
||||||
|
kept gated because not onboarded to gating".
|
||||||
|
|
||||||
|
* Thu Jul 16 2020 Eugene Syromiatnikov <esyr@redhat.com> 4.18.0.210_dup8.2-1
|
||||||
|
- 2f22e260c6b75f2acb86bd91292dc8c66f56c481
|
||||||
|
- ionic kernel module for Driver Update Program
|
||||||
|
- Resolves: #bz1851940
|
Loading…
Reference in new issue