From: Mattijs Korpershoek <mkorpershoek@baylibre.com>
To: Kai-Heng Feng <kai.heng.feng@canonical.com>
Cc: Marcel Holtmann <marcel@holtmann.org>,
Johan Hedberg <johan.hedberg@gmail.com>,
Luiz Augusto von Dentz <luiz.dentz@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>,
Fabien Parent <fparent@baylibre.com>,
Sean Wang <sean.wang@mediatek.com>,
"open list:BLUETOOTH SUBSYSTEM" <linux-bluetooth@vger.kernel.org>,
"open list:NETWORKING [GENERAL]" <netdev@vger.kernel.org>,
open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2] Bluetooth: Shutdown controller after workqueues are flushed or cancelled
Date: Fri, 06 Aug 2021 10:51:14 +0200 [thread overview]
Message-ID: <87tuk3j6rh.fsf@baylibre.com> (raw)
In-Reply-To: <CAAd53p5TVJk3G4cArS_UO7cgUpJLONNGVHnpezXy0XTYoXd_uw@mail.gmail.com>
Hi Kai-Heng,
Kai-Heng Feng <kai.heng.feng@canonical.com> writes:
> Hi Mattijs,
>
> On Thu, Aug 5, 2021 at 2:55 PM Mattijs Korpershoek
> <mkorpershoek@baylibre.com> wrote:
>>
>> Hi Kai-Heng,
>>
>> Thanks for your patch,
>>
>> Kai-Heng Feng <kai.heng.feng@canonical.com> 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 ...
>> <redacted> Pixel 3 XL
>>
>> Tested-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
>
> 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);
I've tried this but I have the same (broken) symptoms as before.
Here are some logs of v3:
dmesg: https://pastebin.com/1x4UHkzy
ftrace: https://pastebin.com/Lm1d6AWy
Mattijs
>
> Kai-Heng
next prev parent reply other threads:[~2021-08-06 8:51 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-14 7:14 [PATCH v2] Bluetooth: Shutdown controller after workqueues are flushed or cancelled Kai-Heng Feng
2021-05-14 8:12 ` [v2] " bluez.test.bot
2021-05-14 18:15 ` [PATCH v2] " Marcel Holtmann
2021-07-28 13:50 ` Mattijs Korpershoek
2021-07-28 15:25 ` Kai-Heng Feng
2021-07-30 11:40 ` Mattijs Korpershoek
2021-08-03 6:42 ` Kai-Heng Feng
2021-08-03 8:21 ` Mattijs Korpershoek
2021-08-04 14:42 ` Kai-Heng Feng
2021-08-05 6:55 ` Mattijs Korpershoek
2021-08-05 15:50 ` Kai-Heng Feng
2021-08-06 8:51 ` Mattijs Korpershoek [this message]
2021-08-06 15:36 ` Kai-Heng Feng
2021-08-09 9:19 ` Mattijs Korpershoek
[not found] ` <20210802030538.2023-1-hdanton@sina.com>
2021-08-03 6:45 ` Kai-Heng Feng
[not found] ` <20210803074722.2383-1-hdanton@sina.com>
2021-08-04 14:35 ` Kai-Heng Feng
[not found] ` <20210805030024.2603-1-hdanton@sina.com>
2021-08-05 3:44 ` Kai-Heng Feng
[not found] ` <20210805063536.2698-1-hdanton@sina.com>
2021-08-05 7:19 ` Kai-Heng Feng
2021-08-05 6:12 ` Hsin-Yi Wang
[not found] ` <20210805070114.2803-1-hdanton@sina.com>
2021-08-05 7:04 ` Hsin-Yi Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87tuk3j6rh.fsf@baylibre.com \
--to=mkorpershoek@baylibre.com \
--cc=davem@davemloft.net \
--cc=fparent@baylibre.com \
--cc=johan.hedberg@gmail.com \
--cc=kai.heng.feng@canonical.com \
--cc=kuba@kernel.org \
--cc=linux-bluetooth@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luiz.dentz@gmail.com \
--cc=marcel@holtmann.org \
--cc=netdev@vger.kernel.org \
--cc=sean.wang@mediatek.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.