History

Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull RCU updates from Ingo Molnar: "The main changes in this cycle were: - Make kfree_rcu() use kfree_bulk() for added performance - RCU updates - Callback-overload handling updates - Tasks-RCU KCSAN and sparse updates - Locking torture test and RCU torture test updates - Documentation updates - Miscellaneous fixes" * 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (74 commits) rcu: Make rcu_barrier() account for offline no-CBs CPUs rcu: Mark rcu_state.gp_seq to detect concurrent writes Documentation/memory-barriers: Fix typos doc: Add rcutorture scripting to torture.txt doc/RCU/rcu: Use https instead of http if possible doc/RCU/rcu: Use absolute paths for non-rst files doc/RCU/rcu: Use ':ref:' for links to other docs doc/RCU/listRCU: Update example function name doc/RCU/listRCU: Fix typos in a example code snippets doc/RCU/Design: Remove remaining HTML tags in ReST files doc: Add some more RCU list patterns in the kernel rcutorture: Set KCSAN Kconfig options to detect more data races rcutorture: Manually clean up after rcu_barrier() failure rcutorture: Make rcu_torture_barrier_cbs() post from corresponding CPU rcuperf: Measure memory footprint during kfree_rcu() test rcutorture: Annotation lockless accesses to rcu_torture_current rcutorture: Add READ_ONCE() to rcu_torture_count and rcu_torture_batch rcutorture: Fix stray access to rcu_fwd_cb_nodelay rcutorture: Fix rcu_torture_one_read()/rcu_torture_writer() data race rcutorture: Make kvm-find-errors.sh abort on bad directory ...

Linus Torvalds committed 6 years ago

Commit 7c4fa152 parents d937a6d baf5fe734 files · +1015 −294Browse files

Showing the changes to include/linux (4 of 34 files). Show all

Unified · Split

4 files
  1. include/linux/rculist.h +2 −2
  2. include/linux/rcutiny.h +1 −0
  3. include/linux/rcutree.h +1 −0
  4. include/linux/timer.h +1 −1
include/linux/rculist.h+2−2
@@ -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#else66#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); })
include/linux/rcutiny.h+1−0
@@ -83,6 +83,7 @@ void rcu_scheduler_starting(void); · 82 unmodified lines
83static inline void rcu_scheduler_starting(void) { }83static inline void rcu_scheduler_starting(void) { }
84#endif /* #else #ifndef CONFIG_SRCU */84#endif /* #else #ifndef CONFIG_SRCU */
85static inline void rcu_end_inkernel_boot(void) { }85static inline void rcu_end_inkernel_boot(void) { }
86static inline bool rcu_inkernel_boot_has_ended(void) { return true; }
86static inline bool rcu_is_watching(void) { return true; }87static inline bool rcu_is_watching(void) { return true; }
87static inline void rcu_momentary_dyntick_idle(void) { }88static inline void rcu_momentary_dyntick_idle(void) { }
88static inline void kfree_rcu_scheduler_running(void) { }89static inline void kfree_rcu_scheduler_running(void) { }
include/linux/rcutree.h+1−0
@@ -54,6 +54,7 @@ void exit_rcu(void); · 53 unmodified lines
54void rcu_scheduler_starting(void);54void rcu_scheduler_starting(void);
55extern int rcu_scheduler_active __read_mostly;55extern int rcu_scheduler_active __read_mostly;
56void rcu_end_inkernel_boot(void);56void rcu_end_inkernel_boot(void);
57bool rcu_inkernel_boot_has_ended(void);
57bool rcu_is_watching(void);58bool rcu_is_watching(void);
58#ifndef CONFIG_PREEMPTION59#ifndef CONFIG_PREEMPTION
59void rcu_all_qs(void);60void rcu_all_qs(void);
include/linux/timer.h+1−1
@@ -164,7 +164,7 @@ static inline void destroy_timer_on_stack(struct timer_list *timer) { } · 163 unmodified lines
164 */164 */
165static inline int timer_pending(const struct timer_list * timer)165static 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
170extern void add_timer_on(struct timer_list *timer, int cpu);170extern void add_timer_on(struct timer_list *timer, int cpu);