]> xenbits.xensource.com Git - people/aperard/linux.git/commitdiff
Bluetooth: mgmt: Remove leftover queuing of power_off work
authorJonas Dreßler <verdre@v0yd.nl>
Sun, 7 Jan 2024 18:02:48 +0000 (19:02 +0100)
committerSasha Levin <sashal@kernel.org>
Tue, 26 Mar 2024 22:20:39 +0000 (18:20 -0400)
[ Upstream commit fee054b7579fe252f8b9e6c17b9c5bfdaa84dd7e ]

Queuing of power_off work was introduced in these functions with commits
8b064a3ad377 ("Bluetooth: Clean up HCI state when doing power off") and
c9910d0fb4fc ("Bluetooth: Fix disconnecting connections in non-connected
states") in an effort to clean up state and do things like disconnecting
devices before actually powering off the device.

After that, commit a3172b7eb4a2 ("Bluetooth: Add timer to force power off")
introduced a timeout to ensure that the device actually got powered off,
even if some of the cleanup work would never complete.

This code later got refactored with commit cf75ad8b41d2 ("Bluetooth:
hci_sync: Convert MGMT_SET_POWERED"), which made powering off the device
synchronous and removed the need for initiating the power_off work from
other places. The timeout mentioned above got removed too, because we now
also made use of the command timeout during power on/off.

These days the power_off work still exists, but it only seems to only be
used for HCI_AUTO_OFF functionality, which is why we never noticed
those two leftover places where we queue power_off work. So let's remove
that code.

Fixes: cf75ad8b41d2 ("Bluetooth: hci_sync: Convert MGMT_SET_POWERED")
Signed-off-by: Jonas Dreßler <verdre@v0yd.nl>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/bluetooth/mgmt.c

index ab63f807e3c80d2a65eff6817ba3e7fd78d5504b..a80bf9c42c2efe0e458c95f3ead51a7a3c855cff 100644 (file)
@@ -9766,14 +9766,6 @@ void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
        struct mgmt_ev_device_disconnected ev;
        struct sock *sk = NULL;
 
-       /* The connection is still in hci_conn_hash so test for 1
-        * instead of 0 to know if this is the last one.
-        */
-       if (mgmt_powering_down(hdev) && hci_conn_count(hdev) == 1) {
-               cancel_delayed_work(&hdev->power_off);
-               queue_work(hdev->req_workqueue, &hdev->power_off.work);
-       }
-
        if (!mgmt_connected)
                return;
 
@@ -9830,14 +9822,6 @@ void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
 {
        struct mgmt_ev_connect_failed ev;
 
-       /* The connection is still in hci_conn_hash so test for 1
-        * instead of 0 to know if this is the last one.
-        */
-       if (mgmt_powering_down(hdev) && hci_conn_count(hdev) == 1) {
-               cancel_delayed_work(&hdev->power_off);
-               queue_work(hdev->req_workqueue, &hdev->power_off.work);
-       }
-
        bacpy(&ev.addr.bdaddr, bdaddr);
        ev.addr.type = link_to_bdaddr(link_type, addr_type);
        ev.status = mgmt_status(status);