Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2643 - (show annotations) (download)
Tue Jul 21 16:20:20 2015 UTC (8 years, 9 months ago) by niro
File size: 152756 byte(s)
-linux-3.10.56
1 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 ||