ibmvnic: Fix failover error path for non-fatal resets
authorJohn Allen <jallen@linux.vnet.ibm.com>
Thu, 26 Oct 2017 21:24:15 +0000 (16:24 -0500)
committerDavid S. Miller <davem@davemloft.net>
Fri, 27 Oct 2017 15:23:58 +0000 (00:23 +0900)
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>
drivers/net/ethernet/ibm/ibmvnic.c
drivers/net/ethernet/ibm/ibmvnic.h

index 3d0280196fdc5ce6cd327eb52a18f54bff9f10ce..d0cff2807d0b859822edbb1b42124f69d47df11b 100644 (file)
@@ -1507,7 +1507,7 @@ static int do_reset(struct ibmvnic_adapter *adapter,
 
                rc = ibmvnic_init(adapter);
                if (rc)
-                       return 0;
+                       return IBMVNIC_INIT_FAILED;
 
                /* If the adapter was in PROBE state prior to the reset,
                 * exit here.
@@ -1610,7 +1610,7 @@ static void __ibmvnic_reset(struct work_struct *work)
        while (rwi) {
                rc = do_reset(adapter, rwi, reset_state);
                kfree(rwi);
-               if (rc)
+               if (rc && rc != IBMVNIC_INIT_FAILED)
                        break;
 
                rwi = get_next_rwi(adapter);
index 27107f33755bf795a99df5396f52206996ea003e..4670af80d61271938a5bcb7b9f88d33cc729f877 100644 (file)
@@ -30,6 +30,8 @@
 #define IBMVNIC_DRIVER_VERSION "1.0.1"
 #define IBMVNIC_INVALID_MAP    -1
 #define IBMVNIC_STATS_TIMEOUT  1
+#define IBMVNIC_INIT_FAILED    2
+
 /* basic structures plus 100 2k buffers */
 #define IBMVNIC_IO_ENTITLEMENT_DEFAULT 610305