BACKPORT: coreboot: add thread cooperative multitasking
The cooperative multitasking support allows the boot state machine to be ran cooperatively with other threads of work. The main thread still continues to run the boot state machine (src/lib/hardwaremain.c). All callbacks from the state machine are still ran synchronously from within the main thread's context. Without any other code added the only change to the boot sequence when cooperative multitasking is enabled is the queueing of an idlle thread. The idle thread is responsible for ensuring progress is made by calling timer callbacks. The main thread can yield to any other threads in the system. That means that anyone that spins up a thread must ensure no shared resources are used from 2 or more execution contexts. The support is originally intentioned to allow for long work itesm with busy loops to occur in parallel during a boot. Note that the intention on when to yield a thread will be on calls to udelay(). BUG=None BRANCH=None TEST=Built. Change-Id: I980a6daf8ea3f0475124329253ace2695fc39aa7 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/51162 Reviewed-by: Ronald G. Minnich <rminnich@chromium.org>
This commit is contained in:
parent
645f47bdb4
commit
c451834963
7 changed files with 489 additions and 0 deletions
|
|
@ -30,9 +30,14 @@ struct cpu_driver {
|
|||
struct cpu_device_id *id_table;
|
||||
};
|
||||
|
||||
struct thread;
|
||||
|
||||
struct cpu_info {
|
||||
device_t cpu;
|
||||
unsigned long index;
|
||||
#if CONFIG_COOP_MULTITASKING
|
||||
struct thread *thread;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct cpuinfo_arm {
|
||||
|
|
|
|||
|
|
@ -159,9 +159,14 @@ struct cpu_driver {
|
|||
|
||||
struct cpu_driver *find_cpu_driver(struct device *cpu);
|
||||
|
||||
struct thread;
|
||||
|
||||
struct cpu_info {
|
||||
device_t cpu;
|
||||
unsigned int index;
|
||||
#if CONFIG_COOP_MULTITASKING
|
||||
struct thread *thread;
|
||||
#endif
|
||||
};
|
||||
|
||||
static inline struct cpu_info *cpu_info(void)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue