diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2017-02-26 15:34:42 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2017-02-26 15:34:42 -0500 |
commit | 8e22e1b3499a446df48c2b26667ca36c55bf864c (patch) | |
tree | 5329f98b3eb3c95a9dcbab0fa4f9b6e62f0e788d /drivers/net/xen-netback | |
parent | 00d3c14f14d51babd8aeafd5fa734ccf04f5ca3d (diff) | |
parent | 64a577196d66b44e37384bc5c4d78c61f59d5b2a (diff) |
Merge airlied/drm-next into drm-misc-next
Backmerge the main pull request to sync up with all the newly landed
drivers. Otherwise we'll have chaos even before 4.12 started in
earnest.
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Diffstat (limited to 'drivers/net/xen-netback')
-rw-r--r-- | drivers/net/xen-netback/interface.c | 6 | ||||
-rw-r--r-- | drivers/net/xen-netback/xenbus.c | 13 |
2 files changed, 17 insertions, 2 deletions
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c index e30ffd29b7e9..579521327b03 100644 --- a/drivers/net/xen-netback/interface.c +++ b/drivers/net/xen-netback/interface.c | |||
@@ -221,18 +221,18 @@ static struct net_device_stats *xenvif_get_stats(struct net_device *dev) | |||
221 | { | 221 | { |
222 | struct xenvif *vif = netdev_priv(dev); | 222 | struct xenvif *vif = netdev_priv(dev); |
223 | struct xenvif_queue *queue = NULL; | 223 | struct xenvif_queue *queue = NULL; |
224 | unsigned int num_queues = vif->num_queues; | ||
225 | unsigned long rx_bytes = 0; | 224 | unsigned long rx_bytes = 0; |
226 | unsigned long rx_packets = 0; | 225 | unsigned long rx_packets = 0; |
227 | unsigned long tx_bytes = 0; | 226 | unsigned long tx_bytes = 0; |
228 | unsigned long tx_packets = 0; | 227 | unsigned long tx_packets = 0; |
229 | unsigned int index; | 228 | unsigned int index; |
230 | 229 | ||
230 | spin_lock(&vif->lock); | ||
231 | if (vif->queues == NULL) | 231 | if (vif->queues == NULL) |
232 | goto out; | 232 | goto out; |
233 | 233 | ||
234 | /* Aggregate tx and rx stats from each queue */ | 234 | /* Aggregate tx and rx stats from each queue */ |
235 | for (index = 0; index < num_queues; ++index) { | 235 | for (index = 0; index < vif->num_queues; ++index) { |
236 | queue = &vif->queues[index]; | 236 | queue = &vif->queues[index]; |
237 | rx_bytes += queue->stats.rx_bytes; | 237 | rx_bytes += queue->stats.rx_bytes; |
238 | rx_packets += queue->stats.rx_packets; | 238 | rx_packets += queue->stats.rx_packets; |
@@ -241,6 +241,8 @@ static struct net_device_stats *xenvif_get_stats(struct net_device *dev) | |||
241 | } | 241 | } |
242 | 242 | ||
243 | out: | 243 | out: |
244 | spin_unlock(&vif->lock); | ||
245 | |||
244 | vif->dev->stats.rx_bytes = rx_bytes; | 246 | vif->dev->stats.rx_bytes = rx_bytes; |
245 | vif->dev->stats.rx_packets = rx_packets; | 247 | vif->dev->stats.rx_packets = rx_packets; |
246 | vif->dev->stats.tx_bytes = tx_bytes; | 248 | vif->dev->stats.tx_bytes = tx_bytes; |
diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c index 3124eaec9427..85b742e1c42f 100644 --- a/drivers/net/xen-netback/xenbus.c +++ b/drivers/net/xen-netback/xenbus.c | |||
@@ -493,11 +493,22 @@ static int backend_create_xenvif(struct backend_info *be) | |||
493 | static void backend_disconnect(struct backend_info *be) | 493 | static void backend_disconnect(struct backend_info *be) |
494 | { | 494 | { |
495 | if (be->vif) { | 495 | if (be->vif) { |
496 | unsigned int queue_index; | ||
497 | |||
496 | xen_unregister_watchers(be->vif); | 498 | xen_unregister_watchers(be->vif); |
497 | #ifdef CONFIG_DEBUG_FS | 499 | #ifdef CONFIG_DEBUG_FS |
498 | xenvif_debugfs_delif(be->vif); | 500 | xenvif_debugfs_delif(be->vif); |
499 | #endif /* CONFIG_DEBUG_FS */ | 501 | #endif /* CONFIG_DEBUG_FS */ |
500 | xenvif_disconnect_data(be->vif); | 502 | xenvif_disconnect_data(be->vif); |
503 | for (queue_index = 0; queue_index < be->vif->num_queues; ++queue_index) | ||
504 | xenvif_deinit_queue(&be->vif->queues[queue_index]); | ||
505 | |||
506 | spin_lock(&be->vif->lock); | ||
507 | vfree(be->vif->queues); | ||
508 | be->vif->num_queues = 0; | ||
509 | be->vif->queues = NULL; | ||
510 | spin_unlock(&be->vif->lock); | ||
511 | |||
501 | xenvif_disconnect_ctrl(be->vif); | 512 | xenvif_disconnect_ctrl(be->vif); |
502 | } | 513 | } |
503 | } | 514 | } |
@@ -1034,6 +1045,8 @@ static void connect(struct backend_info *be) | |||
1034 | err: | 1045 | err: |
1035 | if (be->vif->num_queues > 0) | 1046 | if (be->vif->num_queues > 0) |
1036 | xenvif_disconnect_data(be->vif); /* Clean up existing queues */ | 1047 | xenvif_disconnect_data(be->vif); /* Clean up existing queues */ |
1048 | for (queue_index = 0; queue_index < be->vif->num_queues; ++queue_index) | ||
1049 | xenvif_deinit_queue(&be->vif->queues[queue_index]); | ||
1037 | vfree(be->vif->queues); | 1050 | vfree(be->vif->queues); |
1038 | be->vif->queues = NULL; | 1051 | be->vif->queues = NULL; |
1039 | be->vif->num_queues = 0; | 1052 | be->vif->num_queues = 0; |