diff options
Diffstat (limited to 'kernel/rcu/tree.h')
-rw-r--r-- | kernel/rcu/tree.h | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h index 6a86eb7bac45..d03764652d91 100644 --- a/kernel/rcu/tree.h +++ b/kernel/rcu/tree.h | |||
@@ -350,7 +350,7 @@ struct rcu_data { | |||
350 | int nocb_p_count_lazy; /* (approximate). */ | 350 | int nocb_p_count_lazy; /* (approximate). */ |
351 | wait_queue_head_t nocb_wq; /* For nocb kthreads to sleep on. */ | 351 | wait_queue_head_t nocb_wq; /* For nocb kthreads to sleep on. */ |
352 | struct task_struct *nocb_kthread; | 352 | struct task_struct *nocb_kthread; |
353 | bool nocb_defer_wakeup; /* Defer wakeup of nocb_kthread. */ | 353 | int nocb_defer_wakeup; /* Defer wakeup of nocb_kthread. */ |
354 | 354 | ||
355 | /* The following fields are used by the leader, hence own cacheline. */ | 355 | /* The following fields are used by the leader, hence own cacheline. */ |
356 | struct rcu_head *nocb_gp_head ____cacheline_internodealigned_in_smp; | 356 | struct rcu_head *nocb_gp_head ____cacheline_internodealigned_in_smp; |
@@ -383,6 +383,11 @@ struct rcu_data { | |||
383 | #define RCU_FORCE_QS 3 /* Need to force quiescent state. */ | 383 | #define RCU_FORCE_QS 3 /* Need to force quiescent state. */ |
384 | #define RCU_SIGNAL_INIT RCU_SAVE_DYNTICK | 384 | #define RCU_SIGNAL_INIT RCU_SAVE_DYNTICK |
385 | 385 | ||
386 | /* Values for nocb_defer_wakeup field in struct rcu_data. */ | ||
387 | #define RCU_NOGP_WAKE_NOT 0 | ||
388 | #define RCU_NOGP_WAKE 1 | ||
389 | #define RCU_NOGP_WAKE_FORCE 2 | ||
390 | |||
386 | #define RCU_JIFFIES_TILL_FORCE_QS (1 + (HZ > 250) + (HZ > 500)) | 391 | #define RCU_JIFFIES_TILL_FORCE_QS (1 + (HZ > 250) + (HZ > 500)) |
387 | /* For jiffies_till_first_fqs and */ | 392 | /* For jiffies_till_first_fqs and */ |
388 | /* and jiffies_till_next_fqs. */ | 393 | /* and jiffies_till_next_fqs. */ |
@@ -572,6 +577,7 @@ static void rcu_preempt_do_callbacks(void); | |||
572 | static int rcu_spawn_one_boost_kthread(struct rcu_state *rsp, | 577 | static int rcu_spawn_one_boost_kthread(struct rcu_state *rsp, |
573 | struct rcu_node *rnp); | 578 | struct rcu_node *rnp); |
574 | #endif /* #ifdef CONFIG_RCU_BOOST */ | 579 | #endif /* #ifdef CONFIG_RCU_BOOST */ |
580 | static void __init rcu_spawn_boost_kthreads(void); | ||
575 | static void rcu_prepare_kthreads(int cpu); | 581 | static void rcu_prepare_kthreads(int cpu); |
576 | static void rcu_cleanup_after_idle(int cpu); | 582 | static void rcu_cleanup_after_idle(int cpu); |
577 | static void rcu_prepare_for_idle(int cpu); | 583 | static void rcu_prepare_for_idle(int cpu); |
@@ -589,10 +595,14 @@ static bool __call_rcu_nocb(struct rcu_data *rdp, struct rcu_head *rhp, | |||
589 | static bool rcu_nocb_adopt_orphan_cbs(struct rcu_state *rsp, | 595 | static bool rcu_nocb_adopt_orphan_cbs(struct rcu_state *rsp, |
590 | struct rcu_data *rdp, | 596 | struct rcu_data *rdp, |
591 | unsigned long flags); | 597 | unsigned long flags); |
592 | static bool rcu_nocb_need_deferred_wakeup(struct rcu_data *rdp); | 598 | static int rcu_nocb_need_deferred_wakeup(struct rcu_data *rdp); |
593 | static void do_nocb_deferred_wakeup(struct rcu_data *rdp); | 599 | static void do_nocb_deferred_wakeup(struct rcu_data *rdp); |
594 | static void rcu_boot_init_nocb_percpu_data(struct rcu_data *rdp); | 600 | static void rcu_boot_init_nocb_percpu_data(struct rcu_data *rdp); |
595 | static void rcu_spawn_nocb_kthreads(struct rcu_state *rsp); | 601 | static void rcu_spawn_all_nocb_kthreads(int cpu); |
602 | static void __init rcu_spawn_nocb_kthreads(void); | ||
603 | #ifdef CONFIG_RCU_NOCB_CPU | ||
604 | static void __init rcu_organize_nocb_kthreads(struct rcu_state *rsp); | ||
605 | #endif /* #ifdef CONFIG_RCU_NOCB_CPU */ | ||
596 | static void __maybe_unused rcu_kick_nohz_cpu(int cpu); | 606 | static void __maybe_unused rcu_kick_nohz_cpu(int cpu); |
597 | static bool init_nocb_callback_list(struct rcu_data *rdp); | 607 | static bool init_nocb_callback_list(struct rcu_data *rdp); |
598 | static void rcu_sysidle_enter(struct rcu_dynticks *rdtp, int irq); | 608 | static void rcu_sysidle_enter(struct rcu_dynticks *rdtp, int irq); |
@@ -605,6 +615,8 @@ static void rcu_sysidle_report_gp(struct rcu_state *rsp, int isidle, | |||
605 | static void rcu_bind_gp_kthread(void); | 615 | static void rcu_bind_gp_kthread(void); |
606 | static void rcu_sysidle_init_percpu_data(struct rcu_dynticks *rdtp); | 616 | static void rcu_sysidle_init_percpu_data(struct rcu_dynticks *rdtp); |
607 | static bool rcu_nohz_full_cpu(struct rcu_state *rsp); | 617 | static bool rcu_nohz_full_cpu(struct rcu_state *rsp); |
618 | static void rcu_dynticks_task_enter(void); | ||
619 | static void rcu_dynticks_task_exit(void); | ||
608 | 620 | ||
609 | #endif /* #ifndef RCU_TREE_NONCORE */ | 621 | #endif /* #ifndef RCU_TREE_NONCORE */ |
610 | 622 | ||