static int enter_state(suspend_state_t state) { int error; if (!valid_state(state)) return -ENODEV; if (!mutex_trylock(&pm_mutex)) return -EBUSY; if (state == PM_SUSPEND_DISK) { error = pm_suspend_disk(); goto Unlock; } pr_debug("PM: Preparing system for %s sleep\n", pm_states[state]); if ((error = suspend_prepare(state))) goto Unlock; pr_debug("PM: Entering %s sleep\n", pm_states[state]); error = suspend_enter(state); pr_debug("PM: Finishing wakeup.\n"); suspend_finish(state); Unlock: mutex_unlock(&pm_mutex); return error; }
static int enter_state(u32 state) { int error; if (down_trylock(&pm_sem)) return -EBUSY; /* Suspend is hard to get right on SMP. */ if (num_online_cpus() != 1) { error = -EPERM; goto Unlock; } if (state == PM_SUSPEND_DISK) { error = pm_suspend_disk(); goto Unlock; } pr_debug("PM: Preparing system for suspend\n"); if ((error = suspend_prepare(state))) goto Unlock; pr_debug("PM: Entering state.\n"); error = suspend_enter(state); pr_debug("PM: Finishing up.\n"); suspend_finish(state); Unlock: up(&pm_sem); return error; }