- Linux 3.0.61 (bnc#776787).
[opensuse:kernel-source.git] / patches.kernel.org / patch-3.0.60-61
1 From: Jiri Slaby <jslaby@suse.cz>
2 Subject: Linux 3.0.61
3 Patch-mainline: 3.0.61
4 References: bnc#776787
5 Git-commit: ac4989874af56435c308bdde9ad9c837a26f8b23
6 Git-commit: b88a634a903d9670aa5f2f785aa890628ce0dece
7 Git-commit: 891348ca0f66206f1dc0e30d63757e3df1ae2d15
8 Git-commit: 7b4f6ecacb14f384adc1a5a67ad95eb082c02bd1
9 Git-commit: 4283908ef7f11a72c3b80dd4cf026f1a86429f82
10 Git-commit: ac2b41acfa3efe4650102067a99251587a806d70
11 Git-commit: e7328ae1848966181a7ac47e8ae6cddbd2cf55f3
12 Git-commit: 9f9c9cbb60576a1518d0bf93fb8e499cffccf377
13 Git-commit: f1d8e614d74b09531b9a85e812485340f3df7b1c
14 Git-commit: afd5e34b2bb34881d3a789e62486814a49b47faa
15 Git-commit: 0f815a0a700bc10547449bde6c106051a035a1b9
16 Git-commit: 9e16721498b0c3d3ebfa0b503c63d35c0a4c0642
17 Git-commit: c1bf08ac26e92122faab9f6c32ea8aba94612dae
18 Git-commit: 262b6d363fcff16359c93bd58c297f961f6e6273
19
20 Signed-off-by: Jiri Slaby <jslaby@suse.cz>
21 ---
22 diff --git a/Makefile b/Makefile
23 index 3359fcf..2d64957 100644
24 --- a/Makefile
25 +++ b/Makefile
26 @@ -1,6 +1,6 @@
27  VERSION = 3
28  PATCHLEVEL = 0
29 -SUBLEVEL = 60
30 +SUBLEVEL = 61
31  EXTRAVERSION =
32  NAME = Sneaky Weasel
33  
34 diff --git a/arch/x86/include/asm/traps.h b/arch/x86/include/asm/traps.h
35 index 0310da6..1d44903 100644
36 --- a/arch/x86/include/asm/traps.h
37 +++ b/arch/x86/include/asm/traps.h
38 @@ -1,6 +1,7 @@
39  #ifndef _ASM_X86_TRAPS_H
40  #define _ASM_X86_TRAPS_H
41  
42 +#include <linux/kprobes.h>
43  #include <asm/debugreg.h>
44  #include <asm/siginfo.h>                       /* TRAP_TRACE, ... */
45  
46 @@ -87,4 +88,29 @@ asmlinkage void smp_thermal_interrupt(void);
47  asmlinkage void mce_threshold_interrupt(void);
48  #endif
49  
50 +/* Interrupts/Exceptions */
51 +enum {
52 +       X86_TRAP_DE = 0,        /*  0, Divide-by-zero */
53 +       X86_TRAP_DB,            /*  1, Debug */
54 +       X86_TRAP_NMI,           /*  2, Non-maskable Interrupt */
55 +       X86_TRAP_BP,            /*  3, Breakpoint */
56 +       X86_TRAP_OF,            /*  4, Overflow */
57 +       X86_TRAP_BR,            /*  5, Bound Range Exceeded */
58 +       X86_TRAP_UD,            /*  6, Invalid Opcode */
59 +       X86_TRAP_NM,            /*  7, Device Not Available */
60 +       X86_TRAP_DF,            /*  8, Double Fault */
61 +       X86_TRAP_OLD_MF,        /*  9, Coprocessor Segment Overrun */
62 +       X86_TRAP_TS,            /* 10, Invalid TSS */
63 +       X86_TRAP_NP,            /* 11, Segment Not Present */
64 +       X86_TRAP_SS,            /* 12, Stack Segment Fault */
65 +       X86_TRAP_GP,            /* 13, General Protection Fault */
66 +       X86_TRAP_PF,            /* 14, Page Fault */
67 +       X86_TRAP_SPURIOUS,      /* 15, Spurious Interrupt */
68 +       X86_TRAP_MF,            /* 16, x87 Floating-Point Exception */
69 +       X86_TRAP_AC,            /* 17, Alignment Check */
70 +       X86_TRAP_MC,            /* 18, Machine Check */
71 +       X86_TRAP_XF,            /* 19, SIMD Floating-Point Exception */
72 +       X86_TRAP_IRET = 32,     /* 32, IRET Exception */
73 +};
74 +
75  #endif /* _ASM_X86_TRAPS_H */
76 diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
77 index 431ab11c..65976cb 100644
78 --- a/drivers/acpi/processor_idle.c
79 +++ b/drivers/acpi/processor_idle.c
80 @@ -991,6 +991,9 @@ static int acpi_processor_setup_cpuidle(struct acpi_processor *pr)
81                 return -EINVAL;
82         }
83  
84 +       if (!dev)
85 +               return -EINVAL;
86 +
87         dev->cpu = pr->id;
88         for (i = 0; i < CPUIDLE_STATE_MAX; i++) {
89                 dev->states[i].name[0] = '\0';
90 diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
91 index 8300250..75a8d0f 100644
92 --- a/drivers/ata/ahci.c
93 +++ b/drivers/ata/ahci.c
94 @@ -402,6 +402,12 @@ static const struct pci_device_id ahci_pci_tbl[] = {
95         /* Promise */
96         { PCI_VDEVICE(PROMISE, 0x3f20), board_ahci },   /* PDC42819 */
97  
98 +       /* Asmedia */
99 +       { PCI_VDEVICE(ASMEDIA, 0x0601), board_ahci },   /* ASM1060 */
100 +       { PCI_VDEVICE(ASMEDIA, 0x0602), board_ahci },   /* ASM1060 */
101 +       { PCI_VDEVICE(ASMEDIA, 0x0611), board_ahci },   /* ASM1061 */
102 +       { PCI_VDEVICE(ASMEDIA, 0x0612), board_ahci },   /* ASM1062 */
103 +
104         /* Generic, PCI class code for AHCI */
105         { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
106           PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci },
107 diff --git a/drivers/dma/ioat/dma_v3.c b/drivers/dma/ioat/dma_v3.c
108 index d845dc4..6e33926 100644
109 --- a/drivers/dma/ioat/dma_v3.c
110 +++ b/drivers/dma/ioat/dma_v3.c
111 @@ -949,7 +949,7 @@ static int __devinit ioat_xor_val_self_test(struct ioatdma_device *device)
112                         goto free_resources;
113                 }
114         }
115 -       dma_sync_single_for_device(dev, dest_dma, PAGE_SIZE, DMA_TO_DEVICE);
116 +       dma_sync_single_for_device(dev, dest_dma, PAGE_SIZE, DMA_FROM_DEVICE);
117  
118         /* skip validate if the capability is not present */
119         if (!dma_has_cap(DMA_XOR_VAL, dma_chan->device->cap_mask))
120 diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
121 index 02a52d1..66b6315 100644
122 --- a/drivers/firmware/dmi_scan.c
123 +++ b/drivers/firmware/dmi_scan.c
124 @@ -16,6 +16,7 @@
125   */
126  static char dmi_empty_string[] = "        ";
127  
128 +static u16 __initdata dmi_ver;
129  /*
130   * Catch too early calls to dmi_check_system():
131   */
132 @@ -118,12 +119,12 @@ static int __init dmi_walk_early(void (*decode)(const struct dmi_header *,
133         return 0;
134  }
135  
136 -static int __init dmi_checksum(const u8 *buf)
137 +static int __init dmi_checksum(const u8 *buf, u8 len)
138  {
139         u8 sum = 0;
140         int a;
141  
142 -       for (a = 0; a < 15; a++)
143 +       for (a = 0; a < len; a++)
144                 sum += buf[a];
145  
146         return sum == 0;
147 @@ -161,8 +162,10 @@ static void __init dmi_save_uuid(const struct dmi_header *dm, int slot, int inde
148                 return;
149  
150         for (i = 0; i < 16 && (is_ff || is_00); i++) {
151 -               if(d[i] != 0x00) is_ff = 0;
152 -               if(d[i] != 0xFF) is_00 = 0;
153 +               if (d[i] != 0x00)
154 +                       is_00 = 0;
155 +               if (d[i] != 0xFF)
156 +                       is_ff = 0;
157         }
158  
159         if (is_ff || is_00)
160 @@ -172,7 +175,15 @@ static void __init dmi_save_uuid(const struct dmi_header *dm, int slot, int inde
161         if (!s)
162                 return;
163  
164 -       sprintf(s, "%pUB", d);
165 +       /*
166 +        * As of version 2.6 of the SMBIOS specification, the first 3 fields of
167 +        * the UUID are supposed to be little-endian encoded.  The specification
168 +        * says that this is the defacto standard.
169 +        */
170 +       if (dmi_ver >= 0x0206)
171 +               sprintf(s, "%pUL", d);
172 +       else
173 +               sprintf(s, "%pUB", d);
174  
175          dmi_ident[slot] = s;
176  }
177 @@ -404,29 +415,57 @@ static int __init dmi_present(const char __iomem *p)
178         u8 buf[15];
179  
180         memcpy_fromio(buf, p, 15);
181 -       if ((memcmp(buf, "_DMI_", 5) == 0) && dmi_checksum(buf)) {
182 +       if (dmi_checksum(buf, 15)) {
183                 dmi_num = (buf[13] << 8) | buf[12];
184                 dmi_len = (buf[7] << 8) | buf[6];
185                 dmi_base = (buf[11] << 24) | (buf[10] << 16) |
186                         (buf[9] << 8) | buf[8];
187  
188 -               /*
189 -                * DMI version 0.0 means that the real version is taken from
190 -                * the SMBIOS version, which we don't know at this point.
191 -                */
192 -               if (buf[14] != 0)
193 -                       printk(KERN_INFO "DMI %d.%d present.\n",
194 -                              buf[14] >> 4, buf[14] & 0xF);
195 -               else
196 -                       printk(KERN_INFO "DMI present.\n");
197                 if (dmi_walk_early(dmi_decode) == 0) {
198 +                       if (dmi_ver)
199 +                               pr_info("SMBIOS %d.%d present.\n",
200 +                                      dmi_ver >> 8, dmi_ver & 0xFF);
201 +                       else {
202 +                               dmi_ver = (buf[14] & 0xF0) << 4 |
203 +                                          (buf[14] & 0x0F);
204 +                               pr_info("Legacy DMI %d.%d present.\n",
205 +                                      dmi_ver >> 8, dmi_ver & 0xFF);
206 +                       }
207                         dmi_dump_ids();
208                         return 0;
209                 }
210         }
211 +       dmi_ver = 0;
212         return 1;
213  }
214  
215 +static int __init smbios_present(const char __iomem *p)
216 +{
217 +       u8 buf[32];
218 +       int offset = 0;
219 +
220 +       memcpy_fromio(buf, p, 32);
221 +       if ((buf[5] < 32) && dmi_checksum(buf, buf[5])) {
222 +               dmi_ver = (buf[6] << 8) + buf[7];
223 +
224 +               /* Some BIOS report weird SMBIOS version, fix that up */
225 +               switch (dmi_ver) {
226 +               case 0x021F:
227 +               case 0x0221:
228 +                       pr_debug("SMBIOS version fixup(2.%d->2.%d)\n",
229 +                              dmi_ver & 0xFF, 3);
230 +                       dmi_ver = 0x0203;
231 +                       break;
232 +               case 0x0233:
233 +                       pr_debug("SMBIOS version fixup(2.%d->2.%d)\n", 51, 6);
234 +                       dmi_ver = 0x0206;
235 +                       break;
236 +               }
237 +               offset = 16;
238 +       }
239 +       return dmi_present(buf + offset);
240 +}
241 +
242  void __init dmi_scan_machine(void)
243  {
244         char __iomem *p, *q;
245 @@ -444,7 +483,7 @@ void __init dmi_scan_machine(void)
246                 if (p == NULL)
247                         goto error;
248  
249 -               rc = dmi_present(p + 0x10); /* offset of _DMI_ string */
250 +               rc = smbios_present(p);
251                 dmi_iounmap(p, 32);
252                 if (!rc) {
253                         dmi_available = 1;
254 @@ -462,7 +501,12 @@ void __init dmi_scan_machine(void)
255                         goto error;
256  
257                 for (q = p; q < p + 0x10000; q += 16) {
258 -                       rc = dmi_present(q);
259 +                       if (memcmp(q, "_SM_", 4) == 0 && q - p <= 0xFFE0)
260 +                               rc = smbios_present(q);
261 +                       else if (memcmp(q, "_DMI_", 5) == 0)
262 +                               rc = dmi_present(q);
263 +                       else
264 +                               continue;
265                         if (!rc) {
266                                 dmi_available = 1;
267                                 dmi_iounmap(p, 0x10000);
268 diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
269 index bc927ae..490ab6b 100644
270 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
271 +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
272 @@ -655,6 +655,8 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
273         total = 0;
274         for (i = 0; i < count; i++) {
275                 struct drm_i915_gem_relocation_entry __user *user_relocs;
276 +               u64 invalid_offset = (u64)-1;
277 +               int j;
278  
279                 user_relocs = (void __user *)(uintptr_t)exec[i].relocs_ptr;
280  
281 @@ -665,6 +667,25 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
282                         goto err;
283                 }
284  
285 +               /* As we do not update the known relocation offsets after
286 +                * relocating (due to the complexities in lock handling),
287 +                * we need to mark them as invalid now so that we force the
288 +                * relocation processing next time. Just in case the target
289 +                * object is evicted and then rebound into its old
290 +                * presumed_offset before the next execbuffer - if that
291 +                * happened we would make the mistake of assuming that the
292 +                * relocations were valid.
293 +                */
294 +               for (j = 0; j < exec[i].relocation_count; j++) {
295 +                       if (copy_to_user(&user_relocs[j].presumed_offset,
296 +                                        &invalid_offset,
297 +                                        sizeof(invalid_offset))) {
298 +                               ret = -EFAULT;
299 +                               mutex_lock(&dev->struct_mutex);
300 +                               goto err;
301 +                       }
302 +               }
303 +
304                 reloc_offset[i] = total;
305                 total += exec[i].relocation_count;
306         }
307 diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
308 index 8fa4f7b..5dc3b6d 100644
309 --- a/drivers/gpu/drm/i915/i915_reg.h
310 +++ b/drivers/gpu/drm/i915/i915_reg.h
311 @@ -27,6 +27,8 @@
312  
313  #define _PIPE(pipe, a, b) ((a) + (pipe)*((b)-(a)))
314  
315 +#define _MASKED_BIT_ENABLE(a) (((a) << 16) | (a))
316 +
317  /*
318   * The Bridge device's PCI config space has information about the
319   * fb aperture size and the amount of pre-reserved memory.
320 @@ -354,6 +356,7 @@
321   * the enables for writing to the corresponding low bit.
322   */
323  #define _3D_CHICKEN    0x02084
324 +#define _3D_CHICKEN_HIZ_PLANE_DISABLE_MSAA_4X_SNB      (1 << 10)
325  #define _3D_CHICKEN2   0x0208c
326  /* Disables pipelining of read flushes past the SF-WIZ interface.
327   * Required on all Ironlake steppings according to the B-Spec, but the
328 diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
329 index d1dca92..b4f4d12 100644
330 --- a/drivers/gpu/drm/i915/intel_display.c
331 +++ b/drivers/gpu/drm/i915/intel_display.c
332 @@ -7412,6 +7412,10 @@ static void gen6_init_clock_gating(struct drm_device *dev)
333                    I915_READ(ILK_DISPLAY_CHICKEN2) |
334                    ILK_ELPIN_409_SELECT);
335  
336 +       /* WaDisableHiZPlanesWhenMSAAEnabled */
337 +       I915_WRITE(_3D_CHICKEN,
338 +                  _MASKED_BIT_ENABLE(_3D_CHICKEN_HIZ_PLANE_DISABLE_MSAA_4X_SNB));
339 +
340         I915_WRITE(WM3_LP_ILK, 0);
341         I915_WRITE(WM2_LP_ILK, 0);
342         I915_WRITE(WM1_LP_ILK, 0);
343 diff --git a/drivers/misc/sgi-xp/xpc_main.c b/drivers/misc/sgi-xp/xpc_main.c
344 index 8d082b4..d971817 100644
345 --- a/drivers/misc/sgi-xp/xpc_main.c
346 +++ b/drivers/misc/sgi-xp/xpc_main.c
347 @@ -53,6 +53,10 @@
348  #include <linux/kthread.h>
349  #include "xpc.h"
350  
351 +#ifdef CONFIG_X86_64
352 +#include <asm/traps.h>
353 +#endif
354 +
355  /* define two XPC debug device structures to be used with dev_dbg() et al */
356  
357  struct device_driver xpc_dbg_name = {
358 @@ -1079,6 +1083,9 @@ xpc_system_reboot(struct notifier_block *nb, unsigned long event, void *unused)
359         return NOTIFY_DONE;
360  }
361  
362 +/* Used to only allow one cpu to complete disconnect */
363 +static unsigned int xpc_die_disconnecting;
364 +
365  /*
366   * Notify other partitions to deactivate from us by first disengaging from all
367   * references to our memory.
368 @@ -1092,6 +1099,9 @@ xpc_die_deactivate(void)
369         long keep_waiting;
370         long wait_to_print;
371  
372 +       if (cmpxchg(&xpc_die_disconnecting, 0, 1))
373 +               return;
374 +
375         /* keep xpc_hb_checker thread from doing anything (just in case) */
376         xpc_exiting = 1;
377  
378 @@ -1159,7 +1169,7 @@ xpc_die_deactivate(void)
379   * about the lack of a heartbeat.
380   */
381  static int
382 -xpc_system_die(struct notifier_block *nb, unsigned long event, void *unused)
383 +xpc_system_die(struct notifier_block *nb, unsigned long event, void *_die_args)
384  {
385  #ifdef CONFIG_IA64             /* !!! temporary kludge */
386         switch (event) {
387 @@ -1191,7 +1201,27 @@ xpc_system_die(struct notifier_block *nb, unsigned long event, void *unused)
388                 break;
389         }
390  #else
391 -       xpc_die_deactivate();
392 +       struct die_args *die_args = _die_args;
393 +
394 +       switch (event) {
395 +       case DIE_TRAP:
396 +               if (die_args->trapnr == X86_TRAP_DF)
397 +                       xpc_die_deactivate();
398 +
399 +               if (((die_args->trapnr == X86_TRAP_MF) ||
400 +                    (die_args->trapnr == X86_TRAP_XF)) &&
401 +                   !user_mode_vm(die_args->regs))
402 +                       xpc_die_deactivate();
403 +
404 +               break;
405 +       case DIE_INT3:
406 +       case DIE_DEBUG:
407 +               break;
408 +       case DIE_OOPS:
409 +       case DIE_GPF:
410 +       default:
411 +               xpc_die_deactivate();
412 +       }
413  #endif
414  
415         return NOTIFY_DONE;
416 diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
417 index 0ff0182..9b9305a 100644
418 --- a/drivers/pci/pcie/aspm.c
419 +++ b/drivers/pci/pcie/aspm.c
420 @@ -790,6 +790,9 @@ void pcie_clear_aspm(struct pci_bus *bus)
421  {
422         struct pci_dev *child;
423  
424 +       if (aspm_force)
425 +               return;
426 +
427         /*
428          * Clear any ASPM setup that the firmware has carried out on this bus
429          */
430 diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
431 index 7d8b5d8..515ec6d 100644
432 --- a/drivers/scsi/sd.c
433 +++ b/drivers/scsi/sd.c
434 @@ -2826,10 +2826,6 @@ static int __init init_sd(void)
435         if (err)
436                 goto err_out;
437  
438 -       err = scsi_register_driver(&sd_template.gendrv);
439 -       if (err)
440 -               goto err_out_class;
441 -
442         sd_cdb_cache = kmem_cache_create("sd_ext_cdb", SD_EXT_CDB_SIZE,
443                                          0, 0, NULL);
444         if (!sd_cdb_cache) {
445 @@ -2843,8 +2839,15 @@ static int __init init_sd(void)
446                 goto err_out_cache;
447         }
448  
449 +       err = scsi_register_driver(&sd_template.gendrv);
450 +       if (err)
451 +               goto err_out_driver;
452 +
453         return 0;
454  
455 +err_out_driver:
456 +       mempool_destroy(sd_cdb_pool);
457 +
458  err_out_cache:
459         kmem_cache_destroy(sd_cdb_cache);
460  
461 @@ -2867,10 +2870,10 @@ static void __exit exit_sd(void)
462  
463         SCSI_LOG_HLQUEUE(3, printk("exit_sd: exiting sd driver\n"));
464  
465 +       scsi_unregister_driver(&sd_template.gendrv);
466         mempool_destroy(sd_cdb_pool);
467         kmem_cache_destroy(sd_cdb_cache);
468  
469 -       scsi_unregister_driver(&sd_template.gendrv);
470         class_unregister(&sd_disk_class);
471  
472         for (i = 0; i < SD_MAJORS; i++)
473 diff --git a/drivers/staging/usbip/usbip_common.c b/drivers/staging/usbip/usbip_common.c
474 index 433a3b6..1547cf2 100644
475 --- a/drivers/staging/usbip/usbip_common.c
476 +++ b/drivers/staging/usbip/usbip_common.c
477 @@ -761,26 +761,25 @@ EXPORT_SYMBOL_GPL(usbip_recv_iso);
478   * buffer and iso packets need to be stored and be in propeper endian in urb
479   * before calling this function
480   */
481 -int usbip_pad_iso(struct usbip_device *ud, struct urb *urb)
482 +void usbip_pad_iso(struct usbip_device *ud, struct urb *urb)
483  {
484         int np = urb->number_of_packets;
485         int i;
486 -       int ret;
487         int actualoffset = urb->actual_length;
488  
489         if (!usb_pipeisoc(urb->pipe))
490 -               return 0;
491 +               return;
492  
493         /* if no packets or length of data is 0, then nothing to unpack */
494         if (np == 0 || urb->actual_length == 0)
495 -               return 0;
496 +               return;
497  
498         /*
499          * if actual_length is transfer_buffer_length then no padding is
500          * present.
501         */
502         if (urb->actual_length == urb->transfer_buffer_length)
503 -               return 0;
504 +               return;
505  
506         /*
507          * loop over all packets from last to first (to prevent overwritting
508 @@ -792,8 +791,6 @@ int usbip_pad_iso(struct usbip_device *ud, struct urb *urb)
509                         urb->transfer_buffer + actualoffset,
510                         urb->iso_frame_desc[i].actual_length);
511         }
512 -
513 -       return ret;
514  }
515  EXPORT_SYMBOL_GPL(usbip_pad_iso);
516  
517 diff --git a/drivers/staging/usbip/usbip_common.h b/drivers/staging/usbip/usbip_common.h
518 index 4a641c5..072743e 100644
519 --- a/drivers/staging/usbip/usbip_common.h
520 +++ b/drivers/staging/usbip/usbip_common.h
521 @@ -327,7 +327,7 @@ int usbip_recv_xbuff(struct usbip_device *ud, struct urb *urb);
522  /* some members of urb must be substituted before. */
523  int usbip_recv_iso(struct usbip_device *ud, struct urb *urb);
524  /* some members of urb must be substituted before. */
525 -int usbip_pad_iso(struct usbip_device *ud, struct urb *urb);
526 +void usbip_pad_iso(struct usbip_device *ud, struct urb *urb);
527  void *usbip_alloc_iso_desc_pdu(struct urb *urb, ssize_t *bufflen);
528  
529  /* usbip_event.c */
530 diff --git a/drivers/staging/usbip/vhci_rx.c b/drivers/staging/usbip/vhci_rx.c
531 index 5c4b5d9..c851433 100644
532 --- a/drivers/staging/usbip/vhci_rx.c
533 +++ b/drivers/staging/usbip/vhci_rx.c
534 @@ -94,8 +94,7 @@ static void vhci_recv_ret_submit(struct vhci_device *vdev,
535                 return;
536  
537         /* restore the padding in iso packets */
538 -       if (usbip_pad_iso(ud, urb) < 0)
539 -               return;
540 +       usbip_pad_iso(ud, urb);
541  
542         if (usbip_dbg_flag_vhci_rx)
543                 usbip_dump_urb(urb);
544 diff --git a/drivers/tty/serial/8250.c b/drivers/tty/serial/8250.c
545 index 762ce72..7f50999 100644
546 --- a/drivers/tty/serial/8250.c
547 +++ b/drivers/tty/serial/8250.c
548 @@ -81,7 +81,7 @@ static unsigned int skip_txen_test; /* force skip of txen test at init time */
549  #define DEBUG_INTR(fmt...)     do { } while (0)
550  #endif
551  
552 -#define PASS_LIMIT     256
553 +#define PASS_LIMIT     512
554  
555  #define BOTH_EMPTY     (UART_LSR_TEMT | UART_LSR_THRE)
556  
557 diff --git a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c
558 index fba99b1..18cd76b 100644
559 --- a/drivers/usb/host/uhci-hcd.c
560 +++ b/drivers/usb/host/uhci-hcd.c
561 @@ -446,6 +446,10 @@ static irqreturn_t uhci_irq(struct usb_hcd *hcd)
562                 return IRQ_NONE;
563         uhci_writew(uhci, status, USBSTS);              /* Clear it */
564  
565 +       spin_lock(&uhci->lock);
566 +       if (unlikely(!uhci->is_initialized))    /* not yet configured */
567 +               goto done;
568 +
569         if (status & ~(USBSTS_USBINT | USBSTS_ERROR | USBSTS_RD)) {
570                 if (status & USBSTS_HSE)
571                         dev_err(uhci_dev(uhci), "host system error, "
572 @@ -454,7 +458,6 @@ static irqreturn_t uhci_irq(struct usb_hcd *hcd)
573                         dev_err(uhci_dev(uhci), "host controller process "
574                                         "error, something bad happened!\n");
575                 if (status & USBSTS_HCH) {
576 -                       spin_lock(&uhci->lock);
577                         if (uhci->rh_state >= UHCI_RH_RUNNING) {
578                                 dev_err(uhci_dev(uhci),
579                                         "host controller halted, "
580 @@ -472,15 +475,15 @@ static irqreturn_t uhci_irq(struct usb_hcd *hcd)
581                                  * pending unlinks */
582                                 mod_timer(&hcd->rh_timer, jiffies);
583                         }
584 -                       spin_unlock(&uhci->lock);
585                 }
586         }
587  
588 -       if (status & USBSTS_RD)
589 +       if (status & USBSTS_RD) {
590 +               spin_unlock(&uhci->lock);
591                 usb_hcd_poll_rh_status(hcd);
592 -       else {
593 -               spin_lock(&uhci->lock);
594 +       } else {
595                 uhci_scan_schedule(uhci);
596 + done:
597                 spin_unlock(&uhci->lock);
598         }
599  
600 @@ -658,9 +661,9 @@ static int uhci_start(struct usb_hcd *hcd)
601          */
602         mb();
603  
604 +       spin_lock_irq(&uhci->lock);
605         configure_hc(uhci);
606         uhci->is_initialized = 1;
607 -       spin_lock_irq(&uhci->lock);
608         start_rh(uhci);
609         spin_unlock_irq(&uhci->lock);
610         return 0;
611 diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
612 index f269c03..4c1a75f 100644
613 --- a/include/linux/pci_ids.h
614 +++ b/include/linux/pci_ids.h
615 @@ -2390,6 +2390,8 @@
616  
617  #define PCI_VENDOR_ID_AZWAVE           0x1a3b
618  
619 +#define PCI_VENDOR_ID_ASMEDIA          0x1b21
620 +
621  #define PCI_VENDOR_ID_TEKRAM           0x1de1
622  #define PCI_DEVICE_ID_TEKRAM_DC290     0xdc29
623  
624 diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
625 index f88ea18..e96eee3 100644
626 --- a/kernel/trace/ftrace.c
627 +++ b/kernel/trace/ftrace.c
628 @@ -3460,7 +3460,7 @@ static int ftrace_module_notify(struct notifier_block *self,
629  
630  struct notifier_block ftrace_module_nb = {
631         .notifier_call = ftrace_module_notify,
632 -       .priority = 0,
633 +       .priority = INT_MAX,    /* Run before anything that can use kprobes */
634  };
635  
636  extern unsigned long __start_mcount_loc[];