Skip to content

Commit 5ef8a57

Browse files
nordicjmnashif
authored andcommitted
settings: Only use mutexes when multithreading is enabled
Allows usage of settings when multithreading is disabled Signed-off-by: Jamie McCrae <[email protected]>
1 parent 4c93fcd commit 5ef8a57

File tree

4 files changed

+38
-19
lines changed

4 files changed

+38
-19
lines changed

subsys/settings/src/settings.c

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ LOG_MODULE_REGISTER(settings, CONFIG_SETTINGS_LOG_LEVEL);
2323
sys_slist_t settings_handlers;
2424
#endif /* CONFIG_SETTINGS_DYNAMIC_HANDLERS */
2525

26-
K_MUTEX_DEFINE(settings_lock);
27-
26+
#ifdef CONFIG_MULTITHREADING
27+
static K_MUTEX_DEFINE(settings_lock);
28+
#endif
2829

2930
void settings_store_init(void);
3031

@@ -47,7 +48,7 @@ int settings_register_with_cprio(struct settings_handler *handler, int cprio)
4748
}
4849
}
4950

50-
k_mutex_lock(&settings_lock, K_FOREVER);
51+
settings_lock_take();
5152

5253
struct settings_handler *ch;
5354
SYS_SLIST_FOR_EACH_CONTAINER(&settings_handlers, ch, node) {
@@ -61,7 +62,7 @@ int settings_register_with_cprio(struct settings_handler *handler, int cprio)
6162
sys_slist_append(&settings_handlers, &handler->node);
6263

6364
end:
64-
k_mutex_unlock(&settings_lock);
65+
settings_lock_release();
6566
return rc;
6667
}
6768

@@ -319,3 +320,17 @@ int settings_commit_subtree(const char *subtree)
319320

320321
return rc;
321322
}
323+
324+
void settings_lock_take(void)
325+
{
326+
#ifdef CONFIG_MULTITHREADING
327+
k_mutex_lock(&settings_lock, K_FOREVER);
328+
#endif
329+
}
330+
331+
void settings_lock_release(void)
332+
{
333+
#ifdef CONFIG_MULTITHREADING
334+
k_mutex_unlock(&settings_lock);
335+
#endif
336+
}

subsys/settings/src/settings_init.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
#include <zephyr/settings/settings.h>
1515
#include "settings/settings_file.h"
1616
#include <zephyr/kernel.h>
17-
18-
extern struct k_mutex settings_lock;
17+
#include "settings_priv.h"
1918

2019
bool settings_subsys_initialized;
2120

@@ -28,7 +27,7 @@ int settings_subsys_init(void)
2827

2928
int err = 0;
3029

31-
k_mutex_lock(&settings_lock, K_FOREVER);
30+
settings_lock_take();
3231

3332
if (!settings_subsys_initialized) {
3433
settings_init();
@@ -40,7 +39,7 @@ int settings_subsys_init(void)
4039
}
4140
}
4241

43-
k_mutex_unlock(&settings_lock);
42+
settings_lock_release();
4443

4544
return err;
4645
}

subsys/settings/src/settings_priv.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,12 @@ extern sys_slist_t settings_load_srcs;
111111
extern sys_slist_t settings_handlers;
112112
extern struct settings_store *settings_save_dst;
113113

114+
/** Takes the settings mutex lock (if multithreading is enabled) */
115+
void settings_lock_take(void);
116+
117+
/** Releases the settings mutex lock (if multithreading is enabled) */
118+
void settings_lock_release(void);
119+
114120
#ifdef __cplusplus
115121
}
116122
#endif

subsys/settings/src/settings_store.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ LOG_MODULE_DECLARE(settings, CONFIG_SETTINGS_LOG_LEVEL);
2222

2323
sys_slist_t settings_load_srcs;
2424
struct settings_store *settings_save_dst;
25-
extern struct k_mutex settings_lock;
2625

2726
void settings_src_register(struct settings_store *cs)
2827
{
@@ -53,12 +52,12 @@ int settings_load_subtree(const char *subtree)
5352
* apply config
5453
* commit all
5554
*/
56-
k_mutex_lock(&settings_lock, K_FOREVER);
55+
settings_lock_take();
5756
SYS_SLIST_FOR_EACH_CONTAINER(&settings_load_srcs, cs, cs_next) {
5857
cs->cs_itf->csi_load(cs, &arg);
5958
}
6059
rc = settings_commit_subtree(subtree);
61-
k_mutex_unlock(&settings_lock);
60+
settings_lock_release();
6261
return rc;
6362
}
6463

@@ -80,11 +79,11 @@ int settings_load_subtree_direct(
8079
* apply config
8180
* commit all
8281
*/
83-
k_mutex_lock(&settings_lock, K_FOREVER);
82+
settings_lock_take();
8483
SYS_SLIST_FOR_EACH_CONTAINER(&settings_load_srcs, cs, cs_next) {
8584
cs->cs_itf->csi_load(cs, &arg);
8685
}
87-
k_mutex_unlock(&settings_lock);
86+
settings_lock_release();
8887
return 0;
8988
}
9089

@@ -144,7 +143,7 @@ ssize_t settings_get_val_len(const char *name)
144143
* for every config store that supports this function
145144
* get the value's length.
146145
*/
147-
k_mutex_lock(&settings_lock, K_FOREVER);
146+
settings_lock_take();
148147
SYS_SLIST_FOR_EACH_CONTAINER(&settings_load_srcs, cs, cs_next) {
149148
if (cs->cs_itf->csi_get_val_len) {
150149
val_len = cs->cs_itf->csi_get_val_len(cs, name);
@@ -157,7 +156,7 @@ ssize_t settings_get_val_len(const char *name)
157156
rc = cs->cs_itf->csi_load(cs, &arg);
158157
}
159158
}
160-
k_mutex_unlock(&settings_lock);
159+
settings_lock_release();
161160

162161
if (rc >= 0) {
163162
return val_len;
@@ -177,7 +176,7 @@ ssize_t settings_load_one(const char *name, void *buf, size_t buf_len)
177176
* For every config store that defines csi_load_one() function use it.
178177
* Otherwise, use the csi_load() function to load the key/value pair
179178
*/
180-
k_mutex_lock(&settings_lock, K_FOREVER);
179+
settings_lock_take();
181180
SYS_SLIST_FOR_EACH_CONTAINER(&settings_load_srcs, cs, cs_next) {
182181
if (cs->cs_itf->csi_load_one) {
183182
rc = cs->cs_itf->csi_load_one(cs, name, (char *)buf, buf_len);
@@ -196,7 +195,7 @@ ssize_t settings_load_one(const char *name, void *buf, size_t buf_len)
196195
rc = cs->cs_itf->csi_load(cs, &arg);
197196
}
198197
}
199-
k_mutex_unlock(&settings_lock);
198+
settings_lock_release();
200199

201200
if (rc >= 0) {
202201
return val_len;
@@ -217,11 +216,11 @@ int settings_save_one(const char *name, const void *value, size_t val_len)
217216
return -ENOENT;
218217
}
219218

220-
k_mutex_lock(&settings_lock, K_FOREVER);
219+
settings_lock_take();
221220

222221
rc = cs->cs_itf->csi_save(cs, name, (char *)value, val_len);
223222

224-
k_mutex_unlock(&settings_lock);
223+
settings_lock_release();
225224

226225
return rc;
227226
}

0 commit comments

Comments
 (0)