From: Ben Pfaff Date: Sat, 12 Feb 2011 18:04:27 +0000 (-0800) Subject: thread: Do not disable interrupts unnecessarily while initializing stack. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6821b6b42b3c9978d3b36728e2fd8dedaec4d20f;p=pintos-anon thread: Do not disable interrupts unnecessarily while initializing stack. Reported by Francis Russell . --- diff --git a/solutions/p1.patch b/solutions/p1.patch index 046989f..30c0ddd 100644 --- a/solutions/p1.patch +++ b/solutions/p1.patch @@ -459,7 +459,7 @@ diff -Nur ../../src/threads/thread.c src/threads/thread.c } /* Prints thread statistics. */ -@@ -166,12 +214,13 @@ +@@ -166,11 +214,12 @@ thread_create (const char *name, int priority, thread_func *function, void *aux) { @@ -468,9 +468,7 @@ diff -Nur ../../src/threads/thread.c src/threads/thread.c struct kernel_thread_frame *kf; struct switch_entry_frame *ef; struct switch_threads_frame *sf; -- tid_t tid; - enum intr_level old_level; -+ tid_t tid; + tid_t tid; ASSERT (function != NULL); diff --git a/src/threads/thread.c b/src/threads/thread.c index d68c123..87f22b8 100644 --- 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; - enum intr_level old_level; ASSERT (function != NULL); @@ -184,11 +183,6 @@ thread_create (const char *name, int priority, 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; @@ -204,8 +198,6 @@ thread_create (const char *name, int priority, sf->eip = switch_entry; sf->ebp = 0; - intr_set_level (old_level); - /* Add to run queue. */ thread_unblock (t);