spin_unlock_irqrestore(&adapter->error_list_lock, flags);
 }
 
+static void ibmvnic_napi_enable(struct ibmvnic_adapter *adapter)
+{
+       int i;
+
+       if (adapter->napi_enabled)
+               return;
+
+       for (i = 0; i < adapter->req_rx_queues; i++)
+               napi_enable(&adapter->napi[i]);
+
+       adapter->napi_enabled = true;
+}
+
+static void ibmvnic_napi_disable(struct ibmvnic_adapter *adapter)
+{
+       int i;
+
+       if (!adapter->napi_enabled)
+               return;
+
+       for (i = 0; i < adapter->req_rx_queues; i++)
+               napi_disable(&adapter->napi[i]);
+
+       adapter->napi_enabled = false;
+}
+
 static int ibmvnic_login(struct net_device *netdev)
 {
        struct ibmvnic_adapter *adapter = netdev_priv(netdev);
 
        adapter->state = VNIC_OPENING;
        replenish_pools(adapter);
-
-       for (i = 0; i < adapter->req_rx_queues; i++)
-               napi_enable(&adapter->napi[i]);
+       ibmvnic_napi_enable(adapter);
 
        /* We're ready to receive frames, enable the sub-crq interrupts and
         * set the logical link state to up
 
        adapter->state = VNIC_CLOSING;
        netif_tx_stop_all_queues(netdev);
-
-       if (adapter->napi) {
-               for (i = 0; i < adapter->req_rx_queues; i++)
-                       napi_disable(&adapter->napi[i]);
-       }
-
+       ibmvnic_napi_disable(adapter);
        clean_tx_pools(adapter);
 
        if (adapter->tx_scrq) {