Commit f5123686 authored by Shannon Nelson's avatar Shannon Nelson Committed by David S. Miller

ionic: block some ethtool operations when fw in reset

There are a few things that we can't safely do when the fw is
resetting, as the driver may be in the middle of rebuilding
queue structures.
Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a1cda184
...@@ -32,6 +32,9 @@ static void ionic_get_stats(struct net_device *netdev, ...@@ -32,6 +32,9 @@ static void ionic_get_stats(struct net_device *netdev,
struct ionic_lif *lif = netdev_priv(netdev); struct ionic_lif *lif = netdev_priv(netdev);
u32 i; u32 i;
if (test_bit(IONIC_LIF_F_FW_RESET, lif->state))
return;
memset(buf, 0, stats->n_stats * sizeof(*buf)); memset(buf, 0, stats->n_stats * sizeof(*buf));
for (i = 0; i < ionic_num_stats_grps; i++) for (i = 0; i < ionic_num_stats_grps; i++)
ionic_stats_groups[i].get_values(lif, &buf); ionic_stats_groups[i].get_values(lif, &buf);
...@@ -274,6 +277,9 @@ static int ionic_set_link_ksettings(struct net_device *netdev, ...@@ -274,6 +277,9 @@ static int ionic_set_link_ksettings(struct net_device *netdev,
struct ionic *ionic = lif->ionic; struct ionic *ionic = lif->ionic;
int err = 0; int err = 0;
if (test_bit(IONIC_LIF_F_FW_RESET, lif->state))
return -EBUSY;
/* set autoneg */ /* set autoneg */
if (ks->base.autoneg != idev->port_info->config.an_enable) { if (ks->base.autoneg != idev->port_info->config.an_enable) {
mutex_lock(&ionic->dev_cmd_lock); mutex_lock(&ionic->dev_cmd_lock);
...@@ -320,6 +326,9 @@ static int ionic_set_pauseparam(struct net_device *netdev, ...@@ -320,6 +326,9 @@ static int ionic_set_pauseparam(struct net_device *netdev,
u32 requested_pause; u32 requested_pause;
int err; int err;
if (test_bit(IONIC_LIF_F_FW_RESET, lif->state))
return -EBUSY;
if (pause->autoneg) if (pause->autoneg)
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -372,6 +381,9 @@ static int ionic_set_fecparam(struct net_device *netdev, ...@@ -372,6 +381,9 @@ static int ionic_set_fecparam(struct net_device *netdev,
u8 fec_type; u8 fec_type;
int ret = 0; int ret = 0;
if (test_bit(IONIC_LIF_F_FW_RESET, lif->state))
return -EBUSY;
if (lif->ionic->idev.port_info->config.an_enable) { if (lif->ionic->idev.port_info->config.an_enable) {
netdev_err(netdev, "FEC request not allowed while autoneg is enabled\n"); netdev_err(netdev, "FEC request not allowed while autoneg is enabled\n");
return -EINVAL; return -EINVAL;
...@@ -528,6 +540,9 @@ static int ionic_set_ringparam(struct net_device *netdev, ...@@ -528,6 +540,9 @@ static int ionic_set_ringparam(struct net_device *netdev,
struct ionic_queue_params qparam; struct ionic_queue_params qparam;
int err; int err;
if (test_bit(IONIC_LIF_F_FW_RESET, lif->state))
return -EBUSY;
ionic_init_queue_params(lif, &qparam); ionic_init_queue_params(lif, &qparam);
if (ring->rx_mini_pending || ring->rx_jumbo_pending) { if (ring->rx_mini_pending || ring->rx_jumbo_pending) {
...@@ -597,6 +612,9 @@ static int ionic_set_channels(struct net_device *netdev, ...@@ -597,6 +612,9 @@ static int ionic_set_channels(struct net_device *netdev,
int max_cnt; int max_cnt;
int err; int err;
if (test_bit(IONIC_LIF_F_FW_RESET, lif->state))
return -EBUSY;
ionic_init_queue_params(lif, &qparam); ionic_init_queue_params(lif, &qparam);
if (ch->rx_count != ch->tx_count) { if (ch->rx_count != ch->tx_count) {
...@@ -947,6 +965,9 @@ static int ionic_nway_reset(struct net_device *netdev) ...@@ -947,6 +965,9 @@ static int ionic_nway_reset(struct net_device *netdev)
struct ionic *ionic = lif->ionic; struct ionic *ionic = lif->ionic;
int err = 0; int err = 0;
if (test_bit(IONIC_LIF_F_FW_RESET, lif->state))
return -EBUSY;
/* flap the link to force auto-negotiation */ /* flap the link to force auto-negotiation */
mutex_lock(&ionic->dev_cmd_lock); mutex_lock(&ionic->dev_cmd_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment