2.2.7 with 2.6.17.6. gives me on resume the following: BUG: sleeping function called from invalid context at mm/slab.c:2793 in_atomic():0, irqs_disabled():1 The reason is the following callchain is called with disabled IRQs: suspend2_suspend -> device_power_up -> sysdev_resume -> __sysdev_resume -> irqrouter_resume -> acpi_pci_link_resume -> acpi_pci_link_set -> acpi_set_current_resources -> acpi_rs_set_srs_method_data -> acpi_ut_create_internal_object_dbg -> acpi_ut_allocate_object_desc_dbg -> acpi_os_acquire_object -> kmem_cache_alloc with GFP_KERNEL flag. I don't see a reason why device_power_up() is being called with disabled IRQs, as ACPI definitely doesn't request it (or acpi_pci_link_resume, to be concrete). I haven't checked with APM or other archs, though. Submitted to swsup2-devel on 22 Jun 2006. --- JiKos == addon This patch is bogus. The problem has to be solved inside ACPI layer. See my other acpi-pci-link-allocation.patch --- atomic_copy.c.orig 2006-07-20 13:27:34.000000000 +0200 +++ atomic_copy.c 2006-07-22 17:15:17.000000000 +0200 @@ -379,11 +379,16 @@ printk(KERN_ERR "Error %d suspending\n", error); /* Restore control flow appears here */ restore_processor_state(); - if (!suspend2_in_suspend) + if (!suspend2_in_suspend) { copyback_high(); + local_irq_enable(); + device_power_up(); + goto ret; + } device_power_up(); enable_irqs: local_irq_enable(); +ret: return error; }