When there is an error getting the PHY token, the error path
fails to release the locks that it has taken. Release those
locks in that failure case.

Fixes: 86b8fb293fdf ("ixgbe/base: add sw-firmware sync for resource sharing on 
X550em_a")

Signed-off-by: Beilei Xing <beilei.xing at intel.com>
---
 drivers/net/ixgbe/base/ixgbe_x550.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ixgbe/base/ixgbe_x550.c 
b/drivers/net/ixgbe/base/ixgbe_x550.c
index f129e8c..daa8339 100644
--- a/drivers/net/ixgbe/base/ixgbe_x550.c
+++ b/drivers/net/ixgbe/base/ixgbe_x550.c
@@ -3531,17 +3531,22 @@ static s32 ixgbe_acquire_swfw_sync_X550a(struct 
ixgbe_hw *hw, u32 mask)
        DEBUGFUNC("ixgbe_acquire_swfw_sync_X550a");

        while (--retries) {
+               status = IXGBE_SUCCESS;
                if (hmask)
                        status = ixgbe_acquire_swfw_sync_X540(hw, hmask);
                if (status)
-                       break;
+                       return status;
                if (!(mask & IXGBE_GSSR_TOKEN_SM))
-                       break;
+                       return IXGBE_SUCCESS;
+
                status = ixgbe_get_phy_token(hw);
-               if (status != IXGBE_ERR_TOKEN_RETRY)
-                       break;
+               if (status == IXGBE_SUCCESS)
+                       return IXGBE_SUCCESS;
+
                if (hmask)
                        ixgbe_release_swfw_sync_X540(hw, hmask);
+               if (status != IXGBE_ERR_TOKEN_RETRY)
+                       return status;
                msec_delay(FW_PHY_TOKEN_DELAY);
        }

-- 
2.5.0

Reply via email to