idpf: avoid mailbox timeout delays during reset
[ Upstream commit 9dc63d8ff182150d7d7b318ab9389702a2c0a292 ]
Mailbox operations are not possible while the driver is in reset.
Operations that require MBX exchange with the control plane will result
in long delays if executed while a reset is in progress:
ethtool -L <inf> combined 8& echo 1 > /sys/class/net/<inf>/device/reset
idpf 0000:83:00.0: HW reset detected
idpf 0000:83:00.0: Device HW Reset initiated
idpf 0000:83:00.0: Transaction timed-out (op:504 cookie:be00 vc_op:504 salt:be timeout:2000ms)
idpf 0000:83:00.0: Transaction timed-out (op:508 cookie:bf00 vc_op:508 salt:bf timeout:2000ms)
idpf 0000:83:00.0: Transaction timed-out (op:512 cookie:c000 vc_op:512 salt:c0 timeout:2000ms)
idpf 0000:83:00.0: Transaction timed-out (op:510 cookie:c100 vc_op:510 salt:c1 timeout:2000ms)
idpf 0000:83:00.0: Transaction timed-out (op:509 cookie:c200 vc_op:509 salt:c2 timeout:60000ms)
idpf 0000:83:00.0: Transaction timed-out (op:509 cookie:c300 vc_op:509 salt:c3 timeout:60000ms)
idpf 0000:83:00.0: Transaction timed-out (op:505 cookie:c400 vc_op:505 salt:c4 timeout:60000ms)
idpf 0000:83:00.0: Failed to configure queues for vport 0, -62
Disable mailbox communication in case of a reset, unless it's done during
a driver load, where the virtchnl operations are needed to configure the
device.
Fixes: 8077c72756 ("idpf: add controlq init and reset checks")
Co-developed-by: Joshua Hay <joshua.a.hay@intel.com>
Signed-off-by: Joshua Hay <joshua.a.hay@intel.com>
Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Reviewed-by: Ahmed Zaki <ahmed.zaki@intel.com>
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Tested-by: Samuel Salin <Samuel.salin@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
12e40d01d6
commit
e653c298c5
@@ -1802,11 +1802,19 @@ void idpf_vc_event_task(struct work_struct *work)
|
|||||||
if (test_bit(IDPF_REMOVE_IN_PROG, adapter->flags))
|
if (test_bit(IDPF_REMOVE_IN_PROG, adapter->flags))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (test_bit(IDPF_HR_FUNC_RESET, adapter->flags) ||
|
if (test_bit(IDPF_HR_FUNC_RESET, adapter->flags))
|
||||||
test_bit(IDPF_HR_DRV_LOAD, adapter->flags)) {
|
goto func_reset;
|
||||||
set_bit(IDPF_HR_RESET_IN_PROG, adapter->flags);
|
|
||||||
idpf_init_hard_reset(adapter);
|
if (test_bit(IDPF_HR_DRV_LOAD, adapter->flags))
|
||||||
}
|
goto drv_load;
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
func_reset:
|
||||||
|
idpf_vc_xn_shutdown(adapter->vcxn_mngr);
|
||||||
|
drv_load:
|
||||||
|
set_bit(IDPF_HR_RESET_IN_PROG, adapter->flags);
|
||||||
|
idpf_init_hard_reset(adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -376,7 +376,7 @@ static void idpf_vc_xn_init(struct idpf_vc_xn_manager *vcxn_mngr)
|
|||||||
* All waiting threads will be woken-up and their transaction aborted. Further
|
* All waiting threads will be woken-up and their transaction aborted. Further
|
||||||
* operations on that object will fail.
|
* operations on that object will fail.
|
||||||
*/
|
*/
|
||||||
static void idpf_vc_xn_shutdown(struct idpf_vc_xn_manager *vcxn_mngr)
|
void idpf_vc_xn_shutdown(struct idpf_vc_xn_manager *vcxn_mngr)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
|||||||
@@ -66,5 +66,6 @@ int idpf_send_get_stats_msg(struct idpf_vport *vport);
|
|||||||
int idpf_send_set_sriov_vfs_msg(struct idpf_adapter *adapter, u16 num_vfs);
|
int idpf_send_set_sriov_vfs_msg(struct idpf_adapter *adapter, u16 num_vfs);
|
||||||
int idpf_send_get_set_rss_key_msg(struct idpf_vport *vport, bool get);
|
int idpf_send_get_set_rss_key_msg(struct idpf_vport *vport, bool get);
|
||||||
int idpf_send_get_set_rss_lut_msg(struct idpf_vport *vport, bool get);
|
int idpf_send_get_set_rss_lut_msg(struct idpf_vport *vport, bool get);
|
||||||
|
void idpf_vc_xn_shutdown(struct idpf_vc_xn_manager *vcxn_mngr);
|
||||||
|
|
||||||
#endif /* _IDPF_VIRTCHNL_H_ */
|
#endif /* _IDPF_VIRTCHNL_H_ */
|
||||||
|
|||||||
Reference in New Issue
Block a user