[haiku-commits] r41847 - in haiku/branches/developer/bonefish/signals: headers/private/kernel src/system/kernel/scheduler

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 31 May 2011 00:37:46 +0200 (CEST)

Author: bonefish
Date: 2011-05-31 00:37:46 +0200 (Tue, 31 May 2011)
New Revision: 41847
Changeset: https://dev.haiku-os.org/changeset/41847

Modified:
   haiku/branches/developer/bonefish/signals/headers/private/kernel/kscheduler.h
   
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler.cpp
   
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler_affine.cpp
   
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler_simple.cpp
   
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler_simple_smp.cpp
Log:
Moved function context_switch(), which was duplicated in all scheduler
implementations, to scheduler.cpp and renamed it to scheduler_switch_thread().


Modified: 
haiku/branches/developer/bonefish/signals/headers/private/kernel/kscheduler.h
===================================================================
--- 
haiku/branches/developer/bonefish/signals/headers/private/kernel/kscheduler.h   
    2011-05-30 22:31:59 UTC (rev 41846)
+++ 
haiku/branches/developer/bonefish/signals/headers/private/kernel/kscheduler.h   
    2011-05-30 22:37:46 UTC (rev 41847)
@@ -89,6 +89,8 @@
 extern "C" {
 #endif
 
+void scheduler_switch_thread(Thread* fromThread, Thread* toThread);
+
 void scheduler_add_listener(struct SchedulerListener* listener);
 void scheduler_remove_listener(struct SchedulerListener* listener);
 

Modified: 
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler.cpp
===================================================================
--- 
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler.cpp
 2011-05-30 22:31:59 UTC (rev 41846)
+++ 
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler.cpp
 2011-05-30 22:37:46 UTC (rev 41847)
@@ -31,7 +31,7 @@
 }
 
 
-// #pragma mark -
+// #pragma mark - SchedulerListener
 
 
 SchedulerListener::~SchedulerListener()
@@ -39,6 +39,38 @@
 }
 
 
+// #pragma mark - kernel private
+
+
+/*!    Switches the currently running thread.
+       This is a service function for scheduler implementations.
+
+       \param fromThread The currently running thread.
+       \param toThread The thread to switch to. Must be different from
+               \a fromThread.
+*/
+void
+scheduler_switch_thread(Thread* fromThread, Thread* toThread)
+{
+       if ((fromThread->flags & THREAD_FLAGS_DEBUGGER_INSTALLED) != 0)
+               user_debug_thread_unscheduled(fromThread);
+
+       cpu_ent* cpu = fromThread->cpu;
+       toThread->previous_cpu = toThread->cpu = cpu;
+       fromThread->cpu = NULL;
+       cpu->running_thread = toThread;
+
+       arch_thread_set_current_thread(toThread);
+       arch_thread_context_switch(fromThread, toThread);
+
+       // Looks weird, but is correct. fromThread had been unscheduled earlier,
+       // but is back now. The notification for a thread scheduled the first 
time
+       // happens in thread.cpp:thread_kthread_entry().
+       if ((fromThread->flags & THREAD_FLAGS_DEBUGGER_INSTALLED) != 0)
+               user_debug_thread_scheduled(fromThread);
+}
+
+
 /*!    Add the given scheduler listener. Thread lock must be held.
 */
 void

Modified: 
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler_affine.cpp
===================================================================
--- 
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler_affine.cpp
  2011-05-30 22:31:59 UTC (rev 41846)
+++ 
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler_affine.cpp
  2011-05-30 22:37:46 UTC (rev 41847)
@@ -339,28 +339,6 @@
 }
 
 
