s390/ctcm, netiucv: migrate variables to handle y2038 problem
authorAya Mahfouz <mahfouz.saif.elyazal@gmail.com>
Fri, 16 Jan 2015 13:05:45 +0000 (14:05 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sun, 18 Jan 2015 04:54:59 +0000 (23:54 -0500)
This patch is concerned with migrating the time variables for the s390
network drivers. The changes handle the y2038 problem where timespec will
overflow in the year 2038. timespec was replaced by unsigned long and
all time variables get their values from the jiffies global variable.
This was done for the sake of speed and efficiency.

Signed-off-by: Aya Mahfouz <mahfouz.saif.elyazal@gmail.com>
Signed-off-by: Ursula Braun <ursula.braun@de.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/s390/net/ctcm_fsms.c
drivers/s390/net/ctcm_main.c
drivers/s390/net/ctcm_main.h
drivers/s390/net/ctcm_sysfs.c
drivers/s390/net/netiucv.c

index fb92524d24ef9ac1e72a6bf0912a5092e15433fd..fd5944bbe224964a5afce64c1a82ba4d33c27dc2 100644 (file)
@@ -251,13 +251,11 @@ static void chx_txdone(fsm_instance *fi, int event, void *arg)
        int first = 1;
        int i;
        unsigned long duration;
-       struct timespec done_stamp = current_kernel_time(); /* xtime */
+       unsigned long done_stamp = jiffies;
 
        CTCM_PR_DEBUG("%s(%s): %s\n", __func__, ch->id, dev->name);
 
-       duration =
-           (done_stamp.tv_sec - ch->prof.send_stamp.tv_sec) * 1000000 +
-           (done_stamp.tv_nsec - ch->prof.send_stamp.tv_nsec) / 1000;
+       duration = done_stamp - ch->prof.send_stamp;
        if (duration > ch->prof.tx_time)
                ch->prof.tx_time = duration;
 
@@ -307,7 +305,7 @@ static void chx_txdone(fsm_instance *fi, int event, void *arg)
                spin_unlock(&ch->collect_lock);
                ch->ccw[1].count = ch->trans_skb->len;
                fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch);
-               ch->prof.send_stamp = current_kernel_time(); /* xtime */
+               ch->prof.send_stamp = jiffies;
                rc = ccw_device_start(ch->cdev, &ch->ccw[0],
                                                (unsigned long)ch, 0xff, 0);
                ch->prof.doios_multi++;
@@ -1229,14 +1227,12 @@ static void ctcmpc_chx_txdone(fsm_instance *fi, int event, void *arg)
        int             rc;
        struct th_header *header;
        struct pdu      *p_header;
-       struct timespec done_stamp = current_kernel_time(); /* xtime */
+       unsigned long done_stamp = jiffies;
 
        CTCM_PR_DEBUG("Enter %s: %s cp:%i\n",
                        __func__, dev->name, smp_processor_id());
 
-       duration =
-               (done_stamp.tv_sec - ch->prof.send_stamp.tv_sec) * 1000000 +
-               (done_stamp.tv_nsec - ch->prof.send_stamp.tv_nsec) / 1000;
+       duration = done_stamp - ch->prof.send_stamp;
        if (duration > ch->prof.tx_time)
                ch->prof.tx_time = duration;
 
@@ -1361,7 +1357,7 @@ static void ctcmpc_chx_txdone(fsm_instance *fi, int event, void *arg)
 
        ch->ccw[1].count = ch->trans_skb->len;
        fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch);
-       ch->prof.send_stamp = current_kernel_time(); /* xtime */
+       ch->prof.send_stamp = jiffies;
        if (do_debug_ccw)
                ctcmpc_dumpit((char *)&ch->ccw[0], sizeof(struct ccw1) * 3);
        rc = ccw_device_start(ch->cdev, &ch->ccw[0],
@@ -1827,7 +1823,7 @@ static void ctcmpc_chx_send_sweep(fsm_instance *fsm, int event, void *arg)
        fsm_newstate(wch->fsm, CTC_STATE_TX);
 
        spin_lock_irqsave(get_ccwdev_lock(wch->cdev), saveflags);
-       wch->prof.send_stamp = current_kernel_time(); /* xtime */
+       wch->prof.send_stamp = jiffies;
        rc = ccw_device_start(wch->cdev, &wch->ccw[3],
                                        (unsigned long) wch, 0xff, 0);
        spin_unlock_irqrestore(get_ccwdev_lock(wch->cdev), saveflags);
index e056dd4fe44d1814d153d215af21fa13f44888a2..05c37d6d4afef27cdb182dbb7621ee7ef4fd2490 100644 (file)
@@ -567,7 +567,7 @@ static int ctcm_transmit_skb(struct channel *ch, struct sk_buff *skb)
        fsm_newstate(ch->fsm, CTC_STATE_TX);
        fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch);
        spin_lock_irqsave(get_ccwdev_lock(ch->cdev), saveflags);
