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: Andrei Emeltchenko <andrei.emeltchenko@intel.com> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
This commit is contained in:
parent
56f6098441
commit
f706adfead
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 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,
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue