Magellan Linux

Contents of /trunk/kernel-alx/patches-3.10/0154-3.10.55-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2642 - (show annotations) (download)
Tue Jul 21 16:20:20 2015 UTC (8 years, 9 months ago) by niro
File size: 109260 byte(s)
-linux-3.10.55
1 diff --git a/Makefile b/Makefile
2 index 9429aa5e89de..6141df04fcb5 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 3
7 PATCHLEVEL = 10
8 -SUBLEVEL = 54
9 +SUBLEVEL = 55
10 EXTRAVERSION =
11 NAME = TOSSUG Baby Fish
12
13 diff --git a/arch/mips/cavium-octeon/setup.c b/arch/mips/cavium-octeon/setup.c
14 index 2a75ff249e71..6430e7acb1eb 100644
15 --- a/arch/mips/cavium-octeon/setup.c
16 +++ b/arch/mips/cavium-octeon/setup.c
17 @@ -463,6 +463,18 @@ static void octeon_halt(void)
18 octeon_kill_core(NULL);
19 }
20
21 +static char __read_mostly octeon_system_type[80];
22 +
23 +static int __init init_octeon_system_type(void)
24 +{
25 + snprintf(octeon_system_type, sizeof(octeon_system_type), "%s (%s)",
26 + cvmx_board_type_to_string(octeon_bootinfo->board_type),
27 + octeon_model_get_string(read_c0_prid()));
28 +
29 + return 0;
30 +}
31 +early_initcall(init_octeon_system_type);
32 +
33 /**
34 * Handle all the error condition interrupts that might occur.
35 *
36 @@ -482,11 +494,7 @@ static irqreturn_t octeon_rlm_interrupt(int cpl, void *dev_id)
37 */
38 const char *octeon_board_type_string(void)
39 {
40 - static char name[80];
41 - sprintf(name, "%s (%s)",
42 - cvmx_board_type_to_string(octeon_bootinfo->board_type),
43 - octeon_model_get_string(read_c0_prid()));
44 - return name;
45 + return octeon_system_type;
46 }
47
48 const char *get_system_type(void)
49 diff --git a/arch/mips/include/asm/reg.h b/arch/mips/include/asm/reg.h
50 index 910e71a12466..b8343ccbc989 100644
51 --- a/arch/mips/include/asm/reg.h
52 +++ b/arch/mips/include/asm/reg.h
53 @@ -12,116 +12,194 @@
54 #ifndef __ASM_MIPS_REG_H
55 #define __ASM_MIPS_REG_H
56
57 -
58 -#if defined(CONFIG_32BIT) || defined(WANT_COMPAT_REG_H)
59 -
60 -#define EF_R0 6
61 -#define EF_R1 7
62 -#define EF_R2 8
63 -#define EF_R3 9
64 -#define EF_R4 10
65 -#define EF_R5 11
66 -#define EF_R6 12
67 -#define EF_R7 13
68 -#define EF_R8 14
69 -#define EF_R9 15
70 -#define EF_R10 16
71 -#define EF_R11 17
72 -#define EF_R12 18
73 -#define EF_R13 19
74 -#define EF_R14 20
75 -#define EF_R15 21
76 -#define EF_R16 22
77 -#define EF_R17 23
78 -#define EF_R18 24
79 -#define EF_R19 25
80 -#define EF_R20 26
81 -#define EF_R21 27
82 -#define EF_R22 28
83 -#define EF_R23 29
84 -#define EF_R24 30
85 -#define EF_R25 31
86 +#define MIPS32_EF_R0 6
87 +#define MIPS32_EF_R1 7
88 +#define MIPS32_EF_R2 8
89 +#define MIPS32_EF_R3 9
90 +#define MIPS32_EF_R4 10
91 +#define MIPS32_EF_R5 11
92 +#define MIPS32_EF_R6 12
93 +#define MIPS32_EF_R7 13
94 +#define MIPS32_EF_R8 14
95 +#define MIPS32_EF_R9 15
96 +#define MIPS32_EF_R10 16
97 +#define MIPS32_EF_R11 17
98 +#define MIPS32_EF_R12 18
99 +#define MIPS32_EF_R13 19
100 +#define MIPS32_EF_R14 20
101 +#define MIPS32_EF_R15 21
102 +#define MIPS32_EF_R16 22
103 +#define MIPS32_EF_R17 23
104 +#define MIPS32_EF_R18 24
105 +#define MIPS32_EF_R19 25
106 +#define MIPS32_EF_R20 26
107 +#define MIPS32_EF_R21 27
108 +#define MIPS32_EF_R22 28
109 +#define MIPS32_EF_R23 29
110 +#define MIPS32_EF_R24 30
111 +#define MIPS32_EF_R25 31
112
113 /*
114 * k0/k1 unsaved
115 */
116 -#define EF_R26 32
117 -#define EF_R27 33
118 +#define MIPS32_EF_R26 32
119 +#define MIPS32_EF_R27 33
120
121 -#define EF_R28 34
122 -#define EF_R29 35
123 -#define EF_R30 36
124 -#define EF_R31 37
125 +#define MIPS32_EF_R28 34
126 +#define MIPS32_EF_R29 35
127 +#define MIPS32_EF_R30 36
128 +#define MIPS32_EF_R31 37
129
130 /*
131 * Saved special registers
132 */
133 -#define EF_LO 38
134 -#define EF_HI 39
135 -
136 -#define EF_CP0_EPC 40
137 -#define EF_CP0_BADVADDR 41
138 -#define EF_CP0_STATUS 42
139 -#define EF_CP0_CAUSE 43
140 -#define EF_UNUSED0 44
141 -
142 -#define EF_SIZE 180
143 -
144 -#endif
145 -
146 -#if defined(CONFIG_64BIT) && !defined(WANT_COMPAT_REG_H)
147 -
148 -#define EF_R0 0
149 -#define EF_R1 1
150 -#define EF_R2 2
151 -#define EF_R3 3
152 -#define EF_R4 4
153 -#define EF_R5 5
154 -#define EF_R6 6
155 -#define EF_R7 7
156 -#define EF_R8 8
157 -#define EF_R9 9
158 -#define EF_R10 10
159 -#define EF_R11 11
160 -#define EF_R12 12
161 -#define EF_R13 13
162 -#define EF_R14 14
163 -#define EF_R15 15
164 -#define EF_R16 16
165 -#define EF_R17 17
166 -#define EF_R18 18
167 -#define EF_R19 19
168 -#define EF_R20 20
169 -#define EF_R21 21
170 -#define EF_R22 22
171 -#define EF_R23 23
172 -#define EF_R24 24
173 -#define EF_R25 25
174 +#define MIPS32_EF_LO 38
175 +#define MIPS32_EF_HI 39
176 +
177 +#define MIPS32_EF_CP0_EPC 40
178 +#define MIPS32_EF_CP0_BADVADDR 41
179 +#define MIPS32_EF_CP0_STATUS 42
180 +#define MIPS32_EF_CP0_CAUSE 43
181 +#define MIPS32_EF_UNUSED0 44
182 +
183 +#define MIPS32_EF_SIZE 180
184 +
185 +#define MIPS64_EF_R0 0
186 +#define MIPS64_EF_R1 1
187 +#define MIPS64_EF_R2 2
188 +#define MIPS64_EF_R3 3
189 +#define MIPS64_EF_R4 4
190 +#define MIPS64_EF_R5 5
191 +#define MIPS64_EF_R6 6
192 +#define MIPS64_EF_R7 7
193 +#define MIPS64_EF_R8 8
194 +#define MIPS64_EF_R9 9
195 +#define MIPS64_EF_R10 10
196 +#define MIPS64_EF_R11 11
197 +#define MIPS64_EF_R12 12
198 +#define MIPS64_EF_R13 13
199 +#define MIPS64_EF_R14 14
200 +#define MIPS64_EF_R15 15
201 +#define MIPS64_EF_R16 16
202 +#define MIPS64_EF_R17 17
203 +#define MIPS64_EF_R18 18
204 +#define MIPS64_EF_R19 19
205 +#define MIPS64_EF_R20 20
206 +#define MIPS64_EF_R21 21
207 +#define MIPS64_EF_R22 22
208 +#define MIPS64_EF_R23 23
209 +#define MIPS64_EF_R24 24
210 +#define MIPS64_EF_R25 25
211
212 /*
213 * k0/k1 unsaved
214 */
215 -#define EF_R26 26
216 -#define EF_R27 27
217 +#define MIPS64_EF_R26 26
218 +#define MIPS64_EF_R27 27
219
220
221 -#define EF_R28 28
222 -#define EF_R29 29
223 -#define EF_R30 30
224 -#define EF_R31 31
225 +#define MIPS64_EF_R28 28
226 +#define MIPS64_EF_R29 29
227 +#define MIPS64_EF_R30 30
228 +#define MIPS64_EF_R31 31
229
230 /*
231 * Saved special registers
232 */
233 -#define EF_LO 32
234 -#define EF_HI 33
235 -
236 -#define EF_CP0_EPC 34
237 -#define EF_CP0_BADVADDR 35
238 -#define EF_CP0_STATUS 36
239 -#define EF_CP0_CAUSE 37
240 -
241 -#define EF_SIZE 304 /* size in bytes */
242 +#define MIPS64_EF_LO 32
243 +#define MIPS64_EF_HI 33
244 +
245 +#define MIPS64_EF_CP0_EPC 34
246 +#define MIPS64_EF_CP0_BADVADDR 35
247 +#define MIPS64_EF_CP0_STATUS 36
248 +#define MIPS64_EF_CP0_CAUSE 37
249 +
250 +#define MIPS64_EF_SIZE 304 /* size in bytes */
251 +
252 +#if defined(CONFIG_32BIT)
253 +
254 +#define EF_R0 MIPS32_EF_R0
255 +#define EF_R1 MIPS32_EF_R1
256 +#define EF_R2 MIPS32_EF_R2
257 +#define EF_R3 MIPS32_EF_R3
258 +#define EF_R4 MIPS32_EF_R4
259 +#define EF_R5 MIPS32_EF_R5
260 +#define EF_R6 MIPS32_EF_R6
261 +#define EF_R7 MIPS32_EF_R7
262 +#define EF_R8 MIPS32_EF_R8
263 +#define EF_R9 MIPS32_EF_R9
264 +#define EF_R10 MIPS32_EF_R10
265 +#define EF_R11 MIPS32_EF_R11
266 +#define EF_R12 MIPS32_EF_R12
267 +#define EF_R13 MIPS32_EF_R13
268 +#define EF_R14 MIPS32_EF_R14
269 +#define EF_R15 MIPS32_EF_R15
270 +#define EF_R16 MIPS32_EF_R16
271 +#define EF_R17 MIPS32_EF_R17
272 +#define EF_R18 MIPS32_EF_R18
273 +#define EF_R19 MIPS32_EF_R19
274 +#define EF_R20 MIPS32_EF_R20
275 +#define EF_R21 MIPS32_EF_R21
276 +#define EF_R22 MIPS32_EF_R22
277 +#define EF_R23 MIPS32_EF_R23
278 +#define EF_R24 MIPS32_EF_R24
279 +#define EF_R25 MIPS32_EF_R25
280 +#define EF_R26 MIPS32_EF_R26
281 +#define EF_R27 MIPS32_EF_R27
282 +#define EF_R28 MIPS32_EF_R28
283 +#define EF_R29 MIPS32_EF_R29
284 +#define EF_R30 MIPS32_EF_R30
285 +#define EF_R31 MIPS32_EF_R31
286 +#define EF_LO MIPS32_EF_LO
287 +#define EF_HI MIPS32_EF_HI
288 +#define EF_CP0_EPC MIPS32_EF_CP0_EPC
289 +#define EF_CP0_BADVADDR MIPS32_EF_CP0_BADVADDR
290 +#define EF_CP0_STATUS MIPS32_EF_CP0_STATUS
291 +#define EF_CP0_CAUSE MIPS32_EF_CP0_CAUSE
292 +#define EF_UNUSED0 MIPS32_EF_UNUSED0
293 +#define EF_SIZE MIPS32_EF_SIZE
294 +
295 +#elif defined(CONFIG_64BIT)
296 +
297 +#define EF_R0 MIPS64_EF_R0
298 +#define EF_R1 MIPS64_EF_R1
299 +#define EF_R2 MIPS64_EF_R2
300 +#define EF_R3 MIPS64_EF_R3
301 +#define EF_R4 MIPS64_EF_R4
302 +#define EF_R5 MIPS64_EF_R5
303 +#define EF_R6 MIPS64_EF_R6
304 +#define EF_R7 MIPS64_EF_R7
305 +#define EF_R8 MIPS64_EF_R8
306 +#define EF_R9 MIPS64_EF_R9
307 +#define EF_R10 MIPS64_EF_R10
308 +#define EF_R11 MIPS64_EF_R11
309 +#define EF_R12 MIPS64_EF_R12
310 +#define EF_R13 MIPS64_EF_R13
311 +#define EF_R14 MIPS64_EF_R14
312 +#define EF_R15 MIPS64_EF_R15
313 +#define EF_R16 MIPS64_EF_R16
314 +#define EF_R17 MIPS64_EF_R17
315 +#define EF_R18 MIPS64_EF_R18
316 +#define EF_R19 MIPS64_EF_R19
317 +#define EF_R20 MIPS64_EF_R20
318 +#define EF_R21 MIPS64_EF_R21
319 +#define EF_R22 MIPS64_EF_R22
320 +#define EF_R23 MIPS64_EF_R23
321 +#define EF_R24 MIPS64_EF_R24
322 +#define EF_R25 MIPS64_EF_R25
323 +#define EF_R26 MIPS64_EF_R26
324 +#define EF_R27 MIPS64_EF_R27
325 +#define EF_R28 MIPS64_EF_R28
326 +#define EF_R29 MIPS64_EF_R29
327 +#define EF_R30 MIPS64_EF_R30
328 +#define EF_R31 MIPS64_EF_R31
329 +#define EF_LO MIPS64_EF_LO
330 +#define EF_HI MIPS64_EF_HI
331 +#define EF_CP0_EPC MIPS64_EF_CP0_EPC
332 +#define EF_CP0_BADVADDR MIPS64_EF_CP0_BADVADDR
333 +#define EF_CP0_STATUS MIPS64_EF_CP0_STATUS
334 +#define EF_CP0_CAUSE MIPS64_EF_CP0_CAUSE
335 +#define EF_SIZE MIPS64_EF_SIZE
336
337 #endif /* CONFIG_64BIT */
338
339 diff --git a/arch/mips/include/asm/thread_info.h b/arch/mips/include/asm/thread_info.h
340 index 895320e25662..e6e5d9162213 100644
341 --- a/arch/mips/include/asm/thread_info.h
342 +++ b/arch/mips/include/asm/thread_info.h
343 @@ -131,6 +131,8 @@ static inline struct thread_info *current_thread_info(void)
344 #define _TIF_FPUBOUND (1<<TIF_FPUBOUND)
345 #define _TIF_LOAD_WATCH (1<<TIF_LOAD_WATCH)
346
347 +#define _TIF_WORK_SYSCALL_ENTRY (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | _TIF_SECCOMP)
348 +
349 /* work to do in syscall_trace_leave() */
350 #define _TIF_WORK_SYSCALL_EXIT (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT)
351
352 diff --git a/arch/mips/kernel/binfmt_elfo32.c b/arch/mips/kernel/binfmt_elfo32.c
353 index 202e581e6096..7fdf1de0447f 100644
354 --- a/arch/mips/kernel/binfmt_elfo32.c
355 +++ b/arch/mips/kernel/binfmt_elfo32.c
356 @@ -58,12 +58,6 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
357
358 #include <asm/processor.h>
359
360 -/*
361 - * When this file is selected, we are definitely running a 64bit kernel.
362 - * So using the right regs define in asm/reg.h
363 - */
364 -#define WANT_COMPAT_REG_H
365 -
366 /* These MUST be defined before elf.h gets included */
367 extern void elf32_core_copy_regs(elf_gregset_t grp, struct pt_regs *regs);
368 #define ELF_CORE_COPY_REGS(_dest, _regs) elf32_core_copy_regs(_dest, _regs);
369 @@ -135,21 +129,21 @@ void elf32_core_copy_regs(elf_gregset_t grp, struct pt_regs *regs)
370 {
371 int i;
372
373 - for (i = 0; i < EF_R0; i++)
374 + for (i = 0; i < MIPS32_EF_R0; i++)
375 grp[i] = 0;
376 - grp[EF_R0] = 0;
377 + grp[MIPS32_EF_R0] = 0;
378 for (i = 1; i <= 31; i++)
379 - grp[EF_R0 + i] = (elf_greg_t) regs->regs[i];
380 - grp[EF_R26] = 0;
381 - grp[EF_R27] = 0;
382 - grp[EF_LO] = (elf_greg_t) regs->lo;
383 - grp[EF_HI] = (elf_greg_t) regs->hi;
384 - grp[EF_CP0_EPC] = (elf_greg_t) regs->cp0_epc;
385 - grp[EF_CP0_BADVADDR] = (elf_greg_t) regs->cp0_badvaddr;
386 - grp[EF_CP0_STATUS] = (elf_greg_t) regs->cp0_status;
387 - grp[EF_CP0_CAUSE] = (elf_greg_t) regs->cp0_cause;
388 -#ifdef EF_UNUSED0
389 - grp[EF_UNUSED0] = 0;
390 + grp[MIPS32_EF_R0 + i] = (elf_greg_t) regs->regs[i];
391 + grp[MIPS32_EF_R26] = 0;
392 + grp[MIPS32_EF_R27] = 0;
393 + grp[MIPS32_EF_LO] = (elf_greg_t) regs->lo;
394 + grp[MIPS32_EF_HI] = (elf_greg_t) regs->hi;
395 + grp[MIPS32_EF_CP0_EPC] = (elf_greg_t) regs->cp0_epc;
396 + grp[MIPS32_EF_CP0_BADVADDR] = (elf_greg_t) regs->cp0_badvaddr;
397 + grp[MIPS32_EF_CP0_STATUS] = (elf_greg_t) regs->cp0_status;
398 + grp[MIPS32_EF_CP0_CAUSE] = (elf_greg_t) regs->cp0_cause;
399 +#ifdef MIPS32_EF_UNUSED0
400 + grp[MIPS32_EF_UNUSED0] = 0;
401 #endif
402 }
403
404 diff --git a/arch/mips/kernel/irq-gic.c b/arch/mips/kernel/irq-gic.c
405 index c01b307317a9..bffbbc557879 100644
406 --- a/arch/mips/kernel/irq-gic.c
407 +++ b/arch/mips/kernel/irq-gic.c
408 @@ -256,11 +256,13 @@ static void __init gic_setup_intr(unsigned int intr, unsigned int cpu,
409
410 /* Setup Intr to Pin mapping */
411 if (pin & GIC_MAP_TO_NMI_MSK) {
412 + int i;
413 +
414 GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_MAP_TO_PIN(intr)), pin);
415 /* FIXME: hack to route NMI to all cpu's */
416 - for (cpu = 0; cpu < NR_CPUS; cpu += 32) {
417 + for (i = 0; i < NR_CPUS; i += 32) {
418 GICWRITE(GIC_REG_ADDR(SHARED,
419 - GIC_SH_MAP_TO_VPE_REG_OFF(intr, cpu)),
420 + GIC_SH_MAP_TO_VPE_REG_OFF(intr, i)),
421 0xffffffff);
422 }
423 } else {
424 diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
425 index 9c6299c733a3..1b95b2443221 100644
426 --- a/arch/mips/kernel/ptrace.c
427 +++ b/arch/mips/kernel/ptrace.c
428 @@ -161,6 +161,7 @@ int ptrace_setfpregs(struct task_struct *child, __u32 __user *data)
429 __get_user(fregs[i], i + (__u64 __user *) data);
430
431 __get_user(child->thread.fpu.fcr31, data + 64);
432 + child->thread.fpu.fcr31 &= ~FPU_CSR_ALL_X;
433
434 /* FIR may not be written. */
435
436 @@ -451,7 +452,7 @@ long arch_ptrace(struct task_struct *child, long request,
437 break;
438 #endif
439 case FPC_CSR:
440 - child->thread.fpu.fcr31 = data;
441 + child->thread.fpu.fcr31 = data & ~FPU_CSR_ALL_X;
442 break;
443 case DSP_BASE ... DSP_BASE + 5: {
444 dspreg_t *dregs;
445 diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S
446 index 9b36424b03c5..ed5bafb5d637 100644
447 --- a/arch/mips/kernel/scall32-o32.S
448 +++ b/arch/mips/kernel/scall32-o32.S
449 @@ -52,7 +52,7 @@ NESTED(handle_sys, PT_SIZE, sp)
450
451 stack_done:
452 lw t0, TI_FLAGS($28) # syscall tracing enabled?
453 - li t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
454 + li t1, _TIF_WORK_SYSCALL_ENTRY
455 and t0, t1
456 bnez t0, syscall_trace_entry # -> yes
457
458 diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S
459 index 97a5909a61cf..be6627ead619 100644
460 --- a/arch/mips/kernel/scall64-64.S
461 +++ b/arch/mips/kernel/scall64-64.S
462 @@ -54,7 +54,7 @@ NESTED(handle_sys64, PT_SIZE, sp)
463
464 sd a3, PT_R26(sp) # save a3 for syscall restarting
465
466 - li t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
467 + li t1, _TIF_WORK_SYSCALL_ENTRY
468 LONG_L t0, TI_FLAGS($28) # syscall tracing enabled?
469 and t0, t1, t0
470 bnez t0, syscall_trace_entry
471 diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S
472 index edcb6594e7b5..cab150789c8d 100644
473 --- a/arch/mips/kernel/scall64-n32.S
474 +++ b/arch/mips/kernel/scall64-n32.S
475 @@ -47,7 +47,7 @@ NESTED(handle_sysn32, PT_SIZE, sp)
476
477 sd a3, PT_R26(sp) # save a3 for syscall restarting
478
479 - li t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
480 + li t1, _TIF_WORK_SYSCALL_ENTRY
481 LONG_L t0, TI_FLAGS($28) # syscall tracing enabled?
482 and t0, t1, t0
483 bnez t0, n32_syscall_trace_entry
484 diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S
485 index 74f485d3c0ef..37605dc8eef7 100644
486 --- a/arch/mips/kernel/scall64-o32.S
487 +++ b/arch/mips/kernel/scall64-o32.S
488 @@ -81,7 +81,7 @@ NESTED(handle_sys, PT_SIZE, sp)
489 PTR 4b, bad_stack
490 .previous
491
492 - li t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
493 + li t1, _TIF_WORK_SYSCALL_ENTRY
494 LONG_L t0, TI_FLAGS($28) # syscall tracing enabled?
495 and t0, t1, t0
496 bnez t0, trace_a_syscall
497 diff --git a/arch/mips/kernel/unaligned.c b/arch/mips/kernel/unaligned.c
498 index 203d8857070d..2c81265bcf46 100644
499 --- a/arch/mips/kernel/unaligned.c
500 +++ b/arch/mips/kernel/unaligned.c
501 @@ -604,7 +604,6 @@ static void emulate_load_store_insn(struct pt_regs *regs,
502 case sdc1_op:
503 die_if_kernel("Unaligned FP access in kernel code", regs);
504 BUG_ON(!used_math());
505 - BUG_ON(!is_fpu_owner());
506
507 lose_fpu(1); /* Save FPU state for the emulator. */
508 res = fpu_emulator_cop1Handler(regs, &current->thread.fpu, 1,
509 diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
510 index 21813beec7a5..5495101d32c8 100644
511 --- a/arch/mips/mm/c-r4k.c
512 +++ b/arch/mips/mm/c-r4k.c
513 @@ -12,6 +12,7 @@
514 #include <linux/highmem.h>
515 #include <linux/kernel.h>
516 #include <linux/linkage.h>
517 +#include <linux/preempt.h>
518 #include <linux/sched.h>
519 #include <linux/smp.h>
520 #include <linux/mm.h>
521 @@ -601,6 +602,7 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
522 /* Catch bad driver code */
523 BUG_ON(size == 0);
524
525 + preempt_disable();
526 if (cpu_has_inclusive_pcaches) {
527 if (size >= scache_size)
528 r4k_blast_scache();
529 @@ -621,6 +623,7 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
530 R4600_HIT_CACHEOP_WAR_IMPL;
531 blast_dcache_range(addr, addr + size);
532 }
533 + preempt_enable();
534
535 bc_wback_inv(addr, size);
536 __sync();
537 @@ -631,6 +634,7 @@ static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
538 /* Catch bad driver code */
539 BUG_ON(size == 0);
540
541 + preempt_disable();
542 if (cpu_has_inclusive_pcaches) {
543 if (size >= scache_size)
544 r4k_blast_scache();
545 @@ -655,6 +659,7 @@ static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
546 R4600_HIT_CACHEOP_WAR_IMPL;
547 blast_inv_dcache_range(addr, addr + size);
548 }
549 + preempt_enable();
550
551 bc_inv(addr, size);
552 __sync();
553 diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c
554 index afeef93f81a7..0e17e1352718 100644
555 --- a/arch/mips/mm/tlbex.c
556 +++ b/arch/mips/mm/tlbex.c
557 @@ -1329,6 +1329,7 @@ static void __cpuinit build_r4000_tlb_refill_handler(void)
558 }
559 #ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT
560 uasm_l_tlb_huge_update(&l, p);
561 + UASM_i_LW(&p, K0, 0, K1);
562 build_huge_update_entries(&p, htlb_info.huge_pte, K1);
563 build_huge_tlb_write_entry(&p, &l, &r, K0, tlb_random,
564 htlb_info.restore_scratch);
565 diff --git a/arch/openrisc/kernel/entry.S b/arch/openrisc/kernel/entry.S
566 index d8a455ede5a7..fec8bf97d806 100644
567 --- a/arch/openrisc/kernel/entry.S
568 +++ b/arch/openrisc/kernel/entry.S
569 @@ -853,37 +853,44 @@ UNHANDLED_EXCEPTION(_vector_0x1f00,0x1f00)
570
571 /* ========================================================[ return ] === */
572
573 +_resume_userspace:
574 + DISABLE_INTERRUPTS(r3,r4)
575 + l.lwz r4,TI_FLAGS(r10)
576 + l.andi r13,r4,_TIF_WORK_MASK
577 + l.sfeqi r13,0
578 + l.bf _restore_all
579 + l.nop
580 +
581 _work_pending:
582 - /*
583 - * if (current_thread_info->flags & _TIF_NEED_RESCHED)
584 - * schedule();
585 - */
586 - l.lwz r5,TI_FLAGS(r10)
587 - l.andi r3,r5,_TIF_NEED_RESCHED
588 - l.sfnei r3,0
589 - l.bnf _work_notifysig
590 + l.lwz r5,PT_ORIG_GPR11(r1)
591 + l.sfltsi r5,0
592 + l.bnf 1f
593 l.nop
594 - l.jal schedule
595 + l.andi r5,r5,0
596 +1:
597 + l.jal do_work_pending
598 + l.ori r3,r1,0 /* pt_regs */
599 +
600 + l.sfeqi r11,0
601 + l.bf _restore_all
602 l.nop
603 - l.j _resume_userspace
604 + l.sfltsi r11,0
605 + l.bnf 1f
606 l.nop
607 -
608 -/* Handle pending signals and notify-resume requests.
609 - * do_notify_resume must be passed the latest pushed pt_regs, not
610 - * necessarily the "userspace" ones. Also, pt_regs->syscallno
611 - * must be set so that the syscall restart functionality works.
612 - */
613 -_work_notifysig:
614 - l.jal do_notify_resume
615 - l.ori r3,r1,0 /* pt_regs */
616 -
617 -_resume_userspace:
618 - DISABLE_INTERRUPTS(r3,r4)
619 - l.lwz r3,TI_FLAGS(r10)
620 - l.andi r3,r3,_TIF_WORK_MASK
621 - l.sfnei r3,0
622 - l.bf _work_pending
623 + l.and r11,r11,r0
624 + l.ori r11,r11,__NR_restart_syscall
625 + l.j _syscall_check_trace_enter
626 l.nop
627 +1:
628 + l.lwz r11,PT_ORIG_GPR11(r1)
629 + /* Restore arg registers */
630 + l.lwz r3,PT_GPR3(r1)
631 + l.lwz r4,PT_GPR4(r1)
632 + l.lwz r5,PT_GPR5(r1)
633 + l.lwz r6,PT_GPR6(r1)
634 + l.lwz r7,PT_GPR7(r1)
635 + l.j _syscall_check_trace_enter
636 + l.lwz r8,PT_GPR8(r1)
637
638 _restore_all:
639 RESTORE_ALL
640 diff --git a/arch/openrisc/kernel/signal.c b/arch/openrisc/kernel/signal.c
641 index ae167f7e081a..c277ec82783d 100644
642 --- a/arch/openrisc/kernel/signal.c
643 +++ b/arch/openrisc/kernel/signal.c
644 @@ -28,24 +28,24 @@
645 #include <linux/tracehook.h>
646
647 #include <asm/processor.h>
648 +#include <asm/syscall.h>
649 #include <asm/ucontext.h>
650 #include <asm/uaccess.h>
651
652 #define DEBUG_SIG 0
653
654 struct rt_sigframe {
655 - struct siginfo *pinfo;
656 - void *puc;
657 struct siginfo info;
658 struct ucontext uc;
659 unsigned char retcode[16]; /* trampoline code */
660 };
661
662 -static int restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc)
663 +static int restore_sigcontext(struct pt_regs *regs,
664 + struct sigcontext __user *sc)
665 {
666 - unsigned int err = 0;
667 + int err = 0;
668
669 - /* Alwys make any pending restarted system call return -EINTR */
670 + /* Always make any pending restarted system calls return -EINTR */
671 current_thread_info()->restart_block.fn = do_no_restart_syscall;
672
673 /*
674 @@ -53,25 +53,21 @@ static int restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc)
675 * (sc is already checked for VERIFY_READ since the sigframe was
676 * checked in sys_sigreturn previously)
677 */
678 - if (__copy_from_user(regs, sc->regs.gpr, 32 * sizeof(unsigned long)))
679 - goto badframe;
680 - if (__copy_from_user(&regs->pc, &sc->regs.pc, sizeof(unsigned long)))
681 - goto badframe;
682 - if (__copy_from_user(&regs->sr, &sc->regs.sr, sizeof(unsigned long)))
683 - goto badframe;
684 + err |= __copy_from_user(regs, sc->regs.gpr, 32 * sizeof(unsigned long));
685 + err |= __copy_from_user(&regs->pc, &sc->regs.pc, sizeof(unsigned long));
686 + err |= __copy_from_user(&regs->sr, &sc->regs.sr, sizeof(unsigned long));
687
688 /* make sure the SM-bit is cleared so user-mode cannot fool us */
689 regs->sr &= ~SPR_SR_SM;
690
691 + regs->orig_gpr11 = -1; /* Avoid syscall restart checks */
692 +
693 /* TODO: the other ports use regs->orig_XX to disable syscall checks
694 * after this completes, but we don't use that mechanism. maybe we can
695 * use it now ?
696 */
697
698 return err;
699 -
700 -badframe:
701 - return 1;
702 }
703
704 asmlinkage long _sys_rt_sigreturn(struct pt_regs *regs)
705 @@ -111,21 +107,18 @@ badframe:
706 * Set up a signal frame.
707 */
708
709 -static int setup_sigcontext(struct sigcontext *sc, struct pt_regs *regs,
710 - unsigned long mask)
711 +static int setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
712 {
713 int err = 0;
714
715 /* copy the regs */
716 -
717 + /* There should be no need to save callee-saved registers here...
718 + * ...but we save them anyway. Revisit this
719 + */
720 err |= __copy_to_user(sc->regs.gpr, regs, 32 * sizeof(unsigned long));
721 err |= __copy_to_user(&sc->regs.pc, &regs->pc, sizeof(unsigned long));
722 err |= __copy_to_user(&sc->regs.sr, &regs->sr, sizeof(unsigned long));
723
724 - /* then some other stuff */
725 -
726 - err |= __put_user(mask, &sc->oldmask);
727 -
728 return err;
729 }
730
731 @@ -181,24 +174,18 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
732 int err = 0;
733
734 frame = get_sigframe(ka, regs, sizeof(*frame));
735 -
736 if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
737 goto give_sigsegv;
738
739 - err |= __put_user(&frame->info, &frame->pinfo);
740 - err |= __put_user(&frame->uc, &frame->puc);
741 -
742 + /* Create siginfo. */
743 if (ka->sa.sa_flags & SA_SIGINFO)
744 err |= copy_siginfo_to_user(&frame->info, info);
745 - if (err)
746 - goto give_sigsegv;
747
748 - /* Clear all the bits of the ucontext we don't use. */
749 - err |= __clear_user(&frame->uc, offsetof(struct ucontext, uc_mcontext));
750 + /* Create the ucontext. */
751 err |= __put_user(0, &frame->uc.uc_flags);
752 err |= __put_user(NULL, &frame->uc.uc_link);
753 err |= __save_altstack(&frame->uc.uc_stack, regs->sp);
754 - err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, set->sig[0]);
755 + err |= setup_sigcontext(regs, &frame->uc.uc_mcontext);
756
757 err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
758
759 @@ -207,9 +194,12 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
760
761 /* trampoline - the desired return ip is the retcode itself */
762 return_ip = (unsigned long)&frame->retcode;
763 - /* This is l.ori r11,r0,__NR_sigreturn, l.sys 1 */
764 - err |= __put_user(0xa960, (short *)(frame->retcode + 0));
765 - err |= __put_user(__NR_rt_sigreturn, (short *)(frame->retcode + 2));
766 + /* This is:
767 + l.ori r11,r0,__NR_sigreturn
768 + l.sys 1
769 + */
770 + err |= __put_user(0xa960, (short *)(frame->retcode + 0));
771 + err |= __put_user(__NR_rt_sigreturn, (short *)(frame->retcode + 2));
772 err |= __put_user(0x20000001, (unsigned long *)(frame->retcode + 4));
773 err |= __put_user(0x15000000, (unsigned long *)(frame->retcode + 8));
774
775 @@ -262,82 +252,106 @@ handle_signal(unsigned long sig,
776 * mode below.
777 */
778
779 -void do_signal(struct pt_regs *regs)
780 +int do_signal(struct pt_regs *regs, int syscall)
781 {
782 siginfo_t info;
783 int signr;
784 struct k_sigaction ka;
785 -
786 - /*
787 - * We want the common case to go fast, which
788 - * is why we may in certain cases get here from
789 - * kernel mode. Just return without doing anything
790 - * if so.
791 - */
792 - if (!user_mode(regs))
793 - return;
794 -
795 - signr = get_signal_to_deliver(&info, &ka, regs, NULL);
796 -
797 - /* If we are coming out of a syscall then we need
798 - * to check if the syscall was interrupted and wants to be
799 - * restarted after handling the signal. If so, the original
800 - * syscall number is put back into r11 and the PC rewound to
801 - * point at the l.sys instruction that resulted in the
802 - * original syscall. Syscall results other than the four
803 - * below mean that the syscall executed to completion and no
804 - * restart is necessary.
805 - */
806 - if (regs->orig_gpr11) {
807 - int restart = 0;
808 -
809 - switch (regs->gpr[11]) {
810 + unsigned long continue_addr = 0;
811 + unsigned long restart_addr = 0;
812 + unsigned long retval = 0;
813 + int restart = 0;
814 +
815 + if (syscall) {
816 + continue_addr = regs->pc;
817 + restart_addr = continue_addr - 4;
818 + retval = regs->gpr[11];
819 +
820 + /*
821 + * Setup syscall restart here so that a debugger will
822 + * see the already changed PC.
823 + */
824 + switch (retval) {
825 case -ERESTART_RESTARTBLOCK:
826 + restart = -2;
827 + /* Fall through */
828 case -ERESTARTNOHAND:
829 - /* Restart if there is no signal handler */
830 - restart = (signr <= 0);
831 - break;
832 case -ERESTARTSYS:
833 - /* Restart if there no signal handler or
834 - * SA_RESTART flag is set */
835 - restart = (signr <= 0 || (ka.sa.sa_flags & SA_RESTART));
836 - break;
837 case -ERESTARTNOINTR:
838 - /* Always restart */
839 - restart = 1;
840 + restart++;
841 + regs->gpr[11] = regs->orig_gpr11;
842 + regs->pc = restart_addr;
843 break;
844 }
845 + }
846
847 - if (restart) {
848 - if (regs->gpr[11] == -ERESTART_RESTARTBLOCK)
849 - regs->gpr[11] = __NR_restart_syscall;
850 - else
851 - regs->gpr[11] = regs->orig_gpr11;
852 - regs->pc -= 4;
853 - } else {
854 - regs->gpr[11] = -EINTR;
855 + /*
856 + * Get the signal to deliver. When running under ptrace, at this
857 + * point the debugger may change all our registers ...
858 + */
859 + signr = get_signal_to_deliver(&info, &ka, regs, NULL);
860 + /*
861 + * Depending on the signal settings we may need to revert the
862 + * decision to restart the system call. But skip this if a
863 + * debugger has chosen to restart at a different PC.
864 + */
865 + if (signr > 0) {
866 + if (unlikely(restart) && regs->pc == restart_addr) {
867 + if (retval == -ERESTARTNOHAND ||
868 + retval == -ERESTART_RESTARTBLOCK
869 + || (retval == -ERESTARTSYS
870 + && !(ka.sa.sa_flags & SA_RESTART))) {
871 + /* No automatic restart */
872 + regs->gpr[11] = -EINTR;
873 + regs->pc = continue_addr;
874 + }
875 }
876 - }
877
878 - if (signr <= 0) {
879 - /* no signal to deliver so we just put the saved sigmask
880 - * back */
881 - restore_saved_sigmask();
882 - } else { /* signr > 0 */
883 - /* Whee! Actually deliver the signal. */
884 handle_signal(signr, &info, &ka, regs);
885 + } else {
886 + /* no handler */
887 + restore_saved_sigmask();
888 + /*
889 + * Restore pt_regs PC as syscall restart will be handled by
890 + * kernel without return to userspace
891 + */
892 + if (unlikely(restart) && regs->pc == restart_addr) {
893 + regs->pc = continue_addr;
894 + return restart;
895 + }
896 }
897
898 - return;
899 + return 0;
900 }
901
902 -asmlinkage void do_notify_resume(struct pt_regs *regs)
903 +asmlinkage int
904 +do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
905 {
906 - if (current_thread_info()->flags & _TIF_SIGPENDING)
907 - do_signal(regs);
908 -
909 - if (current_thread_info()->flags & _TIF_NOTIFY_RESUME) {
910 - clear_thread_flag(TIF_NOTIFY_RESUME);
911 - tracehook_notify_resume(regs);
912 - }
913 + do {
914 + if (likely(thread_flags & _TIF_NEED_RESCHED)) {
915 + schedule();
916 + } else {
917 + if (unlikely(!user_mode(regs)))
918 + return 0;
919 + local_irq_enable();
920 + if (thread_flags & _TIF_SIGPENDING) {
921 + int restart = do_signal(regs, syscall);
922 + if (unlikely(restart)) {
923 + /*
924 + * Restart without handlers.
925 + * Deal with it without leaving
926 + * the kernel space.
927 + */
928 + return restart;
929 + }
930 + syscall = 0;
931 + } else {
932 + clear_thread_flag(TIF_NOTIFY_RESUME);
933 + tracehook_notify_resume(regs);
934 + }
935 + }
936 + local_irq_disable();
937 + thread_flags = current_thread_info()->flags;
938 + } while (thread_flags & _TIF_WORK_MASK);
939 + return 0;
940 }
941 diff --git a/arch/powerpc/include/asm/pte-hash64-64k.h b/arch/powerpc/include/asm/pte-hash64-64k.h
942 index d836d945068d..063fcadd1a00 100644
943 --- a/arch/powerpc/include/asm/pte-hash64-64k.h
944 +++ b/arch/powerpc/include/asm/pte-hash64-64k.h
945 @@ -40,17 +40,39 @@
946
947 #ifndef __ASSEMBLY__
948
949 +#include <asm/barrier.h> /* for smp_rmb() */
950 +
951 /*
952 * With 64K pages on hash table, we have a special PTE format that
953 * uses a second "half" of the page table to encode sub-page information
954 * in order to deal with 64K made of 4K HW pages. Thus we override the
955 * generic accessors and iterators here
956 */
957 -#define __real_pte(e,p) ((real_pte_t) { \
958 - (e), (pte_val(e) & _PAGE_COMBO) ? \
959 - (pte_val(*((p) + PTRS_PER_PTE))) : 0 })
960 -#define __rpte_to_hidx(r,index) ((pte_val((r).pte) & _PAGE_COMBO) ? \
961 - (((r).hidx >> ((index)<<2)) & 0xf) : ((pte_val((r).pte) >> 12) & 0xf))
962 +#define __real_pte __real_pte
963 +static inline real_pte_t __real_pte(pte_t pte, pte_t *ptep)
964 +{
965 + real_pte_t rpte;
966 +
967 + rpte.pte = pte;
968 + rpte.hidx = 0;
969 + if (pte_val(pte) & _PAGE_COMBO) {
970 + /*
971 + * Make sure we order the hidx load against the _PAGE_COMBO
972 + * check. The store side ordering is done in __hash_page_4K
973 + */
974 + smp_rmb();
975 + rpte.hidx = pte_val(*((ptep) + PTRS_PER_PTE));
976 + }
977 + return rpte;
978 +}
979 +
980 +static inline unsigned long __rpte_to_hidx(real_pte_t rpte, unsigned long index)
981 +{
982 + if ((pte_val(rpte.pte) & _PAGE_COMBO))
983 + return (rpte.hidx >> (index<<2)) & 0xf;
984 + return (pte_val(rpte.pte) >> 12) & 0xf;
985 +}
986 +
987 #define __rpte_to_pte(r) ((r).pte)
988 #define __rpte_sub_valid(rpte, index) \
989 (pte_val(rpte.pte) & (_PAGE_HPTE_SUB0 >> (index)))
990 diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
991 index b7293bba0062..08c6f3185d45 100644
992 --- a/arch/powerpc/mm/numa.c
993 +++ b/arch/powerpc/mm/numa.c
994 @@ -586,8 +586,8 @@ static int __cpuinit cpu_numa_callback(struct notifier_block *nfb,
995 case CPU_UP_CANCELED:
996 case CPU_UP_CANCELED_FROZEN:
997 unmap_cpu_from_node(lcpu);
998 - break;
999 ret = NOTIFY_OK;
1000 + break;
1001 #endif
1002 }
1003 return ret;
1004 diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
1005 index 9a432de363b8..bebe64ed5dc3 100644
1006 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
1007 +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
1008 @@ -158,7 +158,7 @@ static int pseries_remove_memory(struct device_node *np)
1009 static inline int pseries_remove_memblock(unsigned long base,
1010 unsigned int memblock_size)
1011 {
1012 - return -EOPNOTSUPP;
1013 + return 0;
1014 }
1015 static inline int pseries_remove_memory(struct device_node *np)
1016 {
1017 diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
1018 index b95219d2168d..1ff8e97f853a 100644
1019 --- a/block/blk-cgroup.c
1020 +++ b/block/blk-cgroup.c
1021 @@ -883,6 +883,13 @@ void blkcg_drain_queue(struct request_queue *q)
1022 if (!q->root_blkg)
1023 return;
1024
1025 + /*
1026 + * @q could be exiting and already have destroyed all blkgs as
1027 + * indicated by NULL root_blkg. If so, don't confuse policies.
1028 + */
1029 + if (!q->root_blkg)
1030 + return;
1031 +
1032 blk_throtl_drain(q);
1033 }
1034
1035 diff --git a/drivers/acpi/acpica/utcopy.c b/drivers/acpi/acpica/utcopy.c
1036 index e4c9291fc0a3..a63a4cdd2ce8 100644
1037 --- a/drivers/acpi/acpica/utcopy.c
1038 +++ b/drivers/acpi/acpica/utcopy.c
1039 @@ -998,5 +998,11 @@ acpi_ut_copy_iobject_to_iobject(union acpi_operand_object *source_desc,
1040 status = acpi_ut_copy_simple_object(source_desc, *dest_desc);
1041 }
1042
1043 + /* Delete the allocated object if copy failed */
1044 +
1045 + if (ACPI_FAILURE(status)) {
1046 + acpi_ut_remove_reference(*dest_desc);
1047 + }
1048 +
1049 return_ACPI_STATUS(status);
1050 }
1051 diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
1052 index 4056d3175178..a88894190e41 100644
1053 --- a/drivers/acpi/processor_idle.c
1054 +++ b/drivers/acpi/processor_idle.c
1055 @@ -1101,9 +1101,9 @@ int acpi_processor_cst_has_changed(struct acpi_processor *pr)
1056
1057 if (pr->id == 0 && cpuidle_get_driver() == &acpi_idle_driver) {
1058
1059 - cpuidle_pause_and_lock();
1060 /* Protect against cpu-hotplug */
1061 get_online_cpus();
1062 + cpuidle_pause_and_lock();
1063
1064 /* Disable all cpuidle devices */
1065 for_each_online_cpu(cpu) {
1066 @@ -1130,8 +1130,8 @@ int acpi_processor_cst_has_changed(struct acpi_processor *pr)
1067 cpuidle_enable_device(dev);
1068 }
1069 }
1070 - put_online_cpus();
1071 cpuidle_resume_and_unlock();
1072 + put_online_cpus();
1073 }
1074
1075 return 0;
1076 diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
1077 index cca761e80d89..091682fb1617 100644
1078 --- a/drivers/acpi/scan.c
1079 +++ b/drivers/acpi/scan.c
1080 @@ -769,12 +769,17 @@ static void acpi_device_notify(acpi_handle handle, u32 event, void *data)
1081 device->driver->ops.notify(device, event);
1082 }
1083
1084 -static acpi_status acpi_device_notify_fixed(void *data)
1085 +static void acpi_device_notify_fixed(void *data)
1086 {
1087 struct acpi_device *device = data;
1088
1089 /* Fixed hardware devices have no handles */
1090 acpi_device_notify(NULL, ACPI_FIXED_HARDWARE_EVENT, device);
1091 +}
1092 +
1093 +static acpi_status acpi_device_fixed_event(void *data)
1094 +{
1095 + acpi_os_execute(OSL_NOTIFY_HANDLER, acpi_device_notify_fixed, data);
1096 return AE_OK;
1097 }
1098
1099 @@ -785,12 +790,12 @@ static int acpi_device_install_notify_handler(struct acpi_device *device)
1100 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON)
1101 status =
1102 acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
1103 - acpi_device_notify_fixed,
1104 + acpi_device_fixed_event,
1105 device);
1106 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON)
1107 status =
1108 acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
1109 - acpi_device_notify_fixed,
1110 + acpi_device_fixed_event,
1111 device);
1112 else
1113 status = acpi_install_notify_handler(device->handle,
1114 @@ -807,10 +812,10 @@ static void acpi_device_remove_notify_handler(struct acpi_device *device)
1115 {
1116 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON)
1117 acpi_remove_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
1118 - acpi_device_notify_fixed);
1119 + acpi_device_fixed_event);
1120 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON)
1121 acpi_remove_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
1122 - acpi_device_notify_fixed);
1123 + acpi_device_fixed_event);
1124 else
1125 acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
1126 acpi_device_notify);
1127 diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c
1128 index 7c3b3dcbfbc8..f659a571ad23 100644
1129 --- a/drivers/char/tpm/tpm.c
1130 +++ b/drivers/char/tpm/tpm.c
1131 @@ -533,11 +533,10 @@ static int tpm_startup(struct tpm_chip *chip, __be16 startup_type)
1132 int tpm_get_timeouts(struct tpm_chip *chip)
1133 {
1134 struct tpm_cmd_t tpm_cmd;
1135 - struct timeout_t *timeout_cap;
1136 + unsigned long new_timeout[4];
1137 + unsigned long old_timeout[4];
1138 struct duration_t *duration_cap;
1139 ssize_t rc;
1140 - u32 timeout;
1141 - unsigned int scale = 1;
1142
1143 tpm_cmd.header.in = tpm_getcap_header;
1144 tpm_cmd.params.getcap_in.cap = TPM_CAP_PROP;
1145 @@ -571,25 +570,46 @@ int tpm_get_timeouts(struct tpm_chip *chip)
1146 != sizeof(tpm_cmd.header.out) + sizeof(u32) + 4 * sizeof(u32))
1147 return -EINVAL;
1148
1149 - timeout_cap = &tpm_cmd.params.getcap_out.cap.timeout;
1150 - /* Don't overwrite default if value is 0 */
1151 - timeout = be32_to_cpu(timeout_cap->a);
1152 - if (timeout && timeout < 1000) {
1153 - /* timeouts in msec rather usec */
1154 - scale = 1000;
1155 - chip->vendor.timeout_adjusted = true;
1156 + old_timeout[0] = be32_to_cpu(tpm_cmd.params.getcap_out.cap.timeout.a);
1157 + old_timeout[1] = be32_to_cpu(tpm_cmd.params.getcap_out.cap.timeout.b);
1158 + old_timeout[2] = be32_to_cpu(tpm_cmd.params.getcap_out.cap.timeout.c);
1159 + old_timeout[3] = be32_to_cpu(tpm_cmd.params.getcap_out.cap.timeout.d);
1160 + memcpy(new_timeout, old_timeout, sizeof(new_timeout));
1161 +
1162 + /*
1163 + * Provide ability for vendor overrides of timeout values in case
1164 + * of misreporting.
1165 + */
1166 + if (chip->vendor.update_timeouts != NULL)
1167 + chip->vendor.timeout_adjusted =
1168 + chip->vendor.update_timeouts(chip, new_timeout);
1169 +
1170 + if (!chip->vendor.timeout_adjusted) {
1171 + /* Don't overwrite default if value is 0 */
1172 + if (new_timeout[0] != 0 && new_timeout[0] < 1000) {
1173 + int i;
1174 +
1175 + /* timeouts in msec rather usec */
1176 + for (i = 0; i != ARRAY_SIZE(new_timeout); i++)
1177 + new_timeout[i] *= 1000;
1178 + chip->vendor.timeout_adjusted = true;
1179 + }
1180 }
1181 - if (timeout)
1182 - chip->vendor.timeout_a = usecs_to_jiffies(timeout * scale);
1183 - timeout = be32_to_cpu(timeout_cap->b);
1184 - if (timeout)
1185 - chip->vendor.timeout_b = usecs_to_jiffies(timeout * scale);
1186 - timeout = be32_to_cpu(timeout_cap->c);
1187 - if (timeout)
1188 - chip->vendor.timeout_c = usecs_to_jiffies(timeout * scale);
1189 - timeout = be32_to_cpu(timeout_cap->d);
1190 - if (timeout)
1191 - chip->vendor.timeout_d = usecs_to_jiffies(timeout * scale);
1192 +
1193 + /* Report adjusted timeouts */
1194 + if (chip->vendor.timeout_adjusted) {
1195 + dev_info(chip->dev,
1196 + HW_ERR "Adjusting reported timeouts: A %lu->%luus B %lu->%luus C %lu->%luus D %lu->%luus\n",
1197 + old_timeout[0], new_timeout[0],
1198 + old_timeout[1], new_timeout[1],
1199 + old_timeout[2], new_timeout[2],
1200 + old_timeout[3], new_timeout[3]);
1201 + }
1202 +
1203 + chip->vendor.timeout_a = usecs_to_jiffies(new_timeout[0]);
1204 + chip->vendor.timeout_b = usecs_to_jiffies(new_timeout[1]);
1205 + chip->vendor.timeout_c = usecs_to_jiffies(new_timeout[2]);
1206 + chip->vendor.timeout_d = usecs_to_jiffies(new_timeout[3]);
1207
1208 duration:
1209 tpm_cmd.header.in = tpm_getcap_header;
1210 @@ -1423,13 +1443,13 @@ int tpm_get_random(u32 chip_num, u8 *out, size_t max)
1211 int err, total = 0, retries = 5;
1212 u8 *dest = out;
1213
1214 + if (!out || !num_bytes || max > TPM_MAX_RNG_DATA)
1215 + return -EINVAL;
1216 +
1217 chip = tpm_chip_find_get(chip_num);
1218 if (chip == NULL)
1219 return -ENODEV;
1220
1221 - if (!out || !num_bytes || max > TPM_MAX_RNG_DATA)
1222 - return -EINVAL;
1223 -
1224 do {
1225 tpm_cmd.header.in = tpm_getrandom_header;
1226 tpm_cmd.params.getrandom_in.num_bytes = cpu_to_be32(num_bytes);
1227 @@ -1448,6 +1468,7 @@ int tpm_get_random(u32 chip_num, u8 *out, size_t max)
1228 num_bytes -= recd;
1229 } while (retries-- && total < max);
1230
1231 + tpm_chip_put(chip);
1232 return total ? total : -EIO;
1233 }
1234 EXPORT_SYMBOL_GPL(tpm_get_random);
1235 diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
1236 index 0770d1d79366..deffda7678a0 100644
1237 --- a/drivers/char/tpm/tpm.h
1238 +++ b/drivers/char/tpm/tpm.h
1239 @@ -95,6 +95,9 @@ struct tpm_vendor_specific {
1240 int (*send) (struct tpm_chip *, u8 *, size_t);
1241 void (*cancel) (struct tpm_chip *);
1242 u8 (*status) (struct tpm_chip *);
1243 + bool (*update_timeouts)(struct tpm_chip *chip,
1244 + unsigned long *timeout_cap);
1245 +
1246 void (*release) (struct device *);
1247 struct miscdevice miscdev;
1248 struct attribute_group *attr_group;
1249 diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
1250 index 8a41b6be23a0..72f21377fa02 100644
1251 --- a/drivers/char/tpm/tpm_tis.c
1252 +++ b/drivers/char/tpm/tpm_tis.c
1253 @@ -373,6 +373,36 @@ out_err:
1254 return rc;
1255 }
1256
1257 +struct tis_vendor_timeout_override {
1258 + u32 did_vid;
1259 + unsigned long timeout_us[4];
1260 +};
1261 +
1262 +static const struct tis_vendor_timeout_override vendor_timeout_overrides[] = {
1263 + /* Atmel 3204 */
1264 + { 0x32041114, { (TIS_SHORT_TIMEOUT*1000), (TIS_LONG_TIMEOUT*1000),
1265 + (TIS_SHORT_TIMEOUT*1000), (TIS_SHORT_TIMEOUT*1000) } },
1266 +};
1267 +
1268 +static bool tpm_tis_update_timeouts(struct tpm_chip *chip,
1269 + unsigned long *timeout_cap)
1270 +{
1271 + int i;
1272 + u32 did_vid;
1273 +
1274 + did_vid = ioread32(chip->vendor.iobase + TPM_DID_VID(0));
1275 +
1276 + for (i = 0; i != ARRAY_SIZE(vendor_timeout_overrides); i++) {
1277 + if (vendor_timeout_overrides[i].did_vid != did_vid)
1278 + continue;
1279 + memcpy(timeout_cap, vendor_timeout_overrides[i].timeout_us,
1280 + sizeof(vendor_timeout_overrides[i].timeout_us));
1281 + return true;
1282 + }
1283 +
1284 + return false;
1285 +}
1286 +
1287 /*
1288 * Early probing for iTPM with STS_DATA_EXPECT flaw.
1289 * Try sending command without itpm flag set and if that
1290 @@ -475,6 +505,7 @@ static struct tpm_vendor_specific tpm_tis = {
1291 .recv = tpm_tis_recv,
1292 .send = tpm_tis_send,
1293 .cancel = tpm_tis_ready,
1294 + .update_timeouts = tpm_tis_update_timeouts,
1295 .req_complete_mask = TPM_STS_DATA_AVAIL | TPM_STS_VALID,
1296 .req_complete_val = TPM_STS_DATA_AVAIL | TPM_STS_VALID,
1297 .req_canceled = tpm_tis_req_canceled,
1298 diff --git a/drivers/firmware/efi/vars.c b/drivers/firmware/efi/vars.c
1299 index 391c67b182d9..7dbc319e1cf5 100644
1300 --- a/drivers/firmware/efi/vars.c
1301 +++ b/drivers/firmware/efi/vars.c
1302 @@ -481,7 +481,7 @@ EXPORT_SYMBOL_GPL(efivar_entry_remove);
1303 */
1304 static void efivar_entry_list_del_unlock(struct efivar_entry *entry)
1305 {
1306 - WARN_ON(!spin_is_locked(&__efivars->lock));
1307 + lockdep_assert_held(&__efivars->lock);
1308
1309 list_del(&entry->list);
1310 spin_unlock_irq(&__efivars->lock);
1311 @@ -507,7 +507,7 @@ int __efivar_entry_delete(struct efivar_entry *entry)
1312 const struct efivar_operations *ops = __efivars->ops;
1313 efi_status_t status;
1314
1315 - WARN_ON(!spin_is_locked(&__efivars->lock));
1316 + lockdep_assert_held(&__efivars->lock);
1317
1318 status = ops->set_variable(entry->var.VariableName,
1319 &entry->var.VendorGuid,
1320 @@ -667,7 +667,7 @@ struct efivar_entry *efivar_entry_find(efi_char16_t *name, efi_guid_t guid,
1321 int strsize1, strsize2;
1322 bool found = false;
1323
1324 - WARN_ON(!spin_is_locked(&__efivars->lock));
1325 + lockdep_assert_held(&__efivars->lock);
1326
1327 list_for_each_entry_safe(entry, n, head, list) {
1328 strsize1 = ucs2_strsize(name, 1024);
1329 @@ -731,7 +731,7 @@ int __efivar_entry_get(struct efivar_entry *entry, u32 *attributes,
1330 const struct efivar_operations *ops = __efivars->ops;
1331 efi_status_t status;
1332
1333 - WARN_ON(!spin_is_locked(&__efivars->lock));
1334 + lockdep_assert_held(&__efivars->lock);
1335
1336 status = ops->get_variable(entry->var.VariableName,
1337 &entry->var.VendorGuid,
1338 diff --git a/drivers/infiniband/core/iwcm.c b/drivers/infiniband/core/iwcm.c
1339 index c47c2034ca71..4293e89bbbdd 100644
1340 --- a/drivers/infiniband/core/iwcm.c
1341 +++ b/drivers/infiniband/core/iwcm.c
1342 @@ -46,6 +46,7 @@
1343 #include <linux/completion.h>
1344 #include <linux/slab.h>
1345 #include <linux/module.h>
1346 +#include <linux/sysctl.h>
1347
1348 #include <rdma/iw_cm.h>
1349 #include <rdma/ib_addr.h>
1350 @@ -65,6 +66,20 @@ struct iwcm_work {
1351 struct list_head free_list;
1352 };
1353
1354 +static unsigned int default_backlog = 256;
1355 +
1356 +static struct ctl_table_header *iwcm_ctl_table_hdr;
1357 +static struct ctl_table iwcm_ctl_table[] = {
1358 + {
1359 + .procname = "default_backlog",
1360 + .data = &default_backlog,
1361 + .maxlen = sizeof(default_backlog),
1362 + .mode = 0644,
1363 + .proc_handler = proc_dointvec,
1364 + },
1365 + { }
1366 +};
1367 +
1368 /*
1369 * The following services provide a mechanism for pre-allocating iwcm_work
1370 * elements. The design pre-allocates them based on the cm_id type:
1371 @@ -419,6 +434,9 @@ int iw_cm_listen(struct iw_cm_id *cm_id, int backlog)
1372
1373 cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
1374
1375 + if (!backlog)
1376 + backlog = default_backlog;
1377 +
1378 ret = alloc_work_entries(cm_id_priv, backlog);
1379 if (ret)
1380 return ret;
1381 @@ -1024,11 +1042,20 @@ static int __init iw_cm_init(void)
1382 if (!iwcm_wq)
1383 return -ENOMEM;
1384
1385 + iwcm_ctl_table_hdr = register_net_sysctl(&init_net, "net/iw_cm",
1386 + iwcm_ctl_table);
1387 + if (!iwcm_ctl_table_hdr) {
1388 + pr_err("iw_cm: couldn't register sysctl paths\n");
1389 + destroy_workqueue(iwcm_wq);
1390 + return -ENOMEM;
1391 + }
1392 +
1393 return 0;
1394 }
1395
1396 static void __exit iw_cm_cleanup(void)
1397 {
1398 + unregister_net_sysctl_table(iwcm_ctl_table_hdr);
1399 destroy_workqueue(iwcm_wq);
1400 }
1401
1402 diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
1403 index 1954daac0b59..35dd5ff662f1 100644
1404 --- a/drivers/infiniband/ulp/srp/ib_srp.c
1405 +++ b/drivers/infiniband/ulp/srp/ib_srp.c
1406 @@ -93,6 +93,7 @@ static void srp_send_completion(struct ib_cq *cq, void *target_ptr);
1407 static int srp_cm_handler(struct ib_cm_id *cm_id, struct ib_cm_event *event);
1408
1409 static struct scsi_transport_template *ib_srp_transport_template;
1410 +static struct workqueue_struct *srp_remove_wq;
1411
1412 static struct ib_client srp_client = {
1413 .name = "srp",
1414 @@ -456,7 +457,7 @@ static bool srp_queue_remove_work(struct srp_target_port *target)
1415 spin_unlock_irq(&target->lock);
1416
1417 if (changed)
1418 - queue_work(system_long_wq, &target->remove_work);
1419 + queue_work(srp_remove_wq, &target->remove_work);
1420
1421 return changed;
1422 }
1423 @@ -2530,9 +2531,10 @@ static void srp_remove_one(struct ib_device *device)
1424 spin_unlock(&host->target_lock);
1425
1426 /*
1427 - * Wait for target port removal tasks.
1428 + * Wait for tl_err and target port removal tasks.
1429 */
1430 flush_workqueue(system_long_wq);
1431 + flush_workqueue(srp_remove_wq);
1432
1433 kfree(host);
1434 }
1435 @@ -2577,16 +2579,22 @@ static int __init srp_init_module(void)
1436 indirect_sg_entries = cmd_sg_entries;
1437 }
1438
1439 + srp_remove_wq = create_workqueue("srp_remove");
1440 + if (IS_ERR(srp_remove_wq)) {
1441 + ret = PTR_ERR(srp_remove_wq);
1442 + goto out;
1443 + }
1444 +
1445 + ret = -ENOMEM;
1446 ib_srp_transport_template =
1447 srp_attach_transport(&ib_srp_transport_functions);
1448 if (!ib_srp_transport_template)
1449 - return -ENOMEM;
1450 + goto destroy_wq;
1451
1452 ret = class_register(&srp_class);
1453 if (ret) {
1454 pr_err("couldn't register class infiniband_srp\n");
1455 - srp_release_transport(ib_srp_transport_template);
1456 - return ret;
1457 + goto release_tr;
1458 }
1459
1460 ib_sa_register_client(&srp_sa_client);
1461 @@ -2594,13 +2602,22 @@ static int __init srp_init_module(void)
1462 ret = ib_register_client(&srp_client);
1463 if (ret) {
1464 pr_err("couldn't register IB client\n");
1465 - srp_release_transport(ib_srp_transport_template);
1466 - ib_sa_unregister_client(&srp_sa_client);
1467 - class_unregister(&srp_class);
1468 - return ret;
1469 + goto unreg_sa;
1470 }
1471
1472 - return 0;
1473 +out:
1474 + return ret;
1475 +
1476 +unreg_sa:
1477 + ib_sa_unregister_client(&srp_sa_client);
1478 + class_unregister(&srp_class);
1479 +
1480 +release_tr:
1481 + srp_release_transport(ib_srp_transport_template);
1482 +
1483 +destroy_wq:
1484 + destroy_workqueue(srp_remove_wq);
1485 + goto out;
1486 }
1487
1488 static void __exit srp_cleanup_module(void)
1489 @@ -2609,6 +2626,7 @@ static void __exit srp_cleanup_module(void)
1490 ib_sa_unregister_client(&srp_sa_client);
1491 class_unregister(&srp_class);
1492 srp_release_transport(ib_srp_transport_template);
1493 + destroy_workqueue(srp_remove_wq);
1494 }
1495
1496 module_init(srp_init_module);
1497 diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
1498 index 6f849cbcac6f..dfb401cba733 100644
1499 --- a/drivers/iommu/amd_iommu.c
1500 +++ b/drivers/iommu/amd_iommu.c
1501 @@ -3187,14 +3187,16 @@ free_domains:
1502
1503 static void cleanup_domain(struct protection_domain *domain)
1504 {
1505 - struct iommu_dev_data *dev_data, *next;
1506 + struct iommu_dev_data *entry;
1507 unsigned long flags;
1508
1509 write_lock_irqsave(&amd_iommu_devtable_lock, flags);
1510
1511 - list_for_each_entry_safe(dev_data, next, &domain->dev_list, list) {
1512 - __detach_device(dev_data);
1513 - atomic_set(&dev_data->bind, 0);
1514 + while (!list_empty(&domain->dev_list)) {
1515 + entry = list_first_entry(&domain->dev_list,
1516 + struct iommu_dev_data, list);
1517 + __detach_device(entry);
1518 + atomic_set(&entry->bind, 0);
1519 }
1520
1521 write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
1522 diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
1523 index 75771b2077c0..a176791509f6 100644
1524 --- a/drivers/md/raid1.c
1525 +++ b/drivers/md/raid1.c
1526 @@ -1406,12 +1406,12 @@ static void error(struct mddev *mddev, struct md_rdev *rdev)
1527 mddev->degraded++;
1528 set_bit(Faulty, &rdev->flags);
1529 spin_unlock_irqrestore(&conf->device_lock, flags);
1530 - /*
1531 - * if recovery is running, make sure it aborts.
1532 - */
1533 - set_bit(MD_RECOVERY_INTR, &mddev->recovery);
1534 } else
1535 set_bit(Faulty, &rdev->flags);
1536 + /*
1537 + * if recovery is running, make sure it aborts.
1538 + */
1539 + set_bit(MD_RECOVERY_INTR, &mddev->recovery);
1540 set_bit(MD_CHANGE_DEVS, &mddev->flags);
1541 printk(KERN_ALERT
1542 "md/raid1:%s: Disk failure on %s, disabling device.\n"
1543 diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
1544 index d2f8cd332b4a..a1ea2a753912 100644
1545 --- a/drivers/md/raid10.c
1546 +++ b/drivers/md/raid10.c
1547 @@ -1681,11 +1681,11 @@ static void error(struct mddev *mddev, struct md_rdev *rdev)
1548 spin_lock_irqsave(&conf->device_lock, flags);
1549 mddev->degraded++;
1550 spin_unlock_irqrestore(&conf->device_lock, flags);
1551 - /*
1552 - * if recovery is running, make sure it aborts.
1553 - */
1554 - set_bit(MD_RECOVERY_INTR, &mddev->recovery);
1555 }
1556 + /*
1557 + * If recovery is running, make sure it aborts.
1558 + */
1559 + set_bit(MD_RECOVERY_INTR, &mddev->recovery);
1560 set_bit(Blocked, &rdev->flags);
1561 set_bit(Faulty, &rdev->flags);
1562 set_bit(MD_CHANGE_DEVS, &mddev->flags);
1563 @@ -2948,6 +2948,7 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr,
1564 */
1565 if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery)) {
1566 end_reshape(conf);
1567 + close_sync(conf);
1568 return 0;
1569 }
1570
1571 @@ -4398,7 +4399,7 @@ read_more:
1572 read_bio->bi_private = r10_bio;
1573 read_bio->bi_end_io = end_sync_read;
1574 read_bio->bi_rw = READ;
1575 - read_bio->bi_flags &= ~(BIO_POOL_MASK - 1);
1576 + read_bio->bi_flags &= (~0UL << BIO_RESET_BITS);
1577 read_bio->bi_flags |= 1 << BIO_UPTODATE;
1578 read_bio->bi_vcnt = 0;
1579 read_bio->bi_size = 0;
1580 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
1581 index 5e3c25d4562c..774f81423d78 100644
1582 --- a/drivers/md/raid5.c
1583 +++ b/drivers/md/raid5.c
1584 @@ -3561,6 +3561,8 @@ static void handle_stripe(struct stripe_head *sh)
1585 set_bit(R5_Wantwrite, &dev->flags);
1586 if (prexor)
1587 continue;
1588 + if (s.failed > 1)
1589 + continue;
1590 if (!test_bit(R5_Insync, &dev->flags) ||
1591 ((i == sh->pd_idx || i == sh->qd_idx) &&
1592 s.failed == 0))
1593 diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
1594 index 79715f9feb0a..fdb5840f034b 100644
1595 --- a/drivers/media/media-device.c
1596 +++ b/drivers/media/media-device.c
1597 @@ -106,8 +106,6 @@ static long media_device_enum_entities(struct media_device *mdev,
1598 if (ent->name) {
1599 strncpy(u_ent.name, ent->name, sizeof(u_ent.name));
1600 u_ent.name[sizeof(u_ent.name) - 1] = '\0';
1601 - } else {
1602 - memset(u_ent.name, 0, sizeof(u_ent.name));
1603 }
1604 u_ent.type = ent->type;
1605 u_ent.revision = ent->revision;
1606 diff --git a/drivers/media/tuners/xc4000.c b/drivers/media/tuners/xc4000.c
1607 index 2018befabb5a..e71decbfd0af 100644
1608 --- a/drivers/media/tuners/xc4000.c
1609 +++ b/drivers/media/tuners/xc4000.c
1610 @@ -93,7 +93,7 @@ struct xc4000_priv {
1611 struct firmware_description *firm;
1612 int firm_size;
1613 u32 if_khz;
1614 - u32 freq_hz;
1615 + u32 freq_hz, freq_offset;
1616 u32 bandwidth;
1617 u8 video_standard;
1618 u8 rf_mode;
1619 @@ -1157,14 +1157,14 @@ static int xc4000_set_params(struct dvb_frontend *fe)
1620 case SYS_ATSC:
1621 dprintk(1, "%s() VSB modulation\n", __func__);
1622 priv->rf_mode = XC_RF_MODE_AIR;
1623 - priv->freq_hz = c->frequency - 1750000;
1624 + priv->freq_offset = 1750000;
1625 priv->video_standard = XC4000_DTV6;
1626 type = DTV6;
1627 break;
1628 case SYS_DVBC_ANNEX_B:
1629 dprintk(1, "%s() QAM modulation\n", __func__);
1630 priv->rf_mode = XC_RF_MODE_CABLE;
1631 - priv->freq_hz = c->frequency - 1750000;
1632 + priv->freq_offset = 1750000;
1633 priv->video_standard = XC4000_DTV6;
1634 type = DTV6;
1635 break;
1636 @@ -1173,23 +1173,23 @@ static int xc4000_set_params(struct dvb_frontend *fe)
1637 dprintk(1, "%s() OFDM\n", __func__);
1638 if (bw == 0) {
1639 if (c->frequency < 400000000) {
1640 - priv->freq_hz = c->frequency - 2250000;
1641 + priv->freq_offset = 2250000;
1642 } else {
1643 - priv->freq_hz = c->frequency - 2750000;
1644 + priv->freq_offset = 2750000;
1645 }
1646 priv->video_standard = XC4000_DTV7_8;
1647 type = DTV78;
1648 } else if (bw <= 6000000) {
1649 priv->video_standard = XC4000_DTV6;
1650 - priv->freq_hz = c->frequency - 1750000;
1651 + priv->freq_offset = 1750000;
1652 type = DTV6;
1653 } else if (bw <= 7000000) {
1654 priv->video_standard = XC4000_DTV7;
1655 - priv->freq_hz = c->frequency - 2250000;
1656 + priv->freq_offset = 2250000;
1657 type = DTV7;
1658 } else {
1659 priv->video_standard = XC4000_DTV8;
1660 - priv->freq_hz = c->frequency - 2750000;
1661 + priv->freq_offset = 2750000;
1662 type = DTV8;
1663 }
1664 priv->rf_mode = XC_RF_MODE_AIR;
1665 @@ -1200,6 +1200,8 @@ static int xc4000_set_params(struct dvb_frontend *fe)
1666 goto fail;
1667 }
1668
1669 + priv->freq_hz = c->frequency - priv->freq_offset;
1670 +
1671 dprintk(1, "%s() frequency=%d (compensated)\n",
1672 __func__, priv->freq_hz);
1673
1674 @@ -1520,7 +1522,7 @@ static int xc4000_get_frequency(struct dvb_frontend *fe, u32 *freq)
1675 {
1676 struct xc4000_priv *priv = fe->tuner_priv;
1677
1678 - *freq = priv->freq_hz;
1679 + *freq = priv->freq_hz + priv->freq_offset;
1680
1681 if (debug) {
1682 mutex_lock(&priv->lock);
1683 diff --git a/drivers/media/tuners/xc5000.c b/drivers/media/tuners/xc5000.c
1684 index 5cd09a681b6a..b2d9e9cb97f7 100644
1685 --- a/drivers/media/tuners/xc5000.c
1686 +++ b/drivers/media/tuners/xc5000.c
1687 @@ -55,7 +55,7 @@ struct xc5000_priv {
1688
1689 u32 if_khz;
1690 u16 xtal_khz;
1691 - u32 freq_hz;
1692 + u32 freq_hz, freq_offset;
1693 u32 bandwidth;
1694 u8 video_standard;
1695 u8 rf_mode;
1696 @@ -755,13 +755,13 @@ static int xc5000_set_params(struct dvb_frontend *fe)
1697 case SYS_ATSC:
1698 dprintk(1, "%s() VSB modulation\n", __func__);
1699 priv->rf_mode = XC_RF_MODE_AIR;
1700 - priv->freq_hz = freq - 1750000;
1701 + priv->freq_offset = 1750000;
1702 priv->video_standard = DTV6;
1703 break;
1704 case SYS_DVBC_ANNEX_B:
1705 dprintk(1, "%s() QAM modulation\n", __func__);
1706 priv->rf_mode = XC_RF_MODE_CABLE;
1707 - priv->freq_hz = freq - 1750000;
1708 + priv->freq_offset = 1750000;
1709 priv->video_standard = DTV6;
1710 break;
1711 case SYS_ISDBT:
1712 @@ -776,15 +776,15 @@ static int xc5000_set_params(struct dvb_frontend *fe)
1713 switch (bw) {
1714 case 6000000:
1715 priv->video_standard = DTV6;
1716 - priv->freq_hz = freq - 1750000;
1717 + priv->freq_offset = 1750000;
1718 break;
1719 case 7000000:
1720 priv->video_standard = DTV7;
1721 - priv->freq_hz = freq - 2250000;
1722 + priv->freq_offset = 2250000;
1723 break;
1724 case 8000000:
1725 priv->video_standard = DTV8;
1726 - priv->freq_hz = freq - 2750000;
1727 + priv->freq_offset = 2750000;
1728 break;
1729 default:
1730 printk(KERN_ERR "xc5000 bandwidth not set!\n");
1731 @@ -798,15 +798,15 @@ static int xc5000_set_params(struct dvb_frontend *fe)
1732 priv->rf_mode = XC_RF_MODE_CABLE;
1733 if (bw <= 6000000) {
1734 priv->video_standard = DTV6;
1735 - priv->freq_hz = freq - 1750000;
1736 + priv->freq_offset = 1750000;
1737 b = 6;
1738 } else if (bw <= 7000000) {
1739 priv->video_standard = DTV7;
1740 - priv->freq_hz = freq - 2250000;
1741 + priv->freq_offset = 2250000;
1742 b = 7;
1743 } else {
1744 priv->video_standard = DTV7_8;
1745 - priv->freq_hz = freq - 2750000;
1746 + priv->freq_offset = 2750000;
1747 b = 8;
1748 }
1749 dprintk(1, "%s() Bandwidth %dMHz (%d)\n", __func__,
1750 @@ -817,6 +817,8 @@ static int xc5000_set_params(struct dvb_frontend *fe)
1751 return -EINVAL;
1752 }
1753
1754 + priv->freq_hz = freq - priv->freq_offset;
1755 +
1756 dprintk(1, "%s() frequency=%d (compensated to %d)\n",
1757 __func__, freq, priv->freq_hz);
1758
1759 @@ -1067,7 +1069,7 @@ static int xc5000_get_frequency(struct dvb_frontend *fe, u32 *freq)
1760 {
1761 struct xc5000_priv *priv = fe->tuner_priv;
1762 dprintk(1, "%s()\n", __func__);
1763 - *freq = priv->freq_hz;
1764 + *freq = priv->freq_hz + priv->freq_offset;
1765 return 0;
1766 }
1767
1768 diff --git a/drivers/media/usb/au0828/au0828-video.c b/drivers/media/usb/au0828/au0828-video.c
1769 index 75ac9947cdac..98e1b937b500 100644
1770 --- a/drivers/media/usb/au0828/au0828-video.c
1771 +++ b/drivers/media/usb/au0828/au0828-video.c
1772 @@ -788,11 +788,27 @@ static int au0828_i2s_init(struct au0828_dev *dev)
1773
1774 /*
1775 * Auvitek au0828 analog stream enable
1776 - * Please set interface0 to AS5 before enable the stream
1777 */
1778 static int au0828_analog_stream_enable(struct au0828_dev *d)
1779 {
1780 + struct usb_interface *iface;
1781 + int ret;
1782 +
1783 dprintk(1, "au0828_analog_stream_enable called\n");
1784 +
1785 + iface = usb_ifnum_to_if(d->usbdev, 0);
1786 + if (iface && iface->cur_altsetting->desc.bAlternateSetting != 5) {
1787 + dprintk(1, "Changing intf#0 to alt 5\n");
1788 + /* set au0828 interface0 to AS5 here again */
1789 + ret = usb_set_interface(d->usbdev, 0, 5);
1790 + if (ret < 0) {
1791 + printk(KERN_INFO "Au0828 can't set alt setting to 5!\n");
1792 + return -EBUSY;
1793 + }
1794 + }
1795 +
1796 + /* FIXME: size should be calculated using d->width, d->height */
1797 +
1798 au0828_writereg(d, AU0828_SENSORCTRL_VBI_103, 0x00);
1799 au0828_writereg(d, 0x106, 0x00);
1800 /* set x position */
1801 @@ -1003,15 +1019,6 @@ static int au0828_v4l2_open(struct file *filp)
1802 return -ERESTARTSYS;
1803 }
1804 if (dev->users == 0) {
1805 - /* set au0828 interface0 to AS5 here again */
1806 - ret = usb_set_interface(dev->usbdev, 0, 5);
1807 - if (ret < 0) {
1808 - mutex_unlock(&dev->lock);
1809 - printk(KERN_INFO "Au0828 can't set alternate to 5!\n");
1810 - kfree(fh);
1811 - return -EBUSY;
1812 - }
1813 -
1814 au0828_analog_stream_enable(dev);
1815 au0828_analog_stream_reset(dev);
1816
1817 @@ -1253,13 +1260,6 @@ static int au0828_set_format(struct au0828_dev *dev, unsigned int cmd,
1818 }
1819 }
1820
1821 - /* set au0828 interface0 to AS5 here again */
1822 - ret = usb_set_interface(dev->usbdev, 0, 5);
1823 - if (ret < 0) {
1824 - printk(KERN_INFO "Au0828 can't set alt setting to 5!\n");
1825 - return -EBUSY;
1826 - }
1827 -
1828 au0828_analog_stream_enable(dev);
1829
1830 return 0;
1831 diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
1832 index 759fae3ca7fb..a36f3f282ae7 100644
1833 --- a/drivers/mfd/omap-usb-host.c
1834 +++ b/drivers/mfd/omap-usb-host.c
1835 @@ -445,7 +445,7 @@ static unsigned omap_usbhs_rev1_hostconfig(struct usbhs_hcd_omap *omap,
1836
1837 for (i = 0; i < omap->nports; i++) {
1838 if (is_ehci_phy_mode(pdata->port_mode[i])) {
1839 - reg &= OMAP_UHH_HOSTCONFIG_ULPI_BYPASS;
1840 + reg &= ~OMAP_UHH_HOSTCONFIG_ULPI_BYPASS;
1841 break;
1842 }
1843 }
1844 diff --git a/drivers/mtd/ftl.c b/drivers/mtd/ftl.c
1845 index 19d637266fcd..71e4f6ccae2f 100644
1846 --- a/drivers/mtd/ftl.c
1847 +++ b/drivers/mtd/ftl.c
1848 @@ -1075,7 +1075,6 @@ static void ftl_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
1849 return;
1850 }
1851
1852 - ftl_freepart(partition);
1853 kfree(partition);
1854 }
1855
1856 diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
1857 index 8c4eb287bbdb..e9b1797cdb5f 100644
1858 --- a/drivers/mtd/nand/omap2.c
1859 +++ b/drivers/mtd/nand/omap2.c
1860 @@ -948,7 +948,7 @@ static int omap_calculate_ecc(struct mtd_info *mtd, const u_char *dat,
1861 u32 val;
1862
1863 val = readl(info->reg.gpmc_ecc_config);
1864 - if (((val >> ECC_CONFIG_CS_SHIFT) & ~CS_MASK) != info->gpmc_cs)
1865 + if (((val >> ECC_CONFIG_CS_SHIFT) & CS_MASK) != info->gpmc_cs)
1866 return -EINVAL;
1867
1868 /* read ecc result */
1869 diff --git a/drivers/regulator/arizona-ldo1.c b/drivers/regulator/arizona-ldo1.c
1870 index 81d8681c3195..b1b35f38d11d 100644
1871 --- a/drivers/regulator/arizona-ldo1.c
1872 +++ b/drivers/regulator/arizona-ldo1.c
1873 @@ -141,8 +141,6 @@ static struct regulator_ops arizona_ldo1_ops = {
1874 .map_voltage = regulator_map_voltage_linear,
1875 .get_voltage_sel = regulator_get_voltage_sel_regmap,
1876 .set_voltage_sel = regulator_set_voltage_sel_regmap,
1877 - .get_bypass = regulator_get_bypass_regmap,
1878 - .set_bypass = regulator_set_bypass_regmap,
1879 };
1880
1881 static const struct regulator_desc arizona_ldo1 = {
1882 diff --git a/drivers/scsi/bfa/bfa_ioc.h b/drivers/scsi/bfa/bfa_ioc.h
1883 index 23a90e7b7107..a119421cb324 100644
1884 --- a/drivers/scsi/bfa/bfa_ioc.h
1885 +++ b/drivers/scsi/bfa/bfa_ioc.h
1886 @@ -72,7 +72,7 @@ struct bfa_sge_s {
1887 } while (0)
1888
1889 #define bfa_swap_words(_x) ( \
1890 - ((_x) << 32) | ((_x) >> 32))
1891 + ((u64)(_x) << 32) | ((u64)(_x) >> 32))
1892
1893 #ifdef __BIG_ENDIAN
1894 #define bfa_sge_to_be(_x)
1895 diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
1896 index 91b76cea3e3c..87ca72d36d5b 100644
1897 --- a/drivers/scsi/storvsc_drv.c
1898 +++ b/drivers/scsi/storvsc_drv.c
1899 @@ -33,6 +33,7 @@
1900 #include <linux/device.h>
1901 #include <linux/hyperv.h>
1902 #include <linux/mempool.h>
1903 +#include <linux/blkdev.h>
1904 #include <scsi/scsi.h>
1905 #include <scsi/scsi_cmnd.h>
1906 #include <scsi/scsi_host.h>
1907 @@ -803,6 +804,13 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb,
1908 case ATA_12:
1909 set_host_byte(scmnd, DID_PASSTHROUGH);
1910 break;
1911 + /*
1912 + * On Some Windows hosts TEST_UNIT_READY command can return
1913 + * SRB_STATUS_ERROR, let the upper level code deal with it
1914 + * based on the sense information.
1915 + */
1916 + case TEST_UNIT_READY:
1917 + break;
1918 default:
1919 set_host_byte(scmnd, DID_TARGET_FAILURE);
1920 }
1921 @@ -1285,6 +1293,16 @@ static int storvsc_host_reset_handler(struct scsi_cmnd *scmnd)
1922 return SUCCESS;
1923 }
1924
1925 +/*
1926 + * The host guarantees to respond to each command, although I/O latencies might
1927 + * be unbounded on Azure. Reset the timer unconditionally to give the host a
1928 + * chance to perform EH.
1929 + */
1930 +static enum blk_eh_timer_return storvsc_eh_timed_out(struct scsi_cmnd *scmnd)
1931 +{
1932 + return BLK_EH_RESET_TIMER;
1933 +}
1934 +
1935 static bool storvsc_scsi_cmd_ok(struct scsi_cmnd *scmnd)
1936 {
1937 bool allowed = true;
1938 @@ -1444,6 +1462,7 @@ static struct scsi_host_template scsi_driver = {
1939 .bios_param = storvsc_get_chs,
1940 .queuecommand = storvsc_queuecommand,
1941 .eh_host_reset_handler = storvsc_host_reset_handler,
1942 + .eh_timed_out = storvsc_eh_timed_out,
1943 .slave_alloc = storvsc_device_alloc,
1944 .slave_destroy = storvsc_device_destroy,
1945 .slave_configure = storvsc_device_configure,
1946 diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
1947 index 86d2158946bb..798729eb6689 100644
1948 --- a/drivers/spi/spi-omap2-mcspi.c
1949 +++ b/drivers/spi/spi-omap2-mcspi.c
1950 @@ -136,6 +136,7 @@ struct omap2_mcspi_cs {
1951 void __iomem *base;
1952 unsigned long phys;
1953 int word_len;
1954 + u16 mode;
1955 struct list_head node;
1956 /* Context save and restore shadow register */
1957 u32 chconf0;
1958 @@ -801,6 +802,8 @@ static int omap2_mcspi_setup_transfer(struct spi_device *spi,
1959
1960 mcspi_write_chconf0(spi, l);
1961
1962 + cs->mode = spi->mode;
1963 +
1964 dev_dbg(&spi->dev, "setup: speed %d, sample %s edge, clk %s\n",
1965 OMAP2_MCSPI_MAX_FREQ >> div,
1966 (spi->mode & SPI_CPHA) ? "trailing" : "leading",
1967 @@ -871,6 +874,7 @@ static int omap2_mcspi_setup(struct spi_device *spi)
1968 return -ENOMEM;
1969 cs->base = mcspi->base + spi->chip_select * 0x14;
1970 cs->phys = mcspi->phys + spi->chip_select * 0x14;
1971 + cs->mode = 0;
1972 cs->chconf0 = 0;
1973 spi->controller_state = cs;
1974 /* Link this to context save list */
1975 @@ -1043,6 +1047,16 @@ static void omap2_mcspi_work(struct omap2_mcspi *mcspi, struct spi_message *m)
1976 mcspi_read_cs_reg(spi, OMAP2_MCSPI_MODULCTRL);
1977 }
1978
1979 + /*
1980 + * The slave driver could have changed spi->mode in which case
1981 + * it will be different from cs->mode (the current hardware setup).
1982 + * If so, set par_override (even though its not a parity issue) so
1983 + * omap2_mcspi_setup_transfer will be called to configure the hardware
1984 + * with the correct mode on the first iteration of the loop below.
1985 + */
1986 + if (spi->mode != cs->mode)
1987 + par_override = 1;
1988 +
1989 omap2_mcspi_set_enable(spi, 0);
1990
1991 m->status = status;
1992 diff --git a/drivers/spi/spi-orion.c b/drivers/spi/spi-orion.c
1993 index 66a5f82cf138..183aa80c9017 100644
1994 --- a/drivers/spi/spi-orion.c
1995 +++ b/drivers/spi/spi-orion.c
1996 @@ -403,8 +403,6 @@ static int orion_spi_probe(struct platform_device *pdev)
1997 struct resource *r;
1998 unsigned long tclk_hz;
1999 int status = 0;
2000 - const u32 *iprop;
2001 - int size;
2002
2003 master = spi_alloc_master(&pdev->dev, sizeof *spi);
2004 if (master == NULL) {
2005 @@ -415,10 +413,10 @@ static int orion_spi_probe(struct platform_device *pdev)
2006 if (pdev->id != -1)
2007 master->bus_num = pdev->id;
2008 if (pdev->dev.of_node) {
2009 - iprop = of_get_property(pdev->dev.of_node, "cell-index",
2010 - &size);
2011 - if (iprop && size == sizeof(*iprop))
2012 - master->bus_num = *iprop;
2013 + u32 cell_index;
2014 + if (!of_property_read_u32(pdev->dev.of_node, "cell-index",
2015 + &cell_index))
2016 + master->bus_num = cell_index;
2017 }
2018
2019 /* we support only mode 0, and no options */
2020 diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
2021 index e2c2d96491fa..52480240168e 100644
2022 --- a/fs/cifs/cifsglob.h
2023 +++ b/fs/cifs/cifsglob.h
2024 @@ -74,11 +74,6 @@
2025 #define SERVER_NAME_LENGTH 40
2026 #define SERVER_NAME_LEN_WITH_NULL (SERVER_NAME_LENGTH + 1)
2027
2028 -/* used to define string lengths for reversing unicode strings */
2029 -/* (256+1)*2 = 514 */
2030 -/* (max path length + 1 for null) * 2 for unicode */
2031 -#define MAX_NAME 514
2032 -
2033 /* SMB echo "timeout" -- FIXME: tunable? */
2034 #define SMB_ECHO_INTERVAL (60 * HZ)
2035
2036 diff --git a/fs/cifs/file.c b/fs/cifs/file.c
2037 index 8b0c656f2ab2..97b03895ac8c 100644
2038 --- a/fs/cifs/file.c
2039 +++ b/fs/cifs/file.c
2040 @@ -2809,7 +2809,7 @@ cifs_uncached_read_into_pages(struct TCP_Server_Info *server,
2041 total_read += result;
2042 }
2043
2044 - return total_read > 0 ? total_read : result;
2045 + return total_read > 0 && result != -EAGAIN ? total_read : result;
2046 }
2047
2048 static ssize_t
2049 @@ -3232,7 +3232,7 @@ cifs_readpages_read_into_pages(struct TCP_Server_Info *server,
2050 total_read += result;
2051 }
2052
2053 - return total_read > 0 ? total_read : result;
2054 + return total_read > 0 && result != -EAGAIN ? total_read : result;
2055 }
2056
2057 static int cifs_readpages(struct file *file, struct address_space *mapping,
2058 diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
2059 index 9d463501348f..c9bce9b43855 100644
2060 --- a/fs/cifs/inode.c
2061 +++ b/fs/cifs/inode.c
2062 @@ -1647,6 +1647,12 @@ unlink_target:
2063 target_dentry, to_name);
2064 }
2065
2066 + /* force revalidate to go get info when needed */
2067 + CIFS_I(source_dir)->time = CIFS_I(target_dir)->time = 0;
2068 +
2069 + source_dir->i_ctime = source_dir->i_mtime = target_dir->i_ctime =
2070 + target_dir->i_mtime = current_fs_time(source_dir->i_sb);
2071 +
2072 cifs_rename_exit:
2073 kfree(info_buf_source);
2074 kfree(from_name);
2075 diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
2076 index 036279c064ff..87d125f682cd 100644
2077 --- a/fs/cifs/readdir.c
2078 +++ b/fs/cifs/readdir.c
2079 @@ -585,8 +585,8 @@ find_cifs_entry(const unsigned int xid, struct cifs_tcon *tcon,
2080 if (!cfile->srch_inf.endOfSearch && !cfile->invalidHandle) {
2081 cfile->invalidHandle = true;
2082 spin_unlock(&cifs_file_list_lock);
2083 - if (server->ops->close)
2084 - server->ops->close(xid, tcon, &cfile->fid);
2085 + if (server->ops->close_dir)
2086 + server->ops->close_dir(xid, tcon, &cfile->fid);
2087 } else
2088 spin_unlock(&cifs_file_list_lock);
2089 if (cfile->srch_inf.ntwrk_buf_start) {
2090 diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c
2091 index 5da1b55a2258..d801f63cddd0 100644
2092 --- a/fs/cifs/smb2file.c
2093 +++ b/fs/cifs/smb2file.c
2094 @@ -73,7 +73,7 @@ smb2_open_file(const unsigned int xid, struct cifs_tcon *tcon, const char *path,
2095 goto out;
2096 }
2097
2098 - smb2_data = kzalloc(sizeof(struct smb2_file_all_info) + MAX_NAME * 2,
2099 + smb2_data = kzalloc(sizeof(struct smb2_file_all_info) + PATH_MAX * 2,
2100 GFP_KERNEL);
2101 if (smb2_data == NULL) {
2102 rc = -ENOMEM;
2103 diff --git a/fs/cifs/smb2inode.c b/fs/cifs/smb2inode.c
2104 index fff6dfba6204..6d535797ec76 100644
2105 --- a/fs/cifs/smb2inode.c
2106 +++ b/fs/cifs/smb2inode.c
2107 @@ -123,7 +123,7 @@ smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
2108
2109 *adjust_tz = false;
2110
2111 - smb2_data = kzalloc(sizeof(struct smb2_file_all_info) + MAX_NAME * 2,
2112 + smb2_data = kzalloc(sizeof(struct smb2_file_all_info) + PATH_MAX * 2,
2113 GFP_KERNEL);
2114 if (smb2_data == NULL)
2115 return -ENOMEM;
2116 diff --git a/fs/cifs/smb2maperror.c b/fs/cifs/smb2maperror.c
2117 index 7c2f45c06fc2..824696fb24db 100644
2118 --- a/fs/cifs/smb2maperror.c
2119 +++ b/fs/cifs/smb2maperror.c
2120 @@ -605,7 +605,7 @@ static const struct status_to_posix_error smb2_error_map_table[] = {
2121 {STATUS_MAPPED_FILE_SIZE_ZERO, -EIO, "STATUS_MAPPED_FILE_SIZE_ZERO"},
2122 {STATUS_TOO_MANY_OPENED_FILES, -EMFILE, "STATUS_TOO_MANY_OPENED_FILES"},
2123 {STATUS_CANCELLED, -EIO, "STATUS_CANCELLED"},
2124 - {STATUS_CANNOT_DELETE, -EIO, "STATUS_CANNOT_DELETE"},
2125 + {STATUS_CANNOT_DELETE, -EACCES, "STATUS_CANNOT_DELETE"},
2126 {STATUS_INVALID_COMPUTER_NAME, -EIO, "STATUS_INVALID_COMPUTER_NAME"},
2127 {STATUS_FILE_DELETED, -EIO, "STATUS_FILE_DELETED"},
2128 {STATUS_SPECIAL_ACCOUNT, -EIO, "STATUS_SPECIAL_ACCOUNT"},
2129 diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
2130 index e2756bb40b4d..fe7ac989c6c4 100644
2131 --- a/fs/cifs/smb2ops.c
2132 +++ b/fs/cifs/smb2ops.c
2133 @@ -243,7 +243,7 @@ smb2_query_file_info(const unsigned int xid, struct cifs_tcon *tcon,
2134 int rc;
2135 struct smb2_file_all_info *smb2_data;
2136
2137 - smb2_data = kzalloc(sizeof(struct smb2_file_all_info) + MAX_NAME * 2,
2138 + smb2_data = kzalloc(sizeof(struct smb2_file_all_info) + PATH_MAX * 2,
2139 GFP_KERNEL);
2140 if (smb2_data == NULL)
2141 return -ENOMEM;
2142 diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
2143 index c7a6fd87bb6e..e37790841446 100644
2144 --- a/fs/cifs/smb2pdu.c
2145 +++ b/fs/cifs/smb2pdu.c
2146 @@ -809,7 +809,8 @@ tcon_exit:
2147 tcon_error_exit:
2148 if (rsp->hdr.Status == STATUS_BAD_NETWORK_NAME) {
2149 cifs_dbg(VFS, "BAD_NETWORK_NAME: %s\n", tree);
2150 - tcon->bad_network_name = true;
2151 + if (tcon)
2152 + tcon->bad_network_name = true;
2153 }
2154 goto tcon_exit;
2155 }
2156 @@ -1203,7 +1204,7 @@ SMB2_query_info(const unsigned int xid, struct cifs_tcon *tcon,
2157 {
2158 return query_info(xid, tcon, persistent_fid, volatile_fid,
2159 FILE_ALL_INFORMATION,
2160 - sizeof(struct smb2_file_all_info) + MAX_NAME * 2,
2161 + sizeof(struct smb2_file_all_info) + PATH_MAX * 2,
2162 sizeof(struct smb2_file_all_info), data);
2163 }
2164
2165 diff --git a/fs/dcache.c b/fs/dcache.c
2166 index 9a59653d3449..25c0a1b5f6c0 100644
2167 --- a/fs/dcache.c
2168 +++ b/fs/dcache.c
2169 @@ -96,8 +96,6 @@ static struct kmem_cache *dentry_cache __read_mostly;
2170 * This hash-function tries to avoid losing too many bits of hash
2171 * information, yet avoid using a prime hash-size or similar.
2172 */
2173 -#define D_HASHBITS d_hash_shift
2174 -#define D_HASHMASK d_hash_mask
2175
2176 static unsigned int d_hash_mask __read_mostly;
2177 static unsigned int d_hash_shift __read_mostly;
2178 @@ -108,8 +106,7 @@ static inline struct hlist_bl_head *d_hash(const struct dentry *parent,
2179 unsigned int hash)
2180 {
2181 hash += (unsigned long) parent / L1_CACHE_BYTES;
2182 - hash = hash + (hash >> D_HASHBITS);
2183 - return dentry_hashtable + (hash & D_HASHMASK);
2184 + return dentry_hashtable + hash_32(hash, d_hash_shift);
2185 }
2186
2187 /* Statistics gathering. */
2188 diff --git a/fs/namei.c b/fs/namei.c
2189 index 6ac16a37ded2..f7c4393f8535 100644
2190 --- a/fs/namei.c
2191 +++ b/fs/namei.c
2192 @@ -34,6 +34,7 @@
2193 #include <linux/device_cgroup.h>
2194 #include <linux/fs_struct.h>
2195 #include <linux/posix_acl.h>
2196 +#include <linux/hash.h>
2197 #include <asm/uaccess.h>
2198
2199 #include "internal.h"
2200 @@ -1647,8 +1648,7 @@ static inline int can_lookup(struct inode *inode)
2201
2202 static inline unsigned int fold_hash(unsigned long hash)
2203 {
2204 - hash += hash >> (8*sizeof(int));
2205 - return hash;
2206 + return hash_64(hash, 32);
2207 }
2208
2209 #else /* 32-bit case */
2210 diff --git a/fs/namespace.c b/fs/namespace.c
2211 index a45ba4f267fe..00409add4d96 100644
2212 --- a/fs/namespace.c
2213 +++ b/fs/namespace.c
2214 @@ -828,8 +828,21 @@ static struct mount *clone_mnt(struct mount *old, struct dentry *root,
2215
2216 mnt->mnt.mnt_flags = old->mnt.mnt_flags & ~MNT_WRITE_HOLD;
2217 /* Don't allow unprivileged users to change mount flags */
2218 - if ((flag & CL_UNPRIVILEGED) && (mnt->mnt.mnt_flags & MNT_READONLY))
2219 - mnt->mnt.mnt_flags |= MNT_LOCK_READONLY;
2220 + if (flag & CL_UNPRIVILEGED) {
2221 + mnt->mnt.mnt_flags |= MNT_LOCK_ATIME;
2222 +
2223 + if (mnt->mnt.mnt_flags & MNT_READONLY)
2224 + mnt->mnt.mnt_flags |= MNT_LOCK_READONLY;
2225 +
2226 + if (mnt->mnt.mnt_flags & MNT_NODEV)
2227 + mnt->mnt.mnt_flags |= MNT_LOCK_NODEV;
2228 +
2229 + if (mnt->mnt.mnt_flags & MNT_NOSUID)
2230 + mnt->mnt.mnt_flags |= MNT_LOCK_NOSUID;
2231 +
2232 + if (mnt->mnt.mnt_flags & MNT_NOEXEC)
2233 + mnt->mnt.mnt_flags |= MNT_LOCK_NOEXEC;
2234 + }
2235
2236 atomic_inc(&sb->s_active);
2237 mnt->mnt.mnt_sb = sb;
2238 @@ -1764,9 +1777,6 @@ static int change_mount_flags(struct vfsmount *mnt, int ms_flags)
2239 if (readonly_request == __mnt_is_readonly(mnt))
2240 return 0;
2241
2242 - if (mnt->mnt_flags & MNT_LOCK_READONLY)
2243 - return -EPERM;
2244 -
2245 if (readonly_request)
2246 error = mnt_make_readonly(real_mount(mnt));
2247 else
2248 @@ -1792,6 +1802,33 @@ static int do_remount(struct path *path, int flags, int mnt_flags,
2249 if (path->dentry != path->mnt->mnt_root)
2250 return -EINVAL;
2251
2252 + /* Don't allow changing of locked mnt flags.
2253 + *
2254 + * No locks need to be held here while testing the various
2255 + * MNT_LOCK flags because those flags can never be cleared
2256 + * once they are set.
2257 + */
2258 + if ((mnt->mnt.mnt_flags & MNT_LOCK_READONLY) &&
2259 + !(mnt_flags & MNT_READONLY)) {
2260 + return -EPERM;
2261 + }
2262 + if ((mnt->mnt.mnt_flags & MNT_LOCK_NODEV) &&
2263 + !(mnt_flags & MNT_NODEV)) {
2264 + return -EPERM;
2265 + }
2266 + if ((mnt->mnt.mnt_flags & MNT_LOCK_NOSUID) &&
2267 + !(mnt_flags & MNT_NOSUID)) {
2268 + return -EPERM;
2269 + }
2270 + if ((mnt->mnt.mnt_flags & MNT_LOCK_NOEXEC) &&
2271 + !(mnt_flags & MNT_NOEXEC)) {
2272 + return -EPERM;
2273 + }
2274 + if ((mnt->mnt.mnt_flags & MNT_LOCK_ATIME) &&
2275 + ((mnt->mnt.mnt_flags & MNT_ATIME_MASK) != (mnt_flags & MNT_ATIME_MASK))) {
2276 + return -EPERM;
2277 + }
2278 +
2279 err = security_sb_remount(sb, data);
2280 if (err)
2281 return err;
2282 @@ -1805,7 +1842,7 @@ static int do_remount(struct path *path, int flags, int mnt_flags,
2283 err = do_remount_sb(sb, flags, data, 0);
2284 if (!err) {
2285 br_write_lock(&vfsmount_lock);
2286 - mnt_flags |= mnt->mnt.mnt_flags & MNT_PROPAGATION_MASK;
2287 + mnt_flags |= mnt->mnt.mnt_flags & ~MNT_USER_SETTABLE_MASK;
2288 mnt->mnt.mnt_flags = mnt_flags;
2289 br_write_unlock(&vfsmount_lock);
2290 }
2291 @@ -1991,7 +2028,7 @@ static int do_new_mount(struct path *path, const char *fstype, int flags,
2292 */
2293 if (!(type->fs_flags & FS_USERNS_DEV_MOUNT)) {
2294 flags |= MS_NODEV;
2295 - mnt_flags |= MNT_NODEV;
2296 + mnt_flags |= MNT_NODEV | MNT_LOCK_NODEV;
2297 }
2298 }
2299
2300 @@ -2309,6 +2346,14 @@ long do_mount(const char *dev_name, const char *dir_name,
2301 if (flags & MS_RDONLY)
2302 mnt_flags |= MNT_READONLY;
2303
2304 + /* The default atime for remount is preservation */
2305 + if ((flags & MS_REMOUNT) &&
2306 + ((flags & (MS_NOATIME | MS_NODIRATIME | MS_RELATIME |
2307 + MS_STRICTATIME)) == 0)) {
2308 + mnt_flags &= ~MNT_ATIME_MASK;
2309 + mnt_flags |= path.mnt->mnt_flags & MNT_ATIME_MASK;
2310 + }
2311 +
2312 flags &= ~(MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_ACTIVE | MS_BORN |
2313 MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT |
2314 MS_STRICTATIME);
2315 diff --git a/fs/proc/array.c b/fs/proc/array.c
2316 index cbd0f1b324b9..09f0d9c374a3 100644
2317 --- a/fs/proc/array.c
2318 +++ b/fs/proc/array.c
2319 @@ -304,15 +304,11 @@ static void render_cap_t(struct seq_file *m, const char *header,
2320 seq_puts(m, header);
2321 CAP_FOR_EACH_U32(__capi) {
2322 seq_printf(m, "%08x",
2323 - a->cap[(_KERNEL_CAPABILITY_U32S-1) - __capi]);
2324 + a->cap[CAP_LAST_U32 - __capi]);
2325 }
2326 seq_putc(m, '\n');
2327 }
2328
2329 -/* Remove non-existent capabilities */
2330 -#define NORM_CAPS(v) (v.cap[CAP_TO_INDEX(CAP_LAST_CAP)] &= \
2331 - CAP_TO_MASK(CAP_LAST_CAP + 1) - 1)
2332 -
2333 static inline void task_cap(struct seq_file *m, struct task_struct *p)
2334 {
2335 const struct cred *cred;
2336 @@ -326,11 +322,6 @@ static inline void task_cap(struct seq_file *m, struct task_struct *p)
2337 cap_bset = cred->cap_bset;
2338 rcu_read_unlock();
2339
2340 - NORM_CAPS(cap_inheritable);
2341 - NORM_CAPS(cap_permitted);
2342 - NORM_CAPS(cap_effective);
2343 - NORM_CAPS(cap_bset);
2344 -
2345 render_cap_t(m, "CapInh:\t", &cap_inheritable);
2346 render_cap_t(m, "CapPrm:\t", &cap_permitted);
2347 render_cap_t(m, "CapEff:\t", &cap_effective);
2348 diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
2349 index 41a695048be7..cfbb4c1b2f17 100644
2350 --- a/fs/xfs/xfs_aops.c
2351 +++ b/fs/xfs/xfs_aops.c
2352 @@ -1661,11 +1661,72 @@ xfs_vm_readpages(
2353 return mpage_readpages(mapping, pages, nr_pages, xfs_get_blocks);
2354 }
2355
2356 +/*
2357 + * This is basically a copy of __set_page_dirty_buffers() with one
2358 + * small tweak: buffers beyond EOF do not get marked dirty. If we mark them
2359 + * dirty, we'll never be able to clean them because we don't write buffers
2360 + * beyond EOF, and that means we can't invalidate pages that span EOF
2361 + * that have been marked dirty. Further, the dirty state can leak into
2362 + * the file interior if the file is extended, resulting in all sorts of
2363 + * bad things happening as the state does not match the underlying data.
2364 + *
2365 + * XXX: this really indicates that bufferheads in XFS need to die. Warts like
2366 + * this only exist because of bufferheads and how the generic code manages them.
2367 + */
2368 +STATIC int
2369 +xfs_vm_set_page_dirty(
2370 + struct page *page)
2371 +{
2372 + struct address_space *mapping = page->mapping;
2373 + struct inode *inode = mapping->host;
2374 + loff_t end_offset;
2375 + loff_t offset;
2376 + int newly_dirty;
2377 +
2378 + if (unlikely(!mapping))
2379 + return !TestSetPageDirty(page);
2380 +
2381 + end_offset = i_size_read(inode);
2382 + offset = page_offset(page);
2383 +
2384 + spin_lock(&mapping->private_lock);
2385 + if (page_has_buffers(page)) {
2386 + struct buffer_head *head = page_buffers(page);
2387 + struct buffer_head *bh = head;
2388 +
2389 + do {
2390 + if (offset < end_offset)
2391 + set_buffer_dirty(bh);
2392 + bh = bh->b_this_page;
2393 + offset += 1 << inode->i_blkbits;
2394 + } while (bh != head);
2395 + }
2396 + newly_dirty = !TestSetPageDirty(page);
2397 + spin_unlock(&mapping->private_lock);
2398 +
2399 + if (newly_dirty) {
2400 + /* sigh - __set_page_dirty() is static, so copy it here, too */
2401 + unsigned long flags;
2402 +
2403 + spin_lock_irqsave(&mapping->tree_lock, flags);
2404 + if (page->mapping) { /* Race with truncate? */
2405 + WARN_ON_ONCE(!PageUptodate(page));
2406 + account_page_dirtied(page, mapping);
2407 + radix_tree_tag_set(&mapping->page_tree,
2408 + page_index(page), PAGECACHE_TAG_DIRTY);
2409 + }
2410 + spin_unlock_irqrestore(&mapping->tree_lock, flags);
2411 + __mark_inode_dirty(mapping->host, I_DIRTY_PAGES);
2412 + }
2413 + return newly_dirty;
2414 +}
2415 +
2416 const struct address_space_operations xfs_address_space_operations = {
2417 .readpage = xfs_vm_readpage,
2418 .readpages = xfs_vm_readpages,
2419 .writepage = xfs_vm_writepage,
2420 .writepages = xfs_vm_writepages,
2421 + .set_page_dirty = xfs_vm_set_page_dirty,
2422 .releasepage = xfs_vm_releasepage,
2423 .invalidatepage = xfs_vm_invalidatepage,
2424 .write_begin = xfs_vm_write_begin,
2425 diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c
2426 index 044e97a33c8d..bac3e1635b7d 100644
2427 --- a/fs/xfs/xfs_dquot.c
2428 +++ b/fs/xfs/xfs_dquot.c
2429 @@ -1104,7 +1104,8 @@ xfs_qm_dqflush(
2430 * Get the buffer containing the on-disk dquot
2431 */
2432 error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, dqp->q_blkno,
2433 - mp->m_quotainfo->qi_dqchunklen, 0, &bp, NULL);
2434 + mp->m_quotainfo->qi_dqchunklen, 0, &bp,
2435 + &xfs_dquot_buf_ops);
2436 if (error)
2437 goto out_unlock;
2438
2439 diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
2440 index a5f2042aec8b..9f457fedbcfc 100644
2441 --- a/fs/xfs/xfs_file.c
2442 +++ b/fs/xfs/xfs_file.c
2443 @@ -298,7 +298,16 @@ xfs_file_aio_read(
2444 xfs_rw_iunlock(ip, XFS_IOLOCK_EXCL);
2445 return ret;
2446 }
2447 - truncate_pagecache_range(VFS_I(ip), pos, -1);
2448 +
2449 + /*
2450 + * Invalidate whole pages. This can return an error if
2451 + * we fail to invalidate a page, but this should never
2452 + * happen on XFS. Warn if it does fail.
2453 + */
2454 + ret = invalidate_inode_pages2_range(VFS_I(ip)->i_mapping,
2455 + pos >> PAGE_CACHE_SHIFT, -1);
2456 + WARN_ON_ONCE(ret);
2457 + ret = 0;
2458 }
2459 xfs_rw_ilock_demote(ip, XFS_IOLOCK_EXCL);
2460 }
2461 @@ -677,7 +686,15 @@ xfs_file_dio_aio_write(
2462 pos, -1);
2463 if (ret)
2464 goto out;
2465 - truncate_pagecache_range(VFS_I(ip), pos, -1);
2466 + /*
2467 + * Invalidate whole pages. This can return an error if
2468 + * we fail to invalidate a page, but this should never
2469 + * happen on XFS. Warn if it does fail.
2470 + */
2471 + ret = invalidate_inode_pages2_range(VFS_I(ip)->i_mapping,
2472 + pos >> PAGE_CACHE_SHIFT, -1);
2473 + WARN_ON_ONCE(ret);
2474 + ret = 0;
2475 }
2476
2477 /*
2478 diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c
2479 index b75c9bb6e71e..29d1ca567ed3 100644
2480 --- a/fs/xfs/xfs_qm.c
2481 +++ b/fs/xfs/xfs_qm.c
2482 @@ -935,6 +935,12 @@ xfs_qm_dqiter_bufs(
2483 if (error)
2484 break;
2485
2486 + /*
2487 + * A corrupt buffer might not have a verifier attached, so
2488 + * make sure we have the correct one attached before writeback
2489 + * occurs.
2490 + */
2491 + bp->b_ops = &xfs_dquot_buf_ops;
2492 xfs_qm_reset_dqcounts(mp, bp, firstid, type);
2493 xfs_buf_delwri_queue(bp, buffer_list);
2494 xfs_buf_relse(bp);
2495 @@ -1018,7 +1024,7 @@ xfs_qm_dqiterate(
2496 xfs_buf_readahead(mp->m_ddev_targp,
2497 XFS_FSB_TO_DADDR(mp, rablkno),
2498 mp->m_quotainfo->qi_dqchunklen,
2499 - NULL);
2500 + &xfs_dquot_buf_ops);
2501 rablkno++;
2502 }
2503 }
2504 diff --git a/include/linux/capability.h b/include/linux/capability.h
2505 index 15f90929fb51..9b4378af414c 100644
2506 --- a/include/linux/capability.h
2507 +++ b/include/linux/capability.h
2508 @@ -78,8 +78,11 @@ extern const kernel_cap_t __cap_init_eff_set;
2509 # error Fix up hand-coded capability macro initializers
2510 #else /* HAND-CODED capability initializers */
2511
2512 +#define CAP_LAST_U32 ((_KERNEL_CAPABILITY_U32S) - 1)
2513 +#define CAP_LAST_U32_VALID_MASK (CAP_TO_MASK(CAP_LAST_CAP + 1) -1)
2514 +
2515 # define CAP_EMPTY_SET ((kernel_cap_t){{ 0, 0 }})
2516 -# define CAP_FULL_SET ((kernel_cap_t){{ ~0, ~0 }})
2517 +# define CAP_FULL_SET ((kernel_cap_t){{ ~0, CAP_LAST_U32_VALID_MASK }})
2518 # define CAP_FS_SET ((kernel_cap_t){{ CAP_FS_MASK_B0 \
2519 | CAP_TO_MASK(CAP_LINUX_IMMUTABLE), \
2520 CAP_FS_MASK_B1 } })
2521 diff --git a/include/linux/ceph/messenger.h b/include/linux/ceph/messenger.h
2522 index 7c1420bb1dce..6ade97de7a85 100644
2523 --- a/include/linux/ceph/messenger.h
2524 +++ b/include/linux/ceph/messenger.h
2525 @@ -157,7 +157,7 @@ struct ceph_msg {
2526 bool front_is_vmalloc;
2527 bool more_to_follow;
2528 bool needs_out_seq;
2529 - int front_max;
2530 + int front_alloc_len;
2531 unsigned long ack_stamp; /* tx: when we were acked */
2532
2533 struct ceph_msgpool *pool;
2534 diff --git a/include/linux/mount.h b/include/linux/mount.h
2535 index 73005f9957ea..8eeb8f6ab110 100644
2536 --- a/include/linux/mount.h
2537 +++ b/include/linux/mount.h
2538 @@ -42,11 +42,18 @@ struct mnt_namespace;
2539 * flag, consider how it interacts with shared mounts.
2540 */
2541 #define MNT_SHARED_MASK (MNT_UNBINDABLE)
2542 -#define MNT_PROPAGATION_MASK (MNT_SHARED | MNT_UNBINDABLE)
2543 +#define MNT_USER_SETTABLE_MASK (MNT_NOSUID | MNT_NODEV | MNT_NOEXEC \
2544 + | MNT_NOATIME | MNT_NODIRATIME | MNT_RELATIME \
2545 + | MNT_READONLY)
2546
2547 +#define MNT_ATIME_MASK (MNT_NOATIME | MNT_NODIRATIME | MNT_RELATIME )
2548
2549 #define MNT_INTERNAL 0x4000
2550
2551 +#define MNT_LOCK_ATIME 0x040000
2552 +#define MNT_LOCK_NOEXEC 0x080000
2553 +#define MNT_LOCK_NOSUID 0x100000
2554 +#define MNT_LOCK_NODEV 0x200000
2555 #define MNT_LOCK_READONLY 0x400000
2556
2557 struct vfsmount {
2558 diff --git a/kernel/audit.c b/kernel/audit.c
2559 index a6c632757e57..4dd7529b0845 100644
2560 --- a/kernel/audit.c
2561 +++ b/kernel/audit.c
2562 @@ -1412,7 +1412,7 @@ void audit_log_cap(struct audit_buffer *ab, char *prefix, kernel_cap_t *cap)
2563 audit_log_format(ab, " %s=", prefix);
2564 CAP_FOR_EACH_U32(i) {
2565 audit_log_format(ab, "%08x",
2566 - cap->cap[(_KERNEL_CAPABILITY_U32S-1) - i]);
2567 + cap->cap[CAP_LAST_U32 - i]);
2568 }
2569 }
2570
2571 diff --git a/kernel/capability.c b/kernel/capability.c
2572 index d52eecc0942b..1339806a8731 100644
2573 --- a/kernel/capability.c
2574 +++ b/kernel/capability.c
2575 @@ -268,6 +268,10 @@ SYSCALL_DEFINE2(capset, cap_user_header_t, header, const cap_user_data_t, data)
2576 i++;
2577 }
2578
2579 + effective.cap[CAP_LAST_U32] &= CAP_LAST_U32_VALID_MASK;
2580 + permitted.cap[CAP_LAST_U32] &= CAP_LAST_U32_VALID_MASK;
2581 + inheritable.cap[CAP_LAST_U32] &= CAP_LAST_U32_VALID_MASK;
2582 +
2583 new = prepare_creds();
2584 if (!new)
2585 return -ENOMEM;
2586 diff --git a/kernel/smp.c b/kernel/smp.c
2587 index 4dba0f7b72ad..88797cb0d23a 100644
2588 --- a/kernel/smp.c
2589 +++ b/kernel/smp.c
2590 @@ -658,7 +658,7 @@ void on_each_cpu_cond(bool (*cond_func)(int cpu, void *info),
2591 if (cond_func(cpu, info)) {
2592 ret = smp_call_function_single(cpu, func,
2593 info, wait);
2594 - WARN_ON_ONCE(!ret);
2595 + WARN_ON_ONCE(ret);
2596 }
2597 preempt_enable();
2598 }
2599 diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
2600 index 4063d5fe5e44..5efbc122e5ce 100644
2601 --- a/kernel/trace/ring_buffer.c
2602 +++ b/kernel/trace/ring_buffer.c
2603 @@ -1980,7 +1980,7 @@ rb_add_time_stamp(struct ring_buffer_event *event, u64 delta)
2604
2605 /**
2606 * rb_update_event - update event type and data
2607 - * @event: the even to update
2608 + * @event: the event to update
2609 * @type: the type of event
2610 * @length: the size of the event field in the ring buffer
2611 *
2612 @@ -3353,21 +3353,16 @@ static void rb_iter_reset(struct ring_buffer_iter *iter)
2613 struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer;
2614
2615 /* Iterator usage is expected to have record disabled */
2616 - if (list_empty(&cpu_buffer->reader_page->list)) {
2617 - iter->head_page = rb_set_head_page(cpu_buffer);
2618 - if (unlikely(!iter->head_page))
2619 - return;
2620 - iter->head = iter->head_page->read;
2621 - } else {
2622 - iter->head_page = cpu_buffer->reader_page;
2623 - iter->head = cpu_buffer->reader_page->read;
2624 - }
2625 + iter->head_page = cpu_buffer->reader_page;
2626 + iter->head = cpu_buffer->reader_page->read;
2627 +
2628 + iter->cache_reader_page = iter->head_page;
2629 + iter->cache_read = iter->head;
2630 +
2631 if (iter->head)
2632 iter->read_stamp = cpu_buffer->read_stamp;
2633 else
2634 iter->read_stamp = iter->head_page->page->time_stamp;
2635 - iter->cache_reader_page = cpu_buffer->reader_page;
2636 - iter->cache_read = cpu_buffer->read;
2637 }
2638
2639 /**
2640 @@ -3760,12 +3755,14 @@ rb_iter_peek(struct ring_buffer_iter *iter, u64 *ts)
2641 return NULL;
2642
2643 /*
2644 - * We repeat when a time extend is encountered.
2645 - * Since the time extend is always attached to a data event,
2646 - * we should never loop more than once.
2647 - * (We never hit the following condition more than twice).
2648 + * We repeat when a time extend is encountered or we hit
2649 + * the end of the page. Since the time extend is always attached
2650 + * to a data event, we should never loop more than three times.
2651 + * Once for going to next page, once on time extend, and
2652 + * finally once to get the event.
2653 + * (We never hit the following condition more than thrice).
2654 */
2655 - if (RB_WARN_ON(cpu_buffer, ++nr_loops > 2))
2656 + if (RB_WARN_ON(cpu_buffer, ++nr_loops > 3))
2657 return NULL;
2658
2659 if (rb_per_cpu_empty(cpu_buffer))
2660 diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
2661 index 302d29b3744d..5f36f70ce44d 100644
2662 --- a/net/bluetooth/l2cap_sock.c
2663 +++ b/net/bluetooth/l2cap_sock.c
2664 @@ -887,7 +887,8 @@ static int l2cap_sock_shutdown(struct socket *sock, int how)
2665 l2cap_chan_close(chan, 0);
2666 lock_sock(sk);
2667
2668 - if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
2669 + if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
2670 + !(current->flags & PF_EXITING))
2671 err = bt_sock_wait_state(sk, BT_CLOSED,
2672 sk->sk_lingertime);
2673 }
2674 diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c
2675 index ca957d34b0c8..19ba192e9dbf 100644
2676 --- a/net/bluetooth/rfcomm/core.c
2677 +++ b/net/bluetooth/rfcomm/core.c
2678 @@ -1857,10 +1857,13 @@ static struct rfcomm_session *rfcomm_process_rx(struct rfcomm_session *s)
2679 /* Get data directly from socket receive queue without copying it. */
2680 while ((skb = skb_dequeue(&sk->sk_receive_queue))) {
2681 skb_orphan(skb);
2682 - if (!skb_linearize(skb))
2683 + if (!skb_linearize(skb)) {
2684 s = rfcomm_recv_frame(s, skb);
2685 - else
2686 + if (!s)
2687 + break;
2688 + } else {
2689 kfree_skb(skb);
2690 + }
2691 }
2692
2693 if (s && (sk->sk_state == BT_CLOSED))
2694 diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c
2695 index c1c6028e389a..7ca014daa5ab 100644
2696 --- a/net/bluetooth/rfcomm/sock.c
2697 +++ b/net/bluetooth/rfcomm/sock.c
2698 @@ -887,7 +887,8 @@ static int rfcomm_sock_shutdown(struct socket *sock, int how)
2699 sk->sk_shutdown = SHUTDOWN_MASK;
2700 __rfcomm_sock_close(sk);
2701
2702 - if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
2703 + if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
2704 + !(current->flags & PF_EXITING))
2705 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
2706 }
2707 release_sock(sk);
2708 diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
2709 index 2bb1d3a5e76b..c9ae6b703c13 100644
2710 --- a/net/bluetooth/sco.c
2711 +++ b/net/bluetooth/sco.c
2712 @@ -858,7 +858,8 @@ static int sco_sock_shutdown(struct socket *sock, int how)
2713 sco_sock_clear_timer(sk);
2714 __sco_sock_close(sk);
2715
2716 - if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
2717 + if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
2718 + !(current->flags & PF_EXITING))
2719 err = bt_sock_wait_state(sk, BT_CLOSED,
2720 sk->sk_lingertime);
2721 }
2722 @@ -878,7 +879,8 @@ static int sco_sock_release(struct socket *sock)
2723
2724 sco_sock_close(sk);
2725
2726 - if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) {
2727 + if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
2728 + !(current->flags & PF_EXITING)) {
2729 lock_sock(sk);
2730 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
2731 release_sock(sk);
2732 diff --git a/net/ceph/auth_x.c b/net/ceph/auth_x.c
2733 index 96238ba95f2b..de6662b14e1f 100644
2734 --- a/net/ceph/auth_x.c
2735 +++ b/net/ceph/auth_x.c
2736 @@ -13,8 +13,6 @@
2737 #include "auth_x.h"
2738 #include "auth_x_protocol.h"
2739
2740 -#define TEMP_TICKET_BUF_LEN 256
2741 -
2742 static void ceph_x_validate_tickets(struct ceph_auth_client *ac, int *pneed);
2743
2744 static int ceph_x_is_authenticated(struct ceph_auth_client *ac)
2745 @@ -64,7 +62,7 @@ static int ceph_x_encrypt(struct ceph_crypto_key *secret,
2746 }
2747
2748 static int ceph_x_decrypt(struct ceph_crypto_key *secret,
2749 - void **p, void *end, void *obuf, size_t olen)
2750 + void **p, void *end, void **obuf, size_t olen)
2751 {
2752 struct ceph_x_encrypt_header head;
2753 size_t head_len = sizeof(head);
2754 @@ -75,8 +73,14 @@ static int ceph_x_decrypt(struct ceph_crypto_key *secret,
2755 return -EINVAL;
2756
2757 dout("ceph_x_decrypt len %d\n", len);
2758 - ret = ceph_decrypt2(secret, &head, &head_len, obuf, &olen,
2759 - *p, len);
2760 + if (*obuf == NULL) {
2761 + *obuf = kmalloc(len, GFP_NOFS);
2762 + if (!*obuf)
2763 + return -ENOMEM;
2764 + olen = len;
2765 + }
2766 +
2767 + ret = ceph_decrypt2(secret, &head, &head_len, *obuf, &olen, *p, len);
2768 if (ret)
2769 return ret;
2770 if (head.struct_v != 1 || le64_to_cpu(head.magic) != CEPHX_ENC_MAGIC)
2771 @@ -129,139 +133,120 @@ static void remove_ticket_handler(struct ceph_auth_client *ac,
2772 kfree(th);
2773 }
2774
2775 -static int ceph_x_proc_ticket_reply(struct ceph_auth_client *ac,
2776 - struct ceph_crypto_key *secret,
2777 - void *buf, void *end)
2778 +static int process_one_ticket(struct ceph_auth_client *ac,
2779 + struct ceph_crypto_key *secret,
2780 + void **p, void *end)
2781 {
2782 struct ceph_x_info *xi = ac->private;
2783 - int num;
2784 - void *p = buf;
2785 + int type;
2786 + u8 tkt_struct_v, blob_struct_v;
2787 + struct ceph_x_ticket_handler *th;
2788 + void *dbuf = NULL;
2789 + void *dp, *dend;
2790 + int dlen;
2791 + char is_enc;
2792 + struct timespec validity;
2793 + struct ceph_crypto_key old_key;
2794 + void *ticket_buf = NULL;
2795 + void *tp, *tpend;
2796 + struct ceph_timespec new_validity;
2797 + struct ceph_crypto_key new_session_key;
2798 + struct ceph_buffer *new_ticket_blob;
2799 + unsigned long new_expires, new_renew_after;
2800 + u64 new_secret_id;
2801 int ret;
2802 - char *dbuf;
2803 - char *ticket_buf;
2804 - u8 reply_struct_v;
2805
2806 - dbuf = kmalloc(TEMP_TICKET_BUF_LEN, GFP_NOFS);
2807 - if (!dbuf)
2808 - return -ENOMEM;
2809 + ceph_decode_need(p, end, sizeof(u32) + 1, bad);
2810
2811 - ret = -ENOMEM;
2812 - ticket_buf = kmalloc(TEMP_TICKET_BUF_LEN, GFP_NOFS);
2813 - if (!ticket_buf)
2814 - goto out_dbuf;
2815 + type = ceph_decode_32(p);
2816 + dout(" ticket type %d %s\n", type, ceph_entity_type_name(type));
2817
2818 - ceph_decode_need(&p, end, 1 + sizeof(u32), bad);
2819 - reply_struct_v = ceph_decode_8(&p);
2820 - if (reply_struct_v != 1)
2821 + tkt_struct_v = ceph_decode_8(p);
2822 + if (tkt_struct_v != 1)
2823 goto bad;
2824 - num = ceph_decode_32(&p);
2825 - dout("%d tickets\n", num);
2826 - while (num--) {
2827 - int type;
2828 - u8 tkt_struct_v, blob_struct_v;
2829 - struct ceph_x_ticket_handler *th;
2830 - void *dp, *dend;
2831 - int dlen;
2832 - char is_enc;
2833 - struct timespec validity;
2834 - struct ceph_crypto_key old_key;
2835 - void *tp, *tpend;
2836 - struct ceph_timespec new_validity;
2837 - struct ceph_crypto_key new_session_key;
2838 - struct ceph_buffer *new_ticket_blob;
2839 - unsigned long new_expires, new_renew_after;
2840 - u64 new_secret_id;
2841 -
2842 - ceph_decode_need(&p, end, sizeof(u32) + 1, bad);
2843 -
2844 - type = ceph_decode_32(&p);
2845 - dout(" ticket type %d %s\n", type, ceph_entity_type_name(type));
2846 -
2847 - tkt_struct_v = ceph_decode_8(&p);
2848 - if (tkt_struct_v != 1)
2849 - goto bad;
2850 -
2851 - th = get_ticket_handler(ac, type);
2852 - if (IS_ERR(th)) {
2853 - ret = PTR_ERR(th);
2854 - goto out;
2855 - }
2856
2857 - /* blob for me */
2858 - dlen = ceph_x_decrypt(secret, &p, end, dbuf,
2859 - TEMP_TICKET_BUF_LEN);
2860 - if (dlen <= 0) {
2861 - ret = dlen;
2862 - goto out;
2863 - }
2864 - dout(" decrypted %d bytes\n", dlen);
2865 - dend = dbuf + dlen;
2866 - dp = dbuf;
2867 + th = get_ticket_handler(ac, type);
2868 + if (IS_ERR(th)) {
2869 + ret = PTR_ERR(th);
2870 + goto out;
2871 + }
2872
2873 - tkt_struct_v = ceph_decode_8(&dp);
2874 - if (tkt_struct_v != 1)
2875 - goto bad;
2876 + /* blob for me */
2877 + dlen = ceph_x_decrypt(secret, p, end, &dbuf, 0);
2878 + if (dlen <= 0) {
2879 + ret = dlen;
2880 + goto out;
2881 + }
2882 + dout(" decrypted %d bytes\n", dlen);
2883 + dp = dbuf;
2884 + dend = dp + dlen;
2885
2886 - memcpy(&old_key, &th->session_key, sizeof(old_key));
2887 - ret = ceph_crypto_key_decode(&new_session_key, &dp, dend);
2888 - if (ret)
2889 - goto out;
2890 + tkt_struct_v = ceph_decode_8(&dp);
2891 + if (tkt_struct_v != 1)
2892 + goto bad;
2893
2894 - ceph_decode_copy(&dp, &new_validity, sizeof(new_validity));
2895 - ceph_decode_timespec(&validity, &new_validity);
2896 - new_expires = get_seconds() + validity.tv_sec;
2897 - new_renew_after = new_expires - (validity.tv_sec / 4);
2898 - dout(" expires=%lu renew_after=%lu\n", new_expires,
2899 - new_renew_after);
2900 + memcpy(&old_key, &th->session_key, sizeof(old_key));
2901 + ret = ceph_crypto_key_decode(&new_session_key, &dp, dend);
2902 + if (ret)
2903 + goto out;
2904
2905 - /* ticket blob for service */
2906 - ceph_decode_8_safe(&p, end, is_enc, bad);
2907 - tp = ticket_buf;
2908 - if (is_enc) {
2909 - /* encrypted */
2910 - dout(" encrypted ticket\n");
2911 - dlen = ceph_x_decrypt(&old_key, &p, end, ticket_buf,
2912 - TEMP_TICKET_BUF_LEN);
2913 - if (dlen < 0) {
2914 - ret = dlen;
2915 - goto out;
2916 - }
2917 - dlen = ceph_decode_32(&tp);
2918 - } else {
2919 - /* unencrypted */
2920 - ceph_decode_32_safe(&p, end, dlen, bad);
2921 - ceph_decode_need(&p, end, dlen, bad);
2922 - ceph_decode_copy(&p, ticket_buf, dlen);
2923 + ceph_decode_copy(&dp, &new_validity, sizeof(new_validity));
2924 + ceph_decode_timespec(&validity, &new_validity);
2925 + new_expires = get_seconds() + validity.tv_sec;
2926 + new_renew_after = new_expires - (validity.tv_sec / 4);
2927 + dout(" expires=%lu renew_after=%lu\n", new_expires,
2928 + new_renew_after);
2929 +
2930 + /* ticket blob for service */
2931 + ceph_decode_8_safe(p, end, is_enc, bad);
2932 + if (is_enc) {
2933 + /* encrypted */
2934 + dout(" encrypted ticket\n");
2935 + dlen = ceph_x_decrypt(&old_key, p, end, &ticket_buf, 0);
2936 + if (dlen < 0) {
2937 + ret = dlen;
2938 + goto out;
2939 }
2940 - tpend = tp + dlen;
2941 - dout(" ticket blob is %d bytes\n", dlen);
2942 - ceph_decode_need(&tp, tpend, 1 + sizeof(u64), bad);
2943 - blob_struct_v = ceph_decode_8(&tp);
2944 - new_secret_id = ceph_decode_64(&tp);
2945 - ret = ceph_decode_buffer(&new_ticket_blob, &tp, tpend);
2946 - if (ret)
2947 + tp = ticket_buf;
2948 + dlen = ceph_decode_32(&tp);
2949 + } else {
2950 + /* unencrypted */
2951 + ceph_decode_32_safe(p, end, dlen, bad);
2952 + ticket_buf = kmalloc(dlen, GFP_NOFS);
2953 + if (!ticket_buf) {
2954 + ret = -ENOMEM;
2955 goto out;
2956 -
2957 - /* all is well, update our ticket */
2958 - ceph_crypto_key_destroy(&th->session_key);
2959 - if (th->ticket_blob)
2960 - ceph_buffer_put(th->ticket_blob);
2961 - th->session_key = new_session_key;
2962 - th->ticket_blob = new_ticket_blob;
2963 - th->validity = new_validity;
2964 - th->secret_id = new_secret_id;
2965 - th->expires = new_expires;
2966 - th->renew_after = new_renew_after;
2967 - dout(" got ticket service %d (%s) secret_id %lld len %d\n",
2968 - type, ceph_entity_type_name(type), th->secret_id,
2969 - (int)th->ticket_blob->vec.iov_len);
2970 - xi->have_keys |= th->service;
2971 + }
2972 + tp = ticket_buf;
2973 + ceph_decode_need(p, end, dlen, bad);
2974 + ceph_decode_copy(p, ticket_buf, dlen);
2975 }
2976 + tpend = tp + dlen;
2977 + dout(" ticket blob is %d bytes\n", dlen);
2978 + ceph_decode_need(&tp, tpend, 1 + sizeof(u64), bad);
2979 + blob_struct_v = ceph_decode_8(&tp);
2980 + new_secret_id = ceph_decode_64(&tp);
2981 + ret = ceph_decode_buffer(&new_ticket_blob, &tp, tpend);
2982 + if (ret)
2983 + goto out;
2984 +
2985 + /* all is well, update our ticket */
2986 + ceph_crypto_key_destroy(&th->session_key);
2987 + if (th->ticket_blob)
2988 + ceph_buffer_put(th->ticket_blob);
2989 + th->session_key = new_session_key;
2990 + th->ticket_blob = new_ticket_blob;
2991 + th->validity = new_validity;
2992 + th->secret_id = new_secret_id;
2993 + th->expires = new_expires;
2994 + th->renew_after = new_renew_after;
2995 + dout(" got ticket service %d (%s) secret_id %lld len %d\n",
2996 + type, ceph_entity_type_name(type), th->secret_id,
2997 + (int)th->ticket_blob->vec.iov_len);
2998 + xi->have_keys |= th->service;
2999
3000 - ret = 0;
3001 out:
3002 kfree(ticket_buf);
3003 -out_dbuf:
3004 kfree(dbuf);
3005 return ret;
3006
3007 @@ -270,6 +255,34 @@ bad:
3008 goto out;
3009 }
3010
3011 +static int ceph_x_proc_ticket_reply(struct ceph_auth_client *ac,
3012 + struct ceph_crypto_key *secret,
3013 + void *buf, void *end)
3014 +{
3015 + void *p = buf;
3016 + u8 reply_struct_v;
3017 + u32 num;
3018 + int ret;
3019 +
3020 + ceph_decode_8_safe(&p, end, reply_struct_v, bad);
3021 + if (reply_struct_v != 1)
3022 + return -EINVAL;
3023 +
3024 + ceph_decode_32_safe(&p, end, num, bad);
3025 + dout("%d tickets\n", num);
3026 +
3027 + while (num--) {
3028 + ret = process_one_ticket(ac, secret, &p, end);
3029 + if (ret)
3030 + return ret;
3031 + }
3032 +
3033 + return 0;
3034 +
3035 +bad:
3036 + return -EINVAL;
3037 +}
3038 +
3039 static int ceph_x_build_authorizer(struct ceph_auth_client *ac,
3040 struct ceph_x_ticket_handler *th,
3041 struct ceph_x_authorizer *au)
3042 @@ -583,13 +596,14 @@ static int ceph_x_verify_authorizer_reply(struct ceph_auth_client *ac,
3043 struct ceph_x_ticket_handler *th;
3044 int ret = 0;
3045 struct ceph_x_authorize_reply reply;
3046 + void *preply = &reply;
3047 void *p = au->reply_buf;
3048 void *end = p + sizeof(au->reply_buf);
3049
3050 th = get_ticket_handler(ac, au->service);
3051 if (IS_ERR(th))
3052 return PTR_ERR(th);
3053 - ret = ceph_x_decrypt(&th->session_key, &p, end, &reply, sizeof(reply));
3054 + ret = ceph_x_decrypt(&th->session_key, &p, end, &preply, sizeof(reply));
3055 if (ret < 0)
3056 return ret;
3057 if (ret != sizeof(reply))
3058 diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
3059 index b9d7df175700..66e77f380fce 100644
3060 --- a/net/ceph/messenger.c
3061 +++ b/net/ceph/messenger.c
3062 @@ -904,7 +904,7 @@ static void ceph_msg_data_pages_cursor_init(struct ceph_msg_data_cursor *cursor,
3063 BUG_ON(page_count > (int)USHRT_MAX);
3064 cursor->page_count = (unsigned short)page_count;
3065 BUG_ON(length > SIZE_MAX - cursor->page_offset);
3066 - cursor->last_piece = (size_t)cursor->page_offset + length <= PAGE_SIZE;
3067 + cursor->last_piece = cursor->page_offset + cursor->resid <= PAGE_SIZE;
3068 }
3069
3070 static struct page *
3071 @@ -3144,7 +3144,7 @@ struct ceph_msg *ceph_msg_new(int type, int front_len, gfp_t flags,
3072 INIT_LIST_HEAD(&m->data);
3073
3074 /* front */
3075 - m->front_max = front_len;
3076 + m->front_alloc_len = front_len;
3077 if (front_len) {
3078 if (front_len > PAGE_CACHE_SIZE) {
3079 m->front.iov_base = __vmalloc(front_len, flags,
3080 @@ -3319,8 +3319,8 @@ EXPORT_SYMBOL(ceph_msg_last_put);
3081
3082 void ceph_msg_dump(struct ceph_msg *msg)
3083 {
3084 - pr_debug("msg_dump %p (front_max %d length %zd)\n", msg,
3085 - msg->front_max, msg->data_length);
3086 + pr_debug("msg_dump %p (front_alloc_len %d length %zd)\n", msg,
3087 + msg->front_alloc_len, msg->data_length);
3088 print_hex_dump(KERN_DEBUG, "header: ",
3089 DUMP_PREFIX_OFFSET, 16, 1,
3090 &msg->hdr, sizeof(msg->hdr), true);
3091 diff --git a/net/ceph/mon_client.c b/net/ceph/mon_client.c
3092 index 1fe25cd29d0e..dbcbf5a4707f 100644
3093 --- a/net/ceph/mon_client.c
3094 +++ b/net/ceph/mon_client.c
3095 @@ -152,7 +152,7 @@ static int __open_session(struct ceph_mon_client *monc)
3096 /* initiatiate authentication handshake */
3097 ret = ceph_auth_build_hello(monc->auth,
3098 monc->m_auth->front.iov_base,
3099 - monc->m_auth->front_max);
3100 + monc->m_auth->front_alloc_len);
3101 __send_prepared_auth_request(monc, ret);
3102 } else {
3103 dout("open_session mon%d already open\n", monc->cur_mon);
3104 @@ -196,7 +196,7 @@ static void __send_subscribe(struct ceph_mon_client *monc)
3105 int num;
3106
3107 p = msg->front.iov_base;
3108 - end = p + msg->front_max;
3109 + end = p + msg->front_alloc_len;
3110
3111 num = 1 + !!monc->want_next_osdmap + !!monc->want_mdsmap;
3112 ceph_encode_32(&p, num);
3113 @@ -897,7 +897,7 @@ static void handle_auth_reply(struct ceph_mon_client *monc,
3114 ret = ceph_handle_auth_reply(monc->auth, msg->front.iov_base,
3115 msg->front.iov_len,
3116 monc->m_auth->front.iov_base,
3117 - monc->m_auth->front_max);
3118 + monc->m_auth->front_alloc_len);
3119 if (ret < 0) {
3120 monc->client->auth_err = ret;
3121 wake_up_all(&monc->client->auth_wq);
3122 @@ -939,7 +939,7 @@ static int __validate_auth(struct ceph_mon_client *monc)
3123 return 0;
3124
3125 ret = ceph_build_auth(monc->auth, monc->m_auth->front.iov_base,
3126 - monc->m_auth->front_max);
3127 + monc->m_auth->front_alloc_len);
3128 if (ret <= 0)
3129 return ret; /* either an error, or no need to authenticate */
3130 __send_prepared_auth_request(monc, ret);
3131 @@ -1041,7 +1041,15 @@ static struct ceph_msg *mon_alloc_msg(struct ceph_connection *con,
3132 if (!m) {
3133 pr_info("alloc_msg unknown type %d\n", type);
3134 *skip = 1;
3135 + } else if (front_len > m->front_alloc_len) {
3136 + pr_warning("mon_alloc_msg front %d > prealloc %d (%u#%llu)\n",
3137 + front_len, m->front_alloc_len,
3138 + (unsigned int)con->peer_name.type,
3139 + le64_to_cpu(con->peer_name.num));
3140 + ceph_msg_put(m);
3141 + m = ceph_msg_new(type, front_len, GFP_NOFS, false);
3142 }
3143 +
3144 return m;
3145 }
3146
3147 diff --git a/security/commoncap.c b/security/commoncap.c
3148 index c44b6fe6648e..c9219a66b7c6 100644
3149 --- a/security/commoncap.c
3150 +++ b/security/commoncap.c
3151 @@ -421,6 +421,9 @@ int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data
3152 cpu_caps->inheritable.cap[i] = le32_to_cpu(caps.data[i].inheritable);
3153 }
3154
3155 + cpu_caps->permitted.cap[CAP_LAST_U32] &= CAP_LAST_U32_VALID_MASK;
3156 + cpu_caps->inheritable.cap[CAP_LAST_U32] &= CAP_LAST_U32_VALID_MASK;
3157 +
3158 return 0;
3159 }
3160
3161 diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c
3162 index 9b7746c9546f..76bfeb3c3e30 100644
3163 --- a/sound/soc/codecs/max98090.c
3164 +++ b/sound/soc/codecs/max98090.c
3165 @@ -2234,7 +2234,7 @@ static int max98090_probe(struct snd_soc_codec *codec)
3166 /* Register for interrupts */
3167 dev_dbg(codec->dev, "irq = %d\n", max98090->irq);
3168
3169 - ret = request_threaded_irq(max98090->irq, NULL,
3170 + ret = devm_request_threaded_irq(codec->dev, max98090->irq, NULL,
3171 max98090_interrupt, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
3172 "max98090_interrupt", codec);
3173 if (ret < 0) {
3174 diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
3175 index 6dbb17d050c9..ca1e999026e5 100644
3176 --- a/sound/soc/codecs/wm_adsp.c
3177 +++ b/sound/soc/codecs/wm_adsp.c
3178 @@ -1284,3 +1284,5 @@ int wm_adsp2_init(struct wm_adsp *adsp, bool dvfs)
3179 return 0;
3180 }
3181 EXPORT_SYMBOL_GPL(wm_adsp2_init);
3182 +
3183 +MODULE_LICENSE("GPL v2");
3184 diff --git a/sound/soc/pxa/pxa-ssp.c b/sound/soc/pxa/pxa-ssp.c
3185 index 6f4dd7543e82..95a9b07bbe96 100644
3186 --- a/sound/soc/pxa/pxa-ssp.c
3187 +++ b/sound/soc/pxa/pxa-ssp.c
3188 @@ -757,9 +757,7 @@ static int pxa_ssp_remove(struct snd_soc_dai *dai)
3189 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_64000 | \
3190 SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
3191
3192 -#define PXA_SSP_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
3193 - SNDRV_PCM_FMTBIT_S24_LE | \
3194 - SNDRV_PCM_FMTBIT_S32_LE)
3195 +#define PXA_SSP_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE)
3196
3197 static const struct snd_soc_dai_ops pxa_ssp_dai_ops = {
3198 .startup = pxa_ssp_startup,
3199 diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c
3200 index 82ebb1a51479..5c9b5e4f94c3 100644
3201 --- a/sound/soc/samsung/i2s.c
3202 +++ b/sound/soc/samsung/i2s.c
3203 @@ -853,11 +853,9 @@ static int i2s_suspend(struct snd_soc_dai *dai)
3204 {
3205 struct i2s_dai *i2s = to_info(dai);
3206
3207 - if (dai->active) {
3208 - i2s->suspend_i2smod = readl(i2s->addr + I2SMOD);
3209 - i2s->suspend_i2scon = readl(i2s->addr + I2SCON);
3210 - i2s->suspend_i2spsr = readl(i2s->addr + I2SPSR);
3211 - }
3212 + i2s->suspend_i2smod = readl(i2s->addr + I2SMOD);
3213 + i2s->suspend_i2scon = readl(i2s->addr + I2SCON);
3214 + i2s->suspend_i2spsr = readl(i2s->addr + I2SPSR);
3215
3216 return 0;
3217 }
3218 @@ -866,11 +864,9 @@ static int i2s_resume(struct snd_soc_dai *dai)
3219 {
3220 struct i2s_dai *i2s = to_info(dai);
3221
3222 - if (dai->active) {
3223 - writel(i2s->suspend_i2scon, i2s->addr + I2SCON);
3224 - writel(i2s->suspend_i2smod, i2s->addr + I2SMOD);
3225 - writel(i2s->suspend_i2spsr, i2s->addr + I2SPSR);
3226 - }
3227 + writel(i2s->suspend_i2scon, i2s->addr + I2SCON);
3228 + writel(i2s->suspend_i2smod, i2s->addr + I2SMOD);
3229 + writel(i2s->suspend_i2spsr, i2s->addr + I2SPSR);
3230
3231 return 0;
3232 }
3233 diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
3234 index ccb6be4d658d..02d26915b61d 100644
3235 --- a/sound/soc/soc-pcm.c
3236 +++ b/sound/soc/soc-pcm.c
3237 @@ -1886,6 +1886,7 @@ int soc_dpcm_runtime_update(struct snd_soc_dapm_widget *widget)
3238 dpcm_be_disconnect(fe, SNDRV_PCM_STREAM_PLAYBACK);
3239 }
3240
3241 + dpcm_path_put(&list);
3242 capture:
3243 /* skip if FE doesn't have capture capability */
3244 if (!fe->cpu_dai->driver->capture.channels_min)
3245 diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
3246 index 0a63658065f0..2cee2b79b4de 100644
3247 --- a/tools/testing/selftests/Makefile
3248 +++ b/tools/testing/selftests/Makefile
3249 @@ -4,6 +4,7 @@ TARGETS += efivarfs
3250 TARGETS += kcmp
3251 TARGETS += memory-hotplug
3252 TARGETS += mqueue
3253 +TARGETS += mount
3254 TARGETS += net
3255 TARGETS += ptrace
3256 TARGETS += vm
3257 diff --git a/tools/testing/selftests/mount/Makefile b/tools/testing/selftests/mount/Makefile
3258 new file mode 100644
3259 index 000000000000..337d853c2b72
3260 --- /dev/null
3261 +++ b/tools/testing/selftests/mount/Makefile
3262 @@ -0,0 +1,17 @@
3263 +# Makefile for mount selftests.
3264 +
3265 +all: unprivileged-remount-test
3266 +
3267 +unprivileged-remount-test: unprivileged-remount-test.c
3268 + gcc -Wall -O2 unprivileged-remount-test.c -o unprivileged-remount-test
3269 +
3270 +# Allow specific tests to be selected.
3271 +test_unprivileged_remount: unprivileged-remount-test
3272 + @if [ -f /proc/self/uid_map ] ; then ./unprivileged-remount-test ; fi
3273 +
3274 +run_tests: all test_unprivileged_remount
3275 +
3276 +clean:
3277 + rm -f unprivileged-remount-test
3278 +
3279 +.PHONY: all test_unprivileged_remount
3280 diff --git a/tools/testing/selftests/mount/unprivileged-remount-test.c b/tools/testing/selftests/mount/unprivileged-remount-test.c
3281 new file mode 100644
3282 index 000000000000..1b3ff2fda4d0
3283 --- /dev/null
3284 +++ b/tools/testing/selftests/mount/unprivileged-remount-test.c
3285 @@ -0,0 +1,242 @@
3286 +#define _GNU_SOURCE
3287 +#include <sched.h>
3288 +#include <stdio.h>
3289 +#include <errno.h>
3290 +#include <string.h>
3291 +#include <sys/types.h>
3292 +#include <sys/mount.h>
3293 +#include <sys/wait.h>
3294 +#include <stdlib.h>
3295 +#include <unistd.h>
3296 +#include <fcntl.h>
3297 +#include <grp.h>
3298 +#include <stdbool.h>
3299 +#include <stdarg.h>
3300 +
3301 +#ifndef CLONE_NEWNS
3302 +# define CLONE_NEWNS 0x00020000
3303 +#endif
3304 +#ifndef CLONE_NEWUTS
3305 +# define CLONE_NEWUTS 0x04000000
3306 +#endif
3307 +#ifndef CLONE_NEWIPC
3308 +# define CLONE_NEWIPC 0x08000000
3309 +#endif
3310 +#ifndef CLONE_NEWNET
3311 +# define CLONE_NEWNET 0x40000000
3312 +#endif
3313 +#ifndef CLONE_NEWUSER
3314 +# define CLONE_NEWUSER 0x10000000
3315 +#endif
3316 +#ifndef CLONE_NEWPID
3317 +# define CLONE_NEWPID 0x20000000
3318 +#endif
3319 +
3320 +#ifndef MS_RELATIME
3321 +#define MS_RELATIME (1 << 21)
3322 +#endif
3323 +#ifndef MS_STRICTATIME
3324 +#define MS_STRICTATIME (1 << 24)
3325 +#endif
3326 +
3327 +static void die(char *fmt, ...)
3328 +{
3329 + va_list ap;
3330 + va_start(ap, fmt);
3331 + vfprintf(stderr, fmt, ap);
3332 + va_end(ap);
3333 + exit(EXIT_FAILURE);
3334 +}
3335 +
3336 +static void write_file(char *filename, char *fmt, ...)
3337 +{
3338 + char buf[4096];
3339 + int fd;
3340 + ssize_t written;
3341 + int buf_len;
3342 + va_list ap;
3343 +
3344 + va_start(ap, fmt);
3345 + buf_len = vsnprintf(buf, sizeof(buf), fmt, ap);
3346 + va_end(ap);
3347 + if (buf_len < 0) {
3348 + die("vsnprintf failed: %s\n",
3349 + strerror(errno));
3350 + }
3351 + if (buf_len >= sizeof(buf)) {
3352 + die("vsnprintf output truncated\n");
3353 + }
3354 +
3355 + fd = open(filename, O_WRONLY);
3356 + if (fd < 0) {
3357 + die("open of %s failed: %s\n",
3358 + filename, strerror(errno));
3359 + }
3360 + written = write(fd, buf, buf_len);
3361 + if (written != buf_len) {
3362 + if (written >= 0) {
3363 + die("short write to %s\n", filename);
3364 + } else {
3365 + die("write to %s failed: %s\n",
3366 + filename, strerror(errno));
3367 + }
3368 + }
3369 + if (close(fd) != 0) {
3370 + die("close of %s failed: %s\n",
3371 + filename, strerror(errno));
3372 + }
3373 +}
3374 +
3375 +static void create_and_enter_userns(void)
3376 +{
3377 + uid_t uid;
3378 + gid_t gid;
3379 +
3380 + uid = getuid();
3381 + gid = getgid();
3382 +
3383 + if (unshare(CLONE_NEWUSER) !=0) {
3384 + die("unshare(CLONE_NEWUSER) failed: %s\n",
3385 + strerror(errno));
3386 + }
3387 +
3388 + write_file("/proc/self/uid_map", "0 %d 1", uid);
3389 + write_file("/proc/self/gid_map", "0 %d 1", gid);
3390 +
3391 + if (setgroups(0, NULL) != 0) {
3392 + die("setgroups failed: %s\n",
3393 + strerror(errno));
3394 + }
3395 + if (setgid(0) != 0) {
3396 + die ("setgid(0) failed %s\n",
3397 + strerror(errno));
3398 + }
3399 + if (setuid(0) != 0) {
3400 + die("setuid(0) failed %s\n",
3401 + strerror(errno));
3402 + }
3403 +}
3404 +
3405 +static
3406 +bool test_unpriv_remount(int mount_flags, int remount_flags, int invalid_flags)
3407 +{
3408 + pid_t child;
3409 +
3410 + child = fork();
3411 + if (child == -1) {
3412 + die("fork failed: %s\n",
3413 + strerror(errno));
3414 + }
3415 + if (child != 0) { /* parent */
3416 + pid_t pid;
3417 + int status;
3418 + pid = waitpid(child, &status, 0);
3419 + if (pid == -1) {
3420 + die("waitpid failed: %s\n",
3421 + strerror(errno));
3422 + }
3423 + if (pid != child) {
3424 + die("waited for %d got %d\n",
3425 + child, pid);
3426 + }
3427 + if (!WIFEXITED(status)) {
3428 + die("child did not terminate cleanly\n");
3429 + }
3430 + return WEXITSTATUS(status) == EXIT_SUCCESS ? true : false;
3431 + }
3432 +
3433 + create_and_enter_userns();
3434 + if (unshare(CLONE_NEWNS) != 0) {
3435 + die("unshare(CLONE_NEWNS) failed: %s\n",
3436 + strerror(errno));
3437 + }
3438 +
3439 + if (mount("testing", "/tmp", "ramfs", mount_flags, NULL) != 0) {
3440 + die("mount of /tmp failed: %s\n",
3441 + strerror(errno));
3442 + }
3443 +
3444 + create_and_enter_userns();
3445 +
3446 + if (unshare(CLONE_NEWNS) != 0) {
3447 + die("unshare(CLONE_NEWNS) failed: %s\n",
3448 + strerror(errno));
3449 + }
3450 +
3451 + if (mount("/tmp", "/tmp", "none",
3452 + MS_REMOUNT | MS_BIND | remount_flags, NULL) != 0) {
3453 + /* system("cat /proc/self/mounts"); */
3454 + die("remount of /tmp failed: %s\n",
3455 + strerror(errno));
3456 + }
3457 +
3458 + if (mount("/tmp", "/tmp", "none",
3459 + MS_REMOUNT | MS_BIND | invalid_flags, NULL) == 0) {
3460 + /* system("cat /proc/self/mounts"); */
3461 + die("remount of /tmp with invalid flags "
3462 + "succeeded unexpectedly\n");
3463 + }
3464 + exit(EXIT_SUCCESS);
3465 +}
3466 +
3467 +static bool test_unpriv_remount_simple(int mount_flags)
3468 +{
3469 + return test_unpriv_remount(mount_flags, mount_flags, 0);
3470 +}
3471 +
3472 +static bool test_unpriv_remount_atime(int mount_flags, int invalid_flags)
3473 +{
3474 + return test_unpriv_remount(mount_flags, mount_flags, invalid_flags);
3475 +}
3476 +
3477 +int main(int argc, char **argv)
3478 +{
3479 + if (!test_unpriv_remount_simple(MS_RDONLY|MS_NODEV)) {
3480 + die("MS_RDONLY malfunctions\n");
3481 + }
3482 + if (!test_unpriv_remount_simple(MS_NODEV)) {
3483 + die("MS_NODEV malfunctions\n");
3484 + }
3485 + if (!test_unpriv_remount_simple(MS_NOSUID|MS_NODEV)) {
3486 + die("MS_NOSUID malfunctions\n");
3487 + }
3488 + if (!test_unpriv_remount_simple(MS_NOEXEC|MS_NODEV)) {
3489 + die("MS_NOEXEC malfunctions\n");
3490 + }
3491 + if (!test_unpriv_remount_atime(MS_RELATIME|MS_NODEV,
3492 + MS_NOATIME|MS_NODEV))
3493 + {
3494 + die("MS_RELATIME malfunctions\n");
3495 + }
3496 + if (!test_unpriv_remount_atime(MS_STRICTATIME|MS_NODEV,
3497 + MS_NOATIME|MS_NODEV))
3498 + {
3499 + die("MS_STRICTATIME malfunctions\n");
3500 + }
3501 + if (!test_unpriv_remount_atime(MS_NOATIME|MS_NODEV,
3502 + MS_STRICTATIME|MS_NODEV))
3503 + {
3504 + die("MS_RELATIME malfunctions\n");
3505 + }
3506 + if (!test_unpriv_remount_atime(MS_RELATIME|MS_NODIRATIME|MS_NODEV,
3507 + MS_NOATIME|MS_NODEV))
3508 + {
3509 + die("MS_RELATIME malfunctions\n");
3510 + }
3511 + if (!test_unpriv_remount_atime(MS_STRICTATIME|MS_NODIRATIME|MS_NODEV,
3512 + MS_NOATIME|MS_NODEV))
3513 + {
3514 + die("MS_RELATIME malfunctions\n");
3515 + }
3516 + if (!test_unpriv_remount_atime(MS_NOATIME|MS_NODIRATIME|MS_NODEV,
3517 + MS_STRICTATIME|MS_NODEV))
3518 + {
3519 + die("MS_RELATIME malfunctions\n");
3520 + }
3521 + if (!test_unpriv_remount(MS_STRICTATIME|MS_NODEV, MS_NODEV,
3522 + MS_NOATIME|MS_NODEV))
3523 + {
3524 + die("Default atime malfunctions\n");
3525 + }
3526 + return EXIT_SUCCESS;
3527 +}