File tree Expand file tree Collapse file tree 2 files changed +46
-0
lines changed Expand file tree Collapse file tree 2 files changed +46
-0
lines changed Original file line number Diff line number Diff line change @@ -536,6 +536,48 @@ void hwrng_unregister(struct hwrng *rng)
536
536
}
537
537
EXPORT_SYMBOL_GPL (hwrng_unregister );
538
538
539
+ static void devm_hwrng_release (struct device * dev , void * res )
540
+ {
541
+ hwrng_unregister (* (struct hwrng * * )res );
542
+ }
543
+
544
+ static int devm_hwrng_match (struct device * dev , void * res , void * data )
545
+ {
546
+ struct hwrng * * r = res ;
547
+
548
+ if (WARN_ON (!r || !* r ))
549
+ return 0 ;
550
+
551
+ return * r == data ;
552
+ }
553
+
554
+ int devm_hwrng_register (struct device * dev , struct hwrng * rng )
555
+ {
556
+ struct hwrng * * ptr ;
557
+ int error ;
558
+
559
+ ptr = devres_alloc (devm_hwrng_release , sizeof (* ptr ), GFP_KERNEL );
560
+ if (!ptr )
561
+ return - ENOMEM ;
562
+
563
+ error = hwrng_register (rng );
564
+ if (error ) {
565
+ devres_free (ptr );
566
+ return error ;
567
+ }
568
+
569
+ * ptr = rng ;
570
+ devres_add (dev , ptr );
571
+ return 0 ;
572
+ }
573
+ EXPORT_SYMBOL_GPL (devm_hwrng_register );
574
+
575
+ void devm_hwrng_unregister (struct device * dev , struct hwrng * rng )
576
+ {
577
+ devres_release (dev , devm_hwrng_release , devm_hwrng_match , rng );
578
+ }
579
+ EXPORT_SYMBOL_GPL (devm_hwrng_unregister );
580
+
539
581
static int __init hwrng_modinit (void )
540
582
{
541
583
return register_miscdev ();
Original file line number Diff line number Diff line change @@ -50,10 +50,14 @@ struct hwrng {
50
50
struct completion cleanup_done ;
51
51
};
52
52
53
+ struct device ;
54
+
53
55
/** Register a new Hardware Random Number Generator driver. */
54
56
extern int hwrng_register (struct hwrng * rng );
57
+ extern int devm_hwrng_register (struct device * dev , struct hwrng * rng );
55
58
/** Unregister a Hardware Random Number Generator driver. */
56
59
extern void hwrng_unregister (struct hwrng * rng );
60
+ extern void devm_hwrng_unregister (struct device * dve , struct hwrng * rng );
57
61
/** Feed random bits into the pool. */
58
62
extern void add_hwgenerator_randomness (const char * buffer , size_t count , size_t entropy );
59
63
You can’t perform that action at this time.
0 commit comments