tpmdd-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
* [PATCH] Add "shutdown" to "struct class".
@ 2017-05-12 23:32 Josh Zimmerman
       [not found] ` <20170512233203.23659-1-joshz-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
  0 siblings, 1 reply; 4+ messages in thread
From: Josh Zimmerman @ 2017-05-12 23:32 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-kernel-u79uwXL29TY76Z2rM5mHXA
  Cc: tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

The TPM class has some common shutdown code that must be executed for
all drivers. This adds some needed functionality for that.

(In addition, update a comment to reflect an out-of-date path.)
---
 drivers/base/core.c    | 5 +++++
 include/linux/device.h | 4 +++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/base/core.c b/drivers/base/core.c
index bbecaf9293be..5c1648875e94 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -2667,6 +2667,11 @@ void device_shutdown(void)
 		pm_runtime_get_noresume(dev);
 		pm_runtime_barrier(dev);
 
+		if (dev->class && dev->class->shutdown) {
+			if (initcall_debug)
+				dev_info(dev, "shutdown\n");
+			dev->class->shutdown(dev);
+		}
 		if (dev->bus && dev->bus->shutdown) {
 			if (initcall_debug)
 				dev_info(dev, "shutdown\n");
diff --git a/include/linux/device.h b/include/linux/device.h
index 9ef518af5515..a150f8d3b3f1 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -378,6 +378,7 @@ int subsys_virtual_register(struct bus_type *subsys,
  * @suspend:	Used to put the device to sleep mode, usually to a low power
  *		state.
  * @resume:	Used to bring the device from the sleep mode.
+ * @shutdown:	Called at shut-down time to quiesce the device.
  * @ns_type:	Callbacks so sysfs can detemine namespaces.
  * @namespace:	Namespace of the device belongs to this class.
  * @pm:		The default device power management operations of this class.
@@ -407,6 +408,7 @@ struct class {
 
 	int (*suspend)(struct device *dev, pm_message_t state);
 	int (*resume)(struct device *dev);
+	int (*shutdown)(struct device *dev);
 
 	const struct kobj_ns_type_operations *ns_type;
 	const void *(*namespace)(struct device *dev);
@@ -1228,7 +1230,7 @@ static inline int devtmpfs_delete_node(struct device *dev) { return 0; }
 static inline int devtmpfs_mount(const char *mountpoint) { return 0; }
 #endif
 
-/* drivers/base/power/shutdown.c */
+/* drivers/base/core.c */
 extern void device_shutdown(void);
 
 /* debugging and troubleshooting/diagnostic helpers. */
-- 
2.13.0.rc2.291.g57267f2277-goog


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] Add "shutdown" to "struct class".
       [not found] ` <20170512233203.23659-1-joshz-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
@ 2017-05-13 12:43   ` Winkler, Tomas
  2017-05-15 15:51     ` [tpmdd-devel] " Jason Gunthorpe
  0 siblings, 1 reply; 4+ messages in thread
From: Winkler, Tomas @ 2017-05-13 12:43 UTC (permalink / raw)
  To: Josh Zimmerman, Greg Kroah-Hartman, linux-kernel-u79uwXL29TY76Z2rM5mHXA
  Cc: tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, Rafael J. Wysocki

> The TPM class has some common shutdown code that must be executed for
> all drivers. This adds some needed functionality for that

The issue with this is, that on some platforms the only storage can be eMMC and TPM is using it,. It  has to be ensured that the storage device  won't go down before  TPM2_shutdown is called. 
And there is no direct device hierarchy to ensure an orderly shutdown. 
Tomas 

