]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
staging: gdm72xx: Replace timeval with ktime_t
authorTapasweni Pathak <tapaswenipathak@gmail.com>
Wed, 5 Nov 2014 03:28:15 +0000 (08:58 +0530)
committerArnd Bergmann <arnd@arndb.de>
Tue, 3 Nov 2015 16:34:42 +0000 (17:34 +0100)
struct sdu_stamp in the gdm_sdio.h is a timeval type.
'struct timeval now' is used for calculating elapsed time.

32-bit systems using 'struct timeval' will break in the year 2038,
so we have to replace that code with more appropriate types.
This patch changes the gdm72xx driver to use ktime_t.

ktime_get() is  better than using do_gettimeofday(),
because it uses the monotonic clock. ktime_sub
are used to subtract two ktime variables.

Build tested this by saying Y to WIMAX_GDM72XX.

Signed-off-by: Tapasweni Pathak <tapaswenipathak@gmail.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
drivers/staging/gdm72xx/gdm_sdio.c
drivers/staging/gdm72xx/gdm_sdio.h

index a5fd0794842ee0a9af21577a62b6b2f5ddc83e86..2b9c41443d4506a91fcd9ba156fc392c6a165496 100644 (file)
@@ -36,7 +36,7 @@
 #define RX_BUF_SIZE    (25*1024)
 
 #define TX_HZ          2000
-#define TX_INTERVAL    (1000000/TX_HZ)
+#define TX_INTERVAL    (NSEC_PER_SEC/TX_HZ)
 
 static struct sdio_tx *alloc_tx_struct(struct tx_cxt *tx)
 {
@@ -303,7 +303,7 @@ static void send_sdu(struct sdio_func *func, struct tx_cxt *tx)
                put_tx_struct(t->tx_cxt, t);
        }
 
-       do_gettimeofday(&tx->sdu_stamp);
+       tx->sdu_stamp = ktime_get();
        spin_unlock_irqrestore(&tx->lock, flags);
 }
 
@@ -330,7 +330,7 @@ static void do_tx(struct work_struct *work)
        struct sdio_func *func = sdev->func;
        struct tx_cxt *tx = &sdev->tx;
        struct sdio_tx *t = NULL;
-       struct timeval now, *before;
+       ktime_t now, before;
        int is_sdu = 0;
        long diff;
        unsigned long flags;
@@ -346,11 +346,10 @@ static void do_tx(struct work_struct *work)
                list_del(&t->list);
                is_sdu = 0;
        } else if (!tx->stop_sdu_tx && !list_empty(&tx->sdu_list)) {
-               do_gettimeofday(&now);
-               before = &tx->sdu_stamp;
+               now = ktime_get();
+               before = tx->sdu_stamp;
 
-               diff = (now.tv_sec - before->tv_sec) * 1000000 +
-                       (now.tv_usec - before->tv_usec);
+               diff = ktime_to_ns(ktime_sub(now, before));
                if (diff >= 0 && diff < TX_INTERVAL) {
                        schedule_work(&sdev->ws);
                        spin_unlock_irqrestore(&tx->lock, flags);
index 77ad9d686f8e2c7e00704efcaa76d8741a898b9d..aa7dad22a219d0ee471f6e63a0df95114a6c4d17 100644 (file)
@@ -15,7 +15,7 @@
 #define __GDM72XX_GDM_SDIO_H__
 
 #include <linux/types.h>
-#include <linux/time.h>
+#include <linux/ktime.h>
 
 #define MAX_NR_SDU_BUF  64
 
@@ -32,7 +32,7 @@ struct tx_cxt {
        struct list_head        free_list;
        struct list_head        sdu_list;
        struct list_head        hci_list;
-       struct timeval          sdu_stamp;
+       ktime_t                 sdu_stamp;
        u8                      *sdu_buf;
        spinlock_t              lock;
        int                     can_send;