mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
fbnic: Fixup rtnl_lock and devl_lock handling related to mailbox code
The exception handling path for the __fbnic_pm_resume function had a bug in
that it was taking the devlink lock and then exiting to exception handling
instead of waiting until after it released the lock to do so. In order to
handle that I am swapping the placement of the unlock and the exception
handling jump to label so that we don't trigger a deadlock by holding the
lock longer than we need to.
In addition this change applies the same ordering to the rtnl_lock/unlock
calls in the same function as it should make the code easier to follow if
it adheres to a consistent pattern.
Fixes: 82534f446d
("eth: fbnic: Add devlink dev flash support")
Signed-off-by: Alexander Duyck <alexanderduyck@fb.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Link: https://patch.msgid.link/175616256667.1963577.5543500806256052549.stgit@ahduyck-xeon-server.home.arpa
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
1cc8a5b534
commit
2ddaa562b4
@ -443,11 +443,10 @@ static int __fbnic_pm_resume(struct device *dev)
|
||||
|
||||
/* Re-enable mailbox */
|
||||
err = fbnic_fw_request_mbx(fbd);
|
||||
devl_unlock(priv_to_devlink(fbd));
|
||||
if (err)
|
||||
goto err_free_irqs;
|
||||
|
||||
devl_unlock(priv_to_devlink(fbd));
|
||||
|
||||
/* Only send log history if log buffer is empty to prevent duplicate
|
||||
* log entries.
|
||||
*/
|
||||
@ -464,20 +463,20 @@ static int __fbnic_pm_resume(struct device *dev)
|
||||
|
||||
rtnl_lock();
|
||||
|
||||
if (netif_running(netdev)) {
|
||||
if (netif_running(netdev))
|
||||
err = __fbnic_open(fbn);
|
||||
if (err)
|
||||
goto err_free_mbx;
|
||||
}
|
||||
|
||||
rtnl_unlock();
|
||||
if (err)
|
||||
goto err_free_mbx;
|
||||
|
||||
return 0;
|
||||
err_free_mbx:
|
||||
fbnic_fw_log_disable(fbd);
|
||||
|
||||
rtnl_unlock();
|
||||
devl_lock(priv_to_devlink(fbd));
|
||||
fbnic_fw_free_mbx(fbd);
|
||||
devl_unlock(priv_to_devlink(fbd));
|
||||
err_free_irqs:
|
||||
fbnic_free_irqs(fbd);
|
||||
err_invalidate_uc_addr:
|
||||
|
Loading…
Reference in New Issue
Block a user