[tpmdd-devel,v4,2/2] Add "shutdown" to "struct class".

Submitted by Josh Zimmerman on May 25, 2017, 11:20 p.m.

Details

Message ID CAHSjozD_NjH0Ta=ELCOqG6ezX=qgteumKBnN2ceqE4ty2FaAZQ@mail.gmail.com
State New
Headers show

Commit Message

Josh Zimmerman May 25, 2017, 11:20 p.m.
The TPM class has some common shutdown code that must be executed for
all drivers. This adds some needed functionality for that.

Signed-off-by: Josh Zimmerman <joshz@google.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: stable@vger.kernel.org

-----
v2: Add Signed-off-by.
v3: Remove logically separate change.
v4: Add "acked-by" and "cc".
---
 drivers/base/core.c    | 5 +++++
 include/linux/device.h | 2 ++
 2 files changed, 7 insertions(+)

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

Comments

Jarkko Sakkinen May 30, 2017, 5:08 a.m.
On Thu, May 25, 2017 at 04:20:30PM -0700, Josh Zimmerman wrote:
> The TPM class has some common shutdown code that must be executed for
> all drivers. This adds some needed functionality for that.
> 
> Signed-off-by: Josh Zimmerman <joshz@google.com>
> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: stable@vger.kernel.org

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

I can apply this patch to my tree right now.

/Jarkko

> 
> -----
> v2: Add Signed-off-by.
> v3: Remove logically separate change.
> v4: Add "acked-by" and "cc".
> ---
>  drivers/base/core.c    | 5 +++++
>  include/linux/device.h | 2 ++
>  2 files changed, 7 insertions(+)
> 
> diff --git a/drivers/base/core.c b/drivers/base/core.c
> index 6bb60fb6a30b..687668d9afbe 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..f240baac2001 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);
> -- 
> 2.13.0.219.gdb65acc882-goog

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Jarkko Sakkinen May 30, 2017, 7:54 a.m.
On Thu, May 25, 2017 at 04:20:30PM -0700, Josh Zimmerman wrote:
> The TPM class has some common shutdown code that must be executed for
> all drivers. This adds some needed functionality for that.
> 
> Signed-off-by: Josh Zimmerman <joshz@google.com>
> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: stable@vger.kernel.org

Does not apply yet to security-next (ancestor missing).

/Jarkko

> 
> -----
> v2: Add Signed-off-by.
> v3: Remove logically separate change.
> v4: Add "acked-by" and "cc".
> ---
>  drivers/base/core.c    | 5 +++++
>  include/linux/device.h | 2 ++
>  2 files changed, 7 insertions(+)
> 
> diff --git a/drivers/base/core.c b/drivers/base/core.c
> index 6bb60fb6a30b..687668d9afbe 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..f240baac2001 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);
> -- 
> 2.13.0.219.gdb65acc882-goog

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Josh Zimmerman May 31, 2017, 10:01 p.m.
On Tue, May 30, 2017 at 12:54 AM, Jarkko Sakkinen
<jarkko.sakkinen@linux.intel.com> wrote:
> On Thu, May 25, 2017 at 04:20:30PM -0700, Josh Zimmerman wrote:
>> The TPM class has some common shutdown code that must be executed for
>> all drivers. This adds some needed functionality for that.
>>
>> Signed-off-by: Josh Zimmerman <joshz@google.com>
>> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>> Cc: stable@vger.kernel.org
>
> Does not apply yet to security-next (ancestor missing).

Hm, it applied cleanly for me to the "next" branch of
git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git.
Are you referring to something else with "security-next"?

