aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/virtio_net.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 9fbdfcd1e1a0..bbc9cb84ec1f 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -1118,11 +1118,6 @@ static int virtnet_cpu_callback(struct notifier_block *nfb,
1118{ 1118{
1119 struct virtnet_info *vi = container_of(nfb, struct virtnet_info, nb); 1119 struct virtnet_info *vi = container_of(nfb, struct virtnet_info, nb);
1120 1120
1121 mutex_lock(&vi->config_lock);
1122
1123 if (!vi->config_enable)
1124 goto done;
1125
1126 switch(action & ~CPU_TASKS_FROZEN) { 1121 switch(action & ~CPU_TASKS_FROZEN) {
1127 case CPU_ONLINE: 1122 case CPU_ONLINE:
1128 case CPU_DOWN_FAILED: 1123 case CPU_DOWN_FAILED:
@@ -1136,8 +1131,6 @@ static int virtnet_cpu_callback(struct notifier_block *nfb,
1136 break; 1131 break;
1137 } 1132 }
1138 1133
1139done:
1140 mutex_unlock(&vi->config_lock);
1141 return NOTIFY_OK; 1134 return NOTIFY_OK;
1142} 1135}
1143 1136
@@ -1699,6 +1692,8 @@ static int virtnet_freeze(struct virtio_device *vdev)
1699 struct virtnet_info *vi = vdev->priv; 1692 struct virtnet_info *vi = vdev->priv;
1700 int i; 1693 int i;
1701 1694
1695 unregister_hotcpu_notifier(&vi->nb);
1696
1702 /* Prevent config work handler from accessing the device */ 1697 /* Prevent config work handler from accessing the device */
1703 mutex_lock(&vi->config_lock); 1698 mutex_lock(&vi->config_lock);
1704 vi->config_enable = false; 1699 vi->config_enable = false;
@@ -1747,6 +1742,10 @@ static int virtnet_restore(struct virtio_device *vdev)
1747 virtnet_set_queues(vi, vi->curr_queue_pairs); 1742 virtnet_set_queues(vi, vi->curr_queue_pairs);
1748 rtnl_unlock(); 1743 rtnl_unlock();
1749 1744
1745 err = register_hotcpu_notifier(&vi->nb);
1746 if (err)
1747 return err;
1748
1750 return 0; 1749 return 0;
1751} 1750}
1752#endif 1751#endif