From patchwork Fri Nov 10 15:37:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 118581 Delivered-To: patch@linaro.org Received: by 10.140.22.164 with SMTP id 33csp8080728qgn; Fri, 10 Nov 2017 07:39:26 -0800 (PST) X-Google-Smtp-Source: AGs4zMYurZYZqVnFD5xF2YWIYL0gSSuPtMOy82hk8HE5ehraiPLFRk/S7L+YQpsh9YrPwxh+Dhvi X-Received: by 10.98.80.69 with SMTP id e66mr793774pfb.112.1510328366790; Fri, 10 Nov 2017 07:39:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510328366; cv=none; d=google.com; s=arc-20160816; b=po9d1FRPeVhaa/p+e6mwa+MPv+yHBQ4KqEGZ4pGlw5owtqpV5YxBMbtSMZfrNbJTqT 2ip6LBnjllcSXqeycU4rx02/JgCFOsRT9STY0HbROcCJhQxUqDLzHLIKDg3Wk2d4zxhw e1Kwaby8kCZ2vOzt8pjomYVNe6RQnfAa1pkFmuJmJlXgVwq8JOIE823PlaHDPH6HSeS4 5J6LGBpWyVvwooDspmh+caMvVLLAhuKbOPo19l/lTuVV9RqoP4e9ZsDlzxKY69XV+Ndt 6cPIbIR6XiMDa+SHlbeaQTExfz9aMTgobERXabwvHQdZqGS8Oq6TRIadItxIQUZReVu/ mfdQ== 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=soHvmxijzSiN6/1dOG2V0Jy0T7xrjSdGjqVRkQyvEkU=; b=qTadLuX9vyZOJ5fOvwazyxcy1Qrhx86IQDQ8fGVJKURY3pgf+Iy2Z1tEvfFvwPyuG/ XL1nFFYIIefwfgPn0ecXSDiUv5ZFBr5kFPel3WnoCn6ovVVNrV005piPxXlcXwNvfCzQ mniFTHD6M6ReKgJb0U/qRmDJJ99p3MxsgWvsJISo+Sp0e56qqELgKJ0FOxxZxpSMi0Ko d9HoNZCh5J/z0IgcHWCEbz7VDWm6gyEzJWIMf18IfdGrxTCBovt4WtJaZpBahiHr8UA5 KF59OOfF+aRY5+aDtmCqvMpJpVWLym0V1ZUiN5pKTMCq72v1fQCCtnHhCKhLmhcxxpXA 1L5Q== 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 s2si8640854pgp.169.2017.11.10.07.39.26; Fri, 10 Nov 2017 07:39:26 -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 S1753499AbdKJPjZ (ORCPT + 23 others); Fri, 10 Nov 2017 10:39:25 -0500 Received: from mout.kundenserver.de ([217.72.192.73]:51617 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753185AbdKJPjX (ORCPT ); Fri, 10 Nov 2017 10:39:23 -0500 Received: from wuerfel.lan ([109.193.157.232]) by mrelayeu.kundenserver.de (mreue104 [212.227.15.145]) with ESMTPA (Nemesis) id 0Md4Bm-1eVGDh3Wr4-00IC6o; Fri, 10 Nov 2017 16:37:32 +0100 From: Arnd Bergmann To: Anil Gurumurthy , Sudarsana Kalluru , "James E . J . Bottomley" , "Martin K . Petersen" Cc: linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, y2038@lists.linaro.org, hch@lst.de, hare@suse.com, jthumshirn@suse.de, Arnd Bergmann Subject: [PATCH 2/7] scsi: bfa: use proper time accessor for stats_reset_time Date: Fri, 10 Nov 2017 16:37:10 +0100 Message-Id: <20171110153715.1929456-3-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20171110153715.1929456-1-arnd@arndb.de> References: <20171110153715.1929456-1-arnd@arndb.de> X-Provags-ID: V03:K0:56Gcehp3KWQ5z6qO5VO4nlcZdNFwYDM5NgWTXh2oj0wSYa8tXoE M0ToFBzhCteIUZ0mxw2caUL/bfJWPQmqXsMvsYvuVHhhb8Dgc92vDK3ZD6AK070/gzmyeFF YObDrv/pY/uqHDifm3OBT5ZkyNB43o7a+rEORafQwQ+dsVvLXgp1wPU/hJzU6orIOKqsUx6 6Ou2PcrAdnJVUbDGSSW1A== X-UI-Out-Filterresults: notjunk:1; V01:K0:bGQk8vN0uuQ=:hVZdP/eHrWMzLJ33MWENCt Fd8eDxjWb2iiVowbeZh7afo5uLZ5YKJC+bS4Z10AL5aEPbr6oLakCzn2cmxZjtbFwLsAt8BTM +QvCD7WY7hExcU6Y3Fw5DYsSipz/QINMuRDEMzuGmdUgMRx1fexzLRFcjvzvNezF2c3dxtoe4 esCtZdlqekbgLFfFfqxbDtaZr5t30MsdGvXZAIUVR4KfbOnXRmcMV2A3gmQOnBABkGKeuZ5Bm QNm1KP3pNkhWiw1vffu2Qeak7n8VafFlAWgDrLJr7HU/wjnBHmttD+9Y4XKur1bl8nLmxyAZk B3WPahZOJD4LVDuTjT7ZT6KDgY17HjXTNeyMlLXV+gDUup70VlQ34dcg7TbU6hWYkOrKn80ao oyaViQryUmimYvIgz+OSwXKNL+4O/S3CVOFLid4ddHNv292vPsdTIgeY1XlO/kgETWwZ0TaLl t2uBGAf1Z/p4zoo8n3Jil5XUGHJCRtoJPy4Y0kXsFQiDttSBM/hI2OsFES/PRKvI41BVZzal2 7b1+qX0D9IwxzqULsUZy/LD9yRc2HSIZqtTD0AabIoc8k3gI5Bbo3fwzPN6+rYMOMb0FlDgNi xjKM/GSlNrBORAepXaO5qBDkwDLAbX9QJXcJPmywkXYcx9w7XRQfgXn7sownFKVqPS8OPrI/a ErXKdZzgsSRszkoq/HT/avxgy7jvCag9klTTxWe/WwlUdwEhqAvZq+VsoWq67e9ZEyAmkHy0A +TyR97x8GnrT4ZQ51Y45xtX22ct8bCejVni/Lw== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We use the deprecated do_gettimeofday() function to read the current time when resetting the statistics in both bfa_port and bfa_svc. This works fine because overflow is handled correctly, but we want to get rid of do_gettimeofday() and using a non-monotonic time suffers from concurrent settimeofday calls and other problems. This uses the ktime_get_seconds() function instead, which does what we need here. Signed-off-by: Arnd Bergmann --- drivers/scsi/bfa/bfa_port.c | 15 +++------------ drivers/scsi/bfa/bfa_port.h | 2 +- drivers/scsi/bfa/bfa_svc.c | 15 ++++----------- drivers/scsi/bfa/bfa_svc.h | 2 +- 4 files changed, 9 insertions(+), 25 deletions(-) -- 2.9.0 diff --git a/drivers/scsi/bfa/bfa_port.c b/drivers/scsi/bfa/bfa_port.c index da1721e0d167..079bc77f4102 100644 --- a/drivers/scsi/bfa/bfa_port.c +++ b/drivers/scsi/bfa/bfa_port.c @@ -96,14 +96,11 @@ bfa_port_get_stats_isr(struct bfa_port_s *port, bfa_status_t status) port->stats_busy = BFA_FALSE; if (status == BFA_STATUS_OK) { - struct timeval tv; - memcpy(port->stats, port->stats_dma.kva, sizeof(union bfa_port_stats_u)); bfa_port_stats_swap(port, port->stats); - do_gettimeofday(&tv); - port->stats->fc.secs_reset = tv.tv_sec - port->stats_reset_time; + port->stats->fc.secs_reset = ktime_get_seconds() - port->stats_reset_time; } if (port->stats_cbfn) { @@ -124,16 +121,13 @@ bfa_port_get_stats_isr(struct bfa_port_s *port, bfa_status_t status) static void bfa_port_clear_stats_isr(struct bfa_port_s *port, bfa_status_t status) { - struct timeval tv; - port->stats_status = status; port->stats_busy = BFA_FALSE; /* * re-initialize time stamp for stats reset */ - do_gettimeofday(&tv); - port->stats_reset_time = tv.tv_sec; + port->stats_reset_time = ktime_get_seconds(); if (port->stats_cbfn) { port->stats_cbfn(port->stats_cbarg, status); @@ -471,8 +465,6 @@ void bfa_port_attach(struct bfa_port_s *port, struct bfa_ioc_s *ioc, void *dev, struct bfa_trc_mod_s *trcmod) { - struct timeval tv; - WARN_ON(!port); port->dev = dev; @@ -494,8 +486,7 @@ bfa_port_attach(struct bfa_port_s *port, struct bfa_ioc_s *ioc, /* * initialize time stamp for stats reset */ - do_gettimeofday(&tv); - port->stats_reset_time = tv.tv_sec; + port->stats_reset_time = ktime_get_seconds(); bfa_trc(port, 0); } diff --git a/drivers/scsi/bfa/bfa_port.h b/drivers/scsi/bfa/bfa_port.h index 26dc1bf14c85..0c3b200243ca 100644 --- a/drivers/scsi/bfa/bfa_port.h +++ b/drivers/scsi/bfa/bfa_port.h @@ -36,7 +36,7 @@ struct bfa_port_s { bfa_port_stats_cbfn_t stats_cbfn; void *stats_cbarg; bfa_status_t stats_status; - u32 stats_reset_time; + time64_t stats_reset_time; union bfa_port_stats_u *stats; struct bfa_dma_s stats_dma; bfa_boolean_t endis_pending; diff --git a/drivers/scsi/bfa/bfa_svc.c b/drivers/scsi/bfa/bfa_svc.c index e640223bab3c..dd7d1e6bc2d8 100644 --- a/drivers/scsi/bfa/bfa_svc.c +++ b/drivers/scsi/bfa/bfa_svc.c @@ -3047,7 +3047,6 @@ bfa_fcport_attach(struct bfa_s *bfa, void *bfad, struct bfa_iocfc_cfg_s *cfg, struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(bfa); struct bfa_port_cfg_s *port_cfg = &fcport->cfg; struct bfa_fcport_ln_s *ln = &fcport->ln; - struct timeval tv; fcport->bfa = bfa; ln->fcport = fcport; @@ -3060,8 +3059,7 @@ bfa_fcport_attach(struct bfa_s *bfa, void *bfad, struct bfa_iocfc_cfg_s *cfg, /* * initialize time stamp for stats reset */ - do_gettimeofday(&tv); - fcport->stats_reset_time = tv.tv_sec; + fcport->stats_reset_time = ktime_get_seconds(); fcport->stats_dma_ready = BFA_FALSE; /* @@ -3295,9 +3293,7 @@ __bfa_cb_fcport_stats_get(void *cbarg, bfa_boolean_t complete) union bfa_fcport_stats_u *ret; if (complete) { - struct timeval tv; - if (fcport->stats_status == BFA_STATUS_OK) - do_gettimeofday(&tv); + time64_t time = ktime_get_seconds(); list_for_each_safe(qe, qen, &fcport->stats_pending_q) { bfa_q_deq(&fcport->stats_pending_q, &qe); @@ -3312,7 +3308,7 @@ __bfa_cb_fcport_stats_get(void *cbarg, bfa_boolean_t complete) bfa_fcport_fcoe_stats_swap(&ret->fcoe, &fcport->stats->fcoe); ret->fcoe.secs_reset = - tv.tv_sec - fcport->stats_reset_time; + time - fcport->stats_reset_time; } } bfa_cb_queue_status(fcport->bfa, &cb->hcb_qe, @@ -3373,13 +3369,10 @@ __bfa_cb_fcport_stats_clr(void *cbarg, bfa_boolean_t complete) struct list_head *qe, *qen; if (complete) { - struct timeval tv; - /* * re-initialize time stamp for stats reset */ - do_gettimeofday(&tv); - fcport->stats_reset_time = tv.tv_sec; + fcport->stats_reset_time = ktime_get_seconds(); list_for_each_safe(qe, qen, &fcport->statsclr_pending_q) { bfa_q_deq(&fcport->statsclr_pending_q, &qe); cb = (struct bfa_cb_pending_q_s *)qe; diff --git a/drivers/scsi/bfa/bfa_svc.h b/drivers/scsi/bfa/bfa_svc.h index ea2278bc78a8..7e8fb6231d49 100644 --- a/drivers/scsi/bfa/bfa_svc.h +++ b/drivers/scsi/bfa/bfa_svc.h @@ -505,7 +505,7 @@ struct bfa_fcport_s { struct list_head stats_pending_q; struct list_head statsclr_pending_q; bfa_boolean_t stats_qfull; - u32 stats_reset_time; /* stats reset time stamp */ + time64_t stats_reset_time; /* stats reset time stamp */ bfa_boolean_t diag_busy; /* diag busy status */ bfa_boolean_t beacon; /* port beacon status */ bfa_boolean_t link_e2e_beacon; /* link beacon status */