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