Skip to content

Commit aab2687

Browse files
committed
mutex_lock_interruptible
1 parent aa5fb00 commit aab2687

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

src/dpusm.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ dpusm_init(void) {
7777

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

8282
const int active = atomic_read(&dpusm.active);
8383
if (unlikely(active)) {

src/provider.c

+10-10
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-
mutex_lock(&dpusm->lock);;
268+
while (mutex_lock_interruptible(&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-
mutex_unlock(&dpusm->lock);;
274+
mutex_unlock(&dpusm->lock);
275275
return -EEXIST;
276276
}
277277

278278
dpusm_ph_t *provider = dpusmph_init(module, funcs);
279279
if (!provider) {
280-
mutex_unlock(&dpusm->lock);;
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-
mutex_unlock(&dpusm->lock);;
289+
mutex_unlock(&dpusm->lock);
290290

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

323323
int
324324
dpusm_provider_unregister(dpusm_t *dpusm, struct module *module) {
325-
mutex_lock(&dpusm->lock);;
325+
while (mutex_lock_interruptible(&dpusm->lock));
326326

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

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

338-
mutex_unlock(&dpusm->lock);;
338+
mutex_unlock(&dpusm->lock);
339339
return rc;
340340
}
341341

@@ -347,7 +347,7 @@ dpusm_provider_unregister(dpusm_t *dpusm, struct module *module) {
347347
/* get a provider by name */
348348
dpusm_ph_t **
349349
dpusm_provider_get(dpusm_t *dpusm, const char *name) {
350-
mutex_lock(&dpusm->lock);
350+
while (mutex_lock_interruptible(&dpusm->lock));
351351
dpusm_ph_t **provider = find_provider(dpusm, name);
352352
if (provider) {
353353
struct module *module = (*provider)->module;
@@ -407,7 +407,7 @@ dpusm_provider_put(dpusm_t *dpusm, void *handle) {
407407
}
408408

409409
void dpusm_provider_invalidate(dpusm_t *dpusm, const char *name) {
410-
mutex_lock(&dpusm->lock);;
410+
while (mutex_lock_interruptible(&dpusm->lock));
411411
dpusm_ph_t **provider = find_provider(dpusm, name);
412412
if (provider && *provider) {
413413
(*provider)->funcs = NULL;
@@ -420,5 +420,5 @@ void dpusm_provider_invalidate(dpusm_t *dpusm, const char *name) {
420420
printk("%s: Error: Did not find provider \"%s\"\n",
421421
__func__, name);
422422
}
423-
mutex_unlock(&dpusm->lock);;
423+
mutex_unlock(&dpusm->lock);
424424
}

0 commit comments

Comments
 (0)