-static void
-context_switch(Thread *fromThread, Thread *toThread)
-{
-       if ((fromThread->flags & THREAD_FLAGS_DEBUGGER_INSTALLED) != 0)
-               user_debug_thread_unscheduled(fromThread);
-
-       cpu_ent* cpu = fromThread->cpu;
-       toThread->previous_cpu = toThread->cpu = cpu;
-       fromThread->cpu = NULL;
-       cpu->running_thread = toThread;
-
-       arch_thread_set_current_thread(toThread);
-       arch_thread_context_switch(fromThread, toThread);
-
-       // Looks weird, but is correct. fromThread had been unscheduled earlier,
-       // but is back now. The notification for a thread scheduled the first 
time
-       // happens in thread.cpp:thread_kthread_entry().
-       if ((fromThread->flags & THREAD_FLAGS_DEBUGGER_INSTALLED) != 0)
-               user_debug_thread_scheduled(fromThread);
-}
-
-
 static int32
 reschedule_event(timer *unused)
 {
@@ -528,7 +506,7 @@
                        B_ONE_SHOT_RELATIVE_TIMER | 
B_TIMER_ACQUIRE_SCHEDULER_LOCK);
 
                if (nextThread != oldThread)
-                       context_switch(oldThread, nextThread);
+                       scheduler_switch_thread(oldThread, nextThread);
        }
 }
 

Modified: 
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler_simple.cpp
===================================================================
--- 
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler_simple.cpp
  2011-05-30 22:31:59 UTC (rev 41846)
+++ 
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler_simple.cpp
  2011-05-30 22:37:46 UTC (rev 41847)
@@ -179,28 +179,6 @@
 }
 
 
-static void
-context_switch(Thread *fromThread, Thread *toThread)
-{
-       if ((fromThread->flags & THREAD_FLAGS_DEBUGGER_INSTALLED) != 0)
-               user_debug_thread_unscheduled(fromThread);
-
-       cpu_ent* cpu = fromThread->cpu;
-       toThread->previous_cpu = toThread->cpu = cpu;
-       fromThread->cpu = NULL;
-       cpu->running_thread = toThread;
-
-       arch_thread_set_current_thread(toThread);
-       arch_thread_context_switch(fromThread, toThread);
-
-       // Looks weird, but is correct. fromThread had been unscheduled earlier,
-       // but is back now. The notification for a thread scheduled the first 
time
-       // happens in thread.cpp:thread_kthread_entry().
-       if ((fromThread->flags & THREAD_FLAGS_DEBUGGER_INSTALLED) != 0)
-               user_debug_thread_scheduled(fromThread);
-}
-
-
 static int32
 reschedule_event(timer *unused)
 {
@@ -352,7 +330,7 @@
                        B_ONE_SHOT_RELATIVE_TIMER | 
B_TIMER_ACQUIRE_SCHEDULER_LOCK);
 
                if (nextThread != oldThread)
-                       context_switch(oldThread, nextThread);
+                       scheduler_switch_thread(oldThread, nextThread);
        }
 }
 

Modified: 
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler_simple_smp.cpp
===================================================================
--- 
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler_simple_smp.cpp
      2011-05-30 22:31:59 UTC (rev 41846)
+++ 
haiku/branches/developer/bonefish/signals/src/system/kernel/scheduler/scheduler_simple_smp.cpp
      2011-05-30 22:37:46 UTC (rev 41847)
@@ -244,28 +244,6 @@
 }
 
 
-static void
-context_switch(Thread *fromThread, Thread *toThread)
-{
-       if ((fromThread->flags & THREAD_FLAGS_DEBUGGER_INSTALLED) != 0)
-               user_debug_thread_unscheduled(fromThread);
-
-       cpu_ent* cpu = fromThread->cpu;
-       toThread->previous_cpu = toThread->cpu = cpu;
-       fromThread->cpu = NULL;
-       cpu->running_thread = toThread;
-
-       arch_thread_set_current_thread(toThread);
-       arch_thread_context_switch(fromThread, toThread);
-
-       // Looks weird, but is correct. fromThread had been unscheduled earlier,
-       // but is back now. The notification for a thread scheduled the first 
time
-       // happens in thread.cpp:thread_kthread_entry().
-       if ((fromThread->flags & THREAD_FLAGS_DEBUGGER_INSTALLED) != 0)
-               user_debug_thread_scheduled(fromThread);
-}
-
-
 static int32
 reschedule_event(timer *unused)
 {
@@ -451,7 +429,7 @@
                        B_ONE_SHOT_RELATIVE_TIMER | 
B_TIMER_ACQUIRE_SCHEDULER_LOCK);
 
                if (nextThread != oldThread)
-                       context_switch(oldThread, nextThread);
+                       scheduler_switch_thread(oldThread, nextThread);
        }
 }
 


Other related posts: