Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934836AbcLPK7e (ORCPT ); Fri, 16 Dec 2016 05:59:34 -0500 Received: from mout.kundenserver.de ([217.72.192.73]:53721 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1760749AbcLPK5G (ORCPT ); Fri, 16 Dec 2016 05:57:06 -0500 From: Arnd Bergmann To: linux-arch@vger.kernel.org Cc: linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@vger.kernel.org, Russell King , Andrew Morton , kernel-build-reports@lists.linaro.org, kvmarm@lists.cs.columbia.edu, Arnd Bergmann Subject: [PATCH 07/13] watchdog: kempld: fix gcc-4.3 build Date: Fri, 16 Dec 2016 11:56:28 +0100 Message-Id: <20161216105634.235457-8-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20161216105634.235457-1-arnd@arndb.de> References: <20161216105634.235457-1-arnd@arndb.de> X-Provags-ID: V03:K0:bKgB3BQpvPRs49NAbMvhifnnk+OPpWwz+xgJXiXXhJhceVUK53T pjG5Jkozv/z60G+zgNigp+MvManDrEdfbh3X58sL7SmI9KInhYNDGvXxPmux4vxrfN6W118 La5iu72TAlhJ4L8ZXZtrKDWCFcXDSryrUCvdC3VdjqXNcOUXcPcnxfebfYZBkXaeyAPkbRY IiTBTb62cfQn2/atd8z7Q== X-UI-Out-Filterresults: notjunk:1;V01:K0:37K2/S81aS8=:oyK9ON1e80MvKf8hWmVAOF 2qacpbj2p7ICE5YMUGZAD195pk22r/PfA1HMzOrajCV0ucQ9mpgc9ybFyqub5lv86vALrbwhv iDisD+ul2j3CsPkssp8Hee7o92yk/vehO3m5zM8CVU++QUKvBtqeiB5Rt+YQ45Z6achujULEV BTZKYvt1BJwYzCKIT3WRg1lWIe2A2StsEOVR8KONAndSUyu+sL808vAyCELvab+zCoF33cb8G dMaB5KF8iSVoGHOExF7TgKbVMX1hf4Juhpsa9Rz0C11/TEMF6NuSiCD1OZeV8ZnFXWtJf4uql kCsKKCRjO9H8QqPhNmr/+5w/BDHBbSKMkm15NzxCivpjDRFlgcAuNjw701sy8VSRgdFdPlBkz /Ckf8TVnCj73plo9Qz14wC9RDxeniR0dFQ++cOiFwgXdvdUPPK4vgOfObxeSEmsHmqtokb6u5 bjwow8joa6NvD60Ag2qe1ab9tT4fN18c3ItH8BBOdICwpCILWmoiZzdmIG1mgtsSluuQyXZ2L WintplEXexDrwfG3PGKPfdJMXj1qVqjJpyy96WQekEGHjQqj4yoA9Eif7FYBTVjb2aA0JpO1v LfT1Xf5DS3nOvaElTg63LAuZW8FwuLepOrG+IPHeh6mDUZFPKVGMlv+BR7Uj3UsZUesBAIiPd pTx/XRJKE9TViOiLOdXR4K1LccLoU5dFIauZjngZOU3fN1mr+FJAyjtTqkXslTT/CMug= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1425 Lines: 44 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 8e302d0e346c..3efa295ac627 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