2022-07-14 00:24:03

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH v7 1/7] Bluetooth: hci_core: Introduce hci_recv_event_data

From: Luiz Augusto von Dentz <[email protected]>

This introduces hci_recv_event_data to make it simpler to access the
contents of last received event rather than having to pass its contents
to the likes of *_ind/*_cfm callbacks.

Signed-off-by: Luiz Augusto von Dentz <[email protected]>
---
v2: Fixes CI/kernel test robot findings
v3: Fix crash when disabling ISO Socket experimental UUID.
v4: Fix crashes when running iso-tester Defer and Defer Send tests which just
binds the CIS using DEFER_SETUP without attempting to connect it at first.
v5: Fix kbuild findings
v6: Fix checkpatch findings
v7: Fix setting timeout on connect when DEFER_SETUP is used

include/net/bluetooth/hci_core.h | 2 ++
net/bluetooth/hci_core.c | 32 ++++++++++++++++++++++++++++++++
net/bluetooth/hci_event.c | 3 +++
3 files changed, 37 insertions(+)

diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 15237ee5f761..0ce57e1856e5 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -530,6 +530,7 @@ struct hci_dev {
struct sk_buff_head cmd_q;

struct sk_buff *sent_cmd;
+ struct sk_buff *recv_event;

struct mutex req_lock;
wait_queue_head_t req_wait_q;
@@ -1755,6 +1756,7 @@ void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags);
void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);

void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode);
+void *hci_recv_event_data(struct hci_dev *hdev, __u8 event);

u32 hci_conn_get_phy(struct hci_conn *conn);

diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 27e90eb4bf4c..baaf2fb969c3 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -2742,6 +2742,7 @@ void hci_release_dev(struct hci_dev *hdev)

ida_simple_remove(&hci_index_ida, hdev->id);
kfree_skb(hdev->sent_cmd);
+ kfree_skb(hdev->recv_event);
kfree(hdev);
}
EXPORT_SYMBOL(hci_release_dev);
@@ -3048,6 +3049,37 @@ void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode)
return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE;
}

+/* Get data from last received event */
+void *hci_recv_event_data(struct hci_dev *hdev, __u8 event)
+{
+ struct hci_event_hdr *hdr;
+ int offset;
+
+ if (!hdev->recv_event)
+ return NULL;
+
+ hdr = (void *)hdev->recv_event->data;
+ offset = sizeof(*hdr);
+
+ if (hdr->evt != event) {
+ /* In case of LE metaevent check the subevent match */
+ if (hdr->evt == HCI_EV_LE_META) {
+ struct hci_ev_le_meta *ev;
+
+ ev = (void *)hdev->recv_event->data + offset;
+ offset += sizeof(*ev);
+ if (ev->subevent == event)
+ goto found;
+ }
+ return NULL;
+ }
+
+found:
+ bt_dev_dbg(hdev, "event 0x%2.2x", event);
+
+ return hdev->recv_event->data + offset;
+}
+
/* Send ACL data */
static void hci_add_acl_hdr(struct sk_buff *skb, __u16 handle, __u16 flags)
{
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 34bec7446d00..2440275a143c 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -6936,6 +6936,9 @@ void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
goto done;
}

+ kfree_skb(hdev->recv_event);
+ hdev->recv_event = skb_clone(skb, GFP_KERNEL);
+
event = hdr->evt;
if (!event) {
bt_dev_warn(hdev, "Received unexpected HCI Event 0x%2.2x",
--
2.35.3


2022-07-14 03:22:11

by bluez.test.bot

[permalink] [raw]
Subject: RE: [v7,1/7] Bluetooth: hci_core: Introduce hci_recv_event_data

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=659500

---Test result---

Test Summary:
CheckPatch PASS 1.93 seconds
GitLint PASS 0.97 seconds
SubjectPrefix PASS 0.84 seconds
BuildKernel PASS 31.35 seconds
BuildKernel32 PASS 27.67 seconds
Incremental Build with patchesPASS 39.54 seconds
TestRunner: Setup PASS 477.86 seconds
TestRunner: l2cap-tester PASS 16.80 seconds
TestRunner: bnep-tester PASS 6.05 seconds
TestRunner: mgmt-tester PASS 95.02 seconds
TestRunner: rfcomm-tester PASS 9.15 seconds
TestRunner: sco-tester PASS 8.96 seconds
TestRunner: smp-tester PASS 9.08 seconds
TestRunner: userchan-tester PASS 5.94 seconds



---
Regards,
Linux Bluetooth

2022-07-22 20:42:39

by patchwork-bot+bluetooth

[permalink] [raw]
Subject: Re: [PATCH v7 1/7] Bluetooth: hci_core: Introduce hci_recv_event_data

Hello:

This patch was applied to bluetooth/bluetooth-next.git (master)
by Luiz Augusto von Dentz <[email protected]>:

On Wed, 13 Jul 2022 17:22:17 -0700 you wrote:
> From: Luiz Augusto von Dentz <[email protected]>
>
> This introduces hci_recv_event_data to make it simpler to access the
> contents of last received event rather than having to pass its contents
> to the likes of *_ind/*_cfm callbacks.
>
> Signed-off-by: Luiz Augusto von Dentz <[email protected]>
>
> [...]

Here is the summary with links:
- [v7,1/7] Bluetooth: hci_core: Introduce hci_recv_event_data
https://git.kernel.org/bluetooth/bluetooth-next/c/dfe6d5c3ec23

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html