提交 3cd0ed4c 编写于 作者: D Dong Kai 提交者: Zheng Zengkai

corelockup: Add detector enable support by cmdline

ascend inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I4F3V1
CVE: NA

--------------------------------

Add cmdline params "enable_corelockup_detector" to support enable
core suspend detector. And enable defaultly within ascend features.
Signed-off-by: NDong Kai <dongkai11@huawei.com>
Reviewed-by: NKuohai Xu <xukuohai@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
Reviewed-by: NDing Tianhong <dingtianhong@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
Reviewed-by: NDing Tianhong <dingtianhong@huawei.com>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
上级 d5a265a1
...@@ -131,6 +131,7 @@ extern void corelockup_detector_online_cpu(unsigned int cpu); ...@@ -131,6 +131,7 @@ extern void corelockup_detector_online_cpu(unsigned int cpu);
extern void corelockup_detector_offline_cpu(unsigned int cpu); extern void corelockup_detector_offline_cpu(unsigned int cpu);
extern void watchdog_check_hrtimer(void); extern void watchdog_check_hrtimer(void);
extern unsigned long watchdog_hrtimer_interrupts(unsigned int cpu); extern unsigned long watchdog_hrtimer_interrupts(unsigned int cpu);
extern bool enable_corelockup_detector;
#endif #endif
void watchdog_nmi_stop(void); void watchdog_nmi_stop(void);
......
...@@ -366,7 +366,8 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer) ...@@ -366,7 +366,8 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
#ifdef CONFIG_CORELOCKUP_DETECTOR #ifdef CONFIG_CORELOCKUP_DETECTOR
/* check hrtimer of detector cpu */ /* check hrtimer of detector cpu */
watchdog_check_hrtimer(); if (enable_corelockup_detector)
watchdog_check_hrtimer();
#endif #endif
/* kick the hardlockup detector */ /* kick the hardlockup detector */
...@@ -531,7 +532,8 @@ int lockup_detector_online_cpu(unsigned int cpu) ...@@ -531,7 +532,8 @@ int lockup_detector_online_cpu(unsigned int cpu)
if (cpumask_test_cpu(cpu, &watchdog_allowed_mask)) { if (cpumask_test_cpu(cpu, &watchdog_allowed_mask)) {
watchdog_enable(cpu); watchdog_enable(cpu);
#ifdef CONFIG_CORELOCKUP_DETECTOR #ifdef CONFIG_CORELOCKUP_DETECTOR
corelockup_detector_online_cpu(cpu); if (enable_corelockup_detector)
corelockup_detector_online_cpu(cpu);
#endif #endif
} }
return 0; return 0;
...@@ -542,7 +544,8 @@ int lockup_detector_offline_cpu(unsigned int cpu) ...@@ -542,7 +544,8 @@ int lockup_detector_offline_cpu(unsigned int cpu)
if (cpumask_test_cpu(cpu, &watchdog_allowed_mask)) { if (cpumask_test_cpu(cpu, &watchdog_allowed_mask)) {
watchdog_disable(cpu); watchdog_disable(cpu);
#ifdef CONFIG_CORELOCKUP_DETECTOR #ifdef CONFIG_CORELOCKUP_DETECTOR
corelockup_detector_offline_cpu(cpu); if (enable_corelockup_detector)
corelockup_detector_offline_cpu(cpu);
#endif #endif
} }
return 0; return 0;
...@@ -775,6 +778,7 @@ void __init lockup_detector_init(void) ...@@ -775,6 +778,7 @@ void __init lockup_detector_init(void)
nmi_watchdog_available = true; nmi_watchdog_available = true;
lockup_detector_setup(); lockup_detector_setup();
#ifdef CONFIG_CORELOCKUP_DETECTOR #ifdef CONFIG_CORELOCKUP_DETECTOR
corelockup_detector_init(); if (enable_corelockup_detector)
corelockup_detector_init();
#endif #endif
} }
...@@ -93,6 +93,14 @@ static DEFINE_PER_CPU(unsigned long, hrint_missed); ...@@ -93,6 +93,14 @@ static DEFINE_PER_CPU(unsigned long, hrint_missed);
struct cpumask corelockup_cpumask __read_mostly; struct cpumask corelockup_cpumask __read_mostly;
unsigned int close_wfi_wfe; unsigned int close_wfi_wfe;
static bool pmu_based_nmi; static bool pmu_based_nmi;
bool enable_corelockup_detector;
static int __init enable_corelockup_detector_setup(char *str)
{
enable_corelockup_detector = true;
return 1;
}
__setup("enable_corelockup_detector", enable_corelockup_detector_setup);
static void watchdog_nmi_interrupts(void) static void watchdog_nmi_interrupts(void)
{ {
...@@ -326,11 +334,13 @@ static inline bool watchdog_check_timestamp(void) ...@@ -326,11 +334,13 @@ static inline bool watchdog_check_timestamp(void)
void watchdog_hardlockup_check(struct pt_regs *regs) void watchdog_hardlockup_check(struct pt_regs *regs)
{ {
#ifdef CONFIG_CORELOCKUP_DETECTOR #ifdef CONFIG_CORELOCKUP_DETECTOR
/* Kick nmi interrupts */ if (enable_corelockup_detector) {
watchdog_nmi_interrupts(); /* Kick nmi interrupts */
watchdog_nmi_interrupts();
/* corelockup check */ /* corelockup check */
watchdog_corelockup_check(regs); watchdog_corelockup_check(regs);
}
#endif #endif
if (__this_cpu_read(watchdog_nmi_touch) == true) { if (__this_cpu_read(watchdog_nmi_touch) == true) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册