Re: [PATCH 09/13] PM: wakelock: Abort task freezing if a wake lock is held.

Pavel Machek
2009-02-05T08:55:31Z

Hi!

> Avoids a problem where the device sometimes hangs for 20 seconds
> before the screen is turned on.

Fix the problem rather than working around it.

> @@ -62,6 +64,10 @@ static int try_to_freeze_tasks(bool sig_only)
> } while_each_thread(g, p);
> read_unlock(&tasklist_lock);
> yield(); /* Yield is okay here */
> + if (todo && has_wake_lock(WAKE_LOCK_SUSPEND)) {
> + wakeup = 1;
> + break;
> + }
> if (time_after(jiffies, end_time))
> break;
> } while (todo);

I do not see why wakelocks should change refrigerator behaviour.

> @@ -77,11 +83,17 @@ static int try_to_freeze_tasks(bool sig_only)
> * and caller must call thaw_processes() if something fails),
> * but it cleans up leftover PF_FREEZE requests.
> */
> - printk("\n");
> - printk(KERN_ERR "Freezing of tasks failed after %d.%02d seconds "
> - "(%d tasks refusing to freeze):\n",
> - elapsed_csecs / 100, elapsed_csecs % 100, todo);
> - show_state();
> + if (wakeup) {
> + printk("\n");
> + printk(KERN_ERR "Freezing of %s aborted\n",
> + sig_only ? "user space " : "tasks ");
> + } else {
> + printk("\n");
> + printk(KERN_ERR "Freezing of tasks failed after %d.%02d seconds "
> + "(%d tasks refusing to freeze):\n",
> + elapsed_csecs / 100, elapsed_csecs % 100, todo);
> + show_state();

Please find why the refrigerator fails for you. Yes, we want quiescent
state at least for hibernation resume.
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html