return "UNKNOWN";
 }
 
+/*
+ * Initialize the init_done completion and return code values. We
+ * can get a transport event just after registering the CRQ and the
+ * tasklet will use this to communicate the transport event. To ensure
+ * we don't miss the notification/error, initialize these _before_
+ * regisering the CRQ.
+ */
+static inline void reinit_init_done(struct ibmvnic_adapter *adapter)
+{
+       reinit_completion(&adapter->init_done);
+       adapter->init_done_rc = 0;
+}
+
 /*
  * do_reset returns zero if we are able to keep processing reset events, or
  * non-zero if we hit a fatal error and must halt.
                 */
                adapter->state = VNIC_PROBED;
 
+               reinit_init_done(adapter);
+
                if (adapter->reset_reason == VNIC_RESET_CHANGE_PARAM) {
                        rc = init_crq_queue(adapter);
                } else if (adapter->reset_reason == VNIC_RESET_MOBILITY) {
         */
        adapter->state = VNIC_PROBED;
 
-       reinit_completion(&adapter->init_done);
+       reinit_init_done(adapter);
+
        rc = init_crq_queue(adapter);
        if (rc) {
                netdev_err(adapter->netdev,
 
        adapter->from_passive_init = false;
 
-       if (reset)
-               reinit_completion(&adapter->init_done);
-
-       adapter->init_done_rc = 0;
        rc = ibmvnic_send_crq_init(adapter);
        if (rc) {
                dev_err(dev, "Send crq init failed with error %d\n", rc);
 
        if (adapter->init_done_rc) {
                release_crq_queue(adapter);
+               dev_err(dev, "CRQ-init failed, %d\n", adapter->init_done_rc);
                return adapter->init_done_rc;
        }
 
        if (adapter->from_passive_init) {
                adapter->state = VNIC_OPEN;
                adapter->from_passive_init = false;
+               dev_err(dev, "CRQ-init failed, passive-init\n");
                return -EINVAL;
        }
 
 
        init_success = false;
        do {
+               reinit_init_done(adapter);
+
                rc = init_crq_queue(adapter);
                if (rc) {
                        dev_err(&dev->dev, "Couldn't initialize crq. rc=%d\n",