forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'libnvdimm-for-5.8-rc2' of git://git.kernel.org/pub/scm/lin…
…ux/kernel/git/nvdimm/nvdimm Pull libnvdimm updates from Dan Williams: "A feature (papr_scm health retrieval) and a fix (sysfs attribute visibility) for v5.8. Vaibhav explains in the merge commit below why missing v5.8 would be painful and I agreed to try a -rc2 pull because only cosmetics kept this out of -rc1 and his initial versions were posted in more than enough time for v5.8 consideration: 'These patches are tied to specific features that were committed to customers in upcoming distros releases (RHEL and SLES) whose time-lines are tied to 5.8 kernel release. Being able to track the health of an nvdimm is critical for our customers that are running workloads leveraging papr-scm nvdimms. Missing the 5.8 kernel would mean missing the distro timelines and shifting forward the availability of this feature in distro kernels by at least 6 months' Summary: - Fix the visibility of the region 'align' attribute. The new unit tests for region alignment handling caught a corner case where the alignment cannot be specified if the region is converted from static to dynamic provisioning at runtime. - Add support for device health retrieval for the persistent memory supported by the papr_scm driver. This includes both the standard sysfs "health flags" that the nfit persistent memory driver publishes and a mechanism for the ndctl tool to retrieve a health-command payload" * tag 'libnvdimm-for-5.8-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm: nvdimm/region: always show the 'align' attribute powerpc/papr_scm: Implement support for PAPR_PDSM_HEALTH ndctl/papr_scm,uapi: Add support for PAPR nvdimm specific methods powerpc/papr_scm: Improve error logging and handling papr_scm_ndctl() powerpc/papr_scm: Fetch nvdimm health information from PHYP seq_buf: Export seq_buf_printf powerpc: Document details on H_SCM_HEALTH hcall
- Loading branch information
Showing
7 changed files
with
618 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
What: /sys/bus/nd/devices/nmemX/papr/flags | ||
Date: Apr, 2020 | ||
KernelVersion: v5.8 | ||
Contact: linuxppc-dev <[email protected]>, [email protected], | ||
Description: | ||
(RO) Report flags indicating various states of a | ||
papr-pmem NVDIMM device. Each flag maps to a one or | ||
more bits set in the dimm-health-bitmap retrieved in | ||
response to H_SCM_HEALTH hcall. The details of the bit | ||
flags returned in response to this hcall is available | ||
at 'Documentation/powerpc/papr_hcalls.rst' . Below are | ||
the flags reported in this sysfs file: | ||
|
||
* "not_armed" : Indicates that NVDIMM contents will not | ||
survive a power cycle. | ||
* "flush_fail" : Indicates that NVDIMM contents | ||
couldn't be flushed during last | ||
shut-down event. | ||
* "restore_fail": Indicates that NVDIMM contents | ||
couldn't be restored during NVDIMM | ||
initialization. | ||
* "encrypted" : NVDIMM contents are encrypted. | ||
* "smart_notify": There is health event for the NVDIMM. | ||
* "scrubbed" : Indicating that contents of the | ||
NVDIMM have been scrubbed. | ||
* "locked" : Indicating that NVDIMM contents cant | ||
be modified until next power cycle. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
/* | ||
* PAPR nvDimm Specific Methods (PDSM) and structs for libndctl | ||
* | ||
* (C) Copyright IBM 2020 | ||
* | ||
* Author: Vaibhav Jain <vaibhav at linux.ibm.com> | ||
*/ | ||
|
||
#ifndef _UAPI_ASM_POWERPC_PAPR_PDSM_H_ | ||
#define _UAPI_ASM_POWERPC_PAPR_PDSM_H_ | ||
|
||
#include <linux/types.h> | ||
#include <linux/ndctl.h> | ||
|
||
/* | ||
* PDSM Envelope: | ||
* | ||
* The ioctl ND_CMD_CALL exchange data between user-space and kernel via | ||
* envelope which consists of 2 headers sections and payload sections as | ||
* illustrated below: | ||
* +-----------------+---------------+---------------------------+ | ||
* | 64-Bytes | 8-Bytes | Max 184-Bytes | | ||
* +-----------------+---------------+---------------------------+ | ||
* | ND-HEADER | PDSM-HEADER | PDSM-PAYLOAD | | ||
* +-----------------+---------------+---------------------------+ | ||
* | nd_family | | | | ||
* | nd_size_out | cmd_status | | | ||
* | nd_size_in | reserved | nd_pdsm_payload | | ||
* | nd_command | payload --> | | | ||
* | nd_fw_size | | | | ||
* | nd_payload ---> | | | | ||
* +---------------+-----------------+---------------------------+ | ||
* | ||
* ND Header: | ||
* This is the generic libnvdimm header described as 'struct nd_cmd_pkg' | ||
* which is interpreted by libnvdimm before passed on to papr_scm. Important | ||
* member fields used are: | ||
* 'nd_family' : (In) NVDIMM_FAMILY_PAPR_SCM | ||
* 'nd_size_in' : (In) PDSM-HEADER + PDSM-IN-PAYLOAD (usually 0) | ||
* 'nd_size_out' : (In) PDSM-HEADER + PDSM-RETURN-PAYLOAD | ||
* 'nd_command' : (In) One of PAPR_PDSM_XXX | ||
* 'nd_fw_size' : (Out) PDSM-HEADER + size of actual payload returned | ||
* | ||
* PDSM Header: | ||
* This is papr-scm specific header that precedes the payload. This is defined | ||
* as nd_cmd_pdsm_pkg. Following fields aare available in this header: | ||
* | ||
* 'cmd_status' : (Out) Errors if any encountered while servicing PDSM. | ||
* 'reserved' : Not used, reserved for future and should be set to 0. | ||
* 'payload' : A union of all the possible payload structs | ||
* | ||
* PDSM Payload: | ||
* | ||
* The layout of the PDSM Payload is defined by various structs shared between | ||
* papr_scm and libndctl so that contents of payload can be interpreted. As such | ||
* its defined as a union of all possible payload structs as | ||
* 'union nd_pdsm_payload'. Based on the value of 'nd_cmd_pkg.nd_command' | ||
* appropriate member of the union is accessed. | ||
*/ | ||
|
||
/* Max payload size that we can handle */ | ||
#define ND_PDSM_PAYLOAD_MAX_SIZE 184 | ||
|
||
/* Max payload size that we can handle */ | ||
#define ND_PDSM_HDR_SIZE \ | ||
(sizeof(struct nd_pkg_pdsm) - ND_PDSM_PAYLOAD_MAX_SIZE) | ||
|
||
/* Various nvdimm health indicators */ | ||
#define PAPR_PDSM_DIMM_HEALTHY 0 | ||
#define PAPR_PDSM_DIMM_UNHEALTHY 1 | ||
#define PAPR_PDSM_DIMM_CRITICAL 2 | ||
#define PAPR_PDSM_DIMM_FATAL 3 | ||
|
||
/* | ||
* Struct exchanged between kernel & ndctl in for PAPR_PDSM_HEALTH | ||
* Various flags indicate the health status of the dimm. | ||
* | ||
* extension_flags : Any extension fields present in the struct. | ||
* dimm_unarmed : Dimm not armed. So contents wont persist. | ||
* dimm_bad_shutdown : Previous shutdown did not persist contents. | ||
* dimm_bad_restore : Contents from previous shutdown werent restored. | ||
* dimm_scrubbed : Contents of the dimm have been scrubbed. | ||
* dimm_locked : Contents of the dimm cant be modified until CEC reboot | ||
* dimm_encrypted : Contents of dimm are encrypted. | ||
* dimm_health : Dimm health indicator. One of PAPR_PDSM_DIMM_XXXX | ||
*/ | ||
struct nd_papr_pdsm_health { | ||
union { | ||
struct { | ||
__u32 extension_flags; | ||
__u8 dimm_unarmed; | ||
__u8 dimm_bad_shutdown; | ||
__u8 dimm_bad_restore; | ||
__u8 dimm_scrubbed; | ||
__u8 dimm_locked; | ||
__u8 dimm_encrypted; | ||
__u16 dimm_health; | ||
}; | ||
__u8 buf[ND_PDSM_PAYLOAD_MAX_SIZE]; | ||
}; | ||
}; | ||
|
||
/* | ||
* Methods to be embedded in ND_CMD_CALL request. These are sent to the kernel | ||
* via 'nd_cmd_pkg.nd_command' member of the ioctl struct | ||
*/ | ||
enum papr_pdsm { | ||
PAPR_PDSM_MIN = 0x0, | ||
PAPR_PDSM_HEALTH, | ||
PAPR_PDSM_MAX, | ||
}; | ||
|
||
/* Maximal union that can hold all possible payload types */ | ||
union nd_pdsm_payload { | ||
struct nd_papr_pdsm_health health; | ||
__u8 buf[ND_PDSM_PAYLOAD_MAX_SIZE]; | ||
} __packed; | ||
|
||
/* | ||
* PDSM-header + payload expected with ND_CMD_CALL ioctl from libnvdimm | ||
* Valid member of union 'payload' is identified via 'nd_cmd_pkg.nd_command' | ||
* that should always precede this struct when sent to papr_scm via CMD_CALL | ||
* interface. | ||
*/ | ||
struct nd_pkg_pdsm { | ||
__s32 cmd_status; /* Out: Sub-cmd status returned back */ | ||
__u16 reserved[2]; /* Ignored and to be set as '0' */ | ||
union nd_pdsm_payload payload; | ||
} __packed; | ||
|
||
#endif /* _UAPI_ASM_POWERPC_PAPR_PDSM_H_ */ |
Oops, something went wrong.