[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Correct system time calculation


  • To: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>, "win-pv-devel@xxxxxxxxxxxxxxxxxxxx" <win-pv-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Owen Smith <owen.smith@xxxxxxxxxx>
  • Date: Wed, 12 Nov 2025 08:53:01 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=vkp/+6dftPjFdX2xUd2DaWG3o86TMJryzQ3FRKTZVE0=; b=F1GP/BHL8FpSi4zvq/kNRmZinGFwsaRES/s6mKr3fCgu5JMd4dmjosSiTw8DaRNmnWIOG02TUH6Cg8pAUbXfo/DxWFXgBrOliDrfNOQnSsSh2isSHQ0mn41GRR066Pkljel07VhKxUdpMaP/teAIC5O8azxNseUTYy3xKYqATACazhKO7xAJJ7fqeCnJmJUhuYIPSozodb53kfzCUtUNtAdZIdsdUEE309TBtibs0JqTAkQmaQnJE5lskdo6msGzYd1R/3c0Ac6weRBWlLv2mBYsK7N3Zlaf/ktpCM2fM1wNUoOzAZI9K+toWqImzMjLq9vn2FbtHcKrM91Nz3kePw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=x18mhTfAVuS2bccYoTBvgDeAhv960D5trauRtolb23AdstgeQnARyB/Vhf4k+bIpf/cL8gxigNRfwNZCku6khq+aYIkiGbpkmXbXQF1puztKEvjIta6ei5NdouhCMzBshFypENrtfkL3WvW/CDuA8FO2gcWTENxuNmGL1nJ3FyrEGou6vF+InvpVkwK4JKKI9Jcjzvv68uKpRvRiN0VKnKHnMCZgor8y7b143hHegHeWqHVOrsMejixnFhVRrkFXigHzrq6l6wYpR5Ftw/Vi33qt/7T7ND+2nUoraqzaKcIG+XU4zUJMLspOf31MFabU8gKVLUW/HsOeORghVw3QQg==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Delivery-date: Wed, 12 Nov 2025 08:53:09 +0000
  • List-id: Developer list for the Windows PV Drivers subproject <win-pv-devel.lists.xenproject.org>
  • Msip_labels:
  • Thread-index: AQHcUnYx6BC9hGrxbUKAeTuwcG9sPLTtKyAhgABXCKeAADeDAIABBFWE
  • Thread-topic: [PATCH] Correct system time calculation

Yes, x86 doesnt define UnsignedMultiplyExtract128
I'll make the following change, so x86 still compiles, even though x86 Windows 
should be phased out, now that Win10 is end-of-life.

#ifdef _X86_
    Age = (Age * TscSystemMul) >> 32;
#else
    Age = UnsignedMultiplyExtract128(Age, TscSystemMul, 32);
#endif

Owen

________________________________________
From: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
Sent: 11 November 2025 5:19 PM
To: Owen Smith; win-pv-devel@xxxxxxxxxxxxxxxxxxxx
Subject: Re: [PATCH] Correct system time calculation

On 11/11/2025 15:10, Owen Smith wrote:
> UnsignedMultiplyExtract128 is not available in the 22000 EWDK
>
> Owen
>

I managed to build it with EWDK_fe_release_20348_210507-1500.iso. Are
you building for 32-bit x86?

> ________________________________________
> From: win-pv-devel <win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx> on behalf of 
> Owen Smith <owen.smith@xxxxxxxxxx>
> Sent: 11 November 2025 8:53 AM
> To: Tu Dinh; win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> Subject: Re: [PATCH] Correct system time calculation
>
> Interestingly, xen.h defines the time calculation in a comment, but does not 
> account for tsc_shift being a signed int8_t value.
>
> https://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/include/public/xen.h;h=82b9c05a76b7faedded8778fb8274a0d3d5d31e4;hb=HEAD#l677
>
> Reviewed-by: Owen Smith <owen.smith@xxxxxxxxxx>
>
> ________________________________________
> From: win-pv-devel <win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx> on behalf of 
> Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
> Sent: 10 November 2025 7:13 PM
> To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Tu Dinh
> Subject: [PATCH] Correct system time calculation
>
> SharedInfoGetTime uses the naive formula ((Tsc << TscShift) *
> TscSystemMul) >> 32 to calculate the current system time. However, there
> are two issues: firstly, TscShift may be negative (to indicate a right
> shift); and secondly, multiplying the shifted Tsc with TscSystemMul will
> throw away the result's upper 64 bits.
>
> Adjust for negative shift amounts and use UnsignedMultiplyExtract128 to
> correctly perform the multiplication.
>
> Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
> ---
>   src/xenbus/shared_info.c | 10 ++++++++--
>   1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/src/xenbus/shared_info.c b/src/xenbus/shared_info.c
> index 06e0aec..fe29470 100644
> --- a/src/xenbus/shared_info.c
> +++ b/src/xenbus/shared_info.c
> @@ -356,6 +356,7 @@ SharedInfoGetTime(
>       ULONGLONG                       NanoSeconds;
>       ULONGLONG                       Timestamp;
>       ULONGLONG                       Tsc;
> +    ULONGLONG                       Age;
>       ULONGLONG                       SystemTime;
>       ULONG                           TscSystemMul;
>       CHAR                            TscShift;
> @@ -404,10 +405,15 @@ SharedInfoGetTime(
>       KeLowerIrql(Irql);
>
>       // Number of elapsed ticks since timestamp was captured
> -    Tsc -= Timestamp;
> +    Age = Tsc - Timestamp;
> +    if (TscShift < 0)
> +        Age >>= -TscShift;
> +    else
> +        Age <<= TscShift;
> +    Age = UnsignedMultiplyExtract128(Age, TscSystemMul, 32);
>
>       // Time in nanoseconds since boot
> -    SystemTime += ((Tsc << TscShift) * TscSystemMul) >> 32;
> +    SystemTime += Age;
>
>       Trace("WALLCLOCK TIME AT BOOT: Seconds = %llu NanoSeconds = %llu\n",
>             Seconds,
> --
> 2.51.0.windows.2
>
>
>
> --
> Ngoc Tu Dinh | Vates XCP-ng Developer
>
> XCP-ng & Xen Orchestra - Vates solutions
>
> web: https://vates.tech
>
>
>
>



--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.