On Thursday, March 10, 2011, Alan Stern wrote: > On Thu, 10 Mar 2011, Rafael J. Wysocki wrote: > > > Some subsystems need to carry out suspend/resume and shutdown > > operations with one CPU on-line and interrupts disabled. The only > > way to register such operations is to define a sysdev class and > > a sysdev specifically for this purpose which is cumbersome and > > inefficient. Moreover, the arguments taken by sysdev suspend, > > resume and shutdown callbacks are practically never necessary. > > > > For this reason, introduce a simpler interface allowing subsystems > > to register operations to be executed very late during system suspend > > and shutdown and very early during resume in the form of > > strcut syscore_ops objects. > > ... > > > Index: linux-2.6/drivers/base/syscore.c > > =================================================================== > > --- /dev/null > > +++ linux-2.6/drivers/base/syscore.c > > It's true that the existing sys.c file lies in drivers/base; this is > presumably because it handles a bunch of class-related registration > stuff. Now you're getting rid of all that, leaving just the > power-related operations, so doesn't it make more sense to put this > file in drivers/base/power? I didn't, because shutdown() doesn't really belong in there (well, depending). > > +/** > > + * syscore_suspend - Execute all the registered system core suspend callbacks. > > + * > > + * This function is executed with one CPU on-line and disabled interrupts. > > + */ > > +int syscore_suspend(void) > > +{ > > + struct syscore_ops *ops; > > + > > + list_for_each_entry_reverse(ops, &syscore_ops_list, node) > > + if (ops->suspend) { > > + int ret = ops->suspend(); > > + if (ret) { > > + pr_err("PM: System core suspend callback " > > + "%pF failed.\n", ops->suspend); > > + return ret; > > If an error occurs, you need to go back and resume all the things that > were suspended. At least, that's what the code in sysdev_suspend does. Right, thanks a lot! > > + } > > + } > > + > > + return 0; > > +} Rafael _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm