All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/2] crypto: qat - Remove x86 dependency on QAT drivers
@ 2022-06-17  9:59 Yoan Picchi
  2022-06-17  9:59 ` [PATCH v3 1/2] crypto: qat - replace get_current_node() with numa_node_id() Yoan Picchi
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Yoan Picchi @ 2022-06-17  9:59 UTC (permalink / raw)
  To: Giovanni Cabiddu, Herbert Xu, David S . Miller, qat-linux,
	linux-crypto, linux-kernel
  Cc: Andre Przywara, Ard Biesheuvel

The QAT acceleration card can be very helpfull for some tasks like dealing
with IPSEC but it is currently restricted to be used only on x86 machine.
Looking at the code we didn't see any reasons why those drivers might not
work on other architectures. We've successfully built all of them on x86,
arm64, arm32, mips64, powerpc64, riscv64 and sparc64.

We also have tested the driver with an Intel Corporation C62x Chipset
QuickAssist Technology (rev 04) PCIe card on an arm64 server. After the numa
patch, it works with the AF_ALG crypto userland interface, allowing us to
encrypt some data with cbc for instance. We've also successfully created some
VF, bound them to DPDK, and used the card this way, thus showing some real
life usecases of x86 do work on arm64 too.

Changelog v1 ... v2:
- Add COMPILE_TEST to Kconfig

Changelog v2 ... v3:
- Add the Crypto tag to the commit header

Andre Przywara (1):
  crypto: qat - replace get_current_node() with numa_node_id()

Yoan Picchi (1):
  crypto: qat - Removes the x86 dependency on the QAT drivers

 drivers/crypto/qat/Kconfig                     | 14 +++++++-------
 drivers/crypto/qat/qat_common/adf_common_drv.h |  5 -----
 drivers/crypto/qat/qat_common/qat_algs.c       |  4 ++--
 drivers/crypto/qat/qat_common/qat_asym_algs.c  |  4 ++--
 4 files changed, 11 insertions(+), 16 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v3 1/2] crypto: qat - replace get_current_node() with numa_node_id()
  2022-06-17  9:59 [PATCH v3 0/2] crypto: qat - Remove x86 dependency on QAT drivers Yoan Picchi
@ 2022-06-17  9:59 ` Yoan Picchi
  2022-06-17  9:59 ` [PATCH v3 2/2] crypto: qat - Removes the x86 dependency on the QAT drivers Yoan Picchi
  2022-06-24  9:15 ` [PATCH v3 0/2] crypto: qat - Remove x86 dependency on " Herbert Xu
  2 siblings, 0 replies; 4+ messages in thread
From: Yoan Picchi @ 2022-06-17  9:59 UTC (permalink / raw)
  To: Giovanni Cabiddu, Herbert Xu, David S . Miller, qat-linux,
	linux-crypto, linux-kernel
  Cc: Andre Przywara, Ard Biesheuvel

From: Andre Przywara <andre.przywara@arm.com>

Currently the QAT driver code uses a self-defined wrapper function
called get_current_node() when it wants to learn the current NUMA node.
This implementation references the topology_physical_package_id[] array,
which more or less coincidentally contains the NUMA node id, at least
on x86.

Because this is not universal, and Linux offers a direct function to
learn the NUMA node ID, replace that function with a call to
numa_node_id(), which would work everywhere.

This fixes the QAT driver operation on arm64 machines.

Reported-by: Yoan Picchi <Yoan.Picchi@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Yoan Picchi <yoan.picchi@arm.com>
---
 drivers/crypto/qat/qat_common/adf_common_drv.h | 5 -----
 drivers/crypto/qat/qat_common/qat_algs.c       | 4 ++--
 drivers/crypto/qat/qat_common/qat_asym_algs.c  | 4 ++--
 3 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/drivers/crypto/qat/qat_common/adf_common_drv.h b/drivers/crypto/qat/qat_common/adf_common_drv.h
index e8c9b77c0d66..b582107db67b 100644
--- a/drivers/crypto/qat/qat_common/adf_common_drv.h
+++ b/drivers/crypto/qat/qat_common/adf_common_drv.h
@@ -49,11 +49,6 @@ struct service_hndl {
 	struct list_head list;
 };
 
-static inline int get_current_node(void)
-{
-	return topology_physical_package_id(raw_smp_processor_id());
-}
-
 int adf_service_register(struct service_hndl *service);
 int adf_service_unregister(struct service_hndl *service);
 
