> network packet arrives. The difference between these scenarios is large. Your application seems to change desired outcome every email. Sorry but you need to explicitly explain and define a policy in full that we can test ideas against. Otherwise this is useless. > > If you have wake-on-lan then the network stack might be smarter and > > choose to express itself as > > > > 'the constraint is C6 unless the input queue is empty in which > > case suspend is ok as I have WoL and my network routing is such > > that I can prove that interface will be used' > > This is still racy. Going back to this: > > int input = socket(AF_INET, SOCK_STREAM|SOCK_NONBLOCK, 0); > char foo; > struct sockaddr addr; > connect (input, &addr, sizeof(addr)) > while (1) { > if (read(input, &foo, 1) > 0) { > (do something) > } else { > * SUSPEND OCCURS HERE * Fine but then the packet will arrive and we will wake back up process the packet and wake the task. See suspend is just like a deep sleep. If we went to sleep there and the packet arrival doesn't rewake the box the driver was buggy. > reaches the end of its timeslice. At this point the application has not > had an opportunity to indicate in any way whether or not the packet has > altered its constraints in any way. What stops us from immediately > suspending again? If my app level constraint before the packet is 'don't suspend' then my constraint on receipt is 'don't suspend' so I won't suspend. If my constraint is then lowered and I suspend I will suspend *after* the lowering. If my constraint is tightened then the decision to tighten is run under the previous constraint. Which is fine, because if I have a case where I must tighten my constraint within the tight constraint time I've screwed up my app and need to fix it. In reality almost all your userspace is going to look like 'trusted app' or 'untrusted app' in droidthink and won't be transitioning in user space (but may well be adding/losing kernel constraints) This is good because it's another thing app authors don't have to care about. It's good because apps can be run trusted/untrusted without recompiling. Alan _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm