Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1254626

Re: [Y2038] [PATCH V2] hil_mlc: convert timeval to ktime_t

From Arnd Bergmann <arnd@arndb.de>
Newsgroups linux.kernel
Subject Re: [Y2038] [PATCH V2] hil_mlc: convert timeval to ktime_t
Date 2015-10-23 16:00 +0200
Message-ID <qmL2W-3e7-9@gated-at.bofh.it> (permalink)
References <qlesr-7Po-39@gated-at.bofh.it> <qmHiH-6aF-43@gated-at.bofh.it> <qmJNw-1va-9@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Friday 23 October 2015 20:32:50 Pingbo Wen wrote:
> >> -            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 (tmp.tv64 >= (mlc->intimeout * NSEC_PER_USEC))
> >> +                    goto sched;
> >> +            tmp.tv64 = mlc->intimeout * NSEC_PER_USEC - tmp.tv64;
> >> +            if (tmp.tv64 < NSEC_PER_USEC)
> >> +                    goto sched;
> >> +            mod_timer(&hil_mlcs_kicker,
> >> +                            jiffies + nsecs_to_jiffies(tmp.tv64));
> >>              break;
> >>      sched:
> >>              tasklet_schedule(&hil_mlcs_tasklet);
> > 
> > If I read this right, the code is executed one for each input event such
> > as a keypress or mouse movement. In the latter case, doing nsecs_to_jiffies()
> > here is actually a bit expensive, and I stil think it can be avoided
> > by just using jiffies.
> > 
> > For the (tmp.tv64 < NSEC_PER_USEC) part, did you just do that because
> > I said this, or did you actually prove that it is required? I'm still
> > confused about what the driver is trying to achieve here.
> 
> More explanation here:)
> the judgement here is to prevent mod_timer with zero delta. I can not
> make sure whether the module have nanosecond precise, so just keep same.

Ok, I guess I was misreading the original code. What it actually does
is to check the remaining time in jiffies, not in microseconds, so the
algorithm is:

	if (already expired)
		schedule tasklet
	else {
		convert to jiffies
		if (expired just now)
			schedule tasklet
		else
			schedule tasklet from timer
	}

So the entire code is meant to guarantee that the tasklet is getting
scheduled, and the first two cases are just an optimization to avoid
going through the timer. I checked the code for mod_timer to verify
that mod_timer with an argument in the past will just cause the
handler to be called at the next tick, so we don't really need the
middle case, and the logic becomes really simple if you use jiffies
instead of ktime_t.

	Arnd
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

[PATCH] hil_mlc: convert timeval to timespec64 WEN Pingbo <pingbo.wen@linaro.org> - 2015-10-18 11:50 +0200
  Re: [Y2038] [PATCH] hil_mlc: convert timeval to timespec64 Arnd Bergmann <arnd@arndb.de> - 2015-10-19 11:00 +0200
    Re: [Y2038] [PATCH] hil_mlc: convert timeval to timespec64 Pingbo Wen <pingbo.wen@linaro.org> - 2015-10-23 11:20 +0200
      Re: [Y2038] [PATCH] hil_mlc: convert timeval to timespec64 Arnd Bergmann <arnd@arndb.de> - 2015-10-23 11:50 +0200
        Re: [Y2038] [PATCH] hil_mlc: convert timeval to timespec64 Pingbo Wen <pingbo.wen@linaro.org> - 2015-10-23 14:40 +0200
        [PATCH V3 1/2] hil_mlc: convert timeval to time64_t WEN Pingbo <pingbo.wen@linaro.org> - 2015-10-24 06:10 +0200
          [PATCH V3 2/2] hil_mlc: convert timeval to jiffies WEN Pingbo <pingbo.wen@linaro.org> - 2015-10-24 06:10 +0200
    [PATCH V2] hil_mlc: convert timeval to ktime_t WEN Pingbo <pingbo.wen@linaro.org> - 2015-10-23 11:30 +0200
      Re: [Y2038] [PATCH V2] hil_mlc: convert timeval to ktime_t Arnd Bergmann <arnd@arndb.de> - 2015-10-23 12:00 +0200
        Re: [Y2038] [PATCH V2] hil_mlc: convert timeval to ktime_t Pingbo Wen <pingbo.wen@linaro.org> - 2015-10-23 14:40 +0200
          Re: [Y2038] [PATCH V2] hil_mlc: convert timeval to ktime_t Arnd Bergmann <arnd@arndb.de> - 2015-10-23 16:00 +0200

csiph-web