[prev in list] [next in list] [prev in thread] [next in thread] 

List:       win-pv-devel
Subject:    Re: [win-pv-devel] [PATCH] Check WinTime and XenTime for drift
From:       Paul Durrant <Paul.Durrant () citrix ! com>
Date:       2019-04-16 10:35:07
Message-ID: 64b037581f524f719bf024f57b04626f () AMSPEX02CL01 ! citrite ! net
[Download RAW message or body]

> -----Original Message-----
> From: win-pv-devel [mailto:win-pv-devel-bounces@lists.xenproject.org] On Behalf Of \
>                 Owen Smith
> Sent: 15 April 2019 14:39
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith <owen.smith@citrix.com>
> Subject: [win-pv-devel] [PATCH] Check WinTime and XenTime for drift
> 
> Windows 10/Server 2016 changed how Windows maintains the accuracy of its clock
> This can allow reported time to drift away from host time, and Windows time
> will need to be updated regularly in order to minimise the drift.
> 
> * Add a wrapper for SetXenTime to manage the critical section
> * Remove SetXenTime from CheckSuspend and call it from the calling function
> * Add a timeout to the WaitForMultipleObjectsEx, which calls SetXenTime
> * Prevent SetXenTime from updating the time if its not changed (and avoid
> outputting the log lines)
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Reviewed-by: Paul Durrant <paul.durrant@citrix.com>

although...

> ---
> src/xenagent/service.cpp | 20 +++++++++++++++++---
> src/xenagent/service.h   |  1 +
> 2 files changed, 18 insertions(+), 3 deletions(-)
> 
> diff --git a/src/xenagent/service.cpp b/src/xenagent/service.cpp
> index a8d45fc..427faee 100644
> --- a/src/xenagent/service.cpp
> +++ b/src/xenagent/service.cpp
> @@ -239,6 +239,15 @@ bool CXenIfaceCreator::CheckShutdown()
> return false;
> }
> 
> +void CXenIfaceCreator::CheckXenTime()
> +{
> +    CCritSec crit(&m_crit);
> +    if (m_device == NULL)
> +        return;
> +
> +    SetXenTime();
> +}
> +
> void CXenIfaceCreator::CheckSuspend()
> {
> CCritSec crit(&m_crit);
> @@ -268,7 +277,6 @@ void CXenIfaceCreator::CheckSuspend()
> if (m_agent.ConvDevicePresent())
> StartSlateModeWatch();
> 
> -    SetXenTime();
> m_count = count;
> }
> 
> @@ -473,6 +481,9 @@ void CXenIfaceCreator::SetXenTime()
> SYSTEMTIME cur = { 0 };
> GetLocalTime(&cur);
> 
> +    if (memcmp(&cur, &sys, sizeof(SYSTEMTIME)) == 0)
> +        return;
> +
> CXenAgent::Log("Time Now = %d/%d/%d %d:%02d:%02d.%d\n",
> cur.wYear, cur.wMonth, cur.wDay,
> cur.wHour, cur.wMinute, cur.wSecond, cur.wMilliseconds);
> @@ -732,11 +743,12 @@ void CXenAgent::OnPowerEvent(DWORD evt, LPVOID data)
> 
> bool CXenAgent::ServiceMainLoop()
> {
> +    DWORD   timeout = 30 * 60 * 1000;

... I suspect this should really be read in from a registry key... but that can be \
done by a subsequent patch.

> HANDLE  events[] = { m_svc_stop,
> m_xeniface.m_evt_shutdown,
> m_xeniface.m_evt_suspend,
> m_xeniface.m_evt_slate_mode };
> -    DWORD   wait = WaitForMultipleObjectsEx(4, events, FALSE, INFINITE, TRUE);
> +    DWORD   wait = WaitForMultipleObjectsEx(4, events, FALSE, timeout, TRUE);
> 
> switch (wait) {
> case WAIT_OBJECT_0:
> @@ -749,6 +761,7 @@ bool CXenAgent::ServiceMainLoop()
> 
> case WAIT_OBJECT_0+2:
> ResetEvent(m_xeniface.m_evt_suspend);
> +        m_xeniface.CheckXenTime();
> m_xeniface.CheckSuspend();
> return true; // continue loop
> 
> @@ -761,8 +774,9 @@ bool CXenAgent::ServiceMainLoop()
> 
> return true; // continue loop
> }
> -    case WAIT_IO_COMPLETION:
> case WAIT_TIMEOUT:
> +        m_xeniface.CheckXenTime();
> +    case WAIT_IO_COMPLETION:
> m_xeniface.CheckSuspend();
> return !m_xeniface.CheckShutdown();
> 
> diff --git a/src/xenagent/service.h b/src/xenagent/service.h
> index 47b7352..4126841 100644
> --- a/src/xenagent/service.h
> +++ b/src/xenagent/service.h
> @@ -69,6 +69,7 @@ public: // IDeviceCreator
> 
> public:
> bool CheckShutdown();
> +    void CheckXenTime();
> void CheckSuspend();
> bool CheckSlateMode(std::string *mode);
> 
> --
> 2.16.2.windows.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> https://lists.xenproject.org/mailman/listinfo/win-pv-devel
_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/win-pv-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic