How do I get rid of these "BUG: sleeping function called from ... kernel/rtmutex.c:707"?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

I hope this message will find its way to the linux-rt mailing list. I subscribed but for reasons that are unknown to me I cannot receive anything from this list (I contacted the owner to sort out the problem). As I side note, for this very reason, I'll appreciate if you CC me whenever you answer to this mail, otherwise I might miss it. Thanks in advance.

I am using 2.6.33.7-rt30 (platform in arm/mach-ixp4xx ; distro is OpenWRT with 2.6.33.7 re-imported (it has been removed from OpenWRT)).

When I up a network interface with ifconfig, I systematically get the following error message in dmesg :

[ 64.205417] BUG: sleeping function called from invalid context at kernel/rtmutex.c:707 [ 64.205453] pcnt: 0 0 in_atomic(): 0, irqs_disabled(): 128, pid: 1047, name: ifconfig
[   64.205472] Backtrace:
[ 64.205521] [<c002b6c0>] (dump_backtrace+0x0/0x110) from [<c02dbe20>] (dump_stack+0x18/0x1c)
[   64.205545]  r7:c780daa0 r6:c780daa0 r5:00000020 r4:00000000
[ 64.205591] [<c02dbe08>] (dump_stack+0x0/0x1c) from [<c0032f7c>] (__might_sleep+0xf8/0x118) [ 64.205629] [<c0032e84>] (__might_sleep+0x0/0x118) from [<c02de468>] (rt_spin_lock+0x34/0x64)
[   64.205650]  r4:c03a18d8
[ 64.205689] [<c02de434>] (rt_spin_lock+0x0/0x64) from [<c0095908>] (kmem_cache_alloc+0x40/0x15c)
[   64.205711]  r4:c5bd1df0
[ 64.205744] [<c00958c8>] (kmem_cache_alloc+0x0/0x15c) from [<c01c749c>] (__alloc_skb+0x30/0x104) [ 64.205778] [<c01c746c>] (__alloc_skb+0x0/0x104) from [<c01c813c>] (dev_alloc_skb+0x20/0x44)
[   64.205800]  r8:a0000013 r7:c42f4340 r6:c42f4000 r5:c5ae1540 r4:c5bd1df0
[ 64.205866] [<c01c811c>] (dev_alloc_skb+0x0/0x44) from [<bf0d9a88>] (do_dev_stop+0x11c/0x2e4 [ixp400_eth]) [ 64.205909] [<bf0d9a60>] (do_dev_stop+0xf4/0x2e4 [ixp400_eth]) from [<bf0d9ba8>] (do_dev_stop+0x23c/0x2e4 [ixp400_eth]) [ 64.205952] [<bf0d9b30>] (do_dev_stop+0x1c4/0x2e4 [ixp400_eth]) from [<bf0da230>] (do_dev_open+0x24/0xa4 [ixp400_eth])
[   64.205977]  r6:00001043 r5:bf0db448 r4:c42f4000
[ 64.206020] [<bf0da20c>] (do_dev_open+0x0/0xa4 [ixp400_eth]) from [<c01d0e0c>] (dev_open+0xcc/0x134)
[   64.206042]  r5:bf0db1d0 r4:c42f4000
[ 64.206086] [<c01d0d40>] (dev_open+0x0/0x134) from [<c01d0204>] (dev_change_flags+0xb0/0x190)
[   64.206107]  r5:00000041 r4:c42f4000
[ 64.206154] [<c01d0154>] (dev_change_flags+0x0/0x190) from [<c0256444>] (devinet_ioctl+0x2f0/0x6b0)
[   64.206177]  r7:c5bd1e80 r6:c59e0600 r5:c788c4e0 r4:00000000
[ 64.206226] [<c0256154>] (devinet_ioctl+0x0/0x6b0) from [<c02579a8>] (inet_ioctl+0xd0/0x10c) [ 64.206270] [<c02578d8>] (inet_ioctl+0x0/0x10c) from [<c01be7c8>] (sock_ioctl+0x1fc/0x25c)
[   64.206291]  r4:c4ab3ec0
[ 64.206318] [<c01be5cc>] (sock_ioctl+0x0/0x25c) from [<c00a57bc>] (vfs_ioctl+0x34/0xb4)
[   64.206338]  r6:be8cdd60 r5:00008914 r4:c4ab3ec0
[ 64.206375] [<c00a5788>] (vfs_ioctl+0x0/0xb4) from [<c00a5e98>] (do_vfs_ioctl+0x548/0x5b4)
[   64.206396]  r6:00000003 r5:c4ab3ec0 r4:c6014afc
[ 64.206433] [<c00a5950>] (do_vfs_ioctl+0x0/0x5b4) from [<c00a5f44>] (sys_ioctl+0x40/0x60) [ 64.206477] [<c00a5f04>] (sys_ioctl+0x0/0x60) from [<c0027f20>] (ret_fast_syscall+0x0/0x28)
[   64.206499]  r7:00000036 r6:000001c3 r5:00000004 r4:000508e7

It seems that this message does not prevent ifconfig to work correctly. The code at kernel/rtmutex.c:707 says:

/* 701 */ static inline void
/* 702 */ rt_spin_lock_fastlock(struct rt_mutex *lock,
/* 703 */         void  (*slowfn)(struct rt_mutex *lock))
/* 704 */ {
/* 705 */     /* Temporary HACK! */
/* 706 */     if (likely(!current->in_printk))
/* 707 */         might_sleep();
/* 708 */     else if (in_atomic() || irqs_disabled())
/* 709 */         /* don't grab locks for printk in atomic */
/* 710 */         return;
/* 711 */
/* 712 */     if (likely(rt_mutex_cmpxchg(lock, NULL, current)))
/* 713 */         rt_mutex_deadlock_account_lock(lock, current);
/* 714 */     else
/* 715 */         slowfn(lock);
/* 716 */ }

I did my homework, and found that a similar message have been seen here and there ([1], [2]). But the solution provided in [1] (avoid the dynamic allocation, reserve an automatic (as in C 'auto' keyword) buffer) is not helping much in my case : I'm not going to ask to dev_alloc_skb() to not perform static allocations, while [2] do not provide any kind of solution.

Now, I want to get rid of these messages in the correct way. I can implement a bizzare hack to remove this issue, but I have no guarantee that this hack will be sensible. What I'm searching for is a correct (in the linux kernel way) to do this.

Can anybody help?

Thanks in advance,

-- Emmanuel Deloget

[1] http://www.spinics.net/lists/linux-rt-users/msg06048.html
[2] http://comments.gmane.org/gmane.linux.kernel.firewire.devel/14648

--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux