To check whether a netdevice has already been registered, look at
NETREG_REGISTERED to replace some hacks I added a while ago.

Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Julian Wiedmann 2020-03-18 13:54:55 +01:00 коммит произвёл David S. Miller
Родитель 5bcd8ad976
Коммит cd652be52c
3 изменённых файлов: 17 добавлений и 29 удалений

Просмотреть файл

@ -847,11 +847,6 @@ struct qeth_trap_id {
/*some helper functions*/ /*some helper functions*/
#define QETH_CARD_IFNAME(card) (((card)->dev)? (card)->dev->name : "") #define QETH_CARD_IFNAME(card) (((card)->dev)? (card)->dev->name : "")
static inline bool qeth_netdev_is_registered(struct net_device *dev)
{
return dev->netdev_ops != NULL;
}
static inline u16 qeth_iqd_translate_txq(struct net_device *dev, u16 txq) static inline u16 qeth_iqd_translate_txq(struct net_device *dev, u16 txq)
{ {
if (txq == QETH_IQD_MCAST_TXQ) if (txq == QETH_IQD_MCAST_TXQ)

Просмотреть файл

@ -613,7 +613,7 @@ static void qeth_l2_remove_device(struct ccwgroup_device *cgdev)
qeth_set_offline(card, false); qeth_set_offline(card, false);
cancel_work_sync(&card->close_dev_work); cancel_work_sync(&card->close_dev_work);
if (qeth_netdev_is_registered(card->dev)) if (card->dev->reg_state == NETREG_REGISTERED)
unregister_netdev(card->dev); unregister_netdev(card->dev);
} }
@ -651,7 +651,7 @@ static const struct net_device_ops qeth_osn_netdev_ops = {
.ndo_tx_timeout = qeth_tx_timeout, .ndo_tx_timeout = qeth_tx_timeout,
}; };
static int qeth_l2_setup_netdev(struct qeth_card *card, bool carrier_ok) static int qeth_l2_setup_netdev(struct qeth_card *card)
{ {
int rc; int rc;
@ -711,13 +711,7 @@ static int qeth_l2_setup_netdev(struct qeth_card *card, bool carrier_ok)
add_napi: add_napi:
netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT); netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT);
rc = register_netdev(card->dev); return register_netdev(card->dev);
if (!rc && carrier_ok)
netif_carrier_on(card->dev);
if (rc)
card->dev->netdev_ops = NULL;
return rc;
} }
static void qeth_l2_trace_features(struct qeth_card *card) static void qeth_l2_trace_features(struct qeth_card *card)
@ -790,10 +784,13 @@ static int qeth_l2_set_online(struct qeth_card *card)
qeth_set_allowed_threads(card, 0xffffffff, 0); qeth_set_allowed_threads(card, 0xffffffff, 0);
if (!qeth_netdev_is_registered(dev)) { if (dev->reg_state != NETREG_REGISTERED) {
rc = qeth_l2_setup_netdev(card, carrier_ok); rc = qeth_l2_setup_netdev(card);
if (rc) if (rc)
goto out_remove; goto out_remove;
if (carrier_ok)
netif_carrier_on(dev);
} else { } else {
rtnl_lock(); rtnl_lock();
if (carrier_ok) if (carrier_ok)

Просмотреть файл

@ -1918,7 +1918,7 @@ static const struct net_device_ops qeth_l3_osa_netdev_ops = {
.ndo_neigh_setup = qeth_l3_neigh_setup, .ndo_neigh_setup = qeth_l3_neigh_setup,
}; };
static int qeth_l3_setup_netdev(struct qeth_card *card, bool carrier_ok) static int qeth_l3_setup_netdev(struct qeth_card *card)
{ {
unsigned int headroom; unsigned int headroom;
int rc; int rc;
@ -1972,7 +1972,7 @@ static int qeth_l3_setup_netdev(struct qeth_card *card, bool carrier_ok)
rc = qeth_l3_iqd_read_initial_mac(card); rc = qeth_l3_iqd_read_initial_mac(card);
if (rc) if (rc)
goto out; return rc;
} else } else
return -ENODEV; return -ENODEV;
@ -1987,14 +1987,7 @@ static int qeth_l3_setup_netdev(struct qeth_card *card, bool carrier_ok)
PAGE_SIZE * (QETH_MAX_BUFFER_ELEMENTS(card) - 1)); PAGE_SIZE * (QETH_MAX_BUFFER_ELEMENTS(card) - 1));
netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT); netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT);
rc = register_netdev(card->dev); return register_netdev(card->dev);
if (!rc && carrier_ok)
netif_carrier_on(card->dev);
out:
if (rc)
card->dev->netdev_ops = NULL;
return rc;
} }
static const struct device_type qeth_l3_devtype = { static const struct device_type qeth_l3_devtype = {
@ -2041,7 +2034,7 @@ static void qeth_l3_remove_device(struct ccwgroup_device *cgdev)
qeth_set_offline(card, false); qeth_set_offline(card, false);
cancel_work_sync(&card->close_dev_work); cancel_work_sync(&card->close_dev_work);
if (qeth_netdev_is_registered(card->dev)) if (card->dev->reg_state == NETREG_REGISTERED)
unregister_netdev(card->dev); unregister_netdev(card->dev);
flush_workqueue(card->cmd_wq); flush_workqueue(card->cmd_wq);
@ -2088,10 +2081,13 @@ static int qeth_l3_set_online(struct qeth_card *card)
qeth_set_allowed_threads(card, 0xffffffff, 0); qeth_set_allowed_threads(card, 0xffffffff, 0);
qeth_l3_recover_ip(card); qeth_l3_recover_ip(card);
if (!qeth_netdev_is_registered(dev)) { if (dev->reg_state != NETREG_REGISTERED) {
rc = qeth_l3_setup_netdev(card, carrier_ok); rc = qeth_l3_setup_netdev(card);
if (rc) if (rc)
goto out_remove; goto out_remove;
if (carrier_ok)
netif_carrier_on(dev);
} else { } else {
rtnl_lock(); rtnl_lock();
if (carrier_ok) if (carrier_ok)