From patchwork Thu Feb 20 06:22:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Kees Cook X-Patchwork-Id: 11393427 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 49AA214E3 for ; Thu, 20 Feb 2020 06:23:07 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 277532465D for ; Thu, 20 Feb 2020 06:23:07 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="eXqOb0Xq" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 277532465D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 214C16ECD7; Thu, 20 Feb 2020 06:23:05 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-pf1-x444.google.com (mail-pf1-x444.google.com [IPv6:2607:f8b0:4864:20::444]) by gabe.freedesktop.org (Postfix) with ESMTPS id 779F46ECD7 for ; Thu, 20 Feb 2020 06:23:04 +0000 (UTC) Received: by mail-pf1-x444.google.com with SMTP id 2so1374816pfg.12 for ; Wed, 19 Feb 2020 22:23:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=fbfAO2fSu64pq6u1mWmQFfQ48eFbdaGtUu7sTtkiZVI=; b=eXqOb0Xq8yLMYkfMLFRWCv/9zeTHUJq2FN9U8UeFKeGFdm0DD5tRSl8YdQnwOJyO03 X7mT5Htx9fTxmkf6Diejdm6vkmBC94zAgA6RqlYSMdwekesiRIWnmujIHQYBfo9nil7i LyWoECEDCeGzvEdh6DJrR01qVSjrXeuBbI9hs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=fbfAO2fSu64pq6u1mWmQFfQ48eFbdaGtUu7sTtkiZVI=; b=jpOY1GSlRP6rRokk3kOL/h4ONXK63J72RRvxpaLyL/GovEo3mb/I4j6HV/K1fcWlN6 +YVx5yIQ17Yr1vsVqmvu4NdgRwwk6Zk7plsxsKNKF96GzfiNNbxelR+F2JjLBoVvGnZn hzJr5o21XQXRcEmOTGILujevsL5o3VGC8Iccqo/YiWJaqPxP7TipcCSL7hRzB0ZGI8AX HFns7aiB1oDJWlDZe/Qj61r28OIo0GhSbOq2zwU5SZMatXPcszhespGoAm0h2iYkwZtD Ba3TSKApqg5f0VLcnRNUszLkYYpbKXWq1MuoeW9JG0XPNB0ZM/3ExYmGXgUJ+uSXb8Mz CBaA== X-Gm-Message-State: APjAAAVD994upmqebRSxkdT5obhoneFrqRqXWr11bEfsnTCaZxMpYJIa aiEBpfFyb/HaUln5ZIHcbqbH/w== X-Google-Smtp-Source: APXvYqxKdc3dx637nl+ZE7CYGKAsYw2ovD42uVb8xBeno/jiHtEqLviKrb5hssJUvWcJDdL7B+eXyA== X-Received: by 2002:a63:594a:: with SMTP id j10mr32381690pgm.227.1582179783832; Wed, 19 Feb 2020 22:23:03 -0800 (PST) Received: from www.outflux.net (smtp.outflux.net. [198.145.64.163]) by smtp.gmail.com with ESMTPSA id y2sm1747574pff.139.2020.02.19.22.23.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Feb 2020 22:23:02 -0800 (PST) From: Kees Cook To: Jani Nikula , Joonas Lahtinen , Rodrigo Vivi Date: Wed, 19 Feb 2020 22:22:58 -0800 Message-Id: <20200220062258.68854-1-keescook@chromium.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH] drm/i915: Distribute switch variables for initialization X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: intel-gfx@lists.freedesktop.org, Alexander Potapenko , Kees Cook , linux-kernel@vger.kernel.org Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Variables declared in a switch statement before any case statements cannot be automatically initialized with compiler instrumentation (as they are not part of any execution flow). With GCC's proposed automatic stack variable initialization feature, this triggers a warning (and they don't get initialized). Clang's automatic stack variable initialization (via CONFIG_INIT_STACK_ALL=y) doesn't throw a warning, but it also doesn't initialize such variables[1]. Note that these warnings (or silent skipping) happen before the dead-store elimination optimization phase, so even when the automatic initializations are later elided in favor of direct initializations, the warnings remain. To avoid these problems, move such variables into the "case" where they're used or lift them up into the main function body. drivers/gpu/drm/i915/display/intel_display.c: In function ‘check_digital_port_conflicts’: drivers/gpu/drm/i915/display/intel_display.c:12963:17: warning: statement will never be executed [-Wswitch-unreachable] 12963 | unsigned int port_mask; | ^~~~~~~~~ drivers/gpu/drm/i915/intel_pm.c: In function ‘vlv_get_fifo_size’: drivers/gpu/drm/i915/intel_pm.c:474:7: warning: statement will never be executed [-Wswitch-unreachable] 474 | u32 dsparb, dsparb2, dsparb3; | ^~~~~~ drivers/gpu/drm/i915/intel_pm.c: In function ‘vlv_atomic_update_fifo’: drivers/gpu/drm/i915/intel_pm.c:1997:7: warning: statement will never be executed [-Wswitch-unreachable] 1997 | u32 dsparb, dsparb2, dsparb3; | ^~~~~~ [1] https://bugs.llvm.org/show_bug.cgi?id=44916 Signed-off-by: Kees Cook Reviewed-by: Jani Nikula --- drivers/gpu/drm/i915/display/intel_display.c | 6 ++++-- drivers/gpu/drm/i915/intel_pm.c | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 064dd99bbc49..c829cd26f99e 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -12960,14 +12960,15 @@ static bool check_digital_port_conflicts(struct intel_atomic_state *state) WARN_ON(!connector_state->crtc); switch (encoder->type) { - unsigned int port_mask; case INTEL_OUTPUT_DDI: if (WARN_ON(!HAS_DDI(to_i915(dev)))) break; /* else, fall through */ case INTEL_OUTPUT_DP: case INTEL_OUTPUT_HDMI: - case INTEL_OUTPUT_EDP: + case INTEL_OUTPUT_EDP: { + unsigned int port_mask; + port_mask = 1 << encoder->port; /* the same port mustn't appear more than once */ @@ -12976,6 +12977,7 @@ static bool check_digital_port_conflicts(struct intel_atomic_state *state) used_ports |= port_mask; break; + } case INTEL_OUTPUT_DP_MST: used_mst_ports |= 1 << encoder->port; diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index bd2d30ecc030..17d8833787c4 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c @@ -469,9 +469,9 @@ static void vlv_get_fifo_size(struct intel_crtc_state *crtc_state) struct vlv_fifo_state *fifo_state = &crtc_state->wm.vlv.fifo_state; enum pipe pipe = crtc->pipe; int sprite0_start, sprite1_start; + u32 dsparb, dsparb2, dsparb3; switch (pipe) { - u32 dsparb, dsparb2, dsparb3; case PIPE_A: dsparb = I915_READ(DSPARB); dsparb2 = I915_READ(DSPARB2); @@ -1969,6 +1969,7 @@ static void vlv_atomic_update_fifo(struct intel_atomic_state *state, const struct vlv_fifo_state *fifo_state = &crtc_state->wm.vlv.fifo_state; int sprite0_start, sprite1_start, fifo_size; + u32 dsparb, dsparb2, dsparb3; if (!crtc_state->fifo_changed) return; @@ -1994,7 +1995,6 @@ static void vlv_atomic_update_fifo(struct intel_atomic_state *state, spin_lock(&uncore->lock); switch (crtc->pipe) { - u32 dsparb, dsparb2, dsparb3; case PIPE_A: dsparb = intel_uncore_read_fw(uncore, DSPARB); dsparb2 = intel_uncore_read_fw(uncore, DSPARB2);