From: Suresh Reddy <suresh.reddy@broadcom.com>
To: netdev@vger.kernel.org
Subject: [PATCH net-next 1/2] be2net: Collect the transmit queue data in Tx timeout
Date: Mon, 23 Jul 2018 10:25:23 -0400 [thread overview]
Message-ID: <20180723142524.24224-2-suresh.reddy@broadcom.com> (raw)
In-Reply-To: <20180723142524.24224-1-suresh.reddy@broadcom.com>
Driver dumps tx_queue, tx_compl, pending SKBs information in tx_timeout.
This debug data used to idenfiy the cause of the time out.
Also reset Lancer chip in tx_timeout.
Signed-off-by: Suresh Reddy <suresh.reddy@broadcom.com>
---
drivers/net/ethernet/emulex/benet/be_main.c | 80 ++++++++++++++++++++++++++++-
1 file changed, 79 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 05e4c0b..580cdec 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -1412,6 +1412,83 @@ static netdev_tx_t be_xmit(struct sk_buff *skb, struct net_device *netdev)
return NETDEV_TX_OK;
}
+static void be_tx_timeout(struct net_device *netdev)
+{
+ struct be_adapter *adapter = netdev_priv(netdev);
+ struct device *dev = &adapter->pdev->dev;
+ struct be_tx_obj *txo;
+ struct sk_buff *skb;
+ struct tcphdr *tcphdr;
+ struct udphdr *udphdr;
+ u32 *entry;
+ int status;
+ int i, j;
+
+ for_all_tx_queues(adapter, txo, i) {
+ dev_info(dev, "TXQ Dump: %d H: %d T: %d used: %d, qid: 0x%x\n",
+ i, txo->q.head, txo->q.tail,
+ atomic_read(&txo->q.used), txo->q.id);
+
+ entry = txo->q.dma_mem.va;
+ for (j = 0; j < TX_Q_LEN * 4; j += 4) {
+ if (entry[j] != 0 || entry[j + 1] != 0 ||
+ entry[j + 2] != 0 || entry[j + 3] != 0) {
+ dev_info(dev, "Entry %d 0x%x 0x%x 0x%x 0x%x\n",
+ j, entry[j], entry[j + 1],
+ entry[j + 2], entry[j + 3]);
+ }
+ }
+
+ entry = txo->cq.dma_mem.va;
+ dev_info(dev, "TXCQ Dump: %d H: %d T: %d used: %d\n",
+ i, txo->cq.head, txo->cq.tail,
+ atomic_read(&txo->cq.used));
+ for (j = 0; j < TX_CQ_LEN * 4; j += 4) {
+ if (entry[j] != 0 || entry[j + 1] != 0 ||
+ entry[j + 2] != 0 || entry[j + 3] != 0) {
+ dev_info(dev, "Entry %d 0x%x 0x%x 0x%x 0x%x\n",
+ j, entry[j], entry[j + 1],
+ entry[j + 2], entry[j + 3]);
+ }
+ }
+
+ for (j = 0; j < TX_Q_LEN; j++) {
+ if (txo->sent_skb_list[j]) {
+ skb = txo->sent_skb_list[j];
+ if (ip_hdr(skb)->protocol == IPPROTO_TCP) {
+ tcphdr = tcp_hdr(skb);
+ dev_info(dev, "TCP source port %d\n",
+ ntohs(tcphdr->source));
+ dev_info(dev, "TCP dest port %d\n",
+ ntohs(tcphdr->dest));
+ dev_info(dev, "TCP seqence num %d\n",
+ ntohs(tcphdr->seq));
+ dev_info(dev, "TCP ack_seq %d\n",
+ ntohs(tcphdr->ack_seq));
+ } else if (ip_hdr(skb)->protocol ==
+ IPPROTO_UDP) {
+ udphdr = udp_hdr(skb);
+ dev_info(dev, "UDP source port %d\n",
+ ntohs(udphdr->source));
+ dev_info(dev, "UDP dest port %d\n",
+ ntohs(udphdr->dest));
+ }
+ dev_info(dev, "skb[%d] %p len %d proto 0x%x\n",
+ j, skb, skb->len, skb->protocol);
+ }
+ }
+ }
+
+ if (lancer_chip(adapter)) {
+ dev_info(dev, "Initiating reset due to tx timeout\n");
+ dev_info(dev, "Resetting adapter\n");
+ status = lancer_physdev_ctrl(adapter,
+ PHYSDEV_CONTROL_FW_RESET_MASK);
+ if (status)
+ dev_err(dev, "Reset failed .. Reboot server\n");
+ }
+}
+
static inline bool be_in_all_promisc(struct be_adapter *adapter)
{
return (adapter->if_flags & BE_IF_FLAGS_ALL_PROMISCUOUS) ==
@@ -3274,7 +3351,7 @@ void be_detect_error(struct be_adapter *adapter)
/* Do not log error messages if its a FW reset */
if (sliport_err1 == SLIPORT_ERROR_FW_RESET1 &&
sliport_err2 == SLIPORT_ERROR_FW_RESET2) {
- dev_info(dev, "Firmware update in progress\n");
+ dev_info(dev, "Reset is in progress\n");
} else {
dev_err(dev, "Error detected in the card\n");
dev_err(dev, "ERR: sliport status 0x%x\n",
@@ -5218,6 +5295,7 @@ static const struct net_device_ops be_netdev_ops = {
.ndo_get_vf_config = be_get_vf_config,
.ndo_set_vf_link_state = be_set_vf_link_state,
.ndo_set_vf_spoofchk = be_set_vf_spoofchk,
+ .ndo_tx_timeout = be_tx_timeout,
#ifdef CONFIG_NET_POLL_CONTROLLER
.ndo_poll_controller = be_netpoll,
#endif
--
2.10.1
next prev parent reply other threads:[~2018-07-23 15:32 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <Suresh.Reddy@broadcom.com>
2017-05-25 2:24 ` [PATCH net-next 0/2] be2net: patch-set Suresh Reddy
2017-05-25 2:24 ` [PATCH net-next 1/2] be2net: Fix UE detection logic for BE3 Suresh Reddy
2017-05-25 2:24 ` [PATCH net-next 2/2] be2net: Update the driver version to 11.4.0.0 Suresh Reddy
2017-05-25 18:45 ` [PATCH net-next 0/2] be2net: patch-set David Miller
2017-09-13 15:12 ` [PATCH net] be2net: fix TSO6/GSO issue causing TX-stall on Lancer/BEx Suresh Reddy
2017-09-13 16:33 ` David Miller
2018-02-06 13:52 ` [PATCH net 0/2] be2net: patch-set Suresh Reddy
2018-02-06 13:52 ` [PATCH net 1/2] be2net: Fix HW stall issue in Lancer Suresh Reddy
2018-02-06 13:52 ` [PATCH net 2/2] be2net: Handle transmit completion errors " Suresh Reddy
2018-02-06 16:48 ` [PATCH net 0/2] be2net: patch-set David Miller
2018-05-28 5:26 ` [PATCH net] be2net: Fix error detection logic for BE3 Suresh Reddy
2018-05-29 14:58 ` David Miller
2018-07-23 14:25 ` [PATCH net-next 0/2] be2net: patch-set Suresh Reddy
2018-07-23 14:25 ` Suresh Reddy [this message]
2018-07-23 18:23 ` [PATCH net-next 1/2] be2net: Collect the transmit queue data in Tx timeout David Miller
2018-07-25 12:44 ` Suresh Kumar Reddy Reddygari
2018-07-30 10:53 ` Suresh Kumar Reddy Reddygari
2018-07-30 16:17 ` David Miller
2018-07-23 14:25 ` [PATCH net-next 2/2] be2net: Update the driver version to 12.0.0.0 Suresh Reddy
2018-07-31 15:39 ` [PATCH V2 net-next 0/2] be2net: patch-set Suresh Reddy
2018-07-31 15:39 ` [PATCH V2 net-next 1/2] be2net: gather debug info and reset adapter (only for Lancer) on a tx-timeout Suresh Reddy
2018-07-31 15:39 ` [PATCH V2 net-next 2/2] be2net: Update the driver version to 12.0.0.0 Suresh Reddy
2018-08-01 16:39 ` [PATCH V2 net-next 0/2] be2net: patch-set David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180723142524.24224-2-suresh.reddy@broadcom.com \
--to=suresh.reddy@broadcom.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.