Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-next

+57 -53
+2 -2
include/net/bluetooth/hci_core.h
··· 127 127 __u8 major_class; 128 128 __u8 minor_class; 129 129 __u8 features[8]; 130 - __u8 extfeatures[8]; 130 + __u8 host_features[8]; 131 131 __u8 commands[64]; 132 132 __u8 ssp_mode; 133 133 __u8 hci_ver; ··· 676 676 #define lmp_le_capable(dev) ((dev)->features[4] & LMP_LE) 677 677 678 678 /* ----- Extended LMP capabilities ----- */ 679 - #define lmp_host_le_capable(dev) ((dev)->extfeatures[0] & LMP_HOST_LE) 679 + #define lmp_host_le_capable(dev) ((dev)->host_features[0] & LMP_HOST_LE) 680 680 681 681 /* ----- HCI protocols ----- */ 682 682 static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
+4 -4
net/bluetooth/af_bluetooth.c
··· 156 156 157 157 void bt_sock_link(struct bt_sock_list *l, struct sock *sk) 158 158 { 159 - write_lock_bh(&l->lock); 159 + write_lock(&l->lock); 160 160 sk_add_node(sk, &l->head); 161 - write_unlock_bh(&l->lock); 161 + write_unlock(&l->lock); 162 162 } 163 163 EXPORT_SYMBOL(bt_sock_link); 164 164 165 165 void bt_sock_unlink(struct bt_sock_list *l, struct sock *sk) 166 166 { 167 - write_lock_bh(&l->lock); 167 + write_lock(&l->lock); 168 168 sk_del_node_init(sk); 169 - write_unlock_bh(&l->lock); 169 + write_unlock(&l->lock); 170 170 } 171 171 EXPORT_SYMBOL(bt_sock_unlink); 172 172
+13 -9
net/bluetooth/hci_event.c
··· 711 711 if (rp->status) 712 712 return; 713 713 714 - memcpy(hdev->extfeatures, rp->features, 8); 714 + switch (rp->page) { 715 + case 0: 716 + memcpy(hdev->features, rp->features, 8); 717 + break; 718 + case 1: 719 + memcpy(hdev->host_features, rp->features, 8); 720 + break; 721 + } 715 722 716 723 hci_req_complete(hdev, HCI_OP_READ_LOCAL_EXT_FEATURES, rp->status); 717 724 } ··· 1054 1047 case LE_SCANNING_DISABLED: 1055 1048 clear_bit(HCI_LE_SCAN, &hdev->dev_flags); 1056 1049 1057 - cancel_delayed_work_sync(&hdev->adv_work); 1058 - queue_delayed_work(hdev->workqueue, &hdev->adv_work, 1059 - jiffies + ADV_CLEAR_TIMEOUT); 1050 + schedule_delayed_work(&hdev->adv_work, ADV_CLEAR_TIMEOUT); 1060 1051 break; 1061 1052 1062 1053 default: ··· 2271 2266 struct hci_ev_num_comp_pkts *ev = (void *) skb->data; 2272 2267 int i; 2273 2268 2274 - skb_pull(skb, sizeof(*ev)); 2275 - 2276 - BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl); 2277 - 2278 2269 if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_PACKET_BASED) { 2279 2270 BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode); 2280 2271 return; 2281 2272 } 2282 2273 2283 - if (skb->len < ev->num_hndl * 4) { 2274 + if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) + 2275 + ev->num_hndl * sizeof(struct hci_comp_pkts_info)) { 2284 2276 BT_DBG("%s bad parameters", hdev->name); 2285 2277 return; 2286 2278 } 2279 + 2280 + BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl); 2287 2281 2288 2282 for (i = 0; i < ev->num_hndl; i++) { 2289 2283 struct hci_comp_pkts_info *info = &ev->handles[i];
-2
net/bluetooth/hci_sock.c
··· 767 767 /* Detach sockets from device */ 768 768 read_lock(&hci_sk_list.lock); 769 769 sk_for_each(sk, node, &hci_sk_list.head) { 770 - local_bh_disable(); 771 770 bh_lock_sock_nested(sk); 772 771 if (hci_pi(sk)->hdev == hdev) { 773 772 hci_pi(sk)->hdev = NULL; ··· 777 778 hci_dev_put(hdev); 778 779 } 779 780 bh_unlock_sock(sk); 780 - local_bh_enable(); 781 781 } 782 782 read_unlock(&hci_sk_list.lock); 783 783 }
+13 -13
net/bluetooth/l2cap_core.c
··· 165 165 { 166 166 int err; 167 167 168 - write_lock_bh(&chan_list_lock); 168 + write_lock(&chan_list_lock); 169 169 170 170 if (psm && __l2cap_global_chan_by_addr(psm, src)) { 171 171 err = -EADDRINUSE; ··· 190 190 } 191 191 192 192 done: 193 - write_unlock_bh(&chan_list_lock); 193 + write_unlock(&chan_list_lock); 194 194 return err; 195 195 } 196 196 197 197 int l2cap_add_scid(struct l2cap_chan *chan, __u16 scid) 198 198 { 199 - write_lock_bh(&chan_list_lock); 199 + write_lock(&chan_list_lock); 200 200 201 201 chan->scid = scid; 202 202 203 - write_unlock_bh(&chan_list_lock); 203 + write_unlock(&chan_list_lock); 204 204 205 205 return 0; 206 206 } ··· 289 289 290 290 chan->sk = sk; 291 291 292 - write_lock_bh(&chan_list_lock); 292 + write_lock(&chan_list_lock); 293 293 list_add(&chan->global_l, &chan_list); 294 - write_unlock_bh(&chan_list_lock); 294 + write_unlock(&chan_list_lock); 295 295 296 296 INIT_DELAYED_WORK(&chan->chan_timer, l2cap_chan_timeout); 297 297 ··· 306 306 307 307 void l2cap_chan_destroy(struct l2cap_chan *chan) 308 308 { 309 - write_lock_bh(&chan_list_lock); 309 + write_lock(&chan_list_lock); 310 310 list_del(&chan->global_l); 311 - write_unlock_bh(&chan_list_lock); 311 + write_unlock(&chan_list_lock); 312 312 313 313 l2cap_chan_put(chan); 314 314 } ··· 543 543 * 200 - 254 are used by utilities like l2ping, etc. 544 544 */ 545 545 546 - spin_lock_bh(&conn->lock); 546 + spin_lock(&conn->lock); 547 547 548 548 if (++conn->tx_ident > 128) 549 549 conn->tx_ident = 1; 550 550 551 551 id = conn->tx_ident; 552 552 553 - spin_unlock_bh(&conn->lock); 553 + spin_unlock(&conn->lock); 554 554 555 555 return id; 556 556 } ··· 1190 1190 } 1191 1191 1192 1192 /* Set destination address and psm */ 1193 - bacpy(&bt_sk(sk)->dst, src); 1193 + bacpy(&bt_sk(sk)->dst, dst); 1194 1194 chan->psm = psm; 1195 1195 chan->dcid = cid; 1196 1196 ··· 4702 4702 { 4703 4703 struct l2cap_chan *c; 4704 4704 4705 - read_lock_bh(&chan_list_lock); 4705 + read_lock(&chan_list_lock); 4706 4706 4707 4707 list_for_each_entry(c, &chan_list, global_l) { 4708 4708 struct sock *sk = c->sk; ··· 4715 4715 c->sec_level, c->mode); 4716 4716 } 4717 4717 4718 - read_unlock_bh(&chan_list_lock); 4718 + read_unlock(&chan_list_lock); 4719 4719 4720 4720 return 0; 4721 4721 }
+2
net/bluetooth/l2cap_sock.c
··· 587 587 if (smp_conn_security(conn, sec.level)) 588 588 break; 589 589 sk->sk_state = BT_CONFIG; 590 + chan->state = BT_CONFIG; 590 591 591 592 /* or for ACL link, under defer_setup time */ 592 593 } else if (sk->sk_state == BT_CONNECT2 && ··· 732 731 733 732 if (sk->sk_state == BT_CONNECT2 && bt_sk(sk)->defer_setup) { 734 733 sk->sk_state = BT_CONFIG; 734 + pi->chan->state = BT_CONFIG; 735 735 736 736 __l2cap_connect_rsp_defer(pi->chan); 737 737 release_sock(sk);
+2 -2
net/bluetooth/mgmt.c
··· 291 291 if (!(hdev->features[4] & LMP_NO_BREDR)) 292 292 settings |= MGMT_SETTING_BREDR; 293 293 294 - if (hdev->extfeatures[0] & LMP_HOST_LE) 294 + if (hdev->host_features[0] & LMP_HOST_LE) 295 295 settings |= MGMT_SETTING_LE; 296 296 297 297 if (test_bit(HCI_AUTH, &hdev->flags)) ··· 2756 2756 if (!cmd) 2757 2757 return -ENOENT; 2758 2758 2759 - err = cmd_status(cmd->sk, hdev->id, cmd->opcode, status); 2759 + err = cmd_status(cmd->sk, hdev->id, cmd->opcode, mgmt_status(status)); 2760 2760 mgmt_pending_remove(cmd); 2761 2761 2762 2762 return err;
+6 -6
net/bluetooth/rfcomm/sock.c
··· 370 370 goto done; 371 371 } 372 372 373 - write_lock_bh(&rfcomm_sk_list.lock); 373 + write_lock(&rfcomm_sk_list.lock); 374 374 375 375 if (sa->rc_channel && __rfcomm_get_sock_by_addr(sa->rc_channel, &sa->rc_bdaddr)) { 376 376 err = -EADDRINUSE; ··· 381 381 sk->sk_state = BT_BOUND; 382 382 } 383 383 384 - write_unlock_bh(&rfcomm_sk_list.lock); 384 + write_unlock(&rfcomm_sk_list.lock); 385 385 386 386 done: 387 387 release_sock(sk); ··· 455 455 456 456 err = -EINVAL; 457 457 458 - write_lock_bh(&rfcomm_sk_list.lock); 458 + write_lock(&rfcomm_sk_list.lock); 459 459 460 460 for (channel = 1; channel < 31; channel++) 461 461 if (!__rfcomm_get_sock_by_addr(channel, src)) { ··· 464 464 break; 465 465 } 466 466 467 - write_unlock_bh(&rfcomm_sk_list.lock); 467 + write_unlock(&rfcomm_sk_list.lock); 468 468 469 469 if (err < 0) 470 470 goto done; ··· 982 982 struct sock *sk; 983 983 struct hlist_node *node; 984 984 985 - read_lock_bh(&rfcomm_sk_list.lock); 985 + read_lock(&rfcomm_sk_list.lock); 986 986 987 987 sk_for_each(sk, node, &rfcomm_sk_list.head) { 988 988 seq_printf(f, "%s %s %d %d\n", ··· 991 991 sk->sk_state, rfcomm_pi(sk)->channel); 992 992 } 993 993 994 - read_unlock_bh(&rfcomm_sk_list.lock); 994 + read_unlock(&rfcomm_sk_list.lock); 995 995 996 996 return 0; 997 997 }
+11 -11
net/bluetooth/rfcomm/tty.c
··· 76 76 }; 77 77 78 78 static LIST_HEAD(rfcomm_dev_list); 79 - static DEFINE_RWLOCK(rfcomm_dev_lock); 79 + static DEFINE_SPINLOCK(rfcomm_dev_lock); 80 80 81 81 static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb); 82 82 static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err); ··· 146 146 { 147 147 struct rfcomm_dev *dev; 148 148 149 - read_lock(&rfcomm_dev_lock); 149 + spin_lock(&rfcomm_dev_lock); 150 150 151 151 dev = __rfcomm_dev_get(id); 152 152 ··· 157 157 rfcomm_dev_hold(dev); 158 158 } 159 159 160 - read_unlock(&rfcomm_dev_lock); 160 + spin_unlock(&rfcomm_dev_lock); 161 161 162 162 return dev; 163 163 } ··· 205 205 if (!dev) 206 206 return -ENOMEM; 207 207 208 - write_lock_bh(&rfcomm_dev_lock); 208 + spin_lock(&rfcomm_dev_lock); 209 209 210 210 if (req->dev_id < 0) { 211 211 dev->id = 0; ··· 290 290 __module_get(THIS_MODULE); 291 291 292 292 out: 293 - write_unlock_bh(&rfcomm_dev_lock); 293 + spin_unlock(&rfcomm_dev_lock); 294 294 295 295 if (err < 0) 296 296 goto free; ··· 327 327 if (atomic_read(&dev->opened) > 0) 328 328 return; 329 329 330 - write_lock_bh(&rfcomm_dev_lock); 330 + spin_lock(&rfcomm_dev_lock); 331 331 list_del_init(&dev->list); 332 - write_unlock_bh(&rfcomm_dev_lock); 332 + spin_unlock(&rfcomm_dev_lock); 333 333 334 334 rfcomm_dev_put(dev); 335 335 } ··· 473 473 474 474 di = dl->dev_info; 475 475 476 - read_lock_bh(&rfcomm_dev_lock); 476 + spin_lock(&rfcomm_dev_lock); 477 477 478 478 list_for_each_entry(dev, &rfcomm_dev_list, list) { 479 479 if (test_bit(RFCOMM_TTY_RELEASED, &dev->flags)) ··· 488 488 break; 489 489 } 490 490 491 - read_unlock_bh(&rfcomm_dev_lock); 491 + spin_unlock(&rfcomm_dev_lock); 492 492 493 493 dl->dev_num = n; 494 494 size = sizeof(*dl) + n * sizeof(*di); ··· 766 766 rfcomm_dlc_unlock(dev->dlc); 767 767 768 768 if (test_bit(RFCOMM_TTY_RELEASED, &dev->flags)) { 769 - write_lock_bh(&rfcomm_dev_lock); 769 + spin_lock(&rfcomm_dev_lock); 770 770 list_del_init(&dev->list); 771 - write_unlock_bh(&rfcomm_dev_lock); 771 + spin_unlock(&rfcomm_dev_lock); 772 772 773 773 rfcomm_dev_put(dev); 774 774 }
+4 -4
net/bluetooth/sco.c
··· 482 482 goto done; 483 483 } 484 484 485 - write_lock_bh(&sco_sk_list.lock); 485 + write_lock(&sco_sk_list.lock); 486 486 487 487 if (bacmp(src, BDADDR_ANY) && __sco_get_sock_by_addr(src)) { 488 488 err = -EADDRINUSE; ··· 492 492 sk->sk_state = BT_BOUND; 493 493 } 494 494 495 - write_unlock_bh(&sco_sk_list.lock); 495 + write_unlock(&sco_sk_list.lock); 496 496 497 497 done: 498 498 release_sock(sk); ··· 965 965 struct sock *sk; 966 966 struct hlist_node *node; 967 967 968 - read_lock_bh(&sco_sk_list.lock); 968 + read_lock(&sco_sk_list.lock); 969 969 970 970 sk_for_each(sk, node, &sco_sk_list.head) { 971 971 seq_printf(f, "%s %s %d\n", batostr(&bt_sk(sk)->src), 972 972 batostr(&bt_sk(sk)->dst), sk->sk_state); 973 973 } 974 974 975 - read_unlock_bh(&sco_sk_list.lock); 975 + read_unlock(&sco_sk_list.lock); 976 976 977 977 return 0; 978 978 }