Hi Paul, Today's linux-next merge of the rcu tree got conflicts in include/linux/rcupdate.h, include/linux/rcutree.h and kernel/rcu/tree_plugin.h between commit c1ad348b452a ("tick: Nohz: Rework next timer evaluation") from the tip tree and commit f49f794683d6 ("rcu: Eliminate a few CONFIG_RCU_NOCB_CPU_ALL #ifdefs") from the rcu tree. I fixed it up (see below) and can carry the fix as necessary (no action is required). -- Cheers, Stephen Rothwell sfr@canb.auug.org.au diff --cc include/linux/rcupdate.h index 0627a447c589,03a899aabd17..000000000000 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@@ -1155,13 -1099,13 +1101,13 @@@ static inline notrace void rcu_read_unl #define kfree_rcu(ptr, rcu_head) \ __kfree_rcu(&((ptr)->rcu_head), offsetof(typeof(*(ptr)), rcu_head)) - #if defined(CONFIG_TINY_RCU) || defined(CONFIG_RCU_NOCB_CPU_ALL) + #ifdef CONFIG_TINY_RCU -static inline int rcu_needs_cpu(unsigned long *delta_jiffies) +static inline int rcu_needs_cpu(u64 basemono, u64 *nextevt) { - *delta_jiffies = ULONG_MAX; + *nextevt = KTIME_MAX; return 0; } - #endif /* #if defined(CONFIG_TINY_RCU) || defined(CONFIG_RCU_NOCB_CPU_ALL) */ + #endif /* #ifdef CONFIG_TINY_RCU */ #if defined(CONFIG_RCU_NOCB_CPU_ALL) static inline bool rcu_is_nocb_cpu(int cpu) { return true; } diff --cc include/linux/rcutree.h index db2e31beaae7,3fa4a43ab415..000000000000 --- a/include/linux/rcutree.h +++ b/include/linux/rcutree.h @@@ -31,9 -31,7 +31,7 @@@ #define __LINUX_RCUTREE_H void rcu_note_context_switch(void); - #ifndef CONFIG_RCU_NOCB_CPU_ALL -int rcu_needs_cpu(unsigned long *delta_jiffies); +int rcu_needs_cpu(u64 basem, u64 *nextevt); - #endif /* #ifndef CONFIG_RCU_NOCB_CPU_ALL */ void rcu_cpu_stall_reset(void); /* diff --cc kernel/rcu/tree_plugin.h index 0ef80a0bbabb,a2f64e4fdb57..000000000000 --- a/kernel/rcu/tree_plugin.h +++ b/kernel/rcu/tree_plugin.h @@@ -1367,13 -1375,12 +1375,12 @@@ static void rcu_prepare_kthreads(int cp * Because we not have RCU_FAST_NO_HZ, just check whether this CPU needs * any flavor of RCU. */ - #ifndef CONFIG_RCU_NOCB_CPU_ALL -int rcu_needs_cpu(unsigned long *delta_jiffies) +int rcu_needs_cpu(u64 basemono, u64 *nextevt) { - *delta_jiffies = ULONG_MAX; + *nextevt = KTIME_MAX; - return rcu_cpu_has_callbacks(NULL); + return IS_ENABLED(CONFIG_RCU_NOCB_CPU_ALL) + ? 0 : rcu_cpu_has_callbacks(NULL); } - #endif /* #ifndef CONFIG_RCU_NOCB_CPU_ALL */ /* * Because we do not have RCU_FAST_NO_HZ, don't bother cleaning up @@@ -1480,12 -1487,15 +1487,16 @@@ static bool __maybe_unused rcu_try_adva * * The caller must have disabled interrupts. */ - #ifndef CONFIG_RCU_NOCB_CPU_ALL -int rcu_needs_cpu(unsigned long *dj) +int rcu_needs_cpu(u64 basemono, u64 *nextevt) { struct rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks); + unsigned long dj; + if (IS_ENABLED(CONFIG_RCU_NOCB_CPU_ALL)) { - *dj = ULONG_MAX; ++ *nextevt = KTIME_MAX; + return 0; + } + /* Snapshot to detect later posting of non-lazy callback. */ rdtp->nonlazy_posted_snap = rdtp->nonlazy_posted; @@@ -1505,15 -1515,13 +1516,14 @@@ /* Request timer delay depending on laziness, and round. */ if (!rdtp->all_lazy) { - *dj = round_up(rcu_idle_gp_delay + jiffies, + dj = round_up(rcu_idle_gp_delay + jiffies, rcu_idle_gp_delay) - jiffies; } else { - *dj = round_jiffies(rcu_idle_lazy_gp_delay + jiffies) - jiffies; + dj = round_jiffies(rcu_idle_lazy_gp_delay + jiffies) - jiffies; } + *nextevt = basemono + dj * TICK_NSEC; return 0; } - #endif /* #ifndef CONFIG_RCU_NOCB_CPU_ALL */ /* * Prepare a CPU for idle from an RCU perspective. The first major task