245 if (suspend_freeze_processes()) {
246 error = -EAGAIN;
247 goto Thaw;
248 }
249
250 free_pages = global_page_state(NR_FREE_PAGES);
251 if (free_pages < FREE_PAGE_NUMBER) {
252 pr_debug("PM: free some memory\n");
253 shrink_all_memory(FREE_PAGE_NUMBER - free_pages);
254 if (nr_free_pages() < FREE_PAGE_NUMBER) {
255 error = -ENOMEM;
256 printk(KERN_ERR "PM: No enough memory\n");
257 }
258 }
259 if (!error)
260 return 0;
261
262 Thaw:
263 suspend_thaw_processes();
264 usermodehelper_enable();
265 Finish:
266 pm_notifier_call_chain(PM_POST_SUSPEND);
267 pm_restore_console();
268 return error;
269}
270
271
272void __attribute__ ((weak)) arch_suspend_disable_irqs(void)
273{
274 local_irq_disable();
275}
276
277
278void __attribute__ ((weak)) arch_suspend_enable_irqs(void)
279{
280 local_irq_enable();
281}
282
283
284
285