From patchwork Fri Jul 18 09:31:30 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Lothar_Wa=C3=9Fmann?= X-Patchwork-Id: 4581721 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 06C5FC0514 for ; Fri, 18 Jul 2014 09:36:06 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 4D041201D3 for ; Fri, 18 Jul 2014 09:36:02 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7E66D20120 for ; Fri, 18 Jul 2014 09:35:58 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1X84Y7-0002qk-Ha; Fri, 18 Jul 2014 09:33:55 +0000 Received: from mail.karo-electronics.de ([81.173.242.67]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1X84Wk-0001JI-QB for linux-arm-kernel@lists.infradead.org; Fri, 18 Jul 2014 09:32:36 +0000 From: =?UTF-8?q?Lothar=20Wa=C3=9Fmann?= To: Felipe Balbi , Greg Kroah-Hartman , , , Ezequiel Garcia , George Cherian , , Roger Quadros Subject: [PATCH 9/9] usb: musb: musb_am335x: reinstate module loading/unloading support Date: Fri, 18 Jul 2014 11:31:30 +0200 Message-Id: <1405675890-8802-10-git-send-email-LW@KARO-electronics.de> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1405675890-8802-9-git-send-email-LW@KARO-electronics.de> References: <1405675890-8802-1-git-send-email-LW@KARO-electronics.de> <1405675890-8802-2-git-send-email-LW@KARO-electronics.de> <1405675890-8802-3-git-send-email-LW@KARO-electronics.de> <1405675890-8802-4-git-send-email-LW@KARO-electronics.de> <1405675890-8802-5-git-send-email-LW@KARO-electronics.de> <1405675890-8802-6-git-send-email-LW@KARO-electronics.de> <1405675890-8802-7-git-send-email-LW@KARO-electronics.de> <1405675890-8802-8-git-send-email-LW@KARO-electronics.de> <1405675890-8802-9-git-send-email-LW@KARO-electronics.de> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20140718_023231_090099_EF38B90A X-CRM114-Status: GOOD ( 11.35 ) X-Spam-Score: -0.7 (/) Cc: =?UTF-8?q?Lothar=20Wa=C3=9Fmann?= X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable 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 There is no need to throw the baby out with the bath due to a bad failure analysis. The commit: 7adb5c876e9c usb: musb: Fix panic upon musb_am335x module removal came to a wrong conclusion about the cause of the crash it was "fixing". The real culprit was the phy-am335x module that was removed from underneath its users that were still referencing data from it. After having fixed this in a previous patch, module unloading can be reinstated. Another bug with module loading/unloading was the fact, that after removing the devices instantiated from DT their 'OF_POPULATED' flag was still set, so that re-loading the module after an unload had no effect. This is also fixed in this patch. Signed-off-by: Lothar Waßmann --- drivers/usb/musb/musb_am335x.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/usb/musb/musb_am335x.c b/drivers/usb/musb/musb_am335x.c index 164c868..152a6f5 100644 --- a/drivers/usb/musb/musb_am335x.c +++ b/drivers/usb/musb/musb_am335x.c @@ -19,6 +19,22 @@ err: return ret; } +static int of_remove_populated_child(struct device *dev, void *d) +{ + struct platform_device *pdev = to_platform_device(dev); + + of_device_unregister(pdev); + of_node_clear_flag(pdev->dev.of_node, OF_POPULATED); + return 0; +} + +static int am335x_child_remove(struct platform_device *pdev) +{ + device_for_each_child(&pdev->dev, NULL, of_remove_populated_child); + pm_runtime_disable(&pdev->dev); + return 0; +} + static const struct of_device_id am335x_child_of_match[] = { { .compatible = "ti,am33xx-usb" }, { } @@ -27,17 +43,14 @@ MODULE_DEVICE_TABLE(of, am335x_child_of_match); static struct platform_driver am335x_child_driver = { .probe = am335x_child_probe, + .remove = am335x_child_remove, .driver = { .name = "am335x-usb-childs", .of_match_table = am335x_child_of_match, }, }; -static int __init am335x_child_init(void) -{ - return platform_driver_register(&am335x_child_driver); -} -module_init(am335x_child_init); +module_platform_driver(am335x_child_driver); MODULE_DESCRIPTION("AM33xx child devices"); MODULE_LICENSE("GPL v2");