Blocking operations on the high priority system workqueue may result in deadlocks, particularly when Bluetooth is in use.
27 lines
770 B
C
27 lines
770 B
C
/*
|
|
* Copyright (c) 2023 The ZMK Contributors
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
#include <zephyr/kernel.h>
|
|
#include <zephyr/device.h>
|
|
|
|
#include <zmk/workqueue.h>
|
|
|
|
K_THREAD_STACK_DEFINE(lowprio_q_stack, CONFIG_ZMK_LOW_PRIORITY_THREAD_STACK_SIZE);
|
|
|
|
static struct k_work_q lowprio_work_q;
|
|
|
|
struct k_work_q *zmk_workqueue_lowprio_work_q() {
|
|
return &lowprio_work_q;
|
|
}
|
|
|
|
static int workqueue_init() {
|
|
static const struct k_work_queue_config queue_config = {.name = "Low Priority Work Queue"};
|
|
k_work_queue_start(&lowprio_work_q, lowprio_q_stack, K_THREAD_STACK_SIZEOF(lowprio_q_stack),
|
|
CONFIG_ZMK_LOW_PRIORITY_THREAD_PRIORITY, &queue_config);
|
|
return 0;
|
|
}
|
|
|
|
SYS_INIT(workqueue_init, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);
|