diff options
author | Kalesh AP <kalesh-anakkur.purayil@broadcom.com> | 2024-04-30 17:30:55 -0700 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2024-05-02 07:27:21 -0700 |
commit | 3c163f35bd50314d4e70ed9e83e1d8d83c473325 (patch) | |
tree | 975a25cc25a3945f3064435262d2482aa3a73fe7 /net/unix/sysctl_net_unix.c | |
parent | de21ec442d411b17a2386cb6683acd18b047506d (diff) | |
download | linux-stable-3c163f35bd50314d4e70ed9e83e1d8d83c473325.tar.gz linux-stable-3c163f35bd50314d4e70ed9e83e1d8d83c473325.tar.bz2 linux-stable-3c163f35bd50314d4e70ed9e83e1d8d83c473325.zip |
bnxt_en: Optimize recovery path ULP locking in the driver
In the error recovery path (AER, firmware recovery, etc), the
driver notifies the RoCE driver via ULP_STOP before the reset
and via ULP_START after the reset, all under RTNL_LOCK. The
RoCE driver can take a long time if there are a lot of QPs to
destroy, so it is not ideal to hold the global RTNL lock.
Rely on the new en_dev_lock mutex instead for ULP_STOP and
ULP_START. For the most part, we move the ULP_STOP call before
we take the RTNL lock and move the ULP_START after RTNL unlock.
Note that SRIOV re-enablement must be done after ULP_START
or RoCE on the VFs will not resume properly after reset.
The one scenario in bnxt_hwrm_if_change() where the RTNL lock
is already taken in the .ndo_open() context requires the ULP
restart to be deferred to the bnxt_sp_task() workqueue.
Reviewed-by: Selvin Thyparampil Xavier <selvin.xavier@broadcom.com>
Reviewed-by: Vikas Gupta <vikas.gupta@broadcom.com>
Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/20240501003056.100607-6-michael.chan@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/unix/sysctl_net_unix.c')
0 files changed, 0 insertions, 0 deletions