From patchwork Fri Jul 12 09:24:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 168922 Delivered-To: patch@linaro.org Received: by 2002:a92:4782:0:0:0:0:0 with SMTP id e2csp617020ilk; Fri, 12 Jul 2019 02:24:42 -0700 (PDT) X-Google-Smtp-Source: APXvYqwJJ1L1z66etPHm1nMFaiwYJdISyQw52sXdHmO8Z1MSlWtcgUMKtS8mmJDYk010gDAjNgPr X-Received: by 2002:a17:90a:8985:: with SMTP id v5mr10321182pjn.136.1562923482621; Fri, 12 Jul 2019 02:24:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562923482; cv=none; d=google.com; s=arc-20160816; b=hAWkARdqC+egHGMkl6tFR2Duj5MroSHzR48pBbPmjoVrW4WNVXKbPaF1294pn3E/Mm rQ4fFLvAvhvYBfKTMhKE6v6gnVuH2myPRXSCJdyt7AKCUop3NIfhppSruKv5S/FWwD0j yyxTL73j3rktOxtC2XLO/n8n1UPLtAMdyvgQbrbVr4YkONk5DD42GXnMUkdwYxBVvLkv lPR36hqxWtG+OOERy733qf9I1S5TLiImbUj4xIk51d9m7smbbWX4yzxXrmolEclTsDkq K0f9+XDDEfj+udOzkzCYBk61+H9ESz3hPRpstL06981l9xTtrvDya2kDozGHfWhVpryy HjUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=bb4k3EjbL+USBDhyC85R5jG6Y6ZMM6CKbAg3oHqin+4=; b=zC1JVrcbmLBVieBFVjXjGcoEZ14LCHbX4c5+3muuM1AaUSinpSbEyAgcb28gyAmHV4 E7b0bY0K3/lOhlOjP3YhTVYjOJNUp8rFRbq2VXkDiV8JDhwUVgHf3x0vqpcbUWnqddZV mBg35VUAPKn4Y1UboJvtZe9Z7ojALzaprUhYJUSlbCEcSKYAOiPrX7mYzOS8O/93U5t2 2UwVCgfKr2IHHSnNL3lxx8Fh4+/S2YSpy1A7XCjUAjkxAsy3hiC05FYfFzizNNMzg3Ve rrTvwrtDo4wtwMqPRBTMkBjKvVLMsrPcxdBubtNPHO+PndnchHrONWtxmggrQB6tYv3t 1IoA== 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 o6si2946708pgv.273.2019.07.12.02.24.42; Fri, 12 Jul 2019 02:24:42 -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 S1726565AbfGLJYl (ORCPT + 29 others); Fri, 12 Jul 2019 05:24:41 -0400 Received: from mout.kundenserver.de ([212.227.17.13]:56443 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725987AbfGLJYk (ORCPT ); Fri, 12 Jul 2019 05:24:40 -0400 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue106 [212.227.15.145]) with ESMTPA (Nemesis) id 1MIxmm-1i1l0j3BPe-00KR95; Fri, 12 Jul 2019 11:24:27 +0200 From: Arnd Bergmann To: Sudeep Dutt , Ashutosh Dixit , Arnd Bergmann , Greg Kroah-Hartman Cc: Nikhil Rao , Thomas Gleixner , Alexios Zavras , linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com Subject: [PATCH] [v2] mic: avoid statically declaring a 'struct device'. Date: Fri, 12 Jul 2019 11:24:09 +0200 Message-Id: <20190712092426.872625-1-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 MIME-Version: 1.0 X-Provags-ID: V03:K1:EuvXqnFGFjdghSadGobgGnRW8OVHsQcwopkyBTTZGK0M8siqV5r GBadM6TdG+Ikwl5jKKS9BqU4PF/3TvVPYK7g8LLIDHe4QrLZ+JDyMaLHG8qsms77fwvmIGN aqvJfLFsr5QiqhApXR72zZI10YEwHqsP9+DeeYLlZmv5cTkBBf73B2ydjlT6bgNepPvcwii GefwYTendCWonJHrs57DQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:9NBLRQvWpVQ=:g9QYcjamZlftSZOiSUV/w1 2SREH8DtKk2xDZOgMU3i31DHxGrZmL+emc1Hpet88qTLmAXtB8wn+0G8TnPNB/PR4pgiMFkxI 7uNsVr0wTeBOMXuYqY8nHiRe39UP0HSukM897vYGAdPGy7XQDbhUZ3vAwHVeJyuVEEVIFI5TG 7y3r7PqgSM0MBO0XIyNx0DU4ZrR7rN+HjULVrqX3yJPfFTaYHf9DU9VvLaFlGZ3gdpG1LlPip V7yHJY2uaFu8VADZcmHlVU6TlcGk38q6+u3jW6l5ODCYhLb3Py1ViaXboGqhWO5UWhfvtwHXx FfkVUDys9zkFSDUVcyAsflgsqWdqqksxcijn4rhGgLlpcWaNiGR0hh/Ae4bvXCIPL6cLQDeM1 PfFNPYvmdbEJwghfuB5mPuwUVzAVS6x1UYlyjIOxfSvRF4DGJJRbuXl9M0WHf0E+haAJUk0Fp 6hcUfnr/6+Sq8F8Uil7jtfBe8QKEa6BnDZjYui0O8+RENH8QknMCsYRF6w5IpKrZPSCpE3KiU wz4HrzR04R7bOcXeQ3/zfJbPXCA7es4w2zpn3+3AtItsnUjsG0h35cY4BSBBIYAXYDwpRpOdF xivus5pYbhWwKb0c/MVqovUvtn9X2/YcsFIEvZaYPTzjXOmT2vj/TqoU9PycdlKcAXWVYb2uQ zMT9BK6CVJFVZmBN8ctsZR3XZBxlqJ3Xe6TRpVLMypHpgizQMkA/Uznh+fVdvP/AT/73CR2N/ f+xW+hBQEBdW44Av+tNUPFxq1oKE8jl2osiTVA== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Generally, declaring a platform device as a static variable is a bad idea and can cause all kinds of problems, in particular with the DMA configuration and lifetime rules. A specific problem we hit here is from a bug in clang that warns about certain (otherwise valid) macros when used in static variables: drivers/misc/mic/card/mic_x100.c:285:27: warning: shift count >= width of type [-Wshift-count-overflow] static u64 mic_dma_mask = DMA_BIT_MASK(64); ^~~~~~~~~~~~~~~~ include/linux/dma-mapping.h:141:54: note: expanded from macro 'DMA_BIT_MASK' #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1)) ^ ~~~ A slightly better way here is to create the platform device dynamically and set the dma mask in the probe function. This avoids the warning and some other problems, but is still not ideal because the device creation should really be separated from the driver, and the fact that the device has no parent means we have to force the dma mask rather than having it set up from the bus that the device is actually on. Fixes: dd8d8d44df64 ("misc: mic: MIC card driver specific changes to enable SCIF") Signed-off-by: Arnd Bergmann --- v2: rewrite to use platform_device_register_simple() and make it actually build Please merge after -rc1 is out. --- drivers/misc/mic/card/mic_x100.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) -- 2.20.0 diff --git a/drivers/misc/mic/card/mic_x100.c b/drivers/misc/mic/card/mic_x100.c index 266ffb6f6c44..c8bff2916d3d 100644 --- a/drivers/misc/mic/card/mic_x100.c +++ b/drivers/misc/mic/card/mic_x100.c @@ -237,6 +237,9 @@ static int __init mic_probe(struct platform_device *pdev) mdrv->dev = &pdev->dev; snprintf(mdrv->name, sizeof(mic_driver_name), mic_driver_name); + /* FIXME: use dma_set_mask_and_coherent() and check result */ + dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)); + mdev->mmio.pa = MIC_X100_MMIO_BASE; mdev->mmio.len = MIC_X100_MMIO_LEN; mdev->mmio.va = devm_ioremap(&pdev->dev, MIC_X100_MMIO_BASE, @@ -282,18 +285,6 @@ static void mic_platform_shutdown(struct platform_device *pdev) mic_remove(pdev); } -static u64 mic_dma_mask = DMA_BIT_MASK(64); - -static struct platform_device mic_platform_dev = { - .name = mic_driver_name, - .id = 0, - .num_resources = 0, - .dev = { - .dma_mask = &mic_dma_mask, - .coherent_dma_mask = DMA_BIT_MASK(64), - }, -}; - static struct platform_driver __refdata mic_platform_driver = { .probe = mic_probe, .remove = mic_remove, @@ -303,6 +294,8 @@ static struct platform_driver __refdata mic_platform_driver = { }, }; +static struct platform_device *mic_platform_dev; + static int __init mic_init(void) { int ret; @@ -316,9 +309,12 @@ static int __init mic_init(void) request_module("mic_x100_dma"); mic_init_card_debugfs(); - ret = platform_device_register(&mic_platform_dev); + + mic_platform_dev = platform_device_register_simple(mic_driver_name, + 0, NULL, 0); + ret = PTR_ERR_OR_ZERO(mic_platform_dev); if (ret) { - pr_err("platform_device_register ret %d\n", ret); + pr_err("platform_device_register_full ret %d\n", ret); goto cleanup_debugfs; } ret = platform_driver_register(&mic_platform_driver); @@ -329,7 +325,7 @@ static int __init mic_init(void) return ret; device_unregister: - platform_device_unregister(&mic_platform_dev); + platform_device_unregister(mic_platform_dev); cleanup_debugfs: mic_exit_card_debugfs(); done: @@ -339,7 +335,7 @@ static int __init mic_init(void) static void __exit mic_exit(void) { platform_driver_unregister(&mic_platform_driver); - platform_device_unregister(&mic_platform_dev); + platform_device_unregister(mic_platform_dev); mic_exit_card_debugfs(); }