*/
static int rcu_is_cpu_rrupt_from_idle(void)
{
----- return __this_cpu_read(rcu_data.dynticks_nesting) <= 0 &&
----- __this_cpu_read(rcu_data.dynticks_nmi_nesting) <= 1;
+++++ /* Called only from within the scheduling-clock interrupt */
+++++ lockdep_assert_in_irq();
+++++
+++++ /* Check for counter underflows */
+++++ RCU_LOCKDEP_WARN(__this_cpu_read(rcu_data.dynticks_nesting) < 0,
+++++ "RCU dynticks_nesting counter underflow!");
+++++ RCU_LOCKDEP_WARN(__this_cpu_read(rcu_data.dynticks_nmi_nesting) <= 0,
+++++ "RCU dynticks_nmi_nesting counter underflow/zero!");
+++++
+++++ /* Are we at first interrupt nesting level? */
+++++ if (__this_cpu_read(rcu_data.dynticks_nmi_nesting) != 1)
+++++ return false;
+++++
+++++ /* Does CPU appear to be idle from an RCU standpoint? */
+++++ return __this_cpu_read(rcu_data.dynticks_nesting) == 0;
}
-- ---#define DEFAULT_RCU_BLIMIT 10 /* Maximum callbacks per rcu_do_batch. */
++ +++#define DEFAULT_RCU_BLIMIT 10 /* Maximum callbacks per rcu_do_batch ... */
++ +++#define DEFAULT_MAX_RCU_BLIMIT 10000 /* ... even during callback flood. */
static long blimit = DEFAULT_RCU_BLIMIT;
#define DEFAULT_RCU_QHIMARK 10000 /* If this many pending, ignore blimit. */
static long qhimark = DEFAULT_RCU_QHIMARK;