Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.14/0143-4.14.44-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (hide annotations) (download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 6 months ago) by niro
File size: 209535 byte(s)
-added up to patches-4.14.79
1 niro 3238 diff --git a/Makefile b/Makefile
2     index 9be88c9d9fc9..787cf6605209 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 4
8     PATCHLEVEL = 14
9     -SUBLEVEL = 43
10     +SUBLEVEL = 44
11     EXTRAVERSION =
12     NAME = Petit Gorille
13    
14     diff --git a/arch/arm/boot/dts/imx7d-sdb.dts b/arch/arm/boot/dts/imx7d-sdb.dts
15     index 44637cabcc56..255e64ba32e2 100644
16     --- a/arch/arm/boot/dts/imx7d-sdb.dts
17     +++ b/arch/arm/boot/dts/imx7d-sdb.dts
18     @@ -82,7 +82,7 @@
19     enable-active-high;
20     };
21    
22     - reg_usb_otg2_vbus: regulator-usb-otg1-vbus {
23     + reg_usb_otg2_vbus: regulator-usb-otg2-vbus {
24     compatible = "regulator-fixed";
25     regulator-name = "usb_otg2_vbus";
26     regulator-min-microvolt = <5000000>;
27     diff --git a/arch/s390/crypto/crc32be-vx.S b/arch/s390/crypto/crc32be-vx.S
28     index e8077f0971f8..2bf01ba44107 100644
29     --- a/arch/s390/crypto/crc32be-vx.S
30     +++ b/arch/s390/crypto/crc32be-vx.S
31     @@ -13,6 +13,7 @@
32     */
33    
34     #include <linux/linkage.h>
35     +#include <asm/nospec-insn.h>
36     #include <asm/vx-insn.h>
37    
38     /* Vector register range containing CRC-32 constants */
39     @@ -67,6 +68,8 @@
40    
41     .previous
42    
43     + GEN_BR_THUNK %r14
44     +
45     .text
46     /*
47     * The CRC-32 function(s) use these calling conventions:
48     @@ -203,6 +206,6 @@ ENTRY(crc32_be_vgfm_16)
49    
50     .Ldone:
51     VLGVF %r2,%v2,3
52     - br %r14
53     + BR_EX %r14
54    
55     .previous
56     diff --git a/arch/s390/crypto/crc32le-vx.S b/arch/s390/crypto/crc32le-vx.S
57     index d8c67a58c0c5..7d6f568bd3ad 100644
58     --- a/arch/s390/crypto/crc32le-vx.S
59     +++ b/arch/s390/crypto/crc32le-vx.S
60     @@ -14,6 +14,7 @@
61     */
62    
63     #include <linux/linkage.h>
64     +#include <asm/nospec-insn.h>
65     #include <asm/vx-insn.h>
66    
67     /* Vector register range containing CRC-32 constants */
68     @@ -76,6 +77,7 @@
69    
70     .previous
71    
72     + GEN_BR_THUNK %r14
73    
74     .text
75    
76     @@ -264,6 +266,6 @@ crc32_le_vgfm_generic:
77    
78     .Ldone:
79     VLGVF %r2,%v2,2
80     - br %r14
81     + BR_EX %r14
82    
83     .previous
84     diff --git a/arch/s390/include/asm/alternative-asm.h b/arch/s390/include/asm/alternative-asm.h
85     new file mode 100644
86     index 000000000000..955d620db23e
87     --- /dev/null
88     +++ b/arch/s390/include/asm/alternative-asm.h
89     @@ -0,0 +1,108 @@
90     +/* SPDX-License-Identifier: GPL-2.0 */
91     +#ifndef _ASM_S390_ALTERNATIVE_ASM_H
92     +#define _ASM_S390_ALTERNATIVE_ASM_H
93     +
94     +#ifdef __ASSEMBLY__
95     +
96     +/*
97     + * Check the length of an instruction sequence. The length may not be larger
98     + * than 254 bytes and it has to be divisible by 2.
99     + */
100     +.macro alt_len_check start,end
101     + .if ( \end - \start ) > 254
102     + .error "cpu alternatives does not support instructions blocks > 254 bytes\n"
103     + .endif
104     + .if ( \end - \start ) % 2
105     + .error "cpu alternatives instructions length is odd\n"
106     + .endif
107     +.endm
108     +
109     +/*
110     + * Issue one struct alt_instr descriptor entry (need to put it into
111     + * the section .altinstructions, see below). This entry contains
112     + * enough information for the alternatives patching code to patch an
113     + * instruction. See apply_alternatives().
114     + */
115     +.macro alt_entry orig_start, orig_end, alt_start, alt_end, feature
116     + .long \orig_start - .
117     + .long \alt_start - .
118     + .word \feature
119     + .byte \orig_end - \orig_start
120     + .byte \alt_end - \alt_start
121     +.endm
122     +
123     +/*
124     + * Fill up @bytes with nops. The macro emits 6-byte nop instructions
125     + * for the bulk of the area, possibly followed by a 4-byte and/or
126     + * a 2-byte nop if the size of the area is not divisible by 6.
127     + */
128     +.macro alt_pad_fill bytes
129     + .fill ( \bytes ) / 6, 6, 0xc0040000
130     + .fill ( \bytes ) % 6 / 4, 4, 0x47000000
131     + .fill ( \bytes ) % 6 % 4 / 2, 2, 0x0700
132     +.endm
133     +
134     +/*
135     + * Fill up @bytes with nops. If the number of bytes is larger
136     + * than 6, emit a jg instruction to branch over all nops, then
137     + * fill an area of size (@bytes - 6) with nop instructions.
138     + */
139     +.macro alt_pad bytes
140     + .if ( \bytes > 0 )
141     + .if ( \bytes > 6 )
142     + jg . + \bytes
143     + alt_pad_fill \bytes - 6
144     + .else
145     + alt_pad_fill \bytes
146     + .endif
147     + .endif
148     +.endm
149     +
150     +/*
151     + * Define an alternative between two instructions. If @feature is
152     + * present, early code in apply_alternatives() replaces @oldinstr with
153     + * @newinstr. ".skip" directive takes care of proper instruction padding
154     + * in case @newinstr is longer than @oldinstr.
155     + */
156     +.macro ALTERNATIVE oldinstr, newinstr, feature
157     + .pushsection .altinstr_replacement,"ax"
158     +770: \newinstr
159     +771: .popsection
160     +772: \oldinstr
161     +773: alt_len_check 770b, 771b
162     + alt_len_check 772b, 773b
163     + alt_pad ( ( 771b - 770b ) - ( 773b - 772b ) )
164     +774: .pushsection .altinstructions,"a"
165     + alt_entry 772b, 774b, 770b, 771b, \feature
166     + .popsection
167     +.endm
168     +
169     +/*
170     + * Define an alternative between two instructions. If @feature is
171     + * present, early code in apply_alternatives() replaces @oldinstr with
172     + * @newinstr. ".skip" directive takes care of proper instruction padding
173     + * in case @newinstr is longer than @oldinstr.
174     + */
175     +.macro ALTERNATIVE_2 oldinstr, newinstr1, feature1, newinstr2, feature2
176     + .pushsection .altinstr_replacement,"ax"
177     +770: \newinstr1
178     +771: \newinstr2
179     +772: .popsection
180     +773: \oldinstr
181     +774: alt_len_check 770b, 771b
182     + alt_len_check 771b, 772b
183     + alt_len_check 773b, 774b
184     + .if ( 771b - 770b > 772b - 771b )
185     + alt_pad ( ( 771b - 770b ) - ( 774b - 773b ) )
186     + .else
187     + alt_pad ( ( 772b - 771b ) - ( 774b - 773b ) )
188     + .endif
189     +775: .pushsection .altinstructions,"a"
190     + alt_entry 773b, 775b, 770b, 771b,\feature1
191     + alt_entry 773b, 775b, 771b, 772b,\feature2
192     + .popsection
193     +.endm
194     +
195     +#endif /* __ASSEMBLY__ */
196     +
197     +#endif /* _ASM_S390_ALTERNATIVE_ASM_H */
198     diff --git a/arch/s390/include/asm/nospec-insn.h b/arch/s390/include/asm/nospec-insn.h
199     new file mode 100644
200     index 000000000000..9a56e738d645
201     --- /dev/null
202     +++ b/arch/s390/include/asm/nospec-insn.h
203     @@ -0,0 +1,195 @@
204     +/* SPDX-License-Identifier: GPL-2.0 */
205     +#ifndef _ASM_S390_NOSPEC_ASM_H
206     +#define _ASM_S390_NOSPEC_ASM_H
207     +
208     +#include <asm/alternative-asm.h>
209     +#include <asm/asm-offsets.h>
210     +
211     +#ifdef __ASSEMBLY__
212     +
213     +#ifdef CONFIG_EXPOLINE
214     +
215     +_LC_BR_R1 = __LC_BR_R1
216     +
217     +/*
218     + * The expoline macros are used to create thunks in the same format
219     + * as gcc generates them. The 'comdat' section flag makes sure that
220     + * the various thunks are merged into a single copy.
221     + */
222     + .macro __THUNK_PROLOG_NAME name
223     + .pushsection .text.\name,"axG",@progbits,\name,comdat
224     + .globl \name
225     + .hidden \name
226     + .type \name,@function
227     +\name:
228     + .cfi_startproc
229     + .endm
230     +
231     + .macro __THUNK_EPILOG
232     + .cfi_endproc
233     + .popsection
234     + .endm
235     +
236     + .macro __THUNK_PROLOG_BR r1,r2
237     + __THUNK_PROLOG_NAME __s390x_indirect_jump_r\r2\()use_r\r1
238     + .endm
239     +
240     + .macro __THUNK_PROLOG_BC d0,r1,r2
241     + __THUNK_PROLOG_NAME __s390x_indirect_branch_\d0\()_\r2\()use_\r1
242     + .endm
243     +
244     + .macro __THUNK_BR r1,r2
245     + jg __s390x_indirect_jump_r\r2\()use_r\r1
246     + .endm
247     +
248     + .macro __THUNK_BC d0,r1,r2
249     + jg __s390x_indirect_branch_\d0\()_\r2\()use_\r1
250     + .endm
251     +
252     + .macro __THUNK_BRASL r1,r2,r3
253     + brasl \r1,__s390x_indirect_jump_r\r3\()use_r\r2
254     + .endm
255     +
256     + .macro __DECODE_RR expand,reg,ruse
257     + .set __decode_fail,1
258     + .irp r1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
259     + .ifc \reg,%r\r1
260     + .irp r2,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
261     + .ifc \ruse,%r\r2
262     + \expand \r1,\r2
263     + .set __decode_fail,0
264     + .endif
265     + .endr
266     + .endif
267     + .endr
268     + .if __decode_fail == 1
269     + .error "__DECODE_RR failed"
270     + .endif
271     + .endm
272     +
273     + .macro __DECODE_RRR expand,rsave,rtarget,ruse
274     + .set __decode_fail,1
275     + .irp r1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
276     + .ifc \rsave,%r\r1
277     + .irp r2,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
278     + .ifc \rtarget,%r\r2
279     + .irp r3,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
280     + .ifc \ruse,%r\r3
281     + \expand \r1,\r2,\r3
282     + .set __decode_fail,0
283     + .endif
284     + .endr
285     + .endif
286     + .endr
287     + .endif
288     + .endr
289     + .if __decode_fail == 1
290     + .error "__DECODE_RRR failed"
291     + .endif
292     + .endm
293     +
294     + .macro __DECODE_DRR expand,disp,reg,ruse
295     + .set __decode_fail,1
296     + .irp r1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
297     + .ifc \reg,%r\r1
298     + .irp r2,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
299     + .ifc \ruse,%r\r2
300     + \expand \disp,\r1,\r2
301     + .set __decode_fail,0
302     + .endif
303     + .endr
304     + .endif
305     + .endr
306     + .if __decode_fail == 1
307     + .error "__DECODE_DRR failed"
308     + .endif
309     + .endm
310     +
311     + .macro __THUNK_EX_BR reg,ruse
312     + # Be very careful when adding instructions to this macro!
313     + # The ALTERNATIVE replacement code has a .+10 which targets
314     + # the "br \reg" after the code has been patched.
315     +#ifdef CONFIG_HAVE_MARCH_Z10_FEATURES
316     + exrl 0,555f
317     + j .
318     +#else
319     + .ifc \reg,%r1
320     + ALTERNATIVE "ex %r0,_LC_BR_R1", ".insn ril,0xc60000000000,0,.+10", 35
321     + j .
322     + .else
323     + larl \ruse,555f
324     + ex 0,0(\ruse)
325     + j .
326     + .endif
327     +#endif
328     +555: br \reg
329     + .endm
330     +
331     + .macro __THUNK_EX_BC disp,reg,ruse
332     +#ifdef CONFIG_HAVE_MARCH_Z10_FEATURES
333     + exrl 0,556f
334     + j .
335     +#else
336     + larl \ruse,556f
337     + ex 0,0(\ruse)
338     + j .
339     +#endif
340     +556: b \disp(\reg)
341     + .endm
342     +
343     + .macro GEN_BR_THUNK reg,ruse=%r1
344     + __DECODE_RR __THUNK_PROLOG_BR,\reg,\ruse
345     + __THUNK_EX_BR \reg,\ruse
346     + __THUNK_EPILOG
347     + .endm
348     +
349     + .macro GEN_B_THUNK disp,reg,ruse=%r1
350     + __DECODE_DRR __THUNK_PROLOG_BC,\disp,\reg,\ruse
351     + __THUNK_EX_BC \disp,\reg,\ruse
352     + __THUNK_EPILOG
353     + .endm
354     +
355     + .macro BR_EX reg,ruse=%r1
356     +557: __DECODE_RR __THUNK_BR,\reg,\ruse
357     + .pushsection .s390_indirect_branches,"a",@progbits
358     + .long 557b-.
359     + .popsection
360     + .endm
361     +
362     + .macro B_EX disp,reg,ruse=%r1
363     +558: __DECODE_DRR __THUNK_BC,\disp,\reg,\ruse
364     + .pushsection .s390_indirect_branches,"a",@progbits
365     + .long 558b-.
366     + .popsection
367     + .endm
368     +
369     + .macro BASR_EX rsave,rtarget,ruse=%r1
370     +559: __DECODE_RRR __THUNK_BRASL,\rsave,\rtarget,\ruse
371     + .pushsection .s390_indirect_branches,"a",@progbits
372     + .long 559b-.
373     + .popsection
374     + .endm
375     +
376     +#else
377     + .macro GEN_BR_THUNK reg,ruse=%r1
378     + .endm
379     +
380     + .macro GEN_B_THUNK disp,reg,ruse=%r1
381     + .endm
382     +
383     + .macro BR_EX reg,ruse=%r1
384     + br \reg
385     + .endm
386     +
387     + .macro B_EX disp,reg,ruse=%r1
388     + b \disp(\reg)
389     + .endm
390     +
391     + .macro BASR_EX rsave,rtarget,ruse=%r1
392     + basr \rsave,\rtarget
393     + .endm
394     +#endif
395     +
396     +#endif /* __ASSEMBLY__ */
397     +
398     +#endif /* _ASM_S390_NOSPEC_ASM_H */
399     diff --git a/arch/s390/kernel/Makefile b/arch/s390/kernel/Makefile
400     index a3a4cafb6080..e0784fff07f5 100644
401     --- a/arch/s390/kernel/Makefile
402     +++ b/arch/s390/kernel/Makefile
403     @@ -63,6 +63,7 @@ obj-y += nospec-branch.o
404    
405     extra-y += head.o head64.o vmlinux.lds
406    
407     +obj-$(CONFIG_SYSFS) += nospec-sysfs.o
408     CFLAGS_REMOVE_nospec-branch.o += $(CC_FLAGS_EXPOLINE)
409    
410     obj-$(CONFIG_MODULES) += module.o
411     diff --git a/arch/s390/kernel/asm-offsets.c b/arch/s390/kernel/asm-offsets.c
412     index 0e6d2b032484..4e69bf909e87 100644
413     --- a/arch/s390/kernel/asm-offsets.c
414     +++ b/arch/s390/kernel/asm-offsets.c
415     @@ -177,6 +177,7 @@ int main(void)
416     OFFSET(__LC_PREEMPT_COUNT, lowcore, preempt_count);
417     OFFSET(__LC_GMAP, lowcore, gmap);
418     OFFSET(__LC_PASTE, lowcore, paste);
419     + OFFSET(__LC_BR_R1, lowcore, br_r1_trampoline);
420     /* software defined ABI-relevant lowcore locations 0xe00 - 0xe20 */
421     OFFSET(__LC_DUMP_REIPL, lowcore, ipib);
422     /* hardware defined lowcore locations 0x1000 - 0x18ff */
423     diff --git a/arch/s390/kernel/base.S b/arch/s390/kernel/base.S
424     index f6c56009e822..b65874b0b412 100644
425     --- a/arch/s390/kernel/base.S
426     +++ b/arch/s390/kernel/base.S
427     @@ -9,18 +9,22 @@
428    
429     #include <linux/linkage.h>
430     #include <asm/asm-offsets.h>
431     +#include <asm/nospec-insn.h>
432     #include <asm/ptrace.h>
433     #include <asm/sigp.h>
434    
435     + GEN_BR_THUNK %r9
436     + GEN_BR_THUNK %r14
437     +
438     ENTRY(s390_base_mcck_handler)
439     basr %r13,0
440     0: lg %r15,__LC_PANIC_STACK # load panic stack
441     aghi %r15,-STACK_FRAME_OVERHEAD
442     larl %r1,s390_base_mcck_handler_fn
443     - lg %r1,0(%r1)
444     - ltgr %r1,%r1
445     + lg %r9,0(%r1)
446     + ltgr %r9,%r9
447     jz 1f
448     - basr %r14,%r1
449     + BASR_EX %r14,%r9
450     1: la %r1,4095
451     lmg %r0,%r15,__LC_GPREGS_SAVE_AREA-4095(%r1)
452     lpswe __LC_MCK_OLD_PSW
453     @@ -37,10 +41,10 @@ ENTRY(s390_base_ext_handler)
454     basr %r13,0
455     0: aghi %r15,-STACK_FRAME_OVERHEAD
456     larl %r1,s390_base_ext_handler_fn
457     - lg %r1,0(%r1)
458     - ltgr %r1,%r1
459     + lg %r9,0(%r1)
460     + ltgr %r9,%r9
461     jz 1f
462     - basr %r14,%r1
463     + BASR_EX %r14,%r9
464     1: lmg %r0,%r15,__LC_SAVE_AREA_ASYNC
465     ni __LC_EXT_OLD_PSW+1,0xfd # clear wait state bit
466     lpswe __LC_EXT_OLD_PSW
467     @@ -57,10 +61,10 @@ ENTRY(s390_base_pgm_handler)
468     basr %r13,0
469     0: aghi %r15,-STACK_FRAME_OVERHEAD
470     larl %r1,s390_base_pgm_handler_fn
471     - lg %r1,0(%r1)
472     - ltgr %r1,%r1
473     + lg %r9,0(%r1)
474     + ltgr %r9,%r9
475     jz 1f
476     - basr %r14,%r1
477     + BASR_EX %r14,%r9
478     lmg %r0,%r15,__LC_SAVE_AREA_SYNC
479     lpswe __LC_PGM_OLD_PSW
480     1: lpswe disabled_wait_psw-0b(%r13)
481     @@ -117,7 +121,7 @@ ENTRY(diag308_reset)
482     larl %r4,.Lcontinue_psw # Restore PSW flags
483     lpswe 0(%r4)
484     .Lcontinue:
485     - br %r14
486     + BR_EX %r14
487     .align 16
488     .Lrestart_psw:
489     .long 0x00080000,0x80000000 + .Lrestart_part2
490     diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
491     index ed9aaa212d4a..be20b1f73384 100644
492     --- a/arch/s390/kernel/entry.S
493     +++ b/arch/s390/kernel/entry.S
494     @@ -25,6 +25,7 @@
495     #include <asm/setup.h>
496     #include <asm/nmi.h>
497     #include <asm/export.h>
498     +#include <asm/nospec-insn.h>
499    
500     __PT_R0 = __PT_GPRS
501     __PT_R1 = __PT_GPRS + 8
502     @@ -221,67 +222,9 @@ _PIF_WORK = (_PIF_PER_TRAP | _PIF_SYSCALL_RESTART)
503     .popsection
504     .endm
505    
506     -#ifdef CONFIG_EXPOLINE
507     -
508     - .macro GEN_BR_THUNK name,reg,tmp
509     - .section .text.\name,"axG",@progbits,\name,comdat
510     - .globl \name
511     - .hidden \name
512     - .type \name,@function
513     -\name:
514     - .cfi_startproc
515     -#ifdef CONFIG_HAVE_MARCH_Z10_FEATURES
516     - exrl 0,0f
517     -#else
518     - larl \tmp,0f
519     - ex 0,0(\tmp)
520     -#endif
521     - j .
522     -0: br \reg
523     - .cfi_endproc
524     - .endm
525     -
526     - GEN_BR_THUNK __s390x_indirect_jump_r1use_r9,%r9,%r1
527     - GEN_BR_THUNK __s390x_indirect_jump_r1use_r14,%r14,%r1
528     - GEN_BR_THUNK __s390x_indirect_jump_r11use_r14,%r14,%r11
529     -
530     - .macro BASR_R14_R9
531     -0: brasl %r14,__s390x_indirect_jump_r1use_r9
532     - .pushsection .s390_indirect_branches,"a",@progbits
533     - .long 0b-.
534     - .popsection
535     - .endm
536     -
537     - .macro BR_R1USE_R14
538     -0: jg __s390x_indirect_jump_r1use_r14
539     - .pushsection .s390_indirect_branches,"a",@progbits
540     - .long 0b-.
541     - .popsection
542     - .endm
543     -
544     - .macro BR_R11USE_R14
545     -0: jg __s390x_indirect_jump_r11use_r14
546     - .pushsection .s390_indirect_branches,"a",@progbits
547     - .long 0b-.
548     - .popsection
549     - .endm
550     -
551     -#else /* CONFIG_EXPOLINE */
552     -
553     - .macro BASR_R14_R9
554     - basr %r14,%r9
555     - .endm
556     -
557     - .macro BR_R1USE_R14
558     - br %r14
559     - .endm
560     -
561     - .macro BR_R11USE_R14
562     - br %r14
563     - .endm
564     -
565     -#endif /* CONFIG_EXPOLINE */
566     -
567     + GEN_BR_THUNK %r9
568     + GEN_BR_THUNK %r14
569     + GEN_BR_THUNK %r14,%r11
570    
571     .section .kprobes.text, "ax"
572     .Ldummy:
573     @@ -298,7 +241,7 @@ _PIF_WORK = (_PIF_PER_TRAP | _PIF_SYSCALL_RESTART)
574     ENTRY(__bpon)
575     .globl __bpon
576     BPON
577     - BR_R1USE_R14
578     + BR_EX %r14
579    
580     /*
581     * Scheduler resume function, called by switch_to
582     @@ -325,7 +268,7 @@ ENTRY(__switch_to)
583     TSTMSK __LC_MACHINE_FLAGS,MACHINE_FLAG_LPP
584     jz 0f
585     .insn s,0xb2800000,__LC_LPP # set program parameter
586     -0: BR_R1USE_R14
587     +0: BR_EX %r14
588    
589     .L__critical_start:
590    
591     @@ -392,7 +335,7 @@ sie_exit:
592     xgr %r5,%r5
593     lmg %r6,%r14,__SF_GPRS(%r15) # restore kernel registers
594     lg %r2,__SF_EMPTY+16(%r15) # return exit reason code
595     - BR_R1USE_R14
596     + BR_EX %r14
597     .Lsie_fault:
598     lghi %r14,-EFAULT
599     stg %r14,__SF_EMPTY+16(%r15) # set exit reason code
600     @@ -451,7 +394,7 @@ ENTRY(system_call)
601     lgf %r9,0(%r8,%r10) # get system call add.
602     TSTMSK __TI_flags(%r12),_TIF_TRACE
603     jnz .Lsysc_tracesys
604     - BASR_R14_R9 # call sys_xxxx
605     + BASR_EX %r14,%r9 # call sys_xxxx
606     stg %r2,__PT_R2(%r11) # store return value
607    
608     .Lsysc_return:
609     @@ -628,7 +571,7 @@ ENTRY(system_call)
610     lmg %r3,%r7,__PT_R3(%r11)
611     stg %r7,STACK_FRAME_OVERHEAD(%r15)
612     lg %r2,__PT_ORIG_GPR2(%r11)
613     - BASR_R14_R9 # call sys_xxx
614     + BASR_EX %r14,%r9 # call sys_xxx
615     stg %r2,__PT_R2(%r11) # store return value
616     .Lsysc_tracenogo:
617     TSTMSK __TI_flags(%r12),_TIF_TRACE
618     @@ -652,7 +595,7 @@ ENTRY(ret_from_fork)
619     lmg %r9,%r10,__PT_R9(%r11) # load gprs
620     ENTRY(kernel_thread_starter)
621     la %r2,0(%r10)
622     - BASR_R14_R9
623     + BASR_EX %r14,%r9
624     j .Lsysc_tracenogo
625    
626     /*
627     @@ -731,7 +674,7 @@ ENTRY(pgm_check_handler)
628     je .Lpgm_return
629     lgf %r9,0(%r10,%r1) # load address of handler routine
630     lgr %r2,%r11 # pass pointer to pt_regs
631     - BASR_R14_R9 # branch to interrupt-handler
632     + BASR_EX %r14,%r9 # branch to interrupt-handler
633     .Lpgm_return:
634     LOCKDEP_SYS_EXIT
635     tm __PT_PSW+1(%r11),0x01 # returning to user ?
636     @@ -1041,7 +984,7 @@ ENTRY(psw_idle)
637     stpt __TIMER_IDLE_ENTER(%r2)
638     .Lpsw_idle_lpsw:
639     lpswe __SF_EMPTY(%r15)
640     - BR_R1USE_R14
641     + BR_EX %r14
642     .Lpsw_idle_end:
643    
644     /*
645     @@ -1083,7 +1026,7 @@ ENTRY(save_fpu_regs)
646     .Lsave_fpu_regs_done:
647     oi __LC_CPU_FLAGS+7,_CIF_FPU
648     .Lsave_fpu_regs_exit:
649     - BR_R1USE_R14
650     + BR_EX %r14
651     .Lsave_fpu_regs_end:
652     EXPORT_SYMBOL(save_fpu_regs)
653    
654     @@ -1129,7 +1072,7 @@ load_fpu_regs:
655     .Lload_fpu_regs_done:
656     ni __LC_CPU_FLAGS+7,255-_CIF_FPU
657     .Lload_fpu_regs_exit:
658     - BR_R1USE_R14
659     + BR_EX %r14
660     .Lload_fpu_regs_end:
661    
662     .L__critical_end:
663     @@ -1301,7 +1244,7 @@ cleanup_critical:
664     jl 0f
665     clg %r9,BASED(.Lcleanup_table+104) # .Lload_fpu_regs_end
666     jl .Lcleanup_load_fpu_regs
667     -0: BR_R11USE_R14
668     +0: BR_EX %r14
669    
670     .align 8
671     .Lcleanup_table:
672     @@ -1337,7 +1280,7 @@ cleanup_critical:
673     ni __SIE_PROG0C+3(%r9),0xfe # no longer in SIE
674     lctlg %c1,%c1,__LC_USER_ASCE # load primary asce
675     larl %r9,sie_exit # skip forward to sie_exit
676     - BR_R11USE_R14
677     + BR_EX %r14
678     #endif
679    
680     .Lcleanup_system_call:
681     @@ -1391,7 +1334,7 @@ cleanup_critical:
682     stg %r15,56(%r11) # r15 stack pointer
683     # set new psw address and exit
684     larl %r9,.Lsysc_do_svc
685     - BR_R11USE_R14
686     + BR_EX %r14,%r11
687     .Lcleanup_system_call_insn:
688     .quad system_call
689     .quad .Lsysc_stmg
690     @@ -1403,7 +1346,7 @@ cleanup_critical:
691    
692     .Lcleanup_sysc_tif:
693     larl %r9,.Lsysc_tif
694     - BR_R11USE_R14
695     + BR_EX %r14,%r11
696    
697     .Lcleanup_sysc_restore:
698     # check if stpt has been executed
699     @@ -1420,14 +1363,14 @@ cleanup_critical:
700     mvc 0(64,%r11),__PT_R8(%r9)
701     lmg %r0,%r7,__PT_R0(%r9)
702     1: lmg %r8,%r9,__LC_RETURN_PSW
703     - BR_R11USE_R14
704     + BR_EX %r14,%r11
705     .Lcleanup_sysc_restore_insn:
706     .quad .Lsysc_exit_timer
707     .quad .Lsysc_done - 4
708    
709     .Lcleanup_io_tif:
710     larl %r9,.Lio_tif
711     - BR_R11USE_R14
712     + BR_EX %r14,%r11
713    
714     .Lcleanup_io_restore:
715     # check if stpt has been executed
716     @@ -1441,7 +1384,7 @@ cleanup_critical:
717     mvc 0(64,%r11),__PT_R8(%r9)
718     lmg %r0,%r7,__PT_R0(%r9)
719     1: lmg %r8,%r9,__LC_RETURN_PSW
720     - BR_R11USE_R14
721     + BR_EX %r14,%r11
722     .Lcleanup_io_restore_insn:
723     .quad .Lio_exit_timer
724     .quad .Lio_done - 4
725     @@ -1494,17 +1437,17 @@ cleanup_critical:
726     # prepare return psw
727     nihh %r8,0xfcfd # clear irq & wait state bits
728     lg %r9,48(%r11) # return from psw_idle
729     - BR_R11USE_R14
730     + BR_EX %r14,%r11
731     .Lcleanup_idle_insn:
732     .quad .Lpsw_idle_lpsw
733    
734     .Lcleanup_save_fpu_regs:
735     larl %r9,save_fpu_regs
736     - BR_R11USE_R14
737     + BR_EX %r14,%r11
738    
739     .Lcleanup_load_fpu_regs:
740     larl %r9,load_fpu_regs
741     - BR_R11USE_R14
742     + BR_EX %r14,%r11
743    
744     /*
745     * Integer constants
746     diff --git a/arch/s390/kernel/mcount.S b/arch/s390/kernel/mcount.S
747     index 82df7d80fab2..27110f3294ed 100644
748     --- a/arch/s390/kernel/mcount.S
749     +++ b/arch/s390/kernel/mcount.S
750     @@ -9,13 +9,17 @@
751     #include <linux/linkage.h>
752     #include <asm/asm-offsets.h>
753     #include <asm/ftrace.h>
754     +#include <asm/nospec-insn.h>
755     #include <asm/ptrace.h>
756     #include <asm/export.h>
757    
758     + GEN_BR_THUNK %r1
759     + GEN_BR_THUNK %r14
760     +
761     .section .kprobes.text, "ax"
762    
763     ENTRY(ftrace_stub)
764     - br %r14
765     + BR_EX %r14
766    
767     #define STACK_FRAME_SIZE (STACK_FRAME_OVERHEAD + __PT_SIZE)
768     #define STACK_PTREGS (STACK_FRAME_OVERHEAD)
769     @@ -23,7 +27,7 @@ ENTRY(ftrace_stub)
770     #define STACK_PTREGS_PSW (STACK_PTREGS + __PT_PSW)
771    
772     ENTRY(_mcount)
773     - br %r14
774     + BR_EX %r14
775    
776     EXPORT_SYMBOL(_mcount)
777    
778     @@ -53,7 +57,7 @@ ENTRY(ftrace_caller)
779     #endif
780     lgr %r3,%r14
781     la %r5,STACK_PTREGS(%r15)
782     - basr %r14,%r1
783     + BASR_EX %r14,%r1
784     #ifdef CONFIG_FUNCTION_GRAPH_TRACER
785     # The j instruction gets runtime patched to a nop instruction.
786     # See ftrace_enable_ftrace_graph_caller.
787     @@ -68,7 +72,7 @@ ftrace_graph_caller_end:
788     #endif
789     lg %r1,(STACK_PTREGS_PSW+8)(%r15)
790     lmg %r2,%r15,(STACK_PTREGS_GPRS+2*8)(%r15)
791     - br %r1
792     + BR_EX %r1
793    
794     #ifdef CONFIG_FUNCTION_GRAPH_TRACER
795    
796     @@ -81,6 +85,6 @@ ENTRY(return_to_handler)
797     aghi %r15,STACK_FRAME_OVERHEAD
798     lgr %r14,%r2
799     lmg %r2,%r5,32(%r15)
800     - br %r14
801     + BR_EX %r14
802    
803     #endif
804     diff --git a/arch/s390/kernel/nospec-branch.c b/arch/s390/kernel/nospec-branch.c
805     index 9f3b5b382743..d5eed651b5ab 100644
806     --- a/arch/s390/kernel/nospec-branch.c
807     +++ b/arch/s390/kernel/nospec-branch.c
808     @@ -44,24 +44,6 @@ static int __init nospec_report(void)
809     }
810     arch_initcall(nospec_report);
811    
812     -#ifdef CONFIG_SYSFS
813     -ssize_t cpu_show_spectre_v1(struct device *dev,
814     - struct device_attribute *attr, char *buf)
815     -{
816     - return sprintf(buf, "Mitigation: __user pointer sanitization\n");
817     -}
818     -
819     -ssize_t cpu_show_spectre_v2(struct device *dev,
820     - struct device_attribute *attr, char *buf)
821     -{
822     - if (IS_ENABLED(CC_USING_EXPOLINE) && !nospec_disable)
823     - return sprintf(buf, "Mitigation: execute trampolines\n");
824     - if (__test_facility(82, S390_lowcore.alt_stfle_fac_list))
825     - return sprintf(buf, "Mitigation: limited branch prediction.\n");
826     - return sprintf(buf, "Vulnerable\n");
827     -}
828     -#endif
829     -
830     #ifdef CONFIG_EXPOLINE
831    
832     int nospec_disable = IS_ENABLED(CONFIG_EXPOLINE_OFF);
833     @@ -112,7 +94,6 @@ static void __init_or_module __nospec_revert(s32 *start, s32 *end)
834     s32 *epo;
835    
836     /* Second part of the instruction replace is always a nop */
837     - memcpy(insnbuf + 2, (char[]) { 0x47, 0x00, 0x00, 0x00 }, 4);
838     for (epo = start; epo < end; epo++) {
839     instr = (u8 *) epo + *epo;
840     if (instr[0] == 0xc0 && (instr[1] & 0x0f) == 0x04)
841     @@ -133,18 +114,34 @@ static void __init_or_module __nospec_revert(s32 *start, s32 *end)
842     br = thunk + (*(int *)(thunk + 2)) * 2;
843     else
844     continue;
845     - if (br[0] != 0x07 || (br[1] & 0xf0) != 0xf0)
846     + /* Check for unconditional branch 0x07f? or 0x47f???? */
847     + if ((br[0] & 0xbf) != 0x07 || (br[1] & 0xf0) != 0xf0)
848     continue;
849     +
850     + memcpy(insnbuf + 2, (char[]) { 0x47, 0x00, 0x07, 0x00 }, 4);
851     switch (type) {
852     case BRCL_EXPOLINE:
853     - /* brcl to thunk, replace with br + nop */
854     insnbuf[0] = br[0];
855     insnbuf[1] = (instr[1] & 0xf0) | (br[1] & 0x0f);
856     + if (br[0] == 0x47) {
857     + /* brcl to b, replace with bc + nopr */
858     + insnbuf[2] = br[2];
859     + insnbuf[3] = br[3];
860     + } else {
861     + /* brcl to br, replace with bcr + nop */
862     + }
863     break;
864     case BRASL_EXPOLINE:
865     - /* brasl to thunk, replace with basr + nop */
866     - insnbuf[0] = 0x0d;
867     insnbuf[1] = (instr[1] & 0xf0) | (br[1] & 0x0f);
868     + if (br[0] == 0x47) {
869     + /* brasl to b, replace with bas + nopr */
870     + insnbuf[0] = 0x4d;
871     + insnbuf[2] = br[2];
872     + insnbuf[3] = br[3];
873     + } else {
874     + /* brasl to br, replace with basr + nop */
875     + insnbuf[0] = 0x0d;
876     + }
877     break;
878     }
879    
880     diff --git a/arch/s390/kernel/nospec-sysfs.c b/arch/s390/kernel/nospec-sysfs.c
881     new file mode 100644
882     index 000000000000..8affad5f18cb
883     --- /dev/null
884     +++ b/arch/s390/kernel/nospec-sysfs.c
885     @@ -0,0 +1,21 @@
886     +// SPDX-License-Identifier: GPL-2.0
887     +#include <linux/device.h>
888     +#include <linux/cpu.h>
889     +#include <asm/facility.h>
890     +#include <asm/nospec-branch.h>
891     +
892     +ssize_t cpu_show_spectre_v1(struct device *dev,
893     + struct device_attribute *attr, char *buf)
894     +{
895     + return sprintf(buf, "Mitigation: __user pointer sanitization\n");
896     +}
897     +
898     +ssize_t cpu_show_spectre_v2(struct device *dev,
899     + struct device_attribute *attr, char *buf)
900     +{
901     + if (IS_ENABLED(CC_USING_EXPOLINE) && !nospec_disable)
902     + return sprintf(buf, "Mitigation: execute trampolines\n");
903     + if (__test_facility(82, S390_lowcore.alt_stfle_fac_list))
904     + return sprintf(buf, "Mitigation: limited branch prediction\n");
905     + return sprintf(buf, "Vulnerable\n");
906     +}
907     diff --git a/arch/s390/kernel/reipl.S b/arch/s390/kernel/reipl.S
908     index a40ebd1d29d0..8e954c102639 100644
909     --- a/arch/s390/kernel/reipl.S
910     +++ b/arch/s390/kernel/reipl.S
911     @@ -7,8 +7,11 @@
912    
913     #include <linux/linkage.h>
914     #include <asm/asm-offsets.h>
915     +#include <asm/nospec-insn.h>
916     #include <asm/sigp.h>
917    
918     + GEN_BR_THUNK %r9
919     +
920     #
921     # Issue "store status" for the current CPU to its prefix page
922     # and call passed function afterwards
923     @@ -67,9 +70,9 @@ ENTRY(store_status)
924     st %r4,0(%r1)
925     st %r5,4(%r1)
926     stg %r2,8(%r1)
927     - lgr %r1,%r2
928     + lgr %r9,%r2
929     lgr %r2,%r3
930     - br %r1
931     + BR_EX %r9
932    
933     .section .bss
934     .align 8
935     diff --git a/arch/s390/kernel/swsusp.S b/arch/s390/kernel/swsusp.S
936     index e99187149f17..a049a7b9d6e8 100644
937     --- a/arch/s390/kernel/swsusp.S
938     +++ b/arch/s390/kernel/swsusp.S
939     @@ -13,6 +13,7 @@
940     #include <asm/ptrace.h>
941     #include <asm/thread_info.h>
942     #include <asm/asm-offsets.h>
943     +#include <asm/nospec-insn.h>
944     #include <asm/sigp.h>
945    
946     /*
947     @@ -24,6 +25,8 @@
948     * (see below) in the resume process.
949     * This function runs with disabled interrupts.
950     */
951     + GEN_BR_THUNK %r14
952     +
953     .section .text
954     ENTRY(swsusp_arch_suspend)
955     stmg %r6,%r15,__SF_GPRS(%r15)
956     @@ -103,7 +106,7 @@ ENTRY(swsusp_arch_suspend)
957     spx 0x318(%r1)
958     lmg %r6,%r15,STACK_FRAME_OVERHEAD + __SF_GPRS(%r15)
959     lghi %r2,0
960     - br %r14
961     + BR_EX %r14
962    
963     /*
964     * Restore saved memory image to correct place and restore register context.
965     @@ -197,11 +200,10 @@ pgm_check_entry:
966     larl %r15,init_thread_union
967     ahi %r15,1<<(PAGE_SHIFT+THREAD_SIZE_ORDER)
968     larl %r2,.Lpanic_string
969     - larl %r3,sclp_early_printk
970     lghi %r1,0
971     sam31
972     sigp %r1,%r0,SIGP_SET_ARCHITECTURE
973     - basr %r14,%r3
974     + brasl %r14,sclp_early_printk
975     larl %r3,.Ldisabled_wait_31
976     lpsw 0(%r3)
977     4:
978     @@ -267,7 +269,7 @@ restore_registers:
979     /* Return 0 */
980     lmg %r6,%r15,STACK_FRAME_OVERHEAD + __SF_GPRS(%r15)
981     lghi %r2,0
982     - br %r14
983     + BR_EX %r14
984    
985     .section .data..nosave,"aw",@progbits
986     .align 8
987     diff --git a/arch/s390/lib/mem.S b/arch/s390/lib/mem.S
988     index d66751397e72..e1fa974ac500 100644
989     --- a/arch/s390/lib/mem.S
990     +++ b/arch/s390/lib/mem.S
991     @@ -7,6 +7,9 @@
992    
993     #include <linux/linkage.h>
994     #include <asm/export.h>
995     +#include <asm/nospec-insn.h>
996     +
997     + GEN_BR_THUNK %r14
998    
999     /*
1000     * void *memmove(void *dest, const void *src, size_t n)
1001     @@ -33,14 +36,14 @@ ENTRY(memmove)
1002     .Lmemmove_forward_remainder:
1003     larl %r5,.Lmemmove_mvc
1004     ex %r4,0(%r5)
1005     - br %r14
1006     + BR_EX %r14
1007     .Lmemmove_reverse:
1008     ic %r0,0(%r4,%r3)
1009     stc %r0,0(%r4,%r1)
1010     brctg %r4,.Lmemmove_reverse
1011     ic %r0,0(%r4,%r3)
1012     stc %r0,0(%r4,%r1)
1013     - br %r14
1014     + BR_EX %r14
1015     .Lmemmove_mvc:
1016     mvc 0(1,%r1),0(%r3)
1017     EXPORT_SYMBOL(memmove)
1018     @@ -77,7 +80,7 @@ ENTRY(memset)
1019     .Lmemset_clear_remainder:
1020     larl %r3,.Lmemset_xc
1021     ex %r4,0(%r3)
1022     - br %r14
1023     + BR_EX %r14
1024     .Lmemset_fill:
1025     stc %r3,0(%r2)
1026     cghi %r4,1
1027     @@ -94,7 +97,7 @@ ENTRY(memset)
1028     .Lmemset_fill_remainder:
1029     larl %r3,.Lmemset_mvc
1030     ex %r4,0(%r3)
1031     - br %r14
1032     + BR_EX %r14
1033     .Lmemset_xc:
1034     xc 0(1,%r1),0(%r1)
1035     .Lmemset_mvc:
1036     @@ -117,7 +120,7 @@ ENTRY(memcpy)
1037     .Lmemcpy_remainder:
1038     larl %r5,.Lmemcpy_mvc
1039     ex %r4,0(%r5)
1040     - br %r14
1041     + BR_EX %r14
1042     .Lmemcpy_loop:
1043     mvc 0(256,%r1),0(%r3)
1044     la %r1,256(%r1)
1045     diff --git a/arch/s390/net/bpf_jit.S b/arch/s390/net/bpf_jit.S
1046     index 25bb4643c4f4..9f794869c1b0 100644
1047     --- a/arch/s390/net/bpf_jit.S
1048     +++ b/arch/s390/net/bpf_jit.S
1049     @@ -9,6 +9,7 @@
1050     */
1051    
1052     #include <linux/linkage.h>
1053     +#include <asm/nospec-insn.h>
1054     #include "bpf_jit.h"
1055    
1056     /*
1057     @@ -54,7 +55,7 @@ ENTRY(sk_load_##NAME##_pos); \
1058     clg %r3,STK_OFF_HLEN(%r15); /* Offset + SIZE > hlen? */ \
1059     jh sk_load_##NAME##_slow; \
1060     LOAD %r14,-SIZE(%r3,%r12); /* Get data from skb */ \
1061     - b OFF_OK(%r6); /* Return */ \
1062     + B_EX OFF_OK,%r6; /* Return */ \
1063     \
1064     sk_load_##NAME##_slow:; \
1065     lgr %r2,%r7; /* Arg1 = skb pointer */ \
1066     @@ -64,11 +65,14 @@ sk_load_##NAME##_slow:; \
1067     brasl %r14,skb_copy_bits; /* Get data from skb */ \
1068     LOAD %r14,STK_OFF_TMP(%r15); /* Load from temp bufffer */ \
1069     ltgr %r2,%r2; /* Set cc to (%r2 != 0) */ \
1070     - br %r6; /* Return */
1071     + BR_EX %r6; /* Return */
1072    
1073     sk_load_common(word, 4, llgf) /* r14 = *(u32 *) (skb->data+offset) */
1074     sk_load_common(half, 2, llgh) /* r14 = *(u16 *) (skb->data+offset) */
1075    
1076     + GEN_BR_THUNK %r6
1077     + GEN_B_THUNK OFF_OK,%r6
1078     +
1079     /*
1080     * Load 1 byte from SKB (optimized version)
1081     */
1082     @@ -80,7 +84,7 @@ ENTRY(sk_load_byte_pos)
1083     clg %r3,STK_OFF_HLEN(%r15) # Offset >= hlen?
1084     jnl sk_load_byte_slow
1085     llgc %r14,0(%r3,%r12) # Get byte from skb
1086     - b OFF_OK(%r6) # Return OK
1087     + B_EX OFF_OK,%r6 # Return OK
1088    
1089     sk_load_byte_slow:
1090     lgr %r2,%r7 # Arg1 = skb pointer
1091     @@ -90,7 +94,7 @@ sk_load_byte_slow:
1092     brasl %r14,skb_copy_bits # Get data from skb
1093     llgc %r14,STK_OFF_TMP(%r15) # Load result from temp buffer
1094     ltgr %r2,%r2 # Set cc to (%r2 != 0)
1095     - br %r6 # Return cc
1096     + BR_EX %r6 # Return cc
1097    
1098     #define sk_negative_common(NAME, SIZE, LOAD) \
1099     sk_load_##NAME##_slow_neg:; \
1100     @@ -104,7 +108,7 @@ sk_load_##NAME##_slow_neg:; \
1101     jz bpf_error; \
1102     LOAD %r14,0(%r2); /* Get data from pointer */ \
1103     xr %r3,%r3; /* Set cc to zero */ \
1104     - br %r6; /* Return cc */
1105     + BR_EX %r6; /* Return cc */
1106    
1107     sk_negative_common(word, 4, llgf)
1108     sk_negative_common(half, 2, llgh)
1109     @@ -113,4 +117,4 @@ sk_negative_common(byte, 1, llgc)
1110     bpf_error:
1111     # force a return 0 from jit handler
1112     ltgr %r15,%r15 # Set condition code
1113     - br %r6
1114     + BR_EX %r6
1115     diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c
1116     index 33e2785f6842..11cd151733d4 100644
1117     --- a/arch/s390/net/bpf_jit_comp.c
1118     +++ b/arch/s390/net/bpf_jit_comp.c
1119     @@ -25,6 +25,8 @@
1120     #include <linux/bpf.h>
1121     #include <asm/cacheflush.h>
1122     #include <asm/dis.h>
1123     +#include <asm/facility.h>
1124     +#include <asm/nospec-branch.h>
1125     #include <asm/set_memory.h>
1126     #include "bpf_jit.h"
1127    
1128     @@ -43,6 +45,8 @@ struct bpf_jit {
1129     int base_ip; /* Base address for literal pool */
1130     int ret0_ip; /* Address of return 0 */
1131     int exit_ip; /* Address of exit */
1132     + int r1_thunk_ip; /* Address of expoline thunk for 'br %r1' */
1133     + int r14_thunk_ip; /* Address of expoline thunk for 'br %r14' */
1134     int tail_call_start; /* Tail call start offset */
1135     int labels[1]; /* Labels for local jumps */
1136     };
1137     @@ -252,6 +256,19 @@ static inline void reg_set_seen(struct bpf_jit *jit, u32 b1)
1138     REG_SET_SEEN(b2); \
1139     })
1140    
1141     +#define EMIT6_PCREL_RILB(op, b, target) \
1142     +({ \
1143     + int rel = (target - jit->prg) / 2; \
1144     + _EMIT6(op | reg_high(b) << 16 | rel >> 16, rel & 0xffff); \
1145     + REG_SET_SEEN(b); \
1146     +})
1147     +
1148     +#define EMIT6_PCREL_RIL(op, target) \
1149     +({ \
1150     + int rel = (target - jit->prg) / 2; \
1151     + _EMIT6(op | rel >> 16, rel & 0xffff); \
1152     +})
1153     +
1154     #define _EMIT6_IMM(op, imm) \
1155     ({ \
1156     unsigned int __imm = (imm); \
1157     @@ -471,8 +488,45 @@ static void bpf_jit_epilogue(struct bpf_jit *jit)
1158     EMIT4(0xb9040000, REG_2, BPF_REG_0);
1159     /* Restore registers */
1160     save_restore_regs(jit, REGS_RESTORE);
1161     + if (IS_ENABLED(CC_USING_EXPOLINE) && !nospec_disable) {
1162     + jit->r14_thunk_ip = jit->prg;
1163     + /* Generate __s390_indirect_jump_r14 thunk */
1164     + if (test_facility(35)) {
1165     + /* exrl %r0,.+10 */
1166     + EMIT6_PCREL_RIL(0xc6000000, jit->prg + 10);
1167     + } else {
1168     + /* larl %r1,.+14 */
1169     + EMIT6_PCREL_RILB(0xc0000000, REG_1, jit->prg + 14);
1170     + /* ex 0,0(%r1) */
1171     + EMIT4_DISP(0x44000000, REG_0, REG_1, 0);
1172     + }
1173     + /* j . */
1174     + EMIT4_PCREL(0xa7f40000, 0);
1175     + }
1176     /* br %r14 */
1177     _EMIT2(0x07fe);
1178     +
1179     + if (IS_ENABLED(CC_USING_EXPOLINE) && !nospec_disable &&
1180     + (jit->seen & SEEN_FUNC)) {
1181     + jit->r1_thunk_ip = jit->prg;
1182     + /* Generate __s390_indirect_jump_r1 thunk */
1183     + if (test_facility(35)) {
1184     + /* exrl %r0,.+10 */
1185     + EMIT6_PCREL_RIL(0xc6000000, jit->prg + 10);
1186     + /* j . */
1187     + EMIT4_PCREL(0xa7f40000, 0);
1188     + /* br %r1 */
1189     + _EMIT2(0x07f1);
1190     + } else {
1191     + /* larl %r1,.+14 */
1192     + EMIT6_PCREL_RILB(0xc0000000, REG_1, jit->prg + 14);
1193     + /* ex 0,S390_lowcore.br_r1_tampoline */
1194     + EMIT4_DISP(0x44000000, REG_0, REG_0,
1195     + offsetof(struct lowcore, br_r1_trampoline));
1196     + /* j . */
1197     + EMIT4_PCREL(0xa7f40000, 0);
1198     + }
1199     + }
1200     }
1201    
1202     /*
1203     @@ -978,8 +1032,13 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i
1204     /* lg %w1,<d(imm)>(%l) */
1205     EMIT6_DISP_LH(0xe3000000, 0x0004, REG_W1, REG_0, REG_L,
1206     EMIT_CONST_U64(func));
1207     - /* basr %r14,%w1 */
1208     - EMIT2(0x0d00, REG_14, REG_W1);
1209     + if (IS_ENABLED(CC_USING_EXPOLINE) && !nospec_disable) {
1210     + /* brasl %r14,__s390_indirect_jump_r1 */
1211     + EMIT6_PCREL_RILB(0xc0050000, REG_14, jit->r1_thunk_ip);
1212     + } else {
1213     + /* basr %r14,%w1 */
1214     + EMIT2(0x0d00, REG_14, REG_W1);
1215     + }
1216     /* lgr %b0,%r2: load return value into %b0 */
1217     EMIT4(0xb9040000, BPF_REG_0, REG_2);
1218     if ((jit->seen & SEEN_SKB) &&
1219     diff --git a/arch/sparc/kernel/vio.c b/arch/sparc/kernel/vio.c
1220     index 1a0fa10cb6b7..32bae68e34c1 100644
1221     --- a/arch/sparc/kernel/vio.c
1222     +++ b/arch/sparc/kernel/vio.c
1223     @@ -403,7 +403,7 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
1224     if (err) {
1225     printk(KERN_ERR "VIO: Could not register device %s, err=%d\n",
1226     dev_name(&vdev->dev), err);
1227     - kfree(vdev);
1228     + put_device(&vdev->dev);
1229     return NULL;
1230     }
1231     if (vdev->dp)
1232     diff --git a/arch/x86/kernel/machine_kexec_32.c b/arch/x86/kernel/machine_kexec_32.c
1233     index edfede768688..5167f3f74136 100644
1234     --- a/arch/x86/kernel/machine_kexec_32.c
1235     +++ b/arch/x86/kernel/machine_kexec_32.c
1236     @@ -57,12 +57,17 @@ static void load_segments(void)
1237     static void machine_kexec_free_page_tables(struct kimage *image)
1238     {
1239     free_page((unsigned long)image->arch.pgd);
1240     + image->arch.pgd = NULL;
1241     #ifdef CONFIG_X86_PAE
1242     free_page((unsigned long)image->arch.pmd0);
1243     + image->arch.pmd0 = NULL;
1244     free_page((unsigned long)image->arch.pmd1);
1245     + image->arch.pmd1 = NULL;
1246     #endif
1247     free_page((unsigned long)image->arch.pte0);
1248     + image->arch.pte0 = NULL;
1249     free_page((unsigned long)image->arch.pte1);
1250     + image->arch.pte1 = NULL;
1251     }
1252    
1253     static int machine_kexec_alloc_page_tables(struct kimage *image)
1254     @@ -79,7 +84,6 @@ static int machine_kexec_alloc_page_tables(struct kimage *image)
1255     !image->arch.pmd0 || !image->arch.pmd1 ||
1256     #endif
1257     !image->arch.pte0 || !image->arch.pte1) {
1258     - machine_kexec_free_page_tables(image);
1259     return -ENOMEM;
1260     }
1261     return 0;
1262     diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c
1263     index 3b7427aa7d85..5bce2a88e8a3 100644
1264     --- a/arch/x86/kernel/machine_kexec_64.c
1265     +++ b/arch/x86/kernel/machine_kexec_64.c
1266     @@ -38,9 +38,13 @@ static struct kexec_file_ops *kexec_file_loaders[] = {
1267     static void free_transition_pgtable(struct kimage *image)
1268     {
1269     free_page((unsigned long)image->arch.p4d);
1270     + image->arch.p4d = NULL;
1271     free_page((unsigned long)image->arch.pud);
1272     + image->arch.pud = NULL;
1273     free_page((unsigned long)image->arch.pmd);
1274     + image->arch.pmd = NULL;
1275     free_page((unsigned long)image->arch.pte);
1276     + image->arch.pte = NULL;
1277     }
1278    
1279     static int init_transition_pgtable(struct kimage *image, pgd_t *pgd)
1280     @@ -90,7 +94,6 @@ static int init_transition_pgtable(struct kimage *image, pgd_t *pgd)
1281     set_pte(pte, pfn_pte(paddr >> PAGE_SHIFT, PAGE_KERNEL_EXEC_NOENC));
1282     return 0;
1283     err:
1284     - free_transition_pgtable(image);
1285     return result;
1286     }
1287    
1288     diff --git a/drivers/block/loop.c b/drivers/block/loop.c
1289     index 754852156622..1a87f87c88d0 100644
1290     --- a/drivers/block/loop.c
1291     +++ b/drivers/block/loop.c
1292     @@ -1166,21 +1166,17 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
1293     static int
1294     loop_get_status(struct loop_device *lo, struct loop_info64 *info)
1295     {
1296     - struct file *file = lo->lo_backing_file;
1297     + struct file *file;
1298     struct kstat stat;
1299     - int error;
1300     + int ret;
1301    
1302     - if (lo->lo_state != Lo_bound)
1303     + if (lo->lo_state != Lo_bound) {
1304     + mutex_unlock(&lo->lo_ctl_mutex);
1305     return -ENXIO;
1306     - error = vfs_getattr(&file->f_path, &stat,
1307     - STATX_INO, AT_STATX_SYNC_AS_STAT);
1308     - if (error)
1309     - return error;
1310     + }
1311     +
1312     memset(info, 0, sizeof(*info));
1313     info->lo_number = lo->lo_number;
1314     - info->lo_device = huge_encode_dev(stat.dev);
1315     - info->lo_inode = stat.ino;
1316     - info->lo_rdevice = huge_encode_dev(lo->lo_device ? stat.rdev : stat.dev);
1317     info->lo_offset = lo->lo_offset;
1318     info->lo_sizelimit = lo->lo_sizelimit;
1319     info->lo_flags = lo->lo_flags;
1320     @@ -1193,7 +1189,19 @@ loop_get_status(struct loop_device *lo, struct loop_info64 *info)
1321     memcpy(info->lo_encrypt_key, lo->lo_encrypt_key,
1322     lo->lo_encrypt_key_size);
1323     }
1324     - return 0;
1325     +
1326     + /* Drop lo_ctl_mutex while we call into the filesystem. */
1327     + file = get_file(lo->lo_backing_file);
1328     + mutex_unlock(&lo->lo_ctl_mutex);
1329     + ret = vfs_getattr(&file->f_path, &stat, STATX_INO,
1330     + AT_STATX_SYNC_AS_STAT);
1331     + if (!ret) {
1332     + info->lo_device = huge_encode_dev(stat.dev);
1333     + info->lo_inode = stat.ino;
1334     + info->lo_rdevice = huge_encode_dev(stat.rdev);
1335     + }
1336     + fput(file);
1337     + return ret;
1338     }
1339    
1340     static void
1341     @@ -1274,12 +1282,13 @@ static int
1342     loop_get_status_old(struct loop_device *lo, struct loop_info __user *arg) {
1343     struct loop_info info;
1344     struct loop_info64 info64;
1345     - int err = 0;
1346     + int err;
1347    
1348     - if (!arg)
1349     - err = -EINVAL;
1350     - if (!err)
1351     - err = loop_get_status(lo, &info64);
1352     + if (!arg) {
1353     + mutex_unlock(&lo->lo_ctl_mutex);
1354     + return -EINVAL;
1355     + }
1356     + err = loop_get_status(lo, &info64);
1357     if (!err)
1358     err = loop_info64_to_old(&info64, &info);
1359     if (!err && copy_to_user(arg, &info, sizeof(info)))
1360     @@ -1291,12 +1300,13 @@ loop_get_status_old(struct loop_device *lo, struct loop_info __user *arg) {
1361     static int
1362     loop_get_status64(struct loop_device *lo, struct loop_info64 __user *arg) {
1363     struct loop_info64 info64;
1364     - int err = 0;
1365     + int err;
1366    
1367     - if (!arg)
1368     - err = -EINVAL;
1369     - if (!err)
1370     - err = loop_get_status(lo, &info64);
1371     + if (!arg) {
1372     + mutex_unlock(&lo->lo_ctl_mutex);
1373     + return -EINVAL;
1374     + }
1375     + err = loop_get_status(lo, &info64);
1376     if (!err && copy_to_user(arg, &info64, sizeof(info64)))
1377     err = -EFAULT;
1378    
1379     @@ -1373,7 +1383,8 @@ static int lo_ioctl(struct block_device *bdev, fmode_t mode,
1380     break;
1381     case LOOP_GET_STATUS:
1382     err = loop_get_status_old(lo, (struct loop_info __user *) arg);
1383     - break;
1384     + /* loop_get_status() unlocks lo_ctl_mutex */
1385     + goto out_unlocked;
1386     case LOOP_SET_STATUS64:
1387     err = -EPERM;
1388     if ((mode & FMODE_WRITE) || capable(CAP_SYS_ADMIN))
1389     @@ -1382,7 +1393,8 @@ static int lo_ioctl(struct block_device *bdev, fmode_t mode,
1390     break;
1391     case LOOP_GET_STATUS64:
1392     err = loop_get_status64(lo, (struct loop_info64 __user *) arg);
1393     - break;
1394     + /* loop_get_status() unlocks lo_ctl_mutex */
1395     + goto out_unlocked;
1396     case LOOP_SET_CAPACITY:
1397     err = -EPERM;
1398     if ((mode & FMODE_WRITE) || capable(CAP_SYS_ADMIN))
1399     @@ -1515,12 +1527,13 @@ loop_get_status_compat(struct loop_device *lo,
1400     struct compat_loop_info __user *arg)
1401     {
1402     struct loop_info64 info64;
1403     - int err = 0;
1404     + int err;
1405    
1406     - if (!arg)
1407     - err = -EINVAL;
1408     - if (!err)
1409     - err = loop_get_status(lo, &info64);
1410     + if (!arg) {
1411     + mutex_unlock(&lo->lo_ctl_mutex);
1412     + return -EINVAL;
1413     + }
1414     + err = loop_get_status(lo, &info64);
1415     if (!err)
1416     err = loop_info64_to_compat(&info64, arg);
1417     return err;
1418     @@ -1543,7 +1556,7 @@ static int lo_compat_ioctl(struct block_device *bdev, fmode_t mode,
1419     mutex_lock(&lo->lo_ctl_mutex);
1420     err = loop_get_status_compat(
1421     lo, (struct compat_loop_info __user *) arg);
1422     - mutex_unlock(&lo->lo_ctl_mutex);
1423     + /* loop_get_status() unlocks lo_ctl_mutex */
1424     break;
1425     case LOOP_SET_CAPACITY:
1426     case LOOP_CLR_FD:
1427     diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
1428     index 7fcc4d7f4909..86d7975afaeb 100644
1429     --- a/drivers/bluetooth/btusb.c
1430     +++ b/drivers/bluetooth/btusb.c
1431     @@ -370,6 +370,9 @@ static const struct usb_device_id blacklist_table[] = {
1432     { USB_DEVICE(0x13d3, 0x3459), .driver_info = BTUSB_REALTEK },
1433     { USB_DEVICE(0x13d3, 0x3494), .driver_info = BTUSB_REALTEK },
1434    
1435     + /* Additional Realtek 8723BU Bluetooth devices */
1436     + { USB_DEVICE(0x7392, 0xa611), .driver_info = BTUSB_REALTEK },
1437     +
1438     /* Additional Realtek 8821AE Bluetooth devices */
1439     { USB_DEVICE(0x0b05, 0x17dc), .driver_info = BTUSB_REALTEK },
1440     { USB_DEVICE(0x13d3, 0x3414), .driver_info = BTUSB_REALTEK },
1441     @@ -377,6 +380,9 @@ static const struct usb_device_id blacklist_table[] = {
1442     { USB_DEVICE(0x13d3, 0x3461), .driver_info = BTUSB_REALTEK },
1443     { USB_DEVICE(0x13d3, 0x3462), .driver_info = BTUSB_REALTEK },
1444    
1445     + /* Additional Realtek 8822BE Bluetooth devices */
1446     + { USB_DEVICE(0x0b05, 0x185c), .driver_info = BTUSB_REALTEK },
1447     +
1448     /* Silicon Wave based devices */
1449     { USB_DEVICE(0x0c10, 0x0000), .driver_info = BTUSB_SWAVE },
1450    
1451     diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
1452     index 60c7fde37d23..4e21f5bcd954 100644
1453     --- a/drivers/clk/clk.c
1454     +++ b/drivers/clk/clk.c
1455     @@ -1931,6 +1931,9 @@ static int clk_core_get_phase(struct clk_core *core)
1456     int ret;
1457    
1458     clk_prepare_lock();
1459     + /* Always try to update cached phase if possible */
1460     + if (core->ops->get_phase)
1461     + core->phase = core->ops->get_phase(core->hw);
1462     ret = core->phase;
1463     clk_prepare_unlock();
1464    
1465     diff --git a/drivers/clk/hisilicon/crg-hi3516cv300.c b/drivers/clk/hisilicon/crg-hi3516cv300.c
1466     index 2007123832bb..53450b651e4c 100644
1467     --- a/drivers/clk/hisilicon/crg-hi3516cv300.c
1468     +++ b/drivers/clk/hisilicon/crg-hi3516cv300.c
1469     @@ -204,7 +204,7 @@ static const struct hisi_crg_funcs hi3516cv300_crg_funcs = {
1470     /* hi3516CV300 sysctrl CRG */
1471     #define HI3516CV300_SYSCTRL_NR_CLKS 16
1472    
1473     -static const char *wdt_mux_p[] __initconst = { "3m", "apb" };
1474     +static const char *const wdt_mux_p[] __initconst = { "3m", "apb" };
1475     static u32 wdt_mux_table[] = {0, 1};
1476    
1477     static const struct hisi_mux_clock hi3516cv300_sysctrl_mux_clks[] = {
1478     diff --git a/drivers/clk/rockchip/clk-mmc-phase.c b/drivers/clk/rockchip/clk-mmc-phase.c
1479     index 077fcdc7908b..fe7d9ed1d436 100644
1480     --- a/drivers/clk/rockchip/clk-mmc-phase.c
1481     +++ b/drivers/clk/rockchip/clk-mmc-phase.c
1482     @@ -58,6 +58,12 @@ static int rockchip_mmc_get_phase(struct clk_hw *hw)
1483     u16 degrees;
1484     u32 delay_num = 0;
1485    
1486     + /* See the comment for rockchip_mmc_set_phase below */
1487     + if (!rate) {
1488     + pr_err("%s: invalid clk rate\n", __func__);
1489     + return -EINVAL;
1490     + }
1491     +
1492     raw_value = readl(mmc_clock->reg) >> (mmc_clock->shift);
1493    
1494     degrees = (raw_value & ROCKCHIP_MMC_DEGREE_MASK) * 90;
1495     @@ -84,6 +90,23 @@ static int rockchip_mmc_set_phase(struct clk_hw *hw, int degrees)
1496     u32 raw_value;
1497     u32 delay;
1498    
1499     + /*
1500     + * The below calculation is based on the output clock from
1501     + * MMC host to the card, which expects the phase clock inherits
1502     + * the clock rate from its parent, namely the output clock
1503     + * provider of MMC host. However, things may go wrong if
1504     + * (1) It is orphan.
1505     + * (2) It is assigned to the wrong parent.
1506     + *
1507     + * This check help debug the case (1), which seems to be the
1508     + * most likely problem we often face and which makes it difficult
1509     + * for people to debug unstable mmc tuning results.
1510     + */
1511     + if (!rate) {
1512     + pr_err("%s: invalid clk rate\n", __func__);
1513     + return -EINVAL;
1514     + }
1515     +
1516     nineties = degrees / 90;
1517     remainder = (degrees % 90);
1518    
1519     diff --git a/drivers/clk/rockchip/clk-rk3228.c b/drivers/clk/rockchip/clk-rk3228.c
1520     index 11e7f2d1c054..7af48184b022 100644
1521     --- a/drivers/clk/rockchip/clk-rk3228.c
1522     +++ b/drivers/clk/rockchip/clk-rk3228.c
1523     @@ -387,7 +387,7 @@ static struct rockchip_clk_branch rk3228_clk_branches[] __initdata = {
1524     RK2928_CLKSEL_CON(23), 5, 2, MFLAGS, 0, 6, DFLAGS,
1525     RK2928_CLKGATE_CON(2), 15, GFLAGS),
1526    
1527     - COMPOSITE(SCLK_SDMMC, "sclk_sdmmc0", mux_mmc_src_p, 0,
1528     + COMPOSITE(SCLK_SDMMC, "sclk_sdmmc", mux_mmc_src_p, 0,
1529     RK2928_CLKSEL_CON(11), 8, 2, MFLAGS, 0, 8, DFLAGS,
1530     RK2928_CLKGATE_CON(2), 11, GFLAGS),
1531    
1532     diff --git a/drivers/clk/samsung/clk-exynos3250.c b/drivers/clk/samsung/clk-exynos3250.c
1533     index 1b81e283f605..ed36728424a2 100644
1534     --- a/drivers/clk/samsung/clk-exynos3250.c
1535     +++ b/drivers/clk/samsung/clk-exynos3250.c
1536     @@ -698,7 +698,7 @@ static const struct samsung_pll_rate_table exynos3250_epll_rates[] __initconst =
1537     PLL_36XX_RATE(144000000, 96, 2, 3, 0),
1538     PLL_36XX_RATE( 96000000, 128, 2, 4, 0),
1539     PLL_36XX_RATE( 84000000, 112, 2, 4, 0),
1540     - PLL_36XX_RATE( 80000004, 106, 2, 4, 43691),
1541     + PLL_36XX_RATE( 80000003, 106, 2, 4, 43691),
1542     PLL_36XX_RATE( 73728000, 98, 2, 4, 19923),
1543     PLL_36XX_RATE( 67737598, 270, 3, 5, 62285),
1544     PLL_36XX_RATE( 65535999, 174, 2, 5, 49982),
1545     @@ -734,7 +734,7 @@ static const struct samsung_pll_rate_table exynos3250_vpll_rates[] __initconst =
1546     PLL_36XX_RATE(148352005, 98, 2, 3, 59070),
1547     PLL_36XX_RATE(108000000, 144, 2, 4, 0),
1548     PLL_36XX_RATE( 74250000, 99, 2, 4, 0),
1549     - PLL_36XX_RATE( 74176002, 98, 3, 4, 59070),
1550     + PLL_36XX_RATE( 74176002, 98, 2, 4, 59070),
1551     PLL_36XX_RATE( 54054000, 216, 3, 5, 14156),
1552     PLL_36XX_RATE( 54000000, 144, 2, 5, 0),
1553     { /* sentinel */ }
1554     diff --git a/drivers/clk/samsung/clk-exynos5250.c b/drivers/clk/samsung/clk-exynos5250.c
1555     index 27a227d6620c..6a0cb8a515e8 100644
1556     --- a/drivers/clk/samsung/clk-exynos5250.c
1557     +++ b/drivers/clk/samsung/clk-exynos5250.c
1558     @@ -711,13 +711,13 @@ static const struct samsung_pll_rate_table epll_24mhz_tbl[] __initconst = {
1559     /* sorted in descending order */
1560     /* PLL_36XX_RATE(rate, m, p, s, k) */
1561     PLL_36XX_RATE(192000000, 64, 2, 2, 0),
1562     - PLL_36XX_RATE(180633600, 90, 3, 2, 20762),
1563     + PLL_36XX_RATE(180633605, 90, 3, 2, 20762),
1564     PLL_36XX_RATE(180000000, 90, 3, 2, 0),
1565     PLL_36XX_RATE(73728000, 98, 2, 4, 19923),
1566     - PLL_36XX_RATE(67737600, 90, 2, 4, 20762),
1567     + PLL_36XX_RATE(67737602, 90, 2, 4, 20762),
1568     PLL_36XX_RATE(49152000, 98, 3, 4, 19923),
1569     - PLL_36XX_RATE(45158400, 90, 3, 4, 20762),
1570     - PLL_36XX_RATE(32768000, 131, 3, 5, 4719),
1571     + PLL_36XX_RATE(45158401, 90, 3, 4, 20762),
1572     + PLL_36XX_RATE(32768001, 131, 3, 5, 4719),
1573     { },
1574     };
1575    
1576     diff --git a/drivers/clk/samsung/clk-exynos5260.c b/drivers/clk/samsung/clk-exynos5260.c
1577     index fd1d9bfc151b..8eae1752d700 100644
1578     --- a/drivers/clk/samsung/clk-exynos5260.c
1579     +++ b/drivers/clk/samsung/clk-exynos5260.c
1580     @@ -65,7 +65,7 @@ static const struct samsung_pll_rate_table pll2650_24mhz_tbl[] __initconst = {
1581     PLL_36XX_RATE(480000000, 160, 2, 2, 0),
1582     PLL_36XX_RATE(432000000, 144, 2, 2, 0),
1583     PLL_36XX_RATE(400000000, 200, 3, 2, 0),
1584     - PLL_36XX_RATE(394073130, 459, 7, 2, 49282),
1585     + PLL_36XX_RATE(394073128, 459, 7, 2, 49282),
1586     PLL_36XX_RATE(333000000, 111, 2, 2, 0),
1587     PLL_36XX_RATE(300000000, 100, 2, 2, 0),
1588     PLL_36XX_RATE(266000000, 266, 3, 3, 0),
1589     diff --git a/drivers/clk/samsung/clk-exynos5433.c b/drivers/clk/samsung/clk-exynos5433.c
1590     index 11343a597093..1d2265f9ee97 100644
1591     --- a/drivers/clk/samsung/clk-exynos5433.c
1592     +++ b/drivers/clk/samsung/clk-exynos5433.c
1593     @@ -725,7 +725,7 @@ static const struct samsung_pll_rate_table exynos5433_pll_rates[] __initconst =
1594     PLL_35XX_RATE(800000000U, 400, 6, 1),
1595     PLL_35XX_RATE(733000000U, 733, 12, 1),
1596     PLL_35XX_RATE(700000000U, 175, 3, 1),
1597     - PLL_35XX_RATE(667000000U, 222, 4, 1),
1598     + PLL_35XX_RATE(666000000U, 222, 4, 1),
1599     PLL_35XX_RATE(633000000U, 211, 4, 1),
1600     PLL_35XX_RATE(600000000U, 500, 5, 2),
1601     PLL_35XX_RATE(552000000U, 460, 5, 2),
1602     @@ -753,12 +753,12 @@ static const struct samsung_pll_rate_table exynos5433_pll_rates[] __initconst =
1603     /* AUD_PLL */
1604     static const struct samsung_pll_rate_table exynos5433_aud_pll_rates[] __initconst = {
1605     PLL_36XX_RATE(400000000U, 200, 3, 2, 0),
1606     - PLL_36XX_RATE(393216000U, 197, 3, 2, -25690),
1607     + PLL_36XX_RATE(393216003U, 197, 3, 2, -25690),
1608     PLL_36XX_RATE(384000000U, 128, 2, 2, 0),
1609     - PLL_36XX_RATE(368640000U, 246, 4, 2, -15729),
1610     - PLL_36XX_RATE(361507200U, 181, 3, 2, -16148),
1611     - PLL_36XX_RATE(338688000U, 113, 2, 2, -6816),
1612     - PLL_36XX_RATE(294912000U, 98, 1, 3, 19923),
1613     + PLL_36XX_RATE(368639991U, 246, 4, 2, -15729),
1614     + PLL_36XX_RATE(361507202U, 181, 3, 2, -16148),
1615     + PLL_36XX_RATE(338687988U, 113, 2, 2, -6816),
1616     + PLL_36XX_RATE(294912002U, 98, 1, 3, 19923),
1617     PLL_36XX_RATE(288000000U, 96, 1, 3, 0),
1618     PLL_36XX_RATE(252000000U, 84, 1, 3, 0),
1619     { /* sentinel */ }
1620     diff --git a/drivers/clk/samsung/clk-exynos7.c b/drivers/clk/samsung/clk-exynos7.c
1621     index 5931a4140c3d..bbfa57b4e017 100644
1622     --- a/drivers/clk/samsung/clk-exynos7.c
1623     +++ b/drivers/clk/samsung/clk-exynos7.c
1624     @@ -140,7 +140,7 @@ static const struct samsung_div_clock topc_div_clks[] __initconst = {
1625     };
1626    
1627     static const struct samsung_pll_rate_table pll1460x_24mhz_tbl[] __initconst = {
1628     - PLL_36XX_RATE(491520000, 20, 1, 0, 31457),
1629     + PLL_36XX_RATE(491519897, 20, 1, 0, 31457),
1630     {},
1631     };
1632    
1633     diff --git a/drivers/clk/samsung/clk-s3c2410.c b/drivers/clk/samsung/clk-s3c2410.c
1634     index e0650c33863b..d8e58a659467 100644
1635     --- a/drivers/clk/samsung/clk-s3c2410.c
1636     +++ b/drivers/clk/samsung/clk-s3c2410.c
1637     @@ -168,7 +168,7 @@ static struct samsung_pll_rate_table pll_s3c2410_12mhz_tbl[] __initdata = {
1638     PLL_35XX_RATE(226000000, 105, 1, 1),
1639     PLL_35XX_RATE(210000000, 132, 2, 1),
1640     /* 2410 common */
1641     - PLL_35XX_RATE(203000000, 161, 3, 1),
1642     + PLL_35XX_RATE(202800000, 161, 3, 1),
1643     PLL_35XX_RATE(192000000, 88, 1, 1),
1644     PLL_35XX_RATE(186000000, 85, 1, 1),
1645     PLL_35XX_RATE(180000000, 82, 1, 1),
1646     @@ -178,18 +178,18 @@ static struct samsung_pll_rate_table pll_s3c2410_12mhz_tbl[] __initdata = {
1647     PLL_35XX_RATE(147000000, 90, 2, 1),
1648     PLL_35XX_RATE(135000000, 82, 2, 1),
1649     PLL_35XX_RATE(124000000, 116, 1, 2),
1650     - PLL_35XX_RATE(118000000, 150, 2, 2),
1651     + PLL_35XX_RATE(118500000, 150, 2, 2),
1652     PLL_35XX_RATE(113000000, 105, 1, 2),
1653     - PLL_35XX_RATE(101000000, 127, 2, 2),
1654     + PLL_35XX_RATE(101250000, 127, 2, 2),
1655     PLL_35XX_RATE(90000000, 112, 2, 2),
1656     - PLL_35XX_RATE(85000000, 105, 2, 2),
1657     + PLL_35XX_RATE(84750000, 105, 2, 2),
1658     PLL_35XX_RATE(79000000, 71, 1, 2),
1659     - PLL_35XX_RATE(68000000, 82, 2, 2),
1660     - PLL_35XX_RATE(56000000, 142, 2, 3),
1661     + PLL_35XX_RATE(67500000, 82, 2, 2),
1662     + PLL_35XX_RATE(56250000, 142, 2, 3),
1663     PLL_35XX_RATE(48000000, 120, 2, 3),
1664     - PLL_35XX_RATE(51000000, 161, 3, 3),
1665     + PLL_35XX_RATE(50700000, 161, 3, 3),
1666     PLL_35XX_RATE(45000000, 82, 1, 3),
1667     - PLL_35XX_RATE(34000000, 82, 2, 3),
1668     + PLL_35XX_RATE(33750000, 82, 2, 3),
1669     { /* sentinel */ },
1670     };
1671    
1672     diff --git a/drivers/clk/tegra/clk-pll.c b/drivers/clk/tegra/clk-pll.c
1673     index 7c369e21c91c..830d1c87fa7c 100644
1674     --- a/drivers/clk/tegra/clk-pll.c
1675     +++ b/drivers/clk/tegra/clk-pll.c
1676     @@ -1151,6 +1151,8 @@ static const struct clk_ops tegra_clk_pllu_ops = {
1677     .enable = clk_pllu_enable,
1678     .disable = clk_pll_disable,
1679     .recalc_rate = clk_pll_recalc_rate,
1680     + .round_rate = clk_pll_round_rate,
1681     + .set_rate = clk_pll_set_rate,
1682     };
1683    
1684     static int _pll_fixed_mdiv(struct tegra_clk_pll_params *pll_params,
1685     diff --git a/drivers/crypto/atmel-aes.c b/drivers/crypto/atmel-aes.c
1686     index 29e20c37f3a6..11129b796dda 100644
1687     --- a/drivers/crypto/atmel-aes.c
1688     +++ b/drivers/crypto/atmel-aes.c
1689     @@ -2145,7 +2145,7 @@ static int atmel_aes_authenc_setkey(struct crypto_aead *tfm, const u8 *key,
1690    
1691     badkey:
1692     crypto_aead_set_flags(tfm, CRYPTO_TFM_RES_BAD_KEY_LEN);
1693     - memzero_explicit(&key, sizeof(keys));
1694     + memzero_explicit(&keys, sizeof(keys));
1695     return -EINVAL;
1696     }
1697    
1698     diff --git a/drivers/crypto/ccp/ccp-debugfs.c b/drivers/crypto/ccp/ccp-debugfs.c
1699     index 59d4ca4e72d8..1a734bd2070a 100644
1700     --- a/drivers/crypto/ccp/ccp-debugfs.c
1701     +++ b/drivers/crypto/ccp/ccp-debugfs.c
1702     @@ -278,7 +278,7 @@ static const struct file_operations ccp_debugfs_stats_ops = {
1703     };
1704    
1705     static struct dentry *ccp_debugfs_dir;
1706     -static DEFINE_RWLOCK(ccp_debugfs_lock);
1707     +static DEFINE_MUTEX(ccp_debugfs_lock);
1708    
1709     #define MAX_NAME_LEN 20
1710    
1711     @@ -290,16 +290,15 @@ void ccp5_debugfs_setup(struct ccp_device *ccp)
1712     struct dentry *debugfs_stats;
1713     struct dentry *debugfs_q_instance;
1714     struct dentry *debugfs_q_stats;
1715     - unsigned long flags;
1716     int i;
1717    
1718     if (!debugfs_initialized())
1719     return;
1720    
1721     - write_lock_irqsave(&ccp_debugfs_lock, flags);
1722     + mutex_lock(&ccp_debugfs_lock);
1723     if (!ccp_debugfs_dir)
1724     ccp_debugfs_dir = debugfs_create_dir(KBUILD_MODNAME, NULL);
1725     - write_unlock_irqrestore(&ccp_debugfs_lock, flags);
1726     + mutex_unlock(&ccp_debugfs_lock);
1727     if (!ccp_debugfs_dir)
1728     return;
1729    
1730     diff --git a/drivers/crypto/inside-secure/safexcel.c b/drivers/crypto/inside-secure/safexcel.c
1731     index d4c81cb73bee..3ee68ecde9ec 100644
1732     --- a/drivers/crypto/inside-secure/safexcel.c
1733     +++ b/drivers/crypto/inside-secure/safexcel.c
1734     @@ -462,6 +462,15 @@ void safexcel_dequeue(struct safexcel_crypto_priv *priv, int ring)
1735     if (backlog)
1736     backlog->complete(backlog, -EINPROGRESS);
1737    
1738     + /* In case the send() helper did not issue any command to push
1739     + * to the engine because the input data was cached, continue to
1740     + * dequeue other requests as this is valid and not an error.
1741     + */
1742     + if (!commands && !results) {
1743     + kfree(request);
1744     + continue;
1745     + }
1746     +
1747     spin_lock_bh(&priv->ring[ring].egress_lock);
1748     list_add_tail(&request->list, &priv->ring[ring].list);
1749     spin_unlock_bh(&priv->ring[ring].egress_lock);
1750     diff --git a/drivers/crypto/inside-secure/safexcel_cipher.c b/drivers/crypto/inside-secure/safexcel_cipher.c
1751     index fcc0a606d748..29cf7e00b574 100644
1752     --- a/drivers/crypto/inside-secure/safexcel_cipher.c
1753     +++ b/drivers/crypto/inside-secure/safexcel_cipher.c
1754     @@ -446,7 +446,7 @@ static int safexcel_cipher_exit_inv(struct crypto_tfm *tfm)
1755     if (!priv->ring[ring].need_dequeue)
1756     safexcel_dequeue(priv, ring);
1757    
1758     - wait_for_completion_interruptible(&result.completion);
1759     + wait_for_completion(&result.completion);
1760    
1761     if (result.error) {
1762     dev_warn(priv->dev,
1763     diff --git a/drivers/crypto/inside-secure/safexcel_hash.c b/drivers/crypto/inside-secure/safexcel_hash.c
1764     index d626aa485a76..69f29776591a 100644
1765     --- a/drivers/crypto/inside-secure/safexcel_hash.c
1766     +++ b/drivers/crypto/inside-secure/safexcel_hash.c
1767     @@ -185,7 +185,7 @@ static int safexcel_ahash_send_req(struct crypto_async_request *async, int ring,
1768     int i, queued, len, cache_len, extra, n_cdesc = 0, ret = 0;
1769    
1770     queued = len = req->len - req->processed;
1771     - if (queued < crypto_ahash_blocksize(ahash))
1772     + if (queued <= crypto_ahash_blocksize(ahash))
1773     cache_len = queued;
1774     else
1775     cache_len = queued - areq->nbytes;
1776     @@ -199,7 +199,7 @@ static int safexcel_ahash_send_req(struct crypto_async_request *async, int ring,
1777     /* If this is not the last request and the queued data
1778     * is a multiple of a block, cache the last one for now.
1779     */
1780     - extra = queued - crypto_ahash_blocksize(ahash);
1781     + extra = crypto_ahash_blocksize(ahash);
1782    
1783     if (extra) {
1784     sg_pcopy_to_buffer(areq->src, sg_nents(areq->src),
1785     @@ -494,7 +494,7 @@ static int safexcel_ahash_exit_inv(struct crypto_tfm *tfm)
1786     if (!priv->ring[ring].need_dequeue)
1787     safexcel_dequeue(priv, ring);
1788    
1789     - wait_for_completion_interruptible(&result.completion);
1790     + wait_for_completion(&result.completion);
1791    
1792     if (result.error) {
1793     dev_warn(priv->dev, "hash: completion error (%d)\n",
1794     @@ -819,7 +819,7 @@ static int safexcel_hmac_init_pad(struct ahash_request *areq,
1795     init_completion(&result.completion);
1796    
1797     ret = crypto_ahash_digest(areq);
1798     - if (ret == -EINPROGRESS) {
1799     + if (ret == -EINPROGRESS || ret == -EBUSY) {
1800     wait_for_completion_interruptible(&result.completion);
1801     ret = result.error;
1802     }
1803     diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-core.c b/drivers/crypto/sunxi-ss/sun4i-ss-core.c
1804     index 1547cbe13dc2..a81d89b3b7d8 100644
1805     --- a/drivers/crypto/sunxi-ss/sun4i-ss-core.c
1806     +++ b/drivers/crypto/sunxi-ss/sun4i-ss-core.c
1807     @@ -451,6 +451,7 @@ static struct platform_driver sun4i_ss_driver = {
1808    
1809     module_platform_driver(sun4i_ss_driver);
1810    
1811     +MODULE_ALIAS("platform:sun4i-ss");
1812     MODULE_DESCRIPTION("Allwinner Security System cryptographic accelerator");
1813     MODULE_LICENSE("GPL");
1814     MODULE_AUTHOR("Corentin LABBE <clabbe.montjoie@gmail.com>");
1815     diff --git a/drivers/media/dvb-core/dmxdev.c b/drivers/media/dvb-core/dmxdev.c
1816     index 18e4230865be..51009b2718a3 100644
1817     --- a/drivers/media/dvb-core/dmxdev.c
1818     +++ b/drivers/media/dvb-core/dmxdev.c
1819     @@ -1055,7 +1055,7 @@ static int dvb_demux_do_ioctl(struct file *file,
1820     break;
1821    
1822     default:
1823     - ret = -EINVAL;
1824     + ret = -ENOTTY;
1825     break;
1826     }
1827     mutex_unlock(&dmxdev->mutex);
1828     diff --git a/drivers/media/dvb-frontends/lgdt3306a.c b/drivers/media/dvb-frontends/lgdt3306a.c
1829     index c9b1eb38444e..fbb3b2f49d2d 100644
1830     --- a/drivers/media/dvb-frontends/lgdt3306a.c
1831     +++ b/drivers/media/dvb-frontends/lgdt3306a.c
1832     @@ -1767,7 +1767,13 @@ static void lgdt3306a_release(struct dvb_frontend *fe)
1833     struct lgdt3306a_state *state = fe->demodulator_priv;
1834    
1835     dbg_info("\n");
1836     - kfree(state);
1837     +
1838     + /*
1839     + * If state->muxc is not NULL, then we are an i2c device
1840     + * and lgdt3306a_remove will clean up state
1841     + */
1842     + if (!state->muxc)
1843     + kfree(state);
1844     }
1845    
1846     static const struct dvb_frontend_ops lgdt3306a_ops;
1847     @@ -2168,7 +2174,7 @@ static int lgdt3306a_probe(struct i2c_client *client,
1848     sizeof(struct lgdt3306a_config));
1849    
1850     config->i2c_addr = client->addr;
1851     - fe = lgdt3306a_attach(config, client->adapter);
1852     + fe = dvb_attach(lgdt3306a_attach, config, client->adapter);
1853     if (fe == NULL) {
1854     ret = -ENODEV;
1855     goto err_fe;
1856     diff --git a/drivers/media/i2c/adv748x/adv748x-hdmi.c b/drivers/media/i2c/adv748x/adv748x-hdmi.c
1857     index 4da4253553fc..10d229a4f088 100644
1858     --- a/drivers/media/i2c/adv748x/adv748x-hdmi.c
1859     +++ b/drivers/media/i2c/adv748x/adv748x-hdmi.c
1860     @@ -105,6 +105,9 @@ static void adv748x_hdmi_fill_format(struct adv748x_hdmi *hdmi,
1861    
1862     fmt->width = hdmi->timings.bt.width;
1863     fmt->height = hdmi->timings.bt.height;
1864     +
1865     + if (fmt->field == V4L2_FIELD_ALTERNATE)
1866     + fmt->height /= 2;
1867     }
1868    
1869     static void adv748x_fill_optional_dv_timings(struct v4l2_dv_timings *timings)
1870     diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c
1871     index d28845f7356f..a31fe18c71d6 100644
1872     --- a/drivers/media/i2c/ov5645.c
1873     +++ b/drivers/media/i2c/ov5645.c
1874     @@ -1131,13 +1131,14 @@ static int ov5645_probe(struct i2c_client *client,
1875    
1876     ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(endpoint),
1877     &ov5645->ep);
1878     +
1879     + of_node_put(endpoint);
1880     +
1881     if (ret < 0) {
1882     dev_err(dev, "parsing endpoint node failed\n");
1883     return ret;
1884     }
1885    
1886     - of_node_put(endpoint);
1887     -
1888     if (ov5645->ep.bus_type != V4L2_MBUS_CSI2) {
1889     dev_err(dev, "invalid bus type, must be CSI2\n");
1890     return -EINVAL;
1891     diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c
1892     index 7b79a7498751..698fa764999c 100644
1893     --- a/drivers/media/i2c/tvp5150.c
1894     +++ b/drivers/media/i2c/tvp5150.c
1895     @@ -506,80 +506,77 @@ static struct i2c_vbi_ram_value vbi_ram_default[] =
1896     /* FIXME: Current api doesn't handle all VBI types, those not
1897     yet supported are placed under #if 0 */
1898     #if 0
1899     - {0x010, /* Teletext, SECAM, WST System A */
1900     + [0] = {0x010, /* Teletext, SECAM, WST System A */
1901     {V4L2_SLICED_TELETEXT_SECAM,6,23,1},
1902     { 0xaa, 0xaa, 0xff, 0xff, 0xe7, 0x2e, 0x20, 0x26,
1903     0xe6, 0xb4, 0x0e, 0x00, 0x00, 0x00, 0x10, 0x00 }
1904     },
1905     #endif
1906     - {0x030, /* Teletext, PAL, WST System B */
1907     + [1] = {0x030, /* Teletext, PAL, WST System B */
1908     {V4L2_SLICED_TELETEXT_B,6,22,1},
1909     { 0xaa, 0xaa, 0xff, 0xff, 0x27, 0x2e, 0x20, 0x2b,
1910     0xa6, 0x72, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00 }
1911     },
1912     #if 0
1913     - {0x050, /* Teletext, PAL, WST System C */
1914     + [2] = {0x050, /* Teletext, PAL, WST System C */
1915     {V4L2_SLICED_TELETEXT_PAL_C,6,22,1},
1916     { 0xaa, 0xaa, 0xff, 0xff, 0xe7, 0x2e, 0x20, 0x22,
1917     0xa6, 0x98, 0x0d, 0x00, 0x00, 0x00, 0x10, 0x00 }
1918     },
1919     - {0x070, /* Teletext, NTSC, WST System B */
1920     + [3] = {0x070, /* Teletext, NTSC, WST System B */
1921     {V4L2_SLICED_TELETEXT_NTSC_B,10,21,1},
1922     { 0xaa, 0xaa, 0xff, 0xff, 0x27, 0x2e, 0x20, 0x23,
1923     0x69, 0x93, 0x0d, 0x00, 0x00, 0x00, 0x10, 0x00 }
1924     },
1925     - {0x090, /* Tetetext, NTSC NABTS System C */
1926     + [4] = {0x090, /* Tetetext, NTSC NABTS System C */
1927     {V4L2_SLICED_TELETEXT_NTSC_C,10,21,1},
1928     { 0xaa, 0xaa, 0xff, 0xff, 0xe7, 0x2e, 0x20, 0x22,
1929     0x69, 0x93, 0x0d, 0x00, 0x00, 0x00, 0x15, 0x00 }
1930     },
1931     - {0x0b0, /* Teletext, NTSC-J, NABTS System D */
1932     + [5] = {0x0b0, /* Teletext, NTSC-J, NABTS System D */
1933     {V4L2_SLICED_TELETEXT_NTSC_D,10,21,1},
1934     { 0xaa, 0xaa, 0xff, 0xff, 0xa7, 0x2e, 0x20, 0x23,
1935     0x69, 0x93, 0x0d, 0x00, 0x00, 0x00, 0x10, 0x00 }
1936     },
1937     - {0x0d0, /* Closed Caption, PAL/SECAM */
1938     + [6] = {0x0d0, /* Closed Caption, PAL/SECAM */
1939     {V4L2_SLICED_CAPTION_625,22,22,1},
1940     { 0xaa, 0x2a, 0xff, 0x3f, 0x04, 0x51, 0x6e, 0x02,
1941     0xa6, 0x7b, 0x09, 0x00, 0x00, 0x00, 0x27, 0x00 }
1942     },
1943     #endif
1944     - {0x0f0, /* Closed Caption, NTSC */
1945     + [7] = {0x0f0, /* Closed Caption, NTSC */
1946     {V4L2_SLICED_CAPTION_525,21,21,1},
1947     { 0xaa, 0x2a, 0xff, 0x3f, 0x04, 0x51, 0x6e, 0x02,
1948     0x69, 0x8c, 0x09, 0x00, 0x00, 0x00, 0x27, 0x00 }
1949     },
1950     - {0x110, /* Wide Screen Signal, PAL/SECAM */
1951     + [8] = {0x110, /* Wide Screen Signal, PAL/SECAM */
1952     {V4L2_SLICED_WSS_625,23,23,1},
1953     { 0x5b, 0x55, 0xc5, 0xff, 0x00, 0x71, 0x6e, 0x42,
1954     0xa6, 0xcd, 0x0f, 0x00, 0x00, 0x00, 0x3a, 0x00 }
1955     },
1956     #if 0
1957     - {0x130, /* Wide Screen Signal, NTSC C */
1958     + [9] = {0x130, /* Wide Screen Signal, NTSC C */
1959     {V4L2_SLICED_WSS_525,20,20,1},
1960     { 0x38, 0x00, 0x3f, 0x00, 0x00, 0x71, 0x6e, 0x43,
1961     0x69, 0x7c, 0x08, 0x00, 0x00, 0x00, 0x39, 0x00 }
1962     },
1963     - {0x150, /* Vertical Interval Timecode (VITC), PAL/SECAM */
1964     + [10] = {0x150, /* Vertical Interval Timecode (VITC), PAL/SECAM */
1965     {V4l2_SLICED_VITC_625,6,22,0},
1966     { 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x6d, 0x49,
1967     0xa6, 0x85, 0x08, 0x00, 0x00, 0x00, 0x4c, 0x00 }
1968     },
1969     - {0x170, /* Vertical Interval Timecode (VITC), NTSC */
1970     + [11] = {0x170, /* Vertical Interval Timecode (VITC), NTSC */
1971     {V4l2_SLICED_VITC_525,10,20,0},
1972     { 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x6d, 0x49,
1973     0x69, 0x94, 0x08, 0x00, 0x00, 0x00, 0x4c, 0x00 }
1974     },
1975     #endif
1976     - {0x190, /* Video Program System (VPS), PAL */
1977     + [12] = {0x190, /* Video Program System (VPS), PAL */
1978     {V4L2_SLICED_VPS,16,16,0},
1979     { 0xaa, 0xaa, 0xff, 0xff, 0xba, 0xce, 0x2b, 0x0d,
1980     0xa6, 0xda, 0x0b, 0x00, 0x00, 0x00, 0x60, 0x00 }
1981     },
1982     /* 0x1d0 User programmable */
1983     -
1984     - /* End of struct */
1985     - { (u16)-1 }
1986     };
1987    
1988     static int tvp5150_write_inittab(struct v4l2_subdev *sd,
1989     @@ -592,10 +589,10 @@ static int tvp5150_write_inittab(struct v4l2_subdev *sd,
1990     return 0;
1991     }
1992    
1993     -static int tvp5150_vdp_init(struct v4l2_subdev *sd,
1994     - const struct i2c_vbi_ram_value *regs)
1995     +static int tvp5150_vdp_init(struct v4l2_subdev *sd)
1996     {
1997     unsigned int i;
1998     + int j;
1999    
2000     /* Disable Full Field */
2001     tvp5150_write(sd, TVP5150_FULL_FIELD_ENA, 0);
2002     @@ -605,14 +602,17 @@ static int tvp5150_vdp_init(struct v4l2_subdev *sd,
2003     tvp5150_write(sd, i, 0xff);
2004    
2005     /* Load Ram Table */
2006     - while (regs->reg != (u16)-1) {
2007     + for (j = 0; j < ARRAY_SIZE(vbi_ram_default); j++) {
2008     + const struct i2c_vbi_ram_value *regs = &vbi_ram_default[j];
2009     +
2010     + if (!regs->type.vbi_type)
2011     + continue;
2012     +
2013     tvp5150_write(sd, TVP5150_CONF_RAM_ADDR_HIGH, regs->reg >> 8);
2014     tvp5150_write(sd, TVP5150_CONF_RAM_ADDR_LOW, regs->reg);
2015    
2016     for (i = 0; i < 16; i++)
2017     tvp5150_write(sd, TVP5150_VDP_CONF_RAM_DATA, regs->values[i]);
2018     -
2019     - regs++;
2020     }
2021     return 0;
2022     }
2023     @@ -621,19 +621,23 @@ static int tvp5150_vdp_init(struct v4l2_subdev *sd,
2024     static int tvp5150_g_sliced_vbi_cap(struct v4l2_subdev *sd,
2025     struct v4l2_sliced_vbi_cap *cap)
2026     {
2027     - const struct i2c_vbi_ram_value *regs = vbi_ram_default;
2028     - int line;
2029     + int line, i;
2030    
2031     dev_dbg_lvl(sd->dev, 1, debug, "g_sliced_vbi_cap\n");
2032     memset(cap, 0, sizeof *cap);
2033    
2034     - while (regs->reg != (u16)-1 ) {
2035     - for (line=regs->type.ini_line;line<=regs->type.end_line;line++) {
2036     + for (i = 0; i < ARRAY_SIZE(vbi_ram_default); i++) {
2037     + const struct i2c_vbi_ram_value *regs = &vbi_ram_default[i];
2038     +
2039     + if (!regs->type.vbi_type)
2040     + continue;
2041     +
2042     + for (line = regs->type.ini_line;
2043     + line <= regs->type.end_line;
2044     + line++) {
2045     cap->service_lines[0][line] |= regs->type.vbi_type;
2046     }
2047     cap->service_set |= regs->type.vbi_type;
2048     -
2049     - regs++;
2050     }
2051     return 0;
2052     }
2053     @@ -652,14 +656,13 @@ static int tvp5150_g_sliced_vbi_cap(struct v4l2_subdev *sd,
2054     * MSB = field2
2055     */
2056     static int tvp5150_set_vbi(struct v4l2_subdev *sd,
2057     - const struct i2c_vbi_ram_value *regs,
2058     unsigned int type,u8 flags, int line,
2059     const int fields)
2060     {
2061     struct tvp5150 *decoder = to_tvp5150(sd);
2062     v4l2_std_id std = decoder->norm;
2063     u8 reg;
2064     - int pos = 0;
2065     + int i, pos = 0;
2066    
2067     if (std == V4L2_STD_ALL) {
2068     dev_err(sd->dev, "VBI can't be configured without knowing number of lines\n");
2069     @@ -672,19 +675,19 @@ static int tvp5150_set_vbi(struct v4l2_subdev *sd,
2070     if (line < 6 || line > 27)
2071     return 0;
2072    
2073     - while (regs->reg != (u16)-1) {
2074     + for (i = 0; i < ARRAY_SIZE(vbi_ram_default); i++) {
2075     + const struct i2c_vbi_ram_value *regs = &vbi_ram_default[i];
2076     +
2077     + if (!regs->type.vbi_type)
2078     + continue;
2079     +
2080     if ((type & regs->type.vbi_type) &&
2081     (line >= regs->type.ini_line) &&
2082     (line <= regs->type.end_line))
2083     break;
2084     -
2085     - regs++;
2086     pos++;
2087     }
2088    
2089     - if (regs->reg == (u16)-1)
2090     - return 0;
2091     -
2092     type = pos | (flags & 0xf0);
2093     reg = ((line - 6) << 1) + TVP5150_LINE_MODE_INI;
2094    
2095     @@ -697,8 +700,7 @@ static int tvp5150_set_vbi(struct v4l2_subdev *sd,
2096     return type;
2097     }
2098    
2099     -static int tvp5150_get_vbi(struct v4l2_subdev *sd,
2100     - const struct i2c_vbi_ram_value *regs, int line)
2101     +static int tvp5150_get_vbi(struct v4l2_subdev *sd, int line)
2102     {
2103     struct tvp5150 *decoder = to_tvp5150(sd);
2104     v4l2_std_id std = decoder->norm;
2105     @@ -727,8 +729,8 @@ static int tvp5150_get_vbi(struct v4l2_subdev *sd,
2106     return 0;
2107     }
2108     pos = ret & 0x0f;
2109     - if (pos < 0x0f)
2110     - type |= regs[pos].type.vbi_type;
2111     + if (pos < ARRAY_SIZE(vbi_ram_default))
2112     + type |= vbi_ram_default[pos].type.vbi_type;
2113     }
2114    
2115     return type;
2116     @@ -789,7 +791,7 @@ static int tvp5150_reset(struct v4l2_subdev *sd, u32 val)
2117     tvp5150_write_inittab(sd, tvp5150_init_default);
2118    
2119     /* Initializes VDP registers */
2120     - tvp5150_vdp_init(sd, vbi_ram_default);
2121     + tvp5150_vdp_init(sd);
2122    
2123     /* Selects decoder input */
2124     tvp5150_selmux(sd);
2125     @@ -1122,8 +1124,8 @@ static int tvp5150_s_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_f
2126     for (i = 0; i <= 23; i++) {
2127     svbi->service_lines[1][i] = 0;
2128     svbi->service_lines[0][i] =
2129     - tvp5150_set_vbi(sd, vbi_ram_default,
2130     - svbi->service_lines[0][i], 0xf0, i, 3);
2131     + tvp5150_set_vbi(sd, svbi->service_lines[0][i],
2132     + 0xf0, i, 3);
2133     }
2134     /* Enables FIFO */
2135     tvp5150_write(sd, TVP5150_FIFO_OUT_CTRL, 1);
2136     @@ -1149,7 +1151,7 @@ static int tvp5150_g_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_f
2137    
2138     for (i = 0; i <= 23; i++) {
2139     svbi->service_lines[0][i] =
2140     - tvp5150_get_vbi(sd, vbi_ram_default, i);
2141     + tvp5150_get_vbi(sd, i);
2142     mask |= svbi->service_lines[0][i];
2143     }
2144     svbi->service_set = mask;
2145     diff --git a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c
2146     index 78a8836d03e4..6c0fd9438dd9 100644
2147     --- a/drivers/media/pci/cx23885/cx23885-cards.c
2148     +++ b/drivers/media/pci/cx23885/cx23885-cards.c
2149     @@ -2286,6 +2286,10 @@ void cx23885_card_setup(struct cx23885_dev *dev)
2150     &dev->i2c_bus[2].i2c_adap,
2151     "cx25840", 0x88 >> 1, NULL);
2152     if (dev->sd_cx25840) {
2153     + /* set host data for clk_freq configuration */
2154     + v4l2_set_subdev_hostdata(dev->sd_cx25840,
2155     + &dev->clk_freq);
2156     +
2157     dev->sd_cx25840->grp_id = CX23885_HW_AV_CORE;
2158     v4l2_subdev_call(dev->sd_cx25840, core, load_fw);
2159     }
2160     diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c
2161     index 8f63df1cb418..4612f26fcd6d 100644
2162     --- a/drivers/media/pci/cx23885/cx23885-core.c
2163     +++ b/drivers/media/pci/cx23885/cx23885-core.c
2164     @@ -873,6 +873,16 @@ static int cx23885_dev_setup(struct cx23885_dev *dev)
2165     if (cx23885_boards[dev->board].clk_freq > 0)
2166     dev->clk_freq = cx23885_boards[dev->board].clk_freq;
2167    
2168     + if (dev->board == CX23885_BOARD_HAUPPAUGE_IMPACTVCBE &&
2169     + dev->pci->subsystem_device == 0x7137) {
2170     + /* Hauppauge ImpactVCBe device ID 0x7137 is populated
2171     + * with an 888, and a 25Mhz crystal, instead of the
2172     + * usual third overtone 50Mhz. The default clock rate must
2173     + * be overridden so the cx25840 is properly configured
2174     + */
2175     + dev->clk_freq = 25000000;
2176     + }
2177     +
2178     dev->pci_bus = dev->pci->bus->number;
2179     dev->pci_slot = PCI_SLOT(dev->pci->devfn);
2180     cx23885_irq_add(dev, 0x001f00);
2181     diff --git a/drivers/media/pci/cx25821/cx25821-core.c b/drivers/media/pci/cx25821/cx25821-core.c
2182     index 04aa4a68a0ae..040c6c251d3a 100644
2183     --- a/drivers/media/pci/cx25821/cx25821-core.c
2184     +++ b/drivers/media/pci/cx25821/cx25821-core.c
2185     @@ -867,6 +867,10 @@ static int cx25821_dev_setup(struct cx25821_dev *dev)
2186     dev->nr = ++cx25821_devcount;
2187     sprintf(dev->name, "cx25821[%d]", dev->nr);
2188    
2189     + if (dev->nr >= ARRAY_SIZE(card)) {
2190     + CX25821_INFO("dev->nr >= %zd", ARRAY_SIZE(card));
2191     + return -ENODEV;
2192     + }
2193     if (dev->pci->device != 0x8210) {
2194     pr_info("%s(): Exiting. Incorrect Hardware device = 0x%02x\n",
2195     __func__, dev->pci->device);
2196     @@ -882,9 +886,6 @@ static int cx25821_dev_setup(struct cx25821_dev *dev)
2197     dev->channels[i].sram_channels = &cx25821_sram_channels[i];
2198     }
2199    
2200     - if (dev->nr > 1)
2201     - CX25821_INFO("dev->nr > 1!");
2202     -
2203     /* board config */
2204     dev->board = 1; /* card[dev->nr]; */
2205     dev->_max_num_decoders = MAX_DECODERS;
2206     diff --git a/drivers/media/platform/s3c-camif/camif-capture.c b/drivers/media/platform/s3c-camif/camif-capture.c
2207     index 25c7a7d42292..0f0324a14d51 100644
2208     --- a/drivers/media/platform/s3c-camif/camif-capture.c
2209     +++ b/drivers/media/platform/s3c-camif/camif-capture.c
2210     @@ -1256,16 +1256,17 @@ static void __camif_subdev_try_format(struct camif_dev *camif,
2211     {
2212     const struct s3c_camif_variant *variant = camif->variant;
2213     const struct vp_pix_limits *pix_lim;
2214     - int i = ARRAY_SIZE(camif_mbus_formats);
2215     + unsigned int i;
2216    
2217     /* FIXME: constraints against codec or preview path ? */
2218     pix_lim = &variant->vp_pix_limits[VP_CODEC];
2219    
2220     - while (i-- >= 0)
2221     + for (i = 0; i < ARRAY_SIZE(camif_mbus_formats); i++)
2222     if (camif_mbus_formats[i] == mf->code)
2223     break;
2224    
2225     - mf->code = camif_mbus_formats[i];
2226     + if (i == ARRAY_SIZE(camif_mbus_formats))
2227     + mf->code = camif_mbus_formats[0];
2228    
2229     if (pad == CAMIF_SD_PAD_SINK) {
2230     v4l_bound_align_image(&mf->width, 8, CAMIF_MAX_PIX_WIDTH,
2231     diff --git a/drivers/media/platform/vivid/vivid-ctrls.c b/drivers/media/platform/vivid/vivid-ctrls.c
2232     index 34731f71cc00..8ca9343b6730 100644
2233     --- a/drivers/media/platform/vivid/vivid-ctrls.c
2234     +++ b/drivers/media/platform/vivid/vivid-ctrls.c
2235     @@ -1191,6 +1191,7 @@ static int vivid_radio_rx_s_ctrl(struct v4l2_ctrl *ctrl)
2236     v4l2_ctrl_activate(dev->radio_rx_rds_ta, dev->radio_rx_rds_controls);
2237     v4l2_ctrl_activate(dev->radio_rx_rds_tp, dev->radio_rx_rds_controls);
2238     v4l2_ctrl_activate(dev->radio_rx_rds_ms, dev->radio_rx_rds_controls);
2239     + dev->radio_rx_dev.device_caps = dev->radio_rx_caps;
2240     break;
2241     case V4L2_CID_RDS_RECEPTION:
2242     dev->radio_rx_rds_enabled = ctrl->val;
2243     @@ -1265,6 +1266,7 @@ static int vivid_radio_tx_s_ctrl(struct v4l2_ctrl *ctrl)
2244     dev->radio_tx_caps &= ~V4L2_CAP_READWRITE;
2245     if (!dev->radio_tx_rds_controls)
2246     dev->radio_tx_caps |= V4L2_CAP_READWRITE;
2247     + dev->radio_tx_dev.device_caps = dev->radio_tx_caps;
2248     break;
2249     case V4L2_CID_RDS_TX_PTY:
2250     if (dev->radio_rx_rds_controls)
2251     diff --git a/drivers/media/platform/vsp1/vsp1_drm.c b/drivers/media/platform/vsp1/vsp1_drm.c
2252     index 4dfbeac8f42c..d3cd57f6ba52 100644
2253     --- a/drivers/media/platform/vsp1/vsp1_drm.c
2254     +++ b/drivers/media/platform/vsp1/vsp1_drm.c
2255     @@ -504,6 +504,15 @@ void vsp1_du_atomic_flush(struct device *dev, unsigned int pipe_index)
2256     struct vsp1_rwpf *rpf = vsp1->rpf[i];
2257     unsigned int j;
2258    
2259     + /*
2260     + * Make sure we don't accept more inputs than the hardware can
2261     + * handle. This is a temporary fix to avoid display stall, we
2262     + * need to instead allocate the BRU or BRS to display pipelines
2263     + * dynamically based on the number of planes they each use.
2264     + */
2265     + if (pipe->num_inputs >= pipe->bru->source_pad)
2266     + pipe->inputs[i] = NULL;
2267     +
2268     if (!pipe->inputs[i])
2269     continue;
2270    
2271     diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c
2272     index 4c57fd7929cb..11a59854a0a6 100644
2273     --- a/drivers/media/usb/em28xx/em28xx-cards.c
2274     +++ b/drivers/media/usb/em28xx/em28xx-cards.c
2275     @@ -508,8 +508,10 @@ static struct em28xx_reg_seq plex_px_bcud[] = {
2276     };
2277    
2278     /*
2279     - * 2040:0265 Hauppauge WinTV-dualHD DVB
2280     - * 2040:026d Hauppauge WinTV-dualHD ATSC/QAM
2281     + * 2040:0265 Hauppauge WinTV-dualHD DVB Isoc
2282     + * 2040:8265 Hauppauge WinTV-dualHD DVB Bulk
2283     + * 2040:026d Hauppauge WinTV-dualHD ATSC/QAM Isoc
2284     + * 2040:826d Hauppauge WinTV-dualHD ATSC/QAM Bulk
2285     * reg 0x80/0x84:
2286     * GPIO_0: Yellow LED tuner 1, 0=on, 1=off
2287     * GPIO_1: Green LED tuner 1, 0=on, 1=off
2288     @@ -2392,7 +2394,8 @@ struct em28xx_board em28xx_boards[] = {
2289     .has_dvb = 1,
2290     },
2291     /*
2292     - * 2040:0265 Hauppauge WinTV-dualHD (DVB version).
2293     + * 2040:0265 Hauppauge WinTV-dualHD (DVB version) Isoc.
2294     + * 2040:8265 Hauppauge WinTV-dualHD (DVB version) Bulk.
2295     * Empia EM28274, 2x Silicon Labs Si2168, 2x Silicon Labs Si2157
2296     */
2297     [EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB] = {
2298     @@ -2407,7 +2410,8 @@ struct em28xx_board em28xx_boards[] = {
2299     .leds = hauppauge_dualhd_leds,
2300     },
2301     /*
2302     - * 2040:026d Hauppauge WinTV-dualHD (model 01595 - ATSC/QAM).
2303     + * 2040:026d Hauppauge WinTV-dualHD (model 01595 - ATSC/QAM) Isoc.
2304     + * 2040:826d Hauppauge WinTV-dualHD (model 01595 - ATSC/QAM) Bulk.
2305     * Empia EM28274, 2x LG LGDT3306A, 2x Silicon Labs Si2157
2306     */
2307     [EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595] = {
2308     @@ -2548,8 +2552,12 @@ struct usb_device_id em28xx_id_table[] = {
2309     .driver_info = EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850 },
2310     { USB_DEVICE(0x2040, 0x0265),
2311     .driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB },
2312     + { USB_DEVICE(0x2040, 0x8265),
2313     + .driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB },
2314     { USB_DEVICE(0x2040, 0x026d),
2315     .driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595 },
2316     + { USB_DEVICE(0x2040, 0x826d),
2317     + .driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595 },
2318     { USB_DEVICE(0x0438, 0xb002),
2319     .driver_info = EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600 },
2320     { USB_DEVICE(0x2001, 0xf112),
2321     @@ -2610,7 +2618,11 @@ struct usb_device_id em28xx_id_table[] = {
2322     .driver_info = EM28178_BOARD_PCTV_461E },
2323     { USB_DEVICE(0x2013, 0x025f),
2324     .driver_info = EM28178_BOARD_PCTV_292E },
2325     - { USB_DEVICE(0x2040, 0x0264), /* Hauppauge WinTV-soloHD */
2326     + { USB_DEVICE(0x2040, 0x0264), /* Hauppauge WinTV-soloHD Isoc */
2327     + .driver_info = EM28178_BOARD_PCTV_292E },
2328     + { USB_DEVICE(0x2040, 0x8264), /* Hauppauge OEM Generic WinTV-soloHD Bulk */
2329     + .driver_info = EM28178_BOARD_PCTV_292E },
2330     + { USB_DEVICE(0x2040, 0x8268), /* Hauppauge Retail WinTV-soloHD Bulk */
2331     .driver_info = EM28178_BOARD_PCTV_292E },
2332     { USB_DEVICE(0x0413, 0x6f07),
2333     .driver_info = EM2861_BOARD_LEADTEK_VC100 },
2334     diff --git a/drivers/media/usb/em28xx/em28xx.h b/drivers/media/usb/em28xx/em28xx.h
2335     index 88084f24f033..094e83b6908d 100644
2336     --- a/drivers/media/usb/em28xx/em28xx.h
2337     +++ b/drivers/media/usb/em28xx/em28xx.h
2338     @@ -191,7 +191,7 @@
2339     USB 2.0 spec says bulk packet size is always 512 bytes
2340     */
2341     #define EM28XX_BULK_PACKET_MULTIPLIER 384
2342     -#define EM28XX_DVB_BULK_PACKET_MULTIPLIER 384
2343     +#define EM28XX_DVB_BULK_PACKET_MULTIPLIER 94
2344    
2345     #define EM28XX_INTERLACED_DEFAULT 1
2346    
2347     diff --git a/drivers/media/v4l2-core/videobuf2-vmalloc.c b/drivers/media/v4l2-core/videobuf2-vmalloc.c
2348     index 3a7c80cd1a17..359fb9804d16 100644
2349     --- a/drivers/media/v4l2-core/videobuf2-vmalloc.c
2350     +++ b/drivers/media/v4l2-core/videobuf2-vmalloc.c
2351     @@ -106,7 +106,7 @@ static void *vb2_vmalloc_get_userptr(struct device *dev, unsigned long vaddr,
2352     if (nums[i-1] + 1 != nums[i])
2353     goto fail_map;
2354     buf->vaddr = (__force void *)
2355     - ioremap_nocache(nums[0] << PAGE_SHIFT, size);
2356     + ioremap_nocache(__pfn_to_phys(nums[0]), size + offset);
2357     } else {
2358     buf->vaddr = vm_map_ram(frame_vector_pages(vec), n_pages, -1,
2359     PAGE_KERNEL);
2360     diff --git a/drivers/message/fusion/mptctl.c b/drivers/message/fusion/mptctl.c
2361     index 7b3b41368931..cf6ce9f600ca 100644
2362     --- a/drivers/message/fusion/mptctl.c
2363     +++ b/drivers/message/fusion/mptctl.c
2364     @@ -2698,6 +2698,8 @@ mptctl_hp_targetinfo(unsigned long arg)
2365     __FILE__, __LINE__, iocnum);
2366     return -ENODEV;
2367     }
2368     + if (karg.hdr.id >= MPT_MAX_FC_DEVICES)
2369     + return -EINVAL;
2370     dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_hp_targetinfo called.\n",
2371     ioc->name));
2372    
2373     diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
2374     index e61c99ef741d..c273a3ebb8e8 100644
2375     --- a/drivers/net/ethernet/mellanox/mlx4/main.c
2376     +++ b/drivers/net/ethernet/mellanox/mlx4/main.c
2377     @@ -3007,6 +3007,7 @@ static int mlx4_init_port_info(struct mlx4_dev *dev, int port)
2378     mlx4_err(dev, "Failed to create file for port %d\n", port);
2379     devlink_port_unregister(&info->devlink_port);
2380     info->port = -1;
2381     + return err;
2382     }
2383    
2384     sprintf(info->dev_mtu_name, "mlx4_port%d_mtu", port);
2385     @@ -3028,9 +3029,10 @@ static int mlx4_init_port_info(struct mlx4_dev *dev, int port)
2386     &info->port_attr);
2387     devlink_port_unregister(&info->devlink_port);
2388     info->port = -1;
2389     + return err;
2390     }
2391    
2392     - return err;
2393     + return 0;
2394     }
2395    
2396     static void mlx4_cleanup_port_info(struct mlx4_port_info *info)
2397     diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
2398     index 4f3afcf92a7c..01017dd88802 100644
2399     --- a/drivers/net/hyperv/hyperv_net.h
2400     +++ b/drivers/net/hyperv/hyperv_net.h
2401     @@ -179,7 +179,7 @@ struct rndis_device {
2402    
2403     u8 hw_mac_adr[ETH_ALEN];
2404     u8 rss_key[NETVSC_HASH_KEYLEN];
2405     - u16 ind_table[ITAB_NUM];
2406     + u16 rx_table[ITAB_NUM];
2407     };
2408    
2409    
2410     @@ -192,7 +192,7 @@ struct netvsc_device *netvsc_device_add(struct hv_device *device,
2411     const struct netvsc_device_info *info);
2412     int netvsc_alloc_recv_comp_ring(struct netvsc_device *net_device, u32 q_idx);
2413     void netvsc_device_remove(struct hv_device *device);
2414     -int netvsc_send(struct net_device_context *ndc,
2415     +int netvsc_send(struct net_device *net,
2416     struct hv_netvsc_packet *packet,
2417     struct rndis_message *rndis_msg,
2418     struct hv_page_buffer *page_buffer,
2419     @@ -208,7 +208,6 @@ void netvsc_channel_cb(void *context);
2420     int netvsc_poll(struct napi_struct *napi, int budget);
2421    
2422     void rndis_set_subchannel(struct work_struct *w);
2423     -bool rndis_filter_opened(const struct netvsc_device *nvdev);
2424     int rndis_filter_open(struct netvsc_device *nvdev);
2425     int rndis_filter_close(struct netvsc_device *nvdev);
2426     struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
2427     @@ -659,6 +658,10 @@ struct nvsp_message {
2428     #define NETVSC_RECEIVE_BUFFER_ID 0xcafe
2429     #define NETVSC_SEND_BUFFER_ID 0
2430    
2431     +#define NETVSC_SUPPORTED_HW_FEATURES (NETIF_F_RXCSUM | NETIF_F_IP_CSUM | \
2432     + NETIF_F_TSO | NETIF_F_IPV6_CSUM | \
2433     + NETIF_F_TSO6)
2434     +
2435     #define VRSS_SEND_TAB_SIZE 16 /* must be power of 2 */
2436     #define VRSS_CHANNEL_MAX 64
2437     #define VRSS_CHANNEL_DEFAULT 8
2438     @@ -734,7 +737,7 @@ struct net_device_context {
2439    
2440     u32 tx_checksum_mask;
2441    
2442     - u32 tx_send_table[VRSS_SEND_TAB_SIZE];
2443     + u32 tx_table[VRSS_SEND_TAB_SIZE];
2444    
2445     /* Ethtool settings */
2446     bool udp4_l4_hash;
2447     diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
2448     index a6bafcf55776..99be63eacaeb 100644
2449     --- a/drivers/net/hyperv/netvsc.c
2450     +++ b/drivers/net/hyperv/netvsc.c
2451     @@ -89,6 +89,11 @@ static void free_netvsc_device(struct rcu_head *head)
2452     = container_of(head, struct netvsc_device, rcu);
2453     int i;
2454    
2455     + kfree(nvdev->extension);
2456     + vfree(nvdev->recv_buf);
2457     + vfree(nvdev->send_buf);
2458     + kfree(nvdev->send_section_map);
2459     +
2460     for (i = 0; i < VRSS_CHANNEL_MAX; i++)
2461     vfree(nvdev->chan_table[i].mrc.slots);
2462    
2463     @@ -100,12 +105,11 @@ static void free_netvsc_device_rcu(struct netvsc_device *nvdev)
2464     call_rcu(&nvdev->rcu, free_netvsc_device);
2465     }
2466    
2467     -static void netvsc_destroy_buf(struct hv_device *device)
2468     +static void netvsc_revoke_recv_buf(struct hv_device *device,
2469     + struct netvsc_device *net_device)
2470     {
2471     - struct nvsp_message *revoke_packet;
2472     struct net_device *ndev = hv_get_drvdata(device);
2473     - struct net_device_context *ndc = netdev_priv(ndev);
2474     - struct netvsc_device *net_device = rtnl_dereference(ndc->nvdev);
2475     + struct nvsp_message *revoke_packet;
2476     int ret;
2477    
2478     /*
2479     @@ -147,28 +151,14 @@ static void netvsc_destroy_buf(struct hv_device *device)
2480     }
2481     net_device->recv_section_cnt = 0;
2482     }
2483     +}
2484    
2485     - /* Teardown the gpadl on the vsp end */
2486     - if (net_device->recv_buf_gpadl_handle) {
2487     - ret = vmbus_teardown_gpadl(device->channel,
2488     - net_device->recv_buf_gpadl_handle);
2489     -
2490     - /* If we failed here, we might as well return and have a leak
2491     - * rather than continue and a bugchk
2492     - */
2493     - if (ret != 0) {
2494     - netdev_err(ndev,
2495     - "unable to teardown receive buffer's gpadl\n");
2496     - return;
2497     - }
2498     - net_device->recv_buf_gpadl_handle = 0;
2499     - }
2500     -
2501     - if (net_device->recv_buf) {
2502     - /* Free up the receive buffer */
2503     - vfree(net_device->recv_buf);
2504     - net_device->recv_buf = NULL;
2505     - }
2506     +static void netvsc_revoke_send_buf(struct hv_device *device,
2507     + struct netvsc_device *net_device)
2508     +{
2509     + struct net_device *ndev = hv_get_drvdata(device);
2510     + struct nvsp_message *revoke_packet;
2511     + int ret;
2512    
2513     /* Deal with the send buffer we may have setup.
2514     * If we got a send section size, it means we received a
2515     @@ -210,7 +200,36 @@ static void netvsc_destroy_buf(struct hv_device *device)
2516     }
2517     net_device->send_section_cnt = 0;
2518     }
2519     - /* Teardown the gpadl on the vsp end */
2520     +}
2521     +
2522     +static void netvsc_teardown_recv_gpadl(struct hv_device *device,
2523     + struct netvsc_device *net_device)
2524     +{
2525     + struct net_device *ndev = hv_get_drvdata(device);
2526     + int ret;
2527     +
2528     + if (net_device->recv_buf_gpadl_handle) {
2529     + ret = vmbus_teardown_gpadl(device->channel,
2530     + net_device->recv_buf_gpadl_handle);
2531     +
2532     + /* If we failed here, we might as well return and have a leak
2533     + * rather than continue and a bugchk
2534     + */
2535     + if (ret != 0) {
2536     + netdev_err(ndev,
2537     + "unable to teardown receive buffer's gpadl\n");
2538     + return;
2539     + }
2540     + net_device->recv_buf_gpadl_handle = 0;
2541     + }
2542     +}
2543     +
2544     +static void netvsc_teardown_send_gpadl(struct hv_device *device,
2545     + struct netvsc_device *net_device)
2546     +{
2547     + struct net_device *ndev = hv_get_drvdata(device);
2548     + int ret;
2549     +
2550     if (net_device->send_buf_gpadl_handle) {
2551     ret = vmbus_teardown_gpadl(device->channel,
2552     net_device->send_buf_gpadl_handle);
2553     @@ -225,12 +244,6 @@ static void netvsc_destroy_buf(struct hv_device *device)
2554     }
2555     net_device->send_buf_gpadl_handle = 0;
2556     }
2557     - if (net_device->send_buf) {
2558     - /* Free up the send buffer */
2559     - vfree(net_device->send_buf);
2560     - net_device->send_buf = NULL;
2561     - }
2562     - kfree(net_device->send_section_map);
2563     }
2564    
2565     int netvsc_alloc_recv_comp_ring(struct netvsc_device *net_device, u32 q_idx)
2566     @@ -425,7 +438,10 @@ static int netvsc_init_buf(struct hv_device *device,
2567     goto exit;
2568    
2569     cleanup:
2570     - netvsc_destroy_buf(device);
2571     + netvsc_revoke_recv_buf(device, net_device);
2572     + netvsc_revoke_send_buf(device, net_device);
2573     + netvsc_teardown_recv_gpadl(device, net_device);
2574     + netvsc_teardown_send_gpadl(device, net_device);
2575    
2576     exit:
2577     return ret;
2578     @@ -544,11 +560,6 @@ static int netvsc_connect_vsp(struct hv_device *device,
2579     return ret;
2580     }
2581    
2582     -static void netvsc_disconnect_vsp(struct hv_device *device)
2583     -{
2584     - netvsc_destroy_buf(device);
2585     -}
2586     -
2587     /*
2588     * netvsc_device_remove - Callback when the root bus device is removed
2589     */
2590     @@ -560,12 +571,24 @@ void netvsc_device_remove(struct hv_device *device)
2591     = rtnl_dereference(net_device_ctx->nvdev);
2592     int i;
2593    
2594     - cancel_work_sync(&net_device->subchan_work);
2595     + /*
2596     + * Revoke receive buffer. If host is pre-Win2016 then tear down
2597     + * receive buffer GPADL. Do the same for send buffer.
2598     + */
2599     + netvsc_revoke_recv_buf(device, net_device);
2600     + if (vmbus_proto_version < VERSION_WIN10)
2601     + netvsc_teardown_recv_gpadl(device, net_device);
2602    
2603     - netvsc_disconnect_vsp(device);
2604     + netvsc_revoke_send_buf(device, net_device);
2605     + if (vmbus_proto_version < VERSION_WIN10)
2606     + netvsc_teardown_send_gpadl(device, net_device);
2607    
2608     RCU_INIT_POINTER(net_device_ctx->nvdev, NULL);
2609    
2610     + /* And disassociate NAPI context from device */
2611     + for (i = 0; i < net_device->num_chn; i++)
2612     + netif_napi_del(&net_device->chan_table[i].napi);
2613     +
2614     /*
2615     * At this point, no one should be accessing net_device
2616     * except in here
2617     @@ -575,9 +598,14 @@ void netvsc_device_remove(struct hv_device *device)
2618     /* Now, we can close the channel safely */
2619     vmbus_close(device->channel);
2620    
2621     - /* And dissassociate NAPI context from device */
2622     - for (i = 0; i < net_device->num_chn; i++)
2623     - netif_napi_del(&net_device->chan_table[i].napi);
2624     + /*
2625     + * If host is Win2016 or higher then we do the GPADL tear down
2626     + * here after VMBus is closed.
2627     + */
2628     + if (vmbus_proto_version >= VERSION_WIN10) {
2629     + netvsc_teardown_recv_gpadl(device, net_device);
2630     + netvsc_teardown_send_gpadl(device, net_device);
2631     + }
2632    
2633     /* Release all resources */
2634     free_netvsc_device_rcu(net_device);
2635     @@ -643,13 +671,18 @@ static void netvsc_send_tx_complete(struct netvsc_device *net_device,
2636     queue_sends =
2637     atomic_dec_return(&net_device->chan_table[q_idx].queue_sends);
2638    
2639     - if (net_device->destroy && queue_sends == 0)
2640     - wake_up(&net_device->wait_drain);
2641     + if (unlikely(net_device->destroy)) {
2642     + if (queue_sends == 0)
2643     + wake_up(&net_device->wait_drain);
2644     + } else {
2645     + struct netdev_queue *txq = netdev_get_tx_queue(ndev, q_idx);
2646    
2647     - if (netif_tx_queue_stopped(netdev_get_tx_queue(ndev, q_idx)) &&
2648     - (hv_ringbuf_avail_percent(&channel->outbound) > RING_AVAIL_PERCENT_HIWATER ||
2649     - queue_sends < 1))
2650     - netif_tx_wake_queue(netdev_get_tx_queue(ndev, q_idx));
2651     + if (netif_tx_queue_stopped(txq) &&
2652     + (hv_ringbuf_avail_percent(&channel->outbound) > RING_AVAIL_PERCENT_HIWATER ||
2653     + queue_sends < 1)) {
2654     + netif_tx_wake_queue(txq);
2655     + }
2656     + }
2657     }
2658    
2659     static void netvsc_send_completion(struct netvsc_device *net_device,
2660     @@ -697,13 +730,13 @@ static u32 netvsc_get_next_send_section(struct netvsc_device *net_device)
2661     return NETVSC_INVALID_INDEX;
2662     }
2663    
2664     -static u32 netvsc_copy_to_send_buf(struct netvsc_device *net_device,
2665     - unsigned int section_index,
2666     - u32 pend_size,
2667     - struct hv_netvsc_packet *packet,
2668     - struct rndis_message *rndis_msg,
2669     - struct hv_page_buffer *pb,
2670     - struct sk_buff *skb)
2671     +static void netvsc_copy_to_send_buf(struct netvsc_device *net_device,
2672     + unsigned int section_index,
2673     + u32 pend_size,
2674     + struct hv_netvsc_packet *packet,
2675     + struct rndis_message *rndis_msg,
2676     + struct hv_page_buffer *pb,
2677     + bool xmit_more)
2678     {
2679     char *start = net_device->send_buf;
2680     char *dest = start + (section_index * net_device->send_section_size)
2681     @@ -716,7 +749,8 @@ static u32 netvsc_copy_to_send_buf(struct netvsc_device *net_device,
2682     packet->page_buf_cnt;
2683    
2684     /* Add padding */
2685     - if (skb->xmit_more && remain && !packet->cp_partial) {
2686     + remain = packet->total_data_buflen & (net_device->pkt_align - 1);
2687     + if (xmit_more && remain) {
2688     padding = net_device->pkt_align - remain;
2689     rndis_msg->msg_len += padding;
2690     packet->total_data_buflen += padding;
2691     @@ -736,8 +770,6 @@ static u32 netvsc_copy_to_send_buf(struct netvsc_device *net_device,
2692     memset(dest, 0, padding);
2693     msg_size += padding;
2694     }
2695     -
2696     - return msg_size;
2697     }
2698    
2699     static inline int netvsc_send_pkt(
2700     @@ -825,12 +857,13 @@ static inline void move_pkt_msd(struct hv_netvsc_packet **msd_send,
2701     }
2702    
2703     /* RCU already held by caller */
2704     -int netvsc_send(struct net_device_context *ndev_ctx,
2705     +int netvsc_send(struct net_device *ndev,
2706     struct hv_netvsc_packet *packet,
2707     struct rndis_message *rndis_msg,
2708     struct hv_page_buffer *pb,
2709     struct sk_buff *skb)
2710     {
2711     + struct net_device_context *ndev_ctx = netdev_priv(ndev);
2712     struct netvsc_device *net_device
2713     = rcu_dereference_bh(ndev_ctx->nvdev);
2714     struct hv_device *device = ndev_ctx->device_ctx;
2715     @@ -841,20 +874,12 @@ int netvsc_send(struct net_device_context *ndev_ctx,
2716     struct multi_send_data *msdp;
2717     struct hv_netvsc_packet *msd_send = NULL, *cur_send = NULL;
2718     struct sk_buff *msd_skb = NULL;
2719     - bool try_batch;
2720     - bool xmit_more = (skb != NULL) ? skb->xmit_more : false;
2721     + bool try_batch, xmit_more;
2722    
2723     /* If device is rescinded, return error and packet will get dropped. */
2724     if (unlikely(!net_device || net_device->destroy))
2725     return -ENODEV;
2726    
2727     - /* We may race with netvsc_connect_vsp()/netvsc_init_buf() and get
2728     - * here before the negotiation with the host is finished and
2729     - * send_section_map may not be allocated yet.
2730     - */
2731     - if (unlikely(!net_device->send_section_map))
2732     - return -EAGAIN;
2733     -
2734     nvchan = &net_device->chan_table[packet->q_idx];
2735     packet->send_buf_index = NETVSC_INVALID_INDEX;
2736     packet->cp_partial = false;
2737     @@ -862,10 +887,8 @@ int netvsc_send(struct net_device_context *ndev_ctx,
2738     /* Send control message directly without accessing msd (Multi-Send
2739     * Data) field which may be changed during data packet processing.
2740     */
2741     - if (!skb) {
2742     - cur_send = packet;
2743     - goto send_now;
2744     - }
2745     + if (!skb)
2746     + return netvsc_send_pkt(device, packet, net_device, pb, skb);
2747    
2748     /* batch packets in send buffer if possible */
2749     msdp = &nvchan->msd;
2750     @@ -893,10 +916,17 @@ int netvsc_send(struct net_device_context *ndev_ctx,
2751     }
2752     }
2753    
2754     + /* Keep aggregating only if stack says more data is coming
2755     + * and not doing mixed modes send and not flow blocked
2756     + */
2757     + xmit_more = skb->xmit_more &&
2758     + !packet->cp_partial &&
2759     + !netif_xmit_stopped(netdev_get_tx_queue(ndev, packet->q_idx));
2760     +
2761     if (section_index != NETVSC_INVALID_INDEX) {
2762     netvsc_copy_to_send_buf(net_device,
2763     section_index, msd_len,
2764     - packet, rndis_msg, pb, skb);
2765     + packet, rndis_msg, pb, xmit_more);
2766    
2767     packet->send_buf_index = section_index;
2768    
2769     @@ -916,7 +946,7 @@ int netvsc_send(struct net_device_context *ndev_ctx,
2770     if (msdp->skb)
2771     dev_consume_skb_any(msdp->skb);
2772    
2773     - if (xmit_more && !packet->cp_partial) {
2774     + if (xmit_more) {
2775     msdp->skb = skb;
2776     msdp->pkt = packet;
2777     msdp->count++;
2778     @@ -942,7 +972,6 @@ int netvsc_send(struct net_device_context *ndev_ctx,
2779     }
2780     }
2781    
2782     -send_now:
2783     if (cur_send)
2784     ret = netvsc_send_pkt(device, cur_send, net_device, pb, skb);
2785    
2786     @@ -1107,7 +1136,7 @@ static void netvsc_send_table(struct hv_device *hdev,
2787     nvmsg->msg.v5_msg.send_table.offset);
2788    
2789     for (i = 0; i < count; i++)
2790     - net_device_ctx->tx_send_table[i] = tab[i];
2791     + net_device_ctx->tx_table[i] = tab[i];
2792     }
2793    
2794     static void netvsc_send_vf(struct net_device_context *net_device_ctx,
2795     @@ -1206,9 +1235,10 @@ int netvsc_poll(struct napi_struct *napi, int budget)
2796     if (send_recv_completions(ndev, net_device, nvchan) == 0 &&
2797     work_done < budget &&
2798     napi_complete_done(napi, work_done) &&
2799     - hv_end_read(&channel->inbound)) {
2800     + hv_end_read(&channel->inbound) &&
2801     + napi_schedule_prep(napi)) {
2802     hv_begin_read(&channel->inbound);
2803     - napi_reschedule(napi);
2804     + __napi_schedule(napi);
2805     }
2806    
2807     /* Driver may overshoot since multiple packets per descriptor */
2808     @@ -1252,6 +1282,9 @@ struct netvsc_device *netvsc_device_add(struct hv_device *device,
2809     if (!net_device)
2810     return ERR_PTR(-ENOMEM);
2811    
2812     + for (i = 0; i < VRSS_SEND_TAB_SIZE; i++)
2813     + net_device_ctx->tx_table[i] = 0;
2814     +
2815     net_device->ring_size = ring_size;
2816    
2817     /* Because the device uses NAPI, all the interrupt batching and
2818     @@ -1286,7 +1319,6 @@ struct netvsc_device *netvsc_device_add(struct hv_device *device,
2819     net_device->chan_table);
2820    
2821     if (ret != 0) {
2822     - netif_napi_del(&net_device->chan_table[0].napi);
2823     netdev_err(ndev, "unable to open channel: %d\n", ret);
2824     goto cleanup;
2825     }
2826     @@ -1296,11 +1328,6 @@ struct netvsc_device *netvsc_device_add(struct hv_device *device,
2827    
2828     napi_enable(&net_device->chan_table[0].napi);
2829    
2830     - /* Writing nvdev pointer unlocks netvsc_send(), make sure chn_table is
2831     - * populated.
2832     - */
2833     - rcu_assign_pointer(net_device_ctx->nvdev, net_device);
2834     -
2835     /* Connect with the NetVsp */
2836     ret = netvsc_connect_vsp(device, net_device, device_info);
2837     if (ret != 0) {
2838     @@ -1309,6 +1336,11 @@ struct netvsc_device *netvsc_device_add(struct hv_device *device,
2839     goto close;
2840     }
2841    
2842     + /* Writing nvdev pointer unlocks netvsc_send(), make sure chn_table is
2843     + * populated.
2844     + */
2845     + rcu_assign_pointer(net_device_ctx->nvdev, net_device);
2846     +
2847     return net_device;
2848    
2849     close:
2850     @@ -1319,6 +1351,7 @@ struct netvsc_device *netvsc_device_add(struct hv_device *device,
2851     vmbus_close(device->channel);
2852    
2853     cleanup:
2854     + netif_napi_del(&net_device->chan_table[0].napi);
2855     free_netvsc_device(&net_device->rcu);
2856    
2857     return ERR_PTR(ret);
2858     diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
2859     index 444e560d928b..11b46c8d2d67 100644
2860     --- a/drivers/net/hyperv/netvsc_drv.c
2861     +++ b/drivers/net/hyperv/netvsc_drv.c
2862     @@ -45,7 +45,10 @@
2863    
2864     #include "hyperv_net.h"
2865    
2866     -#define RING_SIZE_MIN 64
2867     +#define RING_SIZE_MIN 64
2868     +#define RETRY_US_LO 5000
2869     +#define RETRY_US_HI 10000
2870     +#define RETRY_MAX 2000 /* >10 sec */
2871    
2872     #define LINKCHANGE_INT (2 * HZ)
2873     #define VF_TAKEOVER_INT (HZ / 10)
2874     @@ -88,10 +91,7 @@ static int netvsc_open(struct net_device *net)
2875     return ret;
2876     }
2877    
2878     - netif_tx_wake_all_queues(net);
2879     -
2880     rdev = nvdev->extension;
2881     -
2882     if (!rdev->link_state)
2883     netif_carrier_on(net);
2884    
2885     @@ -109,36 +109,25 @@ static int netvsc_open(struct net_device *net)
2886     return 0;
2887     }
2888    
2889     -static int netvsc_close(struct net_device *net)
2890     +static int netvsc_wait_until_empty(struct netvsc_device *nvdev)
2891     {
2892     - struct net_device_context *net_device_ctx = netdev_priv(net);
2893     - struct net_device *vf_netdev
2894     - = rtnl_dereference(net_device_ctx->vf_netdev);
2895     - struct netvsc_device *nvdev = rtnl_dereference(net_device_ctx->nvdev);
2896     - int ret = 0;
2897     - u32 aread, i, msec = 10, retry = 0, retry_max = 20;
2898     - struct vmbus_channel *chn;
2899     -
2900     - netif_tx_disable(net);
2901     -
2902     - /* No need to close rndis filter if it is removed already */
2903     - if (!nvdev)
2904     - goto out;
2905     -
2906     - ret = rndis_filter_close(nvdev);
2907     - if (ret != 0) {
2908     - netdev_err(net, "unable to close device (ret %d).\n", ret);
2909     - return ret;
2910     - }
2911     + unsigned int retry = 0;
2912     + int i;
2913    
2914     /* Ensure pending bytes in ring are read */
2915     - while (true) {
2916     - aread = 0;
2917     + for (;;) {
2918     + u32 aread = 0;
2919     +
2920     for (i = 0; i < nvdev->num_chn; i++) {
2921     - chn = nvdev->chan_table[i].channel;
2922     + struct vmbus_channel *chn
2923     + = nvdev->chan_table[i].channel;
2924     +
2925     if (!chn)
2926     continue;
2927    
2928     + /* make sure receive not running now */
2929     + napi_synchronize(&nvdev->chan_table[i].napi);
2930     +
2931     aread = hv_get_bytes_to_read(&chn->inbound);
2932     if (aread)
2933     break;
2934     @@ -148,22 +137,40 @@ static int netvsc_close(struct net_device *net)
2935     break;
2936     }
2937    
2938     - retry++;
2939     - if (retry > retry_max || aread == 0)
2940     - break;
2941     + if (aread == 0)
2942     + return 0;
2943    
2944     - msleep(msec);
2945     + if (++retry > RETRY_MAX)
2946     + return -ETIMEDOUT;
2947    
2948     - if (msec < 1000)
2949     - msec *= 2;
2950     + usleep_range(RETRY_US_LO, RETRY_US_HI);
2951     }
2952     +}
2953    
2954     - if (aread) {
2955     - netdev_err(net, "Ring buffer not empty after closing rndis\n");
2956     - ret = -ETIMEDOUT;
2957     +static int netvsc_close(struct net_device *net)
2958     +{
2959     + struct net_device_context *net_device_ctx = netdev_priv(net);
2960     + struct net_device *vf_netdev
2961     + = rtnl_dereference(net_device_ctx->vf_netdev);
2962     + struct netvsc_device *nvdev = rtnl_dereference(net_device_ctx->nvdev);
2963     + int ret;
2964     +
2965     + netif_tx_disable(net);
2966     +
2967     + /* No need to close rndis filter if it is removed already */
2968     + if (!nvdev)
2969     + return 0;
2970     +
2971     + ret = rndis_filter_close(nvdev);
2972     + if (ret != 0) {
2973     + netdev_err(net, "unable to close device (ret %d).\n", ret);
2974     + return ret;
2975     }
2976    
2977     -out:
2978     + ret = netvsc_wait_until_empty(nvdev);
2979     + if (ret)
2980     + netdev_err(net, "Ring buffer not empty after closing rndis\n");
2981     +
2982     if (vf_netdev)
2983     dev_close(vf_netdev);
2984    
2985     @@ -234,8 +241,8 @@ static inline int netvsc_get_tx_queue(struct net_device *ndev,
2986     struct sock *sk = skb->sk;
2987     int q_idx;
2988    
2989     - q_idx = ndc->tx_send_table[netvsc_get_hash(skb, ndc) &
2990     - (VRSS_SEND_TAB_SIZE - 1)];
2991     + q_idx = ndc->tx_table[netvsc_get_hash(skb, ndc) &
2992     + (VRSS_SEND_TAB_SIZE - 1)];
2993    
2994     /* If queue index changed record the new value */
2995     if (q_idx != old_idx &&
2996     @@ -284,8 +291,19 @@ static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb,
2997     rcu_read_lock();
2998     vf_netdev = rcu_dereference(ndc->vf_netdev);
2999     if (vf_netdev) {
3000     - txq = skb_rx_queue_recorded(skb) ? skb_get_rx_queue(skb) : 0;
3001     - qdisc_skb_cb(skb)->slave_dev_queue_mapping = skb->queue_mapping;
3002     + const struct net_device_ops *vf_ops = vf_netdev->netdev_ops;
3003     +
3004     + if (vf_ops->ndo_select_queue)
3005     + txq = vf_ops->ndo_select_queue(vf_netdev, skb,
3006     + accel_priv, fallback);
3007     + else
3008     + txq = fallback(vf_netdev, skb);
3009     +
3010     + /* Record the queue selected by VF so that it can be
3011     + * used for common case where VF has more queues than
3012     + * the synthetic device.
3013     + */
3014     + qdisc_skb_cb(skb)->slave_dev_queue_mapping = txq;
3015     } else {
3016     txq = netvsc_pick_tx(ndev, skb);
3017     }
3018     @@ -614,7 +632,7 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
3019     /* timestamp packet in software */
3020     skb_tx_timestamp(skb);
3021    
3022     - ret = netvsc_send(net_device_ctx, packet, rndis_msg, pb, skb);
3023     + ret = netvsc_send(net, packet, rndis_msg, pb, skb);
3024     if (likely(ret == 0))
3025     return NETDEV_TX_OK;
3026    
3027     @@ -810,16 +828,81 @@ static void netvsc_get_channels(struct net_device *net,
3028     }
3029     }
3030    
3031     +static int netvsc_detach(struct net_device *ndev,
3032     + struct netvsc_device *nvdev)
3033     +{
3034     + struct net_device_context *ndev_ctx = netdev_priv(ndev);
3035     + struct hv_device *hdev = ndev_ctx->device_ctx;
3036     + int ret;
3037     +
3038     + /* Don't try continuing to try and setup sub channels */
3039     + if (cancel_work_sync(&nvdev->subchan_work))
3040     + nvdev->num_chn = 1;
3041     +
3042     + /* If device was up (receiving) then shutdown */
3043     + if (netif_running(ndev)) {
3044     + netif_tx_disable(ndev);
3045     +
3046     + ret = rndis_filter_close(nvdev);
3047     + if (ret) {
3048     + netdev_err(ndev,
3049     + "unable to close device (ret %d).\n", ret);
3050     + return ret;
3051     + }
3052     +
3053     + ret = netvsc_wait_until_empty(nvdev);
3054     + if (ret) {
3055     + netdev_err(ndev,
3056     + "Ring buffer not empty after closing rndis\n");
3057     + return ret;
3058     + }
3059     + }
3060     +
3061     + netif_device_detach(ndev);
3062     +
3063     + rndis_filter_device_remove(hdev, nvdev);
3064     +
3065     + return 0;
3066     +}
3067     +
3068     +static int netvsc_attach(struct net_device *ndev,
3069     + struct netvsc_device_info *dev_info)
3070     +{
3071     + struct net_device_context *ndev_ctx = netdev_priv(ndev);
3072     + struct hv_device *hdev = ndev_ctx->device_ctx;
3073     + struct netvsc_device *nvdev;
3074     + struct rndis_device *rdev;
3075     + int ret;
3076     +
3077     + nvdev = rndis_filter_device_add(hdev, dev_info);
3078     + if (IS_ERR(nvdev))
3079     + return PTR_ERR(nvdev);
3080     +
3081     + /* Note: enable and attach happen when sub-channels setup */
3082     +
3083     + netif_carrier_off(ndev);
3084     +
3085     + if (netif_running(ndev)) {
3086     + ret = rndis_filter_open(nvdev);
3087     + if (ret)
3088     + return ret;
3089     +
3090     + rdev = nvdev->extension;
3091     + if (!rdev->link_state)
3092     + netif_carrier_on(ndev);
3093     + }
3094     +
3095     + return 0;
3096     +}
3097     +
3098     static int netvsc_set_channels(struct net_device *net,
3099     struct ethtool_channels *channels)
3100     {
3101     struct net_device_context *net_device_ctx = netdev_priv(net);
3102     - struct hv_device *dev = net_device_ctx->device_ctx;
3103     struct netvsc_device *nvdev = rtnl_dereference(net_device_ctx->nvdev);
3104     unsigned int orig, count = channels->combined_count;
3105     struct netvsc_device_info device_info;
3106     - bool was_opened;
3107     - int ret = 0;
3108     + int ret;
3109    
3110     /* We do not support separate count for rx, tx, or other */
3111     if (count == 0 ||
3112     @@ -836,9 +919,6 @@ static int netvsc_set_channels(struct net_device *net,
3113     return -EINVAL;
3114    
3115     orig = nvdev->num_chn;
3116     - was_opened = rndis_filter_opened(nvdev);
3117     - if (was_opened)
3118     - rndis_filter_close(nvdev);
3119    
3120     memset(&device_info, 0, sizeof(device_info));
3121     device_info.num_chn = count;
3122     @@ -848,28 +928,17 @@ static int netvsc_set_channels(struct net_device *net,
3123     device_info.recv_sections = nvdev->recv_section_cnt;
3124     device_info.recv_section_size = nvdev->recv_section_size;
3125    
3126     - rndis_filter_device_remove(dev, nvdev);
3127     + ret = netvsc_detach(net, nvdev);
3128     + if (ret)
3129     + return ret;
3130    
3131     - nvdev = rndis_filter_device_add(dev, &device_info);
3132     - if (IS_ERR(nvdev)) {
3133     - ret = PTR_ERR(nvdev);
3134     + ret = netvsc_attach(net, &device_info);
3135     + if (ret) {
3136     device_info.num_chn = orig;
3137     - nvdev = rndis_filter_device_add(dev, &device_info);
3138     -
3139     - if (IS_ERR(nvdev)) {
3140     - netdev_err(net, "restoring channel setting failed: %ld\n",
3141     - PTR_ERR(nvdev));
3142     - return ret;
3143     - }
3144     + if (netvsc_attach(net, &device_info))
3145     + netdev_err(net, "restoring channel setting failed\n");
3146     }
3147    
3148     - if (was_opened)
3149     - rndis_filter_open(nvdev);
3150     -
3151     - /* We may have missed link change notifications */
3152     - net_device_ctx->last_reconfig = 0;
3153     - schedule_delayed_work(&net_device_ctx->dwork, 0);
3154     -
3155     return ret;
3156     }
3157    
3158     @@ -936,10 +1005,8 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
3159     struct net_device_context *ndevctx = netdev_priv(ndev);
3160     struct net_device *vf_netdev = rtnl_dereference(ndevctx->vf_netdev);
3161     struct netvsc_device *nvdev = rtnl_dereference(ndevctx->nvdev);
3162     - struct hv_device *hdev = ndevctx->device_ctx;
3163     int orig_mtu = ndev->mtu;
3164     struct netvsc_device_info device_info;
3165     - bool was_opened;
3166     int ret = 0;
3167    
3168     if (!nvdev || nvdev->destroy)
3169     @@ -952,11 +1019,6 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
3170     return ret;
3171     }
3172    
3173     - netif_device_detach(ndev);
3174     - was_opened = rndis_filter_opened(nvdev);
3175     - if (was_opened)
3176     - rndis_filter_close(nvdev);
3177     -
3178     memset(&device_info, 0, sizeof(device_info));
3179     device_info.ring_size = ring_size;
3180     device_info.num_chn = nvdev->num_chn;
3181     @@ -965,35 +1027,27 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
3182     device_info.recv_sections = nvdev->recv_section_cnt;
3183     device_info.recv_section_size = nvdev->recv_section_size;
3184    
3185     - rndis_filter_device_remove(hdev, nvdev);
3186     + ret = netvsc_detach(ndev, nvdev);
3187     + if (ret)
3188     + goto rollback_vf;
3189    
3190     ndev->mtu = mtu;
3191    
3192     - nvdev = rndis_filter_device_add(hdev, &device_info);
3193     - if (IS_ERR(nvdev)) {
3194     - ret = PTR_ERR(nvdev);
3195     -
3196     - /* Attempt rollback to original MTU */
3197     - ndev->mtu = orig_mtu;
3198     - nvdev = rndis_filter_device_add(hdev, &device_info);
3199     -
3200     - if (vf_netdev)
3201     - dev_set_mtu(vf_netdev, orig_mtu);
3202     -
3203     - if (IS_ERR(nvdev)) {
3204     - netdev_err(ndev, "restoring mtu failed: %ld\n",
3205     - PTR_ERR(nvdev));
3206     - return ret;
3207     - }
3208     - }
3209     + ret = netvsc_attach(ndev, &device_info);
3210     + if (ret)
3211     + goto rollback;
3212    
3213     - if (was_opened)
3214     - rndis_filter_open(nvdev);
3215     + return 0;
3216    
3217     - netif_device_attach(ndev);
3218     +rollback:
3219     + /* Attempt rollback to original MTU */
3220     + ndev->mtu = orig_mtu;
3221    
3222     - /* We may have missed link change notifications */
3223     - schedule_delayed_work(&ndevctx->dwork, 0);
3224     + if (netvsc_attach(ndev, &device_info))
3225     + netdev_err(ndev, "restoring mtu failed\n");
3226     +rollback_vf:
3227     + if (vf_netdev)
3228     + dev_set_mtu(vf_netdev, orig_mtu);
3229    
3230     return ret;
3231     }
3232     @@ -1378,7 +1432,7 @@ static int netvsc_get_rxfh(struct net_device *dev, u32 *indir, u8 *key,
3233     rndis_dev = ndev->extension;
3234     if (indir) {
3235     for (i = 0; i < ITAB_NUM; i++)
3236     - indir[i] = rndis_dev->ind_table[i];
3237     + indir[i] = rndis_dev->rx_table[i];
3238     }
3239    
3240     if (key)
3241     @@ -1408,7 +1462,7 @@ static int netvsc_set_rxfh(struct net_device *dev, const u32 *indir,
3242     return -EINVAL;
3243    
3244     for (i = 0; i < ITAB_NUM; i++)
3245     - rndis_dev->ind_table[i] = indir[i];
3246     + rndis_dev->rx_table[i] = indir[i];
3247     }
3248    
3249     if (!key) {
3250     @@ -1459,11 +1513,9 @@ static int netvsc_set_ringparam(struct net_device *ndev,
3251     {
3252     struct net_device_context *ndevctx = netdev_priv(ndev);
3253     struct netvsc_device *nvdev = rtnl_dereference(ndevctx->nvdev);
3254     - struct hv_device *hdev = ndevctx->device_ctx;
3255     struct netvsc_device_info device_info;
3256     struct ethtool_ringparam orig;
3257     u32 new_tx, new_rx;
3258     - bool was_opened;
3259     int ret = 0;
3260    
3261     if (!nvdev || nvdev->destroy)
3262     @@ -1489,34 +1541,18 @@ static int netvsc_set_ringparam(struct net_device *ndev,
3263     device_info.recv_sections = new_rx;
3264     device_info.recv_section_size = nvdev->recv_section_size;
3265    
3266     - netif_device_detach(ndev);
3267     - was_opened = rndis_filter_opened(nvdev);
3268     - if (was_opened)
3269     - rndis_filter_close(nvdev);
3270     -
3271     - rndis_filter_device_remove(hdev, nvdev);
3272     -
3273     - nvdev = rndis_filter_device_add(hdev, &device_info);
3274     - if (IS_ERR(nvdev)) {
3275     - ret = PTR_ERR(nvdev);
3276     + ret = netvsc_detach(ndev, nvdev);
3277     + if (ret)
3278     + return ret;
3279    
3280     + ret = netvsc_attach(ndev, &device_info);
3281     + if (ret) {
3282     device_info.send_sections = orig.tx_pending;
3283     device_info.recv_sections = orig.rx_pending;
3284     - nvdev = rndis_filter_device_add(hdev, &device_info);
3285     - if (IS_ERR(nvdev)) {
3286     - netdev_err(ndev, "restoring ringparam failed: %ld\n",
3287     - PTR_ERR(nvdev));
3288     - return ret;
3289     - }
3290     - }
3291     -
3292     - if (was_opened)
3293     - rndis_filter_open(nvdev);
3294     - netif_device_attach(ndev);
3295    
3296     - /* We may have missed link change notifications */
3297     - ndevctx->last_reconfig = 0;
3298     - schedule_delayed_work(&ndevctx->dwork, 0);
3299     + if (netvsc_attach(ndev, &device_info))
3300     + netdev_err(ndev, "restoring ringparam failed");
3301     + }
3302    
3303     return ret;
3304     }
3305     @@ -1932,6 +1968,12 @@ static int netvsc_probe(struct hv_device *dev,
3306     /* We always need headroom for rndis header */
3307     net->needed_headroom = RNDIS_AND_PPI_SIZE;
3308    
3309     + /* Initialize the number of queues to be 1, we may change it if more
3310     + * channels are offered later.
3311     + */
3312     + netif_set_real_num_tx_queues(net, 1);
3313     + netif_set_real_num_rx_queues(net, 1);
3314     +
3315     /* Notify the netvsc driver of the new device */
3316     memset(&device_info, 0, sizeof(device_info));
3317     device_info.ring_size = ring_size;
3318     @@ -1950,7 +1992,7 @@ static int netvsc_probe(struct hv_device *dev,
3319    
3320     memcpy(net->dev_addr, device_info.mac_adr, ETH_ALEN);
3321    
3322     - /* hw_features computed in rndis_filter_device_add */
3323     + /* hw_features computed in rndis_netdev_set_hwcaps() */
3324     net->features = net->hw_features |
3325     NETIF_F_HIGHDMA | NETIF_F_SG |
3326     NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
3327     @@ -1987,8 +2029,8 @@ static int netvsc_probe(struct hv_device *dev,
3328     static int netvsc_remove(struct hv_device *dev)
3329     {
3330     struct net_device_context *ndev_ctx;
3331     - struct net_device *vf_netdev;
3332     - struct net_device *net;
3333     + struct net_device *vf_netdev, *net;
3334     + struct netvsc_device *nvdev;
3335    
3336     net = hv_get_drvdata(dev);
3337     if (net == NULL) {
3338     @@ -1998,10 +2040,14 @@ static int netvsc_remove(struct hv_device *dev)
3339    
3340     ndev_ctx = netdev_priv(net);
3341    
3342     - netif_device_detach(net);
3343     -
3344     cancel_delayed_work_sync(&ndev_ctx->dwork);
3345    
3346     + rcu_read_lock();
3347     + nvdev = rcu_dereference(ndev_ctx->nvdev);
3348     +
3349     + if (nvdev)
3350     + cancel_work_sync(&nvdev->subchan_work);
3351     +
3352     /*
3353     * Call to the vsc driver to let it know that the device is being
3354     * removed. Also blocks mtu and channel changes.
3355     @@ -2011,11 +2057,13 @@ static int netvsc_remove(struct hv_device *dev)
3356     if (vf_netdev)
3357     netvsc_unregister_vf(vf_netdev);
3358    
3359     + if (nvdev)
3360     + rndis_filter_device_remove(dev, nvdev);
3361     +
3362     unregister_netdevice(net);
3363    
3364     - rndis_filter_device_remove(dev,
3365     - rtnl_dereference(ndev_ctx->nvdev));
3366     rtnl_unlock();
3367     + rcu_read_unlock();
3368    
3369     hv_set_drvdata(dev, NULL);
3370    
3371     diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
3372     index 065b204d8e17..6dde92c1c113 100644
3373     --- a/drivers/net/hyperv/rndis_filter.c
3374     +++ b/drivers/net/hyperv/rndis_filter.c
3375     @@ -217,7 +217,6 @@ static int rndis_filter_send_request(struct rndis_device *dev,
3376     struct hv_netvsc_packet *packet;
3377     struct hv_page_buffer page_buf[2];
3378     struct hv_page_buffer *pb = page_buf;
3379     - struct net_device_context *net_device_ctx = netdev_priv(dev->ndev);
3380     int ret;
3381    
3382     /* Setup the packet to send it */
3383     @@ -245,7 +244,7 @@ static int rndis_filter_send_request(struct rndis_device *dev,
3384     }
3385    
3386     rcu_read_lock_bh();
3387     - ret = netvsc_send(net_device_ctx, packet, NULL, pb, NULL);
3388     + ret = netvsc_send(dev->ndev, packet, NULL, pb, NULL);
3389     rcu_read_unlock_bh();
3390    
3391     return ret;
3392     @@ -267,13 +266,23 @@ static void rndis_set_link_state(struct rndis_device *rdev,
3393     }
3394     }
3395    
3396     -static void rndis_filter_receive_response(struct rndis_device *dev,
3397     - struct rndis_message *resp)
3398     +static void rndis_filter_receive_response(struct net_device *ndev,
3399     + struct netvsc_device *nvdev,
3400     + const struct rndis_message *resp)
3401     {
3402     + struct rndis_device *dev = nvdev->extension;
3403     struct rndis_request *request = NULL;
3404     bool found = false;
3405     unsigned long flags;
3406     - struct net_device *ndev = dev->ndev;
3407     +
3408     + /* This should never happen, it means control message
3409     + * response received after device removed.
3410     + */
3411     + if (dev->state == RNDIS_DEV_UNINITIALIZED) {
3412     + netdev_err(ndev,
3413     + "got rndis message uninitialized\n");
3414     + return;
3415     + }
3416    
3417     spin_lock_irqsave(&dev->request_lock, flags);
3418     list_for_each_entry(request, &dev->req_list, list_ent) {
3419     @@ -354,7 +363,7 @@ static inline void *rndis_get_ppi(struct rndis_packet *rpkt, u32 type)
3420     }
3421    
3422     static int rndis_filter_receive_data(struct net_device *ndev,
3423     - struct rndis_device *dev,
3424     + struct netvsc_device *nvdev,
3425     struct rndis_message *msg,
3426     struct vmbus_channel *channel,
3427     void *data, u32 data_buflen)
3428     @@ -374,7 +383,7 @@ static int rndis_filter_receive_data(struct net_device *ndev,
3429     * should be the data packet size plus the trailer padding size
3430     */
3431     if (unlikely(data_buflen < rndis_pkt->data_len)) {
3432     - netdev_err(dev->ndev, "rndis message buffer "
3433     + netdev_err(ndev, "rndis message buffer "
3434     "overflow detected (got %u, min %u)"
3435     "...dropping this message!\n",
3436     data_buflen, rndis_pkt->data_len);
3437     @@ -402,34 +411,20 @@ int rndis_filter_receive(struct net_device *ndev,
3438     void *data, u32 buflen)
3439     {
3440     struct net_device_context *net_device_ctx = netdev_priv(ndev);
3441     - struct rndis_device *rndis_dev = net_dev->extension;
3442     struct rndis_message *rndis_msg = data;
3443    
3444     - /* Make sure the rndis device state is initialized */
3445     - if (unlikely(!rndis_dev)) {
3446     - netif_err(net_device_ctx, rx_err, ndev,
3447     - "got rndis message but no rndis device!\n");
3448     - return NVSP_STAT_FAIL;
3449     - }
3450     -
3451     - if (unlikely(rndis_dev->state == RNDIS_DEV_UNINITIALIZED)) {
3452     - netif_err(net_device_ctx, rx_err, ndev,
3453     - "got rndis message uninitialized\n");
3454     - return NVSP_STAT_FAIL;
3455     - }
3456     -
3457     if (netif_msg_rx_status(net_device_ctx))
3458     dump_rndis_message(dev, rndis_msg);
3459    
3460     switch (rndis_msg->ndis_msg_type) {
3461     case RNDIS_MSG_PACKET:
3462     - return rndis_filter_receive_data(ndev, rndis_dev, rndis_msg,
3463     + return rndis_filter_receive_data(ndev, net_dev, rndis_msg,
3464     channel, data, buflen);
3465     case RNDIS_MSG_INIT_C:
3466     case RNDIS_MSG_QUERY_C:
3467     case RNDIS_MSG_SET_C:
3468     /* completion msgs */
3469     - rndis_filter_receive_response(rndis_dev, rndis_msg);
3470     + rndis_filter_receive_response(ndev, net_dev, rndis_msg);
3471     break;
3472    
3473     case RNDIS_MSG_INDICATE:
3474     @@ -759,7 +754,7 @@ int rndis_filter_set_rss_param(struct rndis_device *rdev,
3475     /* Set indirection table entries */
3476     itab = (u32 *)(rssp + 1);
3477     for (i = 0; i < ITAB_NUM; i++)
3478     - itab[i] = rdev->ind_table[i];
3479     + itab[i] = rdev->rx_table[i];
3480    
3481     /* Set hask key values */
3482     keyp = (u8 *)((unsigned long)rssp + rssp->kashkey_offset);
3483     @@ -1114,6 +1109,10 @@ void rndis_set_subchannel(struct work_struct *w)
3484     netif_set_real_num_tx_queues(ndev, nvdev->num_chn);
3485     netif_set_real_num_rx_queues(ndev, nvdev->num_chn);
3486    
3487     + for (i = 0; i < VRSS_SEND_TAB_SIZE; i++)
3488     + ndev_ctx->tx_table[i] = i % nvdev->num_chn;
3489     +
3490     + netif_device_attach(ndev);
3491     rtnl_unlock();
3492     return;
3493    
3494     @@ -1124,73 +1123,26 @@ void rndis_set_subchannel(struct work_struct *w)
3495    
3496     nvdev->max_chn = 1;
3497     nvdev->num_chn = 1;
3498     +
3499     + netif_device_attach(ndev);
3500     unlock:
3501     rtnl_unlock();
3502     }
3503    
3504     -struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
3505     - struct netvsc_device_info *device_info)
3506     +static int rndis_netdev_set_hwcaps(struct rndis_device *rndis_device,
3507     + struct netvsc_device *nvdev)
3508     {
3509     - struct net_device *net = hv_get_drvdata(dev);
3510     + struct net_device *net = rndis_device->ndev;
3511     struct net_device_context *net_device_ctx = netdev_priv(net);
3512     - struct netvsc_device *net_device;
3513     - struct rndis_device *rndis_device;
3514     struct ndis_offload hwcaps;
3515     struct ndis_offload_params offloads;
3516     - struct ndis_recv_scale_cap rsscap;
3517     - u32 rsscap_size = sizeof(struct ndis_recv_scale_cap);
3518     unsigned int gso_max_size = GSO_MAX_SIZE;
3519     - u32 mtu, size;
3520     - const struct cpumask *node_cpu_mask;
3521     - u32 num_possible_rss_qs;
3522     - int i, ret;
3523     -
3524     - rndis_device = get_rndis_device();
3525     - if (!rndis_device)
3526     - return ERR_PTR(-ENODEV);
3527     -
3528     - /*
3529     - * Let the inner driver handle this first to create the netvsc channel
3530     - * NOTE! Once the channel is created, we may get a receive callback
3531     - * (RndisFilterOnReceive()) before this call is completed
3532     - */
3533     - net_device = netvsc_device_add(dev, device_info);
3534     - if (IS_ERR(net_device)) {
3535     - kfree(rndis_device);
3536     - return net_device;
3537     - }
3538     -
3539     - /* Initialize the rndis device */
3540     - net_device->max_chn = 1;
3541     - net_device->num_chn = 1;
3542     -
3543     - net_device->extension = rndis_device;
3544     - rndis_device->ndev = net;
3545     -
3546     - /* Send the rndis initialization message */
3547     - ret = rndis_filter_init_device(rndis_device, net_device);
3548     - if (ret != 0)
3549     - goto err_dev_remv;
3550     -
3551     - /* Get the MTU from the host */
3552     - size = sizeof(u32);
3553     - ret = rndis_filter_query_device(rndis_device, net_device,
3554     - RNDIS_OID_GEN_MAXIMUM_FRAME_SIZE,
3555     - &mtu, &size);
3556     - if (ret == 0 && size == sizeof(u32) && mtu < net->mtu)
3557     - net->mtu = mtu;
3558     -
3559     - /* Get the mac address */
3560     - ret = rndis_filter_query_device_mac(rndis_device, net_device);
3561     - if (ret != 0)
3562     - goto err_dev_remv;
3563     -
3564     - memcpy(device_info->mac_adr, rndis_device->hw_mac_adr, ETH_ALEN);
3565     + int ret;
3566    
3567     /* Find HW offload capabilities */
3568     - ret = rndis_query_hwcaps(rndis_device, net_device, &hwcaps);
3569     + ret = rndis_query_hwcaps(rndis_device, nvdev, &hwcaps);
3570     if (ret != 0)
3571     - goto err_dev_remv;
3572     + return ret;
3573    
3574     /* A value of zero means "no change"; now turn on what we want. */
3575     memset(&offloads, 0, sizeof(struct ndis_offload_params));
3576     @@ -1198,8 +1150,12 @@ struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
3577     /* Linux does not care about IP checksum, always does in kernel */
3578     offloads.ip_v4_csum = NDIS_OFFLOAD_PARAMETERS_TX_RX_DISABLED;
3579    
3580     + /* Reset previously set hw_features flags */
3581     + net->hw_features &= ~NETVSC_SUPPORTED_HW_FEATURES;
3582     + net_device_ctx->tx_checksum_mask = 0;
3583     +
3584     /* Compute tx offload settings based on hw capabilities */
3585     - net->hw_features = NETIF_F_RXCSUM;
3586     + net->hw_features |= NETIF_F_RXCSUM;
3587    
3588     if ((hwcaps.csum.ip4_txcsum & NDIS_TXCSUM_ALL_TCP4) == NDIS_TXCSUM_ALL_TCP4) {
3589     /* Can checksum TCP */
3590     @@ -1243,10 +1199,74 @@ struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
3591     }
3592     }
3593    
3594     + /* In case some hw_features disappeared we need to remove them from
3595     + * net->features list as they're no longer supported.
3596     + */
3597     + net->features &= ~NETVSC_SUPPORTED_HW_FEATURES | net->hw_features;
3598     +
3599     netif_set_gso_max_size(net, gso_max_size);
3600    
3601     - ret = rndis_filter_set_offload_params(net, net_device, &offloads);
3602     - if (ret)
3603     + ret = rndis_filter_set_offload_params(net, nvdev, &offloads);
3604     +
3605     + return ret;
3606     +}
3607     +
3608     +struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
3609     + struct netvsc_device_info *device_info)
3610     +{
3611     + struct net_device *net = hv_get_drvdata(dev);
3612     + struct netvsc_device *net_device;
3613     + struct rndis_device *rndis_device;
3614     + struct ndis_recv_scale_cap rsscap;
3615     + u32 rsscap_size = sizeof(struct ndis_recv_scale_cap);
3616     + u32 mtu, size;
3617     + u32 num_possible_rss_qs;
3618     + int i, ret;
3619     +
3620     + rndis_device = get_rndis_device();
3621     + if (!rndis_device)
3622     + return ERR_PTR(-ENODEV);
3623     +
3624     + /* Let the inner driver handle this first to create the netvsc channel
3625     + * NOTE! Once the channel is created, we may get a receive callback
3626     + * (RndisFilterOnReceive()) before this call is completed
3627     + */
3628     + net_device = netvsc_device_add(dev, device_info);
3629     + if (IS_ERR(net_device)) {
3630     + kfree(rndis_device);
3631     + return net_device;
3632     + }
3633     +
3634     + /* Initialize the rndis device */
3635     + net_device->max_chn = 1;
3636     + net_device->num_chn = 1;
3637     +
3638     + net_device->extension = rndis_device;
3639     + rndis_device->ndev = net;
3640     +
3641     + /* Send the rndis initialization message */
3642     + ret = rndis_filter_init_device(rndis_device, net_device);
3643     + if (ret != 0)
3644     + goto err_dev_remv;
3645     +
3646     + /* Get the MTU from the host */
3647     + size = sizeof(u32);
3648     + ret = rndis_filter_query_device(rndis_device, net_device,
3649     + RNDIS_OID_GEN_MAXIMUM_FRAME_SIZE,
3650     + &mtu, &size);
3651     + if (ret == 0 && size == sizeof(u32) && mtu < net->mtu)
3652     + net->mtu = mtu;
3653     +
3654     + /* Get the mac address */
3655     + ret = rndis_filter_query_device_mac(rndis_device, net_device);
3656     + if (ret != 0)
3657     + goto err_dev_remv;
3658     +
3659     + memcpy(device_info->mac_adr, rndis_device->hw_mac_adr, ETH_ALEN);
3660     +
3661     + /* Query and set hardware capabilities */
3662     + ret = rndis_netdev_set_hwcaps(rndis_device, net_device);
3663     + if (ret != 0)
3664     goto err_dev_remv;
3665    
3666     rndis_filter_query_device_link_status(rndis_device, net_device);
3667     @@ -1256,7 +1276,7 @@ struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
3668     rndis_device->link_state ? "down" : "up");
3669    
3670     if (net_device->nvsp_version < NVSP_PROTOCOL_VERSION_5)
3671     - return net_device;
3672     + goto out;
3673    
3674     rndis_filter_query_link_speed(rndis_device, net_device);
3675    
3676     @@ -1268,14 +1288,8 @@ struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
3677     if (ret || rsscap.num_recv_que < 2)
3678     goto out;
3679    
3680     - /*
3681     - * We will limit the VRSS channels to the number CPUs in the NUMA node
3682     - * the primary channel is currently bound to.
3683     - *
3684     - * This also guarantees that num_possible_rss_qs <= num_online_cpus
3685     - */
3686     - node_cpu_mask = cpumask_of_node(cpu_to_node(dev->channel->target_cpu));
3687     - num_possible_rss_qs = min_t(u32, cpumask_weight(node_cpu_mask),
3688     + /* This guarantees that num_possible_rss_qs <= num_online_cpus */
3689     + num_possible_rss_qs = min_t(u32, num_online_cpus(),
3690     rsscap.num_recv_que);
3691    
3692     net_device->max_chn = min_t(u32, VRSS_CHANNEL_MAX, num_possible_rss_qs);
3693     @@ -1284,8 +1298,8 @@ struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
3694     net_device->num_chn = min(net_device->max_chn, device_info->num_chn);
3695    
3696     for (i = 0; i < ITAB_NUM; i++)
3697     - rndis_device->ind_table[i] = ethtool_rxfh_indir_default(i,
3698     - net_device->num_chn);
3699     + rndis_device->rx_table[i] = ethtool_rxfh_indir_default(
3700     + i, net_device->num_chn);
3701    
3702     atomic_set(&net_device->open_chn, 1);
3703     vmbus_set_sc_create_callback(dev->channel, netvsc_sc_open);
3704     @@ -1313,6 +1327,10 @@ struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
3705     net_device->num_chn = 1;
3706     }
3707    
3708     + /* No sub channels, device is ready */
3709     + if (net_device->num_chn == 1)
3710     + netif_device_attach(net);
3711     +
3712     return net_device;
3713    
3714     err_dev_remv:
3715     @@ -1331,7 +1349,6 @@ void rndis_filter_device_remove(struct hv_device *dev,
3716     net_dev->extension = NULL;
3717    
3718     netvsc_device_remove(dev);
3719     - kfree(rndis_dev);
3720     }
3721    
3722     int rndis_filter_open(struct netvsc_device *nvdev)
3723     @@ -1355,8 +1372,3 @@ int rndis_filter_close(struct netvsc_device *nvdev)
3724    
3725     return rndis_filter_close_device(nvdev->extension);
3726     }
3727     -
3728     -bool rndis_filter_opened(const struct netvsc_device *nvdev)
3729     -{
3730     - return atomic_read(&nvdev->open_cnt) > 0;
3731     -}
3732     diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
3733     index 2f828eb9ace6..e522085ecbf7 100644
3734     --- a/drivers/net/usb/qmi_wwan.c
3735     +++ b/drivers/net/usb/qmi_wwan.c
3736     @@ -1105,6 +1105,9 @@ static const struct usb_device_id products[] = {
3737     {QMI_FIXED_INTF(0x0846, 0x68a2, 8)},
3738     {QMI_FIXED_INTF(0x12d1, 0x140c, 1)}, /* Huawei E173 */
3739     {QMI_FIXED_INTF(0x12d1, 0x14ac, 1)}, /* Huawei E1820 */
3740     + {QMI_FIXED_INTF(0x1435, 0xd181, 3)}, /* Wistron NeWeb D18Q1 */
3741     + {QMI_FIXED_INTF(0x1435, 0xd181, 4)}, /* Wistron NeWeb D18Q1 */
3742     + {QMI_FIXED_INTF(0x1435, 0xd181, 5)}, /* Wistron NeWeb D18Q1 */
3743     {QMI_FIXED_INTF(0x16d8, 0x6003, 0)}, /* CMOTech 6003 */
3744     {QMI_FIXED_INTF(0x16d8, 0x6007, 0)}, /* CMOTech CHE-628S */
3745     {QMI_FIXED_INTF(0x16d8, 0x6008, 0)}, /* CMOTech CMU-301 */
3746     @@ -1241,6 +1244,7 @@ static const struct usb_device_id products[] = {
3747     {QMI_FIXED_INTF(0x413c, 0x81b6, 8)}, /* Dell Wireless 5811e */
3748     {QMI_FIXED_INTF(0x413c, 0x81b6, 10)}, /* Dell Wireless 5811e */
3749     {QMI_FIXED_INTF(0x03f0, 0x4e1d, 8)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */
3750     + {QMI_FIXED_INTF(0x03f0, 0x9d1d, 1)}, /* HP lt4120 Snapdragon X5 LTE */
3751     {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */
3752     {QMI_FIXED_INTF(0x1e0e, 0x9001, 5)}, /* SIMCom 7230E */
3753     {QMI_QUIRK_SET_DTR(0x2c7c, 0x0125, 4)}, /* Quectel EC25, EC20 R2.0 Mini PCIe */
3754     diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
3755     index 42baad125a7d..32fc69539126 100644
3756     --- a/drivers/net/usb/usbnet.c
3757     +++ b/drivers/net/usb/usbnet.c
3758     @@ -315,6 +315,7 @@ static void __usbnet_status_stop_force(struct usbnet *dev)
3759     void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb)
3760     {
3761     struct pcpu_sw_netstats *stats64 = this_cpu_ptr(dev->stats64);
3762     + unsigned long flags;
3763     int status;
3764    
3765     if (test_bit(EVENT_RX_PAUSED, &dev->flags)) {
3766     @@ -326,10 +327,10 @@ void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb)
3767     if (skb->protocol == 0)
3768     skb->protocol = eth_type_trans (skb, dev->net);
3769    
3770     - u64_stats_update_begin(&stats64->syncp);
3771     + flags = u64_stats_update_begin_irqsave(&stats64->syncp);
3772     stats64->rx_packets++;
3773     stats64->rx_bytes += skb->len;
3774     - u64_stats_update_end(&stats64->syncp);
3775     + u64_stats_update_end_irqrestore(&stats64->syncp, flags);
3776    
3777     netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n",
3778     skb->len + sizeof (struct ethhdr), skb->protocol);
3779     @@ -1250,11 +1251,12 @@ static void tx_complete (struct urb *urb)
3780    
3781     if (urb->status == 0) {
3782     struct pcpu_sw_netstats *stats64 = this_cpu_ptr(dev->stats64);
3783     + unsigned long flags;
3784    
3785     - u64_stats_update_begin(&stats64->syncp);
3786     + flags = u64_stats_update_begin_irqsave(&stats64->syncp);
3787     stats64->tx_packets += entry->packets;
3788     stats64->tx_bytes += entry->length;
3789     - u64_stats_update_end(&stats64->syncp);
3790     + u64_stats_update_end_irqrestore(&stats64->syncp, flags);
3791     } else {
3792     dev->net->stats.tx_errors++;
3793    
3794     diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
3795     index cf95290b160c..3628fd7e606f 100644
3796     --- a/drivers/net/vmxnet3/vmxnet3_drv.c
3797     +++ b/drivers/net/vmxnet3/vmxnet3_drv.c
3798     @@ -369,6 +369,11 @@ vmxnet3_tq_tx_complete(struct vmxnet3_tx_queue *tq,
3799    
3800     gdesc = tq->comp_ring.base + tq->comp_ring.next2proc;
3801     while (VMXNET3_TCD_GET_GEN(&gdesc->tcd) == tq->comp_ring.gen) {
3802     + /* Prevent any &gdesc->tcd field from being (speculatively)
3803     + * read before (&gdesc->tcd)->gen is read.
3804     + */
3805     + dma_rmb();
3806     +
3807     completed += vmxnet3_unmap_pkt(VMXNET3_TCD_GET_TXIDX(
3808     &gdesc->tcd), tq, adapter->pdev,
3809     adapter);
3810     @@ -1099,6 +1104,11 @@ vmxnet3_tq_xmit(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
3811     gdesc->txd.tci = skb_vlan_tag_get(skb);
3812     }
3813    
3814     + /* Ensure that the write to (&gdesc->txd)->gen will be observed after
3815     + * all other writes to &gdesc->txd.
3816     + */
3817     + dma_wmb();
3818     +
3819     /* finally flips the GEN bit of the SOP desc. */
3820     gdesc->dword[2] = cpu_to_le32(le32_to_cpu(gdesc->dword[2]) ^
3821     VMXNET3_TXD_GEN);
3822     @@ -1286,6 +1296,12 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
3823     */
3824     break;
3825     }
3826     +
3827     + /* Prevent any rcd field from being (speculatively) read before
3828     + * rcd->gen is read.
3829     + */
3830     + dma_rmb();
3831     +
3832     BUG_ON(rcd->rqID != rq->qid && rcd->rqID != rq->qid2 &&
3833     rcd->rqID != rq->dataRingQid);
3834     idx = rcd->rxdIdx;
3835     @@ -1515,6 +1531,12 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
3836     ring->next2comp = idx;
3837     num_to_alloc = vmxnet3_cmd_ring_desc_avail(ring);
3838     ring = rq->rx_ring + ring_idx;
3839     +
3840     + /* Ensure that the writes to rxd->gen bits will be observed
3841     + * after all other writes to rxd objects.
3842     + */
3843     + dma_wmb();
3844     +
3845     while (num_to_alloc) {
3846     vmxnet3_getRxDesc(rxd, &ring->base[ring->next2fill].rxd,
3847     &rxCmdDesc);
3848     @@ -2675,7 +2697,7 @@ vmxnet3_set_mac_addr(struct net_device *netdev, void *p)
3849     /* ==================== initialization and cleanup routines ============ */
3850    
3851     static int
3852     -vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter, bool *dma64)
3853     +vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter)
3854     {
3855     int err;
3856     unsigned long mmio_start, mmio_len;
3857     @@ -2687,30 +2709,12 @@ vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter, bool *dma64)
3858     return err;
3859     }
3860    
3861     - if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) == 0) {
3862     - if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)) != 0) {
3863     - dev_err(&pdev->dev,
3864     - "pci_set_consistent_dma_mask failed\n");
3865     - err = -EIO;
3866     - goto err_set_mask;
3867     - }
3868     - *dma64 = true;
3869     - } else {
3870     - if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) {
3871     - dev_err(&pdev->dev,
3872     - "pci_set_dma_mask failed\n");
3873     - err = -EIO;
3874     - goto err_set_mask;
3875     - }
3876     - *dma64 = false;
3877     - }
3878     -
3879     err = pci_request_selected_regions(pdev, (1 << 2) - 1,
3880     vmxnet3_driver_name);
3881     if (err) {
3882     dev_err(&pdev->dev,
3883     "Failed to request region for adapter: error %d\n", err);
3884     - goto err_set_mask;
3885     + goto err_enable_device;
3886     }
3887    
3888     pci_set_master(pdev);
3889     @@ -2738,7 +2742,7 @@ vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter, bool *dma64)
3890     iounmap(adapter->hw_addr0);
3891     err_ioremap:
3892     pci_release_selected_regions(pdev, (1 << 2) - 1);
3893     -err_set_mask:
3894     +err_enable_device:
3895     pci_disable_device(pdev);
3896     return err;
3897     }
3898     @@ -3243,7 +3247,7 @@ vmxnet3_probe_device(struct pci_dev *pdev,
3899     #endif
3900     };
3901     int err;
3902     - bool dma64 = false; /* stupid gcc */
3903     + bool dma64;
3904     u32 ver;
3905     struct net_device *netdev;
3906     struct vmxnet3_adapter *adapter;
3907     @@ -3289,6 +3293,24 @@ vmxnet3_probe_device(struct pci_dev *pdev,
3908     adapter->rx_ring_size = VMXNET3_DEF_RX_RING_SIZE;
3909     adapter->rx_ring2_size = VMXNET3_DEF_RX_RING2_SIZE;
3910    
3911     + if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) == 0) {
3912     + if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)) != 0) {
3913     + dev_err(&pdev->dev,
3914     + "pci_set_consistent_dma_mask failed\n");
3915     + err = -EIO;
3916     + goto err_set_mask;
3917     + }
3918     + dma64 = true;
3919     + } else {
3920     + if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) {
3921     + dev_err(&pdev->dev,
3922     + "pci_set_dma_mask failed\n");
3923     + err = -EIO;
3924     + goto err_set_mask;
3925     + }
3926     + dma64 = false;
3927     + }
3928     +
3929     spin_lock_init(&adapter->cmd_lock);
3930     adapter->adapter_pa = dma_map_single(&adapter->pdev->dev, adapter,
3931     sizeof(struct vmxnet3_adapter),
3932     @@ -3296,7 +3318,7 @@ vmxnet3_probe_device(struct pci_dev *pdev,
3933     if (dma_mapping_error(&adapter->pdev->dev, adapter->adapter_pa)) {
3934     dev_err(&pdev->dev, "Failed to map dma\n");
3935     err = -EFAULT;
3936     - goto err_dma_map;
3937     + goto err_set_mask;
3938     }
3939     adapter->shared = dma_alloc_coherent(
3940     &adapter->pdev->dev,
3941     @@ -3347,7 +3369,7 @@ vmxnet3_probe_device(struct pci_dev *pdev,
3942     }
3943     #endif /* VMXNET3_RSS */
3944    
3945     - err = vmxnet3_alloc_pci_resources(adapter, &dma64);
3946     + err = vmxnet3_alloc_pci_resources(adapter);
3947     if (err < 0)
3948     goto err_alloc_pci;
3949    
3950     @@ -3493,7 +3515,7 @@ vmxnet3_probe_device(struct pci_dev *pdev,
3951     err_alloc_shared:
3952     dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa,
3953     sizeof(struct vmxnet3_adapter), PCI_DMA_TODEVICE);
3954     -err_dma_map:
3955     +err_set_mask:
3956     free_netdev(netdev);
3957     return err;
3958     }
3959     diff --git a/drivers/rtc/hctosys.c b/drivers/rtc/hctosys.c
3960     index e1cfa06810ef..e79f2a181ad2 100644
3961     --- a/drivers/rtc/hctosys.c
3962     +++ b/drivers/rtc/hctosys.c
3963     @@ -49,6 +49,11 @@ static int __init rtc_hctosys(void)
3964    
3965     tv64.tv_sec = rtc_tm_to_time64(&tm);
3966    
3967     +#if BITS_PER_LONG == 32
3968     + if (tv64.tv_sec > INT_MAX)
3969     + goto err_read;
3970     +#endif
3971     +
3972     err = do_settimeofday64(&tv64);
3973    
3974     dev_info(rtc->dev.parent,
3975     diff --git a/drivers/rtc/rtc-goldfish.c b/drivers/rtc/rtc-goldfish.c
3976     index d67769265185..a1c44d0c8557 100644
3977     --- a/drivers/rtc/rtc-goldfish.c
3978     +++ b/drivers/rtc/rtc-goldfish.c
3979     @@ -235,3 +235,5 @@ static struct platform_driver goldfish_rtc = {
3980     };
3981    
3982     module_platform_driver(goldfish_rtc);
3983     +
3984     +MODULE_LICENSE("GPL v2");
3985     diff --git a/drivers/rtc/rtc-m41t80.c b/drivers/rtc/rtc-m41t80.c
3986     index c90fba3ed861..6620016869cf 100644
3987     --- a/drivers/rtc/rtc-m41t80.c
3988     +++ b/drivers/rtc/rtc-m41t80.c
3989     @@ -885,7 +885,6 @@ static int m41t80_probe(struct i2c_client *client,
3990     {
3991     struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
3992     int rc = 0;
3993     - struct rtc_device *rtc = NULL;
3994     struct rtc_time tm;
3995     struct m41t80_data *m41t80_data = NULL;
3996     bool wakeup_source = false;
3997     @@ -909,6 +908,10 @@ static int m41t80_probe(struct i2c_client *client,
3998     m41t80_data->features = id->driver_data;
3999     i2c_set_clientdata(client, m41t80_data);
4000    
4001     + m41t80_data->rtc = devm_rtc_allocate_device(&client->dev);
4002     + if (IS_ERR(m41t80_data->rtc))
4003     + return PTR_ERR(m41t80_data->rtc);
4004     +
4005     #ifdef CONFIG_OF
4006     wakeup_source = of_property_read_bool(client->dev.of_node,
4007     "wakeup-source");
4008     @@ -932,15 +935,11 @@ static int m41t80_probe(struct i2c_client *client,
4009     device_init_wakeup(&client->dev, true);
4010     }
4011    
4012     - rtc = devm_rtc_device_register(&client->dev, client->name,
4013     - &m41t80_rtc_ops, THIS_MODULE);
4014     - if (IS_ERR(rtc))
4015     - return PTR_ERR(rtc);
4016     + m41t80_data->rtc->ops = &m41t80_rtc_ops;
4017    
4018     - m41t80_data->rtc = rtc;
4019     if (client->irq <= 0) {
4020     /* We cannot support UIE mode if we do not have an IRQ line */
4021     - rtc->uie_unsupported = 1;
4022     + m41t80_data->rtc->uie_unsupported = 1;
4023     }
4024    
4025     /* Make sure HT (Halt Update) bit is cleared */
4026     @@ -993,6 +992,11 @@ static int m41t80_probe(struct i2c_client *client,
4027     if (m41t80_data->features & M41T80_FEATURE_SQ)
4028     m41t80_sqw_register_clk(m41t80_data);
4029     #endif
4030     +
4031     + rc = rtc_register_device(m41t80_data->rtc);
4032     + if (rc)
4033     + return rc;
4034     +
4035     return 0;
4036     }
4037    
4038     diff --git a/drivers/rtc/rtc-rk808.c b/drivers/rtc/rtc-rk808.c
4039     index 35c9aada07c8..79c8da54e922 100644
4040     --- a/drivers/rtc/rtc-rk808.c
4041     +++ b/drivers/rtc/rtc-rk808.c
4042     @@ -416,12 +416,11 @@ static int rk808_rtc_probe(struct platform_device *pdev)
4043    
4044     device_init_wakeup(&pdev->dev, 1);
4045    
4046     - rk808_rtc->rtc = devm_rtc_device_register(&pdev->dev, "rk808-rtc",
4047     - &rk808_rtc_ops, THIS_MODULE);
4048     - if (IS_ERR(rk808_rtc->rtc)) {
4049     - ret = PTR_ERR(rk808_rtc->rtc);
4050     - return ret;
4051     - }
4052     + rk808_rtc->rtc = devm_rtc_allocate_device(&pdev->dev);
4053     + if (IS_ERR(rk808_rtc->rtc))
4054     + return PTR_ERR(rk808_rtc->rtc);
4055     +
4056     + rk808_rtc->rtc->ops = &rk808_rtc_ops;
4057    
4058     rk808_rtc->irq = platform_get_irq(pdev, 0);
4059     if (rk808_rtc->irq < 0) {
4060     @@ -438,9 +437,10 @@ static int rk808_rtc_probe(struct platform_device *pdev)
4061     if (ret) {
4062     dev_err(&pdev->dev, "Failed to request alarm IRQ %d: %d\n",
4063     rk808_rtc->irq, ret);
4064     + return ret;
4065     }
4066    
4067     - return ret;
4068     + return rtc_register_device(rk808_rtc->rtc);
4069     }
4070    
4071     static struct platform_driver rk808_rtc_driver = {
4072     diff --git a/drivers/rtc/rtc-rp5c01.c b/drivers/rtc/rtc-rp5c01.c
4073     index 026035373ae6..38a12435b5a0 100644
4074     --- a/drivers/rtc/rtc-rp5c01.c
4075     +++ b/drivers/rtc/rtc-rp5c01.c
4076     @@ -249,16 +249,24 @@ static int __init rp5c01_rtc_probe(struct platform_device *dev)
4077    
4078     platform_set_drvdata(dev, priv);
4079    
4080     - rtc = devm_rtc_device_register(&dev->dev, "rtc-rp5c01", &rp5c01_rtc_ops,
4081     - THIS_MODULE);
4082     + rtc = devm_rtc_allocate_device(&dev->dev);
4083     if (IS_ERR(rtc))
4084     return PTR_ERR(rtc);
4085     +
4086     + rtc->ops = &rp5c01_rtc_ops;
4087     +
4088     priv->rtc = rtc;
4089    
4090     error = sysfs_create_bin_file(&dev->dev.kobj, &priv->nvram_attr);
4091     if (error)
4092     return error;
4093    
4094     + error = rtc_register_device(rtc);
4095     + if (error) {
4096     + sysfs_remove_bin_file(&dev->dev.kobj, &priv->nvram_attr);
4097     + return error;
4098     + }
4099     +
4100     return 0;
4101     }
4102    
4103     diff --git a/drivers/rtc/rtc-snvs.c b/drivers/rtc/rtc-snvs.c
4104     index d8ef9e052c4f..9af591d5223c 100644
4105     --- a/drivers/rtc/rtc-snvs.c
4106     +++ b/drivers/rtc/rtc-snvs.c
4107     @@ -132,20 +132,23 @@ static int snvs_rtc_set_time(struct device *dev, struct rtc_time *tm)
4108     {
4109     struct snvs_rtc_data *data = dev_get_drvdata(dev);
4110     unsigned long time;
4111     + int ret;
4112    
4113     rtc_tm_to_time(tm, &time);
4114    
4115     /* Disable RTC first */
4116     - snvs_rtc_enable(data, false);
4117     + ret = snvs_rtc_enable(data, false);
4118     + if (ret)
4119     + return ret;
4120    
4121     /* Write 32-bit time to 47-bit timer, leaving 15 LSBs blank */
4122     regmap_write(data->regmap, data->offset + SNVS_LPSRTCLR, time << CNTR_TO_SECS_SH);
4123     regmap_write(data->regmap, data->offset + SNVS_LPSRTCMR, time >> (32 - CNTR_TO_SECS_SH));
4124    
4125     /* Enable RTC again */
4126     - snvs_rtc_enable(data, true);
4127     + ret = snvs_rtc_enable(data, true);
4128    
4129     - return 0;
4130     + return ret;
4131     }
4132    
4133     static int snvs_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
4134     @@ -288,7 +291,11 @@ static int snvs_rtc_probe(struct platform_device *pdev)
4135     regmap_write(data->regmap, data->offset + SNVS_LPSR, 0xffffffff);
4136    
4137     /* Enable RTC */
4138     - snvs_rtc_enable(data, true);
4139     + ret = snvs_rtc_enable(data, true);
4140     + if (ret) {
4141     + dev_err(&pdev->dev, "failed to enable rtc %d\n", ret);
4142     + goto error_rtc_device_register;
4143     + }
4144    
4145     device_init_wakeup(&pdev->dev, true);
4146    
4147     diff --git a/drivers/rtc/rtc-tx4939.c b/drivers/rtc/rtc-tx4939.c
4148     index 560d9a5e0225..a9528083061d 100644
4149     --- a/drivers/rtc/rtc-tx4939.c
4150     +++ b/drivers/rtc/rtc-tx4939.c
4151     @@ -86,7 +86,8 @@ static int tx4939_rtc_read_time(struct device *dev, struct rtc_time *tm)
4152     for (i = 2; i < 6; i++)
4153     buf[i] = __raw_readl(&rtcreg->dat);
4154     spin_unlock_irq(&pdata->lock);
4155     - sec = (buf[5] << 24) | (buf[4] << 16) | (buf[3] << 8) | buf[2];
4156     + sec = ((unsigned long)buf[5] << 24) | (buf[4] << 16) |
4157     + (buf[3] << 8) | buf[2];
4158     rtc_time_to_tm(sec, tm);
4159     return rtc_valid_tm(tm);
4160     }
4161     @@ -147,7 +148,8 @@ static int tx4939_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
4162     alrm->enabled = (ctl & TX4939_RTCCTL_ALME) ? 1 : 0;
4163     alrm->pending = (ctl & TX4939_RTCCTL_ALMD) ? 1 : 0;
4164     spin_unlock_irq(&pdata->lock);
4165     - sec = (buf[5] << 24) | (buf[4] << 16) | (buf[3] << 8) | buf[2];
4166     + sec = ((unsigned long)buf[5] << 24) | (buf[4] << 16) |
4167     + (buf[3] << 8) | buf[2];
4168     rtc_time_to_tm(sec, &alrm->time);
4169     return rtc_valid_tm(&alrm->time);
4170     }
4171     diff --git a/drivers/s390/scsi/zfcp_dbf.c b/drivers/s390/scsi/zfcp_dbf.c
4172     index a8b831000b2d..18c4f933e8b9 100644
4173     --- a/drivers/s390/scsi/zfcp_dbf.c
4174     +++ b/drivers/s390/scsi/zfcp_dbf.c
4175     @@ -4,7 +4,7 @@
4176     *
4177     * Debug traces for zfcp.
4178     *
4179     - * Copyright IBM Corp. 2002, 2017
4180     + * Copyright IBM Corp. 2002, 2018
4181     */
4182    
4183     #define KMSG_COMPONENT "zfcp"
4184     @@ -308,6 +308,27 @@ void zfcp_dbf_rec_trig(char *tag, struct zfcp_adapter *adapter,
4185     spin_unlock_irqrestore(&dbf->rec_lock, flags);
4186     }
4187    
4188     +/**
4189     + * zfcp_dbf_rec_trig_lock - trace event related to triggered recovery with lock
4190     + * @tag: identifier for event
4191     + * @adapter: adapter on which the erp_action should run
4192     + * @port: remote port involved in the erp_action
4193     + * @sdev: scsi device involved in the erp_action
4194     + * @want: wanted erp_action
4195     + * @need: required erp_action
4196     + *
4197     + * The adapter->erp_lock must not be held.
4198     + */
4199     +void zfcp_dbf_rec_trig_lock(char *tag, struct zfcp_adapter *adapter,
4200     + struct zfcp_port *port, struct scsi_device *sdev,
4201     + u8 want, u8 need)
4202     +{
4203     + unsigned long flags;
4204     +
4205     + read_lock_irqsave(&adapter->erp_lock, flags);
4206     + zfcp_dbf_rec_trig(tag, adapter, port, sdev, want, need);
4207     + read_unlock_irqrestore(&adapter->erp_lock, flags);
4208     +}
4209    
4210     /**
4211     * zfcp_dbf_rec_run_lvl - trace event related to running recovery
4212     diff --git a/drivers/s390/scsi/zfcp_ext.h b/drivers/s390/scsi/zfcp_ext.h
4213     index 8ca2ab7deaa9..b1cbb14fb2ae 100644
4214     --- a/drivers/s390/scsi/zfcp_ext.h
4215     +++ b/drivers/s390/scsi/zfcp_ext.h
4216     @@ -4,7 +4,7 @@
4217     *
4218     * External function declarations.
4219     *
4220     - * Copyright IBM Corp. 2002, 2016
4221     + * Copyright IBM Corp. 2002, 2018
4222     */
4223    
4224     #ifndef ZFCP_EXT_H
4225     @@ -35,6 +35,9 @@ extern int zfcp_dbf_adapter_register(struct zfcp_adapter *);
4226     extern void zfcp_dbf_adapter_unregister(struct zfcp_adapter *);
4227     extern void zfcp_dbf_rec_trig(char *, struct zfcp_adapter *,
4228     struct zfcp_port *, struct scsi_device *, u8, u8);
4229     +extern void zfcp_dbf_rec_trig_lock(char *tag, struct zfcp_adapter *adapter,
4230     + struct zfcp_port *port,
4231     + struct scsi_device *sdev, u8 want, u8 need);
4232     extern void zfcp_dbf_rec_run(char *, struct zfcp_erp_action *);
4233     extern void zfcp_dbf_rec_run_lvl(int level, char *tag,
4234     struct zfcp_erp_action *erp);
4235     diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c
4236     index 4d2ba5682493..22f9562f415c 100644
4237     --- a/drivers/s390/scsi/zfcp_scsi.c
4238     +++ b/drivers/s390/scsi/zfcp_scsi.c
4239     @@ -4,7 +4,7 @@
4240     *
4241     * Interface to Linux SCSI midlayer.
4242     *
4243     - * Copyright IBM Corp. 2002, 2017
4244     + * Copyright IBM Corp. 2002, 2018
4245     */
4246    
4247     #define KMSG_COMPONENT "zfcp"
4248     @@ -618,9 +618,9 @@ static void zfcp_scsi_rport_register(struct zfcp_port *port)
4249     ids.port_id = port->d_id;
4250     ids.roles = FC_RPORT_ROLE_FCP_TARGET;
4251    
4252     - zfcp_dbf_rec_trig("scpaddy", port->adapter, port, NULL,
4253     - ZFCP_PSEUDO_ERP_ACTION_RPORT_ADD,
4254     - ZFCP_PSEUDO_ERP_ACTION_RPORT_ADD);
4255     + zfcp_dbf_rec_trig_lock("scpaddy", port->adapter, port, NULL,
4256     + ZFCP_PSEUDO_ERP_ACTION_RPORT_ADD,
4257     + ZFCP_PSEUDO_ERP_ACTION_RPORT_ADD);
4258     rport = fc_remote_port_add(port->adapter->scsi_host, 0, &ids);
4259     if (!rport) {
4260     dev_err(&port->adapter->ccw_device->dev,
4261     @@ -642,9 +642,9 @@ static void zfcp_scsi_rport_block(struct zfcp_port *port)
4262     struct fc_rport *rport = port->rport;
4263    
4264     if (rport) {
4265     - zfcp_dbf_rec_trig("scpdely", port->adapter, port, NULL,
4266     - ZFCP_PSEUDO_ERP_ACTION_RPORT_DEL,
4267     - ZFCP_PSEUDO_ERP_ACTION_RPORT_DEL);
4268     + zfcp_dbf_rec_trig_lock("scpdely", port->adapter, port, NULL,
4269     + ZFCP_PSEUDO_ERP_ACTION_RPORT_DEL,
4270     + ZFCP_PSEUDO_ERP_ACTION_RPORT_DEL);
4271     fc_remote_port_delete(rport);
4272     port->rport = NULL;
4273     }
4274     diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
4275     index 3696f9ded252..998788a967be 100644
4276     --- a/drivers/scsi/aacraid/commsup.c
4277     +++ b/drivers/scsi/aacraid/commsup.c
4278     @@ -1530,9 +1530,10 @@ static int _aac_reset_adapter(struct aac_dev *aac, int forced, u8 reset_type)
4279     host = aac->scsi_host_ptr;
4280     scsi_block_requests(host);
4281     aac_adapter_disable_int(aac);
4282     - if (aac->thread->pid != current->pid) {
4283     + if (aac->thread && aac->thread->pid != current->pid) {
4284     spin_unlock_irq(host->host_lock);
4285     kthread_stop(aac->thread);
4286     + aac->thread = NULL;
4287     jafo = 1;
4288     }
4289    
4290     @@ -1619,6 +1620,7 @@ static int _aac_reset_adapter(struct aac_dev *aac, int forced, u8 reset_type)
4291     aac->name);
4292     if (IS_ERR(aac->thread)) {
4293     retval = PTR_ERR(aac->thread);
4294     + aac->thread = NULL;
4295     goto out;
4296     }
4297     }
4298     diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
4299     index 509fe23fafe1..4917649cacd5 100644
4300     --- a/drivers/scsi/aacraid/linit.c
4301     +++ b/drivers/scsi/aacraid/linit.c
4302     @@ -1565,6 +1565,7 @@ static void __aac_shutdown(struct aac_dev * aac)
4303     up(&fib->event_wait);
4304     }
4305     kthread_stop(aac->thread);
4306     + aac->thread = NULL;
4307     }
4308    
4309     aac_send_shutdown(aac);
4310     @@ -1690,8 +1691,10 @@ static int aac_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
4311     * Map in the registers from the adapter.
4312     */
4313     aac->base_size = AAC_MIN_FOOTPRINT_SIZE;
4314     - if ((*aac_drivers[index].init)(aac))
4315     + if ((*aac_drivers[index].init)(aac)) {
4316     + error = -ENODEV;
4317     goto out_unmap;
4318     + }
4319    
4320     if (aac->sync_mode) {
4321     if (aac_sync_mode)
4322     diff --git a/drivers/scsi/bnx2fc/bnx2fc_io.c b/drivers/scsi/bnx2fc/bnx2fc_io.c
4323     index 5b6153f23f01..6626b28ba8fe 100644
4324     --- a/drivers/scsi/bnx2fc/bnx2fc_io.c
4325     +++ b/drivers/scsi/bnx2fc/bnx2fc_io.c
4326     @@ -1865,6 +1865,7 @@ void bnx2fc_process_scsi_cmd_compl(struct bnx2fc_cmd *io_req,
4327     /* we will not receive ABTS response for this IO */
4328     BNX2FC_IO_DBG(io_req, "Timer context finished processing "
4329     "this scsi cmd\n");
4330     + return;
4331     }
4332    
4333     /* Cancel the timeout_work, as we received IO completion */
4334     diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c
4335     index 4d934d6c3e13..e11eff6b0e97 100644
4336     --- a/drivers/scsi/iscsi_tcp.c
4337     +++ b/drivers/scsi/iscsi_tcp.c
4338     @@ -37,6 +37,7 @@
4339     #include <linux/kfifo.h>
4340     #include <linux/scatterlist.h>
4341     #include <linux/module.h>
4342     +#include <linux/backing-dev.h>
4343     #include <net/tcp.h>
4344     #include <scsi/scsi_cmnd.h>
4345     #include <scsi/scsi_device.h>
4346     @@ -952,6 +953,13 @@ static int iscsi_sw_tcp_slave_alloc(struct scsi_device *sdev)
4347    
4348     static int iscsi_sw_tcp_slave_configure(struct scsi_device *sdev)
4349     {
4350     + struct iscsi_sw_tcp_host *tcp_sw_host = iscsi_host_priv(sdev->host);
4351     + struct iscsi_session *session = tcp_sw_host->session;
4352     + struct iscsi_conn *conn = session->leadconn;
4353     +
4354     + if (conn->datadgst_en)
4355     + sdev->request_queue->backing_dev_info->capabilities
4356     + |= BDI_CAP_STABLE_WRITES;
4357     blk_queue_bounce_limit(sdev->request_queue, BLK_BOUNCE_ANY);
4358     blk_queue_dma_alignment(sdev->request_queue, 0);
4359     return 0;
4360     diff --git a/drivers/scsi/libsas/sas_scsi_host.c b/drivers/scsi/libsas/sas_scsi_host.c
4361     index 10b17da20176..0c4b186c852a 100644
4362     --- a/drivers/scsi/libsas/sas_scsi_host.c
4363     +++ b/drivers/scsi/libsas/sas_scsi_host.c
4364     @@ -222,6 +222,7 @@ int sas_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
4365     static void sas_eh_finish_cmd(struct scsi_cmnd *cmd)
4366     {
4367     struct sas_ha_struct *sas_ha = SHOST_TO_SAS_HA(cmd->device->host);
4368     + struct domain_device *dev = cmd_to_domain_dev(cmd);
4369     struct sas_task *task = TO_SAS_TASK(cmd);
4370    
4371     /* At this point, we only get called following an actual abort
4372     @@ -230,6 +231,14 @@ static void sas_eh_finish_cmd(struct scsi_cmnd *cmd)
4373     */
4374     sas_end_task(cmd, task);
4375    
4376     + if (dev_is_sata(dev)) {
4377     + /* defer commands to libata so that libata EH can
4378     + * handle ata qcs correctly
4379     + */
4380     + list_move_tail(&cmd->eh_entry, &sas_ha->eh_ata_q);
4381     + return;
4382     + }
4383     +
4384     /* now finish the command and move it on to the error
4385     * handler done list, this also takes it off the
4386     * error handler pending list.
4387     @@ -237,22 +246,6 @@ static void sas_eh_finish_cmd(struct scsi_cmnd *cmd)
4388     scsi_eh_finish_cmd(cmd, &sas_ha->eh_done_q);
4389     }
4390    
4391     -static void sas_eh_defer_cmd(struct scsi_cmnd *cmd)
4392     -{
4393     - struct domain_device *dev = cmd_to_domain_dev(cmd);
4394     - struct sas_ha_struct *ha = dev->port->ha;
4395     - struct sas_task *task = TO_SAS_TASK(cmd);
4396     -
4397     - if (!dev_is_sata(dev)) {
4398     - sas_eh_finish_cmd(cmd);
4399     - return;
4400     - }
4401     -
4402     - /* report the timeout to libata */
4403     - sas_end_task(cmd, task);
4404     - list_move_tail(&cmd->eh_entry, &ha->eh_ata_q);
4405     -}
4406     -
4407     static void sas_scsi_clear_queue_lu(struct list_head *error_q, struct scsi_cmnd *my_cmd)
4408     {
4409     struct scsi_cmnd *cmd, *n;
4410     @@ -260,7 +253,7 @@ static void sas_scsi_clear_queue_lu(struct list_head *error_q, struct scsi_cmnd
4411     list_for_each_entry_safe(cmd, n, error_q, eh_entry) {
4412     if (cmd->device->sdev_target == my_cmd->device->sdev_target &&
4413     cmd->device->lun == my_cmd->device->lun)
4414     - sas_eh_defer_cmd(cmd);
4415     + sas_eh_finish_cmd(cmd);
4416     }
4417     }
4418    
4419     @@ -630,12 +623,12 @@ static void sas_eh_handle_sas_errors(struct Scsi_Host *shost, struct list_head *
4420     case TASK_IS_DONE:
4421     SAS_DPRINTK("%s: task 0x%p is done\n", __func__,
4422     task);
4423     - sas_eh_defer_cmd(cmd);
4424     + sas_eh_finish_cmd(cmd);
4425     continue;
4426     case TASK_IS_ABORTED:
4427     SAS_DPRINTK("%s: task 0x%p is aborted\n",
4428     __func__, task);
4429     - sas_eh_defer_cmd(cmd);
4430     + sas_eh_finish_cmd(cmd);
4431     continue;
4432     case TASK_IS_AT_LU:
4433     SAS_DPRINTK("task 0x%p is at LU: lu recover\n", task);
4434     @@ -646,7 +639,7 @@ static void sas_eh_handle_sas_errors(struct Scsi_Host *shost, struct list_head *
4435     "recovered\n",
4436     SAS_ADDR(task->dev),
4437     cmd->device->lun);
4438     - sas_eh_defer_cmd(cmd);
4439     + sas_eh_finish_cmd(cmd);
4440     sas_scsi_clear_queue_lu(work_q, cmd);
4441     goto Again;
4442     }
4443     diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
4444     index dc6519b2c53a..3da242201cb4 100644
4445     --- a/drivers/scsi/lpfc/lpfc_attr.c
4446     +++ b/drivers/scsi/lpfc/lpfc_attr.c
4447     @@ -871,7 +871,12 @@ lpfc_issue_lip(struct Scsi_Host *shost)
4448     LPFC_MBOXQ_t *pmboxq;
4449     int mbxstatus = MBXERR_ERROR;
4450    
4451     + /*
4452     + * If the link is offline, disabled or BLOCK_MGMT_IO
4453     + * it doesn't make any sense to allow issue_lip
4454     + */
4455     if ((vport->fc_flag & FC_OFFLINE_MODE) ||
4456     + (phba->hba_flag & LINK_DISABLED) ||
4457     (phba->sli.sli_flag & LPFC_BLOCK_MGMT_IO))
4458     return -EPERM;
4459    
4460     diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
4461     index d9a03beb76a4..4962d665b4d2 100644
4462     --- a/drivers/scsi/lpfc/lpfc_hbadisc.c
4463     +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
4464     @@ -698,8 +698,9 @@ lpfc_work_done(struct lpfc_hba *phba)
4465     phba->hba_flag & HBA_SP_QUEUE_EVT)) {
4466     if (pring->flag & LPFC_STOP_IOCB_EVENT) {
4467     pring->flag |= LPFC_DEFERRED_RING_EVENT;
4468     - /* Set the lpfc data pending flag */
4469     - set_bit(LPFC_DATA_READY, &phba->data_flags);
4470     + /* Preserve legacy behavior. */
4471     + if (!(phba->hba_flag & HBA_SP_QUEUE_EVT))
4472     + set_bit(LPFC_DATA_READY, &phba->data_flags);
4473     } else {
4474     if (phba->link_state >= LPFC_LINK_UP ||
4475     phba->link_flag & LS_MDS_LOOPBACK) {
4476     diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
4477     index 455f3ce9fda9..dc83498024dc 100644
4478     --- a/drivers/scsi/lpfc/lpfc_sli.c
4479     +++ b/drivers/scsi/lpfc/lpfc_sli.c
4480     @@ -129,6 +129,8 @@ lpfc_sli4_wq_put(struct lpfc_queue *q, union lpfc_wqe *wqe)
4481     /* set consumption flag every once in a while */
4482     if (!((q->host_index + 1) % q->entry_repost))
4483     bf_set(wqe_wqec, &wqe->generic.wqe_com, 1);
4484     + else
4485     + bf_set(wqe_wqec, &wqe->generic.wqe_com, 0);
4486     if (q->phba->sli3_options & LPFC_SLI4_PHWQ_ENABLED)
4487     bf_set(wqe_wqid, &wqe->generic.wqe_com, q->queue_id);
4488     lpfc_sli_pcimem_bcopy(wqe, temp_wqe, q->entry_size);
4489     diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
4490     index 6efa739a1912..9b716c8c558a 100644
4491     --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
4492     +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
4493     @@ -1921,8 +1921,11 @@ _base_assign_reply_queues(struct MPT3SAS_ADAPTER *ioc)
4494     continue;
4495     }
4496    
4497     - for_each_cpu(cpu, mask)
4498     + for_each_cpu_and(cpu, mask, cpu_online_mask) {
4499     + if (cpu >= ioc->cpu_msix_table_sz)
4500     + break;
4501     ioc->cpu_msix_table[cpu] = reply_q->msix_index;
4502     + }
4503     }
4504     return;
4505     }
4506     diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
4507     index 139219c994e9..ae5e579ac473 100644
4508     --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
4509     +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
4510     @@ -8941,7 +8941,7 @@ _scsih_probe(struct pci_dev *pdev, const struct pci_device_id *id)
4511     snprintf(ioc->firmware_event_name, sizeof(ioc->firmware_event_name),
4512     "fw_event_%s%d", ioc->driver_name, ioc->id);
4513     ioc->firmware_event_thread = alloc_ordered_workqueue(
4514     - ioc->firmware_event_name, WQ_MEM_RECLAIM);
4515     + ioc->firmware_event_name, 0);
4516     if (!ioc->firmware_event_thread) {
4517     pr_err(MPT3SAS_FMT "failure at %s:%d/%s()!\n",
4518     ioc->name, __FILE__, __LINE__, __func__);
4519     diff --git a/drivers/scsi/mvsas/mv_94xx.c b/drivers/scsi/mvsas/mv_94xx.c
4520     index 7de5d8d75480..eb5471bc7263 100644
4521     --- a/drivers/scsi/mvsas/mv_94xx.c
4522     +++ b/drivers/scsi/mvsas/mv_94xx.c
4523     @@ -1080,16 +1080,16 @@ static int mvs_94xx_gpio_write(struct mvs_prv_info *mvs_prv,
4524     void __iomem *regs = mvi->regs_ex - 0x10200;
4525    
4526     int drive = (i/3) & (4-1); /* drive number on host */
4527     - u32 block = mr32(MVS_SGPIO_DCTRL +
4528     + int driveshift = drive * 8; /* bit offset of drive */
4529     + u32 block = ioread32be(regs + MVS_SGPIO_DCTRL +
4530     MVS_SGPIO_HOST_OFFSET * mvi->id);
4531    
4532     -
4533     /*
4534     * if bit is set then create a mask with the first
4535     * bit of the drive set in the mask ...
4536     */
4537     - u32 bit = (write_data[i/8] & (1 << (i&(8-1)))) ?
4538     - 1<<(24-drive*8) : 0;
4539     + u32 bit = get_unaligned_be32(write_data) & (1 << i) ?
4540     + 1 << driveshift : 0;
4541    
4542     /*
4543     * ... and then shift it to the right position based
4544     @@ -1098,26 +1098,27 @@ static int mvs_94xx_gpio_write(struct mvs_prv_info *mvs_prv,
4545     switch (i%3) {
4546     case 0: /* activity */
4547     block &= ~((0x7 << MVS_SGPIO_DCTRL_ACT_SHIFT)
4548     - << (24-drive*8));
4549     + << driveshift);
4550     /* hardwire activity bit to SOF */
4551     block |= LED_BLINKA_SOF << (
4552     MVS_SGPIO_DCTRL_ACT_SHIFT +
4553     - (24-drive*8));
4554     + driveshift);
4555     break;
4556     case 1: /* id */
4557     block &= ~((0x3 << MVS_SGPIO_DCTRL_LOC_SHIFT)
4558     - << (24-drive*8));
4559     + << driveshift);
4560     block |= bit << MVS_SGPIO_DCTRL_LOC_SHIFT;
4561     break;
4562     case 2: /* fail */
4563     block &= ~((0x7 << MVS_SGPIO_DCTRL_ERR_SHIFT)
4564     - << (24-drive*8));
4565     + << driveshift);
4566     block |= bit << MVS_SGPIO_DCTRL_ERR_SHIFT;
4567     break;
4568     }
4569    
4570     - mw32(MVS_SGPIO_DCTRL + MVS_SGPIO_HOST_OFFSET * mvi->id,
4571     - block);
4572     + iowrite32be(block,
4573     + regs + MVS_SGPIO_DCTRL +
4574     + MVS_SGPIO_HOST_OFFSET * mvi->id);
4575    
4576     }
4577    
4578     @@ -1132,7 +1133,7 @@ static int mvs_94xx_gpio_write(struct mvs_prv_info *mvs_prv,
4579     void __iomem *regs = mvi->regs_ex - 0x10200;
4580    
4581     mw32(MVS_SGPIO_DCTRL + MVS_SGPIO_HOST_OFFSET * mvi->id,
4582     - be32_to_cpu(((u32 *) write_data)[i]));
4583     + ((u32 *) write_data)[i]);
4584     }
4585     return reg_count;
4586     }
4587     diff --git a/drivers/scsi/qedi/qedi_fw.c b/drivers/scsi/qedi/qedi_fw.c
4588     index 93d54acd4a22..2e5e04a7623f 100644
4589     --- a/drivers/scsi/qedi/qedi_fw.c
4590     +++ b/drivers/scsi/qedi/qedi_fw.c
4591     @@ -769,6 +769,11 @@ static void qedi_process_cmd_cleanup_resp(struct qedi_ctx *qedi,
4592    
4593     iscsi_cid = cqe->conn_id;
4594     qedi_conn = qedi->cid_que.conn_cid_tbl[iscsi_cid];
4595     + if (!qedi_conn) {
4596     + QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO,
4597     + "icid not found 0x%x\n", cqe->conn_id);
4598     + return;
4599     + }
4600    
4601     /* Based on this itt get the corresponding qedi_cmd */
4602     spin_lock_bh(&qedi_conn->tmf_work_lock);
4603     diff --git a/drivers/scsi/qedi/qedi_main.c b/drivers/scsi/qedi/qedi_main.c
4604     index cccc34adc0e0..1573749fe615 100644
4605     --- a/drivers/scsi/qedi/qedi_main.c
4606     +++ b/drivers/scsi/qedi/qedi_main.c
4607     @@ -1840,8 +1840,8 @@ static ssize_t qedi_show_boot_ini_info(void *data, int type, char *buf)
4608    
4609     switch (type) {
4610     case ISCSI_BOOT_INI_INITIATOR_NAME:
4611     - rc = snprintf(str, NVM_ISCSI_CFG_ISCSI_NAME_MAX_LEN, "%s\n",
4612     - initiator->initiator_name.byte);
4613     + rc = sprintf(str, "%.*s\n", NVM_ISCSI_CFG_ISCSI_NAME_MAX_LEN,
4614     + initiator->initiator_name.byte);
4615     break;
4616     default:
4617     rc = 0;
4618     @@ -1908,8 +1908,8 @@ qedi_show_boot_tgt_info(struct qedi_ctx *qedi, int type,
4619    
4620     switch (type) {
4621     case ISCSI_BOOT_TGT_NAME:
4622     - rc = snprintf(str, NVM_ISCSI_CFG_ISCSI_NAME_MAX_LEN, "%s\n",
4623     - block->target[idx].target_name.byte);
4624     + rc = sprintf(str, "%.*s\n", NVM_ISCSI_CFG_ISCSI_NAME_MAX_LEN,
4625     + block->target[idx].target_name.byte);
4626     break;
4627     case ISCSI_BOOT_TGT_IP_ADDR:
4628     if (ipv6_en)
4629     @@ -1930,20 +1930,20 @@ qedi_show_boot_tgt_info(struct qedi_ctx *qedi, int type,
4630     block->target[idx].lun.value[0]);
4631     break;
4632     case ISCSI_BOOT_TGT_CHAP_NAME:
4633     - rc = snprintf(str, NVM_ISCSI_CFG_CHAP_NAME_MAX_LEN, "%s\n",
4634     - chap_name);
4635     + rc = sprintf(str, "%.*s\n", NVM_ISCSI_CFG_CHAP_NAME_MAX_LEN,
4636     + chap_name);
4637     break;
4638     case ISCSI_BOOT_TGT_CHAP_SECRET:
4639     - rc = snprintf(str, NVM_ISCSI_CFG_CHAP_PWD_MAX_LEN, "%s\n",
4640     - chap_secret);
4641     + rc = sprintf(str, "%.*s\n", NVM_ISCSI_CFG_CHAP_NAME_MAX_LEN,
4642     + chap_secret);
4643     break;
4644     case ISCSI_BOOT_TGT_REV_CHAP_NAME:
4645     - rc = snprintf(str, NVM_ISCSI_CFG_CHAP_NAME_MAX_LEN, "%s\n",
4646     - mchap_name);
4647     + rc = sprintf(str, "%.*s\n", NVM_ISCSI_CFG_CHAP_NAME_MAX_LEN,
4648     + mchap_name);
4649     break;
4650     case ISCSI_BOOT_TGT_REV_CHAP_SECRET:
4651     - rc = snprintf(str, NVM_ISCSI_CFG_CHAP_PWD_MAX_LEN, "%s\n",
4652     - mchap_secret);
4653     + rc = sprintf(str, "%.*s\n", NVM_ISCSI_CFG_CHAP_NAME_MAX_LEN,
4654     + mchap_secret);
4655     break;
4656     case ISCSI_BOOT_TGT_FLAGS:
4657     rc = snprintf(str, 3, "%hhd\n", SYSFS_FLAG_FW_SEL_BOOT);
4658     diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
4659     index d95b879c2bca..13a00a42b3ca 100644
4660     --- a/drivers/scsi/qla2xxx/qla_isr.c
4661     +++ b/drivers/scsi/qla2xxx/qla_isr.c
4662     @@ -272,7 +272,8 @@ qla2x00_mbx_completion(scsi_qla_host_t *vha, uint16_t mb0)
4663     struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
4664    
4665     /* Read all mbox registers? */
4666     - mboxes = (1 << ha->mbx_count) - 1;
4667     + WARN_ON_ONCE(ha->mbx_count > 32);
4668     + mboxes = (1ULL << ha->mbx_count) - 1;
4669     if (!ha->mcp)
4670     ql_dbg(ql_dbg_async, vha, 0x5001, "MBX pointer ERROR.\n");
4671     else
4672     @@ -2821,7 +2822,8 @@ qla24xx_mbx_completion(scsi_qla_host_t *vha, uint16_t mb0)
4673     struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
4674    
4675     /* Read all mbox registers? */
4676     - mboxes = (1 << ha->mbx_count) - 1;
4677     + WARN_ON_ONCE(ha->mbx_count > 32);
4678     + mboxes = (1ULL << ha->mbx_count) - 1;
4679     if (!ha->mcp)
4680     ql_dbg(ql_dbg_async, vha, 0x504e, "MBX pointer ERROR.\n");
4681     else
4682     diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
4683     index 8e7c0626f8b5..1be76695e692 100644
4684     --- a/drivers/scsi/qla2xxx/qla_os.c
4685     +++ b/drivers/scsi/qla2xxx/qla_os.c
4686     @@ -3581,6 +3581,8 @@ qla2x00_remove_one(struct pci_dev *pdev)
4687     }
4688     qla2x00_wait_for_hba_ready(base_vha);
4689    
4690     + qla2x00_wait_for_sess_deletion(base_vha);
4691     +
4692     /*
4693     * if UNLOAD flag is already set, then continue unload,
4694     * where it was set first.
4695     diff --git a/drivers/scsi/qla4xxx/ql4_def.h b/drivers/scsi/qla4xxx/ql4_def.h
4696     index fc233717355f..817f312023a9 100644
4697     --- a/drivers/scsi/qla4xxx/ql4_def.h
4698     +++ b/drivers/scsi/qla4xxx/ql4_def.h
4699     @@ -168,6 +168,8 @@
4700     #define DEV_DB_NON_PERSISTENT 0
4701     #define DEV_DB_PERSISTENT 1
4702    
4703     +#define QL4_ISP_REG_DISCONNECT 0xffffffffU
4704     +
4705     #define COPY_ISID(dst_isid, src_isid) { \
4706     int i, j; \
4707     for (i = 0, j = ISID_SIZE - 1; i < ISID_SIZE;) \
4708     diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
4709     index 64c6fa563fdb..a6aa08d9a171 100644
4710     --- a/drivers/scsi/qla4xxx/ql4_os.c
4711     +++ b/drivers/scsi/qla4xxx/ql4_os.c
4712     @@ -262,6 +262,24 @@ static struct iscsi_transport qla4xxx_iscsi_transport = {
4713    
4714     static struct scsi_transport_template *qla4xxx_scsi_transport;
4715    
4716     +static int qla4xxx_isp_check_reg(struct scsi_qla_host *ha)
4717     +{
4718     + u32 reg_val = 0;
4719     + int rval = QLA_SUCCESS;
4720     +
4721     + if (is_qla8022(ha))
4722     + reg_val = readl(&ha->qla4_82xx_reg->host_status);
4723     + else if (is_qla8032(ha) || is_qla8042(ha))
4724     + reg_val = qla4_8xxx_rd_direct(ha, QLA8XXX_PEG_ALIVE_COUNTER);
4725     + else
4726     + reg_val = readw(&ha->reg->ctrl_status);
4727     +
4728     + if (reg_val == QL4_ISP_REG_DISCONNECT)
4729     + rval = QLA_ERROR;
4730     +
4731     + return rval;
4732     +}
4733     +
4734     static int qla4xxx_send_ping(struct Scsi_Host *shost, uint32_t iface_num,
4735     uint32_t iface_type, uint32_t payload_size,
4736     uint32_t pid, struct sockaddr *dst_addr)
4737     @@ -9188,10 +9206,17 @@ static int qla4xxx_eh_abort(struct scsi_cmnd *cmd)
4738     struct srb *srb = NULL;
4739     int ret = SUCCESS;
4740     int wait = 0;
4741     + int rval;
4742    
4743     ql4_printk(KERN_INFO, ha, "scsi%ld:%d:%llu: Abort command issued cmd=%p, cdb=0x%x\n",
4744     ha->host_no, id, lun, cmd, cmd->cmnd[0]);
4745    
4746     + rval = qla4xxx_isp_check_reg(ha);
4747     + if (rval != QLA_SUCCESS) {
4748     + ql4_printk(KERN_INFO, ha, "PCI/Register disconnect, exiting.\n");
4749     + return FAILED;
4750     + }
4751     +
4752     spin_lock_irqsave(&ha->hardware_lock, flags);
4753     srb = (struct srb *) CMD_SP(cmd);
4754     if (!srb) {
4755     @@ -9243,6 +9268,7 @@ static int qla4xxx_eh_device_reset(struct scsi_cmnd *cmd)
4756     struct scsi_qla_host *ha = to_qla_host(cmd->device->host);
4757     struct ddb_entry *ddb_entry = cmd->device->hostdata;
4758     int ret = FAILED, stat;
4759     + int rval;
4760    
4761     if (!ddb_entry)
4762     return ret;
4763     @@ -9262,6 +9288,12 @@ static int qla4xxx_eh_device_reset(struct scsi_cmnd *cmd)
4764     cmd, jiffies, cmd->request->timeout / HZ,
4765     ha->dpc_flags, cmd->result, cmd->allowed));
4766    
4767     + rval = qla4xxx_isp_check_reg(ha);
4768     + if (rval != QLA_SUCCESS) {
4769     + ql4_printk(KERN_INFO, ha, "PCI/Register disconnect, exiting.\n");
4770     + return FAILED;
4771     + }
4772     +
4773     /* FIXME: wait for hba to go online */
4774     stat = qla4xxx_reset_lun(ha, ddb_entry, cmd->device->lun);
4775     if (stat != QLA_SUCCESS) {
4776     @@ -9305,6 +9337,7 @@ static int qla4xxx_eh_target_reset(struct scsi_cmnd *cmd)
4777     struct scsi_qla_host *ha = to_qla_host(cmd->device->host);
4778     struct ddb_entry *ddb_entry = cmd->device->hostdata;
4779     int stat, ret;
4780     + int rval;
4781    
4782     if (!ddb_entry)
4783     return FAILED;
4784     @@ -9322,6 +9355,12 @@ static int qla4xxx_eh_target_reset(struct scsi_cmnd *cmd)
4785     ha->host_no, cmd, jiffies, cmd->request->timeout / HZ,
4786     ha->dpc_flags, cmd->result, cmd->allowed));
4787    
4788     + rval = qla4xxx_isp_check_reg(ha);
4789     + if (rval != QLA_SUCCESS) {
4790     + ql4_printk(KERN_INFO, ha, "PCI/Register disconnect, exiting.\n");
4791     + return FAILED;
4792     + }
4793     +
4794     stat = qla4xxx_reset_target(ha, ddb_entry);
4795     if (stat != QLA_SUCCESS) {
4796     starget_printk(KERN_INFO, scsi_target(cmd->device),
4797     @@ -9376,9 +9415,16 @@ static int qla4xxx_eh_host_reset(struct scsi_cmnd *cmd)
4798     {
4799     int return_status = FAILED;
4800     struct scsi_qla_host *ha;
4801     + int rval;
4802    
4803     ha = to_qla_host(cmd->device->host);
4804    
4805     + rval = qla4xxx_isp_check_reg(ha);
4806     + if (rval != QLA_SUCCESS) {
4807     + ql4_printk(KERN_INFO, ha, "PCI/Register disconnect, exiting.\n");
4808     + return FAILED;
4809     + }
4810     +
4811     if ((is_qla8032(ha) || is_qla8042(ha)) && ql4xdontresethba)
4812     qla4_83xx_set_idc_dontreset(ha);
4813    
4814     diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
4815     index 359386730523..bfd8f12d4e9a 100644
4816     --- a/drivers/scsi/scsi_lib.c
4817     +++ b/drivers/scsi/scsi_lib.c
4818     @@ -855,6 +855,17 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
4819     /* for passthrough error may be set */
4820     error = BLK_STS_OK;
4821     }
4822     + /*
4823     + * Another corner case: the SCSI status byte is non-zero but 'good'.
4824     + * Example: PRE-FETCH command returns SAM_STAT_CONDITION_MET when
4825     + * it is able to fit nominated LBs in its cache (and SAM_STAT_GOOD
4826     + * if it can't fit). Treat SAM_STAT_CONDITION_MET and the related
4827     + * intermediate statuses (both obsolete in SAM-4) as good.
4828     + */
4829     + if (status_byte(result) && scsi_status_is_good(result)) {
4830     + result = 0;
4831     + error = BLK_STS_OK;
4832     + }
4833    
4834     /*
4835     * special case: failed zero length commands always need to
4836     diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
4837     index 2f9912de2212..4a532318b211 100644
4838     --- a/drivers/scsi/sd.c
4839     +++ b/drivers/scsi/sd.c
4840     @@ -2608,6 +2608,7 @@ sd_read_write_protect_flag(struct scsi_disk *sdkp, unsigned char *buffer)
4841     int res;
4842     struct scsi_device *sdp = sdkp->device;
4843     struct scsi_mode_data data;
4844     + int disk_ro = get_disk_ro(sdkp->disk);
4845     int old_wp = sdkp->write_prot;
4846    
4847     set_disk_ro(sdkp->disk, 0);
4848     @@ -2648,7 +2649,7 @@ sd_read_write_protect_flag(struct scsi_disk *sdkp, unsigned char *buffer)
4849     "Test WP failed, assume Write Enabled\n");
4850     } else {
4851     sdkp->write_prot = ((data.device_specific & 0x80) != 0);
4852     - set_disk_ro(sdkp->disk, sdkp->write_prot);
4853     + set_disk_ro(sdkp->disk, sdkp->write_prot || disk_ro);
4854     if (sdkp->first_scan || old_wp != sdkp->write_prot) {
4855     sd_printk(KERN_NOTICE, sdkp, "Write Protect is %s\n",
4856     sdkp->write_prot ? "on" : "off");
4857     diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
4858     index aa28874e8fb9..17a4cc138b00 100644
4859     --- a/drivers/scsi/sg.c
4860     +++ b/drivers/scsi/sg.c
4861     @@ -1894,7 +1894,7 @@ sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size)
4862     num = (rem_sz > scatter_elem_sz_prev) ?
4863     scatter_elem_sz_prev : rem_sz;
4864    
4865     - schp->pages[k] = alloc_pages(gfp_mask, order);
4866     + schp->pages[k] = alloc_pages(gfp_mask | __GFP_ZERO, order);
4867     if (!schp->pages[k])
4868     goto out;
4869    
4870     diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
4871     index a3e480e7a257..c44de0b4a995 100644
4872     --- a/drivers/scsi/storvsc_drv.c
4873     +++ b/drivers/scsi/storvsc_drv.c
4874     @@ -1661,7 +1661,7 @@ static struct scsi_host_template scsi_driver = {
4875     .eh_timed_out = storvsc_eh_timed_out,
4876     .slave_alloc = storvsc_device_alloc,
4877     .slave_configure = storvsc_device_configure,
4878     - .cmd_per_lun = 255,
4879     + .cmd_per_lun = 2048,
4880     .this_id = -1,
4881     .use_clustering = ENABLE_CLUSTERING,
4882     /* Make sure we dont get a sg segment crosses a page boundary */
4883     diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c
4884     index ca360daa6a25..378af306fda1 100644
4885     --- a/drivers/scsi/sym53c8xx_2/sym_hipd.c
4886     +++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c
4887     @@ -536,7 +536,7 @@ sym_getsync(struct sym_hcb *np, u_char dt, u_char sfac, u_char *divp, u_char *fa
4888     * Look for the greatest clock divisor that allows an
4889     * input speed faster than the period.
4890     */
4891     - while (div-- > 0)
4892     + while (--div > 0)
4893     if (kpc >= (div_10M[div] << 2)) break;
4894    
4895     /*
4896     diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
4897     index d344fef01f1d..3bb1f6cc297a 100644
4898     --- a/drivers/scsi/ufs/ufshcd.c
4899     +++ b/drivers/scsi/ufs/ufshcd.c
4900     @@ -4347,6 +4347,8 @@ static int ufshcd_slave_alloc(struct scsi_device *sdev)
4901     /* REPORT SUPPORTED OPERATION CODES is not supported */
4902     sdev->no_report_opcodes = 1;
4903    
4904     + /* WRITE_SAME command is not supported */
4905     + sdev->no_write_same = 1;
4906    
4907     ufshcd_set_queue_depth(sdev);
4908    
4909     diff --git a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c
4910     index 8e84b2e7f5bd..b83d17db06bd 100644
4911     --- a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c
4912     +++ b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c
4913     @@ -315,7 +315,7 @@ static int consume_frames(struct dpaa2_eth_channel *ch)
4914     }
4915    
4916     fd = dpaa2_dq_fd(dq);
4917     - fq = (struct dpaa2_eth_fq *)dpaa2_dq_fqd_ctx(dq);
4918     + fq = (struct dpaa2_eth_fq *)(uintptr_t)dpaa2_dq_fqd_ctx(dq);
4919     fq->stats.frames++;
4920    
4921     fq->consume(priv, ch, fd, &ch->napi);
4922     @@ -1888,7 +1888,7 @@ static int setup_rx_flow(struct dpaa2_eth_priv *priv,
4923     queue.destination.id = fq->channel->dpcon_id;
4924     queue.destination.type = DPNI_DEST_DPCON;
4925     queue.destination.priority = 1;
4926     - queue.user_context = (u64)fq;
4927     + queue.user_context = (u64)(uintptr_t)fq;
4928     err = dpni_set_queue(priv->mc_io, 0, priv->mc_token,
4929     DPNI_QUEUE_RX, 0, fq->flowid,
4930     DPNI_QUEUE_OPT_USER_CTX | DPNI_QUEUE_OPT_DEST,
4931     @@ -1940,7 +1940,7 @@ static int setup_tx_flow(struct dpaa2_eth_priv *priv,
4932     queue.destination.id = fq->channel->dpcon_id;
4933     queue.destination.type = DPNI_DEST_DPCON;
4934     queue.destination.priority = 0;
4935     - queue.user_context = (u64)fq;
4936     + queue.user_context = (u64)(uintptr_t)fq;
4937     err = dpni_set_queue(priv->mc_io, 0, priv->mc_token,
4938     DPNI_QUEUE_TX_CONFIRM, 0, fq->flowid,
4939     DPNI_QUEUE_OPT_USER_CTX | DPNI_QUEUE_OPT_DEST,
4940     diff --git a/drivers/staging/ks7010/ks_hostif.c b/drivers/staging/ks7010/ks_hostif.c
4941     index 975dbbb3abd0..7da3eb4ca4be 100644
4942     --- a/drivers/staging/ks7010/ks_hostif.c
4943     +++ b/drivers/staging/ks7010/ks_hostif.c
4944     @@ -242,9 +242,8 @@ int get_ap_information(struct ks_wlan_private *priv, struct ap_info_t *ap_info,
4945     offset = 0;
4946    
4947     while (bsize > offset) {
4948     - /* DPRINTK(4, "Element ID=%d\n",*bp); */
4949     - switch (*bp) {
4950     - case 0: /* ssid */
4951     + switch (*bp) { /* Information Element ID */
4952     + case WLAN_EID_SSID:
4953     if (*(bp + 1) <= SSID_MAX_SIZE) {
4954     ap->ssid.size = *(bp + 1);
4955     } else {
4956     @@ -254,8 +253,8 @@ int get_ap_information(struct ks_wlan_private *priv, struct ap_info_t *ap_info,
4957     }
4958     memcpy(ap->ssid.body, bp + 2, ap->ssid.size);
4959     break;
4960     - case 1: /* rate */
4961     - case 50: /* ext rate */
4962     + case WLAN_EID_SUPP_RATES:
4963     + case WLAN_EID_EXT_SUPP_RATES:
4964     if ((*(bp + 1) + ap->rate_set.size) <=
4965     RATE_SET_MAX_SIZE) {
4966     memcpy(&ap->rate_set.body[ap->rate_set.size],
4967     @@ -271,9 +270,9 @@ int get_ap_information(struct ks_wlan_private *priv, struct ap_info_t *ap_info,
4968     (RATE_SET_MAX_SIZE - ap->rate_set.size);
4969     }
4970     break;
4971     - case 3: /* DS parameter */
4972     + case WLAN_EID_DS_PARAMS:
4973     break;
4974     - case 48: /* RSN(WPA2) */
4975     + case WLAN_EID_RSN:
4976     ap->rsn_ie.id = *bp;
4977     if (*(bp + 1) <= RSN_IE_BODY_MAX) {
4978     ap->rsn_ie.size = *(bp + 1);
4979     @@ -284,8 +283,8 @@ int get_ap_information(struct ks_wlan_private *priv, struct ap_info_t *ap_info,
4980     }
4981     memcpy(ap->rsn_ie.body, bp + 2, ap->rsn_ie.size);
4982     break;
4983     - case 221: /* WPA */
4984     - if (memcmp(bp + 2, "\x00\x50\xf2\x01", 4) == 0) { /* WPA OUI check */
4985     + case WLAN_EID_VENDOR_SPECIFIC: /* WPA */
4986     + if (memcmp(bp + 2, "\x00\x50\xf2\x01", 4) == 0) { /* WPA OUI check */
4987     ap->wpa_ie.id = *bp;
4988     if (*(bp + 1) <= RSN_IE_BODY_MAX) {
4989     ap->wpa_ie.size = *(bp + 1);
4990     @@ -300,18 +299,18 @@ int get_ap_information(struct ks_wlan_private *priv, struct ap_info_t *ap_info,
4991     }
4992     break;
4993    
4994     - case 2: /* FH parameter */
4995     - case 4: /* CF parameter */
4996     - case 5: /* TIM */
4997     - case 6: /* IBSS parameter */
4998     - case 7: /* Country */
4999     - case 42: /* ERP information */
5000     - case 47: /* Reserve ID 47 Broadcom AP */
5001     + case WLAN_EID_FH_PARAMS:
5002     + case WLAN_EID_CF_PARAMS:
5003     + case WLAN_EID_TIM:
5004     + case WLAN_EID_IBSS_PARAMS:
5005     + case WLAN_EID_COUNTRY:
5006     + case WLAN_EID_ERP_INFO:
5007     break;
5008     default:
5009     DPRINTK(4, "unknown Element ID=%d\n", *bp);
5010     break;
5011     }
5012     +
5013     offset += 2; /* id & size field */
5014     offset += *(bp + 1); /* +size offset */
5015     bp += (*(bp + 1) + 2); /* pointer update */
5016     diff --git a/drivers/staging/ks7010/ks_hostif.h b/drivers/staging/ks7010/ks_hostif.h
5017     index 5bae8d468e23..9ac317e4b507 100644
5018     --- a/drivers/staging/ks7010/ks_hostif.h
5019     +++ b/drivers/staging/ks7010/ks_hostif.h
5020     @@ -13,6 +13,7 @@
5021     #define _KS_HOSTIF_H_
5022    
5023     #include <linux/compiler.h>
5024     +#include <linux/ieee80211.h>
5025    
5026     /*
5027     * HOST-MAC I/F events
5028     diff --git a/drivers/staging/lustre/lustre/include/obd.h b/drivers/staging/lustre/lustre/include/obd.h
5029     index a986737ec010..82a499fb23bb 100644
5030     --- a/drivers/staging/lustre/lustre/include/obd.h
5031     +++ b/drivers/staging/lustre/lustre/include/obd.h
5032     @@ -190,7 +190,7 @@ struct client_obd {
5033     struct sptlrpc_flavor cl_flvr_mgc; /* fixed flavor of mgc->mgs */
5034    
5035     /* the grant values are protected by loi_list_lock below */
5036     - unsigned long cl_dirty_pages; /* all _dirty_ in pahges */
5037     + unsigned long cl_dirty_pages; /* all _dirty_ in pages */
5038     unsigned long cl_dirty_max_pages; /* allowed w/o rpc */
5039     unsigned long cl_dirty_transit; /* dirty synchronous */
5040     unsigned long cl_avail_grant; /* bytes of credit for ost */
5041     diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
5042     index 6e16c930a021..c2aadb2d1fea 100644
5043     --- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c
5044     +++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
5045     @@ -2694,7 +2694,7 @@ static int lmv_unpackmd(struct obd_export *exp, struct lmv_stripe_md **lsmp,
5046     if (lsm && !lmm) {
5047     int i;
5048    
5049     - for (i = 1; i < lsm->lsm_md_stripe_count; i++) {
5050     + for (i = 0; i < lsm->lsm_md_stripe_count; i++) {
5051     /*
5052     * For migrating inode, the master stripe and master
5053     * object will be the same, so do not need iput, see
5054     diff --git a/drivers/staging/lustre/lustre/osc/osc_cache.c b/drivers/staging/lustre/lustre/osc/osc_cache.c
5055     index e1207c227b79..c356d00d87a5 100644
5056     --- a/drivers/staging/lustre/lustre/osc/osc_cache.c
5057     +++ b/drivers/staging/lustre/lustre/osc/osc_cache.c
5058     @@ -1528,7 +1528,7 @@ static int osc_enter_cache_try(struct client_obd *cli,
5059     if (rc < 0)
5060     return 0;
5061    
5062     - if (cli->cl_dirty_pages <= cli->cl_dirty_max_pages &&
5063     + if (cli->cl_dirty_pages < cli->cl_dirty_max_pages &&
5064     atomic_long_read(&obd_dirty_pages) + 1 <= obd_max_dirty_pages) {
5065     osc_consume_write_grant(cli, &oap->oap_brw_page);
5066     if (transient) {
5067     diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c
5068     index 46b3f19e0878..db3eb7ec5809 100644
5069     --- a/drivers/staging/rtl8192u/r8192U_core.c
5070     +++ b/drivers/staging/rtl8192u/r8192U_core.c
5071     @@ -1702,6 +1702,8 @@ static short rtl8192_usb_initendpoints(struct net_device *dev)
5072    
5073     priv->rx_urb[16] = usb_alloc_urb(0, GFP_KERNEL);
5074     priv->oldaddr = kmalloc(16, GFP_KERNEL);
5075     + if (!priv->oldaddr)
5076     + return -ENOMEM;
5077     oldaddr = priv->oldaddr;
5078     align = ((long)oldaddr) & 3;
5079     if (align) {
5080     diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835.c
5081     index 8f2d508183b2..9030d71a3d0b 100644
5082     --- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835.c
5083     +++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835.c
5084     @@ -36,6 +36,10 @@ MODULE_PARM_DESC(enable_compat_alsa,
5085     static void snd_devm_unregister_child(struct device *dev, void *res)
5086     {
5087     struct device *childdev = *(struct device **)res;
5088     + struct bcm2835_chip *chip = dev_get_drvdata(childdev);
5089     + struct snd_card *card = chip->card;
5090     +
5091     + snd_card_free(card);
5092    
5093     device_unregister(childdev);
5094     }
5095     @@ -61,6 +65,13 @@ static int snd_devm_add_child(struct device *dev, struct device *child)
5096     return 0;
5097     }
5098    
5099     +static void snd_bcm2835_release(struct device *dev)
5100     +{
5101     + struct bcm2835_chip *chip = dev_get_drvdata(dev);
5102     +
5103     + kfree(chip);
5104     +}
5105     +
5106     static struct device *
5107     snd_create_device(struct device *parent,
5108     struct device_driver *driver,
5109     @@ -76,6 +87,7 @@ snd_create_device(struct device *parent,
5110     device_initialize(device);
5111     device->parent = parent;
5112     device->driver = driver;
5113     + device->release = snd_bcm2835_release;
5114    
5115     dev_set_name(device, "%s", name);
5116    
5117     @@ -86,18 +98,19 @@ snd_create_device(struct device *parent,
5118     return device;
5119     }
5120    
5121     -static int snd_bcm2835_free(struct bcm2835_chip *chip)
5122     -{
5123     - kfree(chip);
5124     - return 0;
5125     -}
5126     -
5127     /* component-destructor
5128     * (see "Management of Cards and Components")
5129     */
5130     static int snd_bcm2835_dev_free(struct snd_device *device)
5131     {
5132     - return snd_bcm2835_free(device->device_data);
5133     + struct bcm2835_chip *chip = device->device_data;
5134     + struct snd_card *card = chip->card;
5135     +
5136     + /* TODO: free pcm, ctl */
5137     +
5138     + snd_device_free(card, chip);
5139     +
5140     + return 0;
5141     }
5142    
5143     /* chip-specific constructor
5144     @@ -122,7 +135,7 @@ static int snd_bcm2835_create(struct snd_card *card,
5145    
5146     err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
5147     if (err) {
5148     - snd_bcm2835_free(chip);
5149     + kfree(chip);
5150     return err;
5151     }
5152    
5153     @@ -130,31 +143,14 @@ static int snd_bcm2835_create(struct snd_card *card,
5154     return 0;
5155     }
5156    
5157     -static void snd_devm_card_free(struct device *dev, void *res)
5158     +static struct snd_card *snd_bcm2835_card_new(struct device *dev)
5159     {
5160     - struct snd_card *snd_card = *(struct snd_card **)res;
5161     -
5162     - snd_card_free(snd_card);
5163     -}
5164     -
5165     -static struct snd_card *snd_devm_card_new(struct device *dev)
5166     -{
5167     - struct snd_card **dr;
5168     struct snd_card *card;
5169     int ret;
5170    
5171     - dr = devres_alloc(snd_devm_card_free, sizeof(*dr), GFP_KERNEL);
5172     - if (!dr)
5173     - return ERR_PTR(-ENOMEM);
5174     -
5175     ret = snd_card_new(dev, -1, NULL, THIS_MODULE, 0, &card);
5176     - if (ret) {
5177     - devres_free(dr);
5178     + if (ret)
5179     return ERR_PTR(ret);
5180     - }
5181     -
5182     - *dr = card;
5183     - devres_add(dev, dr);
5184    
5185     return card;
5186     }
5187     @@ -271,7 +267,7 @@ static int snd_add_child_device(struct device *device,
5188     return PTR_ERR(child);
5189     }
5190    
5191     - card = snd_devm_card_new(child);
5192     + card = snd_bcm2835_card_new(child);
5193     if (IS_ERR(card)) {
5194     dev_err(child, "Failed to create card");
5195     return PTR_ERR(card);
5196     @@ -313,7 +309,7 @@ static int snd_add_child_device(struct device *device,
5197     return err;
5198     }
5199    
5200     - dev_set_drvdata(child, card);
5201     + dev_set_drvdata(child, chip);
5202     dev_info(child, "card created with %d channels\n", numchans);
5203    
5204     return 0;
5205     diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
5206     index e32c51d549c3..be456ea27ab2 100644
5207     --- a/drivers/tty/serial/8250/8250_port.c
5208     +++ b/drivers/tty/serial/8250/8250_port.c
5209     @@ -1874,7 +1874,8 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
5210    
5211     status = serial_port_in(port, UART_LSR);
5212    
5213     - if (status & (UART_LSR_DR | UART_LSR_BI)) {
5214     + if (status & (UART_LSR_DR | UART_LSR_BI) &&
5215     + iir & UART_IIR_RDI) {
5216     if (!up->dma || handle_rx_dma(up, iir))
5217     status = serial8250_rx_chars(up, status);
5218     }
5219     diff --git a/drivers/tty/serial/altera_uart.c b/drivers/tty/serial/altera_uart.c
5220     index 3e4b717670d7..59cb62de236b 100644
5221     --- a/drivers/tty/serial/altera_uart.c
5222     +++ b/drivers/tty/serial/altera_uart.c
5223     @@ -331,7 +331,7 @@ static int altera_uart_startup(struct uart_port *port)
5224    
5225     /* Enable RX interrupts now */
5226     pp->imr = ALTERA_UART_CONTROL_RRDY_MSK;
5227     - writel(pp->imr, port->membase + ALTERA_UART_CONTROL_REG);
5228     + altera_uart_writel(port, pp->imr, ALTERA_UART_CONTROL_REG);
5229    
5230     spin_unlock_irqrestore(&port->lock, flags);
5231    
5232     @@ -347,7 +347,7 @@ static void altera_uart_shutdown(struct uart_port *port)
5233    
5234     /* Disable all interrupts now */
5235     pp->imr = 0;
5236     - writel(pp->imr, port->membase + ALTERA_UART_CONTROL_REG);
5237     + altera_uart_writel(port, pp->imr, ALTERA_UART_CONTROL_REG);
5238    
5239     spin_unlock_irqrestore(&port->lock, flags);
5240    
5241     @@ -436,7 +436,7 @@ static void altera_uart_console_putc(struct uart_port *port, int c)
5242     ALTERA_UART_STATUS_TRDY_MSK))
5243     cpu_relax();
5244    
5245     - writel(c, port->membase + ALTERA_UART_TXDATA_REG);
5246     + altera_uart_writel(port, c, ALTERA_UART_TXDATA_REG);
5247     }
5248    
5249     static void altera_uart_console_write(struct console *co, const char *s,
5250     @@ -506,13 +506,13 @@ static int __init altera_uart_earlycon_setup(struct earlycon_device *dev,
5251     return -ENODEV;
5252    
5253     /* Enable RX interrupts now */
5254     - writel(ALTERA_UART_CONTROL_RRDY_MSK,
5255     - port->membase + ALTERA_UART_CONTROL_REG);
5256     + altera_uart_writel(port, ALTERA_UART_CONTROL_RRDY_MSK,
5257     + ALTERA_UART_CONTROL_REG);
5258    
5259     if (dev->baud) {
5260     unsigned int baudclk = port->uartclk / dev->baud;
5261    
5262     - writel(baudclk, port->membase + ALTERA_UART_DIVISOR_REG);
5263     + altera_uart_writel(port, baudclk, ALTERA_UART_DIVISOR_REG);
5264     }
5265    
5266     dev->con->write = altera_uart_earlycon_write;
5267     diff --git a/drivers/tty/serial/arc_uart.c b/drivers/tty/serial/arc_uart.c
5268     index 77fe306690c4..71e37abb6bcb 100644
5269     --- a/drivers/tty/serial/arc_uart.c
5270     +++ b/drivers/tty/serial/arc_uart.c
5271     @@ -596,6 +596,11 @@ static int arc_serial_probe(struct platform_device *pdev)
5272     if (dev_id < 0)
5273     dev_id = 0;
5274    
5275     + if (dev_id >= ARRAY_SIZE(arc_uart_ports)) {
5276     + dev_err(&pdev->dev, "serial%d out of range\n", dev_id);
5277     + return -EINVAL;
5278     + }
5279     +
5280     uart = &arc_uart_ports[dev_id];
5281     port = &uart->port;
5282    
5283     diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c
5284     index f0252184291e..7a3db9378fa3 100644
5285     --- a/drivers/tty/serial/fsl_lpuart.c
5286     +++ b/drivers/tty/serial/fsl_lpuart.c
5287     @@ -2151,6 +2151,10 @@ static int lpuart_probe(struct platform_device *pdev)
5288     dev_err(&pdev->dev, "failed to get alias id, errno %d\n", ret);
5289     return ret;
5290     }
5291     + if (ret >= ARRAY_SIZE(lpuart_ports)) {
5292     + dev_err(&pdev->dev, "serial%d out of range\n", ret);
5293     + return -EINVAL;
5294     + }
5295     sport->port.line = ret;
5296     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
5297     sport->port.membase = devm_ioremap_resource(&pdev->dev, res);
5298     diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
5299     index 521500c575c8..8deaf2ad8b34 100644
5300     --- a/drivers/tty/serial/imx.c
5301     +++ b/drivers/tty/serial/imx.c
5302     @@ -2096,6 +2096,12 @@ static int serial_imx_probe(struct platform_device *pdev)
5303     else if (ret < 0)
5304     return ret;
5305    
5306     + if (sport->port.line >= ARRAY_SIZE(imx_ports)) {
5307     + dev_err(&pdev->dev, "serial%d out of range\n",
5308     + sport->port.line);
5309     + return -EINVAL;
5310     + }
5311     +
5312     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
5313     base = devm_ioremap_resource(&pdev->dev, res);
5314     if (IS_ERR(base))
5315     diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c
5316     index be94246b6fcc..673c8fd7e34f 100644
5317     --- a/drivers/tty/serial/mxs-auart.c
5318     +++ b/drivers/tty/serial/mxs-auart.c
5319     @@ -1667,6 +1667,10 @@ static int mxs_auart_probe(struct platform_device *pdev)
5320     s->port.line = pdev->id < 0 ? 0 : pdev->id;
5321     else if (ret < 0)
5322     return ret;
5323     + if (s->port.line >= ARRAY_SIZE(auart_port)) {
5324     + dev_err(&pdev->dev, "serial%d out of range\n", s->port.line);
5325     + return -EINVAL;
5326     + }
5327    
5328     if (of_id) {
5329     pdev->id_entry = of_id->data;
5330     diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
5331     index 8aca18c4cdea..bedd4bdec4ab 100644
5332     --- a/drivers/tty/serial/samsung.c
5333     +++ b/drivers/tty/serial/samsung.c
5334     @@ -1821,6 +1821,10 @@ static int s3c24xx_serial_probe(struct platform_device *pdev)
5335    
5336     dbg("s3c24xx_serial_probe(%p) %d\n", pdev, index);
5337    
5338     + if (index >= ARRAY_SIZE(s3c24xx_serial_ports)) {
5339     + dev_err(&pdev->dev, "serial%d out of range\n", index);
5340     + return -EINVAL;
5341     + }
5342     ourport = &s3c24xx_serial_ports[index];
5343    
5344     ourport->drv_data = s3c24xx_get_driver_data(pdev);
5345     diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
5346     index 22f60239026c..8a58ee32ff61 100644
5347     --- a/drivers/tty/serial/sh-sci.c
5348     +++ b/drivers/tty/serial/sh-sci.c
5349     @@ -3076,6 +3076,10 @@ static struct plat_sci_port *sci_parse_dt(struct platform_device *pdev,
5350     dev_err(&pdev->dev, "failed to get alias id (%d)\n", id);
5351     return NULL;
5352     }
5353     + if (id >= ARRAY_SIZE(sci_ports)) {
5354     + dev_err(&pdev->dev, "serial%d out of range\n", id);
5355     + return NULL;
5356     + }
5357    
5358     sp = &sci_ports[id];
5359     *dev_id = id;
5360     diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
5361     index 31a630ae0870..21c35ad72b99 100644
5362     --- a/drivers/tty/serial/xilinx_uartps.c
5363     +++ b/drivers/tty/serial/xilinx_uartps.c
5364     @@ -1115,7 +1115,7 @@ static struct uart_port *cdns_uart_get_port(int id)
5365     struct uart_port *port;
5366    
5367     /* Try the given port id if failed use default method */
5368     - if (cdns_uart_port[id].mapbase != 0) {
5369     + if (id < CDNS_UART_NR_PORTS && cdns_uart_port[id].mapbase != 0) {
5370     /* Find the next unused port */
5371     for (id = 0; id < CDNS_UART_NR_PORTS; id++)
5372     if (cdns_uart_port[id].mapbase == 0)
5373     diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
5374     index 4149a965516e..22952d70b981 100644
5375     --- a/drivers/usb/class/cdc-acm.c
5376     +++ b/drivers/usb/class/cdc-acm.c
5377     @@ -187,6 +187,7 @@ static int acm_wb_alloc(struct acm *acm)
5378     wb = &acm->wb[wbn];
5379     if (!wb->use) {
5380     wb->use = 1;
5381     + wb->len = 0;
5382     return wbn;
5383     }
5384     wbn = (wbn + 1) % ACM_NW;
5385     @@ -818,16 +819,18 @@ static int acm_tty_write(struct tty_struct *tty,
5386     static void acm_tty_flush_chars(struct tty_struct *tty)
5387     {
5388     struct acm *acm = tty->driver_data;
5389     - struct acm_wb *cur = acm->putbuffer;
5390     + struct acm_wb *cur;
5391     int err;
5392     unsigned long flags;
5393    
5394     + spin_lock_irqsave(&acm->write_lock, flags);
5395     +
5396     + cur = acm->putbuffer;
5397     if (!cur) /* nothing to do */
5398     - return;
5399     + goto out;
5400    
5401     acm->putbuffer = NULL;
5402     err = usb_autopm_get_interface_async(acm->control);
5403     - spin_lock_irqsave(&acm->write_lock, flags);
5404     if (err < 0) {
5405     cur->use = 0;
5406     acm->putbuffer = cur;
5407     diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h
5408     index 8367d4f985c1..ec965ac5f1f5 100644
5409     --- a/drivers/usb/dwc2/core.h
5410     +++ b/drivers/usb/dwc2/core.h
5411     @@ -216,7 +216,7 @@ struct dwc2_hsotg_ep {
5412     unsigned char dir_in;
5413     unsigned char index;
5414     unsigned char mc;
5415     - unsigned char interval;
5416     + u16 interval;
5417    
5418     unsigned int halted:1;
5419     unsigned int periodic:1;
5420     diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
5421     index 0d8e09ccb59c..6ef001a83fe2 100644
5422     --- a/drivers/usb/dwc2/gadget.c
5423     +++ b/drivers/usb/dwc2/gadget.c
5424     @@ -3414,12 +3414,6 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
5425     dwc2_writel(dwc2_hsotg_ep0_mps(hsotg->eps_out[0]->ep.maxpacket) |
5426     DXEPCTL_USBACTEP, hsotg->regs + DIEPCTL0);
5427    
5428     - dwc2_hsotg_enqueue_setup(hsotg);
5429     -
5430     - dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
5431     - dwc2_readl(hsotg->regs + DIEPCTL0),
5432     - dwc2_readl(hsotg->regs + DOEPCTL0));
5433     -
5434     /* clear global NAKs */
5435     val = DCTL_CGOUTNAK | DCTL_CGNPINNAK;
5436     if (!is_usb_reset)
5437     @@ -3430,6 +3424,12 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
5438     mdelay(3);
5439    
5440     hsotg->lx_state = DWC2_L0;
5441     +
5442     + dwc2_hsotg_enqueue_setup(hsotg);
5443     +
5444     + dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
5445     + dwc2_readl(hsotg->regs + DIEPCTL0),
5446     + dwc2_readl(hsotg->regs + DOEPCTL0));
5447     }
5448    
5449     static void dwc2_hsotg_core_disconnect(struct dwc2_hsotg *hsotg)
5450     diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
5451     index 9bd60ec83ac6..87484f71b2ab 100644
5452     --- a/drivers/usb/dwc2/hcd.c
5453     +++ b/drivers/usb/dwc2/hcd.c
5454     @@ -979,6 +979,24 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan,
5455    
5456     if (dbg_hc(chan))
5457     dev_vdbg(hsotg->dev, "%s()\n", __func__);
5458     +
5459     + /*
5460     + * In buffer DMA or external DMA mode channel can't be halted
5461     + * for non-split periodic channels. At the end of the next
5462     + * uframe/frame (in the worst case), the core generates a channel
5463     + * halted and disables the channel automatically.
5464     + */
5465     + if ((hsotg->params.g_dma && !hsotg->params.g_dma_desc) ||
5466     + hsotg->hw_params.arch == GHWCFG2_EXT_DMA_ARCH) {
5467     + if (!chan->do_split &&
5468     + (chan->ep_type == USB_ENDPOINT_XFER_ISOC ||
5469     + chan->ep_type == USB_ENDPOINT_XFER_INT)) {
5470     + dev_err(hsotg->dev, "%s() Channel can't be halted\n",
5471     + __func__);
5472     + return;
5473     + }
5474     + }
5475     +
5476     if (halt_status == DWC2_HC_XFER_NO_HALT_STATUS)
5477     dev_err(hsotg->dev, "!!! halt_status = %d !!!\n", halt_status);
5478    
5479     @@ -2311,10 +2329,22 @@ static int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup)
5480     */
5481     static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
5482     {
5483     - u32 hcfg, hfir, otgctl;
5484     + u32 hcfg, hfir, otgctl, usbcfg;
5485    
5486     dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg);
5487    
5488     + /* Set HS/FS Timeout Calibration to 7 (max available value).
5489     + * The number of PHY clocks that the application programs in
5490     + * this field is added to the high/full speed interpacket timeout
5491     + * duration in the core to account for any additional delays
5492     + * introduced by the PHY. This can be required, because the delay
5493     + * introduced by the PHY in generating the linestate condition
5494     + * can vary from one PHY to another.
5495     + */
5496     + usbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
5497     + usbcfg |= GUSBCFG_TOUTCAL(7);
5498     + dwc2_writel(usbcfg, hsotg->regs + GUSBCFG);
5499     +
5500     /* Restart the Phy Clock */
5501     dwc2_writel(0, hsotg->regs + PCGCTL);
5502    
5503     diff --git a/drivers/usb/dwc3/Makefile b/drivers/usb/dwc3/Makefile
5504     index 7ac725038f8d..025bc68094fc 100644
5505     --- a/drivers/usb/dwc3/Makefile
5506     +++ b/drivers/usb/dwc3/Makefile
5507     @@ -6,7 +6,7 @@ obj-$(CONFIG_USB_DWC3) += dwc3.o
5508    
5509     dwc3-y := core.o
5510    
5511     -ifneq ($(CONFIG_FTRACE),)
5512     +ifneq ($(CONFIG_TRACING),)
5513     dwc3-y += trace.o
5514     endif
5515    
5516     diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
5517     index c3f3f1a89b0f..dca78bb20e5d 100644
5518     --- a/drivers/usb/dwc3/core.c
5519     +++ b/drivers/usb/dwc3/core.c
5520     @@ -243,12 +243,26 @@ static int dwc3_core_soft_reset(struct dwc3 *dwc)
5521     do {
5522     reg = dwc3_readl(dwc->regs, DWC3_DCTL);
5523     if (!(reg & DWC3_DCTL_CSFTRST))
5524     - return 0;
5525     + goto done;
5526    
5527     udelay(1);
5528     } while (--retries);
5529    
5530     + phy_exit(dwc->usb3_generic_phy);
5531     + phy_exit(dwc->usb2_generic_phy);
5532     +
5533     return -ETIMEDOUT;
5534     +
5535     +done:
5536     + /*
5537     + * For DWC_usb31 controller, once DWC3_DCTL_CSFTRST bit is cleared,
5538     + * we must wait at least 50ms before accessing the PHY domain
5539     + * (synchronization delay). DWC_usb31 programming guide section 1.3.2.
5540     + */
5541     + if (dwc3_is_usb31(dwc))
5542     + msleep(50);
5543     +
5544     + return 0;
5545     }
5546    
5547     /*
5548     diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
5549     index fc28819253f7..b782ba58a7fc 100644
5550     --- a/drivers/usb/dwc3/core.h
5551     +++ b/drivers/usb/dwc3/core.h
5552     @@ -249,6 +249,8 @@
5553     #define DWC3_GUSB3PIPECTL_TX_DEEPH(n) ((n) << 1)
5554    
5555     /* Global TX Fifo Size Register */
5556     +#define DWC31_GTXFIFOSIZ_TXFRAMNUM BIT(15) /* DWC_usb31 only */
5557     +#define DWC31_GTXFIFOSIZ_TXFDEF(n) ((n) & 0x7fff) /* DWC_usb31 only */
5558     #define DWC3_GTXFIFOSIZ_TXFDEF(n) ((n) & 0xffff)
5559     #define DWC3_GTXFIFOSIZ_TXFSTADDR(n) ((n) & 0xffff0000)
5560    
5561     diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
5562     index 3530795bbb8f..fdd0d5aa1f5e 100644
5563     --- a/drivers/usb/dwc3/dwc3-omap.c
5564     +++ b/drivers/usb/dwc3/dwc3-omap.c
5565     @@ -590,9 +590,25 @@ static int dwc3_omap_resume(struct device *dev)
5566     return 0;
5567     }
5568    
5569     +static void dwc3_omap_complete(struct device *dev)
5570     +{
5571     + struct dwc3_omap *omap = dev_get_drvdata(dev);
5572     +
5573     + if (extcon_get_state(omap->edev, EXTCON_USB))
5574     + dwc3_omap_set_mailbox(omap, OMAP_DWC3_VBUS_VALID);
5575     + else
5576     + dwc3_omap_set_mailbox(omap, OMAP_DWC3_VBUS_OFF);
5577     +
5578     + if (extcon_get_state(omap->edev, EXTCON_USB_HOST))
5579     + dwc3_omap_set_mailbox(omap, OMAP_DWC3_ID_GROUND);
5580     + else
5581     + dwc3_omap_set_mailbox(omap, OMAP_DWC3_ID_FLOAT);
5582     +}
5583     +
5584     static const struct dev_pm_ops dwc3_omap_dev_pm_ops = {
5585    
5586     SET_SYSTEM_SLEEP_PM_OPS(dwc3_omap_suspend, dwc3_omap_resume)
5587     + .complete = dwc3_omap_complete,
5588     };
5589    
5590     #define DEV_PM_OPS (&dwc3_omap_dev_pm_ops)
5591     diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
5592     index ed9346f0b000..940de04ed72a 100644
5593     --- a/drivers/usb/gadget/composite.c
5594     +++ b/drivers/usb/gadget/composite.c
5595     @@ -1425,7 +1425,7 @@ static int count_ext_compat(struct usb_configuration *c)
5596     return res;
5597     }
5598    
5599     -static void fill_ext_compat(struct usb_configuration *c, u8 *buf)
5600     +static int fill_ext_compat(struct usb_configuration *c, u8 *buf)
5601     {
5602     int i, count;
5603    
5604     @@ -1452,10 +1452,12 @@ static void fill_ext_compat(struct usb_configuration *c, u8 *buf)
5605     buf += 23;
5606     }
5607     count += 24;
5608     - if (count >= 4096)
5609     - return;
5610     + if (count + 24 >= USB_COMP_EP0_OS_DESC_BUFSIZ)
5611     + return count;
5612     }
5613     }
5614     +
5615     + return count;
5616     }
5617    
5618     static int count_ext_prop(struct usb_configuration *c, int interface)
5619     @@ -1500,25 +1502,20 @@ static int fill_ext_prop(struct usb_configuration *c, int interface, u8 *buf)
5620     struct usb_os_desc *d;
5621     struct usb_os_desc_ext_prop *ext_prop;
5622     int j, count, n, ret;
5623     - u8 *start = buf;
5624    
5625     f = c->interface[interface];
5626     + count = 10; /* header length */
5627     for (j = 0; j < f->os_desc_n; ++j) {
5628     if (interface != f->os_desc_table[j].if_id)
5629     continue;
5630     d = f->os_desc_table[j].os_desc;
5631     if (d)
5632     list_for_each_entry(ext_prop, &d->ext_prop, entry) {
5633     - /* 4kB minus header length */
5634     - n = buf - start;
5635     - if (n >= 4086)
5636     - return 0;
5637     -
5638     - count = ext_prop->data_len +
5639     + n = ext_prop->data_len +
5640     ext_prop->name_len + 14;
5641     - if (count > 4086 - n)
5642     - return -EINVAL;
5643     - usb_ext_prop_put_size(buf, count);
5644     + if (count + n >= USB_COMP_EP0_OS_DESC_BUFSIZ)
5645     + return count;
5646     + usb_ext_prop_put_size(buf, n);
5647     usb_ext_prop_put_type(buf, ext_prop->type);
5648     ret = usb_ext_prop_put_name(buf, ext_prop->name,
5649     ext_prop->name_len);
5650     @@ -1544,11 +1541,12 @@ static int fill_ext_prop(struct usb_configuration *c, int interface, u8 *buf)
5651     default:
5652     return -EINVAL;
5653     }
5654     - buf += count;
5655     + buf += n;
5656     + count += n;
5657     }
5658     }
5659    
5660     - return 0;
5661     + return count;
5662     }
5663    
5664     /*
5665     @@ -1830,6 +1828,7 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
5666     req->complete = composite_setup_complete;
5667     buf = req->buf;
5668     os_desc_cfg = cdev->os_desc_config;
5669     + w_length = min_t(u16, w_length, USB_COMP_EP0_OS_DESC_BUFSIZ);
5670     memset(buf, 0, w_length);
5671     buf[5] = 0x01;
5672     switch (ctrl->bRequestType & USB_RECIP_MASK) {
5673     @@ -1853,8 +1852,8 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
5674     count += 16; /* header */
5675     put_unaligned_le32(count, buf);
5676     buf += 16;
5677     - fill_ext_compat(os_desc_cfg, buf);
5678     - value = w_length;
5679     + value = fill_ext_compat(os_desc_cfg, buf);
5680     + value = min_t(u16, w_length, value);
5681     }
5682     break;
5683     case USB_RECIP_INTERFACE:
5684     @@ -1883,8 +1882,7 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
5685     interface, buf);
5686     if (value < 0)
5687     return value;
5688     -
5689     - value = w_length;
5690     + value = min_t(u16, w_length, value);
5691     }
5692     break;
5693     }
5694     @@ -2159,8 +2157,8 @@ int composite_os_desc_req_prepare(struct usb_composite_dev *cdev,
5695     goto end;
5696     }
5697    
5698     - /* OS feature descriptor length <= 4kB */
5699     - cdev->os_desc_req->buf = kmalloc(4096, GFP_KERNEL);
5700     + cdev->os_desc_req->buf = kmalloc(USB_COMP_EP0_OS_DESC_BUFSIZ,
5701     + GFP_KERNEL);
5702     if (!cdev->os_desc_req->buf) {
5703     ret = -ENOMEM;
5704     usb_ep_free_request(ep0, cdev->os_desc_req);
5705     diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
5706     index 0904cb6ce4de..7b53ac548b1a 100644
5707     --- a/drivers/usb/gadget/function/f_fs.c
5708     +++ b/drivers/usb/gadget/function/f_fs.c
5709     @@ -759,9 +759,13 @@ static void ffs_user_copy_worker(struct work_struct *work)
5710     bool kiocb_has_eventfd = io_data->kiocb->ki_flags & IOCB_EVENTFD;
5711    
5712     if (io_data->read && ret > 0) {
5713     + mm_segment_t oldfs = get_fs();
5714     +
5715     + set_fs(USER_DS);
5716     use_mm(io_data->mm);
5717     ret = ffs_copy_to_iter(io_data->buf, ret, &io_data->data);
5718     unuse_mm(io_data->mm);
5719     + set_fs(oldfs);
5720     }
5721    
5722     io_data->kiocb->ki_complete(io_data->kiocb, ret, ret);
5723     @@ -3239,7 +3243,7 @@ static int ffs_func_setup(struct usb_function *f,
5724     __ffs_event_add(ffs, FUNCTIONFS_SETUP);
5725     spin_unlock_irqrestore(&ffs->ev.waitq.lock, flags);
5726    
5727     - return 0;
5728     + return USB_GADGET_DELAYED_STATUS;
5729     }
5730    
5731     static bool ffs_func_req_match(struct usb_function *f,
5732     diff --git a/drivers/usb/gadget/function/f_uac2.c b/drivers/usb/gadget/function/f_uac2.c
5733     index f05c3f3e6103..97cb2dfd6369 100644
5734     --- a/drivers/usb/gadget/function/f_uac2.c
5735     +++ b/drivers/usb/gadget/function/f_uac2.c
5736     @@ -528,6 +528,8 @@ afunc_bind(struct usb_configuration *cfg, struct usb_function *fn)
5737     dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
5738     return ret;
5739     }
5740     + iad_desc.bFirstInterface = ret;
5741     +
5742     std_ac_if_desc.bInterfaceNumber = ret;
5743     uac2->ac_intf = ret;
5744     uac2->ac_alt = 0;
5745     diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c
5746     index 5bab09294a8a..ad315c4c6f35 100644
5747     --- a/drivers/usb/gadget/udc/core.c
5748     +++ b/drivers/usb/gadget/udc/core.c
5749     @@ -191,8 +191,8 @@ EXPORT_SYMBOL_GPL(usb_ep_alloc_request);
5750     void usb_ep_free_request(struct usb_ep *ep,
5751     struct usb_request *req)
5752     {
5753     - ep->ops->free_request(ep, req);
5754     trace_usb_ep_free_request(ep, req, 0);
5755     + ep->ops->free_request(ep, req);
5756     }
5757     EXPORT_SYMBOL_GPL(usb_ep_free_request);
5758    
5759     diff --git a/drivers/usb/gadget/udc/fsl_udc_core.c b/drivers/usb/gadget/udc/fsl_udc_core.c
5760     index 6f2f71c054be..7874c112f3fd 100644
5761     --- a/drivers/usb/gadget/udc/fsl_udc_core.c
5762     +++ b/drivers/usb/gadget/udc/fsl_udc_core.c
5763     @@ -1309,7 +1309,7 @@ static void udc_reset_ep_queue(struct fsl_udc *udc, u8 pipe)
5764     {
5765     struct fsl_ep *ep = get_ep_by_pipe(udc, pipe);
5766    
5767     - if (ep->name)
5768     + if (ep->ep.name)
5769     nuke(ep, -ESHUTDOWN);
5770     }
5771    
5772     @@ -1697,7 +1697,7 @@ static void dtd_complete_irq(struct fsl_udc *udc)
5773     curr_ep = get_ep_by_pipe(udc, i);
5774    
5775     /* If the ep is configured */
5776     - if (curr_ep->name == NULL) {
5777     + if (!curr_ep->ep.name) {
5778     WARNING("Invalid EP?");
5779     continue;
5780     }
5781     diff --git a/drivers/usb/gadget/udc/goku_udc.h b/drivers/usb/gadget/udc/goku_udc.h
5782     index 86d2adafe149..64eb0f2b5ea0 100644
5783     --- a/drivers/usb/gadget/udc/goku_udc.h
5784     +++ b/drivers/usb/gadget/udc/goku_udc.h
5785     @@ -28,7 +28,7 @@ struct goku_udc_regs {
5786     # define INT_EP1DATASET 0x00040
5787     # define INT_EP2DATASET 0x00080
5788     # define INT_EP3DATASET 0x00100
5789     -#define INT_EPnNAK(n) (0x00100 < (n)) /* 0 < n < 4 */
5790     +#define INT_EPnNAK(n) (0x00100 << (n)) /* 0 < n < 4 */
5791     # define INT_EP1NAK 0x00200
5792     # define INT_EP2NAK 0x00400
5793     # define INT_EP3NAK 0x00800
5794     diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
5795     index 1099465b27f0..b4599aa428f3 100644
5796     --- a/drivers/usb/host/ohci-hcd.c
5797     +++ b/drivers/usb/host/ohci-hcd.c
5798     @@ -446,7 +446,8 @@ static int ohci_init (struct ohci_hcd *ohci)
5799     struct usb_hcd *hcd = ohci_to_hcd(ohci);
5800    
5801     /* Accept arbitrarily long scatter-gather lists */
5802     - hcd->self.sg_tablesize = ~0;
5803     + if (!(hcd->driver->flags & HCD_LOCAL_MEM))
5804     + hcd->self.sg_tablesize = ~0;
5805    
5806     if (distrust_firmware)
5807     ohci->flags |= OHCI_QUIRK_HUB_POWER;
5808     diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
5809     index ccdc971283d0..efd7e4882d66 100644
5810     --- a/drivers/usb/host/xhci-mem.c
5811     +++ b/drivers/usb/host/xhci-mem.c
5812     @@ -926,6 +926,8 @@ void xhci_free_virt_device(struct xhci_hcd *xhci, int slot_id)
5813     if (dev->out_ctx)
5814     xhci_free_container_ctx(xhci, dev->out_ctx);
5815    
5816     + if (dev->udev && dev->udev->slot_id)
5817     + dev->udev->slot_id = 0;
5818     kfree(xhci->devs[slot_id]);
5819     xhci->devs[slot_id] = NULL;
5820     }
5821     diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
5822     index 7d9e085f7b85..830dd0dbbce0 100644
5823     --- a/drivers/usb/host/xhci-plat.c
5824     +++ b/drivers/usb/host/xhci-plat.c
5825     @@ -355,7 +355,6 @@ static int __maybe_unused xhci_plat_suspend(struct device *dev)
5826     {
5827     struct usb_hcd *hcd = dev_get_drvdata(dev);
5828     struct xhci_hcd *xhci = hcd_to_xhci(hcd);
5829     - int ret;
5830    
5831     /*
5832     * xhci_suspend() needs `do_wakeup` to know whether host is allowed
5833     @@ -365,12 +364,7 @@ static int __maybe_unused xhci_plat_suspend(struct device *dev)
5834     * reconsider this when xhci_plat_suspend enlarges its scope, e.g.,
5835     * also applies to runtime suspend.
5836     */
5837     - ret = xhci_suspend(xhci, device_may_wakeup(dev));
5838     -
5839     - if (!device_may_wakeup(dev) && !IS_ERR(xhci->clk))
5840     - clk_disable_unprepare(xhci->clk);
5841     -
5842     - return ret;
5843     + return xhci_suspend(xhci, device_may_wakeup(dev));
5844     }
5845    
5846     static int __maybe_unused xhci_plat_resume(struct device *dev)
5847     @@ -379,9 +373,6 @@ static int __maybe_unused xhci_plat_resume(struct device *dev)
5848     struct xhci_hcd *xhci = hcd_to_xhci(hcd);
5849     int ret;
5850    
5851     - if (!device_may_wakeup(dev) && !IS_ERR(xhci->clk))
5852     - clk_prepare_enable(xhci->clk);
5853     -
5854     ret = xhci_priv_resume_quirk(hcd);
5855     if (ret)
5856     return ret;
5857     diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
5858     index bcf315b32bff..d8b185b0d0f9 100644
5859     --- a/drivers/usb/host/xhci.c
5860     +++ b/drivers/usb/host/xhci.c
5861     @@ -4764,6 +4764,7 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
5862     * quirks
5863     */
5864     struct device *dev = hcd->self.sysdev;
5865     + unsigned int minor_rev;
5866     int retval;
5867    
5868     /* Accept arbitrarily long scatter-gather lists */
5869     @@ -4791,12 +4792,19 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
5870     */
5871     hcd->has_tt = 1;
5872     } else {
5873     - /* Some 3.1 hosts return sbrn 0x30, can't rely on sbrn alone */
5874     - if (xhci->sbrn == 0x31 || xhci->usb3_rhub.min_rev >= 1) {
5875     - xhci_info(xhci, "Host supports USB 3.1 Enhanced SuperSpeed\n");
5876     + /*
5877     + * Some 3.1 hosts return sbrn 0x30, use xhci supported protocol
5878     + * minor revision instead of sbrn
5879     + */
5880     + minor_rev = xhci->usb3_rhub.min_rev;
5881     + if (minor_rev) {
5882     hcd->speed = HCD_USB31;
5883     hcd->self.root_hub->speed = USB_SPEED_SUPER_PLUS;
5884     }
5885     + xhci_info(xhci, "Host supports USB 3.%x %s SuperSpeed\n",
5886     + minor_rev,
5887     + minor_rev ? "Enhanced" : "");
5888     +
5889     /* xHCI private pointer was set in xhci_pci_probe for the second
5890     * registered roothub.
5891     */
5892     diff --git a/drivers/usb/usbip/Kconfig b/drivers/usb/usbip/Kconfig
5893     index eeefa29f8aa2..a20b65cb6678 100644
5894     --- a/drivers/usb/usbip/Kconfig
5895     +++ b/drivers/usb/usbip/Kconfig
5896     @@ -27,7 +27,7 @@ config USBIP_VHCI_HCD
5897    
5898     config USBIP_VHCI_HC_PORTS
5899     int "Number of ports per USB/IP virtual host controller"
5900     - range 1 31
5901     + range 1 15
5902     default 8
5903     depends on USBIP_VHCI_HCD
5904     ---help---
5905     diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c
5906     index 1442a4c734c8..a7c87d593083 100644
5907     --- a/fs/ext2/inode.c
5908     +++ b/fs/ext2/inode.c
5909     @@ -1261,21 +1261,11 @@ static void __ext2_truncate_blocks(struct inode *inode, loff_t offset)
5910    
5911     static void ext2_truncate_blocks(struct inode *inode, loff_t offset)
5912     {
5913     - /*
5914     - * XXX: it seems like a bug here that we don't allow
5915     - * IS_APPEND inode to have blocks-past-i_size trimmed off.
5916     - * review and fix this.
5917     - *
5918     - * Also would be nice to be able to handle IO errors and such,
5919     - * but that's probably too much to ask.
5920     - */
5921     if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
5922     S_ISLNK(inode->i_mode)))
5923     return;
5924     if (ext2_inode_is_fast_symlink(inode))
5925     return;
5926     - if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
5927     - return;
5928    
5929     dax_sem_down_write(EXT2_I(inode));
5930     __ext2_truncate_blocks(inode, offset);
5931     diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c
5932     index e5bb2de2262a..3cba08c931ee 100644
5933     --- a/fs/hfsplus/super.c
5934     +++ b/fs/hfsplus/super.c
5935     @@ -588,6 +588,7 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent)
5936     return 0;
5937    
5938     out_put_hidden_dir:
5939     + cancel_delayed_work_sync(&sbi->sync_work);
5940     iput(sbi->hidden_dir);
5941     out_put_root:
5942     dput(sb->s_root);
5943     diff --git a/include/linux/u64_stats_sync.h b/include/linux/u64_stats_sync.h
5944     index 5bdbd9f49395..07ee0f84a46c 100644
5945     --- a/include/linux/u64_stats_sync.h
5946     +++ b/include/linux/u64_stats_sync.h
5947     @@ -90,6 +90,28 @@ static inline void u64_stats_update_end(struct u64_stats_sync *syncp)
5948     #endif
5949     }
5950    
5951     +static inline unsigned long
5952     +u64_stats_update_begin_irqsave(struct u64_stats_sync *syncp)
5953     +{
5954     + unsigned long flags = 0;
5955     +
5956     +#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
5957     + local_irq_save(flags);
5958     + write_seqcount_begin(&syncp->seq);
5959     +#endif
5960     + return flags;
5961     +}
5962     +
5963     +static inline void
5964     +u64_stats_update_end_irqrestore(struct u64_stats_sync *syncp,
5965     + unsigned long flags)
5966     +{
5967     +#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
5968     + write_seqcount_end(&syncp->seq);
5969     + local_irq_restore(flags);
5970     +#endif
5971     +}
5972     +
5973     static inline void u64_stats_update_begin_raw(struct u64_stats_sync *syncp)
5974     {
5975     #if BITS_PER_LONG==32 && defined(CONFIG_SMP)
5976     diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
5977     index f665d2ceac20..590d313b5f39 100644
5978     --- a/include/linux/usb/composite.h
5979     +++ b/include/linux/usb/composite.h
5980     @@ -53,6 +53,9 @@
5981     /* big enough to hold our biggest descriptor */
5982     #define USB_COMP_EP0_BUFSIZ 1024
5983    
5984     +/* OS feature descriptor length <= 4kB */
5985     +#define USB_COMP_EP0_OS_DESC_BUFSIZ 4096
5986     +
5987     #define USB_MS_TO_HS_INTERVAL(x) (ilog2((x * 1000 / 125)) + 1)
5988     struct usb_configuration;
5989    
5990     diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h
5991     index cb85eddb47ea..eb7853c1a23b 100644
5992     --- a/include/scsi/scsi.h
5993     +++ b/include/scsi/scsi.h
5994     @@ -47,6 +47,8 @@ static inline int scsi_status_is_good(int status)
5995     */
5996     status &= 0xfe;
5997     return ((status == SAM_STAT_GOOD) ||
5998     + (status == SAM_STAT_CONDITION_MET) ||
5999     + /* Next two "intermediate" statuses are obsolete in SAM-4 */
6000     (status == SAM_STAT_INTERMEDIATE) ||
6001     (status == SAM_STAT_INTERMEDIATE_CONDITION_MET) ||
6002     /* FIXME: this is obsolete in SAM-3 */
6003     diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
6004     index 51626b4175c0..3fab6c81917f 100644
6005     --- a/include/uapi/linux/nl80211.h
6006     +++ b/include/uapi/linux/nl80211.h
6007     @@ -2604,6 +2604,8 @@ enum nl80211_attrs {
6008     #define NL80211_ATTR_KEYS NL80211_ATTR_KEYS
6009     #define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS
6010    
6011     +#define NL80211_WIPHY_NAME_MAXLEN 128
6012     +
6013     #define NL80211_MAX_SUPP_RATES 32
6014     #define NL80211_MAX_SUPP_HT_RATES 77
6015     #define NL80211_MAX_SUPP_REG_RULES 64
6016     diff --git a/net/core/dev.c b/net/core/dev.c
6017     index e7d56c5adde6..6ca771f2f25b 100644
6018     --- a/net/core/dev.c
6019     +++ b/net/core/dev.c
6020     @@ -2058,7 +2058,7 @@ static bool remove_xps_queue_cpu(struct net_device *dev,
6021     int i, j;
6022    
6023     for (i = count, j = offset; i--; j++) {
6024     - if (!remove_xps_queue(dev_maps, cpu, j))
6025     + if (!remove_xps_queue(dev_maps, tci, j))
6026     break;
6027     }
6028    
6029     diff --git a/net/core/sock.c b/net/core/sock.c
6030     index ec6eb546b228..68d08ed5521e 100644
6031     --- a/net/core/sock.c
6032     +++ b/net/core/sock.c
6033     @@ -1595,7 +1595,7 @@ void sk_destruct(struct sock *sk)
6034    
6035     static void __sk_free(struct sock *sk)
6036     {
6037     - if (unlikely(sock_diag_has_destroy_listeners(sk) && sk->sk_net_refcnt))
6038     + if (unlikely(sk->sk_net_refcnt && sock_diag_has_destroy_listeners(sk)))
6039     sock_diag_broadcast_destroy(sk);
6040     else
6041     sk_destruct(sk);
6042     diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
6043     index e8e675be60ec..63d5d66e040a 100644
6044     --- a/net/ipv4/ip_output.c
6045     +++ b/net/ipv4/ip_output.c
6046     @@ -1040,7 +1040,8 @@ static int __ip_append_data(struct sock *sk,
6047     if (copy > length)
6048     copy = length;
6049    
6050     - if (!(rt->dst.dev->features&NETIF_F_SG)) {
6051     + if (!(rt->dst.dev->features&NETIF_F_SG) &&
6052     + skb_tailroom(skb) >= copy) {
6053     unsigned int off;
6054    
6055     off = skb->len;
6056     diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
6057     index 83d11cd2eb65..abae5196cd3a 100644
6058     --- a/net/ipv4/tcp_output.c
6059     +++ b/net/ipv4/tcp_output.c
6060     @@ -2814,8 +2814,10 @@ int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb, int segs)
6061     return -EBUSY;
6062    
6063     if (before(TCP_SKB_CB(skb)->seq, tp->snd_una)) {
6064     - if (before(TCP_SKB_CB(skb)->end_seq, tp->snd_una))
6065     - BUG();
6066     + if (unlikely(before(TCP_SKB_CB(skb)->end_seq, tp->snd_una))) {
6067     + WARN_ON_ONCE(1);
6068     + return -EINVAL;
6069     + }
6070     if (tcp_trim_head(sk, skb, tp->snd_una - TCP_SKB_CB(skb)->seq))
6071     return -ENOMEM;
6072     }
6073     @@ -3312,6 +3314,7 @@ static void tcp_connect_init(struct sock *sk)
6074     sock_reset_flag(sk, SOCK_DONE);
6075     tp->snd_wnd = 0;
6076     tcp_init_wl(tp, 0);
6077     + tcp_write_queue_purge(sk);
6078     tp->snd_una = tp->write_seq;
6079     tp->snd_sml = tp->write_seq;
6080     tp->snd_up = tp->write_seq;
6081     diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
6082     index ffbb81609016..0f2d74885bcb 100644
6083     --- a/net/ipv6/ip6_output.c
6084     +++ b/net/ipv6/ip6_output.c
6085     @@ -1488,7 +1488,8 @@ static int __ip6_append_data(struct sock *sk,
6086     if (copy > length)
6087     copy = length;
6088    
6089     - if (!(rt->dst.dev->features&NETIF_F_SG)) {
6090     + if (!(rt->dst.dev->features&NETIF_F_SG) &&
6091     + skb_tailroom(skb) >= copy) {
6092     unsigned int off;
6093    
6094     off = skb->len;
6095     diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
6096     index 3994b71f8197..8351faabba62 100644
6097     --- a/net/packet/af_packet.c
6098     +++ b/net/packet/af_packet.c
6099     @@ -2912,13 +2912,15 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
6100     if (skb == NULL)
6101     goto out_unlock;
6102    
6103     - skb_set_network_header(skb, reserve);
6104     + skb_reset_network_header(skb);
6105    
6106     err = -EINVAL;
6107     if (sock->type == SOCK_DGRAM) {
6108     offset = dev_hard_header(skb, dev, ntohs(proto), addr, NULL, len);
6109     if (unlikely(offset < 0))
6110     goto out_free;
6111     + } else if (reserve) {
6112     + skb_push(skb, reserve);
6113     }
6114    
6115     /* Returns -EFAULT on error */
6116     diff --git a/net/sched/act_vlan.c b/net/sched/act_vlan.c
6117     index 16eb067a8d8f..5c10a0fce35b 100644
6118     --- a/net/sched/act_vlan.c
6119     +++ b/net/sched/act_vlan.c
6120     @@ -154,6 +154,8 @@ static int tcf_vlan_init(struct net *net, struct nlattr *nla,
6121     case htons(ETH_P_8021AD):
6122     break;
6123     default:
6124     + if (exists)
6125     + tcf_idr_release(*a, bind);
6126     return -EPROTONOSUPPORT;
6127     }
6128     } else {
6129     diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c
6130     index d87c41e82917..c453b8d81c9e 100644
6131     --- a/net/sched/sch_red.c
6132     +++ b/net/sched/sch_red.c
6133     @@ -191,10 +191,11 @@ static int red_change(struct Qdisc *sch, struct nlattr *opt)
6134     child = fifo_create_dflt(sch, &bfifo_qdisc_ops, ctl->limit);
6135     if (IS_ERR(child))
6136     return PTR_ERR(child);
6137     - }
6138    
6139     - if (child != &noop_qdisc)
6140     + /* child is fifo, no need to check for noop_qdisc */
6141     qdisc_hash_add(child, true);
6142     + }
6143     +
6144     sch_tree_lock(sch);
6145     q->flags = ctl->flags;
6146     q->limit = ctl->limit;
6147     diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c
6148     index 120f4f365967..b36ecb58aa6e 100644
6149     --- a/net/sched/sch_tbf.c
6150     +++ b/net/sched/sch_tbf.c
6151     @@ -388,6 +388,9 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt)
6152     err = PTR_ERR(child);
6153     goto done;
6154     }
6155     +
6156     + /* child is fifo, no need to check for noop_qdisc */
6157     + qdisc_hash_add(child, true);
6158     }
6159    
6160     sch_tree_lock(sch);
6161     @@ -396,8 +399,6 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt)
6162     q->qdisc->qstats.backlog);
6163     qdisc_destroy(q->qdisc);
6164     q->qdisc = child;
6165     - if (child != &noop_qdisc)
6166     - qdisc_hash_add(child, true);
6167     }
6168     q->limit = qopt->limit;
6169     if (tb[TCA_TBF_PBURST])
6170     diff --git a/net/smc/smc_pnet.c b/net/smc/smc_pnet.c
6171     index 74568cdbca70..d7b88b2d1b22 100644
6172     --- a/net/smc/smc_pnet.c
6173     +++ b/net/smc/smc_pnet.c
6174     @@ -245,40 +245,45 @@ static struct smc_ib_device *smc_pnet_find_ib(char *ib_name)
6175     static int smc_pnet_fill_entry(struct net *net, struct smc_pnetentry *pnetelem,
6176     struct nlattr *tb[])
6177     {
6178     - char *string, *ibname = NULL;
6179     - int rc = 0;
6180     + char *string, *ibname;
6181     + int rc;
6182    
6183     memset(pnetelem, 0, sizeof(*pnetelem));
6184     INIT_LIST_HEAD(&pnetelem->list);
6185     - if (tb[SMC_PNETID_NAME]) {
6186     - string = (char *)nla_data(tb[SMC_PNETID_NAME]);
6187     - if (!smc_pnetid_valid(string, pnetelem->pnet_name)) {
6188     - rc = -EINVAL;
6189     - goto error;
6190     - }
6191     - }
6192     - if (tb[SMC_PNETID_ETHNAME]) {
6193     - string = (char *)nla_data(tb[SMC_PNETID_ETHNAME]);
6194     - pnetelem->ndev = dev_get_by_name(net, string);
6195     - if (!pnetelem->ndev)
6196     - return -ENOENT;
6197     - }
6198     - if (tb[SMC_PNETID_IBNAME]) {
6199     - ibname = (char *)nla_data(tb[SMC_PNETID_IBNAME]);
6200     - ibname = strim(ibname);
6201     - pnetelem->smcibdev = smc_pnet_find_ib(ibname);
6202     - if (!pnetelem->smcibdev) {
6203     - rc = -ENOENT;
6204     - goto error;
6205     - }
6206     - }
6207     - if (tb[SMC_PNETID_IBPORT]) {
6208     - pnetelem->ib_port = nla_get_u8(tb[SMC_PNETID_IBPORT]);
6209     - if (pnetelem->ib_port > SMC_MAX_PORTS) {
6210     - rc = -EINVAL;
6211     - goto error;
6212     - }
6213     - }
6214     +
6215     + rc = -EINVAL;
6216     + if (!tb[SMC_PNETID_NAME])
6217     + goto error;
6218     + string = (char *)nla_data(tb[SMC_PNETID_NAME]);
6219     + if (!smc_pnetid_valid(string, pnetelem->pnet_name))
6220     + goto error;
6221     +
6222     + rc = -EINVAL;
6223     + if (!tb[SMC_PNETID_ETHNAME])
6224     + goto error;
6225     + rc = -ENOENT;
6226     + string = (char *)nla_data(tb[SMC_PNETID_ETHNAME]);
6227     + pnetelem->ndev = dev_get_by_name(net, string);
6228     + if (!pnetelem->ndev)
6229     + goto error;
6230     +
6231     + rc = -EINVAL;
6232     + if (!tb[SMC_PNETID_IBNAME])
6233     + goto error;
6234     + rc = -ENOENT;
6235     + ibname = (char *)nla_data(tb[SMC_PNETID_IBNAME]);
6236     + ibname = strim(ibname);
6237     + pnetelem->smcibdev = smc_pnet_find_ib(ibname);
6238     + if (!pnetelem->smcibdev)
6239     + goto error;
6240     +
6241     + rc = -EINVAL;
6242     + if (!tb[SMC_PNETID_IBPORT])
6243     + goto error;
6244     + pnetelem->ib_port = nla_get_u8(tb[SMC_PNETID_IBPORT]);
6245     + if (pnetelem->ib_port < 1 || pnetelem->ib_port > SMC_MAX_PORTS)
6246     + goto error;
6247     +
6248     return 0;
6249    
6250     error:
6251     @@ -307,6 +312,8 @@ static int smc_pnet_get(struct sk_buff *skb, struct genl_info *info)
6252     void *hdr;
6253     int rc;
6254    
6255     + if (!info->attrs[SMC_PNETID_NAME])
6256     + return -EINVAL;
6257     pnetelem = smc_pnet_find_pnetid(
6258     (char *)nla_data(info->attrs[SMC_PNETID_NAME]));
6259     if (!pnetelem)
6260     @@ -359,6 +366,8 @@ static int smc_pnet_add(struct sk_buff *skb, struct genl_info *info)
6261    
6262     static int smc_pnet_del(struct sk_buff *skb, struct genl_info *info)
6263     {
6264     + if (!info->attrs[SMC_PNETID_NAME])
6265     + return -EINVAL;
6266     return smc_pnet_remove_by_pnetid(
6267     (char *)nla_data(info->attrs[SMC_PNETID_NAME]));
6268     }
6269     diff --git a/net/wireless/core.c b/net/wireless/core.c
6270     index 33ce0484b2a0..45cbade9ad68 100644
6271     --- a/net/wireless/core.c
6272     +++ b/net/wireless/core.c
6273     @@ -95,6 +95,9 @@ static int cfg80211_dev_check_name(struct cfg80211_registered_device *rdev,
6274    
6275     ASSERT_RTNL();
6276    
6277     + if (strlen(newname) > NL80211_WIPHY_NAME_MAXLEN)
6278     + return -EINVAL;
6279     +
6280     /* prohibit calling the thing phy%d when %d is not its number */
6281     sscanf(newname, PHY_NAME "%d%n", &wiphy_idx, &taken);
6282     if (taken == strlen(newname) && wiphy_idx != rdev->wiphy_idx) {
6283     diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c
6284     index 3abf82563408..cf3b905b4ead 100644
6285     --- a/sound/soc/codecs/hdmi-codec.c
6286     +++ b/sound/soc/codecs/hdmi-codec.c
6287     @@ -801,12 +801,7 @@ static int hdmi_codec_probe(struct platform_device *pdev)
6288    
6289     static int hdmi_codec_remove(struct platform_device *pdev)
6290     {
6291     - struct device *dev = &pdev->dev;
6292     - struct hdmi_codec_priv *hcp;
6293     -
6294     - hcp = dev_get_drvdata(dev);
6295     - kfree(hcp->chmap_info);
6296     - snd_soc_unregister_codec(dev);
6297     + snd_soc_unregister_codec(&pdev->dev);
6298    
6299     return 0;
6300     }
6301     diff --git a/sound/soc/rockchip/Kconfig b/sound/soc/rockchip/Kconfig
6302     index b0825370d262..957046ac6c8c 100644
6303     --- a/sound/soc/rockchip/Kconfig
6304     +++ b/sound/soc/rockchip/Kconfig
6305     @@ -56,6 +56,9 @@ config SND_SOC_RK3288_HDMI_ANALOG
6306     depends on SND_SOC_ROCKCHIP && I2C && GPIOLIB && CLKDEV_LOOKUP
6307     select SND_SOC_ROCKCHIP_I2S
6308     select SND_SOC_HDMI_CODEC
6309     + select SND_SOC_ES8328_I2C
6310     + select SND_SOC_ES8328_SPI if SPI_MASTER
6311     + select DRM_DW_HDMI_I2S_AUDIO if DRM_DW_HDMI
6312     help
6313     Say Y or M here if you want to add support for SoC audio on Rockchip
6314     RK3288 boards using an analog output and the built-in HDMI audio.
6315     diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c
6316     index 10a4da06c0a1..f058f2bdd519 100644
6317     --- a/sound/soc/samsung/i2s.c
6318     +++ b/sound/soc/samsung/i2s.c
6319     @@ -653,8 +653,12 @@ static int i2s_set_fmt(struct snd_soc_dai *dai,
6320     tmp |= mod_slave;
6321     break;
6322     case SND_SOC_DAIFMT_CBS_CFS:
6323     - /* Set default source clock in Master mode */
6324     - if (i2s->rclk_srcrate == 0)
6325     + /*
6326     + * Set default source clock in Master mode, only when the
6327     + * CLK_I2S_RCLK_SRC clock is not exposed so we ensure any
6328     + * clock configuration assigned in DT is not overwritten.
6329     + */
6330     + if (i2s->rclk_srcrate == 0 && i2s->clk_data.clks == NULL)
6331     i2s_set_sysclk(dai, SAMSUNG_I2S_RCLKSRC_0,
6332     0, SND_SOC_CLOCK_IN);
6333     break;
6334     @@ -878,6 +882,11 @@ static int config_setup(struct i2s_dai *i2s)
6335     return 0;
6336    
6337     if (!(i2s->quirks & QUIRK_NO_MUXPSR)) {
6338     + struct clk *rclksrc = i2s->clk_table[CLK_I2S_RCLK_SRC];
6339     +
6340     + if (i2s->rclk_srcrate == 0 && rclksrc && !IS_ERR(rclksrc))
6341     + i2s->rclk_srcrate = clk_get_rate(rclksrc);
6342     +
6343     psr = i2s->rclk_srcrate / i2s->frmclk / rfs;
6344     writel(((psr - 1) << 8) | PSR_PSREN, i2s->addr + I2SPSR);
6345     dev_dbg(&i2s->pdev->dev,
6346     diff --git a/sound/soc/samsung/odroid.c b/sound/soc/samsung/odroid.c
6347     index 44b6de5a331a..06a31a9585a0 100644
6348     --- a/sound/soc/samsung/odroid.c
6349     +++ b/sound/soc/samsung/odroid.c
6350     @@ -36,23 +36,26 @@ static int odroid_card_hw_params(struct snd_pcm_substream *substream,
6351     {
6352     struct snd_soc_pcm_runtime *rtd = substream->private_data;
6353     struct odroid_priv *priv = snd_soc_card_get_drvdata(rtd->card);
6354     - unsigned int pll_freq, rclk_freq;
6355     + unsigned int pll_freq, rclk_freq, rfs;
6356     int ret;
6357    
6358     switch (params_rate(params)) {
6359     - case 32000:
6360     case 64000:
6361     - pll_freq = 131072006U;
6362     + pll_freq = 196608001U;
6363     + rfs = 384;
6364     break;
6365     case 44100:
6366     case 88200:
6367     case 176400:
6368     pll_freq = 180633609U;
6369     + rfs = 512;
6370     break;
6371     + case 32000:
6372     case 48000:
6373     case 96000:
6374     case 192000:
6375     pll_freq = 196608001U;
6376     + rfs = 512;
6377     break;
6378     default:
6379     return -EINVAL;
6380     @@ -67,7 +70,7 @@ static int odroid_card_hw_params(struct snd_pcm_substream *substream,
6381     * frequency values due to the EPLL output frequency not being exact
6382     * multiple of the audio sampling rate.
6383     */
6384     - rclk_freq = params_rate(params) * 256 + 1;
6385     + rclk_freq = params_rate(params) * rfs + 1;
6386    
6387     ret = clk_set_rate(priv->sclk_i2s, rclk_freq);
6388     if (ret < 0)
6389     diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
6390     index 782c580b7aa3..e5049fbfc4f1 100644
6391     --- a/sound/soc/soc-topology.c
6392     +++ b/sound/soc/soc-topology.c
6393     @@ -1276,6 +1276,9 @@ static struct snd_kcontrol_new *soc_tplg_dapm_widget_dmixer_create(
6394     kfree(sm);
6395     continue;
6396     }
6397     +
6398     + /* create any TLV data */
6399     + soc_tplg_create_tlv(tplg, &kc[i], &mc->hdr);
6400     }
6401     return kc;
6402    
6403     diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
6404     index 58f94f399efb..ad14d6b78bdc 100644
6405     --- a/sound/usb/quirks.c
6406     +++ b/sound/usb/quirks.c
6407     @@ -1155,24 +1155,27 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
6408     return false;
6409     }
6410    
6411     -/* Marantz/Denon USB DACs need a vendor cmd to switch
6412     +/* ITF-USB DSD based DACs need a vendor cmd to switch
6413     * between PCM and native DSD mode
6414     + * (2 altsets version)
6415     */
6416     -static bool is_marantz_denon_dac(unsigned int id)
6417     +static bool is_itf_usb_dsd_2alts_dac(unsigned int id)
6418     {
6419     switch (id) {
6420     case USB_ID(0x154e, 0x1003): /* Denon DA-300USB */
6421     case USB_ID(0x154e, 0x3005): /* Marantz HD-DAC1 */
6422     case USB_ID(0x154e, 0x3006): /* Marantz SA-14S1 */
6423     + case USB_ID(0x1852, 0x5065): /* Luxman DA-06 */
6424     return true;
6425     }
6426     return false;
6427     }
6428    
6429     -/* TEAC UD-501/UD-503/NT-503 USB DACs need a vendor cmd to switch
6430     - * between PCM/DOP and native DSD mode
6431     +/* ITF-USB DSD based DACs need a vendor cmd to switch
6432     + * between PCM and native DSD mode
6433     + * (3 altsets version)
6434     */
6435     -static bool is_teac_dsd_dac(unsigned int id)
6436     +static bool is_itf_usb_dsd_3alts_dac(unsigned int id)
6437     {
6438     switch (id) {
6439     case USB_ID(0x0644, 0x8043): /* TEAC UD-501/UD-503/NT-503 */
6440     @@ -1189,7 +1192,7 @@ int snd_usb_select_mode_quirk(struct snd_usb_substream *subs,
6441     struct usb_device *dev = subs->dev;
6442     int err;
6443    
6444     - if (is_marantz_denon_dac(subs->stream->chip->usb_id)) {
6445     + if (is_itf_usb_dsd_2alts_dac(subs->stream->chip->usb_id)) {
6446     /* First switch to alt set 0, otherwise the mode switch cmd
6447     * will not be accepted by the DAC
6448     */
6449     @@ -1210,7 +1213,7 @@ int snd_usb_select_mode_quirk(struct snd_usb_substream *subs,
6450     break;
6451     }
6452     mdelay(20);
6453     - } else if (is_teac_dsd_dac(subs->stream->chip->usb_id)) {
6454     + } else if (is_itf_usb_dsd_3alts_dac(subs->stream->chip->usb_id)) {
6455     /* Vendor mode switch cmd is required. */
6456     switch (fmt->altsetting) {
6457     case 3: /* DSD mode (DSD_U32) requested */
6458     @@ -1306,10 +1309,10 @@ void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
6459     (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
6460     mdelay(20);
6461    
6462     - /* Marantz/Denon devices with USB DAC functionality need a delay
6463     + /* ITF-USB DSD based DACs functionality need a delay
6464     * after each class compliant request
6465     */
6466     - if (is_marantz_denon_dac(chip->usb_id)
6467     + if (is_itf_usb_dsd_2alts_dac(chip->usb_id)
6468     && (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
6469     mdelay(20);
6470    
6471     @@ -1396,14 +1399,14 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
6472     break;
6473     }
6474    
6475     - /* Denon/Marantz devices with USB DAC functionality */
6476     - if (is_marantz_denon_dac(chip->usb_id)) {
6477     + /* ITF-USB DSD based DACs (2 altsets version) */
6478     + if (is_itf_usb_dsd_2alts_dac(chip->usb_id)) {
6479     if (fp->altsetting == 2)
6480     return SNDRV_PCM_FMTBIT_DSD_U32_BE;
6481     }
6482    
6483     - /* TEAC devices with USB DAC functionality */
6484     - if (is_teac_dsd_dac(chip->usb_id)) {
6485     + /* ITF-USB DSD based DACs (3 altsets version) */
6486     + if (is_itf_usb_dsd_3alts_dac(chip->usb_id)) {
6487     if (fp->altsetting == 3)
6488     return SNDRV_PCM_FMTBIT_DSD_U32_BE;
6489     }