Skip to content

Commit 20f2d43

Browse files
committed
remove provider reference counter
1 parent 8d8cd82 commit 20f2d43

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

include/dpusm/provider.h

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ typedef struct dpusm_provider_handle {
1313
struct module *module;
1414
dpusm_pc_t capabilities; /* constant set of capabilities */
1515
const dpusm_pf_t *funcs; /* reference to a struct */
16-
atomic_t refs; /* how many users are holding this provider */
1716
struct list_head list;
1817
struct dpusm_provider_handle *self;
1918
} dpusm_ph_t;

src/provider.c

+9-10
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,6 @@ dpusmph_init(struct module *module, const dpusm_pf_t *funcs)
227227
dpusmph->module = module;
228228
dpusmph->funcs = funcs;
229229
dpusmph->self = dpusmph;
230-
atomic_set(&dpusmph->refs, 0);
231230
}
232231

233232
return dpusmph;
@@ -310,8 +309,8 @@ dpusm_provider_unregister_handle(dpusm_t *dpusm, dpusm_ph_t **provider) {
310309
}
311310

312311
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) {
315314
printk("%s: Unregistering provider \"%s\" with %d references remaining.\n",
316315
__func__, module_name((*provider)->module), refs);
317316
rc = -EBUSY;
@@ -358,17 +357,18 @@ dpusm_provider_get(dpusm_t *dpusm, const char *name) {
358357
read_lock(&dpusm->lock);
359358
dpusm_ph_t **provider = find_provider(dpusm, name);
360359
if (provider) {
360+
struct module *module = (*provider)->module;
361+
361362
/* make sure provider can't be unloaded before user */
362-
if (!try_module_get((*provider)->module)) {
363+
if (!try_module_get(module)) {
363364
printk("Error: Could not increment reference count of %s\n", name);
364365
return NULL;
365366
}
366367

367-
atomic_inc(&(*provider)->refs);
368368
atomic_inc(&dpusm->active);
369369

370370
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));
372372

373373
if ((*provider)->funcs->at_connect) {
374374
(*provider)->funcs->at_connect();
@@ -393,14 +393,13 @@ dpusm_provider_put(dpusm_t *dpusm, void *handle) {
393393

394394
struct module *module = (*provider)->module;
395395

396-
if (!atomic_read(&(*provider)->refs)) {
396+
if (!module_refcount(module)) {
397397
printk("%s Error: Cannot decrement provider \"%s\" user count already at 0.\n",
398398
__func__, module_name(module));
399399
return DPUSM_ERROR;
400400
}
401401

402402
module_put(module);
403-
atomic_dec(&(*provider)->refs);
404403
atomic_dec(&dpusm->active);
405404

406405
if ((*provider)->funcs) { /* provider might have been invalidated */
@@ -410,7 +409,7 @@ dpusm_provider_put(dpusm_t *dpusm, void *handle) {
410409
}
411410

412411
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));
414413
return DPUSM_OK;
415414
}
416415

@@ -431,7 +430,7 @@ void dpusm_provider_invalidate(dpusm_t *dpusm, const char *name) {
431430
(*provider)->funcs = NULL;
432431
memset(&(*provider)->capabilities, 0, sizeof((*provider)->capabilities));
433432
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));
435434
/* not decrementing module reference count here - provider is still registered */
436435
}
437436
else {

0 commit comments

Comments
 (0)