Rev 5272 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5272 | Rev 6082 | ||
---|---|---|---|
Line 28... | Line 28... | ||
28 | } |
28 | } |
Line 29... | Line 29... | ||
29 | 29 | ||
30 | /* |
30 | /* |
31 | * must be macros to avoid header recursion hell |
31 | * must be macros to avoid header recursion hell |
32 | */ |
32 | */ |
33 | #define init_task_preempt_count(p) do { \ |
- | |
34 | task_thread_info(p)->saved_preempt_count = PREEMPT_DISABLED; \ |
- | |
Line 35... | Line 33... | ||
35 | } while (0) |
33 | #define init_task_preempt_count(p) do { } while (0) |
36 | - | ||
37 | #define init_idle_preempt_count(p, cpu) do { \ |
34 | |
38 | task_thread_info(p)->saved_preempt_count = PREEMPT_ENABLED; \ |
35 | #define init_idle_preempt_count(p, cpu) do { \ |
Line 39... | Line 36... | ||
39 | per_cpu(__preempt_count, (cpu)) = PREEMPT_ENABLED; \ |
36 | per_cpu(__preempt_count, (cpu)) = PREEMPT_ENABLED; \ |
40 | } while (0) |
37 | } while (0) |
Line 88... | Line 85... | ||
88 | } |
85 | } |
Line 89... | Line 86... | ||
89 | 86 | ||
90 | /* |
87 | /* |
91 | * Returns true when we need to resched and can (barring IRQ state). |
88 | * Returns true when we need to resched and can (barring IRQ state). |
92 | */ |
89 | */ |
93 | static __always_inline bool should_resched(void) |
90 | static __always_inline bool should_resched(int preempt_offset) |
94 | { |
91 | { |
95 | return unlikely(!raw_cpu_read_4(__preempt_count)); |
92 | return unlikely(raw_cpu_read_4(__preempt_count) == preempt_offset); |
Line 96... | Line 93... | ||
96 | } |
93 | } |
97 | 94 | ||
98 | #ifdef CONFIG_PREEMPT |
95 | #ifdef CONFIG_PREEMPT |
99 | extern asmlinkage void ___preempt_schedule(void); |
96 | extern asmlinkage void ___preempt_schedule(void); |
100 | # define __preempt_schedule() asm ("call ___preempt_schedule") |
- | |
101 | extern asmlinkage void preempt_schedule(void); |
97 | # define __preempt_schedule() asm ("call ___preempt_schedule") |
102 | # ifdef CONFIG_CONTEXT_TRACKING |
98 | extern asmlinkage void preempt_schedule(void); |
103 | extern asmlinkage void ___preempt_schedule_context(void); |
99 | extern asmlinkage void ___preempt_schedule_notrace(void); |
104 | # define __preempt_schedule_context() asm ("call ___preempt_schedule_context") |
- | |
105 | extern asmlinkage void preempt_schedule_context(void); |
100 | # define __preempt_schedule_notrace() asm ("call ___preempt_schedule_notrace") |
Line 106... | Line 101... | ||
106 | # endif |
101 | extern asmlinkage void preempt_schedule_notrace(void); |