Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp927563pxt; Thu, 5 Aug 2021 15:31:08 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwQdkEgYILNb/d//gwfKpDOz/yy4muKhDimtbqkcihTOGfnUqpqyhnQ/428Ajwoiyd5zzD7 X-Received: by 2002:a92:c266:: with SMTP id h6mr827718ild.273.1628202668757; Thu, 05 Aug 2021 15:31:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628202668; cv=none; d=google.com; s=arc-20160816; b=rvw/n3ShgLODw0oH9TMSDP8e9RFzdbqhJRaubk+n3gNn8tEAOqteqP0YJqe/0H+3vZ 700Ii+rImSWapJC2U0a6PinDL3PxqA4LkpQoEwjjLHv433cmvcc2VwCWWM3/5xNpgcX9 heKvWDdMS5++r//YoJmpWgumH21PmyYNLKOZ8LQm/s5pF/hH5SxMflYfokWu7ShOH8XO Hzau6/2RskdggDV4xVOmjIplYGlT9vvGIkw0/lz0wi4gTVwIjP8jTiZ2rMEuOQrMKxgD PQic5noetAMl+iDeFnGIPD3ThQlNCVsWmCUduQfSRynaimlv46SwZbAr1xXUCRlxU7eL vmxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=D1l7i5Vb28UXsgNtCBHcCcosslzh2sOmteJR8SBleRE=; b=o5v9Pbd9MsjT9U/U4EHzW0Z1mRycqPr6zG1y3V7Cr82KbK3JdXcBpC4EFjS9apxG+4 S6Ixm0jvOTfNmirO+0bEfyJX1UQnY4oCXZiiwZgYkYuV23SwbnbwBkgYUO4tztMTdzpu UhZabOfEN4oItsaC+m1FWOpnMFaER97z9xXWVQCLof+F0w/FFojZ0M9kIt56bfGx2i4M PIHDVix4GJLAubbrqTg0lmyGXNq/sCJL2W8onQoX0lunM84sCSXXrarytQ2FAjigju6B +ySYMJ16YnJXtneTMguo34ltcMdIR7HzQI+2vecsHdnxOLBDufouFQ4jcrtRgGUhKIqJ I+zw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=g2AAadfm; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k12si6427140ilc.139.2021.08.05.15.30.36; Thu, 05 Aug 2021 15:31:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-bluetooth-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=@canonical.com header.s=20210705 header.b=g2AAadfm; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242598AbhHEPut (ORCPT + 99 others); Thu, 5 Aug 2021 11:50:49 -0400 Received: from smtp-relay-canonical-0.canonical.com ([185.125.188.120]:50048 "EHLO smtp-relay-canonical-0.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242635AbhHEPus (ORCPT ); Thu, 5 Aug 2021 11:50:48 -0400 Received: from mail-ej1-f71.google.com (mail-ej1-f71.google.com [209.85.218.71]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-canonical-0.canonical.com (Postfix) with ESMTPS id 2F9403F346 for ; Thu, 5 Aug 2021 15:50:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1628178626; bh=D1l7i5Vb28UXsgNtCBHcCcosslzh2sOmteJR8SBleRE=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=g2AAadfmeyKla1dH/Y+Xk1fHUWovHttV+mLNaoWNrMugWEcRlIF2iLfSy+B+yuVb+ VU0X09spn5cxjmwDlhVkSJpd7LIK0URshF5JWtde5lW6o92OvqlOnBetFF31parjIk DMNaeNryvmULBtBoQAIXvojjkVChBI8ep9bo7Jk+efKC3xX6QxcXwrjI52j6vmmlWZ A0CDEW0hZpW0jg8pKILrTxTPcXbSijIBCzipwRnC9MxX4ifb0W2BMfa5DgWm3rFAb2 YWcvKSva2VJHHgrDLq5ThgNgRR4vMdPTgW7O1o6/bc8dMyNB6rlYURBKivRzO47MbD 71U7sDa9yC81Q== Received: by mail-ej1-f71.google.com with SMTP id a19-20020a1709063e93b0290551ea218ea2so2201219ejj.5 for ; Thu, 05 Aug 2021 08:50:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=D1l7i5Vb28UXsgNtCBHcCcosslzh2sOmteJR8SBleRE=; b=Lg9ARyLr903gU5D9UzE7QzVdRQsBf0iYnXOaQ1GH2C76dizHJJUJojiEvKg41M7vYX bAyNzQgEaQgYiYfMjzp9mBiaNnCRB+jjTO+fAKCNRTrXCQCNauuc6ZkVjl5llqDghJIf bh3DA6dIJ3Id0oefctHHnA+UG/vGMamf9EHHt2qNbU6UARHR0tIOrxeyDnhKaQBXqBzQ FoURJzNM9+vHKXMfXWJItRP4p8H2dkQJeopyaNTr0qb1CO3mPRT+Prk/gMuHBvGG0fqn f1xvVxbk4Ur7hhB8VHZl1Xs2PxSeweszw55G7+HcFMlamQWnkr0cD/CYpHLbpdzeNRxE meQg== X-Gm-Message-State: AOAM531NvVKzHkL1r6zm3NZQlzJjg+nqNUqgOy3Dks/fyINs57rO6pUF Hy9Dc1ZZyY79s8dcKZcGrxA0VLI0DwArNozBEJNCwLKEGRXKejkwSfvRbBBRjJBiop6dVIWaBPZ H6gjPHylSY2AqssvHeJAL4axOKwn7ZAukbgQOU7CV1oPb01POnQz1iEt2yUFrHg== X-Received: by 2002:a17:907:9d2:: with SMTP id bx18mr5515893ejc.117.1628178625866; Thu, 05 Aug 2021 08:50:25 -0700 (PDT) X-Received: by 2002:a17:907:9d2:: with SMTP id bx18mr5515871ejc.117.1628178625561; Thu, 05 Aug 2021 08:50:25 -0700 (PDT) MIME-Version: 1.0 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> In-Reply-To: <87bl6cnzy2.fsf@baylibre.com> From: Kai-Heng Feng Date: Thu, 5 Aug 2021 23:50:09 +0800 Message-ID: Subject: Re: [PATCH v2] Bluetooth: Shutdown controller after workqueues are flushed or cancelled To: Mattijs Korpershoek 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 Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Hi Mattijs, On Thu, Aug 5, 2021 at 2:55 PM Mattijs Korpershoek wrote: > > Hi Kai-Heng, > > Thanks for your patch, > > Kai-Heng Feng writes: > [snipped] > I confirm this diff works for me: > > root@i500-pumpkin:~# hciconfig hci0 up > root@i500-pumpkin:~# hciconfig hci0 down > root@i500-pumpkin:~# hciconfig hci0 up > root@i500-pumpkin:~# hciconfig hci0 > hci0: Type: Primary Bus: SDIO > BD Address: 00:0C:E7:55:FF:12 ACL MTU: 1021:8 SCO MTU: 244:4 > UP RUNNING > RX bytes:11268 acl:0 sco:0 events:829 errors:0 > TX bytes:182569 acl:0 sco:0 commands:829 errors:0 > > root@i500-pumpkin:~# hcitool scan > Scanning ... > Pixel 3 XL > > Tested-by: Mattijs Korpershoek I found that btmtksdio_flush() only cancels the work instead of doing flush_work(). That probably explains why putting ->shutdown right before ->flush doesn't work. So can you please test the following again: diff --git a/drivers/bluetooth/btmtksdio.c b/drivers/bluetooth/btmtksdio.c index 9872ef18f9fea..b33c05ad2150b 100644 --- a/drivers/bluetooth/btmtksdio.c +++ b/drivers/bluetooth/btmtksdio.c @@ -649,9 +649,9 @@ static int btmtksdio_flush(struct hci_dev *hdev) { struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); - skb_queue_purge(&bdev->txq); + flush_work(&bdev->tx_work); - cancel_work_sync(&bdev->tx_work); + skb_queue_purge(&bdev->txq); return 0; } diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 2560ed2f144d4..a61e610a400cb 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -1785,6 +1785,14 @@ int hci_dev_do_close(struct hci_dev *hdev) aosp_do_close(hdev); msft_do_close(hdev); + 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); + } + if (hdev->flush) hdev->flush(hdev); @@ -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); Kai-Heng