Skip to content

Commit

Permalink
Merge branch 'ibmvnic-errors'
Browse files Browse the repository at this point in the history
Lijun Pan says:

====================
ibmvnic: improve error printing

Patch 1 prints reset reason as a string.
Patch 2 prints adapter state as a string.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
davem330 committed Apr 12, 2021
2 parents c82eaa4 + 0666ef7 commit 8043ede
Showing 1 changed file with 75 additions and 23 deletions.
98 changes: 75 additions & 23 deletions drivers/net/ethernet/ibm/ibmvnic.c
Original file line number Diff line number Diff line change
Expand Up @@ -827,6 +827,30 @@ static void release_napi(struct ibmvnic_adapter *adapter)
adapter->napi_enabled = false;
}

static const char *adapter_state_to_string(enum vnic_state state)
{
switch (state) {
case VNIC_PROBING:
return "PROBING";
case VNIC_PROBED:
return "PROBED";
case VNIC_OPENING:
return "OPENING";
case VNIC_OPEN:
return "OPEN";
case VNIC_CLOSING:
return "CLOSING";
case VNIC_CLOSED:
return "CLOSED";
case VNIC_REMOVING:
return "REMOVING";
case VNIC_REMOVED:
return "REMOVED";
default:
return "UNKNOWN";
}
}

static int ibmvnic_login(struct net_device *netdev)
{
struct ibmvnic_adapter *adapter = netdev_priv(netdev);
Expand Down Expand Up @@ -905,7 +929,7 @@ static int ibmvnic_login(struct net_device *netdev)

__ibmvnic_set_mac(netdev, adapter->mac_addr);

netdev_dbg(netdev, "[S:%d] Login succeeded\n", adapter->state);
netdev_dbg(netdev, "[S:%s] Login succeeded\n", adapter_state_to_string(adapter->state));
return 0;
}

