aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2012-03-02 12:55:56 -0500
committerJohan Hedberg <johan.hedberg@intel.com>2012-03-02 18:28:47 -0500
commit4f87da80a5210e66fb47b0e839f4d05016986f78 (patch)
tree9227fcd778badfaa5190cbdd3bd854039fdc6d8f
parent5f15903279143eb640f9ba1c0e72b52fe9e9e2a6 (diff)
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>
-rw-r--r--include/net/bluetooth/hci_core.h4
-rw-r--r--net/bluetooth/hci_sock.c1
-rw-r--r--net/bluetooth/mgmt.c18
3 files changed, 8 insertions, 15 deletions
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index facd7ed32b74..25cb0a15b579 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -1034,16 +1034,12 @@ int mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, u8 persistent);
1034/* HCI info for socket */ 1034/* HCI info for socket */
1035#define hci_pi(sk) ((struct hci_pinfo *) sk) 1035#define hci_pi(sk) ((struct hci_pinfo *) sk)
1036 1036
1037/* HCI socket flags */
1038#define HCI_PI_MGMT_INIT 0
1039
1040struct hci_pinfo { 1037struct hci_pinfo {
1041 struct bt_sock bt; 1038 struct bt_sock bt;
1042 struct hci_dev *hdev; 1039 struct hci_dev *hdev;
1043 struct hci_filter filter; 1040 struct hci_filter filter;
1044 __u32 cmsg_mask; 1041 __u32 cmsg_mask;
1045 unsigned short channel; 1042 unsigned short channel;
1046 unsigned long flags;
1047}; 1043};
1048 1044
1049/* HCI security filter */ 1045/* HCI security filter */
diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
index 8a814bca00d7..63afd234283e 100644
--- a/net/bluetooth/hci_sock.c
+++ b/net/bluetooth/hci_sock.c
@@ -659,7 +659,6 @@ static int hci_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_le
659 goto done; 659 goto done;
660 } 660 }
661 661
662 set_bit(HCI_PI_MGMT_INIT, &hci_pi(sk)->flags);
663 break; 662 break;
664 663
665 case HCI_CHANNEL_MONITOR: 664 case HCI_CHANNEL_MONITOR:
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index fa9a58964278..4b1efedc18c5 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -615,19 +615,17 @@ static void service_cache_off(struct work_struct *work)
615 615
616static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev) 616static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev)
617{ 617{
618 if (!test_and_clear_bit(HCI_PI_MGMT_INIT, &hci_pi(sk)->flags)) 618 if (test_and_set_bit(HCI_MGMT, &hdev->dev_flags))
619 return; 619 return;
620 620
621 if (!test_and_set_bit(HCI_MGMT, &hdev->dev_flags)) { 621 INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off);
622 INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off);
623 622
624 /* Non-mgmt controlled devices get this bit set 623 /* Non-mgmt controlled devices get this bit set
625 * implicitly so that pairing works for them, however 624 * implicitly so that pairing works for them, however
626 * for mgmt we require user-space to explicitly enable 625 * for mgmt we require user-space to explicitly enable
627 * it 626 * it
628 */ 627 */
629 clear_bit(HCI_PAIRABLE, &hdev->dev_flags); 628 clear_bit(HCI_PAIRABLE, &hdev->dev_flags);
630 }
631} 629}
632 630
633static int read_controller_info(struct sock *sk, struct hci_dev *hdev, 631static int read_controller_info(struct sock *sk, struct hci_dev *hdev,