From 3b4b7c3a37fcdf6076638ec3b1f207ceeee82caa Mon Sep 17 00:00:00 2001 From: Krzysztof Chruscinski Date: Mon, 19 Apr 2021 08:58:13 +0200 Subject: [PATCH] kernel: mem_slab: Add support to no multithreading Mem_slab supports allocation with timeout which blocks the context if no slab is available. Updated to treat every timeout as K_NO_WAIT when multithreading is disabled. Signed-off-by: Krzysztof Chruscinski --- include/kernel.h | 1 + kernel/mem_slab.c | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/kernel.h b/include/kernel.h index 638d65d70fa..7edb398d40f 100644 --- a/include/kernel.h +++ b/include/kernel.h @@ -4841,6 +4841,7 @@ extern int k_mem_slab_init(struct k_mem_slab *slab, void *buffer, * This routine allocates a memory block from a memory slab. * * @note @a timeout must be set to K_NO_WAIT if called from ISR. + * @note When CONFIG_MULTITHREADING=n any @timeout is treated as K_NO_WAIT. * * @funcprops \isr_ok * diff --git a/kernel/mem_slab.c b/kernel/mem_slab.c index 30fa1410ad1..883a97cf1b6 100644 --- a/kernel/mem_slab.c +++ b/kernel/mem_slab.c @@ -121,7 +121,8 @@ int k_mem_slab_alloc(struct k_mem_slab *slab, void **mem, k_timeout_t timeout) #endif result = 0; - } else if (K_TIMEOUT_EQ(timeout, K_NO_WAIT)) { + } else if (K_TIMEOUT_EQ(timeout, K_NO_WAIT) || + !IS_ENABLED(CONFIG_MULTITHREADING)) { /* don't wait for a free block to become available */ *mem = NULL; result = -ENOMEM; @@ -143,7 +144,7 @@ void k_mem_slab_free(struct k_mem_slab *slab, void **mem) { k_spinlock_key_t key = k_spin_lock(&slab->lock); - if (slab->free_list == NULL) { + if (slab->free_list == NULL && IS_ENABLED(CONFIG_MULTITHREADING)) { struct k_thread *pending_thread = z_unpend_first_thread(&slab->wait_q); if (pending_thread != NULL) {