Re: [RFCv1 3/6] Bluetooth: AMP: Add handle to hci_chan structure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Andrei,

> hci_chan will be identified by handle used in logical link creation
> process. This handle is used in AMP ACL-U packet handle field.
> 
> Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@xxxxxxxxx>
> ---
>  include/net/bluetooth/hci_core.h |    6 ++++--
>  net/bluetooth/hci_conn.c         |   34 ++++++++++++++++++++++++++++++++++
>  2 files changed, 38 insertions(+), 2 deletions(-)
> 
> diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
> index 90ae4f0..951f604 100644
> --- a/include/net/bluetooth/hci_core.h
> +++ b/include/net/bluetooth/hci_core.h
> @@ -348,7 +348,7 @@ struct hci_conn {
>  
>  struct hci_chan {
>  	struct list_head list;
> -
> +	__u16 handle;
>  	struct hci_conn *conn;
>  	struct sk_buff_head data_q;
>  	unsigned int	sent;
> @@ -565,7 +565,9 @@ void hci_conn_check_pending(struct hci_dev *hdev);
>  struct hci_chan *hci_chan_create(struct hci_conn *conn);
>  void hci_chan_del(struct hci_chan *chan);
>  void hci_chan_list_flush(struct hci_conn *conn);
> -
> +struct hci_chan *hci_chan_lookup_handle(struct hci_conn *hcon, __u16 handle);
> +struct hci_chan *hci_chan_lookup_handle_all(struct hci_dev *hdev,
> +					    __u16 handle);

this naming is pretty bad. I have no idea what one function does
different compared to the other. Especially since none of them take a
hci_chan as argument, but start with that prefix.

Would be the naming hci_conn_lookup_chan be a lot clearer? Or maybe
hci_chan_lookup_from_dev or similar.

>  struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst,
>  			     __u8 dst_type, __u8 sec_level, __u8 auth_type);
>  int hci_conn_check_link_mode(struct hci_conn *conn);
> diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
> index 3584f58..7387516 100644
> --- a/net/bluetooth/hci_conn.c
> +++ b/net/bluetooth/hci_conn.c
> @@ -992,3 +992,37 @@ void hci_chan_list_flush(struct hci_conn *conn)
>  	list_for_each_entry_safe(chan, n, &conn->chan_list, list)
>  		hci_chan_del(chan);
>  }
> +
> +struct hci_chan *hci_chan_lookup_handle(struct hci_conn *hcon, __u16 handle)
> +{
> +	struct hci_chan *hchan;
> +
> +	list_for_each_entry(hchan, &hcon->chan_list, list) {
> +		if (hchan->handle == handle)
> +			return hchan;
> +	}
> +
> +	return NULL;
> +}

Since this function is unprotected, you better make this __hci_....

And on a different note. It is not used at all. So why is this public
anyway?

> +
> +struct hci_chan *hci_chan_lookup_handle_all(struct hci_dev *hdev, __u16 handle)
> +{
> +	struct hci_conn_hash *h = &hdev->conn_hash;
> +	struct hci_conn *hcon;
> +
> +	rcu_read_lock();
> +
> +	list_for_each_entry_rcu(hcon, &h->list, list) {
> +		struct hci_chan *hchan;
> +
> +		hchan = hci_chan_lookup_handle(hcon, handle);
> +		if (hchan) {
> +			rcu_read_unlock();
> +			return hchan;

Please use break here. Have a global hchan variable assigned to NULL and
just break here.

> +		}
> +	}
> +
> +	rcu_read_unlock();
> +
> +	return NULL;
> +}

Regards

Marcel


--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux