Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.10/0155-3.10.56-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2643 - (hide annotations) (download)
Tue Jul 21 16:20:20 2015 UTC (8 years, 10 months ago) by niro
File size: 152756 byte(s)
-linux-3.10.56
1 niro 2643 diff --git a/Makefile b/Makefile
2     index 6141df04fcb5..03bd927522f7 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 10
8     -SUBLEVEL = 55
9     +SUBLEVEL = 56
10     EXTRAVERSION =
11     NAME = TOSSUG Baby Fish
12    
13     diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
14     index 9ce8ba1a1433..adb9aa5c88c7 100644
15     --- a/arch/arm/configs/multi_v7_defconfig
16     +++ b/arch/arm/configs/multi_v7_defconfig
17     @@ -48,6 +48,8 @@ CONFIG_SERIAL_SIRFSOC=y
18     CONFIG_SERIAL_SIRFSOC_CONSOLE=y
19     CONFIG_SERIAL_VT8500=y
20     CONFIG_SERIAL_VT8500_CONSOLE=y
21     +CONFIG_SERIAL_XILINX_PS_UART=y
22     +CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
23     CONFIG_IPMI_HANDLER=y
24     CONFIG_IPMI_SI=y
25     CONFIG_I2C=y
26     diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
27     index bc5bc0a97131..4bc816a74a2e 100644
28     --- a/arch/arm/kernel/entry-common.S
29     +++ b/arch/arm/kernel/entry-common.S
30     @@ -362,6 +362,16 @@ ENTRY(vector_swi)
31     str r0, [sp, #S_OLD_R0] @ Save OLD_R0
32     zero_fp
33    
34     +#ifdef CONFIG_ALIGNMENT_TRAP
35     + ldr ip, __cr_alignment
36     + ldr ip, [ip]
37     + mcr p15, 0, ip, c1, c0 @ update control register
38     +#endif
39     +
40     + enable_irq
41     + ct_user_exit
42     + get_thread_info tsk
43     +
44     /*
45     * Get the system call number.
46     */
47     @@ -375,9 +385,9 @@ ENTRY(vector_swi)
48     #ifdef CONFIG_ARM_THUMB
49     tst r8, #PSR_T_BIT
50     movne r10, #0 @ no thumb OABI emulation
51     - ldreq r10, [lr, #-4] @ get SWI instruction
52     + USER( ldreq r10, [lr, #-4] ) @ get SWI instruction
53     #else
54     - ldr r10, [lr, #-4] @ get SWI instruction
55     + USER( ldr r10, [lr, #-4] ) @ get SWI instruction
56     #endif
57     #ifdef CONFIG_CPU_ENDIAN_BE8
58     rev r10, r10 @ little endian instruction
59     @@ -392,22 +402,13 @@ ENTRY(vector_swi)
60     /* Legacy ABI only, possibly thumb mode. */
61     tst r8, #PSR_T_BIT @ this is SPSR from save_user_regs
62     addne scno, r7, #__NR_SYSCALL_BASE @ put OS number in
63     - ldreq scno, [lr, #-4]
64     + USER( ldreq scno, [lr, #-4] )
65    
66     #else
67     /* Legacy ABI only. */
68     - ldr scno, [lr, #-4] @ get SWI instruction
69     + USER( ldr scno, [lr, #-4] ) @ get SWI instruction
70     #endif
71    
72     -#ifdef CONFIG_ALIGNMENT_TRAP
73     - ldr ip, __cr_alignment
74     - ldr ip, [ip]
75     - mcr p15, 0, ip, c1, c0 @ update control register
76     -#endif
77     - enable_irq
78     - ct_user_exit
79     -
80     - get_thread_info tsk
81     adr tbl, sys_call_table @ load syscall table pointer
82    
83     #if defined(CONFIG_OABI_COMPAT)
84     @@ -442,6 +443,21 @@ local_restart:
85     eor r0, scno, #__NR_SYSCALL_BASE @ put OS number back
86     bcs arm_syscall
87     b sys_ni_syscall @ not private func
88     +
89     +#if defined(CONFIG_OABI_COMPAT) || !defined(CONFIG_AEABI)
90     + /*
91     + * We failed to handle a fault trying to access the page
92     + * containing the swi instruction, but we're not really in a
93     + * position to return -EFAULT. Instead, return back to the
94     + * instruction and re-enter the user fault handling path trying
95     + * to page it in. This will likely result in sending SEGV to the
96     + * current task.
97     + */
98     +9001:
99     + sub lr, lr, #4
100     + str lr, [sp, #S_PC]
101     + b ret_fast_syscall
102     +#endif
103     ENDPROC(vector_swi)
104    
105     /*
106     diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c
107     index 9723d17b8f38..1e782bdeee49 100644
108     --- a/arch/arm/kernel/irq.c
109     +++ b/arch/arm/kernel/irq.c
110     @@ -163,7 +163,7 @@ static bool migrate_one_irq(struct irq_desc *desc)
111     c = irq_data_get_irq_chip(d);
112     if (!c->irq_set_affinity)
113     pr_debug("IRQ%u: unable to set affinity\n", d->irq);
114     - else if (c->irq_set_affinity(d, affinity, true) == IRQ_SET_MASK_OK && ret)
115     + else if (c->irq_set_affinity(d, affinity, false) == IRQ_SET_MASK_OK && ret)
116     cpumask_copy(d->affinity, affinity);
117    
118     return ret;
119     diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c
120     index c3ef920823b6..70ae735dec53 100644
121     --- a/arch/arm/kernel/machine_kexec.c
122     +++ b/arch/arm/kernel/machine_kexec.c
123     @@ -14,10 +14,11 @@
124     #include <asm/pgalloc.h>
125     #include <asm/mmu_context.h>
126     #include <asm/cacheflush.h>
127     +#include <asm/fncpy.h>
128     #include <asm/mach-types.h>
129     #include <asm/system_misc.h>
130    
131     -extern const unsigned char relocate_new_kernel[];
132     +extern void relocate_new_kernel(void);
133     extern const unsigned int relocate_new_kernel_size;
134    
135     extern unsigned long kexec_start_address;
136     @@ -133,6 +134,8 @@ void machine_kexec(struct kimage *image)
137     {
138     unsigned long page_list;
139     unsigned long reboot_code_buffer_phys;
140     + unsigned long reboot_entry = (unsigned long)relocate_new_kernel;
141     + unsigned long reboot_entry_phys;
142     void *reboot_code_buffer;
143    
144     if (num_online_cpus() > 1) {
145     @@ -156,18 +159,18 @@ void machine_kexec(struct kimage *image)
146    
147    
148     /* copy our kernel relocation code to the control code page */
149     - memcpy(reboot_code_buffer,
150     - relocate_new_kernel, relocate_new_kernel_size);
151     + reboot_entry = fncpy(reboot_code_buffer,
152     + reboot_entry,
153     + relocate_new_kernel_size);
154     + reboot_entry_phys = (unsigned long)reboot_entry +
155     + (reboot_code_buffer_phys - (unsigned long)reboot_code_buffer);
156    
157     -
158     - flush_icache_range((unsigned long) reboot_code_buffer,
159     - (unsigned long) reboot_code_buffer + KEXEC_CONTROL_PAGE_SIZE);
160     printk(KERN_INFO "Bye!\n");
161    
162     if (kexec_reinit)
163     kexec_reinit();
164    
165     - soft_restart(reboot_code_buffer_phys);
166     + soft_restart(reboot_entry_phys);
167     }
168    
169     void arch_crash_save_vmcoreinfo(void)
170     diff --git a/arch/arm/kernel/relocate_kernel.S b/arch/arm/kernel/relocate_kernel.S
171     index d0cdedf4864d..95858966d84e 100644
172     --- a/arch/arm/kernel/relocate_kernel.S
173     +++ b/arch/arm/kernel/relocate_kernel.S
174     @@ -2,10 +2,12 @@
175     * relocate_kernel.S - put the kernel image in place to boot
176     */
177    
178     +#include <linux/linkage.h>
179     #include <asm/kexec.h>
180    
181     - .globl relocate_new_kernel
182     -relocate_new_kernel:
183     + .align 3 /* not needed for this code, but keeps fncpy() happy */
184     +
185     +ENTRY(relocate_new_kernel)
186    
187     ldr r0,kexec_indirection_page
188     ldr r1,kexec_start_address
189     @@ -79,6 +81,8 @@ kexec_mach_type:
190     kexec_boot_atags:
191     .long 0x0
192    
193     +ENDPROC(relocate_new_kernel)
194     +
195     relocate_new_kernel_end:
196    
197     .globl relocate_new_kernel_size
198     diff --git a/arch/arm/mm/abort-ev6.S b/arch/arm/mm/abort-ev6.S
199     index 80741992a9fc..5d777a567c35 100644
200     --- a/arch/arm/mm/abort-ev6.S
201     +++ b/arch/arm/mm/abort-ev6.S
202     @@ -17,12 +17,6 @@
203     */
204     .align 5
205     ENTRY(v6_early_abort)
206     -#ifdef CONFIG_CPU_V6
207     - sub r1, sp, #4 @ Get unused stack location
208     - strex r0, r1, [r1] @ Clear the exclusive monitor
209     -#elif defined(CONFIG_CPU_32v6K)
210     - clrex
211     -#endif
212     mrc p15, 0, r1, c5, c0, 0 @ get FSR
213     mrc p15, 0, r0, c6, c0, 0 @ get FAR
214     /*
215     diff --git a/arch/arm/mm/abort-ev7.S b/arch/arm/mm/abort-ev7.S
216     index 703375277ba6..4812ad054214 100644
217     --- a/arch/arm/mm/abort-ev7.S
218     +++ b/arch/arm/mm/abort-ev7.S
219     @@ -13,12 +13,6 @@
220     */
221     .align 5
222     ENTRY(v7_early_abort)
223     - /*
224     - * The effect of data aborts on on the exclusive access monitor are
225     - * UNPREDICTABLE. Do a CLREX to clear the state
226     - */
227     - clrex
228     -
229     mrc p15, 0, r1, c5, c0, 0 @ get FSR
230     mrc p15, 0, r0, c6, c0, 0 @ get FAR
231    
232     diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c
233     index 6f4585b89078..1fe0bf5c7375 100644
234     --- a/arch/arm/mm/alignment.c
235     +++ b/arch/arm/mm/alignment.c
236     @@ -39,6 +39,7 @@
237     * This code is not portable to processors with late data abort handling.
238     */
239     #define CODING_BITS(i) (i & 0x0e000000)
240     +#define COND_BITS(i) (i & 0xf0000000)
241    
242     #define LDST_I_BIT(i) (i & (1 << 26)) /* Immediate constant */
243     #define LDST_P_BIT(i) (i & (1 << 24)) /* Preindex */
244     @@ -812,6 +813,8 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
245     break;
246    
247     case 0x04000000: /* ldr or str immediate */
248     + if (COND_BITS(instr) == 0xf0000000) /* NEON VLDn, VSTn */
249     + goto bad;
250     offset.un = OFFSET_BITS(instr);
251     handler = do_alignment_ldrstr;
252     break;
253     diff --git a/arch/arm64/include/asm/hw_breakpoint.h b/arch/arm64/include/asm/hw_breakpoint.h
254     index d064047612b1..52b484b6aa1a 100644
255     --- a/arch/arm64/include/asm/hw_breakpoint.h
256     +++ b/arch/arm64/include/asm/hw_breakpoint.h
257     @@ -79,7 +79,6 @@ static inline void decode_ctrl_reg(u32 reg,
258     */
259     #define ARM_MAX_BRP 16
260     #define ARM_MAX_WRP 16
261     -#define ARM_MAX_HBP_SLOTS (ARM_MAX_BRP + ARM_MAX_WRP)
262    
263     /* Virtual debug register bases. */
264     #define AARCH64_DBG_REG_BVR 0
265     diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
266     index 46f02c3b5015..0860fc3077fc 100644
267     --- a/arch/arm64/kernel/process.c
268     +++ b/arch/arm64/kernel/process.c
269     @@ -172,9 +172,27 @@ void exit_thread(void)
270     {
271     }
272    
273     +static void tls_thread_flush(void)
274     +{
275     + asm ("msr tpidr_el0, xzr");
276     +
277     + if (is_compat_task()) {
278     + current->thread.tp_value = 0;
279     +
280     + /*
281     + * We need to ensure ordering between the shadow state and the
282     + * hardware state, so that we don't corrupt the hardware state
283     + * with a stale shadow state during context switch.
284     + */
285     + barrier();
286     + asm ("msr tpidrro_el0, xzr");
287     + }
288     +}
289     +
290     void flush_thread(void)
291     {
292     fpsimd_flush_thread();
293     + tls_thread_flush();
294     flush_ptrace_hw_breakpoint(current);
295     }
296    
297     diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c
298     index 85536688f753..33a74fc45959 100644
299     --- a/arch/arm64/kernel/ptrace.c
300     +++ b/arch/arm64/kernel/ptrace.c
301     @@ -103,7 +103,8 @@ static void ptrace_hbptriggered(struct perf_event *bp,
302     break;
303     }
304     }
305     - for (i = ARM_MAX_BRP; i < ARM_MAX_HBP_SLOTS && !bp; ++i) {
306     +
307     + for (i = 0; i < ARM_MAX_WRP; ++i) {
308     if (current->thread.debug.hbp_watch[i] == bp) {
309     info.si_errno = -((i << 1) + 1);
310     break;
311     diff --git a/arch/arm64/kernel/sys_compat.c b/arch/arm64/kernel/sys_compat.c
312     index 26e9c4eeaba8..78039927c807 100644
313     --- a/arch/arm64/kernel/sys_compat.c
314     +++ b/arch/arm64/kernel/sys_compat.c
315     @@ -79,6 +79,12 @@ long compat_arm_syscall(struct pt_regs *regs)
316    
317     case __ARM_NR_compat_set_tls:
318     current->thread.tp_value = regs->regs[0];
319     +
320     + /*
321     + * Protect against register corruption from context switch.
322     + * See comment in tls_thread_flush.
323     + */
324     + barrier();
325     asm ("msr tpidrro_el0, %0" : : "r" (regs->regs[0]));
326     return 0;
327    
328     diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c
329     index 2c9573098c0d..d498a1f9bccf 100644
330     --- a/arch/mips/boot/compressed/decompress.c
331     +++ b/arch/mips/boot/compressed/decompress.c
332     @@ -13,6 +13,7 @@
333    
334     #include <linux/types.h>
335     #include <linux/kernel.h>
336     +#include <linux/string.h>
337    
338     #include <asm/addrspace.h>
339    
340     diff --git a/arch/mips/kernel/mcount.S b/arch/mips/kernel/mcount.S
341     index 33d067148e61..3efbf0b29c1b 100644
342     --- a/arch/mips/kernel/mcount.S
343     +++ b/arch/mips/kernel/mcount.S
344     @@ -123,7 +123,11 @@ NESTED(_mcount, PT_SIZE, ra)
345     nop
346     #endif
347     b ftrace_stub
348     +#ifdef CONFIG_32BIT
349     + addiu sp, sp, 8
350     +#else
351     nop
352     +#endif
353    
354     static_trace:
355     MCOUNT_SAVE_REGS
356     @@ -133,6 +137,9 @@ static_trace:
357     move a1, AT /* arg2: parent's return address */
358    
359     MCOUNT_RESTORE_REGS
360     +#ifdef CONFIG_32BIT
361     + addiu sp, sp, 8
362     +#endif
363     .globl ftrace_stub
364     ftrace_stub:
365     RETURN_BACK
366     @@ -181,6 +188,11 @@ NESTED(ftrace_graph_caller, PT_SIZE, ra)
367     jal prepare_ftrace_return
368     nop
369     MCOUNT_RESTORE_REGS
370     +#ifndef CONFIG_DYNAMIC_FTRACE
371     +#ifdef CONFIG_32BIT
372     + addiu sp, sp, 8
373     +#endif
374     +#endif
375     RETURN_BACK
376     END(ftrace_graph_caller)
377    
378     diff --git a/arch/parisc/Makefile b/arch/parisc/Makefile
379     index 96ec3982be8d..94607bfa273d 100644
380     --- a/arch/parisc/Makefile
381     +++ b/arch/parisc/Makefile
382     @@ -46,7 +46,12 @@ cflags-y := -pipe
383    
384     # These flags should be implied by an hppa-linux configuration, but they
385     # are not in gcc 3.2.
386     -cflags-y += -mno-space-regs -mfast-indirect-calls
387     +cflags-y += -mno-space-regs
388     +
389     +# -mfast-indirect-calls is only relevant for 32-bit kernels.
390     +ifndef CONFIG_64BIT
391     +cflags-y += -mfast-indirect-calls
392     +endif
393    
394     # Currently we save and restore fpregs on all kernel entry/interruption paths.
395     # If that gets optimized, we might need to disable the use of fpregs in the
396     diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h
397     index becc08e6a65c..637c97fcbeb5 100644
398     --- a/arch/powerpc/include/asm/ptrace.h
399     +++ b/arch/powerpc/include/asm/ptrace.h
400     @@ -35,6 +35,12 @@
401     STACK_FRAME_OVERHEAD + 288)
402     #define STACK_FRAME_MARKER 12
403    
404     +#if defined(_CALL_ELF) && _CALL_ELF == 2
405     +#define STACK_FRAME_MIN_SIZE 32
406     +#else
407     +#define STACK_FRAME_MIN_SIZE STACK_FRAME_OVERHEAD
408     +#endif
409     +
410     /* Size of dummy stack frame allocated when calling signal handler. */
411     #define __SIGNAL_FRAMESIZE 128
412     #define __SIGNAL_FRAMESIZE32 64
413     @@ -46,6 +52,7 @@
414     #define STACK_FRAME_REGS_MARKER ASM_CONST(0x72656773)
415     #define STACK_INT_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD)
416     #define STACK_FRAME_MARKER 2
417     +#define STACK_FRAME_MIN_SIZE STACK_FRAME_OVERHEAD
418    
419     /* Size of stack frame allocated when calling signal handler. */
420     #define __SIGNAL_FRAMESIZE 64
421     diff --git a/arch/powerpc/perf/callchain.c b/arch/powerpc/perf/callchain.c
422     index 74d1e780748b..2396dda282cd 100644
423     --- a/arch/powerpc/perf/callchain.c
424     +++ b/arch/powerpc/perf/callchain.c
425     @@ -35,7 +35,7 @@ static int valid_next_sp(unsigned long sp, unsigned long prev_sp)
426     return 0; /* must be 16-byte aligned */
427     if (!validate_sp(sp, current, STACK_FRAME_OVERHEAD))
428     return 0;
429     - if (sp >= prev_sp + STACK_FRAME_OVERHEAD)
430     + if (sp >= prev_sp + STACK_FRAME_MIN_SIZE)
431     return 1;
432     /*
433     * sp could decrease when we jump off an interrupt stack
434     diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h
435     index 0dc7d9e21c34..9d7d36c82fc2 100644
436     --- a/arch/x86/include/asm/fixmap.h
437     +++ b/arch/x86/include/asm/fixmap.h
438     @@ -123,14 +123,14 @@ enum fixed_addresses {
439     __end_of_permanent_fixed_addresses,
440    
441     /*
442     - * 256 temporary boot-time mappings, used by early_ioremap(),
443     + * 512 temporary boot-time mappings, used by early_ioremap(),
444     * before ioremap() is functional.
445     *
446     - * If necessary we round it up to the next 256 pages boundary so
447     + * If necessary we round it up to the next 512 pages boundary so
448     * that we can have a single pgd entry and a single pte table:
449     */
450     #define NR_FIX_BTMAPS 64
451     -#define FIX_BTMAPS_SLOTS 4
452     +#define FIX_BTMAPS_SLOTS 8
453     #define TOTAL_FIX_BTMAPS (NR_FIX_BTMAPS * FIX_BTMAPS_SLOTS)
454     FIX_BTMAP_END =
455     (__end_of_permanent_fixed_addresses ^
456     diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
457     index fe862750583b..87084ab90d19 100644
458     --- a/arch/x86/kernel/smpboot.c
459     +++ b/arch/x86/kernel/smpboot.c
460     @@ -1284,6 +1284,9 @@ static void remove_siblinginfo(int cpu)
461    
462     for_each_cpu(sibling, cpu_sibling_mask(cpu))
463     cpumask_clear_cpu(cpu, cpu_sibling_mask(sibling));
464     + for_each_cpu(sibling, cpu_llc_shared_mask(cpu))
465     + cpumask_clear_cpu(cpu, cpu_llc_shared_mask(sibling));
466     + cpumask_clear(cpu_llc_shared_mask(cpu));
467     cpumask_clear(cpu_sibling_mask(cpu));
468     cpumask_clear(cpu_core_mask(cpu));
469     c->phys_proc_id = 0;
470     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
471     index 1be0a9e75d1f..e8753555f144 100644
472     --- a/arch/x86/kvm/x86.c
473     +++ b/arch/x86/kvm/x86.c
474     @@ -1196,20 +1196,37 @@ void kvm_write_tsc(struct kvm_vcpu *vcpu, struct msr_data *msr)
475     elapsed = ns - kvm->arch.last_tsc_nsec;
476    
477     if (vcpu->arch.virtual_tsc_khz) {
478     + int faulted = 0;
479     +
480     /* n.b - signed multiplication and division required */
481     usdiff = data - kvm->arch.last_tsc_write;
482     #ifdef CONFIG_X86_64
483     usdiff = (usdiff * 1000) / vcpu->arch.virtual_tsc_khz;
484     #else
485     /* do_div() only does unsigned */
486     - asm("idivl %2; xor %%edx, %%edx"
487     - : "=A"(usdiff)
488     - : "A"(usdiff * 1000), "rm"(vcpu->arch.virtual_tsc_khz));
489     + asm("1: idivl %[divisor]\n"
490     + "2: xor %%edx, %%edx\n"
491     + " movl $0, %[faulted]\n"
492     + "3:\n"
493     + ".section .fixup,\"ax\"\n"
494     + "4: movl $1, %[faulted]\n"
495     + " jmp 3b\n"
496     + ".previous\n"
497     +
498     + _ASM_EXTABLE(1b, 4b)
499     +
500     + : "=A"(usdiff), [faulted] "=r" (faulted)
501     + : "A"(usdiff * 1000), [divisor] "rm"(vcpu->arch.virtual_tsc_khz));
502     +
503     #endif
504     do_div(elapsed, 1000);
505     usdiff -= elapsed;
506     if (usdiff < 0)
507     usdiff = -usdiff;
508     +
509     + /* idivl overflow => difference is larger than USEC_PER_SEC */
510     + if (faulted)
511     + usdiff = USEC_PER_SEC;
512     } else
513     usdiff = USEC_PER_SEC; /* disable TSC match window below */
514    
515     diff --git a/arch/xtensa/include/asm/pgtable.h b/arch/xtensa/include/asm/pgtable.h
516     index d7546c94da52..385efb23ddce 100644
517     --- a/arch/xtensa/include/asm/pgtable.h
518     +++ b/arch/xtensa/include/asm/pgtable.h
519     @@ -68,7 +68,12 @@
520     #define VMALLOC_START 0xC0000000
521     #define VMALLOC_END 0xC7FEFFFF
522     #define TLBTEMP_BASE_1 0xC7FF0000
523     -#define TLBTEMP_BASE_2 0xC7FF8000
524     +#define TLBTEMP_BASE_2 (TLBTEMP_BASE_1 + DCACHE_WAY_SIZE)
525     +#if 2 * DCACHE_WAY_SIZE > ICACHE_WAY_SIZE
526     +#define TLBTEMP_SIZE (2 * DCACHE_WAY_SIZE)
527     +#else
528     +#define TLBTEMP_SIZE ICACHE_WAY_SIZE
529     +#endif
530    
531     /*
532     * Xtensa Linux config PTE layout (when present):
533     diff --git a/arch/xtensa/include/asm/uaccess.h b/arch/xtensa/include/asm/uaccess.h
534     index fd686dc45d1a..c7211e7e182d 100644
535     --- a/arch/xtensa/include/asm/uaccess.h
536     +++ b/arch/xtensa/include/asm/uaccess.h
537     @@ -52,7 +52,12 @@
538     */
539     .macro get_fs ad, sp
540     GET_CURRENT(\ad,\sp)
541     +#if THREAD_CURRENT_DS > 1020
542     + addi \ad, \ad, TASK_THREAD
543     + l32i \ad, \ad, THREAD_CURRENT_DS - TASK_THREAD
544     +#else
545     l32i \ad, \ad, THREAD_CURRENT_DS
546     +#endif
547     .endm
548    
549     /*
550     diff --git a/arch/xtensa/include/uapi/asm/ioctls.h b/arch/xtensa/include/uapi/asm/ioctls.h
551     index b4cb1100c0fb..a47909f0c34b 100644
552     --- a/arch/xtensa/include/uapi/asm/ioctls.h
553     +++ b/arch/xtensa/include/uapi/asm/ioctls.h
554     @@ -28,17 +28,17 @@
555     #define TCSETSW 0x5403
556     #define TCSETSF 0x5404
557    
558     -#define TCGETA _IOR('t', 23, struct termio)
559     -#define TCSETA _IOW('t', 24, struct termio)
560     -#define TCSETAW _IOW('t', 25, struct termio)
561     -#define TCSETAF _IOW('t', 28, struct termio)
562     +#define TCGETA 0x80127417 /* _IOR('t', 23, struct termio) */
563     +#define TCSETA 0x40127418 /* _IOW('t', 24, struct termio) */
564     +#define TCSETAW 0x40127419 /* _IOW('t', 25, struct termio) */
565     +#define TCSETAF 0x4012741C /* _IOW('t', 28, struct termio) */
566    
567     #define TCSBRK _IO('t', 29)
568     #define TCXONC _IO('t', 30)
569     #define TCFLSH _IO('t', 31)
570    
571     -#define TIOCSWINSZ _IOW('t', 103, struct winsize)
572     -#define TIOCGWINSZ _IOR('t', 104, struct winsize)
573     +#define TIOCSWINSZ 0x40087467 /* _IOW('t', 103, struct winsize) */
574     +#define TIOCGWINSZ 0x80087468 /* _IOR('t', 104, struct winsize) */
575     #define TIOCSTART _IO('t', 110) /* start output, like ^Q */
576     #define TIOCSTOP _IO('t', 111) /* stop output, like ^S */
577     #define TIOCOUTQ _IOR('t', 115, int) /* output queue size */
578     @@ -88,7 +88,6 @@
579     #define TIOCSETD _IOW('T', 35, int)
580     #define TIOCGETD _IOR('T', 36, int)
581     #define TCSBRKP _IOW('T', 37, int) /* Needed for POSIX tcsendbreak()*/
582     -#define TIOCTTYGSTRUCT _IOR('T', 38, struct tty_struct) /* For debugging only*/
583     #define TIOCSBRK _IO('T', 39) /* BSD compatibility */
584     #define TIOCCBRK _IO('T', 40) /* BSD compatibility */
585     #define TIOCGSID _IOR('T', 41, pid_t) /* Return the session ID of FD*/
586     @@ -114,8 +113,10 @@
587     #define TIOCSERGETLSR _IOR('T', 89, unsigned int) /* Get line status reg. */
588     /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
589     # define TIOCSER_TEMT 0x01 /* Transmitter physically empty */
590     -#define TIOCSERGETMULTI _IOR('T', 90, struct serial_multiport_struct) /* Get multiport config */
591     -#define TIOCSERSETMULTI _IOW('T', 91, struct serial_multiport_struct) /* Set multiport config */
592     +#define TIOCSERGETMULTI 0x80a8545a /* Get multiport config */
593     + /* _IOR('T', 90, struct serial_multiport_struct) */
594     +#define TIOCSERSETMULTI 0x40a8545b /* Set multiport config */
595     + /* _IOW('T', 91, struct serial_multiport_struct) */
596    
597     #define TIOCMIWAIT _IO('T', 92) /* wait for a change on serial input line(s) */
598     #define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
599     diff --git a/arch/xtensa/kernel/entry.S b/arch/xtensa/kernel/entry.S
600     index aa7f9add7d77..6e53174f8556 100644
601     --- a/arch/xtensa/kernel/entry.S
602     +++ b/arch/xtensa/kernel/entry.S
603     @@ -1121,9 +1121,8 @@ ENTRY(fast_syscall_xtensa)
604     movi a7, 4 # sizeof(unsigned int)
605     access_ok a3, a7, a0, a2, .Leac # a0: scratch reg, a2: sp
606    
607     - addi a6, a6, -1 # assuming SYS_XTENSA_ATOMIC_SET = 1
608     - _bgeui a6, SYS_XTENSA_COUNT - 1, .Lill
609     - _bnei a6, SYS_XTENSA_ATOMIC_CMP_SWP - 1, .Lnswp
610     + _bgeui a6, SYS_XTENSA_COUNT, .Lill
611     + _bnei a6, SYS_XTENSA_ATOMIC_CMP_SWP, .Lnswp
612    
613     /* Fall through for ATOMIC_CMP_SWP. */
614    
615     @@ -1135,27 +1134,26 @@ TRY s32i a5, a3, 0 # different, modify value
616     l32i a7, a2, PT_AREG7 # restore a7
617     l32i a0, a2, PT_AREG0 # restore a0
618     movi a2, 1 # and return 1
619     - addi a6, a6, 1 # restore a6 (really necessary?)
620     rfe
621    
622     1: l32i a7, a2, PT_AREG7 # restore a7
623     l32i a0, a2, PT_AREG0 # restore a0
624     movi a2, 0 # return 0 (note that we cannot set
625     - addi a6, a6, 1 # restore a6 (really necessary?)
626     rfe
627    
628     .Lnswp: /* Atomic set, add, and exg_add. */
629    
630     TRY l32i a7, a3, 0 # orig
631     + addi a6, a6, -SYS_XTENSA_ATOMIC_SET
632     add a0, a4, a7 # + arg
633     moveqz a0, a4, a6 # set
634     + addi a6, a6, SYS_XTENSA_ATOMIC_SET
635     TRY s32i a0, a3, 0 # write new value
636    
637     mov a0, a2
638     mov a2, a7
639     l32i a7, a0, PT_AREG7 # restore a7
640     l32i a0, a0, PT_AREG0 # restore a0
641     - addi a6, a6, 1 # restore a6 (really necessary?)
642     rfe
643    
644     CATCH
645     @@ -1164,7 +1162,7 @@ CATCH
646     movi a2, -EFAULT
647     rfe
648    
649     -.Lill: l32i a7, a2, PT_AREG0 # restore a7
650     +.Lill: l32i a7, a2, PT_AREG7 # restore a7
651     l32i a0, a2, PT_AREG0 # restore a0
652     movi a2, -EINVAL
653     rfe
654     @@ -1703,7 +1701,7 @@ ENTRY(fast_second_level_miss)
655     rsr a0, excvaddr
656     bltu a0, a3, 2f
657    
658     - addi a1, a0, -(2 << (DCACHE_ALIAS_ORDER + PAGE_SHIFT))
659     + addi a1, a0, -TLBTEMP_SIZE
660     bgeu a1, a3, 2f
661    
662     /* Check if we have to restore an ITLB mapping. */
663     @@ -1961,7 +1959,6 @@ ENTRY(_switch_to)
664    
665     entry a1, 16
666    
667     - mov a10, a2 # preserve 'prev' (a2)
668     mov a11, a3 # and 'next' (a3)
669    
670     l32i a4, a2, TASK_THREAD_INFO
671     @@ -1969,8 +1966,14 @@ ENTRY(_switch_to)
672    
673     save_xtregs_user a4 a6 a8 a9 a12 a13 THREAD_XTREGS_USER
674    
675     - s32i a0, a10, THREAD_RA # save return address
676     - s32i a1, a10, THREAD_SP # save stack pointer
677     +#if THREAD_RA > 1020 || THREAD_SP > 1020
678     + addi a10, a2, TASK_THREAD
679     + s32i a0, a10, THREAD_RA - TASK_THREAD # save return address
680     + s32i a1, a10, THREAD_SP - TASK_THREAD # save stack pointer
681     +#else
682     + s32i a0, a2, THREAD_RA # save return address
683     + s32i a1, a2, THREAD_SP # save stack pointer
684     +#endif
685    
686     /* Disable ints while we manipulate the stack pointer. */
687    
688     @@ -2011,7 +2014,6 @@ ENTRY(_switch_to)
689     load_xtregs_user a5 a6 a8 a9 a12 a13 THREAD_XTREGS_USER
690    
691     wsr a14, ps
692     - mov a2, a10 # return 'prev'
693     rsync
694    
695     retw
696     diff --git a/arch/xtensa/kernel/pci-dma.c b/arch/xtensa/kernel/pci-dma.c
697     index 2d9cc6dbfd78..e8b76b8e4b29 100644
698     --- a/arch/xtensa/kernel/pci-dma.c
699     +++ b/arch/xtensa/kernel/pci-dma.c
700     @@ -49,9 +49,8 @@ dma_alloc_coherent(struct device *dev,size_t size,dma_addr_t *handle,gfp_t flag)
701    
702     /* We currently don't support coherent memory outside KSEG */
703    
704     - if (ret < XCHAL_KSEG_CACHED_VADDR
705     - || ret >= XCHAL_KSEG_CACHED_VADDR + XCHAL_KSEG_SIZE)
706     - BUG();
707     + BUG_ON(ret < XCHAL_KSEG_CACHED_VADDR ||
708     + ret > XCHAL_KSEG_CACHED_VADDR + XCHAL_KSEG_SIZE - 1);
709    
710    
711     if (ret != 0) {
712     @@ -68,10 +67,11 @@ EXPORT_SYMBOL(dma_alloc_coherent);
713     void dma_free_coherent(struct device *hwdev, size_t size,
714     void *vaddr, dma_addr_t dma_handle)
715     {
716     - long addr=(long)vaddr+XCHAL_KSEG_CACHED_VADDR-XCHAL_KSEG_BYPASS_VADDR;
717     + unsigned long addr = (unsigned long)vaddr +
718     + XCHAL_KSEG_CACHED_VADDR - XCHAL_KSEG_BYPASS_VADDR;
719    
720     - if (addr < 0 || addr >= XCHAL_KSEG_SIZE)
721     - BUG();
722     + BUG_ON(addr < XCHAL_KSEG_CACHED_VADDR ||
723     + addr > XCHAL_KSEG_CACHED_VADDR + XCHAL_KSEG_SIZE - 1);
724    
725     free_pages(addr, get_order(size));
726     }
727     diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
728     index c410752c5c65..c981097dd634 100644
729     --- a/block/cfq-iosched.c
730     +++ b/block/cfq-iosched.c
731     @@ -1275,12 +1275,16 @@ __cfq_group_service_tree_add(struct cfq_rb_root *st, struct cfq_group *cfqg)
732     static void
733     cfq_update_group_weight(struct cfq_group *cfqg)
734     {
735     - BUG_ON(!RB_EMPTY_NODE(&cfqg->rb_node));
736     -
737     if (cfqg->new_weight) {
738     cfqg->weight = cfqg->new_weight;
739     cfqg->new_weight = 0;
740     }
741     +}
742     +
743     +static void
744     +cfq_update_group_leaf_weight(struct cfq_group *cfqg)
745     +{
746     + BUG_ON(!RB_EMPTY_NODE(&cfqg->rb_node));
747    
748     if (cfqg->new_leaf_weight) {
749     cfqg->leaf_weight = cfqg->new_leaf_weight;
750     @@ -1299,7 +1303,7 @@ cfq_group_service_tree_add(struct cfq_rb_root *st, struct cfq_group *cfqg)
751     /* add to the service tree */
752     BUG_ON(!RB_EMPTY_NODE(&cfqg->rb_node));
753    
754     - cfq_update_group_weight(cfqg);
755     + cfq_update_group_leaf_weight(cfqg);
756     __cfq_group_service_tree_add(st, cfqg);
757    
758     /*
759     @@ -1323,6 +1327,7 @@ cfq_group_service_tree_add(struct cfq_rb_root *st, struct cfq_group *cfqg)
760     */
761     while ((parent = cfqg_parent(pos))) {
762     if (propagate) {
763     + cfq_update_group_weight(pos);
764     propagate = !parent->nr_active++;
765     parent->children_weight += pos->weight;
766     }
767     diff --git a/block/genhd.c b/block/genhd.c
768     index cdeb5277dfd4..e670148c3773 100644
769     --- a/block/genhd.c
770     +++ b/block/genhd.c
771     @@ -28,10 +28,10 @@ struct kobject *block_depr;
772     /* for extended dynamic devt allocation, currently only one major is used */
773     #define NR_EXT_DEVT (1 << MINORBITS)
774    
775     -/* For extended devt allocation. ext_devt_mutex prevents look up
776     +/* For extended devt allocation. ext_devt_lock prevents look up
777     * results from going away underneath its user.
778     */
779     -static DEFINE_MUTEX(ext_devt_mutex);
780     +static DEFINE_SPINLOCK(ext_devt_lock);
781     static DEFINE_IDR(ext_devt_idr);
782    
783     static struct device_type disk_type;
784     @@ -420,9 +420,13 @@ int blk_alloc_devt(struct hd_struct *part, dev_t *devt)
785     }
786    
787     /* allocate ext devt */
788     - mutex_lock(&ext_devt_mutex);
789     - idx = idr_alloc(&ext_devt_idr, part, 0, NR_EXT_DEVT, GFP_KERNEL);
790     - mutex_unlock(&ext_devt_mutex);
791     + idr_preload(GFP_KERNEL);
792     +
793     + spin_lock(&ext_devt_lock);
794     + idx = idr_alloc(&ext_devt_idr, part, 0, NR_EXT_DEVT, GFP_NOWAIT);
795     + spin_unlock(&ext_devt_lock);
796     +
797     + idr_preload_end();
798     if (idx < 0)
799     return idx == -ENOSPC ? -EBUSY : idx;
800    
801     @@ -441,15 +445,13 @@ int blk_alloc_devt(struct hd_struct *part, dev_t *devt)
802     */
803     void blk_free_devt(dev_t devt)
804     {
805     - might_sleep();
806     -
807     if (devt == MKDEV(0, 0))
808     return;
809    
810     if (MAJOR(devt) == BLOCK_EXT_MAJOR) {
811     - mutex_lock(&ext_devt_mutex);
812     + spin_lock(&ext_devt_lock);
813     idr_remove(&ext_devt_idr, blk_mangle_minor(MINOR(devt)));
814     - mutex_unlock(&ext_devt_mutex);
815     + spin_unlock(&ext_devt_lock);
816     }
817     }
818    
819     @@ -665,7 +667,6 @@ void del_gendisk(struct gendisk *disk)
820     sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk)));
821     pm_runtime_set_memalloc_noio(disk_to_dev(disk), false);
822     device_del(disk_to_dev(disk));
823     - blk_free_devt(disk_to_dev(disk)->devt);
824     }
825     EXPORT_SYMBOL(del_gendisk);
826    
827     @@ -690,13 +691,13 @@ struct gendisk *get_gendisk(dev_t devt, int *partno)
828     } else {
829     struct hd_struct *part;
830    
831     - mutex_lock(&ext_devt_mutex);
832     + spin_lock(&ext_devt_lock);
833     part = idr_find(&ext_devt_idr, blk_mangle_minor(MINOR(devt)));
834     if (part && get_disk(part_to_disk(part))) {
835     *partno = part->partno;
836     disk = part_to_disk(part);
837     }
838     - mutex_unlock(&ext_devt_mutex);
839     + spin_unlock(&ext_devt_lock);
840     }
841    
842     return disk;
843     @@ -1098,6 +1099,7 @@ static void disk_release(struct device *dev)
844     {
845     struct gendisk *disk = dev_to_disk(dev);
846    
847     + blk_free_devt(dev->devt);
848     disk_release_events(disk);
849     kfree(disk->random);
850     disk_replace_part_tbl(disk, NULL);
851     diff --git a/block/partition-generic.c b/block/partition-generic.c
852     index 789cdea05893..0d9e5f97f0a8 100644
853     --- a/block/partition-generic.c
854     +++ b/block/partition-generic.c
855     @@ -211,6 +211,7 @@ static const struct attribute_group *part_attr_groups[] = {
856     static void part_release(struct device *dev)
857     {
858     struct hd_struct *p = dev_to_part(dev);
859     + blk_free_devt(dev->devt);
860     free_part_stats(p);
861     free_part_info(p);
862     kfree(p);
863     @@ -253,7 +254,6 @@ void delete_partition(struct gendisk *disk, int partno)
864     rcu_assign_pointer(ptbl->last_lookup, NULL);
865     kobject_put(part->holder_dir);
866     device_del(part_to_dev(part));
867     - blk_free_devt(part_devt(part));
868    
869     hd_struct_put(part);
870     }
871     diff --git a/drivers/acpi/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h
872     index d5bfbd331bfd..95896886fc5a 100644
873     --- a/drivers/acpi/acpica/aclocal.h
874     +++ b/drivers/acpi/acpica/aclocal.h
875     @@ -254,6 +254,7 @@ struct acpi_create_field_info {
876     u32 field_bit_position;
877     u32 field_bit_length;
878     u16 resource_length;
879     + u16 pin_number_index;
880     u8 field_flags;
881     u8 attribute;
882     u8 field_type;
883     diff --git a/drivers/acpi/acpica/acobject.h b/drivers/acpi/acpica/acobject.h
884     index cc7ab6dd724e..a47cc78ffd4f 100644
885     --- a/drivers/acpi/acpica/acobject.h
886     +++ b/drivers/acpi/acpica/acobject.h
887     @@ -263,6 +263,7 @@ struct acpi_object_region_field {
888     ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO u16 resource_length;
889     union acpi_operand_object *region_obj; /* Containing op_region object */
890     u8 *resource_buffer; /* resource_template for serial regions/fields */
891     + u16 pin_number_index; /* Index relative to previous Connection/Template */
892     };
893    
894     struct acpi_object_bank_field {
895     diff --git a/drivers/acpi/acpica/dsfield.c b/drivers/acpi/acpica/dsfield.c
896     index feadeed1012d..e651d4ec7c4c 100644
897     --- a/drivers/acpi/acpica/dsfield.c
898     +++ b/drivers/acpi/acpica/dsfield.c
899     @@ -360,6 +360,7 @@ acpi_ds_get_field_names(struct acpi_create_field_info *info,
900     */
901     info->resource_buffer = NULL;
902     info->connection_node = NULL;
903     + info->pin_number_index = 0;
904    
905     /*
906     * A Connection() is either an actual resource descriptor (buffer)
907     @@ -437,6 +438,7 @@ acpi_ds_get_field_names(struct acpi_create_field_info *info,
908     }
909    
910     info->field_bit_position += info->field_bit_length;
911     + info->pin_number_index++; /* Index relative to previous Connection() */
912     break;
913    
914     default:
915     diff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c
916     index 6555e350fc1f..8fab9262d98a 100644
917     --- a/drivers/acpi/acpica/evregion.c
918     +++ b/drivers/acpi/acpica/evregion.c
919     @@ -141,6 +141,7 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
920     union acpi_operand_object *region_obj2;
921     void *region_context = NULL;
922     struct acpi_connection_info *context;
923     + acpi_physical_address address;
924    
925     ACPI_FUNCTION_TRACE(ev_address_space_dispatch);
926    
927     @@ -235,25 +236,23 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
928     /* We have everything we need, we can invoke the address space handler */
929    
930     handler = handler_desc->address_space.handler;
931     -
932     - ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
933     - "Handler %p (@%p) Address %8.8X%8.8X [%s]\n",
934     - &region_obj->region.handler->address_space, handler,
935     - ACPI_FORMAT_NATIVE_UINT(region_obj->region.address +
936     - region_offset),
937     - acpi_ut_get_region_name(region_obj->region.
938     - space_id)));
939     + address = (region_obj->region.address + region_offset);
940    
941     /*
942     * Special handling for generic_serial_bus and general_purpose_io:
943     * There are three extra parameters that must be passed to the
944     * handler via the context:
945     - * 1) Connection buffer, a resource template from Connection() op.
946     - * 2) Length of the above buffer.
947     - * 3) Actual access length from the access_as() op.
948     + * 1) Connection buffer, a resource template from Connection() op
949     + * 2) Length of the above buffer
950     + * 3) Actual access length from the access_as() op
951     + *
952     + * In addition, for general_purpose_io, the Address and bit_width fields
953     + * are defined as follows:
954     + * 1) Address is the pin number index of the field (bit offset from
955     + * the previous Connection)
956     + * 2) bit_width is the actual bit length of the field (number of pins)
957     */
958     - if (((region_obj->region.space_id == ACPI_ADR_SPACE_GSBUS) ||
959     - (region_obj->region.space_id == ACPI_ADR_SPACE_GPIO)) &&
960     + if ((region_obj->region.space_id == ACPI_ADR_SPACE_GSBUS) &&
961     context && field_obj) {
962    
963     /* Get the Connection (resource_template) buffer */
964     @@ -262,6 +261,24 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
965     context->length = field_obj->field.resource_length;
966     context->access_length = field_obj->field.access_length;
967     }
968     + if ((region_obj->region.space_id == ACPI_ADR_SPACE_GPIO) &&
969     + context && field_obj) {
970     +
971     + /* Get the Connection (resource_template) buffer */
972     +
973     + context->connection = field_obj->field.resource_buffer;
974     + context->length = field_obj->field.resource_length;
975     + context->access_length = field_obj->field.access_length;
976     + address = field_obj->field.pin_number_index;
977     + bit_width = field_obj->field.bit_length;
978     + }
979     +
980     + ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
981     + "Handler %p (@%p) Address %8.8X%8.8X [%s]\n",
982     + &region_obj->region.handler->address_space, handler,
983     + ACPI_FORMAT_NATIVE_UINT(address),
984     + acpi_ut_get_region_name(region_obj->region.
985     + space_id)));
986    
987     if (!(handler_desc->address_space.handler_flags &
988     ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)) {
989     @@ -275,9 +292,7 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
990    
991     /* Call the handler */
992    
993     - status = handler(function,
994     - (region_obj->region.address + region_offset),
995     - bit_width, value, context,
996     + status = handler(function, address, bit_width, value, context,
997     region_obj2->extra.region_context);
998    
999     if (ACPI_FAILURE(status)) {
1000     diff --git a/drivers/acpi/acpica/exfield.c b/drivers/acpi/acpica/exfield.c
1001     index 7d4bae71e8c6..0108d59665ab 100644
1002     --- a/drivers/acpi/acpica/exfield.c
1003     +++ b/drivers/acpi/acpica/exfield.c
1004     @@ -178,6 +178,37 @@ acpi_ex_read_data_from_field(struct acpi_walk_state *walk_state,
1005     buffer = &buffer_desc->integer.value;
1006     }
1007    
1008     + if ((obj_desc->common.type == ACPI_TYPE_LOCAL_REGION_FIELD) &&
1009     + (obj_desc->field.region_obj->region.space_id ==
1010     + ACPI_ADR_SPACE_GPIO)) {
1011     + /*
1012     + * For GPIO (general_purpose_io), the Address will be the bit offset
1013     + * from the previous Connection() operator, making it effectively a
1014     + * pin number index. The bit_length is the length of the field, which
1015     + * is thus the number of pins.
1016     + */
1017     + ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
1018     + "GPIO FieldRead [FROM]: Pin %u Bits %u\n",
1019     + obj_desc->field.pin_number_index,
1020     + obj_desc->field.bit_length));
1021     +
1022     + /* Lock entire transaction if requested */
1023     +
1024     + acpi_ex_acquire_global_lock(obj_desc->common_field.field_flags);
1025     +
1026     + /* Perform the write */
1027     +
1028     + status = acpi_ex_access_region(obj_desc, 0,
1029     + (u64 *)buffer, ACPI_READ);
1030     + acpi_ex_release_global_lock(obj_desc->common_field.field_flags);
1031     + if (ACPI_FAILURE(status)) {
1032     + acpi_ut_remove_reference(buffer_desc);
1033     + } else {
1034     + *ret_buffer_desc = buffer_desc;
1035     + }
1036     + return_ACPI_STATUS(status);
1037     + }
1038     +
1039     ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
1040     "FieldRead [TO]: Obj %p, Type %X, Buf %p, ByteLen %X\n",
1041     obj_desc, obj_desc->common.type, buffer,
1042     @@ -325,6 +356,42 @@ acpi_ex_write_data_to_field(union acpi_operand_object *source_desc,
1043    
1044     *result_desc = buffer_desc;
1045     return_ACPI_STATUS(status);
1046     + } else if ((obj_desc->common.type == ACPI_TYPE_LOCAL_REGION_FIELD) &&
1047     + (obj_desc->field.region_obj->region.space_id ==
1048     + ACPI_ADR_SPACE_GPIO)) {
1049     + /*
1050     + * For GPIO (general_purpose_io), we will bypass the entire field
1051     + * mechanism and handoff the bit address and bit width directly to
1052     + * the handler. The Address will be the bit offset
1053     + * from the previous Connection() operator, making it effectively a
1054     + * pin number index. The bit_length is the length of the field, which
1055     + * is thus the number of pins.
1056     + */
1057     + if (source_desc->common.type != ACPI_TYPE_INTEGER) {
1058     + return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
1059     + }
1060     +
1061     + ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
1062     + "GPIO FieldWrite [FROM]: (%s:%X), Val %.8X [TO]: Pin %u Bits %u\n",
1063     + acpi_ut_get_type_name(source_desc->common.
1064     + type),
1065     + source_desc->common.type,
1066     + (u32)source_desc->integer.value,
1067     + obj_desc->field.pin_number_index,
1068     + obj_desc->field.bit_length));
1069     +
1070     + buffer = &source_desc->integer.value;
1071     +
1072     + /* Lock entire transaction if requested */
1073     +
1074     + acpi_ex_acquire_global_lock(obj_desc->common_field.field_flags);
1075     +
1076     + /* Perform the write */
1077     +
1078     + status = acpi_ex_access_region(obj_desc, 0,
1079     + (u64 *)buffer, ACPI_WRITE);
1080     + acpi_ex_release_global_lock(obj_desc->common_field.field_flags);
1081     + return_ACPI_STATUS(status);
1082     }
1083    
1084     /* Get a pointer to the data to be written */
1085     diff --git a/drivers/acpi/acpica/exprep.c b/drivers/acpi/acpica/exprep.c
1086     index 6b728aef2dca..df212fe4cf6c 100644
1087     --- a/drivers/acpi/acpica/exprep.c
1088     +++ b/drivers/acpi/acpica/exprep.c
1089     @@ -479,6 +479,8 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
1090     obj_desc->field.resource_length = info->resource_length;
1091     }
1092    
1093     + obj_desc->field.pin_number_index = info->pin_number_index;
1094     +
1095     /* Allow full data read from EC address space */
1096    
1097     if ((obj_desc->field.region_obj->region.space_id ==
1098     diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
1099     index 3b39687c6336..c3f09505f795 100644
1100     --- a/drivers/ata/ahci.c
1101     +++ b/drivers/ata/ahci.c
1102     @@ -304,6 +304,14 @@ static const struct pci_device_id ahci_pci_tbl[] = {
1103     { PCI_VDEVICE(INTEL, 0x9c85), board_ahci }, /* Wildcat Point-LP RAID */
1104     { PCI_VDEVICE(INTEL, 0x9c87), board_ahci }, /* Wildcat Point-LP RAID */
1105     { PCI_VDEVICE(INTEL, 0x9c8f), board_ahci }, /* Wildcat Point-LP RAID */
1106     + { PCI_VDEVICE(INTEL, 0x8c82), board_ahci }, /* 9 Series AHCI */
1107     + { PCI_VDEVICE(INTEL, 0x8c83), board_ahci }, /* 9 Series AHCI */
1108     + { PCI_VDEVICE(INTEL, 0x8c84), board_ahci }, /* 9 Series RAID */
1109     + { PCI_VDEVICE(INTEL, 0x8c85), board_ahci }, /* 9 Series RAID */
1110     + { PCI_VDEVICE(INTEL, 0x8c86), board_ahci }, /* 9 Series RAID */
1111     + { PCI_VDEVICE(INTEL, 0x8c87), board_ahci }, /* 9 Series RAID */
1112     + { PCI_VDEVICE(INTEL, 0x8c8e), board_ahci }, /* 9 Series RAID */
1113     + { PCI_VDEVICE(INTEL, 0x8c8f), board_ahci }, /* 9 Series RAID */
1114    
1115     /* JMicron 360/1/3/5/6, match class to avoid IDE function */
1116     { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
1117     @@ -441,6 +449,8 @@ static const struct pci_device_id ahci_pci_tbl[] = {
1118     { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x917a),
1119     .driver_data = board_ahci_yes_fbs }, /* 88se9172 */
1120     { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9172),
1121     + .driver_data = board_ahci_yes_fbs }, /* 88se9182 */
1122     + { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9182),
1123     .driver_data = board_ahci_yes_fbs }, /* 88se9172 */
1124     { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9192),
1125     .driver_data = board_ahci_yes_fbs }, /* 88se9172 on some Gigabyte */
1126     diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
1127     index b92913a528b6..82aa7b550ea5 100644
1128     --- a/drivers/ata/ata_piix.c
1129     +++ b/drivers/ata/ata_piix.c
1130     @@ -340,6 +340,14 @@ static const struct pci_device_id piix_pci_tbl[] = {
1131     { 0x8086, 0x0F21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt },
1132     /* SATA Controller IDE (Coleto Creek) */
1133     { 0x8086, 0x23a6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
1134     + /* SATA Controller IDE (9 Series) */
1135     + { 0x8086, 0x8c88, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_snb },
1136     + /* SATA Controller IDE (9 Series) */
1137     + { 0x8086, 0x8c89, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_snb },
1138     + /* SATA Controller IDE (9 Series) */
1139     + { 0x8086, 0x8c80, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
1140     + /* SATA Controller IDE (9 Series) */
1141     + { 0x8086, 0x8c81, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
1142    
1143     { } /* terminate list */
1144     };
1145     diff --git a/drivers/ata/pata_scc.c b/drivers/ata/pata_scc.c
1146     index f35f15f4d83e..f7badaa39eb6 100644
1147     --- a/drivers/ata/pata_scc.c
1148     +++ b/drivers/ata/pata_scc.c
1149     @@ -586,7 +586,7 @@ static int scc_wait_after_reset(struct ata_link *link, unsigned int devmask,
1150     * Note: Original code is ata_bus_softreset().
1151     */
1152    
1153     -static unsigned int scc_bus_softreset(struct ata_port *ap, unsigned int devmask,
1154     +static int scc_bus_softreset(struct ata_port *ap, unsigned int devmask,
1155     unsigned long deadline)
1156     {
1157     struct ata_ioports *ioaddr = &ap->ioaddr;
1158     @@ -600,9 +600,7 @@ static unsigned int scc_bus_softreset(struct ata_port *ap, unsigned int devmask,
1159     udelay(20);
1160     out_be32(ioaddr->ctl_addr, ap->ctl);
1161    
1162     - scc_wait_after_reset(&ap->link, devmask, deadline);
1163     -
1164     - return 0;
1165     + return scc_wait_after_reset(&ap->link, devmask, deadline);
1166     }
1167    
1168     /**
1169     @@ -619,7 +617,8 @@ static int scc_softreset(struct ata_link *link, unsigned int *classes,
1170     {
1171     struct ata_port *ap = link->ap;
1172     unsigned int slave_possible = ap->flags & ATA_FLAG_SLAVE_POSS;
1173     - unsigned int devmask = 0, err_mask;
1174     + unsigned int devmask = 0;
1175     + int rc;
1176     u8 err;
1177    
1178     DPRINTK("ENTER\n");
1179     @@ -635,9 +634,9 @@ static int scc_softreset(struct ata_link *link, unsigned int *classes,
1180    
1181     /* issue bus reset */
1182     DPRINTK("about to softreset, devmask=%x\n", devmask);
1183     - err_mask = scc_bus_softreset(ap, devmask, deadline);
1184     - if (err_mask) {
1185     - ata_port_err(ap, "SRST failed (err_mask=0x%x)\n", err_mask);
1186     + rc = scc_bus_softreset(ap, devmask, deadline);
1187     + if (rc) {
1188     + ata_port_err(ap, "SRST failed (err_mask=0x%x)\n", rc);
1189     return -EIO;
1190     }
1191    
1192     diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
1193     index d0c81d1f409c..4b5cf2e34e9a 100644
1194     --- a/drivers/base/regmap/regmap.c
1195     +++ b/drivers/base/regmap/regmap.c
1196     @@ -114,7 +114,7 @@ bool regmap_readable(struct regmap *map, unsigned int reg)
1197    
1198     bool regmap_volatile(struct regmap *map, unsigned int reg)
1199     {
1200     - if (!regmap_readable(map, reg))
1201     + if (!map->format.format_write && !regmap_readable(map, reg))
1202     return false;
1203    
1204     if (map->volatile_reg)
1205     diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
1206     index f60fd7bd1183..96f874a508e2 100644
1207     --- a/drivers/gpu/drm/ast/ast_main.c
1208     +++ b/drivers/gpu/drm/ast/ast_main.c
1209     @@ -100,7 +100,7 @@ static int ast_detect_chip(struct drm_device *dev)
1210     }
1211     ast->vga2_clone = false;
1212     } else {
1213     - ast->chip = 2000;
1214     + ast->chip = AST2000;
1215     DRM_INFO("AST 2000 detected\n");
1216     }
1217     }
1218     diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
1219     index 95070b2124c6..49acec155046 100644
1220     --- a/drivers/gpu/drm/i915/intel_bios.c
1221     +++ b/drivers/gpu/drm/i915/intel_bios.c
1222     @@ -657,7 +657,7 @@ init_vbt_defaults(struct drm_i915_private *dev_priv)
1223     DRM_DEBUG_KMS("Set default to SSC at %dMHz\n", dev_priv->lvds_ssc_freq);
1224     }
1225    
1226     -static int __init intel_no_opregion_vbt_callback(const struct dmi_system_id *id)
1227     +static int intel_no_opregion_vbt_callback(const struct dmi_system_id *id)
1228     {
1229     DRM_DEBUG_KMS("Falling back to manually reading VBT from "
1230     "VBIOS ROM for %s\n",
1231     diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
1232     index 4a809969c5ac..53435a9d847e 100644
1233     --- a/drivers/gpu/drm/i915/intel_crt.c
1234     +++ b/drivers/gpu/drm/i915/intel_crt.c
1235     @@ -702,7 +702,7 @@ static const struct drm_encoder_funcs intel_crt_enc_funcs = {
1236     .destroy = intel_encoder_destroy,
1237     };
1238    
1239     -static int __init intel_no_crt_dmi_callback(const struct dmi_system_id *id)
1240     +static int intel_no_crt_dmi_callback(const struct dmi_system_id *id)
1241     {
1242     DRM_INFO("Skipping CRT initialization for %s\n", id->ident);
1243     return 1;
1244     diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
1245     index f77d42f74427..08e8e18b3f85 100644
1246     --- a/drivers/gpu/drm/i915/intel_lvds.c
1247     +++ b/drivers/gpu/drm/i915/intel_lvds.c
1248     @@ -694,7 +694,7 @@ static const struct drm_encoder_funcs intel_lvds_enc_funcs = {
1249     .destroy = intel_encoder_destroy,
1250     };
1251    
1252     -static int __init intel_no_lvds_dmi_callback(const struct dmi_system_id *id)
1253     +static int intel_no_lvds_dmi_callback(const struct dmi_system_id *id)
1254     {
1255     DRM_INFO("Skipping LVDS initialization for %s\n", id->ident);
1256     return 1;
1257     diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
1258     index 629527d205de..4605c3877c95 100644
1259     --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
1260     +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
1261     @@ -396,6 +396,9 @@ static int init_ring_common(struct intel_ring_buffer *ring)
1262     }
1263     }
1264    
1265     + /* Enforce ordering by reading HEAD register back */
1266     + I915_READ_HEAD(ring);
1267     +
1268     /* Initialize the ring. This must happen _after_ we've cleared the ring
1269     * registers with the above sequence (the readback of the HEAD registers
1270     * also enforces ordering), otherwise the hw might lose the new ring
1271     diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
1272     index a202d8d08c56..7c4e3126df27 100644
1273     --- a/drivers/gpu/drm/i915/intel_tv.c
1274     +++ b/drivers/gpu/drm/i915/intel_tv.c
1275     @@ -856,6 +856,10 @@ intel_enable_tv(struct intel_encoder *encoder)
1276     struct drm_device *dev = encoder->base.dev;
1277     struct drm_i915_private *dev_priv = dev->dev_private;
1278    
1279     + /* Prevents vblank waits from timing out in intel_tv_detect_type() */
1280     + intel_wait_for_vblank(encoder->base.dev,
1281     + to_intel_crtc(encoder->base.crtc)->pipe);
1282     +
1283     I915_WRITE(TV_CTL, I915_READ(TV_CTL) | TV_ENC_ENABLE);
1284     }
1285    
1286     diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
1287     index efb06e34aed7..ba2ab9a9b988 100644
1288     --- a/drivers/gpu/drm/radeon/radeon_atombios.c
1289     +++ b/drivers/gpu/drm/radeon/radeon_atombios.c
1290     @@ -463,6 +463,13 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,
1291     }
1292     }
1293    
1294     + /* Fujitsu D3003-S2 board lists DVI-I as DVI-I and VGA */
1295     + if ((dev->pdev->device == 0x9805) &&
1296     + (dev->pdev->subsystem_vendor == 0x1734) &&
1297     + (dev->pdev->subsystem_device == 0x11bd)) {
1298     + if (*connector_type == DRM_MODE_CONNECTOR_VGA)
1299     + return false;
1300     + }
1301    
1302     return true;
1303     }
1304     @@ -1908,7 +1915,7 @@ static const char *thermal_controller_names[] = {
1305     "adm1032",
1306     "adm1030",
1307     "max6649",
1308     - "lm64",
1309     + "lm63", /* lm64 */
1310     "f75375",
1311     "asc7xxx",
1312     };
1313     @@ -1919,7 +1926,7 @@ static const char *pp_lib_thermal_controller_names[] = {
1314     "adm1032",
1315     "adm1030",
1316     "max6649",
1317     - "lm64",
1318     + "lm63", /* lm64 */
1319     "f75375",
1320     "RV6xx",
1321     "RV770",
1322     diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
1323     index 2b5461bcd9fb..f060b7487c34 100644
1324     --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
1325     +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
1326     @@ -116,6 +116,7 @@ static int tilcdc_unload(struct drm_device *dev)
1327     struct tilcdc_drm_private *priv = dev->dev_private;
1328     struct tilcdc_module *mod, *cur;
1329    
1330     + drm_fbdev_cma_fini(priv->fbdev);
1331     drm_kms_helper_poll_fini(dev);
1332     drm_mode_config_cleanup(dev);
1333     drm_vblank_cleanup(dev);
1334     @@ -596,10 +597,10 @@ static int __init tilcdc_drm_init(void)
1335     static void __exit tilcdc_drm_fini(void)
1336     {
1337     DBG("fini");
1338     - tilcdc_tfp410_fini();
1339     - tilcdc_slave_fini();
1340     - tilcdc_panel_fini();
1341     platform_driver_unregister(&tilcdc_platform_driver);
1342     + tilcdc_panel_fini();
1343     + tilcdc_slave_fini();
1344     + tilcdc_tfp410_fini();
1345     }
1346    
1347     late_initcall(tilcdc_drm_init);
1348     diff --git a/drivers/gpu/drm/tilcdc/tilcdc_panel.c b/drivers/gpu/drm/tilcdc/tilcdc_panel.c
1349     index 09176654fddb..779d508616d3 100644
1350     --- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c
1351     +++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c
1352     @@ -151,6 +151,7 @@ struct panel_connector {
1353     static void panel_connector_destroy(struct drm_connector *connector)
1354     {
1355     struct panel_connector *panel_connector = to_panel_connector(connector);
1356     + drm_sysfs_connector_remove(connector);
1357     drm_connector_cleanup(connector);
1358     kfree(panel_connector);
1359     }
1360     @@ -285,10 +286,8 @@ static void panel_destroy(struct tilcdc_module *mod)
1361     {
1362     struct panel_module *panel_mod = to_panel_module(mod);
1363    
1364     - if (panel_mod->timings) {
1365     + if (panel_mod->timings)
1366     display_timings_release(panel_mod->timings);
1367     - kfree(panel_mod->timings);
1368     - }
1369    
1370     tilcdc_module_cleanup(mod);
1371     kfree(panel_mod->info);
1372     diff --git a/drivers/gpu/drm/tilcdc/tilcdc_slave.c b/drivers/gpu/drm/tilcdc/tilcdc_slave.c
1373     index db1d2fc9dfb5..5d6c597a5d69 100644
1374     --- a/drivers/gpu/drm/tilcdc/tilcdc_slave.c
1375     +++ b/drivers/gpu/drm/tilcdc/tilcdc_slave.c
1376     @@ -142,6 +142,7 @@ struct slave_connector {
1377     static void slave_connector_destroy(struct drm_connector *connector)
1378     {
1379     struct slave_connector *slave_connector = to_slave_connector(connector);
1380     + drm_sysfs_connector_remove(connector);
1381     drm_connector_cleanup(connector);
1382     kfree(slave_connector);
1383     }
1384     diff --git a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c b/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c
1385     index a36788fbcd98..986131dd9f47 100644
1386     --- a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c
1387     +++ b/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c
1388     @@ -168,6 +168,7 @@ struct tfp410_connector {
1389     static void tfp410_connector_destroy(struct drm_connector *connector)
1390     {
1391     struct tfp410_connector *tfp410_connector = to_tfp410_connector(connector);
1392     + drm_sysfs_connector_remove(connector);
1393     drm_connector_cleanup(connector);
1394     kfree(tfp410_connector);
1395     }
1396     diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
1397     index b8b394319b45..de1a753b1d56 100644
1398     --- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
1399     +++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
1400     @@ -1006,9 +1006,9 @@ EXPORT_SYMBOL_GPL(ttm_dma_unpopulate);
1401     static int ttm_dma_pool_mm_shrink(struct shrinker *shrink,
1402     struct shrink_control *sc)
1403     {
1404     - static atomic_t start_pool = ATOMIC_INIT(0);
1405     + static unsigned start_pool;
1406     unsigned idx = 0;
1407     - unsigned pool_offset = atomic_add_return(1, &start_pool);
1408     + unsigned pool_offset;
1409     unsigned shrink_pages = sc->nr_to_scan;
1410     struct device_pools *p;
1411    
1412     @@ -1016,7 +1016,9 @@ static int ttm_dma_pool_mm_shrink(struct shrinker *shrink,
1413     return 0;
1414    
1415     mutex_lock(&_manager->lock);
1416     - pool_offset = pool_offset % _manager->npools;
1417     + if (!_manager->npools)
1418     + goto out;
1419     + pool_offset = ++start_pool % _manager->npools;
1420     list_for_each_entry(p, &_manager->pools, pools) {
1421     unsigned nr_free;
1422    
1423     @@ -1033,6 +1035,7 @@ static int ttm_dma_pool_mm_shrink(struct shrinker *shrink,
1424     p->pool->dev_name, p->pool->name, current->pid,
1425     nr_free, shrink_pages);
1426     }
1427     +out:
1428     mutex_unlock(&_manager->lock);
1429     /* return estimated number of unused pages in pool */
1430     return ttm_dma_pool_get_num_unused_pages();
1431     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
1432     index 3eb148667d63..89664933861f 100644
1433     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
1434     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
1435     @@ -163,8 +163,9 @@ void vmw_fifo_release(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)
1436    
1437     mutex_lock(&dev_priv->hw_mutex);
1438    
1439     + vmw_write(dev_priv, SVGA_REG_SYNC, SVGA_SYNC_GENERIC);
1440     while (vmw_read(dev_priv, SVGA_REG_BUSY) != 0)
1441     - vmw_write(dev_priv, SVGA_REG_SYNC, SVGA_SYNC_GENERIC);
1442     + ;
1443    
1444     dev_priv->last_read_seqno = ioread32(fifo_mem + SVGA_FIFO_FENCE);
1445    
1446     diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
1447     index 51b1a5088c0d..d4c6d9f85ca5 100644
1448     --- a/drivers/hid/hid-logitech-dj.c
1449     +++ b/drivers/hid/hid-logitech-dj.c
1450     @@ -679,7 +679,6 @@ static int logi_dj_raw_event(struct hid_device *hdev,
1451     struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev);
1452     struct dj_report *dj_report = (struct dj_report *) data;
1453     unsigned long flags;
1454     - bool report_processed = false;
1455    
1456     dbg_hid("%s, size:%d\n", __func__, size);
1457    
1458     @@ -706,34 +705,42 @@ static int logi_dj_raw_event(struct hid_device *hdev,
1459     * device (via hid_input_report() ) and return 1 so hid-core does not do
1460     * anything else with it.
1461     */
1462     +
1463     + /* case 1) */
1464     + if (data[0] != REPORT_ID_DJ_SHORT)
1465     + return false;
1466     +
1467     if ((dj_report->device_index < DJ_DEVICE_INDEX_MIN) ||
1468     (dj_report->device_index > DJ_DEVICE_INDEX_MAX)) {
1469     - dev_err(&hdev->dev, "%s: invalid device index:%d\n",
1470     + /*
1471     + * Device index is wrong, bail out.
1472     + * This driver can ignore safely the receiver notifications,
1473     + * so ignore those reports too.
1474     + */
1475     + if (dj_report->device_index != DJ_RECEIVER_INDEX)
1476     + dev_err(&hdev->dev, "%s: invalid device index:%d\n",
1477     __func__, dj_report->device_index);
1478     return false;
1479     }
1480    
1481     spin_lock_irqsave(&djrcv_dev->lock, flags);
1482     - if (dj_report->report_id == REPORT_ID_DJ_SHORT) {
1483     - switch (dj_report->report_type) {
1484     - case REPORT_TYPE_NOTIF_DEVICE_PAIRED:
1485     - case REPORT_TYPE_NOTIF_DEVICE_UNPAIRED:
1486     - logi_dj_recv_queue_notification(djrcv_dev, dj_report);
1487     - break;
1488     - case REPORT_TYPE_NOTIF_CONNECTION_STATUS:
1489     - if (dj_report->report_params[CONNECTION_STATUS_PARAM_STATUS] ==
1490     - STATUS_LINKLOSS) {
1491     - logi_dj_recv_forward_null_report(djrcv_dev, dj_report);
1492     - }
1493     - break;
1494     - default:
1495     - logi_dj_recv_forward_report(djrcv_dev, dj_report);
1496     + switch (dj_report->report_type) {
1497     + case REPORT_TYPE_NOTIF_DEVICE_PAIRED:
1498     + case REPORT_TYPE_NOTIF_DEVICE_UNPAIRED:
1499     + logi_dj_recv_queue_notification(djrcv_dev, dj_report);
1500     + break;
1501     + case REPORT_TYPE_NOTIF_CONNECTION_STATUS:
1502     + if (dj_report->report_params[CONNECTION_STATUS_PARAM_STATUS] ==
1503     + STATUS_LINKLOSS) {
1504     + logi_dj_recv_forward_null_report(djrcv_dev, dj_report);
1505     }
1506     - report_processed = true;
1507     + break;
1508     + default:
1509     + logi_dj_recv_forward_report(djrcv_dev, dj_report);
1510     }
1511     spin_unlock_irqrestore(&djrcv_dev->lock, flags);
1512    
1513     - return report_processed;
1514     + return true;
1515     }
1516    
1517     static int logi_dj_probe(struct hid_device *hdev,
1518     diff --git a/drivers/hid/hid-logitech-dj.h b/drivers/hid/hid-logitech-dj.h
1519     index 4a4000340ce1..daeb0aa4bee9 100644
1520     --- a/drivers/hid/hid-logitech-dj.h
1521     +++ b/drivers/hid/hid-logitech-dj.h
1522     @@ -27,6 +27,7 @@
1523    
1524     #define DJ_MAX_PAIRED_DEVICES 6
1525     #define DJ_MAX_NUMBER_NOTIFICATIONS 8
1526     +#define DJ_RECEIVER_INDEX 0
1527     #define DJ_DEVICE_INDEX_MIN 1
1528     #define DJ_DEVICE_INDEX_MAX 6
1529    
1530     diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c
1531     index 5bc37343eb22..c24f3dfd9367 100644
1532     --- a/drivers/hid/hid-magicmouse.c
1533     +++ b/drivers/hid/hid-magicmouse.c
1534     @@ -290,6 +290,11 @@ static int magicmouse_raw_event(struct hid_device *hdev,
1535     if (size < 4 || ((size - 4) % 9) != 0)
1536     return 0;
1537     npoints = (size - 4) / 9;
1538     + if (npoints > 15) {
1539     + hid_warn(hdev, "invalid size value (%d) for TRACKPAD_REPORT_ID\n",
1540     + size);
1541     + return 0;
1542     + }
1543     msc->ntouches = 0;
1544     for (ii = 0; ii < npoints; ii++)
1545     magicmouse_emit_touch(msc, ii, data + ii * 9 + 4);
1546     @@ -307,6 +312,11 @@ static int magicmouse_raw_event(struct hid_device *hdev,
1547     if (size < 6 || ((size - 6) % 8) != 0)
1548     return 0;
1549     npoints = (size - 6) / 8;
1550     + if (npoints > 15) {
1551     + hid_warn(hdev, "invalid size value (%d) for MOUSE_REPORT_ID\n",
1552     + size);
1553     + return 0;
1554     + }
1555     msc->ntouches = 0;
1556     for (ii = 0; ii < npoints; ii++)
1557     magicmouse_emit_touch(msc, ii, data + ii * 8 + 6);
1558     diff --git a/drivers/hid/hid-picolcd_core.c b/drivers/hid/hid-picolcd_core.c
1559     index acbb021065ec..020df3c2e8b4 100644
1560     --- a/drivers/hid/hid-picolcd_core.c
1561     +++ b/drivers/hid/hid-picolcd_core.c
1562     @@ -350,6 +350,12 @@ static int picolcd_raw_event(struct hid_device *hdev,
1563     if (!data)
1564     return 1;
1565    
1566     + if (size > 64) {
1567     + hid_warn(hdev, "invalid size value (%d) for picolcd raw event\n",
1568     + size);
1569     + return 0;
1570     + }
1571     +
1572     if (report->id == REPORT_KEY_STATE) {
1573     if (data->input_keys)
1574     ret = picolcd_raw_keypad(data, report, raw_data+1, size-1);
1575     diff --git a/drivers/i2c/busses/i2c-at91.c b/drivers/i2c/busses/i2c-at91.c
1576     index f35ea236497b..b1240a250149 100644
1577     --- a/drivers/i2c/busses/i2c-at91.c
1578     +++ b/drivers/i2c/busses/i2c-at91.c
1579     @@ -102,6 +102,7 @@ struct at91_twi_dev {
1580     unsigned twi_cwgr_reg;
1581     struct at91_twi_pdata *pdata;
1582     bool use_dma;
1583     + bool recv_len_abort;
1584     struct at91_twi_dma dma;
1585     };
1586    
1587     @@ -268,12 +269,24 @@ static void at91_twi_read_next_byte(struct at91_twi_dev *dev)
1588     *dev->buf = at91_twi_read(dev, AT91_TWI_RHR) & 0xff;
1589     --dev->buf_len;
1590    
1591     + /* return if aborting, we only needed to read RHR to clear RXRDY*/
1592     + if (dev->recv_len_abort)
1593     + return;
1594     +
1595     /* handle I2C_SMBUS_BLOCK_DATA */
1596     if (unlikely(dev->msg->flags & I2C_M_RECV_LEN)) {
1597     - dev->msg->flags &= ~I2C_M_RECV_LEN;
1598     - dev->buf_len += *dev->buf;
1599     - dev->msg->len = dev->buf_len + 1;
1600     - dev_dbg(dev->dev, "received block length %d\n", dev->buf_len);
1601     + /* ensure length byte is a valid value */
1602     + if (*dev->buf <= I2C_SMBUS_BLOCK_MAX && *dev->buf > 0) {
1603     + dev->msg->flags &= ~I2C_M_RECV_LEN;
1604     + dev->buf_len += *dev->buf;
1605     + dev->msg->len = dev->buf_len + 1;
1606     + dev_dbg(dev->dev, "received block length %d\n",
1607     + dev->buf_len);
1608     + } else {
1609     + /* abort and send the stop by reading one more byte */
1610     + dev->recv_len_abort = true;
1611     + dev->buf_len = 1;
1612     + }
1613     }
1614    
1615     /* send stop if second but last byte has been read */
1616     @@ -422,8 +435,8 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev)
1617     }
1618     }
1619    
1620     - ret = wait_for_completion_interruptible_timeout(&dev->cmd_complete,
1621     - dev->adapter.timeout);
1622     + ret = wait_for_completion_io_timeout(&dev->cmd_complete,
1623     + dev->adapter.timeout);
1624     if (ret == 0) {
1625     dev_err(dev->dev, "controller timed out\n");
1626     at91_init_twi_bus(dev);
1627     @@ -445,6 +458,12 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev)
1628     ret = -EIO;
1629     goto error;
1630     }
1631     + if (dev->recv_len_abort) {
1632     + dev_err(dev->dev, "invalid smbus block length recvd\n");
1633     + ret = -EPROTO;
1634     + goto error;
1635     + }
1636     +
1637     dev_dbg(dev->dev, "transfer complete\n");
1638    
1639     return 0;
1640     @@ -501,6 +520,7 @@ static int at91_twi_xfer(struct i2c_adapter *adap, struct i2c_msg *msg, int num)
1641     dev->buf_len = m_start->len;
1642     dev->buf = m_start->buf;
1643     dev->msg = m_start;
1644     + dev->recv_len_abort = false;
1645    
1646     ret = at91_do_twi_transfer(dev);
1647    
1648     diff --git a/drivers/iio/adc/ad_sigma_delta.c b/drivers/iio/adc/ad_sigma_delta.c
1649     index f0d6335ae087..05d2733ef48c 100644
1650     --- a/drivers/iio/adc/ad_sigma_delta.c
1651     +++ b/drivers/iio/adc/ad_sigma_delta.c
1652     @@ -477,7 +477,7 @@ static int ad_sd_probe_trigger(struct iio_dev *indio_dev)
1653     goto error_free_irq;
1654    
1655     /* select default trigger */
1656     - indio_dev->trig = sigma_delta->trig;
1657     + indio_dev->trig = iio_trigger_get(sigma_delta->trig);
1658    
1659     return 0;
1660    
1661     diff --git a/drivers/iio/common/st_sensors/st_sensors_trigger.c b/drivers/iio/common/st_sensors/st_sensors_trigger.c
1662     index 8fc3a97eb266..8d8ca6f1e16a 100644
1663     --- a/drivers/iio/common/st_sensors/st_sensors_trigger.c
1664     +++ b/drivers/iio/common/st_sensors/st_sensors_trigger.c
1665     @@ -49,7 +49,7 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
1666     dev_err(&indio_dev->dev, "failed to register iio trigger.\n");
1667     goto iio_trigger_register_error;
1668     }
1669     - indio_dev->trig = sdata->trig;
1670     + indio_dev->trig = iio_trigger_get(sdata->trig);
1671    
1672     return 0;
1673    
1674     diff --git a/drivers/iio/gyro/itg3200_buffer.c b/drivers/iio/gyro/itg3200_buffer.c
1675     index 6c43af9bb0a4..14917fae2d9d 100644
1676     --- a/drivers/iio/gyro/itg3200_buffer.c
1677     +++ b/drivers/iio/gyro/itg3200_buffer.c
1678     @@ -135,7 +135,7 @@ int itg3200_probe_trigger(struct iio_dev *indio_dev)
1679     goto error_free_irq;
1680    
1681     /* select default trigger */
1682     - indio_dev->trig = st->trig;
1683     + indio_dev->trig = iio_trigger_get(st->trig);
1684    
1685     return 0;
1686    
1687     diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
1688     index 03b9372c1212..926fccea8de0 100644
1689     --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
1690     +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
1691     @@ -135,7 +135,7 @@ int inv_mpu6050_probe_trigger(struct iio_dev *indio_dev)
1692     ret = iio_trigger_register(st->trig);
1693     if (ret)
1694     goto error_free_irq;
1695     - indio_dev->trig = st->trig;
1696     + indio_dev->trig = iio_trigger_get(st->trig);
1697    
1698     return 0;
1699    
1700     diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c
1701     index 1e8e94d4db7d..4fc88e617acf 100644
1702     --- a/drivers/iio/inkern.c
1703     +++ b/drivers/iio/inkern.c
1704     @@ -178,7 +178,7 @@ static struct iio_channel *of_iio_channel_get_by_name(struct device_node *np,
1705     index = of_property_match_string(np, "io-channel-names",
1706     name);
1707     chan = of_iio_channel_get(np, index);
1708     - if (!IS_ERR(chan))
1709     + if (!IS_ERR(chan) || PTR_ERR(chan) == -EPROBE_DEFER)
1710     break;
1711     else if (name && index >= 0) {
1712     pr_err("ERROR: could not get IIO channel %s:%s(%i)\n",
1713     diff --git a/drivers/iio/magnetometer/st_magn_core.c b/drivers/iio/magnetometer/st_magn_core.c
1714     index 16f0d6df239f..3ce3769c0823 100644
1715     --- a/drivers/iio/magnetometer/st_magn_core.c
1716     +++ b/drivers/iio/magnetometer/st_magn_core.c
1717     @@ -40,7 +40,8 @@
1718     #define ST_MAGN_FS_AVL_5600MG 5600
1719     #define ST_MAGN_FS_AVL_8000MG 8000
1720     #define ST_MAGN_FS_AVL_8100MG 8100
1721     -#define ST_MAGN_FS_AVL_10000MG 10000
1722     +#define ST_MAGN_FS_AVL_12000MG 12000
1723     +#define ST_MAGN_FS_AVL_16000MG 16000
1724    
1725     /* CUSTOM VALUES FOR SENSOR 1 */
1726     #define ST_MAGN_1_WAI_EXP 0x3c
1727     @@ -67,20 +68,20 @@
1728     #define ST_MAGN_1_FS_AVL_4700_VAL 0x05
1729     #define ST_MAGN_1_FS_AVL_5600_VAL 0x06
1730     #define ST_MAGN_1_FS_AVL_8100_VAL 0x07
1731     -#define ST_MAGN_1_FS_AVL_1300_GAIN_XY 1100
1732     -#define ST_MAGN_1_FS_AVL_1900_GAIN_XY 855
1733     -#define ST_MAGN_1_FS_AVL_2500_GAIN_XY 670
1734     -#define ST_MAGN_1_FS_AVL_4000_GAIN_XY 450
1735     -#define ST_MAGN_1_FS_AVL_4700_GAIN_XY 400
1736     -#define ST_MAGN_1_FS_AVL_5600_GAIN_XY 330
1737     -#define ST_MAGN_1_FS_AVL_8100_GAIN_XY 230
1738     -#define ST_MAGN_1_FS_AVL_1300_GAIN_Z 980
1739     -#define ST_MAGN_1_FS_AVL_1900_GAIN_Z 760
1740     -#define ST_MAGN_1_FS_AVL_2500_GAIN_Z 600
1741     -#define ST_MAGN_1_FS_AVL_4000_GAIN_Z 400
1742     -#define ST_MAGN_1_FS_AVL_4700_GAIN_Z 355
1743     -#define ST_MAGN_1_FS_AVL_5600_GAIN_Z 295
1744     -#define ST_MAGN_1_FS_AVL_8100_GAIN_Z 205
1745     +#define ST_MAGN_1_FS_AVL_1300_GAIN_XY 909
1746     +#define ST_MAGN_1_FS_AVL_1900_GAIN_XY 1169
1747     +#define ST_MAGN_1_FS_AVL_2500_GAIN_XY 1492
1748     +#define ST_MAGN_1_FS_AVL_4000_GAIN_XY 2222
1749     +#define ST_MAGN_1_FS_AVL_4700_GAIN_XY 2500
1750     +#define ST_MAGN_1_FS_AVL_5600_GAIN_XY 3030
1751     +#define ST_MAGN_1_FS_AVL_8100_GAIN_XY 4347
1752     +#define ST_MAGN_1_FS_AVL_1300_GAIN_Z 1020
1753     +#define ST_MAGN_1_FS_AVL_1900_GAIN_Z 1315
1754     +#define ST_MAGN_1_FS_AVL_2500_GAIN_Z 1666
1755     +#define ST_MAGN_1_FS_AVL_4000_GAIN_Z 2500
1756     +#define ST_MAGN_1_FS_AVL_4700_GAIN_Z 2816
1757     +#define ST_MAGN_1_FS_AVL_5600_GAIN_Z 3389
1758     +#define ST_MAGN_1_FS_AVL_8100_GAIN_Z 4878
1759     #define ST_MAGN_1_MULTIREAD_BIT false
1760    
1761     /* CUSTOM VALUES FOR SENSOR 2 */
1762     @@ -103,10 +104,12 @@
1763     #define ST_MAGN_2_FS_MASK 0x60
1764     #define ST_MAGN_2_FS_AVL_4000_VAL 0x00
1765     #define ST_MAGN_2_FS_AVL_8000_VAL 0x01
1766     -#define ST_MAGN_2_FS_AVL_10000_VAL 0x02
1767     -#define ST_MAGN_2_FS_AVL_4000_GAIN 430
1768     -#define ST_MAGN_2_FS_AVL_8000_GAIN 230
1769     -#define ST_MAGN_2_FS_AVL_10000_GAIN 230
1770     +#define ST_MAGN_2_FS_AVL_12000_VAL 0x02
1771     +#define ST_MAGN_2_FS_AVL_16000_VAL 0x03
1772     +#define ST_MAGN_2_FS_AVL_4000_GAIN 146
1773     +#define ST_MAGN_2_FS_AVL_8000_GAIN 292
1774     +#define ST_MAGN_2_FS_AVL_12000_GAIN 438
1775     +#define ST_MAGN_2_FS_AVL_16000_GAIN 584
1776     #define ST_MAGN_2_MULTIREAD_BIT false
1777     #define ST_MAGN_2_OUT_X_L_ADDR 0x28
1778     #define ST_MAGN_2_OUT_Y_L_ADDR 0x2a
1779     @@ -252,9 +255,14 @@ static const struct st_sensors st_magn_sensors[] = {
1780     .gain = ST_MAGN_2_FS_AVL_8000_GAIN,
1781     },
1782     [2] = {
1783     - .num = ST_MAGN_FS_AVL_10000MG,
1784     - .value = ST_MAGN_2_FS_AVL_10000_VAL,
1785     - .gain = ST_MAGN_2_FS_AVL_10000_GAIN,
1786     + .num = ST_MAGN_FS_AVL_12000MG,
1787     + .value = ST_MAGN_2_FS_AVL_12000_VAL,
1788     + .gain = ST_MAGN_2_FS_AVL_12000_GAIN,
1789     + },
1790     + [3] = {
1791     + .num = ST_MAGN_FS_AVL_16000MG,
1792     + .value = ST_MAGN_2_FS_AVL_16000_VAL,
1793     + .gain = ST_MAGN_2_FS_AVL_16000_GAIN,
1794     },
1795     },
1796     },
1797     diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
1798     index 0e93152384f0..acb3865710c2 100644
1799     --- a/drivers/infiniband/ulp/isert/ib_isert.c
1800     +++ b/drivers/infiniband/ulp/isert/ib_isert.c
1801     @@ -404,7 +404,6 @@ isert_connect_request(struct rdma_cm_id *cma_id, struct rdma_cm_event *event)
1802     init_completion(&isert_conn->conn_wait);
1803     init_completion(&isert_conn->conn_wait_comp_err);
1804     kref_init(&isert_conn->conn_kref);
1805     - kref_get(&isert_conn->conn_kref);
1806     mutex_init(&isert_conn->conn_mutex);
1807    
1808     cma_id->context = isert_conn;
1809     @@ -530,7 +529,9 @@ isert_connect_release(struct isert_conn *isert_conn)
1810     static void
1811     isert_connected_handler(struct rdma_cm_id *cma_id)
1812     {
1813     - return;
1814     + struct isert_conn *isert_conn = cma_id->context;
1815     +
1816     + kref_get(&isert_conn->conn_kref);
1817     }
1818    
1819     static void
1820     @@ -582,7 +583,6 @@ isert_disconnect_work(struct work_struct *work)
1821    
1822     wake_up:
1823     complete(&isert_conn->conn_wait);
1824     - isert_put_conn(isert_conn);
1825     }
1826    
1827     static void
1828     @@ -2265,6 +2265,7 @@ static void isert_wait_conn(struct iscsi_conn *conn)
1829     wait_for_completion(&isert_conn->conn_wait_comp_err);
1830    
1831     wait_for_completion(&isert_conn->conn_wait);
1832     + isert_put_conn(isert_conn);
1833     }
1834    
1835     static void isert_free_conn(struct iscsi_conn *conn)
1836     diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
1837     index 2dd1d0dd4f7d..6f5d79569136 100644
1838     --- a/drivers/input/keyboard/atkbd.c
1839     +++ b/drivers/input/keyboard/atkbd.c
1840     @@ -1791,14 +1791,6 @@ static const struct dmi_system_id atkbd_dmi_quirk_table[] __initconst = {
1841     {
1842     .matches = {
1843     DMI_MATCH(DMI_SYS_VENDOR, "LG Electronics"),
1844     - DMI_MATCH(DMI_PRODUCT_NAME, "LW25-B7HV"),
1845     - },
1846     - .callback = atkbd_deactivate_fixup,
1847     - },
1848     - {
1849     - .matches = {
1850     - DMI_MATCH(DMI_SYS_VENDOR, "LG Electronics"),
1851     - DMI_MATCH(DMI_PRODUCT_NAME, "P1-J273B"),
1852     },
1853     .callback = atkbd_deactivate_fixup,
1854     },
1855     diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
1856     index 1913301df08f..85e75239c814 100644
1857     --- a/drivers/input/mouse/elantech.c
1858     +++ b/drivers/input/mouse/elantech.c
1859     @@ -1223,6 +1223,13 @@ static bool elantech_is_signature_valid(const unsigned char *param)
1860     if (param[1] == 0)
1861     return true;
1862    
1863     + /*
1864     + * Some models have a revision higher then 20. Meaning param[2] may
1865     + * be 10 or 20, skip the rates check for these.
1866     + */
1867     + if (param[0] == 0x46 && (param[1] & 0xef) == 0x0f && param[2] < 40)
1868     + return true;
1869     +
1870     for (i = 0; i < ARRAY_SIZE(rates); i++)
1871     if (param[2] == rates[i])
1872     return false;
1873     diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
1874     index f36f7b88f260..d1c47d135c07 100644
1875     --- a/drivers/input/mouse/synaptics.c
1876     +++ b/drivers/input/mouse/synaptics.c
1877     @@ -549,10 +549,61 @@ static int synaptics_parse_hw_state(const unsigned char buf[],
1878     ((buf[0] & 0x04) >> 1) |
1879     ((buf[3] & 0x04) >> 2));
1880    
1881     + if ((SYN_CAP_ADV_GESTURE(priv->ext_cap_0c) ||
1882     + SYN_CAP_IMAGE_SENSOR(priv->ext_cap_0c)) &&
1883     + hw->w == 2) {
1884     + synaptics_parse_agm(buf, priv, hw);
1885     + return 1;
1886     + }
1887     +
1888     + hw->x = (((buf[3] & 0x10) << 8) |
1889     + ((buf[1] & 0x0f) << 8) |
1890     + buf[4]);
1891     + hw->y = (((buf[3] & 0x20) << 7) |
1892     + ((buf[1] & 0xf0) << 4) |
1893     + buf[5]);
1894     + hw->z = buf[2];
1895     +
1896     hw->left = (buf[0] & 0x01) ? 1 : 0;
1897     hw->right = (buf[0] & 0x02) ? 1 : 0;
1898    
1899     - if (SYN_CAP_CLICKPAD(priv->ext_cap_0c)) {
1900     + if (SYN_CAP_FORCEPAD(priv->ext_cap_0c)) {
1901     + /*
1902     + * ForcePads, like Clickpads, use middle button
1903     + * bits to report primary button clicks.
1904     + * Unfortunately they report primary button not
1905     + * only when user presses on the pad above certain
1906     + * threshold, but also when there are more than one
1907     + * finger on the touchpad, which interferes with
1908     + * out multi-finger gestures.
1909     + */
1910     + if (hw->z == 0) {
1911     + /* No contacts */
1912     + priv->press = priv->report_press = false;
1913     + } else if (hw->w >= 4 && ((buf[0] ^ buf[3]) & 0x01)) {
1914     + /*
1915     + * Single-finger touch with pressure above
1916     + * the threshold. If pressure stays long
1917     + * enough, we'll start reporting primary
1918     + * button. We rely on the device continuing
1919     + * sending data even if finger does not
1920     + * move.
1921     + */
1922     + if (!priv->press) {
1923     + priv->press_start = jiffies;
1924     + priv->press = true;
1925     + } else if (time_after(jiffies,
1926     + priv->press_start +
1927     + msecs_to_jiffies(50))) {
1928     + priv->report_press = true;
1929     + }
1930     + } else {
1931     + priv->press = false;
1932     + }
1933     +
1934     + hw->left = priv->report_press;
1935     +
1936     + } else if (SYN_CAP_CLICKPAD(priv->ext_cap_0c)) {
1937     /*
1938     * Clickpad's button is transmitted as middle button,
1939     * however, since it is primary button, we will report
1940     @@ -571,21 +622,6 @@ static int synaptics_parse_hw_state(const unsigned char buf[],
1941     hw->down = ((buf[0] ^ buf[3]) & 0x02) ? 1 : 0;
1942     }
1943    
1944     - if ((SYN_CAP_ADV_GESTURE(priv->ext_cap_0c) ||
1945     - SYN_CAP_IMAGE_SENSOR(priv->ext_cap_0c)) &&
1946     - hw->w == 2) {
1947     - synaptics_parse_agm(buf, priv, hw);
1948     - return 1;
1949     - }
1950     -
1951     - hw->x = (((buf[3] & 0x10) << 8) |
1952     - ((buf[1] & 0x0f) << 8) |
1953     - buf[4]);
1954     - hw->y = (((buf[3] & 0x20) << 7) |
1955     - ((buf[1] & 0xf0) << 4) |
1956     - buf[5]);
1957     - hw->z = buf[2];
1958     -
1959     if (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) &&
1960     ((buf[0] ^ buf[3]) & 0x02)) {
1961     switch (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) & ~0x01) {
1962     diff --git a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h
1963     index e594af0b264b..fb2e076738ae 100644
1964     --- a/drivers/input/mouse/synaptics.h
1965     +++ b/drivers/input/mouse/synaptics.h
1966     @@ -78,6 +78,11 @@
1967     * 2 0x08 image sensor image sensor tracks 5 fingers, but only
1968     * reports 2.
1969     * 2 0x20 report min query 0x0f gives min coord reported
1970     + * 2 0x80 forcepad forcepad is a variant of clickpad that
1971     + * does not have physical buttons but rather
1972     + * uses pressure above certain threshold to
1973     + * report primary clicks. Forcepads also have
1974     + * clickpad bit set.
1975     */
1976     #define SYN_CAP_CLICKPAD(ex0c) ((ex0c) & 0x100000) /* 1-button ClickPad */
1977     #define SYN_CAP_CLICKPAD2BTN(ex0c) ((ex0c) & 0x000100) /* 2-button ClickPad */
1978     @@ -86,6 +91,7 @@
1979     #define SYN_CAP_ADV_GESTURE(ex0c) ((ex0c) & 0x080000)
1980     #define SYN_CAP_REDUCED_FILTERING(ex0c) ((ex0c) & 0x000400)
1981     #define SYN_CAP_IMAGE_SENSOR(ex0c) ((ex0c) & 0x000800)
1982     +#define SYN_CAP_FORCEPAD(ex0c) ((ex0c) & 0x008000)
1983    
1984     /* synaptics modes query bits */
1985     #define SYN_MODE_ABSOLUTE(m) ((m) & (1 << 7))
1986     @@ -177,6 +183,11 @@ struct synaptics_data {
1987     */
1988     struct synaptics_hw_state agm;
1989     bool agm_pending; /* new AGM packet received */
1990     +
1991     + /* ForcePad handling */
1992     + unsigned long press_start;
1993     + bool press;
1994     + bool report_press;
1995     };
1996    
1997     void synaptics_module_init(void);
1998     diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
1999     index 0ec9abbe31fe..1291673bd57e 100644
2000     --- a/drivers/input/serio/i8042-x86ia64io.h
2001     +++ b/drivers/input/serio/i8042-x86ia64io.h
2002     @@ -458,6 +458,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
2003     DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"),
2004     },
2005     },
2006     + {
2007     + /* Avatar AVIU-145A6 */
2008     + .matches = {
2009     + DMI_MATCH(DMI_SYS_VENDOR, "Intel"),
2010     + DMI_MATCH(DMI_PRODUCT_NAME, "IC4I"),
2011     + },
2012     + },
2013     { }
2014     };
2015    
2016     @@ -601,6 +608,14 @@ static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = {
2017     DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"),
2018     },
2019     },
2020     + {
2021     + /* Fujitsu U574 laptop */
2022     + /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */
2023     + .matches = {
2024     + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
2025     + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U574"),
2026     + },
2027     + },
2028     { }
2029     };
2030    
2031     diff --git a/drivers/input/serio/serport.c b/drivers/input/serio/serport.c
2032     index 8755f5f3ad37..e4ecf3b64794 100644
2033     --- a/drivers/input/serio/serport.c
2034     +++ b/drivers/input/serio/serport.c
2035     @@ -21,6 +21,7 @@
2036     #include <linux/init.h>
2037     #include <linux/serio.h>
2038     #include <linux/tty.h>
2039     +#include <linux/compat.h>
2040    
2041     MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
2042     MODULE_DESCRIPTION("Input device TTY line discipline");
2043     @@ -196,28 +197,55 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
2044     return 0;
2045     }
2046    
2047     +static void serport_set_type(struct tty_struct *tty, unsigned long type)
2048     +{
2049     + struct serport *serport = tty->disc_data;
2050     +
2051     + serport->id.proto = type & 0x000000ff;
2052     + serport->id.id = (type & 0x0000ff00) >> 8;
2053     + serport->id.extra = (type & 0x00ff0000) >> 16;
2054     +}
2055     +
2056     /*
2057     * serport_ldisc_ioctl() allows to set the port protocol, and device ID
2058     */
2059    
2060     -static int serport_ldisc_ioctl(struct tty_struct * tty, struct file * file, unsigned int cmd, unsigned long arg)
2061     +static int serport_ldisc_ioctl(struct tty_struct *tty, struct file *file,
2062     + unsigned int cmd, unsigned long arg)
2063     {
2064     - struct serport *serport = (struct serport*) tty->disc_data;
2065     - unsigned long type;
2066     -
2067     if (cmd == SPIOCSTYPE) {
2068     + unsigned long type;
2069     +
2070     if (get_user(type, (unsigned long __user *) arg))
2071     return -EFAULT;
2072    
2073     - serport->id.proto = type & 0x000000ff;
2074     - serport->id.id = (type & 0x0000ff00) >> 8;
2075     - serport->id.extra = (type & 0x00ff0000) >> 16;
2076     + serport_set_type(tty, type);
2077     + return 0;
2078     + }
2079     +
2080     + return -EINVAL;
2081     +}
2082     +
2083     +#ifdef CONFIG_COMPAT
2084     +#define COMPAT_SPIOCSTYPE _IOW('q', 0x01, compat_ulong_t)
2085     +static long serport_ldisc_compat_ioctl(struct tty_struct *tty,
2086     + struct file *file,
2087     + unsigned int cmd, unsigned long arg)
2088     +{
2089     + if (cmd == COMPAT_SPIOCSTYPE) {
2090     + void __user *uarg = compat_ptr(arg);
2091     + compat_ulong_t compat_type;
2092     +
2093     + if (get_user(compat_type, (compat_ulong_t __user *)uarg))
2094     + return -EFAULT;
2095    
2096     + serport_set_type(tty, compat_type);
2097     return 0;
2098     }
2099    
2100     return -EINVAL;
2101     }
2102     +#endif
2103    
2104     static void serport_ldisc_write_wakeup(struct tty_struct * tty)
2105     {
2106     @@ -241,6 +269,9 @@ static struct tty_ldisc_ops serport_ldisc = {
2107     .close = serport_ldisc_close,
2108     .read = serport_ldisc_read,
2109     .ioctl = serport_ldisc_ioctl,
2110     +#ifdef CONFIG_COMPAT
2111     + .compat_ioctl = serport_ldisc_compat_ioctl,
2112     +#endif
2113     .receive_buf = serport_ldisc_receive,
2114     .write_wakeup = serport_ldisc_write_wakeup
2115     };
2116     diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
2117     index 5177ba54559b..7409d79729ee 100644
2118     --- a/drivers/md/dm-crypt.c
2119     +++ b/drivers/md/dm-crypt.c
2120     @@ -1506,6 +1506,7 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
2121     unsigned int key_size, opt_params;
2122     unsigned long long tmpll;
2123     int ret;
2124     + size_t iv_size_padding;
2125     struct dm_arg_set as;
2126     const char *opt_string;
2127     char dummy;
2128     @@ -1542,12 +1543,23 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
2129    
2130     cc->dmreq_start = sizeof(struct ablkcipher_request);
2131     cc->dmreq_start += crypto_ablkcipher_reqsize(any_tfm(cc));
2132     - cc->dmreq_start = ALIGN(cc->dmreq_start, crypto_tfm_ctx_alignment());
2133     - cc->dmreq_start += crypto_ablkcipher_alignmask(any_tfm(cc)) &
2134     - ~(crypto_tfm_ctx_alignment() - 1);
2135     + cc->dmreq_start = ALIGN(cc->dmreq_start, __alignof__(struct dm_crypt_request));
2136     +
2137     + if (crypto_ablkcipher_alignmask(any_tfm(cc)) < CRYPTO_MINALIGN) {
2138     + /* Allocate the padding exactly */
2139     + iv_size_padding = -(cc->dmreq_start + sizeof(struct dm_crypt_request))
2140     + & crypto_ablkcipher_alignmask(any_tfm(cc));
2141     + } else {
2142     + /*
2143     + * If the cipher requires greater alignment than kmalloc
2144     + * alignment, we don't know the exact position of the
2145     + * initialization vector. We must assume worst case.
2146     + */
2147     + iv_size_padding = crypto_ablkcipher_alignmask(any_tfm(cc));
2148     + }
2149    
2150     cc->req_pool = mempool_create_kmalloc_pool(MIN_IOS, cc->dmreq_start +
2151     - sizeof(struct dm_crypt_request) + cc->iv_size);
2152     + sizeof(struct dm_crypt_request) + iv_size_padding + cc->iv_size);
2153     if (!cc->req_pool) {
2154     ti->error = "Cannot allocate crypt request mempool";
2155     goto bad;
2156     diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
2157     index a176791509f6..e885dbf08c40 100644
2158     --- a/drivers/md/raid1.c
2159     +++ b/drivers/md/raid1.c
2160     @@ -2051,7 +2051,7 @@ static void fix_read_error(struct r1conf *conf, int read_disk,
2161     d--;
2162     rdev = conf->mirrors[d].rdev;
2163     if (rdev &&
2164     - test_bit(In_sync, &rdev->flags))
2165     + !test_bit(Faulty, &rdev->flags))
2166     r1_sync_page_io(rdev, sect, s,
2167     conf->tmppage, WRITE);
2168     }
2169     @@ -2063,7 +2063,7 @@ static void fix_read_error(struct r1conf *conf, int read_disk,
2170     d--;
2171     rdev = conf->mirrors[d].rdev;
2172     if (rdev &&
2173     - test_bit(In_sync, &rdev->flags)) {
2174     + !test_bit(Faulty, &rdev->flags)) {
2175     if (r1_sync_page_io(rdev, sect, s,
2176     conf->tmppage, READ)) {
2177     atomic_add(s, &rdev->corrected_errors);
2178     diff --git a/drivers/media/pci/cx18/cx18-driver.c b/drivers/media/pci/cx18/cx18-driver.c
2179     index 16e89f026bca..018cb9045330 100644
2180     --- a/drivers/media/pci/cx18/cx18-driver.c
2181     +++ b/drivers/media/pci/cx18/cx18-driver.c
2182     @@ -1092,6 +1092,7 @@ static int cx18_probe(struct pci_dev *pci_dev,
2183     setup.addr = ADDR_UNSET;
2184     setup.type = cx->options.tuner;
2185     setup.mode_mask = T_ANALOG_TV; /* matches TV tuners */
2186     + setup.config = NULL;
2187     if (cx->options.radio > 0)
2188     setup.mode_mask |= T_RADIO;
2189     setup.tuner_callback = (setup.type == TUNER_XC2028) ?
2190     diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
2191     index 70fd55968844..040ecf2027cd 100644
2192     --- a/drivers/net/ethernet/ibm/ibmveth.c
2193     +++ b/drivers/net/ethernet/ibm/ibmveth.c
2194     @@ -293,6 +293,18 @@ failure:
2195     atomic_add(buffers_added, &(pool->available));
2196     }
2197    
2198     +/*
2199     + * The final 8 bytes of the buffer list is a counter of frames dropped
2200     + * because there was not a buffer in the buffer list capable of holding
2201     + * the frame.
2202     + */
2203     +static void ibmveth_update_rx_no_buffer(struct ibmveth_adapter *adapter)
2204     +{
2205     + __be64 *p = adapter->buffer_list_addr + 4096 - 8;
2206     +
2207     + adapter->rx_no_buffer = be64_to_cpup(p);
2208     +}
2209     +
2210     /* replenish routine */
2211     static void ibmveth_replenish_task(struct ibmveth_adapter *adapter)
2212     {
2213     @@ -308,8 +320,7 @@ static void ibmveth_replenish_task(struct ibmveth_adapter *adapter)
2214     ibmveth_replenish_buffer_pool(adapter, pool);
2215     }
2216    
2217     - adapter->rx_no_buffer = *(u64 *)(((char*)adapter->buffer_list_addr) +
2218     - 4096 - 8);
2219     + ibmveth_update_rx_no_buffer(adapter);
2220     }
2221    
2222     /* empty and free ana buffer pool - also used to do cleanup in error paths */
2223     @@ -689,8 +700,7 @@ static int ibmveth_close(struct net_device *netdev)
2224    
2225     free_irq(netdev->irq, netdev);
2226    
2227     - adapter->rx_no_buffer = *(u64 *)(((char *)adapter->buffer_list_addr) +
2228     - 4096 - 8);
2229     + ibmveth_update_rx_no_buffer(adapter);
2230    
2231     ibmveth_cleanup(adapter);
2232    
2233     diff --git a/drivers/net/wireless/ath/carl9170/carl9170.h b/drivers/net/wireless/ath/carl9170/carl9170.h
2234     index 9dce106cd6d4..95a334f0719c 100644
2235     --- a/drivers/net/wireless/ath/carl9170/carl9170.h
2236     +++ b/drivers/net/wireless/ath/carl9170/carl9170.h
2237     @@ -253,6 +253,7 @@ struct ar9170 {
2238     atomic_t rx_work_urbs;
2239     atomic_t rx_pool_urbs;
2240     kernel_ulong_t features;
2241     + bool usb_ep_cmd_is_bulk;
2242    
2243     /* firmware settings */
2244     struct completion fw_load_wait;
2245     diff --git a/drivers/net/wireless/ath/carl9170/usb.c b/drivers/net/wireless/ath/carl9170/usb.c
2246     index 307bc0ddff99..83d20c8b2ad7 100644
2247     --- a/drivers/net/wireless/ath/carl9170/usb.c
2248     +++ b/drivers/net/wireless/ath/carl9170/usb.c
2249     @@ -621,9 +621,16 @@ int __carl9170_exec_cmd(struct ar9170 *ar, struct carl9170_cmd *cmd,
2250     goto err_free;
2251     }
2252    
2253     - usb_fill_int_urb(urb, ar->udev, usb_sndintpipe(ar->udev,
2254     - AR9170_USB_EP_CMD), cmd, cmd->hdr.len + 4,
2255     - carl9170_usb_cmd_complete, ar, 1);
2256     + if (ar->usb_ep_cmd_is_bulk)
2257     + usb_fill_bulk_urb(urb, ar->udev,
2258     + usb_sndbulkpipe(ar->udev, AR9170_USB_EP_CMD),
2259     + cmd, cmd->hdr.len + 4,
2260     + carl9170_usb_cmd_complete, ar);
2261     + else
2262     + usb_fill_int_urb(urb, ar->udev,
2263     + usb_sndintpipe(ar->udev, AR9170_USB_EP_CMD),
2264     + cmd, cmd->hdr.len + 4,
2265     + carl9170_usb_cmd_complete, ar, 1);
2266    
2267     if (free_buf)
2268     urb->transfer_flags |= URB_FREE_BUFFER;
2269     @@ -1032,9 +1039,10 @@ static void carl9170_usb_firmware_step2(const struct firmware *fw,
2270     static int carl9170_usb_probe(struct usb_interface *intf,
2271     const struct usb_device_id *id)
2272     {
2273     + struct usb_endpoint_descriptor *ep;
2274     struct ar9170 *ar;
2275     struct usb_device *udev;
2276     - int err;
2277     + int i, err;
2278    
2279     err = usb_reset_device(interface_to_usbdev(intf));
2280     if (err)
2281     @@ -1050,6 +1058,21 @@ static int carl9170_usb_probe(struct usb_interface *intf,
2282     ar->intf = intf;
2283     ar->features = id->driver_info;
2284    
2285     + /* We need to remember the type of endpoint 4 because it differs
2286     + * between high- and full-speed configuration. The high-speed
2287     + * configuration specifies it as interrupt and the full-speed
2288     + * configuration as bulk endpoint. This information is required
2289     + * later when sending urbs to that endpoint.
2290     + */
2291     + for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; ++i) {
2292     + ep = &intf->cur_altsetting->endpoint[i].desc;
2293     +
2294     + if (usb_endpoint_num(ep) == AR9170_USB_EP_CMD &&
2295     + usb_endpoint_dir_out(ep) &&
2296     + usb_endpoint_type(ep) == USB_ENDPOINT_XFER_BULK)
2297     + ar->usb_ep_cmd_is_bulk = true;
2298     + }
2299     +
2300     usb_set_intfdata(intf, ar);
2301     SET_IEEE80211_DEV(ar->hw, &intf->dev);
2302    
2303     diff --git a/drivers/net/wireless/iwlwifi/dvm/rxon.c b/drivers/net/wireless/iwlwifi/dvm/rxon.c
2304     index ca17e4c9eca2..cd1ad0019185 100644
2305     --- a/drivers/net/wireless/iwlwifi/dvm/rxon.c
2306     +++ b/drivers/net/wireless/iwlwifi/dvm/rxon.c
2307     @@ -1072,6 +1072,13 @@ int iwlagn_commit_rxon(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
2308     /* recalculate basic rates */
2309     iwl_calc_basic_rates(priv, ctx);
2310    
2311     + /*
2312     + * force CTS-to-self frames protection if RTS-CTS is not preferred
2313     + * one aggregation protection method
2314     + */
2315     + if (!priv->hw_params.use_rts_for_aggregation)
2316     + ctx->staging.flags |= RXON_FLG_SELF_CTS_EN;
2317     +
2318     if ((ctx->vif && ctx->vif->bss_conf.use_short_slot) ||
2319     !(ctx->staging.flags & RXON_FLG_BAND_24G_MSK))
2320     ctx->staging.flags |= RXON_FLG_SHORT_SLOT_MSK;
2321     @@ -1477,6 +1484,11 @@ void iwlagn_bss_info_changed(struct ieee80211_hw *hw,
2322     else
2323     ctx->staging.flags &= ~RXON_FLG_TGG_PROTECT_MSK;
2324    
2325     + if (bss_conf->use_cts_prot)
2326     + ctx->staging.flags |= RXON_FLG_SELF_CTS_EN;
2327     + else
2328     + ctx->staging.flags &= ~RXON_FLG_SELF_CTS_EN;
2329     +
2330     memcpy(ctx->staging.bssid_addr, bss_conf->bssid, ETH_ALEN);
2331    
2332     if (vif->type == NL80211_IFTYPE_AP ||
2333     diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
2334     index 8188dcb512f0..e7a2af3ad05a 100644
2335     --- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
2336     +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
2337     @@ -316,6 +316,7 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
2338     {RTL_USB_DEVICE(0x0bda, 0x5088, rtl92cu_hal_cfg)}, /*Thinkware-CC&C*/
2339     {RTL_USB_DEVICE(0x0df6, 0x0052, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
2340     {RTL_USB_DEVICE(0x0df6, 0x005c, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
2341     + {RTL_USB_DEVICE(0x0df6, 0x0070, rtl92cu_hal_cfg)}, /*Sitecom - 150N */
2342     {RTL_USB_DEVICE(0x0df6, 0x0077, rtl92cu_hal_cfg)}, /*Sitecom-WLA2100V2*/
2343     {RTL_USB_DEVICE(0x0eb0, 0x9071, rtl92cu_hal_cfg)}, /*NO Brand - Etop*/
2344     {RTL_USB_DEVICE(0x4856, 0x0091, rtl92cu_hal_cfg)}, /*NetweeN - Feixun*/
2345     diff --git a/drivers/nfc/microread/microread.c b/drivers/nfc/microread/microread.c
2346     index 3420d833db17..384ab8ca4b37 100644
2347     --- a/drivers/nfc/microread/microread.c
2348     +++ b/drivers/nfc/microread/microread.c
2349     @@ -501,9 +501,13 @@ static void microread_target_discovered(struct nfc_hci_dev *hdev, u8 gate,
2350     targets->sens_res =
2351     be16_to_cpu(*(u16 *)&skb->data[MICROREAD_EMCF_A_ATQA]);
2352     targets->sel_res = skb->data[MICROREAD_EMCF_A_SAK];
2353     - memcpy(targets->nfcid1, &skb->data[MICROREAD_EMCF_A_UID],
2354     - skb->data[MICROREAD_EMCF_A_LEN]);
2355     targets->nfcid1_len = skb->data[MICROREAD_EMCF_A_LEN];
2356     + if (targets->nfcid1_len > sizeof(targets->nfcid1)) {
2357     + r = -EINVAL;
2358     + goto exit_free;
2359     + }
2360     + memcpy(targets->nfcid1, &skb->data[MICROREAD_EMCF_A_UID],
2361     + targets->nfcid1_len);
2362     break;
2363     case MICROREAD_GATE_ID_MREAD_ISO_A_3:
2364     targets->supported_protocols =
2365     @@ -511,9 +515,13 @@ static void microread_target_discovered(struct nfc_hci_dev *hdev, u8 gate,
2366     targets->sens_res =
2367     be16_to_cpu(*(u16 *)&skb->data[MICROREAD_EMCF_A3_ATQA]);
2368     targets->sel_res = skb->data[MICROREAD_EMCF_A3_SAK];
2369     - memcpy(targets->nfcid1, &skb->data[MICROREAD_EMCF_A3_UID],
2370     - skb->data[MICROREAD_EMCF_A3_LEN]);
2371     targets->nfcid1_len = skb->data[MICROREAD_EMCF_A3_LEN];
2372     + if (targets->nfcid1_len > sizeof(targets->nfcid1)) {
2373     + r = -EINVAL;
2374     + goto exit_free;
2375     + }
2376     + memcpy(targets->nfcid1, &skb->data[MICROREAD_EMCF_A3_UID],
2377     + targets->nfcid1_len);
2378     break;
2379     case MICROREAD_GATE_ID_MREAD_ISO_B:
2380     targets->supported_protocols = NFC_PROTO_ISO14443_B_MASK;
2381     diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
2382     index 5de946984500..f91d41788ce4 100644
2383     --- a/drivers/scsi/libiscsi.c
2384     +++ b/drivers/scsi/libiscsi.c
2385     @@ -717,11 +717,21 @@ __iscsi_conn_send_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
2386     return NULL;
2387     }
2388    
2389     + if (data_size > ISCSI_DEF_MAX_RECV_SEG_LEN) {
2390     + iscsi_conn_printk(KERN_ERR, conn, "Invalid buffer len of %u for login task. Max len is %u\n", data_size, ISCSI_DEF_MAX_RECV_SEG_LEN);
2391     + return NULL;
2392     + }
2393     +
2394     task = conn->login_task;
2395     } else {
2396     if (session->state != ISCSI_STATE_LOGGED_IN)
2397     return NULL;
2398    
2399     + if (data_size != 0) {
2400     + iscsi_conn_printk(KERN_ERR, conn, "Can not send data buffer of len %u for op 0x%x\n", data_size, opcode);
2401     + return NULL;
2402     + }
2403     +
2404     BUG_ON(conn->c_stage == ISCSI_CONN_INITIAL_STAGE);
2405     BUG_ON(conn->c_stage == ISCSI_CONN_STOPPED);
2406    
2407     diff --git a/drivers/staging/iio/meter/ade7758_trigger.c b/drivers/staging/iio/meter/ade7758_trigger.c
2408     index 7a94ddd42f59..8c4f2896cd0d 100644
2409     --- a/drivers/staging/iio/meter/ade7758_trigger.c
2410     +++ b/drivers/staging/iio/meter/ade7758_trigger.c
2411     @@ -85,7 +85,7 @@ int ade7758_probe_trigger(struct iio_dev *indio_dev)
2412     ret = iio_trigger_register(st->trig);
2413    
2414     /* select default trigger */
2415     - indio_dev->trig = st->trig;
2416     + indio_dev->trig = iio_trigger_get(st->trig);
2417     if (ret)
2418     goto error_free_irq;
2419    
2420     diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
2421     index 799f84e686b5..651b5768862f 100644
2422     --- a/drivers/target/iscsi/iscsi_target.c
2423     +++ b/drivers/target/iscsi/iscsi_target.c
2424     @@ -4453,6 +4453,7 @@ static void iscsit_logout_post_handler_diffcid(
2425     {
2426     struct iscsi_conn *l_conn;
2427     struct iscsi_session *sess = conn->sess;
2428     + bool conn_found = false;
2429    
2430     if (!sess)
2431     return;
2432     @@ -4461,12 +4462,13 @@ static void iscsit_logout_post_handler_diffcid(
2433     list_for_each_entry(l_conn, &sess->sess_conn_list, conn_list) {
2434     if (l_conn->cid == cid) {
2435     iscsit_inc_conn_usage_count(l_conn);
2436     + conn_found = true;
2437     break;
2438     }
2439     }
2440     spin_unlock_bh(&sess->conn_lock);
2441    
2442     - if (!l_conn)
2443     + if (!conn_found)
2444     return;
2445    
2446     if (l_conn->sock)
2447     diff --git a/drivers/target/iscsi/iscsi_target_parameters.c b/drivers/target/iscsi/iscsi_target_parameters.c
2448     index e38222191a33..30be6c9bdbc6 100644
2449     --- a/drivers/target/iscsi/iscsi_target_parameters.c
2450     +++ b/drivers/target/iscsi/iscsi_target_parameters.c
2451     @@ -603,7 +603,7 @@ int iscsi_copy_param_list(
2452     param_list = kzalloc(sizeof(struct iscsi_param_list), GFP_KERNEL);
2453     if (!param_list) {
2454     pr_err("Unable to allocate memory for struct iscsi_param_list.\n");
2455     - goto err_out;
2456     + return -1;
2457     }
2458     INIT_LIST_HEAD(&param_list->param_list);
2459     INIT_LIST_HEAD(&param_list->extra_response_list);
2460     diff --git a/drivers/tty/serial/8250/8250_dma.c b/drivers/tty/serial/8250/8250_dma.c
2461     index ab9096dc3849..148ffe4c232f 100644
2462     --- a/drivers/tty/serial/8250/8250_dma.c
2463     +++ b/drivers/tty/serial/8250/8250_dma.c
2464     @@ -192,21 +192,28 @@ int serial8250_request_dma(struct uart_8250_port *p)
2465    
2466     dma->rx_buf = dma_alloc_coherent(dma->rxchan->device->dev, dma->rx_size,
2467     &dma->rx_addr, GFP_KERNEL);
2468     - if (!dma->rx_buf) {
2469     - dma_release_channel(dma->rxchan);
2470     - dma_release_channel(dma->txchan);
2471     - return -ENOMEM;
2472     - }
2473     + if (!dma->rx_buf)
2474     + goto err;
2475    
2476     /* TX buffer */
2477     dma->tx_addr = dma_map_single(dma->txchan->device->dev,
2478     p->port.state->xmit.buf,
2479     UART_XMIT_SIZE,
2480     DMA_TO_DEVICE);
2481     + if (dma_mapping_error(dma->txchan->device->dev, dma->tx_addr)) {
2482     + dma_free_coherent(dma->rxchan->device->dev, dma->rx_size,
2483     + dma->rx_buf, dma->rx_addr);
2484     + goto err;
2485     + }
2486    
2487     dev_dbg_ratelimited(p->port.dev, "got both dma channels\n");
2488    
2489     return 0;
2490     +err:
2491     + dma_release_channel(dma->rxchan);
2492     + dma_release_channel(dma->txchan);
2493     +
2494     + return -ENOMEM;
2495     }
2496     EXPORT_SYMBOL_GPL(serial8250_request_dma);
2497    
2498     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
2499     index a5631849017f..b5d42fee8a84 100644
2500     --- a/drivers/usb/core/hub.c
2501     +++ b/drivers/usb/core/hub.c
2502     @@ -1165,7 +1165,8 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type)
2503     /* Tell khubd to disconnect the device or
2504     * check for a new connection
2505     */
2506     - if (udev || (portstatus & USB_PORT_STAT_CONNECTION))
2507     + if (udev || (portstatus & USB_PORT_STAT_CONNECTION) ||
2508     + (portstatus & USB_PORT_STAT_OVERCURRENT))
2509     set_bit(port1, hub->change_bits);
2510    
2511     } else if (portstatus & USB_PORT_STAT_ENABLE) {
2512     @@ -4702,9 +4703,10 @@ static void hub_events(void)
2513    
2514     hub = list_entry(tmp, struct usb_hub, event_list);
2515     kref_get(&hub->kref);
2516     + hdev = hub->hdev;
2517     + usb_get_dev(hdev);
2518     spin_unlock_irq(&hub_event_lock);
2519    
2520     - hdev = hub->hdev;
2521     hub_dev = hub->intfdev;
2522     intf = to_usb_interface(hub_dev);
2523     dev_dbg(hub_dev, "state %d ports %d chg %04x evt %04x\n",
2524     @@ -4919,6 +4921,7 @@ static void hub_events(void)
2525     usb_autopm_put_interface(intf);
2526     loop_disconnected:
2527     usb_unlock_device(hdev);
2528     + usb_put_dev(hdev);
2529     kref_put(&hub->kref, hub_release);
2530    
2531     } /* end while (1) */
2532     diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
2533     index 358375e0b291..1d386030d3c4 100644
2534     --- a/drivers/usb/dwc3/core.c
2535     +++ b/drivers/usb/dwc3/core.c
2536     @@ -603,12 +603,6 @@ static int dwc3_remove(struct platform_device *pdev)
2537     {
2538     struct dwc3 *dwc = platform_get_drvdata(pdev);
2539    
2540     - usb_phy_set_suspend(dwc->usb2_phy, 1);
2541     - usb_phy_set_suspend(dwc->usb3_phy, 1);
2542     -
2543     - pm_runtime_put(&pdev->dev);
2544     - pm_runtime_disable(&pdev->dev);
2545     -
2546     dwc3_debugfs_exit(dwc);
2547    
2548     switch (dwc->mode) {
2549     @@ -629,8 +623,15 @@ static int dwc3_remove(struct platform_device *pdev)
2550    
2551     dwc3_event_buffers_cleanup(dwc);
2552     dwc3_free_event_buffers(dwc);
2553     +
2554     + usb_phy_set_suspend(dwc->usb2_phy, 1);
2555     + usb_phy_set_suspend(dwc->usb3_phy, 1);
2556     +
2557     dwc3_core_exit(dwc);
2558    
2559     + pm_runtime_put_sync(&pdev->dev);
2560     + pm_runtime_disable(&pdev->dev);
2561     +
2562     return 0;
2563     }
2564    
2565     diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
2566     index 34638b92500d..cb5f8c44eb3a 100644
2567     --- a/drivers/usb/dwc3/dwc3-omap.c
2568     +++ b/drivers/usb/dwc3/dwc3-omap.c
2569     @@ -395,9 +395,9 @@ static int dwc3_omap_remove(struct platform_device *pdev)
2570     struct dwc3_omap *omap = platform_get_drvdata(pdev);
2571    
2572     dwc3_omap_disable_irqs(omap);
2573     + device_for_each_child(&pdev->dev, NULL, dwc3_omap_remove_core);
2574     pm_runtime_put_sync(&pdev->dev);
2575     pm_runtime_disable(&pdev->dev);
2576     - device_for_each_child(&pdev->dev, NULL, dwc3_omap_remove_core);
2577    
2578     return 0;
2579     }
2580     diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
2581     index 4518b8189a9e..5a160063176d 100644
2582     --- a/drivers/usb/host/ehci-hcd.c
2583     +++ b/drivers/usb/host/ehci-hcd.c
2584     @@ -972,8 +972,6 @@ rescan:
2585     }
2586    
2587     qh->exception = 1;
2588     - if (ehci->rh_state < EHCI_RH_RUNNING)
2589     - qh->qh_state = QH_STATE_IDLE;
2590     switch (qh->qh_state) {
2591     case QH_STATE_LINKED:
2592     case QH_STATE_COMPLETING:
2593     diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
2594     index 7cdcfd024744..d939376c5dee 100644
2595     --- a/drivers/usb/host/xhci-hub.c
2596     +++ b/drivers/usb/host/xhci-hub.c
2597     @@ -462,7 +462,8 @@ void xhci_test_and_clear_bit(struct xhci_hcd *xhci, __le32 __iomem **port_array,
2598     }
2599    
2600     /* Updates Link Status for super Speed port */
2601     -static void xhci_hub_report_link_state(u32 *status, u32 status_reg)
2602     +static void xhci_hub_report_link_state(struct xhci_hcd *xhci,
2603     + u32 *status, u32 status_reg)
2604     {
2605     u32 pls = status_reg & PORT_PLS_MASK;
2606    
2607     @@ -501,7 +502,8 @@ static void xhci_hub_report_link_state(u32 *status, u32 status_reg)
2608     * in which sometimes the port enters compliance mode
2609     * caused by a delay on the host-device negotiation.
2610     */
2611     - if (pls == USB_SS_PORT_LS_COMP_MOD)
2612     + if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) &&
2613     + (pls == USB_SS_PORT_LS_COMP_MOD))
2614     pls |= USB_PORT_STAT_CONNECTION;
2615     }
2616    
2617     @@ -686,7 +688,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
2618     }
2619     /* Update Port Link State for super speed ports*/
2620     if (hcd->speed == HCD_USB3) {
2621     - xhci_hub_report_link_state(&status, temp);
2622     + xhci_hub_report_link_state(xhci, &status, temp);
2623     /*
2624     * Verify if all USB3 Ports Have entered U0 already.
2625     * Delete Compliance Mode Timer if so.
2626     diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
2627     index d007f0920126..677f032482f7 100644
2628     --- a/drivers/usb/host/xhci-mem.c
2629     +++ b/drivers/usb/host/xhci-mem.c
2630     @@ -1795,7 +1795,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
2631     }
2632    
2633     num_ports = HCS_MAX_PORTS(xhci->hcs_params1);
2634     - for (i = 0; i < num_ports; i++) {
2635     + for (i = 0; i < num_ports && xhci->rh_bw; i++) {
2636     struct xhci_interval_bw_table *bwt = &xhci->rh_bw[i].bw_table;
2637     for (j = 0; j < XHCI_MAX_INTERVAL; j++) {
2638     struct list_head *ep = &bwt->interval_bw[j].endpoints;
2639     diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
2640     index 9a7088bc634d..10223f2b18d2 100644
2641     --- a/drivers/usb/host/xhci.c
2642     +++ b/drivers/usb/host/xhci.c
2643     @@ -4407,13 +4407,21 @@ static int xhci_change_max_exit_latency(struct xhci_hcd *xhci,
2644     int ret;
2645    
2646     spin_lock_irqsave(&xhci->lock, flags);
2647     - if (max_exit_latency == xhci->devs[udev->slot_id]->current_mel) {
2648     +
2649     + virt_dev = xhci->devs[udev->slot_id];
2650     +
2651     + /*
2652     + * virt_dev might not exists yet if xHC resumed from hibernate (S4) and
2653     + * xHC was re-initialized. Exit latency will be set later after
2654     + * hub_port_finish_reset() is done and xhci->devs[] are re-allocated
2655     + */
2656     +
2657     + if (!virt_dev || max_exit_latency == virt_dev->current_mel) {
2658     spin_unlock_irqrestore(&xhci->lock, flags);
2659     return 0;
2660     }
2661    
2662     /* Attempt to issue an Evaluate Context command to change the MEL. */
2663     - virt_dev = xhci->devs[udev->slot_id];
2664     command = xhci->lpm_command;
2665     xhci_slot_copy(xhci, command->in_ctx, virt_dev->out_ctx);
2666     spin_unlock_irqrestore(&xhci->lock, flags);
2667     diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c
2668     index de98906f786d..0aef801edbc1 100644
2669     --- a/drivers/usb/misc/sisusbvga/sisusb.c
2670     +++ b/drivers/usb/misc/sisusbvga/sisusb.c
2671     @@ -3248,6 +3248,7 @@ static const struct usb_device_id sisusb_table[] = {
2672     { USB_DEVICE(0x0711, 0x0918) },
2673     { USB_DEVICE(0x0711, 0x0920) },
2674     { USB_DEVICE(0x0711, 0x0950) },
2675     + { USB_DEVICE(0x0711, 0x5200) },
2676     { USB_DEVICE(0x182d, 0x021c) },
2677     { USB_DEVICE(0x182d, 0x0269) },
2678     { }
2679     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
2680     index 120fff399c10..4235693ba2f7 100644
2681     --- a/drivers/usb/serial/ftdi_sio.c
2682     +++ b/drivers/usb/serial/ftdi_sio.c
2683     @@ -744,6 +744,7 @@ static struct usb_device_id id_table_combined [] = {
2684     { USB_DEVICE(FTDI_VID, FTDI_NDI_AURORA_SCU_PID),
2685     .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
2686     { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) },
2687     + { USB_DEVICE(NOVITUS_VID, NOVITUS_BONO_E_PID) },
2688     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S03_PID) },
2689     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_59_PID) },
2690     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57A_PID) },
2691     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
2692     index 70b0b1d88ae9..8927a5c39b00 100644
2693     --- a/drivers/usb/serial/ftdi_sio_ids.h
2694     +++ b/drivers/usb/serial/ftdi_sio_ids.h
2695     @@ -837,6 +837,12 @@
2696     #define TELLDUS_TELLSTICK_PID 0x0C30 /* RF control dongle 433 MHz using FT232RL */
2697    
2698     /*
2699     + * NOVITUS printers
2700     + */
2701     +#define NOVITUS_VID 0x1a28
2702     +#define NOVITUS_BONO_E_PID 0x6010
2703     +
2704     +/*
2705     * RT Systems programming cables for various ham radios
2706     */
2707     #define RTSYSTEMS_VID 0x2100 /* Vendor ID */
2708     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
2709     index 9da566a3f5c8..e47aabe0c760 100644
2710     --- a/drivers/usb/serial/option.c
2711     +++ b/drivers/usb/serial/option.c
2712     @@ -275,8 +275,12 @@ static void option_instat_callback(struct urb *urb);
2713     #define ZTE_PRODUCT_MF622 0x0001
2714     #define ZTE_PRODUCT_MF628 0x0015
2715     #define ZTE_PRODUCT_MF626 0x0031
2716     -#define ZTE_PRODUCT_MC2718 0xffe8
2717     #define ZTE_PRODUCT_AC2726 0xfff1
2718     +#define ZTE_PRODUCT_CDMA_TECH 0xfffe
2719     +#define ZTE_PRODUCT_AC8710T 0xffff
2720     +#define ZTE_PRODUCT_MC2718 0xffe8
2721     +#define ZTE_PRODUCT_AD3812 0xffeb
2722     +#define ZTE_PRODUCT_MC2716 0xffed
2723    
2724     #define BENQ_VENDOR_ID 0x04a5
2725     #define BENQ_PRODUCT_H10 0x4068
2726     @@ -494,6 +498,10 @@ static void option_instat_callback(struct urb *urb);
2727     #define INOVIA_VENDOR_ID 0x20a6
2728     #define INOVIA_SEW858 0x1105
2729    
2730     +/* VIA Telecom */
2731     +#define VIATELECOM_VENDOR_ID 0x15eb
2732     +#define VIATELECOM_PRODUCT_CDS7 0x0001
2733     +
2734     /* some devices interfaces need special handling due to a number of reasons */
2735     enum option_blacklist_reason {
2736     OPTION_BLACKLIST_NONE = 0,
2737     @@ -527,10 +535,18 @@ static const struct option_blacklist_info zte_k3765_z_blacklist = {
2738     .reserved = BIT(4),
2739     };
2740    
2741     +static const struct option_blacklist_info zte_ad3812_z_blacklist = {
2742     + .sendsetup = BIT(0) | BIT(1) | BIT(2),
2743     +};
2744     +
2745     static const struct option_blacklist_info zte_mc2718_z_blacklist = {
2746     .sendsetup = BIT(1) | BIT(2) | BIT(3) | BIT(4),
2747     };
2748    
2749     +static const struct option_blacklist_info zte_mc2716_z_blacklist = {
2750     + .sendsetup = BIT(1) | BIT(2) | BIT(3),
2751     +};
2752     +
2753     static const struct option_blacklist_info huawei_cdc12_blacklist = {
2754     .reserved = BIT(1) | BIT(2),
2755     };
2756     @@ -1070,6 +1086,7 @@ static const struct usb_device_id option_ids[] = {
2757     { USB_DEVICE_INTERFACE_CLASS(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1012, 0xff) },
2758     { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC650) },
2759     { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
2760     + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */
2761     { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
2762     { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */
2763     { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */
2764     @@ -1544,13 +1561,18 @@ static const struct usb_device_id option_ids[] = {
2765     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff93, 0xff, 0xff, 0xff) },
2766     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff94, 0xff, 0xff, 0xff) },
2767    
2768     - /* NOTE: most ZTE CDMA devices should be driven by zte_ev, not option */
2769     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH, 0xff, 0xff, 0xff) },
2770     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) },
2771     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710T, 0xff, 0xff, 0xff) },
2772     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2718, 0xff, 0xff, 0xff),
2773     .driver_info = (kernel_ulong_t)&zte_mc2718_z_blacklist },
2774     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AD3812, 0xff, 0xff, 0xff),
2775     + .driver_info = (kernel_ulong_t)&zte_ad3812_z_blacklist },
2776     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2716, 0xff, 0xff, 0xff),
2777     + .driver_info = (kernel_ulong_t)&zte_mc2716_z_blacklist },
2778     { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x02, 0x01) },
2779     { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x02, 0x05) },
2780     { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x86, 0x10) },
2781     - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) },
2782    
2783     { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
2784     { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) },
2785     @@ -1724,6 +1746,7 @@ static const struct usb_device_id option_ids[] = {
2786     { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */
2787     { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */
2788     { USB_DEVICE(INOVIA_VENDOR_ID, INOVIA_SEW858) },
2789     + { USB_DEVICE(VIATELECOM_VENDOR_ID, VIATELECOM_PRODUCT_CDS7) },
2790     { } /* Terminating entry */
2791     };
2792     MODULE_DEVICE_TABLE(usb, option_ids);
2793     @@ -1917,6 +1940,8 @@ static void option_instat_callback(struct urb *urb)
2794     dev_dbg(dev, "%s: type %x req %x\n", __func__,
2795     req_pkt->bRequestType, req_pkt->bRequest);
2796     }
2797     + } else if (status == -ENOENT || status == -ESHUTDOWN) {
2798     + dev_dbg(dev, "%s: urb stopped: %d\n", __func__, status);
2799     } else
2800     dev_err(dev, "%s: error %d\n", __func__, status);
2801    
2802     diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
2803     index a0b58e252073..de3e15d8eb10 100644
2804     --- a/drivers/usb/serial/pl2303.c
2805     +++ b/drivers/usb/serial/pl2303.c
2806     @@ -47,6 +47,7 @@ static const struct usb_device_id id_table[] = {
2807     { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) },
2808     { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_HCR331) },
2809     { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MOTOROLA) },
2810     + { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ZTEK) },
2811     { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
2812     { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
2813     { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
2814     diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
2815     index 42bc082896ac..71fd9da1d6e7 100644
2816     --- a/drivers/usb/serial/pl2303.h
2817     +++ b/drivers/usb/serial/pl2303.h
2818     @@ -22,6 +22,7 @@
2819     #define PL2303_PRODUCT_ID_GPRS 0x0609
2820     #define PL2303_PRODUCT_ID_HCR331 0x331a
2821     #define PL2303_PRODUCT_ID_MOTOROLA 0x0307
2822     +#define PL2303_PRODUCT_ID_ZTEK 0xe1f1
2823    
2824     #define ATEN_VENDOR_ID 0x0557
2825     #define ATEN_VENDOR_ID2 0x0547
2826     diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
2827     index 4e4590854123..5aaa2b675116 100644
2828     --- a/drivers/usb/serial/sierra.c
2829     +++ b/drivers/usb/serial/sierra.c
2830     @@ -282,14 +282,19 @@ static const struct usb_device_id id_table[] = {
2831     /* Sierra Wireless HSPA Non-Composite Device */
2832     { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6892, 0xFF, 0xFF, 0xFF)},
2833     { USB_DEVICE(0x1199, 0x6893) }, /* Sierra Wireless Device */
2834     - { USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless Direct IP modems */
2835     + /* Sierra Wireless Direct IP modems */
2836     + { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x68A3, 0xFF, 0xFF, 0xFF),
2837     + .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
2838     + },
2839     + { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x68AA, 0xFF, 0xFF, 0xFF),
2840     .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
2841     },
2842     /* AT&T Direct IP LTE modems */
2843     { USB_DEVICE_AND_INTERFACE_INFO(0x0F3D, 0x68AA, 0xFF, 0xFF, 0xFF),
2844     .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
2845     },
2846     - { USB_DEVICE(0x0f3d, 0x68A3), /* Airprime/Sierra Wireless Direct IP modems */
2847     + /* Airprime/Sierra Wireless Direct IP modems */
2848     + { USB_DEVICE_AND_INTERFACE_INFO(0x0F3D, 0x68A3, 0xFF, 0xFF, 0xFF),
2849     .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
2850     },
2851    
2852     diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
2853     index c1032d42b9d5..80d689f0fda9 100644
2854     --- a/drivers/usb/serial/usb-serial.c
2855     +++ b/drivers/usb/serial/usb-serial.c
2856     @@ -778,29 +778,39 @@ static int usb_serial_probe(struct usb_interface *interface,
2857     if (usb_endpoint_is_bulk_in(endpoint)) {
2858     /* we found a bulk in endpoint */
2859     dev_dbg(ddev, "found bulk in on endpoint %d\n", i);
2860     - bulk_in_endpoint[num_bulk_in] = endpoint;
2861     - ++num_bulk_in;
2862     + if (num_bulk_in < MAX_NUM_PORTS) {
2863     + bulk_in_endpoint[num_bulk_in] = endpoint;
2864     + ++num_bulk_in;
2865     + }
2866     }
2867    
2868     if (usb_endpoint_is_bulk_out(endpoint)) {
2869     /* we found a bulk out endpoint */
2870     dev_dbg(ddev, "found bulk out on endpoint %d\n", i);
2871     - bulk_out_endpoint[num_bulk_out] = endpoint;
2872     - ++num_bulk_out;
2873     + if (num_bulk_out < MAX_NUM_PORTS) {
2874     + bulk_out_endpoint[num_bulk_out] = endpoint;
2875     + ++num_bulk_out;
2876     + }
2877     }
2878    
2879     if (usb_endpoint_is_int_in(endpoint)) {
2880     /* we found a interrupt in endpoint */
2881     dev_dbg(ddev, "found interrupt in on endpoint %d\n", i);
2882     - interrupt_in_endpoint[num_interrupt_in] = endpoint;
2883     - ++num_interrupt_in;
2884     + if (num_interrupt_in < MAX_NUM_PORTS) {
2885     + interrupt_in_endpoint[num_interrupt_in] =
2886     + endpoint;
2887     + ++num_interrupt_in;
2888     + }
2889     }
2890    
2891     if (usb_endpoint_is_int_out(endpoint)) {
2892     /* we found an interrupt out endpoint */
2893     dev_dbg(ddev, "found interrupt out on endpoint %d\n", i);
2894     - interrupt_out_endpoint[num_interrupt_out] = endpoint;
2895     - ++num_interrupt_out;
2896     + if (num_interrupt_out < MAX_NUM_PORTS) {
2897     + interrupt_out_endpoint[num_interrupt_out] =
2898     + endpoint;
2899     + ++num_interrupt_out;
2900     + }
2901     }
2902     }
2903    
2904     @@ -823,8 +833,10 @@ static int usb_serial_probe(struct usb_interface *interface,
2905     if (usb_endpoint_is_int_in(endpoint)) {
2906     /* we found a interrupt in endpoint */
2907     dev_dbg(ddev, "found interrupt in for Prolific device on separate interface\n");
2908     - interrupt_in_endpoint[num_interrupt_in] = endpoint;
2909     - ++num_interrupt_in;
2910     + if (num_interrupt_in < MAX_NUM_PORTS) {
2911     + interrupt_in_endpoint[num_interrupt_in] = endpoint;
2912     + ++num_interrupt_in;
2913     + }
2914     }
2915     }
2916     }
2917     @@ -864,6 +876,11 @@ static int usb_serial_probe(struct usb_interface *interface,
2918     num_ports = type->num_ports;
2919     }
2920    
2921     + if (num_ports > MAX_NUM_PORTS) {
2922     + dev_warn(ddev, "too many ports requested: %d\n", num_ports);
2923     + num_ports = MAX_NUM_PORTS;
2924     + }
2925     +
2926     serial->num_ports = num_ports;
2927     serial->num_bulk_in = num_bulk_in;
2928     serial->num_bulk_out = num_bulk_out;
2929     diff --git a/drivers/usb/serial/zte_ev.c b/drivers/usb/serial/zte_ev.c
2930     index eae2c873b39f..d6a3fbd029be 100644
2931     --- a/drivers/usb/serial/zte_ev.c
2932     +++ b/drivers/usb/serial/zte_ev.c
2933     @@ -273,28 +273,16 @@ static void zte_ev_usb_serial_close(struct usb_serial_port *port)
2934     }
2935    
2936     static const struct usb_device_id id_table[] = {
2937     - /* AC8710, AC8710T */
2938     - { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffff, 0xff, 0xff, 0xff) },
2939     - /* AC8700 */
2940     - { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfffe, 0xff, 0xff, 0xff) },
2941     - /* MG880 */
2942     - { USB_DEVICE(0x19d2, 0xfffd) },
2943     - { USB_DEVICE(0x19d2, 0xfffc) },
2944     - { USB_DEVICE(0x19d2, 0xfffb) },
2945     - /* AC8710_V3 */
2946     + { USB_DEVICE(0x19d2, 0xffec) },
2947     + { USB_DEVICE(0x19d2, 0xffee) },
2948     { USB_DEVICE(0x19d2, 0xfff6) },
2949     { USB_DEVICE(0x19d2, 0xfff7) },
2950     { USB_DEVICE(0x19d2, 0xfff8) },
2951     { USB_DEVICE(0x19d2, 0xfff9) },
2952     - { USB_DEVICE(0x19d2, 0xffee) },
2953     - /* AC2716, MC2716 */
2954     - { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffed, 0xff, 0xff, 0xff) },
2955     - /* AD3812 */
2956     - { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffeb, 0xff, 0xff, 0xff) },
2957     - { USB_DEVICE(0x19d2, 0xffec) },
2958     - { USB_DEVICE(0x05C6, 0x3197) },
2959     - { USB_DEVICE(0x05C6, 0x6000) },
2960     - { USB_DEVICE(0x05C6, 0x9008) },
2961     + { USB_DEVICE(0x19d2, 0xfffb) },
2962     + { USB_DEVICE(0x19d2, 0xfffc) },
2963     + /* MG880 */
2964     + { USB_DEVICE(0x19d2, 0xfffd) },
2965     { },
2966     };
2967     MODULE_DEVICE_TABLE(usb, id_table);
2968     diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
2969     index 042c83b01046..7f625306ea80 100644
2970     --- a/drivers/usb/storage/unusual_devs.h
2971     +++ b/drivers/usb/storage/unusual_devs.h
2972     @@ -101,6 +101,12 @@ UNUSUAL_DEV( 0x03f0, 0x4002, 0x0001, 0x0001,
2973     "PhotoSmart R707",
2974     USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_FIX_CAPACITY),
2975    
2976     +UNUSUAL_DEV( 0x03f3, 0x0001, 0x0000, 0x9999,
2977     + "Adaptec",
2978     + "USBConnect 2000",
2979     + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init,
2980     + US_FL_SCM_MULT_TARG ),
2981     +
2982     /* Reported by Sebastian Kapfer <sebastian_kapfer@gmx.net>
2983     * and Olaf Hering <olh@suse.de> (different bcd's, same vendor/product)
2984     * for USB floppies that need the SINGLE_LUN enforcement.
2985     @@ -741,6 +747,12 @@ UNUSUAL_DEV( 0x059b, 0x0001, 0x0100, 0x0100,
2986     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
2987     US_FL_SINGLE_LUN ),
2988    
2989     +UNUSUAL_DEV( 0x059b, 0x0040, 0x0100, 0x0100,
2990     + "Iomega",
2991     + "Jaz USB Adapter",
2992     + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
2993     + US_FL_SINGLE_LUN ),
2994     +
2995     /* Reported by <Hendryk.Pfeiffer@gmx.de> */
2996     UNUSUAL_DEV( 0x059f, 0x0643, 0x0000, 0x0000,
2997     "LaCie",
2998     @@ -1113,6 +1125,18 @@ UNUSUAL_DEV( 0x0851, 0x1543, 0x0200, 0x0200,
2999     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3000     US_FL_NOT_LOCKABLE),
3001    
3002     +UNUSUAL_DEV( 0x085a, 0x0026, 0x0100, 0x0133,
3003     + "Xircom",
3004     + "PortGear USB-SCSI (Mac USB Dock)",
3005     + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init,
3006     + US_FL_SCM_MULT_TARG ),
3007     +
3008     +UNUSUAL_DEV( 0x085a, 0x0028, 0x0100, 0x0133,
3009     + "Xircom",
3010     + "PortGear USB to SCSI Converter",
3011     + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init,
3012     + US_FL_SCM_MULT_TARG ),
3013     +
3014     /* Submitted by Jan De Luyck <lkml@kcore.org> */
3015     UNUSUAL_DEV( 0x08bd, 0x1100, 0x0000, 0x0000,
3016     "CITIZEN",
3017     @@ -1945,6 +1969,14 @@ UNUSUAL_DEV( 0x152d, 0x2329, 0x0100, 0x0100,
3018     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3019     US_FL_IGNORE_RESIDUE | US_FL_SANE_SENSE ),
3020    
3021     +/* Entrega Technologies U1-SC25 (later Xircom PortGear PGSCSI)
3022     + * and Mac USB Dock USB-SCSI */
3023     +UNUSUAL_DEV( 0x1645, 0x0007, 0x0100, 0x0133,
3024     + "Entrega Technologies",
3025     + "USB to SCSI Converter",
3026     + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init,
3027     + US_FL_SCM_MULT_TARG ),
3028     +
3029     /* Reported by Robert Schedel <r.schedel@yahoo.de>
3030     * Note: this is a 'super top' device like the above 14cd/6600 device */
3031     UNUSUAL_DEV( 0x1652, 0x6600, 0x0201, 0x0201,
3032     @@ -1967,6 +1999,12 @@ UNUSUAL_DEV( 0x177f, 0x0400, 0x0000, 0x0000,
3033     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3034     US_FL_BULK_IGNORE_TAG | US_FL_MAX_SECTORS_64 ),
3035    
3036     +UNUSUAL_DEV( 0x1822, 0x0001, 0x0000, 0x9999,
3037     + "Ariston Technologies",
3038     + "iConnect USB to SCSI adapter",
3039     + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init,
3040     + US_FL_SCM_MULT_TARG ),
3041     +
3042     /* Reported by Hans de Goede <hdegoede@redhat.com>
3043     * These Appotech controllers are found in Picture Frames, they provide a
3044     * (buggy) emulation of a cdrom drive which contains the windows software
3045     diff --git a/fs/buffer.c b/fs/buffer.c
3046     index 75964d734444..10fca21ee8aa 100644
3047     --- a/fs/buffer.c
3048     +++ b/fs/buffer.c
3049     @@ -985,7 +985,8 @@ grow_dev_page(struct block_device *bdev, sector_t block,
3050     bh = page_buffers(page);
3051     if (bh->b_size == size) {
3052     end_block = init_page_buffers(page, bdev,
3053     - index << sizebits, size);
3054     + (sector_t)index << sizebits,
3055     + size);
3056     goto done;
3057     }
3058     if (!try_to_free_buffers(page))
3059     @@ -1006,7 +1007,8 @@ grow_dev_page(struct block_device *bdev, sector_t block,
3060     */
3061     spin_lock(&inode->i_mapping->private_lock);
3062     link_dev_buffers(page, bh);
3063     - end_block = init_page_buffers(page, bdev, index << sizebits, size);
3064     + end_block = init_page_buffers(page, bdev, (sector_t)index << sizebits,
3065     + size);
3066     spin_unlock(&inode->i_mapping->private_lock);
3067     done:
3068     ret = (block < end_block) ? 1 : -ENXIO;
3069     diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
3070     index 52480240168e..f74dfa89c4c4 100644
3071     --- a/fs/cifs/cifsglob.h
3072     +++ b/fs/cifs/cifsglob.h
3073     @@ -375,6 +375,8 @@ struct smb_version_operations {
3074     const char *, u32 *);
3075     int (*set_acl)(struct cifs_ntsd *, __u32, struct inode *, const char *,
3076     int);
3077     + /* check if we need to issue closedir */
3078     + bool (*dir_needs_close)(struct cifsFileInfo *);
3079     };
3080    
3081     struct smb_version_values {
3082     diff --git a/fs/cifs/file.c b/fs/cifs/file.c
3083     index 97b03895ac8c..5fcc10fa62bd 100644
3084     --- a/fs/cifs/file.c
3085     +++ b/fs/cifs/file.c
3086     @@ -735,7 +735,7 @@ int cifs_closedir(struct inode *inode, struct file *file)
3087    
3088     cifs_dbg(FYI, "Freeing private data in close dir\n");
3089     spin_lock(&cifs_file_list_lock);
3090     - if (!cfile->srch_inf.endOfSearch && !cfile->invalidHandle) {
3091     + if (server->ops->dir_needs_close(cfile)) {
3092     cfile->invalidHandle = true;
3093     spin_unlock(&cifs_file_list_lock);
3094     if (server->ops->close_dir)
3095     diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
3096     index c9bce9b43855..0dee93706c98 100644
3097     --- a/fs/cifs/inode.c
3098     +++ b/fs/cifs/inode.c
3099     @@ -1640,7 +1640,10 @@ cifs_rename(struct inode *source_dir, struct dentry *source_dentry,
3100     unlink_target:
3101     /* Try unlinking the target dentry if it's not negative */
3102     if (target_dentry->d_inode && (rc == -EACCES || rc == -EEXIST)) {
3103     - tmprc = cifs_unlink(target_dir, target_dentry);
3104     + if (S_ISDIR(target_dentry->d_inode->i_mode))
3105     + tmprc = cifs_rmdir(target_dir, target_dentry);
3106     + else
3107     + tmprc = cifs_unlink(target_dir, target_dentry);
3108     if (tmprc)
3109     goto cifs_rename_exit;
3110     rc = cifs_do_rename(xid, source_dentry, from_name,
3111     diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
3112     index 87d125f682cd..85ebdaa21015 100644
3113     --- a/fs/cifs/readdir.c
3114     +++ b/fs/cifs/readdir.c
3115     @@ -582,7 +582,7 @@ find_cifs_entry(const unsigned int xid, struct cifs_tcon *tcon,
3116     /* close and restart search */
3117     cifs_dbg(FYI, "search backing up - close and restart search\n");
3118     spin_lock(&cifs_file_list_lock);
3119     - if (!cfile->srch_inf.endOfSearch && !cfile->invalidHandle) {
3120     + if (server->ops->dir_needs_close(cfile)) {
3121     cfile->invalidHandle = true;
3122     spin_unlock(&cifs_file_list_lock);
3123     if (server->ops->close_dir)
3124     diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
3125     index 4885a40f3210..610c6c24d41d 100644
3126     --- a/fs/cifs/smb1ops.c
3127     +++ b/fs/cifs/smb1ops.c
3128     @@ -885,6 +885,12 @@ cifs_mand_lock(const unsigned int xid, struct cifsFileInfo *cfile, __u64 offset,
3129     (__u8)type, wait, 0);
3130     }
3131    
3132     +static bool
3133     +cifs_dir_needs_close(struct cifsFileInfo *cfile)
3134     +{
3135     + return !cfile->srch_inf.endOfSearch && !cfile->invalidHandle;
3136     +}
3137     +
3138     struct smb_version_operations smb1_operations = {
3139     .send_cancel = send_nt_cancel,
3140     .compare_fids = cifs_compare_fids,
3141     @@ -948,6 +954,7 @@ struct smb_version_operations smb1_operations = {
3142     .mand_lock = cifs_mand_lock,
3143     .mand_unlock_range = cifs_unlock_range,
3144     .push_mand_locks = cifs_push_mandatory_locks,
3145     + .dir_needs_close = cifs_dir_needs_close,
3146     #ifdef CONFIG_CIFS_XATTR
3147     .query_all_EAs = CIFSSMBQAllEAs,
3148     .set_EA = CIFSSMBSetEA,
3149     diff --git a/fs/cifs/smb2maperror.c b/fs/cifs/smb2maperror.c
3150     index 824696fb24db..4768cf8be6e2 100644
3151     --- a/fs/cifs/smb2maperror.c
3152     +++ b/fs/cifs/smb2maperror.c
3153     @@ -214,7 +214,7 @@ static const struct status_to_posix_error smb2_error_map_table[] = {
3154     {STATUS_BREAKPOINT, -EIO, "STATUS_BREAKPOINT"},
3155     {STATUS_SINGLE_STEP, -EIO, "STATUS_SINGLE_STEP"},
3156     {STATUS_BUFFER_OVERFLOW, -EIO, "STATUS_BUFFER_OVERFLOW"},
3157     - {STATUS_NO_MORE_FILES, -EIO, "STATUS_NO_MORE_FILES"},
3158     + {STATUS_NO_MORE_FILES, -ENODATA, "STATUS_NO_MORE_FILES"},
3159     {STATUS_WAKE_SYSTEM_DEBUGGER, -EIO, "STATUS_WAKE_SYSTEM_DEBUGGER"},
3160     {STATUS_HANDLES_CLOSED, -EIO, "STATUS_HANDLES_CLOSED"},
3161     {STATUS_NO_INHERITANCE, -EIO, "STATUS_NO_INHERITANCE"},
3162     diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
3163     index fe7ac989c6c4..e12f258a5ffa 100644
3164     --- a/fs/cifs/smb2ops.c
3165     +++ b/fs/cifs/smb2ops.c
3166     @@ -554,6 +554,12 @@ smb2_new_lease_key(struct cifs_fid *fid)
3167     get_random_bytes(fid->lease_key, SMB2_LEASE_KEY_SIZE);
3168     }
3169    
3170     +static bool
3171     +smb2_dir_needs_close(struct cifsFileInfo *cfile)
3172     +{
3173     + return !cfile->invalidHandle;
3174     +}
3175     +
3176     struct smb_version_operations smb21_operations = {
3177     .compare_fids = smb2_compare_fids,
3178     .setup_request = smb2_setup_request,
3179     @@ -618,6 +624,7 @@ struct smb_version_operations smb21_operations = {
3180     .set_lease_key = smb2_set_lease_key,
3181     .new_lease_key = smb2_new_lease_key,
3182     .calc_signature = smb2_calc_signature,
3183     + .dir_needs_close = smb2_dir_needs_close,
3184     };
3185    
3186    
3187     @@ -685,6 +692,7 @@ struct smb_version_operations smb30_operations = {
3188     .set_lease_key = smb2_set_lease_key,
3189     .new_lease_key = smb2_new_lease_key,
3190     .calc_signature = smb3_calc_signature,
3191     + .dir_needs_close = smb2_dir_needs_close,
3192     };
3193    
3194     struct smb_version_values smb20_values = {
3195     diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
3196     index e37790841446..eb0de4c3ca76 100644
3197     --- a/fs/cifs/smb2pdu.c
3198     +++ b/fs/cifs/smb2pdu.c
3199     @@ -1800,6 +1800,10 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon,
3200     rsp = (struct smb2_query_directory_rsp *)iov[0].iov_base;
3201    
3202     if (rc) {
3203     + if (rc == -ENODATA && rsp->hdr.Status == STATUS_NO_MORE_FILES) {
3204     + srch_inf->endOfSearch = true;
3205     + rc = 0;
3206     + }
3207     cifs_stats_fail_inc(tcon, SMB2_QUERY_DIRECTORY_HE);
3208     goto qdir_exit;
3209     }
3210     @@ -1837,11 +1841,6 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon,
3211     else
3212     cifs_dbg(VFS, "illegal search buffer type\n");
3213    
3214     - if (rsp->hdr.Status == STATUS_NO_MORE_FILES)
3215     - srch_inf->endOfSearch = 1;
3216     - else
3217     - srch_inf->endOfSearch = 0;
3218     -
3219     return rc;
3220    
3221     qdir_exit:
3222     diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c
3223     index 0a87bb10998d..99d84ce038b8 100644
3224     --- a/fs/ext2/inode.c
3225     +++ b/fs/ext2/inode.c
3226     @@ -632,6 +632,8 @@ static int ext2_get_blocks(struct inode *inode,
3227     int count = 0;
3228     ext2_fsblk_t first_block = 0;
3229    
3230     + BUG_ON(maxblocks == 0);
3231     +
3232     depth = ext2_block_to_path(inode,iblock,offsets,&blocks_to_boundary);
3233    
3234     if (depth == 0)
3235     diff --git a/fs/ext2/xip.c b/fs/ext2/xip.c
3236     index 1c3312858fcf..e98171a11cfe 100644
3237     --- a/fs/ext2/xip.c
3238     +++ b/fs/ext2/xip.c
3239     @@ -35,6 +35,7 @@ __ext2_get_block(struct inode *inode, pgoff_t pgoff, int create,
3240     int rc;
3241    
3242     memset(&tmp, 0, sizeof(struct buffer_head));
3243     + tmp.b_size = 1 << inode->i_blkbits;
3244     rc = ext2_get_block(inode, pgoff, &tmp, create);
3245     *result = tmp.b_blocknr;
3246    
3247     diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c
3248     index d56a9904e52a..9c8a5a6d33df 100644
3249     --- a/fs/lockd/svc.c
3250     +++ b/fs/lockd/svc.c
3251     @@ -253,13 +253,11 @@ static int lockd_up_net(struct svc_serv *serv, struct net *net)
3252    
3253     error = make_socks(serv, net);
3254     if (error < 0)
3255     - goto err_socks;
3256     + goto err_bind;
3257     set_grace_period(net);
3258     dprintk("lockd_up_net: per-net data created; net=%p\n", net);
3259     return 0;
3260    
3261     -err_socks:
3262     - svc_rpcb_cleanup(serv, net);
3263     err_bind:
3264     ln->nlmsvc_users--;
3265     return error;
3266     diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
3267     index 02773aab43c5..cc143ee7a56e 100644
3268     --- a/fs/nfs/nfs4client.c
3269     +++ b/fs/nfs/nfs4client.c
3270     @@ -311,6 +311,16 @@ int nfs40_walk_client_list(struct nfs_client *new,
3271    
3272     spin_lock(&nn->nfs_client_lock);
3273     list_for_each_entry(pos, &nn->nfs_client_list, cl_share_link) {
3274     +
3275     + if (pos->rpc_ops != new->rpc_ops)
3276     + continue;
3277     +
3278     + if (pos->cl_proto != new->cl_proto)
3279     + continue;
3280     +
3281     + if (pos->cl_minorversion != new->cl_minorversion)
3282     + continue;
3283     +
3284     /* If "pos" isn't marked ready, we can't trust the
3285     * remaining fields in "pos" */
3286     if (pos->cl_cons_state > NFS_CS_READY) {
3287     @@ -330,15 +340,6 @@ int nfs40_walk_client_list(struct nfs_client *new,
3288     if (pos->cl_cons_state != NFS_CS_READY)
3289     continue;
3290    
3291     - if (pos->rpc_ops != new->rpc_ops)
3292     - continue;
3293     -
3294     - if (pos->cl_proto != new->cl_proto)
3295     - continue;
3296     -
3297     - if (pos->cl_minorversion != new->cl_minorversion)
3298     - continue;
3299     -
3300     if (pos->cl_clientid != new->cl_clientid)
3301     continue;
3302    
3303     @@ -444,6 +445,16 @@ int nfs41_walk_client_list(struct nfs_client *new,
3304    
3305     spin_lock(&nn->nfs_client_lock);
3306     list_for_each_entry(pos, &nn->nfs_client_list, cl_share_link) {
3307     +
3308     + if (pos->rpc_ops != new->rpc_ops)
3309     + continue;
3310     +
3311     + if (pos->cl_proto != new->cl_proto)
3312     + continue;
3313     +
3314     + if (pos->cl_minorversion != new->cl_minorversion)
3315     + continue;
3316     +
3317     /* If "pos" isn't marked ready, we can't trust the
3318     * remaining fields in "pos", especially the client
3319     * ID and serverowner fields. Wait for CREATE_SESSION
3320     @@ -469,15 +480,6 @@ int nfs41_walk_client_list(struct nfs_client *new,
3321     if (pos->cl_cons_state != NFS_CS_READY)
3322     continue;
3323    
3324     - if (pos->rpc_ops != new->rpc_ops)
3325     - continue;
3326     -
3327     - if (pos->cl_proto != new->cl_proto)
3328     - continue;
3329     -
3330     - if (pos->cl_minorversion != new->cl_minorversion)
3331     - continue;
3332     -
3333     if (!nfs4_match_clientids(pos, new))
3334     continue;
3335    
3336     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
3337     index 25559821771b..3fc87b6f9def 100644
3338     --- a/fs/nfs/nfs4proc.c
3339     +++ b/fs/nfs/nfs4proc.c
3340     @@ -2299,23 +2299,23 @@ static void nfs4_close_prepare(struct rpc_task *task, void *data)
3341     is_rdwr = test_bit(NFS_O_RDWR_STATE, &state->flags);
3342     is_rdonly = test_bit(NFS_O_RDONLY_STATE, &state->flags);
3343     is_wronly = test_bit(NFS_O_WRONLY_STATE, &state->flags);
3344     - /* Calculate the current open share mode */
3345     - calldata->arg.fmode = 0;
3346     - if (is_rdonly || is_rdwr)
3347     - calldata->arg.fmode |= FMODE_READ;
3348     - if (is_wronly || is_rdwr)
3349     - calldata->arg.fmode |= FMODE_WRITE;
3350     /* Calculate the change in open mode */
3351     + calldata->arg.fmode = 0;
3352     if (state->n_rdwr == 0) {
3353     - if (state->n_rdonly == 0) {
3354     - call_close |= is_rdonly || is_rdwr;
3355     - calldata->arg.fmode &= ~FMODE_READ;
3356     - }
3357     - if (state->n_wronly == 0) {
3358     - call_close |= is_wronly || is_rdwr;
3359     - calldata->arg.fmode &= ~FMODE_WRITE;
3360     - }
3361     - }
3362     + if (state->n_rdonly == 0)
3363     + call_close |= is_rdonly;
3364     + else if (is_rdonly)
3365     + calldata->arg.fmode |= FMODE_READ;
3366     + if (state->n_wronly == 0)
3367     + call_close |= is_wronly;
3368     + else if (is_wronly)
3369     + calldata->arg.fmode |= FMODE_WRITE;
3370     + } else if (is_rdwr)
3371     + calldata->arg.fmode |= FMODE_READ|FMODE_WRITE;
3372     +
3373     + if (calldata->arg.fmode == 0)
3374     + call_close |= is_rdwr;
3375     +
3376     if (!nfs4_valid_open_stateid(state))
3377     call_close = 0;
3378     spin_unlock(&state->owner->so_lock);
3379     diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
3380     index bccfec8343c5..2e1372efbb00 100644
3381     --- a/fs/nilfs2/inode.c
3382     +++ b/fs/nilfs2/inode.c
3383     @@ -24,6 +24,7 @@
3384     #include <linux/buffer_head.h>
3385     #include <linux/gfp.h>
3386     #include <linux/mpage.h>
3387     +#include <linux/pagemap.h>
3388     #include <linux/writeback.h>
3389     #include <linux/aio.h>
3390     #include "nilfs.h"
3391     @@ -219,10 +220,10 @@ static int nilfs_writepage(struct page *page, struct writeback_control *wbc)
3392    
3393     static int nilfs_set_page_dirty(struct page *page)
3394     {
3395     + struct inode *inode = page->mapping->host;
3396     int ret = __set_page_dirty_nobuffers(page);
3397    
3398     if (page_has_buffers(page)) {
3399     - struct inode *inode = page->mapping->host;
3400     unsigned nr_dirty = 0;
3401     struct buffer_head *bh, *head;
3402    
3403     @@ -245,6 +246,10 @@ static int nilfs_set_page_dirty(struct page *page)
3404    
3405     if (nr_dirty)
3406     nilfs_set_file_dirty(inode, nr_dirty);
3407     + } else if (ret) {
3408     + unsigned nr_dirty = 1 << (PAGE_CACHE_SHIFT - inode->i_blkbits);
3409     +
3410     + nilfs_set_file_dirty(inode, nr_dirty);
3411     }
3412     return ret;
3413     }
3414     diff --git a/fs/notify/fdinfo.c b/fs/notify/fdinfo.c
3415     index 238a5930cb3c..9d7e2b9659cb 100644
3416     --- a/fs/notify/fdinfo.c
3417     +++ b/fs/notify/fdinfo.c
3418     @@ -42,7 +42,7 @@ static int show_mark_fhandle(struct seq_file *m, struct inode *inode)
3419     {
3420     struct {
3421     struct file_handle handle;
3422     - u8 pad[64];
3423     + u8 pad[MAX_HANDLE_SZ];
3424     } f;
3425     int size, ret, i;
3426    
3427     @@ -50,7 +50,7 @@ static int show_mark_fhandle(struct seq_file *m, struct inode *inode)
3428     size = f.handle.handle_bytes >> 2;
3429    
3430     ret = exportfs_encode_inode_fh(inode, (struct fid *)f.handle.f_handle, &size, 0);
3431     - if ((ret == 255) || (ret == -ENOSPC)) {
3432     + if ((ret == FILEID_INVALID) || (ret < 0)) {
3433     WARN_ONCE(1, "Can't encode file handler for inotify: %d\n", ret);
3434     return 0;
3435     }
3436     diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
3437     index 33ecbe0e6734..2b941113e423 100644
3438     --- a/fs/ocfs2/dlm/dlmmaster.c
3439     +++ b/fs/ocfs2/dlm/dlmmaster.c
3440     @@ -653,12 +653,9 @@ void dlm_lockres_clear_refmap_bit(struct dlm_ctxt *dlm,
3441     clear_bit(bit, res->refmap);
3442     }
3443    
3444     -
3445     -void dlm_lockres_grab_inflight_ref(struct dlm_ctxt *dlm,
3446     +static void __dlm_lockres_grab_inflight_ref(struct dlm_ctxt *dlm,
3447     struct dlm_lock_resource *res)
3448     {
3449     - assert_spin_locked(&res->spinlock);
3450     -
3451     res->inflight_locks++;
3452    
3453     mlog(0, "%s: res %.*s, inflight++: now %u, %ps()\n", dlm->name,
3454     @@ -666,6 +663,13 @@ void dlm_lockres_grab_inflight_ref(struct dlm_ctxt *dlm,
3455     __builtin_return_address(0));
3456     }
3457    
3458     +void dlm_lockres_grab_inflight_ref(struct dlm_ctxt *dlm,
3459     + struct dlm_lock_resource *res)
3460     +{
3461     + assert_spin_locked(&res->spinlock);
3462     + __dlm_lockres_grab_inflight_ref(dlm, res);
3463     +}
3464     +
3465     void dlm_lockres_drop_inflight_ref(struct dlm_ctxt *dlm,
3466     struct dlm_lock_resource *res)
3467     {
3468     @@ -855,10 +859,8 @@ lookup:
3469     /* finally add the lockres to its hash bucket */
3470     __dlm_insert_lockres(dlm, res);
3471    
3472     - /* Grab inflight ref to pin the resource */
3473     - spin_lock(&res->spinlock);
3474     - dlm_lockres_grab_inflight_ref(dlm, res);
3475     - spin_unlock(&res->spinlock);
3476     + /* since this lockres is new it doesn't not require the spinlock */
3477     + __dlm_lockres_grab_inflight_ref(dlm, res);
3478    
3479     /* get an extra ref on the mle in case this is a BLOCK
3480     * if so, the creator of the BLOCK may try to put the last
3481     diff --git a/include/linux/iio/trigger.h b/include/linux/iio/trigger.h
3482     index 3869c525b052..545deb149655 100644
3483     --- a/include/linux/iio/trigger.h
3484     +++ b/include/linux/iio/trigger.h
3485     @@ -83,10 +83,12 @@ static inline void iio_trigger_put(struct iio_trigger *trig)
3486     put_device(&trig->dev);
3487     }
3488    
3489     -static inline void iio_trigger_get(struct iio_trigger *trig)
3490     +static inline struct iio_trigger *iio_trigger_get(struct iio_trigger *trig)
3491     {
3492     get_device(&trig->dev);
3493     __module_get(trig->ops->owner);
3494     +
3495     + return trig;
3496     }
3497    
3498     /**
3499     diff --git a/include/linux/init_task.h b/include/linux/init_task.h
3500     index 5cd0f0949927..998f4dfedecf 100644
3501     --- a/include/linux/init_task.h
3502     +++ b/include/linux/init_task.h
3503     @@ -40,6 +40,7 @@ extern struct fs_struct init_fs;
3504    
3505     #define INIT_SIGNALS(sig) { \
3506     .nr_threads = 1, \
3507     + .thread_head = LIST_HEAD_INIT(init_task.thread_node), \
3508     .wait_chldexit = __WAIT_QUEUE_HEAD_INITIALIZER(sig.wait_chldexit),\
3509     .shared_pending = { \
3510     .list = LIST_HEAD_INIT(sig.shared_pending.list), \
3511     @@ -213,6 +214,7 @@ extern struct task_group root_task_group;
3512     [PIDTYPE_SID] = INIT_PID_LINK(PIDTYPE_SID), \
3513     }, \
3514     .thread_group = LIST_HEAD_INIT(tsk.thread_group), \
3515     + .thread_node = LIST_HEAD_INIT(init_signals.thread_head), \
3516     INIT_IDS \
3517     INIT_PERF_EVENTS(tsk) \
3518     INIT_TRACE_IRQFLAGS \
3519     diff --git a/include/linux/sched.h b/include/linux/sched.h
3520     index 597c8ab005a0..8293545ac9b7 100644
3521     --- a/include/linux/sched.h
3522     +++ b/include/linux/sched.h
3523     @@ -480,6 +480,7 @@ struct signal_struct {
3524     atomic_t sigcnt;
3525     atomic_t live;
3526     int nr_threads;
3527     + struct list_head thread_head;
3528    
3529     wait_queue_head_t wait_chldexit; /* for wait4() */
3530    
3531     @@ -1160,6 +1161,7 @@ struct task_struct {
3532     /* PID/PID hash table linkage. */
3533     struct pid_link pids[PIDTYPE_MAX];
3534     struct list_head thread_group;
3535     + struct list_head thread_node;
3536    
3537     struct completion *vfork_done; /* for vfork() */
3538     int __user *set_child_tid; /* CLONE_CHILD_SETTID */
3539     @@ -2167,6 +2169,16 @@ extern bool current_is_single_threaded(void);
3540     #define while_each_thread(g, t) \
3541     while ((t = next_thread(t)) != g)
3542    
3543     +#define __for_each_thread(signal, t) \
3544     + list_for_each_entry_rcu(t, &(signal)->thread_head, thread_node)
3545     +
3546     +#define for_each_thread(p, t) \
3547     + __for_each_thread((p)->signal, t)
3548     +
3549     +/* Careful: this is a double loop, 'break' won't work as expected. */
3550     +#define for_each_process_thread(p, t) \
3551     + for_each_process(p) for_each_thread(p, t)
3552     +
3553     static inline int get_nr_threads(struct task_struct *tsk)
3554     {
3555     return tsk->signal->nr_threads;
3556     diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
3557     index 623488fdc1f5..ff28cf578d01 100644
3558     --- a/include/linux/workqueue.h
3559     +++ b/include/linux/workqueue.h
3560     @@ -414,7 +414,7 @@ __alloc_workqueue_key(const char *fmt, unsigned int flags, int max_active,
3561     #define create_freezable_workqueue(name) \
3562     alloc_workqueue((name), WQ_FREEZABLE | WQ_UNBOUND | WQ_MEM_RECLAIM, 1)
3563     #define create_singlethread_workqueue(name) \
3564     - alloc_workqueue((name), WQ_UNBOUND | WQ_MEM_RECLAIM, 1)
3565     + alloc_ordered_workqueue("%s", WQ_MEM_RECLAIM, name)
3566    
3567     extern void destroy_workqueue(struct workqueue_struct *wq);
3568    
3569     diff --git a/kernel/events/core.c b/kernel/events/core.c
3570     index 459b94c94721..6bf387a60399 100644
3571     --- a/kernel/events/core.c
3572     +++ b/kernel/events/core.c
3573     @@ -1398,6 +1398,11 @@ retry:
3574     */
3575     if (ctx->is_active) {
3576     raw_spin_unlock_irq(&ctx->lock);
3577     + /*
3578     + * Reload the task pointer, it might have been changed by
3579     + * a concurrent perf_event_context_sched_out().
3580     + */
3581     + task = ctx->task;
3582     goto retry;
3583     }
3584    
3585     @@ -1829,6 +1834,11 @@ retry:
3586     */
3587     if (ctx->is_active) {
3588     raw_spin_unlock_irq(&ctx->lock);
3589     + /*
3590     + * Reload the task pointer, it might have been changed by
3591     + * a concurrent perf_event_context_sched_out().
3592     + */
3593     + task = ctx->task;
3594     goto retry;
3595     }
3596    
3597     diff --git a/kernel/exit.c b/kernel/exit.c
3598     index 6682b2ea5b11..717efbd7cb72 100644
3599     --- a/kernel/exit.c
3600     +++ b/kernel/exit.c
3601     @@ -74,6 +74,7 @@ static void __unhash_process(struct task_struct *p, bool group_dead)
3602     __this_cpu_dec(process_counts);
3603     }
3604     list_del_rcu(&p->thread_group);
3605     + list_del_rcu(&p->thread_node);
3606     }
3607    
3608     /*
3609     diff --git a/kernel/fork.c b/kernel/fork.c
3610     index 814363a69b80..2c76e11ba939 100644
3611     --- a/kernel/fork.c
3612     +++ b/kernel/fork.c
3613     @@ -1045,6 +1045,11 @@ static int copy_signal(unsigned long clone_flags, struct task_struct *tsk)
3614     sig->nr_threads = 1;
3615     atomic_set(&sig->live, 1);
3616     atomic_set(&sig->sigcnt, 1);
3617     +
3618     + /* list_add(thread_node, thread_head) without INIT_LIST_HEAD() */
3619     + sig->thread_head = (struct list_head)LIST_HEAD_INIT(tsk->thread_node);
3620     + tsk->thread_node = (struct list_head)LIST_HEAD_INIT(sig->thread_head);
3621     +
3622     init_waitqueue_head(&sig->wait_chldexit);
3623     sig->curr_target = tsk;
3624     init_sigpending(&sig->shared_pending);
3625     @@ -1448,14 +1453,6 @@ static struct task_struct *copy_process(unsigned long clone_flags,
3626     goto bad_fork_free_pid;
3627     }
3628    
3629     - if (clone_flags & CLONE_THREAD) {
3630     - current->signal->nr_threads++;
3631     - atomic_inc(&current->signal->live);
3632     - atomic_inc(&current->signal->sigcnt);
3633     - p->group_leader = current->group_leader;
3634     - list_add_tail_rcu(&p->thread_group, &p->group_leader->thread_group);
3635     - }
3636     -
3637     if (likely(p->pid)) {
3638     ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace);
3639    
3640     @@ -1472,6 +1469,15 @@ static struct task_struct *copy_process(unsigned long clone_flags,
3641     list_add_tail(&p->sibling, &p->real_parent->children);
3642     list_add_tail_rcu(&p->tasks, &init_task.tasks);
3643     __this_cpu_inc(process_counts);
3644     + } else {
3645     + current->signal->nr_threads++;
3646     + atomic_inc(&current->signal->live);
3647     + atomic_inc(&current->signal->sigcnt);
3648     + p->group_leader = current->group_leader;
3649     + list_add_tail_rcu(&p->thread_group,
3650     + &p->group_leader->thread_group);
3651     + list_add_tail_rcu(&p->thread_node,
3652     + &p->signal->thread_head);
3653     }
3654     attach_pid(p, PIDTYPE_PID, pid);
3655     nr_threads++;
3656     diff --git a/kernel/kcmp.c b/kernel/kcmp.c
3657     index e30ac0fe61c3..0aa69ea1d8fd 100644
3658     --- a/kernel/kcmp.c
3659     +++ b/kernel/kcmp.c
3660     @@ -44,11 +44,12 @@ static long kptr_obfuscate(long v, int type)
3661     */
3662     static int kcmp_ptr(void *v1, void *v2, enum kcmp_type type)
3663     {
3664     - long ret;
3665     + long t1, t2;
3666    
3667     - ret = kptr_obfuscate((long)v1, type) - kptr_obfuscate((long)v2, type);
3668     + t1 = kptr_obfuscate((long)v1, type);
3669     + t2 = kptr_obfuscate((long)v2, type);
3670    
3671     - return (ret < 0) | ((ret > 0) << 1);
3672     + return (t1 < t2) | ((t1 > t2) << 1);
3673     }
3674    
3675     /* The caller must have pinned the task */
3676     diff --git a/kernel/power/main.c b/kernel/power/main.c
3677     index d77663bfedeb..312c1b2c725d 100644
3678     --- a/kernel/power/main.c
3679     +++ b/kernel/power/main.c
3680     @@ -293,12 +293,12 @@ static ssize_t state_show(struct kobject *kobj, struct kobj_attribute *attr,
3681     {
3682     char *s = buf;
3683     #ifdef CONFIG_SUSPEND
3684     - int i;
3685     + suspend_state_t i;
3686     +
3687     + for (i = PM_SUSPEND_MIN; i < PM_SUSPEND_MAX; i++)
3688     + if (pm_states[i].state)
3689     + s += sprintf(s,"%s ", pm_states[i].label);
3690    
3691     - for (i = 0; i < PM_SUSPEND_MAX; i++) {
3692     - if (pm_states[i] && valid_state(i))
3693     - s += sprintf(s,"%s ", pm_states[i]);
3694     - }
3695     #endif
3696     #ifdef CONFIG_HIBERNATION
3697     s += sprintf(s, "%s\n", "disk");
3698     @@ -314,7 +314,7 @@ static suspend_state_t decode_state(const char *buf, size_t n)
3699     {
3700     #ifdef CONFIG_SUSPEND
3701     suspend_state_t state = PM_SUSPEND_MIN;
3702     - const char * const *s;
3703     + struct pm_sleep_state *s;
3704     #endif
3705     char *p;
3706     int len;
3707     @@ -328,8 +328,9 @@ static suspend_state_t decode_state(const char *buf, size_t n)
3708    
3709     #ifdef CONFIG_SUSPEND
3710     for (s = &pm_states[state]; state < PM_SUSPEND_MAX; s++, state++)
3711     - if (*s && len == strlen(*s) && !strncmp(buf, *s, len))
3712     - return state;
3713     + if (s->state && len == strlen(s->label)
3714     + && !strncmp(buf, s->label, len))
3715     + return s->state;
3716     #endif
3717    
3718     return PM_SUSPEND_ON;
3719     @@ -445,8 +446,8 @@ static ssize_t autosleep_show(struct kobject *kobj,
3720    
3721     #ifdef CONFIG_SUSPEND
3722     if (state < PM_SUSPEND_MAX)
3723     - return sprintf(buf, "%s\n", valid_state(state) ?
3724     - pm_states[state] : "error");
3725     + return sprintf(buf, "%s\n", pm_states[state].state ?
3726     + pm_states[state].label : "error");
3727     #endif
3728     #ifdef CONFIG_HIBERNATION
3729     return sprintf(buf, "disk\n");
3730     diff --git a/kernel/power/power.h b/kernel/power/power.h
3731     index 7d4b7ffb3c1d..f770cad3666c 100644
3732     --- a/kernel/power/power.h
3733     +++ b/kernel/power/power.h
3734     @@ -175,17 +175,20 @@ extern void swsusp_show_speed(struct timeval *, struct timeval *,
3735     unsigned int, char *);
3736    
3737     #ifdef CONFIG_SUSPEND
3738     +struct pm_sleep_state {
3739     + const char *label;
3740     + suspend_state_t state;
3741     +};
3742     +
3743     /* kernel/power/suspend.c */
3744     -extern const char *const pm_states[];
3745     +extern struct pm_sleep_state pm_states[];
3746    
3747     -extern bool valid_state(suspend_state_t state);
3748     extern int suspend_devices_and_enter(suspend_state_t state);
3749     #else /* !CONFIG_SUSPEND */
3750     static inline int suspend_devices_and_enter(suspend_state_t state)
3751     {
3752     return -ENOSYS;
3753     }
3754     -static inline bool valid_state(suspend_state_t state) { return false; }
3755     #endif /* !CONFIG_SUSPEND */
3756    
3757     #ifdef CONFIG_PM_TEST_SUSPEND
3758     diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
3759     index bef86d121eb2..903c517b14da 100644
3760     --- a/kernel/power/suspend.c
3761     +++ b/kernel/power/suspend.c
3762     @@ -29,10 +29,10 @@
3763    
3764     #include "power.h"
3765    
3766     -const char *const pm_states[PM_SUSPEND_MAX] = {
3767     - [PM_SUSPEND_FREEZE] = "freeze",
3768     - [PM_SUSPEND_STANDBY] = "standby",
3769     - [PM_SUSPEND_MEM] = "mem",
3770     +struct pm_sleep_state pm_states[PM_SUSPEND_MAX] = {
3771     + [PM_SUSPEND_FREEZE] = { .label = "freeze", .state = PM_SUSPEND_FREEZE },
3772     + [PM_SUSPEND_STANDBY] = { .label = "standby", },
3773     + [PM_SUSPEND_MEM] = { .label = "mem", },
3774     };
3775    
3776     static const struct platform_suspend_ops *suspend_ops;
3777     @@ -62,42 +62,34 @@ void freeze_wake(void)
3778     }
3779     EXPORT_SYMBOL_GPL(freeze_wake);
3780    
3781     +static bool valid_state(suspend_state_t state)
3782     +{
3783     + /*
3784     + * PM_SUSPEND_STANDBY and PM_SUSPEND_MEM states need low level
3785     + * support and need to be valid to the low level
3786     + * implementation, no valid callback implies that none are valid.
3787     + */
3788     + return suspend_ops && suspend_ops->valid && suspend_ops->valid(state);
3789     +}
3790     +
3791     /**
3792     * suspend_set_ops - Set the global suspend method table.
3793     * @ops: Suspend operations to use.
3794     */
3795     void suspend_set_ops(const struct platform_suspend_ops *ops)
3796     {
3797     + suspend_state_t i;
3798     +
3799     lock_system_sleep();
3800     +
3801     suspend_ops = ops;
3802     + for (i = PM_SUSPEND_STANDBY; i <= PM_SUSPEND_MEM; i++)
3803     + pm_states[i].state = valid_state(i) ? i : 0;
3804     +
3805     unlock_system_sleep();
3806     }
3807     EXPORT_SYMBOL_GPL(suspend_set_ops);
3808    
3809     -bool valid_state(suspend_state_t state)
3810     -{
3811     - if (state == PM_SUSPEND_FREEZE) {
3812     -#ifdef CONFIG_PM_DEBUG
3813     - if (pm_test_level != TEST_NONE &&
3814     - pm_test_level != TEST_FREEZER &&
3815     - pm_test_level != TEST_DEVICES &&
3816     - pm_test_level != TEST_PLATFORM) {
3817     - printk(KERN_WARNING "Unsupported pm_test mode for "
3818     - "freeze state, please choose "
3819     - "none/freezer/devices/platform.\n");
3820     - return false;
3821     - }
3822     -#endif
3823     - return true;
3824     - }
3825     - /*
3826     - * PM_SUSPEND_STANDBY and PM_SUSPEND_MEMORY states need lowlevel
3827     - * support and need to be valid to the lowlevel
3828     - * implementation, no valid callback implies that none are valid.
3829     - */
3830     - return suspend_ops && suspend_ops->valid && suspend_ops->valid(state);
3831     -}
3832     -
3833     /**
3834     * suspend_valid_only_mem - Generic memory-only valid callback.
3835     *
3836     @@ -324,9 +316,17 @@ static int enter_state(suspend_state_t state)
3837     {
3838     int error;
3839    
3840     - if (!valid_state(state))
3841     - return -ENODEV;
3842     -
3843     + if (state == PM_SUSPEND_FREEZE) {
3844     +#ifdef CONFIG_PM_DEBUG
3845     + if (pm_test_level != TEST_NONE && pm_test_level <= TEST_CPUS) {
3846     + pr_warning("PM: Unsupported test mode for freeze state,"
3847     + "please choose none/freezer/devices/platform.\n");
3848     + return -EAGAIN;
3849     + }
3850     +#endif
3851     + } else if (!valid_state(state)) {
3852     + return -EINVAL;
3853     + }
3854     if (!mutex_trylock(&pm_mutex))
3855     return -EBUSY;
3856    
3857     @@ -337,7 +337,7 @@ static int enter_state(suspend_state_t state)
3858     sys_sync();
3859     printk("done.\n");
3860    
3861     - pr_debug("PM: Preparing system for %s sleep\n", pm_states[state]);
3862     + pr_debug("PM: Preparing system for %s sleep\n", pm_states[state].label);
3863     error = suspend_prepare(state);
3864     if (error)
3865     goto Unlock;
3866     @@ -345,7 +345,7 @@ static int enter_state(suspend_state_t state)
3867     if (suspend_test(TEST_FREEZER))
3868     goto Finish;
3869    
3870     - pr_debug("PM: Entering %s sleep\n", pm_states[state]);
3871     + pr_debug("PM: Entering %s sleep\n", pm_states[state].label);
3872     pm_restrict_gfp_mask();
3873     error = suspend_devices_and_enter(state);
3874     pm_restore_gfp_mask();
3875     diff --git a/kernel/power/suspend_test.c b/kernel/power/suspend_test.c
3876     index 9b2a1d58558d..269b097e78ea 100644
3877     --- a/kernel/power/suspend_test.c
3878     +++ b/kernel/power/suspend_test.c
3879     @@ -92,13 +92,13 @@ static void __init test_wakealarm(struct rtc_device *rtc, suspend_state_t state)
3880     }
3881    
3882     if (state == PM_SUSPEND_MEM) {
3883     - printk(info_test, pm_states[state]);
3884     + printk(info_test, pm_states[state].label);
3885     status = pm_suspend(state);
3886     if (status == -ENODEV)
3887     state = PM_SUSPEND_STANDBY;
3888     }
3889     if (state == PM_SUSPEND_STANDBY) {
3890     - printk(info_test, pm_states[state]);
3891     + printk(info_test, pm_states[state].label);
3892     status = pm_suspend(state);
3893     }
3894     if (status < 0)
3895     @@ -136,18 +136,16 @@ static char warn_bad_state[] __initdata =
3896    
3897     static int __init setup_test_suspend(char *value)
3898     {
3899     - unsigned i;
3900     + suspend_state_t i;
3901    
3902     /* "=mem" ==> "mem" */
3903     value++;
3904     - for (i = 0; i < PM_SUSPEND_MAX; i++) {
3905     - if (!pm_states[i])
3906     - continue;
3907     - if (strcmp(pm_states[i], value) != 0)
3908     - continue;
3909     - test_state = (__force suspend_state_t) i;
3910     - return 0;
3911     - }
3912     + for (i = PM_SUSPEND_MIN; i < PM_SUSPEND_MAX; i++)
3913     + if (!strcmp(pm_states[i].label, value)) {
3914     + test_state = pm_states[i].state;
3915     + return 0;
3916     + }
3917     +
3918     printk(warn_bad_state, value);
3919     return 0;
3920     }
3921     @@ -164,8 +162,8 @@ static int __init test_suspend(void)
3922     /* PM is initialized by now; is that state testable? */
3923     if (test_state == PM_SUSPEND_ON)
3924     goto done;
3925     - if (!valid_state(test_state)) {
3926     - printk(warn_bad_state, pm_states[test_state]);
3927     + if (!pm_states[test_state].state) {
3928     + printk(warn_bad_state, pm_states[test_state].label);
3929     goto done;
3930     }
3931    
3932     diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
3933     index 294bf4ef1f47..7d19fca0617e 100644
3934     --- a/kernel/time/alarmtimer.c
3935     +++ b/kernel/time/alarmtimer.c
3936     @@ -419,18 +419,26 @@ static enum alarmtimer_type clock2alarm(clockid_t clockid)
3937     static enum alarmtimer_restart alarm_handle_timer(struct alarm *alarm,
3938     ktime_t now)
3939     {
3940     + unsigned long flags;
3941     struct k_itimer *ptr = container_of(alarm, struct k_itimer,
3942     it.alarm.alarmtimer);
3943     - if (posix_timer_event(ptr, 0) != 0)
3944     - ptr->it_overrun++;
3945     + enum alarmtimer_restart result = ALARMTIMER_NORESTART;
3946     +
3947     + spin_lock_irqsave(&ptr->it_lock, flags);
3948     + if ((ptr->it_sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_NONE) {
3949     + if (posix_timer_event(ptr, 0) != 0)
3950     + ptr->it_overrun++;
3951     + }
3952    
3953     /* Re-add periodic timers */
3954     if (ptr->it.alarm.interval.tv64) {
3955     ptr->it_overrun += alarm_forward(alarm, now,
3956     ptr->it.alarm.interval);
3957     - return ALARMTIMER_RESTART;
3958     + result = ALARMTIMER_RESTART;
3959     }
3960     - return ALARMTIMER_NORESTART;
3961     + spin_unlock_irqrestore(&ptr->it_lock, flags);
3962     +
3963     + return result;
3964     }
3965    
3966     /**
3967     diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
3968     index 5efbc122e5ce..0bc181b0524c 100644
3969     --- a/kernel/trace/ring_buffer.c
3970     +++ b/kernel/trace/ring_buffer.c
3971     @@ -626,8 +626,22 @@ int ring_buffer_poll_wait(struct ring_buffer *buffer, int cpu,
3972     work = &cpu_buffer->irq_work;
3973     }
3974    
3975     - work->waiters_pending = true;
3976     poll_wait(filp, &work->waiters, poll_table);
3977     + work->waiters_pending = true;
3978     + /*
3979     + * There's a tight race between setting the waiters_pending and
3980     + * checking if the ring buffer is empty. Once the waiters_pending bit
3981     + * is set, the next event will wake the task up, but we can get stuck
3982     + * if there's only a single event in.
3983     + *
3984     + * FIXME: Ideally, we need a memory barrier on the writer side as well,
3985     + * but adding a memory barrier to all events will cause too much of a
3986     + * performance hit in the fast path. We only need a memory barrier when
3987     + * the buffer goes from empty to having content. But as this race is
3988     + * extremely small, and it's not a problem if another event comes in, we
3989     + * will fix it later.
3990     + */
3991     + smp_mb();
3992    
3993     if ((cpu == RING_BUFFER_ALL_CPUS && !ring_buffer_empty(buffer)) ||
3994     (cpu != RING_BUFFER_ALL_CPUS && !ring_buffer_empty_cpu(buffer, cpu)))
3995     diff --git a/mm/oom_kill.c b/mm/oom_kill.c
3996     index dfa94ed3c7fa..8e40908e724a 100644
3997     --- a/mm/oom_kill.c
3998     +++ b/mm/oom_kill.c
3999     @@ -47,19 +47,21 @@ static DEFINE_SPINLOCK(zone_scan_lock);
4000     #ifdef CONFIG_NUMA
4001     /**
4002     * has_intersects_mems_allowed() - check task eligiblity for kill
4003     - * @tsk: task struct of which task to consider
4004     + * @start: task struct of which task to consider
4005     * @mask: nodemask passed to page allocator for mempolicy ooms
4006     *
4007     * Task eligibility is determined by whether or not a candidate task, @tsk,
4008     * shares the same mempolicy nodes as current if it is bound by such a policy
4009     * and whether or not it has the same set of allowed cpuset nodes.
4010     */
4011     -static bool has_intersects_mems_allowed(struct task_struct *tsk,
4012     +static bool has_intersects_mems_allowed(struct task_struct *start,
4013     const nodemask_t *mask)
4014     {
4015     - struct task_struct *start = tsk;
4016     + struct task_struct *tsk;
4017     + bool ret = false;
4018    
4019     - do {
4020     + rcu_read_lock();
4021     + for_each_thread(start, tsk) {
4022     if (mask) {
4023     /*
4024     * If this is a mempolicy constrained oom, tsk's
4025     @@ -67,19 +69,20 @@ static bool has_intersects_mems_allowed(struct task_struct *tsk,
4026     * mempolicy intersects current, otherwise it may be
4027     * needlessly killed.
4028     */
4029     - if (mempolicy_nodemask_intersects(tsk, mask))
4030     - return true;
4031     + ret = mempolicy_nodemask_intersects(tsk, mask);
4032     } else {
4033     /*
4034     * This is not a mempolicy constrained oom, so only
4035     * check the mems of tsk's cpuset.
4036     */
4037     - if (cpuset_mems_allowed_intersects(current, tsk))
4038     - return true;
4039     + ret = cpuset_mems_allowed_intersects(current, tsk);
4040     }
4041     - } while_each_thread(start, tsk);
4042     + if (ret)
4043     + break;
4044     + }
4045     + rcu_read_unlock();
4046    
4047     - return false;
4048     + return ret;
4049     }
4050     #else
4051     static bool has_intersects_mems_allowed(struct task_struct *tsk,
4052     @@ -97,16 +100,21 @@ static bool has_intersects_mems_allowed(struct task_struct *tsk,
4053     */
4054     struct task_struct *find_lock_task_mm(struct task_struct *p)
4055     {
4056     - struct task_struct *t = p;
4057     + struct task_struct *t;
4058    
4059     - do {
4060     + rcu_read_lock();
4061     +
4062     + for_each_thread(p, t) {
4063     task_lock(t);
4064     if (likely(t->mm))
4065     - return t;
4066     + goto found;
4067     task_unlock(t);
4068     - } while_each_thread(p, t);
4069     + }
4070     + t = NULL;
4071     +found:
4072     + rcu_read_unlock();
4073    
4074     - return NULL;
4075     + return t;
4076     }
4077    
4078     /* return true if the task is not adequate as candidate victim task. */
4079     @@ -301,7 +309,7 @@ static struct task_struct *select_bad_process(unsigned int *ppoints,
4080     unsigned long chosen_points = 0;
4081    
4082     rcu_read_lock();
4083     - do_each_thread(g, p) {
4084     + for_each_process_thread(g, p) {
4085     unsigned int points;
4086    
4087     switch (oom_scan_process_thread(p, totalpages, nodemask,
4088     @@ -323,7 +331,7 @@ static struct task_struct *select_bad_process(unsigned int *ppoints,
4089     chosen = p;
4090     chosen_points = points;
4091     }
4092     - } while_each_thread(g, p);
4093     + }
4094     if (chosen)
4095     get_task_struct(chosen);
4096     rcu_read_unlock();
4097     @@ -406,7 +414,7 @@ void oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order,
4098     {
4099     struct task_struct *victim = p;
4100     struct task_struct *child;
4101     - struct task_struct *t = p;
4102     + struct task_struct *t;
4103     struct mm_struct *mm;
4104     unsigned int victim_points = 0;
4105     static DEFINE_RATELIMIT_STATE(oom_rs, DEFAULT_RATELIMIT_INTERVAL,
4106     @@ -437,7 +445,7 @@ void oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order,
4107     * still freeing memory.
4108     */
4109     read_lock(&tasklist_lock);
4110     - do {
4111     + for_each_thread(p, t) {
4112     list_for_each_entry(child, &t->children, sibling) {
4113     unsigned int child_points;
4114    
4115     @@ -455,13 +463,11 @@ void oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order,
4116     get_task_struct(victim);
4117     }
4118     }
4119     - } while_each_thread(p, t);
4120     + }
4121     read_unlock(&tasklist_lock);
4122    
4123     - rcu_read_lock();
4124     p = find_lock_task_mm(victim);
4125     if (!p) {
4126     - rcu_read_unlock();
4127     put_task_struct(victim);
4128     return;
4129     } else if (victim != p) {
4130     @@ -487,6 +493,7 @@ void oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order,
4131     * That thread will now get access to memory reserves since it has a
4132     * pending fatal signal.
4133     */
4134     + rcu_read_lock();
4135     for_each_process(p)
4136     if (p->mm == mm && !same_thread_group(p, victim) &&
4137     !(p->flags & PF_KTHREAD)) {
4138     diff --git a/mm/percpu-vm.c b/mm/percpu-vm.c
4139     index 3707c71ae4cd..51108165f829 100644
4140     --- a/mm/percpu-vm.c
4141     +++ b/mm/percpu-vm.c
4142     @@ -108,7 +108,7 @@ static int pcpu_alloc_pages(struct pcpu_chunk *chunk,
4143     int page_start, int page_end)
4144     {
4145     const gfp_t gfp = GFP_KERNEL | __GFP_HIGHMEM | __GFP_COLD;
4146     - unsigned int cpu;
4147     + unsigned int cpu, tcpu;
4148     int i;
4149    
4150     for_each_possible_cpu(cpu) {
4151     @@ -116,14 +116,23 @@ static int pcpu_alloc_pages(struct pcpu_chunk *chunk,
4152     struct page **pagep = &pages[pcpu_page_idx(cpu, i)];
4153    
4154     *pagep = alloc_pages_node(cpu_to_node(cpu), gfp, 0);
4155     - if (!*pagep) {
4156     - pcpu_free_pages(chunk, pages, populated,
4157     - page_start, page_end);
4158     - return -ENOMEM;
4159     - }
4160     + if (!*pagep)
4161     + goto err;
4162     }
4163     }
4164     return 0;
4165     +
4166     +err:
4167     + while (--i >= page_start)
4168     + __free_page(pages[pcpu_page_idx(cpu, i)]);
4169     +
4170     + for_each_possible_cpu(tcpu) {
4171     + if (tcpu == cpu)
4172     + break;
4173     + for (i = page_start; i < page_end; i++)
4174     + __free_page(pages[pcpu_page_idx(tcpu, i)]);
4175     + }
4176     + return -ENOMEM;
4177     }
4178    
4179     /**
4180     @@ -263,6 +272,7 @@ err:
4181     __pcpu_unmap_pages(pcpu_chunk_addr(chunk, tcpu, page_start),
4182     page_end - page_start);
4183     }
4184     + pcpu_post_unmap_tlb_flush(chunk, page_start, page_end);
4185     return err;
4186     }
4187    
4188     diff --git a/mm/percpu.c b/mm/percpu.c
4189     index 25e2ea52db82..9bc1bf914cc8 100644
4190     --- a/mm/percpu.c
4191     +++ b/mm/percpu.c
4192     @@ -1910,6 +1910,8 @@ void __init setup_per_cpu_areas(void)
4193    
4194     if (pcpu_setup_first_chunk(ai, fc) < 0)
4195     panic("Failed to initialize percpu areas.");
4196     +
4197     + pcpu_free_alloc_info(ai);
4198     }
4199    
4200     #endif /* CONFIG_SMP */
4201     diff --git a/mm/shmem.c b/mm/shmem.c
4202     index 16cc1d77f70a..4e4a7349c5cd 100644
4203     --- a/mm/shmem.c
4204     +++ b/mm/shmem.c
4205     @@ -2128,8 +2128,10 @@ static int shmem_rename(struct inode *old_dir, struct dentry *old_dentry, struct
4206    
4207     if (new_dentry->d_inode) {
4208     (void) shmem_unlink(new_dir, new_dentry);
4209     - if (they_are_dirs)
4210     + if (they_are_dirs) {
4211     + drop_nlink(new_dentry->d_inode);
4212     drop_nlink(old_dir);
4213     + }
4214     } else if (they_are_dirs) {
4215     drop_nlink(old_dir);
4216     inc_nlink(new_dir);
4217     diff --git a/mm/util.c b/mm/util.c
4218     index ab1424dbe2e6..0b1725254ff1 100644
4219     --- a/mm/util.c
4220     +++ b/mm/util.c
4221     @@ -272,17 +272,14 @@ pid_t vm_is_stack(struct task_struct *task,
4222    
4223     if (in_group) {
4224     struct task_struct *t;
4225     - rcu_read_lock();
4226     - if (!pid_alive(task))
4227     - goto done;
4228    
4229     - t = task;
4230     - do {
4231     + rcu_read_lock();
4232     + for_each_thread(task, t) {
4233     if (vm_is_stack_for_task(t, vma)) {
4234     ret = t->pid;
4235     goto done;
4236     }
4237     - } while_each_thread(task, t);
4238     + }
4239     done:
4240     rcu_read_unlock();
4241     }
4242     diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
4243     index fc94937cd7b3..e606e4a113e1 100644
4244     --- a/net/mac80211/mlme.c
4245     +++ b/net/mac80211/mlme.c
4246     @@ -4395,8 +4395,7 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
4247     rcu_read_unlock();
4248    
4249     if (bss->wmm_used && bss->uapsd_supported &&
4250     - (sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD) &&
4251     - sdata->wmm_acm != 0xff) {
4252     + (sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD)) {
4253     assoc_data->uapsd = true;
4254     ifmgd->flags |= IEEE80211_STA_UAPSD_ENABLED;
4255     } else {
4256     diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c
4257     index a083bda322b6..90e756cf6e52 100644
4258     --- a/net/netfilter/ipvs/ip_vs_conn.c
4259     +++ b/net/netfilter/ipvs/ip_vs_conn.c
4260     @@ -797,7 +797,6 @@ static void ip_vs_conn_expire(unsigned long data)
4261     ip_vs_control_del(cp);
4262    
4263     if (cp->flags & IP_VS_CONN_F_NFCT) {
4264     - ip_vs_conn_drop_conntrack(cp);
4265     /* Do not access conntracks during subsys cleanup
4266     * because nf_conntrack_find_get can not be used after
4267     * conntrack cleanup for the net.
4268     diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
4269     index 663042e84e81..26b9a986a87f 100644
4270     --- a/net/netfilter/ipvs/ip_vs_core.c
4271     +++ b/net/netfilter/ipvs/ip_vs_core.c
4272     @@ -1898,7 +1898,7 @@ static struct nf_hook_ops ip_vs_ops[] __read_mostly = {
4273     {
4274     .hook = ip_vs_local_reply6,
4275     .owner = THIS_MODULE,
4276     - .pf = NFPROTO_IPV4,
4277     + .pf = NFPROTO_IPV6,
4278     .hooknum = NF_INET_LOCAL_OUT,
4279     .priority = NF_IP6_PRI_NAT_DST + 1,
4280     },
4281     diff --git a/net/netfilter/ipvs/ip_vs_xmit.c b/net/netfilter/ipvs/ip_vs_xmit.c
4282     index 7f0e1cf2d7e8..1692e7534759 100644
4283     --- a/net/netfilter/ipvs/ip_vs_xmit.c
4284     +++ b/net/netfilter/ipvs/ip_vs_xmit.c
4285     @@ -967,8 +967,8 @@ ip_vs_tunnel_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp,
4286     iph->nexthdr = IPPROTO_IPV6;
4287     iph->payload_len = old_iph->payload_len;
4288     be16_add_cpu(&iph->payload_len, sizeof(*old_iph));
4289     - iph->priority = old_iph->priority;
4290     memset(&iph->flow_lbl, 0, sizeof(iph->flow_lbl));
4291     + ipv6_change_dsfield(iph, 0, ipv6_get_dsfield(old_iph));
4292     iph->daddr = cp->daddr.in6;
4293     iph->saddr = saddr;
4294     iph->hop_limit = old_iph->hop_limit;
4295     diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c
4296     index 4d4d8f1d01fc..7dcc376eea5f 100644
4297     --- a/net/netfilter/nf_conntrack_proto_tcp.c
4298     +++ b/net/netfilter/nf_conntrack_proto_tcp.c
4299     @@ -1043,6 +1043,12 @@ static int tcp_packet(struct nf_conn *ct,
4300     nf_ct_kill_acct(ct, ctinfo, skb);
4301     return NF_ACCEPT;
4302     }
4303     + /* ESTABLISHED without SEEN_REPLY, i.e. mid-connection
4304     + * pickup with loose=1. Avoid large ESTABLISHED timeout.
4305     + */
4306     + if (new_state == TCP_CONNTRACK_ESTABLISHED &&
4307     + timeout > timeouts[TCP_CONNTRACK_UNACK])
4308     + timeout = timeouts[TCP_CONNTRACK_UNACK];
4309     } else if (!test_bit(IPS_ASSURED_BIT, &ct->status)
4310     && (old_state == TCP_CONNTRACK_SYN_RECV
4311     || old_state == TCP_CONNTRACK_ESTABLISHED)
4312     diff --git a/sound/core/info.c b/sound/core/info.c
4313     index e79baa11b60e..08070e1eefeb 100644
4314     --- a/sound/core/info.c
4315     +++ b/sound/core/info.c
4316     @@ -679,7 +679,7 @@ int snd_info_card_free(struct snd_card *card)
4317     * snd_info_get_line - read one line from the procfs buffer
4318     * @buffer: the procfs buffer
4319     * @line: the buffer to store
4320     - * @len: the max. buffer size - 1
4321     + * @len: the max. buffer size
4322     *
4323     * Reads one line from the buffer and stores the string.
4324     *
4325     @@ -699,7 +699,7 @@ int snd_info_get_line(struct snd_info_buffer *buffer, char *line, int len)
4326     buffer->stop = 1;
4327     if (c == '\n')
4328     break;
4329     - if (len) {
4330     + if (len > 1) {
4331     len--;
4332     *line++ = c;
4333     }
4334     diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
4335     index 3284940a4af2..8eddece217bb 100644
4336     --- a/sound/core/pcm_lib.c
4337     +++ b/sound/core/pcm_lib.c
4338     @@ -1782,14 +1782,16 @@ static int snd_pcm_lib_ioctl_fifo_size(struct snd_pcm_substream *substream,
4339     {
4340     struct snd_pcm_hw_params *params = arg;
4341     snd_pcm_format_t format;
4342     - int channels, width;
4343     + int channels;
4344     + ssize_t frame_size;
4345    
4346     params->fifo_size = substream->runtime->hw.fifo_size;
4347     if (!(substream->runtime->hw.info & SNDRV_PCM_INFO_FIFO_IN_FRAMES)) {
4348     format = params_format(params);
4349     channels = params_channels(params);
4350     - width = snd_pcm_format_physical_width(format);
4351     - params->fifo_size /= width * channels;
4352     + frame_size = snd_pcm_format_size(format, channels);
4353     + if (frame_size > 0)
4354     + params->fifo_size /= (unsigned)frame_size;
4355     }
4356     return 0;
4357     }
4358     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
4359     index 593090e5bd77..4008034b6ebe 100644
4360     --- a/sound/pci/hda/patch_realtek.c
4361     +++ b/sound/pci/hda/patch_realtek.c
4362     @@ -318,6 +318,7 @@ static void alc_auto_init_amp(struct hda_codec *codec, int type)
4363     case 0x10ec0885:
4364     case 0x10ec0887:
4365     /*case 0x10ec0889:*/ /* this causes an SPDIF problem */
4366     + case 0x10ec0900:
4367     alc889_coef_init(codec);
4368     break;
4369     case 0x10ec0888:
4370     @@ -2252,6 +2253,7 @@ static int patch_alc882(struct hda_codec *codec)
4371     switch (codec->vendor_id) {
4372     case 0x10ec0882:
4373     case 0x10ec0885:
4374     + case 0x10ec0900:
4375     break;
4376     default:
4377     /* ALC883 and variants */
4378     diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
4379     index 132b4c802a47..5dd4c4af9c9f 100644
4380     --- a/sound/pci/hda/patch_sigmatel.c
4381     +++ b/sound/pci/hda/patch_sigmatel.c
4382     @@ -539,8 +539,8 @@ static void stac_init_power_map(struct hda_codec *codec)
4383     if (snd_hda_jack_tbl_get(codec, nid))
4384     continue;
4385     if (def_conf == AC_JACK_PORT_COMPLEX &&
4386     - !(spec->vref_mute_led_nid == nid ||
4387     - is_jack_detectable(codec, nid))) {
4388     + spec->vref_mute_led_nid != nid &&
4389     + is_jack_detectable(codec, nid)) {
4390     snd_hda_jack_detect_enable_callback(codec, nid,
4391     STAC_PWR_EVENT,
4392     jack_update_power);
4393     @@ -3647,11 +3647,18 @@ static int stac_parse_auto_config(struct hda_codec *codec)
4394     return err;
4395     }
4396    
4397     - stac_init_power_map(codec);
4398     -
4399     return 0;
4400     }
4401    
4402     +static int stac_build_controls(struct hda_codec *codec)
4403     +{
4404     + int err = snd_hda_gen_build_controls(codec);
4405     +
4406     + if (err < 0)
4407     + return err;
4408     + stac_init_power_map(codec);
4409     + return 0;
4410     +}
4411    
4412     static int stac_init(struct hda_codec *codec)
4413     {
4414     @@ -3794,7 +3801,7 @@ static void stac_set_power_state(struct hda_codec *codec, hda_nid_t fg,
4415     #endif /* CONFIG_PM */
4416    
4417     static const struct hda_codec_ops stac_patch_ops = {
4418     - .build_controls = snd_hda_gen_build_controls,
4419     + .build_controls = stac_build_controls,
4420     .build_pcms = snd_hda_gen_build_pcms,
4421     .init = stac_init,
4422     .free = stac_free,
4423     diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c
4424     index 81490febac6d..ade9d6379c1b 100644
4425     --- a/sound/soc/davinci/davinci-mcasp.c
4426     +++ b/sound/soc/davinci/davinci-mcasp.c
4427     @@ -632,8 +632,17 @@ static int davinci_config_channel_size(struct davinci_audio_dev *dev,
4428     {
4429     u32 fmt;
4430     u32 tx_rotate = (word_length / 4) & 0x7;
4431     - u32 rx_rotate = (32 - word_length) / 4;
4432     u32 mask = (1ULL << word_length) - 1;
4433     + /*
4434     + * For captured data we should not rotate, inversion and masking is
4435     + * enoguh to get the data to the right position:
4436     + * Format data from bus after reverse (XRBUF)
4437     + * S16_LE: |LSB|MSB|xxx|xxx| |xxx|xxx|MSB|LSB|
4438     + * S24_3LE: |LSB|DAT|MSB|xxx| |xxx|MSB|DAT|LSB|
4439     + * S24_LE: |LSB|DAT|MSB|xxx| |xxx|MSB|DAT|LSB|
4440     + * S32_LE: |LSB|DAT|DAT|MSB| |MSB|DAT|DAT|LSB|
4441     + */
4442     + u32 rx_rotate = 0;
4443    
4444     /*
4445     * if s BCLK-to-LRCLK ratio has been configured via the set_clkdiv()
4446     diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c
4447     index 46878daca5cc..c9eac3edfe4d 100644
4448     --- a/tools/perf/builtin-kmem.c
4449     +++ b/tools/perf/builtin-kmem.c
4450     @@ -101,7 +101,7 @@ static int setup_cpunode_map(void)
4451    
4452     dir1 = opendir(PATH_SYS_NODE);
4453     if (!dir1)
4454     - return -1;
4455     + return 0;
4456    
4457     while ((dent1 = readdir(dir1)) != NULL) {
4458     if (dent1->d_type != DT_DIR ||