From: Shivaprasad G Bhat <sbhat@linux.ibm.com>
To: nvdimm@lists.linux.dev
Cc: aneesh.kumar@linux.ibm.com, sbhat@linux.ibm.com,
vaibhav@linux.ibm.com, santosh@fossix.org,
dan.j.williams@intel.com, ira.weiny@intel.com,
vishal.l.verma@intel.com
Subject: [PATCH 1/3] test/inject-smart: Enable inject-smart tests on ndtest
Date: Tue, 27 Jul 2021 03:11:50 -0500 [thread overview]
Message-ID: <162737350565.3944327.6662473656483436466.stgit@lep8c.aus.stglabs.ibm.com> (raw)
In-Reply-To: <162737349828.3944327.12958894438783947695.stgit@lep8c.aus.stglabs.ibm.com>
The ndtest driver does not have the payloads defined for various
smart fields like the media|ctrl temperature, threshold parameters
for the current PAPR PDSM.
So, the patch makes the below changes to have a valid inject-smart
test run on the ndtest driver.
test/libndctl.c - add separate checks to verify only relavent fields
on ndtest.
test/inject-smart.sh - Test only the shutdown_state and dimm_health
as only those are supported on ndtest. Skip rest of the tests. Reorder
the code for cleanliness
list-list-smart-dimms.c - Separate out filter_dimm implementation for
papr family with the relavent check.
Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
Signed-off-by: Vaibhav Jain <vaibhav@linux.ibm.com>
---
test/inject-smart.sh | 12 ++++++++----
test/libndctl.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
test/list-smart-dimm.c | 36 +++++++++++++++++++++++++++++++++++-
3 files changed, 89 insertions(+), 5 deletions(-)
diff --git a/test/inject-smart.sh b/test/inject-smart.sh
index 4ca83b8b..909c5b17 100755
--- a/test/inject-smart.sh
+++ b/test/inject-smart.sh
@@ -152,14 +152,18 @@ do_tests()
$NDCTL inject-smart -b $bus --uninject-all $dimm
# start tests
- for field in "${fields_val[@]}"; do
- test_field $field $inj_val
- done
-
for field in "${fields_bool[@]}"; do
test_field $field
done
+ if [ $NDCTL_TEST_FAMILY == "PAPR" ]; then
+ return
+ fi
+
+ for field in "${fields_val[@]}"; do
+ test_field $field $inj_val
+ done
+
for field in "${fields_thresh[@]}"; do
test_field $field $inj_val "thresh"
done
diff --git a/test/libndctl.c b/test/libndctl.c
index d9b50f41..ed7f9cc1 100644
--- a/test/libndctl.c
+++ b/test/libndctl.c
@@ -2211,6 +2211,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)
{
@@ -2434,6 +2474,12 @@ static int check_commands(struct ndctl_bus *bus, struct ndctl_dimm *dimm,
};
unsigned int i, rc = 0;
+ char *test_env = getenv("NDCTL_TEST_FAMILY");
+
+ if (test_env && strcmp(test_env, "PAPR") == 0) {
+ 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
diff --git a/test/list-smart-dimm.c b/test/list-smart-dimm.c
index 00c24e11..98a1f03b 100644
--- a/test/list-smart-dimm.c
+++ b/test/list-smart-dimm.c
@@ -26,6 +26,32 @@ static bool filter_region(struct ndctl_region *region,
return true;
}
+static void filter_ndtest_dimm(struct ndctl_dimm *dimm,
+ struct util_filter_ctx *ctx)
+{
+ struct list_filter_arg *lfa = ctx->list;
+ struct json_object *jdimm;
+
+ if (!ndctl_dimm_is_cmd_supported(dimm, ND_CMD_SMART))
+ return;
+
+ if (!lfa->jdimms) {
+ lfa->jdimms = json_object_new_array();
+ if (!lfa->jdimms) {
+ fail("\n");
+ return;
+ }
+ }
+
+ jdimm = util_dimm_to_json(dimm, lfa->flags);
+ if (!jdimm) {
+ fail("\n");
+ return;
+ }
+
+ json_object_array_add(lfa->jdimms, jdimm);
+}
+
static void filter_dimm(struct ndctl_dimm *dimm, struct util_filter_ctx *ctx)
{
struct list_filter_arg *lfa = ctx->list;
@@ -89,6 +115,11 @@ int main(int argc, const char *argv[])
};
struct util_filter_ctx fctx = { 0 };
struct list_filter_arg lfa = { 0 };
+ char *test_env = getenv("NDCTL_TEST_FAMILY");
+ int family = NVDIMM_FAMILY_INTEL;
+
+ if (test_env && strcmp(test_env, "PAPR") == 0)
+ family = NVDIMM_FAMILY_PAPR;
rc = ndctl_new(&ctx);
if (rc < 0)
@@ -100,7 +131,10 @@ int main(int argc, const char *argv[])
usage_with_options(u, options);
fctx.filter_bus = filter_bus;
- fctx.filter_dimm = filter_dimm;
+ if (family == NVDIMM_FAMILY_PAPR)
+ fctx.filter_dimm = filter_ndtest_dimm;
+ else
+ fctx.filter_dimm = filter_dimm;
fctx.filter_region = filter_region;
fctx.filter_namespace = NULL;
fctx.list = &lfa;
next prev parent reply other threads:[~2021-07-27 8:12 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-27 8:11 [PATCH 0/3] test:ndtest: Fix various test cases on ndtest Shivaprasad G Bhat
2021-07-27 8:11 ` Shivaprasad G Bhat [this message]
2021-07-27 8:12 ` [PATCH 2/3] ndtest/ack-shutdown-count: Skip the test " Shivaprasad G Bhat
2021-07-27 8:12 ` [PATCH 3/3] test/monitor.sh: Partially skip monitor " Shivaprasad G Bhat
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=162737350565.3944327.6662473656483436466.stgit@lep8c.aus.stglabs.ibm.com \
--to=sbhat@linux.ibm.com \
--cc=aneesh.kumar@linux.ibm.com \
--cc=dan.j.williams@intel.com \
--cc=ira.weiny@intel.com \
--cc=nvdimm@lists.linux.dev \
--cc=santosh@fossix.org \
--cc=vaibhav@linux.ibm.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).