ibmvnic: Check for transport event on driver resume
authorJohn Allen <jallen@linux.vnet.ibm.com>
Mon, 24 Jul 2017 18:26:06 +0000 (13:26 -0500)
committerDavid S. Miller <davem@davemloft.net>
Tue, 25 Jul 2017 00:40:10 +0000 (17:40 -0700)
On resume, the ibmvnic driver will fail to resume normal operation.
The main crq gets closed on suspend by the vnic server and doesn't get
reopened again as the interrupt for the transport event that would reset
the main crq comes in after the driver has been suspended.

This patch resolves the issue by removing the calls to kick the receive
interrupts handlers and instead directly invoking the main crq interrupt
handler. This will ensure that we see the transport event necessary to
properly resume the driver.

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

index a3e6946796350d0a3bb79410d1f354a844ab7f60..9d8af464dc44a0e27e19a82ed8e2ae5b0c47fc67 100644 (file)
@@ -3851,10 +3851,7 @@ static int ibmvnic_resume(struct device *dev)
        if (adapter->state != VNIC_OPEN)
                return 0;
 
-       /* kick the interrupt handlers just in case we lost an interrupt */
-       for (i = 0; i < adapter->req_rx_queues; i++)
-               ibmvnic_interrupt_rx(adapter->rx_scrq[i]->irq,
-                                    adapter->rx_scrq[i]);
+       tasklet_schedule(&adapter->tasklet);
 
        return 0;
 }