Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp8391785ybl; Thu, 16 Jan 2020 15:58:13 -0800 (PST) X-Google-Smtp-Source: APXvYqyz0G9VKWBhmpkHH7aTNMZLA3iaevCc6qER2NVGNELGP0Bp9aeGi8cfY/+ZwUZ3/JHujDcn X-Received: by 2002:aca:815:: with SMTP id 21mr1456017oii.52.1579219093540; Thu, 16 Jan 2020 15:58:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579219093; cv=none; d=google.com; s=arc-20160816; b=cltw2lnn/2rK065EByjQRxxVoP8TlvR0J9rL7ELiNw01ydzBdycLLuzJlyvggiCybH jq9WtQmczV0NcZCOgONsa5tOWoWqzAuXdu0a77Y0ynCrf8PD49N+CxszemECQoPo63hM NzVwdR+frh/cizHM1JihwTmzjS3HUwUTrPDUlTJvbtP247O8o/EGlb8EG6lIeL8vnEBF 7xp8FN15X8vIi2nHDrdSqX9Grj87QdwdSk3HPfPeoFVNIX22dcfO4DxVINCqg/jljBuR wBq/W71o0VV9myDQM1CWT/83mDUfcPWwDnmlmRs2IwKGdcOjiKN27nnjAcwwCgnEYWta XnrQ== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=fg77dg9SF3zAKeqm5ePrQDANb0RBwxXZZVSKA+URPO4=; b=bGlEeHXGevQZo79HW0k/44WLMT2Xmsyn8SdxrMQPYcd4ktugx3Re3NuuxX9I6jP+fk yToLbaJqew6mG2752zkJ2DTTO3N8OVfwIMk6Z4CFNVhL8sCZmThfCQBgnDrvEPFx6XZ5 isTkoQkHPjV6qN5/n48nkk021AOXkwnQOC9RktsMg8+TmE1a9Jps84TrA0+5g5R6jCIH b+nWwfndtd3cpFY0/5BejoDXMjY+hxZxzAFKL/JnYePkNquzmjFPGC9xw9BuBxTwT+Cw 8Tei6SZtNd7uUzHPBPIawHjHYEJLrofcgHdpxzHtow0Lh0xJ1xSmuUAphaT1EzJj1TO+ PkzQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=PshMJ7cP; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v25si14314181otn.125.2020.01.16.15.58.01; Thu, 16 Jan 2020 15:58:13 -0800 (PST) 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; dkim=pass header.i=@kernel.org header.s=default header.b=PshMJ7cP; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2394897AbgAPSFq (ORCPT + 99 others); Thu, 16 Jan 2020 13:05:46 -0500 Received: from mail.kernel.org ([198.145.29.99]:56550 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2393543AbgAPRjw (ORCPT ); Thu, 16 Jan 2020 12:39:52 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A2BE324721; Thu, 16 Jan 2020 17:39:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579196392; bh=aiSaP5lUXFc8+CWZRQ6GqqhVxMN+V6cg5bnGo3IhH30=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PshMJ7cP55Z88iammIhAldGkzOPSYriIgUyqRUs3POhUcALLEdtVyOhiZl/VeQZGe zdycj7/V5GOAKZG8cWuuANqn/FNf8ehwdoiL6PmOoQYkCdGUgzXa1OyJtXK5fywV/v mczDBUi5jxnF3N0CNArF6dHKfBBE++bEZJde/YLs= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Arnd Bergmann , Greg Kroah-Hartman , Sasha Levin , clang-built-linux@googlegroups.com Subject: [PATCH AUTOSEL 4.9 172/251] mic: avoid statically declaring a 'struct device'. Date: Thu, 16 Jan 2020 12:35:21 -0500 Message-Id: <20200116173641.22137-132-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200116173641.22137-1-sashal@kernel.org> References: <20200116173641.22137-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Arnd Bergmann [ Upstream commit bc83f79bd2119230888fb8574639d5a51b38f903 ] 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 Link: https://lore.kernel.org/r/20190712092426.872625-1-arnd@arndb.de Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/misc/mic/card/mic_x100.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/drivers/misc/mic/card/mic_x100.c b/drivers/misc/mic/card/mic_x100.c index b9f0710ffa6b..4007adc666f3 100644 --- a/drivers/misc/mic/card/mic_x100.c +++ b/drivers/misc/mic/card/mic_x100.c @@ -249,6 +249,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, @@ -294,18 +297,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, @@ -315,6 +306,8 @@ static struct platform_driver __refdata mic_platform_driver = { }, }; +static struct platform_device *mic_platform_dev; + static int __init mic_init(void) { int ret; @@ -328,9 +321,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); @@ -341,7 +337,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: @@ -351,7 +347,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(); } -- 2.20.1