Magellan Linux

Contents of /trunk/kernel-lts/patches-3.4/0136-3.4.37-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2143 - (show annotations) (download)
Sun Mar 31 12:45:29 2013 UTC (11 years, 1 month ago) by niro
File size: 51396 byte(s)
linux-3.4.37
1 diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c
2 index 455faa3..31a3dd0 100644
3 --- a/arch/powerpc/kernel/cputable.c
4 +++ b/arch/powerpc/kernel/cputable.c
5 @@ -269,7 +269,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
6 .cpu_features = CPU_FTRS_PPC970,
7 .cpu_user_features = COMMON_USER_POWER4 |
8 PPC_FEATURE_HAS_ALTIVEC_COMP,
9 - .mmu_features = MMU_FTR_HPTE_TABLE,
10 + .mmu_features = MMU_FTRS_PPC970,
11 .icache_bsize = 128,
12 .dcache_bsize = 128,
13 .num_pmcs = 8,
14 diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
15 index 377e5cb..15972e2 100644
16 --- a/arch/powerpc/mm/hash_utils_64.c
17 +++ b/arch/powerpc/mm/hash_utils_64.c
18 @@ -759,6 +759,8 @@ void __init early_init_mmu(void)
19 /* Initialize stab / SLB management */
20 if (mmu_has_feature(MMU_FTR_SLB))
21 slb_initialize();
22 + else
23 + stab_initialize(get_paca()->stab_real);
24 }
25
26 #ifdef CONFIG_SMP
27 diff --git a/arch/s390/include/asm/tlbflush.h b/arch/s390/include/asm/tlbflush.h
28 index 1d8648c..8743029 100644
29 --- a/arch/s390/include/asm/tlbflush.h
30 +++ b/arch/s390/include/asm/tlbflush.h
31 @@ -74,8 +74,6 @@ static inline void __tlb_flush_idte(unsigned long asce)
32
33 static inline void __tlb_flush_mm(struct mm_struct * mm)
34 {
35 - if (unlikely(cpumask_empty(mm_cpumask(mm))))
36 - return;
37 /*
38 * If the machine has IDTE we prefer to do a per mm flush
39 * on all cpus instead of doing a local flush if the mm
40 diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
41 index 74ee563..009518c 100644
42 --- a/arch/s390/kernel/entry.S
43 +++ b/arch/s390/kernel/entry.S
44 @@ -669,7 +669,8 @@ ENTRY(mcck_int_handler)
45 UPDATE_VTIME %r14,%r15,__LC_MCCK_ENTER_TIMER
46 mcck_skip:
47 SWITCH_ASYNC __LC_GPREGS_SAVE_AREA+32,__LC_PANIC_STACK,PAGE_SHIFT
48 - mvc __PT_R0(64,%r11),__LC_GPREGS_SAVE_AREA
49 + stm %r0,%r7,__PT_R0(%r11)
50 + mvc __PT_R8(32,%r11),__LC_GPREGS_SAVE_AREA+32
51 stm %r8,%r9,__PT_PSW(%r11)
52 xc __SF_BACKCHAIN(4,%r15),__SF_BACKCHAIN(%r15)
53 l %r1,BASED(.Ldo_machine_check)
54 diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S
55 index 4e1c292..b6f3e7c 100644
56 --- a/arch/s390/kernel/entry64.S
57 +++ b/arch/s390/kernel/entry64.S
58 @@ -689,8 +689,9 @@ ENTRY(mcck_int_handler)
59 UPDATE_VTIME %r14,__LC_MCCK_ENTER_TIMER
60 LAST_BREAK %r14
61 mcck_skip:
62 - lghi %r14,__LC_GPREGS_SAVE_AREA
63 - mvc __PT_R0(128,%r11),0(%r14)
64 + lghi %r14,__LC_GPREGS_SAVE_AREA+64
65 + stmg %r0,%r7,__PT_R0(%r11)
66 + mvc __PT_R8(64,%r11),0(%r14)
67 stmg %r8,%r9,__PT_PSW(%r11)
68 xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
69 lgr %r2,%r11 # pass pointer to pt_regs
70 diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c b/arch/x86/kernel/cpu/perf_event_intel_ds.c
71 index 7f64df1..fca48c4 100644
72 --- a/arch/x86/kernel/cpu/perf_event_intel_ds.c
73 +++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c
74 @@ -723,3 +723,13 @@ void intel_ds_init(void)
75 }
76 }
77 }
78 +
79 +void perf_restore_debug_store(void)
80 +{
81 + struct debug_store *ds = __this_cpu_read(cpu_hw_events.ds);
82 +
83 + if (!x86_pmu.bts && !x86_pmu.pebs)
84 + return;
85 +
86 + wrmsrl(MSR_IA32_DS_AREA, (unsigned long)ds);
87 +}
88 diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c
89 index 218cdb1..fcbaac60 100644
90 --- a/arch/x86/power/cpu.c
91 +++ b/arch/x86/power/cpu.c
92 @@ -11,6 +11,7 @@
93 #include <linux/suspend.h>
94 #include <linux/export.h>
95 #include <linux/smp.h>
96 +#include <linux/perf_event.h>
97
98 #include <asm/pgtable.h>
99 #include <asm/proto.h>
100 @@ -227,6 +228,7 @@ static void __restore_processor_state(struct saved_context *ctxt)
101 do_fpu_end();
102 x86_platform.restore_sched_clock_state();
103 mtrr_bp_restore();
104 + perf_restore_debug_store();
105 }
106
107 /* Needed by apm.c */
108 diff --git a/drivers/block/loop.c b/drivers/block/loop.c
109 index bbca966..5e3be05 100644
110 --- a/drivers/block/loop.c
111 +++ b/drivers/block/loop.c
112 @@ -1263,11 +1263,9 @@ static int loop_set_capacity(struct loop_device *lo, struct block_device *bdev)
113 /* the width of sector_t may be narrow for bit-shift */
114 sz = sec;
115 sz <<= 9;
116 - mutex_lock(&bdev->bd_mutex);
117 bd_set_size(bdev, sz);
118 /* let user-space know about the new size */
119 kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
120 - mutex_unlock(&bdev->bd_mutex);
121
122 out:
123 return err;
124 @@ -1837,11 +1835,15 @@ static int __init loop_init(void)
125 max_part = (1UL << part_shift) - 1;
126 }
127
128 - if ((1UL << part_shift) > DISK_MAX_PARTS)
129 - return -EINVAL;
130 + if ((1UL << part_shift) > DISK_MAX_PARTS) {
131 + err = -EINVAL;
132 + goto misc_out;
133 + }
134
135 - if (max_loop > 1UL << (MINORBITS - part_shift))
136 - return -EINVAL;
137 + if (max_loop > 1UL << (MINORBITS - part_shift)) {
138 + err = -EINVAL;
139 + goto misc_out;
140 + }
141
142 /*
143 * If max_loop is specified, create that many devices upfront.
144 @@ -1859,8 +1861,10 @@ static int __init loop_init(void)
145 range = 1UL << MINORBITS;
146 }
147
148 - if (register_blkdev(LOOP_MAJOR, "loop"))
149 - return -EIO;
150 + if (register_blkdev(LOOP_MAJOR, "loop")) {
151 + err = -EIO;
152 + goto misc_out;
153 + }
154
155 blk_register_region(MKDEV(LOOP_MAJOR, 0), range,
156 THIS_MODULE, loop_probe, NULL, NULL);
157 @@ -1873,6 +1877,10 @@ static int __init loop_init(void)
158
159 printk(KERN_INFO "loop: module loaded\n");
160 return 0;
161 +
162 +misc_out:
163 + misc_deregister(&loop_misc);
164 + return err;
165 }
166
167 static int loop_exit_cb(int id, void *ptr, void *data)
168 diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c
169 index 723725b..171380b 100644
170 --- a/drivers/char/hw_random/virtio-rng.c
171 +++ b/drivers/char/hw_random/virtio-rng.c
172 @@ -89,14 +89,22 @@ static int virtrng_probe(struct virtio_device *vdev)
173 {
174 int err;
175
176 + if (vq) {
177 + /* We only support one device for now */
178 + return -EBUSY;
179 + }
180 /* We expect a single virtqueue. */
181 vq = virtio_find_single_vq(vdev, random_recv_done, "input");
182 - if (IS_ERR(vq))
183 - return PTR_ERR(vq);
184 + if (IS_ERR(vq)) {
185 + err = PTR_ERR(vq);
186 + vq = NULL;
187 + return err;
188 + }
189
190 err = hwrng_register(&virtio_hwrng);
191 if (err) {
192 vdev->config->del_vqs(vdev);
193 + vq = NULL;
194 return err;
195 }
196
197 @@ -108,6 +116,7 @@ static void __devexit virtrng_remove(struct virtio_device *vdev)
198 vdev->config->reset(vdev);
199 hwrng_unregister(&virtio_hwrng);
200 vdev->config->del_vqs(vdev);
201 + vq = NULL;
202 }
203
204 static struct virtio_device_id id_table[] = {
205 diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
206 index a230a93..eb33945 100644
207 --- a/drivers/gpu/drm/i915/i915_gem.c
208 +++ b/drivers/gpu/drm/i915/i915_gem.c
209 @@ -1186,6 +1186,11 @@ out:
210 case 0:
211 case -ERESTARTSYS:
212 case -EINTR:
213 + case -EBUSY:
214 + /*
215 + * EBUSY is ok: this just means that another thread
216 + * already did the job.
217 + */
218 return VM_FAULT_NOPAGE;
219 case -ENOMEM:
220 return VM_FAULT_OOM;
221 diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
222 index 67f6db5..7ccf896 100644
223 --- a/drivers/gpu/drm/i915/intel_display.c
224 +++ b/drivers/gpu/drm/i915/intel_display.c
225 @@ -8364,7 +8364,7 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv)
226 I915_WRITE(GEN6_RC_SLEEP, 0);
227 I915_WRITE(GEN6_RC1e_THRESHOLD, 1000);
228 I915_WRITE(GEN6_RC6_THRESHOLD, 50000);
229 - I915_WRITE(GEN6_RC6p_THRESHOLD, 100000);
230 + I915_WRITE(GEN6_RC6p_THRESHOLD, 150000);
231 I915_WRITE(GEN6_RC6pp_THRESHOLD, 64000); /* unused */
232
233 rc6_mode = intel_enable_rc6(dev_priv->dev);
234 diff --git a/drivers/hwmon/lineage-pem.c b/drivers/hwmon/lineage-pem.c
235 index d264937..22249f4 100644
236 --- a/drivers/hwmon/lineage-pem.c
237 +++ b/drivers/hwmon/lineage-pem.c
238 @@ -421,6 +421,7 @@ static struct attribute *pem_input_attributes[] = {
239 &sensor_dev_attr_in2_input.dev_attr.attr,
240 &sensor_dev_attr_curr1_input.dev_attr.attr,
241 &sensor_dev_attr_power1_input.dev_attr.attr,
242 + NULL
243 };
244
245 static const struct attribute_group pem_input_group = {
246 @@ -431,6 +432,7 @@ static struct attribute *pem_fan_attributes[] = {
247 &sensor_dev_attr_fan1_input.dev_attr.attr,
248 &sensor_dev_attr_fan2_input.dev_attr.attr,
249 &sensor_dev_attr_fan3_input.dev_attr.attr,
250 + NULL
251 };
252
253 static const struct attribute_group pem_fan_group = {
254 diff --git a/drivers/hwmon/pmbus/ltc2978.c b/drivers/hwmon/pmbus/ltc2978.c
255 index a58de38..6d61307 100644
256 --- a/drivers/hwmon/pmbus/ltc2978.c
257 +++ b/drivers/hwmon/pmbus/ltc2978.c
258 @@ -59,7 +59,7 @@ enum chips { ltc2978, ltc3880 };
259 struct ltc2978_data {
260 enum chips id;
261 int vin_min, vin_max;
262 - int temp_min, temp_max;
263 + int temp_min, temp_max[2];
264 int vout_min[8], vout_max[8];
265 int iout_max[2];
266 int temp2_max;
267 @@ -113,9 +113,10 @@ static int ltc2978_read_word_data_common(struct i2c_client *client, int page,
268 ret = pmbus_read_word_data(client, page,
269 LTC2978_MFR_TEMPERATURE_PEAK);
270 if (ret >= 0) {
271 - if (lin11_to_val(ret) > lin11_to_val(data->temp_max))
272 - data->temp_max = ret;
273 - ret = data->temp_max;
274 + if (lin11_to_val(ret)
275 + > lin11_to_val(data->temp_max[page]))
276 + data->temp_max[page] = ret;
277 + ret = data->temp_max[page];
278 }
279 break;
280 case PMBUS_VIRT_RESET_VOUT_HISTORY:
281 @@ -266,7 +267,7 @@ static int ltc2978_write_word_data(struct i2c_client *client, int page,
282 break;
283 case PMBUS_VIRT_RESET_TEMP_HISTORY:
284 data->temp_min = 0x7bff;
285 - data->temp_max = 0x7c00;
286 + data->temp_max[page] = 0x7c00;
287 ret = ltc2978_clear_peaks(client, page, data->id);
288 break;
289 default:
290 @@ -323,7 +324,8 @@ static int ltc2978_probe(struct i2c_client *client,
291 data->vin_min = 0x7bff;
292 data->vin_max = 0x7c00;
293 data->temp_min = 0x7bff;
294 - data->temp_max = 0x7c00;
295 + for (i = 0; i < ARRAY_SIZE(data->temp_max); i++)
296 + data->temp_max[i] = 0x7c00;
297 data->temp2_max = 0x7c00;
298
299 switch (data->id) {
300 diff --git a/drivers/hwmon/sht15.c b/drivers/hwmon/sht15.c
301 index eb01802..c689630 100644
302 --- a/drivers/hwmon/sht15.c
303 +++ b/drivers/hwmon/sht15.c
304 @@ -930,7 +930,7 @@ static int __devinit sht15_probe(struct platform_device *pdev)
305 if (ret != 0) {
306 dev_err(&pdev->dev,
307 "failed to enable regulator: %d\n", ret);
308 - return ret;
309 + goto err_free_data;
310 }
311
312 /*
313 diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
314 index 025367a..956a5ed 100644
315 --- a/drivers/net/macvlan.c
316 +++ b/drivers/net/macvlan.c
317 @@ -584,6 +584,7 @@ void macvlan_common_setup(struct net_device *dev)
318 ether_setup(dev);
319
320 dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING);
321 + dev->priv_flags |= IFF_UNICAST_FLT;
322 dev->netdev_ops = &macvlan_netdev_ops;
323 dev->destructor = free_netdev;
324 dev->header_ops = &macvlan_hard_header_ops,
325 diff --git a/drivers/net/tun.c b/drivers/net/tun.c
326 index 147b628..c896b8f 100644
327 --- a/drivers/net/tun.c
328 +++ b/drivers/net/tun.c
329 @@ -417,6 +417,8 @@ static netdev_tx_t tun_net_xmit(struct sk_buff *skb, struct net_device *dev)
330 * for indefinite time. */
331 skb_orphan(skb);
332
333 + nf_reset(skb);
334 +
335 /* Enqueue packet */
336 skb_queue_tail(&tun->socket.sk->sk_receive_queue, skb);
337
338 diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c
339 index 8739454..628545d 100644
340 --- a/drivers/staging/vt6656/main_usb.c
341 +++ b/drivers/staging/vt6656/main_usb.c
342 @@ -718,8 +718,6 @@ static int vt6656_suspend(struct usb_interface *intf, pm_message_t message)
343 if (device->flags & DEVICE_FLAGS_OPENED)
344 device_close(device->dev);
345
346 - usb_put_dev(interface_to_usbdev(intf));
347 -
348 return 0;
349 }
350
351 @@ -730,8 +728,6 @@ static int vt6656_resume(struct usb_interface *intf)
352 if (!device || !device->dev)
353 return -ENODEV;
354
355 - usb_get_dev(interface_to_usbdev(intf));
356 -
357 if (!(device->flags & DEVICE_FLAGS_OPENED))
358 device_open(device->dev);
359
360 diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
361 index eeae7fa..636c539 100644
362 --- a/drivers/tty/pty.c
363 +++ b/drivers/tty/pty.c
364 @@ -47,7 +47,6 @@ static void pty_close(struct tty_struct *tty, struct file *filp)
365 tty->packet = 0;
366 if (!tty->link)
367 return;
368 - tty->link->packet = 0;
369 set_bit(TTY_OTHER_CLOSED, &tty->link->flags);
370 wake_up_interruptible(&tty->link->read_wait);
371 wake_up_interruptible(&tty->link->write_wait);
372 diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
373 index 40747fe..ffba1ef 100644
374 --- a/drivers/tty/serial/8250/8250_pci.c
375 +++ b/drivers/tty/serial/8250/8250_pci.c
376 @@ -4086,6 +4086,10 @@ static struct pci_device_id serial_pci_tbl[] = {
377 PCI_VENDOR_ID_IBM, 0x0299,
378 0, 0, pbn_b0_bt_2_115200 },
379
380 + { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9835,
381 + 0x1000, 0x0012,
382 + 0, 0, pbn_b0_bt_2_115200 },
383 +
384 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9901,
385 0xA000, 0x1000,
386 0, 0, pbn_b0_1_115200 },
387 diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
388 index 070b442..3b2eaad 100644
389 --- a/drivers/tty/serial/Kconfig
390 +++ b/drivers/tty/serial/Kconfig
391 @@ -197,7 +197,7 @@ config SERIAL_SAMSUNG_UARTS_4
392 config SERIAL_SAMSUNG_UARTS
393 int
394 depends on ARM && PLAT_SAMSUNG
395 - default 6 if ARCH_S5P6450
396 + default 6 if CPU_S5P6450
397 default 4 if SERIAL_SAMSUNG_UARTS_4 || CPU_S3C2416
398 default 3
399 help
400 diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
401 index 524fe24..9dd51f7 100644
402 --- a/drivers/usb/class/cdc-wdm.c
403 +++ b/drivers/usb/class/cdc-wdm.c
404 @@ -81,6 +81,7 @@ MODULE_DEVICE_TABLE (usb, wdm_ids);
405 #define WDM_RESPONDING 7
406 #define WDM_SUSPENDING 8
407 #define WDM_RESETTING 9
408 +#define WDM_OVERFLOW 10
409
410 #define WDM_MAX 16
411
412 @@ -180,6 +181,7 @@ static void wdm_in_callback(struct urb *urb)
413 {
414 struct wdm_device *desc = urb->context;
415 int status = urb->status;
416 + int length = urb->actual_length;
417
418 spin_lock(&desc->iuspin);
419 clear_bit(WDM_RESPONDING, &desc->flags);
420 @@ -210,9 +212,17 @@ static void wdm_in_callback(struct urb *urb)
421 }
422
423 desc->rerr = status;
424 - desc->reslength = urb->actual_length;
425 - memmove(desc->ubuf + desc->length, desc->inbuf, desc->reslength);
426 - desc->length += desc->reslength;
427 + if (length + desc->length > desc->wMaxCommand) {
428 + /* The buffer would overflow */
429 + set_bit(WDM_OVERFLOW, &desc->flags);
430 + } else {
431 + /* we may already be in overflow */
432 + if (!test_bit(WDM_OVERFLOW, &desc->flags)) {
433 + memmove(desc->ubuf + desc->length, desc->inbuf, length);
434 + desc->length += length;
435 + desc->reslength = length;
436 + }
437 + }
438 skip_error:
439 wake_up(&desc->wait);
440
441 @@ -457,6 +467,11 @@ retry:
442 rv = -ENODEV;
443 goto err;
444 }
445 + if (test_bit(WDM_OVERFLOW, &desc->flags)) {
446 + clear_bit(WDM_OVERFLOW, &desc->flags);
447 + rv = -ENOBUFS;
448 + goto err;
449 + }
450 i++;
451 if (file->f_flags & O_NONBLOCK) {
452 if (!test_bit(WDM_READ, &desc->flags)) {
453 @@ -500,6 +515,7 @@ retry:
454 spin_unlock_irq(&desc->iuspin);
455 goto retry;
456 }
457 +
458 if (!desc->reslength) { /* zero length read */
459 dev_dbg(&desc->intf->dev, "%s: zero length - clearing WDM_READ\n", __func__);
460 clear_bit(WDM_READ, &desc->flags);
461 @@ -1023,6 +1039,7 @@ static int wdm_post_reset(struct usb_interface *intf)
462 struct wdm_device *desc = wdm_find_device(intf);
463 int rv;
464
465 + clear_bit(WDM_OVERFLOW, &desc->flags);
466 clear_bit(WDM_RESETTING, &desc->flags);
467 rv = recover_from_urb_loss(desc);
468 mutex_unlock(&desc->wlock);
469 diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c
470 index 7261e8f..e305689 100644
471 --- a/drivers/usb/host/ehci-q.c
472 +++ b/drivers/usb/host/ehci-q.c
473 @@ -135,7 +135,7 @@ qh_refresh (struct ehci_hcd *ehci, struct ehci_qh *qh)
474 * qtd is updated in qh_completions(). Update the QH
475 * overlay here.
476 */
477 - if (cpu_to_hc32(ehci, qtd->qtd_dma) == qh->hw->hw_current) {
478 + if (qh->hw->hw_token & ACTIVE_BIT(ehci)) {
479 qh->hw->hw_qtd_next = qtd->hw_next;
480 qtd = NULL;
481 }
482 @@ -459,11 +459,19 @@ qh_completions (struct ehci_hcd *ehci, struct ehci_qh *qh)
483 else if (last_status == -EINPROGRESS && !urb->unlinked)
484 continue;
485
486 - /* qh unlinked; token in overlay may be most current */
487 - if (state == QH_STATE_IDLE
488 - && cpu_to_hc32(ehci, qtd->qtd_dma)
489 - == hw->hw_current) {
490 + /*
491 + * If this was the active qtd when the qh was unlinked
492 + * and the overlay's token is active, then the overlay
493 + * hasn't been written back to the qtd yet so use its
494 + * token instead of the qtd's. After the qtd is
495 + * processed and removed, the overlay won't be valid
496 + * any more.
497 + */
498 + if (state == QH_STATE_IDLE &&
499 + qh->qtd_list.next == &qtd->qtd_list &&
500 + (hw->hw_token & ACTIVE_BIT(ehci))) {
501 token = hc32_to_cpu(ehci, hw->hw_token);
502 + hw->hw_token &= ~ACTIVE_BIT(ehci);
503
504 /* An unlink may leave an incomplete
505 * async transaction in the TT buffer.
506 diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
507 index f38a278..d9811e4 100644
508 --- a/drivers/usb/serial/cp210x.c
509 +++ b/drivers/usb/serial/cp210x.c
510 @@ -91,6 +91,7 @@ static const struct usb_device_id id_table[] = {
511 { USB_DEVICE(0x10C4, 0x813F) }, /* Tams Master Easy Control */
512 { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */
513 { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */
514 + { USB_DEVICE(0x2405, 0x0003) }, /* West Mountain Radio RIGblaster Advantage */
515 { USB_DEVICE(0x10C4, 0x8156) }, /* B&G H3000 link cable */
516 { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */
517 { USB_DEVICE(0x10C4, 0x815F) }, /* Timewave HamLinkUSB */
518 @@ -156,6 +157,25 @@ static const struct usb_device_id id_table[] = {
519 { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */
520 { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */
521 { USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */
522 + { USB_DEVICE(0x1FB9, 0x0100) }, /* Lake Shore Model 121 Current Source */
523 + { USB_DEVICE(0x1FB9, 0x0200) }, /* Lake Shore Model 218A Temperature Monitor */
524 + { USB_DEVICE(0x1FB9, 0x0201) }, /* Lake Shore Model 219 Temperature Monitor */
525 + { USB_DEVICE(0x1FB9, 0x0202) }, /* Lake Shore Model 233 Temperature Transmitter */
526 + { USB_DEVICE(0x1FB9, 0x0203) }, /* Lake Shore Model 235 Temperature Transmitter */
527 + { USB_DEVICE(0x1FB9, 0x0300) }, /* Lake Shore Model 335 Temperature Controller */
528 + { USB_DEVICE(0x1FB9, 0x0301) }, /* Lake Shore Model 336 Temperature Controller */
529 + { USB_DEVICE(0x1FB9, 0x0302) }, /* Lake Shore Model 350 Temperature Controller */
530 + { USB_DEVICE(0x1FB9, 0x0303) }, /* Lake Shore Model 371 AC Bridge */
531 + { USB_DEVICE(0x1FB9, 0x0400) }, /* Lake Shore Model 411 Handheld Gaussmeter */
532 + { USB_DEVICE(0x1FB9, 0x0401) }, /* Lake Shore Model 425 Gaussmeter */
533 + { USB_DEVICE(0x1FB9, 0x0402) }, /* Lake Shore Model 455A Gaussmeter */
534 + { USB_DEVICE(0x1FB9, 0x0403) }, /* Lake Shore Model 475A Gaussmeter */
535 + { USB_DEVICE(0x1FB9, 0x0404) }, /* Lake Shore Model 465 Three Axis Gaussmeter */
536 + { USB_DEVICE(0x1FB9, 0x0600) }, /* Lake Shore Model 625A Superconducting MPS */
537 + { USB_DEVICE(0x1FB9, 0x0601) }, /* Lake Shore Model 642A Magnet Power Supply */
538 + { USB_DEVICE(0x1FB9, 0x0602) }, /* Lake Shore Model 648 Magnet Power Supply */
539 + { USB_DEVICE(0x1FB9, 0x0700) }, /* Lake Shore Model 737 VSM Controller */
540 + { USB_DEVICE(0x1FB9, 0x0701) }, /* Lake Shore Model 776 Hall Matrix */
541 { USB_DEVICE(0x3195, 0xF190) }, /* Link Instruments MSO-19 */
542 { USB_DEVICE(0x3195, 0xF280) }, /* Link Instruments MSO-28 */
543 { USB_DEVICE(0x3195, 0xF281) }, /* Link Instruments MSO-28 */
544 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
545 index 539247b..78c4774 100644
546 --- a/drivers/usb/serial/option.c
547 +++ b/drivers/usb/serial/option.c
548 @@ -341,6 +341,8 @@ static void option_instat_callback(struct urb *urb);
549 #define CINTERION_PRODUCT_EU3_E 0x0051
550 #define CINTERION_PRODUCT_EU3_P 0x0052
551 #define CINTERION_PRODUCT_PH8 0x0053
552 +#define CINTERION_PRODUCT_AH6 0x0055
553 +#define CINTERION_PRODUCT_PLS8 0x0060
554
555 /* Olivetti products */
556 #define OLIVETTI_VENDOR_ID 0x0b3c
557 @@ -579,6 +581,7 @@ static const struct usb_device_id option_ids[] = {
558 { USB_DEVICE(QUANTA_VENDOR_ID, 0xea42),
559 .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
560 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c05, USB_CLASS_COMM, 0x02, 0xff) },
561 + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c1f, USB_CLASS_COMM, 0x02, 0xff) },
562 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) },
563 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173, 0xff, 0xff, 0xff),
564 .driver_info = (kernel_ulong_t) &net_intf1_blacklist },
565 @@ -1260,6 +1263,8 @@ static const struct usb_device_id option_ids[] = {
566 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EU3_E) },
567 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EU3_P) },
568 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PH8) },
569 + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AH6) },
570 + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PLS8) },
571 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) },
572 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },
573 { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) },
574 diff --git a/drivers/usb/serial/qcaux.c b/drivers/usb/serial/qcaux.c
575 index b223381..018f103 100644
576 --- a/drivers/usb/serial/qcaux.c
577 +++ b/drivers/usb/serial/qcaux.c
578 @@ -69,6 +69,7 @@ static struct usb_device_id id_table[] = {
579 { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xfd, 0xff) }, /* NMEA */
580 { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xfe, 0xff) }, /* WMC */
581 { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xff, 0xff) }, /* DIAG */
582 + { USB_DEVICE_AND_INTERFACE_INFO(0x1fac, 0x0151, 0xff, 0xff, 0xff) },
583 { },
584 };
585 MODULE_DEVICE_TABLE(usb, id_table);
586 diff --git a/drivers/usb/storage/initializers.c b/drivers/usb/storage/initializers.c
587 index 7ab9046..105d900 100644
588 --- a/drivers/usb/storage/initializers.c
589 +++ b/drivers/usb/storage/initializers.c
590 @@ -92,8 +92,8 @@ int usb_stor_ucr61s2b_init(struct us_data *us)
591 return 0;
592 }
593
594 -/* This places the HUAWEI usb dongles in multi-port mode */
595 -static int usb_stor_huawei_feature_init(struct us_data *us)
596 +/* This places the HUAWEI E220 devices in multi-port mode */
597 +int usb_stor_huawei_e220_init(struct us_data *us)
598 {
599 int result;
600
601 @@ -104,75 +104,3 @@ static int usb_stor_huawei_feature_init(struct us_data *us)
602 US_DEBUGP("Huawei mode set result is %d\n", result);
603 return 0;
604 }
605 -
606 -/*
607 - * It will send a scsi switch command called rewind' to huawei dongle.
608 - * When the dongle receives this command at the first time,
609 - * it will reboot immediately. After rebooted, it will ignore this command.
610 - * So it is unnecessary to read its response.
611 - */
612 -static int usb_stor_huawei_scsi_init(struct us_data *us)
613 -{
614 - int result = 0;
615 - int act_len = 0;
616 - struct bulk_cb_wrap *bcbw = (struct bulk_cb_wrap *) us->iobuf;
617 - char rewind_cmd[] = {0x11, 0x06, 0x20, 0x00, 0x00, 0x01, 0x01, 0x00,
618 - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
619 -
620 - bcbw->Signature = cpu_to_le32(US_BULK_CB_SIGN);
621 - bcbw->Tag = 0;
622 - bcbw->DataTransferLength = 0;
623 - bcbw->Flags = bcbw->Lun = 0;
624 - bcbw->Length = sizeof(rewind_cmd);
625 - memset(bcbw->CDB, 0, sizeof(bcbw->CDB));
626 - memcpy(bcbw->CDB, rewind_cmd, sizeof(rewind_cmd));
627 -
628 - result = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe, bcbw,
629 - US_BULK_CB_WRAP_LEN, &act_len);
630 - US_DEBUGP("transfer actual length=%d, result=%d\n", act_len, result);
631 - return result;
632 -}
633 -
634 -/*
635 - * It tries to find the supported Huawei USB dongles.
636 - * In Huawei, they assign the following product IDs
637 - * for all of their mobile broadband dongles,
638 - * including the new dongles in the future.
639 - * So if the product ID is not included in this list,
640 - * it means it is not Huawei's mobile broadband dongles.
641 - */
642 -static int usb_stor_huawei_dongles_pid(struct us_data *us)
643 -{
644 - struct usb_interface_descriptor *idesc;
645 - int idProduct;
646 -
647 - idesc = &us->pusb_intf->cur_altsetting->desc;
648 - idProduct = le16_to_cpu(us->pusb_dev->descriptor.idProduct);
649 - /* The first port is CDROM,
650 - * means the dongle in the single port mode,
651 - * and a switch command is required to be sent. */
652 - if (idesc && idesc->bInterfaceNumber == 0) {
653 - if ((idProduct == 0x1001)
654 - || (idProduct == 0x1003)
655 - || (idProduct == 0x1004)
656 - || (idProduct >= 0x1401 && idProduct <= 0x1500)
657 - || (idProduct >= 0x1505 && idProduct <= 0x1600)
658 - || (idProduct >= 0x1c02 && idProduct <= 0x2202)) {
659 - return 1;
660 - }
661 - }
662 - return 0;
663 -}
664 -
665 -int usb_stor_huawei_init(struct us_data *us)
666 -{
667 - int result = 0;
668 -
669 - if (usb_stor_huawei_dongles_pid(us)) {
670 - if (le16_to_cpu(us->pusb_dev->descriptor.idProduct) >= 0x1446)
671 - result = usb_stor_huawei_scsi_init(us);
672 - else
673 - result = usb_stor_huawei_feature_init(us);
674 - }
675 - return result;
676 -}
677 diff --git a/drivers/usb/storage/initializers.h b/drivers/usb/storage/initializers.h
678 index 5376d4f..529327f 100644
679 --- a/drivers/usb/storage/initializers.h
680 +++ b/drivers/usb/storage/initializers.h
681 @@ -46,5 +46,5 @@ int usb_stor_euscsi_init(struct us_data *us);
682 * flash reader */
683 int usb_stor_ucr61s2b_init(struct us_data *us);
684
685 -/* This places the HUAWEI usb dongles in multi-port mode */
686 -int usb_stor_huawei_init(struct us_data *us);
687 +/* This places the HUAWEI E220 devices in multi-port mode */
688 +int usb_stor_huawei_e220_init(struct us_data *us);
689 diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
690 index 27858f9..5ffa116 100644
691 --- a/drivers/usb/storage/unusual_devs.h
692 +++ b/drivers/usb/storage/unusual_devs.h
693 @@ -1515,10 +1515,335 @@ UNUSUAL_DEV( 0x1210, 0x0003, 0x0100, 0x0100,
694 /* Reported by fangxiaozhi <huananhu@huawei.com>
695 * This brings the HUAWEI data card devices into multi-port mode
696 */
697 -UNUSUAL_VENDOR_INTF(0x12d1, 0x08, 0x06, 0x50,
698 +UNUSUAL_DEV( 0x12d1, 0x1001, 0x0000, 0x0000,
699 "HUAWEI MOBILE",
700 "Mass Storage",
701 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_init,
702 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
703 + 0),
704 +UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000,
705 + "HUAWEI MOBILE",
706 + "Mass Storage",
707 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
708 + 0),
709 +UNUSUAL_DEV( 0x12d1, 0x1004, 0x0000, 0x0000,
710 + "HUAWEI MOBILE",
711 + "Mass Storage",
712 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
713 + 0),
714 +UNUSUAL_DEV( 0x12d1, 0x1401, 0x0000, 0x0000,
715 + "HUAWEI MOBILE",
716 + "Mass Storage",
717 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
718 + 0),
719 +UNUSUAL_DEV( 0x12d1, 0x1402, 0x0000, 0x0000,
720 + "HUAWEI MOBILE",
721 + "Mass Storage",
722 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
723 + 0),
724 +UNUSUAL_DEV( 0x12d1, 0x1403, 0x0000, 0x0000,
725 + "HUAWEI MOBILE",
726 + "Mass Storage",
727 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
728 + 0),
729 +UNUSUAL_DEV( 0x12d1, 0x1404, 0x0000, 0x0000,
730 + "HUAWEI MOBILE",
731 + "Mass Storage",
732 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
733 + 0),
734 +UNUSUAL_DEV( 0x12d1, 0x1405, 0x0000, 0x0000,
735 + "HUAWEI MOBILE",
736 + "Mass Storage",
737 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
738 + 0),
739 +UNUSUAL_DEV( 0x12d1, 0x1406, 0x0000, 0x0000,
740 + "HUAWEI MOBILE",
741 + "Mass Storage",
742 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
743 + 0),
744 +UNUSUAL_DEV( 0x12d1, 0x1407, 0x0000, 0x0000,
745 + "HUAWEI MOBILE",
746 + "Mass Storage",
747 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
748 + 0),
749 +UNUSUAL_DEV( 0x12d1, 0x1408, 0x0000, 0x0000,
750 + "HUAWEI MOBILE",
751 + "Mass Storage",
752 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
753 + 0),
754 +UNUSUAL_DEV( 0x12d1, 0x1409, 0x0000, 0x0000,
755 + "HUAWEI MOBILE",
756 + "Mass Storage",
757 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
758 + 0),
759 +UNUSUAL_DEV( 0x12d1, 0x140A, 0x0000, 0x0000,
760 + "HUAWEI MOBILE",
761 + "Mass Storage",
762 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
763 + 0),
764 +UNUSUAL_DEV( 0x12d1, 0x140B, 0x0000, 0x0000,
765 + "HUAWEI MOBILE",
766 + "Mass Storage",
767 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
768 + 0),
769 +UNUSUAL_DEV( 0x12d1, 0x140C, 0x0000, 0x0000,
770 + "HUAWEI MOBILE",
771 + "Mass Storage",
772 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
773 + 0),
774 +UNUSUAL_DEV( 0x12d1, 0x140D, 0x0000, 0x0000,
775 + "HUAWEI MOBILE",
776 + "Mass Storage",
777 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
778 + 0),
779 +UNUSUAL_DEV( 0x12d1, 0x140E, 0x0000, 0x0000,
780 + "HUAWEI MOBILE",
781 + "Mass Storage",
782 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
783 + 0),
784 +UNUSUAL_DEV( 0x12d1, 0x140F, 0x0000, 0x0000,
785 + "HUAWEI MOBILE",
786 + "Mass Storage",
787 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
788 + 0),
789 +UNUSUAL_DEV( 0x12d1, 0x1410, 0x0000, 0x0000,
790 + "HUAWEI MOBILE",
791 + "Mass Storage",
792 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
793 + 0),
794 +UNUSUAL_DEV( 0x12d1, 0x1411, 0x0000, 0x0000,
795 + "HUAWEI MOBILE",
796 + "Mass Storage",
797 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
798 + 0),
799 +UNUSUAL_DEV( 0x12d1, 0x1412, 0x0000, 0x0000,
800 + "HUAWEI MOBILE",
801 + "Mass Storage",
802 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
803 + 0),
804 +UNUSUAL_DEV( 0x12d1, 0x1413, 0x0000, 0x0000,
805 + "HUAWEI MOBILE",
806 + "Mass Storage",
807 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
808 + 0),
809 +UNUSUAL_DEV( 0x12d1, 0x1414, 0x0000, 0x0000,
810 + "HUAWEI MOBILE",
811 + "Mass Storage",
812 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
813 + 0),
814 +UNUSUAL_DEV( 0x12d1, 0x1415, 0x0000, 0x0000,
815 + "HUAWEI MOBILE",
816 + "Mass Storage",
817 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
818 + 0),
819 +UNUSUAL_DEV( 0x12d1, 0x1416, 0x0000, 0x0000,
820 + "HUAWEI MOBILE",
821 + "Mass Storage",
822 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
823 + 0),
824 +UNUSUAL_DEV( 0x12d1, 0x1417, 0x0000, 0x0000,
825 + "HUAWEI MOBILE",
826 + "Mass Storage",
827 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
828 + 0),
829 +UNUSUAL_DEV( 0x12d1, 0x1418, 0x0000, 0x0000,
830 + "HUAWEI MOBILE",
831 + "Mass Storage",
832 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
833 + 0),
834 +UNUSUAL_DEV( 0x12d1, 0x1419, 0x0000, 0x0000,
835 + "HUAWEI MOBILE",
836 + "Mass Storage",
837 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
838 + 0),
839 +UNUSUAL_DEV( 0x12d1, 0x141A, 0x0000, 0x0000,
840 + "HUAWEI MOBILE",
841 + "Mass Storage",
842 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
843 + 0),
844 +UNUSUAL_DEV( 0x12d1, 0x141B, 0x0000, 0x0000,
845 + "HUAWEI MOBILE",
846 + "Mass Storage",
847 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
848 + 0),
849 +UNUSUAL_DEV( 0x12d1, 0x141C, 0x0000, 0x0000,
850 + "HUAWEI MOBILE",
851 + "Mass Storage",
852 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
853 + 0),
854 +UNUSUAL_DEV( 0x12d1, 0x141D, 0x0000, 0x0000,
855 + "HUAWEI MOBILE",
856 + "Mass Storage",
857 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
858 + 0),
859 +UNUSUAL_DEV( 0x12d1, 0x141E, 0x0000, 0x0000,
860 + "HUAWEI MOBILE",
861 + "Mass Storage",
862 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
863 + 0),
864 +UNUSUAL_DEV( 0x12d1, 0x141F, 0x0000, 0x0000,
865 + "HUAWEI MOBILE",
866 + "Mass Storage",
867 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
868 + 0),
869 +UNUSUAL_DEV( 0x12d1, 0x1420, 0x0000, 0x0000,
870 + "HUAWEI MOBILE",
871 + "Mass Storage",
872 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
873 + 0),
874 +UNUSUAL_DEV( 0x12d1, 0x1421, 0x0000, 0x0000,
875 + "HUAWEI MOBILE",
876 + "Mass Storage",
877 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
878 + 0),
879 +UNUSUAL_DEV( 0x12d1, 0x1422, 0x0000, 0x0000,
880 + "HUAWEI MOBILE",
881 + "Mass Storage",
882 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
883 + 0),
884 +UNUSUAL_DEV( 0x12d1, 0x1423, 0x0000, 0x0000,
885 + "HUAWEI MOBILE",
886 + "Mass Storage",
887 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
888 + 0),
889 +UNUSUAL_DEV( 0x12d1, 0x1424, 0x0000, 0x0000,
890 + "HUAWEI MOBILE",
891 + "Mass Storage",
892 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
893 + 0),
894 +UNUSUAL_DEV( 0x12d1, 0x1425, 0x0000, 0x0000,
895 + "HUAWEI MOBILE",
896 + "Mass Storage",
897 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
898 + 0),
899 +UNUSUAL_DEV( 0x12d1, 0x1426, 0x0000, 0x0000,
900 + "HUAWEI MOBILE",
901 + "Mass Storage",
902 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
903 + 0),
904 +UNUSUAL_DEV( 0x12d1, 0x1427, 0x0000, 0x0000,
905 + "HUAWEI MOBILE",
906 + "Mass Storage",
907 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
908 + 0),
909 +UNUSUAL_DEV( 0x12d1, 0x1428, 0x0000, 0x0000,
910 + "HUAWEI MOBILE",
911 + "Mass Storage",
912 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
913 + 0),
914 +UNUSUAL_DEV( 0x12d1, 0x1429, 0x0000, 0x0000,
915 + "HUAWEI MOBILE",
916 + "Mass Storage",
917 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
918 + 0),
919 +UNUSUAL_DEV( 0x12d1, 0x142A, 0x0000, 0x0000,
920 + "HUAWEI MOBILE",
921 + "Mass Storage",
922 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
923 + 0),
924 +UNUSUAL_DEV( 0x12d1, 0x142B, 0x0000, 0x0000,
925 + "HUAWEI MOBILE",
926 + "Mass Storage",
927 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
928 + 0),
929 +UNUSUAL_DEV( 0x12d1, 0x142C, 0x0000, 0x0000,
930 + "HUAWEI MOBILE",
931 + "Mass Storage",
932 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
933 + 0),
934 +UNUSUAL_DEV( 0x12d1, 0x142D, 0x0000, 0x0000,
935 + "HUAWEI MOBILE",
936 + "Mass Storage",
937 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
938 + 0),
939 +UNUSUAL_DEV( 0x12d1, 0x142E, 0x0000, 0x0000,
940 + "HUAWEI MOBILE",
941 + "Mass Storage",
942 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
943 + 0),
944 +UNUSUAL_DEV( 0x12d1, 0x142F, 0x0000, 0x0000,
945 + "HUAWEI MOBILE",
946 + "Mass Storage",
947 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
948 + 0),
949 +UNUSUAL_DEV( 0x12d1, 0x1430, 0x0000, 0x0000,
950 + "HUAWEI MOBILE",
951 + "Mass Storage",
952 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
953 + 0),
954 +UNUSUAL_DEV( 0x12d1, 0x1431, 0x0000, 0x0000,
955 + "HUAWEI MOBILE",
956 + "Mass Storage",
957 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
958 + 0),
959 +UNUSUAL_DEV( 0x12d1, 0x1432, 0x0000, 0x0000,
960 + "HUAWEI MOBILE",
961 + "Mass Storage",
962 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
963 + 0),
964 +UNUSUAL_DEV( 0x12d1, 0x1433, 0x0000, 0x0000,
965 + "HUAWEI MOBILE",
966 + "Mass Storage",
967 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
968 + 0),
969 +UNUSUAL_DEV( 0x12d1, 0x1434, 0x0000, 0x0000,
970 + "HUAWEI MOBILE",
971 + "Mass Storage",
972 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
973 + 0),
974 +UNUSUAL_DEV( 0x12d1, 0x1435, 0x0000, 0x0000,
975 + "HUAWEI MOBILE",
976 + "Mass Storage",
977 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
978 + 0),
979 +UNUSUAL_DEV( 0x12d1, 0x1436, 0x0000, 0x0000,
980 + "HUAWEI MOBILE",
981 + "Mass Storage",
982 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
983 + 0),
984 +UNUSUAL_DEV( 0x12d1, 0x1437, 0x0000, 0x0000,
985 + "HUAWEI MOBILE",
986 + "Mass Storage",
987 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
988 + 0),
989 +UNUSUAL_DEV( 0x12d1, 0x1438, 0x0000, 0x0000,
990 + "HUAWEI MOBILE",
991 + "Mass Storage",
992 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
993 + 0),
994 +UNUSUAL_DEV( 0x12d1, 0x1439, 0x0000, 0x0000,
995 + "HUAWEI MOBILE",
996 + "Mass Storage",
997 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
998 + 0),
999 +UNUSUAL_DEV( 0x12d1, 0x143A, 0x0000, 0x0000,
1000 + "HUAWEI MOBILE",
1001 + "Mass Storage",
1002 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1003 + 0),
1004 +UNUSUAL_DEV( 0x12d1, 0x143B, 0x0000, 0x0000,
1005 + "HUAWEI MOBILE",
1006 + "Mass Storage",
1007 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1008 + 0),
1009 +UNUSUAL_DEV( 0x12d1, 0x143C, 0x0000, 0x0000,
1010 + "HUAWEI MOBILE",
1011 + "Mass Storage",
1012 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1013 + 0),
1014 +UNUSUAL_DEV( 0x12d1, 0x143D, 0x0000, 0x0000,
1015 + "HUAWEI MOBILE",
1016 + "Mass Storage",
1017 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1018 + 0),
1019 +UNUSUAL_DEV( 0x12d1, 0x143E, 0x0000, 0x0000,
1020 + "HUAWEI MOBILE",
1021 + "Mass Storage",
1022 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1023 + 0),
1024 +UNUSUAL_DEV( 0x12d1, 0x143F, 0x0000, 0x0000,
1025 + "HUAWEI MOBILE",
1026 + "Mass Storage",
1027 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1028 0),
1029
1030 /* Reported by Vilius Bilinkevicius <vilisas AT xxx DOT lt) */
1031 diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c
1032 index d99505b..78506eb 100644
1033 --- a/drivers/video/atmel_lcdfb.c
1034 +++ b/drivers/video/atmel_lcdfb.c
1035 @@ -422,17 +422,22 @@ static int atmel_lcdfb_check_var(struct fb_var_screeninfo *var,
1036 = var->bits_per_pixel;
1037 break;
1038 case 16:
1039 + /* Older SOCs use IBGR:555 rather than BGR:565. */
1040 + if (sinfo->have_intensity_bit)
1041 + var->green.length = 5;
1042 + else
1043 + var->green.length = 6;
1044 +
1045 if (sinfo->lcd_wiring_mode == ATMEL_LCDC_WIRING_RGB) {
1046 - /* RGB:565 mode */
1047 - var->red.offset = 11;
1048 + /* RGB:5X5 mode */
1049 + var->red.offset = var->green.length + 5;
1050 var->blue.offset = 0;
1051 } else {
1052 - /* BGR:565 mode */
1053 + /* BGR:5X5 mode */
1054 var->red.offset = 0;
1055 - var->blue.offset = 11;
1056 + var->blue.offset = var->green.length + 5;
1057 }
1058 var->green.offset = 5;
1059 - var->green.length = 6;
1060 var->red.length = var->blue.length = 5;
1061 break;
1062 case 32:
1063 @@ -679,8 +684,7 @@ static int atmel_lcdfb_setcolreg(unsigned int regno, unsigned int red,
1064
1065 case FB_VISUAL_PSEUDOCOLOR:
1066 if (regno < 256) {
1067 - if (cpu_is_at91sam9261() || cpu_is_at91sam9263()
1068 - || cpu_is_at91sam9rl()) {
1069 + if (sinfo->have_intensity_bit) {
1070 /* old style I+BGR:555 */
1071 val = ((red >> 11) & 0x001f);
1072 val |= ((green >> 6) & 0x03e0);
1073 @@ -870,6 +874,10 @@ static int __init atmel_lcdfb_probe(struct platform_device *pdev)
1074 }
1075 sinfo->info = info;
1076 sinfo->pdev = pdev;
1077 + if (cpu_is_at91sam9261() || cpu_is_at91sam9263() ||
1078 + cpu_is_at91sam9rl()) {
1079 + sinfo->have_intensity_bit = true;
1080 + }
1081
1082 strcpy(info->fix.id, sinfo->pdev->name);
1083 info->flags = ATMEL_LCDFB_FBINFO_DEFAULT;
1084 diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c
1085 index 9761950..c9bc19f 100644
1086 --- a/drivers/w1/w1.c
1087 +++ b/drivers/w1/w1.c
1088 @@ -928,7 +928,8 @@ void w1_search(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb
1089 tmp64 = (triplet_ret >> 2);
1090 rn |= (tmp64 << i);
1091
1092 - if (kthread_should_stop()) {
1093 + /* ensure we're called from kthread and not by netlink callback */
1094 + if (!dev->priv && kthread_should_stop()) {
1095 dev_dbg(&dev->dev, "Abort w1_search\n");
1096 return;
1097 }
1098 diff --git a/drivers/xen/xen-pciback/pciback_ops.c b/drivers/xen/xen-pciback/pciback_ops.c
1099 index 97f5d26..b6df20a 100644
1100 --- a/drivers/xen/xen-pciback/pciback_ops.c
1101 +++ b/drivers/xen/xen-pciback/pciback_ops.c
1102 @@ -113,7 +113,8 @@ void xen_pcibk_reset_device(struct pci_dev *dev)
1103 if (dev->msi_enabled)
1104 pci_disable_msi(dev);
1105 #endif
1106 - pci_disable_device(dev);
1107 + if (pci_is_enabled(dev))
1108 + pci_disable_device(dev);
1109
1110 pci_write_config_word(dev, PCI_COMMAND, 0);
1111
1112 diff --git a/fs/block_dev.c b/fs/block_dev.c
1113 index b3be92c..a6e1e06 100644
1114 --- a/fs/block_dev.c
1115 +++ b/fs/block_dev.c
1116 @@ -1086,7 +1086,9 @@ void bd_set_size(struct block_device *bdev, loff_t size)
1117 {
1118 unsigned bsize = bdev_logical_block_size(bdev);
1119
1120 - bdev->bd_inode->i_size = size;
1121 + mutex_lock(&bdev->bd_inode->i_mutex);
1122 + i_size_write(bdev->bd_inode, size);
1123 + mutex_unlock(&bdev->bd_inode->i_mutex);
1124 while (bsize < PAGE_CACHE_SIZE) {
1125 if (size & bsize)
1126 break;
1127 diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
1128 index 3ad7ee9..06744f1 100644
1129 --- a/fs/btrfs/volumes.c
1130 +++ b/fs/btrfs/volumes.c
1131 @@ -591,6 +591,12 @@ int btrfs_close_devices(struct btrfs_fs_devices *fs_devices)
1132 __btrfs_close_devices(fs_devices);
1133 free_fs_devices(fs_devices);
1134 }
1135 + /*
1136 + * Wait for rcu kworkers under __btrfs_close_devices
1137 + * to finish all blkdev_puts so device is really
1138 + * free when umount is done.
1139 + */
1140 + rcu_barrier();
1141 return ret;
1142 }
1143
1144 diff --git a/fs/ext3/super.c b/fs/ext3/super.c
1145 index cf0b592..ef4c812 100644
1146 --- a/fs/ext3/super.c
1147 +++ b/fs/ext3/super.c
1148 @@ -364,7 +364,7 @@ static struct block_device *ext3_blkdev_get(dev_t dev, struct super_block *sb)
1149 return bdev;
1150
1151 fail:
1152 - ext3_msg(sb, "error: failed to open journal device %s: %ld",
1153 + ext3_msg(sb, KERN_ERR, "error: failed to open journal device %s: %ld",
1154 __bdevname(dev, b), PTR_ERR(bdev));
1155
1156 return NULL;
1157 @@ -891,7 +891,7 @@ static ext3_fsblk_t get_sb_block(void **data, struct super_block *sb)
1158 /*todo: use simple_strtoll with >32bit ext3 */
1159 sb_block = simple_strtoul(options, &options, 0);
1160 if (*options && *options != ',') {
1161 - ext3_msg(sb, "error: invalid sb specification: %s",
1162 + ext3_msg(sb, KERN_ERR, "error: invalid sb specification: %s",
1163 (char *) *data);
1164 return 1;
1165 }
1166 diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
1167 index f18d537..8e9a069 100644
1168 --- a/include/linux/perf_event.h
1169 +++ b/include/linux/perf_event.h
1170 @@ -1330,6 +1330,12 @@ static inline void perf_event_disable(struct perf_event *event) { }
1171 static inline void perf_event_task_tick(void) { }
1172 #endif
1173
1174 +#if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_INTEL)
1175 +extern void perf_restore_debug_store(void);
1176 +#else
1177 +static inline void perf_restore_debug_store(void) { }
1178 +#endif
1179 +
1180 #define perf_output_put(handle, x) perf_output_copy((handle), &(x), sizeof(x))
1181
1182 /*
1183 diff --git a/include/video/atmel_lcdc.h b/include/video/atmel_lcdc.h
1184 index 28447f1..5f0e234 100644
1185 --- a/include/video/atmel_lcdc.h
1186 +++ b/include/video/atmel_lcdc.h
1187 @@ -62,6 +62,7 @@ struct atmel_lcdfb_info {
1188 void (*atmel_lcdfb_power_control)(int on);
1189 struct fb_monspecs *default_monspecs;
1190 u32 pseudo_palette[16];
1191 + bool have_intensity_bit;
1192 };
1193
1194 #define ATMEL_LCDC_DMABADDR1 0x00
1195 diff --git a/kernel/signal.c b/kernel/signal.c
1196 index a4363a9..9f70f45 100644
1197 --- a/kernel/signal.c
1198 +++ b/kernel/signal.c
1199 @@ -482,6 +482,9 @@ flush_signal_handlers(struct task_struct *t, int force_default)
1200 if (force_default || ka->sa.sa_handler != SIG_IGN)
1201 ka->sa.sa_handler = SIG_DFL;
1202 ka->sa.sa_flags = 0;
1203 +#ifdef SA_RESTORER
1204 + ka->sa.sa_restorer = NULL;
1205 +#endif
1206 sigemptyset(&ka->sa.sa_mask);
1207 ka++;
1208 }
1209 diff --git a/net/core/dev.c b/net/core/dev.c
1210 index eb858dc..dfa2f49 100644
1211 --- a/net/core/dev.c
1212 +++ b/net/core/dev.c
1213 @@ -3230,6 +3230,7 @@ ncls:
1214 }
1215 switch (rx_handler(&skb)) {
1216 case RX_HANDLER_CONSUMED:
1217 + ret = NET_RX_SUCCESS;
1218 goto out;
1219 case RX_HANDLER_ANOTHER:
1220 goto another_round;
1221 diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
1222 index 900fc61..da7b3a5 100644
1223 --- a/net/core/rtnetlink.c
1224 +++ b/net/core/rtnetlink.c
1225 @@ -975,6 +975,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
1226 * report anything.
1227 */
1228 ivi.spoofchk = -1;
1229 + memset(ivi.mac, 0, sizeof(ivi.mac));
1230 if (dev->netdev_ops->ndo_get_vf_config(dev, i, &ivi))
1231 break;
1232 vf_mac.vf =
1233 diff --git a/net/dcb/dcbnl.c b/net/dcb/dcbnl.c
1234 index d860530..2f9517d 100644
1235 --- a/net/dcb/dcbnl.c
1236 +++ b/net/dcb/dcbnl.c
1237 @@ -336,6 +336,7 @@ static int dcbnl_getperm_hwaddr(struct net_device *netdev, struct nlattr **tb,
1238 dcb->dcb_family = AF_UNSPEC;
1239 dcb->cmd = DCB_CMD_GPERM_HWADDR;
1240
1241 + memset(perm_addr, 0, sizeof(perm_addr));
1242 netdev->dcbnl_ops->getpermhwaddr(netdev, perm_addr);
1243
1244 ret = nla_put(dcbnl_skb, DCB_ATTR_PERM_HWADDR, sizeof(perm_addr),
1245 @@ -1238,6 +1239,7 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev)
1246
1247 if (ops->ieee_getets) {
1248 struct ieee_ets ets;
1249 + memset(&ets, 0, sizeof(ets));
1250 err = ops->ieee_getets(netdev, &ets);
1251 if (!err)
1252 NLA_PUT(skb, DCB_ATTR_IEEE_ETS, sizeof(ets), &ets);
1253 @@ -1245,6 +1247,7 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev)
1254
1255 if (ops->ieee_getpfc) {
1256 struct ieee_pfc pfc;
1257 + memset(&pfc, 0, sizeof(pfc));
1258 err = ops->ieee_getpfc(netdev, &pfc);
1259 if (!err)
1260 NLA_PUT(skb, DCB_ATTR_IEEE_PFC, sizeof(pfc), &pfc);
1261 @@ -1277,6 +1280,7 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev)
1262 /* get peer info if available */
1263 if (ops->ieee_peer_getets) {
1264 struct ieee_ets ets;
1265 + memset(&ets, 0, sizeof(ets));
1266 err = ops->ieee_peer_getets(netdev, &ets);
1267 if (!err)
1268 NLA_PUT(skb, DCB_ATTR_IEEE_PEER_ETS, sizeof(ets), &ets);
1269 @@ -1284,6 +1288,7 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev)
1270
1271 if (ops->ieee_peer_getpfc) {
1272 struct ieee_pfc pfc;
1273 + memset(&pfc, 0, sizeof(pfc));
1274 err = ops->ieee_peer_getpfc(netdev, &pfc);
1275 if (!err)
1276 NLA_PUT(skb, DCB_ATTR_IEEE_PEER_PFC, sizeof(pfc), &pfc);
1277 @@ -1463,6 +1468,7 @@ static int dcbnl_cee_fill(struct sk_buff *skb, struct net_device *netdev)
1278 /* peer info if available */
1279 if (ops->cee_peer_getpg) {
1280 struct cee_pg pg;
1281 + memset(&pg, 0, sizeof(pg));
1282 err = ops->cee_peer_getpg(netdev, &pg);
1283 if (!err)
1284 NLA_PUT(skb, DCB_ATTR_CEE_PEER_PG, sizeof(pg), &pg);
1285 @@ -1470,6 +1476,7 @@ static int dcbnl_cee_fill(struct sk_buff *skb, struct net_device *netdev)
1286
1287 if (ops->cee_peer_getpfc) {
1288 struct cee_pfc pfc;
1289 + memset(&pfc, 0, sizeof(pfc));
1290 err = ops->cee_peer_getpfc(netdev, &pfc);
1291 if (!err)
1292 NLA_PUT(skb, DCB_ATTR_CEE_PEER_PFC, sizeof(pfc), &pfc);
1293 diff --git a/net/ieee802154/6lowpan.h b/net/ieee802154/6lowpan.h
1294 index aeff3f3..60b5ef5 100644
1295 --- a/net/ieee802154/6lowpan.h
1296 +++ b/net/ieee802154/6lowpan.h
1297 @@ -87,7 +87,7 @@
1298 (memcmp(addr1, addr2, length >> 3) == 0)
1299
1300 /* local link, i.e. FE80::/10 */
1301 -#define is_addr_link_local(a) (((a)->s6_addr16[0]) == 0x80FE)
1302 +#define is_addr_link_local(a) (((a)->s6_addr16[0]) == htons(0xFE80))
1303
1304 /*
1305 * check whether we can compress the IID to 16 bits,
1306 diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
1307 index 57b20b9..fc2fc72 100644
1308 --- a/net/ipv4/tcp_input.c
1309 +++ b/net/ipv4/tcp_input.c
1310 @@ -5519,6 +5519,9 @@ int tcp_rcv_established(struct sock *sk, struct sk_buff *skb,
1311 if (tcp_checksum_complete_user(sk, skb))
1312 goto csum_error;
1313
1314 + if ((int)skb->truesize > sk->sk_forward_alloc)
1315 + goto step5;
1316 +
1317 /* Predicted packet is in window by definition.
1318 * seq == rcv_nxt and rcv_wup <= rcv_nxt.
1319 * Hence, check seq<=rcv_wup reduces to:
1320 @@ -5530,9 +5533,6 @@ int tcp_rcv_established(struct sock *sk, struct sk_buff *skb,
1321
1322 tcp_rcv_rtt_measure_ts(sk, skb);
1323
1324 - if ((int)skb->truesize > sk->sk_forward_alloc)
1325 - goto step5;
1326 -
1327 NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPHPHITS);
1328
1329 /* Bulk data transfer: receiver */
1330 diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
1331 index 1ca5d45..d813575 100644
1332 --- a/net/ipv6/ip6_input.c
1333 +++ b/net/ipv6/ip6_input.c
1334 @@ -265,7 +265,8 @@ int ip6_mc_input(struct sk_buff *skb)
1335 * IPv6 multicast router mode is now supported ;)
1336 */
1337 if (dev_net(skb->dev)->ipv6.devconf_all->mc_forwarding &&
1338 - !(ipv6_addr_type(&hdr->daddr) & IPV6_ADDR_LINKLOCAL) &&
1339 + !(ipv6_addr_type(&hdr->daddr) &
1340 + (IPV6_ADDR_LOOPBACK|IPV6_ADDR_LINKLOCAL)) &&
1341 likely(!(IP6CB(skb)->flags & IP6SKB_FORWARDED))) {
1342 /*
1343 * Okay, we try to forward - split and duplicate
1344 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
1345 index 493490f..5a272c6 100644
1346 --- a/net/ipv6/route.c
1347 +++ b/net/ipv6/route.c
1348 @@ -1973,7 +1973,8 @@ void rt6_purge_dflt_routers(struct net *net)
1349 restart:
1350 read_lock_bh(&table->tb6_lock);
1351 for (rt = table->tb6_root.leaf; rt; rt = rt->dst.rt6_next) {
1352 - if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) {
1353 + if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF) &&
1354 + (!rt->rt6i_idev || rt->rt6i_idev->cnf.accept_ra != 2)) {
1355 dst_hold(&rt->dst);
1356 read_unlock_bh(&table->tb6_lock);
1357 ip6_del_rt(rt);
1358 diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c
1359 index 1addd9f..9728a75 100644
1360 --- a/net/l2tp/l2tp_ppp.c
1361 +++ b/net/l2tp/l2tp_ppp.c
1362 @@ -360,6 +360,7 @@ static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msgh
1363 l2tp_xmit_skb(session, skb, session->hdr_len);
1364
1365 sock_put(ps->tunnel_sock);
1366 + sock_put(sk);
1367
1368 return error;
1369
1370 diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c
1371 index e7ff694..7fe20d0 100644
1372 --- a/net/netlabel/netlabel_unlabeled.c
1373 +++ b/net/netlabel/netlabel_unlabeled.c
1374 @@ -1189,8 +1189,6 @@ static int netlbl_unlabel_staticlist(struct sk_buff *skb,
1375 struct netlbl_unlhsh_walk_arg cb_arg;
1376 u32 skip_bkt = cb->args[0];
1377 u32 skip_chain = cb->args[1];
1378 - u32 skip_addr4 = cb->args[2];
1379 - u32 skip_addr6 = cb->args[3];
1380 u32 iter_bkt;
1381 u32 iter_chain = 0, iter_addr4 = 0, iter_addr6 = 0;
1382 struct netlbl_unlhsh_iface *iface;
1383 @@ -1215,7 +1213,7 @@ static int netlbl_unlabel_staticlist(struct sk_buff *skb,
1384 continue;
1385 netlbl_af4list_foreach_rcu(addr4,
1386 &iface->addr4_list) {
1387 - if (iter_addr4++ < skip_addr4)
1388 + if (iter_addr4++ < cb->args[2])
1389 continue;
1390 if (netlbl_unlabel_staticlist_gen(
1391 NLBL_UNLABEL_C_STATICLIST,
1392 @@ -1231,7 +1229,7 @@ static int netlbl_unlabel_staticlist(struct sk_buff *skb,
1393 #if IS_ENABLED(CONFIG_IPV6)
1394 netlbl_af6list_foreach_rcu(addr6,
1395 &iface->addr6_list) {
1396 - if (iter_addr6++ < skip_addr6)
1397 + if (iter_addr6++ < cb->args[3])
1398 continue;
1399 if (netlbl_unlabel_staticlist_gen(
1400 NLBL_UNLABEL_C_STATICLIST,
1401 @@ -1250,10 +1248,10 @@ static int netlbl_unlabel_staticlist(struct sk_buff *skb,
1402
1403 unlabel_staticlist_return:
1404 rcu_read_unlock();
1405 - cb->args[0] = skip_bkt;
1406 - cb->args[1] = skip_chain;
1407 - cb->args[2] = skip_addr4;
1408 - cb->args[3] = skip_addr6;
1409 + cb->args[0] = iter_bkt;
1410 + cb->args[1] = iter_chain;
1411 + cb->args[2] = iter_addr4;
1412 + cb->args[3] = iter_addr6;
1413 return skb->len;
1414 }
1415
1416 @@ -1273,12 +1271,9 @@ static int netlbl_unlabel_staticlistdef(struct sk_buff *skb,
1417 {
1418 struct netlbl_unlhsh_walk_arg cb_arg;
1419 struct netlbl_unlhsh_iface *iface;
1420 - u32 skip_addr4 = cb->args[0];
1421 - u32 skip_addr6 = cb->args[1];
1422 - u32 iter_addr4 = 0;
1423 + u32 iter_addr4 = 0, iter_addr6 = 0;
1424 struct netlbl_af4list *addr4;
1425 #if IS_ENABLED(CONFIG_IPV6)
1426 - u32 iter_addr6 = 0;
1427 struct netlbl_af6list *addr6;
1428 #endif
1429
1430 @@ -1292,7 +1287,7 @@ static int netlbl_unlabel_staticlistdef(struct sk_buff *skb,
1431 goto unlabel_staticlistdef_return;
1432
1433 netlbl_af4list_foreach_rcu(addr4, &iface->addr4_list) {
1434 - if (iter_addr4++ < skip_addr4)
1435 + if (iter_addr4++ < cb->args[0])
1436 continue;
1437 if (netlbl_unlabel_staticlist_gen(NLBL_UNLABEL_C_STATICLISTDEF,
1438 iface,
1439 @@ -1305,7 +1300,7 @@ static int netlbl_unlabel_staticlistdef(struct sk_buff *skb,
1440 }
1441 #if IS_ENABLED(CONFIG_IPV6)
1442 netlbl_af6list_foreach_rcu(addr6, &iface->addr6_list) {
1443 - if (iter_addr6++ < skip_addr6)
1444 + if (iter_addr6++ < cb->args[1])
1445 continue;
1446 if (netlbl_unlabel_staticlist_gen(NLBL_UNLABEL_C_STATICLISTDEF,
1447 iface,
1448 @@ -1320,8 +1315,8 @@ static int netlbl_unlabel_staticlistdef(struct sk_buff *skb,
1449
1450 unlabel_staticlistdef_return:
1451 rcu_read_unlock();
1452 - cb->args[0] = skip_addr4;
1453 - cb->args[1] = skip_addr6;
1454 + cb->args[0] = iter_addr4;
1455 + cb->args[1] = iter_addr6;
1456 return skb->len;
1457 }
1458
1459 diff --git a/net/rds/message.c b/net/rds/message.c
1460 index f0a4658..aff589c 100644
1461 --- a/net/rds/message.c
1462 +++ b/net/rds/message.c
1463 @@ -197,6 +197,9 @@ struct rds_message *rds_message_alloc(unsigned int extra_len, gfp_t gfp)
1464 {
1465 struct rds_message *rm;
1466
1467 + if (extra_len > KMALLOC_MAX_SIZE - sizeof(struct rds_message))
1468 + return NULL;
1469 +
1470 rm = kzalloc(sizeof(struct rds_message) + extra_len, gfp);
1471 if (!rm)
1472 goto out;
1473 diff --git a/security/selinux/xfrm.c b/security/selinux/xfrm.c
1474 index 48665ec..8ab2951 100644
1475 --- a/security/selinux/xfrm.c
1476 +++ b/security/selinux/xfrm.c
1477 @@ -310,7 +310,7 @@ int selinux_xfrm_policy_clone(struct xfrm_sec_ctx *old_ctx,
1478
1479 if (old_ctx) {
1480 new_ctx = kmalloc(sizeof(*old_ctx) + old_ctx->ctx_len,
1481 - GFP_KERNEL);
1482 + GFP_ATOMIC);
1483 if (!new_ctx)
1484 return -ENOMEM;
1485
1486 diff --git a/sound/core/seq/seq_timer.c b/sound/core/seq/seq_timer.c
1487 index 160b1bd..24d44b2 100644
1488 --- a/sound/core/seq/seq_timer.c
1489 +++ b/sound/core/seq/seq_timer.c
1490 @@ -290,10 +290,10 @@ int snd_seq_timer_open(struct snd_seq_queue *q)
1491 tid.device = SNDRV_TIMER_GLOBAL_SYSTEM;
1492 err = snd_timer_open(&t, str, &tid, q->queue);
1493 }
1494 - if (err < 0) {
1495 - snd_printk(KERN_ERR "seq fatal error: cannot create timer (%i)\n", err);
1496 - return err;
1497 - }
1498 + }
1499 + if (err < 0) {
1500 + snd_printk(KERN_ERR "seq fatal error: cannot create timer (%i)\n", err);
1501 + return err;
1502 }
1503 t->callback = snd_seq_timer_interrupt;
1504 t->callback_data = q;