Ingo Molnar
0bf52b9817
net: Fix spinlock use in alloc_netdev_mq()
-tip testing found this lockdep warning:
[ 2.272010] calling net_dev_init+0x0/0x164 @ 1
[ 2.276033] device class 'net': registering
[ 2.280191] INFO: trying to register non-static key.
[ 2.284005] the code is fine but needs lockdep annotation.
[ 2.284005] turning off the locking correctness validator.
[ 2.284005] Pid: 1, comm: swapper Not tainted 2.6.31-rc5-tip #1145
[ 2.284005] Call Trace:
[ 2.284005] [<7958eb4e>] ? printk+0xf/0x11
[ 2.284005] [<7904f83c>] __lock_acquire+0x11b/0x622
[ 2.284005] [<7908c9b7>] ? alloc_debug_processing+0xf9/0x144
[ 2.284005] [<7904e2be>] ? mark_held_locks+0x3a/0x52
[ 2.284005] [<7908dbc4>] ? kmem_cache_alloc+0xa8/0x13f
[ 2.284005] [<7904e475>] ? trace_hardirqs_on_caller+0xa2/0xc3
[ 2.284005] [<7904fdf6>] lock_acquire+0xb3/0xd0
[ 2.284005] [<79489678>] ? alloc_netdev_mq+0xf5/0x1ad
[ 2.284005] [<79591514>] _spin_lock_bh+0x2d/0x5d
[ 2.284005] [<79489678>] ? alloc_netdev_mq+0xf5/0x1ad
[ 2.284005] [<79489678>] alloc_netdev_mq+0xf5/0x1ad
[ 2.284005] [<793a38f2>] ? loopback_setup+0x0/0x74
[ 2.284005] [<798eecd0>] loopback_net_init+0x20/0x5d
[ 2.284005] [<79483efb>] register_pernet_device+0x23/0x4b
[ 2.284005] [<798f5c9f>] net_dev_init+0x115/0x164
[ 2.284005] [<7900104f>] do_one_initcall+0x4a/0x11a
[ 2.284005] [<798f5b8a>] ? net_dev_init+0x0/0x164
[ 2.284005] [<79066f6d>] ? register_irq_proc+0x8c/0xa8
[ 2.284005] [<798cc29a>] do_basic_setup+0x42/0x52
[ 2.284005] [<798cc30a>] kernel_init+0x60/0xa1
[ 2.284005] [<798cc2aa>] ? kernel_init+0x0/0xa1
[ 2.284005] [<79003e03>] kernel_thread_helper+0x7/0x10
[ 2.284078] device: 'lo': device_add
[ 2.288248] initcall net_dev_init+0x0/0x164 returned 0 after 11718 usecs
[ 2.292010] calling neigh_init+0x0/0x66 @ 1
[ 2.296010] initcall neigh_init+0x0/0x66 returned 0 after 0 usecs
it's using an zero-initialized spinlock. This is a side-effect of:
dev_unicast_init(dev);
in alloc_netdev_mq() making use of dev->addr_list_lock.
The device has just been allocated freshly, it's not accessible
anywhere yet so no locking is needed at all - in fact it's wrong
to lock it here (the lock isnt initialized yet).
This bug was introduced via:
| commit a6ac65db23
| Date: Thu Jul 30 01:06:12 2009 +0000
|
| net: restore the original spinlock to protect unicast list
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Acked-by: Jiri Pirko <jpirko@redhat.com>
Tested-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
|
2009-08-05 08:35:11 -07:00 |
| .. |
|
datagram.c
|
net: adding memory barrier to the poll and receive callbacks
|
2009-07-09 17:06:57 -07:00 |
|
dev.c
|
net: Fix spinlock use in alloc_netdev_mq()
|
2009-08-05 08:35:11 -07:00 |
|
dev_mcast.c
|
net: Rationalise email address: Network Specific Parts
|
2008-10-13 19:01:08 -07:00 |
|
drop_monitor.c
|
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
|
2009-06-15 03:02:23 -07:00 |
|
dst.c
|
net: speedup dst_release()
|
2008-11-14 00:53:54 -08:00 |
|
ethtool.c
|
core: remove pointless conditional before kfree()
|
2009-03-31 15:06:26 -07:00 |
|
fib_rules.c
|
net: Remove unused parameter from fill method in fib_rules_ops.
|
2009-05-20 17:26:23 -07:00 |
|
filter.c
|
filter: add SKF_AD_NLATTR_NEST to look for nested attributes
|
2008-11-20 00:49:27 -08:00 |
|
flow.c
|
netns xfrm: lookup in netns
|
2008-11-25 17:35:18 -08:00 |
|
gen_estimator.c
|
pkt_sched: gen_estimator: Fix signed integers right-shifts.
|
2009-05-25 22:47:01 -07:00 |
|
gen_stats.c
|
[NET_SCHED]: Convert packet schedulers from rtnetlink to new netlink API
|
2008-01-28 15:11:10 -08:00 |
|
iovec.c
|
net: Fix memcpy_toiovecend() to use the right offset
|
2009-06-08 00:25:39 -07:00 |
|
kmap_skb.h
|
[PATCH] severing skbuff.h -> highmem.h
|
2006-12-04 02:00:29 -05:00 |
|
link_watch.c
|
Revert "net: Fix for initial link state in 2.6.28"
|
2009-01-05 16:01:51 -08:00 |
|
Makefile
|
Network Drop Monitor: Adding Build changes to enable drop monitor
|
2009-03-13 12:09:29 -07:00 |
|
neighbour.c
|
neigh: fix state transition INCOMPLETE->FAILED via Netlink request
|
2009-06-11 04:16:28 -07:00 |
|
net-sysfs.c
|
net: Remove bogus reference to BUS_ID_SIZE in sysfs code.
|
2009-05-26 21:05:19 -07:00 |
|
net-sysfs.h
|
netns: Fix device renaming for sysfs
|
2008-05-02 17:00:58 -07:00 |
|
net-traces.c
|
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
|
2009-06-15 03:02:23 -07:00 |
|
net_namespace.c
|
net: net_assign_generic() fix
|
2009-08-02 12:20:36 -07:00 |
|
netevent.c
|
[NET]: net/core/netevent.c should #include <net/netevent.h>
|
2007-07-05 17:40:27 -07:00 |
|
netpoll.c
|
netpoll: Fix carrier detection for drivers that are using phylib
|
2009-07-08 20:09:44 -07:00 |
|
pktgen.c
|
net pkgen.c:fix no need for check
|
2009-06-08 00:40:35 -07:00 |
|
request_sock.c
|
net: convert BUG_TRAP to generic WARN_ON
|
2008-07-25 21:43:18 -07:00 |
|
rtnetlink.c
|
netlink: change nlmsg_notify() return value logic
|
2009-02-24 23:18:28 -08:00 |
|
scm.c
|
Merge branch 'master' into next
|
2008-11-18 18:52:37 +11:00 |
|
skb_dma_map.c
|
net: skb_shared_info optimization
|
2009-06-08 00:21:48 -07:00 |
|
skbuff.c
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
|
2009-06-18 14:07:15 -07:00 |
|
sock.c
|
Fix error return for setsockopt(SO_TIMESTAMPING)
|
2009-07-20 08:23:36 -07:00 |
|
stream.c
|
tcp: tcp_prequeue() can use keyed wakeups
|
2009-05-17 20:44:43 -07:00 |
|
sysctl_net_core.c
|
sysctl: fix sparse warning: Should it be static?
|
2009-02-26 23:13:34 -08:00 |
|
user_dma.c
|
net/core/user_dma.c: Use frag list abstraction interfaces.
|
2009-06-09 00:19:10 -07:00 |
|
utils.c
|
net: core: remove unneeded include in net/core/utils.c.
|
2009-03-26 01:11:48 -07:00 |