Bluetooth: Remove HCI_PI_MGMT_INIT flag for sockets
This flag is of no use right now and is in fact harmful in that it prevents the HCI_MGMT flag to be set for any controllers that may need it after the first one that bluetoothd takes into use (the flag is cleared for the first controller so any subsequent ones through the same bluetoothd mgmt socket never get the HCI_MGMT flag set). Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Acked-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
5f15903279
commit
4f87da80a5
|
@ -1034,16 +1034,12 @@ int mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, u8 persistent);
|
||||||
/* HCI info for socket */
|
/* HCI info for socket */
|
||||||
#define hci_pi(sk) ((struct hci_pinfo *) sk)
|
#define hci_pi(sk) ((struct hci_pinfo *) sk)
|
||||||
|
|
||||||
/* HCI socket flags */
|
|
||||||
#define HCI_PI_MGMT_INIT 0
|
|
||||||
|
|
||||||
struct hci_pinfo {
|
struct hci_pinfo {
|
||||||
struct bt_sock bt;
|
struct bt_sock bt;
|
||||||
struct hci_dev *hdev;
|
struct hci_dev *hdev;
|
||||||
struct hci_filter filter;
|
struct hci_filter filter;
|
||||||
__u32 cmsg_mask;
|
__u32 cmsg_mask;
|
||||||
unsigned short channel;
|
unsigned short channel;
|
||||||
unsigned long flags;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* HCI security filter */
|
/* HCI security filter */
|
||||||
|
|
|
@ -659,7 +659,6 @@ static int hci_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_le
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
set_bit(HCI_PI_MGMT_INIT, &hci_pi(sk)->flags);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HCI_CHANNEL_MONITOR:
|
case HCI_CHANNEL_MONITOR:
|
||||||
|
|
|
@ -615,19 +615,17 @@ static void service_cache_off(struct work_struct *work)
|
||||||
|
|
||||||
static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev)
|
static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev)
|
||||||
{
|
{
|
||||||
if (!test_and_clear_bit(HCI_PI_MGMT_INIT, &hci_pi(sk)->flags))
|
if (test_and_set_bit(HCI_MGMT, &hdev->dev_flags))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!test_and_set_bit(HCI_MGMT, &hdev->dev_flags)) {
|
INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off);
|
||||||
INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off);
|
|
||||||
|
|
||||||
/* Non-mgmt controlled devices get this bit set
|
/* Non-mgmt controlled devices get this bit set
|
||||||
* implicitly so that pairing works for them, however
|
* implicitly so that pairing works for them, however
|
||||||
* for mgmt we require user-space to explicitly enable
|
* for mgmt we require user-space to explicitly enable
|
||||||
* it
|
* it
|
||||||
*/
|
*/
|
||||||
clear_bit(HCI_PAIRABLE, &hdev->dev_flags);
|
clear_bit(HCI_PAIRABLE, &hdev->dev_flags);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int read_controller_info(struct sock *sk, struct hci_dev *hdev,
|
static int read_controller_info(struct sock *sk, struct hci_dev *hdev,
|
||||||
|
|
Loading…
Reference in New Issue