From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752503AbbJWJZU (ORCPT ); Fri, 23 Oct 2015 05:25:20 -0400 Received: from mail-pa0-f52.google.com ([209.85.220.52]:33028 "EHLO mail-pa0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751239AbbJWJZR (ORCPT ); Fri, 23 Oct 2015 05:25:17 -0400 From: WEN Pingbo To: arnd@arndb.de Cc: y2038@lists.linaro.org, dmitry.torokhov@gmail.com, linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, WEN Pingbo Subject: [PATCH V2] hil_mlc: convert timeval to ktime_t Date: Fri, 23 Oct 2015 17:24:59 +0800 Message-Id: <1445592300-30894-1-git-send-email-pingbo.wen@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <46052377.96MapaKFAy@wuerfel> References: <46052377.96MapaKFAy@wuerfel> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. Since mlc->lcv_t is only interested in seconds, directly using time64_t here. And monotonic time is better here, since the original driver don't care the wall time. In addition, the original driver try to covert usec to jiffies manually in hilse_donode(). This is not a universal and safe way, using nsecs_to_jiffies() to fix that. Signed-off-by: WEN Pingbo --- drivers/input/serio/hil_mlc.c | 28 +++++++++++++--------------- drivers/input/serio/hp_sdc_mlc.c | 8 ++++---- include/linux/hil_mlc.h | 4 ++-- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/drivers/input/serio/hil_mlc.c b/drivers/input/serio/hil_mlc.c index 65605e4..2746509 100644 --- a/drivers/input/serio/hil_mlc.c +++ b/drivers/input/serio/hil_mlc.c @@ -274,14 +274,12 @@ static int hilse_match(hil_mlc *mlc, int unused) /* An LCV used to prevent runaway loops, forces 5 second sleep when reset. */ static int hilse_init_lcv(hil_mlc *mlc, int unused) { - struct timeval tv; + time64_t now = ktime_get_seconds(); - do_gettimeofday(&tv); - - if (mlc->lcv && (tv.tv_sec - mlc->lcv_tv.tv_sec) < 5) + if (mlc->lcv && (now - mlc->lcv_t) < 5) return -1; - mlc->lcv_tv = tv; + mlc->lcv_t = now; mlc->lcv = 0; return 0; @@ -605,7 +603,7 @@ static inline void hilse_setup_input(hil_mlc *mlc, const struct hilse_node *node } mlc->istarted = 1; mlc->intimeout = node->arg; - do_gettimeofday(&(mlc->instart)); + mlc->instart = ktime_get(); mlc->icount = 15; memset(mlc->ipacket, 0, 16 * sizeof(hil_packet)); BUG_ON(down_trylock(&mlc->isem)); @@ -710,7 +708,7 @@ static int hilse_donode(hil_mlc *mlc) break; } mlc->ostarted = 0; - do_gettimeofday(&(mlc->instart)); + mlc->instart = ktime_get(); write_unlock_irqrestore(&mlc->lock, flags); nextidx = HILSEN_NEXT; break; @@ -731,18 +729,18 @@ static int hilse_donode(hil_mlc *mlc) #endif while (nextidx & HILSEN_SCHED) { - struct timeval tv; + ktime_t tmp = ktime_sub(ktime_get(), mlc->instart); 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 (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); 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 & @@ -160,9 +161,8 @@ static int hp_sdc_mlc_in(hil_mlc *mlc, suseconds_t timeout) /* printk(KERN_DEBUG PREFIX ">[%x]\n", mlc->ipacket[0]); */ goto wasup; } - do_gettimeofday(&tv); - tv.tv_usec += USEC_PER_SEC * (tv.tv_sec - mlc->instart.tv_sec); - if (tv.tv_usec - mlc->instart.tv_usec > mlc->intimeout) { + + if (tmp.tv64 > mlc->intimeout * NSEC_PER_USEC) { /* printk("!%i %i", tv.tv_usec - mlc->instart.tv_usec, mlc->intimeout); diff --git a/include/linux/hil_mlc.h b/include/linux/hil_mlc.h index 394a840..2222ec6 100644 --- a/include/linux/hil_mlc.h +++ b/include/linux/hil_mlc.h @@ -144,12 +144,12 @@ struct hil_mlc { hil_packet ipacket[16]; hil_packet imatch; int icount; - struct timeval instart; + ktime_t instart; suseconds_t intimeout; int ddi; /* Last operational device id */ int lcv; /* LCV to throttle loops */ - struct timeval lcv_tv; /* Time loop was started */ + time64_t lcv_t; /* Time loop was started */ int di_map[7]; /* Maps below items to live devs */ struct hil_mlc_devinfo di[HIL_MLC_DEVMEM]; -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: WEN Pingbo Subject: [PATCH V2] hil_mlc: convert timeval to ktime_t Date: Fri, 23 Oct 2015 17:24:59 +0800 Message-ID: <1445592300-30894-1-git-send-email-pingbo.wen@linaro.org> References: <46052377.96MapaKFAy@wuerfel> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <46052377.96MapaKFAy@wuerfel> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: y2038-bounces@lists.linaro.org Sender: "Y2038" To: arnd@arndb.de Cc: y2038@lists.linaro.org, dmitry.torokhov@gmail.com, WEN Pingbo , linux-kernel@vger.kernel.org, linux-input@vger.kernel.org List-Id: linux-input@vger.kernel.org VXNpbmcgc3RydWN0IHRpbWV2YWwgd2lsbCBjYXVzZSB0aW1lIG92ZXJmbG93IGluIDIwMzgsIHJl cGxhY2luZyBpdCB3aXRoCmt0aW1lX3QuIEFuZCB3ZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBzZWMg YW5kIG5zZWMgc2VwYXJhdGVseS4KClNpbmNlIG1sYy0+bGN2X3QgaXMgb25seSBpbnRlcmVzdGVk IGluIHNlY29uZHMsIGRpcmVjdGx5IHVzaW5nCnRpbWU2NF90IGhlcmUuCgpBbmQgbW9ub3Rvbmlj IHRpbWUgaXMgYmV0dGVyIGhlcmUsIHNpbmNlIHRoZSBvcmlnaW5hbCBkcml2ZXIgZG9uJ3QgY2Fy ZQp0aGUgd2FsbCB0aW1lLgoKSW4gYWRkaXRpb24sIHRoZSBvcmlnaW5hbCBkcml2ZXIgdHJ5IHRv IGNvdmVydCB1c2VjIHRvIGppZmZpZXMgbWFudWFsbHkgaW4KaGlsc2VfZG9ub2RlKCkuIFRoaXMg aXMgbm90IGEgdW5pdmVyc2FsIGFuZCBzYWZlIHdheSwgdXNpbmcKbnNlY3NfdG9famlmZmllcygp IHRvIGZpeCB0aGF0LgoKU2lnbmVkLW9mZi1ieTogV0VOIFBpbmdibyA8cGluZ2JvLndlbkBsaW5h cm8ub3JnPgotLS0KIGRyaXZlcnMvaW5wdXQvc2VyaW8vaGlsX21sYy5jICAgIHwgMjggKysrKysr KysrKysrKy0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9pbnB1dC9zZXJpby9ocF9zZGNfbWxjLmMg fCAgOCArKysrLS0tLQogaW5jbHVkZS9saW51eC9oaWxfbWxjLmggICAgICAgICAgfCAgNCArKy0t CiAzIGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaGlsX21sYy5jIGIvZHJpdmVycy9pbnB1dC9z ZXJpby9oaWxfbWxjLmMKaW5kZXggNjU2MDVlNC4uMjc0NjUwOSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9pbnB1dC9zZXJpby9oaWxfbWxjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9oaWxfbWxj LmMKQEAgLTI3NCwxNCArMjc0LDEyIEBAIHN0YXRpYyBpbnQgaGlsc2VfbWF0Y2goaGlsX21sYyAq bWxjLCBpbnQgdW51c2VkKQogLyogQW4gTENWIHVzZWQgdG8gcHJldmVudCBydW5hd2F5IGxvb3Bz LCBmb3JjZXMgNSBzZWNvbmQgc2xlZXAgd2hlbiByZXNldC4gKi8KIHN0YXRpYyBpbnQgaGlsc2Vf aW5pdF9sY3YoaGlsX21sYyAqbWxjLCBpbnQgdW51c2VkKQogewotCXN0cnVjdCB0aW1ldmFsIHR2 OworCXRpbWU2NF90IG5vdyA9IGt0aW1lX2dldF9zZWNvbmRzKCk7CiAKLQlkb19nZXR0aW1lb2Zk YXkoJnR2KTsKLQotCWlmIChtbGMtPmxjdiAmJiAodHYudHZfc2VjIC0gbWxjLT5sY3ZfdHYudHZf c2VjKSA8IDUpCisJaWYgKG1sYy0+bGN2ICYmIChub3cgLSBtbGMtPmxjdl90KSA8IDUpCiAJCXJl dHVybiAtMTsKIAotCW1sYy0+bGN2X3R2ID0gdHY7CisJbWxjLT5sY3ZfdCA9IG5vdzsKIAltbGMt PmxjdiA9IDA7CiAKIAlyZXR1cm4gMDsKQEAgLTYwNSw3ICs2MDMsNyBAQCBzdGF0aWMgaW5saW5l IHZvaWQgaGlsc2Vfc2V0dXBfaW5wdXQoaGlsX21sYyAqbWxjLCBjb25zdCBzdHJ1Y3QgaGlsc2Vf bm9kZSAqbm9kZQogCX0KIAltbGMtPmlzdGFydGVkID0gMTsKIAltbGMtPmludGltZW91dCA9IG5v ZGUtPmFyZzsKLQlkb19nZXR0aW1lb2ZkYXkoJihtbGMtPmluc3RhcnQpKTsKKwltbGMtPmluc3Rh cnQgPSBrdGltZV9nZXQoKTsKIAltbGMtPmljb3VudCA9IDE1OwogCW1lbXNldChtbGMtPmlwYWNr ZXQsIDAsIDE2ICogc2l6ZW9mKGhpbF9wYWNrZXQpKTsKIAlCVUdfT04oZG93bl90cnlsb2NrKCZt bGMtPmlzZW0pKTsKQEAgLTcxMCw3ICs3MDgsNyBAQCBzdGF0aWMgaW50IGhpbHNlX2Rvbm9kZSho aWxfbWxjICptbGMpCiAJCQlicmVhazsKIAkJfQogCQltbGMtPm9zdGFydGVkID0gMDsKLQkJZG9f Z2V0dGltZW9mZGF5KCYobWxjLT5pbnN0YXJ0KSk7CisJCW1sYy0+aW5zdGFydCA9IGt0aW1lX2dl dCgpOwogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmbWxjLT5sb2NrLCBmbGFncyk7CiAJCW5l eHRpZHggPSBISUxTRU5fTkVYVDsKIAkJYnJlYWs7CkBAIC03MzEsMTggKzcyOSwxOCBAQCBzdGF0 aWMgaW50IGhpbHNlX2Rvbm9kZShoaWxfbWxjICptbGMpCiAjZW5kaWYKIAogCXdoaWxlIChuZXh0 aWR4ICYgSElMU0VOX1NDSEVEKSB7Ci0JCXN0cnVjdCB0aW1ldmFsIHR2OworCQlrdGltZV90IHRt cCA9IGt0aW1lX3N1YihrdGltZV9nZXQoKSwgbWxjLT5pbnN0YXJ0KTsKIAogCQlpZiAoIXNjaGVk X2xvbmcpCiAJCQlnb3RvIHNjaGVkOwogCi0JCWRvX2dldHRpbWVvZmRheSgmdHYpOwotCQl0di50 dl91c2VjICs9IFVTRUNfUEVSX1NFQyAqICh0di50dl9zZWMgLSBtbGMtPmluc3RhcnQudHZfc2Vj KTsKLQkJdHYudHZfdXNlYyAtPSBtbGMtPmluc3RhcnQudHZfdXNlYzsKLQkJaWYgKHR2LnR2X3Vz ZWMgPj0gbWxjLT5pbnRpbWVvdXQpIGdvdG8gc2NoZWQ7Ci0JCXR2LnR2X3VzZWMgPSAobWxjLT5p bnRpbWVvdXQgLSB0di50dl91c2VjKSAqIEhaIC8gVVNFQ19QRVJfU0VDOwotCQlpZiAoIXR2LnR2 X3VzZWMpIGdvdG8gc2NoZWQ7Ci0JCW1vZF90aW1lcigmaGlsX21sY3Nfa2lja2VyLCBqaWZmaWVz ICsgdHYudHZfdXNlYyk7CisJCWlmICh0bXAudHY2NCA+PSAobWxjLT5pbnRpbWVvdXQgKiBOU0VD X1BFUl9VU0VDKSkKKwkJCWdvdG8gc2NoZWQ7CisJCXRtcC50djY0ID0gbWxjLT5pbnRpbWVvdXQg KiBOU0VDX1BFUl9VU0VDIC0gdG1wLnR2NjQ7CisJCWlmICh0bXAudHY2NCA8IE5TRUNfUEVSX1VT RUMpCisJCQlnb3RvIHNjaGVkOworCQltb2RfdGltZXIoJmhpbF9tbGNzX2tpY2tlciwKKwkJCQlq aWZmaWVzICsgbnNlY3NfdG9famlmZmllcyh0bXAudHY2NCkpOwogCQlicmVhazsKIAlzY2hlZDoK IAkJdGFza2xldF9zY2hlZHVsZSgmaGlsX21sY3NfdGFza2xldCk7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2lucHV0L3NlcmlvL2hwX3NkY19tbGMuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaHBfc2Rj X21sYy5jCmluZGV4IGQ1MGYwNjcuLjBhMjdiODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQv c2VyaW8vaHBfc2RjX21sYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaHBfc2RjX21sYy5j CkBAIC0xNDksNyArMTQ5LDggQEAgc3RhdGljIGludCBocF9zZGNfbWxjX2luKGhpbF9tbGMgKm1s Yywgc3VzZWNvbmRzX3QgdGltZW91dCkKIAogCS8qIFRyeSB0byBkb3duIHRoZSBzZW1hcGhvcmUg Ki8KIAlpZiAoZG93bl90cnlsb2NrKCZtbGMtPmlzZW0pKSB7Ci0JCXN0cnVjdCB0aW1ldmFsIHR2 OworCQlrdGltZV90IHRtcCA9IGt0aW1lX3N1YihrdGltZV9nZXQoKSwgbWxjLT5pbnN0YXJ0KTsK KwogCQlpZiAocHJpdi0+ZW10ZXN0bW9kZSkgewogCQkJbWxjLT5pcGFja2V0WzBdID0KIAkJCQlI SUxfRVJSX0lOVCB8IChtbGMtPm9wYWNrZXQgJgpAQCAtMTYwLDkgKzE2MSw4IEBAIHN0YXRpYyBp bnQgaHBfc2RjX21sY19pbihoaWxfbWxjICptbGMsIHN1c2Vjb25kc190IHRpbWVvdXQpCiAJCQkv KiBwcmludGsoS0VSTl9ERUJVRyBQUkVGSVggIj5bJXhdXG4iLCBtbGMtPmlwYWNrZXRbMF0pOyAq LwogCQkJZ290byB3YXN1cDsKIAkJfQotCQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKLQkJdHYudHZf dXNlYyArPSBVU0VDX1BFUl9TRUMgKiAodHYudHZfc2VjIC0gbWxjLT5pbnN0YXJ0LnR2X3NlYyk7 Ci0JCWlmICh0di50dl91c2VjIC0gbWxjLT5pbnN0YXJ0LnR2X3VzZWMgPiBtbGMtPmludGltZW91 dCkgeworCisJCWlmICh0bXAudHY2NCA+IG1sYy0+aW50aW1lb3V0ICogTlNFQ19QRVJfVVNFQykg ewogCQkJLyoJcHJpbnRrKCIhJWkgJWkiLAogCQkJCXR2LnR2X3VzZWMgLSBtbGMtPmluc3RhcnQu dHZfdXNlYywKIAkJCQltbGMtPmludGltZW91dCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4 L2hpbF9tbGMuaCBiL2luY2x1ZGUvbGludXgvaGlsX21sYy5oCmluZGV4IDM5NGE4NDAuLjIyMjJl YzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlsX21sYy5oCisrKyBiL2luY2x1ZGUvbGlu dXgvaGlsX21sYy5oCkBAIC0xNDQsMTIgKzE0NCwxMiBAQCBzdHJ1Y3QgaGlsX21sYyB7CiAJaGls X3BhY2tldAkJaXBhY2tldFsxNl07CiAJaGlsX3BhY2tldAkJaW1hdGNoOwogCWludAkJCWljb3Vu dDsKLQlzdHJ1Y3QgdGltZXZhbAkJaW5zdGFydDsKKwlrdGltZV90CQkJaW5zdGFydDsKIAlzdXNl Y29uZHNfdAkJaW50aW1lb3V0OwogCiAJaW50CQkJZGRpOwkvKiBMYXN0IG9wZXJhdGlvbmFsIGRl dmljZSBpZCAqLwogCWludAkJCWxjdjsJLyogTENWIHRvIHRocm90dGxlIGxvb3BzICovCi0Jc3Ry dWN0IHRpbWV2YWwJCWxjdl90djsgLyogVGltZSBsb29wIHdhcyBzdGFydGVkICovCisJdGltZTY0 X3QJCWxjdl90OyAvKiBUaW1lIGxvb3Agd2FzIHN0YXJ0ZWQgKi8KIAogCWludAkJCWRpX21hcFs3 XTsgLyogTWFwcyBiZWxvdyBpdGVtcyB0byBsaXZlIGRldnMgKi8KIAlzdHJ1Y3QgaGlsX21sY19k ZXZpbmZvCWRpW0hJTF9NTENfREVWTUVNXTsKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpZMjAzOCBtYWlsaW5nIGxpc3QKWTIwMzhAbGlz dHMubGluYXJvLm9yZwpodHRwczovL2xpc3RzLmxpbmFyby5vcmcvbWFpbG1hbi9saXN0aW5mby95 MjAzOAo=