aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2015-01-11 21:40:07 -0500
committerDavid S. Miller <davem@davemloft.net>2015-01-11 21:40:07 -0500
commitef5ba4aff9b55a4cf51e83af3f4dbc5cb4e471fa (patch)
tree12931bcf7d7bbdb8c6fe58a42b23de4d5e925bef
parentf3cd7a264bb001a701e68c7234a3b1cdb3a83f5f (diff)
parent497ec1f2a086878d6a42334eda72bfef079dd484 (diff)
Merge branch 'irda-next'
Chunyan Zhang says: ==================== irda: Use ktime_t instead of timeval This patch-set removed all uses of timeval and used ktime_t instead if needed, since 32-bit time types will break in the year 2038. This patch-set also used the ktime_xxx functions accordingly. e.g. * Used ktime_get to get the current time instead of do_gettimeofday. * And, used ktime_us_delta to get the elapsed time directly. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/irda/ali-ircc.c11
-rw-r--r--drivers/net/irda/ali-ircc.h5
-rw-r--r--drivers/net/irda/au1k_ir.c3
-rw-r--r--drivers/net/irda/irda-usb.c10
-rw-r--r--drivers/net/irda/irda-usb.h5
-rw-r--r--drivers/net/irda/kingsun-sir.c3
-rw-r--r--drivers/net/irda/ks959-sir.c3
-rw-r--r--drivers/net/irda/mcs7780.c2
-rw-r--r--drivers/net/irda/mcs7780.h1
-rw-r--r--drivers/net/irda/nsc-ircc.c7
-rw-r--r--drivers/net/irda/nsc-ircc.h5
-rw-r--r--drivers/net/irda/stir4200.c16
-rw-r--r--drivers/net/irda/via-ircc.h4
-rw-r--r--drivers/net/irda/vlsi_ir.c46
-rw-r--r--drivers/net/irda/vlsi_ir.h2
15 files changed, 34 insertions, 89 deletions
diff --git a/drivers/net/irda/ali-ircc.c b/drivers/net/irda/ali-ircc.c
index 58f98f4de773..58ae11a14bb6 100644
--- a/drivers/net/irda/ali-ircc.c
+++ b/drivers/net/irda/ali-ircc.c
@@ -1462,17 +1462,12 @@ static netdev_tx_t ali_ircc_fir_hard_xmit(struct sk_buff *skb,
1462 if (mtt) 1462 if (mtt)
1463 { 1463 {
1464 /* Check how much time we have used already */ 1464 /* Check how much time we have used already */
1465 do_gettimeofday(&self->now); 1465 diff = ktime_us_delta(ktime_get(), self->stamp);
1466
1467 diff = self->now.tv_usec - self->stamp.tv_usec;
1468 /* self->stamp is set from ali_ircc_dma_receive_complete() */ 1466 /* self->stamp is set from ali_ircc_dma_receive_complete() */
1469 1467
1470 pr_debug("%s(), ******* diff = %d *******\n", 1468 pr_debug("%s(), ******* diff = %d *******\n",
1471 __func__, diff); 1469 __func__, diff);
1472 1470
1473 if (diff < 0)
1474 diff += 1000000;
1475
1476 /* Check if the mtt is larger than the time we have 1471 /* Check if the mtt is larger than the time we have
1477 * already used by all the protocol processing 1472 * already used by all the protocol processing
1478 */ 1473 */
@@ -1884,7 +1879,7 @@ static int ali_ircc_dma_receive_complete(struct ali_ircc_cb *self)
1884 * reduce the min turn time a bit since we will know 1879 * reduce the min turn time a bit since we will know
1885 * how much time we have used for protocol processing 1880 * how much time we have used for protocol processing
1886 */ 1881 */
1887 do_gettimeofday(&self->stamp); 1882 self->stamp = ktime_get();
1888 1883
1889 skb = dev_alloc_skb(len+1); 1884 skb = dev_alloc_skb(len+1);
1890 if (skb == NULL) 1885 if (skb == NULL)
diff --git a/drivers/net/irda/ali-ircc.h b/drivers/net/irda/ali-ircc.h
index 0c8edb41bd0a..c2d9747a5108 100644
--- a/drivers/net/irda/ali-ircc.h
+++ b/drivers/net/irda/ali-ircc.h
@@ -22,7 +22,7 @@
22#ifndef ALI_IRCC_H 22#ifndef ALI_IRCC_H
23#define ALI_IRCC_H 23#define ALI_IRCC_H
24 24
25#include <linux/time.h> 25#include <linux/ktime.h>
26 26
27#include <linux/spinlock.h> 27#include <linux/spinlock.h>
28#include <linux/pm.h> 28#include <linux/pm.h>
@@ -209,8 +209,7 @@ struct ali_ircc_cb {
209 209
210 unsigned char rcvFramesOverflow; 210 unsigned char rcvFramesOverflow;
211 211
212 struct timeval stamp; 212 ktime_t stamp;
213 struct timeval now;
214 213
215 spinlock_t lock; /* For serializing operations */ 214 spinlock_t lock; /* For serializing operations */
216 215
diff --git a/drivers/net/irda/au1k_ir.c b/drivers/net/irda/au1k_ir.c
index e151205281e2..44e4f386a5dc 100644
--- a/drivers/net/irda/au1k_ir.c
+++ b/drivers/net/irda/au1k_ir.c
@@ -24,7 +24,6 @@
24#include <linux/interrupt.h> 24#include <linux/interrupt.h>
25#include <linux/platform_device.h> 25#include <linux/platform_device.h>
26#include <linux/slab.h> 26#include <linux/slab.h>
27#include <linux/time.h>
28#include <linux/types.h> 27#include <linux/types.h>
29#include <linux/ioport.h> 28#include <linux/ioport.h>
30 29
@@ -163,8 +162,6 @@ struct au1k_private {
163 iobuff_t rx_buff; 162 iobuff_t rx_buff;
164 163
165 struct net_device *netdev; 164 struct net_device *netdev;
166 struct timeval stamp;
167 struct timeval now;
168 struct qos_info qos; 165 struct qos_info qos;
169 struct irlap_cb *irlap; 166 struct irlap_cb *irlap;
170 167
diff --git a/drivers/net/irda/irda-usb.c b/drivers/net/irda/irda-usb.c
index 48b2f9a321b7..f6c916312577 100644
--- a/drivers/net/irda/irda-usb.c
+++ b/drivers/net/irda/irda-usb.c
@@ -495,18 +495,12 @@ static netdev_tx_t irda_usb_hard_xmit(struct sk_buff *skb,
495 mtt = irda_get_mtt(skb); 495 mtt = irda_get_mtt(skb);
496 if (mtt) { 496 if (mtt) {
497 int diff; 497 int diff;
498 do_gettimeofday(&self->now); 498 diff = ktime_us_delta(ktime_get(), self->stamp);
499 diff = self->now.tv_usec - self->stamp.tv_usec;
500#ifdef IU_USB_MIN_RTT 499#ifdef IU_USB_MIN_RTT
501 /* Factor in USB delays -> Get rid of udelay() that 500 /* Factor in USB delays -> Get rid of udelay() that
502 * would be lost in the noise - Jean II */ 501 * would be lost in the noise - Jean II */
503 diff += IU_USB_MIN_RTT; 502 diff += IU_USB_MIN_RTT;
504#endif /* IU_USB_MIN_RTT */ 503#endif /* IU_USB_MIN_RTT */
505 /* If the usec counter did wraparound, the diff will
506 * go negative (tv_usec is a long), so we need to
507 * correct it by one second. Jean II */
508 if (diff < 0)
509 diff += 1000000;
510 504
511 /* Check if the mtt is larger than the time we have 505 /* Check if the mtt is larger than the time we have
512 * already used by all the protocol processing 506 * already used by all the protocol processing
@@ -869,7 +863,7 @@ static void irda_usb_receive(struct urb *urb)
869 * reduce the min turn time a bit since we will know 863 * reduce the min turn time a bit since we will know
870 * how much time we have used for protocol processing 864 * how much time we have used for protocol processing
871 */ 865 */
872 do_gettimeofday(&self->stamp); 866 self->stamp = ktime_get();
873 867
874 /* Check if we need to copy the data to a new skb or not. 868 /* Check if we need to copy the data to a new skb or not.
875 * For most frames, we use ZeroCopy and pass the already 869 * For most frames, we use ZeroCopy and pass the already
diff --git a/drivers/net/irda/irda-usb.h b/drivers/net/irda/irda-usb.h
index 58ddb5214916..8ac389fa9348 100644
--- a/drivers/net/irda/irda-usb.h
+++ b/drivers/net/irda/irda-usb.h
@@ -29,7 +29,7 @@
29 * 29 *
30 *****************************************************************************/ 30 *****************************************************************************/
31 31
32#include <linux/time.h> 32#include <linux/ktime.h>
33 33
34#include <net/irda/irda.h> 34#include <net/irda/irda.h>
35#include <net/irda/irda_device.h> /* struct irlap_cb */ 35#include <net/irda/irda_device.h> /* struct irlap_cb */
@@ -157,8 +157,7 @@ struct irda_usb_cb {
157 char *speed_buff; /* Buffer for speed changes */ 157 char *speed_buff; /* Buffer for speed changes */
158 char *tx_buff; 158 char *tx_buff;
159 159
160 struct timeval stamp; 160 ktime_t stamp;
161 struct timeval now;
162 161
163 spinlock_t lock; /* For serializing Tx operations */ 162 spinlock_t lock; /* For serializing Tx operations */
164 163
diff --git a/drivers/net/irda/kingsun-sir.c b/drivers/net/irda/kingsun-sir.c
index e638893e98a9..fb5d162ec7d2 100644
--- a/drivers/net/irda/kingsun-sir.c
+++ b/drivers/net/irda/kingsun-sir.c
@@ -114,7 +114,6 @@ struct kingsun_cb {
114 (usually 8) */ 114 (usually 8) */
115 115
116 iobuff_t rx_buff; /* receive unwrap state machine */ 116 iobuff_t rx_buff; /* receive unwrap state machine */
117 struct timeval rx_time;
118 spinlock_t lock; 117 spinlock_t lock;
119 int receiving; 118 int receiving;
120 119
@@ -235,7 +234,6 @@ static void kingsun_rcv_irq(struct urb *urb)
235 &kingsun->netdev->stats, 234 &kingsun->netdev->stats,
236 &kingsun->rx_buff, bytes[i]); 235 &kingsun->rx_buff, bytes[i]);
237 } 236 }
238 do_gettimeofday(&kingsun->rx_time);
239 kingsun->receiving = 237 kingsun->receiving =
240 (kingsun->rx_buff.state != OUTSIDE_FRAME) 238 (kingsun->rx_buff.state != OUTSIDE_FRAME)
241 ? 1 : 0; 239 ? 1 : 0;
@@ -273,7 +271,6 @@ static int kingsun_net_open(struct net_device *netdev)
273 271
274 skb_reserve(kingsun->rx_buff.skb, 1); 272 skb_reserve(kingsun->rx_buff.skb, 1);
275 kingsun->rx_buff.head = kingsun->rx_buff.skb->data; 273 kingsun->rx_buff.head = kingsun->rx_buff.skb->data;
276 do_gettimeofday(&kingsun->rx_time);
277 274
278 kingsun->rx_urb = usb_alloc_urb(0, GFP_KERNEL); 275 kingsun->rx_urb = usb_alloc_urb(0, GFP_KERNEL);
279 if (!kingsun->rx_urb) 276 if (!kingsun->rx_urb)
diff --git a/drivers/net/irda/ks959-sir.c b/drivers/net/irda/ks959-sir.c
index e6b3804edacd..8e6e0edf2440 100644
--- a/drivers/net/irda/ks959-sir.c
+++ b/drivers/net/irda/ks959-sir.c
@@ -187,7 +187,6 @@ struct ks959_cb {
187 __u8 *rx_buf; 187 __u8 *rx_buf;
188 __u8 rx_variable_xormask; 188 __u8 rx_variable_xormask;
189 iobuff_t rx_unwrap_buff; 189 iobuff_t rx_unwrap_buff;
190 struct timeval rx_time;
191 190
192 struct usb_ctrlrequest *speed_setuprequest; 191 struct usb_ctrlrequest *speed_setuprequest;
193 struct urb *speed_urb; 192 struct urb *speed_urb;
@@ -476,7 +475,6 @@ static void ks959_rcv_irq(struct urb *urb)
476 bytes[i]); 475 bytes[i]);
477 } 476 }
478 } 477 }
479 do_gettimeofday(&kingsun->rx_time);
480 kingsun->receiving = 478 kingsun->receiving =
481 (kingsun->rx_unwrap_buff.state != OUTSIDE_FRAME) ? 1 : 0; 479 (kingsun->rx_unwrap_buff.state != OUTSIDE_FRAME) ? 1 : 0;
482 } 480 }
@@ -514,7 +512,6 @@ static int ks959_net_open(struct net_device *netdev)
514 512
515 skb_reserve(kingsun->rx_unwrap_buff.skb, 1); 513 skb_reserve(kingsun->rx_unwrap_buff.skb, 1);
516 kingsun->rx_unwrap_buff.head = kingsun->rx_unwrap_buff.skb->data; 514 kingsun->rx_unwrap_buff.head = kingsun->rx_unwrap_buff.skb->data;
517 do_gettimeofday(&kingsun->rx_time);
518 515
519 kingsun->rx_urb = usb_alloc_urb(0, GFP_KERNEL); 516 kingsun->rx_urb = usb_alloc_urb(0, GFP_KERNEL);
520 if (!kingsun->rx_urb) 517 if (!kingsun->rx_urb)
diff --git a/drivers/net/irda/mcs7780.c b/drivers/net/irda/mcs7780.c
index e4d678fbeb2f..bca6a1e72d1d 100644
--- a/drivers/net/irda/mcs7780.c
+++ b/drivers/net/irda/mcs7780.c
@@ -722,7 +722,6 @@ static int mcs_net_open(struct net_device *netdev)
722 722
723 skb_reserve(mcs->rx_buff.skb, 1); 723 skb_reserve(mcs->rx_buff.skb, 1);
724 mcs->rx_buff.head = mcs->rx_buff.skb->data; 724 mcs->rx_buff.head = mcs->rx_buff.skb->data;
725 do_gettimeofday(&mcs->rx_time);
726 725
727 /* 726 /*
728 * Now that everything should be initialized properly, 727 * Now that everything should be initialized properly,
@@ -799,7 +798,6 @@ static void mcs_receive_irq(struct urb *urb)
799 mcs_unwrap_fir(mcs, urb->transfer_buffer, 798 mcs_unwrap_fir(mcs, urb->transfer_buffer,
800 urb->actual_length); 799 urb->actual_length);
801 } 800 }
802 do_gettimeofday(&mcs->rx_time);
803 } 801 }
804 802
805 ret = usb_submit_urb(urb, GFP_ATOMIC); 803 ret = usb_submit_urb(urb, GFP_ATOMIC);
diff --git a/drivers/net/irda/mcs7780.h b/drivers/net/irda/mcs7780.h
index b10689b2887c..a6e8f7dbafc9 100644
--- a/drivers/net/irda/mcs7780.h
+++ b/drivers/net/irda/mcs7780.h
@@ -116,7 +116,6 @@ struct mcs_cb {
116 __u8 *fifo_status; 116 __u8 *fifo_status;
117 117
118 iobuff_t rx_buff; /* receive unwrap state machine */ 118 iobuff_t rx_buff; /* receive unwrap state machine */
119 struct timeval rx_time;
120 spinlock_t lock; 119 spinlock_t lock;
121 int receiving; 120 int receiving;
122 121
diff --git a/drivers/net/irda/nsc-ircc.c b/drivers/net/irda/nsc-ircc.c
index e7317b104bfb..dc0dbd8dd0b5 100644
--- a/drivers/net/irda/nsc-ircc.c
+++ b/drivers/net/irda/nsc-ircc.c
@@ -1501,10 +1501,7 @@ static netdev_tx_t nsc_ircc_hard_xmit_fir(struct sk_buff *skb,
1501 mtt = irda_get_mtt(skb); 1501 mtt = irda_get_mtt(skb);
1502 if (mtt) { 1502 if (mtt) {
1503 /* Check how much time we have used already */ 1503 /* Check how much time we have used already */
1504 do_gettimeofday(&self->now); 1504 diff = ktime_us_delta(ktime_get(), self->stamp);
1505 diff = self->now.tv_usec - self->stamp.tv_usec;
1506 if (diff < 0)
1507 diff += 1000000;
1508 1505
1509 /* Check if the mtt is larger than the time we have 1506 /* Check if the mtt is larger than the time we have
1510 * already used by all the protocol processing 1507 * already used by all the protocol processing
@@ -1867,7 +1864,7 @@ static int nsc_ircc_dma_receive_complete(struct nsc_ircc_cb *self, int iobase)
1867 * reduce the min turn time a bit since we will know 1864 * reduce the min turn time a bit since we will know
1868 * how much time we have used for protocol processing 1865 * how much time we have used for protocol processing
1869 */ 1866 */
1870 do_gettimeofday(&self->stamp); 1867 self->stamp = ktime_get();
1871 1868
1872 skb = dev_alloc_skb(len+1); 1869 skb = dev_alloc_skb(len+1);
1873 if (skb == NULL) { 1870 if (skb == NULL) {
diff --git a/drivers/net/irda/nsc-ircc.h b/drivers/net/irda/nsc-ircc.h
index 32fa58211fad..7be5acb56532 100644
--- a/drivers/net/irda/nsc-ircc.h
+++ b/drivers/net/irda/nsc-ircc.h
@@ -28,7 +28,7 @@
28#ifndef NSC_IRCC_H 28#ifndef NSC_IRCC_H
29#define NSC_IRCC_H 29#define NSC_IRCC_H
30 30
31#include <linux/time.h> 31#include <linux/ktime.h>
32 32
33#include <linux/spinlock.h> 33#include <linux/spinlock.h>
34#include <linux/pm.h> 34#include <linux/pm.h>
@@ -263,8 +263,7 @@ struct nsc_ircc_cb {
263 263
264 __u8 ier; /* Interrupt enable register */ 264 __u8 ier; /* Interrupt enable register */
265 265
266 struct timeval stamp; 266 ktime_t stamp;
267 struct timeval now;
268 267
269 spinlock_t lock; /* For serializing operations */ 268 spinlock_t lock; /* For serializing operations */
270 269
diff --git a/drivers/net/irda/stir4200.c b/drivers/net/irda/stir4200.c
index dd1bd1060ec9..83cc48a01802 100644
--- a/drivers/net/irda/stir4200.c
+++ b/drivers/net/irda/stir4200.c
@@ -40,6 +40,7 @@
40#include <linux/moduleparam.h> 40#include <linux/moduleparam.h>
41 41
42#include <linux/kernel.h> 42#include <linux/kernel.h>
43#include <linux/ktime.h>
43#include <linux/types.h> 44#include <linux/types.h>
44#include <linux/time.h> 45#include <linux/time.h>
45#include <linux/skbuff.h> 46#include <linux/skbuff.h>
@@ -174,7 +175,7 @@ struct stir_cb {
174 __u8 *fifo_status; 175 __u8 *fifo_status;
175 176
176 iobuff_t rx_buff; /* receive unwrap state machine */ 177 iobuff_t rx_buff; /* receive unwrap state machine */
177 struct timeval rx_time; 178 ktime_t rx_time;
178 int receiving; 179 int receiving;
179 struct urb *rx_urb; 180 struct urb *rx_urb;
180}; 181};
@@ -650,15 +651,12 @@ static int fifo_txwait(struct stir_cb *stir, int space)
650static void turnaround_delay(const struct stir_cb *stir, long us) 651static void turnaround_delay(const struct stir_cb *stir, long us)
651{ 652{
652 long ticks; 653 long ticks;
653 struct timeval now;
654 654
655 if (us <= 0) 655 if (us <= 0)
656 return; 656 return;
657 657
658 do_gettimeofday(&now); 658 us -= ktime_us_delta(ktime_get(), stir->rx_time);
659 if (now.tv_sec - stir->rx_time.tv_sec > 0) 659
660 us -= USEC_PER_SEC;
661 us -= now.tv_usec - stir->rx_time.tv_usec;
662 if (us < 10) 660 if (us < 10)
663 return; 661 return;
664 662
@@ -823,8 +821,8 @@ static void stir_rcv_irq(struct urb *urb)
823 pr_debug("receive %d\n", urb->actual_length); 821 pr_debug("receive %d\n", urb->actual_length);
824 unwrap_chars(stir, urb->transfer_buffer, 822 unwrap_chars(stir, urb->transfer_buffer,
825 urb->actual_length); 823 urb->actual_length);
826 824
827 do_gettimeofday(&stir->rx_time); 825 stir->rx_time = ktime_get();
828 } 826 }
829 827
830 /* kernel thread is stopping receiver don't resubmit */ 828 /* kernel thread is stopping receiver don't resubmit */
@@ -876,7 +874,7 @@ static int stir_net_open(struct net_device *netdev)
876 874
877 skb_reserve(stir->rx_buff.skb, 1); 875 skb_reserve(stir->rx_buff.skb, 1);
878 stir->rx_buff.head = stir->rx_buff.skb->data; 876 stir->rx_buff.head = stir->rx_buff.skb->data;
879 do_gettimeofday(&stir->rx_time); 877 stir->rx_time = ktime_get();
880 878
881 stir->rx_urb = usb_alloc_urb(0, GFP_KERNEL); 879 stir->rx_urb = usb_alloc_urb(0, GFP_KERNEL);
882 if (!stir->rx_urb) 880 if (!stir->rx_urb)
diff --git a/drivers/net/irda/via-ircc.h b/drivers/net/irda/via-ircc.h
index 7ce820ecc361..ac1525573398 100644
--- a/drivers/net/irda/via-ircc.h
+++ b/drivers/net/irda/via-ircc.h
@@ -29,7 +29,6 @@ this program; if not, see <http://www.gnu.org/licenses/>.
29 ********************************************************************/ 29 ********************************************************************/
30#ifndef via_IRCC_H 30#ifndef via_IRCC_H
31#define via_IRCC_H 31#define via_IRCC_H
32#include <linux/time.h>
33#include <linux/spinlock.h> 32#include <linux/spinlock.h>
34#include <linux/pm.h> 33#include <linux/pm.h>
35#include <linux/types.h> 34#include <linux/types.h>
@@ -106,9 +105,6 @@ struct via_ircc_cb {
106 105
107 __u8 ier; /* Interrupt enable register */ 106 __u8 ier; /* Interrupt enable register */
108 107
109 struct timeval stamp;
110 struct timeval now;
111
112 spinlock_t lock; /* For serializing operations */ 108 spinlock_t lock; /* For serializing operations */
113 109
114 __u32 flags; /* Interface flags */ 110 __u32 flags; /* Interface flags */
diff --git a/drivers/net/irda/vlsi_ir.c b/drivers/net/irda/vlsi_ir.c
index ac39d9f33d5f..a0849f49bbec 100644
--- a/drivers/net/irda/vlsi_ir.c
+++ b/drivers/net/irda/vlsi_ir.c
@@ -33,6 +33,7 @@ MODULE_LICENSE("GPL");
33/********************************************************/ 33/********************************************************/
34 34
35#include <linux/kernel.h> 35#include <linux/kernel.h>
36#include <linux/ktime.h>
36#include <linux/init.h> 37#include <linux/init.h>
37#include <linux/interrupt.h> 38#include <linux/interrupt.h>
38#include <linux/pci.h> 39#include <linux/pci.h>
@@ -40,9 +41,9 @@ MODULE_LICENSE("GPL");
40#include <linux/netdevice.h> 41#include <linux/netdevice.h>
41#include <linux/skbuff.h> 42#include <linux/skbuff.h>
42#include <linux/delay.h> 43#include <linux/delay.h>
43#include <linux/time.h>
44#include <linux/proc_fs.h> 44#include <linux/proc_fs.h>
45#include <linux/seq_file.h> 45#include <linux/seq_file.h>
46#include <linux/math64.h>
46#include <linux/mutex.h> 47#include <linux/mutex.h>
47#include <asm/uaccess.h> 48#include <asm/uaccess.h>
48#include <asm/byteorder.h> 49#include <asm/byteorder.h>
@@ -180,8 +181,7 @@ static void vlsi_proc_ndev(struct seq_file *seq, struct net_device *ndev)
180 vlsi_irda_dev_t *idev = netdev_priv(ndev); 181 vlsi_irda_dev_t *idev = netdev_priv(ndev);
181 u8 byte; 182 u8 byte;
182 u16 word; 183 u16 word;
183 unsigned delta1, delta2; 184 s32 sec, usec;
184 struct timeval now;
185 unsigned iobase = ndev->base_addr; 185 unsigned iobase = ndev->base_addr;
186 186
187 seq_printf(seq, "\n%s link state: %s / %s / %s / %s\n", ndev->name, 187 seq_printf(seq, "\n%s link state: %s / %s / %s / %s\n", ndev->name,
@@ -277,17 +277,9 @@ static void vlsi_proc_ndev(struct seq_file *seq, struct net_device *ndev)
277 seq_printf(seq, "\nsw-state:\n"); 277 seq_printf(seq, "\nsw-state:\n");
278 seq_printf(seq, "IrPHY setup: %d baud - %s encoding\n", idev->baud, 278 seq_printf(seq, "IrPHY setup: %d baud - %s encoding\n", idev->baud,
279 (idev->mode==IFF_SIR)?"SIR":((idev->mode==IFF_MIR)?"MIR":"FIR")); 279 (idev->mode==IFF_SIR)?"SIR":((idev->mode==IFF_MIR)?"MIR":"FIR"));
280 do_gettimeofday(&now); 280 sec = div_s64_rem(ktime_us_delta(ktime_get(), idev->last_rx),
281 if (now.tv_usec >= idev->last_rx.tv_usec) { 281 USEC_PER_SEC, &usec);
282 delta2 = now.tv_usec - idev->last_rx.tv_usec; 282 seq_printf(seq, "last rx: %ul.%06u sec\n", sec, usec);
283 delta1 = 0;
284 }
285 else {
286 delta2 = 1000000 + now.tv_usec - idev->last_rx.tv_usec;
287 delta1 = 1;
288 }
289 seq_printf(seq, "last rx: %lu.%06u sec\n",
290 now.tv_sec - idev->last_rx.tv_sec - delta1, delta2);
291 283
292 seq_printf(seq, "RX: packets=%lu / bytes=%lu / errors=%lu / dropped=%lu", 284 seq_printf(seq, "RX: packets=%lu / bytes=%lu / errors=%lu / dropped=%lu",
293 ndev->stats.rx_packets, ndev->stats.rx_bytes, ndev->stats.rx_errors, 285 ndev->stats.rx_packets, ndev->stats.rx_bytes, ndev->stats.rx_errors,
@@ -661,7 +653,7 @@ static void vlsi_rx_interrupt(struct net_device *ndev)
661 } 653 }
662 } 654 }
663 655
664 do_gettimeofday(&idev->last_rx); /* remember "now" for later mtt delay */ 656 idev->last_rx = ktime_get(); /* remember "now" for later mtt delay */
665 657
666 vlsi_fill_rx(r); 658 vlsi_fill_rx(r);
667 659
@@ -858,9 +850,8 @@ static netdev_tx_t vlsi_hard_start_xmit(struct sk_buff *skb,
858 unsigned iobase = ndev->base_addr; 850 unsigned iobase = ndev->base_addr;
859 u8 status; 851 u8 status;
860 u16 config; 852 u16 config;
861 int mtt; 853 int mtt, diff;
862 int len, speed; 854 int len, speed;
863 struct timeval now, ready;
864 char *msg = NULL; 855 char *msg = NULL;
865 856
866 speed = irda_get_next_speed(skb); 857 speed = irda_get_next_speed(skb);
@@ -940,21 +931,10 @@ static netdev_tx_t vlsi_hard_start_xmit(struct sk_buff *skb,
940 spin_unlock_irqrestore(&idev->lock, flags); 931 spin_unlock_irqrestore(&idev->lock, flags);
941 932
942 if ((mtt = irda_get_mtt(skb)) > 0) { 933 if ((mtt = irda_get_mtt(skb)) > 0) {
943 934 diff = ktime_us_delta(ktime_get(), idev->last_rx);
944 ready.tv_usec = idev->last_rx.tv_usec + mtt; 935 if (mtt > diff)
945 ready.tv_sec = idev->last_rx.tv_sec; 936 udelay(mtt - diff);
946 if (ready.tv_usec >= 1000000) {
947 ready.tv_usec -= 1000000;
948 ready.tv_sec++; /* IrLAP 1.1: mtt always < 1 sec */
949 }
950 for(;;) {
951 do_gettimeofday(&now);
952 if (now.tv_sec > ready.tv_sec ||
953 (now.tv_sec==ready.tv_sec && now.tv_usec>=ready.tv_usec))
954 break;
955 udelay(100);
956 /* must not sleep here - called under netif_tx_lock! */ 937 /* must not sleep here - called under netif_tx_lock! */
957 }
958 } 938 }
959 939
960 /* tx buffer already owned by CPU due to pci_dma_sync_single_for_cpu() 940 /* tx buffer already owned by CPU due to pci_dma_sync_single_for_cpu()
@@ -1333,7 +1313,7 @@ static int vlsi_start_hw(vlsi_irda_dev_t *idev)
1333 1313
1334 vlsi_fill_rx(idev->rx_ring); 1314 vlsi_fill_rx(idev->rx_ring);
1335 1315
1336 do_gettimeofday(&idev->last_rx); /* first mtt may start from now on */ 1316 idev->last_rx = ktime_get(); /* first mtt may start from now on */
1337 1317
1338 outw(0, iobase+VLSI_PIO_PROMPT); /* kick hw state machine */ 1318 outw(0, iobase+VLSI_PIO_PROMPT); /* kick hw state machine */
1339 1319
@@ -1520,7 +1500,7 @@ static int vlsi_open(struct net_device *ndev)
1520 if (!idev->irlap) 1500 if (!idev->irlap)
1521 goto errout_free_ring; 1501 goto errout_free_ring;
1522 1502
1523 do_gettimeofday(&idev->last_rx); /* first mtt may start from now on */ 1503 idev->last_rx = ktime_get(); /* first mtt may start from now on */
1524 1504
1525 idev->new_baud = 9600; /* start with IrPHY using 9600(SIR) mode */ 1505 idev->new_baud = 9600; /* start with IrPHY using 9600(SIR) mode */
1526 1506
diff --git a/drivers/net/irda/vlsi_ir.h b/drivers/net/irda/vlsi_ir.h
index f9119c6d2a09..f9db2ce4c5c6 100644
--- a/drivers/net/irda/vlsi_ir.h
+++ b/drivers/net/irda/vlsi_ir.h
@@ -723,7 +723,7 @@ typedef struct vlsi_irda_dev {
723 void *virtaddr; 723 void *virtaddr;
724 struct vlsi_ring *tx_ring, *rx_ring; 724 struct vlsi_ring *tx_ring, *rx_ring;
725 725
726 struct timeval last_rx; 726 ktime_t last_rx;
727 727
728 spinlock_t lock; 728 spinlock_t lock;
729 struct mutex mtx; 729 struct mutex mtx;