mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 00:00:52 +07:00
Bluetooth: Improve *_get() functions to return the object type
It's natural to have *_get() functions that increment the reference count of an object to return the object type itself. This way it's simple to make a copy of the object pointer and increase the reference count in a single step. This patch updates two such get() functions, namely hci_conn_get() and l2cap_conn_get(), and updates the users to take advantage of the new API. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
5477610fc1
commit
51bb8457dd
@ -756,9 +756,10 @@ void hci_le_conn_failed(struct hci_conn *conn, u8 status);
|
|||||||
* _get()/_drop() in it, but require the caller to have a valid ref (FIXME).
|
* _get()/_drop() in it, but require the caller to have a valid ref (FIXME).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static inline void hci_conn_get(struct hci_conn *conn)
|
static inline struct hci_conn *hci_conn_get(struct hci_conn *conn)
|
||||||
{
|
{
|
||||||
get_device(&conn->dev);
|
get_device(&conn->dev);
|
||||||
|
return conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void hci_conn_put(struct hci_conn *conn)
|
static inline void hci_conn_put(struct hci_conn *conn)
|
||||||
|
@ -948,7 +948,7 @@ void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
|
|||||||
void __l2cap_physical_cfm(struct l2cap_chan *chan, int result);
|
void __l2cap_physical_cfm(struct l2cap_chan *chan, int result);
|
||||||
|
|
||||||
void l2cap_conn_shutdown(struct l2cap_conn *conn, int err);
|
void l2cap_conn_shutdown(struct l2cap_conn *conn, int err);
|
||||||
void l2cap_conn_get(struct l2cap_conn *conn);
|
struct l2cap_conn *l2cap_conn_get(struct l2cap_conn *conn);
|
||||||
void l2cap_conn_put(struct l2cap_conn *conn);
|
void l2cap_conn_put(struct l2cap_conn *conn);
|
||||||
|
|
||||||
int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user);
|
int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user);
|
||||||
|
@ -915,7 +915,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
|
|||||||
|
|
||||||
/* connection management */
|
/* connection management */
|
||||||
bacpy(&session->bdaddr, bdaddr);
|
bacpy(&session->bdaddr, bdaddr);
|
||||||
session->conn = conn;
|
session->conn = l2cap_conn_get(conn);
|
||||||
session->user.probe = hidp_session_probe;
|
session->user.probe = hidp_session_probe;
|
||||||
session->user.remove = hidp_session_remove;
|
session->user.remove = hidp_session_remove;
|
||||||
session->ctrl_sock = ctrl_sock;
|
session->ctrl_sock = ctrl_sock;
|
||||||
@ -941,13 +941,13 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto err_free;
|
goto err_free;
|
||||||
|
|
||||||
l2cap_conn_get(session->conn);
|
|
||||||
get_file(session->intr_sock->file);
|
get_file(session->intr_sock->file);
|
||||||
get_file(session->ctrl_sock->file);
|
get_file(session->ctrl_sock->file);
|
||||||
*out = session;
|
*out = session;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_free:
|
err_free:
|
||||||
|
l2cap_conn_put(session->conn);
|
||||||
kfree(session);
|
kfree(session);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -1327,10 +1327,8 @@ int hidp_connection_add(struct hidp_connadd_req *req,
|
|||||||
|
|
||||||
conn = NULL;
|
conn = NULL;
|
||||||
l2cap_chan_lock(chan);
|
l2cap_chan_lock(chan);
|
||||||
if (chan->conn) {
|
if (chan->conn)
|
||||||
l2cap_conn_get(chan->conn);
|
conn = l2cap_conn_get(chan->conn);
|
||||||
conn = chan->conn;
|
|
||||||
}
|
|
||||||
l2cap_chan_unlock(chan);
|
l2cap_chan_unlock(chan);
|
||||||
|
|
||||||
if (!conn)
|
if (!conn)
|
||||||
|
@ -1695,9 +1695,10 @@ static void l2cap_conn_free(struct kref *ref)
|
|||||||
kfree(conn);
|
kfree(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void l2cap_conn_get(struct l2cap_conn *conn)
|
struct l2cap_conn *l2cap_conn_get(struct l2cap_conn *conn)
|
||||||
{
|
{
|
||||||
kref_get(&conn->ref);
|
kref_get(&conn->ref);
|
||||||
|
return conn;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(l2cap_conn_get);
|
EXPORT_SYMBOL(l2cap_conn_get);
|
||||||
|
|
||||||
@ -6908,8 +6909,7 @@ static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon)
|
|||||||
|
|
||||||
kref_init(&conn->ref);
|
kref_init(&conn->ref);
|
||||||
hcon->l2cap_data = conn;
|
hcon->l2cap_data = conn;
|
||||||
conn->hcon = hcon;
|
conn->hcon = hci_conn_get(hcon);
|
||||||
hci_conn_get(conn->hcon);
|
|
||||||
conn->hchan = hchan;
|
conn->hchan = hchan;
|
||||||
|
|
||||||
BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);
|
BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);
|
||||||
|
Loading…
Reference in New Issue
Block a user