summaryrefslogtreecommitdiffstats
path: root/drivers/s390/crypto/zcrypt_api.c
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2016-09-02 15:21:45 +0200
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2016-12-14 16:33:37 +0100
commit236fb2ab95e9832880501d465d64eb2f2935b852 (patch)
tree7a3f44d63cc8faa4be38d23b39c506fb961aae5f /drivers/s390/crypto/zcrypt_api.c
parentfc1d3f02544a6fd5f417921b57c663388586a17a (diff)
downloadlinux-236fb2ab95e9832880501d465d64eb2f2935b852.tar.gz
linux-236fb2ab95e9832880501d465d64eb2f2935b852.tar.bz2
linux-236fb2ab95e9832880501d465d64eb2f2935b852.zip
s390/zcrypt: simplify message type handling
Now that the message type modules are linked with the zcrypt_api into a single module the zcrypt_ops_list is initialized by the module init function of the zcyppt.ko module. After that the list is static and all message types are present. Drop the zcrypt_ops_list_lock spinlock and the module handling in regard to the message types. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/crypto/zcrypt_api.c')
-rw-r--r--drivers/s390/crypto/zcrypt_api.c49
1 files changed, 6 insertions, 43 deletions
diff --git a/drivers/s390/crypto/zcrypt_api.c b/drivers/s390/crypto/zcrypt_api.c
index 7f61ae1b0b93..dc6d891a7b48 100644
--- a/drivers/s390/crypto/zcrypt_api.c
+++ b/drivers/s390/crypto/zcrypt_api.c
@@ -71,7 +71,6 @@ EXPORT_SYMBOL(zcrypt_rescan_req);
static int zcrypt_rng_device_add(void);
static void zcrypt_rng_device_remove(void);
-static DEFINE_SPINLOCK(zcrypt_ops_list_lock);
static LIST_HEAD(zcrypt_ops_list);
static debug_info_t *zcrypt_dbf_common;
@@ -318,61 +317,25 @@ EXPORT_SYMBOL(zcrypt_device_unregister);
void zcrypt_msgtype_register(struct zcrypt_ops *zops)
{
- spin_lock_bh(&zcrypt_ops_list_lock);
list_add_tail(&zops->list, &zcrypt_ops_list);
- spin_unlock_bh(&zcrypt_ops_list_lock);
}
-EXPORT_SYMBOL(zcrypt_msgtype_register);
void zcrypt_msgtype_unregister(struct zcrypt_ops *zops)
{
- spin_lock_bh(&zcrypt_ops_list_lock);
list_del_init(&zops->list);
- spin_unlock_bh(&zcrypt_ops_list_lock);
}
-EXPORT_SYMBOL(zcrypt_msgtype_unregister);
-static inline
-struct zcrypt_ops *__ops_lookup(unsigned char *name, int variant)
+struct zcrypt_ops *zcrypt_msgtype(unsigned char *name, int variant)
{
struct zcrypt_ops *zops;
- int found = 0;
- spin_lock_bh(&zcrypt_ops_list_lock);
- list_for_each_entry(zops, &zcrypt_ops_list, list) {
+ list_for_each_entry(zops, &zcrypt_ops_list, list)
if ((zops->variant == variant) &&
- (!strncmp(zops->name, name, sizeof(zops->name)))) {
- found = 1;
- break;
- }
- }
- if (!found || !try_module_get(zops->owner))
- zops = NULL;
-
- spin_unlock_bh(&zcrypt_ops_list_lock);
-
- return zops;
-}
-
-struct zcrypt_ops *zcrypt_msgtype_request(unsigned char *name, int variant)
-{
- struct zcrypt_ops *zops = NULL;
-
- zops = __ops_lookup(name, variant);
- if (!zops) {
- request_module("%s", name);
- zops = __ops_lookup(name, variant);
- }
- return zops;
-}
-EXPORT_SYMBOL(zcrypt_msgtype_request);
-
-void zcrypt_msgtype_release(struct zcrypt_ops *zops)
-{
- if (zops)
- module_put(zops->owner);
+ (!strncmp(zops->name, name, sizeof(zops->name))))
+ return zops;
+ return NULL;
}
-EXPORT_SYMBOL(zcrypt_msgtype_release);
+EXPORT_SYMBOL(zcrypt_msgtype);
/**
* zcrypt_read (): Not supported beyond zcrypt 1.3.1.