@@ -4779,41 +4779,6 @@ int device_change_owner(struct device *dev, kuid_t kuid, kgid_t kgid)
4779
4779
}
4780
4780
EXPORT_SYMBOL_GPL (device_change_owner );
4781
4781
4782
- static void shutdown_one_device (struct device * dev )
4783
- {
4784
- /* hold lock to avoid race with probe/release */
4785
- if (dev -> parent && dev -> bus && dev -> bus -> need_parent_lock )
4786
- device_lock (dev -> parent );
4787
- device_lock (dev );
4788
-
4789
- /* Don't allow any more runtime suspends */
4790
- pm_runtime_get_noresume (dev );
4791
- pm_runtime_barrier (dev );
4792
-
4793
- if (dev -> class && dev -> class -> shutdown_pre ) {
4794
- if (initcall_debug )
4795
- dev_info (dev , "shutdown_pre\n" );
4796
- dev -> class -> shutdown_pre (dev );
4797
- }
4798
- if (dev -> bus && dev -> bus -> shutdown ) {
4799
- if (initcall_debug )
4800
- dev_info (dev , "shutdown\n" );
4801
- dev -> bus -> shutdown (dev );
4802
- } else if (dev -> driver && dev -> driver -> shutdown ) {
4803
- if (initcall_debug )
4804
- dev_info (dev , "shutdown\n" );
4805
- dev -> driver -> shutdown (dev );
4806
- }
4807
-
4808
- device_unlock (dev );
4809
- if (dev -> parent && dev -> bus && dev -> bus -> need_parent_lock )
4810
- device_unlock (dev -> parent );
4811
-
4812
- put_device (dev );
4813
- if (dev -> parent )
4814
- put_device (dev -> parent );
4815
- }
4816
-
4817
4782
/**
4818
4783
* device_shutdown - call ->shutdown() on each device to shutdown.
4819
4784
*/
@@ -4850,7 +4815,36 @@ void device_shutdown(void)
4850
4815
list_del_init (& dev -> kobj .entry );
4851
4816
spin_unlock (& devices_kset -> list_lock );
4852
4817
4853
- shutdown_one_device (dev );
4818
+ /* hold lock to avoid race with probe/release */
4819
+ if (parent && dev -> bus && dev -> bus -> need_parent_lock )
4820
+ device_lock (parent );
4821
+ device_lock (dev );
4822
+
4823
+ /* Don't allow any more runtime suspends */
4824
+ pm_runtime_get_noresume (dev );
4825
+ pm_runtime_barrier (dev );
4826
+
4827
+ if (dev -> class && dev -> class -> shutdown_pre ) {
4828
+ if (initcall_debug )
4829
+ dev_info (dev , "shutdown_pre\n" );
4830
+ dev -> class -> shutdown_pre (dev );
4831
+ }
4832
+ if (dev -> bus && dev -> bus -> shutdown ) {
4833
+ if (initcall_debug )
4834
+ dev_info (dev , "shutdown\n" );
4835
+ dev -> bus -> shutdown (dev );
4836
+ } else if (dev -> driver && dev -> driver -> shutdown ) {
4837
+ if (initcall_debug )
4838
+ dev_info (dev , "shutdown\n" );
4839
+ dev -> driver -> shutdown (dev );
4840
+ }
4841
+
4842
+ device_unlock (dev );
4843
+ if (parent && dev -> bus && dev -> bus -> need_parent_lock )
4844
+ device_unlock (parent );
4845
+
4846
+ put_device (dev );
4847
+ put_device (parent );
4854
4848
4855
4849
spin_lock (& devices_kset -> list_lock );
4856
4850
}
0 commit comments