Commit 715d2d96 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'timers_urgent_for_v6.1_rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull timer fix from Borislav Petkov:

 - Return the proper timer register width (31 bits) for a 32-bit signed
   register in order to avoid a timer interrupt storm on ARM XGene-1
   hardware running in NO_HZ mode

* tag 'timers_urgent_for_v6.1_rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  clocksource/drivers/arm_arch_timer: Fix XGene-1 TVAL register math error
parents b465cf17 839a9739
...@@ -806,6 +806,9 @@ static u64 __arch_timer_check_delta(void) ...@@ -806,6 +806,9 @@ static u64 __arch_timer_check_delta(void)
/* /*
* XGene-1 implements CVAL in terms of TVAL, meaning * XGene-1 implements CVAL in terms of TVAL, meaning
* that the maximum timer range is 32bit. Shame on them. * that the maximum timer range is 32bit. Shame on them.
*
* Note that TVAL is signed, thus has only 31 of its
* 32 bits to express magnitude.
*/ */
MIDR_ALL_VERSIONS(MIDR_CPU_MODEL(ARM_CPU_IMP_APM, MIDR_ALL_VERSIONS(MIDR_CPU_MODEL(ARM_CPU_IMP_APM,
APM_CPU_PART_POTENZA)), APM_CPU_PART_POTENZA)),
...@@ -813,8 +816,8 @@ static u64 __arch_timer_check_delta(void) ...@@ -813,8 +816,8 @@ static u64 __arch_timer_check_delta(void)
}; };
if (is_midr_in_range_list(read_cpuid_id(), broken_cval_midrs)) { if (is_midr_in_range_list(read_cpuid_id(), broken_cval_midrs)) {
pr_warn_once("Broken CNTx_CVAL_EL1, limiting width to 32bits"); pr_warn_once("Broken CNTx_CVAL_EL1, using 31 bit TVAL instead.\n");
return CLOCKSOURCE_MASK(32); return CLOCKSOURCE_MASK(31);
} }
#endif #endif
return CLOCKSOURCE_MASK(arch_counter_get_width()); return CLOCKSOURCE_MASK(arch_counter_get_width());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment