All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pingbo Wen <pingbo.wen@linaro.org>
To: Arnd Bergmann <arnd@arndb.de>
Cc: y2038@lists.linaro.org, dmitry.torokhov@gmail.com,
	linux-kernel@vger.kernel.org, linux-input@vger.kernel.org
Subject: Re: [Y2038] [PATCH V2] hil_mlc: convert timeval to ktime_t
Date: Fri, 23 Oct 2015 20:32:50 +0800	[thread overview]
Message-ID: <05CEA4E0-A8CF-42DA-89C3-F0968DE73CB4@linaro.org> (raw)
In-Reply-To: <33014393.CcP7q7PhGq@wuerfel>


> 在 2015年10月23日,17:55,Arnd Bergmann <arnd@arndb.de> 写道:
> 
> On Friday 23 October 2015 17:24:59 WEN Pingbo wrote:
>> Using struct timeval will cause time overflow in 2038, replacing it with
>> ktime_t. And we don't need to handle sec and nsec separately.
>> 
> 
> This part looks good now, but as I commented in version 1, it should
> really be a separate patch rather than combined with the rest that
> is dealing with another use of timeval.

Ok, I will split it in next version.

>> -		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.

> 
>> diff --git a/drivers/input/serio/hp_sdc_mlc.c b/drivers/input/serio/hp_sdc_mlc.c
>> index d50f067..0a27b89 100644
>> --- a/drivers/input/serio/hp_sdc_mlc.c
>> +++ b/drivers/input/serio/hp_sdc_mlc.c
>> @@ -149,7 +149,8 @@ static int hp_sdc_mlc_in(hil_mlc *mlc, suseconds_t timeout)
>> 
>> 	/* Try to down the semaphore */
>> 	if (down_trylock(&mlc->isem)) {
>> -		struct timeval tv;
>> +		ktime_t tmp = ktime_sub(ktime_get(), mlc->instart);
>> +
>> 		if (priv->emtestmode) {
>> 			mlc->ipacket[0] =
>> 				HIL_ERR_INT | (mlc->opacket &
> 
> Maybe give the variable a more useful name than 'tmp'?
> 
> You could also remove the variable entirely if you slightly restructure
> the condition below.

I see, thanks for point out.

Pingbo


  reply	other threads:[~2015-10-23 12:32 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-18  9:45 [PATCH] hil_mlc: convert timeval to timespec64 WEN Pingbo
2015-10-19  8:58 ` [Y2038] " Arnd Bergmann
2015-10-23  9:12   ` Pingbo Wen
2015-10-23  9:45     ` Arnd Bergmann
2015-10-23  9:45       ` Arnd Bergmann
2015-10-23 12:34       ` [Y2038] " Pingbo Wen
2015-10-23 12:34         ` Pingbo Wen
2015-10-24  4:00       ` [PATCH V3 1/2] hil_mlc: convert timeval to time64_t WEN Pingbo
2015-10-24  4:00         ` WEN Pingbo
2015-10-24  4:00         ` [PATCH V3 2/2] hil_mlc: convert timeval to jiffies WEN Pingbo
2015-10-24  4:00           ` WEN Pingbo
2015-10-23  9:24   ` [PATCH V2] hil_mlc: convert timeval to ktime_t WEN Pingbo
2015-10-23  9:24     ` WEN Pingbo
2015-10-23  9:55     ` [Y2038] " Arnd Bergmann
2015-10-23 12:32       ` Pingbo Wen [this message]
2015-10-23 13:51         ` Arnd Bergmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=05CEA4E0-A8CF-42DA-89C3-F0968DE73CB4@linaro.org \
    --to=pingbo.wen@linaro.org \
    --cc=arnd@arndb.de \
    --cc=dmitry.torokhov@gmail.com \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=y2038@lists.linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.