This is needed for user-space to ensure that HCI init scheduled from hci_register_dev is completed. Function hci_register_dev queues power_on workqueue which will run hci_power_on > hci_dev_do_open. Function hci_dev_do_open sets HCI_INIT for some time. It is not allowed to bind to HCI socket user channel when HCI_INIT is set. As result, bind might fail when user-space program is run early enough during boot. Now, user-space program can first issue HCIDEVUP ioctl to ensure HCI init scheduled at hci_register_dev was completed. Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@xxxxxxxxxxxxxxx> --- net/bluetooth/hci_sock.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c index 33b3c0ffc339..c98de809f856 100644 --- a/net/bluetooth/hci_sock.c +++ b/net/bluetooth/hci_sock.c @@ -1194,9 +1194,7 @@ static int hci_sock_bind(struct socket *sock, struct sockaddr *addr, if (test_bit(HCI_INIT, &hdev->flags) || hci_dev_test_flag(hdev, HCI_SETUP) || - hci_dev_test_flag(hdev, HCI_CONFIG) || - (!hci_dev_test_flag(hdev, HCI_AUTO_OFF) && - test_bit(HCI_UP, &hdev->flags))) { + hci_dev_test_flag(hdev, HCI_CONFIG)) { err = -EBUSY; hci_dev_put(hdev); goto done; -- 2.30.2