On Fri, Feb 14, 2025 at 03:00:21PM +0100, Jerome Forissier wrote: > Add an new internal API called uthread (Kconfig symbol: UTHREAD) which > provides cooperative multi-tasking. The goal is to be able to improve > the performance of some parts of U-Boot by overlapping lengthy > operations. Each uthread has its own stack allocated on the heap. The > default stack size is defined by the UTHREAD_STACK_SIZE symbol and is > used when uthread_create() is passed zero for the stack_sz argument. > > The implementation is based on context-switching via initjmp()/setjmp()/ > longjmp() and is inspired from barebox threads [1]. > > [1] https://github.com/barebox/barebox/blob/master/common/bthread.c > > Signed-off-by: Jerome Forissier <jerome.foriss...@linaro.org> > --- > include/uthread.h | 31 ++++++++++++++ > lib/Kconfig | 19 ++++++++ > lib/Makefile | 2 + > lib/uthread.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 159 insertions(+) > create mode 100644 include/uthread.h > create mode 100644 lib/uthread.c > > diff --git a/lib/Kconfig b/lib/Kconfig > index 1a683dea670..c3416bbd0be 100644 > --- a/lib/Kconfig > +++ b/lib/Kconfig > @@ -1255,6 +1255,25 @@ config PHANDLE_CHECK_SEQ > enable this config option to distinguish them using > phandles in fdtdec_get_alias_seq() function. > > +config UTHREAD > + bool "Enable thread support" > + depends on HAVE_INITJMP > + help > + Implement a simple form of cooperative multi-tasking based on > + context-switching via initjmp(), setjmp() and longjmp(). The > + uthread_ interface enables the main thread of execution to create > + one or more secondary threads and schedule them until they all have > + returned. At any point a thread may suspend its execution and > + schedule another thread, which allows for the efficient multiplexing > + of leghthy operations. > + > +config UTHREAD_STACK_SIZE > + int "Default uthread stack size" > + depends on UTHREAD > + default 32168
Why choose 32168? It's even not a power of two. Typo for 32768? > + help > + The default stask size for uthreads. Each uthread has its own stack. > + > endmenu > > source "lib/fwu_updates/Kconfig" Thanks, Yao Zi