#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 {
 
 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);
 }