>> -----
>> v2: Add Signed-off-by.
>> v3: Remove logically separate change.
>> v4: Add "acked-by" and "cc".
>> ---
>>  drivers/base/core.c    | 5 +++++
>>  include/linux/device.h | 2 ++
>>  2 files changed, 7 insertions(+)
>>
>> diff --git a/drivers/base/core.c b/drivers/base/core.c
>> index 6bb60fb6a30b..687668d9afbe 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) {

I just looked again at this line, which I am suddenly skeptical of. Is there
any reason to run _both_ the class and the bus or driver shutdown
functions? In the code as-is, only the bus or the driver function will
execute. Right now, this patch will change that behavior. I suspect I
should just add the appropriate "else", but I'm not sure if there is
some reason to prefer the behavior as implemented in this version of
the patch.

>>                         if (initcall_debug)
>>                                 dev_info(dev, "shutdown\n");
>> diff --git a/include/linux/device.h b/include/linux/device.h
>> index 9ef518af5515..f240baac2001 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);
>> --
>> 2.13.0.219.gdb65acc882-goog

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Jason Gunthorpe May 31, 2017, 10:18 p.m.
On Wed, May 31, 2017 at 03:01:13PM -0700, Josh Zimmerman wrote:

> >> +               if (dev->class && dev->class->shutdown) {
> >> +                       if (initcall_debug)
> >> +                               dev_info(dev, "shutdown\n");
> >> +                       dev->class->shutdown(dev);
> >> +               }
> >>                 if (dev->bus && dev->bus->shutdown) {
> 
> I just looked again at this line, which I am suddenly skeptical of. Is there
> any reason to run _both_ the class and the bus or driver shutdown
> functions? In the code as-is, only the bus or the driver function will
> execute. Right now, this patch will change that behavior. I suspect I
> should just add the appropriate "else", but I'm not sure if there is
> some reason to prefer the behavior as implemented in this version of
> the patch.

Yes, I think the else should be there.

From what I could tell, the intent is that the most generic will then
call the least generic in the proper order, eg tpm class shutdown full
should then call bus and driver shutdown, if they are defined.

This allows each step to inject some action both before and after
calling the lower level steps, and follows the same pattern used
elsewhere.

Jason

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Jarkko Sakkinen June 1, 2017, 5:07 p.m.
On Wed, May 31, 2017 at 03:01:13PM -0700, Josh Zimmerman wrote:
> On Tue, May 30, 2017 at 12:54 AM, Jarkko Sakkinen
> <jarkko.sakkinen@linux.intel.com> wrote:
> > On Thu, May 25, 2017 at 04:20:30PM -0700, Josh Zimmerman wrote:
> >> The TPM class has some common shutdown code that must be executed for
> >> all drivers. This adds some needed functionality for that.
> >>
> >> Signed-off-by: Josh Zimmerman <joshz@google.com>
> >> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> >> Cc: stable@vger.kernel.org
> >
> > Does not apply yet to security-next (ancestor missing).
> 
> Hm, it applied cleanly for me to the "next" branch of
> git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git.
> Are you referring to something else with "security-next"?

Hmm...

I get 

$ git am -3 ~/Downloads/v5-2-2-Add-shutdown-to-struct-class-..patch 
Applying: Add "shutdown" to "struct class".
error: patch fragment without header at line 7: @@ -407,6 +408,7 @@ struct class {
error: could not build fake ancestor
Patch failed at 0001 Add "shutdown" to "struct class".
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

My tree rebased to latest security/next

/Jarkko

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Josh Zimmerman June 2, 2017, 10 p.m.
Quite strange. Here's what I see.

$ git pull
Already up-to-date.
$ git branch
  master
* next
$ git am -3 /tmp/v6-0001-tpm-Issue-a-TPM2_Shutdown-for-TPM2-devices.patch
Applying: tpm: Issue a TPM2_Shutdown for TPM2 devices.
$ git am -3 /tmp/v6-0002-Add-shutdown-to-struct-class.patch  # This is
identical to v5
Applying: Add "shutdown" to "struct class".
$ git status
On branch next
Your branch is ahead of 'origin/next' by 2 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
$ git log --oneline | head -n 4
58410b1fef64 Add "shutdown" to "struct class".
84e311a15e94 tpm: Issue a TPM2_Shutdown for TPM2 devices.
d68c51e0b377 Sync to mainline for security submaintainers to work against
08332893e37a Linux 4.12-rc2
$ git remote -v
origin  git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git
(fetch)
origin  git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git
(push)
Josh


On Thu, Jun 1, 2017 at 10:07 AM, Jarkko Sakkinen
<jarkko.sakkinen@linux.intel.com> wrote:
> On Wed, May 31, 2017 at 03:01:13PM -0700, Josh Zimmerman wrote:
>> On Tue, May 30, 2017 at 12:54 AM, Jarkko Sakkinen
>> <jarkko.sakkinen@linux.intel.com> wrote:
>> > On Thu, May 25, 2017 at 04:20:30PM -0700, Josh Zimmerman wrote:
>> >> The TPM class has some common shutdown code that must be executed for
>> >> all drivers. This adds some needed functionality for that.
>> >>
>> >> Signed-off-by: Josh Zimmerman <joshz@google.com>
>> >> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>> >> Cc: stable@vger.kernel.org
>> >
>> > Does not apply yet to security-next (ancestor missing).
>>
>> Hm, it applied cleanly for me to the "next" branch of
>> git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git.
>> Are you referring to something else with "security-next"?
>
> Hmm...
>
> I get
>
> $ git am -3 ~/Downloads/v5-2-2-Add-shutdown-to-struct-class-..patch
> Applying: Add "shutdown" to "struct class".
> error: patch fragment without header at line 7: @@ -407,6 +408,7 @@ struct class {
> error: could not build fake ancestor
> Patch failed at 0001 Add "shutdown" to "struct class".
> The copy of the patch that failed is found in: .git/rebase-apply/patch
> When you have resolved this problem, run "git am --continue".
> If you prefer to skip this patch, run "git am --skip" instead.
> To restore the original branch and stop patching, run "git am --abort".
>
> My tree rebased to latest security/next
>
> /Jarkko

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Jarkko Sakkinen June 5, 2017, 12:48 p.m.
Does your patches in my tree if you try it yourself?

Very weird...

/Jarkko

On Fri, Jun 02, 2017 at 03:00:22PM -0700, Josh Zimmerman wrote:
> Quite strange. Here's what I see.
> 
> $ git pull
> Already up-to-date.
> $ git branch
>   master
> * next
> $ git am -3 /tmp/v6-0001-tpm-Issue-a-TPM2_Shutdown-for-TPM2-devices.patch
> Applying: tpm: Issue a TPM2_Shutdown for TPM2 devices.
> $ git am -3 /tmp/v6-0002-Add-shutdown-to-struct-class.patch  # This is
> identical to v5
> Applying: Add "shutdown" to "struct class".
> $ git status
> On branch next
> Your branch is ahead of 'origin/next' by 2 commits.
>   (use "git push" to publish your local commits)
> 
> nothing to commit, working tree clean
> $ git log --oneline | head -n 4
> 58410b1fef64 Add "shutdown" to "struct class".
> 84e311a15e94 tpm: Issue a TPM2_Shutdown for TPM2 devices.
> d68c51e0b377 Sync to mainline for security submaintainers to work against
> 08332893e37a Linux 4.12-rc2
> $ git remote -v
> origin  git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git
> (fetch)
> origin  git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git
> (push)
> Josh
> 
> 
> On Thu, Jun 1, 2017 at 10:07 AM, Jarkko Sakkinen
> <jarkko.sakkinen@linux.intel.com> wrote:
> > On Wed, May 31, 2017 at 03:01:13PM -0700, Josh Zimmerman wrote:
> >> On Tue, May 30, 2017 at 12:54 AM, Jarkko Sakkinen
> >> <jarkko.sakkinen@linux.intel.com> wrote:
> >> > On Thu, May 25, 2017 at 04:20:30PM -0700, Josh Zimmerman wrote:
> >> >> The TPM class has some common shutdown code that must be executed for
> >> >> all drivers. This adds some needed functionality for that.
> >> >>
> >> >> Signed-off-by: Josh Zimmerman <joshz@google.com>
> >> >> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> >> >> Cc: stable@vger.kernel.org
> >> >
> >> > Does not apply yet to security-next (ancestor missing).
> >>
> >> Hm, it applied cleanly for me to the "next" branch of
> >> git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git.
> >> Are you referring to something else with "security-next"?
> >
> > Hmm...
> >
> > I get
> >
> > $ git am -3 ~/Downloads/v5-2-2-Add-shutdown-to-struct-class-..patch
> > Applying: Add "shutdown" to "struct class".
> > error: patch fragment without header at line 7: @@ -407,6 +408,7 @@ struct class {
> > error: could not build fake ancestor
> > Patch failed at 0001 Add "shutdown" to "struct class".
> > The copy of the patch that failed is found in: .git/rebase-apply/patch
> > When you have resolved this problem, run "git am --continue".
> > If you prefer to skip this patch, run "git am --skip" instead.
> > To restore the original branch and stop patching, run "git am --abort".
> >
> > My tree rebased to latest security/next
> >
> > /Jarkko

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Josh Zimmerman June 5, 2017, 6:32 p.m.
I'm not sure where your tree is, but it applies cleanly to
https://github.com/PeterHuewe/linux-tpmdd (which was linked as the
source of truth from the sourceforge page,
https://sourceforge.net/projects/tpmdd/)

$ git clone https://github.com/PeterHuewe/linux-tpmdd
Cloning into 'linux-tpmdd'...
remote: Counting objects: 5394697, done.
remote: Compressing objects: 100% (805/805), done.
remote: Total 5394697 (delta 722), reused 285 (delta 285), pack-reused 5393607
Receiving objects: 100% (5394697/5394697), 1.74 GiB | 4.58 MiB/s, done.
Resolving deltas: 100% (4464433/4464433), done.
Checking out files: 100% (59842/59842), done.
$ cd linux-tpmdd/
$ git am -3 /tmp/v6-0001-tpm-Issue-a-TPM2_Shutdown-for-TPM2-devices.patch
Applying: tpm: Issue a TPM2_Shutdown for TPM2 devices.
$ git am -3 /tmp/v6-0002-Add-shutdown-to-struct-class.patch
Applying: Add "shutdown" to "struct class".
$ git log --oneline | head
ba3cbbbe4212 Add "shutdown" to "struct class".
8314e024633c tpm: Issue a TPM2_Shutdown for TPM2 devices.
08332893e37a Linux 4.12-rc2
33c9e9729033 x86: fix 32-bit case of __get_user_asm_u64()
334a023ee509 Clean up x86 unsafe_get/put_user() type handling
f3926e4c2a4b Merge branch 'for-linus' of
git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
970c305aa802 Merge branch 'sched-urgent-for-linus' of
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
e7a3d6274918 Merge branch 'irq-urgent-for-linus' of
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
a8c39544a6eb osf_wait4(): fix infoleak
a7cc722fff0b fix unsafe_put_user()
Josh


On Mon, Jun 5, 2017 at 5:48 AM, Jarkko Sakkinen
<jarkko.sakkinen@linux.intel.com> wrote:
> Does your patches in my tree if you try it yourself?
>
> Very weird...
>
> /Jarkko
>
> On Fri, Jun 02, 2017 at 03:00:22PM -0700, Josh Zimmerman wrote:
>> Quite strange. Here's what I see.
>>
>> $ git pull
>> Already up-to-date.
>> $ git branch
>>   master
>> * next
>> $ git am -3 /tmp/v6-0001-tpm-Issue-a-TPM2_Shutdown-for-TPM2-devices.patch
>> Applying: tpm: Issue a TPM2_Shutdown for TPM2 devices.
>> $ git am -3 /tmp/v6-0002-Add-shutdown-to-struct-class.patch  # This is
>> identical to v5
>> Applying: Add "shutdown" to "struct class".
>> $ git status
>> On branch next
>> Your branch is ahead of 'origin/next' by 2 commits.
>>   (use "git push" to publish your local commits)
>>
>> nothing to commit, working tree clean
>> $ git log --oneline | head -n 4
>> 58410b1fef64 Add "shutdown" to "struct class".
>> 84e311a15e94 tpm: Issue a TPM2_Shutdown for TPM2 devices.
>> d68c51e0b377 Sync to mainline for security submaintainers to work against
>> 08332893e37a Linux 4.12-rc2
>> $ git remote -v
>> origin  git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git
>> (fetch)
>> origin  git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git
>> (push)
>> Josh
>>
>>
>> On Thu, Jun 1, 2017 at 10:07 AM, Jarkko Sakkinen
>> <jarkko.sakkinen@linux.intel.com> wrote:
>> > On Wed, May 31, 2017 at 03:01:13PM -0700, Josh Zimmerman wrote:
>> >> On Tue, May 30, 2017 at 12:54 AM, Jarkko Sakkinen
>> >> <jarkko.sakkinen@linux.intel.com> wrote:
>> >> > On Thu, May 25, 2017 at 04:20:30PM -0700, Josh Zimmerman wrote:
>> >> >> The TPM class has some common shutdown code that must be executed for
>> >> >> all drivers. This adds some needed functionality for that.
>> >> >>
>> >> >> Signed-off-by: Josh Zimmerman <joshz@google.com>
>> >> >> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>> >> >> Cc: stable@vger.kernel.org
>> >> >
>> >> > Does not apply yet to security-next (ancestor missing).
>> >>
>> >> Hm, it applied cleanly for me to the "next" branch of
>> >> git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git.
>> >> Are you referring to something else with "security-next"?
>> >
>> > Hmm...
>> >
>> > I get
>> >
>> > $ git am -3 ~/Downloads/v5-2-2-Add-shutdown-to-struct-class-..patch
>> > Applying: Add "shutdown" to "struct class".
>> > error: patch fragment without header at line 7: @@ -407,6 +408,7 @@ struct class {
>> > error: could not build fake ancestor
>> > Patch failed at 0001 Add "shutdown" to "struct class".
>> > The copy of the patch that failed is found in: .git/rebase-apply/patch
>> > When you have resolved this problem, run "git am --continue".
>> > If you prefer to skip this patch, run "git am --skip" instead.
>> > To restore the original branch and stop patching, run "git am --abort".
>> >
>> > My tree rebased to latest security/next
>> >
>> > /Jarkko

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Josh Zimmerman via tpmdd-devel June 12, 2017, 11:08 p.m.
Hi Jarkko,

Were you able to merge my patches? If not can you give me a bit more
info about what git repo and branch you're working off of, so I can
try to get it to apply to the HEAD of that branch?

Thanks,
Josh


On Mon, Jun 5, 2017 at 11:32 AM, Josh Zimmerman <joshz@google.com> wrote:
> I'm not sure where your tree is, but it applies cleanly to
> https://github.com/PeterHuewe/linux-tpmdd (which was linked as the
> source of truth from the sourceforge page,
> https://sourceforge.net/projects/tpmdd/)
>
> $ git clone https://github.com/PeterHuewe/linux-tpmdd
> Cloning into 'linux-tpmdd'...
> remote: Counting objects: 5394697, done.
> remote: Compressing objects: 100% (805/805), done.
> remote: Total 5394697 (delta 722), reused 285 (delta 285), pack-reused 5393607
> Receiving objects: 100% (5394697/5394697), 1.74 GiB | 4.58 MiB/s, done.
> Resolving deltas: 100% (4464433/4464433), done.
> Checking out files: 100% (59842/59842), done.
> $ cd linux-tpmdd/
> $ git am -3 /tmp/v6-0001-tpm-Issue-a-TPM2_Shutdown-for-TPM2-devices.patch
> Applying: tpm: Issue a TPM2_Shutdown for TPM2 devices.
> $ git am -3 /tmp/v6-0002-Add-shutdown-to-struct-class.patch
> Applying: Add "shutdown" to "struct class".
> $ git log --oneline | head
> ba3cbbbe4212 Add "shutdown" to "struct class".
> 8314e024633c tpm: Issue a TPM2_Shutdown for TPM2 devices.
> 08332893e37a Linux 4.12-rc2
> 33c9e9729033 x86: fix 32-bit case of __get_user_asm_u64()
> 334a023ee509 Clean up x86 unsafe_get/put_user() type handling
> f3926e4c2a4b Merge branch 'for-linus' of
> git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
> 970c305aa802 Merge branch 'sched-urgent-for-linus' of
> git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
> e7a3d6274918 Merge branch 'irq-urgent-for-linus' of
> git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
> a8c39544a6eb osf_wait4(): fix infoleak
> a7cc722fff0b fix unsafe_put_user()
> Josh
>
>
> On Mon, Jun 5, 2017 at 5:48 AM, Jarkko Sakkinen
> <jarkko.sakkinen@linux.intel.com> wrote:
>> Does your patches in my tree if you try it yourself?
>>
>> Very weird...
>>
>> /Jarkko
>>
>> On Fri, Jun 02, 2017 at 03:00:22PM -0700, Josh Zimmerman wrote:
>>> Quite strange. Here's what I see.
>>>
>>> $ git pull
>>> Already up-to-date.
>>> $ git branch
>>>   master
>>> * next
>>> $ git am -3 /tmp/v6-0001-tpm-Issue-a-TPM2_Shutdown-for-TPM2-devices.patch
>>> Applying: tpm: Issue a TPM2_Shutdown for TPM2 devices.
>>> $ git am -3 /tmp/v6-0002-Add-shutdown-to-struct-class.patch  # This is
>>> identical to v5
>>> Applying: Add "shutdown" to "struct class".
>>> $ git status
>>> On branch next
>>> Your branch is ahead of 'origin/next' by 2 commits.
>>>   (use "git push" to publish your local commits)
>>>
>>> nothing to commit, working tree clean
>>> $ git log --oneline | head -n 4
>>> 58410b1fef64 Add "shutdown" to "struct class".
>>> 84e311a15e94 tpm: Issue a TPM2_Shutdown for TPM2 devices.
>>> d68c51e0b377 Sync to mainline for security submaintainers to work against
>>> 08332893e37a Linux 4.12-rc2
>>> $ git remote -v
>>> origin  git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git
>>> (fetch)
>>> origin  git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git
>>> (push)
>>> Josh
>>>
>>>
>>> On Thu, Jun 1, 2017 at 10:07 AM, Jarkko Sakkinen
>>> <jarkko.sakkinen@linux.intel.com> wrote:
>>> > On Wed, May 31, 2017 at 03:01:13PM -0700, Josh Zimmerman wrote:
>>> >> On Tue, May 30, 2017 at 12:54 AM, Jarkko Sakkinen
>>> >> <jarkko.sakkinen@linux.intel.com> wrote:
>>> >> > On Thu, May 25, 2017 at 04:20:30PM -0700, Josh Zimmerman wrote:
>>> >> >> The TPM class has some common shutdown code that must be executed for
>>> >> >> all drivers. This adds some needed functionality for that.
>>> >> >>
>>> >> >> Signed-off-by: Josh Zimmerman <joshz@google.com>
>>> >> >> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>>> >> >> Cc: stable@vger.kernel.org
>>> >> >
>>> >> > Does not apply yet to security-next (ancestor missing).
>>> >>
>>> >> Hm, it applied cleanly for me to the "next" branch of
>>> >> git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git.
>>> >> Are you referring to something else with "security-next"?
>>> >
>>> > Hmm...
>>> >
>>> > I get
>>> >
>>> > $ git am -3 ~/Downloads/v5-2-2-Add-shutdown-to-struct-class-..patch
>>> > Applying: Add "shutdown" to "struct class".
>>> > error: patch fragment without header at line 7: @@ -407,6 +408,7 @@ struct class {
>>> > error: could not build fake ancestor
>>> > Patch failed at 0001 Add "shutdown" to "struct class".
>>> > The copy of the patch that failed is found in: .git/rebase-apply/patch
>>> > When you have resolved this problem, run "git am --continue".
>>> > If you prefer to skip this patch, run "git am --skip" instead.
>>> > To restore the original branch and stop patching, run "git am --abort".
>>> >
>>> > My tree rebased to latest security/next
>>> >
>>> > /Jarkko

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Jarkko Sakkinen June 13, 2017, 7:11 p.m.
The maintainer tree for tpmdd is located at

git://git.infradead.org/users/jjs/linux-tpmdd.git

I just updated my branches to latest security/next but still get the
complaint about ancestors:

$ git am -3 ~/Downloads/v5-2-2-Add-shutdown-to-struct-class-..patch 
Applying: Add "shutdown" to "struct class".
error: patch fragment without header at line 7: @@ -407,6 +408,7 @@ struct class {
error: could not build fake ancestor
Patch failed at 0001 Add "shutdown" to "struct class".
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

I'm postponing my v4.13 PR up until next week as there's no big features
coming up (so I have more time to wait for fixes) so this still can make
into that. 

/Jarkko

On Mon, Jun 12, 2017 at 04:08:39PM -0700, Josh Zimmerman wrote:
> Hi Jarkko,
> 
> Were you able to merge my patches? If not can you give me a bit more
> info about what git repo and branch you're working off of, so I can
> try to get it to apply to the HEAD of that branch?
> 
> Thanks,
> Josh
> 
> 
> On Mon, Jun 5, 2017 at 11:32 AM, Josh Zimmerman <joshz@google.com> wrote:
> > I'm not sure where your tree is, but it applies cleanly to
> > https://github.com/PeterHuewe/linux-tpmdd (which was linked as the
> > source of truth from the sourceforge page,
> > https://sourceforge.net/projects/tpmdd/)
> >
> > $ git clone https://github.com/PeterHuewe/linux-tpmdd
> > Cloning into 'linux-tpmdd'...
> > remote: Counting objects: 5394697, done.
> > remote: Compressing objects: 100% (805/805), done.
> > remote: Total 5394697 (delta 722), reused 285 (delta 285), pack-reused 5393607
> > Receiving objects: 100% (5394697/5394697), 1.74 GiB | 4.58 MiB/s, done.
> > Resolving deltas: 100% (4464433/4464433), done.
> > Checking out files: 100% (59842/59842), done.
> > $ cd linux-tpmdd/
> > $ git am -3 /tmp/v6-0001-tpm-Issue-a-TPM2_Shutdown-for-TPM2-devices.patch
> > Applying: tpm: Issue a TPM2_Shutdown for TPM2 devices.
> > $ git am -3 /tmp/v6-0002-Add-shutdown-to-struct-class.patch
> > Applying: Add "shutdown" to "struct class".
> > $ git log --oneline | head
> > ba3cbbbe4212 Add "shutdown" to "struct class".
> > 8314e024633c tpm: Issue a TPM2_Shutdown for TPM2 devices.
> > 08332893e37a Linux 4.12-rc2
> > 33c9e9729033 x86: fix 32-bit case of __get_user_asm_u64()
> > 334a023ee509 Clean up x86 unsafe_get/put_user() type handling
> > f3926e4c2a4b Merge branch 'for-linus' of
> > git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
> > 970c305aa802 Merge branch 'sched-urgent-for-linus' of
> > git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
> > e7a3d6274918 Merge branch 'irq-urgent-for-linus' of
> > git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
> > a8c39544a6eb osf_wait4(): fix infoleak
> > a7cc722fff0b fix unsafe_put_user()
> > Josh
> >
> >
> > On Mon, Jun 5, 2017 at 5:48 AM, Jarkko Sakkinen
> > <jarkko.sakkinen@linux.intel.com> wrote:
> >> Does your patches in my tree if you try it yourself?
> >>
> >> Very weird...
> >>
> >> /Jarkko
> >>
> >> On Fri, Jun 02, 2017 at 03:00:22PM -0700, Josh Zimmerman wrote:
> >>> Quite strange. Here's what I see.
> >>>
> >>> $ git pull
> >>> Already up-to-date.
> >>> $ git branch
> >>>   master
> >>> * next
> >>> $ git am -3 /tmp/v6-0001-tpm-Issue-a-TPM2_Shutdown-for-TPM2-devices.patch
> >>> Applying: tpm: Issue a TPM2_Shutdown for TPM2 devices.
> >>> $ git am -3 /tmp/v6-0002-Add-shutdown-to-struct-class.patch  # This is
> >>> identical to v5
> >>> Applying: Add "shutdown" to "struct class".
> >>> $ git status
> >>> On branch next
> >>> Your branch is ahead of 'origin/next' by 2 commits.
> >>>   (use "git push" to publish your local commits)
> >>>
> >>> nothing to commit, working tree clean
> >>> $ git log --oneline | head -n 4
> >>> 58410b1fef64 Add "shutdown" to "struct class".
> >>> 84e311a15e94 tpm: Issue a TPM2_Shutdown for TPM2 devices.
> >>> d68c51e0b377 Sync to mainline for security submaintainers to work against
> >>> 08332893e37a Linux 4.12-rc2
> >>> $ git remote -v
> >>> origin  git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git
> >>> (fetch)
> >>> origin  git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git
> >>> (push)
> >>> Josh
> >>>
> >>>
> >>> On Thu, Jun 1, 2017 at 10:07 AM, Jarkko Sakkinen
> >>> <jarkko.sakkinen@linux.intel.com> wrote:
> >>> > On Wed, May 31, 2017 at 03:01:13PM -0700, Josh Zimmerman wrote:
> >>> >> On Tue, May 30, 2017 at 12:54 AM, Jarkko Sakkinen
> >>> >> <jarkko.sakkinen@linux.intel.com> wrote:
> >>> >> > On Thu, May 25, 2017 at 04:20:30PM -0700, Josh Zimmerman wrote:
> >>> >> >> The TPM class has some common shutdown code that must be executed for
> >>> >> >> all drivers. This adds some needed functionality for that.
> >>> >> >>
> >>> >> >> Signed-off-by: Josh Zimmerman <joshz@google.com>
> >>> >> >> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> >>> >> >> Cc: stable@vger.kernel.org
> >>> >> >
> >>> >> > Does not apply yet to security-next (ancestor missing).
> >>> >>
> >>> >> Hm, it applied cleanly for me to the "next" branch of
> >>> >> git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git.
> >>> >> Are you referring to something else with "security-next"?
> >>> >
> >>> > Hmm...
> >>> >
> >>> > I get
> >>> >
> >>> > $ git am -3 ~/Downloads/v5-2-2-Add-shutdown-to-struct-class-..patch
> >>> > Applying: Add "shutdown" to "struct class".
> >>> > error: patch fragment without header at line 7: @@ -407,6 +408,7 @@ struct class {
> >>> > error: could not build fake ancestor
> >>> > Patch failed at 0001 Add "shutdown" to "struct class".
> >>> > The copy of the patch that failed is found in: .git/rebase-apply/patch
> >>> > When you have resolved this problem, run "git am --continue".
> >>> > If you prefer to skip this patch, run "git am --skip" instead.
> >>> > To restore the original branch and stop patching, run "git am --abort".
> >>> >
> >>> > My tree rebased to latest security/next
> >>> >
> >>> > /Jarkko

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

Patch hide | download patch | download mbox

diff --git a/drivers/base/core.c b/drivers/base/core.c
index 6bb60fb6a30b..687668d9afbe 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..f240baac2001 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