All of lore.kernel.org
 help / color / mirror / Atom feed
* [ndctl PATCH v3 5/5] libndctl: Implement the "cmd_is_supported" dimm-op for Hyper-V
@ 2019-03-23  4:26 Dexuan Cui
  0 siblings, 0 replies; only message in thread
From: Dexuan Cui @ 2019-03-23  4:26 UTC (permalink / raw)
  To: vishal.l.verma, dan.j.williams, dave.jiang, linux-nvdimm,
	mikelley; +Cc: qi.fuli

Currently "ndctl monitor" fails for Hyper-V virtual NVDIMM due to
"no smart support".

According to http://www.uefi.org/RFIC_LIST ("Virtual NVDIMM 0x1901"),
Hyper-V doesn't really support ND_CMD_SMART, but it supports
"Get Health Information (Function Index 1)" and
"Get Unsafe Shutdown Count (Function Index 2)", which is basically
a "weak" variant of ND_CMD_SMART.

Implement the dimm-ops to allow "ndctl monitor" to work with Hyper-V
NVDIMM. Now when an error happens, "ndctl monitor" can show such a
line:

{"timestamp":"1550547497.431731497","pid":1571,"event":
{"dimm-health-state":true},"dimm":{"dev":"nmem1",
"id":"04d5-01-1701-01000000","handle":1,"phys_id":0,
"health":{"health_state":"fatal","shutdown_count":8}}}

Here the meaningful info is:
"health":{"health_state":"fatal","shutdown_count":8}

Signed-off-by: Dexuan Cui <decui@microsoft.com>
---
 ndctl/lib/hyperv.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/ndctl/lib/hyperv.c b/ndctl/lib/hyperv.c
index efd8b03..9b4fe12 100644
--- a/ndctl/lib/hyperv.c
+++ b/ndctl/lib/hyperv.c
@@ -9,6 +9,19 @@
 #include "private.h"
 #include "hyperv.h"
 
+static bool hyperv_cmd_is_supported(struct ndctl_dimm *dimm, int cmd)
+{
+	/*
+	 * "ndctl monitor" requires ND_CMD_SMART, which is not really supported
+	 * by Hyper-V virtual NVDIMM. Nevertheless, ND_CMD_SMART can be emulated
+	 * by ND_HYPERV_CMD_GET_HEALTH_INFO and ND_HYPERV_CMD_GET_SHUTDOWN_INFO.
+	 */
+	if (cmd == ND_CMD_SMART )
+		return true;
+
+	return !!(dimm->cmd_mask & (1ULL << cmd));
+}
+
 static struct ndctl_cmd *alloc_hyperv_cmd(struct ndctl_dimm *dimm,
 		unsigned int command)
 {
@@ -161,6 +174,7 @@ static int hyperv_cmd_xlat_firmware_status(struct ndctl_cmd *cmd)
 }
 
 struct ndctl_dimm_ops * const hyperv_dimm_ops = &(struct ndctl_dimm_ops) {
+	.cmd_is_supported = hyperv_cmd_is_supported,
 	.new_smart = hyperv_dimm_cmd_new_smart,
 	.smart_get_flags = hyperv_cmd_get_flags,
 	.smart_get_health = hyperv_cmd_get_health,
-- 
2.19.1

_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2019-03-23  4:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-03-23  4:26 [ndctl PATCH v3 5/5] libndctl: Implement the "cmd_is_supported" dimm-op for Hyper-V Dexuan Cui

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.