diff options
| -rw-r--r-- | drivers/net/bonding/bond_main.c | 6 | ||||
| -rw-r--r-- | drivers/net/hamradio/bpqether.c | 6 | ||||
| -rw-r--r-- | drivers/net/ifb.c | 12 | ||||
| -rw-r--r-- | drivers/net/macvlan.c | 6 | ||||
| -rw-r--r-- | drivers/net/wireless/hostap/hostap_hw.c | 6 | ||||
| -rw-r--r-- | include/linux/netdevice.h | 69 | ||||
| -rw-r--r-- | include/net/sch_generic.h | 37 | ||||
| -rw-r--r-- | net/8021q/vlan_dev.c | 10 | ||||
| -rw-r--r-- | net/core/dev.c | 40 | ||||
| -rw-r--r-- | net/core/rtnetlink.c | 2 | ||||
| -rw-r--r-- | net/mac80211/main.c | 4 | ||||
| -rw-r--r-- | net/mac80211/wme.c | 12 | ||||
| -rw-r--r-- | net/netrom/af_netrom.c | 6 | ||||
| -rw-r--r-- | net/rose/af_rose.c | 6 | ||||
| -rw-r--r-- | net/sched/cls_api.c | 4 | ||||
| -rw-r--r-- | net/sched/sch_api.c | 32 | ||||
| -rw-r--r-- | net/sched/sch_generic.c | 178 | ||||
| -rw-r--r-- | net/sched/sch_teql.c | 21 |
18 files changed, 320 insertions, 137 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index fd87dbe7999a..9737c06045d6 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
| @@ -5042,7 +5042,9 @@ static int bond_check_params(struct bond_params *params) | |||
| 5042 | 5042 | ||
| 5043 | static struct lock_class_key bonding_netdev_xmit_lock_key; | 5043 | static struct lock_class_key bonding_netdev_xmit_lock_key; |
| 5044 | 5044 | ||
| 5045 | static void bond_set_lockdep_class_one(struct netdev_queue *txq) | 5045 | static void bond_set_lockdep_class_one(struct net_device *dev, |
| 5046 | struct netdev_queue *txq, | ||
| 5047 | void *_unused) | ||
| 5046 | { | 5048 | { |
| 5047 | lockdep_set_class(&txq->_xmit_lock, | 5049 | lockdep_set_class(&txq->_xmit_lock, |
| 5048 | &bonding_netdev_xmit_lock_key); | 5050 | &bonding_netdev_xmit_lock_key); |
| @@ -5050,7 +5052,7 @@ static void bond_set_lockdep_class_one(struct netdev_queue *txq) | |||
| 5050 | 5052 | ||
| 5051 | static void bond_set_lockdep_class(struct net_device *dev) | 5053 | static void bond_set_lockdep_class(struct net_device *dev) |
| 5052 | { | 5054 | { |
| 5053 | bond_set_lockdep_class_one(&dev->tx_queue); | 5055 | netdev_for_each_tx_queue(dev, bond_set_lockdep_class_one, NULL); |
| 5054 | } | 5056 | } |
| 5055 | 5057 | ||
| 5056 | /* Create a new bond based on the specified name and bonding parameters. | 5058 | /* Create a new bond based on the specified name and bonding parameters. |
diff --git a/drivers/net/hamradio/bpqether.c b/drivers/net/hamradio/bpqether.c index fb186b8c3d4d..b6500b2aacf2 100644 --- a/drivers/net/hamradio/bpqether.c +++ b/drivers/net/hamradio/bpqether.c | |||
| @@ -124,14 +124,16 @@ static LIST_HEAD(bpq_devices); | |||
| 124 | */ | 124 | */ |
| 125 | static struct lock_class_key bpq_netdev_xmit_lock_key; | 125 | static struct lock_class_key bpq_netdev_xmit_lock_key; |
| 126 | 126 | ||
| 127 | static void bpq_set_lockdep_class_one(struct netdev_queue *txq) | 127 | static void bpq_set_lockdep_class_one(struct net_device *dev, |
| 128 | struct netdev_queue *txq, | ||
| 129 | void *_unused) | ||
| 128 | { | 130 | { |
| 129 | lockdep_set_class(&txq->_xmit_lock, &bpq_netdev_xmit_lock_key); | 131 | lockdep_set_class(&txq->_xmit_lock, &bpq_netdev_xmit_lock_key); |
| 130 | } | 132 | } |
| 131 | 133 | ||
| 132 | static void bpq_set_lockdep_class(struct net_device *dev) | 134 | static void bpq_set_lockdep_class(struct net_device *dev) |
| 133 | { | 135 | { |
| 134 | bpq_set_lockdep_class_one(&dev->tx_queue); | 136 | netdev_for_each_tx_queue(dev, bpq_set_lockdep_class_one, NULL); |
| 135 | } | 137 | } |
| 136 | 138 | ||
| 137 | /* ------------------------------------------------------------------------ */ | 139 | /* ------------------------------------------------------------------------ */ |
diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c index ccbd6554f6eb..897b05e79ed0 100644 --- a/drivers/net/ifb.c +++ b/drivers/net/ifb.c | |||
| @@ -229,14 +229,20 @@ module_param(numifbs, int, 0); | |||
| 229 | MODULE_PARM_DESC(numifbs, "Number of ifb devices"); | 229 | MODULE_PARM_DESC(numifbs, "Number of ifb devices"); |
| 230 | 230 | ||
| 231 | /* | 231 | /* |
| 232 | * dev_ifb->tx_queue.lock is usually taken after dev->rx_queue.lock, | 232 | * dev_ifb's TX queue lock is usually taken after dev->rx_queue.lock, |
| 233 | * reversely to e.g. qdisc_lock_tree(). It should be safe until | 233 | * reversely to e.g. qdisc_lock_tree(). It should be safe until |
| 234 | * ifb doesn't take dev->tx_queue.lock with dev_ifb->rx_queue.lock. | 234 | * ifb doesn't take dev's TX queue lock with dev_ifb->rx_queue.lock. |
| 235 | * But lockdep should know that ifb has different locks from dev. | 235 | * But lockdep should know that ifb has different locks from dev. |
| 236 | */ | 236 | */ |
| 237 | static struct lock_class_key ifb_tx_queue_lock_key; | 237 | static struct lock_class_key ifb_tx_queue_lock_key; |
| 238 | static struct lock_class_key ifb_rx_queue_lock_key; | 238 | static struct lock_class_key ifb_rx_queue_lock_key; |
| 239 | 239 | ||
| 240 | static void set_tx_lockdep_key(struct net_device *dev, | ||
| 241 | struct netdev_queue *txq, | ||
| 242 | void *_unused) | ||
| 243 | { | ||
| 244 | lockdep_set_class(&txq->lock, &ifb_tx_queue_lock_key); | ||
| 245 | } | ||
| 240 | 246 | ||
| 241 | static int __init ifb_init_one(int index) | 247 | static int __init ifb_init_one(int index) |
| 242 | { | 248 | { |
| @@ -258,7 +264,7 @@ static int __init ifb_init_one(int index) | |||
| 258 | if (err < 0) | 264 | if (err < 0) |
| 259 | goto err; | 265 | goto err; |
| 260 | 266 | ||
| 261 | lockdep_set_class(&dev_ifb->tx_queue.lock, &ifb_tx_queue_lock_key); | 267 | netdev_for_each_tx_queue(dev_ifb, set_tx_lockdep_key, NULL); |
| 262 | lockdep_set_class(&dev_ifb->rx_queue.lock, &ifb_rx_queue_lock_key); | 268 | lockdep_set_class(&dev_ifb->rx_queue.lock, &ifb_rx_queue_lock_key); |
| 263 | 269 | ||
| 264 | return 0; | 270 | return 0; |
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 980001c2cf96..72745ce588c6 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
| @@ -285,7 +285,9 @@ static struct lock_class_key macvlan_netdev_xmit_lock_key; | |||
| 285 | #define MACVLAN_STATE_MASK \ | 285 | #define MACVLAN_STATE_MASK \ |
| 286 | ((1<<__LINK_STATE_NOCARRIER) | (1<<__LINK_STATE_DORMANT)) | 286 | ((1<<__LINK_STATE_NOCARRIER) | (1<<__LINK_STATE_DORMANT)) |
| 287 | 287 | ||
| 288 | static void macvlan_set_lockdep_class_one(struct netdev_queue *txq) | 288 | static void macvlan_set_lockdep_class_one(struct net_device *dev, |
| 289 | struct netdev_queue *txq, | ||
| 290 | void *_unused) | ||
| 289 | { | 291 | { |
| 290 | lockdep_set_class(&txq->_xmit_lock, | 292 | lockdep_set_class(&txq->_xmit_lock, |
| 291 | &macvlan_netdev_xmit_lock_key); | 293 | &macvlan_netdev_xmit_lock_key); |
| @@ -293,7 +295,7 @@ static void macvlan_set_lockdep_class_one(struct netdev_queue *txq) | |||
| 293 | 295 | ||
| 294 | static void macvlan_set_lockdep_class(struct net_device *dev) | 296 | static void macvlan_set_lockdep_class(struct net_device *dev) |
| 295 | { | 297 | { |
| 296 | macvlan_set_lockdep_class_one(&dev->tx_queue); | 298 | netdev_for_each_tx_queue(dev, macvlan_set_lockdep_class_one, NULL); |
| 297 | } | 299 | } |
| 298 | 300 | ||
| 299 | static int macvlan_init(struct net_device *dev) | 301 | static int macvlan_init(struct net_device *dev) |
diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c index c1f4bb005d92..13d5882f1f21 100644 --- a/drivers/net/wireless/hostap/hostap_hw.c +++ b/drivers/net/wireless/hostap/hostap_hw.c | |||
| @@ -3102,7 +3102,9 @@ static void prism2_clear_set_tim_queue(local_info_t *local) | |||
| 3102 | */ | 3102 | */ |
| 3103 | static struct lock_class_key hostap_netdev_xmit_lock_key; | 3103 | static struct lock_class_key hostap_netdev_xmit_lock_key; |
| 3104 | 3104 | ||
| 3105 | static void prism2_set_lockdep_class_one(struct netdev_queue *txq) | 3105 | static void prism2_set_lockdep_class_one(struct net_device *dev, |
| 3106 | struct netdev_queue *txq, | ||
| 3107 | void *_unused) | ||
| 3106 | { | 3108 | { |
| 3107 | lockdep_set_class(&txq->_xmit_lock, | 3109 | lockdep_set_class(&txq->_xmit_lock, |
| 3108 | &hostap_netdev_xmit_lock_key); | 3110 | &hostap_netdev_xmit_lock_key); |
| @@ -3110,7 +3112,7 @@ static void prism2_set_lockdep_class_one(struct netdev_queue *txq) | |||
| 3110 | 3112 | ||
| 3111 | static void prism2_set_lockdep_class(struct net_device *dev) | 3113 | static void prism2_set_lockdep_class(struct net_device *dev) |
| 3112 | { | 3114 | { |
| 3113 | prism2_set_lockdep_class_one(&dev->tx_queue); | 3115 | netdev_for_each_tx_queue(dev, prism2_set_lockdep_class_one, NULL); |
| 3114 | } | 3116 | } |
| 3115 | 3117 | ||
| 3116 | static struct net_device * | 3118 | static struct net_device * |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 570cf7affa72..f25d4f5a31b0 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -463,7 +463,7 @@ struct netdev_queue { | |||
| 463 | struct Qdisc *qdisc_sleeping; | 463 | struct Qdisc *qdisc_sleeping; |
| 464 | struct list_head qdisc_list; | 464 | struct list_head qdisc_list; |
| 465 | struct netdev_queue *next_sched; | 465 | struct netdev_queue *next_sched; |
| 466 | }; | 466 | } ____cacheline_aligned_in_smp; |
| 467 | 467 | ||
| 468 | /* | 468 | /* |
| 469 | * The DEVICE structure. | 469 | * The DEVICE structure. |
| @@ -641,7 +641,9 @@ struct net_device | |||
| 641 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ | 641 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ |
| 642 | 642 | ||
| 643 | struct netdev_queue rx_queue; | 643 | struct netdev_queue rx_queue; |
| 644 | struct netdev_queue tx_queue ____cacheline_aligned_in_smp; | 644 | |
| 645 | struct netdev_queue *_tx ____cacheline_aligned_in_smp; | ||
| 646 | unsigned int num_tx_queues; | ||
| 645 | |||
