Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3048 - (show 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 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;