|
@@ -2017,7 +2017,7 @@ EXPORT_SYMBOL_GPL(device_move);
|
|
*/
|
|
*/
|
|
void device_shutdown(void)
|
|
void device_shutdown(void)
|
|
{
|
|
{
|
|
- struct device *dev;
|
|
|
|
|
|
+ struct device *dev, *parent;
|
|
|
|
|
|
spin_lock(&devices_kset->list_lock);
|
|
spin_lock(&devices_kset->list_lock);
|
|
/*
|
|
/*
|
|
@@ -2034,7 +2034,7 @@ void device_shutdown(void)
|
|
* prevent it from being freed because parent's
|
|
* prevent it from being freed because parent's
|
|
* lock is to be held
|
|
* lock is to be held
|
|
*/
|
|
*/
|
|
- get_device(dev->parent);
|
|
|
|
|
|
+ parent = get_device(dev->parent);
|
|
get_device(dev);
|
|
get_device(dev);
|
|
/*
|
|
/*
|
|
* Make sure the device is off the kset list, in the
|
|
* Make sure the device is off the kset list, in the
|
|
@@ -2044,8 +2044,8 @@ void device_shutdown(void)
|
|
spin_unlock(&devices_kset->list_lock);
|
|
spin_unlock(&devices_kset->list_lock);
|
|
|
|
|
|
/* hold lock to avoid race with probe/release */
|
|
/* hold lock to avoid race with probe/release */
|
|
- if (dev->parent)
|
|
|
|
- device_lock(dev->parent);
|
|
|
|
|
|
+ if (parent)
|
|
|
|
+ device_lock(parent);
|
|
device_lock(dev);
|
|
device_lock(dev);
|
|
|
|
|
|
/* Don't allow any more runtime suspends */
|
|
/* Don't allow any more runtime suspends */
|
|
@@ -2063,11 +2063,11 @@ void device_shutdown(void)
|
|
}
|
|
}
|
|
|
|
|
|
device_unlock(dev);
|
|
device_unlock(dev);
|
|
- if (dev->parent)
|
|
|
|
- device_unlock(dev->parent);
|
|
|
|
|
|
+ if (parent)
|
|
|
|
+ device_unlock(parent);
|
|
|
|
|
|
put_device(dev);
|
|
put_device(dev);
|
|
- put_device(dev->parent);
|
|
|
|
|
|
+ put_device(parent);
|
|
|
|
|
|
spin_lock(&devices_kset->list_lock);
|
|
spin_lock(&devices_kset->list_lock);
|
|
}
|
|
}
|