A further explanation, which I'd like to have in the case log, for why a 
separate quiesce routine, and suspend was deemed insufficient follows.  
These details have previously been discussed with the project team 
before this case was submitted.  Note that none of the following is a 
request for any action on anyone's part, I just want to record the 
rationale more clearly here for posterity.

    -- Garrett

It is interesting to note that for many drivers there may be a great 
deal of shared implementation between quiesce and suspend.  However, we 
should consider why a separate quiesce is required:

    1) suspend requires device drivers be able to suspend without loss 
of functionality, which makes it much, much harder to guarantee correct 
function.  quiesce is far far simpler in this regard.  (If device 
drivers never "failed" suspend -- e.g. because the device is in use, 
then they could probably use their suspend logic.)

    2) quiesce requires a device be placed in a state where it can be 
reinitialized as if it were in a more-or-less default state, without a 
power cycle or bus reset, and without any soft state being passed from 
one environment to the next.  To put a concrete example,  think of a NIC 
device which initializes with a default MAC address, but which can be 
temporarily changed in software by the driver, e.g. in response to an 
end user using ifconfig to change the mac address.  The problem now is 
that the original factory mac address is "lost" unless the device gets a 
full reset.  (And in fact, this particular behavior for NICs is not 
uncommon.)  In this regard, the ability to go back to an initial "power 
on" or "default" state is actually a *new* requirement, and one where 
suspend semantics might not be sufficient.


Reply via email to