Bluetooth: Add one more buffer for HCI stream reassembly
Additional reassembly buffer to keep track of stream reasembly Signed-off-by: Suraj Sumangala <suraj@atheros.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
0a79f67445
commit
cd4c53919e
|
@ -66,7 +66,7 @@ struct bdaddr_list {
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
bdaddr_t bdaddr;
|
bdaddr_t bdaddr;
|
||||||
};
|
};
|
||||||
|
#define NUM_REASSEMBLY 4
|
||||||
struct hci_dev {
|
struct hci_dev {
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
|
@ -123,7 +123,7 @@ struct hci_dev {
|
||||||
struct sk_buff_head cmd_q;
|
struct sk_buff_head cmd_q;
|
||||||
|
|
||||||
struct sk_buff *sent_cmd;
|
struct sk_buff *sent_cmd;
|
||||||
struct sk_buff *reassembly[3];
|
struct sk_buff *reassembly[NUM_REASSEMBLY];
|
||||||
|
|
||||||
struct mutex req_lock;
|
struct mutex req_lock;
|
||||||
wait_queue_head_t req_wait_q;
|
wait_queue_head_t req_wait_q;
|
||||||
|
|
|
@ -914,7 +914,7 @@ int hci_register_dev(struct hci_dev *hdev)
|
||||||
skb_queue_head_init(&hdev->cmd_q);
|
skb_queue_head_init(&hdev->cmd_q);
|
||||||
skb_queue_head_init(&hdev->raw_q);
|
skb_queue_head_init(&hdev->raw_q);
|
||||||
|
|
||||||
for (i = 0; i < 3; i++)
|
for (i = 0; i < NUM_REASSEMBLY; i++)
|
||||||
hdev->reassembly[i] = NULL;
|
hdev->reassembly[i] = NULL;
|
||||||
|
|
||||||
init_waitqueue_head(&hdev->req_wait_q);
|
init_waitqueue_head(&hdev->req_wait_q);
|
||||||
|
@ -973,7 +973,7 @@ int hci_unregister_dev(struct hci_dev *hdev)
|
||||||
|
|
||||||
hci_dev_do_close(hdev);
|
hci_dev_do_close(hdev);
|
||||||
|
|
||||||
for (i = 0; i < 3; i++)
|
for (i = 0; i < NUM_REASSEMBLY; i++)
|
||||||
kfree_skb(hdev->reassembly[i]);
|
kfree_skb(hdev->reassembly[i]);
|
||||||
|
|
||||||
hci_notify(hdev, HCI_DEV_UNREG);
|
hci_notify(hdev, HCI_DEV_UNREG);
|
||||||
|
@ -1034,7 +1034,7 @@ int hci_recv_frame(struct sk_buff *skb)
|
||||||
EXPORT_SYMBOL(hci_recv_frame);
|
EXPORT_SYMBOL(hci_recv_frame);
|
||||||
|
|
||||||
/* Receive packet type fragment */
|
/* Receive packet type fragment */
|
||||||
#define __reassembly(hdev, type) ((hdev)->reassembly[(type) - 2])
|
#define __reassembly(hdev, type) ((hdev)->reassembly[(type) - 1])
|
||||||
|
|
||||||
int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count)
|
int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue