Bluetooth: Add opcode to error message
authorAndrei Emeltchenko <andrei.emeltchenko@intel.com>
Mon, 11 Jun 2012 08:13:08 +0000 (11:13 +0300)
committerGustavo Padovan <gustavo.padovan@collabora.co.uk>
Tue, 12 Jun 2012 03:07:45 +0000 (00:07 -0300)
Sometimes HCI command sending timeouts and gives error message without
specifying which command causes error. Patch makes sure that opcode
is printed to help debugging.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
net/bluetooth/hci_core.c

index e91bf7e15666420466a5b67e715ea0cb0442bb3e..88858963ec21b4cf4cce14bb2288dbd0129f8a47 100644 (file)
@@ -1366,11 +1366,19 @@ int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr)
 }
 
 /* HCI command timer function */
-static void hci_cmd_timer(unsigned long arg)
+static void hci_cmd_timeout(unsigned long arg)
 {
        struct hci_dev *hdev = (void *) arg;
 
-       BT_ERR("%s command tx timeout", hdev->name);
+       if (hdev->sent_cmd) {
+               struct hci_command_hdr *sent = (void *) hdev->sent_cmd->data;
+               u16 opcode = __le16_to_cpu(sent->opcode);
+
+               BT_ERR("%s command 0x%4.4x tx timeout", hdev->name, opcode);
+       } else {
+               BT_ERR("%s command tx timeout", hdev->name);
+       }
+
        atomic_set(&hdev->cmd_cnt, 1);
        queue_work(hdev->workqueue, &hdev->cmd_work);
 }
@@ -1668,7 +1676,7 @@ struct hci_dev *hci_alloc_dev(void)
 
        init_waitqueue_head(&hdev->req_wait_q);
 
-       setup_timer(&hdev->cmd_timer, hci_cmd_timer, (unsigned long) hdev);
+       setup_timer(&hdev->cmd_timer, hci_cmd_timeout, (unsigned long) hdev);
 
        hci_init_sysfs(hdev);
        discovery_init(hdev);