From: Arnd Bergmann <arnd@arndb.de>
To: Daniel Lezcano <daniel.lezcano@linaro.org>,
Thomas Gleixner <tglx@linutronix.de>
Cc: Arnd Bergmann <arnd@arndb.de>,
Florian Fainelli <f.fainelli@gmail.com>,
Ray Jui <rjui@broadcom.com>,
Scott Branden <sbranden@broadcom.com>,
bcm-kernel-feedback-list@broadcom.com,
linux-kernel@vger.kernel.org
Subject: [PATCH 6/9] clocksource: kona: fix get_counter error handling
Date: Wed, 10 Aug 2016 23:54:12 +0200 [thread overview]
Message-ID: <20160810215424.1926658-7-arnd@arndb.de> (raw)
In-Reply-To: <20160810215424.1926658-1-arnd@arndb.de>
I could not figure out why, but gcc cannot prove that the
kona_timer_init function always initializes its two outputs,
and we get a warning for the use of the 'lsw' variable later,
which is obviously correct.
drivers/clocksource/bcm_kona_timer.c: In function 'kona_timer_init':
drivers/clocksource/bcm_kona_timer.c:119:13: error: 'lsw' may be used uninitialized in this function [-Werror=maybe-uninitialized]
Slightly reordering the loop makes the warning disappear, after
it becomes more obvious to the compiler that the loop is
always entered on the first iteration.
As pointed out by Ray Jui, there is a related problem in the
way we deal with the loop running into the limit, as we just
keep going there with an invalid counter data, so instead we
now propagate a -ETIMEDOUT result to the caller.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Link: https://patchwork.kernel.org/patch/9174261/
---
Originally sent this as a warning fix only on June 13, this
version actually fixes the incorrect data problem.
---
drivers/clocksource/bcm_kona_timer.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/drivers/clocksource/bcm_kona_timer.c b/drivers/clocksource/bcm_kona_timer.c
index 7e3fd375a627..92f6e4deee74 100644
--- a/drivers/clocksource/bcm_kona_timer.c
+++ b/drivers/clocksource/bcm_kona_timer.c
@@ -66,10 +66,10 @@ static void kona_timer_disable_and_clear(void __iomem *base)
}
-static void
+static int
kona_timer_get_counter(void __iomem *timer_base, uint32_t *msw, uint32_t *lsw)
{
- int loop_limit = 4;
+ int loop_limit = 3;
/*
* Read 64-bit free running counter
@@ -83,18 +83,19 @@ kona_timer_get_counter(void __iomem *timer_base, uint32_t *msw, uint32_t *lsw)
* if new hi-word is equal to previously read hi-word then stop.
*/
- while (--loop_limit) {
+ do {
*msw = readl(timer_base + KONA_GPTIMER_STCHI_OFFSET);
*lsw = readl(timer_base + KONA_GPTIMER_STCLO_OFFSET);
if (*msw == readl(timer_base + KONA_GPTIMER_STCHI_OFFSET))
break;
- }
+ } while (--loop_limit);
if (!loop_limit) {
pr_err("bcm_kona_timer: getting counter failed.\n");
pr_err(" Timer will be impacted\n");
+ return -ETIMEDOUT;
}
- return;
+ return 0;
}
static int kona_timer_set_next_event(unsigned long clc,
@@ -112,8 +113,11 @@ static int kona_timer_set_next_event(unsigned long clc,
uint32_t lsw, msw;
uint32_t reg;
+ int ret;
- kona_timer_get_counter(timers.tmr_regs, &msw, &lsw);
+ ret = kona_timer_get_counter(timers.tmr_regs, &msw, &lsw);
+ if (ret)
+ return ret;
/* Load the "next" event tick value */
writel(lsw + clc, timers.tmr_regs + KONA_GPTIMER_STCM0_OFFSET);
--
2.9.0
next prev parent reply other threads:[~2016-08-10 21:57 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-10 21:54 [PATCH 0/9] v4.8 build regressions Arnd Bergmann
2016-08-10 21:54 ` [PATCH 1/9] kconfig: tinyconfig: provide whole choice blocks to avoid warnings Arnd Bergmann
2016-08-11 8:43 ` Masahiro Yamada
2016-08-11 8:59 ` Ingo Molnar
2016-08-10 21:54 ` [PATCH 2/9] dsa: mv88e6xxx: hide unused functions Arnd Bergmann
2016-08-13 0:32 ` David Miller
2016-08-10 21:54 ` [PATCH 3/9] drm/mediatek: add COMMON_CLK dependency Arnd Bergmann
2016-08-10 21:54 ` [PATCH 4/9] drm/mediatek: add CONFIG_OF dependency Arnd Bergmann
2016-08-10 21:54 ` [PATCH 5/9] drm/mediatek: add ARM_SMCCC dependency Arnd Bergmann
2016-08-10 21:54 ` Arnd Bergmann [this message]
2016-08-11 0:00 ` [PATCH 6/9] clocksource: kona: fix get_counter error handling Ray Jui
2016-08-16 13:11 ` Daniel Lezcano
2016-08-10 21:54 ` [PATCH 7/9] 8250/fintek: rename IRQ_MODE macro Arnd Bergmann
2016-08-10 21:54 ` [PATCH 8/9] test/hash: Fix warning in two-dimensional array init Arnd Bergmann
2016-08-10 21:54 ` [PATCH 9/9] test/hash: Fix warning in preprocessor symbol evaluation Arnd Bergmann
2016-08-10 22:45 ` Arnd Bergmann
2016-08-11 6:38 ` [PATCH 0/9] v4.8 build regressions Philipp Zabel
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=20160810215424.1926658-7-arnd@arndb.de \
--to=arnd@arndb.de \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=daniel.lezcano@linaro.org \
--cc=f.fainelli@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rjui@broadcom.com \
--cc=sbranden@broadcom.com \
--cc=tglx@linutronix.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome