anitazha / rpms / ndctl

Forked from rpms/ndctl 2 years ago
Clone

Blame 0070-ndctl-test-Prepare-for-BLK-aperture-support-removal.patch

Jeff Moyer 2c91dc
From e423b467e10e3405e6e09260b7669e7022b5f5f7 Mon Sep 17 00:00:00 2001
Jeff Moyer 2c91dc
From: Dan Williams <dan.j.williams@intel.com>
Jeff Moyer 2c91dc
Date: Wed, 5 Jan 2022 13:31:50 -0800
Jeff Moyer 2c91dc
Subject: [PATCH 070/217] ndctl/test: Prepare for BLK-aperture support removal
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
The kernel is dropping its support for the BLK-aperture access method. The
Jeff Moyer 2c91dc
primary side effect of this for nfit_test is that NVDIMM namespace labeling
Jeff Moyer 2c91dc
will not be enabled by default. Update the unit tests to initialize the
Jeff Moyer 2c91dc
label index area in this scenario.
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
Link: https://lore.kernel.org/r/164141830999.3990253.5021445352398348657.stgit@dwillia2-desk3.amr.corp.intel.com
Jeff Moyer 2c91dc
Tested-by: Alison Schofield <alison.schofield@intel.com>
Jeff Moyer 2c91dc
Tested-by: Vaibhav Jain <vaibhav@linux.ibm.com>
Jeff Moyer 2c91dc
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Jeff Moyer 2c91dc
Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
Jeff Moyer 2c91dc
---
Jeff Moyer 2c91dc
 test/core.c     | 31 ++++++++++++++++++++++++++++---
Jeff Moyer 2c91dc
 test/libndctl.c | 49 +++++++++++++++++++++++++++++++++++--------------
Jeff Moyer 2c91dc
 2 files changed, 63 insertions(+), 17 deletions(-)
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
diff --git a/test/core.c b/test/core.c
Jeff Moyer 2c91dc
index 2b03aa9..93e1dae 100644
Jeff Moyer 2c91dc
--- a/test/core.c
Jeff Moyer 2c91dc
+++ b/test/core.c
Jeff Moyer 2c91dc
@@ -261,8 +261,8 @@ retry:
Jeff Moyer 2c91dc
 		ndctl_bus_foreach(nd_ctx, bus) {
Jeff Moyer 2c91dc
 			struct ndctl_region *region;
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
-			if (strncmp(ndctl_bus_get_provider(bus),
Jeff Moyer 2c91dc
-						"nfit_test", 9) != 0)
Jeff Moyer 2c91dc
+			if (strcmp(ndctl_bus_get_provider(bus),
Jeff Moyer 2c91dc
+				   "nfit_test.0") != 0)
Jeff Moyer 2c91dc
 				continue;
Jeff Moyer 2c91dc
 			ndctl_region_foreach(bus, region)
Jeff Moyer 2c91dc
 				ndctl_region_disable_invalidate(region);
Jeff Moyer 2c91dc
@@ -280,5 +280,30 @@ retry:
Jeff Moyer 2c91dc
 			NULL, NULL, NULL, NULL);
Jeff Moyer 2c91dc
 	if (rc)
Jeff Moyer 2c91dc
 		kmod_unref(*ctx);
Jeff Moyer 2c91dc
-	return rc;
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+	if (!nd_ctx)
Jeff Moyer 2c91dc
+		return rc;
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+	ndctl_bus_foreach (nd_ctx, bus) {
Jeff Moyer 2c91dc
+		struct ndctl_region *region;
Jeff Moyer 2c91dc
+		struct ndctl_dimm *dimm;
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+		if (strcmp(ndctl_bus_get_provider(bus), "nfit_test.0") != 0)
Jeff Moyer 2c91dc
+			continue;
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+		ndctl_region_foreach (bus, region)
Jeff Moyer 2c91dc
+			ndctl_region_disable_invalidate(region);
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+		ndctl_dimm_foreach (bus, dimm) {
Jeff Moyer 2c91dc
+			ndctl_dimm_read_label_index(dimm);
Jeff Moyer 2c91dc
+			ndctl_dimm_init_labels(dimm, NDCTL_NS_VERSION_1_2);
Jeff Moyer 2c91dc
+			ndctl_dimm_disable(dimm);
Jeff Moyer 2c91dc
+			ndctl_dimm_enable(dimm);
Jeff Moyer 2c91dc
+		}
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+		ndctl_region_foreach (bus, region)
Jeff Moyer 2c91dc
+			ndctl_region_enable(region);
Jeff Moyer 2c91dc
+	}
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+	return 0;
Jeff Moyer 2c91dc
 }
