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>
This commit is contained in:
Martin Schwidefsky
2016-09-02 15:21:45 +02:00
parent fc1d3f0254
commit 236fb2ab95
5 changed files with 18 additions and 67 deletions

View File

@@ -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;
(!strncmp(zops->name, name, sizeof(zops->name))))
return zops;
return NULL;
}
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);
}
EXPORT_SYMBOL(zcrypt_msgtype_release);
EXPORT_SYMBOL(zcrypt_msgtype);
/**
* zcrypt_read (): Not supported beyond zcrypt 1.3.1.