Received: by 10.213.65.68 with SMTP id h4csp320582imn; Tue, 13 Mar 2018 05:34:50 -0700 (PDT) X-Google-Smtp-Source: AG47ELtZCFoOW57WoQ5zmv8CCU0s52DAQuVlY0omEfV3HNbgjeDxN9wJCvm59NTvR/e7Fbq4jaFB X-Received: by 2002:a17:902:bf03:: with SMTP id bi3-v6mr406563plb.343.1520944490031; Tue, 13 Mar 2018 05:34:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1520944489; cv=none; d=google.com; s=arc-20160816; b=PQe/E0C/e+VXQpQkDVqtECUWDXBAsDAvBsDb3uAosK2SYKETWL8GQHTlh8fc0kUzfx wIwPxZGG6o9HT2ZpcIKv2rlaQYuuYaZcg9aek5c8vFpR9VaOpndCDcQd/Bc+2LQM3iCf sKHjUGdGmircNeJrzFdZYg+97DiilKmFoKZZgqf/6/rkJgXW6+8/r6GuD880lP+uoHpM w436TxMtoSUtjhyPbtEOg2ZKnNOfjJPHOQ2/YhuQT5sB0YNJ6zbPP33rObk2OPw7oFwr 9QeTHyCj+3hG/bardMKlZdxv5iITJEkeIUMmHSYk4UZTcZgaWV5+YrDXlrU6zV/NwOpe aTXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:subject:user-agent:message-id :references:cc:in-reply-to:from:to:content-transfer-encoding :mime-version:arc-authentication-results; bh=ggv0hQcFkeYfKRQZ7o4aIOEv8X54Yg9lorpEo0DNQvU=; b=04Zj2huBtEJVQ4dxxSq2WiufOhcX/tdL/8kGIJCNQqYxv8hffNIe4dlROhfa143uWA hk0WkC/sUEk7cuspbAaOG28amyXmB4JZTcp3dCvL4zWxk86GRY3a0fZCJYYmSvAqJ7A5 uLCNtO7+kgU3rb2mGvpwSkHLw9puiwvfUTkbL1twBwyJ8iKtDT/B58H2t+LS5RgpNDZf vDw2ASB0KRifRabIqO70t7eaht/hRLFnUDYRobQmzgSok8qcK4TdqUwxtgX14qGqcLAk BI18sGRFUK3xNF9DMzK9gdlxHFWgvRJP10wYNng/hPbagBkwB3YmG8My63SE3Pv2Ye5n z7JA== 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 m2si26332pgs.716.2018.03.13.05.34.34; Tue, 13 Mar 2018 05:34:49 -0700 (PDT) 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 S932843AbeCMMbm convert rfc822-to-8bit (ORCPT + 99 others); Tue, 13 Mar 2018 08:31:42 -0400 Received: from mail.fireflyinternet.com ([109.228.58.192]:51417 "EHLO fireflyinternet.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752390AbeCMMbj (ORCPT ); Tue, 13 Mar 2018 08:31:39 -0400 X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from localhost (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP (TLS) id 11008618-1500050 for multiple; Tue, 13 Mar 2018 12:31:34 +0000 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8BIT To: Arnd Bergmann , "Jani Nikula" , "Joonas Lahtinen" , "Rodrigo Vivi" , "David Airlie" From: Chris Wilson In-Reply-To: <20180313120848.2658626-1-arnd@arndb.de> Cc: "Arnd Bergmann" , "Tvrtko Ursulin" , "Michal Wajdeczko" , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org References: <20180313120848.2658626-1-arnd@arndb.de> Message-ID: <152094429237.515.2412380565628307987@mail.alporthouse.com> User-Agent: alot/0.3.6 Subject: Re: [PATCH] drm/i915/pmu: avoid -Wmaybe-uninitialized warning Date: Tue, 13 Mar 2018 12:31:32 +0000 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Quoting Arnd Bergmann (2018-03-13 12:08:29) > The conditional spinlock confuses gcc into thinking the 'flags' value > might contain uninitialized data: > > drivers/gpu/drm/i915/i915_pmu.c: In function '__i915_pmu_event_read': > arch/x86/include/asm/paravirt_types.h:573:3: error: 'flags' may be used uninitialized in this function [-Werror=maybe-uninitialized] > > The code is correct, but it's easy to see how the compiler gets confused > here. This avoids the problem by pulling the lock outside of the function > into its only caller. > > Fixes: 1fe699e30113 ("drm/i915/pmu: Fix sleep under atomic in RC6 readout") > Signed-off-by: Arnd Bergmann > --- > drivers/gpu/drm/i915/i915_pmu.c | 25 ++++++++++--------------- > 1 file changed, 10 insertions(+), 15 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c > index 4bc7aefa9541..2c8c705d1f18 100644 > --- a/drivers/gpu/drm/i915/i915_pmu.c > +++ b/drivers/gpu/drm/i915/i915_pmu.c > @@ -415,7 +415,6 @@ static u64 __get_rc6(struct drm_i915_private *i915) > static u64 get_rc6(struct drm_i915_private *i915, bool locked) bool locked is now unused, right? > { > #if IS_ENABLED(CONFIG_PM) > - unsigned long flags; > u64 val; > > if (intel_runtime_pm_get_if_in_use(i915)) { > @@ -428,18 +427,12 @@ static u64 get_rc6(struct drm_i915_private *i915, bool locked) > * previously. > */ > > - if (!locked) > - spin_lock_irqsave(&i915->pmu.lock, flags); > - > if (val >= i915->pmu.sample[__I915_SAMPLE_RC6_ESTIMATED].cur) { > i915->pmu.sample[__I915_SAMPLE_RC6_ESTIMATED].cur = 0; > i915->pmu.sample[__I915_SAMPLE_RC6].cur = val; > } else { > val = i915->pmu.sample[__I915_SAMPLE_RC6_ESTIMATED].cur; > } > - > - if (!locked) > - spin_unlock_irqrestore(&i915->pmu.lock, flags); > } else { > struct pci_dev *pdev = i915->drm.pdev; > struct device *kdev = &pdev->dev; > @@ -452,9 +445,6 @@ static u64 get_rc6(struct drm_i915_private *i915, bool locked) > * on top of the last known real value, as the approximated RC6 > * counter value. > */ > - if (!locked) > - spin_lock_irqsave(&i915->pmu.lock, flags); > - > spin_lock_irqsave(&kdev->power.lock, flags2); > > if (!i915->pmu.sample[__I915_SAMPLE_RC6_ESTIMATED].cur) > @@ -470,9 +460,6 @@ static u64 get_rc6(struct drm_i915_private *i915, bool locked) > val = jiffies_to_nsecs(val); > val += i915->pmu.sample[__I915_SAMPLE_RC6].cur; > i915->pmu.sample[__I915_SAMPLE_RC6_ESTIMATED].cur = val; > - > - if (!locked) > - spin_unlock_irqrestore(&i915->pmu.lock, flags); > } > > return val; > @@ -519,8 +506,16 @@ static u64 __i915_pmu_event_read(struct perf_event *event, bool locked) > val = count_interrupts(i915); > break; > case I915_PMU_RC6_RESIDENCY: > - val = get_rc6(i915, locked); > - break; > + if (!locked) { > + unsigned long flags; > + > + spin_lock_irqsave(&i915->pmu.lock, flags); > + val = get_rc6(i915, locked); > + spin_unlock_irqrestore(&i915->pmu.lock, flags); > + break; > + } else { > + val = get_rc6(i915, locked); > + } break is now on one path only; should be here. -Chris