From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Ostrovsky Subject: Re: xen/pcifront: Use monotonic clock Date: Sat, 08 Aug 2015 22:16:47 -0400 Message-ID: <55C6B80F.7070704@oracle.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZOGB8-0007mR-4t for xen-devel@lists.xenproject.org; Sun, 09 Aug 2015 02:17:38 +0000 In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Abhilash Jindal , xen-devel@lists.xenproject.org Cc: david.vrabel@citrix.com List-Id: xen-devel@lists.xenproject.org On 08/08/2015 09:36 PM, Abhilash Jindal wrote: > Wall time obtained from do_gettimeofday is susceptible to sudden jumps > due to user setting the time or due to NTP. > > Monotonic time is constantly increasing time better suited for > comparing two > timestamps. See commit e1d5bbcdc7ca08d8731f5d780f0de342a768d96a (you probably will need to update your tree) -boris > --- > drivers/pci/xen-pcifront.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c > index f7197a7..5ef3eb7 100644 > --- a/drivers/pci/xen-pcifront.c > +++ b/drivers/pci/xen-pcifront.c > @@ -114,7 +114,7 @@ static int do_pci_op(struct pcifront_device *pdev, > struct xen_pci_op *op) > evtchn_port_t port = pdev->evtchn; > unsigned irq = pdev->irq; > s64 ns, ns_timeout; > -struct timeval tv; > +struct timespec tv; > spin_lock_irqsave(&pdev->sh_info_lock, irq_flags); > @@ -131,8 +131,8 @@ static int do_pci_op(struct pcifront_device *pdev, > struct xen_pci_op *op) > * (in the latter case we end up continually re-executing poll() with a > * timeout in the past). 1s difference gives plenty of slack for error. > */ > -do_gettimeofday(&tv); > -ns_timeout = timeval_to_ns(&tv) + 2 * (s64)NSEC_PER_SEC; > +ktime_get_ts(&tv); > +ns_timeout = timespec_to_ns(&tv) + 2 * (s64)NSEC_PER_SEC; > xen_clear_irq_pending(irq); > @@ -140,8 +140,8 @@ static int do_pci_op(struct pcifront_device *pdev, > struct xen_pci_op *op) > (unsigned long *)&pdev->sh_info->flags)) { > xen_poll_irq_timeout(irq, jiffies + 3*HZ); > xen_clear_irq_pending(irq); > -do_gettimeofday(&tv); > -ns = timeval_to_ns(&tv); > +ktime_get_ts(&tv); > +ns = timespec_to_ns(&tv); > if (ns > ns_timeout) { > dev_err(&pdev->xdev->dev, > "pciback not responding!!!\n"); > -- > 1.7.9.5 >