From patchwork Mon Sep 13 08:30:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?SsOpcsO0bWUgUG91aWxsZXI=?= X-Patchwork-Id: 510250 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 369AFC433FE for ; Mon, 13 Sep 2021 08:34:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 139FD60FBF for ; Mon, 13 Sep 2021 08:34:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238760AbhIMIfc (ORCPT ); Mon, 13 Sep 2021 04:35:32 -0400 Received: from mail-mw2nam12on2084.outbound.protection.outlook.com ([40.107.244.84]:62366 "EHLO NAM12-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S238678AbhIMIes (ORCPT ); Mon, 13 Sep 2021 04:34:48 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ENfmKONPZBu55mzzdTe74ooYvuk7AG3LqN4tSoFcxXc+0sxDCoINWGHl6/6ah1DamLb4aczTEbvoxf94nxro/0EOw3blz4GBOTCt8gDESaooZ6mz1lZsiYdqFqZLc1hWS8J0hAx0pfclfr2m5+sN+IvsHImLkmGtLKyTUzcv7TPSpt/tUl29TI9hSSHQ1XIiTi0MBaqCcXMx0x69X0cHe0H2hmAW1KSWuGc0xynQ8WttuaZXCejV/or1uOOC6GYHZdQnxwLk8dnHTvXk3GIWOntNQJxjNFqM4M6DBPUDVAXOE2D9p06FtBexiLftbPg6hP0iZb47I9+g8AvkT6ozAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=JAmRoT+yqJyVJqFuWU287ozQKOUwlLHdKHeabfJ8CtE=; b=F3JzMzASmEuT9eHa/L5VoG0qsqc5YjbV10qZ+yjgjQAgoXDRJJ6oNs/bPy4LNl+Vy9w4kYgtB8f1/BKS14rQB9yhmGNHnE8GGNaY2PYxvjAvYPuCV/0YBsOG8qtj597URfdYmQbG6etWh6kUc13zcMxeaAh9rfZLL7x+JtciOA1q6mU5q23o535L9MAJY/vpi4p1h+rYrnztbkXd00dphZmUuKKvlg8KnrRV+8VLxEBiY0Q7nWdd/9cBfHOSGlP7NvNSlDDvSsvJrDUmtfjSsgcUFah3cUro2iy7HlkjTfVeUN/OFmbkkUVsfzDyaaGaDlFbagInjWmUTDrIqjt1Kw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JAmRoT+yqJyVJqFuWU287ozQKOUwlLHdKHeabfJ8CtE=; b=khjoKvghstSIj42tkSR2nW4tA0YmcwEHiWYCoXAKRgnMEzB8KPKrLys4nhaH/JmDXN73o3Hqq0Dq+xgcZfQ4dPCkCnl5WnrH10z5J5Xe/5MYaM0v87cGVNZ/zLGHphdWr7C7IX0l/4P0Yuf8fjDWUD71SfNqC8m/PmX/jSrJq4U= Authentication-Results: driverdev.osuosl.org; dkim=none (message not signed) header.d=none; driverdev.osuosl.org; dmarc=none action=none header.from=silabs.com; Received: from SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) by SN6PR11MB2717.namprd11.prod.outlook.com (2603:10b6:805:60::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4500.16; Mon, 13 Sep 2021 08:32:32 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::7050:a0a:415:2ccd]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::7050:a0a:415:2ccd%7]) with mapi id 15.20.4500.017; Mon, 13 Sep 2021 08:32:32 +0000 From: Jerome Pouiller To: devel@driverdev.osuosl.org, linux-wireless@vger.kernel.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , =?utf-8?b?SsOpcsO0bWUgUG91aWxsZXI=?= Subject: [PATCH v2 32/33] staging: wfx: ensure IRQ is ready before enabling it Date: Mon, 13 Sep 2021 10:30:44 +0200 Message-Id: <20210913083045.1881321-33-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210913083045.1881321-1-Jerome.Pouiller@silabs.com> References: <20210913083045.1881321-1-Jerome.Pouiller@silabs.com> X-ClientProxiedBy: PAZP264CA0067.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:1fd::10) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 Received: from pc-42.silabs.com (37.71.187.125) by PAZP264CA0067.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:1fd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4500.14 via Frontend Transport; Mon, 13 Sep 2021 08:32:00 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8363654b-1e33-49d1-6c37-08d97690f5c3 X-MS-TrafficTypeDiagnostic: SN6PR11MB2717: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2582; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mbDcXuRDLE64NzRCBXjXgcuqbpz4HbpYfT1ggagFWwcXk83dSNaJ6h6QlveFbx/LNqjE6pHAdjV+MbGz18wHRFAwFyNxWUV+w6q4lAkMQf1il2VVG/RxZmtU2zpfZOwe/VYmRsCwu5Ncbpnt6UPfhU2aJ+lwlelJBvaTsPfyNiIiTdx3G69plpvFR6F48Pbdzt6qzTPxw2R56DKJllOth12CtoyGqmiTQyxqLEOt4GMNld+1igGwMbFlXPj3nsCzZGQZlAk2nJFVk3WYKed/3uGqAjz4FXwvEZ27rCKe9X/GBtw+ItSFWVfVKaaZesjr9JkZ1w2e6ac1vc52SbSCKTOD5pLXOz4mmGiHFcogHgDOeDcdCwi/XYmETWhBoSfaSeKluIjWzTsda+W1/3JDjtFlEWxZ4Dpu56rqPnAUUCkpsGDQiVnaunYTeBji/Lf67EfqsYZhmS1ucTkHZA/XZqL90KMN0Nw9rzT5BzOpK1xQYCvqkrTSh6wGfEx/jWQkl/hI3zRODHOz6Ep3bm2KBcyVC5Od1B2JT1KKm6iqeTYfq7AkwwEO8dc5LoIPxwG/j4xRgZyTjfY/JkGmEIOR102iw8OXPev+RvYnNLsMEAmSlHake0bc9hUWZqHjj73NZ2MfgCGb6Je4vAiSPkUFqG+GZ9UVcc7hZyAwyPLgD1uBE3MZeOEQwAtu8C0tUTP+l9/XelpPiG65vQJJ3CQVfQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR11MB2718.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(4326008)(2906002)(107886003)(26005)(66946007)(38100700002)(52116002)(7696005)(1076003)(956004)(36756003)(316002)(8676002)(38350700002)(186003)(8936002)(83380400001)(54906003)(66556008)(66476007)(508600001)(6486002)(5660300002)(45080400002)(6666004)(86362001)(2616005)(66574015); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?fvCShd6ZZOqgO2x924Bs88pme?= =?utf-8?q?3FkLXfPHjII/0c92bopgWVt9ifrrkxA1Q/5wA9THhGYtNiEqaeORxLiB?= =?utf-8?q?QeORWtQYXSpXJPnPXqR3pt+rP3wHa62vxAaXhwAlYrA7Nhmza/qPfY6w?= =?utf-8?q?5kDEokhvkRe1vtszuv2UuEEMhq2t+832ROCHXyKNGLDOYC/RmTqWwThp?= =?utf-8?q?pzGbD8KCQRAwAd9SnLDFY/Ol2qNqdKLv8cY6H/1gz2rvjmzy2ExCm9P/?= =?utf-8?q?zcapjzjF9DJUtf5SU2yslhxZNjberQGJZ/HmuGVimq4H1vD0dbygTS8A?= =?utf-8?q?JyZOJNEeqmaFRH9PArusTVNtfE9YZ454tPuK5AV9+WKApOIgdNVIyl2z?= =?utf-8?q?nduS0t61QD4KAhGztw8mHXx2PiXZWAInb6OP+V5AAzCwLElpUGwrUfCq?= =?utf-8?q?FE4HUUVBzCr+GYBFTbP/k+8wVEM+n9SdQ9zj4F8/Czqu0qrltoS9C5z8?= =?utf-8?q?x47UTE3InYwDiY8xKB0ORQ7CC/T1iZj9Gej47qhGIfQjORQpOJ0GPJP0?= =?utf-8?q?mgYFc2MQRUaFCUolZWklfzVhieXjawlG9ttla6+FYhV2qgRjnBFtI3Dc?= =?utf-8?q?AW/qVsfNNNxRJ+qClI/iZum7mcstw2pLioU8h1MyK9XUyn6KIsGnZPt5?= =?utf-8?q?94I3db5rbseIYb14AmgigOrnqQTTsfOlkXSFEDecMnRwhF5UoFFGMZ9w?= =?utf-8?q?TnREeDgw3PSqYriwV+sO+OMsbZAf1FTUXfRUaj0wrUDNhAiUVxsf90JH?= =?utf-8?q?vQBBUqt+hC9FNuuCRAFGJXTkKNedUf69ZmH8Yw/DU1r8m7K84EpnHA0W?= =?utf-8?q?QQDKFQmRCxrS+973gxwd7rvZn5xIHS6kyIMwR/lyrY4fiJJPRVrrgCci?= =?utf-8?q?Pz9Glr19iPJX17c8UN1F6i6kFOaV39c+SJNxhs4F7CWZ8GczKd18Ctnc?= =?utf-8?q?tOFplFJrGlkkXOvjqTFZrkMCvoJqpy6xx5fehhGBTtIFM0KBq/6hLLCV?= =?utf-8?q?eGUZBisNTp9ilDJFZZP3HgNX9rmCu6NftXUF6vqli78CnZFXGV/K1YS1?= =?utf-8?q?DmU68zwmge8O73uEmAyPRaf3mdE4bR+tclJzrn9XHR4ZhGkvAysjUW5x?= =?utf-8?q?PcYjdBbueXVQm+IDdEHSxDZ+WVueFm2fsVfe8flyirdQSBscj4RR4GOo?= =?utf-8?q?1IaRIqIQ03HyUQbIvMZWHe73JFYrAcMb2d31ZRqyLf92V+u86Hx309hL?= =?utf-8?q?IWnPXXn7SI2+7QPOBcs/l4+cQ2aePo+YAq7IRQ0g2iwUiVb3oV+TKOkl?= =?utf-8?q?ps1UR5Xj6uxALSUo9Ns1tKu/7KRLmkfMW1KZ7lcq3w4+PRMGQMtsA3Ud?= =?utf-8?q?8T6on7p3STJjCACojxYE9XlxVly/9Tx?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8363654b-1e33-49d1-6c37-08d97690f5c3 X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Sep 2021 08:32:02.2367 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8klp4O9AFot+eNfoPFOO1kPpH3IGSEEz5YRatSiT9PAUTJBkYBfe3QiffVVOGaBc8qXB33POea1ki8Xi7s/SpQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB2717 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Jérôme Pouiller Since commit 5561770f80b1 ("staging: wfx: repair external IRQ for SDIO"), wfx_sdio_irq_subscribe() enforce the device to use IRQs. However, there is currently a race in this code. An IRQ may happen before the IRQ has been registered. The problem has observed during debug session when the device crashes before the IRQ set up: [ 1.546] wfx-sdio mmc0:0001:1: started firmware 3.12.2 "WF200_ASIC_WFM_(Jenkins)_FW3.12.2" (API: 3.7, keyset: C0, caps: 0x00000002) [ 2.559] wfx-sdio mmc0:0001:1: time out while polling control register [ 3.565] wfx-sdio mmc0:0001:1: chip is abnormally long to answer [ 6.563] wfx-sdio mmc0:0001:1: chip did not answer [ 6.568] wfx-sdio mmc0:0001:1: hardware request CONFIGURATION (0x09) on vif 2 returned error -110 [ 6.577] wfx-sdio mmc0:0001:1: PDS bytes 0 to 12: chip didn't reply (corrupted file?) [ 6.585] Unable to handle kernel NULL pointer dereference at virtual address 00000000 [ 6.592] pgd = c0004000 [ 6.595] [00000000] *pgd=00000000 [ 6.598] Internal error: Oops - BUG: 17 [#1] THUMB2 [ 6.603] Modules linked in: [ 6.606] CPU: 0 PID: 23 Comm: kworker/u2:1 Not tainted 3.18.19 #78 [ 6.612] Workqueue: kmmcd mmc_rescan [ 6.616] task: c176d100 ti: c0e50000 task.ti: c0e50000 [ 6.621] PC is at wake_up_process+0xa/0x14 [ 6.625] LR is at sdio_irq+0x61/0x250 [ 6.629] pc : [] lr : [] psr: 600001b3 [ 6.629] sp : c0e51bd8 ip : c0e51cc8 fp : 00000001 [ 6.640] r10: 00000003 r9 : 00000000 r8 : c0003c34 [ 6.644] r7 : c0e51bd8 r6 : c0003c30 r5 : 00000001 r4 : c0e78c00 [ 6.651] r3 : 00000000 r2 : 00000000 r1 : 00000003 r0 : 00000000 [ 6.657] Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA Thumb Segment kernel [ 6.664] Control: 50c53c7d Table: 11fd8059 DAC: 00000015 [ 6.670] Process kworker/u2:1 (pid: 23, stack limit = 0xc0e501b0) [ 6.676] Stack: (0xc0e51bd8 to 0xc0e52000) [...] [ 6.949] [] (wake_up_process) from [] (sdio_irq+0x61/0x250) [ 6.956] [] (sdio_irq) from [] (handle_irq_event_percpu+0x17/0x92) [ 6.964] [] (handle_irq_event_percpu) from [] (handle_irq_event+0x1b/0x24) [ 6.973] [] (handle_irq_event) from [] (handle_level_irq+0x5d/0x76) [ 6.981] [] (handle_level_irq) from [] (generic_handle_irq+0x13/0x1c) [ 6.989] [] (generic_handle_irq) from [] (__handle_domain_irq+0x31/0x48) [ 6.997] [] (__handle_domain_irq) from [] (ov_handle_irq+0x31/0xe0) [ 7.005] [] (ov_handle_irq) from [] (__irq_svc+0x3b/0x5c) [ 7.013] Exception stack(0xc0e51c68 to 0xc0e51cb0) [...] [ 7.038] [] (__irq_svc) from [] (wait_for_common+0x9e/0xc4) [ 7.045] [] (wait_for_common) from [] (mmc_wait_for_req+0x4b/0xdc) [ 7.053] [] (mmc_wait_for_req) from [] (mmc_wait_for_cmd+0x2f/0x34) [ 7.061] [] (mmc_wait_for_cmd) from [] (mmc_io_rw_direct_host+0x71/0xac) [ 7.070] [] (mmc_io_rw_direct_host) from [] (sdio_claim_irq+0x6b/0x116) [ 7.078] [] (sdio_claim_irq) from [] (wfx_sdio_irq_subscribe+0x19/0x94) [ 7.086] [] (wfx_sdio_irq_subscribe) from [] (wfx_probe+0x189/0x2ac) [ 7.095] [] (wfx_probe) from [] (wfx_sdio_probe+0x8f/0xcc) [ 7.102] [] (wfx_sdio_probe) from [] (sdio_bus_probe+0x5f/0xa8) [ 7.109] [] (sdio_bus_probe) from [] (driver_probe_device+0x59/0x134) [ 7.118] [] (driver_probe_device) from [] (bus_for_each_drv+0x3f/0x4a) [ 7.126] [] (bus_for_each_drv) from [] (device_attach+0x3b/0x52) [ 7.134] [] (device_attach) from [] (bus_probe_device+0x17/0x4c) [ 7.141] [] (bus_probe_device) from [] (device_add+0x2c5/0x334) [ 7.149] [] (device_add) from [] (sdio_add_func+0x23/0x44) [ 7.156] [] (sdio_add_func) from [] (mmc_attach_sdio+0x187/0x1ec) [ 7.164] [] (mmc_attach_sdio) from [] (mmc_rescan+0x18d/0x1fc) [ 7.172] [] (mmc_rescan) from [] (process_one_work+0xd7/0x170) [ 7.179] [] (process_one_work) from [] (worker_thread+0x103/0x1bc) [ 7.187] [] (worker_thread) from [] (kthread+0x7d/0x90) [ 7.194] [] (kthread) from [] (ret_from_fork+0x11/0x30) [ 7.201] Code: 2103 b580 2200 af00 (681b) 46bd [ 7.206] ---[ end trace 3ab50aced42eedb4 ]--- Signed-off-by: Jérôme Pouiller --- drivers/staging/wfx/bus_sdio.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/drivers/staging/wfx/bus_sdio.c b/drivers/staging/wfx/bus_sdio.c index eb70bef6bd6e..a670176ba06f 100644 --- a/drivers/staging/wfx/bus_sdio.c +++ b/drivers/staging/wfx/bus_sdio.c @@ -120,19 +120,22 @@ static int wfx_sdio_irq_subscribe(void *priv) return ret; } - sdio_claim_host(bus->func); - cccr = sdio_f0_readb(bus->func, SDIO_CCCR_IENx, NULL); - cccr |= BIT(0); - cccr |= BIT(bus->func->num); - sdio_f0_writeb(bus->func, cccr, SDIO_CCCR_IENx, NULL); - sdio_release_host(bus->func); flags = irq_get_trigger_type(bus->of_irq); if (!flags) flags = IRQF_TRIGGER_HIGH; flags |= IRQF_ONESHOT; - return devm_request_threaded_irq(&bus->func->dev, bus->of_irq, NULL, - wfx_sdio_irq_handler_ext, flags, - "wfx", bus); + ret = devm_request_threaded_irq(&bus->func->dev, bus->of_irq, NULL, + wfx_sdio_irq_handler_ext, flags, + "wfx", bus); + if (ret) + return ret; + sdio_claim_host(bus->func); + cccr = sdio_f0_readb(bus->func, SDIO_CCCR_IENx, NULL); + cccr |= BIT(0); + cccr |= BIT(bus->func->num); + sdio_f0_writeb(bus->func, cccr, SDIO_CCCR_IENx, NULL); + sdio_release_host(bus->func); + return 0; } static int wfx_sdio_irq_unsubscribe(void *priv)