// kernel\power\suspend.c/**
* suspend_enter - Make the system enter the given sleep state.
* @state: System sleep state to enter.
* @wakeup: Returns information that the sleep state should not be re-entered.
*
* This function should be called after devices have been suspended.
*/staticintsuspend_enter(suspend_state_t state, bool *wakeup){
int error;
error =platform_suspend_prepare(state);if(error)goto Platform_finish;
error =dpm_suspend_late(PMSG_SUSPEND);if(error){
pr_err("late suspend of devices failed\n");goto Platform_finish;}
error =platform_suspend_prepare_late(state);if(error)goto Devices_early_resume;
error =dpm_suspend_noirq(PMSG_SUSPEND);if(error){
pr_err("noirq suspend of devices failed\n");goto Platform_early_resume;}
error =platform_suspend_prepare_noirq(state);if(error)goto Platform_wake;if(suspend_test(TEST_PLATFORM))goto Platform_wake;if(state == PM_SUSPEND_TO_IDLE){
s2idle_loop();goto Platform_wake;}
error =suspend_disable_secondary_cpus();if(error ||suspend_test(TEST_CPUS))goto Enable_cpus;arch_suspend_disable_irqs();BUG_ON(!irqs_disabled());
system_state = SYSTEM_SUSPEND;
error =syscore_suspend();if(!error){
*wakeup =pm_wakeup_pending();if(!(suspend_test(TEST_CORE)||*wakeup)){
trace_suspend_resume(TPS("machine_suspend"),
state, true);
error = suspend_ops->enter(state);trace_suspend_resume(TPS("machine_suspend"),
state, false);}elseif(*wakeup){
error =-EBUSY;}syscore_resume(