Commit f706adfe authored by Andrei Emeltchenko's avatar Andrei Emeltchenko Committed by Gustavo Padovan

Bluetooth: AMP: Get amp_mgr reference in HS hci_conn

When assigning amp_mgr in hci_conn (type AMP_LINK) get also reference.
In hci_conn_del those references would be put for both conn types
AMP_LINK and ACL_LINK associated with amp_mgr.
Signed-off-by: default avatarAndrei Emeltchenko <andrei.emeltchenko@intel.com>
Signed-off-by: default avatarGustavo Padovan <gustavo.padovan@collabora.co.uk>
parent 56f60984
...@@ -133,7 +133,7 @@ struct a2mp_physlink_rsp { ...@@ -133,7 +133,7 @@ struct a2mp_physlink_rsp {
extern struct list_head amp_mgr_list; extern struct list_head amp_mgr_list;
extern struct mutex amp_mgr_list_lock; extern struct mutex amp_mgr_list_lock;
void amp_mgr_get(struct amp_mgr *mgr); struct amp_mgr *amp_mgr_get(struct amp_mgr *mgr);
int amp_mgr_put(struct amp_mgr *mgr); int amp_mgr_put(struct amp_mgr *mgr);
u8 __next_ident(struct amp_mgr *mgr); u8 __next_ident(struct amp_mgr *mgr);
struct l2cap_chan *a2mp_channel_create(struct l2cap_conn *conn, struct l2cap_chan *a2mp_channel_create(struct l2cap_conn *conn,
......
...@@ -751,11 +751,13 @@ static struct l2cap_chan *a2mp_chan_open(struct l2cap_conn *conn, bool locked) ...@@ -751,11 +751,13 @@ static struct l2cap_chan *a2mp_chan_open(struct l2cap_conn *conn, bool locked)
} }
/* AMP Manager functions */ /* AMP Manager functions */
void amp_mgr_get(struct amp_mgr *mgr) struct amp_mgr *amp_mgr_get(struct amp_mgr *mgr)
{ {
BT_DBG("mgr %p orig refcnt %d", mgr, atomic_read(&mgr->kref.refcount)); BT_DBG("mgr %p orig refcnt %d", mgr, atomic_read(&mgr->kref.refcount));
kref_get(&mgr->kref); kref_get(&mgr->kref);
return mgr;
} }
static void amp_mgr_destroy(struct kref *kref) static void amp_mgr_destroy(struct kref *kref)
......
...@@ -123,7 +123,7 @@ struct hci_conn *phylink_add(struct hci_dev *hdev, struct amp_mgr *mgr, ...@@ -123,7 +123,7 @@ struct hci_conn *phylink_add(struct hci_dev *hdev, struct amp_mgr *mgr,
hcon->attempt++; hcon->attempt++;
hcon->handle = __next_handle(mgr); hcon->handle = __next_handle(mgr);
hcon->remote_id = remote_id; hcon->remote_id = remote_id;
hcon->amp_mgr = mgr; hcon->amp_mgr = amp_mgr_get(mgr);
hcon->out = out; hcon->out = out;
return hcon; return hcon;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment