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

Re: [PATCH] x86/time: make do_settime() uses more accurate


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Date: Wed, 6 May 2026 13:15:39 +0200
  • 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=j8X8hMLfFknAlmgCNi2ki0dDl+m1GqSyXOvkgTWewH0=; b=STRzj1MkXHkoVn3wmMbqIMZxOWt7MU9KBK2NxhlNOihRTzdWDDWZZu2flDe4am6JLmy4hKpQxMkP9KxmLJVKTdcPq0sPDbTgTDvWU2m2uL04vq/9Rmgj9cspB6ti7UT6iR34G20XVp7CLPlU+vtaeAr0iMYEB3TzQlJdoj/MmoZNx/sUxwbfdMlMrwVbDb6VkXeiVckphUFLg7wOgRUwzKlSaHQ/7jEeNcx4c9mxhQEmN6hj8vA+4LmzmrTKt1uzD9b1YtDOHp490K3PDaKBuXs+od6pDIa+udyyrBGLykP0WcHak3aptu/fftPTv/pBDCOY9J6XLlgjxm04jGoBoA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MMU/6AJQR4xE8gCUcKaU8jbiba/JdBal+G5iFSZNDbC3PLov5WsvKXaY61HuXFevqrUB9TpPoHm1PCANwVzwcKiB4FE7HABb5gm4vaK1g3CU4TXS6p1qmps0m5Yd6TaaLlZi+5r5Z7hDDidoJ3vLcrTQIqE9dmFOC3VJ4lwsaZM+oicJCVN8gdO9ja2YaKtMmCtsyEesLIsM2VQ/gr1OnV/ABCNYb7wt8iu17dTzSAbIAzimHvjAAcaDVwvQqyWxYOIjENM43NaDuK+OZa2RBXq5n/nStXt1xIhruaVuDRO4C3rAExZqnzPPJiPZgd79APpMSkKnLAlUI0kNPs+o4A==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Teddy Astie <teddy.astie@xxxxxxxxxx>, Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx>
  • Delivery-date: Wed, 06 May 2026 11:15:54 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Wed, May 06, 2026 at 11:35:45AM +0200, Jan Beulich wrote:
> As a comment next to one of the invocations states, get_wallclock_time()
> can take over a second. The order of evaluation of function arguments is
> in principle unspecified; in practice at least gcc looks to be evaluating
> them from last to first. Hence with NOW() invoked first, the respective
> value passed to do_settime() can be off by over a second (which is in
> contrast to __get_cmos_time() attempting to get the time exactly after an
> update, i.e. [pretty] precisely at a seconds boundary).
> 
> This also addresses a Misra C:2012 rule 13.2 ("The value of an expression
> and its persistent side-effects shall be the same under all permitted
> evaluation orders") violation each.
> 
> Fixes: f64134cdb81c ("x86: Fix time_resume() to notify all domains of 
> wallclock change")
> Fixes: 0bfcf984b727 ("x86: Reintroduce clocksource=tsc")
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
> ---
> Of course the time it takes to do all the CMOS reads (or whichever else
> wallclock time source is in use) also results in an inaccuracy. For
> __get_cmos_time() this might be solvable by having it latch NOW() before
> doing the 6 reads, but in particular for efi_get_time() there's hardly
> anything we can do.
> 
> As to Misra rule 13.2: tagging.ecl lists the rule as clean. I also can't
> find any deviation for the two instances fixed here. What am I missing?
> 
> For __get_cmos_time(), tangentially: Wouldn't we better use the
> century byte if available? As it stands, things will break in 2070. Which
> is a long way out, yes, but still. (Of course this would mean a 7th slow
> I/O port write/read pair.)

Seems fine to me.

One further note: in __get_cmos_time() I think we want to read
backwards, so start with century then year and so on, so the last read
is seconds, as to avoid extra skew.

Thanks, Roger.



 


Rackspace

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