diff --git a/drivers/crypto/qat/qat_common/qat_algs.c b/drivers/crypto/qat/qat_common/qat_algs.c
index f998ed58457c..c0ffaebcc8b8 100644
--- a/drivers/crypto/qat/qat_common/qat_algs.c
+++ b/drivers/crypto/qat/qat_common/qat_algs.c
@@ -618,7 +618,7 @@ static int qat_alg_aead_newkey(struct crypto_aead *tfm, const u8 *key,
 {
 	struct qat_alg_aead_ctx *ctx = crypto_aead_ctx(tfm);
 	struct qat_crypto_instance *inst = NULL;
-	int node = get_current_node();
+	int node = numa_node_id();
 	struct device *dev;
 	int ret;
 
@@ -1042,7 +1042,7 @@ static int qat_alg_skcipher_newkey(struct qat_alg_skcipher_ctx *ctx,
 {
 	struct qat_crypto_instance *inst = NULL;
 	struct device *dev;
-	int node = get_current_node();
+	int node = numa_node_id();
 	int ret;
 
 	inst = qat_crypto_get_instance_node(node);
diff --git a/drivers/crypto/qat/qat_common/qat_asym_algs.c b/drivers/crypto/qat/qat_common/qat_asym_algs.c
index b0b78445418b..3701eac10bce 100644
--- a/drivers/crypto/qat/qat_common/qat_asym_algs.c
+++ b/drivers/crypto/qat/qat_common/qat_asym_algs.c
@@ -480,7 +480,7 @@ static int qat_dh_init_tfm(struct crypto_kpp *tfm)
 {
 	struct qat_dh_ctx *ctx = kpp_tfm_ctx(tfm);
 	struct qat_crypto_instance *inst =
-			qat_crypto_get_instance_node(get_current_node());
+			qat_crypto_get_instance_node(numa_node_id());
 
 	if (!inst)
 		return -EINVAL;
@@ -1218,7 +1218,7 @@ static int qat_rsa_init_tfm(struct crypto_akcipher *tfm)
 {
 	struct qat_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
 	struct qat_crypto_instance *inst =
-			qat_crypto_get_instance_node(get_current_node());
+			qat_crypto_get_instance_node(numa_node_id());
 
 	if (!inst)
 		return -EINVAL;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v3 2/2] crypto: qat - Removes the x86 dependency on the QAT drivers
  2022-06-17  9:59 [PATCH v3 0/2] crypto: qat - Remove x86 dependency on QAT drivers Yoan Picchi
  2022-06-17  9:59 ` [PATCH v3 1/2] crypto: qat - replace get_current_node() with numa_node_id() Yoan Picchi
@ 2022-06-17  9:59 ` Yoan Picchi
  2022-06-24  9:15 ` [PATCH v3 0/2] crypto: qat - Remove x86 dependency on " Herbert Xu
  2 siblings, 0 replies; 4+ messages in thread
From: Yoan Picchi @ 2022-06-17  9:59 UTC (permalink / raw)
  To: Giovanni Cabiddu, Herbert Xu, David S . Miller, qat-linux,
	linux-crypto, linux-kernel
  Cc: Andre Przywara, Ard Biesheuvel

This dependency looks outdated. After the previous patch, we have been able
to use this driver to encrypt some data and to create working VF on arm64.
We have not tested it yet on any big endian machine, hence the new dependency

Signed-off-by: Yoan Picchi <yoan.picchi@arm.com>
---
 drivers/crypto/qat/Kconfig | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/crypto/qat/Kconfig b/drivers/crypto/qat/Kconfig
index 4b90c0f22b03..1220cc86f910 100644
--- a/drivers/crypto/qat/Kconfig
+++ b/drivers/crypto/qat/Kconfig
@@ -17,7 +17,7 @@ config CRYPTO_DEV_QAT
 
 config CRYPTO_DEV_QAT_DH895xCC
 	tristate "Support for Intel(R) DH895xCC"
-	depends on X86 && PCI
+	depends on PCI && (!CPU_BIG_ENDIAN || COMPILE_TEST)
 	select CRYPTO_DEV_QAT
 	help
 	  Support for Intel(R) DH895xcc with Intel(R) QuickAssist Technology
@@ -28,7 +28,7 @@ config CRYPTO_DEV_QAT_DH895xCC
 
 config CRYPTO_DEV_QAT_C3XXX
 	tristate "Support for Intel(R) C3XXX"
-	depends on X86 && PCI
+	depends on PCI && (!CPU_BIG_ENDIAN || COMPILE_TEST)
 	select CRYPTO_DEV_QAT
 	help
 	  Support for Intel(R) C3xxx with Intel(R) QuickAssist Technology
@@ -39,7 +39,7 @@ config CRYPTO_DEV_QAT_C3XXX
 
 config CRYPTO_DEV_QAT_C62X
 	tristate "Support for Intel(R) C62X"
-	depends on X86 && PCI
+	depends on PCI && (!CPU_BIG_ENDIAN || COMPILE_TEST)
 	select CRYPTO_DEV_QAT
 	help
 	  Support for Intel(R) C62x with Intel(R) QuickAssist Technology
@@ -50,7 +50,7 @@ config CRYPTO_DEV_QAT_C62X
 
 config CRYPTO_DEV_QAT_4XXX
 	tristate "Support for Intel(R) QAT_4XXX"
-	depends on X86 && PCI
+	depends on PCI && (!CPU_BIG_ENDIAN || COMPILE_TEST)
 	select CRYPTO_DEV_QAT
 	help
 	  Support for Intel(R) QuickAssist Technology QAT_4xxx
@@ -61,7 +61,7 @@ config CRYPTO_DEV_QAT_4XXX
 
 config CRYPTO_DEV_QAT_DH895xCCVF
 	tristate "Support for Intel(R) DH895xCC Virtual Function"
-	depends on X86 && PCI
+	depends on PCI && (!CPU_BIG_ENDIAN || COMPILE_TEST)
 	select PCI_IOV
 	select CRYPTO_DEV_QAT
 
@@ -74,7 +74,7 @@ config CRYPTO_DEV_QAT_DH895xCCVF
 
 config CRYPTO_DEV_QAT_C3XXXVF
 	tristate "Support for Intel(R) C3XXX Virtual Function"
-	depends on X86 && PCI
+	depends on PCI && (!CPU_BIG_ENDIAN || COMPILE_TEST)
 	select PCI_IOV
 	select CRYPTO_DEV_QAT
 	help
@@ -86,7 +86,7 @@ config CRYPTO_DEV_QAT_C3XXXVF
 
 config CRYPTO_DEV_QAT_C62XVF
 	tristate "Support for Intel(R) C62X Virtual Function"
-	depends on X86 && PCI
+	depends on PCI && (!CPU_BIG_ENDIAN || COMPILE_TEST)
 	select PCI_IOV
 	select CRYPTO_DEV_QAT
 	help
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 0/2] crypto: qat - Remove x86 dependency on QAT drivers
  2022-06-17  9:59 [PATCH v3 0/2] crypto: qat - Remove x86 dependency on QAT drivers Yoan Picchi
  2022-06-17  9:59 ` [PATCH v3 1/2] crypto: qat - replace get_current_node() with numa_node_id() Yoan Picchi
  2022-06-17  9:59 ` [PATCH v3 2/2] crypto: qat - Removes the x86 dependency on the QAT drivers Yoan Picchi
@ 2022-06-24  9:15 ` Herbert Xu
  2 siblings, 0 replies; 4+ messages in thread
From: Herbert Xu @ 2022-06-24  9:15 UTC (permalink / raw)
  To: Yoan Picchi
  Cc: Giovanni Cabiddu, David S . Miller, qat-linux, linux-crypto,
	linux-kernel, Andre Przywara, Ard Biesheuvel

On Fri, Jun 17, 2022 at 09:59:43AM +0000, Yoan Picchi wrote:
> The QAT acceleration card can be very helpfull for some tasks like dealing
> with IPSEC but it is currently restricted to be used only on x86 machine.
> Looking at the code we didn't see any reasons why those drivers might not
> work on other architectures. We've successfully built all of them on x86,
> arm64, arm32, mips64, powerpc64, riscv64 and sparc64.
> 
> We also have tested the driver with an Intel Corporation C62x Chipset
> QuickAssist Technology (rev 04) PCIe card on an arm64 server. After the numa
> patch, it works with the AF_ALG crypto userland interface, allowing us to
> encrypt some data with cbc for instance. We've also successfully created some
> VF, bound them to DPDK, and used the card this way, thus showing some real
> life usecases of x86 do work on arm64 too.
> 
> Changelog v1 ... v2:
> - Add COMPILE_TEST to Kconfig
> 
> Changelog v2 ... v3:
> - Add the Crypto tag to the commit header
> 
> Andre Przywara (1):
>   crypto: qat - replace get_current_node() with numa_node_id()
> 
> Yoan Picchi (1):
>   crypto: qat - Removes the x86 dependency on the QAT drivers
> 
>  drivers/crypto/qat/Kconfig                     | 14 +++++++-------
>  drivers/crypto/qat/qat_common/adf_common_drv.h |  5 -----
>  drivers/crypto/qat/qat_common/qat_algs.c       |  4 ++--
>  drivers/crypto/qat/qat_common/qat_asym_algs.c  |  4 ++--
>  4 files changed, 11 insertions(+), 16 deletions(-)

All applied.  Thanks.
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-06-24  9:15 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-17  9:59 [PATCH v3 0/2] crypto: qat - Remove x86 dependency on QAT drivers Yoan Picchi
2022-06-17  9:59 ` [PATCH v3 1/2] crypto: qat - replace get_current_node() with numa_node_id() Yoan Picchi
2022-06-17  9:59 ` [PATCH v3 2/2] crypto: qat - Removes the x86 dependency on the QAT drivers Yoan Picchi
2022-06-24  9:15 ` [PATCH v3 0/2] crypto: qat - Remove x86 dependency on " Herbert Xu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.