From: Johan Hedberg <johan.hedberg@gmail.com>
To: Pavel Machek <pavel@ucw.cz>, "Rafael J. Wysocki" <rjw@sisk.pl>,
kernel list <linux-kernel@vger.kernel.org>,
marcel@holtmann.org, gustavo@padovan.org,
linux-bluetooth@vger.kernel.org
Subject: Re: 3.10-rc: bluetooth disappeared on thinkpad x60 (regression)
Date: Tue, 11 Jun 2013 13:20:25 +0300 [thread overview]
Message-ID: <20130611102025.GA5580@x220> (raw)
In-Reply-To: <20130611072245.GA12463@x220>
[-- Attachment #1: Type: text/plain, Size: 1052 bytes --]
Hi Pavel,
On Tue, Jun 11, 2013, Johan Hedberg wrote:
> On Mon, Jun 10, 2013, Pavel Machek wrote:
> > < HCI Command: Delete Stored Link Key (0x03|0x0012) plen 7
> > bdaddr 00:00:00:00:00:00 all 1
> > > HCI Event: Command Complete (0x0e) plen 4
> > Delete Stored Link Key (0x03|0x0012) ncmd 1
> > status 0x11 deleted 0
> > Error: Unsupported Feature or Parameter Value
>
> Here's the cause of your issue. It's not one of the recently added HCI
> commands but one that's been around for quite some time. I just checked
> and it's even there in kernel 3.9, so I'm surprised that you're saying
> this is a regression since that version. Are you completely sure about
> it?
Could you try if the attached patch helps? It modifies the HCI request
state tracking to allow flagging certain HCI commands as non-critical
and just ignores their failures.
If the patch helps, could you still provide a HCI trace (both plain text
and btsnoop format) of a successful "hciconfig hci0 up"? It might help
create a simpler patch for this issue.
Johan
[-- Attachment #2: del_link_keys.patch --]
[-- Type: text/plain, Size: 3190 bytes --]
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
index 10eb9b3..2ee2520 100644
--- a/include/net/bluetooth/bluetooth.h
+++ b/include/net/bluetooth/bluetooth.h
@@ -265,6 +265,7 @@ typedef void (*hci_req_complete_t)(struct hci_dev *hdev, u8 status);
struct hci_req_ctrl {
bool start;
+ bool ignore_status;
u8 event;
hci_req_complete_t complete;
};
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 7cb6d36..f1d7500 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -1084,7 +1084,7 @@ int hci_req_run(struct hci_request *req, hci_req_complete_t complete);
void hci_req_add(struct hci_request *req, u16 opcode, u32 plen,
const void *param);
void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen,
- const void *param, u8 event);
+ const void *param, u8 event, bool ignore_status);
void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status);
struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index d817c93..c3d5056 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -145,7 +145,7 @@ struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
hci_req_init(&req, hdev);
- hci_req_add_ev(&req, opcode, plen, param, event);
+ hci_req_add_ev(&req, opcode, plen, param, event, false);
hdev->req_status = HCI_REQ_PEND;
@@ -367,7 +367,8 @@ static void bredr_setup(struct hci_request *req)
bacpy(&cp.bdaddr, BDADDR_ANY);
cp.delete_all = 0x01;
- hci_req_add(req, HCI_OP_DELETE_STORED_LINK_KEY, sizeof(cp), &cp);
+ hci_req_add_ev(req, HCI_OP_DELETE_STORED_LINK_KEY, sizeof(cp), &cp,
+ 0, true);
/* Read page scan parameters */
if (req->hdev->hci_ver > BLUETOOTH_VER_1_1) {
@@ -2669,7 +2670,7 @@ int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
/* Queue a command to an asynchronous HCI request */
void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen,
- const void *param, u8 event)
+ const void *param, u8 event, bool ignore_status)
{
struct hci_dev *hdev = req->hdev;
struct sk_buff *skb;
@@ -2694,6 +2695,7 @@ void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen,
bt_cb(skb)->req.start = true;
bt_cb(skb)->req.event = event;
+ bt_cb(skb)->req.ignore_status = ignore_status;
skb_queue_tail(&req->cmd_q, skb);
}
@@ -2701,7 +2703,7 @@ void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen,
void hci_req_add(struct hci_request *req, u16 opcode, u32 plen,
const void *param)
{
- hci_req_add_ev(req, opcode, plen, param, 0);
+ hci_req_add_ev(req, opcode, plen, param, 0, false);
}
/* Get data from the previously sent command */
@@ -3425,6 +3427,10 @@ void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status)
return;
}
+ /* Check for commands whose failures aren't critical */
+ if (bt_cb(hdev->sent_cmd)->req.ignore_status)
+ status = 0;
+
/* If the command succeeded and there's still more commands in
* this request the request is not yet complete.
*/
next prev parent reply other threads:[~2013-06-11 10:20 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-10 9:29 3.10-rc: bluetooth disappeared on thinkpad x60 (regression) Pavel Machek
2013-06-10 10:05 ` Johan Hedberg
2013-06-10 11:04 ` Pavel Machek
2013-06-10 11:59 ` Johan Hedberg
2013-06-10 13:38 ` Pavel Machek
2013-06-10 16:07 ` Johan Hedberg
2013-06-10 19:37 ` Pavel Machek
2013-06-11 7:22 ` Johan Hedberg
2013-06-11 10:20 ` Johan Hedberg [this message]
2013-06-12 11:23 ` Pavel Machek
2013-06-13 7:23 ` Johan Hedberg
2013-06-13 8:04 ` Johan Hedberg
2013-06-13 8:45 ` Pavel Machek
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=20130611102025.GA5580@x220 \
--to=johan.hedberg@gmail.com \
--cc=gustavo@padovan.org \
--cc=linux-bluetooth@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marcel@holtmann.org \
--cc=pavel@ucw.cz \
--cc=rjw@sisk.pl \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.