|
@@ -111,13 +111,24 @@ static int suspend_prepare(suspend_state_t state)
|
|
|
return error;
|
|
|
}
|
|
|
|
|
|
+/* default implementation */
|
|
|
+void __attribute__ ((weak)) arch_suspend_disable_irqs(void)
|
|
|
+{
|
|
|
+ local_irq_disable();
|
|
|
+}
|
|
|
+
|
|
|
+/* default implementation */
|
|
|
+void __attribute__ ((weak)) arch_suspend_enable_irqs(void)
|
|
|
+{
|
|
|
+ local_irq_enable();
|
|
|
+}
|
|
|
|
|
|
int suspend_enter(suspend_state_t state)
|
|
|
{
|
|
|
int error = 0;
|
|
|
- unsigned long flags;
|
|
|
|
|
|
- local_irq_save(flags);
|
|
|
+ arch_suspend_disable_irqs();
|
|
|
+ BUG_ON(!irqs_disabled());
|
|
|
|
|
|
if ((error = device_power_down(PMSG_SUSPEND))) {
|
|
|
printk(KERN_ERR "Some devices failed to power down\n");
|
|
@@ -126,7 +137,8 @@ int suspend_enter(suspend_state_t state)
|
|
|
error = pm_ops->enter(state);
|
|
|
device_power_up();
|
|
|
Done:
|
|
|
- local_irq_restore(flags);
|
|
|
+ arch_suspend_enable_irqs();
|
|
|
+ BUG_ON(irqs_disabled());
|
|
|
return error;
|
|
|
}
|
|
|
|