projects
/
pintos-anon
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
thread: Do not disable interrupts unnecessarily while initializing stack.
[pintos-anon]
/
src
/
threads
/
thread.c
diff --git
a/src/threads/thread.c
b/src/threads/thread.c
index 955ccdcfef958179dd285de2f4049e96c37c77ba..87f22b80607b4faba8ae2b1e9f93dc5d6659d8cc 100644
(file)
--- a/
src/threads/thread.c
+++ b/
src/threads/thread.c
@@
-171,7
+171,6
@@
thread_create (const char *name, int priority,
struct switch_entry_frame *ef;
struct switch_threads_frame *sf;
tid_t tid;
struct switch_entry_frame *ef;
struct switch_threads_frame *sf;
tid_t tid;
- enum intr_level old_level;
ASSERT (function != NULL);
ASSERT (function != NULL);
@@
-184,11
+183,6
@@
thread_create (const char *name, int priority,
init_thread (t, name, priority);
tid = t->tid = allocate_tid ();
init_thread (t, name, priority);
tid = t->tid = allocate_tid ();
- /* Prepare thread for first run by initializing its stack.
- Do this atomically so intermediate values for the 'stack'
- member cannot be observed. */
- old_level = intr_disable ();
-
/* Stack frame for kernel_thread(). */
kf = alloc_frame (t, sizeof *kf);
kf->eip = NULL;
/* Stack frame for kernel_thread(). */
kf = alloc_frame (t, sizeof *kf);
kf->eip = NULL;
@@
-204,8
+198,6
@@
thread_create (const char *name, int priority,
sf->eip = switch_entry;
sf->ebp = 0;
sf->eip = switch_entry;
sf->ebp = 0;
- intr_set_level (old_level);
-
/* Add to run queue. */
thread_unblock (t);
/* Add to run queue. */
thread_unblock (t);
@@
-459,6
+451,8
@@
is_thread (struct thread *t)
static void
init_thread (struct thread *t, const char *name, int priority)
{
static void
init_thread (struct thread *t, const char *name, int priority)
{
+ enum intr_level old_level;
+
ASSERT (t != NULL);
ASSERT (PRI_MIN <= priority && priority <= PRI_MAX);
ASSERT (name != NULL);
ASSERT (t != NULL);
ASSERT (PRI_MIN <= priority && priority <= PRI_MAX);
ASSERT (name != NULL);
@@
-469,7
+463,10
@@
init_thread (struct thread *t, const char *name, int priority)
t->stack = (uint8_t *) t + PGSIZE;
t->priority = priority;
t->magic = THREAD_MAGIC;
t->stack = (uint8_t *) t + PGSIZE;
t->priority = priority;
t->magic = THREAD_MAGIC;
+
+ old_level = intr_disable ();
list_push_back (&all_list, &t->allelem);
list_push_back (&all_list, &t->allelem);
+ intr_set_level (old_level);
}
/* Allocates a SIZE-byte frame at the top of thread T's stack and
}
/* Allocates a SIZE-byte frame at the top of thread T's stack and