diff options
Diffstat (limited to '0.patch')
-rw-r--r-- | 0.patch | 293 |
1 files changed, 293 insertions, 0 deletions
diff --git a/0.patch b/0.patch new file mode 100644 index 000000000000..085910723528 --- /dev/null +++ b/0.patch @@ -0,0 +1,293 @@ +commit fb0b2a02be266793f04f2cc1d5144ec9d94d0861 +Author: Bruno Santos <brunomanuelsantos@tecnico.ulisboa.pt> +Date: Tue Jun 18 18:37:17 2019 +0200 + + Fix use of deprecated do_gettimeofday() + + do_gettimeofday() is deprecated because of the year 2038 overflow. Since + this driver uses it extensively and it's no longer available in recent + kernels, we need to convert it to something else. + + The code could be improved, this is a least effort, half scripted fix. + +diff --git a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_core.c b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_core.c +index d6d4228..7f019fb 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_core.c ++++ b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_core.c +@@ -235,24 +235,14 @@ void ixxat_dump_mem(char *prompt, void *p, int l) + DUMP_WIDTH, 1, p, l, false); + } + +-static void ixxat_pci_add_us(struct timeval *tv, u64 delta_us) ++static void ixxat_pci_add_us(ktime_t *tv, u64 delta_us) + { +- /* number of s. to add to final time */ +- u32 delta_s = div_u64(delta_us, 1000000); +- +- delta_us -= delta_s * 1000000; +- +- tv->tv_usec += delta_us; +- if (tv->tv_usec >= 1000000) { +- tv->tv_usec -= 1000000; +- delta_s++; +- } +- tv->tv_sec += delta_s; ++ tv += delta_us * 100; + } + + void ixxat_pci_get_ts_tv(struct ixx_pci_priv *dev, u32 ts, ktime_t *k_time) + { +- struct timeval tv = dev->time_ref.tv_host_0; ++ ktime_t tv = dev->time_ref.tv_host_0; + + if (ts < dev->time_ref.ts_dev_last) { + ixxat_pci_update_ts_now(dev, ts); +@@ -261,7 +251,7 @@ void ixxat_pci_get_ts_tv(struct ixx_pci_priv *dev, u32 ts, ktime_t *k_time) + dev->time_ref.ts_dev_last = ts; + ixxat_pci_add_us(&tv, ts - dev->time_ref.ts_dev_0); + +- *k_time = timeval_to_ktime(tv); ++ *k_time = tv; + } + + void ixxat_pci_update_ts_now(struct ixx_pci_priv *dev, u32 hw_time_base) +@@ -278,7 +268,7 @@ void ixxat_pci_update_ts_now(struct ixx_pci_priv *dev, u32 hw_time_base) + void ixxat_pci_set_ts_now(struct ixx_pci_priv *dev, u32 hw_time_base) + { + dev->time_ref.ts_dev_0 = hw_time_base; +- do_gettimeofday(&dev->time_ref.tv_host_0); ++ dev->time_ref.tv_host_0 = ktime_get_real(); + dev->time_ref.ts_dev_last = hw_time_base; + } + +@@ -543,9 +533,9 @@ static int ixxat_pci_set_datatiming(struct net_device *netdev) + + static const struct net_device_ops ixxat_pci_netdev_ops = { .ndo_open = + ixxat_pci_ndo_open, .ndo_stop = ixxat_pci_ndo_stop, +- .ndo_start_xmit = ixxat_pci_ndo_start_xmit, ++ .ndo_start_xmit = ixxat_pci_ndo_start_xmit, + #ifdef CANFD_CAPABLE +-.ndo_change_mtu = can_change_mtu, ++.ndo_change_mtu = can_change_mtu, + #endif + }; + +@@ -664,7 +654,7 @@ static void ixxat_pci_disconnect(struct pci_dev *dev) + char name[IFNAMSIZ]; + printk("ixxat_pci_disconnect\n"); + strncpy(name, netdev->name, IFNAMSIZ); +- ++ + priv_prev_siblings = priv->prev_siblings; + + priv->next_siblings = NULL; +@@ -672,12 +662,12 @@ static void ixxat_pci_disconnect(struct pci_dev *dev) + priv->adapter->dev_free(priv); + + unregister_netdev(netdev); +- ++ + if (!priv_prev_siblings) { + pci_set_drvdata(dev, NULL); + pci_disable_device(dev); + } +- ++ + free_candev(netdev); + } + } +diff --git a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_core.h b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_core.h +index 8e94b34..0f0f3e2 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_core.h ++++ b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_core.h +@@ -241,7 +241,7 @@ struct ixx_canfd_msg { + } __packed; + + struct ixx_time_ref { +- struct timeval tv_host_0; ++ ktime_t tv_host_0; + u32 ts_dev_0; + u32 ts_dev_last; + }; +diff --git a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c +index 6cc4985..cd0c50a 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c ++++ b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c +@@ -369,7 +369,7 @@ static int ixx_act_ib_xxx_rcv_cmd(struct ixx_pci_interface *intf, u32 *rx_fifo, + u32* res_size; + struct ixx_dal_req *res_dal_req; + u32 read_index, write_index, data_offset; +- struct timeval start, end; ++ ktime_t start, end; + size_t dal_size = sizeof(struct ixx_dal_req); + + write_index = rx_fifo[CAN_IB2X0_PCR_RES_WRITE_IDX]; +@@ -378,10 +378,10 @@ static int ixx_act_ib_xxx_rcv_cmd(struct ixx_pci_interface *intf, u32 *rx_fifo, + if (rx_fifo[CAN_IB2X0_PCR_RES_DIR] != CAN_IB2X0_PCR_RESDIR_DTOH) + return -EBADSLT; + +- do_gettimeofday(&start); ++ start = ktime_get_real(); + end = start; + +- while ((end.tv_usec - start.tv_usec) < CAN_IB2X0_CMD_TIMEOUT_US) { ++ while ((end - start) < (CAN_IB2X0_CMD_TIMEOUT_US * 100)) { + if (++read_index == rx_fifo[CAN_IB2X0_PCR_RES_NUM_OBJ]) + read_index = 0; + +@@ -437,8 +437,9 @@ static int ixx_act_ib_xxx_rcv_cmd(struct ixx_pci_interface *intf, u32 *rx_fifo, + + return dal_res->ret_code; + +- cmd_continue: do_gettimeofday(&end); +- } ++ cmd_continue: ++ end = ktime_get_real(); ++ } + + return err; + } +diff --git a/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_core.c b/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_core.c +index 5d542a3..696e5d4 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_core.c ++++ b/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_core.c +@@ -94,24 +94,14 @@ void ixxat_dump_mem(char *prompt, void *p, int l) + DUMP_WIDTH, 1, p, l, false); + } + +-static void ixxat_usb_add_us(struct timeval *tv, u64 delta_us) ++static void ixxat_usb_add_us(ktime_t *tv, u64 delta_us) + { +- /* number of s. to add to final time */ +- u32 delta_s = div_u64(delta_us, 1000000); +- +- delta_us -= delta_s * 1000000; +- +- tv->tv_usec += delta_us; +- if (tv->tv_usec >= 1000000) { +- tv->tv_usec -= 1000000; +- delta_s++; +- } +- tv->tv_sec += delta_s; ++ *tv += delta_us * 100; + } + + void ixxat_usb_get_ts_tv(struct ixx_usb_device *dev, u32 ts, ktime_t *k_time) + { +- struct timeval tv = dev->time_ref.tv_host_0; ++ ktime_t tv = dev->time_ref.tv_host_0; + + if (ts < dev->time_ref.ts_dev_last) { + ixxat_usb_update_ts_now(dev, ts); +@@ -121,7 +111,7 @@ void ixxat_usb_get_ts_tv(struct ixx_usb_device *dev, u32 ts, ktime_t *k_time) + ixxat_usb_add_us(&tv, ts - dev->time_ref.ts_dev_0); + + if(k_time) +- *k_time = timeval_to_ktime(tv); ++ *k_time = tv; + } + + void ixxat_usb_update_ts_now(struct ixx_usb_device *dev, u32 hw_time_base) +@@ -138,7 +128,7 @@ void ixxat_usb_update_ts_now(struct ixx_usb_device *dev, u32 hw_time_base) + void ixxat_usb_set_ts_now(struct ixx_usb_device *dev, u32 hw_time_base) + { + dev->time_ref.ts_dev_0 = hw_time_base; +- do_gettimeofday(&dev->time_ref.tv_host_0); ++ dev->time_ref.tv_host_0 = ktime_get_real(); + dev->time_ref.ts_dev_last = hw_time_base; + } + +@@ -178,7 +168,7 @@ static void ixxat_usb_read_bulk_callback(struct urb *urb) + /* protect from any incoming empty msgs */ + if ((urb->actual_length > 0) && (dev->adapter->dev_decode_buf)) { + /* handle these kinds of msgs only if _start callback called */ +- if (dev->state & IXXAT_USB_STATE_STARTED) ++ if (dev->state & IXXAT_USB_STATE_STARTED) + err = dev->adapter->dev_decode_buf(dev, urb); + } + +@@ -633,7 +623,7 @@ static int ixxat_usb_get_berr_counter(const struct net_device *netdev, + { + struct ixx_usb_device* dev = (struct ixx_usb_device*) netdev_priv( + netdev); +- ++ + *bec = dev->bec; + + return 0; +@@ -641,9 +631,9 @@ static int ixxat_usb_get_berr_counter(const struct net_device *netdev, + + static const struct net_device_ops ixx_usb_netdev_ops = { .ndo_open = + ixxat_usb_ndo_open, .ndo_stop = ixxat_usb_ndo_stop, +- .ndo_start_xmit = ixxat_usb_ndo_start_xmit, ++ .ndo_start_xmit = ixxat_usb_ndo_start_xmit, + #ifdef CANFD_CAPABLE +- .ndo_change_mtu = can_change_mtu, ++ .ndo_change_mtu = can_change_mtu, + #endif + }; + +@@ -689,7 +679,7 @@ static int ixxat_usb_create_dev(struct ixx_usb_adapter *ixx_usb_adapter, + dev->adapter = ixx_usb_adapter; + dev->ctrl_idx = ctrl_idx; + dev->state = IXXAT_USB_STATE_CONNECTED; +- ++ + ep_off = ixx_usb_adapter->has_bgi_ep ? 1 : 0; + + /* Add +1 because of the bgi endpoint */ +@@ -701,7 +691,7 @@ static int ixxat_usb_create_dev(struct ixx_usb_adapter *ixx_usb_adapter, + #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 3) + dev->can.data_bittiming_const = &ixx_usb_adapter->data_bittiming_const; + #endif +- ++ + dev->can.do_set_bittiming = ixxat_usb_set_bittiming; + dev->can.do_set_mode = ixxat_usb_set_mode; + dev->can.do_get_berr_counter = ixxat_usb_get_berr_counter; +@@ -782,7 +772,7 @@ static void ixxat_usb_disconnect(struct usb_interface *intf) + dev->next_siblings = NULL; + if (dev->adapter->dev_free) + dev->adapter->dev_free(dev); +- ++ + free_candev(netdev); + dev_dbg(&intf->dev, "%s removed\n", name); + } +@@ -824,12 +814,12 @@ static int ixxat_usb_probe(struct usb_interface *intf, + if (err) + return err; + } +- ++ + if (ixx_usb_adapter->dev_power) { + err = ixx_usb_adapter->dev_power(usb_dev, IXXAT_USB_POWER_WAKEUP); + if (err) + return err; +- ++ + /* Give usb device some time to start its can controllers */ + msleep(500); + } +@@ -880,7 +870,7 @@ static int __init ixx_usb_init(void) + + static int ixxat_usb_do_device_exit(struct device *d, void *arg) + { +- struct usb_interface ++ struct usb_interface + *intf = (struct usb_interface*)to_usb_interface(d); + struct ixx_usb_device *dev; + +diff --git a/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_core.h b/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_core.h +index 60dc02d..577f276 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_core.h ++++ b/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_core.h +@@ -193,7 +193,7 @@ struct ixx_usb_adapter { + }; + + struct ixx_time_ref { +- struct timeval tv_host_0; ++ ktime_t tv_host_0; + u32 ts_dev_0; + u32 ts_dev_last; + }; |