|
Torsten Duwe |
f1f825 |
From 605b84ae0beb8eef078b3d55e548b1dd6e75aeb1 Mon Sep 17 00:00:00 2001
|
|
Torsten Duwe |
f1f825 |
From: Wojciech Ziemba <wojciech.ziemba@intel.com>
|
|
Torsten Duwe |
f1f825 |
Date: Thu, 10 Feb 2022 13:38:25 +0000
|
|
Torsten Duwe |
f1f825 |
Subject: [PATCH] crypto: qat - add misc workqueue
|
|
Torsten Duwe |
f1f825 |
Git-commit: 605b84ae0beb8eef078b3d55e548b1dd6e75aeb1
|
|
Torsten Duwe |
f1f825 |
Patch-mainline: v5.18-rc1
|
|
Torsten Duwe |
f1f825 |
References: jsc#PED-1073
|
|
Torsten Duwe |
f1f825 |
|
|
Torsten Duwe |
f1f825 |
In an effort to reduce the amount of workqueues, scattered across
|
|
Torsten Duwe |
f1f825 |
the QAT driver, introduce the misc workqueue. This queue will be used
|
|
Torsten Duwe |
f1f825 |
to handle bottom halves, Power Management and more in the future.
|
|
Torsten Duwe |
f1f825 |
|
|
Torsten Duwe |
f1f825 |
The function adf_misc_wq_queue_work() has been added to simplify
|
|
Torsten Duwe |
f1f825 |
the enqueuing of jobs.
|
|
Torsten Duwe |
f1f825 |
|
|
Torsten Duwe |
f1f825 |
Signed-off-by: Wojciech Ziemba <wojciech.ziemba@intel.com>
|
|
Torsten Duwe |
f1f825 |
Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
|
|
Torsten Duwe |
f1f825 |
Reviewed-by: Marco Chiappero <marco.chiappero@intel.com>
|
|
Torsten Duwe |
f1f825 |
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
|
Torsten Duwe |
f1f825 |
Signed-off-by: Torsten Duwe <duwe@suse.de>
|
|
Torsten Duwe |
f1f825 |
|
|
Torsten Duwe |
f1f825 |
---
|
|
Torsten Duwe |
f1f825 |
.../crypto/qat/qat_common/adf_common_drv.h | 3 ++
|
|
Torsten Duwe |
f1f825 |
drivers/crypto/qat/qat_common/adf_ctl_drv.c | 6 ++++
|
|
Torsten Duwe |
f1f825 |
drivers/crypto/qat/qat_common/adf_isr.c | 28 +++++++++++++++++++
|
|
Torsten Duwe |
f1f825 |
3 files changed, 37 insertions(+)
|
|
Torsten Duwe |
f1f825 |
|
|
Torsten Duwe |
f1f825 |
diff --git a/drivers/crypto/qat/qat_common/adf_common_drv.h b/drivers/crypto/qat/qat_common/adf_common_drv.h
|
|
Torsten Duwe |
f1f825 |
index 76f4f96ec5eb0..0775491768797 100644
|
|
Torsten Duwe |
f1f825 |
--- a/drivers/crypto/qat/qat_common/adf_common_drv.h
|
|
Torsten Duwe |
f1f825 |
+++ b/drivers/crypto/qat/qat_common/adf_common_drv.h
|
|
Torsten Duwe |
f1f825 |
@@ -188,6 +188,9 @@ int qat_uclo_map_obj(struct icp_qat_fw_loader_handle *handle,
|
|
Torsten Duwe |
f1f825 |
void *addr_ptr, u32 mem_size, char *obj_name);
|
|
Torsten Duwe |
f1f825 |
int qat_uclo_set_cfg_ae_mask(struct icp_qat_fw_loader_handle *handle,
|
|
Torsten Duwe |
f1f825 |
unsigned int cfg_ae_mask);
|
|
Torsten Duwe |
f1f825 |
+int adf_init_misc_wq(void);
|
|
Torsten Duwe |
f1f825 |
+void adf_exit_misc_wq(void);
|
|
Torsten Duwe |
f1f825 |
+bool adf_misc_wq_queue_work(struct work_struct *work);
|
|
Torsten Duwe |
f1f825 |
#if defined(CONFIG_PCI_IOV)
|
|
Torsten Duwe |
f1f825 |
int adf_sriov_configure(struct pci_dev *pdev, int numvfs);
|
|
Torsten Duwe |
f1f825 |
void adf_disable_sriov(struct adf_accel_dev *accel_dev);
|
|
Torsten Duwe |
f1f825 |
diff --git a/drivers/crypto/qat/qat_common/adf_ctl_drv.c b/drivers/crypto/qat/qat_common/adf_ctl_drv.c
|
|
Torsten Duwe |
f1f825 |
index 6f64aa6931461..e8ac932bbaab6 100644
|
|
Torsten Duwe |
f1f825 |
--- a/drivers/crypto/qat/qat_common/adf_ctl_drv.c
|
|
Torsten Duwe |
f1f825 |
+++ b/drivers/crypto/qat/qat_common/adf_ctl_drv.c
|
|
Torsten Duwe |
f1f825 |
@@ -419,6 +419,9 @@ static int __init adf_register_ctl_device_driver(void)
|
|
Torsten Duwe |
f1f825 |
if (adf_chr_drv_create())
|
|
Torsten Duwe |
f1f825 |
goto err_chr_dev;
|
|
Torsten Duwe |
f1f825 |
|
|
Torsten Duwe |
f1f825 |
+ if (adf_init_misc_wq())
|
|
Torsten Duwe |
f1f825 |
+ goto err_misc_wq;
|
|
Torsten Duwe |
f1f825 |
+
|
|
Torsten Duwe |
f1f825 |
if (adf_init_aer())
|
|
Torsten Duwe |
f1f825 |
goto err_aer;
|
|
Torsten Duwe |
f1f825 |
|
|
Torsten Duwe |
f1f825 |
@@ -440,6 +443,8 @@ err_vf_wq:
|
|
Torsten Duwe |
f1f825 |
err_pf_wq:
|
|
Torsten Duwe |
f1f825 |
adf_exit_aer();
|
|
Torsten Duwe |
f1f825 |
err_aer:
|
|
Torsten Duwe |
f1f825 |
+ adf_exit_misc_wq();
|
|
Torsten Duwe |
f1f825 |
+err_misc_wq:
|
|
Torsten Duwe |
f1f825 |
adf_chr_drv_destroy();
|
|
Torsten Duwe |
f1f825 |
err_chr_dev:
|
|
Torsten Duwe |
f1f825 |
mutex_destroy(&adf_ctl_lock);
|
|
Torsten Duwe |
f1f825 |
@@ -449,6 +454,7 @@ err_chr_dev:
|
|
Torsten Duwe |
f1f825 |
static void __exit adf_unregister_ctl_device_driver(void)
|
|
Torsten Duwe |
f1f825 |
{
|
|
Torsten Duwe |
f1f825 |
adf_chr_drv_destroy();
|
|
Torsten Duwe |
f1f825 |
+ adf_exit_misc_wq();
|
|
Torsten Duwe |
f1f825 |
adf_exit_aer();
|
|
Torsten Duwe |
f1f825 |
adf_exit_vf_wq();
|
|
Torsten Duwe |
f1f825 |
adf_exit_pf_wq();
|
|
Torsten Duwe |
f1f825 |
diff --git a/drivers/crypto/qat/qat_common/adf_isr.c b/drivers/crypto/qat/qat_common/adf_isr.c
|
|
Torsten Duwe |
f1f825 |
index 4ca482aa69f7c..803b89ba9670c 100644
|
|
Torsten Duwe |
f1f825 |
--- a/drivers/crypto/qat/qat_common/adf_isr.c
|
|
Torsten Duwe |
f1f825 |
+++ b/drivers/crypto/qat/qat_common/adf_isr.c
|
|
Torsten Duwe |
f1f825 |
@@ -16,6 +16,7 @@
|
|
Torsten Duwe |
f1f825 |
#include "adf_transport_internal.h"
|
|
Torsten Duwe |
f1f825 |
|
|
Torsten Duwe |
f1f825 |
#define ADF_MAX_NUM_VFS 32
|
|
Torsten Duwe |
f1f825 |
+static struct workqueue_struct *adf_misc_wq;
|
|
Torsten Duwe |
f1f825 |
|
|
Torsten Duwe |
f1f825 |
static int adf_enable_msix(struct adf_accel_dev *accel_dev)
|
|
Torsten Duwe |
f1f825 |
{
|
|
Torsten Duwe |
f1f825 |
@@ -341,3 +342,30 @@ err_out:
|
|
Torsten Duwe |
f1f825 |
return ret;
|
|
Torsten Duwe |
f1f825 |
}
|
|
Torsten Duwe |
f1f825 |
EXPORT_SYMBOL_GPL(adf_isr_resource_alloc);
|
|
Torsten Duwe |
f1f825 |
+
|
|
Torsten Duwe |
f1f825 |
+/**
|
|
Torsten Duwe |
f1f825 |
+ * adf_init_misc_wq() - Init misc workqueue
|
|
Torsten Duwe |
f1f825 |
+ *
|
|
Torsten Duwe |
f1f825 |
+ * Function init workqueue 'qat_misc_wq' for general purpose.
|
|
Torsten Duwe |
f1f825 |
+ *
|
|
Torsten Duwe |
f1f825 |
+ * Return: 0 on success, error code otherwise.
|
|
Torsten Duwe |
f1f825 |
+ */
|
|
Torsten Duwe |
f1f825 |
+int __init adf_init_misc_wq(void)
|
|
Torsten Duwe |
f1f825 |
+{
|
|
Torsten Duwe |
f1f825 |
+ adf_misc_wq = alloc_workqueue("qat_misc_wq", WQ_MEM_RECLAIM, 0);
|
|
Torsten Duwe |
f1f825 |
+
|
|
Torsten Duwe |
f1f825 |
+ return !adf_misc_wq ? -ENOMEM : 0;
|
|
Torsten Duwe |
f1f825 |
+}
|
|
Torsten Duwe |
f1f825 |
+
|
|
Torsten Duwe |
f1f825 |
+void adf_exit_misc_wq(void)
|
|
Torsten Duwe |
f1f825 |
+{
|
|
Torsten Duwe |
f1f825 |
+ if (adf_misc_wq)
|
|
Torsten Duwe |
f1f825 |
+ destroy_workqueue(adf_misc_wq);
|
|
Torsten Duwe |
f1f825 |
+
|
|
Torsten Duwe |
f1f825 |
+ adf_misc_wq = NULL;
|
|
Torsten Duwe |
f1f825 |
+}
|
|
Torsten Duwe |
f1f825 |
+
|
|
Torsten Duwe |
f1f825 |
+bool adf_misc_wq_queue_work(struct work_struct *work)
|
|
Torsten Duwe |
f1f825 |
+{
|
|
Torsten Duwe |
f1f825 |
+ return queue_work(adf_misc_wq, work);
|
|
Torsten Duwe |
f1f825 |
+}
|
|
Torsten Duwe |
f1f825 |
--
|
|
Torsten Duwe |
f1f825 |
2.35.3
|
|
Torsten Duwe |
f1f825 |
|