crypto: qat - fix invalid pf2vf_resp_wq logic
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. Tested-by: Suresh Marikkannu <sureshx.marikkannu@intel.com> Signed-off-by: Tadeusz Struk <tadeusz.struk@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
ce1bc448ba
commit
6f15194257
3 changed files with 24 additions and 10 deletions
|
@ -145,6 +145,8 @@ int adf_enable_aer(struct adf_accel_dev *accel_dev, struct pci_driver *adf);
|
||||||
void adf_disable_aer(struct adf_accel_dev *accel_dev);
|
void adf_disable_aer(struct adf_accel_dev *accel_dev);
|
||||||
int adf_init_aer(void);
|
int adf_init_aer(void);
|
||||||
void adf_exit_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);
|
int adf_init_admin_comms(struct adf_accel_dev *accel_dev);
|
||||||
void adf_exit_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);
|
int adf_send_admin_init(struct adf_accel_dev *accel_dev);
|
||||||
|
|
|
@ -469,12 +469,17 @@ static int __init adf_register_ctl_device_driver(void)
|
||||||
if (adf_init_aer())
|
if (adf_init_aer())
|
||||||
goto err_aer;
|
goto err_aer;
|
||||||
|
|
||||||
|
if (adf_init_pf_wq())
|
||||||
|
goto err_pf_wq;
|
||||||
|
|
||||||
if (qat_crypto_register())
|
if (qat_crypto_register())
|
||||||
goto err_crypto_register;
|
goto err_crypto_register;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_crypto_register:
|
err_crypto_register:
|
||||||
|
adf_exit_pf_wq();
|
||||||
|
err_pf_wq:
|
||||||
adf_exit_aer();
|
adf_exit_aer();
|
||||||
err_aer:
|
err_aer:
|
||||||
adf_chr_drv_destroy();
|
adf_chr_drv_destroy();
|
||||||
|
@ -487,6 +492,7 @@ static void __exit adf_unregister_ctl_device_driver(void)
|
||||||
{
|
{
|
||||||
adf_chr_drv_destroy();
|
adf_chr_drv_destroy();
|
||||||
adf_exit_aer();
|
adf_exit_aer();
|
||||||
|
adf_exit_pf_wq();
|
||||||
qat_crypto_unregister();
|
qat_crypto_unregister();
|
||||||
adf_clean_vf_map(false);
|
adf_clean_vf_map(false);
|
||||||
mutex_destroy(&adf_ctl_lock);
|
mutex_destroy(&adf_ctl_lock);
|
||||||
|
|
|
@ -119,11 +119,6 @@ static int adf_enable_sriov(struct adf_accel_dev *accel_dev)
|
||||||
int i;
|
int i;
|
||||||
u32 reg;
|
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;
|
for (i = 0, vf_info = accel_dev->pf.vf_info; i < totalvfs;
|
||||||
i++, vf_info++) {
|
i++, vf_info++) {
|
||||||
/* This ptr will be populated when VFs will be created */
|
/* This ptr will be populated when VFs will be created */
|
||||||
|
@ -216,11 +211,6 @@ void adf_disable_sriov(struct adf_accel_dev *accel_dev)
|
||||||
|
|
||||||
kfree(accel_dev->pf.vf_info);
|
kfree(accel_dev->pf.vf_info);
|
||||||
accel_dev->pf.vf_info = NULL;
|
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);
|
EXPORT_SYMBOL_GPL(adf_disable_sriov);
|
||||||
|
|
||||||
|
@ -304,3 +294,19 @@ int adf_sriov_configure(struct pci_dev *pdev, int numvfs)
|
||||||
return numvfs;
|
return numvfs;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(adf_sriov_configure);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue