|
10 | 10 | #include <linux/linkage.h>
|
11 | 11 | #include <linux/list.h>
|
12 | 12 |
|
| 13 | +static __always_inline int preempt_count(void) |
| 14 | +{ |
| 15 | + return current_thread_info()->preempt_count; |
| 16 | +} |
| 17 | + |
| 18 | +static __always_inline int *preempt_count_ptr(void) |
| 19 | +{ |
| 20 | + return ¤t_thread_info()->preempt_count; |
| 21 | +} |
| 22 | + |
| 23 | +static __always_inline void preempt_count_set(int pc) |
| 24 | +{ |
| 25 | + *preempt_count_ptr() = pc; |
| 26 | +} |
| 27 | + |
13 | 28 | #if defined(CONFIG_DEBUG_PREEMPT) || defined(CONFIG_PREEMPT_TRACER)
|
14 | 29 | extern void add_preempt_count(int val);
|
15 | 30 | extern void sub_preempt_count(int val);
|
16 | 31 | #else
|
17 |
| -# define add_preempt_count(val) do { preempt_count() += (val); } while (0) |
18 |
| -# define sub_preempt_count(val) do { preempt_count() -= (val); } while (0) |
| 32 | +# define add_preempt_count(val) do { *preempt_count_ptr() += (val); } while (0) |
| 33 | +# define sub_preempt_count(val) do { *preempt_count_ptr() -= (val); } while (0) |
19 | 34 | #endif
|
20 | 35 |
|
21 | 36 | #define inc_preempt_count() add_preempt_count(1)
|
22 | 37 | #define dec_preempt_count() sub_preempt_count(1)
|
23 | 38 |
|
24 |
| -#define preempt_count() (current_thread_info()->preempt_count) |
25 |
| - |
26 | 39 | #ifdef CONFIG_PREEMPT
|
27 | 40 |
|
28 | 41 | asmlinkage void preempt_schedule(void);
|
|
81 | 94 |
|
82 | 95 | /* For debugging and tracer internals only! */
|
83 | 96 | #define add_preempt_count_notrace(val) \
|
84 |
| - do { preempt_count() += (val); } while (0) |
| 97 | + do { *preempt_count_ptr() += (val); } while (0) |
85 | 98 | #define sub_preempt_count_notrace(val) \
|
86 |
| - do { preempt_count() -= (val); } while (0) |
| 99 | + do { *preempt_count_ptr() -= (val); } while (0) |
87 | 100 | #define inc_preempt_count_notrace() add_preempt_count_notrace(1)
|
88 | 101 | #define dec_preempt_count_notrace() sub_preempt_count_notrace(1)
|
89 | 102 |
|
|
0 commit comments