mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
crypto: iaa - Add IAA Compression Accelerator stats
Add support for optional debugfs statistics support for the IAA Compression Accelerator. This is enabled by the kernel config item: CRYPTO_DEV_IAA_CRYPTO_STATS When enabled, the IAA crypto driver will generate statistics which can be accessed at /sys/kernel/debug/iaa-crypto/. See Documentation/driver-api/crypto/iax/iax-crypto.rst for details. Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
|
||||
#include "idxd.h"
|
||||
#include "iaa_crypto.h"
|
||||
#include "iaa_crypto_stats.h"
|
||||
|
||||
#ifdef pr_fmt
|
||||
#undef pr_fmt
|
||||
@@ -85,8 +86,8 @@ static void wq_table_clear_entry(int cpu)
|
||||
memset(entry->wqs, 0, entry->max_wqs * sizeof(struct idxd_wq *));
|
||||
}
|
||||
|
||||
static LIST_HEAD(iaa_devices);
|
||||
static DEFINE_MUTEX(iaa_devices_lock);
|
||||
LIST_HEAD(iaa_devices);
|
||||
DEFINE_MUTEX(iaa_devices_lock);
|
||||
|
||||
/* If enabled, IAA hw crypto algos are registered, unavailable otherwise */
|
||||
static bool iaa_crypto_enabled;
|
||||
@@ -1052,6 +1053,7 @@ static inline int check_completion(struct device *dev,
|
||||
ret = -ETIMEDOUT;
|
||||
dev_dbg(dev, "%s timed out, size=0x%x\n",
|
||||
op_str, comp->output_size);
|
||||
update_completion_timeout_errs();
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -1061,6 +1063,7 @@ static inline int check_completion(struct device *dev,
|
||||
dev_dbg(dev, "compressed > uncompressed size,"
|
||||
" not compressing, size=0x%x\n",
|
||||
comp->output_size);
|
||||
update_completion_comp_buf_overflow_errs();
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -1073,6 +1076,7 @@ static inline int check_completion(struct device *dev,
|
||||
dev_dbg(dev, "iaa %s status=0x%x, error=0x%x, size=0x%x\n",
|
||||
op_str, comp->status, comp->error_code, comp->output_size);
|
||||
print_hex_dump(KERN_INFO, "cmp-rec: ", DUMP_PREFIX_OFFSET, 8, 1, comp, 64, 0);
|
||||
update_completion_einval_errs();
|
||||
|
||||
goto out;
|
||||
}
|
||||
@@ -1094,6 +1098,8 @@ static int deflate_generic_decompress(struct acomp_req *req)
|
||||
kunmap_local(src);
|
||||
kunmap_local(dst);
|
||||
|
||||
update_total_sw_decomp_calls();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1161,6 +1167,15 @@ static void iaa_desc_complete(struct idxd_desc *idxd_desc,
|
||||
ctx->req->dlen = idxd_desc->iax_completion->output_size;
|
||||
}
|
||||
|
||||
/* Update stats */
|
||||
if (ctx->compress) {
|
||||
update_total_comp_bytes_out(ctx->req->dlen);
|
||||
update_wq_comp_bytes(iaa_wq->wq, ctx->req->dlen);
|
||||
} else {
|
||||
update_total_decomp_bytes_in(ctx->req->dlen);
|
||||
update_wq_decomp_bytes(iaa_wq->wq, ctx->req->dlen);
|
||||
}
|
||||
|
||||
if (ctx->compress && compression_ctx->verify_compress) {
|
||||
dma_addr_t src_addr, dst_addr;
|
||||
u32 compression_crc;
|
||||
@@ -1280,6 +1295,10 @@ static int iaa_compress(struct crypto_tfm *tfm, struct acomp_req *req,
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Update stats */
|
||||
update_total_comp_calls();
|
||||
update_wq_comp_calls(wq);
|
||||
|
||||
if (ctx->async_mode && !disable_async) {
|
||||
ret = -EINPROGRESS;
|
||||
dev_dbg(dev, "%s: returning -EINPROGRESS\n", __func__);
|
||||
@@ -1294,6 +1313,10 @@ static int iaa_compress(struct crypto_tfm *tfm, struct acomp_req *req,
|
||||
|
||||
*dlen = idxd_desc->iax_completion->output_size;
|
||||
|
||||
/* Update stats */
|
||||
update_total_comp_bytes_out(*dlen);
|
||||
update_wq_comp_bytes(wq, *dlen);
|
||||
|
||||
*compression_crc = idxd_desc->iax_completion->crc;
|
||||
|
||||
if (!ctx->async_mode)
|
||||
@@ -1510,6 +1533,10 @@ static int iaa_decompress(struct crypto_tfm *tfm, struct acomp_req *req,
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Update stats */
|
||||
update_total_decomp_calls();
|
||||
update_wq_decomp_calls(wq);
|
||||
|
||||
if (ctx->async_mode && !disable_async) {
|
||||
ret = -EINPROGRESS;
|
||||
dev_dbg(dev, "%s: returning -EINPROGRESS\n", __func__);
|
||||
@@ -1540,6 +1567,10 @@ static int iaa_decompress(struct crypto_tfm *tfm, struct acomp_req *req,
|
||||
|
||||
if (!ctx->async_mode)
|
||||
idxd_free_desc(wq, idxd_desc);
|
||||
|
||||
/* Update stats */
|
||||
update_total_decomp_bytes_in(slen);
|
||||
update_wq_decomp_bytes(wq, slen);
|
||||
out:
|
||||
return ret;
|
||||
err:
|
||||
@@ -2104,6 +2135,9 @@ static int __init iaa_crypto_init_module(void)
|
||||
goto err_sync_attr_create;
|
||||
}
|
||||
|
||||
if (iaa_crypto_debugfs_init())
|
||||
pr_warn("debugfs init failed, stats not available\n");
|
||||
|
||||
pr_debug("initialized\n");
|
||||
out:
|
||||
return ret;
|
||||
@@ -2126,6 +2160,7 @@ static void __exit iaa_crypto_cleanup_module(void)
|
||||
if (iaa_unregister_compression_device())
|
||||
pr_debug("IAA compression device unregister failed\n");
|
||||
|
||||
iaa_crypto_debugfs_cleanup();
|
||||
driver_remove_file(&iaa_crypto_driver.drv,
|
||||
&driver_attr_sync_mode);
|
||||
driver_remove_file(&iaa_crypto_driver.drv,
|
||||
|
||||
Reference in New Issue
Block a user