Commit 02486c29 authored by Dan Williams's avatar Dan Williams

libnvdimm: fix SMART Health DSM payload definition

"NVDIMM DSM Interface Example" v1.2 made an incompatible change to the
layout of function1 "SMART and Health Info".  While the kernel does not
directly consume this payload, it does define it in ndctl.h that
userpace utilities consume.
Reported-by: default avatarBrian Boylston <brian.boylston@hpe.com>
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent 694d0d0b
...@@ -21,14 +21,16 @@ struct nd_cmd_smart { ...@@ -21,14 +21,16 @@ struct nd_cmd_smart {
} __packed; } __packed;
#define ND_SMART_HEALTH_VALID (1 << 0) #define ND_SMART_HEALTH_VALID (1 << 0)
#define ND_SMART_TEMP_VALID (1 << 1) #define ND_SMART_SPARES_VALID (1 << 1)
#define ND_SMART_SPARES_VALID (1 << 2) #define ND_SMART_USED_VALID (1 << 2)
#define ND_SMART_ALARM_VALID (1 << 3) #define ND_SMART_TEMP_VALID (1 << 3)
#define ND_SMART_USED_VALID (1 << 4) #define ND_SMART_CTEMP_VALID (1 << 4)
#define ND_SMART_SHUTDOWN_VALID (1 << 5) #define ND_SMART_ALARM_VALID (1 << 9)
#define ND_SMART_VENDOR_VALID (1 << 6) #define ND_SMART_SHUTDOWN_VALID (1 << 10)
#define ND_SMART_TEMP_TRIP (1 << 0) #define ND_SMART_VENDOR_VALID (1 << 11)
#define ND_SMART_SPARE_TRIP (1 << 1) #define ND_SMART_SPARE_TRIP (1 << 0)
#define ND_SMART_TEMP_TRIP (1 << 1)
#define ND_SMART_CTEMP_TRIP (1 << 2)
#define ND_SMART_NON_CRITICAL_HEALTH (1 << 0) #define ND_SMART_NON_CRITICAL_HEALTH (1 << 0)
#define ND_SMART_CRITICAL_HEALTH (1 << 1) #define ND_SMART_CRITICAL_HEALTH (1 << 1)
#define ND_SMART_FATAL_HEALTH (1 << 2) #define ND_SMART_FATAL_HEALTH (1 << 2)
...@@ -37,14 +39,15 @@ struct nd_smart_payload { ...@@ -37,14 +39,15 @@ struct nd_smart_payload {
__u32 flags; __u32 flags;
__u8 reserved0[4]; __u8 reserved0[4];
__u8 health; __u8 health;
__u16 temperature;
__u8 spares; __u8 spares;
__u8 alarm_flags;
__u8 life_used; __u8 life_used;
__u8 alarm_flags;
__u16 temperature;
__u16 ctrl_temperature;
__u8 reserved1[15];
__u8 shutdown_state; __u8 shutdown_state;
__u8 reserved1;
__u32 vendor_size; __u32 vendor_size;
__u8 vendor_data[108]; __u8 vendor_data[92];
} __packed; } __packed;
struct nd_cmd_smart_threshold { struct nd_cmd_smart_threshold {
...@@ -53,7 +56,8 @@ struct nd_cmd_smart_threshold { ...@@ -53,7 +56,8 @@ struct nd_cmd_smart_threshold {
} __packed; } __packed;
struct nd_smart_threshold_payload { struct nd_smart_threshold_payload {
__u16 alarm_control; __u8 alarm_control;
__u8 reserved0;
__u16 temperature; __u16 temperature;
__u8 spares; __u8 spares;
__u8 reserved[3]; __u8 reserved[3];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment