Re: [PATCH v3 6/7] crypto: sun4i-ss: enabled stats via debugfs

2020-11-26 Thread Herbert Xu
On Mon, Nov 16, 2020 at 01:53:44PM +, Corentin Labbe wrote:
>
> +#ifdef CONFIG_CRYPTO_DEV_SUN4I_SS_DEBUG
> + /* Ignore error of debugfs */
> + ss->dbgfs_dir = debugfs_create_dir("sun4i-ss", NULL);
> + ss->dbgfs_stats = debugfs_create_file("stats", 0444, ss->dbgfs_dir, ss,
> +   _ss_debugfs_fops);
> +#endif

Since you didn't use ifdefs in the struct, there is no need to
use ifdefs here either.

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


[PATCH v3 6/7] crypto: sun4i-ss: enabled stats via debugfs

2020-11-16 Thread Corentin Labbe
This patch enable to access usage stats for each algorithm.

Signed-off-by: Corentin Labbe 
---
 drivers/crypto/allwinner/Kconfig  |  9 +++
 .../allwinner/sun4i-ss/sun4i-ss-cipher.c  | 20 +++
 .../crypto/allwinner/sun4i-ss/sun4i-ss-core.c | 56 +++
 .../crypto/allwinner/sun4i-ss/sun4i-ss-hash.c |  6 ++
 .../crypto/allwinner/sun4i-ss/sun4i-ss-prng.c |  5 ++
 drivers/crypto/allwinner/sun4i-ss/sun4i-ss.h  |  6 ++
 6 files changed, 102 insertions(+)

diff --git a/drivers/crypto/allwinner/Kconfig b/drivers/crypto/allwinner/Kconfig
index 0e72543ad1f1..e9b7f7e3d307 100644
--- a/drivers/crypto/allwinner/Kconfig
+++ b/drivers/crypto/allwinner/Kconfig
@@ -51,6 +51,15 @@ config CRYPTO_DEV_SUN4I_SS_PRNG
  Select this option if you want to provide kernel-side support for
  the Pseudo-Random Number Generator found in the Security System.
 
+config CRYPTO_DEV_SUN4I_SS_DEBUG
+   bool "Enable sun4i-ss stats"
+   depends on CRYPTO_DEV_SUN4I_SS
+   depends on DEBUG_FS
+   help
+ Say y to enable sun4i-ss debug stats.
+ This will create /sys/kernel/debug/sun4i-ss/stats for displaying
+ the number of requests per algorithm.
+
 config CRYPTO_DEV_SUN8I_CE
tristate "Support for Allwinner Crypto Engine cryptographic offloader"
select CRYPTO_SKCIPHER
diff --git a/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c 
b/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c
index 7f4c97cc9627..5af404f74a98 100644
--- a/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c
+++ b/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c
@@ -34,6 +34,8 @@ static int noinline_for_stack sun4i_ss_opti_poll(struct 
skcipher_request *areq)
struct sg_mapping_iter mi, mo;
unsigned int oi, oo; /* offset for in and out */
unsigned long flags;
+   struct skcipher_alg *alg = crypto_skcipher_alg(tfm);
+   struct sun4i_ss_alg_template *algt;
 
if (!areq->cryptlen)
return 0;
@@ -50,6 +52,12 @@ static int noinline_for_stack sun4i_ss_opti_poll(struct 
skcipher_request *areq)
scatterwalk_map_and_copy(backup_iv, areq->src, areq->cryptlen - 
ivsize, ivsize, 0);
}
 
+   if (IS_ENABLED(CONFIG_CRYPTO_DEV_SUN4I_SS_DEBUG)) {
+   algt = container_of(alg, struct sun4i_ss_alg_template, 
alg.crypto);
+   algt->stat_opti++;
+   algt->stat_bytes += areq->cryptlen;
+   }
+
spin_lock_irqsave(>slock, flags);
 
for (i = 0; i < op->keylen / 4; i++)
@@ -134,6 +142,13 @@ static int noinline_for_stack 
sun4i_ss_cipher_poll_fallback(struct skcipher_requ
struct sun4i_tfm_ctx *op = crypto_skcipher_ctx(tfm);
struct sun4i_cipher_req_ctx *ctx = skcipher_request_ctx(areq);
int err;
+   struct skcipher_alg *alg = crypto_skcipher_alg(tfm);
+   struct sun4i_ss_alg_template *algt;
+
+   if (IS_ENABLED(CONFIG_CRYPTO_DEV_SUN4I_SS_DEBUG)) {
+   algt = container_of(alg, struct sun4i_ss_alg_template, 
alg.crypto);
+   algt->stat_fb++;
+   }
 
skcipher_request_set_tfm(>fallback_req, op->fallback_tfm);
skcipher_request_set_callback(>fallback_req, areq->base.flags,
@@ -221,6 +236,11 @@ static int sun4i_ss_cipher_poll(struct skcipher_request 
*areq)
scatterwalk_map_and_copy(backup_iv, areq->src, areq->cryptlen - 
ivsize, ivsize, 0);
}
 
+   if (IS_ENABLED(CONFIG_CRYPTO_DEV_SUN4I_SS_DEBUG)) {
+   algt->stat_req++;
+   algt->stat_bytes += areq->cryptlen;
+   }
+
spin_lock_irqsave(>slock, flags);
 
for (i = 0; i < op->keylen / 4; i++)
diff --git a/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-core.c 
b/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-core.c
index a2b67f7f8a81..9a8a5e246d87 100644
--- a/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-core.c
+++ b/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-core.c
@@ -10,6 +10,7 @@
  */
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -234,6 +235,53 @@ static struct sun4i_ss_alg_template ss_algs[] = {
 #endif
 };
 
+#ifdef CONFIG_CRYPTO_DEV_SUN4I_SS_DEBUG
+static int sun4i_ss_dbgfs_read(struct seq_file *seq, void *v)
+{
+   unsigned int i;
+
+   for (i = 0; i < ARRAY_SIZE(ss_algs); i++) {
+   if (!ss_algs[i].ss)
+   continue;
+   switch (ss_algs[i].type) {
+   case CRYPTO_ALG_TYPE_SKCIPHER:
+   seq_printf(seq, "%s %s reqs=%lu opti=%lu fallback=%lu 
tsize=%lu\n",
+  ss_algs[i].alg.crypto.base.cra_driver_name,
+  ss_algs[i].alg.crypto.base.cra_name,
+  ss_algs[i].stat_req, ss_algs[i].stat_opti, 
ss_algs[i].stat_fb,
+  ss_algs[i].stat_bytes);
+   break;
+   case CRYPTO_ALG_TYPE_RNG:
+   seq_printf(seq, "%s