mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-18 10:34:24 +08:00
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: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
e590e1321c
commit
3e56e16863
@ -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
|
|||||||
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 @@
|
|||||||
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 @@
|
|||||||
#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 @@
|
|||||||
#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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
{
|
{
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 @@
|
|||||||
#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>
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
/* 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
|
|
Loading…
Reference in New Issue
Block a user