/[linux-patches]/genpatches-2.6/trunk/3.0/1060_linux-3.0.61.patch
Gentoo

Contents of /genpatches-2.6/trunk/3.0/1060_linux-3.0.61.patch

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20