BUG: sleeping function called from invalid context when hibernating - Kernel

This is a discussion on BUG: sleeping function called from invalid context when hibernating - Kernel ; When using the linux-next kernel from 13 May 2008 I see the following in the logs when resuming from hibernate (system is Ubuntu 7.10): [ 3283.928033] BUG: sleeping function called from invalid context at kernel/rwsem.c:21 [ 3283.928033] in_atomic():0, irqs_disabled():1 [ ...

+ Reply to Thread
Results 1 to 4 of 4

Thread: BUG: sleeping function called from invalid context when hibernating

  1. BUG: sleeping function called from invalid context when hibernating

    When using the linux-next kernel from 13 May 2008 I see the following in
    the logs when resuming from hibernate (system is Ubuntu 7.10):

    [ 3283.928033] BUG: sleeping function called from invalid context at kernel/rwsem.c:21
    [ 3283.928033] in_atomic():0, irqs_disabled():1
    [ 3283.928033] 3 locks held by hibernate.sh/5892:
    [ 3283.928033] #0: (&buffer->mutex){--..}, at: [] sysfs_write_file+0x25/0xdf
    [ 3283.928033] #1: (pm_mutex){--..}, at: [] hibernate+0x10/0x177
    [ 3283.928033] #2: (pm_sleep_rwsem){--..}, at: [] device_suspend+0x2a/0x1c7
    [ 3283.928033] irq event stamp: 461790
    [ 3283.928033] hardirqs last enabled at (461789): [] __mutex_unlock_slowpath+0xd6/0xde
    [ 3283.928033] hardirqs last disabled at (461790): [] hibernation_snapshot+0xab/0x162
    [ 3283.928033] softirqs last enabled at (461166): [] __do_softirq+0x8f/0x94
    [ 3283.928033] softirqs last disabled at (461161): [] do_softirq+0x2a/0x42
    [ 3283.928033] Pid: 5892, comm: hibernate.sh Not tainted 2.6.25skw #25
    [ 3283.928033] [] __might_sleep+0xb8/0xbf
    [ 3283.928033] [] down_read+0x19/0x68
    [ 3283.928033] [] pci_get_subsys+0x48/0xc5
    [ 3283.928033] [] pci_get_device+0xe/0x10
    [ 3283.928033] [] quirk_vialatency+0x1b/0xac
    [ 3283.928033] [] pci_fixup_device+0x70/0x7c
    [ 3283.928033] [] pci_device_resume_early+0x17/0x2e
    [ 3283.928033] [] dpm_power_up+0x66/0x94
    [ 3283.928033] [] device_power_up+0xd/0xf
    [ 3283.928033] [] hibernation_snapshot+0x120/0x162
    [ 3283.928033] [] hibernate+0xc0/0x177
    [ 3283.928033] [] ? state_store+0x0/0xaa
    [ 3283.928033] [] state_store+0x45/0xaa
    [ 3283.928033] [] ? state_store+0x0/0xaa
    [ 3283.928033] [] kobj_attr_store+0x1a/0x22
    [ 3283.928033] [] sysfs_write_file+0xad/0xdf
    [ 3283.928033] [] ? sysfs_write_file+0x0/0xdf
    [ 3283.928033] [] vfs_write+0x88/0xf8
    [ 3283.928033] [] sys_write+0x3b/0x60
    [ 3283.928033] [] sysenter_past_esp+0x5f/0xa5
    [ 3283.928033] =======================
    [ 3283.928033] pci 0000:00:07.0: Disabling VIA external APIC routing

    --
    Sitsofe | http://sucs.org/~sits/

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  2. Re: BUG: sleeping function called from invalid context when hibernating

    On Thursday, 15 of May 2008, Sitsofe Wheeler wrote:
    > When using the linux-next kernel from 13 May 2008 I see the following in
    > the logs when resuming from hibernate (system is Ubuntu 7.10):


    Something in the PCI department attempted to take a lock with interrupts
    disabled, but that lock had previously been held with interrupts enabled, or so
    it seems. That something was called from pci_device_resume_early and it was
    a VIA quirk, AFAICS.

    I always need some help from people who actually understand these messages,
    though. Oh, well.

    > [ 3283.928033] BUG: sleeping function called from invalid context at kernel/rwsem.c:21
    > [ 3283.928033] in_atomic():0, irqs_disabled():1
    > [ 3283.928033] 3 locks held by hibernate.sh/5892:
    > [ 3283.928033] #0: (&buffer->mutex){--..}, at: [] sysfs_write_file+0x25/0xdf
    > [ 3283.928033] #1: (pm_mutex){--..}, at: [] hibernate+0x10/0x177
    > [ 3283.928033] #2: (pm_sleep_rwsem){--..}, at: [] device_suspend+0x2a/0x1c7
    > [ 3283.928033] irq event stamp: 461790
    > [ 3283.928033] hardirqs last enabled at (461789): [] __mutex_unlock_slowpath+0xd6/0xde
    > [ 3283.928033] hardirqs last disabled at (461790): [] hibernation_snapshot+0xab/0x162
    > [ 3283.928033] softirqs last enabled at (461166): [] __do_softirq+0x8f/0x94
    > [ 3283.928033] softirqs last disabled at (461161): [] do_softirq+0x2a/0x42
    > [ 3283.928033] Pid: 5892, comm: hibernate.sh Not tainted 2.6.25skw #25
    > [ 3283.928033] [] __might_sleep+0xb8/0xbf
    > [ 3283.928033] [] down_read+0x19/0x68
    > [ 3283.928033] [] pci_get_subsys+0x48/0xc5
    > [ 3283.928033] [] pci_get_device+0xe/0x10
    > [ 3283.928033] [] quirk_vialatency+0x1b/0xac
    > [ 3283.928033] [] pci_fixup_device+0x70/0x7c
    > [ 3283.928033] [] pci_device_resume_early+0x17/0x2e
    > [ 3283.928033] [] dpm_power_up+0x66/0x94
    > [ 3283.928033] [] device_power_up+0xd/0xf
    > [ 3283.928033] [] hibernation_snapshot+0x120/0x162
    > [ 3283.928033] [] hibernate+0xc0/0x177
    > [ 3283.928033] [] ? state_store+0x0/0xaa
    > [ 3283.928033] [] state_store+0x45/0xaa
    > [ 3283.928033] [] ? state_store+0x0/0xaa
    > [ 3283.928033] [] kobj_attr_store+0x1a/0x22
    > [ 3283.928033] [] sysfs_write_file+0xad/0xdf
    > [ 3283.928033] [] ? sysfs_write_file+0x0/0xdf
    > [ 3283.928033] [] vfs_write+0x88/0xf8
    > [ 3283.928033] [] sys_write+0x3b/0x60
    > [ 3283.928033] [] sysenter_past_esp+0x5f/0xa5
    > [ 3283.928033] =======================
    > [ 3283.928033] pci 0000:00:07.0: Disabling VIA external APIC routing
    >


    Thanks,
    Rafael
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  3. Re: BUG: sleeping function called from invalid context when hibernating

    On Thu, 15 May 2008 00:27:52 +0200
    "Rafael J. Wysocki" wrote:

    > On Thursday, 15 of May 2008, Sitsofe Wheeler wrote:
    > > When using the linux-next kernel from 13 May 2008 I see the following in
    > > the logs when resuming from hibernate (system is Ubuntu 7.10):

    >
    > Something in the PCI department attempted to take a lock with interrupts
    > disabled, but that lock had previously been held with interrupts enabled, or so
    > it seems. That something was called from pci_device_resume_early and it was
    > a VIA quirk, AFAICS.
    >
    > I always need some help from people who actually understand these messages,
    > though. Oh, well.
    >
    > > [ 3283.928033] BUG: sleeping function called from invalid context at kernel/rwsem.c:21
    > > [ 3283.928033] in_atomic():0, irqs_disabled():1
    > > [ 3283.928033] 3 locks held by hibernate.sh/5892:
    > > [ 3283.928033] #0: (&buffer->mutex){--..}, at: [] sysfs_write_file+0x25/0xdf
    > > [ 3283.928033] #1: (pm_mutex){--..}, at: [] hibernate+0x10/0x177
    > > [ 3283.928033] #2: (pm_sleep_rwsem){--..}, at: [] device_suspend+0x2a/0x1c7
    > > [ 3283.928033] irq event stamp: 461790
    > > [ 3283.928033] hardirqs last enabled at (461789): [] __mutex_unlock_slowpath+0xd6/0xde
    > > [ 3283.928033] hardirqs last disabled at (461790): [] hibernation_snapshot+0xab/0x162
    > > [ 3283.928033] softirqs last enabled at (461166): [] __do_softirq+0x8f/0x94
    > > [ 3283.928033] softirqs last disabled at (461161): [] do_softirq+0x2a/0x42
    > > [ 3283.928033] Pid: 5892, comm: hibernate.sh Not tainted 2.6.25skw #25
    > > [ 3283.928033] [] __might_sleep+0xb8/0xbf
    > > [ 3283.928033] [] down_read+0x19/0x68
    > > [ 3283.928033] [] pci_get_subsys+0x48/0xc5
    > > [ 3283.928033] [] pci_get_device+0xe/0x10
    > > [ 3283.928033] [] quirk_vialatency+0x1b/0xac
    > > [ 3283.928033] [] pci_fixup_device+0x70/0x7c
    > > [ 3283.928033] [] pci_device_resume_early+0x17/0x2e
    > > [ 3283.928033] [] dpm_power_up+0x66/0x94
    > > [ 3283.928033] [] device_power_up+0xd/0xf
    > > [ 3283.928033] [] hibernation_snapshot+0x120/0x162
    > > [ 3283.928033] [] hibernate+0xc0/0x177
    > > [ 3283.928033] [] ? state_store+0x0/0xaa
    > > [ 3283.928033] [] state_store+0x45/0xaa
    > > [ 3283.928033] [] ? state_store+0x0/0xaa
    > > [ 3283.928033] [] kobj_attr_store+0x1a/0x22
    > > [ 3283.928033] [] sysfs_write_file+0xad/0xdf
    > > [ 3283.928033] [] ? sysfs_write_file+0x0/0xdf
    > > [ 3283.928033] [] vfs_write+0x88/0xf8
    > > [ 3283.928033] [] sys_write+0x3b/0x60
    > > [ 3283.928033] [] sysenter_past_esp+0x5f/0xa5
    > > [ 3283.928033] =======================
    > > [ 3283.928033] pci 0000:00:07.0: Disabling VIA external APIC routing
    > >


    That's the device_power_up() "Must be called with interrupts disabled"
    thing.

    We break it again and again.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  4. Re: BUG: sleeping function called from invalid context when hibernating

    On Thursday, 15 of May 2008, Andrew Morton wrote:
    > On Thu, 15 May 2008 00:27:52 +0200
    > "Rafael J. Wysocki" wrote:
    >
    > > On Thursday, 15 of May 2008, Sitsofe Wheeler wrote:
    > > > When using the linux-next kernel from 13 May 2008 I see the following in
    > > > the logs when resuming from hibernate (system is Ubuntu 7.10):

    > >
    > > Something in the PCI department attempted to take a lock with interrupts
    > > disabled, but that lock had previously been held with interrupts enabled, or so
    > > it seems. That something was called from pci_device_resume_early and it was
    > > a VIA quirk, AFAICS.
    > >
    > > I always need some help from people who actually understand these messages,
    > > though. Oh, well.
    > >
    > > > [ 3283.928033] BUG: sleeping function called from invalid context at kernel/rwsem.c:21
    > > > [ 3283.928033] in_atomic():0, irqs_disabled():1
    > > > [ 3283.928033] 3 locks held by hibernate.sh/5892:
    > > > [ 3283.928033] #0: (&buffer->mutex){--..}, at: [] sysfs_write_file+0x25/0xdf
    > > > [ 3283.928033] #1: (pm_mutex){--..}, at: [] hibernate+0x10/0x177
    > > > [ 3283.928033] #2: (pm_sleep_rwsem){--..}, at: [] device_suspend+0x2a/0x1c7
    > > > [ 3283.928033] irq event stamp: 461790
    > > > [ 3283.928033] hardirqs last enabled at (461789): [] __mutex_unlock_slowpath+0xd6/0xde
    > > > [ 3283.928033] hardirqs last disabled at (461790): [] hibernation_snapshot+0xab/0x162
    > > > [ 3283.928033] softirqs last enabled at (461166): [] __do_softirq+0x8f/0x94
    > > > [ 3283.928033] softirqs last disabled at (461161): [] do_softirq+0x2a/0x42
    > > > [ 3283.928033] Pid: 5892, comm: hibernate.sh Not tainted 2.6.25skw #25
    > > > [ 3283.928033] [] __might_sleep+0xb8/0xbf
    > > > [ 3283.928033] [] down_read+0x19/0x68
    > > > [ 3283.928033] [] pci_get_subsys+0x48/0xc5
    > > > [ 3283.928033] [] pci_get_device+0xe/0x10
    > > > [ 3283.928033] [] quirk_vialatency+0x1b/0xac
    > > > [ 3283.928033] [] pci_fixup_device+0x70/0x7c
    > > > [ 3283.928033] [] pci_device_resume_early+0x17/0x2e
    > > > [ 3283.928033] [] dpm_power_up+0x66/0x94
    > > > [ 3283.928033] [] device_power_up+0xd/0xf
    > > > [ 3283.928033] [] hibernation_snapshot+0x120/0x162
    > > > [ 3283.928033] [] hibernate+0xc0/0x177
    > > > [ 3283.928033] [] ? state_store+0x0/0xaa
    > > > [ 3283.928033] [] state_store+0x45/0xaa
    > > > [ 3283.928033] [] ? state_store+0x0/0xaa
    > > > [ 3283.928033] [] kobj_attr_store+0x1a/0x22
    > > > [ 3283.928033] [] sysfs_write_file+0xad/0xdf
    > > > [ 3283.928033] [] ? sysfs_write_file+0x0/0xdf
    > > > [ 3283.928033] [] vfs_write+0x88/0xf8
    > > > [ 3283.928033] [] sys_write+0x3b/0x60
    > > > [ 3283.928033] [] sysenter_past_esp+0x5f/0xa5
    > > > [ 3283.928033] =======================
    > > > [ 3283.928033] pci 0000:00:07.0: Disabling VIA external APIC routing
    > > >

    >
    > That's the device_power_up() "Must be called with interrupts disabled"
    > thing.
    >
    > We break it again and again.


    Well, in this particular case someone placed the quirk in the wrong place,
    it shouldn't be called from pci_device_resume_early().

    I'll have a closer look at it tomorrow.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

+ Reply to Thread