Magellan Linux

Annotation of /trunk/kernel26-alx/patches-2.6.37-r1/0100-2.6.37.1-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1311 - (hide annotations) (download)
Tue Apr 12 14:29:09 2011 UTC (13 years, 1 month ago) by niro
File size: 356597 byte(s)
kernel 2.6.37-alx-r1
1 niro 1311 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
2     index 01ece1b..596bb3c 100644
3     --- a/Documentation/kernel-parameters.txt
4     +++ b/Documentation/kernel-parameters.txt
5     @@ -884,6 +884,7 @@ and is between 256 and 4096 characters. It is defined in the file
6     controller
7     i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
8     controllers
9     + i8042.notimeout [HW] Ignore timeout condition signalled by conroller
10     i8042.reset [HW] Reset the controller during init and cleanup
11     i8042.unlock [HW] Unlock (ignore) the keylock
12    
13     diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
14     index 6bd82d2..7306b8e 100644
15     --- a/arch/arm/kernel/head.S
16     +++ b/arch/arm/kernel/head.S
17     @@ -91,6 +91,11 @@ ENTRY(stext)
18     movs r8, r5 @ invalid machine (r5=0)?
19     THUMB( it eq ) @ force fixup-able long branch encoding
20     beq __error_a @ yes, error 'a'
21     +
22     + /*
23     + * r1 = machine no, r2 = atags,
24     + * r8 = machinfo, r9 = cpuid, r10 = procinfo
25     + */
26     bl __vet_atags
27     #ifdef CONFIG_SMP_ON_UP
28     bl __fixup_smp
29     @@ -387,34 +392,32 @@ ENDPROC(__turn_mmu_on)
30    
31     #ifdef CONFIG_SMP_ON_UP
32     __fixup_smp:
33     - mov r7, #0x00070000
34     - orr r6, r7, #0xff000000 @ mask 0xff070000
35     - orr r7, r7, #0x41000000 @ val 0x41070000
36     - and r0, r9, r6
37     - teq r0, r7 @ ARM CPU and ARMv6/v7?
38     + and r3, r9, #0x000f0000 @ architecture version
39     + teq r3, #0x000f0000 @ CPU ID supported?
40     bne __fixup_smp_on_up @ no, assume UP
41    
42     - orr r6, r6, #0x0000ff00
43     - orr r6, r6, #0x000000f0 @ mask 0xff07fff0
44     - orr r7, r7, #0x0000b000
45     - orr r7, r7, #0x00000020 @ val 0x4107b020
46     - and r0, r9, r6
47     - teq r0, r7 @ ARM 11MPCore?
48     + bic r3, r9, #0x00ff0000
49     + bic r3, r3, #0x0000000f @ mask 0xff00fff0
50     + mov r4, #0x41000000
51     + orr r4, r4, #0x0000b000
52     + orr r4, r4, #0x00000020 @ val 0x4100b020
53     + teq r3, r4 @ ARM 11MPCore?
54     moveq pc, lr @ yes, assume SMP
55    
56     mrc p15, 0, r0, c0, c0, 5 @ read MPIDR
57     - tst r0, #1 << 31
58     - movne pc, lr @ bit 31 => SMP
59     + and r0, r0, #0xc0000000 @ multiprocessing extensions and
60     + teq r0, #0x80000000 @ not part of a uniprocessor system?
61     + moveq pc, lr @ yes, assume SMP
62    
63     __fixup_smp_on_up:
64     adr r0, 1f
65     - ldmia r0, {r3, r6, r7}
66     + ldmia r0, {r3 - r5}
67     sub r3, r0, r3
68     - add r6, r6, r3
69     - add r7, r7, r3
70     -2: cmp r6, r7
71     - ldmia r6!, {r0, r4}
72     - strlo r4, [r0, r3]
73     + add r4, r4, r3
74     + add r5, r5, r3
75     +2: cmp r4, r5
76     + ldmia r4!, {r0, r6}
77     + strlo r6, [r0, r3]
78     blo 2b
79     mov pc, lr
80     ENDPROC(__fixup_smp)
81     diff --git a/arch/arm/mach-s5pv310/cpu.c b/arch/arm/mach-s5pv310/cpu.c
82     index 82ce4aa..b2a37d0 100644
83     --- a/arch/arm/mach-s5pv310/cpu.c
84     +++ b/arch/arm/mach-s5pv310/cpu.c
85     @@ -168,7 +168,7 @@ static int __init s5pv310_l2x0_cache_init(void)
86     __raw_writel(L2X0_DYNAMIC_CLK_GATING_EN | L2X0_STNDBY_MODE_EN,
87     S5P_VA_L2CC + L2X0_POWER_CTRL);
88    
89     - l2x0_init(S5P_VA_L2CC, 0x7C070001, 0xC200ffff);
90     + l2x0_init(S5P_VA_L2CC, 0x7C470001, 0xC200ffff);
91    
92     return 0;
93     }
94     diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
95     index 5164069..cddd684 100644
96     --- a/arch/arm/mm/init.c
97     +++ b/arch/arm/mm/init.c
98     @@ -297,6 +297,12 @@ void __init arm_memblock_init(struct meminfo *mi, struct machine_desc *mdesc)
99     memblock_reserve(__pa(_stext), _end - _stext);
100     #endif
101     #ifdef CONFIG_BLK_DEV_INITRD
102     + if (phys_initrd_size &&
103     + memblock_is_region_reserved(phys_initrd_start, phys_initrd_size)) {
104     + pr_err("INITRD: 0x%08lx+0x%08lx overlaps in-use memory region - disabling initrd\n",
105     + phys_initrd_start, phys_initrd_size);
106     + phys_initrd_start = phys_initrd_size = 0;
107     + }
108     if (phys_initrd_size) {
109     memblock_reserve(phys_initrd_start, phys_initrd_size);
110    
111     diff --git a/arch/arm/oprofile/common.c b/arch/arm/oprofile/common.c
112     index 8aa9744..2b66391 100644
113     --- a/arch/arm/oprofile/common.c
114     +++ b/arch/arm/oprofile/common.c
115     @@ -10,8 +10,6 @@
116     */
117    
118     #include <linux/cpumask.h>
119     -#include <linux/err.h>
120     -#include <linux/errno.h>
121     #include <linux/init.h>
122     #include <linux/mutex.h>
123     #include <linux/oprofile.h>
124     @@ -46,6 +44,7 @@ char *op_name_from_perf_id(void)
125     return NULL;
126     }
127     }
128     +#endif
129    
130     static int report_trace(struct stackframe *frame, void *d)
131     {
132     @@ -111,6 +110,7 @@ static void arm_backtrace(struct pt_regs * const regs, unsigned int depth)
133    
134     int __init oprofile_arch_init(struct oprofile_operations *ops)
135     {
136     + /* provide backtrace support also in timer mode: */
137     ops->backtrace = arm_backtrace;
138    
139     return oprofile_perf_init(ops);
140     @@ -120,11 +120,3 @@ void __exit oprofile_arch_exit(void)
141     {
142     oprofile_perf_exit();
143     }
144     -#else
145     -int __init oprofile_arch_init(struct oprofile_operations *ops)
146     -{
147     - pr_info("oprofile: hardware counters not available\n");
148     - return -ENODEV;
149     -}
150     -void __exit oprofile_arch_exit(void) {}
151     -#endif /* CONFIG_HW_PERF_EVENTS */
152     diff --git a/arch/avr32/include/asm/syscalls.h b/arch/avr32/include/asm/syscalls.h
153     index ab608b7..730a461 100644
154     --- a/arch/avr32/include/asm/syscalls.h
155     +++ b/arch/avr32/include/asm/syscalls.h
156     @@ -16,18 +16,9 @@
157     #include <linux/signal.h>
158    
159     /* kernel/process.c */
160     -asmlinkage int sys_fork(struct pt_regs *);
161     asmlinkage int sys_clone(unsigned long, unsigned long,
162     unsigned long, unsigned long,
163     struct pt_regs *);
164     -asmlinkage int sys_vfork(struct pt_regs *);
165     -asmlinkage int sys_execve(const char __user *, char __user *__user *,
166     - char __user *__user *, struct pt_regs *);
167     -
168     -/* kernel/signal.c */
169     -asmlinkage int sys_sigaltstack(const stack_t __user *, stack_t __user *,
170     - struct pt_regs *);
171     -asmlinkage int sys_rt_sigreturn(struct pt_regs *);
172    
173     /* mm/cache.c */
174     asmlinkage int sys_cacheflush(int, void __user *, size_t);
175     diff --git a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c
176     index df971fa..4896ed0 100644
177     --- a/arch/parisc/kernel/firmware.c
178     +++ b/arch/parisc/kernel/firmware.c
179     @@ -1126,15 +1126,13 @@ int pdc_iodc_print(const unsigned char *str, unsigned count)
180     unsigned int i;
181     unsigned long flags;
182    
183     - for (i = 0; i < count && i < 79;) {
184     + for (i = 0; i < count;) {
185     switch(str[i]) {
186     case '\n':
187     iodc_dbuf[i+0] = '\r';
188     iodc_dbuf[i+1] = '\n';
189     i += 2;
190     goto print;
191     - case '\b': /* BS */
192     - i--; /* overwrite last */
193     default:
194     iodc_dbuf[i] = str[i];
195     i++;
196     @@ -1142,15 +1140,6 @@ int pdc_iodc_print(const unsigned char *str, unsigned count)
197     }
198     }
199    
200     - /* if we're at the end of line, and not already inserting a newline,
201     - * insert one anyway. iodc console doesn't claim to support >79 char
202     - * lines. don't account for this in the return value.
203     - */
204     - if (i == 79 && iodc_dbuf[i-1] != '\n') {
205     - iodc_dbuf[i+0] = '\r';
206     - iodc_dbuf[i+1] = '\n';
207     - }
208     -
209     print:
210     spin_lock_irqsave(&pdc_lock, flags);
211     real32_call(PAGE0->mem_cons.iodc_io,
212     diff --git a/arch/powerpc/boot/dts/p1022ds.dts b/arch/powerpc/boot/dts/p1022ds.dts
213     index 2bbecbb..69422eb 100644
214     --- a/arch/powerpc/boot/dts/p1022ds.dts
215     +++ b/arch/powerpc/boot/dts/p1022ds.dts
216     @@ -291,13 +291,13 @@
217     ranges = <0x0 0xc100 0x200>;
218     cell-index = <1>;
219     dma00: dma-channel@0 {
220     - compatible = "fsl,eloplus-dma-channel";
221     + compatible = "fsl,ssi-dma-channel";
222     reg = <0x0 0x80>;
223     cell-index = <0>;
224     interrupts = <76 2>;
225     };
226     dma01: dma-channel@80 {
227     - compatible = "fsl,eloplus-dma-channel";
228     + compatible = "fsl,ssi-dma-channel";
229     reg = <0x80 0x80>;
230     cell-index = <1>;
231     interrupts = <77 2>;
232     diff --git a/arch/powerpc/kernel/cpu_setup_6xx.S b/arch/powerpc/kernel/cpu_setup_6xx.S
233     index 55cba4a..f8cd9fb 100644
234     --- a/arch/powerpc/kernel/cpu_setup_6xx.S
235     +++ b/arch/powerpc/kernel/cpu_setup_6xx.S
236     @@ -18,7 +18,7 @@
237     #include <asm/mmu.h>
238    
239     _GLOBAL(__setup_cpu_603)
240     - mflr r4
241     + mflr r5
242     BEGIN_MMU_FTR_SECTION
243     li r10,0
244     mtspr SPRN_SPRG_603_LRU,r10 /* init SW LRU tracking */
245     @@ -27,60 +27,60 @@ BEGIN_FTR_SECTION
246     bl __init_fpu_registers
247     END_FTR_SECTION_IFCLR(CPU_FTR_FPU_UNAVAILABLE)
248     bl setup_common_caches
249     - mtlr r4
250     + mtlr r5
251     blr
252     _GLOBAL(__setup_cpu_604)
253     - mflr r4
254     + mflr r5
255     bl setup_common_caches
256     bl setup_604_hid0
257     - mtlr r4
258     + mtlr r5
259     blr
260     _GLOBAL(__setup_cpu_750)
261     - mflr r4
262     + mflr r5
263     bl __init_fpu_registers
264     bl setup_common_caches
265     bl setup_750_7400_hid0
266     - mtlr r4
267     + mtlr r5
268     blr
269     _GLOBAL(__setup_cpu_750cx)
270     - mflr r4
271     + mflr r5
272     bl __init_fpu_registers
273     bl setup_common_caches
274     bl setup_750_7400_hid0
275     bl setup_750cx
276     - mtlr r4
277     + mtlr r5
278     blr
279     _GLOBAL(__setup_cpu_750fx)
280     - mflr r4
281     + mflr r5
282     bl __init_fpu_registers
283     bl setup_common_caches
284     bl setup_750_7400_hid0
285     bl setup_750fx
286     - mtlr r4
287     + mtlr r5
288     blr
289     _GLOBAL(__setup_cpu_7400)
290     - mflr r4
291     + mflr r5
292     bl __init_fpu_registers
293     bl setup_7400_workarounds
294     bl setup_common_caches
295     bl setup_750_7400_hid0
296     - mtlr r4
297     + mtlr r5
298     blr
299     _GLOBAL(__setup_cpu_7410)
300     - mflr r4
301     + mflr r5
302     bl __init_fpu_registers
303     bl setup_7410_workarounds
304     bl setup_common_caches
305     bl setup_750_7400_hid0
306     li r3,0
307     mtspr SPRN_L2CR2,r3
308     - mtlr r4
309     + mtlr r5
310     blr
311     _GLOBAL(__setup_cpu_745x)
312     - mflr r4
313     + mflr r5
314     bl setup_common_caches
315     bl setup_745x_specifics
316     - mtlr r4
317     + mtlr r5
318     blr
319    
320     /* Enable caches for 603's, 604, 750 & 7400 */
321     @@ -194,10 +194,10 @@ setup_750cx:
322     cror 4*cr0+eq,4*cr0+eq,4*cr1+eq
323     cror 4*cr0+eq,4*cr0+eq,4*cr2+eq
324     bnelr
325     - lwz r6,CPU_SPEC_FEATURES(r5)
326     + lwz r6,CPU_SPEC_FEATURES(r4)
327     li r7,CPU_FTR_CAN_NAP
328     andc r6,r6,r7
329     - stw r6,CPU_SPEC_FEATURES(r5)
330     + stw r6,CPU_SPEC_FEATURES(r4)
331     blr
332    
333     /* 750fx specific
334     @@ -225,12 +225,12 @@ BEGIN_FTR_SECTION
335     andis. r11,r11,L3CR_L3E@h
336     beq 1f
337     END_FTR_SECTION_IFSET(CPU_FTR_L3CR)
338     - lwz r6,CPU_SPEC_FEATURES(r5)
339     + lwz r6,CPU_SPEC_FEATURES(r4)
340     andi. r0,r6,CPU_FTR_L3_DISABLE_NAP
341     beq 1f
342     li r7,CPU_FTR_CAN_NAP
343     andc r6,r6,r7
344     - stw r6,CPU_SPEC_FEATURES(r5)
345     + stw r6,CPU_SPEC_FEATURES(r4)
346     1:
347     mfspr r11,SPRN_HID0
348    
349     diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
350     index 74505b2..c33210a 100644
351     --- a/arch/powerpc/mm/numa.c
352     +++ b/arch/powerpc/mm/numa.c
353     @@ -181,7 +181,7 @@ static void unmap_cpu_from_node(unsigned long cpu)
354     dbg("removing cpu %lu from node %d\n", cpu, node);
355    
356     if (cpumask_test_cpu(cpu, node_to_cpumask_map[node])) {
357     - cpumask_set_cpu(cpu, node_to_cpumask_map[node]);
358     + cpumask_clear_cpu(cpu, node_to_cpumask_map[node]);
359     } else {
360     printk(KERN_ERR "WARNING: cpu %lu not found in node %d\n",
361     cpu, node);
362     diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
363     index f129040..8323f14 100644
364     --- a/arch/powerpc/platforms/pseries/lpar.c
365     +++ b/arch/powerpc/platforms/pseries/lpar.c
366     @@ -701,6 +701,13 @@ EXPORT_SYMBOL(arch_free_page);
367     /* NB: reg/unreg are called while guarded with the tracepoints_mutex */
368     extern long hcall_tracepoint_refcount;
369    
370     +/*
371     + * Since the tracing code might execute hcalls we need to guard against
372     + * recursion. One example of this are spinlocks calling H_YIELD on
373     + * shared processor partitions.
374     + */
375     +static DEFINE_PER_CPU(unsigned int, hcall_trace_depth);
376     +
377     void hcall_tracepoint_regfunc(void)
378     {
379     hcall_tracepoint_refcount++;
380     @@ -713,12 +720,42 @@ void hcall_tracepoint_unregfunc(void)
381    
382     void __trace_hcall_entry(unsigned long opcode, unsigned long *args)
383     {
384     + unsigned long flags;
385     + unsigned int *depth;
386     +
387     + local_irq_save(flags);
388     +
389     + depth = &__get_cpu_var(hcall_trace_depth);
390     +
391     + if (*depth)
392     + goto out;
393     +
394     + (*depth)++;
395     trace_hcall_entry(opcode, args);
396     + (*depth)--;
397     +
398     +out:
399     + local_irq_restore(flags);
400     }
401    
402     void __trace_hcall_exit(long opcode, unsigned long retval,
403     unsigned long *retbuf)
404     {
405     + unsigned long flags;
406     + unsigned int *depth;
407     +
408     + local_irq_save(flags);
409     +
410     + depth = &__get_cpu_var(hcall_trace_depth);
411     +
412     + if (*depth)
413     + goto out;
414     +
415     + (*depth)++;
416     trace_hcall_exit(opcode, retval, retbuf);
417     + (*depth)--;
418     +
419     +out:
420     + local_irq_restore(flags);
421     }
422     #endif
423     diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c
424     index 9725369..9f99bef 100644
425     --- a/arch/powerpc/sysdev/fsl_rio.c
426     +++ b/arch/powerpc/sysdev/fsl_rio.c
427     @@ -973,7 +973,6 @@ fsl_rio_dbell_handler(int irq, void *dev_instance)
428     if (dsr & DOORBELL_DSR_QFI) {
429     pr_info("RIO: doorbell queue full\n");
430     out_be32(&priv->msg_regs->dsr, DOORBELL_DSR_QFI);
431     - goto out;
432     }
433    
434     /* XXX Need to check/dispatch until queue empty */
435     diff --git a/arch/sh/include/asm/io.h b/arch/sh/include/asm/io.h
436     index b237d52..34ba197 100644
437     --- a/arch/sh/include/asm/io.h
438     +++ b/arch/sh/include/asm/io.h
439     @@ -322,7 +322,15 @@ __ioremap_29bit(phys_addr_t offset, unsigned long size, pgprot_t prot)
440     * mapping must be done by the PMB or by using page tables.
441     */
442     if (likely(PXSEG(offset) < P3SEG && PXSEG(last_addr) < P3SEG)) {
443     - if (unlikely(pgprot_val(prot) & _PAGE_CACHABLE))
444     + u64 flags = pgprot_val(prot);
445     +
446     + /*
447     + * Anything using the legacy PTEA space attributes needs
448     + * to be kicked down to page table mappings.
449     + */
450     + if (unlikely(flags & _PAGE_PCC_MASK))
451     + return NULL;
452     + if (unlikely(flags & _PAGE_CACHABLE))
453     return (void __iomem *)P1SEGADDR(offset);
454    
455     return (void __iomem *)P2SEGADDR(offset);
456     diff --git a/arch/sh/include/asm/pgtable_32.h b/arch/sh/include/asm/pgtable_32.h
457     index 43528ec..68f3eff 100644
458     --- a/arch/sh/include/asm/pgtable_32.h
459     +++ b/arch/sh/include/asm/pgtable_32.h
460     @@ -76,6 +76,10 @@
461     /* Wrapper for extended mode pgprot twiddling */
462     #define _PAGE_EXT(x) ((unsigned long long)(x) << 32)
463    
464     +#ifdef CONFIG_X2TLB
465     +#define _PAGE_PCC_MASK 0x00000000 /* No legacy PTEA support */
466     +#else
467     +
468     /* software: moves to PTEA.TC (Timing Control) */
469     #define _PAGE_PCC_AREA5 0x00000000 /* use BSC registers for area5 */
470     #define _PAGE_PCC_AREA6 0x80000000 /* use BSC registers for area6 */
471     @@ -89,7 +93,8 @@
472     #define _PAGE_PCC_ATR8 0x60000000 /* Attribute Memory space, 8 bit bus */
473     #define _PAGE_PCC_ATR16 0x60000001 /* Attribute Memory space, 6 bit bus */
474    
475     -#ifndef CONFIG_X2TLB
476     +#define _PAGE_PCC_MASK 0xe0000001
477     +
478     /* copy the ptea attributes */
479     static inline unsigned long copy_ptea_attributes(unsigned long x)
480     {
481     diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
482     index e330da2..57e823a 100644
483     --- a/arch/x86/Kconfig
484     +++ b/arch/x86/Kconfig
485     @@ -2035,6 +2035,7 @@ config OLPC
486     bool "One Laptop Per Child support"
487     select GPIOLIB
488     select OLPC_OPENFIRMWARE
489     + depends on !X86_64 && !X86_PAE
490     ---help---
491     Add support for detecting the unique features of the OLPC
492     XO hardware.
493     diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h
494     index 4a2d4e0..8b5393e 100644
495     --- a/arch/x86/include/asm/mmu_context.h
496     +++ b/arch/x86/include/asm/mmu_context.h
497     @@ -36,8 +36,6 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
498     unsigned cpu = smp_processor_id();
499    
500     if (likely(prev != next)) {
501     - /* stop flush ipis for the previous mm */
502     - cpumask_clear_cpu(cpu, mm_cpumask(prev));
503     #ifdef CONFIG_SMP
504     percpu_write(cpu_tlbstate.state, TLBSTATE_OK);
505     percpu_write(cpu_tlbstate.active_mm, next);
506     @@ -47,6 +45,9 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
507     /* Re-load page tables */
508     load_cr3(next->pgd);
509    
510     + /* stop flush ipis for the previous mm */
511     + cpumask_clear_cpu(cpu, mm_cpumask(prev));
512     +
513     /*
514     * load the LDT, if the LDT is different:
515     */
516     diff --git a/arch/x86/include/asm/uv/uv_bau.h b/arch/x86/include/asm/uv/uv_bau.h
517     index 42d412f..ce1d54c 100644
518     --- a/arch/x86/include/asm/uv/uv_bau.h
519     +++ b/arch/x86/include/asm/uv/uv_bau.h
520     @@ -26,20 +26,22 @@
521     * BAU_SB_DESCRIPTOR_BASE register, set 1 is located at BASE + 512,
522     * set 2 is at BASE + 2*512, set 3 at BASE + 3*512, and so on.
523     *
524     - * We will use 31 sets, one for sending BAU messages from each of the 32
525     + * We will use one set for sending BAU messages from each of the
526     * cpu's on the uvhub.
527     *
528     * TLB shootdown will use the first of the 8 descriptors of each set.
529     * Each of the descriptors is 64 bytes in size (8*64 = 512 bytes in a set).
530     */
531    
532     +#define MAX_CPUS_PER_UVHUB 64
533     +#define MAX_CPUS_PER_SOCKET 32
534     +#define UV_ADP_SIZE 64 /* hardware-provided max. */
535     +#define UV_CPUS_PER_ACT_STATUS 32 /* hardware-provided max. */
536     #define UV_ITEMS_PER_DESCRIPTOR 8
537     /* the 'throttle' to prevent the hardware stay-busy bug */
538     #define MAX_BAU_CONCURRENT 3
539     -#define UV_CPUS_PER_ACT_STATUS 32
540     #define UV_ACT_STATUS_MASK 0x3
541     #define UV_ACT_STATUS_SIZE 2
542     -#define UV_ADP_SIZE 32
543     #define UV_DISTRIBUTION_SIZE 256
544     #define UV_SW_ACK_NPENDING 8
545     #define UV_NET_ENDPOINT_INTD 0x38
546     @@ -100,7 +102,6 @@
547     * number of destination side software ack resources
548     */
549     #define DEST_NUM_RESOURCES 8
550     -#define MAX_CPUS_PER_NODE 32
551     /*
552     * completion statuses for sending a TLB flush message
553     */
554     diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c
555     index 01c0f3e..bebabec 100644
556     --- a/arch/x86/kernel/cpu/mtrr/main.c
557     +++ b/arch/x86/kernel/cpu/mtrr/main.c
558     @@ -793,13 +793,21 @@ void set_mtrr_aps_delayed_init(void)
559     }
560    
561     /*
562     - * MTRR initialization for all AP's
563     + * Delayed MTRR initialization for all AP's
564     */
565     void mtrr_aps_init(void)
566     {
567     if (!use_intel())
568     return;
569    
570     + /*
571     + * Check if someone has requested the delay of AP MTRR initialization,
572     + * by doing set_mtrr_aps_delayed_init(), prior to this point. If not,
573     + * then we are done.
574     + */
575     + if (!mtrr_aps_delayed_init)
576     + return;
577     +
578     set_mtrr(~0U, 0, 0, 0);
579     mtrr_aps_delayed_init = false;
580     }
581     diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c
582     index 83ec017..e430114 100644
583     --- a/arch/x86/kernel/irq.c
584     +++ b/arch/x86/kernel/irq.c
585     @@ -357,7 +357,8 @@ void fixup_irqs(void)
586     if (irr & (1 << (vector % 32))) {
587     irq = __get_cpu_var(vector_irq)[vector];
588    
589     - data = irq_get_irq_data(irq);
590     + desc = irq_to_desc(irq);
591     + data = &desc->irq_data;
592     raw_spin_lock(&desc->lock);
593     if (data->chip->irq_retrigger)
594     data->chip->irq_retrigger(data);
595     diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
596     index 57d1868..2502aaf 100644
597     --- a/arch/x86/kernel/process.c
598     +++ b/arch/x86/kernel/process.c
599     @@ -97,21 +97,31 @@ void show_regs(struct pt_regs *regs)
600    
601     void show_regs_common(void)
602     {
603     - const char *board, *product;
604     + const char *vendor, *product, *board;
605    
606     - board = dmi_get_system_info(DMI_BOARD_NAME);
607     - if (!board)
608     - board = "";
609     + vendor = dmi_get_system_info(DMI_SYS_VENDOR);
610     + if (!vendor)
611     + vendor = "";
612     product = dmi_get_system_info(DMI_PRODUCT_NAME);
613     if (!product)
614     product = "";
615    
616     + /* Board Name is optional */
617     + board = dmi_get_system_info(DMI_BOARD_NAME);
618     +
619     printk(KERN_CONT "\n");
620     - printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s %s/%s\n",
621     + printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s",
622     current->pid, current->comm, print_tainted(),
623     init_utsname()->release,
624     (int)strcspn(init_utsname()->version, " "),
625     - init_utsname()->version, board, product);
626     + init_utsname()->version);
627     + printk(KERN_CONT " ");
628     + printk(KERN_CONT "%s %s", vendor, product);
629     + if (board) {
630     + printk(KERN_CONT "/");
631     + printk(KERN_CONT "%s", board);
632     + }
633     + printk(KERN_CONT "\n");
634     }
635    
636     void flush_thread(void)
637     diff --git a/arch/x86/platform/uv/tlb_uv.c b/arch/x86/platform/uv/tlb_uv.c
638     index ba9caa8..df58e9c 100644
639     --- a/arch/x86/platform/uv/tlb_uv.c
640     +++ b/arch/x86/platform/uv/tlb_uv.c
641     @@ -1341,7 +1341,7 @@ uv_activation_descriptor_init(int node, int pnode)
642    
643     /*
644     * each bau_desc is 64 bytes; there are 8 (UV_ITEMS_PER_DESCRIPTOR)
645     - * per cpu; and up to 32 (UV_ADP_SIZE) cpu's per uvhub
646     + * per cpu; and one per cpu on the uvhub (UV_ADP_SIZE)
647     */
648     bau_desc = kmalloc_node(sizeof(struct bau_desc) * UV_ADP_SIZE
649     * UV_ITEMS_PER_DESCRIPTOR, GFP_KERNEL, node);
650     @@ -1490,7 +1490,7 @@ calculate_destination_timeout(void)
651     /*
652     * initialize the bau_control structure for each cpu
653     */
654     -static void __init uv_init_per_cpu(int nuvhubs)
655     +static int __init uv_init_per_cpu(int nuvhubs)
656     {
657     int i;
658     int cpu;
659     @@ -1507,7 +1507,7 @@ static void __init uv_init_per_cpu(int nuvhubs)
660     struct bau_control *smaster = NULL;
661     struct socket_desc {
662     short num_cpus;
663     - short cpu_number[16];
664     + short cpu_number[MAX_CPUS_PER_SOCKET];
665     };
666     struct uvhub_desc {
667     unsigned short socket_mask;
668     @@ -1540,6 +1540,10 @@ static void __init uv_init_per_cpu(int nuvhubs)
669     sdp = &bdp->socket[socket];
670     sdp->cpu_number[sdp->num_cpus] = cpu;
671     sdp->num_cpus++;
672     + if (sdp->num_cpus > MAX_CPUS_PER_SOCKET) {
673     + printk(KERN_EMERG "%d cpus per socket invalid\n", sdp->num_cpus);
674     + return 1;
675     + }
676     }
677     for (uvhub = 0; uvhub < nuvhubs; uvhub++) {
678     if (!(*(uvhub_mask + (uvhub/8)) & (1 << (uvhub%8))))
679     @@ -1570,6 +1574,12 @@ static void __init uv_init_per_cpu(int nuvhubs)
680     bcp->uvhub_master = hmaster;
681     bcp->uvhub_cpu = uv_cpu_hub_info(cpu)->
682     blade_processor_id;
683     + if (bcp->uvhub_cpu >= MAX_CPUS_PER_UVHUB) {
684     + printk(KERN_EMERG
685     + "%d cpus per uvhub invalid\n",
686     + bcp->uvhub_cpu);
687     + return 1;
688     + }
689     }
690     nextsocket:
691     socket++;
692     @@ -1595,6 +1605,7 @@ nextsocket:
693     bcp->congested_reps = congested_reps;
694     bcp->congested_period = congested_period;
695     }
696     + return 0;
697     }
698    
699     /*
700     @@ -1625,7 +1636,10 @@ static int __init uv_bau_init(void)
701     spin_lock_init(&disable_lock);
702     congested_cycles = microsec_2_cycles(congested_response_us);
703    
704     - uv_init_per_cpu(nuvhubs);
705     + if (uv_init_per_cpu(nuvhubs)) {
706     + nobau = 1;
707     + return 0;
708     + }
709    
710     uv_partition_base_pnode = 0x7fffffff;
711     for (uvhub = 0; uvhub < nuvhubs; uvhub++)
712     diff --git a/block/blk-core.c b/block/blk-core.c
713     index 4ce953f..8767520 100644
714     --- a/block/blk-core.c
715     +++ b/block/blk-core.c
716     @@ -64,13 +64,27 @@ static void drive_stat_acct(struct request *rq, int new_io)
717     return;
718    
719     cpu = part_stat_lock();
720     - part = disk_map_sector_rcu(rq->rq_disk, blk_rq_pos(rq));
721    
722     - if (!new_io)
723     + if (!new_io) {
724     + part = rq->part;
725     part_stat_inc(cpu, part, merges[rw]);
726     - else {
727     + } else {
728     + part = disk_map_sector_rcu(rq->rq_disk, blk_rq_pos(rq));
729     + if (!kref_test_and_get(&part->ref)) {
730     + /*
731     + * The partition is already being removed,
732     + * the request will be accounted on the disk only
733     + *
734     + * We take a reference on disk->part0 although that
735     + * partition will never be deleted, so we can treat
736     + * it as any other partition.
737     + */
738     + part = &rq->rq_disk->part0;
739     + kref_get(&part->ref);
740     + }
741     part_round_stats(cpu, part);
742     part_inc_in_flight(part, rw);
743     + rq->part = part;
744     }
745    
746     part_stat_unlock();
747     @@ -128,6 +142,7 @@ void blk_rq_init(struct request_queue *q, struct request *rq)
748     rq->ref_count = 1;
749     rq->start_time = jiffies;
750     set_start_time_ns(rq);
751     + rq->part = NULL;
752     }
753     EXPORT_SYMBOL(blk_rq_init);
754    
755     @@ -1776,7 +1791,7 @@ static void blk_account_io_completion(struct request *req, unsigned int bytes)
756     int cpu;
757    
758     cpu = part_stat_lock();
759     - part = disk_map_sector_rcu(req->rq_disk, blk_rq_pos(req));
760     + part = req->part;
761     part_stat_add(cpu, part, sectors[rw], bytes >> 9);
762     part_stat_unlock();
763     }
764     @@ -1796,13 +1811,14 @@ static void blk_account_io_done(struct request *req)
765     int cpu;
766    
767     cpu = part_stat_lock();
768     - part = disk_map_sector_rcu(req->rq_disk, blk_rq_pos(req));
769     + part = req->part;
770    
771     part_stat_inc(cpu, part, ios[rw]);
772     part_stat_add(cpu, part, ticks[rw], duration);
773     part_round_stats(cpu, part);
774     part_dec_in_flight(part, rw);
775    
776     + kref_put(&part->ref, __delete_partition);
777     part_stat_unlock();
778     }
779     }
780     diff --git a/block/blk-merge.c b/block/blk-merge.c
781     index 74bc4a7..23ea74b 100644
782     --- a/block/blk-merge.c
783     +++ b/block/blk-merge.c
784     @@ -351,11 +351,12 @@ static void blk_account_io_merge(struct request *req)
785     int cpu;
786    
787     cpu = part_stat_lock();
788     - part = disk_map_sector_rcu(req->rq_disk, blk_rq_pos(req));
789     + part = req->part;
790    
791     part_round_stats(cpu, part);
792     part_dec_in_flight(part, rq_data_dir(req));
793    
794     + kref_put(&part->ref, __delete_partition);
795     part_stat_unlock();
796     }
797     }
798     diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
799     index 4cd59b0..6f2a966 100644
800     --- a/block/cfq-iosched.c
801     +++ b/block/cfq-iosched.c
802     @@ -3412,6 +3412,10 @@ static bool cfq_should_wait_busy(struct cfq_data *cfqd, struct cfq_queue *cfqq)
803     {
804     struct cfq_io_context *cic = cfqd->active_cic;
805    
806     + /* If the queue already has requests, don't wait */
807     + if (!RB_EMPTY_ROOT(&cfqq->sort_list))
808     + return false;
809     +
810     /* If there are other queues in the group, don't wait */
811     if (cfqq->cfqg->nr_cfqq > 1)
812     return false;
813     diff --git a/block/genhd.c b/block/genhd.c
814     index 5fa2b44..0c55eae 100644
815     --- a/block/genhd.c
816     +++ b/block/genhd.c
817     @@ -1192,6 +1192,7 @@ struct gendisk *alloc_disk_node(int minors, int node_id)
818     return NULL;
819     }
820     disk->part_tbl->part[0] = &disk->part0;
821     + kref_init(&disk->part0.ref);
822    
823     disk->minors = minors;
824     rand_initialize_disk(disk);
825     diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
826     index 66aa4be..f03ea29 100644
827     --- a/drivers/ata/libata-scsi.c
828     +++ b/drivers/ata/libata-scsi.c
829     @@ -1102,9 +1102,9 @@ static int ata_scsi_dev_config(struct scsi_device *sdev,
830     struct request_queue *q = sdev->request_queue;
831     void *buf;
832    
833     - /* set the min alignment and padding */
834     - blk_queue_update_dma_alignment(sdev->request_queue,
835     - ATA_DMA_PAD_SZ - 1);
836     + sdev->sector_size = ATA_SECT_SIZE;
837     +
838     + /* set DMA padding */
839     blk_queue_update_dma_pad(sdev->request_queue,
840     ATA_DMA_PAD_SZ - 1);
841    
842     @@ -1118,13 +1118,25 @@ static int ata_scsi_dev_config(struct scsi_device *sdev,
843    
844     blk_queue_dma_drain(q, atapi_drain_needed, buf, ATAPI_MAX_DRAIN);
845     } else {
846     - /* ATA devices must be sector aligned */
847     sdev->sector_size = ata_id_logical_sector_size(dev->id);
848     - blk_queue_update_dma_alignment(sdev->request_queue,
849     - sdev->sector_size - 1);
850     sdev->manage_start_stop = 1;
851     }
852    
853     + /*
854     + * ata_pio_sectors() expects buffer for each sector to not cross
855     + * page boundary. Enforce it by requiring buffers to be sector
856     + * aligned, which works iff sector_size is not larger than
857     + * PAGE_SIZE. ATAPI devices also need the alignment as
858     + * IDENTIFY_PACKET is executed as ATA_PROT_PIO.
859     + */
860     + if (sdev->sector_size > PAGE_SIZE)
861     + ata_dev_printk(dev, KERN_WARNING,
862     + "sector_size=%u > PAGE_SIZE, PIO may malfunction\n",
863     + sdev->sector_size);
864     +
865     + blk_queue_update_dma_alignment(sdev->request_queue,
866     + sdev->sector_size - 1);
867     +
868     if (dev->flags & ATA_DFLAG_AN)
869     set_bit(SDEV_EVT_MEDIA_CHANGE, sdev->supported_events);
870    
871     diff --git a/drivers/ata/pata_mpc52xx.c b/drivers/ata/pata_mpc52xx.c
872     index 8cc536e..d7d8026 100644
873     --- a/drivers/ata/pata_mpc52xx.c
874     +++ b/drivers/ata/pata_mpc52xx.c
875     @@ -610,7 +610,7 @@ static struct scsi_host_template mpc52xx_ata_sht = {
876     };
877    
878     static struct ata_port_operations mpc52xx_ata_port_ops = {
879     - .inherits = &ata_sff_port_ops,
880     + .inherits = &ata_bmdma_port_ops,
881     .sff_dev_select = mpc52xx_ata_dev_select,
882     .set_piomode = mpc52xx_ata_set_piomode,
883     .set_dmamode = mpc52xx_ata_set_dmamode,
884     diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
885     index 02c652b..6b2d409 100644
886     --- a/drivers/base/power/runtime.c
887     +++ b/drivers/base/power/runtime.c
888     @@ -404,12 +404,15 @@ static int rpm_suspend(struct device *dev, int rpmflags)
889     goto out;
890     }
891    
892     + /* Maybe the parent is now able to suspend. */
893     if (parent && !parent->power.ignore_children) {
894     - spin_unlock_irq(&dev->power.lock);
895     + spin_unlock(&dev->power.lock);
896    
897     - pm_request_idle(parent);
898     + spin_lock(&parent->power.lock);
899     + rpm_idle(parent, RPM_ASYNC);
900     + spin_unlock(&parent->power.lock);
901    
902     - spin_lock_irq(&dev->power.lock);
903     + spin_lock(&dev->power.lock);
904     }
905    
906     out:
907     diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
908     index a32fb41..e6fc716 100644
909     --- a/drivers/block/nbd.c
910     +++ b/drivers/block/nbd.c
911     @@ -53,7 +53,6 @@
912     #define DBG_BLKDEV 0x0100
913     #define DBG_RX 0x0200
914     #define DBG_TX 0x0400
915     -static DEFINE_MUTEX(nbd_mutex);
916     static unsigned int debugflags;
917     #endif /* NDEBUG */
918    
919     @@ -718,11 +717,9 @@ static int nbd_ioctl(struct block_device *bdev, fmode_t mode,
920     dprintk(DBG_IOCTL, "%s: nbd_ioctl cmd=%s(0x%x) arg=%lu\n",
921     lo->disk->disk_name, ioctl_cmd_to_ascii(cmd), cmd, arg);
922    
923     - mutex_lock(&nbd_mutex);
924     mutex_lock(&lo->tx_lock);
925     error = __nbd_ioctl(bdev, lo, cmd, arg);
926     mutex_unlock(&lo->tx_lock);
927     - mutex_unlock(&nbd_mutex);
928    
929     return error;
930     }
931     diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
932     index e72f49d..2c9dca9 100644
933     --- a/drivers/char/agp/intel-agp.c
934     +++ b/drivers/char/agp/intel-agp.c
935     @@ -774,20 +774,14 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
936     dev_info(&pdev->dev, "Intel %s Chipset\n", intel_agp_chipsets[i].name);
937    
938     /*
939     - * If the device has not been properly setup, the following will catch
940     - * the problem and should stop the system from crashing.
941     - * 20030610 - hamish@zot.org
942     - */
943     - if (pci_enable_device(pdev)) {
944     - dev_err(&pdev->dev, "can't enable PCI device\n");
945     - agp_put_bridge(bridge);
946     - return -ENODEV;
947     - }
948     -
949     - /*
950     * The following fixes the case where the BIOS has "forgotten" to
951     * provide an address range for the GART.
952     * 20030610 - hamish@zot.org
953     + * This happens before pci_enable_device() intentionally;
954     + * calling pci_enable_device() before assigning the resource
955     + * will result in the GART being disabled on machines with such
956     + * BIOSs (the GART ends up with a BAR starting at 0, which
957     + * conflicts a lot of other devices).
958     */
959     r = &pdev->resource[0];
960     if (!r->start && r->end) {
961     @@ -798,6 +792,17 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
962     }
963     }
964    
965     + /*
966     + * If the device has not been properly setup, the following will catch
967     + * the problem and should stop the system from crashing.
968     + * 20030610 - hamish@zot.org
969     + */
970     + if (pci_enable_device(pdev)) {
971     + dev_err(&pdev->dev, "can't enable PCI device\n");
972     + agp_put_bridge(bridge);
973     + return -ENODEV;
974     + }
975     +
976     /* Fill in the mode register */
977     if (cap_ptr) {
978     pci_read_config_dword(pdev,
979     diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
980     index 035da9e..2689ddb 100644
981     --- a/drivers/char/ipmi/ipmi_si_intf.c
982     +++ b/drivers/char/ipmi/ipmi_si_intf.c
983     @@ -320,6 +320,7 @@ static int unload_when_empty = 1;
984     static int add_smi(struct smi_info *smi);
985     static int try_smi_init(struct smi_info *smi);
986     static void cleanup_one_si(struct smi_info *to_clean);
987     +static void cleanup_ipmi_si(void);
988    
989     static ATOMIC_NOTIFIER_HEAD(xaction_notifier_list);
990     static int register_xaction_notifier(struct notifier_block *nb)
991     @@ -3435,16 +3436,7 @@ static int __devinit init_ipmi_si(void)
992     mutex_lock(&smi_infos_lock);
993     if (unload_when_empty && list_empty(&smi_infos)) {
994     mutex_unlock(&smi_infos_lock);
995     -#ifdef CONFIG_PCI
996     - if (pci_registered)
997     - pci_unregister_driver(&ipmi_pci_driver);
998     -#endif
999     -
1000     -#ifdef CONFIG_PPC_OF
1001     - if (of_registered)
1002     - of_unregister_platform_driver(&ipmi_of_platform_driver);
1003     -#endif
1004     - driver_unregister(&ipmi_driver.driver);
1005     + cleanup_ipmi_si();
1006     printk(KERN_WARNING PFX
1007     "Unable to find any System Interface(s)\n");
1008     return -ENODEV;
1009     diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c
1010     index 7c41335..55d0466 100644
1011     --- a/drivers/char/tpm/tpm.c
1012     +++ b/drivers/char/tpm/tpm.c
1013     @@ -364,12 +364,14 @@ unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip,
1014     tpm_protected_ordinal_duration[ordinal &
1015     TPM_PROTECTED_ORDINAL_MASK];
1016    
1017     - if (duration_idx != TPM_UNDEFINED)
1018     + if (duration_idx != TPM_UNDEFINED) {
1019     duration = chip->vendor.duration[duration_idx];
1020     - if (duration <= 0)
1021     + /* if duration is 0, it's because chip->vendor.duration wasn't */
1022     + /* filled yet, so we set the lowest timeout just to give enough */
1023     + /* time for tpm_get_timeouts() to succeed */
1024     + return (duration <= 0 ? HZ : duration);
1025     + } else
1026     return 2 * 60 * HZ;
1027     - else
1028     - return duration;
1029     }
1030     EXPORT_SYMBOL_GPL(tpm_calc_ordinal_duration);
1031    
1032     @@ -575,9 +577,11 @@ duration:
1033     if (rc)
1034     return;
1035    
1036     - if (be32_to_cpu(tpm_cmd.header.out.return_code)
1037     - != 3 * sizeof(u32))
1038     + if (be32_to_cpu(tpm_cmd.header.out.return_code) != 0 ||
1039     + be32_to_cpu(tpm_cmd.header.out.length)
1040     + != sizeof(tpm_cmd.header.out) + sizeof(u32) + 3 * sizeof(u32))
1041     return;
1042     +
1043     duration_cap = &tpm_cmd.params.getcap_out.cap.duration;
1044     chip->vendor.duration[TPM_SHORT] =
1045     usecs_to_jiffies(be32_to_cpu(duration_cap->tpm_short));
1046     @@ -921,6 +925,18 @@ ssize_t tpm_show_caps_1_2(struct device * dev,
1047     }
1048     EXPORT_SYMBOL_GPL(tpm_show_caps_1_2);
1049    
1050     +ssize_t tpm_show_timeouts(struct device *dev, struct device_attribute *attr,
1051     + char *buf)
1052     +{
1053     + struct tpm_chip *chip = dev_get_drvdata(dev);
1054     +
1055     + return sprintf(buf, "%d %d %d\n",
1056     + jiffies_to_usecs(chip->vendor.duration[TPM_SHORT]),
1057     + jiffies_to_usecs(chip->vendor.duration[TPM_MEDIUM]),
1058     + jiffies_to_usecs(chip->vendor.duration[TPM_LONG]));
1059     +}
1060     +EXPORT_SYMBOL_GPL(tpm_show_timeouts);
1061     +
1062     ssize_t tpm_store_cancel(struct device *dev, struct device_attribute *attr,
1063     const char *buf, size_t count)
1064     {
1065     diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
1066     index 792868d..ba1779c 100644
1067     --- a/drivers/char/tpm/tpm.h
1068     +++ b/drivers/char/tpm/tpm.h
1069     @@ -56,6 +56,8 @@ extern ssize_t tpm_show_owned(struct device *, struct device_attribute *attr,
1070     char *);
1071     extern ssize_t tpm_show_temp_deactivated(struct device *,
1072     struct device_attribute *attr, char *);
1073     +extern ssize_t tpm_show_timeouts(struct device *,
1074     + struct device_attribute *attr, char *);
1075    
1076     struct tpm_chip;
1077    
1078     diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
1079     index c17a305..0d1d38e 100644
1080     --- a/drivers/char/tpm/tpm_tis.c
1081     +++ b/drivers/char/tpm/tpm_tis.c
1082     @@ -376,6 +376,7 @@ static DEVICE_ATTR(temp_deactivated, S_IRUGO, tpm_show_temp_deactivated,
1083     NULL);
1084     static DEVICE_ATTR(caps, S_IRUGO, tpm_show_caps_1_2, NULL);
1085     static DEVICE_ATTR(cancel, S_IWUSR | S_IWGRP, NULL, tpm_store_cancel);
1086     +static DEVICE_ATTR(timeouts, S_IRUGO, tpm_show_timeouts, NULL);
1087    
1088     static struct attribute *tis_attrs[] = {
1089     &dev_attr_pubek.attr,
1090     @@ -385,7 +386,8 @@ static struct attribute *tis_attrs[] = {
1091     &dev_attr_owned.attr,
1092     &dev_attr_temp_deactivated.attr,
1093     &dev_attr_caps.attr,
1094     - &dev_attr_cancel.attr, NULL,
1095     + &dev_attr_cancel.attr,
1096     + &dev_attr_timeouts.attr, NULL,
1097     };
1098    
1099     static struct attribute_group tis_attr_grp = {
1100     @@ -493,9 +495,6 @@ static int tpm_tis_init(struct device *dev, resource_size_t start,
1101     "1.2 TPM (device-id 0x%X, rev-id %d)\n",
1102     vendor >> 16, ioread8(chip->vendor.iobase + TPM_RID(0)));
1103    
1104     - if (is_itpm(to_pnp_dev(dev)))
1105     - itpm = 1;
1106     -
1107     if (itpm)
1108     dev_info(dev, "Intel iTPM workaround enabled\n");
1109    
1110     @@ -637,6 +636,9 @@ static int __devinit tpm_tis_pnp_init(struct pnp_dev *pnp_dev,
1111     else
1112     interrupts = 0;
1113    
1114     + if (is_itpm(pnp_dev))
1115     + itpm = 1;
1116     +
1117     return tpm_tis_init(&pnp_dev->dev, start, len, irq);
1118     }
1119    
1120     diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
1121     index 896a2ce..ad2520b 100644
1122     --- a/drivers/char/virtio_console.c
1123     +++ b/drivers/char/virtio_console.c
1124     @@ -1462,6 +1462,17 @@ static void control_work_handler(struct work_struct *work)
1125     spin_unlock(&portdev->cvq_lock);
1126     }
1127    
1128     +static void out_intr(struct virtqueue *vq)
1129     +{
1130     + struct port *port;
1131     +
1132     + port = find_port_by_vq(vq->vdev->priv, vq);
1133     + if (!port)
1134     + return;
1135     +
1136     + wake_up_interruptible(&port->waitqueue);
1137     +}
1138     +
1139     static void in_intr(struct virtqueue *vq)
1140     {
1141     struct port *port;
1142     @@ -1566,7 +1577,7 @@ static int init_vqs(struct ports_device *portdev)
1143     */
1144     j = 0;
1145     io_callbacks[j] = in_intr;
1146     - io_callbacks[j + 1] = NULL;
1147     + io_callbacks[j + 1] = out_intr;
1148     io_names[j] = "input";
1149     io_names[j + 1] = "output";
1150     j += 2;
1151     @@ -1580,7 +1591,7 @@ static int init_vqs(struct ports_device *portdev)
1152     for (i = 1; i < nr_ports; i++) {
1153     j += 2;
1154     io_callbacks[j] = in_intr;
1155     - io_callbacks[j + 1] = NULL;
1156     + io_callbacks[j + 1] = out_intr;
1157     io_names[j] = "input";
1158     io_names[j + 1] = "output";
1159     }
1160     diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
1161     index a507108..97df791 100644
1162     --- a/drivers/cpuidle/cpuidle.c
1163     +++ b/drivers/cpuidle/cpuidle.c
1164     @@ -154,6 +154,45 @@ void cpuidle_resume_and_unlock(void)
1165    
1166     EXPORT_SYMBOL_GPL(cpuidle_resume_and_unlock);
1167    
1168     +#ifdef CONFIG_ARCH_HAS_CPU_RELAX
1169     +static int poll_idle(struct cpuidle_device *dev, struct cpuidle_state *st)
1170     +{
1171     + ktime_t t1, t2;
1172     + s64 diff;
1173     + int ret;
1174     +
1175     + t1 = ktime_get();
1176     + local_irq_enable();
1177     + while (!need_resched())
1178     + cpu_relax();
1179     +
1180     + t2 = ktime_get();
1181     + diff = ktime_to_us(ktime_sub(t2, t1));
1182     + if (diff > INT_MAX)
1183     + diff = INT_MAX;
1184     +
1185     + ret = (int) diff;
1186     + return ret;
1187     +}
1188     +
1189     +static void poll_idle_init(struct cpuidle_device *dev)
1190     +{
1191     + struct cpuidle_state *state = &dev->states[0];
1192     +
1193     + cpuidle_set_statedata(state, NULL);
1194     +
1195     + snprintf(state->name, CPUIDLE_NAME_LEN, "C0");
1196     + snprintf(state->desc, CPUIDLE_DESC_LEN, "CPUIDLE CORE POLL IDLE");
1197     + state->exit_latency = 0;
1198     + state->target_residency = 0;
1199     + state->power_usage = -1;
1200     + state->flags = CPUIDLE_FLAG_POLL;
1201     + state->enter = poll_idle;
1202     +}
1203     +#else
1204     +static void poll_idle_init(struct cpuidle_device *dev) {}
1205     +#endif /* CONFIG_ARCH_HAS_CPU_RELAX */
1206     +
1207     /**
1208     * cpuidle_enable_device - enables idle PM for a CPU
1209     * @dev: the CPU
1210     @@ -178,6 +217,8 @@ int cpuidle_enable_device(struct cpuidle_device *dev)
1211     return ret;
1212     }
1213    
1214     + poll_idle_init(dev);
1215     +
1216     if ((ret = cpuidle_add_state_sysfs(dev)))
1217     return ret;
1218    
1219     @@ -232,45 +273,6 @@ void cpuidle_disable_device(struct cpuidle_device *dev)
1220    
1221     EXPORT_SYMBOL_GPL(cpuidle_disable_device);
1222    
1223     -#ifdef CONFIG_ARCH_HAS_CPU_RELAX
1224     -static int poll_idle(struct cpuidle_device *dev, struct cpuidle_state *st)
1225     -{
1226     - ktime_t t1, t2;
1227     - s64 diff;
1228     - int ret;
1229     -
1230     - t1 = ktime_get();
1231     - local_irq_enable();
1232     - while (!need_resched())
1233     - cpu_relax();
1234     -
1235     - t2 = ktime_get();
1236     - diff = ktime_to_us(ktime_sub(t2, t1));
1237     - if (diff > INT_MAX)
1238     - diff = INT_MAX;
1239     -
1240     - ret = (int) diff;
1241     - return ret;
1242     -}
1243     -
1244     -static void poll_idle_init(struct cpuidle_device *dev)
1245     -{
1246     - struct cpuidle_state *state = &dev->states[0];
1247     -
1248     - cpuidle_set_statedata(state, NULL);
1249     -
1250     - snprintf(state->name, CPUIDLE_NAME_LEN, "C0");
1251     - snprintf(state->desc, CPUIDLE_DESC_LEN, "CPUIDLE CORE POLL IDLE");
1252     - state->exit_latency = 0;
1253     - state->target_residency = 0;
1254     - state->power_usage = -1;
1255     - state->flags = CPUIDLE_FLAG_POLL;
1256     - state->enter = poll_idle;
1257     -}
1258     -#else
1259     -static void poll_idle_init(struct cpuidle_device *dev) {}
1260     -#endif /* CONFIG_ARCH_HAS_CPU_RELAX */
1261     -
1262     /**
1263     * __cpuidle_register_device - internal register function called before register
1264     * and enable routines
1265     @@ -291,8 +293,6 @@ static int __cpuidle_register_device(struct cpuidle_device *dev)
1266    
1267     init_completion(&dev->kobj_unregister);
1268    
1269     - poll_idle_init(dev);
1270     -
1271     /*
1272     * cpuidle driver should set the dev->power_specified bit
1273     * before registering the device if the driver provides
1274     diff --git a/drivers/firewire/core-card.c b/drivers/firewire/core-card.c
1275     index be04923..24ff355 100644
1276     --- a/drivers/firewire/core-card.c
1277     +++ b/drivers/firewire/core-card.c
1278     @@ -75,6 +75,8 @@ static size_t config_rom_length = 1 + 4 + 1 + 1;
1279     #define BIB_IRMC ((1) << 31)
1280     #define NODE_CAPABILITIES 0x0c0083c0 /* per IEEE 1394 clause 8.3.2.6.5.2 */
1281    
1282     +#define CANON_OUI 0x000085
1283     +
1284     static void generate_config_rom(struct fw_card *card, __be32 *config_rom)
1285     {
1286     struct fw_descriptor *desc;
1287     @@ -284,6 +286,7 @@ static void bm_work(struct work_struct *work)
1288     bool root_device_is_running;
1289     bool root_device_is_cmc;
1290     bool irm_is_1394_1995_only;
1291     + bool keep_this_irm;
1292    
1293     spin_lock_irq(&card->lock);
1294    
1295     @@ -305,6 +308,10 @@ static void bm_work(struct work_struct *work)
1296     irm_is_1394_1995_only = irm_device && irm_device->config_rom &&
1297     (irm_device->config_rom[2] & 0x000000f0) == 0;
1298    
1299     + /* Canon MV5i works unreliably if it is not root node. */
1300     + keep_this_irm = irm_device && irm_device->config_rom &&
1301     + irm_device->config_rom[3] >> 8 == CANON_OUI;
1302     +
1303     root_id = root_node->node_id;
1304     irm_id = card->irm_node->node_id;
1305     local_id = card->local_node->node_id;
1306     @@ -333,7 +340,7 @@ static void bm_work(struct work_struct *work)
1307     goto pick_me;
1308     }
1309    
1310     - if (irm_is_1394_1995_only) {
1311     + if (irm_is_1394_1995_only && !keep_this_irm) {
1312     new_root_id = local_id;
1313     fw_notify("%s, making local node (%02x) root.\n",
1314     "IRM is not 1394a compliant", new_root_id);
1315     @@ -382,7 +389,7 @@ static void bm_work(struct work_struct *work)
1316    
1317     spin_lock_irq(&card->lock);
1318    
1319     - if (rcode != RCODE_COMPLETE) {
1320     + if (rcode != RCODE_COMPLETE && !keep_this_irm) {
1321     /*
1322     * The lock request failed, maybe the IRM
1323     * isn't really IRM capable after all. Let's
1324     diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
1325     index e28e41668..bcb1126 100644
1326     --- a/drivers/firmware/dmi_scan.c
1327     +++ b/drivers/firmware/dmi_scan.c
1328     @@ -378,10 +378,17 @@ static void __init print_filtered(const char *info)
1329    
1330     static void __init dmi_dump_ids(void)
1331     {
1332     + const char *board; /* Board Name is optional */
1333     +
1334     printk(KERN_DEBUG "DMI: ");
1335     - print_filtered(dmi_get_system_info(DMI_BOARD_NAME));
1336     - printk(KERN_CONT "/");
1337     + print_filtered(dmi_get_system_info(DMI_SYS_VENDOR));
1338     + printk(KERN_CONT " ");
1339     print_filtered(dmi_get_system_info(DMI_PRODUCT_NAME));
1340     + board = dmi_get_system_info(DMI_BOARD_NAME);
1341     + if (board) {
1342     + printk(KERN_CONT "/");
1343     + print_filtered(board);
1344     + }
1345     printk(KERN_CONT ", BIOS ");
1346     print_filtered(dmi_get_system_info(DMI_BIOS_VERSION));
1347     printk(KERN_CONT " ");
1348     diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
1349     index 7af4436..7ea4bdd 100644
1350     --- a/drivers/gpu/drm/Kconfig
1351     +++ b/drivers/gpu/drm/Kconfig
1352     @@ -100,7 +100,10 @@ config DRM_I830
1353     config DRM_I915
1354     tristate "i915 driver"
1355     depends on AGP_INTEL
1356     + # we need shmfs for the swappable backing store, and in particular
1357     + # the shmem_readpage() which depends upon tmpfs
1358     select SHMEM
1359     + select TMPFS
1360     select DRM_KMS_HELPER
1361     select FB_CFB_FILLRECT
1362     select FB_CFB_COPYAREA
1363     diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
1364     index 2d4e17a..a0ce53d 100644
1365     --- a/drivers/gpu/drm/drm_crtc_helper.c
1366     +++ b/drivers/gpu/drm/drm_crtc_helper.c
1367     @@ -650,9 +650,16 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
1368     old_fb)) {
1369     DRM_ERROR("failed to set mode on [CRTC:%d]\n",
1370     set->crtc->base.id);
1371     + set->crtc->fb = old_fb;
1372     ret = -EINVAL;
1373     goto fail;
1374     }
1375     + DRM_DEBUG_KMS("Setting connector DPMS state to on\n");
1376     + for (i = 0; i < set->num_connectors; i++) {
1377     + DRM_DEBUG_KMS("\t[CONNECTOR:%d:%s] set DPMS on\n", set->connectors[i]->base.id,
1378     + drm_get_connector_name(set->connectors[i]));
1379     + set->connectors[i]->dpms = DRM_MODE_DPMS_ON;
1380     + }
1381     }
1382     drm_helper_disable_unused_functions(dev);
1383     } else if (fb_changed) {
1384     @@ -664,14 +671,10 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
1385     set->crtc->fb = set->fb;
1386     ret = crtc_funcs->mode_set_base(set->crtc,
1387     set->x, set->y, old_fb);
1388     - if (ret != 0)
1389     + if (ret != 0) {
1390     + set->crtc->fb = old_fb;
1391     goto fail;
1392     - }
1393     - DRM_DEBUG_KMS("Setting connector DPMS state to on\n");
1394     - for (i = 0; i < set->num_connectors; i++) {
1395     - DRM_DEBUG_KMS("\t[CONNECTOR:%d:%s] set DPMS on\n", set->connectors[i]->base.id,
1396     - drm_get_connector_name(set->connectors[i]));
1397     - set->connectors[i]->dpms = DRM_MODE_DPMS_ON;
1398     + }
1399     }
1400    
1401     kfree(save_connectors);
1402     diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
1403     index cb900dc..4916c10 100644
1404     --- a/drivers/gpu/drm/i915/i915_dma.c
1405     +++ b/drivers/gpu/drm/i915/i915_dma.c
1406     @@ -1243,9 +1243,15 @@ static int i915_load_modeset_init(struct drm_device *dev,
1407     if (ret)
1408     DRM_INFO("failed to find VBIOS tables\n");
1409    
1410     - /* if we have > 1 VGA cards, then disable the radeon VGA resources */
1411     + /* If we have > 1 VGA cards, then we need to arbitrate access
1412     + * to the common VGA resources.
1413     + *
1414     + * If we are a secondary display controller (!PCI_DISPLAY_CLASS_VGA),
1415     + * then we do not take part in VGA arbitration and the
1416     + * vga_client_register() fails with -ENODEV.
1417     + */
1418     ret = vga_client_register(dev->pdev, dev, NULL, i915_vga_set_decode);
1419     - if (ret)
1420     + if (ret && ret != -ENODEV)
1421     goto cleanup_ringbuffer;
1422    
1423     intel_register_dsm_handler();
1424     diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
1425     index f737960..da769bc 100644
1426     --- a/drivers/gpu/drm/i915/i915_drv.c
1427     +++ b/drivers/gpu/drm/i915/i915_drv.c
1428     @@ -54,7 +54,7 @@ extern int intel_agp_enabled;
1429    
1430     #define INTEL_VGA_DEVICE(id, info) { \
1431     .class = PCI_CLASS_DISPLAY_VGA << 8, \
1432     - .class_mask = 0xffff00, \
1433     + .class_mask = 0xff0000, \
1434     .vendor = 0x8086, \
1435     .device = id, \
1436     .subvendor = PCI_ANY_ID, \
1437     @@ -501,6 +501,14 @@ int i915_reset(struct drm_device *dev, u8 flags)
1438     static int __devinit
1439     i915_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1440     {
1441     + /* Only bind to function 0 of the device. Early generations
1442     + * used function 1 as a placeholder for multi-head. This causes
1443     + * us confusion instead, especially on the systems where both
1444     + * functions have the same PCI-ID!
1445     + */
1446     + if (PCI_FUNC(pdev->devfn))
1447     + return -ENODEV;
1448     +
1449     return drm_get_pci_dev(pdev, ent, &driver);
1450     }
1451    
1452     diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
1453     index 409826d..d2896eb 100644
1454     --- a/drivers/gpu/drm/i915/i915_drv.h
1455     +++ b/drivers/gpu/drm/i915/i915_drv.h
1456     @@ -329,6 +329,7 @@ typedef struct drm_i915_private {
1457    
1458     /* LVDS info */
1459     int backlight_level; /* restore backlight to this value */
1460     + bool backlight_enabled;
1461     struct drm_display_mode *panel_fixed_mode;
1462     struct drm_display_mode *lfp_lvds_vbt_mode; /* if any */
1463     struct drm_display_mode *sdvo_lvds_vbt_mode; /* if any */
1464     diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
1465     index cb8f434..0a1b276 100644
1466     --- a/drivers/gpu/drm/i915/i915_reg.h
1467     +++ b/drivers/gpu/drm/i915/i915_reg.h
1468     @@ -3057,10 +3057,11 @@
1469     #define EDP_LINK_TRAIN_600MV_3_5DB_SNB_A (0x01<<22)
1470     #define EDP_LINK_TRAIN_800MV_0DB_SNB_A (0x0<<22)
1471     /* SNB B-stepping */
1472     -#define EDP_LINK_TRAIN_400MV_0DB_SNB_B (0x0<<22)
1473     -#define EDP_LINK_TRAIN_400MV_6DB_SNB_B (0x3a<<22)
1474     -#define EDP_LINK_TRAIN_600MV_3_5DB_SNB_B (0x39<<22)
1475     -#define EDP_LINK_TRAIN_800MV_0DB_SNB_B (0x38<<22)
1476     +#define EDP_LINK_TRAIN_400_600MV_0DB_SNB_B (0x0<<22)
1477     +#define EDP_LINK_TRAIN_400MV_3_5DB_SNB_B (0x1<<22)
1478     +#define EDP_LINK_TRAIN_400_600MV_6DB_SNB_B (0x3a<<22)
1479     +#define EDP_LINK_TRAIN_600_800MV_3_5DB_SNB_B (0x39<<22)
1480     +#define EDP_LINK_TRAIN_800_1200MV_0DB_SNB_B (0x38<<22)
1481     #define EDP_LINK_TRAIN_VOL_EMP_MASK_SNB (0x3f<<22)
1482    
1483     #endif /* _I915_REG_H_ */
1484     diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
1485     index 8df5743..17035b8 100644
1486     --- a/drivers/gpu/drm/i915/intel_crt.c
1487     +++ b/drivers/gpu/drm/i915/intel_crt.c
1488     @@ -30,6 +30,7 @@
1489     #include "drm.h"
1490     #include "drm_crtc.h"
1491     #include "drm_crtc_helper.h"
1492     +#include "drm_edid.h"
1493     #include "intel_drv.h"
1494     #include "i915_drm.h"
1495     #include "i915_drv.h"
1496     @@ -287,8 +288,9 @@ static bool intel_crt_ddc_probe(struct drm_i915_private *dev_priv, int ddc_bus)
1497     return i2c_transfer(&dev_priv->gmbus[ddc_bus].adapter, msgs, 1) == 1;
1498     }
1499    
1500     -static bool intel_crt_detect_ddc(struct intel_crt *crt)
1501     +static bool intel_crt_detect_ddc(struct drm_connector *connector)
1502     {
1503     + struct intel_crt *crt = intel_attached_crt(connector);
1504     struct drm_i915_private *dev_priv = crt->base.base.dev->dev_private;
1505    
1506     /* CRT should always be at 0, but check anyway */
1507     @@ -301,8 +303,26 @@ static bool intel_crt_detect_ddc(struct intel_crt *crt)
1508     }
1509    
1510     if (intel_ddc_probe(&crt->base, dev_priv->crt_ddc_pin)) {
1511     - DRM_DEBUG_KMS("CRT detected via DDC:0x50 [EDID]\n");
1512     - return true;
1513     + struct edid *edid;
1514     + bool is_digital = false;
1515     +
1516     + edid = drm_get_edid(connector,
1517     + &dev_priv->gmbus[dev_priv->crt_ddc_pin].adapter);
1518     + /*
1519     + * This may be a DVI-I connector with a shared DDC
1520     + * link between analog and digital outputs, so we
1521     + * have to check the EDID input spec of the attached device.
1522     + */
1523     + if (edid != NULL) {
1524     + is_digital = edid->input & DRM_EDID_INPUT_DIGITAL;
1525     + connector->display_info.raw_edid = NULL;
1526     + kfree(edid);
1527     + }
1528     +
1529     + if (!is_digital) {
1530     + DRM_DEBUG_KMS("CRT detected via DDC:0x50 [EDID]\n");
1531     + return true;
1532     + }
1533     }
1534    
1535     return false;
1536     @@ -458,7 +478,7 @@ intel_crt_detect(struct drm_connector *connector, bool force)
1537     }
1538     }
1539    
1540     - if (intel_crt_detect_ddc(crt))
1541     + if (intel_crt_detect_ddc(connector))
1542     return connector_status_connected;
1543    
1544     if (!force)
1545     @@ -472,7 +492,7 @@ intel_crt_detect(struct drm_connector *connector, bool force)
1546     crtc = intel_get_load_detect_pipe(&crt->base, connector,
1547     NULL, &dpms_mode);
1548     if (crtc) {
1549     - if (intel_crt_detect_ddc(crt))
1550     + if (intel_crt_detect_ddc(connector))
1551     status = connector_status_connected;
1552     else
1553     status = intel_crt_load_detect(crtc, crt);
1554     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
1555     index fca5232..3abd904 100644
1556     --- a/drivers/gpu/drm/i915/intel_display.c
1557     +++ b/drivers/gpu/drm/i915/intel_display.c
1558     @@ -3714,7 +3714,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
1559     int lane = 0, link_bw, bpp;
1560     /* CPU eDP doesn't require FDI link, so just set DP M/N
1561     according to current link config */
1562     - if (has_edp_encoder && !intel_encoder_is_pch_edp(&encoder->base)) {
1563     + if (has_edp_encoder && !intel_encoder_is_pch_edp(&has_edp_encoder->base)) {
1564     target_clock = mode->clock;
1565     intel_edp_link_config(has_edp_encoder,
1566     &lane, &link_bw);
1567     @@ -5498,6 +5498,8 @@ static void intel_setup_outputs(struct drm_device *dev)
1568     encoder->base.possible_clones =
1569     intel_encoder_clones(dev, encoder->clone_mask);
1570     }
1571     +
1572     + intel_panel_setup_backlight(dev);
1573     }
1574    
1575     static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb)
1576     diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
1577     index 864417c..c1f13bf 100644
1578     --- a/drivers/gpu/drm/i915/intel_dp.c
1579     +++ b/drivers/gpu/drm/i915/intel_dp.c
1580     @@ -1153,18 +1153,27 @@ intel_dp_signal_levels(uint8_t train_set, int lane_count)
1581     static uint32_t
1582     intel_gen6_edp_signal_levels(uint8_t train_set)
1583     {
1584     - switch (train_set & (DP_TRAIN_VOLTAGE_SWING_MASK|DP_TRAIN_PRE_EMPHASIS_MASK)) {
1585     + int signal_levels = train_set & (DP_TRAIN_VOLTAGE_SWING_MASK |
1586     + DP_TRAIN_PRE_EMPHASIS_MASK);
1587     + switch (signal_levels) {
1588     case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_0:
1589     - return EDP_LINK_TRAIN_400MV_0DB_SNB_B;
1590     + case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_0:
1591     + return EDP_LINK_TRAIN_400_600MV_0DB_SNB_B;
1592     + case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_3_5:
1593     + return EDP_LINK_TRAIN_400MV_3_5DB_SNB_B;
1594     case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_6:
1595     - return EDP_LINK_TRAIN_400MV_6DB_SNB_B;
1596     + case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_6:
1597     + return EDP_LINK_TRAIN_400_600MV_6DB_SNB_B;
1598     case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_3_5:
1599     - return EDP_LINK_TRAIN_600MV_3_5DB_SNB_B;
1600     + case DP_TRAIN_VOLTAGE_SWING_800 | DP_TRAIN_PRE_EMPHASIS_3_5:
1601     + return EDP_LINK_TRAIN_600_800MV_3_5DB_SNB_B;
1602     case DP_TRAIN_VOLTAGE_SWING_800 | DP_TRAIN_PRE_EMPHASIS_0:
1603     - return EDP_LINK_TRAIN_800MV_0DB_SNB_B;
1604     + case DP_TRAIN_VOLTAGE_SWING_1200 | DP_TRAIN_PRE_EMPHASIS_0:
1605     + return EDP_LINK_TRAIN_800_1200MV_0DB_SNB_B;
1606     default:
1607     - DRM_DEBUG_KMS("Unsupported voltage swing/pre-emphasis level\n");
1608     - return EDP_LINK_TRAIN_400MV_0DB_SNB_B;
1609     + DRM_DEBUG_KMS("Unsupported voltage swing/pre-emphasis level:"
1610     + "0x%x\n", signal_levels);
1611     + return EDP_LINK_TRAIN_400_600MV_0DB_SNB_B;
1612     }
1613     }
1614    
1615     diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
1616     index e52c612..1e68293 100644
1617     --- a/drivers/gpu/drm/i915/intel_drv.h
1618     +++ b/drivers/gpu/drm/i915/intel_drv.h
1619     @@ -256,6 +256,9 @@ extern void intel_pch_panel_fitting(struct drm_device *dev,
1620     extern u32 intel_panel_get_max_backlight(struct drm_device *dev);
1621     extern u32 intel_panel_get_backlight(struct drm_device *dev);
1622     extern void intel_panel_set_backlight(struct drm_device *dev, u32 level);
1623     +extern void intel_panel_setup_backlight(struct drm_device *dev);
1624     +extern void intel_panel_enable_backlight(struct drm_device *dev);
1625     +extern void intel_panel_disable_backlight(struct drm_device *dev);
1626    
1627     extern void intel_crtc_load_lut(struct drm_crtc *crtc);
1628     extern void intel_encoder_prepare (struct drm_encoder *encoder);
1629     diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
1630     index 25bcedf..fe779b3 100644
1631     --- a/drivers/gpu/drm/i915/intel_lvds.c
1632     +++ b/drivers/gpu/drm/i915/intel_lvds.c
1633     @@ -106,7 +106,7 @@ static void intel_lvds_enable(struct intel_lvds *intel_lvds)
1634     I915_WRITE(ctl_reg, I915_READ(ctl_reg) | POWER_TARGET_ON);
1635     POSTING_READ(lvds_reg);
1636    
1637     - intel_panel_set_backlight(dev, dev_priv->backlight_level);
1638     + intel_panel_enable_backlight(dev);
1639     }
1640    
1641     static void intel_lvds_disable(struct intel_lvds *intel_lvds)
1642     @@ -123,8 +123,7 @@ static void intel_lvds_disable(struct intel_lvds *intel_lvds)
1643     lvds_reg = LVDS;
1644     }
1645    
1646     - dev_priv->backlight_level = intel_panel_get_backlight(dev);
1647     - intel_panel_set_backlight(dev, 0);
1648     + intel_panel_disable_backlight(dev);
1649    
1650     I915_WRITE(ctl_reg, I915_READ(ctl_reg) & ~POWER_TARGET_ON);
1651    
1652     @@ -395,8 +394,6 @@ static void intel_lvds_prepare(struct drm_encoder *encoder)
1653     struct drm_i915_private *dev_priv = dev->dev_private;
1654     struct intel_lvds *intel_lvds = to_intel_lvds(encoder);
1655    
1656     - dev_priv->backlight_level = intel_panel_get_backlight(dev);
1657     -
1658     /* We try to do the minimum that is necessary in order to unlock
1659     * the registers for mode setting.
1660     *
1661     @@ -427,9 +424,6 @@ static void intel_lvds_commit(struct drm_encoder *encoder)
1662     struct drm_i915_private *dev_priv = dev->dev_private;
1663     struct intel_lvds *intel_lvds = to_intel_lvds(encoder);
1664    
1665     - if (dev_priv->backlight_level == 0)
1666     - dev_priv->backlight_level = intel_panel_get_max_backlight(dev);
1667     -
1668     /* Undo any unlocking done in prepare to prevent accidental
1669     * adjustment of the registers.
1670     */
1671     @@ -703,6 +697,14 @@ static const struct dmi_system_id intel_no_lvds[] = {
1672     },
1673     {
1674     .callback = intel_no_lvds_dmi_callback,
1675     + .ident = "AOpen i915GMm-HFS",
1676     + .matches = {
1677     + DMI_MATCH(DMI_BOARD_VENDOR, "AOpen"),
1678     + DMI_MATCH(DMI_BOARD_NAME, "i915GMm-HFS"),
1679     + },
1680     + },
1681     + {
1682     + .callback = intel_no_lvds_dmi_callback,
1683     .ident = "Aopen i945GTt-VFA",
1684     .matches = {
1685     DMI_MATCH(DMI_PRODUCT_VERSION, "AO00001JW"),
1686     diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
1687     index 92ff8f3..0df86b5 100644
1688     --- a/drivers/gpu/drm/i915/intel_panel.c
1689     +++ b/drivers/gpu/drm/i915/intel_panel.c
1690     @@ -218,3 +218,34 @@ void intel_panel_set_backlight(struct drm_device *dev, u32 level)
1691     tmp &= ~BACKLIGHT_DUTY_CYCLE_MASK;
1692     I915_WRITE(BLC_PWM_CTL, tmp | level);
1693     }
1694     +
1695     +void intel_panel_disable_backlight(struct drm_device *dev)
1696     +{
1697     + struct drm_i915_private *dev_priv = dev->dev_private;
1698     +
1699     + if (dev_priv->backlight_enabled) {
1700     + dev_priv->backlight_level = intel_panel_get_backlight(dev);
1701     + dev_priv->backlight_enabled = false;
1702     + }
1703     +
1704     + intel_panel_set_backlight(dev, 0);
1705     +}
1706     +
1707     +void intel_panel_enable_backlight(struct drm_device *dev)
1708     +{
1709     + struct drm_i915_private *dev_priv = dev->dev_private;
1710     +
1711     + if (dev_priv->backlight_level == 0)
1712     + dev_priv->backlight_level = intel_panel_get_max_backlight(dev);
1713     +
1714     + intel_panel_set_backlight(dev, dev_priv->backlight_level);
1715     + dev_priv->backlight_enabled = true;
1716     +}
1717     +
1718     +void intel_panel_setup_backlight(struct drm_device *dev)
1719     +{
1720     + struct drm_i915_private *dev_priv = dev->dev_private;
1721     +
1722     + dev_priv->backlight_level = intel_panel_get_backlight(dev);
1723     + dev_priv->backlight_enabled = dev_priv->backlight_level != 0;
1724     +}
1725     diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
1726     index 6bc42fa..920ca27 100644
1727     --- a/drivers/gpu/drm/i915/intel_sdvo.c
1728     +++ b/drivers/gpu/drm/i915/intel_sdvo.c
1729     @@ -1024,9 +1024,13 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,
1730     if (!intel_sdvo_set_target_input(intel_sdvo))
1731     return;
1732    
1733     - if (intel_sdvo->has_hdmi_monitor &&
1734     - !intel_sdvo_set_avi_infoframe(intel_sdvo))
1735     - return;
1736     + if (intel_sdvo->has_hdmi_monitor) {
1737     + intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_HDMI);
1738     + intel_sdvo_set_colorimetry(intel_sdvo,
1739     + SDVO_COLORIMETRY_RGB256);
1740     + intel_sdvo_set_avi_infoframe(intel_sdvo);
1741     + } else
1742     + intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_DVI);
1743    
1744     if (intel_sdvo->is_tv &&
1745     !intel_sdvo_set_tv_format(intel_sdvo))
1746     @@ -1395,6 +1399,9 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
1747    
1748     intel_sdvo->attached_output = response;
1749    
1750     + intel_sdvo->has_hdmi_monitor = false;
1751     + intel_sdvo->has_hdmi_audio = false;
1752     +
1753     if ((intel_sdvo_connector->output_flag & response) == 0)
1754     ret = connector_status_disconnected;
1755     else if (response & SDVO_TMDS_MASK)
1756     @@ -1919,20 +1926,7 @@ intel_sdvo_select_i2c_bus(struct drm_i915_private *dev_priv,
1757     static bool
1758     intel_sdvo_is_hdmi_connector(struct intel_sdvo *intel_sdvo, int device)
1759     {
1760     - int is_hdmi;
1761     -
1762     - if (!intel_sdvo_check_supp_encode(intel_sdvo))
1763     - return false;
1764     -
1765     - if (!intel_sdvo_set_target_output(intel_sdvo,
1766     - device == 0 ? SDVO_OUTPUT_TMDS0 : SDVO_OUTPUT_TMDS1))
1767     - return false;
1768     -
1769     - is_hdmi = 0;
1770     - if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_ENCODE, &is_hdmi, 1))
1771     - return false;
1772     -
1773     - return !!is_hdmi;
1774     + return intel_sdvo_check_supp_encode(intel_sdvo);
1775     }
1776    
1777     static u8
1778     @@ -2034,12 +2028,7 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
1779     connector->connector_type = DRM_MODE_CONNECTOR_DVID;
1780    
1781     if (intel_sdvo_is_hdmi_connector(intel_sdvo, device)) {
1782     - /* enable hdmi encoding mode if supported */
1783     - intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_HDMI);
1784     - intel_sdvo_set_colorimetry(intel_sdvo,
1785     - SDVO_COLORIMETRY_RGB256);
1786     connector->connector_type = DRM_MODE_CONNECTOR_HDMIA;
1787     -
1788     intel_sdvo->is_hdmi = true;
1789     }
1790     intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) |
1791     diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
1792     index 9fbabaa..6b7fc4b 100644
1793     --- a/drivers/gpu/drm/radeon/atombios_crtc.c
1794     +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
1795     @@ -531,6 +531,7 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
1796     dp_clock = dig_connector->dp_clock;
1797     }
1798     }
1799     +/* this might work properly with the new pll algo */
1800     #if 0 /* doesn't work properly on some laptops */
1801     /* use recommended ref_div for ss */
1802     if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
1803     @@ -548,6 +549,11 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
1804     adjusted_clock = mode->clock * 2;
1805     if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT))
1806     pll->flags |= RADEON_PLL_PREFER_CLOSEST_LOWER;
1807     + /* rv515 needs more testing with this option */
1808     + if (rdev->family != CHIP_RV515) {
1809     + if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT))
1810     + pll->flags |= RADEON_PLL_IS_LCD;
1811     + }
1812     } else {
1813     if (encoder->encoder_type != DRM_MODE_ENCODER_DAC)
1814     pll->flags |= RADEON_PLL_NO_ODD_POST_DIV;
1815     @@ -915,8 +921,16 @@ static void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode
1816     /* adjust pixel clock as needed */
1817     adjusted_clock = atombios_adjust_pll(crtc, mode, pll, ss_enabled, &ss);
1818    
1819     - radeon_compute_pll(pll, adjusted_clock, &pll_clock, &fb_div, &frac_fb_div,
1820     - &ref_div, &post_div);
1821     + /* rv515 seems happier with the old algo */
1822     + if (rdev->family == CHIP_RV515)
1823     + radeon_compute_pll_legacy(pll, adjusted_clock, &pll_clock, &fb_div, &frac_fb_div,
1824     + &ref_div, &post_div);
1825     + else if (ASIC_IS_AVIVO(rdev))
1826     + radeon_compute_pll_avivo(pll, adjusted_clock, &pll_clock, &fb_div, &frac_fb_div,
1827     + &ref_div, &post_div);
1828     + else
1829     + radeon_compute_pll_legacy(pll, adjusted_clock, &pll_clock, &fb_div, &frac_fb_div,
1830     + &ref_div, &post_div);
1831    
1832     atombios_crtc_program_ss(crtc, ATOM_DISABLE, radeon_crtc->pll_id, &ss);
1833    
1834     diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
1835     index 4e7778d..695de9a 100644
1836     --- a/drivers/gpu/drm/radeon/atombios_dp.c
1837     +++ b/drivers/gpu/drm/radeon/atombios_dp.c
1838     @@ -187,9 +187,9 @@ static int dp_link_clock_for_mode_clock(u8 dpcd[DP_DPCD_SIZE], int mode_clock)
1839     int dp_mode_valid(u8 dpcd[DP_DPCD_SIZE], int mode_clock)
1840     {
1841     int lanes = dp_lanes_for_mode_clock(dpcd, mode_clock);
1842     - int bw = dp_lanes_for_mode_clock(dpcd, mode_clock);
1843     + int dp_clock = dp_link_clock_for_mode_clock(dpcd, mode_clock);
1844    
1845     - if ((lanes == 0) || (bw == 0))
1846     + if ((lanes == 0) || (dp_clock == 0))
1847     return MODE_CLOCK_HIGH;
1848    
1849     return MODE_OK;
1850     diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
1851     index 7b337c3..cff593d 100644
1852     --- a/drivers/gpu/drm/radeon/evergreen.c
1853     +++ b/drivers/gpu/drm/radeon/evergreen.c
1854     @@ -1135,7 +1135,7 @@ static int evergreen_cp_start(struct radeon_device *rdev)
1855     cp_me = 0xff;
1856     WREG32(CP_ME_CNTL, cp_me);
1857    
1858     - r = radeon_ring_lock(rdev, evergreen_default_size + 15);
1859     + r = radeon_ring_lock(rdev, evergreen_default_size + 19);
1860     if (r) {
1861     DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r);
1862     return r;
1863     @@ -1168,6 +1168,11 @@ static int evergreen_cp_start(struct radeon_device *rdev)
1864     radeon_ring_write(rdev, 0xffffffff);
1865     radeon_ring_write(rdev, 0xffffffff);
1866    
1867     + radeon_ring_write(rdev, 0xc0026900);
1868     + radeon_ring_write(rdev, 0x00000316);
1869     + radeon_ring_write(rdev, 0x0000000e); /* VGT_VERTEX_REUSE_BLOCK_CNTL */
1870     + radeon_ring_write(rdev, 0x00000010); /* */
1871     +
1872     radeon_ring_unlock_commit(rdev);
1873    
1874     return 0;
1875     diff --git a/drivers/gpu/drm/radeon/evergreen_blit_kms.c b/drivers/gpu/drm/radeon/evergreen_blit_kms.c
1876     index e0e5901..a2cfead 100644
1877     --- a/drivers/gpu/drm/radeon/evergreen_blit_kms.c
1878     +++ b/drivers/gpu/drm/radeon/evergreen_blit_kms.c
1879     @@ -230,7 +230,7 @@ draw_auto(struct radeon_device *rdev)
1880    
1881     }
1882    
1883     -/* emits 30 */
1884     +/* emits 34 */
1885     static void
1886     set_default_state(struct radeon_device *rdev)
1887     {
1888     @@ -243,6 +243,8 @@ set_default_state(struct radeon_device *rdev)
1889     int num_hs_threads, num_ls_threads;
1890     int num_ps_stack_entries, num_vs_stack_entries, num_gs_stack_entries, num_es_stack_entries;
1891     int num_hs_stack_entries, num_ls_stack_entries;
1892     + u64 gpu_addr;
1893     + int dwords;
1894    
1895     switch (rdev->family) {
1896     case CHIP_CEDAR:
1897     @@ -409,6 +411,14 @@ set_default_state(struct radeon_device *rdev)
1898     radeon_ring_write(rdev, 0x00000000);
1899     radeon_ring_write(rdev, 0x00000000);
1900    
1901     + /* emit an IB pointing at default state */
1902     + dwords = ALIGN(rdev->r600_blit.state_len, 0x10);
1903     + gpu_addr = rdev->r600_blit.shader_gpu_addr + rdev->r600_blit.state_offset;
1904     + radeon_ring_write(rdev, PACKET3(PACKET3_INDIRECT_BUFFER, 2));
1905     + radeon_ring_write(rdev, gpu_addr & 0xFFFFFFFC);
1906     + radeon_ring_write(rdev, upper_32_bits(gpu_addr) & 0xFF);
1907     + radeon_ring_write(rdev, dwords);
1908     +
1909     }
1910    
1911     static inline uint32_t i2f(uint32_t input)
1912     @@ -439,8 +449,10 @@ static inline uint32_t i2f(uint32_t input)
1913     int evergreen_blit_init(struct radeon_device *rdev)
1914     {
1915     u32 obj_size;
1916     - int r;
1917     + int r, dwords;
1918     void *ptr;
1919     + u32 packet2s[16];
1920     + int num_packet2s = 0;
1921    
1922     /* pin copy shader into vram if already initialized */
1923     if (rdev->r600_blit.shader_obj)
1924     @@ -448,8 +460,17 @@ int evergreen_blit_init(struct radeon_device *rdev)
1925    
1926     mutex_init(&rdev->r600_blit.mutex);
1927     rdev->r600_blit.state_offset = 0;
1928     - rdev->r600_blit.state_len = 0;
1929     - obj_size = 0;
1930     +
1931     + rdev->r600_blit.state_len = evergreen_default_size;
1932     +
1933     + dwords = rdev->r600_blit.state_len;
1934     + while (dwords & 0xf) {
1935     + packet2s[num_packet2s++] = PACKET2(0);
1936     + dwords++;
1937     + }
1938     +
1939     + obj_size = dwords * 4;
1940     + obj_size = ALIGN(obj_size, 256);
1941    
1942     rdev->r600_blit.vs_offset = obj_size;
1943     obj_size += evergreen_vs_size * 4;
1944     @@ -479,6 +500,12 @@ int evergreen_blit_init(struct radeon_device *rdev)
1945     return r;
1946     }
1947    
1948     + memcpy_toio(ptr + rdev->r600_blit.state_offset,
1949     + evergreen_default_state, rdev->r600_blit.state_len * 4);
1950     +
1951     + if (num_packet2s)
1952     + memcpy_toio(ptr + rdev->r600_blit.state_offset + (rdev->r600_blit.state_len * 4),
1953     + packet2s, num_packet2s * 4);
1954     memcpy(ptr + rdev->r600_blit.vs_offset, evergreen_vs, evergreen_vs_size * 4);
1955     memcpy(ptr + rdev->r600_blit.ps_offset, evergreen_ps, evergreen_ps_size * 4);
1956     radeon_bo_kunmap(rdev->r600_blit.shader_obj);
1957     @@ -564,7 +591,7 @@ int evergreen_blit_prepare_copy(struct radeon_device *rdev, int size_bytes)
1958     /* calculate number of loops correctly */
1959     ring_size = num_loops * dwords_per_loop;
1960     /* set default + shaders */
1961     - ring_size += 46; /* shaders + def state */
1962     + ring_size += 50; /* shaders + def state */
1963     ring_size += 10; /* fence emit for VB IB */
1964     ring_size += 5; /* done copy */
1965     ring_size += 10; /* fence emit for done copy */
1966     @@ -572,7 +599,7 @@ int evergreen_blit_prepare_copy(struct radeon_device *rdev, int size_bytes)
1967     if (r)
1968     return r;
1969    
1970     - set_default_state(rdev); /* 30 */
1971     + set_default_state(rdev); /* 34 */
1972     set_shaders(rdev); /* 16 */
1973     return 0;
1974     }
1975     diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
1976     index bc5a2c3..57b9de3 100644
1977     --- a/drivers/gpu/drm/radeon/radeon_atombios.c
1978     +++ b/drivers/gpu/drm/radeon/radeon_atombios.c
1979     @@ -313,7 +313,6 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,
1980     uint16_t *line_mux,
1981     struct radeon_hpd *hpd)
1982     {
1983     - struct radeon_device *rdev = dev->dev_private;
1984    
1985     /* Asus M2A-VM HDMI board lists the DVI port as HDMI */
1986     if ((dev->pdev->device == 0x791e) &&
1987     @@ -388,6 +387,13 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,
1988     *line_mux = 0x90;
1989     }
1990    
1991     + /* mac rv630, rv730, others */
1992     + if ((supported_device == ATOM_DEVICE_TV1_SUPPORT) &&
1993     + (*connector_type == DRM_MODE_CONNECTOR_DVII)) {
1994     + *connector_type = DRM_MODE_CONNECTOR_9PinDIN;
1995     + *line_mux = CONNECTOR_7PIN_DIN_ENUM_ID1;
1996     + }
1997     +
1998     /* ASUS HD 3600 XT board lists the DVI port as HDMI */
1999     if ((dev->pdev->device == 0x9598) &&
2000     (dev->pdev->subsystem_vendor == 0x1043) &&
2001     @@ -425,21 +431,23 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,
2002     }
2003     }
2004    
2005     - /* Acer laptop reports DVI-D as DVI-I and hpd pins reversed */
2006     + /* Acer laptop (Acer TravelMate 5730G) has an HDMI port
2007     + * on the laptop and a DVI port on the docking station and
2008     + * both share the same encoder, hpd pin, and ddc line.
2009     + * So while the bios table is technically correct,
2010     + * we drop the DVI port here since xrandr has no concept of
2011     + * encoders and will try and drive both connectors
2012     + * with different crtcs which isn't possible on the hardware
2013     + * side and leaves no crtcs for LVDS or VGA.
2014     + */
2015     if ((dev->pdev->device == 0x95c4) &&
2016     (dev->pdev->subsystem_vendor == 0x1025) &&
2017     (dev->pdev->subsystem_device == 0x013c)) {
2018     - struct radeon_gpio_rec gpio;
2019     -
2020     if ((*connector_type == DRM_MODE_CONNECTOR_DVII) &&
2021     (supported_device == ATOM_DEVICE_DFP1_SUPPORT)) {
2022     - gpio = radeon_lookup_gpio(rdev, 6);
2023     - *hpd = radeon_atom_get_hpd_info_from_gpio(rdev, &gpio);
2024     + /* actually it's a DVI-D port not DVI-I */
2025     *connector_type = DRM_MODE_CONNECTOR_DVID;
2026     - } else if ((*connector_type == DRM_MODE_CONNECTOR_HDMIA) &&
2027     - (supported_device == ATOM_DEVICE_DFP1_SUPPORT)) {
2028     - gpio = radeon_lookup_gpio(rdev, 7);
2029     - *hpd = radeon_atom_get_hpd_info_from_gpio(rdev, &gpio);
2030     + return false;
2031     }
2032     }
2033    
2034     @@ -1128,16 +1136,6 @@ bool radeon_atom_get_clock_info(struct drm_device *dev)
2035     p1pll->pll_out_min = 64800;
2036     else
2037     p1pll->pll_out_min = 20000;
2038     - } else if (p1pll->pll_out_min > 64800) {
2039     - /* Limiting the pll output range is a good thing generally as
2040     - * it limits the number of possible pll combinations for a given
2041     - * frequency presumably to the ones that work best on each card.
2042     - * However, certain duallink DVI monitors seem to like
2043     - * pll combinations that would be limited by this at least on
2044     - * pre-DCE 3.0 r6xx hardware. This might need to be adjusted per
2045     - * family.
2046     - */
2047     - p1pll->pll_out_min = 64800;
2048     }
2049    
2050     p1pll->pll_in_min =
2051     @@ -2359,7 +2357,7 @@ void radeon_atom_initialize_bios_scratch_regs(struct drm_device *dev)
2052     bios_2_scratch &= ~ATOM_S2_VRI_BRIGHT_ENABLE;
2053    
2054     /* tell the bios not to handle mode switching */
2055     - bios_6_scratch |= (ATOM_S6_ACC_BLOCK_DISPLAY_SWITCH | ATOM_S6_ACC_MODE);
2056     + bios_6_scratch |= ATOM_S6_ACC_BLOCK_DISPLAY_SWITCH;
2057    
2058     if (rdev->family >= CHIP_R600) {
2059     WREG32(R600_BIOS_2_SCRATCH, bios_2_scratch);
2060     @@ -2410,10 +2408,13 @@ void radeon_atom_output_lock(struct drm_encoder *encoder, bool lock)
2061     else
2062     bios_6_scratch = RREG32(RADEON_BIOS_6_SCRATCH);
2063    
2064     - if (lock)
2065     + if (lock) {
2066     bios_6_scratch |= ATOM_S6_CRITICAL_STATE;
2067     - else
2068     + bios_6_scratch &= ~ATOM_S6_ACC_MODE;
2069     + } else {
2070     bios_6_scratch &= ~ATOM_S6_CRITICAL_STATE;
2071     + bios_6_scratch |= ATOM_S6_ACC_MODE;
2072     + }
2073    
2074     if (rdev->family >= CHIP_R600)
2075     WREG32(R600_BIOS_6_SCRATCH, bios_6_scratch);
2076     diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
2077     index 1df4dc6..a26a70d 100644
2078     --- a/drivers/gpu/drm/radeon/radeon_display.c
2079     +++ b/drivers/gpu/drm/radeon/radeon_display.c
2080     @@ -448,6 +448,115 @@ static int radeon_ddc_dump(struct drm_connector *connector)
2081     return ret;
2082     }
2083    
2084     +/* avivo */
2085     +static void avivo_get_fb_div(struct radeon_pll *pll,
2086     + u32 target_clock,
2087     + u32 post_div,
2088     + u32 ref_div,
2089     + u32 *fb_div,
2090     + u32 *frac_fb_div)
2091     +{
2092     + u32 tmp = post_div * ref_div;
2093     +
2094     + tmp *= target_clock;
2095     + *fb_div = tmp / pll->reference_freq;
2096     + *frac_fb_div = tmp % pll->reference_freq;
2097     +}
2098     +
2099     +static u32 avivo_get_post_div(struct radeon_pll *pll,
2100     + u32 target_clock)
2101     +{
2102     + u32 vco, post_div, tmp;
2103     +
2104     + if (pll->flags & RADEON_PLL_USE_POST_DIV)
2105     + return pll->post_div;
2106     +
2107     + if (pll->flags & RADEON_PLL_PREFER_MINM_OVER_MAXP) {
2108     + if (pll->flags & RADEON_PLL_IS_LCD)
2109     + vco = pll->lcd_pll_out_min;
2110     + else
2111     + vco = pll->pll_out_min;
2112     + } else {
2113     + if (pll->flags & RADEON_PLL_IS_LCD)
2114     + vco = pll->lcd_pll_out_max;
2115     + else
2116     + vco = pll->pll_out_max;
2117     + }
2118     +
2119     + post_div = vco / target_clock;
2120     + tmp = vco % target_clock;
2121     +
2122     + if (pll->flags & RADEON_PLL_PREFER_MINM_OVER_MAXP) {
2123     + if (tmp)
2124     + post_div++;
2125     + } else {
2126     + if (!tmp)
2127     + post_div--;
2128     + }
2129     +
2130     + return post_div;
2131     +}
2132     +
2133     +#define MAX_TOLERANCE 10
2134     +
2135     +void radeon_compute_pll_avivo(struct radeon_pll *pll,
2136     + u32 freq,
2137     + u32 *dot_clock_p,
2138     + u32 *fb_div_p,
2139     + u32 *frac_fb_div_p,
2140     + u32 *ref_div_p,
2141     + u32 *post_div_p)
2142     +{
2143     + u32 target_clock = freq / 10;
2144     + u32 post_div = avivo_get_post_div(pll, target_clock);
2145     + u32 ref_div = pll->min_ref_div;
2146     + u32 fb_div = 0, frac_fb_div = 0, tmp;
2147     +
2148     + if (pll->flags & RADEON_PLL_USE_REF_DIV)
2149     + ref_div = pll->reference_div;
2150     +
2151     + if (pll->flags & RADEON_PLL_USE_FRAC_FB_DIV) {
2152     + avivo_get_fb_div(pll, target_clock, post_div, ref_div, &fb_div, &frac_fb_div);
2153     + frac_fb_div = (100 * frac_fb_div) / pll->reference_freq;
2154     + if (frac_fb_div >= 5) {
2155     + frac_fb_div -= 5;
2156     + frac_fb_div = frac_fb_div / 10;
2157     + frac_fb_div++;
2158     + }
2159     + if (frac_fb_div >= 10) {
2160     + fb_div++;
2161     + frac_fb_div = 0;
2162     + }
2163     + } else {
2164     + while (ref_div <= pll->max_ref_div) {
2165     + avivo_get_fb_div(pll, target_clock, post_div, ref_div,
2166     + &fb_div, &frac_fb_div);
2167     + if (frac_fb_div >= (pll->reference_freq / 2))
2168     + fb_div++;
2169     + frac_fb_div = 0;
2170     + tmp = (pll->reference_freq * fb_div) / (post_div * ref_div);
2171     + tmp = (tmp * 10000) / target_clock;
2172     +
2173     + if (tmp > (10000 + MAX_TOLERANCE))
2174     + ref_div++;
2175     + else if (tmp >= (10000 - MAX_TOLERANCE))
2176     + break;
2177     + else
2178     + ref_div++;
2179     + }
2180     + }
2181     +
2182     + *dot_clock_p = ((pll->reference_freq * fb_div * 10) + (pll->reference_freq * frac_fb_div)) /
2183     + (ref_div * post_div * 10);
2184     + *fb_div_p = fb_div;
2185     + *frac_fb_div_p = frac_fb_div;
2186     + *ref_div_p = ref_div;
2187     + *post_div_p = post_div;
2188     + DRM_DEBUG_KMS("%d, pll dividers - fb: %d.%d ref: %d, post %d\n",
2189     + *dot_clock_p, fb_div, frac_fb_div, ref_div, post_div);
2190     +}
2191     +
2192     +/* pre-avivo */
2193     static inline uint32_t radeon_div(uint64_t n, uint32_t d)
2194     {
2195     uint64_t mod;
2196     @@ -458,13 +567,13 @@ static inline uint32_t radeon_div(uint64_t n, uint32_t d)
2197     return n;
2198     }
2199    
2200     -void radeon_compute_pll(struct radeon_pll *pll,
2201     - uint64_t freq,
2202     - uint32_t *dot_clock_p,
2203     - uint32_t *fb_div_p,
2204     - uint32_t *frac_fb_div_p,
2205     - uint32_t *ref_div_p,
2206     - uint32_t *post_div_p)
2207     +void radeon_compute_pll_legacy(struct radeon_pll *pll,
2208     + uint64_t freq,
2209     + uint32_t *dot_clock_p,
2210     + uint32_t *fb_div_p,
2211     + uint32_t *frac_fb_div_p,
2212     + uint32_t *ref_div_p,
2213     + uint32_t *post_div_p)
2214     {
2215     uint32_t min_ref_div = pll->min_ref_div;
2216     uint32_t max_ref_div = pll->max_ref_div;
2217     @@ -494,6 +603,9 @@ void radeon_compute_pll(struct radeon_pll *pll,
2218     pll_out_max = pll->pll_out_max;
2219     }
2220    
2221     + if (pll_out_min > 64800)
2222     + pll_out_min = 64800;
2223     +
2224     if (pll->flags & RADEON_PLL_USE_REF_DIV)
2225     min_ref_div = max_ref_div = pll->reference_div;
2226     else {
2227     @@ -517,7 +629,7 @@ void radeon_compute_pll(struct radeon_pll *pll,
2228     max_fractional_feed_div = pll->max_frac_feedback_div;
2229     }
2230    
2231     - for (post_div = max_post_div; post_div >= min_post_div; --post_div) {
2232     + for (post_div = min_post_div; post_div <= max_post_div; ++post_div) {
2233     uint32_t ref_div;
2234    
2235     if ((pll->flags & RADEON_PLL_NO_ODD_POST_DIV) && (post_div & 1))
2236     @@ -633,6 +745,10 @@ void radeon_compute_pll(struct radeon_pll *pll,
2237     *frac_fb_div_p = best_frac_feedback_div;
2238     *ref_div_p = best_ref_div;
2239     *post_div_p = best_post_div;
2240     + DRM_DEBUG_KMS("%d %d, pll dividers - fb: %d.%d ref: %d, post %d\n",
2241     + freq, best_freq / 1000, best_feedback_div, best_frac_feedback_div,
2242     + best_ref_div, best_post_div);
2243     +
2244     }
2245    
2246     static void radeon_user_framebuffer_destroy(struct drm_framebuffer *fb)
2247     diff --git a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
2248     index ace2e63..cf0638c 100644
2249     --- a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
2250     +++ b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
2251     @@ -778,9 +778,9 @@ static void radeon_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)
2252     DRM_DEBUG_KMS("\n");
2253    
2254     if (!use_bios_divs) {
2255     - radeon_compute_pll(pll, mode->clock,
2256     - &freq, &feedback_div, &frac_fb_div,
2257     - &reference_div, &post_divider);
2258     + radeon_compute_pll_legacy(pll, mode->clock,
2259     + &freq, &feedback_div, &frac_fb_div,
2260     + &reference_div, &post_divider);
2261    
2262     for (post_div = &post_divs[0]; post_div->divider; ++post_div) {
2263     if (post_div->divider == post_divider)
2264     diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
2265     index e301c6f..aa22570 100644
2266     --- a/drivers/gpu/drm/radeon/radeon_mode.h
2267     +++ b/drivers/gpu/drm/radeon/radeon_mode.h
2268     @@ -149,6 +149,7 @@ struct radeon_tmds_pll {
2269     #define RADEON_PLL_PREFER_CLOSEST_LOWER (1 << 11)
2270     #define RADEON_PLL_USE_POST_DIV (1 << 12)
2271     #define RADEON_PLL_IS_LCD (1 << 13)
2272     +#define RADEON_PLL_PREFER_MINM_OVER_MAXP (1 << 14)
2273    
2274     struct radeon_pll {
2275     /* reference frequency */
2276     @@ -510,13 +511,21 @@ extern bool radeon_atombios_get_asic_ss_info(struct radeon_device *rdev,
2277     struct radeon_atom_ss *ss,
2278     int id, u32 clock);
2279    
2280     -extern void radeon_compute_pll(struct radeon_pll *pll,
2281     - uint64_t freq,
2282     - uint32_t *dot_clock_p,
2283     - uint32_t *fb_div_p,
2284     - uint32_t *frac_fb_div_p,
2285     - uint32_t *ref_div_p,
2286     - uint32_t *post_div_p);
2287     +extern void radeon_compute_pll_legacy(struct radeon_pll *pll,
2288     + uint64_t freq,
2289     + uint32_t *dot_clock_p,
2290     + uint32_t *fb_div_p,
2291     + uint32_t *frac_fb_div_p,
2292     + uint32_t *ref_div_p,
2293     + uint32_t *post_div_p);
2294     +
2295     +extern void radeon_compute_pll_avivo(struct radeon_pll *pll,
2296     + u32 freq,
2297     + u32 *dot_clock_p,
2298     + u32 *fb_div_p,
2299     + u32 *frac_fb_div_p,
2300     + u32 *ref_div_p,
2301     + u32 *post_div_p);
2302    
2303     extern void radeon_setup_encoder_clones(struct drm_device *dev);
2304    
2305     diff --git a/drivers/gpu/vga/vgaarb.c b/drivers/gpu/vga/vgaarb.c
2306     index c380c65..ace2b16 100644
2307     --- a/drivers/gpu/vga/vgaarb.c
2308     +++ b/drivers/gpu/vga/vgaarb.c
2309     @@ -636,7 +636,7 @@ int vga_client_register(struct pci_dev *pdev, void *cookie,
2310     void (*irq_set_state)(void *cookie, bool state),
2311     unsigned int (*set_vga_decode)(void *cookie, bool decode))
2312     {
2313     - int ret = -1;
2314     + int ret = -ENODEV;
2315     struct vga_device *vgadev;
2316     unsigned long flags;
2317    
2318     diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
2319     index b6598aa..87a5fd51 100644
2320     --- a/drivers/hwmon/applesmc.c
2321     +++ b/drivers/hwmon/applesmc.c
2322     @@ -162,6 +162,10 @@ static const char *temperature_sensors_sets[][41] = {
2323     /* Set 22: MacBook Pro 7,1 */
2324     { "TB0T", "TB1T", "TB2T", "TC0D", "TC0P", "TN0D", "TN0P", "TN0S",
2325     "TN1D", "TN1F", "TN1G", "TN1S", "Th1H", "Ts0P", "Ts0S", NULL },
2326     +/* Set 23: MacBook Air 3,1 */
2327     + { "TB0T", "TB1T", "TB2T", "TC0D", "TC0E", "TC0P", "TC1E", "TCZ3",
2328     + "TCZ4", "TCZ5", "TG0E", "TG1E", "TG2E", "TGZ3", "TGZ4", "TGZ5",
2329     + "TH0F", "TH0O", "TM0P" },
2330     };
2331    
2332     /* List of keys used to read/write fan speeds */
2333     @@ -444,38 +448,22 @@ static int applesmc_read_motion_sensor(int index, s16* value)
2334     }
2335    
2336     /*
2337     - * applesmc_device_init - initialize the accelerometer. Returns zero on success
2338     - * and negative error code on failure. Can sleep.
2339     + * applesmc_device_init - initialize the accelerometer. Can sleep.
2340     */
2341     -static int applesmc_device_init(void)
2342     +static void applesmc_device_init(void)
2343     {
2344     - int total, ret = -ENXIO;
2345     + int total;
2346     u8 buffer[2];
2347    
2348     if (!applesmc_accelerometer)
2349     - return 0;
2350     + return;
2351    
2352     mutex_lock(&applesmc_lock);
2353    
2354     for (total = INIT_TIMEOUT_MSECS; total > 0; total -= INIT_WAIT_MSECS) {
2355     - if (debug)
2356     - printk(KERN_DEBUG "applesmc try %d\n", total);
2357     if (!applesmc_read_key(MOTION_SENSOR_KEY, buffer, 2) &&
2358     - (buffer[0] != 0x00 || buffer[1] != 0x00)) {
2359     - if (total == INIT_TIMEOUT_MSECS) {
2360     - printk(KERN_DEBUG "applesmc: device has"
2361     - " already been initialized"
2362     - " (0x%02x, 0x%02x).\n",
2363     - buffer[0], buffer[1]);
2364     - } else {
2365     - printk(KERN_DEBUG "applesmc: device"
2366     - " successfully initialized"
2367     - " (0x%02x, 0x%02x).\n",
2368     - buffer[0], buffer[1]);
2369     - }
2370     - ret = 0;
2371     + (buffer[0] != 0x00 || buffer[1] != 0x00))
2372     goto out;
2373     - }
2374     buffer[0] = 0xe0;
2375     buffer[1] = 0x00;
2376     applesmc_write_key(MOTION_SENSOR_KEY, buffer, 2);
2377     @@ -486,7 +474,6 @@ static int applesmc_device_init(void)
2378    
2379     out:
2380     mutex_unlock(&applesmc_lock);
2381     - return ret;
2382     }
2383    
2384     /*
2385     @@ -512,13 +499,8 @@ static int applesmc_get_fan_count(void)
2386     /* Device model stuff */
2387     static int applesmc_probe(struct platform_device *dev)
2388     {
2389     - int ret;
2390     -
2391     - ret = applesmc_device_init();
2392     - if (ret)
2393     - return ret;
2394     + applesmc_device_init();
2395    
2396     - printk(KERN_INFO "applesmc: device successfully initialized.\n");
2397     return 0;
2398     }
2399    
2400     @@ -535,9 +517,7 @@ static int applesmc_pm_resume(struct device *dev)
2401     /* Reinitialize device on resume from hibernation */
2402     static int applesmc_pm_restore(struct device *dev)
2403     {
2404     - int ret = applesmc_device_init();
2405     - if (ret)
2406     - return ret;
2407     + applesmc_device_init();
2408     return applesmc_pm_resume(dev);
2409     }
2410    
2411     @@ -1524,11 +1504,17 @@ static __initdata struct dmi_match_data applesmc_dmi_data[] = {
2412     { .accelerometer = 1, .light = 1, .temperature_set = 21 },
2413     /* MacBook Pro 7,1: accelerometer, backlight and temperature set 22 */
2414     { .accelerometer = 1, .light = 1, .temperature_set = 22 },
2415     +/* MacBook Air 3,1: accelerometer, backlight and temperature set 23 */
2416     + { .accelerometer = 0, .light = 0, .temperature_set = 23 },
2417     };
2418    
2419     /* Note that DMI_MATCH(...,"MacBook") will match "MacBookPro1,1".
2420     * So we need to put "Apple MacBook Pro" before "Apple MacBook". */
2421     static __initdata struct dmi_system_id applesmc_whitelist[] = {
2422     + { applesmc_dmi_match, "Apple MacBook Air 3", {
2423     + DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
2424     + DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir3") },
2425     + &applesmc_dmi_data[23]},
2426     { applesmc_dmi_match, "Apple MacBook Air 2", {
2427     DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
2428     DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir2") },
2429     diff --git a/drivers/hwmon/lm63.c b/drivers/hwmon/lm63.c
2430     index 776aeb3..508cb29 100644
2431     --- a/drivers/hwmon/lm63.c
2432     +++ b/drivers/hwmon/lm63.c
2433     @@ -98,6 +98,9 @@ static const unsigned short normal_i2c[] = { 0x18, 0x4c, 0x4e, I2C_CLIENT_END };
2434     * value, it uses signed 8-bit values with LSB = 1 degree Celsius.
2435     * For remote temperature, low and high limits, it uses signed 11-bit values
2436     * with LSB = 0.125 degree Celsius, left-justified in 16-bit registers.
2437     + * For LM64 the actual remote diode temperature is 16 degree Celsius higher
2438     + * than the register reading. Remote temperature setpoints have to be
2439     + * adapted accordingly.
2440     */
2441    
2442     #define FAN_FROM_REG(reg) ((reg) == 0xFFFC || (reg) == 0 ? 0 : \
2443     @@ -165,6 +168,8 @@ struct lm63_data {
2444     struct mutex update_lock;
2445     char valid; /* zero until following fields are valid */
2446     unsigned long last_updated; /* in jiffies */
2447     + int kind;
2448     + int temp2_offset;
2449    
2450     /* registers values */
2451     u8 config, config_fan;
2452     @@ -247,16 +252,34 @@ static ssize_t show_pwm1_enable(struct device *dev, struct device_attribute *dum
2453     return sprintf(buf, "%d\n", data->config_fan & 0x20 ? 1 : 2);
2454     }
2455    
2456     -static ssize_t show_temp8(struct device *dev, struct device_attribute *devattr,
2457     - char *buf)
2458     +/*
2459     + * There are 8bit registers for both local(temp1) and remote(temp2) sensor.
2460     + * For remote sensor registers temp2_offset has to be considered,
2461     + * for local sensor it must not.
2462     + * So we need separate 8bit accessors for local and remote sensor.
2463     + */
2464     +static ssize_t show_local_temp8(struct device *dev,
2465     + struct device_attribute *devattr,
2466     + char *buf)
2467     {
2468     struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
2469     struct lm63_data *data = lm63_update_device(dev);
2470     return sprintf(buf, "%d\n", TEMP8_FROM_REG(data->temp8[attr->index]));
2471     }
2472    
2473     -static ssize_t set_temp8(struct device *dev, struct device_attribute *dummy,
2474     - const char *buf, size_t count)
2475     +static ssize_t show_remote_temp8(struct device *dev,
2476     + struct device_attribute *devattr,
2477     + char *buf)
2478     +{
2479     + struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
2480     + struct lm63_data *data = lm63_update_device(dev);
2481     + return sprintf(buf, "%d\n", TEMP8_FROM_REG(data->temp8[attr->index])
2482     + + data->temp2_offset);
2483     +}
2484     +
2485     +static ssize_t set_local_temp8(struct device *dev,
2486     + struct device_attribute *dummy,
2487     + const char *buf, size_t count)
2488     {
2489     struct i2c_client *client = to_i2c_client(dev);
2490     struct lm63_data *data = i2c_get_clientdata(client);
2491     @@ -274,7 +297,8 @@ static ssize_t show_temp11(struct device *dev, struct device_attribute *devattr,
2492     {
2493     struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
2494     struct lm63_data *data = lm63_update_device(dev);
2495     - return sprintf(buf, "%d\n", TEMP11_FROM_REG(data->temp11[attr->index]));
2496     + return sprintf(buf, "%d\n", TEMP11_FROM_REG(data->temp11[attr->index])
2497     + + data->temp2_offset);
2498     }
2499    
2500     static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr,
2501     @@ -294,7 +318,7 @@ static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr,
2502     int nr = attr->index;
2503    
2504     mutex_lock(&data->update_lock);
2505     - data->temp11[nr] = TEMP11_TO_REG(val);
2506     + data->temp11[nr] = TEMP11_TO_REG(val - data->temp2_offset);
2507     i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2],
2508     data->temp11[nr] >> 8);
2509     i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1],
2510     @@ -310,6 +334,7 @@ static ssize_t show_temp2_crit_hyst(struct device *dev, struct device_attribute
2511     {
2512     struct lm63_data *data = lm63_update_device(dev);
2513     return sprintf(buf, "%d\n", TEMP8_FROM_REG(data->temp8[2])
2514     + + data->temp2_offset
2515     - TEMP8_FROM_REG(data->temp2_crit_hyst));
2516     }
2517    
2518     @@ -324,7 +349,7 @@ static ssize_t set_temp2_crit_hyst(struct device *dev, struct device_attribute *
2519     long hyst;
2520    
2521     mutex_lock(&data->update_lock);
2522     - hyst = TEMP8_FROM_REG(data->temp8[2]) - val;
2523     + hyst = TEMP8_FROM_REG(data->temp8[2]) + data->temp2_offset - val;
2524     i2c_smbus_write_byte_data(client, LM63_REG_REMOTE_TCRIT_HYST,
2525     HYST_TO_REG(hyst));
2526     mutex_unlock(&data->update_lock);
2527     @@ -355,16 +380,21 @@ static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan,
2528     static DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm1, set_pwm1);
2529     static DEVICE_ATTR(pwm1_enable, S_IRUGO, show_pwm1_enable, NULL);
2530    
2531     -static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp8, NULL, 0);
2532     -static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp8,
2533     - set_temp8, 1);
2534     +static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_local_temp8, NULL, 0);
2535     +static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_local_temp8,
2536     + set_local_temp8, 1);
2537    
2538     static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp11, NULL, 0);
2539     static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp11,
2540     set_temp11, 1);
2541     static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp11,
2542     set_temp11, 2);
2543     -static SENSOR_DEVICE_ATTR(temp2_crit, S_IRUGO, show_temp8, NULL, 2);
2544     +/*
2545     + * On LM63, temp2_crit can be set only once, which should be job
2546     + * of the bootloader.
2547     + */
2548     +static SENSOR_DEVICE_ATTR(temp2_crit, S_IRUGO, show_remote_temp8,
2549     + NULL, 2);
2550     static DEVICE_ATTR(temp2_crit_hyst, S_IWUSR | S_IRUGO, show_temp2_crit_hyst,
2551     set_temp2_crit_hyst);
2552    
2553     @@ -479,7 +509,12 @@ static int lm63_probe(struct i2c_client *new_client,
2554     data->valid = 0;
2555     mutex_init(&data->update_lock);
2556    
2557     - /* Initialize the LM63 chip */
2558     + /* Set the device type */
2559     + data->kind = id->driver_data;
2560     + if (data->kind == lm64)
2561     + data->temp2_offset = 16000;
2562     +
2563     + /* Initialize chip */
2564     lm63_init_client(new_client);
2565    
2566     /* Register sysfs hooks */
2567     diff --git a/drivers/hwmon/via686a.c b/drivers/hwmon/via686a.c
2568     index f397ce7..b2074e3 100644
2569     --- a/drivers/hwmon/via686a.c
2570     +++ b/drivers/hwmon/via686a.c
2571     @@ -687,6 +687,13 @@ static int __devexit via686a_remove(struct platform_device *pdev)
2572     return 0;
2573     }
2574    
2575     +static void via686a_update_fan_div(struct via686a_data *data)
2576     +{
2577     + int reg = via686a_read_value(data, VIA686A_REG_FANDIV);
2578     + data->fan_div[0] = (reg >> 4) & 0x03;
2579     + data->fan_div[1] = reg >> 6;
2580     +}
2581     +
2582     static void __devinit via686a_init_device(struct via686a_data *data)
2583     {
2584     u8 reg;
2585     @@ -700,6 +707,9 @@ static void __devinit via686a_init_device(struct via686a_data *data)
2586     via686a_write_value(data, VIA686A_REG_TEMP_MODE,
2587     (reg & ~VIA686A_TEMP_MODE_MASK)
2588     | VIA686A_TEMP_MODE_CONTINUOUS);
2589     +
2590     + /* Pre-read fan clock divisor values */
2591     + via686a_update_fan_div(data);
2592     }
2593    
2594     static struct via686a_data *via686a_update_device(struct device *dev)
2595     @@ -751,9 +761,7 @@ static struct via686a_data *via686a_update_device(struct device *dev)
2596     (via686a_read_value(data, VIA686A_REG_TEMP_LOW23) &
2597     0xc0) >> 6;
2598    
2599     - i = via686a_read_value(data, VIA686A_REG_FANDIV);
2600     - data->fan_div[0] = (i >> 4) & 0x03;
2601     - data->fan_div[1] = i >> 6;
2602     + via686a_update_fan_div(data);
2603     data->alarms =
2604     via686a_read_value(data,
2605     VIA686A_REG_ALARM1) |
2606     diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
2607     index 6b4cc56..44bb9c2 100644
2608     --- a/drivers/i2c/i2c-core.c
2609     +++ b/drivers/i2c/i2c-core.c
2610     @@ -1021,6 +1021,14 @@ static int i2c_do_del_adapter(struct i2c_driver *driver,
2611     static int __unregister_client(struct device *dev, void *dummy)
2612     {
2613     struct i2c_client *client = i2c_verify_client(dev);
2614     + if (client && strcmp(client->name, "dummy"))
2615     + i2c_unregister_device(client);
2616     + return 0;
2617     +}
2618     +
2619     +static int __unregister_dummy(struct device *dev, void *dummy)
2620     +{
2621     + struct i2c_client *client = i2c_verify_client(dev);
2622     if (client)
2623     i2c_unregister_device(client);
2624     return 0;
2625     @@ -1075,8 +1083,12 @@ int i2c_del_adapter(struct i2c_adapter *adap)
2626     mutex_unlock(&adap->userspace_clients_lock);
2627    
2628     /* Detach any active clients. This can't fail, thus we do not
2629     - checking the returned value. */
2630     + * check the returned value. This is a two-pass process, because
2631     + * we can't remove the dummy devices during the first pass: they
2632     + * could have been instantiated by real devices wishing to clean
2633     + * them up properly, so we give them a chance to do that first. */
2634     res = device_for_each_child(&adap->dev, NULL, __unregister_client);
2635     + res = device_for_each_child(&adap->dev, NULL, __unregister_dummy);
2636    
2637     #ifdef CONFIG_I2C_COMPAT
2638     class_compat_remove_link(i2c_adapter_compat_class, &adap->dev,
2639     diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
2640     index c131d58..a1e141e 100644
2641     --- a/drivers/idle/intel_idle.c
2642     +++ b/drivers/idle/intel_idle.c
2643     @@ -59,6 +59,8 @@
2644     #include <linux/hrtimer.h> /* ktime_get_real() */
2645     #include <trace/events/power.h>
2646     #include <linux/sched.h>
2647     +#include <linux/notifier.h>
2648     +#include <linux/cpu.h>
2649     #include <asm/mwait.h>
2650    
2651     #define INTEL_IDLE_VERSION "0.4"
2652     @@ -73,6 +75,7 @@ static int max_cstate = MWAIT_MAX_NUM_CSTATES - 1;
2653    
2654     static unsigned int mwait_substates;
2655    
2656     +#define LAPIC_TIMER_ALWAYS_RELIABLE 0xFFFFFFFF
2657     /* Reliable LAPIC Timer States, bit 1 for C1 etc. */
2658     static unsigned int lapic_timer_reliable_states = (1 << 1); /* Default to only C1 */
2659    
2660     @@ -244,6 +247,35 @@ static int intel_idle(struct cpuidle_device *dev, struct cpuidle_state *state)
2661     return usec_delta;
2662     }
2663    
2664     +static void __setup_broadcast_timer(void *arg)
2665     +{
2666     + unsigned long reason = (unsigned long)arg;
2667     + int cpu = smp_processor_id();
2668     +
2669     + reason = reason ?
2670     + CLOCK_EVT_NOTIFY_BROADCAST_ON : CLOCK_EVT_NOTIFY_BROADCAST_OFF;
2671     +
2672     + clockevents_notify(reason, &cpu);
2673     +}
2674     +
2675     +static int setup_broadcast_cpuhp_notify(struct notifier_block *n,
2676     + unsigned long action, void *hcpu)
2677     +{
2678     + int hotcpu = (unsigned long)hcpu;
2679     +
2680     + switch (action & 0xf) {
2681     + case CPU_ONLINE:
2682     + smp_call_function_single(hotcpu, __setup_broadcast_timer,
2683     + (void *)true, 1);
2684     + break;
2685     + }
2686     + return NOTIFY_OK;
2687     +}
2688     +
2689     +static struct notifier_block setup_broadcast_notifier = {
2690     + .notifier_call = setup_broadcast_cpuhp_notify,
2691     +};
2692     +
2693     /*
2694     * intel_idle_probe()
2695     */
2696     @@ -306,7 +338,11 @@ static int intel_idle_probe(void)
2697     }
2698    
2699     if (boot_cpu_has(X86_FEATURE_ARAT)) /* Always Reliable APIC Timer */
2700     - lapic_timer_reliable_states = 0xFFFFFFFF;
2701     + lapic_timer_reliable_states = LAPIC_TIMER_ALWAYS_RELIABLE;
2702     + else {
2703     + smp_call_function(__setup_broadcast_timer, (void *)true, 1);
2704     + register_cpu_notifier(&setup_broadcast_notifier);
2705     + }
2706    
2707     pr_debug(PREFIX "v" INTEL_IDLE_VERSION
2708     " model 0x%X\n", boot_cpu_data.x86_model);
2709     @@ -429,6 +465,11 @@ static void __exit intel_idle_exit(void)
2710     intel_idle_cpuidle_devices_uninit();
2711     cpuidle_unregister_driver(&intel_idle_driver);
2712    
2713     + if (lapic_timer_reliable_states != LAPIC_TIMER_ALWAYS_RELIABLE) {
2714     + smp_call_function(__setup_broadcast_timer, (void *)false, 1);
2715     + unregister_cpu_notifier(&setup_broadcast_notifier);
2716     + }
2717     +
2718     return;
2719     }
2720    
2721     diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
2722     index 0dc62b1..8b00e6c 100644
2723     --- a/drivers/infiniband/hw/cxgb4/cm.c
2724     +++ b/drivers/infiniband/hw/cxgb4/cm.c
2725     @@ -380,7 +380,7 @@ static void send_flowc(struct c4iw_ep *ep, struct sk_buff *skb)
2726     16)) | FW_WR_FLOWID(ep->hwtid));
2727    
2728     flowc->mnemval[0].mnemonic = FW_FLOWC_MNEM_PFNVFN;
2729     - flowc->mnemval[0].val = cpu_to_be32(0);
2730     + flowc->mnemval[0].val = cpu_to_be32(PCI_FUNC(ep->com.dev->rdev.lldi.pdev->devfn) << 8);
2731     flowc->mnemval[1].mnemonic = FW_FLOWC_MNEM_CH;
2732     flowc->mnemval[1].val = cpu_to_be32(ep->tx_chan);
2733     flowc->mnemval[2].mnemonic = FW_FLOWC_MNEM_PORT;
2734     diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c
2735     index 057cb25..8ae09e7 100644
2736     --- a/drivers/infiniband/hw/cxgb4/qp.c
2737     +++ b/drivers/infiniband/hw/cxgb4/qp.c
2738     @@ -220,7 +220,7 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
2739     V_FW_RI_RES_WR_DCAEN(0) |
2740     V_FW_RI_RES_WR_DCACPU(0) |
2741     V_FW_RI_RES_WR_FBMIN(2) |
2742     - V_FW_RI_RES_WR_FBMAX(3) |
2743     + V_FW_RI_RES_WR_FBMAX(2) |
2744     V_FW_RI_RES_WR_CIDXFTHRESHO(0) |
2745     V_FW_RI_RES_WR_CIDXFTHRESH(0) |
2746     V_FW_RI_RES_WR_EQSIZE(eqsize));
2747     @@ -243,7 +243,7 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
2748     V_FW_RI_RES_WR_DCAEN(0) |
2749     V_FW_RI_RES_WR_DCACPU(0) |
2750     V_FW_RI_RES_WR_FBMIN(2) |
2751     - V_FW_RI_RES_WR_FBMAX(3) |
2752     + V_FW_RI_RES_WR_FBMAX(2) |
2753     V_FW_RI_RES_WR_CIDXFTHRESHO(0) |
2754     V_FW_RI_RES_WR_CIDXFTHRESH(0) |
2755     V_FW_RI_RES_WR_EQSIZE(eqsize));
2756     @@ -1029,7 +1029,6 @@ static int rdma_fini(struct c4iw_dev *rhp, struct c4iw_qp *qhp,
2757     wqe->cookie = (unsigned long) &ep->com.wr_wait;
2758    
2759     wqe->u.fini.type = FW_RI_TYPE_FINI;
2760     - c4iw_init_wr_wait(&ep->com.wr_wait);
2761     ret = c4iw_ofld_send(&rhp->rdev, skb);
2762     if (ret)
2763     goto out;
2764     @@ -1125,7 +1124,6 @@ static int rdma_init(struct c4iw_dev *rhp, struct c4iw_qp *qhp)
2765     if (qhp->attr.mpa_attr.initiator)
2766     build_rtr_msg(qhp->attr.mpa_attr.p2p_type, &wqe->u.init);
2767    
2768     - c4iw_init_wr_wait(&qhp->ep->com.wr_wait);
2769     ret = c4iw_ofld_send(&rhp->rdev, skb);
2770     if (ret)
2771     goto out;
2772     diff --git a/drivers/input/input.c b/drivers/input/input.c
2773     index db409d6..e8a8802 100644
2774     --- a/drivers/input/input.c
2775     +++ b/drivers/input/input.c
2776     @@ -73,7 +73,6 @@ static int input_defuzz_abs_event(int value, int old_val, int fuzz)
2777     * dev->event_lock held and interrupts disabled.
2778     */
2779     static void input_pass_event(struct input_dev *dev,
2780     - struct input_handler *src_handler,
2781     unsigned int type, unsigned int code, int value)
2782     {
2783     struct input_handler *handler;
2784     @@ -92,15 +91,6 @@ static void input_pass_event(struct input_dev *dev,
2785     continue;
2786    
2787     handler = handle->handler;
2788     -
2789     - /*
2790     - * If this is the handler that injected this
2791     - * particular event we want to skip it to avoid
2792     - * filters firing again and again.
2793     - */
2794     - if (handler == src_handler)
2795     - continue;
2796     -
2797     if (!handler->filter) {
2798     if (filtered)
2799     break;
2800     @@ -130,7 +120,7 @@ static void input_repeat_key(unsigned long data)
2801     if (test_bit(dev->repeat_key, dev->key) &&
2802     is_event_supported(dev->repeat_key, dev->keybit, KEY_MAX)) {
2803    
2804     - input_pass_event(dev, NULL, EV_KEY, dev->repeat_key, 2);
2805     + input_pass_event(dev, EV_KEY, dev->repeat_key, 2);
2806    
2807     if (dev->sync) {
2808     /*
2809     @@ -139,7 +129,7 @@ static void input_repeat_key(unsigned long data)
2810     * Otherwise assume that the driver will send
2811     * SYN_REPORT once it's done.
2812     */
2813     - input_pass_event(dev, NULL, EV_SYN, SYN_REPORT, 1);
2814     + input_pass_event(dev, EV_SYN, SYN_REPORT, 1);
2815     }
2816    
2817     if (dev->rep[REP_PERIOD])
2818     @@ -172,7 +162,6 @@ static void input_stop_autorepeat(struct input_dev *dev)
2819     #define INPUT_PASS_TO_ALL (INPUT_PASS_TO_HANDLERS | INPUT_PASS_TO_DEVICE)
2820    
2821     static int input_handle_abs_event(struct input_dev *dev,
2822     - struct input_handler *src_handler,
2823     unsigned int code, int *pval)
2824     {
2825     bool is_mt_event;
2826     @@ -216,15 +205,13 @@ static int input_handle_abs_event(struct input_dev *dev,
2827     /* Flush pending "slot" event */
2828     if (is_mt_event && dev->slot != input_abs_get_val(dev, ABS_MT_SLOT)) {
2829     input_abs_set_val(dev, ABS_MT_SLOT, dev->slot);
2830     - input_pass_event(dev, src_handler,
2831     - EV_ABS, ABS_MT_SLOT, dev->slot);
2832     + input_pass_event(dev, EV_ABS, ABS_MT_SLOT, dev->slot);
2833     }
2834    
2835     return INPUT_PASS_TO_HANDLERS;
2836     }
2837    
2838     static void input_handle_event(struct input_dev *dev,
2839     - struct input_handler *src_handler,
2840     unsigned int type, unsigned int code, int value)
2841     {
2842     int disposition = INPUT_IGNORE_EVENT;
2843     @@ -277,8 +264,7 @@ static void input_handle_event(struct input_dev *dev,
2844    
2845     case EV_ABS:
2846     if (is_event_supported(code, dev->absbit, ABS_MAX))
2847     - disposition = input_handle_abs_event(dev, src_handler,
2848     - code, &value);
2849     + disposition = input_handle_abs_event(dev, code, &value);
2850    
2851     break;
2852    
2853     @@ -336,7 +322,7 @@ static void input_handle_event(struct input_dev *dev,
2854     dev->event(dev, type, code, value);
2855    
2856     if (disposition & INPUT_PASS_TO_HANDLERS)
2857     - input_pass_event(dev, src_handler, type, code, value);
2858     + input_pass_event(dev, type, code, value);
2859     }
2860    
2861     /**
2862     @@ -365,7 +351,7 @@ void input_event(struct input_dev *dev,
2863    
2864     spin_lock_irqsave(&dev->event_lock, flags);
2865     add_input_randomness(type, code, value);
2866     - input_handle_event(dev, NULL, type, code, value);
2867     + input_handle_event(dev, type, code, value);
2868     spin_unlock_irqrestore(&dev->event_lock, flags);
2869     }
2870     }
2871     @@ -395,8 +381,7 @@ void input_inject_event(struct input_handle *handle,
2872     rcu_read_lock();
2873     grab = rcu_dereference(dev->grab);
2874     if (!grab || grab == handle)
2875     - input_handle_event(dev, handle->handler,
2876     - type, code, value);
2877     + input_handle_event(dev, type, code, value);
2878     rcu_read_unlock();
2879    
2880     spin_unlock_irqrestore(&dev->event_lock, flags);
2881     @@ -609,10 +594,10 @@ static void input_dev_release_keys(struct input_dev *dev)
2882     for (code = 0; code <= KEY_MAX; code++) {
2883     if (is_event_supported(code, dev->keybit, KEY_MAX) &&
2884     __test_and_clear_bit(code, dev->key)) {
2885     - input_pass_event(dev, NULL, EV_KEY, code, 0);
2886     + input_pass_event(dev, EV_KEY, code, 0);
2887     }
2888     }
2889     - input_pass_event(dev, NULL, EV_SYN, SYN_REPORT, 1);
2890     + input_pass_event(dev, EV_SYN, SYN_REPORT, 1);
2891     }
2892     }
2893    
2894     @@ -887,9 +872,9 @@ int input_set_keycode(struct input_dev *dev,
2895     !is_event_supported(old_keycode, dev->keybit, KEY_MAX) &&
2896     __test_and_clear_bit(old_keycode, dev->key)) {
2897    
2898     - input_pass_event(dev, NULL, EV_KEY, old_keycode, 0);
2899     + input_pass_event(dev, EV_KEY, old_keycode, 0);
2900     if (dev->sync)
2901     - input_pass_event(dev, NULL, EV_SYN, SYN_REPORT, 1);
2902     + input_pass_event(dev, EV_SYN, SYN_REPORT, 1);
2903     }
2904    
2905     out:
2906     diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
2907     index b952317..ee82851 100644
2908     --- a/drivers/input/mouse/bcm5974.c
2909     +++ b/drivers/input/mouse/bcm5974.c
2910     @@ -55,6 +55,14 @@
2911     #define USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI 0x0236
2912     #define USB_DEVICE_ID_APPLE_WELLSPRING3_ISO 0x0237
2913     #define USB_DEVICE_ID_APPLE_WELLSPRING3_JIS 0x0238
2914     +/* MacbookAir3,2 (unibody), aka wellspring5 */
2915     +#define USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI 0x023f
2916     +#define USB_DEVICE_ID_APPLE_WELLSPRING4_ISO 0x0240
2917     +#define USB_DEVICE_ID_APPLE_WELLSPRING4_JIS 0x0241
2918     +/* MacbookAir3,1 (unibody), aka wellspring4 */
2919     +#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI 0x0242
2920     +#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO 0x0243
2921     +#define USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS 0x0244
2922    
2923     #define BCM5974_DEVICE(prod) { \
2924     .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \
2925     @@ -80,6 +88,14 @@ static const struct usb_device_id bcm5974_table[] = {
2926     BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI),
2927     BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING3_ISO),
2928     BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING3_JIS),
2929     + /* MacbookAir3,2 */
2930     + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI),
2931     + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4_ISO),
2932     + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4_JIS),
2933     + /* MacbookAir3,1 */
2934     + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI),
2935     + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO),
2936     + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS),
2937     /* Terminating entry */
2938     {}
2939     };
2940     @@ -234,6 +250,30 @@ static const struct bcm5974_config bcm5974_config_table[] = {
2941     { DIM_X, DIM_X / SN_COORD, -4460, 5166 },
2942     { DIM_Y, DIM_Y / SN_COORD, -75, 6700 }
2943     },
2944     + {
2945     + USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI,
2946     + USB_DEVICE_ID_APPLE_WELLSPRING4_ISO,
2947     + USB_DEVICE_ID_APPLE_WELLSPRING4_JIS,
2948     + HAS_INTEGRATED_BUTTON,
2949     + 0x84, sizeof(struct bt_data),
2950     + 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS,
2951     + { DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 300 },
2952     + { DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 },
2953     + { DIM_X, DIM_X / SN_COORD, -4620, 5140 },
2954     + { DIM_Y, DIM_Y / SN_COORD, -150, 6600 }
2955     + },
2956     + {
2957     + USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI,
2958     + USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO,
2959     + USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS,
2960     + HAS_INTEGRATED_BUTTON,
2961     + 0x84, sizeof(struct bt_data),
2962     + 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS,
2963     + { DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 300 },
2964     + { DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 },
2965     + { DIM_X, DIM_X / SN_COORD, -4616, 5112 },
2966     + { DIM_Y, DIM_Y / SN_COORD, -142, 5234 }
2967     + },
2968     {}
2969     };
2970    
2971     diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
2972     index a5475b5..b04dd27 100644
2973     --- a/drivers/input/serio/i8042-x86ia64io.h
2974     +++ b/drivers/input/serio/i8042-x86ia64io.h
2975     @@ -424,6 +424,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
2976     DMI_MATCH(DMI_PRODUCT_VERSION, "0100"),
2977     },
2978     },
2979     + {
2980     + /* Dell Vostro V13 */
2981     + .matches = {
2982     + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
2983     + DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"),
2984     + },
2985     + },
2986     { }
2987     };
2988    
2989     @@ -545,6 +552,17 @@ static const struct dmi_system_id __initconst i8042_dmi_laptop_table[] = {
2990     };
2991     #endif
2992    
2993     +static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = {
2994     + {
2995     + /* Dell Vostro V13 */
2996     + .matches = {
2997     + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
2998     + DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"),
2999     + },
3000     + },
3001     + { }
3002     +};
3003     +
3004     /*
3005     * Some Wistron based laptops need us to explicitly enable the 'Dritek
3006     * keyboard extension' to make their extra keys start generating scancodes.
3007     @@ -897,6 +915,9 @@ static int __init i8042_platform_init(void)
3008     if (dmi_check_system(i8042_dmi_nomux_table))
3009     i8042_nomux = true;
3010    
3011     + if (dmi_check_system(i8042_dmi_notimeout_table))
3012     + i8042_notimeout = true;
3013     +
3014     if (dmi_check_system(i8042_dmi_dritek_table))
3015     i8042_dritek = true;
3016     #endif /* CONFIG_X86 */
3017     diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
3018     index 18db5a8..039037d 100644
3019     --- a/drivers/input/serio/i8042.c
3020     +++ b/drivers/input/serio/i8042.c
3021     @@ -61,6 +61,10 @@ static bool i8042_noloop;
3022     module_param_named(noloop, i8042_noloop, bool, 0);
3023     MODULE_PARM_DESC(noloop, "Disable the AUX Loopback command while probing for the AUX port");
3024    
3025     +static bool i8042_notimeout;
3026     +module_param_named(notimeout, i8042_notimeout, bool, 0);
3027     +MODULE_PARM_DESC(notimeout, "Ignore timeouts signalled by i8042");
3028     +
3029     #ifdef CONFIG_X86
3030     static bool i8042_dritek;
3031     module_param_named(dritek, i8042_dritek, bool, 0);
3032     @@ -503,7 +507,7 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id)
3033     } else {
3034    
3035     dfl = ((str & I8042_STR_PARITY) ? SERIO_PARITY : 0) |
3036     - ((str & I8042_STR_TIMEOUT) ? SERIO_TIMEOUT : 0);
3037     + ((str & I8042_STR_TIMEOUT && !i8042_notimeout) ? SERIO_TIMEOUT : 0);
3038    
3039     port_no = (str & I8042_STR_AUXDATA) ?
3040     I8042_AUX_PORT_NO : I8042_KBD_PORT_NO;
3041     diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
3042     index 487ecda..406091f 100644
3043     --- a/drivers/md/dm-mpath.c
3044     +++ b/drivers/md/dm-mpath.c
3045     @@ -33,7 +33,6 @@ struct pgpath {
3046     unsigned fail_count; /* Cumulative failure count */
3047    
3048     struct dm_path path;
3049     - struct work_struct deactivate_path;
3050     struct work_struct activate_path;
3051     };
3052    
3053     @@ -116,7 +115,6 @@ static struct workqueue_struct *kmultipathd, *kmpath_handlerd;
3054     static void process_queued_ios(struct work_struct *work);
3055     static void trigger_event(struct work_struct *work);
3056     static void activate_path(struct work_struct *work);
3057     -static void deactivate_path(struct work_struct *work);
3058    
3059    
3060     /*-----------------------------------------------
3061     @@ -129,7 +127,6 @@ static struct pgpath *alloc_pgpath(void)
3062    
3063     if (pgpath) {
3064     pgpath->is_active = 1;
3065     - INIT_WORK(&pgpath->deactivate_path, deactivate_path);
3066     INIT_WORK(&pgpath->activate_path, activate_path);
3067     }
3068    
3069     @@ -141,14 +138,6 @@ static void free_pgpath(struct pgpath *pgpath)
3070     kfree(pgpath);
3071     }
3072    
3073     -static void deactivate_path(struct work_struct *work)
3074     -{
3075     - struct pgpath *pgpath =
3076     - container_of(work, struct pgpath, deactivate_path);
3077     -
3078     - blk_abort_queue(pgpath->path.dev->bdev->bd_disk->queue);
3079     -}
3080     -
3081     static struct priority_group *alloc_priority_group(void)
3082     {
3083     struct priority_group *pg;
3084     @@ -995,7 +984,6 @@ static int fail_path(struct pgpath *pgpath)
3085     pgpath->path.dev->name, m->nr_valid_paths);
3086    
3087     schedule_work(&m->trigger_event);
3088     - queue_work(kmultipathd, &pgpath->deactivate_path);
3089    
3090     out:
3091     spin_unlock_irqrestore(&m->lock, flags);
3092     diff --git a/drivers/md/dm.c b/drivers/md/dm.c
3093     index 7cb1352..81cb2f5 100644
3094     --- a/drivers/md/dm.c
3095     +++ b/drivers/md/dm.c
3096     @@ -1992,13 +1992,14 @@ static void event_callback(void *context)
3097     wake_up(&md->eventq);
3098     }
3099    
3100     +/*
3101     + * Protected by md->suspend_lock obtained by dm_swap_table().
3102     + */
3103     static void __set_size(struct mapped_device *md, sector_t size)
3104     {
3105     set_capacity(md->disk, size);
3106    
3107     - mutex_lock(&md->bdev->bd_inode->i_mutex);
3108     i_size_write(md->bdev->bd_inode, (loff_t)size << SECTOR_SHIFT);
3109     - mutex_unlock(&md->bdev->bd_inode->i_mutex);
3110     }
3111    
3112     /*
3113     diff --git a/drivers/md/md.c b/drivers/md/md.c
3114     index 175c424..0e5a483 100644
3115     --- a/drivers/md/md.c
3116     +++ b/drivers/md/md.c
3117     @@ -287,11 +287,14 @@ static int md_make_request(struct request_queue *q, struct bio *bio)
3118     mddev_t *mddev = q->queuedata;
3119     int rv;
3120     int cpu;
3121     + unsigned int sectors;
3122    
3123     - if (mddev == NULL || mddev->pers == NULL) {
3124     + if (mddev == NULL || mddev->pers == NULL
3125     + || !mddev->ready) {
3126     bio_io_error(bio);
3127     return 0;
3128     }
3129     + smp_rmb(); /* Ensure implications of 'active' are visible */
3130     rcu_read_lock();
3131     if (mddev->suspended) {
3132     DEFINE_WAIT(__wait);
3133     @@ -309,12 +312,16 @@ static int md_make_request(struct request_queue *q, struct bio *bio)
3134     atomic_inc(&mddev->active_io);
3135     rcu_read_unlock();
3136    
3137     + /*
3138     + * save the sectors now since our bio can
3139     + * go away inside make_request
3140     + */
3141     + sectors = bio_sectors(bio);
3142     rv = mddev->pers->make_request(mddev, bio);
3143    
3144     cpu = part_stat_lock();
3145     part_stat_inc(cpu, &mddev->gendisk->part0, ios[rw]);
3146     - part_stat_add(cpu, &mddev->gendisk->part0, sectors[rw],
3147     - bio_sectors(bio));
3148     + part_stat_add(cpu, &mddev->gendisk->part0, sectors[rw], sectors);
3149     part_stat_unlock();
3150    
3151     if (atomic_dec_and_test(&mddev->active_io) && mddev->suspended)
3152     @@ -3115,7 +3122,7 @@ level_store(mddev_t *mddev, const char *buf, size_t len)
3153     char nm[20];
3154     if (rdev->raid_disk < 0)
3155     continue;
3156     - if (rdev->new_raid_disk > mddev->raid_disks)
3157     + if (rdev->new_raid_disk >= mddev->raid_disks)
3158     rdev->new_raid_disk = -1;
3159     if (rdev->new_raid_disk == rdev->raid_disk)
3160     continue;
3161     @@ -4564,7 +4571,8 @@ int md_run(mddev_t *mddev)
3162     mddev->safemode_timer.data = (unsigned long) mddev;
3163     mddev->safemode_delay = (200 * HZ)/1000 +1; /* 200 msec delay */
3164     mddev->in_sync = 1;
3165     -
3166     + smp_wmb();
3167     + mddev->ready = 1;
3168     list_for_each_entry(rdev, &mddev->disks, same_set)
3169     if (rdev->raid_disk >= 0) {
3170     char nm[20];
3171     @@ -4725,6 +4733,7 @@ EXPORT_SYMBOL_GPL(md_stop_writes);
3172    
3173     void md_stop(mddev_t *mddev)
3174     {
3175     + mddev->ready = 0;
3176     mddev->pers->stop(mddev);
3177     if (mddev->pers->sync_request && mddev->to_remove == NULL)
3178     mddev->to_remove = &md_redundancy_group;
3179     @@ -5159,9 +5168,10 @@ static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info)
3180     /* set saved_raid_disk if appropriate */
3181     if (!mddev->persistent) {
3182     if (info->state & (1<<MD_DISK_SYNC) &&
3183     - info->raid_disk < mddev->raid_disks)
3184     + info->raid_disk < mddev->raid_disks) {
3185     rdev->raid_disk = info->raid_disk;
3186     - else
3187     + set_bit(In_sync, &rdev->flags);
3188     + } else
3189     rdev->raid_disk = -1;
3190     } else
3191     super_types[mddev->major_version].
3192     @@ -6041,7 +6051,8 @@ static int md_thread(void * arg)
3193     || kthread_should_stop(),
3194     thread->timeout);
3195    
3196     - if (test_and_clear_bit(THREAD_WAKEUP, &thread->flags))
3197     + clear_bit(THREAD_WAKEUP, &thread->flags);
3198     + if (!kthread_should_stop())
3199     thread->run(thread->mddev);
3200     }
3201    
3202     diff --git a/drivers/md/md.h b/drivers/md/md.h
3203     index d05bab5..a161283 100644
3204     --- a/drivers/md/md.h
3205     +++ b/drivers/md/md.h
3206     @@ -148,7 +148,8 @@ struct mddev_s
3207     * are happening, so run/
3208     * takeover/stop are not safe
3209     */
3210     -
3211     + int ready; /* See when safe to pass
3212     + * IO requests down */
3213     struct gendisk *gendisk;
3214    
3215     struct kobject kobj;
3216     diff --git a/drivers/media/IR/ir-keytable.c b/drivers/media/IR/ir-keytable.c
3217     index f60107c..c4645d7 100644
3218     --- a/drivers/media/IR/ir-keytable.c
3219     +++ b/drivers/media/IR/ir-keytable.c
3220     @@ -374,21 +374,27 @@ static int ir_getkeycode(struct input_dev *dev,
3221     index = ir_lookup_by_scancode(rc_tab, scancode);
3222     }
3223    
3224     - if (index >= rc_tab->len) {
3225     - if (!(ke->flags & INPUT_KEYMAP_BY_INDEX))
3226     - IR_dprintk(1, "unknown key for scancode 0x%04x\n",
3227     - scancode);
3228     + if (index < rc_tab->len) {
3229     + entry = &rc_tab->scan[index];
3230     +
3231     + ke->index = index;
3232     + ke->keycode = entry->keycode;
3233     + ke->len = sizeof(entry->scancode);
3234     + memcpy(ke->scancode, &entry->scancode, sizeof(entry->scancode));
3235     +
3236     + } else if (!(ke->flags & INPUT_KEYMAP_BY_INDEX)) {
3237     + /*
3238     + * We do not really know the valid range of scancodes
3239     + * so let's respond with KEY_RESERVED to anything we
3240     + * do not have mapping for [yet].
3241     + */
3242     + ke->index = index;
3243     + ke->keycode = KEY_RESERVED;
3244     + } else {
3245     retval = -EINVAL;
3246     goto out;
3247     }
3248    
3249     - entry = &rc_tab->scan[index];
3250     -
3251     - ke->index = index;
3252     - ke->keycode = entry->keycode;
3253     - ke->len = sizeof(entry->scancode);
3254     - memcpy(ke->scancode, &entry->scancode, sizeof(entry->scancode));
3255     -
3256     retval = 0;
3257    
3258     out:
3259     diff --git a/drivers/media/dvb/frontends/ix2505v.c b/drivers/media/dvb/frontends/ix2505v.c
3260     index 55f2eba..6360c68 100644
3261     --- a/drivers/media/dvb/frontends/ix2505v.c
3262     +++ b/drivers/media/dvb/frontends/ix2505v.c
3263     @@ -72,7 +72,7 @@ static int ix2505v_read_status_reg(struct ix2505v_state *state)
3264     ret = i2c_transfer(state->i2c, msg, 1);
3265     deb_i2c("Read %s ", __func__);
3266    
3267     - return (ret = 1) ? (int) b2[0] : -1;
3268     + return (ret == 1) ? (int) b2[0] : -1;
3269     }
3270    
3271     static int ix2505v_write(struct ix2505v_state *state, u8 buf[], u8 count)
3272     diff --git a/drivers/media/radio/radio-aimslab.c b/drivers/media/radio/radio-aimslab.c
3273     index 05e832f..6cc5d13 100644
3274     --- a/drivers/media/radio/radio-aimslab.c
3275     +++ b/drivers/media/radio/radio-aimslab.c
3276     @@ -31,7 +31,6 @@
3277     #include <linux/module.h> /* Modules */
3278     #include <linux/init.h> /* Initdata */
3279     #include <linux/ioport.h> /* request_region */
3280     -#include <linux/delay.h> /* udelay */
3281     #include <linux/videodev2.h> /* kernel radio structs */
3282     #include <linux/version.h> /* for KERNEL_VERSION MACRO */
3283     #include <linux/io.h> /* outb, outb_p */
3284     @@ -71,27 +70,17 @@ static struct rtrack rtrack_card;
3285    
3286     /* local things */
3287    
3288     -static void sleep_delay(long n)
3289     -{
3290     - /* Sleep nicely for 'n' uS */
3291     - int d = n / msecs_to_jiffies(1000);
3292     - if (!d)
3293     - udelay(n);
3294     - else
3295     - msleep(jiffies_to_msecs(d));
3296     -}
3297     -
3298     static void rt_decvol(struct rtrack *rt)
3299     {
3300     outb(0x58, rt->io); /* volume down + sigstr + on */
3301     - sleep_delay(100000);
3302     + msleep(100);
3303     outb(0xd8, rt->io); /* volume steady + sigstr + on */
3304     }
3305    
3306     static void rt_incvol(struct rtrack *rt)
3307     {
3308     outb(0x98, rt->io); /* volume up + sigstr + on */
3309     - sleep_delay(100000);
3310     + msleep(100);
3311     outb(0xd8, rt->io); /* volume steady + sigstr + on */
3312     }
3313    
3314     @@ -120,7 +109,7 @@ static int rt_setvol(struct rtrack *rt, int vol)
3315    
3316     if (vol == 0) { /* volume = 0 means mute the card */
3317     outb(0x48, rt->io); /* volume down but still "on" */
3318     - sleep_delay(2000000); /* make sure it's totally down */
3319     + msleep(2000); /* make sure it's totally down */
3320     outb(0xd0, rt->io); /* volume steady, off */
3321     rt->curvol = 0; /* track the volume state! */
3322     mutex_unlock(&rt->lock);
3323     @@ -155,7 +144,7 @@ static void send_0_byte(struct rtrack *rt)
3324     outb_p(128+64+16+8+ 1, rt->io); /* on + wr-enable + data low */
3325     outb_p(128+64+16+8+2+1, rt->io); /* clock */
3326     }
3327     - sleep_delay(1000);
3328     + msleep(1);
3329     }
3330    
3331     static void send_1_byte(struct rtrack *rt)
3332     @@ -169,7 +158,7 @@ static void send_1_byte(struct rtrack *rt)
3333     outb_p(128+64+16+8+4+2+1, rt->io); /* clock */
3334     }
3335    
3336     - sleep_delay(1000);
3337     + msleep(1);
3338     }
3339    
3340     static int rt_setfreq(struct rtrack *rt, unsigned long freq)
3341     @@ -420,7 +409,7 @@ static int __init rtrack_init(void)
3342    
3343     /* this ensures that the volume is all the way down */
3344     outb(0x48, rt->io); /* volume down but still "on" */
3345     - sleep_delay(2000000); /* make sure it's totally down */
3346     + msleep(2000); /* make sure it's totally down */
3347     outb(0xc0, rt->io); /* steady volume, mute card */
3348    
3349     if (video_register_device(&rt->vdev, VFL_TYPE_RADIO, radio_nr) < 0) {
3350     diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
3351     index f7e9168..2637f6f 100644
3352     --- a/drivers/media/video/em28xx/em28xx-cards.c
3353     +++ b/drivers/media/video/em28xx/em28xx-cards.c
3354     @@ -1633,11 +1633,11 @@ struct em28xx_board em28xx_boards[] = {
3355     .input = { {
3356     .type = EM28XX_VMUX_COMPOSITE1,
3357     .vmux = SAA7115_COMPOSITE0,
3358     - .amux = EM28XX_AMUX_VIDEO2,
3359     + .amux = EM28XX_AMUX_LINE_IN,
3360     }, {
3361     .type = EM28XX_VMUX_SVIDEO,
3362     .vmux = SAA7115_SVIDEO3,
3363     - .amux = EM28XX_AMUX_VIDEO2,
3364     + .amux = EM28XX_AMUX_LINE_IN,
3365     } },
3366     },
3367     [EM2860_BOARD_TERRATEC_AV350] = {
3368     diff --git a/drivers/mmc/host/bfin_sdh.c b/drivers/mmc/host/bfin_sdh.c
3369     index bac7d62..0371bf5 100644
3370     --- a/drivers/mmc/host/bfin_sdh.c
3371     +++ b/drivers/mmc/host/bfin_sdh.c
3372     @@ -462,7 +462,7 @@ static int __devinit sdh_probe(struct platform_device *pdev)
3373     goto out;
3374     }
3375    
3376     - mmc = mmc_alloc_host(sizeof(*mmc), &pdev->dev);
3377     + mmc = mmc_alloc_host(sizeof(struct sdh_host), &pdev->dev);
3378     if (!mmc) {
3379     ret = -ENOMEM;
3380     goto out;
3381     diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
3382     index 17f8518..ea2c288 100644
3383     --- a/drivers/mtd/nand/pxa3xx_nand.c
3384     +++ b/drivers/mtd/nand/pxa3xx_nand.c
3385     @@ -885,6 +885,7 @@ static int pxa3xx_nand_detect_config(struct pxa3xx_nand_info *info)
3386     /* set info fields needed to __readid */
3387     info->read_id_bytes = (info->page_size == 2048) ? 4 : 2;
3388     info->reg_ndcr = ndcr;
3389     + info->cmdset = &default_cmdset;
3390    
3391     if (__readid(info, &id))
3392     return -ENODEV;
3393     @@ -915,7 +916,6 @@ static int pxa3xx_nand_detect_config(struct pxa3xx_nand_info *info)
3394    
3395     info->ndtr0cs0 = nand_readl(info, NDTR0CS0);
3396     info->ndtr1cs0 = nand_readl(info, NDTR1CS0);
3397     - info->cmdset = &default_cmdset;
3398    
3399     return 0;
3400     }
3401     diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
3402     index 4d62f7b..b3b251e 100644
3403     --- a/drivers/net/e1000/e1000_main.c
3404     +++ b/drivers/net/e1000/e1000_main.c
3405     @@ -971,11 +971,13 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
3406     */
3407     dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
3408     pci_using_dac = 1;
3409     - } else if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) {
3410     - dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
3411     } else {
3412     - pr_err("No usable DMA config, aborting\n");
3413     - goto err_dma;
3414     + err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
3415     + if (err) {
3416     + pr_err("No usable DMA config, aborting\n");
3417     + goto err_dma;
3418     + }
3419     + dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
3420     }
3421    
3422     netdev->netdev_ops = &e1000_netdev_ops;
3423     diff --git a/drivers/net/fec.c b/drivers/net/fec.c
3424     index cce32d4..52e9ca8 100644
3425     --- a/drivers/net/fec.c
3426     +++ b/drivers/net/fec.c
3427     @@ -651,8 +651,8 @@ static int fec_enet_mdio_write(struct mii_bus *bus, int mii_id, int regnum,
3428     fep->mii_timeout = 0;
3429     init_completion(&fep->mdio_done);
3430    
3431     - /* start a read op */
3432     - writel(FEC_MMFR_ST | FEC_MMFR_OP_READ |
3433     + /* start a write op */
3434     + writel(FEC_MMFR_ST | FEC_MMFR_OP_WRITE |
3435     FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(regnum) |
3436     FEC_MMFR_TA | FEC_MMFR_DATA(value),
3437     fep->hwp + FEC_MII_DATA);
3438     diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
3439     index eee0b29..57d747a 100644
3440     --- a/drivers/net/ixgbe/ixgbe_main.c
3441     +++ b/drivers/net/ixgbe/ixgbe_main.c
3442     @@ -2912,9 +2912,16 @@ static void ixgbe_set_rx_buffer_len(struct ixgbe_adapter *adapter)
3443     u32 mhadd, hlreg0;
3444    
3445     /* Decide whether to use packet split mode or not */
3446     + /* On by default */
3447     + adapter->flags |= IXGBE_FLAG_RX_PS_ENABLED;
3448     +
3449     /* Do not use packet split if we're in SR-IOV Mode */
3450     - if (!adapter->num_vfs)
3451     - adapter->flags |= IXGBE_FLAG_RX_PS_ENABLED;
3452     + if (adapter->num_vfs)
3453     + adapter->flags &= ~IXGBE_FLAG_RX_PS_ENABLED;
3454     +
3455     + /* Disable packet split due to 82599 erratum #45 */
3456     + if (hw->mac.type == ixgbe_mac_82599EB)
3457     + adapter->flags &= ~IXGBE_FLAG_RX_PS_ENABLED;
3458    
3459     /* Set the RX buffer length according to the mode */
3460     if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) {
3461     diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
3462     index b6d4028..c1689ba 100644
3463     --- a/drivers/net/virtio_net.c
3464     +++ b/drivers/net/virtio_net.c
3465     @@ -446,6 +446,20 @@ static void skb_recv_done(struct virtqueue *rvq)
3466     }
3467     }
3468    
3469     +static void virtnet_napi_enable(struct virtnet_info *vi)
3470     +{
3471     + napi_enable(&vi->napi);
3472     +
3473     + /* If all buffers were filled by other side before we napi_enabled, we
3474     + * won't get another interrupt, so process any outstanding packets
3475     + * now. virtnet_poll wants re-enable the queue, so we disable here.
3476     + * We synchronize against interrupts via NAPI_STATE_SCHED */
3477     + if (napi_schedule_prep(&vi->napi)) {
3478     + virtqueue_disable_cb(vi->rvq);
3479     + __napi_schedule(&vi->napi);
3480     + }
3481     +}
3482     +
3483     static void refill_work(struct work_struct *work)
3484     {
3485     struct virtnet_info *vi;
3486     @@ -454,7 +468,7 @@ static void refill_work(struct work_struct *work)
3487     vi = container_of(work, struct virtnet_info, refill.work);
3488     napi_disable(&vi->napi);
3489     still_empty = !try_fill_recv(vi, GFP_KERNEL);
3490     - napi_enable(&vi->napi);
3491     + virtnet_napi_enable(vi);
3492    
3493     /* In theory, this can happen: if we don't get any buffers in
3494     * we will *never* try to fill again. */
3495     @@ -638,16 +652,7 @@ static int virtnet_open(struct net_device *dev)
3496     {
3497     struct virtnet_info *vi = netdev_priv(dev);
3498    
3499     - napi_enable(&vi->napi);
3500     -
3501     - /* If all buffers were filled by other side before we napi_enabled, we
3502     - * won't get another interrupt, so process any outstanding packets
3503     - * now. virtnet_poll wants re-enable the queue, so we disable here.
3504     - * We synchronize against interrupts via NAPI_STATE_SCHED */
3505     - if (napi_schedule_prep(&vi->napi)) {
3506     - virtqueue_disable_cb(vi->rvq);
3507     - __napi_schedule(&vi->napi);
3508     - }
3509     + virtnet_napi_enable(vi);
3510     return 0;
3511     }
3512    
3513     diff --git a/drivers/net/wireless/ath/ath9k/ar9002_calib.c b/drivers/net/wireless/ath/ath9k/ar9002_calib.c
3514     index 15f62cd..9b6ba23 100644
3515     --- a/drivers/net/wireless/ath/ath9k/ar9002_calib.c
3516     +++ b/drivers/net/wireless/ath/ath9k/ar9002_calib.c
3517     @@ -681,10 +681,6 @@ static bool ar9002_hw_calibrate(struct ath_hw *ah,
3518    
3519     /* Do NF cal only at longer intervals */
3520     if (longcal || nfcal_pending) {
3521     - /* Do periodic PAOffset Cal */
3522     - ar9002_hw_pa_cal(ah, false);
3523     - ar9002_hw_olc_temp_compensation(ah);
3524     -
3525     /*
3526     * Get the value from the previous NF cal and update
3527     * history buffer.
3528     @@ -699,8 +695,12 @@ static bool ar9002_hw_calibrate(struct ath_hw *ah,
3529     ath9k_hw_loadnf(ah, ah->curchan);
3530     }
3531    
3532     - if (longcal)
3533     + if (longcal) {
3534     ath9k_hw_start_nfcal(ah, false);
3535     + /* Do periodic PAOffset Cal */
3536     + ar9002_hw_pa_cal(ah, false);
3537     + ar9002_hw_olc_temp_compensation(ah);
3538     + }
3539     }
3540    
3541     return iscaldone;
3542     diff --git a/drivers/net/wireless/ath/ath9k/ar9002_hw.c b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
3543     index 48261b7..2528b29 100644
3544     --- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c
3545     +++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
3546     @@ -444,9 +444,8 @@ static void ar9002_hw_configpcipowersave(struct ath_hw *ah,
3547     }
3548    
3549     /* WAR for ASPM system hang */
3550     - if (AR_SREV_9280(ah) || AR_SREV_9285(ah) || AR_SREV_9287(ah)) {
3551     + if (AR_SREV_9285(ah) || AR_SREV_9287(ah))
3552     val |= (AR_WA_BIT6 | AR_WA_BIT7);
3553     - }
3554    
3555     if (AR_SREV_9285E_20(ah))
3556     val |= AR_WA_BIT23;
3557     diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
3558     index a7b82f0..aa355df 100644
3559     --- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
3560     +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
3561     @@ -22,12 +22,14 @@
3562     #define COMP_CKSUM_LEN 2
3563    
3564     #define AR_CH0_TOP (0x00016288)
3565     -#define AR_CH0_TOP_XPABIASLVL (0x3)
3566     +#define AR_CH0_TOP_XPABIASLVL (0x300)
3567     #define AR_CH0_TOP_XPABIASLVL_S (8)
3568    
3569     #define AR_CH0_THERM (0x00016290)
3570     -#define AR_CH0_THERM_SPARE (0x3f)
3571     -#define AR_CH0_THERM_SPARE_S (0)
3572     +#define AR_CH0_THERM_XPABIASLVL_MSB 0x3
3573     +#define AR_CH0_THERM_XPABIASLVL_MSB_S 0
3574     +#define AR_CH0_THERM_XPASHORT2GND 0x4
3575     +#define AR_CH0_THERM_XPASHORT2GND_S 2
3576    
3577     #define AR_SWITCH_TABLE_COM_ALL (0xffff)
3578     #define AR_SWITCH_TABLE_COM_ALL_S (0)
3579     @@ -995,9 +997,9 @@ static s32 ar9003_hw_xpa_bias_level_get(struct ath_hw *ah, bool is2ghz)
3580     static void ar9003_hw_xpa_bias_level_apply(struct ath_hw *ah, bool is2ghz)
3581     {
3582     int bias = ar9003_hw_xpa_bias_level_get(ah, is2ghz);
3583     - REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, (bias & 0x3));
3584     - REG_RMW_FIELD(ah, AR_CH0_THERM, AR_CH0_THERM_SPARE,
3585     - ((bias >> 2) & 0x3));
3586     + REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, bias);
3587     + REG_RMW_FIELD(ah, AR_CH0_THERM, AR_CH0_THERM_XPABIASLVL_MSB, bias >> 2);
3588     + REG_RMW_FIELD(ah, AR_CH0_THERM, AR_CH0_THERM_XPASHORT2GND, 1);
3589     }
3590    
3591     static u32 ar9003_hw_ant_ctrl_common_get(struct ath_hw *ah, bool is2ghz)
3592     diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
3593     index 0963071..c0b60ce 100644
3594     --- a/drivers/net/wireless/ath/ath9k/ath9k.h
3595     +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
3596     @@ -178,8 +178,8 @@ void ath_descdma_cleanup(struct ath_softc *sc, struct ath_descdma *dd,
3597    
3598     /* returns delimiter padding required given the packet length */
3599     #define ATH_AGGR_GET_NDELIM(_len) \
3600     - (((((_len) + ATH_AGGR_DELIM_SZ) < ATH_AGGR_MINPLEN) ? \
3601     - (ATH_AGGR_MINPLEN - (_len) - ATH_AGGR_DELIM_SZ) : 0) >> 2)
3602     + (((_len) >= ATH_AGGR_MINPLEN) ? 0 : \
3603     + DIV_ROUND_UP(ATH_AGGR_MINPLEN - (_len), ATH_AGGR_DELIM_SZ))
3604    
3605     #define BAW_WITHIN(_start, _bawsz, _seqno) \
3606     ((((_seqno) - (_start)) & 4095) < (_bawsz))
3607     diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
3608     index 0de3c3d..270671f 100644
3609     --- a/drivers/net/wireless/ath/ath9k/hif_usb.c
3610     +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
3611     @@ -144,16 +144,36 @@ static void hif_usb_tx_cb(struct urb *urb)
3612     case -ENODEV:
3613     case -ESHUTDOWN:
3614     /*
3615     - * The URB has been killed, free the SKBs
3616     - * and return.
3617     + * The URB has been killed, free the SKBs.
3618     */
3619     ath9k_skb_queue_purge(hif_dev, &tx_buf->skb_queue);
3620     - return;
3621     +
3622     + /*
3623     + * If the URBs are being flushed, no need to add this
3624     + * URB to the free list.
3625     + */
3626     + spin_lock(&hif_dev->tx.tx_lock);
3627     + if (hif_dev->tx.flags & HIF_USB_TX_FLUSH) {
3628     + spin_unlock(&hif_dev->tx.tx_lock);
3629     + return;
3630     + }
3631     + spin_unlock(&hif_dev->tx.tx_lock);
3632     +
3633     + /*
3634     + * In the stop() case, this URB has to be added to
3635     + * the free list.
3636     + */
3637     + goto add_free;
3638     default:
3639     break;
3640     }
3641    
3642     - /* Check if TX has been stopped */
3643     + /*
3644     + * Check if TX has been stopped, this is needed because
3645     + * this CB could have been invoked just after the TX lock
3646     + * was released in hif_stop() and kill_urb() hasn't been
3647     + * called yet.
3648     + */
3649     spin_lock(&hif_dev->tx.tx_lock);
3650     if (hif_dev->tx.flags & HIF_USB_TX_STOP) {
3651     spin_unlock(&hif_dev->tx.tx_lock);
3652     @@ -305,6 +325,7 @@ static void hif_usb_start(void *hif_handle, u8 pipe_id)
3653     static void hif_usb_stop(void *hif_handle, u8 pipe_id)
3654     {
3655     struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle;
3656     + struct tx_buf *tx_buf = NULL, *tx_buf_tmp = NULL;
3657     unsigned long flags;
3658    
3659     spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
3660     @@ -312,6 +333,12 @@ static void hif_usb_stop(void *hif_handle, u8 pipe_id)
3661     hif_dev->tx.tx_skb_cnt = 0;
3662     hif_dev->tx.flags |= HIF_USB_TX_STOP;
3663     spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
3664     +
3665     + /* The pending URBs have to be canceled. */
3666     + list_for_each_entry_safe(tx_buf, tx_buf_tmp,
3667     + &hif_dev->tx.tx_pending, list) {
3668     + usb_kill_urb(tx_buf->urb);
3669     + }
3670     }
3671    
3672     static int hif_usb_send(void *hif_handle, u8 pipe_id, struct sk_buff *skb,
3673     @@ -578,6 +605,7 @@ free:
3674     static void ath9k_hif_usb_dealloc_tx_urbs(struct hif_device_usb *hif_dev)
3675     {
3676     struct tx_buf *tx_buf = NULL, *tx_buf_tmp = NULL;
3677     + unsigned long flags;
3678    
3679     list_for_each_entry_safe(tx_buf, tx_buf_tmp,
3680     &hif_dev->tx.tx_buf, list) {
3681     @@ -588,6 +616,10 @@ static void ath9k_hif_usb_dealloc_tx_urbs(struct hif_device_usb *hif_dev)
3682     kfree(tx_buf);
3683     }
3684    
3685     + spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
3686     + hif_dev->tx.flags |= HIF_USB_TX_FLUSH;
3687     + spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
3688     +
3689     list_for_each_entry_safe(tx_buf, tx_buf_tmp,
3690     &hif_dev->tx.tx_pending, list) {
3691     usb_kill_urb(tx_buf->urb);
3692     diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.h b/drivers/net/wireless/ath/ath9k/hif_usb.h
3693     index 2daf97b..30d0938 100644
3694     --- a/drivers/net/wireless/ath/ath9k/hif_usb.h
3695     +++ b/drivers/net/wireless/ath/ath9k/hif_usb.h
3696     @@ -62,6 +62,7 @@ struct tx_buf {
3697     };
3698    
3699     #define HIF_USB_TX_STOP BIT(0)
3700     +#define HIF_USB_TX_FLUSH BIT(1)
3701    
3702     struct hif_usb_tx {
3703     u8 flags;
3704     diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
3705     index c7fbe25..5dcf140 100644
3706     --- a/drivers/net/wireless/ath/ath9k/hw.c
3707     +++ b/drivers/net/wireless/ath/ath9k/hw.c
3708     @@ -385,6 +385,9 @@ static void ath9k_hw_init_config(struct ath_hw *ah)
3709     else
3710     ah->config.ht_enable = 0;
3711    
3712     + /* PAPRD needs some more work to be enabled */
3713     + ah->config.paprd_disable = 1;
3714     +
3715     ah->config.rx_intr_mitigation = true;
3716     ah->config.pcieSerDesWrite = true;
3717    
3718     @@ -1949,7 +1952,8 @@ int ath9k_hw_fill_cap_info(struct ath_hw *ah)
3719     pCap->rx_status_len = sizeof(struct ar9003_rxs);
3720     pCap->tx_desc_len = sizeof(struct ar9003_txc);
3721     pCap->txs_len = sizeof(struct ar9003_txs);
3722     - if (ah->eep_ops->get_eeprom(ah, EEP_PAPRD))
3723     + if (!ah->config.paprd_disable &&
3724     + ah->eep_ops->get_eeprom(ah, EEP_PAPRD))
3725     pCap->hw_caps |= ATH9K_HW_CAP_PAPRD;
3726     } else {
3727     pCap->tx_desc_len = sizeof(struct ath_desc);
3728     diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
3729     index d47d1b4..1240376 100644
3730     --- a/drivers/net/wireless/ath/ath9k/hw.h
3731     +++ b/drivers/net/wireless/ath/ath9k/hw.h
3732     @@ -215,6 +215,7 @@ struct ath9k_ops_config {
3733     u32 pcie_waen;
3734     u8 analog_shiftreg;
3735     u8 ht_enable;
3736     + u8 paprd_disable;
3737     u32 ofdm_trig_low;
3738     u32 ofdm_trig_high;
3739     u32 cck_trig_high;
3740     diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
3741     index c0c3464..d1b0db4 100644
3742     --- a/drivers/net/wireless/ath/ath9k/main.c
3743     +++ b/drivers/net/wireless/ath/ath9k/main.c
3744     @@ -295,7 +295,8 @@ int ath_set_channel(struct ath_softc *sc, struct ieee80211_hw *hw,
3745     ath9k_hw_set_interrupts(ah, ah->imask);
3746    
3747     if (!(sc->sc_flags & (SC_OP_OFFCHANNEL))) {
3748     - ath_beacon_config(sc, NULL);
3749     + if (sc->sc_flags & SC_OP_BEACONS)
3750     + ath_beacon_config(sc, NULL);
3751     ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0);
3752     ath_start_ani(common);
3753     }
3754     @@ -1418,8 +1419,9 @@ static void ath9k_stop(struct ieee80211_hw *hw)
3755     ath9k_hw_configpcipowersave(ah, 1, 1);
3756     ath9k_ps_restore(sc);
3757    
3758     - /* Finally, put the chip in FULL SLEEP mode */
3759     - ath9k_setpower(sc, ATH9K_PM_FULL_SLEEP);
3760     + sc->ps_idle = true;
3761     + ath9k_set_wiphy_idle(aphy, true);
3762     + ath_radio_disable(sc, hw);
3763    
3764     sc->sc_flags |= SC_OP_INVALID;
3765    
3766     diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c
3767     index b5b6514..894ebadb 100644
3768     --- a/drivers/net/wireless/ath/ath9k/pci.c
3769     +++ b/drivers/net/wireless/ath/ath9k/pci.c
3770     @@ -290,6 +290,10 @@ static int ath_pci_resume(struct pci_dev *pdev)
3771     AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
3772     ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 1);
3773    
3774     + sc->ps_idle = true;
3775     + ath9k_set_wiphy_idle(aphy, true);
3776     + ath_radio_disable(sc, hw);
3777     +
3778     return 0;
3779     }
3780    
3781     diff --git a/drivers/net/wireless/ath/carl9170/rx.c b/drivers/net/wireless/ath/carl9170/rx.c
3782     index 939a0e9..84866a4 100644
3783     --- a/drivers/net/wireless/ath/carl9170/rx.c
3784     +++ b/drivers/net/wireless/ath/carl9170/rx.c
3785     @@ -564,7 +564,7 @@ static void carl9170_ps_beacon(struct ar9170 *ar, void *data, unsigned int len)
3786     cam = ieee80211_check_tim(tim_ie, tim_len, ar->common.curaid);
3787    
3788     /* 2. Maybe the AP wants to send multicast/broadcast data? */
3789     - cam = !!(tim_ie->bitmap_ctrl & 0x01);
3790     + cam |= !!(tim_ie->bitmap_ctrl & 0x01);
3791    
3792     if (!cam) {
3793     /* back to low-power land. */
3794     diff --git a/drivers/net/wireless/ath/key.c b/drivers/net/wireless/ath/key.c
3795     index bd21a4d..32fcc19 100644
3796     --- a/drivers/net/wireless/ath/key.c
3797     +++ b/drivers/net/wireless/ath/key.c
3798     @@ -60,6 +60,8 @@ bool ath_hw_keyreset(struct ath_common *common, u16 entry)
3799     REG_WRITE(ah, AR_KEYTABLE_KEY1(micentry), 0);
3800     REG_WRITE(ah, AR_KEYTABLE_KEY2(micentry), 0);
3801     REG_WRITE(ah, AR_KEYTABLE_KEY3(micentry), 0);
3802     + if (common->crypt_caps & ATH_CRYPT_CAP_MIC_COMBINED)
3803     + REG_WRITE(ah, AR_KEYTABLE_KEY4(micentry), 0);
3804    
3805     }
3806    
3807     diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
3808     index bd8a413..2176ede 100644
3809     --- a/drivers/net/wireless/hostap/hostap_cs.c
3810     +++ b/drivers/net/wireless/hostap/hostap_cs.c
3811     @@ -518,22 +518,21 @@ static int prism2_config(struct pcmcia_device *link)
3812     hw_priv->link = link;
3813    
3814     /*
3815     - * Make sure the IRQ handler cannot proceed until at least
3816     - * dev->base_addr is initialized.
3817     + * We enable IRQ here, but IRQ handler will not proceed
3818     + * until dev->base_addr is set below. This protect us from
3819     + * receive interrupts when driver is not initialized.
3820     */
3821     - spin_lock_irqsave(&local->irq_init_lock, flags);
3822     -
3823     ret = pcmcia_request_irq(link, prism2_interrupt);
3824     if (ret)
3825     - goto failed_unlock;
3826     + goto failed;
3827    
3828     ret = pcmcia_enable_device(link);
3829     if (ret)
3830     - goto failed_unlock;
3831     + goto failed;
3832    
3833     + spin_lock_irqsave(&local->irq_init_lock, flags);
3834     dev->irq = link->irq;
3835     dev->base_addr = link->resource[0]->start;
3836     -
3837     spin_unlock_irqrestore(&local->irq_init_lock, flags);
3838    
3839     local->shutdown = 0;
3840     @@ -546,8 +545,6 @@ static int prism2_config(struct pcmcia_device *link)
3841    
3842     return ret;
3843    
3844     - failed_unlock:
3845     - spin_unlock_irqrestore(&local->irq_init_lock, flags);
3846     failed:
3847     kfree(hw_priv);
3848     prism2_release((u_long)link);
3849     diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
3850     index c2636a7..f0468cd 100644
3851     --- a/drivers/net/wireless/iwlwifi/iwl-agn.c
3852     +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
3853     @@ -1319,6 +1319,9 @@ static void iwl_irq_tasklet_legacy(struct iwl_priv *priv)
3854     /* only Re-enable if diabled by irq */
3855     if (test_bit(STATUS_INT_ENABLED, &priv->status))
3856     iwl_enable_interrupts(priv);
3857     + /* Re-enable RF_KILL if it occurred */
3858     + else if (handled & CSR_INT_BIT_RF_KILL)
3859     + iwl_enable_rfkill_int(priv);
3860    
3861     #ifdef CONFIG_IWLWIFI_DEBUG
3862     if (iwl_get_debug_level(priv) & (IWL_DL_ISR)) {
3863     @@ -1533,6 +1536,9 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
3864     /* only Re-enable if diabled by irq */
3865     if (test_bit(STATUS_INT_ENABLED, &priv->status))
3866     iwl_enable_interrupts(priv);
3867     + /* Re-enable RF_KILL if it occurred */
3868     + else if (handled & CSR_INT_BIT_RF_KILL)
3869     + iwl_enable_rfkill_int(priv);
3870     }
3871    
3872     /* the threshold ratio of actual_ack_cnt to expected_ack_cnt in percent */
3873     @@ -3530,9 +3536,10 @@ static void iwl_mac_stop(struct ieee80211_hw *hw)
3874    
3875     flush_workqueue(priv->workqueue);
3876    
3877     - /* enable interrupts again in order to receive rfkill changes */
3878     + /* User space software may expect getting rfkill changes
3879     + * even if interface is down */
3880     iwl_write32(priv, CSR_INT, 0xFFFFFFFF);
3881     - iwl_enable_interrupts(priv);
3882     + iwl_enable_rfkill_int(priv);
3883    
3884     IWL_DEBUG_MAC80211(priv, "leave\n");
3885     }
3886     @@ -4515,14 +4522,14 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
3887     * 8. Enable interrupts and read RFKILL state
3888     *********************************************/
3889    
3890     - /* enable interrupts if needed: hw bug w/a */
3891     + /* enable rfkill interrupt: hw bug w/a */
3892     pci_read_config_word(priv->pci_dev, PCI_COMMAND, &pci_cmd);
3893     if (pci_cmd & PCI_COMMAND_INTX_DISABLE) {
3894     pci_cmd &= ~PCI_COMMAND_INTX_DISABLE;
3895     pci_write_config_word(priv->pci_dev, PCI_COMMAND, pci_cmd);
3896     }
3897    
3898     - iwl_enable_interrupts(priv);
3899     + iwl_enable_rfkill_int(priv);
3900    
3901     /* If platform's RF_KILL switch is NOT set to KILL */
3902     if (iwl_read32(priv, CSR_GP_CNTRL) & CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW)
3903     diff --git a/drivers/net/wireless/iwlwifi/iwl-helpers.h b/drivers/net/wireless/iwlwifi/iwl-helpers.h
3904     index 1aaef70..19f5586 100644
3905     --- a/drivers/net/wireless/iwlwifi/iwl-helpers.h
3906     +++ b/drivers/net/wireless/iwlwifi/iwl-helpers.h
3907     @@ -163,6 +163,12 @@ static inline void iwl_disable_interrupts(struct iwl_priv *priv)
3908     IWL_DEBUG_ISR(priv, "Disabled interrupts\n");
3909     }
3910    
3911     +static inline void iwl_enable_rfkill_int(struct iwl_priv *priv)
3912     +{
3913     + IWL_DEBUG_ISR(priv, "Enabling rfkill interrupt\n");
3914     + iwl_write32(priv, CSR_INT_MASK, CSR_INT_BIT_RF_KILL);
3915     +}
3916     +
3917     static inline void iwl_enable_interrupts(struct iwl_priv *priv)
3918     {
3919     IWL_DEBUG_ISR(priv, "Enabling interrupts\n");
3920     diff --git a/drivers/net/wireless/p54/txrx.c b/drivers/net/wireless/p54/txrx.c
3921     index 76b2318a..f618b96 100644
3922     --- a/drivers/net/wireless/p54/txrx.c
3923     +++ b/drivers/net/wireless/p54/txrx.c
3924     @@ -618,7 +618,7 @@ static void p54_tx_80211_header(struct p54_common *priv, struct sk_buff *skb,
3925     else
3926     *burst_possible = false;
3927    
3928     - if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)
3929     + if (!(info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ))
3930     *flags |= P54_HDR_FLAG_DATA_OUT_SEQNR;
3931    
3932     if (info->flags & IEEE80211_TX_CTL_PSPOLL_RESPONSE)
3933     diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
3934     index 9be8089..4c6fba7 100644
3935     --- a/drivers/net/wireless/rt2x00/rt73usb.c
3936     +++ b/drivers/net/wireless/rt2x00/rt73usb.c
3937     @@ -2417,6 +2417,7 @@ static struct usb_device_id rt73usb_device_table[] = {
3938     { USB_DEVICE(0x04bb, 0x093d), USB_DEVICE_DATA(&rt73usb_ops) },
3939     { USB_DEVICE(0x148f, 0x2573), USB_DEVICE_DATA(&rt73usb_ops) },
3940     { USB_DEVICE(0x148f, 0x2671), USB_DEVICE_DATA(&rt73usb_ops) },
3941     + { USB_DEVICE(0x0812, 0x3101), USB_DEVICE_DATA(&rt73usb_ops) },
3942     /* Qcom */
3943     { USB_DEVICE(0x18e8, 0x6196), USB_DEVICE_DATA(&rt73usb_ops) },
3944     { USB_DEVICE(0x18e8, 0x6229), USB_DEVICE_DATA(&rt73usb_ops) },
3945     diff --git a/drivers/pci/pci-stub.c b/drivers/pci/pci-stub.c
3946     index f7b68ca..4ae494b 100644
3947     --- a/drivers/pci/pci-stub.c
3948     +++ b/drivers/pci/pci-stub.c
3949     @@ -54,6 +54,9 @@ static int __init pci_stub_init(void)
3950     subdevice = PCI_ANY_ID, class=0, class_mask=0;
3951     int fields;
3952    
3953     + if (!strlen(id))
3954     + continue;
3955     +
3956     fields = sscanf(id, "%x:%x:%x:%x:%x:%x",
3957     &vendor, &device, &subvendor, &subdevice,
3958     &class, &class_mask);
3959     diff --git a/drivers/power/ds2760_battery.c b/drivers/power/ds2760_battery.c
3960     index b3c01c1..11e1ac5 100644
3961     --- a/drivers/power/ds2760_battery.c
3962     +++ b/drivers/power/ds2760_battery.c
3963     @@ -212,7 +212,7 @@ static int ds2760_battery_read_status(struct ds2760_device_info *di)
3964     if (di->rem_capacity > 100)
3965     di->rem_capacity = 100;
3966    
3967     - if (di->current_uA >= 100L)
3968     + if (di->current_uA < -100L)
3969     di->life_sec = -((di->accum_current_uAh - di->empty_uAh) * 36L)
3970     / (di->current_uA / 100L);
3971     else
3972     diff --git a/drivers/power/jz4740-battery.c b/drivers/power/jz4740-battery.c
3973     index a8108a7..2bbe04a 100644
3974     --- a/drivers/power/jz4740-battery.c
3975     +++ b/drivers/power/jz4740-battery.c
3976     @@ -47,6 +47,8 @@ struct jz_battery {
3977    
3978     struct power_supply battery;
3979     struct delayed_work work;
3980     +
3981     + struct mutex lock;
3982     };
3983    
3984     static inline struct jz_battery *psy_to_jz_battery(struct power_supply *psy)
3985     @@ -68,6 +70,8 @@ static long jz_battery_read_voltage(struct jz_battery *battery)
3986     unsigned long val;
3987     long voltage;
3988    
3989     + mutex_lock(&battery->lock);
3990     +
3991     INIT_COMPLETION(battery->read_completion);
3992    
3993     enable_irq(battery->irq);
3994     @@ -91,6 +95,8 @@ static long jz_battery_read_voltage(struct jz_battery *battery)
3995     battery->cell->disable(battery->pdev);
3996     disable_irq(battery->irq);
3997    
3998     + mutex_unlock(&battery->lock);
3999     +
4000     return voltage;
4001     }
4002    
4003     @@ -291,6 +297,7 @@ static int __devinit jz_battery_probe(struct platform_device *pdev)
4004     jz_battery->pdev = pdev;
4005    
4006     init_completion(&jz_battery->read_completion);
4007     + mutex_init(&jz_battery->lock);
4008    
4009     INIT_DELAYED_WORK(&jz_battery->work, jz_battery_work);
4010    
4011     diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
4012     index 5856167..dd8242d 100644
4013     --- a/drivers/rtc/rtc-cmos.c
4014     +++ b/drivers/rtc/rtc-cmos.c
4015     @@ -36,6 +36,7 @@
4016     #include <linux/platform_device.h>
4017     #include <linux/mod_devicetable.h>
4018     #include <linux/log2.h>
4019     +#include <linux/pm.h>
4020    
4021     /* this is for "generic access to PC-style RTC" using CMOS_READ/CMOS_WRITE */
4022     #include <asm-generic/rtc.h>
4023     @@ -850,7 +851,7 @@ static void __exit cmos_do_remove(struct device *dev)
4024    
4025     #ifdef CONFIG_PM
4026    
4027     -static int cmos_suspend(struct device *dev, pm_message_t mesg)
4028     +static int cmos_suspend(struct device *dev)
4029     {
4030     struct cmos_rtc *cmos = dev_get_drvdata(dev);
4031     unsigned char tmp;
4032     @@ -898,7 +899,7 @@ static int cmos_suspend(struct device *dev, pm_message_t mesg)
4033     */
4034     static inline int cmos_poweroff(struct device *dev)
4035     {
4036     - return cmos_suspend(dev, PMSG_HIBERNATE);
4037     + return cmos_suspend(dev);
4038     }
4039    
4040     static int cmos_resume(struct device *dev)
4041     @@ -945,9 +946,9 @@ static int cmos_resume(struct device *dev)
4042     return 0;
4043     }
4044    
4045     +static SIMPLE_DEV_PM_OPS(cmos_pm_ops, cmos_suspend, cmos_resume);
4046     +
4047     #else
4048     -#define cmos_suspend NULL
4049     -#define cmos_resume NULL
4050    
4051     static inline int cmos_poweroff(struct device *dev)
4052     {
4053     @@ -1077,7 +1078,7 @@ static void __exit cmos_pnp_remove(struct pnp_dev *pnp)
4054    
4055     static int cmos_pnp_suspend(struct pnp_dev *pnp, pm_message_t mesg)
4056     {
4057     - return cmos_suspend(&pnp->dev, mesg);
4058     + return cmos_suspend(&pnp->dev);
4059     }
4060    
4061     static int cmos_pnp_resume(struct pnp_dev *pnp)
4062     @@ -1157,8 +1158,9 @@ static struct platform_driver cmos_platform_driver = {
4063     .shutdown = cmos_platform_shutdown,
4064     .driver = {
4065     .name = (char *) driver_name,
4066     - .suspend = cmos_suspend,
4067     - .resume = cmos_resume,
4068     +#ifdef CONFIG_PM
4069     + .pm = &cmos_pm_ops,
4070     +#endif
4071     }
4072     };
4073    
4074     diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h
4075     index 0f4ef87..3e6ad23 100644
4076     --- a/drivers/s390/cio/qdio.h
4077     +++ b/drivers/s390/cio/qdio.h
4078     @@ -91,6 +91,12 @@ enum qdio_irq_states {
4079     #define AC1_SC_QEBSM_AVAILABLE 0x02 /* available for subchannel */
4080     #define AC1_SC_QEBSM_ENABLED 0x01 /* enabled for subchannel */
4081    
4082     +/* SIGA flags */
4083     +#define QDIO_SIGA_WRITE 0x00
4084     +#define QDIO_SIGA_READ 0x01
4085     +#define QDIO_SIGA_SYNC 0x02
4086     +#define QDIO_SIGA_QEBSM_FLAG 0x80
4087     +
4088     #ifdef CONFIG_64BIT
4089     static inline int do_sqbs(u64 token, unsigned char state, int queue,
4090     int *start, int *count)
4091     diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
4092     index 5fcfa7f..27de2ea 100644
4093     --- a/drivers/s390/cio/qdio_main.c
4094     +++ b/drivers/s390/cio/qdio_main.c
4095     @@ -29,11 +29,12 @@ MODULE_AUTHOR("Utz Bacher <utz.bacher@de.ibm.com>,"\
4096     MODULE_DESCRIPTION("QDIO base support");
4097     MODULE_LICENSE("GPL");
4098    
4099     -static inline int do_siga_sync(struct subchannel_id schid,
4100     - unsigned int out_mask, unsigned int in_mask)
4101     +static inline int do_siga_sync(unsigned long schid,
4102     + unsigned int out_mask, unsigned int in_mask,
4103     + unsigned int fc)
4104     {
4105     - register unsigned long __fc asm ("0") = 2;
4106     - register struct subchannel_id __schid asm ("1") = schid;
4107     + register unsigned long __fc asm ("0") = fc;
4108     + register unsigned long __schid asm ("1") = schid;
4109     register unsigned long out asm ("2") = out_mask;
4110     register unsigned long in asm ("3") = in_mask;
4111     int cc;
4112     @@ -47,10 +48,11 @@ static inline int do_siga_sync(struct subchannel_id schid,
4113     return cc;
4114     }
4115    
4116     -static inline int do_siga_input(struct subchannel_id schid, unsigned int mask)
4117     +static inline int do_siga_input(unsigned long schid, unsigned int mask,
4118     + unsigned int fc)
4119     {
4120     - register unsigned long __fc asm ("0") = 1;
4121     - register struct subchannel_id __schid asm ("1") = schid;
4122     + register unsigned long __fc asm ("0") = fc;
4123     + register unsigned long __schid asm ("1") = schid;
4124     register unsigned long __mask asm ("2") = mask;
4125     int cc;
4126    
4127     @@ -279,6 +281,8 @@ void qdio_init_buf_states(struct qdio_irq *irq_ptr)
4128     static inline int qdio_siga_sync(struct qdio_q *q, unsigned int output,
4129     unsigned int input)
4130     {
4131     + unsigned long schid = *((u32 *) &q->irq_ptr->schid);
4132     + unsigned int fc = QDIO_SIGA_SYNC;
4133     int cc;
4134    
4135     if (!need_siga_sync(q))
4136     @@ -287,7 +291,12 @@ static inline int qdio_siga_sync(struct qdio_q *q, unsigned int output,
4137     DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "siga-s:%1d", q->nr);
4138     qperf_inc(q, siga_sync);
4139    
4140     - cc = do_siga_sync(q->irq_ptr->schid, output, input);
4141     + if (is_qebsm(q)) {
4142     + schid = q->irq_ptr->sch_token;
4143     + fc |= QDIO_SIGA_QEBSM_FLAG;
4144     + }
4145     +
4146     + cc = do_siga_sync(schid, output, input, fc);
4147     if (cc)
4148     DBF_ERROR("%4x SIGA-S:%2d", SCH_NO(q), cc);
4149     return cc;
4150     @@ -313,8 +322,8 @@ static inline int qdio_siga_sync_all(struct qdio_q *q)
4151    
4152     static int qdio_siga_output(struct qdio_q *q, unsigned int *busy_bit)
4153     {
4154     - unsigned long schid;
4155     - unsigned int fc = 0;
4156     + unsigned long schid = *((u32 *) &q->irq_ptr->schid);
4157     + unsigned int fc = QDIO_SIGA_WRITE;
4158     u64 start_time = 0;
4159     int cc;
4160    
4161     @@ -323,11 +332,8 @@ static int qdio_siga_output(struct qdio_q *q, unsigned int *busy_bit)
4162    
4163     if (is_qebsm(q)) {
4164     schid = q->irq_ptr->sch_token;
4165     - fc |= 0x80;
4166     + fc |= QDIO_SIGA_QEBSM_FLAG;
4167     }
4168     - else
4169     - schid = *((u32 *)&q->irq_ptr->schid);
4170     -
4171     again:
4172     cc = do_siga_output(schid, q->mask, busy_bit, fc);
4173    
4174     @@ -347,12 +353,19 @@ again:
4175    
4176     static inline int qdio_siga_input(struct qdio_q *q)
4177     {
4178     + unsigned long schid = *((u32 *) &q->irq_ptr->schid);
4179     + unsigned int fc = QDIO_SIGA_READ;
4180     int cc;
4181    
4182     DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "siga-r:%1d", q->nr);
4183     qperf_inc(q, siga_read);
4184    
4185     - cc = do_siga_input(q->irq_ptr->schid, q->mask);
4186     + if (is_qebsm(q)) {
4187     + schid = q->irq_ptr->sch_token;
4188     + fc |= QDIO_SIGA_QEBSM_FLAG;
4189     + }
4190     +
4191     + cc = do_siga_input(schid, q->mask, fc);
4192     if (cc)
4193     DBF_ERROR("%4x SIGA-R:%2d", SCH_NO(q), cc);
4194     return cc;
4195     diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c
4196     index 8fd8c62..a1ba52a 100644
4197     --- a/drivers/s390/crypto/ap_bus.c
4198     +++ b/drivers/s390/crypto/ap_bus.c
4199     @@ -154,7 +154,7 @@ static inline int ap_instructions_available(void)
4200     */
4201     static int ap_interrupts_available(void)
4202     {
4203     - return test_facility(1) && test_facility(2);
4204     + return test_facility(2) && test_facility(65);
4205     }
4206    
4207     /**
4208     diff --git a/drivers/scsi/libsas/sas_scsi_host.c b/drivers/scsi/libsas/sas_scsi_host.c
4209     index 29251fa..812d32c 100644
4210     --- a/drivers/scsi/libsas/sas_scsi_host.c
4211     +++ b/drivers/scsi/libsas/sas_scsi_host.c
4212     @@ -647,6 +647,7 @@ void sas_scsi_recover_host(struct Scsi_Host *shost)
4213    
4214     spin_lock_irqsave(shost->host_lock, flags);
4215     list_splice_init(&shost->eh_cmd_q, &eh_work_q);
4216     + shost->host_eh_scheduled = 0;
4217     spin_unlock_irqrestore(shost->host_lock, flags);
4218    
4219     SAS_DPRINTK("Enter %s\n", __func__);
4220     diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c
4221     index 12faf64..7227227 100644
4222     --- a/drivers/scsi/mpt2sas/mpt2sas_base.c
4223     +++ b/drivers/scsi/mpt2sas/mpt2sas_base.c
4224     @@ -2057,9 +2057,9 @@ _base_allocate_memory_pools(struct MPT2SAS_ADAPTER *ioc, int sleep_flag)
4225     /* adjust hba_queue_depth, reply_free_queue_depth,
4226     * and queue_size
4227     */
4228     - ioc->hba_queue_depth -= queue_diff;
4229     - ioc->reply_free_queue_depth -= queue_diff;
4230     - queue_size -= queue_diff;
4231     + ioc->hba_queue_depth -= (queue_diff / 2);
4232     + ioc->reply_free_queue_depth -= (queue_diff / 2);
4233     + queue_size = facts->MaxReplyDescriptorPostQueueDepth;
4234     }
4235     ioc->reply_post_queue_depth = queue_size;
4236    
4237     @@ -3662,6 +3662,11 @@ mpt2sas_base_attach(struct MPT2SAS_ADAPTER *ioc)
4238     ioc->scsih_cmds.status = MPT2_CMD_NOT_USED;
4239     mutex_init(&ioc->scsih_cmds.mutex);
4240    
4241     + /* scsih internal command bits */
4242     + ioc->scsih_cmds.reply = kzalloc(ioc->reply_sz, GFP_KERNEL);
4243     + ioc->scsih_cmds.status = MPT2_CMD_NOT_USED;
4244     + mutex_init(&ioc->scsih_cmds.mutex);
4245     +
4246     /* task management internal command bits */
4247     ioc->tm_cmds.reply = kzalloc(ioc->reply_sz, GFP_KERNEL);
4248     ioc->tm_cmds.status = MPT2_CMD_NOT_USED;
4249     @@ -3786,6 +3791,8 @@ mpt2sas_base_detach(struct MPT2SAS_ADAPTER *ioc)
4250     static void
4251     _base_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase)
4252     {
4253     + mpt2sas_scsih_reset_handler(ioc, reset_phase);
4254     + mpt2sas_ctl_reset_handler(ioc, reset_phase);
4255     switch (reset_phase) {
4256     case MPT2_IOC_PRE_RESET:
4257     dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: "
4258     @@ -3816,8 +3823,6 @@ _base_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase)
4259     "MPT2_IOC_DONE_RESET\n", ioc->name, __func__));
4260     break;
4261     }
4262     - mpt2sas_scsih_reset_handler(ioc, reset_phase);
4263     - mpt2sas_ctl_reset_handler(ioc, reset_phase);
4264     }
4265    
4266     /**
4267     @@ -3871,6 +3876,7 @@ mpt2sas_base_hard_reset_handler(struct MPT2SAS_ADAPTER *ioc, int sleep_flag,
4268     {
4269     int r;
4270     unsigned long flags;
4271     + u8 pe_complete = ioc->wait_for_port_enable_to_complete;
4272    
4273     dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: enter\n", ioc->name,
4274     __func__));
4275     @@ -3913,6 +3919,14 @@ mpt2sas_base_hard_reset_handler(struct MPT2SAS_ADAPTER *ioc, int sleep_flag,
4276     if (r)
4277     goto out;
4278     _base_reset_handler(ioc, MPT2_IOC_AFTER_RESET);
4279     +
4280     + /* If this hard reset is called while port enable is active, then
4281     + * there is no reason to call make_ioc_operational
4282     + */
4283     + if (pe_complete) {
4284     + r = -EFAULT;
4285     + goto out;
4286     + }
4287     r = _base_make_ioc_operational(ioc, sleep_flag);
4288     if (!r)
4289     _base_reset_handler(ioc, MPT2_IOC_DONE_RESET);
4290     diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
4291     index 1a96a00..90bc21e 100644
4292     --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
4293     +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
4294     @@ -819,7 +819,7 @@ _scsih_is_end_device(u32 device_info)
4295     }
4296    
4297     /**
4298     - * mptscsih_get_scsi_lookup - returns scmd entry
4299     + * _scsih_scsi_lookup_get - returns scmd entry
4300     * @ioc: per adapter object
4301     * @smid: system request message index
4302     *
4303     @@ -832,6 +832,28 @@ _scsih_scsi_lookup_get(struct MPT2SAS_ADAPTER *ioc, u16 smid)
4304     }
4305    
4306     /**
4307     + * _scsih_scsi_lookup_get_clear - returns scmd entry
4308     + * @ioc: per adapter object
4309     + * @smid: system request message index
4310     + *
4311     + * Returns the smid stored scmd pointer.
4312     + * Then will derefrence the stored scmd pointer.
4313     + */
4314     +static inline struct scsi_cmnd *
4315     +_scsih_scsi_lookup_get_clear(struct MPT2SAS_ADAPTER *ioc, u16 smid)
4316     +{
4317     + unsigned long flags;
4318     + struct scsi_cmnd *scmd;
4319     +
4320     + spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
4321     + scmd = ioc->scsi_lookup[smid - 1].scmd;
4322     + ioc->scsi_lookup[smid - 1].scmd = NULL;
4323     + spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
4324     +
4325     + return scmd;
4326     +}
4327     +
4328     +/**
4329     * _scsih_scsi_lookup_find_by_scmd - scmd lookup
4330     * @ioc: per adapter object
4331     * @smid: system request message index
4332     @@ -2957,9 +2979,6 @@ _scsih_check_topo_delete_events(struct MPT2SAS_ADAPTER *ioc,
4333     u16 handle;
4334    
4335     for (i = 0 ; i < event_data->NumEntries; i++) {
4336     - if (event_data->PHY[i].PhyStatus &
4337     - MPI2_EVENT_SAS_TOPO_PHYSTATUS_VACANT)
4338     - continue;
4339     handle = le16_to_cpu(event_data->PHY[i].AttachedDevHandle);
4340     if (!handle)
4341     continue;
4342     @@ -3186,7 +3205,7 @@ _scsih_flush_running_cmds(struct MPT2SAS_ADAPTER *ioc)
4343     u16 count = 0;
4344    
4345     for (smid = 1; smid <= ioc->scsiio_depth; smid++) {
4346     - scmd = _scsih_scsi_lookup_get(ioc, smid);
4347     + scmd = _scsih_scsi_lookup_get_clear(ioc, smid);
4348     if (!scmd)
4349     continue;
4350     count++;
4351     @@ -3780,7 +3799,7 @@ _scsih_io_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
4352     u32 response_code = 0;
4353    
4354     mpi_reply = mpt2sas_base_get_reply_virt_addr(ioc, reply);
4355     - scmd = _scsih_scsi_lookup_get(ioc, smid);
4356     + scmd = _scsih_scsi_lookup_get_clear(ioc, smid);
4357     if (scmd == NULL)
4358     return 1;
4359    
4360     @@ -4942,6 +4961,12 @@ _scsih_sas_device_status_change_event(struct MPT2SAS_ADAPTER *ioc,
4361     event_data);
4362     #endif
4363    
4364     + /* In MPI Revision K (0xC), the internal device reset complete was
4365     + * implemented, so avoid setting tm_busy flag for older firmware.
4366     + */
4367     + if ((ioc->facts.HeaderVersion >> 8) < 0xC)
4368     + return;
4369     +
4370     if (event_data->ReasonCode !=
4371     MPI2_EVENT_SAS_DEV_STAT_RC_INTERNAL_DEVICE_RESET &&
4372     event_data->ReasonCode !=
4373     @@ -5036,6 +5061,7 @@ _scsih_sas_broadcast_primative_event(struct MPT2SAS_ADAPTER *ioc,
4374     struct fw_event_work *fw_event)
4375     {
4376     struct scsi_cmnd *scmd;
4377     + struct scsi_device *sdev;
4378     u16 smid, handle;
4379     u32 lun;
4380     struct MPT2SAS_DEVICE *sas_device_priv_data;
4381     @@ -5046,12 +5072,17 @@ _scsih_sas_broadcast_primative_event(struct MPT2SAS_ADAPTER *ioc,
4382     Mpi2EventDataSasBroadcastPrimitive_t *event_data = fw_event->event_data;
4383     #endif
4384     u16 ioc_status;
4385     + unsigned long flags;
4386     + int r;
4387     +
4388     dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "broadcast primative: "
4389     "phy number(%d), width(%d)\n", ioc->name, event_data->PhyNum,
4390     event_data->PortWidth));
4391     dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: enter\n", ioc->name,
4392     __func__));
4393    
4394     + spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
4395     + ioc->broadcast_aen_busy = 0;
4396     termination_count = 0;
4397     query_count = 0;
4398     mpi_reply = ioc->tm_cmds.reply;
4399     @@ -5059,7 +5090,8 @@ _scsih_sas_broadcast_primative_event(struct MPT2SAS_ADAPTER *ioc,
4400     scmd = _scsih_scsi_lookup_get(ioc, smid);
4401     if (!scmd)
4402     continue;
4403     - sas_device_priv_data = scmd->device->hostdata;
4404     + sdev = scmd->device;
4405     + sas_device_priv_data = sdev->hostdata;
4406     if (!sas_device_priv_data || !sas_device_priv_data->sas_target)
4407     continue;
4408     /* skip hidden raid components */
4409     @@ -5075,6 +5107,7 @@ _scsih_sas_broadcast_primative_event(struct MPT2SAS_ADAPTER *ioc,
4410     lun = sas_device_priv_data->lun;
4411     query_count++;
4412    
4413     + spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
4414     mpt2sas_scsih_issue_tm(ioc, handle, 0, 0, lun,
4415     MPI2_SCSITASKMGMT_TASKTYPE_QUERY_TASK, smid, 30, NULL);
4416     ioc->tm_cmds.status = MPT2_CMD_NOT_USED;
4417     @@ -5084,14 +5117,20 @@ _scsih_sas_broadcast_primative_event(struct MPT2SAS_ADAPTER *ioc,
4418     (mpi_reply->ResponseCode ==
4419     MPI2_SCSITASKMGMT_RSP_TM_SUCCEEDED ||
4420     mpi_reply->ResponseCode ==
4421     - MPI2_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC))
4422     + MPI2_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC)) {
4423     + spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
4424     continue;
4425     -
4426     - mpt2sas_scsih_issue_tm(ioc, handle, 0, 0, lun,
4427     - MPI2_SCSITASKMGMT_TASKTYPE_ABRT_TASK_SET, 0, 30, NULL);
4428     + }
4429     + r = mpt2sas_scsih_issue_tm(ioc, handle, sdev->channel, sdev->id,
4430     + sdev->lun, MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK, smid, 30,
4431     + scmd);
4432     + if (r == FAILED)
4433     + sdev_printk(KERN_WARNING, sdev, "task abort: FAILED "
4434     + "scmd(%p)\n", scmd);
4435     termination_count += le32_to_cpu(mpi_reply->TerminationCount);
4436     + spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
4437     }
4438     - ioc->broadcast_aen_busy = 0;
4439     + spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
4440    
4441     dtmprintk(ioc, printk(MPT2SAS_INFO_FMT
4442     "%s - exit, query_count = %d termination_count = %d\n",
4443     @@ -6687,6 +6726,7 @@ _scsih_remove(struct pci_dev *pdev)
4444     destroy_workqueue(wq);
4445    
4446     /* release all the volumes */
4447     + _scsih_ir_shutdown(ioc);
4448     list_for_each_entry_safe(raid_device, next, &ioc->raid_device_list,
4449     list) {
4450     if (raid_device->starget) {
4451     diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
4452     index 9564961..9c9e6d3 100644
4453     --- a/drivers/scsi/sd.c
4454     +++ b/drivers/scsi/sd.c
4455     @@ -1175,6 +1175,12 @@ static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
4456     u64 end_lba = blk_rq_pos(scmd->request) + (scsi_bufflen(scmd) / 512);
4457     u64 bad_lba;
4458     int info_valid;
4459     + /*
4460     + * resid is optional but mostly filled in. When it's unused,
4461     + * its value is zero, so we assume the whole buffer transferred
4462     + */
4463     + unsigned int transferred = scsi_bufflen(scmd) - scsi_get_resid(scmd);
4464     + unsigned int good_bytes;
4465    
4466     if (scmd->request->cmd_type != REQ_TYPE_FS)
4467     return 0;
4468     @@ -1208,7 +1214,8 @@ static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
4469     /* This computation should always be done in terms of
4470     * the resolution of the device's medium.
4471     */
4472     - return (bad_lba - start_lba) * scmd->device->sector_size;
4473     + good_bytes = (bad_lba - start_lba) * scmd->device->sector_size;
4474     + return min(good_bytes, transferred);
4475     }
4476    
4477     /**
4478     diff --git a/drivers/serial/68360serial.c b/drivers/serial/68360serial.c
4479     index 88b1335..bc21eea 100644
4480     --- a/drivers/serial/68360serial.c
4481     +++ b/drivers/serial/68360serial.c
4482     @@ -2428,6 +2428,7 @@ static const struct tty_operations rs_360_ops = {
4483     /* .read_proc = rs_360_read_proc, */
4484     .tiocmget = rs_360_tiocmget,
4485     .tiocmset = rs_360_tiocmset,
4486     + .get_icount = rs_360_get_icount,
4487     };
4488    
4489     static int __init rs_360_init(void)
4490     diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
4491     index 09a5508..b2b40f91 100644
4492     --- a/drivers/serial/8250.c
4493     +++ b/drivers/serial/8250.c
4494     @@ -236,7 +236,8 @@ static const struct serial8250_config uart_config[] = {
4495     .fifo_size = 128,
4496     .tx_loadsz = 128,
4497     .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
4498     - .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
4499     + /* UART_CAP_EFR breaks billionon CF bluetooth card. */
4500     + .flags = UART_CAP_FIFO | UART_CAP_SLEEP,
4501     },
4502     [PORT_16654] = {
4503     .name = "ST16654",
4504     diff --git a/drivers/ssb/pcmcia.c b/drivers/ssb/pcmcia.c
4505     index c7345db..f853379 100644
4506     --- a/drivers/ssb/pcmcia.c
4507     +++ b/drivers/ssb/pcmcia.c
4508     @@ -733,7 +733,7 @@ int ssb_pcmcia_get_invariants(struct ssb_bus *bus,
4509    
4510     /* Fetch the vendor specific tuples. */
4511     res = pcmcia_loop_tuple(bus->host_pcmcia, SSB_PCMCIA_CIS,
4512     - ssb_pcmcia_do_get_invariants, sprom);
4513     + ssb_pcmcia_do_get_invariants, iv);
4514     if ((res == 0) || (res == -ENOSPC))
4515     return 0;
4516    
4517     diff --git a/drivers/staging/bcm/InterfaceInit.c b/drivers/staging/bcm/InterfaceInit.c
4518     index 824f9a4..dc760ef 100644
4519     --- a/drivers/staging/bcm/InterfaceInit.c
4520     +++ b/drivers/staging/bcm/InterfaceInit.c
4521     @@ -4,6 +4,7 @@ static struct usb_device_id InterfaceUsbtable[] = {
4522     { USB_DEVICE(BCM_USB_VENDOR_ID_T3, BCM_USB_PRODUCT_ID_T3) },
4523     { USB_DEVICE(BCM_USB_VENDOR_ID_T3, BCM_USB_PRODUCT_ID_T3B) },
4524     { USB_DEVICE(BCM_USB_VENDOR_ID_T3, BCM_USB_PRODUCT_ID_T3L) },
4525     + { USB_DEVICE(BCM_USB_VENDOR_ID_T3, BCM_USB_PRODUCT_ID_SM250) },
4526     { USB_DEVICE(BCM_USB_VENDOR_ID_ZTE, BCM_USB_PRODUCT_ID_226) },
4527     { USB_DEVICE(BCM_USB_VENDOR_ID_FOXCONN, BCM_USB_PRODUCT_ID_1901) },
4528     {}
4529     diff --git a/drivers/staging/bcm/InterfaceInit.h b/drivers/staging/bcm/InterfaceInit.h
4530     index e7a96e5..6c21625 100644
4531     --- a/drivers/staging/bcm/InterfaceInit.h
4532     +++ b/drivers/staging/bcm/InterfaceInit.h
4533     @@ -8,6 +8,7 @@
4534     #define BCM_USB_PRODUCT_ID_T3 0x0300
4535     #define BCM_USB_PRODUCT_ID_T3B 0x0210
4536     #define BCM_USB_PRODUCT_ID_T3L 0x0220
4537     +#define BCM_USB_PRODUCT_ID_SM250 0xbccd
4538     #define BCM_USB_PRODUCT_ID_SYM 0x15E
4539     #define BCM_USB_PRODUCT_ID_1901 0xe017
4540     #define BCM_USB_PRODUCT_ID_226 0x0132
4541     diff --git a/drivers/staging/brcm80211/sys/wl_mac80211.c b/drivers/staging/brcm80211/sys/wl_mac80211.c
4542     index d060377..cb2041a 100644
4543     --- a/drivers/staging/brcm80211/sys/wl_mac80211.c
4544     +++ b/drivers/staging/brcm80211/sys/wl_mac80211.c
4545     @@ -299,11 +299,8 @@ static void wl_ops_stop(struct ieee80211_hw *hw)
4546     wl_info_t *wl = hw->priv;
4547     ASSERT(wl);
4548     WL_LOCK(wl);
4549     - wl_down(wl);
4550     ieee80211_stop_queues(hw);
4551     WL_UNLOCK(wl);
4552     -
4553     - return;
4554     }
4555    
4556     static int
4557     @@ -336,7 +333,14 @@ wl_ops_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
4558     static void
4559     wl_ops_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
4560     {
4561     - return;
4562     + struct wl_info *wl;
4563     +
4564     + wl = HW_TO_WL(hw);
4565     +
4566     + /* put driver in down state */
4567     + WL_LOCK(wl);
4568     + wl_down(wl);
4569     + WL_UNLOCK(wl);
4570     }
4571    
4572     static int
4573     @@ -972,7 +976,7 @@ static wl_info_t *wl_attach(u16 vendor, u16 device, unsigned long regs,
4574     wl_found++;
4575     return wl;
4576    
4577     - fail:
4578     +fail:
4579     wl_free(wl);
4580     fail1:
4581     return NULL;
4582     @@ -1356,7 +1360,6 @@ wl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
4583     return 0;
4584     }
4585    
4586     -#ifdef LINUXSTA_PS
4587     static int wl_suspend(struct pci_dev *pdev, pm_message_t state)
4588     {
4589     wl_info_t *wl;
4590     @@ -1371,11 +1374,12 @@ static int wl_suspend(struct pci_dev *pdev, pm_message_t state)
4591     return -ENODEV;
4592     }
4593    
4594     + /* only need to flag hw is down for proper resume */
4595     WL_LOCK(wl);
4596     - wl_down(wl);
4597     wl->pub->hw_up = false;
4598     WL_UNLOCK(wl);
4599     - pci_save_state(pdev, wl->pci_psstate);
4600     +
4601     + pci_save_state(pdev);
4602     pci_disable_device(pdev);
4603     return pci_set_power_state(pdev, PCI_D3hot);
4604     }
4605     @@ -1399,7 +1403,7 @@ static int wl_resume(struct pci_dev *pdev)
4606     if (err)
4607     return err;
4608    
4609     - pci_restore_state(pdev, wl->pci_psstate);
4610     + pci_restore_state(pdev);
4611    
4612     err = pci_enable_device(pdev);
4613     if (err)
4614     @@ -1411,13 +1415,12 @@ static int wl_resume(struct pci_dev *pdev)
4615     if ((val & 0x0000ff00) != 0)
4616     pci_write_config_dword(pdev, 0x40, val & 0xffff00ff);
4617    
4618     - WL_LOCK(wl);
4619     - err = wl_up(wl);
4620     - WL_UNLOCK(wl);
4621     -
4622     + /*
4623     + * done. driver will be put in up state
4624     + * in wl_ops_add_interface() call.
4625     + */
4626     return err;
4627     }
4628     -#endif /* LINUXSTA_PS */
4629    
4630     static void wl_remove(struct pci_dev *pdev)
4631     {
4632     @@ -1450,14 +1453,12 @@ static void wl_remove(struct pci_dev *pdev)
4633     }
4634    
4635     static struct pci_driver wl_pci_driver = {
4636     - .name = "brcm80211",
4637     - .probe = wl_pci_probe,
4638     -#ifdef LINUXSTA_PS
4639     - .suspend = wl_suspend,
4640     - .resume = wl_resume,
4641     -#endif /* LINUXSTA_PS */
4642     - .remove = __devexit_p(wl_remove),
4643     - .id_table = wl_id_table,
4644     + .name = "brcm80211",
4645     + .probe = wl_pci_probe,
4646     + .suspend = wl_suspend,
4647     + .resume = wl_resume,
4648     + .remove = __devexit_p(wl_remove),
4649     + .id_table = wl_id_table,
4650     };
4651     #endif /* !BCMSDIO */
4652    
4653     diff --git a/drivers/staging/comedi/drivers/jr3_pci.c b/drivers/staging/comedi/drivers/jr3_pci.c
4654     index 8b383ee..5c6c727 100644
4655     --- a/drivers/staging/comedi/drivers/jr3_pci.c
4656     +++ b/drivers/staging/comedi/drivers/jr3_pci.c
4657     @@ -54,6 +54,7 @@ Devices: [JR3] PCI force sensor board (jr3_pci)
4658    
4659     #define PCI_VENDOR_ID_JR3 0x1762
4660     #define PCI_DEVICE_ID_JR3_1_CHANNEL 0x3111
4661     +#define PCI_DEVICE_ID_JR3_1_CHANNEL_NEW 0x1111
4662     #define PCI_DEVICE_ID_JR3_2_CHANNEL 0x3112
4663     #define PCI_DEVICE_ID_JR3_3_CHANNEL 0x3113
4664     #define PCI_DEVICE_ID_JR3_4_CHANNEL 0x3114
4665     @@ -73,6 +74,8 @@ static DEFINE_PCI_DEVICE_TABLE(jr3_pci_pci_table) = {
4666     {
4667     PCI_VENDOR_ID_JR3, PCI_DEVICE_ID_JR3_1_CHANNEL,
4668     PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {
4669     + PCI_VENDOR_ID_JR3, PCI_DEVICE_ID_JR3_1_CHANNEL_NEW,
4670     + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {
4671     PCI_VENDOR_ID_JR3, PCI_DEVICE_ID_JR3_2_CHANNEL,
4672     PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {
4673     PCI_VENDOR_ID_JR3, PCI_DEVICE_ID_JR3_3_CHANNEL,
4674     @@ -807,6 +810,10 @@ static int jr3_pci_attach(struct comedi_device *dev,
4675     devpriv->n_channels = 1;
4676     }
4677     break;
4678     + case PCI_DEVICE_ID_JR3_1_CHANNEL_NEW:{
4679     + devpriv->n_channels = 1;
4680     + }
4681     + break;
4682     case PCI_DEVICE_ID_JR3_2_CHANNEL:{
4683     devpriv->n_channels = 2;
4684     }
4685     diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c
4686     index 4d1868d..0728c3c 100644
4687     --- a/drivers/staging/comedi/drivers/ni_labpc.c
4688     +++ b/drivers/staging/comedi/drivers/ni_labpc.c
4689     @@ -575,7 +575,8 @@ int labpc_common_attach(struct comedi_device *dev, unsigned long iobase,
4690     /* grab our IRQ */
4691     if (irq) {
4692     isr_flags = 0;
4693     - if (thisboard->bustype == pci_bustype)
4694     + if (thisboard->bustype == pci_bustype
4695     + || thisboard->bustype == pcmcia_bustype)
4696     isr_flags |= IRQF_SHARED;
4697     if (request_irq(irq, labpc_interrupt, isr_flags,
4698     driver_labpc.driver_name, dev)) {
4699     diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
4700     index 3f81ca5..b255c8b 100644
4701     --- a/drivers/staging/hv/blkvsc_drv.c
4702     +++ b/drivers/staging/hv/blkvsc_drv.c
4703     @@ -368,6 +368,7 @@ static int blkvsc_probe(struct device *device)
4704     blkdev->gd->first_minor = 0;
4705     blkdev->gd->fops = &block_ops;
4706     blkdev->gd->private_data = blkdev;
4707     + blkdev->gd->driverfs_dev = &(blkdev->device_ctx->device);
4708     sprintf(blkdev->gd->disk_name, "hd%c", 'a' + devnum);
4709    
4710     blkvsc_do_inquiry(blkdev);
4711     diff --git a/drivers/staging/hv/netvsc.c b/drivers/staging/hv/netvsc.c
4712     index 4c2632c..d7dcc66 100644
4713     --- a/drivers/staging/hv/netvsc.c
4714     +++ b/drivers/staging/hv/netvsc.c
4715     @@ -1236,7 +1236,7 @@ static void NetVscOnChannelCallback(void *Context)
4716     /* ASSERT(device); */
4717    
4718     packet = kzalloc(NETVSC_PACKET_SIZE * sizeof(unsigned char),
4719     - GFP_KERNEL);
4720     + GFP_ATOMIC);
4721     if (!packet)
4722     return;
4723     buffer = packet;
4724     diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c
4725     index 1415352..cb79dff 100644
4726     --- a/drivers/staging/hv/netvsc_drv.c
4727     +++ b/drivers/staging/hv/netvsc_drv.c
4728     @@ -233,6 +233,7 @@ static void netvsc_linkstatus_callback(struct hv_device *device_obj,
4729     if (status == 1) {
4730     netif_carrier_on(net);
4731     netif_wake_queue(net);
4732     + netif_notify_peers(net);
4733     } else {
4734     netif_carrier_off(net);
4735     netif_stop_queue(net);
4736     @@ -355,7 +356,6 @@ static int netvsc_probe(struct device *device)
4737    
4738     /* Set initial state */
4739     netif_carrier_off(net);
4740     - netif_stop_queue(net);
4741    
4742     net_device_ctx = netdev_priv(net);
4743     net_device_ctx->device_ctx = device_ctx;
4744     diff --git a/drivers/staging/iio/adc/ad7476_core.c b/drivers/staging/iio/adc/ad7476_core.c
4745     index deb68c8..b8b54da 100644
4746     --- a/drivers/staging/iio/adc/ad7476_core.c
4747     +++ b/drivers/staging/iio/adc/ad7476_core.c
4748     @@ -68,7 +68,7 @@ static ssize_t ad7476_show_scale(struct device *dev,
4749     /* Corresponds to Vref / 2^(bits) */
4750     unsigned int scale_uv = (st->int_vref_mv * 1000) >> st->chip_info->bits;
4751    
4752     - return sprintf(buf, "%d.%d\n", scale_uv / 1000, scale_uv % 1000);
4753     + return sprintf(buf, "%d.%03d\n", scale_uv / 1000, scale_uv % 1000);
4754     }
4755     static IIO_DEVICE_ATTR(in_scale, S_IRUGO, ad7476_show_scale, NULL, 0);
4756    
4757     diff --git a/drivers/staging/iio/adc/ad799x_core.c b/drivers/staging/iio/adc/ad799x_core.c
4758     index 6309d52..89ccf37 100644
4759     --- a/drivers/staging/iio/adc/ad799x_core.c
4760     +++ b/drivers/staging/iio/adc/ad799x_core.c
4761     @@ -432,7 +432,7 @@ static ssize_t ad799x_show_scale(struct device *dev,
4762     /* Corresponds to Vref / 2^(bits) */
4763     unsigned int scale_uv = (st->int_vref_mv * 1000) >> st->chip_info->bits;
4764    
4765     - return sprintf(buf, "%d.%d\n", scale_uv / 1000, scale_uv % 1000);
4766     + return sprintf(buf, "%d.%03d\n", scale_uv / 1000, scale_uv % 1000);
4767     }
4768    
4769     static IIO_DEVICE_ATTR(in_scale, S_IRUGO, ad799x_show_scale, NULL, 0);
4770     diff --git a/drivers/staging/rt2860/chips/rt3090.c b/drivers/staging/rt2860/chips/rt3090.c
4771     index c2933c6..cbc59f8 100644
4772     --- a/drivers/staging/rt2860/chips/rt3090.c
4773     +++ b/drivers/staging/rt2860/chips/rt3090.c
4774     @@ -51,7 +51,8 @@ void NICInitRT3090RFRegisters(struct rt_rtmp_adapter *pAd)
4775     if (IS_RT3090(pAd)) {
4776     /* Init RF calibration */
4777     /* Driver should toggle RF R30 bit7 before init RF registers */
4778     - u32 RfReg = 0, data;
4779     + u8 RfReg;
4780     + u32 data;
4781    
4782     RT30xxReadRFRegister(pAd, RF_R30, (u8 *)&RfReg);
4783     RfReg |= 0x80;
4784     diff --git a/drivers/staging/rt2860/chips/rt30xx.c b/drivers/staging/rt2860/chips/rt30xx.c
4785     index 4367a19..88eba51 100644
4786     --- a/drivers/staging/rt2860/chips/rt30xx.c
4787     +++ b/drivers/staging/rt2860/chips/rt30xx.c
4788     @@ -53,7 +53,7 @@ struct rt_reg_pair RT30xx_RFRegTable[] = {
4789     ,
4790     {RF_R06, 0x02}
4791     ,
4792     - {RF_R07, 0x70}
4793     + {RF_R07, 0x60}
4794     ,
4795     {RF_R09, 0x0F}
4796     ,
4797     @@ -441,7 +441,7 @@ void RT30xxReverseRFSleepModeSetup(struct rt_rtmp_adapter *pAd)
4798    
4799     /* VCO_IC, RF R7 register Bit 4 & Bit 5 to 1 */
4800     RT30xxReadRFRegister(pAd, RF_R07, &RFValue);
4801     - RFValue |= 0x30;
4802     + RFValue |= 0x20;
4803     RT30xxWriteRFRegister(pAd, RF_R07, RFValue);
4804    
4805     /* Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 1 */
4806     diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c
4807     index ad60cea..caf8b76 100644
4808     --- a/drivers/staging/rt2860/rt_main_dev.c
4809     +++ b/drivers/staging/rt2860/rt_main_dev.c
4810     @@ -483,8 +483,6 @@ struct net_device *RtmpPhyNetDevInit(struct rt_rtmp_adapter *pAd,
4811     net_dev->ml_priv = (void *)pAd;
4812     pAd->net_dev = net_dev;
4813    
4814     - netif_stop_queue(net_dev);
4815     -
4816     return net_dev;
4817    
4818     }
4819     diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c
4820     index cd15daa..aca0c46 100644
4821     --- a/drivers/staging/rt2860/usb_main_dev.c
4822     +++ b/drivers/staging/rt2860/usb_main_dev.c
4823     @@ -106,6 +106,7 @@ struct usb_device_id rtusb_usb_id[] = {
4824     {USB_DEVICE(0x0411, 0x016f)}, /* MelCo.,Inc. WLI-UC-G301N */
4825     {USB_DEVICE(0x1737, 0x0070)}, /* Linksys WUSB100 */
4826     {USB_DEVICE(0x1737, 0x0071)}, /* Linksys WUSB600N */
4827     + {USB_DEVICE(0x1737, 0x0078)}, /* Linksys WUSB100v2 */
4828     {USB_DEVICE(0x0411, 0x00e8)}, /* Buffalo WLI-UC-G300N */
4829     {USB_DEVICE(0x050d, 0x815c)}, /* Belkin F5D8053 */
4830     {USB_DEVICE(0x100D, 0x9031)}, /* Motorola 2770 */
4831     diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c
4832     index f1f0c63..e2b2cd9 100644
4833     --- a/drivers/staging/rtl8712/usb_intf.c
4834     +++ b/drivers/staging/rtl8712/usb_intf.c
4835     @@ -47,54 +47,123 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf,
4836     static void r871xu_dev_remove(struct usb_interface *pusb_intf);
4837    
4838     static struct usb_device_id rtl871x_usb_id_tbl[] = {
4839     - /*92SU
4840     - * Realtek */
4841     - {USB_DEVICE(0x0bda, 0x8171)},
4842     - {USB_DEVICE(0x0bda, 0x8172)},
4843     +
4844     +/* RTL8188SU */
4845     + /* Realtek */
4846     + {USB_DEVICE(0x0BDA, 0x8171)},
4847     {USB_DEVICE(0x0bda, 0x8173)},
4848     - {USB_DEVICE(0x0bda, 0x8174)},
4849     {USB_DEVICE(0x0bda, 0x8712)},
4850     {USB_DEVICE(0x0bda, 0x8713)},
4851     {USB_DEVICE(0x0bda, 0xC512)},
4852     - /* Abocom */
4853     + /* Abocom */
4854     {USB_DEVICE(0x07B8, 0x8188)},
4855     + /* ASUS */
4856     + {USB_DEVICE(0x0B05, 0x1786)},
4857     + {USB_DEVICE(0x0B05, 0x1791)}, /* 11n mode disable */
4858     + /* Belkin */
4859     + {USB_DEVICE(0x050D, 0x945A)},
4860     /* Corega */
4861     - {USB_DEVICE(0x07aa, 0x0047)},
4862     - /* Dlink */
4863     - {USB_DEVICE(0x07d1, 0x3303)},
4864     - {USB_DEVICE(0x07d1, 0x3302)},
4865     - {USB_DEVICE(0x07d1, 0x3300)},
4866     - /* Dlink for Skyworth */
4867     - {USB_DEVICE(0x14b2, 0x3300)},
4868     - {USB_DEVICE(0x14b2, 0x3301)},
4869     - {USB_DEVICE(0x14b2, 0x3302)},
4870     + {USB_DEVICE(0x07AA, 0x0047)},
4871     + /* D-Link */
4872     + {USB_DEVICE(0x2001, 0x3306)},
4873     + {USB_DEVICE(0x07D1, 0x3306)}, /* 11n mode disable */
4874     + /* Edimax */
4875     + {USB_DEVICE(0x7392, 0x7611)},
4876     /* EnGenius */
4877     {USB_DEVICE(0x1740, 0x9603)},
4878     - {USB_DEVICE(0x1740, 0x9605)},
4879     + /* Hawking */
4880     + {USB_DEVICE(0x0E66, 0x0016)},
4881     + /* Hercules */
4882     + {USB_DEVICE(0x06F8, 0xE034)},
4883     + {USB_DEVICE(0x06F8, 0xE032)},
4884     + /* Logitec */
4885     + {USB_DEVICE(0x0789, 0x0167)},
4886     + /* PCI */
4887     + {USB_DEVICE(0x2019, 0xAB28)},
4888     + {USB_DEVICE(0x2019, 0xED16)},
4889     + /* Sitecom */
4890     + {USB_DEVICE(0x0DF6, 0x0057)},
4891     + {USB_DEVICE(0x0DF6, 0x0045)},
4892     + {USB_DEVICE(0x0DF6, 0x0059)}, /* 11n mode disable */
4893     + {USB_DEVICE(0x0DF6, 0x004B)},
4894     + {USB_DEVICE(0x0DF6, 0x0063)},
4895     + /* Sweex */
4896     + {USB_DEVICE(0x177F, 0x0154)},
4897     + /* Thinkware */
4898     + {USB_DEVICE(0x0BDA, 0x5077)},
4899     + /* Toshiba */
4900     + {USB_DEVICE(0x1690, 0x0752)},
4901     + /* - */
4902     + {USB_DEVICE(0x20F4, 0x646B)},
4903     + {USB_DEVICE(0x083A, 0xC512)},
4904     +
4905     +/* RTL8191SU */
4906     + /* Realtek */
4907     + {USB_DEVICE(0x0BDA, 0x8172)},
4908     + /* Amigo */
4909     + {USB_DEVICE(0x0EB0, 0x9061)},
4910     + /* ASUS/EKB */
4911     + {USB_DEVICE(0x0BDA, 0x8172)},
4912     + {USB_DEVICE(0x13D3, 0x3323)},
4913     + {USB_DEVICE(0x13D3, 0x3311)}, /* 11n mode disable */
4914     + {USB_DEVICE(0x13D3, 0x3342)},
4915     + /* ASUS/EKBLenovo */
4916     + {USB_DEVICE(0x13D3, 0x3333)},
4917     + {USB_DEVICE(0x13D3, 0x3334)},
4918     + {USB_DEVICE(0x13D3, 0x3335)}, /* 11n mode disable */
4919     + {USB_DEVICE(0x13D3, 0x3336)}, /* 11n mode disable */
4920     + /* ASUS/Media BOX */
4921     + {USB_DEVICE(0x13D3, 0x3309)},
4922     /* Belkin */
4923     - {USB_DEVICE(0x050d, 0x815F)},
4924     - {USB_DEVICE(0x050d, 0x945A)},
4925     - {USB_DEVICE(0x050d, 0x845A)},
4926     - /* Guillemot */
4927     - {USB_DEVICE(0x06f8, 0xe031)},
4928     + {USB_DEVICE(0x050D, 0x815F)},
4929     + /* D-Link */
4930     + {USB_DEVICE(0x07D1, 0x3302)},
4931     + {USB_DEVICE(0x07D1, 0x3300)},
4932     + {USB_DEVICE(0x07D1, 0x3303)},
4933     /* Edimax */
4934     - {USB_DEVICE(0x7392, 0x7611)},
4935     {USB_DEVICE(0x7392, 0x7612)},
4936     - {USB_DEVICE(0x7392, 0x7622)},
4937     - /* Sitecom */
4938     - {USB_DEVICE(0x0DF6, 0x0045)},
4939     + /* EnGenius */
4940     + {USB_DEVICE(0x1740, 0x9605)},
4941     + /* Guillemot */
4942     + {USB_DEVICE(0x06F8, 0xE031)},
4943     /* Hawking */
4944     {USB_DEVICE(0x0E66, 0x0015)},
4945     - {USB_DEVICE(0x0E66, 0x0016)},
4946     - {USB_DEVICE(0x0b05, 0x1786)},
4947     - {USB_DEVICE(0x0b05, 0x1791)}, /* 11n mode disable */
4948     -
4949     + /* Mediao */
4950     {USB_DEVICE(0x13D3, 0x3306)},
4951     - {USB_DEVICE(0x13D3, 0x3309)},
4952     + /* PCI */
4953     + {USB_DEVICE(0x2019, 0xED18)},
4954     + {USB_DEVICE(0x2019, 0x4901)},
4955     + /* Sitecom */
4956     + {USB_DEVICE(0x0DF6, 0x0058)},
4957     + {USB_DEVICE(0x0DF6, 0x0049)},
4958     + {USB_DEVICE(0x0DF6, 0x004C)},
4959     + {USB_DEVICE(0x0DF6, 0x0064)},
4960     + /* Skyworth */
4961     + {USB_DEVICE(0x14b2, 0x3300)},
4962     + {USB_DEVICE(0x14b2, 0x3301)},
4963     + {USB_DEVICE(0x14B2, 0x3302)},
4964     + /* - */
4965     + {USB_DEVICE(0x04F2, 0xAFF2)},
4966     + {USB_DEVICE(0x04F2, 0xAFF5)},
4967     + {USB_DEVICE(0x04F2, 0xAFF6)},
4968     + {USB_DEVICE(0x13D3, 0x3339)},
4969     + {USB_DEVICE(0x13D3, 0x3340)}, /* 11n mode disable */
4970     + {USB_DEVICE(0x13D3, 0x3341)}, /* 11n mode disable */
4971     {USB_DEVICE(0x13D3, 0x3310)},
4972     - {USB_DEVICE(0x13D3, 0x3311)}, /* 11n mode disable */
4973     {USB_DEVICE(0x13D3, 0x3325)},
4974     - {USB_DEVICE(0x083A, 0xC512)},
4975     +
4976     +/* RTL8192SU */
4977     + /* Realtek */
4978     + {USB_DEVICE(0x0BDA, 0x8174)},
4979     + {USB_DEVICE(0x0BDA, 0x8174)},
4980     + /* Belkin */
4981     + {USB_DEVICE(0x050D, 0x845A)},
4982     + /* Corega */
4983     + {USB_DEVICE(0x07AA, 0x0051)},
4984     + /* Edimax */
4985     + {USB_DEVICE(0x7392, 0x7622)},
4986     + /* NEC */
4987     + {USB_DEVICE(0x0409, 0x02B6)},
4988     {}
4989     };
4990    
4991     @@ -103,8 +172,20 @@ MODULE_DEVICE_TABLE(usb, rtl871x_usb_id_tbl);
4992     static struct specific_device_id specific_device_id_tbl[] = {
4993     {.idVendor = 0x0b05, .idProduct = 0x1791,
4994     .flags = SPEC_DEV_ID_DISABLE_HT},
4995     + {.idVendor = 0x0df6, .idProduct = 0x0059,
4996     + .flags = SPEC_DEV_ID_DISABLE_HT},
4997     + {.idVendor = 0x13d3, .idProduct = 0x3306,
4998     + .flags = SPEC_DEV_ID_DISABLE_HT},
4999     {.idVendor = 0x13D3, .idProduct = 0x3311,
5000     .flags = SPEC_DEV_ID_DISABLE_HT},
5001     + {.idVendor = 0x13d3, .idProduct = 0x3335,
5002     + .flags = SPEC_DEV_ID_DISABLE_HT},
5003     + {.idVendor = 0x13d3, .idProduct = 0x3336,
5004     + .flags = SPEC_DEV_ID_DISABLE_HT},
5005     + {.idVendor = 0x13d3, .idProduct = 0x3340,
5006     + .flags = SPEC_DEV_ID_DISABLE_HT},
5007     + {.idVendor = 0x13d3, .idProduct = 0x3341,
5008     + .flags = SPEC_DEV_ID_DISABLE_HT},
5009     {}
5010     };
5011    
5012     diff --git a/drivers/staging/speakup/kobjects.c b/drivers/staging/speakup/kobjects.c
5013     index cc79f9e..a082f8d 100644
5014     --- a/drivers/staging/speakup/kobjects.c
5015     +++ b/drivers/staging/speakup/kobjects.c
5016     @@ -332,7 +332,7 @@ static ssize_t silent_store(struct kobject *kobj, struct kobj_attribute *attr,
5017     unsigned long flags;
5018    
5019     len = strlen(buf);
5020     - if (len > 0 || len < 3) {
5021     + if (len > 0 && len < 3) {
5022     ch = buf[0];
5023     if (ch == '\n')
5024     ch = '0';
5025     diff --git a/drivers/staging/usbip/vhci_hcd.c b/drivers/staging/usbip/vhci_hcd.c
5026     index 832608d..08bd26a 100644
5027     --- a/drivers/staging/usbip/vhci_hcd.c
5028     +++ b/drivers/staging/usbip/vhci_hcd.c
5029     @@ -799,20 +799,6 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
5030     spin_unlock_irqrestore(&vdev->priv_lock, flags2);
5031     }
5032    
5033     -
5034     - if (!vdev->ud.tcp_socket) {
5035     - /* tcp connection is closed */
5036     - usbip_uinfo("vhci_hcd: vhci_urb_dequeue() gives back urb %p\n",
5037     - urb);
5038     -
5039     - usb_hcd_unlink_urb_from_ep(hcd, urb);
5040     -
5041     - spin_unlock_irqrestore(&the_controller->lock, flags);
5042     - usb_hcd_giveback_urb(vhci_to_hcd(the_controller), urb,
5043     - urb->status);
5044     - spin_lock_irqsave(&the_controller->lock, flags);
5045     - }
5046     -
5047     spin_unlock_irqrestore(&the_controller->lock, flags);
5048    
5049     usbip_dbg_vhci_hc("leave\n");
5050     diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
5051     index d0e9e02..080e85f 100644
5052     --- a/drivers/staging/zram/zram_drv.c
5053     +++ b/drivers/staging/zram/zram_drv.c
5054     @@ -227,6 +227,7 @@ static int zram_read(struct zram *zram, struct bio *bio)
5055    
5056     if (zram_test_flag(zram, index, ZRAM_ZERO)) {
5057     handle_zero_page(page);
5058     + index++;
5059     continue;
5060     }
5061    
5062     @@ -235,12 +236,14 @@ static int zram_read(struct zram *zram, struct bio *bio)
5063     pr_debug("Read before write: sector=%lu, size=%u",
5064     (ulong)(bio->bi_sector), bio->bi_size);
5065     /* Do nothing */
5066     + index++;
5067     continue;
5068     }
5069    
5070     /* Page is stored uncompressed since it's incompressible */
5071     if (unlikely(zram_test_flag(zram, index, ZRAM_UNCOMPRESSED))) {
5072     handle_uncompressed_page(zram, page, index);
5073     + index++;
5074     continue;
5075     }
5076    
5077     @@ -320,6 +323,7 @@ static int zram_write(struct zram *zram, struct bio *bio)
5078     mutex_unlock(&zram->lock);
5079     zram_stat_inc(&zram->stats.pages_zero);
5080     zram_set_flag(zram, index, ZRAM_ZERO);
5081     + index++;
5082     continue;
5083     }
5084    
5085     diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
5086     index c5f8e5b..dc74295 100644
5087     --- a/drivers/tty/n_gsm.c
5088     +++ b/drivers/tty/n_gsm.c
5089     @@ -2375,6 +2375,7 @@ static int gsmld_config(struct tty_struct *tty, struct gsm_mux *gsm,
5090    
5091     gsm->initiator = c->initiator;
5092     gsm->mru = c->mru;
5093     + gsm->mtu = c->mtu;
5094     gsm->encoding = c->encapsulation;
5095     gsm->adaption = c->adaption;
5096     gsm->n2 = c->n2;
5097     diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
5098     index c556ed9..81f1395 100644
5099     --- a/drivers/tty/sysrq.c
5100     +++ b/drivers/tty/sysrq.c
5101     @@ -46,7 +46,7 @@
5102     #include <asm/irq_regs.h>
5103    
5104     /* Whether we react on sysrq keys or just ignore them */
5105     -static int __read_mostly sysrq_enabled = 1;
5106     +static int __read_mostly sysrq_enabled = SYSRQ_DEFAULT_ENABLE;
5107     static bool __read_mostly sysrq_always_enabled;
5108    
5109     static bool sysrq_on(void)
5110     @@ -571,6 +571,7 @@ struct sysrq_state {
5111     unsigned int alt_use;
5112     bool active;
5113     bool need_reinject;
5114     + bool reinjecting;
5115     };
5116    
5117     static void sysrq_reinject_alt_sysrq(struct work_struct *work)
5118     @@ -581,6 +582,10 @@ static void sysrq_reinject_alt_sysrq(struct work_struct *work)
5119     unsigned int alt_code = sysrq->alt_use;
5120    
5121     if (sysrq->need_reinject) {
5122     + /* we do not want the assignment to be reordered */
5123     + sysrq->reinjecting = true;
5124     + mb();
5125     +
5126     /* Simulate press and release of Alt + SysRq */
5127     input_inject_event(handle, EV_KEY, alt_code, 1);
5128     input_inject_event(handle, EV_KEY, KEY_SYSRQ, 1);
5129     @@ -589,6 +594,9 @@ static void sysrq_reinject_alt_sysrq(struct work_struct *work)
5130     input_inject_event(handle, EV_KEY, KEY_SYSRQ, 0);
5131     input_inject_event(handle, EV_KEY, alt_code, 0);
5132     input_inject_event(handle, EV_SYN, SYN_REPORT, 1);
5133     +
5134     + mb();
5135     + sysrq->reinjecting = false;
5136     }
5137     }
5138    
5139     @@ -599,6 +607,13 @@ static bool sysrq_filter(struct input_handle *handle,
5140     bool was_active = sysrq->active;
5141     bool suppress;
5142    
5143     + /*
5144     + * Do not filter anything if we are in the process of re-injecting
5145     + * Alt+SysRq combination.
5146     + */
5147     + if (sysrq->reinjecting)
5148     + return false;
5149     +
5150     switch (type) {
5151    
5152     case EV_SYN:
5153     @@ -629,7 +644,7 @@ static bool sysrq_filter(struct input_handle *handle,
5154     sysrq->alt_use = sysrq->alt;
5155     /*
5156     * If nothing else will be pressed we'll need
5157     - * to * re-inject Alt-SysRq keysroke.
5158     + * to re-inject Alt-SysRq keysroke.
5159     */
5160     sysrq->need_reinject = true;
5161     }
5162     diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
5163     index d6ede98..4ab49d4 100644
5164     --- a/drivers/usb/class/cdc-acm.c
5165     +++ b/drivers/usb/class/cdc-acm.c
5166     @@ -1607,6 +1607,7 @@ static const struct usb_device_id acm_ids[] = {
5167     { NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
5168     { NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
5169     { NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
5170     + { NOKIA_PCSUITE_ACM_INFO(0x0302), }, /* Nokia N8 */
5171     { SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
5172    
5173     /* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
5174     diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c
5175     index 3799573..4de52dc 100644
5176     --- a/drivers/usb/core/hcd-pci.c
5177     +++ b/drivers/usb/core/hcd-pci.c
5178     @@ -406,7 +406,12 @@ static int suspend_common(struct device *dev, bool do_wakeup)
5179     return retval;
5180     }
5181    
5182     - synchronize_irq(pci_dev->irq);
5183     + /* If MSI-X is enabled, the driver will have synchronized all vectors
5184     + * in pci_suspend(). If MSI or legacy PCI is enabled, that will be
5185     + * synchronized here.
5186     + */
5187     + if (!hcd->msix_enabled)
5188     + synchronize_irq(pci_dev->irq);
5189    
5190     /* Downstream ports from this root hub should already be quiesced, so
5191     * there will be no DMA activity. Now we can shut down the upstream
5192     diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
5193     index ced846a..8aa6b51 100644
5194     --- a/drivers/usb/core/hcd.c
5195     +++ b/drivers/usb/core/hcd.c
5196     @@ -1956,7 +1956,6 @@ int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg)
5197    
5198     dev_dbg(&rhdev->dev, "usb %s%s\n",
5199     (msg.event & PM_EVENT_AUTO ? "auto-" : ""), "resume");
5200     - clear_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags);
5201     if (!hcd->driver->bus_resume)
5202     return -ENOENT;
5203     if (hcd->state == HC_STATE_RUNNING)
5204     @@ -1964,6 +1963,7 @@ int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg)
5205    
5206     hcd->state = HC_STATE_RESUMING;
5207     status = hcd->driver->bus_resume(hcd);
5208     + clear_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags);
5209     if (status == 0) {
5210     /* TRSMRCY = 10 msec */
5211     msleep(10);
5212     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
5213     index 27115b4..31edd87 100644
5214     --- a/drivers/usb/core/hub.c
5215     +++ b/drivers/usb/core/hub.c
5216     @@ -677,6 +677,8 @@ static void hub_init_func3(struct work_struct *ws);
5217     static void hub_activate(struct usb_hub *hub, enum hub_activation_type type)
5218     {
5219     struct usb_device *hdev = hub->hdev;
5220     + struct usb_hcd *hcd;
5221     + int ret;
5222     int port1;
5223     int status;
5224     bool need_debounce_delay = false;
5225     @@ -715,6 +717,25 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type)
5226     usb_autopm_get_interface_no_resume(
5227     to_usb_interface(hub->intfdev));
5228     return; /* Continues at init2: below */
5229     + } else if (type == HUB_RESET_RESUME) {
5230     + /* The internal host controller state for the hub device
5231     + * may be gone after a host power loss on system resume.
5232     + * Update the device's info so the HW knows it's a hub.
5233     + */
5234     + hcd = bus_to_hcd(hdev->bus);
5235     + if (hcd->driver->update_hub_device) {
5236     + ret = hcd->driver->update_hub_device(hcd, hdev,
5237     + &hub->tt, GFP_NOIO);
5238     + if (ret < 0) {
5239     + dev_err(hub->intfdev, "Host not "
5240     + "accepting hub info "
5241     + "update.\n");
5242     + dev_err(hub->intfdev, "LS/FS devices "
5243     + "and hubs may not work "
5244     + "under this hub\n.");
5245     + }
5246     + }
5247     + hub_power_on(hub, true);
5248     } else {
5249     hub_power_on(hub, true);
5250     }
5251     @@ -2723,6 +2744,11 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
5252     udev->ttport = hdev->ttport;
5253     } else if (udev->speed != USB_SPEED_HIGH
5254     && hdev->speed == USB_SPEED_HIGH) {
5255     + if (!hub->tt.hub) {
5256     + dev_err(&udev->dev, "parent hub has no TT\n");
5257     + retval = -EINVAL;
5258     + goto fail;
5259     + }
5260     udev->tt = &hub->tt;
5261     udev->ttport = port1;
5262     }
5263     diff --git a/drivers/usb/gadget/printer.c b/drivers/usb/gadget/printer.c
5264     index 2fc8636..12ff6cf 100644
5265     --- a/drivers/usb/gadget/printer.c
5266     +++ b/drivers/usb/gadget/printer.c
5267     @@ -131,31 +131,31 @@ static struct printer_dev usb_printer_gadget;
5268     * parameters are in UTF-8 (superset of ASCII's 7 bit characters).
5269     */
5270    
5271     -static ushort __initdata idVendor;
5272     +static ushort idVendor;
5273     module_param(idVendor, ushort, S_IRUGO);
5274     MODULE_PARM_DESC(idVendor, "USB Vendor ID");
5275    
5276     -static ushort __initdata idProduct;
5277     +static ushort idProduct;
5278     module_param(idProduct, ushort, S_IRUGO);
5279     MODULE_PARM_DESC(idProduct, "USB Product ID");
5280    
5281     -static ushort __initdata bcdDevice;
5282     +static ushort bcdDevice;
5283     module_param(bcdDevice, ushort, S_IRUGO);
5284     MODULE_PARM_DESC(bcdDevice, "USB Device version (BCD)");
5285    
5286     -static char *__initdata iManufacturer;
5287     +static char *iManufacturer;
5288     module_param(iManufacturer, charp, S_IRUGO);
5289     MODULE_PARM_DESC(iManufacturer, "USB Manufacturer string");
5290    
5291     -static char *__initdata iProduct;
5292     +static char *iProduct;
5293     module_param(iProduct, charp, S_IRUGO);
5294     MODULE_PARM_DESC(iProduct, "USB Product string");
5295    
5296     -static char *__initdata iSerialNum;
5297     +static char *iSerialNum;
5298     module_param(iSerialNum, charp, S_IRUGO);
5299     MODULE_PARM_DESC(iSerialNum, "1");
5300    
5301     -static char *__initdata iPNPstring;
5302     +static char *iPNPstring;
5303     module_param(iPNPstring, charp, S_IRUGO);
5304     MODULE_PARM_DESC(iPNPstring, "MFG:linux;MDL:g_printer;CLS:PRINTER;SN:1;");
5305    
5306     @@ -1596,13 +1596,12 @@ cleanup(void)
5307     int status;
5308    
5309     mutex_lock(&usb_printer_gadget.lock_printer_io);
5310     - class_destroy(usb_gadget_class);
5311     - unregister_chrdev_region(g_printer_devno, 2);
5312     -
5313     status = usb_gadget_unregister_driver(&printer_driver);
5314     if (status)
5315     ERROR(dev, "usb_gadget_unregister_driver %x\n", status);
5316    
5317     + unregister_chrdev_region(g_printer_devno, 2);
5318     + class_destroy(usb_gadget_class);
5319     mutex_unlock(&usb_printer_gadget.lock_printer_io);
5320     }
5321     module_exit(cleanup);
5322     diff --git a/drivers/usb/host/ehci-au1xxx.c b/drivers/usb/host/ehci-au1xxx.c
5323     index 2baf8a8..a869e3c 100644
5324     --- a/drivers/usb/host/ehci-au1xxx.c
5325     +++ b/drivers/usb/host/ehci-au1xxx.c
5326     @@ -227,8 +227,8 @@ static int ehci_hcd_au1xxx_drv_suspend(struct device *dev)
5327     * mark HW unaccessible. The PM and USB cores make sure that
5328     * the root hub is either suspended or stopped.
5329     */
5330     - spin_lock_irqsave(&ehci->lock, flags);
5331     ehci_prepare_ports_for_controller_suspend(ehci, device_may_wakeup(dev));
5332     + spin_lock_irqsave(&ehci->lock, flags);
5333     ehci_writel(ehci, 0, &ehci->regs->intr_enable);
5334     (void)ehci_readl(ehci, &ehci->regs->intr_enable);
5335    
5336     diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
5337     index e906280..6716312 100644
5338     --- a/drivers/usb/host/ehci-hcd.c
5339     +++ b/drivers/usb/host/ehci-hcd.c
5340     @@ -114,6 +114,9 @@ MODULE_PARM_DESC(hird, "host initiated resume duration, +1 for each 75us\n");
5341    
5342     #define INTR_MASK (STS_IAA | STS_FATAL | STS_PCD | STS_ERR | STS_INT)
5343    
5344     +/* for ASPM quirk of ISOC on AMD SB800 */
5345     +static struct pci_dev *amd_nb_dev;
5346     +
5347     /*-------------------------------------------------------------------------*/
5348    
5349     #include "ehci.h"
5350     @@ -529,6 +532,11 @@ static void ehci_stop (struct usb_hcd *hcd)
5351     spin_unlock_irq (&ehci->lock);
5352     ehci_mem_cleanup (ehci);
5353    
5354     + if (amd_nb_dev) {
5355     + pci_dev_put(amd_nb_dev);
5356     + amd_nb_dev = NULL;
5357     + }
5358     +
5359     #ifdef EHCI_STATS
5360     ehci_dbg (ehci, "irq normal %ld err %ld reclaim %ld (lost %ld)\n",
5361     ehci->stats.normal, ehci->stats.error, ehci->stats.reclaim,
5362     @@ -564,6 +572,8 @@ static int ehci_init(struct usb_hcd *hcd)
5363     ehci->iaa_watchdog.function = ehci_iaa_watchdog;
5364     ehci->iaa_watchdog.data = (unsigned long) ehci;
5365    
5366     + hcc_params = ehci_readl(ehci, &ehci->caps->hcc_params);
5367     +
5368     /*
5369     * hw default: 1K periodic list heads, one per frame.
5370     * periodic_size can shrink by USBCMD update if hcc_params allows.
5371     @@ -571,11 +581,20 @@ static int ehci_init(struct usb_hcd *hcd)
5372     ehci->periodic_size = DEFAULT_I_TDPS;
5373     INIT_LIST_HEAD(&ehci->cached_itd_list);
5374     INIT_LIST_HEAD(&ehci->cached_sitd_list);
5375     +
5376     + if (HCC_PGM_FRAMELISTLEN(hcc_params)) {
5377     + /* periodic schedule size can be smaller than default */
5378     + switch (EHCI_TUNE_FLS) {
5379     + case 0: ehci->periodic_size = 1024; break;
5380     + case 1: ehci->periodic_size = 512; break;
5381     + case 2: ehci->periodic_size = 256; break;
5382     + default: BUG();
5383     + }
5384     + }
5385     if ((retval = ehci_mem_init(ehci, GFP_KERNEL)) < 0)
5386     return retval;
5387    
5388     /* controllers may cache some of the periodic schedule ... */
5389     - hcc_params = ehci_readl(ehci, &ehci->caps->hcc_params);
5390     if (HCC_ISOC_CACHE(hcc_params)) // full frame cache
5391     ehci->i_thresh = 2 + 8;
5392     else // N microframes cached
5393     @@ -629,12 +648,6 @@ static int ehci_init(struct usb_hcd *hcd)
5394     /* periodic schedule size can be smaller than default */
5395     temp &= ~(3 << 2);
5396     temp |= (EHCI_TUNE_FLS << 2);
5397     - switch (EHCI_TUNE_FLS) {
5398     - case 0: ehci->periodic_size = 1024; break;
5399     - case 1: ehci->periodic_size = 512; break;
5400     - case 2: ehci->periodic_size = 256; break;
5401     - default: BUG();
5402     - }
5403     }
5404     if (HCC_LPM(hcc_params)) {
5405     /* support link power management EHCI 1.1 addendum */
5406     diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
5407     index 796ea0c..8a515f0 100644
5408     --- a/drivers/usb/host/ehci-hub.c
5409     +++ b/drivers/usb/host/ehci-hub.c
5410     @@ -111,6 +111,7 @@ static void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci,
5411     {
5412     int port;
5413     u32 temp;
5414     + unsigned long flags;
5415    
5416     /* If remote wakeup is enabled for the root hub but disabled
5417     * for the controller, we must adjust all the port wakeup flags
5418     @@ -120,6 +121,8 @@ static void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci,
5419     if (!ehci_to_hcd(ehci)->self.root_hub->do_remote_wakeup || do_wakeup)
5420     return;
5421    
5422     + spin_lock_irqsave(&ehci->lock, flags);
5423     +
5424     /* clear phy low-power mode before changing wakeup flags */
5425     if (ehci->has_hostpc) {
5426     port = HCS_N_PORTS(ehci->hcs_params);
5427     @@ -131,7 +134,9 @@ static void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci,
5428     temp = ehci_readl(ehci, hostpc_reg);
5429     ehci_writel(ehci, temp & ~HOSTPC_PHCD, hostpc_reg);
5430     }
5431     + spin_unlock_irqrestore(&ehci->lock, flags);
5432     msleep(5);
5433     + spin_lock_irqsave(&ehci->lock, flags);
5434     }
5435    
5436     port = HCS_N_PORTS(ehci->hcs_params);
5437     @@ -170,6 +175,8 @@ static void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci,
5438     /* Does the root hub have a port wakeup pending? */
5439     if (!suspending && (ehci_readl(ehci, &ehci->regs->status) & STS_PCD))
5440     usb_hcd_resume_root_hub(ehci_to_hcd(ehci));
5441     +
5442     + spin_unlock_irqrestore(&ehci->lock, flags);
5443     }
5444    
5445     static int ehci_bus_suspend (struct usb_hcd *hcd)
5446     diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
5447     index 655f3c9..331ab20 100644
5448     --- a/drivers/usb/host/ehci-pci.c
5449     +++ b/drivers/usb/host/ehci-pci.c
5450     @@ -41,6 +41,42 @@ static int ehci_pci_reinit(struct ehci_hcd *ehci, struct pci_dev *pdev)
5451     return 0;
5452     }
5453    
5454     +static int ehci_quirk_amd_hudson(struct ehci_hcd *ehci)
5455     +{
5456     + struct pci_dev *amd_smbus_dev;
5457     + u8 rev = 0;
5458     +
5459     + amd_smbus_dev = pci_get_device(PCI_VENDOR_ID_ATI, 0x4385, NULL);
5460     + if (amd_smbus_dev) {
5461     + pci_read_config_byte(amd_smbus_dev, PCI_REVISION_ID, &rev);
5462     + if (rev < 0x40) {
5463     + pci_dev_put(amd_smbus_dev);
5464     + amd_smbus_dev = NULL;
5465     + return 0;
5466     + }
5467     + } else {
5468     + amd_smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD, 0x780b, NULL);
5469     + if (!amd_smbus_dev)
5470     + return 0;
5471     + pci_read_config_byte(amd_smbus_dev, PCI_REVISION_ID, &rev);
5472     + if (rev < 0x11 || rev > 0x18) {
5473     + pci_dev_put(amd_smbus_dev);
5474     + amd_smbus_dev = NULL;
5475     + return 0;
5476     + }
5477     + }
5478     +
5479     + if (!amd_nb_dev)
5480     + amd_nb_dev = pci_get_device(PCI_VENDOR_ID_AMD, 0x1510, NULL);
5481     +
5482     + ehci_info(ehci, "QUIRK: Enable exception for AMD Hudson ASPM\n");
5483     +
5484     + pci_dev_put(amd_smbus_dev);
5485     + amd_smbus_dev = NULL;
5486     +
5487     + return 1;
5488     +}
5489     +
5490     /* called during probe() after chip reset completes */
5491     static int ehci_pci_setup(struct usb_hcd *hcd)
5492     {
5493     @@ -99,6 +135,9 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
5494     /* cache this readonly data; minimize chip reads */
5495     ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params);
5496    
5497     + if (ehci_quirk_amd_hudson(ehci))
5498     + ehci->amd_l1_fix = 1;
5499     +
5500     retval = ehci_halt(ehci);
5501     if (retval)
5502     return retval;
5503     @@ -321,8 +360,8 @@ static int ehci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup)
5504     * mark HW unaccessible. The PM and USB cores make sure that
5505     * the root hub is either suspended or stopped.
5506     */
5507     - spin_lock_irqsave (&ehci->lock, flags);
5508     ehci_prepare_ports_for_controller_suspend(ehci, do_wakeup);
5509     + spin_lock_irqsave (&ehci->lock, flags);
5510     ehci_writel(ehci, 0, &ehci->regs->intr_enable);
5511     (void)ehci_readl(ehci, &ehci->regs->intr_enable);
5512    
5513     diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
5514     index d9f78eb..aa46f57 100644
5515     --- a/drivers/usb/host/ehci-sched.c
5516     +++ b/drivers/usb/host/ehci-sched.c
5517     @@ -1590,6 +1590,63 @@ itd_link (struct ehci_hcd *ehci, unsigned frame, struct ehci_itd *itd)
5518     *hw_p = cpu_to_hc32(ehci, itd->itd_dma | Q_TYPE_ITD);
5519     }
5520    
5521     +#define AB_REG_BAR_LOW 0xe0
5522     +#define AB_REG_BAR_HIGH 0xe1
5523     +#define AB_INDX(addr) ((addr) + 0x00)
5524     +#define AB_DATA(addr) ((addr) + 0x04)
5525     +#define NB_PCIE_INDX_ADDR 0xe0
5526     +#define NB_PCIE_INDX_DATA 0xe4
5527     +#define NB_PIF0_PWRDOWN_0 0x01100012
5528     +#define NB_PIF0_PWRDOWN_1 0x01100013
5529     +
5530     +static void ehci_quirk_amd_L1(struct ehci_hcd *ehci, int disable)
5531     +{
5532     + u32 addr, addr_low, addr_high, val;
5533     +
5534     + outb_p(AB_REG_BAR_LOW, 0xcd6);
5535     + addr_low = inb_p(0xcd7);
5536     + outb_p(AB_REG_BAR_HIGH, 0xcd6);
5537     + addr_high = inb_p(0xcd7);
5538     + addr = addr_high << 8 | addr_low;
5539     + outl_p(0x30, AB_INDX(addr));
5540     + outl_p(0x40, AB_DATA(addr));
5541     + outl_p(0x34, AB_INDX(addr));
5542     + val = inl_p(AB_DATA(addr));
5543     +
5544     + if (disable) {
5545     + val &= ~0x8;
5546     + val |= (1 << 4) | (1 << 9);
5547     + } else {
5548     + val |= 0x8;
5549     + val &= ~((1 << 4) | (1 << 9));
5550     + }
5551     + outl_p(val, AB_DATA(addr));
5552     +
5553     + if (amd_nb_dev) {
5554     + addr = NB_PIF0_PWRDOWN_0;
5555     + pci_write_config_dword(amd_nb_dev, NB_PCIE_INDX_ADDR, addr);
5556     + pci_read_config_dword(amd_nb_dev, NB_PCIE_INDX_DATA, &val);
5557     + if (disable)
5558     + val &= ~(0x3f << 7);
5559     + else
5560     + val |= 0x3f << 7;
5561     +
5562     + pci_write_config_dword(amd_nb_dev, NB_PCIE_INDX_DATA, val);
5563     +
5564     + addr = NB_PIF0_PWRDOWN_1;
5565     + pci_write_config_dword(amd_nb_dev, NB_PCIE_INDX_ADDR, addr);
5566     + pci_read_config_dword(amd_nb_dev, NB_PCIE_INDX_DATA, &val);
5567     + if (disable)
5568     + val &= ~(0x3f << 7);
5569     + else
5570     + val |= 0x3f << 7;
5571     +
5572     + pci_write_config_dword(amd_nb_dev, NB_PCIE_INDX_DATA, val);
5573     + }
5574     +
5575     + return;
5576     +}
5577     +
5578     /* fit urb's itds into the selected schedule slot; activate as needed */
5579     static int
5580     itd_link_urb (
5581     @@ -1616,6 +1673,12 @@ itd_link_urb (
5582     urb->interval,
5583     next_uframe >> 3, next_uframe & 0x7);
5584     }
5585     +
5586     + if (ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs == 0) {
5587     + if (ehci->amd_l1_fix == 1)
5588     + ehci_quirk_amd_L1(ehci, 1);
5589     + }
5590     +
5591     ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs++;
5592    
5593     /* fill iTDs uframe by uframe */
5594     @@ -1740,6 +1803,11 @@ itd_complete (
5595     (void) disable_periodic(ehci);
5596     ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--;
5597    
5598     + if (ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs == 0) {
5599     + if (ehci->amd_l1_fix == 1)
5600     + ehci_quirk_amd_L1(ehci, 0);
5601     + }
5602     +
5603     if (unlikely(list_is_singular(&stream->td_list))) {
5604     ehci_to_hcd(ehci)->self.bandwidth_allocated
5605     -= stream->bandwidth;
5606     @@ -2025,6 +2093,12 @@ sitd_link_urb (
5607     (next_uframe >> 3) & (ehci->periodic_size - 1),
5608     stream->interval, hc32_to_cpu(ehci, stream->splits));
5609     }
5610     +
5611     + if (ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs == 0) {
5612     + if (ehci->amd_l1_fix == 1)
5613     + ehci_quirk_amd_L1(ehci, 1);
5614     + }
5615     +
5616     ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs++;
5617    
5618     /* fill sITDs frame by frame */
5619     @@ -2125,6 +2199,11 @@ sitd_complete (
5620     (void) disable_periodic(ehci);
5621     ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--;
5622    
5623     + if (ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs == 0) {
5624     + if (ehci->amd_l1_fix == 1)
5625     + ehci_quirk_amd_L1(ehci, 0);
5626     + }
5627     +
5628     if (list_is_singular(&stream->td_list)) {
5629     ehci_to_hcd(ehci)->self.bandwidth_allocated
5630     -= stream->bandwidth;
5631     diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h
5632     index ba8eab3..799ac16 100644
5633     --- a/drivers/usb/host/ehci.h
5634     +++ b/drivers/usb/host/ehci.h
5635     @@ -131,6 +131,7 @@ struct ehci_hcd { /* one per controller */
5636     unsigned has_amcc_usb23:1;
5637     unsigned need_io_watchdog:1;
5638     unsigned broken_periodic:1;
5639     + unsigned amd_l1_fix:1;
5640     unsigned fs_i_thresh:1; /* Intel iso scheduling */
5641     unsigned use_dummy_qh:1; /* AMD Frame List table quirk*/
5642    
5643     diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
5644     index df558f6..62c70c2 100644
5645     --- a/drivers/usb/host/xhci-ring.c
5646     +++ b/drivers/usb/host/xhci-ring.c
5647     @@ -1188,7 +1188,7 @@ static void handle_port_status(struct xhci_hcd *xhci,
5648    
5649     addr = &xhci->op_regs->port_status_base + NUM_PORT_REGS * (port_id - 1);
5650     temp = xhci_readl(xhci, addr);
5651     - if ((temp & PORT_CONNECT) && (hcd->state == HC_STATE_SUSPENDED)) {
5652     + if (hcd->state == HC_STATE_SUSPENDED) {
5653     xhci_dbg(xhci, "resume root hub\n");
5654     usb_hcd_resume_root_hub(hcd);
5655     }
5656     diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
5657     index 45e4a31..34cf4e1 100644
5658     --- a/drivers/usb/host/xhci.c
5659     +++ b/drivers/usb/host/xhci.c
5660     @@ -226,7 +226,8 @@ static int xhci_setup_msi(struct xhci_hcd *xhci)
5661     static int xhci_setup_msix(struct xhci_hcd *xhci)
5662     {
5663     int i, ret = 0;
5664     - struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller);
5665     + struct usb_hcd *hcd = xhci_to_hcd(xhci);
5666     + struct pci_dev *pdev = to_pci_dev(hcd->self.controller);
5667    
5668     /*
5669     * calculate number of msi-x vectors supported.
5670     @@ -265,6 +266,7 @@ static int xhci_setup_msix(struct xhci_hcd *xhci)
5671     goto disable_msix;
5672     }
5673    
5674     + hcd->msix_enabled = 1;
5675     return ret;
5676    
5677     disable_msix:
5678     @@ -280,7 +282,8 @@ free_entries:
5679     /* Free any IRQs and disable MSI-X */
5680     static void xhci_cleanup_msix(struct xhci_hcd *xhci)
5681     {
5682     - struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller);
5683     + struct usb_hcd *hcd = xhci_to_hcd(xhci);
5684     + struct pci_dev *pdev = to_pci_dev(hcd->self.controller);
5685    
5686     xhci_free_irq(xhci);
5687    
5688     @@ -292,6 +295,7 @@ static void xhci_cleanup_msix(struct xhci_hcd *xhci)
5689     pci_disable_msi(pdev);
5690     }
5691    
5692     + hcd->msix_enabled = 0;
5693     return;
5694     }
5695    
5696     @@ -508,9 +512,10 @@ void xhci_stop(struct usb_hcd *hcd)
5697     spin_lock_irq(&xhci->lock);
5698     xhci_halt(xhci);
5699     xhci_reset(xhci);
5700     - xhci_cleanup_msix(xhci);
5701     spin_unlock_irq(&xhci->lock);
5702    
5703     + xhci_cleanup_msix(xhci);
5704     +
5705     #ifdef CONFIG_USB_XHCI_HCD_DEBUGGING
5706     /* Tell the event ring poll function not to reschedule */
5707     xhci->zombie = 1;
5708     @@ -544,9 +549,10 @@ void xhci_shutdown(struct usb_hcd *hcd)
5709    
5710     spin_lock_irq(&xhci->lock);
5711     xhci_halt(xhci);
5712     - xhci_cleanup_msix(xhci);
5713     spin_unlock_irq(&xhci->lock);
5714    
5715     + xhci_cleanup_msix(xhci);
5716     +
5717     xhci_dbg(xhci, "xhci_shutdown completed - status = %x\n",
5718     xhci_readl(xhci, &xhci->op_regs->status));
5719     }
5720     @@ -647,6 +653,7 @@ int xhci_suspend(struct xhci_hcd *xhci)
5721     int rc = 0;
5722     struct usb_hcd *hcd = xhci_to_hcd(xhci);
5723     u32 command;
5724     + int i;
5725    
5726     spin_lock_irq(&xhci->lock);
5727     clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
5728     @@ -677,10 +684,15 @@ int xhci_suspend(struct xhci_hcd *xhci)
5729     spin_unlock_irq(&xhci->lock);
5730     return -ETIMEDOUT;
5731     }
5732     - /* step 5: remove core well power */
5733     - xhci_cleanup_msix(xhci);
5734     spin_unlock_irq(&xhci->lock);
5735    
5736     + /* step 5: remove core well power */
5737     + /* synchronize irq when using MSI-X */
5738     + if (xhci->msix_entries) {
5739     + for (i = 0; i < xhci->msix_count; i++)
5740     + synchronize_irq(xhci->msix_entries[i].vector);
5741     + }
5742     +
5743     return rc;
5744     }
5745    
5746     @@ -694,7 +706,6 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
5747     {
5748     u32 command, temp = 0;
5749     struct usb_hcd *hcd = xhci_to_hcd(xhci);
5750     - struct pci_dev *pdev = to_pci_dev(hcd->self.controller);
5751     int old_state, retval;
5752    
5753     old_state = hcd->state;
5754     @@ -729,9 +740,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
5755     xhci_dbg(xhci, "Stop HCD\n");
5756     xhci_halt(xhci);
5757     xhci_reset(xhci);
5758     - if (hibernated)
5759     - xhci_cleanup_msix(xhci);
5760     spin_unlock_irq(&xhci->lock);
5761     + xhci_cleanup_msix(xhci);
5762    
5763     #ifdef CONFIG_USB_XHCI_HCD_DEBUGGING
5764     /* Tell the event ring poll function not to reschedule */
5765     @@ -765,30 +775,6 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
5766     return retval;
5767     }
5768    
5769     - spin_unlock_irq(&xhci->lock);
5770     - /* Re-setup MSI-X */
5771     - if (hcd->irq)
5772     - free_irq(hcd->irq, hcd);
5773     - hcd->irq = -1;
5774     -
5775     - retval = xhci_setup_msix(xhci);
5776     - if (retval)
5777     - /* fall back to msi*/
5778     - retval = xhci_setup_msi(xhci);
5779     -
5780     - if (retval) {
5781     - /* fall back to legacy interrupt*/
5782     - retval = request_irq(pdev->irq, &usb_hcd_irq, IRQF_SHARED,
5783     - hcd->irq_descr, hcd);
5784     - if (retval) {
5785     - xhci_err(xhci, "request interrupt %d failed\n",
5786     - pdev->irq);
5787     - return retval;
5788     - }
5789     - hcd->irq = pdev->irq;
5790     - }
5791     -
5792     - spin_lock_irq(&xhci->lock);
5793     /* step 4: set Run/Stop bit */
5794     command = xhci_readl(xhci, &xhci->op_regs->command);
5795     command |= CMD_RUN;
5796     @@ -2445,8 +2431,12 @@ int xhci_alloc_dev(struct usb_hcd *hcd, struct usb_device *udev)
5797     xhci_err(xhci, "Error while assigning device slot ID\n");
5798     return 0;
5799     }
5800     - /* xhci_alloc_virt_device() does not touch rings; no need to lock */
5801     - if (!xhci_alloc_virt_device(xhci, xhci->slot_id, udev, GFP_KERNEL)) {
5802     + /* xhci_alloc_virt_device() does not touch rings; no need to lock.
5803     + * Use GFP_NOIO, since this function can be called from
5804     + * xhci_discover_or_reset_device(), which may be called as part of
5805     + * mass storage driver error handling.
5806     + */
5807     + if (!xhci_alloc_virt_device(xhci, xhci->slot_id, udev, GFP_NOIO)) {
5808     /* Disable slot, if we can do it without mem alloc */
5809     xhci_warn(xhci, "Could not allocate xHCI USB device data structures\n");
5810     spin_lock_irqsave(&xhci->lock, flags);
5811     diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
5812     index 63f7cc4..7b8815d 100644
5813     --- a/drivers/usb/serial/ch341.c
5814     +++ b/drivers/usb/serial/ch341.c
5815     @@ -486,12 +486,22 @@ static void ch341_read_int_callback(struct urb *urb)
5816     if (actual_length >= 4) {
5817     struct ch341_private *priv = usb_get_serial_port_data(port);
5818     unsigned long flags;
5819     + u8 prev_line_status = priv->line_status;
5820    
5821     spin_lock_irqsave(&priv->lock, flags);
5822     priv->line_status = (~(data[2])) & CH341_BITS_MODEM_STAT;
5823     if ((data[1] & CH341_MULT_STAT))
5824     priv->multi_status_change = 1;
5825     spin_unlock_irqrestore(&priv->lock, flags);
5826     +
5827     + if ((priv->line_status ^ prev_line_status) & CH341_BIT_DCD) {
5828     + struct tty_struct *tty = tty_port_tty_get(&port->port);
5829     + if (tty)
5830     + usb_serial_handle_dcd_change(port, tty,
5831     + priv->line_status & CH341_BIT_DCD);
5832     + tty_kref_put(tty);
5833     + }
5834     +
5835     wake_up_interruptible(&priv->delta_msr_wait);
5836     }
5837    
5838     diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
5839     index 8d7731d..735ea03 100644
5840     --- a/drivers/usb/serial/cp210x.c
5841     +++ b/drivers/usb/serial/cp210x.c
5842     @@ -49,7 +49,6 @@ static int cp210x_tiocmset_port(struct usb_serial_port *port, struct file *,
5843     static void cp210x_break_ctl(struct tty_struct *, int);
5844     static int cp210x_startup(struct usb_serial *);
5845     static void cp210x_dtr_rts(struct usb_serial_port *p, int on);
5846     -static int cp210x_carrier_raised(struct usb_serial_port *p);
5847    
5848     static int debug;
5849    
5850     @@ -87,7 +86,6 @@ static const struct usb_device_id id_table[] = {
5851     { USB_DEVICE(0x10C4, 0x8115) }, /* Arygon NFC/Mifare Reader */
5852     { USB_DEVICE(0x10C4, 0x813D) }, /* Burnside Telecom Deskmobile */
5853     { USB_DEVICE(0x10C4, 0x813F) }, /* Tams Master Easy Control */
5854     - { USB_DEVICE(0x10C4, 0x8149) }, /* West Mountain Radio Computerized Battery Analyzer */
5855     { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */
5856     { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */
5857     { USB_DEVICE(0x10C4, 0x8156) }, /* B&G H3000 link cable */
5858     @@ -110,7 +108,9 @@ static const struct usb_device_id id_table[] = {
5859     { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */
5860     { USB_DEVICE(0x10C4, 0x8382) }, /* Cygnal Integrated Products, Inc. */
5861     { USB_DEVICE(0x10C4, 0x83A8) }, /* Amber Wireless AMB2560 */
5862     + { USB_DEVICE(0x10C4, 0x83D8) }, /* DekTec DTA Plus VHF/UHF Booster/Attenuator */
5863     { USB_DEVICE(0x10C4, 0x8411) }, /* Kyocera GPS Module */
5864     + { USB_DEVICE(0x10C4, 0x8418) }, /* IRZ Automation Teleport SG-10 GSM/GPRS Modem */
5865     { USB_DEVICE(0x10C4, 0x846E) }, /* BEI USB Sensor Interface (VCP) */
5866     { USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */
5867     { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
5868     @@ -165,8 +165,7 @@ static struct usb_serial_driver cp210x_device = {
5869     .tiocmget = cp210x_tiocmget,
5870     .tiocmset = cp210x_tiocmset,
5871     .attach = cp210x_startup,
5872     - .dtr_rts = cp210x_dtr_rts,
5873     - .carrier_raised = cp210x_carrier_raised
5874     + .dtr_rts = cp210x_dtr_rts
5875     };
5876    
5877     /* Config request types */
5878     @@ -765,15 +764,6 @@ static int cp210x_tiocmget (struct tty_struct *tty, struct file *file)
5879     return result;
5880     }
5881    
5882     -static int cp210x_carrier_raised(struct usb_serial_port *p)
5883     -{
5884     - unsigned int control;
5885     - cp210x_get_config(p, CP210X_GET_MDMSTS, &control, 1);
5886     - if (control & CONTROL_DCD)
5887     - return 1;
5888     - return 0;
5889     -}
5890     -
5891     static void cp210x_break_ctl (struct tty_struct *tty, int break_state)
5892     {
5893     struct usb_serial_port *port = tty->driver_data;
5894     diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c
5895     index b92070c..666e5a6 100644
5896     --- a/drivers/usb/serial/digi_acceleport.c
5897     +++ b/drivers/usb/serial/digi_acceleport.c
5898     @@ -455,7 +455,6 @@ static int digi_write_room(struct tty_struct *tty);
5899     static int digi_chars_in_buffer(struct tty_struct *tty);
5900     static int digi_open(struct tty_struct *tty, struct usb_serial_port *port);
5901     static void digi_close(struct usb_serial_port *port);
5902     -static int digi_carrier_raised(struct usb_serial_port *port);
5903     static void digi_dtr_rts(struct usb_serial_port *port, int on);
5904     static int digi_startup_device(struct usb_serial *serial);
5905     static int digi_startup(struct usb_serial *serial);
5906     @@ -511,7 +510,6 @@ static struct usb_serial_driver digi_acceleport_2_device = {
5907     .open = digi_open,
5908     .close = digi_close,
5909     .dtr_rts = digi_dtr_rts,
5910     - .carrier_raised = digi_carrier_raised,
5911     .write = digi_write,
5912     .write_room = digi_write_room,
5913     .write_bulk_callback = digi_write_bulk_callback,
5914     @@ -1339,14 +1337,6 @@ static void digi_dtr_rts(struct usb_serial_port *port, int on)
5915     digi_set_modem_signals(port, on * (TIOCM_DTR|TIOCM_RTS), 1);
5916     }
5917    
5918     -static int digi_carrier_raised(struct usb_serial_port *port)
5919     -{
5920     - struct digi_port *priv = usb_get_serial_port_data(port);
5921     - if (priv->dp_modem_signals & TIOCM_CD)
5922     - return 1;
5923     - return 0;
5924     -}
5925     -
5926     static int digi_open(struct tty_struct *tty, struct usb_serial_port *port)
5927     {
5928     int ret;
5929     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
5930     index 2dec500..48ce01e 100644
5931     --- a/drivers/usb/serial/ftdi_sio.c
5932     +++ b/drivers/usb/serial/ftdi_sio.c
5933     @@ -99,6 +99,7 @@ struct ftdi_sio_quirk {
5934     static int ftdi_jtag_probe(struct usb_serial *serial);
5935     static int ftdi_mtxorb_hack_setup(struct usb_serial *serial);
5936     static int ftdi_NDI_device_setup(struct usb_serial *serial);
5937     +static int ftdi_stmclite_probe(struct usb_serial *serial);
5938     static void ftdi_USB_UIRT_setup(struct ftdi_private *priv);
5939     static void ftdi_HE_TIRA1_setup(struct ftdi_private *priv);
5940    
5941     @@ -122,6 +123,10 @@ static struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = {
5942     .port_probe = ftdi_HE_TIRA1_setup,
5943     };
5944    
5945     +static struct ftdi_sio_quirk ftdi_stmclite_quirk = {
5946     + .probe = ftdi_stmclite_probe,
5947     +};
5948     +
5949     /*
5950     * The 8U232AM has the same API as the sio except for:
5951     * - it can support MUCH higher baudrates; up to:
5952     @@ -615,6 +620,7 @@ static struct usb_device_id id_table_combined [] = {
5953     { USB_DEVICE(FTDI_VID, FTDI_OCEANIC_PID) },
5954     { USB_DEVICE(TTI_VID, TTI_QL355P_PID) },
5955     { USB_DEVICE(FTDI_VID, FTDI_RM_CANVIEW_PID) },
5956     + { USB_DEVICE(ACTON_VID, ACTON_SPECTRAPRO_PID) },
5957     { USB_DEVICE(CONTEC_VID, CONTEC_COM1USBH_PID) },
5958     { USB_DEVICE(BANDB_VID, BANDB_USOTL4_PID) },
5959     { USB_DEVICE(BANDB_VID, BANDB_USTL4_PID) },
5960     @@ -675,7 +681,17 @@ static struct usb_device_id id_table_combined [] = {
5961     { USB_DEVICE(FTDI_VID, FTDI_PCDJ_DAC2_PID) },
5962     { USB_DEVICE(FTDI_VID, FTDI_RRCIRKITS_LOCOBUFFER_PID) },
5963     { USB_DEVICE(FTDI_VID, FTDI_ASK_RDR400_PID) },
5964     - { USB_DEVICE(ICOM_ID1_VID, ICOM_ID1_PID) },
5965     + { USB_DEVICE(ICOM_VID, ICOM_ID_1_PID) },
5966     + { USB_DEVICE(ICOM_VID, ICOM_OPC_U_UC_PID) },
5967     + { USB_DEVICE(ICOM_VID, ICOM_ID_RP2C1_PID) },
5968     + { USB_DEVICE(ICOM_VID, ICOM_ID_RP2C2_PID) },
5969     + { USB_DEVICE(ICOM_VID, ICOM_ID_RP2D_PID) },
5970     + { USB_DEVICE(ICOM_VID, ICOM_ID_RP2VT_PID) },
5971     + { USB_DEVICE(ICOM_VID, ICOM_ID_RP2VR_PID) },
5972     + { USB_DEVICE(ICOM_VID, ICOM_ID_RP4KVT_PID) },
5973     + { USB_DEVICE(ICOM_VID, ICOM_ID_RP4KVR_PID) },
5974     + { USB_DEVICE(ICOM_VID, ICOM_ID_RP2KVT_PID) },
5975     + { USB_DEVICE(ICOM_VID, ICOM_ID_RP2KVR_PID) },
5976     { USB_DEVICE(FTDI_VID, FTDI_ACG_HFDUAL_PID) },
5977     { USB_DEVICE(FTDI_VID, FTDI_YEI_SERVOCENTER31_PID) },
5978     { USB_DEVICE(FTDI_VID, FTDI_THORLABS_PID) },
5979     @@ -799,6 +815,8 @@ static struct usb_device_id id_table_combined [] = {
5980     { USB_DEVICE(FTDI_VID, FTDI_DOTEC_PID) },
5981     { USB_DEVICE(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID),
5982     .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
5983     + { USB_DEVICE(ST_VID, ST_STMCLT1030_PID),
5984     + .driver_info = (kernel_ulong_t)&ftdi_stmclite_quirk },
5985     { }, /* Optional parameter entry */
5986     { } /* Terminating entry */
5987     };
5988     @@ -1681,6 +1699,25 @@ static int ftdi_jtag_probe(struct usb_serial *serial)
5989     }
5990    
5991     /*
5992     + * First and second port on STMCLiteadaptors is reserved for JTAG interface
5993     + * and the forth port for pio
5994     + */
5995     +static int ftdi_stmclite_probe(struct usb_serial *serial)
5996     +{
5997     + struct usb_device *udev = serial->dev;
5998     + struct usb_interface *interface = serial->interface;
5999     +
6000     + dbg("%s", __func__);
6001     +
6002     + if (interface == udev->actconfig->interface[2])
6003     + return 0;
6004     +
6005     + dev_info(&udev->dev, "Ignoring serial port reserved for JTAG\n");
6006     +
6007     + return -ENODEV;
6008     +}
6009     +
6010     +/*
6011     * The Matrix Orbital VK204-25-USB has an invalid IN endpoint.
6012     * We have to correct it if we want to read from it.
6013     */
6014     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
6015     index bf08672..117e8e6 100644
6016     --- a/drivers/usb/serial/ftdi_sio_ids.h
6017     +++ b/drivers/usb/serial/ftdi_sio_ids.h
6018     @@ -518,6 +518,12 @@
6019     #define RATOC_PRODUCT_ID_USB60F 0xb020
6020    
6021     /*
6022     + * Acton Research Corp.
6023     + */
6024     +#define ACTON_VID 0x0647 /* Vendor ID */
6025     +#define ACTON_SPECTRAPRO_PID 0x0100
6026     +
6027     +/*
6028     * Contec products (http://www.contec.com)
6029     * Submitted by Daniel Sangorrin
6030     */
6031     @@ -569,11 +575,23 @@
6032     #define OCT_US101_PID 0x0421 /* OCT US101 USB to RS-232 */
6033    
6034     /*
6035     - * Icom ID-1 digital transceiver
6036     + * Definitions for Icom Inc. devices
6037     */
6038     -
6039     -#define ICOM_ID1_VID 0x0C26
6040     -#define ICOM_ID1_PID 0x0004
6041     +#define ICOM_VID 0x0C26 /* Icom vendor ID */
6042     +/* Note: ID-1 is a communications tranceiver for HAM-radio operators */
6043     +#define ICOM_ID_1_PID 0x0004 /* ID-1 USB to RS-232 */
6044     +/* Note: OPC is an Optional cable to connect an Icom Tranceiver */
6045     +#define ICOM_OPC_U_UC_PID 0x0018 /* OPC-478UC, OPC-1122U cloning cable */
6046     +/* Note: ID-RP* devices are Icom Repeater Devices for HAM-radio */
6047     +#define ICOM_ID_RP2C1_PID 0x0009 /* ID-RP2C Asset 1 to RS-232 */
6048     +#define ICOM_ID_RP2C2_PID 0x000A /* ID-RP2C Asset 2 to RS-232 */
6049     +#define ICOM_ID_RP2D_PID 0x000B /* ID-RP2D configuration port*/
6050     +#define ICOM_ID_RP2VT_PID 0x000C /* ID-RP2V Transmit config port */
6051     +#define ICOM_ID_RP2VR_PID 0x000D /* ID-RP2V Receive config port */
6052     +#define ICOM_ID_RP4KVT_PID 0x0010 /* ID-RP4000V Transmit config port */
6053     +#define ICOM_ID_RP4KVR_PID 0x0011 /* ID-RP4000V Receive config port */
6054     +#define ICOM_ID_RP2KVT_PID 0x0012 /* ID-RP2000V Transmit config port */
6055     +#define ICOM_ID_RP2KVR_PID 0x0013 /* ID-RP2000V Receive config port */
6056    
6057     /*
6058     * GN Otometrics (http://www.otometrics.com)
6059     @@ -1022,6 +1040,12 @@
6060     #define WHT_PID 0x0004 /* Wireless Handheld Terminal */
6061    
6062     /*
6063     + * STMicroelectonics
6064     + */
6065     +#define ST_VID 0x0483
6066     +#define ST_STMCLT1030_PID 0x3747 /* ST Micro Connect Lite STMCLT1030 */
6067     +
6068     +/*
6069     * Papouch products (http://www.papouch.com/)
6070     * Submitted by Folkert van Heusden
6071     */
6072     diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c
6073     index e6833e2..e4db5ad 100644
6074     --- a/drivers/usb/serial/generic.c
6075     +++ b/drivers/usb/serial/generic.c
6076     @@ -479,6 +479,26 @@ int usb_serial_handle_break(struct usb_serial_port *port)
6077     }
6078     EXPORT_SYMBOL_GPL(usb_serial_handle_break);
6079    
6080     +/**
6081     + * usb_serial_handle_dcd_change - handle a change of carrier detect state
6082     + * @port: usb_serial_port structure for the open port
6083     + * @tty: tty_struct structure for the port
6084     + * @status: new carrier detect status, nonzero if active
6085     + */
6086     +void usb_serial_handle_dcd_change(struct usb_serial_port *usb_port,
6087     + struct tty_struct *tty, unsigned int status)
6088     +{
6089     + struct tty_port *port = &usb_port->port;
6090     +
6091     + dbg("%s - port %d, status %d", __func__, usb_port->number, status);
6092     +
6093     + if (status)
6094     + wake_up_interruptible(&port->open_wait);
6095     + else if (tty && !C_CLOCAL(tty))
6096     + tty_hangup(tty);
6097     +}
6098     +EXPORT_SYMBOL_GPL(usb_serial_handle_dcd_change);
6099     +
6100     int usb_serial_generic_resume(struct usb_serial *serial)
6101     {
6102     struct usb_serial_port *port;
6103     diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
6104     index cd769ef..3b246d9 100644
6105     --- a/drivers/usb/serial/io_edgeport.c
6106     +++ b/drivers/usb/serial/io_edgeport.c
6107     @@ -2889,8 +2889,8 @@ static void load_application_firmware(struct edgeport_serial *edge_serial)
6108    
6109     dbg("%s %d.%d.%d", fw_info, rec->data[0], rec->data[1], build);
6110    
6111     - edge_serial->product_info.FirmwareMajorVersion = fw->data[0];
6112     - edge_serial->product_info.FirmwareMinorVersion = fw->data[1];
6113     + edge_serial->product_info.FirmwareMajorVersion = rec->data[0];
6114     + edge_serial->product_info.FirmwareMinorVersion = rec->data[1];
6115     edge_serial->product_info.FirmwareBuildNumber = cpu_to_le16(build);
6116    
6117     for (rec = ihex_next_binrec(rec); rec;
6118     diff --git a/drivers/usb/serial/io_tables.h b/drivers/usb/serial/io_tables.h
6119     index 6ab2a3f..178b22e 100644
6120     --- a/drivers/usb/serial/io_tables.h
6121     +++ b/drivers/usb/serial/io_tables.h
6122     @@ -199,6 +199,7 @@ static struct usb_serial_driver epic_device = {
6123     .name = "epic",
6124     },
6125     .description = "EPiC device",
6126     + .usb_driver = &io_driver,
6127     .id_table = Epic_port_id_table,
6128     .num_ports = 1,
6129     .open = edge_open,
6130     diff --git a/drivers/usb/serial/iuu_phoenix.c b/drivers/usb/serial/iuu_phoenix.c
6131     index 12ed594..99b97c0 100644
6132     --- a/drivers/usb/serial/iuu_phoenix.c
6133     +++ b/drivers/usb/serial/iuu_phoenix.c
6134     @@ -1275,6 +1275,7 @@ static struct usb_serial_driver iuu_device = {
6135     .name = "iuu_phoenix",
6136     },
6137     .id_table = id_table,
6138     + .usb_driver = &iuu_driver,
6139     .num_ports = 1,
6140     .bulk_in_size = 512,
6141     .bulk_out_size = 512,
6142     diff --git a/drivers/usb/serial/keyspan.h b/drivers/usb/serial/keyspan.h
6143     index 2d8baf6..ce134dc 100644
6144     --- a/drivers/usb/serial/keyspan.h
6145     +++ b/drivers/usb/serial/keyspan.h
6146     @@ -546,6 +546,7 @@ static struct usb_serial_driver keyspan_pre_device = {
6147     .name = "keyspan_no_firm",
6148     },
6149     .description = "Keyspan - (without firmware)",
6150     + .usb_driver = &keyspan_driver,
6151     .id_table = keyspan_pre_ids,
6152     .num_ports = 1,
6153     .attach = keyspan_fake_startup,
6154     @@ -557,6 +558,7 @@ static struct usb_serial_driver keyspan_1port_device = {
6155     .name = "keyspan_1",
6156     },
6157     .description = "Keyspan 1 port adapter",
6158     + .usb_driver = &keyspan_driver,
6159     .id_table = keyspan_1port_ids,
6160     .num_ports = 1,
6161     .open = keyspan_open,
6162     @@ -579,6 +581,7 @@ static struct usb_serial_driver keyspan_2port_device = {
6163     .name = "keyspan_2",
6164     },
6165     .description = "Keyspan 2 port adapter",
6166     + .usb_driver = &keyspan_driver,
6167     .id_table = keyspan_2port_ids,
6168     .num_ports = 2,
6169     .open = keyspan_open,
6170     @@ -601,6 +604,7 @@ static struct usb_serial_driver keyspan_4port_device = {
6171     .name = "keyspan_4",
6172     },
6173     .description = "Keyspan 4 port adapter",
6174     + .usb_driver = &keyspan_driver,
6175     .id_table = keyspan_4port_ids,
6176     .num_ports = 4,
6177     .open = keyspan_open,
6178     diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
6179     index a10dd56..554a869 100644
6180     --- a/drivers/usb/serial/keyspan_pda.c
6181     +++ b/drivers/usb/serial/keyspan_pda.c
6182     @@ -679,22 +679,6 @@ static void keyspan_pda_dtr_rts(struct usb_serial_port *port, int on)
6183     }
6184     }
6185    
6186     -static int keyspan_pda_carrier_raised(struct usb_serial_port *port)
6187     -{
6188     - struct usb_serial *serial = port->serial;
6189     - unsigned char modembits;
6190     -
6191     - /* If we can read the modem status and the DCD is low then
6192     - carrier is not raised yet */
6193     - if (keyspan_pda_get_modem_info(serial, &modembits) >= 0) {
6194     - if (!(modembits & (1>>6)))
6195     - return 0;
6196     - }
6197     - /* Carrier raised, or we failed (eg disconnected) so
6198     - progress accordingly */
6199     - return 1;
6200     -}
6201     -
6202    
6203     static int keyspan_pda_open(struct tty_struct *tty,
6204     struct usb_serial_port *port)
6205     @@ -881,7 +865,6 @@ static struct usb_serial_driver keyspan_pda_device = {
6206     .id_table = id_table_std,
6207     .num_ports = 1,
6208     .dtr_rts = keyspan_pda_dtr_rts,
6209     - .carrier_raised = keyspan_pda_carrier_raised,
6210     .open = keyspan_pda_open,
6211     .close = keyspan_pda_close,
6212     .write = keyspan_pda_write,
6213     diff --git a/drivers/usb/serial/moto_modem.c b/drivers/usb/serial/moto_modem.c
6214     index cf17183..653465f 100644
6215     --- a/drivers/usb/serial/moto_modem.c
6216     +++ b/drivers/usb/serial/moto_modem.c
6217     @@ -44,6 +44,7 @@ static struct usb_serial_driver moto_device = {
6218     .name = "moto-modem",
6219     },
6220     .id_table = id_table,
6221     + .usb_driver = &moto_driver,
6222     .num_ports = 1,
6223     };
6224    
6225     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
6226     index ef2977d..356c870 100644
6227     --- a/drivers/usb/serial/option.c
6228     +++ b/drivers/usb/serial/option.c
6229     @@ -382,7 +382,16 @@ static void option_instat_callback(struct urb *urb);
6230     #define HAIER_VENDOR_ID 0x201e
6231     #define HAIER_PRODUCT_CE100 0x2009
6232    
6233     -#define CINTERION_VENDOR_ID 0x0681
6234     +/* Cinterion (formerly Siemens) products */
6235     +#define SIEMENS_VENDOR_ID 0x0681
6236     +#define CINTERION_VENDOR_ID 0x1e2d
6237     +#define CINTERION_PRODUCT_HC25_MDM 0x0047
6238     +#define CINTERION_PRODUCT_HC25_MDMNET 0x0040
6239     +#define CINTERION_PRODUCT_HC28_MDM 0x004C
6240     +#define CINTERION_PRODUCT_HC28_MDMNET 0x004A /* same for HC28J */
6241     +#define CINTERION_PRODUCT_EU3_E 0x0051
6242     +#define CINTERION_PRODUCT_EU3_P 0x0052
6243     +#define CINTERION_PRODUCT_PH8 0x0053
6244    
6245     /* Olivetti products */
6246     #define OLIVETTI_VENDOR_ID 0x0b3c
6247     @@ -945,7 +954,17 @@ static const struct usb_device_id option_ids[] = {
6248     { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100F) },
6249     { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1011)},
6250     { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1012)},
6251     - { USB_DEVICE(CINTERION_VENDOR_ID, 0x0047) },
6252     + /* Cinterion */
6253     + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EU3_E) },
6254     + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EU3_P) },
6255     + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PH8) },
6256     + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) },
6257     + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },
6258     + { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) },
6259     + { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDMNET) },
6260     + { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) }, /* HC28 enumerates with Siemens or Cinterion VID depending on FW revision */
6261     + { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },
6262     +
6263     { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) },
6264     { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */
6265     { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */
6266     diff --git a/drivers/usb/serial/oti6858.c b/drivers/usb/serial/oti6858.c
6267     index e199b0f..1c46a86 100644
6268     --- a/drivers/usb/serial/oti6858.c
6269     +++ b/drivers/usb/serial/oti6858.c
6270     @@ -157,6 +157,7 @@ static struct usb_serial_driver oti6858_device = {
6271     .name = "oti6858",
6272     },
6273     .id_table = id_table,
6274     + .usb_driver = &oti6858_driver,
6275     .num_ports = 1,
6276     .open = oti6858_open,
6277     .close = oti6858_close,
6278     diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
6279     index 8ae4c6c..08c9181 100644
6280     --- a/drivers/usb/serial/pl2303.c
6281     +++ b/drivers/usb/serial/pl2303.c
6282     @@ -50,6 +50,7 @@ static const struct usb_device_id id_table[] = {
6283     { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) },
6284     { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) },
6285     { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_HCR331) },
6286     + { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MOTOROLA) },
6287     { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
6288     { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
6289     { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
6290     @@ -677,9 +678,11 @@ static void pl2303_update_line_status(struct usb_serial_port *port,
6291     {
6292    
6293     struct pl2303_private *priv = usb_get_serial_port_data(port);
6294     + struct tty_struct *tty;
6295     unsigned long flags;
6296     u8 status_idx = UART_STATE;
6297     u8 length = UART_STATE + 1;
6298     + u8 prev_line_status;
6299     u16 idv, idp;
6300    
6301     idv = le16_to_cpu(port->serial->dev->descriptor.idVendor);
6302     @@ -701,11 +704,20 @@ static void pl2303_update_line_status(struct usb_serial_port *port,
6303    
6304     /* Save off the uart status for others to look at */
6305     spin_lock_irqsave(&priv->lock, flags);
6306     + prev_line_status = priv->line_status;
6307     priv->line_status = data[status_idx];
6308     spin_unlock_irqrestore(&priv->lock, flags);
6309     if (priv->line_status & UART_BREAK_ERROR)
6310     usb_serial_handle_break(port);
6311     wake_up_interruptible(&priv->delta_msr_wait);
6312     +
6313     + tty = tty_port_tty_get(&port->port);
6314     + if (!tty)
6315     + return;
6316     + if ((priv->line_status ^ prev_line_status) & UART_DCD)
6317     + usb_serial_handle_dcd_change(port, tty,
6318     + priv->line_status & UART_DCD);
6319     + tty_kref_put(tty);
6320     }
6321    
6322     static void pl2303_read_int_callback(struct urb *urb)
6323     diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
6324     index 43eb9bd..1b025f7 100644
6325     --- a/drivers/usb/serial/pl2303.h
6326     +++ b/drivers/usb/serial/pl2303.h
6327     @@ -21,6 +21,7 @@
6328     #define PL2303_PRODUCT_ID_MMX 0x0612
6329     #define PL2303_PRODUCT_ID_GPRS 0x0609
6330     #define PL2303_PRODUCT_ID_HCR331 0x331a
6331     +#define PL2303_PRODUCT_ID_MOTOROLA 0x0307
6332    
6333     #define ATEN_VENDOR_ID 0x0557
6334     #define ATEN_VENDOR_ID2 0x0547
6335     diff --git a/drivers/usb/serial/qcaux.c b/drivers/usb/serial/qcaux.c
6336     index 214a3e5..30b73e6 100644
6337     --- a/drivers/usb/serial/qcaux.c
6338     +++ b/drivers/usb/serial/qcaux.c
6339     @@ -36,6 +36,7 @@
6340     #define UTSTARCOM_PRODUCT_UM175_V1 0x3712
6341     #define UTSTARCOM_PRODUCT_UM175_V2 0x3714
6342     #define UTSTARCOM_PRODUCT_UM175_ALLTEL 0x3715
6343     +#define PANTECH_PRODUCT_UML290_VZW 0x3718
6344    
6345     /* CMOTECH devices */
6346     #define CMOTECH_VENDOR_ID 0x16d8
6347     @@ -66,6 +67,7 @@ static struct usb_device_id id_table[] = {
6348     { USB_DEVICE_AND_INTERFACE_INFO(LG_VENDOR_ID, LG_PRODUCT_VX4400_6000, 0xff, 0xff, 0x00) },
6349     { USB_DEVICE_AND_INTERFACE_INFO(SANYO_VENDOR_ID, SANYO_PRODUCT_KATANA_LX, 0xff, 0xff, 0x00) },
6350     { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_U520, 0xff, 0x00, 0x00) },
6351     + { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML290_VZW, 0xff, 0xff, 0xff) },
6352     { },
6353     };
6354     MODULE_DEVICE_TABLE(usb, id_table);
6355     @@ -84,6 +86,7 @@ static struct usb_serial_driver qcaux_device = {
6356     .name = "qcaux",
6357     },
6358     .id_table = id_table,
6359     + .usb_driver = &qcaux_driver,
6360     .num_ports = 1,
6361     };
6362    
6363     diff --git a/drivers/usb/serial/siemens_mpi.c b/drivers/usb/serial/siemens_mpi.c
6364     index cb8195c..74cd4cc 100644
6365     --- a/drivers/usb/serial/siemens_mpi.c
6366     +++ b/drivers/usb/serial/siemens_mpi.c
6367     @@ -42,6 +42,7 @@ static struct usb_serial_driver siemens_usb_mpi_device = {
6368     .name = "siemens_mpi",
6369     },
6370     .id_table = id_table,
6371     + .usb_driver = &siemens_usb_mpi_driver,
6372     .num_ports = 1,
6373     };
6374    
6375     diff --git a/drivers/usb/serial/spcp8x5.c b/drivers/usb/serial/spcp8x5.c
6376     index 765aa98..cbfb70b 100644
6377     --- a/drivers/usb/serial/spcp8x5.c
6378     +++ b/drivers/usb/serial/spcp8x5.c
6379     @@ -133,7 +133,7 @@ struct spcp8x5_usb_ctrl_arg {
6380    
6381     /* how come ??? */
6382     #define UART_STATE 0x08
6383     -#define UART_STATE_TRANSIENT_MASK 0x74
6384     +#define UART_STATE_TRANSIENT_MASK 0x75
6385     #define UART_DCD 0x01
6386     #define UART_DSR 0x02
6387     #define UART_BREAK_ERROR 0x04
6388     @@ -525,6 +525,10 @@ static void spcp8x5_process_read_urb(struct urb *urb)
6389     /* overrun is special, not associated with a char */
6390     if (status & UART_OVERRUN_ERROR)
6391     tty_insert_flip_char(tty, 0, TTY_OVERRUN);
6392     +
6393     + if (status & UART_DCD)
6394     + usb_serial_handle_dcd_change(port, tty,
6395     + priv->line_status & MSR_STATUS_LINE_DCD);
6396     }
6397    
6398     tty_insert_flip_string_fixed_flag(tty, data, tty_flag,
6399     @@ -645,6 +649,7 @@ static struct usb_serial_driver spcp8x5_device = {
6400     .name = "SPCP8x5",
6401     },
6402     .id_table = id_table,
6403     + .usb_driver = &spcp8x5_driver,
6404     .num_ports = 1,
6405     .open = spcp8x5_open,
6406     .dtr_rts = spcp8x5_dtr_rts,
6407     diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
6408     index b2902f3..a910004 100644
6409     --- a/drivers/usb/serial/ti_usb_3410_5052.c
6410     +++ b/drivers/usb/serial/ti_usb_3410_5052.c
6411     @@ -369,9 +369,9 @@ failed_1port:
6412    
6413     static void __exit ti_exit(void)
6414     {
6415     + usb_deregister(&ti_usb_driver);
6416     usb_serial_deregister(&ti_1port_device);
6417     usb_serial_deregister(&ti_2port_device);
6418     - usb_deregister(&ti_usb_driver);
6419     }
6420    
6421    
6422     diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
6423     index 6954de5..546a521 100644
6424     --- a/drivers/usb/serial/usb-serial.c
6425     +++ b/drivers/usb/serial/usb-serial.c
6426     @@ -1344,11 +1344,15 @@ int usb_serial_register(struct usb_serial_driver *driver)
6427     return -ENODEV;
6428    
6429     fixup_generic(driver);
6430     - if (driver->usb_driver)
6431     - driver->usb_driver->supports_autosuspend = 1;
6432    
6433     if (!driver->description)
6434     driver->description = driver->driver.name;
6435     + if (!driver->usb_driver) {
6436     + WARN(1, "Serial driver %s has no usb_driver\n",
6437     + driver->description);
6438     + return -EINVAL;
6439     + }
6440     + driver->usb_driver->supports_autosuspend = 1;
6441    
6442     /* Add this device to our list of devices */
6443     mutex_lock(&table_lock);
6444     diff --git a/drivers/usb/serial/usb_debug.c b/drivers/usb/serial/usb_debug.c
6445     index f2ed6a3..95a8214 100644
6446     --- a/drivers/usb/serial/usb_debug.c
6447     +++ b/drivers/usb/serial/usb_debug.c
6448     @@ -75,6 +75,7 @@ static struct usb_serial_driver debug_device = {
6449     .name = "debug",
6450     },
6451     .id_table = id_table,
6452     + .usb_driver = &debug_driver,
6453     .num_ports = 1,
6454     .bulk_out_size = USB_DEBUG_MAX_PACKET_SIZE,
6455     .break_ctl = usb_debug_break_ctl,
6456     diff --git a/drivers/usb/storage/unusual_cypress.h b/drivers/usb/storage/unusual_cypress.h
6457     index c854fde..2c85530 100644
6458     --- a/drivers/usb/storage/unusual_cypress.h
6459     +++ b/drivers/usb/storage/unusual_cypress.h
6460     @@ -31,4 +31,9 @@ UNUSUAL_DEV( 0x04b4, 0x6831, 0x0000, 0x9999,
6461     "Cypress ISD-300LP",
6462     USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0),
6463    
6464     +UNUSUAL_DEV( 0x14cd, 0x6116, 0x0000, 0x9999,
6465     + "Super Top",
6466     + "USB 2.0 SATA BRIDGE",
6467     + USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0),
6468     +
6469     #endif /* defined(CONFIG_USB_STORAGE_CYPRESS_ATACB) || ... */
6470     diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
6471     index fcc1e32..c1602b8 100644
6472     --- a/drivers/usb/storage/unusual_devs.h
6473     +++ b/drivers/usb/storage/unusual_devs.h
6474     @@ -1044,6 +1044,15 @@ UNUSUAL_DEV( 0x084d, 0x0011, 0x0110, 0x0110,
6475     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
6476     US_FL_BULK32),
6477    
6478     +/* Reported by <ttkspam@free.fr>
6479     + * The device reports a vendor-specific device class, requiring an
6480     + * explicit vendor/product match.
6481     + */
6482     +UNUSUAL_DEV( 0x0851, 0x1542, 0x0002, 0x0002,
6483     + "MagicPixel",
6484     + "FW_Omega2",
6485     + USB_SC_DEVICE, USB_PR_DEVICE, NULL, 0),
6486     +
6487     /* Andrew Lunn <andrew@lunn.ch>
6488     * PanDigital Digital Picture Frame. Does not like ALLOW_MEDIUM_REMOVAL
6489     * on LUN 4.
6490     @@ -1388,6 +1397,13 @@ UNUSUAL_DEV( 0x0f19, 0x0105, 0x0100, 0x0100,
6491     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
6492     US_FL_IGNORE_RESIDUE ),
6493    
6494     +/* Submitted by Nick Holloway */
6495     +UNUSUAL_DEV( 0x0f88, 0x042e, 0x0100, 0x0100,
6496     + "VTech",
6497     + "Kidizoom",
6498     + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
6499     + US_FL_FIX_CAPACITY ),
6500     +
6501     /* Reported by Michael Stattmann <michael@stattmann.com> */
6502     UNUSUAL_DEV( 0x0fce, 0xd008, 0x0000, 0x0000,
6503     "Sony Ericsson",
6504     @@ -1872,6 +1888,22 @@ UNUSUAL_DEV( 0x1908, 0x3335, 0x0200, 0x0200,
6505     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
6506     US_FL_NO_READ_DISC_INFO ),
6507    
6508     +/* Patch by Richard Schütz <r.schtz@t-online.de>
6509     + * This external hard drive enclosure uses a JMicron chip which
6510     + * needs the US_FL_IGNORE_RESIDUE flag to work properly. */
6511     +UNUSUAL_DEV( 0x1e68, 0x001b, 0x0000, 0x0000,
6512     + "TrekStor GmbH & Co. KG",
6513     + "DataStation maxi g.u",
6514     + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
6515     + US_FL_IGNORE_RESIDUE | US_FL_SANE_SENSE ),
6516     +
6517     +/* Reported by Jasper Mackenzie <scarletpimpernal@hotmail.com> */
6518     +UNUSUAL_DEV( 0x1e74, 0x4621, 0x0000, 0x0000,
6519     + "Coby Electronics",
6520     + "MP3 Player",
6521     + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
6522     + US_FL_BULK_IGNORE_TAG | US_FL_MAX_SECTORS_64 ),
6523     +
6524     UNUSUAL_DEV( 0x2116, 0x0320, 0x0001, 0x0001,
6525     "ST",
6526     "2A",
6527     diff --git a/drivers/video/aty/atyfb_base.c b/drivers/video/aty/atyfb_base.c
6528     index 5bf9123..5a3ce3a 100644
6529     --- a/drivers/video/aty/atyfb_base.c
6530     +++ b/drivers/video/aty/atyfb_base.c
6531     @@ -2969,10 +2969,8 @@ static int __devinit atyfb_setup_sparc(struct pci_dev *pdev,
6532     {
6533     struct atyfb_par *par = info->par;
6534     struct device_node *dp;
6535     - char prop[128];
6536     - phandle node;
6537     - int len, i, j, ret;
6538     u32 mem, chip_id;
6539     + int i, j, ret;
6540    
6541     /*
6542     * Map memory-mapped registers.
6543     @@ -3088,23 +3086,8 @@ static int __devinit atyfb_setup_sparc(struct pci_dev *pdev,
6544     aty_st_le32(MEM_CNTL, mem, par);
6545     }
6546    
6547     - /*
6548     - * If this is the console device, we will set default video
6549     - * settings to what the PROM left us with.
6550     - */
6551     - node = prom_getchild(prom_root_node);
6552     - node = prom_searchsiblings(node, "aliases");
6553     - if (node) {
6554     - len = prom_getproperty(node, "screen", prop, sizeof(prop));
6555     - if (len > 0) {
6556     - prop[len] = '\0';
6557     - node = prom_finddevice(prop);
6558     - } else
6559     - node = 0;
6560     - }
6561     -
6562     dp = pci_device_to_OF_node(pdev);
6563     - if (node == dp->phandle) {
6564     + if (dp == of_console_device) {
6565     struct fb_var_screeninfo *var = &default_var;
6566     unsigned int N, P, Q, M, T, R;
6567     u32 v_total, h_total;
6568     @@ -3112,9 +3095,9 @@ static int __devinit atyfb_setup_sparc(struct pci_dev *pdev,
6569     u8 pll_regs[16];
6570     u8 clock_cntl;
6571    
6572     - crtc.vxres = prom_getintdefault(node, "width", 1024);
6573     - crtc.vyres = prom_getintdefault(node, "height", 768);
6574     - var->bits_per_pixel = prom_getintdefault(node, "depth", 8);
6575     + crtc.vxres = of_getintprop_default(dp, "width", 1024);
6576     + crtc.vyres = of_getintprop_default(dp, "height", 768);
6577     + var->bits_per_pixel = of_getintprop_default(dp, "depth", 8);
6578     var->xoffset = var->yoffset = 0;
6579     crtc.h_tot_disp = aty_ld_le32(CRTC_H_TOTAL_DISP, par);
6580     crtc.h_sync_strt_wid = aty_ld_le32(CRTC_H_SYNC_STRT_WID, par);
6581     diff --git a/drivers/video/backlight/88pm860x_bl.c b/drivers/video/backlight/88pm860x_bl.c
6582     index 38ffc3f..c06c667 100644
6583     --- a/drivers/video/backlight/88pm860x_bl.c
6584     +++ b/drivers/video/backlight/88pm860x_bl.c
6585     @@ -21,7 +21,7 @@
6586     #define MAX_BRIGHTNESS (0xFF)
6587     #define MIN_BRIGHTNESS (0)
6588    
6589     -#define CURRENT_MASK (0x1F << 1)
6590     +#define CURRENT_BITMASK (0x1F << 1)
6591    
6592     struct pm860x_backlight_data {
6593     struct pm860x_chip *chip;
6594     @@ -85,7 +85,7 @@ static int pm860x_backlight_set(struct backlight_device *bl, int brightness)
6595     if ((data->current_brightness == 0) && brightness) {
6596     if (data->iset) {
6597     ret = pm860x_set_bits(data->i2c, wled_idc(data->port),
6598     - CURRENT_MASK, data->iset);
6599     + CURRENT_BITMASK, data->iset);
6600     if (ret < 0)
6601     goto out;
6602     }
6603     diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c
6604     index ef8d9d5..4fb5b2b 100644
6605     --- a/drivers/virtio/virtio_pci.c
6606     +++ b/drivers/virtio/virtio_pci.c
6607     @@ -96,11 +96,6 @@ static struct pci_device_id virtio_pci_id_table[] = {
6608    
6609     MODULE_DEVICE_TABLE(pci, virtio_pci_id_table);
6610    
6611     -/* A PCI device has it's own struct device and so does a virtio device so
6612     - * we create a place for the virtio devices to show up in sysfs. I think it
6613     - * would make more sense for virtio to not insist on having it's own device. */
6614     -static struct device *virtio_pci_root;
6615     -
6616     /* Convert a generic virtio device to our structure */
6617     static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev)
6618     {
6619     @@ -629,7 +624,7 @@ static int __devinit virtio_pci_probe(struct pci_dev *pci_dev,
6620     if (vp_dev == NULL)
6621     return -ENOMEM;
6622    
6623     - vp_dev->vdev.dev.parent = virtio_pci_root;
6624     + vp_dev->vdev.dev.parent = &pci_dev->dev;
6625     vp_dev->vdev.dev.release = virtio_pci_release_dev;
6626     vp_dev->vdev.config = &virtio_pci_config_ops;
6627     vp_dev->pci_dev = pci_dev;
6628     @@ -717,17 +712,7 @@ static struct pci_driver virtio_pci_driver = {
6629    
6630     static int __init virtio_pci_init(void)
6631     {
6632     - int err;
6633     -
6634     - virtio_pci_root = root_device_register("virtio-pci");
6635     - if (IS_ERR(virtio_pci_root))
6636     - return PTR_ERR(virtio_pci_root);
6637     -
6638     - err = pci_register_driver(&virtio_pci_driver);
6639     - if (err)
6640     - root_device_unregister(virtio_pci_root);
6641     -
6642     - return err;
6643     + return pci_register_driver(&virtio_pci_driver);
6644     }
6645    
6646     module_init(virtio_pci_init);
6647     @@ -735,7 +720,6 @@ module_init(virtio_pci_init);
6648     static void __exit virtio_pci_exit(void)
6649     {
6650     pci_unregister_driver(&virtio_pci_driver);
6651     - root_device_unregister(virtio_pci_root);
6652     }
6653    
6654     module_exit(virtio_pci_exit);
6655     diff --git a/drivers/xen/platform-pci.c b/drivers/xen/platform-pci.c
6656     index c01b5dd..afbe041 100644
6657     --- a/drivers/xen/platform-pci.c
6658     +++ b/drivers/xen/platform-pci.c
6659     @@ -105,7 +105,7 @@ static int __devinit platform_pci_init(struct pci_dev *pdev,
6660     const struct pci_device_id *ent)
6661     {
6662     int i, ret;
6663     - long ioaddr, iolen;
6664     + long ioaddr;
6665     long mmio_addr, mmio_len;
6666     unsigned int max_nr_gframes;
6667    
6668     @@ -114,7 +114,6 @@ static int __devinit platform_pci_init(struct pci_dev *pdev,
6669     return i;
6670    
6671     ioaddr = pci_resource_start(pdev, 0);
6672     - iolen = pci_resource_len(pdev, 0);
6673    
6674     mmio_addr = pci_resource_start(pdev, 1);
6675     mmio_len = pci_resource_len(pdev, 1);
6676     @@ -125,19 +124,13 @@ static int __devinit platform_pci_init(struct pci_dev *pdev,
6677     goto pci_out;
6678     }
6679    
6680     - if (request_mem_region(mmio_addr, mmio_len, DRV_NAME) == NULL) {
6681     - dev_err(&pdev->dev, "MEM I/O resource 0x%lx @ 0x%lx busy\n",
6682     - mmio_addr, mmio_len);
6683     - ret = -EBUSY;
6684     + ret = pci_request_region(pdev, 1, DRV_NAME);
6685     + if (ret < 0)
6686     goto pci_out;
6687     - }
6688    
6689     - if (request_region(ioaddr, iolen, DRV_NAME) == NULL) {
6690     - dev_err(&pdev->dev, "I/O resource 0x%lx @ 0x%lx busy\n",
6691     - iolen, ioaddr);
6692     - ret = -EBUSY;
6693     + ret = pci_request_region(pdev, 0, DRV_NAME);
6694     + if (ret < 0)
6695     goto mem_out;
6696     - }
6697    
6698     platform_mmio = mmio_addr;
6699     platform_mmiolen = mmio_len;
6700     @@ -169,9 +162,9 @@ static int __devinit platform_pci_init(struct pci_dev *pdev,
6701     return 0;
6702    
6703     out:
6704     - release_region(ioaddr, iolen);
6705     + pci_release_region(pdev, 0);
6706     mem_out:
6707     - release_mem_region(mmio_addr, mmio_len);
6708     + pci_release_region(pdev, 1);
6709     pci_out:
6710     pci_disable_device(pdev);
6711     return ret;
6712     diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h
6713     index e6d1481..95d5dbb 100644
6714     --- a/fs/cifs/cifsproto.h
6715     +++ b/fs/cifs/cifsproto.h
6716     @@ -347,7 +347,7 @@ extern int CIFSSMBLock(const int xid, struct cifsTconInfo *tcon,
6717     const __u16 netfid, const __u64 len,
6718     const __u64 offset, const __u32 numUnlock,
6719     const __u32 numLock, const __u8 lockType,
6720     - const bool waitFlag);
6721     + const bool waitFlag, const __u8 oplock_level);
6722     extern int CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon,
6723     const __u16 smb_file_id, const int get_flag,
6724     const __u64 len, struct file_lock *,
6725     diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
6726     index 67acfb3..0fa5c1f 100644
6727     --- a/fs/cifs/cifssmb.c
6728     +++ b/fs/cifs/cifssmb.c
6729     @@ -1666,7 +1666,8 @@ int
6730     CIFSSMBLock(const int xid, struct cifsTconInfo *tcon,
6731     const __u16 smb_file_id, const __u64 len,
6732     const __u64 offset, const __u32 numUnlock,
6733     - const __u32 numLock, const __u8 lockType, const bool waitFlag)
6734     + const __u32 numLock, const __u8 lockType,
6735     + const bool waitFlag, const __u8 oplock_level)
6736     {
6737     int rc = 0;
6738     LOCK_REQ *pSMB = NULL;
6739     @@ -1694,6 +1695,7 @@ CIFSSMBLock(const int xid, struct cifsTconInfo *tcon,
6740     pSMB->NumberOfLocks = cpu_to_le16(numLock);
6741     pSMB->NumberOfUnlocks = cpu_to_le16(numUnlock);
6742     pSMB->LockType = lockType;
6743     + pSMB->OplockLevel = oplock_level;
6744     pSMB->AndXCommand = 0xFF; /* none */
6745     pSMB->Fid = smb_file_id; /* netfid stays le */
6746    
6747     diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
6748     index cc1a860..ac75883 100644
6749     --- a/fs/cifs/connect.c
6750     +++ b/fs/cifs/connect.c
6751     @@ -2999,7 +2999,7 @@ CIFSTCon(unsigned int xid, struct cifsSesInfo *ses,
6752     bcc_ptr++; /* skip password */
6753     /* already aligned so no need to do it below */
6754     } else {
6755     - pSMB->PasswordLength = cpu_to_le16(CIFS_SESS_KEY_SIZE);
6756     + pSMB->PasswordLength = cpu_to_le16(CIFS_AUTH_RESP_SIZE);
6757     /* BB FIXME add code to fail this if NTLMv2 or Kerberos
6758     specified as required (when that support is added to
6759     the vfs in the future) as only NTLM or the much
6760     @@ -3017,7 +3017,7 @@ CIFSTCon(unsigned int xid, struct cifsSesInfo *ses,
6761     #endif /* CIFS_WEAK_PW_HASH */
6762     SMBNTencrypt(tcon->password, ses->server->cryptkey, bcc_ptr);
6763    
6764     - bcc_ptr += CIFS_SESS_KEY_SIZE;
6765     + bcc_ptr += CIFS_AUTH_RESP_SIZE;
6766     if (ses->capabilities & CAP_UNICODE) {
6767     /* must align unicode strings */
6768     *bcc_ptr = 0; /* null byte password */
6769     diff --git a/fs/cifs/file.c b/fs/cifs/file.c
6770     index 5a28660..904edbe 100644
6771     --- a/fs/cifs/file.c
6772     +++ b/fs/cifs/file.c
6773     @@ -779,12 +779,12 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
6774    
6775     /* BB we could chain these into one lock request BB */
6776     rc = CIFSSMBLock(xid, tcon, netfid, length, pfLock->fl_start,
6777     - 0, 1, lockType, 0 /* wait flag */ );
6778     + 0, 1, lockType, 0 /* wait flag */, 0);
6779     if (rc == 0) {
6780     rc = CIFSSMBLock(xid, tcon, netfid, length,
6781     pfLock->fl_start, 1 /* numUnlock */ ,
6782     0 /* numLock */ , lockType,
6783     - 0 /* wait flag */ );
6784     + 0 /* wait flag */, 0);
6785     pfLock->fl_type = F_UNLCK;
6786     if (rc != 0)
6787     cERROR(1, "Error unlocking previously locked "
6788     @@ -801,13 +801,13 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
6789     rc = CIFSSMBLock(xid, tcon, netfid, length,
6790     pfLock->fl_start, 0, 1,
6791     lockType | LOCKING_ANDX_SHARED_LOCK,
6792     - 0 /* wait flag */);
6793     + 0 /* wait flag */, 0);
6794     if (rc == 0) {
6795     rc = CIFSSMBLock(xid, tcon, netfid,
6796     length, pfLock->fl_start, 1, 0,
6797     lockType |
6798     LOCKING_ANDX_SHARED_LOCK,
6799     - 0 /* wait flag */);
6800     + 0 /* wait flag */, 0);
6801     pfLock->fl_type = F_RDLCK;
6802     if (rc != 0)
6803     cERROR(1, "Error unlocking "
6804     @@ -850,8 +850,8 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
6805    
6806     if (numLock) {
6807     rc = CIFSSMBLock(xid, tcon, netfid, length,
6808     - pfLock->fl_start,
6809     - 0, numLock, lockType, wait_flag);
6810     + pfLock->fl_start, 0, numLock, lockType,
6811     + wait_flag, 0);
6812    
6813     if (rc == 0) {
6814     /* For Windows locks we must store them. */
6815     @@ -871,9 +871,9 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
6816     (pfLock->fl_start + length) >=
6817     (li->offset + li->length)) {
6818     stored_rc = CIFSSMBLock(xid, tcon,
6819     - netfid,
6820     - li->length, li->offset,
6821     - 1, 0, li->type, false);
6822     + netfid, li->length,
6823     + li->offset, 1, 0,
6824     + li->type, false, 0);
6825     if (stored_rc)
6826     rc = stored_rc;
6827     else {
6828     @@ -2245,7 +2245,8 @@ void cifs_oplock_break(struct work_struct *work)
6829     */
6830     if (!cfile->oplock_break_cancelled) {
6831     rc = CIFSSMBLock(0, tlink_tcon(cfile->tlink), cfile->netfid, 0,
6832     - 0, 0, 0, LOCKING_ANDX_OPLOCK_RELEASE, false);
6833     + 0, 0, 0, LOCKING_ANDX_OPLOCK_RELEASE, false,
6834     + cinode->clientCanCacheRead ? 1 : 0);
6835     cFYI(1, "Oplock release rc = %d", rc);
6836     }
6837    
6838     diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c
6839     index 43f1028..09bfcf0 100644
6840     --- a/fs/cifs/misc.c
6841     +++ b/fs/cifs/misc.c
6842     @@ -571,7 +571,7 @@ is_valid_oplock_break(struct smb_hdr *buf, struct TCP_Server_Info *srv)
6843     pCifsInode = CIFS_I(netfile->dentry->d_inode);
6844    
6845     cifs_set_oplock_level(pCifsInode,
6846     - pSMB->OplockLevel);
6847     + pSMB->OplockLevel ? OPLOCK_READ : 0);
6848     /*
6849     * cifs_oplock_break_put() can't be called
6850     * from here. Get reference after queueing
6851     diff --git a/fs/direct-io.c b/fs/direct-io.c
6852     index 85882f6..b044705 100644
6853     --- a/fs/direct-io.c
6854     +++ b/fs/direct-io.c
6855     @@ -325,12 +325,16 @@ void dio_end_io(struct bio *bio, int error)
6856     }
6857     EXPORT_SYMBOL_GPL(dio_end_io);
6858    
6859     -static int
6860     +static void
6861     dio_bio_alloc(struct dio *dio, struct block_device *bdev,
6862     sector_t first_sector, int nr_vecs)
6863     {
6864     struct bio *bio;
6865    
6866     + /*
6867     + * bio_alloc() is guaranteed to return a bio when called with
6868     + * __GFP_WAIT and we request a valid number of vectors.
6869     + */
6870     bio = bio_alloc(GFP_KERNEL, nr_vecs);
6871    
6872     bio->bi_bdev = bdev;
6873     @@ -342,7 +346,6 @@ dio_bio_alloc(struct dio *dio, struct block_device *bdev,
6874    
6875     dio->bio = bio;
6876     dio->logical_offset_in_bio = dio->cur_page_fs_offset;
6877     - return 0;
6878     }
6879    
6880     /*
6881     @@ -583,8 +586,9 @@ static int dio_new_bio(struct dio *dio, sector_t start_sector)
6882     goto out;
6883     sector = start_sector << (dio->blkbits - 9);
6884     nr_pages = min(dio->pages_in_io, bio_get_nr_vecs(dio->map_bh.b_bdev));
6885     + nr_pages = min(nr_pages, BIO_MAX_PAGES);
6886     BUG_ON(nr_pages <= 0);
6887     - ret = dio_bio_alloc(dio, dio->map_bh.b_bdev, sector, nr_pages);
6888     + dio_bio_alloc(dio, dio->map_bh.b_bdev, sector, nr_pages);
6889     dio->boundary = 0;
6890     out:
6891     return ret;
6892     diff --git a/fs/eventpoll.c b/fs/eventpoll.c
6893     index 8cf0724..7daf1e6 100644
6894     --- a/fs/eventpoll.c
6895     +++ b/fs/eventpoll.c
6896     @@ -1111,6 +1111,17 @@ static int ep_send_events(struct eventpoll *ep,
6897     return ep_scan_ready_list(ep, ep_send_events_proc, &esed);
6898     }
6899    
6900     +static inline struct timespec ep_set_mstimeout(long ms)
6901     +{
6902     + struct timespec now, ts = {
6903     + .tv_sec = ms / MSEC_PER_SEC,
6904     + .tv_nsec = NSEC_PER_MSEC * (ms % MSEC_PER_SEC),
6905     + };
6906     +
6907     + ktime_get_ts(&now);
6908     + return timespec_add_safe(now, ts);
6909     +}
6910     +
6911     static int ep_poll(struct eventpoll *ep, struct epoll_event __user *events,
6912     int maxevents, long timeout)
6913     {
6914     @@ -1118,12 +1129,11 @@ static int ep_poll(struct eventpoll *ep, struct epoll_event __user *events,
6915     unsigned long flags;
6916     long slack;
6917     wait_queue_t wait;
6918     - struct timespec end_time;
6919     ktime_t expires, *to = NULL;
6920    
6921     if (timeout > 0) {
6922     - ktime_get_ts(&end_time);
6923     - timespec_add_ns(&end_time, (u64)timeout * NSEC_PER_MSEC);
6924     + struct timespec end_time = ep_set_mstimeout(timeout);
6925     +
6926     slack = select_estimate_accuracy(&end_time);
6927     to = &expires;
6928     *to = timespec_to_ktime(end_time);
6929     diff --git a/fs/exofs/inode.c b/fs/exofs/inode.c
6930     index 4268542..a755523 100644
6931     --- a/fs/exofs/inode.c
6932     +++ b/fs/exofs/inode.c
6933     @@ -1030,7 +1030,6 @@ struct inode *exofs_iget(struct super_block *sb, unsigned long ino)
6934     memcpy(oi->i_data, fcb.i_data, sizeof(fcb.i_data));
6935     }
6936    
6937     - inode->i_mapping->backing_dev_info = sb->s_bdi;
6938     if (S_ISREG(inode->i_mode)) {
6939     inode->i_op = &exofs_file_inode_operations;
6940     inode->i_fop = &exofs_file_operations;
6941     @@ -1131,7 +1130,6 @@ struct inode *exofs_new_inode(struct inode *dir, int mode)
6942    
6943     sbi = sb->s_fs_info;
6944    
6945     - inode->i_mapping->backing_dev_info = sb->s_bdi;
6946     sb->s_dirt = 1;
6947     inode_init_owner(inode, dir, mode);
6948     inode->i_ino = sbi->s_nextid++;
6949     diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
6950     index e659597..97a28e9 100644
6951     --- a/fs/ext4/inode.c
6952     +++ b/fs/ext4/inode.c
6953     @@ -4349,6 +4349,7 @@ static void ext4_free_branches(handle_t *handle, struct inode *inode,
6954     (__le32 *) bh->b_data,
6955     (__le32 *) bh->b_data + addr_per_block,
6956     depth);
6957     + brelse(bh);
6958    
6959     /*
6960     * Everything below this this pointer has been
6961     diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
6962     index 5b4d4e3..f1811d5 100644
6963     --- a/fs/ext4/mballoc.c
6964     +++ b/fs/ext4/mballoc.c
6965     @@ -342,10 +342,15 @@ static struct kmem_cache *ext4_free_ext_cachep;
6966     /* We create slab caches for groupinfo data structures based on the
6967     * superblock block size. There will be one per mounted filesystem for
6968     * each unique s_blocksize_bits */
6969     -#define NR_GRPINFO_CACHES \
6970     - (EXT4_MAX_BLOCK_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE + 1)
6971     +#define NR_GRPINFO_CACHES 8
6972     static struct kmem_cache *ext4_groupinfo_caches[NR_GRPINFO_CACHES];
6973    
6974     +static const char *ext4_groupinfo_slab_names[NR_GRPINFO_CACHES] = {
6975     + "ext4_groupinfo_1k", "ext4_groupinfo_2k", "ext4_groupinfo_4k",
6976     + "ext4_groupinfo_8k", "ext4_groupinfo_16k", "ext4_groupinfo_32k",
6977     + "ext4_groupinfo_64k", "ext4_groupinfo_128k"
6978     +};
6979     +
6980     static void ext4_mb_generate_from_pa(struct super_block *sb, void *bitmap,
6981     ext4_group_t group);
6982     static void ext4_mb_generate_from_freelist(struct super_block *sb, void *bitmap,
6983     @@ -2414,6 +2419,55 @@ err_freesgi:
6984     return -ENOMEM;
6985     }
6986    
6987     +static void ext4_groupinfo_destroy_slabs(void)
6988     +{
6989     + int i;
6990     +
6991     + for (i = 0; i < NR_GRPINFO_CACHES; i++) {
6992     + if (ext4_groupinfo_caches[i])
6993     + kmem_cache_destroy(ext4_groupinfo_caches[i]);
6994     + ext4_groupinfo_caches[i] = NULL;
6995     + }
6996     +}
6997     +
6998     +static int ext4_groupinfo_create_slab(size_t size)
6999     +{
7000     + static DEFINE_MUTEX(ext4_grpinfo_slab_create_mutex);
7001     + int slab_size;
7002     + int blocksize_bits = order_base_2(size);
7003     + int cache_index = blocksize_bits - EXT4_MIN_BLOCK_LOG_SIZE;
7004     + struct kmem_cache *cachep;
7005     +
7006     + if (cache_index >= NR_GRPINFO_CACHES)
7007     + return -EINVAL;
7008     +
7009     + if (unlikely(cache_index < 0))
7010     + cache_index = 0;
7011     +
7012     + mutex_lock(&ext4_grpinfo_slab_create_mutex);
7013     + if (ext4_groupinfo_caches[cache_index]) {
7014     + mutex_unlock(&ext4_grpinfo_slab_create_mutex);
7015     + return 0; /* Already created */
7016     + }
7017     +
7018     + slab_size = offsetof(struct ext4_group_info,
7019     + bb_counters[blocksize_bits + 2]);
7020     +
7021     + cachep = kmem_cache_create(ext4_groupinfo_slab_names[cache_index],
7022     + slab_size, 0, SLAB_RECLAIM_ACCOUNT,
7023     + NULL);
7024     +
7025     + mutex_unlock(&ext4_grpinfo_slab_create_mutex);
7026     + if (!cachep) {
7027     + printk(KERN_EMERG "EXT4: no memory for groupinfo slab cache\n");
7028     + return -ENOMEM;
7029     + }
7030     +
7031     + ext4_groupinfo_caches[cache_index] = cachep;
7032     +
7033     + return 0;
7034     +}
7035     +
7036     int ext4_mb_init(struct super_block *sb, int needs_recovery)
7037     {
7038     struct ext4_sb_info *sbi = EXT4_SB(sb);
7039     @@ -2421,9 +2475,6 @@ int ext4_mb_init(struct super_block *sb, int needs_recovery)
7040     unsigned offset;
7041     unsigned max;
7042     int ret;
7043     - int cache_index;
7044     - struct kmem_cache *cachep;
7045     - char *namep = NULL;
7046    
7047     i = (sb->s_blocksize_bits + 2) * sizeof(*sbi->s_mb_offsets);
7048    
7049     @@ -2440,30 +2491,9 @@ int ext4_mb_init(struct super_block *sb, int needs_recovery)
7050     goto out;
7051     }
7052    
7053     - cache_index = sb->s_blocksize_bits - EXT4_MIN_BLOCK_LOG_SIZE;
7054     - cachep = ext4_groupinfo_caches[cache_index];
7055     - if (!cachep) {
7056     - char name[32];
7057     - int len = offsetof(struct ext4_group_info,
7058     - bb_counters[sb->s_blocksize_bits + 2]);
7059     -
7060     - sprintf(name, "ext4_groupinfo_%d", sb->s_blocksize_bits);
7061     - namep = kstrdup(name, GFP_KERNEL);
7062     - if (!namep) {
7063     - ret = -ENOMEM;
7064     - goto out;
7065     - }
7066     -
7067     - /* Need to free the kmem_cache_name() when we
7068     - * destroy the slab */
7069     - cachep = kmem_cache_create(namep, len, 0,
7070     - SLAB_RECLAIM_ACCOUNT, NULL);
7071     - if (!cachep) {
7072     - ret = -ENOMEM;
7073     - goto out;
7074     - }
7075     - ext4_groupinfo_caches[cache_index] = cachep;
7076     - }
7077     + ret = ext4_groupinfo_create_slab(sb->s_blocksize);
7078     + if (ret < 0)
7079     + goto out;
7080    
7081     /* order 0 is regular bitmap */
7082     sbi->s_mb_maxs[0] = sb->s_blocksize << 3;
7083     @@ -2520,7 +2550,6 @@ out:
7084     if (ret) {
7085     kfree(sbi->s_mb_offsets);
7086     kfree(sbi->s_mb_maxs);
7087     - kfree(namep);
7088     }
7089     return ret;
7090     }
7091     @@ -2734,7 +2763,6 @@ int __init ext4_init_mballoc(void)
7092    
7093     void ext4_exit_mballoc(void)
7094     {
7095     - int i;
7096     /*
7097     * Wait for completion of call_rcu()'s on ext4_pspace_cachep
7098     * before destroying the slab cache.
7099     @@ -2743,15 +2771,7 @@ void ext4_exit_mballoc(void)
7100     kmem_cache_destroy(ext4_pspace_cachep);
7101     kmem_cache_destroy(ext4_ac_cachep);
7102     kmem_cache_destroy(ext4_free_ext_cachep);
7103     -
7104     - for (i = 0; i < NR_GRPINFO_CACHES; i++) {
7105     - struct kmem_cache *cachep = ext4_groupinfo_caches[i];
7106     - if (cachep) {
7107     - char *name = (char *)kmem_cache_name(cachep);
7108     - kmem_cache_destroy(cachep);
7109     - kfree(name);
7110     - }
7111     - }
7112     + ext4_groupinfo_destroy_slabs();
7113     ext4_remove_debugfs_entry();
7114     }
7115    
7116     @@ -4851,7 +4871,7 @@ int ext4_trim_fs(struct super_block *sb, struct fstrim_range *range)
7117     if (len >= EXT4_BLOCKS_PER_GROUP(sb))
7118     len -= (EXT4_BLOCKS_PER_GROUP(sb) - first_block);
7119     else
7120     - last_block = len;
7121     + last_block = first_block + len;
7122    
7123     if (e4b.bd_info->bb_free >= minlen) {
7124     cnt = ext4_trim_all_free(sb, &e4b, first_block,
7125     diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
7126     index beacce1..736f4ee 100644
7127     --- a/fs/ext4/page-io.c
7128     +++ b/fs/ext4/page-io.c
7129     @@ -193,6 +193,7 @@ static void ext4_end_bio(struct bio *bio, int error)
7130     struct inode *inode;
7131     unsigned long flags;
7132     int i;
7133     + sector_t bi_sector = bio->bi_sector;
7134    
7135     BUG_ON(!io_end);
7136     bio->bi_private = NULL;
7137     @@ -210,9 +211,7 @@ static void ext4_end_bio(struct bio *bio, int error)
7138     if (error)
7139     SetPageError(page);
7140     BUG_ON(!head);
7141     - if (head->b_size == PAGE_CACHE_SIZE)
7142     - clear_buffer_dirty(head);
7143     - else {
7144     + if (head->b_size != PAGE_CACHE_SIZE) {
7145     loff_t offset;
7146     loff_t io_end_offset = io_end->offset + io_end->size;
7147    
7148     @@ -224,7 +223,6 @@ static void ext4_end_bio(struct bio *bio, int error)
7149     if (error)
7150     buffer_io_error(bh);
7151    
7152     - clear_buffer_dirty(bh);
7153     }
7154     if (buffer_delay(bh))
7155     partial_write = 1;
7156     @@ -260,7 +258,7 @@ static void ext4_end_bio(struct bio *bio, int error)
7157     (unsigned long long) io_end->offset,
7158     (long) io_end->size,
7159     (unsigned long long)
7160     - bio->bi_sector >> (inode->i_blkbits - 9));
7161     + bi_sector >> (inode->i_blkbits - 9));
7162     }
7163    
7164     /* Add the io_end to per-inode completed io list*/
7165     @@ -383,6 +381,7 @@ int ext4_bio_write_page(struct ext4_io_submit *io,
7166    
7167     blocksize = 1 << inode->i_blkbits;
7168    
7169     + BUG_ON(!PageLocked(page));
7170     BUG_ON(PageWriteback(page));
7171     set_page_writeback(page);
7172     ClearPageError(page);
7173     @@ -400,12 +399,14 @@ int ext4_bio_write_page(struct ext4_io_submit *io,
7174     for (bh = head = page_buffers(page), block_start = 0;
7175     bh != head || !block_start;
7176     block_start = block_end, bh = bh->b_this_page) {
7177     +
7178     block_end = block_start + blocksize;
7179     if (block_start >= len) {
7180     clear_buffer_dirty(bh);
7181     set_buffer_uptodate(bh);
7182     continue;
7183     }
7184     + clear_buffer_dirty(bh);
7185     ret = io_submit_add_bh(io, io_page, inode, wbc, bh);
7186     if (ret) {
7187     /*
7188     diff --git a/fs/ext4/super.c b/fs/ext4/super.c
7189     index fb15c9c..851eac3 100644
7190     --- a/fs/ext4/super.c
7191     +++ b/fs/ext4/super.c
7192     @@ -77,6 +77,7 @@ static struct dentry *ext4_mount(struct file_system_type *fs_type, int flags,
7193     const char *dev_name, void *data);
7194     static void ext4_destroy_lazyinit_thread(void);
7195     static void ext4_unregister_li_request(struct super_block *sb);
7196     +static void ext4_clear_request_list(void);
7197    
7198     #if !defined(CONFIG_EXT3_FS) && !defined(CONFIG_EXT3_FS_MODULE) && defined(CONFIG_EXT4_USE_FOR_EXT23)
7199     static struct file_system_type ext3_fs_type = {
7200     @@ -2704,6 +2705,8 @@ static void ext4_unregister_li_request(struct super_block *sb)
7201     mutex_unlock(&ext4_li_info->li_list_mtx);
7202     }
7203    
7204     +static struct task_struct *ext4_lazyinit_task;
7205     +
7206     /*
7207     * This is the function where ext4lazyinit thread lives. It walks
7208     * through the request list searching for next scheduled filesystem.
7209     @@ -2772,6 +2775,10 @@ cont_thread:
7210     if (time_before(jiffies, next_wakeup))
7211     schedule();
7212     finish_wait(&eli->li_wait_daemon, &wait);
7213     + if (kthread_should_stop()) {
7214     + ext4_clear_request_list();
7215     + goto exit_thread;
7216     + }
7217     }
7218    
7219     exit_thread:
7220     @@ -2796,6 +2803,7 @@ exit_thread:
7221     wake_up(&eli->li_wait_task);
7222    
7223     kfree(ext4_li_info);
7224     + ext4_lazyinit_task = NULL;
7225     ext4_li_info = NULL;
7226     mutex_unlock(&ext4_li_mtx);
7227    
7228     @@ -2818,11 +2826,10 @@ static void ext4_clear_request_list(void)
7229    
7230     static int ext4_run_lazyinit_thread(void)
7231     {
7232     - struct task_struct *t;
7233     -
7234     - t = kthread_run(ext4_lazyinit_thread, ext4_li_info, "ext4lazyinit");
7235     - if (IS_ERR(t)) {
7236     - int err = PTR_ERR(t);
7237     + ext4_lazyinit_task = kthread_run(ext4_lazyinit_thread,
7238     + ext4_li_info, "ext4lazyinit");
7239     + if (IS_ERR(ext4_lazyinit_task)) {
7240     + int err = PTR_ERR(ext4_lazyinit_task);
7241     ext4_clear_request_list();
7242     del_timer_sync(&ext4_li_info->li_timer);
7243     kfree(ext4_li_info);
7244     @@ -2916,7 +2923,7 @@ static int ext4_register_li_request(struct super_block *sb,
7245     struct ext4_sb_info *sbi = EXT4_SB(sb);
7246     struct ext4_li_request *elr;
7247     ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count;
7248     - int ret;
7249     + int ret = 0;
7250    
7251     if (sbi->s_li_request != NULL)
7252     return 0;
7253     @@ -2973,16 +2980,10 @@ static void ext4_destroy_lazyinit_thread(void)
7254     * If thread exited earlier
7255     * there's nothing to be done.
7256     */
7257     - if (!ext4_li_info)
7258     + if (!ext4_li_info || !ext4_lazyinit_task)
7259     return;
7260    
7261     - ext4_clear_request_list();
7262     -
7263     - while (ext4_li_info->li_task) {
7264     - wake_up(&ext4_li_info->li_wait_daemon);
7265     - wait_event(ext4_li_info->li_wait_task,
7266     - ext4_li_info->li_task == NULL);
7267     - }
7268     + kthread_stop(ext4_lazyinit_task);
7269     }
7270    
7271     static int ext4_fill_super(struct super_block *sb, void *data, int silent)
7272     @@ -4756,7 +4757,7 @@ static struct file_system_type ext4_fs_type = {
7273     .fs_flags = FS_REQUIRES_DEV,
7274     };
7275    
7276     -int __init ext4_init_feat_adverts(void)
7277     +static int __init ext4_init_feat_adverts(void)
7278     {
7279     struct ext4_features *ef;
7280     int ret = -ENOMEM;
7281     @@ -4780,6 +4781,13 @@ out:
7282     return ret;
7283     }
7284    
7285     +static void ext4_exit_feat_adverts(void)
7286     +{
7287     + kobject_put(&ext4_feat->f_kobj);
7288     + wait_for_completion(&ext4_feat->f_kobj_unregister);
7289     + kfree(ext4_feat);
7290     +}
7291     +
7292     static int __init ext4_init_fs(void)
7293     {
7294     int err;
7295     @@ -4826,7 +4834,7 @@ out1:
7296     out2:
7297     ext4_exit_mballoc();
7298     out3:
7299     - kfree(ext4_feat);
7300     + ext4_exit_feat_adverts();
7301     remove_proc_entry("fs/ext4", NULL);
7302     kset_unregister(ext4_kset);
7303     out4:
7304     @@ -4845,6 +4853,7 @@ static void __exit ext4_exit_fs(void)
7305     destroy_inodecache();
7306     ext4_exit_xattr();
7307     ext4_exit_mballoc();
7308     + ext4_exit_feat_adverts();
7309     remove_proc_entry("fs/ext4", NULL);
7310     kset_unregister(ext4_kset);
7311     ext4_exit_system_zone();
7312     diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
7313     index 3d06ccc..cdbf7ac 100644
7314     --- a/fs/fs-writeback.c
7315     +++ b/fs/fs-writeback.c
7316     @@ -84,13 +84,9 @@ static inline struct inode *wb_inode(struct list_head *head)
7317     return list_entry(head, struct inode, i_wb_list);
7318     }
7319    
7320     -static void bdi_queue_work(struct backing_dev_info *bdi,
7321     - struct wb_writeback_work *work)
7322     +/* Wakeup flusher thread or forker thread to fork it. Requires bdi->wb_lock. */
7323     +static void bdi_wakeup_flusher(struct backing_dev_info *bdi)
7324     {
7325     - trace_writeback_queue(bdi, work);
7326     -
7327     - spin_lock_bh(&bdi->wb_lock);
7328     - list_add_tail(&work->list, &bdi->work_list);
7329     if (bdi->wb.task) {
7330     wake_up_process(bdi->wb.task);
7331     } else {
7332     @@ -98,15 +94,26 @@ static void bdi_queue_work(struct backing_dev_info *bdi,
7333     * The bdi thread isn't there, wake up the forker thread which
7334     * will create and run it.
7335     */
7336     - trace_writeback_nothread(bdi, work);
7337     wake_up_process(default_backing_dev_info.wb.task);
7338     }
7339     +}
7340     +
7341     +static void bdi_queue_work(struct backing_dev_info *bdi,
7342     + struct wb_writeback_work *work)
7343     +{
7344     + trace_writeback_queue(bdi, work);
7345     +
7346     + spin_lock_bh(&bdi->wb_lock);
7347     + list_add_tail(&work->list, &bdi->work_list);
7348     + if (!bdi->wb.task)
7349     + trace_writeback_nothread(bdi, work);
7350     + bdi_wakeup_flusher(bdi);
7351     spin_unlock_bh(&bdi->wb_lock);
7352     }
7353    
7354     static void
7355     __bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages,
7356     - bool range_cyclic, bool for_background)
7357     + bool range_cyclic)
7358     {
7359     struct wb_writeback_work *work;
7360    
7361     @@ -126,7 +133,6 @@ __bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages,
7362     work->sync_mode = WB_SYNC_NONE;
7363     work->nr_pages = nr_pages;
7364     work->range_cyclic = range_cyclic;
7365     - work->for_background = for_background;
7366    
7367     bdi_queue_work(bdi, work);
7368     }
7369     @@ -144,7 +150,7 @@ __bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages,
7370     */
7371     void bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages)
7372     {
7373     - __bdi_start_writeback(bdi, nr_pages, true, false);
7374     + __bdi_start_writeback(bdi, nr_pages, true);
7375     }
7376    
7377     /**
7378     @@ -152,13 +158,20 @@ void bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages)
7379     * @bdi: the backing device to write from
7380     *
7381     * Description:
7382     - * This does WB_SYNC_NONE background writeback. The IO is only
7383     - * started when this function returns, we make no guarentees on
7384     - * completion. Caller need not hold sb s_umount semaphore.
7385     + * This makes sure WB_SYNC_NONE background writeback happens. When
7386     + * this function returns, it is only guaranteed that for given BDI
7387     + * some IO is happening if we are over background dirty threshold.
7388     + * Caller need not hold sb s_umount semaphore.
7389     */
7390     void bdi_start_background_writeback(struct backing_dev_info *bdi)
7391     {
7392     - __bdi_start_writeback(bdi, LONG_MAX, true, true);
7393     + /*
7394     + * We just wake up the flusher thread. It will perform background
7395     + * writeback as soon as there is no other work to do.
7396     + */
7397     + spin_lock_bh(&bdi->wb_lock);
7398     + bdi_wakeup_flusher(bdi);
7399     + spin_unlock_bh(&bdi->wb_lock);
7400     }
7401    
7402     /*
7403     @@ -616,6 +629,7 @@ static long wb_writeback(struct bdi_writeback *wb,
7404     };
7405     unsigned long oldest_jif;
7406     long wrote = 0;
7407     + long write_chunk;
7408     struct inode *inode;
7409    
7410     if (wbc.for_kupdate) {
7411     @@ -628,6 +642,24 @@ static long wb_writeback(struct bdi_writeback *wb,
7412     wbc.range_end = LLONG_MAX;
7413     }
7414    
7415     + /*
7416     + * WB_SYNC_ALL mode does livelock avoidance by syncing dirty
7417     + * inodes/pages in one big loop. Setting wbc.nr_to_write=LONG_MAX
7418     + * here avoids calling into writeback_inodes_wb() more than once.
7419     + *
7420     + * The intended call sequence for WB_SYNC_ALL writeback is:
7421     + *
7422     + * wb_writeback()
7423     + * __writeback_inodes_sb() <== called only once
7424     + * write_cache_pages() <== called once for each inode
7425     + * (quickly) tag currently dirty pages
7426     + * (maybe slowly) sync all tagged pages
7427     + */
7428     + if (wbc.sync_mode == WB_SYNC_NONE)
7429     + write_chunk = MAX_WRITEBACK_PAGES;
7430     + else
7431     + write_chunk = LONG_MAX;
7432     +
7433     wbc.wb_start = jiffies; /* livelock avoidance */
7434     for (;;) {
7435     /*
7436     @@ -637,6 +669,16 @@ static long wb_writeback(struct bdi_writeback *wb,
7437     break;
7438    
7439     /*
7440     + * Background writeout and kupdate-style writeback may
7441     + * run forever. Stop them if there is other work to do
7442     + * so that e.g. sync can proceed. They'll be restarted
7443     + * after the other works are all done.
7444     + */
7445     + if ((work->for_background || work->for_kupdate) &&
7446     + !list_empty(&wb->bdi->work_list))
7447     + break;
7448     +
7449     + /*
7450     * For background writeout, stop when we are below the
7451     * background dirty threshold
7452     */
7453     @@ -644,7 +686,7 @@ static long wb_writeback(struct bdi_writeback *wb,
7454     break;
7455    
7456     wbc.more_io = 0;
7457     - wbc.nr_to_write = MAX_WRITEBACK_PAGES;
7458     + wbc.nr_to_write = write_chunk;
7459     wbc.pages_skipped = 0;
7460    
7461     trace_wbc_writeback_start(&wbc, wb->bdi);
7462     @@ -654,8 +696,8 @@ static long wb_writeback(struct bdi_writeback *wb,
7463     writeback_inodes_wb(wb, &wbc);
7464     trace_wbc_writeback_written(&wbc, wb->bdi);
7465    
7466     - work->nr_pages -= MAX_WRITEBACK_PAGES - wbc.nr_to_write;
7467     - wrote += MAX_WRITEBACK_PAGES - wbc.nr_to_write;
7468     + work->nr_pages -= write_chunk - wbc.nr_to_write;
7469     + wrote += write_chunk - wbc.nr_to_write;
7470    
7471     /*
7472     * If we consumed everything, see if we have more
7473     @@ -670,7 +712,7 @@ static long wb_writeback(struct bdi_writeback *wb,
7474     /*
7475     * Did we write something? Try for more
7476     */
7477     - if (wbc.nr_to_write < MAX_WRITEBACK_PAGES)
7478     + if (wbc.nr_to_write < write_chunk)
7479     continue;
7480     /*
7481     * Nothing written. Wait for some inode to
7482     @@ -718,6 +760,23 @@ static unsigned long get_nr_dirty_pages(void)
7483     get_nr_dirty_inodes();
7484     }
7485    
7486     +static long wb_check_background_flush(struct bdi_writeback *wb)
7487     +{
7488     + if (over_bground_thresh()) {
7489     +
7490     + struct wb_writeback_work work = {
7491     + .nr_pages = LONG_MAX,
7492     + .sync_mode = WB_SYNC_NONE,
7493     + .for_background = 1,
7494     + .range_cyclic = 1,
7495     + };
7496     +
7497     + return wb_writeback(wb, &work);
7498     + }
7499     +
7500     + return 0;
7501     +}
7502     +
7503     static long wb_check_old_data_flush(struct bdi_writeback *wb)
7504     {
7505     unsigned long expired;
7506     @@ -787,6 +846,7 @@ long wb_do_writeback(struct bdi_writeback *wb, int force_wait)
7507     * Check for periodic writeback, kupdated() style
7508     */
7509     wrote += wb_check_old_data_flush(wb);
7510     + wrote += wb_check_background_flush(wb);
7511     clear_bit(BDI_writeback_running, &wb->bdi->state);
7512    
7513     return wrote;
7514     @@ -873,7 +933,7 @@ void wakeup_flusher_threads(long nr_pages)
7515     list_for_each_entry_rcu(bdi, &bdi_list, bdi_list) {
7516     if (!bdi_has_dirty_io(bdi))
7517     continue;
7518     - __bdi_start_writeback(bdi, nr_pages, false, false);
7519     + __bdi_start_writeback(bdi, nr_pages, false);
7520     }
7521     rcu_read_unlock();
7522     }
7523     diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c
7524     index 1fd62fc..78df330 100644
7525     --- a/fs/nfs/delegation.c
7526     +++ b/fs/nfs/delegation.c
7527     @@ -23,8 +23,6 @@
7528    
7529     static void nfs_do_free_delegation(struct nfs_delegation *delegation)
7530     {
7531     - if (delegation->cred)
7532     - put_rpccred(delegation->cred);
7533     kfree(delegation);
7534     }
7535    
7536     @@ -37,6 +35,10 @@ static void nfs_free_delegation_callback(struct rcu_head *head)
7537    
7538     static void nfs_free_delegation(struct nfs_delegation *delegation)
7539     {
7540     + if (delegation->cred) {
7541     + put_rpccred(delegation->cred);
7542     + delegation->cred = NULL;
7543     + }
7544     call_rcu(&delegation->rcu, nfs_free_delegation_callback);
7545     }
7546    
7547     diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
7548     index 996dd89..bd80b38 100644
7549     --- a/fs/nfs/dir.c
7550     +++ b/fs/nfs/dir.c
7551     @@ -33,7 +33,6 @@
7552     #include <linux/namei.h>
7553     #include <linux/mount.h>
7554     #include <linux/sched.h>
7555     -#include <linux/vmalloc.h>
7556     #include <linux/kmemleak.h>
7557    
7558     #include "delegation.h"
7559     @@ -459,25 +458,26 @@ out:
7560     /* Perform conversion from xdr to cache array */
7561     static
7562     int nfs_readdir_page_filler(nfs_readdir_descriptor_t *desc, struct nfs_entry *entry,
7563     - void *xdr_page, struct page *page, unsigned int buflen)
7564     + struct page **xdr_pages, struct page *page, unsigned int buflen)
7565     {
7566     struct xdr_stream stream;
7567     - struct xdr_buf buf;
7568     - __be32 *ptr = xdr_page;
7569     + struct xdr_buf buf = {
7570     + .pages = xdr_pages,
7571     + .page_len = buflen,
7572     + .buflen = buflen,
7573     + .len = buflen,
7574     + };
7575     + struct page *scratch;
7576     struct nfs_cache_array *array;
7577     unsigned int count = 0;
7578     int status;
7579    
7580     - buf.head->iov_base = xdr_page;
7581     - buf.head->iov_len = buflen;
7582     - buf.tail->iov_len = 0;
7583     - buf.page_base = 0;
7584     - buf.page_len = 0;
7585     - buf.buflen = buf.head->iov_len;
7586     - buf.len = buf.head->iov_len;
7587     -
7588     - xdr_init_decode(&stream, &buf, ptr);
7589     + scratch = alloc_page(GFP_KERNEL);
7590     + if (scratch == NULL)
7591     + return -ENOMEM;
7592    
7593     + xdr_init_decode(&stream, &buf, NULL);
7594     + xdr_set_scratch_buffer(&stream, page_address(scratch), PAGE_SIZE);
7595    
7596     do {
7597     status = xdr_decode(desc, entry, &stream);
7598     @@ -506,6 +506,8 @@ int nfs_readdir_page_filler(nfs_readdir_descriptor_t *desc, struct nfs_entry *en
7599     } else
7600     status = PTR_ERR(array);
7601     }
7602     +
7603     + put_page(scratch);
7604     return status;
7605     }
7606    
7607     @@ -521,7 +523,6 @@ static
7608     void nfs_readdir_free_large_page(void *ptr, struct page **pages,
7609     unsigned int npages)
7610     {
7611     - vm_unmap_ram(ptr, npages);
7612     nfs_readdir_free_pagearray(pages, npages);
7613     }
7614    
7615     @@ -530,9 +531,8 @@ void nfs_readdir_free_large_page(void *ptr, struct page **pages,
7616     * to nfs_readdir_free_large_page
7617     */
7618     static
7619     -void *nfs_readdir_large_page(struct page **pages, unsigned int npages)
7620     +int nfs_readdir_large_page(struct page **pages, unsigned int npages)
7621     {
7622     - void *ptr;
7623     unsigned int i;
7624    
7625     for (i = 0; i < npages; i++) {
7626     @@ -541,13 +541,11 @@ void *nfs_readdir_large_page(struct page **pages, unsigned int npages)
7627     goto out_freepages;
7628     pages[i] = page;
7629     }
7630     + return 0;
7631    
7632     - ptr = vm_map_ram(pages, npages, 0, PAGE_KERNEL);
7633     - if (!IS_ERR_OR_NULL(ptr))
7634     - return ptr;
7635     out_freepages:
7636     nfs_readdir_free_pagearray(pages, i);
7637     - return NULL;
7638     + return -ENOMEM;
7639     }
7640    
7641     static
7642     @@ -577,8 +575,8 @@ int nfs_readdir_xdr_to_array(nfs_readdir_descriptor_t *desc, struct page *page,
7643     memset(array, 0, sizeof(struct nfs_cache_array));
7644     array->eof_index = -1;
7645    
7646     - pages_ptr = nfs_readdir_large_page(pages, array_size);
7647     - if (!pages_ptr)
7648     + status = nfs_readdir_large_page(pages, array_size);
7649     + if (status < 0)
7650     goto out_release_array;
7651     do {
7652     unsigned int pglen;
7653     @@ -587,7 +585,7 @@ int nfs_readdir_xdr_to_array(nfs_readdir_descriptor_t *desc, struct page *page,
7654     if (status < 0)
7655     break;
7656     pglen = status;
7657     - status = nfs_readdir_page_filler(desc, &entry, pages_ptr, page, pglen);
7658     + status = nfs_readdir_page_filler(desc, &entry, pages, page, pglen);
7659     if (status < 0) {
7660     if (status == -ENOSPC)
7661     status = 0;
7662     @@ -1579,6 +1577,7 @@ static int nfs_create(struct inode *dir, struct dentry *dentry, int mode,
7663     {
7664     struct iattr attr;
7665     int error;
7666     + int open_flags = 0;
7667    
7668     dfprintk(VFS, "NFS: create(%s/%ld), %s\n",
7669     dir->i_sb->s_id, dir->i_ino, dentry->d_name.name);
7670     @@ -1586,7 +1585,10 @@ static int nfs_create(struct inode *dir, struct dentry *dentry, int mode,
7671     attr.ia_mode = mode;
7672     attr.ia_valid = ATTR_MODE;
7673    
7674     - error = NFS_PROTO(dir)->create(dir, dentry, &attr, 0, NULL);
7675     + if ((nd->flags & LOOKUP_CREATE) != 0)
7676     + open_flags = nd->intent.open.flags;
7677     +
7678     + error = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags, NULL);
7679     if (error != 0)
7680     goto out_err;
7681     return 0;
7682     diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
7683     index e6ace0d..9943a75 100644
7684     --- a/fs/nfs/direct.c
7685     +++ b/fs/nfs/direct.c
7686     @@ -407,15 +407,18 @@ static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq,
7687     pos += vec->iov_len;
7688     }
7689    
7690     + /*
7691     + * If no bytes were started, return the error, and let the
7692     + * generic layer handle the completion.
7693     + */
7694     + if (requested_bytes == 0) {
7695     + nfs_direct_req_release(dreq);
7696     + return result < 0 ? result : -EIO;
7697     + }
7698     +
7699     if (put_dreq(dreq))
7700     nfs_direct_complete(dreq);
7701     -
7702     - if (requested_bytes != 0)
7703     - return 0;
7704     -
7705     - if (result < 0)
7706     - return result;
7707     - return -EIO;
7708     + return 0;
7709     }
7710    
7711     static ssize_t nfs_direct_read(struct kiocb *iocb, const struct iovec *iov,
7712     @@ -841,15 +844,18 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,
7713     pos += vec->iov_len;
7714     }
7715    
7716     + /*
7717     + * If no bytes were started, return the error, and let the
7718     + * generic layer handle the completion.
7719     + */
7720     + if (requested_bytes == 0) {
7721     + nfs_direct_req_release(dreq);
7722     + return result < 0 ? result : -EIO;
7723     + }
7724     +
7725     if (put_dreq(dreq))
7726     nfs_direct_write_complete(dreq, dreq->inode);
7727     -
7728     - if (requested_bytes != 0)
7729     - return 0;
7730     -
7731     - if (result < 0)
7732     - return result;
7733     - return -EIO;
7734     + return 0;
7735     }
7736    
7737     static ssize_t nfs_direct_write(struct kiocb *iocb, const struct iovec *iov,
7738     diff --git a/fs/nfs/nfs2xdr.c b/fs/nfs/nfs2xdr.c
7739     index 5914a19..b382a1b 100644
7740     --- a/fs/nfs/nfs2xdr.c
7741     +++ b/fs/nfs/nfs2xdr.c
7742     @@ -487,12 +487,6 @@ nfs_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry, struct nfs_se
7743    
7744     entry->d_type = DT_UNKNOWN;
7745    
7746     - p = xdr_inline_peek(xdr, 8);
7747     - if (p != NULL)
7748     - entry->eof = !p[0] && p[1];
7749     - else
7750     - entry->eof = 0;
7751     -
7752     return p;
7753    
7754     out_overflow:
7755     diff --git a/fs/nfs/nfs3xdr.c b/fs/nfs/nfs3xdr.c
7756     index f6cc60f..ba91236 100644
7757     --- a/fs/nfs/nfs3xdr.c
7758     +++ b/fs/nfs/nfs3xdr.c
7759     @@ -647,12 +647,6 @@ nfs3_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry, struct nfs_s
7760     memset((u8*)(entry->fh), 0, sizeof(*entry->fh));
7761     }
7762    
7763     - p = xdr_inline_peek(xdr, 8);
7764     - if (p != NULL)
7765     - entry->eof = !p[0] && p[1];
7766     - else
7767     - entry->eof = 0;
7768     -
7769     return p;
7770    
7771     out_overflow:
7772     diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
7773     index 9f1826b..0662a98 100644
7774     --- a/fs/nfs/nfs4xdr.c
7775     +++ b/fs/nfs/nfs4xdr.c
7776     @@ -6215,12 +6215,6 @@ __be32 *nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
7777     if (verify_attr_len(xdr, p, len) < 0)
7778     goto out_overflow;
7779    
7780     - p = xdr_inline_peek(xdr, 8);
7781     - if (p != NULL)
7782     - entry->eof = !p[0] && p[1];
7783     - else
7784     - entry->eof = 0;
7785     -
7786     return p;
7787    
7788     out_overflow:
7789     diff --git a/fs/nfsd/nfs4idmap.c b/fs/nfsd/nfs4idmap.c
7790     index f0695e8..844960f 100644
7791     --- a/fs/nfsd/nfs4idmap.c
7792     +++ b/fs/nfsd/nfs4idmap.c
7793     @@ -524,13 +524,13 @@ idmap_name_to_id(struct svc_rqst *rqstp, int type, const char *name, u32 namelen
7794     int ret;
7795    
7796     if (namelen + 1 > sizeof(key.name))
7797     - return -EINVAL;
7798     + return -ESRCH; /* nfserr_badowner */
7799     memcpy(key.name, name, namelen);
7800     key.name[namelen] = '\0';
7801     strlcpy(key.authname, rqst_authname(rqstp), sizeof(key.authname));
7802     ret = idmap_lookup(rqstp, nametoid_lookup, &key, &nametoid_cache, &item);
7803     if (ret == -ENOENT)
7804     - ret = -ESRCH; /* nfserr_badname */
7805     + ret = -ESRCH; /* nfserr_badowner */
7806     if (ret)
7807     return ret;
7808     *id = item->id;
7809     diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h
7810     index 6b641cf..7ecfa24 100644
7811     --- a/fs/nfsd/nfsd.h
7812     +++ b/fs/nfsd/nfsd.h
7813     @@ -158,6 +158,7 @@ void nfsd_lockd_shutdown(void);
7814     #define nfserr_attrnotsupp cpu_to_be32(NFSERR_ATTRNOTSUPP)
7815     #define nfserr_bad_xdr cpu_to_be32(NFSERR_BAD_XDR)
7816     #define nfserr_openmode cpu_to_be32(NFSERR_OPENMODE)
7817     +#define nfserr_badowner cpu_to_be32(NFSERR_BADOWNER)
7818     #define nfserr_locks_held cpu_to_be32(NFSERR_LOCKS_HELD)
7819     #define nfserr_op_illegal cpu_to_be32(NFSERR_OP_ILLEGAL)
7820     #define nfserr_grace cpu_to_be32(NFSERR_GRACE)
7821     diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c
7822     index 08e1726..f0c2f23 100644
7823     --- a/fs/nfsd/nfsproc.c
7824     +++ b/fs/nfsd/nfsproc.c
7825     @@ -737,7 +737,7 @@ nfserrno (int errno)
7826     { nfserr_jukebox, -ERESTARTSYS },
7827     { nfserr_dropit, -EAGAIN },
7828     { nfserr_dropit, -ENOMEM },
7829     - { nfserr_badname, -ESRCH },
7830     + { nfserr_badowner, -ESRCH },
7831     { nfserr_io, -ETXTBSY },
7832     { nfserr_notsupp, -EOPNOTSUPP },
7833     { nfserr_toosmall, -ETOOSMALL },
7834     diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c
7835     index f804d41..2940a58 100644
7836     --- a/fs/nilfs2/super.c
7837     +++ b/fs/nilfs2/super.c
7838     @@ -688,7 +688,8 @@ skip_mount_setup:
7839     sbp[0]->s_state =
7840     cpu_to_le16(le16_to_cpu(sbp[0]->s_state) & ~NILFS_VALID_FS);
7841     /* synchronize sbp[1] with sbp[0] */
7842     - memcpy(sbp[1], sbp[0], nilfs->ns_sbsize);
7843     + if (sbp[1])
7844     + memcpy(sbp[1], sbp[0], nilfs->ns_sbsize);
7845     return nilfs_commit_super(sbi, NILFS_SB_COMMIT_ALL);
7846     }
7847    
7848     diff --git a/fs/partitions/check.c b/fs/partitions/check.c
7849     index 0a8b0ad..0123717 100644
7850     --- a/fs/partitions/check.c
7851     +++ b/fs/partitions/check.c
7852     @@ -372,6 +372,13 @@ static void delete_partition_rcu_cb(struct rcu_head *head)
7853     put_device(part_to_dev(part));
7854     }
7855    
7856     +void __delete_partition(struct kref *ref)
7857     +{
7858     + struct hd_struct *part = container_of(ref, struct hd_struct, ref);
7859     +
7860     + call_rcu(&part->rcu_head, delete_partition_rcu_cb);
7861     +}
7862     +
7863     void delete_partition(struct gendisk *disk, int partno)
7864     {
7865     struct disk_part_tbl *ptbl = disk->part_tbl;
7866     @@ -390,7 +397,7 @@ void delete_partition(struct gendisk *disk, int partno)
7867     kobject_put(part->holder_dir);
7868     device_del(part_to_dev(part));
7869    
7870     - call_rcu(&part->rcu_head, delete_partition_rcu_cb);
7871     + kref_put(&part->ref, __delete_partition);
7872     }
7873    
7874     static ssize_t whole_disk_show(struct device *dev,
7875     @@ -489,6 +496,7 @@ struct hd_struct *add_partition(struct gendisk *disk, int partno,
7876     if (!dev_get_uevent_suppress(ddev))
7877     kobject_uevent(&pdev->kobj, KOBJ_ADD);
7878    
7879     + kref_init(&p->ref);
7880     return p;
7881    
7882     out_free_info:
7883     diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c
7884     index 6f37c39..d245cb2 100644
7885     --- a/fs/proc/kcore.c
7886     +++ b/fs/proc/kcore.c
7887     @@ -558,7 +558,7 @@ static int open_kcore(struct inode *inode, struct file *filp)
7888     static const struct file_operations proc_kcore_operations = {
7889     .read = read_kcore,
7890     .open = open_kcore,
7891     - .llseek = generic_file_llseek,
7892     + .llseek = default_llseek,
7893     };
7894    
7895     #ifdef CONFIG_MEMORY_HOTPLUG
7896     diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
7897     index 883c1d4..40b1f0e 100644
7898     --- a/include/drm/drm_pciids.h
7899     +++ b/include/drm/drm_pciids.h
7900     @@ -28,7 +28,6 @@
7901     {0x1002, 0x4156, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \
7902     {0x1002, 0x4237, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS200|RADEON_IS_IGP}, \
7903     {0x1002, 0x4242, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R200}, \
7904     - {0x1002, 0x4243, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R200}, \
7905     {0x1002, 0x4336, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS100|RADEON_IS_IGP|RADEON_IS_MOBILITY}, \
7906     {0x1002, 0x4337, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS200|RADEON_IS_IGP|RADEON_IS_MOBILITY}, \
7907     {0x1002, 0x4437, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS200|RADEON_IS_IGP|RADEON_IS_MOBILITY}, \
7908     diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
7909     index 36ab42c..7572b19 100644
7910     --- a/include/linux/blkdev.h
7911     +++ b/include/linux/blkdev.h
7912     @@ -115,6 +115,7 @@ struct request {
7913     void *elevator_private3;
7914    
7915     struct gendisk *rq_disk;
7916     + struct hd_struct *part;
7917     unsigned long start_time;
7918     #ifdef CONFIG_BLK_CGROUP
7919     unsigned long long start_time_ns;
7920     diff --git a/include/linux/completion.h b/include/linux/completion.h
7921     index 36d57f7..51494e6 100644
7922     --- a/include/linux/completion.h
7923     +++ b/include/linux/completion.h
7924     @@ -81,10 +81,10 @@ extern int wait_for_completion_interruptible(struct completion *x);
7925     extern int wait_for_completion_killable(struct completion *x);
7926     extern unsigned long wait_for_completion_timeout(struct completion *x,
7927     unsigned long timeout);
7928     -extern unsigned long wait_for_completion_interruptible_timeout(
7929     - struct completion *x, unsigned long timeout);
7930     -extern unsigned long wait_for_completion_killable_timeout(
7931     - struct completion *x, unsigned long timeout);
7932     +extern long wait_for_completion_interruptible_timeout(
7933     + struct completion *x, unsigned long timeout);
7934     +extern long wait_for_completion_killable_timeout(
7935     + struct completion *x, unsigned long timeout);
7936     extern bool try_wait_for_completion(struct completion *x);
7937     extern bool completion_done(struct completion *x);
7938    
7939     diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
7940     index a90b389..1c70028 100644
7941     --- a/include/linux/dynamic_debug.h
7942     +++ b/include/linux/dynamic_debug.h
7943     @@ -44,34 +44,24 @@ int ddebug_add_module(struct _ddebug *tab, unsigned int n,
7944     extern int ddebug_remove_module(const char *mod_name);
7945    
7946     #define dynamic_pr_debug(fmt, ...) do { \
7947     - __label__ do_printk; \
7948     - __label__ out; \
7949     static struct _ddebug descriptor \
7950     __used \
7951     __attribute__((section("__verbose"), aligned(8))) = \
7952     { KBUILD_MODNAME, __func__, __FILE__, fmt, __LINE__, \
7953     _DPRINTK_FLAGS_DEFAULT }; \
7954     - JUMP_LABEL(&descriptor.enabled, do_printk); \
7955     - goto out; \
7956     -do_printk: \
7957     - printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); \
7958     -out: ; \
7959     + if (unlikely(descriptor.enabled)) \
7960     + printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); \
7961     } while (0)
7962    
7963    
7964     #define dynamic_dev_dbg(dev, fmt, ...) do { \
7965     - __label__ do_printk; \
7966     - __label__ out; \
7967     static struct _ddebug descriptor \
7968     __used \
7969     __attribute__((section("__verbose"), aligned(8))) = \
7970     { KBUILD_MODNAME, __func__, __FILE__, fmt, __LINE__, \
7971     _DPRINTK_FLAGS_DEFAULT }; \
7972     - JUMP_LABEL(&descriptor.enabled, do_printk); \
7973     - goto out; \
7974     -do_printk: \
7975     - dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); \
7976     -out: ; \
7977     + if (unlikely(descriptor.enabled)) \
7978     + dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); \
7979     } while (0)
7980    
7981     #else
7982     diff --git a/include/linux/genhd.h b/include/linux/genhd.h
7983     index 7a7b9c1..2ba2792 100644
7984     --- a/include/linux/genhd.h
7985     +++ b/include/linux/genhd.h
7986     @@ -116,6 +116,7 @@ struct hd_struct {
7987     struct disk_stats dkstats;
7988     #endif
7989     struct rcu_head rcu_head;
7990     + struct kref ref;
7991     };
7992    
7993     #define GENHD_FL_REMOVABLE 1
7994     @@ -583,6 +584,7 @@ extern struct hd_struct * __must_check add_partition(struct gendisk *disk,
7995     sector_t len, int flags,
7996     struct partition_meta_info
7997     *info);
7998     +extern void __delete_partition(struct kref *ref);
7999     extern void delete_partition(struct gendisk *, int);
8000     extern void printk_all_partitions(void);
8001    
8002     diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
8003     index ed5a03c..1c2138d 100644
8004     --- a/include/linux/ieee80211.h
8005     +++ b/include/linux/ieee80211.h
8006     @@ -959,7 +959,7 @@ struct ieee80211_ht_info {
8007     /* block-ack parameters */
8008     #define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002
8009     #define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C
8010     -#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFA0
8011     +#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFC0
8012     #define IEEE80211_DELBA_PARAM_TID_MASK 0xF000
8013     #define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800
8014    
8015     diff --git a/include/linux/klist.h b/include/linux/klist.h
8016     index e91a4e5..a370ce5 100644
8017     --- a/include/linux/klist.h
8018     +++ b/include/linux/klist.h
8019     @@ -22,7 +22,7 @@ struct klist {
8020     struct list_head k_list;
8021     void (*get)(struct klist_node *);
8022     void (*put)(struct klist_node *);
8023     -} __attribute__ ((aligned (4)));
8024     +} __attribute__ ((aligned (sizeof(void *))));
8025    
8026     #define KLIST_INIT(_name, _get, _put) \
8027     { .k_lock = __SPIN_LOCK_UNLOCKED(_name.k_lock), \
8028     diff --git a/include/linux/kref.h b/include/linux/kref.h
8029     index 6cc38fc..90b9e44 100644
8030     --- a/include/linux/kref.h
8031     +++ b/include/linux/kref.h
8032     @@ -23,6 +23,7 @@ struct kref {
8033    
8034     void kref_init(struct kref *kref);
8035     void kref_get(struct kref *kref);
8036     +int kref_test_and_get(struct kref *kref);
8037     int kref_put(struct kref *kref, void (*release) (struct kref *kref));
8038    
8039     #endif /* _KREF_H_ */
8040     diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
8041     index 71c09b2..9f19430 100644
8042     --- a/include/linux/lockdep.h
8043     +++ b/include/linux/lockdep.h
8044     @@ -522,12 +522,15 @@ static inline void print_irqtrace_events(struct task_struct *curr)
8045     #ifdef CONFIG_DEBUG_LOCK_ALLOC
8046     # ifdef CONFIG_PROVE_LOCKING
8047     # define lock_map_acquire(l) lock_acquire(l, 0, 0, 0, 2, NULL, _THIS_IP_)
8048     +# define lock_map_acquire_read(l) lock_acquire(l, 0, 0, 2, 2, NULL, _THIS_IP_)
8049     # else
8050     # define lock_map_acquire(l) lock_acquire(l, 0, 0, 0, 1, NULL, _THIS_IP_)
8051     +# define lock_map_acquire_read(l) lock_acquire(l, 0, 0, 2, 1, NULL, _THIS_IP_)
8052     # endif
8053     # define lock_map_release(l) lock_release(l, 1, _THIS_IP_)
8054     #else
8055     # define lock_map_acquire(l) do { } while (0)
8056     +# define lock_map_acquire_read(l) do { } while (0)
8057     # define lock_map_release(l) do { } while (0)
8058     #endif
8059    
8060     diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h
8061     index 31c237a..12b9eb5 100644
8062     --- a/include/linux/memory_hotplug.h
8063     +++ b/include/linux/memory_hotplug.h
8064     @@ -161,6 +161,12 @@ extern void register_page_bootmem_info_node(struct pglist_data *pgdat);
8065     extern void put_page_bootmem(struct page *page);
8066     #endif
8067    
8068     +/*
8069     + * Lock for memory hotplug guarantees 1) all callbacks for memory hotplug
8070     + * notifier will be called under this. 2) offline/online/add/remove memory
8071     + * will not run simultaneously.
8072     + */
8073     +
8074     void lock_memory_hotplug(void);
8075     void unlock_memory_hotplug(void);
8076    
8077     diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
8078     index 39c24eb..4890662 100644
8079     --- a/include/linux/mmzone.h
8080     +++ b/include/linux/mmzone.h
8081     @@ -458,12 +458,6 @@ static inline int zone_is_oom_locked(const struct zone *zone)
8082     return test_bit(ZONE_OOM_LOCKED, &zone->flags);
8083     }
8084    
8085     -#ifdef CONFIG_SMP
8086     -unsigned long zone_nr_free_pages(struct zone *zone);
8087     -#else
8088     -#define zone_nr_free_pages(zone) zone_page_state(zone, NR_FREE_PAGES)
8089     -#endif /* CONFIG_SMP */
8090     -
8091     /*
8092     * The "priority" of VM scanning is how much of the queues we will scan in one
8093     * go. A value of 12 for DEF_PRIORITY implies that we will scan 1/4096th of the
8094     @@ -661,7 +655,9 @@ typedef struct pglist_data {
8095     extern struct mutex zonelists_mutex;
8096     void build_all_zonelists(void *data);
8097     void wakeup_kswapd(struct zone *zone, int order);
8098     -int zone_watermark_ok(struct zone *z, int order, unsigned long mark,
8099     +bool zone_watermark_ok(struct zone *z, int order, unsigned long mark,
8100     + int classzone_idx, int alloc_flags);
8101     +bool zone_watermark_ok_safe(struct zone *z, int order, unsigned long mark,
8102     int classzone_idx, int alloc_flags);
8103     enum memmap_context {
8104     MEMMAP_EARLY,
8105     diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h
8106     index 0edb256..fb877b5 100644
8107     --- a/include/linux/nl80211.h
8108     +++ b/include/linux/nl80211.h
8109     @@ -1307,7 +1307,11 @@ enum nl80211_bitrate_attr {
8110     * wireless core it thinks its knows the regulatory domain we should be in.
8111     * @NL80211_REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an
8112     * 802.11 country information element with regulatory information it
8113     - * thinks we should consider.
8114     + * thinks we should consider. cfg80211 only processes the country
8115     + * code from the IE, and relies on the regulatory domain information
8116     + * structure pased by userspace (CRDA) from our wireless-regdb.
8117     + * If a channel is enabled but the country code indicates it should
8118     + * be disabled we disable the channel and re-enable it upon disassociation.
8119     */
8120     enum nl80211_reg_initiator {
8121     NL80211_REGDOM_SET_BY_CORE,
8122     diff --git a/include/linux/oprofile.h b/include/linux/oprofile.h
8123     index 32fb812..1ca6411 100644
8124     --- a/include/linux/oprofile.h
8125     +++ b/include/linux/oprofile.h
8126     @@ -16,6 +16,8 @@
8127     #include <linux/types.h>
8128     #include <linux/spinlock.h>
8129     #include <linux/init.h>
8130     +#include <linux/errno.h>
8131     +#include <linux/printk.h>
8132     #include <asm/atomic.h>
8133    
8134     /* Each escaped entry is prefixed by ESCAPE_CODE
8135     @@ -186,10 +188,17 @@ int oprofile_add_data(struct op_entry *entry, unsigned long val);
8136     int oprofile_add_data64(struct op_entry *entry, u64 val);
8137     int oprofile_write_commit(struct op_entry *entry);
8138    
8139     -#ifdef CONFIG_PERF_EVENTS
8140     +#ifdef CONFIG_HW_PERF_EVENTS
8141     int __init oprofile_perf_init(struct oprofile_operations *ops);
8142     void oprofile_perf_exit(void);
8143     char *op_name_from_perf_id(void);
8144     -#endif /* CONFIG_PERF_EVENTS */
8145     +#else
8146     +static inline int __init oprofile_perf_init(struct oprofile_operations *ops)
8147     +{
8148     + pr_info("oprofile: hardware counters not available\n");
8149     + return -ENODEV;
8150     +}
8151     +static inline void oprofile_perf_exit(void) { }
8152     +#endif /* CONFIG_HW_PERF_EVENTS */
8153    
8154     #endif /* OPROFILE_H */
8155     diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h
8156     index ab2baa5..23241c2 100644
8157     --- a/include/linux/radix-tree.h
8158     +++ b/include/linux/radix-tree.h
8159     @@ -146,6 +146,22 @@ static inline void *radix_tree_deref_slot(void **pslot)
8160     }
8161    
8162     /**
8163     + * radix_tree_deref_slot_protected - dereference a slot without RCU lock but with tree lock held
8164     + * @pslot: pointer to slot, returned by radix_tree_lookup_slot
8165     + * Returns: item that was stored in that slot with any direct pointer flag
8166     + * removed.
8167     + *
8168     + * Similar to radix_tree_deref_slot but only used during migration when a pages
8169     + * mapping is being moved. The caller does not hold the RCU read lock but it
8170     + * must hold the tree lock to prevent parallel updates.
8171     + */
8172     +static inline void *radix_tree_deref_slot_protected(void **pslot,
8173     + spinlock_t *treelock)
8174     +{
8175     + return rcu_dereference_protected(*pslot, lockdep_is_held(treelock));
8176     +}
8177     +
8178     +/**
8179     * radix_tree_deref_retry - check radix_tree_deref_slot
8180     * @arg: pointer returned by radix_tree_deref_slot
8181     * Returns: 0 if retry is not required, otherwise retry is required
8182     diff --git a/include/linux/security.h b/include/linux/security.h
8183     index fd4d55f..d47a4c2 100644
8184     --- a/include/linux/security.h
8185     +++ b/include/linux/security.h
8186     @@ -796,8 +796,9 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
8187     * @unix_stream_connect:
8188     * Check permissions before establishing a Unix domain stream connection
8189     * between @sock and @other.
8190     - * @sock contains the socket structure.
8191     - * @other contains the peer socket structure.
8192     + * @sock contains the sock structure.
8193     + * @other contains the peer sock structure.
8194     + * @newsk contains the new sock structure.
8195     * Return 0 if permission is granted.
8196     * @unix_may_send:
8197     * Check permissions before connecting or sending datagrams from @sock to
8198     @@ -1568,8 +1569,7 @@ struct security_operations {
8199     int (*inode_getsecctx)(struct inode *inode, void **ctx, u32 *ctxlen);
8200    
8201     #ifdef CONFIG_SECURITY_NETWORK
8202     - int (*unix_stream_connect) (struct socket *sock,
8203     - struct socket *other, struct sock *newsk);
8204     + int (*unix_stream_connect) (struct sock *sock, struct sock *other, struct sock *newsk);
8205     int (*unix_may_send) (struct socket *sock, struct socket *other);
8206    
8207     int (*socket_create) (int family, int type, int protocol, int kern);
8208     @@ -2525,8 +2525,7 @@ static inline int security_inode_getsecctx(struct inode *inode, void **ctx, u32
8209    
8210     #ifdef CONFIG_SECURITY_NETWORK
8211    
8212     -int security_unix_stream_connect(struct socket *sock, struct socket *other,
8213     - struct sock *newsk);
8214     +int security_unix_stream_connect(struct sock *sock, struct sock *other, struct sock *newsk);
8215     int security_unix_may_send(struct socket *sock, struct socket *other);
8216     int security_socket_create(int family, int type, int protocol, int kern);
8217     int security_socket_post_create(struct socket *sock, int family,
8218     @@ -2567,8 +2566,8 @@ void security_tun_dev_post_create(struct sock *sk);
8219     int security_tun_dev_attach(struct sock *sk);
8220    
8221     #else /* CONFIG_SECURITY_NETWORK */
8222     -static inline int security_unix_stream_connect(struct socket *sock,
8223     - struct socket *other,
8224     +static inline int security_unix_stream_connect(struct sock *sock,
8225     + struct sock *other,
8226     struct sock *newsk)
8227     {
8228     return 0;
8229     diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h
8230     index 498ab93..7783c68 100644
8231     --- a/include/linux/sunrpc/xdr.h
8232     +++ b/include/linux/sunrpc/xdr.h
8233     @@ -201,6 +201,8 @@ struct xdr_stream {
8234    
8235     __be32 *end; /* end of available buffer space */
8236     struct kvec *iov; /* pointer to the current kvec */
8237     + struct kvec scratch; /* Scratch buffer */
8238     + struct page **page_ptr; /* pointer to the current page */
8239     };
8240    
8241     extern void xdr_init_encode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p);
8242     @@ -208,7 +210,7 @@ extern __be32 *xdr_reserve_space(struct xdr_stream *xdr, size_t nbytes);
8243     extern void xdr_write_pages(struct xdr_stream *xdr, struct page **pages,
8244     unsigned int base, unsigned int len);
8245     extern void xdr_init_decode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p);
8246     -extern __be32 *xdr_inline_peek(struct xdr_stream *xdr, size_t nbytes);
8247     +extern void xdr_set_scratch_buffer(struct xdr_stream *xdr, void *buf, size_t buflen);
8248     extern __be32 *xdr_inline_decode(struct xdr_stream *xdr, size_t nbytes);
8249     extern void xdr_read_pages(struct xdr_stream *xdr, unsigned int len);
8250     extern void xdr_enter_page(struct xdr_stream *xdr, unsigned int len);
8251     diff --git a/include/linux/sysrq.h b/include/linux/sysrq.h
8252     index 387fa7d..7faf933 100644
8253     --- a/include/linux/sysrq.h
8254     +++ b/include/linux/sysrq.h
8255     @@ -17,6 +17,9 @@
8256     #include <linux/errno.h>
8257     #include <linux/types.h>
8258    
8259     +/* Enable/disable SYSRQ support by default (0==no, 1==yes). */
8260     +#define SYSRQ_DEFAULT_ENABLE 1
8261     +
8262     /* Possible values of bitmask for enabling sysrq functions */
8263     /* 0x0001 is reserved for enable everything */
8264     #define SYSRQ_ENABLE_LOG 0x0002
8265     diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h
8266     index 0b6e751..6c37d78 100644
8267     --- a/include/linux/usb/hcd.h
8268     +++ b/include/linux/usb/hcd.h
8269     @@ -112,6 +112,7 @@ struct usb_hcd {
8270     /* Flags that get set only during HCD registration or removal. */
8271     unsigned rh_registered:1;/* is root hub registered? */
8272     unsigned rh_pollable:1; /* may we poll the root hub? */
8273     + unsigned msix_enabled:1; /* driver has MSI-X enabled? */
8274    
8275     /* The next flag is a stopgap, to be removed when all the HCDs
8276     * support the new root-hub polling mechanism. */
8277     diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h
8278     index 16d682f..c904913 100644
8279     --- a/include/linux/usb/serial.h
8280     +++ b/include/linux/usb/serial.h
8281     @@ -347,6 +347,9 @@ extern int usb_serial_generic_prepare_write_buffer(struct usb_serial_port *port,
8282     extern int usb_serial_handle_sysrq_char(struct usb_serial_port *port,
8283     unsigned int ch);
8284     extern int usb_serial_handle_break(struct usb_serial_port *port);
8285     +extern void usb_serial_handle_dcd_change(struct usb_serial_port *usb_port,
8286     + struct tty_struct *tty,
8287     + unsigned int status);
8288    
8289    
8290     extern int usb_serial_bus_register(struct usb_serial_driver *device);
8291     diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
8292     index eaaea37..e4cc21c 100644
8293     --- a/include/linux/vmstat.h
8294     +++ b/include/linux/vmstat.h
8295     @@ -254,6 +254,8 @@ extern void dec_zone_state(struct zone *, enum zone_stat_item);
8296     extern void __dec_zone_state(struct zone *, enum zone_stat_item);
8297    
8298     void refresh_cpu_vm_stats(int);
8299     +void reduce_pgdat_percpu_threshold(pg_data_t *pgdat);
8300     +void restore_pgdat_percpu_threshold(pg_data_t *pgdat);
8301     #else /* CONFIG_SMP */
8302    
8303     /*
8304     @@ -298,6 +300,9 @@ static inline void __dec_zone_page_state(struct page *page,
8305     #define dec_zone_page_state __dec_zone_page_state
8306     #define mod_zone_page_state __mod_zone_page_state
8307    
8308     +static inline void reduce_pgdat_percpu_threshold(pg_data_t *pgdat) { }
8309     +static inline void restore_pgdat_percpu_threshold(pg_data_t *pgdat) { }
8310     +
8311     static inline void refresh_cpu_vm_stats(int cpu) { }
8312     #endif
8313    
8314     diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
8315     index 97b8b7c..772dea2 100644
8316     --- a/include/net/cfg80211.h
8317     +++ b/include/net/cfg80211.h
8318     @@ -1321,13 +1321,14 @@ struct cfg80211_ops {
8319     * initiator is %REGDOM_SET_BY_CORE).
8320     * @WIPHY_FLAG_STRICT_REGULATORY: tells us the driver for this device will
8321     * ignore regulatory domain settings until it gets its own regulatory
8322     - * domain via its regulatory_hint(). After its gets its own regulatory
8323     - * domain it will only allow further regulatory domain settings to
8324     - * further enhance compliance. For example if channel 13 and 14 are
8325     - * disabled by this regulatory domain no user regulatory domain can
8326     - * enable these channels at a later time. This can be used for devices
8327     - * which do not have calibration information gauranteed for frequencies
8328     - * or settings outside of its regulatory domain.
8329     + * domain via its regulatory_hint() unless the regulatory hint is
8330     + * from a country IE. After its gets its own regulatory domain it will
8331     + * only allow further regulatory domain settings to further enhance
8332     + * compliance. For example if channel 13 and 14 are disabled by this
8333     + * regulatory domain no user regulatory domain can enable these channels
8334     + * at a later time. This can be used for devices which do not have
8335     + * calibration information guaranteed for frequencies or settings
8336     + * outside of its regulatory domain.
8337     * @WIPHY_FLAG_DISABLE_BEACON_HINTS: enable this if your driver needs to ensure
8338     * that passive scan flags and beaconing flags may not be lifted by
8339     * cfg80211 due to regulatory beacon hints. For more information on beacon
8340     diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h
8341     index 216af85..1933e3c 100644
8342     --- a/include/scsi/scsi.h
8343     +++ b/include/scsi/scsi.h
8344     @@ -9,6 +9,7 @@
8345     #define _SCSI_SCSI_H
8346    
8347     #include <linux/types.h>
8348     +#include <linux/scatterlist.h>
8349    
8350     struct scsi_cmnd;
8351    
8352     diff --git a/init/calibrate.c b/init/calibrate.c
8353     index 6eb48e5..24fe022 100644
8354     --- a/init/calibrate.c
8355     +++ b/init/calibrate.c
8356     @@ -66,7 +66,7 @@ static unsigned long __cpuinit calibrate_delay_direct(void)
8357     pre_start = 0;
8358     read_current_timer(&start);
8359     start_jiffies = jiffies;
8360     - while (jiffies <= (start_jiffies + 1)) {
8361     + while (time_before_eq(jiffies, start_jiffies + 1)) {
8362     pre_start = start;
8363     read_current_timer(&start);
8364     }
8365     @@ -74,8 +74,8 @@ static unsigned long __cpuinit calibrate_delay_direct(void)
8366    
8367     pre_end = 0;
8368     end = post_start;
8369     - while (jiffies <=
8370     - (start_jiffies + 1 + DELAY_CALIBRATION_TICKS)) {
8371     + while (time_before_eq(jiffies, start_jiffies + 1 +
8372     + DELAY_CALIBRATION_TICKS)) {
8373     pre_end = end;
8374     read_current_timer(&end);
8375     }
8376     diff --git a/kernel/irq/migration.c b/kernel/irq/migration.c
8377     index 1d25419..441fd62 100644
8378     --- a/kernel/irq/migration.c
8379     +++ b/kernel/irq/migration.c
8380     @@ -56,6 +56,7 @@ void move_masked_irq(int irq)
8381     void move_native_irq(int irq)
8382     {
8383     struct irq_desc *desc = irq_to_desc(irq);
8384     + bool masked;
8385    
8386     if (likely(!(desc->status & IRQ_MOVE_PENDING)))
8387     return;
8388     @@ -63,8 +64,15 @@ void move_native_irq(int irq)
8389     if (unlikely(desc->status & IRQ_DISABLED))
8390     return;
8391    
8392     - desc->irq_data.chip->irq_mask(&desc->irq_data);
8393     + /*
8394     + * Be careful vs. already masked interrupts. If this is a
8395     + * threaded interrupt with ONESHOT set, we can end up with an
8396     + * interrupt storm.
8397     + */
8398     + masked = desc->status & IRQ_MASKED;
8399     + if (!masked)
8400     + desc->irq_data.chip->irq_mask(&desc->irq_data);
8401     move_masked_irq(irq);
8402     - desc->irq_data.chip->irq_unmask(&desc->irq_data);
8403     + if (!masked)
8404     + desc->irq_data.chip->irq_unmask(&desc->irq_data);
8405     }
8406     -
8407     diff --git a/kernel/perf_event.c b/kernel/perf_event.c
8408     index 2870fee..64668bd 100644
8409     --- a/kernel/perf_event.c
8410     +++ b/kernel/perf_event.c
8411     @@ -1872,8 +1872,7 @@ static int alloc_callchain_buffers(void)
8412     * accessed from NMI. Use a temporary manual per cpu allocation
8413     * until that gets sorted out.
8414     */
8415     - size = sizeof(*entries) + sizeof(struct perf_callchain_entry *) *
8416     - num_possible_cpus();
8417     + size = offsetof(struct callchain_cpus_entries, cpu_entries[nr_cpu_ids]);
8418    
8419     entries = kzalloc(size, GFP_KERNEL);
8420     if (!entries)
8421     @@ -2101,14 +2100,11 @@ find_get_context(struct pmu *pmu, struct task_struct *task, int cpu)
8422     unsigned long flags;
8423     int ctxn, err;
8424    
8425     - if (!task && cpu != -1) {
8426     + if (!task) {
8427     /* Must be root to operate on a CPU event: */
8428     if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN))
8429     return ERR_PTR(-EACCES);
8430    
8431     - if (cpu < 0 || cpu >= nr_cpumask_bits)
8432     - return ERR_PTR(-EINVAL);
8433     -
8434     /*
8435     * We could be clever and allow to attach a event to an
8436     * offline CPU and activate it when the CPU comes up, but
8437     @@ -5305,6 +5301,11 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
8438     struct hw_perf_event *hwc;
8439     long err;
8440    
8441     + if ((unsigned)cpu >= nr_cpu_ids) {
8442     + if (!task || cpu != -1)
8443     + return ERR_PTR(-EINVAL);
8444     + }
8445     +
8446     event = kzalloc(sizeof(*event), GFP_KERNEL);
8447     if (!event)
8448     return ERR_PTR(-ENOMEM);
8449     @@ -5353,7 +5354,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
8450    
8451     if (!overflow_handler && parent_event)
8452     overflow_handler = parent_event->overflow_handler;
8453     -
8454     +
8455     event->overflow_handler = overflow_handler;
8456    
8457     if (attr->disabled)
8458     diff --git a/kernel/ptrace.c b/kernel/ptrace.c
8459     index 99bbaa3..1708b1e 100644
8460     --- a/kernel/ptrace.c
8461     +++ b/kernel/ptrace.c
8462     @@ -313,7 +313,7 @@ int ptrace_detach(struct task_struct *child, unsigned int data)
8463     child->exit_code = data;
8464     dead = __ptrace_detach(current, child);
8465     if (!child->exit_state)
8466     - wake_up_process(child);
8467     + wake_up_state(child, TASK_TRACED | TASK_STOPPED);
8468     }
8469     write_unlock_irq(&tasklist_lock);
8470    
8471     diff --git a/kernel/sched.c b/kernel/sched.c
8472     index 297d1a0..2f912b7 100644
8473     --- a/kernel/sched.c
8474     +++ b/kernel/sched.c
8475     @@ -607,6 +607,9 @@ static inline struct task_group *task_group(struct task_struct *p)
8476     {
8477     struct cgroup_subsys_state *css;
8478    
8479     + if (p->flags & PF_EXITING)
8480     + return &root_task_group;
8481     +
8482     css = task_subsys_state_check(p, cpu_cgroup_subsys_id,
8483     lockdep_is_held(&task_rq(p)->lock));
8484     return container_of(css, struct task_group, css);
8485     @@ -4526,7 +4529,7 @@ EXPORT_SYMBOL(wait_for_completion_interruptible);
8486     * This waits for either a completion of a specific task to be signaled or for a
8487     * specified timeout to expire. It is interruptible. The timeout is in jiffies.
8488     */
8489     -unsigned long __sched
8490     +long __sched
8491     wait_for_completion_interruptible_timeout(struct completion *x,
8492     unsigned long timeout)
8493     {
8494     @@ -4559,7 +4562,7 @@ EXPORT_SYMBOL(wait_for_completion_killable);
8495     * signaled or for a specified timeout to expire. It can be
8496     * interrupted by a kill signal. The timeout is in jiffies.
8497     */
8498     -unsigned long __sched
8499     +long __sched
8500     wait_for_completion_killable_timeout(struct completion *x,
8501     unsigned long timeout)
8502     {
8503     @@ -9178,6 +9181,20 @@ cpu_cgroup_attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
8504     }
8505     }
8506    
8507     +static void
8508     +cpu_cgroup_exit(struct cgroup_subsys *ss, struct task_struct *task)
8509     +{
8510     + /*
8511     + * cgroup_exit() is called in the copy_process() failure path.
8512     + * Ignore this case since the task hasn't ran yet, this avoids
8513     + * trying to poke a half freed task state from generic code.
8514     + */
8515     + if (!(task->flags & PF_EXITING))
8516     + return;
8517     +
8518     + sched_move_task(task);
8519     +}
8520     +
8521     #ifdef CONFIG_FAIR_GROUP_SCHED
8522     static int cpu_shares_write_u64(struct cgroup *cgrp, struct cftype *cftype,
8523     u64 shareval)
8524     @@ -9250,6 +9267,7 @@ struct cgroup_subsys cpu_cgroup_subsys = {
8525     .destroy = cpu_cgroup_destroy,
8526     .can_attach = cpu_cgroup_can_attach,
8527     .attach = cpu_cgroup_attach,
8528     + .exit = cpu_cgroup_exit,
8529     .populate = cpu_cgroup_populate,
8530     .subsys_id = cpu_cgroup_subsys_id,
8531     .early_init = 1,
8532     diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c
8533     index bea7d79..c5f1d23 100644
8534     --- a/kernel/sched_rt.c
8535     +++ b/kernel/sched_rt.c
8536     @@ -606,7 +606,7 @@ static void update_curr_rt(struct rq *rq)
8537     struct rt_rq *rt_rq = rt_rq_of_se(rt_se);
8538     u64 delta_exec;
8539    
8540     - if (!task_has_rt_policy(curr))
8541     + if (curr->sched_class != &rt_sched_class)
8542     return;
8543    
8544     delta_exec = rq->clock_task - curr->se.exec_start;
8545     diff --git a/kernel/smp.c b/kernel/smp.c
8546     index 12ed8b0..8448f8f 100644
8547     --- a/kernel/smp.c
8548     +++ b/kernel/smp.c
8549     @@ -194,6 +194,24 @@ void generic_smp_call_function_interrupt(void)
8550     list_for_each_entry_rcu(data, &call_function.queue, csd.list) {
8551     int refs;
8552    
8553     + /*
8554     + * Since we walk the list without any locks, we might
8555     + * see an entry that was completed, removed from the
8556     + * list and is in the process of being reused.
8557     + *
8558     + * We must check that the cpu is in the cpumask before
8559     + * checking the refs, and both must be set before
8560     + * executing the callback on this cpu.
8561     + */
8562     +
8563     + if (!cpumask_test_cpu(cpu, data->cpumask))
8564     + continue;
8565     +
8566     + smp_rmb();
8567     +
8568     + if (atomic_read(&data->refs) == 0)
8569     + continue;
8570     +
8571     if (!cpumask_test_and_clear_cpu(cpu, data->cpumask))
8572     continue;
8573    
8574     @@ -202,6 +220,8 @@ void generic_smp_call_function_interrupt(void)
8575     refs = atomic_dec_return(&data->refs);
8576     WARN_ON(refs < 0);
8577     if (!refs) {
8578     + WARN_ON(!cpumask_empty(data->cpumask));
8579     +
8580     raw_spin_lock(&call_function.lock);
8581     list_del_rcu(&data->csd.list);
8582     raw_spin_unlock(&call_function.lock);
8583     @@ -453,11 +473,21 @@ void smp_call_function_many(const struct cpumask *mask,
8584    
8585     data = &__get_cpu_var(cfd_data);
8586     csd_lock(&data->csd);
8587     + BUG_ON(atomic_read(&data->refs) || !cpumask_empty(data->cpumask));
8588    
8589     data->csd.func = func;
8590     data->csd.info = info;
8591     cpumask_and(data->cpumask, mask, cpu_online_mask);
8592     cpumask_clear_cpu(this_cpu, data->cpumask);
8593     +
8594     + /*
8595     + * To ensure the interrupt handler gets an complete view
8596     + * we order the cpumask and refs writes and order the read
8597     + * of them in the interrupt handler. In addition we may
8598     + * only clear our own cpu bit from the mask.
8599     + */
8600     + smp_wmb();
8601     +
8602     atomic_set(&data->refs, cpumask_weight(data->cpumask));
8603    
8604     raw_spin_lock_irqsave(&call_function.lock, flags);
8605     diff --git a/kernel/sys.c b/kernel/sys.c
8606     index 7f5a0cd..66136ca 100644
8607     --- a/kernel/sys.c
8608     +++ b/kernel/sys.c
8609     @@ -1377,7 +1377,8 @@ static int check_prlimit_permission(struct task_struct *task)
8610     const struct cred *cred = current_cred(), *tcred;
8611    
8612     tcred = __task_cred(task);
8613     - if ((cred->uid != tcred->euid ||
8614     + if (current != task &&
8615     + (cred->uid != tcred->euid ||
8616     cred->uid != tcred->suid ||
8617     cred->uid != tcred->uid ||
8618     cred->gid != tcred->egid ||
8619     diff --git a/kernel/sysctl.c b/kernel/sysctl.c
8620     index 5abfa15..4e17828 100644
8621     --- a/kernel/sysctl.c
8622     +++ b/kernel/sysctl.c
8623     @@ -169,7 +169,8 @@ static int proc_taint(struct ctl_table *table, int write,
8624     #endif
8625    
8626     #ifdef CONFIG_MAGIC_SYSRQ
8627     -static int __sysrq_enabled; /* Note: sysrq code ises it's own private copy */
8628     +/* Note: sysrq code uses it's own private copy */
8629     +static int __sysrq_enabled = SYSRQ_DEFAULT_ENABLE;
8630    
8631     static int sysrq_sysctl_handler(ctl_table *table, int write,
8632     void __user *buffer, size_t *lenp,
8633     diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
8634     index f8cf959..dc53ecb 100644
8635     --- a/kernel/trace/trace.c
8636     +++ b/kernel/trace/trace.c
8637     @@ -1313,12 +1313,10 @@ ftrace_trace_userstack(struct ring_buffer *buffer, unsigned long flags, int pc)
8638    
8639     __this_cpu_inc(user_stack_count);
8640    
8641     -
8642     -
8643     event = trace_buffer_lock_reserve(buffer, TRACE_USER_STACK,
8644     sizeof(*entry), flags, pc);
8645     if (!event)
8646     - return;
8647     + goto out_drop_count;
8648     entry = ring_buffer_event_data(event);
8649    
8650     entry->tgid = current->tgid;
8651     @@ -1333,8 +1331,8 @@ ftrace_trace_userstack(struct ring_buffer *buffer, unsigned long flags, int pc)
8652     if (!filter_check_discard(call, entry, buffer, event))
8653     ring_buffer_unlock_commit(buffer, event);
8654    
8655     + out_drop_count:
8656     __this_cpu_dec(user_stack_count);
8657     -
8658     out:
8659     preempt_enable();
8660     }
8661     diff --git a/kernel/watchdog.c b/kernel/watchdog.c
8662     index 5b08215..32a9ce5 100644
8663     --- a/kernel/watchdog.c
8664     +++ b/kernel/watchdog.c
8665     @@ -27,7 +27,7 @@
8666     #include <asm/irq_regs.h>
8667     #include <linux/perf_event.h>
8668    
8669     -int watchdog_enabled;
8670     +int watchdog_enabled = 1;
8671     int __read_mostly softlockup_thresh = 60;
8672    
8673     static DEFINE_PER_CPU(unsigned long, watchdog_touch_ts);
8674     @@ -43,9 +43,6 @@ static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts_saved);
8675     static DEFINE_PER_CPU(struct perf_event *, watchdog_ev);
8676     #endif
8677    
8678     -static int no_watchdog;
8679     -
8680     -
8681     /* boot commands */
8682     /*
8683     * Should we panic when a soft-lockup or hard-lockup occurs:
8684     @@ -75,7 +72,7 @@ __setup("softlockup_panic=", softlockup_panic_setup);
8685    
8686     static int __init nowatchdog_setup(char *str)
8687     {
8688     - no_watchdog = 1;
8689     + watchdog_enabled = 0;
8690     return 1;
8691     }
8692     __setup("nowatchdog", nowatchdog_setup);
8693     @@ -83,7 +80,7 @@ __setup("nowatchdog", nowatchdog_setup);
8694     /* deprecated */
8695     static int __init nosoftlockup_setup(char *str)
8696     {
8697     - no_watchdog = 1;
8698     + watchdog_enabled = 0;
8699     return 1;
8700     }
8701     __setup("nosoftlockup", nosoftlockup_setup);
8702     @@ -430,9 +427,6 @@ static int watchdog_enable(int cpu)
8703     wake_up_process(p);
8704     }
8705    
8706     - /* if any cpu succeeds, watchdog is considered enabled for the system */
8707     - watchdog_enabled = 1;
8708     -
8709     return 0;
8710     }
8711    
8712     @@ -460,12 +454,16 @@ static void watchdog_disable(int cpu)
8713     static void watchdog_enable_all_cpus(void)
8714     {
8715     int cpu;
8716     - int result = 0;
8717     +
8718     + watchdog_enabled = 0;
8719    
8720     for_each_online_cpu(cpu)
8721     - result += watchdog_enable(cpu);
8722     + if (!watchdog_enable(cpu))
8723     + /* if any cpu succeeds, watchdog is considered
8724     + enabled for the system */
8725     + watchdog_enabled = 1;
8726    
8727     - if (result)
8728     + if (!watchdog_enabled)
8729     printk(KERN_ERR "watchdog: failed to be enabled on some cpus\n");
8730    
8731     }
8732     @@ -474,9 +472,6 @@ static void watchdog_disable_all_cpus(void)
8733     {
8734     int cpu;
8735    
8736     - if (no_watchdog)
8737     - return;
8738     -
8739     for_each_online_cpu(cpu)
8740     watchdog_disable(cpu);
8741    
8742     @@ -496,10 +491,12 @@ int proc_dowatchdog_enabled(struct ctl_table *table, int write,
8743     {
8744     proc_dointvec(table, write, buffer, length, ppos);
8745    
8746     - if (watchdog_enabled)
8747     - watchdog_enable_all_cpus();
8748     - else
8749     - watchdog_disable_all_cpus();
8750     + if (write) {
8751     + if (watchdog_enabled)
8752     + watchdog_enable_all_cpus();
8753     + else
8754     + watchdog_disable_all_cpus();
8755     + }
8756     return 0;
8757     }
8758    
8759     @@ -528,7 +525,8 @@ cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
8760     break;
8761     case CPU_ONLINE:
8762     case CPU_ONLINE_FROZEN:
8763     - err = watchdog_enable(hotcpu);
8764     + if (watchdog_enabled)
8765     + err = watchdog_enable(hotcpu);
8766     break;
8767     #ifdef CONFIG_HOTPLUG_CPU
8768     case CPU_UP_CANCELED:
8769     @@ -553,9 +551,6 @@ static int __init spawn_watchdog_task(void)
8770     void *cpu = (void *)(long)smp_processor_id();
8771     int err;
8772    
8773     - if (no_watchdog)
8774     - return 0;
8775     -
8776     err = cpu_callback(&cpu_nfb, CPU_UP_PREPARE, cpu);
8777     WARN_ON(notifier_to_errno(err));
8778    
8779     diff --git a/kernel/workqueue.c b/kernel/workqueue.c
8780     index e785b0f..4be7fa5 100644
8781     --- a/kernel/workqueue.c
8782     +++ b/kernel/workqueue.c
8783     @@ -1806,7 +1806,7 @@ __acquires(&gcwq->lock)
8784     spin_unlock_irq(&gcwq->lock);
8785    
8786     work_clear_pending(work);
8787     - lock_map_acquire(&cwq->wq->lockdep_map);
8788     + lock_map_acquire_read(&cwq->wq->lockdep_map);
8789     lock_map_acquire(&lockdep_map);
8790     trace_workqueue_execute_start(work);
8791     f(work);
8792     @@ -2350,8 +2350,18 @@ static bool start_flush_work(struct work_struct *work, struct wq_barrier *barr,
8793     insert_wq_barrier(cwq, barr, work, worker);
8794     spin_unlock_irq(&gcwq->lock);
8795    
8796     - lock_map_acquire(&cwq->wq->lockdep_map);
8797     + /*
8798     + * If @max_active is 1 or rescuer is in use, flushing another work
8799     + * item on the same workqueue may lead to deadlock. Make sure the
8800     + * flusher is not running on the same workqueue by verifying write
8801     + * access.
8802     + */
8803     + if (cwq->wq->saved_max_active == 1 || cwq->wq->flags & WQ_RESCUER)
8804     + lock_map_acquire(&cwq->wq->lockdep_map);
8805     + else
8806     + lock_map_acquire_read(&cwq->wq->lockdep_map);
8807     lock_map_release(&cwq->wq->lockdep_map);
8808     +
8809     return true;
8810     already_gone:
8811     spin_unlock_irq(&gcwq->lock);
8812     diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
8813     index 3094318..b335acb 100644
8814     --- a/lib/dynamic_debug.c
8815     +++ b/lib/dynamic_debug.c
8816     @@ -141,11 +141,10 @@ static void ddebug_change(const struct ddebug_query *query,
8817     else if (!dp->flags)
8818     dt->num_enabled++;
8819     dp->flags = newflags;
8820     - if (newflags) {
8821     - jump_label_enable(&dp->enabled);
8822     - } else {
8823     - jump_label_disable(&dp->enabled);
8824     - }
8825     + if (newflags)
8826     + dp->enabled = 1;
8827     + else
8828     + dp->enabled = 0;
8829     if (verbose)
8830     printk(KERN_INFO
8831     "ddebug: changed %s:%d [%s]%s %s\n",
8832     diff --git a/lib/kref.c b/lib/kref.c
8833     index d3d227a..e7a6e10 100644
8834     --- a/lib/kref.c
8835     +++ b/lib/kref.c
8836     @@ -37,6 +37,18 @@ void kref_get(struct kref *kref)
8837     }
8838    
8839     /**
8840     + * kref_test_and_get - increment refcount for object only if refcount is not
8841     + * zero.
8842     + * @kref: object.
8843     + *
8844     + * Return non-zero if the refcount was incremented, 0 otherwise
8845     + */
8846     +int kref_test_and_get(struct kref *kref)
8847     +{
8848     + return atomic_inc_not_zero(&kref->refcount);
8849     +}
8850     +
8851     +/**
8852     * kref_put - decrement refcount for object.
8853     * @kref: object.
8854     * @release: pointer to the function that will clean up the object when the
8855     diff --git a/mm/memcontrol.c b/mm/memcontrol.c
8856     index 00bb8a6..d7a1e3d 100644
8857     --- a/mm/memcontrol.c
8858     +++ b/mm/memcontrol.c
8859     @@ -1842,6 +1842,7 @@ static int __mem_cgroup_do_charge(struct mem_cgroup *mem, gfp_t gfp_mask,
8860     if (likely(!ret))
8861     return CHARGE_OK;
8862    
8863     + res_counter_uncharge(&mem->res, csize);
8864     mem_over_limit = mem_cgroup_from_res_counter(fail_res, memsw);
8865     flags |= MEM_CGROUP_RECLAIM_NOSWAP;
8866     } else
8867     @@ -4929,9 +4930,9 @@ struct cgroup_subsys mem_cgroup_subsys = {
8868     static int __init enable_swap_account(char *s)
8869     {
8870     /* consider enabled if no parameter or 1 is given */
8871     - if (!s || !strcmp(s, "1"))
8872     + if (!(*s) || !strcmp(s, "=1"))
8873     really_do_swap_account = 1;
8874     - else if (!strcmp(s, "0"))
8875     + else if (!strcmp(s, "=0"))
8876     really_do_swap_account = 0;
8877     return 1;
8878     }
8879     @@ -4939,7 +4940,7 @@ __setup("swapaccount", enable_swap_account);
8880    
8881     static int __init disable_swap_account(char *s)
8882     {
8883     - enable_swap_account("0");
8884     + enable_swap_account("=0");
8885     return 1;
8886     }
8887     __setup("noswapaccount", disable_swap_account);
8888     diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
8889     index 2c6523a..83163c0 100644
8890     --- a/mm/memory_hotplug.c
8891     +++ b/mm/memory_hotplug.c
8892     @@ -407,6 +407,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages)
8893     int ret;
8894     struct memory_notify arg;
8895    
8896     + lock_memory_hotplug();
8897     arg.start_pfn = pfn;
8898     arg.nr_pages = nr_pages;
8899     arg.status_change_nid = -1;
8900     @@ -419,6 +420,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages)
8901     ret = notifier_to_errno(ret);
8902     if (ret) {
8903     memory_notify(MEM_CANCEL_ONLINE, &arg);
8904     + unlock_memory_hotplug();
8905     return ret;
8906     }
8907     /*
8908     @@ -443,6 +445,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages)
8909     printk(KERN_DEBUG "online_pages %lx at %lx failed\n",
8910     nr_pages, pfn);
8911     memory_notify(MEM_CANCEL_ONLINE, &arg);
8912     + unlock_memory_hotplug();
8913     return ret;
8914     }
8915    
8916     @@ -467,6 +470,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages)
8917    
8918     if (onlined_pages)
8919     memory_notify(MEM_ONLINE, &arg);
8920     + unlock_memory_hotplug();
8921    
8922     return 0;
8923     }
8924     diff --git a/mm/migrate.c b/mm/migrate.c
8925     index 6ae8a66..87e7e3a 100644
8926     --- a/mm/migrate.c
8927     +++ b/mm/migrate.c
8928     @@ -246,7 +246,7 @@ static int migrate_page_move_mapping(struct address_space *mapping,
8929    
8930     expected_count = 2 + page_has_private(page);
8931     if (page_count(page) != expected_count ||
8932     - (struct page *)radix_tree_deref_slot(pslot) != page) {
8933     + radix_tree_deref_slot_protected(pslot, &mapping->tree_lock) != page) {
8934     spin_unlock_irq(&mapping->tree_lock);
8935     return -EAGAIN;
8936     }
8937     @@ -318,7 +318,7 @@ int migrate_huge_page_move_mapping(struct address_space *mapping,
8938    
8939     expected_count = 2 + page_has_private(page);
8940     if (page_count(page) != expected_count ||
8941     - (struct page *)radix_tree_deref_slot(pslot) != page) {
8942     + radix_tree_deref_slot_protected(pslot, &mapping->tree_lock) != page) {
8943     spin_unlock_irq(&mapping->tree_lock);
8944     return -EAGAIN;
8945     }
8946     @@ -620,7 +620,6 @@ static int unmap_and_move(new_page_t get_new_page, unsigned long private,
8947     int *result = NULL;
8948     struct page *newpage = get_new_page(page, private, &result);
8949     int remap_swapcache = 1;
8950     - int rcu_locked = 0;
8951     int charge = 0;
8952     struct mem_cgroup *mem = NULL;
8953     struct anon_vma *anon_vma = NULL;
8954     @@ -672,20 +671,26 @@ static int unmap_and_move(new_page_t get_new_page, unsigned long private,
8955     /*
8956     * By try_to_unmap(), page->mapcount goes down to 0 here. In this case,
8957     * we cannot notice that anon_vma is freed while we migrates a page.
8958     - * This rcu_read_lock() delays freeing anon_vma pointer until the end
8959     + * This get_anon_vma() delays freeing anon_vma pointer until the end
8960     * of migration. File cache pages are no problem because of page_lock()
8961     * File Caches may use write_page() or lock_page() in migration, then,
8962     * just care Anon page here.
8963     */
8964     if (PageAnon(page)) {
8965     - rcu_read_lock();
8966     - rcu_locked = 1;
8967     -
8968     - /* Determine how to safely use anon_vma */
8969     - if (!page_mapped(page)) {
8970     - if (!PageSwapCache(page))
8971     - goto rcu_unlock;
8972     -
8973     + /*
8974     + * Only page_lock_anon_vma() understands the subtleties of
8975     + * getting a hold on an anon_vma from outside one of its mms.
8976     + */
8977     + anon_vma = page_lock_anon_vma(page);
8978     + if (anon_vma) {
8979     + /*
8980     + * Take a reference count on the anon_vma if the
8981     + * page is mapped so that it is guaranteed to
8982     + * exist when the page is remapped later
8983     + */
8984     + get_anon_vma(anon_vma);
8985     + page_unlock_anon_vma(anon_vma);
8986     + } else if (PageSwapCache(page)) {
8987     /*
8988     * We cannot be sure that the anon_vma of an unmapped
8989     * swapcache page is safe to use because we don't
8990     @@ -700,13 +705,7 @@ static int unmap_and_move(new_page_t get_new_page, unsigned long private,
8991     */
8992     remap_swapcache = 0;
8993     } else {
8994     - /*
8995     - * Take a reference count on the anon_vma if the
8996     - * page is mapped so that it is guaranteed to
8997     - * exist when the page is remapped later
8998     - */
8999     - anon_vma = page_anon_vma(page);
9000     - get_anon_vma(anon_vma);
9001     + goto uncharge;
9002     }
9003     }
9004    
9005     @@ -723,16 +722,10 @@ static int unmap_and_move(new_page_t get_new_page, unsigned long private,
9006     * free the metadata, so the page can be freed.
9007     */
9008     if (!page->mapping) {
9009     - if (!PageAnon(page) && page_has_private(page)) {
9010     - /*
9011     - * Go direct to try_to_free_buffers() here because
9012     - * a) that's what try_to_release_page() would do anyway
9013     - * b) we may be under rcu_read_lock() here, so we can't
9014     - * use GFP_KERNEL which is what try_to_release_page()
9015     - * needs to be effective.
9016     - */
9017     + VM_BUG_ON(PageAnon(page));
9018     + if (page_has_private(page)) {
9019     try_to_free_buffers(page);
9020     - goto rcu_unlock;
9021     + goto uncharge;
9022     }
9023     goto skip_unmap;
9024     }
9025     @@ -746,14 +739,11 @@ skip_unmap:
9026    
9027     if (rc && remap_swapcache)
9028     remove_migration_ptes(page, page);
9029     -rcu_unlock:
9030    
9031     /* Drop an anon_vma reference if we took one */
9032     if (anon_vma)
9033     drop_anon_vma(anon_vma);
9034    
9035     - if (rcu_locked)
9036     - rcu_read_unlock();
9037     uncharge:
9038     if (!charge)
9039     mem_cgroup_end_migration(mem, page, newpage);
9040     @@ -815,7 +805,6 @@ static int unmap_and_move_huge_page(new_page_t get_new_page,
9041     int rc = 0;
9042     int *result = NULL;
9043     struct page *new_hpage = get_new_page(hpage, private, &result);
9044     - int rcu_locked = 0;
9045     struct anon_vma *anon_vma = NULL;
9046    
9047     if (!new_hpage)
9048     @@ -830,12 +819,10 @@ static int unmap_and_move_huge_page(new_page_t get_new_page,
9049     }
9050    
9051     if (PageAnon(hpage)) {
9052     - rcu_read_lock();
9053     - rcu_locked = 1;
9054     -
9055     - if (page_mapped(hpage)) {
9056     - anon_vma = page_anon_vma(hpage);
9057     - atomic_inc(&anon_vma->external_refcount);
9058     + anon_vma = page_lock_anon_vma(hpage);
9059     + if (anon_vma) {
9060     + get_anon_vma(anon_vma);
9061     + page_unlock_anon_vma(anon_vma);
9062     }
9063     }
9064    
9065     @@ -847,16 +834,8 @@ static int unmap_and_move_huge_page(new_page_t get_new_page,
9066     if (rc)
9067     remove_migration_ptes(hpage, hpage);
9068    
9069     - if (anon_vma && atomic_dec_and_lock(&anon_vma->external_refcount,
9070     - &anon_vma->lock)) {
9071     - int empty = list_empty(&anon_vma->head);
9072     - spin_unlock(&anon_vma->lock);
9073     - if (empty)
9074     - anon_vma_free(anon_vma);
9075     - }
9076     -
9077     - if (rcu_locked)
9078     - rcu_read_unlock();
9079     + if (anon_vma)
9080     + drop_anon_vma(anon_vma);
9081     out:
9082     unlock_page(hpage);
9083    
9084     diff --git a/mm/mmzone.c b/mm/mmzone.c
9085     index e35bfb8..f5b7d17 100644
9086     --- a/mm/mmzone.c
9087     +++ b/mm/mmzone.c
9088     @@ -87,24 +87,3 @@ int memmap_valid_within(unsigned long pfn,
9089     return 1;
9090     }
9091     #endif /* CONFIG_ARCH_HAS_HOLES_MEMORYMODEL */
9092     -
9093     -#ifdef CONFIG_SMP
9094     -/* Called when a more accurate view of NR_FREE_PAGES is needed */
9095     -unsigned long zone_nr_free_pages(struct zone *zone)
9096     -{
9097     - unsigned long nr_free_pages = zone_page_state(zone, NR_FREE_PAGES);
9098     -
9099     - /*
9100     - * While kswapd is awake, it is considered the zone is under some
9101     - * memory pressure. Under pressure, there is a risk that
9102     - * per-cpu-counter-drift will allow the min watermark to be breached
9103     - * potentially causing a live-lock. While kswapd is awake and
9104     - * free pages are low, get a better estimate for free pages
9105     - */
9106     - if (nr_free_pages < zone->percpu_drift_mark &&
9107     - !waitqueue_active(&zone->zone_pgdat->kswapd_wait))
9108     - return zone_page_state_snapshot(zone, NR_FREE_PAGES);
9109     -
9110     - return nr_free_pages;
9111     -}
9112     -#endif /* CONFIG_SMP */
9113     diff --git a/mm/page_alloc.c b/mm/page_alloc.c
9114     index ff7e158..91b6d8c 100644
9115     --- a/mm/page_alloc.c
9116     +++ b/mm/page_alloc.c
9117     @@ -1460,24 +1460,24 @@ static inline int should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
9118     #endif /* CONFIG_FAIL_PAGE_ALLOC */
9119    
9120     /*
9121     - * Return 1 if free pages are above 'mark'. This takes into account the order
9122     + * Return true if free pages are above 'mark'. This takes into account the order
9123     * of the allocation.
9124     */
9125     -int zone_watermark_ok(struct zone *z, int order, unsigned long mark,
9126     - int classzone_idx, int alloc_flags)
9127     +static bool __zone_watermark_ok(struct zone *z, int order, unsigned long mark,
9128     + int classzone_idx, int alloc_flags, long free_pages)
9129     {
9130     /* free_pages my go negative - that's OK */
9131     long min = mark;
9132     - long free_pages = zone_nr_free_pages(z) - (1 << order) + 1;
9133     int o;
9134    
9135     + free_pages -= (1 << order) + 1;
9136     if (alloc_flags & ALLOC_HIGH)
9137     min -= min / 2;
9138     if (alloc_flags & ALLOC_HARDER)
9139     min -= min / 4;
9140    
9141     if (free_pages <= min + z->lowmem_reserve[classzone_idx])
9142     - return 0;
9143     + return false;
9144     for (o = 0; o < order; o++) {
9145     /* At the next order, this order's pages become unavailable */
9146     free_pages -= z->free_area[o].nr_free << o;
9147     @@ -1486,9 +1486,28 @@ int zone_watermark_ok(struct zone *z, int order, unsigned long mark,
9148     min >>= 1;
9149    
9150     if (free_pages <= min)
9151     - return 0;
9152     + return false;
9153     }
9154     - return 1;
9155     + return true;
9156     +}
9157     +
9158     +bool zone_watermark_ok(struct zone *z, int order, unsigned long mark,
9159     + int classzone_idx, int alloc_flags)
9160     +{
9161     + return __zone_watermark_ok(z, order, mark, classzone_idx, alloc_flags,
9162     + zone_page_state(z, NR_FREE_PAGES));
9163     +}
9164     +
9165     +bool zone_watermark_ok_safe(struct zone *z, int order, unsigned long mark,
9166     + int classzone_idx, int alloc_flags)
9167     +{
9168     + long free_pages = zone_page_state(z, NR_FREE_PAGES);
9169     +
9170     + if (z->percpu_drift_mark && free_pages < z->percpu_drift_mark)
9171     + free_pages = zone_page_state_snapshot(z, NR_FREE_PAGES);
9172     +
9173     + return __zone_watermark_ok(z, order, mark, classzone_idx, alloc_flags,
9174     + free_pages);
9175     }
9176    
9177     #ifdef CONFIG_NUMA
9178     @@ -2442,7 +2461,7 @@ void show_free_areas(void)
9179     " all_unreclaimable? %s"
9180     "\n",
9181     zone->name,
9182     - K(zone_nr_free_pages(zone)),
9183     + K(zone_page_state(zone, NR_FREE_PAGES)),
9184     K(min_wmark_pages(zone)),
9185     K(low_wmark_pages(zone)),
9186     K(high_wmark_pages(zone)),
9187     diff --git a/mm/slub.c b/mm/slub.c
9188     index bec0e35..96e6907 100644
9189     --- a/mm/slub.c
9190     +++ b/mm/slub.c
9191     @@ -3821,7 +3821,7 @@ static ssize_t show_slab_objects(struct kmem_cache *s,
9192     }
9193     }
9194    
9195     - down_read(&slub_lock);
9196     + lock_memory_hotplug();
9197     #ifdef CONFIG_SLUB_DEBUG
9198     if (flags & SO_ALL) {
9199     for_each_node_state(node, N_NORMAL_MEMORY) {
9200     @@ -3862,7 +3862,7 @@ static ssize_t show_slab_objects(struct kmem_cache *s,
9201     x += sprintf(buf + x, " N%d=%lu",
9202     node, nodes[node]);
9203     #endif
9204     - up_read(&slub_lock);
9205     + unlock_memory_hotplug();
9206     kfree(nodes);
9207     return x + sprintf(buf + x, "\n");
9208     }
9209     diff --git a/mm/vmscan.c b/mm/vmscan.c
9210     index 9ca587c..5da4295 100644
9211     --- a/mm/vmscan.c
9212     +++ b/mm/vmscan.c
9213     @@ -2143,7 +2143,7 @@ static int sleeping_prematurely(pg_data_t *pgdat, int order, long remaining)
9214     if (zone->all_unreclaimable)
9215     continue;
9216    
9217     - if (!zone_watermark_ok(zone, order, high_wmark_pages(zone),
9218     + if (!zone_watermark_ok_safe(zone, order, high_wmark_pages(zone),
9219     0, 0))
9220     return 1;
9221     }
9222     @@ -2230,7 +2230,7 @@ loop_again:
9223     shrink_active_list(SWAP_CLUSTER_MAX, zone,
9224     &sc, priority, 0);
9225    
9226     - if (!zone_watermark_ok(zone, order,
9227     + if (!zone_watermark_ok_safe(zone, order,
9228     high_wmark_pages(zone), 0, 0)) {
9229     end_zone = i;
9230     break;
9231     @@ -2276,7 +2276,7 @@ loop_again:
9232     * We put equal pressure on every zone, unless one
9233     * zone has way too many pages free already.
9234     */
9235     - if (!zone_watermark_ok(zone, order,
9236     + if (!zone_watermark_ok_safe(zone, order,
9237     8*high_wmark_pages(zone), end_zone, 0))
9238     shrink_zone(priority, zone, &sc);
9239     reclaim_state->reclaimed_slab = 0;
9240     @@ -2297,7 +2297,7 @@ loop_again:
9241     total_scanned > sc.nr_reclaimed + sc.nr_reclaimed / 2)
9242     sc.may_writepage = 1;
9243    
9244     - if (!zone_watermark_ok(zone, order,
9245     + if (!zone_watermark_ok_safe(zone, order,
9246     high_wmark_pages(zone), end_zone, 0)) {
9247     all_zones_ok = 0;
9248     /*
9249     @@ -2305,7 +2305,7 @@ loop_again:
9250     * means that we have a GFP_ATOMIC allocation
9251     * failure risk. Hurry up!
9252     */
9253     - if (!zone_watermark_ok(zone, order,
9254     + if (!zone_watermark_ok_safe(zone, order,
9255     min_wmark_pages(zone), end_zone, 0))
9256     has_under_min_watermark_zone = 1;
9257     } else {
9258     @@ -2448,7 +2448,9 @@ static int kswapd(void *p)
9259     */
9260     if (!sleeping_prematurely(pgdat, order, remaining)) {
9261     trace_mm_vmscan_kswapd_sleep(pgdat->node_id);
9262     + restore_pgdat_percpu_threshold(pgdat);
9263     schedule();
9264     + reduce_pgdat_percpu_threshold(pgdat);
9265     } else {
9266     if (remaining)
9267     count_vm_event(KSWAPD_LOW_WMARK_HIT_QUICKLY);
9268     @@ -2487,16 +2489,17 @@ void wakeup_kswapd(struct zone *zone, int order)
9269     if (!populated_zone(zone))
9270     return;
9271    
9272     - pgdat = zone->zone_pgdat;
9273     - if (zone_watermark_ok(zone, order, low_wmark_pages(zone), 0, 0))
9274     + if (!cpuset_zone_allowed_hardwall(zone, GFP_KERNEL))
9275     return;
9276     + pgdat = zone->zone_pgdat;
9277     if (pgdat->kswapd_max_order < order)
9278     pgdat->kswapd_max_order = order;
9279     - trace_mm_vmscan_wakeup_kswapd(pgdat->node_id, zone_idx(zone), order);
9280     - if (!cpuset_zone_allowed_hardwall(zone, GFP_KERNEL))
9281     - return;
9282     if (!waitqueue_active(&pgdat->kswapd_wait))
9283     return;
9284     + if (zone_watermark_ok_safe(zone, order, low_wmark_pages(zone), 0, 0))
9285     + return;
9286     +
9287     + trace_mm_vmscan_wakeup_kswapd(pgdat->node_id, zone_idx(zone), order);
9288     wake_up_interruptible(&pgdat->kswapd_wait);
9289     }
9290    
9291     diff --git a/mm/vmstat.c b/mm/vmstat.c
9292     index 8f62f17..8aff417 100644
9293     --- a/mm/vmstat.c
9294     +++ b/mm/vmstat.c
9295     @@ -83,6 +83,30 @@ EXPORT_SYMBOL(vm_stat);
9296    
9297     #ifdef CONFIG_SMP
9298    
9299     +static int calculate_pressure_threshold(struct zone *zone)
9300     +{
9301     + int threshold;
9302     + int watermark_distance;
9303     +
9304     + /*
9305     + * As vmstats are not up to date, there is drift between the estimated
9306     + * and real values. For high thresholds and a high number of CPUs, it
9307     + * is possible for the min watermark to be breached while the estimated
9308     + * value looks fine. The pressure threshold is a reduced value such
9309     + * that even the maximum amount of drift will not accidentally breach
9310     + * the min watermark
9311     + */
9312     + watermark_distance = low_wmark_pages(zone) - min_wmark_pages(zone);
9313     + threshold = max(1, (int)(watermark_distance / num_online_cpus()));
9314     +
9315     + /*
9316     + * Maximum threshold is 125
9317     + */
9318     + threshold = min(125, threshold);
9319     +
9320     + return threshold;
9321     +}
9322     +
9323     static int calculate_threshold(struct zone *zone)
9324     {
9325     int threshold;
9326     @@ -161,6 +185,48 @@ static void refresh_zone_stat_thresholds(void)
9327     }
9328     }
9329    
9330     +void reduce_pgdat_percpu_threshold(pg_data_t *pgdat)
9331     +{
9332     + struct zone *zone;
9333     + int cpu;
9334     + int threshold;
9335     + int i;
9336     +
9337     + get_online_cpus();
9338     + for (i = 0; i < pgdat->nr_zones; i++) {
9339     + zone = &pgdat->node_zones[i];
9340     + if (!zone->percpu_drift_mark)
9341     + continue;
9342     +
9343     + threshold = calculate_pressure_threshold(zone);
9344     + for_each_online_cpu(cpu)
9345     + per_cpu_ptr(zone->pageset, cpu)->stat_threshold
9346     + = threshold;
9347     + }
9348     + put_online_cpus();
9349     +}
9350     +
9351     +void restore_pgdat_percpu_threshold(pg_data_t *pgdat)
9352     +{
9353     + struct zone *zone;
9354     + int cpu;
9355     + int threshold;
9356     + int i;
9357     +
9358     + get_online_cpus();
9359     + for (i = 0; i < pgdat->nr_zones; i++) {
9360     + zone = &pgdat->node_zones[i];
9361     + if (!zone->percpu_drift_mark)
9362     + continue;
9363     +
9364     + threshold = calculate_threshold(zone);
9365     + for_each_online_cpu(cpu)
9366     + per_cpu_ptr(zone->pageset, cpu)->stat_threshold
9367     + = threshold;
9368     + }
9369     + put_online_cpus();
9370     +}
9371     +
9372     /*
9373     * For use when we know that interrupts are disabled.
9374     */
9375     @@ -834,7 +900,7 @@ static void zoneinfo_show_print(struct seq_file *m, pg_data_t *pgdat,
9376     "\n scanned %lu"
9377     "\n spanned %lu"
9378     "\n present %lu",
9379     - zone_nr_free_pages(zone),
9380     + zone_page_state(zone, NR_FREE_PAGES),
9381     min_wmark_pages(zone),
9382     low_wmark_pages(zone),
9383     high_wmark_pages(zone),
9384     diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
9385     index bb86d29..6da5dae 100644
9386     --- a/net/ax25/af_ax25.c
9387     +++ b/net/ax25/af_ax25.c
9388     @@ -1392,7 +1392,7 @@ static int ax25_getname(struct socket *sock, struct sockaddr *uaddr,
9389     ax25_cb *ax25;
9390     int err = 0;
9391    
9392     - memset(fsa, 0, sizeof(fsa));
9393     + memset(fsa, 0, sizeof(*fsa));
9394     lock_sock(sk);
9395     ax25 = ax25_sk(sk);
9396    
9397     diff --git a/net/core/ethtool.c b/net/core/ethtool.c
9398     index 956a9f4..1c6c3ac 100644
9399     --- a/net/core/ethtool.c
9400     +++ b/net/core/ethtool.c
9401     @@ -817,7 +817,7 @@ static int ethtool_get_regs(struct net_device *dev, char __user *useraddr)
9402     if (regs.len > reglen)
9403     regs.len = reglen;
9404    
9405     - regbuf = vmalloc(reglen);
9406     + regbuf = vzalloc(reglen);
9407     if (!regbuf)
9408     return -ENOMEM;
9409    
9410     diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
9411     index 841c287..b078d90 100644
9412     --- a/net/core/rtnetlink.c
9413     +++ b/net/core/rtnetlink.c
9414     @@ -1510,6 +1510,9 @@ replay:
9415     snprintf(ifname, IFNAMSIZ, "%s%%d", ops->kind);
9416    
9417     dest_net = rtnl_link_get_net(net, tb);
9418     + if (IS_ERR(dest_net))
9419     + return PTR_ERR(dest_net);
9420     +
9421     dev = rtnl_create_link(net, dest_net, ifname, ops, tb);
9422    
9423     if (IS_ERR(dev))
9424     diff --git a/net/core/sock.c b/net/core/sock.c
9425     index e5af8d5..7fd3541 100644
9426     --- a/net/core/sock.c
9427     +++ b/net/core/sock.c
9428     @@ -1907,7 +1907,7 @@ static void sock_def_readable(struct sock *sk, int len)
9429     rcu_read_lock();
9430     wq = rcu_dereference(sk->sk_wq);
9431     if (wq_has_sleeper(wq))
9432     - wake_up_interruptible_sync_poll(&wq->wait, POLLIN |
9433     + wake_up_interruptible_sync_poll(&wq->wait, POLLIN | POLLPRI |
9434     POLLRDNORM | POLLRDBAND);
9435     sk_wake_async(sk, SOCK_WAKE_WAITD, POLL_IN);
9436     rcu_read_unlock();
9437     diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
9438     index 1684408..fb9b94a 100644
9439     --- a/net/ipv4/ip_fragment.c
9440     +++ b/net/ipv4/ip_fragment.c
9441     @@ -45,6 +45,7 @@
9442     #include <linux/udp.h>
9443     #include <linux/inet.h>
9444     #include <linux/netfilter_ipv4.h>
9445     +#include <net/inet_ecn.h>
9446    
9447     /* NOTE. Logic of IP defragmentation is parallel to corresponding IPv6
9448     * code now. If you change something here, _PLEASE_ update ipv6/reassembly.c
9449     @@ -70,11 +71,28 @@ struct ipq {
9450     __be32 daddr;
9451     __be16 id;
9452     u8 protocol;
9453     + u8 ecn; /* RFC3168 support */
9454     int iif;
9455     unsigned int rid;
9456     struct inet_peer *peer;
9457     };
9458    
9459     +#define IPFRAG_ECN_CLEAR 0x01 /* one frag had INET_ECN_NOT_ECT */
9460     +#define IPFRAG_ECN_SET_CE 0x04 /* one frag had INET_ECN_CE */
9461     +
9462     +static inline u8 ip4_frag_ecn(u8 tos)
9463     +{
9464     + tos = (tos & INET_ECN_MASK) + 1;
9465     + /*
9466     + * After the last operation we have (in binary):
9467     + * INET_ECN_NOT_ECT => 001
9468     + * INET_ECN_ECT_1 => 010
9469     + * INET_ECN_ECT_0 => 011
9470     + * INET_ECN_CE => 100
9471     + */
9472     + return (tos & 2) ? 0 : tos;
9473     +}
9474     +
9475     static struct inet_frags ip4_frags;
9476    
9477     int ip_frag_nqueues(struct net *net)
9478     @@ -137,6 +155,7 @@ static void ip4_frag_init(struct inet_frag_queue *q, void *a)
9479    
9480     qp->protocol = arg->iph->protocol;
9481     qp->id = arg->iph->id;
9482     + qp->ecn = ip4_frag_ecn(arg->iph->tos);
9483     qp->saddr = arg->iph->saddr;
9484     qp->daddr = arg->iph->daddr;
9485     qp->user = arg->user;
9486     @@ -316,6 +335,7 @@ static int ip_frag_reinit(struct ipq *qp)
9487     qp->q.fragments = NULL;
9488     qp->q.fragments_tail = NULL;
9489     qp->iif = 0;
9490     + qp->ecn = 0;
9491    
9492     return 0;
9493     }
9494     @@ -328,6 +348,7 @@ static int ip_frag_queue(struct ipq *qp, struct sk_buff *skb)
9495     int flags, offset;
9496     int ihl, end;
9497     int err = -ENOENT;
9498     + u8 ecn;
9499    
9500     if (qp->q.last_in & INET_FRAG_COMPLETE)
9501     goto err;
9502     @@ -339,6 +360,7 @@ static int ip_frag_queue(struct ipq *qp, struct sk_buff *skb)
9503     goto err;
9504     }
9505    
9506     + ecn = ip4_frag_ecn(ip_hdr(skb)->tos);
9507     offset = ntohs(ip_hdr(skb)->frag_off);
9508     flags = offset & ~IP_OFFSET;
9509     offset &= IP_OFFSET;
9510     @@ -472,6 +494,7 @@ found:
9511     }
9512     qp->q.stamp = skb->tstamp;
9513     qp->q.meat += skb->len;
9514     + qp->ecn |= ecn;
9515     atomic_add(skb->truesize, &qp->q.net->mem);
9516     if (offset == 0)
9517     qp->q.last_in |= INET_FRAG_FIRST_IN;
9518     @@ -583,6 +606,17 @@ static int ip_frag_reasm(struct ipq *qp, struct sk_buff *prev,
9519     iph = ip_hdr(head);
9520     iph->frag_off = 0;
9521     iph->tot_len = htons(len);
9522     + /* RFC3168 5.3 Fragmentation support
9523     + * If one fragment had INET_ECN_NOT_ECT,
9524     + * reassembled frame also has INET_ECN_NOT_ECT
9525     + * Elif one fragment had INET_ECN_CE
9526     + * reassembled frame also has INET_ECN_CE
9527     + */
9528     + if (qp->ecn & IPFRAG_ECN_CLEAR)
9529     + iph->tos &= ~INET_ECN_MASK;
9530     + else if (qp->ecn & IPFRAG_ECN_SET_CE)
9531     + iph->tos |= INET_ECN_CE;
9532     +
9533     IP_INC_STATS_BH(net, IPSTATS_MIB_REASMOKS);
9534     qp->q.fragments = NULL;
9535     qp->q.fragments_tail = NULL;
9536     diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
9537     index 94b5bf1..5f8d242 100644
9538     --- a/net/ipv6/ip6_output.c
9539     +++ b/net/ipv6/ip6_output.c
9540     @@ -401,6 +401,9 @@ int ip6_forward(struct sk_buff *skb)
9541     goto drop;
9542     }
9543    
9544     + if (skb->pkt_type != PACKET_HOST)
9545     + goto drop;
9546     +
9547     skb_forward_csum(skb);
9548    
9549     /*
9550     diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c
9551     index 720b7a8..c080a5d 100644
9552     --- a/net/mac80211/agg-rx.c
9553     +++ b/net/mac80211/agg-rx.c
9554     @@ -187,8 +187,6 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
9555     struct ieee80211_mgmt *mgmt,
9556     size_t len)
9557     {
9558     - struct ieee80211_hw *hw = &local->hw;
9559     - struct ieee80211_conf *conf = &hw->conf;
9560     struct tid_ampdu_rx *tid_agg_rx;
9561     u16 capab, tid, timeout, ba_policy, buf_size, start_seq_num, status;
9562     u8 dialog_token;
9563     @@ -233,13 +231,8 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
9564     goto end_no_lock;
9565     }
9566     /* determine default buffer size */
9567     - if (buf_size == 0) {
9568     - struct ieee80211_supported_band *sband;
9569     -
9570     - sband = local->hw.wiphy->bands[conf->channel->band];
9571     - buf_size = IEEE80211_MIN_AMPDU_BUF;
9572     - buf_size = buf_size << sband->ht_cap.ampdu_factor;
9573     - }
9574     + if (buf_size == 0)
9575     + buf_size = IEEE80211_MAX_AMPDU_BUF;
9576    
9577    
9578     /* examine state machine */
9579     diff --git a/net/mac80211/key.c b/net/mac80211/key.c
9580     index ccd676b..aa1b734 100644
9581     --- a/net/mac80211/key.c
9582     +++ b/net/mac80211/key.c
9583     @@ -366,6 +366,12 @@ static void __ieee80211_key_destroy(struct ieee80211_key *key)
9584     if (!key)
9585     return;
9586    
9587     + /*
9588     + * Synchronize so the TX path can no longer be using
9589     + * this key before we free/remove it.
9590     + */
9591     + synchronize_rcu();
9592     +
9593     if (key->local)
9594     ieee80211_key_disable_hw_accel(key);
9595    
9596     diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
9597     index b01e467..e98668f 100644
9598     --- a/net/mac80211/rx.c
9599     +++ b/net/mac80211/rx.c
9600     @@ -1788,11 +1788,11 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
9601    
9602     fwd_skb = skb_copy(skb, GFP_ATOMIC);
9603    
9604     - if (!fwd_skb && net_ratelimit()) {
9605     + if (!fwd_skb && net_ratelimit())
9606     printk(KERN_DEBUG "%s: failed to clone mesh frame\n",
9607     sdata->name);
9608     + if (!fwd_skb)
9609     goto out;
9610     - }
9611    
9612     fwd_hdr = (struct ieee80211_hdr *) fwd_skb->data;
9613     memcpy(fwd_hdr->addr2, sdata->vif.addr, ETH_ALEN);
9614     diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
9615     index 7a637b8..2f09db5 100644
9616     --- a/net/mac80211/tx.c
9617     +++ b/net/mac80211/tx.c
9618     @@ -1726,7 +1726,7 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
9619     {
9620     struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
9621     struct ieee80211_local *local = sdata->local;
9622     - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
9623     + struct ieee80211_tx_info *info;
9624     int ret = NETDEV_TX_BUSY, head_need;
9625     u16 ethertype, hdrlen, meshhdrlen = 0;
9626     __le16 fc;
9627     @@ -2017,6 +2017,7 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
9628     skb_set_network_header(skb, nh_pos);
9629     skb_set_transport_header(skb, h_pos);
9630    
9631     + info = IEEE80211_SKB_CB(skb);
9632     memset(info, 0, sizeof(*info));
9633    
9634     dev->trans_start = jiffies;
9635     @@ -2207,6 +2208,9 @@ struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw,
9636    
9637     sdata = vif_to_sdata(vif);
9638    
9639     + if (!ieee80211_sdata_running(sdata))
9640     + goto out;
9641     +
9642     if (tim_offset)
9643     *tim_offset = 0;
9644     if (tim_length)
9645     diff --git a/net/sched/sch_fifo.c b/net/sched/sch_fifo.c
9646     index 4dfecb0..aa4d633 100644
9647     --- a/net/sched/sch_fifo.c
9648     +++ b/net/sched/sch_fifo.c
9649     @@ -54,8 +54,6 @@ static int pfifo_tail_enqueue(struct sk_buff *skb, struct Qdisc* sch)
9650    
9651     /* queue full, remove one skb to fulfill the limit */
9652     skb_head = qdisc_dequeue_head(sch);
9653     - sch->bstats.bytes -= qdisc_pkt_len(skb_head);
9654     - sch->bstats.packets--;
9655     sch->qstats.drops++;
9656     kfree_skb(skb_head);
9657    
9658     diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c
9659     index cd9e841..679cd67 100644
9660     --- a/net/sunrpc/xdr.c
9661     +++ b/net/sunrpc/xdr.c
9662     @@ -552,6 +552,74 @@ void xdr_write_pages(struct xdr_stream *xdr, struct page **pages, unsigned int b
9663     }
9664     EXPORT_SYMBOL_GPL(xdr_write_pages);
9665    
9666     +static void xdr_set_iov(struct xdr_stream *xdr, struct kvec *iov,
9667     + __be32 *p, unsigned int len)
9668     +{
9669     + if (len > iov->iov_len)
9670     + len = iov->iov_len;
9671     + if (p == NULL)
9672     + p = (__be32*)iov->iov_base;
9673     + xdr->p = p;
9674     + xdr->end = (__be32*)(iov->iov_base + len);
9675     + xdr->iov = iov;
9676     + xdr->page_ptr = NULL;
9677     +}
9678     +
9679     +static int xdr_set_page_base(struct xdr_stream *xdr,
9680     + unsigned int base, unsigned int len)
9681     +{
9682     + unsigned int pgnr;
9683     + unsigned int maxlen;
9684     + unsigned int pgoff;
9685     + unsigned int pgend;
9686     + void *kaddr;
9687     +
9688     + maxlen = xdr->buf->page_len;
9689     + if (base >= maxlen)
9690     + return -EINVAL;
9691     + maxlen -= base;
9692     + if (len > maxlen)
9693     + len = maxlen;
9694     +
9695     + base += xdr->buf->page_base;
9696     +
9697     + pgnr = base >> PAGE_SHIFT;
9698     + xdr->page_ptr = &xdr->buf->pages[pgnr];
9699     + kaddr = page_address(*xdr->page_ptr);
9700     +
9701     + pgoff = base & ~PAGE_MASK;
9702     + xdr->p = (__be32*)(kaddr + pgoff);
9703     +
9704     + pgend = pgoff + len;
9705     + if (pgend > PAGE_SIZE)
9706     + pgend = PAGE_SIZE;
9707     + xdr->end = (__be32*)(kaddr + pgend);
9708     + xdr->iov = NULL;
9709     + return 0;
9710     +}
9711     +
9712     +static void xdr_set_next_page(struct xdr_stream *xdr)
9713     +{
9714     + unsigned int newbase;
9715     +
9716     + newbase = (1 + xdr->page_ptr - xdr->buf->pages) << PAGE_SHIFT;
9717     + newbase -= xdr->buf->page_base;
9718     +
9719     + if (xdr_set_page_base(xdr, newbase, PAGE_SIZE) < 0)
9720     + xdr_set_iov(xdr, xdr->buf->tail, NULL, xdr->buf->len);
9721     +}
9722     +
9723     +static bool xdr_set_next_buffer(struct xdr_stream *xdr)
9724     +{
9725     + if (xdr->page_ptr != NULL)
9726     + xdr_set_next_page(xdr);
9727     + else if (xdr->iov == xdr->buf->head) {
9728     + if (xdr_set_page_base(xdr, 0, PAGE_SIZE) < 0)
9729     + xdr_set_iov(xdr, xdr->buf->tail, NULL, xdr->buf->len);
9730     + }
9731     + return xdr->p != xdr->end;
9732     +}
9733     +
9734     /**
9735     * xdr_init_decode - Initialize an xdr_stream for decoding data.
9736     * @xdr: pointer to xdr_stream struct
9737     @@ -560,41 +628,67 @@ EXPORT_SYMBOL_GPL(xdr_write_pages);
9738     */
9739     void xdr_init_decode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p)
9740     {
9741     - struct kvec *iov = buf->head;
9742     - unsigned int len = iov->iov_len;
9743     -
9744     - if (len > buf->len)
9745     - len = buf->len;
9746     xdr->buf = buf;
9747     - xdr->iov = iov;
9748     - xdr->p = p;
9749     - xdr->end = (__be32 *)((char *)iov->iov_base + len);
9750     + xdr->scratch.iov_base = NULL;
9751     + xdr->scratch.iov_len = 0;
9752     + if (buf->head[0].iov_len != 0)
9753     + xdr_set_iov(xdr, buf->head, p, buf->len);
9754     + else if (buf->page_len != 0)
9755     + xdr_set_page_base(xdr, 0, buf->len);
9756     }
9757     EXPORT_SYMBOL_GPL(xdr_init_decode);
9758    
9759     -/**
9760     - * xdr_inline_peek - Allow read-ahead in the XDR data stream
9761     - * @xdr: pointer to xdr_stream struct
9762     - * @nbytes: number of bytes of data to decode
9763     - *
9764     - * Check if the input buffer is long enough to enable us to decode
9765     - * 'nbytes' more bytes of data starting at the current position.
9766     - * If so return the current pointer without updating the current
9767     - * pointer position.
9768     - */
9769     -__be32 * xdr_inline_peek(struct xdr_stream *xdr, size_t nbytes)
9770     +static __be32 * __xdr_inline_decode(struct xdr_stream *xdr, size_t nbytes)
9771     {
9772     __be32 *p = xdr->p;
9773     __be32 *q = p + XDR_QUADLEN(nbytes);
9774    
9775     if (unlikely(q > xdr->end || q < p))
9776     return NULL;
9777     + xdr->p = q;
9778     return p;
9779     }
9780     -EXPORT_SYMBOL_GPL(xdr_inline_peek);
9781    
9782     /**
9783     - * xdr_inline_decode - Retrieve non-page XDR data to decode
9784     + * xdr_set_scratch_buffer - Attach a scratch buffer for decoding data.
9785     + * @xdr: pointer to xdr_stream struct
9786     + * @buf: pointer to an empty buffer
9787     + * @buflen: size of 'buf'
9788     + *
9789     + * The scratch buffer is used when decoding from an array of pages.
9790     + * If an xdr_inline_decode() call spans across page boundaries, then
9791     + * we copy the data into the scratch buffer in order to allow linear
9792     + * access.
9793     + */
9794     +void xdr_set_scratch_buffer(struct xdr_stream *xdr, void *buf, size_t buflen)
9795     +{
9796     + xdr->scratch.iov_base = buf;
9797     + xdr->scratch.iov_len = buflen;
9798     +}
9799     +EXPORT_SYMBOL_GPL(xdr_set_scratch_buffer);
9800     +
9801     +static __be32 *xdr_copy_to_scratch(struct xdr_stream *xdr, size_t nbytes)
9802     +{
9803     + __be32 *p;
9804     + void *cpdest = xdr->scratch.iov_base;
9805     + size_t cplen = (char *)xdr->end - (char *)xdr->p;
9806     +
9807     + if (nbytes > xdr->scratch.iov_len)
9808     + return NULL;
9809     + memcpy(cpdest, xdr->p, cplen);
9810     + cpdest += cplen;
9811     + nbytes -= cplen;
9812     + if (!xdr_set_next_buffer(xdr))
9813     + return NULL;
9814     + p = __xdr_inline_decode(xdr, nbytes);
9815     + if (p == NULL)
9816     + return NULL;
9817     + memcpy(cpdest, p, nbytes);
9818     + return xdr->scratch.iov_base;
9819     +}
9820     +
9821     +/**
9822     + * xdr_inline_decode - Retrieve XDR data to decode
9823     * @xdr: pointer to xdr_stream struct
9824     * @nbytes: number of bytes of data to decode
9825     *
9826     @@ -605,13 +699,16 @@ EXPORT_SYMBOL_GPL(xdr_inline_peek);
9827     */
9828     __be32 * xdr_inline_decode(struct xdr_stream *xdr, size_t nbytes)
9829     {
9830     - __be32 *p = xdr->p;
9831     - __be32 *q = p + XDR_QUADLEN(nbytes);
9832     + __be32 *p;
9833    
9834     - if (unlikely(q > xdr->end || q < p))
9835     + if (nbytes == 0)
9836     + return xdr->p;
9837     + if (xdr->p == xdr->end && !xdr_set_next_buffer(xdr))
9838     return NULL;
9839     - xdr->p = q;
9840     - return p;
9841     + p = __xdr_inline_decode(xdr, nbytes);
9842     + if (p != NULL)
9843     + return p;
9844     + return xdr_copy_to_scratch(xdr, nbytes);
9845     }
9846     EXPORT_SYMBOL_GPL(xdr_inline_decode);
9847    
9848     @@ -671,16 +768,12 @@ EXPORT_SYMBOL_GPL(xdr_read_pages);
9849     */
9850     void xdr_enter_page(struct xdr_stream *xdr, unsigned int len)
9851     {
9852     - char * kaddr = page_address(xdr->buf->pages[0]);
9853     xdr_read_pages(xdr, len);
9854     /*
9855     * Position current pointer at beginning of tail, and
9856     * set remaining message length.
9857     */
9858     - if (len > PAGE_CACHE_SIZE - xdr->buf->page_base)
9859     - len = PAGE_CACHE_SIZE - xdr->buf->page_base;
9860     - xdr->p = (__be32 *)(kaddr + xdr->buf->page_base);
9861     - xdr->end = (__be32 *)((char *)xdr->p + len);
9862     + xdr_set_page_base(xdr, 0, len);
9863     }
9864     EXPORT_SYMBOL_GPL(xdr_enter_page);
9865    
9866     diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
9867     index 2268e67..759bbcb 100644
9868     --- a/net/unix/af_unix.c
9869     +++ b/net/unix/af_unix.c
9870     @@ -1156,7 +1156,7 @@ restart:
9871     goto restart;
9872     }
9873    
9874     - err = security_unix_stream_connect(sock, other->sk_socket, newsk);
9875     + err = security_unix_stream_connect(sk, other, newsk);
9876     if (err) {
9877     unix_state_unlock(sk);
9878     goto out_unlock;
9879     diff --git a/net/wireless/reg.c b/net/wireless/reg.c
9880     index 4b9f891..8ab65f2 100644
9881     --- a/net/wireless/reg.c
9882     +++ b/net/wireless/reg.c
9883     @@ -720,7 +720,9 @@ EXPORT_SYMBOL(freq_reg_info);
9884     * on the wiphy with the target_bw specified. Then we can simply use
9885     * that below for the desired_bw_khz below.
9886     */
9887     -static void handle_channel(struct wiphy *wiphy, enum ieee80211_band band,
9888     +static void handle_channel(struct wiphy *wiphy,
9889     + enum nl80211_reg_initiator initiator,
9890     + enum ieee80211_band band,
9891     unsigned int chan_idx)
9892     {
9893     int r;
9894     @@ -748,8 +750,26 @@ static void handle_channel(struct wiphy *wiphy, enum ieee80211_band band,
9895     desired_bw_khz,
9896     &reg_rule);
9897    
9898     - if (r)
9899     + if (r) {
9900     + /*
9901     + * We will disable all channels that do not match our
9902     + * recieved regulatory rule unless the hint is coming
9903     + * from a Country IE and the Country IE had no information
9904     + * about a band. The IEEE 802.11 spec allows for an AP
9905     + * to send only a subset of the regulatory rules allowed,
9906     + * so an AP in the US that only supports 2.4 GHz may only send
9907     + * a country IE with information for the 2.4 GHz band
9908     + * while 5 GHz is still supported.
9909     + */
9910     + if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE &&
9911     + r == -ERANGE)
9912     + return;
9913     +
9914     + REG_DBG_PRINT("cfg80211: Disabling freq %d MHz\n",
9915     + chan->center_freq);
9916     + chan->flags = IEEE80211_CHAN_DISABLED;
9917     return;
9918     + }
9919    
9920     power_rule = &reg_rule->power_rule;
9921     freq_range = &reg_rule->freq_range;
9922     @@ -784,7 +804,9 @@ static void handle_channel(struct wiphy *wiphy, enum ieee80211_band band,
9923     chan->max_power = (int) MBM_TO_DBM(power_rule->max_eirp);
9924     }
9925    
9926     -static void handle_band(struct wiphy *wiphy, enum ieee80211_band band)
9927     +static void handle_band(struct wiphy *wiphy,
9928     + enum ieee80211_band band,
9929     + enum nl80211_reg_initiator initiator)
9930     {
9931     unsigned int i;
9932     struct ieee80211_supported_band *sband;
9933     @@ -793,7 +815,7 @@ static void handle_band(struct wiphy *wiphy, enum ieee80211_band band)
9934     sband = wiphy->bands[band];
9935    
9936     for (i = 0; i < sband->n_channels; i++)
9937     - handle_channel(wiphy, band, i);
9938     + handle_channel(wiphy, initiator, band, i);
9939     }
9940    
9941     static bool ignore_reg_update(struct wiphy *wiphy,
9942     @@ -809,6 +831,7 @@ static bool ignore_reg_update(struct wiphy *wiphy,
9943     * desired regulatory domain set
9944     */
9945     if (wiphy->flags & WIPHY_FLAG_STRICT_REGULATORY && !wiphy->regd &&
9946     + initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE &&
9947     !is_world_regdom(last_request->alpha2))
9948     return true;
9949     return false;
9950     @@ -1030,7 +1053,7 @@ void wiphy_update_regulatory(struct wiphy *wiphy,
9951     goto out;
9952     for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
9953     if (wiphy->bands[band])
9954     - handle_band(wiphy, band);
9955     + handle_band(wiphy, band, initiator);
9956     }
9957     out:
9958     reg_process_beacons(wiphy);
9959     diff --git a/security/capability.c b/security/capability.c
9960     index c773635..2a5df2b 100644
9961     --- a/security/capability.c
9962     +++ b/security/capability.c
9963     @@ -548,7 +548,7 @@ static int cap_sem_semop(struct sem_array *sma, struct sembuf *sops,
9964     }
9965    
9966     #ifdef CONFIG_SECURITY_NETWORK
9967     -static int cap_unix_stream_connect(struct socket *sock, struct socket *other,
9968     +static int cap_unix_stream_connect(struct sock *sock, struct sock *other,
9969     struct sock *newsk)
9970     {
9971     return 0;
9972     diff --git a/security/security.c b/security/security.c
9973     index 1b798d3..e5fb07a 100644
9974     --- a/security/security.c
9975     +++ b/security/security.c
9976     @@ -977,8 +977,7 @@ EXPORT_SYMBOL(security_inode_getsecctx);
9977    
9978     #ifdef CONFIG_SECURITY_NETWORK
9979    
9980     -int security_unix_stream_connect(struct socket *sock, struct socket *other,
9981     - struct sock *newsk)
9982     +int security_unix_stream_connect(struct sock *sock, struct sock *other, struct sock *newsk)
9983     {
9984     return security_ops->unix_stream_connect(sock, other, newsk);
9985     }
9986     diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
9987     index 65fa8bf..11d5c47 100644
9988     --- a/security/selinux/hooks.c
9989     +++ b/security/selinux/hooks.c
9990     @@ -2525,7 +2525,10 @@ static int selinux_inode_init_security(struct inode *inode, struct inode *dir,
9991     sid = tsec->sid;
9992     newsid = tsec->create_sid;
9993    
9994     - if (!newsid || !(sbsec->flags & SE_SBLABELSUPP)) {
9995     + if ((sbsec->flags & SE_SBINITIALIZED) &&
9996     + (sbsec->behavior == SECURITY_FS_USE_MNTPOINT))
9997     + newsid = sbsec->mntpoint_sid;
9998     + else if (!newsid || !(sbsec->flags & SE_SBLABELSUPP)) {
9999     rc = security_transition_sid(sid, dsec->sid,
10000     inode_mode_to_security_class(inode->i_mode),
10001     &newsid);
10002     @@ -3921,18 +3924,18 @@ static int selinux_socket_shutdown(struct socket *sock, int how)
10003     return sock_has_perm(current, sock->sk, SOCKET__SHUTDOWN);
10004     }
10005    
10006     -static int selinux_socket_unix_stream_connect(struct socket *sock,
10007     - struct socket *other,
10008     +static int selinux_socket_unix_stream_connect(struct sock *sock,
10009     + struct sock *other,
10010     struct sock *newsk)
10011     {
10012     - struct sk_security_struct *sksec_sock = sock->sk->sk_security;
10013     - struct sk_security_struct *sksec_other = other->sk->sk_security;
10014     + struct sk_security_struct *sksec_sock = sock->sk_security;
10015     + struct sk_security_struct *sksec_other = other->sk_security;
10016     struct sk_security_struct *sksec_new = newsk->sk_security;
10017     struct common_audit_data ad;
10018     int err;
10019    
10020     COMMON_AUDIT_DATA_INIT(&ad, NET);
10021     - ad.u.net.sk = other->sk;
10022     + ad.u.net.sk = other;
10023    
10024     err = avc_has_perm(sksec_sock->sid, sksec_other->sid,
10025     sksec_other->sclass,
10026     diff --git a/security/selinux/nlmsgtab.c b/security/selinux/nlmsgtab.c
10027     index 75ec0c6..8b02b21 100644
10028     --- a/security/selinux/nlmsgtab.c
10029     +++ b/security/selinux/nlmsgtab.c
10030     @@ -65,6 +65,8 @@ static struct nlmsg_perm nlmsg_route_perms[] =
10031     { RTM_NEWADDRLABEL, NETLINK_ROUTE_SOCKET__NLMSG_WRITE },
10032     { RTM_DELADDRLABEL, NETLINK_ROUTE_SOCKET__NLMSG_WRITE },
10033     { RTM_GETADDRLABEL, NETLINK_ROUTE_SOCKET__NLMSG_READ },
10034     + { RTM_GETDCB, NETLINK_ROUTE_SOCKET__NLMSG_READ },
10035     + { RTM_SETDCB, NETLINK_ROUTE_SOCKET__NLMSG_WRITE },
10036     };
10037    
10038     static struct nlmsg_perm nlmsg_firewall_perms[] =
10039     diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
10040     index 489a85a..ccb71a0 100644
10041     --- a/security/smack/smack_lsm.c
10042     +++ b/security/smack/smack_lsm.c
10043     @@ -2408,22 +2408,22 @@ static int smack_setprocattr(struct task_struct *p, char *name,
10044    
10045     /**
10046     * smack_unix_stream_connect - Smack access on UDS
10047     - * @sock: one socket
10048     - * @other: the other socket
10049     + * @sock: one sock
10050     + * @other: the other sock
10051     * @newsk: unused
10052     *
10053     * Return 0 if a subject with the smack of sock could access
10054     * an object with the smack of other, otherwise an error code
10055     */
10056     -static int smack_unix_stream_connect(struct socket *sock,
10057     - struct socket *other, struct sock *newsk)
10058     +static int smack_unix_stream_connect(struct sock *sock,
10059     + struct sock *other, struct sock *newsk)
10060     {
10061     - struct inode *sp = SOCK_INODE(sock);
10062     - struct inode *op = SOCK_INODE(other);
10063     + struct inode *sp = SOCK_INODE(sock->sk_socket);
10064     + struct inode *op = SOCK_INODE(other->sk_socket);
10065     struct smk_audit_info ad;
10066    
10067     smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_NET);
10068     - smk_ad_setfield_u_net_sk(&ad, other->sk);
10069     + smk_ad_setfield_u_net_sk(&ad, other);
10070     return smk_access(smk_of_inode(sp), smk_of_inode(op),
10071     MAY_READWRITE, &ad);
10072     }
10073     diff --git a/sound/atmel/ac97c.c b/sound/atmel/ac97c.c
10074     index 10c3a87..b310702 100644
10075     --- a/sound/atmel/ac97c.c
10076     +++ b/sound/atmel/ac97c.c
10077     @@ -33,9 +33,12 @@
10078     #include <linux/dw_dmac.h>
10079    
10080     #include <mach/cpu.h>
10081     -#include <mach/hardware.h>
10082     #include <mach/gpio.h>
10083    
10084     +#ifdef CONFIG_ARCH_AT91
10085     +#include <mach/hardware.h>
10086     +#endif
10087     +
10088     #include "ac97c.h"
10089    
10090     enum {
10091     diff --git a/sound/core/hrtimer.c b/sound/core/hrtimer.c
10092     index 7730575..07efa29 100644
10093     --- a/sound/core/hrtimer.c
10094     +++ b/sound/core/hrtimer.c
10095     @@ -45,12 +45,13 @@ static enum hrtimer_restart snd_hrtimer_callback(struct hrtimer *hrt)
10096     {
10097     struct snd_hrtimer *stime = container_of(hrt, struct snd_hrtimer, hrt);
10098     struct snd_timer *t = stime->timer;
10099     + unsigned long oruns;
10100    
10101     if (!atomic_read(&stime->running))
10102     return HRTIMER_NORESTART;
10103    
10104     - hrtimer_forward_now(hrt, ns_to_ktime(t->sticks * resolution));
10105     - snd_timer_interrupt(stime->timer, t->sticks);
10106     + oruns = hrtimer_forward_now(hrt, ns_to_ktime(t->sticks * resolution));
10107     + snd_timer_interrupt(stime->timer, t->sticks * oruns);
10108    
10109     if (!atomic_read(&stime->running))
10110     return HRTIMER_NORESTART;
10111     diff --git a/sound/pci/au88x0/au88x0_pcm.c b/sound/pci/au88x0/au88x0_pcm.c
10112     index b9d2f20..5439d66 100644
10113     --- a/sound/pci/au88x0/au88x0_pcm.c
10114     +++ b/sound/pci/au88x0/au88x0_pcm.c
10115     @@ -42,11 +42,7 @@ static struct snd_pcm_hardware snd_vortex_playback_hw_adb = {
10116     .rate_min = 5000,
10117     .rate_max = 48000,
10118     .channels_min = 1,
10119     -#ifdef CHIP_AU8830
10120     - .channels_max = 4,
10121     -#else
10122     .channels_max = 2,
10123     -#endif
10124     .buffer_bytes_max = 0x10000,
10125     .period_bytes_min = 0x1,
10126     .period_bytes_max = 0x1000,
10127     @@ -115,6 +111,17 @@ static struct snd_pcm_hardware snd_vortex_playback_hw_wt = {
10128     .periods_max = 64,
10129     };
10130     #endif
10131     +#ifdef CHIP_AU8830
10132     +static unsigned int au8830_channels[3] = {
10133     + 1, 2, 4,
10134     +};
10135     +
10136     +static struct snd_pcm_hw_constraint_list hw_constraints_au8830_channels = {
10137     + .count = ARRAY_SIZE(au8830_channels),
10138     + .list = au8830_channels,
10139     + .mask = 0,
10140     +};
10141     +#endif
10142     /* open callback */
10143     static int snd_vortex_pcm_open(struct snd_pcm_substream *substream)
10144     {
10145     @@ -156,6 +163,15 @@ static int snd_vortex_pcm_open(struct snd_pcm_substream *substream)
10146     if (VORTEX_PCM_TYPE(substream->pcm) == VORTEX_PCM_ADB
10147     || VORTEX_PCM_TYPE(substream->pcm) == VORTEX_PCM_I2S)
10148     runtime->hw = snd_vortex_playback_hw_adb;
10149     +#ifdef CHIP_AU8830
10150     + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK &&
10151     + VORTEX_PCM_TYPE(substream->pcm) == VORTEX_PCM_ADB) {
10152     + runtime->hw.channels_max = 4;
10153     + snd_pcm_hw_constraint_list(runtime, 0,
10154     + SNDRV_PCM_HW_PARAM_CHANNELS,
10155     + &hw_constraints_au8830_channels);
10156     + }
10157     +#endif
10158     substream->runtime->private_data = NULL;
10159     }
10160     #ifndef CHIP_AU8810
10161     diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
10162     index 98b6d02..05e5ec8 100644
10163     --- a/sound/pci/hda/hda_codec.c
10164     +++ b/sound/pci/hda/hda_codec.c
10165     @@ -4571,6 +4571,9 @@ int snd_hda_parse_pin_def_config(struct hda_codec *codec,
10166     }
10167     memset(cfg->hp_pins + cfg->hp_outs, 0,
10168     sizeof(hda_nid_t) * (AUTO_CFG_MAX_OUTS - cfg->hp_outs));
10169     + if (!cfg->hp_outs)
10170     + cfg->line_out_type = AUTO_PIN_HP_OUT;
10171     +
10172     }
10173    
10174     /* sort by sequence */
10175     diff --git a/sound/pci/hda/hda_eld.c b/sound/pci/hda/hda_eld.c
10176     index 4a66347..74b0560 100644
10177     --- a/sound/pci/hda/hda_eld.c
10178     +++ b/sound/pci/hda/hda_eld.c
10179     @@ -381,7 +381,7 @@ static void hdmi_show_short_audio_desc(struct cea_sad *a)
10180     snd_print_pcm_rates(a->rates, buf, sizeof(buf));
10181    
10182     if (a->format == AUDIO_CODING_TYPE_LPCM)
10183     - snd_print_pcm_bits(a->sample_bits, buf2 + 8, sizeof(buf2 - 8));
10184     + snd_print_pcm_bits(a->sample_bits, buf2 + 8, sizeof(buf2) - 8);
10185     else if (a->max_bitrate)
10186     snprintf(buf2, sizeof(buf2),
10187     ", max bitrate = %d", a->max_bitrate);
10188     diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
10189     index 76bd58a..5667fb9 100644
10190     --- a/sound/pci/hda/patch_conexant.c
10191     +++ b/sound/pci/hda/patch_conexant.c
10192     @@ -403,10 +403,16 @@ static int conexant_add_jack(struct hda_codec *codec,
10193     struct conexant_spec *spec;
10194     struct conexant_jack *jack;
10195     const char *name;
10196     - int err;
10197     + int i, err;
10198    
10199     spec = codec->spec;
10200     snd_array_init(&spec->jacks, sizeof(*jack), 32);
10201     +
10202     + jack = spec->jacks.list;
10203     + for (i = 0; i < spec->jacks.used; i++, jack++)
10204     + if (jack->nid == nid)
10205     + return 0 ; /* already present */
10206     +
10207     jack = snd_array_new(&spec->jacks);
10208     name = (type == SND_JACK_HEADPHONE) ? "Headphone" : "Mic" ;
10209    
10210     @@ -3097,6 +3103,7 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = {
10211     SND_PCI_QUIRK_MASK(0x1025, 0xff00, 0x0400, "Acer", CXT5066_IDEAPAD),
10212     SND_PCI_QUIRK(0x1028, 0x02d8, "Dell Vostro", CXT5066_DELL_VOSTRO),
10213     SND_PCI_QUIRK(0x1028, 0x02f5, "Dell Vostro 320", CXT5066_IDEAPAD),
10214     + SND_PCI_QUIRK(0x1028, 0x0401, "Dell Vostro 1014", CXT5066_DELL_VOSTRO),
10215     SND_PCI_QUIRK(0x1028, 0x0402, "Dell Vostro", CXT5066_DELL_VOSTRO),
10216     SND_PCI_QUIRK(0x1028, 0x0408, "Dell Inspiron One 19T", CXT5066_IDEAPAD),
10217     SND_PCI_QUIRK(0x103c, 0x360b, "HP G60", CXT5066_HP_LAPTOP),
10218     diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
10219     index 31df774..232833b 100644
10220     --- a/sound/pci/hda/patch_hdmi.c
10221     +++ b/sound/pci/hda/patch_hdmi.c
10222     @@ -31,10 +31,15 @@
10223     #include <linux/init.h>
10224     #include <linux/delay.h>
10225     #include <linux/slab.h>
10226     +#include <linux/moduleparam.h>
10227     #include <sound/core.h>
10228     #include "hda_codec.h"
10229     #include "hda_local.h"
10230    
10231     +static bool static_hdmi_pcm;
10232     +module_param(static_hdmi_pcm, bool, 0644);
10233     +MODULE_PARM_DESC(static_hdmi_pcm, "Don't restrict PCM parameters per ELD info");
10234     +
10235     /*
10236     * The HDMI/DisplayPort configuration can be highly dynamic. A graphics device
10237     * could support two independent pipes, each of them can be connected to one or
10238     @@ -637,6 +642,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, hda_nid_t nid,
10239     hdmi_ai->ver = 0x01;
10240     hdmi_ai->len = 0x0a;
10241     hdmi_ai->CC02_CT47 = channels - 1;
10242     + hdmi_ai->CA = ca;
10243     hdmi_checksum_audio_infoframe(hdmi_ai);
10244     } else if (spec->sink_eld[i].conn_type == 1) { /* DisplayPort */
10245     struct dp_audio_infoframe *dp_ai;
10246     @@ -646,6 +652,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, hda_nid_t nid,
10247     dp_ai->len = 0x1b;
10248     dp_ai->ver = 0x11 << 2;
10249     dp_ai->CC02_CT47 = channels - 1;
10250     + dp_ai->CA = ca;
10251     } else {
10252     snd_printd("HDMI: unknown connection type at pin %d\n",
10253     pin_nid);
10254     @@ -827,7 +834,7 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo,
10255     *codec_pars = *hinfo;
10256    
10257     eld = &spec->sink_eld[idx];
10258     - if (eld->sad_count > 0) {
10259     + if (!static_hdmi_pcm && eld->eld_valid && eld->sad_count > 0) {
10260     hdmi_eld_update_pcm_info(eld, hinfo, codec_pars);
10261     if (hinfo->channels_min > hinfo->channels_max ||
10262     !hinfo->rates || !hinfo->formats)
10263     @@ -1165,11 +1172,53 @@ static int nvhdmi_7x_init(struct hda_codec *codec)
10264     return 0;
10265     }
10266    
10267     +static unsigned int channels_2_6_8[] = {
10268     + 2, 6, 8
10269     +};
10270     +
10271     +static unsigned int channels_2_8[] = {
10272     + 2, 8
10273     +};
10274     +
10275     +static struct snd_pcm_hw_constraint_list hw_constraints_2_6_8_channels = {
10276     + .count = ARRAY_SIZE(channels_2_6_8),
10277     + .list = channels_2_6_8,
10278     + .mask = 0,
10279     +};
10280     +
10281     +static struct snd_pcm_hw_constraint_list hw_constraints_2_8_channels = {
10282     + .count = ARRAY_SIZE(channels_2_8),
10283     + .list = channels_2_8,
10284     + .mask = 0,
10285     +};
10286     +
10287     static int simple_playback_pcm_open(struct hda_pcm_stream *hinfo,
10288     struct hda_codec *codec,
10289     struct snd_pcm_substream *substream)
10290     {
10291     struct hdmi_spec *spec = codec->spec;
10292     + struct snd_pcm_hw_constraint_list *hw_constraints_channels = NULL;
10293     +
10294     + switch (codec->preset->id) {
10295     + case 0x10de0002:
10296     + case 0x10de0003:
10297     + case 0x10de0005:
10298     + case 0x10de0006:
10299     + hw_constraints_channels = &hw_constraints_2_8_channels;
10300     + break;
10301     + case 0x10de0007:
10302     + hw_constraints_channels = &hw_constraints_2_6_8_channels;
10303     + break;
10304     + default:
10305     + break;
10306     + }
10307     +
10308     + if (hw_constraints_channels != NULL) {
10309     + snd_pcm_hw_constraint_list(substream->runtime, 0,
10310     + SNDRV_PCM_HW_PARAM_CHANNELS,
10311     + hw_constraints_channels);
10312     + }
10313     +
10314     return snd_hda_multi_out_dig_open(codec, &spec->multiout);
10315     }
10316    
10317     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
10318     index 552a09e..0bc6e4e 100644
10319     --- a/sound/pci/hda/patch_realtek.c
10320     +++ b/sound/pci/hda/patch_realtek.c
10321     @@ -14824,6 +14824,7 @@ static const struct alc_fixup alc269_fixups[] = {
10322     {0x01, AC_VERB_SET_GPIO_MASK, 0x04},
10323     {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x04},
10324     {0x01, AC_VERB_SET_GPIO_DATA, 0x00},
10325     + {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREFGRD},
10326     { }
10327     }
10328     },
10329     @@ -19379,6 +19380,7 @@ static const struct alc_fixup alc662_fixups[] = {
10330     };
10331    
10332     static struct snd_pci_quirk alc662_fixup_tbl[] = {
10333     + SND_PCI_QUIRK(0x1025, 0x0308, "Acer Aspire 8942G", ALC662_FIXUP_ASPIRE),
10334     SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
10335     SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
10336     SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD),
10337     diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
10338     index f03b2ff..fc16beb 100644
10339     --- a/sound/pci/hda/patch_sigmatel.c
10340     +++ b/sound/pci/hda/patch_sigmatel.c
10341     @@ -3591,7 +3591,7 @@ static int stac_check_auto_mic(struct hda_codec *codec)
10342     if (check_mic_pin(codec, spec->dmic_nids[i],
10343     &fixed, &ext, &dock))
10344     return 0;
10345     - if (!fixed && !ext && !dock)
10346     + if (!fixed || (!ext && !dock))
10347     return 0; /* no input to switch */
10348     if (!(get_wcaps(codec, ext) & AC_WCAP_UNSOL_CAP))
10349     return 0; /* no unsol support */
10350     diff --git a/sound/soc/blackfin/bf5xx-ac97.c b/sound/soc/blackfin/bf5xx-ac97.c
10351     index c5f856e..ffbac26 100644
10352     --- a/sound/soc/blackfin/bf5xx-ac97.c
10353     +++ b/sound/soc/blackfin/bf5xx-ac97.c
10354     @@ -260,9 +260,9 @@ static int bf5xx_ac97_suspend(struct snd_soc_dai *dai)
10355     pr_debug("%s : sport %d\n", __func__, dai->id);
10356     if (!dai->active)
10357     return 0;
10358     - if (dai->capture.active)
10359     + if (dai->capture_active)
10360     sport_rx_stop(sport);
10361     - if (dai->playback.active)
10362     + if (dai->playback_active)
10363     sport_tx_stop(sport);
10364     return 0;
10365     }
10366     diff --git a/sound/soc/blackfin/bf5xx-tdm.c b/sound/soc/blackfin/bf5xx-tdm.c
10367     index 1251239..b2cf239 100644
10368     --- a/sound/soc/blackfin/bf5xx-tdm.c
10369     +++ b/sound/soc/blackfin/bf5xx-tdm.c
10370     @@ -210,7 +210,7 @@ static int bf5xx_tdm_set_channel_map(struct snd_soc_dai *dai,
10371     #ifdef CONFIG_PM
10372     static int bf5xx_tdm_suspend(struct snd_soc_dai *dai)
10373     {
10374     - struct sport_device *sport = dai->private_data;
10375     + struct sport_device *sport = snd_soc_dai_get_drvdata(dai);
10376    
10377     if (!dai->active)
10378     return 0;
10379     diff --git a/sound/soc/codecs/wm8990.c b/sound/soc/codecs/wm8990.c
10380     index 264828e..f007d77 100644
10381     --- a/sound/soc/codecs/wm8990.c
10382     +++ b/sound/soc/codecs/wm8990.c
10383     @@ -1183,7 +1183,7 @@ static int wm8990_set_bias_level(struct snd_soc_codec *codec,
10384     WM8990_VMIDTOG);
10385    
10386     /* Delay to allow output caps to discharge */
10387     - msleep(msecs_to_jiffies(300));
10388     + msleep(300);
10389    
10390     /* Disable VMIDTOG */
10391     snd_soc_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST |
10392     @@ -1195,17 +1195,17 @@ static int wm8990_set_bias_level(struct snd_soc_codec *codec,
10393     /* Enable outputs */
10394     snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1b00);
10395    
10396     - msleep(msecs_to_jiffies(50));
10397     + msleep(50);
10398    
10399     /* Enable VMID at 2x50k */
10400     snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f02);
10401    
10402     - msleep(msecs_to_jiffies(100));
10403     + msleep(100);
10404    
10405     /* Enable VREF */
10406     snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f03);
10407    
10408     - msleep(msecs_to_jiffies(600));
10409     + msleep(600);
10410    
10411     /* Enable BUFIOEN */
10412     snd_soc_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST |
10413     @@ -1250,7 +1250,7 @@ static int wm8990_set_bias_level(struct snd_soc_codec *codec,
10414     /* Disable VMID */
10415     snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f01);
10416    
10417     - msleep(msecs_to_jiffies(300));
10418     + msleep(300);
10419    
10420     /* Enable all output discharge bits */
10421     snd_soc_write(codec, WM8990_ANTIPOP1, WM8990_DIS_LLINE |
10422     diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
10423     index 4d3e6f1..f451a2c 100644
10424     --- a/sound/soc/codecs/wm8994.c
10425     +++ b/sound/soc/codecs/wm8994.c
10426     @@ -2536,18 +2536,18 @@ SND_SOC_DAPM_SUPPLY("DSPINTCLK", WM8994_CLOCKING_1, 1, 0, NULL, 0),
10427     SND_SOC_DAPM_SUPPLY("AIF1CLK", WM8994_AIF1_CLOCKING_1, 0, 0, NULL, 0),
10428     SND_SOC_DAPM_SUPPLY("AIF2CLK", WM8994_AIF2_CLOCKING_1, 0, 0, NULL, 0),
10429    
10430     -SND_SOC_DAPM_AIF_OUT("AIF1ADC1L", "AIF1 Capture",
10431     +SND_SOC_DAPM_AIF_OUT("AIF1ADC1L", NULL,
10432     0, WM8994_POWER_MANAGEMENT_4, 9, 0),
10433     -SND_SOC_DAPM_AIF_OUT("AIF1ADC1R", "AIF1 Capture",
10434     +SND_SOC_DAPM_AIF_OUT("AIF1ADC1R", NULL,
10435     0, WM8994_POWER_MANAGEMENT_4, 8, 0),
10436     SND_SOC_DAPM_AIF_IN("AIF1DAC1L", NULL, 0,
10437     WM8994_POWER_MANAGEMENT_5, 9, 0),
10438     SND_SOC_DAPM_AIF_IN("AIF1DAC1R", NULL, 0,
10439     WM8994_POWER_MANAGEMENT_5, 8, 0),
10440    
10441     -SND_SOC_DAPM_AIF_OUT("AIF1ADC2L", "AIF1 Capture",
10442     +SND_SOC_DAPM_AIF_OUT("AIF1ADC2L", NULL,
10443     0, WM8994_POWER_MANAGEMENT_4, 11, 0),
10444     -SND_SOC_DAPM_AIF_OUT("AIF1ADC2R", "AIF1 Capture",
10445     +SND_SOC_DAPM_AIF_OUT("AIF1ADC2R", NULL,
10446     0, WM8994_POWER_MANAGEMENT_4, 10, 0),
10447     SND_SOC_DAPM_AIF_IN("AIF1DAC2L", NULL, 0,
10448     WM8994_POWER_MANAGEMENT_5, 11, 0),
10449     @@ -2588,6 +2588,7 @@ SND_SOC_DAPM_AIF_IN("AIF2DACR", NULL, 0,
10450    
10451     SND_SOC_DAPM_AIF_IN("AIF1DACDAT", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0),
10452     SND_SOC_DAPM_AIF_IN("AIF2DACDAT", "AIF2 Playback", 0, SND_SOC_NOPM, 0, 0),
10453     +SND_SOC_DAPM_AIF_OUT("AIF1ADCDAT", "AIF1 Capture", 0, SND_SOC_NOPM, 0, 0),
10454     SND_SOC_DAPM_AIF_OUT("AIF2ADCDAT", "AIF2 Capture", 0, SND_SOC_NOPM, 0, 0),
10455    
10456     SND_SOC_DAPM_MUX("AIF1DAC Mux", SND_SOC_NOPM, 0, 0, &aif1dac_mux),
10457     @@ -2783,6 +2784,11 @@ static const struct snd_soc_dapm_route intercon[] = {
10458     { "AIF2DAC2R Mixer", "Left Sidetone Switch", "Left Sidetone" },
10459     { "AIF2DAC2R Mixer", "Right Sidetone Switch", "Right Sidetone" },
10460    
10461     + { "AIF1ADCDAT", NULL, "AIF1ADC1L" },
10462     + { "AIF1ADCDAT", NULL, "AIF1ADC1R" },
10463     + { "AIF1ADCDAT", NULL, "AIF1ADC2L" },
10464     + { "AIF1ADCDAT", NULL, "AIF1ADC2R" },
10465     +
10466     { "AIF2ADCDAT", NULL, "AIF2ADC Mux" },
10467    
10468     /* AIF3 output */
10469     @@ -2930,6 +2936,7 @@ static int _wm8994_set_fll(struct snd_soc_codec *codec, int id, int src,
10470     /* Allow no source specification when stopping */
10471     if (freq_out)
10472     return -EINVAL;
10473     + src = wm8994->fll[id].src;
10474     break;
10475     case WM8994_FLL_SRC_MCLK1:
10476     case WM8994_FLL_SRC_MCLK2:
10477     @@ -3512,7 +3519,7 @@ static int wm8994_set_tristate(struct snd_soc_dai *codec_dai, int tristate)
10478     else
10479     val = 0;
10480    
10481     - return snd_soc_update_bits(codec, reg, mask, reg);
10482     + return snd_soc_update_bits(codec, reg, mask, val);
10483     }
10484    
10485     #define WM8994_RATES SNDRV_PCM_RATE_8000_96000
10486     diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c
10487     index 0e24092..feacf18 100644
10488     --- a/sound/soc/codecs/wm_hubs.c
10489     +++ b/sound/soc/codecs/wm_hubs.c
10490     @@ -92,6 +92,7 @@ static void wait_for_dc_servo(struct snd_soc_codec *codec, unsigned int op)
10491     static void calibrate_dc_servo(struct snd_soc_codec *codec)
10492     {
10493     struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec);
10494     + s8 offset;
10495     u16 reg, reg_l, reg_r, dcs_cfg;
10496    
10497     /* Set for 32 series updates */
10498     @@ -130,16 +131,14 @@ static void calibrate_dc_servo(struct snd_soc_codec *codec)
10499     dev_dbg(codec->dev, "DCS input: %x %x\n", reg_l, reg_r);
10500    
10501     /* HPOUT1L */
10502     - if (reg_l + hubs->dcs_codes > 0 &&
10503     - reg_l + hubs->dcs_codes < 0xff)
10504     - reg_l += hubs->dcs_codes;
10505     - dcs_cfg = reg_l << WM8993_DCS_DAC_WR_VAL_1_SHIFT;
10506     + offset = reg_l;
10507     + offset += hubs->dcs_codes;
10508     + dcs_cfg = (u8)offset << WM8993_DCS_DAC_WR_VAL_1_SHIFT;
10509    
10510     /* HPOUT1R */
10511     - if (reg_r + hubs->dcs_codes > 0 &&
10512     - reg_r + hubs->dcs_codes < 0xff)
10513     - reg_r += hubs->dcs_codes;
10514     - dcs_cfg |= reg_r;
10515     + offset = reg_r;
10516     + offset += hubs->dcs_codes;
10517     + dcs_cfg |= (u8)offset;
10518    
10519     dev_dbg(codec->dev, "DCS result: %x\n", dcs_cfg);
10520    
10521     diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c
10522     index bc9e6b0..07db881 100644
10523     --- a/sound/soc/davinci/davinci-evm.c
10524     +++ b/sound/soc/davinci/davinci-evm.c
10525     @@ -224,7 +224,7 @@ static struct snd_soc_dai_link da8xx_evm_dai = {
10526     .stream_name = "AIC3X",
10527     .cpu_dai_name= "davinci-mcasp.0",
10528     .codec_dai_name = "tlv320aic3x-hifi",
10529     - .codec_name = "tlv320aic3x-codec.0-001a",
10530     + .codec_name = "tlv320aic3x-codec.1-0018",
10531     .platform_name = "davinci-pcm-audio",
10532     .init = evm_aic3x_init,
10533     .ops = &evm_ops,
10534     diff --git a/sound/soc/pxa/corgi.c b/sound/soc/pxa/corgi.c
10535     index f451acd..135d903 100644
10536     --- a/sound/soc/pxa/corgi.c
10537     +++ b/sound/soc/pxa/corgi.c
10538     @@ -305,10 +305,10 @@ static int corgi_wm8731_init(struct snd_soc_pcm_runtime *rtd)
10539     static struct snd_soc_dai_link corgi_dai = {
10540     .name = "WM8731",
10541     .stream_name = "WM8731",
10542     - .cpu_dai_name = "pxa-is2-dai",
10543     + .cpu_dai_name = "pxa2xx-i2s",
10544     .codec_dai_name = "wm8731-hifi",
10545     .platform_name = "pxa-pcm-audio",
10546     - .codec_name = "wm8731-codec-0.001a",
10547     + .codec_name = "wm8731-codec-0.001b",
10548     .init = corgi_wm8731_init,
10549     .ops = &corgi_ops,
10550     };
10551     diff --git a/sound/soc/pxa/poodle.c b/sound/soc/pxa/poodle.c
10552     index 84edd03..0eebe11 100644
10553     --- a/sound/soc/pxa/poodle.c
10554     +++ b/sound/soc/pxa/poodle.c
10555     @@ -274,7 +274,7 @@ static struct snd_soc_dai_link poodle_dai = {
10556     .cpu_dai_name = "pxa2xx-i2s",
10557     .codec_dai_name = "wm8731-hifi",
10558     .platform_name = "pxa-pcm-audio",
10559     - .codec_name = "wm8731-codec.0-001a",
10560     + .codec_name = "wm8731-codec.0-001b",
10561     .init = poodle_wm8731_init,
10562     .ops = &poodle_ops,
10563     };
10564     diff --git a/sound/soc/pxa/spitz.c b/sound/soc/pxa/spitz.c
10565     index 0b30d7d..7604471 100644
10566     --- a/sound/soc/pxa/spitz.c
10567     +++ b/sound/soc/pxa/spitz.c
10568     @@ -313,10 +313,10 @@ static int spitz_wm8750_init(struct snd_soc_pcm_runtime *rtd)
10569     static struct snd_soc_dai_link spitz_dai = {
10570     .name = "wm8750",
10571     .stream_name = "WM8750",
10572     - .cpu_dai_name = "pxa-is2",
10573     + .cpu_dai_name = "pxa2xx-i2s",
10574     .codec_dai_name = "wm8750-hifi",
10575     .platform_name = "pxa-pcm-audio",
10576     - .codec_name = "wm8750-codec.0-001a",
10577     + .codec_name = "wm8750-codec.0-001b",
10578     .init = spitz_wm8750_init,
10579     .ops = &spitz_ops,
10580     };
10581     diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
10582     index 85b7d54..757ba59 100644
10583     --- a/sound/soc/soc-core.c
10584     +++ b/sound/soc/soc-core.c
10585     @@ -1623,7 +1623,7 @@ static void snd_soc_instantiate_card(struct snd_soc_card *card)
10586     if (ret < 0) {
10587     printk(KERN_ERR "asoc: failed to register AC97 %s\n", card->name);
10588     while (--i >= 0)
10589     - soc_unregister_ac97_dai_link(&card->rtd[i]);
10590     + soc_unregister_ac97_dai_link(card->rtd[i].codec);
10591     goto probe_dai_err;
10592     }
10593     }
10594     diff --git a/sound/usb/midi.c b/sound/usb/midi.c
10595     index 25bce7e..b1f9ec9 100644
10596     --- a/sound/usb/midi.c
10597     +++ b/sound/usb/midi.c
10598     @@ -850,8 +850,8 @@ static void snd_usbmidi_us122l_output(struct snd_usb_midi_out_endpoint *ep,
10599     return;
10600     }
10601    
10602     - memset(urb->transfer_buffer + count, 0xFD, 9 - count);
10603     - urb->transfer_buffer_length = count;
10604     + memset(urb->transfer_buffer + count, 0xFD, ep->max_transfer - count);
10605     + urb->transfer_buffer_length = ep->max_transfer;
10606     }
10607    
10608     static struct usb_protocol_ops snd_usbmidi_122l_ops = {
10609     @@ -1295,6 +1295,13 @@ static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi* umidi,
10610     case USB_ID(0x1a86, 0x752d): /* QinHeng CH345 "USB2.0-MIDI" */
10611     ep->max_transfer = 4;
10612     break;
10613     + /*
10614     + * Some devices only work with 9 bytes packet size:
10615     + */
10616     + case USB_ID(0x0644, 0x800E): /* Tascam US-122L */
10617     + case USB_ID(0x0644, 0x800F): /* Tascam US-144 */
10618     + ep->max_transfer = 9;
10619     + break;
10620     }
10621     for (i = 0; i < OUTPUT_URBS; ++i) {
10622     buffer = usb_alloc_coherent(umidi->dev,
10623     diff --git a/sound/usb/usx2y/us122l.c b/sound/usb/usx2y/us122l.c
10624     index 6ef68e4..084e6fc 100644
10625     --- a/sound/usb/usx2y/us122l.c
10626     +++ b/sound/usb/usx2y/us122l.c
10627     @@ -273,29 +273,26 @@ static unsigned int usb_stream_hwdep_poll(struct snd_hwdep *hw,
10628     struct file *file, poll_table *wait)
10629     {
10630     struct us122l *us122l = hw->private_data;
10631     - struct usb_stream *s = us122l->sk.s;
10632     unsigned *polled;
10633     unsigned int mask;
10634    
10635     poll_wait(file, &us122l->sk.sleep, wait);
10636    
10637     - switch (s->state) {
10638     - case usb_stream_ready:
10639     - if (us122l->first == file)
10640     - polled = &s->periods_polled;
10641     - else
10642     - polled = &us122l->second_periods_polled;
10643     - if (*polled != s->periods_done) {
10644     - *polled = s->periods_done;
10645     - mask = POLLIN | POLLOUT | POLLWRNORM;
10646     - break;
10647     + mask = POLLIN | POLLOUT | POLLWRNORM | POLLERR;
10648     + if (mutex_trylock(&us122l->mutex)) {
10649     + struct usb_stream *s = us122l->sk.s;
10650     + if (s && s->state == usb_stream_ready) {
10651     + if (us122l->first == file)
10652     + polled = &s->periods_polled;
10653     + else
10654     + polled = &us122l->second_periods_polled;
10655     + if (*polled != s->periods_done) {
10656     + *polled = s->periods_done;
10657     + mask = POLLIN | POLLOUT | POLLWRNORM;
10658     + } else
10659     + mask = 0;
10660     }
10661     - /* Fall through */
10662     - mask = 0;
10663     - break;
10664     - default:
10665     - mask = POLLIN | POLLOUT | POLLWRNORM | POLLERR;
10666     - break;
10667     + mutex_unlock(&us122l->mutex);
10668     }
10669     return mask;
10670     }
10671     @@ -381,6 +378,7 @@ static int usb_stream_hwdep_ioctl(struct snd_hwdep *hw, struct file *file,
10672     {
10673     struct usb_stream_config *cfg;
10674     struct us122l *us122l = hw->private_data;
10675     + struct usb_stream *s;
10676     unsigned min_period_frames;
10677     int err = 0;
10678     bool high_speed;
10679     @@ -426,18 +424,18 @@ static int usb_stream_hwdep_ioctl(struct snd_hwdep *hw, struct file *file,
10680     snd_power_wait(hw->card, SNDRV_CTL_POWER_D0);
10681    
10682     mutex_lock(&us122l->mutex);
10683     + s = us122l->sk.s;
10684     if (!us122l->master)
10685     us122l->master = file;
10686     else if (us122l->master != file) {
10687     - if (memcmp(cfg, &us122l->sk.s->cfg, sizeof(*cfg))) {
10688     + if (!s || memcmp(cfg, &s->cfg, sizeof(*cfg))) {
10689     err = -EIO;
10690     goto unlock;
10691     }
10692     us122l->slave = file;
10693     }
10694     - if (!us122l->sk.s ||
10695     - memcmp(cfg, &us122l->sk.s->cfg, sizeof(*cfg)) ||
10696     - us122l->sk.s->state == usb_stream_xrun) {
10697     + if (!s || memcmp(cfg, &s->cfg, sizeof(*cfg)) ||
10698     + s->state == usb_stream_xrun) {
10699     us122l_stop(us122l);
10700     if (!us122l_start(us122l, cfg->sample_rate, cfg->period_frames))
10701     err = -EIO;
10702     @@ -448,6 +446,7 @@ unlock:
10703     mutex_unlock(&us122l->mutex);
10704     free:
10705     kfree(cfg);
10706     + wake_up_all(&us122l->sk.sleep);
10707     return err;
10708     }
10709