NTB: Rate limit ntb_qp_link_work
[firefly-linux-kernel-4.4.55.git] / crypto / rng.c
index 13155058b19317282c36b2a56261d74d28f8ab6a..b81cffb13babc35cc2203ce5355ac6a04b18c5c4 100644 (file)
@@ -155,14 +155,33 @@ EXPORT_SYMBOL_GPL(crypto_get_default_rng);
 void crypto_put_default_rng(void)
 {
        mutex_lock(&crypto_default_rng_lock);
-       if (!--crypto_default_rng_refcnt) {
-               crypto_free_rng(crypto_default_rng);
-               crypto_default_rng = NULL;
-       }
+       crypto_default_rng_refcnt--;
        mutex_unlock(&crypto_default_rng_lock);
 }
 EXPORT_SYMBOL_GPL(crypto_put_default_rng);
 
+#if defined(CONFIG_CRYPTO_RNG) || defined(CONFIG_CRYPTO_RNG_MODULE)
+int crypto_del_default_rng(void)
+{
+       int err = -EBUSY;
+
+       mutex_lock(&crypto_default_rng_lock);
+       if (crypto_default_rng_refcnt)
+               goto out;
+
+       crypto_free_rng(crypto_default_rng);
+       crypto_default_rng = NULL;
+
+       err = 0;
+
+out:
+       mutex_unlock(&crypto_default_rng_lock);
+
+       return err;
+}
+EXPORT_SYMBOL_GPL(crypto_del_default_rng);
+#endif
+
 int crypto_register_rng(struct rng_alg *alg)
 {
        struct crypto_alg *base = &alg->base;