浏览代码

Bluetooth: Add opcode to error message

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>
Andrei Emeltchenko 13 年之前
父节点
当前提交
bda4f23a5c
共有 1 个文件被更改,包括 11 次插入3 次删除
  1. 11 3
      net/bluetooth/hci_core.c

+ 11 - 3
net/bluetooth/hci_core.c

@@ -1366,11 +1366,19 @@ int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr)
 }
 }
 
 
 /* HCI command timer function */
 /* 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;
 	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);
 	atomic_set(&hdev->cmd_cnt, 1);
 	queue_work(hdev->workqueue, &hdev->cmd_work);
 	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);
 	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);
 	hci_init_sysfs(hdev);
 	discovery_init(hdev);
 	discovery_init(hdev);