Messages in this thread |  | | Date | Fri, 7 Jun 2019 07:14:16 -0700 | From | Ricardo Neri <> | Subject | Re: [RFC PATCH v4 17/21] x86/tsc: Switch to perf-based hardlockup detector if TSC become unstable |
| |
On Thu, Jun 06, 2019 at 05:35:51PM -0700, Stephane Eranian wrote: > Hi Ricardo,
Hi Stephane,
> Thanks for your contribution here. It is very important to move the > watchdog out of the PMU wherever possible.
Indeed, using the PMU for the hardlockup detector is still the default option. This patch series proposes a new kernel command line to switch to use the HPET.
> > On Thu, May 23, 2019 at 6:17 PM Ricardo Neri > <ricardo.neri-calderon@linux.intel.com> wrote: > > > > The HPET-based hardlockup detector relies on the TSC to determine if an > > observed NMI interrupt was originated by HPET timer. Hence, this detector > > can no longer be used with an unstable TSC. > > > > In such case, permanently stop the HPET-based hardlockup detector and > > start the perf-based detector. > > > > Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com> > > --- > > arch/x86/include/asm/hpet.h | 2 ++ > > arch/x86/kernel/tsc.c | 2 ++ > > arch/x86/kernel/watchdog_hld.c | 7 +++++++ > > 3 files changed, 11 insertions(+) > > > > diff --git a/arch/x86/include/asm/hpet.h b/arch/x86/include/asm/hpet.h > > index fd99f2390714..a82cbe17479d 100644 > > --- a/arch/x86/include/asm/hpet.h > > +++ b/arch/x86/include/asm/hpet.h > > @@ -128,6 +128,7 @@ extern int hardlockup_detector_hpet_init(void); > > extern void hardlockup_detector_hpet_stop(void); > > extern void hardlockup_detector_hpet_enable(unsigned int cpu); > > extern void hardlockup_detector_hpet_disable(unsigned int cpu); > > +extern void hardlockup_detector_switch_to_perf(void); > > #else > > static inline struct hpet_hld_data *hpet_hardlockup_detector_assign_timer(void) > > { return NULL; } > > @@ -136,6 +137,7 @@ static inline int hardlockup_detector_hpet_init(void) > > static inline void hardlockup_detector_hpet_stop(void) {} > > static inline void hardlockup_detector_hpet_enable(unsigned int cpu) {} > > static inline void hardlockup_detector_hpet_disable(unsigned int cpu) {} > > +static void harrdlockup_detector_switch_to_perf(void) {} > > #endif /* CONFIG_X86_HARDLOCKUP_DETECTOR_HPET */ > > > This does not compile for me when CONFIG_X86_HARDLOCKUP_DETECTOR_HPET > is not enabled. > because: > 1- you have a typo on the function name > 2- you are missing the inline keyword
I am sorry. This was an oversight on my side. I have corrected this in preparation for a v5.
Thanks and BR, Ricardo
|  |