From 0269dd284e334fef121a93547cf2a81e065109bb Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Fri, 17 Jan 2014 01:44:46 +0100 Subject: [PATCH] Revert "scheduler: SCHEDULER_EXIT_FUNCTION() is not needed" This reverts commit 667617ad043a4587d8d366d5192d9ad291cfa37a. Scheduler profiler uses CPU local data to store function information, hence arch_thread_context_switch() usually is not a problem. However, when we switch to a new thread we end up scheduler_new_thread_entry() instead of scheduler_reschedule() what may corrupt data collected by the profiler. --- src/system/kernel/scheduler/scheduler.cpp | 2 ++ src/system/kernel/scheduler/scheduler_profiler.h | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/system/kernel/scheduler/scheduler.cpp b/src/system/kernel/scheduler/scheduler.cpp index 2a4dbb12e7..6437cb0d32 100644 --- a/src/system/kernel/scheduler/scheduler.cpp +++ b/src/system/kernel/scheduler/scheduler.cpp @@ -495,6 +495,8 @@ reschedule(int32 nextState) modeLocker.Unlock(); + SCHEDULER_EXIT_FUNCTION(); + if (nextThread != oldThread) switch_thread(oldThread, nextThread); } diff --git a/src/system/kernel/scheduler/scheduler_profiler.h b/src/system/kernel/scheduler/scheduler_profiler.h index e6c95b5703..d2c1bfca3d 100644 --- a/src/system/kernel/scheduler/scheduler_profiler.h +++ b/src/system/kernel/scheduler/scheduler_profiler.h @@ -16,6 +16,9 @@ #define SCHEDULER_ENTER_FUNCTION() \ Scheduler::Profiling::Function schedulerProfiler(__PRETTY_FUNCTION__) +#define SCHEDULER_EXIT_FUNCTION() \ + schedulerProfiler.Exit() + namespace Scheduler { @@ -124,6 +127,7 @@ Function::Exit() #else // SCHEDULER_PROFILING #define SCHEDULER_ENTER_FUNCTION() (void)0 +#define SCHEDULER_EXIT_FUNCTION() (void)0 #endif // !SCHEDULER_PROFILING