tpmdd-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] Do not disable driver and bus shutdown hook when class shutdown hook is set.
@ 2017-08-11 13:44 Michal Suchanek
  2017-08-14  9:52 ` Jarkko Sakkinen
  2017-08-19 12:03 ` Jarkko Sakkinen
  0 siblings, 2 replies; 5+ messages in thread
From: Michal Suchanek @ 2017-08-11 13:44 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Peter Huewe, Marcel Selhorst,
	Jarkko Sakkinen, Jason Gunthorpe, David S. Miller, Andrew Morton,
	Rafael J. Wysocki, Phil Sutter, Josh Zimmerman, Michal Suchanek,
	Madalin Bucur, Mauro Carvalho Chehab, Heiko Carstens,
	Ludovic Desroches, linux-kernel, tpmdd-devel

As seen from the implementation of the single class shutdown hook this
is not very sound design.

Rename the class shutdown hook to shutdown_pre to make it clear it runs
before the driver shutdown hook.

Signed-off-by: Michal Suchanek <msuchanek@suse.de>
---
v2: rename class shutdown member to shutdown_pre
---
 drivers/base/core.c         |  9 +++++----
 drivers/char/tpm/tpm-chip.c | 11 ++---------
 include/linux/device.h      |  4 ++--
 3 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/drivers/base/core.c b/drivers/base/core.c
index 755451f684bc..13e7c41fd417 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -2664,11 +2664,12 @@ void device_shutdown(void)
 		pm_runtime_get_noresume(dev);
 		pm_runtime_barrier(dev);
 
-		if (dev->class && dev->class->shutdown) {
+		if (dev->class && dev->class->shutdown_pre) {
 			if (initcall_debug)
-				dev_info(dev, "shutdown\n");
-			dev->class->shutdown(dev);
-		} else if (dev->bus && dev->bus->shutdown) {
+				dev_info(dev, "shutdown_pre\n");
+			dev->class->shutdown_pre(dev);
+		}
+		if (dev->bus && dev->bus->shutdown) {
 			if (initcall_debug)
 				dev_info(dev, "shutdown\n");
 			dev->bus->shutdown(dev);
diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
index 67ec9d3d04f5..0eca20c5a80c 100644
--- a/drivers/char/tpm/tpm-chip.c
+++ b/drivers/char/tpm/tpm-chip.c
@@ -164,14 +164,7 @@ static int tpm_class_shutdown(struct device *dev)
 		chip->ops = NULL;
 		up_write(&chip->ops_sem);
 	}
-	/* Allow bus- and device-specific code to run. Note: since chip->ops
-	 * is NULL, more-specific shutdown code will not be able to issue TPM
-	 * commands.
-	 */
-	if (dev->bus && dev->bus->shutdown)
-		dev->bus->shutdown(dev);
-	else if (dev->driver && dev->driver->shutdown)
-		dev->driver->shutdown(dev);
+
 	return 0;
 }
 
@@ -214,7 +207,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
 	device_initialize(&chip->devs);
 
 	chip->dev.class = tpm_class;
-	chip->dev.class->shutdown = tpm_class_shutdown;
+	chip->dev.class->shutdown_pre = tpm_class_shutdown;
 	chip->dev.release = tpm_dev_release;
 	chip->dev.parent = pdev;
 	chip->dev.groups = chip->groups;
diff --git a/include/linux/device.h b/include/linux/device.h
index beabdbc08420..649b1b72c76a 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -375,7 +375,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.
+ * @shutdown_pre: Called at shut-down time before driver shutdown.
  * @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.