Expand Down Expand Up @@ -1185,8 +1209,9 @@ static int ibmvnic_open(struct net_device *netdev)
* honor our setting below.
*/
if (adapter->failover_pending || (test_bit(0, &adapter->resetting))) {
netdev_dbg(netdev, "[S:%d FOP:%d] Resetting, deferring open\n",
adapter->state, adapter->failover_pending);
netdev_dbg(netdev, "[S:%s FOP:%d] Resetting, deferring open\n",
adapter_state_to_string(adapter->state),
adapter->failover_pending);
adapter->state = VNIC_OPEN;
rc = 0;
goto out;
Expand Down Expand Up @@ -1350,8 +1375,9 @@ static int ibmvnic_close(struct net_device *netdev)
struct ibmvnic_adapter *adapter = netdev_priv(netdev);
int rc;

netdev_dbg(netdev, "[S:%d FOP:%d FRR:%d] Closing\n",
adapter->state, adapter->failover_pending,
netdev_dbg(netdev, "[S:%s FOP:%d FRR:%d] Closing\n",
adapter_state_to_string(adapter->state),
adapter->failover_pending,
adapter->force_reset_recovery);

/* If device failover is pending, just set device state and return.
Expand Down Expand Up @@ -1911,6 +1937,26 @@ static int ibmvnic_set_mac(struct net_device *netdev, void *p)
return rc;
}

static const char *reset_reason_to_string(enum ibmvnic_reset_reason reason)
{
switch (reason) {
case VNIC_RESET_FAILOVER:
return "FAILOVER";
case VNIC_RESET_MOBILITY:
return "MOBILITY";
case VNIC_RESET_FATAL:
return "FATAL";
case VNIC_RESET_NON_FATAL:
return "NON_FATAL";
case VNIC_RESET_TIMEOUT:
return "TIMEOUT";
case VNIC_RESET_CHANGE_PARAM:
return "CHANGE_PARAM";
default:
return "UNKNOWN";
}
}

/*
* do_reset returns zero if we are able to keep processing reset events, or
* non-zero if we hit a fatal error and must halt.
Expand All @@ -1924,9 +1970,11 @@ static int do_reset(struct ibmvnic_adapter *adapter,
int i, rc;

netdev_dbg(adapter->netdev,
"[S:%d FOP:%d] Reset reason %d, reset_state %d\n",
adapter->state, adapter->failover_pending,
rwi->reset_reason, reset_state);
"[S:%s FOP:%d] Reset reason: %s, reset_state: %s\n",
adapter_state_to_string(adapter->state),
adapter->failover_pending,
reset_reason_to_string(rwi->reset_reason),
adapter_state_to_string(reset_state));

adapter->reset_reason = rwi->reset_reason;
/* requestor of VNIC_RESET_CHANGE_PARAM already has the rtnl lock */
Expand Down Expand Up @@ -1986,8 +2034,8 @@ static int do_reset(struct ibmvnic_adapter *adapter,
* from VNIC_CLOSING state.
*/
netdev_dbg(netdev,
"Open changed state from %d, updating.\n",
reset_state);
"Open changed state from %s, updating.\n",
adapter_state_to_string(reset_state));
reset_state = VNIC_OPEN;
adapter->state = VNIC_CLOSING;
}
Expand Down Expand Up @@ -2128,8 +2176,9 @@ static int do_reset(struct ibmvnic_adapter *adapter,
if (!(adapter->reset_reason == VNIC_RESET_CHANGE_PARAM))
rtnl_unlock();

netdev_dbg(adapter->netdev, "[S:%d FOP:%d] Reset done, rc %d\n",
adapter->state, adapter->failover_pending, rc);
netdev_dbg(adapter->netdev, "[S:%s FOP:%d] Reset done, rc %d\n",
adapter_state_to_string(adapter->state),
adapter->failover_pending, rc);
return rc;
}

Expand All @@ -2139,8 +2188,8 @@ static int do_hard_reset(struct ibmvnic_adapter *adapter,
struct net_device *netdev = adapter->netdev;
int rc;

netdev_dbg(adapter->netdev, "Hard resetting driver (%d)\n",
rwi->reset_reason);
netdev_dbg(adapter->netdev, "Hard resetting driver (%s)\n",
reset_reason_to_string(rwi->reset_reason));

/* read the state and check (again) after getting rtnl */
reset_state = adapter->state;
Expand Down Expand Up @@ -2206,8 +2255,9 @@ static int do_hard_reset(struct ibmvnic_adapter *adapter,
/* restore adapter state if reset failed */
if (rc)
adapter->state = reset_state;
netdev_dbg(adapter->netdev, "[S:%d FOP:%d] Hard reset done, rc %d\n",
adapter->state, adapter->failover_pending, rc);
netdev_dbg(adapter->netdev, "[S:%s FOP:%d] Hard reset done, rc %d\n",
adapter_state_to_string(adapter->state),
adapter->failover_pending, rc);
return rc;
}

Expand Down Expand Up @@ -2286,8 +2336,8 @@ static void __ibmvnic_reset(struct work_struct *work)
if (rc) {
/* give backing device time to settle down */
netdev_dbg(adapter->netdev,
"[S:%d] Hard reset failed, waiting 60 secs\n",
adapter->state);
"[S:%s] Hard reset failed, waiting 60 secs\n",
adapter_state_to_string(adapter->state));
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(60 * HZ);
}
Expand Down Expand Up @@ -2315,8 +2365,9 @@ static void __ibmvnic_reset(struct work_struct *work)
clear_bit_unlock(0, &adapter->resetting);

netdev_dbg(adapter->netdev,
"[S:%d FRR:%d WFR:%d] Done processing resets\n",
adapter->state, adapter->force_reset_recovery,
"[S:%s FRR:%d WFR:%d] Done processing resets\n",
adapter_state_to_string(adapter->state),
adapter->force_reset_recovery,
adapter->wait_for_reset);
}

Expand Down Expand Up @@ -2363,8 +2414,8 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
list_for_each(entry, &adapter->rwi_list) {
tmp = list_entry(entry, struct ibmvnic_rwi, list);
if (tmp->reset_reason == reason) {
netdev_dbg(netdev, "Skipping matching reset, reason=%d\n",
reason);
netdev_dbg(netdev, "Skipping matching reset, reason=%s\n",
reset_reason_to_string(reason));
ret = EBUSY;
goto err;
}
Expand All @@ -2384,7 +2435,8 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
}
rwi->reset_reason = reason;
list_add_tail(&rwi->list, &adapter->rwi_list);
netdev_dbg(adapter->netdev, "Scheduling reset (reason %d)\n", reason);
netdev_dbg(adapter->netdev, "Scheduling reset (reason %s)\n",
reset_reason_to_string(reason));
schedule_work(&adapter->ibmvnic_reset);

ret = 0;
Expand Down

0 comments on commit 8043ede

Please sign in to comment.