aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/xen-netback/xenbus.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/xen-netback/xenbus.c')
-rw-r--r--drivers/net/xen-netback/xenbus.c13
1 files changed, 13 insertions, 0 deletions
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)
493static void backend_disconnect(struct backend_info *be) 493static 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)
1034err: 1045err:
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;