diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-07 13:55:33 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-07 13:55:33 -0500 |
| commit | 94956eed14b4b16d401c8ad36d68df0608f968cb (patch) | |
| tree | 60e4e1a3c2c44e8f6616db78cd6b22737b2a1f37 | |
| parent | 50e696308c3fb18a4a0dae7b3a4d47469149c919 (diff) | |
| parent | e45a618753d5a8bc9086382f73bbc2d6a3399250 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (47 commits)
forcedeth: fix a few sparse warnings (variable shadowing)
forcedeth: Improve stats counters
forcedeth: remove unneeded stats updates
forcedeth: Acknowledge only interrupts that are being processed
forcedeth: fix race when unloading module
MAINTAINERS/rds: update maintainer
wanrouter: Remove kernel_lock annotations
usbnet: fix oops in usbnet_start_xmit
ixgbe: Fix compile for kernel without CONFIG_PCI_IOV defined
etherh: Add MAINTAINERS entry for etherh
bonding: comparing a u8 with -1 is always false
sky2: fix regression on Yukon Optima
netlink: clarify attribute length check documentation
netlink: validate NLA_MSECS length
i825xx:xscale:8390:freescale: Fix Kconfig dependancies
macvlan: receive multicast with local address
tg3: Update version to 3.121
tg3: Eliminate timer race with reset_task
tg3: Schedule at most one tg3_reset_task run
tg3: Obtain PCI function number from device
...
43 files changed, 325 insertions, 267 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 6388a96dc1c4..4c5eac0e51d1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -1032,6 +1032,7 @@ F: arch/arm/include/asm/hardware/ioc.h | |||
| 1032 | F: arch/arm/include/asm/hardware/iomd.h | 1032 | F: arch/arm/include/asm/hardware/iomd.h |
| 1033 | F: arch/arm/include/asm/hardware/memc.h | 1033 | F: arch/arm/include/asm/hardware/memc.h |
| 1034 | F: arch/arm/mach-rpc/ | 1034 | F: arch/arm/mach-rpc/ |
| 1035 | F: drivers/net/ethernet/8390/etherh.c | ||
| 1035 | F: drivers/net/ethernet/i825xx/ether1* | 1036 | F: drivers/net/ethernet/i825xx/ether1* |
| 1036 | F: drivers/net/ethernet/seeq/ether3* | 1037 | F: drivers/net/ethernet/seeq/ether3* |
| 1037 | F: drivers/scsi/arm/ | 1038 | F: drivers/scsi/arm/ |
| @@ -5470,7 +5471,7 @@ S: Maintained | |||
| 5470 | F: drivers/net/ethernet/rdc/r6040.c | 5471 | F: drivers/net/ethernet/rdc/r6040.c |
| 5471 | 5472 | ||
| 5472 | RDS - RELIABLE DATAGRAM SOCKETS | 5473 | RDS - RELIABLE DATAGRAM SOCKETS |
| 5473 | M: Andy Grover <andy.grover@oracle.com> | 5474 | M: Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com> |
| 5474 | L: rds-devel@oss.oracle.com (moderated for non-subscribers) | 5475 | L: rds-devel@oss.oracle.com (moderated for non-subscribers) |
| 5475 | S: Supported | 5476 | S: Supported |
| 5476 | F: net/rds/ | 5477 | F: net/rds/ |
diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c index db7cb8111fbe..106beb194f3c 100644 --- a/drivers/bluetooth/ath3k.c +++ b/drivers/bluetooth/ath3k.c | |||
| @@ -105,7 +105,7 @@ static int ath3k_load_firmware(struct usb_device *udev, | |||
| 105 | 105 | ||
| 106 | pipe = usb_sndctrlpipe(udev, 0); | 106 | pipe = usb_sndctrlpipe(udev, 0); |
| 107 | 107 | ||
| 108 | send_buf = kmalloc(BULK_SIZE, GFP_ATOMIC); | 108 | send_buf = kmalloc(BULK_SIZE, GFP_KERNEL); |
| 109 | if (!send_buf) { | 109 | if (!send_buf) { |
| 110 | BT_ERR("Can't allocate memory chunk for firmware"); | 110 | BT_ERR("Can't allocate memory chunk for firmware"); |
| 111 | return -ENOMEM; | 111 | return -ENOMEM; |
| @@ -176,7 +176,7 @@ static int ath3k_load_fwfile(struct usb_device *udev, | |||
| 176 | 176 | ||
| 177 | count = firmware->size; | 177 | count = firmware->size; |
| 178 | 178 | ||
| 179 | send_buf = kmalloc(BULK_SIZE, GFP_ATOMIC); | 179 | send_buf = kmalloc(BULK_SIZE, GFP_KERNEL); |
| 180 | if (!send_buf) { | 180 | if (!send_buf) { |
| 181 | BT_ERR("Can't allocate memory chunk for firmware"); | 181 | BT_ERR("Can't allocate memory chunk for firmware"); |
| 182 | return -ENOMEM; | 182 | return -ENOMEM; |
diff --git a/drivers/bluetooth/bcm203x.c b/drivers/bluetooth/bcm203x.c index 8b1b643a519b..54952ab800b8 100644 --- a/drivers/bluetooth/bcm203x.c +++ b/drivers/bluetooth/bcm203x.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | 24 | ||
| 25 | #include <linux/module.h> | 25 | #include <linux/module.h> |
| 26 | 26 | ||
| 27 | #include <linux/atomic.h> | ||
| 27 | #include <linux/kernel.h> | 28 | #include <linux/kernel.h> |
| 28 | #include <linux/init.h> | 29 | #include <linux/init.h> |
| 29 | #include <linux/slab.h> | 30 | #include <linux/slab.h> |
| @@ -65,6 +66,7 @@ struct bcm203x_data { | |||
| 65 | unsigned long state; | 66 | unsigned long state; |
| 66 | 67 | ||
| 67 | struct work_struct work; | 68 | struct work_struct work; |
| 69 | atomic_t shutdown; | ||
| 68 | 70 | ||
| 69 | struct urb *urb; | 71 | struct urb *urb; |
| 70 | unsigned char *buffer; | 72 | unsigned char *buffer; |
| @@ -97,6 +99,7 @@ static void bcm203x_complete(struct urb *urb) | |||
| 97 | 99 | ||
| 98 | data->state = BCM203X_SELECT_MEMORY; | 100 | data->state = BCM203X_SELECT_MEMORY; |
| 99 | 101 | ||
| 102 | /* use workqueue to have a small delay */ | ||
| 100 | schedule_work(&data->work); | 103 | schedule_work(&data->work); |
| 101 | break; | 104 | break; |
| 102 | 105 | ||
| @@ -155,7 +158,10 @@ static void bcm203x_work(struct work_struct *work) | |||
| 155 | struct bcm203x_data *data = | 158 | struct bcm203x_data *data = |
| 156 | container_of(work, struct bcm203x_data, work); | 159 | container_of(work, struct bcm203x_data, work); |
| 157 | 160 | ||
| 158 | if (usb_submit_urb(data->urb, GFP_ATOMIC) < 0) | 161 | if (atomic_read(&data->shutdown)) |
| 162 | return; | ||
| 163 | |||
| 164 | if (usb_submit_urb(data->urb, GFP_KERNEL) < 0) | ||
| 159 | BT_ERR("Can't submit URB"); | 165 | BT_ERR("Can't submit URB"); |
| 160 | } | 166 | } |
| 161 | 167 | ||
| @@ -243,6 +249,7 @@ static int bcm203x_probe(struct usb_interface *intf, const struct usb_device_id | |||
| 243 | 249 | ||
| 244 | usb_set_intfdata(intf, data); | 250 | usb_set_intfdata(intf, data); |
| 245 | 251 | ||
| 252 | /* use workqueue to have a small delay */ | ||
| 246 | schedule_work(&data->work); | 253 | schedule_work(&data->work); |
| 247 | 254 | ||
| 248 | return 0; | 255 | return 0; |
| @@ -254,6 +261,9 @@ static void bcm203x_disconnect(struct usb_interface *intf) | |||
| 254 | 261 | ||
| 255 | BT_DBG("intf %p", intf); | 262 | BT_DBG("intf %p", intf); |
| 256 | 263 | ||
| 264 | atomic_inc(&data->shutdown); | ||
| 265 | cancel_work_sync(&data->work); | ||
| 266 | |||
| 257 | usb_kill_urb(data->urb); | 267 | usb_kill_urb(data->urb); |
| 258 | 268 | ||
| 259 | usb_set_intfdata(intf, NULL); | 269 | usb_set_intfdata(intf, NULL); |
diff --git a/drivers/bluetooth/bfusb.c b/drivers/bluetooth/bfusb.c index 005919ab043c..61b591470a90 100644 --- a/drivers/bluetooth/bfusb.c +++ b/drivers/bluetooth/bfusb.c | |||
| @@ -568,22 +568,23 @@ static int bfusb_load_firmware(struct bfusb_data *data, | |||
| 568 | 568 | ||
| 569 | BT_INFO("BlueFRITZ! USB loading firmware"); | 569 | BT_INFO("BlueFRITZ! USB loading fir |
