|
@@ -3167,6 +3167,8 @@ static void ibmvnic_handle_crq(union ibmvnic_crq *crq,
|
|
|
switch (gen_crq->cmd) {
|
|
|
case IBMVNIC_CRQ_INIT:
|
|
|
dev_info(dev, "Partner initialized\n");
|
|
|
+ adapter->from_passive_init = true;
|
|
|
+ complete(&adapter->init_done);
|
|
|
break;
|
|
|
case IBMVNIC_CRQ_INIT_COMPLETE:
|
|
|
dev_info(dev, "Partner initialization complete\n");
|
|
@@ -3481,11 +3483,18 @@ static int ibmvnic_init(struct ibmvnic_adapter *adapter)
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
+ adapter->from_passive_init = false;
|
|
|
+
|
|
|
init_completion(&adapter->init_done);
|
|
|
ibmvnic_send_crq_init(adapter);
|
|
|
if (!wait_for_completion_timeout(&adapter->init_done, timeout)) {
|
|
|
dev_err(dev, "Initialization sequence timed out\n");
|
|
|
- release_crq_queue(adapter);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (adapter->from_passive_init) {
|
|
|
+ adapter->state = VNIC_OPEN;
|
|
|
+ adapter->from_passive_init = false;
|
|
|
return -1;
|
|
|
}
|
|
|
|