[1/9] cryptodev: add feature flag for non-byte aligned data

Message ID 20200504215811.15951-2-akhil.goyal@nxp.com (mailing list archive)
State Superseded, archived
Delegated to: akhil goyal
Headers
Series test/crypto: code cleanup |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-nxp-Performance success Performance Testing PASS
ci/Intel-compilation success Compilation OK
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-testing success Testing PASS

Commit Message

Akhil Goyal May 4, 2020, 9:58 p.m. UTC
  Some wireless algos like SNOW, ZUC may support input
data in bits which are not byte aligned. However, not
all PMDs can support this requirement. Hence added a
new feature flag RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA
to identify which all PMDs can support non-byte aligned
data.

Signed-off-by: Akhil Goyal <akhil.goyal@nxp.com>
---
 doc/guides/cryptodevs/features/default.ini | 1 +
 doc/guides/cryptodevs/features/kasumi.ini  | 1 +
 doc/guides/cryptodevs/features/snow3g.ini  | 1 +
 doc/guides/cryptodevs/features/zuc.ini     | 1 +
 drivers/crypto/kasumi/rte_kasumi_pmd.c     | 1 +
 drivers/crypto/snow3g/rte_snow3g_pmd.c     | 1 +
 drivers/crypto/zuc/rte_zuc_pmd.c           | 1 +
 lib/librte_cryptodev/rte_cryptodev.c       | 2 ++
 lib/librte_cryptodev/rte_cryptodev.h       | 2 ++
 9 files changed, 11 insertions(+)
  

Comments

Fiona Trahe May 5, 2020, 9:57 a.m. UTC | #1
Hi Akhil,

> -----Original Message-----
> From: Akhil Goyal <akhil.goyal@nxp.com>
> Sent: Monday, May 4, 2020 10:58 PM
> To: dev@dpdk.org
> Cc: Ruifeng.Wang@arm.com; Doherty, Declan <declan.doherty@intel.com>; asomalap@amd.com;
> anoobj@marvell.com; Zhang, Roy Fan <roy.fan.zhang@intel.com>; Trahe, Fiona
> <fiona.trahe@intel.com>; tdu@semihalf.com; rnagadheeraj@marvell.com; adwivedi@marvell.com;
> G.Singh@nxp.com; hemant.agrawal@nxp.com; jianjay.zhou@huawei.com; De Lara Guarch, Pablo
> <pablo.de.lara.guarch@intel.com>; Akhil Goyal <akhil.goyal@nxp.com>
> Subject: [PATCH 1/9] cryptodev: add feature flag for non-byte aligned data
> 
> Some wireless algos like SNOW, ZUC may support input
> data in bits which are not byte aligned. However, not
> all PMDs can support this requirement. Hence added a
> new feature flag RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA
> to identify which all PMDs can support non-byte aligned
> data.
[Fiona] I know it's a bit pedantic, but shouldn't this really be called NON_BYTE_MULTIPLE?

As a non-byte-multiple data set could have its start byte-aligned, but still not be supported.


 > Signed-off-by: Akhil Goyal <akhil.goyal@nxp.com>
