xen/cpu: round cpu_khz calculations

All arches truncate the cpu_khz without taking into account the less
significant digits.  Instead use DIV_ROUND() when scaling from Hz to kHz
to get as more accurate kHz value.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Roger Pau Monne committed 2026-04-16 15:28:32 +02:00
1 parent 305c6b901a
commit 986707b461
3 files changed
+4 -4

No files matched your search

+2 -2
View File
@@ -118,7 +118,7 @@ static void __init preinit_dt_xen_time(void)
res = dt_property_read_u32(timer, "clock-frequency", &rate);
if ( res )
{
cpu_khz = rate / 1000;
cpu_khz = DIV_ROUND(rate, 1000);
validate_timer_frequency();
timer_dt_clock_frequency = rate;
}
@@ -136,7 +136,7 @@ void __init preinit_xen_time(void)
if ( !cpu_khz )
{
cpu_khz = (READ_SYSREG(CNTFRQ_EL0) & CNTFRQ_MASK) / 1000;
cpu_khz = DIV_ROUND(READ_SYSREG(CNTFRQ_EL0) & CNTFRQ_MASK, 1000);
validate_timer_frequency();
}
+1 -1
View File
@@ -40,7 +40,7 @@ static void __init preinit_dt_xen_time(void)
if ( !dt_property_read_u32(timer, "timebase-frequency", &rate) )
panic("Unable to find clock frequency\n");
cpu_khz = rate / 1000;
cpu_khz = DIV_ROUND(rate, 1000);
}
int reprogram_timer(s_time_t timeout)
+1 -1
View File
@@ -2642,7 +2642,7 @@ void __init early_time_init(void)
set_time_scale(&t->tsc_scale, tmp);
t->stamp.local_tsc = boot_tsc_stamp;
cpu_khz = tmp / 1000;
cpu_khz = DIV_ROUND(tmp, 1000);
printk("Detected %lu.%03lu MHz processor.\n",
cpu_khz / 1000, cpu_khz % 1000);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.