|
@@ -227,7 +227,7 @@ static int hci_uart_flush(struct hci_dev *hdev)
|
|
|
tty_ldisc_flush(tty);
|
|
|
tty_driver_flush_buffer(tty);
|
|
|
|
|
|
- if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
|
|
|
+ if (test_bit(HCI_UART_PROTO_READY, &hu->flags))
|
|
|
hu->proto->flush(hu);
|
|
|
|
|
|
return 0;
|
|
@@ -492,7 +492,7 @@ static void hci_uart_tty_close(struct tty_struct *tty)
|
|
|
|
|
|
cancel_work_sync(&hu->write_work);
|
|
|
|
|
|
- if (test_and_clear_bit(HCI_UART_PROTO_SET, &hu->flags)) {
|
|
|
+ if (test_and_clear_bit(HCI_UART_PROTO_READY, &hu->flags)) {
|
|
|
if (hdev) {
|
|
|
if (test_bit(HCI_UART_REGISTERED, &hu->flags))
|
|
|
hci_unregister_dev(hdev);
|
|
@@ -500,6 +500,7 @@ static void hci_uart_tty_close(struct tty_struct *tty)
|
|
|
}
|
|
|
hu->proto->close(hu);
|
|
|
}
|
|
|
+ clear_bit(HCI_UART_PROTO_SET, &hu->flags);
|
|
|
|
|
|
kfree(hu);
|
|
|
}
|
|
@@ -526,7 +527,7 @@ static void hci_uart_tty_wakeup(struct tty_struct *tty)
|
|
|
if (tty != hu->tty)
|
|
|
return;
|
|
|
|
|
|
- if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
|
|
|
+ if (test_bit(HCI_UART_PROTO_READY, &hu->flags))
|
|
|
hci_uart_tx_wakeup(hu);
|
|
|
}
|
|
|
|
|
@@ -550,7 +551,7 @@ static void hci_uart_tty_receive(struct tty_struct *tty, const u8 *data,
|
|
|
if (!hu || tty != hu->tty)
|
|
|
return;
|
|
|
|
|
|
- if (!test_bit(HCI_UART_PROTO_SET, &hu->flags))
|
|
|
+ if (!test_bit(HCI_UART_PROTO_READY, &hu->flags))
|
|
|
return;
|
|
|
|
|
|
/* It does not need a lock here as it is already protected by a mutex in
|
|
@@ -638,9 +639,11 @@ static int hci_uart_set_proto(struct hci_uart *hu, int id)
|
|
|
return err;
|
|
|
|
|
|
hu->proto = p;
|
|
|
+ set_bit(HCI_UART_PROTO_READY, &hu->flags);
|
|
|
|
|
|
err = hci_uart_register_dev(hu);
|
|
|
if (err) {
|
|
|
+ clear_bit(HCI_UART_PROTO_READY, &hu->flags);
|
|
|
p->close(hu);
|
|
|
return err;
|
|
|
}
|