Magellan Linux

Contents of /trunk/kernel-magellan/patches-3.8/0102-3.8.3-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2118 - (show annotations) (download)
Mon Mar 18 12:59:42 2013 UTC (11 years, 1 month ago) by niro
File size: 152651 byte(s)
-linux-3.8.3
1 diff --git a/arch/arm/boot/dts/kirkwood-dns320.dts b/arch/arm/boot/dts/kirkwood-dns320.dts
2 index 5bb0bf3..c9c44b2 100644
3 --- a/arch/arm/boot/dts/kirkwood-dns320.dts
4 +++ b/arch/arm/boot/dts/kirkwood-dns320.dts
5 @@ -42,12 +42,10 @@
6
7 ocp@f1000000 {
8 serial@12000 {
9 - clock-frequency = <166666667>;
10 status = "okay";
11 };
12
13 serial@12100 {
14 - clock-frequency = <166666667>;
15 status = "okay";
16 };
17 };
18 diff --git a/arch/arm/boot/dts/kirkwood-dns325.dts b/arch/arm/boot/dts/kirkwood-dns325.dts
19 index d430713..e4e4930 100644
20 --- a/arch/arm/boot/dts/kirkwood-dns325.dts
21 +++ b/arch/arm/boot/dts/kirkwood-dns325.dts
22 @@ -50,7 +50,6 @@
23 };
24 };
25 serial@12000 {
26 - clock-frequency = <200000000>;
27 status = "okay";
28 };
29 };
30 diff --git a/arch/arm/boot/dts/kirkwood-dockstar.dts b/arch/arm/boot/dts/kirkwood-dockstar.dts
31 index 2e3dd34..0196cf6 100644
32 --- a/arch/arm/boot/dts/kirkwood-dockstar.dts
33 +++ b/arch/arm/boot/dts/kirkwood-dockstar.dts
34 @@ -37,7 +37,6 @@
35 };
36 };
37 serial@12000 {
38 - clock-frequency = <200000000>;
39 status = "ok";
40 };
41
42 diff --git a/arch/arm/boot/dts/kirkwood-dreamplug.dts b/arch/arm/boot/dts/kirkwood-dreamplug.dts
43 index f2d386c..e21ae48 100644
44 --- a/arch/arm/boot/dts/kirkwood-dreamplug.dts
45 +++ b/arch/arm/boot/dts/kirkwood-dreamplug.dts
46 @@ -38,7 +38,6 @@
47 };
48 };
49 serial@12000 {
50 - clock-frequency = <200000000>;
51 status = "ok";
52 };
53
54 diff --git a/arch/arm/boot/dts/kirkwood-goflexnet.dts b/arch/arm/boot/dts/kirkwood-goflexnet.dts
55 index 1b133e0..bd83b8f 100644
56 --- a/arch/arm/boot/dts/kirkwood-goflexnet.dts
57 +++ b/arch/arm/boot/dts/kirkwood-goflexnet.dts
58 @@ -73,7 +73,6 @@
59 };
60 };
61 serial@12000 {
62 - clock-frequency = <200000000>;
63 status = "ok";
64 };
65
66 diff --git a/arch/arm/boot/dts/kirkwood-ib62x0.dts b/arch/arm/boot/dts/kirkwood-ib62x0.dts
67 index 71902da..5335b1a 100644
68 --- a/arch/arm/boot/dts/kirkwood-ib62x0.dts
69 +++ b/arch/arm/boot/dts/kirkwood-ib62x0.dts
70 @@ -51,7 +51,6 @@
71 };
72 };
73 serial@12000 {
74 - clock-frequency = <200000000>;
75 status = "okay";
76 };
77
78 diff --git a/arch/arm/boot/dts/kirkwood-iconnect.dts b/arch/arm/boot/dts/kirkwood-iconnect.dts
79 index 504f16b..12ccf74 100644
80 --- a/arch/arm/boot/dts/kirkwood-iconnect.dts
81 +++ b/arch/arm/boot/dts/kirkwood-iconnect.dts
82 @@ -78,7 +78,6 @@
83 };
84 };
85 serial@12000 {
86 - clock-frequency = <200000000>;
87 status = "ok";
88 };
89
90 diff --git a/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts b/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts
91 index 6cae459..93c3afb 100644
92 --- a/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts
93 +++ b/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts
94 @@ -115,7 +115,6 @@
95 };
96
97 serial@12000 {
98 - clock-frequency = <200000000>;
99 status = "ok";
100 };
101
102 diff --git a/arch/arm/boot/dts/kirkwood-km_kirkwood.dts b/arch/arm/boot/dts/kirkwood-km_kirkwood.dts
103 index 8db3123..5bbd054 100644
104 --- a/arch/arm/boot/dts/kirkwood-km_kirkwood.dts
105 +++ b/arch/arm/boot/dts/kirkwood-km_kirkwood.dts
106 @@ -34,7 +34,6 @@
107 };
108
109 serial@12000 {
110 - clock-frequency = <200000000>;
111 status = "ok";
112 };
113
114 diff --git a/arch/arm/boot/dts/kirkwood-lschlv2.dts b/arch/arm/boot/dts/kirkwood-lschlv2.dts
115 index 9510c9e..9f55d95 100644
116 --- a/arch/arm/boot/dts/kirkwood-lschlv2.dts
117 +++ b/arch/arm/boot/dts/kirkwood-lschlv2.dts
118 @@ -13,7 +13,6 @@
119
120 ocp@f1000000 {
121 serial@12000 {
122 - clock-frequency = <166666667>;
123 status = "okay";
124 };
125 };
126 diff --git a/arch/arm/boot/dts/kirkwood-lsxhl.dts b/arch/arm/boot/dts/kirkwood-lsxhl.dts
127 index 739019c..5c84c11 100644
128 --- a/arch/arm/boot/dts/kirkwood-lsxhl.dts
129 +++ b/arch/arm/boot/dts/kirkwood-lsxhl.dts
130 @@ -13,7 +13,6 @@
131
132 ocp@f1000000 {
133 serial@12000 {
134 - clock-frequency = <200000000>;
135 status = "okay";
136 };
137 };
138 diff --git a/arch/arm/boot/dts/kirkwood-mplcec4.dts b/arch/arm/boot/dts/kirkwood-mplcec4.dts
139 index 262c654..07be213 100644
140 --- a/arch/arm/boot/dts/kirkwood-mplcec4.dts
141 +++ b/arch/arm/boot/dts/kirkwood-mplcec4.dts
142 @@ -91,7 +91,6 @@
143 };
144
145 serial@12000 {
146 - clock-frequency = <200000000>;
147 status = "ok";
148 };
149
150 diff --git a/arch/arm/boot/dts/kirkwood-ns2-common.dtsi b/arch/arm/boot/dts/kirkwood-ns2-common.dtsi
151 index 77d21ab..f0245c1 100644
152 --- a/arch/arm/boot/dts/kirkwood-ns2-common.dtsi
153 +++ b/arch/arm/boot/dts/kirkwood-ns2-common.dtsi
154 @@ -23,7 +23,6 @@
155 };
156
157 serial@12000 {
158 - clock-frequency = <166666667>;
159 status = "okay";
160 };
161
162 diff --git a/arch/arm/boot/dts/kirkwood-nsa310.dts b/arch/arm/boot/dts/kirkwood-nsa310.dts
163 index 5509f96..28d05e4 100644
164 --- a/arch/arm/boot/dts/kirkwood-nsa310.dts
165 +++ b/arch/arm/boot/dts/kirkwood-nsa310.dts
166 @@ -18,7 +18,6 @@
167 ocp@f1000000 {
168
169 serial@12000 {
170 - clock-frequency = <200000000>;
171 status = "ok";
172 };
173
174 diff --git a/arch/arm/boot/dts/kirkwood-openblocks_a6.dts b/arch/arm/boot/dts/kirkwood-openblocks_a6.dts
175 index 49d3d74..f3cc7c4 100644
176 --- a/arch/arm/boot/dts/kirkwood-openblocks_a6.dts
177 +++ b/arch/arm/boot/dts/kirkwood-openblocks_a6.dts
178 @@ -18,12 +18,10 @@
179
180 ocp@f1000000 {
181 serial@12000 {
182 - clock-frequency = <200000000>;
183 status = "ok";
184 };
185
186 serial@12100 {
187 - clock-frequency = <200000000>;
188 status = "ok";
189 };
190
191 diff --git a/arch/arm/boot/dts/kirkwood-topkick.dts b/arch/arm/boot/dts/kirkwood-topkick.dts
192 index cd15452..7dd19ff 100644
193 --- a/arch/arm/boot/dts/kirkwood-topkick.dts
194 +++ b/arch/arm/boot/dts/kirkwood-topkick.dts
195 @@ -17,7 +17,6 @@
196
197 ocp@f1000000 {
198 serial@12000 {
199 - clock-frequency = <200000000>;
200 status = "ok";
201 };
202
203 diff --git a/arch/arm/boot/dts/kirkwood.dtsi b/arch/arm/boot/dts/kirkwood.dtsi
204 index d6ab442..ad26d92 100644
205 --- a/arch/arm/boot/dts/kirkwood.dtsi
206 +++ b/arch/arm/boot/dts/kirkwood.dtsi
207 @@ -38,6 +38,7 @@
208 interrupt-controller;
209 #interrupt-cells = <2>;
210 interrupts = <35>, <36>, <37>, <38>;
211 + clocks = <&gate_clk 7>;
212 };
213
214 gpio1: gpio@10140 {
215 @@ -49,6 +50,7 @@
216 interrupt-controller;
217 #interrupt-cells = <2>;
218 interrupts = <39>, <40>, <41>;
219 + clocks = <&gate_clk 7>;
220 };
221
222 serial@12000 {
223 @@ -57,7 +59,6 @@
224 reg-shift = <2>;
225 interrupts = <33>;
226 clocks = <&gate_clk 7>;
227 - /* set clock-frequency in board dts */
228 status = "disabled";
229 };
230
231 @@ -67,7 +68,6 @@
232 reg-shift = <2>;
233 interrupts = <34>;
234 clocks = <&gate_clk 7>;
235 - /* set clock-frequency in board dts */
236 status = "disabled";
237 };
238
239 @@ -75,6 +75,7 @@
240 compatible = "marvell,kirkwood-rtc", "marvell,orion-rtc";
241 reg = <0x10300 0x20>;
242 interrupts = <53>;
243 + clocks = <&gate_clk 7>;
244 };
245
246 spi@10600 {
247 diff --git a/arch/arm/configs/mxs_defconfig b/arch/arm/configs/mxs_defconfig
248 index 7bf5351..a55b206 100644
249 --- a/arch/arm/configs/mxs_defconfig
250 +++ b/arch/arm/configs/mxs_defconfig
251 @@ -118,6 +118,7 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
252 CONFIG_FONTS=y
253 CONFIG_LOGO=y
254 CONFIG_USB=y
255 +CONFIG_USB_EHCI_HCD=y
256 CONFIG_USB_CHIPIDEA=y
257 CONFIG_USB_CHIPIDEA_HOST=y
258 CONFIG_USB_STORAGE=y
259 diff --git a/arch/arm/include/asm/delay.h b/arch/arm/include/asm/delay.h
260 index ab98fdd..720799f 100644
261 --- a/arch/arm/include/asm/delay.h
262 +++ b/arch/arm/include/asm/delay.h
263 @@ -24,6 +24,7 @@ extern struct arm_delay_ops {
264 void (*delay)(unsigned long);
265 void (*const_udelay)(unsigned long);
266 void (*udelay)(unsigned long);
267 + bool const_clock;
268 } arm_delay_ops;
269
270 #define __delay(n) arm_delay_ops.delay(n)
271 diff --git a/arch/arm/include/asm/mmu.h b/arch/arm/include/asm/mmu.h
272 index 9f77e78..e3d5554 100644
273 --- a/arch/arm/include/asm/mmu.h
274 +++ b/arch/arm/include/asm/mmu.h
275 @@ -5,15 +5,15 @@
276
277 typedef struct {
278 #ifdef CONFIG_CPU_HAS_ASID
279 - u64 id;
280 + atomic64_t id;
281 #endif
282 - unsigned int vmalloc_seq;
283 + unsigned int vmalloc_seq;
284 } mm_context_t;
285
286 #ifdef CONFIG_CPU_HAS_ASID
287 #define ASID_BITS 8
288 #define ASID_MASK ((~0ULL) << ASID_BITS)
289 -#define ASID(mm) ((mm)->context.id & ~ASID_MASK)
290 +#define ASID(mm) ((mm)->context.id.counter & ~ASID_MASK)
291 #else
292 #define ASID(mm) (0)
293 #endif
294 @@ -26,7 +26,7 @@ typedef struct {
295 * modified for 2.6 by Hyok S. Choi <hyok.choi@samsung.com>
296 */
297 typedef struct {
298 - unsigned long end_brk;
299 + unsigned long end_brk;
300 } mm_context_t;
301
302 #endif
303 diff --git a/arch/arm/include/asm/mmu_context.h b/arch/arm/include/asm/mmu_context.h
304 index e1f644b..863a661 100644
305 --- a/arch/arm/include/asm/mmu_context.h
306 +++ b/arch/arm/include/asm/mmu_context.h
307 @@ -25,7 +25,7 @@ void __check_vmalloc_seq(struct mm_struct *mm);
308 #ifdef CONFIG_CPU_HAS_ASID
309
310 void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk);
311 -#define init_new_context(tsk,mm) ({ mm->context.id = 0; })
312 +#define init_new_context(tsk,mm) ({ atomic64_set(&mm->context.id, 0); 0; })
313
314 #else /* !CONFIG_CPU_HAS_ASID */
315
316 diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
317 index 9c82f988..c094749 100644
318 --- a/arch/arm/include/asm/pgtable.h
319 +++ b/arch/arm/include/asm/pgtable.h
320 @@ -240,7 +240,8 @@ static inline pte_t pte_mkspecial(pte_t pte) { return pte; }
321
322 static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
323 {
324 - const pteval_t mask = L_PTE_XN | L_PTE_RDONLY | L_PTE_USER | L_PTE_NONE;
325 + const pteval_t mask = L_PTE_XN | L_PTE_RDONLY | L_PTE_USER |
326 + L_PTE_NONE | L_PTE_VALID;
327 pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
328 return pte;
329 }
330 diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c
331 index c985b48..cf10d18 100644
332 --- a/arch/arm/kernel/asm-offsets.c
333 +++ b/arch/arm/kernel/asm-offsets.c
334 @@ -107,7 +107,7 @@ int main(void)
335 BLANK();
336 #endif
337 #ifdef CONFIG_CPU_HAS_ASID
338 - DEFINE(MM_CONTEXT_ID, offsetof(struct mm_struct, context.id));
339 + DEFINE(MM_CONTEXT_ID, offsetof(struct mm_struct, context.id.counter));
340 BLANK();
341 #endif
342 DEFINE(VMA_VM_MM, offsetof(struct vm_area_struct, vm_mm));
343 diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
344 index 486a15a..e0eb9a1 100644
345 --- a/arch/arm/kernel/head.S
346 +++ b/arch/arm/kernel/head.S
347 @@ -184,13 +184,22 @@ __create_page_tables:
348 orr r3, r3, #3 @ PGD block type
349 mov r6, #4 @ PTRS_PER_PGD
350 mov r7, #1 << (55 - 32) @ L_PGD_SWAPPER
351 -1: str r3, [r0], #4 @ set bottom PGD entry bits
352 +1:
353 +#ifdef CONFIG_CPU_ENDIAN_BE8
354 str r7, [r0], #4 @ set top PGD entry bits
355 + str r3, [r0], #4 @ set bottom PGD entry bits
356 +#else
357 + str r3, [r0], #4 @ set bottom PGD entry bits
358 + str r7, [r0], #4 @ set top PGD entry bits
359 +#endif
360 add r3, r3, #0x1000 @ next PMD table
361 subs r6, r6, #1
362 bne 1b
363
364 add r4, r4, #0x1000 @ point to the PMD tables
365 +#ifdef CONFIG_CPU_ENDIAN_BE8
366 + add r4, r4, #4 @ we only write the bottom word
367 +#endif
368 #endif
369
370 ldr r7, [r10, #PROCINFO_MM_MMUFLAGS] @ mm_mmuflags
371 @@ -258,6 +267,11 @@ __create_page_tables:
372 addne r6, r6, #1 << SECTION_SHIFT
373 strne r6, [r3]
374
375 +#if defined(CONFIG_LPAE) && defined(CONFIG_CPU_ENDIAN_BE8)
376 + sub r4, r4, #4 @ Fixup page table pointer
377 + @ for 64-bit descriptors
378 +#endif
379 +
380 #ifdef CONFIG_DEBUG_LL
381 #if !defined(CONFIG_DEBUG_ICEDCC) && !defined(CONFIG_DEBUG_SEMIHOSTING)
382 /*
383 @@ -276,13 +290,17 @@ __create_page_tables:
384 orr r3, r7, r3, lsl #SECTION_SHIFT
385 #ifdef CONFIG_ARM_LPAE
386 mov r7, #1 << (54 - 32) @ XN
387 +#ifdef CONFIG_CPU_ENDIAN_BE8
388 + str r7, [r0], #4
389 + str r3, [r0], #4
390 #else
391 - orr r3, r3, #PMD_SECT_XN
392 -#endif
393 str r3, [r0], #4
394 -#ifdef CONFIG_ARM_LPAE
395 str r7, [r0], #4
396 #endif
397 +#else
398 + orr r3, r3, #PMD_SECT_XN
399 + str r3, [r0], #4
400 +#endif
401
402 #else /* CONFIG_DEBUG_ICEDCC || CONFIG_DEBUG_SEMIHOSTING */
403 /* we don't need any serial debugging mappings */
404 diff --git a/arch/arm/kernel/perf_event_v7.c b/arch/arm/kernel/perf_event_v7.c
405 index 4fbc757..89ede24 100644
406 --- a/arch/arm/kernel/perf_event_v7.c
407 +++ b/arch/arm/kernel/perf_event_v7.c
408 @@ -774,7 +774,7 @@ static const unsigned armv7_a7_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]
409 /*
410 * PMXEVTYPER: Event selection reg
411 */
412 -#define ARMV7_EVTYPE_MASK 0xc00000ff /* Mask for writable bits */
413 +#define ARMV7_EVTYPE_MASK 0xc80000ff /* Mask for writable bits */
414 #define ARMV7_EVTYPE_EVENT 0xff /* Mask for EVENT bits */
415
416 /*
417 diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
418 index 84f4cbf..58af91c 100644
419 --- a/arch/arm/kernel/smp.c
420 +++ b/arch/arm/kernel/smp.c
421 @@ -693,6 +693,9 @@ static int cpufreq_callback(struct notifier_block *nb,
422 if (freq->flags & CPUFREQ_CONST_LOOPS)
423 return NOTIFY_OK;
424
425 + if (arm_delay_ops.const_clock)
426 + return NOTIFY_OK;
427 +
428 if (!per_cpu(l_p_j_ref, cpu)) {
429 per_cpu(l_p_j_ref, cpu) =
430 per_cpu(cpu_data, cpu).loops_per_jiffy;
431 diff --git a/arch/arm/lib/delay.c b/arch/arm/lib/delay.c
432 index 0dc5385..6b93f6a 100644
433 --- a/arch/arm/lib/delay.c
434 +++ b/arch/arm/lib/delay.c
435 @@ -77,6 +77,7 @@ void __init register_current_timer_delay(const struct delay_timer *timer)
436 arm_delay_ops.delay = __timer_delay;
437 arm_delay_ops.const_udelay = __timer_const_udelay;
438 arm_delay_ops.udelay = __timer_udelay;
439 + arm_delay_ops.const_clock = true;
440 delay_calibrated = true;
441 } else {
442 pr_info("Ignoring duplicate/late registration of read_current_timer delay\n");
443 diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c
444 index b820eda..db26e2e 100644
445 --- a/arch/arm/mm/alignment.c
446 +++ b/arch/arm/mm/alignment.c
447 @@ -749,7 +749,6 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
448 unsigned long instr = 0, instrptr;
449 int (*handler)(unsigned long addr, unsigned long instr, struct pt_regs *regs);
450 unsigned int type;
451 - mm_segment_t fs;
452 unsigned int fault;
453 u16 tinstr = 0;
454 int isize = 4;
455 @@ -760,16 +759,15 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
456
457 instrptr = instruction_pointer(regs);
458
459 - fs = get_fs();
460 - set_fs(KERNEL_DS);
461 if (thumb_mode(regs)) {
462 - fault = __get_user(tinstr, (u16 *)(instrptr & ~1));
463 + u16 *ptr = (u16 *)(instrptr & ~1);
464 + fault = probe_kernel_address(ptr, tinstr);
465 if (!fault) {
466 if (cpu_architecture() >= CPU_ARCH_ARMv7 &&
467 IS_T32(tinstr)) {
468 /* Thumb-2 32-bit */
469 u16 tinst2 = 0;
470 - fault = __get_user(tinst2, (u16 *)(instrptr+2));
471 + fault = probe_kernel_address(ptr + 1, tinst2);
472 instr = (tinstr << 16) | tinst2;
473 thumb2_32b = 1;
474 } else {
475 @@ -778,8 +776,7 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
476 }
477 }
478 } else
479 - fault = __get_user(instr, (u32 *)instrptr);
480 - set_fs(fs);
481 + fault = probe_kernel_address(instrptr, instr);
482
483 if (fault) {
484 type = TYPE_FAULT;
485 diff --git a/arch/arm/mm/context.c b/arch/arm/mm/context.c
486 index bc4a5e9..d07df17 100644
487 --- a/arch/arm/mm/context.c
488 +++ b/arch/arm/mm/context.c
489 @@ -149,9 +149,9 @@ static int is_reserved_asid(u64 asid)
490 return 0;
491 }
492
493 -static void new_context(struct mm_struct *mm, unsigned int cpu)
494 +static u64 new_context(struct mm_struct *mm, unsigned int cpu)
495 {
496 - u64 asid = mm->context.id;
497 + u64 asid = atomic64_read(&mm->context.id);
498 u64 generation = atomic64_read(&asid_generation);
499
500 if (asid != 0 && is_reserved_asid(asid)) {
501 @@ -178,13 +178,14 @@ static void new_context(struct mm_struct *mm, unsigned int cpu)
502 cpumask_clear(mm_cpumask(mm));
503 }
504
505 - mm->context.id = asid;
506 + return asid;
507 }
508
509 void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk)
510 {
511 unsigned long flags;
512 unsigned int cpu = smp_processor_id();
513 + u64 asid;
514
515 if (unlikely(mm->context.vmalloc_seq != init_mm.context.vmalloc_seq))
516 __check_vmalloc_seq(mm);
517 @@ -195,20 +196,24 @@ void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk)
518 */
519 cpu_set_reserved_ttbr0();
520
521 - if (!((mm->context.id ^ atomic64_read(&asid_generation)) >> ASID_BITS)
522 - && atomic64_xchg(&per_cpu(active_asids, cpu), mm->context.id))
523 + asid = atomic64_read(&mm->context.id);
524 + if (!((asid ^ atomic64_read(&asid_generation)) >> ASID_BITS)
525 + && atomic64_xchg(&per_cpu(active_asids, cpu), asid))
526 goto switch_mm_fastpath;
527
528 raw_spin_lock_irqsave(&cpu_asid_lock, flags);
529 /* Check that our ASID belongs to the current generation. */
530 - if ((mm->context.id ^ atomic64_read(&asid_generation)) >> ASID_BITS)
531 - new_context(mm, cpu);
532 -
533 - atomic64_set(&per_cpu(active_asids, cpu), mm->context.id);
534 - cpumask_set_cpu(cpu, mm_cpumask(mm));
535 + asid = atomic64_read(&mm->context.id);
536 + if ((asid ^ atomic64_read(&asid_generation)) >> ASID_BITS) {
537 + asid = new_context(mm, cpu);
538 + atomic64_set(&mm->context.id, asid);
539 + }
540
541 if (cpumask_test_and_clear_cpu(cpu, &tlb_flush_pending))
542 local_flush_tlb_all();
543 +
544 + atomic64_set(&per_cpu(active_asids, cpu), asid);
545 + cpumask_set_cpu(cpu, mm_cpumask(mm));
546 raw_spin_unlock_irqrestore(&cpu_asid_lock, flags);
547
548 switch_mm_fastpath:
549 diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c
550 index 3b44e0d..5dfbb0b 100644
551 --- a/arch/arm/vfp/vfpmodule.c
552 +++ b/arch/arm/vfp/vfpmodule.c
553 @@ -413,7 +413,7 @@ void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs)
554 * If there isn't a second FP instruction, exit now. Note that
555 * the FPEXC.FP2V bit is valid only if FPEXC.EX is 1.
556 */
557 - if (fpexc ^ (FPEXC_EX | FPEXC_FP2V))
558 + if ((fpexc & (FPEXC_EX | FPEXC_FP2V)) != (FPEXC_EX | FPEXC_FP2V))
559 goto exit;
560
561 /*
562 diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
563 index 6da881b..8d97eb4 100644
564 --- a/arch/powerpc/kernel/setup_64.c
565 +++ b/arch/powerpc/kernel/setup_64.c
566 @@ -156,6 +156,15 @@ early_param("smt-enabled", early_smt_enabled);
567 #define check_smt_enabled()
568 #endif /* CONFIG_SMP */
569
570 +/** Fix up paca fields required for the boot cpu */
571 +static void fixup_boot_paca(void)
572 +{
573 + /* The boot cpu is started */
574 + get_paca()->cpu_start = 1;
575 + /* Allow percpu accesses to work until we setup percpu data */
576 + get_paca()->data_offset = 0;
577 +}
578 +
579 /*
580 * Early initialization entry point. This is called by head.S
581 * with MMU translation disabled. We rely on the "feature" of
582 @@ -185,6 +194,7 @@ void __init early_setup(unsigned long dt_ptr)
583 /* Assume we're on cpu 0 for now. Don't write to the paca yet! */
584 initialise_paca(&boot_paca, 0);
585 setup_paca(&boot_paca);
586 + fixup_boot_paca();
587
588 /* Initialize lockdep early or else spinlocks will blow */
589 lockdep_init();
590 @@ -205,11 +215,7 @@ void __init early_setup(unsigned long dt_ptr)
591
592 /* Now we know the logical id of our boot cpu, setup the paca. */
593 setup_paca(&paca[boot_cpuid]);
594 -
595 - /* Fix up paca fields required for the boot cpu */
596 - get_paca()->cpu_start = 1;
597 - /* Allow percpu accesses to "work" until we setup percpu data */
598 - get_paca()->data_offset = 0;
599 + fixup_boot_paca();
600
601 /* Probe the machine type */
602 probe_machine();
603 diff --git a/arch/tile/include/asm/compat.h b/arch/tile/include/asm/compat.h
604 index 88f3c22..59e3574 100644
605 --- a/arch/tile/include/asm/compat.h
606 +++ b/arch/tile/include/asm/compat.h
607 @@ -296,6 +296,9 @@ long compat_sys_sync_file_range2(int fd, unsigned int flags,
608 long compat_sys_fallocate(int fd, int mode,
609 u32 offset_lo, u32 offset_hi,
610 u32 len_lo, u32 len_hi);
611 +long compat_sys_llseek(unsigned int fd, unsigned int offset_high,
612 + unsigned int offset_low, loff_t __user * result,
613 + unsigned int origin);
614
615 /* Assembly trampoline to avoid clobbering r0. */
616 long _compat_sys_rt_sigreturn(void);
617 diff --git a/arch/tile/kernel/compat.c b/arch/tile/kernel/compat.c
618 index 7f72401..d8e3b7e 100644
619 --- a/arch/tile/kernel/compat.c
620 +++ b/arch/tile/kernel/compat.c
621 @@ -76,6 +76,18 @@ long compat_sys_fallocate(int fd, int mode,
622 ((loff_t)len_hi << 32) | len_lo);
623 }
624
625 +/*
626 + * Avoid bug in generic sys_llseek() that specifies offset_high and
627 + * offset_low as "unsigned long", thus making it possible to pass
628 + * a sign-extended high 32 bits in offset_low.
629 + */
630 +long compat_sys_llseek(unsigned int fd, unsigned int offset_high,
631 + unsigned int offset_low, loff_t __user * result,
632 + unsigned int origin)
633 +{
634 + return sys_llseek(fd, offset_high, offset_low, result, origin);
635 +}
636 +
637 /* Provide the compat syscall number to call mapping. */
638 #undef __SYSCALL
639 #define __SYSCALL(nr, call) [nr] = (call),
640 @@ -83,6 +95,7 @@ long compat_sys_fallocate(int fd, int mode,
641 /* See comments in sys.c */
642 #define compat_sys_fadvise64_64 sys32_fadvise64_64
643 #define compat_sys_readahead sys32_readahead
644 +#define sys_llseek compat_sys_llseek
645
646 /* Call the assembly trampolines where necessary. */
647 #define compat_sys_rt_sigreturn _compat_sys_rt_sigreturn
648 diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
649 index 220a360..5bedbdd 100644
650 --- a/arch/x86/kernel/kvmclock.c
651 +++ b/arch/x86/kernel/kvmclock.c
652 @@ -218,6 +218,9 @@ static void kvm_shutdown(void)
653 void __init kvmclock_init(void)
654 {
655 unsigned long mem;
656 + int size;
657 +
658 + size = PAGE_ALIGN(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS);
659
660 if (!kvm_para_available())
661 return;
662 @@ -231,16 +234,14 @@ void __init kvmclock_init(void)
663 printk(KERN_INFO "kvm-clock: Using msrs %x and %x",
664 msr_kvm_system_time, msr_kvm_wall_clock);
665
666 - mem = memblock_alloc(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS,
667 - PAGE_SIZE);
668 + mem = memblock_alloc(size, PAGE_SIZE);
669 if (!mem)
670 return;
671 hv_clock = __va(mem);
672
673 if (kvm_register_clock("boot clock")) {
674 hv_clock = NULL;
675 - memblock_free(mem,
676 - sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS);
677 + memblock_free(mem, size);
678 return;
679 }
680 pv_time_ops.sched_clock = kvm_clock_read;
681 @@ -275,7 +276,7 @@ int __init kvm_setup_vsyscall_timeinfo(void)
682 struct pvclock_vcpu_time_info *vcpu_time;
683 unsigned int size;
684
685 - size = sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS;
686 + size = PAGE_ALIGN(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS);
687
688 preempt_disable();
689 cpu = smp_processor_id();
690 diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c
691 index 85c3959..2cb9470 100644
692 --- a/arch/x86/kernel/pvclock.c
693 +++ b/arch/x86/kernel/pvclock.c
694 @@ -185,7 +185,7 @@ int __init pvclock_init_vsyscall(struct pvclock_vsyscall_time_info *i,
695
696 for (idx = 0; idx <= (PVCLOCK_FIXMAP_END-PVCLOCK_FIXMAP_BEGIN); idx++) {
697 __set_fixmap(PVCLOCK_FIXMAP_BEGIN + idx,
698 - __pa_symbol(i) + (idx*PAGE_SIZE),
699 + __pa(i) + (idx*PAGE_SIZE),
700 PAGE_KERNEL_VVAR);
701 }
702
703 diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c
704 index 56ab749..94e7662 100644
705 --- a/arch/x86/pci/xen.c
706 +++ b/arch/x86/pci/xen.c
707 @@ -162,6 +162,9 @@ static int xen_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
708 struct msi_desc *msidesc;
709 int *v;
710
711 + if (type == PCI_CAP_ID_MSI && nvec > 1)
712 + return 1;
713 +
714 v = kzalloc(sizeof(int) * max(1, nvec), GFP_KERNEL);
715 if (!v)
716 return -ENOMEM;
717 @@ -220,6 +223,9 @@ static int xen_hvm_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
718 struct msi_desc *msidesc;
719 struct msi_msg msg;
720
721 + if (type == PCI_CAP_ID_MSI && nvec > 1)
722 + return 1;
723 +
724 list_for_each_entry(msidesc, &dev->msi_list, list) {
725 __read_msi_msg(msidesc, &msg);
726 pirq = MSI_ADDR_EXT_DEST_ID(msg.address_hi) |
727 @@ -263,6 +269,9 @@ static int xen_initdom_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
728 int ret = 0;
729 struct msi_desc *msidesc;
730
731 + if (type == PCI_CAP_ID_MSI && nvec > 1)
732 + return 1;
733 +
734 list_for_each_entry(msidesc, &dev->msi_list, list) {
735 struct physdev_map_pirq map_irq;
736 domid_t domid;
737 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
738 index e014092..2262003 100644
739 --- a/arch/x86/xen/enlighten.c
740 +++ b/arch/x86/xen/enlighten.c
741 @@ -67,6 +67,7 @@
742 #include <asm/hypervisor.h>
743 #include <asm/mwait.h>
744 #include <asm/pci_x86.h>
745 +#include <asm/pat.h>
746
747 #ifdef CONFIG_ACPI
748 #include <linux/acpi.h>
749 @@ -1417,7 +1418,14 @@ asmlinkage void __init xen_start_kernel(void)
750 */
751 acpi_numa = -1;
752 #endif
753 -
754 +#ifdef CONFIG_X86_PAT
755 + /*
756 + * For right now disable the PAT. We should remove this once
757 + * git commit 8eaffa67b43e99ae581622c5133e20b0f48bcef1
758 + * (xen/pat: Disable PAT support for now) is reverted.
759 + */
760 + pat_enabled = 0;
761 +#endif
762 /* Don't do the full vcpu_info placement stuff until we have a
763 possible map and a non-dummy shared_info. */
764 per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0];
765 diff --git a/crypto/ablkcipher.c b/crypto/ablkcipher.c
766 index 533de95..7d4a8d2 100644
767 --- a/crypto/ablkcipher.c
768 +++ b/crypto/ablkcipher.c
769 @@ -388,9 +388,9 @@ static int crypto_ablkcipher_report(struct sk_buff *skb, struct crypto_alg *alg)
770 {
771 struct crypto_report_blkcipher rblkcipher;
772
773 - snprintf(rblkcipher.type, CRYPTO_MAX_ALG_NAME, "%s", "ablkcipher");
774 - snprintf(rblkcipher.geniv, CRYPTO_MAX_ALG_NAME, "%s",
775 - alg->cra_ablkcipher.geniv ?: "<default>");
776 + strncpy(rblkcipher.type, "ablkcipher", sizeof(rblkcipher.type));
777 + strncpy(rblkcipher.geniv, alg->cra_ablkcipher.geniv ?: "<default>",
778 + sizeof(rblkcipher.geniv));
779
780 rblkcipher.blocksize = alg->cra_blocksize;
781 rblkcipher.min_keysize = alg->cra_ablkcipher.min_keysize;
782 @@ -469,9 +469,9 @@ static int crypto_givcipher_report(struct sk_buff *skb, struct crypto_alg *alg)
783 {
784 struct crypto_report_blkcipher rblkcipher;
785
786 - snprintf(rblkcipher.type, CRYPTO_MAX_ALG_NAME, "%s", "givcipher");
787 - snprintf(rblkcipher.geniv, CRYPTO_MAX_ALG_NAME, "%s",
788 - alg->cra_ablkcipher.geniv ?: "<built-in>");
789 + strncpy(rblkcipher.type, "givcipher", sizeof(rblkcipher.type));
790 + strncpy(rblkcipher.geniv, alg->cra_ablkcipher.geniv ?: "<built-in>",
791 + sizeof(rblkcipher.geniv));
792
793 rblkcipher.blocksize = alg->cra_blocksize;
794 rblkcipher.min_keysize = alg->cra_ablkcipher.min_keysize;
795 diff --git a/crypto/aead.c b/crypto/aead.c
796 index 0b8121e..27bc487 100644
797 --- a/crypto/aead.c
798 +++ b/crypto/aead.c
799 @@ -117,9 +117,8 @@ static int crypto_aead_report(struct sk_buff *skb, struct crypto_alg *alg)
800 struct crypto_report_aead raead;
801 struct aead_alg *aead = &alg->cra_aead;
802
803 - snprintf(raead.type, CRYPTO_MAX_ALG_NAME, "%s", "aead");
804 - snprintf(raead.geniv, CRYPTO_MAX_ALG_NAME, "%s",
805 - aead->geniv ?: "<built-in>");
806 + strncpy(raead.type, "aead", sizeof(raead.type));
807 + strncpy(raead.geniv, aead->geniv ?: "<built-in>", sizeof(raead.geniv));
808
809 raead.blocksize = alg->cra_blocksize;
810 raead.maxauthsize = aead->maxauthsize;
811 @@ -203,8 +202,8 @@ static int crypto_nivaead_report(struct sk_buff *skb, struct crypto_alg *alg)
812 struct crypto_report_aead raead;
813 struct aead_alg *aead = &alg->cra_aead;
814
815 - snprintf(raead.type, CRYPTO_MAX_ALG_NAME, "%s", "nivaead");
816 - snprintf(raead.geniv, CRYPTO_MAX_ALG_NAME, "%s", aead->geniv);
817 + strncpy(raead.type, "nivaead", sizeof(raead.type));
818 + strncpy(raead.geniv, aead->geniv, sizeof(raead.geniv));
819
820 raead.blocksize = alg->cra_blocksize;
821 raead.maxauthsize = aead->maxauthsize;
822 diff --git a/crypto/ahash.c b/crypto/ahash.c
823 index 3887856..793a27f 100644
824 --- a/crypto/ahash.c
825 +++ b/crypto/ahash.c
826 @@ -404,7 +404,7 @@ static int crypto_ahash_report(struct sk_buff *skb, struct crypto_alg *alg)
827 {
828 struct crypto_report_hash rhash;
829
830 - snprintf(rhash.type, CRYPTO_MAX_ALG_NAME, "%s", "ahash");
831 + strncpy(rhash.type, "ahash", sizeof(rhash.type));
832
833 rhash.blocksize = alg->cra_blocksize;
834 rhash.digestsize = __crypto_hash_alg_common(alg)->digestsize;
835 diff --git a/crypto/blkcipher.c b/crypto/blkcipher.c
836 index a8d85a1..c44e014 100644
837 --- a/crypto/blkcipher.c
838 +++ b/crypto/blkcipher.c
839 @@ -499,9 +499,9 @@ static int crypto_blkcipher_report(struct sk_buff *skb, struct crypto_alg *alg)
840 {
841 struct crypto_report_blkcipher rblkcipher;
842
843 - snprintf(rblkcipher.type, CRYPTO_MAX_ALG_NAME, "%s", "blkcipher");
844 - snprintf(rblkcipher.geniv, CRYPTO_MAX_ALG_NAME, "%s",
845 - alg->cra_blkcipher.geniv ?: "<default>");
846 + strncpy(rblkcipher.type, "blkcipher", sizeof(rblkcipher.type));
847 + strncpy(rblkcipher.geniv, alg->cra_blkcipher.geniv ?: "<default>",
848 + sizeof(rblkcipher.geniv));
849
850 rblkcipher.blocksize = alg->cra_blocksize;
851 rblkcipher.min_keysize = alg->cra_blkcipher.min_keysize;
852 diff --git a/crypto/crypto_user.c b/crypto/crypto_user.c
853 index 35d700a..f6d9baf 100644
854 --- a/crypto/crypto_user.c
855 +++ b/crypto/crypto_user.c
856 @@ -75,7 +75,7 @@ static int crypto_report_cipher(struct sk_buff *skb, struct crypto_alg *alg)
857 {
858 struct crypto_report_cipher rcipher;
859
860 - snprintf(rcipher.type, CRYPTO_MAX_ALG_NAME, "%s", "cipher");
861 + strncpy(rcipher.type, "cipher", sizeof(rcipher.type));
862
863 rcipher.blocksize = alg->cra_blocksize;
864 rcipher.min_keysize = alg->cra_cipher.cia_min_keysize;
865 @@ -94,8 +94,7 @@ static int crypto_report_comp(struct sk_buff *skb, struct crypto_alg *alg)
866 {
867 struct crypto_report_comp rcomp;
868
869 - snprintf(rcomp.type, CRYPTO_MAX_ALG_NAME, "%s", "compression");
870 -
871 + strncpy(rcomp.type, "compression", sizeof(rcomp.type));
872 if (nla_put(skb, CRYPTOCFGA_REPORT_COMPRESS,
873 sizeof(struct crypto_report_comp), &rcomp))
874 goto nla_put_failure;
875 @@ -108,12 +107,14 @@ nla_put_failure:
876 static int crypto_report_one(struct crypto_alg *alg,
877 struct crypto_user_alg *ualg, struct sk_buff *skb)
878 {
879 - memcpy(&ualg->cru_name, &alg->cra_name, sizeof(ualg->cru_name));
880 - memcpy(&ualg->cru_driver_name, &alg->cra_driver_name,
881 - sizeof(ualg->cru_driver_name));
882 - memcpy(&ualg->cru_module_name, module_name(alg->cra_module),
883 - CRYPTO_MAX_ALG_NAME);
884 -
885 + strncpy(ualg->cru_name, alg->cra_name, sizeof(ualg->cru_name));
886 + strncpy(ualg->cru_driver_name, alg->cra_driver_name,
887 + sizeof(ualg->cru_driver_name));
888 + strncpy(ualg->cru_module_name, module_name(alg->cra_module),
889 + sizeof(ualg->cru_module_name));
890 +
891 + ualg->cru_type = 0;
892 + ualg->cru_mask = 0;
893 ualg->cru_flags = alg->cra_flags;
894 ualg->cru_refcnt = atomic_read(&alg->cra_refcnt);
895
896 @@ -122,8 +123,7 @@ static int crypto_report_one(struct crypto_alg *alg,
897 if (alg->cra_flags & CRYPTO_ALG_LARVAL) {
898 struct crypto_report_larval rl;
899
900 - snprintf(rl.type, CRYPTO_MAX_ALG_NAME, "%s", "larval");
901 -
902 + strncpy(rl.type, "larval", sizeof(rl.type));
903 if (nla_put(skb, CRYPTOCFGA_REPORT_LARVAL,
904 sizeof(struct crypto_report_larval), &rl))
905 goto nla_put_failure;
906 diff --git a/crypto/pcompress.c b/crypto/pcompress.c
907 index 04e083f..7140fe7 100644
908 --- a/crypto/pcompress.c
909 +++ b/crypto/pcompress.c
910 @@ -53,8 +53,7 @@ static int crypto_pcomp_report(struct sk_buff *skb, struct crypto_alg *alg)
911 {
912 struct crypto_report_comp rpcomp;
913
914 - snprintf(rpcomp.type, CRYPTO_MAX_ALG_NAME, "%s", "pcomp");
915 -
916 + strncpy(rpcomp.type, "pcomp", sizeof(rpcomp.type));
917 if (nla_put(skb, CRYPTOCFGA_REPORT_COMPRESS,
918 sizeof(struct crypto_report_comp), &rpcomp))
919 goto nla_put_failure;
920 diff --git a/crypto/rng.c b/crypto/rng.c
921 index f3b7894..e0a25c2 100644
922 --- a/crypto/rng.c
923 +++ b/crypto/rng.c
924 @@ -65,7 +65,7 @@ static int crypto_rng_report(struct sk_buff *skb, struct crypto_alg *alg)
925 {
926 struct crypto_report_rng rrng;
927
928 - snprintf(rrng.type, CRYPTO_MAX_ALG_NAME, "%s", "rng");
929 + strncpy(rrng.type, "rng", sizeof(rrng.type));
930
931 rrng.seedsize = alg->cra_rng.seedsize;
932
933 diff --git a/crypto/shash.c b/crypto/shash.c
934 index f426330f..929058a 100644
935 --- a/crypto/shash.c
936 +++ b/crypto/shash.c
937 @@ -530,7 +530,8 @@ static int crypto_shash_report(struct sk_buff *skb, struct crypto_alg *alg)
938 struct crypto_report_hash rhash;
939 struct shash_alg *salg = __crypto_shash_alg(alg);
940
941 - snprintf(rhash.type, CRYPTO_MAX_ALG_NAME, "%s", "shash");
942 + strncpy(rhash.type, "shash", sizeof(rhash.type));
943 +
944 rhash.blocksize = alg->cra_blocksize;
945 rhash.digestsize = salg->digestsize;
946
947 diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
948 index de1f319..e34a7b4 100644
949 --- a/drivers/block/xen-blkback/blkback.c
950 +++ b/drivers/block/xen-blkback/blkback.c
951 @@ -881,6 +881,7 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif,
952 goto fail_response;
953 }
954
955 + preq.dev = req->u.rw.handle;
956 preq.sector_number = req->u.rw.sector_number;
957 preq.nr_sects = 0;
958
959 diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
960 index 1bafb40..69ae597 100644
961 --- a/drivers/char/hw_random/core.c
962 +++ b/drivers/char/hw_random/core.c
963 @@ -40,6 +40,7 @@
964 #include <linux/init.h>
965 #include <linux/miscdevice.h>
966 #include <linux/delay.h>
967 +#include <linux/slab.h>
968 #include <asm/uaccess.h>
969
970
971 @@ -52,8 +53,12 @@ static struct hwrng *current_rng;
972 static LIST_HEAD(rng_list);
973 static DEFINE_MUTEX(rng_mutex);
974 static int data_avail;
975 -static u8 rng_buffer[SMP_CACHE_BYTES < 32 ? 32 : SMP_CACHE_BYTES]
976 - __cacheline_aligned;
977 +static u8 *rng_buffer;
978 +
979 +static size_t rng_buffer_size(void)
980 +{
981 + return SMP_CACHE_BYTES < 32 ? 32 : SMP_CACHE_BYTES;
982 +}
983
984 static inline int hwrng_init(struct hwrng *rng)
985 {
986 @@ -116,7 +121,7 @@ static ssize_t rng_dev_read(struct file *filp, char __user *buf,
987
988 if (!data_avail) {
989 bytes_read = rng_get_data(current_rng, rng_buffer,
990 - sizeof(rng_buffer),
991 + rng_buffer_size(),
992 !(filp->f_flags & O_NONBLOCK));
993 if (bytes_read < 0) {
994 err = bytes_read;
995 @@ -307,6 +312,14 @@ int hwrng_register(struct hwrng *rng)
996
997 mutex_lock(&rng_mutex);
998
999 + /* kmalloc makes this safe for virt_to_page() in virtio_rng.c */
1000 + err = -ENOMEM;
1001 + if (!rng_buffer) {
1002 + rng_buffer = kmalloc(rng_buffer_size(), GFP_KERNEL);
1003 + if (!rng_buffer)
1004 + goto out_unlock;
1005 + }
1006 +
1007 /* Must not register two RNGs with the same name. */
1008 err = -EEXIST;
1009 list_for_each_entry(tmp, &rng_list, list) {
1010 diff --git a/drivers/char/random.c b/drivers/char/random.c
1011 index 85e81ec..57d4b15 100644
1012 --- a/drivers/char/random.c
1013 +++ b/drivers/char/random.c
1014 @@ -852,6 +852,7 @@ static size_t account(struct entropy_store *r, size_t nbytes, int min,
1015 int reserved)
1016 {
1017 unsigned long flags;
1018 + int wakeup_write = 0;
1019
1020 /* Hold lock while accounting */
1021 spin_lock_irqsave(&r->lock, flags);
1022 @@ -873,10 +874,8 @@ static size_t account(struct entropy_store *r, size_t nbytes, int min,
1023 else
1024 r->entropy_count = reserved;
1025
1026 - if (r->entropy_count < random_write_wakeup_thresh) {
1027 - wake_up_interruptible(&random_write_wait);
1028 - kill_fasync(&fasync, SIGIO, POLL_OUT);
1029 - }
1030 + if (r->entropy_count < random_write_wakeup_thresh)
1031 + wakeup_write = 1;
1032 }
1033
1034 DEBUG_ENT("debiting %zu entropy credits from %s%s\n",
1035 @@ -884,6 +883,11 @@ static size_t account(struct entropy_store *r, size_t nbytes, int min,
1036
1037 spin_unlock_irqrestore(&r->lock, flags);
1038
1039 + if (wakeup_write) {
1040 + wake_up_interruptible(&random_write_wait);
1041 + kill_fasync(&fasync, SIGIO, POLL_OUT);
1042 + }
1043 +
1044 return nbytes;
1045 }
1046
1047 diff --git a/drivers/connector/cn_proc.c b/drivers/connector/cn_proc.c
1048 index fce2000..1110478 100644
1049 --- a/drivers/connector/cn_proc.c
1050 +++ b/drivers/connector/cn_proc.c
1051 @@ -313,6 +313,12 @@ static void cn_proc_mcast_ctl(struct cn_msg *msg,
1052 (task_active_pid_ns(current) != &init_pid_ns))
1053 return;
1054
1055 + /* Can only change if privileged. */
1056 + if (!capable(CAP_NET_ADMIN)) {
1057 + err = EPERM;
1058 + goto out;
1059 + }
1060 +
1061 mc_op = (enum proc_cn_mcast_op *)msg->data;
1062 switch (*mc_op) {
1063 case PROC_CN_MCAST_LISTEN:
1064 @@ -325,6 +331,8 @@ static void cn_proc_mcast_ctl(struct cn_msg *msg,
1065 err = EINVAL;
1066 break;
1067 }
1068 +
1069 +out:
1070 cn_proc_ack(err, msg->seq, msg->ack);
1071 }
1072
1073 diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
1074 index 982f1f5..4cd392d 100644
1075 --- a/drivers/firmware/dmi_scan.c
1076 +++ b/drivers/firmware/dmi_scan.c
1077 @@ -442,7 +442,6 @@ static int __init dmi_present(const char __iomem *p)
1078 static int __init smbios_present(const char __iomem *p)
1079 {
1080 u8 buf[32];
1081 - int offset = 0;
1082
1083 memcpy_fromio(buf, p, 32);
1084 if ((buf[5] < 32) && dmi_checksum(buf, buf[5])) {
1085 @@ -461,9 +460,9 @@ static int __init smbios_present(const char __iomem *p)
1086 dmi_ver = 0x0206;
1087 break;
1088 }
1089 - offset = 16;
1090 + return memcmp(p + 16, "_DMI_", 5) || dmi_present(p + 16);
1091 }
1092 - return dmi_present(buf + offset);
1093 + return 1;
1094 }
1095
1096 void __init dmi_scan_machine(void)
1097 diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
1098 index bcb201c..2a2e145 100644
1099 --- a/drivers/firmware/efivars.c
1100 +++ b/drivers/firmware/efivars.c
1101 @@ -406,10 +406,11 @@ static efi_status_t
1102 get_var_data(struct efivars *efivars, struct efi_variable *var)
1103 {
1104 efi_status_t status;
1105 + unsigned long flags;
1106
1107 - spin_lock(&efivars->lock);
1108 + spin_lock_irqsave(&efivars->lock, flags);
1109 status = get_var_data_locked(efivars, var);
1110 - spin_unlock(&efivars->lock);
1111 + spin_unlock_irqrestore(&efivars->lock, flags);
1112
1113 if (status != EFI_SUCCESS) {
1114 printk(KERN_WARNING "efivars: get_variable() failed 0x%lx!\n",
1115 @@ -418,6 +419,44 @@ get_var_data(struct efivars *efivars, struct efi_variable *var)
1116 return status;
1117 }
1118
1119 +static efi_status_t
1120 +check_var_size_locked(struct efivars *efivars, u32 attributes,
1121 + unsigned long size)
1122 +{
1123 + u64 storage_size, remaining_size, max_size;
1124 + efi_status_t status;
1125 + const struct efivar_operations *fops = efivars->ops;
1126 +
1127 + if (!efivars->ops->query_variable_info)
1128 + return EFI_UNSUPPORTED;
1129 +
1130 + status = fops->query_variable_info(attributes, &storage_size,
1131 + &remaining_size, &max_size);
1132 +
1133 + if (status != EFI_SUCCESS)
1134 + return status;
1135 +
1136 + if (!storage_size || size > remaining_size || size > max_size ||
1137 + (remaining_size - size) < (storage_size / 2))
1138 + return EFI_OUT_OF_RESOURCES;
1139 +
1140 + return status;
1141 +}
1142 +
1143 +
1144 +static efi_status_t
1145 +check_var_size(struct efivars *efivars, u32 attributes, unsigned long size)
1146 +{
1147 + efi_status_t status;
1148 + unsigned long flags;
1149 +
1150 + spin_lock_irqsave(&efivars->lock, flags);
1151 + status = check_var_size_locked(efivars, attributes, size);
1152 + spin_unlock_irqrestore(&efivars->lock, flags);
1153 +
1154 + return status;
1155 +}
1156 +
1157 static ssize_t
1158 efivar_guid_read(struct efivar_entry *entry, char *buf)
1159 {
1160 @@ -538,14 +577,19 @@ efivar_store_raw(struct efivar_entry *entry, const char *buf, size_t count)
1161 return -EINVAL;
1162 }
1163
1164 - spin_lock(&efivars->lock);
1165 - status = efivars->ops->set_variable(new_var->VariableName,
1166 - &new_var->VendorGuid,
1167 - new_var->Attributes,
1168 - new_var->DataSize,
1169 - new_var->Data);
1170 + spin_lock_irq(&efivars->lock);
1171 +
1172 + status = check_var_size_locked(efivars, new_var->Attributes,
1173 + new_var->DataSize + utf16_strsize(new_var->VariableName, 1024));
1174
1175 - spin_unlock(&efivars->lock);
1176 + if (status == EFI_SUCCESS || status == EFI_UNSUPPORTED)
1177 + status = efivars->ops->set_variable(new_var->VariableName,
1178 + &new_var->VendorGuid,
1179 + new_var->Attributes,
1180 + new_var->DataSize,
1181 + new_var->Data);
1182 +
1183 + spin_unlock_irq(&efivars->lock);
1184
1185 if (status != EFI_SUCCESS) {
1186 printk(KERN_WARNING "efivars: set_variable() failed: status=%lx\n",
1187 @@ -694,8 +738,7 @@ static ssize_t efivarfs_file_write(struct file *file,
1188 u32 attributes;
1189 struct inode *inode = file->f_mapping->host;
1190 unsigned long datasize = count - sizeof(attributes);
1191 - unsigned long newdatasize;
1192 - u64 storage_size, remaining_size, max_size;
1193 + unsigned long newdatasize, varsize;
1194 ssize_t bytes = 0;
1195
1196 if (count < sizeof(attributes))
1197 @@ -714,28 +757,18 @@ static ssize_t efivarfs_file_write(struct file *file,
1198 * amounts of memory. Pick a default size of 64K if
1199 * QueryVariableInfo() isn't supported by the firmware.
1200 */
1201 - spin_lock(&efivars->lock);
1202
1203 - if (!efivars->ops->query_variable_info)
1204 - status = EFI_UNSUPPORTED;
1205 - else {
1206 - const struct efivar_operations *fops = efivars->ops;
1207 - status = fops->query_variable_info(attributes, &storage_size,
1208 - &remaining_size, &max_size);
1209 - }
1210 -
1211 - spin_unlock(&efivars->lock);
1212 + varsize = datasize + utf16_strsize(var->var.VariableName, 1024);
1213 + status = check_var_size(efivars, attributes, varsize);
1214
1215 if (status != EFI_SUCCESS) {
1216 if (status != EFI_UNSUPPORTED)
1217 return efi_status_to_err(status);
1218
1219 - remaining_size = 65536;
1220 + if (datasize > 65536)
1221 + return -ENOSPC;
1222 }
1223
1224 - if (datasize > remaining_size)
1225 - return -ENOSPC;
1226 -
1227 data = kmalloc(datasize, GFP_KERNEL);
1228 if (!data)
1229 return -ENOMEM;
1230 @@ -755,7 +788,20 @@ static ssize_t efivarfs_file_write(struct file *file,
1231 * set_variable call, and removal of the variable from the efivars
1232 * list (in the case of an authenticated delete).
1233 */
1234 - spin_lock(&efivars->lock);
1235 + spin_lock_irq(&efivars->lock);
1236 +
1237 + /*
1238 + * Ensure that the available space hasn't shrunk below the safe level
1239 + */
1240 +
1241 + status = check_var_size_locked(efivars, attributes, varsize);
1242 +
1243 + if (status != EFI_SUCCESS && status != EFI_UNSUPPORTED) {
1244 + spin_unlock_irq(&efivars->lock);
1245 + kfree(data);
1246 +
1247 + return efi_status_to_err(status);
1248 + }
1249
1250 status = efivars->ops->set_variable(var->var.VariableName,
1251 &var->var.VendorGuid,
1252 @@ -763,7 +809,7 @@ static ssize_t efivarfs_file_write(struct file *file,
1253 data);
1254
1255 if (status != EFI_SUCCESS) {
1256 - spin_unlock(&efivars->lock);
1257 + spin_unlock_irq(&efivars->lock);
1258 kfree(data);
1259
1260 return efi_status_to_err(status);
1261 @@ -784,21 +830,21 @@ static ssize_t efivarfs_file_write(struct file *file,
1262 NULL);
1263
1264 if (status == EFI_BUFFER_TOO_SMALL) {
1265 - spin_unlock(&efivars->lock);
1266 + spin_unlock_irq(&efivars->lock);
1267 mutex_lock(&inode->i_mutex);
1268 i_size_write(inode, newdatasize + sizeof(attributes));
1269 mutex_unlock(&inode->i_mutex);
1270
1271 } else if (status == EFI_NOT_FOUND) {
1272 list_del(&var->list);
1273 - spin_unlock(&efivars->lock);
1274 + spin_unlock_irq(&efivars->lock);
1275 efivar_unregister(var);
1276 drop_nlink(inode);
1277 d_delete(file->f_dentry);
1278 dput(file->f_dentry);
1279
1280 } else {
1281 - spin_unlock(&efivars->lock);
1282 + spin_unlock_irq(&efivars->lock);
1283 pr_warn("efivarfs: inconsistent EFI variable implementation? "
1284 "status = %lx\n", status);
1285 }
1286 @@ -820,11 +866,11 @@ static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf,
1287 void *data;
1288 ssize_t size = 0;
1289
1290 - spin_lock(&efivars->lock);
1291 + spin_lock_irq(&efivars->lock);
1292 status = efivars->ops->get_variable(var->var.VariableName,
1293 &var->var.VendorGuid,
1294 &attributes, &datasize, NULL);
1295 - spin_unlock(&efivars->lock);
1296 + spin_unlock_irq(&efivars->lock);
1297
1298 if (status != EFI_BUFFER_TOO_SMALL)
1299 return efi_status_to_err(status);
1300 @@ -834,12 +880,12 @@ static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf,
1301 if (!data)
1302 return -ENOMEM;
1303
1304 - spin_lock(&efivars->lock);
1305 + spin_lock_irq(&efivars->lock);
1306 status = efivars->ops->get_variable(var->var.VariableName,
1307 &var->var.VendorGuid,
1308 &attributes, &datasize,
1309 (data + sizeof(attributes)));
1310 - spin_unlock(&efivars->lock);
1311 + spin_unlock_irq(&efivars->lock);
1312
1313 if (status != EFI_SUCCESS) {
1314 size = efi_status_to_err(status);
1315 @@ -921,8 +967,8 @@ static bool efivarfs_valid_name(const char *str, int len)
1316 if (len < GUID_LEN + 2)
1317 return false;
1318
1319 - /* GUID should be right after the first '-' */
1320 - if (s - 1 != strchr(str, '-'))
1321 + /* GUID must be preceded by a '-' */
1322 + if (*(s - 1) != '-')
1323 return false;
1324
1325 /*
1326 @@ -1005,9 +1051,9 @@ static int efivarfs_create(struct inode *dir, struct dentry *dentry,
1327 goto out;
1328
1329 kobject_uevent(&var->kobj, KOBJ_ADD);
1330 - spin_lock(&efivars->lock);
1331 + spin_lock_irq(&efivars->lock);
1332 list_add(&var->list, &efivars->list);
1333 - spin_unlock(&efivars->lock);
1334 + spin_unlock_irq(&efivars->lock);
1335 d_instantiate(dentry, inode);
1336 dget(dentry);
1337 out:
1338 @@ -1024,7 +1070,7 @@ static int efivarfs_unlink(struct inode *dir, struct dentry *dentry)
1339 struct efivars *efivars = var->efivars;
1340 efi_status_t status;
1341
1342 - spin_lock(&efivars->lock);
1343 + spin_lock_irq(&efivars->lock);
1344
1345 status = efivars->ops->set_variable(var->var.VariableName,
1346 &var->var.VendorGuid,
1347 @@ -1032,14 +1078,14 @@ static int efivarfs_unlink(struct inode *dir, struct dentry *dentry)
1348
1349 if (status == EFI_SUCCESS || status == EFI_NOT_FOUND) {
1350 list_del(&var->list);
1351 - spin_unlock(&efivars->lock);
1352 + spin_unlock_irq(&efivars->lock);
1353 efivar_unregister(var);
1354 drop_nlink(dentry->d_inode);
1355 dput(dentry);
1356 return 0;
1357 }
1358
1359 - spin_unlock(&efivars->lock);
1360 + spin_unlock_irq(&efivars->lock);
1361 return -EINVAL;
1362 };
1363
1364 @@ -1110,15 +1156,22 @@ static struct dentry_operations efivarfs_d_ops = {
1365
1366 static struct dentry *efivarfs_alloc_dentry(struct dentry *parent, char *name)
1367 {
1368 + struct dentry *d;
1369 struct qstr q;
1370 + int err;
1371
1372 q.name = name;
1373 q.len = strlen(name);
1374
1375 - if (efivarfs_d_hash(NULL, NULL, &q))
1376 - return NULL;
1377 + err = efivarfs_d_hash(NULL, NULL, &q);
1378 + if (err)
1379 + return ERR_PTR(err);
1380
1381 - return d_alloc(parent, &q);
1382 + d = d_alloc(parent, &q);
1383 + if (d)
1384 + return d;
1385 +
1386 + return ERR_PTR(-ENOMEM);
1387 }
1388
1389 static int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
1390 @@ -1128,6 +1181,7 @@ static int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
1391 struct efivar_entry *entry, *n;
1392 struct efivars *efivars = &__efivars;
1393 char *name;
1394 + int err = -ENOMEM;
1395
1396 efivarfs_sb = sb;
1397
1398 @@ -1178,19 +1232,21 @@ static int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
1399 goto fail_name;
1400
1401 dentry = efivarfs_alloc_dentry(root, name);
1402 - if (!dentry)
1403 + if (IS_ERR(dentry)) {
1404 + err = PTR_ERR(dentry);
1405 goto fail_inode;
1406 + }
1407
1408 /* copied by the above to local storage in the dentry. */
1409 kfree(name);
1410
1411 - spin_lock(&efivars->lock);
1412 + spin_lock_irq(&efivars->lock);
1413 efivars->ops->get_variable(entry->var.VariableName,
1414 &entry->var.VendorGuid,
1415 &entry->var.Attributes,
1416 &size,
1417 NULL);
1418 - spin_unlock(&efivars->lock);
1419 + spin_unlock_irq(&efivars->lock);
1420
1421 mutex_lock(&inode->i_mutex);
1422 inode->i_private = entry;
1423 @@ -1206,7 +1262,7 @@ fail_inode:
1424 fail_name:
1425 kfree(name);
1426 fail:
1427 - return -ENOMEM;
1428 + return err;
1429 }
1430
1431 static struct dentry *efivarfs_mount(struct file_system_type *fs_type,
1432 @@ -1253,7 +1309,7 @@ static int efi_pstore_open(struct pstore_info *psi)
1433 {
1434 struct efivars *efivars = psi->data;
1435
1436 - spin_lock(&efivars->lock);
1437 + spin_lock_irq(&efivars->lock);
1438 efivars->walk_entry = list_first_entry(&efivars->list,
1439 struct efivar_entry, list);
1440 return 0;
1441 @@ -1263,7 +1319,7 @@ static int efi_pstore_close(struct pstore_info *psi)
1442 {
1443 struct efivars *efivars = psi->data;
1444
1445 - spin_unlock(&efivars->lock);
1446 + spin_unlock_irq(&efivars->lock);
1447 return 0;
1448 }
1449
1450 @@ -1337,22 +1393,22 @@ static int efi_pstore_write(enum pstore_type_id type,
1451 efi_guid_t vendor = LINUX_EFI_CRASH_GUID;
1452 struct efivars *efivars = psi->data;
1453 int i, ret = 0;
1454 - u64 storage_space, remaining_space, max_variable_size;
1455 efi_status_t status = EFI_NOT_FOUND;
1456 + unsigned long flags;
1457
1458 - spin_lock(&efivars->lock);
1459 + spin_lock_irqsave(&efivars->lock, flags);
1460
1461 /*
1462 * Check if there is a space enough to log.
1463 * size: a size of logging data
1464 * DUMP_NAME_LEN * 2: a maximum size of variable name
1465 */
1466 - status = efivars->ops->query_variable_info(PSTORE_EFI_ATTRIBUTES,
1467 - &storage_space,
1468 - &remaining_space,
1469 - &max_variable_size);
1470 - if (status || remaining_space < size + DUMP_NAME_LEN * 2) {
1471 - spin_unlock(&efivars->lock);
1472 +
1473 + status = check_var_size_locked(efivars, PSTORE_EFI_ATTRIBUTES,
1474 + size + DUMP_NAME_LEN * 2);
1475 +
1476 + if (status) {
1477 + spin_unlock_irqrestore(&efivars->lock, flags);
1478 *id = part;
1479 return -ENOSPC;
1480 }
1481 @@ -1366,7 +1422,7 @@ static int efi_pstore_write(enum pstore_type_id type,
1482 efivars->ops->set_variable(efi_name, &vendor, PSTORE_EFI_ATTRIBUTES,
1483 size, psi->buf);
1484
1485 - spin_unlock(&efivars->lock);
1486 + spin_unlock_irqrestore(&efivars->lock, flags);
1487
1488 if (size)
1489 ret = efivar_create_sysfs_entry(efivars,
1490 @@ -1393,7 +1449,7 @@ static int efi_pstore_erase(enum pstore_type_id type, u64 id, int count,
1491 sprintf(name, "dump-type%u-%u-%d-%lu", type, (unsigned int)id, count,
1492 time.tv_sec);
1493
1494 - spin_lock(&efivars->lock);
1495 + spin_lock_irq(&efivars->lock);
1496
1497 for (i = 0; i < DUMP_NAME_LEN; i++)
1498 efi_name[i] = name[i];
1499 @@ -1437,7 +1493,7 @@ static int efi_pstore_erase(enum pstore_type_id type, u64 id, int count,
1500 if (found)
1501 list_del(&found->list);
1502
1503 - spin_unlock(&efivars->lock);
1504 + spin_unlock_irq(&efivars->lock);
1505
1506 if (found)
1507 efivar_unregister(found);
1508 @@ -1507,7 +1563,7 @@ static ssize_t efivar_create(struct file *filp, struct kobject *kobj,
1509 return -EINVAL;
1510 }
1511
1512 - spin_lock(&efivars->lock);
1513 + spin_lock_irq(&efivars->lock);
1514
1515 /*
1516 * Does this variable already exist?
1517 @@ -1525,10 +1581,18 @@ static ssize_t efivar_create(struct file *filp, struct kobject *kobj,
1518 }
1519 }
1520 if (found) {
1521 - spin_unlock(&efivars->lock);
1522 + spin_unlock_irq(&efivars->lock);
1523 return -EINVAL;
1524 }
1525
1526 + status = check_var_size_locked(efivars, new_var->Attributes,
1527 + new_var->DataSize + utf16_strsize(new_var->VariableName, 1024));
1528 +
1529 + if (status && status != EFI_UNSUPPORTED) {
1530 + spin_unlock_irq(&efivars->lock);
1531 + return efi_status_to_err(status);
1532 + }
1533 +
1534 /* now *really* create the variable via EFI */
1535 status = efivars->ops->set_variable(new_var->VariableName,
1536 &new_var->VendorGuid,
1537 @@ -1539,10 +1603,10 @@ static ssize_t efivar_create(struct file *filp, struct kobject *kobj,
1538 if (status != EFI_SUCCESS) {
1539 printk(KERN_WARNING "efivars: set_variable() failed: status=%lx\n",
1540 status);
1541 - spin_unlock(&efivars->lock);
1542 + spin_unlock_irq(&efivars->lock);
1543 return -EIO;
1544 }
1545 - spin_unlock(&efivars->lock);
1546 + spin_unlock_irq(&efivars->lock);
1547
1548 /* Create the entry in sysfs. Locking is not required here */
1549 status = efivar_create_sysfs_entry(efivars,
1550 @@ -1570,7 +1634,7 @@ static ssize_t efivar_delete(struct file *filp, struct kobject *kobj,
1551 if (!capable(CAP_SYS_ADMIN))
1552 return -EACCES;
1553
1554 - spin_lock(&efivars->lock);
1555 + spin_lock_irq(&efivars->lock);
1556
1557 /*
1558 * Does this variable already exist?
1559 @@ -1588,7 +1652,7 @@ static ssize_t efivar_delete(struct file *filp, struct kobject *kobj,
1560 }
1561 }
1562 if (!found) {
1563 - spin_unlock(&efivars->lock);
1564 + spin_unlock_irq(&efivars->lock);
1565 return -EINVAL;
1566 }
1567 /* force the Attributes/DataSize to 0 to ensure deletion */
1568 @@ -1604,12 +1668,12 @@ static ssize_t efivar_delete(struct file *filp, struct kobject *kobj,
1569 if (status != EFI_SUCCESS) {
1570 printk(KERN_WARNING "efivars: set_variable() failed: status=%lx\n",
1571 status);
1572 - spin_unlock(&efivars->lock);
1573 + spin_unlock_irq(&efivars->lock);
1574 return -EIO;
1575 }
1576 list_del(&search_efivar->list);
1577 /* We need to release this lock before unregistering. */
1578 - spin_unlock(&efivars->lock);
1579 + spin_unlock_irq(&efivars->lock);
1580 efivar_unregister(search_efivar);
1581
1582 /* It's dead Jim.... */
1583 @@ -1724,9 +1788,9 @@ efivar_create_sysfs_entry(struct efivars *efivars,
1584 kfree(short_name);
1585 short_name = NULL;
1586
1587 - spin_lock(&efivars->lock);
1588 + spin_lock_irq(&efivars->lock);
1589 list_add(&new_efivar->list, &efivars->list);
1590 - spin_unlock(&efivars->lock);
1591 + spin_unlock_irq(&efivars->lock);
1592
1593 return 0;
1594 }
1595 @@ -1795,9 +1859,9 @@ void unregister_efivars(struct efivars *efivars)
1596 struct efivar_entry *entry, *n;
1597
1598 list_for_each_entry_safe(entry, n, &efivars->list, list) {
1599 - spin_lock(&efivars->lock);
1600 + spin_lock_irq(&efivars->lock);
1601 list_del(&entry->list);
1602 - spin_unlock(&efivars->lock);
1603 + spin_unlock_irq(&efivars->lock);
1604 efivar_unregister(entry);
1605 }
1606 if (efivars->new_var)
1607 diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
1608 index 6819d63..456663c 100644
1609 --- a/drivers/gpio/gpio-mvebu.c
1610 +++ b/drivers/gpio/gpio-mvebu.c
1611 @@ -41,6 +41,7 @@
1612 #include <linux/io.h>
1613 #include <linux/of_irq.h>
1614 #include <linux/of_device.h>
1615 +#include <linux/clk.h>
1616 #include <linux/pinctrl/consumer.h>
1617
1618 /*
1619 @@ -495,6 +496,7 @@ static int mvebu_gpio_probe(struct platform_device *pdev)
1620 struct resource *res;
1621 struct irq_chip_generic *gc;
1622 struct irq_chip_type *ct;
1623 + struct clk *clk;
1624 unsigned int ngpios;
1625 int soc_variant;
1626 int i, cpu, id;
1627 @@ -528,6 +530,11 @@ static int mvebu_gpio_probe(struct platform_device *pdev)
1628 return id;
1629 }
1630
1631 + clk = devm_clk_get(&pdev->dev, NULL);
1632 + /* Not all SoCs require a clock.*/
1633 + if (!IS_ERR(clk))
1634 + clk_prepare_enable(clk);
1635 +
1636 mvchip->soc_variant = soc_variant;
1637 mvchip->chip.label = dev_name(&pdev->dev);
1638 mvchip->chip.dev = &pdev->dev;
1639 diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
1640 index 99daa89..5206f24 100644
1641 --- a/drivers/gpu/drm/i915/i915_dma.c
1642 +++ b/drivers/gpu/drm/i915/i915_dma.c
1643 @@ -1297,19 +1297,21 @@ static int i915_load_modeset_init(struct drm_device *dev)
1644 if (ret)
1645 goto cleanup_vga_switcheroo;
1646
1647 + ret = drm_irq_install(dev);
1648 + if (ret)
1649 + goto cleanup_gem_stolen;
1650 +
1651 + /* Important: The output setup functions called by modeset_init need
1652 + * working irqs for e.g. gmbus and dp aux transfers. */
1653 intel_modeset_init(dev);
1654
1655 ret = i915_gem_init(dev);
1656 if (ret)
1657 - goto cleanup_gem_stolen;
1658 -
1659 - intel_modeset_gem_init(dev);
1660 + goto cleanup_irq;
1661
1662 INIT_WORK(&dev_priv->console_resume_work, intel_console_resume);
1663
1664 - ret = drm_irq_install(dev);
1665 - if (ret)
1666 - goto cleanup_gem;
1667 + intel_modeset_gem_init(dev);
1668
1669 /* Always safe in the mode setting case. */
1670 /* FIXME: do pre/post-mode set stuff in core KMS code */
1671 @@ -1317,7 +1319,10 @@ static int i915_load_modeset_init(struct drm_device *dev)
1672
1673 ret = intel_fbdev_init(dev);
1674 if (ret)
1675 - goto cleanup_irq;
1676 + goto cleanup_gem;
1677 +
1678 + /* Only enable hotplug handling once the fbdev is fully set up. */
1679 + dev_priv->enable_hotplug_processing = true;
1680
1681 drm_kms_helper_poll_init(dev);
1682
1683 @@ -1326,13 +1331,13 @@ static int i915_load_modeset_init(struct drm_device *dev)
1684
1685 return 0;
1686
1687 -cleanup_irq:
1688 - drm_irq_uninstall(dev);
1689 cleanup_gem:
1690 mutex_lock(&dev->struct_mutex);
1691 i915_gem_cleanup_ringbuffer(dev);
1692 mutex_unlock(&dev->struct_mutex);
1693 i915_gem_cleanup_aliasing_ppgtt(dev);
1694 +cleanup_irq:
1695 + drm_irq_uninstall(dev);
1696 cleanup_gem_stolen:
1697 i915_gem_cleanup_stolen(dev);
1698 cleanup_vga_switcheroo:
1699 diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
1700 index 1172658..fb6454c 100644
1701 --- a/drivers/gpu/drm/i915/i915_drv.c
1702 +++ b/drivers/gpu/drm/i915/i915_drv.c
1703 @@ -377,15 +377,15 @@ static const struct pci_device_id pciidlist[] = { /* aka */
1704 INTEL_VGA_DEVICE(0x0A06, &intel_haswell_m_info), /* ULT GT1 mobile */
1705 INTEL_VGA_DEVICE(0x0A16, &intel_haswell_m_info), /* ULT GT2 mobile */
1706 INTEL_VGA_DEVICE(0x0A26, &intel_haswell_m_info), /* ULT GT2 mobile */
1707 - INTEL_VGA_DEVICE(0x0D12, &intel_haswell_d_info), /* CRW GT1 desktop */
1708 + INTEL_VGA_DEVICE(0x0D02, &intel_haswell_d_info), /* CRW GT1 desktop */
1709 + INTEL_VGA_DEVICE(0x0D12, &intel_haswell_d_info), /* CRW GT2 desktop */
1710 INTEL_VGA_DEVICE(0x0D22, &intel_haswell_d_info), /* CRW GT2 desktop */
1711 - INTEL_VGA_DEVICE(0x0D32, &intel_haswell_d_info), /* CRW GT2 desktop */
1712 - INTEL_VGA_DEVICE(0x0D1A, &intel_haswell_d_info), /* CRW GT1 server */
1713 + INTEL_VGA_DEVICE(0x0D0A, &intel_haswell_d_info), /* CRW GT1 server */
1714 + INTEL_VGA_DEVICE(0x0D1A, &intel_haswell_d_info), /* CRW GT2 server */
1715 INTEL_VGA_DEVICE(0x0D2A, &intel_haswell_d_info), /* CRW GT2 server */
1716 - INTEL_VGA_DEVICE(0x0D3A, &intel_haswell_d_info), /* CRW GT2 server */
1717 - INTEL_VGA_DEVICE(0x0D16, &intel_haswell_m_info), /* CRW GT1 mobile */
1718 + INTEL_VGA_DEVICE(0x0D06, &intel_haswell_m_info), /* CRW GT1 mobile */
1719 + INTEL_VGA_DEVICE(0x0D16, &intel_haswell_m_info), /* CRW GT2 mobile */
1720 INTEL_VGA_DEVICE(0x0D26, &intel_haswell_m_info), /* CRW GT2 mobile */
1721 - INTEL_VGA_DEVICE(0x0D36, &intel_haswell_m_info), /* CRW GT2 mobile */
1722 INTEL_VGA_DEVICE(0x0f30, &intel_valleyview_m_info),
1723 INTEL_VGA_DEVICE(0x0157, &intel_valleyview_m_info),
1724 INTEL_VGA_DEVICE(0x0155, &intel_valleyview_d_info),
1725 @@ -486,6 +486,7 @@ static int i915_drm_freeze(struct drm_device *dev)
1726 intel_modeset_disable(dev);
1727
1728 drm_irq_uninstall(dev);
1729 + dev_priv->enable_hotplug_processing = false;
1730 }
1731
1732 i915_save_state(dev);
1733 @@ -562,9 +563,19 @@ static int __i915_drm_thaw(struct drm_device *dev)
1734 error = i915_gem_init_hw(dev);
1735 mutex_unlock(&dev->struct_mutex);
1736
1737 + /* We need working interrupts for modeset enabling ... */
1738 + drm_irq_install(dev);
1739 +
1740 intel_modeset_init_hw(dev);
1741 intel_modeset_setup_hw_state(dev, false);
1742 - drm_irq_install(dev);
1743 +
1744 + /*
1745 + * ... but also need to make sure that hotplug processing
1746 + * doesn't cause havoc. Like in the driver load code we don't
1747 + * bother with the tiny race here where we might loose hotplug
1748 + * notifications.
1749 + * */
1750 + dev_priv->enable_hotplug_processing = true;
1751 }
1752
1753 intel_opregion_init(dev);
1754 diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
1755 index 7339a4b..66ad64f 100644
1756 --- a/drivers/gpu/drm/i915/i915_drv.h
1757 +++ b/drivers/gpu/drm/i915/i915_drv.h
1758 @@ -672,6 +672,7 @@ typedef struct drm_i915_private {
1759
1760 u32 hotplug_supported_mask;
1761 struct work_struct hotplug_work;
1762 + bool enable_hotplug_processing;
1763
1764 int num_pipe;
1765 int num_pch_pll;
1766 diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
1767 index fe84338..3c00403 100644
1768 --- a/drivers/gpu/drm/i915/i915_irq.c
1769 +++ b/drivers/gpu/drm/i915/i915_irq.c
1770 @@ -287,6 +287,10 @@ static void i915_hotplug_work_func(struct work_struct *work)
1771 struct drm_mode_config *mode_config = &dev->mode_config;
1772 struct intel_encoder *encoder;
1773
1774 + /* HPD irq before everything is fully set up. */
1775 + if (!dev_priv->enable_hotplug_processing)
1776 + return;
1777 +
1778 mutex_lock(&mode_config->mutex);
1779 DRM_DEBUG_KMS("running encoder hotplug functions\n");
1780
1781 diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
1782 index 06b1786..b52ed09 100644
1783 --- a/drivers/gpu/drm/i915/intel_crt.c
1784 +++ b/drivers/gpu/drm/i915/intel_crt.c
1785 @@ -88,7 +88,7 @@ static void intel_disable_crt(struct intel_encoder *encoder)
1786 u32 temp;
1787
1788 temp = I915_READ(crt->adpa_reg);
1789 - temp &= ~(ADPA_HSYNC_CNTL_DISABLE | ADPA_VSYNC_CNTL_DISABLE);
1790 + temp |= ADPA_HSYNC_CNTL_DISABLE | ADPA_VSYNC_CNTL_DISABLE;
1791 temp &= ~ADPA_DAC_ENABLE;
1792 I915_WRITE(crt->adpa_reg, temp);
1793 }
1794 diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
1795 index 3280cff..dde0ded 100644
1796 --- a/drivers/gpu/drm/i915/intel_pm.c
1797 +++ b/drivers/gpu/drm/i915/intel_pm.c
1798 @@ -2572,7 +2572,7 @@ static void gen6_enable_rps(struct drm_device *dev)
1799 I915_WRITE(GEN6_RC_SLEEP, 0);
1800 I915_WRITE(GEN6_RC1e_THRESHOLD, 1000);
1801 I915_WRITE(GEN6_RC6_THRESHOLD, 50000);
1802 - I915_WRITE(GEN6_RC6p_THRESHOLD, 100000);
1803 + I915_WRITE(GEN6_RC6p_THRESHOLD, 150000);
1804 I915_WRITE(GEN6_RC6pp_THRESHOLD, 64000); /* unused */
1805
1806 /* Check if we are enabling RC6 */
1807 diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
1808 index 3e403bd..78edadc 100644
1809 --- a/drivers/gpu/drm/radeon/radeon_combios.c
1810 +++ b/drivers/gpu/drm/radeon/radeon_combios.c
1811 @@ -970,6 +970,15 @@ struct radeon_encoder_primary_dac *radeon_combios_get_primary_dac_info(struct
1812 found = 1;
1813 }
1814
1815 + /* quirks */
1816 + /* Radeon 9100 (R200) */
1817 + if ((dev->pdev->device == 0x514D) &&
1818 + (dev->pdev->subsystem_vendor == 0x174B) &&
1819 + (dev->pdev->subsystem_device == 0x7149)) {
1820 + /* vbios value is bad, use the default */
1821 + found = 0;
1822 + }
1823 +
1824 if (!found) /* fallback to defaults */
1825 radeon_legacy_get_primary_dac_info_from_table(rdev, p_dac);
1826
1827 diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
1828 index 90374dd..48f80cd 100644
1829 --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
1830 +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
1831 @@ -400,6 +400,9 @@ void radeon_irq_kms_enable_afmt(struct radeon_device *rdev, int block)
1832 {
1833 unsigned long irqflags;
1834
1835 + if (!rdev->ddev->irq_enabled)
1836 + return;
1837 +
1838 spin_lock_irqsave(&rdev->irq.lock, irqflags);
1839 rdev->irq.afmt[block] = true;
1840 radeon_irq_set(rdev);
1841 @@ -419,6 +422,9 @@ void radeon_irq_kms_disable_afmt(struct radeon_device *rdev, int block)
1842 {
1843 unsigned long irqflags;
1844
1845 + if (!rdev->ddev->irq_enabled)
1846 + return;
1847 +
1848 spin_lock_irqsave(&rdev->irq.lock, irqflags);
1849 rdev->irq.afmt[block] = false;
1850 radeon_irq_set(rdev);
1851 @@ -438,6 +444,9 @@ void radeon_irq_kms_enable_hpd(struct radeon_device *rdev, unsigned hpd_mask)
1852 unsigned long irqflags;
1853 int i;
1854
1855 + if (!rdev->ddev->irq_enabled)
1856 + return;
1857 +
1858 spin_lock_irqsave(&rdev->irq.lock, irqflags);
1859 for (i = 0; i < RADEON_MAX_HPD_PINS; ++i)
1860 rdev->irq.hpd[i] |= !!(hpd_mask & (1 << i));
1861 @@ -458,6 +467,9 @@ void radeon_irq_kms_disable_hpd(struct radeon_device *rdev, unsigned hpd_mask)
1862 unsigned long irqflags;
1863 int i;
1864
1865 + if (!rdev->ddev->irq_enabled)
1866 + return;
1867 +
1868 spin_lock_irqsave(&rdev->irq.lock, irqflags);
1869 for (i = 0; i < RADEON_MAX_HPD_PINS; ++i)
1870 rdev->irq.hpd[i] &= !(hpd_mask & (1 << i));
1871 diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
1872 index 9500f2f..8758f38c 100644
1873 --- a/drivers/hid/hid-logitech-dj.c
1874 +++ b/drivers/hid/hid-logitech-dj.c
1875 @@ -459,19 +459,25 @@ static int logi_dj_recv_send_report(struct dj_receiver_dev *djrcv_dev,
1876 struct dj_report *dj_report)
1877 {
1878 struct hid_device *hdev = djrcv_dev->hdev;
1879 - int sent_bytes;
1880 + struct hid_report *report;
1881 + struct hid_report_enum *output_report_enum;
1882 + u8 *data = (u8 *)(&dj_report->device_index);
1883 + int i;
1884
1885 - if (!hdev->hid_output_raw_report) {
1886 - dev_err(&hdev->dev, "%s:"
1887 - "hid_output_raw_report is null\n", __func__);
1888 + output_report_enum = &hdev->report_enum[HID_OUTPUT_REPORT];
1889 + report = output_report_enum->report_id_hash[REPORT_ID_DJ_SHORT];
1890 +
1891 + if (!report) {
1892 + dev_err(&hdev->dev, "%s: unable to find dj report\n", __func__);
1893 return -ENODEV;
1894 }
1895
1896 - sent_bytes = hdev->hid_output_raw_report(hdev, (u8 *) dj_report,
1897 - sizeof(struct dj_report),
1898 - HID_OUTPUT_REPORT);
1899 + for (i = 0; i < report->field[0]->report_count; i++)
1900 + report->field[0]->value[i] = data[i];
1901 +
1902 + usbhid_submit_report(hdev, report, USB_DIR_OUT);
1903
1904 - return (sent_bytes < 0) ? sent_bytes : 0;
1905 + return 0;
1906 }
1907
1908 static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev)
1909 diff --git a/drivers/hwmon/pmbus/ltc2978.c b/drivers/hwmon/pmbus/ltc2978.c
1910 index 9652a2c..a58de38 100644
1911 --- a/drivers/hwmon/pmbus/ltc2978.c
1912 +++ b/drivers/hwmon/pmbus/ltc2978.c
1913 @@ -62,7 +62,7 @@ struct ltc2978_data {
1914 int temp_min, temp_max;
1915 int vout_min[8], vout_max[8];
1916 int iout_max[2];
1917 - int temp2_max[2];
1918 + int temp2_max;
1919 struct pmbus_driver_info info;
1920 };
1921
1922 @@ -204,10 +204,9 @@ static int ltc3880_read_word_data(struct i2c_client *client, int page, int reg)
1923 ret = pmbus_read_word_data(client, page,
1924 LTC3880_MFR_TEMPERATURE2_PEAK);
1925 if (ret >= 0) {
1926 - if (lin11_to_val(ret)
1927 - > lin11_to_val(data->temp2_max[page]))
1928 - data->temp2_max[page] = ret;
1929 - ret = data->temp2_max[page];
1930 + if (lin11_to_val(ret) > lin11_to_val(data->temp2_max))
1931 + data->temp2_max = ret;
1932 + ret = data->temp2_max;
1933 }
1934 break;
1935 case PMBUS_VIRT_READ_VIN_MIN:
1936 @@ -248,11 +247,11 @@ static int ltc2978_write_word_data(struct i2c_client *client, int page,
1937
1938 switch (reg) {
1939 case PMBUS_VIRT_RESET_IOUT_HISTORY:
1940 - data->iout_max[page] = 0x7fff;
1941 + data->iout_max[page] = 0x7c00;
1942 ret = ltc2978_clear_peaks(client, page, data->id);
1943 break;
1944 case PMBUS_VIRT_RESET_TEMP2_HISTORY:
1945 - data->temp2_max[page] = 0x7fff;
1946 + data->temp2_max = 0x7c00;
1947 ret = ltc2978_clear_peaks(client, page, data->id);
1948 break;
1949 case PMBUS_VIRT_RESET_VOUT_HISTORY:
1950 @@ -262,12 +261,12 @@ static int ltc2978_write_word_data(struct i2c_client *client, int page,
1951 break;
1952 case PMBUS_VIRT_RESET_VIN_HISTORY:
1953 data->vin_min = 0x7bff;
1954 - data->vin_max = 0;
1955 + data->vin_max = 0x7c00;
1956 ret = ltc2978_clear_peaks(client, page, data->id);
1957 break;
1958 case PMBUS_VIRT_RESET_TEMP_HISTORY:
1959 data->temp_min = 0x7bff;
1960 - data->temp_max = 0x7fff;
1961 + data->temp_max = 0x7c00;
1962 ret = ltc2978_clear_peaks(client, page, data->id);
1963 break;
1964 default:
1965 @@ -321,12 +320,13 @@ static int ltc2978_probe(struct i2c_client *client,
1966 info = &data->info;
1967 info->write_word_data = ltc2978_write_word_data;
1968
1969 - data->vout_min[0] = 0xffff;
1970 data->vin_min = 0x7bff;
1971 + data->vin_max = 0x7c00;
1972 data->temp_min = 0x7bff;
1973 - data->temp_max = 0x7fff;
1974 + data->temp_max = 0x7c00;
1975 + data->temp2_max = 0x7c00;
1976
1977 - switch (id->driver_data) {
1978 + switch (data->id) {
1979 case ltc2978:
1980 info->read_word_data = ltc2978_read_word_data;
1981 info->pages = 8;
1982 @@ -336,7 +336,6 @@ static int ltc2978_probe(struct i2c_client *client,
1983 for (i = 1; i < 8; i++) {
1984 info->func[i] = PMBUS_HAVE_VOUT
1985 | PMBUS_HAVE_STATUS_VOUT;
1986 - data->vout_min[i] = 0xffff;
1987 }
1988 break;
1989 case ltc3880:
1990 @@ -352,11 +351,14 @@ static int ltc2978_probe(struct i2c_client *client,
1991 | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT
1992 | PMBUS_HAVE_POUT
1993 | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP;
1994 - data->vout_min[1] = 0xffff;
1995 + data->iout_max[0] = 0x7c00;
1996 + data->iout_max[1] = 0x7c00;
1997 break;
1998 default:
1999 return -ENODEV;
2000 }
2001 + for (i = 0; i < info->pages; i++)
2002 + data->vout_min[i] = 0xffff;
2003
2004 return pmbus_do_probe(client, id, info);
2005 }
2006 diff --git a/drivers/hwmon/sht15.c b/drivers/hwmon/sht15.c
2007 index 1c85d39..8047fed 100644
2008 --- a/drivers/hwmon/sht15.c
2009 +++ b/drivers/hwmon/sht15.c
2010 @@ -926,7 +926,13 @@ static int sht15_probe(struct platform_device *pdev)
2011 if (voltage)
2012 data->supply_uV = voltage;
2013
2014 - regulator_enable(data->reg);
2015 + ret = regulator_enable(data->reg);
2016 + if (ret != 0) {
2017 + dev_err(&pdev->dev,
2018 + "failed to enable regulator: %d\n", ret);
2019 + return ret;
2020 + }
2021 +
2022 /*
2023 * Setup a notifier block to update this if another device
2024 * causes the voltage to change
2025 diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
2026 index f7369f9..2ae151e 100644
2027 --- a/drivers/md/dm-crypt.c
2028 +++ b/drivers/md/dm-crypt.c
2029 @@ -1234,20 +1234,6 @@ static int crypt_decode_key(u8 *key, char *hex, unsigned int size)
2030 return 0;
2031 }
2032
2033 -/*
2034 - * Encode key into its hex representation
2035 - */
2036 -static void crypt_encode_key(char *hex, u8 *key, unsigned int size)
2037 -{
2038 - unsigned int i;
2039 -
2040 - for (i = 0; i < size; i++) {
2041 - sprintf(hex, "%02x", *key);
2042 - hex += 2;
2043 - key++;
2044 - }
2045 -}
2046 -
2047 static void crypt_free_tfms(struct crypt_config *cc)
2048 {
2049 unsigned i;
2050 @@ -1717,11 +1703,11 @@ static int crypt_map(struct dm_target *ti, struct bio *bio)
2051 return DM_MAPIO_SUBMITTED;
2052 }
2053
2054 -static int crypt_status(struct dm_target *ti, status_type_t type,
2055 - unsigned status_flags, char *result, unsigned maxlen)
2056 +static void crypt_status(struct dm_target *ti, status_type_t type,
2057 + unsigned status_flags, char *result, unsigned maxlen)
2058 {
2059 struct crypt_config *cc = ti->private;
2060 - unsigned int sz = 0;
2061 + unsigned i, sz = 0;
2062
2063 switch (type) {
2064 case STATUSTYPE_INFO:
2065 @@ -1731,17 +1717,11 @@ static int crypt_status(struct dm_target *ti, status_type_t type,
2066 case STATUSTYPE_TABLE:
2067 DMEMIT("%s ", cc->cipher_string);
2068
2069 - if (cc->key_size > 0) {
2070 - if ((maxlen - sz) < ((cc->key_size << 1) + 1))
2071 - return -ENOMEM;
2072 -
2073 - crypt_encode_key(result + sz, cc->key, cc->key_size);
2074 - sz += cc->key_size << 1;
2075 - } else {
2076 - if (sz >= maxlen)
2077 - return -ENOMEM;
2078 - result[sz++] = '-';
2079 - }
2080 + if (cc->key_size > 0)
2081 + for (i = 0; i < cc->key_size; i++)
2082 + DMEMIT("%02x", cc->key[i]);
2083 + else
2084 + DMEMIT("-");
2085
2086 DMEMIT(" %llu %s %llu", (unsigned long long)cc->iv_offset,
2087 cc->dev->name, (unsigned long long)cc->start);
2088 @@ -1751,7 +1731,6 @@ static int crypt_status(struct dm_target *ti, status_type_t type,
2089
2090 break;
2091 }
2092 - return 0;
2093 }
2094
2095 static void crypt_postsuspend(struct dm_target *ti)
2096 @@ -1845,7 +1824,7 @@ static int crypt_iterate_devices(struct dm_target *ti,
2097
2098 static struct target_type crypt_target = {
2099 .name = "crypt",
2100 - .version = {1, 12, 0},
2101 + .version = {1, 12, 1},
2102 .module = THIS_MODULE,
2103 .ctr = crypt_ctr,
2104 .dtr = crypt_dtr,
2105 diff --git a/drivers/md/dm-delay.c b/drivers/md/dm-delay.c
2106 index cc1bd04..c0d03b0 100644
2107 --- a/drivers/md/dm-delay.c
2108 +++ b/drivers/md/dm-delay.c
2109 @@ -293,8 +293,8 @@ static int delay_map(struct dm_target *ti, struct bio *bio)
2110 return delay_bio(dc, dc->read_delay, bio);
2111 }
2112
2113 -static int delay_status(struct dm_target *ti, status_type_t type,
2114 - unsigned status_flags, char *result, unsigned maxlen)
2115 +static void delay_status(struct dm_target *ti, status_type_t type,
2116 + unsigned status_flags, char *result, unsigned maxlen)
2117 {
2118 struct delay_c *dc = ti->private;
2119 int sz = 0;
2120 @@ -314,8 +314,6 @@ static int delay_status(struct dm_target *ti, status_type_t type,
2121 dc->write_delay);
2122 break;
2123 }
2124 -
2125 - return 0;
2126 }
2127
2128 static int delay_iterate_devices(struct dm_target *ti,
2129 @@ -337,7 +335,7 @@ out:
2130
2131 static struct target_type delay_target = {
2132 .name = "delay",
2133 - .version = {1, 2, 0},
2134 + .version = {1, 2, 1},
2135 .module = THIS_MODULE,
2136 .ctr = delay_ctr,
2137 .dtr = delay_dtr,
2138 diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
2139 index 9721f2f..5d6c04c 100644
2140 --- a/drivers/md/dm-flakey.c
2141 +++ b/drivers/md/dm-flakey.c
2142 @@ -337,8 +337,8 @@ static int flakey_end_io(struct dm_target *ti, struct bio *bio, int error)
2143 return error;
2144 }
2145
2146 -static int flakey_status(struct dm_target *ti, status_type_t type,
2147 - unsigned status_flags, char *result, unsigned maxlen)
2148 +static void flakey_status(struct dm_target *ti, status_type_t type,
2149 + unsigned status_flags, char *result, unsigned maxlen)
2150 {
2151 unsigned sz = 0;
2152 struct flakey_c *fc = ti->private;
2153 @@ -368,7 +368,6 @@ static int flakey_status(struct dm_target *ti, status_type_t type,
2154
2155 break;
2156 }
2157 - return 0;
2158 }
2159
2160 static int flakey_ioctl(struct dm_target *ti, unsigned int cmd, unsigned long arg)
2161 @@ -411,7 +410,7 @@ static int flakey_iterate_devices(struct dm_target *ti, iterate_devices_callout_
2162
2163 static struct target_type flakey_target = {
2164 .name = "flakey",
2165 - .version = {1, 3, 0},
2166 + .version = {1, 3, 1},
2167 .module = THIS_MODULE,
2168 .ctr = flakey_ctr,
2169 .dtr = flakey_dtr,
2170 diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
2171 index 0666b5d..eee353d 100644
2172 --- a/drivers/md/dm-ioctl.c
2173 +++ b/drivers/md/dm-ioctl.c
2174 @@ -1067,6 +1067,7 @@ static void retrieve_status(struct dm_table *table,
2175 num_targets = dm_table_get_num_targets(table);
2176 for (i = 0; i < num_targets; i++) {
2177 struct dm_target *ti = dm_table_get_target(table, i);
2178 + size_t l;
2179
2180 remaining = len - (outptr - outbuf);
2181 if (remaining <= sizeof(struct dm_target_spec)) {
2182 @@ -1093,14 +1094,17 @@ static void retrieve_status(struct dm_table *table,
2183 if (ti->type->status) {
2184 if (param->flags & DM_NOFLUSH_FLAG)
2185 status_flags |= DM_STATUS_NOFLUSH_FLAG;
2186 - if (ti->type->status(ti, type, status_flags, outptr, remaining)) {
2187 - param->flags |= DM_BUFFER_FULL_FLAG;
2188 - break;
2189 - }
2190 + ti->type->status(ti, type, status_flags, outptr, remaining);
2191 } else
2192 outptr[0] = '\0';
2193
2194 - outptr += strlen(outptr) + 1;
2195 + l = strlen(outptr) + 1;
2196 + if (l == remaining) {
2197 + param->flags |= DM_BUFFER_FULL_FLAG;
2198 + break;
2199 + }
2200 +
2201 + outptr += l;
2202 used = param->data_start + (outptr - outbuf);
2203
2204 outptr = align_ptr(outptr);
2205 diff --git a/drivers/md/dm-linear.c b/drivers/md/dm-linear.c
2206 index 328cad5..5be301c 100644
2207 --- a/drivers/md/dm-linear.c
2208 +++ b/drivers/md/dm-linear.c
2209 @@ -95,8 +95,8 @@ static int linear_map(struct dm_target *ti, struct bio *bio)
2210 return DM_MAPIO_REMAPPED;
2211 }
2212
2213 -static int linear_status(struct dm_target *ti, status_type_t type,
2214 - unsigned status_flags, char *result, unsigned maxlen)
2215 +static void linear_status(struct dm_target *ti, status_type_t type,
2216 + unsigned status_flags, char *result, unsigned maxlen)
2217 {
2218 struct linear_c *lc = (struct linear_c *) ti->private;
2219
2220 @@ -110,7 +110,6 @@ static int linear_status(struct dm_target *ti, status_type_t type,
2221 (unsigned long long)lc->start);
2222 break;
2223 }
2224 - return 0;
2225 }
2226
2227 static int linear_ioctl(struct dm_target *ti, unsigned int cmd,
2228 @@ -155,7 +154,7 @@ static int linear_iterate_devices(struct dm_target *ti,
2229
2230 static struct target_type linear_target = {
2231 .name = "linear",
2232 - .version = {1, 2, 0},
2233 + .version = {1, 2, 1},
2234 .module = THIS_MODULE,
2235 .ctr = linear_ctr,
2236 .dtr = linear_dtr,
2237 diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
2238 index 573bd04..d267bb5 100644
2239 --- a/drivers/md/dm-mpath.c
2240 +++ b/drivers/md/dm-mpath.c
2241 @@ -1378,8 +1378,8 @@ static void multipath_resume(struct dm_target *ti)
2242 * [priority selector-name num_ps_args [ps_args]*
2243 * num_paths num_selector_args [path_dev [selector_args]* ]+ ]+
2244 */
2245 -static int multipath_status(struct dm_target *ti, status_type_t type,
2246 - unsigned status_flags, char *result, unsigned maxlen)
2247 +static void multipath_status(struct dm_target *ti, status_type_t type,
2248 + unsigned status_flags, char *result, unsigned maxlen)
2249 {
2250 int sz = 0;
2251 unsigned long flags;
2252 @@ -1485,8 +1485,6 @@ static int multipath_status(struct dm_target *ti, status_type_t type,
2253 }
2254
2255 spin_unlock_irqrestore(&m->lock, flags);
2256 -
2257 - return 0;
2258 }
2259
2260 static int multipath_message(struct dm_target *ti, unsigned argc, char **argv)
2261 @@ -1695,7 +1693,7 @@ out:
2262 *---------------------------------------------------------------*/
2263 static struct target_type multipath_target = {
2264 .name = "multipath",
2265 - .version = {1, 5, 0},
2266 + .version = {1, 5, 1},
2267 .module = THIS_MODULE,
2268 .ctr = multipath_ctr,
2269 .dtr = multipath_dtr,
2270 diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
2271 index 9e58dbd..5a578d8 100644
2272 --- a/drivers/md/dm-raid.c
2273 +++ b/drivers/md/dm-raid.c
2274 @@ -1201,8 +1201,8 @@ static int raid_map(struct dm_target *ti, struct bio *bio)
2275 return DM_MAPIO_SUBMITTED;
2276 }
2277
2278 -static int raid_status(struct dm_target *ti, status_type_t type,
2279 - unsigned status_flags, char *result, unsigned maxlen)
2280 +static void raid_status(struct dm_target *ti, status_type_t type,
2281 + unsigned status_flags, char *result, unsigned maxlen)
2282 {
2283 struct raid_set *rs = ti->private;
2284 unsigned raid_param_cnt = 1; /* at least 1 for chunksize */
2285 @@ -1344,8 +1344,6 @@ static int raid_status(struct dm_target *ti, status_type_t type,
2286 DMEMIT(" -");
2287 }
2288 }
2289 -
2290 - return 0;
2291 }
2292
2293 static int raid_iterate_devices(struct dm_target *ti, iterate_devices_callout_fn fn, void *data)
2294 @@ -1405,7 +1403,7 @@ static void raid_resume(struct dm_target *ti)
2295
2296 static struct target_type raid_target = {
2297 .name = "raid",
2298 - .version = {1, 4, 1},
2299 + .version = {1, 4, 2},
2300 .module = THIS_MODULE,
2301 .ctr = raid_ctr,
2302 .dtr = raid_dtr,
2303 diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c
2304 index fa51918..7f24190 100644
2305 --- a/drivers/md/dm-raid1.c
2306 +++ b/drivers/md/dm-raid1.c
2307 @@ -1347,8 +1347,8 @@ static char device_status_char(struct mirror *m)
2308 }
2309
2310
2311 -static int mirror_status(struct dm_target *ti, status_type_t type,
2312 - unsigned status_flags, char *result, unsigned maxlen)
2313 +static void mirror_status(struct dm_target *ti, status_type_t type,
2314 + unsigned status_flags, char *result, unsigned maxlen)
2315 {
2316 unsigned int m, sz = 0;
2317 struct mirror_set *ms = (struct mirror_set *) ti->private;
2318 @@ -1383,8 +1383,6 @@ static int mirror_status(struct dm_target *ti, status_type_t type,
2319 if (ms->features & DM_RAID1_HANDLE_ERRORS)
2320 DMEMIT(" 1 handle_errors");
2321 }
2322 -
2323 - return 0;
2324 }
2325
2326 static int mirror_iterate_devices(struct dm_target *ti,
2327 @@ -1403,7 +1401,7 @@ static int mirror_iterate_devices(struct dm_target *ti,
2328
2329 static struct target_type mirror_target = {
2330 .name = "mirror",
2331 - .version = {1, 13, 1},
2332 + .version = {1, 13, 2},
2333 .module = THIS_MODULE,
2334 .ctr = mirror_ctr,
2335 .dtr = mirror_dtr,
2336 diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
2337 index 59fc18a..df74f9f 100644
2338 --- a/drivers/md/dm-snap.c
2339 +++ b/drivers/md/dm-snap.c
2340 @@ -1837,8 +1837,8 @@ static void snapshot_merge_resume(struct dm_target *ti)
2341 start_merge(s);
2342 }
2343
2344 -static int snapshot_status(struct dm_target *ti, status_type_t type,
2345 - unsigned status_flags, char *result, unsigned maxlen)
2346 +static void snapshot_status(struct dm_target *ti, status_type_t type,
2347 + unsigned status_flags, char *result, unsigned maxlen)
2348 {
2349 unsigned sz = 0;
2350 struct dm_snapshot *snap = ti->private;
2351 @@ -1884,8 +1884,6 @@ static int snapshot_status(struct dm_target *ti, status_type_t type,
2352 maxlen - sz);
2353 break;
2354 }
2355 -
2356 - return 0;
2357 }
2358
2359 static int snapshot_iterate_devices(struct dm_target *ti,
2360 @@ -2139,8 +2137,8 @@ static void origin_resume(struct dm_target *ti)
2361 ti->max_io_len = get_origin_minimum_chunksize(dev->bdev);
2362 }
2363
2364 -static int origin_status(struct dm_target *ti, status_type_t type,
2365 - unsigned status_flags, char *result, unsigned maxlen)
2366 +static void origin_status(struct dm_target *ti, status_type_t type,
2367 + unsigned status_flags, char *result, unsigned maxlen)
2368 {
2369 struct dm_dev *dev = ti->private;
2370
2371 @@ -2153,8 +2151,6 @@ static int origin_status(struct dm_target *ti, status_type_t type,
2372 snprintf(result, maxlen, "%s", dev->name);
2373 break;
2374 }
2375 -
2376 - return 0;
2377 }
2378
2379 static int origin_merge(struct dm_target *ti, struct bvec_merge_data *bvm,
2380 @@ -2181,7 +2177,7 @@ static int origin_iterate_devices(struct dm_target *ti,
2381
2382 static struct target_type origin_target = {
2383 .name = "snapshot-origin",
2384 - .version = {1, 8, 0},
2385 + .version = {1, 8, 1},
2386 .module = THIS_MODULE,
2387 .ctr = origin_ctr,
2388 .dtr = origin_dtr,
2389 @@ -2194,7 +2190,7 @@ static struct target_type origin_target = {
2390
2391 static struct target_type snapshot_target = {
2392 .name = "snapshot",
2393 - .version = {1, 11, 0},
2394 + .version = {1, 11, 1},
2395 .module = THIS_MODULE,
2396 .ctr = snapshot_ctr,
2397 .dtr = snapshot_dtr,
2398 @@ -2307,3 +2303,5 @@ module_exit(dm_snapshot_exit);
2399 MODULE_DESCRIPTION(DM_NAME " snapshot target");
2400 MODULE_AUTHOR("Joe Thornber");
2401 MODULE_LICENSE("GPL");
2402 +MODULE_ALIAS("dm-snapshot-origin");
2403 +MODULE_ALIAS("dm-snapshot-merge");
2404 diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c
2405 index c89cde8..aaecefa 100644
2406 --- a/drivers/md/dm-stripe.c
2407 +++ b/drivers/md/dm-stripe.c
2408 @@ -312,8 +312,8 @@ static int stripe_map(struct dm_target *ti, struct bio *bio)
2409 *
2410 */
2411
2412 -static int stripe_status(struct dm_target *ti, status_type_t type,
2413 - unsigned status_flags, char *result, unsigned maxlen)
2414 +static void stripe_status(struct dm_target *ti, status_type_t type,
2415 + unsigned status_flags, char *result, unsigned maxlen)
2416 {
2417 struct stripe_c *sc = (struct stripe_c *) ti->private;
2418 char buffer[sc->stripes + 1];
2419 @@ -340,7 +340,6 @@ static int stripe_status(struct dm_target *ti, status_type_t type,
2420 (unsigned long long)sc->stripe[i].physical_start);
2421 break;
2422 }
2423 - return 0;
2424 }
2425
2426 static int stripe_end_io(struct dm_target *ti, struct bio *bio, int error)
2427 @@ -428,7 +427,7 @@ static int stripe_merge(struct dm_target *ti, struct bvec_merge_data *bvm,
2428
2429 static struct target_type stripe_target = {
2430 .name = "striped",
2431 - .version = {1, 5, 0},
2432 + .version = {1, 5, 1},
2433 .module = THIS_MODULE,
2434 .ctr = stripe_ctr,
2435 .dtr = stripe_dtr,
2436 diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
2437 index 5409607..7a66d73 100644
2438 --- a/drivers/md/dm-thin.c
2439 +++ b/drivers/md/dm-thin.c
2440 @@ -2299,8 +2299,8 @@ static void emit_flags(struct pool_features *pf, char *result,
2441 * <transaction id> <used metadata sectors>/<total metadata sectors>
2442 * <used data sectors>/<total data sectors> <held metadata root>
2443 */
2444 -static int pool_status(struct dm_target *ti, status_type_t type,
2445 - unsigned status_flags, char *result, unsigned maxlen)
2446 +static void pool_status(struct dm_target *ti, status_type_t type,
2447 + unsigned status_flags, char *result, unsigned maxlen)
2448 {
2449 int r;
2450 unsigned sz = 0;
2451 @@ -2326,32 +2326,41 @@ static int pool_status(struct dm_target *ti, status_type_t type,
2452 if (!(status_flags & DM_STATUS_NOFLUSH_FLAG) && !dm_suspended(ti))
2453 (void) commit_or_fallback(pool);
2454
2455 - r = dm_pool_get_metadata_transaction_id(pool->pmd,
2456 - &transaction_id);
2457 - if (r)
2458 - return r;
2459 + r = dm_pool_get_metadata_transaction_id(pool->pmd, &transaction_id);
2460 + if (r) {
2461 + DMERR("dm_pool_get_metadata_transaction_id returned %d", r);
2462 + goto err;
2463 + }
2464
2465 - r = dm_pool_get_free_metadata_block_count(pool->pmd,
2466 - &nr_free_blocks_metadata);
2467 - if (r)
2468 - return r;
2469 + r = dm_pool_get_free_metadata_block_count(pool->pmd, &nr_free_blocks_metadata);
2470 + if (r) {
2471 + DMERR("dm_pool_get_free_metadata_block_count returned %d", r);
2472 + goto err;
2473 + }
2474
2475 r = dm_pool_get_metadata_dev_size(pool->pmd, &nr_blocks_metadata);
2476 - if (r)
2477 - return r;
2478 + if (r) {
2479 + DMERR("dm_pool_get_metadata_dev_size returned %d", r);
2480 + goto err;
2481 + }
2482
2483 - r = dm_pool_get_free_block_count(pool->pmd,
2484 - &nr_free_blocks_data);
2485 - if (r)
2486 - return r;
2487 + r = dm_pool_get_free_block_count(pool->pmd, &nr_free_blocks_data);
2488 + if (r) {
2489 + DMERR("dm_pool_get_free_block_count returned %d", r);
2490 + goto err;
2491 + }
2492
2493 r = dm_pool_get_data_dev_size(pool->pmd, &nr_blocks_data);
2494 - if (r)
2495 - return r;
2496 + if (r) {
2497 + DMERR("dm_pool_get_data_dev_size returned %d", r);
2498 + goto err;
2499 + }
2500
2501 r = dm_pool_get_metadata_snap(pool->pmd, &held_root);
2502 - if (r)
2503 - return r;
2504 + if (r) {
2505 + DMERR("dm_pool_get_metadata_snap returned %d", r);
2506 + goto err;
2507 + }
2508
2509 DMEMIT("%llu %llu/%llu %llu/%llu ",
2510 (unsigned long long)transaction_id,
2511 @@ -2388,8 +2397,10 @@ static int pool_status(struct dm_target *ti, status_type_t type,
2512 emit_flags(&pt->requested_pf, result, sz, maxlen);
2513 break;
2514 }
2515 + return;
2516
2517 - return 0;
2518 +err:
2519 + DMEMIT("Error");
2520 }
2521
2522 static int pool_iterate_devices(struct dm_target *ti,
2523 @@ -2468,7 +2479,7 @@ static struct target_type pool_target = {
2524 .name = "thin-pool",
2525 .features = DM_TARGET_SINGLETON | DM_TARGET_ALWAYS_WRITEABLE |
2526 DM_TARGET_IMMUTABLE,
2527 - .version = {1, 6, 0},
2528 + .version = {1, 6, 1},
2529 .module = THIS_MODULE,
2530 .ctr = pool_ctr,
2531 .dtr = pool_dtr,
2532 @@ -2676,8 +2687,8 @@ static void thin_postsuspend(struct dm_target *ti)
2533 /*
2534 * <nr mapped sectors> <highest mapped sector>
2535 */
2536 -static int thin_status(struct dm_target *ti, status_type_t type,
2537 - unsigned status_flags, char *result, unsigned maxlen)
2538 +static void thin_status(struct dm_target *ti, status_type_t type,
2539 + unsigned status_flags, char *result, unsigned maxlen)
2540 {
2541 int r;
2542 ssize_t sz = 0;
2543 @@ -2687,7 +2698,7 @@ static int thin_status(struct dm_target *ti, status_type_t type,
2544
2545 if (get_pool_mode(tc->pool) == PM_FAIL) {
2546 DMEMIT("Fail");
2547 - return 0;
2548 + return;
2549 }
2550
2551 if (!tc->td)
2552 @@ -2696,12 +2707,16 @@ static int thin_status(struct dm_target *ti, status_type_t type,
2553 switch (type) {
2554 case STATUSTYPE_INFO:
2555 r = dm_thin_get_mapped_count(tc->td, &mapped);
2556 - if (r)
2557 - return r;
2558 + if (r) {
2559 + DMERR("dm_thin_get_mapped_count returned %d", r);
2560 + goto err;
2561 + }
2562
2563 r = dm_thin_get_highest_mapped_block(tc->td, &highest);
2564 - if (r < 0)
2565 - return r;
2566 + if (r < 0) {
2567 + DMERR("dm_thin_get_highest_mapped_block returned %d", r);
2568 + goto err;
2569 + }
2570
2571 DMEMIT("%llu ", mapped * tc->pool->sectors_per_block);
2572 if (r)
2573 @@ -2721,7 +2736,10 @@ static int thin_status(struct dm_target *ti, status_type_t type,
2574 }
2575 }
2576
2577 - return 0;
2578 + return;
2579 +
2580 +err:
2581 + DMEMIT("Error");
2582 }
2583
2584 static int thin_iterate_devices(struct dm_target *ti,
2585 @@ -2748,7 +2766,7 @@ static int thin_iterate_devices(struct dm_target *ti,
2586
2587 static struct target_type thin_target = {
2588 .name = "thin",
2589 - .version = {1, 7, 0},
2590 + .version = {1, 7, 1},
2591 .module = THIS_MODULE,
2592 .ctr = thin_ctr,
2593 .dtr = thin_dtr,
2594 diff --git a/drivers/md/dm-verity.c b/drivers/md/dm-verity.c
2595 index 52cde98..6ad5383 100644
2596 --- a/drivers/md/dm-verity.c
2597 +++ b/drivers/md/dm-verity.c
2598 @@ -508,8 +508,8 @@ static int verity_map(struct dm_target *ti, struct bio *bio)
2599 /*
2600 * Status: V (valid) or C (corruption found)
2601 */
2602 -static int verity_status(struct dm_target *ti, status_type_t type,
2603 - unsigned status_flags, char *result, unsigned maxlen)
2604 +static void verity_status(struct dm_target *ti, status_type_t type,
2605 + unsigned status_flags, char *result, unsigned maxlen)
2606 {
2607 struct dm_verity *v = ti->private;
2608 unsigned sz = 0;
2609 @@ -540,8 +540,6 @@ static int verity_status(struct dm_target *ti, status_type_t type,
2610 DMEMIT("%02x", v->salt[x]);
2611 break;
2612 }
2613 -
2614 - return 0;
2615 }
2616
2617 static int verity_ioctl(struct dm_target *ti, unsigned cmd,
2618 @@ -860,7 +858,7 @@ bad:
2619
2620 static struct target_type verity_target = {
2621 .name = "verity",
2622 - .version = {1, 1, 0},
2623 + .version = {1, 1, 1},
2624 .module = THIS_MODULE,
2625 .ctr = verity_ctr,
2626 .dtr = verity_dtr,
2627 diff --git a/drivers/md/dm.c b/drivers/md/dm.c
2628 index 314a0e2..0d8f086 100644
2629 --- a/drivers/md/dm.c
2630 +++ b/drivers/md/dm.c
2631 @@ -1973,15 +1973,27 @@ static void __bind_mempools(struct mapped_device *md, struct dm_table *t)
2632 {
2633 struct dm_md_mempools *p = dm_table_get_md_mempools(t);
2634
2635 - if (md->io_pool && (md->tio_pool || dm_table_get_type(t) == DM_TYPE_BIO_BASED) && md->bs) {
2636 - /*
2637 - * The md already has necessary mempools. Reload just the
2638 - * bioset because front_pad may have changed because
2639 - * a different table was loaded.
2640 - */
2641 - bioset_free(md->bs);
2642 - md->bs = p->bs;
2643 - p->bs = NULL;
2644 + if (md->io_pool && md->bs) {
2645 + /* The md already has necessary mempools. */
2646 + if (dm_table_get_type(t) == DM_TYPE_BIO_BASED) {
2647 + /*
2648 + * Reload bioset because front_pad may have changed
2649 + * because a different table was loaded.
2650 + */
2651 + bioset_free(md->bs);
2652 + md->bs = p->bs;
2653 + p->bs = NULL;
2654 + } else if (dm_table_get_type(t) == DM_TYPE_REQUEST_BASED) {
2655 + BUG_ON(!md->tio_pool);
2656 + /*
2657 + * There's no need to reload with request-based dm
2658 + * because the size of front_pad doesn't change.
2659 + * Note for future: If you are to reload bioset,
2660 + * prep-ed requests in the queue may refer
2661 + * to bio from the old bioset, so you must walk
2662 + * through the queue to unprep.
2663 + */
2664 + }
2665 goto out;
2666 }
2667
2668 @@ -2421,7 +2433,7 @@ static void dm_queue_flush(struct mapped_device *md)
2669 */
2670 struct dm_table *dm_swap_table(struct mapped_device *md, struct dm_table *table)
2671 {
2672 - struct dm_table *live_map, *map = ERR_PTR(-EINVAL);
2673 + struct dm_table *live_map = NULL, *map = ERR_PTR(-EINVAL);
2674 struct queue_limits limits;
2675 int r;
2676
2677 @@ -2444,10 +2456,12 @@ struct dm_table *dm_swap_table(struct mapped_device *md, struct dm_table *table)
2678 dm_table_put(live_map);
2679 }
2680
2681 - r = dm_calculate_queue_limits(table, &limits);
2682 - if (r) {
2683 - map = ERR_PTR(r);
2684 - goto out;
2685 + if (!live_map) {
2686 + r = dm_calculate_queue_limits(table, &limits);
2687 + if (r) {
2688 + map = ERR_PTR(r);
2689 + goto out;
2690 + }
2691 }
2692
2693 map = __bind(md, table, &limits);
2694 diff --git a/drivers/md/md.c b/drivers/md/md.c
2695 index 3db3d1b..f363135 100644
2696 --- a/drivers/md/md.c
2697 +++ b/drivers/md/md.c
2698 @@ -307,6 +307,10 @@ static void md_make_request(struct request_queue *q, struct bio *bio)
2699 bio_io_error(bio);
2700 return;
2701 }
2702 + if (mddev->ro == 1 && unlikely(rw == WRITE)) {
2703 + bio_endio(bio, bio_sectors(bio) == 0 ? 0 : -EROFS);
2704 + return;
2705 + }
2706 smp_rmb(); /* Ensure implications of 'active' are visible */
2707 rcu_read_lock();
2708 if (mddev->suspended) {
2709 @@ -2994,6 +2998,9 @@ rdev_size_store(struct md_rdev *rdev, const char *buf, size_t len)
2710 } else if (!sectors)
2711 sectors = (i_size_read(rdev->bdev->bd_inode) >> 9) -
2712 rdev->data_offset;
2713 + if (!my_mddev->pers->resize)
2714 + /* Cannot change size for RAID0 or Linear etc */
2715 + return -EINVAL;
2716 }
2717 if (sectors < my_mddev->dev_sectors)
2718 return -EINVAL; /* component must fit device */
2719 diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
2720 index 24b3597..d9babda 100644
2721 --- a/drivers/md/raid0.c
2722 +++ b/drivers/md/raid0.c
2723 @@ -289,7 +289,7 @@ abort:
2724 kfree(conf->strip_zone);
2725 kfree(conf->devlist);
2726 kfree(conf);
2727 - *private_conf = NULL;
2728 + *private_conf = ERR_PTR(err);
2729 return err;
2730 }
2731
2732 @@ -411,7 +411,8 @@ static sector_t raid0_size(struct mddev *mddev, sector_t sectors, int raid_disks
2733 "%s does not support generic reshape\n", __func__);
2734
2735 rdev_for_each(rdev, mddev)
2736 - array_sectors += rdev->sectors;
2737 + array_sectors += (rdev->sectors &
2738 + ~(sector_t)(mddev->chunk_sectors-1));
2739
2740 return array_sectors;
2741 }
2742 diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
2743 index d5bddfc..75b1f89 100644
2744 --- a/drivers/md/raid1.c
2745 +++ b/drivers/md/raid1.c
2746 @@ -967,6 +967,7 @@ static void raid1_unplug(struct blk_plug_cb *cb, bool from_schedule)
2747 bio_list_merge(&conf->pending_bio_list, &plug->pending);
2748 conf->pending_count += plug->pending_cnt;
2749 spin_unlock_irq(&conf->device_lock);
2750 + wake_up(&conf->wait_barrier);
2751 md_wakeup_thread(mddev->thread);
2752 kfree(plug);
2753 return;
2754 diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
2755 index 64d4824..8d925dc 100644
2756 --- a/drivers/md/raid10.c
2757 +++ b/drivers/md/raid10.c
2758 @@ -1073,6 +1073,7 @@ static void raid10_unplug(struct blk_plug_cb *cb, bool from_schedule)
2759 bio_list_merge(&conf->pending_bio_list, &plug->pending);
2760 conf->pending_count += plug->pending_cnt;
2761 spin_unlock_irq(&conf->device_lock);
2762 + wake_up(&conf->wait_barrier);
2763 md_wakeup_thread(mddev->thread);
2764 kfree(plug);
2765 return;
2766 diff --git a/drivers/memstick/host/rtsx_pci_ms.c b/drivers/memstick/host/rtsx_pci_ms.c
2767 index f5ddb82..64a779c 100644
2768 --- a/drivers/memstick/host/rtsx_pci_ms.c
2769 +++ b/drivers/memstick/host/rtsx_pci_ms.c
2770 @@ -426,6 +426,9 @@ static void rtsx_pci_ms_request(struct memstick_host *msh)
2771
2772 dev_dbg(ms_dev(host), "--> %s\n", __func__);
2773
2774 + if (rtsx_pci_card_exclusive_check(host->pcr, RTSX_MS_CARD))
2775 + return;
2776 +
2777 schedule_work(&host->handle_req);
2778 }
2779
2780 @@ -441,6 +444,10 @@ static int rtsx_pci_ms_set_param(struct memstick_host *msh,
2781 dev_dbg(ms_dev(host), "%s: param = %d, value = %d\n",
2782 __func__, param, value);
2783
2784 + err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_MS_CARD);
2785 + if (err)
2786 + return err;
2787 +
2788 switch (param) {
2789 case MEMSTICK_POWER:
2790 if (value == MEMSTICK_POWER_ON)
2791 diff --git a/drivers/mfd/rtsx_pcr.c b/drivers/mfd/rtsx_pcr.c
2792 index 9fc5700..1e2d120 100644
2793 --- a/drivers/mfd/rtsx_pcr.c
2794 +++ b/drivers/mfd/rtsx_pcr.c
2795 @@ -713,6 +713,25 @@ int rtsx_pci_card_power_off(struct rtsx_pcr *pcr, int card)
2796 }
2797 EXPORT_SYMBOL_GPL(rtsx_pci_card_power_off);
2798
2799 +int rtsx_pci_card_exclusive_check(struct rtsx_pcr *pcr, int card)
2800 +{
2801 + unsigned int cd_mask[] = {
2802 + [RTSX_SD_CARD] = SD_EXIST,
2803 + [RTSX_MS_CARD] = MS_EXIST
2804 + };
2805 +
2806 + if (!pcr->ms_pmos) {
2807 + /* When using single PMOS, accessing card is not permitted
2808 + * if the existing card is not the designated one.
2809 + */
2810 + if (pcr->card_exist & (~cd_mask[card]))
2811 + return -EIO;
2812 + }
2813 +
2814 + return 0;
2815 +}
2816 +EXPORT_SYMBOL_GPL(rtsx_pci_card_exclusive_check);
2817 +
2818 int rtsx_pci_switch_output_voltage(struct rtsx_pcr *pcr, u8 voltage)
2819 {
2820 if (pcr->ops->switch_output_voltage)
2821 @@ -758,7 +777,7 @@ static void rtsx_pci_card_detect(struct work_struct *work)
2822 struct delayed_work *dwork;
2823 struct rtsx_pcr *pcr;
2824 unsigned long flags;
2825 - unsigned int card_detect = 0;
2826 + unsigned int card_detect = 0, card_inserted, card_removed;
2827 u32 irq_status;
2828
2829 dwork = to_delayed_work(work);
2830 @@ -766,25 +785,35 @@ static void rtsx_pci_card_detect(struct work_struct *work)
2831
2832 dev_dbg(&(pcr->pci->dev), "--> %s\n", __func__);
2833
2834 + mutex_lock(&pcr->pcr_mutex);
2835 spin_lock_irqsave(&pcr->lock, flags);
2836
2837 irq_status = rtsx_pci_readl(pcr, RTSX_BIPR);
2838 dev_dbg(&(pcr->pci->dev), "irq_status: 0x%08x\n", irq_status);
2839
2840 - if (pcr->card_inserted || pcr->card_removed) {
2841 + irq_status &= CARD_EXIST;
2842 + card_inserted = pcr->card_inserted & irq_status;
2843 + card_removed = pcr->card_removed;
2844 + pcr->card_inserted = 0;
2845 + pcr->card_removed = 0;
2846 +
2847 + spin_unlock_irqrestore(&pcr->lock, flags);
2848 +
2849 + if (card_inserted || card_removed) {
2850 dev_dbg(&(pcr->pci->dev),
2851 "card_inserted: 0x%x, card_removed: 0x%x\n",
2852 - pcr->card_inserted, pcr->card_removed);
2853 + card_inserted, card_removed);
2854
2855 if (pcr->ops->cd_deglitch)
2856 - pcr->card_inserted = pcr->ops->cd_deglitch(pcr);
2857 + card_inserted = pcr->ops->cd_deglitch(pcr);
2858 +
2859 + card_detect = card_inserted | card_removed;
2860
2861 - card_detect = pcr->card_inserted | pcr->card_removed;
2862 - pcr->card_inserted = 0;
2863 - pcr->card_removed = 0;
2864 + pcr->card_exist |= card_inserted;
2865 + pcr->card_exist &= ~card_removed;
2866 }
2867
2868 - spin_unlock_irqrestore(&pcr->lock, flags);
2869 + mutex_unlock(&pcr->pcr_mutex);
2870
2871 if ((card_detect & SD_EXIST) && pcr->slots[RTSX_SD_CARD].card_event)
2872 pcr->slots[RTSX_SD_CARD].card_event(
2873 @@ -836,10 +865,6 @@ static irqreturn_t rtsx_pci_isr(int irq, void *dev_id)
2874 }
2875 }
2876
2877 - if (pcr->card_inserted || pcr->card_removed)
2878 - schedule_delayed_work(&pcr->carddet_work,
2879 - msecs_to_jiffies(200));
2880 -
2881 if (int_reg & (NEED_COMPLETE_INT | DELINK_INT)) {
2882 if (int_reg & (TRANS_FAIL_INT | DELINK_INT)) {
2883 pcr->trans_result = TRANS_RESULT_FAIL;
2884 @@ -852,6 +877,10 @@ static irqreturn_t rtsx_pci_isr(int irq, void *dev_id)
2885 }
2886 }
2887
2888 + if (pcr->card_inserted || pcr->card_removed)
2889 + schedule_delayed_work(&pcr->carddet_work,
2890 + msecs_to_jiffies(200));
2891 +
2892 spin_unlock(&pcr->lock);
2893 return IRQ_HANDLED;
2894 }
2895 @@ -974,6 +1003,14 @@ static int rtsx_pci_init_hw(struct rtsx_pcr *pcr)
2896 return err;
2897 }
2898
2899 + /* No CD interrupt if probing driver with card inserted.
2900 + * So we need to initialize pcr->card_exist here.
2901 + */
2902 + if (pcr->ops->cd_deglitch)
2903 + pcr->card_exist = pcr->ops->cd_deglitch(pcr);
2904 + else
2905 + pcr->card_exist = rtsx_pci_readl(pcr, RTSX_BIPR) & CARD_EXIST;
2906 +
2907 return 0;
2908 }
2909
2910 diff --git a/drivers/mmc/host/rtsx_pci_sdmmc.c b/drivers/mmc/host/rtsx_pci_sdmmc.c
2911 index f74b5ad..468c923 100644
2912 --- a/drivers/mmc/host/rtsx_pci_sdmmc.c
2913 +++ b/drivers/mmc/host/rtsx_pci_sdmmc.c
2914 @@ -678,12 +678,19 @@ static void sdmmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
2915 struct mmc_command *cmd = mrq->cmd;
2916 struct mmc_data *data = mrq->data;
2917 unsigned int data_size = 0;
2918 + int err;
2919
2920 if (host->eject) {
2921 cmd->error = -ENOMEDIUM;
2922 goto finish;
2923 }
2924
2925 + err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD);
2926 + if (err) {
2927 + cmd->error = err;
2928 + goto finish;
2929 + }
2930 +
2931 mutex_lock(&pcr->pcr_mutex);
2932
2933 rtsx_pci_start_run(pcr);
2934 @@ -901,6 +908,9 @@ static void sdmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
2935 if (host->eject)
2936 return;
2937
2938 + if (rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD))
2939 + return;
2940 +
2941 mutex_lock(&pcr->pcr_mutex);
2942
2943 rtsx_pci_start_run(pcr);
2944 @@ -1073,6 +1083,10 @@ static int sdmmc_switch_voltage(struct mmc_host *mmc, struct mmc_ios *ios)
2945 if (host->eject)
2946 return -ENOMEDIUM;
2947
2948 + err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD);
2949 + if (err)
2950 + return err;
2951 +
2952 mutex_lock(&pcr->pcr_mutex);
2953
2954 rtsx_pci_start_run(pcr);
2955 @@ -1122,6 +1136,10 @@ static int sdmmc_execute_tuning(struct mmc_host *mmc, u32 opcode)
2956 if (host->eject)
2957 return -ENOMEDIUM;
2958
2959 + err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD);
2960 + if (err)
2961 + return err;
2962 +
2963 mutex_lock(&pcr->pcr_mutex);
2964
2965 rtsx_pci_start_run(pcr);
2966 diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
2967 index bdb0869..f0b38fa 100644
2968 --- a/drivers/net/ethernet/broadcom/tg3.c
2969 +++ b/drivers/net/ethernet/broadcom/tg3.c
2970 @@ -1843,6 +1843,8 @@ static void tg3_link_report(struct tg3 *tp)
2971
2972 tg3_ump_link_report(tp);
2973 }
2974 +
2975 + tp->link_up = netif_carrier_ok(tp->dev);
2976 }
2977
2978 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
2979 @@ -2496,12 +2498,6 @@ static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2980 return err;
2981 }
2982
2983 -static void tg3_carrier_on(struct tg3 *tp)
2984 -{
2985 - netif_carrier_on(tp->dev);
2986 - tp->link_up = true;
2987 -}
2988 -
2989 static void tg3_carrier_off(struct tg3 *tp)
2990 {
2991 netif_carrier_off(tp->dev);
2992 @@ -2527,7 +2523,7 @@ static int tg3_phy_reset(struct tg3 *tp)
2993 return -EBUSY;
2994
2995 if (netif_running(tp->dev) && tp->link_up) {
2996 - tg3_carrier_off(tp);
2997 + netif_carrier_off(tp->dev);
2998 tg3_link_report(tp);
2999 }
3000
3001 @@ -4225,9 +4221,9 @@ static bool tg3_test_and_report_link_chg(struct tg3 *tp, int curr_link_up)
3002 {
3003 if (curr_link_up != tp->link_up) {
3004 if (curr_link_up) {
3005 - tg3_carrier_on(tp);
3006 + netif_carrier_on(tp->dev);
3007 } else {
3008 - tg3_carrier_off(tp);
3009 + netif_carrier_off(tp->dev);
3010 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3011 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
3012 }
3013 diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
3014 index 643c883..1f93880 100644
3015 --- a/drivers/net/ethernet/intel/e1000e/netdev.c
3016 +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
3017 @@ -5549,7 +5549,7 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake,
3018 */
3019 e1000e_release_hw_control(adapter);
3020
3021 - pci_disable_device(pdev);
3022 + pci_clear_master(pdev);
3023
3024 return 0;
3025 }
3026 diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
3027 index 9b73670..6214181 100644
3028 --- a/drivers/net/usb/smsc95xx.c
3029 +++ b/drivers/net/usb/smsc95xx.c
3030 @@ -1340,6 +1340,8 @@ static int smsc95xx_enter_suspend0(struct usbnet *dev)
3031 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
3032 if (ret < 0)
3033 netdev_warn(dev->net, "Error reading PM_CTRL\n");
3034 + else
3035 + ret = 0;
3036
3037 return ret;
3038 }
3039 @@ -1392,6 +1394,8 @@ static int smsc95xx_enter_suspend1(struct usbnet *dev)
3040 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
3041 if (ret < 0)
3042 netdev_warn(dev->net, "Error writing PM_CTRL\n");
3043 + else
3044 + ret = 0;
3045
3046 return ret;
3047 }
3048 @@ -1413,6 +1417,8 @@ static int smsc95xx_enter_suspend2(struct usbnet *dev)
3049 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
3050 if (ret < 0)
3051 netdev_warn(dev->net, "Error writing PM_CTRL\n");
3052 + else
3053 + ret = 0;
3054
3055 return ret;
3056 }
3057 diff --git a/drivers/net/wireless/ath/ath9k/common.h b/drivers/net/wireless/ath/ath9k/common.h
3058 index 5f845be..050ca4a 100644
3059 --- a/drivers/net/wireless/ath/ath9k/common.h
3060 +++ b/drivers/net/wireless/ath/ath9k/common.h
3061 @@ -27,7 +27,7 @@
3062 #define WME_MAX_BA WME_BA_BMP_SIZE
3063 #define ATH_TID_MAX_BUFS (2 * WME_MAX_BA)
3064
3065 -#define ATH_RSSI_DUMMY_MARKER 0x127
3066 +#define ATH_RSSI_DUMMY_MARKER 127
3067 #define ATH_RSSI_LPF_LEN 10
3068 #define RSSI_LPF_THRESHOLD -20
3069 #define ATH_RSSI_EP_MULTIPLIER (1<<7)
3070 diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h
3071 index 96bfb18..d3b099d 100644
3072 --- a/drivers/net/wireless/ath/ath9k/htc.h
3073 +++ b/drivers/net/wireless/ath/ath9k/htc.h
3074 @@ -22,6 +22,7 @@
3075 #include <linux/firmware.h>
3076 #include <linux/skbuff.h>
3077 #include <linux/netdevice.h>
3078 +#include <linux/etherdevice.h>
3079 #include <linux/leds.h>
3080 #include <linux/slab.h>
3081 #include <net/mac80211.h>
3082 diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
3083 index b6a5a08..8788621 100644
3084 --- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
3085 +++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
3086 @@ -1067,15 +1067,19 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
3087
3088 last_rssi = priv->rx.last_rssi;
3089
3090 - if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER))
3091 - rxbuf->rxstatus.rs_rssi = ATH_EP_RND(last_rssi,
3092 - ATH_RSSI_EP_MULTIPLIER);
3093 + if (ieee80211_is_beacon(hdr->frame_control) &&
3094 + !is_zero_ether_addr(common->curbssid) &&
3095 + ether_addr_equal(hdr->addr3, common->curbssid)) {
3096 + s8 rssi = rxbuf->rxstatus.rs_rssi;
3097
3098 - if (rxbuf->rxstatus.rs_rssi < 0)
3099 - rxbuf->rxstatus.rs_rssi = 0;
3100 + if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER))
3101 + rssi = ATH_EP_RND(last_rssi, ATH_RSSI_EP_MULTIPLIER);
3102
3103 - if (ieee80211_is_beacon(fc))
3104 - priv->ah->stats.avgbrssi = rxbuf->rxstatus.rs_rssi;
3105 + if (rssi < 0)
3106 + rssi = 0;
3107 +
3108 + priv->ah->stats.avgbrssi = rssi;
3109 + }
3110
3111 rx_status->mactime = be64_to_cpu(rxbuf->rxstatus.rs_tstamp);
3112 rx_status->band = hw->conf.channel->band;
3113 diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
3114 index 7cb7870..e26f92d 100644
3115 --- a/drivers/net/wireless/ath/ath9k/hw.c
3116 +++ b/drivers/net/wireless/ath/ath9k/hw.c
3117 @@ -1480,7 +1480,9 @@ static bool ath9k_hw_chip_reset(struct ath_hw *ah,
3118 reset_type = ATH9K_RESET_POWER_ON;
3119 else
3120 reset_type = ATH9K_RESET_COLD;
3121 - }
3122 + } else if (ah->chip_fullsleep || REG_READ(ah, AR_Q_TXE) ||
3123 + (REG_READ(ah, AR_CR) & AR_CR_RXE))
3124 + reset_type = ATH9K_RESET_COLD;
3125
3126 if (!ath9k_hw_set_reset_reg(ah, reset_type))
3127 return false;
3128 diff --git a/drivers/net/wireless/iwlwifi/iwl-devtrace.h b/drivers/net/wireless/iwlwifi/iwl-devtrace.h
3129 index dc7e26b..c85eb37 100644
3130 --- a/drivers/net/wireless/iwlwifi/iwl-devtrace.h
3131 +++ b/drivers/net/wireless/iwlwifi/iwl-devtrace.h
3132 @@ -349,25 +349,23 @@ TRACE_EVENT(iwlwifi_dev_rx_data,
3133 TRACE_EVENT(iwlwifi_dev_hcmd,
3134 TP_PROTO(const struct device *dev,
3135 struct iwl_host_cmd *cmd, u16 total_size,
3136 - const void *hdr, size_t hdr_len),
3137 - TP_ARGS(dev, cmd, total_size, hdr, hdr_len),
3138 + struct iwl_cmd_header *hdr),
3139 + TP_ARGS(dev, cmd, total_size, hdr),
3140 TP_STRUCT__entry(
3141 DEV_ENTRY
3142 __dynamic_array(u8, hcmd, total_size)
3143 __field(u32, flags)
3144 ),
3145 TP_fast_assign(
3146 - int i, offset = hdr_len;
3147 + int i, offset = sizeof(*hdr);
3148
3149 DEV_ASSIGN;
3150 __entry->flags = cmd->flags;
3151 - memcpy(__get_dynamic_array(hcmd), hdr, hdr_len);
3152 + memcpy(__get_dynamic_array(hcmd), hdr, sizeof(*hdr));
3153
3154 for (i = 0; i < IWL_MAX_CMD_TFDS; i++) {
3155 if (!cmd->len[i])
3156 continue;
3157 - if (!(cmd->dataflags[i] & IWL_HCMD_DFL_NOCOPY))
3158 - continue;
3159 memcpy((u8 *)__get_dynamic_array(hcmd) + offset,
3160 cmd->data[i], cmd->len[i]);
3161 offset += cmd->len[i];
3162 diff --git a/drivers/net/wireless/iwlwifi/pcie/internal.h b/drivers/net/wireless/iwlwifi/pcie/internal.h
3163 index d91d2e8..bc5e9ec 100644
3164 --- a/drivers/net/wireless/iwlwifi/pcie/internal.h
3165 +++ b/drivers/net/wireless/iwlwifi/pcie/internal.h
3166 @@ -182,6 +182,15 @@ struct iwl_queue {
3167 #define TFD_TX_CMD_SLOTS 256
3168 #define TFD_CMD_SLOTS 32
3169
3170 +/*
3171 + * The FH will write back to the first TB only, so we need
3172 + * to copy some data into the buffer regardless of whether
3173 + * it should be mapped or not. This indicates how much to
3174 + * copy, even for HCMDs it must be big enough to fit the
3175 + * DRAM scratch from the TX cmd, at least 16 bytes.
3176 + */
3177 +#define IWL_HCMD_MIN_COPY_SIZE 16
3178 +
3179 struct iwl_pcie_txq_entry {
3180 struct iwl_device_cmd *cmd;
3181 struct iwl_device_cmd *copy_cmd;
3182 diff --git a/drivers/net/wireless/iwlwifi/pcie/tx.c b/drivers/net/wireless/iwlwifi/pcie/tx.c
3183 index 6c5b867..c6cd922 100644
3184 --- a/drivers/net/wireless/iwlwifi/pcie/tx.c
3185 +++ b/drivers/net/wireless/iwlwifi/pcie/tx.c
3186 @@ -1131,10 +1131,12 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
3187 void *dup_buf = NULL;
3188 dma_addr_t phys_addr;
3189 int idx;
3190 - u16 copy_size, cmd_size;
3191 + u16 copy_size, cmd_size, dma_size;
3192 bool had_nocopy = false;
3193 int i;
3194 u32 cmd_pos;
3195 + const u8 *cmddata[IWL_MAX_CMD_TFDS];
3196 + u16 cmdlen[IWL_MAX_CMD_TFDS];
3197
3198 copy_size = sizeof(out_cmd->hdr);
3199 cmd_size = sizeof(out_cmd->hdr);
3200 @@ -1143,8 +1145,23 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
3201 BUILD_BUG_ON(IWL_MAX_CMD_TFDS > IWL_NUM_OF_TBS - 1);
3202
3203 for (i = 0; i < IWL_MAX_CMD_TFDS; i++) {
3204 + cmddata[i] = cmd->data[i];
3205 + cmdlen[i] = cmd->len[i];
3206 +
3207 if (!cmd->len[i])
3208 continue;
3209 +
3210 + /* need at least IWL_HCMD_MIN_COPY_SIZE copied */
3211 + if (copy_size < IWL_HCMD_MIN_COPY_SIZE) {
3212 + int copy = IWL_HCMD_MIN_COPY_SIZE - copy_size;
3213 +
3214 + if (copy > cmdlen[i])
3215 + copy = cmdlen[i];
3216 + cmdlen[i] -= copy;
3217 + cmddata[i] += copy;
3218 + copy_size += copy;
3219 + }
3220 +
3221 if (cmd->dataflags[i] & IWL_HCMD_DFL_NOCOPY) {
3222 had_nocopy = true;
3223 if (WARN_ON(cmd->dataflags[i] & IWL_HCMD_DFL_DUP)) {
3224 @@ -1164,7 +1181,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
3225 goto free_dup_buf;
3226 }
3227
3228 - dup_buf = kmemdup(cmd->data[i], cmd->len[i],
3229 + dup_buf = kmemdup(cmddata[i], cmdlen[i],
3230 GFP_ATOMIC);
3231 if (!dup_buf)
3232 return -ENOMEM;
3233 @@ -1174,7 +1191,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
3234 idx = -EINVAL;
3235 goto free_dup_buf;
3236 }
3237 - copy_size += cmd->len[i];
3238 + copy_size += cmdlen[i];
3239 }
3240 cmd_size += cmd->len[i];
3241 }
3242 @@ -1221,14 +1238,31 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
3243
3244 /* and copy the data that needs to be copied */
3245 cmd_pos = offsetof(struct iwl_device_cmd, payload);
3246 + copy_size = sizeof(out_cmd->hdr);
3247 for (i = 0; i < IWL_MAX_CMD_TFDS; i++) {
3248 - if (!cmd->len[i])
3249 + int copy = 0;
3250 +
3251 + if (!cmd->len)
3252 continue;
3253 - if (cmd->dataflags[i] & (IWL_HCMD_DFL_NOCOPY |
3254 - IWL_HCMD_DFL_DUP))
3255 - break;
3256 - memcpy((u8 *)out_cmd + cmd_pos, cmd->data[i], cmd->len[i]);
3257 - cmd_pos += cmd->len[i];
3258 +
3259 + /* need at least IWL_HCMD_MIN_COPY_SIZE copied */
3260 + if (copy_size < IWL_HCMD_MIN_COPY_SIZE) {
3261 + copy = IWL_HCMD_MIN_COPY_SIZE - copy_size;
3262 +
3263 + if (copy > cmd->len[i])
3264 + copy = cmd->len[i];
3265 + }
3266 +
3267 + /* copy everything if not nocopy/dup */
3268 + if (!(cmd->dataflags[i] & (IWL_HCMD_DFL_NOCOPY |
3269 + IWL_HCMD_DFL_DUP)))
3270 + copy = cmd->len[i];
3271 +
3272 + if (copy) {
3273 + memcpy((u8 *)out_cmd + cmd_pos, cmd->data[i], copy);
3274 + cmd_pos += copy;
3275 + copy_size += copy;
3276 + }
3277 }
3278
3279 WARN_ON_ONCE(txq->entries[idx].copy_cmd);
3280 @@ -1254,7 +1288,14 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
3281 out_cmd->hdr.cmd, le16_to_cpu(out_cmd->hdr.sequence),
3282 cmd_size, q->write_ptr, idx, trans_pcie->cmd_queue);
3283
3284 - phys_addr = dma_map_single(trans->dev, &out_cmd->hdr, copy_size,
3285 + /*
3286 + * If the entire command is smaller than IWL_HCMD_MIN_COPY_SIZE, we must
3287 + * still map at least that many bytes for the hardware to write back to.
3288 + * We have enough space, so that's not a problem.
3289 + */
3290 + dma_size = max_t(u16, copy_size, IWL_HCMD_MIN_COPY_SIZE);
3291 +
3292 + phys_addr = dma_map_single(trans->dev, &out_cmd->hdr, dma_size,
3293 DMA_BIDIRECTIONAL);
3294 if (unlikely(dma_mapping_error(trans->dev, phys_addr))) {
3295 idx = -ENOMEM;
3296 @@ -1262,14 +1303,15 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
3297 }
3298
3299 dma_unmap_addr_set(out_meta, mapping, phys_addr);
3300 - dma_unmap_len_set(out_meta, len, copy_size);
3301 + dma_unmap_len_set(out_meta, len, dma_size);
3302
3303 iwl_pcie_txq_build_tfd(trans, txq, phys_addr, copy_size, 1);
3304
3305 + /* map the remaining (adjusted) nocopy/dup fragments */
3306 for (i = 0; i < IWL_MAX_CMD_TFDS; i++) {
3307 - const void *data = cmd->data[i];
3308 + const void *data = cmddata[i];
3309
3310 - if (!cmd->len[i])
3311 + if (!cmdlen[i])
3312 continue;
3313 if (!(cmd->dataflags[i] & (IWL_HCMD_DFL_NOCOPY |
3314 IWL_HCMD_DFL_DUP)))
3315 @@ -1277,7 +1319,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
3316 if (cmd->dataflags[i] & IWL_HCMD_DFL_DUP)
3317 data = dup_buf;
3318 phys_addr = dma_map_single(trans->dev, (void *)data,
3319 - cmd->len[i], DMA_BIDIRECTIONAL);
3320 + cmdlen[i], DMA_BIDIRECTIONAL);
3321 if (dma_mapping_error(trans->dev, phys_addr)) {
3322 iwl_pcie_tfd_unmap(trans, out_meta,
3323 &txq->tfds[q->write_ptr],
3324 @@ -1286,7 +1328,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
3325 goto out;
3326 }
3327
3328 - iwl_pcie_txq_build_tfd(trans, txq, phys_addr, cmd->len[i], 0);
3329 + iwl_pcie_txq_build_tfd(trans, txq, phys_addr, cmdlen[i], 0);
3330 }
3331
3332 out_meta->flags = cmd->flags;
3333 @@ -1296,8 +1338,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
3334
3335 txq->need_update = 1;
3336
3337 - trace_iwlwifi_dev_hcmd(trans->dev, cmd, cmd_size,
3338 - &out_cmd->hdr, copy_size);
3339 + trace_iwlwifi_dev_hcmd(trans->dev, cmd, cmd_size, &out_cmd->hdr);
3340
3341 /* start timer if queue currently empty */
3342 if (q->read_ptr == q->write_ptr && trans_pcie->wd_timeout)
3343 diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
3344 index 739309e..4557833 100644
3345 --- a/drivers/net/wireless/libertas/if_sdio.c
3346 +++ b/drivers/net/wireless/libertas/if_sdio.c
3347 @@ -825,6 +825,11 @@ static void if_sdio_finish_power_on(struct if_sdio_card *card)
3348
3349 sdio_release_host(func);
3350
3351 + /* Set fw_ready before queuing any commands so that
3352 + * lbs_thread won't block from sending them to firmware.
3353 + */
3354 + priv->fw_ready = 1;
3355 +
3356 /*
3357 * FUNC_INIT is required for SD8688 WLAN/BT multiple functions
3358 */
3359 @@ -839,7 +844,6 @@ static void if_sdio_finish_power_on(struct if_sdio_card *card)
3360 netdev_alert(priv->dev, "CMD_FUNC_INIT cmd failed\n");
3361 }
3362
3363 - priv->fw_ready = 1;
3364 wake_up(&card->pwron_waitq);
3365
3366 if (!card->started) {
3367 diff --git a/drivers/net/wireless/mwifiex/pcie.c b/drivers/net/wireless/mwifiex/pcie.c
3368 index b879e13..0bbea88 100644
3369 --- a/drivers/net/wireless/mwifiex/pcie.c
3370 +++ b/drivers/net/wireless/mwifiex/pcie.c
3371 @@ -291,7 +291,7 @@ static int mwifiex_pm_wakeup_card(struct mwifiex_adapter *adapter)
3372 i++;
3373 usleep_range(10, 20);
3374 /* 50ms max wait */
3375 - if (i == 50000)
3376 + if (i == 5000)
3377 break;
3378 }
3379
3380 diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
3381 index afed701..684ce75 100644
3382 --- a/drivers/platform/x86/acer-wmi.c
3383 +++ b/drivers/platform/x86/acer-wmi.c
3384 @@ -1204,6 +1204,9 @@ static acpi_status WMID_set_capabilities(void)
3385 devices = *((u32 *) obj->buffer.pointer);
3386 } else if (obj->type == ACPI_TYPE_INTEGER) {
3387 devices = (u32) obj->integer.value;
3388 + } else {
3389 + kfree(out.pointer);
3390 + return AE_ERROR;
3391 }
3392 } else {
3393 kfree(out.pointer);
3394 diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
3395 index b8ad71f..0fe987f 100644
3396 --- a/drivers/platform/x86/sony-laptop.c
3397 +++ b/drivers/platform/x86/sony-laptop.c
3398 @@ -1534,7 +1534,7 @@ static int sony_nc_rfkill_set(void *data, bool blocked)
3399 int argument = sony_rfkill_address[(long) data] + 0x100;
3400
3401 if (!blocked)
3402 - argument |= 0x030000;
3403 + argument |= 0x070000;
3404
3405 return sony_call_snc_handle(sony_rfkill_handle, argument, &result);
3406 }
3407 diff --git a/drivers/rtc/rtc-mv.c b/drivers/rtc/rtc-mv.c
3408 index 57233c8..8f87fec 100644
3409 --- a/drivers/rtc/rtc-mv.c
3410 +++ b/drivers/rtc/rtc-mv.c
3411 @@ -14,6 +14,7 @@
3412 #include <linux/platform_device.h>
3413 #include <linux/of.h>
3414 #include <linux/delay.h>
3415 +#include <linux/clk.h>
3416 #include <linux/gfp.h>
3417 #include <linux/module.h>
3418
3419 @@ -41,6 +42,7 @@ struct rtc_plat_data {
3420 struct rtc_device *rtc;
3421 void __iomem *ioaddr;
3422 int irq;
3423 + struct clk *clk;
3424 };
3425
3426 static int mv_rtc_set_time(struct device *dev, struct rtc_time *tm)
3427 @@ -221,6 +223,7 @@ static int mv_rtc_probe(struct platform_device *pdev)
3428 struct rtc_plat_data *pdata;
3429 resource_size_t size;
3430 u32 rtc_time;
3431 + int ret = 0;
3432
3433 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
3434 if (!res)
3435 @@ -239,11 +242,17 @@ static int mv_rtc_probe(struct platform_device *pdev)
3436 if (!pdata->ioaddr)
3437 return -ENOMEM;
3438
3439 + pdata->clk = devm_clk_get(&pdev->dev, NULL);
3440 + /* Not all SoCs require a clock.*/
3441 + if (!IS_ERR(pdata->clk))
3442 + clk_prepare_enable(pdata->clk);
3443 +
3444 /* make sure the 24 hours mode is enabled */
3445 rtc_time = readl(pdata->ioaddr + RTC_TIME_REG_OFFS);
3446 if (rtc_time & RTC_HOURS_12H_MODE) {
3447 dev_err(&pdev->dev, "24 Hours mode not supported.\n");
3448 - return -EINVAL;
3449 + ret = -EINVAL;
3450 + goto out;
3451 }
3452
3453 /* make sure it is actually functional */
3454 @@ -252,7 +261,8 @@ static int mv_rtc_probe(struct platform_device *pdev)
3455 rtc_time = readl(pdata->ioaddr + RTC_TIME_REG_OFFS);
3456 if (rtc_time == 0x01000000) {
3457 dev_err(&pdev->dev, "internal RTC not ticking\n");
3458 - return -ENODEV;
3459 + ret = -ENODEV;
3460 + goto out;
3461 }
3462 }
3463
3464 @@ -268,8 +278,10 @@ static int mv_rtc_probe(struct platform_device *pdev)
3465 } else
3466 pdata->rtc = rtc_device_register(pdev->name, &pdev->dev,
3467 &mv_rtc_ops, THIS_MODULE);
3468 - if (IS_ERR(pdata->rtc))
3469 - return PTR_ERR(pdata->rtc);
3470 + if (IS_ERR(pdata->rtc)) {
3471 + ret = PTR_ERR(pdata->rtc);
3472 + goto out;
3473 + }
3474
3475 if (pdata->irq >= 0) {
3476 writel(0, pdata->ioaddr + RTC_ALARM_INTERRUPT_MASK_REG_OFFS);
3477 @@ -282,6 +294,11 @@ static int mv_rtc_probe(struct platform_device *pdev)
3478 }
3479
3480 return 0;
3481 +out:
3482 + if (!IS_ERR(pdata->clk))
3483 + clk_disable_unprepare(pdata->clk);
3484 +
3485 + return ret;
3486 }
3487
3488 static int __exit mv_rtc_remove(struct platform_device *pdev)
3489 @@ -292,6 +309,9 @@ static int __exit mv_rtc_remove(struct platform_device *pdev)
3490 device_init_wakeup(&pdev->dev, 0);
3491
3492 rtc_device_unregister(pdata->rtc);
3493 + if (!IS_ERR(pdata->clk))
3494 + clk_disable_unprepare(pdata->clk);
3495 +
3496 return 0;
3497 }
3498
3499 diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c
3500 index 865c64f..fed486bf 100644
3501 --- a/drivers/scsi/dc395x.c
3502 +++ b/drivers/scsi/dc395x.c
3503 @@ -3747,13 +3747,13 @@ static struct DeviceCtlBlk *device_alloc(struct AdapterCtlBlk *acb,
3504 dcb->max_command = 1;
3505 dcb->target_id = target;
3506 dcb->target_lun = lun;
3507 + dcb->dev_mode = eeprom->target[target].cfg0;
3508 #ifndef DC395x_NO_DISCONNECT
3509 dcb->identify_msg =
3510 IDENTIFY(dcb->dev_mode & NTC_DO_DISCONNECT, lun);
3511 #else
3512 dcb->identify_msg = IDENTIFY(0, lun);
3513 #endif
3514 - dcb->dev_mode = eeprom->target[target].cfg0;
3515 dcb->inquiry7 = 0;
3516 dcb->sync_mode = 0;
3517 dcb->min_nego_period = clock_period[period_index];
3518 diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
3519 index 0144078..9f4e560 100644
3520 --- a/drivers/scsi/storvsc_drv.c
3521 +++ b/drivers/scsi/storvsc_drv.c
3522 @@ -467,6 +467,7 @@ static struct scatterlist *create_bounce_buffer(struct scatterlist *sgl,
3523 if (!bounce_sgl)
3524 return NULL;
3525
3526 + sg_init_table(bounce_sgl, num_pages);
3527 for (i = 0; i < num_pages; i++) {
3528 page_buf = alloc_page(GFP_ATOMIC);
3529 if (!page_buf)
3530 diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
3531 index 339f97f..42a2bf7 100644
3532 --- a/drivers/target/iscsi/iscsi_target.c
3533 +++ b/drivers/target/iscsi/iscsi_target.c
3534 @@ -3570,6 +3570,10 @@ check_rsp_state:
3535 spin_lock_bh(&cmd->istate_lock);
3536 cmd->i_state = ISTATE_SENT_STATUS;
3537 spin_unlock_bh(&cmd->istate_lock);
3538 +
3539 + if (atomic_read(&conn->check_immediate_queue))
3540 + return 1;
3541 +
3542 continue;
3543 } else if (ret == 2) {
3544 /* Still must send status,
3545 @@ -3659,7 +3663,7 @@ check_rsp_state:
3546 }
3547
3548 if (atomic_read(&conn->check_immediate_queue))
3549 - break;
3550 + return 1;
3551 }
3552
3553 return 0;
3554 @@ -3703,12 +3707,15 @@ restart:
3555 signal_pending(current))
3556 goto transport_err;
3557
3558 +get_immediate:
3559 ret = handle_immediate_queue(conn);
3560 if (ret < 0)
3561 goto transport_err;
3562
3563 ret = handle_response_queue(conn);
3564 - if (ret == -EAGAIN)
3565 + if (ret == 1)
3566 + goto get_immediate;
3567 + else if (ret == -EAGAIN)
3568 goto restart;
3569 else if (ret < 0)
3570 goto transport_err;
3571 diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
3572 index 2bcfd79..55b9530 100644
3573 --- a/drivers/target/target_core_pscsi.c
3574 +++ b/drivers/target/target_core_pscsi.c
3575 @@ -940,7 +940,6 @@ pscsi_map_sg(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
3576 bio = NULL;
3577 }
3578
3579 - page++;
3580 len -= bytes;
3581 data_len -= bytes;
3582 off = 0;
3583 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
3584 index cbf7168..2a89588 100644
3585 --- a/drivers/usb/core/hub.c
3586 +++ b/drivers/usb/core/hub.c
3587 @@ -2538,70 +2538,35 @@ static int hub_port_wait_reset(struct usb_hub *hub, int port1,
3588 if ((portstatus & USB_PORT_STAT_RESET))
3589 goto delay;
3590
3591 - /*
3592 - * Some buggy devices require a warm reset to be issued even
3593 - * when the port appears not to be connected.
3594 + if (hub_port_warm_reset_required(hub, portstatus))
3595 + return -ENOTCONN;
3596 +
3597 + /* Device went away? */
3598 + if (!(portstatus & USB_PORT_STAT_CONNECTION))
3599 + return -ENOTCONN;
3600 +
3601 + /* bomb out completely if the connection bounced. A USB 3.0
3602 + * connection may bounce if multiple warm resets were issued,
3603 + * but the device may have successfully re-connected. Ignore it.
3604 */
3605 - if (!warm) {
3606 - /*
3607 - * Some buggy devices can cause an NEC host controller
3608 - * to transition to the "Error" state after a hot port
3609 - * reset. This will show up as the port state in
3610 - * "Inactive", and the port may also report a
3611 - * disconnect. Forcing a warm port reset seems to make
3612 - * the device work.
3613 - *
3614 - * See https://bugzilla.kernel.org/show_bug.cgi?id=41752
3615 - */
3616 - if (hub_port_warm_reset_required(hub, portstatus)) {
3617 - int ret;
3618 -
3619 - if ((portchange & USB_PORT_STAT_C_CONNECTION))
3620 - clear_port_feature(hub->hdev, port1,
3621 - USB_PORT_FEAT_C_CONNECTION);
3622 - if (portchange & USB_PORT_STAT_C_LINK_STATE)
3623 - clear_port_feature(hub->hdev, port1,
3624 - USB_PORT_FEAT_C_PORT_LINK_STATE);
3625 - if (portchange & USB_PORT_STAT_C_RESET)
3626 - clear_port_feature(hub->hdev, port1,
3627 - USB_PORT_FEAT_C_RESET);
3628 - dev_dbg(hub->intfdev, "hot reset failed, warm reset port %d\n",
3629 - port1);
3630 - ret = hub_port_reset(hub, port1,
3631 - udev, HUB_BH_RESET_TIME,
3632 - true);
3633 - if ((portchange & USB_PORT_STAT_C_CONNECTION))
3634 - clear_port_feature(hub->hdev, port1,
3635 - USB_PORT_FEAT_C_CONNECTION);
3636 - return ret;
3637 - }
3638 - /* Device went away? */
3639 - if (!(portstatus & USB_PORT_STAT_CONNECTION))
3640 - return -ENOTCONN;
3641 -
3642 - /* bomb out completely if the connection bounced */
3643 - if ((portchange & USB_PORT_STAT_C_CONNECTION))
3644 - return -ENOTCONN;
3645 -
3646 - if ((portstatus & USB_PORT_STAT_ENABLE)) {
3647 - if (hub_is_wusb(hub))
3648 - udev->speed = USB_SPEED_WIRELESS;
3649 - else if (hub_is_superspeed(hub->hdev))
3650 - udev->speed = USB_SPEED_SUPER;
3651 - else if (portstatus & USB_PORT_STAT_HIGH_SPEED)
3652 - udev->speed = USB_SPEED_HIGH;
3653 - else if (portstatus & USB_PORT_STAT_LOW_SPEED)
3654 - udev->speed = USB_SPEED_LOW;
3655 - else
3656 - udev->speed = USB_SPEED_FULL;
3657 + if (!hub_is_superspeed(hub->hdev) &&
3658 + (portchange & USB_PORT_STAT_C_CONNECTION))
3659 + return -ENOTCONN;
3660 +
3661 + if ((portstatus & USB_PORT_STAT_ENABLE)) {
3662 + if (!udev)
3663 return 0;
3664 - }
3665 - } else {
3666 - if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
3667 - hub_port_warm_reset_required(hub,
3668 - portstatus))
3669 - return -ENOTCONN;
3670
3671 + if (hub_is_wusb(hub))
3672 + udev->speed = USB_SPEED_WIRELESS;
3673 + else if (hub_is_superspeed(hub->hdev))
3674 + udev->speed = USB_SPEED_SUPER;
3675 + else if (portstatus & USB_PORT_STAT_HIGH_SPEED)
3676 + udev->speed = USB_SPEED_HIGH;
3677 + else if (portstatus & USB_PORT_STAT_LOW_SPEED)
3678 + udev->speed = USB_SPEED_LOW;
3679 + else
3680 + udev->speed = USB_SPEED_FULL;
3681 return 0;
3682 }
3683
3684 @@ -2619,16 +2584,16 @@ delay:
3685 }
3686
3687 static void hub_port_finish_reset(struct usb_hub *hub, int port1,
3688 - struct usb_device *udev, int *status, bool warm)
3689 + struct usb_device *udev, int *status)
3690 {
3691 switch (*status) {
3692 case 0:
3693 - if (!warm) {
3694 - struct usb_hcd *hcd;
3695 - /* TRSTRCY = 10 ms; plus some extra */
3696 - msleep(10 + 40);
3697 + /* TRSTRCY = 10 ms; plus some extra */
3698 + msleep(10 + 40);
3699 + if (udev) {
3700 + struct usb_hcd *hcd = bus_to_hcd(udev->bus);
3701 +
3702 update_devnum(udev, 0);
3703 - hcd = bus_to_hcd(udev->bus);
3704 /* The xHC may think the device is already reset,
3705 * so ignore the status.
3706 */
3707 @@ -2640,14 +2605,15 @@ static void hub_port_finish_reset(struct usb_hub *hub, int port1,
3708 case -ENODEV:
3709 clear_port_feature(hub->hdev,
3710 port1, USB_PORT_FEAT_C_RESET);
3711 - /* FIXME need disconnect() for NOTATTACHED device */
3712 if (hub_is_superspeed(hub->hdev)) {
3713 clear_port_feature(hub->hdev, port1,
3714 USB_PORT_FEAT_C_BH_PORT_RESET);
3715 clear_port_feature(hub->hdev, port1,
3716 USB_PORT_FEAT_C_PORT_LINK_STATE);
3717 + clear_port_feature(hub->hdev, port1,
3718 + USB_PORT_FEAT_C_CONNECTION);
3719 }
3720 - if (!warm)
3721 + if (udev)
3722 usb_set_device_state(udev, *status
3723 ? USB_STATE_NOTATTACHED
3724 : USB_STATE_DEFAULT);
3725 @@ -2660,18 +2626,30 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
3726 struct usb_device *udev, unsigned int delay, bool warm)
3727 {
3728 int i, status;
3729 + u16 portchange, portstatus;
3730
3731 - if (!warm) {
3732 - /* Block EHCI CF initialization during the port reset.
3733 - * Some companion controllers don't like it when they mix.
3734 - */
3735 - down_read(&ehci_cf_port_reset_rwsem);
3736 - } else {
3737 - if (!hub_is_superspeed(hub->hdev)) {
3738 + if (!hub_is_superspeed(hub->hdev)) {
3739 + if (warm) {
3740 dev_err(hub->intfdev, "only USB3 hub support "
3741 "warm reset\n");
3742 return -EINVAL;
3743 }
3744 + /* Block EHCI CF initialization during the port reset.
3745 + * Some companion controllers don't like it when they mix.
3746 + */
3747 + down_read(&ehci_cf_port_reset_rwsem);
3748 + } else if (!warm) {
3749 + /*
3750 + * If the caller hasn't explicitly requested a warm reset,
3751 + * double check and see if one is needed.
3752 + */
3753 + status = hub_port_status(hub, port1,
3754 + &portstatus, &portchange);
3755 + if (status < 0)
3756 + goto done;
3757 +
3758 + if (hub_port_warm_reset_required(hub, portstatus))
3759 + warm = true;
3760 }
3761
3762 /* Reset the port */
3763 @@ -2692,10 +2670,33 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
3764 status);
3765 }
3766
3767 - /* return on disconnect or reset */
3768 + /* Check for disconnect or reset */
3769 if (status == 0 || status == -ENOTCONN || status == -ENODEV) {
3770 - hub_port_finish_reset(hub, port1, udev, &status, warm);
3771 - goto done;
3772 + hub_port_finish_reset(hub, port1, udev, &status);
3773 +
3774 + if (!hub_is_superspeed(hub->hdev))
3775 + goto done;
3776 +
3777 + /*
3778 + * If a USB 3.0 device migrates from reset to an error
3779 + * state, re-issue the warm reset.
3780 + */
3781 + if (hub_port_status(hub, port1,
3782 + &portstatus, &portchange) < 0)
3783 + goto done;
3784 +
3785 + if (!hub_port_warm_reset_required(hub, portstatus))
3786 + goto done;
3787 +
3788 + /*
3789 + * If the port is in SS.Inactive or Compliance Mode, the
3790 + * hot or warm reset failed. Try another warm reset.
3791 + */
3792 + if (!warm) {
3793 + dev_dbg(hub->intfdev, "hot reset failed, warm reset port %d\n",
3794 + port1);
3795 + warm = true;
3796 + }
3797 }
3798
3799 dev_dbg (hub->intfdev,
3800 @@ -2709,7 +2710,7 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
3801 port1);
3802
3803 done:
3804 - if (!warm)
3805 + if (!hub_is_superspeed(hub->hdev))
3806 up_read(&ehci_cf_port_reset_rwsem);
3807
3808 return status;
3809 @@ -4740,12 +4741,21 @@ static void hub_events(void)
3810 */
3811 if (hub_port_warm_reset_required(hub, portstatus)) {
3812 int status;
3813 + struct usb_device *udev =
3814 + hub->ports[i - 1]->child;
3815
3816 dev_dbg(hub_dev, "warm reset port %d\n", i);
3817 - status = hub_port_reset(hub, i, NULL,
3818 - HUB_BH_RESET_TIME, true);
3819 - if (status < 0)
3820 - hub_port_disable(hub, i, 1);
3821 + if (!udev) {
3822 + status = hub_port_reset(hub, i,
3823 + NULL, HUB_BH_RESET_TIME,
3824 + true);
3825 + if (status < 0)
3826 + hub_port_disable(hub, i, 1);
3827 + } else {
3828 + usb_lock_device(udev);
3829 + status = usb_reset_device(udev);
3830 + usb_unlock_device(udev);
3831 + }
3832 connect_change = 0;
3833 }
3834
3835 diff --git a/drivers/usb/host/ehci-timer.c b/drivers/usb/host/ehci-timer.c
3836 index f904071..20dbdcb 100644
3837 --- a/drivers/usb/host/ehci-timer.c
3838 +++ b/drivers/usb/host/ehci-timer.c
3839 @@ -113,15 +113,14 @@ static void ehci_poll_ASS(struct ehci_hcd *ehci)
3840
3841 if (want != actual) {
3842
3843 - /* Poll again later */
3844 - ehci_enable_event(ehci, EHCI_HRTIMER_POLL_ASS, true);
3845 - ++ehci->ASS_poll_count;
3846 - return;
3847 + /* Poll again later, but give up after about 20 ms */
3848 + if (ehci->ASS_poll_count++ < 20) {
3849 + ehci_enable_event(ehci, EHCI_HRTIMER_POLL_ASS, true);
3850 + return;
3851 + }
3852 + ehci_dbg(ehci, "Waited too long for the async schedule status (%x/%x), giving up\n",
3853 + want, actual);
3854 }
3855 -
3856 - if (ehci->ASS_poll_count > 20)
3857 - ehci_dbg(ehci, "ASS poll count reached %d\n",
3858 - ehci->ASS_poll_count);
3859 ehci->ASS_poll_count = 0;
3860
3861 /* The status is up-to-date; restart or stop the schedule as needed */
3862 @@ -160,14 +159,14 @@ static void ehci_poll_PSS(struct ehci_hcd *ehci)
3863
3864 if (want != actual) {
3865
3866 - /* Poll again later */
3867 - ehci_enable_event(ehci, EHCI_HRTIMER_POLL_PSS, true);
3868 - return;
3869 + /* Poll again later, but give up after about 20 ms */
3870 + if (ehci->PSS_poll_count++ < 20) {
3871 + ehci_enable_event(ehci, EHCI_HRTIMER_POLL_PSS, true);
3872 + return;
3873 + }
3874 + ehci_dbg(ehci, "Waited too long for the periodic schedule status (%x/%x), giving up\n",
3875 + want, actual);
3876 }
3877 -
3878 - if (ehci->PSS_poll_count > 20)
3879 - ehci_dbg(ehci, "PSS poll count reached %d\n",
3880 - ehci->PSS_poll_count);
3881 ehci->PSS_poll_count = 0;
3882
3883 /* The status is up-to-date; restart or stop the schedule as needed */
3884 diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c
3885 index 85b363a..d39dfa4 100644
3886 --- a/drivers/w1/masters/w1-gpio.c
3887 +++ b/drivers/w1/masters/w1-gpio.c
3888 @@ -72,7 +72,7 @@ static int w1_gpio_probe_dt(struct platform_device *pdev)
3889 return 0;
3890 }
3891
3892 -static int __init w1_gpio_probe(struct platform_device *pdev)
3893 +static int w1_gpio_probe(struct platform_device *pdev)
3894 {
3895 struct w1_bus_master *master;
3896 struct w1_gpio_platform_data *pdata;
3897 diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
3898 index 7f809fd..19fa73a 100644
3899 --- a/drivers/watchdog/Kconfig
3900 +++ b/drivers/watchdog/Kconfig
3901 @@ -79,6 +79,7 @@ config DA9052_WATCHDOG
3902 config DA9055_WATCHDOG
3903 tristate "Dialog Semiconductor DA9055 Watchdog"
3904 depends on MFD_DA9055
3905 + select WATCHDOG_CORE
3906 help
3907 If you say yes here you get support for watchdog on the Dialog
3908 Semiconductor DA9055 PMIC.
3909 diff --git a/drivers/watchdog/sp5100_tco.c b/drivers/watchdog/sp5100_tco.c
3910 index 2b0e000..e3b8f75 100644
3911 --- a/drivers/watchdog/sp5100_tco.c
3912 +++ b/drivers/watchdog/sp5100_tco.c
3913 @@ -361,7 +361,7 @@ static unsigned char sp5100_tco_setupdevice(void)
3914 {
3915 struct pci_dev *dev = NULL;
3916 const char *dev_name = NULL;
3917 - u32 val;
3918 + u32 val, tmp_val;
3919 u32 index_reg, data_reg, base_addr;
3920
3921 /* Match the PCI device */
3922 @@ -497,30 +497,19 @@ static unsigned char sp5100_tco_setupdevice(void)
3923 pr_debug("Got 0x%04x from resource tree\n", val);
3924 }
3925
3926 - /* Restore to the low three bits, if chipset is SB8x0(or later) */
3927 - if (sp5100_tco_pci->revision >= 0x40) {
3928 - u8 reserved_bit;
3929 - reserved_bit = inb(base_addr) & 0x7;
3930 - val |= (u32)reserved_bit;
3931 - }
3932 + /* Restore to the low three bits */
3933 + outb(base_addr+0, index_reg);
3934 + tmp_val = val | (inb(data_reg) & 0x7);
3935
3936 /* Re-programming the watchdog timer base address */
3937 outb(base_addr+0, index_reg);
3938 - /* Low three bits of BASE are reserved */
3939 - outb((val >> 0) & 0xf8, data_reg);
3940 + outb((tmp_val >> 0) & 0xff, data_reg);
3941 outb(base_addr+1, index_reg);
3942 - outb((val >> 8) & 0xff, data_reg);
3943 + outb((tmp_val >> 8) & 0xff, data_reg);
3944 outb(base_addr+2, index_reg);
3945 - outb((val >> 16) & 0xff, data_reg);
3946 + outb((tmp_val >> 16) & 0xff, data_reg);
3947 outb(base_addr+3, index_reg);
3948 - outb((val >> 24) & 0xff, data_reg);
3949 -
3950 - /*
3951 - * Clear unnecessary the low three bits,
3952 - * if chipset is SB8x0(or later)
3953 - */
3954 - if (sp5100_tco_pci->revision >= 0x40)
3955 - val &= ~0x7;
3956 + outb((tmp_val >> 24) & 0xff, data_reg);
3957
3958 if (!request_mem_region_exclusive(val, SP5100_WDT_MEM_MAP_SIZE,
3959 dev_name)) {
3960 diff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c
3961 index bcf3ba4..61786be 100644
3962 --- a/drivers/xen/xenbus/xenbus_client.c
3963 +++ b/drivers/xen/xenbus/xenbus_client.c
3964 @@ -30,6 +30,7 @@
3965 * IN THE SOFTWARE.
3966 */
3967
3968 +#include <linux/mm.h>
3969 #include <linux/slab.h>
3970 #include <linux/types.h>
3971 #include <linux/spinlock.h>
3972 diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
3973 index cc93b23..659ea81 100644
3974 --- a/fs/btrfs/inode.c
3975 +++ b/fs/btrfs/inode.c
3976 @@ -265,6 +265,7 @@ static noinline int cow_file_range_inline(struct btrfs_trans_handle *trans,
3977 return 1;
3978 }
3979
3980 + set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &BTRFS_I(inode)->runtime_flags);
3981 btrfs_delalloc_release_metadata(inode, end + 1 - start);
3982 btrfs_drop_extent_cache(inode, start, aligned_end - 1, 0);
3983 return 0;
3984 @@ -2469,6 +2470,7 @@ int btrfs_orphan_cleanup(struct btrfs_root *root)
3985 */
3986 set_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
3987 &BTRFS_I(inode)->runtime_flags);
3988 + atomic_inc(&root->orphan_inodes);
3989
3990 /* if we have links, this was a truncate, lets do that */
3991 if (inode->i_nlink) {
3992 @@ -2491,6 +2493,8 @@ int btrfs_orphan_cleanup(struct btrfs_root *root)
3993 goto out;
3994
3995 ret = btrfs_truncate(inode);
3996 + if (ret)
3997 + btrfs_orphan_del(NULL, inode);
3998 } else {
3999 nr_unlink++;
4000 }
4001 diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
4002 index 9027bb1..b6818ee 100644
4003 --- a/fs/btrfs/tree-log.c
4004 +++ b/fs/btrfs/tree-log.c
4005 @@ -3281,6 +3281,7 @@ static int log_one_extent(struct btrfs_trans_handle *trans,
4006 int ret;
4007 bool skip_csum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM;
4008
4009 +insert:
4010 INIT_LIST_HEAD(&ordered_sums);
4011 btrfs_init_map_token(&token);
4012 key.objectid = btrfs_ino(inode);
4013 @@ -3296,6 +3297,23 @@ static int log_one_extent(struct btrfs_trans_handle *trans,
4014 leaf = path->nodes[0];
4015 fi = btrfs_item_ptr(leaf, path->slots[0],
4016 struct btrfs_file_extent_item);
4017 +
4018 + /*
4019 + * If we are overwriting an inline extent with a real one then we need
4020 + * to just delete the inline extent as it may not be large enough to
4021 + * have the entire file_extent_item.
4022 + */
4023 + if (ret && btrfs_token_file_extent_type(leaf, fi, &token) ==
4024 + BTRFS_FILE_EXTENT_INLINE) {
4025 + ret = btrfs_del_item(trans, log, path);
4026 + btrfs_release_path(path);
4027 + if (ret) {
4028 + path->really_keep_locks = 0;
4029 + return ret;
4030 + }
4031 + goto insert;
4032 + }
4033 +
4034 btrfs_set_token_file_extent_generation(leaf, fi, em->generation,
4035 &token);
4036 if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags)) {
4037 diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
4038 index 5cbb7f4..ac8ff8d 100644
4039 --- a/fs/btrfs/volumes.c
4040 +++ b/fs/btrfs/volumes.c
4041 @@ -647,6 +647,7 @@ static int __btrfs_close_devices(struct btrfs_fs_devices *fs_devices)
4042 new_device->writeable = 0;
4043 new_device->in_fs_metadata = 0;
4044 new_device->can_discard = 0;
4045 + spin_lock_init(&new_device->io_lock);
4046 list_replace_rcu(&device->dev_list, &new_device->dev_list);
4047
4048 call_rcu(&device->rcu, free_device);
4049 diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
4050 index de7f916..e328339 100644
4051 --- a/fs/cifs/cifsfs.c
4052 +++ b/fs/cifs/cifsfs.c
4053 @@ -558,6 +558,11 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb)
4054 dentry = ERR_PTR(-ENOENT);
4055 break;
4056 }
4057 + if (!S_ISDIR(dir->i_mode)) {
4058 + dput(dentry);
4059 + dentry = ERR_PTR(-ENOTDIR);
4060 + break;
4061 + }
4062
4063 /* skip separators */
4064 while (*s == sep)
4065 diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
4066 index c9c7aa7..bceffe7 100644
4067 --- a/fs/cifs/smb2ops.c
4068 +++ b/fs/cifs/smb2ops.c
4069 @@ -744,4 +744,5 @@ struct smb_version_values smb30_values = {
4070 .cap_unix = 0,
4071 .cap_nt_find = SMB2_NT_FIND,
4072 .cap_large_files = SMB2_LARGE_FILES,
4073 + .oplock_read = SMB2_OPLOCK_LEVEL_II,
4074 };
4075 diff --git a/fs/compat.c b/fs/compat.c
4076 index 015e1e1..a06dcbc 100644
4077 --- a/fs/compat.c
4078 +++ b/fs/compat.c
4079 @@ -558,6 +558,10 @@ ssize_t compat_rw_copy_check_uvector(int type,
4080 }
4081 *ret_pointer = iov;
4082
4083 + ret = -EFAULT;
4084 + if (!access_ok(VERIFY_READ, uvector, nr_segs*sizeof(*uvector)))
4085 + goto out;
4086 +
4087 /*
4088 * Single unix specification:
4089 * We should -EINVAL if an element length is not >= 0 and fitting an
4090 @@ -1080,17 +1084,12 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
4091 if (!file->f_op)
4092 goto out;
4093
4094 - ret = -EFAULT;
4095 - if (!access_ok(VERIFY_READ, uvector, nr_segs*sizeof(*uvector)))
4096 - goto out;
4097 -
4098 - tot_len = compat_rw_copy_check_uvector(type, uvector, nr_segs,
4099 + ret = compat_rw_copy_check_uvector(type, uvector, nr_segs,
4100 UIO_FASTIOV, iovstack, &iov);
4101 - if (tot_len == 0) {
4102 - ret = 0;
4103 + if (ret <= 0)
4104 goto out;
4105 - }
4106
4107 + tot_len = ret;
4108 ret = rw_verify_area(type, file, pos, tot_len);
4109 if (ret < 0)
4110 goto out;
4111 diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
4112 index 2f2e0da..92e68b3 100644
4113 --- a/fs/ext4/balloc.c
4114 +++ b/fs/ext4/balloc.c
4115 @@ -635,7 +635,7 @@ ext4_fsblk_t ext4_count_free_clusters(struct super_block *sb)
4116 brelse(bitmap_bh);
4117 printk(KERN_DEBUG "ext4_count_free_clusters: stored = %llu"
4118 ", computed = %llu, %llu\n",
4119 - EXT4_B2C(EXT4_SB(sb), ext4_free_blocks_count(es)),
4120 + EXT4_NUM_B2C(EXT4_SB(sb), ext4_free_blocks_count(es)),
4121 desc_count, bitmap_count);
4122 return bitmap_count;
4123 #else
4124 diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
4125 index 061727a..28bbf9b 100644
4126 --- a/fs/ext4/mballoc.c
4127 +++ b/fs/ext4/mballoc.c
4128 @@ -3444,7 +3444,7 @@ ext4_mb_new_inode_pa(struct ext4_allocation_context *ac)
4129 win = offs;
4130
4131 ac->ac_b_ex.fe_logical = ac->ac_o_ex.fe_logical -
4132 - EXT4_B2C(sbi, win);
4133 + EXT4_NUM_B2C(sbi, win);
4134 BUG_ON(ac->ac_o_ex.fe_logical < ac->ac_b_ex.fe_logical);
4135 BUG_ON(ac->ac_o_ex.fe_len > ac->ac_b_ex.fe_len);
4136 }
4137 @@ -4590,7 +4590,7 @@ do_more:
4138 EXT4_BLOCKS_PER_GROUP(sb);
4139 count -= overflow;
4140 }
4141 - count_clusters = EXT4_B2C(sbi, count);
4142 + count_clusters = EXT4_NUM_B2C(sbi, count);
4143 bitmap_bh = ext4_read_block_bitmap(sb, block_group);
4144 if (!bitmap_bh) {
4145 err = -EIO;
4146 @@ -4832,11 +4832,11 @@ int ext4_group_add_blocks(handle_t *handle, struct super_block *sb,
4147 ext4_group_desc_csum_set(sb, block_group, desc);
4148 ext4_unlock_group(sb, block_group);
4149 percpu_counter_add(&sbi->s_freeclusters_counter,
4150 - EXT4_B2C(sbi, blocks_freed));
4151 + EXT4_NUM_B2C(sbi, blocks_freed));
4152
4153 if (sbi->s_log_groups_per_flex) {
4154 ext4_group_t flex_group = ext4_flex_group(sbi, block_group);
4155 - atomic_add(EXT4_B2C(sbi, blocks_freed),
4156 + atomic_add(EXT4_NUM_B2C(sbi, blocks_freed),
4157 &sbi->s_flex_groups[flex_group].free_clusters);
4158 }
4159
4160 diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
4161 index 02824dc..1aab70d 100644
4162 --- a/fs/ext4/resize.c
4163 +++ b/fs/ext4/resize.c
4164 @@ -1247,7 +1247,7 @@ static int ext4_setup_new_descs(handle_t *handle, struct super_block *sb,
4165
4166 ext4_inode_table_set(sb, gdp, group_data->inode_table);
4167 ext4_free_group_clusters_set(sb, gdp,
4168 - EXT4_B2C(sbi, group_data->free_blocks_count));
4169 + EXT4_NUM_B2C(sbi, group_data->free_blocks_count));
4170 ext4_free_inodes_set(sb, gdp, EXT4_INODES_PER_GROUP(sb));
4171 if (ext4_has_group_desc_csum(sb))
4172 ext4_itable_unused_set(sb, gdp,
4173 @@ -1349,7 +1349,7 @@ static void ext4_update_super(struct super_block *sb,
4174
4175 /* Update the free space counts */
4176 percpu_counter_add(&sbi->s_freeclusters_counter,
4177 - EXT4_B2C(sbi, free_blocks));
4178 + EXT4_NUM_B2C(sbi, free_blocks));
4179 percpu_counter_add(&sbi->s_freeinodes_counter,
4180 EXT4_INODES_PER_GROUP(sb) * flex_gd->count);
4181
4182 @@ -1360,7 +1360,7 @@ static void ext4_update_super(struct super_block *sb,
4183 sbi->s_log_groups_per_flex) {
4184 ext4_group_t flex_group;
4185 flex_group = ext4_flex_group(sbi, group_data[0].group);
4186 - atomic_add(EXT4_B2C(sbi, free_blocks),
4187 + atomic_add(EXT4_NUM_B2C(sbi, free_blocks),
4188 &sbi->s_flex_groups[flex_group].free_clusters);
4189 atomic_add(EXT4_INODES_PER_GROUP(sb) * flex_gd->count,
4190 &sbi->s_flex_groups[flex_group].free_inodes);
4191 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
4192 index 0465f36..5fa223d 100644
4193 --- a/fs/ext4/super.c
4194 +++ b/fs/ext4/super.c
4195 @@ -3235,7 +3235,7 @@ int ext4_calculate_overhead(struct super_block *sb)
4196 }
4197 /* Add the journal blocks as well */
4198 if (sbi->s_journal)
4199 - overhead += EXT4_B2C(sbi, sbi->s_journal->j_maxlen);
4200 + overhead += EXT4_NUM_B2C(sbi, sbi->s_journal->j_maxlen);
4201
4202 sbi->s_overhead = overhead;
4203 smp_wmb();
4204 diff --git a/fs/namei.c b/fs/namei.c
4205 index 43a97ee..ec97aef 100644
4206 --- a/fs/namei.c
4207 +++ b/fs/namei.c
4208 @@ -693,8 +693,6 @@ void nd_jump_link(struct nameidata *nd, struct path *path)
4209 nd->path = *path;
4210 nd->inode = nd->path.dentry->d_inode;
4211 nd->flags |= LOOKUP_JUMPED;
4212 -
4213 - BUG_ON(nd->inode->i_op->follow_link);
4214 }
4215
4216 static inline void put_link(struct nameidata *nd, struct path *link, void *cookie)
4217 diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
4218 index 194c484..49eeb04 100644
4219 --- a/fs/nfs/nfs4filelayout.c
4220 +++ b/fs/nfs/nfs4filelayout.c
4221 @@ -99,7 +99,8 @@ static void filelayout_reset_write(struct nfs_write_data *data)
4222
4223 task->tk_status = pnfs_write_done_resend_to_mds(hdr->inode,
4224 &hdr->pages,
4225 - hdr->completion_ops);
4226 + hdr->completion_ops,
4227 + hdr->dreq);
4228 }
4229 }
4230
4231 @@ -119,7 +120,8 @@ static void filelayout_reset_read(struct nfs_read_data *data)
4232
4233 task->tk_status = pnfs_read_done_resend_to_mds(hdr->inode,
4234 &hdr->pages,
4235 - hdr->completion_ops);
4236 + hdr->completion_ops,
4237 + hdr->dreq);
4238 }
4239 }
4240
4241 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
4242 index efda60d..3cb5e77 100644
4243 --- a/fs/nfs/nfs4proc.c
4244 +++ b/fs/nfs/nfs4proc.c
4245 @@ -6087,11 +6087,13 @@ static struct page **nfs4_alloc_pages(size_t size, gfp_t gfp_flags)
4246 static void nfs4_layoutget_release(void *calldata)
4247 {
4248 struct nfs4_layoutget *lgp = calldata;
4249 - struct nfs_server *server = NFS_SERVER(lgp->args.inode);
4250 + struct inode *inode = lgp->args.inode;
4251 + struct nfs_server *server = NFS_SERVER(inode);
4252 size_t max_pages = max_response_pages(server);
4253
4254 dprintk("--> %s\n", __func__);
4255 nfs4_free_pages(lgp->args.layout.pages, max_pages);
4256 + pnfs_put_layout_hdr(NFS_I(inode)->layout);
4257 put_nfs_open_context(lgp->args.ctx);
4258 kfree(calldata);
4259 dprintk("<-- %s\n", __func__);
4260 @@ -6106,7 +6108,8 @@ static const struct rpc_call_ops nfs4_layoutget_call_ops = {
4261 struct pnfs_layout_segment *
4262 nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags)
4263 {
4264 - struct nfs_server *server = NFS_SERVER(lgp->args.inode);
4265 + struct inode *inode = lgp->args.inode;
4266 + struct nfs_server *server = NFS_SERVER(inode);
4267 size_t max_pages = max_response_pages(server);
4268 struct rpc_task *task;
4269 struct rpc_message msg = {
4270 @@ -6136,6 +6139,10 @@ nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags)
4271 lgp->res.layoutp = &lgp->args.layout;
4272 lgp->res.seq_res.sr_slot = NULL;
4273 nfs41_init_sequence(&lgp->args.seq_args, &lgp->res.seq_res, 0);
4274 +
4275 + /* nfs4_layoutget_release calls pnfs_put_layout_hdr */
4276 + pnfs_get_layout_hdr(NFS_I(inode)->layout);
4277 +
4278 task = rpc_run_task(&task_setup_data);
4279 if (IS_ERR(task))
4280 return ERR_CAST(task);
4281 diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
4282 index 6be70f6..97767c8 100644
4283 --- a/fs/nfs/pnfs.c
4284 +++ b/fs/nfs/pnfs.c
4285 @@ -1422,13 +1422,15 @@ EXPORT_SYMBOL_GPL(pnfs_generic_pg_test);
4286
4287 int pnfs_write_done_resend_to_mds(struct inode *inode,
4288 struct list_head *head,
4289 - const struct nfs_pgio_completion_ops *compl_ops)
4290 + const struct nfs_pgio_completion_ops *compl_ops,
4291 + struct nfs_direct_req *dreq)
4292 {
4293 struct nfs_pageio_descriptor pgio;
4294 LIST_HEAD(failed);
4295
4296 /* Resend all requests through the MDS */
4297 nfs_pageio_init_write(&pgio, inode, FLUSH_STABLE, compl_ops);
4298 + pgio.pg_dreq = dreq;
4299 while (!list_empty(head)) {
4300 struct nfs_page *req = nfs_list_entry(head->next);
4301
4302 @@ -1463,7 +1465,8 @@ static void pnfs_ld_handle_write_error(struct nfs_write_data *data)
4303 if (!test_and_set_bit(NFS_IOHDR_REDO, &hdr->flags))
4304 data->task.tk_status = pnfs_write_done_resend_to_mds(hdr->inode,
4305 &hdr->pages,
4306 - hdr->completion_ops);
4307 + hdr->completion_ops,
4308 + hdr->dreq);
4309 }
4310
4311 /*
4312 @@ -1578,13 +1581,15 @@ EXPORT_SYMBOL_GPL(pnfs_generic_pg_writepages);
4313
4314 int pnfs_read_done_resend_to_mds(struct inode *inode,
4315 struct list_head *head,
4316 - const struct nfs_pgio_completion_ops *compl_ops)
4317 + const struct nfs_pgio_completion_ops *compl_ops,
4318 + struct nfs_direct_req *dreq)
4319 {
4320 struct nfs_pageio_descriptor pgio;
4321 LIST_HEAD(failed);
4322
4323 /* Resend all requests through the MDS */
4324 nfs_pageio_init_read(&pgio, inode, compl_ops);
4325 + pgio.pg_dreq = dreq;
4326 while (!list_empty(head)) {
4327 struct nfs_page *req = nfs_list_entry(head->next);
4328
4329 @@ -1615,7 +1620,8 @@ static void pnfs_ld_handle_read_error(struct nfs_read_data *data)
4330 if (!test_and_set_bit(NFS_IOHDR_REDO, &hdr->flags))
4331 data->task.tk_status = pnfs_read_done_resend_to_mds(hdr->inode,
4332 &hdr->pages,
4333 - hdr->completion_ops);
4334 + hdr->completion_ops,
4335 + hdr->dreq);
4336 }
4337
4338 /*
4339 diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
4340 index 97cb358..94ba804 100644
4341 --- a/fs/nfs/pnfs.h
4342 +++ b/fs/nfs/pnfs.h
4343 @@ -230,9 +230,11 @@ struct pnfs_layout_segment *pnfs_update_layout(struct inode *ino,
4344
4345 void nfs4_deviceid_mark_client_invalid(struct nfs_client *clp);
4346 int pnfs_read_done_resend_to_mds(struct inode *inode, struct list_head *head,
4347 - const struct nfs_pgio_completion_ops *compl_ops);
4348 + const struct nfs_pgio_completion_ops *compl_ops,
4349 + struct nfs_direct_req *dreq);
4350 int pnfs_write_done_resend_to_mds(struct inode *inode, struct list_head *head,
4351 - const struct nfs_pgio_completion_ops *compl_ops);
4352 + const struct nfs_pgio_completion_ops *compl_ops,
4353 + struct nfs_direct_req *dreq);
4354 struct nfs4_threshold *pnfs_mdsthreshold_alloc(void);
4355
4356 /* nfs4_deviceid_flags */
4357 diff --git a/fs/nfs/unlink.c b/fs/nfs/unlink.c
4358 index 3f79c77..6edc807 100644
4359 --- a/fs/nfs/unlink.c
4360 +++ b/fs/nfs/unlink.c
4361 @@ -336,20 +336,14 @@ static void nfs_async_rename_done(struct rpc_task *task, void *calldata)
4362 struct inode *old_dir = data->old_dir;
4363 struct inode *new_dir = data->new_dir;
4364 struct dentry *old_dentry = data->old_dentry;
4365 - struct dentry *new_dentry = data->new_dentry;
4366
4367 if (!NFS_PROTO(old_dir)->rename_done(task, old_dir, new_dir)) {
4368 rpc_restart_call_prepare(task);
4369 return;
4370 }
4371
4372 - if (task->tk_status != 0) {
4373 + if (task->tk_status != 0)
4374 nfs_cancel_async_unlink(old_dentry);
4375 - return;
4376 - }
4377 -
4378 - d_drop(old_dentry);
4379 - d_drop(new_dentry);
4380 }
4381
4382 /**
4383 @@ -550,6 +544,18 @@ nfs_sillyrename(struct inode *dir, struct dentry *dentry)
4384 error = rpc_wait_for_completion_task(task);
4385 if (error == 0)
4386 error = task->tk_status;
4387 + switch (error) {
4388 + case 0:
4389 + /* The rename succeeded */
4390 + nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
4391 + d_move(dentry, sdentry);
4392 + break;
4393 + case -ERESTARTSYS:
4394 + /* The result of the rename is unknown. Play it safe by
4395 + * forcing a new lookup */
4396 + d_drop(dentry);
4397 + d_drop(sdentry);
4398 + }
4399 rpc_put_task(task);
4400 out_dput:
4401 dput(sdentry);
4402 diff --git a/fs/pipe.c b/fs/pipe.c
4403 index bd3479d..8e2e73f 100644
4404 --- a/fs/pipe.c
4405 +++ b/fs/pipe.c
4406 @@ -863,6 +863,9 @@ pipe_rdwr_open(struct inode *inode, struct file *filp)
4407 {
4408 int ret = -ENOENT;
4409
4410 + if (!(filp->f_mode & (FMODE_READ|FMODE_WRITE)))
4411 + return -EINVAL;
4412 +
4413 mutex_lock(&inode->i_mutex);
4414
4415 if (inode->i_pipe) {
4416 diff --git a/fs/proc/namespaces.c b/fs/proc/namespaces.c
4417 index b7a4719..66b51c0 100644
4418 --- a/fs/proc/namespaces.c
4419 +++ b/fs/proc/namespaces.c
4420 @@ -118,7 +118,7 @@ static void *proc_ns_follow_link(struct dentry *dentry, struct nameidata *nd)
4421 struct super_block *sb = inode->i_sb;
4422 struct proc_inode *ei = PROC_I(inode);
4423 struct task_struct *task;
4424 - struct dentry *ns_dentry;
4425 + struct path ns_path;
4426 void *error = ERR_PTR(-EACCES);
4427
4428 task = get_proc_task(inode);
4429 @@ -128,14 +128,14 @@ static void *proc_ns_follow_link(struct dentry *dentry, struct nameidata *nd)
4430 if (!ptrace_may_access(task, PTRACE_MODE_READ))
4431 goto out_put_task;
4432
4433 - ns_dentry = proc_ns_get_dentry(sb, task, ei->ns_ops);
4434 - if (IS_ERR(ns_dentry)) {
4435 - error = ERR_CAST(ns_dentry);
4436 + ns_path.dentry = proc_ns_get_dentry(sb, task, ei->ns_ops);
4437 + if (IS_ERR(ns_path.dentry)) {
4438 + error = ERR_CAST(ns_path.dentry);
4439 goto out_put_task;
4440 }
4441
4442 - dput(nd->path.dentry);
4443 - nd->path.dentry = ns_dentry;
4444 + ns_path.mnt = mntget(nd->path.mnt);
4445 + nd_jump_link(nd, &ns_path);
4446 error = NULL;
4447
4448 out_put_task:
4449 diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
4450 index bf6afa2..a5cda3e 100644
4451 --- a/include/linux/device-mapper.h
4452 +++ b/include/linux/device-mapper.h
4453 @@ -68,8 +68,8 @@ typedef void (*dm_postsuspend_fn) (struct dm_target *ti);
4454 typedef int (*dm_preresume_fn) (struct dm_target *ti);
4455 typedef void (*dm_resume_fn) (struct dm_target *ti);
4456
4457 -typedef int (*dm_status_fn) (struct dm_target *ti, status_type_t status_type,
4458 - unsigned status_flags, char *result, unsigned maxlen);
4459 +typedef void (*dm_status_fn) (struct dm_target *ti, status_type_t status_type,
4460 + unsigned status_flags, char *result, unsigned maxlen);
4461
4462 typedef int (*dm_message_fn) (struct dm_target *ti, unsigned argc, char **argv);
4463
4464 diff --git a/include/linux/mfd/rtsx_pci.h b/include/linux/mfd/rtsx_pci.h
4465 index 4b117a3..acf4d31 100644
4466 --- a/include/linux/mfd/rtsx_pci.h
4467 +++ b/include/linux/mfd/rtsx_pci.h
4468 @@ -735,6 +735,7 @@ struct rtsx_pcr {
4469
4470 unsigned int card_inserted;
4471 unsigned int card_removed;
4472 + unsigned int card_exist;
4473
4474 struct delayed_work carddet_work;
4475 struct delayed_work idle_work;
4476 @@ -799,6 +800,7 @@ int rtsx_pci_switch_clock(struct rtsx_pcr *pcr, unsigned int card_clock,
4477 u8 ssc_depth, bool initial_mode, bool double_clk, bool vpclk);
4478 int rtsx_pci_card_power_on(struct rtsx_pcr *pcr, int card);
4479 int rtsx_pci_card_power_off(struct rtsx_pcr *pcr, int card);
4480 +int rtsx_pci_card_exclusive_check(struct rtsx_pcr *pcr, int card);
4481 int rtsx_pci_switch_output_voltage(struct rtsx_pcr *pcr, u8 voltage);
4482 unsigned int rtsx_pci_card_exist(struct rtsx_pcr *pcr);
4483 void rtsx_pci_complete_unfinished_transfer(struct rtsx_pcr *pcr);
4484 diff --git a/ipc/msg.c b/ipc/msg.c
4485 index 950572f..31cd1bf 100644
4486 --- a/ipc/msg.c
4487 +++ b/ipc/msg.c
4488 @@ -820,15 +820,17 @@ long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp,
4489 struct msg_msg *copy = NULL;
4490 unsigned long copy_number = 0;
4491
4492 + ns = current->nsproxy->ipc_ns;
4493 +
4494 if (msqid < 0 || (long) bufsz < 0)
4495 return -EINVAL;
4496 if (msgflg & MSG_COPY) {
4497 - copy = prepare_copy(buf, bufsz, msgflg, &msgtyp, &copy_number);
4498 + copy = prepare_copy(buf, min_t(size_t, bufsz, ns->msg_ctlmax),
4499 + msgflg, &msgtyp, &copy_number);
4500 if (IS_ERR(copy))
4501 return PTR_ERR(copy);
4502 }
4503 mode = convert_mode(&msgtyp, msgflg);
4504 - ns = current->nsproxy->ipc_ns;
4505
4506 msq = msg_lock_check(ns, msqid);
4507 if (IS_ERR(msq)) {
4508 diff --git a/ipc/msgutil.c b/ipc/msgutil.c
4509 index ebfcbfa..5df8e4b 100644
4510 --- a/ipc/msgutil.c
4511 +++ b/ipc/msgutil.c
4512 @@ -117,9 +117,6 @@ struct msg_msg *copy_msg(struct msg_msg *src, struct msg_msg *dst)
4513 if (alen > DATALEN_MSG)
4514 alen = DATALEN_MSG;
4515
4516 - dst->next = NULL;
4517 - dst->security = NULL;
4518 -
4519 memcpy(dst + 1, src + 1, alen);
4520
4521 len -= alen;
4522 diff --git a/kernel/fork.c b/kernel/fork.c
4523 index c535f33..5630e52 100644
4524 --- a/kernel/fork.c
4525 +++ b/kernel/fork.c
4526 @@ -1141,6 +1141,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,
4527 if ((clone_flags & (CLONE_NEWNS|CLONE_FS)) == (CLONE_NEWNS|CLONE_FS))
4528 return ERR_PTR(-EINVAL);
4529
4530 + if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS))
4531 + return ERR_PTR(-EINVAL);
4532 +
4533 /*
4534 * Thread groups must share signals as well, and detached threads
4535 * can only be started up within the thread group.
4536 @@ -1801,7 +1804,7 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
4537 * If unsharing a user namespace must also unshare the thread.
4538 */
4539 if (unshare_flags & CLONE_NEWUSER)
4540 - unshare_flags |= CLONE_THREAD;
4541 + unshare_flags |= CLONE_THREAD | CLONE_FS;
4542 /*
4543 * If unsharing a pid namespace must also unshare the thread.
4544 */
4545 diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
4546 index d58e552..e78feff 100644
4547 --- a/kernel/time/tick-sched.c
4548 +++ b/kernel/time/tick-sched.c
4549 @@ -564,14 +564,19 @@ void tick_nohz_idle_enter(void)
4550 */
4551 void tick_nohz_irq_exit(void)
4552 {
4553 + unsigned long flags;
4554 struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
4555
4556 if (!ts->inidle)
4557 return;
4558
4559 - /* Cancel the timer because CPU already waken up from the C-states*/
4560 + local_irq_save(flags);
4561 +
4562 + /* Cancel the timer because CPU already waken up from the C-states */
4563 menu_hrtimer_cancel();
4564 __tick_nohz_idle_enter(ts);
4565 +
4566 + local_irq_restore(flags);
4567 }
4568
4569 /**
4570 diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
4571 index 5d89335..2747967 100644
4572 --- a/kernel/trace/Kconfig
4573 +++ b/kernel/trace/Kconfig
4574 @@ -416,24 +416,28 @@ config PROBE_EVENTS
4575 def_bool n
4576
4577 config DYNAMIC_FTRACE
4578 - bool "enable/disable ftrace tracepoints dynamically"
4579 + bool "enable/disable function tracing dynamically"
4580 depends on FUNCTION_TRACER
4581 depends on HAVE_DYNAMIC_FTRACE
4582 default y
4583 help
4584 - This option will modify all the calls to ftrace dynamically
4585 - (will patch them out of the binary image and replace them
4586 - with a No-Op instruction) as they are called. A table is
4587 - created to dynamically enable them again.
4588 + This option will modify all the calls to function tracing
4589 + dynamically (will patch them out of the binary image and
4590 + replace them with a No-Op instruction) on boot up. During
4591 + compile time, a table is made of all the locations that ftrace
4592 + can function trace, and this table is linked into the kernel
4593 + image. When this is enabled, functions can be individually
4594 + enabled, and the functions not enabled will not affect
4595 + performance of the system.
4596 +
4597 + See the files in /sys/kernel/debug/tracing:
4598 + available_filter_functions
4599 + set_ftrace_filter
4600 + set_ftrace_notrace
4601
4602 This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but
4603 otherwise has native performance as long as no tracing is active.
4604
4605 - The changes to the code are done by a kernel thread that
4606 - wakes up once a second and checks to see if any ftrace calls
4607 - were made. If so, it runs stop_machine (stops all CPUS)
4608 - and modifies the code to jump over the call to ftrace.
4609 -
4610 config FUNCTION_PROFILER
4611 bool "Kernel function profiler"
4612 depends on FUNCTION_TRACER
4613 diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
4614 index 2b042c4..dbfe36a7 100644
4615 --- a/kernel/user_namespace.c
4616 +++ b/kernel/user_namespace.c
4617 @@ -21,6 +21,7 @@
4618 #include <linux/uaccess.h>
4619 #include <linux/ctype.h>
4620 #include <linux/projid.h>
4621 +#include <linux/fs_struct.h>
4622
4623 static struct kmem_cache *user_ns_cachep __read_mostly;
4624
4625 @@ -803,6 +804,9 @@ static int userns_install(struct nsproxy *nsproxy, void *ns)
4626 if (atomic_read(&current->mm->mm_users) > 1)
4627 return -EINVAL;
4628
4629 + if (current->fs->users != 1)
4630 + return -EINVAL;
4631 +
4632 if (!ns_capable(user_ns, CAP_SYS_ADMIN))
4633 return -EPERM;
4634
4635 diff --git a/mm/mempolicy.c b/mm/mempolicy.c
4636 index e2df1c1..3df6d12 100644
4637 --- a/mm/mempolicy.c
4638 +++ b/mm/mempolicy.c
4639 @@ -2386,8 +2386,8 @@ restart:
4640 *mpol_new = *n->policy;
4641 atomic_set(&mpol_new->refcnt, 1);
4642 sp_node_init(n_new, n->end, end, mpol_new);
4643 - sp_insert(sp, n_new);
4644 n->end = start;
4645 + sp_insert(sp, n_new);
4646 n_new = NULL;
4647 mpol_new = NULL;
4648 break;
4649 diff --git a/mm/process_vm_access.c b/mm/process_vm_access.c
4650 index 926b466..fd26d04 100644
4651 --- a/mm/process_vm_access.c
4652 +++ b/mm/process_vm_access.c
4653 @@ -429,12 +429,6 @@ compat_process_vm_rw(compat_pid_t pid,
4654 if (flags != 0)
4655 return -EINVAL;
4656
4657 - if (!access_ok(VERIFY_READ, lvec, liovcnt * sizeof(*lvec)))
4658 - goto out;
4659 -
4660 - if (!access_ok(VERIFY_READ, rvec, riovcnt * sizeof(*rvec)))
4661 - goto out;
4662 -
4663 if (vm_write)
4664 rc = compat_rw_copy_check_uvector(WRITE, lvec, liovcnt,
4665 UIO_FASTIOV, iovstack_l,
4666 @@ -459,8 +453,6 @@ free_iovecs:
4667 kfree(iov_r);
4668 if (iov_l != iovstack_l)
4669 kfree(iov_l);
4670 -
4671 -out:
4672 return rc;
4673 }
4674
4675 diff --git a/net/ieee802154/6lowpan.c b/net/ieee802154/6lowpan.c
4676 index f651da6..76c3d0a 100644
4677 --- a/net/ieee802154/6lowpan.c
4678 +++ b/net/ieee802154/6lowpan.c
4679 @@ -1234,7 +1234,7 @@ static inline int __init lowpan_netlink_init(void)
4680 return rtnl_link_register(&lowpan_link_ops);
4681 }
4682
4683 -static inline void __init lowpan_netlink_fini(void)
4684 +static inline void lowpan_netlink_fini(void)
4685 {
4686 rtnl_link_unregister(&lowpan_link_ops);
4687 }
4688 diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
4689 index f75ba1a..9979bf8 100644
4690 --- a/net/mac80211/mlme.c
4691 +++ b/net/mac80211/mlme.c
4692 @@ -4072,6 +4072,17 @@ void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata)
4693 {
4694 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
4695
4696 + /*
4697 + * Make sure some work items will not run after this,
4698 + * they will not do anything but might not have been
4699 + * cancelled when disconnecting.
4700 + */
4701 + cancel_work_sync(&ifmgd->monitor_work);
4702 + cancel_work_sync(&ifmgd->beacon_connection_loss_work);
4703 + cancel_work_sync(&ifmgd->request_smps_work);
4704 + cancel_work_sync(&ifmgd->csa_connection_drop_work);
4705 + cancel_work_sync(&ifmgd->chswitch_work);
4706 +
4707 mutex_lock(&ifmgd->mtx);
4708 if (ifmgd->assoc_data)
4709 ieee80211_destroy_assoc_data(sdata, false);
4710 diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
4711 index 33811db..ab02588 100644
4712 --- a/net/sunrpc/xprt.c
4713 +++ b/net/sunrpc/xprt.c
4714 @@ -485,13 +485,17 @@ EXPORT_SYMBOL_GPL(xprt_wake_pending_tasks);
4715 * xprt_wait_for_buffer_space - wait for transport output buffer to clear
4716 * @task: task to be put to sleep
4717 * @action: function pointer to be executed after wait
4718 + *
4719 + * Note that we only set the timer for the case of RPC_IS_SOFT(), since
4720 + * we don't in general want to force a socket disconnection due to
4721 + * an incomplete RPC call transmission.
4722 */
4723 void xprt_wait_for_buffer_space(struct rpc_task *task, rpc_action action)
4724 {
4725 struct rpc_rqst *req = task->tk_rqstp;
4726 struct rpc_xprt *xprt = req->rq_xprt;
4727
4728 - task->tk_timeout = req->rq_timeout;
4729 + task->tk_timeout = RPC_IS_SOFT(task) ? req->rq_timeout : 0;
4730 rpc_sleep_on(&xprt->pending, task, action);
4731 }
4732 EXPORT_SYMBOL_GPL(xprt_wait_for_buffer_space);
4733 diff --git a/security/keys/compat.c b/security/keys/compat.c
4734 index 1c26176..d65fa7f 100644
4735 --- a/security/keys/compat.c
4736 +++ b/security/keys/compat.c
4737 @@ -40,12 +40,12 @@ static long compat_keyctl_instantiate_key_iov(
4738 ARRAY_SIZE(iovstack),
4739 iovstack, &iov);
4740 if (ret < 0)
4741 - return ret;
4742 + goto err;
4743 if (ret == 0)
4744 goto no_payload_free;
4745
4746 ret = keyctl_instantiate_key_common(id, iov, ioc, ret, ringid);
4747 -
4748 +err:
4749 if (iov != iovstack)
4750 kfree(iov);
4751 return ret;
4752 diff --git a/security/keys/process_keys.c b/security/keys/process_keys.c
4753 index 58dfe08..42defae 100644
4754 --- a/security/keys/process_keys.c
4755 +++ b/security/keys/process_keys.c
4756 @@ -57,7 +57,7 @@ int install_user_keyrings(void)
4757
4758 kenter("%p{%u}", user, uid);
4759
4760 - if (user->uid_keyring) {
4761 + if (user->uid_keyring && user->session_keyring) {
4762 kleave(" = 0 [exist]");
4763 return 0;
4764 }
4765 @@ -839,7 +839,7 @@ void key_change_session_keyring(struct callback_head *twork)
4766 new-> sgid = old-> sgid;
4767 new->fsgid = old->fsgid;
4768 new->user = get_uid(old->user);
4769 - new->user_ns = get_user_ns(new->user_ns);
4770 + new->user_ns = get_user_ns(old->user_ns);
4771 new->group_info = get_group_info(old->group_info);
4772
4773 new->securebits = old->securebits;
4774 diff --git a/sound/core/vmaster.c b/sound/core/vmaster.c
4775 index 8575861..0097f36 100644
4776 --- a/sound/core/vmaster.c
4777 +++ b/sound/core/vmaster.c
4778 @@ -213,7 +213,10 @@ static int slave_put(struct snd_kcontrol *kcontrol,
4779 }
4780 if (!changed)
4781 return 0;
4782 - return slave_put_val(slave, ucontrol);
4783 + err = slave_put_val(slave, ucontrol);
4784 + if (err < 0)
4785 + return err;
4786 + return 1;
4787 }
4788
4789 static int slave_tlv_cmd(struct snd_kcontrol *kcontrol,
4790 diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c
4791 index 2ffdc35..806407a 100644
4792 --- a/sound/pci/ice1712/ice1712.c
4793 +++ b/sound/pci/ice1712/ice1712.c
4794 @@ -2594,6 +2594,8 @@ static int snd_ice1712_create(struct snd_card *card,
4795 snd_ice1712_proc_init(ice);
4796 synchronize_irq(pci->irq);
4797
4798 + card->private_data = ice;
4799 +
4800 err = pci_request_regions(pci, "ICE1712");
4801 if (err < 0) {
4802 kfree(ice);