doc.2020.02.27a: Documentation updates. fixes.2020.03.21a: Miscellaneous fixes. kfree_rcu.2020.02.20a: Updates to kfree_rcu(). locktorture.2020.02.20a: Lock torture-test updates. ovld.2020.02.20a: Updates to callback-overload handling. rcu-tasks.2020.02.20a: RCU-tasks updates. srcu.2020.02.20a: SRCU updates. torture.2020.02.20a: Torture-test updates.
aa93ec68 parents 8149b5c 127e298 6137079 28e09a2 b692dc4 90ba11b 7104260 a14493529 files · +644 −203Browse filesShowing the changes to include/linux (4 of 29 files). Show all
Unified · Split
| @@ -60,9 +60,9 @@ static inline void INIT_LIST_HEAD_RCU(struct list_head *list) · 59 unmodified lines | |||
| 60 | #define __list_check_rcu(dummy, cond, extra...) \ | 60 | #define __list_check_rcu(dummy, cond, extra...) \ |
| 61 | ({ \ | 61 | ({ \ |
| 62 | check_arg_count_one(extra); \ | 62 | check_arg_count_one(extra); \ |
| 63 | RCU_LOCKDEP_WARN(!cond && !rcu_read_lock_any_held(), \ | 63 | RCU_LOCKDEP_WARN(!(cond) && !rcu_read_lock_any_held(), \ |
| 64 | "RCU-list traversed in non-reader section!"); \ | 64 | "RCU-list traversed in non-reader section!"); \ |
| 65 | }) | 65 | }) |
| 66 | #else | 66 | #else |
| 67 | #define __list_check_rcu(dummy, cond, extra...) \ | 67 | #define __list_check_rcu(dummy, cond, extra...) \ |
| 68 | ({ check_arg_count_one(extra); }) | 68 | ({ check_arg_count_one(extra); }) |
| @@ -83,6 +83,7 @@ void rcu_scheduler_starting(void); · 82 unmodified lines | |||
| 83 | static inline void rcu_scheduler_starting(void) { } | 83 | static inline void rcu_scheduler_starting(void) { } |
| 84 | #endif /* #else #ifndef CONFIG_SRCU */ | 84 | #endif /* #else #ifndef CONFIG_SRCU */ |
| 85 | static inline void rcu_end_inkernel_boot(void) { } | 85 | static inline void rcu_end_inkernel_boot(void) { } |
| 86 | static inline bool rcu_inkernel_boot_has_ended(void) { return true; } | ||
| 86 | static inline bool rcu_is_watching(void) { return true; } | 87 | static inline bool rcu_is_watching(void) { return true; } |
| 87 | static inline void rcu_momentary_dyntick_idle(void) { } | 88 | static inline void rcu_momentary_dyntick_idle(void) { } |
| 88 | static inline void kfree_rcu_scheduler_running(void) { } | 89 | static inline void kfree_rcu_scheduler_running(void) { } |
| @@ -54,6 +54,7 @@ void exit_rcu(void); · 53 unmodified lines | |||
| 54 | void rcu_scheduler_starting(void); | 54 | void rcu_scheduler_starting(void); |
| 55 | extern int rcu_scheduler_active __read_mostly; | 55 | extern int rcu_scheduler_active __read_mostly; |
| 56 | void rcu_end_inkernel_boot(void); | 56 | void rcu_end_inkernel_boot(void); |
| 57 | bool rcu_inkernel_boot_has_ended(void); | ||
| 57 | bool rcu_is_watching(void); | 58 | bool rcu_is_watching(void); |
| 58 | #ifndef CONFIG_PREEMPTION | 59 | #ifndef CONFIG_PREEMPTION |
| 59 | void rcu_all_qs(void); | 60 | void rcu_all_qs(void); |
| @@ -164,7 +164,7 @@ static inline void destroy_timer_on_stack(struct timer_list *timer) { } · 163 unmodified lines | |||
| 164 | */ | 164 | */ |
| 165 | static inline int timer_pending(const struct timer_list * timer) | 165 | static inline int timer_pending(const struct timer_list * timer) |
| 166 | { | 166 | { |
| 167 | return timer->entry.pprev != NULL; | 167 | return !hlist_unhashed_lockless(&timer->entry); |
| 168 | } | 168 | } |
| 169 | 169 | ||
| 170 | extern void add_timer_on(struct timer_list *timer, int cpu); | 170 | extern void add_timer_on(struct timer_list *timer, int cpu); |