The ndtest/papr dsm don't have the smart threshold payloads defined
and various smart fields like media/ctrl temperatures, spares etc.

Test only whats relevant and disable/skip the rest.

Signed-off-by: Shivaprasad G Bhat <[email protected]>
Signed-off-by: Vaibhav Jain <[email protected]>

---

Depends on the kernel patch -
https://patchwork.kernel.org/project/linux-nvdimm/patch/165027233876.3035289.4353747702027907365.st...@lep8c.aus.stglabs.ibm.com/

Changelog:

Since v2:
Link: 
https://patchwork.kernel.org/project/linux-nvdimm/patch/163102901146.260256.6712219128280188987.stgit@99912bbcb4c7/
* Split the patch into libndctl test specific changes.
* Rebased to use the global ndctl_test_family variable

Since v1:
Link: 
https://patchwork.kernel.org/project/linux-nvdimm/patch/162737350565.3944327.6662473656483436466.st...@lep8c.aus.stglabs.ibm.com/
* Updated the commit message description

 test/libndctl.c   |   45 +++++++++++++++++++++++++++++++++++++++++++++
 test/skip_PAPR.js |    3 +--
 2 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/test/libndctl.c b/test/libndctl.c
index a70c1ed7..15c47211 100644
--- a/test/libndctl.c
+++ b/test/libndctl.c
@@ -2075,6 +2075,46 @@ struct smart {
                     life_used, shutdown_state, shutdown_count, vendor_size;
 };
 
+static int check_smart_ndtest(struct ndctl_bus *bus, struct ndctl_dimm *dimm,
+                       struct check_cmd *check)
+{
+       static const struct smart smart_data = {
+               .flags = ND_SMART_HEALTH_VALID | ND_SMART_SHUTDOWN_VALID
+                       | ND_SMART_SHUTDOWN_COUNT_VALID | ND_SMART_USED_VALID,
+               .health = ND_SMART_NON_CRITICAL_HEALTH,
+               .life_used = 5,
+               .shutdown_state = 0,
+               .shutdown_count = 42,
+               .vendor_size = 0,
+       };
+       struct ndctl_cmd *cmd = ndctl_dimm_cmd_new_smart(dimm);
+       int rc;
+
+       if (!cmd) {
+               fprintf(stderr, "%s: dimm: %#x failed to create cmd\n",
+                               __func__, ndctl_dimm_get_handle(dimm));
+               return -ENXIO;
+       }
+
+       rc = ndctl_cmd_submit(cmd);
+       if (rc < 0) {
+               fprintf(stderr, "%s: dimm: %#x failed to submit cmd: %d\n",
+                       __func__, ndctl_dimm_get_handle(dimm), rc);
+               ndctl_cmd_unref(cmd);
+               return rc;
+       }
+
+       __check_smart(dimm, cmd, flags, -1);
+       __check_smart(dimm, cmd, health, -1);
+       __check_smart(dimm, cmd, life_used, -1);
+       __check_smart(dimm, cmd, shutdown_state, -1);
+       __check_smart(dimm, cmd, shutdown_count, -1);
+       __check_smart(dimm, cmd, vendor_size, -1);
+
+       check->cmd = cmd;
+       return 0;
+}
+
 static int check_smart(struct ndctl_bus *bus, struct ndctl_dimm *dimm,
                struct check_cmd *check)
 {
@@ -2299,6 +2339,11 @@ static int check_commands(struct ndctl_bus *bus, struct 
ndctl_dimm *dimm,
 
        unsigned int i, rc = 0;
 
+       if (ndctl_test_family == NVDIMM_FAMILY_PAPR) {
+               dimm_commands &= ~(1 << ND_CMD_SMART_THRESHOLD);
+               __check_dimm_cmds[ND_CMD_SMART].check_fn = &check_smart_ndtest;
+       }
+
        /*
         * The kernel did not start emulating v1.2 namespace spec smart data
         * until 4.9.
diff --git a/test/skip_PAPR.js b/test/skip_PAPR.js
index 367257c4..ec967c98 100644
--- a/test/skip_PAPR.js
+++ b/test/skip_PAPR.js
@@ -26,8 +26,7 @@
  "dm.sh",              //              ""
  "mmap.sh",            //              ""
  "monitor.sh",         // To be fixed
- "inject-smart.sh",    //    ""
- "libndctl"            //    ""
+ "inject-smart.sh"     //    ""
 ]
 
 // NOTE: The libjson-c doesn't like comments in json files, so keep the file



Reply via email to