@@ -312,7 +312,8 @@ static const struct file_operations cxl_memdev_fops = {
.llseek = noop_llseek,
};
-static int read_cdat_data(struct cxl_memdev *cxlmd, struct cxl_dev_state *cxlds)
+static int __read_cdat_data(struct cxl_memdev *cxlmd,
+ struct cxl_dev_state *cxlds)
{
struct device *dev = &cxlmd->dev;
size_t cdat_length;
@@ -327,6 +328,20 @@ static int read_cdat_data(struct cxl_memdev *cxlmd, struct cxl_dev_state *cxlds)
return cxl_mem_cdat_read_table(cxlds, &cxlmd->cdat);
}
+static int read_cdat_data(struct cxl_memdev *cxlmd,
+ struct cxl_dev_state *cxlds)
+{
+ int retries = 2;
+ int rc;
+
+ while (--retries) {
+ rc = __read_cdat_data(cxlmd, cxlds);
+ if (!rc)
+ break;
+ }
+ return rc;
+}
+
struct cxl_memdev *devm_cxl_add_memdev(struct cxl_dev_state *cxlds)
{
struct cxl_memdev *cxlmd;