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

Configure Feed

Select the types of activity you want to include in your feed.

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
netfilter: ip6t_{hbh,dst}: Rejects not-strict mode on rule insertion
ath9k: disable MIB interrupts to fix interrupt storm
[Bluetooth] Fix USB disconnect handling of btusb driver
[Bluetooth] Fix wrong URB handling of btusb driver
[Bluetooth] Fix I/O errors on MacBooks with Broadcom chips

+35 -8
+22 -6
drivers/bluetooth/btusb.c
··· 104 104 /* Broadcom BCM2046 */ 105 105 { USB_DEVICE(0x0a5c, 0x2151), .driver_info = BTUSB_RESET }, 106 106 107 + /* Apple MacBook Pro with Broadcom chip */ 108 + { USB_DEVICE(0x05ac, 0x820f), .driver_info = BTUSB_RESET }, 109 + 107 110 /* IBM/Lenovo ThinkPad with Broadcom chip */ 108 111 { USB_DEVICE(0x0a5c, 0x201e), .driver_info = BTUSB_RESET | BTUSB_WRONG_SCO_MTU }, 109 112 { USB_DEVICE(0x0a5c, 0x2110), .driver_info = BTUSB_RESET | BTUSB_WRONG_SCO_MTU }, ··· 172 169 struct btusb_data { 173 170 struct hci_dev *hdev; 174 171 struct usb_device *udev; 172 + struct usb_interface *intf; 175 173 struct usb_interface *isoc; 176 174 177 175 spinlock_t lock; ··· 520 516 521 517 err = btusb_submit_intr_urb(hdev); 522 518 if (err < 0) { 523 - clear_bit(BTUSB_INTR_RUNNING, &hdev->flags); 519 + clear_bit(BTUSB_INTR_RUNNING, &data->flags); 524 520 clear_bit(HCI_RUNNING, &hdev->flags); 525 521 } 526 522 ··· 536 532 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags)) 537 533 return 0; 538 534 535 + cancel_work_sync(&data->work); 536 + 539 537 clear_bit(BTUSB_ISOC_RUNNING, &data->flags); 540 - usb_kill_anchored_urbs(&data->intr_anchor); 538 + usb_kill_anchored_urbs(&data->isoc_anchor); 541 539 542 540 clear_bit(BTUSB_BULK_RUNNING, &data->flags); 543 541 usb_kill_anchored_urbs(&data->bulk_anchor); ··· 827 821 } 828 822 829 823 data->udev = interface_to_usbdev(intf); 824 + data->intf = intf; 830 825 831 826 spin_lock_init(&data->lock); 832 827 ··· 896 889 897 890 if (data->isoc) { 898 891 err = usb_driver_claim_interface(&btusb_driver, 899 - data->isoc, NULL); 892 + data->isoc, data); 900 893 if (err < 0) { 901 894 hci_free_dev(hdev); 902 895 kfree(data); ··· 928 921 929 922 hdev = data->hdev; 930 923 931 - if (data->isoc) 932 - usb_driver_release_interface(&btusb_driver, data->isoc); 924 + __hci_dev_hold(hdev); 933 925 934 - usb_set_intfdata(intf, NULL); 926 + usb_set_intfdata(data->intf, NULL); 927 + 928 + if (data->isoc) 929 + usb_set_intfdata(data->isoc, NULL); 935 930 936 931 hci_unregister_dev(hdev); 932 + 933 + if (intf == data->isoc) 934 + usb_driver_release_interface(&btusb_driver, data->intf); 935 + else if (data->isoc) 936 + usb_driver_release_interface(&btusb_driver, data->isoc); 937 + 938 + __hci_dev_put(hdev); 937 939 938 940 hci_free_dev(hdev); 939 941 }
+7
drivers/net/wireless/ath9k/core.c
··· 795 795 if (ah->ah_caps.hw_caps & ATH9K_HW_CAP_HT) 796 796 sc->sc_imask |= ATH9K_INT_CST; 797 797 798 + /* Note: We disable MIB interrupts for now as we don't yet 799 + * handle processing ANI, otherwise you will get an interrupt 800 + * storm after about 7 hours of usage making the system unusable 801 + * with huge latency. Once we do have ANI processing included 802 + * we can re-enable this interrupt. */ 803 + #if 0 798 804 /* 799 805 * Enable MIB interrupts when there are hardware phy counters. 800 806 * Note we only do this (at the moment) for station mode. ··· 808 802 if (ath9k_hw_phycounters(ah) && 809 803 ((sc->sc_opmode == ATH9K_M_STA) || (sc->sc_opmode == ATH9K_M_IBSS))) 810 804 sc->sc_imask |= ATH9K_INT_MIB; 805 + #endif 811 806 /* 812 807 * Some hardware processes the TIM IE and fires an 813 808 * interrupt when the TIM bit is set. For hardware
+6 -2
net/ipv6/netfilter/ip6t_hbh.c
··· 97 97 hdrlen -= 2; 98 98 if (!(optinfo->flags & IP6T_OPTS_OPTS)) { 99 99 return ret; 100 - } else if (optinfo->flags & IP6T_OPTS_NSTRICT) { 101 - pr_debug("Not strict - not implemented"); 102 100 } else { 103 101 pr_debug("Strict "); 104 102 pr_debug("#%d ", optinfo->optsnr); ··· 175 177 pr_debug("ip6t_opts: unknown flags %X\n", optsinfo->invflags); 176 178 return false; 177 179 } 180 + 181 + if (optsinfo->flags & IP6T_OPTS_NSTRICT) { 182 + pr_debug("ip6t_opts: Not strict - not implemented"); 183 + return false; 184 + } 185 + 178 186 return true; 179 187 } 180 188