#include <linux/atomic.h>
#include <linux/crypto.h>
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
static void *c_start(struct seq_file *m, loff_t *pos)
down_read(&crypto_alg_sem);
return seq_list_start(&crypto_alg_list, *pos);
static void *c_next(struct seq_file *m, void *p, loff_t *pos)
return seq_list_next(p, &crypto_alg_list, pos);
static void c_stop(struct seq_file *m, void *p)
up_read(&crypto_alg_sem);
static int c_show(struct seq_file *m, void *p)
struct crypto_alg *alg = list_entry(p, struct crypto_alg, cra_list);
seq_printf(m, "name : %s\n", alg->cra_name);
seq_printf(m, "driver : %s\n", alg->cra_driver_name);
seq_printf(m, "module : %s\n", module_name(alg->cra_module));
seq_printf(m, "priority : %d\n", alg->cra_priority);
seq_printf(m, "refcnt : %u\n", refcount_read(&alg->cra_refcnt));
seq_printf(m, "selftest : %s\n",
(alg->cra_flags & CRYPTO_ALG_TESTED) ?
seq_printf(m, "internal : %s\n",
(alg->cra_flags & CRYPTO_ALG_INTERNAL) ?
if (alg->cra_flags & CRYPTO_ALG_LARVAL) {
seq_printf(m, "type : larval\n");
seq_printf(m, "flags : 0x%x\n", alg->cra_flags);
if (alg->cra_type && alg->cra_type->show) {