Re: [linux-pm] driver power operations (was Re: suspend2 merge)

From: Johannes Berg
Date: Fri Apr 27 2007 - 10:39:43 EST


On Fri, 2007-04-27 at 10:34 -0400, Alan Stern wrote:

> For the sake of argument, let's call the stages of STD and STR by these
> names (also noted are the current PSMG values):
>
> Suspend to disk:
> "prepare to create snapshot" (= FREEZE)
> "continue after snapshot" (= RESUME)
>
> Resume from disk:
> "prepare to restore snapshot" (= PRETHAW)
> "continue after restore" (= RESUME)
>
> Suspend to RAM:
> "suspend" (= SUSPEND)
> "resume" (= RESUME)
>
> The real reason for adding PRETHAW was that drivers couldn't distinguish
> between "continue after restore" and "resume", other than by examining the
> device's state -- since the PM core doesn't pass any information to the
> resume() method.

That's pretty much what I said about prethaw though, no? Anyway,

> Anyway, based on this analysis it seems reasonable to have Six (6) method
> pointers. Suggested names (in the same order as above):
>
> pre_snaphot()
> post_snapshot()
> pre_restore()
> post_restore()
> suspend()
> resume()
>
> People apparently assume that pre_snapshot() and pre_restore() would
> always do the same thing and hence be redundant. I'm not so sure; time
> will tell. Doing it this way certainly is more clear.

Right. I did assume that pre_snapshot and pre_restore would be
effectively the same since they both have to quiesce the device and
assume not much more. I'm not averse to making it explicit, many drivers
that don't care can just assign the same function.

> Then there's the question of having early_ and late_ versions of some of
> these things (i.e., one called with interrupts enabled, the other with
> interrupts disabled). I don't know to what extent that would be
> necessary; perhaps the each method call should occur in two phases with
> the interrupt-enable status changed in between. Then the interrupt-enable
> setting could be passed as an argument.

Good point. Though if we go for passing the interrupt-enable setting as
an argument then many drivers will have the same
"if (irqs_disabled()) return" code. Hm. I guess passing it isn't even
strictly necessary.

johannes

Attachment: signature.asc
Description: This is a digitally signed message part