* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway [not found] ` <fa.d3GOse+YbAb42uYwLymWkJiH9Fw@ifi.uio.no> @ 2007-07-04 0:17 ` Robert Hancock 2007-07-04 0:34 ` Matthew Garrett 0 siblings, 1 reply; 62+ messages in thread From: Robert Hancock @ 2007-07-04 0:17 UTC (permalink / raw) To: Matthew Garrett; +Cc: Alan Stern, linux-kernel, linux-pm Matthew Garrett wrote: > On Tue, Jul 03, 2007 at 06:21:42PM -0400, Alan Stern wrote: >> On Tue, 3 Jul 2007, Matthew Garrett wrote: >>> We're used to the idea of applications blocking when a resource they're >>> using goes away - NFS has done it forever. >> You persist in evading my point. I'm not worried about applications; >> I'm worried about drivers. >> >> Let me put it explicitly: You're writing a driver. You're working on >> the read, write, or probe method. You add code to check if a system >> sleep is underway. Suppose the answer is Yes -- what does your driver >> do next? > > Leave the process blocked and defer any i/o until after resume. Why does > it need to be any more complicated than that? It gets complicated when this has to be added and TESTED in EVERY driver. The implied contract for drivers previously was that their device would not get accessed after it was suspended until it had been resumed first. This proposed change violates that. I don't think this sort of handling is something that individual drivers should have to deal with (at least not ones that are part of a framework like USB, libata, etc.) -- Robert Hancock Saskatoon, SK, Canada To email, remove "nospam" from hancockr@nospamshaw.ca Home Page: http://www.roberthancock.com/ ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 0:17 ` [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway Robert Hancock @ 2007-07-04 0:34 ` Matthew Garrett 2007-07-04 10:21 ` Rafael J. Wysocki 0 siblings, 1 reply; 62+ messages in thread From: Matthew Garrett @ 2007-07-04 0:34 UTC (permalink / raw) To: Robert Hancock; +Cc: Alan Stern, linux-kernel, linux-pm On Tue, Jul 03, 2007 at 06:17:04PM -0600, Robert Hancock wrote: > Matthew Garrett wrote: > >Leave the process blocked and defer any i/o until after resume. Why does > >it need to be any more complicated than that? > > It gets complicated when this has to be added and TESTED in EVERY > driver. The implied contract for drivers previously was that their > device would not get accessed after it was suspended until it had been > resumed first. This proposed change violates that. No, that's only ever been true for ACPI systems. It's never been true elsewhere, and it won't be true for anything implementing any sort of runtime power management. > I don't think this sort of handling is something that individual drivers > should have to deal with (at least not ones that are part of a framework > like USB, libata, etc.) I'd agree there. Driver midlayers (where they exist) are the appropriate place to handle this. -- Matthew Garrett | mjg59@srcf.ucam.org ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 0:34 ` Matthew Garrett @ 2007-07-04 10:21 ` Rafael J. Wysocki 0 siblings, 0 replies; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-04 10:21 UTC (permalink / raw) To: linux-pm; +Cc: Matthew Garrett, Robert Hancock, linux-kernel, Alan Stern On Wednesday, 4 July 2007 02:34, Matthew Garrett wrote: > On Tue, Jul 03, 2007 at 06:17:04PM -0600, Robert Hancock wrote: > > Matthew Garrett wrote: > > >Leave the process blocked and defer any i/o until after resume. Why does > > >it need to be any more complicated than that? > > > > It gets complicated when this has to be added and TESTED in EVERY > > driver. The implied contract for drivers previously was that their > > device would not get accessed after it was suspended until it had been > > resumed first. This proposed change violates that. > > No, that's only ever been true for ACPI systems. Sorry, but you're mistaken. Some ARM platforms also use the suspend code in kernel/power and the 52xx powerpc too (BTW, I don't know of any ARM platforms that support suspend and don't use it). > It's never been true elsewhere, and it won't be true for anything > implementing any sort of runtime power management. There are not many drivers in the tree supporting that right now. > > I don't think this sort of handling is something that individual drivers > > should have to deal with (at least not ones that are part of a framework > > like USB, libata, etc.) > > I'd agree there. Driver midlayers (where they exist) are the appropriate > place to handle this. So perhaps we should modify them first and we can drop the freezer? Perhaps we can schedule the freezer removal (from the suspend code path), so that people have the time to rework the driver midlayers to take that into account? Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* [PATCH] Remove process freezer from suspend to RAM pathway @ 2007-07-03 4:29 Matthew Garrett 2007-07-03 5:49 ` [linux-pm] " Benjamin Herrenschmidt 2007-07-03 16:03 ` Alan Stern 0 siblings, 2 replies; 62+ messages in thread From: Matthew Garrett @ 2007-07-03 4:29 UTC (permalink / raw) To: linux-kernel; +Cc: linux-pm Suspend to RAM on a machine with / on a fuse filesystem turns out to be a screaming nightmare - either the suspend fails because syslog (for instance) can't be frozen, or the machine deadlocks for some other reason I haven't tracked down. We could "fix" fuse, or alternatively we could do what we do for suspend to RAM on other platforms (PPC and APM) and just not use the freezer. Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org> diff --git a/kernel/power/main.c b/kernel/power/main.c index 8812985..5f109d5 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c @@ -19,7 +19,6 @@ #include <linux/console.h> #include <linux/cpu.h> #include <linux/resume-trace.h> -#include <linux/freezer.h> #include <linux/vmstat.h> #include "power.h" @@ -81,11 +80,6 @@ static int suspend_prepare(suspend_state_t state) pm_prepare_console(); - if (freeze_processes()) { - error = -EAGAIN; - goto Thaw; - } - if ((free_pages = global_page_state(NR_FREE_PAGES)) < FREE_PAGE_NUMBER) { pr_debug("PM: free some memory\n"); @@ -93,7 +87,7 @@ static int suspend_prepare(suspend_state_t state) if (nr_free_pages() < FREE_PAGE_NUMBER) { error = -ENOMEM; printk(KERN_ERR "PM: No enough memory\n"); - goto Thaw; + goto Restore_console; } } @@ -118,8 +112,7 @@ static int suspend_prepare(suspend_state_t state) device_resume(); Resume_console: resume_console(); - Thaw: - thaw_processes(); + Restore_console: pm_restore_console(); return error; } @@ -170,7 +163,6 @@ static void suspend_finish(suspend_state_t state) pm_finish(state); device_resume(); resume_console(); - thaw_processes(); pm_restore_console(); } -- Matthew Garrett | mjg59@srcf.ucam.org ^ permalink raw reply related [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 4:29 Matthew Garrett @ 2007-07-03 5:49 ` Benjamin Herrenschmidt 2007-07-03 13:07 ` Rafael J. Wysocki 2007-07-03 16:03 ` Alan Stern 1 sibling, 1 reply; 62+ messages in thread From: Benjamin Herrenschmidt @ 2007-07-03 5:49 UTC (permalink / raw) To: Matthew Garrett; +Cc: linux-kernel, linux-pm On Tue, 2007-07-03 at 05:29 +0100, Matthew Garrett wrote: > Suspend to RAM on a machine with / on a fuse filesystem turns out to be > a screaming nightmare - either the suspend fails because syslog (for > instance) can't be frozen, or the machine deadlocks for some other > reason I haven't tracked down. We could "fix" fuse, or alternatively we > could do what we do for suspend to RAM on other platforms (PPC and APM) > and just not use the freezer. > > Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> (And with much pleasure :-) Cheers, Ben. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 5:49 ` [linux-pm] " Benjamin Herrenschmidt @ 2007-07-03 13:07 ` Rafael J. Wysocki 0 siblings, 0 replies; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-03 13:07 UTC (permalink / raw) To: linux-pm; +Cc: Benjamin Herrenschmidt, Matthew Garrett, linux-kernel On Tuesday, 3 July 2007 07:49, Benjamin Herrenschmidt wrote: > On Tue, 2007-07-03 at 05:29 +0100, Matthew Garrett wrote: > > Suspend to RAM on a machine with / on a fuse filesystem turns out to be > > a screaming nightmare - either the suspend fails because syslog (for > > instance) can't be frozen, or the machine deadlocks for some other > > reason I haven't tracked down. We could "fix" fuse, or alternatively we > > could do what we do for suspend to RAM on other platforms (PPC and APM) > > and just not use the freezer. > > > > Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org> > > Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> > > (And with much pleasure :-) Clashes with some code already in -mm. Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 4:29 Matthew Garrett 2007-07-03 5:49 ` [linux-pm] " Benjamin Herrenschmidt @ 2007-07-03 16:03 ` Alan Stern 2007-07-03 16:05 ` Matthew Garrett 1 sibling, 1 reply; 62+ messages in thread From: Alan Stern @ 2007-07-03 16:03 UTC (permalink / raw) To: Matthew Garrett; +Cc: linux-kernel, linux-pm On Tue, 3 Jul 2007, Matthew Garrett wrote: > Suspend to RAM on a machine with / on a fuse filesystem turns out to be > a screaming nightmare - either the suspend fails because syslog (for > instance) can't be frozen, or the machine deadlocks for some other > reason I haven't tracked down. We could "fix" fuse, or alternatively we > could do what we do for suspend to RAM on other platforms (PPC and APM) > and just not use the freezer. Quite apart from the sync() matter, _any_ synchronous call to a FUSE filesystem during STR will cause trouble. Even if the user task implementing the filesystem isn't frozen, when it tries to carry out some I/O to a suspended device it will either: block until the system wakes up, or cause the suspend to abort. Neither outcome is desirable. Alan Stern ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 16:03 ` Alan Stern @ 2007-07-03 16:05 ` Matthew Garrett 2007-07-03 16:57 ` Alan Stern 0 siblings, 1 reply; 62+ messages in thread From: Matthew Garrett @ 2007-07-03 16:05 UTC (permalink / raw) To: Alan Stern; +Cc: linux-kernel, linux-pm On Tue, Jul 03, 2007 at 12:03:33PM -0400, Alan Stern wrote: > On Tue, 3 Jul 2007, Matthew Garrett wrote: > > > Suspend to RAM on a machine with / on a fuse filesystem turns out to be > > a screaming nightmare - either the suspend fails because syslog (for > > instance) can't be frozen, or the machine deadlocks for some other > > reason I haven't tracked down. We could "fix" fuse, or alternatively we > > could do what we do for suspend to RAM on other platforms (PPC and APM) > > and just not use the freezer. > > Quite apart from the sync() matter, _any_ synchronous call to a FUSE > filesystem during STR will cause trouble. Even if the user task > implementing the filesystem isn't frozen, when it tries to carry out > some I/O to a suspended device it will either: > > block until the system wakes up, or For the suspend to RAM case, that sounds absolutely fine. -- Matthew Garrett | mjg59@srcf.ucam.org ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 16:05 ` Matthew Garrett @ 2007-07-03 16:57 ` Alan Stern 2007-07-03 17:02 ` Matthew Garrett 0 siblings, 1 reply; 62+ messages in thread From: Alan Stern @ 2007-07-03 16:57 UTC (permalink / raw) To: Matthew Garrett; +Cc: linux-kernel, linux-pm On Tue, 3 Jul 2007, Matthew Garrett wrote: > On Tue, Jul 03, 2007 at 12:03:33PM -0400, Alan Stern wrote: > > On Tue, 3 Jul 2007, Matthew Garrett wrote: > > > > > Suspend to RAM on a machine with / on a fuse filesystem turns out to be > > > a screaming nightmare - either the suspend fails because syslog (for > > > instance) can't be frozen, or the machine deadlocks for some other > > > reason I haven't tracked down. We could "fix" fuse, or alternatively we > > > could do what we do for suspend to RAM on other platforms (PPC and APM) > > > and just not use the freezer. > > > > Quite apart from the sync() matter, _any_ synchronous call to a FUSE > > filesystem during STR will cause trouble. Even if the user task > > implementing the filesystem isn't frozen, when it tries to carry out > > some I/O to a suspended device it will either: > > > > block until the system wakes up, or > > For the suspend to RAM case, that sounds absolutely fine. It's not so good when your suspend process has to wait for the call to complete! Alan Stern ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 16:57 ` Alan Stern @ 2007-07-03 17:02 ` Matthew Garrett 2007-07-03 19:33 ` Alan Stern 0 siblings, 1 reply; 62+ messages in thread From: Matthew Garrett @ 2007-07-03 17:02 UTC (permalink / raw) To: Alan Stern; +Cc: linux-kernel, linux-pm On Tue, Jul 03, 2007 at 12:57:17PM -0400, Alan Stern wrote: > On Tue, 3 Jul 2007, Matthew Garrett wrote: > > On Tue, Jul 03, 2007 at 12:03:33PM -0400, Alan Stern wrote: > > > Quite apart from the sync() matter, _any_ synchronous call to a FUSE > > > filesystem during STR will cause trouble. Even if the user task > > > implementing the filesystem isn't frozen, when it tries to carry out > > > some I/O to a suspended device it will either: > > > > > > block until the system wakes up, or > > > > For the suspend to RAM case, that sounds absolutely fine. > > It's not so good when your suspend process has to wait for the call to > complete! Why would it have to? Sorry, I suspect I'm missing something obvious here. -- Matthew Garrett | mjg59@srcf.ucam.org ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 17:02 ` Matthew Garrett @ 2007-07-03 19:33 ` Alan Stern 2007-07-03 19:42 ` Matthew Garrett 0 siblings, 1 reply; 62+ messages in thread From: Alan Stern @ 2007-07-03 19:33 UTC (permalink / raw) To: Matthew Garrett; +Cc: linux-kernel, linux-pm On Tue, 3 Jul 2007, Matthew Garrett wrote: > On Tue, Jul 03, 2007 at 12:57:17PM -0400, Alan Stern wrote: > > On Tue, 3 Jul 2007, Matthew Garrett wrote: > > > On Tue, Jul 03, 2007 at 12:03:33PM -0400, Alan Stern wrote: > > > > Quite apart from the sync() matter, _any_ synchronous call to a FUSE > > > > filesystem during STR will cause trouble. Even if the user task > > > > implementing the filesystem isn't frozen, when it tries to carry out > > > > some I/O to a suspended device it will either: > > > > > > > > block until the system wakes up, or > > > > > > For the suspend to RAM case, that sounds absolutely fine. > > > > It's not so good when your suspend process has to wait for the call to > > complete! > > Why would it have to? Sorry, I suspect I'm missing something obvious > here. Well, the sys_sync() that caused your original problem did exactly that. It's the reason you get deadlocks, right? I agree that in general the suspend process should not have to wait for a userspace callback to complete. Indeed, there's no particular reason that anything running during STR should have to wait for something in userspace to complete. Given that fact, I don't see anything wrong with freezing userspace when doing STR. Alan Stern ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 19:33 ` Alan Stern @ 2007-07-03 19:42 ` Matthew Garrett 2007-07-03 19:54 ` Alan Stern 0 siblings, 1 reply; 62+ messages in thread From: Matthew Garrett @ 2007-07-03 19:42 UTC (permalink / raw) To: Alan Stern; +Cc: linux-kernel, linux-pm On Tue, Jul 03, 2007 at 03:33:40PM -0400, Alan Stern wrote: > On Tue, 3 Jul 2007, Matthew Garrett wrote: > > > On Tue, Jul 03, 2007 at 12:57:17PM -0400, Alan Stern wrote: > > > On Tue, 3 Jul 2007, Matthew Garrett wrote: > > > > For the suspend to RAM case, that sounds absolutely fine. > > > > > > It's not so good when your suspend process has to wait for the call to > > > complete! > > > > Why would it have to? Sorry, I suspect I'm missing something obvious > > here. > > Well, the sys_sync() that caused your original problem did exactly > that. It's the reason you get deadlocks, right? The sys_sync is unnecessary in the first case. There shouldn't be anything in the suspend path that's going to require userspace access to a device after that device has been suspended. > I agree that in general the suspend process should not have to wait for > a userspace callback to complete. Indeed, there's no particular > reason that anything running during STR should have to wait for > something in userspace to complete. Given that fact, I don't see > anything wrong with freezing userspace when doing STR. There's nothing wrong with it as such, it's just that our implementation appears to suck in a myriad of small ways that keep cropping up and biting people. Even without the sys_sync(), freezing processes results in the suspend failing because syslog is stuck in D state and won't go into the refrigerator. -- Matthew Garrett | mjg59@srcf.ucam.org ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 19:42 ` Matthew Garrett @ 2007-07-03 19:54 ` Alan Stern 2007-07-03 20:23 ` Matthew Garrett 0 siblings, 1 reply; 62+ messages in thread From: Alan Stern @ 2007-07-03 19:54 UTC (permalink / raw) To: Matthew Garrett; +Cc: linux-kernel, linux-pm On Tue, 3 Jul 2007, Matthew Garrett wrote: > > I agree that in general the suspend process should not have to wait for > > a userspace callback to complete. Indeed, there's no particular > > reason that anything running during STR should have to wait for > > something in userspace to complete. Given that fact, I don't see > > anything wrong with freezing userspace when doing STR. > > There's nothing wrong with it as such, it's just that our implementation > appears to suck in a myriad of small ways that keep cropping up and > biting people. Even without the sys_sync(), freezing processes results > in the suspend failing because syslog is stuck in D state and won't go > into the refrigerator. Okay, I can believe that. The proper response then is to fix the freezer, not eliminate it. Has the syslog problem been reported on linux-pm? I don't recall hearing of it before. Alan Stern ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 19:54 ` Alan Stern @ 2007-07-03 20:23 ` Matthew Garrett 2007-07-03 21:10 ` Alan Stern 0 siblings, 1 reply; 62+ messages in thread From: Matthew Garrett @ 2007-07-03 20:23 UTC (permalink / raw) To: Alan Stern; +Cc: linux-kernel, linux-pm On Tue, Jul 03, 2007 at 03:54:55PM -0400, Alan Stern wrote: > On Tue, 3 Jul 2007, Matthew Garrett wrote: > > There's nothing wrong with it as such, it's just that our implementation > > appears to suck in a myriad of small ways that keep cropping up and > > biting people. Even without the sys_sync(), freezing processes results > > in the suspend failing because syslog is stuck in D state and won't go > > into the refrigerator. > > Okay, I can believe that. The proper response then is to fix the > freezer, not eliminate it. Has the syslog problem been reported on > linux-pm? I don't recall hearing of it before. See the start of this thread. It's just not clear what the freezer buys us - removing it gets rid of a load of subtle issues and complexity, and turns system suspend into something that looks more like runtime suspend (which might then encourage people to get runtime suspend right...) -- Matthew Garrett | mjg59@srcf.ucam.org ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 20:23 ` Matthew Garrett @ 2007-07-03 21:10 ` Alan Stern 2007-07-03 21:12 ` Matthew Garrett 0 siblings, 1 reply; 62+ messages in thread From: Alan Stern @ 2007-07-03 21:10 UTC (permalink / raw) To: Matthew Garrett; +Cc: linux-kernel, linux-pm On Tue, 3 Jul 2007, Matthew Garrett wrote: > See the start of this thread. It's just not clear what the freezer buys > us - removing it gets rid of a load of subtle issues and complexity, and > turns system suspend into something that looks more like runtime > suspend (which might then encourage people to get runtime suspend > right...) No, no -- you have it exactly backwards. Removing the freezer turns STR into something _less_ like runtime suspend, because it adds the requirement that devices must not automatically be resumed when an I/O request arrives. Alan Stern ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 21:10 ` Alan Stern @ 2007-07-03 21:12 ` Matthew Garrett 2007-07-03 21:16 ` Alan Stern 0 siblings, 1 reply; 62+ messages in thread From: Matthew Garrett @ 2007-07-03 21:12 UTC (permalink / raw) To: Alan Stern; +Cc: linux-kernel, linux-pm On Tue, Jul 03, 2007 at 05:10:08PM -0400, Alan Stern wrote: > No, no -- you have it exactly backwards. Removing the freezer turns > STR into something _less_ like runtime suspend, because it adds the > requirement that devices must not automatically be resumed when an I/O > request arrives. But that's fine - "Are we undergoing a systemwide suspend" is an easy question to ask. Freezing processes instead means that most of those paths will never be tested. -- Matthew Garrett | mjg59@srcf.ucam.org ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 21:12 ` Matthew Garrett @ 2007-07-03 21:16 ` Alan Stern 2007-07-03 21:20 ` Matthew Garrett 0 siblings, 1 reply; 62+ messages in thread From: Alan Stern @ 2007-07-03 21:16 UTC (permalink / raw) To: Matthew Garrett; +Cc: linux-kernel, linux-pm On Tue, 3 Jul 2007, Matthew Garrett wrote: > On Tue, Jul 03, 2007 at 05:10:08PM -0400, Alan Stern wrote: > > > No, no -- you have it exactly backwards. Removing the freezer turns > > STR into something _less_ like runtime suspend, because it adds the > > requirement that devices must not automatically be resumed when an I/O > > request arrives. > > But that's fine - "Are we undergoing a systemwide suspend" is an easy > question to ask. Freezing processes instead means that most of those > paths will never be tested. The question is easy to ask, but it's not so easy to figure out what you should do if the answer is Yes. Freezing processes instead means that those "untested" paths -- in many, many drivers -- won't have to exist at all. Alan Stern ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 21:16 ` Alan Stern @ 2007-07-03 21:20 ` Matthew Garrett 2007-07-03 21:37 ` Rafael J. Wysocki 2007-07-03 22:21 ` Alan Stern 0 siblings, 2 replies; 62+ messages in thread From: Matthew Garrett @ 2007-07-03 21:20 UTC (permalink / raw) To: Alan Stern; +Cc: linux-kernel, linux-pm On Tue, Jul 03, 2007 at 05:16:37PM -0400, Alan Stern wrote: > On Tue, 3 Jul 2007, Matthew Garrett wrote: > > But that's fine - "Are we undergoing a systemwide suspend" is an easy > > question to ask. Freezing processes instead means that most of those > > paths will never be tested. > > The question is easy to ask, but it's not so easy to figure out what > you should do if the answer is Yes. Freezing processes instead means > that those "untested" paths -- in many, many drivers -- won't have to > exist at all. We're used to the idea of applications blocking when a resource they're using goes away - NFS has done it forever. -- Matthew Garrett | mjg59@srcf.ucam.org ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 21:20 ` Matthew Garrett @ 2007-07-03 21:37 ` Rafael J. Wysocki 2007-07-03 21:36 ` Matthew Garrett 2007-07-04 3:38 ` Paul Mackerras 2007-07-03 22:21 ` Alan Stern 1 sibling, 2 replies; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-03 21:37 UTC (permalink / raw) To: Matthew Garrett; +Cc: Alan Stern, linux-kernel, linux-pm On Tuesday, 3 July 2007 23:20, Matthew Garrett wrote: > On Tue, Jul 03, 2007 at 05:16:37PM -0400, Alan Stern wrote: > > On Tue, 3 Jul 2007, Matthew Garrett wrote: > > > But that's fine - "Are we undergoing a systemwide suspend" is an easy > > > question to ask. Freezing processes instead means that most of those > > > paths will never be tested. > > > > The question is easy to ask, but it's not so easy to figure out what > > you should do if the answer is Yes. Freezing processes instead means > > that those "untested" paths -- in many, many drivers -- won't have to > > exist at all. > > We're used to the idea of applications blocking when a resource they're > using goes away - NFS has done it forever. Now, please tell me how many driver writers even thought that something might try to access their devices after .suspend() had been executed (or even whilie it was being executed)? Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 21:37 ` Rafael J. Wysocki @ 2007-07-03 21:36 ` Matthew Garrett 2007-07-03 21:47 ` Oliver Neukum 2007-07-03 22:46 ` Rafael J. Wysocki 2007-07-04 3:38 ` Paul Mackerras 1 sibling, 2 replies; 62+ messages in thread From: Matthew Garrett @ 2007-07-03 21:36 UTC (permalink / raw) To: Rafael J. Wysocki; +Cc: Alan Stern, linux-kernel, linux-pm On Tue, Jul 03, 2007 at 11:37:51PM +0200, Rafael J. Wysocki wrote: > On Tuesday, 3 July 2007 23:20, Matthew Garrett wrote: > > We're used to the idea of applications blocking when a resource they're > > using goes away - NFS has done it forever. > > Now, please tell me how many driver writers even thought that something > might try to access their devices after .suspend() had been executed (or > even whilie it was being executed)? Every single driver that fails under those conditions is already broken, and has been forever. It's likely that they're broken under run-time suspend, too. -- Matthew Garrett | mjg59@srcf.ucam.org ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 21:36 ` Matthew Garrett @ 2007-07-03 21:47 ` Oliver Neukum 2007-07-03 22:46 ` Rafael J. Wysocki 1 sibling, 0 replies; 62+ messages in thread From: Oliver Neukum @ 2007-07-03 21:47 UTC (permalink / raw) To: Matthew Garrett; +Cc: Rafael J. Wysocki, Alan Stern, linux-kernel, linux-pm Am Dienstag, 3. Juli 2007 schrieb Matthew Garrett: > On Tue, Jul 03, 2007 at 11:37:51PM +0200, Rafael J. Wysocki wrote: > > On Tuesday, 3 July 2007 23:20, Matthew Garrett wrote: > > > We're used to the idea of applications blocking when a resource they're > > > using goes away - NFS has done it forever. > > > > Now, please tell me how many driver writers even thought that something > > might try to access their devices after .suspend() had been executed (or > > even whilie it was being executed)? > > Every single driver that fails under those conditions is already broken, > and has been forever. It's likely that they're broken under run-time > suspend, too. There _is_ no runtime syspend in working condition. The interface to do that has been scheduled for removal. Oliver ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 21:36 ` Matthew Garrett 2007-07-03 21:47 ` Oliver Neukum @ 2007-07-03 22:46 ` Rafael J. Wysocki 1 sibling, 0 replies; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-03 22:46 UTC (permalink / raw) To: Matthew Garrett; +Cc: Alan Stern, linux-kernel, linux-pm On Tuesday, 3 July 2007 23:36, Matthew Garrett wrote: > On Tue, Jul 03, 2007 at 11:37:51PM +0200, Rafael J. Wysocki wrote: > > On Tuesday, 3 July 2007 23:20, Matthew Garrett wrote: > > > We're used to the idea of applications blocking when a resource they're > > > using goes away - NFS has done it forever. > > > > Now, please tell me how many driver writers even thought that something > > might try to access their devices after .suspend() had been executed (or > > even whilie it was being executed)? > > Every single driver that fails under those conditions is already broken, > and has been forever. It's likely that they're broken under run-time > suspend, too. Well, I won't argue with that, but do you actually know how many drivers are broken this way? Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 21:37 ` Rafael J. Wysocki 2007-07-03 21:36 ` Matthew Garrett @ 2007-07-04 3:38 ` Paul Mackerras 2007-07-04 10:42 ` Rafael J. Wysocki 1 sibling, 1 reply; 62+ messages in thread From: Paul Mackerras @ 2007-07-04 3:38 UTC (permalink / raw) To: Rafael J. Wysocki; +Cc: Matthew Garrett, linux-pm, linux-kernel Rafael J. Wysocki writes: > Now, please tell me how many driver writers even thought that something > might try to access their devices after .suspend() had been executed (or > even whilie it was being executed)? Well, I believe that the USB framework copes with this, except possibly for some corner cases like the example that Alan Stern posted. The fact that powerbooks suspend and resume without the freezer implies that the IDE framework, the console code and the framebuffer code cope correctly (though possibly not all chipset drivers). So I think that a lot of the frameworks already get it right. Of course the quality of the low-level chipset drivers has always been pretty variable. :) Paul. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 3:38 ` Paul Mackerras @ 2007-07-04 10:42 ` Rafael J. Wysocki 2007-07-04 10:58 ` Paul Mackerras 0 siblings, 1 reply; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-04 10:42 UTC (permalink / raw) To: Paul Mackerras; +Cc: Matthew Garrett, linux-pm, linux-kernel On Wednesday, 4 July 2007 05:38, Paul Mackerras wrote: > Rafael J. Wysocki writes: > > > Now, please tell me how many driver writers even thought that something > > might try to access their devices after .suspend() had been executed (or > > even whilie it was being executed)? > > Well, I believe that the USB framework copes with this, except > possibly for some corner cases like the example that Alan Stern > posted. The fact that powerbooks suspend and resume without the > freezer implies that the IDE framework, the console code and the > framebuffer code cope correctly (though possibly not all chipset > drivers). Okay, so in fact you don't know. And that's my point in this thread. I won't fight for the freezer for what it's worth, but let's do things in the _right_ _order_. For example, let's make sure that by making the $subject change we won't introduce (too many) regressions and fix the frameworks that don't get it right. Using the problems with FUSE as an argument for making this change immediately doesn't seem to be right to me. > So I think that a lot of the frameworks already get it right. Of > course the quality of the low-level chipset drivers has always been > pretty variable. :) Yes, but that's another issue. Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 10:42 ` Rafael J. Wysocki @ 2007-07-04 10:58 ` Paul Mackerras 2007-07-04 11:25 ` Rafael J. Wysocki 0 siblings, 1 reply; 62+ messages in thread From: Paul Mackerras @ 2007-07-04 10:58 UTC (permalink / raw) To: Rafael J. Wysocki; +Cc: Matthew Garrett, linux-pm, linux-kernel Rafael J. Wysocki writes: > Okay, so in fact you don't know. Don't know what exactly? It has been a while since I had my head in the USB code. I assume it's being maintained by competent people. :) > And that's my point in this thread. Well, I'd be interested in hearing from Matthew whether he has actually been using his patch in Ubuntu, and if so, what bug reports he has been receiving related to it? > I won't fight for the freezer for what it's worth, but let's do things in the > _right_ _order_. For example, let's make sure that by making the $subject > change we won't introduce (too many) regressions and fix the frameworks > that don't get it right. > > Using the problems with FUSE as an argument for making this change immediately > doesn't seem to be right to me. I can see your point, but I won't be moving powermac over to use the generic suspend path until the freezer is gone, since I am pretty confident that the drivers we care about behave sensibly, and I have seen a lot of traffic on linux-pm and lkml about problems caused by the freezer. Also, no-one has yet answered my fundamental objection to the freezer, which is that the very kernel threads we would want to freeze are often the same ones that we must not freeze, namely the threads that issue I/O requests in order to satisfy incoming I/O requests. If there was an automatic way to construct the graph of dependencies (including data flows) between tasks, and derive an ordering for freezing that guarantees that all I/Os will get completed without deadlocks, then I could accept the freezer. But we don't have anything like that. Paul. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 10:58 ` Paul Mackerras @ 2007-07-04 11:25 ` Rafael J. Wysocki 2007-07-04 11:34 ` Paul Mackerras ` (2 more replies) 0 siblings, 3 replies; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-04 11:25 UTC (permalink / raw) To: Paul Mackerras; +Cc: Matthew Garrett, linux-pm, linux-kernel On Wednesday, 4 July 2007 12:58, Paul Mackerras wrote: > Rafael J. Wysocki writes: > > > Okay, so in fact you don't know. > > Don't know what exactly? How many drivers will be adversely affected by the $subject change. > It has been a while since I had my head in the USB code. I assume > it's being maintained by competent people. :) I'm not talking about USB. > > And that's my point in this thread. > > Well, I'd be interested in hearing from Matthew whether he has > actually been using his patch in Ubuntu, and if so, what bug reports > he has been receiving related to it? Me too. > > I won't fight for the freezer for what it's worth, but let's do things in the > > _right_ _order_. For example, let's make sure that by making the $subject > > change we won't introduce (too many) regressions and fix the frameworks > > that don't get it right. > > > > Using the problems with FUSE as an argument for making this change immediately > > doesn't seem to be right to me. > > I can see your point, but I won't be moving powermac over to use the > generic suspend path until the freezer is gone, since I am pretty > confident that the drivers we care about behave sensibly, and I have > seen a lot of traffic on linux-pm and lkml about problems caused by > the freezer. They are mostly related to kernel threads, that we've already agreed no to freeze (except for the ones that want that, but they will be responsible for getting everything right). The initial patches for that are in -mm and more will come. > Also, no-one has yet answered my fundamental objection to the freezer, > which is that the very kernel threads we would want to freeze are > often the same ones that we must not freeze, namely the threads that > issue I/O requests in order to satisfy incoming I/O requests. See above. We're moving away from freezing kernel threads. > If there was an automatic way to construct the graph of dependencies > (including data flows) between tasks, and derive an ordering for > freezing that guarantees that all I/Os will get completed without > deadlocks, then I could accept the freezer. But we don't have > anything like that. No we don't. Still, my position is this: 1) The freezer (in the modified form, with the freezing of kernel threads limited to the ones that want to be frozen) is needed for hibernation. 2) The freezer is generally not needed for suspend, _but_ there are drivers in the tree that rely on it being used. Thus, at some point in time we can remove the freezer from the suspend code path, _but_ no sooner than we are sure that the majority of drivers is prepared for that. 3) In the meantime, if there are freezer-related problems, they should be fixed rather than used as arguments for immediate removal of it, because of 2). Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 11:25 ` Rafael J. Wysocki @ 2007-07-04 11:34 ` Paul Mackerras 2007-07-04 14:12 ` Dmitry Torokhov 2007-07-04 15:38 ` Alan Stern 2007-07-04 11:51 ` Miklos Szeredi 2007-07-04 12:41 ` Theodore Tso 2 siblings, 2 replies; 62+ messages in thread From: Paul Mackerras @ 2007-07-04 11:34 UTC (permalink / raw) To: Rafael J. Wysocki; +Cc: Matthew Garrett, linux-pm, linux-kernel Rafael J. Wysocki writes: > They are mostly related to kernel threads, that we've already agreed no to > freeze (except for the ones that want that, but they will be responsible for > getting everything right). The initial patches for that are in -mm and more > will come. Serious question: which kernel threads would actually want to be frozen? Threads that do no I/O at all don't care about suspend/resume and don't need to be frozen in any case. Threads that issue I/O requests in order to service incoming I/O requests can't be frozen because of the possibility of deadlock. Which leaves threads that do I/O just for the fun of it. :) What am I missing? > > Also, no-one has yet answered my fundamental objection to the freezer, > > which is that the very kernel threads we would want to freeze are > > often the same ones that we must not freeze, namely the threads that > > issue I/O requests in order to satisfy incoming I/O requests. > > See above. We're moving away from freezing kernel threads. I believe the distinction between threads and user processes is a false one, because user processes can now do things that were formerly only doable by kernel threads. > > If there was an automatic way to construct the graph of dependencies > > (including data flows) between tasks, and derive an ordering for > > freezing that guarantees that all I/Os will get completed without > > deadlocks, then I could accept the freezer. But we don't have > > anything like that. > > No we don't. > > Still, my position is this: > > 1) The freezer (in the modified form, with the freezing of kernel threads > limited to the ones that want to be frozen) is needed for hibernation. > > 2) The freezer is generally not needed for suspend, _but_ there are drivers > in the tree that rely on it being used. Thus, at some point in time we can Do you know which drivers they are? I'm happy to help hack things into shape. > remove the freezer from the suspend code path, _but_ no sooner than we are > sure that the majority of drivers is prepared for that. > > 3) In the meantime, if there are freezer-related problems, they should be > fixed rather than used as arguments for immediate removal of it, because of 2). I don't know how you can make the freezer completely deadlock-free while still providing the guarantee that some drivers currently need, without constructing the dependency graph I mentioned. Paul. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 11:34 ` Paul Mackerras @ 2007-07-04 14:12 ` Dmitry Torokhov 2007-07-04 15:38 ` Alan Stern 1 sibling, 0 replies; 62+ messages in thread From: Dmitry Torokhov @ 2007-07-04 14:12 UTC (permalink / raw) To: Paul Mackerras; +Cc: Rafael J. Wysocki, Matthew Garrett, linux-pm, linux-kernel On 7/4/07, Paul Mackerras <paulus@samba.org> wrote: > Rafael J. Wysocki writes: > > > They are mostly related to kernel threads, that we've already agreed no to > > freeze (except for the ones that want that, but they will be responsible for > > getting everything right). The initial patches for that are in -mm and more > > will come. > > Serious question: which kernel threads would actually want to be > frozen? > > Threads that do no I/O at all don't care about suspend/resume and > don't need to be frozen in any case. Threads that issue I/O requests > in order to service incoming I/O requests can't be frozen because of > the possibility of deadlock. Which leaves threads that do I/O just > for the fun of it. :) > > What am I missing? > I like kseriod and kgameportd to be frozen. If fast resume of serio port fails we kick the task of full resume to kseriod. But when we hibernate and all the devices are resumed again so snapshot can be written I don't care if touchpad failed to resume - it can be dealt with later, when system is actually resumes. So I like that by freezing I do not delay hibernation and all requests get simply discarded as they are not in the image. This mostly affects hibernation though. Having these threads frozen also guarantees that serio/gameport device tree is stable during susped/resume and I can process outstanding requests later, when system is fully up. -- Dmitry ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 11:34 ` Paul Mackerras 2007-07-04 14:12 ` Dmitry Torokhov @ 2007-07-04 15:38 ` Alan Stern 2007-07-04 19:07 ` Alan Stern 1 sibling, 1 reply; 62+ messages in thread From: Alan Stern @ 2007-07-04 15:38 UTC (permalink / raw) To: Paul Mackerras; +Cc: Rafael J. Wysocki, Matthew Garrett, linux-pm, linux-kernel On Wed, 4 Jul 2007, Paul Mackerras wrote: > Rafael J. Wysocki writes: > > > They are mostly related to kernel threads, that we've already agreed no to > > freeze (except for the ones that want that, but they will be responsible for > > getting everything right). The initial patches for that are in -mm and more > > will come. > > Serious question: which kernel threads would actually want to be > frozen? khubd and ksuspend_usbd. > Threads that do no I/O at all don't care about suspend/resume and > don't need to be frozen in any case. Threads that issue I/O requests > in order to service incoming I/O requests can't be frozen because of > the possibility of deadlock. Which leaves threads that do I/O just > for the fun of it. :) > > What am I missing? Those two threads will try to resume USB devices in response to wakeup requests. Such requests arrive during a suspend or resume transition more often than one would expect. If the resume attempt occurs before the host controller has been suspended, it will abort the system suspend. If it occurs after the host controller is suspended (and before the controller resumes) it will fail and try to unregister the USB device -- something else we don't like happening while the sytem is only partially up (not to mention the annoyance caused by the unregistration of a perfectly functional device). Alan Stern ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 15:38 ` Alan Stern @ 2007-07-04 19:07 ` Alan Stern 0 siblings, 0 replies; 62+ messages in thread From: Alan Stern @ 2007-07-04 19:07 UTC (permalink / raw) To: Paul Mackerras; +Cc: Matthew Garrett, linux-pm, linux-kernel On Wed, 4 Jul 2007, Alan Stern wrote: > > Threads that do no I/O at all don't care about suspend/resume and > > don't need to be frozen in any case. Threads that issue I/O requests > > in order to service incoming I/O requests can't be frozen because of > > the possibility of deadlock. Which leaves threads that do I/O just > > for the fun of it. :) > > > > What am I missing? > > Those two threads will try to resume USB devices in response to wakeup > requests. Such requests arrive during a suspend or resume transition > more often than one would expect. > > If the resume attempt occurs before the host controller has been > suspended, it will abort the system suspend. If it occurs after the > host controller is suspended (and before the controller resumes) it > will fail and try to unregister the USB device -- something else we > don't like happening while the sytem is only partially up (not to > mention the annoyance caused by the unregistration of a perfectly > functional device). Actually the situation may not be quite this bad any more. It's been a while since I tried suspending a system without freezing khubd and ksuspend_usbd. But Miklos's mail shows that problems can and will occur. Alan Stern ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 11:25 ` Rafael J. Wysocki 2007-07-04 11:34 ` Paul Mackerras @ 2007-07-04 11:51 ` Miklos Szeredi 2007-07-04 14:41 ` Rafael J. Wysocki 2007-07-04 15:42 ` Alan Stern 2007-07-04 12:41 ` Theodore Tso 2 siblings, 2 replies; 62+ messages in thread From: Miklos Szeredi @ 2007-07-04 11:51 UTC (permalink / raw) To: rjw; +Cc: paulus, mjg59, linux-pm, linux-kernel > Still, my position is this: > > 1) The freezer (in the modified form, with the freezing of kernel threads > limited to the ones that want to be frozen) is needed for hibernation. > > 2) The freezer is generally not needed for suspend, _but_ there are drivers > in the tree that rely on it being used. Thus, at some point in time we can > remove the freezer from the suspend code path, _but_ no sooner than we are > sure that the majority of drivers is prepared for that. And we won't know if drivers are OK until we remove the freezer, catch-22. So I think we need to disable the freezer at least in -mm and/or optionally in -linus. I applied Matthew's patch, and suspend did in fact stop working (thinkpad t60), but there was nothing catastrophic. Here's the dmesg if somebody is interested: Suspending console(s) usb_endpoint usbdev5.3_ep83: PM: suspend 0->2, parent 5-2:1.0 already 2 usb_endpoint usbdev5.3_ep02: PM: suspend 0->2, parent 5-2:1.0 already 2 usb_endpoint usbdev5.3_ep81: PM: suspend 0->2, parent 5-2:1.0 already 2 hub 2-0:1.0: suspend error -16 suspend_device(): usb_suspend+0x0/0x1c() returns -16 Could not suspend device usb2: error -16 usb_endpoint usbdev5.3_ep81: PM: resume from 0, parent 5-2:1.0 still 2 usb_endpoint usbdev5.3_ep02: PM: resume from 0, parent 5-2:1.0 still 2 usb_endpoint usbdev5.3_ep83: PM: resume from 0, parent 5-2:1.0 still 2 Some devices failed to suspend Miklos ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 11:51 ` Miklos Szeredi @ 2007-07-04 14:41 ` Rafael J. Wysocki 2007-07-04 14:45 ` Miklos Szeredi 2007-07-04 15:42 ` Alan Stern 1 sibling, 1 reply; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-04 14:41 UTC (permalink / raw) To: Miklos Szeredi; +Cc: paulus, mjg59, linux-pm, linux-kernel On Wednesday, 4 July 2007 13:51, Miklos Szeredi wrote: > > Still, my position is this: > > > > 1) The freezer (in the modified form, with the freezing of kernel threads > > limited to the ones that want to be frozen) is needed for hibernation. > > > > 2) The freezer is generally not needed for suspend, _but_ there are drivers > > in the tree that rely on it being used. Thus, at some point in time we can > > remove the freezer from the suspend code path, _but_ no sooner than we are > > sure that the majority of drivers is prepared for that. > > And we won't know if drivers are OK until we remove the freezer, > catch-22. I disagree. We can learn that by auditing the drivers. > So I think we need to disable the freezer at least in -mm and/or > optionally in -linus. > > I applied Matthew's patch, and suspend did in fact stop working > (thinkpad t60), but there was nothing catastrophic. Here's the dmesg > if somebody is interested: > > Suspending console(s) > usb_endpoint usbdev5.3_ep83: PM: suspend 0->2, parent 5-2:1.0 already 2 > usb_endpoint usbdev5.3_ep02: PM: suspend 0->2, parent 5-2:1.0 already 2 > usb_endpoint usbdev5.3_ep81: PM: suspend 0->2, parent 5-2:1.0 already 2 > hub 2-0:1.0: suspend error -16 > suspend_device(): usb_suspend+0x0/0x1c() returns -16 > Could not suspend device usb2: error -16 > usb_endpoint usbdev5.3_ep81: PM: resume from 0, parent 5-2:1.0 still 2 > usb_endpoint usbdev5.3_ep02: PM: resume from 0, parent 5-2:1.0 still 2 > usb_endpoint usbdev5.3_ep83: PM: resume from 0, parent 5-2:1.0 still 2 > Some devices failed to suspend No, it's not catastrophic, but something like this will result in a bug report with "regression" in the subject. Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 14:41 ` Rafael J. Wysocki @ 2007-07-04 14:45 ` Miklos Szeredi 2007-07-04 15:03 ` Oliver Neukum 0 siblings, 1 reply; 62+ messages in thread From: Miklos Szeredi @ 2007-07-04 14:45 UTC (permalink / raw) To: rjw; +Cc: paulus, mjg59, linux-pm, linux-kernel > On Wednesday, 4 July 2007 13:51, Miklos Szeredi wrote: > > > Still, my position is this: > > > > > > 1) The freezer (in the modified form, with the freezing of kernel threads > > > limited to the ones that want to be frozen) is needed for hibernation. > > > > > > 2) The freezer is generally not needed for suspend, _but_ there are drivers > > > in the tree that rely on it being used. Thus, at some point in time we can > > > remove the freezer from the suspend code path, _but_ no sooner than we are > > > sure that the majority of drivers is prepared for that. > > > > And we won't know if drivers are OK until we remove the freezer, > > catch-22. > > I disagree. We can learn that by auditing the drivers. In theory, yes. But it scales far worse than letting everyone experiment/report/fix problems as they crop up. > > So I think we need to disable the freezer at least in -mm and/or > > optionally in -linus. > > > > I applied Matthew's patch, and suspend did in fact stop working > > (thinkpad t60), but there was nothing catastrophic. Here's the dmesg > > if somebody is interested: > > > > Suspending console(s) > > usb_endpoint usbdev5.3_ep83: PM: suspend 0->2, parent 5-2:1.0 already 2 > > usb_endpoint usbdev5.3_ep02: PM: suspend 0->2, parent 5-2:1.0 already 2 > > usb_endpoint usbdev5.3_ep81: PM: suspend 0->2, parent 5-2:1.0 already 2 > > hub 2-0:1.0: suspend error -16 > > suspend_device(): usb_suspend+0x0/0x1c() returns -16 > > Could not suspend device usb2: error -16 > > usb_endpoint usbdev5.3_ep81: PM: resume from 0, parent 5-2:1.0 still 2 > > usb_endpoint usbdev5.3_ep02: PM: resume from 0, parent 5-2:1.0 still 2 > > usb_endpoint usbdev5.3_ep83: PM: resume from 0, parent 5-2:1.0 still 2 > > Some devices failed to suspend > > No, it's not catastrophic, but something like this will result in a > bug report with "regression" in the subject. If it was due to a config option marked experimental, then it's not a regression. It's a bug, and it needs looking at, but while the freezer is not completely removed, it's not a serious problem. So I agree with Ted, a config option (or maybe a runtime sysctl tunable) to turn off the freezer for suspend should only have positive effects. Miklos ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 14:45 ` Miklos Szeredi @ 2007-07-04 15:03 ` Oliver Neukum 2007-07-04 15:17 ` Rafael J. Wysocki 0 siblings, 1 reply; 62+ messages in thread From: Oliver Neukum @ 2007-07-04 15:03 UTC (permalink / raw) To: Miklos Szeredi; +Cc: rjw, paulus, mjg59, linux-pm, linux-kernel Am Mittwoch, 4. Juli 2007 schrieb Miklos Szeredi: > > > And we won't know if drivers are OK until we remove the freezer, > > > catch-22. > > > > I disagree. We can learn that by auditing the drivers. > > In theory, yes. But it scales far worse than letting everyone > experiment/report/fix problems as they crop up. You will open many but small races. This would be very painfull to debug. Regards Oliver ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 15:03 ` Oliver Neukum @ 2007-07-04 15:17 ` Rafael J. Wysocki 2007-07-05 0:29 ` Paul Mackerras 0 siblings, 1 reply; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-04 15:17 UTC (permalink / raw) To: Oliver Neukum; +Cc: Miklos Szeredi, paulus, mjg59, linux-pm, linux-kernel On Wednesday, 4 July 2007 17:03, Oliver Neukum wrote: > Am Mittwoch, 4. Juli 2007 schrieb Miklos Szeredi: > > > > And we won't know if drivers are OK until we remove the freezer, > > > > catch-22. > > > > > > I disagree. We can learn that by auditing the drivers. > > > > In theory, yes. But it scales far worse than letting everyone > > experiment/report/fix problems as they crop up. > > You will open many but small races. This would be very painfull > to debug. Agreed. They will not trigger 100% of the time, but sporadically and generally at random. At least the freezer problems are reproducible. ;-) Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 15:17 ` Rafael J. Wysocki @ 2007-07-05 0:29 ` Paul Mackerras 2007-07-05 12:29 ` Rafael J. Wysocki 2007-07-12 15:13 ` Pavel Machek 0 siblings, 2 replies; 62+ messages in thread From: Paul Mackerras @ 2007-07-05 0:29 UTC (permalink / raw) To: Rafael J. Wysocki Cc: Oliver Neukum, Miklos Szeredi, mjg59, linux-pm, linux-kernel Rafael J. Wysocki writes: > They will not trigger 100% of the time, but sporadically and generally at > random. > > At least the freezer problems are reproducible. ;-) Our experience with powermacs has been that it isn't actually all that hard to get it right for the drivers you care about. Paul. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-05 0:29 ` Paul Mackerras @ 2007-07-05 12:29 ` Rafael J. Wysocki 2007-07-12 15:13 ` Pavel Machek 1 sibling, 0 replies; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-05 12:29 UTC (permalink / raw) To: Paul Mackerras Cc: Oliver Neukum, Miklos Szeredi, mjg59, linux-pm, linux-kernel On Thursday, 5 July 2007 02:29, Paul Mackerras wrote: > Rafael J. Wysocki writes: > > > They will not trigger 100% of the time, but sporadically and generally at > > random. > > > > At least the freezer problems are reproducible. ;-) > > Our experience with powermacs has been that it isn't actually all that > hard to get it right for the drivers you care about. Well, I'm a bit suspicious about that. ;-) Namely, if you run your suspend code on one CPU and (do I remeber correctly that?) with kernel preemption disabled, then you practically prevent user land processes from being scheduled when your suspend code is running. If that is the case (of which I'm not sure), the freezer is obviously unnecessary, because you've taken processes out of the equation in a different way ... Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-05 0:29 ` Paul Mackerras 2007-07-05 12:29 ` Rafael J. Wysocki @ 2007-07-12 15:13 ` Pavel Machek 1 sibling, 0 replies; 62+ messages in thread From: Pavel Machek @ 2007-07-12 15:13 UTC (permalink / raw) To: Paul Mackerras Cc: Rafael J. Wysocki, Oliver Neukum, Miklos Szeredi, mjg59, linux-pm, linux-kernel Hi! > > They will not trigger 100% of the time, but sporadically and generally at > > random. > > > > At least the freezer problems are reproducible. ;-) > > Our experience with powermacs has been that it isn't actually all that > hard to get it right for the drivers you care about. So... will you fix input and usb? Their maintainers seem to prefer simplicity of frozen system. Also, can you write down rules for drivers to follow? Like... 'if you get a request after system suspend started, you may not kmalloc(GFP_KERNEL)' - because disk driver may be already suspended - hmm, what happens if disk driver _is_ suspended? Let's say I'm v4l driver on cpu1. Someone may talk to me _while_ disk driver is being suspended... and if I'm after disk driver in pci order, I may only learn about suspend _after_ I do the wrong kmalloc. Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 11:51 ` Miklos Szeredi 2007-07-04 14:41 ` Rafael J. Wysocki @ 2007-07-04 15:42 ` Alan Stern 2007-07-04 19:25 ` Miklos Szeredi 2007-07-05 0:36 ` Paul Mackerras 1 sibling, 2 replies; 62+ messages in thread From: Alan Stern @ 2007-07-04 15:42 UTC (permalink / raw) To: Paul Mackerras Cc: Miklos Szeredi, rjw, mjg59, Linux-pm mailing list, Kernel development list On Wed, 4 Jul 2007, Miklos Szeredi wrote: > And we won't know if drivers are OK until we remove the freezer, > catch-22. > > So I think we need to disable the freezer at least in -mm and/or > optionally in -linus. > > I applied Matthew's patch, and suspend did in fact stop working > (thinkpad t60), but there was nothing catastrophic. Here's the dmesg > if somebody is interested: > > Suspending console(s) > usb_endpoint usbdev5.3_ep83: PM: suspend 0->2, parent 5-2:1.0 already 2 > usb_endpoint usbdev5.3_ep02: PM: suspend 0->2, parent 5-2:1.0 already 2 > usb_endpoint usbdev5.3_ep81: PM: suspend 0->2, parent 5-2:1.0 already 2 > hub 2-0:1.0: suspend error -16 > suspend_device(): usb_suspend+0x0/0x1c() returns -16 > Could not suspend device usb2: error -16 > usb_endpoint usbdev5.3_ep81: PM: resume from 0, parent 5-2:1.0 still 2 > usb_endpoint usbdev5.3_ep02: PM: resume from 0, parent 5-2:1.0 still 2 > usb_endpoint usbdev5.3_ep83: PM: resume from 0, parent 5-2:1.0 still 2 > Some devices failed to suspend Remember what I wrote a few minutes ago about khubd and ksuspend_usbd wanting to resume devices during a system suspend transition? This is exactly what happens when those threads aren't frozen. Alan Stern ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 15:42 ` Alan Stern @ 2007-07-04 19:25 ` Miklos Szeredi 2007-07-04 21:36 ` Rafael J. Wysocki 2007-07-05 0:43 ` Paul Mackerras 2007-07-05 0:36 ` Paul Mackerras 1 sibling, 2 replies; 62+ messages in thread From: Miklos Szeredi @ 2007-07-04 19:25 UTC (permalink / raw) To: stern; +Cc: oliver, paulus, rjw, mjg59, linux-pm, linux-kernel > Remember what I wrote a few minutes ago about khubd and ksuspend_usbd > wanting to resume devices during a system suspend transition? This is > exactly what happens when those threads aren't frozen. OK, let me summarize the situation as I see it now: there are two camps, the pro-freezers and the anti-freezers. Pro-freezers say: - don't remove the freezer, otherwise we'll have to deal with numerous problems in drivers Anti-freezers say: - let's remove the freezer, which causes numerous problems Alan summerized the pro-freezer arguments well I think. What are the anti-freezer arguments then? After having looked at the freezer and done some experiments with it, the most obvious problem looks to be, that it can get stuck on a process doing uninterruptible sleep. And yes, this can happen if a fuse filesystem daemon is frozen before a filesystem user is. And this is not something that can be fixed in fuse, some filesystem calls (rename(2) for example) are simply not restartable. This doesn't explain the deadlocks, but it could cause failure to suspend which would be pretty annoying. Does this affect other things than fuse? Can this be fixed? It seems to be a fundamental problem with the freezer: while it does make sure that user processes are not calling into drivers during suspend, it also disallows perfectly harmless non-driver calls as well. Miklos ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 19:25 ` Miklos Szeredi @ 2007-07-04 21:36 ` Rafael J. Wysocki 2007-07-05 8:37 ` Miklos Szeredi 2007-07-05 0:43 ` Paul Mackerras 1 sibling, 1 reply; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-04 21:36 UTC (permalink / raw) To: Miklos Szeredi; +Cc: stern, oliver, paulus, mjg59, linux-pm, linux-kernel On Wednesday, 4 July 2007 21:25, Miklos Szeredi wrote: > > Remember what I wrote a few minutes ago about khubd and ksuspend_usbd > > wanting to resume devices during a system suspend transition? This is > > exactly what happens when those threads aren't frozen. > > OK, let me summarize the situation as I see it now: there are two > camps, the pro-freezers and the anti-freezers. > > Pro-freezers say: > > - don't remove the freezer, otherwise we'll have to deal with > numerous problems in drivers And these problems will generally be difficult to reproduce reliably and debug. > Anti-freezers say: > > - let's remove the freezer, which causes numerous problems > > Alan summerized the pro-freezer arguments well I think. What are the > anti-freezer arguments then? > > After having looked at the freezer and done some experiments with it, > the most obvious problem looks to be, that it can get stuck on a > process doing uninterruptible sleep. That's correct. > And yes, this can happen if a fuse filesystem daemon is frozen before a > filesystem user is. And this is not something that can be fixed in fuse, > some filesystem calls (rename(2) for example) are simply not restartable. > > This doesn't explain the deadlocks, but it could cause failure to > suspend which would be pretty annoying. I think the only thing that can deadlock in that context is the sync. At least, I don't see anything else. > Does this affect other things than fuse? Not that I know of. It may affect user space drivers, but there's no data on that. > Can this be fixed? > > It seems to be a fundamental problem with the freezer: while it does > make sure that user processes are not calling into drivers during > suspend, it also disallows perfectly harmless non-driver calls as > well. The problem is that when the freezer was designed (I didn't do that, BTW), there was no FUSE and similar things, so it's not prepared to cope with such interdependencies between user space tasks. We had an analogous problem with vfork() and it was solved by using the PF_FREEZER_SKIP flag. Perhaps we can do similar thing with FUSE. Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 21:36 ` Rafael J. Wysocki @ 2007-07-05 8:37 ` Miklos Szeredi 2007-07-05 12:39 ` Rafael J. Wysocki 0 siblings, 1 reply; 62+ messages in thread From: Miklos Szeredi @ 2007-07-05 8:37 UTC (permalink / raw) To: rjw; +Cc: miklos, stern, oliver, paulus, mjg59, linux-pm, linux-kernel > > Pro-freezers say: > > > > - don't remove the freezer, otherwise we'll have to deal with > > numerous problems in drivers > > And these problems will generally be difficult to reproduce reliably > and debug. I see exactly the opposite. With the freezer I can have very rarely occuring failures, due to freeze ordering effects. And without the freezer I have a 100% reproducable problem, that is not hard to fix according to Alan Stern. OK, I don't know what the next problem would be, but the powermac experience shows, that it's not nearly as bad as you and Oliver try to make it out. > > Can this be fixed? > > > > It seems to be a fundamental problem with the freezer: while it does > > make sure that user processes are not calling into drivers during > > suspend, it also disallows perfectly harmless non-driver calls as > > well. > > The problem is that when the freezer was designed (I didn't do that, BTW), > there was no FUSE and similar things, so it's not prepared to cope with > such interdependencies between user space tasks. > > We had an analogous problem with vfork() and it was solved by using the > PF_FREEZER_SKIP flag. Perhaps we can do similar thing with FUSE. It cannot be just worked around in fuse, as a task might be sleeping on a number of VFS mutexes as well (i_mutex, s_vfs_rename_mutex, etc). It would be a gigantic hack, possible at all. Miklos ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-05 8:37 ` Miklos Szeredi @ 2007-07-05 12:39 ` Rafael J. Wysocki 2007-07-05 12:39 ` Miklos Szeredi 0 siblings, 1 reply; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-05 12:39 UTC (permalink / raw) To: Miklos Szeredi; +Cc: stern, oliver, paulus, mjg59, linux-pm, linux-kernel On Thursday, 5 July 2007 10:37, Miklos Szeredi wrote: > > > Pro-freezers say: > > > > > > - don't remove the freezer, otherwise we'll have to deal with > > > numerous problems in drivers > > > > And these problems will generally be difficult to reproduce reliably > > and debug. > > I see exactly the opposite. > > With the freezer I can have very rarely occuring failures, due to > freeze ordering effects. The "freezer ordering effects" only affect uninterruptible tasks. > And without the freezer I have a 100% reproducable problem, that is > not hard to fix according to Alan Stern. OK, I don't know what the > next problem would be, but the powermac experience shows, that it's > not nearly as bad as you and Oliver try to make it out. The powermac need not be a good example due to the different code ordering (it's run on one CPU only, which makes the probability of triggering a race be quite low). > > > Can this be fixed? > > > > > > It seems to be a fundamental problem with the freezer: while it does > > > make sure that user processes are not calling into drivers during > > > suspend, it also disallows perfectly harmless non-driver calls as > > > well. > > > > The problem is that when the freezer was designed (I didn't do that, BTW), > > there was no FUSE and similar things, so it's not prepared to cope with > > such interdependencies between user space tasks. > > > > We had an analogous problem with vfork() and it was solved by using the > > PF_FREEZER_SKIP flag. Perhaps we can do similar thing with FUSE. > > It cannot be just worked around in fuse, as a task might be sleeping > on a number of VFS mutexes as well (i_mutex, s_vfs_rename_mutex, etc). > It would be a gigantic hack, possible at all. Well, obviously FUSE and the freezer don't play well together, but that's FUSE who's late in the game (the freezer was here before). ;-) If you give me some time, I'll see what can be done. Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-05 12:39 ` Rafael J. Wysocki @ 2007-07-05 12:39 ` Miklos Szeredi 2007-07-05 16:10 ` Jeremy Fitzhardinge 0 siblings, 1 reply; 62+ messages in thread From: Miklos Szeredi @ 2007-07-05 12:39 UTC (permalink / raw) To: rjw; +Cc: miklos, stern, oliver, paulus, mjg59, linux-pm, linux-kernel > > > PF_FREEZER_SKIP flag. Perhaps we can do similar thing with FUSE. > > > > It cannot be just worked around in fuse, as a task might be sleeping > > on a number of VFS mutexes as well (i_mutex, s_vfs_rename_mutex, etc). > > It would be a gigantic hack, possible at all. > > Well, obviously FUSE and the freezer don't play well together, but > that's FUSE who's late in the game (the freezer was here > before). ;-) Umm, and CODA which is _very_ similar to fuse was there long before fuse or the freezer ;) > If you give me some time, I'll see what can be done. I give you all the time in the world. I'd also be willing to help with drivers for which I have the hardware. Miklos ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-05 12:39 ` Miklos Szeredi @ 2007-07-05 16:10 ` Jeremy Fitzhardinge 2007-07-05 17:45 ` Miklos Szeredi 0 siblings, 1 reply; 62+ messages in thread From: Jeremy Fitzhardinge @ 2007-07-05 16:10 UTC (permalink / raw) To: Miklos Szeredi; +Cc: rjw, stern, oliver, paulus, mjg59, linux-pm, linux-kernel Miklos Szeredi wrote: > Umm, and CODA which is _very_ similar to fuse was there long before > fuse or the freezer ;) > I did userfs around 1994-5. J ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-05 16:10 ` Jeremy Fitzhardinge @ 2007-07-05 17:45 ` Miklos Szeredi 0 siblings, 0 replies; 62+ messages in thread From: Miklos Szeredi @ 2007-07-05 17:45 UTC (permalink / raw) To: jeremy; +Cc: miklos, rjw, stern, oliver, paulus, mjg59, linux-pm, linux-kernel > > Umm, and CODA which is _very_ similar to fuse was there long before > > fuse or the freezer ;) > > > > I did userfs around 1994-5. Yes, fuse didn't in fact have very much original idea in it. It was just putting all the pieces together to make a stable and useful userspace filesystem framework. Miklos ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 19:25 ` Miklos Szeredi 2007-07-04 21:36 ` Rafael J. Wysocki @ 2007-07-05 0:43 ` Paul Mackerras 2007-07-05 12:49 ` Rafael J. Wysocki 1 sibling, 1 reply; 62+ messages in thread From: Paul Mackerras @ 2007-07-05 0:43 UTC (permalink / raw) To: Miklos Szeredi; +Cc: stern, oliver, rjw, mjg59, linux-pm, linux-kernel Miklos Szeredi writes: > OK, let me summarize the situation as I see it now: there are two > camps, the pro-freezers and the anti-freezers. > > Pro-freezers say: > > - don't remove the freezer, otherwise we'll have to deal with > numerous problems in drivers > > Anti-freezers say: > > - let's remove the freezer, which causes numerous problems > > Alan summerized the pro-freezer arguments well I think. What are the > anti-freezer arguments then? 1. The freezer cannot be guaranteed deadlock-free without constructing a dependency graph between tasks (both user and kernel), which is virtually impossible since the dependencies are not externally observable. 2. As a consequence of (1), we try to make a crude approximation of the graph by saying "only kernel threads that want to be frozen will be frozen" or some other similar statement. 3. However, (2) means that we can no longer guarantee that drivers will not get any I/O requests after their suspend method has been called, and therefore the freezer fails in its main objective. 4. We have an existence proof that reliable suspend can be achieved without the freezer. To summarize, the argument is that the freezer is deadlock-prone and ineffective. Paul. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-05 0:43 ` Paul Mackerras @ 2007-07-05 12:49 ` Rafael J. Wysocki 0 siblings, 0 replies; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-05 12:49 UTC (permalink / raw) To: Paul Mackerras Cc: Miklos Szeredi, stern, oliver, mjg59, linux-pm, linux-kernel On Thursday, 5 July 2007 02:43, Paul Mackerras wrote: > Miklos Szeredi writes: > > > OK, let me summarize the situation as I see it now: there are two > > camps, the pro-freezers and the anti-freezers. > > > > Pro-freezers say: > > > > - don't remove the freezer, otherwise we'll have to deal with > > numerous problems in drivers > > > > Anti-freezers say: > > > > - let's remove the freezer, which causes numerous problems > > > > Alan summerized the pro-freezer arguments well I think. What are the > > anti-freezer arguments then? > > 1. The freezer cannot be guaranteed deadlock-free without constructing > a dependency graph between tasks (both user and kernel), which is > virtually impossible since the dependencies are not externally > observable. I don't agree with that. The freezer only fails to handle uninterruptible tasks, so we need to take the situations in which an uninterruptible task waits for a frozen task into consideration. Now, if both tasks are from the user land, this is highly unusual. > 2. As a consequence of (1), we try to make a crude approximation of > the graph by saying "only kernel threads that want to be frozen > will be frozen" or some other similar statement. No. The rule is that kernel threads should not be freezable, but there are some for which that is useful. > 3. However, (2) means that we can no longer guarantee that drivers > will not get any I/O requests after their suspend method has been > called, and therefore the freezer fails in its main objective. This is a very general statement. Can you please give some examples? > 4. We have an existence proof that reliable suspend can be achieved > without the freezer. No. We only know that it might work if the nonboot CPUs are disabled before suspending devices, which is not the case in the generic suspend code. > To summarize, the argument is that the freezer is deadlock-prone and > ineffective. I remain unconvinced. ;-) Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 15:42 ` Alan Stern 2007-07-04 19:25 ` Miklos Szeredi @ 2007-07-05 0:36 ` Paul Mackerras 2007-07-05 12:51 ` Rafael J. Wysocki 2007-07-05 14:25 ` Alan Stern 1 sibling, 2 replies; 62+ messages in thread From: Paul Mackerras @ 2007-07-05 0:36 UTC (permalink / raw) To: Alan Stern Cc: Miklos Szeredi, rjw, mjg59, Linux-pm mailing list, Kernel development list Alan Stern writes: > Remember what I wrote a few minutes ago about khubd and ksuspend_usbd > wanting to resume devices during a system suspend transition? This is > exactly what happens when those threads aren't frozen. So, I wonder why I don't see that error on my powerbook? Paul. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-05 0:36 ` Paul Mackerras @ 2007-07-05 12:51 ` Rafael J. Wysocki 2007-07-05 12:50 ` Johannes Berg 2007-07-05 14:25 ` Alan Stern 1 sibling, 1 reply; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-05 12:51 UTC (permalink / raw) To: Paul Mackerras Cc: Alan Stern, Miklos Szeredi, mjg59, Linux-pm mailing list, Kernel development list On Thursday, 5 July 2007 02:36, Paul Mackerras wrote: > Alan Stern writes: > > > Remember what I wrote a few minutes ago about khubd and ksuspend_usbd > > wanting to resume devices during a system suspend transition? This is > > exactly what happens when those threads aren't frozen. > > So, I wonder why I don't see that error on my powerbook? Because you have only one CPU running while your suspend code is being executed? Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-05 12:51 ` Rafael J. Wysocki @ 2007-07-05 12:50 ` Johannes Berg 2007-07-05 13:47 ` Rafael J. Wysocki 0 siblings, 1 reply; 62+ messages in thread From: Johannes Berg @ 2007-07-05 12:50 UTC (permalink / raw) To: Rafael J. Wysocki Cc: Paul Mackerras, mjg59, Linux-pm mailing list, Kernel development list, Miklos Szeredi [-- Attachment #1: Type: text/plain, Size: 736 bytes --] On Thu, 2007-07-05 at 14:51 +0200, Rafael J. Wysocki wrote: > > > Remember what I wrote a few minutes ago about khubd and ksuspend_usbd > > > wanting to resume devices during a system suspend transition? This is > > > exactly what happens when those threads aren't frozen. > > > > So, I wonder why I don't see that error on my powerbook? > > Because you have only one CPU running while your suspend code is being > executed? If that's really all the problem then what's wrong with just unplugging the other CPUs earlier? Sure, that makes suspend no longer perfectly transparent since userspace might notice the CPUs being unplugged, but it has to cope with that anyway since a user can do it manually... johannes [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 190 bytes --] ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-05 12:50 ` Johannes Berg @ 2007-07-05 13:47 ` Rafael J. Wysocki 0 siblings, 0 replies; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-05 13:47 UTC (permalink / raw) To: Johannes Berg Cc: Paul Mackerras, mjg59, Linux-pm mailing list, Kernel development list, Miklos Szeredi On Thursday, 5 July 2007 14:50, Johannes Berg wrote: > On Thu, 2007-07-05 at 14:51 +0200, Rafael J. Wysocki wrote: > > > > > Remember what I wrote a few minutes ago about khubd and ksuspend_usbd > > > > wanting to resume devices during a system suspend transition? This is > > > > exactly what happens when those threads aren't frozen. > > > > > > So, I wonder why I don't see that error on my powerbook? > > > > Because you have only one CPU running while your suspend code is being > > executed? > > If that's really all the problem then what's wrong with just unplugging > the other CPUs earlier? Sure, that makes suspend no longer perfectly > transparent since userspace might notice the CPUs being unplugged, but > it has to cope with that anyway since a user can do it manually... This is a bit complicated, but I'll try to explain. We used to disable the nonboot CPUs before suspending devices and enable them after resuming devices, but that turned out to lead to resume problems on some ACPI systems. Namely, it turned out that this code ordering was not in line with the ACPI spec that assumed specific ordering of events during a suspend. For this reason, we changed the code ordering and now it is more or less in agreement with ACPI (for the first time, AFAICS). I don't think that anyone would like to revert that change right now. Moreover, in the meantime we learned that the CPU hotplug code that we use for disabling the nonboot CPUs, is generally problematic on x86 and only works for us because we have the majority of interrupt sources disabled when it's invoked. Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-05 0:36 ` Paul Mackerras 2007-07-05 12:51 ` Rafael J. Wysocki @ 2007-07-05 14:25 ` Alan Stern 2007-07-05 17:42 ` Miklos Szeredi 1 sibling, 1 reply; 62+ messages in thread From: Alan Stern @ 2007-07-05 14:25 UTC (permalink / raw) To: Paul Mackerras Cc: Miklos Szeredi, rjw, mjg59, Linux-pm mailing list, Kernel development list On Thu, 5 Jul 2007, Paul Mackerras wrote: > Alan Stern writes: > > > Remember what I wrote a few minutes ago about khubd and ksuspend_usbd > > wanting to resume devices during a system suspend transition? This is > > exactly what happens when those threads aren't frozen. > > So, I wonder why I don't see that error on my powerbook? That's a good question. Miklos, can you please reproduce the suspend error using a kernel built with CONFIG_USB_DEBUG turned on? Alan Stern ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-05 14:25 ` Alan Stern @ 2007-07-05 17:42 ` Miklos Szeredi 2007-07-05 20:43 ` Alan Stern 0 siblings, 1 reply; 62+ messages in thread From: Miklos Szeredi @ 2007-07-05 17:42 UTC (permalink / raw) To: stern; +Cc: paulus, miklos, rjw, mjg59, linux-pm, linux-kernel > > Alan Stern writes: > > > > > Remember what I wrote a few minutes ago about khubd and ksuspend_usbd > > > wanting to resume devices during a system suspend transition? This is > > > exactly what happens when those threads aren't frozen. > > > > So, I wonder why I don't see that error on my powerbook? > > That's a good question. Miklos, can you please reproduce the suspend > error using a kernel built with CONFIG_USB_DEBUG turned on? Here's the full dmesg. First there was a successful suspend/resume, then a couple of unsuccessful ones: Linux version 2.6.22-rc6 (mszeredi@tucsk) (gcc version 4.1.2 20061115 (prerelease) (SUSE Linux)) #19 SMP Thu Jul 5 18:07:34 CEST 2007 Command line: vga=775 root=/dev/sda2 BIOS-provided physical RAM map: BIOS-e820: 0000000000000000 - 000000000009f000 (usable) BIOS-e820: 000000000009f000 - 00000000000a0000 (reserved) BIOS-e820: 00000000000d2000 - 00000000000d4000 (reserved) BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved) BIOS-e820: 0000000000100000 - 000000003fed0000 (usable) BIOS-e820: 000000003fed0000 - 000000003fedf000 (ACPI data) BIOS-e820: 000000003fedf000 - 000000003ff00000 (ACPI NVS) BIOS-e820: 000000003ff00000 - 0000000040000000 (reserved) BIOS-e820: 00000000f0000000 - 00000000f4000000 (reserved) BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved) BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved) BIOS-e820: 00000000fed14000 - 00000000fed1a000 (reserved) BIOS-e820: 00000000fed1c000 - 00000000fed90000 (reserved) BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) BIOS-e820: 00000000ff800000 - 0000000100000000 (reserved) Entering add_active_range(0, 0, 159) 0 entries of 256 used Entering add_active_range(0, 256, 261840) 1 entries of 256 used end_pfn_map = 1048576 DMI present. ACPI: RSDP 000F67D0, 0024 (r2 LENOVO) ACPI: XSDT 3FED1308, 008C (r1 LENOVO TP-79 2110 LTP 0) ACPI: FACP 3FED1400, 00F4 (r3 LENOVO TP-79 2110 LNVO 1) ACPI Warning (tbfadt-0434): Optional field "Gpe1Block" has zero address or length: 000000000000102C/0 [20070126] ACPI: DSDT 3FED175E, D481 (r1 LENOVO TP-79 2110 MSFT 100000E) ACPI: FACS 3FEF4000, 0040 ACPI: SSDT 3FED15B4, 01AA (r1 LENOVO TP-79 2110 MSFT 100000E) ACPI: ECDT 3FEDEBDF, 0052 (r1 LENOVO TP-79 2110 LNVO 1) ACPI: TCPA 3FEDEC31, 0032 (r2 LENOVO TP-79 2110 LNVO 1) ACPI: APIC 3FEDEC63, 0068 (r1 LENOVO TP-79 2110 LNVO 1) ACPI: MCFG 3FEDECCB, 003C (r1 LENOVO TP-79 2110 LNVO 1) ACPI: HPET 3FEDED07, 0038 (r1 LENOVO TP-79 2110 LNVO 1) ACPI: SLIC 3FEDEE62, 0176 (r1 LENOVO TP-79 2110 LTP 0) ACPI: BOOT 3FEDEFD8, 0028 (r1 LENOVO TP-79 2110 LTP 1) ACPI: SSDT 3FEF2655, 025F (r1 LENOVO TP-79 2110 INTL 20050513) ACPI: SSDT 3FEF28B4, 00A6 (r1 LENOVO TP-79 2110 INTL 20050513) ACPI: SSDT 3FEF295A, 04F7 (r1 LENOVO TP-79 2110 INTL 20050513) ACPI: SSDT 3FEF2E51, 01D8 (r1 LENOVO TP-79 2110 INTL 20050513) Entering add_active_range(0, 0, 159) 0 entries of 256 used Entering add_active_range(0, 256, 261840) 1 entries of 256 used Zone PFN ranges: DMA 0 -> 4096 DMA32 4096 -> 1048576 Normal 1048576 -> 1048576 early_node_map[2] active PFN ranges 0: 0 -> 159 0: 256 -> 261840 On node 0 totalpages: 261743 DMA zone: 56 pages used for memmap DMA zone: 1144 pages reserved DMA zone: 2799 pages, LIFO batch:0 DMA32 zone: 3523 pages used for memmap DMA32 zone: 254221 pages, LIFO batch:31 Normal zone: 0 pages used for memmap ACPI: PM-Timer IO Port: 0x1008 ACPI: Local APIC address 0xfee00000 ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) Processor #0 (Bootup-CPU) ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) Processor #1 ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0]) IOAPIC[0]: apic_id 1, address 0xfec00000, GSI 0-23 ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) ACPI: IRQ0 used by override. ACPI: IRQ2 used by override. ACPI: IRQ9 used by override. Setting APIC routing to flat ACPI: HPET id: 0x8086a201 base: 0xfed00000 Using ACPI (MADT) for SMP configuration information swsusp: Registered nosave memory region: 000000000009f000 - 00000000000a0000 swsusp: Registered nosave memory region: 00000000000a0000 - 00000000000d2000 swsusp: Registered nosave memory region: 00000000000d2000 - 00000000000d4000 swsusp: Registered nosave memory region: 00000000000d4000 - 00000000000dc000 swsusp: Registered nosave memory region: 00000000000dc000 - 0000000000100000 Allocating PCI resources starting at 50000000 (gap: 40000000:b0000000) SMP: Allowing 2 CPUs, 0 hotplug CPUs PERCPU: Allocating 32616 bytes of per cpu data Built 1 zonelists. Total pages: 257020 Kernel command line: vga=775 root=/dev/sda2 Initializing CPU#0 PID hash table entries: 4096 (order: 12, 32768 bytes) Extended CMOS year: 2000 Marking TSC unstable due to TSCs unsynchronized time.c: Detected 1828.744 MHz processor. Console: colour dummy device 80x25 Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes) Inode-cache hash table entries: 65536 (order: 7, 524288 bytes) Checking aperture... Memory: 1026200k/1047360k available (2316k kernel code, 20600k reserved, 1434k data, 188k init) Calibrating delay using timer specific routine.. 3661.49 BogoMIPS (lpj=7322983) Mount-cache hash table entries: 256 CPU: L1 I cache: 32K, L1 D cache: 32K CPU: L2 cache: 2048K using mwait in idle threads. CPU: Physical Processor ID: 0 CPU: Processor Core ID: 0 CPU0: Thermal monitoring enabled (TM2) SMP alternatives: switching to UP code ACPI: Core revision 20070126 Using local APIC timer interrupts. result 10390586 Detected 10.390 MHz APIC timer. SMP alternatives: switching to SMP code Booting processor 1/2 APIC 0x1 Initializing CPU#1 Calibrating delay using timer specific routine.. 3657.60 BogoMIPS (lpj=7315219) CPU: L1 I cache: 32K, L1 D cache: 32K CPU: L2 cache: 2048K CPU: Physical Processor ID: 0 CPU: Processor Core ID: 1 CPU1: Thermal monitoring enabled (TM2) Intel(R) Core(TM)2 CPU T5600 @ 1.83GHz stepping 06 Brought up 2 CPUs migration_cost=39 NET: Registered protocol family 16 ACPI: bus type pci registered PCI: Using configuration type 1 ACPI: Interpreter enabled ACPI: (supports S0 S3 S4 S5) ACPI: Using IOAPIC for interrupt routing ACPI: PCI Root Bridge [PCI0] (0000:00) PCI: Probing PCI hardware (bus 00) PCI quirk: region 1000-107f claimed by ICH6 ACPI/GPIO/TCO PCI quirk: region 1180-11bf claimed by ICH6 GPIO PCI: Transparent bridge - 0000:00:1e.0 ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.AGP_._PRT] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP0._PRT] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP1._PRT] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP2._PRT] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP3._PRT] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI1._PRT] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 7 9 10 *11) ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 9 10 *11) ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 7 9 10 *11) ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 7 9 10 *11) ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 6 7 9 10 *11) ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 6 7 9 10 *11) ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 7 9 10 *11) ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 7 9 10 *11) ACPI: Power Resource [PUBS] (on) Linux Plug and Play Support v0.97 (c) Adam Belay pnp: PnP ACPI init ACPI: bus type pnp registered pnp: PnP ACPI: found 12 devices ACPI: ACPI bus type pnp unregistered SCSI subsystem initialized libata version 2.21 loaded. usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb PCI: Using ACPI for IRQ routing PCI: If a device doesn't work, try "pci=routeirq". If it helps, post a report PCI-GART: No AMD northbridge found. hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 hpet0: 3 64-bit timers, 14318180 Hz pnp: 00:00: iomem range 0x0-0x9ffff could not be reserved pnp: 00:00: iomem range 0xc0000-0xc3fff has been reserved pnp: 00:00: iomem range 0xc4000-0xc7fff has been reserved pnp: 00:00: iomem range 0xc8000-0xcbfff has been reserved pnp: 00:02: iomem range 0xf0000000-0xf3ffffff could not be reserved pnp: 00:02: iomem range 0xfed1c000-0xfed1ffff could not be reserved pnp: 00:02: iomem range 0xfed14000-0xfed17fff could not be reserved pnp: 00:02: iomem range 0xfed18000-0xfed18fff could not be reserved PCI: Bridge: 0000:00:01.0 IO window: 2000-2fff MEM window: ee100000-ee1fffff PREFETCH window: d8000000-dfffffff PCI: Bridge: 0000:00:1c.0 IO window: 3000-3fff MEM window: ee000000-ee0fffff PREFETCH window: disabled. PCI: Bridge: 0000:00:1c.1 IO window: 4000-5fff MEM window: ec000000-edffffff PREFETCH window: e4000000-e40fffff PCI: Bridge: 0000:00:1c.2 IO window: 6000-7fff MEM window: e8000000-e9ffffff PREFETCH window: e4100000-e41fffff PCI: Bridge: 0000:00:1c.3 IO window: 8000-9fff MEM window: ea000000-ebffffff PREFETCH window: e4200000-e42fffff PCI: Bus 22, cardbus bridge: 0000:15:00.0 IO window: 0000a000-0000a0ff IO window: 0000a400-0000a4ff PREFETCH window: e0000000-e3ffffff MEM window: 50000000-53ffffff PCI: Bridge: 0000:00:1e.0 IO window: a000-dfff MEM window: e4300000-e7ffffff PREFETCH window: e0000000-e3ffffff ACPI: PCI Interrupt 0000:00:01.0[A] -> GSI 16 (level, low) -> IRQ 16 PCI: Setting latency timer of device 0000:00:01.0 to 64 ACPI: PCI Interrupt 0000:00:1c.0[A] -> GSI 20 (level, low) -> IRQ 20 PCI: Setting latency timer of device 0000:00:1c.0 to 64 ACPI: PCI Interrupt 0000:00:1c.1[B] -> GSI 21 (level, low) -> IRQ 21 PCI: Setting latency timer of device 0000:00:1c.1 to 64 ACPI: PCI Interrupt 0000:00:1c.2[C] -> GSI 22 (level, low) -> IRQ 22 PCI: Setting latency timer of device 0000:00:1c.2 to 64 ACPI: PCI Interrupt 0000:00:1c.3[D] -> GSI 23 (level, low) -> IRQ 23 PCI: Setting latency timer of device 0000:00:1c.3 to 64 PCI: Enabling device 0000:00:1e.0 (0005 -> 0007) PCI: Setting latency timer of device 0000:00:1e.0 to 64 ACPI: PCI Interrupt 0000:15:00.0[A] -> GSI 16 (level, low) -> IRQ 16 NET: Registered protocol family 2 Time: hpet clocksource has been installed. IP route cache hash table entries: 32768 (order: 6, 262144 bytes) TCP established hash table entries: 131072 (order: 9, 3145728 bytes) TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) TCP: Hash tables configured (established 131072 bind 65536) TCP reno registered Simple Boot Flag at 0x35 set to 0x1 io scheduler noop registered io scheduler cfq registered (default) pci 0000:00:1d.0: uhci_check_and_reset_hc: legsup = 0x2000 pci 0000:00:1d.0: Performing full reset pci 0000:00:1d.1: uhci_check_and_reset_hc: legsup = 0x2000 pci 0000:00:1d.1: Performing full reset pci 0000:00:1d.2: uhci_check_and_reset_hc: legsup = 0x2000 pci 0000:00:1d.2: Performing full reset pci 0000:00:1d.3: uhci_check_and_reset_hc: legsup = 0x2000 pci 0000:00:1d.3: Performing full reset Boot video device is 0000:01:00.0 PCI: Setting latency timer of device 0000:00:01.0 to 64 assign_interrupt_mode Found MSI capability Allocate Port Service[0000:00:01.0:pcie00] PCI: Setting latency timer of device 0000:00:1c.0 to 64 assign_interrupt_mode Found MSI capability Allocate Port Service[0000:00:1c.0:pcie00] Allocate Port Service[0000:00:1c.0:pcie02] PCI: Setting latency timer of device 0000:00:1c.1 to 64 assign_interrupt_mode Found MSI capability Allocate Port Service[0000:00:1c.1:pcie00] Allocate Port Service[0000:00:1c.1:pcie02] PCI: Setting latency timer of device 0000:00:1c.2 to 64 assign_interrupt_mode Found MSI capability Allocate Port Service[0000:00:1c.2:pcie00] Allocate Port Service[0000:00:1c.2:pcie02] PCI: Setting latency timer of device 0000:00:1c.3 to 64 assign_interrupt_mode Found MSI capability Allocate Port Service[0000:00:1c.3:pcie00] Allocate Port Service[0000:00:1c.3:pcie02] vesafb: framebuffer at 0xd8000000, mapped to 0xffffc20000080000, using 2560k, total 16384k vesafb: mode is 1280x1024x8, linelength=1280, pages=11 vesafb: scrolling: redraw vesafb: Pseudocolor: size=8:8:8:8, shift=0:0:0:0 Console: switching to colour frame buffer device 160x64 fb0: VESA VGA frame buffer device ACPI: AC Adapter [AC] (on-line) ACPI: Battery Slot [BAT0] (battery absent) input: Power Button (FF) as /class/input/input0 ACPI: Power Button (FF) [PWRF] input: Lid Switch as /class/input/input1 ACPI: Lid Switch [LID] input: Sleep Button (CM) as /class/input/input2 ACPI: Sleep Button (CM) [SLPB] ACPI: SSDT 3FEF1D36, 0240 (r1 PmRef Cpu0Ist 100 INTL 20050513) ACPI: SSDT 3FEF1FFB, 065A (r1 PmRef Cpu0Cst 100 INTL 20050513) Monitor-Mwait will be used to enter C-1 state Monitor-Mwait will be used to enter C-2 state Monitor-Mwait will be used to enter C-3 state ACPI: CPU0 (power states: C1[C1] C2[C2] C3[C3]) ACPI: Processor [CPU0] (supports 8 throttling states) ACPI: SSDT 3FEF1C6E, 00C8 (r1 PmRef Cpu1Ist 100 INTL 20050513) ACPI: SSDT 3FEF1F76, 0085 (r1 PmRef Cpu1Cst 100 INTL 20050513) ACPI: CPU1 (power states: C1[C1] C2[C2] C3[C3]) ACPI: Processor [CPU1] (supports 8 throttling states) ACPI: Thermal Zone [THM0] (40 C) ACPI: Thermal Zone [THM1] (41 C) Real Time Clock Driver v1.12ac hpet_resources: 0xfed00000 is busy Linux agpgart interface v0.102 (c) Dave Jones Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled loop: module loaded thinkpad_acpi: ThinkPad ACPI Extras v0.14 thinkpad_acpi: http://ibm-acpi.sf.net/ thinkpad_acpi: ThinkPad EC firmware 79HT50WW-1.07 tun: Universal TUN/TAP device driver, 1.6 tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com> Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2 ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx ICH7: IDE controller at PCI slot 0000:00:1f.1 ACPI: PCI Interrupt 0000:00:1f.1[C] -> GSI 16 (level, low) -> IRQ 16 ICH7: chipset revision 2 ICH7: not 100% native mode: will probe irqs later ide0: BM-DMA at 0x1880-0x1887, BIOS settings: hda:DMA, hdb:pio Probing IDE interface ide0... hda: MATSHITADVD-RAM UJ-842, ATAPI CD/DVD-ROM drive hda: selected mode 0x42 ide0 at 0x1f0-0x1f7,0x3f6 on irq 14 Probing IDE interface ide1... hda: ATAPI 24X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB Cache, UDMA(33) Uniform CD-ROM driver Revision: 3.20 ahci 0000:00:1f.2: version 2.2 ACPI: PCI Interrupt 0000:00:1f.2[B] -> GSI 16 (level, low) -> IRQ 16 ahci 0000:00:1f.2: AHCI 0001.0100 32 slots 4 ports 1.5 Gbps 0xf impl SATA mode ahci 0000:00:1f.2: flags: 64bit ncq pm led clo pio slum part PCI: Setting latency timer of device 0000:00:1f.2 to 64 scsi0 : ahci scsi1 : ahci scsi2 : ahci scsi3 : ahci ata1: SATA max UDMA/133 cmd 0xffffc2000003a500 ctl 0x0000000000000000 bmdma 0x0000000000000000 irq 0 ata2: SATA max UDMA/133 cmd 0xffffc2000003a580 ctl 0x0000000000000000 bmdma 0x0000000000000000 irq 0 ata3: SATA max UDMA/133 cmd 0xffffc2000003a600 ctl 0x0000000000000000 bmdma 0x0000000000000000 irq 0 ata4: SATA max UDMA/133 cmd 0xffffc2000003a680 ctl 0x0000000000000000 bmdma 0x0000000000000000 irq 0 ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 300) ata1.00: ata_hpa_resize 1: sectors = 156301488, hpa_sectors = 156301488 ata1.00: ATA-7: HTS541080G9SA00, MB4IC60R, max UDMA/100 ata1.00: 156301488 sectors, multi 16: LBA48 ata1.00: ata_hpa_resize 1: sectors = 156301488, hpa_sectors = 156301488 ata1.00: configured for UDMA/100 ata2: SATA link down (SStatus 0 SControl 0) ata3: SATA link down (SStatus 0 SControl 0) ata4: SATA link down (SStatus 0 SControl 0) scsi 0:0:0:0: Direct-Access ATA HTS541080G9SA00 MB4I PQ: 0 ANSI: 5 sd 0:0:0:0: [sda] 156301488 512-byte hardware sectors (80026 MB) sd 0:0:0:0: [sda] Write Protect is off sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA sd 0:0:0:0: [sda] 156301488 512-byte hardware sectors (80026 MB) sd 0:0:0:0: [sda] Write Protect is off sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA sda: sda1 sda2 sda3 < sda5 > sd 0:0:0:0: [sda] Attached SCSI disk sd 0:0:0:0: Attached scsi generic sg0 type 0 usbmon: debugfs is not available ehci_hcd: block sizes: qh 160 qtd 96 itd 192 sitd 96 ACPI: PCI Interrupt 0000:00:1d.7[D] -> GSI 19 (level, low) -> IRQ 19 PCI: Setting latency timer of device 0000:00:1d.7 to 64 ehci_hcd 0000:00:1d.7: EHCI Host Controller ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 1 ehci_hcd 0000:00:1d.7: reset hcs_params 0x104208 dbg=1 cc=4 pcc=2 ordered !ppc ports=8 ehci_hcd 0000:00:1d.7: reset hcc_params 6871 thresh 7 uframes 1024 64 bit addr ehci_hcd 0000:00:1d.7: debug port 1 PCI: cache line size of 32 is not supported by device 0000:00:1d.7 ehci_hcd 0000:00:1d.7: supports USB remote wakeup ehci_hcd 0000:00:1d.7: irq 19, io mem 0xee404000 ehci_hcd 0000:00:1d.7: reset command 080022 (park)=0 ithresh=8 Async period=1024 Reset HALT ehci_hcd 0000:00:1d.7: init command 010001 (park)=0 ithresh=1 period=1024 RUN ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004 usb usb1: default language 0x0409 usb usb1: new device strings: Mfr=3, Product=2, SerialNumber=1 usb usb1: Product: EHCI Host Controller usb usb1: Manufacturer: Linux 2.6.22-rc6 ehci_hcd usb usb1: SerialNumber: 0000:00:1d.7 usb usb1: uevent usb usb1: usb_probe_device usb usb1: configuration #1 chosen from 1 choice usb usb1: adding 1-0:1.0 (config #1, interface 0) usb 1-0:1.0: uevent usb 1-0:1.0: uevent hub 1-0:1.0: usb_probe_interface hub 1-0:1.0: usb_probe_interface - got id hub 1-0:1.0: USB hub found hub 1-0:1.0: 8 ports detected hub 1-0:1.0: standalone hub hub 1-0:1.0: no power switching (usb 1.0) hub 1-0:1.0: individual port over-current protection hub 1-0:1.0: Single TT hub 1-0:1.0: TT requires at most 8 FS bit times (666 ns) hub 1-0:1.0: power on to power good time: 20ms hub 1-0:1.0: local power source is good hub 1-0:1.0: trying to enable port power on non-switchable hub hub 1-0:1.0: state 7 ports 8 chg 0000 evt 0000 ehci_hcd 0000:00:1d.7: GetStatus port 1 status 001403 POWER sig=k CSC CONNECT USB Universal Host Controller Interface driver v3.0 hub 1-0:1.0: port 1, status 0501, change 0001, 480 Mb/s ACPI: PCI Interrupt 0000:00:1d.0[A] -> GSI 16 (level, low) -> IRQ 16 PCI: Setting latency timer of device 0000:00:1d.0 to 64 uhci_hcd 0000:00:1d.0: UHCI Host Controller uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2 uhci_hcd 0000:00:1d.0: detected 2 ports uhci_hcd 0000:00:1d.0: uhci_check_and_reset_hc: cmd = 0x0000 uhci_hcd 0000:00:1d.0: Performing full reset uhci_hcd 0000:00:1d.0: irq 16, io base 0x00001800 usb usb2: default language 0x0409 usb usb2: new device strings: Mfr=3, Product=2, SerialNumber=1 usb usb2: Product: UHCI Host Controller usb usb2: Manufacturer: Linux 2.6.22-rc6 uhci_hcd usb usb2: SerialNumber: 0000:00:1d.0 usb usb2: uevent usb usb2: usb_probe_device usb usb2: configuration #1 chosen from 1 choice usb usb2: adding 2-0:1.0 (config #1, interface 0) usb 2-0:1.0: uevent usb 2-0:1.0: uevent hub 2-0:1.0: usb_probe_interface hub 2-0:1.0: usb_probe_interface - got id hub 2-0:1.0: USB hub found hub 2-0:1.0: 2 ports detected hub 2-0:1.0: standalone hub hub 2-0:1.0: no power switching (usb 1.0) hub 2-0:1.0: individual port over-current protection hub 2-0:1.0: power on to power good time: 2ms hub 2-0:1.0: local power source is good hub 2-0:1.0: trying to enable port power on non-switchable hub hub 1-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x501 ehci_hcd 0000:00:1d.7: port 1 low speed --> companion ACPI: PCI Interrupt 0000:00:1d.1[B] -> GSI 17 (level, low) -> IRQ 17 PCI: Setting latency timer of device 0000:00:1d.1 to 64 uhci_hcd 0000:00:1d.1: UHCI Host Controller uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 3 uhci_hcd 0000:00:1d.1: detected 2 ports uhci_hcd 0000:00:1d.1: uhci_check_and_reset_hc: cmd = 0x0000 uhci_hcd 0000:00:1d.1: Performing full reset uhci_hcd 0000:00:1d.1: irq 17, io base 0x00001820 usb usb3: default language 0x0409 usb usb3: new device strings: Mfr=3, Product=2, SerialNumber=1 usb usb3: Product: UHCI Host Controller usb usb3: Manufacturer: Linux 2.6.22-rc6 uhci_hcd usb usb3: SerialNumber: 0000:00:1d.1 usb usb3: uevent usb usb3: usb_probe_device usb usb3: configuration #1 chosen from 1 choice usb usb3: adding 3-0:1.0 (config #1, interface 0) ehci_hcd 0000:00:1d.7: GetStatus port 1 status 003002 POWER OWNER sig=se0 CSC usb 3-0:1.0: uevent usb 3-0:1.0: uevent ehci_hcd 0000:00:1d.7: GetStatus port 8 status 001803 POWER sig=j CSC CONNECT hub 1-0:1.0: port 8, status 0501, change 0001, 480 Mb/s hub 3-0:1.0: usb_probe_interface hub 3-0:1.0: usb_probe_interface - got id hub 3-0:1.0: USB hub found hub 3-0:1.0: 2 ports detected hub 3-0:1.0: standalone hub hub 3-0:1.0: no power switching (usb 1.0) hub 3-0:1.0: individual port over-current protection hub 3-0:1.0: power on to power good time: 2ms hub 3-0:1.0: local power source is good hub 3-0:1.0: trying to enable port power on non-switchable hub ACPI: PCI Interrupt 0000:00:1d.2[C] -> GSI 18 (level, low) -> IRQ 18 PCI: Setting latency timer of device 0000:00:1d.2 to 64 uhci_hcd 0000:00:1d.2: UHCI Host Controller uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 4 uhci_hcd 0000:00:1d.2: detected 2 ports uhci_hcd 0000:00:1d.2: uhci_check_and_reset_hc: cmd = 0x0000 uhci_hcd 0000:00:1d.2: Performing full reset uhci_hcd 0000:00:1d.2: irq 18, io base 0x00001840 usb usb4: default language 0x0409 usb usb4: new device strings: Mfr=3, Product=2, SerialNumber=1 usb usb4: Product: UHCI Host Controller usb usb4: Manufacturer: Linux 2.6.22-rc6 uhci_hcd usb usb4: SerialNumber: 0000:00:1d.2 usb usb4: uevent usb usb4: usb_probe_device usb usb4: configuration #1 chosen from 1 choice usb usb4: adding 4-0:1.0 (config #1, interface 0) usb 4-0:1.0: uevent usb 4-0:1.0: uevent hub 4-0:1.0: usb_probe_interface hub 4-0:1.0: usb_probe_interface - got id hub 4-0:1.0: USB hub found hub 4-0:1.0: 2 ports detected hub 1-0:1.0: debounce: port 8: total 100ms stable 100ms status 0x501 hub 4-0:1.0: standalone hub hub 4-0:1.0: no power switching (usb 1.0) hub 4-0:1.0: individual port over-current protection hub 4-0:1.0: power on to power good time: 2ms hub 4-0:1.0: local power source is good hub 4-0:1.0: trying to enable port power on non-switchable hub ehci_hcd 0000:00:1d.7: port 8 full speed --> companion ehci_hcd 0000:00:1d.7: GetStatus port 8 status 003801 POWER OWNER sig=j CONNECT hub 1-0:1.0: port 8 not reset yet, waiting 50ms ACPI: PCI Interrupt 0000:00:1d.3[D] -> GSI 19 (level, low) -> IRQ 19 PCI: Setting latency timer of device 0000:00:1d.3 to 64 uhci_hcd 0000:00:1d.3: UHCI Host Controller ehci_hcd 0000:00:1d.7: GetStatus port 8 status 003002 POWER OWNER sig=se0 CSC hub 1-0:1.0: state 7 ports 8 chg 0000 evt 0100 hub 2-0:1.0: state 7 ports 2 chg 0000 evt 0002 uhci_hcd 0000:00:1d.0: port 1 portsc 01ab,00 hub 2-0:1.0: port 1, status 0301, change 0003, 1.5 Mb/s uhci_hcd 0000:00:1d.3: new USB bus registered, assigned bus number 5 uhci_hcd 0000:00:1d.3: detected 2 ports uhci_hcd 0000:00:1d.3: uhci_check_and_reset_hc: cmd = 0x0000 uhci_hcd 0000:00:1d.3: Performing full reset uhci_hcd 0000:00:1d.3: irq 19, io base 0x00001860 usb usb5: default language 0x0409 usb usb5: new device strings: Mfr=3, Product=2, SerialNumber=1 usb usb5: Product: UHCI Host Controller usb usb5: Manufacturer: Linux 2.6.22-rc6 uhci_hcd usb usb5: SerialNumber: 0000:00:1d.3 usb usb5: uevent usb usb5: usb_probe_device usb usb5: configuration #1 chosen from 1 choice usb usb5: adding 5-0:1.0 (config #1, interface 0) usb 5-0:1.0: uevent usb 5-0:1.0: uevent hub 5-0:1.0: usb_probe_interface hub 5-0:1.0: usb_probe_interface - got id hub 5-0:1.0: USB hub found hub 5-0:1.0: 2 ports detected hub 5-0:1.0: standalone hub hub 5-0:1.0: no power switching (usb 1.0) hub 5-0:1.0: individual port over-current protection hub 5-0:1.0: power on to power good time: 2ms hub 5-0:1.0: local power source is good hub 5-0:1.0: trying to enable port power on non-switchable hub hub 2-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x301 PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12 serio: i8042 KBD port at 0x60,0x64 irq 1 serio: i8042 AUX port at 0x60,0x64 irq 12 mice: PS/2 mouse device common for all mice input: AT Translated Set 2 keyboard as /class/input/input3 usb 2-1: new low speed USB device using uhci_hcd and address 2 usb 2-1: skipped 1 descriptor after interface usb 2-1: default language 0x0409 usb 2-1: new device strings: Mfr=1, Product=2, SerialNumber=0 usb 2-1: Product: Basic Optical Mouse usb 2-1: Manufacturer: Microsoft usb 2-1: uevent usb 2-1: usb_probe_device usb 2-1: configuration #1 chosen from 1 choice usb 2-1: adding 2-1:1.0 (config #1, interface 0) usb 2-1:1.0: uevent usb 2-1:1.0: uevent hub 3-0:1.0: state 7 ports 2 chg 0000 evt 0000 hub 4-0:1.0: state 7 ports 2 chg 0000 evt 0000 hub 5-0:1.0: state 7 ports 2 chg 0000 evt 0004 uhci_hcd 0000:00:1d.3: port 2 portsc 009b,00 hub 5-0:1.0: port 2, status 0101, change 0003, 12 Mb/s hub 5-0:1.0: debounce: port 2: total 100ms stable 100ms status 0x101 usb 5-2: new full speed USB device using uhci_hcd and address 2 Synaptics Touchpad, model: 1, fw: 6.2, id: 0x81a0b1, caps: 0xa04793/0x300000 serio: Synaptics pass-through port at isa0060/serio1/input0 usb 5-2: ep0 maxpacket = 8 input: SynPS/2 Synaptics TouchPad as /class/input/input4 usb 5-2: default language 0x0409 usb 5-2: new device strings: Mfr=1, Product=2, SerialNumber=0 usb 5-2: Product: Biometric Coprocessor usb 5-2: Manufacturer: STMicroelectronics usb usb3: suspend_rh (auto-stop) usb 5-2: uevent usb 5-2: usb_probe_device usb 5-2: configuration #1 chosen from 1 choice usb 5-2: adding 5-2:1.0 (config #1, interface 0) usb 5-2:1.0: uevent usb 5-2:1.0: uevent usbhid 2-1:1.0: usb_probe_interface usbhid 2-1:1.0: usb_probe_interface - got id input: Microsoft Basic Optical Mouse as /class/input/input5 input: USB HID v1.10 Mouse [Microsoft Basic Optical Mouse] on usb-0000:00:1d.0-1 usbcore: registered new interface driver usbhid drivers/hid/usbhid/hid-core.c: v2.6:USB HID core driver Advanced Linux Sound Architecture Driver Version 1.0.14 (Thu May 31 09:03:25 2007 UTC). ACPI: PCI Interrupt 0000:00:1b.0[B] -> GSI 17 (level, low) -> IRQ 17 PCI: Setting latency timer of device 0000:00:1b.0 to 64 usb usb4: suspend_rh (auto-stop) ALSA device list: #0: HDA Intel at 0xee400000 irq 17 Netfilter messages via NETLINK v0.30. nf_conntrack version 0.5.0 (4091 buckets, 32728 max) ip_tables: (C) 2000-2006 Netfilter Core Team TCP cubic registered NET: Registered protocol family 1 NET: Registered protocol family 17 IBM TrackPoint firmware: 0x0e, buttons: 3/3 input: TPPS/2 IBM TrackPoint as /class/input/input6 kjournald starting. Commit interval 5 seconds EXT3-fs: mounted filesystem with ordered data mode. VFS: Mounted root (ext3 filesystem) readonly. Freeing unused kernel memory: 188k freed usb usb2: uevent usb 2-0:1.0: uevent usb 2-0:1.0: uevent usb 2-1: uevent usb 2-1:1.0: uevent usb 2-1:1.0: uevent usb usb3: uevent usb 3-0:1.0: uevent usb 3-0:1.0: uevent usb usb4: uevent usb 4-0:1.0: uevent usb 4-0:1.0: uevent usb usb5: uevent usb 5-0:1.0: uevent usb 5-0:1.0: uevent usb 5-2: uevent usb 5-2:1.0: uevent usb 5-2:1.0: uevent usb usb1: uevent usb 1-0:1.0: uevent usb 1-0:1.0: uevent Intel(R) PRO/1000 Network Driver - version 7.3.20-k2 Copyright (c) 1999-2006 Intel Corporation. ACPI: PCI Interrupt 0000:02:00.0[A] -> GSI 16 (level, low) -> IRQ 16 PCI: Setting latency timer of device 0000:02:00.0 to 64 e1000: 0000:02:00.0: e1000_validate_option: Receive Interrupt Delay set to 32 e1000: 0000:02:00.0: e1000_probe: (PCI Express:2.5Gb/s:Width x1) 00:16:41:e3:2c:76 e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection Adding 1542196k swap on /dev/sda1. Priority:-1 extents:1 across:1542196k EXT3 FS on sda2, internal journal fuse init (API version 7.8) e1000: eth0: e1000_watchdog: NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX/TX e1000: eth0: e1000_watchdog: 10/100 speed: disabling TSO uhci_hcd 0000:00:1d.0: reserve dev 2 ep81-INT, period 8, phase 4, 93 us uhci_hcd 0000:00:1d.0: release dev 2 ep81-INT, period 8, phase 4, 93 us uhci_hcd 0000:00:1d.0: reserve dev 2 ep81-INT, period 8, phase 4, 93 us uhci_hcd 0000:00:1d.0: release dev 2 ep81-INT, period 8, phase 4, 93 us uhci_hcd 0000:00:1d.0: reserve dev 2 ep81-INT, period 8, phase 4, 93 us uhci_hcd 0000:00:1d.0: release dev 2 ep81-INT, period 8, phase 4, 93 us IA-32 Microcode Update Driver: v1.14a <tigran@aivazian.fsnet.co.uk> uhci_hcd 0000:00:1d.0: reserve dev 2 ep81-INT, period 8, phase 4, 93 us uhci_hcd 0000:00:1d.0: release dev 2 ep81-INT, period 8, phase 4, 93 us uhci_hcd 0000:00:1d.0: reserve dev 2 ep81-INT, period 8, phase 4, 93 us uhci_hcd 0000:00:1d.0: release dev 2 ep81-INT, period 8, phase 4, 93 us Suspending console(s) hub 5-0:1.0: hub_suspend usb usb5: suspend_rh hub 4-0:1.0: hub_suspend usb usb4: suspend_rh hub 3-0:1.0: hub_suspend usb usb3: suspend_rh hub 2-0:1.0: hub_suspend usb usb2: suspend_rh hub 1-0:1.0: hub_suspend ehci_hcd 0000:00:1d.7: suspend root hub sd 0:0:0:0: [sda] Synchronizing SCSI cache sd 0:0:0:0: [sda] Stopping disk ACPI: PCI interrupt for device 0000:02:00.0 disabled ACPI: PCI interrupt for device 0000:00:1d.7 disabled ehci_hcd 0000:00:1d.7: --> PCI D3/wakeup uhci_hcd 0000:00:1d.3: uhci_suspend ACPI: PCI interrupt for device 0000:00:1d.3 disabled uhci_hcd 0000:00:1d.3: --> PCI D0/legacy uhci_hcd 0000:00:1d.2: uhci_suspend ACPI: PCI interrupt for device 0000:00:1d.2 disabled uhci_hcd 0000:00:1d.2: --> PCI D0/legacy uhci_hcd 0000:00:1d.1: uhci_suspend ACPI: PCI interrupt for device 0000:00:1d.1 disabled uhci_hcd 0000:00:1d.1: --> PCI D0/legacy uhci_hcd 0000:00:1d.0: uhci_suspend ACPI: PCI interrupt for device 0000:00:1d.0 disabled uhci_hcd 0000:00:1d.0: --> PCI D0/legacy ACPI: PCI interrupt for device 0000:00:1b.0 disabled Disabling non-boot CPUs ... CPU 1 is now offline SMP alternatives: switching to UP code CPU1 is down Extended CMOS year: 2000 Back to C! Extended CMOS year: 2000 Enabling non-boot CPUs ... SMP alternatives: switching to SMP code Booting processor 1/2 APIC 0x1 Initializing CPU#1 Calibrating delay using timer specific routine.. 3657.62 BogoMIPS (lpj=7315250) CPU: L1 I cache: 32K, L1 D cache: 32K CPU: L2 cache: 2048K CPU: Physical Processor ID: 0 CPU: Processor Core ID: 1 Intel(R) Core(TM)2 CPU T5600 @ 1.83GHz stepping 06 CPU1 is up PM: Writing back config space on device 0000:00:01.0 at offset 7 (was 20002020, writing 2020) PM: Writing back config space on device 0000:00:01.0 at offset 1 (was 100107, writing 100507) PCI: Setting latency timer of device 0000:00:01.0 to 64 PM: Writing back config space on device 0000:00:1b.0 at offset 1 (was 100106, writing 100102) ACPI: PCI Interrupt 0000:00:1b.0[B] -> GSI 17 (level, low) -> IRQ 17 PCI: Setting latency timer of device 0000:00:1b.0 to 64 PM: Writing back config space on device 0000:00:1c.0 at offset 1 (was 180107, writing 100507) PCI: Setting latency timer of device 0000:00:1c.0 to 64 PM: Writing back config space on device 0000:00:1c.1 at offset 1 (was 100107, writing 100507) PCI: Setting latency timer of device 0000:00:1c.1 to 64 PM: Writing back config space on device 0000:00:1c.2 at offset 7 (was 20007060, writing 7060) PM: Writing back config space on device 0000:00:1c.2 at offset 1 (was 100107, writing 100507) PCI: Setting latency timer of device 0000:00:1c.2 to 64 PM: Writing back config space on device 0000:00:1c.3 at offset f (was 40400, writing 4040b) PM: Writing back config space on device 0000:00:1c.3 at offset 9 (was 10001, writing e421e421) PM: Writing back config space on device 0000:00:1c.3 at offset 8 (was 0, writing ebf0ea00) PM: Writing back config space on device 0000:00:1c.3 at offset 7 (was 20000000, writing 9080) PM: Writing back config space on device 0000:00:1c.3 at offset 3 (was 810000, writing 810010) PM: Writing back config space on device 0000:00:1c.3 at offset 1 (was 100000, writing 100507) PCI: Setting latency timer of device 0000:00:1c.3 to 64 uhci_hcd 0000:00:1d.0: PCI legacy resume ACPI: PCI Interrupt 0000:00:1d.0[A] -> GSI 16 (level, low) -> IRQ 16 PCI: Setting latency timer of device 0000:00:1d.0 to 64 uhci_hcd 0000:00:1d.0: uhci_resume uhci_hcd 0000:00:1d.0: uhci_check_and_reset_hc: legsup = 0x2f00 uhci_hcd 0000:00:1d.0: Performing full reset usb usb2: root hub lost power or was reset usb usb2: suspend_rh hub 2-0:1.0: hub_resume usb usb2: wakeup_rh uhci_hcd 0000:00:1d.1: PCI legacy resume ACPI: PCI Interrupt 0000:00:1d.1[B] -> GSI 17 (level, low) -> IRQ 17 PCI: Setting latency timer of device 0000:00:1d.1 to 64 uhci_hcd 0000:00:1d.1: uhci_resume uhci_hcd 0000:00:1d.1: uhci_check_and_reset_hc: legsup = 0x2000 uhci_hcd 0000:00:1d.1: Performing full reset usb usb3: root hub lost power or was reset usb usb3: suspend_rh uhci_hcd 0000:00:1d.2: PCI legacy resume ACPI: PCI Interrupt 0000:00:1d.2[C] -> GSI 18 (level, low) -> IRQ 18 PCI: Setting latency timer of device 0000:00:1d.2 to 64 uhci_hcd 0000:00:1d.2: uhci_resume uhci_hcd 0000:00:1d.2: uhci_check_and_reset_hc: legsup = 0x2000 uhci_hcd 0000:00:1d.2: Performing full reset usb usb4: root hub lost power or was reset usb usb4: suspend_rh uhci_hcd 0000:00:1d.3: PCI legacy resume ACPI: PCI Interrupt 0000:00:1d.3[D] -> GSI 19 (level, low) -> IRQ 19 PCI: Setting latency timer of device 0000:00:1d.3 to 64 uhci_hcd 0000:00:1d.3: uhci_resume uhci_hcd 0000:00:1d.3: uhci_check_and_reset_hc: legsup = 0x2000 uhci_hcd 0000:00:1d.3: Performing full reset usb usb5: root hub lost power or was reset usb usb5: suspend_rh ehci_hcd 0000:00:1d.7: PCI D0, from previous PCI D3 ACPI: PCI Interrupt 0000:00:1d.7[D] -> GSI 19 (level, low) -> IRQ 19 PCI: Setting latency timer of device 0000:00:1d.7 to 64 PM: Writing back config space on device 0000:00:1e.0 at offset 1 (was 100005, writing 100007) PCI: Setting latency timer of device 0000:00:1e.0 to 64 ACPI: PCI Interrupt 0000:00:1f.1[C] -> GSI 16 (level, low) -> IRQ 16 PM: Writing back config space on device 0000:00:1f.2 at offset 1 (was 2b00007, writing 2b00407) PCI: Setting latency timer of device 0000:00:1f.2 to 64 hub 5-0:1.0: hub_resume usb usb5: wakeup_rh hub 2-0:1.0: state 7 ports 2 chg 0002 evt 0000 uhci_hcd 0000:00:1d.0: port 1 portsc 008a,00 hub 2-0:1.0: port 1, status 0100, change 0003, 12 Mb/s usb 2-1: USB disconnect, address 2 usb 2-1: unregistering device usb 2-1: usb_disable_device nuking all URBs usb 2-1: unregistering interface 2-1:1.0 usb_endpoint usbdev2.2_ep81: ep_device_release called for usbdev2.2_ep81 usb 2-1:1.0: uevent usb 2-1:1.0: uevent usb_endpoint usbdev2.2_ep00: ep_device_release called for usbdev2.2_ep00 usb 2-1: uevent hub 1-0:1.0: hub_resume ehci_hcd 0000:00:1d.7: resume root hub hub 2-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x100 hub 5-0:1.0: state 7 ports 2 chg 0004 evt 0004 uhci_hcd 0000:00:1d.3: port 2 portsc 008a,00 hub 5-0:1.0: port 2, status 0100, change 0003, 12 Mb/s usb 5-2: USB disconnect, address 2 usb 5-2: unregistering device usb 5-2: usb_disable_device nuking all URBs usb 5-2: unregistering interface 5-2:1.0 usb_endpoint usbdev5.2_ep81: ep_device_release called for usbdev5.2_ep81 usb_endpoint usbdev5.2_ep02: ep_device_release called for usbdev5.2_ep02 usb_endpoint usbdev5.2_ep83: ep_device_release called for usbdev5.2_ep83 usb 5-2:1.0: uevent usb 5-2:1.0: uevent usb_endpoint usbdev5.2_ep00: ep_device_release called for usbdev5.2_ep00 usb 5-2: uevent hub 5-0:1.0: debounce: port 2: total 100ms stable 100ms status 0x100 hub 1-0:1.0: state 7 ports 8 chg 0000 evt 0102 ehci_hcd 0000:00:1d.7: GetStatus port 1 status 001403 POWER sig=k CSC CONNECT hub 1-0:1.0: port 1, status 0501, change 0001, 480 Mb/s hub 1-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x501 ehci_hcd 0000:00:1d.7: port 1 low speed --> companion ehci_hcd 0000:00:1d.7: GetStatus port 1 status 003002 POWER OWNER sig=se0 CSC ehci_hcd 0000:00:1d.7: GetStatus port 8 status 001803 POWER sig=j CSC CONNECT hub 1-0:1.0: port 8, status 0501, change 0001, 480 Mb/s hub 1-0:1.0: debounce: port 8: total 100ms stable 100ms status 0x501 ehci_hcd 0000:00:1d.7: port 8 full speed --> companion ehci_hcd 0000:00:1d.7: GetStatus port 8 status 003801 POWER OWNER sig=j CONNECT hub 1-0:1.0: port 8 not reset yet, waiting 50ms ehci_hcd 0000:00:1d.7: GetStatus port 8 status 003002 POWER OWNER sig=se0 CSC hub 1-0:1.0: state 7 ports 8 chg 0000 evt 0100 hub 2-0:1.0: state 7 ports 2 chg 0000 evt 0002 uhci_hcd 0000:00:1d.0: port 1 portsc 01a3,00 hub 2-0:1.0: port 1, status 0301, change 0001, 1.5 Mb/s hub 2-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x301 usb 2-1: new low speed USB device using uhci_hcd and address 3 PM: Writing back config space on device 0000:01:00.0 at offset 1 (was 100103, writing 100107) PM: Writing back config space on device 0000:02:00.0 at offset 1 (was 100107, writing 100507) ACPI: PCI Interrupt 0000:02:00.0[A] -> GSI 16 (level, low) -> IRQ 16 PCI: Setting latency timer of device 0000:02:00.0 to 64 PM: Writing back config space on device 0000:15:00.0 at offset f (was 34001ff, writing 3c0010b) PM: Writing back config space on device 0000:15:00.0 at offset e (was 0, writing a4fc) PM: Writing back config space on device 0000:15:00.0 at offset d (was 0, writing a400) PM: Writing back config space on device 0000:15:00.0 at offset c (was 0, writing a0fc) PM: Writing back config space on device 0000:15:00.0 at offset b (was 0, writing a000) PM: Writing back config space on device 0000:15:00.0 at offset a (was 0, writing 53fff000) PM: Writing back config space on device 0000:15:00.0 at offset 9 (was 0, writing 50000000) PM: Writing back config space on device 0000:15:00.0 at offset 8 (was 0, writing e3fff000) PM: Writing back config space on device 0000:15:00.0 at offset 7 (was 0, writing e0000000) PM: Writing back config space on device 0000:15:00.0 at offset 6 (was 0, writing b0171615) PM: Writing back config space on device 0000:15:00.0 at offset 4 (was 0, writing e4300000) PM: Writing back config space on device 0000:15:00.0 at offset 3 (was 20000, writing 2a808) PM: Writing back config space on device 0000:15:00.0 at offset 1 (was 2100000, writing 2100007) ACPI: PCI Interrupt 0000:15:00.0[A] -> GSI 16 (level, low) -> IRQ 16 usb 2-1: skipped 1 descriptor after interface hda: selected mode 0x42 usb 2-1: default language 0x0409 sd 0:0:0:0: [sda] Starting disk usb 2-1: new device strings: Mfr=1, Product=2, SerialNumber=0 usb 2-1: Product: Basic Optical Mouse usb 2-1: Manufacturer: Microsoft usb 2-1: uevent usb 2-1: usb_probe_device usb 2-1: configuration #1 chosen from 1 choice usb 2-1: adding 2-1:1.0 (config #1, interface 0) usb 2-1:1.0: uevent usb 2-1:1.0: uevent usbhid 2-1:1.0: usb_probe_interface usbhid 2-1:1.0: usb_probe_interface - got id input: Microsoft Basic Optical Mouse as /class/input/input7 input: USB HID v1.10 Mouse [Microsoft Basic Optical Mouse] on usb-0000:00:1d.0-1 hub 5-0:1.0: state 7 ports 2 chg 0000 evt 0004 uhci_hcd 0000:00:1d.3: port 2 portsc 0093,00 hub 5-0:1.0: port 2, status 0101, change 0001, 12 Mb/s uhci_hcd 0000:00:1d.0: reserve dev 3 ep81-INT, period 8, phase 4, 93 us uhci_hcd 0000:00:1d.0: release dev 3 ep81-INT, period 8, phase 4, 93 us uhci_hcd 0000:00:1d.0: reserve dev 3 ep81-INT, period 8, phase 4, 93 us uhci_hcd 0000:00:1d.0: release dev 3 ep81-INT, period 8, phase 4, 93 us hub 5-0:1.0: debounce: port 2: total 100ms stable 100ms status 0x101 ata2: SATA link down (SStatus 0 SControl 0) ata3: SATA link down (SStatus 0 SControl 0) ata4: SATA link down (SStatus 0 SControl 0) usb 5-2: new full speed USB device using uhci_hcd and address 3 ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 300) usb 5-2: ep0 maxpacket = 8 ata1.00: ata_hpa_resize 1: sectors = 156301488, hpa_sectors = 156301488 ata1.00: ata_hpa_resize 1: sectors = 156301488, hpa_sectors = 156301488 ata1.00: configured for UDMA/100 usb 5-2: default language 0x0409 sd 0:0:0:0: [sda] 156301488 512-byte hardware sectors (80026 MB) hub 3-0:1.0: hub_resume usb usb3: wakeup_rh sd 0:0:0:0: [sda] Write Protect is off sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 usb 5-2: new device strings: Mfr=1, Product=2, SerialNumber=0 usb 5-2: Product: Biometric Coprocessor usb 5-2: Manufacturer: STMicroelectronics usb 5-2: uevent usb 5-2: usb_probe_device usb 5-2: configuration #1 chosen from 1 choice usb 5-2: adding 5-2:1.0 (config #1, interface 0) usb 5-2:1.0: uevent usb 5-2:1.0: uevent sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA hub 3-0:1.0: state 7 ports 2 chg 0000 evt 0000 hub 4-0:1.0: hub_resume usb usb4: wakeup_rh hub 4-0:1.0: state 7 ports 2 chg 0000 evt 0000 usb usb3: suspend_rh (auto-stop) usb usb4: suspend_rh (auto-stop) e1000: eth0: e1000_watchdog: NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX/TX e1000: eth0: e1000_watchdog: 10/100 speed: disabling TSO ata4: soft resetting port ata4: SATA link down (SStatus 0 SControl 0) ata4: EH complete ata3: soft resetting port ata3: SATA link down (SStatus 0 SControl 0) ata3: EH complete ata2: soft resetting port ata2: SATA link down (SStatus 0 SControl 0) ata2: EH complete Uhhuh. NMI received for unknown reason a0. You have some hardware problem, likely on the PCI bus. Dazed and confused, but trying to continue uhci_hcd 0000:00:1d.0: reserve dev 3 ep81-INT, period 8, phase 4, 93 us uhci_hcd 0000:00:1d.0: release dev 3 ep81-INT, period 8, phase 4, 93 us Suspending console(s) hub 5-0:1.0: port 2 nyet suspended hub 5-0:1.0: suspend error -16 suspend_device(): usb_suspend+0x0/0x1c() returns -16 Could not suspend device usb5: error -16 Some devices failed to suspend ata4: soft resetting port ata4: SATA link down (SStatus 0 SControl 0) ata4: EH complete ata3: soft resetting port ata3: SATA link down (SStatus 0 SControl 0) ata3: EH complete ata2: soft resetting port ata2: SATA link down (SStatus 0 SControl 0) ata2: EH complete uhci_hcd 0000:00:1d.0: reserve dev 3 ep81-INT, period 8, phase 4, 93 us uhci_hcd 0000:00:1d.0: release dev 3 ep81-INT, period 8, phase 4, 93 us Suspending console(s) hub 5-0:1.0: port 2 nyet suspended hub 5-0:1.0: suspend error -16 suspend_device(): usb_suspend+0x0/0x1c() returns -16 Could not suspend device usb5: error -16 Some devices failed to suspend ata4: soft resetting port ata4: SATA link down (SStatus 0 SControl 0) ata4: EH complete ata3: soft resetting port ata3: SATA link down (SStatus 0 SControl 0) ata3: EH complete ata2: soft resetting port ata2: SATA link down (SStatus 0 SControl 0) ata2: EH complete uhci_hcd 0000:00:1d.0: reserve dev 3 ep81-INT, period 8, phase 4, 93 us ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-05 17:42 ` Miklos Szeredi @ 2007-07-05 20:43 ` Alan Stern 0 siblings, 0 replies; 62+ messages in thread From: Alan Stern @ 2007-07-05 20:43 UTC (permalink / raw) To: Miklos Szeredi; +Cc: paulus, rjw, mjg59, linux-pm, linux-kernel On Thu, 5 Jul 2007, Miklos Szeredi wrote: > > > Alan Stern writes: > > > > > > > Remember what I wrote a few minutes ago about khubd and ksuspend_usbd > > > > wanting to resume devices during a system suspend transition? This is > > > > exactly what happens when those threads aren't frozen. > > > > > > So, I wonder why I don't see that error on my powerbook? > > > > That's a good question. Miklos, can you please reproduce the suspend > > error using a kernel built with CONFIG_USB_DEBUG turned on? > > Here's the full dmesg. First there was a successful suspend/resume, > then a couple of unsuccessful ones: Okay, good. It's not a coincidence that the first one worked and later ones didn't. Here's what happened: You suspended the system. Upon resuming, the USB host controller drivers detected that their device sessions had been interrupted and consequently marked your two USB devices (the optical mouse and the biometric thingy) for removal. Normally that removal would take place when khubd wakes up, i.e., after the resume is complete and the thread is taken out of the freezer. But in this case khubd was already awake. It resumed the two root hubs in response to their remote wakeup requests and saw that the devices were gone. So it unregistered the device structures immediately -- even before the PM core tried to resume them -- and then registered new data structures to embody the new device connections. As far as I can tell, the fact that these new device structures were created while the suspend-list was in flux must have caused one of them (the biometric coprocessor) not to be added to the appropriate list. Thus the next time you tried to suspend, the PM core didn't call the device's suspend method. It was left awake, and as a result its parent hub refused to suspend (since it had an unsuspended child). This caused the overall system suspend to fail. This illustrates the folly of allowing other threads to perform driver-core-type operations in the middle of a system sleep transition. Alan Stern ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 11:25 ` Rafael J. Wysocki 2007-07-04 11:34 ` Paul Mackerras 2007-07-04 11:51 ` Miklos Szeredi @ 2007-07-04 12:41 ` Theodore Tso 2007-07-04 14:40 ` Rafael J. Wysocki 2 siblings, 1 reply; 62+ messages in thread From: Theodore Tso @ 2007-07-04 12:41 UTC (permalink / raw) To: Rafael J. Wysocki; +Cc: Paul Mackerras, Matthew Garrett, linux-pm, linux-kernel On Wed, Jul 04, 2007 at 01:25:55PM +0200, Rafael J. Wysocki wrote: > > Don't know what exactly? > > How many drivers will be adversely affected by the $subject change. Ok, so how about a CONFIG option which removes the freezer, so we can find out experimentally how many people without it? We can make it be experimental at first, or (my preference) make it be the default initially, and if people complain that their laptop's suspend feature is broken, we can tell them how to turn back on the CONFIG_FREEZER_DEPRECATED option. - Ted ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 12:41 ` Theodore Tso @ 2007-07-04 14:40 ` Rafael J. Wysocki 0 siblings, 0 replies; 62+ messages in thread From: Rafael J. Wysocki @ 2007-07-04 14:40 UTC (permalink / raw) To: Theodore Tso; +Cc: Paul Mackerras, Matthew Garrett, linux-pm, linux-kernel On Wednesday, 4 July 2007 14:41, Theodore Tso wrote: > On Wed, Jul 04, 2007 at 01:25:55PM +0200, Rafael J. Wysocki wrote: > > > Don't know what exactly? > > > > How many drivers will be adversely affected by the $subject change. > > Ok, so how about a CONFIG option which removes the freezer, so we can > find out experimentally how many people without it? We can make it be > experimental at first, or (my preference) make it be the default > initially, and if people complain that their laptop's suspend feature > is broken, we can tell them how to turn back on the > CONFIG_FREEZER_DEPRECATED option. The freezer is generally still necessary for hibernation, so I won't call it "DEPRECATED'. Moreover, I'd prefer to make drivers use different callbacks for hibernation and suspend before we do that. Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 21:20 ` Matthew Garrett 2007-07-03 21:37 ` Rafael J. Wysocki @ 2007-07-03 22:21 ` Alan Stern 2007-07-03 22:42 ` Matthew Garrett 1 sibling, 1 reply; 62+ messages in thread From: Alan Stern @ 2007-07-03 22:21 UTC (permalink / raw) To: Matthew Garrett; +Cc: linux-kernel, linux-pm On Tue, 3 Jul 2007, Matthew Garrett wrote: > On Tue, Jul 03, 2007 at 05:16:37PM -0400, Alan Stern wrote: > > On Tue, 3 Jul 2007, Matthew Garrett wrote: > > > But that's fine - "Are we undergoing a systemwide suspend" is an easy > > > question to ask. Freezing processes instead means that most of those > > > paths will never be tested. > > > > The question is easy to ask, but it's not so easy to figure out what > > you should do if the answer is Yes. Freezing processes instead means > > that those "untested" paths -- in many, many drivers -- won't have to > > exist at all. > > We're used to the idea of applications blocking when a resource they're > using goes away - NFS has done it forever. You persist in evading my point. I'm not worried about applications; I'm worried about drivers. Let me put it explicitly: You're writing a driver. You're working on the read, write, or probe method. You add code to check if a system sleep is underway. Suppose the answer is Yes -- what does your driver do next? Make your answer as detailed as you reasonably can. And be careful to arrange things so that an ongoing I/O operation doesn't get messed up when your suspend method is called. Alan Stern ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 22:21 ` Alan Stern @ 2007-07-03 22:42 ` Matthew Garrett 2007-07-04 14:38 ` Alan Stern 0 siblings, 1 reply; 62+ messages in thread From: Matthew Garrett @ 2007-07-03 22:42 UTC (permalink / raw) To: Alan Stern; +Cc: linux-kernel, linux-pm On Tue, Jul 03, 2007 at 06:21:42PM -0400, Alan Stern wrote: > On Tue, 3 Jul 2007, Matthew Garrett wrote: > > We're used to the idea of applications blocking when a resource they're > > using goes away - NFS has done it forever. > > You persist in evading my point. I'm not worried about applications; > I'm worried about drivers. > > Let me put it explicitly: You're writing a driver. You're working on > the read, write, or probe method. You add code to check if a system > sleep is underway. Suppose the answer is Yes -- what does your driver > do next? Leave the process blocked and defer any i/o until after resume. Why does it need to be any more complicated than that? -- Matthew Garrett | mjg59@srcf.ucam.org ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-03 22:42 ` Matthew Garrett @ 2007-07-04 14:38 ` Alan Stern 2007-07-04 14:58 ` Matthew Garrett 0 siblings, 1 reply; 62+ messages in thread From: Alan Stern @ 2007-07-04 14:38 UTC (permalink / raw) To: Matthew Garrett; +Cc: linux-kernel, linux-pm On Tue, 3 Jul 2007, Matthew Garrett wrote: > On Tue, Jul 03, 2007 at 06:21:42PM -0400, Alan Stern wrote: > > On Tue, 3 Jul 2007, Matthew Garrett wrote: > > > We're used to the idea of applications blocking when a resource they're > > > using goes away - NFS has done it forever. > > > > You persist in evading my point. I'm not worried about applications; > > I'm worried about drivers. > > > > Let me put it explicitly: You're writing a driver. You're working on > > the read, write, or probe method. You add code to check if a system > > sleep is underway. Suppose the answer is Yes -- what does your driver > > do next? > > Leave the process blocked and defer any i/o until after resume. Why does > it need to be any more complicated than that? (1) The driver will undoubtedly hold some mutex or semaphore at the time it checks whether a system sleep is underway. You will have to drop it before blocking and then reacquire it afterward. (2) The driver may have been called by some other routine which holds a mutex needed for resuming the device. In this case the driver _can't_ drop the mutex and so the resume will deadlock. Okay, I agree that (1) can be handled without too much effort. But doing it adds an extra test to _every_ driver's I/O pathway. Freezing userspace does not incur all this additional overhead. (2) shouldn't arise during normal read and write operations, but it certainly _will_ arise during probe. Alan Stern ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 14:38 ` Alan Stern @ 2007-07-04 14:58 ` Matthew Garrett 2007-07-04 15:02 ` Oliver Neukum 2007-07-04 15:57 ` Alan Stern 0 siblings, 2 replies; 62+ messages in thread From: Matthew Garrett @ 2007-07-04 14:58 UTC (permalink / raw) To: Alan Stern; +Cc: linux-kernel, linux-pm On Wed, Jul 04, 2007 at 10:38:47AM -0400, Alan Stern wrote: > Okay, I agree that (1) can be handled without too much effort. But > doing it adds an extra test to _every_ driver's I/O pathway. Freezing > userspace does not incur all this additional overhead. For runtime PM to work it's already necessary to have a test in that path to check if the device is suspended. I can't see how this adds any overhead to the common case. -- Matthew Garrett | mjg59@srcf.ucam.org ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 14:58 ` Matthew Garrett @ 2007-07-04 15:02 ` Oliver Neukum 2007-07-04 15:57 ` Alan Stern 1 sibling, 0 replies; 62+ messages in thread From: Oliver Neukum @ 2007-07-04 15:02 UTC (permalink / raw) To: Matthew Garrett; +Cc: Alan Stern, linux-kernel, linux-pm Am Mittwoch, 4. Juli 2007 schrieb Matthew Garrett: > On Wed, Jul 04, 2007 at 10:38:47AM -0400, Alan Stern wrote: > > > Okay, I agree that (1) can be handled without too much effort. But > > doing it adds an extra test to _every_ driver's I/O pathway. Freezing > > userspace does not incur all this additional overhead. > > For runtime PM to work it's already necessary to have a test in that > path to check if the device is suspended. I can't see how this adds any > overhead to the common case. No, you just make sure the device reports to upper layers when it might be busy. The USB layer manages this quite well without burdening the common case. Regards Oliver ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway 2007-07-04 14:58 ` Matthew Garrett 2007-07-04 15:02 ` Oliver Neukum @ 2007-07-04 15:57 ` Alan Stern 1 sibling, 0 replies; 62+ messages in thread From: Alan Stern @ 2007-07-04 15:57 UTC (permalink / raw) To: Matthew Garrett; +Cc: linux-kernel, linux-pm On Wed, 4 Jul 2007, Matthew Garrett wrote: > On Wed, Jul 04, 2007 at 10:38:47AM -0400, Alan Stern wrote: > > > Okay, I agree that (1) can be handled without too much effort. But > > doing it adds an extra test to _every_ driver's I/O pathway. Freezing > > userspace does not incur all this additional overhead. > > For runtime PM to work it's already necessary to have a test in that > path to check if the device is suspended. I can't see how this adds any > overhead to the common case. Actually it isn't necessary to have a test to check if the device is suspended. We simply call the autoresume routine; if the device isn't suspended that routine doesn't have to do anything. I agree that that the extra test (for system-wide suspend underway) is needed only if the autoresume fails, which isn't part of the main pathway. So it doesn't add runtime overhead -- but handling it does add code overhead. Alan Stern ^ permalink raw reply [flat|nested] 62+ messages in thread
end of thread, other threads:[~2007-07-12 19:49 UTC | newest]
Thread overview: 62+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <fa.ftLWBLCc+XqdYjiuxoPg+qyuUOE@ifi.uio.no>
[not found] ` <fa.Oxrm8HYXTOF4jv5LrTjEe16lCE0@ifi.uio.no>
[not found] ` <fa.d3GOse+YbAb42uYwLymWkJiH9Fw@ifi.uio.no>
2007-07-04 0:17 ` [linux-pm] [PATCH] Remove process freezer from suspend to RAM pathway Robert Hancock
2007-07-04 0:34 ` Matthew Garrett
2007-07-04 10:21 ` Rafael J. Wysocki
2007-07-03 4:29 Matthew Garrett
2007-07-03 5:49 ` [linux-pm] " Benjamin Herrenschmidt
2007-07-03 13:07 ` Rafael J. Wysocki
2007-07-03 16:03 ` Alan Stern
2007-07-03 16:05 ` Matthew Garrett
2007-07-03 16:57 ` Alan Stern
2007-07-03 17:02 ` Matthew Garrett
2007-07-03 19:33 ` Alan Stern
2007-07-03 19:42 ` Matthew Garrett
2007-07-03 19:54 ` Alan Stern
2007-07-03 20:23 ` Matthew Garrett
2007-07-03 21:10 ` Alan Stern
2007-07-03 21:12 ` Matthew Garrett
2007-07-03 21:16 ` Alan Stern
2007-07-03 21:20 ` Matthew Garrett
2007-07-03 21:37 ` Rafael J. Wysocki
2007-07-03 21:36 ` Matthew Garrett
2007-07-03 21:47 ` Oliver Neukum
2007-07-03 22:46 ` Rafael J. Wysocki
2007-07-04 3:38 ` Paul Mackerras
2007-07-04 10:42 ` Rafael J. Wysocki
2007-07-04 10:58 ` Paul Mackerras
2007-07-04 11:25 ` Rafael J. Wysocki
2007-07-04 11:34 ` Paul Mackerras
2007-07-04 14:12 ` Dmitry Torokhov
2007-07-04 15:38 ` Alan Stern
2007-07-04 19:07 ` Alan Stern
2007-07-04 11:51 ` Miklos Szeredi
2007-07-04 14:41 ` Rafael J. Wysocki
2007-07-04 14:45 ` Miklos Szeredi
2007-07-04 15:03 ` Oliver Neukum
2007-07-04 15:17 ` Rafael J. Wysocki
2007-07-05 0:29 ` Paul Mackerras
2007-07-05 12:29 ` Rafael J. Wysocki
2007-07-12 15:13 ` Pavel Machek
2007-07-04 15:42 ` Alan Stern
2007-07-04 19:25 ` Miklos Szeredi
2007-07-04 21:36 ` Rafael J. Wysocki
2007-07-05 8:37 ` Miklos Szeredi
2007-07-05 12:39 ` Rafael J. Wysocki
2007-07-05 12:39 ` Miklos Szeredi
2007-07-05 16:10 ` Jeremy Fitzhardinge
2007-07-05 17:45 ` Miklos Szeredi
2007-07-05 0:43 ` Paul Mackerras
2007-07-05 12:49 ` Rafael J. Wysocki
2007-07-05 0:36 ` Paul Mackerras
2007-07-05 12:51 ` Rafael J. Wysocki
2007-07-05 12:50 ` Johannes Berg
2007-07-05 13:47 ` Rafael J. Wysocki
2007-07-05 14:25 ` Alan Stern
2007-07-05 17:42 ` Miklos Szeredi
2007-07-05 20:43 ` Alan Stern
2007-07-04 12:41 ` Theodore Tso
2007-07-04 14:40 ` Rafael J. Wysocki
2007-07-03 22:21 ` Alan Stern
2007-07-03 22:42 ` Matthew Garrett
2007-07-04 14:38 ` Alan Stern
2007-07-04 14:58 ` Matthew Garrett
2007-07-04 15:02 ` Oliver Neukum
2007-07-04 15:57 ` Alan Stern
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox