diff options
author | John Allen <jallen@linux.vnet.ibm.com> | 2017-10-26 17:24:15 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-10-27 11:23:58 -0400 |
commit | 2a1bf51111975846f412f47449edefdf6fa17ee4 (patch) | |
tree | 50ef921d7833a996a9690f7f30ad7521e9a551e7 | |
parent | c26eba03e4073bd32ef6c0ea2ba2a3ff5eed11da (diff) |
ibmvnic: Fix failover error path for non-fatal resets
For all non-fatal reset conditions, the hypervisor will send a failover when
we attempt to initialize the crq and the vnic client is expected to handle
that failover instead of the existing non-fatal reset. To handle this, we
need to return from init with a return code that indicates that we have hit
this case.
Signed-off-by: John Allen <jallen@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/ibm/ibmvnic.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/ibm/ibmvnic.h | 2 |
2 files changed, 4 insertions, 2 deletions
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index 3d0280196fdc..d0cff2807d0b 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c | |||
@@ -1507,7 +1507,7 @@ static int do_reset(struct ibmvnic_adapter *adapter, | |||
1507 | 1507 | ||
1508 | rc = ibmvnic_init(adapter); | 1508 | rc = ibmvnic_init(adapter); |
1509 | if (rc) | 1509 | if (rc) |
1510 | return 0; | 1510 | return IBMVNIC_INIT_FAILED; |
1511 | 1511 | ||
1512 | /* If the adapter was in PROBE state prior to the reset, | 1512 | /* If the adapter was in PROBE state prior to the reset, |
1513 | * exit here. | 1513 | * exit here. |
@@ -1610,7 +1610,7 @@ static void __ibmvnic_reset(struct work_struct *work) | |||
1610 | while (rwi) { | 1610 | while (rwi) { |
1611 | rc = do_reset(adapter, rwi, reset_state); | 1611 | rc = do_reset(adapter, rwi, reset_state); |
1612 | kfree(rwi); | 1612 | kfree(rwi); |
1613 | if (rc) | 1613 | if (rc && rc != IBMVNIC_INIT_FAILED) |
1614 | break; | 1614 | break; |
1615 | 1615 | ||
1616 | rwi = get_next_rwi(adapter); | 1616 | rwi = get_next_rwi(adapter); |
diff --git a/drivers/net/ethernet/ibm/ibmvnic.h b/drivers/net/ethernet/ibm/ibmvnic.h index 27107f33755b..4670af80d612 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.h +++ b/drivers/net/ethernet/ibm/ibmvnic.h | |||
@@ -30,6 +30,8 @@ | |||
30 | #define IBMVNIC_DRIVER_VERSION "1.0.1" | 30 | #define IBMVNIC_DRIVER_VERSION "1.0.1" |
31 | #define IBMVNIC_INVALID_MAP -1 | 31 | #define IBMVNIC_INVALID_MAP -1 |
32 | #define IBMVNIC_STATS_TIMEOUT 1 | 32 | #define IBMVNIC_STATS_TIMEOUT 1 |
33 | #define IBMVNIC_INIT_FAILED 2 | ||
34 | |||
33 | /* basic structures plus 100 2k buffers */ | 35 | /* basic structures plus 100 2k buffers */ |
34 | #define IBMVNIC_IO_ENTITLEMENT_DEFAULT 610305 | 36 | #define IBMVNIC_IO_ENTITLEMENT_DEFAULT 610305 |
35 | 37 | ||