From fae075a7494848ce92703a2b9600a67da60c3ec7 Mon Sep 17 00:00:00 2001 From: Tiago Medicci Serrano Date: Mon, 23 Oct 2023 15:40:09 +0200 Subject: [PATCH] esp32/ble: Lock the scheduler before creating pinned thread This ensures that the thread that has been just created doesn't run before its affinity is set, avoiding it to be scheduled in the wrong CPU core. --- arch/xtensa/src/esp32/esp32_ble_adapter.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/arch/xtensa/src/esp32/esp32_ble_adapter.c b/arch/xtensa/src/esp32/esp32_ble_adapter.c index f3232b86899..22de775e740 100644 --- a/arch/xtensa/src/esp32/esp32_ble_adapter.c +++ b/arch/xtensa/src/esp32/esp32_ble_adapter.c @@ -772,6 +772,15 @@ static int32_t esp_task_create_pinned_to_core(void *entry, DEBUGASSERT(task_handle != NULL); +#ifdef CONFIG_SMP + ret = sched_lock(); + if (ret) + { + wlerr("Failed to lock scheduler before creating pinned thread\n"); + return false; + } +#endif + pid = kthread_create(name, prio, stack_depth, entry, (char * const *)param); if (pid > 0) @@ -800,6 +809,15 @@ static int32_t esp_task_create_pinned_to_core(void *entry, wlerr("Failed to create task, error %d\n", pid); } +#ifdef CONFIG_SMP + ret = sched_unlock(); + if (ret) + { + wlerr("Failed to unlock scheduler after creating pinned thread\n"); + return false; + } +#endif + return pid > 0; }