Re: [PATCH] PM: Acquire device locks on suspend

Alan Stern
2008-01-06T17:06:42Z

On Sun, 6 Jan 2008, Rafael J. Wysocki wrote:

> > If you can figure out a way to disable the warning in device_del() for
> > just the one device being unregistered by
> > device_pm_destroy_suspended(),
>
> Something like this, perhaps:
>
> @@ -905,6 +915,18 @@ void device_del(struct device * dev)
> struct device * parent = dev->parent;
> struct class_interface *class_intf;
>
> + if (down_trylock(&dev->sem)) {
> + if (pm_sleep_lock()) {
> + dev_warn(dev, "Illegal %s during suspend\n",
> + __FUNCTION__);
> + dump_stack();
> + } else {
> + pm_sleep_unlock();
> + }
> + } else {
> + up(&dev->sem);
> + }
> +
> if (parent)
> klist_del(&dev->knode_parent);
> if (MAJOR(dev->devt))

Bizarre, but it should work. Be sure to include plenty of explanatory
comments -- otherwise nobody will be able to figure it out! :-)

Alan Stern