Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753496AbdCTJqv (ORCPT ); Mon, 20 Mar 2017 05:46:51 -0400 Received: from mout.kundenserver.de ([212.227.126.134]:49818 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750873AbdCTJqV (ORCPT ); Mon, 20 Mar 2017 05:46:21 -0400 From: Arnd Bergmann To: Daniel Vetter , Jani Nikula , David Airlie Cc: Arnd Bergmann , Mika Kuoppala , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Chris Wilson , Imre Deak , Ander Conselvan de Oliveira , Robert Bragg , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/3] [RFC] Revert "drm/i915: use variadic macros and arrays to choose port/pipe based registers" Date: Mon, 20 Mar 2017 10:40:29 +0100 Message-Id: <20170320094335.1266306-3-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20170320094335.1266306-1-arnd@arndb.de> References: <20170320094335.1266306-1-arnd@arndb.de> X-Provags-ID: V03:K0:7K836HYsVgLif+n5ia93L0AvbMh7dPSPhwkIFbIJ/rLB7t2HwGM CatMelbxung66jE2FPb0tauWiHIuqXp4zsOvwAkxvExZFTLfUwd4uN43/E6C20FrJ98hvSi jwNdrJ+ThbN9mFdS83h4ww5tVMvfLlFqdhPVyeySCRKSIs64/r26eQY08bmtb0xRW5/uqhJ 9Bnnaag2iyvWBrz922MOw== X-UI-Out-Filterresults: notjunk:1;V01:K0:3b2SDTvKil4=:Mk2jr2S7QbHFrS32oumfjL hRAzIVLZ1rhkmYzNk+1fJnQUIDoUqT9AYoa0Xn4TW8l8kxZtPPfRuqfOCbfAkq/wUA7/B54kL pwHF1RxhL2ZyvH7EjDZllxUtSEYuBnZJSA8hL9u89l4osxwoWh+BDgTTmSpGNZclFtvTJOo3v wiJCV3KiITlm/2i2h9KtmBLMCZKdk0inp9sVr2m/V0seJBJE14CQfYlDeDyQQyrWEdu+56oMc cL7iMBsOvZd4hFORE5vScdSJur9q0scvEeoaVZz6SVyCD+R36Ct3jTGwLHORHRWR8hrADyx1w hS5GoC6DUEjzgMy04DQbIKFh3fo65R+0cUjGcgaQrrLUWlGEddSzYGOgrYFkPDWQF+6Vv6yF9 /mVJXc+ZskHt0zRGYpIGn5MVmfZHcJI/mOFIDv3ZAS5rwsD9jZVj1cK+f0HuFRRAYR9M6tWds hQj6d+Sck2r0SVCsXGWG3t1d/TVJbQlWbshuh48K9kXO9HV/8rJIYWjzoa1r1VSgR203WHn0W Ysm7tYe+s9621+R6Pha+gnWcvIEs103dXSMnDz6WngO0dyzM+o7nY83/iSte9Zrt/RHDzKVL/ 4qHyIMahFWAGQn/ns5dhwSP/tneP+mDjhgnMwJDaMrWslP2+OrzWzxGfDzcgK5MnSBMy7fpk/ w231saieIeWQ2h1gzm9y1Wp44FHR/dKxrZrXk6k795G94RFwHI/KWZH/ylXgRuiV4UFg= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3437 Lines: 71 The varargs macro trick in _PIPE3/_PHY3/_PORT3 was meant as an optimization to shrink the i915 kernel module by around 1000 bytes. However, the downside is a size regression with CONFIG_KASAN, as I found from stack size warnings with gcc-7.0.1: before: drivers/gpu/drm/i915/intel_dpll_mgr.c: In function 'bxt_ddi_pll_get_hw_state': drivers/gpu/drm/i915/intel_dpll_mgr.c:1644:1: error: the frame size of 176 bytes is larger than 100 bytes [-Werror=frame-larger-than=] drivers/gpu/drm/i915/intel_dpll_mgr.c: In function 'bxt_ddi_pll_enable': drivers/gpu/drm/i915/intel_dpll_mgr.c:1548:1: error: the frame size of 224 bytes is larger than 100 bytes [-Werror=frame-larger-than=] after: drivers/gpu/drm/i915/intel_dpll_mgr.c: In function 'bxt_ddi_pll_get_hw_state': drivers/gpu/drm/i915/intel_dpll_mgr.c:1644:1: error: the frame size of 1016 bytes is larger than 1000 bytes [-Werror=frame-larger-than=] drivers/gpu/drm/i915/intel_dpll_mgr.c: In function 'bxt_ddi_pll_enable': drivers/gpu/drm/i915/intel_dpll_mgr.c:1548:1: error: the frame size of 1960 bytes is larger than 1000 bytes [-Werror=frame-larger-than=] I also checked the module sizes and got before: text data bss dec hex filename 2704592 412025 11104 3127721 2fb9a9 drivers/gpu/drm/i915/i915.o after: text data bss dec hex filename 2718538 412025 11104 3141667 2ff023 drivers/gpu/drm/i915/i915.o showing a significant code size growth. This reverts the patch to avoid the warning and get back to the better code with CONFIG_KASAN. If someone has another idea to avoid the warning while keeping the more efficient code for the non-KASAN case, that would obviously be better. Fixes: ce64645d86ac ("drm/i915: use variadic macros and arrays to choose port/pipe based registers") Signed-off-by: Arnd Bergmann --- drivers/gpu/drm/i915/i915_reg.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 04c8f69fcc62..aa732eccdeb5 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h @@ -48,8 +48,6 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg) return !i915_mmio_reg_equal(reg, INVALID_MMIO_REG); } -#define _PICK(__index, ...) (((const u32 []){ __VA_ARGS__ })[__index]) - #define _PIPE(pipe, a, b) ((a) + (pipe)*((b)-(a))) #define _MMIO_PIPE(pipe, a, b) _MMIO(_PIPE(pipe, a, b)) #define _PLANE(plane, a, b) _PIPE(plane, a, b) @@ -58,11 +56,14 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg) #define _MMIO_TRANS(tran, a, b) _MMIO(_TRANS(tran, a, b)) #define _PORT(port, a, b) ((a) + (port)*((b)-(a))) #define _MMIO_PORT(port, a, b) _MMIO(_PORT(port, a, b)) -#define _PIPE3(pipe, ...) _PICK(pipe, __VA_ARGS__) +#define _PIPE3(pipe, a, b, c) ((pipe) == PIPE_A ? (a) : \ + (pipe) == PIPE_B ? (b) : (c)) #define _MMIO_PIPE3(pipe, a, b, c) _MMIO(_PIPE3(pipe, a, b, c)) -#define _PORT3(port, ...) _PICK(port, __VA_ARGS__) +#define _PORT3(port, a, b, c) ((port) == PORT_A ? (a) : \ + (port) == PORT_B ? (b) : (c)) #define _MMIO_PORT3(pipe, a, b, c) _MMIO(_PORT3(pipe, a, b, c)) -#define _PHY3(phy, ...) _PICK(phy, __VA_ARGS__) +#define _PHY3(phy, a, b, c) ((phy) == DPIO_PHY0 ? (a) : \ + (phy) == DPIO_PHY1 ? (b) : (c)) #define _MMIO_PHY3(phy, a, b, c) _MMIO(_PHY3(phy, a, b, c)) #define _MASKED_FIELD(mask, value) ({ \ -- 2.9.0