**/
 static void iavf_up_complete(struct iavf_adapter *adapter)
 {
-       adapter->state = __IAVF_RUNNING;
+       iavf_change_state(adapter, __IAVF_RUNNING);
        clear_bit(__IAVF_VSI_DOWN, adapter->vsi.state);
 
        iavf_napi_enable_all(adapter);
                iavf_shutdown_adminq(hw);
                goto err;
        }
-       adapter->state = __IAVF_INIT_VERSION_CHECK;
+       iavf_change_state(adapter, __IAVF_INIT_VERSION_CHECK);
 err:
        return err;
 }
        if (!iavf_asq_done(hw)) {
                dev_err(&pdev->dev, "Admin queue command never completed\n");
                iavf_shutdown_adminq(hw);
-               adapter->state = __IAVF_STARTUP;
+               iavf_change_state(adapter, __IAVF_STARTUP);
                goto err;
        }
 
                        err);
                goto err;
        }
-       adapter->state = __IAVF_INIT_GET_RESOURCES;
-
+       iavf_change_state(adapter, __IAVF_INIT_GET_RESOURCES);
 err:
        return err;
 }
        if (netdev->features & NETIF_F_GRO)
                dev_info(&pdev->dev, "GRO is enabled\n");
 
-       adapter->state = __IAVF_DOWN;
+       iavf_change_state(adapter, __IAVF_DOWN);
        set_bit(__IAVF_VSI_DOWN, adapter->vsi.state);
        rtnl_unlock();
 
                goto restart_watchdog;
 
        if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED)
-               adapter->state = __IAVF_COMM_FAILED;
+               iavf_change_state(adapter, __IAVF_COMM_FAILED);
 
        switch (adapter->state) {
        case __IAVF_COMM_FAILED:
                        /* A chance for redemption! */
                        dev_err(&adapter->pdev->dev,
                                "Hardware came out of reset. Attempting reinit.\n");
-                       adapter->state = __IAVF_STARTUP;
+                       iavf_change_state(adapter, __IAVF_STARTUP);
                        adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED;
                        queue_delayed_work(iavf_wq, &adapter->init_task, 10);
                        mutex_unlock(&adapter->crit_lock);
                goto restart_watchdog;
        }
 
-               /* check for hw reset */
+       /* check for hw reset */
        reg_val = rd32(hw, IAVF_VF_ARQLEN1) & IAVF_VF_ARQLEN1_ARQENABLE_MASK;
        if (!reg_val) {
+               iavf_change_state(adapter, __IAVF_RESETTING);
                adapter->flags |= IAVF_FLAG_RESET_PENDING;
                adapter->aq_required = 0;
                adapter->current_op = VIRTCHNL_OP_UNKNOWN;
        adapter->netdev->flags &= ~IFF_UP;
        mutex_unlock(&adapter->crit_lock);
        adapter->flags &= ~IAVF_FLAG_RESET_PENDING;
-       adapter->state = __IAVF_DOWN;
+       iavf_change_state(adapter, __IAVF_DOWN);
        wake_up(&adapter->down_waitqueue);
        dev_info(&adapter->pdev->dev, "Reset task did not complete, VF disabled\n");
 }
        }
        iavf_irq_disable(adapter);
 
-       adapter->state = __IAVF_RESETTING;
+       iavf_change_state(adapter, __IAVF_RESETTING);
        adapter->flags &= ~IAVF_FLAG_RESET_PENDING;
 
        /* free the Tx/Rx rings and descriptors, might be better to just
 
                iavf_configure(adapter);
 
+               /* iavf_up_complete() will switch device back
+                * to __IAVF_RUNNING
+                */
                iavf_up_complete(adapter);
 
                iavf_irq_enable(adapter, true);
        } else {
-               adapter->state = __IAVF_DOWN;
+               iavf_change_state(adapter, __IAVF_DOWN);
                wake_up(&adapter->down_waitqueue);
        }
        mutex_unlock(&adapter->client_lock);
                adapter->flags |= IAVF_FLAG_CLIENT_NEEDS_CLOSE;
 
        iavf_down(adapter);
-       adapter->state = __IAVF_DOWN_PENDING;
+       iavf_change_state(adapter, __IAVF_DOWN_PENDING);
        iavf_free_traffic_irqs(adapter);
 
        mutex_unlock(&adapter->crit_lock);
                        "Failed to communicate with PF; waiting before retry\n");
                adapter->flags |= IAVF_FLAG_PF_COMMS_FAILED;
                iavf_shutdown_adminq(hw);
-               adapter->state = __IAVF_STARTUP;
+               iavf_change_state(adapter, __IAVF_STARTUP);
                queue_delayed_work(iavf_wq, &adapter->init_task, HZ * 5);
                goto out;
        }
        if (iavf_lock_timeout(&adapter->crit_lock, 5000))
                dev_warn(&adapter->pdev->dev, "failed to acquire crit_lock in %s\n", __FUNCTION__);
        /* Prevent the watchdog from running. */
-       adapter->state = __IAVF_REMOVE;
+       iavf_change_state(adapter, __IAVF_REMOVE);
        adapter->aq_required = 0;
        mutex_unlock(&adapter->crit_lock);
 
        hw->back = adapter;
 
        adapter->msg_enable = BIT(DEFAULT_DEBUG_LEVEL_SHIFT) - 1;
-       adapter->state = __IAVF_STARTUP;
+       iavf_change_state(adapter, __IAVF_STARTUP);
 
        /* Call save state here because it relies on the adapter struct. */
        pci_save_state(pdev);
                dev_warn(&adapter->pdev->dev, "failed to acquire crit_lock in %s\n", __FUNCTION__);
 
        /* Shut down all the garbage mashers on the detention level */
-       adapter->state = __IAVF_REMOVE;
+       iavf_change_state(adapter, __IAVF_REMOVE);
        adapter->aq_required = 0;
        adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED;
        iavf_free_all_tx_resources(adapter);