2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00

Bluetooth: hci_core: Fix not accounting for BIS/CIS/PA links separately

This fixes the likes of hci_conn_num(CIS_LINK) returning the total of
ISO connection which includes BIS_LINK as well, so this splits the
iso_num into each link type and introduces hci_iso_num that can be used
in places where the total number of ISO connection still needs to be
used.

Fixes: 23205562ff ("Bluetooth: separate CIS_LINK and BIS_LINK link types")
Fixes: a7bcffc673 ("Bluetooth: Add PA_LINK to distinguish BIG sync and PA sync connections")
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This commit is contained in:
Luiz Augusto von Dentz 2025-08-14 11:57:19 -04:00
parent e489317d2f
commit 9d4b01a0bf

View File

@ -129,7 +129,9 @@ struct hci_conn_hash {
struct list_head list; struct list_head list;
unsigned int acl_num; unsigned int acl_num;
unsigned int sco_num; unsigned int sco_num;
unsigned int iso_num; unsigned int cis_num;
unsigned int bis_num;
unsigned int pa_num;
unsigned int le_num; unsigned int le_num;
unsigned int le_num_peripheral; unsigned int le_num_peripheral;
}; };
@ -1014,9 +1016,13 @@ static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
h->sco_num++; h->sco_num++;
break; break;
case CIS_LINK: case CIS_LINK:
h->cis_num++;
break;
case BIS_LINK: case BIS_LINK:
h->bis_num++;
break;
case PA_LINK: case PA_LINK:
h->iso_num++; h->pa_num++;
break; break;
} }
} }
@ -1042,9 +1048,13 @@ static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
h->sco_num--; h->sco_num--;
break; break;
case CIS_LINK: case CIS_LINK:
h->cis_num--;
break;
case BIS_LINK: case BIS_LINK:
h->bis_num--;
break;
case PA_LINK: case PA_LINK:
h->iso_num--; h->pa_num--;
break; break;
} }
} }
@ -1061,9 +1071,11 @@ static inline unsigned int hci_conn_num(struct hci_dev *hdev, __u8 type)
case ESCO_LINK: case ESCO_LINK:
return h->sco_num; return h->sco_num;
case CIS_LINK: case CIS_LINK:
return h->cis_num;
case BIS_LINK: case BIS_LINK:
return h->bis_num;
case PA_LINK: case PA_LINK:
return h->iso_num; return h->pa_num;
default: default:
return 0; return 0;
} }
@ -1073,7 +1085,15 @@ static inline unsigned int hci_conn_count(struct hci_dev *hdev)
{ {
struct hci_conn_hash *c = &hdev->conn_hash; struct hci_conn_hash *c = &hdev->conn_hash;
return c->acl_num + c->sco_num + c->le_num + c->iso_num; return c->acl_num + c->sco_num + c->le_num + c->cis_num + c->bis_num +
c->pa_num;
}
static inline unsigned int hci_iso_count(struct hci_dev *hdev)
{
struct hci_conn_hash *c = &hdev->conn_hash;
return c->cis_num + c->bis_num;
} }
static inline bool hci_conn_valid(struct hci_dev *hdev, struct hci_conn *conn) static inline bool hci_conn_valid(struct hci_dev *hdev, struct hci_conn *conn)