Skip to content

Commit fd909ed

Browse files
committed
rwlock to mutex
1 parent 1d8d2fd commit fd909ed

File tree

3 files changed

+15
-28
lines changed

3 files changed

+15
-28
lines changed

Diff for: include/dpusm/provider.h

+2-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include <linux/atomic.h>
55
#include <linux/list.h>
66
#include <linux/module.h>
7-
#include <linux/spinlock.h>
7+
#include <linux/mutex.h>
88

99
#include <dpusm/provider_api.h>
1010

@@ -20,7 +20,7 @@ typedef struct dpusm_provider_handle {
2020
typedef struct {
2121
struct list_head providers; /* list of providers */
2222
size_t count; /* count of registered providers */
23-
rwlock_t lock;
23+
struct mutex lock;
2424
atomic_t active; /* how many providers are active (may be larger than count) */
2525
/* this is not tied to the provider/count */
2626
} dpusm_t;
@@ -34,9 +34,6 @@ int dpusm_provider_unregister(dpusm_t *dpusm, struct module *module);
3434
dpusm_ph_t **dpusm_provider_get(dpusm_t *dpusm, const char *name);
3535
int dpusm_provider_put(dpusm_t *dpusm, void *handle);
3636

37-
void dpusm_provider_write_lock(dpusm_t *dpusm);
38-
void dpusm_provider_write_unlock(dpusm_t *dpusm);
39-
4037
/*
4138
* call when backing DPU goes down unexpectedly
4239
*

Diff for: src/dpusm.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ static int __init
6666
dpusm_init(void) {
6767
INIT_LIST_HEAD(&dpusm.providers);
6868
dpusm.count = 0;
69-
rwlock_init(&dpusm.lock);
69+
mutex_init(&dpusm.lock);
7070

7171
atomic_set(&dpusm.active, 0);
7272
dpusm_mem_init();
@@ -77,7 +77,7 @@ dpusm_init(void) {
7777

7878
static void __exit
7979
dpusm_exit(void) {
80-
dpusm_provider_write_lock(&dpusm);
80+
mutex_lock(&dpusm.lock);
8181

8282
const int active = atomic_read(&dpusm.active);
8383
if (unlikely(active)) {
@@ -100,7 +100,7 @@ dpusm_exit(void) {
100100
dpusm_provider_unregister_handle(&dpusm, &provider->self);
101101
}
102102

103-
dpusm_provider_write_unlock(&dpusm);
103+
mutex_unlock(&dpusm.lock);
104104

105105
#if DPUSM_TRACK_ALLOCS
106106
size_t alloc_count = 0;

Diff for: src/provider.c

+10-20
Original file line numberDiff line numberDiff line change
@@ -265,19 +265,19 @@ dpusm_provider_register(dpusm_t *dpusm, struct module *module, const dpusm_pf_t
265265
return -EINVAL;
266266
}
267267

268-
dpusm_provider_write_lock(dpusm);
268+
mutex_lock(&dpusm->lock);;
269269

270270
dpusm_ph_t **found = find_provider(dpusm, module_name(module));
271271
if (found) {
272272
printk("%s: DPUSM Provider with the name \"%s\" (%p) already exists. %zu providers registered.\n",
273273
__func__, module_name(module), *found, dpusm->count);
274-
dpusm_provider_write_unlock(dpusm);
274+
mutex_unlock(&dpusm->lock);;
275275
return -EEXIST;
276276
}
277277

278278
dpusm_ph_t *provider = dpusmph_init(module, funcs);
279279
if (!provider) {
280-
dpusm_provider_write_unlock(dpusm);
280+
mutex_unlock(&dpusm->lock);;
281281
return -ECANCELED;
282282
}
283283

@@ -286,7 +286,7 @@ dpusm_provider_register(dpusm_t *dpusm, struct module *module, const dpusm_pf_t
286286
printk("%s: DPUSM Provider \"%s\" (%p) added. Now %zu providers registered.\n",
287287
__func__, module_name(module), provider, dpusm->count);
288288

289-
dpusm_provider_write_unlock(dpusm);
289+
mutex_unlock(&dpusm->lock);;
290290

291291
return 0;
292292
}
@@ -320,20 +320,20 @@ dpusm_provider_unregister_handle(dpusm_t *dpusm, dpusm_ph_t **provider) {
320320

321321
int
322322
dpusm_provider_unregister(dpusm_t *dpusm, struct module *module) {
323-
dpusm_provider_write_lock(dpusm);
323+
mutex_lock(&dpusm->lock);;
324324

325325
dpusm_ph_t **provider = find_provider(dpusm, module_name(module));
326326
if (!provider) {
327327
printk("%s: Could not find provider with name \"%s\"\n", __func__, module_name(module));
328-
dpusm_provider_write_unlock(dpusm);
328+
mutex_unlock(&dpusm->lock);;
329329
return DPUSM_ERROR;
330330
}
331331

332332
void *addr = *provider;
333333
const int rc = dpusm_provider_unregister_handle(dpusm, provider);
334334
printk("%s: Unregistered \"%s\" (%p): %d\n", __func__, module_name(module), addr, rc);
335335

336-
dpusm_provider_write_unlock(dpusm);
336+
mutex_unlock(&dpusm->lock);;
337337
return rc;
338338
}
339339

@@ -345,7 +345,7 @@ dpusm_provider_unregister(dpusm_t *dpusm, struct module *module) {
345345
/* get a provider by name */
346346
dpusm_ph_t **
347347
dpusm_provider_get(dpusm_t *dpusm, const char *name) {
348-
read_lock(&dpusm->lock);
348+
mutex_lock(&dpusm->lock);
349349
dpusm_ph_t **provider = find_provider(dpusm, name);
350350
if (provider) {
351351
struct module *module = (*provider)->module;
@@ -404,18 +404,8 @@ dpusm_provider_put(dpusm_t *dpusm, void *handle) {
404404
return DPUSM_OK;
405405
}
406406

407-
void
408-
dpusm_provider_write_lock(dpusm_t *dpusm) {
409-
write_lock(&dpusm->lock);
410-
}
411-
412-
void
413-
dpusm_provider_write_unlock(dpusm_t *dpusm) {
414-
write_unlock(&dpusm->lock);
415-
}
416-
417407
void dpusm_provider_invalidate(dpusm_t *dpusm, const char *name) {
418-
dpusm_provider_write_lock(dpusm);
408+
mutex_lock(&dpusm->lock);;
419409
dpusm_ph_t **provider = find_provider(dpusm, name);
420410
if (provider && *provider) {
421411
(*provider)->funcs = NULL;
@@ -428,5 +418,5 @@ void dpusm_provider_invalidate(dpusm_t *dpusm, const char *name) {
428418
printk("%s: Error: Did not find provider \"%s\"\n",
429419
__func__, name);
430420
}
431-
dpusm_provider_write_unlock(dpusm);
421+
mutex_unlock(&dpusm->lock);;
432422
}

0 commit comments

Comments
 (0)