2011-07-20 19:12:11

by Szymon Janc

[permalink] [raw]
Subject: [PATCH] Bluetooth: Increase command tx timeout

Some CSR chips require more time for HCI reset command to complete.
Too short timeout caused next command being sent before reset
complete event resulting in
[23101.792031] hci_cmd_timer: hci0 command tx timeout
[23102.792046] hci_cmd_timer: hci0 command tx timeout
after pluging in dongle and non functional bt.

Signed-off-by: Szymon Janc <[email protected]>
---
include/net/bluetooth/hci.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index be30aab..12a527c 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -121,7 +121,7 @@ enum {
#define HCI_PAIRING_TIMEOUT (60000) /* 60 seconds */
#define HCI_IDLE_TIMEOUT (6000) /* 6 seconds */
#define HCI_INIT_TIMEOUT (10000) /* 10 seconds */
-#define HCI_CMD_TIMEOUT (1000) /* 1 seconds */
+#define HCI_CMD_TIMEOUT (3000) /* 3 seconds */

/* HCI data types */
#define HCI_COMMAND_PKT 0x01
--
1.7.5.4




2011-07-26 19:52:23

by Szymon Janc

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Increase command tx timeout

Hi Peter,

> Respectfully, I disagree that this is the correct fix for this problem.
>
> After an HCI_Reset, *no* hci commands should be issued until after the
> *successful* Command Complete is received. IMHO, the current code
> suffers two defects:
> - it doesn't wait for Command Complete after the Reset command is sent
> - it ignores the result code from that Command Complete
>
> I believe the proper fix is to _loop_ over the HCI_Reset until a
> successful Command Complete is received.

Yes, You've got a point.. I've already prepared and tested a proper fix and
will send it shortly.

Thanks for advice!

--
Szymon K. Janc
[email protected] // GG: 1383435


2011-07-21 16:14:43

by Peter Hurley

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Increase command tx timeout

Hi Szymon,

On Wed, 2011-07-20 at 15:12 -0400, Szymon Janc wrote:
> Some CSR chips require more time for HCI reset command to complete.
> Too short timeout caused next command being sent before reset
> complete event resulting in
> [23101.792031] hci_cmd_timer: hci0 command tx timeout
> [23102.792046] hci_cmd_timer: hci0 command tx timeout
> after pluging in dongle and non functional bt.
>
> Signed-off-by: Szymon Janc <[email protected]>
> ---
> include/net/bluetooth/hci.h | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> index be30aab..12a527c 100644
> --- a/include/net/bluetooth/hci.h
> +++ b/include/net/bluetooth/hci.h
> @@ -121,7 +121,7 @@ enum {
> #define HCI_PAIRING_TIMEOUT (60000) /* 60 seconds */
> #define HCI_IDLE_TIMEOUT (6000) /* 6 seconds */
> #define HCI_INIT_TIMEOUT (10000) /* 10 seconds */
> -#define HCI_CMD_TIMEOUT (1000) /* 1 seconds */
> +#define HCI_CMD_TIMEOUT (3000) /* 3 seconds */
>
> /* HCI data types */
> #define HCI_COMMAND_PKT 0x01

Respectfully, I disagree that this is the correct fix for this problem.

After an HCI_Reset, *no* hci commands should be issued until after the
*successful* Command Complete is received. IMHO, the current code
suffers two defects:
- it doesn't wait for Command Complete after the Reset command is sent
- it ignores the result code from that Command Complete

I believe the proper fix is to _loop_ over the HCI_Reset until a
successful Command Complete is received.

Regards,
Peter