xen/pcifront: Remove usage of struct timeval
Subsystems (3)
PATCH 1/1 xen/pcifront: Remove usage of struct timeval
struct timeval uses a 32-bit field for representing seconds, which will overflow in the year 2038 and beyond. This patch replaces struct timeval with 64-bit ktime_t which is 2038 safe. The patch is part of a larger effort to remove instances of 32-bit timekeeping variables (timeval, time_t and timespec) from the kernel.
--- drivers/pci/xen-pcifront.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
drivers/pci/xen-pcifront.c +6 -5
@@ -20,6 +20,7 @@#include <linux/workqueue.h> #include <linux/bitops.h> #include <linux/time.h> +#include <linux/ktime.h> #include <xen/platform_pci.h> #include <asm/xen/swiotlb-xen.h>
@@ -115,7 +116,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; +ktime_t tv;spin_lock_irqsave (&pdev->sh_info_lock, irq_flags);
@@ -132,8 +133,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 ; + tv =ktime_get_real (); + ns_timeout =ktime_to_ns (tv) +2 * (s64 )NSEC_PER_SEC ;xen_clear_irq_pending (irq);
@@ -141,8 +142,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); + tv =ktime_get_real (); + ns =ktime_to_ns (tv);if (ns > ns_timeout) {dev_err (&pdev->xdev->dev,"pciback not responding!!!\n" );
Signature · 1 line
2.2.0.rc0.207.ga3a616c
Quoted 8 lines · Tina Ruchandani
struct timeval uses a 32-bit field for representing seconds, which will overflow in the year 2038 and beyond. This patch replaces struct timeval with 64-bit
ktime_twhich is 2038 safe. The patch is part of a larger effort to remove instances of 32-bit timekeeping variables (timeval,time_tand timespec) from the kernel.Signed-off-by Tina Ruchandani <[email protected]>
Looks OK to me.
Quoted 50 lines
--- drivers/pci/xen-pcifront.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)drivers/pci/xen-pcifront.c +6
-5@@ -20,6 +20,7 @@#include <linux/workqueue.h> #include <linux/bitops.h> #include <linux/time.h> +#include <linux/ktime.h> #include <xen/platform_pci.h> #include <asm/xen/swiotlb-xen.h> @@ -115,7 +116,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; +ktime_t tv;spin_lock_irqsave (&pdev->sh_info_lock, irq_flags);@@ -132,8 +133,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 ; + tv =ktime_get_real (); + ns_timeout =ktime_to_ns (tv) +2 * (s64 )NSEC_PER_SEC ;xen_clear_irq_pending (irq);@@ -141,8 +142,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); + tv =ktime_get_real (); + ns =ktime_to_ns (tv);if (ns > ns_timeout) {dev_err (&pdev->xdev->dev,"pciback not responding!!!\n" );Signature · 1 line
2.2.0.rc0.207.ga3a616c
Quoted 8 lines · Tina Ruchandani
struct timeval uses a 32-bit field for representing seconds, which will overflow in the year 2038 and beyond. This patch replaces struct timeval with 64-bit
ktime_twhich is 2038 safe. The patch is part of a larger effort to remove instances of 32-bit timekeeping variables (timeval,time_tand timespec) from the kernel.Signed-off-by Tina Ruchandani <[email protected]>
Looks OK to me.
Quoted 50 lines
--- drivers/pci/xen-pcifront.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)drivers/pci/xen-pcifront.c +6
-5@@ -20,6 +20,7 @@#include <linux/workqueue.h> #include <linux/bitops.h> #include <linux/time.h> +#include <linux/ktime.h> #include <xen/platform_pci.h> #include <asm/xen/swiotlb-xen.h> @@ -115,7 +116,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; +ktime_t tv;spin_lock_irqsave (&pdev->sh_info_lock, irq_flags);@@ -132,8 +133,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 ; + tv =ktime_get_real (); + ns_timeout =ktime_to_ns (tv) +2 * (s64 )NSEC_PER_SEC ;xen_clear_irq_pending (irq);@@ -141,8 +142,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); + tv =ktime_get_real (); + ns =ktime_to_ns (tv);if (ns > ns_timeout) {dev_err (&pdev->xdev->dev,"pciback not responding!!!\n" );Signature · 1 line
2.2.0.rc0.207.ga3a616c
Quoted 6 lines · On Monday 11 May 2015 08:14:48 Tina Ruchandani wrote:
struct timeval uses a 32-bit field for representing seconds, which will overflow in the year 2038 and beyond. This patch replaces struct timeval with 64-bit
ktime_twhich is 2038 safe. The patch is part of a larger effort to remove instances of 32-bit timekeeping variables (timeval,time_tand timespec) from the kernel.
The patch looks correct to me, just two minor points:
drivers/pci/xen-pcifront.c static int do_pci_op(struct pcifront_device *pdev, struct xen_pci_op *op) · line 137
Quoted 2 lines
drivers/pci/xen-pcifront.c +2
-0+ tv =ktime_get_real (); + ns_timeout =ktime_to_ns (tv) +2 * (s64 )NSEC_PER_SEC ;
* We have a macro for doing this in one line, so you can just use
ns_timeout = ktime_get_real_ns() + 2 * (s64)NSEC_PER_SEC;
* As the time is not stored anywhere and only used in a local function, using monotonic time instead of real time would slightly more appropriate, the only difference being the handling of a concurrent settimeofday() system call. That means calling ktime_get_ns() instead of ktime_get_real_ns().
Arnd
Quoted 6 lines · On Monday 11 May 2015 08:14:48 Tina Ruchandani wrote:
struct timeval uses a 32-bit field for representing seconds, which will overflow in the year 2038 and beyond. This patch replaces struct timeval with 64-bit
ktime_twhich is 2038 safe. The patch is part of a larger effort to remove instances of 32-bit timekeeping variables (timeval,time_tand timespec) from the kernel.
The patch looks correct to me, just two minor points:
drivers/pci/xen-pcifront.c static int do_pci_op(struct pcifront_device *pdev, struct xen_pci_op *op) · line 137
Quoted 2 lines
drivers/pci/xen-pcifront.c +2
-0+ tv =ktime_get_real (); + ns_timeout =ktime_to_ns (tv) +2 * (s64 )NSEC_PER_SEC ;
* We have a macro for doing this in one line, so you can just use
ns_timeout = ktime_get_real_ns() + 2 * (s64)NSEC_PER_SEC;
* As the time is not stored anywhere and only used in a local function, using monotonic time instead of real time would slightly more appropriate, the only difference being the handling of a concurrent settimeofday() system call. That means calling ktime_get_ns() instead of ktime_get_real_ns().
Arnd