linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Florian Grandel <fgrandel@gmail.com>
To: Marcel Holtmann <marcel@holtmann.org>
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: [PATCH v4 02/17] Bluetooth: hci_core: Introduce multi-adv inst list
Date: Sun, 24 May 2015 23:50:06 +0200	[thread overview]
Message-ID: <5562478E.2060908@gmail.com> (raw)
In-Reply-To: <2FCCF3D0-C40F-472E-A2AB-58D1362445A0@holtmann.org>

Hi Marcel,

thanks for reviewing my patches!

On 05/23/2015 11:25 PM, Marcel Holtmann wrote:
> Hi Florian,
>
>> The current hci dev structure only supports a single advertising
>> instance. To support multi-instance advertising it is necessary to
>> introduce a linked list of advertising instances so that multiple
>> advertising instances can be dynamically added and/or removed.
>>
>> In a first step, the existing adv_instance member of the hci_dev
>> struct is supplemented by a linked list of advertising instances.
>> This patch introduces the list and supporting list management
>> infrastructure. The list is not being used yet.
>>
>> Signed-off-by: Florian Grandel <fgrandel@gmail.com>
>> ---
>> include/net/bluetooth/hci_core.h |  16 ++++++
>> net/bluetooth/hci_core.c         | 112 +++++++++++++++++++++++++++++++++++++++
>> net/bluetooth/mgmt.c             |  10 ++--
>> 3 files changed, 133 insertions(+), 5 deletions(-)
>
> I dislike you intermixing userspace with kernel space patches. That makes it so hard to review. Keep them separate.

Ok, I'll provide two separate patch sets instead.

>> diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
>> index a056c2b..36cc941 100644
>> --- a/include/net/bluetooth/hci_core.h
>> +++ b/include/net/bluetooth/hci_core.h
>> @@ -156,6 +156,9 @@ struct oob_data {
>> };
>>
>> struct adv_info {
>> +	struct list_head list;
>> +	struct hci_dev *hdev;
>
> Why is the a copy of hci_dev needed here?

We need this copy of hdev in adv_timeout_expired() - see further down in 
this patch.

Arman and I had a discussion about this on the list - and this was the 
solution we came up with. I'll forward you the thread so you don't have 
to search through the archives.

>> +	bool pending;
>
> What is this pending for. I do not see it being used in this patch.

It's required to make sure that we do not leak advertising instances 
when they have just been created but for some reason the 
add_advertising_complete() command encounters an error status. I'll move 
the introduction of the variable to the patch where it's actually being 
used to make it easier for you to review that part. In any case the 
function to look at is add_advertising_complete().

>> 	struct delayed_work timeout_exp;
>> 	__u8	instance;
>> 	__u32	flags;
>> @@ -166,6 +169,8 @@ struct adv_info {
>> 	__u8	scan_rsp_data[HCI_MAX_AD_LENGTH];
>> };
>>
>> +#define HCI_MAX_ADV_INSTANCES		1
>> +
>> #define HCI_MAX_SHORT_NAME_LENGTH	10
>>
>> /* Default LE RPA expiry time, 15 minutes */
>> @@ -374,6 +379,9 @@ struct hci_dev {
>> 	__u8			scan_rsp_data_len;
>>
>> 	struct adv_info		adv_instance;
>> +	struct list_head	adv_instances;
>> +	unsigned int		adv_instance_cnt;
>> +	__u8			cur_adv_instance;
>>
>> 	__u8			irk[16];
>> 	__u32			rpa_timeout;
>> @@ -1007,6 +1015,14 @@ int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
>> int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
>> 			       u8 bdaddr_type);
>>
>> +void hci_adv_instances_clear(struct hci_dev *hdev);
>> +struct adv_info *hci_find_adv_instance(struct hci_dev *hdev, u8 instance);
>> +int hci_add_adv_instance(struct hci_dev *hdev, u8 instance, u32 flags,
>> +			 u16 adv_data_len, u8 *adv_data,
>> +			 u16 scan_rsp_len, u8 *scan_rsp_data,
>> +			 work_func_t timeout_work, u16 timeout);
>> +int hci_remove_adv_instance(struct hci_dev *hdev, u8 instance);
>> +
>> void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
>>
>> int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb);
>> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
>> index 476709b..de00e21 100644
>> --- a/net/bluetooth/hci_core.c
>> +++ b/net/bluetooth/hci_core.c
>> @@ -2613,6 +2613,114 @@ int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
>> 	return 0;
>> }
>>
>> +/* This function requires the caller holds hdev->lock */
>> +struct adv_info *hci_find_adv_instance(struct hci_dev *hdev, u8 instance)
>> +{
>> +	struct adv_info *adv_instance;
>> +
>> +	list_for_each_entry(adv_instance, &hdev->adv_instances, list) {
>> +		if (adv_instance->instance == instance)
>> +			return adv_instance;
>> +	}
>> +
>> +	return NULL;
>> +}
>> +
>> +/* This function requires the caller holds hdev->lock */
>> +int hci_remove_adv_instance(struct hci_dev *hdev, u8 instance)
>> +{
>> +	struct adv_info *adv_instance;
>> +
>> +	adv_instance = hci_find_adv_instance(hdev, instance);
>> +	if (!adv_instance)
>> +		return -ENOENT;
>> +
>> +	BT_DBG("%s removing %dMR", hdev->name, instance);
>> +
>> +	if (adv_instance->timeout)
>> +		cancel_delayed_work(&adv_instance->timeout_exp);
>> +
>> +	list_del(&adv_instance->list);
>> +	kfree(adv_instance);
>> +
>> +	hdev->adv_instance_cnt--;
>> +
>> +	return 0;
>> +}
>> +
>> +/* This function requires the caller holds hdev->lock */
>> +void hci_adv_instances_clear(struct hci_dev *hdev)
>> +{
>> +	struct adv_info *adv_instance, *n;
>> +
>> +	list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances, list) {
>> +		if (adv_instance->timeout)
>> +			cancel_delayed_work(&adv_instance->timeout_exp);
>> +
>> +		list_del(&adv_instance->list);
>> +		kfree(adv_instance);
>> +	}
>> +
>> +	hdev->adv_instance_cnt = 0;
>> +}
>> +
>> +/* This function requires the caller holds hdev->lock */
>> +int hci_add_adv_instance(struct hci_dev *hdev, u8 instance, u32 flags,
>> +			 u16 adv_data_len, u8 *adv_data,
>> +			 u16 scan_rsp_len, u8 *scan_rsp_data,
>> +			 work_func_t timeout_work, u16 timeout)
>> +{
>> +	struct adv_info *adv_instance;
>> +
>> +	adv_instance = hci_find_adv_instance(hdev, instance);
>> +	if (adv_instance) {
>> +		if (adv_instance->timeout)
>> +			cancel_delayed_work(&adv_instance->timeout_exp);
>> +
>> +		memset(adv_instance->adv_data, 0,
>> +		       sizeof(adv_instance->adv_data));
>> +		memset(adv_instance->scan_rsp_data, 0,
>> +		       sizeof(adv_instance->scan_rsp_data));
>> +	} else {
>> +		if (hdev->adv_instance_cnt >= HCI_MAX_ADV_INSTANCES)
>> +			return -EOVERFLOW;
>> +
>> +		adv_instance = kmalloc(sizeof(*adv_instance), GFP_KERNEL);
>> +		if (!adv_instance)
>> +			return -ENOMEM;
>> +
>> +		memset(adv_instance, 0, sizeof(*adv_instance));
>> +		adv_instance->hdev = hdev;
>> +		adv_instance->pending = true;
>> +		INIT_DELAYED_WORK(&adv_instance->timeout_exp, timeout_work);
>> +		adv_instance->instance = instance;
>> +		list_add(&adv_instance->list, &hdev->adv_instances);
>> +		hdev->adv_instance_cnt++;
>> +	}
>> +
>> +	adv_instance->flags = flags;
>> +	adv_instance->adv_data_len = adv_data_len;
>> +	adv_instance->scan_rsp_len = scan_rsp_len;
>> +
>> +	if (adv_data_len)
>> +		memcpy(adv_instance->adv_data, adv_data, adv_data_len);
>> +
>> +	if (scan_rsp_len)
>> +		memcpy(adv_instance->scan_rsp_data,
>> +		       scan_rsp_data, scan_rsp_len);
>> +
>> +	adv_instance->timeout = timeout;
>> +
>> +	if (timeout)
>> +		queue_delayed_work(hdev->workqueue,
>> +				   &adv_instance->timeout_exp,
>> +				   msecs_to_jiffies(timeout * 1000));
>> +
>> +	BT_DBG("%s for %dMR", hdev->name, instance);
>> +
>> +	return 0;
>> +}
>> +
>> struct bdaddr_list *hci_bdaddr_list_lookup(struct list_head *bdaddr_list,
>> 					 bdaddr_t *bdaddr, u8 type)
>> {
>> @@ -3016,6 +3124,8 @@ struct hci_dev *hci_alloc_dev(void)
>> 	hdev->manufacturer = 0xffff;	/* Default to internal use */
>> 	hdev->inq_tx_power = HCI_TX_POWER_INVALID;
>> 	hdev->adv_tx_power = HCI_TX_POWER_INVALID;
>> +	hdev->adv_instance_cnt = 0;
>> +	hdev->cur_adv_instance = 0x00;
>>
>> 	hdev->sniff_max_interval = 800;
>> 	hdev->sniff_min_interval = 80;
>> @@ -3057,6 +3167,7 @@ struct hci_dev *hci_alloc_dev(void)
>> 	INIT_LIST_HEAD(&hdev->pend_le_conns);
>> 	INIT_LIST_HEAD(&hdev->pend_le_reports);
>> 	INIT_LIST_HEAD(&hdev->conn_hash.list);
>> +	INIT_LIST_HEAD(&hdev->adv_instances);
>>
>> 	INIT_WORK(&hdev->rx_work, hci_rx_work);
>> 	INIT_WORK(&hdev->cmd_work, hci_cmd_work);
>> @@ -3250,6 +3361,7 @@ void hci_unregister_dev(struct hci_dev *hdev)
>> 	hci_smp_ltks_clear(hdev);
>> 	hci_smp_irks_clear(hdev);
>> 	hci_remote_oob_data_clear(hdev);
>> +	hci_adv_instances_clear(hdev);
>> 	hci_bdaddr_list_clear(&hdev->le_white_list);
>> 	hci_conn_params_clear_all(hdev);
>> 	hci_discovery_filter_clear(hdev);
>> diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
>> index 7fd87e7..ce25b6d 100644
>> --- a/net/bluetooth/mgmt.c
>> +++ b/net/bluetooth/mgmt.c
>> @@ -6813,7 +6813,7 @@ static int read_adv_features(struct sock *sk, struct hci_dev *hdev,
>> 	rp->supported_flags = cpu_to_le32(supported_flags);
>> 	rp->max_adv_data_len = HCI_MAX_AD_LENGTH;
>> 	rp->max_scan_rsp_len = HCI_MAX_AD_LENGTH;
>> -	rp->max_instances = 1;
>> +	rp->max_instances = HCI_MAX_ADV_INSTANCES;
>>
>> 	/* Currently only one instance is supported, so simply return the
>> 	 * current instance number.
>> @@ -6916,11 +6916,11 @@ unlock:
>>
>> static void adv_timeout_expired(struct work_struct *work)
>> {
>> -	struct hci_dev *hdev = container_of(work, struct hci_dev,
>> -					    adv_instance.timeout_exp.work);
>> -
>> -	hdev->adv_instance.timeout = 0;
>> +	struct adv_info *adv_instance = container_of(work, struct adv_info,
>> +						     timeout_exp.work);
>> +	struct hci_dev *hdev = adv_instance->hdev;
>>
>> +	adv_instance->timeout = 0;
>> 	hci_dev_lock(hdev);
>> 	clear_adv_instance(hdev);
>> 	hci_dev_unlock(hdev);
>
> Regards
>
> Marcel
>
>

Cheers!

Florian

  reply	other threads:[~2015-05-24 21:50 UTC|newest]

Thread overview: 172+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-04 15:43 [PATCH] Bluetooth: hci_core/mgmt: Change adv inst to list Florian Grandel
2015-04-05 18:21 ` [PATCH v2] " Florian Grandel
2015-04-09  9:49   ` Johan Hedberg
2015-04-09 10:28     ` Florian Grandel
2015-04-10  2:30     ` [PATCH v3 0/2] Bluetooth: Multi-Advertising Infrastructure Florian Grandel
2015-04-21  1:52       ` jerico.dev
2015-04-30 15:33       ` [PATCH v4 00/17] BlueZ/Bluetooth: Multi-advertising infrastructure Florian Grandel
2015-05-06 10:27         ` jerico.dev
2015-05-24 22:38         ` [PATCH v5 00/16] Bluetooth: " Florian Grandel
2015-05-25  0:52           ` Marcel Holtmann
2015-05-25  7:51             ` Florian Grandel
2015-05-26  0:34           ` [PATCH v6 " Florian Grandel
2015-05-27 19:23             ` Marcel Holtmann
2015-05-27 21:04               ` Florian Grandel
2015-05-31  1:20                 ` Johan Hedberg
2015-06-01 12:19                   ` Florian Grandel
2015-06-13  3:40             ` [PATCH v7 00/20] Bluetooth: Multi-advertising Florian Grandel
2015-06-18  1:16               ` [PATCH v8 00/20] Multi-advertising Florian Grandel
2015-06-18 16:58                 ` Marcel Holtmann
2015-06-18  1:16               ` [PATCH v8 01/20] Bluetooth: hci_core/mgmt: Introduce multi-adv list Florian Grandel
2015-06-18  1:16               ` [PATCH v8 02/20] Bluetooth: hci_core/mgmt: move adv timeout to hdev Florian Grandel
2015-06-18  1:16               ` [PATCH v8 03/20] Bluetooth: mgmt: dry update_scan_rsp_data() Florian Grandel
2015-06-18  1:16               ` [PATCH v8 04/20] Bluetooth: mgmt: rename update_*_data_for_instance() Florian Grandel
2015-06-18  1:16               ` [PATCH v8 05/20] Bluetooth: mgmt: multi adv for read_adv_features() Florian Grandel
2015-06-18  1:16               ` [PATCH v8 06/20] Bluetooth: mgmt: multi adv for get_current_adv_instance() Florian Grandel
2015-06-18  1:16               ` [PATCH v8 07/20] Bluetooth: mgmt: multi adv for get_adv_instance_flags() Florian Grandel
2015-06-18  1:16               ` [PATCH v8 08/20] Bluetooth: mgmt: improve get_adv_instance_flags() readability Florian Grandel
2015-06-18  1:16               ` [PATCH v8 09/20] Bluetooth: mgmt: multi adv for enable_advertising() Florian Grandel
2015-06-18  1:16               ` [PATCH v8 10/20] Bluetooth: mgmt: multi adv for create_instance_scan_rsp_data() Florian Grandel
2015-06-18  1:16               ` [PATCH v8 11/20] Bluetooth: mgmt: multi adv for create_instance_adv_data() Florian Grandel
2015-06-18  1:16               ` [PATCH v8 12/20] Bluetooth: mgmt: multi adv for set_advertising*() Florian Grandel
2015-06-18  1:16               ` [PATCH v8 13/20] Bluetooth: mgmt: multi adv for clear_adv_instances() Florian Grandel
2015-06-18  1:16               ` [PATCH v8 14/20] Bluetooth: mgmt/hci_core: multi-adv for add_advertising*() Florian Grandel
2015-06-18  1:16               ` [PATCH v8 15/20] Bluetooth: mgmt: multi adv for remove_advertising*() Florian Grandel
2015-06-18  1:16               ` [PATCH v8 16/20] Bluetooth: mgmt: program multi-adv on power on Florian Grandel
2015-06-18  1:16               ` [PATCH v8 17/20] Bluetooth: mgmt: multi-adv for trigger_le_scan() Florian Grandel
2015-06-18  1:16               ` [PATCH v8 18/20] Bluetooth: mgmt: multi-adv for mgmt_reenable_advertising() Florian Grandel
2015-06-18  1:16               ` [PATCH v8 19/20] Bluetooth: hci_core: remove obsolete adv_instance Florian Grandel
2015-06-18  1:16               ` [PATCH v8 20/20] Bluetooth: hci_core: increase max adv inst Florian Grandel
2015-06-13  3:40             ` [PATCH v7 01/20] Bluetooth: hci_core/mgmt: Introduce multi-adv list Florian Grandel
2015-06-13  3:40             ` [PATCH v7 02/20] Bluetooth: hci_core/mgmt: move adv timeout to hdev Florian Grandel
2015-06-13  3:40             ` [PATCH v7 03/20] Bluetooth: mgmt: dry update_scan_rsp_data() Florian Grandel
2015-06-13  3:40             ` [PATCH v7 04/20] Bluetooth: mgmt: rename update_*_data_for_instance() Florian Grandel
2015-06-13  3:40             ` [PATCH v7 05/20] Bluetooth: mgmt: multi adv for read_adv_features() Florian Grandel
2015-06-13  3:40             ` [PATCH v7 06/20] Bluetooth: mgmt: multi adv for get_current_adv_instance() Florian Grandel
2015-06-13  3:41             ` [PATCH v7 07/20] Bluetooth: mgmt: multi adv for get_adv_instance_flags() Florian Grandel
2015-06-13  3:41             ` [PATCH v7 08/20] Bluetooth: mgmt: improve get_adv_instance_flags() readability Florian Grandel
2015-06-13  3:41             ` [PATCH v7 09/20] Bluetooth: mgmt: multi adv for enable_advertising() Florian Grandel
2015-06-13  3:41             ` [PATCH v7 10/20] Bluetooth: mgmt: multi adv for create_instance_scan_rsp_data() Florian Grandel
2015-06-13  3:41             ` [PATCH v7 11/20] Bluetooth: mgmt: multi adv for create_instance_adv_data() Florian Grandel
2015-06-13  3:41             ` [PATCH v7 12/20] Bluetooth: mgmt: multi adv for set_advertising*() Florian Grandel
2015-06-13  3:41             ` [PATCH v7 13/20] Bluetooth: mgmt: multi adv for clear_adv_instances() Florian Grandel
2015-06-13  3:41             ` [PATCH v7 14/20] Bluetooth: mgmt/hci_core: multi-adv for add_advertising*() Florian Grandel
2015-06-13  3:41             ` [PATCH v7 15/20] Bluetooth: mgmt: multi adv for remove_advertising*() Florian Grandel
2015-06-13  3:41             ` [PATCH v7 16/20] Bluetooth: mgmt: program multi-adv on power on Florian Grandel
2015-06-13  3:41             ` [PATCH v7 17/20] Bluetooth: mgmt: multi-adv for trigger_le_scan() Florian Grandel
2015-06-13  3:41             ` [PATCH v7 18/20] Bluetooth: mgmt: multi-adv for mgmt_reenable_advertising() Florian Grandel
2015-06-13  3:41             ` [PATCH v7 19/20] Bluetooth: hci_core: remove obsolete adv_instance Florian Grandel
2015-06-13  3:41             ` [PATCH v7 20/20] Bluetooth: hci_core: increase max adv inst Florian Grandel
2015-05-26  0:34           ` [PATCH v6 01/16] Bluetooth: hci_core: Introduce multi-adv inst list Florian Grandel
2015-05-26  0:34           ` [PATCH v6 02/16] Bluetooth: mgmt: dry update_scan_rsp_data() Florian Grandel
2015-05-26  0:34           ` [PATCH v6 03/16] Bluetooth: mgmt: multi adv for read_adv_features() Florian Grandel
2015-05-26  0:34           ` [PATCH v6 04/16] Bluetooth: mgmt: multi adv for get_current_adv_instance() Florian Grandel
2015-05-26  0:34           ` [PATCH v6 05/16] Bluetooth: mgmt: multi adv for get_adv_instance_flags() Florian Grandel
2015-05-26  0:34           ` [PATCH v6 06/16] Bluetooth: mgmt: improve get_adv_instance_flags() readability Florian Grandel
2015-05-26  0:34           ` [PATCH v6 07/16] Bluetooth: mgmt: multi adv for enable_advertising() Florian Grandel
2015-05-26  0:34           ` [PATCH v6 08/16] Bluetooth: mgmt: use current adv instance in set_advertising() Florian Grandel
2015-05-26  0:34           ` [PATCH v6 09/16] Bluetooth: mgmt: multi adv for create_instance_scan_rsp_data() Florian Grandel
2015-05-26  0:34           ` [PATCH v6 10/16] Bluetooth: mgmt: multi adv for create_instance_adv_data() Florian Grandel
2015-05-26  0:34           ` [PATCH v6 11/16] Bluetooth: mgmt: refactor update_*_data() Florian Grandel
2015-05-26  0:34           ` [PATCH v6 12/16] Bluetooth: mgmt: multi adv for set_advertising_complete() Florian Grandel
2015-05-26  0:34           ` [PATCH v6 13/16] Bluetooth: mgmt: multi adv for add_advertising() Florian Grandel
2015-05-26  0:34           ` [PATCH v6 14/16] Bluetooth: mgmt: multi adv for clear_adv_instances() Florian Grandel
2015-05-26  0:34           ` [PATCH v6 15/16] Bluetooth: mgmt: multi adv for remove_advertising() Florian Grandel
2015-05-26  0:34           ` [PATCH v6 16/16] Bluetooth: hci_core: remove obsolete adv_instance Florian Grandel
2015-05-24 22:38         ` [PATCH v5 01/16] Bluetooth: hci_core: Introduce multi-adv inst list Florian Grandel
2015-05-24 22:39         ` [PATCH v5 02/16] Bluetooth: mgmt: dry update_scan_rsp_data() Florian Grandel
2015-05-24 22:39         ` [PATCH v5 03/16] Bluetooth: mgmt: multi adv for read_adv_features() Florian Grandel
2015-05-24 22:39         ` [PATCH v5 04/16] Bluetooth: mgmt: multi adv for get_current_adv_instance() Florian Grandel
2015-05-24 22:39         ` [PATCH v5 05/16] Bluetooth: mgmt: multi adv for get_adv_instance_flags() Florian Grandel
2015-05-24 22:39         ` [PATCH v5 06/16] Bluetooth: mgmt: improve get_adv_instance_flags() readability Florian Grandel
2015-05-24 22:39         ` [PATCH v5 07/16] Bluetooth: mgmt: multi adv for enable_advertising() Florian Grandel
2015-05-24 22:39         ` [PATCH v5 08/16] Bluetooth: mgmt: use current adv instance in set_advertising() Florian Grandel
2015-05-24 22:39         ` [PATCH v5 09/16] Bluetooth: mgmt: multi adv for create_instance_scan_rsp_data() Florian Grandel
2015-05-24 22:39         ` [PATCH v5 10/16] Bluetooth: mgmt: multi adv for create_instance_adv_data() Florian Grandel
2015-05-24 22:39         ` [PATCH v5 11/16] Bluetooth: mgmt: refactor update_*_data() Florian Grandel
2015-05-24 22:39         ` [PATCH v5 12/16] Bluetooth: mgmt: multi adv for set_advertising_complete() Florian Grandel
2015-05-25  0:25           ` Marcel Holtmann
2015-05-25  8:03             ` Florian Grandel
2015-05-24 22:39         ` [PATCH v5 13/16] Bluetooth: mgmt: multi adv for add_advertising() Florian Grandel
2015-05-24 22:39         ` [PATCH v5 14/16] Bluetooth: mgmt: multi adv for clear_adv_instances() Florian Grandel
2015-05-24 22:39         ` [PATCH v5 15/16] Bluetooth: mgmt: multi adv for remove_advertising() Florian Grandel
2015-05-24 22:39         ` [PATCH v5 16/16] Bluetooth: hci_core: remove obsolete adv_instance Florian Grandel
2015-05-24 22:40         ` [BlueZ v5] tools/mgmt_tester: expect 0 rp when removing all adv inst Florian Grandel
2015-05-25  0:52           ` Marcel Holtmann
2015-05-25  7:53             ` Florian Grandel
2015-05-26  0:35           ` [BlueZ v6 0/4] tools/mgmt-tester: multi-advertising additions Florian Grandel
2015-05-26  1:22             ` [BlueZ v7 " Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 00/15] doc/tests/btmgmt: multi-advertising Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 00/16] Multi-advertising Florian Grandel
2015-06-18  5:55                   ` Johan Hedberg
2015-06-18  7:11                     ` Johan Hedberg
2015-06-18 10:19                   ` Johan Hedberg
2015-06-18  1:17                 ` [BlueZ v9 01/16] doc/mgmt-api: multi-adv implementation details Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 02/16] doc/mgmt-api: fix typos Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 03/16] tools/btmgmt: make inst duration configurable Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 04/16] tools/mgmt-tester: error message when unexp params Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 05/16] tools/mgmt-tester: expect 0 rp when removing all adv inst Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 06/16] tools/mgmt-tester: comment add adv test setup Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 07/16] tools/mgmt-tester: rename add adv tests Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 08/16] tools/mgmt-tester: increase max adv inst Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 09/16] tools/mgmt-tester: keep instances on power cycle Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 10/16] tools/mgmt-tester: test adv inst override Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 11/16] tools/mgmt-tester: make test timeout configurable Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 12/16] tools/mgmt-tester: allow for event-only tests Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 13/16] tools/mgmt-tester: test advertising timeout Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 14/16] tools/mgmt-tester: test le off Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 15/16] tools/mgmt-tester: fix duplicate code Florian Grandel
2015-06-18  1:17                 ` [BlueZ v9 16/16] tools/mgmt-tester: test multi-adv Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 01/15] doc/mgmt-api: multi-adv implementation details Florian Grandel
2015-06-15 11:33                 ` Marcel Holtmann
2015-06-16  9:59                   ` Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 02/15] doc/mgmt-api: fix typos Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 03/15] tools/btmgmt: make inst duration configurable Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 04/15] tools/mgmt-tester: error message when unexp params Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 05/15] tools/mgmt-tester: expect 0 rp when removing all adv inst Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 06/15] tools/mgmt-tester: comment add adv test setup Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 07/15] tools/mgmt-tester: rename add adv tests Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 08/15] tools/mgmt-tester: increase max adv inst Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 09/15] tools/mgmt-tester: test adv inst override Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 10/15] tools/mgmt-tester: make test timeout configurable Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 11/15] tools/mgmt-tester: allow for event-only tests Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 12/15] tools/mgmt-tester: test advertising timeout Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 13/15] tools/mgmt-tester: test le off Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 14/15] tools/mgmt-tester: fix duplicate code Florian Grandel
2015-06-13  3:42               ` [BlueZ v8 15/15] tools/mgmt-tester: test multi-adv Florian Grandel
2015-05-26  1:22             ` [BlueZ v7 1/4] tools/mgmt_tester: expect 0 rp when removing all adv inst Florian Grandel
2015-05-26  1:22             ` [BlueZ v7 2/4] tools/mgmt-tester: comment add adv test setup Florian Grandel
2015-05-26  1:22             ` [BlueZ v7 3/4] tools/mgmt-tester: rename add adv tests Florian Grandel
2015-05-26  1:22             ` [BlueZ v7 4/4] tools/mgmt-tester: add an additional add adv test Florian Grandel
2015-05-26  0:35           ` [BlueZ v6 1/4] tools/mgmt_tester: expect 0 rp when removing all adv inst Florian Grandel
2015-05-26  0:35           ` [BlueZ v6 2/4] tools/mgmt-tester: comment add adv test setup Florian Grandel
2015-05-26  0:35           ` [BlueZ v6 3/4] tools/mgmt-tester: rename add adv tests Florian Grandel
2015-05-26  0:35           ` [BlueZ v6 4/4] tools/mgmt-tester: add an additional add adv test Florian Grandel
2015-04-30 15:33       ` [BlueZ v4 01/17] tools/mgmt_tester: expect 0 rp when removing all adv inst Florian Grandel
2015-04-30 15:33       ` [PATCH v4 02/17] Bluetooth: hci_core: Introduce multi-adv inst list Florian Grandel
2015-05-23 21:25         ` Marcel Holtmann
2015-05-24 21:50           ` Florian Grandel [this message]
2015-04-30 15:33       ` [PATCH v4 03/17] Bluetooth: mgmt: dry update_scan_rsp_data() Florian Grandel
2015-04-30 15:33       ` [PATCH v4 04/17] Bluetooth: mgmt: multi adv for read_adv_features() Florian Grandel
2015-05-23 21:25         ` Marcel Holtmann
2015-05-24 22:41           ` Florian Grandel
2015-04-30 15:33       ` [PATCH v4 05/17] Bluetooth: mgmt: multi adv for get_current_adv_instance() Florian Grandel
2015-04-30 15:33       ` [PATCH v4 06/17] Bluetooth: mgmt: multi adv for get_adv_instance_flags() Florian Grandel
2015-04-30 15:33       ` [PATCH v4 07/17] Bluetooth: mgmt: improve get_adv_instance_flags() readability Florian Grandel
2015-04-30 15:33       ` [PATCH v4 08/17] Bluetooth: mgmt: multi adv for enable_advertising() Florian Grandel
2015-04-30 15:33       ` [PATCH v4 09/17] Bluetooth: mgmt: use current adv instance in set_advertising() Florian Grandel
2015-04-30 15:33       ` [PATCH v4 10/17] Bluetooth: mgmt: multi adv for create_instance_scan_rsp_data() Florian Grandel
2015-04-30 15:33       ` [PATCH v4 11/17] Bluetooth: mgmt: multi adv for create_instance_adv_data() Florian Grandel
2015-04-30 15:33       ` [PATCH v4 12/17] Bluetooth: mgmt: refactor update_*_data() Florian Grandel
2015-04-30 15:33       ` [PATCH v4 13/17] Bluetooth: mgmt: multi adv for set_advertising_complete() Florian Grandel
2015-04-30 15:33       ` [PATCH v4 14/17] Bluetooth: mgmt: multi adv for add_advertising() Florian Grandel
2015-04-30 15:33       ` [PATCH v4 15/17] Bluetooth: mgmt: multi adv for clear_adv_instances() Florian Grandel
2015-04-30 15:33       ` [PATCH v4 16/17] Bluetooth: multi adv for remove_advertising() Florian Grandel
2015-04-30 15:33       ` [PATCH v4 17/17] Bluetooth: hci_core: Remove obsolete adv_instance Florian Grandel
2015-04-10  2:30     ` [PATCH v3 1/2] Bluetooth: hci_core: Introduce multi-adv inst list Florian Grandel
2015-04-24  0:37       ` Arman Uguray
2015-04-29 12:20         ` Florian Grandel
2015-04-10  2:30     ` [PATCH v3 2/2] Bluetooth: mgmt: Start using " Florian Grandel
2015-04-24  1:33       ` Arman Uguray
2015-04-24 11:43         ` Florian Grandel
2015-04-30 15:46         ` Florian Grandel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5562478E.2060908@gmail.com \
    --to=fgrandel@gmail.com \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=marcel@holtmann.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).