|
@@ -602,8 +602,8 @@ static inline void hilse_setup_input(hil_mlc *mlc, const struct hilse_node *node
|
|
|
BUG();
|
|
|
}
|
|
|
mlc->istarted = 1;
|
|
|
- mlc->intimeout = node->arg;
|
|
|
- do_gettimeofday(&(mlc->instart));
|
|
|
+ mlc->intimeout = usecs_to_jiffies(node->arg);
|
|
|
+ mlc->instart = jiffies;
|
|
|
mlc->icount = 15;
|
|
|
memset(mlc->ipacket, 0, 16 * sizeof(hil_packet));
|
|
|
BUG_ON(down_trylock(&mlc->isem));
|
|
@@ -708,7 +708,7 @@ static int hilse_donode(hil_mlc *mlc)
|
|
|
break;
|
|
|
}
|
|
|
mlc->ostarted = 0;
|
|
|
- do_gettimeofday(&(mlc->instart));
|
|
|
+ mlc->instart = jiffies;
|
|
|
write_unlock_irqrestore(&mlc->lock, flags);
|
|
|
nextidx = HILSEN_NEXT;
|
|
|
break;
|
|
@@ -729,18 +729,14 @@ static int hilse_donode(hil_mlc *mlc)
|
|
|
#endif
|
|
|
|
|
|
while (nextidx & HILSEN_SCHED) {
|
|
|
- struct timeval tv;
|
|
|
+ unsigned long now = jiffies;
|
|
|
|
|
|
if (!sched_long)
|
|
|
goto sched;
|
|
|
|
|
|
- do_gettimeofday(&tv);
|
|
|
- tv.tv_usec += USEC_PER_SEC * (tv.tv_sec - mlc->instart.tv_sec);
|
|
|
- tv.tv_usec -= mlc->instart.tv_usec;
|
|
|
- if (tv.tv_usec >= mlc->intimeout) goto sched;
|
|
|
- tv.tv_usec = (mlc->intimeout - tv.tv_usec) * HZ / USEC_PER_SEC;
|
|
|
- if (!tv.tv_usec) goto sched;
|
|
|
- mod_timer(&hil_mlcs_kicker, jiffies + tv.tv_usec);
|
|
|
+ if (time_after(now, mlc->instart + mlc->intimeout))
|
|
|
+ goto sched;
|
|
|
+ mod_timer(&hil_mlcs_kicker, mlc->instart + mlc->intimeout);
|
|
|
break;
|
|
|
sched:
|
|
|
tasklet_schedule(&hil_mlcs_tasklet);
|