mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
clocksource: hyper-v: Adjust hv_read_tsc_page_tsc() to avoid special casing U64_MAX
Currently hv_read_tsc_page_tsc() (ab)uses the (valid) time value of U64_MAX as an error return. This breaks the clean wrap-around of the clock. Modify the function signature to return a boolean state and provide another u64 pointer to store the actual time on success. This obviates the need to steal one time value and restores the full counter width. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Michael Kelley <mikelley@microsoft.com> Tested-by: Michael Kelley <mikelley@microsoft.com> # Hyper-V Link: https://lore.kernel.org/r/20230519102715.775630881@infradead.org
This commit is contained in:
@@ -238,10 +238,12 @@ static u64 vread_pvclock(void)
|
||||
#ifdef CONFIG_HYPERV_TIMER
|
||||
static u64 vread_hvclock(void)
|
||||
{
|
||||
u64 ret = hv_read_tsc_page(&hvclock_page);
|
||||
if (likely(ret != U64_MAX))
|
||||
ret &= S64_MAX;
|
||||
return ret;
|
||||
u64 tsc, time;
|
||||
|
||||
if (hv_read_tsc_page_tsc(&hvclock_page, &tsc, &time))
|
||||
return time & S64_MAX;
|
||||
|
||||
return U64_MAX;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user