On Tue, 2007-04-10 at 13:36 +0200, Pavel Machek wrote: > Hmm, and can't you simply create sysdev for decrementer and special > platform handling? sysdevs should be suspended last... So I looked again and noticed that my earlier statement was wrong. The special platform handling can well be done with platform devices, I can simply insert them into the power management list early by using a quite early initcall when registering them, that way they'll be suspended last. So contrary to what I said, those aren't a problem. The decrementer, however, I looked at again and noticed that I had a wrong assumption. Let me give a short description of how the decrementer works first: The decrementer is a 32-bit register that counts down based on an implementation-dependent clock, on my powerbook it's somewhere around 18MHz, on my powermac 32MHz (IIRC). When the most significant bit transitions from 0 to 1 the decrementer exception is raised, when exceptions are enabled it's taken. However, when exceptions are disabled, it stays pending until it is taken when exceptions are enabled again. Because the exception stays pending, we need to set the decrementer to the highest possible value before interrupts are disabled so we can be sure that the exception is not pending. This is to ensure that the processor can later go to sleep properly to be turned off. Since we only have a limited amount of time after setting the decrementer to such a high value (granted, it's at least a minute in all cases I've seen so far) we like to do it right before disabling interrupts. johannes
Attachment:
signature.asc
Description: This is a digitally signed message part
_______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm