Re: [V3 PATCH 15/16] crypto/nx: Get NX capabilities for GZIP coprocessor type

2021-05-10 Thread Haren Myneni
On Mon, 2021-05-10 at 16:38 +1000, Nicholas Piggin wrote:
> Excerpts from Haren Myneni's message of April 18, 2021 7:12 am:
> > phyp provides NX capabilities which gives recommended minimum
> > compression / decompression length and maximum request buffer size
> > in bytes.
> > 
> > Changes to get NX overall capabilities which points to the specific
> > features phyp supports. Then retrieve NXGZIP specific capabilities.
> > 
> > Signed-off-by: Haren Myneni 
> > ---
> >  drivers/crypto/nx/nx-common-pseries.c | 83
> > +++
> >  1 file changed, 83 insertions(+)
> > 
> > diff --git a/drivers/crypto/nx/nx-common-pseries.c
> > b/drivers/crypto/nx/nx-common-pseries.c
> > index 9a40fca8a9e6..49224870d05e 100644
> > --- a/drivers/crypto/nx/nx-common-pseries.c
> > +++ b/drivers/crypto/nx/nx-common-pseries.c
> > @@ -9,6 +9,7 @@
> >   */
> >  
> >  #include 
> > +#include 
> >  #include 
> >  
> >  #include "nx-842.h"
> > @@ -20,6 +21,24 @@ MODULE_DESCRIPTION("842 H/W Compression driver
> > for IBM Power processors");
> >  MODULE_ALIAS_CRYPTO("842");
> >  MODULE_ALIAS_CRYPTO("842-nx");
> >  
> > +struct nx_ct_capabs_be {
> 
> What does "ct" mean? I've seen it in a few other places too.

ct means coprocessor type such as 842 and GZIP. phyp provides only GZIP
capabilities right now. But this struct may be extended to other types
in future.

> 
> > +   __be64  descriptor;
> > +   __be64  req_max_processed_len;  /* Max bytes in one GZIP
> > request */
> > +   __be64  min_compress_len;   /* Min compression size in
> > bytes */
> > +   __be64  min_decompress_len; /* Min decompression size
> > in bytes */
> > +} __packed __aligned(0x1000);
> > +
> > +struct nx_ct_capabs {
> > +   charname[VAS_DESCR_LEN + 1];
> > +   u64 descriptor;
> > +   u64 req_max_processed_len;  /* Max bytes in one GZIP request */
> > +   u64 min_compress_len;   /* Min compression in bytes */
> > +   u64 min_decompress_len; /* Min decompression in bytes */
> > +};
> > +
> > +u64 capab_feat = 0;
> 
> Why is this here and not a local variable?

capab_feat is used to add / delete sysfs entries.

> 
> > +struct nx_ct_capabs nx_ct_capab;
> 
> It's okay and generally better to use the same name as the struct
> name
> in this situation, i.e.,
> 
> "struct nx_ct_capabs nx_ct_capabs"
> 
> (modulo static / caps / etc)

Sure, will change.

> 
> Thanks,
> Nick



Re: [V3 PATCH 15/16] crypto/nx: Get NX capabilities for GZIP coprocessor type

2021-05-10 Thread Nicholas Piggin
Excerpts from Haren Myneni's message of April 18, 2021 7:12 am:
> 
> phyp provides NX capabilities which gives recommended minimum
> compression / decompression length and maximum request buffer size
> in bytes.
> 
> Changes to get NX overall capabilities which points to the specific
> features phyp supports. Then retrieve NXGZIP specific capabilities.
> 
> Signed-off-by: Haren Myneni 
> ---
>  drivers/crypto/nx/nx-common-pseries.c | 83 +++
>  1 file changed, 83 insertions(+)
> 
> diff --git a/drivers/crypto/nx/nx-common-pseries.c 
> b/drivers/crypto/nx/nx-common-pseries.c
> index 9a40fca8a9e6..49224870d05e 100644
> --- a/drivers/crypto/nx/nx-common-pseries.c
> +++ b/drivers/crypto/nx/nx-common-pseries.c
> @@ -9,6 +9,7 @@
>   */
>  
>  #include 
> +#include 
>  #include 
>  
>  #include "nx-842.h"
> @@ -20,6 +21,24 @@ MODULE_DESCRIPTION("842 H/W Compression driver for IBM 
> Power processors");
>  MODULE_ALIAS_CRYPTO("842");
>  MODULE_ALIAS_CRYPTO("842-nx");
>  
> +struct nx_ct_capabs_be {

What does "ct" mean? I've seen it in a few other places too.

> + __be64  descriptor;
> + __be64  req_max_processed_len;  /* Max bytes in one GZIP request */
> + __be64  min_compress_len;   /* Min compression size in bytes */
> + __be64  min_decompress_len; /* Min decompression size in bytes */
> +} __packed __aligned(0x1000);
> +
> +struct nx_ct_capabs {
> + charname[VAS_DESCR_LEN + 1];
> + u64 descriptor;
> + u64 req_max_processed_len;  /* Max bytes in one GZIP request */
> + u64 min_compress_len;   /* Min compression in bytes */
> + u64 min_decompress_len; /* Min decompression in bytes */
> +};
> +
> +u64 capab_feat = 0;

Why is this here and not a local variable?

> +struct nx_ct_capabs nx_ct_capab;

It's okay and generally better to use the same name as the struct name
in this situation, i.e.,

"struct nx_ct_capabs nx_ct_capabs"

(modulo static / caps / etc)

Thanks,
Nick


Re: [V3 PATCH 15/16] crypto/nx: Get NX capabilities for GZIP coprocessor type

2021-04-22 Thread Herbert Xu
On Sat, Apr 17, 2021 at 02:12:51PM -0700, Haren Myneni wrote:
> 
> phyp provides NX capabilities which gives recommended minimum
> compression / decompression length and maximum request buffer size
> in bytes.
> 
> Changes to get NX overall capabilities which points to the specific
> features phyp supports. Then retrieve NXGZIP specific capabilities.
> 
> Signed-off-by: Haren Myneni 
> ---
>  drivers/crypto/nx/nx-common-pseries.c | 83 +++
>  1 file changed, 83 insertions(+)

Acked-by: Herbert Xu 
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt


[V3 PATCH 15/16] crypto/nx: Get NX capabilities for GZIP coprocessor type

2021-04-17 Thread Haren Myneni


phyp provides NX capabilities which gives recommended minimum
compression / decompression length and maximum request buffer size
in bytes.

Changes to get NX overall capabilities which points to the specific
features phyp supports. Then retrieve NXGZIP specific capabilities.

Signed-off-by: Haren Myneni 
---
 drivers/crypto/nx/nx-common-pseries.c | 83 +++
 1 file changed, 83 insertions(+)

diff --git a/drivers/crypto/nx/nx-common-pseries.c 
b/drivers/crypto/nx/nx-common-pseries.c
index 9a40fca8a9e6..49224870d05e 100644
--- a/drivers/crypto/nx/nx-common-pseries.c
+++ b/drivers/crypto/nx/nx-common-pseries.c
@@ -9,6 +9,7 @@
  */
 
 #include 
+#include 
 #include 
 
 #include "nx-842.h"
@@ -20,6 +21,24 @@ MODULE_DESCRIPTION("842 H/W Compression driver for IBM Power 
processors");
 MODULE_ALIAS_CRYPTO("842");
 MODULE_ALIAS_CRYPTO("842-nx");
 
+struct nx_ct_capabs_be {
+   __be64  descriptor;
+   __be64  req_max_processed_len;  /* Max bytes in one GZIP request */
+   __be64  min_compress_len;   /* Min compression size in bytes */
+   __be64  min_decompress_len; /* Min decompression size in bytes */
+} __packed __aligned(0x1000);
+
+struct nx_ct_capabs {
+   charname[VAS_DESCR_LEN + 1];
+   u64 descriptor;
+   u64 req_max_processed_len;  /* Max bytes in one GZIP request */
+   u64 min_compress_len;   /* Min compression in bytes */
+   u64 min_decompress_len; /* Min decompression in bytes */
+};
+
+u64 capab_feat = 0;
+struct nx_ct_capabs nx_ct_capab;
+
 static struct nx842_constraints nx842_pseries_constraints = {
.alignment =DDE_BUFFER_ALIGN,
.multiple = DDE_BUFFER_LAST_MULT,
@@ -1066,6 +1085,66 @@ static void nx842_remove(struct vio_dev *viodev)
kfree(old_devdata);
 }
 
+/*
+ * Get NX capabilities from pHyp.
+ * Only NXGZIP capabilities are available right now and these values
+ * are available through sysfs.
+ */
+static void __init nxct_get_capabilities(void)
+{
+   struct vas_all_capabs_be *capabs_be;
+   struct nx_ct_capabs_be *nxc_be;
+   int rc;
+
+   capabs_be = kmalloc(sizeof(*capabs_be), GFP_KERNEL);
+   if (!capabs_be)
+   return;
+   /*
+* Get NX overall capabilities with feature type=0
+*/
+   rc = plpar_vas_query_capabilities(H_QUERY_NX_CAPABILITIES, 0,
+ (u64)virt_to_phys(capabs_be));
+   if (rc)
+   goto out;
+
+   capab_feat = be64_to_cpu(capabs_be->feat_type);
+   /*
+* NX-GZIP feature available
+*/
+   if (capab_feat & VAS_NX_GZIP_FEAT_BIT) {
+   nxc_be = kmalloc(sizeof(*nxc_be), GFP_KERNEL);
+   if (!nxc_be)
+   goto out;
+   /*
+* Get capabilities for NX-GZIP feature
+*/
+   rc = plpar_vas_query_capabilities(H_QUERY_NX_CAPABILITIES,
+ VAS_NX_GZIP_FEAT,
+ (u64)virt_to_phys(nxc_be));
+   } else {
+   pr_err("NX-GZIP feature is not available\n");
+   rc = -EINVAL;
+   }
+
+   if (!rc) {
+   snprintf(nx_ct_capab.name, VAS_DESCR_LEN + 1, "%.8s",
+(char *)_be->descriptor);
+   nx_ct_capab.descriptor = be64_to_cpu(nxc_be->descriptor);
+   nx_ct_capab.req_max_processed_len =
+   be64_to_cpu(nxc_be->req_max_processed_len);
+   nx_ct_capab.min_compress_len =
+   be64_to_cpu(nxc_be->min_compress_len);
+   nx_ct_capab.min_decompress_len =
+   be64_to_cpu(nxc_be->min_decompress_len);
+   } else {
+   capab_feat = 0;
+   }
+
+   kfree(nxc_be);
+out:
+   kfree(capabs_be);
+}
+
 static const struct vio_device_id nx842_vio_driver_ids[] = {
{"ibm,compression-v1", "ibm,compression"},
{"", ""},
@@ -1093,6 +1172,10 @@ static int __init nx842_pseries_init(void)
return -ENOMEM;
 
RCU_INIT_POINTER(devdata, new_devdata);
+   /*
+* Get NX capabilities from pHyp which is used for NX-GZIP.
+*/
+   nxct_get_capabilities();
 
ret = vio_register_driver(_vio_driver);
if (ret) {
-- 
2.18.2




[V2 PATCH 15/16] crypto/nx: Get NX capabilities for GZIP coprocessor type

2021-04-13 Thread Haren Myneni


phyp provides NX capabilities which gives recommended minimum
compression / decompression length and maximum request buffer size
in bytes.

Changes to get NX overall capabilities which points to the specific
features phyp supports. Then retrieve NXGZIP specific capabilities.

Signed-off-by: Haren Myneni 
---
 drivers/crypto/nx/nx-common-pseries.c | 83 +++
 1 file changed, 83 insertions(+)

diff --git a/drivers/crypto/nx/nx-common-pseries.c 
b/drivers/crypto/nx/nx-common-pseries.c
index 9a40fca8a9e6..49224870d05e 100644
--- a/drivers/crypto/nx/nx-common-pseries.c
+++ b/drivers/crypto/nx/nx-common-pseries.c
@@ -9,6 +9,7 @@
  */
 
 #include 
+#include 
 #include 
 
 #include "nx-842.h"
@@ -20,6 +21,24 @@ MODULE_DESCRIPTION("842 H/W Compression driver for IBM Power 
processors");
 MODULE_ALIAS_CRYPTO("842");
 MODULE_ALIAS_CRYPTO("842-nx");
 
+struct nx_ct_capabs_be {
+   __be64  descriptor;
+   __be64  req_max_processed_len;  /* Max bytes in one GZIP request */
+   __be64  min_compress_len;   /* Min compression size in bytes */
+   __be64  min_decompress_len; /* Min decompression size in bytes */
+} __packed __aligned(0x1000);
+
+struct nx_ct_capabs {
+   charname[VAS_DESCR_LEN + 1];
+   u64 descriptor;
+   u64 req_max_processed_len;  /* Max bytes in one GZIP request */
+   u64 min_compress_len;   /* Min compression in bytes */
+   u64 min_decompress_len; /* Min decompression in bytes */
+};
+
+u64 capab_feat = 0;
+struct nx_ct_capabs nx_ct_capab;
+
 static struct nx842_constraints nx842_pseries_constraints = {
.alignment =DDE_BUFFER_ALIGN,
.multiple = DDE_BUFFER_LAST_MULT,
@@ -1066,6 +1085,66 @@ static void nx842_remove(struct vio_dev *viodev)
kfree(old_devdata);
 }
 
+/*
+ * Get NX capabilities from pHyp.
+ * Only NXGZIP capabilities are available right now and these values
+ * are available through sysfs.
+ */
+static void __init nxct_get_capabilities(void)
+{
+   struct vas_all_capabs_be *capabs_be;
+   struct nx_ct_capabs_be *nxc_be;
+   int rc;
+
+   capabs_be = kmalloc(sizeof(*capabs_be), GFP_KERNEL);
+   if (!capabs_be)
+   return;
+   /*
+* Get NX overall capabilities with feature type=0
+*/
+   rc = plpar_vas_query_capabilities(H_QUERY_NX_CAPABILITIES, 0,
+ (u64)virt_to_phys(capabs_be));
+   if (rc)
+   goto out;
+
+   capab_feat = be64_to_cpu(capabs_be->feat_type);
+   /*
+* NX-GZIP feature available
+*/
+   if (capab_feat & VAS_NX_GZIP_FEAT_BIT) {
+   nxc_be = kmalloc(sizeof(*nxc_be), GFP_KERNEL);
+   if (!nxc_be)
+   goto out;
+   /*
+* Get capabilities for NX-GZIP feature
+*/
+   rc = plpar_vas_query_capabilities(H_QUERY_NX_CAPABILITIES,
+ VAS_NX_GZIP_FEAT,
+ (u64)virt_to_phys(nxc_be));
+   } else {
+   pr_err("NX-GZIP feature is not available\n");
+   rc = -EINVAL;
+   }
+
+   if (!rc) {
+   snprintf(nx_ct_capab.name, VAS_DESCR_LEN + 1, "%.8s",
+(char *)_be->descriptor);
+   nx_ct_capab.descriptor = be64_to_cpu(nxc_be->descriptor);
+   nx_ct_capab.req_max_processed_len =
+   be64_to_cpu(nxc_be->req_max_processed_len);
+   nx_ct_capab.min_compress_len =
+   be64_to_cpu(nxc_be->min_compress_len);
+   nx_ct_capab.min_decompress_len =
+   be64_to_cpu(nxc_be->min_decompress_len);
+   } else {
+   capab_feat = 0;
+   }
+
+   kfree(nxc_be);
+out:
+   kfree(capabs_be);
+}
+
 static const struct vio_device_id nx842_vio_driver_ids[] = {
{"ibm,compression-v1", "ibm,compression"},
{"", ""},
@@ -1093,6 +1172,10 @@ static int __init nx842_pseries_init(void)
return -ENOMEM;
 
RCU_INIT_POINTER(devdata, new_devdata);
+   /*
+* Get NX capabilities from pHyp which is used for NX-GZIP.
+*/
+   nxct_get_capabilities();
 
ret = vio_register_driver(_vio_driver);
if (ret) {
-- 
2.18.2




Re: [PATCH 15/16] crypto/nx: Get NX capabilities for GZIP coprocessor type

2021-04-11 Thread kernel test robot
Hi Haren,

I love your patch! Yet something to improve:

[auto build test ERROR on powerpc/next]
[also build test ERROR on cryptodev/master crypto/master v5.12-rc6 
next-20210409]
[cannot apply to scottwood/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:
https://github.com/0day-ci/linux/commits/Haren-Myneni/Enable-VAS-and-NX-GZIP-support-on-powerVM/20210411-084631
base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: powerpc-allyesconfig (attached as .config)
compiler: powerpc64-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
chmod +x ~/bin/make.cross
# 
https://github.com/0day-ci/linux/commit/3dc0fb58cbf2543e4f3cb016ef3ed475a975f3c9
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review 
Haren-Myneni/Enable-VAS-and-NX-GZIP-support-on-powerVM/20210411-084631
git checkout 3dc0fb58cbf2543e4f3cb016ef3ed475a975f3c9
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross 
ARCH=powerpc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot 

All errors (new ones prefixed by >>):

   powerpc64-linux-ld: drivers/crypto/nx/nx-common-pseries.o: in function 
`.nx842_pseries_init':
>> nx-common-pseries.c:(.init.text+0x184): undefined reference to 
>> `.plpar_vas_query_capabilities'
>> powerpc64-linux-ld: nx-common-pseries.c:(.init.text+0x28c): undefined 
>> reference to `.plpar_vas_query_capabilities'
>> powerpc64-linux-ld: nx-common-pseries.c:(.init.text+0x488): undefined 
>> reference to `.vas_register_api_pseries'

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org


.config.gz
Description: application/gzip


[PATCH 15/16] crypto/nx: Get NX capabilities for GZIP coprocessor type

2021-04-10 Thread Haren Myneni


phyp provides NX capabilities which gives recommended minimum
compression / decompression length and maximum request buffer size
in bytes.

Changes to get NX overall capabilities which points to the specific
features phyp supports. Then retrieve NXGZIP specific capabilities.

Signed-off-by: Haren Myneni 
---
 drivers/crypto/nx/nx-common-pseries.c | 83 +++
 1 file changed, 83 insertions(+)

diff --git a/drivers/crypto/nx/nx-common-pseries.c 
b/drivers/crypto/nx/nx-common-pseries.c
index 9a40fca8a9e6..49224870d05e 100644
--- a/drivers/crypto/nx/nx-common-pseries.c
+++ b/drivers/crypto/nx/nx-common-pseries.c
@@ -9,6 +9,7 @@
  */
 
 #include 
+#include 
 #include 
 
 #include "nx-842.h"
@@ -20,6 +21,24 @@ MODULE_DESCRIPTION("842 H/W Compression driver for IBM Power 
processors");
 MODULE_ALIAS_CRYPTO("842");
 MODULE_ALIAS_CRYPTO("842-nx");
 
+struct nx_ct_capabs_be {
+   __be64  descriptor;
+   __be64  req_max_processed_len;  /* Max bytes in one GZIP request */
+   __be64  min_compress_len;   /* Min compression size in bytes */
+   __be64  min_decompress_len; /* Min decompression size in bytes */
+} __packed __aligned(0x1000);
+
+struct nx_ct_capabs {
+   charname[VAS_DESCR_LEN + 1];
+   u64 descriptor;
+   u64 req_max_processed_len;  /* Max bytes in one GZIP request */
+   u64 min_compress_len;   /* Min compression in bytes */
+   u64 min_decompress_len; /* Min decompression in bytes */
+};
+
+u64 capab_feat = 0;
+struct nx_ct_capabs nx_ct_capab;
+
 static struct nx842_constraints nx842_pseries_constraints = {
.alignment =DDE_BUFFER_ALIGN,
.multiple = DDE_BUFFER_LAST_MULT,
@@ -1066,6 +1085,66 @@ static void nx842_remove(struct vio_dev *viodev)
kfree(old_devdata);
 }
 
+/*
+ * Get NX capabilities from pHyp.
+ * Only NXGZIP capabilities are available right now and these values
+ * are available through sysfs.
+ */
+static void __init nxct_get_capabilities(void)
+{
+   struct vas_all_capabs_be *capabs_be;
+   struct nx_ct_capabs_be *nxc_be;
+   int rc;
+
+   capabs_be = kmalloc(sizeof(*capabs_be), GFP_KERNEL);
+   if (!capabs_be)
+   return;
+   /*
+* Get NX overall capabilities with feature type=0
+*/
+   rc = plpar_vas_query_capabilities(H_QUERY_NX_CAPABILITIES, 0,
+ (u64)virt_to_phys(capabs_be));
+   if (rc)
+   goto out;
+
+   capab_feat = be64_to_cpu(capabs_be->feat_type);
+   /*
+* NX-GZIP feature available
+*/
+   if (capab_feat & VAS_NX_GZIP_FEAT_BIT) {
+   nxc_be = kmalloc(sizeof(*nxc_be), GFP_KERNEL);
+   if (!nxc_be)
+   goto out;
+   /*
+* Get capabilities for NX-GZIP feature
+*/
+   rc = plpar_vas_query_capabilities(H_QUERY_NX_CAPABILITIES,
+ VAS_NX_GZIP_FEAT,
+ (u64)virt_to_phys(nxc_be));
+   } else {
+   pr_err("NX-GZIP feature is not available\n");
+   rc = -EINVAL;
+   }
+
+   if (!rc) {
+   snprintf(nx_ct_capab.name, VAS_DESCR_LEN + 1, "%.8s",
+(char *)_be->descriptor);
+   nx_ct_capab.descriptor = be64_to_cpu(nxc_be->descriptor);
+   nx_ct_capab.req_max_processed_len =
+   be64_to_cpu(nxc_be->req_max_processed_len);
+   nx_ct_capab.min_compress_len =
+   be64_to_cpu(nxc_be->min_compress_len);
+   nx_ct_capab.min_decompress_len =
+   be64_to_cpu(nxc_be->min_decompress_len);
+   } else {
+   capab_feat = 0;
+   }
+
+   kfree(nxc_be);
+out:
+   kfree(capabs_be);
+}
+
 static const struct vio_device_id nx842_vio_driver_ids[] = {
{"ibm,compression-v1", "ibm,compression"},
{"", ""},
@@ -1093,6 +1172,10 @@ static int __init nx842_pseries_init(void)
return -ENOMEM;
 
RCU_INIT_POINTER(devdata, new_devdata);
+   /*
+* Get NX capabilities from pHyp which is used for NX-GZIP.
+*/
+   nxct_get_capabilities();
 
ret = vio_register_driver(_vio_driver);
if (ret) {
-- 
2.18.2