On Wednesday 02 December 2009, Alan Stern wrote: > This patch (as1309) fixes a lockdep warning in > __pm_runtime_set_status(). This is the one place where the runtime PM > framework acquires a nested power.lock, and the nesting is never more > than one deep. > > Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> I have a very simila patch queued up already. The only difference is that it uses SINGLE_DEPTH_NESTING instead of the new symbol. My version is appended below. > > --- > > If anybody is using the runtime PM framework in 2.6.32 then this > should be pushed before the final release. I'll push it to Linus, then, if there still is time. Would you mind if I used my version? Thanks, Rafael > Index: usb-2.6/drivers/base/power/runtime.c > =================================================================== > --- usb-2.6.orig/drivers/base/power/runtime.c > +++ usb-2.6/drivers/base/power/runtime.c > @@ -10,6 +10,8 @@ > #include <linux/pm_runtime.h> > #include <linux/jiffies.h> > > +#define RPM_LOCK_PARENT 1 > + > static int __pm_runtime_resume(struct device *dev, bool from_wq); > static int __pm_request_idle(struct device *dev); > static int __pm_request_resume(struct device *dev); > @@ -793,7 +795,7 @@ int __pm_runtime_set_status(struct devic > } > > if (parent) { > - spin_lock(&parent->power.lock); > + spin_lock_nested(&parent->power.lock, RPM_LOCK_PARENT); > > /* > * It is invalid to put an active child under a parent that is --- From: Rafael J. Wysocki <rjw@xxxxxxx> Subject: PM / Runtime: Fix lockdep warning in __pm_runtime_set_status() Lockdep complains about taking the parent lock in __pm_runtime_set_status(), so mark it as nested. Signed-off-by: Rafael J. Wysocki <rjw@xxxxxxx> --- drivers/base/power/runtime.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: linux-2.6/drivers/base/power/runtime.c =================================================================== --- linux-2.6.orig/drivers/base/power/runtime.c +++ linux-2.6/drivers/base/power/runtime.c @@ -777,7 +777,7 @@ int __pm_runtime_set_status(struct devic } if (parent) { - spin_lock(&parent->power.lock); + spin_lock_nested(&parent->power.lock, SINGLE_DEPTH_NESTING); /* * It is invalid to put an active child under a parent that is _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm