From patchwork Fri Nov 10 15:58:25 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 118588 Delivered-To: patch@linaro.org Received: by 10.140.22.164 with SMTP id 33csp8099687qgn; Fri, 10 Nov 2017 07:59:29 -0800 (PST) X-Google-Smtp-Source: AGs4zMad50vbtIUg7KkpxZZRRf90qP1uhtQY96phQWooBCVaiasCkxaeCr6UBfW+480PLV0Hegko X-Received: by 10.99.3.146 with SMTP id 140mr749475pgd.275.1510329569540; Fri, 10 Nov 2017 07:59:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510329569; cv=none; d=google.com; s=arc-20160816; b=ccg+HVJjOHSoF3Ul8Z08ke5H7HCv8ueuYoPoPDPvrawEtaIbjD8EIn2GXOPGDp0XW0 rYs18g4KjkNcOti7wEAfR6skQaNfsaRqjLHi9djkz77Nsf4gFGOJz4lfkNxz6S5pniam nMSLRvLzVI4wnR8u4M00WrDwZfR7yNZ63MDd1AoRj8nVT9jT8q0IWAnmaXLfPadTWeMj 5AENzhkg1LS2H2UW6Sfc1qV3U2HbtQYLKkkFyju63/Xk4Wx6ZM2DSvBsfmiBnuoycD0u cnd9SLB63beZauZdWXiIW34fNSObr48bWnzawY5Y/QtlAFXt/gn6v+ZcJNWaHR39Si6z ibNQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=zKgRwD7vvPjR1A1ZBtb4MowCCxAHu4VqFRCMdc5j3/A=; b=kYiQJjz/HjrpJfgbUFTUxJgF6ACVyC7XMMtXl4C2GeeFhlb2pR7b1WQjyogJEFxrBx LPjvDAdWnpzxVZGwxCfu4gpCmI7SbMGMAgNe7EPKYgoGNNM76pn6eyO67vk37cTGxfDf pVqzw/cE3NwbRpmw2rKLviuzyZ/gahjBfARa+QCs/c+RNG6eiWs5tT88pYfdNivnR7iH enu6NmDmLlAiWtR1PVdhg/vZHU2dqwcZUnIEoBz7eJcQ5UkFEv5rzG9JpyyMtBWeqikm HmqK7Jo/lxVK9NGPe4pGTstthI5sLbUsn239ghsTlL2+y7LqxZE8jXdmo/yjXnqVWcSF 4LRA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p3si9109878pld.115.2017.11.10.07.59.29; Fri, 10 Nov 2017 07:59:29 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753298AbdKJP72 (ORCPT + 24 others); Fri, 10 Nov 2017 10:59:28 -0500 Received: from mout.kundenserver.de ([212.227.17.13]:64187 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752831AbdKJP70 (ORCPT ); Fri, 10 Nov 2017 10:59:26 -0500 Received: from wuerfel.lan ([109.193.157.232]) by mrelayeu.kundenserver.de (mreue103 [212.227.15.145]) with ESMTPA (Nemesis) id 0Luaps-1fCbyb3k12-00zp4q; Fri, 10 Nov 2017 16:58:42 +0100 From: Arnd Bergmann To: Adam Radford , "James E.J. Bottomley" , "Martin K. Petersen" Cc: Arnd Bergmann , Sumit Saxena , linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/3] scsi: 3ware: fix 32-bit time calculations Date: Fri, 10 Nov 2017 16:58:25 +0100 Message-Id: <20171110155840.1941250-1-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 X-Provags-ID: V03:K0:5NNgyRlEH1VpKYg/dNzJfWlbFa35WvhH1ZyHkDNfoUkTghU5YPR 5nUxJB7ZRn0wxReVXQ7OiTA+BLiVvS7zW4cbX0BWxfUUF+qEshV+wXAiGiVBCQuuF64qHnO 6Ws9RIW+zLgpY2UZRdjyfjRa60n198sZB557OHxqDnF5ce3pw+JbtyqmSzmSK3rDJNPmA0f u/Pe3xDlzBM3raxnQSMKA== X-UI-Out-Filterresults: notjunk:1; V01:K0:IoWl24KxsYU=:x5xuZ8f211toj2vqXQf0/P wWuMRrnRLrJc2pUuRrHyqV0p6tVj90YggAfdxzkvgIVhF0bHQtL84bdRIzMB83h8jtUkEm+Ef CvArTPUAnalLU2RuNqyuRquh2dqePFfExnxIDDzN2KTwAIQbfYvuqsQjofoUNxyrw1NyCZ/OB 8FUjEfwpEfvs5ch779F5HpAsbp2j7Qz4FF8fxnSR5rEh1TkLTmq7zABuBSrc85ohQfDFpJaWd FTsWPDigrzTzqiPKhEKTlZRWsExWnbTQqfK6KlNaUNx4/bYDnlyrrYjbd/60EQFIcil/ze5W/ ZkTEbTjOxu6v1f0dB6/372PBIHcGoUizeS/FsfsHn2Qn5R5umoSzczsWsa4Om0wYtReyYXDNW 1HpDwRaHdvTR66fM9mG8SGj8/5lWMhJkcLa82ShA4UcctyJHf1sFvNfUG73eT3NfXRFahJJsk BgucPBnxunlgBuz8NzYFpzLpV0A+WWVQzRC/phIR56dab8fUqXQJLrA41YpTQrx6q+6efvIEX YcokiutspcbhnL0E74KlKP0vKlV/z5jZmEIQX41Ckt2uT8Rry/+YYUJQFtmMzOLQmp5G031iG ooJmtywdo2FRZxqCf3DGv9S0XIDo62vuGgRrdJldEk0vYXCM2l/BkUTWwCwjyqp6B+XU1DW2P uD8i1kPMERHToVSW9fJTMhCiK+S0B75fG5N97bhNL1f41fhHpGO7WNqRytByarbwxn/gxCnTi ll5/O8UknAGWM2dxtilbgwFm8xslxwAJNgS0mA== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org twl_aen_queue_event/twa_aen_queue_event, we use do_gettimeofday() to read the lower 32 bits of the current time in seconds, to pass them to the TW_IOCTL_GET_NEXT_EVENT ioctl or the 3ware_aen_read sysfs file. This will overflow on all architectures in year 2106, there is not much we can do about that without breaking the ABI. User space has 90 years to learn to deal with it, so it's probably ok. I'm changing it to use ktime_get_real_seconds() with a comment to document what happens when. Signed-off-by: Arnd Bergmann --- drivers/scsi/3w-9xxx.c | 5 ++--- drivers/scsi/3w-sas.c | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) -- 2.9.0 Acked-by: Adam Radford diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c index 00e7968a1d70..cb9af3f7b653 100644 --- a/drivers/scsi/3w-9xxx.c +++ b/drivers/scsi/3w-9xxx.c @@ -369,7 +369,6 @@ static int twa_aen_drain_queue(TW_Device_Extension *tw_dev, int no_check_reset) static void twa_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_Header *header) { u32 local_time; - struct timeval time; TW_Event *event; unsigned short aen; char host[16]; @@ -392,8 +391,8 @@ static void twa_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_H memset(event, 0, sizeof(TW_Event)); event->severity = TW_SEV_OUT(header->status_block.severity__reserved); - do_gettimeofday(&time); - local_time = (u32)(time.tv_sec - (sys_tz.tz_minuteswest * 60)); + /* event->time_stamp_sec overflows in y2106 */ + local_time = (u32)(ktime_get_real_seconds() - (sys_tz.tz_minuteswest * 60)); event->time_stamp_sec = local_time; event->aen_code = aen; event->retrieved = TW_AEN_NOT_RETRIEVED; diff --git a/drivers/scsi/3w-sas.c b/drivers/scsi/3w-sas.c index b150e131b2e7..c283fdb3cb24 100644 --- a/drivers/scsi/3w-sas.c +++ b/drivers/scsi/3w-sas.c @@ -221,7 +221,6 @@ static char *twl_aen_severity_lookup(unsigned char severity_code) static void twl_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_Header *header) { u32 local_time; - struct timeval time; TW_Event *event; unsigned short aen; char host[16]; @@ -240,8 +239,8 @@ static void twl_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_H memset(event, 0, sizeof(TW_Event)); event->severity = TW_SEV_OUT(header->status_block.severity__reserved); - do_gettimeofday(&time); - local_time = (u32)(time.tv_sec - (sys_tz.tz_minuteswest * 60)); + /* event->time_stamp_sec overflows in y2106 */ + local_time = (u32)(ktime_get_real_seconds() - (sys_tz.tz_minuteswest * 60)); event->time_stamp_sec = local_time; event->aen_code = aen; event->retrieved = TW_AEN_NOT_RETRIEVED; From patchwork Fri Nov 10 15:58:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 118589 Delivered-To: patch@linaro.org Received: by 10.140.22.164 with SMTP id 33csp8099835qgn; Fri, 10 Nov 2017 07:59:37 -0800 (PST) X-Google-Smtp-Source: AGs4zMYOYgkyeXxq+u+EJU7O4J/MPjzVZr6QueFtjY784v0PEbg5ETy2uardxWcVzlRKCyaIoWv6 X-Received: by 10.99.37.69 with SMTP id l66mr820730pgl.14.1510329577444; Fri, 10 Nov 2017 07:59:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510329577; cv=none; d=google.com; s=arc-20160816; b=qj+oBafdRsXS6II+CCfPoxIAPk+ccwwKDfVdRKNPJV8zaWWhjdNetaHf7deSG6vAuH VlpyvSKwy1IdjBJtKZYVePmHe3yiubcll55ZSIJGRLD9hk4kiManGv7wp6U2eDYY9cQA KWPJTJw0OrKcjq2Ekk9IAm8/DB4G591KtaJWfEFQWT47V9BQbJRDqbjaXoRkbqv/q4zC VBRxCefilUpxWluUnYIF1CLN1hCu/rJcmrBTOsOkQ14LHZCQ1Dk7vDDXFudgvfBPt646 5TogDqebV/CoxJcVWtcI2Z1JjkKO9tRu2a7K8j9XRn2gqBMeEqg5gnWlRTQiRqsMIuZU go/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=EBl8b30pM5jvIDc/1ORtsCPg6ZH22Jpteb8sha2aWbY=; b=cxAxZh7o41mHTp1c6hUUfsE+sZndy3scMjwNelqMaOy6GvUuUB2ALKf9yVFXfhN4Dj pQ13/WK1z2A62akczGKm2dEUTvSP54IaRXc6z0m55JDobOf82dKr6NohrrRyb2wCu/Ty 7W0Wc/D8PqgKB0iBzy/4HNYux2VehMfryoprFt2wXK1osr5nQNPvo1WqCd2WRQVl33/c zyW2cmG5Bax0ceij2fWIGmCeItimCPs17LyW4Ehsf3iO6n1+Cg/cYc1fImNHYJBtyGbD NyhuADcYQaRNKyOfqxa3NpfTy0pjy8PQ22msuntiXrTm3p3JVtePM1XTEm6BalWRzogY kejA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p3si9109878pld.115.2017.11.10.07.59.37; Fri, 10 Nov 2017 07:59:37 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753356AbdKJP7g (ORCPT + 24 others); Fri, 10 Nov 2017 10:59:36 -0500 Received: from mout.kundenserver.de ([212.227.17.13]:56087 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753141AbdKJP7e (ORCPT ); Fri, 10 Nov 2017 10:59:34 -0500 Received: from wuerfel.lan ([109.193.157.232]) by mrelayeu.kundenserver.de (mreue103 [212.227.15.145]) with ESMTPA (Nemesis) id 0ME41n-1eRnsX2rhH-00HKrn; Fri, 10 Nov 2017 16:58:54 +0100 From: Arnd Bergmann To: Adam Radford , "James E.J. Bottomley" , "Martin K. Petersen" Cc: Arnd Bergmann , Sumit Saxena , linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/3] scsi: 3ware: use 64-bit times for FW time sync Date: Fri, 10 Nov 2017 16:58:26 +0100 Message-Id: <20171110155840.1941250-2-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20171110155840.1941250-1-arnd@arndb.de> References: <20171110155840.1941250-1-arnd@arndb.de> X-Provags-ID: V03:K0:3HkdWgCDUqF6zuswdgQ9OrdODd01++61VcKPiqCi0JLV4DvmcGW wAqpSeefvDdf/gTa1CWPSJAkRQP3J6tbgI25lE5AhQiCi9q4npuGWUbnxUUboPDk9dPheWh AZeAHDsb1RiqhOviKTCR7aDh27n8FEvxQnZ8kr+0K9FLG2xeMs3fS8r0Xl5m07ffRX7zxaB DmZGAu/WfmsSAbMdZQl3w== X-UI-Out-Filterresults: notjunk:1; V01:K0:1xHMfYwRDoQ=:LvLZrNiambG5GV0/oVkQ1J FZB7ZM9iojX6hD2pcTnWew57ohzclg3aV8C3GJrT6QdoE4ai6wt3aYHWUNr2cAJEyl4kWt2/N sOmvTHfoy4nc33iKFIY91GTMIn2aZxba4Lhq6A5OGk3z1418oOjLhxU+Q5YJogBXAfC9Fu0ED CS50HP2EeSHVcfnXzZDG+Gv8RHNLdE91D4SYFad2687KdH/C6KOBhlEilxsanOiPAzQZsVwFt RU2/rRvUUAdOnK4e3sq+UIV8Mct/Chd32zU/0c9LMR6fK/6FV8wn1uHUszrgsO6M84fdWvNNr 07OrM6FdVX0wgeIcdaZhO4ztVtFUXSHnJ7r7C8qot1hYbNlEytppmdrImZYnO4IQgraJ8LlDU /HSFiK39Ex5mAU0mDf46Go/8yf0Wl2qFfNSkd6VtqnOHLBhnl0N51HJjfLDPYup9kd7+24sej 9GFToSPpF/I1X3HYilifuVjRl8g5if0YMFJEjYGt7NfOYywg4DFAeAtC98CFj4jp/znGp2dev +F5Kwmk2u8PW3yMx3rhiIgtvx0m0XvpetvQlBPQoKDWnrkZdcWk3Uuulyv965BKP5eaYcGHBJ NNDWOAhYrpYjslazZPT7hUYPRF1w7u07kpBV322Lu5fUA1mGPOi1reCaZxyxqXKWFFmQ7TQMy RdnXCUXjNhd/YQ2a81E8nOroR3v/iCFUgKsaDcC3XGQKUZcGi3m4ucy2xHWrGwPS+BXsiRmPj 8SxngHrM/PzVsw9cxTgiMF1QXBXoOiaogdInRQ== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The calculation of the number of seconds since Sunday 00:00:00 overflows in 2106, meaning that we instead will return the seconds since Wednesday 06:28:16 afterwards. Using 64-bit time stamps avoids this slight inconsistency, and the deprecated do_gettimeofday(), replacing it with the simpler ktime_get_real_seconds(). Signed-off-by: Arnd Bergmann --- drivers/scsi/3w-9xxx.c | 8 +++----- drivers/scsi/3w-sas.c | 10 ++++------ 2 files changed, 7 insertions(+), 11 deletions(-) -- 2.9.0 Acked-by: Adam Radford diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c index cb9af3f7b653..b1c9bd9c1bfd 100644 --- a/drivers/scsi/3w-9xxx.c +++ b/drivers/scsi/3w-9xxx.c @@ -472,11 +472,10 @@ static char *twa_aen_severity_lookup(unsigned char severity_code) static void twa_aen_sync_time(TW_Device_Extension *tw_dev, int request_id) { u32 schedulertime; - struct timeval utc; TW_Command_Full *full_command_packet; TW_Command *command_packet; TW_Param_Apache *param; - u32 local_time; + time64_t local_time; /* Fill out the command packet */ full_command_packet = tw_dev->command_packet_virt[request_id]; @@ -498,9 +497,8 @@ static void twa_aen_sync_time(TW_Device_Extension *tw_dev, int request_id) /* Convert system time in UTC to local time seconds since last Sunday 12:00AM */ - do_gettimeofday(&utc); - local_time = (u32)(utc.tv_sec - (sys_tz.tz_minuteswest * 60)); - schedulertime = local_time - (3 * 86400); + local_time = (ktime_get_real_seconds() - (sys_tz.tz_minuteswest * 60)); + div_u64_rem(local_time - (3 * 86400), 604800, &schedulertime); schedulertime = cpu_to_le32(schedulertime % 604800); memcpy(param->data, &schedulertime, sizeof(u32)); diff --git a/drivers/scsi/3w-sas.c b/drivers/scsi/3w-sas.c index c283fdb3cb24..cf9f2a09b47d 100644 --- a/drivers/scsi/3w-sas.c +++ b/drivers/scsi/3w-sas.c @@ -407,11 +407,10 @@ static int twl_aen_read_queue(TW_Device_Extension *tw_dev, int request_id) static void twl_aen_sync_time(TW_Device_Extension *tw_dev, int request_id) { u32 schedulertime; - struct timeval utc; TW_Command_Full *full_command_packet; TW_Command *command_packet; TW_Param_Apache *param; - u32 local_time; + time64_t local_time; /* Fill out the command packet */ full_command_packet = tw_dev->command_packet_virt[request_id]; @@ -433,10 +432,9 @@ static void twl_aen_sync_time(TW_Device_Extension *tw_dev, int request_id) /* Convert system time in UTC to local time seconds since last Sunday 12:00AM */ - do_gettimeofday(&utc); - local_time = (u32)(utc.tv_sec - (sys_tz.tz_minuteswest * 60)); - schedulertime = local_time - (3 * 86400); - schedulertime = cpu_to_le32(schedulertime % 604800); + local_time = (ktime_get_real_seconds() - (sys_tz.tz_minuteswest * 60)); + div_u64_rem(local_time - (3 * 86400), 604800, &schedulertime); + schedulertime = cpu_to_le32(schedulertime); memcpy(param->data, &schedulertime, sizeof(u32)); From patchwork Fri Nov 10 15:58:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 118587 Delivered-To: patch@linaro.org Received: by 10.140.22.164 with SMTP id 33csp8099546qgn; Fri, 10 Nov 2017 07:59:19 -0800 (PST) X-Google-Smtp-Source: AGs4zMbIu77vzilKqZ0jiu3sCUE2K6BoeaSEMH3DHcNSk5DYp37Lzcg1wp3J/1toEeqZ0MDcOOYl X-Received: by 10.84.128.9 with SMTP id 9mr809612pla.332.1510329559712; Fri, 10 Nov 2017 07:59:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510329559; cv=none; d=google.com; s=arc-20160816; b=oHLStVn7TbZiXuxK9OeYnUFC4TJjjNlPlitp7ydJF1pj3MmDx+zZouELVkGwwkxdzh HA9Am7oB6FO4SH83W5ZfvtIjNYa/2Db1bDeMLgiqbndOYsabq5Z+KFVVb2nxOPEZAhpS MBTMVjJOaW4CTeCwV80DHvGDsrlKqklP9YhbAdPQyJTcKg8skBSZJn7W4voi5/R8aI5E mKxr8epzmQzjFgJt36nmFuAERSJjKKactF2R5qqodx+bvJr81/3pTqy+32nFZ2oCmgB/ SdnpjB/AiPmR3X2p01QYIMMKhnivXyIFL3bUrGWXPuA8zwIRBv+jZez+6a1kYQkp6vCO mwLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=Aw0uK2NOfqiyAUHs3/RZeuRsnGyBvvcDbVI8je7GpX8=; b=w4WIgeUq+1PJNPYLxanFEj5jcLLun4rzrC2JGaSoUiHOcaK/hKXyFrky5c/hznx3SR flZWHLcUQVO9eGUo11sTvow1dHvqlbEQ95zy4tZSgCBq/y062jE/PZ4nM0FNJa8Wlq1K l4ugtFc9oeGHi9aapJ03zhfRo4IIFzpE5FRUCPZrsGJ/ln0zTtLIU+TFMiPWI9aFjmY1 XUuL9Op9z/YG21Xv7wPLBxbfkT9WRjPN2IcKW94uTVL4YUYRsl7fqrJ9pKjpkVXvTC5F BR3K0vnOu/Pg7pFEEQ6tKpEshKpjQfLsmdbQnAn42ezDRRcMSp7VYFXpfDlf3zJHPU1J d5oQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h11si8769485pgp.611.2017.11.10.07.59.19; Fri, 10 Nov 2017 07:59:19 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753234AbdKJP7R (ORCPT + 24 others); Fri, 10 Nov 2017 10:59:17 -0500 Received: from mout.kundenserver.de ([217.72.192.74]:56813 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751191AbdKJP7P (ORCPT ); Fri, 10 Nov 2017 10:59:15 -0500 Received: from wuerfel.lan ([109.193.157.232]) by mrelayeu.kundenserver.de (mreue103 [212.227.15.145]) with ESMTPA (Nemesis) id 0Lo2Ke-1esr7S2DlI-00fyum; Fri, 10 Nov 2017 16:59:06 +0100 From: Arnd Bergmann To: Adam Radford , "James E.J. Bottomley" , "Martin K. Petersen" Cc: Arnd Bergmann , Sumit Saxena , linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/3] scsi: 3w-9xxx: rework lock timeouts Date: Fri, 10 Nov 2017 16:58:27 +0100 Message-Id: <20171110155840.1941250-3-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20171110155840.1941250-1-arnd@arndb.de> References: <20171110155840.1941250-1-arnd@arndb.de> X-Provags-ID: V03:K0:6KCvk5auDwKDHtsDO5IWcEMfx+CBrbjts+B2Y8yA352GP5nQOrL VoO9Vupcynn8p+OKuDqxOD0GUeUe9KK8Tm/xIdlpPpgMjWcPgboHlw11Z+shRYlWL8GdlY1 3O/6NBR1dalK1pEjYex+X/1/6N+32W2T9Q8MZL9uPksjtpR19qSDsD9G9yqHqKPTvrO2Oln g/pmToQJpjJ3zdIwIGlJg== X-UI-Out-Filterresults: notjunk:1; V01:K0:Yfi0bK9b1iU=:eEf5vz0mAElNMceiK7Vs/y nEn3y23na4qfWilX1MCD6rKAy3nX1VgDMd0+B4XvWKiqlsAKYKElI5Hs55x+ATVBJ4AF1cGKI cidDLUaENvGRklciGX6UfUxh8a/ZTq76eu8DxXl4rRVvHPABgUx5gJ3NRFGcANsXsRdZaWlEi 2i3ycvOxz+9nv36VW8l9sf9bQvsId0O5pw0OBVHurXjOtphfyDysDeDYnAxXKp02B4f7FoW8n gY8+++8x+YIaiEk/Ze7i3Mf9ZGy6Rs45OdlD64M/OY3m/RGVOGZoWs3C1BONcTbMtOHq8O3vU iZLPJgq+acM3aHAj+swAWmuYafBzoSoH5zFaBMC3akqx9t+beHgqpiJfTx4p59yQ7mCen7vdM gGEO/T7pt0HcyCwVARitwpxeQngRoWmOGmO0fsKwdodrCvLs0OQL8/06xlSTDaxX6oixCwDdY +ya8CJ8/GyD584JgczMvFnMSKs5THqEAmtNl7QxlDPH0aFZW84KcEYW8htQYPw+8ad1TnWtUn Flw2aGse656YjCR3WUfmje76H9oOldiFRTPfA+eTG+E9XKc6Hx3AMCYDHuY/+HKbhqjrh0gfL 5wnA4S3EBnMzVrC1x8II1SUnYmfN4rQKL7n1fDtKa5hkb61AtZ0/YjoW+lnVu2AwjQAR6t1uP 8z7UD1gkf2/2rKPbeLJAVXAy+CFVaoxVRsJLwnZU6sT5NpGOWidjHCpz8pm5RWZsQa8zDntsG PVgV9ggh2PK9t9CfT3mS8NpUrECEcISht0IRqw== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The TW_IOCTL_GET_LOCK ioctl uses do_gettimeofday() to check whether a lock has expired. This can misbehave due to a concurrent settimeofday() call, as it is based on 'real' time, and it will overflow in y2038 on 32-bit architectures, producing unexpected results when used across the overflow time. This changes it to using monotonic time, using ktime_get() to simplify the code. Signed-off-by: Arnd Bergmann --- drivers/scsi/3w-9xxx.c | 13 ++++++------- drivers/scsi/3w-9xxx.h | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) -- 2.9.0 Acked-by: Adam Radford diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c index b1c9bd9c1bfd..b42c9c479d4b 100644 --- a/drivers/scsi/3w-9xxx.c +++ b/drivers/scsi/3w-9xxx.c @@ -645,8 +645,7 @@ static long twa_chrdev_ioctl(struct file *file, unsigned int cmd, unsigned long TW_Command_Full *full_command_packet; TW_Compatibility_Info *tw_compat_info; TW_Event *event; - struct timeval current_time; - u32 current_time_ms; + ktime_t current_time; TW_Device_Extension *tw_dev = twa_device_extension_list[iminor(inode)]; int retval = TW_IOCTL_ERROR_OS_EFAULT; void __user *argp = (void __user *)arg; @@ -837,17 +836,17 @@ static long twa_chrdev_ioctl(struct file *file, unsigned int cmd, unsigned long break; case TW_IOCTL_GET_LOCK: tw_lock = (TW_Lock *)tw_ioctl->data_buffer; - do_gettimeofday(¤t_time); - current_time_ms = (current_time.tv_sec * 1000) + (current_time.tv_usec / 1000); + current_time = ktime_get(); - if ((tw_lock->force_flag == 1) || (tw_dev->ioctl_sem_lock == 0) || (current_time_ms >= tw_dev->ioctl_msec)) { + if ((tw_lock->force_flag == 1) || (tw_dev->ioctl_sem_lock == 0) || + ktime_after(current_time, tw_dev->ioctl_time)) { tw_dev->ioctl_sem_lock = 1; - tw_dev->ioctl_msec = current_time_ms + tw_lock->timeout_msec; + tw_dev->ioctl_time = ktime_add_ms(current_time, tw_lock->timeout_msec); tw_ioctl->driver_command.status = 0; tw_lock->time_remaining_msec = tw_lock->timeout_msec; } else { tw_ioctl->driver_command.status = TW_IOCTL_ERROR_STATUS_LOCKED; - tw_lock->time_remaining_msec = tw_dev->ioctl_msec - current_time_ms; + tw_lock->time_remaining_msec = ktime_ms_delta(tw_dev->ioctl_time, current_time); } break; case TW_IOCTL_RELEASE_LOCK: diff --git a/drivers/scsi/3w-9xxx.h b/drivers/scsi/3w-9xxx.h index b6c208cc474f..d88cd3499bd5 100644 --- a/drivers/scsi/3w-9xxx.h +++ b/drivers/scsi/3w-9xxx.h @@ -666,7 +666,7 @@ typedef struct TAG_TW_Device_Extension { unsigned char event_queue_wrapped; unsigned int error_sequence_id; int ioctl_sem_lock; - u32 ioctl_msec; + ktime_t ioctl_time; int chrdev_request_id; wait_queue_head_t ioctl_wqueue; struct mutex ioctl_lock;