Skip to content

Commit

Permalink
crypto: api - Use dedicated workqueue for crypto subsystem
Browse files Browse the repository at this point in the history
Use dedicated workqueue for crypto subsystem

A dedicated workqueue named kcrypto_wq is created to be used by crypto
subsystem. The system shared keventd_wq is not suitable for
encryption/decryption, because of potential starvation problem.

Signed-off-by: Huang Ying <[email protected]>
Signed-off-by: Herbert Xu <[email protected]>
  • Loading branch information
yhuang-intel authored and herbertx committed Feb 19, 2009
1 parent 6fe4a28 commit 25c38d3
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 0 deletions.
3 changes: 3 additions & 0 deletions crypto/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,9 @@ config CRYPTO_NULL
help
These are 'Null' algorithms, used by IPsec, which do nothing.

config CRYPTO_WORKQUEUE
tristate

config CRYPTO_CRYPTD
tristate "Software async crypto daemon"
select CRYPTO_BLKCIPHER
Expand Down
2 changes: 2 additions & 0 deletions crypto/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
obj-$(CONFIG_CRYPTO) += crypto.o
crypto-objs := api.o cipher.o digest.o compress.o

obj-$(CONFIG_CRYPTO_WORKQUEUE) += crypto_wq.o

obj-$(CONFIG_CRYPTO_FIPS) += fips.o

crypto_algapi-$(CONFIG_PROC_FS) += proc.o
Expand Down
38 changes: 38 additions & 0 deletions crypto/crypto_wq.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* Workqueue for crypto subsystem
*
* Copyright (c) 2009 Intel Corp.
* Author: Huang Ying <[email protected]>
*
* 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 <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 = create_workqueue("crypto");
if (unlikely(!kcrypto_wq))
return -ENOMEM;
return 0;
}

static void __exit crypto_wq_exit(void)
{
destroy_workqueue(kcrypto_wq);
}

module_init(crypto_wq_init);
module_exit(crypto_wq_exit);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Workqueue for crypto subsystem");
7 changes: 7 additions & 0 deletions include/crypto/crypto_wq.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#ifndef CRYPTO_WQ_H
#define CRYPTO_WQ_H

#include <linux/workqueue.h>

extern struct workqueue_struct *kcrypto_wq;
#endif

0 comments on commit 25c38d3

Please sign in to comment.