crypto: qat - Don't attempt to register algorithm multiple times

When multiple devices are present in the system the driver attempts
to register the same algorithm many times.

Changes in v2:
 - use proper synchronization mechanizm between register and unregister

Signed-off-by: Tadeusz Struk <tadeusz.struk@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Tadeusz Struk 2015-07-21 22:07:47 -07:00 committed by Herbert Xu
parent 3cf080a7b7
commit 8f5ea2df02

View File

@ -58,6 +58,9 @@
#include "adf_common_drv.h"
#include "qat_crypto.h"
static DEFINE_MUTEX(algs_lock);
static unsigned int active_devs;
struct qat_rsa_input_params {
union {
struct {
@ -629,11 +632,21 @@ static struct akcipher_alg rsa = {
int qat_asym_algs_register(void)
{
rsa.base.cra_flags = 0;
return crypto_register_akcipher(&rsa);
int ret = 0;
mutex_lock(&algs_lock);
if (++active_devs == 1) {
rsa.base.cra_flags = 0;
ret = crypto_register_akcipher(&rsa);
}
mutex_unlock(&algs_lock);
return ret;
}
void qat_asym_algs_unregister(void)
{
crypto_unregister_akcipher(&rsa);
mutex_lock(&algs_lock);
if (--active_devs == 0)
crypto_unregister_akcipher(&rsa);
mutex_unlock(&algs_lock);
}