mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2026-01-04 23:24:56 +00:00
HV: timer: keep TSC frequency in KHz
This patch represents TSC freqeuency in KHz using a 32-bit unsigned integer.
The conversion macros between ticks and us/ms are changed to inline functions to
enforce the types of the input parameters. Note that us_to_ticks accepts only
uint32_t (~4K us at most) and never overflows.
Results of some unit tests on the conversion functions:
calibrate_tsc, tsc_khz=1881600
64us -> ticks: 120422
64us -> ticks -> us: 63
511us -> ticks: 961497
511us -> ticks -> us: 510
1280000 ticks -> us: 680
1280000 ticks -> us -> ticks: 1279488
Signed-off-by: Junjie Mao <junjie.mao@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
#define CAL_MS 10
|
||||
#define MIN_TIMER_PERIOD_US 500
|
||||
|
||||
uint64_t tsc_hz = 1000000000;
|
||||
uint32_t tsc_khz = 0U;
|
||||
|
||||
static void run_timer(struct timer *timer)
|
||||
{
|
||||
@@ -79,7 +79,7 @@ int add_timer(struct timer *timer)
|
||||
/* limit minimal periodic timer cycle period */
|
||||
if (timer->mode == TICK_MODE_PERIODIC)
|
||||
timer->period_in_cycle = max(timer->period_in_cycle,
|
||||
US_TO_TICKS(MIN_TIMER_PERIOD_US));
|
||||
us_to_ticks(MIN_TIMER_PERIOD_US));
|
||||
|
||||
pcpu_id = get_cpu_id();
|
||||
cpu_timer = &per_cpu(cpu_timers, pcpu_id);
|
||||
@@ -285,8 +285,10 @@ static uint64_t native_calibrate_tsc(void)
|
||||
|
||||
void calibrate_tsc(void)
|
||||
{
|
||||
uint64_t tsc_hz;
|
||||
tsc_hz = native_calibrate_tsc();
|
||||
if (tsc_hz == 0U)
|
||||
tsc_hz = pit_calibrate_tsc(CAL_MS);
|
||||
printf("%s, tsc_hz=%lu\n", __func__, tsc_hz);
|
||||
tsc_khz = (uint32_t)(tsc_hz / 1000UL);
|
||||
printf("%s, tsc_khz=%lu\n", __func__, tsc_khz);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user