netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 0/3] qed*: Add support for pcie advanced error recovery.
@ 2020-04-21 14:52 Sudarsana Reddy Kalluru
  2020-04-21 14:52 ` [PATCH net-next 1/3] qed: Enable device error reporting capability Sudarsana Reddy Kalluru
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Sudarsana Reddy Kalluru @ 2020-04-21 14:52 UTC (permalink / raw)
  To: davem; +Cc: netdev, aelior, irusskikh, mkalderon

The patch series add qed/qede driver support for PCIe Advanced Error
Recovery (AER) support.
Patch (1) adds qed changes to enable device to send the error messages to
root port when detected.
Patch (2) adds changes to cache the VF count for a given PF.
Patch (3) adds qede support for handling the detected errors (AERs).

Sudarsana Reddy Kalluru (3):
  qed: Enable device error reporting capability.
  qede: Cache num configured VFs on a PF.
  qede: Add support for handling the pcie errors.

 drivers/net/ethernet/qlogic/qed/qed_main.c   |  9 +++
 drivers/net/ethernet/qlogic/qede/qede.h      |  2 +
 drivers/net/ethernet/qlogic/qede/qede_main.c | 83 +++++++++++++++++++++++++---
 3 files changed, 87 insertions(+), 7 deletions(-)

-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH net-next 1/3] qed: Enable device error reporting capability.
  2020-04-21 14:52 [PATCH net-next 0/3] qed*: Add support for pcie advanced error recovery Sudarsana Reddy Kalluru
@ 2020-04-21 14:52 ` Sudarsana Reddy Kalluru
  2020-04-21 14:52 ` [PATCH net-next 2/3] qede: Cache num configured VFs on a PF Sudarsana Reddy Kalluru
  2020-04-21 14:53 ` [PATCH net-next 3/3] qede: Add support for handling the pcie errors Sudarsana Reddy Kalluru
  2 siblings, 0 replies; 6+ messages in thread
From: Sudarsana Reddy Kalluru @ 2020-04-21 14:52 UTC (permalink / raw)
  To: davem; +Cc: netdev, aelior, irusskikh, mkalderon

The patch enables the device to send error messages to root port when
an error is detected.

Signed-off-by: Sudarsana Reddy Kalluru <skalluru@marvell.com>
Signed-off-by: Ariel Elior <aelior@marvell.com>
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
---
 drivers/net/ethernet/qlogic/qed/qed_main.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c
index 2c189c6..262b663 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_main.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
@@ -49,6 +49,7 @@
 #include <linux/qed/qed_if.h>
 #include <linux/qed/qed_ll2_if.h>
 #include <net/devlink.h>
+#include <linux/aer.h>
 
 #include "qed.h"
 #include "qed_sriov.h"
@@ -129,6 +130,8 @@ static void qed_free_pci(struct qed_dev *cdev)
 {
 	struct pci_dev *pdev = cdev->pdev;
 
+	pci_disable_pcie_error_reporting(pdev);
+
 	if (cdev->doorbells && cdev->db_size)
 		iounmap(cdev->doorbells);
 	if (cdev->regview)
@@ -231,6 +234,12 @@ static int qed_init_pci(struct qed_dev *cdev, struct pci_dev *pdev)
 		return -ENOMEM;
 	}
 
+	/* AER (Advanced Error reporting) configuration */
+	rc = pci_enable_pcie_error_reporting(pdev);
+	if (rc)
+		DP_VERBOSE(cdev, NETIF_MSG_DRV,
+			   "Failed to configure PCIe AER [%d]\n", rc);
+
 	return 0;
 
 err2:
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net-next 2/3] qede: Cache num configured VFs on a PF.
  2020-04-21 14:52 [PATCH net-next 0/3] qed*: Add support for pcie advanced error recovery Sudarsana Reddy Kalluru
  2020-04-21 14:52 ` [PATCH net-next 1/3] qed: Enable device error reporting capability Sudarsana Reddy Kalluru
@ 2020-04-21 14:52 ` Sudarsana Reddy Kalluru
  2020-04-21 18:30   ` Jakub Kicinski
  2020-04-21 14:53 ` [PATCH net-next 3/3] qede: Add support for handling the pcie errors Sudarsana Reddy Kalluru
  2 siblings, 1 reply; 6+ messages in thread
