From: Peter Zijlstra Freezing user space processes ... <4>------------[ cut here ]------------ WARNING: at kernel/lockdep.c:2658 check_flags+0x4c/0x127() Modules linked in: i915 drm ipw2200 sonypi ipv6 autofs4 hidp l2cap bluetooth sunrpc nf_conntrack_netbios_ns ipt_REJECT nf_conntrack_ipv4 xt_state nf_conntrack xt_tcpudp iptable_filter ip_tables x_tables acpi_cpufreq nvram ohci1394 ieee1394 ehci_hcd uhci_hcd sg joydev snd_hda_intel snd_seq_dummy sr_mod snd_seq_oss cdrom snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss ieee80211 pcspkr ieee80211_crypt snd_pcm i2c_i801 snd_timer i2c_core ide_pci_generic piix snd soundcore snd_page_alloc button ext3 jbd ide_disk ide_core [last unloaded: ipw2200] Pid: 3250, comm: zsh Not tainted 2.6.26-rc5 #1 [] warn_on_slowpath+0x41/0x6d [] ? native_sched_clock+0x82/0x96 [] ? mark_held_locks+0x41/0x5c [] ? _spin_unlock_irqrestore+0x36/0x58 [] ? trace_hardirqs_on+0xe6/0x10d [] ? __lock_acquire+0xae3/0xb2b [] ? schedule+0x39b/0x3b4 [] check_flags+0x4c/0x127 [] lock_acquire+0x3a/0x86 [] _spin_lock+0x26/0x53 [] ? refrigerator+0x13/0xc3 [] refrigerator+0x13/0xc3 [] get_signal_to_deliver+0x3c/0x31e [] do_notify_resume+0x91/0x6ee [] ? lock_release_holdtime+0x50/0x56 [] ? _spin_unlock_irqrestore+0x36/0x58 [] ? read_chan+0x0/0x58c [] ? trace_hardirqs_on+0xe6/0x10d [] ? _spin_unlock_irqrestore+0x42/0x58 [] ? tty_ldisc_deref+0x5c/0x63 [] ? tty_read+0x66/0x98 [] ? audit_syscall_exit+0x2aa/0x2c5 [] ? do_syscall_trace+0x6b/0x16f [] work_notifysig+0x13/0x1b ======================= ---[ end trace 25b49fe59a25afa5 ]--- possible reason: unannotated irqs-off. irq event stamp: 58919 hardirqs last enabled at (58919): [] syscall_exit_work+0x11/0x26 Joy - I so love entry.S Best I can make of it: syscall_exit_work resume_userspace DISABLE_INTERRUPTS (no TRACE_IRQS_OFF) work_pending work_notifysig do_notify_resume() do_signal() get_signal_to_deliver() try_to_freeze() refrigerator() task_lock() -> check_flags() -> BANG The normal path is: syscall_exit_work resume_userspace DISABLE_INTERRUPTS restore_all TRACE_IRQS_IRET iret No idea why that would not warn.. i386-defconfig + lockdep seems to boot with this patch.. Signed-off-by: Peter Zijlstra Cc: "Rafael J. Wysocki" Cc: Ingo Molnar Signed-off-by: Andrew Morton --- arch/x86/kernel/entry_32.S | 1 + 1 file changed, 1 insertion(+) diff -puN arch/x86/kernel/entry_32.S~x86-fix-lockdep-warning-during-suspend-to-ram arch/x86/kernel/entry_32.S --- a/arch/x86/kernel/entry_32.S~x86-fix-lockdep-warning-during-suspend-to-ram +++ a/arch/x86/kernel/entry_32.S @@ -248,6 +248,7 @@ ENTRY(resume_userspace) DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt # setting need_resched or sigpending # between sampling and the iret + TRACE_IRQS_OFF movl TI_flags(%ebp), %ecx andl $_TIF_WORK_MASK, %ecx # is there any work to be done on # int/exception return? _