On Mon, 2020-07-27 at 14:37 +0200, Rafael J. Wysocki wrote: > On Tue, Jul 21, 2020 at 12:24 AM Dan Williams <dan.j.williams@xxxxxxxxx> wrote: > > Abstract platform specific mechanics for nvdimm firmware activation > > behind a handful of generic ops. At the bus level ->activate_state() > > indicates the unified state (idle, busy, armed) of all DIMMs on the bus, > > and ->capability() indicates the system state expectations for activate. > > At the DIMM level ->activate_state() indicates the per-DIMM state, > > ->activate_result() indicates the outcome of the last activation > > attempt, and ->arm() attempts to transition the DIMM from 'idle' to > > 'armed'. > > > > A new hibernate_quiet_exec() facility is added to support firmware > > activation in an OS defined system quiesce state. It leverages the fact > > that the hibernate-freeze state wants to assert that a memory > > hibernation snapshot can be taken. This is in contrast to a platform > > firmware defined quiesce state that may forcefully quiet the memory > > controller independent of whether an individual device-driver properly > > supports hibernate-freeze. > > > > The libnvdimm sysfs interface is extended to support detection of a > > firmware activate capability. The mechanism supports enumeration and > > triggering of firmware activate, optionally in the > > hibernate_quiet_exec() context. > > > > Cc: Pavel Machek <pavel@xxxxxx> > > Cc: Ira Weiny <ira.weiny@xxxxxxxxx> > > Cc: Len Brown <len.brown@xxxxxxxxx> > > Cc: Jonathan Corbet <corbet@xxxxxxx> > > Cc: Dave Jiang <dave.jiang@xxxxxxxxx> > > Cc: Vishal Verma <vishal.l.verma@xxxxxxxxx> > > [rafael: hibernate_quiet_exec() proposal] > > Co-developed-by: "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx> > > IMO it's better to change this to > > Co-developed-by: "Rafael J. Wysocki" <rafael.j.wysocki@xxxxxxxxx> > > and please to add > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > > to it as per the development process documentation. Thanks Rafael, I've fixed this up in the branch I've prepared for the pull request: https://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm.git/log/?h=libnvdimm-for-next > > > Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx> > > --- > > Documentation/ABI/testing/sysfs-bus-nvdimm | 2 > > .../driver-api/nvdimm/firmware-activate.rst | 86 ++++++++++++ > > drivers/nvdimm/core.c | 149 ++++++++++++++++++++ > > drivers/nvdimm/dimm_devs.c | 115 +++++++++++++++ > > drivers/nvdimm/nd-core.h | 1 > > include/linux/libnvdimm.h | 44 ++++++ > > include/linux/suspend.h | 6 + > > kernel/power/hibernate.c | 97 +++++++++++++ > > 8 files changed, 500 insertions(+) > > create mode 100644 Documentation/ABI/testing/sysfs-bus-nvdimm > > create mode 100644 Documentation/driver-api/nvdimm/firmware-activate.rst > > [..] > > @@ -464,6 +466,10 @@ static inline void hibernation_set_ops(const struct platform_hibernation_ops *op > > static inline int hibernate(void) { return -ENOSYS; } > > static inline bool system_entering_hibernation(void) { return false; } > > static inline bool hibernation_available(void) { return false; } > > + > > +static inline hibernate_quiet_exec(int (*func)(void *data), void *data) { > > This needs to be "static inline int". > Yep I got a build warning for this and also fixed it up. Thanks, -Vishal