Prev: [PATCH 7/8] Input: Block suspend while event queue is not empty.
Next: [PATCH 3/8] PM: suspend_block: Abort task freezing if a suspend_blocker is active.
From: Tony Lindgren on 7 May 2010 17:00 * Matthew Garrett <mjg(a)redhat.com> [100507 13:24]: > On Fri, May 07, 2010 at 12:55:48PM -0700, Tony Lindgren wrote: > > > - Deal with broken apps whichever way you want in the userspace. > > If we could do this then there would be no real need for suspend > blockers. OK, I guess I don't understand all the details, need some kind of common example I guess. So for example, if I leave ping running in a a terminal, do you have some way of preventing that from eating the battery? In my scenario that program would keep on running until the battery runs out, or something stops the program. But the system keeps hitting retention mode in the idle loop. How do you deal with programs like that? Do you just suspend the whole system anyways at some point, or do you have some other trick? Regards, Tony -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Matthew Garrett on 7 May 2010 17:10 On Fri, May 07, 2010 at 01:53:29PM -0700, Tony Lindgren wrote: > So for example, if I leave ping running in a a terminal, do you > have some way of preventing that from eating the battery? It depends on policy. If all network packets generate wakeup events then no, that will carry on eating battery. If ICMP doesn't generate a wakeup event then the process won't be run. > Do you just suspend the whole system anyways at some point, > or do you have some other trick? If nothing's holding any suspend blocks then the system will enter suspend. If the packet generates a wakeup then the kernel would block suspend until userspace has had the opportunity to do so. Once userspace has handled the packet then it could release the block and the system will immediately transition back into suspend. Here's a different example. A process is waiting for a keypress, but because it's badly written it's also drawing to the screen at 60 frames per second and preventing the system from every going to idle. How do you quiesce the system while still ensuring that the keypress will be delivered to the application? -- Matthew Garrett | mjg59(a)srcf.ucam.org -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Tony Lindgren on 7 May 2010 17:30 * Matthew Garrett <mjg(a)redhat.com> [100507 13:58]: > On Fri, May 07, 2010 at 01:53:29PM -0700, Tony Lindgren wrote: > > > So for example, if I leave ping running in a a terminal, do you > > have some way of preventing that from eating the battery? > > It depends on policy. If all network packets generate wakeup events then > no, that will carry on eating battery. If ICMP doesn't generate a wakeup > event then the process won't be run. > > > Do you just suspend the whole system anyways at some point, > > or do you have some other trick? > > If nothing's holding any suspend blocks then the system will enter > suspend. If the packet generates a wakeup then the kernel would block > suspend until userspace has had the opportunity to do so. Once userspace > has handled the packet then it could release the block and the system > will immediately transition back into suspend. OK, then what would I need to do to keep that ping running if I wanted to? > Here's a different example. A process is waiting for a keypress, but > because it's badly written it's also drawing to the screen at 60 frames > per second and preventing the system from every going to idle. How do > you quiesce the system while still ensuring that the keypress will be > delivered to the application? I guess it depends. If it's a game and I'm waiting to hit the fire button, then I don't want the system to suspend! It's starting to sound like you're really using suspend blocks to "certify" that the app is safe to keep running. Maybe it could be done with some kind of process flag instead that would tell "this process is safe to keep running from timer point of view" and if that flag is not set, then assume it's OK to stop the process at any point? Regards, Tony -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Daniel Walker on 7 May 2010 17:40 On Fri, 2010-05-07 at 22:03 +0100, Matthew Garrett wrote: > Here's a different example. A process is waiting for a keypress, but > because it's badly written it's also drawing to the screen at 60 frames > per second and preventing the system from every going to idle. How do > you quiesce the system while still ensuring that the keypress will be > delivered to the application? To me it's somewhat of a negative for suspend blockers. Since to solve the problem you give above you would have to use a suspend blocker in an asynchronous way (locked in an interrupt, released in a thread too) assuming I understand your example. I've had my share of semaphore nightmares, and I'm not too excited to see a protection scheme (i.e. a lock) which allows asynchronous usage like suspend blockers. Daniel -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Matthew Garrett on 7 May 2010 17:40
On Fri, May 07, 2010 at 02:30:20PM -0700, Daniel Walker wrote: > On Fri, 2010-05-07 at 22:03 +0100, Matthew Garrett wrote: > > > Here's a different example. A process is waiting for a keypress, but > > because it's badly written it's also drawing to the screen at 60 frames > > per second and preventing the system from every going to idle. How do > > you quiesce the system while still ensuring that the keypress will be > > delivered to the application? > > To me it's somewhat of a negative for suspend blockers. Since to solve > the problem you give above you would have to use a suspend blocker in an > asynchronous way (locked in an interrupt, released in a thread too) > assuming I understand your example. I've had my share of semaphore > nightmares, and I'm not too excited to see a protection scheme (i.e. a > lock) which allows asynchronous usage like suspend blockers. Check the input patch for an example of this. -- Matthew Garrett | mjg59(a)srcf.ucam.org -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |