aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Belous <pavel.belous@aquantia.com>2017-02-20 14:36:47 -0500
committerDavid S. Miller <davem@davemloft.net>2017-02-20 17:11:09 -0500
commit55629109d934b2c1b25457424fa72eb94e8c2a26 (patch)
treeb6dc9303b82ca88a5ede3ac5b0ce93de76d06920
parentdf9000ef9609c8a5e57783d0667ba7f39f52ed1e (diff)
net: ethernet: aquantia: Call netdev_register after all initialized.
netdev_register should be called when everything is initialized. Also we should use net_device->reg_state field instead own "is_ndev_registered" flag to avoid any race. Signed-off-by: Pavel Belous <pavel.belous@aquantia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/aq_nic.c10
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/aq_nic_internal.h1
2 files changed, 5 insertions, 6 deletions
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
index a8a27c5e8aeb..bce312a26e7c 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
@@ -261,16 +261,16 @@ int aq_nic_ndev_register(struct aq_nic_s *self)
261 ether_addr_copy(self->ndev->dev_addr, mac_addr_permanent); 261 ether_addr_copy(self->ndev->dev_addr, mac_addr_permanent);
262 } 262 }
263#endif 263#endif
264 err = register_netdev(self->ndev);
265 if (err < 0)
266 goto err_exit;
267 264
268 self->is_ndev_registered = true;
269 netif_carrier_off(self->ndev); 265 netif_carrier_off(self->ndev);
270 266
271 for (i = AQ_CFG_VECS_MAX; i--;) 267 for (i = AQ_CFG_VECS_MAX; i--;)
272 aq_nic_ndev_queue_stop(self, i); 268 aq_nic_ndev_queue_stop(self, i);
273 269
270 err = register_netdev(self->ndev);
271 if (err < 0)
272 goto err_exit;
273
274err_exit: 274err_exit:
275 return err; 275 return err;
276} 276}
@@ -293,7 +293,7 @@ void aq_nic_ndev_free(struct aq_nic_s *self)
293 if (!self->ndev) 293 if (!self->ndev)
294 goto err_exit; 294 goto err_exit;
295 295
296 if (self->is_ndev_registered) 296 if (self->ndev->reg_state == NETREG_REGISTERED)
297 unregister_netdev(self->ndev); 297 unregister_netdev(self->ndev);
298 298
299 if (self->aq_hw) 299 if (self->aq_hw)
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic_internal.h b/drivers/net/ethernet/aquantia/atlantic/aq_nic_internal.h
index f81738a71c42..e7d2711dc165 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic_internal.h
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic_internal.h
@@ -22,7 +22,6 @@ struct aq_nic_s {
22 unsigned int aq_vecs; 22 unsigned int aq_vecs;
23 unsigned int packet_filter; 23 unsigned int packet_filter;
24 unsigned int power_state; 24 unsigned int power_state;
25 bool is_ndev_registered;
26 u8 port; 25 u8 port;
27 struct aq_hw_ops aq_hw_ops; 26 struct aq_hw_ops aq_hw_ops;
28 struct aq_hw_caps_s aq_hw_caps; 27 struct aq_hw_caps_s aq_hw_caps;