Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8ab0f723 authored by Tina Ruchandani's avatar Tina Ruchandani Committed by Greg Kroah-Hartman
Browse files

USB: usbmon: Use 64bit timestamp for mon_bin_hdr



struct mon_bin_hdr allows for a 64-bit seconds timestamp. The code
currently uses 'struct timeval' to populate the timestamp in mon_bin_hdr,
which has a 32-bit seconds field and will overflow in year 2038 and beyond.
This patch replaces 'struct timeval' with 'struct timespec64' which is
y2038 safe. This patch is part of a larger attempt to remove instances
of struct timeval and other 32-bit timekeeping (time_t, struct timespec)
from the kernel.

Signed-off-by: default avatarTina Ruchandani <ruchandani.tina@gmail.com>
Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 18fc4ebd
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#include <linux/mm.h>
#include <linux/scatterlist.h>
#include <linux/slab.h>
#include <linux/time64.h>

#include <asm/uaccess.h>

@@ -92,8 +93,8 @@ struct mon_bin_hdr {
	unsigned short busnum;	/* Bus number */
	char flag_setup;
	char flag_data;
	s64 ts_sec;		/* gettimeofday */
	s32 ts_usec;		/* gettimeofday */
	s64 ts_sec;		/* getnstimeofday64 */
	s32 ts_usec;		/* getnstimeofday64 */
	int status;
	unsigned int len_urb;	/* Length of data (submitted or actual) */
	unsigned int len_cap;	/* Delivered length */
@@ -483,7 +484,7 @@ static void mon_bin_event(struct mon_reader_bin *rp, struct urb *urb,
    char ev_type, int status)
{
	const struct usb_endpoint_descriptor *epd = &urb->ep->desc;
	struct timeval ts;
	struct timespec64 ts;
	unsigned long flags;
	unsigned int urb_length;
	unsigned int offset;
@@ -494,7 +495,7 @@ static void mon_bin_event(struct mon_reader_bin *rp, struct urb *urb,
	struct mon_bin_hdr *ep;
	char data_tag = 0;

	do_gettimeofday(&ts);
	getnstimeofday64(&ts);

	spin_lock_irqsave(&rp->b_lock, flags);

@@ -568,7 +569,7 @@ static void mon_bin_event(struct mon_reader_bin *rp, struct urb *urb,
	ep->busnum = urb->dev->bus->busnum;
	ep->id = (unsigned long) urb;
	ep->ts_sec = ts.tv_sec;
	ep->ts_usec = ts.tv_usec;
	ep->ts_usec = ts.tv_nsec / NSEC_PER_USEC;
	ep->status = status;
	ep->len_urb = urb_length;
	ep->len_cap = length + lendesc;
@@ -629,12 +630,12 @@ static void mon_bin_complete(void *data, struct urb *urb, int status)
static void mon_bin_error(void *data, struct urb *urb, int error)
{
	struct mon_reader_bin *rp = data;
	struct timeval ts;
	struct timespec64 ts;
	unsigned long flags;
	unsigned int offset;
	struct mon_bin_hdr *ep;

	do_gettimeofday(&ts);
	getnstimeofday64(&ts);

	spin_lock_irqsave(&rp->b_lock, flags);

@@ -656,7 +657,7 @@ static void mon_bin_error(void *data, struct urb *urb, int error)
	ep->busnum = urb->dev->bus->busnum;
	ep->id = (unsigned long) urb;
	ep->ts_sec = ts.tv_sec;
	ep->ts_usec = ts.tv_usec;
	ep->ts_usec = ts.tv_nsec / NSEC_PER_USEC;
	ep->status = error;

	ep->flag_setup = '-';