From: Rajat Jain <rajatja@google.com>
To: Bjorn Helgaas <bhelgaas@google.com>,
Jonathan Corbet <corbet@lwn.net>,
Philippe Ombredanne <pombredanne@nexb.com>,
Kate Stewart <kstewart@linuxfoundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Frederick Lawler <fred@fredlawl.com>,
Oza Pawandeep <poza@codeaurora.org>,
Keith Busch <keith.busch@intel.com>,
Alexandru Gagniuc <mr.nuke.me@gmail.com>,
Thomas Tai <thomas.tai@oracle.com>,
"Steven Rostedt (VMware)" <rostedt@goodmis.org>,
linux-pci@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, Jes Sorensen <jsorensen@fb.com>,
Kyle McMartin <jkkm@fb.com>,
rajatxjain@gmail.com, helgaas@kernel.org
Cc: Rajat Jain <rajatja@google.com>
Subject: [PATCH v5 1/5] PCI/AER: Define and allocate aer_stats structure for AER capable devices
Date: Wed, 20 Jun 2018 16:41:43 -0700 [thread overview]
Message-ID: <20180620234147.48438-1-rajatja@google.com> (raw)
In-Reply-To: <20180522222805.80314-1-rajatja@google.com>
Define a structure to hold the AER statistics. There are 2 groups
of statistics: dev_* counters that are to be collected for all AER
capable devices and rootport_* counters that are collected for all
(AER capable) rootports only. Allocate and free this structure when
device is added or released (thus counters survive the lifetime of the
device).
Signed-off-by: Rajat Jain <rajatja@google.com>
---
v5: Same as v4
v4: Same as v3
v3: Merge everything in aer.c
drivers/pci/pcie/aer.c | 60 ++++++++++++++++++++++++++++++++++++++++++
drivers/pci/probe.c | 1 +
include/linux/pci.h | 3 +++
3 files changed, 64 insertions(+)
diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c
index a2e88386af28..f9fa994b6c33 100644
--- a/drivers/pci/pcie/aer.c
+++ b/drivers/pci/pcie/aer.c
@@ -33,6 +33,9 @@
#define AER_ERROR_SOURCES_MAX 100
#define AER_MAX_MULTI_ERR_DEVICES 5 /* Not likely to have more */
+#define AER_MAX_TYPEOF_CORRECTABLE_ERRS 16 /* as per PCI_ERR_COR_STATUS */
+#define AER_MAX_TYPEOF_UNCORRECTABLE_ERRS 26 /* as per PCI_ERR_UNCOR_STATUS*/
+
struct aer_err_info {
struct pci_dev *dev[AER_MAX_MULTI_ERR_DEVICES];
int error_dev_num;
@@ -76,6 +79,40 @@ struct aer_rpc {
*/
};
+/* AER stats for the device */
+struct aer_stats {
+
+ /*
+ * Fields for all AER capable devices. They indicate the errors
+ * "as seen by this device". Note that this may mean that if an
+ * end point is causing problems, the AER counters may increment
+ * at its link partner (e.g. root port) because the errors will be
+ * "seen" by the link partner and not the the problematic end point
+ * itself (which may report all counters as 0 as it never saw any
+ * problems).
+ */
+ /* Individual counters for different type of correctable errors */
+ u64 dev_cor_errs[AER_MAX_TYPEOF_CORRECTABLE_ERRS];
+ /* Individual counters for different type of uncorrectable errors */
+ u64 dev_uncor_errs[AER_MAX_TYPEOF_UNCORRECTABLE_ERRS];
+ /* Total number of correctable errors seen by this device */
+ u64 dev_total_cor_errs;
+ /* Total number of fatal uncorrectable errors seen by this device */
+ u64 dev_total_fatal_errs;
+ /* Total number of fatal uncorrectable errors seen by this device */
+ u64 dev_total_nonfatal_errs;
+
+ /*
+ * Fields for Root ports only, these indicate the total number of
+ * ERR_COR, ERR_FATAL, and ERR_NONFATAL messages received by the
+ * rootport, INCLUDING the ones that are generated internally (by
+ * the rootport itself)
+ */
+ u64 rootport_total_cor_errs;
+ u64 rootport_total_fatal_errs;
+ u64 rootport_total_nonfatal_errs;
+};
+
#define AER_LOG_TLP_MASKS (PCI_ERR_UNC_POISON_TLP| \
PCI_ERR_UNC_ECRC| \
PCI_ERR_UNC_UNSUP| \
@@ -402,12 +439,35 @@ int pci_cleanup_aer_error_status_regs(struct pci_dev *dev)
return 0;
}
+static int pci_aer_stats_init(struct pci_dev *pdev)
+{
+ pdev->aer_stats = kzalloc(sizeof(struct aer_stats), GFP_KERNEL);
+ if (!pdev->aer_stats) {
+ dev_err(&pdev->dev, "No memory for aer_stats\n");
+ return -ENOMEM;
+ }
+ return 0;
+}
+
+static void pci_aer_stats_exit(struct pci_dev *pdev)
+{
+ kfree(pdev->aer_stats);
+ pdev->aer_stats = NULL;
+}
+
int pci_aer_init(struct pci_dev *dev)
{
dev->aer_cap = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR);
+ if (!dev->aer_cap || pci_aer_stats_init(dev))
+ return -EIO;
return pci_cleanup_aer_error_status_regs(dev);
}
+void pci_aer_exit(struct pci_dev *dev)
+{
+ pci_aer_stats_exit(dev);
+}
+
#define AER_AGENT_RECEIVER 0
#define AER_AGENT_REQUESTER 1
#define AER_AGENT_COMPLETER 2
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index ac876e32de4b..48edd0c9e4bc 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -2064,6 +2064,7 @@ static void pci_configure_device(struct pci_dev *dev)
static void pci_release_capabilities(struct pci_dev *dev)
{
+ pci_aer_exit(dev);
pci_vpd_release(dev);
pci_iov_release(dev);
pci_free_cap_save_buffers(dev);
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 340029b2fb38..8d59c6c19a19 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -299,6 +299,7 @@ struct pci_dev {
u8 hdr_type; /* PCI header type (`multi' flag masked out) */
#ifdef CONFIG_PCIEAER
u16 aer_cap; /* AER capability offset */
+ struct aer_stats *aer_stats; /* AER stats for this device */
#endif
u8 pcie_cap; /* PCIe capability offset */
u8 msi_cap; /* MSI capability offset */
@@ -1471,10 +1472,12 @@ static inline bool pcie_aspm_support_enabled(void) { return false; }
void pci_no_aer(void);
bool pci_aer_available(void);
int pci_aer_init(struct pci_dev *dev);
+void pci_aer_exit(struct pci_dev *dev);
#else
static inline void pci_no_aer(void) { }
static inline bool pci_aer_available(void) { return false; }
static inline int pci_aer_init(struct pci_dev *d) { return -ENODEV; }
+static inline void pci_aer_exit(struct pci_dev *d) { }
#endif
#ifdef CONFIG_PCIE_ECRC
--
2.18.0.rc1.244.gcf134e6275-goog
next prev parent reply other threads:[~2018-06-20 23:42 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-22 22:28 [PATCH 0/5] Expose PCIe AER stats via sysfs Rajat Jain
2018-05-22 22:28 ` [PATCH 1/5] PCI/AER: Define and allocate aer_stats structure for AER capable devices Rajat Jain
2018-05-23 8:27 ` Greg Kroah-Hartman
2018-05-23 14:20 ` Jes Sorensen
2018-05-23 14:26 ` Alex G.
2018-05-23 14:28 ` Jes Sorensen
2018-05-23 14:26 ` Matthew Wilcox
2018-05-23 14:32 ` Jes Sorensen
2018-05-23 14:33 ` Alex G.
2018-05-23 14:46 ` Steven Rostedt
2018-05-22 22:28 ` [PATCH 2/5] PCI/AER: Add sysfs stats " Rajat Jain
2018-05-22 22:50 ` Alex G.
2018-05-22 23:27 ` Rajat Jain
2018-05-22 23:30 ` Sinan Kaya
2018-05-23 8:22 ` Greg Kroah-Hartman
2018-05-23 8:24 ` Greg Kroah-Hartman
2018-05-22 22:28 ` [PATCH 3/5] PCP/AER: Add sysfs attributes to provide breakdown of AERs Rajat Jain
2018-05-23 8:25 ` Greg Kroah-Hartman
2018-05-22 22:28 ` [PATCH 4/5] PCI/AER: Add sysfs attributes for rootport cumulative stats Rajat Jain
2018-05-22 22:28 ` [PATCH 5/5] Documentation/PCI: Add details of PCI AER statistics Rajat Jain
2018-05-22 22:52 ` Alex G.
2018-05-22 23:18 ` Rajat Jain
2018-05-23 8:23 ` Greg Kroah-Hartman
2018-05-23 17:58 ` [PATCH v2 0/5] Expose PCIe AER stats via sysfs Rajat Jain
2018-05-23 17:58 ` [PATCH v2 1/5] PCI/AER: Define and allocate aer_stats structure for AER capable devices Rajat Jain
2018-05-24 6:08 ` Greg Kroah-Hartman
2018-05-23 17:58 ` [PATCH v2 2/5] PCI/AER: Add sysfs stats " Rajat Jain
2018-05-23 17:58 ` [PATCH v2 3/5] PCI/AER: Add sysfs attributes to provide breakdown of AERs Rajat Jain
2018-05-23 17:58 ` [PATCH v2 4/5] PCI/AER: Add sysfs attributes for rootport cumulative stats Rajat Jain
2018-05-23 17:58 ` [PATCH v2 5/5] Documentation/ABI: Add details of PCI AER statistics Rajat Jain
2018-06-17 5:24 ` poza
2018-06-19 0:11 ` Rajat Jain
2018-06-19 0:32 ` Rajat Jain
2018-06-19 6:03 ` poza
2018-06-19 16:31 ` Rajat Jain
2018-06-21 9:19 ` poza
2018-06-22 0:45 ` Rajat Jain
2018-06-19 22:16 ` [PATCH v2 0/5] Expose PCIe AER stats via sysfs Bjorn Helgaas
2018-06-19 22:17 ` Rajat Jain
2018-06-19 22:20 ` Alex G.
2018-06-19 22:25 ` Steven Rostedt
2018-06-19 22:29 ` Alex G.
2018-06-20 1:12 ` [PATCH v3 1/5] PCI/AER: Define and allocate aer_stats structure for AER capable devices Rajat Jain
2018-06-20 1:12 ` [PATCH v3 2/5] PCI/AER: Add sysfs stats " Rajat Jain
2018-06-20 1:12 ` [PATCH v3 3/5] PCI/AER: Add sysfs attributes to provide breakdown of AERs Rajat Jain
2018-06-20 1:12 ` [PATCH v3 4/5] PCI/AER: Add sysfs attributes for rootport cumulative stats Rajat Jain
2018-06-20 3:13 ` kbuild test robot
2018-06-20 1:12 ` [PATCH v3 5/5] Documentation/ABI: Add details of PCI AER statistics Rajat Jain
2018-06-20 23:28 ` [PATCH v4 1/5] PCI/AER: Define and allocate aer_stats structure for AER capable devices Rajat Jain
2018-06-20 23:28 ` [PATCH v4 2/5] PCI/AER: Add sysfs stats " Rajat Jain
2018-06-20 23:41 ` Rajat Jain [this message]
2018-06-20 23:41 ` [PATCH v5 " Rajat Jain
2018-06-20 23:41 ` [PATCH v5 3/5] PCI/AER: Add sysfs attributes to provide breakdown of AERs Rajat Jain
2018-06-21 18:48 ` Bjorn Helgaas
2018-06-21 21:25 ` Rajat Jain
2018-06-22 16:38 ` Tyler Baicar
2018-06-22 17:27 ` Bjorn Helgaas
2018-06-20 23:41 ` [PATCH v5 4/5] PCI/AER: Add sysfs attributes for rootport cumulative stats Rajat Jain
2018-06-20 23:41 ` [PATCH v5 5/5] Documentation/ABI: Add details of PCI AER statistics Rajat Jain
2018-06-21 13:17 ` [PATCH v5 1/5] PCI/AER: Define and allocate aer_stats structure for AER capable devices Bjorn Helgaas
2018-06-21 20:41 ` Rajat Jain
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=20180620234147.48438-1-rajatja@google.com \
--to=rajatja@google.com \
--cc=bhelgaas@google.com \
--cc=corbet@lwn.net \
--cc=fred@fredlawl.com \
--cc=gregkh@linuxfoundation.org \
--cc=helgaas@kernel.org \
--cc=jkkm@fb.com \
--cc=jsorensen@fb.com \
--cc=keith.busch@intel.com \
--cc=kstewart@linuxfoundation.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=mr.nuke.me@gmail.com \
--cc=pombredanne@nexb.com \
--cc=poza@codeaurora.org \
--cc=rajatxjain@gmail.com \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=thomas.tai@oracle.com \
/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 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).