linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mat Martineau <mathewm@codeaurora.org>
To: Andrei Emeltchenko <Andrei.Emeltchenko.news@gmail.com>
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: [PATCHv1 11/12] Bluetooth: AMP: Use l2cap_physical_cfm in phylink complete evt
Date: Fri, 2 Nov 2012 08:39:09 -0700 (PDT)	[thread overview]
Message-ID: <alpine.DEB.2.02.1211020808010.29427@mathewm-linux> (raw)
In-Reply-To: <20121102074844.GA4171@aemeltch-MOBL1>


Andrei -

On Fri, 2 Nov 2012, Andrei Emeltchenko wrote:

> Hi Mat,
>
> On Thu, Nov 01, 2012 at 10:51:19AM -0700, Mat Martineau wrote:
>>
>> Andrei -
>>
>> On Wed, 31 Oct 2012, Andrei Emeltchenko wrote:
>>
>>> From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
>>>
>>> When receiving HCI Phylink Complete event run amp_physical_cfm
>>> which initialize BR/EDR L2CAP channel associated with High Speed
>>> link and run l2cap_physical_cfm which shall send L2CAP Create
>>> Chan Request.
>>>
>>> Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
>>> Acked-by: Marcel Holtmann <marcel@holtmann.org>
>>> ---
>>> include/net/bluetooth/amp.h   |    1 +
>>> include/net/bluetooth/l2cap.h |    1 +
>>> net/bluetooth/amp.c           |   24 ++++++++++++++++++++++++
>>> net/bluetooth/hci_event.c     |   15 ++-------------
>>> 4 files changed, 28 insertions(+), 13 deletions(-)
>>>
>>> diff --git a/include/net/bluetooth/amp.h b/include/net/bluetooth/amp.h
>>> index f1c0017..7ea3db7 100644
>>> --- a/include/net/bluetooth/amp.h
>>> +++ b/include/net/bluetooth/amp.h
>>> @@ -46,6 +46,7 @@ void amp_accept_phylink(struct hci_dev *hdev, struct amp_mgr *mgr,
>>> 			struct hci_conn *hcon);
>>> void amp_write_remote_assoc(struct hci_dev *hdev, u8 handle);
>>> void amp_write_rem_assoc_continue(struct hci_dev *hdev, u8 handle);
>>> +void amp_physical_cfm(struct hci_conn *bredr_hcon, struct hci_conn *hs_hcon);
>>> void amp_create_logical_link(struct l2cap_chan *chan);
>>> void amp_disconnect_logical_link(struct hci_chan *hchan);
>>> void amp_destroy_logical_link(struct hci_chan *hchan, u8 reason);
>>> diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
>>> index 24c61ef..18149c8 100644
>>> --- a/include/net/bluetooth/l2cap.h
>>> +++ b/include/net/bluetooth/l2cap.h
>>> @@ -812,5 +812,6 @@ void l2cap_send_conn_req(struct l2cap_chan *chan);
>>> void l2cap_move_start(struct l2cap_chan *chan);
>>> void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
>>> 		       u8 status);
>>> +void l2cap_physical_cfm(struct l2cap_chan *chan, int result);
>>>
>>> #endif /* __L2CAP_H */
>>> diff --git a/net/bluetooth/amp.c b/net/bluetooth/amp.c
>>> index 917e034..650bb8d 100644
>>> --- a/net/bluetooth/amp.c
>>> +++ b/net/bluetooth/amp.c
>>> @@ -373,6 +373,30 @@ void amp_accept_phylink(struct hci_dev *hdev, struct amp_mgr *mgr,
>>> 	hci_send_cmd(hdev, HCI_OP_ACCEPT_PHY_LINK, sizeof(cp), &cp);
>>> }
>>>
>>> +void amp_physical_cfm(struct hci_conn *bredr_hcon, struct hci_conn *hs_hcon)
>>> +{
>>> +	struct hci_dev *bredr_hdev = hci_dev_hold(bredr_hcon->hdev);
>>> +	struct amp_mgr *mgr = hs_hcon->amp_mgr;
>>> +	struct l2cap_chan *bredr_chan;
>>> +
>>> +	BT_DBG("bredr_hcon %p hs_hcon %p mgr %p", bredr_hcon, hs_hcon, mgr);
>>> +
>>> +	if (!bredr_hdev || !mgr || !mgr->bredr_chan)
>>> +		return;
>>> +
>>> +	bredr_chan = mgr->bredr_chan;
>>> +
>>> +	set_bit(FLAG_EFS_ENABLE, &bredr_chan->flags);
>>> +	bredr_chan->ctrl_id = hs_hcon->remote_id;
>>> +	bredr_chan->hs_hcon = hs_hcon;
>>> +	bredr_chan->conn->mtu = hs_hcon->hdev->block_mtu;
>>> +	bredr_chan->fcs = L2CAP_FCS_NONE;

Changing FCS requires L2CAP reconfiguration for the channel, and 
chan->fcs shouldn't be modified until reconfiguration happens.  While 
it doesn't make much sense to do so, the remote device may want to 
keep FCS enabled.  The move may also fail and you don't want to forget 
the original FCS setting in that case.

>>
>> Sorry I missed this earlier: bredr_chan needs to be locked before
>> changing it.  I suggest passing the information to
>> l2cap_physical_cfm and letting that function update the structure
>> members while it holds the lock.
>
> what about locking here and changing l2cap_physical_cfm to unlocked
> __l2cap_physical_cfm ?

My preference is to not manipulate l2cap_chan too much outside of 
l2cap_core, and to keep the channel move or channel create state 
machines inside l2cap_core.  l2cap_physical_cfm checks the channel 
state before modifying it.  The move or new connection may have been 
canceled or be in the wrong state, in which case the structure should 
not be modified even though the physical link was completed.

>
>>
>>
>>> +
>>> +	l2cap_physical_cfm(bredr_chan, 0);
>>> +
>>> +	hci_dev_put(bredr_hdev);
>>> +}

