@@ -227,7 +227,6 @@ dpusmph_init(struct module *module, const dpusm_pf_t *funcs)
227
227
dpusmph -> module = module ;
228
228
dpusmph -> funcs = funcs ;
229
229
dpusmph -> self = dpusmph ;
230
- atomic_set (& dpusmph -> refs , 0 );
231
230
}
232
231
233
232
return dpusmph ;
@@ -310,8 +309,8 @@ dpusm_provider_unregister_handle(dpusm_t *dpusm, dpusm_ph_t **provider) {
310
309
}
311
310
312
311
int rc = 0 ;
313
- const int refs = atomic_read ( & (* provider )-> refs );
314
- if (refs ) {
312
+ const int refs = module_refcount ( (* provider )-> module );
313
+ if (refs > 0 ) {
315
314
printk ("%s: Unregistering provider \"%s\" with %d references remaining.\n" ,
316
315
__func__ , module_name ((* provider )-> module ), refs );
317
316
rc = - EBUSY ;
@@ -358,17 +357,18 @@ dpusm_provider_get(dpusm_t *dpusm, const char *name) {
358
357
read_lock (& dpusm -> lock );
359
358
dpusm_ph_t * * provider = find_provider (dpusm , name );
360
359
if (provider ) {
360
+ struct module * module = (* provider )-> module ;
361
+
361
362
/* make sure provider can't be unloaded before user */
362
- if (!try_module_get (( * provider ) -> module )) {
363
+ if (!try_module_get (module )) {
363
364
printk ("Error: Could not increment reference count of %s\n" , name );
364
365
return NULL ;
365
366
}
366
367
367
- atomic_inc (& (* provider )-> refs );
368
368
atomic_inc (& dpusm -> active );
369
369
370
370
printk ("%s: User has been given a handle to \"%s\" (%p) (now %d users).\n" ,
371
- __func__ , name , * provider , atomic_read ( & ( * provider ) -> refs ));
371
+ __func__ , name , * provider , module_refcount ( module ));
372
372
373
373
if ((* provider )-> funcs -> at_connect ) {
374
374
(* provider )-> funcs -> at_connect ();
@@ -393,14 +393,13 @@ dpusm_provider_put(dpusm_t *dpusm, void *handle) {
393
393
394
394
struct module * module = (* provider )-> module ;
395
395
396
- if (!atomic_read ( & ( * provider ) -> refs )) {
396
+ if (!module_refcount ( module )) {
397
397
printk ("%s Error: Cannot decrement provider \"%s\" user count already at 0.\n" ,
398
398
__func__ , module_name (module ));
399
399
return DPUSM_ERROR ;
400
400
}
401
401
402
402
module_put (module );
403
- atomic_dec (& (* provider )-> refs );
404
403
atomic_dec (& dpusm -> active );
405
404
406
405
if ((* provider )-> funcs ) { /* provider might have been invalidated */
@@ -410,7 +409,7 @@ dpusm_provider_put(dpusm_t *dpusm, void *handle) {
410
409
}
411
410
412
411
printk ("%s: User has returned a handle to \"%s\" (%p) (now %d users).\n" ,
413
- __func__ , module_name (module ), * provider , atomic_read ( & ( * provider ) -> refs ));
412
+ __func__ , module_name (module ), * provider , module_refcount ( module ));
414
413
return DPUSM_OK ;
415
414
}
416
415
@@ -431,7 +430,7 @@ void dpusm_provider_invalidate(dpusm_t *dpusm, const char *name) {
431
430
(* provider )-> funcs = NULL ;
432
431
memset (& (* provider )-> capabilities , 0 , sizeof ((* provider )-> capabilities ));
433
432
printk ("%s: Provider \"%s\" has been invalidated with %d users active.\n" ,
434
- __func__ , name , atomic_read ( & (* provider )-> refs ));
433
+ __func__ , name , module_refcount ( (* provider )-> module ));
435
434
/* not decrementing module reference count here - provider is still registered */
436
435
}
437
436
else {
0 commit comments