i40e: poll on NVM semaphore only if not other error
authorShannon Nelson <shannon.nelson@intel.com>
Thu, 13 Nov 2014 08:23:21 +0000 (08:23 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 9 Dec 2014 20:57:04 +0000 (12:57 -0800)
Only poll on the NVM semaphore if there's time left on a previous
reservation.  Also, add a little more info to debug messages.

Change-ID: I2439bf870b95a28b810dcb5cca1c06440463cf8a
Signed-off-by: Shannon Nelson <shannon.nelson@intel.com>
Acked-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Tested-by: Jim Young <jamesx.m.young@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_nvm.c

index f3d1c85d7ab8b0ec5d6ff763712e2d6f32e1f628..0fc62fc941e8cd6fb9b8f5e63e81e0398c5388cb 100644 (file)
@@ -93,10 +93,15 @@ i40e_status i40e_acquire_nvm(struct i40e_hw *hw,
        /* Store the timeout */
        hw->nvm.hw_semaphore_timeout = I40E_MS_TO_GTIME(time_left) + gtime;
 
-       if (ret_code) {
+       if (ret_code)
+               i40e_debug(hw, I40E_DEBUG_NVM,
+                          "NVM acquire type %d failed time_left=%llu ret=%d aq_err=%d\n",
+                          access, time_left, ret_code, hw->aq.asq_last_status);
+
+       if (ret_code && time_left) {
                /* Poll until the current NVM owner timeouts */
                timeout = I40E_MS_TO_GTIME(I40E_MAX_NVM_TIMEOUT) + gtime;
-               while (gtime < timeout) {
+               while ((gtime < timeout) && time_left) {
                        usleep_range(10000, 20000);
                        gtime = rd32(hw, I40E_GLVFGEN_TIMER);
                        ret_code = i40e_aq_request_resource(hw,
@@ -112,8 +117,8 @@ i40e_status i40e_acquire_nvm(struct i40e_hw *hw,
                if (ret_code) {
                        hw->nvm.hw_semaphore_timeout = 0;
                        i40e_debug(hw, I40E_DEBUG_NVM,
-                                  "NVM acquire timed out, wait %llu ms before trying again.\n",
-                                  time_left);
+                                  "NVM acquire timed out, wait %llu ms before trying again. status=%d aq_err=%d\n",
+                                  time_left, ret_code, hw->aq.asq_last_status);
                }
        }