Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.18/0110-3.18.11-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2611 - (hide annotations) (download)
Mon Jul 13 08:28:35 2015 UTC (8 years, 10 months ago) by niro
File size: 118605 byte(s)
-linux-3.18.11
1 niro 2611 diff --git a/Makefile b/Makefile
2     index d4ce2cb674c8..da8dc1350de3 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 18
8     -SUBLEVEL = 10
9     +SUBLEVEL = 11
10     EXTRAVERSION =
11     NAME = Diseased Newt
12    
13     diff --git a/arch/arm/boot/dts/am33xx-clocks.dtsi b/arch/arm/boot/dts/am33xx-clocks.dtsi
14     index 712edce7d6fb..071b56aa0c7e 100644
15     --- a/arch/arm/boot/dts/am33xx-clocks.dtsi
16     +++ b/arch/arm/boot/dts/am33xx-clocks.dtsi
17     @@ -99,7 +99,7 @@
18     ehrpwm0_tbclk: ehrpwm0_tbclk@44e10664 {
19     #clock-cells = <0>;
20     compatible = "ti,gate-clock";
21     - clocks = <&dpll_per_m2_ck>;
22     + clocks = <&l4ls_gclk>;
23     ti,bit-shift = <0>;
24     reg = <0x0664>;
25     };
26     @@ -107,7 +107,7 @@
27     ehrpwm1_tbclk: ehrpwm1_tbclk@44e10664 {
28     #clock-cells = <0>;
29     compatible = "ti,gate-clock";
30     - clocks = <&dpll_per_m2_ck>;
31     + clocks = <&l4ls_gclk>;
32     ti,bit-shift = <1>;
33     reg = <0x0664>;
34     };
35     @@ -115,7 +115,7 @@
36     ehrpwm2_tbclk: ehrpwm2_tbclk@44e10664 {
37     #clock-cells = <0>;
38     compatible = "ti,gate-clock";
39     - clocks = <&dpll_per_m2_ck>;
40     + clocks = <&l4ls_gclk>;
41     ti,bit-shift = <2>;
42     reg = <0x0664>;
43     };
44     diff --git a/arch/arm/boot/dts/am43xx-clocks.dtsi b/arch/arm/boot/dts/am43xx-clocks.dtsi
45     index c7dc9dab93a4..cfb49686ab6a 100644
46     --- a/arch/arm/boot/dts/am43xx-clocks.dtsi
47     +++ b/arch/arm/boot/dts/am43xx-clocks.dtsi
48     @@ -107,7 +107,7 @@
49     ehrpwm0_tbclk: ehrpwm0_tbclk {
50     #clock-cells = <0>;
51     compatible = "ti,gate-clock";
52     - clocks = <&dpll_per_m2_ck>;
53     + clocks = <&l4ls_gclk>;
54     ti,bit-shift = <0>;
55     reg = <0x0664>;
56     };
57     @@ -115,7 +115,7 @@
58     ehrpwm1_tbclk: ehrpwm1_tbclk {
59     #clock-cells = <0>;
60     compatible = "ti,gate-clock";
61     - clocks = <&dpll_per_m2_ck>;
62     + clocks = <&l4ls_gclk>;
63     ti,bit-shift = <1>;
64     reg = <0x0664>;
65     };
66     @@ -123,7 +123,7 @@
67     ehrpwm2_tbclk: ehrpwm2_tbclk {
68     #clock-cells = <0>;
69     compatible = "ti,gate-clock";
70     - clocks = <&dpll_per_m2_ck>;
71     + clocks = <&l4ls_gclk>;
72     ti,bit-shift = <2>;
73     reg = <0x0664>;
74     };
75     @@ -131,7 +131,7 @@
76     ehrpwm3_tbclk: ehrpwm3_tbclk {
77     #clock-cells = <0>;
78     compatible = "ti,gate-clock";
79     - clocks = <&dpll_per_m2_ck>;
80     + clocks = <&l4ls_gclk>;
81     ti,bit-shift = <4>;
82     reg = <0x0664>;
83     };
84     @@ -139,7 +139,7 @@
85     ehrpwm4_tbclk: ehrpwm4_tbclk {
86     #clock-cells = <0>;
87     compatible = "ti,gate-clock";
88     - clocks = <&dpll_per_m2_ck>;
89     + clocks = <&l4ls_gclk>;
90     ti,bit-shift = <5>;
91     reg = <0x0664>;
92     };
93     @@ -147,7 +147,7 @@
94     ehrpwm5_tbclk: ehrpwm5_tbclk {
95     #clock-cells = <0>;
96     compatible = "ti,gate-clock";
97     - clocks = <&dpll_per_m2_ck>;
98     + clocks = <&l4ls_gclk>;
99     ti,bit-shift = <6>;
100     reg = <0x0664>;
101     };
102     diff --git a/arch/arm/boot/dts/dra7xx-clocks.dtsi b/arch/arm/boot/dts/dra7xx-clocks.dtsi
103     index 2c05b3f017fa..64c0f75b5444 100644
104     --- a/arch/arm/boot/dts/dra7xx-clocks.dtsi
105     +++ b/arch/arm/boot/dts/dra7xx-clocks.dtsi
106     @@ -243,10 +243,18 @@
107     ti,invert-autoidle-bit;
108     };
109    
110     + dpll_core_byp_mux: dpll_core_byp_mux {
111     + #clock-cells = <0>;
112     + compatible = "ti,mux-clock";
113     + clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
114     + ti,bit-shift = <23>;
115     + reg = <0x012c>;
116     + };
117     +
118     dpll_core_ck: dpll_core_ck {
119     #clock-cells = <0>;
120     compatible = "ti,omap4-dpll-core-clock";
121     - clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
122     + clocks = <&sys_clkin1>, <&dpll_core_byp_mux>;
123     reg = <0x0120>, <0x0124>, <0x012c>, <0x0128>;
124     };
125    
126     @@ -309,10 +317,18 @@
127     clock-div = <1>;
128     };
129    
130     + dpll_dsp_byp_mux: dpll_dsp_byp_mux {
131     + #clock-cells = <0>;
132     + compatible = "ti,mux-clock";
133     + clocks = <&sys_clkin1>, <&dsp_dpll_hs_clk_div>;
134     + ti,bit-shift = <23>;
135     + reg = <0x0240>;
136     + };
137     +
138     dpll_dsp_ck: dpll_dsp_ck {
139     #clock-cells = <0>;
140     compatible = "ti,omap4-dpll-clock";
141     - clocks = <&sys_clkin1>, <&dsp_dpll_hs_clk_div>;
142     + clocks = <&sys_clkin1>, <&dpll_dsp_byp_mux>;
143     reg = <0x0234>, <0x0238>, <0x0240>, <0x023c>;
144     };
145    
146     @@ -335,10 +351,18 @@
147     clock-div = <1>;
148     };
149    
150     + dpll_iva_byp_mux: dpll_iva_byp_mux {
151     + #clock-cells = <0>;
152     + compatible = "ti,mux-clock";
153     + clocks = <&sys_clkin1>, <&iva_dpll_hs_clk_div>;
154     + ti,bit-shift = <23>;
155     + reg = <0x01ac>;
156     + };
157     +
158     dpll_iva_ck: dpll_iva_ck {
159     #clock-cells = <0>;
160     compatible = "ti,omap4-dpll-clock";
161     - clocks = <&sys_clkin1>, <&iva_dpll_hs_clk_div>;
162     + clocks = <&sys_clkin1>, <&dpll_iva_byp_mux>;
163     reg = <0x01a0>, <0x01a4>, <0x01ac>, <0x01a8>;
164     };
165    
166     @@ -361,10 +385,18 @@
167     clock-div = <1>;
168     };
169    
170     + dpll_gpu_byp_mux: dpll_gpu_byp_mux {
171     + #clock-cells = <0>;
172     + compatible = "ti,mux-clock";
173     + clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
174     + ti,bit-shift = <23>;
175     + reg = <0x02e4>;
176     + };
177     +
178     dpll_gpu_ck: dpll_gpu_ck {
179     #clock-cells = <0>;
180     compatible = "ti,omap4-dpll-clock";
181     - clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
182     + clocks = <&sys_clkin1>, <&dpll_gpu_byp_mux>;
183     reg = <0x02d8>, <0x02dc>, <0x02e4>, <0x02e0>;
184     };
185    
186     @@ -398,10 +430,18 @@
187     clock-div = <1>;
188     };
189    
190     + dpll_ddr_byp_mux: dpll_ddr_byp_mux {
191     + #clock-cells = <0>;
192     + compatible = "ti,mux-clock";
193     + clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
194     + ti,bit-shift = <23>;
195     + reg = <0x021c>;
196     + };
197     +
198     dpll_ddr_ck: dpll_ddr_ck {
199     #clock-cells = <0>;
200     compatible = "ti,omap4-dpll-clock";
201     - clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
202     + clocks = <&sys_clkin1>, <&dpll_ddr_byp_mux>;
203     reg = <0x0210>, <0x0214>, <0x021c>, <0x0218>;
204     };
205    
206     @@ -416,10 +456,18 @@
207     ti,invert-autoidle-bit;
208     };
209    
210     + dpll_gmac_byp_mux: dpll_gmac_byp_mux {
211     + #clock-cells = <0>;
212     + compatible = "ti,mux-clock";
213     + clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
214     + ti,bit-shift = <23>;
215     + reg = <0x02b4>;
216     + };
217     +
218     dpll_gmac_ck: dpll_gmac_ck {
219     #clock-cells = <0>;
220     compatible = "ti,omap4-dpll-clock";
221     - clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
222     + clocks = <&sys_clkin1>, <&dpll_gmac_byp_mux>;
223     reg = <0x02a8>, <0x02ac>, <0x02b4>, <0x02b0>;
224     };
225    
226     @@ -482,10 +530,18 @@
227     clock-div = <1>;
228     };
229    
230     + dpll_eve_byp_mux: dpll_eve_byp_mux {
231     + #clock-cells = <0>;
232     + compatible = "ti,mux-clock";
233     + clocks = <&sys_clkin1>, <&eve_dpll_hs_clk_div>;
234     + ti,bit-shift = <23>;
235     + reg = <0x0290>;
236     + };
237     +
238     dpll_eve_ck: dpll_eve_ck {
239     #clock-cells = <0>;
240     compatible = "ti,omap4-dpll-clock";
241     - clocks = <&sys_clkin1>, <&eve_dpll_hs_clk_div>;
242     + clocks = <&sys_clkin1>, <&dpll_eve_byp_mux>;
243     reg = <0x0284>, <0x0288>, <0x0290>, <0x028c>;
244     };
245    
246     @@ -1249,10 +1305,18 @@
247     clock-div = <1>;
248     };
249    
250     + dpll_per_byp_mux: dpll_per_byp_mux {
251     + #clock-cells = <0>;
252     + compatible = "ti,mux-clock";
253     + clocks = <&sys_clkin1>, <&per_dpll_hs_clk_div>;
254     + ti,bit-shift = <23>;
255     + reg = <0x014c>;
256     + };
257     +
258     dpll_per_ck: dpll_per_ck {
259     #clock-cells = <0>;
260     compatible = "ti,omap4-dpll-clock";
261     - clocks = <&sys_clkin1>, <&per_dpll_hs_clk_div>;
262     + clocks = <&sys_clkin1>, <&dpll_per_byp_mux>;
263     reg = <0x0140>, <0x0144>, <0x014c>, <0x0148>;
264     };
265    
266     @@ -1275,10 +1339,18 @@
267     clock-div = <1>;
268     };
269    
270     + dpll_usb_byp_mux: dpll_usb_byp_mux {
271     + #clock-cells = <0>;
272     + compatible = "ti,mux-clock";
273     + clocks = <&sys_clkin1>, <&usb_dpll_hs_clk_div>;
274     + ti,bit-shift = <23>;
275     + reg = <0x018c>;
276     + };
277     +
278     dpll_usb_ck: dpll_usb_ck {
279     #clock-cells = <0>;
280     compatible = "ti,omap4-dpll-j-type-clock";
281     - clocks = <&sys_clkin1>, <&usb_dpll_hs_clk_div>;
282     + clocks = <&sys_clkin1>, <&dpll_usb_byp_mux>;
283     reg = <0x0180>, <0x0184>, <0x018c>, <0x0188>;
284     };
285    
286     diff --git a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
287     index baf2f00d519a..b57e554dba4e 100644
288     --- a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
289     +++ b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
290     @@ -35,6 +35,7 @@
291     regulator-max-microvolt = <5000000>;
292     gpio = <&gpio3 22 0>;
293     enable-active-high;
294     + vin-supply = <&swbst_reg>;
295     };
296    
297     reg_usb_h1_vbus: regulator@1 {
298     @@ -45,6 +46,7 @@
299     regulator-max-microvolt = <5000000>;
300     gpio = <&gpio1 29 0>;
301     enable-active-high;
302     + vin-supply = <&swbst_reg>;
303     };
304    
305     reg_audio: regulator@2 {
306     diff --git a/arch/arm/crypto/aesbs-core.S_shipped b/arch/arm/crypto/aesbs-core.S_shipped
307     index 71e5fc7cfb18..1d1800f71c5b 100644
308     --- a/arch/arm/crypto/aesbs-core.S_shipped
309     +++ b/arch/arm/crypto/aesbs-core.S_shipped
310     @@ -58,14 +58,18 @@
311     # define VFP_ABI_FRAME 0
312     # define BSAES_ASM_EXTENDED_KEY
313     # define XTS_CHAIN_TWEAK
314     -# define __ARM_ARCH__ 7
315     +# define __ARM_ARCH__ __LINUX_ARM_ARCH__
316     +# define __ARM_MAX_ARCH__ 7
317     #endif
318    
319     #ifdef __thumb__
320     # define adrl adr
321     #endif
322    
323     -#if __ARM_ARCH__>=7
324     +#if __ARM_MAX_ARCH__>=7
325     +.arch armv7-a
326     +.fpu neon
327     +
328     .text
329     .syntax unified @ ARMv7-capable assembler is expected to handle this
330     #ifdef __thumb2__
331     @@ -74,8 +78,6 @@
332     .code 32
333     #endif
334    
335     -.fpu neon
336     -
337     .type _bsaes_decrypt8,%function
338     .align 4
339     _bsaes_decrypt8:
340     @@ -2095,9 +2097,11 @@ bsaes_xts_decrypt:
341     vld1.8 {q8}, [r0] @ initial tweak
342     adr r2, .Lxts_magic
343    
344     +#ifndef XTS_CHAIN_TWEAK
345     tst r9, #0xf @ if not multiple of 16
346     it ne @ Thumb2 thing, sanity check in ARM
347     subne r9, #0x10 @ subtract another 16 bytes
348     +#endif
349     subs r9, #0x80
350    
351     blo .Lxts_dec_short
352     diff --git a/arch/arm/crypto/bsaes-armv7.pl b/arch/arm/crypto/bsaes-armv7.pl
353     index be068db960ee..a4d3856e7d24 100644
354     --- a/arch/arm/crypto/bsaes-armv7.pl
355     +++ b/arch/arm/crypto/bsaes-armv7.pl
356     @@ -701,14 +701,18 @@ $code.=<<___;
357     # define VFP_ABI_FRAME 0
358     # define BSAES_ASM_EXTENDED_KEY
359     # define XTS_CHAIN_TWEAK
360     -# define __ARM_ARCH__ 7
361     +# define __ARM_ARCH__ __LINUX_ARM_ARCH__
362     +# define __ARM_MAX_ARCH__ 7
363     #endif
364    
365     #ifdef __thumb__
366     # define adrl adr
367     #endif
368    
369     -#if __ARM_ARCH__>=7
370     +#if __ARM_MAX_ARCH__>=7
371     +.arch armv7-a
372     +.fpu neon
373     +
374     .text
375     .syntax unified @ ARMv7-capable assembler is expected to handle this
376     #ifdef __thumb2__
377     @@ -717,8 +721,6 @@ $code.=<<___;
378     .code 32
379     #endif
380    
381     -.fpu neon
382     -
383     .type _bsaes_decrypt8,%function
384     .align 4
385     _bsaes_decrypt8:
386     @@ -2076,9 +2078,11 @@ bsaes_xts_decrypt:
387     vld1.8 {@XMM[8]}, [r0] @ initial tweak
388     adr $magic, .Lxts_magic
389    
390     +#ifndef XTS_CHAIN_TWEAK
391     tst $len, #0xf @ if not multiple of 16
392     it ne @ Thumb2 thing, sanity check in ARM
393     subne $len, #0x10 @ subtract another 16 bytes
394     +#endif
395     subs $len, #0x80
396    
397     blo .Lxts_dec_short
398     diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
399     index c5101dcb4fb0..1d4df3b70ebc 100644
400     --- a/arch/arm/mach-at91/pm.h
401     +++ b/arch/arm/mach-at91/pm.h
402     @@ -45,7 +45,7 @@ static inline void at91rm9200_standby(void)
403     " mcr p15, 0, %0, c7, c0, 4\n\t"
404     " str %5, [%1, %2]"
405     :
406     - : "r" (0), "r" (AT91_BASE_SYS), "r" (AT91RM9200_SDRAMC_LPR),
407     + : "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
408     "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
409     "r" (lpr));
410     }
411     diff --git a/arch/arm64/include/asm/tlb.h b/arch/arm64/include/asm/tlb.h
412     index a82c0c5c8b52..53d9c354219f 100644
413     --- a/arch/arm64/include/asm/tlb.h
414     +++ b/arch/arm64/include/asm/tlb.h
415     @@ -19,10 +19,6 @@
416     #ifndef __ASM_TLB_H
417     #define __ASM_TLB_H
418    
419     -#define __tlb_remove_pmd_tlb_entry __tlb_remove_pmd_tlb_entry
420     -
421     -#include <asm-generic/tlb.h>
422     -
423     #include <linux/pagemap.h>
424     #include <linux/swap.h>
425    
426     @@ -37,71 +33,23 @@ static inline void __tlb_remove_table(void *_table)
427     #define tlb_remove_entry(tlb, entry) tlb_remove_page(tlb, entry)
428     #endif /* CONFIG_HAVE_RCU_TABLE_FREE */
429    
430     -/*
431     - * There's three ways the TLB shootdown code is used:
432     - * 1. Unmapping a range of vmas. See zap_page_range(), unmap_region().
433     - * tlb->fullmm = 0, and tlb_start_vma/tlb_end_vma will be called.
434     - * 2. Unmapping all vmas. See exit_mmap().
435     - * tlb->fullmm = 1, and tlb_start_vma/tlb_end_vma will be called.
436     - * Page tables will be freed.
437     - * 3. Unmapping argument pages. See shift_arg_pages().
438     - * tlb->fullmm = 0, but tlb_start_vma/tlb_end_vma will not be called.
439     - */
440     +#include <asm-generic/tlb.h>
441     +
442     static inline void tlb_flush(struct mmu_gather *tlb)
443     {
444     if (tlb->fullmm) {
445     flush_tlb_mm(tlb->mm);
446     - } else if (tlb->end > 0) {
447     + } else {
448     struct vm_area_struct vma = { .vm_mm = tlb->mm, };
449     flush_tlb_range(&vma, tlb->start, tlb->end);
450     - tlb->start = TASK_SIZE;
451     - tlb->end = 0;
452     - }
453     -}
454     -
455     -static inline void tlb_add_flush(struct mmu_gather *tlb, unsigned long addr)
456     -{
457     - if (!tlb->fullmm) {
458     - tlb->start = min(tlb->start, addr);
459     - tlb->end = max(tlb->end, addr + PAGE_SIZE);
460     - }
461     -}
462     -
463     -/*
464     - * Memorize the range for the TLB flush.
465     - */
466     -static inline void __tlb_remove_tlb_entry(struct mmu_gather *tlb, pte_t *ptep,
467     - unsigned long addr)
468     -{
469     - tlb_add_flush(tlb, addr);
470     -}
471     -
472     -/*
473     - * In the case of tlb vma handling, we can optimise these away in the
474     - * case where we're doing a full MM flush. When we're doing a munmap,
475     - * the vmas are adjusted to only cover the region to be torn down.
476     - */
477     -static inline void tlb_start_vma(struct mmu_gather *tlb,
478     - struct vm_area_struct *vma)
479     -{
480     - if (!tlb->fullmm) {
481     - tlb->start = TASK_SIZE;
482     - tlb->end = 0;
483     }
484     }
485    
486     -static inline void tlb_end_vma(struct mmu_gather *tlb,
487     - struct vm_area_struct *vma)
488     -{
489     - if (!tlb->fullmm)
490     - tlb_flush(tlb);
491     -}
492     -
493     static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte,
494     unsigned long addr)
495     {
496     + __flush_tlb_pgtable(tlb->mm, addr);
497     pgtable_page_dtor(pte);
498     - tlb_add_flush(tlb, addr);
499     tlb_remove_entry(tlb, pte);
500     }
501    
502     @@ -109,7 +57,7 @@ static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte,
503     static inline void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmdp,
504     unsigned long addr)
505     {
506     - tlb_add_flush(tlb, addr);
507     + __flush_tlb_pgtable(tlb->mm, addr);
508     tlb_remove_entry(tlb, virt_to_page(pmdp));
509     }
510     #endif
511     @@ -118,15 +66,9 @@ static inline void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmdp,
512     static inline void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pudp,
513     unsigned long addr)
514     {
515     - tlb_add_flush(tlb, addr);
516     + __flush_tlb_pgtable(tlb->mm, addr);
517     tlb_remove_entry(tlb, virt_to_page(pudp));
518     }
519     #endif
520    
521     -static inline void __tlb_remove_pmd_tlb_entry(struct mmu_gather *tlb, pmd_t *pmdp,
522     - unsigned long address)
523     -{
524     - tlb_add_flush(tlb, address);
525     -}
526     -
527     #endif
528     diff --git a/arch/arm64/include/asm/tlbflush.h b/arch/arm64/include/asm/tlbflush.h
529     index 73f0ce570fb3..8b8d8cb46e01 100644
530     --- a/arch/arm64/include/asm/tlbflush.h
531     +++ b/arch/arm64/include/asm/tlbflush.h
532     @@ -149,6 +149,19 @@ static inline void flush_tlb_kernel_range(unsigned long start, unsigned long end
533     }
534    
535     /*
536     + * Used to invalidate the TLB (walk caches) corresponding to intermediate page
537     + * table levels (pgd/pud/pmd).
538     + */
539     +static inline void __flush_tlb_pgtable(struct mm_struct *mm,
540     + unsigned long uaddr)
541     +{
542     + unsigned long addr = uaddr >> 12 | ((unsigned long)ASID(mm) << 48);
543     +
544     + dsb(ishst);
545     + asm("tlbi vae1is, %0" : : "r" (addr));
546     + dsb(ish);
547     +}
548     +/*
549     * On AArch64, the cache coherency is handled via the set_pte_at() function.
550     */
551     static inline void update_mmu_cache(struct vm_area_struct *vma,
552     diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
553     index d92094203913..df34a70caca1 100644
554     --- a/arch/arm64/mm/dma-mapping.c
555     +++ b/arch/arm64/mm/dma-mapping.c
556     @@ -51,7 +51,7 @@ static int __init early_coherent_pool(char *p)
557     }
558     early_param("coherent_pool", early_coherent_pool);
559    
560     -static void *__alloc_from_pool(size_t size, struct page **ret_page)
561     +static void *__alloc_from_pool(size_t size, struct page **ret_page, gfp_t flags)
562     {
563     unsigned long val;
564     void *ptr = NULL;
565     @@ -67,6 +67,8 @@ static void *__alloc_from_pool(size_t size, struct page **ret_page)
566    
567     *ret_page = phys_to_page(phys);
568     ptr = (void *)val;
569     + if (flags & __GFP_ZERO)
570     + memset(ptr, 0, size);
571     }
572    
573     return ptr;
574     @@ -101,6 +103,7 @@ static void *__dma_alloc_coherent(struct device *dev, size_t size,
575     flags |= GFP_DMA;
576     if (IS_ENABLED(CONFIG_DMA_CMA) && (flags & __GFP_WAIT)) {
577     struct page *page;
578     + void *addr;
579    
580     size = PAGE_ALIGN(size);
581     page = dma_alloc_from_contiguous(dev, size >> PAGE_SHIFT,
582     @@ -109,7 +112,10 @@ static void *__dma_alloc_coherent(struct device *dev, size_t size,
583     return NULL;
584    
585     *dma_handle = phys_to_dma(dev, page_to_phys(page));
586     - return page_address(page);
587     + addr = page_address(page);
588     + if (flags & __GFP_ZERO)
589     + memset(addr, 0, size);
590     + return addr;
591     } else {
592     return swiotlb_alloc_coherent(dev, size, dma_handle, flags);
593     }
594     @@ -145,7 +151,7 @@ static void *__dma_alloc_noncoherent(struct device *dev, size_t size,
595    
596     if (!(flags & __GFP_WAIT)) {
597     struct page *page = NULL;
598     - void *addr = __alloc_from_pool(size, &page);
599     + void *addr = __alloc_from_pool(size, &page, flags);
600    
601     if (addr)
602     *dma_handle = phys_to_dma(dev, page_to_phys(page));
603     diff --git a/arch/microblaze/include/asm/tlb.h b/arch/microblaze/include/asm/tlb.h
604     index 8aa97817cc8c..99b6ded54849 100644
605     --- a/arch/microblaze/include/asm/tlb.h
606     +++ b/arch/microblaze/include/asm/tlb.h
607     @@ -14,7 +14,6 @@
608     #define tlb_flush(tlb) flush_tlb_mm((tlb)->mm)
609    
610     #include <linux/pagemap.h>
611     -#include <asm-generic/tlb.h>
612    
613     #ifdef CONFIG_MMU
614     #define tlb_start_vma(tlb, vma) do { } while (0)
615     @@ -22,4 +21,6 @@
616     #define __tlb_remove_tlb_entry(tlb, pte, address) do { } while (0)
617     #endif
618    
619     +#include <asm-generic/tlb.h>
620     +
621     #endif /* _ASM_MICROBLAZE_TLB_H */
622     diff --git a/arch/powerpc/include/asm/pgalloc.h b/arch/powerpc/include/asm/pgalloc.h
623     index e9a9f60e596d..fc3ee06eab87 100644
624     --- a/arch/powerpc/include/asm/pgalloc.h
625     +++ b/arch/powerpc/include/asm/pgalloc.h
626     @@ -3,7 +3,6 @@
627     #ifdef __KERNEL__
628    
629     #include <linux/mm.h>
630     -#include <asm-generic/tlb.h>
631    
632     #ifdef CONFIG_PPC_BOOK3E
633     extern void tlb_flush_pgtable(struct mmu_gather *tlb, unsigned long address);
634     @@ -14,6 +13,8 @@ static inline void tlb_flush_pgtable(struct mmu_gather *tlb,
635     }
636     #endif /* !CONFIG_PPC_BOOK3E */
637    
638     +extern void tlb_remove_table(struct mmu_gather *tlb, void *table);
639     +
640     #ifdef CONFIG_PPC64
641     #include <asm/pgalloc-64.h>
642     #else
643     diff --git a/arch/powerpc/include/asm/tlb.h b/arch/powerpc/include/asm/tlb.h
644     index e2b428b0f7ba..20733fa518ae 100644
645     --- a/arch/powerpc/include/asm/tlb.h
646     +++ b/arch/powerpc/include/asm/tlb.h
647     @@ -27,6 +27,7 @@
648    
649     #define tlb_start_vma(tlb, vma) do { } while (0)
650     #define tlb_end_vma(tlb, vma) do { } while (0)
651     +#define __tlb_remove_tlb_entry __tlb_remove_tlb_entry
652    
653     extern void tlb_flush(struct mmu_gather *tlb);
654    
655     diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
656     index 7e70ae968e5f..6a4a5fcb9730 100644
657     --- a/arch/powerpc/mm/hugetlbpage.c
658     +++ b/arch/powerpc/mm/hugetlbpage.c
659     @@ -517,8 +517,6 @@ static void free_hugepd_range(struct mmu_gather *tlb, hugepd_t *hpdp, int pdshif
660     for (i = 0; i < num_hugepd; i++, hpdp++)
661     hpdp->pd = 0;
662    
663     - tlb->need_flush = 1;
664     -
665     #ifdef CONFIG_PPC_FSL_BOOK3E
666     hugepd_free(tlb, hugepte);
667     #else
668     diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
669     index ced09d8738b4..49e4d64ff74d 100644
670     --- a/arch/s390/kvm/kvm-s390.c
671     +++ b/arch/s390/kvm/kvm-s390.c
672     @@ -152,7 +152,6 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
673     case KVM_CAP_ONE_REG:
674     case KVM_CAP_ENABLE_CAP:
675     case KVM_CAP_S390_CSS_SUPPORT:
676     - case KVM_CAP_IRQFD:
677     case KVM_CAP_IOEVENTFD:
678     case KVM_CAP_DEVICE_CTRL:
679     case KVM_CAP_ENABLE_CAP_VM:
680     diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c
681     index 46a5e4508752..af53c25da2e7 100644
682     --- a/arch/sparc/kernel/perf_event.c
683     +++ b/arch/sparc/kernel/perf_event.c
684     @@ -960,6 +960,8 @@ out:
685     cpuc->pcr[0] |= cpuc->event[0]->hw.config_base;
686     }
687    
688     +static void sparc_pmu_start(struct perf_event *event, int flags);
689     +
690     /* On this PMU each PIC has it's own PCR control register. */
691     static void calculate_multiple_pcrs(struct cpu_hw_events *cpuc)
692     {
693     @@ -972,20 +974,13 @@ static void calculate_multiple_pcrs(struct cpu_hw_events *cpuc)
694     struct perf_event *cp = cpuc->event[i];
695     struct hw_perf_event *hwc = &cp->hw;
696     int idx = hwc->idx;
697     - u64 enc;
698    
699     if (cpuc->current_idx[i] != PIC_NO_INDEX)
700     continue;
701    
702     - sparc_perf_event_set_period(cp, hwc, idx);
703     cpuc->current_idx[i] = idx;
704    
705     - enc = perf_event_get_enc(cpuc->events[i]);
706     - cpuc->pcr[idx] &= ~mask_for_index(idx);
707     - if (hwc->state & PERF_HES_STOPPED)
708     - cpuc->pcr[idx] |= nop_for_index(idx);
709     - else
710     - cpuc->pcr[idx] |= event_encoding(enc, idx);
711     + sparc_pmu_start(cp, PERF_EF_RELOAD);
712     }
713     out:
714     for (i = 0; i < cpuc->n_events; i++) {
715     @@ -1101,7 +1096,6 @@ static void sparc_pmu_del(struct perf_event *event, int _flags)
716     int i;
717    
718     local_irq_save(flags);
719     - perf_pmu_disable(event->pmu);
720    
721     for (i = 0; i < cpuc->n_events; i++) {
722     if (event == cpuc->event[i]) {
723     @@ -1127,7 +1121,6 @@ static void sparc_pmu_del(struct perf_event *event, int _flags)
724     }
725     }
726    
727     - perf_pmu_enable(event->pmu);
728     local_irq_restore(flags);
729     }
730    
731     @@ -1361,7 +1354,6 @@ static int sparc_pmu_add(struct perf_event *event, int ef_flags)
732     unsigned long flags;
733    
734     local_irq_save(flags);
735     - perf_pmu_disable(event->pmu);
736    
737     n0 = cpuc->n_events;
738     if (n0 >= sparc_pmu->max_hw_events)
739     @@ -1394,7 +1386,6 @@ nocheck:
740    
741     ret = 0;
742     out:
743     - perf_pmu_enable(event->pmu);
744     local_irq_restore(flags);
745     return ret;
746     }
747     diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c
748     index 0be7bf978cb1..46a59643bb1c 100644
749     --- a/arch/sparc/kernel/process_64.c
750     +++ b/arch/sparc/kernel/process_64.c
751     @@ -287,6 +287,8 @@ void arch_trigger_all_cpu_backtrace(bool include_self)
752     printk(" TPC[%lx] O7[%lx] I7[%lx] RPC[%lx]\n",
753     gp->tpc, gp->o7, gp->i7, gp->rpc);
754     }
755     +
756     + touch_nmi_watchdog();
757     }
758    
759     memset(global_cpu_snapshot, 0, sizeof(global_cpu_snapshot));
760     @@ -362,6 +364,8 @@ static void pmu_snapshot_all_cpus(void)
761     (cpu == this_cpu ? '*' : ' '), cpu,
762     pp->pcr[0], pp->pcr[1], pp->pcr[2], pp->pcr[3],
763     pp->pic[0], pp->pic[1], pp->pic[2], pp->pic[3]);
764     +
765     + touch_nmi_watchdog();
766     }
767    
768     memset(global_cpu_snapshot, 0, sizeof(global_cpu_snapshot));
769     diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c
770     index c85403d0496c..30e7ddb27a3a 100644
771     --- a/arch/sparc/kernel/sys_sparc_64.c
772     +++ b/arch/sparc/kernel/sys_sparc_64.c
773     @@ -333,7 +333,7 @@ SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, second
774     long err;
775    
776     /* No need for backward compatibility. We can start fresh... */
777     - if (call <= SEMCTL) {
778     + if (call <= SEMTIMEDOP) {
779     switch (call) {
780     case SEMOP:
781     err = sys_semtimedop(first, ptr,
782     diff --git a/arch/sparc/lib/memmove.S b/arch/sparc/lib/memmove.S
783     index b7f6334e159f..857ad4f8905f 100644
784     --- a/arch/sparc/lib/memmove.S
785     +++ b/arch/sparc/lib/memmove.S
786     @@ -8,9 +8,11 @@
787    
788     .text
789     ENTRY(memmove) /* o0=dst o1=src o2=len */
790     - mov %o0, %g1
791     + brz,pn %o2, 99f
792     + mov %o0, %g1
793     +
794     cmp %o0, %o1
795     - bleu,pt %xcc, memcpy
796     + bleu,pt %xcc, 2f
797     add %o1, %o2, %g7
798     cmp %g7, %o0
799     bleu,pt %xcc, memcpy
800     @@ -24,7 +26,34 @@ ENTRY(memmove) /* o0=dst o1=src o2=len */
801     stb %g7, [%o0]
802     bne,pt %icc, 1b
803     sub %o0, 1, %o0
804     -
805     +99:
806     retl
807     mov %g1, %o0
808     +
809     + /* We can't just call memcpy for these memmove cases. On some
810     + * chips the memcpy uses cache initializing stores and when dst
811     + * and src are close enough, those can clobber the source data
812     + * before we've loaded it in.
813     + */
814     +2: or %o0, %o1, %g7
815     + or %o2, %g7, %g7
816     + andcc %g7, 0x7, %g0
817     + bne,pn %xcc, 4f
818     + nop
819     +
820     +3: ldx [%o1], %g7
821     + add %o1, 8, %o1
822     + subcc %o2, 8, %o2
823     + add %o0, 8, %o0
824     + bne,pt %icc, 3b
825     + stx %g7, [%o0 - 0x8]
826     + ba,a,pt %xcc, 99b
827     +
828     +4: ldub [%o1], %g7
829     + add %o1, 1, %o1
830     + subcc %o2, 1, %o2
831     + add %o0, 1, %o0
832     + bne,pt %icc, 4b
833     + stb %g7, [%o0 - 0x1]
834     + ba,a,pt %xcc, 99b
835     ENDPROC(memmove)
836     diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c
837     index be65f035d18a..5cbc96d801ff 100644
838     --- a/arch/sparc/mm/srmmu.c
839     +++ b/arch/sparc/mm/srmmu.c
840     @@ -460,10 +460,12 @@ static void __init sparc_context_init(int numctx)
841     void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm,
842     struct task_struct *tsk)
843     {
844     + unsigned long flags;
845     +
846     if (mm->context == NO_CONTEXT) {
847     - spin_lock(&srmmu_context_spinlock);
848     + spin_lock_irqsave(&srmmu_context_spinlock, flags);
849     alloc_context(old_mm, mm);
850     - spin_unlock(&srmmu_context_spinlock);
851     + spin_unlock_irqrestore(&srmmu_context_spinlock, flags);
852     srmmu_ctxd_set(&srmmu_context_table[mm->context], mm->pgd);
853     }
854    
855     @@ -986,14 +988,15 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
856    
857     void destroy_context(struct mm_struct *mm)
858     {
859     + unsigned long flags;
860    
861     if (mm->context != NO_CONTEXT) {
862     flush_cache_mm(mm);
863     srmmu_ctxd_set(&srmmu_context_table[mm->context], srmmu_swapper_pg_dir);
864     flush_tlb_mm(mm);
865     - spin_lock(&srmmu_context_spinlock);
866     + spin_lock_irqsave(&srmmu_context_spinlock, flags);
867     free_context(mm->context);
868     - spin_unlock(&srmmu_context_spinlock);
869     + spin_unlock_irqrestore(&srmmu_context_spinlock, flags);
870     mm->context = NO_CONTEXT;
871     }
872     }
873     diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c
874     index 70fece226d17..5a93783a8a0d 100644
875     --- a/arch/x86/crypto/aesni-intel_glue.c
876     +++ b/arch/x86/crypto/aesni-intel_glue.c
877     @@ -1137,7 +1137,7 @@ static int __driver_rfc4106_decrypt(struct aead_request *req)
878     src = kmalloc(req->cryptlen + req->assoclen, GFP_ATOMIC);
879     if (!src)
880     return -ENOMEM;
881     - assoc = (src + req->cryptlen + auth_tag_len);
882     + assoc = (src + req->cryptlen);
883     scatterwalk_map_and_copy(src, req->src, 0, req->cryptlen, 0);
884     scatterwalk_map_and_copy(assoc, req->assoc, 0,
885     req->assoclen, 0);
886     @@ -1162,7 +1162,7 @@ static int __driver_rfc4106_decrypt(struct aead_request *req)
887     scatterwalk_done(&src_sg_walk, 0, 0);
888     scatterwalk_done(&assoc_sg_walk, 0, 0);
889     } else {
890     - scatterwalk_map_and_copy(dst, req->dst, 0, req->cryptlen, 1);
891     + scatterwalk_map_and_copy(dst, req->dst, 0, tempCipherLen, 1);
892     kfree(src);
893     }
894     return retval;
895     diff --git a/arch/x86/include/asm/fpu-internal.h b/arch/x86/include/asm/fpu-internal.h
896     index e97622f57722..f895358db0ab 100644
897     --- a/arch/x86/include/asm/fpu-internal.h
898     +++ b/arch/x86/include/asm/fpu-internal.h
899     @@ -368,7 +368,7 @@ static inline void drop_fpu(struct task_struct *tsk)
900     preempt_disable();
901     tsk->thread.fpu_counter = 0;
902     __drop_fpu(tsk);
903     - clear_used_math();
904     + clear_stopped_child_used_math(tsk);
905     preempt_enable();
906     }
907    
908     diff --git a/arch/x86/kernel/apic/apic_numachip.c b/arch/x86/kernel/apic/apic_numachip.c
909     index 4128b5fcb559..2aaee79fb129 100644
910     --- a/arch/x86/kernel/apic/apic_numachip.c
911     +++ b/arch/x86/kernel/apic/apic_numachip.c
912     @@ -40,7 +40,7 @@ static unsigned int get_apic_id(unsigned long x)
913     unsigned int id;
914    
915     rdmsrl(MSR_FAM10H_NODE_ID, value);
916     - id = ((x >> 24) & 0xffU) | ((value << 2) & 0x3f00U);
917     + id = ((x >> 24) & 0xffU) | ((value << 2) & 0xff00U);
918    
919     return id;
920     }
921     diff --git a/arch/x86/kernel/xsave.c b/arch/x86/kernel/xsave.c
922     index 0de1fae2bdf0..8be1e1711203 100644
923     --- a/arch/x86/kernel/xsave.c
924     +++ b/arch/x86/kernel/xsave.c
925     @@ -378,7 +378,7 @@ int __restore_xstate_sig(void __user *buf, void __user *buf_fx, int size)
926     * thread's fpu state, reconstruct fxstate from the fsave
927     * header. Sanitize the copied state etc.
928     */
929     - struct xsave_struct *xsave = &tsk->thread.fpu.state->xsave;
930     + struct fpu *fpu = &tsk->thread.fpu;
931     struct user_i387_ia32_struct env;
932     int err = 0;
933    
934     @@ -392,14 +392,15 @@ int __restore_xstate_sig(void __user *buf, void __user *buf_fx, int size)
935     */
936     drop_fpu(tsk);
937    
938     - if (__copy_from_user(xsave, buf_fx, state_size) ||
939     + if (__copy_from_user(&fpu->state->xsave, buf_fx, state_size) ||
940     __copy_from_user(&env, buf, sizeof(env))) {
941     + fpu_finit(fpu);
942     err = -1;
943     } else {
944     sanitize_restored_xstate(tsk, &env, xstate_bv, fx_only);
945     - set_used_math();
946     }
947    
948     + set_used_math();
949     if (use_eager_fpu()) {
950     preempt_disable();
951     math_state_restore();
952     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
953     index 8b92cf4b165a..a38dd816015b 100644
954     --- a/arch/x86/kvm/x86.c
955     +++ b/arch/x86/kvm/x86.c
956     @@ -2713,7 +2713,6 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
957     case KVM_CAP_USER_NMI:
958     case KVM_CAP_REINJECT_CONTROL:
959     case KVM_CAP_IRQ_INJECT_STATUS:
960     - case KVM_CAP_IRQFD:
961     case KVM_CAP_IOEVENTFD:
962     case KVM_CAP_IOEVENTFD_NO_LENGTH:
963     case KVM_CAP_PIT2:
964     diff --git a/arch/x86/vdso/vdso32/sigreturn.S b/arch/x86/vdso/vdso32/sigreturn.S
965     index 31776d0efc8c..d7ec4e251c0a 100644
966     --- a/arch/x86/vdso/vdso32/sigreturn.S
967     +++ b/arch/x86/vdso/vdso32/sigreturn.S
968     @@ -17,6 +17,7 @@
969     .text
970     .globl __kernel_sigreturn
971     .type __kernel_sigreturn,@function
972     + nop /* this guy is needed for .LSTARTFDEDLSI1 below (watch for HACK) */
973     ALIGN
974     __kernel_sigreturn:
975     .LSTART_sigreturn:
976     diff --git a/drivers/char/tpm/tpm_i2c_stm_st33.c b/drivers/char/tpm/tpm_i2c_stm_st33.c
977     index 7d1c540fa26a..3f187a529e92 100644
978     --- a/drivers/char/tpm/tpm_i2c_stm_st33.c
979     +++ b/drivers/char/tpm/tpm_i2c_stm_st33.c
980     @@ -397,7 +397,7 @@ static int wait_for_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
981     */
982     static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
983     {
984     - int size = 0, burstcnt, len;
985     + int size = 0, burstcnt, len, ret;
986     struct i2c_client *client;
987    
988     client = (struct i2c_client *)TPM_VPRIV(chip);
989     @@ -406,13 +406,15 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
990     wait_for_stat(chip,
991     TPM_STS_DATA_AVAIL | TPM_STS_VALID,
992     chip->vendor.timeout_c,
993     - &chip->vendor.read_queue)
994     - == 0) {
995     + &chip->vendor.read_queue) == 0) {
996     burstcnt = get_burstcount(chip);
997     if (burstcnt < 0)
998     return burstcnt;
999     len = min_t(int, burstcnt, count - size);
1000     - I2C_READ_DATA(client, TPM_DATA_FIFO, buf + size, len);
1001     + ret = I2C_READ_DATA(client, TPM_DATA_FIFO, buf + size, len);
1002     + if (ret < 0)
1003     + return ret;
1004     +
1005     size += len;
1006     }
1007     return size;
1008     diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c
1009     index eff9d5870034..102463ba745d 100644
1010     --- a/drivers/char/tpm/tpm_ibmvtpm.c
1011     +++ b/drivers/char/tpm/tpm_ibmvtpm.c
1012     @@ -124,7 +124,7 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
1013     {
1014     struct ibmvtpm_dev *ibmvtpm;
1015     struct ibmvtpm_crq crq;
1016     - u64 *word = (u64 *) &crq;
1017     + __be64 *word = (__be64 *)&crq;
1018     int rc;
1019    
1020     ibmvtpm = (struct ibmvtpm_dev *)TPM_VPRIV(chip);
1021     @@ -145,11 +145,11 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
1022     memcpy((void *)ibmvtpm->rtce_buf, (void *)buf, count);
1023     crq.valid = (u8)IBMVTPM_VALID_CMD;
1024     crq.msg = (u8)VTPM_TPM_COMMAND;
1025     - crq.len = (u16)count;
1026     - crq.data = ibmvtpm->rtce_dma_handle;
1027     + crq.len = cpu_to_be16(count);
1028     + crq.data = cpu_to_be32(ibmvtpm->rtce_dma_handle);
1029    
1030     - rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(word[0]),
1031     - cpu_to_be64(word[1]));
1032     + rc = ibmvtpm_send_crq(ibmvtpm->vdev, be64_to_cpu(word[0]),
1033     + be64_to_cpu(word[1]));
1034     if (rc != H_SUCCESS) {
1035     dev_err(ibmvtpm->dev, "tpm_ibmvtpm_send failed rc=%d\n", rc);
1036     rc = 0;
1037     diff --git a/drivers/char/tpm/tpm_ibmvtpm.h b/drivers/char/tpm/tpm_ibmvtpm.h
1038     index bd82a791f995..b2c231b1beec 100644
1039     --- a/drivers/char/tpm/tpm_ibmvtpm.h
1040     +++ b/drivers/char/tpm/tpm_ibmvtpm.h
1041     @@ -22,9 +22,9 @@
1042     struct ibmvtpm_crq {
1043     u8 valid;
1044     u8 msg;
1045     - u16 len;
1046     - u32 data;
1047     - u64 reserved;
1048     + __be16 len;
1049     + __be32 data;
1050     + __be64 reserved;
1051     } __attribute__((packed, aligned(8)));
1052    
1053     struct ibmvtpm_crq_queue {
1054     diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
1055     index cf7a561fad7c..6e09c1dac2b7 100644
1056     --- a/drivers/char/virtio_console.c
1057     +++ b/drivers/char/virtio_console.c
1058     @@ -142,6 +142,7 @@ struct ports_device {
1059     * notification
1060     */
1061     struct work_struct control_work;
1062     + struct work_struct config_work;
1063    
1064     struct list_head ports;
1065    
1066     @@ -1832,10 +1833,21 @@ static void config_intr(struct virtio_device *vdev)
1067    
1068     portdev = vdev->priv;
1069    
1070     + if (!use_multiport(portdev))
1071     + schedule_work(&portdev->config_work);
1072     +}
1073     +
1074     +static void config_work_handler(struct work_struct *work)
1075     +{
1076     + struct ports_device *portdev;
1077     +
1078     + portdev = container_of(work, struct ports_device, control_work);
1079     if (!use_multiport(portdev)) {
1080     + struct virtio_device *vdev;
1081     struct port *port;
1082     u16 rows, cols;
1083    
1084     + vdev = portdev->vdev;
1085     virtio_cread(vdev, struct virtio_console_config, cols, &cols);
1086     virtio_cread(vdev, struct virtio_console_config, rows, &rows);
1087    
1088     @@ -2026,12 +2038,14 @@ static int virtcons_probe(struct virtio_device *vdev)
1089    
1090     virtio_device_ready(portdev->vdev);
1091    
1092     + INIT_WORK(&portdev->config_work, &config_work_handler);
1093     + INIT_WORK(&portdev->control_work, &control_work_handler);
1094     +
1095     if (multiport) {
1096     unsigned int nr_added_bufs;
1097    
1098     spin_lock_init(&portdev->c_ivq_lock);
1099     spin_lock_init(&portdev->c_ovq_lock);
1100     - INIT_WORK(&portdev->control_work, &control_work_handler);
1101    
1102     nr_added_bufs = fill_queue(portdev->c_ivq,
1103     &portdev->c_ivq_lock);
1104     @@ -2099,6 +2113,8 @@ static void virtcons_remove(struct virtio_device *vdev)
1105     /* Finish up work that's lined up */
1106     if (use_multiport(portdev))
1107     cancel_work_sync(&portdev->control_work);
1108     + else
1109     + cancel_work_sync(&portdev->config_work);
1110    
1111     list_for_each_entry_safe(port, port2, &portdev->ports, list)
1112     unplug_port(port);
1113     @@ -2150,6 +2166,7 @@ static int virtcons_freeze(struct virtio_device *vdev)
1114    
1115     virtqueue_disable_cb(portdev->c_ivq);
1116     cancel_work_sync(&portdev->control_work);
1117     + cancel_work_sync(&portdev->config_work);
1118     /*
1119     * Once more: if control_work_handler() was running, it would
1120     * enable the cb as the last step.
1121     diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
1122     index e79c8d3700d8..da41ad42d3a6 100644
1123     --- a/drivers/gpu/drm/drm_crtc.c
1124     +++ b/drivers/gpu/drm/drm_crtc.c
1125     @@ -42,9 +42,10 @@
1126     #include "drm_crtc_internal.h"
1127     #include "drm_internal.h"
1128    
1129     -static struct drm_framebuffer *add_framebuffer_internal(struct drm_device *dev,
1130     - struct drm_mode_fb_cmd2 *r,
1131     - struct drm_file *file_priv);
1132     +static struct drm_framebuffer *
1133     +internal_framebuffer_create(struct drm_device *dev,
1134     + struct drm_mode_fb_cmd2 *r,
1135     + struct drm_file *file_priv);
1136    
1137     /* Avoid boilerplate. I'm tired of typing. */
1138     #define DRM_ENUM_NAME_FN(fnname, list) \
1139     @@ -2739,13 +2740,11 @@ static int drm_mode_cursor_universal(struct drm_crtc *crtc,
1140     */
1141     if (req->flags & DRM_MODE_CURSOR_BO) {
1142     if (req->handle) {
1143     - fb = add_framebuffer_internal(dev, &fbreq, file_priv);
1144     + fb = internal_framebuffer_create(dev, &fbreq, file_priv);
1145     if (IS_ERR(fb)) {
1146     DRM_DEBUG_KMS("failed to wrap cursor buffer in drm framebuffer\n");
1147     return PTR_ERR(fb);
1148     }
1149     -
1150     - drm_framebuffer_reference(fb);
1151     } else {
1152     fb = NULL;
1153     }
1154     @@ -3114,9 +3113,10 @@ static int framebuffer_check(const struct drm_mode_fb_cmd2 *r)
1155     return 0;
1156     }
1157    
1158     -static struct drm_framebuffer *add_framebuffer_internal(struct drm_device *dev,
1159     - struct drm_mode_fb_cmd2 *r,
1160     - struct drm_file *file_priv)
1161     +static struct drm_framebuffer *
1162     +internal_framebuffer_create(struct drm_device *dev,
1163     + struct drm_mode_fb_cmd2 *r,
1164     + struct drm_file *file_priv)
1165     {
1166     struct drm_mode_config *config = &dev->mode_config;
1167     struct drm_framebuffer *fb;
1168     @@ -3148,12 +3148,6 @@ static struct drm_framebuffer *add_framebuffer_internal(struct drm_device *dev,
1169     return fb;
1170     }
1171    
1172     - mutex_lock(&file_priv->fbs_lock);
1173     - r->fb_id = fb->base.id;
1174     - list_add(&fb->filp_head, &file_priv->fbs);
1175     - DRM_DEBUG_KMS("[FB:%d]\n", fb->base.id);
1176     - mutex_unlock(&file_priv->fbs_lock);
1177     -
1178     return fb;
1179     }
1180    
1181     @@ -3175,15 +3169,24 @@ static struct drm_framebuffer *add_framebuffer_internal(struct drm_device *dev,
1182     int drm_mode_addfb2(struct drm_device *dev,
1183     void *data, struct drm_file *file_priv)
1184     {
1185     + struct drm_mode_fb_cmd2 *r = data;
1186     struct drm_framebuffer *fb;
1187    
1188     if (!drm_core_check_feature(dev, DRIVER_MODESET))
1189     return -EINVAL;
1190    
1191     - fb = add_framebuffer_internal(dev, data, file_priv);
1192     + fb = internal_framebuffer_create(dev, r, file_priv);
1193     if (IS_ERR(fb))
1194     return PTR_ERR(fb);
1195    
1196     + /* Transfer ownership to the filp for reaping on close */
1197     +
1198     + DRM_DEBUG_KMS("[FB:%d]\n", fb->base.id);
1199     + mutex_lock(&file_priv->fbs_lock);
1200     + r->fb_id = fb->base.id;
1201     + list_add(&fb->filp_head, &file_priv->fbs);
1202     + mutex_unlock(&file_priv->fbs_lock);
1203     +
1204     return 0;
1205     }
1206    
1207     diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
1208     index dce0d3918fa7..9f0e62529c46 100644
1209     --- a/drivers/gpu/drm/radeon/atombios_crtc.c
1210     +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
1211     @@ -1405,6 +1405,9 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
1212     (x << 16) | y);
1213     viewport_w = crtc->mode.hdisplay;
1214     viewport_h = (crtc->mode.vdisplay + 1) & ~1;
1215     + if ((rdev->family >= CHIP_BONAIRE) &&
1216     + (crtc->mode.flags & DRM_MODE_FLAG_INTERLACE))
1217     + viewport_h *= 2;
1218     WREG32(EVERGREEN_VIEWPORT_SIZE + radeon_crtc->crtc_offset,
1219     (viewport_w << 16) | viewport_h);
1220    
1221     diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
1222     index 5f395be9b3e3..0c6fbc0198a5 100644
1223     --- a/drivers/gpu/drm/radeon/cik.c
1224     +++ b/drivers/gpu/drm/radeon/cik.c
1225     @@ -7555,6 +7555,9 @@ int cik_irq_set(struct radeon_device *rdev)
1226     WREG32(DC_HPD5_INT_CONTROL, hpd5);
1227     WREG32(DC_HPD6_INT_CONTROL, hpd6);
1228    
1229     + /* posting read */
1230     + RREG32(SRBM_STATUS);
1231     +
1232     return 0;
1233     }
1234    
1235     diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
1236     index 85995b4e3338..c674f63d7f14 100644
1237     --- a/drivers/gpu/drm/radeon/evergreen.c
1238     +++ b/drivers/gpu/drm/radeon/evergreen.c
1239     @@ -4589,6 +4589,9 @@ int evergreen_irq_set(struct radeon_device *rdev)
1240     WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, afmt5);
1241     WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, afmt6);
1242    
1243     + /* posting read */
1244     + RREG32(SRBM_STATUS);
1245     +
1246     return 0;
1247     }
1248    
1249     diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
1250     index cdf6e2149539..a959cc1e7c8e 100644
1251     --- a/drivers/gpu/drm/radeon/r100.c
1252     +++ b/drivers/gpu/drm/radeon/r100.c
1253     @@ -728,6 +728,10 @@ int r100_irq_set(struct radeon_device *rdev)
1254     tmp |= RADEON_FP2_DETECT_MASK;
1255     }
1256     WREG32(RADEON_GEN_INT_CNTL, tmp);
1257     +
1258     + /* read back to post the write */
1259     + RREG32(RADEON_GEN_INT_CNTL);
1260     +
1261     return 0;
1262     }
1263    
1264     diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
1265     index 56b02927cd3d..ee0868dec2f4 100644
1266     --- a/drivers/gpu/drm/radeon/r600.c
1267     +++ b/drivers/gpu/drm/radeon/r600.c
1268     @@ -3787,6 +3787,9 @@ int r600_irq_set(struct radeon_device *rdev)
1269     WREG32(RV770_CG_THERMAL_INT, thermal_int);
1270     }
1271    
1272     + /* posting read */
1273     + RREG32(R_000E50_SRBM_STATUS);
1274     +
1275     return 0;
1276     }
1277    
1278     diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
1279     index 6f377de099f9..a5b7f6f98f5f 100644
1280     --- a/drivers/gpu/drm/radeon/radeon_cs.c
1281     +++ b/drivers/gpu/drm/radeon/radeon_cs.c
1282     @@ -275,11 +275,13 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data)
1283     u32 ring = RADEON_CS_RING_GFX;
1284     s32 priority = 0;
1285    
1286     + INIT_LIST_HEAD(&p->validated);
1287     +
1288     if (!cs->num_chunks) {
1289     return 0;
1290     }
1291     +
1292     /* get chunks */
1293     - INIT_LIST_HEAD(&p->validated);
1294     p->idx = 0;
1295     p->ib.sa_bo = NULL;
1296     p->ib.semaphore = NULL;
1297     diff --git a/drivers/gpu/drm/radeon/radeon_fence.c b/drivers/gpu/drm/radeon/radeon_fence.c
1298     index 995167025282..8569afaba688 100644
1299     --- a/drivers/gpu/drm/radeon/radeon_fence.c
1300     +++ b/drivers/gpu/drm/radeon/radeon_fence.c
1301     @@ -1029,37 +1029,59 @@ static inline bool radeon_test_signaled(struct radeon_fence *fence)
1302     return test_bit(FENCE_FLAG_SIGNALED_BIT, &fence->base.flags);
1303     }
1304    
1305     +struct radeon_wait_cb {
1306     + struct fence_cb base;
1307     + struct task_struct *task;
1308     +};
1309     +
1310     +static void
1311     +radeon_fence_wait_cb(struct fence *fence, struct fence_cb *cb)
1312     +{
1313     + struct radeon_wait_cb *wait =
1314     + container_of(cb, struct radeon_wait_cb, base);
1315     +
1316     + wake_up_process(wait->task);
1317     +}
1318     +
1319     static signed long radeon_fence_default_wait(struct fence *f, bool intr,
1320     signed long t)
1321     {
1322     struct radeon_fence *fence = to_radeon_fence(f);
1323     struct radeon_device *rdev = fence->rdev;
1324     - bool signaled;
1325     + struct radeon_wait_cb cb;
1326    
1327     - fence_enable_sw_signaling(&fence->base);
1328     + cb.task = current;
1329    
1330     - /*
1331     - * This function has to return -EDEADLK, but cannot hold
1332     - * exclusive_lock during the wait because some callers
1333     - * may already hold it. This means checking needs_reset without
1334     - * lock, and not fiddling with any gpu internals.
1335     - *
1336     - * The callback installed with fence_enable_sw_signaling will
1337     - * run before our wait_event_*timeout call, so we will see
1338     - * both the signaled fence and the changes to needs_reset.
1339     - */
1340     + if (fence_add_callback(f, &cb.base, radeon_fence_wait_cb))
1341     + return t;
1342     +
1343     + while (t > 0) {
1344     + if (intr)
1345     + set_current_state(TASK_INTERRUPTIBLE);
1346     + else
1347     + set_current_state(TASK_UNINTERRUPTIBLE);
1348     +
1349     + /*
1350     + * radeon_test_signaled must be called after
1351     + * set_current_state to prevent a race with wake_up_process
1352     + */
1353     + if (radeon_test_signaled(fence))
1354     + break;
1355     +
1356     + if (rdev->needs_reset) {
1357     + t = -EDEADLK;
1358     + break;
1359     + }
1360     +
1361     + t = schedule_timeout(t);
1362     +
1363     + if (t > 0 && intr && signal_pending(current))
1364     + t = -ERESTARTSYS;
1365     + }
1366     +
1367     + __set_current_state(TASK_RUNNING);
1368     + fence_remove_callback(f, &cb.base);
1369    
1370     - if (intr)
1371     - t = wait_event_interruptible_timeout(rdev->fence_queue,
1372     - ((signaled = radeon_test_signaled(fence)) ||
1373     - rdev->needs_reset), t);
1374     - else
1375     - t = wait_event_timeout(rdev->fence_queue,
1376     - ((signaled = radeon_test_signaled(fence)) ||
1377     - rdev->needs_reset), t);
1378     -
1379     - if (t > 0 && !signaled)
1380     - return -EDEADLK;
1381     return t;
1382     }
1383    
1384     diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
1385     index 194f6245c379..2a7ba30165c7 100644
1386     --- a/drivers/gpu/drm/radeon/radeon_object.c
1387     +++ b/drivers/gpu/drm/radeon/radeon_object.c
1388     @@ -151,19 +151,6 @@ void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain)
1389     else
1390     rbo->placements[i].lpfn = 0;
1391     }
1392     -
1393     - /*
1394     - * Use two-ended allocation depending on the buffer size to
1395     - * improve fragmentation quality.
1396     - * 512kb was measured as the most optimal number.
1397     - */
1398     - if (!((rbo->flags & RADEON_GEM_CPU_ACCESS) &&
1399     - (rbo->placements[i].flags & TTM_PL_FLAG_VRAM)) &&
1400     - rbo->tbo.mem.size > 512 * 1024) {
1401     - for (i = 0; i < c; i++) {
1402     - rbo->placements[i].flags |= TTM_PL_FLAG_TOPDOWN;
1403     - }
1404     - }
1405     }
1406    
1407     int radeon_bo_create(struct radeon_device *rdev,
1408     diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
1409     index 74bce91aecc1..039660662ee8 100644
1410     --- a/drivers/gpu/drm/radeon/rs600.c
1411     +++ b/drivers/gpu/drm/radeon/rs600.c
1412     @@ -693,6 +693,10 @@ int rs600_irq_set(struct radeon_device *rdev)
1413     WREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL, hpd2);
1414     if (ASIC_IS_DCE2(rdev))
1415     WREG32(R_007408_HDMI0_AUDIO_PACKET_CONTROL, hdmi0);
1416     +
1417     + /* posting read */
1418     + RREG32(R_000040_GEN_INT_CNTL);
1419     +
1420     return 0;
1421     }
1422    
1423     diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
1424     index 7d5083dc4acb..1c3d90c17cb3 100644
1425     --- a/drivers/gpu/drm/radeon/si.c
1426     +++ b/drivers/gpu/drm/radeon/si.c
1427     @@ -6192,6 +6192,9 @@ int si_irq_set(struct radeon_device *rdev)
1428    
1429     WREG32(CG_THERMAL_INT, thermal_int);
1430    
1431     + /* posting read */
1432     + RREG32(SRBM_STATUS);
1433     +
1434     return 0;
1435     }
1436    
1437     @@ -7112,8 +7115,7 @@ int si_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk)
1438     WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_BYPASS_EN_MASK, ~UPLL_BYPASS_EN_MASK);
1439    
1440     if (!vclk || !dclk) {
1441     - /* keep the Bypass mode, put PLL to sleep */
1442     - WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_SLEEP_MASK, ~UPLL_SLEEP_MASK);
1443     + /* keep the Bypass mode */
1444     return 0;
1445     }
1446    
1447     @@ -7129,8 +7131,7 @@ int si_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk)
1448     /* set VCO_MODE to 1 */
1449     WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_VCO_MODE_MASK, ~UPLL_VCO_MODE_MASK);
1450    
1451     - /* toggle UPLL_SLEEP to 1 then back to 0 */
1452     - WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_SLEEP_MASK, ~UPLL_SLEEP_MASK);
1453     + /* disable sleep mode */
1454     WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_SLEEP_MASK);
1455    
1456     /* deassert UPLL_RESET */
1457     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
1458     index 810dac80179c..0426b5bed8fc 100644
1459     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
1460     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
1461     @@ -725,32 +725,6 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
1462     goto out_err1;
1463     }
1464    
1465     - ret = ttm_bo_init_mm(&dev_priv->bdev, TTM_PL_VRAM,
1466     - (dev_priv->vram_size >> PAGE_SHIFT));
1467     - if (unlikely(ret != 0)) {
1468     - DRM_ERROR("Failed initializing memory manager for VRAM.\n");
1469     - goto out_err2;
1470     - }
1471     -
1472     - dev_priv->has_gmr = true;
1473     - if (((dev_priv->capabilities & (SVGA_CAP_GMR | SVGA_CAP_GMR2)) == 0) ||
1474     - refuse_dma || ttm_bo_init_mm(&dev_priv->bdev, VMW_PL_GMR,
1475     - VMW_PL_GMR) != 0) {
1476     - DRM_INFO("No GMR memory available. "
1477     - "Graphics memory resources are very limited.\n");
1478     - dev_priv->has_gmr = false;
1479     - }
1480     -
1481     - if (dev_priv->capabilities & SVGA_CAP_GBOBJECTS) {
1482     - dev_priv->has_mob = true;
1483     - if (ttm_bo_init_mm(&dev_priv->bdev, VMW_PL_MOB,
1484     - VMW_PL_MOB) != 0) {
1485     - DRM_INFO("No MOB memory available. "
1486     - "3D will be disabled.\n");
1487     - dev_priv->has_mob = false;
1488     - }
1489     - }
1490     -
1491     dev_priv->mmio_mtrr = arch_phys_wc_add(dev_priv->mmio_start,
1492     dev_priv->mmio_size);
1493    
1494     @@ -813,6 +787,33 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
1495     goto out_no_fman;
1496     }
1497    
1498     +
1499     + ret = ttm_bo_init_mm(&dev_priv->bdev, TTM_PL_VRAM,
1500     + (dev_priv->vram_size >> PAGE_SHIFT));
1501     + if (unlikely(ret != 0)) {
1502     + DRM_ERROR("Failed initializing memory manager for VRAM.\n");
1503     + goto out_no_vram;
1504     + }
1505     +
1506     + dev_priv->has_gmr = true;
1507     + if (((dev_priv->capabilities & (SVGA_CAP_GMR | SVGA_CAP_GMR2)) == 0) ||
1508     + refuse_dma || ttm_bo_init_mm(&dev_priv->bdev, VMW_PL_GMR,
1509     + VMW_PL_GMR) != 0) {
1510     + DRM_INFO("No GMR memory available. "
1511     + "Graphics memory resources are very limited.\n");
1512     + dev_priv->has_gmr = false;
1513     + }
1514     +
1515     + if (dev_priv->capabilities & SVGA_CAP_GBOBJECTS) {
1516     + dev_priv->has_mob = true;
1517     + if (ttm_bo_init_mm(&dev_priv->bdev, VMW_PL_MOB,
1518     + VMW_PL_MOB) != 0) {
1519     + DRM_INFO("No MOB memory available. "
1520     + "3D will be disabled.\n");
1521     + dev_priv->has_mob = false;
1522     + }
1523     + }
1524     +
1525     vmw_kms_save_vga(dev_priv);
1526    
1527     /* Start kms and overlay systems, needs fifo. */
1528     @@ -838,6 +839,12 @@ out_no_fifo:
1529     vmw_kms_close(dev_priv);
1530     out_no_kms:
1531     vmw_kms_restore_vga(dev_priv);
1532     + if (dev_priv->has_mob)
1533     + (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB);
1534     + if (dev_priv->has_gmr)
1535     + (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR);
1536     + (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM);
1537     +out_no_vram:
1538     vmw_fence_manager_takedown(dev_priv->fman);
1539     out_no_fman:
1540     if (dev_priv->capabilities & SVGA_CAP_IRQMASK)
1541     @@ -853,12 +860,6 @@ out_err4:
1542     iounmap(dev_priv->mmio_virt);
1543     out_err3:
1544     arch_phys_wc_del(dev_priv->mmio_mtrr);
1545     - if (dev_priv->has_mob)
1546     - (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB);
1547     - if (dev_priv->has_gmr)
1548     - (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR);
1549     - (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM);
1550     -out_err2:
1551     (void)ttm_bo_device_release(&dev_priv->bdev);
1552     out_err1:
1553     vmw_ttm_global_release(dev_priv);
1554     @@ -888,6 +889,13 @@ static int vmw_driver_unload(struct drm_device *dev)
1555     }
1556     vmw_kms_close(dev_priv);
1557     vmw_overlay_close(dev_priv);
1558     +
1559     + if (dev_priv->has_mob)
1560     + (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB);
1561     + if (dev_priv->has_gmr)
1562     + (void)ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR);
1563     + (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM);
1564     +
1565     vmw_fence_manager_takedown(dev_priv->fman);
1566     if (dev_priv->capabilities & SVGA_CAP_IRQMASK)
1567     drm_irq_uninstall(dev_priv->dev);
1568     @@ -899,11 +907,6 @@ static int vmw_driver_unload(struct drm_device *dev)
1569     ttm_object_device_release(&dev_priv->tdev);
1570     iounmap(dev_priv->mmio_virt);
1571     arch_phys_wc_del(dev_priv->mmio_mtrr);
1572     - if (dev_priv->has_mob)
1573     - (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB);
1574     - if (dev_priv->has_gmr)
1575     - (void)ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR);
1576     - (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM);
1577     (void)ttm_bo_device_release(&dev_priv->bdev);
1578     vmw_ttm_global_release(dev_priv);
1579    
1580     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
1581     index 596cd6dafd33..50b52802f470 100644
1582     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
1583     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
1584     @@ -2778,13 +2778,11 @@ int vmw_execbuf_ioctl(struct drm_device *dev, void *data,
1585     NULL, arg->command_size, arg->throttle_us,
1586     (void __user *)(unsigned long)arg->fence_rep,
1587     NULL);
1588     -
1589     + ttm_read_unlock(&dev_priv->reservation_sem);
1590     if (unlikely(ret != 0))
1591     - goto out_unlock;
1592     + return ret;
1593    
1594     vmw_kms_cursor_post_execbuf(dev_priv);
1595    
1596     -out_unlock:
1597     - ttm_read_unlock(&dev_priv->reservation_sem);
1598     - return ret;
1599     + return 0;
1600     }
1601     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
1602     index fddd53335237..173ec3377e4f 100644
1603     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
1604     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
1605     @@ -2033,23 +2033,17 @@ int vmw_kms_update_layout_ioctl(struct drm_device *dev, void *data,
1606     int i;
1607     struct drm_mode_config *mode_config = &dev->mode_config;
1608    
1609     - ret = ttm_read_lock(&dev_priv->reservation_sem, true);
1610     - if (unlikely(ret != 0))
1611     - return ret;
1612     -
1613     if (!arg->num_outputs) {
1614     struct drm_vmw_rect def_rect = {0, 0, 800, 600};
1615     vmw_du_update_layout(dev_priv, 1, &def_rect);
1616     - goto out_unlock;
1617     + return 0;
1618     }
1619    
1620     rects_size = arg->num_outputs * sizeof(struct drm_vmw_rect);
1621     rects = kcalloc(arg->num_outputs, sizeof(struct drm_vmw_rect),
1622     GFP_KERNEL);
1623     - if (unlikely(!rects)) {
1624     - ret = -ENOMEM;
1625     - goto out_unlock;
1626     - }
1627     + if (unlikely(!rects))
1628     + return -ENOMEM;
1629    
1630     user_rects = (void __user *)(unsigned long)arg->rects;
1631     ret = copy_from_user(rects, user_rects, rects_size);
1632     @@ -2074,7 +2068,5 @@ int vmw_kms_update_layout_ioctl(struct drm_device *dev, void *data,
1633    
1634     out_free:
1635     kfree(rects);
1636     -out_unlock:
1637     - ttm_read_unlock(&dev_priv->reservation_sem);
1638     return ret;
1639     }
1640     diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
1641     index f43b4e11647a..17a1853c6c2f 100644
1642     --- a/drivers/i2c/i2c-core.c
1643     +++ b/drivers/i2c/i2c-core.c
1644     @@ -665,9 +665,6 @@ static int i2c_device_remove(struct device *dev)
1645     status = driver->remove(client);
1646     }
1647    
1648     - if (dev->of_node)
1649     - irq_dispose_mapping(client->irq);
1650     -
1651     dev_pm_domain_detach(&client->dev, true);
1652     return status;
1653     }
1654     diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-armada-370-xp.c
1655     index 6a2e168c3ab0..41ac85af043e 100644
1656     --- a/drivers/irqchip/irq-armada-370-xp.c
1657     +++ b/drivers/irqchip/irq-armada-370-xp.c
1658     @@ -67,6 +67,7 @@
1659     static void __iomem *per_cpu_int_base;
1660     static void __iomem *main_int_base;
1661     static struct irq_domain *armada_370_xp_mpic_domain;
1662     +static int parent_irq;
1663     #ifdef CONFIG_PCI_MSI
1664     static struct irq_domain *armada_370_xp_msi_domain;
1665     static DECLARE_BITMAP(msi_used, PCI_MSI_DOORBELL_NR);
1666     @@ -354,6 +355,7 @@ static int armada_xp_mpic_secondary_init(struct notifier_block *nfb,
1667     {
1668     if (action == CPU_STARTING || action == CPU_STARTING_FROZEN)
1669     armada_xp_mpic_smp_cpu_init();
1670     +
1671     return NOTIFY_OK;
1672     }
1673    
1674     @@ -362,6 +364,20 @@ static struct notifier_block armada_370_xp_mpic_cpu_notifier = {
1675     .priority = 100,
1676     };
1677    
1678     +static int mpic_cascaded_secondary_init(struct notifier_block *nfb,
1679     + unsigned long action, void *hcpu)
1680     +{
1681     + if (action == CPU_STARTING || action == CPU_STARTING_FROZEN)
1682     + enable_percpu_irq(parent_irq, IRQ_TYPE_NONE);
1683     +
1684     + return NOTIFY_OK;
1685     +}
1686     +
1687     +static struct notifier_block mpic_cascaded_cpu_notifier = {
1688     + .notifier_call = mpic_cascaded_secondary_init,
1689     + .priority = 100,
1690     +};
1691     +
1692     #endif /* CONFIG_SMP */
1693    
1694     static struct irq_domain_ops armada_370_xp_mpic_irq_ops = {
1695     @@ -489,7 +505,7 @@ static int __init armada_370_xp_mpic_of_init(struct device_node *node,
1696     struct device_node *parent)
1697     {
1698     struct resource main_int_res, per_cpu_int_res;
1699     - int parent_irq, nr_irqs, i;
1700     + int nr_irqs, i;
1701     u32 control;
1702    
1703     BUG_ON(of_address_to_resource(node, 0, &main_int_res));
1704     @@ -537,6 +553,9 @@ static int __init armada_370_xp_mpic_of_init(struct device_node *node,
1705     register_cpu_notifier(&armada_370_xp_mpic_cpu_notifier);
1706     #endif
1707     } else {
1708     +#ifdef CONFIG_SMP
1709     + register_cpu_notifier(&mpic_cascaded_cpu_notifier);
1710     +#endif
1711     irq_set_chained_handler(parent_irq,
1712     armada_370_xp_mpic_handle_cascade_irq);
1713     }
1714     diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
1715     index 96b0b1d27df1..bc677362bc73 100644
1716     --- a/drivers/mtd/nand/pxa3xx_nand.c
1717     +++ b/drivers/mtd/nand/pxa3xx_nand.c
1718     @@ -480,6 +480,42 @@ static void disable_int(struct pxa3xx_nand_info *info, uint32_t int_mask)
1719     nand_writel(info, NDCR, ndcr | int_mask);
1720     }
1721    
1722     +static void drain_fifo(struct pxa3xx_nand_info *info, void *data, int len)
1723     +{
1724     + if (info->ecc_bch) {
1725     + int timeout;
1726     +
1727     + /*
1728     + * According to the datasheet, when reading from NDDB
1729     + * with BCH enabled, after each 32 bytes reads, we
1730     + * have to make sure that the NDSR.RDDREQ bit is set.
1731     + *
1732     + * Drain the FIFO 8 32 bits reads at a time, and skip
1733     + * the polling on the last read.
1734     + */
1735     + while (len > 8) {
1736     + __raw_readsl(info->mmio_base + NDDB, data, 8);
1737     +
1738     + for (timeout = 0;
1739     + !(nand_readl(info, NDSR) & NDSR_RDDREQ);
1740     + timeout++) {
1741     + if (timeout >= 5) {
1742     + dev_err(&info->pdev->dev,
1743     + "Timeout on RDDREQ while draining the FIFO\n");
1744     + return;
1745     + }
1746     +
1747     + mdelay(1);
1748     + }
1749     +
1750     + data += 32;
1751     + len -= 8;
1752     + }
1753     + }
1754     +
1755     + __raw_readsl(info->mmio_base + NDDB, data, len);
1756     +}
1757     +
1758     static void handle_data_pio(struct pxa3xx_nand_info *info)
1759     {
1760     unsigned int do_bytes = min(info->data_size, info->chunk_size);
1761     @@ -496,14 +532,14 @@ static void handle_data_pio(struct pxa3xx_nand_info *info)
1762     DIV_ROUND_UP(info->oob_size, 4));
1763     break;
1764     case STATE_PIO_READING:
1765     - __raw_readsl(info->mmio_base + NDDB,
1766     - info->data_buff + info->data_buff_pos,
1767     - DIV_ROUND_UP(do_bytes, 4));
1768     + drain_fifo(info,
1769     + info->data_buff + info->data_buff_pos,
1770     + DIV_ROUND_UP(do_bytes, 4));
1771    
1772     if (info->oob_size > 0)
1773     - __raw_readsl(info->mmio_base + NDDB,
1774     - info->oob_buff + info->oob_buff_pos,
1775     - DIV_ROUND_UP(info->oob_size, 4));
1776     + drain_fifo(info,
1777     + info->oob_buff + info->oob_buff_pos,
1778     + DIV_ROUND_UP(info->oob_size, 4));
1779     break;
1780     default:
1781     dev_err(&info->pdev->dev, "%s: invalid state %d\n", __func__,
1782     diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
1783     index 4b008c9c738d..573b53b38af4 100644
1784     --- a/drivers/net/can/dev.c
1785     +++ b/drivers/net/can/dev.c
1786     @@ -500,6 +500,10 @@ struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf)
1787     skb->pkt_type = PACKET_BROADCAST;
1788     skb->ip_summed = CHECKSUM_UNNECESSARY;
1789    
1790     + skb_reset_mac_header(skb);
1791     + skb_reset_network_header(skb);
1792     + skb_reset_transport_header(skb);
1793     +
1794     can_skb_reserve(skb);
1795     can_skb_prv(skb)->ifindex = dev->ifindex;
1796    
1797     @@ -524,6 +528,10 @@ struct sk_buff *alloc_canfd_skb(struct net_device *dev,
1798     skb->pkt_type = PACKET_BROADCAST;
1799     skb->ip_summed = CHECKSUM_UNNECESSARY;
1800    
1801     + skb_reset_mac_header(skb);
1802     + skb_reset_network_header(skb);
1803     + skb_reset_transport_header(skb);
1804     +
1805     can_skb_reserve(skb);
1806     can_skb_prv(skb)->ifindex = dev->ifindex;
1807    
1808     diff --git a/drivers/net/can/usb/kvaser_usb.c b/drivers/net/can/usb/kvaser_usb.c
1809     index 8b255e777cc7..5d777956ae1f 100644
1810     --- a/drivers/net/can/usb/kvaser_usb.c
1811     +++ b/drivers/net/can/usb/kvaser_usb.c
1812     @@ -12,6 +12,7 @@
1813     * Copyright (C) 2012 Olivier Sobrie <olivier@sobrie.be>
1814     */
1815    
1816     +#include <linux/kernel.h>
1817     #include <linux/completion.h>
1818     #include <linux/module.h>
1819     #include <linux/netdevice.h>
1820     @@ -403,8 +404,15 @@ static int kvaser_usb_wait_msg(const struct kvaser_usb *dev, u8 id,
1821     while (pos <= actual_len - MSG_HEADER_LEN) {
1822     tmp = buf + pos;
1823    
1824     - if (!tmp->len)
1825     - break;
1826     + /* Handle messages crossing the USB endpoint max packet
1827     + * size boundary. Check kvaser_usb_read_bulk_callback()
1828     + * for further details.
1829     + */
1830     + if (tmp->len == 0) {
1831     + pos = round_up(pos,
1832     + dev->bulk_in->wMaxPacketSize);
1833     + continue;
1834     + }
1835    
1836     if (pos + tmp->len > actual_len) {
1837     dev_err(dev->udev->dev.parent,
1838     @@ -983,8 +991,19 @@ static void kvaser_usb_read_bulk_callback(struct urb *urb)
1839     while (pos <= urb->actual_length - MSG_HEADER_LEN) {
1840     msg = urb->transfer_buffer + pos;
1841    
1842     - if (!msg->len)
1843     - break;
1844     + /* The Kvaser firmware can only read and write messages that
1845     + * does not cross the USB's endpoint wMaxPacketSize boundary.
1846     + * If a follow-up command crosses such boundary, firmware puts
1847     + * a placeholder zero-length command in its place then aligns
1848     + * the real command to the next max packet size.
1849     + *
1850     + * Handle such cases or we're going to miss a significant
1851     + * number of events in case of a heavy rx load on the bus.
1852     + */
1853     + if (msg->len == 0) {
1854     + pos = round_up(pos, dev->bulk_in->wMaxPacketSize);
1855     + continue;
1856     + }
1857    
1858     if (pos + msg->len > urb->actual_length) {
1859     dev_err(dev->udev->dev.parent, "Format error\n");
1860     @@ -992,7 +1011,6 @@ static void kvaser_usb_read_bulk_callback(struct urb *urb)
1861     }
1862    
1863     kvaser_usb_handle_message(dev, msg);
1864     -
1865     pos += msg->len;
1866     }
1867    
1868     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
1869     index 74fbf9ea7bd8..710eb5793eb3 100644
1870     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
1871     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
1872     @@ -12711,6 +12711,9 @@ static int bnx2x_init_dev(struct bnx2x *bp, struct pci_dev *pdev,
1873     pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS,
1874     PCICFG_VENDOR_ID_OFFSET);
1875    
1876     + /* Set PCIe reset type to fundamental for EEH recovery */
1877     + pdev->needs_freset = 1;
1878     +
1879     /* AER (Advanced Error reporting) configuration */
1880     rc = pci_enable_pcie_error_reporting(pdev);
1881     if (!rc)
1882     diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
1883     index 3dca494797bd..96ba23e90111 100644
1884     --- a/drivers/net/ethernet/freescale/fec_main.c
1885     +++ b/drivers/net/ethernet/freescale/fec_main.c
1886     @@ -1464,8 +1464,7 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id)
1887    
1888     vlan_packet_rcvd = true;
1889    
1890     - skb_copy_to_linear_data_offset(skb, VLAN_HLEN,
1891     - data, (2 * ETH_ALEN));
1892     + memmove(skb->data + VLAN_HLEN, data, ETH_ALEN * 2);
1893     skb_pull(skb, VLAN_HLEN);
1894     }
1895    
1896     diff --git a/drivers/net/usb/cx82310_eth.c b/drivers/net/usb/cx82310_eth.c
1897     index 3eed708a6182..fe48f4c51373 100644
1898     --- a/drivers/net/usb/cx82310_eth.c
1899     +++ b/drivers/net/usb/cx82310_eth.c
1900     @@ -300,9 +300,18 @@ static const struct driver_info cx82310_info = {
1901     .tx_fixup = cx82310_tx_fixup,
1902     };
1903    
1904     +#define USB_DEVICE_CLASS(vend, prod, cl, sc, pr) \
1905     + .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
1906     + USB_DEVICE_ID_MATCH_DEV_INFO, \
1907     + .idVendor = (vend), \
1908     + .idProduct = (prod), \
1909     + .bDeviceClass = (cl), \
1910     + .bDeviceSubClass = (sc), \
1911     + .bDeviceProtocol = (pr)
1912     +
1913     static const struct usb_device_id products[] = {
1914     {
1915     - USB_DEVICE_AND_INTERFACE_INFO(0x0572, 0xcb01, 0xff, 0, 0),
1916     + USB_DEVICE_CLASS(0x0572, 0xcb01, 0xff, 0, 0),
1917     .driver_info = (unsigned long) &cx82310_info
1918     },
1919     { },
1920     diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
1921     index b0bc8ead47de..484ecce78025 100644
1922     --- a/drivers/net/virtio_net.c
1923     +++ b/drivers/net/virtio_net.c
1924     @@ -1452,8 +1452,10 @@ static void virtnet_free_queues(struct virtnet_info *vi)
1925     {
1926     int i;
1927    
1928     - for (i = 0; i < vi->max_queue_pairs; i++)
1929     + for (i = 0; i < vi->max_queue_pairs; i++) {
1930     + napi_hash_del(&vi->rq[i].napi);
1931     netif_napi_del(&vi->rq[i].napi);
1932     + }
1933    
1934     kfree(vi->rq);
1935     kfree(vi->sq);
1936     @@ -1939,11 +1941,8 @@ static int virtnet_freeze(struct virtio_device *vdev)
1937     cancel_delayed_work_sync(&vi->refill);
1938    
1939     if (netif_running(vi->dev)) {
1940     - for (i = 0; i < vi->max_queue_pairs; i++) {
1941     + for (i = 0; i < vi->max_queue_pairs; i++)
1942     napi_disable(&vi->rq[i].napi);
1943     - napi_hash_del(&vi->rq[i].napi);
1944     - netif_napi_del(&vi->rq[i].napi);
1945     - }
1946     }
1947    
1948     remove_vq_common(vi);
1949     diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
1950     index 2c6643fdc0cf..eb1543841e39 100644
1951     --- a/drivers/pci/pci-sysfs.c
1952     +++ b/drivers/pci/pci-sysfs.c
1953     @@ -515,7 +515,8 @@ static ssize_t driver_override_store(struct device *dev,
1954     struct pci_dev *pdev = to_pci_dev(dev);
1955     char *driver_override, *old = pdev->driver_override, *cp;
1956    
1957     - if (count > PATH_MAX)
1958     + /* We need to keep extra room for a newline */
1959     + if (count >= (PAGE_SIZE - 1))
1960     return -EINVAL;
1961    
1962     driver_override = kstrndup(buf, count, GFP_KERNEL);
1963     @@ -543,7 +544,7 @@ static ssize_t driver_override_show(struct device *dev,
1964     {
1965     struct pci_dev *pdev = to_pci_dev(dev);
1966    
1967     - return sprintf(buf, "%s\n", pdev->driver_override);
1968     + return snprintf(buf, PAGE_SIZE, "%s\n", pdev->driver_override);
1969     }
1970     static DEVICE_ATTR_RW(driver_override);
1971    
1972     diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
1973     index fc6fb5422b6f..d92612c51657 100644
1974     --- a/drivers/regulator/core.c
1975     +++ b/drivers/regulator/core.c
1976     @@ -1841,10 +1841,12 @@ static int _regulator_do_enable(struct regulator_dev *rdev)
1977     }
1978    
1979     if (rdev->ena_pin) {
1980     - ret = regulator_ena_gpio_ctrl(rdev, true);
1981     - if (ret < 0)
1982     - return ret;
1983     - rdev->ena_gpio_state = 1;
1984     + if (!rdev->ena_gpio_state) {
1985     + ret = regulator_ena_gpio_ctrl(rdev, true);
1986     + if (ret < 0)
1987     + return ret;
1988     + rdev->ena_gpio_state = 1;
1989     + }
1990     } else if (rdev->desc->ops->enable) {
1991     ret = rdev->desc->ops->enable(rdev);
1992     if (ret < 0)
1993     @@ -1941,10 +1943,12 @@ static int _regulator_do_disable(struct regulator_dev *rdev)
1994     trace_regulator_disable(rdev_get_name(rdev));
1995    
1996     if (rdev->ena_pin) {
1997     - ret = regulator_ena_gpio_ctrl(rdev, false);
1998     - if (ret < 0)
1999     - return ret;
2000     - rdev->ena_gpio_state = 0;
2001     + if (rdev->ena_gpio_state) {
2002     + ret = regulator_ena_gpio_ctrl(rdev, false);
2003     + if (ret < 0)
2004     + return ret;
2005     + rdev->ena_gpio_state = 0;
2006     + }
2007    
2008     } else if (rdev->desc->ops->disable) {
2009     ret = rdev->desc->ops->disable(rdev);
2010     @@ -3659,12 +3663,6 @@ regulator_register(const struct regulator_desc *regulator_desc,
2011     config->ena_gpio, ret);
2012     goto wash;
2013     }
2014     -
2015     - if (config->ena_gpio_flags & GPIOF_OUT_INIT_HIGH)
2016     - rdev->ena_gpio_state = 1;
2017     -
2018     - if (config->ena_gpio_invert)
2019     - rdev->ena_gpio_state = !rdev->ena_gpio_state;
2020     }
2021    
2022     /* set regulator constraints */
2023     @@ -3837,9 +3835,11 @@ int regulator_suspend_finish(void)
2024     list_for_each_entry(rdev, &regulator_list, list) {
2025     mutex_lock(&rdev->mutex);
2026     if (rdev->use_count > 0 || rdev->constraints->always_on) {
2027     - error = _regulator_do_enable(rdev);
2028     - if (error)
2029     - ret = error;
2030     + if (!_regulator_is_enabled(rdev)) {
2031     + error = _regulator_do_enable(rdev);
2032     + if (error)
2033     + ret = error;
2034     + }
2035     } else {
2036     if (!have_full_constraints())
2037     goto unlock;
2038     diff --git a/drivers/regulator/rk808-regulator.c b/drivers/regulator/rk808-regulator.c
2039     index 196a5c8838c4..b019956ba5dd 100644
2040     --- a/drivers/regulator/rk808-regulator.c
2041     +++ b/drivers/regulator/rk808-regulator.c
2042     @@ -184,6 +184,7 @@ static const struct regulator_desc rk808_reg[] = {
2043     .vsel_mask = RK808_LDO_VSEL_MASK,
2044     .enable_reg = RK808_LDO_EN_REG,
2045     .enable_mask = BIT(0),
2046     + .enable_time = 400,
2047     .owner = THIS_MODULE,
2048     }, {
2049     .name = "LDO_REG2",
2050     @@ -198,6 +199,7 @@ static const struct regulator_desc rk808_reg[] = {
2051     .vsel_mask = RK808_LDO_VSEL_MASK,
2052     .enable_reg = RK808_LDO_EN_REG,
2053     .enable_mask = BIT(1),
2054     + .enable_time = 400,
2055     .owner = THIS_MODULE,
2056     }, {
2057     .name = "LDO_REG3",
2058     @@ -212,6 +214,7 @@ static const struct regulator_desc rk808_reg[] = {
2059     .vsel_mask = RK808_BUCK4_VSEL_MASK,
2060     .enable_reg = RK808_LDO_EN_REG,
2061     .enable_mask = BIT(2),
2062     + .enable_time = 400,
2063     .owner = THIS_MODULE,
2064     }, {
2065     .name = "LDO_REG4",
2066     @@ -226,6 +229,7 @@ static const struct regulator_desc rk808_reg[] = {
2067     .vsel_mask = RK808_LDO_VSEL_MASK,
2068     .enable_reg = RK808_LDO_EN_REG,
2069     .enable_mask = BIT(3),
2070     + .enable_time = 400,
2071     .owner = THIS_MODULE,
2072     }, {
2073     .name = "LDO_REG5",
2074     @@ -240,6 +244,7 @@ static const struct regulator_desc rk808_reg[] = {
2075     .vsel_mask = RK808_LDO_VSEL_MASK,
2076     .enable_reg = RK808_LDO_EN_REG,
2077     .enable_mask = BIT(4),
2078     + .enable_time = 400,
2079     .owner = THIS_MODULE,
2080     }, {
2081     .name = "LDO_REG6",
2082     @@ -254,6 +259,7 @@ static const struct regulator_desc rk808_reg[] = {
2083     .vsel_mask = RK808_LDO_VSEL_MASK,
2084     .enable_reg = RK808_LDO_EN_REG,
2085     .enable_mask = BIT(5),
2086     + .enable_time = 400,
2087     .owner = THIS_MODULE,
2088     }, {
2089     .name = "LDO_REG7",
2090     @@ -268,6 +274,7 @@ static const struct regulator_desc rk808_reg[] = {
2091     .vsel_mask = RK808_LDO_VSEL_MASK,
2092     .enable_reg = RK808_LDO_EN_REG,
2093     .enable_mask = BIT(6),
2094     + .enable_time = 400,
2095     .owner = THIS_MODULE,
2096     }, {
2097     .name = "LDO_REG8",
2098     @@ -282,6 +289,7 @@ static const struct regulator_desc rk808_reg[] = {
2099     .vsel_mask = RK808_LDO_VSEL_MASK,
2100     .enable_reg = RK808_LDO_EN_REG,
2101     .enable_mask = BIT(7),
2102     + .enable_time = 400,
2103     .owner = THIS_MODULE,
2104     }, {
2105     .name = "SWITCH_REG1",
2106     diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c
2107     index 806072238c00..22a612b06742 100644
2108     --- a/drivers/rtc/rtc-s3c.c
2109     +++ b/drivers/rtc/rtc-s3c.c
2110     @@ -849,6 +849,7 @@ static struct s3c_rtc_data const s3c2443_rtc_data = {
2111    
2112     static struct s3c_rtc_data const s3c6410_rtc_data = {
2113     .max_user_freq = 32768,
2114     + .needs_src_clk = true,
2115     .irq_handler = s3c6410_rtc_irq,
2116     .set_freq = s3c6410_rtc_setfreq,
2117     .enable_tick = s3c6410_rtc_enable_tick,
2118     diff --git a/drivers/scsi/libsas/sas_discover.c b/drivers/scsi/libsas/sas_discover.c
2119     index 62b58d38ce2e..60de66252fa2 100644
2120     --- a/drivers/scsi/libsas/sas_discover.c
2121     +++ b/drivers/scsi/libsas/sas_discover.c
2122     @@ -500,6 +500,7 @@ static void sas_revalidate_domain(struct work_struct *work)
2123     struct sas_discovery_event *ev = to_sas_discovery_event(work);
2124     struct asd_sas_port *port = ev->port;
2125     struct sas_ha_struct *ha = port->ha;
2126     + struct domain_device *ddev = port->port_dev;
2127    
2128     /* prevent revalidation from finding sata links in recovery */
2129     mutex_lock(&ha->disco_mutex);
2130     @@ -514,8 +515,9 @@ static void sas_revalidate_domain(struct work_struct *work)
2131     SAS_DPRINTK("REVALIDATING DOMAIN on port %d, pid:%d\n", port->id,
2132     task_pid_nr(current));
2133    
2134     - if (port->port_dev)
2135     - res = sas_ex_revalidate_domain(port->port_dev);
2136     + if (ddev && (ddev->dev_type == SAS_FANOUT_EXPANDER_DEVICE ||
2137     + ddev->dev_type == SAS_EDGE_EXPANDER_DEVICE))
2138     + res = sas_ex_revalidate_domain(ddev);
2139    
2140     SAS_DPRINTK("done REVALIDATING DOMAIN on port %d, pid:%d, res 0x%x\n",
2141     port->id, task_pid_nr(current), res);
2142     diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c
2143     index 113c83f44b5c..4bf337aa4fd5 100644
2144     --- a/drivers/spi/spi-atmel.c
2145     +++ b/drivers/spi/spi-atmel.c
2146     @@ -775,17 +775,17 @@ static void atmel_spi_pdc_next_xfer(struct spi_master *master,
2147     (unsigned long long)xfer->rx_dma);
2148     }
2149    
2150     - /* REVISIT: We're waiting for ENDRX before we start the next
2151     + /* REVISIT: We're waiting for RXBUFF before we start the next
2152     * transfer because we need to handle some difficult timing
2153     - * issues otherwise. If we wait for ENDTX in one transfer and
2154     - * then starts waiting for ENDRX in the next, it's difficult
2155     - * to tell the difference between the ENDRX interrupt we're
2156     - * actually waiting for and the ENDRX interrupt of the
2157     + * issues otherwise. If we wait for TXBUFE in one transfer and
2158     + * then starts waiting for RXBUFF in the next, it's difficult
2159     + * to tell the difference between the RXBUFF interrupt we're
2160     + * actually waiting for and the RXBUFF interrupt of the
2161     * previous transfer.
2162     *
2163     * It should be doable, though. Just not now...
2164     */
2165     - spi_writel(as, IER, SPI_BIT(ENDRX) | SPI_BIT(OVRES));
2166     + spi_writel(as, IER, SPI_BIT(RXBUFF) | SPI_BIT(OVRES));
2167     spi_writel(as, PTCR, SPI_BIT(TXTEN) | SPI_BIT(RXTEN));
2168     }
2169    
2170     diff --git a/drivers/spi/spi-dw-mid.c b/drivers/spi/spi-dw-mid.c
2171     index efff55537d8a..1417f96546ce 100644
2172     --- a/drivers/spi/spi-dw-mid.c
2173     +++ b/drivers/spi/spi-dw-mid.c
2174     @@ -151,6 +151,9 @@ static int mid_spi_dma_transfer(struct dw_spi *dws, int cs_change)
2175     1,
2176     DMA_MEM_TO_DEV,
2177     DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
2178     + if (!txdesc)
2179     + return NULL;
2180     +
2181     txdesc->callback = dw_spi_dma_done;
2182     txdesc->callback_param = dws;
2183    
2184     @@ -173,6 +176,9 @@ static int mid_spi_dma_transfer(struct dw_spi *dws, int cs_change)
2185     1,
2186     DMA_DEV_TO_MEM,
2187     DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
2188     + if (!rxdesc)
2189     + return NULL;
2190     +
2191     rxdesc->callback = dw_spi_dma_done;
2192     rxdesc->callback_param = dws;
2193    
2194     diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c
2195     index fc2dd8441608..11e18342bc4f 100644
2196     --- a/drivers/spi/spi-pl022.c
2197     +++ b/drivers/spi/spi-pl022.c
2198     @@ -534,12 +534,12 @@ static void giveback(struct pl022 *pl022)
2199     pl022->cur_msg = NULL;
2200     pl022->cur_transfer = NULL;
2201     pl022->cur_chip = NULL;
2202     - spi_finalize_current_message(pl022->master);
2203    
2204     /* disable the SPI/SSP operation */
2205     writew((readw(SSP_CR1(pl022->virtbase)) &
2206     (~SSP_CR1_MASK_SSE)), SSP_CR1(pl022->virtbase));
2207    
2208     + spi_finalize_current_message(pl022->master);
2209     }
2210    
2211     /**
2212     diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
2213     index 73e58d22e325..6446490854cb 100644
2214     --- a/drivers/target/iscsi/iscsi_target.c
2215     +++ b/drivers/target/iscsi/iscsi_target.c
2216     @@ -4220,11 +4220,17 @@ int iscsit_close_connection(
2217     pr_debug("Closing iSCSI connection CID %hu on SID:"
2218     " %u\n", conn->cid, sess->sid);
2219     /*
2220     - * Always up conn_logout_comp just in case the RX Thread is sleeping
2221     - * and the logout response never got sent because the connection
2222     - * failed.
2223     + * Always up conn_logout_comp for the traditional TCP case just in case
2224     + * the RX Thread in iscsi_target_rx_opcode() is sleeping and the logout
2225     + * response never got sent because the connection failed.
2226     + *
2227     + * However for iser-target, isert_wait4logout() is using conn_logout_comp
2228     + * to signal logout response TX interrupt completion. Go ahead and skip
2229     + * this for iser since isert_rx_opcode() does not wait on logout failure,
2230     + * and to avoid iscsi_conn pointer dereference in iser-target code.
2231     */
2232     - complete(&conn->conn_logout_comp);
2233     + if (conn->conn_transport->transport_type == ISCSI_TCP)
2234     + complete(&conn->conn_logout_comp);
2235    
2236     iscsi_release_thread_set(conn);
2237    
2238     diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
2239     index 24fa5d1999af..9e0f5d3b3ebf 100644
2240     --- a/drivers/target/target_core_device.c
2241     +++ b/drivers/target/target_core_device.c
2242     @@ -1598,8 +1598,6 @@ int target_configure_device(struct se_device *dev)
2243     ret = dev->transport->configure_device(dev);
2244     if (ret)
2245     goto out;
2246     - dev->dev_flags |= DF_CONFIGURED;
2247     -
2248     /*
2249     * XXX: there is not much point to have two different values here..
2250     */
2251     @@ -1661,6 +1659,8 @@ int target_configure_device(struct se_device *dev)
2252     list_add_tail(&dev->g_dev_node, &g_device_list);
2253     mutex_unlock(&g_device_mutex);
2254    
2255     + dev->dev_flags |= DF_CONFIGURED;
2256     +
2257     return 0;
2258    
2259     out_free_alua:
2260     diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
2261     index 7c8291f0bbbc..9a54381e23c6 100644
2262     --- a/drivers/target/target_core_pscsi.c
2263     +++ b/drivers/target/target_core_pscsi.c
2264     @@ -1120,7 +1120,7 @@ static u32 pscsi_get_device_type(struct se_device *dev)
2265     struct pscsi_dev_virt *pdv = PSCSI_DEV(dev);
2266     struct scsi_device *sd = pdv->pdv_sd;
2267    
2268     - return sd->type;
2269     + return (sd) ? sd->type : TYPE_NO_LUN;
2270     }
2271    
2272     static sector_t pscsi_get_blocks(struct se_device *dev)
2273     diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
2274     index be877bf6f730..2e0998420254 100644
2275     --- a/drivers/target/target_core_transport.c
2276     +++ b/drivers/target/target_core_transport.c
2277     @@ -2389,6 +2389,10 @@ int target_get_sess_cmd(struct se_session *se_sess, struct se_cmd *se_cmd,
2278     list_add_tail(&se_cmd->se_cmd_list, &se_sess->sess_cmd_list);
2279     out:
2280     spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
2281     +
2282     + if (ret && ack_kref)
2283     + target_put_sess_cmd(se_sess, se_cmd);
2284     +
2285     return ret;
2286     }
2287     EXPORT_SYMBOL(target_get_sess_cmd);
2288     diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
2289     index beea6ca73ee5..a69e31e3410f 100644
2290     --- a/drivers/tty/serial/8250/8250_dw.c
2291     +++ b/drivers/tty/serial/8250/8250_dw.c
2292     @@ -111,7 +111,10 @@ static void dw8250_serial_out(struct uart_port *p, int offset, int value)
2293     dw8250_force_idle(p);
2294     writeb(value, p->membase + (UART_LCR << p->regshift));
2295     }
2296     - dev_err(p->dev, "Couldn't set LCR to %d\n", value);
2297     + /*
2298     + * FIXME: this deadlocks if port->lock is already held
2299     + * dev_err(p->dev, "Couldn't set LCR to %d\n", value);
2300     + */
2301     }
2302     }
2303    
2304     @@ -148,7 +151,10 @@ static void dw8250_serial_out32(struct uart_port *p, int offset, int value)
2305     dw8250_force_idle(p);
2306     writel(value, p->membase + (UART_LCR << p->regshift));
2307     }
2308     - dev_err(p->dev, "Couldn't set LCR to %d\n", value);
2309     + /*
2310     + * FIXME: this deadlocks if port->lock is already held
2311     + * dev_err(p->dev, "Couldn't set LCR to %d\n", value);
2312     + */
2313     }
2314     }
2315    
2316     diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
2317     index beb9d71cd47a..439bd1a5d00c 100644
2318     --- a/drivers/tty/serial/8250/8250_pci.c
2319     +++ b/drivers/tty/serial/8250/8250_pci.c
2320     @@ -69,7 +69,7 @@ static void moan_device(const char *str, struct pci_dev *dev)
2321     "Please send the output of lspci -vv, this\n"
2322     "message (0x%04x,0x%04x,0x%04x,0x%04x), the\n"
2323     "manufacturer and name of serial board or\n"
2324     - "modem board to rmk+serial@arm.linux.org.uk.\n",
2325     + "modem board to <linux-serial@vger.kernel.org>.\n",
2326     pci_name(dev), str, dev->vendor, dev->device,
2327     dev->subsystem_vendor, dev->subsystem_device);
2328     }
2329     diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c
2330     index 08048613eed6..db2becd31a51 100644
2331     --- a/drivers/usb/gadget/legacy/inode.c
2332     +++ b/drivers/usb/gadget/legacy/inode.c
2333     @@ -565,7 +565,6 @@ static ssize_t ep_copy_to_user(struct kiocb_priv *priv)
2334     if (total == 0)
2335     break;
2336     }
2337     -
2338     return len;
2339     }
2340    
2341     @@ -584,6 +583,7 @@ static void ep_user_copy_worker(struct work_struct *work)
2342     aio_complete(iocb, ret, ret);
2343    
2344     kfree(priv->buf);
2345     + kfree(priv->iv);
2346     kfree(priv);
2347     }
2348    
2349     @@ -604,6 +604,7 @@ static void ep_aio_complete(struct usb_ep *ep, struct usb_request *req)
2350     */
2351     if (priv->iv == NULL || unlikely(req->actual == 0)) {
2352     kfree(req->buf);
2353     + kfree(priv->iv);
2354     kfree(priv);
2355     iocb->private = NULL;
2356     /* aio_complete() reports bytes-transferred _and_ faults */
2357     @@ -639,7 +640,7 @@ ep_aio_rwtail(
2358     struct usb_request *req;
2359     ssize_t value;
2360    
2361     - priv = kmalloc(sizeof *priv, GFP_KERNEL);
2362     + priv = kzalloc(sizeof *priv, GFP_KERNEL);
2363     if (!priv) {
2364     value = -ENOMEM;
2365     fail:
2366     @@ -648,7 +649,14 @@ fail:
2367     }
2368     iocb->private = priv;
2369     priv->iocb = iocb;
2370     - priv->iv = iv;
2371     + if (iv) {
2372     + priv->iv = kmemdup(iv, nr_segs * sizeof(struct iovec),
2373     + GFP_KERNEL);
2374     + if (!priv->iv) {
2375     + kfree(priv);
2376     + goto fail;
2377     + }
2378     + }
2379     priv->nr_segs = nr_segs;
2380     INIT_WORK(&priv->work, ep_user_copy_worker);
2381    
2382     @@ -688,6 +696,7 @@ fail:
2383     mutex_unlock(&epdata->lock);
2384    
2385     if (unlikely(value)) {
2386     + kfree(priv->iv);
2387     kfree(priv);
2388     put_ep(epdata);
2389     } else
2390     diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
2391     index b4bca2d4a7e5..70fba973a107 100644
2392     --- a/drivers/xen/events/events_base.c
2393     +++ b/drivers/xen/events/events_base.c
2394     @@ -526,20 +526,26 @@ static unsigned int __startup_pirq(unsigned int irq)
2395     pirq_query_unmask(irq);
2396    
2397     rc = set_evtchn_to_irq(evtchn, irq);
2398     - if (rc != 0) {
2399     - pr_err("irq%d: Failed to set port to irq mapping (%d)\n",
2400     - irq, rc);
2401     - xen_evtchn_close(evtchn);
2402     - return 0;
2403     - }
2404     + if (rc)
2405     + goto err;
2406     +
2407     bind_evtchn_to_cpu(evtchn, 0);
2408     info->evtchn = evtchn;
2409    
2410     + rc = xen_evtchn_port_setup(info);
2411     + if (rc)
2412     + goto err;
2413     +
2414     out:
2415     unmask_evtchn(evtchn);
2416     eoi_pirq(irq_get_irq_data(irq));
2417    
2418     return 0;
2419     +
2420     +err:
2421     + pr_err("irq%d: Failed to set port to irq mapping (%d)\n", irq, rc);
2422     + xen_evtchn_close(evtchn);
2423     + return 0;
2424     }
2425    
2426     static unsigned int startup_pirq(struct irq_data *data)
2427     diff --git a/drivers/xen/xen-pciback/conf_space.c b/drivers/xen/xen-pciback/conf_space.c
2428     index 46ae0f9f02ad..75fe3d466515 100644
2429     --- a/drivers/xen/xen-pciback/conf_space.c
2430     +++ b/drivers/xen/xen-pciback/conf_space.c
2431     @@ -16,7 +16,7 @@
2432     #include "conf_space.h"
2433     #include "conf_space_quirks.h"
2434    
2435     -static bool permissive;
2436     +bool permissive;
2437     module_param(permissive, bool, 0644);
2438    
2439     /* This is where xen_pcibk_read_config_byte, xen_pcibk_read_config_word,
2440     diff --git a/drivers/xen/xen-pciback/conf_space.h b/drivers/xen/xen-pciback/conf_space.h
2441     index e56c934ad137..2e1d73d1d5d0 100644
2442     --- a/drivers/xen/xen-pciback/conf_space.h
2443     +++ b/drivers/xen/xen-pciback/conf_space.h
2444     @@ -64,6 +64,8 @@ struct config_field_entry {
2445     void *data;
2446     };
2447    
2448     +extern bool permissive;
2449     +
2450     #define OFFSET(cfg_entry) ((cfg_entry)->base_offset+(cfg_entry)->field->offset)
2451    
2452     /* Add fields to a device - the add_fields macro expects to get a pointer to
2453     diff --git a/drivers/xen/xen-pciback/conf_space_header.c b/drivers/xen/xen-pciback/conf_space_header.c
2454     index c5ee82587e8c..2d7369391472 100644
2455     --- a/drivers/xen/xen-pciback/conf_space_header.c
2456     +++ b/drivers/xen/xen-pciback/conf_space_header.c
2457     @@ -11,6 +11,10 @@
2458     #include "pciback.h"
2459     #include "conf_space.h"
2460    
2461     +struct pci_cmd_info {
2462     + u16 val;
2463     +};
2464     +
2465     struct pci_bar_info {
2466     u32 val;
2467     u32 len_val;
2468     @@ -20,22 +24,36 @@ struct pci_bar_info {
2469     #define is_enable_cmd(value) ((value)&(PCI_COMMAND_MEMORY|PCI_COMMAND_IO))
2470     #define is_master_cmd(value) ((value)&PCI_COMMAND_MASTER)
2471    
2472     -static int command_read(struct pci_dev *dev, int offset, u16 *value, void *data)
2473     +/* Bits guests are allowed to control in permissive mode. */
2474     +#define PCI_COMMAND_GUEST (PCI_COMMAND_MASTER|PCI_COMMAND_SPECIAL| \
2475     + PCI_COMMAND_INVALIDATE|PCI_COMMAND_VGA_PALETTE| \
2476     + PCI_COMMAND_WAIT|PCI_COMMAND_FAST_BACK)
2477     +
2478     +static void *command_init(struct pci_dev *dev, int offset)
2479     {
2480     - int i;
2481     - int ret;
2482     -
2483     - ret = xen_pcibk_read_config_word(dev, offset, value, data);
2484     - if (!pci_is_enabled(dev))
2485     - return ret;
2486     -
2487     - for (i = 0; i < PCI_ROM_RESOURCE; i++) {
2488     - if (dev->resource[i].flags & IORESOURCE_IO)
2489     - *value |= PCI_COMMAND_IO;
2490     - if (dev->resource[i].flags & IORESOURCE_MEM)
2491     - *value |= PCI_COMMAND_MEMORY;
2492     + struct pci_cmd_info *cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
2493     + int err;
2494     +
2495     + if (!cmd)
2496     + return ERR_PTR(-ENOMEM);
2497     +
2498     + err = pci_read_config_word(dev, PCI_COMMAND, &cmd->val);
2499     + if (err) {
2500     + kfree(cmd);
2501     + return ERR_PTR(err);
2502     }
2503    
2504     + return cmd;
2505     +}
2506     +
2507     +static int command_read(struct pci_dev *dev, int offset, u16 *value, void *data)
2508     +{
2509     + int ret = pci_read_config_word(dev, offset, value);
2510     + const struct pci_cmd_info *cmd = data;
2511     +
2512     + *value &= PCI_COMMAND_GUEST;
2513     + *value |= cmd->val & ~PCI_COMMAND_GUEST;
2514     +
2515     return ret;
2516     }
2517    
2518     @@ -43,6 +61,8 @@ static int command_write(struct pci_dev *dev, int offset, u16 value, void *data)
2519     {
2520     struct xen_pcibk_dev_data *dev_data;
2521     int err;
2522     + u16 val;
2523     + struct pci_cmd_info *cmd = data;
2524    
2525     dev_data = pci_get_drvdata(dev);
2526     if (!pci_is_enabled(dev) && is_enable_cmd(value)) {
2527     @@ -83,6 +103,19 @@ static int command_write(struct pci_dev *dev, int offset, u16 value, void *data)
2528     }
2529     }
2530    
2531     + cmd->val = value;
2532     +
2533     + if (!permissive && (!dev_data || !dev_data->permissive))
2534     + return 0;
2535     +
2536     + /* Only allow the guest to control certain bits. */
2537     + err = pci_read_config_word(dev, offset, &val);
2538     + if (err || val == value)
2539     + return err;
2540     +
2541     + value &= PCI_COMMAND_GUEST;
2542     + value |= val & ~PCI_COMMAND_GUEST;
2543     +
2544     return pci_write_config_word(dev, offset, value);
2545     }
2546    
2547     @@ -282,6 +315,8 @@ static const struct config_field header_common[] = {
2548     {
2549     .offset = PCI_COMMAND,
2550     .size = 2,
2551     + .init = command_init,
2552     + .release = bar_release,
2553     .u.w.read = command_read,
2554     .u.w.write = command_write,
2555     },
2556     diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
2557     index ca887314aba9..f2bbb8513360 100644
2558     --- a/fs/fuse/dev.c
2559     +++ b/fs/fuse/dev.c
2560     @@ -814,8 +814,8 @@ static int fuse_try_move_page(struct fuse_copy_state *cs, struct page **pagep)
2561    
2562     newpage = buf->page;
2563    
2564     - if (WARN_ON(!PageUptodate(newpage)))
2565     - return -EIO;
2566     + if (!PageUptodate(newpage))
2567     + SetPageUptodate(newpage);
2568    
2569     ClearPageMappedToDisk(newpage);
2570    
2571     @@ -1721,6 +1721,9 @@ copy_finish:
2572     static int fuse_notify(struct fuse_conn *fc, enum fuse_notify_code code,
2573     unsigned int size, struct fuse_copy_state *cs)
2574     {
2575     + /* Don't try to move pages (yet) */
2576     + cs->move_pages = 0;
2577     +
2578     switch (code) {
2579     case FUSE_NOTIFY_POLL:
2580     return fuse_notify_poll(fc, size, cs);
2581     diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
2582     index 469086b9f99b..0c3f303baf32 100644
2583     --- a/fs/nilfs2/segment.c
2584     +++ b/fs/nilfs2/segment.c
2585     @@ -1907,6 +1907,7 @@ static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci,
2586     struct the_nilfs *nilfs)
2587     {
2588     struct nilfs_inode_info *ii, *n;
2589     + int during_mount = !(sci->sc_super->s_flags & MS_ACTIVE);
2590     int defer_iput = false;
2591    
2592     spin_lock(&nilfs->ns_inode_lock);
2593     @@ -1919,10 +1920,10 @@ static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci,
2594     brelse(ii->i_bh);
2595     ii->i_bh = NULL;
2596     list_del_init(&ii->i_dirty);
2597     - if (!ii->vfs_inode.i_nlink) {
2598     + if (!ii->vfs_inode.i_nlink || during_mount) {
2599     /*
2600     - * Defer calling iput() to avoid a deadlock
2601     - * over I_SYNC flag for inodes with i_nlink == 0
2602     + * Defer calling iput() to avoid deadlocks if
2603     + * i_nlink == 0 or mount is not yet finished.
2604     */
2605     list_add_tail(&ii->i_dirty, &sci->sc_iput_queue);
2606     defer_iput = true;
2607     diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
2608     index e8972bcddfb4..69aa378e60d9 100644
2609     --- a/fs/proc/task_mmu.c
2610     +++ b/fs/proc/task_mmu.c
2611     @@ -1291,6 +1291,9 @@ out:
2612    
2613     static int pagemap_open(struct inode *inode, struct file *file)
2614     {
2615     + /* do not disclose physical addresses: attack vector */
2616     + if (!capable(CAP_SYS_ADMIN))
2617     + return -EPERM;
2618     pr_warn_once("Bits 55-60 of /proc/PID/pagemap entries are about "
2619     "to stop being page-shift some time soon. See the "
2620     "linux/Documentation/vm/pagemap.txt for details.\n");
2621     diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h
2622     index 5672d7ea1fa0..08848050922e 100644
2623     --- a/include/asm-generic/tlb.h
2624     +++ b/include/asm-generic/tlb.h
2625     @@ -96,10 +96,9 @@ struct mmu_gather {
2626     #endif
2627     unsigned long start;
2628     unsigned long end;
2629     - unsigned int need_flush : 1, /* Did free PTEs */
2630     /* we are in the middle of an operation to clear
2631     * a full mm and can make some optimizations */
2632     - fullmm : 1,
2633     + unsigned int fullmm : 1,
2634     /* we have performed an operation which
2635     * requires a complete flush of the tlb */
2636     need_flush_all : 1;
2637     @@ -128,16 +127,54 @@ static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page)
2638     tlb_flush_mmu(tlb);
2639     }
2640    
2641     +static inline void __tlb_adjust_range(struct mmu_gather *tlb,
2642     + unsigned long address)
2643     +{
2644     + tlb->start = min(tlb->start, address);
2645     + tlb->end = max(tlb->end, address + PAGE_SIZE);
2646     +}
2647     +
2648     +static inline void __tlb_reset_range(struct mmu_gather *tlb)
2649     +{
2650     + tlb->start = TASK_SIZE;
2651     + tlb->end = 0;
2652     +}
2653     +
2654     +/*
2655     + * In the case of tlb vma handling, we can optimise these away in the
2656     + * case where we're doing a full MM flush. When we're doing a munmap,
2657     + * the vmas are adjusted to only cover the region to be torn down.
2658     + */
2659     +#ifndef tlb_start_vma
2660     +#define tlb_start_vma(tlb, vma) do { } while (0)
2661     +#endif
2662     +
2663     +#define __tlb_end_vma(tlb, vma) \
2664     + do { \
2665     + if (!tlb->fullmm && tlb->end) { \
2666     + tlb_flush(tlb); \
2667     + __tlb_reset_range(tlb); \
2668     + } \
2669     + } while (0)
2670     +
2671     +#ifndef tlb_end_vma
2672     +#define tlb_end_vma __tlb_end_vma
2673     +#endif
2674     +
2675     +#ifndef __tlb_remove_tlb_entry
2676     +#define __tlb_remove_tlb_entry(tlb, ptep, address) do { } while (0)
2677     +#endif
2678     +
2679     /**
2680     * tlb_remove_tlb_entry - remember a pte unmapping for later tlb invalidation.
2681     *
2682     - * Record the fact that pte's were really umapped in ->need_flush, so we can
2683     - * later optimise away the tlb invalidate. This helps when userspace is
2684     - * unmapping already-unmapped pages, which happens quite a lot.
2685     + * Record the fact that pte's were really unmapped by updating the range,
2686     + * so we can later optimise away the tlb invalidate. This helps when
2687     + * userspace is unmapping already-unmapped pages, which happens quite a lot.
2688     */
2689     #define tlb_remove_tlb_entry(tlb, ptep, address) \
2690     do { \
2691     - tlb->need_flush = 1; \
2692     + __tlb_adjust_range(tlb, address); \
2693     __tlb_remove_tlb_entry(tlb, ptep, address); \
2694     } while (0)
2695    
2696     @@ -151,27 +188,27 @@ static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page)
2697    
2698     #define tlb_remove_pmd_tlb_entry(tlb, pmdp, address) \
2699     do { \
2700     - tlb->need_flush = 1; \
2701     + __tlb_adjust_range(tlb, address); \
2702     __tlb_remove_pmd_tlb_entry(tlb, pmdp, address); \
2703     } while (0)
2704    
2705     #define pte_free_tlb(tlb, ptep, address) \
2706     do { \
2707     - tlb->need_flush = 1; \
2708     + __tlb_adjust_range(tlb, address); \
2709     __pte_free_tlb(tlb, ptep, address); \
2710     } while (0)
2711    
2712     #ifndef __ARCH_HAS_4LEVEL_HACK
2713     #define pud_free_tlb(tlb, pudp, address) \
2714     do { \
2715     - tlb->need_flush = 1; \
2716     + __tlb_adjust_range(tlb, address); \
2717     __pud_free_tlb(tlb, pudp, address); \
2718     } while (0)
2719     #endif
2720    
2721     #define pmd_free_tlb(tlb, pmdp, address) \
2722     do { \
2723     - tlb->need_flush = 1; \
2724     + __tlb_adjust_range(tlb, address); \
2725     __pmd_free_tlb(tlb, pmdp, address); \
2726     } while (0)
2727    
2728     diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
2729     index b996e6cde6bb..9eb54f41623e 100644
2730     --- a/include/linux/workqueue.h
2731     +++ b/include/linux/workqueue.h
2732     @@ -70,7 +70,8 @@ enum {
2733     /* data contains off-queue information when !WORK_STRUCT_PWQ */
2734     WORK_OFFQ_FLAG_BASE = WORK_STRUCT_COLOR_SHIFT,
2735    
2736     - WORK_OFFQ_CANCELING = (1 << WORK_OFFQ_FLAG_BASE),
2737     + __WORK_OFFQ_CANCELING = WORK_OFFQ_FLAG_BASE,
2738     + WORK_OFFQ_CANCELING = (1 << __WORK_OFFQ_CANCELING),
2739    
2740     /*
2741     * When a work item is off queue, its high bits point to the last
2742     diff --git a/kernel/cpuset.c b/kernel/cpuset.c
2743     index 1f107c74087b..672310e1597e 100644
2744     --- a/kernel/cpuset.c
2745     +++ b/kernel/cpuset.c
2746     @@ -538,9 +538,6 @@ static void update_domain_attr_tree(struct sched_domain_attr *dattr,
2747    
2748     rcu_read_lock();
2749     cpuset_for_each_descendant_pre(cp, pos_css, root_cs) {
2750     - if (cp == root_cs)
2751     - continue;
2752     -
2753     /* skip the whole subtree if @cp doesn't have any CPU */
2754     if (cpumask_empty(cp->cpus_allowed)) {
2755     pos_css = css_rightmost_descendant(pos_css);
2756     @@ -863,7 +860,7 @@ static void update_cpumasks_hier(struct cpuset *cs, struct cpumask *new_cpus)
2757     * If it becomes empty, inherit the effective mask of the
2758     * parent, which is guaranteed to have some CPUs.
2759     */
2760     - if (cpumask_empty(new_cpus))
2761     + if (cgroup_on_dfl(cp->css.cgroup) && cpumask_empty(new_cpus))
2762     cpumask_copy(new_cpus, parent->effective_cpus);
2763    
2764     /* Skip the whole subtree if the cpumask remains the same. */
2765     @@ -1119,7 +1116,7 @@ static void update_nodemasks_hier(struct cpuset *cs, nodemask_t *new_mems)
2766     * If it becomes empty, inherit the effective mask of the
2767     * parent, which is guaranteed to have some MEMs.
2768     */
2769     - if (nodes_empty(*new_mems))
2770     + if (cgroup_on_dfl(cp->css.cgroup) && nodes_empty(*new_mems))
2771     *new_mems = parent->effective_mems;
2772    
2773     /* Skip the whole subtree if the nodemask remains the same. */
2774     @@ -1991,7 +1988,9 @@ static int cpuset_css_online(struct cgroup_subsys_state *css)
2775    
2776     mutex_lock(&callback_mutex);
2777     cs->mems_allowed = parent->mems_allowed;
2778     + cs->effective_mems = parent->mems_allowed;
2779     cpumask_copy(cs->cpus_allowed, parent->cpus_allowed);
2780     + cpumask_copy(cs->effective_cpus, parent->cpus_allowed);
2781     mutex_unlock(&callback_mutex);
2782     out_unlock:
2783     mutex_unlock(&cpuset_mutex);
2784     diff --git a/kernel/printk/console_cmdline.h b/kernel/printk/console_cmdline.h
2785     index cbd69d842341..2ca4a8b5fe57 100644
2786     --- a/kernel/printk/console_cmdline.h
2787     +++ b/kernel/printk/console_cmdline.h
2788     @@ -3,7 +3,7 @@
2789    
2790     struct console_cmdline
2791     {
2792     - char name[8]; /* Name of the driver */
2793     + char name[16]; /* Name of the driver */
2794     int index; /* Minor dev. to use */
2795     char *options; /* Options for the driver */
2796     #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
2797     diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
2798     index ced2b84b1cb7..bf95fdad4d96 100644
2799     --- a/kernel/printk/printk.c
2800     +++ b/kernel/printk/printk.c
2801     @@ -2440,6 +2440,7 @@ void register_console(struct console *newcon)
2802     for (i = 0, c = console_cmdline;
2803     i < MAX_CMDLINECONSOLES && c->name[0];
2804     i++, c++) {
2805     + BUILD_BUG_ON(sizeof(c->name) != sizeof(newcon->name));
2806     if (strcmp(c->name, newcon->name) != 0)
2807     continue;
2808     if (newcon->index >= 0 &&
2809     diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
2810     index 124e2c702ead..d1eff3dd8a02 100644
2811     --- a/kernel/trace/ftrace.c
2812     +++ b/kernel/trace/ftrace.c
2813     @@ -1053,6 +1053,12 @@ static __init void ftrace_profile_debugfs(struct dentry *d_tracer)
2814    
2815     static struct pid * const ftrace_swapper_pid = &init_struct_pid;
2816    
2817     +#ifdef CONFIG_FUNCTION_GRAPH_TRACER
2818     +static int ftrace_graph_active;
2819     +#else
2820     +# define ftrace_graph_active 0
2821     +#endif
2822     +
2823     #ifdef CONFIG_DYNAMIC_FTRACE
2824    
2825     static struct ftrace_ops *removed_ops;
2826     @@ -1849,8 +1855,12 @@ static int ftrace_check_record(struct dyn_ftrace *rec, int enable, int update)
2827     if (!ftrace_rec_count(rec))
2828     rec->flags = 0;
2829     else
2830     - /* Just disable the record (keep REGS state) */
2831     - rec->flags &= ~FTRACE_FL_ENABLED;
2832     + /*
2833     + * Just disable the record, but keep the ops TRAMP
2834     + * and REGS states. The _EN flags must be disabled though.
2835     + */
2836     + rec->flags &= ~(FTRACE_FL_ENABLED | FTRACE_FL_TRAMP_EN |
2837     + FTRACE_FL_REGS_EN);
2838     }
2839    
2840     return FTRACE_UPDATE_MAKE_NOP;
2841     @@ -2482,24 +2492,36 @@ static int ftrace_shutdown(struct ftrace_ops *ops, int command)
2842    
2843     static void ftrace_startup_sysctl(void)
2844     {
2845     + int command;
2846     +
2847     if (unlikely(ftrace_disabled))
2848     return;
2849    
2850     /* Force update next time */
2851     saved_ftrace_func = NULL;
2852     /* ftrace_start_up is true if we want ftrace running */
2853     - if (ftrace_start_up)
2854     - ftrace_run_update_code(FTRACE_UPDATE_CALLS);
2855     + if (ftrace_start_up) {
2856     + command = FTRACE_UPDATE_CALLS;
2857     + if (ftrace_graph_active)
2858     + command |= FTRACE_START_FUNC_RET;
2859     + ftrace_startup_enable(command);
2860     + }
2861     }
2862    
2863     static void ftrace_shutdown_sysctl(void)
2864     {
2865     + int command;
2866     +
2867     if (unlikely(ftrace_disabled))
2868     return;
2869    
2870     /* ftrace_start_up is true if ftrace is running */
2871     - if (ftrace_start_up)
2872     - ftrace_run_update_code(FTRACE_DISABLE_CALLS);
2873     + if (ftrace_start_up) {
2874     + command = FTRACE_DISABLE_CALLS;
2875     + if (ftrace_graph_active)
2876     + command |= FTRACE_STOP_FUNC_RET;
2877     + ftrace_run_update_code(command);
2878     + }
2879     }
2880    
2881     static cycle_t ftrace_update_time;
2882     @@ -5303,12 +5325,12 @@ ftrace_enable_sysctl(struct ctl_table *table, int write,
2883    
2884     if (ftrace_enabled) {
2885    
2886     - ftrace_startup_sysctl();
2887     -
2888     /* we are starting ftrace again */
2889     if (ftrace_ops_list != &ftrace_list_end)
2890     update_ftrace_function();
2891    
2892     + ftrace_startup_sysctl();
2893     +
2894     } else {
2895     /* stopping ftrace calls (just send to ftrace_stub) */
2896     ftrace_trace_function = ftrace_stub;
2897     @@ -5334,8 +5356,6 @@ static struct ftrace_ops graph_ops = {
2898     ASSIGN_OPS_HASH(graph_ops, &global_ops.local_hash)
2899     };
2900    
2901     -static int ftrace_graph_active;
2902     -
2903     int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace)
2904     {
2905     return 0;
2906     diff --git a/kernel/workqueue.c b/kernel/workqueue.c
2907     index 66940a53d128..2273f534b01a 100644
2908     --- a/kernel/workqueue.c
2909     +++ b/kernel/workqueue.c
2910     @@ -2710,19 +2710,57 @@ bool flush_work(struct work_struct *work)
2911     }
2912     EXPORT_SYMBOL_GPL(flush_work);
2913    
2914     +struct cwt_wait {
2915     + wait_queue_t wait;
2916     + struct work_struct *work;
2917     +};
2918     +
2919     +static int cwt_wakefn(wait_queue_t *wait, unsigned mode, int sync, void *key)
2920     +{
2921     + struct cwt_wait *cwait = container_of(wait, struct cwt_wait, wait);
2922     +
2923     + if (cwait->work != key)
2924     + return 0;
2925     + return autoremove_wake_function(wait, mode, sync, key);
2926     +}
2927     +
2928     static bool __cancel_work_timer(struct work_struct *work, bool is_dwork)
2929     {
2930     + static DECLARE_WAIT_QUEUE_HEAD(cancel_waitq);
2931     unsigned long flags;
2932     int ret;
2933    
2934     do {
2935     ret = try_to_grab_pending(work, is_dwork, &flags);
2936     /*
2937     - * If someone else is canceling, wait for the same event it
2938     - * would be waiting for before retrying.
2939     + * If someone else is already canceling, wait for it to
2940     + * finish. flush_work() doesn't work for PREEMPT_NONE
2941     + * because we may get scheduled between @work's completion
2942     + * and the other canceling task resuming and clearing
2943     + * CANCELING - flush_work() will return false immediately
2944     + * as @work is no longer busy, try_to_grab_pending() will
2945     + * return -ENOENT as @work is still being canceled and the
2946     + * other canceling task won't be able to clear CANCELING as
2947     + * we're hogging the CPU.
2948     + *
2949     + * Let's wait for completion using a waitqueue. As this
2950     + * may lead to the thundering herd problem, use a custom
2951     + * wake function which matches @work along with exclusive
2952     + * wait and wakeup.
2953     */
2954     - if (unlikely(ret == -ENOENT))
2955     - flush_work(work);
2956     + if (unlikely(ret == -ENOENT)) {
2957     + struct cwt_wait cwait;
2958     +
2959     + init_wait(&cwait.wait);
2960     + cwait.wait.func = cwt_wakefn;
2961     + cwait.work = work;
2962     +
2963     + prepare_to_wait_exclusive(&cancel_waitq, &cwait.wait,
2964     + TASK_UNINTERRUPTIBLE);
2965     + if (work_is_canceling(work))
2966     + schedule();
2967     + finish_wait(&cancel_waitq, &cwait.wait);
2968     + }
2969     } while (unlikely(ret < 0));
2970    
2971     /* tell other tasks trying to grab @work to back off */
2972     @@ -2731,6 +2769,16 @@ static bool __cancel_work_timer(struct work_struct *work, bool is_dwork)
2973    
2974     flush_work(work);
2975     clear_work_data(work);
2976     +
2977     + /*
2978     + * Paired with prepare_to_wait() above so that either
2979     + * waitqueue_active() is visible here or !work_is_canceling() is
2980     + * visible there.
2981     + */
2982     + smp_mb();
2983     + if (waitqueue_active(&cancel_waitq))
2984     + __wake_up(&cancel_waitq, TASK_NORMAL, 1, work);
2985     +
2986     return ret;
2987     }
2988    
2989     diff --git a/lib/lz4/lz4_decompress.c b/lib/lz4/lz4_decompress.c
2990     index 7a85967060a5..f0f5c5c3de12 100644
2991     --- a/lib/lz4/lz4_decompress.c
2992     +++ b/lib/lz4/lz4_decompress.c
2993     @@ -139,6 +139,9 @@ static int lz4_uncompress(const char *source, char *dest, int osize)
2994     /* Error: request to write beyond destination buffer */
2995     if (cpy > oend)
2996     goto _output_error;
2997     + if ((ref + COPYLENGTH) > oend ||
2998     + (op + COPYLENGTH) > oend)
2999     + goto _output_error;
3000     LZ4_SECURECOPY(ref, op, (oend - COPYLENGTH));
3001     while (op < cpy)
3002     *op++ = *ref++;
3003     diff --git a/mm/memory.c b/mm/memory.c
3004     index 4ffa7b571fb8..90fb265b32b6 100644
3005     --- a/mm/memory.c
3006     +++ b/mm/memory.c
3007     @@ -220,9 +220,6 @@ void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned long
3008     /* Is it from 0 to ~0? */
3009     tlb->fullmm = !(start | (end+1));
3010     tlb->need_flush_all = 0;
3011     - tlb->start = start;
3012     - tlb->end = end;
3013     - tlb->need_flush = 0;
3014     tlb->local.next = NULL;
3015     tlb->local.nr = 0;
3016     tlb->local.max = ARRAY_SIZE(tlb->__pages);
3017     @@ -232,15 +229,20 @@ void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned long
3018     #ifdef CONFIG_HAVE_RCU_TABLE_FREE
3019     tlb->batch = NULL;
3020     #endif
3021     +
3022     + __tlb_reset_range(tlb);
3023     }
3024    
3025     static void tlb_flush_mmu_tlbonly(struct mmu_gather *tlb)
3026     {
3027     - tlb->need_flush = 0;
3028     + if (!tlb->end)
3029     + return;
3030     +
3031     tlb_flush(tlb);
3032     #ifdef CONFIG_HAVE_RCU_TABLE_FREE
3033     tlb_table_flush(tlb);
3034     #endif
3035     + __tlb_reset_range(tlb);
3036     }
3037    
3038     static void tlb_flush_mmu_free(struct mmu_gather *tlb)
3039     @@ -256,8 +258,6 @@ static void tlb_flush_mmu_free(struct mmu_gather *tlb)
3040    
3041     void tlb_flush_mmu(struct mmu_gather *tlb)
3042     {
3043     - if (!tlb->need_flush)
3044     - return;
3045     tlb_flush_mmu_tlbonly(tlb);
3046     tlb_flush_mmu_free(tlb);
3047     }
3048     @@ -292,7 +292,7 @@ int __tlb_remove_page(struct mmu_gather *tlb, struct page *page)
3049     {
3050     struct mmu_gather_batch *batch;
3051    
3052     - VM_BUG_ON(!tlb->need_flush);
3053     + VM_BUG_ON(!tlb->end);
3054    
3055     batch = tlb->active;
3056     batch->pages[batch->nr++] = page;
3057     @@ -359,8 +359,6 @@ void tlb_remove_table(struct mmu_gather *tlb, void *table)
3058     {
3059     struct mmu_table_batch **batch = &tlb->batch;
3060    
3061     - tlb->need_flush = 1;
3062     -
3063     /*
3064     * When there's less then two users of this mm there cannot be a
3065     * concurrent page-table walk.
3066     @@ -1186,20 +1184,8 @@ again:
3067     arch_leave_lazy_mmu_mode();
3068    
3069     /* Do the actual TLB flush before dropping ptl */
3070     - if (force_flush) {
3071     - unsigned long old_end;
3072     -
3073     - /*
3074     - * Flush the TLB just for the previous segment,
3075     - * then update the range to be the remaining
3076     - * TLB range.
3077     - */
3078     - old_end = tlb->end;
3079     - tlb->end = addr;
3080     + if (force_flush)
3081     tlb_flush_mmu_tlbonly(tlb);
3082     - tlb->start = addr;
3083     - tlb->end = old_end;
3084     - }
3085     pte_unmap_unlock(start_pte, ptl);
3086    
3087     /*
3088     diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c
3089     index 43f750e88e19..765c78110fa8 100644
3090     --- a/net/caif/caif_socket.c
3091     +++ b/net/caif/caif_socket.c
3092     @@ -281,7 +281,7 @@ static int caif_seqpkt_recvmsg(struct kiocb *iocb, struct socket *sock,
3093     int copylen;
3094    
3095     ret = -EOPNOTSUPP;
3096     - if (m->msg_flags&MSG_OOB)
3097     + if (flags & MSG_OOB)
3098     goto read_error;
3099    
3100     skb = skb_recv_datagram(sk, flags, 0 , &ret);
3101     diff --git a/net/can/af_can.c b/net/can/af_can.c
3102     index ce82337521f6..d6030d6949df 100644
3103     --- a/net/can/af_can.c
3104     +++ b/net/can/af_can.c
3105     @@ -262,6 +262,9 @@ int can_send(struct sk_buff *skb, int loop)
3106     goto inval_skb;
3107     }
3108    
3109     + skb->ip_summed = CHECKSUM_UNNECESSARY;
3110     +
3111     + skb_reset_mac_header(skb);
3112     skb_reset_network_header(skb);
3113     skb_reset_transport_header(skb);
3114    
3115     diff --git a/net/compat.c b/net/compat.c
3116     index c48930373e65..53e933eb78b8 100644
3117     --- a/net/compat.c
3118     +++ b/net/compat.c
3119     @@ -71,6 +71,13 @@ int get_compat_msghdr(struct msghdr *kmsg, struct compat_msghdr __user *umsg)
3120     __get_user(kmsg->msg_controllen, &umsg->msg_controllen) ||
3121     __get_user(kmsg->msg_flags, &umsg->msg_flags))
3122     return -EFAULT;
3123     +
3124     + if (!tmp1)
3125     + kmsg->msg_namelen = 0;
3126     +
3127     + if (kmsg->msg_namelen < 0)
3128     + return -EINVAL;
3129     +
3130     if (kmsg->msg_namelen > sizeof(struct sockaddr_storage))
3131     kmsg->msg_namelen = sizeof(struct sockaddr_storage);
3132     kmsg->msg_name = compat_ptr(tmp1);
3133     diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
3134     index cf9cd13509a7..e731c96eac4b 100644
3135     --- a/net/core/sysctl_net_core.c
3136     +++ b/net/core/sysctl_net_core.c
3137     @@ -25,6 +25,8 @@
3138     static int zero = 0;
3139     static int one = 1;
3140     static int ushort_max = USHRT_MAX;
3141     +static int min_sndbuf = SOCK_MIN_SNDBUF;
3142     +static int min_rcvbuf = SOCK_MIN_RCVBUF;
3143    
3144     #ifdef CONFIG_RPS
3145     static int rps_sock_flow_sysctl(struct ctl_table *table, int write,
3146     @@ -223,7 +225,7 @@ static struct ctl_table net_core_table[] = {
3147     .maxlen = sizeof(int),
3148     .mode = 0644,
3149     .proc_handler = proc_dointvec_minmax,
3150     - .extra1 = &one,
3151     + .extra1 = &min_sndbuf,
3152     },
3153     {
3154     .procname = "rmem_max",
3155     @@ -231,7 +233,7 @@ static struct ctl_table net_core_table[] = {
3156     .maxlen = sizeof(int),
3157     .mode = 0644,
3158     .proc_handler = proc_dointvec_minmax,
3159     - .extra1 = &one,
3160     + .extra1 = &min_rcvbuf,
3161     },
3162     {
3163     .procname = "wmem_default",
3164     @@ -239,7 +241,7 @@ static struct ctl_table net_core_table[] = {
3165     .maxlen = sizeof(int),
3166     .mode = 0644,
3167     .proc_handler = proc_dointvec_minmax,
3168     - .extra1 = &one,
3169     + .extra1 = &min_sndbuf,
3170     },
3171     {
3172     .procname = "rmem_default",
3173     @@ -247,7 +249,7 @@ static struct ctl_table net_core_table[] = {
3174     .maxlen = sizeof(int),
3175     .mode = 0644,
3176     .proc_handler = proc_dointvec_minmax,
3177     - .extra1 = &one,
3178     + .extra1 = &min_rcvbuf,
3179     },
3180     {
3181     .procname = "dev_weight",
3182     diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c
3183     index e34dccbc4d70..4eeba4e497a0 100644
3184     --- a/net/ipv4/inet_diag.c
3185     +++ b/net/ipv4/inet_diag.c
3186     @@ -71,6 +71,20 @@ static inline void inet_diag_unlock_handler(
3187     mutex_unlock(&inet_diag_table_mutex);
3188     }
3189    
3190     +static size_t inet_sk_attr_size(void)
3191     +{
3192     + return nla_total_size(sizeof(struct tcp_info))
3193     + + nla_total_size(1) /* INET_DIAG_SHUTDOWN */
3194     + + nla_total_size(1) /* INET_DIAG_TOS */
3195     + + nla_total_size(1) /* INET_DIAG_TCLASS */
3196     + + nla_total_size(sizeof(struct inet_diag_meminfo))
3197     + + nla_total_size(sizeof(struct inet_diag_msg))
3198     + + nla_total_size(SK_MEMINFO_VARS * sizeof(u32))
3199     + + nla_total_size(TCP_CA_NAME_MAX)
3200     + + nla_total_size(sizeof(struct tcpvegas_info))
3201     + + 64;
3202     +}
3203     +
3204     int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk,
3205     struct sk_buff *skb, struct inet_diag_req_v2 *req,
3206     struct user_namespace *user_ns,
3207     @@ -324,9 +338,7 @@ int inet_diag_dump_one_icsk(struct inet_hashinfo *hashinfo, struct sk_buff *in_s
3208     if (err)
3209     goto out;
3210    
3211     - rep = nlmsg_new(sizeof(struct inet_diag_msg) +
3212     - sizeof(struct inet_diag_meminfo) +
3213     - sizeof(struct tcp_info) + 64, GFP_KERNEL);
3214     + rep = nlmsg_new(inet_sk_attr_size(), GFP_KERNEL);
3215     if (!rep) {
3216     err = -ENOMEM;
3217     goto out;
3218     diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
3219     index c2df40ba553f..022ecbc9322d 100644
3220     --- a/net/ipv4/tcp_output.c
3221     +++ b/net/ipv4/tcp_output.c
3222     @@ -2739,15 +2739,11 @@ void tcp_send_fin(struct sock *sk)
3223     } else {
3224     /* Socket is locked, keep trying until memory is available. */
3225     for (;;) {
3226     - skb = alloc_skb_fclone(MAX_TCP_HEADER,
3227     - sk->sk_allocation);
3228     + skb = sk_stream_alloc_skb(sk, 0, sk->sk_allocation);
3229     if (skb)
3230     break;
3231     yield();
3232     }
3233     -
3234     - /* Reserve space for headers and prepare control bits. */
3235     - skb_reserve(skb, MAX_TCP_HEADER);
3236     /* FIN eats a sequence byte, write_seq advanced by tcp_queue_skb(). */
3237     tcp_init_nondata_skb(skb, tp->write_seq,
3238     TCPHDR_ACK | TCPHDR_FIN);
3239     @@ -2998,9 +2994,9 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn)
3240     {
3241     struct tcp_sock *tp = tcp_sk(sk);
3242     struct tcp_fastopen_request *fo = tp->fastopen_req;
3243     - int syn_loss = 0, space, i, err = 0, iovlen = fo->data->msg_iovlen;
3244     - struct sk_buff *syn_data = NULL, *data;
3245     + int syn_loss = 0, space, err = 0;
3246     unsigned long last_syn_loss = 0;
3247     + struct sk_buff *syn_data;
3248    
3249     tp->rx_opt.mss_clamp = tp->advmss; /* If MSS is not cached */
3250     tcp_fastopen_cache_get(sk, &tp->rx_opt.mss_clamp, &fo->cookie,
3251     @@ -3031,48 +3027,40 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn)
3252     /* limit to order-0 allocations */
3253     space = min_t(size_t, space, SKB_MAX_HEAD(MAX_TCP_HEADER));
3254    
3255     - syn_data = skb_copy_expand(syn, MAX_TCP_HEADER, space,
3256     - sk->sk_allocation);
3257     - if (syn_data == NULL)
3258     + syn_data = sk_stream_alloc_skb(sk, space, sk->sk_allocation);
3259     + if (!syn_data)
3260     + goto fallback;
3261     + syn_data->ip_summed = CHECKSUM_PARTIAL;
3262     + memcpy(syn_data->cb, syn->cb, sizeof(syn->cb));
3263     + if (unlikely(memcpy_fromiovecend(skb_put(syn_data, space),
3264     + fo->data->msg_iov, 0, space))) {
3265     + kfree_skb(syn_data);
3266     goto fallback;
3267     + }
3268    
3269     - for (i = 0; i < iovlen && syn_data->len < space; ++i) {
3270     - struct iovec *iov = &fo->data->msg_iov[i];
3271     - unsigned char __user *from = iov->iov_base;
3272     - int len = iov->iov_len;
3273     + /* No more data pending in inet_wait_for_connect() */
3274     + if (space == fo->size)
3275     + fo->data = NULL;
3276     + fo->copied = space;
3277    
3278     - if (syn_data->len + len > space)
3279     - len = space - syn_data->len;
3280     - else if (i + 1 == iovlen)
3281     - /* No more data pending in inet_wait_for_connect() */
3282     - fo->data = NULL;
3283     + tcp_connect_queue_skb(sk, syn_data);
3284    
3285     - if (skb_add_data(syn_data, from, len))
3286     - goto fallback;
3287     - }
3288     + err = tcp_transmit_skb(sk, syn_data, 1, sk->sk_allocation);
3289    
3290     - /* Queue a data-only packet after the regular SYN for retransmission */
3291     - data = pskb_copy(syn_data, sk->sk_allocation);
3292     - if (data == NULL)
3293     - goto fallback;
3294     - TCP_SKB_CB(data)->seq++;
3295     - TCP_SKB_CB(data)->tcp_flags &= ~TCPHDR_SYN;
3296     - TCP_SKB_CB(data)->tcp_flags = (TCPHDR_ACK|TCPHDR_PSH);
3297     - tcp_connect_queue_skb(sk, data);
3298     - fo->copied = data->len;
3299     -
3300     - /* syn_data is about to be sent, we need to take current time stamps
3301     - * for the packets that are in write queue : SYN packet and DATA
3302     - */
3303     - skb_mstamp_get(&syn->skb_mstamp);
3304     - data->skb_mstamp = syn->skb_mstamp;
3305     + syn->skb_mstamp = syn_data->skb_mstamp;
3306    
3307     - if (tcp_transmit_skb(sk, syn_data, 0, sk->sk_allocation) == 0) {
3308     + /* Now full SYN+DATA was cloned and sent (or not),
3309     + * remove the SYN from the original skb (syn_data)
3310     + * we keep in write queue in case of a retransmit, as we
3311     + * also have the SYN packet (with no data) in the same queue.
3312     + */
3313     + TCP_SKB_CB(syn_data)->seq++;
3314     + TCP_SKB_CB(syn_data)->tcp_flags = TCPHDR_ACK | TCPHDR_PSH;
3315     + if (!err) {
3316     tp->syn_data = (fo->copied > 0);
3317     NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPORIGDATASENT);
3318     goto done;
3319     }
3320     - syn_data = NULL;
3321    
3322     fallback:
3323     /* Send a regular SYN with Fast Open cookie request option */
3324     @@ -3081,7 +3069,6 @@ fallback:
3325     err = tcp_transmit_skb(sk, syn, 1, sk->sk_allocation);
3326     if (err)
3327     tp->syn_fastopen = 0;
3328     - kfree_skb(syn_data);
3329     done:
3330     fo->cookie.len = -1; /* Exclude Fast Open option for SYN retries */
3331     return err;
3332     @@ -3101,13 +3088,10 @@ int tcp_connect(struct sock *sk)
3333     return 0;
3334     }
3335    
3336     - buff = alloc_skb_fclone(MAX_TCP_HEADER + 15, sk->sk_allocation);
3337     - if (unlikely(buff == NULL))
3338     + buff = sk_stream_alloc_skb(sk, 0, sk->sk_allocation);
3339     + if (unlikely(!buff))
3340     return -ENOBUFS;
3341    
3342     - /* Reserve space for headers. */
3343     - skb_reserve(buff, MAX_TCP_HEADER);
3344     -
3345     tcp_init_nondata_skb(buff, tp->write_seq++, TCPHDR_SYN);
3346     tp->retrans_stamp = tcp_time_stamp;
3347     tcp_connect_queue_skb(sk, buff);
3348     diff --git a/net/ipv6/fib6_rules.c b/net/ipv6/fib6_rules.c
3349     index b4d5e1d97c1b..27ca79682efb 100644
3350     --- a/net/ipv6/fib6_rules.c
3351     +++ b/net/ipv6/fib6_rules.c
3352     @@ -104,6 +104,7 @@ static int fib6_rule_action(struct fib_rule *rule, struct flowi *flp,
3353     goto again;
3354     flp6->saddr = saddr;
3355     }
3356     + err = rt->dst.error;
3357     goto out;
3358     }
3359     again:
3360     diff --git a/net/rds/iw_rdma.c b/net/rds/iw_rdma.c
3361     index a817705ce2d0..dba8d0864f18 100644
3362     --- a/net/rds/iw_rdma.c
3363     +++ b/net/rds/iw_rdma.c
3364     @@ -88,7 +88,9 @@ static unsigned int rds_iw_unmap_fastreg_list(struct rds_iw_mr_pool *pool,
3365     int *unpinned);
3366     static void rds_iw_destroy_fastreg(struct rds_iw_mr_pool *pool, struct rds_iw_mr *ibmr);
3367    
3368     -static int rds_iw_get_device(struct rds_sock *rs, struct rds_iw_device **rds_iwdev, struct rdma_cm_id **cm_id)
3369     +static int rds_iw_get_device(struct sockaddr_in *src, struct sockaddr_in *dst,
3370     + struct rds_iw_device **rds_iwdev,
3371     + struct rdma_cm_id **cm_id)
3372     {
3373     struct rds_iw_device *iwdev;
3374     struct rds_iw_cm_id *i_cm_id;
3375     @@ -112,15 +114,15 @@ static int rds_iw_get_device(struct rds_sock *rs, struct rds_iw_device **rds_iwd
3376     src_addr->sin_port,
3377     dst_addr->sin_addr.s_addr,
3378     dst_addr->sin_port,
3379     - rs->rs_bound_addr,
3380     - rs->rs_bound_port,
3381     - rs->rs_conn_addr,
3382     - rs->rs_conn_port);
3383     + src->sin_addr.s_addr,
3384     + src->sin_port,
3385     + dst->sin_addr.s_addr,
3386     + dst->sin_port);
3387     #ifdef WORKING_TUPLE_DETECTION
3388     - if (src_addr->sin_addr.s_addr == rs->rs_bound_addr &&
3389     - src_addr->sin_port == rs->rs_bound_port &&
3390     - dst_addr->sin_addr.s_addr == rs->rs_conn_addr &&
3391     - dst_addr->sin_port == rs->rs_conn_port) {
3392     + if (src_addr->sin_addr.s_addr == src->sin_addr.s_addr &&
3393     + src_addr->sin_port == src->sin_port &&
3394     + dst_addr->sin_addr.s_addr == dst->sin_addr.s_addr &&
3395     + dst_addr->sin_port == dst->sin_port) {
3396     #else
3397     /* FIXME - needs to compare the local and remote
3398     * ipaddr/port tuple, but the ipaddr is the only
3399     @@ -128,7 +130,7 @@ static int rds_iw_get_device(struct rds_sock *rs, struct rds_iw_device **rds_iwd
3400     * zero'ed. It doesn't appear to be properly populated
3401     * during connection setup...
3402     */
3403     - if (src_addr->sin_addr.s_addr == rs->rs_bound_addr) {
3404     + if (src_addr->sin_addr.s_addr == src->sin_addr.s_addr) {
3405     #endif
3406     spin_unlock_irq(&iwdev->spinlock);
3407     *rds_iwdev = iwdev;
3408     @@ -180,19 +182,13 @@ int rds_iw_update_cm_id(struct rds_iw_device *rds_iwdev, struct rdma_cm_id *cm_i
3409     {
3410     struct sockaddr_in *src_addr, *dst_addr;
3411     struct rds_iw_device *rds_iwdev_old;
3412     - struct rds_sock rs;
3413     struct rdma_cm_id *pcm_id;
3414     int rc;
3415    
3416     src_addr = (struct sockaddr_in *)&cm_id->route.addr.src_addr;
3417     dst_addr = (struct sockaddr_in *)&cm_id->route.addr.dst_addr;
3418    
3419     - rs.rs_bound_addr = src_addr->sin_addr.s_addr;
3420     - rs.rs_bound_port = src_addr->sin_port;
3421     - rs.rs_conn_addr = dst_addr->sin_addr.s_addr;
3422     - rs.rs_conn_port = dst_addr->sin_port;
3423     -
3424     - rc = rds_iw_get_device(&rs, &rds_iwdev_old, &pcm_id);
3425     + rc = rds_iw_get_device(src_addr, dst_addr, &rds_iwdev_old, &pcm_id);
3426     if (rc)
3427     rds_iw_remove_cm_id(rds_iwdev, cm_id);
3428    
3429     @@ -598,9 +594,17 @@ void *rds_iw_get_mr(struct scatterlist *sg, unsigned long nents,
3430     struct rds_iw_device *rds_iwdev;
3431     struct rds_iw_mr *ibmr = NULL;
3432     struct rdma_cm_id *cm_id;
3433     + struct sockaddr_in src = {
3434     + .sin_addr.s_addr = rs->rs_bound_addr,
3435     + .sin_port = rs->rs_bound_port,
3436     + };
3437     + struct sockaddr_in dst = {
3438     + .sin_addr.s_addr = rs->rs_conn_addr,
3439     + .sin_port = rs->rs_conn_port,
3440     + };
3441     int ret;
3442    
3443     - ret = rds_iw_get_device(rs, &rds_iwdev, &cm_id);
3444     + ret = rds_iw_get_device(&src, &dst, &rds_iwdev, &cm_id);
3445     if (ret || !cm_id) {
3446     ret = -ENODEV;
3447     goto out;
3448     diff --git a/net/rxrpc/ar-recvmsg.c b/net/rxrpc/ar-recvmsg.c
3449     index e9aaa65c0778..0df95463c650 100644
3450     --- a/net/rxrpc/ar-recvmsg.c
3451     +++ b/net/rxrpc/ar-recvmsg.c
3452     @@ -87,7 +87,7 @@ int rxrpc_recvmsg(struct kiocb *iocb, struct socket *sock,
3453     if (!skb) {
3454     /* nothing remains on the queue */
3455     if (copied &&
3456     - (msg->msg_flags & MSG_PEEK || timeo == 0))
3457     + (flags & MSG_PEEK || timeo == 0))
3458     goto out;
3459    
3460     /* wait for a message to turn up */
3461     diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c
3462     index 0472909bb014..b78d81f5ffda 100644
3463     --- a/net/sched/cls_u32.c
3464     +++ b/net/sched/cls_u32.c
3465     @@ -78,8 +78,11 @@ struct tc_u_hnode {
3466     struct tc_u_common *tp_c;
3467     int refcnt;
3468     unsigned int divisor;
3469     - struct tc_u_knode __rcu *ht[1];
3470     struct rcu_head rcu;
3471     + /* The 'ht' field MUST be the last field in structure to allow for
3472     + * more entries allocated at end of structure.
3473     + */
3474     + struct tc_u_knode __rcu *ht[1];
3475     };
3476    
3477     struct tc_u_common {
3478     diff --git a/sound/core/control.c b/sound/core/control.c
3479     index b9611344ff9e..82a638a01b24 100644
3480     --- a/sound/core/control.c
3481     +++ b/sound/core/control.c
3482     @@ -1167,6 +1167,10 @@ static int snd_ctl_elem_add(struct snd_ctl_file *file,
3483    
3484     if (info->count < 1)
3485     return -EINVAL;
3486     + if (!*info->id.name)
3487     + return -EINVAL;
3488     + if (strnlen(info->id.name, sizeof(info->id.name)) >= sizeof(info->id.name))
3489     + return -EINVAL;
3490     access = info->access == 0 ? SNDRV_CTL_ELEM_ACCESS_READWRITE :
3491     (info->access & (SNDRV_CTL_ELEM_ACCESS_READWRITE|
3492     SNDRV_CTL_ELEM_ACCESS_INACTIVE|
3493     diff --git a/sound/pci/hda/hda_controller.c b/sound/pci/hda/hda_controller.c
3494     index 84c94301bfaf..20aa52b14b84 100644
3495     --- a/sound/pci/hda/hda_controller.c
3496     +++ b/sound/pci/hda/hda_controller.c
3497     @@ -1160,7 +1160,7 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
3498     }
3499     }
3500    
3501     - if (!bus->no_response_fallback)
3502     + if (bus->no_response_fallback)
3503     return -1;
3504    
3505     if (!chip->polling_mode && chip->poll_count < 2) {
3506     diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
3507     index 64220c08bd98..6c6e35aba989 100644
3508     --- a/sound/pci/hda/hda_generic.c
3509     +++ b/sound/pci/hda/hda_generic.c
3510     @@ -637,12 +637,45 @@ static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid,
3511     return val;
3512     }
3513    
3514     +/* is this a stereo widget or a stereo-to-mono mix? */
3515     +static bool is_stereo_amps(struct hda_codec *codec, hda_nid_t nid, int dir)
3516     +{
3517     + unsigned int wcaps = get_wcaps(codec, nid);
3518     + hda_nid_t conn;
3519     +
3520     + if (wcaps & AC_WCAP_STEREO)
3521     + return true;
3522     + if (dir != HDA_INPUT || get_wcaps_type(wcaps) != AC_WID_AUD_MIX)
3523     + return false;
3524     + if (snd_hda_get_num_conns(codec, nid) != 1)
3525     + return false;
3526     + if (snd_hda_get_connections(codec, nid, &conn, 1) < 0)
3527     + return false;
3528     + return !!(get_wcaps(codec, conn) & AC_WCAP_STEREO);
3529     +}
3530     +
3531     /* initialize the amp value (only at the first time) */
3532     static void init_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx)
3533     {
3534     unsigned int caps = query_amp_caps(codec, nid, dir);
3535     int val = get_amp_val_to_activate(codec, nid, dir, caps, false);
3536     - snd_hda_codec_amp_init_stereo(codec, nid, dir, idx, 0xff, val);
3537     +
3538     + if (is_stereo_amps(codec, nid, dir))
3539     + snd_hda_codec_amp_init_stereo(codec, nid, dir, idx, 0xff, val);
3540     + else
3541     + snd_hda_codec_amp_init(codec, nid, 0, dir, idx, 0xff, val);
3542     +}
3543     +
3544     +/* update the amp, doing in stereo or mono depending on NID */
3545     +static int update_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx,
3546     + unsigned int mask, unsigned int val)
3547     +{
3548     + if (is_stereo_amps(codec, nid, dir))
3549     + return snd_hda_codec_amp_stereo(codec, nid, dir, idx,
3550     + mask, val);
3551     + else
3552     + return snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
3553     + mask, val);
3554     }
3555    
3556     /* calculate amp value mask we can modify;
3557     @@ -682,7 +715,7 @@ static void activate_amp(struct hda_codec *codec, hda_nid_t nid, int dir,
3558     return;
3559    
3560     val &= mask;
3561     - snd_hda_codec_amp_stereo(codec, nid, dir, idx, mask, val);
3562     + update_amp(codec, nid, dir, idx, mask, val);
3563     }
3564    
3565     static void activate_amp_out(struct hda_codec *codec, struct nid_path *path,
3566     @@ -4331,13 +4364,11 @@ static void mute_all_mixer_nid(struct hda_codec *codec, hda_nid_t mix)
3567     has_amp = nid_has_mute(codec, mix, HDA_INPUT);
3568     for (i = 0; i < nums; i++) {
3569     if (has_amp)
3570     - snd_hda_codec_amp_stereo(codec, mix,
3571     - HDA_INPUT, i,
3572     - 0xff, HDA_AMP_MUTE);
3573     + update_amp(codec, mix, HDA_INPUT, i,
3574     + 0xff, HDA_AMP_MUTE);
3575     else if (nid_has_volume(codec, conn[i], HDA_OUTPUT))
3576     - snd_hda_codec_amp_stereo(codec, conn[i],
3577     - HDA_OUTPUT, 0,
3578     - 0xff, HDA_AMP_MUTE);
3579     + update_amp(codec, conn[i], HDA_OUTPUT, 0,
3580     + 0xff, HDA_AMP_MUTE);
3581     }
3582     }
3583    
3584     diff --git a/sound/pci/hda/hda_proc.c b/sound/pci/hda/hda_proc.c
3585     index ce5a6da83419..05e19f78b4cb 100644
3586     --- a/sound/pci/hda/hda_proc.c
3587     +++ b/sound/pci/hda/hda_proc.c
3588     @@ -134,13 +134,38 @@ static void print_amp_caps(struct snd_info_buffer *buffer,
3589     (caps & AC_AMPCAP_MUTE) >> AC_AMPCAP_MUTE_SHIFT);
3590     }
3591    
3592     +/* is this a stereo widget or a stereo-to-mono mix? */
3593     +static bool is_stereo_amps(struct hda_codec *codec, hda_nid_t nid,
3594     + int dir, unsigned int wcaps, int indices)
3595     +{
3596     + hda_nid_t conn;
3597     +
3598     + if (wcaps & AC_WCAP_STEREO)
3599     + return true;
3600     + /* check for a stereo-to-mono mix; it must be:
3601     + * only a single connection, only for input, and only a mixer widget
3602     + */
3603     + if (indices != 1 || dir != HDA_INPUT ||
3604     + get_wcaps_type(wcaps) != AC_WID_AUD_MIX)
3605     + return false;
3606     +
3607     + if (snd_hda_get_raw_connections(codec, nid, &conn, 1) < 0)
3608     + return false;
3609     + /* the connection source is a stereo? */
3610     + wcaps = snd_hda_param_read(codec, conn, AC_PAR_AUDIO_WIDGET_CAP);
3611     + return !!(wcaps & AC_WCAP_STEREO);
3612     +}
3613     +
3614     static void print_amp_vals(struct snd_info_buffer *buffer,
3615     struct hda_codec *codec, hda_nid_t nid,
3616     - int dir, int stereo, int indices)
3617     + int dir, unsigned int wcaps, int indices)
3618     {
3619     unsigned int val;
3620     + bool stereo;
3621     int i;
3622    
3623     + stereo = is_stereo_amps(codec, nid, dir, wcaps, indices);
3624     +
3625     dir = dir == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
3626     for (i = 0; i < indices; i++) {
3627     snd_iprintf(buffer, " [");
3628     @@ -757,12 +782,10 @@ static void print_codec_info(struct snd_info_entry *entry,
3629     (codec->single_adc_amp &&
3630     wid_type == AC_WID_AUD_IN))
3631     print_amp_vals(buffer, codec, nid, HDA_INPUT,
3632     - wid_caps & AC_WCAP_STEREO,
3633     - 1);
3634     + wid_caps, 1);
3635     else
3636     print_amp_vals(buffer, codec, nid, HDA_INPUT,
3637     - wid_caps & AC_WCAP_STEREO,
3638     - conn_len);
3639     + wid_caps, conn_len);
3640     }
3641     if (wid_caps & AC_WCAP_OUT_AMP) {
3642     snd_iprintf(buffer, " Amp-Out caps: ");
3643     @@ -771,11 +794,10 @@ static void print_codec_info(struct snd_info_entry *entry,
3644     if (wid_type == AC_WID_PIN &&
3645     codec->pin_amp_workaround)
3646     print_amp_vals(buffer, codec, nid, HDA_OUTPUT,
3647     - wid_caps & AC_WCAP_STEREO,
3648     - conn_len);
3649     + wid_caps, conn_len);
3650     else
3651     print_amp_vals(buffer, codec, nid, HDA_OUTPUT,
3652     - wid_caps & AC_WCAP_STEREO, 1);
3653     + wid_caps, 1);
3654     }
3655    
3656     switch (wid_type) {
3657     diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
3658     index 1589c9bcce3e..dd2b3d92071f 100644
3659     --- a/sound/pci/hda/patch_cirrus.c
3660     +++ b/sound/pci/hda/patch_cirrus.c
3661     @@ -393,6 +393,7 @@ static const struct snd_pci_quirk cs420x_fixup_tbl[] = {
3662     SND_PCI_QUIRK(0x106b, 0x1c00, "MacBookPro 8,1", CS420X_MBP81),
3663     SND_PCI_QUIRK(0x106b, 0x2000, "iMac 12,2", CS420X_IMAC27_122),
3664     SND_PCI_QUIRK(0x106b, 0x2800, "MacBookPro 10,1", CS420X_MBP101),
3665     + SND_PCI_QUIRK(0x106b, 0x5600, "MacBookAir 5,2", CS420X_MBP81),
3666     SND_PCI_QUIRK(0x106b, 0x5b00, "MacBookAir 4,2", CS420X_MBA42),
3667     SND_PCI_QUIRK_VENDOR(0x106b, "Apple", CS420X_APPLE),
3668     {} /* terminator */
3669     @@ -584,6 +585,7 @@ static int patch_cs420x(struct hda_codec *codec)
3670     return -ENOMEM;
3671    
3672     spec->gen.automute_hook = cs_automute;
3673     + codec->single_adc_amp = 1;
3674    
3675     snd_hda_pick_fixup(codec, cs420x_models, cs420x_fixup_tbl,
3676     cs420x_fixups);
3677     diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
3678     index e9ebc7bd752c..1b1e8c68edd6 100644
3679     --- a/sound/pci/hda/patch_conexant.c
3680     +++ b/sound/pci/hda/patch_conexant.c
3681     @@ -223,6 +223,7 @@ enum {
3682     CXT_PINCFG_LENOVO_TP410,
3683     CXT_PINCFG_LEMOTE_A1004,
3684     CXT_PINCFG_LEMOTE_A1205,
3685     + CXT_PINCFG_COMPAQ_CQ60,
3686     CXT_FIXUP_STEREO_DMIC,
3687     CXT_FIXUP_INC_MIC_BOOST,
3688     CXT_FIXUP_HEADPHONE_MIC_PIN,
3689     @@ -660,6 +661,15 @@ static const struct hda_fixup cxt_fixups[] = {
3690     .type = HDA_FIXUP_PINS,
3691     .v.pins = cxt_pincfg_lemote,
3692     },
3693     + [CXT_PINCFG_COMPAQ_CQ60] = {
3694     + .type = HDA_FIXUP_PINS,
3695     + .v.pins = (const struct hda_pintbl[]) {
3696     + /* 0x17 was falsely set up as a mic, it should 0x1d */
3697     + { 0x17, 0x400001f0 },
3698     + { 0x1d, 0x97a70120 },
3699     + { }
3700     + }
3701     + },
3702     [CXT_FIXUP_STEREO_DMIC] = {
3703     .type = HDA_FIXUP_FUNC,
3704     .v.func = cxt_fixup_stereo_dmic,
3705     @@ -769,6 +779,7 @@ static const struct hda_model_fixup cxt5047_fixup_models[] = {
3706     };
3707    
3708     static const struct snd_pci_quirk cxt5051_fixups[] = {
3709     + SND_PCI_QUIRK(0x103c, 0x360b, "Compaq CQ60", CXT_PINCFG_COMPAQ_CQ60),
3710     SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo X200", CXT_PINCFG_LENOVO_X200),
3711     {}
3712     };
3713     diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
3714     index 83bddbdb90e9..5293b5ac8b9d 100644
3715     --- a/sound/usb/quirks-table.h
3716     +++ b/sound/usb/quirks-table.h
3717     @@ -1773,6 +1773,36 @@ YAMAHA_DEVICE(0x7010, "UB99"),
3718     }
3719     }
3720     },
3721     +{
3722     + USB_DEVICE(0x0582, 0x0159),
3723     + .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3724     + /* .vendor_name = "Roland", */
3725     + /* .product_name = "UA-22", */
3726     + .ifnum = QUIRK_ANY_INTERFACE,
3727     + .type = QUIRK_COMPOSITE,
3728     + .data = (const struct snd_usb_audio_quirk[]) {
3729     + {
3730     + .ifnum = 0,
3731     + .type = QUIRK_AUDIO_STANDARD_INTERFACE
3732     + },
3733     + {
3734     + .ifnum = 1,
3735     + .type = QUIRK_AUDIO_STANDARD_INTERFACE
3736     + },
3737     + {
3738     + .ifnum = 2,
3739     + .type = QUIRK_MIDI_FIXED_ENDPOINT,
3740     + .data = & (const struct snd_usb_midi_endpoint_info) {
3741     + .out_cables = 0x0001,
3742     + .in_cables = 0x0001
3743     + }
3744     + },
3745     + {
3746     + .ifnum = -1
3747     + }
3748     + }
3749     + }
3750     +},
3751     /* this catches most recent vendor-specific Roland devices */
3752     {
3753     .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
3754     diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
3755     index 3cee7b167052..cfbe0e7d1c45 100644
3756     --- a/virt/kvm/kvm_main.c
3757     +++ b/virt/kvm/kvm_main.c
3758     @@ -2417,6 +2417,7 @@ static long kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg)
3759     case KVM_CAP_SIGNAL_MSI:
3760     #endif
3761     #ifdef CONFIG_HAVE_KVM_IRQFD
3762     + case KVM_CAP_IRQFD:
3763     case KVM_CAP_IRQFD_RESAMPLE:
3764     #endif
3765     case KVM_CAP_CHECK_EXTENSION_VM: