Changeset b23c88e in mainline for kernel/generic/src/preempt/preemption.c
- Timestamp:
- 2012-07-11T05:45:48Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- b68ae24
- Parents:
- 9f8745c5
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/preempt/preemption.c
r9f8745c5 rb23c88e 38 38 #include <preemption.h> 39 39 #include <arch.h> 40 #include <arch/asm.h> 41 #include <arch/barrier.h> 40 #include <compiler/barrier.h> 42 41 #include <debug.h> 42 #include <proc/scheduler.h> 43 43 44 44 /** Increment preemption disabled counter. */ … … 46 46 { 47 47 THE->preemption_disabled++; 48 memory_barrier();48 compiler_barrier(); 49 49 } 50 50 … … 52 52 void preemption_enable(void) 53 53 { 54 preemption_enable_noresched(); 55 56 if (PREEMPTION_ENABLED && THREAD && THREAD->need_resched) { 57 preemption_enabled_scheduler(); 58 } 59 } 60 61 /** Decrement preemption disabled counter. */ 62 void preemption_enable_noresched(void) 63 { 54 64 ASSERT(PREEMPTION_DISABLED); 55 memory_barrier();65 compiler_barrier(); 56 66 THE->preemption_disabled--; 67 } 68 69 /** Preemption was enabled. Calls scheduler(). */ 70 void preemption_enabled_scheduler(void) 71 { 72 ASSERT(PREEMPTION_ENABLED); 73 74 /* 75 * Avoid a race between a thread about to invoke the scheduler() 76 * after checking THREAD->need_resched and an interrupt that 77 * occurs right after the check. 78 * 79 * Also ensures that code that relies on disabled interrupts 80 * to suppress preemption continues to work. 81 */ 82 if (!interrupts_disabled()) { 83 scheduler(); 84 } 57 85 } 58 86
Note:
See TracChangeset
for help on using the changeset viewer.