From patchwork Thu Dec 17 19:53:54 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= X-Patchwork-Id: 7876851 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 709F8BEEE5 for ; Thu, 17 Dec 2015 19:54:13 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 8EADE20426 for ; Thu, 17 Dec 2015 19:54:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A3B6D2041D for ; Thu, 17 Dec 2015 19:54:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932296AbbLQTyJ (ORCPT ); Thu, 17 Dec 2015 14:54:09 -0500 Received: from mail-lb0-f176.google.com ([209.85.217.176]:32823 "EHLO mail-lb0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754824AbbLQTyH (ORCPT ); Thu, 17 Dec 2015 14:54:07 -0500 Received: by mail-lb0-f176.google.com with SMTP id kw15so51896012lbb.0 for ; Thu, 17 Dec 2015 11:54:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:mime-version:content-type :content-transfer-encoding; bh=d0zJRqfY2w/7F7yF0ojo6RwhYfTQruJHWfb88YUGORY=; b=Z2LLEt6uash3eB3f4ZRelu7CU+tNKgjnRuz1VrpV1S2n0Bn4FFJyufRkleTtZUtjTs NibY0s9w9GhReU+OM8w4sm2W7EX3HbQRpd6KDlAT/vt5VTqX94kklSbzilXN/l/JEdQJ nbOL7poQ6xVjMUQqPbtFMXZErMuTV150ybXg5h4UnTeLtNtY5TAynETzKJ0/MmC71DuT kRy3y34J8wPVOQk0icgRW1PeUqFDFxGNfqXGUehp7yMDDpEgRfVjAaQw4GYPViJGrOLP +J/ZhjbFA6Q6FOMlevLNfRc400HXjI37c4+H6vAoq62mNnoJyhzGCFQUBi+pzQfFas2m PAGw== X-Received: by 10.112.236.67 with SMTP id us3mr22383709lbc.64.1450382045816; Thu, 17 Dec 2015 11:54:05 -0800 (PST) Received: from linux-samsung.lan (ip-194-187-74-233.konfederacka.maverick.com.pl. [194.187.74.233]) by smtp.gmail.com with ESMTPSA id l138sm2180402lfe.47.2015.12.17.11.54.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 17 Dec 2015 11:54:05 -0800 (PST) From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= To: Kalle Valo , linux-wireless@vger.kernel.org Cc: Hauke Mehrtens , =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Subject: [PATCH] bcma: use module_init for the main part of bus initialization Date: Thu, 17 Dec 2015 20:53:54 +0100 Message-Id: <1450382034-3976-1-git-send-email-zajec5@gmail.com> X-Mailer: git-send-email 1.8.4.5 MIME-Version: 1.0 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP So far we were using fs_initcall. It was (and still is) needed because struct bus_type has to be registered early. However main bus initialization has to happen later as it requires SPROM which depends on NVRAM which depends on mtd. Solve it by using fs_initcall only for bus_register call and module_init for the rest. It affects bcma only when built-in obviously. This was tested with BCM4706 and BCM5357C0 (BCM47XX), BCM4708A0 (ARCH_BCM_5301X) and BCM43225 (PCIe card with bcma as module). Signed-off-by: Rafa? Mi?ecki --- This change was already suggested in RFC patch early this year: https://patchwork.kernel.org/patch/5802611/ Noone objected / got any better idea, so I'm sending a final version. V1 (from RFC): * Use int bcma_bus_registered to avoid #ifdef MODULE and make code simpler. * Document reason for this behavior better. --- drivers/bcma/main.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c index 59d8d0d..c466f75 100644 --- a/drivers/bcma/main.c +++ b/drivers/bcma/main.c @@ -668,11 +668,36 @@ static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env) core->id.rev, core->id.class); } -static int __init bcma_modinit(void) +static unsigned int bcma_bus_registered; + +/* + * If built-in, bus has to be registered early, before any driver calls + * bcma_driver_register. + * Otherwise registering driver would trigger BUG in driver_register. + */ +static int __init bcma_init_bus_register(void) { int err; + if (bcma_bus_registered) + return 0; + err = bus_register(&bcma_bus_type); + if (!err) + bcma_bus_registered = 1; + + return err; +} +#ifndef MODULE +fs_initcall(bcma_init_bus_register); +#endif + +/* Main initialization has to be done with SPI/mtd/NAND/SPROM available */ +static int __init bcma_modinit(void) +{ + int err; + + err = bcma_init_bus_register(); if (err) return err; @@ -691,7 +716,7 @@ static int __init bcma_modinit(void) return err; } -fs_initcall(bcma_modinit); +module_init(bcma_modinit); static void __exit bcma_modexit(void) {