Raul Rangel has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/56351 )
Change subject: lib/thread: Make thread_run not block the current state ......................................................................
lib/thread: Make thread_run not block the current state
If a thread wants to block a state transition it can use thread_run_until. Otherwise just let the thread run. `thread_join` can be used to block on the thread. Boot states are also a ramstage concept. If we want to use this API in any other stage, we need a way of starting a thread without talking about stages.
BUG=b:179699789 TEST=verify thread_run no longer blocks the current state
Signed-off-by: Raul E Rangel rrangel@chromium.org Change-Id: I3e5b0aed70385ddcd23ffcf7b063f8ccb547fc05 --- M src/include/thread.h M src/lib/thread.c 2 files changed, 3 insertions(+), 16 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/51/56351/1
diff --git a/src/include/thread.h b/src/include/thread.h index ff3212b..aa1531d 100644 --- a/src/include/thread.h +++ b/src/include/thread.h @@ -46,9 +46,8 @@ */ void *arch_get_thread_stackbase(void); /* Run func(arrg) on a new thread. Return 0 on successful start of thread, < 0 - * when thread could not be started. Note that the thread will block the - * current state in the boot state machine until it is complete. The thread - * handle if populated, will reflect the state and return code of the thread. + * when thread could not be started. The thread handle if populated, will + * reflect the state and return code of the thread. */ int thread_run(struct thread_handle *handle, enum cb_err (*func)(void *), void *arg); /* thread_run_until is the same as thread_run() except that it blocks state diff --git a/src/lib/thread.c b/src/lib/thread.c index 5ac740a..a1d06b8 100644 --- a/src/lib/thread.c +++ b/src/lib/thread.c @@ -161,18 +161,6 @@ terminate_thread(current, error); }
-/* Block the current state transitions until thread is complete. */ -static void asmlinkage call_wrapper_block_current(void *unused) -{ - struct thread *current = current_thread(); - enum cb_err error; - - boot_state_current_block(); - error = current->entry(current->entry_arg); - boot_state_current_unblock(); - terminate_thread(current, error); -} - struct block_boot_state { boot_state_t state; boot_state_sequence_t seq; @@ -310,7 +298,7 @@ return -1; }
- prepare_thread(t, handle, func, arg, call_wrapper_block_current, NULL); + prepare_thread(t, handle, func, arg, call_wrapper, NULL); schedule(t);
return 0;