]> rtime.felk.cvut.cz Git - hercules2020/nv-tegra/linux-4.4.git/blob - rt-patches/0019-net-flip-lock-dep-thingy.patch.patch
rt_patches: required rebase due to printk change
[hercules2020/nv-tegra/linux-4.4.git] / rt-patches / 0019-net-flip-lock-dep-thingy.patch.patch
1 From f9117482487441b19b19b14b0aad05bee8143e8d Mon Sep 17 00:00:00 2001
2 From: Thomas Gleixner <tglx@linutronix.de>
3 Date: Tue, 28 Jun 2011 10:59:58 +0200
4 Subject: [PATCH 019/366] net-flip-lock-dep-thingy.patch
5
6 =======================================================
7 [ INFO: possible circular locking dependency detected ]
8 3.0.0-rc3+ #26
9 -------------------------------------------------------
10 ip/1104 is trying to acquire lock:
11  (local_softirq_lock){+.+...}, at: [<ffffffff81056d12>] __local_lock+0x25/0x68
12
13 but task is already holding lock:
14  (sk_lock-AF_INET){+.+...}, at: [<ffffffff81433308>] lock_sock+0x10/0x12
15
16 which lock already depends on the new lock.
17
18 the existing dependency chain (in reverse order) is:
19
20 -> #1 (sk_lock-AF_INET){+.+...}:
21        [<ffffffff810836e5>] lock_acquire+0x103/0x12e
22        [<ffffffff813e2781>] lock_sock_nested+0x82/0x92
23        [<ffffffff81433308>] lock_sock+0x10/0x12
24        [<ffffffff81433afa>] tcp_close+0x1b/0x355
25        [<ffffffff81453c99>] inet_release+0xc3/0xcd
26        [<ffffffff813dff3f>] sock_release+0x1f/0x74
27        [<ffffffff813dffbb>] sock_close+0x27/0x2b
28        [<ffffffff81129c63>] fput+0x11d/0x1e3
29        [<ffffffff81126577>] filp_close+0x70/0x7b
30        [<ffffffff8112667a>] sys_close+0xf8/0x13d
31        [<ffffffff814ae882>] system_call_fastpath+0x16/0x1b
32
33 -> #0 (local_softirq_lock){+.+...}:
34        [<ffffffff81082ecc>] __lock_acquire+0xacc/0xdc8
35        [<ffffffff810836e5>] lock_acquire+0x103/0x12e
36        [<ffffffff814a7e40>] _raw_spin_lock+0x3b/0x4a
37        [<ffffffff81056d12>] __local_lock+0x25/0x68
38        [<ffffffff81056d8b>] local_bh_disable+0x36/0x3b
39        [<ffffffff814a7fc4>] _raw_write_lock_bh+0x16/0x4f
40        [<ffffffff81433c38>] tcp_close+0x159/0x355
41        [<ffffffff81453c99>] inet_release+0xc3/0xcd
42        [<ffffffff813dff3f>] sock_release+0x1f/0x74
43        [<ffffffff813dffbb>] sock_close+0x27/0x2b
44        [<ffffffff81129c63>] fput+0x11d/0x1e3
45        [<ffffffff81126577>] filp_close+0x70/0x7b
46        [<ffffffff8112667a>] sys_close+0xf8/0x13d
47        [<ffffffff814ae882>] system_call_fastpath+0x16/0x1b
48
49 other info that might help us debug this:
50
51  Possible unsafe locking scenario:
52
53        CPU0                    CPU1
54        ----                    ----
55   lock(sk_lock-AF_INET);
56                                lock(local_softirq_lock);
57                                lock(sk_lock-AF_INET);
58   lock(local_softirq_lock);
59
60  *** DEADLOCK ***
61
62 1 lock held by ip/1104:
63  #0:  (sk_lock-AF_INET){+.+...}, at: [<ffffffff81433308>] lock_sock+0x10/0x12
64
65 stack backtrace:
66 Pid: 1104, comm: ip Not tainted 3.0.0-rc3+ #26
67 Call Trace:
68  [<ffffffff81081649>] print_circular_bug+0x1f8/0x209
69  [<ffffffff81082ecc>] __lock_acquire+0xacc/0xdc8
70  [<ffffffff81056d12>] ? __local_lock+0x25/0x68
71  [<ffffffff810836e5>] lock_acquire+0x103/0x12e
72  [<ffffffff81056d12>] ? __local_lock+0x25/0x68
73  [<ffffffff81046c75>] ? get_parent_ip+0x11/0x41
74  [<ffffffff814a7e40>] _raw_spin_lock+0x3b/0x4a
75  [<ffffffff81056d12>] ? __local_lock+0x25/0x68
76  [<ffffffff81046c8c>] ? get_parent_ip+0x28/0x41
77  [<ffffffff81056d12>] __local_lock+0x25/0x68
78  [<ffffffff81056d8b>] local_bh_disable+0x36/0x3b
79  [<ffffffff81433308>] ? lock_sock+0x10/0x12
80  [<ffffffff814a7fc4>] _raw_write_lock_bh+0x16/0x4f
81  [<ffffffff81433c38>] tcp_close+0x159/0x355
82  [<ffffffff81453c99>] inet_release+0xc3/0xcd
83  [<ffffffff813dff3f>] sock_release+0x1f/0x74
84  [<ffffffff813dffbb>] sock_close+0x27/0x2b
85  [<ffffffff81129c63>] fput+0x11d/0x1e3
86  [<ffffffff81126577>] filp_close+0x70/0x7b
87  [<ffffffff8112667a>] sys_close+0xf8/0x13d
88  [<ffffffff814ae882>] system_call_fastpath+0x16/0x1b
89
90 Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
91 ---
92  net/core/sock.c | 3 +--
93  1 file changed, 1 insertion(+), 2 deletions(-)
94
95 diff --git a/net/core/sock.c b/net/core/sock.c
96 index f367df3..d578b70 100644
97 --- a/net/core/sock.c
98 +++ b/net/core/sock.c
99 @@ -2439,12 +2439,11 @@ void lock_sock_nested(struct sock *sk, int subclass)
100         if (sk->sk_lock.owned)
101                 __lock_sock(sk);
102         sk->sk_lock.owned = 1;
103 -       spin_unlock(&sk->sk_lock.slock);
104 +       spin_unlock_bh(&sk->sk_lock.slock);
105         /*
106          * The sk_lock has mutex_lock() semantics here:
107          */
108         mutex_acquire(&sk->sk_lock.dep_map, subclass, 0, _RET_IP_);
109 -       local_bh_enable();
110  }
111  EXPORT_SYMBOL(lock_sock_nested);
112  
113 -- 
114 1.9.1
115