-       ch->prof.send_stamp = current_kernel_time(); /* xtime */
+       ch->prof.send_stamp = jiffies;
        rc = ccw_device_start(ch->cdev, &ch->ccw[ccw_idx],
                                        (unsigned long)ch, 0xff, 0);
        spin_unlock_irqrestore(get_ccwdev_lock(ch->cdev), saveflags);
@@ -831,7 +831,7 @@ static int ctcmpc_transmit_skb(struct channel *ch, struct sk_buff *skb)
                                        sizeof(struct ccw1) * 3);
 
        spin_lock_irqsave(get_ccwdev_lock(ch->cdev), saveflags);
-       ch->prof.send_stamp = current_kernel_time(); /* xtime */
+       ch->prof.send_stamp = jiffies;
        rc = ccw_device_start(ch->cdev, &ch->ccw[ccw_idx],
                                        (unsigned long)ch, 0xff, 0);
        spin_unlock_irqrestore(get_ccwdev_lock(ch->cdev), saveflags);
index 477c933685f38f4abdba98a557aca20d43b7b7ef..6f4417c80247272a6621dcfd60ca396441e37a2f 100644 (file)
@@ -121,7 +121,7 @@ struct ctcm_profile {
        unsigned long doios_multi;
        unsigned long txlen;
        unsigned long tx_time;
-       struct timespec send_stamp;
+       unsigned long send_stamp;
 };
 
 /*
index 47773c4d235a7cc3787a116887e115d4d3997e21..ddb0aa321339f19cccd4741254f9fb3ebcf1b3d1 100644 (file)
@@ -100,8 +100,8 @@ static void ctcm_print_statistics(struct ctcm_priv *priv)
                     priv->channel[WRITE]->prof.doios_multi);
        p += sprintf(p, "  Netto bytes written: %ld\n",
                     priv->channel[WRITE]->prof.txlen);
-       p += sprintf(p, "  Max. TX IO-time: %ld\n",
-                    priv->channel[WRITE]->prof.tx_time);
+       p += sprintf(p, "  Max. TX IO-time: %u\n",
+                    jiffies_to_usecs(priv->channel[WRITE]->prof.tx_time));
 
        printk(KERN_INFO "Statistics for %s:\n%s",
                                priv->channel[CTCM_WRITE]->netdev->name, sbuf);
index 0a87809c8af7380374b496ab3b90f76a8522ba98..7e91f54be7bafb8f6bb5f04acd469665e7595835 100644 (file)
@@ -178,7 +178,7 @@ struct connection_profile {
        unsigned long doios_multi;
        unsigned long txlen;
        unsigned long tx_time;
-       struct timespec send_stamp;
+       unsigned long send_stamp;
        unsigned long tx_pending;
        unsigned long tx_max_pending;
 };
@@ -786,7 +786,7 @@ static void conn_action_txdone(fsm_instance *fi, int event, void *arg)
 
        header.next = 0;
        memcpy(skb_put(conn->tx_buff, NETIUCV_HDRLEN), &header, NETIUCV_HDRLEN);
-       conn->prof.send_stamp = current_kernel_time();
+       conn->prof.send_stamp = jiffies;
        txmsg.class = 0;
        txmsg.tag = 0;
        rc = iucv_message_send(conn->path, &txmsg, 0, 0,
@@ -1220,7 +1220,7 @@ static int netiucv_transmit_skb(struct iucv_connection *conn,
                memcpy(skb_put(nskb, NETIUCV_HDRLEN), &header,  NETIUCV_HDRLEN);
 
                fsm_newstate(conn->fsm, CONN_STATE_TX);
-               conn->prof.send_stamp = current_kernel_time();
+               conn->prof.send_stamp = jiffies;
 
                msg.tag = 1;
                msg.class = 0;