Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.9/0163-4.9.64-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3048 - (hide annotations) (download)
Wed Dec 20 11:49:39 2017 UTC (6 years, 4 months ago) by niro
File size: 88990 byte(s)
-linux-4.9.64
1 niro 3048 diff --git a/Documentation/devicetree/bindings/arm/davinci.txt b/Documentation/devicetree/bindings/arm/davinci.txt
2     index 715622c36260..f0841ce725b5 100644
3     --- a/Documentation/devicetree/bindings/arm/davinci.txt
4     +++ b/Documentation/devicetree/bindings/arm/davinci.txt
5     @@ -13,10 +13,6 @@ EnBW AM1808 based CMC board
6     Required root node properties:
7     - compatible = "enbw,cmc", "ti,da850;
8    
9     -LEGO MINDSTORMS EV3 (AM1808 based)
10     -Required root node properties:
11     - - compatible = "lego,ev3", "ti,da850";
12     -
13     Generic DaVinci Boards
14     ----------------------
15    
16     diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
17     index f949a22bcd74..bceffffb7502 100644
18     --- a/Documentation/devicetree/bindings/vendor-prefixes.txt
19     +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
20     @@ -154,7 +154,6 @@ kosagi Sutajio Ko-Usagi PTE Ltd.
21     kyo Kyocera Corporation
22     lacie LaCie
23     lantiq Lantiq Semiconductor
24     -lego LEGO Systems A/S
25     lenovo Lenovo Group Ltd.
26     lg LG Corporation
27     linux Linux-specific binding
28     diff --git a/Makefile b/Makefile
29     index 339d4a85ffba..d29cace0da6d 100644
30     --- a/Makefile
31     +++ b/Makefile
32     @@ -1,6 +1,6 @@
33     VERSION = 4
34     PATCHLEVEL = 9
35     -SUBLEVEL = 63
36     +SUBLEVEL = 64
37     EXTRAVERSION =
38     NAME = Roaring Lionus
39    
40     diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
41     index 795c1467fa50..a3277e6436d5 100644
42     --- a/arch/arm/boot/dts/am33xx.dtsi
43     +++ b/arch/arm/boot/dts/am33xx.dtsi
44     @@ -143,10 +143,11 @@
45     };
46    
47     scm_conf: scm_conf@0 {
48     - compatible = "syscon";
49     + compatible = "syscon", "simple-bus";
50     reg = <0x0 0x800>;
51     #address-cells = <1>;
52     #size-cells = <1>;
53     + ranges = <0 0 0x800>;
54    
55     scm_clocks: clocks {
56     #address-cells = <1>;
57     diff --git a/arch/arm/boot/dts/dm814x.dtsi b/arch/arm/boot/dts/dm814x.dtsi
58     index d87efab24fa2..ff57a20af9cd 100644
59     --- a/arch/arm/boot/dts/dm814x.dtsi
60     +++ b/arch/arm/boot/dts/dm814x.dtsi
61     @@ -252,7 +252,7 @@
62     };
63    
64     uart1: uart@20000 {
65     - compatible = "ti,omap3-uart";
66     + compatible = "ti,am3352-uart", "ti,omap3-uart";
67     ti,hwmods = "uart1";
68     reg = <0x20000 0x2000>;
69     clock-frequency = <48000000>;
70     @@ -262,7 +262,7 @@
71     };
72    
73     uart2: uart@22000 {
74     - compatible = "ti,omap3-uart";
75     + compatible = "ti,am3352-uart", "ti,omap3-uart";
76     ti,hwmods = "uart2";
77     reg = <0x22000 0x2000>;
78     clock-frequency = <48000000>;
79     @@ -272,7 +272,7 @@
80     };
81    
82     uart3: uart@24000 {
83     - compatible = "ti,omap3-uart";
84     + compatible = "ti,am3352-uart", "ti,omap3-uart";
85     ti,hwmods = "uart3";
86     reg = <0x24000 0x2000>;
87     clock-frequency = <48000000>;
88     @@ -332,10 +332,11 @@
89     ranges = <0 0x140000 0x20000>;
90    
91     scm_conf: scm_conf@0 {
92     - compatible = "syscon";
93     + compatible = "syscon", "simple-bus";
94     reg = <0x0 0x800>;
95     #address-cells = <1>;
96     #size-cells = <1>;
97     + ranges = <0 0 0x800>;
98    
99     scm_clocks: clocks {
100     #address-cells = <1>;
101     diff --git a/arch/arm/boot/dts/dm816x.dtsi b/arch/arm/boot/dts/dm816x.dtsi
102     index cbdfbc4e4a26..62c0a6155360 100644
103     --- a/arch/arm/boot/dts/dm816x.dtsi
104     +++ b/arch/arm/boot/dts/dm816x.dtsi
105     @@ -371,7 +371,7 @@
106     };
107    
108     uart1: uart@48020000 {
109     - compatible = "ti,omap3-uart";
110     + compatible = "ti,am3352-uart", "ti,omap3-uart";
111     ti,hwmods = "uart1";
112     reg = <0x48020000 0x2000>;
113     clock-frequency = <48000000>;
114     @@ -381,7 +381,7 @@
115     };
116    
117     uart2: uart@48022000 {
118     - compatible = "ti,omap3-uart";
119     + compatible = "ti,am3352-uart", "ti,omap3-uart";
120     ti,hwmods = "uart2";
121     reg = <0x48022000 0x2000>;
122     clock-frequency = <48000000>;
123     @@ -391,7 +391,7 @@
124     };
125    
126     uart3: uart@48024000 {
127     - compatible = "ti,omap3-uart";
128     + compatible = "ti,am3352-uart", "ti,omap3-uart";
129     ti,hwmods = "uart3";
130     reg = <0x48024000 0x2000>;
131     clock-frequency = <48000000>;
132     diff --git a/arch/arm/boot/dts/omap5-uevm.dts b/arch/arm/boot/dts/omap5-uevm.dts
133     index 53d31a87b44b..f3a3e6be79fe 100644
134     --- a/arch/arm/boot/dts/omap5-uevm.dts
135     +++ b/arch/arm/boot/dts/omap5-uevm.dts
136     @@ -18,6 +18,10 @@
137     reg = <0 0x80000000 0 0x7f000000>; /* 2032 MB */
138     };
139    
140     + aliases {
141     + ethernet = &ethernet;
142     + };
143     +
144     leds {
145     compatible = "gpio-leds";
146     led1 {
147     @@ -72,6 +76,23 @@
148     >;
149     };
150    
151     +&usbhsehci {
152     + #address-cells = <1>;
153     + #size-cells = <0>;
154     +
155     + hub@2 {
156     + compatible = "usb424,3503";
157     + reg = <2>;
158     + #address-cells = <1>;
159     + #size-cells = <0>;
160     + };
161     +
162     + ethernet: usbether@3 {
163     + compatible = "usb424,9730";
164     + reg = <3>;
165     + };
166     +};
167     +
168     &wlcore {
169     compatible = "ti,wl1837";
170     };
171     diff --git a/arch/arm/crypto/aesbs-glue.c b/arch/arm/crypto/aesbs-glue.c
172     index 0511a6cafe24..5d934a0039d7 100644
173     --- a/arch/arm/crypto/aesbs-glue.c
174     +++ b/arch/arm/crypto/aesbs-glue.c
175     @@ -363,7 +363,7 @@ static struct crypto_alg aesbs_algs[] = { {
176     }, {
177     .cra_name = "cbc(aes)",
178     .cra_driver_name = "cbc-aes-neonbs",
179     - .cra_priority = 300,
180     + .cra_priority = 250,
181     .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER|CRYPTO_ALG_ASYNC,
182     .cra_blocksize = AES_BLOCK_SIZE,
183     .cra_ctxsize = sizeof(struct async_helper_ctx),
184     @@ -383,7 +383,7 @@ static struct crypto_alg aesbs_algs[] = { {
185     }, {
186     .cra_name = "ctr(aes)",
187     .cra_driver_name = "ctr-aes-neonbs",
188     - .cra_priority = 300,
189     + .cra_priority = 250,
190     .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER|CRYPTO_ALG_ASYNC,
191     .cra_blocksize = 1,
192     .cra_ctxsize = sizeof(struct async_helper_ctx),
193     @@ -403,7 +403,7 @@ static struct crypto_alg aesbs_algs[] = { {
194     }, {
195     .cra_name = "xts(aes)",
196     .cra_driver_name = "xts-aes-neonbs",
197     - .cra_priority = 300,
198     + .cra_priority = 250,
199     .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER|CRYPTO_ALG_ASYNC,
200     .cra_blocksize = AES_BLOCK_SIZE,
201     .cra_ctxsize = sizeof(struct async_helper_ctx),
202     diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c
203     index 05e20aaf68dd..770216baa737 100644
204     --- a/arch/arm/mach-omap2/pdata-quirks.c
205     +++ b/arch/arm/mach-omap2/pdata-quirks.c
206     @@ -600,7 +600,6 @@ static void pdata_quirks_check(struct pdata_init *quirks)
207     if (of_machine_is_compatible(quirks->compatible)) {
208     if (quirks->fn)
209     quirks->fn();
210     - break;
211     }
212     quirks++;
213     }
214     diff --git a/arch/arm64/boot/dts/broadcom/ns2.dtsi b/arch/arm64/boot/dts/broadcom/ns2.dtsi
215     index d95dc408629a..a16b1b3f9fc6 100644
216     --- a/arch/arm64/boot/dts/broadcom/ns2.dtsi
217     +++ b/arch/arm64/boot/dts/broadcom/ns2.dtsi
218     @@ -30,6 +30,8 @@
219     * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
220     */
221    
222     +/memreserve/ 0x81000000 0x00200000;
223     +
224     #include <dt-bindings/interrupt-controller/arm-gic.h>
225     #include <dt-bindings/clock/bcm-ns2.h>
226    
227     diff --git a/arch/mips/include/asm/asm.h b/arch/mips/include/asm/asm.h
228     index 7c26b28bf252..859cf7048347 100644
229     --- a/arch/mips/include/asm/asm.h
230     +++ b/arch/mips/include/asm/asm.h
231     @@ -54,7 +54,8 @@
232     .align 2; \
233     .type symbol, @function; \
234     .ent symbol, 0; \
235     -symbol: .frame sp, 0, ra
236     +symbol: .frame sp, 0, ra; \
237     + .insn
238    
239     /*
240     * NESTED - declare nested routine entry point
241     @@ -63,8 +64,9 @@ symbol: .frame sp, 0, ra
242     .globl symbol; \
243     .align 2; \
244     .type symbol, @function; \
245     - .ent symbol, 0; \
246     -symbol: .frame sp, framesize, rpc
247     + .ent symbol, 0; \
248     +symbol: .frame sp, framesize, rpc; \
249     + .insn
250    
251     /*
252     * END - mark end of function
253     @@ -86,7 +88,7 @@ symbol: .frame sp, framesize, rpc
254     #define FEXPORT(symbol) \
255     .globl symbol; \
256     .type symbol, @function; \
257     -symbol:
258     +symbol: .insn
259    
260     /*
261     * ABS - export absolute symbol
262     diff --git a/arch/mips/include/asm/mips-cm.h b/arch/mips/include/asm/mips-cm.h
263     index b6845db453a3..163317fd3d7e 100644
264     --- a/arch/mips/include/asm/mips-cm.h
265     +++ b/arch/mips/include/asm/mips-cm.h
266     @@ -187,6 +187,7 @@ BUILD_CM_R_(config, MIPS_CM_GCB_OFS + 0x00)
267     BUILD_CM_RW(base, MIPS_CM_GCB_OFS + 0x08)
268     BUILD_CM_RW(access, MIPS_CM_GCB_OFS + 0x20)
269     BUILD_CM_R_(rev, MIPS_CM_GCB_OFS + 0x30)
270     +BUILD_CM_RW(err_control, MIPS_CM_GCB_OFS + 0x38)
271     BUILD_CM_RW(error_mask, MIPS_CM_GCB_OFS + 0x40)
272     BUILD_CM_RW(error_cause, MIPS_CM_GCB_OFS + 0x48)
273     BUILD_CM_RW(error_addr, MIPS_CM_GCB_OFS + 0x50)
274     @@ -266,6 +267,12 @@ BUILD_CM_Cx_R_(tcid_8_priority, 0x80)
275     #define CM_REV_CM2_5 CM_ENCODE_REV(7, 0)
276     #define CM_REV_CM3 CM_ENCODE_REV(8, 0)
277    
278     +/* GCR_ERR_CONTROL register fields */
279     +#define CM_GCR_ERR_CONTROL_L2_ECC_EN_SHF 1
280     +#define CM_GCR_ERR_CONTROL_L2_ECC_EN_MSK (_ULCAST_(0x1) << 1)
281     +#define CM_GCR_ERR_CONTROL_L2_ECC_SUPPORT_SHF 0
282     +#define CM_GCR_ERR_CONTROL_L2_ECC_SUPPORT_MSK (_ULCAST_(0x1) << 0)
283     +
284     /* GCR_ERROR_CAUSE register fields */
285     #define CM_GCR_ERROR_CAUSE_ERRTYPE_SHF 27
286     #define CM_GCR_ERROR_CAUSE_ERRTYPE_MSK (_ULCAST_(0x1f) << 27)
287     diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
288     index f66e5ce505b2..695950361d2a 100644
289     --- a/arch/mips/kernel/setup.c
290     +++ b/arch/mips/kernel/setup.c
291     @@ -153,6 +153,35 @@ void __init detect_memory_region(phys_addr_t start, phys_addr_t sz_min, phys_add
292     add_memory_region(start, size, BOOT_MEM_RAM);
293     }
294    
295     +bool __init memory_region_available(phys_addr_t start, phys_addr_t size)
296     +{
297     + int i;
298     + bool in_ram = false, free = true;
299     +
300     + for (i = 0; i < boot_mem_map.nr_map; i++) {
301     + phys_addr_t start_, end_;
302     +
303     + start_ = boot_mem_map.map[i].addr;
304     + end_ = boot_mem_map.map[i].addr + boot_mem_map.map[i].size;
305     +
306     + switch (boot_mem_map.map[i].type) {
307     + case BOOT_MEM_RAM:
308     + if (start >= start_ && start + size <= end_)
309     + in_ram = true;
310     + break;
311     + case BOOT_MEM_RESERVED:
312     + if ((start >= start_ && start < end_) ||
313     + (start < start_ && start + size >= start_))
314     + free = false;
315     + break;
316     + default:
317     + continue;
318     + }
319     + }
320     +
321     + return in_ram && free;
322     +}
323     +
324     static void __init print_memory_map(void)
325     {
326     int i;
327     @@ -332,11 +361,19 @@ static void __init bootmem_init(void)
328    
329     #else /* !CONFIG_SGI_IP27 */
330    
331     +static unsigned long __init bootmap_bytes(unsigned long pages)
332     +{
333     + unsigned long bytes = DIV_ROUND_UP(pages, 8);
334     +
335     + return ALIGN(bytes, sizeof(long));
336     +}
337     +
338     static void __init bootmem_init(void)
339     {
340     unsigned long reserved_end;
341     unsigned long mapstart = ~0UL;
342     unsigned long bootmap_size;
343     + bool bootmap_valid = false;
344     int i;
345    
346     /*
347     @@ -430,11 +467,42 @@ static void __init bootmem_init(void)
348     #endif
349    
350     /*
351     - * Initialize the boot-time allocator with low memory only.
352     + * check that mapstart doesn't overlap with any of
353     + * memory regions that have been reserved through eg. DTB
354     */
355     - bootmap_size = init_bootmem_node(NODE_DATA(0), mapstart,
356     - min_low_pfn, max_low_pfn);
357     + bootmap_size = bootmap_bytes(max_low_pfn - min_low_pfn);
358     +
359     + bootmap_valid = memory_region_available(PFN_PHYS(mapstart),
360     + bootmap_size);
361     + for (i = 0; i < boot_mem_map.nr_map && !bootmap_valid; i++) {
362     + unsigned long mapstart_addr;
363     +
364     + switch (boot_mem_map.map[i].type) {
365     + case BOOT_MEM_RESERVED:
366     + mapstart_addr = PFN_ALIGN(boot_mem_map.map[i].addr +
367     + boot_mem_map.map[i].size);
368     + if (PHYS_PFN(mapstart_addr) < mapstart)
369     + break;
370     +
371     + bootmap_valid = memory_region_available(mapstart_addr,
372     + bootmap_size);
373     + if (bootmap_valid)
374     + mapstart = PHYS_PFN(mapstart_addr);
375     + break;
376     + default:
377     + break;
378     + }
379     + }
380    
381     + if (!bootmap_valid)
382     + panic("No memory area to place a bootmap bitmap");
383     +
384     + /*
385     + * Initialize the boot-time allocator with low memory only.
386     + */
387     + if (bootmap_size != init_bootmem_node(NODE_DATA(0), mapstart,
388     + min_low_pfn, max_low_pfn))
389     + panic("Unexpected memory size required for bootmap");
390    
391     for (i = 0; i < boot_mem_map.nr_map; i++) {
392     unsigned long start, end;
393     @@ -483,6 +551,10 @@ static void __init bootmem_init(void)
394     continue;
395     default:
396     /* Not usable memory */
397     + if (start > min_low_pfn && end < max_low_pfn)
398     + reserve_bootmem(boot_mem_map.map[i].addr,
399     + boot_mem_map.map[i].size,
400     + BOOTMEM_DEFAULT);
401     continue;
402     }
403    
404     diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
405     index b0b29cb6f3d8..bb1d9ff1be5c 100644
406     --- a/arch/mips/kernel/traps.c
407     +++ b/arch/mips/kernel/traps.c
408     @@ -51,6 +51,7 @@
409     #include <asm/idle.h>
410     #include <asm/mips-cm.h>
411     #include <asm/mips-r2-to-r6-emul.h>
412     +#include <asm/mips-cm.h>
413     #include <asm/mipsregs.h>
414     #include <asm/mipsmtregs.h>
415     #include <asm/module.h>
416     @@ -1646,6 +1647,65 @@ __setup("nol2par", nol2parity);
417     */
418     static inline void parity_protection_init(void)
419     {
420     +#define ERRCTL_PE 0x80000000
421     +#define ERRCTL_L2P 0x00800000
422     +
423     + if (mips_cm_revision() >= CM_REV_CM3) {
424     + ulong gcr_ectl, cp0_ectl;
425     +
426     + /*
427     + * With CM3 systems we need to ensure that the L1 & L2
428     + * parity enables are set to the same value, since this
429     + * is presumed by the hardware engineers.
430     + *
431     + * If the user disabled either of L1 or L2 ECC checking,
432     + * disable both.
433     + */
434     + l1parity &= l2parity;
435     + l2parity &= l1parity;
436     +
437     + /* Probe L1 ECC support */
438     + cp0_ectl = read_c0_ecc();
439     + write_c0_ecc(cp0_ectl | ERRCTL_PE);
440     + back_to_back_c0_hazard();
441     + cp0_ectl = read_c0_ecc();
442     +
443     + /* Probe L2 ECC support */
444     + gcr_ectl = read_gcr_err_control();
445     +
446     + if (!(gcr_ectl & CM_GCR_ERR_CONTROL_L2_ECC_SUPPORT_MSK) ||
447     + !(cp0_ectl & ERRCTL_PE)) {
448     + /*
449     + * One of L1 or L2 ECC checking isn't supported,
450     + * so we cannot enable either.
451     + */
452     + l1parity = l2parity = 0;
453     + }
454     +
455     + /* Configure L1 ECC checking */
456     + if (l1parity)
457     + cp0_ectl |= ERRCTL_PE;
458     + else
459     + cp0_ectl &= ~ERRCTL_PE;
460     + write_c0_ecc(cp0_ectl);
461     + back_to_back_c0_hazard();
462     + WARN_ON(!!(read_c0_ecc() & ERRCTL_PE) != l1parity);
463     +
464     + /* Configure L2 ECC checking */
465     + if (l2parity)
466     + gcr_ectl |= CM_GCR_ERR_CONTROL_L2_ECC_EN_MSK;
467     + else
468     + gcr_ectl &= ~CM_GCR_ERR_CONTROL_L2_ECC_EN_MSK;
469     + write_gcr_err_control(gcr_ectl);
470     + gcr_ectl = read_gcr_err_control();
471     + gcr_ectl &= CM_GCR_ERR_CONTROL_L2_ECC_EN_MSK;
472     + WARN_ON(!!gcr_ectl != l2parity);
473     +
474     + pr_info("Cache parity protection %sabled\n",
475     + l1parity ? "en" : "dis");
476     + return;
477     + }
478     +
479     switch (current_cpu_type()) {
480     case CPU_24K:
481     case CPU_34K:
482     @@ -1656,11 +1716,8 @@ static inline void parity_protection_init(void)
483     case CPU_PROAPTIV:
484     case CPU_P5600:
485     case CPU_QEMU_GENERIC:
486     - case CPU_I6400:
487     case CPU_P6600:
488     {
489     -#define ERRCTL_PE 0x80000000
490     -#define ERRCTL_L2P 0x00800000
491     unsigned long errctl;
492     unsigned int l1parity_present, l2parity_present;
493    
494     diff --git a/arch/mips/netlogic/common/irq.c b/arch/mips/netlogic/common/irq.c
495     index 3660dc67d544..f4961bc9a61d 100644
496     --- a/arch/mips/netlogic/common/irq.c
497     +++ b/arch/mips/netlogic/common/irq.c
498     @@ -275,7 +275,7 @@ asmlinkage void plat_irq_dispatch(void)
499     do_IRQ(nlm_irq_to_xirq(node, i));
500     }
501    
502     -#ifdef CONFIG_OF
503     +#ifdef CONFIG_CPU_XLP
504     static const struct irq_domain_ops xlp_pic_irq_domain_ops = {
505     .xlate = irq_domain_xlate_onetwocell,
506     };
507     @@ -348,7 +348,7 @@ void __init arch_init_irq(void)
508     #if defined(CONFIG_CPU_XLR)
509     nlm_setup_fmn_irq();
510     #endif
511     -#if defined(CONFIG_OF)
512     +#ifdef CONFIG_CPU_XLP
513     of_irq_init(xlp_pic_irq_ids);
514     #endif
515     }
516     diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
517     index e2ead34da465..c6583efdbdaf 100644
518     --- a/arch/x86/kernel/apic/apic.c
519     +++ b/arch/x86/kernel/apic/apic.c
520     @@ -1863,14 +1863,14 @@ static void __smp_spurious_interrupt(u8 vector)
521     "should never happen.\n", vector, smp_processor_id());
522     }
523    
524     -__visible void smp_spurious_interrupt(struct pt_regs *regs)
525     +__visible void __irq_entry smp_spurious_interrupt(struct pt_regs *regs)
526     {
527     entering_irq();
528     __smp_spurious_interrupt(~regs->orig_ax);
529     exiting_irq();
530     }
531    
532     -__visible void smp_trace_spurious_interrupt(struct pt_regs *regs)
533     +__visible void __irq_entry smp_trace_spurious_interrupt(struct pt_regs *regs)
534     {
535     u8 vector = ~regs->orig_ax;
536    
537     @@ -1921,14 +1921,14 @@ static void __smp_error_interrupt(struct pt_regs *regs)
538    
539     }
540    
541     -__visible void smp_error_interrupt(struct pt_regs *regs)
542     +__visible void __irq_entry smp_error_interrupt(struct pt_regs *regs)
543     {
544     entering_irq();
545     __smp_error_interrupt(regs);
546     exiting_irq();
547     }
548    
549     -__visible void smp_trace_error_interrupt(struct pt_regs *regs)
550     +__visible void __irq_entry smp_trace_error_interrupt(struct pt_regs *regs)
551     {
552     entering_irq();
553     trace_error_apic_entry(ERROR_APIC_VECTOR);
554     diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c
555     index 5d30c5e42bb1..f3557a1eb562 100644
556     --- a/arch/x86/kernel/apic/vector.c
557     +++ b/arch/x86/kernel/apic/vector.c
558     @@ -559,7 +559,7 @@ void send_cleanup_vector(struct irq_cfg *cfg)
559     __send_cleanup_vector(data);
560     }
561    
562     -asmlinkage __visible void smp_irq_move_cleanup_interrupt(void)
563     +asmlinkage __visible void __irq_entry smp_irq_move_cleanup_interrupt(void)
564     {
565     unsigned vector, me;
566    
567     diff --git a/arch/x86/kernel/cpu/mcheck/mce-severity.c b/arch/x86/kernel/cpu/mcheck/mce-severity.c
568     index 631356c8cca4..f46071cb2c90 100644
569     --- a/arch/x86/kernel/cpu/mcheck/mce-severity.c
570     +++ b/arch/x86/kernel/cpu/mcheck/mce-severity.c
571     @@ -245,6 +245,9 @@ static int mce_severity_amd(struct mce *m, int tolerant, char **msg, bool is_exc
572    
573     if (m->status & MCI_STATUS_UC) {
574    
575     + if (ctx == IN_KERNEL)
576     + return MCE_PANIC_SEVERITY;
577     +
578     /*
579     * On older systems where overflow_recov flag is not present, we
580     * should simply panic if an error overflow occurs. If
581     @@ -255,10 +258,6 @@ static int mce_severity_amd(struct mce *m, int tolerant, char **msg, bool is_exc
582     if (mce_flags.smca)
583     return mce_severity_amd_smca(m, ctx);
584    
585     - /* software can try to contain */
586     - if (!(m->mcgstatus & MCG_STATUS_RIPV) && (ctx == IN_KERNEL))
587     - return MCE_PANIC_SEVERITY;
588     -
589     /* kill current process */
590     return MCE_AR_SEVERITY;
591     } else {
592     diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c
593     index a5b47c1361a0..39526e1e3132 100644
594     --- a/arch/x86/kernel/cpu/mcheck/mce_amd.c
595     +++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c
596     @@ -593,14 +593,14 @@ static inline void __smp_deferred_error_interrupt(void)
597     deferred_error_int_vector();
598     }
599    
600     -asmlinkage __visible void smp_deferred_error_interrupt(void)
601     +asmlinkage __visible void __irq_entry smp_deferred_error_interrupt(void)
602     {
603     entering_irq();
604     __smp_deferred_error_interrupt();
605     exiting_ack_irq();
606     }
607    
608     -asmlinkage __visible void smp_trace_deferred_error_interrupt(void)
609     +asmlinkage __visible void __irq_entry smp_trace_deferred_error_interrupt(void)
610     {
611     entering_irq();
612     trace_deferred_error_apic_entry(DEFERRED_ERROR_VECTOR);
613     diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c
614     index 6b9dc4d18ccc..c460c91d0c8f 100644
615     --- a/arch/x86/kernel/cpu/mcheck/therm_throt.c
616     +++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c
617     @@ -431,14 +431,16 @@ static inline void __smp_thermal_interrupt(void)
618     smp_thermal_vector();
619     }
620    
621     -asmlinkage __visible void smp_thermal_interrupt(struct pt_regs *regs)
622     +asmlinkage __visible void __irq_entry
623     +smp_thermal_interrupt(struct pt_regs *regs)
624     {
625     entering_irq();
626     __smp_thermal_interrupt();
627     exiting_ack_irq();
628     }
629    
630     -asmlinkage __visible void smp_trace_thermal_interrupt(struct pt_regs *regs)
631     +asmlinkage __visible void __irq_entry
632     +smp_trace_thermal_interrupt(struct pt_regs *regs)
633     {
634     entering_irq();
635     trace_thermal_apic_entry(THERMAL_APIC_VECTOR);
636     diff --git a/arch/x86/kernel/cpu/mcheck/threshold.c b/arch/x86/kernel/cpu/mcheck/threshold.c
637     index fcf9ae9384f4..976042371b4b 100644
638     --- a/arch/x86/kernel/cpu/mcheck/threshold.c
639     +++ b/arch/x86/kernel/cpu/mcheck/threshold.c
640     @@ -24,14 +24,14 @@ static inline void __smp_threshold_interrupt(void)
641     mce_threshold_vector();
642     }
643    
644     -asmlinkage __visible void smp_threshold_interrupt(void)
645     +asmlinkage __visible void __irq_entry smp_threshold_interrupt(void)
646     {
647     entering_irq();
648     __smp_threshold_interrupt();
649     exiting_ack_irq();
650     }
651    
652     -asmlinkage __visible void smp_trace_threshold_interrupt(void)
653     +asmlinkage __visible void __irq_entry smp_trace_threshold_interrupt(void)
654     {
655     entering_irq();
656     trace_threshold_apic_entry(THRESHOLD_APIC_VECTOR);
657     diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c
658     index 9f669fdd2010..8a7ad9fb22c1 100644
659     --- a/arch/x86/kernel/irq.c
660     +++ b/arch/x86/kernel/irq.c
661     @@ -265,7 +265,7 @@ void __smp_x86_platform_ipi(void)
662     x86_platform_ipi_callback();
663     }
664    
665     -__visible void smp_x86_platform_ipi(struct pt_regs *regs)
666     +__visible void __irq_entry smp_x86_platform_ipi(struct pt_regs *regs)
667     {
668     struct pt_regs *old_regs = set_irq_regs(regs);
669    
670     @@ -316,7 +316,7 @@ __visible void smp_kvm_posted_intr_wakeup_ipi(struct pt_regs *regs)
671     }
672     #endif
673    
674     -__visible void smp_trace_x86_platform_ipi(struct pt_regs *regs)
675     +__visible void __irq_entry smp_trace_x86_platform_ipi(struct pt_regs *regs)
676     {
677     struct pt_regs *old_regs = set_irq_regs(regs);
678    
679     diff --git a/arch/x86/kernel/irq_work.c b/arch/x86/kernel/irq_work.c
680     index 3512ba607361..275487872be2 100644
681     --- a/arch/x86/kernel/irq_work.c
682     +++ b/arch/x86/kernel/irq_work.c
683     @@ -9,6 +9,7 @@
684     #include <linux/hardirq.h>
685     #include <asm/apic.h>
686     #include <asm/trace/irq_vectors.h>
687     +#include <linux/interrupt.h>
688    
689     static inline void __smp_irq_work_interrupt(void)
690     {
691     @@ -16,14 +17,14 @@ static inline void __smp_irq_work_interrupt(void)
692     irq_work_run();
693     }
694    
695     -__visible void smp_irq_work_interrupt(struct pt_regs *regs)
696     +__visible void __irq_entry smp_irq_work_interrupt(struct pt_regs *regs)
697     {
698     ipi_entering_ack_irq();
699     __smp_irq_work_interrupt();
700     exiting_irq();
701     }
702    
703     -__visible void smp_trace_irq_work_interrupt(struct pt_regs *regs)
704     +__visible void __irq_entry smp_trace_irq_work_interrupt(struct pt_regs *regs)
705     {
706     ipi_entering_ack_irq();
707     trace_irq_work_entry(IRQ_WORK_VECTOR);
708     diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c
709     index c00cb64bc0a1..ca699677e288 100644
710     --- a/arch/x86/kernel/smp.c
711     +++ b/arch/x86/kernel/smp.c
712     @@ -259,7 +259,7 @@ static inline void __smp_reschedule_interrupt(void)
713     scheduler_ipi();
714     }
715    
716     -__visible void smp_reschedule_interrupt(struct pt_regs *regs)
717     +__visible void __irq_entry smp_reschedule_interrupt(struct pt_regs *regs)
718     {
719     irq_enter();
720     ack_APIC_irq();
721     @@ -270,7 +270,7 @@ __visible void smp_reschedule_interrupt(struct pt_regs *regs)
722     */
723     }
724    
725     -__visible void smp_trace_reschedule_interrupt(struct pt_regs *regs)
726     +__visible void __irq_entry smp_trace_reschedule_interrupt(struct pt_regs *regs)
727     {
728     /*
729     * Need to call irq_enter() before calling the trace point.
730     @@ -294,14 +294,15 @@ static inline void __smp_call_function_interrupt(void)
731     inc_irq_stat(irq_call_count);
732     }
733    
734     -__visible void smp_call_function_interrupt(struct pt_regs *regs)
735     +__visible void __irq_entry smp_call_function_interrupt(struct pt_regs *regs)
736     {
737     ipi_entering_ack_irq();
738     __smp_call_function_interrupt();
739     exiting_irq();
740     }
741    
742     -__visible void smp_trace_call_function_interrupt(struct pt_regs *regs)
743     +__visible void __irq_entry
744     +smp_trace_call_function_interrupt(struct pt_regs *regs)
745     {
746     ipi_entering_ack_irq();
747     trace_call_function_entry(CALL_FUNCTION_VECTOR);
748     @@ -316,14 +317,16 @@ static inline void __smp_call_function_single_interrupt(void)
749     inc_irq_stat(irq_call_count);
750     }
751    
752     -__visible void smp_call_function_single_interrupt(struct pt_regs *regs)
753     +__visible void __irq_entry
754     +smp_call_function_single_interrupt(struct pt_regs *regs)
755     {
756     ipi_entering_ack_irq();
757     __smp_call_function_single_interrupt();
758     exiting_irq();
759     }
760    
761     -__visible void smp_trace_call_function_single_interrupt(struct pt_regs *regs)
762     +__visible void __irq_entry
763     +smp_trace_call_function_single_interrupt(struct pt_regs *regs)
764     {
765     ipi_entering_ack_irq();
766     trace_call_function_single_entry(CALL_FUNCTION_SINGLE_VECTOR);
767     diff --git a/crypto/Kconfig b/crypto/Kconfig
768     index fa98ad7edb60..84d71482bf08 100644
769     --- a/crypto/Kconfig
770     +++ b/crypto/Kconfig
771     @@ -360,7 +360,6 @@ config CRYPTO_XTS
772     select CRYPTO_BLKCIPHER
773     select CRYPTO_MANAGER
774     select CRYPTO_GF128MUL
775     - select CRYPTO_ECB
776     help
777     XTS: IEEE1619/D16 narrow block cipher use with aes-xts-plain,
778     key size 256, 384 or 512 bits. This implementation currently
779     diff --git a/crypto/dh_helper.c b/crypto/dh_helper.c
780     index 02db76b20d00..14539904416e 100644
781     --- a/crypto/dh_helper.c
782     +++ b/crypto/dh_helper.c
783     @@ -83,6 +83,14 @@ int crypto_dh_decode_key(const char *buf, unsigned int len, struct dh *params)
784     if (secret.len != crypto_dh_key_len(params))
785     return -EINVAL;
786    
787     + /*
788     + * Don't permit the buffer for 'key' or 'g' to be larger than 'p', since
789     + * some drivers assume otherwise.
790     + */
791     + if (params->key_size > params->p_size ||
792     + params->g_size > params->p_size)
793     + return -EINVAL;
794     +
795     /* Don't allocate memory. Set pointers to data within
796     * the given buffer
797     */
798     @@ -90,6 +98,14 @@ int crypto_dh_decode_key(const char *buf, unsigned int len, struct dh *params)
799     params->p = (void *)(ptr + params->key_size);
800     params->g = (void *)(ptr + params->key_size + params->p_size);
801    
802     + /*
803     + * Don't permit 'p' to be 0. It's not a prime number, and it's subject
804     + * to corner cases such as 'mod 0' being undefined or
805     + * crypto_kpp_maxsize() returning 0.
806     + */
807     + if (memchr_inv(params->p, 0, params->p_size) == NULL)
808     + return -EINVAL;
809     +
810     return 0;
811     }
812     EXPORT_SYMBOL_GPL(crypto_dh_decode_key);
813     diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
814     index 2c8be74f401d..5d16fc4fa46c 100644
815     --- a/drivers/ata/Kconfig
816     +++ b/drivers/ata/Kconfig
817     @@ -289,6 +289,7 @@ config SATA_SX4
818    
819     config ATA_BMDMA
820     bool "ATA BMDMA support"
821     + depends on HAS_DMA
822     default y
823     help
824     This option adds support for SFF ATA controllers with BMDMA
825     @@ -344,6 +345,7 @@ config SATA_DWC_VDEBUG
826    
827     config SATA_HIGHBANK
828     tristate "Calxeda Highbank SATA support"
829     + depends on HAS_DMA
830     depends on ARCH_HIGHBANK || COMPILE_TEST
831     help
832     This option enables support for the Calxeda Highbank SoC's
833     @@ -353,6 +355,7 @@ config SATA_HIGHBANK
834    
835     config SATA_MV
836     tristate "Marvell SATA support"
837     + depends on HAS_DMA
838     depends on PCI || ARCH_DOVE || ARCH_MV78XX0 || \
839     ARCH_MVEBU || ARCH_ORION5X || COMPILE_TEST
840     select GENERIC_PHY
841     diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
842     index 74e677ac8e37..693028659ccc 100644
843     --- a/drivers/bluetooth/btusb.c
844     +++ b/drivers/bluetooth/btusb.c
845     @@ -2925,6 +2925,12 @@ static int btusb_probe(struct usb_interface *intf,
846     if (id->driver_info & BTUSB_QCA_ROME) {
847     data->setup_on_usb = btusb_setup_qca;
848     hdev->set_bdaddr = btusb_set_bdaddr_ath3012;
849     +
850     + /* QCA Rome devices lose their updated firmware over suspend,
851     + * but the USB hub doesn't notice any status change.
852     + * Explicitly request a device reset on resume.
853     + */
854     + set_bit(BTUSB_RESET_RESUME, &data->flags);
855     }
856    
857     #ifdef CONFIG_BT_HCIBTUSB_RTL
858     diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c
859     index 634ba70782de..a128fd2eb187 100644
860     --- a/drivers/extcon/extcon-palmas.c
861     +++ b/drivers/extcon/extcon-palmas.c
862     @@ -190,6 +190,11 @@ static int palmas_usb_probe(struct platform_device *pdev)
863     struct palmas_usb *palmas_usb;
864     int status;
865    
866     + if (!palmas) {
867     + dev_err(&pdev->dev, "failed to get valid parent\n");
868     + return -EINVAL;
869     + }
870     +
871     palmas_usb = devm_kzalloc(&pdev->dev, sizeof(*palmas_usb), GFP_KERNEL);
872     if (!palmas_usb)
873     return -ENOMEM;
874     diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c
875     index 7c1e3a7b14e0..d0e367959c91 100644
876     --- a/drivers/extcon/extcon.c
877     +++ b/drivers/extcon/extcon.c
878     @@ -906,35 +906,16 @@ int extcon_register_notifier(struct extcon_dev *edev, unsigned int id,
879     unsigned long flags;
880     int ret, idx = -EINVAL;
881    
882     - if (!nb)
883     + if (!edev || !nb)
884     return -EINVAL;
885    
886     - if (edev) {
887     - idx = find_cable_index_by_id(edev, id);
888     - if (idx < 0)
889     - return idx;
890     -
891     - spin_lock_irqsave(&edev->lock, flags);
892     - ret = raw_notifier_chain_register(&edev->nh[idx], nb);
893     - spin_unlock_irqrestore(&edev->lock, flags);
894     - } else {
895     - struct extcon_dev *extd;
896     -
897     - mutex_lock(&extcon_dev_list_lock);
898     - list_for_each_entry(extd, &extcon_dev_list, entry) {
899     - idx = find_cable_index_by_id(extd, id);
900     - if (idx >= 0)
901     - break;
902     - }
903     - mutex_unlock(&extcon_dev_list_lock);
904     + idx = find_cable_index_by_id(edev, id);
905     + if (idx < 0)
906     + return idx;
907    
908     - if (idx >= 0) {
909     - edev = extd;
910     - return extcon_register_notifier(extd, id, nb);
911     - } else {
912     - ret = -ENODEV;
913     - }
914     - }
915     + spin_lock_irqsave(&edev->lock, flags);
916     + ret = raw_notifier_chain_register(&edev->nh[idx], nb);
917     + spin_unlock_irqrestore(&edev->lock, flags);
918    
919     return ret;
920     }
921     diff --git a/drivers/gpu/drm/mgag200/mgag200_main.c b/drivers/gpu/drm/mgag200/mgag200_main.c
922     index e79cbc25ae3c..fb03e3057485 100644
923     --- a/drivers/gpu/drm/mgag200/mgag200_main.c
924     +++ b/drivers/gpu/drm/mgag200/mgag200_main.c
925     @@ -145,6 +145,8 @@ static int mga_vram_init(struct mga_device *mdev)
926     }
927    
928     mem = pci_iomap(mdev->dev->pdev, 0, 0);
929     + if (!mem)
930     + return -ENOMEM;
931    
932     mdev->mc.vram_size = mga_probe_vram(mdev, mem);
933    
934     diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
935     index 3557a4c7dd7b..270a62348a6e 100644
936     --- a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
937     +++ b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
938     @@ -912,6 +912,7 @@ static struct spi_driver acx565akm_driver = {
939    
940     module_spi_driver(acx565akm_driver);
941    
942     +MODULE_ALIAS("spi:sony,acx565akm");
943     MODULE_AUTHOR("Nokia Corporation");
944     MODULE_DESCRIPTION("acx565akm LCD Driver");
945     MODULE_LICENSE("GPL");
946     diff --git a/drivers/gpu/drm/sti/sti_vtg.c b/drivers/gpu/drm/sti/sti_vtg.c
947     index a8882bdd0f8b..c3d9c8ae14af 100644
948     --- a/drivers/gpu/drm/sti/sti_vtg.c
949     +++ b/drivers/gpu/drm/sti/sti_vtg.c
950     @@ -429,6 +429,10 @@ static int vtg_probe(struct platform_device *pdev)
951     return -ENOMEM;
952     }
953     vtg->regs = devm_ioremap_nocache(dev, res->start, resource_size(res));
954     + if (!vtg->regs) {
955     + DRM_ERROR("failed to remap I/O memory\n");
956     + return -ENOMEM;
957     + }
958    
959     np = of_parse_phandle(pdev->dev.of_node, "st,slave", 0);
960     if (np) {
961     diff --git a/drivers/media/rc/imon.c b/drivers/media/rc/imon.c
962     index 2d4b83635018..f072bf28fccd 100644
963     --- a/drivers/media/rc/imon.c
964     +++ b/drivers/media/rc/imon.c
965     @@ -2412,6 +2412,11 @@ static int imon_probe(struct usb_interface *interface,
966     mutex_lock(&driver_lock);
967    
968     first_if = usb_ifnum_to_if(usbdev, 0);
969     + if (!first_if) {
970     + ret = -ENODEV;
971     + goto fail;
972     + }
973     +
974     first_if_ctx = usb_get_intfdata(first_if);
975    
976     if (ifnum == 0) {
977     diff --git a/drivers/media/usb/dvb-usb/dib0700_devices.c b/drivers/media/usb/dvb-usb/dib0700_devices.c
978     index ef1b8ee75c57..caa55402052e 100644
979     --- a/drivers/media/usb/dvb-usb/dib0700_devices.c
980     +++ b/drivers/media/usb/dvb-usb/dib0700_devices.c
981     @@ -292,7 +292,7 @@ static int stk7700P2_frontend_attach(struct dvb_usb_adapter *adap)
982     stk7700d_dib7000p_mt2266_config)
983     != 0) {
984     err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n", __func__);
985     - dvb_detach(&state->dib7000p_ops);
986     + dvb_detach(state->dib7000p_ops.set_wbd_ref);
987     return -ENODEV;
988     }
989     }
990     @@ -326,7 +326,7 @@ static int stk7700d_frontend_attach(struct dvb_usb_adapter *adap)
991     stk7700d_dib7000p_mt2266_config)
992     != 0) {
993     err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n", __func__);
994     - dvb_detach(&state->dib7000p_ops);
995     + dvb_detach(state->dib7000p_ops.set_wbd_ref);
996     return -ENODEV;
997     }
998     }
999     @@ -479,7 +479,7 @@ static int stk7700ph_frontend_attach(struct dvb_usb_adapter *adap)
1000     &stk7700ph_dib7700_xc3028_config) != 0) {
1001     err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n",
1002     __func__);
1003     - dvb_detach(&state->dib7000p_ops);
1004     + dvb_detach(state->dib7000p_ops.set_wbd_ref);
1005     return -ENODEV;
1006     }
1007    
1008     @@ -1011,7 +1011,7 @@ static int stk7070p_frontend_attach(struct dvb_usb_adapter *adap)
1009     &dib7070p_dib7000p_config) != 0) {
1010     err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n",
1011     __func__);
1012     - dvb_detach(&state->dib7000p_ops);
1013     + dvb_detach(state->dib7000p_ops.set_wbd_ref);
1014     return -ENODEV;
1015     }
1016    
1017     @@ -1069,7 +1069,7 @@ static int stk7770p_frontend_attach(struct dvb_usb_adapter *adap)
1018     &dib7770p_dib7000p_config) != 0) {
1019     err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n",
1020     __func__);
1021     - dvb_detach(&state->dib7000p_ops);
1022     + dvb_detach(state->dib7000p_ops.set_wbd_ref);
1023     return -ENODEV;
1024     }
1025    
1026     @@ -3056,7 +3056,7 @@ static int nim7090_frontend_attach(struct dvb_usb_adapter *adap)
1027    
1028     if (state->dib7000p_ops.i2c_enumeration(&adap->dev->i2c_adap, 1, 0x10, &nim7090_dib7000p_config) != 0) {
1029     err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n", __func__);
1030     - dvb_detach(&state->dib7000p_ops);
1031     + dvb_detach(state->dib7000p_ops.set_wbd_ref);
1032     return -ENODEV;
1033     }
1034     adap->fe_adap[0].fe = state->dib7000p_ops.init(&adap->dev->i2c_adap, 0x80, &nim7090_dib7000p_config);
1035     @@ -3109,7 +3109,7 @@ static int tfe7090pvr_frontend0_attach(struct dvb_usb_adapter *adap)
1036     /* initialize IC 0 */
1037     if (state->dib7000p_ops.i2c_enumeration(&adap->dev->i2c_adap, 1, 0x20, &tfe7090pvr_dib7000p_config[0]) != 0) {
1038     err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n", __func__);
1039     - dvb_detach(&state->dib7000p_ops);
1040     + dvb_detach(state->dib7000p_ops.set_wbd_ref);
1041     return -ENODEV;
1042     }
1043    
1044     @@ -3139,7 +3139,7 @@ static int tfe7090pvr_frontend1_attach(struct dvb_usb_adapter *adap)
1045     i2c = state->dib7000p_ops.get_i2c_master(adap->dev->adapter[0].fe_adap[0].fe, DIBX000_I2C_INTERFACE_GPIO_6_7, 1);
1046     if (state->dib7000p_ops.i2c_enumeration(i2c, 1, 0x10, &tfe7090pvr_dib7000p_config[1]) != 0) {
1047     err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n", __func__);
1048     - dvb_detach(&state->dib7000p_ops);
1049     + dvb_detach(state->dib7000p_ops.set_wbd_ref);
1050     return -ENODEV;
1051     }
1052    
1053     @@ -3214,7 +3214,7 @@ static int tfe7790p_frontend_attach(struct dvb_usb_adapter *adap)
1054     1, 0x10, &tfe7790p_dib7000p_config) != 0) {
1055     err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n",
1056     __func__);
1057     - dvb_detach(&state->dib7000p_ops);
1058     + dvb_detach(state->dib7000p_ops.set_wbd_ref);
1059     return -ENODEV;
1060     }
1061     adap->fe_adap[0].fe = state->dib7000p_ops.init(&adap->dev->i2c_adap,
1062     @@ -3309,7 +3309,7 @@ static int stk7070pd_frontend_attach0(struct dvb_usb_adapter *adap)
1063     stk7070pd_dib7000p_config) != 0) {
1064     err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n",
1065     __func__);
1066     - dvb_detach(&state->dib7000p_ops);
1067     + dvb_detach(state->dib7000p_ops.set_wbd_ref);
1068     return -ENODEV;
1069     }
1070    
1071     @@ -3384,7 +3384,7 @@ static int novatd_frontend_attach(struct dvb_usb_adapter *adap)
1072     stk7070pd_dib7000p_config) != 0) {
1073     err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n",
1074     __func__);
1075     - dvb_detach(&state->dib7000p_ops);
1076     + dvb_detach(state->dib7000p_ops.set_wbd_ref);
1077     return -ENODEV;
1078     }
1079     }
1080     @@ -3620,7 +3620,7 @@ static int pctv340e_frontend_attach(struct dvb_usb_adapter *adap)
1081    
1082     if (state->dib7000p_ops.dib7000pc_detection(&adap->dev->i2c_adap) == 0) {
1083     /* Demodulator not found for some reason? */
1084     - dvb_detach(&state->dib7000p_ops);
1085     + dvb_detach(state->dib7000p_ops.set_wbd_ref);
1086     return -ENODEV;
1087     }
1088    
1089     diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_mbx.c b/drivers/net/ethernet/intel/fm10k/fm10k_mbx.c
1090     index c9dfa6564fcf..334088a101c3 100644
1091     --- a/drivers/net/ethernet/intel/fm10k/fm10k_mbx.c
1092     +++ b/drivers/net/ethernet/intel/fm10k/fm10k_mbx.c
1093     @@ -2011,9 +2011,10 @@ static void fm10k_sm_mbx_create_reply(struct fm10k_hw *hw,
1094     * function can also be used to respond to an error as the connection
1095     * resetting would also be a means of dealing with errors.
1096     **/
1097     -static void fm10k_sm_mbx_process_reset(struct fm10k_hw *hw,
1098     - struct fm10k_mbx_info *mbx)
1099     +static s32 fm10k_sm_mbx_process_reset(struct fm10k_hw *hw,
1100     + struct fm10k_mbx_info *mbx)
1101     {
1102     + s32 err = 0;
1103     const enum fm10k_mbx_state state = mbx->state;
1104    
1105     switch (state) {
1106     @@ -2026,6 +2027,7 @@ static void fm10k_sm_mbx_process_reset(struct fm10k_hw *hw,
1107     case FM10K_STATE_OPEN:
1108     /* flush any incomplete work */
1109     fm10k_sm_mbx_connect_reset(mbx);
1110     + err = FM10K_ERR_RESET_REQUESTED;
1111     break;
1112     case FM10K_STATE_CONNECT:
1113     /* Update remote value to match local value */
1114     @@ -2035,6 +2037,8 @@ static void fm10k_sm_mbx_process_reset(struct fm10k_hw *hw,
1115     }
1116    
1117     fm10k_sm_mbx_create_reply(hw, mbx, mbx->tail);
1118     +
1119     + return err;
1120     }
1121    
1122     /**
1123     @@ -2115,7 +2119,7 @@ static s32 fm10k_sm_mbx_process(struct fm10k_hw *hw,
1124    
1125     switch (FM10K_MSG_HDR_FIELD_GET(mbx->mbx_hdr, SM_VER)) {
1126     case 0:
1127     - fm10k_sm_mbx_process_reset(hw, mbx);
1128     + err = fm10k_sm_mbx_process_reset(hw, mbx);
1129     break;
1130     case FM10K_SM_MBX_VERSION:
1131     err = fm10k_sm_mbx_process_version_1(hw, mbx);
1132     diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_pci.c b/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
1133     index b1a2f8437d59..e372a5823480 100644
1134     --- a/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
1135     +++ b/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
1136     @@ -1144,6 +1144,7 @@ static irqreturn_t fm10k_msix_mbx_pf(int __always_unused irq, void *data)
1137     struct fm10k_hw *hw = &interface->hw;
1138     struct fm10k_mbx_info *mbx = &hw->mbx;
1139     u32 eicr;
1140     + s32 err = 0;
1141    
1142     /* unmask any set bits related to this interrupt */
1143     eicr = fm10k_read_reg(hw, FM10K_EICR);
1144     @@ -1159,12 +1160,15 @@ static irqreturn_t fm10k_msix_mbx_pf(int __always_unused irq, void *data)
1145    
1146     /* service mailboxes */
1147     if (fm10k_mbx_trylock(interface)) {
1148     - mbx->ops.process(hw, mbx);
1149     + err = mbx->ops.process(hw, mbx);
1150     /* handle VFLRE events */
1151     fm10k_iov_event(interface);
1152     fm10k_mbx_unlock(interface);
1153     }
1154    
1155     + if (err == FM10K_ERR_RESET_REQUESTED)
1156     + interface->flags |= FM10K_FLAG_RESET_REQUESTED;
1157     +
1158     /* if switch toggled state we should reset GLORTs */
1159     if (eicr & FM10K_EICR_SWITCHNOTREADY) {
1160     /* force link down for at least 4 seconds */
1161     diff --git a/drivers/net/ethernet/intel/igb/e1000_82575.c b/drivers/net/ethernet/intel/igb/e1000_82575.c
1162     index 1264a3616acf..4a50870e0fa7 100644
1163     --- a/drivers/net/ethernet/intel/igb/e1000_82575.c
1164     +++ b/drivers/net/ethernet/intel/igb/e1000_82575.c
1165     @@ -245,6 +245,17 @@ static s32 igb_init_phy_params_82575(struct e1000_hw *hw)
1166     hw->bus.func = (rd32(E1000_STATUS) & E1000_STATUS_FUNC_MASK) >>
1167     E1000_STATUS_FUNC_SHIFT;
1168    
1169     + /* Make sure the PHY is in a good state. Several people have reported
1170     + * firmware leaving the PHY's page select register set to something
1171     + * other than the default of zero, which causes the PHY ID read to
1172     + * access something other than the intended register.
1173     + */
1174     + ret_val = hw->phy.ops.reset(hw);
1175     + if (ret_val) {
1176     + hw_dbg("Error resetting the PHY.\n");
1177     + goto out;
1178     + }
1179     +
1180     /* Set phy->phy_addr and phy->id. */
1181     igb_write_phy_reg_82580(hw, I347AT4_PAGE_SELECT, 0);
1182     ret_val = igb_get_phy_id_82575(hw);
1183     diff --git a/drivers/net/ethernet/intel/igb/e1000_i210.c b/drivers/net/ethernet/intel/igb/e1000_i210.c
1184     index 8aa798737d4d..07d48f2e3369 100644
1185     --- a/drivers/net/ethernet/intel/igb/e1000_i210.c
1186     +++ b/drivers/net/ethernet/intel/igb/e1000_i210.c
1187     @@ -699,9 +699,9 @@ static s32 igb_update_flash_i210(struct e1000_hw *hw)
1188    
1189     ret_val = igb_pool_flash_update_done_i210(hw);
1190     if (ret_val)
1191     - hw_dbg("Flash update complete\n");
1192     - else
1193     hw_dbg("Flash update time out\n");
1194     + else
1195     + hw_dbg("Flash update complete\n");
1196    
1197     out:
1198     return ret_val;
1199     diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
1200     index 6a62447fe377..c6c2562d9df3 100644
1201     --- a/drivers/net/ethernet/intel/igb/igb_main.c
1202     +++ b/drivers/net/ethernet/intel/igb/igb_main.c
1203     @@ -3271,7 +3271,9 @@ static int __igb_close(struct net_device *netdev, bool suspending)
1204    
1205     int igb_close(struct net_device *netdev)
1206     {
1207     - return __igb_close(netdev, false);
1208     + if (netif_device_present(netdev))
1209     + return __igb_close(netdev, false);
1210     + return 0;
1211     }
1212    
1213     /**
1214     @@ -7548,6 +7550,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
1215     int retval = 0;
1216     #endif
1217    
1218     + rtnl_lock();
1219     netif_device_detach(netdev);
1220    
1221     if (netif_running(netdev))
1222     @@ -7556,6 +7559,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
1223     igb_ptp_suspend(adapter);
1224    
1225     igb_clear_interrupt_scheme(adapter);
1226     + rtnl_unlock();
1227    
1228     #ifdef CONFIG_PM
1229     retval = pci_save_state(pdev);
1230     @@ -7674,16 +7678,15 @@ static int igb_resume(struct device *dev)
1231    
1232     wr32(E1000_WUS, ~0);
1233    
1234     - if (netdev->flags & IFF_UP) {
1235     - rtnl_lock();
1236     + rtnl_lock();
1237     + if (!err && netif_running(netdev))
1238     err = __igb_open(netdev, true);
1239     - rtnl_unlock();
1240     - if (err)
1241     - return err;
1242     - }
1243    
1244     - netif_device_attach(netdev);
1245     - return 0;
1246     + if (!err)
1247     + netif_device_attach(netdev);
1248     + rtnl_unlock();
1249     +
1250     + return err;
1251     }
1252    
1253     static int igb_runtime_idle(struct device *dev)
1254     diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
1255     index f49f80380aa5..a137e060c185 100644
1256     --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
1257     +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
1258     @@ -199,7 +199,7 @@ static int ixgbe_get_settings(struct net_device *netdev,
1259     if (supported_link & IXGBE_LINK_SPEED_100_FULL)
1260     ecmd->supported |= ixgbe_isbackplane(hw->phy.media_type) ?
1261     SUPPORTED_1000baseKX_Full :
1262     - SUPPORTED_1000baseT_Full;
1263     + SUPPORTED_100baseT_Full;
1264    
1265     /* default advertised speed if phy.autoneg_advertised isn't set */
1266     ecmd->advertising = ecmd->supported;
1267     diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
1268     index 15ab337fd7ad..10d29678d65e 100644
1269     --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
1270     +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
1271     @@ -308,6 +308,7 @@ static void ixgbe_cache_ring_register(struct ixgbe_adapter *adapter)
1272     ixgbe_cache_ring_rss(adapter);
1273     }
1274    
1275     +#define IXGBE_RSS_64Q_MASK 0x3F
1276     #define IXGBE_RSS_16Q_MASK 0xF
1277     #define IXGBE_RSS_8Q_MASK 0x7
1278     #define IXGBE_RSS_4Q_MASK 0x3
1279     @@ -604,6 +605,7 @@ static bool ixgbe_set_sriov_queues(struct ixgbe_adapter *adapter)
1280     **/
1281     static bool ixgbe_set_rss_queues(struct ixgbe_adapter *adapter)
1282     {
1283     + struct ixgbe_hw *hw = &adapter->hw;
1284     struct ixgbe_ring_feature *f;
1285     u16 rss_i;
1286    
1287     @@ -612,7 +614,11 @@ static bool ixgbe_set_rss_queues(struct ixgbe_adapter *adapter)
1288     rss_i = f->limit;
1289    
1290     f->indices = rss_i;
1291     - f->mask = IXGBE_RSS_16Q_MASK;
1292     +
1293     + if (hw->mac.type < ixgbe_mac_X550)
1294     + f->mask = IXGBE_RSS_16Q_MASK;
1295     + else
1296     + f->mask = IXGBE_RSS_64Q_MASK;
1297    
1298     /* disable ATR by default, it will be configured below */
1299     adapter->flags &= ~IXGBE_FLAG_FDIR_HASH_CAPABLE;
1300     diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
1301     index fee1f2918ead..334eb96ecda3 100644
1302     --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
1303     +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
1304     @@ -6194,7 +6194,8 @@ int ixgbe_close(struct net_device *netdev)
1305    
1306     ixgbe_ptp_stop(adapter);
1307    
1308     - ixgbe_close_suspend(adapter);
1309     + if (netif_device_present(netdev))
1310     + ixgbe_close_suspend(adapter);
1311    
1312     ixgbe_fdir_filter_exit(adapter);
1313    
1314     @@ -6239,14 +6240,12 @@ static int ixgbe_resume(struct pci_dev *pdev)
1315     if (!err && netif_running(netdev))
1316     err = ixgbe_open(netdev);
1317    
1318     - rtnl_unlock();
1319     -
1320     - if (err)
1321     - return err;
1322    
1323     - netif_device_attach(netdev);
1324     + if (!err)
1325     + netif_device_attach(netdev);
1326     + rtnl_unlock();
1327    
1328     - return 0;
1329     + return err;
1330     }
1331     #endif /* CONFIG_PM */
1332    
1333     @@ -6261,14 +6260,14 @@ static int __ixgbe_shutdown(struct pci_dev *pdev, bool *enable_wake)
1334     int retval = 0;
1335     #endif
1336    
1337     + rtnl_lock();
1338     netif_device_detach(netdev);
1339    
1340     - rtnl_lock();
1341     if (netif_running(netdev))
1342     ixgbe_close_suspend(adapter);
1343     - rtnl_unlock();
1344    
1345     ixgbe_clear_interrupt_scheme(adapter);
1346     + rtnl_unlock();
1347    
1348     #ifdef CONFIG_PM
1349     retval = pci_save_state(pdev);
1350     @@ -10027,7 +10026,7 @@ static pci_ers_result_t ixgbe_io_error_detected(struct pci_dev *pdev,
1351     }
1352    
1353     if (netif_running(netdev))
1354     - ixgbe_down(adapter);
1355     + ixgbe_close_suspend(adapter);
1356    
1357     if (!test_and_set_bit(__IXGBE_DISABLED, &adapter->state))
1358     pci_disable_device(pdev);
1359     @@ -10097,10 +10096,12 @@ static void ixgbe_io_resume(struct pci_dev *pdev)
1360     }
1361    
1362     #endif
1363     + rtnl_lock();
1364     if (netif_running(netdev))
1365     - ixgbe_up(adapter);
1366     + ixgbe_open(netdev);
1367    
1368     netif_device_attach(netdev);
1369     + rtnl_unlock();
1370     }
1371    
1372     static const struct pci_error_handlers ixgbe_err_handler = {
1373     diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
1374     index 021ab9b89c71..b17464e843de 100644
1375     --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
1376     +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
1377     @@ -113,7 +113,7 @@ static s32 ixgbe_read_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr,
1378     u16 reg, u16 *val, bool lock)
1379     {
1380     u32 swfw_mask = hw->phy.phy_semaphore_mask;
1381     - int max_retry = 10;
1382     + int max_retry = 3;
1383     int retry = 0;
1384     u8 csum_byte;
1385     u8 high_bits;
1386     @@ -1764,6 +1764,8 @@ static s32 ixgbe_read_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset,
1387     u32 swfw_mask = hw->phy.phy_semaphore_mask;
1388     bool nack = true;
1389    
1390     + if (hw->mac.type >= ixgbe_mac_X550)
1391     + max_retry = 3;
1392     if (ixgbe_is_sfp_probe(hw, byte_offset, dev_addr))
1393     max_retry = IXGBE_SFP_DETECT_RETRIES;
1394    
1395     diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
1396     index 7e6b9267ca9d..60f0bf779073 100644
1397     --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
1398     +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
1399     @@ -1932,8 +1932,6 @@ static s32 ixgbe_setup_kr_speed_x550em(struct ixgbe_hw *hw,
1400     return status;
1401    
1402     reg_val |= IXGBE_KRM_LINK_CTRL_1_TETH_AN_ENABLE;
1403     - reg_val &= ~(IXGBE_KRM_LINK_CTRL_1_TETH_AN_FEC_REQ |
1404     - IXGBE_KRM_LINK_CTRL_1_TETH_AN_CAP_FEC);
1405     reg_val &= ~(IXGBE_KRM_LINK_CTRL_1_TETH_AN_CAP_KR |
1406     IXGBE_KRM_LINK_CTRL_1_TETH_AN_CAP_KX);
1407    
1408     @@ -1995,12 +1993,11 @@ static s32 ixgbe_setup_kx4_x550em(struct ixgbe_hw *hw)
1409     /**
1410     * ixgbe_setup_kr_x550em - Configure the KR PHY
1411     * @hw: pointer to hardware structure
1412     - *
1413     - * Configures the integrated KR PHY for X550EM_x.
1414     **/
1415     static s32 ixgbe_setup_kr_x550em(struct ixgbe_hw *hw)
1416     {
1417     - if (hw->mac.type != ixgbe_mac_X550EM_x)
1418     + /* leave link alone for 2.5G */
1419     + if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_2_5GB_FULL)
1420     return 0;
1421    
1422     return ixgbe_setup_kr_speed_x550em(hw, hw->phy.autoneg_advertised);
1423     diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
1424     index fc844a1f6c3f..f507d821aba8 100644
1425     --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
1426     +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
1427     @@ -147,7 +147,6 @@ static struct ieee80211_rate __wl_rates[] = {
1428     .band = NL80211_BAND_2GHZ, \
1429     .center_freq = (_freq), \
1430     .hw_value = (_channel), \
1431     - .flags = IEEE80211_CHAN_DISABLED, \
1432     .max_antenna_gain = 0, \
1433     .max_power = 30, \
1434     }
1435     @@ -156,7 +155,6 @@ static struct ieee80211_rate __wl_rates[] = {
1436     .band = NL80211_BAND_5GHZ, \
1437     .center_freq = 5000 + (5 * (_channel)), \
1438     .hw_value = (_channel), \
1439     - .flags = IEEE80211_CHAN_DISABLED, \
1440     .max_antenna_gain = 0, \
1441     .max_power = 30, \
1442     }
1443     diff --git a/drivers/power/supply/axp288_fuel_gauge.c b/drivers/power/supply/axp288_fuel_gauge.c
1444     index f62f9dfea984..089056cb8e73 100644
1445     --- a/drivers/power/supply/axp288_fuel_gauge.c
1446     +++ b/drivers/power/supply/axp288_fuel_gauge.c
1447     @@ -29,6 +29,7 @@
1448     #include <linux/iio/consumer.h>
1449     #include <linux/debugfs.h>
1450     #include <linux/seq_file.h>
1451     +#include <asm/unaligned.h>
1452    
1453     #define CHRG_STAT_BAT_SAFE_MODE (1 << 3)
1454     #define CHRG_STAT_BAT_VALID (1 << 4)
1455     @@ -73,17 +74,15 @@
1456     #define FG_CNTL_CC_EN (1 << 6)
1457     #define FG_CNTL_GAUGE_EN (1 << 7)
1458    
1459     +#define FG_15BIT_WORD_VALID (1 << 15)
1460     +#define FG_15BIT_VAL_MASK 0x7fff
1461     +
1462     #define FG_REP_CAP_VALID (1 << 7)
1463     #define FG_REP_CAP_VAL_MASK 0x7F
1464    
1465     #define FG_DES_CAP1_VALID (1 << 7)
1466     -#define FG_DES_CAP1_VAL_MASK 0x7F
1467     -#define FG_DES_CAP0_VAL_MASK 0xFF
1468     #define FG_DES_CAP_RES_LSB 1456 /* 1.456mAhr */
1469    
1470     -#define FG_CC_MTR1_VALID (1 << 7)
1471     -#define FG_CC_MTR1_VAL_MASK 0x7F
1472     -#define FG_CC_MTR0_VAL_MASK 0xFF
1473     #define FG_DES_CC_RES_LSB 1456 /* 1.456mAhr */
1474    
1475     #define FG_OCV_CAP_VALID (1 << 7)
1476     @@ -189,6 +188,44 @@ static int fuel_gauge_reg_writeb(struct axp288_fg_info *info, int reg, u8 val)
1477     return ret;
1478     }
1479    
1480     +static int fuel_gauge_read_15bit_word(struct axp288_fg_info *info, int reg)
1481     +{
1482     + unsigned char buf[2];
1483     + int ret;
1484     +
1485     + ret = regmap_bulk_read(info->regmap, reg, buf, 2);
1486     + if (ret < 0) {
1487     + dev_err(&info->pdev->dev, "Error reading reg 0x%02x err: %d\n",
1488     + reg, ret);
1489     + return ret;
1490     + }
1491     +
1492     + ret = get_unaligned_be16(buf);
1493     + if (!(ret & FG_15BIT_WORD_VALID)) {
1494     + dev_err(&info->pdev->dev, "Error reg 0x%02x contents not valid\n",
1495     + reg);
1496     + return -ENXIO;
1497     + }
1498     +
1499     + return ret & FG_15BIT_VAL_MASK;
1500     +}
1501     +
1502     +static int fuel_gauge_read_12bit_word(struct axp288_fg_info *info, int reg)
1503     +{
1504     + unsigned char buf[2];
1505     + int ret;
1506     +
1507     + ret = regmap_bulk_read(info->regmap, reg, buf, 2);
1508     + if (ret < 0) {
1509     + dev_err(&info->pdev->dev, "Error reading reg 0x%02x err: %d\n",
1510     + reg, ret);
1511     + return ret;
1512     + }
1513     +
1514     + /* 12-bit data values have upper 8 bits in buf[0], lower 4 in buf[1] */
1515     + return (buf[0] << 4) | ((buf[1] >> 4) & 0x0f);
1516     +}
1517     +
1518     static int pmic_read_adc_val(const char *name, int *raw_val,
1519     struct axp288_fg_info *info)
1520     {
1521     @@ -249,24 +286,15 @@ static int fuel_gauge_debug_show(struct seq_file *s, void *data)
1522     seq_printf(s, " FG_RDC0[%02x] : %02x\n",
1523     AXP288_FG_RDC0_REG,
1524     fuel_gauge_reg_readb(info, AXP288_FG_RDC0_REG));
1525     - seq_printf(s, " FG_OCVH[%02x] : %02x\n",
1526     + seq_printf(s, " FG_OCV[%02x] : %04x\n",
1527     AXP288_FG_OCVH_REG,
1528     - fuel_gauge_reg_readb(info, AXP288_FG_OCVH_REG));
1529     - seq_printf(s, " FG_OCVL[%02x] : %02x\n",
1530     - AXP288_FG_OCVL_REG,
1531     - fuel_gauge_reg_readb(info, AXP288_FG_OCVL_REG));
1532     - seq_printf(s, "FG_DES_CAP1[%02x] : %02x\n",
1533     + fuel_gauge_read_12bit_word(info, AXP288_FG_OCVH_REG));
1534     + seq_printf(s, " FG_DES_CAP[%02x] : %04x\n",
1535     AXP288_FG_DES_CAP1_REG,
1536     - fuel_gauge_reg_readb(info, AXP288_FG_DES_CAP1_REG));
1537     - seq_printf(s, "FG_DES_CAP0[%02x] : %02x\n",
1538     - AXP288_FG_DES_CAP0_REG,
1539     - fuel_gauge_reg_readb(info, AXP288_FG_DES_CAP0_REG));
1540     - seq_printf(s, " FG_CC_MTR1[%02x] : %02x\n",
1541     + fuel_gauge_read_15bit_word(info, AXP288_FG_DES_CAP1_REG));
1542     + seq_printf(s, " FG_CC_MTR[%02x] : %04x\n",
1543     AXP288_FG_CC_MTR1_REG,
1544     - fuel_gauge_reg_readb(info, AXP288_FG_CC_MTR1_REG));
1545     - seq_printf(s, " FG_CC_MTR0[%02x] : %02x\n",
1546     - AXP288_FG_CC_MTR0_REG,
1547     - fuel_gauge_reg_readb(info, AXP288_FG_CC_MTR0_REG));
1548     + fuel_gauge_read_15bit_word(info, AXP288_FG_CC_MTR1_REG));
1549     seq_printf(s, " FG_OCV_CAP[%02x] : %02x\n",
1550     AXP288_FG_OCV_CAP_REG,
1551     fuel_gauge_reg_readb(info, AXP288_FG_OCV_CAP_REG));
1552     @@ -517,21 +545,12 @@ static int fuel_gauge_get_btemp(struct axp288_fg_info *info, int *btemp)
1553    
1554     static int fuel_gauge_get_vocv(struct axp288_fg_info *info, int *vocv)
1555     {
1556     - int ret, value;
1557     -
1558     - /* 12-bit data value, upper 8 in OCVH, lower 4 in OCVL */
1559     - ret = fuel_gauge_reg_readb(info, AXP288_FG_OCVH_REG);
1560     - if (ret < 0)
1561     - goto vocv_read_fail;
1562     - value = ret << 4;
1563     + int ret;
1564    
1565     - ret = fuel_gauge_reg_readb(info, AXP288_FG_OCVL_REG);
1566     - if (ret < 0)
1567     - goto vocv_read_fail;
1568     - value |= (ret & 0xf);
1569     + ret = fuel_gauge_read_12bit_word(info, AXP288_FG_OCVH_REG);
1570     + if (ret >= 0)
1571     + *vocv = VOLTAGE_FROM_ADC(ret);
1572    
1573     - *vocv = VOLTAGE_FROM_ADC(value);
1574     -vocv_read_fail:
1575     return ret;
1576     }
1577    
1578     @@ -663,28 +682,18 @@ static int fuel_gauge_get_property(struct power_supply *ps,
1579     val->intval = POWER_SUPPLY_TECHNOLOGY_LION;
1580     break;
1581     case POWER_SUPPLY_PROP_CHARGE_NOW:
1582     - ret = fuel_gauge_reg_readb(info, AXP288_FG_CC_MTR1_REG);
1583     + ret = fuel_gauge_read_15bit_word(info, AXP288_FG_CC_MTR1_REG);
1584     if (ret < 0)
1585     goto fuel_gauge_read_err;
1586    
1587     - value = (ret & FG_CC_MTR1_VAL_MASK) << 8;
1588     - ret = fuel_gauge_reg_readb(info, AXP288_FG_CC_MTR0_REG);
1589     - if (ret < 0)
1590     - goto fuel_gauge_read_err;
1591     - value |= (ret & FG_CC_MTR0_VAL_MASK);
1592     - val->intval = value * FG_DES_CAP_RES_LSB;
1593     + val->intval = ret * FG_DES_CAP_RES_LSB;
1594     break;
1595     case POWER_SUPPLY_PROP_CHARGE_FULL:
1596     - ret = fuel_gauge_reg_readb(info, AXP288_FG_DES_CAP1_REG);
1597     + ret = fuel_gauge_read_15bit_word(info, AXP288_FG_DES_CAP1_REG);
1598     if (ret < 0)
1599     goto fuel_gauge_read_err;
1600    
1601     - value = (ret & FG_DES_CAP1_VAL_MASK) << 8;
1602     - ret = fuel_gauge_reg_readb(info, AXP288_FG_DES_CAP0_REG);
1603     - if (ret < 0)
1604     - goto fuel_gauge_read_err;
1605     - value |= (ret & FG_DES_CAP0_VAL_MASK);
1606     - val->intval = value * FG_DES_CAP_RES_LSB;
1607     + val->intval = ret * FG_DES_CAP_RES_LSB;
1608     break;
1609     case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
1610     val->intval = PROP_CURR(info->pdata->design_cap);
1611     diff --git a/drivers/rtc/rtc-rx8010.c b/drivers/rtc/rtc-rx8010.c
1612     index 7163b91bb773..d08da371912c 100644
1613     --- a/drivers/rtc/rtc-rx8010.c
1614     +++ b/drivers/rtc/rtc-rx8010.c
1615     @@ -63,7 +63,6 @@ struct rx8010_data {
1616     struct i2c_client *client;
1617     struct rtc_device *rtc;
1618     u8 ctrlreg;
1619     - spinlock_t flags_lock;
1620     };
1621    
1622     static irqreturn_t rx8010_irq_1_handler(int irq, void *dev_id)
1623     @@ -72,12 +71,12 @@ static irqreturn_t rx8010_irq_1_handler(int irq, void *dev_id)
1624     struct rx8010_data *rx8010 = i2c_get_clientdata(client);
1625     int flagreg;
1626    
1627     - spin_lock(&rx8010->flags_lock);
1628     + mutex_lock(&rx8010->rtc->ops_lock);
1629    
1630     flagreg = i2c_smbus_read_byte_data(client, RX8010_FLAG);
1631    
1632     if (flagreg <= 0) {
1633     - spin_unlock(&rx8010->flags_lock);
1634     + mutex_unlock(&rx8010->rtc->ops_lock);
1635     return IRQ_NONE;
1636     }
1637    
1638     @@ -101,7 +100,7 @@ static irqreturn_t rx8010_irq_1_handler(int irq, void *dev_id)
1639    
1640     i2c_smbus_write_byte_data(client, RX8010_FLAG, flagreg);
1641    
1642     - spin_unlock(&rx8010->flags_lock);
1643     + mutex_unlock(&rx8010->rtc->ops_lock);
1644     return IRQ_HANDLED;
1645     }
1646    
1647     @@ -143,7 +142,6 @@ static int rx8010_set_time(struct device *dev, struct rtc_time *dt)
1648     u8 date[7];
1649     int ctrl, flagreg;
1650     int ret;
1651     - unsigned long irqflags;
1652    
1653     if ((dt->tm_year < 100) || (dt->tm_year > 199))
1654     return -EINVAL;
1655     @@ -181,11 +179,8 @@ static int rx8010_set_time(struct device *dev, struct rtc_time *dt)
1656     if (ret < 0)
1657     return ret;
1658    
1659     - spin_lock_irqsave(&rx8010->flags_lock, irqflags);
1660     -
1661     flagreg = i2c_smbus_read_byte_data(rx8010->client, RX8010_FLAG);
1662     if (flagreg < 0) {
1663     - spin_unlock_irqrestore(&rx8010->flags_lock, irqflags);
1664     return flagreg;
1665     }
1666    
1667     @@ -193,8 +188,6 @@ static int rx8010_set_time(struct device *dev, struct rtc_time *dt)
1668     ret = i2c_smbus_write_byte_data(rx8010->client, RX8010_FLAG,
1669     flagreg & ~RX8010_FLAG_VLF);
1670    
1671     - spin_unlock_irqrestore(&rx8010->flags_lock, irqflags);
1672     -
1673     return 0;
1674     }
1675    
1676     @@ -288,12 +281,9 @@ static int rx8010_set_alarm(struct device *dev, struct rtc_wkalrm *t)
1677     u8 alarmvals[3];
1678     int extreg, flagreg;
1679     int err;
1680     - unsigned long irqflags;
1681    
1682     - spin_lock_irqsave(&rx8010->flags_lock, irqflags);
1683     flagreg = i2c_smbus_read_byte_data(client, RX8010_FLAG);
1684     if (flagreg < 0) {
1685     - spin_unlock_irqrestore(&rx8010->flags_lock, irqflags);
1686     return flagreg;
1687     }
1688    
1689     @@ -302,14 +292,12 @@ static int rx8010_set_alarm(struct device *dev, struct rtc_wkalrm *t)
1690     err = i2c_smbus_write_byte_data(rx8010->client, RX8010_CTRL,
1691     rx8010->ctrlreg);
1692     if (err < 0) {
1693     - spin_unlock_irqrestore(&rx8010->flags_lock, irqflags);
1694     return err;
1695     }
1696     }
1697    
1698     flagreg &= ~RX8010_FLAG_AF;
1699     err = i2c_smbus_write_byte_data(rx8010->client, RX8010_FLAG, flagreg);
1700     - spin_unlock_irqrestore(&rx8010->flags_lock, irqflags);
1701     if (err < 0)
1702     return err;
1703    
1704     @@ -404,7 +392,6 @@ static int rx8010_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
1705     struct rx8010_data *rx8010 = dev_get_drvdata(dev);
1706     int ret, tmp;
1707     int flagreg;
1708     - unsigned long irqflags;
1709    
1710     switch (cmd) {
1711     case RTC_VL_READ:
1712     @@ -419,16 +406,13 @@ static int rx8010_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
1713     return 0;
1714    
1715     case RTC_VL_CLR:
1716     - spin_lock_irqsave(&rx8010->flags_lock, irqflags);
1717     flagreg = i2c_smbus_read_byte_data(rx8010->client, RX8010_FLAG);
1718     if (flagreg < 0) {
1719     - spin_unlock_irqrestore(&rx8010->flags_lock, irqflags);
1720     return flagreg;
1721     }
1722    
1723     flagreg &= ~RX8010_FLAG_VLF;
1724     ret = i2c_smbus_write_byte_data(client, RX8010_FLAG, flagreg);
1725     - spin_unlock_irqrestore(&rx8010->flags_lock, irqflags);
1726     if (ret < 0)
1727     return ret;
1728    
1729     @@ -466,8 +450,6 @@ static int rx8010_probe(struct i2c_client *client,
1730     rx8010->client = client;
1731     i2c_set_clientdata(client, rx8010);
1732    
1733     - spin_lock_init(&rx8010->flags_lock);
1734     -
1735     err = rx8010_init_client(client);
1736     if (err)
1737     return err;
1738     diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
1739     index f1019908800e..453299095847 100644
1740     --- a/drivers/scsi/lpfc/lpfc_attr.c
1741     +++ b/drivers/scsi/lpfc/lpfc_attr.c
1742     @@ -5130,6 +5130,19 @@ lpfc_free_sysfs_attr(struct lpfc_vport *vport)
1743     * Dynamic FC Host Attributes Support
1744     */
1745    
1746     +/**
1747     + * lpfc_get_host_symbolic_name - Copy symbolic name into the scsi host
1748     + * @shost: kernel scsi host pointer.
1749     + **/
1750     +static void
1751     +lpfc_get_host_symbolic_name(struct Scsi_Host *shost)
1752     +{
1753     + struct lpfc_vport *vport = (struct lpfc_vport *)shost->hostdata;
1754     +
1755     + lpfc_vport_symbolic_node_name(vport, fc_host_symbolic_name(shost),
1756     + sizeof fc_host_symbolic_name(shost));
1757     +}
1758     +
1759     /**
1760     * lpfc_get_host_port_id - Copy the vport DID into the scsi host port id
1761     * @shost: kernel scsi host pointer.
1762     @@ -5667,6 +5680,8 @@ struct fc_function_template lpfc_transport_functions = {
1763     .show_host_supported_fc4s = 1,
1764     .show_host_supported_speeds = 1,
1765     .show_host_maxframe_size = 1,
1766     +
1767     + .get_host_symbolic_name = lpfc_get_host_symbolic_name,
1768     .show_host_symbolic_name = 1,
1769    
1770     /* dynamic attributes the driver supports */
1771     @@ -5734,6 +5749,8 @@ struct fc_function_template lpfc_vport_transport_functions = {
1772     .show_host_supported_fc4s = 1,
1773     .show_host_supported_speeds = 1,
1774     .show_host_maxframe_size = 1,
1775     +
1776     + .get_host_symbolic_name = lpfc_get_host_symbolic_name,
1777     .show_host_symbolic_name = 1,
1778    
1779     /* dynamic attributes the driver supports */
1780     diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
1781     index 7b696d108112..4df3cdcf88ce 100644
1782     --- a/drivers/scsi/lpfc/lpfc_els.c
1783     +++ b/drivers/scsi/lpfc/lpfc_els.c
1784     @@ -1999,6 +1999,9 @@ lpfc_issue_els_plogi(struct lpfc_vport *vport, uint32_t did, uint8_t retry)
1785     if (sp->cmn.fcphHigh < FC_PH3)
1786     sp->cmn.fcphHigh = FC_PH3;
1787    
1788     + sp->cmn.valid_vendor_ver_level = 0;
1789     + memset(sp->vendorVersion, 0, sizeof(sp->vendorVersion));
1790     +
1791     lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD,
1792     "Issue PLOGI: did:x%x",
1793     did, 0, 0);
1794     @@ -3990,6 +3993,9 @@ lpfc_els_rsp_acc(struct lpfc_vport *vport, uint32_t flag,
1795     } else {
1796     memcpy(pcmd, &vport->fc_sparam,
1797     sizeof(struct serv_parm));
1798     +
1799     + sp->cmn.valid_vendor_ver_level = 0;
1800     + memset(sp->vendorVersion, 0, sizeof(sp->vendorVersion));
1801     }
1802    
1803     lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_RSP,
1804     diff --git a/drivers/scsi/lpfc/lpfc_hw.h b/drivers/scsi/lpfc/lpfc_hw.h
1805     index 822654322e67..3b970d370600 100644
1806     --- a/drivers/scsi/lpfc/lpfc_hw.h
1807     +++ b/drivers/scsi/lpfc/lpfc_hw.h
1808     @@ -360,6 +360,12 @@ struct csp {
1809     * Word 1 Bit 30 in PLOGI request is random offset
1810     */
1811     #define virtual_fabric_support randomOffset /* Word 1, bit 30 */
1812     +/*
1813     + * Word 1 Bit 29 in common service parameter is overloaded.
1814     + * Word 1 Bit 29 in FLOGI response is multiple NPort assignment
1815     + * Word 1 Bit 29 in FLOGI/PLOGI request is Valid Vendor Version Level
1816     + */
1817     +#define valid_vendor_ver_level response_multiple_NPort /* Word 1, bit 29 */
1818     #ifdef __BIG_ENDIAN_BITFIELD
1819     uint16_t request_multiple_Nport:1; /* FC Word 1, bit 31 */
1820     uint16_t randomOffset:1; /* FC Word 1, bit 30 */
1821     diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
1822     index 2d4f4b58dcfa..8f1df76a77b6 100644
1823     --- a/drivers/scsi/lpfc/lpfc_sli.c
1824     +++ b/drivers/scsi/lpfc/lpfc_sli.c
1825     @@ -119,6 +119,8 @@ lpfc_sli4_wq_put(struct lpfc_queue *q, union lpfc_wqe *wqe)
1826     if (q->phba->sli3_options & LPFC_SLI4_PHWQ_ENABLED)
1827     bf_set(wqe_wqid, &wqe->generic.wqe_com, q->queue_id);
1828     lpfc_sli_pcimem_bcopy(wqe, temp_wqe, q->entry_size);
1829     + /* ensure WQE bcopy flushed before doorbell write */
1830     + wmb();
1831    
1832     /* Update the host index before invoking device */
1833     host_index = q->host_index;
1834     @@ -10004,6 +10006,7 @@ lpfc_sli_abort_iotag_issue(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
1835     iabt->ulpCommand = CMD_CLOSE_XRI_CN;
1836    
1837     abtsiocbp->iocb_cmpl = lpfc_sli_abort_els_cmpl;
1838     + abtsiocbp->vport = vport;
1839    
1840     lpfc_printf_vlog(vport, KERN_INFO, LOG_SLI,
1841     "0339 Abort xri x%x, original iotag x%x, "
1842     diff --git a/drivers/scsi/lpfc/lpfc_vport.c b/drivers/scsi/lpfc/lpfc_vport.c
1843     index c27f4b724547..e18bbc66e83b 100644
1844     --- a/drivers/scsi/lpfc/lpfc_vport.c
1845     +++ b/drivers/scsi/lpfc/lpfc_vport.c
1846     @@ -537,6 +537,12 @@ enable_vport(struct fc_vport *fc_vport)
1847    
1848     spin_lock_irq(shost->host_lock);
1849     vport->load_flag |= FC_LOADING;
1850     + if (vport->fc_flag & FC_VPORT_NEEDS_INIT_VPI) {
1851     + spin_unlock_irq(shost->host_lock);
1852     + lpfc_issue_init_vpi(vport);
1853     + goto out;
1854     + }
1855     +
1856     vport->fc_flag |= FC_VPORT_NEEDS_REG_VPI;
1857     spin_unlock_irq(shost->host_lock);
1858    
1859     @@ -557,6 +563,8 @@ enable_vport(struct fc_vport *fc_vport)
1860     } else {
1861     lpfc_vport_set_state(vport, FC_VPORT_FAILED);
1862     }
1863     +
1864     +out:
1865     lpfc_printf_vlog(vport, KERN_ERR, LOG_VPORT,
1866     "1827 Vport Enabled.\n");
1867     return VPORT_OK;
1868     diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
1869     index 462bf42dd19c..51d559214db6 100644
1870     --- a/drivers/scsi/ufs/ufs-qcom.c
1871     +++ b/drivers/scsi/ufs/ufs-qcom.c
1872     @@ -1689,6 +1689,7 @@ static const struct of_device_id ufs_qcom_of_match[] = {
1873     { .compatible = "qcom,ufshc"},
1874     {},
1875     };
1876     +MODULE_DEVICE_TABLE(of, ufs_qcom_of_match);
1877    
1878     static const struct dev_pm_ops ufs_qcom_pm_ops = {
1879     .suspend = ufshcd_pltfrm_suspend,
1880     diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
1881     index edb06e466224..530034bc2d13 100644
1882     --- a/drivers/scsi/ufs/ufshcd.c
1883     +++ b/drivers/scsi/ufs/ufshcd.c
1884     @@ -3781,18 +3781,25 @@ static int ufshcd_disable_auto_bkops(struct ufs_hba *hba)
1885     }
1886    
1887     /**
1888     - * ufshcd_force_reset_auto_bkops - force enable of auto bkops
1889     + * ufshcd_force_reset_auto_bkops - force reset auto bkops state
1890     * @hba: per adapter instance
1891     *
1892     * After a device reset the device may toggle the BKOPS_EN flag
1893     * to default value. The s/w tracking variables should be updated
1894     - * as well. Do this by forcing enable of auto bkops.
1895     + * as well. This function would change the auto-bkops state based on
1896     + * UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND.
1897     */
1898     -static void ufshcd_force_reset_auto_bkops(struct ufs_hba *hba)
1899     +static void ufshcd_force_reset_auto_bkops(struct ufs_hba *hba)
1900     {
1901     - hba->auto_bkops_enabled = false;
1902     - hba->ee_ctrl_mask |= MASK_EE_URGENT_BKOPS;
1903     - ufshcd_enable_auto_bkops(hba);
1904     + if (ufshcd_keep_autobkops_enabled_except_suspend(hba)) {
1905     + hba->auto_bkops_enabled = false;
1906     + hba->ee_ctrl_mask |= MASK_EE_URGENT_BKOPS;
1907     + ufshcd_enable_auto_bkops(hba);
1908     + } else {
1909     + hba->auto_bkops_enabled = true;
1910     + hba->ee_ctrl_mask &= ~MASK_EE_URGENT_BKOPS;
1911     + ufshcd_disable_auto_bkops(hba);
1912     + }
1913     }
1914    
1915     static inline int ufshcd_get_bkops_status(struct ufs_hba *hba, u32 *status)
1916     @@ -6138,11 +6145,15 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
1917     goto set_old_link_state;
1918     }
1919    
1920     - /*
1921     - * If BKOPs operations are urgently needed at this moment then
1922     - * keep auto-bkops enabled or else disable it.
1923     - */
1924     - ufshcd_urgent_bkops(hba);
1925     + if (ufshcd_keep_autobkops_enabled_except_suspend(hba))
1926     + ufshcd_enable_auto_bkops(hba);
1927     + else
1928     + /*
1929     + * If BKOPs operations are urgently needed at this moment then
1930     + * keep auto-bkops enabled or else disable it.
1931     + */
1932     + ufshcd_urgent_bkops(hba);
1933     +
1934     hba->clk_gating.is_suspended = false;
1935    
1936     if (ufshcd_is_clkscaling_enabled(hba))
1937     diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
1938     index 04509827fe64..f2170d5058a8 100644
1939     --- a/drivers/scsi/ufs/ufshcd.h
1940     +++ b/drivers/scsi/ufs/ufshcd.h
1941     @@ -548,6 +548,14 @@ struct ufs_hba {
1942     * CAUTION: Enabling this might reduce overall UFS throughput.
1943     */
1944     #define UFSHCD_CAP_INTR_AGGR (1 << 4)
1945     + /*
1946     + * This capability allows the device auto-bkops to be always enabled
1947     + * except during suspend (both runtime and suspend).
1948     + * Enabling this capability means that device will always be allowed
1949     + * to do background operation when it's active but it might degrade
1950     + * the performance of ongoing read/write operations.
1951     + */
1952     +#define UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND (1 << 5)
1953    
1954     struct devfreq *devfreq;
1955     struct ufs_clk_scaling clk_scaling;
1956     @@ -645,6 +653,11 @@ static inline void *ufshcd_get_variant(struct ufs_hba *hba)
1957     BUG_ON(!hba);
1958     return hba->priv;
1959     }
1960     +static inline bool ufshcd_keep_autobkops_enabled_except_suspend(
1961     + struct ufs_hba *hba)
1962     +{
1963     + return hba->caps & UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND;
1964     +}
1965    
1966     extern int ufshcd_runtime_suspend(struct ufs_hba *hba);
1967     extern int ufshcd_runtime_resume(struct ufs_hba *hba);
1968     diff --git a/drivers/staging/greybus/connection.c b/drivers/staging/greybus/connection.c
1969     index 557075147f2d..1bf0ee403106 100644
1970     --- a/drivers/staging/greybus/connection.c
1971     +++ b/drivers/staging/greybus/connection.c
1972     @@ -357,6 +357,9 @@ static int gb_connection_hd_cport_quiesce(struct gb_connection *connection)
1973     size_t peer_space;
1974     int ret;
1975    
1976     + if (!hd->driver->cport_quiesce)
1977     + return 0;
1978     +
1979     peer_space = sizeof(struct gb_operation_msg_hdr) +
1980     sizeof(struct gb_cport_shutdown_request);
1981    
1982     @@ -380,6 +383,9 @@ static int gb_connection_hd_cport_clear(struct gb_connection *connection)
1983     struct gb_host_device *hd = connection->hd;
1984     int ret;
1985    
1986     + if (!hd->driver->cport_clear)
1987     + return 0;
1988     +
1989     ret = hd->driver->cport_clear(hd, connection->hd_cport_id);
1990     if (ret) {
1991     dev_err(&hd->dev, "%s: failed to clear host cport: %d\n",
1992     diff --git a/drivers/staging/greybus/spilib.c b/drivers/staging/greybus/spilib.c
1993     index e97b19148497..1e7321a1404c 100644
1994     --- a/drivers/staging/greybus/spilib.c
1995     +++ b/drivers/staging/greybus/spilib.c
1996     @@ -544,11 +544,14 @@ int gb_spilib_master_init(struct gb_connection *connection, struct device *dev,
1997    
1998     return 0;
1999    
2000     -exit_spi_unregister:
2001     - spi_unregister_master(master);
2002     exit_spi_put:
2003     spi_master_put(master);
2004    
2005     + return ret;
2006     +
2007     +exit_spi_unregister:
2008     + spi_unregister_master(master);
2009     +
2010     return ret;
2011     }
2012     EXPORT_SYMBOL_GPL(gb_spilib_master_init);
2013     @@ -558,7 +561,6 @@ void gb_spilib_master_exit(struct gb_connection *connection)
2014     struct spi_master *master = gb_connection_get_data(connection);
2015    
2016     spi_unregister_master(master);
2017     - spi_master_put(master);
2018     }
2019     EXPORT_SYMBOL_GPL(gb_spilib_master_exit);
2020    
2021     diff --git a/drivers/staging/rtl8188eu/include/rtw_debug.h b/drivers/staging/rtl8188eu/include/rtw_debug.h
2022     index 95590a1a7b1b..9cc4b8c7c166 100644
2023     --- a/drivers/staging/rtl8188eu/include/rtw_debug.h
2024     +++ b/drivers/staging/rtl8188eu/include/rtw_debug.h
2025     @@ -70,7 +70,7 @@ extern u32 GlobalDebugLevel;
2026     #define DBG_88E_LEVEL(_level, fmt, arg...) \
2027     do { \
2028     if (_level <= GlobalDebugLevel) \
2029     - pr_info(DRIVER_PREFIX"ERROR " fmt, ##arg); \
2030     + pr_info(DRIVER_PREFIX fmt, ##arg); \
2031     } while (0)
2032    
2033     #define DBG_88E(...) \
2034     diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c
2035     index 475e7904fe45..2d26f9a30fcf 100644
2036     --- a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c
2037     +++ b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c
2038     @@ -199,7 +199,7 @@ static noinline_for_stack char *translate_scan(struct _adapter *padapter,
2039     iwe.cmd = SIOCGIWMODE;
2040     memcpy((u8 *)&cap, r8712_get_capability_from_ie(pnetwork->network.IEs),
2041     2);
2042     - cap = le16_to_cpu(cap);
2043     + le16_to_cpus(&cap);
2044     if (cap & (WLAN_CAPABILITY_IBSS | WLAN_CAPABILITY_BSS)) {
2045     if (cap & WLAN_CAPABILITY_BSS)
2046     iwe.u.mode = (u32)IW_MODE_MASTER;
2047     diff --git a/drivers/staging/wilc1000/linux_wlan.c b/drivers/staging/wilc1000/linux_wlan.c
2048     index defffa75ae1c..07d6e4824a9d 100644
2049     --- a/drivers/staging/wilc1000/linux_wlan.c
2050     +++ b/drivers/staging/wilc1000/linux_wlan.c
2051     @@ -1001,7 +1001,7 @@ int wilc_mac_xmit(struct sk_buff *skb, struct net_device *ndev)
2052     tx_data->skb = skb;
2053    
2054     eth_h = (struct ethhdr *)(skb->data);
2055     - if (eth_h->h_proto == 0x8e88)
2056     + if (eth_h->h_proto == cpu_to_be16(0x8e88))
2057     netdev_dbg(ndev, "EAPOL transmitted\n");
2058    
2059     ih = (struct iphdr *)(skb->data + sizeof(struct ethhdr));
2060     diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
2061     index c8075eb3db26..fa619354c5c5 100644
2062     --- a/drivers/usb/core/devio.c
2063     +++ b/drivers/usb/core/devio.c
2064     @@ -1838,6 +1838,18 @@ static int proc_unlinkurb(struct usb_dev_state *ps, void __user *arg)
2065     return 0;
2066     }
2067    
2068     +static void compute_isochronous_actual_length(struct urb *urb)
2069     +{
2070     + unsigned int i;
2071     +
2072     + if (urb->number_of_packets > 0) {
2073     + urb->actual_length = 0;
2074     + for (i = 0; i < urb->number_of_packets; i++)
2075     + urb->actual_length +=
2076     + urb->iso_frame_desc[i].actual_length;
2077     + }
2078     +}
2079     +
2080     static int processcompl(struct async *as, void __user * __user *arg)
2081     {
2082     struct urb *urb = as->urb;
2083     @@ -1845,6 +1857,7 @@ static int processcompl(struct async *as, void __user * __user *arg)
2084     void __user *addr = as->userurb;
2085     unsigned int i;
2086    
2087     + compute_isochronous_actual_length(urb);
2088     if (as->userbuffer && urb->actual_length) {
2089     if (copy_urb_data_to_user(as->userbuffer, urb))
2090     goto err_out;
2091     @@ -2019,6 +2032,7 @@ static int processcompl_compat(struct async *as, void __user * __user *arg)
2092     void __user *addr = as->userurb;
2093     unsigned int i;
2094    
2095     + compute_isochronous_actual_length(urb);
2096     if (as->userbuffer && urb->actual_length) {
2097     if (copy_urb_data_to_user(as->userbuffer, urb))
2098     return -EFAULT;
2099     diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
2100     index a6aaf2f193a4..37c418e581fb 100644
2101     --- a/drivers/usb/core/quirks.c
2102     +++ b/drivers/usb/core/quirks.c
2103     @@ -221,6 +221,9 @@ static const struct usb_device_id usb_quirk_list[] = {
2104     /* Corsair Strafe RGB */
2105     { USB_DEVICE(0x1b1c, 0x1b20), .driver_info = USB_QUIRK_DELAY_INIT },
2106    
2107     + /* Corsair K70 LUX */
2108     + { USB_DEVICE(0x1b1c, 0x1b36), .driver_info = USB_QUIRK_DELAY_INIT },
2109     +
2110     /* MIDI keyboard WORLDE MINI */
2111     { USB_DEVICE(0x1c75, 0x0204), .driver_info =
2112     USB_QUIRK_CONFIG_INTF_STRINGS },
2113     diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
2114     index f9c99803a43d..273320fa30ae 100644
2115     --- a/drivers/usb/gadget/function/f_fs.c
2116     +++ b/drivers/usb/gadget/function/f_fs.c
2117     @@ -3698,6 +3698,7 @@ static void ffs_closed(struct ffs_data *ffs)
2118     goto done;
2119    
2120     ffs_obj->desc_ready = false;
2121     + ffs_obj->ffs_data = NULL;
2122    
2123     if (test_and_clear_bit(FFS_FL_CALL_CLOSED_CALLBACK, &ffs->flags) &&
2124     ffs_obj->ffs_closed_callback)
2125     diff --git a/drivers/usb/serial/garmin_gps.c b/drivers/usb/serial/garmin_gps.c
2126     index b2f2e87aed94..91e7e3a166a5 100644
2127     --- a/drivers/usb/serial/garmin_gps.c
2128     +++ b/drivers/usb/serial/garmin_gps.c
2129     @@ -138,6 +138,7 @@ struct garmin_data {
2130     __u8 privpkt[4*6];
2131     spinlock_t lock;
2132     struct list_head pktlist;
2133     + struct usb_anchor write_urbs;
2134     };
2135    
2136    
2137     @@ -905,13 +906,19 @@ static int garmin_init_session(struct usb_serial_port *port)
2138     sizeof(GARMIN_START_SESSION_REQ), 0);
2139    
2140     if (status < 0)
2141     - break;
2142     + goto err_kill_urbs;
2143     }
2144    
2145     if (status > 0)
2146     status = 0;
2147     }
2148    
2149     + return status;
2150     +
2151     +err_kill_urbs:
2152     + usb_kill_anchored_urbs(&garmin_data_p->write_urbs);
2153     + usb_kill_urb(port->interrupt_in_urb);
2154     +
2155     return status;
2156     }
2157    
2158     @@ -930,7 +937,6 @@ static int garmin_open(struct tty_struct *tty, struct usb_serial_port *port)
2159     spin_unlock_irqrestore(&garmin_data_p->lock, flags);
2160    
2161     /* shutdown any bulk reads that might be going on */
2162     - usb_kill_urb(port->write_urb);
2163     usb_kill_urb(port->read_urb);
2164    
2165     if (garmin_data_p->state == STATE_RESET)
2166     @@ -953,7 +959,7 @@ static void garmin_close(struct usb_serial_port *port)
2167    
2168     /* shutdown our urbs */
2169     usb_kill_urb(port->read_urb);
2170     - usb_kill_urb(port->write_urb);
2171     + usb_kill_anchored_urbs(&garmin_data_p->write_urbs);
2172    
2173     /* keep reset state so we know that we must start a new session */
2174     if (garmin_data_p->state != STATE_RESET)
2175     @@ -1037,12 +1043,14 @@ static int garmin_write_bulk(struct usb_serial_port *port,
2176     }
2177    
2178     /* send it down the pipe */
2179     + usb_anchor_urb(urb, &garmin_data_p->write_urbs);
2180     status = usb_submit_urb(urb, GFP_ATOMIC);
2181     if (status) {
2182     dev_err(&port->dev,
2183     "%s - usb_submit_urb(write bulk) failed with status = %d\n",
2184     __func__, status);
2185     count = status;
2186     + usb_unanchor_urb(urb);
2187     kfree(buffer);
2188     }
2189    
2190     @@ -1401,9 +1409,16 @@ static int garmin_port_probe(struct usb_serial_port *port)
2191     garmin_data_p->state = 0;
2192     garmin_data_p->flags = 0;
2193     garmin_data_p->count = 0;
2194     + init_usb_anchor(&garmin_data_p->write_urbs);
2195     usb_set_serial_port_data(port, garmin_data_p);
2196    
2197     status = garmin_init_session(port);
2198     + if (status)
2199     + goto err_free;
2200     +
2201     + return 0;
2202     +err_free:
2203     + kfree(garmin_data_p);
2204    
2205     return status;
2206     }
2207     @@ -1413,6 +1428,7 @@ static int garmin_port_remove(struct usb_serial_port *port)
2208     {
2209     struct garmin_data *garmin_data_p = usb_get_serial_port_data(port);
2210    
2211     + usb_kill_anchored_urbs(&garmin_data_p->write_urbs);
2212     usb_kill_urb(port->interrupt_in_urb);
2213     del_timer_sync(&garmin_data_p->timer);
2214     kfree(garmin_data_p);
2215     diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
2216     index e1c1e329c877..4516291df1b8 100644
2217     --- a/drivers/usb/serial/qcserial.c
2218     +++ b/drivers/usb/serial/qcserial.c
2219     @@ -148,6 +148,7 @@ static const struct usb_device_id id_table[] = {
2220     {DEVICE_SWI(0x1199, 0x68a2)}, /* Sierra Wireless MC7710 */
2221     {DEVICE_SWI(0x1199, 0x68c0)}, /* Sierra Wireless MC7304/MC7354 */
2222     {DEVICE_SWI(0x1199, 0x901c)}, /* Sierra Wireless EM7700 */
2223     + {DEVICE_SWI(0x1199, 0x901e)}, /* Sierra Wireless EM7355 QDL */
2224     {DEVICE_SWI(0x1199, 0x901f)}, /* Sierra Wireless EM7355 */
2225     {DEVICE_SWI(0x1199, 0x9040)}, /* Sierra Wireless Modem */
2226     {DEVICE_SWI(0x1199, 0x9041)}, /* Sierra Wireless MC7305/MC7355 */
2227     diff --git a/drivers/video/backlight/adp5520_bl.c b/drivers/video/backlight/adp5520_bl.c
2228     index dd88ba1d71ce..35373e2065b2 100644
2229     --- a/drivers/video/backlight/adp5520_bl.c
2230     +++ b/drivers/video/backlight/adp5520_bl.c
2231     @@ -332,10 +332,18 @@ static int adp5520_bl_probe(struct platform_device *pdev)
2232     }
2233    
2234     platform_set_drvdata(pdev, bl);
2235     - ret |= adp5520_bl_setup(bl);
2236     + ret = adp5520_bl_setup(bl);
2237     + if (ret) {
2238     + dev_err(&pdev->dev, "failed to setup\n");
2239     + if (data->pdata->en_ambl_sens)
2240     + sysfs_remove_group(&bl->dev.kobj,
2241     + &adp5520_bl_attr_group);
2242     + return ret;
2243     + }
2244     +
2245     backlight_update_status(bl);
2246    
2247     - return ret;
2248     + return 0;
2249     }
2250    
2251     static int adp5520_bl_remove(struct platform_device *pdev)
2252     diff --git a/drivers/video/backlight/lcd.c b/drivers/video/backlight/lcd.c
2253     index 7de847df224f..4b40c6a4d441 100644
2254     --- a/drivers/video/backlight/lcd.c
2255     +++ b/drivers/video/backlight/lcd.c
2256     @@ -226,6 +226,8 @@ struct lcd_device *lcd_device_register(const char *name, struct device *parent,
2257     dev_set_name(&new_ld->dev, "%s", name);
2258     dev_set_drvdata(&new_ld->dev, devdata);
2259    
2260     + new_ld->ops = ops;
2261     +
2262     rc = device_register(&new_ld->dev);
2263     if (rc) {
2264     put_device(&new_ld->dev);
2265     @@ -238,8 +240,6 @@ struct lcd_device *lcd_device_register(const char *name, struct device *parent,
2266     return ERR_PTR(rc);
2267     }
2268    
2269     - new_ld->ops = ops;
2270     -
2271     return new_ld;
2272     }
2273     EXPORT_SYMBOL(lcd_device_register);
2274     diff --git a/include/dt-bindings/pinctrl/omap.h b/include/dt-bindings/pinctrl/omap.h
2275     index effadd05695b..fbd6f7202476 100644
2276     --- a/include/dt-bindings/pinctrl/omap.h
2277     +++ b/include/dt-bindings/pinctrl/omap.h
2278     @@ -45,8 +45,8 @@
2279     #define PIN_OFF_NONE 0
2280     #define PIN_OFF_OUTPUT_HIGH (OFF_EN | OFFOUT_EN | OFFOUT_VAL)
2281     #define PIN_OFF_OUTPUT_LOW (OFF_EN | OFFOUT_EN)
2282     -#define PIN_OFF_INPUT_PULLUP (OFF_EN | OFF_PULL_EN | OFF_PULL_UP)
2283     -#define PIN_OFF_INPUT_PULLDOWN (OFF_EN | OFF_PULL_EN)
2284     +#define PIN_OFF_INPUT_PULLUP (OFF_EN | OFFOUT_EN | OFF_PULL_EN | OFF_PULL_UP)
2285     +#define PIN_OFF_INPUT_PULLDOWN (OFF_EN | OFFOUT_EN | OFF_PULL_EN)
2286     #define PIN_OFF_WAKEUPENABLE WAKEUP_EN
2287    
2288     /*
2289     diff --git a/include/uapi/linux/rds.h b/include/uapi/linux/rds.h
2290     index 7af20a136429..804c9b2bfce3 100644
2291     --- a/include/uapi/linux/rds.h
2292     +++ b/include/uapi/linux/rds.h
2293     @@ -104,8 +104,8 @@
2294     #define RDS_INFO_LAST 10010
2295    
2296     struct rds_info_counter {
2297     - uint8_t name[32];
2298     - uint64_t value;
2299     + __u8 name[32];
2300     + __u64 value;
2301     } __attribute__((packed));
2302    
2303     #define RDS_INFO_CONNECTION_FLAG_SENDING 0x01
2304     @@ -115,35 +115,35 @@ struct rds_info_counter {
2305     #define TRANSNAMSIZ 16
2306    
2307     struct rds_info_connection {
2308     - uint64_t next_tx_seq;
2309     - uint64_t next_rx_seq;
2310     + __u64 next_tx_seq;
2311     + __u64 next_rx_seq;
2312     __be32 laddr;
2313     __be32 faddr;
2314     - uint8_t transport[TRANSNAMSIZ]; /* null term ascii */
2315     - uint8_t flags;
2316     + __u8 transport[TRANSNAMSIZ]; /* null term ascii */
2317     + __u8 flags;
2318     } __attribute__((packed));
2319    
2320     #define RDS_INFO_MESSAGE_FLAG_ACK 0x01
2321     #define RDS_INFO_MESSAGE_FLAG_FAST_ACK 0x02
2322    
2323     struct rds_info_message {
2324     - uint64_t seq;
2325     - uint32_t len;
2326     + __u64 seq;
2327     + __u32 len;
2328     __be32 laddr;
2329     __be32 faddr;
2330     __be16 lport;
2331     __be16 fport;
2332     - uint8_t flags;
2333     + __u8 flags;
2334     } __attribute__((packed));
2335    
2336     struct rds_info_socket {
2337     - uint32_t sndbuf;
2338     + __u32 sndbuf;
2339     __be32 bound_addr;
2340     __be32 connected_addr;
2341     __be16 bound_port;
2342     __be16 connected_port;
2343     - uint32_t rcvbuf;
2344     - uint64_t inum;
2345     + __u32 rcvbuf;
2346     + __u64 inum;
2347     } __attribute__((packed));
2348    
2349     struct rds_info_tcp_socket {
2350     @@ -151,25 +151,25 @@ struct rds_info_tcp_socket {
2351     __be16 local_port;
2352     __be32 peer_addr;
2353     __be16 peer_port;
2354     - uint64_t hdr_rem;
2355     - uint64_t data_rem;
2356     - uint32_t last_sent_nxt;
2357     - uint32_t last_expected_una;
2358     - uint32_t last_seen_una;
2359     + __u64 hdr_rem;
2360     + __u64 data_rem;
2361     + __u32 last_sent_nxt;
2362     + __u32 last_expected_una;
2363     + __u32 last_seen_una;
2364     } __attribute__((packed));
2365    
2366     #define RDS_IB_GID_LEN 16
2367     struct rds_info_rdma_connection {
2368     __be32 src_addr;
2369     __be32 dst_addr;
2370     - uint8_t src_gid[RDS_IB_GID_LEN];
2371     - uint8_t dst_gid[RDS_IB_GID_LEN];
2372     + __u8 src_gid[RDS_IB_GID_LEN];
2373     + __u8 dst_gid[RDS_IB_GID_LEN];
2374    
2375     - uint32_t max_send_wr;
2376     - uint32_t max_recv_wr;
2377     - uint32_t max_send_sge;
2378     - uint32_t rdma_mr_max;
2379     - uint32_t rdma_mr_size;
2380     + __u32 max_send_wr;
2381     + __u32 max_recv_wr;
2382     + __u32 max_send_sge;
2383     + __u32 rdma_mr_max;
2384     + __u32 rdma_mr_size;
2385     };
2386    
2387     /*
2388     @@ -210,70 +210,70 @@ struct rds_info_rdma_connection {
2389     * (so that the application does not have to worry about
2390     * alignment).
2391     */
2392     -typedef uint64_t rds_rdma_cookie_t;
2393     +typedef __u64 rds_rdma_cookie_t;
2394    
2395     struct rds_iovec {
2396     - uint64_t addr;
2397     - uint64_t bytes;
2398     + __u64 addr;
2399     + __u64 bytes;
2400     };
2401    
2402     struct rds_get_mr_args {
2403     struct rds_iovec vec;
2404     - uint64_t cookie_addr;
2405     - uint64_t flags;
2406     + __u64 cookie_addr;
2407     + __u64 flags;
2408     };
2409    
2410     struct rds_get_mr_for_dest_args {
2411     struct __kernel_sockaddr_storage dest_addr;
2412     struct rds_iovec vec;
2413     - uint64_t cookie_addr;
2414     - uint64_t flags;
2415     + __u64 cookie_addr;
2416     + __u64 flags;
2417     };
2418    
2419     struct rds_free_mr_args {
2420     rds_rdma_cookie_t cookie;
2421     - uint64_t flags;
2422     + __u64 flags;
2423     };
2424    
2425     struct rds_rdma_args {
2426     rds_rdma_cookie_t cookie;
2427     struct rds_iovec remote_vec;
2428     - uint64_t local_vec_addr;
2429     - uint64_t nr_local;
2430     - uint64_t flags;
2431     - uint64_t user_token;
2432     + __u64 local_vec_addr;
2433     + __u64 nr_local;
2434     + __u64 flags;
2435     + __u64 user_token;
2436     };
2437    
2438     struct rds_atomic_args {
2439     rds_rdma_cookie_t cookie;
2440     - uint64_t local_addr;
2441     - uint64_t remote_addr;
2442     + __u64 local_addr;
2443     + __u64 remote_addr;
2444     union {
2445     struct {
2446     - uint64_t compare;
2447     - uint64_t swap;
2448     + __u64 compare;
2449     + __u64 swap;
2450     } cswp;
2451     struct {
2452     - uint64_t add;
2453     + __u64 add;
2454     } fadd;
2455     struct {
2456     - uint64_t compare;
2457     - uint64_t swap;
2458     - uint64_t compare_mask;
2459     - uint64_t swap_mask;
2460     + __u64 compare;
2461     + __u64 swap;
2462     + __u64 compare_mask;
2463     + __u64 swap_mask;
2464     } m_cswp;
2465     struct {
2466     - uint64_t add;
2467     - uint64_t nocarry_mask;
2468     + __u64 add;
2469     + __u64 nocarry_mask;
2470     } m_fadd;
2471     };
2472     - uint64_t flags;
2473     - uint64_t user_token;
2474     + __u64 flags;
2475     + __u64 user_token;
2476     };
2477    
2478     struct rds_rdma_notify {
2479     - uint64_t user_token;
2480     - int32_t status;
2481     + __u64 user_token;
2482     + __s32 status;
2483     };
2484    
2485     #define RDS_RDMA_SUCCESS 0
2486     diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
2487     index 6b3d27e50317..dd33c785ce16 100644
2488     --- a/net/ipv4/tcp.c
2489     +++ b/net/ipv4/tcp.c
2490     @@ -431,7 +431,7 @@ EXPORT_SYMBOL(tcp_init_sock);
2491    
2492     static void tcp_tx_timestamp(struct sock *sk, u16 tsflags, struct sk_buff *skb)
2493     {
2494     - if (tsflags) {
2495     + if (tsflags && skb) {
2496     struct skb_shared_info *shinfo = skb_shinfo(skb);
2497     struct tcp_skb_cb *tcb = TCP_SKB_CB(skb);
2498    
2499     @@ -966,10 +966,8 @@ static ssize_t do_tcp_sendpages(struct sock *sk, struct page *page, int offset,
2500     copied += copy;
2501     offset += copy;
2502     size -= copy;
2503     - if (!size) {
2504     - tcp_tx_timestamp(sk, sk->sk_tsflags, skb);
2505     + if (!size)
2506     goto out;
2507     - }
2508    
2509     if (skb->len < size_goal || (flags & MSG_OOB))
2510     continue;
2511     @@ -995,8 +993,11 @@ static ssize_t do_tcp_sendpages(struct sock *sk, struct page *page, int offset,
2512     }
2513    
2514     out:
2515     - if (copied && !(flags & MSG_SENDPAGE_NOTLAST))
2516     - tcp_push(sk, flags, mss_now, tp->nonagle, size_goal);
2517     + if (copied) {
2518     + tcp_tx_timestamp(sk, sk->sk_tsflags, tcp_write_queue_tail(sk));
2519     + if (!(flags & MSG_SENDPAGE_NOTLAST))
2520     + tcp_push(sk, flags, mss_now, tp->nonagle, size_goal);
2521     + }
2522     return copied;
2523    
2524     do_error:
2525     @@ -1289,7 +1290,6 @@ int tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
2526    
2527     copied += copy;
2528     if (!msg_data_left(msg)) {
2529     - tcp_tx_timestamp(sk, sockc.tsflags, skb);
2530     if (unlikely(flags & MSG_EOR))
2531     TCP_SKB_CB(skb)->eor = 1;
2532     goto out;
2533     @@ -1320,8 +1320,10 @@ int tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
2534     }
2535    
2536     out:
2537     - if (copied)
2538     + if (copied) {
2539     + tcp_tx_timestamp(sk, sockc.tsflags, tcp_write_queue_tail(sk));
2540     tcp_push(sk, flags, mss_now, tp->nonagle, size_goal);
2541     + }
2542     out_nopush:
2543     release_sock(sk);
2544     return copied + copied_syn;
2545     diff --git a/sound/drivers/vx/vx_pcm.c b/sound/drivers/vx/vx_pcm.c
2546     index 11467272089e..ea7b377f0378 100644
2547     --- a/sound/drivers/vx/vx_pcm.c
2548     +++ b/sound/drivers/vx/vx_pcm.c
2549     @@ -1015,7 +1015,7 @@ static void vx_pcm_capture_update(struct vx_core *chip, struct snd_pcm_substream
2550     int size, space, count;
2551     struct snd_pcm_runtime *runtime = subs->runtime;
2552    
2553     - if (! pipe->prepared || (chip->chip_status & VX_STAT_IS_STALE))
2554     + if (!pipe->running || (chip->chip_status & VX_STAT_IS_STALE))
2555     return;
2556    
2557     size = runtime->buffer_size - snd_pcm_capture_avail(runtime);
2558     @@ -1048,8 +1048,10 @@ static void vx_pcm_capture_update(struct vx_core *chip, struct snd_pcm_substream
2559     /* ok, let's accelerate! */
2560     int align = pipe->align * 3;
2561     space = (count / align) * align;
2562     - vx_pseudo_dma_read(chip, runtime, pipe, space);
2563     - count -= space;
2564     + if (space > 0) {
2565     + vx_pseudo_dma_read(chip, runtime, pipe, space);
2566     + count -= space;
2567     + }
2568     }
2569     /* read the rest of bytes */
2570     while (count > 0) {
2571     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
2572     index fe1d06d50392..80c40a1b8b65 100644
2573     --- a/sound/pci/hda/patch_realtek.c
2574     +++ b/sound/pci/hda/patch_realtek.c
2575     @@ -338,6 +338,7 @@ static void alc_fill_eapd_coef(struct hda_codec *codec)
2576     case 0x10ec0288:
2577     case 0x10ec0295:
2578     case 0x10ec0298:
2579     + case 0x10ec0299:
2580     alc_update_coef_idx(codec, 0x10, 1<<9, 0);
2581     break;
2582     case 0x10ec0285:
2583     @@ -914,6 +915,7 @@ static struct alc_codec_rename_pci_table rename_pci_tbl[] = {
2584     { 0x10ec0256, 0x1028, 0, "ALC3246" },
2585     { 0x10ec0225, 0x1028, 0, "ALC3253" },
2586     { 0x10ec0295, 0x1028, 0, "ALC3254" },
2587     + { 0x10ec0299, 0x1028, 0, "ALC3271" },
2588     { 0x10ec0670, 0x1025, 0, "ALC669X" },
2589     { 0x10ec0676, 0x1025, 0, "ALC679X" },
2590     { 0x10ec0282, 0x1043, 0, "ALC3229" },
2591     @@ -3721,6 +3723,7 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
2592     break;
2593     case 0x10ec0225:
2594     case 0x10ec0295:
2595     + case 0x10ec0299:
2596     alc_process_coef_fw(codec, coef0225);
2597     break;
2598     case 0x10ec0867:
2599     @@ -3829,6 +3832,7 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
2600     break;
2601     case 0x10ec0225:
2602     case 0x10ec0295:
2603     + case 0x10ec0299:
2604     alc_update_coef_idx(codec, 0x45, 0x3f<<10, 0x31<<10);
2605     snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
2606     alc_process_coef_fw(codec, coef0225);
2607     @@ -3887,6 +3891,7 @@ static void alc_headset_mode_default(struct hda_codec *codec)
2608     switch (codec->core.vendor_id) {
2609     case 0x10ec0225:
2610     case 0x10ec0295:
2611     + case 0x10ec0299:
2612     alc_process_coef_fw(codec, coef0225);
2613     break;
2614     case 0x10ec0236:
2615     @@ -4004,6 +4009,7 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
2616     break;
2617     case 0x10ec0225:
2618     case 0x10ec0295:
2619     + case 0x10ec0299:
2620     alc_process_coef_fw(codec, coef0225);
2621     break;
2622     case 0x10ec0867:
2623     @@ -4098,6 +4104,7 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
2624     break;
2625     case 0x10ec0225:
2626     case 0x10ec0295:
2627     + case 0x10ec0299:
2628     alc_process_coef_fw(codec, coef0225);
2629     break;
2630     }
2631     @@ -4183,6 +4190,7 @@ static void alc_determine_headset_type(struct hda_codec *codec)
2632     break;
2633     case 0x10ec0225:
2634     case 0x10ec0295:
2635     + case 0x10ec0299:
2636     alc_process_coef_fw(codec, coef0225);
2637     msleep(800);
2638     val = alc_read_coef_idx(codec, 0x46);
2639     @@ -6251,6 +6259,7 @@ static int patch_alc269(struct hda_codec *codec)
2640     break;
2641     case 0x10ec0225:
2642     case 0x10ec0295:
2643     + case 0x10ec0299:
2644     spec->codec_variant = ALC269_TYPE_ALC225;
2645     break;
2646     case 0x10ec0234:
2647     @@ -7249,6 +7258,7 @@ static const struct hda_device_id snd_hda_id_realtek[] = {
2648     HDA_CODEC_ENTRY(0x10ec0294, "ALC294", patch_alc269),
2649     HDA_CODEC_ENTRY(0x10ec0295, "ALC295", patch_alc269),
2650     HDA_CODEC_ENTRY(0x10ec0298, "ALC298", patch_alc269),
2651     + HDA_CODEC_ENTRY(0x10ec0299, "ALC299", patch_alc269),
2652     HDA_CODEC_REV_ENTRY(0x10ec0861, 0x100340, "ALC660", patch_alc861),
2653     HDA_CODEC_ENTRY(0x10ec0660, "ALC660-VD", patch_alc861vd),
2654     HDA_CODEC_ENTRY(0x10ec0861, "ALC861", patch_alc861),
2655     diff --git a/sound/pci/vx222/vx222_ops.c b/sound/pci/vx222/vx222_ops.c
2656     index af83b3b38052..8e457ea27f89 100644
2657     --- a/sound/pci/vx222/vx222_ops.c
2658     +++ b/sound/pci/vx222/vx222_ops.c
2659     @@ -269,12 +269,12 @@ static void vx2_dma_write(struct vx_core *chip, struct snd_pcm_runtime *runtime,
2660    
2661     /* Transfer using pseudo-dma.
2662     */
2663     - if (offset + count > pipe->buffer_bytes) {
2664     + if (offset + count >= pipe->buffer_bytes) {
2665     int length = pipe->buffer_bytes - offset;
2666     count -= length;
2667     length >>= 2; /* in 32bit words */
2668     /* Transfer using pseudo-dma. */
2669     - while (length-- > 0) {
2670     + for (; length > 0; length--) {
2671     outl(cpu_to_le32(*addr), port);
2672     addr++;
2673     }
2674     @@ -284,7 +284,7 @@ static void vx2_dma_write(struct vx_core *chip, struct snd_pcm_runtime *runtime,
2675     pipe->hw_ptr += count;
2676     count >>= 2; /* in 32bit words */
2677     /* Transfer using pseudo-dma. */
2678     - while (count-- > 0) {
2679     + for (; count > 0; count--) {
2680     outl(cpu_to_le32(*addr), port);
2681     addr++;
2682     }
2683     @@ -307,12 +307,12 @@ static void vx2_dma_read(struct vx_core *chip, struct snd_pcm_runtime *runtime,
2684     vx2_setup_pseudo_dma(chip, 0);
2685     /* Transfer using pseudo-dma.
2686     */
2687     - if (offset + count > pipe->buffer_bytes) {
2688     + if (offset + count >= pipe->buffer_bytes) {
2689     int length = pipe->buffer_bytes - offset;
2690     count -= length;
2691     length >>= 2; /* in 32bit words */
2692     /* Transfer using pseudo-dma. */
2693     - while (length-- > 0)
2694     + for (; length > 0; length--)
2695     *addr++ = le32_to_cpu(inl(port));
2696     addr = (u32 *)runtime->dma_area;
2697     pipe->hw_ptr = 0;
2698     @@ -320,7 +320,7 @@ static void vx2_dma_read(struct vx_core *chip, struct snd_pcm_runtime *runtime,
2699     pipe->hw_ptr += count;
2700     count >>= 2; /* in 32bit words */
2701     /* Transfer using pseudo-dma. */
2702     - while (count-- > 0)
2703     + for (; count > 0; count--)
2704     *addr++ = le32_to_cpu(inl(port));
2705    
2706     vx2_release_pseudo_dma(chip);
2707     diff --git a/sound/pcmcia/vx/vxp_ops.c b/sound/pcmcia/vx/vxp_ops.c
2708     index 281972913c32..56aa1ba73ccc 100644
2709     --- a/sound/pcmcia/vx/vxp_ops.c
2710     +++ b/sound/pcmcia/vx/vxp_ops.c
2711     @@ -369,12 +369,12 @@ static void vxp_dma_write(struct vx_core *chip, struct snd_pcm_runtime *runtime,
2712     unsigned short *addr = (unsigned short *)(runtime->dma_area + offset);
2713    
2714     vx_setup_pseudo_dma(chip, 1);
2715     - if (offset + count > pipe->buffer_bytes) {
2716     + if (offset + count >= pipe->buffer_bytes) {
2717     int length = pipe->buffer_bytes - offset;
2718     count -= length;
2719     length >>= 1; /* in 16bit words */
2720     /* Transfer using pseudo-dma. */
2721     - while (length-- > 0) {
2722     + for (; length > 0; length--) {
2723     outw(cpu_to_le16(*addr), port);
2724     addr++;
2725     }
2726     @@ -384,7 +384,7 @@ static void vxp_dma_write(struct vx_core *chip, struct snd_pcm_runtime *runtime,
2727     pipe->hw_ptr += count;
2728     count >>= 1; /* in 16bit words */
2729     /* Transfer using pseudo-dma. */
2730     - while (count-- > 0) {
2731     + for (; count > 0; count--) {
2732     outw(cpu_to_le16(*addr), port);
2733     addr++;
2734     }
2735     @@ -411,12 +411,12 @@ static void vxp_dma_read(struct vx_core *chip, struct snd_pcm_runtime *runtime,
2736     if (snd_BUG_ON(count % 2))
2737     return;
2738     vx_setup_pseudo_dma(chip, 0);
2739     - if (offset + count > pipe->buffer_bytes) {
2740     + if (offset + count >= pipe->buffer_bytes) {
2741     int length = pipe->buffer_bytes - offset;
2742     count -= length;
2743     length >>= 1; /* in 16bit words */
2744     /* Transfer using pseudo-dma. */
2745     - while (length-- > 0)
2746     + for (; length > 0; length--)
2747     *addr++ = le16_to_cpu(inw(port));
2748     addr = (unsigned short *)runtime->dma_area;
2749     pipe->hw_ptr = 0;
2750     @@ -424,7 +424,7 @@ static void vxp_dma_read(struct vx_core *chip, struct snd_pcm_runtime *runtime,
2751     pipe->hw_ptr += count;
2752     count >>= 1; /* in 16bit words */
2753     /* Transfer using pseudo-dma. */
2754     - while (count-- > 1)
2755     + for (; count > 1; count--)
2756     *addr++ = le16_to_cpu(inw(port));
2757     /* Disable DMA */
2758     pchip->regDIALOG &= ~VXP_DLG_DMAREAD_SEL_MASK;