Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp2517358pxt; Mon, 9 Aug 2021 02:21:08 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzd1M1soabY/58FnkoF7r5YWNCvW0/zkShs3jEun5HIXIFbtSKUnGgcJ2GRYv/Qiwf5FIQC X-Received: by 2002:a05:6e02:12c9:: with SMTP id i9mr425453ilm.131.1628500868766; Mon, 09 Aug 2021 02:21:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628500868; cv=none; d=google.com; s=arc-20160816; b=XLvAYHokn/n2i4RMBUp18l4lpgnjxlE+9Ln62dwOlJGakCW2fj1Qvh1ip1sZqiKNpu hr6hjaaTxfZkX3n2/GYWz7HCMT3ZLefjQ8cERKDOWN2iuJuYrYCZOdpO3vNyxN8VYmhk OjD42ZvVEQsxJv6IzMbtwZM4rOn2fmlW4qvjwaAdCTilSg98w9/qrAaiQCsSlUDwahjp YbuuiteHfGyn1/DYAgBVSAj8oEomT/cwbxZlQJTEcPCtmFlwAYukEhLe+laBy/RDkQQZ fCgqJ2P/IWCE+hUQgBtwLNjDPbslVM0mkmespYk+SVseNFscYJ/9/t+tUWKL6gWKlTPQ TVKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from:dkim-signature; bh=5e4PmsQRlGxMmgnJTg6Pkw2CO7JWPy14wJKAd7YTXoA=; b=eTHw6qQ/6Q5PDIxQiLkC3/XOHVKZZ5VtB92gchuqOYiiIQkjwK9upAeEpJMd6Kdori S4K7w7qyz3HPfgZ3iLJMnBBXr+qh8unUhV0qPi19ABZ83cKfmh4ZVA+drMO+hJjIfqhj jzSAoKnBLyvGsfbHRD8YSGfSG9q0KJPZJGReCezCkfP8oAZVQo6cfpPn+5/mtdw385Kv q1AN7TY21f2dt4KehYMJjgKq7c1XqGGO6jRQZ947VJ9GM3lloJ8J6986HzrE4bEQuYBX twY93wpUjEhnFaMUcKcLFYrgaMayyOwY1Xm/vTvgP6NwkO4dwCt6i63JQe8CyQvuGSa/ KjCw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=hvypfmlD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w4si16866514ioa.95.2021.08.09.02.20.56; Mon, 09 Aug 2021 02:21:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=hvypfmlD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234328AbhHIJUJ (ORCPT + 99 others); Mon, 9 Aug 2021 05:20:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58412 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234406AbhHIJUH (ORCPT ); Mon, 9 Aug 2021 05:20:07 -0400 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 31B41C0613D3 for ; Mon, 9 Aug 2021 02:19:47 -0700 (PDT) Received: by mail-wm1-x333.google.com with SMTP id k38-20020a05600c1ca6b029025af5e0f38bso14003678wms.5 for ; Mon, 09 Aug 2021 02:19:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:in-reply-to:references:date:message-id :mime-version; bh=5e4PmsQRlGxMmgnJTg6Pkw2CO7JWPy14wJKAd7YTXoA=; b=hvypfmlDzIEtp+RFWIZ+IAjKcCtsgxKQl29O4edQD4OfnlIuLLtj86o1+LqmYpxp/h 9oNOkiI8Xus0N+SNEypAy9rrWnVHtWNWODgQBxfn9gW1l0bQ4XPa2rcb8BrefO7rdFB5 ZDeA9L/kpX7bTSYJ3fyLZBwdAeHINJLTZqUnQ7y1jGt2voEYnbPqOtnB8JbkgKn3KTA3 wlKbLIzE3mEq1e8hxWRssPrUZPcxwoj0OStCUmQKwrVisDtQV7xi10kPqPZFvHQw3eEH M84+KkhL06mssoHFLZjPndCTjYbxp2wgoS4szLGzGFwhs4mFXZjSEBM4D4iE03K9qQ/+ h+wA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:mime-version; bh=5e4PmsQRlGxMmgnJTg6Pkw2CO7JWPy14wJKAd7YTXoA=; b=OlQW7BQy2QF+xoUqhZ8EIbVwgvAIb4hKBhyLaVrPjCEquelumS1Ox0a8OER7MItm+A Nq3dC+wAW4o5/9xzE8hnGU56eTmtPk4fNdiAXmsWZ4r4KliccbGU4og7brNp9gXp1H0r jLfXqy26xoFyvZux8G4ZNH8i7OXRaTyM2nwZ7StRb0oo/dTtEYOnMmbzAT3sy8inHN48 rRvpBlqcVWW3lIrZt3g7qtYD0TzqU8itIQ1Gqmbb9g9rNNbCEqme3HlsVYwCedXmd7LJ zZ5lx5dsXTOkh7EEzF99KntfVkXKtx6+1hsvTHhvUAhMfgV746VaCuOAL2ty1rUK9YV4 yyIA== X-Gm-Message-State: AOAM530tZPkhHlxQD3semeFSXPPQ6NwzR3GG8LKT+N/r97EXGWK3nqh8 5kUasgkQByxgasShKZCHrjozRg== X-Received: by 2002:a7b:c204:: with SMTP id x4mr15613475wmi.70.1628500785673; Mon, 09 Aug 2021 02:19:45 -0700 (PDT) Received: from localhost ([2a01:cb19:826e:8e00:ef10:98d1:78e3:9e80]) by smtp.gmail.com with ESMTPSA id r129sm16719560wmr.7.2021.08.09.02.19.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Aug 2021 02:19:45 -0700 (PDT) From: Mattijs Korpershoek To: Kai-Heng Feng Cc: Marcel Holtmann , Johan Hedberg , Luiz Augusto von Dentz , "David S. Miller" , Jakub Kicinski , Fabien Parent , Sean Wang , "open list:BLUETOOTH SUBSYSTEM" , "open list:NETWORKING [GENERAL]" , open list Subject: Re: [PATCH v2] Bluetooth: Shutdown controller after workqueues are flushed or cancelled In-Reply-To: References: <20210514071452.25220-1-kai.heng.feng@canonical.com> <576B26FD-81F8-4632-82F6-57C4A7C096C4@holtmann.org> <8735ryk0o7.fsf@baylibre.com> <87y29o58su.fsf@baylibre.com> <87a6lzx7jf.fsf@baylibre.com> <87bl6cnzy2.fsf@baylibre.com> <87tuk3j6rh.fsf@baylibre.com> Date: Mon, 09 Aug 2021 11:19:43 +0200 Message-ID: <875ywfnff4.fsf@baylibre.com> MIME-Version: 1.0 Content-Type: text/plain Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Kai-Heng, Kai-Heng Feng writes: > Hi Mattijs, > >> [snipped] > > Thanks for your testing. I think I finally got it: > btmtksdio_shutdown() > -> mtk_hci_wmt_sync() > -> __hci_cmd_send() > then waiting for BTMTKSDIO_TX_WAIT_VND_EVT, which is cleared in > btmtksdio_recv_event(): > btmtksdio_recv_event() > -> hci_recv_frame() > -> queue_work(hdev->workqueue, &hdev->rx_work); > > That means it has to be done before the following drain_workqueue() call. > Can you please see if moving the ->shutdown() part right before > drain_workqueue() can fix the issue? I've tested the following patch: diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 2560ed2f144d..131e69a9a66a 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -1757,6 +1757,14 @@ int hci_dev_do_close(struct hci_dev *hdev) cancel_delayed_work_sync(&adv_instance->rpa_expired_cb); } + if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) && + !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && + test_bit(HCI_UP, &hdev->flags)) { + /* Execute vendor specific shutdown routine */ + if (hdev->shutdown) + hdev->shutdown(hdev); + } + /* Avoid potential lockdep warnings from the *_flush() calls by * ensuring the workqueue is empty up front. */ @@ -1798,14 +1806,6 @@ int hci_dev_do_close(struct hci_dev *hdev) clear_bit(HCI_INIT, &hdev->flags); } - if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) && - !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && - test_bit(HCI_UP, &hdev->flags)) { - /* Execute vendor specific shutdown routine */ - if (hdev->shutdown) - hdev->shutdown(hdev); - } - /* flush cmd work */ flush_work(&hdev->cmd_work); It does not seem to fix the issue. Adding the bits in btmtksdio_flush() does not change the result of the above patch. Here are the logs. These are just with the above patch (not with the btmtksdio_flush() changes. dmesg: https://pastebin.com/FZZBkqGC btmtksdio_ftrace: https://pastebin.com/JQ0UWenY Mattijs > > Kai-Heng > >> >> Mattijs >> >> > >> > Kai-Heng