From patchwork Mon Sep 13 13:02:03 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: 511480 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 6D376C433EF for ; Mon, 13 Sep 2021 13:07:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 56FE360E9B for ; Mon, 13 Sep 2021 13:07:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240529AbhIMNIW (ORCPT ); Mon, 13 Sep 2021 09:08:22 -0400 Received: from mail-dm6nam10on2076.outbound.protection.outlook.com ([40.107.93.76]:58976 "EHLO NAM10-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S236206AbhIMNGW (ORCPT ); Mon, 13 Sep 2021 09:06:22 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IYWstLBAS/ir6pw4+e3XufyRb0TbGi4GH+HqS+ffyqsWbmC/1csiGVtVZcndGBsrxXgDmsHIrrfGXW7d3SfSjrbZs8c6gdRdPIPs0Qg5i3Kza7iaf9dAlUZiq5XRJU2Z95RYjofirdhGo+6tSRbVlxU+g79htU3pnbhE70E5we45tXEvtHMok4RnusFi4FOb/Rl7CAmBOARlSEpv44K3cL+pkLh+P0ziXIMcxkVgwgV7dz3t8JZ+RO7uMJLep6lUlJeuYsQQjC0do84rHzH3947lWCX1tzsJxbRG3HRCfvQ7msJZZE0yOBXSkEEaUS8eRr0UFTzI1+JtbpJudnpemQ== 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=UZakWSIcSefVPvMipGXzXnlfk35noUDZth5fMmI/sjRAIz0XFa3xL8NmJA57J9OVBkV6/7qrRPMrhqc6RZ2KtfeIfrIkcLaMUU4mEJrsHDIceaozj7/fqmw9icUXQ0o0Inq79c2WyZo/VF638EFe8DqFqqZPmZ5KwuMBGk2fDpQ27R++Cn2ECJj1t/6dftD9ltCM0lKOkgJTxXHxI5CyNmOcvHpwbS8Fzyb7KMdQ6rBCi+boj6Iwqinq07c7TWJCG2mILoJn7xAGD4jiTYzJ7UZ4QjrARcMjwIKjRmN3SMXezf3KC1YTjv1fLgdr3/T2NWIQMPZwT7lEIjE08DvoYw== 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=k2wgvEYOL6LmF8Ow+Q0YK0rKRVNLOcnRVd+Egq1jAYAxV+nWAgxu9nGJpT6r5zatzLXZNYif1Ly0vFaRzRnIuOOdpvP7FCfeWuzJ1kFGqt1j+29MnbG6t6hzKV+Nxff+knixMjJAP4eLbrF9ur39tBdoUwZ7qtcqd4FdIu9kcuA= 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 SN6PR11MB3502.namprd11.prod.outlook.com (2603:10b6:805:da::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4500.14; Mon, 13 Sep 2021 13:03:17 +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 13:03:17 +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 v3 32/32] staging: wfx: ensure IRQ is ready before enabling it Date: Mon, 13 Sep 2021 15:02:03 +0200 Message-Id: <20210913130203.1903622-33-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210913130203.1903622-1-Jerome.Pouiller@silabs.com> References: <20210913130203.1903622-1-Jerome.Pouiller@silabs.com> X-ClientProxiedBy: PR2P264CA0021.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::33) 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 PR2P264CA0021.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::33) 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 13:03:15 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8a887f48-40ce-4089-887a-08d976b6da94 X-MS-TrafficTypeDiagnostic: SN6PR11MB3502: 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: RPI5Q5kS25OjCBLT6aPf7jy0QZEyAQb0aSeK+bJCu4OSrRRo1gto3ngKgUHg1F+2jVVBAWaJSQAcUc8PIbrx11lK8MBiC7mKFxau53cABCzkHpgaZ8gHIgXmBQ4XC1VgB8t2vH88jwMnO0+TfLUx1AioFClUatILn0vDQi1ieubl9kZAKlEIAp4T/GRKzkcAHmzMy2ECuUBjS1qW5n4gz/VJ3tOXn9dnRIBZw0GYH3wt5IUhmr/WSYJvcFIN+UeJXxqL+oyV9/dsA0oFePZ6T87XNGvDr18pGeaxbOhT6tjLgWR1sExqLTlm/zRZQwa93JTVjzMqm9stmtLEQ7LxjcRgtmJAxUHc1/XFVuzlQkwq4cZrwND95zXoIACHH5WbBn93e3gaFCLGnJ463Ccl8FKlc2QI8cPMxA5fgutL93Mm5fOTpkBM7SNmncDI1dlYJgt90jXDSnTwaIBa26uWt6wdKSTE42ALrgGOB9eNdmmjQb51WIkbTXlVJVRrbnZ0k0jZKGm0sJPJC1Of9H7a4uy0iv8kIWIFF+GusObdGH0fwEd1BLMhmFyveXcQJelVTb0XIqSHKjC6n+wm6QSp2jAuXHNdSOwk4vhqzpNqkCAKLQ2nJJZPLLCF1wRryJmwBzF7XOUP0JMYKZYoQZ/qDzvdE09a0A7TZqnMxAKErbKhsiROuWxYpUpBqIyAv6aRFGclHswm2FVCc3HYKi0hGA== 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:(39850400004)(136003)(396003)(376002)(346002)(366004)(6666004)(316002)(66476007)(8676002)(45080400002)(186003)(7696005)(52116002)(66946007)(26005)(4326008)(66556008)(2906002)(54906003)(107886003)(6486002)(2616005)(478600001)(1076003)(36756003)(5660300002)(66574015)(956004)(8936002)(86362001)(38100700002)(38350700002)(83380400001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?cgkUiUnuVkT9sZw7IRpHmaDOC?= =?utf-8?q?kUEUKUQkj6Kaj8AAyUN98Ae1WWChHa9SMENCERf0Xu0TApFdUPlYf/xs?= =?utf-8?q?bHfjokz05ZPJ1wkdbZKFqkc5kHVjgBveP8AD5A+2hmmY03l21pgxaeuL?= =?utf-8?q?3Cq35mCVvQ/EO7RQYlndyRpd53UirnkWV34ceowJ2OQlT2PZd0YsDX8o?= =?utf-8?q?aZiiXwiA4/PEpySgsE0Cr2b5ptXr716Zc5RwAyEutuH329519HxCEwZQ?= =?utf-8?q?Dj8WmNMSkwliPmLR2QyDirAXbyWkeM2ru8HZd1zKmma4wQJ2fGC9lzex?= =?utf-8?q?3yuijagOejtje63pqBcNmaxb9APlbG/yBAcC6ppix/LBOT0Yee4m+77b?= =?utf-8?q?tG1PK8H4cBJrl8WXHZzztkoJokngjKt9OUXHWvIH9ZycYCeAiT3fSlUg?= =?utf-8?q?n8BGHOf3UCKYnP2ckDu0JwmzGCKe8D0Do6t+rSvFczqUQV1QOm8qLGck?= =?utf-8?q?PpwWc4H0tpbuAhyiUa4ut5soWGhEDWmgi0N7/V4wZNGstKVj2rcAWsat?= =?utf-8?q?DOLEFpRVql/hvEPj4yHzz2PNPQKgmP167IyCX05oIuB2pS5Ddwq419u3?= =?utf-8?q?x0PTIuDFEeqB8jAZ8JUy9pc/fg/sl5o+itq3fLm/cXVGZRT/Sfu/3T0k?= =?utf-8?q?R1OPHFSV5HVivMPyfqx5AGcyD4/KgNjT91wIYEqPaXGQ5ALz7rPqumJW?= =?utf-8?q?Bg4vGZ2IQl3ZKtpAsWhTBTc3JRAcCgADJKwbGZPQW3oyWLA/W+b8DyUc?= =?utf-8?q?urThTi06CrogDzbh7OfHKK+DnKqr1rgjOimtuoYbHmfAbQ5OMkov+3Ch?= =?utf-8?q?QpOE7GXVMAuUR2yXfB1jg2cTGk2VBhFdDS58GwrFMOGThm5cxV0sbDTz?= =?utf-8?q?JfIeEyyWMpwDQqsGvai+qVdUujV1UB4uR8xPXPFgS0FiDA20P/+EALkZ?= =?utf-8?q?Jf5xEmCmf9H6HISBDllD+PiHZiyL1pcoccMfI+D/Z0ZtrJIaF2YZLkpF?= =?utf-8?q?bPMkXwMkpm0gKMbaQIAyBUW/pYiq0Wr0MrbOBqAYmwlIenC2VvhCY7aq?= =?utf-8?q?nOOYoP2utLoxuoJO5d6P3UKw3JCgFnN4F5RgQE8LCY4Y6Xtyvdk6Sftu?= =?utf-8?q?H6exSIhkRZ69O2O/HO8+GGb43p75zG4bR1bX9NAvcr3Rmg6mbDX4d7x5?= =?utf-8?q?8BMmgr4uGjF8vJgfXFu9B1bzhpCaln0Y50nLXe1t2SNyWdhD4HHOdTdW?= =?utf-8?q?BH+M0bcip+FhXHy70G0RkBSNKKFChnFLhqZVCCmrxmiDiwcBmsEwBVhy?= =?utf-8?q?A6aO3H6ok+kvuVwNkpMUy1nn4u8CUzJnAVh6YDRGBp0D+ISb8pOYG2mt?= =?utf-8?q?8GPLTZN/U9Iw1Es6ITJsD9VNFpRKF0Q?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8a887f48-40ce-4089-887a-08d976b6da94 X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Sep 2021 13:03:17.4107 (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: FWoURAQRSpdc5Hiq7xzt9kJVaSz7ze4cOC881Z1j5YDrkif3C7LGaQFfeIwdAeQnQeaMou0ncBPgwrgb5CzpKg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB3502 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)