crypto: qat - fix heartbeat error injection
Subsystems (2)
PATCH 1/1 crypto: qat - fix heartbeat error injection
The current implementation of the heartbeat error injection uses adf_disable_arb_thd() to stop a specific accelerator engine thread from processing requests. This does not reliably prevent the device from generating responses.
Fix the error injection by disabling the device arbiter through exit_arb() instead. This properly simulates a device failure by stopping all arbitration, which results in missing responses for sent requests.
Remove the now unused adf_disable_arb_thd() function and its declaration.
--- .../intel/qat/qat_common/adf_common_drv.h | 1 - .../qat/qat_common/adf_heartbeat_inject.c | 6 ++--- .../intel/qat/qat_common/adf_hw_arbiter.c | 25 ------------------- 3 files changed, 2 insertions(+), 30 deletions(-)
drivers/crypto/intel/qat/qat_common/adf_common_drv.h +0 -1
@@ -92,7 +92,6 @@ void adf_exit_aer(void);int adf_init_arb (struct adf_accel_dev *accel_dev);void adf_exit_arb (struct adf_accel_dev *accel_dev);void adf_update_ring_arb (struct adf_etr_ring_data *ring); -int adf_disable_arb_thd (struct adf_accel_dev *accel_dev,u32 ae,u32 thr);int adf_dev_get (struct adf_accel_dev *accel_dev);void adf_dev_put (struct adf_accel_dev *accel_dev);
drivers/crypto/intel/qat/qat_common/adf_heartbeat_inject.c +2 -4
@@ -64,10 +64,8 @@ int adf_heartbeat_inject_error(struct adf_accel_dev *accel_dev)if (ret)return ret; -/* Configure worker threads to stop processing any packet */ - ret =adf_disable_arb_thd (accel_dev, rand_ae, rand_thr); -if (ret) -return ret; +/* Disable arbiter to stop processing any packet */ + hw_device->exit_arb (accel_dev);/* Change HB counters memory to simulate a hang */ adf_set_hb_counters_fail (accel_dev, rand_ae, rand_thr);
drivers/crypto/intel/qat/qat_common/adf_hw_arbiter.c +0 -25
@@ -99,28 +99,3 @@ void adf_exit_arb(struct adf_accel_dev *accel_dev) csr_ops->write_csr_ring_srv_arb_en (csr, i,0 ); }EXPORT_SYMBOL_GPL (adf_exit_arb); - -int adf_disable_arb_thd (struct adf_accel_dev *accel_dev,u32 ae,u32 thr) -{ -void __iomem *csr = accel_dev->transport->banks[0 ].csr_addr; -struct adf_hw_device_data *hw_data = accel_dev->hw_device; -const u32 *thd_2_arb_cfg; -struct arb_info info; -u32 ae_thr_map; - -if (ADF_AE_STRAND0_THREAD == thr ||ADF_AE_STRAND1_THREAD == thr) - thr =ADF_AE_ADMIN_THREAD ; - - hw_data->get_arb_info (&info); - thd_2_arb_cfg = hw_data->get_arb_mapping (accel_dev); -if (!thd_2_arb_cfg) -return -EFAULT ; - -/* Disable scheduling for this particular AE and thread */ - ae_thr_map = *(thd_2_arb_cfg + ae); - ae_thr_map &= ~(GENMASK (3 ,0 ) << (thr *BIT (2 ))); - -WRITE_CSR_ARB_WT2SAM (csr, info.arb_offset, info.wt2sam_offset, ae, - ae_thr_map); -return 0 ; -}
base-commit: 8e7f93aab333eeac4b0327a2f14dca289d071b6a
Signature · 1 line
2.43.0
Herbert Xu
maintainerQuoted 17 lines · Damian Muszynski
The current implementation of the heartbeat error injection uses
adf_disable_arb_thd()to stop a specific accelerator engine thread from processing requests. This does not reliably prevent the device from generating responses.Fix the error injection by disabling the device arbiter through
exit_arb()instead. This properly simulates a device failure by stopping all arbitration, which results in missing responses for sent requests.Remove the now unused
adf_disable_arb_thd()function and its declaration.Fixes e2b67859ab6e ("crypto: qat - add heartbeat error simulator")Signed-off-by Damian Muszynski <[email protected]>Reviewed-by Ahsan Atta <[email protected]>Reviewed-by Giovanni Cabiddu <[email protected]>
Quoted 5 lines
--- .../intel/qat/qat_common/adf_common_drv.h | 1 - .../qat/qat_common/adf_heartbeat_inject.c | 6 ++--- .../intel/qat/qat_common/adf_hw_arbiter.c | 25 ------------------- 3 files changed, 2 insertions(+), 30 deletions(-)
Patch applied. Thanks.
Signature · 3 lines
Email: Herbert Xu <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt