aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/hyperv/netvsc_drv.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/hyperv/netvsc_drv.c')
-rw-r--r--drivers/net/hyperv/netvsc_drv.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index f80bd0c90f1e..7756118c2f0a 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -260,9 +260,7 @@ int netvsc_recv_callback(struct hv_device *device_obj,
260 struct sk_buff *skb; 260 struct sk_buff *skb;
261 261
262 net = ((struct netvsc_device *)hv_get_drvdata(device_obj))->ndev; 262 net = ((struct netvsc_device *)hv_get_drvdata(device_obj))->ndev;
263 if (!net) { 263 if (!net || net->reg_state != NETREG_REGISTERED) {
264 netdev_err(net, "got receive callback but net device"
265 " not initialized yet\n");
266 packet->status = NVSP_STAT_FAIL; 264 packet->status = NVSP_STAT_FAIL;
267 return 0; 265 return 0;
268 } 266 }
@@ -434,19 +432,11 @@ static int netvsc_probe(struct hv_device *dev,
434 SET_ETHTOOL_OPS(net, &ethtool_ops); 432 SET_ETHTOOL_OPS(net, &ethtool_ops);
435 SET_NETDEV_DEV(net, &dev->device); 433 SET_NETDEV_DEV(net, &dev->device);
436 434
437 ret = register_netdev(net);
438 if (ret != 0) {
439 pr_err("Unable to register netdev.\n");
440 free_netdev(net);
441 goto out;
442 }
443
444 /* Notify the netvsc driver of the new device */ 435 /* Notify the netvsc driver of the new device */
445 device_info.ring_size = ring_size; 436 device_info.ring_size = ring_size;
446 ret = rndis_filter_device_add(dev, &device_info); 437 ret = rndis_filter_device_add(dev, &device_info);
447 if (ret != 0) { 438 if (ret != 0) {
448 netdev_err(net, "unable to add netvsc device (ret %d)\n", ret); 439 netdev_err(net, "unable to add netvsc device (ret %d)\n", ret);
449 unregister_netdev(net);
450 free_netdev(net); 440 free_netdev(net);
451 hv_set_drvdata(dev, NULL); 441 hv_set_drvdata(dev, NULL);
452 return ret; 442 return ret;
@@ -455,7 +445,13 @@ static int netvsc_probe(struct hv_device *dev,
455 445
456 netif_carrier_on(net); 446 netif_carrier_on(net);
457 447
458out: 448 ret = register_netdev(net);
449 if (ret != 0) {
450 pr_err("Unable to register netdev.\n");
451 rndis_filter_device_remove(dev);
452 free_netdev(net);
453 }
454
459 return ret; 455 return ret;
460} 456}
461 457