mirror of https://gitee.com/openkylin/linux.git
rcu: disable CPU stall warnings upon panic
The current RCU CPU stall warnings remain enabled even after a panic occurs, which some people have found to be a bit counterproductive. This patch therefore uses a notifier to disable stall warnings once a panic occurs. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
parent
55ec936ff4
commit
c68de2097a
|
@ -449,6 +449,8 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp)
|
||||||
|
|
||||||
#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
|
#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
|
||||||
|
|
||||||
|
int rcu_cpu_stall_panicking __read_mostly;
|
||||||
|
|
||||||
static void record_gp_stall_check_time(struct rcu_state *rsp)
|
static void record_gp_stall_check_time(struct rcu_state *rsp)
|
||||||
{
|
{
|
||||||
rsp->gp_start = jiffies;
|
rsp->gp_start = jiffies;
|
||||||
|
@ -526,6 +528,8 @@ static void check_cpu_stall(struct rcu_state *rsp, struct rcu_data *rdp)
|
||||||
long delta;
|
long delta;
|
||||||
struct rcu_node *rnp;
|
struct rcu_node *rnp;
|
||||||
|
|
||||||
|
if (rcu_cpu_stall_panicking)
|
||||||
|
return;
|
||||||
delta = jiffies - rsp->jiffies_stall;
|
delta = jiffies - rsp->jiffies_stall;
|
||||||
rnp = rdp->mynode;
|
rnp = rdp->mynode;
|
||||||
if ((rnp->qsmask & rdp->grpmask) && delta >= 0) {
|
if ((rnp->qsmask & rdp->grpmask) && delta >= 0) {
|
||||||
|
@ -540,6 +544,21 @@ static void check_cpu_stall(struct rcu_state *rsp, struct rcu_data *rdp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int rcu_panic(struct notifier_block *this, unsigned long ev, void *ptr)
|
||||||
|
{
|
||||||
|
rcu_cpu_stall_panicking = 1;
|
||||||
|
return NOTIFY_DONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct notifier_block rcu_panic_block = {
|
||||||
|
.notifier_call = rcu_panic,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void __init check_cpu_stall_init(void)
|
||||||
|
{
|
||||||
|
atomic_notifier_chain_register(&panic_notifier_list, &rcu_panic_block);
|
||||||
|
}
|
||||||
|
|
||||||
#else /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
|
#else /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
|
||||||
|
|
||||||
static void record_gp_stall_check_time(struct rcu_state *rsp)
|
static void record_gp_stall_check_time(struct rcu_state *rsp)
|
||||||
|
@ -550,6 +569,10 @@ static void check_cpu_stall(struct rcu_state *rsp, struct rcu_data *rdp)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __init check_cpu_stall_init(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* #else #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
|
#endif /* #else #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1934,6 +1957,7 @@ void __init rcu_init(void)
|
||||||
cpu_notifier(rcu_cpu_notify, 0);
|
cpu_notifier(rcu_cpu_notify, 0);
|
||||||
for_each_online_cpu(cpu)
|
for_each_online_cpu(cpu)
|
||||||
rcu_cpu_notify(NULL, CPU_UP_PREPARE, (void *)(long)cpu);
|
rcu_cpu_notify(NULL, CPU_UP_PREPARE, (void *)(long)cpu);
|
||||||
|
check_cpu_stall_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "rcutree_plugin.h"
|
#include "rcutree_plugin.h"
|
||||||
|
|
Loading…
Reference in New Issue