|
@@ -3232,27 +3232,6 @@ static void ibmvnic_free_inflight(struct ibmvnic_adapter *adapter)
|
|
|
spin_unlock_irqrestore(&adapter->inflight_lock, flags);
|
|
|
}
|
|
|
|
|
|
-static void ibmvnic_xport_event(struct work_struct *work)
|
|
|
-{
|
|
|
- struct ibmvnic_adapter *adapter = container_of(work,
|
|
|
- struct ibmvnic_adapter,
|
|
|
- ibmvnic_xport);
|
|
|
- struct device *dev = &adapter->vdev->dev;
|
|
|
- int rc;
|
|
|
-
|
|
|
- ibmvnic_free_inflight(adapter);
|
|
|
- release_sub_crqs(adapter);
|
|
|
- if (adapter->migrated) {
|
|
|
- rc = ibmvnic_reenable_crq_queue(adapter);
|
|
|
- if (rc)
|
|
|
- dev_err(dev, "Error after enable rc=%ld\n", rc);
|
|
|
- adapter->migrated = false;
|
|
|
- rc = ibmvnic_send_crq_init(adapter);
|
|
|
- if (rc)
|
|
|
- dev_err(dev, "Error sending init rc=%ld\n", rc);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
static void ibmvnic_handle_crq(union ibmvnic_crq *crq,
|
|
|
struct ibmvnic_adapter *adapter)
|
|
|
{
|
|
@@ -3288,7 +3267,15 @@ static void ibmvnic_handle_crq(union ibmvnic_crq *crq,
|
|
|
if (gen_crq->cmd == IBMVNIC_PARTITION_MIGRATED) {
|
|
|
dev_info(dev, "Re-enabling adapter\n");
|
|
|
adapter->migrated = true;
|
|
|
- schedule_work(&adapter->ibmvnic_xport);
|
|
|
+ ibmvnic_free_inflight(adapter);
|
|
|
+ release_sub_crqs(adapter);
|
|
|
+ rc = ibmvnic_reenable_crq_queue(adapter);
|
|
|
+ if (rc)
|
|
|
+ dev_err(dev, "Error after enable rc=%ld\n", rc);
|
|
|
+ adapter->migrated = false;
|
|
|
+ rc = ibmvnic_send_crq_init(adapter);
|
|
|
+ if (rc)
|
|
|
+ dev_err(dev, "Error sending init rc=%ld\n", rc);
|
|
|
} else if (gen_crq->cmd == IBMVNIC_DEVICE_FAILOVER) {
|
|
|
dev_info(dev, "Backing device failover detected\n");
|
|
|
netif_carrier_off(netdev);
|
|
@@ -3297,7 +3284,8 @@ static void ibmvnic_handle_crq(union ibmvnic_crq *crq,
|
|
|
/* The adapter lost the connection */
|
|
|
dev_err(dev, "Virtual Adapter failed (rc=%d)\n",
|
|
|
gen_crq->cmd);
|
|
|
- schedule_work(&adapter->ibmvnic_xport);
|
|
|
+ ibmvnic_free_inflight(adapter);
|
|
|
+ release_sub_crqs(adapter);
|
|
|
}
|
|
|
return;
|
|
|
case IBMVNIC_CRQ_CMD_RSP:
|
|
@@ -3738,7 +3726,6 @@ static int ibmvnic_probe(struct vio_dev *dev, const struct vio_device_id *id)
|
|
|
SET_NETDEV_DEV(netdev, &dev->dev);
|
|
|
|
|
|
INIT_WORK(&adapter->vnic_crq_init, handle_crq_init_rsp);
|
|
|
- INIT_WORK(&adapter->ibmvnic_xport, ibmvnic_xport_event);
|
|
|
|
|
|
spin_lock_init(&adapter->stats_lock);
|
|
|
|