From patchwork Wed Nov 25 15:11:55 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 7700041 Return-Path: X-Original-To: patchwork-linux-media@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id AC60F9F2E9 for ; Wed, 25 Nov 2015 15:12:17 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 7C9FE2088D for ; Wed, 25 Nov 2015 15:12:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 640A120859 for ; Wed, 25 Nov 2015 15:12:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753976AbbKYPMK (ORCPT ); Wed, 25 Nov 2015 10:12:10 -0500 Received: from mout.kundenserver.de ([212.227.126.135]:54239 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752726AbbKYPMI (ORCPT ); Wed, 25 Nov 2015 10:12:08 -0500 Received: from wuerfel.localnet ([134.3.118.24]) by mrelayeu.kundenserver.de (mreue001) with ESMTPSA (Nemesis) id 0MAHcX-1aCMAG3bqL-00BLEw; Wed, 25 Nov 2015 16:11:57 +0100 From: Arnd Bergmann To: Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, Jarod Wilson , Greg Kroah-Hartman , Tapasweni Pathak Subject: [PATCH 1/3] staging: media: lirc: Replace timeval with ktime_t in lirc_serial.c Date: Wed, 25 Nov 2015 16:11:55 +0100 Message-ID: <3966611.mJGTQOXNKU@wuerfel> User-Agent: KMail/4.11.5 (Linux/3.16.0-10-generic; KDE/4.11.5; x86_64; ; ) MIME-Version: 1.0 X-Provags-ID: V03:K0:Fxiu4cxgZbqDCAKtIkdTmZId1kFZmFPcW+kX8b1hU/IgbNzEkyZ lfwRcFbZZcPx5i6cxDbR5FmjI/REX5QOqqDbleNAub3nwhCuLMU7cT8sQ2mxADmPmFn30bu N9hiUgZNI5gGjnCs9boVQtskX5slP34iPNR2s7yIwTvXj9/EjSfK375hAOQUwU//7a8MkCl iYJMBiLuMNseJs3LjbJiQ== X-UI-Out-Filterresults: notjunk:1; V01:K0:QYXaF8EphDg=:KGyxrU/o2quPG2kDFD420d b1aBwdl4vHpgk4AgW3Kn+B1xPM00SSIFYE3Ll67wg+11wjfqtjDIQkxDrbEaEGhi41RLZsGc+ ENhFlBvRj8WIxy+nb5CQu/npmru86MSoKwQtCGvwnsAVbkw3Z/Cldg2O6YUiiAGLhx8sSXhdr dWGDWBIn+MwKEJ4mYwslzOcGWTAHQwm1PW76/Lywi0MFKxBMJfGuGRuz/eGCC/32cRSO8M4ia a0Mn2kEshdgLOosimO3mnV+viug+LaVkzFvuvwKg24yrJMu0V6lwdVmaD7zc8ilmtq2g08E2n 7GcQyALsjW789vHdNMAAdijN5nk2hDBWviXLNM0wsPtrSV3qZ+iJz+XikJrtYg1un5Cys6kAP Ub3oipLSOso183/AmyZQkpWgNkG1LzWQkDK65aBoazkcnCEljpJou8vFMe+9LGh5+8jIamdsz 64EeUHpaTrJRBEmZ8HVvgyrcFouBom2GHZmYhzYRDbQMBpHrQi9rTy6tJ9yhuOKe3GPo2pZmZ h/L7l0Uv/U3LqX+SdLFFrCNFqFXYTWNspFdW15hmirtr70TcI92qIRiSDzlkXmqc5uyqDeQgo 2CAITescOkJglIw80MOA93zFNCIbaXxX8OKkMESXmNerGlBP3/iwhZhju7THmBZc2gDQdyG4O u4mvno+aZpW9e+LurlDOcoy86Bp33qd6SX38Gd6z/E38anrdTCEop+YrWB8wOkNImdIFahRJd m72PuA+sZzjgOIJO Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 'struct timeval tv' is used to get current time. 'static struct timeval lasttv' is used to get last interrupt time. 32-bit systems using 'struct timeval' will break in the year 2038, so we have to replace that code with more appropriate types. This patch changes the lirc_serial.c file of media: lirc to use ktime_t. ktime_get() is better than using do_gettimeofday(), because it uses the monotonic clock. ktime_sub is used to subtract two ktime variables. The check to test time going backwards is also removed. Intialization to static variable is also removed. ktime_to_us() is used to convert ktime_t to microsecond value. deltv is changed to delkt, a ktime_t type varibale from long to assign the ktime_sub value directly. ktime_compare is used to compare delkt with 15 seconds, which is changed to a nanosecond value by using ktime_set(). Build tested it. Signed-off-by: Tapasweni Pathak Reviewed-by: Arnd Bergmann Signed-off-by: Arnd Bergmann --- These three patches were still in my backlog and part of linux-next but never made it into mainline. Please apply to the v4l tree. -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/staging/media/lirc/lirc_serial.c b/drivers/staging/media/lirc/lirc_serial.c index 64a7b2fc5289..b798b311d32c 100644 --- a/drivers/staging/media/lirc/lirc_serial.c +++ b/drivers/staging/media/lirc/lirc_serial.c @@ -59,7 +59,7 @@ #include #include #include -#include +#include #include #include #include @@ -204,7 +204,7 @@ static struct lirc_serial hardware[] = { #define RBUF_LEN 256 -static struct timeval lasttv = {0, 0}; +static ktime_t lastkt; static struct lirc_buffer rbuf; @@ -542,10 +542,10 @@ static void frbwrite(int l) static irqreturn_t lirc_irq_handler(int i, void *blah) { - struct timeval tv; + ktime_t kt; int counter, dcd; u8 status; - long deltv; + ktime_t delkt; int data; static int last_dcd = -1; @@ -565,7 +565,7 @@ static irqreturn_t lirc_irq_handler(int i, void *blah) if ((status & hardware[type].signal_pin_change) && sense != -1) { /* get current time */ - do_gettimeofday(&tv); + kt = ktime_get(); /* New mode, written by Trent Piepho . */ @@ -594,34 +594,20 @@ static irqreturn_t lirc_irq_handler(int i, void *blah) dcd = (status & hardware[type].signal_pin) ? 1 : 0; if (dcd == last_dcd) { - pr_warn("ignoring spike: %d %d %lx %lx %lx %lx\n", - dcd, sense, - tv.tv_sec, lasttv.tv_sec, - (unsigned long)tv.tv_usec, - (unsigned long)lasttv.tv_usec); + pr_warn("ignoring spike: %d %d %llx %llx\n", + dcd, sense, ktime_to_us(kt), + ktime_to_us(lastkt)); continue; } - deltv = tv.tv_sec-lasttv.tv_sec; - if (tv.tv_sec < lasttv.tv_sec || - (tv.tv_sec == lasttv.tv_sec && - tv.tv_usec < lasttv.tv_usec)) { - pr_warn("AIEEEE: your clock just jumped backwards\n"); - pr_warn("%d %d %lx %lx %lx %lx\n", - dcd, sense, - tv.tv_sec, lasttv.tv_sec, - (unsigned long)tv.tv_usec, - (unsigned long)lasttv.tv_usec); - data = PULSE_MASK; - } else if (deltv > 15) { + delkt = ktime_sub(kt, lastkt); + if (ktime_compare(delkt, ktime_set(15, 0)) > 0) { data = PULSE_MASK; /* really long time */ if (!(dcd^sense)) { /* sanity check */ - pr_warn("AIEEEE: %d %d %lx %lx %lx %lx\n", - dcd, sense, - tv.tv_sec, lasttv.tv_sec, - (unsigned long)tv.tv_usec, - (unsigned long)lasttv.tv_usec); + pr_warn("AIEEEE: %d %d %llx %llx\n", + dcd, sense, ktime_to_us(kt), + ktime_to_us(lastkt)); /* * detecting pulse while this * MUST be a space! @@ -629,11 +615,9 @@ static irqreturn_t lirc_irq_handler(int i, void *blah) sense = sense ? 0 : 1; } } else - data = (int) (deltv*1000000 + - tv.tv_usec - - lasttv.tv_usec); + data = (int) ktime_to_us(delkt); frbwrite(dcd^sense ? data : (data|PULSE_BIT)); - lasttv = tv; + lastkt = kt; last_dcd = dcd; wake_up_interruptible(&rbuf.wait_poll); } @@ -790,7 +774,7 @@ static int set_use_inc(void *data) unsigned long flags; /* initialize timestamp */ - do_gettimeofday(&lasttv); + lastkt = ktime_get(); spin_lock_irqsave(&hardware[type].lock, flags); @@ -979,7 +963,7 @@ static int lirc_serial_resume(struct platform_device *dev) spin_lock_irqsave(&hardware[type].lock, flags); /* Enable Interrupt */ - do_gettimeofday(&lasttv); + lastkt = ktime_get(); soutp(UART_IER, sinp(UART_IER)|UART_IER_MSI); off();