net: partially revert dynamic lockdep key changes
This patch reverts the folowing commits: commit064ff66e2b
"bonding: add missing netdev_update_lockdep_key()" commit53d374979e
"net: avoid updating qdisc_xmit_lock_key in netdev_update_lockdep_key()" commit1f26c0d3d2
"net: fix kernel-doc warning in <linux/netdevice.h>" commitab92d68fc2
"net: core: add generic lockdep keys" but keeps the addr_list_lock_key because we still lock addr_list_lock nestedly on stack devices, unlikely xmit_lock this is safe because we don't take addr_list_lock on any fast path. Reported-and-tested-by: syzbot+aaa6fa4949cc5d9b7b25@syzkaller.appspotmail.com Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Taehee Yoo <ap420073@gmail.com> Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> Acked-by: Taehee Yoo <ap420073@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
ea84c84290
commit
1a33e10e4a
@@ -1805,13 +1805,11 @@ enum netdev_priv_flags {
|
||||
* @phydev: Physical device may attach itself
|
||||
* for hardware timestamping
|
||||
* @sfp_bus: attached &struct sfp_bus structure.
|
||||
* @qdisc_tx_busylock_key: lockdep class annotating Qdisc->busylock
|
||||
* spinlock
|
||||
* @qdisc_running_key: lockdep class annotating Qdisc->running seqcount
|
||||
* @qdisc_xmit_lock_key: lockdep class annotating
|
||||
* netdev_queue->_xmit_lock spinlock
|
||||
*
|
||||
* @addr_list_lock_key: lockdep class annotating
|
||||
* net_device->addr_list_lock spinlock
|
||||
* @qdisc_tx_busylock: lockdep class annotating Qdisc->busylock spinlock
|
||||
* @qdisc_running_key: lockdep class annotating Qdisc->running seqcount
|
||||
*
|
||||
* @proto_down: protocol port state information can be sent to the
|
||||
* switch driver and used to set the phys state of the
|
||||
@@ -2112,10 +2110,9 @@ struct net_device {
|
||||
#endif
|
||||
struct phy_device *phydev;
|
||||
struct sfp_bus *sfp_bus;
|
||||
struct lock_class_key qdisc_tx_busylock_key;
|
||||
struct lock_class_key qdisc_running_key;
|
||||
struct lock_class_key qdisc_xmit_lock_key;
|
||||
struct lock_class_key addr_list_lock_key;
|
||||
struct lock_class_key *qdisc_tx_busylock;
|
||||
struct lock_class_key *qdisc_running_key;
|
||||
bool proto_down;
|
||||
unsigned wol_enabled:1;
|
||||
|
||||
@@ -2200,6 +2197,20 @@ static inline void netdev_for_each_tx_queue(struct net_device *dev,
|
||||
f(dev, &dev->_tx[i], arg);
|
||||
}
|
||||
|
||||
#define netdev_lockdep_set_classes(dev) \
|
||||
{ \
|
||||
static struct lock_class_key qdisc_tx_busylock_key; \
|
||||
static struct lock_class_key qdisc_running_key; \
|
||||
static struct lock_class_key qdisc_xmit_lock_key; \
|
||||
unsigned int i; \
|
||||
\
|
||||
(dev)->qdisc_tx_busylock = &qdisc_tx_busylock_key; \
|
||||
(dev)->qdisc_running_key = &qdisc_running_key; \
|
||||
for (i = 0; i < (dev)->num_tx_queues; i++) \
|
||||
lockdep_set_class(&(dev)->_tx[i]._xmit_lock, \
|
||||
&qdisc_xmit_lock_key); \
|
||||
}
|
||||
|
||||
u16 netdev_pick_tx(struct net_device *dev, struct sk_buff *skb,
|
||||
struct net_device *sb_dev);
|
||||
struct netdev_queue *netdev_core_pick_tx(struct net_device *dev,
|
||||
|
Reference in New Issue
Block a user