Regards,

--
Mat Martineau

Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation


  reply	other threads:[~2012-11-02 15:39 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-16 15:01 [RFCv0 0/8] Handling physical and logical link Andrei Emeltchenko
2012-10-16 15:01 ` [RFCv0 1/8] Bluetooth: AMP: Process Physical Link Complete evt Andrei Emeltchenko
2012-10-16 15:01 ` [RFCv0 2/8] Bluetooth: AMP: Process Logical Link complete evt Andrei Emeltchenko
2012-10-16 15:01 ` [RFCv0 3/8] Bluetooth: Add logical link create function Andrei Emeltchenko
2012-10-16 15:01 ` [RFCv0 4/8] Bluetooth: AMP: Process Disc Logical Link Andrei Emeltchenko
2012-10-16 15:01 ` [RFCv0 5/8] Bluetooth: AMP: Process Disc Physical Link complete evt Andrei Emeltchenko
2012-10-16 15:01 ` [RFCv0 6/8] Bluetooth: AMP: Remove hci_conn receiving error command status Andrei Emeltchenko
2012-10-16 15:01 ` [RFCv0 7/8] Bluetooth: Disconnect logical link when deleteing chan Andrei Emeltchenko
2012-10-16 15:01 ` [RFCv0 8/8] Bluetooth: Add put(hcon) when deleting hchan Andrei Emeltchenko
2012-10-17 17:07 ` [RFCv0 0/8] Handling physical and logical link Marcel Holtmann
2012-10-18 10:44   ` Andrei Emeltchenko
2012-10-25 12:20   ` [RFCv1 00/11] " Andrei Emeltchenko
2012-10-25 12:20     ` [RFCv1 01/11] Bluetooth: trivial: Remove unneeded assignment Andrei Emeltchenko
2012-10-25 13:06       ` Marcel Holtmann
2012-10-25 12:20     ` [RFCv1 02/11] Bluetooth: Use helper function sending EFS conf rsp Andrei Emeltchenko
2012-10-25 13:07       ` Marcel Holtmann
2012-10-25 12:20     ` [RFCv1 03/11] Bluetooth: AMP: Process Physical Link Complete evt Andrei Emeltchenko
2012-10-26 17:16       ` Mat Martineau
2012-10-29  9:22         ` Andrei Emeltchenko
2012-10-25 12:20     ` [RFCv1 04/11] Bluetooth: AMP: Process Logical Link complete evt Andrei Emeltchenko
2012-10-25 13:08       ` Marcel Holtmann
2012-10-25 12:20     ` [RFCv1 05/11] Bluetooth: AMP: Add Logical Link Create function Andrei Emeltchenko
2012-10-26 17:01       ` Mat Martineau
2012-10-29  9:24         ` Andrei Emeltchenko
2012-10-25 12:20     ` [RFCv1 06/11] Bluetooth: AMP: Process Disc Logical Link Andrei Emeltchenko
2012-10-25 12:20     ` [RFCv1 07/11] Bluetooth: AMP: Process Disc Physical Link Complete evt Andrei Emeltchenko
2012-10-25 12:20     ` [RFCv1 08/11] Bluetooth: AMP: Remove hci_conn receiving error command status Andrei Emeltchenko
2012-10-25 12:20     ` [RFCv1 09/11] Bluetooth: Disconnect logical link when deleteing chan Andrei Emeltchenko
2012-10-25 12:20     ` [RFCv1 10/11] Bluetooth: Add put(hcon) when deleting hchan Andrei Emeltchenko
2012-10-25 13:09       ` Marcel Holtmann
2012-10-25 15:22       ` Gustavo Padovan
2012-10-25 12:20     ` [RFCv1 11/11] Bluetooth: AMP: Check for hs_hcon instead of ctrl_id Andrei Emeltchenko
2012-10-25 13:09       ` Marcel Holtmann
2012-10-25 13:11     ` [RFCv1 00/11] Handling physical and logical link Marcel Holtmann
2012-10-25 13:35       ` Andrei Emeltchenko
2012-10-26 17:27         ` Mat Martineau
2012-10-30 15:52   ` [RFCv2 00/12] " Andrei Emeltchenko
2012-10-30 15:52     ` [RFCv2 01/12] Bluetooth: trivial: Fix braces style and remove empty line Andrei Emeltchenko
2012-10-30 16:45       ` Marcel Holtmann
2012-10-30 15:52     ` [RFCv2 02/12] Bluetooth: Save hs_hchan instead of hs_hcon in loglink complete Andrei Emeltchenko
2012-10-30 16:46       ` Marcel Holtmann
2012-10-30 15:52     ` [RFCv2 03/12] Bluetooth: Return correct L2CAP response type Andrei Emeltchenko
2012-10-30 16:49       ` Marcel Holtmann
2012-10-30 17:16         ` Andrei Emeltchenko
2012-10-30 17:48           ` Marcel Holtmann
2012-10-30 15:52     ` [RFCv2 04/12] Bluetooth: Derive remote and local amp id from chan struct Andrei Emeltchenko
2012-10-30 16:49       ` Marcel Holtmann
2012-10-30 15:52     ` [RFCv2 05/12] Bluetooth: AMP: Add Logical Link Create function Andrei Emeltchenko
2012-10-30 15:52     ` [RFCv2 06/12] Bluetooth: AMP: Process Disc Logical Link Andrei Emeltchenko
2012-10-30 15:52     ` [RFCv2 07/12] Bluetooth: AMP: Process Disc Physical Link Complete evt Andrei Emeltchenko
2012-10-30 15:53     ` [RFCv2 08/12] Bluetooth: AMP: Remove hci_conn receiving error command status Andrei Emeltchenko
2012-10-30 15:53     ` [RFCv2 09/12] Bluetooth: Disconnect logical link when deleteing chan Andrei Emeltchenko
2012-10-30 15:53     ` [RFCv2 10/12] Bluetooth: AMP: Check for hs_hcon instead of ctrl_id Andrei Emeltchenko
2012-10-30 16:50       ` Marcel Holtmann
2012-10-30 15:53     ` [RFCv2 11/12] Bluetooth: AMP: Use l2cap_physical_cfm in phylink complete evt Andrei Emeltchenko
2012-10-30 16:51       ` Marcel Holtmann
2012-10-30 15:53     ` [RFCv2 12/12] Bluetooth: Process Create Chan Request Andrei Emeltchenko
2012-10-30 16:53       ` Marcel Holtmann
2012-10-31 13:46   ` [PATCHv1 00/12] Handling physical and logical link fixes Andrei Emeltchenko
2012-10-31 13:46     ` [PATCHv1 01/12] Bluetooth: trivial: Fix braces style and remove empty line Andrei Emeltchenko
2012-10-31 13:46     ` [PATCHv1 02/12] Bluetooth: Save hs_hchan instead of hs_hcon in loglink complete Andrei Emeltchenko
2012-10-31 13:46     ` [PATCHv1 03/12] Bluetooth: Return correct L2CAP response type Andrei Emeltchenko
2012-10-31 13:46     ` [PATCHv1 04/12] Bluetooth: Derive remote and local amp id from chan struct Andrei Emeltchenko
2012-10-31 13:46     ` [PATCHv1 05/12] Bluetooth: AMP: Add Logical Link Create function Andrei Emeltchenko
2012-10-31 13:46     ` [PATCHv1 06/12] Bluetooth: AMP: Process Disc Logical Link Andrei Emeltchenko
2012-10-31 13:46     ` [PATCHv1 07/12] Bluetooth: AMP: Process Disc Physical Link Complete evt Andrei Emeltchenko
2012-10-31 13:46     ` [PATCHv1 08/12] Bluetooth: AMP: Remove hci_conn receiving error command status Andrei Emeltchenko
2012-10-31 13:46     ` [PATCHv1 09/12] Bluetooth: Disconnect logical link when deleteing chan Andrei Emeltchenko
2012-10-31 13:46     ` [PATCHv1 10/12] Bluetooth: AMP: Check for hs_hcon instead of ctrl_id Andrei Emeltchenko
2012-10-31 13:46     ` [PATCHv1 11/12] Bluetooth: AMP: Use l2cap_physical_cfm in phylink complete evt Andrei Emeltchenko
2012-10-31 18:51       ` Gustavo Padovan
2012-11-01 17:51       ` Mat Martineau
2012-11-02  7:48         ` Andrei Emeltchenko
2012-11-02 15:39           ` Mat Martineau [this message]
2012-11-12  9:26             ` Andrei Emeltchenko
2012-11-13 17:29               ` Mat Martineau
2012-11-13 22:49                 ` Marcel Holtmann
2012-11-14 12:19                 ` Andrei Emeltchenko
2012-10-31 13:46     ` [PATCHv1 12/12] Bluetooth: Process Create Chan Request Andrei Emeltchenko
2012-10-31 16:24       ` Marcel Holtmann
2012-11-01  8:55         ` Andrei Emeltchenko
2012-11-01 13:37         ` [PATCH 1/2] " Andrei Emeltchenko
2012-11-01 13:37           ` [PATCH 2/2] Bluetooth: Rename ctrl_id to remote_amp_id Andrei Emeltchenko
2012-11-02  0:31             ` Marcel Holtmann
2012-11-02  0:30           ` [PATCH 1/2] Bluetooth: Process Create Chan Request Marcel Holtmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.02.1211020808010.29427@mathewm-linux \
    --to=mathewm@codeaurora.org \
    --cc=Andrei.Emeltchenko.news@gmail.com \
    --cc=linux-bluetooth@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).