Commit 66f8455a authored by Johan Hedberg's avatar Johan Hedberg Committed by Marcel Holtmann
Browse files

Bluetooth: Convert pend_le_reports into a list



To simplify manipulation and lookup of hci_conn_params entries of the
type HCI_AUTO_CONN_REPORT it makes sense to store them in their own
list. The new action list_head in hci_conn_params is used for this
purpose.

Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 93450c75
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -312,7 +312,7 @@ struct hci_dev {
	struct list_head	le_white_list;
	struct list_head	le_conn_params;
	struct list_head	pend_le_conns;
	unsigned int		pend_le_reports;
	struct list_head	pend_le_reports;

	struct hci_dev_stats	stat;

+11 −6
Original line number Diff line number Diff line
@@ -3529,7 +3529,7 @@ int hci_conn_params_set(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,

	if (params->auto_connect == HCI_AUTO_CONN_REPORT &&
	    auto_connect != HCI_AUTO_CONN_REPORT)
		hdev->pend_le_reports--;
		list_del_init(&params->action);

	switch (auto_connect) {
	case HCI_AUTO_CONN_DISABLED:
@@ -3537,8 +3537,11 @@ int hci_conn_params_set(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,
		hci_pend_le_conn_del(hdev, params);
		break;
	case HCI_AUTO_CONN_REPORT:
		if (params->auto_connect != HCI_AUTO_CONN_REPORT)
			hdev->pend_le_reports++;
		if (params->auto_connect != HCI_AUTO_CONN_REPORT) {
			list_del_init(&params->action);
			list_add(&params->action,
				 &hdev->pend_le_reports);
		}
		hci_pend_le_conn_del(hdev, params);
		break;
	case HCI_AUTO_CONN_ALWAYS:
@@ -3565,7 +3568,7 @@ void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type)
		return;

	if (params->auto_connect == HCI_AUTO_CONN_REPORT)
		hdev->pend_le_reports--;
		list_del_init(&params->action);

	hci_pend_le_conn_del(hdev, params);

@@ -3599,7 +3602,7 @@ void hci_conn_params_clear_enabled(struct hci_dev *hdev)
		if (params->auto_connect == HCI_AUTO_CONN_DISABLED)
			continue;
		if (params->auto_connect == HCI_AUTO_CONN_REPORT)
			hdev->pend_le_reports--;
			list_del_init(&params->action);
		list_del(&params->list);
		kfree(params);
	}
@@ -3859,6 +3862,7 @@ struct hci_dev *hci_alloc_dev(void)
	INIT_LIST_HEAD(&hdev->le_white_list);
	INIT_LIST_HEAD(&hdev->le_conn_params);
	INIT_LIST_HEAD(&hdev->pend_le_conns);
	INIT_LIST_HEAD(&hdev->pend_le_reports);
	INIT_LIST_HEAD(&hdev->conn_hash.list);

	INIT_WORK(&hdev->rx_work, hci_rx_work);
@@ -5362,7 +5366,8 @@ void hci_update_background_scan(struct hci_dev *hdev)

	hci_req_init(&req, hdev);

	if (list_empty(&hdev->pend_le_conns) && !hdev->pend_le_reports) {
	if (list_empty(&hdev->pend_le_conns) &&
	    list_empty(&hdev->pend_le_reports)) {
		/* If there is no pending LE connections or devices
		 * to be scanned for, we should stop the background
		 * scanning.
+1 −1
Original line number Diff line number Diff line
@@ -4240,7 +4240,7 @@ static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
				return;
		}

		if (!hdev->pend_le_reports)
		if (list_empty(&hdev->pend_le_reports))
			return;

		if (type == LE_ADV_DIRECT_IND)
+2 −2
Original line number Diff line number Diff line
@@ -5226,7 +5226,7 @@ static int remove_device(struct sock *sk, struct hci_dev *hdev,
		}

		if (params->auto_connect == HCI_AUTO_CONN_REPORT)
			hdev->pend_le_reports--;
			list_del_init(&params->action);

		hci_pend_le_conn_del(hdev, params);
		list_del(&params->list);
@@ -6540,7 +6540,7 @@ void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
	if (!hci_discovery_active(hdev)) {
		if (link_type == ACL_LINK)
			return;
		if (link_type == LE_LINK && !hdev->pend_le_reports)
		if (link_type == LE_LINK && list_empty(&hdev->pend_le_reports))
			return;
	}