Jeff Moyer 2c91dc
diff --git a/test/libndctl.c b/test/libndctl.c
Jeff Moyer 2c91dc
index d9b50f4..c0e4b4c 100644
Jeff Moyer 2c91dc
--- a/test/libndctl.c
Jeff Moyer 2c91dc
+++ b/test/libndctl.c
Jeff Moyer 2c91dc
@@ -2587,17 +2587,41 @@ static int check_dimms(struct ndctl_bus *bus, struct dimm *dimms, int n,
Jeff Moyer 2c91dc
 	return 0;
Jeff Moyer 2c91dc
 }
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
-static void reset_bus(struct ndctl_bus *bus)
Jeff Moyer 2c91dc
+enum dimm_reset {
Jeff Moyer 2c91dc
+	DIMM_INIT,
Jeff Moyer 2c91dc
+	DIMM_ZERO,
Jeff Moyer 2c91dc
+};
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+static int reset_dimms(struct ndctl_bus *bus, enum dimm_reset reset)
Jeff Moyer 2c91dc
 {
Jeff Moyer 2c91dc
-	struct ndctl_region *region;
Jeff Moyer 2c91dc
 	struct ndctl_dimm *dimm;
Jeff Moyer 2c91dc
+	int rc = 0;
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+	ndctl_dimm_foreach(bus, dimm) {
Jeff Moyer 2c91dc
+		if (reset == DIMM_ZERO)
Jeff Moyer 2c91dc
+			ndctl_dimm_zero_labels(dimm);
Jeff Moyer 2c91dc
+		else {
Jeff Moyer 2c91dc
+			ndctl_dimm_read_label_index(dimm);
Jeff Moyer 2c91dc
+			ndctl_dimm_init_labels(dimm, NDCTL_NS_VERSION_1_2);
Jeff Moyer 2c91dc
+		}
Jeff Moyer 2c91dc
+		ndctl_dimm_disable(dimm);
Jeff Moyer 2c91dc
+		rc = ndctl_dimm_enable(dimm);
Jeff Moyer 2c91dc
+		if (rc)
Jeff Moyer 2c91dc
+			break;
Jeff Moyer 2c91dc
+	}
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+	return rc;
Jeff Moyer 2c91dc
+}
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+static void reset_bus(struct ndctl_bus *bus, enum dimm_reset reset)
Jeff Moyer 2c91dc
+{
Jeff Moyer 2c91dc
+	struct ndctl_region *region;
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
 	/* disable all regions so that set_config_data commands are permitted */
Jeff Moyer 2c91dc
 	ndctl_region_foreach(bus, region)
Jeff Moyer 2c91dc
 		ndctl_region_disable_invalidate(region);
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
-	ndctl_dimm_foreach(bus, dimm)
Jeff Moyer 2c91dc
-		ndctl_dimm_zero_labels(dimm);
Jeff Moyer 2c91dc
+	reset_dimms(bus, reset);
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
 	/* set regions back to their default state */
Jeff Moyer 2c91dc
 	ndctl_region_foreach(bus, region)
Jeff Moyer 2c91dc
@@ -2608,7 +2632,6 @@ static int do_test0(struct ndctl_ctx *ctx, struct ndctl_test *test)
Jeff Moyer 2c91dc
 {
Jeff Moyer 2c91dc
 	struct ndctl_bus *bus = ndctl_bus_get_by_provider(ctx, NFIT_PROVIDER0);
Jeff Moyer 2c91dc
 	struct ndctl_region *region;
Jeff Moyer 2c91dc
-	struct ndctl_dimm *dimm;
Jeff Moyer 2c91dc
 	int rc;
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
 	if (!bus)
Jeff Moyer 2c91dc
@@ -2625,13 +2648,10 @@ static int do_test0(struct ndctl_ctx *ctx, struct ndctl_test *test)
Jeff Moyer 2c91dc
 	if (rc)
Jeff Moyer 2c91dc
 		return rc;
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
-	ndctl_dimm_foreach(bus, dimm) {
Jeff Moyer 2c91dc
-		rc = ndctl_dimm_zero_labels(dimm);
Jeff Moyer 2c91dc
-		if (rc < 0) {
Jeff Moyer 2c91dc
-			fprintf(stderr, "failed to zero %s\n",
Jeff Moyer 2c91dc
-					ndctl_dimm_get_devname(dimm));
Jeff Moyer 2c91dc
-			return rc;
Jeff Moyer 2c91dc
-		}
Jeff Moyer 2c91dc
+	rc = reset_dimms(bus, DIMM_INIT);
Jeff Moyer 2c91dc
+	if (rc < 0) {
Jeff Moyer 2c91dc
+		fprintf(stderr, "failed to reset dimms\n");
Jeff Moyer 2c91dc
+		return rc;
Jeff Moyer 2c91dc
 	}
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
 	/*
Jeff Moyer 2c91dc
@@ -2649,14 +2669,14 @@ static int do_test0(struct ndctl_ctx *ctx, struct ndctl_test *test)
Jeff Moyer 2c91dc
 		rc = check_regions(bus, regions0, ARRAY_SIZE(regions0), DAX);
Jeff Moyer 2c91dc
 		if (rc)
Jeff Moyer 2c91dc
 			return rc;
Jeff Moyer 2c91dc
-		reset_bus(bus);
Jeff Moyer 2c91dc
+		reset_bus(bus, DIMM_INIT);
Jeff Moyer 2c91dc
 	}
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
 	if (ndctl_test_attempt(test, KERNEL_VERSION(4, 8, 0))) {
Jeff Moyer 2c91dc
 		rc = check_regions(bus, regions0, ARRAY_SIZE(regions0), PFN);
Jeff Moyer 2c91dc
 		if (rc)
Jeff Moyer 2c91dc
 			return rc;
Jeff Moyer 2c91dc
-		reset_bus(bus);
Jeff Moyer 2c91dc
+		reset_bus(bus, DIMM_INIT);
Jeff Moyer 2c91dc
 	}
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
 	return check_regions(bus, regions0, ARRAY_SIZE(regions0), BTT);
Jeff Moyer 2c91dc
@@ -2671,6 +2691,7 @@ static int do_test1(struct ndctl_ctx *ctx, struct ndctl_test *test)
Jeff Moyer 2c91dc
 		return -ENXIO;
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
 	ndctl_bus_wait_probe(bus);
Jeff Moyer 2c91dc
+	reset_bus(bus, DIMM_ZERO);
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
 	/*
Jeff Moyer 2c91dc
 	 * Starting with v4.10 the dimm on nfit_test.1 gets a unique
Jeff Moyer 2c91dc
-- 
Jeff Moyer 2c91dc
2.27.0
Jeff Moyer 2c91dc