Patch "crypto: qat - fix invalid pf2vf_resp_wq logic" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
crypto: qat - fix invalid pf2vf_resp_wq logic
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
crypto-qat-fix-invalid-pf2vf_resp_wq-logic.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
9e209fcfb804da262e38e5cd2e680c47a41f0f95Mon Sep 17 00:00:00 2001
From: Tadeusz Struk <[email protected]>
Date: Mon, 25 Apr 2016 07:32:19 -0700
Subject: crypto: qat - fix invalid pf2vf_resp_wq logic
From: Tadeusz Struk <[email protected]>
commit 9e209fcfb804da262e38e5cd2e680c47a41f0f95 upstream.
The pf2vf_resp_wq is a global so it has to be created at init and destroyed at exit, instead of per device.
--- drivers/crypto/qat/qat_common/adf_common_drv.h | 2 + drivers/crypto/qat/qat_common/adf_ctl_drv.c | 6 +++++ drivers/crypto/qat/qat_common/adf_sriov.c | 26 +++++++++++++++---------- 3 files changed, 24 insertions(+), 10 deletions(-)
drivers/crypto/qat/qat_common/adf_common_drv.h +2 -0
@@ -145,6 +145,8 @@ int adf_enable_aer(struct adf_accel_devvoid adf_disable_aer (struct adf_accel_dev *accel_dev);int adf_init_aer (void );void adf_exit_aer (void ); +int adf_init_pf_wq (void ); +void adf_exit_pf_wq (void );int adf_init_admin_comms (struct adf_accel_dev *accel_dev);void adf_exit_admin_comms (struct adf_accel_dev *accel_dev);int adf_send_admin_init (struct adf_accel_dev *accel_dev);
drivers/crypto/qat/qat_common/adf_ctl_drv.c +6 -0
@@ -469,12 +469,17 @@ static int __init adf_register_ctl_devicif (adf_init_aer ()) goto err_aer; +if (adf_init_pf_wq ()) + goto err_pf_wq; +if (qat_crypto_register ()) goto err_crypto_register;return 0 ; err_crypto_register: +adf_exit_pf_wq (); +err_pf_wq:adf_exit_aer (); err_aer:adf_chr_drv_destroy ();
@@ -487,6 +492,7 @@ static void __exit adf_unregister_ctl_de {adf_chr_drv_destroy ();adf_exit_aer (); +adf_exit_pf_wq ();qat_crypto_unregister ();adf_clean_vf_map (false);mutex_destroy (&adf_ctl_lock);
drivers/crypto/qat/qat_common/adf_sriov.c +16 -10
@@ -119,11 +119,6 @@ static int adf_enable_sriov(struct adf_aint i;u32 reg; -/* Workqueue for PF2VF responses */ - pf2vf_resp_wq =create_workqueue ("qat_pf2vf_resp_wq" ); -if (!pf2vf_resp_wq) -return -ENOMEM ; -for (i =0 , vf_info = accel_dev->pf.vf_info; i < totalvfs; i++, vf_info++) {/* This ptr will be populated when VFs will be created */
@@ -216,11 +211,6 @@ void adf_disable_sriov(struct adf_accel_kfree (accel_dev->pf.vf_info); accel_dev->pf.vf_info =NULL ; - -if (pf2vf_resp_wq) { -destroy_workqueue (pf2vf_resp_wq); - pf2vf_resp_wq =NULL ; - } }EXPORT_SYMBOL_GPL (adf_disable_sriov);
@@ -304,3 +294,19 @@ int adf_sriov_configure(struct pci_dev *return numvfs; }EXPORT_SYMBOL_GPL (adf_sriov_configure); + +int __init adf_init_pf_wq (void ) +{ +/* Workqueue for PF2VF responses */ + pf2vf_resp_wq =create_workqueue ("qat_pf2vf_resp_wq" ); + +return !pf2vf_resp_wq ? -ENOMEM :0 ; +} + +void adf_exit_pf_wq (void ) +{ +if (pf2vf_resp_wq) { +destroy_workqueue (pf2vf_resp_wq); + pf2vf_resp_wq =NULL ; + } +}
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/crypto-qat-fix-invalid-pf2vf_resp_wq-logic.patch