Commit 3e56e168 authored by Eric Biggers's avatar Eric Biggers Committed by Herbert Xu

crypto: cryptd - move kcrypto_wq into cryptd

kcrypto_wq is only used by cryptd, so move it into cryptd.c and change
the workqueue name from "crypto" to "cryptd".
Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent e590e132
...@@ -61,7 +61,6 @@ config CRYPTO_BLKCIPHER2 ...@@ -61,7 +61,6 @@ config CRYPTO_BLKCIPHER2
tristate tristate
select CRYPTO_ALGAPI2 select CRYPTO_ALGAPI2
select CRYPTO_RNG2 select CRYPTO_RNG2
select CRYPTO_WORKQUEUE
config CRYPTO_HASH config CRYPTO_HASH
tristate tristate
...@@ -183,15 +182,11 @@ config CRYPTO_PCRYPT ...@@ -183,15 +182,11 @@ config CRYPTO_PCRYPT
This converts an arbitrary crypto algorithm into a parallel This converts an arbitrary crypto algorithm into a parallel
algorithm that executes in kernel threads. algorithm that executes in kernel threads.
config CRYPTO_WORKQUEUE
tristate
config CRYPTO_CRYPTD config CRYPTO_CRYPTD
tristate "Software async crypto daemon" tristate "Software async crypto daemon"
select CRYPTO_BLKCIPHER select CRYPTO_BLKCIPHER
select CRYPTO_HASH select CRYPTO_HASH
select CRYPTO_MANAGER select CRYPTO_MANAGER
select CRYPTO_WORKQUEUE
help help
This is a generic software asynchronous crypto daemon that This is a generic software asynchronous crypto daemon that
converts an arbitrary synchronous software crypto algorithm converts an arbitrary synchronous software crypto algorithm
......
...@@ -6,8 +6,6 @@ ...@@ -6,8 +6,6 @@
obj-$(CONFIG_CRYPTO) += crypto.o obj-$(CONFIG_CRYPTO) += crypto.o
crypto-y := api.o cipher.o compress.o memneq.o crypto-y := api.o cipher.o compress.o memneq.o
obj-$(CONFIG_CRYPTO_WORKQUEUE) += crypto_wq.o
obj-$(CONFIG_CRYPTO_ENGINE) += crypto_engine.o obj-$(CONFIG_CRYPTO_ENGINE) += crypto_engine.o
obj-$(CONFIG_CRYPTO_FIPS) += fips.o obj-$(CONFIG_CRYPTO_FIPS) += fips.o
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include <crypto/internal/aead.h> #include <crypto/internal/aead.h>
#include <crypto/internal/skcipher.h> #include <crypto/internal/skcipher.h>
#include <crypto/cryptd.h> #include <crypto/cryptd.h>
#include <crypto/crypto_wq.h>
#include <linux/atomic.h> #include <linux/atomic.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -31,11 +30,14 @@ ...@@ -31,11 +30,14 @@
#include <linux/scatterlist.h> #include <linux/scatterlist.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/workqueue.h>
static unsigned int cryptd_max_cpu_qlen = 1000; static unsigned int cryptd_max_cpu_qlen = 1000;
module_param(cryptd_max_cpu_qlen, uint, 0); module_param(cryptd_max_cpu_qlen, uint, 0);
MODULE_PARM_DESC(cryptd_max_cpu_qlen, "Set cryptd Max queue depth"); MODULE_PARM_DESC(cryptd_max_cpu_qlen, "Set cryptd Max queue depth");
static struct workqueue_struct *cryptd_wq;
struct cryptd_cpu_queue { struct cryptd_cpu_queue {
struct crypto_queue queue; struct crypto_queue queue;
struct work_struct work; struct work_struct work;
...@@ -141,7 +143,7 @@ static int cryptd_enqueue_request(struct cryptd_queue *queue, ...@@ -141,7 +143,7 @@ static int cryptd_enqueue_request(struct cryptd_queue *queue,
if (err == -ENOSPC) if (err == -ENOSPC)
goto out_put_cpu; goto out_put_cpu;
queue_work_on(cpu, kcrypto_wq, &cpu_queue->work); queue_work_on(cpu, cryptd_wq, &cpu_queue->work);
if (!atomic_read(refcnt)) if (!atomic_read(refcnt))
goto out_put_cpu; goto out_put_cpu;
...@@ -184,7 +186,7 @@ static void cryptd_queue_worker(struct work_struct *work) ...@@ -184,7 +186,7 @@ static void cryptd_queue_worker(struct work_struct *work)
req->complete(req, 0); req->complete(req, 0);
if (cpu_queue->queue.qlen) if (cpu_queue->queue.qlen)
queue_work(kcrypto_wq, &cpu_queue->work); queue_work(cryptd_wq, &cpu_queue->work);
} }
static inline struct cryptd_queue *cryptd_get_queue(struct crypto_tfm *tfm) static inline struct cryptd_queue *cryptd_get_queue(struct crypto_tfm *tfm)
...@@ -1123,19 +1125,31 @@ static int __init cryptd_init(void) ...@@ -1123,19 +1125,31 @@ static int __init cryptd_init(void)
{ {
int err; int err;
cryptd_wq = alloc_workqueue("cryptd", WQ_MEM_RECLAIM | WQ_CPU_INTENSIVE,
1);
if (!cryptd_wq)
return -ENOMEM;
err = cryptd_init_queue(&queue, cryptd_max_cpu_qlen); err = cryptd_init_queue(&queue, cryptd_max_cpu_qlen);
if (err) if (err)
return err; goto err_destroy_wq;
err = crypto_register_template(&cryptd_tmpl); err = crypto_register_template(&cryptd_tmpl);
if (err) if (err)
cryptd_fini_queue(&queue); goto err_fini_queue;
return 0;
err_fini_queue:
cryptd_fini_queue(&queue);
err_destroy_wq:
destroy_workqueue(cryptd_wq);
return err; return err;
} }
static void __exit cryptd_exit(void) static void __exit cryptd_exit(void)
{ {
destroy_workqueue(cryptd_wq);
cryptd_fini_queue(&queue); cryptd_fini_queue(&queue);
crypto_unregister_template(&cryptd_tmpl); crypto_unregister_template(&cryptd_tmpl);
} }
......
/*
* Workqueue for crypto subsystem
*
* Copyright (c) 2009 Intel Corp.
* Author: Huang Ying <ying.huang@intel.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
*/
#include <linux/workqueue.h>
#include <linux/module.h>
#include <crypto/algapi.h>
#include <crypto/crypto_wq.h>
struct workqueue_struct *kcrypto_wq;
EXPORT_SYMBOL_GPL(kcrypto_wq);
static int __init crypto_wq_init(void)
{
kcrypto_wq = alloc_workqueue("crypto",
WQ_MEM_RECLAIM | WQ_CPU_INTENSIVE, 1);
if (unlikely(!kcrypto_wq))
return -ENOMEM;
return 0;
}
static void __exit crypto_wq_exit(void)
{
destroy_workqueue(kcrypto_wq);
}
subsys_initcall(crypto_wq_init);
module_exit(crypto_wq_exit);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Workqueue for crypto subsystem");
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include <crypto/aes.h> #include <crypto/aes.h>
#include <crypto/algapi.h> #include <crypto/algapi.h>
#include <crypto/authenc.h> #include <crypto/authenc.h>
#include <crypto/crypto_wq.h>
#include <crypto/des.h> #include <crypto/des.h>
#include <crypto/xts.h> #include <crypto/xts.h>
#include <linux/crypto.h> #include <linux/crypto.h>
......
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef CRYPTO_WQ_H
#define CRYPTO_WQ_H
#include <linux/workqueue.h>
extern struct workqueue_struct *kcrypto_wq;
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment