Replace the single preempt_count() 'function' that's an lvalue with two proper functions: preempt_count() - returns the preempt_count value as rvalue preempt_count_set() - Allows setting the preempt-count value Also provide preempt_count_ptr() as a convenience wrapper to implement all modifying operations.
Showing the changes to kernel/timer.c (1 of 7 files). Show all
Unified · Split
| @@ -1092,7 +1092,7 @@ static int cascade(struct tvec_base *base, struct tvec *tv, int index) · 1091 unmodified lines | ||
| 1092 | 1092 | static void call_timer_fn(struct timer_list *timer, void (*fn)(unsigned long), |
| 1093 | 1093 | unsigned long data) |
| 1094 | 1094 | { |
| 1095 | − int preempt_count = preempt_count(); | |
| 1095 | + int count = preempt_count(); | |
| 1096 | 1096 | |
| 1097 | 1097 | #ifdef CONFIG_LOCKDEP |
| 1098 | 1098 | /* |
| @@ -1119,16 +1119,16 @@ static void call_timer_fn(struct timer_list *timer, void (*fn)(unsigned long), · 20 unmodified lines | ||
| 1119 | 1119 | |
| 1120 | 1120 | lock_map_release(&lockdep_map); |
| 1121 | 1121 | |
| 1122 | − if (preempt_count != preempt_count()) { | |
| 1122 | + if (count != preempt_count()) { | |
| 1123 | 1123 | WARN_ONCE(1, "timer: %pF preempt leak: %08x -> %08x\n", |
| 1124 | − fn, preempt_count, preempt_count()); | |
| 1124 | + fn, count, preempt_count()); | |
| 1125 | 1125 | /* |
| 1126 | 1126 | * Restore the preempt count. That gives us a decent |
| 1127 | 1127 | * chance to survive and extract information. If the |
| 1128 | 1128 | * callback kept a lock held, bad luck, but not worse |
| 1129 | 1129 | * than the BUG() we had. |
| 1130 | 1130 | */ |
| 1131 | − preempt_count() = preempt_count; | |
| 1131 | + preempt_count_set(count); | |
| 1132 | 1132 | } |
| 1133 | 1133 | } |
| 1134 | 1134 | |