From: Sudarsana Reddy Kalluru @ 2020-04-21 14:52 UTC (permalink / raw)
  To: davem; +Cc: netdev, aelior, irusskikh, mkalderon

The patch add changes to cache the number of VFs configured on a PF.

Signed-off-by: Sudarsana Reddy Kalluru <skalluru@marvell.com>
Signed-off-by: Ariel Elior <aelior@marvell.com>
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
---
 drivers/net/ethernet/qlogic/qede/qede.h      |  1 +
 drivers/net/ethernet/qlogic/qede/qede_main.c | 15 +++++++++------
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qede/qede.h b/drivers/net/ethernet/qlogic/qede/qede.h
index 234c6f3..bf8b8ad 100644
--- a/drivers/net/ethernet/qlogic/qede/qede.h
+++ b/drivers/net/ethernet/qlogic/qede/qede.h
@@ -198,6 +198,7 @@ struct qede_dev {
 	struct net_device		*ndev;
 	struct pci_dev			*pdev;
 
+	int				num_vfs;
 	u32				dp_module;
 	u8				dp_level;
 
diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c
index 34fa391..9c4d9cd 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_main.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
@@ -190,12 +190,15 @@ static int qede_sriov_configure(struct pci_dev *pdev, int num_vfs_param)
 	rc = edev->ops->iov->configure(edev->cdev, num_vfs_param);
 
 	/* Enable/Disable Tx switching for PF */
-	if ((rc == num_vfs_param) && netif_running(edev->ndev) &&
-	    !qed_info->b_inter_pf_switch && qed_info->tx_switching) {
-		vport_params->vport_id = 0;
-		vport_params->update_tx_switching_flg = 1;
-		vport_params->tx_switching_flg = num_vfs_param ? 1 : 0;
-		edev->ops->vport_update(edev->cdev, vport_params);
+	if (rc == num_vfs_param) {
+		edev->num_vfs = rc;
+		if (netif_running(edev->ndev) &&
+		    !qed_info->b_inter_pf_switch && qed_info->tx_switching) {
+			vport_params->vport_id = 0;
+			vport_params->update_tx_switching_flg = 1;
+			vport_params->tx_switching_flg = num_vfs_param ? 1 : 0;
+			edev->ops->vport_update(edev->cdev, vport_params);
+		}
 	}
 
 	vfree(vport_params);
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net-next 3/3] qede: Add support for handling the pcie errors.
  2020-04-21 14:52 [PATCH net-next 0/3] qed*: Add support for pcie advanced error recovery Sudarsana Reddy Kalluru
  2020-04-21 14:52 ` [PATCH net-next 1/3] qed: Enable device error reporting capability Sudarsana Reddy Kalluru
  2020-04-21 14:52 ` [PATCH net-next 2/3] qede: Cache num configured VFs on a PF Sudarsana Reddy Kalluru
@ 2020-04-21 14:53 ` Sudarsana Reddy Kalluru
  2 siblings, 0 replies; 6+ messages in thread
From: Sudarsana Reddy Kalluru @ 2020-04-21 14:53 UTC (permalink / raw)
  To: davem; +Cc: netdev, aelior, irusskikh, mkalderon

The error recovery is handled by management firmware (MFW) with the help of
qed/qede drivers. Upon detecting the errors, driver informs MFW about this
event which in turn starts a recovery process. MFW sends ERROR_RECOVERY
notification to the driver which performs the required cleanup/recovery
from the driver side.

Signed-off-by: Sudarsana Reddy Kalluru <skalluru@marvell.com>
Signed-off-by: Ariel Elior <aelior@marvell.com>
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
---
 drivers/net/ethernet/qlogic/qede/qede.h      |  1 +
 drivers/net/ethernet/qlogic/qede/qede_main.c | 68 +++++++++++++++++++++++++++-
 2 files changed, 68 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/qlogic/qede/qede.h b/drivers/net/ethernet/qlogic/qede/qede.h
index bf8b8ad..bacc58f 100644
--- a/drivers/net/ethernet/qlogic/qede/qede.h
+++ b/drivers/net/ethernet/qlogic/qede/qede.h
@@ -486,6 +486,7 @@ struct qede_fastpath {
 
 #define QEDE_SP_RECOVERY		0
 #define QEDE_SP_RX_MODE			1
+#define QEDE_SP_AER			7
 
 #ifdef CONFIG_RFS_ACCEL
 int qede_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c
index 9c4d9cd..4adfe2f 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_main.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
@@ -60,6 +60,7 @@
 #include <net/ip6_checksum.h>
 #include <linux/bitops.h>
 #include <linux/vmalloc.h>
+#include <linux/aer.h>
 #include "qede.h"
 #include "qede_ptp.h"
 
@@ -124,6 +125,8 @@ enum qede_pci_private {
 MODULE_DEVICE_TABLE(pci, qede_pci_tbl);
 
 static int qede_probe(struct pci_dev *pdev, const struct pci_device_id *id);
+static pci_ers_result_t
+qede_io_error_detected(struct pci_dev *pdev, pci_channel_state_t state);
 
 #define TX_TIMEOUT		(5 * HZ)
 
@@ -206,6 +209,10 @@ static int qede_sriov_configure(struct pci_dev *pdev, int num_vfs_param)
 }
 #endif
 
+static const struct pci_error_handlers qede_err_handler = {
+	.error_detected = qede_io_error_detected,
+};
+
 static struct pci_driver qede_pci_driver = {
 	.name = "qede",
 	.id_table = qede_pci_tbl,
@@ -215,6 +222,7 @@ static int qede_sriov_configure(struct pci_dev *pdev, int num_vfs_param)
 #ifdef CONFIG_QED_SRIOV
 	.sriov_configure = qede_sriov_configure,
 #endif
+	.err_handler = &qede_err_handler,
 };
 
 static struct qed_eth_cb_ops qede_ll_ops = {
@@ -977,7 +985,8 @@ static void qede_sp_task(struct work_struct *work)
 		/* SRIOV must be disabled outside the lock to avoid a deadlock.
 		 * The recovery of the active VFs is currently not supported.
 		 */
-		qede_sriov_configure(edev->pdev, 0);
+		if (edev->num_vfs)
+			qede_sriov_configure(edev->pdev, 0);
 #endif
 		qede_lock(edev);
 		qede_recovery_handler(edev);
@@ -997,6 +1006,17 @@ static void qede_sp_task(struct work_struct *work)
 	}
 #endif
 	__qede_unlock(edev);
+
+	if (test_and_clear_bit(QEDE_SP_AER, &edev->sp_flags)) {
+#ifdef CONFIG_QED_SRIOV
+		/* SRIOV must be disabled outside the lock to avoid a deadlock.
+		 * The recovery of the active VFs is currently not supported.
+		 */
+		if (edev->num_vfs)
+			qede_sriov_configure(edev->pdev, 0);
+#endif
+		edev->ops->common->recovery_process(edev->cdev);
+	}
 }
 
 static void qede_update_pf_params(struct qed_dev *cdev)
@@ -2582,3 +2602,49 @@ static void qede_get_eth_tlv_data(void *dev, void *data)
 	etlv->num_txqs_full_set = true;
 	etlv->num_rxqs_full_set = true;
 }
+
+/**
+ * qede_io_error_detected - called when PCI error is detected
+ * @pdev: Pointer to PCI device
+ * @state: The current pci connection state
+ *
+ * This function is called after a PCI bus error affecting
+ * this device has been detected.
+ */
+static pci_ers_result_t
+qede_io_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
+{
+	struct net_device *dev = pci_get_drvdata(pdev);
+	struct qede_dev *edev = netdev_priv(dev);
+
+	if (!edev)
+		return PCI_ERS_RESULT_NONE;
+
+	DP_NOTICE(edev, "IO error detected [%d]\n", state);
+
+	__qede_lock(edev);
+	if (edev->state == QEDE_STATE_RECOVERY) {
+		DP_NOTICE(edev, "Device already in the recovery state\n");
+		__qede_unlock(edev);
+		return PCI_ERS_RESULT_NONE;
+	}
+
+	/* PF handles the recovery of its VFs */
+	if (IS_VF(edev)) {
+		DP_VERBOSE(edev, QED_MSG_IOV,
+			   "VF recovery is handled by its PF\n");
+		__qede_unlock(edev);
+		return PCI_ERS_RESULT_RECOVERED;
+	}
+
+	/* Close OS Tx */
+	netif_tx_disable(edev->ndev);
+	netif_carrier_off(edev->ndev);
+
+	set_bit(QEDE_SP_AER, &edev->sp_flags);
+	schedule_delayed_work(&edev->sp_task, 0);
+
+	__qede_unlock(edev);
+
+	return PCI_ERS_RESULT_CAN_RECOVER;
+}
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next 2/3] qede: Cache num configured VFs on a PF.
  2020-04-21 14:52 ` [PATCH net-next 2/3] qede: Cache num configured VFs on a PF Sudarsana Reddy Kalluru
@ 2020-04-21 18:30   ` Jakub Kicinski
  2020-04-22 11:49     ` Sudarsana Reddy Kalluru
  0 siblings, 1 reply; 6+ messages in thread
From: Jakub Kicinski @ 2020-04-21 18:30 UTC (permalink / raw)
  To: Sudarsana Reddy Kalluru; +Cc: davem, netdev, aelior, irusskikh, mkalderon

On Tue, 21 Apr 2020 07:52:59 -0700 Sudarsana Reddy Kalluru wrote:
> The patch add changes to cache the number of VFs configured on a PF.

Please use pci_num_vf() instead.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: [PATCH net-next 2/3] qede: Cache num configured VFs on a PF.
  2020-04-21 18:30   ` Jakub Kicinski
@ 2020-04-22 11:49     ` Sudarsana Reddy Kalluru
  0 siblings, 0 replies; 6+ messages in thread
From: Sudarsana Reddy Kalluru @ 2020-04-22 11:49 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: davem, netdev, Ariel Elior, Igor Russkikh, Michal Kalderon

> -----Original Message-----
> From: netdev-owner@vger.kernel.org <netdev-owner@vger.kernel.org> On
> Behalf Of Jakub Kicinski
> Sent: Wednesday, April 22, 2020 12:00 AM
> To: Sudarsana Reddy Kalluru <skalluru@marvell.com>
> Cc: davem@davemloft.net; netdev@vger.kernel.org; Ariel Elior
> <aelior@marvell.com>; Igor Russkikh <irusskikh@marvell.com>; Michal
> Kalderon <mkalderon@marvell.com>
> Subject: Re: [PATCH net-next 2/3] qede: Cache num configured VFs on a PF.
> 
> On Tue, 21 Apr 2020 07:52:59 -0700 Sudarsana Reddy Kalluru wrote:
> > The patch add changes to cache the number of VFs configured on a PF.
> 
> Please use pci_num_vf() instead.

Thanks for your review and inputs. Will use pci API and drop the current patch.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-04-22 11:49 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-21 14:52 [PATCH net-next 0/3] qed*: Add support for pcie advanced error recovery Sudarsana Reddy Kalluru
2020-04-21 14:52 ` [PATCH net-next 1/3] qed: Enable device error reporting capability Sudarsana Reddy Kalluru
2020-04-21 14:52 ` [PATCH net-next 2/3] qede: Cache num configured VFs on a PF Sudarsana Reddy Kalluru
2020-04-21 18:30   ` Jakub Kicinski
2020-04-22 11:49     ` Sudarsana Reddy Kalluru
2020-04-21 14:53 ` [PATCH net-next 3/3] qede: Add support for handling the pcie errors Sudarsana Reddy Kalluru

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).