bnxt_en: Fix RTNL lock usage on bnxt_update_link().
authorMichael Chan <michael.chan@broadcom.com>
Wed, 25 Jan 2017 07:55:08 +0000 (02:55 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 17 Jun 2017 04:41:56 +0000 (06:41 +0200)
commit66deb409251c6e88de9cdffc5a952670fe544410
tree67c0edd8799e2f689376084a374a07a568afba7a
parente89ffe41e9a67901034accd1d19dbeefb390fafb
bnxt_en: Fix RTNL lock usage on bnxt_update_link().

[ Upstream commit 0eaa24b971ae251ae9d3be23f77662a655532063 ]

bnxt_update_link() is called from multiple code paths.  Most callers,
such as open, ethtool, already hold RTNL.  Only the caller bnxt_sp_task()
does not.  So it is a bug to take RTNL inside bnxt_update_link().

Fix it by removing the RTNL inside bnxt_update_link().  The function
now expects the caller to always hold RTNL.

In bnxt_sp_task(), call bnxt_rtnl_lock_sp() before calling
bnxt_update_link().  We also need to move the call to the end of
bnxt_sp_task() since it will be clearing the BNXT_STATE_IN_SP_TASK bit.

Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/broadcom/bnxt/bnxt.c