[coreboot-gerrit] New patch to review for coreboot: e4c0622 Possible thread stack implementation.

Isaac Christensen (isaac.christensen@se-eng.com) gerrit at coreboot.org
Wed Aug 6 23:55:29 CEST 2014


Isaac Christensen (isaac.christensen at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6513

-gerrit

commit e4c06223da87cca067975853209bc2cd4efe22e5
Author: Ronald G. Minnich <rminnich at gmail.com>
Date:   Wed Aug 21 16:03:32 2013 -0700

    Possible thread stack implementation.
    
    Architecture provides a function for thread stack base, thread code uses it.
    Build and boot tested on Falco with multitasking on and off.
    
    Change-Id: I5016fab47f9954379acf7702ac7965b0a70c88ed
    Signed-off-by: Ronald G. Minnich <rminnich at gmail.com>
    Reviewed-on: https://gerrit.chromium.org/gerrit/66578
    Reviewed-by: Aaron Durbin <adurbin at chromium.org>
    Commit-Queue: Ronald G. Minnich <rminnich at chromium.org>
    Tested-by: Ronald G. Minnich <rminnich at chromium.org>
    (cherry picked from commit 3c6afef30c1a0ad6fba0fb76acc792184d924247)
    Signed-off-by: Isaac Christensen <isaac.christensen at se-eng.com>
---
 src/arch/x86/lib/thread.c | 7 +++++++
 src/include/thread.h      | 5 +++++
 src/lib/thread.c          | 6 ++++--
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/arch/x86/lib/thread.c b/src/arch/x86/lib/thread.c
index 06f8a15..b1549b5 100644
--- a/src/arch/x86/lib/thread.c
+++ b/src/arch/x86/lib/thread.c
@@ -56,3 +56,10 @@ void arch_prepare_thread(struct thread *t,
 
 	t->stack_current = stack;
 }
+
+void *arch_get_thread_stackbase(void)
+{
+	/* defined in c_start.S */
+	extern u8 thread_stacks[];
+	return &thread_stacks[0];
+}
diff --git a/src/include/thread.h b/src/include/thread.h
index 0522337..306aad6 100644
--- a/src/include/thread.h
+++ b/src/include/thread.h
@@ -38,6 +38,11 @@ struct thread {
 };
 
 void threads_initialize(void);
+/* Get the base of the thread stacks.
+ * Returns pointer to CONFIG_NUM_THREADS*CONFIG_STACK_SIZE contiguous bytes
+ * aligned to CONFIG_STACK_SIZE, or NULL.
+ */
+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. */
diff --git a/src/lib/thread.c b/src/lib/thread.c
index 6508bfa..089ae3f 100644
--- a/src/lib/thread.c
+++ b/src/lib/thread.c
@@ -28,7 +28,6 @@ static void idle_thread_init(void);
 
 /* There needs to be at least one thread to run the ramstate state machine. */
 #define TOTAL_NUM_THREADS (CONFIG_NUM_THREADS + 1)
-extern char thread_stacks[CONFIG_NUM_THREADS*CONFIG_STACK_SIZE];
 
 /* Storage space for the thread structs .*/
 static struct thread all_threads[TOTAL_NUM_THREADS];
@@ -259,8 +258,11 @@ void threads_initialize(void)
 {
 	int i;
 	struct thread *t;
-	char *stack_top;
+	u8 *stack_top;
 	struct cpu_info *ci;
+	u8 *thread_stacks;
+
+	thread_stacks = arch_get_thread_stackbase();
 
 	/* Initialize the BSP thread first. The cpu_info structure is assumed
 	 * to be just under the top of the stack. */



More information about the coreboot-gerrit mailing list