All of lore.kernel.org
 help / color / mirror / Atom feed
From: ira.weiny@intel.com
To: Dan Williams <dan.j.williams@intel.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Alison Schofield <alison.schofield@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	linux-kernel@vger.kernel.org, linux-cxl@vger.kernel.org,
	linux-pci@vger.kernel.org
Subject: [PATCH V7 09/10] cxl/mem: Retry reading CDAT on failure
Date: Wed, 30 Mar 2022 16:59:19 -0700	[thread overview]
Message-ID: <20220330235920.2800929-10-ira.weiny@intel.com> (raw)
In-Reply-To: <20220330235920.2800929-1-ira.weiny@intel.com>

From: Ira Weiny <ira.weiny@intel.com>

The CDAT read may fail for a number of reasons but mainly it is possible
to get different parts of a valid state.  The checksum in the CDAT table
protects against this.

Now that the cdat data is validated issue a retries if the CDAT read
fails.  For now 5 retries are implemented.

Signed-off-by: Ira Weiny <ira.weiny@intel.com>

---
Changes from V6
	Move to pci.c
	Fix retries count
	Change to 5 retries

Changes from V5:
	New patch -- easy to push off or drop.
---
 drivers/cxl/pci.c | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/drivers/cxl/pci.c b/drivers/cxl/pci.c
index ddd6b705fd67..6205f4eba729 100644
--- a/drivers/cxl/pci.c
+++ b/drivers/cxl/pci.c
@@ -921,7 +921,7 @@ static void cxl_initialize_cdat_callbacks(struct cxl_dev_state *cxlds)
 	cxlds->cdat_read_table = cxl_cdat_read_table;
 }
 
-static int read_cdat_data(struct cxl_dev_state *cxlds)
+static int __read_cdat_data(struct cxl_dev_state *cxlds)
 {
 	struct device *dev = cxlds->dev;
 	size_t cdat_length;
@@ -943,6 +943,21 @@ static int read_cdat_data(struct cxl_dev_state *cxlds)
 	return ret;
 }
 
+static void read_cdat_data(struct cxl_dev_state *cxlds)
+{
+	int retries = 5;
+	int rc;
+
+	while (retries--) {
+		rc = __read_cdat_data(cxlds);
+		if (!rc)
+			break;
+		dev_err(cxlds->dev,
+			"CDAT data read error rc=%d (retries %d)\n",
+			rc, retries);
+	}
+}
+
 static int cxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 {
 	struct cxl_register_map map;
@@ -1016,9 +1031,7 @@ static int cxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	cxl_initialize_cdat_callbacks(cxlds);
 
 	/* Cache the data early to ensure is_visible() works */
-	rc = read_cdat_data(cxlds);
-	if (rc)
-		dev_err(&pdev->dev, "CDAT data read error (%d)\n", rc);
+	read_cdat_data(cxlds);
 
 	rc = cxl_dvsec_ranges(cxlds);
 	if (rc)
-- 
2.35.1


  parent reply	other threads:[~2022-03-31  0:00 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-30 23:59 [PATCH V7 00/10] CXL: Read CDAT and DSMAS data from the device ira.weiny
2022-03-30 23:59 ` [PATCH V7 01/10] PCI: Add vendor ID for the PCI SIG ira.weiny
2022-03-30 23:59 ` [PATCH V7 02/10] PCI: Replace magic constant for PCI Sig Vendor ID ira.weiny
2022-03-30 23:59 ` [PATCH V7 03/10] PCI: Create PCI library functions in support of DOE mailboxes ira.weiny
2022-03-31  5:50   ` Christoph Hellwig
2022-03-31 15:19     ` Ira Weiny
2022-04-02 14:48       ` Lukas Wunner
2022-04-05 23:22         ` Ira Weiny
2022-04-06 10:11           ` Jonathan Cameron
2022-04-06 21:23             ` Ira Weiny
2022-04-07 16:01               ` Bjorn Helgaas
2022-03-30 23:59 ` [PATCH V7 04/10] cxl/pci: Create auxiliary devices for each DOE mailbox ira.weiny
2022-04-29 15:33   ` Jonathan Cameron
2022-03-30 23:59 ` [PATCH V7 05/10] cxl/pci: Create DOE auxiliary driver ira.weiny
2022-03-30 23:59 ` [PATCH V7 06/10] cxl/pci: Find the DOE mailbox which supports CDAT ira.weiny
2022-03-30 23:59 ` [PATCH V7 07/10] cxl/mem: Read CDAT table ira.weiny
2022-03-30 23:59 ` [PATCH V7 08/10] cxl/cdat: Introduce cxl_cdat_valid() ira.weiny
2022-03-30 23:59 ` ira.weiny [this message]
2022-03-30 23:59 ` [PATCH V7 10/10] cxl/port: Parse out DSMAS data from CDAT table ira.weiny

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=20220330235920.2800929-10-ira.weiny@intel.com \
    --to=ira.weiny@intel.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=alison.schofield@intel.com \
    --cc=ben.widawsky@intel.com \
    --cc=bhelgaas@google.com \
    --cc=dan.j.williams@intel.com \
    --cc=linux-cxl@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=vishal.l.verma@intel.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 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.