Hi Benjamin, On Tue, Nov 9, 2021 at 2:35 PM Benjamin Berg <benjamin@xxxxxxxxxxxxxxxx> wrote: > > From: Benjamin Berg <bberg@xxxxxxxxxx> > > Currently this function only cancels any synchronous operation that > might be ongoing. Adding this function allows aborting synchronous > commands in case of low level TX/RX issues. A common example for this is > that the device has been removed. > > Signed-off-by: Benjamin Berg <bberg@xxxxxxxxxx> > --- > include/net/bluetooth/hci_core.h | 1 + > net/bluetooth/hci_core.c | 7 +++++++ > 2 files changed, 8 insertions(+) > > diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h > index dd8840e70e25..542f5a37b9d0 100644 > --- a/include/net/bluetooth/hci_core.h > +++ b/include/net/bluetooth/hci_core.h > @@ -1267,6 +1267,7 @@ void hci_release_dev(struct hci_dev *hdev); > int hci_suspend_dev(struct hci_dev *hdev); > int hci_resume_dev(struct hci_dev *hdev); > int hci_reset_dev(struct hci_dev *hdev); > +void hci_tx_error(struct hci_dev *hdev, int err); > int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb); > int hci_recv_diag(struct hci_dev *hdev, struct sk_buff *skb); > __printf(2, 3) void hci_set_hw_info(struct hci_dev *hdev, const char *fmt, ...); > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c > index 8d33aa64846b..bbb35188e41f 100644 > --- a/net/bluetooth/hci_core.c > +++ b/net/bluetooth/hci_core.c > @@ -4069,6 +4069,13 @@ int hci_reset_dev(struct hci_dev *hdev) > } > EXPORT_SYMBOL(hci_reset_dev); > > +/* Reset HCI device */ > +void hci_tx_error(struct hci_dev *hdev, int err) > +{ > + hci_req_sync_cancel(hdev, err); > +} > +EXPORT_SYMBOL(hci_tx_error); I think we might be better off having such functionality exposed by hci_sync.h since that should be accessible by driver nowadays, at least that seems cleaner than having to introduce yet another public function in hci_core.h just to interface with the likes of hci_req_sync_cancel, that said we are also deprecating hci_request.h in favor of hci_sync.h so we might as well move the likes of hci_req_sync_cancel to hci_sync.h renaming it to hci_cmd_sync_cancel so it is inline with naming we are using in hci_sync.h. > /* Receive frame from HCI drivers */ > int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb) > { > -- > 2.31.1 > -- Luiz Augusto von Dentz