| From 5eac867103679cd11fc990460574b832b20ad890 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 18 Mar 2021 23:39:59 -0400 |
| Subject: crypto: qat - don't release uninitialized resources |
| |
| From: Tong Zhang <ztong0001@gmail.com> |
| |
| [ Upstream commit b66accaab3791e15ac99c92f236d0d3a6d5bd64e ] |
| |
| adf_vf_isr_resource_alloc() is not unwinding correctly when error |
| happens and it want to release uninitialized resources. |
| To fix this, only release initialized resources. |
| |
| [ 1.792845] Trying to free already-free IRQ 11 |
| [ 1.793091] WARNING: CPU: 0 PID: 182 at kernel/irq/manage.c:1821 free_irq+0x202/0x380 |
| [ 1.801340] Call Trace: |
| [ 1.801477] adf_vf_isr_resource_free+0x32/0xb0 [intel_qat] |
| [ 1.801785] adf_vf_isr_resource_alloc+0x14d/0x150 [intel_qat] |
| [ 1.802105] adf_dev_init+0xba/0x140 [intel_qat] |
| |
| Signed-off-by: Tong Zhang <ztong0001@gmail.com> |
| Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> |
| Fixes: dd0f368398ea ("crypto: qat - Add qat dh895xcc VF driver") |
| Acked-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/crypto/qat/qat_common/adf_vf_isr.c | 17 +++++++++++++---- |
| 1 file changed, 13 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/crypto/qat/qat_common/adf_vf_isr.c b/drivers/crypto/qat/qat_common/adf_vf_isr.c |
| index 38d316a42ba6..888388acb6bd 100644 |
| --- a/drivers/crypto/qat/qat_common/adf_vf_isr.c |
| +++ b/drivers/crypto/qat/qat_common/adf_vf_isr.c |
| @@ -261,17 +261,26 @@ int adf_vf_isr_resource_alloc(struct adf_accel_dev *accel_dev) |
| goto err_out; |
| |
| if (adf_setup_pf2vf_bh(accel_dev)) |
| - goto err_out; |
| + goto err_disable_msi; |
| |
| if (adf_setup_bh(accel_dev)) |
| - goto err_out; |
| + goto err_cleanup_pf2vf_bh; |
| |
| if (adf_request_msi_irq(accel_dev)) |
| - goto err_out; |
| + goto err_cleanup_bh; |
| |
| return 0; |
| + |
| +err_cleanup_bh: |
| + adf_cleanup_bh(accel_dev); |
| + |
| +err_cleanup_pf2vf_bh: |
| + adf_cleanup_pf2vf_bh(accel_dev); |
| + |
| +err_disable_msi: |
| + adf_disable_msi(accel_dev); |
| + |
| err_out: |
| - adf_vf_isr_resource_free(accel_dev); |
| return -EFAULT; |
| } |
| EXPORT_SYMBOL_GPL(adf_vf_isr_resource_alloc); |
| -- |
| 2.30.2 |
| |