From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752245AbdCAJf2 (ORCPT ); Wed, 1 Mar 2017 04:35:28 -0500 Received: from mout.kundenserver.de ([217.72.192.74]:52123 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752099AbdCAJep (ORCPT ); Wed, 1 Mar 2017 04:34:45 -0500 From: Arnd Bergmann To: Guenter Roeck Cc: Wim Van Sebroeck , linux-watchdog@vger.kernel.org, Lee Jones , linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 1/3] watchdog: kempld: fix gcc-4.3 build Date: Wed, 1 Mar 2017 10:15:29 +0100 Message-Id: <20170301091531.522161-2-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20170301091531.522161-1-arnd@arndb.de> References: <20170301091531.522161-1-arnd@arndb.de> X-Provags-ID: V03:K0:WBqI6U72HNqEMj+U3J9FkXqS4R6ISPuT5cbY5tJVRsUVZBP8eY7 t6oQOBbxSUHxeVE2DfWEeLPy8r5ABy7/WC+eyEgXCKfJg62AQmWCDlgrPe0jbqpJD9MXxvV hRnZLtekEf0qZsVqv0J5Uix1j+tpEGzGYyLBg17bkIB0hafV2/h8BBnDeeVeCYj0aQCGLak youmAWo1pVDKo71KYmoMw== X-UI-Out-Filterresults: notjunk:1;V01:K0:05KbxXtKMiE=:+ghdxYo/cK6NFF8C1HQKRR 4qxqCrdeRtiCOpm64WGdDe/B6rt6LHkfVOG5vWUxFpkuLXVgvCmMIkNXhMq4B0XDhsTkCRkKk dMKyRKQEU5KZcfleCptSBOXAcctR+4xoOG8vKhR8nIypkjtDorVsnulzMt+UI6rGgLOB7vqR7 dpalXuR6NKVvl6VSEM2odKud/Z3GdgULqwCFYvBSLLbrWTCqhu21lscHPR3VSUd+hOMve1itv wBKRGtY/xwiCZxcXeEJt64pu966NMOlZQv8mdFMy5Y06q6KF/AKF8my68P11zvWc3XjCoz12d zo8TUtzRihv3rRwSCV6YTpMHTmMY6rN/lFoZuzF0yzfZrXSLf4xcwpuYubs563anX6QL4gfHS 7f49eUBqs5jWsH37gMwCD+CPqaJ0WItW0NER3fwg0O0uskshSCGupsfYgpovAKtaHkcBmHIwh T6GOcZjTbZemeytl37N1wY0ohZuj5gY1NtlNHQmLcmoegN1Z3i0vcppzPhkJDFpZE9+YU6EHF P0Qdv+TihoDr0LOiNAEKmdncMw6IkPX3LNAJYbUcHyABLbmKYL+JJJQduqeVSTJkcu/LUt43s YUXip3+lpj0+ZkcafUGqiBrBzlWJumOhjjp3Ea+5tDnvrjkAEuqQcWqYRnsrzf14BLGKQWJ0P YDQUA8YjMHJGoSFCfzqqseO9tJGGBGRetR5VQOYuD4/gBUqVxHV4b2uF2+yhrFpk9iWA= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org gcc-4.3 can't decide whether the constant value in kempld_prescaler[PRESCALER_21] is built-time constant or not, and gets confused by the logic in do_div(): drivers/watchdog/kempld_wdt.o: In function `kempld_wdt_set_stage_timeout': kempld_wdt.c:(.text.kempld_wdt_set_stage_timeout+0x130): undefined reference to `__aeabi_uldivmod' This adds a call to ACCESS_ONCE() to force it to not consider it to be constant, and leaves the more efficient normal case in place for modern compilers, using an #ifdef to annotate why we do this hack. Signed-off-by: Arnd Bergmann --- drivers/watchdog/kempld_wdt.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/watchdog/kempld_wdt.c b/drivers/watchdog/kempld_wdt.c index 73c46b3a09ab..2f3b049ea301 100644 --- a/drivers/watchdog/kempld_wdt.c +++ b/drivers/watchdog/kempld_wdt.c @@ -140,12 +140,19 @@ static int kempld_wdt_set_stage_timeout(struct kempld_wdt_data *wdt_data, unsigned int timeout) { struct kempld_device_data *pld = wdt_data->pld; - u32 prescaler = kempld_prescaler[PRESCALER_21]; + u32 prescaler; u64 stage_timeout64; u32 stage_timeout; u32 remainder; u8 stage_cfg; +#if GCC_VERSION < 40400 + /* work around a bug compiling do_div() */ + prescaler = READ_ONCE(kempld_prescaler[PRESCALER_21]); +#else + prescaler = kempld_prescaler[PRESCALER_21]; +#endif + if (!stage) return -EINVAL; -- 2.9.0