> 
> (In addition, update a comment to reflect an out-of-date path.)
> ---
>  drivers/base/core.c    | 5 +++++
>  include/linux/device.h | 4 +++-
>  2 files changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/base/core.c b/drivers/base/core.c index
> bbecaf9293be..5c1648875e94 100644
> --- a/drivers/base/core.c
> +++ b/drivers/base/core.c
> @@ -2667,6 +2667,11 @@ void device_shutdown(void)
>  		pm_runtime_get_noresume(dev);
>  		pm_runtime_barrier(dev);
> 
> +		if (dev->class && dev->class->shutdown) {
> +			if (initcall_debug)
> +				dev_info(dev, "shutdown\n");
> +			dev->class->shutdown(dev);
> +		}
>  		if (dev->bus && dev->bus->shutdown) {
>  			if (initcall_debug)
>  				dev_info(dev, "shutdown\n");
> diff --git a/include/linux/device.h b/include/linux/device.h index
> 9ef518af5515..a150f8d3b3f1 100644
> --- a/include/linux/device.h
> +++ b/include/linux/device.h
> @@ -378,6 +378,7 @@ int subsys_virtual_register(struct bus_type *subsys,
>   * @suspend:	Used to put the device to sleep mode, usually to a low
> power
>   *		state.
>   * @resume:	Used to bring the device from the sleep mode.
> + * @shutdown:	Called at shut-down time to quiesce the device.
>   * @ns_type:	Callbacks so sysfs can detemine namespaces.
>   * @namespace:	Namespace of the device belongs to this class.
>   * @pm:		The default device power management operations of
> this class.
> @@ -407,6 +408,7 @@ struct class {
> 
>  	int (*suspend)(struct device *dev, pm_message_t state);
>  	int (*resume)(struct device *dev);
> +	int (*shutdown)(struct device *dev);
> 
>  	const struct kobj_ns_type_operations *ns_type;
>  	const void *(*namespace)(struct device *dev); @@ -1228,7 +1230,7
> @@ static inline int devtmpfs_delete_node(struct device *dev) { return 0; }
> static inline int devtmpfs_mount(const char *mountpoint) { return 0; }
> #endif
> 
> -/* drivers/base/power/shutdown.c */
> +/* drivers/base/core.c */
>  extern void device_shutdown(void);
> 
>  /* debugging and troubleshooting/diagnostic helpers. */
> --
> 2.13.0.rc2.291.g57267f2277-goog
> 
> 
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> tpmdd-devel mailing list
> tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
> https://lists.sourceforge.net/lists/listinfo/tpmdd-devel

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [tpmdd-devel] [PATCH] Add "shutdown" to "struct class".
  2017-05-13 12:43   ` Winkler, Tomas
@ 2017-05-15 15:51     ` Jason Gunthorpe
       [not found]       ` <20170515155110.GC3433-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
  0 siblings, 1 reply; 4+ messages in thread
From: Jason Gunthorpe @ 2017-05-15 15:51 UTC (permalink / raw)
  To: Winkler, Tomas
  Cc: Josh Zimmerman, Greg Kroah-Hartman, linux-kernel, tpmdd-devel,
	Rafael J. Wysocki

On Sat, May 13, 2017 at 12:43:11PM +0000, Winkler, Tomas wrote:
> > The TPM class has some common shutdown code that must be executed for
> > all drivers. This adds some needed functionality for that
> 
> The issue with this is, that on some platforms the only storage can
> be eMMC and TPM is using it,. It has to be ensured that the storage
> device won't go down before TPM2_shutdown is called.  And there is
> no direct device hierarchy to ensure an orderly shutdown.

Something will have to use the new device links stuff to define that
dependency, but that seems unrelated to this patch?

Can the kernel really shut down the eMMC while the hidden platform
stuff is still possibly using it? Goofy..

Jason

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Add "shutdown" to "struct class".
       [not found]       ` <20170515155110.GC3433-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
@ 2017-05-15 16:17         ` Winkler, Tomas
  0 siblings, 0 replies; 4+ messages in thread
From: Winkler, Tomas @ 2017-05-15 16:17 UTC (permalink / raw)
  To: Jason Gunthorpe
  Cc: Greg Kroah-Hartman, tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	Rafael J. Wysocki, linux-kernel-u79uwXL29TY76Z2rM5mHXA

> 
> On Sat, May 13, 2017 at 12:43:11PM +0000, Winkler, Tomas wrote:
> > > The TPM class has some common shutdown code that must be executed
> > > for all drivers. This adds some needed functionality for that
> >
> > The issue with this is, that on some platforms the only storage can be
> > eMMC and TPM is using it,. It has to be ensured that the storage
> > device won't go down before TPM2_shutdown is called.  And there is no
> > direct device hierarchy to ensure an orderly shutdown.
> 
> Something will have to use the new device links stuff to define that
> dependency, but that seems unrelated to this patch?


Yep, it's not directly related to this specific patch, this is more relevant particularly to TPM2_shutdown. 

> Can the kernel really shut down the eMMC while the hidden platform stuff is
> still possibly using it? Goofy..

eMMC is single headed, so yes that can happen.

Tomas


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-05-15 16:17 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-12 23:32 [PATCH] Add "shutdown" to "struct class" Josh Zimmerman
     [not found] ` <20170512233203.23659-1-joshz-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2017-05-13 12:43   ` Winkler, Tomas
2017-05-15 15:51     ` [tpmdd-devel] " Jason Gunthorpe
     [not found]       ` <20170515155110.GC3433-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-05-15 16:17         ` Winkler, Tomas

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).