> ---
>  doc/guides/cryptodevs/features/default.ini | 1 +
>  doc/guides/cryptodevs/features/kasumi.ini  | 1 +
>  doc/guides/cryptodevs/features/snow3g.ini  | 1 +
>  doc/guides/cryptodevs/features/zuc.ini     | 1 +
>  drivers/crypto/kasumi/rte_kasumi_pmd.c     | 1 +
>  drivers/crypto/snow3g/rte_snow3g_pmd.c     | 1 +
>  drivers/crypto/zuc/rte_zuc_pmd.c           | 1 +
>  lib/librte_cryptodev/rte_cryptodev.c       | 2 ++
>  lib/librte_cryptodev/rte_cryptodev.h       | 2 ++
>  9 files changed, 11 insertions(+)
> 
> diff --git a/doc/guides/cryptodevs/features/default.ini b/doc/guides/cryptodevs/features/default.ini
> index 118479db5..fb1ddca71 100644
> --- a/doc/guides/cryptodevs/features/default.ini
> +++ b/doc/guides/cryptodevs/features/default.ini
> @@ -29,6 +29,7 @@ Digest encrypted       =
>  Asymmetric sessionless =
>  CPU crypto             =
>  Symmetric sessionless  =
> +Non-Byte aligned data  =
> 
>  ;
>  ; Supported crypto algorithms of a default crypto driver.
> diff --git a/doc/guides/cryptodevs/features/kasumi.ini b/doc/guides/cryptodevs/features/kasumi.ini
> index 99ded0401..8380a5765 100644
> --- a/doc/guides/cryptodevs/features/kasumi.ini
> +++ b/doc/guides/cryptodevs/features/kasumi.ini
> @@ -7,6 +7,7 @@
>  Symmetric crypto       = Y
>  Sym operation chaining = Y
>  Symmetric sessionless  = Y
> +Non-Byte aligned data  = Y
> 
>  ;
>  ; Supported crypto algorithms of the 'kasumi' crypto driver.
> diff --git a/doc/guides/cryptodevs/features/snow3g.ini b/doc/guides/cryptodevs/features/snow3g.ini
> index 8b971cc1d..b2caefe3a 100644
> --- a/doc/guides/cryptodevs/features/snow3g.ini
> +++ b/doc/guides/cryptodevs/features/snow3g.ini
> @@ -7,6 +7,7 @@
>  Symmetric crypto       = Y
>  Sym operation chaining = Y
>  Symmetric sessionless  = Y
> +Non-Byte aligned data  = Y
> 
>  ;
>  ; Supported crypto algorithms of the 'snow3g' crypto driver.
> diff --git a/doc/guides/cryptodevs/features/zuc.ini b/doc/guides/cryptodevs/features/zuc.ini
> index f7bff4291..21d074f9b 100644
> --- a/doc/guides/cryptodevs/features/zuc.ini
> +++ b/doc/guides/cryptodevs/features/zuc.ini
> @@ -7,6 +7,7 @@
>  Symmetric crypto       = Y
>  Sym operation chaining = Y
>  Symmetric sessionless  = Y
> +Non-Byte aligned data  = Y
> 
>  ;
>  ; Supported crypto algorithms of the 'zuc' crypto driver.
> diff --git a/drivers/crypto/kasumi/rte_kasumi_pmd.c b/drivers/crypto/kasumi/rte_kasumi_pmd.c
> index a20921249..73077e3d9 100644
> --- a/drivers/crypto/kasumi/rte_kasumi_pmd.c
> +++ b/drivers/crypto/kasumi/rte_kasumi_pmd.c
> @@ -551,6 +551,7 @@ cryptodev_kasumi_create(const char *name,
> 
>  	dev->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO |
>  			RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING |
> +			RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA |
>  			RTE_CRYPTODEV_FF_SYM_SESSIONLESS;
> 
>  	mgr = alloc_mb_mgr(0);
> diff --git a/drivers/crypto/snow3g/rte_snow3g_pmd.c b/drivers/crypto/snow3g/rte_snow3g_pmd.c
> index 8e82dde55..c939064d5 100644
> --- a/drivers/crypto/snow3g/rte_snow3g_pmd.c
> +++ b/drivers/crypto/snow3g/rte_snow3g_pmd.c
> @@ -563,6 +563,7 @@ cryptodev_snow3g_create(const char *name,
> 
>  	dev->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO |
>  			RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING |
> +			RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA |
>  			RTE_CRYPTODEV_FF_SYM_SESSIONLESS;
> 
>  	mgr = alloc_mb_mgr(0);
> diff --git a/drivers/crypto/zuc/rte_zuc_pmd.c b/drivers/crypto/zuc/rte_zuc_pmd.c
> index 17926b471..459881873 100644
> --- a/drivers/crypto/zuc/rte_zuc_pmd.c
> +++ b/drivers/crypto/zuc/rte_zuc_pmd.c
> @@ -470,6 +470,7 @@ cryptodev_zuc_create(const char *name,
> 
>  	dev->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO |
>  			RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING |
> +			RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA |
>  			RTE_CRYPTODEV_FF_SYM_SESSIONLESS;
> 
>  	mb_mgr = alloc_mb_mgr(0);
> diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
> index 7693eb69c..f30e3cbff 100644
> --- a/lib/librte_cryptodev/rte_cryptodev.c
> +++ b/lib/librte_cryptodev/rte_cryptodev.c
> @@ -500,6 +500,8 @@ rte_cryptodev_get_feature_name(uint64_t flag)
>  		return "ASYM_SESSIONLESS";
>  	case RTE_CRYPTODEV_FF_SYM_SESSIONLESS:
>  		return "SYM_SESSIONLESS";
> +	case RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA:
> +		return "NON_BYTE_ALIGNED_DATA";
>  	default:
>  		return NULL;
>  	}
> diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h
> index 3dbb5ceb2..257840ea4 100644
> --- a/lib/librte_cryptodev/rte_cryptodev.h
> +++ b/lib/librte_cryptodev/rte_cryptodev.h
> @@ -456,6 +456,8 @@ rte_cryptodev_asym_get_xform_enum(enum rte_crypto_asym_xform_type
> *xform_enum,
>  /**< Support symmetric cpu-crypto processing */
>  #define RTE_CRYPTODEV_FF_SYM_SESSIONLESS		(1ULL << 22)
>  /**< Support symmetric session-less operations */
> +#define RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA		(1ULL << 23)
> +/**< Support operations on data which is not byte aligned */
> 
> 
>  /**
> --
> 2.17.1
  
Akhil Goyal May 5, 2020, 10:12 a.m. UTC | #2
Hi Fiona,
> 
> Hi Akhil,
> 
> >
> > Some wireless algos like SNOW, ZUC may support input
> > data in bits which are not byte aligned. However, not
> > all PMDs can support this requirement. Hence added a
> > new feature flag RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA
> > to identify which all PMDs can support non-byte aligned
> > data.
> [Fiona] I know it's a bit pedantic, but shouldn't this really be called
> NON_BYTE_MULTIPLE?
> 
> As a non-byte-multiple data set could have its start byte-aligned, but still not be
> supported.
> 
The intention is to have both start as well as end to be byte aligned.
Is there some PMD which can support unaligned byte data but still multiples of byte?
BTW I did not see any example in the current test cases which support unaligned bytes data.

Regards,
Akhil
  
Fiona Trahe May 5, 2020, 12:04 p.m. UTC | #3
Hi Akhil,

> -----Original Message-----
> From: Akhil Goyal <akhil.goyal@nxp.com>
> Sent: Tuesday, May 5, 2020 11:13 AM
> To: Trahe, Fiona <fiona.trahe@intel.com>; dev@dpdk.org
> Cc: Ruifeng.Wang@arm.com; Doherty, Declan <declan.doherty@intel.com>; asomalap@amd.com;
> anoobj@marvell.com; Zhang, Roy Fan <roy.fan.zhang@intel.com>; tdu@semihalf.com;
> rnagadheeraj@marvell.com; adwivedi@marvell.com; Gagandeep Singh <G.Singh@nxp.com>; Hemant
> Agrawal <hemant.agrawal@nxp.com>; jianjay.zhou@huawei.com; De Lara Guarch, Pablo
> <pablo.de.lara.guarch@intel.com>
> Subject: RE: [PATCH 1/9] cryptodev: add feature flag for non-byte aligned data
> 
> Hi Fiona,
> >
> > Hi Akhil,
> >
> > >
> > > Some wireless algos like SNOW, ZUC may support input
> > > data in bits which are not byte aligned. However, not
> > > all PMDs can support this requirement. Hence added a
> > > new feature flag RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA
> > > to identify which all PMDs can support non-byte aligned
> > > data.
> > [Fiona] I know it's a bit pedantic, but shouldn't this really be called
> > NON_BYTE_MULTIPLE?
> >
> > As a non-byte-multiple data set could have its start byte-aligned, but still not be
> > supported.
> >
> The intention is to have both start as well as end to be byte aligned.
> Is there some PMD which can support unaligned byte data but still multiples of byte?
[Fiona] no, true - anything which can support non-byte-aligned can presumably support non-byte-multiples.
So I withdraw my suggestion. In that case:
Acked-by: Fiona Trahe <fiona.trahe@intel.com>
 
> BTW I did not see any example in the current test cases which support unaligned bytes data.
> 
> Regards,
> Akhil
  

Patch

diff --git a/doc/guides/cryptodevs/features/default.ini b/doc/guides/cryptodevs/features/default.ini
index 118479db5..fb1ddca71 100644
--- a/doc/guides/cryptodevs/features/default.ini
+++ b/doc/guides/cryptodevs/features/default.ini
@@ -29,6 +29,7 @@  Digest encrypted       =
 Asymmetric sessionless =
 CPU crypto             =
 Symmetric sessionless  =
+Non-Byte aligned data  =
 
 ;
 ; Supported crypto algorithms of a default crypto driver.
diff --git a/doc/guides/cryptodevs/features/kasumi.ini b/doc/guides/cryptodevs/features/kasumi.ini
index 99ded0401..8380a5765 100644
--- a/doc/guides/cryptodevs/features/kasumi.ini
+++ b/doc/guides/cryptodevs/features/kasumi.ini
@@ -7,6 +7,7 @@ 
 Symmetric crypto       = Y
 Sym operation chaining = Y
 Symmetric sessionless  = Y
+Non-Byte aligned data  = Y
 
 ;
 ; Supported crypto algorithms of the 'kasumi' crypto driver.
diff --git a/doc/guides/cryptodevs/features/snow3g.ini b/doc/guides/cryptodevs/features/snow3g.ini
index 8b971cc1d..b2caefe3a 100644
--- a/doc/guides/cryptodevs/features/snow3g.ini
+++ b/doc/guides/cryptodevs/features/snow3g.ini
@@ -7,6 +7,7 @@ 
 Symmetric crypto       = Y
 Sym operation chaining = Y
 Symmetric sessionless  = Y
+Non-Byte aligned data  = Y
 
 ;
 ; Supported crypto algorithms of the 'snow3g' crypto driver.
diff --git a/doc/guides/cryptodevs/features/zuc.ini b/doc/guides/cryptodevs/features/zuc.ini
index f7bff4291..21d074f9b 100644
--- a/doc/guides/cryptodevs/features/zuc.ini
+++ b/doc/guides/cryptodevs/features/zuc.ini
@@ -7,6 +7,7 @@ 
 Symmetric crypto       = Y
 Sym operation chaining = Y
 Symmetric sessionless  = Y
+Non-Byte aligned data  = Y
 
 ;
 ; Supported crypto algorithms of the 'zuc' crypto driver.
diff --git a/drivers/crypto/kasumi/rte_kasumi_pmd.c b/drivers/crypto/kasumi/rte_kasumi_pmd.c
index a20921249..73077e3d9 100644
--- a/drivers/crypto/kasumi/rte_kasumi_pmd.c
+++ b/drivers/crypto/kasumi/rte_kasumi_pmd.c
@@ -551,6 +551,7 @@  cryptodev_kasumi_create(const char *name,
 
 	dev->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO |
 			RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING |
+			RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA |
 			RTE_CRYPTODEV_FF_SYM_SESSIONLESS;
 
 	mgr = alloc_mb_mgr(0);
diff --git a/drivers/crypto/snow3g/rte_snow3g_pmd.c b/drivers/crypto/snow3g/rte_snow3g_pmd.c
index 8e82dde55..c939064d5 100644
--- a/drivers/crypto/snow3g/rte_snow3g_pmd.c
+++ b/drivers/crypto/snow3g/rte_snow3g_pmd.c
@@ -563,6 +563,7 @@  cryptodev_snow3g_create(const char *name,
 
 	dev->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO |
 			RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING |
+			RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA |
 			RTE_CRYPTODEV_FF_SYM_SESSIONLESS;
 
 	mgr = alloc_mb_mgr(0);
diff --git a/drivers/crypto/zuc/rte_zuc_pmd.c b/drivers/crypto/zuc/rte_zuc_pmd.c
index 17926b471..459881873 100644
--- a/drivers/crypto/zuc/rte_zuc_pmd.c
+++ b/drivers/crypto/zuc/rte_zuc_pmd.c
@@ -470,6 +470,7 @@  cryptodev_zuc_create(const char *name,
 
 	dev->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO |
 			RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING |
+			RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA |
 			RTE_CRYPTODEV_FF_SYM_SESSIONLESS;
 
 	mb_mgr = alloc_mb_mgr(0);
diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
index 7693eb69c..f30e3cbff 100644
--- a/lib/librte_cryptodev/rte_cryptodev.c
+++ b/lib/librte_cryptodev/rte_cryptodev.c
@@ -500,6 +500,8 @@  rte_cryptodev_get_feature_name(uint64_t flag)
 		return "ASYM_SESSIONLESS";
 	case RTE_CRYPTODEV_FF_SYM_SESSIONLESS:
 		return "SYM_SESSIONLESS";
+	case RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA:
+		return "NON_BYTE_ALIGNED_DATA";
 	default:
 		return NULL;
 	}
diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h
index 3dbb5ceb2..257840ea4 100644
--- a/lib/librte_cryptodev/rte_cryptodev.h
+++ b/lib/librte_cryptodev/rte_cryptodev.h
@@ -456,6 +456,8 @@  rte_cryptodev_asym_get_xform_enum(enum rte_crypto_asym_xform_type *xform_enum,
 /**< Support symmetric cpu-crypto processing */
 #define RTE_CRYPTODEV_FF_SYM_SESSIONLESS		(1ULL << 22)
 /**< Support symmetric session-less operations */
+#define RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA		(1ULL << 23)
+/**< Support operations on data which is not byte aligned */
 
 
 /**