From patchwork Thu Dec 18 09:44:44 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 422521 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id F0F4314010F for ; Thu, 18 Dec 2014 20:44:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750978AbaLRJot (ORCPT ); Thu, 18 Dec 2014 04:44:49 -0500 Received: from mail-wi0-f176.google.com ([209.85.212.176]:45634 "EHLO mail-wi0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750959AbaLRJor (ORCPT ); Thu, 18 Dec 2014 04:44:47 -0500 Received: by mail-wi0-f176.google.com with SMTP id ex7so1100080wid.15; Thu, 18 Dec 2014 01:44:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=yLGLmFQFqkK8STIyMpnOcprDT9AvaE3ExPIK0i9hFhc=; b=D3Nt8iWxjQ3jZM2RsWuBYtmh1155OWmuJlAlrI0q2e41e56R5QJQtUOQI6QCXj0H6t hcz10gPk1VLcEeUM9gsgLFU+MCpamuudwIvp7KhEvAurF4mtQf7v+N2nEJPxXkff1ZJC LbN0iPR6K5PP3s6RhoEeR6Wy/g2iKR1snpksqkuWiHGI0viY4TUVO3yDhtMWXs0CzE0a vMUsSDgyATqFG+rrMEG9Fo2GSIb5hHcU+bqEEGdKOLOE+dU2doU6ErvaDcjE3fB+Qvir VXtNgMFjYiv8xRlDeasWvUXcOxL4de/zOIDKbKWNb96ESmgY8iJjZzZz5p3W9hzuh9rx jsLQ== X-Received: by 10.194.190.19 with SMTP id gm19mr2415599wjc.51.1418895886011; Thu, 18 Dec 2014 01:44:46 -0800 (PST) Received: from localhost (port-32337.pppoe.wtnet.de. [46.59.177.33]) by mx.google.com with ESMTPSA id mo12sm8238713wjc.35.2014.12.18.01.44.44 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 18 Dec 2014 01:44:45 -0800 (PST) Date: Thu, 18 Dec 2014 10:44:44 +0100 From: Thierry Reding To: Jim Davis Cc: Stephen Rothwell , Boris Brezillon , linux-next , linux-kernel , linux-pwm@vger.kernel.org Subject: Re: randconfig build error with next-20141204, in drivers/pwm Message-ID: <20141218094442.GA24383@ulmo> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-pwm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org On Thu, Dec 04, 2014 at 09:10:55AM -0700, Jim Davis wrote: > Building with the attached random configuration file, > > ERROR: "____ilog2_NaN" [drivers/pwm/pwm-atmel-hlcdc.ko] undefined! This took a while to figure out. The attached patch fixes this build failure, though the driver should probably be fixed to avoid division by zero, just in case. Adding Boris for visibility. Thierry Acked-by: Boris Brezillon From 7933af1d2e5f3941d934eec88f32f5547ee218c3 Mon Sep 17 00:00:00 2001 From: Thierry Reding Date: Thu, 18 Dec 2014 10:09:42 +0100 Subject: [PATCH] pwm: atmel-hlcdc: Depend on HAVE_CLK The include/linux/clk.h header defines dummy implementations for the various clk_*() functions if HAVE_CLK is not selected to improve build coverage in randconfig builds. The dummy implementation of clk_get_rate() returns 0, which causes the Atmel HLCDC PWM driver's atmel_hlcdc_pwm_config() implementation to end up calling: do_div(clk_period_ns, 0) On x86, do_div(n, base) will end up evaluating to this: n >>= ilog2(base) with base = 0, the implementation of ilog2() will call ____ilog2_NaN(), which is purposely undefined and results in a linker failure: ERROR: "____ilog2_NaN" [drivers/pwm/pwm-atmel-hlcdc.ko] undefined! The implementation of do_div() checks that base is a power of 2 before calling ilog2(). The compiler doesn't optimize this away, presumably because is_power_of_2() is an inline function and the compiler doesn't or can't inspect it closely enough. ilog2() being a macro it still ends up generating the ____ilog2_NaN() because of the constant 0. The root of the problem is that the driver really should be checking before possibly dividing by zero. That should eventually be fixed, but for now just assume that the clock runs at a sensible frequency when available. Reported-by: Jim Davis Signed-off-by: Thierry Reding --- drivers/pwm/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig index a3ecf5809634..468af1b4ca30 100644 --- a/drivers/pwm/Kconfig +++ b/drivers/pwm/Kconfig @@ -53,6 +53,7 @@ config PWM_ATMEL config PWM_ATMEL_HLCDC_PWM tristate "Atmel HLCDC PWM support" depends on MFD_ATMEL_HLCDC + depends on HAVE_CLK help Generic PWM framework driver for the PWM output of the HLCDC (Atmel High-end LCD Controller). This PWM output is mainly used -- 2.1.3