mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-11 09:47:00 +02:00
Add a 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, and also implement background jobs in the U-Boot shell. 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() receives zero for the stack_sz argument. The implementation is based on context-switching via initjmp()/setjmp()/ longjmp() and is inspired from barebox threads [1]. A notion of thread group helps with dependencies, such as when a thread needs to block until a number of other threads have returned. The name "uthread" comes from "user-space threads" because the scheduling happens with no help from a higher privileged mode, contrary to more complex models where kernel threads are defined. But the 'u' may as well stand for 'U-Boot' since the bootloader may actually be running at any privilege level and the notion of user vs. kernel may not make much sense in this context. [1] https://github.com/barebox/barebox/blob/master/common/bthread.c Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> |
||
---|---|---|
.. | ||
bootcount.rst | ||
clk.rst | ||
dfu.rst | ||
dm.rst | ||
efi.rst | ||
event.rst | ||
fs.rst | ||
getopt.rst | ||
index.rst | ||
interrupt.rst | ||
led.rst | ||
linker_lists.rst | ||
lmb.rst | ||
logging.rst | ||
nvmem.rst | ||
part.rst | ||
pinctrl.rst | ||
rng.rst | ||
sandbox.rst | ||
serial.rst | ||
setjmp.rst | ||
sysreset.rst | ||
timer.rst | ||
unicode.rst | ||
uthread.rst |