@@ -404,7 +404,7 @@ struct class {
 
 	int (*suspend)(struct device *dev, pm_message_t state);
 	int (*resume)(struct device *dev);
-	int (*shutdown)(struct device *dev);
+	int (*shutdown_pre)(struct device *dev);
 
 	const struct kobj_ns_type_operations *ns_type;
 	const void *(*namespace)(struct device *dev);
-- 
2.10.2

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

* Re: [PATCH v2] Do not disable driver and bus shutdown hook when class shutdown hook is set.
  2017-08-11 13:44 [PATCH v2] Do not disable driver and bus shutdown hook when class shutdown hook is set Michal Suchanek
@ 2017-08-14  9:52 ` Jarkko Sakkinen
  2017-08-19 12:03 ` Jarkko Sakkinen
  1 sibling, 0 replies; 5+ messages in thread
From: Jarkko Sakkinen @ 2017-08-14  9:52 UTC (permalink / raw)
  To: Michal Suchanek
  Cc: Greg Kroah-Hartman, Peter Huewe, Marcel Selhorst,
	Jason Gunthorpe, David S. Miller, Andrew Morton,
	Rafael J. Wysocki, Phil Sutter, Josh Zimmerman, Madalin Bucur,
	Mauro Carvalho Chehab, Heiko Carstens, Ludovic Desroches,
	linux-kernel, tpmdd-devel

On Fri, Aug 11, 2017 at 03:44:43PM +0200, Michal Suchanek wrote:
> As seen from the implementation of the single class shutdown hook this
> is not very sound design.
> 
> Rename the class shutdown hook to shutdown_pre to make it clear it runs
> before the driver shutdown hook.
> 
> Signed-off-by: Michal Suchanek <msuchanek@suse.de>

Now, at least for me, this makes sense.

Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>

/Jarkko

> ---
> v2: rename class shutdown member to shutdown_pre
> ---
>  drivers/base/core.c         |  9 +++++----
>  drivers/char/tpm/tpm-chip.c | 11 ++---------
>  include/linux/device.h      |  4 ++--
>  3 files changed, 9 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/base/core.c b/drivers/base/core.c
> index 755451f684bc..13e7c41fd417 100644
> --- a/drivers/base/core.c
> +++ b/drivers/base/core.c
> @@ -2664,11 +2664,12 @@ void device_shutdown(void)
>  		pm_runtime_get_noresume(dev);
>  		pm_runtime_barrier(dev);
>  
> -		if (dev->class && dev->class->shutdown) {
> +		if (dev->class && dev->class->shutdown_pre) {
>  			if (initcall_debug)
> -				dev_info(dev, "shutdown\n");
> -			dev->class->shutdown(dev);
> -		} else if (dev->bus && dev->bus->shutdown) {
> +				dev_info(dev, "shutdown_pre\n");
> +			dev->class->shutdown_pre(dev);
> +		}
> +		if (dev->bus && dev->bus->shutdown) {
>  			if (initcall_debug)
>  				dev_info(dev, "shutdown\n");
>  			dev->bus->shutdown(dev);
> diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
> index 67ec9d3d04f5..0eca20c5a80c 100644
> --- a/drivers/char/tpm/tpm-chip.c
> +++ b/drivers/char/tpm/tpm-chip.c
> @@ -164,14 +164,7 @@ static int tpm_class_shutdown(struct device *dev)
>  		chip->ops = NULL;
>  		up_write(&chip->ops_sem);
>  	}
> -	/* Allow bus- and device-specific code to run. Note: since chip->ops
> -	 * is NULL, more-specific shutdown code will not be able to issue TPM
> -	 * commands.
> -	 */
> -	if (dev->bus && dev->bus->shutdown)
> -		dev->bus->shutdown(dev);
> -	else if (dev->driver && dev->driver->shutdown)
> -		dev->driver->shutdown(dev);
> +
>  	return 0;
>  }
>  
> @@ -214,7 +207,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
>  	device_initialize(&chip->devs);
>  
>  	chip->dev.class = tpm_class;
> -	chip->dev.class->shutdown = tpm_class_shutdown;
> +	chip->dev.class->shutdown_pre = tpm_class_shutdown;
>  	chip->dev.release = tpm_dev_release;
>  	chip->dev.parent = pdev;
>  	chip->dev.groups = chip->groups;
> diff --git a/include/linux/device.h b/include/linux/device.h
> index beabdbc08420..649b1b72c76a 100644
> --- a/include/linux/device.h
> +++ b/include/linux/device.h
> @@ -375,7 +375,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.
> + * @shutdown_pre: Called at shut-down time before driver shutdown.
>   * @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.
> @@ -404,7 +404,7 @@ struct class {
>  
>  	int (*suspend)(struct device *dev, pm_message_t state);
>  	int (*resume)(struct device *dev);
> -	int (*shutdown)(struct device *dev);
> +	int (*shutdown_pre)(struct device *dev);
>  
>  	const struct kobj_ns_type_operations *ns_type;
>  	const void *(*namespace)(struct device *dev);
> -- 
> 2.10.2
> 

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

* Re: [PATCH v2] Do not disable driver and bus shutdown hook when class shutdown hook is set.
  2017-08-11 13:44 [PATCH v2] Do not disable driver and bus shutdown hook when class shutdown hook is set Michal Suchanek
  2017-08-14  9:52 ` Jarkko Sakkinen
@ 2017-08-19 12:03 ` Jarkko Sakkinen
  2017-08-19 17:03   ` Greg Kroah-Hartman
  1 sibling, 1 reply; 5+ messages in thread
From: Jarkko Sakkinen @ 2017-08-19 12:03 UTC (permalink / raw)
  To: Michal Suchanek
  Cc: Greg Kroah-Hartman, Peter Huewe, Marcel Selhorst,
	Jason Gunthorpe, David S. Miller, Andrew Morton,
	Rafael J. Wysocki, Phil Sutter, Josh Zimmerman, Madalin Bucur,
	Mauro Carvalho Chehab, Heiko Carstens, Ludovic Desroches,
	linux-kernel, tpmdd-devel

On Fri, Aug 11, 2017 at 03:44:43PM +0200, Michal Suchanek wrote:
> As seen from the implementation of the single class shutdown hook this
> is not very sound design.
> 
> Rename the class shutdown hook to shutdown_pre to make it clear it runs
> before the driver shutdown hook.
> 
> Signed-off-by: Michal Suchanek <msuchanek@suse.de>

I already gave this reviewed-by but cannot apply it because there's no
ack from device maintainers yet.

/Jarkko

> ---
> v2: rename class shutdown member to shutdown_pre
> ---
>  drivers/base/core.c         |  9 +++++----
>  drivers/char/tpm/tpm-chip.c | 11 ++---------
>  include/linux/device.h      |  4 ++--
>  3 files changed, 9 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/base/core.c b/drivers/base/core.c
> index 755451f684bc..13e7c41fd417 100644
> --- a/drivers/base/core.c
> +++ b/drivers/base/core.c
> @@ -2664,11 +2664,12 @@ void device_shutdown(void)
>  		pm_runtime_get_noresume(dev);
>  		pm_runtime_barrier(dev);
>  
> -		if (dev->class && dev->class->shutdown) {
> +		if (dev->class && dev->class->shutdown_pre) {
>  			if (initcall_debug)
> -				dev_info(dev, "shutdown\n");
> -			dev->class->shutdown(dev);
> -		} else if (dev->bus && dev->bus->shutdown) {
> +				dev_info(dev, "shutdown_pre\n");
> +			dev->class->shutdown_pre(dev);
> +		}
> +		if (dev->bus && dev->bus->shutdown) {
>  			if (initcall_debug)
>  				dev_info(dev, "shutdown\n");
>  			dev->bus->shutdown(dev);
> diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
> index 67ec9d3d04f5..0eca20c5a80c 100644
> --- a/drivers/char/tpm/tpm-chip.c
> +++ b/drivers/char/tpm/tpm-chip.c
> @@ -164,14 +164,7 @@ static int tpm_class_shutdown(struct device *dev)
>  		chip->ops = NULL;
>  		up_write(&chip->ops_sem);
>  	}
> -	/* Allow bus- and device-specific code to run. Note: since chip->ops
> -	 * is NULL, more-specific shutdown code will not be able to issue TPM
> -	 * commands.
> -	 */
> -	if (dev->bus && dev->bus->shutdown)
> -		dev->bus->shutdown(dev);
> -	else if (dev->driver && dev->driver->shutdown)
> -		dev->driver->shutdown(dev);
> +
>  	return 0;
>  }
>  
> @@ -214,7 +207,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
>  	device_initialize(&chip->devs);
>  
>  	chip->dev.class = tpm_class;
> -	chip->dev.class->shutdown = tpm_class_shutdown;
> +	chip->dev.class->shutdown_pre = tpm_class_shutdown;
>  	chip->dev.release = tpm_dev_release;
>  	chip->dev.parent = pdev;
>  	chip->dev.groups = chip->groups;
> diff --git a/include/linux/device.h b/include/linux/device.h
> index beabdbc08420..649b1b72c76a 100644
> --- a/include/linux/device.h
> +++ b/include/linux/device.h
> @@ -375,7 +375,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.
> + * @shutdown_pre: Called at shut-down time before driver shutdown.
>   * @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.
> @@ -404,7 +404,7 @@ struct class {
>  
>  	int (*suspend)(struct device *dev, pm_message_t state);
>  	int (*resume)(struct device *dev);
> -	int (*shutdown)(struct device *dev);
> +	int (*shutdown_pre)(struct device *dev);
>  
>  	const struct kobj_ns_type_operations *ns_type;
>  	const void *(*namespace)(struct device *dev);
> -- 
> 2.10.2
> 

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

* Re: [PATCH v2] Do not disable driver and bus shutdown hook when class shutdown hook is set.
  2017-08-19 12:03 ` Jarkko Sakkinen
@ 2017-08-19 17:03   ` Greg Kroah-Hartman
  2017-08-19 17:29     ` Jarkko Sakkinen
  0 siblings, 1 reply; 5+ messages in thread
From: Greg Kroah-Hartman @ 2017-08-19 17:03 UTC (permalink / raw)
  To: Jarkko Sakkinen
  Cc: Michal Suchanek, Peter Huewe, Marcel Selhorst, Jason Gunthorpe,
	David S. Miller, Andrew Morton, Rafael J. Wysocki, Phil Sutter,
	Josh Zimmerman, Madalin Bucur, Mauro Carvalho Chehab,
	Heiko Carstens, Ludovic Desroches, linux-kernel, tpmdd-devel

On Sat, Aug 19, 2017 at 03:03:53PM +0300, Jarkko Sakkinen wrote:
> On Fri, Aug 11, 2017 at 03:44:43PM +0200, Michal Suchanek wrote:
> > As seen from the implementation of the single class shutdown hook this
> > is not very sound design.
> > 
> > Rename the class shutdown hook to shutdown_pre to make it clear it runs
> > before the driver shutdown hook.
> > 
> > Signed-off-by: Michal Suchanek <msuchanek@suse.de>
> 
> I already gave this reviewed-by but cannot apply it because there's no
> ack from device maintainers yet.

I'm on vacation at the moment and will look at this when I get back in a
week, please give me a chance.

thanks,

greg k-h

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

* Re: [PATCH v2] Do not disable driver and bus shutdown hook when class shutdown hook is set.
  2017-08-19 17:03   ` Greg Kroah-Hartman
@ 2017-08-19 17:29     ` Jarkko Sakkinen
  0 siblings, 0 replies; 5+ messages in thread
From: Jarkko Sakkinen @ 2017-08-19 17:29 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Michal Suchanek, Peter Huewe, Marcel Selhorst, Jason Gunthorpe,
	David S. Miller, Andrew Morton, Rafael J. Wysocki, Phil Sutter,
	Josh Zimmerman, Madalin Bucur, Mauro Carvalho Chehab,
	Heiko Carstens, Ludovic Desroches, linux-kernel, tpmdd-devel

On Sat, Aug 19, 2017 at 10:03:40AM -0700, Greg Kroah-Hartman wrote:
> On Sat, Aug 19, 2017 at 03:03:53PM +0300, Jarkko Sakkinen wrote:
> > On Fri, Aug 11, 2017 at 03:44:43PM +0200, Michal Suchanek wrote:
> > > As seen from the implementation of the single class shutdown hook this
> > > is not very sound design.
> > > 
> > > Rename the class shutdown hook to shutdown_pre to make it clear it runs
> > > before the driver shutdown hook.
> > > 
> > > Signed-off-by: Michal Suchanek <msuchanek@suse.de>
> > 
> > I already gave this reviewed-by but cannot apply it because there's no
> > ack from device maintainers yet.
> 
> I'm on vacation at the moment and will look at this when I get back in a
> week, please give me a chance.
> 
> thanks,
> 
> greg k-h

Take your time! I don't think this patch is critical. Thanks.

/Jarkko

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

end of thread, other threads:[~2017-08-19 17:29 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-11 13:44 [PATCH v2] Do not disable driver and bus shutdown hook when class shutdown hook is set Michal Suchanek
2017-08-14  9:52 ` Jarkko Sakkinen
2017-08-19 12:03 ` Jarkko Sakkinen
2017-08-19 17:03   ` Greg Kroah-Hartman
2017-08-19 17:29     ` Jarkko Sakkinen

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