diff options
Diffstat (limited to 'net/bluetooth/hci_sync.c')
| -rw-r--r-- | net/bluetooth/hci_sync.c | 21 | 
1 files changed, 13 insertions, 8 deletions
diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c index eefdb6134ca5..73fc41b68b68 100644 --- a/net/bluetooth/hci_sync.c +++ b/net/bluetooth/hci_sync.c @@ -863,11 +863,17 @@ bool hci_cmd_sync_dequeue_once(struct hci_dev *hdev,  {  	struct hci_cmd_sync_work_entry *entry; -	entry = hci_cmd_sync_lookup_entry(hdev, func, data, destroy); -	if (!entry) +	mutex_lock(&hdev->cmd_sync_work_lock); + +	entry = _hci_cmd_sync_lookup_entry(hdev, func, data, destroy); +	if (!entry) { +		mutex_unlock(&hdev->cmd_sync_work_lock);  		return false; +	} -	hci_cmd_sync_cancel_entry(hdev, entry); +	_hci_cmd_sync_cancel_entry(hdev, entry, -ECANCELED); + +	mutex_unlock(&hdev->cmd_sync_work_lock);  	return true;  } @@ -1601,7 +1607,7 @@ int hci_disable_per_advertising_sync(struct hci_dev *hdev, u8 instance)  	/* If periodic advertising already disabled there is nothing to do. */  	adv = hci_find_adv_instance(hdev, instance); -	if (!adv || !adv->periodic || !adv->enabled) +	if (!adv || !adv->periodic_enabled)  		return 0;  	memset(&cp, 0, sizeof(cp)); @@ -1666,7 +1672,7 @@ static int hci_enable_per_advertising_sync(struct hci_dev *hdev, u8 instance)  	/* If periodic advertising already enabled there is nothing to do. */  	adv = hci_find_adv_instance(hdev, instance); -	if (adv && adv->periodic && adv->enabled) +	if (adv && adv->periodic_enabled)  		return 0;  	memset(&cp, 0, sizeof(cp)); @@ -2600,9 +2606,8 @@ static int hci_resume_advertising_sync(struct hci_dev *hdev)  		/* If current advertising instance is set to instance 0x00  		 * then we need to re-enable it.  		 */ -		if (!hdev->cur_adv_instance) -			err = hci_enable_ext_advertising_sync(hdev, -							      hdev->cur_adv_instance); +		if (hci_dev_test_and_clear_flag(hdev, HCI_LE_ADV_0)) +			err = hci_enable_ext_advertising_sync(hdev, 0x00);  	} else {  		/* Schedule for most recent instance to be restarted and begin  		 * the software rotation loop  | 
