Magellan Linux

Contents of /trunk/kernel-magellan/patches-3.17/0103-3.17.4-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2534 - (show annotations) (download)
Fri Jan 30 10:05:22 2015 UTC (9 years, 3 months ago) by niro
File size: 221247 byte(s)
-linux-3.17.4
1 diff --git a/Documentation/devicetree/bindings/ata/sata_rcar.txt b/Documentation/devicetree/bindings/ata/sata_rcar.txt
2 index 1e6111333fa8..7dd32d321a34 100644
3 --- a/Documentation/devicetree/bindings/ata/sata_rcar.txt
4 +++ b/Documentation/devicetree/bindings/ata/sata_rcar.txt
5 @@ -3,7 +3,8 @@
6 Required properties:
7 - compatible : should contain one of the following:
8 - "renesas,sata-r8a7779" for R-Car H1
9 - - "renesas,sata-r8a7790" for R-Car H2
10 + - "renesas,sata-r8a7790-es1" for R-Car H2 ES1
11 + - "renesas,sata-r8a7790" for R-Car H2 other than ES1
12 - "renesas,sata-r8a7791" for R-Car M2
13 - reg : address and length of the SATA registers;
14 - interrupts : must consist of one interrupt specifier.
15 diff --git a/Makefile b/Makefile
16 index 57a45b1ea2c7..b60b64d65416 100644
17 --- a/Makefile
18 +++ b/Makefile
19 @@ -1,6 +1,6 @@
20 VERSION = 3
21 PATCHLEVEL = 17
22 -SUBLEVEL = 3
23 +SUBLEVEL = 4
24 EXTRAVERSION =
25 NAME = Shuffling Zombie Juror
26
27 diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
28 index 413fd94b5301..68be9017593d 100644
29 --- a/arch/arm/boot/compressed/head.S
30 +++ b/arch/arm/boot/compressed/head.S
31 @@ -397,8 +397,7 @@ dtb_check_done:
32 add sp, sp, r6
33 #endif
34
35 - tst r4, #1
36 - bleq cache_clean_flush
37 + bl cache_clean_flush
38
39 adr r0, BSYM(restart)
40 add r0, r0, r6
41 @@ -1047,6 +1046,8 @@ cache_clean_flush:
42 b call_cache_fn
43
44 __armv4_mpu_cache_flush:
45 + tst r4, #1
46 + movne pc, lr
47 mov r2, #1
48 mov r3, #0
49 mcr p15, 0, ip, c7, c6, 0 @ invalidate D cache
50 @@ -1064,6 +1065,8 @@ __armv4_mpu_cache_flush:
51 mov pc, lr
52
53 __fa526_cache_flush:
54 + tst r4, #1
55 + movne pc, lr
56 mov r1, #0
57 mcr p15, 0, r1, c7, c14, 0 @ clean and invalidate D cache
58 mcr p15, 0, r1, c7, c5, 0 @ flush I cache
59 @@ -1072,13 +1075,16 @@ __fa526_cache_flush:
60
61 __armv6_mmu_cache_flush:
62 mov r1, #0
63 - mcr p15, 0, r1, c7, c14, 0 @ clean+invalidate D
64 + tst r4, #1
65 + mcreq p15, 0, r1, c7, c14, 0 @ clean+invalidate D
66 mcr p15, 0, r1, c7, c5, 0 @ invalidate I+BTB
67 - mcr p15, 0, r1, c7, c15, 0 @ clean+invalidate unified
68 + mcreq p15, 0, r1, c7, c15, 0 @ clean+invalidate unified
69 mcr p15, 0, r1, c7, c10, 4 @ drain WB
70 mov pc, lr
71
72 __armv7_mmu_cache_flush:
73 + tst r4, #1
74 + bne iflush
75 mrc p15, 0, r10, c0, c1, 5 @ read ID_MMFR1
76 tst r10, #0xf << 16 @ hierarchical cache (ARMv7)
77 mov r10, #0
78 @@ -1139,6 +1145,8 @@ iflush:
79 mov pc, lr
80
81 __armv5tej_mmu_cache_flush:
82 + tst r4, #1
83 + movne pc, lr
84 1: mrc p15, 0, r15, c7, c14, 3 @ test,clean,invalidate D cache
85 bne 1b
86 mcr p15, 0, r0, c7, c5, 0 @ flush I cache
87 @@ -1146,6 +1154,8 @@ __armv5tej_mmu_cache_flush:
88 mov pc, lr
89
90 __armv4_mmu_cache_flush:
91 + tst r4, #1
92 + movne pc, lr
93 mov r2, #64*1024 @ default: 32K dcache size (*2)
94 mov r11, #32 @ default: 32 byte line size
95 mrc p15, 0, r3, c0, c0, 1 @ read cache type
96 @@ -1179,6 +1189,8 @@ no_cache_id:
97
98 __armv3_mmu_cache_flush:
99 __armv3_mpu_cache_flush:
100 + tst r4, #1
101 + movne pc, lr
102 mov r1, #0
103 mcr p15, 0, r1, c7, c0, 0 @ invalidate whole cache v3
104 mov pc, lr
105 diff --git a/arch/arm/boot/dts/am335x-evm.dts b/arch/arm/boot/dts/am335x-evm.dts
106 index e2156a583de7..c4b968f0feb5 100644
107 --- a/arch/arm/boot/dts/am335x-evm.dts
108 +++ b/arch/arm/boot/dts/am335x-evm.dts
109 @@ -489,7 +489,7 @@
110 reg = <0x00060000 0x00020000>;
111 };
112 partition@4 {
113 - label = "NAND.u-boot-spl";
114 + label = "NAND.u-boot-spl-os";
115 reg = <0x00080000 0x00040000>;
116 };
117 partition@5 {
118 diff --git a/arch/arm/mach-mvebu/board-v7.c b/arch/arm/mach-mvebu/board-v7.c
119 index 6478626e3ff6..d0d39f150fab 100644
120 --- a/arch/arm/mach-mvebu/board-v7.c
121 +++ b/arch/arm/mach-mvebu/board-v7.c
122 @@ -188,7 +188,7 @@ static void __init thermal_quirk(void)
123
124 static void __init mvebu_dt_init(void)
125 {
126 - if (of_machine_is_compatible("plathome,openblocks-ax3-4"))
127 + if (of_machine_is_compatible("marvell,armadaxp"))
128 i2c_quirk();
129 if (of_machine_is_compatible("marvell,a375-db")) {
130 external_abort_quirk();
131 diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
132 index ae69809a9e47..7eb94e6fc376 100644
133 --- a/arch/arm/mm/Kconfig
134 +++ b/arch/arm/mm/Kconfig
135 @@ -798,6 +798,7 @@ config NEED_KUSER_HELPERS
136
137 config KUSER_HELPERS
138 bool "Enable kuser helpers in vector page" if !NEED_KUSER_HELPERS
139 + depends on MMU
140 default y
141 help
142 Warning: disabling this option may break user programs.
143 diff --git a/arch/arm64/kernel/efi-entry.S b/arch/arm64/kernel/efi-entry.S
144 index 619b1dd7bcde..d18a44940968 100644
145 --- a/arch/arm64/kernel/efi-entry.S
146 +++ b/arch/arm64/kernel/efi-entry.S
147 @@ -54,18 +54,17 @@ ENTRY(efi_stub_entry)
148 b.eq efi_load_fail
149
150 /*
151 - * efi_entry() will have relocated the kernel image if necessary
152 - * and we return here with device tree address in x0 and the kernel
153 - * entry point stored at *image_addr. Save those values in registers
154 - * which are callee preserved.
155 + * efi_entry() will have copied the kernel image if necessary and we
156 + * return here with device tree address in x0 and the kernel entry
157 + * point stored at *image_addr. Save those values in registers which
158 + * are callee preserved.
159 */
160 mov x20, x0 // DTB address
161 ldr x0, [sp, #16] // relocated _text address
162 mov x21, x0
163
164 /*
165 - * Flush dcache covering current runtime addresses
166 - * of kernel text/data. Then flush all of icache.
167 + * Calculate size of the kernel Image (same for original and copy).
168 */
169 adrp x1, _text
170 add x1, x1, #:lo12:_text
171 @@ -73,9 +72,24 @@ ENTRY(efi_stub_entry)
172 add x2, x2, #:lo12:_edata
173 sub x1, x2, x1
174
175 + /*
176 + * Flush the copied Image to the PoC, and ensure it is not shadowed by
177 + * stale icache entries from before relocation.
178 + */
179 bl __flush_dcache_area
180 ic ialluis
181
182 + /*
183 + * Ensure that the rest of this function (in the original Image) is
184 + * visible when the caches are disabled. The I-cache can't have stale
185 + * entries for the VA range of the current image, so no maintenance is
186 + * necessary.
187 + */
188 + adr x0, efi_stub_entry
189 + adr x1, efi_stub_entry_end
190 + sub x1, x1, x0
191 + bl __flush_dcache_area
192 +
193 /* Turn off Dcache and MMU */
194 mrs x0, CurrentEL
195 cmp x0, #CurrentEL_EL2
196 @@ -105,4 +119,5 @@ efi_load_fail:
197 ldp x29, x30, [sp], #32
198 ret
199
200 +efi_stub_entry_end:
201 ENDPROC(efi_stub_entry)
202 diff --git a/arch/arm64/kernel/insn.c b/arch/arm64/kernel/insn.c
203 index 92f36835486b..565e26f23f31 100644
204 --- a/arch/arm64/kernel/insn.c
205 +++ b/arch/arm64/kernel/insn.c
206 @@ -156,9 +156,10 @@ static int __kprobes aarch64_insn_patch_text_cb(void *arg)
207 * which ends with "dsb; isb" pair guaranteeing global
208 * visibility.
209 */
210 - atomic_set(&pp->cpu_count, -1);
211 + /* Notify other processors with an additional increment. */
212 + atomic_inc(&pp->cpu_count);
213 } else {
214 - while (atomic_read(&pp->cpu_count) != -1)
215 + while (atomic_read(&pp->cpu_count) <= num_online_cpus())
216 cpu_relax();
217 isb();
218 }
219 diff --git a/arch/arm64/lib/clear_user.S b/arch/arm64/lib/clear_user.S
220 index 6e0ed93d51fe..c17967fdf5f6 100644
221 --- a/arch/arm64/lib/clear_user.S
222 +++ b/arch/arm64/lib/clear_user.S
223 @@ -46,7 +46,7 @@ USER(9f, strh wzr, [x0], #2 )
224 sub x1, x1, #2
225 4: adds x1, x1, #1
226 b.mi 5f
227 - strb wzr, [x0]
228 +USER(9f, strb wzr, [x0] )
229 5: mov x0, #0
230 ret
231 ENDPROC(__clear_user)
232 diff --git a/arch/parisc/include/uapi/asm/shmbuf.h b/arch/parisc/include/uapi/asm/shmbuf.h
233 index 0a3eada1863b..f395cde7b593 100644
234 --- a/arch/parisc/include/uapi/asm/shmbuf.h
235 +++ b/arch/parisc/include/uapi/asm/shmbuf.h
236 @@ -36,23 +36,16 @@ struct shmid64_ds {
237 unsigned int __unused2;
238 };
239
240 -#ifdef CONFIG_64BIT
241 -/* The 'unsigned int' (formerly 'unsigned long') data types below will
242 - * ensure that a 32-bit app calling shmctl(*,IPC_INFO,*) will work on
243 - * a wide kernel, but if some of these values are meant to contain pointers
244 - * they may need to be 'long long' instead. -PB XXX FIXME
245 - */
246 -#endif
247 struct shminfo64 {
248 - unsigned int shmmax;
249 - unsigned int shmmin;
250 - unsigned int shmmni;
251 - unsigned int shmseg;
252 - unsigned int shmall;
253 - unsigned int __unused1;
254 - unsigned int __unused2;
255 - unsigned int __unused3;
256 - unsigned int __unused4;
257 + unsigned long shmmax;
258 + unsigned long shmmin;
259 + unsigned long shmmni;
260 + unsigned long shmseg;
261 + unsigned long shmall;
262 + unsigned long __unused1;
263 + unsigned long __unused2;
264 + unsigned long __unused3;
265 + unsigned long __unused4;
266 };
267
268 #endif /* _PARISC_SHMBUF_H */
269 diff --git a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S
270 index b563d9c8268b..d183a440b1b0 100644
271 --- a/arch/parisc/kernel/syscall_table.S
272 +++ b/arch/parisc/kernel/syscall_table.S
273 @@ -286,11 +286,11 @@
274 ENTRY_COMP(msgsnd)
275 ENTRY_COMP(msgrcv)
276 ENTRY_SAME(msgget) /* 190 */
277 - ENTRY_SAME(msgctl)
278 - ENTRY_SAME(shmat)
279 + ENTRY_COMP(msgctl)
280 + ENTRY_COMP(shmat)
281 ENTRY_SAME(shmdt)
282 ENTRY_SAME(shmget)
283 - ENTRY_SAME(shmctl) /* 195 */
284 + ENTRY_COMP(shmctl) /* 195 */
285 ENTRY_SAME(ni_syscall) /* streams1 */
286 ENTRY_SAME(ni_syscall) /* streams2 */
287 ENTRY_SAME(lstat64)
288 @@ -323,7 +323,7 @@
289 ENTRY_SAME(epoll_ctl) /* 225 */
290 ENTRY_SAME(epoll_wait)
291 ENTRY_SAME(remap_file_pages)
292 - ENTRY_SAME(semtimedop)
293 + ENTRY_COMP(semtimedop)
294 ENTRY_COMP(mq_open)
295 ENTRY_SAME(mq_unlink) /* 230 */
296 ENTRY_COMP(mq_timedsend)
297 diff --git a/arch/sparc/include/asm/atomic_32.h b/arch/sparc/include/asm/atomic_32.h
298 index 7aed2be45b44..2701fb68a24f 100644
299 --- a/arch/sparc/include/asm/atomic_32.h
300 +++ b/arch/sparc/include/asm/atomic_32.h
301 @@ -22,7 +22,7 @@
302
303 int __atomic_add_return(int, atomic_t *);
304 int atomic_cmpxchg(atomic_t *, int, int);
305 -#define atomic_xchg(v, new) (xchg(&((v)->counter), new))
306 +int atomic_xchg(atomic_t *, int);
307 int __atomic_add_unless(atomic_t *, int, int);
308 void atomic_set(atomic_t *, int);
309
310 diff --git a/arch/sparc/include/asm/cmpxchg_32.h b/arch/sparc/include/asm/cmpxchg_32.h
311 index 32c29a133f9d..d38b52dca216 100644
312 --- a/arch/sparc/include/asm/cmpxchg_32.h
313 +++ b/arch/sparc/include/asm/cmpxchg_32.h
314 @@ -11,22 +11,14 @@
315 #ifndef __ARCH_SPARC_CMPXCHG__
316 #define __ARCH_SPARC_CMPXCHG__
317
318 -static inline unsigned long xchg_u32(__volatile__ unsigned long *m, unsigned long val)
319 -{
320 - __asm__ __volatile__("swap [%2], %0"
321 - : "=&r" (val)
322 - : "0" (val), "r" (m)
323 - : "memory");
324 - return val;
325 -}
326 -
327 +unsigned long __xchg_u32(volatile u32 *m, u32 new);
328 void __xchg_called_with_bad_pointer(void);
329
330 static inline unsigned long __xchg(unsigned long x, __volatile__ void * ptr, int size)
331 {
332 switch (size) {
333 case 4:
334 - return xchg_u32(ptr, x);
335 + return __xchg_u32(ptr, x);
336 }
337 __xchg_called_with_bad_pointer();
338 return x;
339 diff --git a/arch/sparc/include/asm/vio.h b/arch/sparc/include/asm/vio.h
340 index e0f6c399f1d0..2986120acac5 100644
341 --- a/arch/sparc/include/asm/vio.h
342 +++ b/arch/sparc/include/asm/vio.h
343 @@ -118,12 +118,18 @@ struct vio_disk_attr_info {
344 u8 vdisk_type;
345 #define VD_DISK_TYPE_SLICE 0x01 /* Slice in block device */
346 #define VD_DISK_TYPE_DISK 0x02 /* Entire block device */
347 - u16 resv1;
348 + u8 vdisk_mtype; /* v1.1 */
349 +#define VD_MEDIA_TYPE_FIXED 0x01 /* Fixed device */
350 +#define VD_MEDIA_TYPE_CD 0x02 /* CD Device */
351 +#define VD_MEDIA_TYPE_DVD 0x03 /* DVD Device */
352 + u8 resv1;
353 u32 vdisk_block_size;
354 u64 operations;
355 - u64 vdisk_size;
356 + u64 vdisk_size; /* v1.1 */
357 u64 max_xfer_size;
358 - u64 resv2[2];
359 + u32 phys_block_size; /* v1.2 */
360 + u32 resv2;
361 + u64 resv3[1];
362 };
363
364 struct vio_disk_desc {
365 @@ -259,7 +265,7 @@ static inline u32 vio_dring_avail(struct vio_dring_state *dr,
366 unsigned int ring_size)
367 {
368 return (dr->pending -
369 - ((dr->prod - dr->cons) & (ring_size - 1)));
370 + ((dr->prod - dr->cons) & (ring_size - 1)) - 1);
371 }
372
373 #define VIO_MAX_TYPE_LEN 32
374 diff --git a/arch/sparc/kernel/pci_schizo.c b/arch/sparc/kernel/pci_schizo.c
375 index 8f76f23dac38..f9c6813c132d 100644
376 --- a/arch/sparc/kernel/pci_schizo.c
377 +++ b/arch/sparc/kernel/pci_schizo.c
378 @@ -581,7 +581,7 @@ static irqreturn_t schizo_pcierr_intr_other(struct pci_pbm_info *pbm)
379 {
380 unsigned long csr_reg, csr, csr_error_bits;
381 irqreturn_t ret = IRQ_NONE;
382 - u16 stat;
383 + u32 stat;
384
385 csr_reg = pbm->pbm_regs + SCHIZO_PCI_CTRL;
386 csr = upa_readq(csr_reg);
387 @@ -617,7 +617,7 @@ static irqreturn_t schizo_pcierr_intr_other(struct pci_pbm_info *pbm)
388 pbm->name);
389 ret = IRQ_HANDLED;
390 }
391 - pci_read_config_word(pbm->pci_bus->self, PCI_STATUS, &stat);
392 + pbm->pci_ops->read(pbm->pci_bus, 0, PCI_STATUS, 2, &stat);
393 if (stat & (PCI_STATUS_PARITY |
394 PCI_STATUS_SIG_TARGET_ABORT |
395 PCI_STATUS_REC_TARGET_ABORT |
396 @@ -625,7 +625,7 @@ static irqreturn_t schizo_pcierr_intr_other(struct pci_pbm_info *pbm)
397 PCI_STATUS_SIG_SYSTEM_ERROR)) {
398 printk("%s: PCI bus error, PCI_STATUS[%04x]\n",
399 pbm->name, stat);
400 - pci_write_config_word(pbm->pci_bus->self, PCI_STATUS, 0xffff);
401 + pbm->pci_ops->write(pbm->pci_bus, 0, PCI_STATUS, 2, 0xffff);
402 ret = IRQ_HANDLED;
403 }
404 return ret;
405 diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c
406 index c9300bfaee5a..81954ee7c47c 100644
407 --- a/arch/sparc/kernel/smp_64.c
408 +++ b/arch/sparc/kernel/smp_64.c
409 @@ -816,13 +816,17 @@ void arch_send_call_function_single_ipi(int cpu)
410 void __irq_entry smp_call_function_client(int irq, struct pt_regs *regs)
411 {
412 clear_softint(1 << irq);
413 + irq_enter();
414 generic_smp_call_function_interrupt();
415 + irq_exit();
416 }
417
418 void __irq_entry smp_call_function_single_client(int irq, struct pt_regs *regs)
419 {
420 clear_softint(1 << irq);
421 + irq_enter();
422 generic_smp_call_function_single_interrupt();
423 + irq_exit();
424 }
425
426 static void tsb_sync(void *info)
427 diff --git a/arch/sparc/lib/atomic32.c b/arch/sparc/lib/atomic32.c
428 index 1d32b54089aa..8f2f94d53434 100644
429 --- a/arch/sparc/lib/atomic32.c
430 +++ b/arch/sparc/lib/atomic32.c
431 @@ -40,6 +40,19 @@ int __atomic_add_return(int i, atomic_t *v)
432 }
433 EXPORT_SYMBOL(__atomic_add_return);
434
435 +int atomic_xchg(atomic_t *v, int new)
436 +{
437 + int ret;
438 + unsigned long flags;
439 +
440 + spin_lock_irqsave(ATOMIC_HASH(v), flags);
441 + ret = v->counter;
442 + v->counter = new;
443 + spin_unlock_irqrestore(ATOMIC_HASH(v), flags);
444 + return ret;
445 +}
446 +EXPORT_SYMBOL(atomic_xchg);
447 +
448 int atomic_cmpxchg(atomic_t *v, int old, int new)
449 {
450 int ret;
451 @@ -132,3 +145,17 @@ unsigned long __cmpxchg_u32(volatile u32 *ptr, u32 old, u32 new)
452 return (unsigned long)prev;
453 }
454 EXPORT_SYMBOL(__cmpxchg_u32);
455 +
456 +unsigned long __xchg_u32(volatile u32 *ptr, u32 new)
457 +{
458 + unsigned long flags;
459 + u32 prev;
460 +
461 + spin_lock_irqsave(ATOMIC_HASH(ptr), flags);
462 + prev = *ptr;
463 + *ptr = new;
464 + spin_unlock_irqrestore(ATOMIC_HASH(ptr), flags);
465 +
466 + return (unsigned long)prev;
467 +}
468 +EXPORT_SYMBOL(__xchg_u32);
469 diff --git a/arch/x86/.gitignore b/arch/x86/.gitignore
470 index 7cab8c08e6d1..aff152c87cf4 100644
471 --- a/arch/x86/.gitignore
472 +++ b/arch/x86/.gitignore
473 @@ -1,4 +1,6 @@
474 boot/compressed/vmlinux
475 tools/test_get_len
476 tools/insn_sanity
477 +purgatory/kexec-purgatory.c
478 +purgatory/purgatory.ro
479
480 diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
481 index 0fcd9133790c..14fe7cba21d1 100644
482 --- a/arch/x86/boot/compressed/Makefile
483 +++ b/arch/x86/boot/compressed/Makefile
484 @@ -75,8 +75,10 @@ suffix-$(CONFIG_KERNEL_XZ) := xz
485 suffix-$(CONFIG_KERNEL_LZO) := lzo
486 suffix-$(CONFIG_KERNEL_LZ4) := lz4
487
488 +RUN_SIZE = $(shell objdump -h vmlinux | \
489 + perl $(srctree)/arch/x86/tools/calc_run_size.pl)
490 quiet_cmd_mkpiggy = MKPIGGY $@
491 - cmd_mkpiggy = $(obj)/mkpiggy $< > $@ || ( rm -f $@ ; false )
492 + cmd_mkpiggy = $(obj)/mkpiggy $< $(RUN_SIZE) > $@ || ( rm -f $@ ; false )
493
494 targets += piggy.S
495 $(obj)/piggy.S: $(obj)/vmlinux.bin.$(suffix-y) $(obj)/mkpiggy FORCE
496 diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S
497 index cbed1407a5cd..1d7fbbcc196d 100644
498 --- a/arch/x86/boot/compressed/head_32.S
499 +++ b/arch/x86/boot/compressed/head_32.S
500 @@ -207,7 +207,8 @@ relocated:
501 * Do the decompression, and jump to the new kernel..
502 */
503 /* push arguments for decompress_kernel: */
504 - pushl $z_output_len /* decompressed length */
505 + pushl $z_run_size /* size of kernel with .bss and .brk */
506 + pushl $z_output_len /* decompressed length, end of relocs */
507 leal z_extract_offset_negative(%ebx), %ebp
508 pushl %ebp /* output address */
509 pushl $z_input_len /* input_len */
510 @@ -217,7 +218,7 @@ relocated:
511 pushl %eax /* heap area */
512 pushl %esi /* real mode pointer */
513 call decompress_kernel /* returns kernel location in %eax */
514 - addl $24, %esp
515 + addl $28, %esp
516
517 /*
518 * Jump to the decompressed kernel.
519 diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S
520 index 2884e0c3e8a5..6b1766c6c082 100644
521 --- a/arch/x86/boot/compressed/head_64.S
522 +++ b/arch/x86/boot/compressed/head_64.S
523 @@ -402,13 +402,16 @@ relocated:
524 * Do the decompression, and jump to the new kernel..
525 */
526 pushq %rsi /* Save the real mode argument */
527 + movq $z_run_size, %r9 /* size of kernel with .bss and .brk */
528 + pushq %r9
529 movq %rsi, %rdi /* real mode address */
530 leaq boot_heap(%rip), %rsi /* malloc area for uncompression */
531 leaq input_data(%rip), %rdx /* input_data */
532 movl $z_input_len, %ecx /* input_len */
533 movq %rbp, %r8 /* output target address */
534 - movq $z_output_len, %r9 /* decompressed length */
535 + movq $z_output_len, %r9 /* decompressed length, end of relocs */
536 call decompress_kernel /* returns kernel location in %rax */
537 + popq %r9
538 popq %rsi
539
540 /*
541 diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
542 index 57ab74df7eea..30dd59a9f0b4 100644
543 --- a/arch/x86/boot/compressed/misc.c
544 +++ b/arch/x86/boot/compressed/misc.c
545 @@ -358,7 +358,8 @@ asmlinkage __visible void *decompress_kernel(void *rmode, memptr heap,
546 unsigned char *input_data,
547 unsigned long input_len,
548 unsigned char *output,
549 - unsigned long output_len)
550 + unsigned long output_len,
551 + unsigned long run_size)
552 {
553 real_mode = rmode;
554
555 @@ -381,8 +382,14 @@ asmlinkage __visible void *decompress_kernel(void *rmode, memptr heap,
556 free_mem_ptr = heap; /* Heap */
557 free_mem_end_ptr = heap + BOOT_HEAP_SIZE;
558
559 - output = choose_kernel_location(input_data, input_len,
560 - output, output_len);
561 + /*
562 + * The memory hole needed for the kernel is the larger of either
563 + * the entire decompressed kernel plus relocation table, or the
564 + * entire decompressed kernel plus .bss and .brk sections.
565 + */
566 + output = choose_kernel_location(input_data, input_len, output,
567 + output_len > run_size ? output_len
568 + : run_size);
569
570 /* Validate memory location choices. */
571 if ((unsigned long)output & (MIN_KERNEL_ALIGN - 1))
572 diff --git a/arch/x86/boot/compressed/mkpiggy.c b/arch/x86/boot/compressed/mkpiggy.c
573 index b669ab65bf6c..d8222f213182 100644
574 --- a/arch/x86/boot/compressed/mkpiggy.c
575 +++ b/arch/x86/boot/compressed/mkpiggy.c
576 @@ -36,11 +36,13 @@ int main(int argc, char *argv[])
577 uint32_t olen;
578 long ilen;
579 unsigned long offs;
580 + unsigned long run_size;
581 FILE *f = NULL;
582 int retval = 1;
583
584 - if (argc < 2) {
585 - fprintf(stderr, "Usage: %s compressed_file\n", argv[0]);
586 + if (argc < 3) {
587 + fprintf(stderr, "Usage: %s compressed_file run_size\n",
588 + argv[0]);
589 goto bail;
590 }
591
592 @@ -74,6 +76,7 @@ int main(int argc, char *argv[])
593 offs += olen >> 12; /* Add 8 bytes for each 32K block */
594 offs += 64*1024 + 128; /* Add 64K + 128 bytes slack */
595 offs = (offs+4095) & ~4095; /* Round to a 4K boundary */
596 + run_size = atoi(argv[2]);
597
598 printf(".section \".rodata..compressed\",\"a\",@progbits\n");
599 printf(".globl z_input_len\n");
600 @@ -85,6 +88,8 @@ int main(int argc, char *argv[])
601 /* z_extract_offset_negative allows simplification of head_32.S */
602 printf(".globl z_extract_offset_negative\n");
603 printf("z_extract_offset_negative = -0x%lx\n", offs);
604 + printf(".globl z_run_size\n");
605 + printf("z_run_size = %lu\n", run_size);
606
607 printf(".globl input_data, input_data_end\n");
608 printf("input_data:\n");
609 diff --git a/arch/x86/kernel/cpu/microcode/amd_early.c b/arch/x86/kernel/cpu/microcode/amd_early.c
610 index 617a9e284245..b63773ba1646 100644
611 --- a/arch/x86/kernel/cpu/microcode/amd_early.c
612 +++ b/arch/x86/kernel/cpu/microcode/amd_early.c
613 @@ -108,12 +108,13 @@ static size_t compute_container_size(u8 *data, u32 total_size)
614 * load_microcode_amd() to save equivalent cpu table and microcode patches in
615 * kernel heap memory.
616 */
617 -static void apply_ucode_in_initrd(void *ucode, size_t size)
618 +static void apply_ucode_in_initrd(void *ucode, size_t size, bool save_patch)
619 {
620 struct equiv_cpu_entry *eq;
621 size_t *cont_sz;
622 u32 *header;
623 u8 *data, **cont;
624 + u8 (*patch)[PATCH_MAX_SIZE];
625 u16 eq_id = 0;
626 int offset, left;
627 u32 rev, eax, ebx, ecx, edx;
628 @@ -123,10 +124,12 @@ static void apply_ucode_in_initrd(void *ucode, size_t size)
629 new_rev = (u32 *)__pa_nodebug(&ucode_new_rev);
630 cont_sz = (size_t *)__pa_nodebug(&container_size);
631 cont = (u8 **)__pa_nodebug(&container);
632 + patch = (u8 (*)[PATCH_MAX_SIZE])__pa_nodebug(&amd_ucode_patch);
633 #else
634 new_rev = &ucode_new_rev;
635 cont_sz = &container_size;
636 cont = &container;
637 + patch = &amd_ucode_patch;
638 #endif
639
640 data = ucode;
641 @@ -213,9 +216,9 @@ static void apply_ucode_in_initrd(void *ucode, size_t size)
642 rev = mc->hdr.patch_id;
643 *new_rev = rev;
644
645 - /* save ucode patch */
646 - memcpy(amd_ucode_patch, mc,
647 - min_t(u32, header[1], PATCH_MAX_SIZE));
648 + if (save_patch)
649 + memcpy(patch, mc,
650 + min_t(u32, header[1], PATCH_MAX_SIZE));
651 }
652 }
653
654 @@ -246,7 +249,7 @@ void __init load_ucode_amd_bsp(void)
655 *data = cp.data;
656 *size = cp.size;
657
658 - apply_ucode_in_initrd(cp.data, cp.size);
659 + apply_ucode_in_initrd(cp.data, cp.size, true);
660 }
661
662 #ifdef CONFIG_X86_32
663 @@ -263,7 +266,7 @@ void load_ucode_amd_ap(void)
664 size_t *usize;
665 void **ucode;
666
667 - mc = (struct microcode_amd *)__pa(amd_ucode_patch);
668 + mc = (struct microcode_amd *)__pa_nodebug(amd_ucode_patch);
669 if (mc->hdr.patch_id && mc->hdr.processor_rev_id) {
670 __apply_microcode_amd(mc);
671 return;
672 @@ -275,7 +278,7 @@ void load_ucode_amd_ap(void)
673 if (!*ucode || !*usize)
674 return;
675
676 - apply_ucode_in_initrd(*ucode, *usize);
677 + apply_ucode_in_initrd(*ucode, *usize, false);
678 }
679
680 static void __init collect_cpu_sig_on_bsp(void *arg)
681 @@ -339,7 +342,7 @@ void load_ucode_amd_ap(void)
682 * AP has a different equivalence ID than BSP, looks like
683 * mixed-steppings silicon so go through the ucode blob anew.
684 */
685 - apply_ucode_in_initrd(ucode_cpio.data, ucode_cpio.size);
686 + apply_ucode_in_initrd(ucode_cpio.data, ucode_cpio.size, false);
687 }
688 }
689 #endif
690 @@ -347,7 +350,9 @@ void load_ucode_amd_ap(void)
691 int __init save_microcode_in_initrd_amd(void)
692 {
693 unsigned long cont;
694 + int retval = 0;
695 enum ucode_state ret;
696 + u8 *cont_va;
697 u32 eax;
698
699 if (!container)
700 @@ -355,13 +360,15 @@ int __init save_microcode_in_initrd_amd(void)
701
702 #ifdef CONFIG_X86_32
703 get_bsp_sig();
704 - cont = (unsigned long)container;
705 + cont = (unsigned long)container;
706 + cont_va = __va(container);
707 #else
708 /*
709 * We need the physical address of the container for both bitness since
710 * boot_params.hdr.ramdisk_image is a physical address.
711 */
712 - cont = __pa(container);
713 + cont = __pa(container);
714 + cont_va = container;
715 #endif
716
717 /*
718 @@ -372,6 +379,8 @@ int __init save_microcode_in_initrd_amd(void)
719 if (relocated_ramdisk)
720 container = (u8 *)(__va(relocated_ramdisk) +
721 (cont - boot_params.hdr.ramdisk_image));
722 + else
723 + container = cont_va;
724
725 if (ucode_new_rev)
726 pr_info("microcode: updated early to new patch_level=0x%08x\n",
727 @@ -382,7 +391,7 @@ int __init save_microcode_in_initrd_amd(void)
728
729 ret = load_microcode_amd(eax, container, container_size);
730 if (ret != UCODE_OK)
731 - return -EINVAL;
732 + retval = -EINVAL;
733
734 /*
735 * This will be freed any msec now, stash patches for the current
736 @@ -391,5 +400,5 @@ int __init save_microcode_in_initrd_amd(void)
737 container = NULL;
738 container_size = 0;
739
740 - return 0;
741 + return retval;
742 }
743 diff --git a/arch/x86/kernel/cpu/microcode/core_early.c b/arch/x86/kernel/cpu/microcode/core_early.c
744 index 5f28a64e71ea..2c017f242a78 100644
745 --- a/arch/x86/kernel/cpu/microcode/core_early.c
746 +++ b/arch/x86/kernel/cpu/microcode/core_early.c
747 @@ -124,7 +124,7 @@ void __init load_ucode_bsp(void)
748 static bool check_loader_disabled_ap(void)
749 {
750 #ifdef CONFIG_X86_32
751 - return __pa_nodebug(dis_ucode_ldr);
752 + return *((bool *)__pa_nodebug(&dis_ucode_ldr));
753 #else
754 return dis_ucode_ldr;
755 #endif
756 diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
757 index 678c0ada3b3c..b1a5dfa24789 100644
758 --- a/arch/x86/kernel/ptrace.c
759 +++ b/arch/x86/kernel/ptrace.c
760 @@ -1441,15 +1441,6 @@ void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
761 force_sig_info(SIGTRAP, &info, tsk);
762 }
763
764 -
765 -#ifdef CONFIG_X86_32
766 -# define IS_IA32 1
767 -#elif defined CONFIG_IA32_EMULATION
768 -# define IS_IA32 is_compat_task()
769 -#else
770 -# define IS_IA32 0
771 -#endif
772 -
773 /*
774 * We must return the syscall number to actually look up in the table.
775 * This can be -1L to skip running any syscall at all.
776 @@ -1487,7 +1478,7 @@ long syscall_trace_enter(struct pt_regs *regs)
777 if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
778 trace_sys_enter(regs, regs->orig_ax);
779
780 - if (IS_IA32)
781 + if (is_ia32_task())
782 audit_syscall_entry(AUDIT_ARCH_I386,
783 regs->orig_ax,
784 regs->bx, regs->cx,
785 diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
786 index 77c77fe84f13..9254069f0d08 100644
787 --- a/arch/x86/kvm/emulate.c
788 +++ b/arch/x86/kvm/emulate.c
789 @@ -4272,6 +4272,7 @@ static int decode_operand(struct x86_emulate_ctxt *ctxt, struct operand *op,
790 fetch_register_operand(op);
791 break;
792 case OpCL:
793 + op->type = OP_IMM;
794 op->bytes = 1;
795 op->val = reg_read(ctxt, VCPU_REGS_RCX) & 0xff;
796 break;
797 @@ -4279,6 +4280,7 @@ static int decode_operand(struct x86_emulate_ctxt *ctxt, struct operand *op,
798 rc = decode_imm(ctxt, op, 1, true);
799 break;
800 case OpOne:
801 + op->type = OP_IMM;
802 op->bytes = 1;
803 op->val = 1;
804 break;
805 @@ -4337,21 +4339,27 @@ static int decode_operand(struct x86_emulate_ctxt *ctxt, struct operand *op,
806 ctxt->memop.bytes = ctxt->op_bytes + 2;
807 goto mem_common;
808 case OpES:
809 + op->type = OP_IMM;
810 op->val = VCPU_SREG_ES;
811 break;
812 case OpCS:
813 + op->type = OP_IMM;
814 op->val = VCPU_SREG_CS;
815 break;
816 case OpSS:
817 + op->type = OP_IMM;
818 op->val = VCPU_SREG_SS;
819 break;
820 case OpDS:
821 + op->type = OP_IMM;
822 op->val = VCPU_SREG_DS;
823 break;
824 case OpFS:
825 + op->type = OP_IMM;
826 op->val = VCPU_SREG_FS;
827 break;
828 case OpGS:
829 + op->type = OP_IMM;
830 op->val = VCPU_SREG_GS;
831 break;
832 case OpImplicit:
833 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
834 index 9d292e8372d6..d6aeccf116fa 100644
835 --- a/arch/x86/kvm/x86.c
836 +++ b/arch/x86/kvm/x86.c
837 @@ -5002,7 +5002,7 @@ static int handle_emulation_failure(struct kvm_vcpu *vcpu)
838
839 ++vcpu->stat.insn_emulation_fail;
840 trace_kvm_emulate_insn_failed(vcpu);
841 - if (!is_guest_mode(vcpu)) {
842 + if (!is_guest_mode(vcpu) && kvm_x86_ops->get_cpl(vcpu) == 0) {
843 vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
844 vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_EMULATION;
845 vcpu->run->internal.ndata = 0;
846 diff --git a/arch/x86/tools/calc_run_size.pl b/arch/x86/tools/calc_run_size.pl
847 new file mode 100644
848 index 000000000000..0b0b124d3ece
849 --- /dev/null
850 +++ b/arch/x86/tools/calc_run_size.pl
851 @@ -0,0 +1,30 @@
852 +#!/usr/bin/perl
853 +#
854 +# Calculate the amount of space needed to run the kernel, including room for
855 +# the .bss and .brk sections.
856 +#
857 +# Usage:
858 +# objdump -h a.out | perl calc_run_size.pl
859 +use strict;
860 +
861 +my $mem_size = 0;
862 +my $file_offset = 0;
863 +
864 +my $sections=" *[0-9]+ \.(?:bss|brk) +";
865 +while (<>) {
866 + if (/^$sections([0-9a-f]+) +(?:[0-9a-f]+ +){2}([0-9a-f]+)/) {
867 + my $size = hex($1);
868 + my $offset = hex($2);
869 + $mem_size += $size;
870 + if ($file_offset == 0) {
871 + $file_offset = $offset;
872 + } elsif ($file_offset != $offset) {
873 + die ".bss and .brk lack common file offset\n";
874 + }
875 + }
876 +}
877 +
878 +if ($file_offset == 0) {
879 + die "Never found .bss or .brk file offset\n";
880 +}
881 +printf("%d\n", $mem_size + $file_offset);
882 diff --git a/arch/xtensa/include/uapi/asm/unistd.h b/arch/xtensa/include/uapi/asm/unistd.h
883 index 8883fc877c5c..b1744a3474a6 100644
884 --- a/arch/xtensa/include/uapi/asm/unistd.h
885 +++ b/arch/xtensa/include/uapi/asm/unistd.h
886 @@ -384,7 +384,8 @@ __SYSCALL(174, sys_chroot, 1)
887 #define __NR_pivot_root 175
888 __SYSCALL(175, sys_pivot_root, 2)
889 #define __NR_umount 176
890 -__SYSCALL(176, sys_umount, 2)
891 +__SYSCALL(176, sys_oldumount, 1)
892 +#define __ARCH_WANT_SYS_OLDUMOUNT
893 #define __NR_swapoff 177
894 __SYSCALL(177, sys_swapoff, 1)
895 #define __NR_sync 178
896 diff --git a/block/ioprio.c b/block/ioprio.c
897 index e50170ca7c33..31666c92b46a 100644
898 --- a/block/ioprio.c
899 +++ b/block/ioprio.c
900 @@ -157,14 +157,16 @@ out:
901
902 int ioprio_best(unsigned short aprio, unsigned short bprio)
903 {
904 - unsigned short aclass = IOPRIO_PRIO_CLASS(aprio);
905 - unsigned short bclass = IOPRIO_PRIO_CLASS(bprio);
906 + unsigned short aclass;
907 + unsigned short bclass;
908
909 - if (aclass == IOPRIO_CLASS_NONE)
910 - aclass = IOPRIO_CLASS_BE;
911 - if (bclass == IOPRIO_CLASS_NONE)
912 - bclass = IOPRIO_CLASS_BE;
913 + if (!ioprio_valid(aprio))
914 + aprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, IOPRIO_NORM);
915 + if (!ioprio_valid(bprio))
916 + bprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, IOPRIO_NORM);
917
918 + aclass = IOPRIO_PRIO_CLASS(aprio);
919 + bclass = IOPRIO_PRIO_CLASS(bprio);
920 if (aclass == bclass)
921 return min(aprio, bprio);
922 if (aclass > bclass)
923 diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
924 index a0cc0edafc78..597b15e7f6e5 100644
925 --- a/drivers/ata/ahci.c
926 +++ b/drivers/ata/ahci.c
927 @@ -60,6 +60,7 @@ enum board_ids {
928 /* board IDs by feature in alphabetical order */
929 board_ahci,
930 board_ahci_ign_iferr,
931 + board_ahci_nomsi,
932 board_ahci_noncq,
933 board_ahci_nosntf,
934 board_ahci_yes_fbs,
935 @@ -121,6 +122,13 @@ static const struct ata_port_info ahci_port_info[] = {
936 .udma_mask = ATA_UDMA6,
937 .port_ops = &ahci_ops,
938 },
939 + [board_ahci_nomsi] = {
940 + AHCI_HFLAGS (AHCI_HFLAG_NO_MSI),
941 + .flags = AHCI_FLAG_COMMON,
942 + .pio_mask = ATA_PIO4,
943 + .udma_mask = ATA_UDMA6,
944 + .port_ops = &ahci_ops,
945 + },
946 [board_ahci_noncq] = {
947 AHCI_HFLAGS (AHCI_HFLAG_NO_NCQ),
948 .flags = AHCI_FLAG_COMMON,
949 @@ -313,6 +321,11 @@ static const struct pci_device_id ahci_pci_tbl[] = {
950 { PCI_VDEVICE(INTEL, 0x8c87), board_ahci }, /* 9 Series RAID */
951 { PCI_VDEVICE(INTEL, 0x8c8e), board_ahci }, /* 9 Series RAID */
952 { PCI_VDEVICE(INTEL, 0x8c8f), board_ahci }, /* 9 Series RAID */
953 + { PCI_VDEVICE(INTEL, 0xa103), board_ahci }, /* Sunrise Point-H AHCI */
954 + { PCI_VDEVICE(INTEL, 0xa103), board_ahci }, /* Sunrise Point-H RAID */
955 + { PCI_VDEVICE(INTEL, 0xa105), board_ahci }, /* Sunrise Point-H RAID */
956 + { PCI_VDEVICE(INTEL, 0xa107), board_ahci }, /* Sunrise Point-H RAID */
957 + { PCI_VDEVICE(INTEL, 0xa10f), board_ahci }, /* Sunrise Point-H RAID */
958
959 /* JMicron 360/1/3/5/6, match class to avoid IDE function */
960 { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
961 @@ -475,10 +488,10 @@ static const struct pci_device_id ahci_pci_tbl[] = {
962 { PCI_VDEVICE(ASMEDIA, 0x0612), board_ahci }, /* ASM1062 */
963
964 /*
965 - * Samsung SSDs found on some macbooks. NCQ times out.
966 - * https://bugzilla.kernel.org/show_bug.cgi?id=60731
967 + * Samsung SSDs found on some macbooks. NCQ times out if MSI is
968 + * enabled. https://bugzilla.kernel.org/show_bug.cgi?id=60731
969 */
970 - { PCI_VDEVICE(SAMSUNG, 0x1600), board_ahci_noncq },
971 + { PCI_VDEVICE(SAMSUNG, 0x1600), board_ahci_nomsi },
972
973 /* Enmotus */
974 { PCI_DEVICE(0x1c44, 0x8000), board_ahci },
975 @@ -514,12 +527,9 @@ MODULE_PARM_DESC(marvell_enable, "Marvell SATA via AHCI (1 = enabled)");
976 static void ahci_pci_save_initial_config(struct pci_dev *pdev,
977 struct ahci_host_priv *hpriv)
978 {
979 - unsigned int force_port_map = 0;
980 - unsigned int mask_port_map = 0;
981 -
982 if (pdev->vendor == PCI_VENDOR_ID_JMICRON && pdev->device == 0x2361) {
983 dev_info(&pdev->dev, "JMB361 has only one port\n");
984 - force_port_map = 1;
985 + hpriv->force_port_map = 1;
986 }
987
988 /*
989 @@ -529,9 +539,9 @@ static void ahci_pci_save_initial_config(struct pci_dev *pdev,
990 */
991 if (hpriv->flags & AHCI_HFLAG_MV_PATA) {
992 if (pdev->device == 0x6121)
993 - mask_port_map = 0x3;
994 + hpriv->mask_port_map = 0x3;
995 else
996 - mask_port_map = 0xf;
997 + hpriv->mask_port_map = 0xf;
998 dev_info(&pdev->dev,
999 "Disabling your PATA port. Use the boot option 'ahci.marvell_enable=0' to avoid this.\n");
1000 }
1001 diff --git a/drivers/ata/sata_rcar.c b/drivers/ata/sata_rcar.c
1002 index 61eb6d77dac7..8732e42db3a9 100644
1003 --- a/drivers/ata/sata_rcar.c
1004 +++ b/drivers/ata/sata_rcar.c
1005 @@ -146,6 +146,7 @@
1006 enum sata_rcar_type {
1007 RCAR_GEN1_SATA,
1008 RCAR_GEN2_SATA,
1009 + RCAR_R8A7790_ES1_SATA,
1010 };
1011
1012 struct sata_rcar_priv {
1013 @@ -763,6 +764,9 @@ static void sata_rcar_setup_port(struct ata_host *host)
1014 ap->udma_mask = ATA_UDMA6;
1015 ap->flags |= ATA_FLAG_SATA;
1016
1017 + if (priv->type == RCAR_R8A7790_ES1_SATA)
1018 + ap->flags |= ATA_FLAG_NO_DIPM;
1019 +
1020 ioaddr->cmd_addr = base + SDATA_REG;
1021 ioaddr->ctl_addr = base + SSDEVCON_REG;
1022 ioaddr->scr_addr = base + SCRSSTS_REG;
1023 @@ -792,6 +796,7 @@ static void sata_rcar_init_controller(struct ata_host *host)
1024 sata_rcar_gen1_phy_init(priv);
1025 break;
1026 case RCAR_GEN2_SATA:
1027 + case RCAR_R8A7790_ES1_SATA:
1028 sata_rcar_gen2_phy_init(priv);
1029 break;
1030 default:
1031 @@ -838,6 +843,10 @@ static struct of_device_id sata_rcar_match[] = {
1032 .data = (void *)RCAR_GEN2_SATA
1033 },
1034 {
1035 + .compatible = "renesas,sata-r8a7790-es1",
1036 + .data = (void *)RCAR_R8A7790_ES1_SATA
1037 + },
1038 + {
1039 .compatible = "renesas,sata-r8a7791",
1040 .data = (void *)RCAR_GEN2_SATA
1041 },
1042 @@ -849,6 +858,7 @@ static const struct platform_device_id sata_rcar_id_table[] = {
1043 { "sata_rcar", RCAR_GEN1_SATA }, /* Deprecated by "sata-r8a7779" */
1044 { "sata-r8a7779", RCAR_GEN1_SATA },
1045 { "sata-r8a7790", RCAR_GEN2_SATA },
1046 + { "sata-r8a7790-es1", RCAR_R8A7790_ES1_SATA },
1047 { "sata-r8a7791", RCAR_GEN2_SATA },
1048 { },
1049 };
1050 diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c
1051 index 5814deb6963d..0ebadf93b6c5 100644
1052 --- a/drivers/block/sunvdc.c
1053 +++ b/drivers/block/sunvdc.c
1054 @@ -9,6 +9,7 @@
1055 #include <linux/blkdev.h>
1056 #include <linux/hdreg.h>
1057 #include <linux/genhd.h>
1058 +#include <linux/cdrom.h>
1059 #include <linux/slab.h>
1060 #include <linux/spinlock.h>
1061 #include <linux/completion.h>
1062 @@ -22,8 +23,8 @@
1063
1064 #define DRV_MODULE_NAME "sunvdc"
1065 #define PFX DRV_MODULE_NAME ": "
1066 -#define DRV_MODULE_VERSION "1.0"
1067 -#define DRV_MODULE_RELDATE "June 25, 2007"
1068 +#define DRV_MODULE_VERSION "1.1"
1069 +#define DRV_MODULE_RELDATE "February 13, 2013"
1070
1071 static char version[] =
1072 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
1073 @@ -32,7 +33,7 @@ MODULE_DESCRIPTION("Sun LDOM virtual disk client driver");
1074 MODULE_LICENSE("GPL");
1075 MODULE_VERSION(DRV_MODULE_VERSION);
1076
1077 -#define VDC_TX_RING_SIZE 256
1078 +#define VDC_TX_RING_SIZE 512
1079
1080 #define WAITING_FOR_LINK_UP 0x01
1081 #define WAITING_FOR_TX_SPACE 0x02
1082 @@ -65,11 +66,9 @@ struct vdc_port {
1083 u64 operations;
1084 u32 vdisk_size;
1085 u8 vdisk_type;
1086 + u8 vdisk_mtype;
1087
1088 char disk_name[32];
1089 -
1090 - struct vio_disk_geom geom;
1091 - struct vio_disk_vtoc label;
1092 };
1093
1094 static inline struct vdc_port *to_vdc_port(struct vio_driver_state *vio)
1095 @@ -79,9 +78,16 @@ static inline struct vdc_port *to_vdc_port(struct vio_driver_state *vio)
1096
1097 /* Ordered from largest major to lowest */
1098 static struct vio_version vdc_versions[] = {
1099 + { .major = 1, .minor = 1 },
1100 { .major = 1, .minor = 0 },
1101 };
1102
1103 +static inline int vdc_version_supported(struct vdc_port *port,
1104 + u16 major, u16 minor)
1105 +{
1106 + return port->vio.ver.major == major && port->vio.ver.minor >= minor;
1107 +}
1108 +
1109 #define VDCBLK_NAME "vdisk"
1110 static int vdc_major;
1111 #define PARTITION_SHIFT 3
1112 @@ -94,18 +100,54 @@ static inline u32 vdc_tx_dring_avail(struct vio_dring_state *dr)
1113 static int vdc_getgeo(struct block_device *bdev, struct hd_geometry *geo)
1114 {
1115 struct gendisk *disk = bdev->bd_disk;
1116 - struct vdc_port *port = disk->private_data;
1117 + sector_t nsect = get_capacity(disk);
1118 + sector_t cylinders = nsect;
1119
1120 - geo->heads = (u8) port->geom.num_hd;
1121 - geo->sectors = (u8) port->geom.num_sec;
1122 - geo->cylinders = port->geom.num_cyl;
1123 + geo->heads = 0xff;
1124 + geo->sectors = 0x3f;
1125 + sector_div(cylinders, geo->heads * geo->sectors);
1126 + geo->cylinders = cylinders;
1127 + if ((sector_t)(geo->cylinders + 1) * geo->heads * geo->sectors < nsect)
1128 + geo->cylinders = 0xffff;
1129
1130 return 0;
1131 }
1132
1133 +/* Add ioctl/CDROM_GET_CAPABILITY to support cdrom_id in udev
1134 + * when vdisk_mtype is VD_MEDIA_TYPE_CD or VD_MEDIA_TYPE_DVD.
1135 + * Needed to be able to install inside an ldom from an iso image.
1136 + */
1137 +static int vdc_ioctl(struct block_device *bdev, fmode_t mode,
1138 + unsigned command, unsigned long argument)
1139 +{
1140 + int i;
1141 + struct gendisk *disk;
1142 +
1143 + switch (command) {
1144 + case CDROMMULTISESSION:
1145 + pr_debug(PFX "Multisession CDs not supported\n");
1146 + for (i = 0; i < sizeof(struct cdrom_multisession); i++)
1147 + if (put_user(0, (char __user *)(argument + i)))
1148 + return -EFAULT;
1149 + return 0;
1150 +
1151 + case CDROM_GET_CAPABILITY:
1152 + disk = bdev->bd_disk;
1153 +
1154 + if (bdev->bd_disk && (disk->flags & GENHD_FL_CD))
1155 + return 0;
1156 + return -EINVAL;
1157 +
1158 + default:
1159 + pr_debug(PFX "ioctl %08x not supported\n", command);
1160 + return -EINVAL;
1161 + }
1162 +}
1163 +
1164 static const struct block_device_operations vdc_fops = {
1165 .owner = THIS_MODULE,
1166 .getgeo = vdc_getgeo,
1167 + .ioctl = vdc_ioctl,
1168 };
1169
1170 static void vdc_finish(struct vio_driver_state *vio, int err, int waiting_for)
1171 @@ -165,9 +207,9 @@ static int vdc_handle_attr(struct vio_driver_state *vio, void *arg)
1172 struct vio_disk_attr_info *pkt = arg;
1173
1174 viodbg(HS, "GOT ATTR stype[0x%x] ops[%llx] disk_size[%llu] disk_type[%x] "
1175 - "xfer_mode[0x%x] blksz[%u] max_xfer[%llu]\n",
1176 + "mtype[0x%x] xfer_mode[0x%x] blksz[%u] max_xfer[%llu]\n",
1177 pkt->tag.stype, pkt->operations,
1178 - pkt->vdisk_size, pkt->vdisk_type,
1179 + pkt->vdisk_size, pkt->vdisk_type, pkt->vdisk_mtype,
1180 pkt->xfer_mode, pkt->vdisk_block_size,
1181 pkt->max_xfer_size);
1182
1183 @@ -192,8 +234,11 @@ static int vdc_handle_attr(struct vio_driver_state *vio, void *arg)
1184 }
1185
1186 port->operations = pkt->operations;
1187 - port->vdisk_size = pkt->vdisk_size;
1188 port->vdisk_type = pkt->vdisk_type;
1189 + if (vdc_version_supported(port, 1, 1)) {
1190 + port->vdisk_size = pkt->vdisk_size;
1191 + port->vdisk_mtype = pkt->vdisk_mtype;
1192 + }
1193 if (pkt->max_xfer_size < port->max_xfer_size)
1194 port->max_xfer_size = pkt->max_xfer_size;
1195 port->vdisk_block_size = pkt->vdisk_block_size;
1196 @@ -236,7 +281,9 @@ static void vdc_end_one(struct vdc_port *port, struct vio_dring_state *dr,
1197
1198 __blk_end_request(req, (desc->status ? -EIO : 0), desc->size);
1199
1200 - if (blk_queue_stopped(port->disk->queue))
1201 + /* restart blk queue when ring is half emptied */
1202 + if (blk_queue_stopped(port->disk->queue) &&
1203 + vdc_tx_dring_avail(dr) * 100 / VDC_TX_RING_SIZE >= 50)
1204 blk_start_queue(port->disk->queue);
1205 }
1206
1207 @@ -388,12 +435,6 @@ static int __send_request(struct request *req)
1208 for (i = 0; i < nsg; i++)
1209 len += sg[i].length;
1210
1211 - if (unlikely(vdc_tx_dring_avail(dr) < 1)) {
1212 - blk_stop_queue(port->disk->queue);
1213 - err = -ENOMEM;
1214 - goto out;
1215 - }
1216 -
1217 desc = vio_dring_cur(dr);
1218
1219 err = ldc_map_sg(port->vio.lp, sg, nsg,
1220 @@ -433,21 +474,32 @@ static int __send_request(struct request *req)
1221 port->req_id++;
1222 dr->prod = (dr->prod + 1) & (VDC_TX_RING_SIZE - 1);
1223 }
1224 -out:
1225
1226 return err;
1227 }
1228
1229 -static void do_vdc_request(struct request_queue *q)
1230 +static void do_vdc_request(struct request_queue *rq)
1231 {
1232 - while (1) {
1233 - struct request *req = blk_fetch_request(q);
1234 + struct request *req;
1235
1236 - if (!req)
1237 - break;
1238 + while ((req = blk_peek_request(rq)) != NULL) {
1239 + struct vdc_port *port;
1240 + struct vio_dring_state *dr;
1241
1242 - if (__send_request(req) < 0)
1243 - __blk_end_request_all(req, -EIO);
1244 + port = req->rq_disk->private_data;
1245 + dr = &port->vio.drings[VIO_DRIVER_TX_RING];
1246 + if (unlikely(vdc_tx_dring_avail(dr) < 1))
1247 + goto wait;
1248 +
1249 + blk_start_request(req);
1250 +
1251 + if (__send_request(req) < 0) {
1252 + blk_requeue_request(rq, req);
1253 +wait:
1254 + /* Avoid pointless unplugs. */
1255 + blk_stop_queue(rq);
1256 + break;
1257 + }
1258 }
1259 }
1260
1261 @@ -656,25 +708,27 @@ static int probe_disk(struct vdc_port *port)
1262 if (comp.err)
1263 return comp.err;
1264
1265 - err = generic_request(port, VD_OP_GET_VTOC,
1266 - &port->label, sizeof(port->label));
1267 - if (err < 0) {
1268 - printk(KERN_ERR PFX "VD_OP_GET_VTOC returns error %d\n", err);
1269 - return err;
1270 - }
1271 -
1272 - err = generic_request(port, VD_OP_GET_DISKGEOM,
1273 - &port->geom, sizeof(port->geom));
1274 - if (err < 0) {
1275 - printk(KERN_ERR PFX "VD_OP_GET_DISKGEOM returns "
1276 - "error %d\n", err);
1277 - return err;
1278 + if (vdc_version_supported(port, 1, 1)) {
1279 + /* vdisk_size should be set during the handshake, if it wasn't
1280 + * then the underlying disk is reserved by another system
1281 + */
1282 + if (port->vdisk_size == -1)
1283 + return -ENODEV;
1284 + } else {
1285 + struct vio_disk_geom geom;
1286 +
1287 + err = generic_request(port, VD_OP_GET_DISKGEOM,
1288 + &geom, sizeof(geom));
1289 + if (err < 0) {
1290 + printk(KERN_ERR PFX "VD_OP_GET_DISKGEOM returns "
1291 + "error %d\n", err);
1292 + return err;
1293 + }
1294 + port->vdisk_size = ((u64)geom.num_cyl *
1295 + (u64)geom.num_hd *
1296 + (u64)geom.num_sec);
1297 }
1298
1299 - port->vdisk_size = ((u64)port->geom.num_cyl *
1300 - (u64)port->geom.num_hd *
1301 - (u64)port->geom.num_sec);
1302 -
1303 q = blk_init_queue(do_vdc_request, &port->vio.lock);
1304 if (!q) {
1305 printk(KERN_ERR PFX "%s: Could not allocate queue.\n",
1306 @@ -691,6 +745,10 @@ static int probe_disk(struct vdc_port *port)
1307
1308 port->disk = g;
1309
1310 + /* Each segment in a request is up to an aligned page in size. */
1311 + blk_queue_segment_boundary(q, PAGE_SIZE - 1);
1312 + blk_queue_max_segment_size(q, PAGE_SIZE);
1313 +
1314 blk_queue_max_segments(q, port->ring_cookies);
1315 blk_queue_max_hw_sectors(q, port->max_xfer_size);
1316 g->major = vdc_major;
1317 @@ -704,9 +762,32 @@ static int probe_disk(struct vdc_port *port)
1318
1319 set_capacity(g, port->vdisk_size);
1320
1321 - printk(KERN_INFO PFX "%s: %u sectors (%u MB)\n",
1322 + if (vdc_version_supported(port, 1, 1)) {
1323 + switch (port->vdisk_mtype) {
1324 + case VD_MEDIA_TYPE_CD:
1325 + pr_info(PFX "Virtual CDROM %s\n", port->disk_name);
1326 + g->flags |= GENHD_FL_CD;
1327 + g->flags |= GENHD_FL_REMOVABLE;
1328 + set_disk_ro(g, 1);
1329 + break;
1330 +
1331 + case VD_MEDIA_TYPE_DVD:
1332 + pr_info(PFX "Virtual DVD %s\n", port->disk_name);
1333 + g->flags |= GENHD_FL_CD;
1334 + g->flags |= GENHD_FL_REMOVABLE;
1335 + set_disk_ro(g, 1);
1336 + break;
1337 +
1338 + case VD_MEDIA_TYPE_FIXED:
1339 + pr_info(PFX "Virtual Hard disk %s\n", port->disk_name);
1340 + break;
1341 + }
1342 + }
1343 +
1344 + pr_info(PFX "%s: %u sectors (%u MB) protocol %d.%d\n",
1345 g->disk_name,
1346 - port->vdisk_size, (port->vdisk_size >> (20 - 9)));
1347 + port->vdisk_size, (port->vdisk_size >> (20 - 9)),
1348 + port->vio.ver.major, port->vio.ver.minor);
1349
1350 add_disk(g);
1351
1352 @@ -765,6 +846,7 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)
1353 else
1354 snprintf(port->disk_name, sizeof(port->disk_name),
1355 VDCBLK_NAME "%c", 'a' + ((int)vdev->dev_no % 26));
1356 + port->vdisk_size = -1;
1357
1358 err = vio_driver_init(&port->vio, vdev, VDEV_DISK,
1359 vdc_versions, ARRAY_SIZE(vdc_versions),
1360 diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
1361 index d00831c3d731..cc1b58b82a48 100644
1362 --- a/drivers/block/zram/zram_drv.c
1363 +++ b/drivers/block/zram/zram_drv.c
1364 @@ -476,7 +476,8 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
1365 }
1366
1367 if (page_zero_filled(uncmem)) {
1368 - kunmap_atomic(user_mem);
1369 + if (user_mem)
1370 + kunmap_atomic(user_mem);
1371 /* Free memory associated with this sector now. */
1372 bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
1373 zram_free_page(zram, index);
1374 diff --git a/drivers/char/hw_random/pseries-rng.c b/drivers/char/hw_random/pseries-rng.c
1375 index ab7ffdec0ec3..f38f2c13e79c 100644
1376 --- a/drivers/char/hw_random/pseries-rng.c
1377 +++ b/drivers/char/hw_random/pseries-rng.c
1378 @@ -25,18 +25,21 @@
1379 #include <asm/vio.h>
1380
1381
1382 -static int pseries_rng_data_read(struct hwrng *rng, u32 *data)
1383 +static int pseries_rng_read(struct hwrng *rng, void *data, size_t max, bool wait)
1384 {
1385 + u64 buffer[PLPAR_HCALL_BUFSIZE];
1386 + size_t size = max < 8 ? max : 8;
1387 int rc;
1388
1389 - rc = plpar_hcall(H_RANDOM, (unsigned long *)data);
1390 + rc = plpar_hcall(H_RANDOM, (unsigned long *)buffer);
1391 if (rc != H_SUCCESS) {
1392 pr_err_ratelimited("H_RANDOM call failed %d\n", rc);
1393 return -EIO;
1394 }
1395 + memcpy(data, buffer, size);
1396
1397 /* The hypervisor interface returns 64 bits */
1398 - return 8;
1399 + return size;
1400 }
1401
1402 /**
1403 @@ -55,7 +58,7 @@ static unsigned long pseries_rng_get_desired_dma(struct vio_dev *vdev)
1404
1405 static struct hwrng pseries_rng = {
1406 .name = KBUILD_MODNAME,
1407 - .data_read = pseries_rng_data_read,
1408 + .read = pseries_rng_read,
1409 };
1410
1411 static int __init pseries_rng_probe(struct vio_dev *dev,
1412 diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
1413 index c05821e8de41..07c827637b17 100644
1414 --- a/drivers/cpufreq/cpufreq.c
1415 +++ b/drivers/cpufreq/cpufreq.c
1416 @@ -1022,7 +1022,8 @@ static struct cpufreq_policy *cpufreq_policy_restore(unsigned int cpu)
1417
1418 read_unlock_irqrestore(&cpufreq_driver_lock, flags);
1419
1420 - policy->governor = NULL;
1421 + if (policy)
1422 + policy->governor = NULL;
1423
1424 return policy;
1425 }
1426 diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c
1427 index e9cc753d5095..f347ab7eea95 100644
1428 --- a/drivers/crypto/caam/caamhash.c
1429 +++ b/drivers/crypto/caam/caamhash.c
1430 @@ -836,8 +836,9 @@ static int ahash_update_ctx(struct ahash_request *req)
1431 edesc->sec4_sg + sec4_sg_src_index,
1432 chained);
1433 if (*next_buflen) {
1434 - sg_copy_part(next_buf, req->src, to_hash -
1435 - *buflen, req->nbytes);
1436 + scatterwalk_map_and_copy(next_buf, req->src,
1437 + to_hash - *buflen,
1438 + *next_buflen, 0);
1439 state->current_buf = !state->current_buf;
1440 }
1441 } else {
1442 @@ -878,7 +879,8 @@ static int ahash_update_ctx(struct ahash_request *req)
1443 kfree(edesc);
1444 }
1445 } else if (*next_buflen) {
1446 - sg_copy(buf + *buflen, req->src, req->nbytes);
1447 + scatterwalk_map_and_copy(buf + *buflen, req->src, 0,
1448 + req->nbytes, 0);
1449 *buflen = *next_buflen;
1450 *next_buflen = last_buflen;
1451 }
1452 @@ -1262,8 +1264,9 @@ static int ahash_update_no_ctx(struct ahash_request *req)
1453 src_map_to_sec4_sg(jrdev, req->src, src_nents,
1454 edesc->sec4_sg + 1, chained);
1455 if (*next_buflen) {
1456 - sg_copy_part(next_buf, req->src, to_hash - *buflen,
1457 - req->nbytes);
1458 + scatterwalk_map_and_copy(next_buf, req->src,
1459 + to_hash - *buflen,
1460 + *next_buflen, 0);
1461 state->current_buf = !state->current_buf;
1462 }
1463
1464 @@ -1304,7 +1307,8 @@ static int ahash_update_no_ctx(struct ahash_request *req)
1465 kfree(edesc);
1466 }
1467 } else if (*next_buflen) {
1468 - sg_copy(buf + *buflen, req->src, req->nbytes);
1469 + scatterwalk_map_and_copy(buf + *buflen, req->src, 0,
1470 + req->nbytes, 0);
1471 *buflen = *next_buflen;
1472 *next_buflen = 0;
1473 }
1474 @@ -1476,7 +1480,8 @@ static int ahash_update_first(struct ahash_request *req)
1475 }
1476
1477 if (*next_buflen)
1478 - sg_copy_part(next_buf, req->src, to_hash, req->nbytes);
1479 + scatterwalk_map_and_copy(next_buf, req->src, to_hash,
1480 + *next_buflen, 0);
1481
1482 sh_len = desc_len(sh_desc);
1483 desc = edesc->hw_desc;
1484 @@ -1511,7 +1516,8 @@ static int ahash_update_first(struct ahash_request *req)
1485 state->update = ahash_update_no_ctx;
1486 state->finup = ahash_finup_no_ctx;
1487 state->final = ahash_final_no_ctx;
1488 - sg_copy(next_buf, req->src, req->nbytes);
1489 + scatterwalk_map_and_copy(next_buf, req->src, 0,
1490 + req->nbytes, 0);
1491 }
1492 #ifdef DEBUG
1493 print_hex_dump(KERN_ERR, "next buf@"__stringify(__LINE__)": ",
1494 diff --git a/drivers/crypto/caam/key_gen.c b/drivers/crypto/caam/key_gen.c
1495 index 871703c49d2c..e1eaf4ff9762 100644
1496 --- a/drivers/crypto/caam/key_gen.c
1497 +++ b/drivers/crypto/caam/key_gen.c
1498 @@ -48,23 +48,29 @@ int gen_split_key(struct device *jrdev, u8 *key_out, int split_key_len,
1499 u32 *desc;
1500 struct split_key_result result;
1501 dma_addr_t dma_addr_in, dma_addr_out;
1502 - int ret = 0;
1503 + int ret = -ENOMEM;
1504
1505 desc = kmalloc(CAAM_CMD_SZ * 6 + CAAM_PTR_SZ * 2, GFP_KERNEL | GFP_DMA);
1506 if (!desc) {
1507 dev_err(jrdev, "unable to allocate key input memory\n");
1508 - return -ENOMEM;
1509 + return ret;
1510 }
1511
1512 - init_job_desc(desc, 0);
1513 -
1514 dma_addr_in = dma_map_single(jrdev, (void *)key_in, keylen,
1515 DMA_TO_DEVICE);
1516 if (dma_mapping_error(jrdev, dma_addr_in)) {
1517 dev_err(jrdev, "unable to map key input memory\n");
1518 - kfree(desc);
1519 - return -ENOMEM;
1520 + goto out_free;
1521 }
1522 +
1523 + dma_addr_out = dma_map_single(jrdev, key_out, split_key_pad_len,
1524 + DMA_FROM_DEVICE);
1525 + if (dma_mapping_error(jrdev, dma_addr_out)) {
1526 + dev_err(jrdev, "unable to map key output memory\n");
1527 + goto out_unmap_in;
1528 + }
1529 +
1530 + init_job_desc(desc, 0);
1531 append_key(desc, dma_addr_in, keylen, CLASS_2 | KEY_DEST_CLASS_REG);
1532
1533 /* Sets MDHA up into an HMAC-INIT */
1534 @@ -81,13 +87,6 @@ int gen_split_key(struct device *jrdev, u8 *key_out, int split_key_len,
1535 * FIFO_STORE with the explicit split-key content store
1536 * (0x26 output type)
1537 */
1538 - dma_addr_out = dma_map_single(jrdev, key_out, split_key_pad_len,
1539 - DMA_FROM_DEVICE);
1540 - if (dma_mapping_error(jrdev, dma_addr_out)) {
1541 - dev_err(jrdev, "unable to map key output memory\n");
1542 - kfree(desc);
1543 - return -ENOMEM;
1544 - }
1545 append_fifo_store(desc, dma_addr_out, split_key_len,
1546 LDST_CLASS_2_CCB | FIFOST_TYPE_SPLIT_KEK);
1547
1548 @@ -115,10 +114,10 @@ int gen_split_key(struct device *jrdev, u8 *key_out, int split_key_len,
1549
1550 dma_unmap_single(jrdev, dma_addr_out, split_key_pad_len,
1551 DMA_FROM_DEVICE);
1552 +out_unmap_in:
1553 dma_unmap_single(jrdev, dma_addr_in, keylen, DMA_TO_DEVICE);
1554 -
1555 +out_free:
1556 kfree(desc);
1557 -
1558 return ret;
1559 }
1560 EXPORT_SYMBOL(gen_split_key);
1561 diff --git a/drivers/crypto/caam/sg_sw_sec4.h b/drivers/crypto/caam/sg_sw_sec4.h
1562 index b12ff85f4241..ce28a563effc 100644
1563 --- a/drivers/crypto/caam/sg_sw_sec4.h
1564 +++ b/drivers/crypto/caam/sg_sw_sec4.h
1565 @@ -116,57 +116,3 @@ static int dma_unmap_sg_chained(struct device *dev, struct scatterlist *sg,
1566 }
1567 return nents;
1568 }
1569 -
1570 -/* Map SG page in kernel virtual address space and copy */
1571 -static inline void sg_map_copy(u8 *dest, struct scatterlist *sg,
1572 - int len, int offset)
1573 -{
1574 - u8 *mapped_addr;
1575 -
1576 - /*
1577 - * Page here can be user-space pinned using get_user_pages
1578 - * Same must be kmapped before use and kunmapped subsequently
1579 - */
1580 - mapped_addr = kmap_atomic(sg_page(sg));
1581 - memcpy(dest, mapped_addr + offset, len);
1582 - kunmap_atomic(mapped_addr);
1583 -}
1584 -
1585 -/* Copy from len bytes of sg to dest, starting from beginning */
1586 -static inline void sg_copy(u8 *dest, struct scatterlist *sg, unsigned int len)
1587 -{
1588 - struct scatterlist *current_sg = sg;
1589 - int cpy_index = 0, next_cpy_index = current_sg->length;
1590 -
1591 - while (next_cpy_index < len) {
1592 - sg_map_copy(dest + cpy_index, current_sg, current_sg->length,
1593 - current_sg->offset);
1594 - current_sg = scatterwalk_sg_next(current_sg);
1595 - cpy_index = next_cpy_index;
1596 - next_cpy_index += current_sg->length;
1597 - }
1598 - if (cpy_index < len)
1599 - sg_map_copy(dest + cpy_index, current_sg, len-cpy_index,
1600 - current_sg->offset);
1601 -}
1602 -
1603 -/* Copy sg data, from to_skip to end, to dest */
1604 -static inline void sg_copy_part(u8 *dest, struct scatterlist *sg,
1605 - int to_skip, unsigned int end)
1606 -{
1607 - struct scatterlist *current_sg = sg;
1608 - int sg_index, cpy_index, offset;
1609 -
1610 - sg_index = current_sg->length;
1611 - while (sg_index <= to_skip) {
1612 - current_sg = scatterwalk_sg_next(current_sg);
1613 - sg_index += current_sg->length;
1614 - }
1615 - cpy_index = sg_index - to_skip;
1616 - offset = current_sg->offset + current_sg->length - cpy_index;
1617 - sg_map_copy(dest, current_sg, cpy_index, offset);
1618 - if (end - sg_index) {
1619 - current_sg = scatterwalk_sg_next(current_sg);
1620 - sg_copy(dest + cpy_index, current_sg, end - sg_index);
1621 - }
1622 -}
1623 diff --git a/drivers/crypto/qat/qat_common/adf_accel_devices.h b/drivers/crypto/qat/qat_common/adf_accel_devices.h
1624 index 9282381b03ce..fe7b3f06f6e6 100644
1625 --- a/drivers/crypto/qat/qat_common/adf_accel_devices.h
1626 +++ b/drivers/crypto/qat/qat_common/adf_accel_devices.h
1627 @@ -198,8 +198,7 @@ struct adf_accel_dev {
1628 struct dentry *debugfs_dir;
1629 struct list_head list;
1630 struct module *owner;
1631 - uint8_t accel_id;
1632 - uint8_t numa_node;
1633 struct adf_accel_pci accel_pci_dev;
1634 + uint8_t accel_id;
1635 } __packed;
1636 #endif
1637 diff --git a/drivers/crypto/qat/qat_common/adf_transport.c b/drivers/crypto/qat/qat_common/adf_transport.c
1638 index 5f3fa45348b4..9dd2cb72a4e8 100644
1639 --- a/drivers/crypto/qat/qat_common/adf_transport.c
1640 +++ b/drivers/crypto/qat/qat_common/adf_transport.c
1641 @@ -419,9 +419,10 @@ static int adf_init_bank(struct adf_accel_dev *accel_dev,
1642 WRITE_CSR_RING_BASE(csr_addr, bank_num, i, 0);
1643 ring = &bank->rings[i];
1644 if (hw_data->tx_rings_mask & (1 << i)) {
1645 - ring->inflights = kzalloc_node(sizeof(atomic_t),
1646 - GFP_KERNEL,
1647 - accel_dev->numa_node);
1648 + ring->inflights =
1649 + kzalloc_node(sizeof(atomic_t),
1650 + GFP_KERNEL,
1651 + dev_to_node(&GET_DEV(accel_dev)));
1652 if (!ring->inflights)
1653 goto err;
1654 } else {
1655 @@ -469,13 +470,14 @@ int adf_init_etr_data(struct adf_accel_dev *accel_dev)
1656 int i, ret;
1657
1658 etr_data = kzalloc_node(sizeof(*etr_data), GFP_KERNEL,
1659 - accel_dev->numa_node);
1660 + dev_to_node(&GET_DEV(accel_dev)));
1661 if (!etr_data)
1662 return -ENOMEM;
1663
1664 num_banks = GET_MAX_BANKS(accel_dev);
1665 size = num_banks * sizeof(struct adf_etr_bank_data);
1666 - etr_data->banks = kzalloc_node(size, GFP_KERNEL, accel_dev->numa_node);
1667 + etr_data->banks = kzalloc_node(size, GFP_KERNEL,
1668 + dev_to_node(&GET_DEV(accel_dev)));
1669 if (!etr_data->banks) {
1670 ret = -ENOMEM;
1671 goto err_bank;
1672 diff --git a/drivers/crypto/qat/qat_common/qat_algs.c b/drivers/crypto/qat/qat_common/qat_algs.c
1673 index 59df48872955..f50db957b6b1 100644
1674 --- a/drivers/crypto/qat/qat_common/qat_algs.c
1675 +++ b/drivers/crypto/qat/qat_common/qat_algs.c
1676 @@ -641,7 +641,8 @@ static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst,
1677 if (unlikely(!n))
1678 return -EINVAL;
1679
1680 - bufl = kmalloc_node(sz, GFP_ATOMIC, inst->accel_dev->numa_node);
1681 + bufl = kmalloc_node(sz, GFP_ATOMIC,
1682 + dev_to_node(&GET_DEV(inst->accel_dev)));
1683 if (unlikely(!bufl))
1684 return -ENOMEM;
1685
1686 @@ -650,6 +651,8 @@ static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst,
1687 goto err;
1688
1689 for_each_sg(assoc, sg, assoc_n, i) {
1690 + if (!sg->length)
1691 + continue;
1692 bufl->bufers[bufs].addr = dma_map_single(dev,
1693 sg_virt(sg),
1694 sg->length,
1695 @@ -685,7 +688,7 @@ static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst,
1696 struct qat_alg_buf *bufers;
1697
1698 buflout = kmalloc_node(sz, GFP_ATOMIC,
1699 - inst->accel_dev->numa_node);
1700 + dev_to_node(&GET_DEV(inst->accel_dev)));
1701 if (unlikely(!buflout))
1702 goto err;
1703 bloutp = dma_map_single(dev, buflout, sz, DMA_TO_DEVICE);
1704 diff --git a/drivers/crypto/qat/qat_common/qat_crypto.c b/drivers/crypto/qat/qat_common/qat_crypto.c
1705 index 0d59bcb50de1..828f2a686aab 100644
1706 --- a/drivers/crypto/qat/qat_common/qat_crypto.c
1707 +++ b/drivers/crypto/qat/qat_common/qat_crypto.c
1708 @@ -109,12 +109,14 @@ struct qat_crypto_instance *qat_crypto_get_instance_node(int node)
1709
1710 list_for_each(itr, adf_devmgr_get_head()) {
1711 accel_dev = list_entry(itr, struct adf_accel_dev, list);
1712 - if (accel_dev->numa_node == node && adf_dev_started(accel_dev))
1713 + if ((node == dev_to_node(&GET_DEV(accel_dev)) ||
1714 + dev_to_node(&GET_DEV(accel_dev)) < 0)
1715 + && adf_dev_started(accel_dev))
1716 break;
1717 accel_dev = NULL;
1718 }
1719 if (!accel_dev) {
1720 - pr_err("QAT: Could not find device on give node\n");
1721 + pr_err("QAT: Could not find device on node %d\n", node);
1722 accel_dev = adf_devmgr_get_first();
1723 }
1724 if (!accel_dev || !adf_dev_started(accel_dev))
1725 @@ -164,7 +166,7 @@ static int qat_crypto_create_instances(struct adf_accel_dev *accel_dev)
1726
1727 for (i = 0; i < num_inst; i++) {
1728 inst = kzalloc_node(sizeof(*inst), GFP_KERNEL,
1729 - accel_dev->numa_node);
1730 + dev_to_node(&GET_DEV(accel_dev)));
1731 if (!inst)
1732 goto err;
1733
1734 diff --git a/drivers/crypto/qat/qat_dh895xcc/adf_admin.c b/drivers/crypto/qat/qat_dh895xcc/adf_admin.c
1735 index 978d6c56639d..53c491b59f07 100644
1736 --- a/drivers/crypto/qat/qat_dh895xcc/adf_admin.c
1737 +++ b/drivers/crypto/qat/qat_dh895xcc/adf_admin.c
1738 @@ -108,7 +108,7 @@ int adf_init_admin_comms(struct adf_accel_dev *accel_dev)
1739 uint64_t reg_val;
1740
1741 admin = kzalloc_node(sizeof(*accel_dev->admin), GFP_KERNEL,
1742 - accel_dev->numa_node);
1743 + dev_to_node(&GET_DEV(accel_dev)));
1744 if (!admin)
1745 return -ENOMEM;
1746 admin->virt_addr = dma_zalloc_coherent(&GET_DEV(accel_dev), PAGE_SIZE,
1747 diff --git a/drivers/crypto/qat/qat_dh895xcc/adf_drv.c b/drivers/crypto/qat/qat_dh895xcc/adf_drv.c
1748 index 0d0435a41be9..948f66be262b 100644
1749 --- a/drivers/crypto/qat/qat_dh895xcc/adf_drv.c
1750 +++ b/drivers/crypto/qat/qat_dh895xcc/adf_drv.c
1751 @@ -119,21 +119,6 @@ static void adf_cleanup_accel(struct adf_accel_dev *accel_dev)
1752 kfree(accel_dev);
1753 }
1754
1755 -static uint8_t adf_get_dev_node_id(struct pci_dev *pdev)
1756 -{
1757 - unsigned int bus_per_cpu = 0;
1758 - struct cpuinfo_x86 *c = &cpu_data(num_online_cpus() - 1);
1759 -
1760 - if (!c->phys_proc_id)
1761 - return 0;
1762 -
1763 - bus_per_cpu = 256 / (c->phys_proc_id + 1);
1764 -
1765 - if (bus_per_cpu != 0)
1766 - return pdev->bus->number / bus_per_cpu;
1767 - return 0;
1768 -}
1769 -
1770 static int qat_dev_start(struct adf_accel_dev *accel_dev)
1771 {
1772 int cpus = num_online_cpus();
1773 @@ -235,7 +220,6 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1774 void __iomem *pmisc_bar_addr = NULL;
1775 char name[ADF_DEVICE_NAME_LENGTH];
1776 unsigned int i, bar_nr;
1777 - uint8_t node;
1778 int ret;
1779
1780 switch (ent->device) {
1781 @@ -246,12 +230,19 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1782 return -ENODEV;
1783 }
1784
1785 - node = adf_get_dev_node_id(pdev);
1786 - accel_dev = kzalloc_node(sizeof(*accel_dev), GFP_KERNEL, node);
1787 + if (num_possible_nodes() > 1 && dev_to_node(&pdev->dev) < 0) {
1788 + /* If the accelerator is connected to a node with no memory
1789 + * there is no point in using the accelerator since the remote
1790 + * memory transaction will be very slow. */
1791 + dev_err(&pdev->dev, "Invalid NUMA configuration.\n");
1792 + return -EINVAL;
1793 + }
1794 +
1795 + accel_dev = kzalloc_node(sizeof(*accel_dev), GFP_KERNEL,
1796 + dev_to_node(&pdev->dev));
1797 if (!accel_dev)
1798 return -ENOMEM;
1799
1800 - accel_dev->numa_node = node;
1801 INIT_LIST_HEAD(&accel_dev->crypto_list);
1802
1803 /* Add accel device to accel table.
1804 @@ -264,7 +255,8 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1805
1806 accel_dev->owner = THIS_MODULE;
1807 /* Allocate and configure device configuration structure */
1808 - hw_data = kzalloc_node(sizeof(*hw_data), GFP_KERNEL, node);
1809 + hw_data = kzalloc_node(sizeof(*hw_data), GFP_KERNEL,
1810 + dev_to_node(&pdev->dev));
1811 if (!hw_data) {
1812 ret = -ENOMEM;
1813 goto out_err;
1814 diff --git a/drivers/crypto/qat/qat_dh895xcc/adf_isr.c b/drivers/crypto/qat/qat_dh895xcc/adf_isr.c
1815 index d4172dedf775..38b80ee4e556 100644
1816 --- a/drivers/crypto/qat/qat_dh895xcc/adf_isr.c
1817 +++ b/drivers/crypto/qat/qat_dh895xcc/adf_isr.c
1818 @@ -168,7 +168,7 @@ static int adf_isr_alloc_msix_entry_table(struct adf_accel_dev *accel_dev)
1819 uint32_t msix_num_entries = hw_data->num_banks + 1;
1820
1821 entries = kzalloc_node(msix_num_entries * sizeof(*entries),
1822 - GFP_KERNEL, accel_dev->numa_node);
1823 + GFP_KERNEL, dev_to_node(&GET_DEV(accel_dev)));
1824 if (!entries)
1825 return -ENOMEM;
1826
1827 diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c
1828 index 5d997a33907e..2a3973a7c441 100644
1829 --- a/drivers/firewire/core-cdev.c
1830 +++ b/drivers/firewire/core-cdev.c
1831 @@ -1637,8 +1637,7 @@ static int dispatch_ioctl(struct client *client,
1832 _IOC_SIZE(cmd) > sizeof(buffer))
1833 return -ENOTTY;
1834
1835 - if (_IOC_DIR(cmd) == _IOC_READ)
1836 - memset(&buffer, 0, _IOC_SIZE(cmd));
1837 + memset(&buffer, 0, sizeof(buffer));
1838
1839 if (_IOC_DIR(cmd) & _IOC_WRITE)
1840 if (copy_from_user(&buffer, arg, _IOC_SIZE(cmd)))
1841 diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
1842 index e42925f76b4b..eff83f5c3407 100644
1843 --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
1844 +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
1845 @@ -1901,6 +1901,22 @@ static void bdw_setup_private_ppat(struct drm_i915_private *dev_priv)
1846 GEN8_PPAT(6, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(2)) |
1847 GEN8_PPAT(7, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(3));
1848
1849 + if (!USES_PPGTT(dev_priv->dev))
1850 + /* Spec: "For GGTT, there is NO pat_sel[2:0] from the entry,
1851 + * so RTL will always use the value corresponding to
1852 + * pat_sel = 000".
1853 + * So let's disable cache for GGTT to avoid screen corruptions.
1854 + * MOCS still can be used though.
1855 + * - System agent ggtt writes (i.e. cpu gtt mmaps) already work
1856 + * before this patch, i.e. the same uncached + snooping access
1857 + * like on gen6/7 seems to be in effect.
1858 + * - So this just fixes blitter/render access. Again it looks
1859 + * like it's not just uncached access, but uncached + snooping.
1860 + * So we can still hold onto all our assumptions wrt cpu
1861 + * clflushing on LLC machines.
1862 + */
1863 + pat = GEN8_PPAT(0, GEN8_PPAT_UC);
1864 +
1865 /* XXX: spec defines this as 2 distinct registers. It's unclear if a 64b
1866 * write would work. */
1867 I915_WRITE(GEN8_PRIVATE_PAT, pat);
1868 diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
1869 index 9222e20e230c..4b3c09636990 100644
1870 --- a/drivers/gpu/drm/i915/intel_dp.c
1871 +++ b/drivers/gpu/drm/i915/intel_dp.c
1872 @@ -3354,9 +3354,10 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
1873 }
1874 }
1875
1876 - /* Training Pattern 3 support */
1877 + /* Training Pattern 3 support, both source and sink */
1878 if (intel_dp->dpcd[DP_DPCD_REV] >= 0x12 &&
1879 - intel_dp->dpcd[DP_MAX_LANE_COUNT] & DP_TPS3_SUPPORTED) {
1880 + intel_dp->dpcd[DP_MAX_LANE_COUNT] & DP_TPS3_SUPPORTED &&
1881 + (IS_HASWELL(dev) || INTEL_INFO(dev)->gen >= 8)) {
1882 intel_dp->use_tps3 = true;
1883 DRM_DEBUG_KMS("Displayport TPS3 supported");
1884 } else
1885 diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
1886 index cbe8a8de85de..0971fbf133d5 100644
1887 --- a/drivers/gpu/drm/i915/intel_panel.c
1888 +++ b/drivers/gpu/drm/i915/intel_panel.c
1889 @@ -1074,12 +1074,25 @@ static u32 get_backlight_min_vbt(struct intel_connector *connector)
1890 struct drm_device *dev = connector->base.dev;
1891 struct drm_i915_private *dev_priv = dev->dev_private;
1892 struct intel_panel *panel = &connector->panel;
1893 + int min;
1894
1895 WARN_ON(panel->backlight.max == 0);
1896
1897 + /*
1898 + * XXX: If the vbt value is 255, it makes min equal to max, which leads
1899 + * to problems. There are such machines out there. Either our
1900 + * interpretation is wrong or the vbt has bogus data. Or both. Safeguard
1901 + * against this by letting the minimum be at most (arbitrarily chosen)
1902 + * 25% of the max.
1903 + */
1904 + min = clamp_t(int, dev_priv->vbt.backlight.min_brightness, 0, 64);
1905 + if (min != dev_priv->vbt.backlight.min_brightness) {
1906 + DRM_DEBUG_KMS("clamping VBT min backlight %d/255 to %d/255\n",
1907 + dev_priv->vbt.backlight.min_brightness, min);
1908 + }
1909 +
1910 /* vbt value is a coefficient in range [0..255] */
1911 - return scale(dev_priv->vbt.backlight.min_brightness, 0, 255,
1912 - 0, panel->backlight.max);
1913 + return scale(min, 0, 255, 0, panel->backlight.max);
1914 }
1915
1916 static int bdw_setup_backlight(struct intel_connector *connector)
1917 diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c
1918 index 15da7ef344a4..ec1593a6a561 100644
1919 --- a/drivers/gpu/drm/radeon/atom.c
1920 +++ b/drivers/gpu/drm/radeon/atom.c
1921 @@ -1217,7 +1217,7 @@ free:
1922 return ret;
1923 }
1924
1925 -int atom_execute_table(struct atom_context *ctx, int index, uint32_t * params)
1926 +int atom_execute_table_scratch_unlocked(struct atom_context *ctx, int index, uint32_t * params)
1927 {
1928 int r;
1929
1930 @@ -1238,6 +1238,15 @@ int atom_execute_table(struct atom_context *ctx, int index, uint32_t * params)
1931 return r;
1932 }
1933
1934 +int atom_execute_table(struct atom_context *ctx, int index, uint32_t * params)
1935 +{
1936 + int r;
1937 + mutex_lock(&ctx->scratch_mutex);
1938 + r = atom_execute_table_scratch_unlocked(ctx, index, params);
1939 + mutex_unlock(&ctx->scratch_mutex);
1940 + return r;
1941 +}
1942 +
1943 static int atom_iio_len[] = { 1, 2, 3, 3, 3, 3, 4, 4, 4, 3 };
1944
1945 static void atom_index_iio(struct atom_context *ctx, int base)
1946 diff --git a/drivers/gpu/drm/radeon/atom.h b/drivers/gpu/drm/radeon/atom.h
1947 index feba6b8d36b3..6d014ddb6b78 100644
1948 --- a/drivers/gpu/drm/radeon/atom.h
1949 +++ b/drivers/gpu/drm/radeon/atom.h
1950 @@ -125,6 +125,7 @@ struct card_info {
1951 struct atom_context {
1952 struct card_info *card;
1953 struct mutex mutex;
1954 + struct mutex scratch_mutex;
1955 void *bios;
1956 uint32_t cmd_table, data_table;
1957 uint16_t *iio;
1958 @@ -145,6 +146,7 @@ extern int atom_debug;
1959
1960 struct atom_context *atom_parse(struct card_info *, void *);
1961 int atom_execute_table(struct atom_context *, int, uint32_t *);
1962 +int atom_execute_table_scratch_unlocked(struct atom_context *, int, uint32_t *);
1963 int atom_asic_init(struct atom_context *);
1964 void atom_destroy(struct atom_context *);
1965 bool atom_parse_data_header(struct atom_context *ctx, int index, uint16_t *size,
1966 diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
1967 index ac14b67621d3..9074662d8f89 100644
1968 --- a/drivers/gpu/drm/radeon/atombios_dp.c
1969 +++ b/drivers/gpu/drm/radeon/atombios_dp.c
1970 @@ -100,6 +100,7 @@ static int radeon_process_aux_ch(struct radeon_i2c_chan *chan,
1971 memset(&args, 0, sizeof(args));
1972
1973 mutex_lock(&chan->mutex);
1974 + mutex_lock(&rdev->mode_info.atom_context->scratch_mutex);
1975
1976 base = (unsigned char *)(rdev->mode_info.atom_context->scratch + 1);
1977
1978 @@ -113,7 +114,7 @@ static int radeon_process_aux_ch(struct radeon_i2c_chan *chan,
1979 if (ASIC_IS_DCE4(rdev))
1980 args.v2.ucHPD_ID = chan->rec.hpd;
1981
1982 - atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
1983 + atom_execute_table_scratch_unlocked(rdev->mode_info.atom_context, index, (uint32_t *)&args);
1984
1985 *ack = args.v1.ucReplyStatus;
1986
1987 @@ -147,6 +148,7 @@ static int radeon_process_aux_ch(struct radeon_i2c_chan *chan,
1988
1989 r = recv_bytes;
1990 done:
1991 + mutex_unlock(&rdev->mode_info.atom_context->scratch_mutex);
1992 mutex_unlock(&chan->mutex);
1993
1994 return r;
1995 diff --git a/drivers/gpu/drm/radeon/atombios_i2c.c b/drivers/gpu/drm/radeon/atombios_i2c.c
1996 index 9c570fb15b8c..4157780585a0 100644
1997 --- a/drivers/gpu/drm/radeon/atombios_i2c.c
1998 +++ b/drivers/gpu/drm/radeon/atombios_i2c.c
1999 @@ -48,6 +48,7 @@ static int radeon_process_i2c_ch(struct radeon_i2c_chan *chan,
2000 memset(&args, 0, sizeof(args));
2001
2002 mutex_lock(&chan->mutex);
2003 + mutex_lock(&rdev->mode_info.atom_context->scratch_mutex);
2004
2005 base = (unsigned char *)rdev->mode_info.atom_context->scratch;
2006
2007 @@ -82,7 +83,7 @@ static int radeon_process_i2c_ch(struct radeon_i2c_chan *chan,
2008 args.ucSlaveAddr = slave_addr << 1;
2009 args.ucLineNumber = chan->rec.i2c_id;
2010
2011 - atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
2012 + atom_execute_table_scratch_unlocked(rdev->mode_info.atom_context, index, (uint32_t *)&args);
2013
2014 /* error */
2015 if (args.ucStatus != HW_ASSISTED_I2C_STATUS_SUCCESS) {
2016 @@ -95,6 +96,7 @@ static int radeon_process_i2c_ch(struct radeon_i2c_chan *chan,
2017 radeon_atom_copy_swap(buf, base, num, false);
2018
2019 done:
2020 + mutex_unlock(&rdev->mode_info.atom_context->scratch_mutex);
2021 mutex_unlock(&chan->mutex);
2022
2023 return r;
2024 diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
2025 index 3d546c606b43..32d8cef2d230 100644
2026 --- a/drivers/gpu/drm/radeon/cik.c
2027 +++ b/drivers/gpu/drm/radeon/cik.c
2028 @@ -4315,8 +4315,8 @@ static int cik_cp_gfx_start(struct radeon_device *rdev)
2029 /* init the CE partitions. CE only used for gfx on CIK */
2030 radeon_ring_write(ring, PACKET3(PACKET3_SET_BASE, 2));
2031 radeon_ring_write(ring, PACKET3_BASE_INDEX(CE_PARTITION_BASE));
2032 - radeon_ring_write(ring, 0xc000);
2033 - radeon_ring_write(ring, 0xc000);
2034 + radeon_ring_write(ring, 0x8000);
2035 + radeon_ring_write(ring, 0x8000);
2036
2037 /* setup clear context state */
2038 radeon_ring_write(ring, PACKET3(PACKET3_PREAMBLE_CNTL, 0));
2039 @@ -9447,6 +9447,9 @@ void dce8_bandwidth_update(struct radeon_device *rdev)
2040 u32 num_heads = 0, lb_size;
2041 int i;
2042
2043 + if (!rdev->mode_info.mode_config_initialized)
2044 + return;
2045 +
2046 radeon_update_display_priority(rdev);
2047
2048 for (i = 0; i < rdev->num_crtc; i++) {
2049 diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c
2050 index e8eea36b52d1..dd0c4919ea0e 100644
2051 --- a/drivers/gpu/drm/radeon/cik_sdma.c
2052 +++ b/drivers/gpu/drm/radeon/cik_sdma.c
2053 @@ -666,17 +666,20 @@ int cik_sdma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
2054 {
2055 struct radeon_ib ib;
2056 unsigned i;
2057 + unsigned index;
2058 int r;
2059 - void __iomem *ptr = (void *)rdev->vram_scratch.ptr;
2060 u32 tmp = 0;
2061 + u64 gpu_addr;
2062
2063 - if (!ptr) {
2064 - DRM_ERROR("invalid vram scratch pointer\n");
2065 - return -EINVAL;
2066 - }
2067 + if (ring->idx == R600_RING_TYPE_DMA_INDEX)
2068 + index = R600_WB_DMA_RING_TEST_OFFSET;
2069 + else
2070 + index = CAYMAN_WB_DMA1_RING_TEST_OFFSET;
2071 +
2072 + gpu_addr = rdev->wb.gpu_addr + index;
2073
2074 tmp = 0xCAFEDEAD;
2075 - writel(tmp, ptr);
2076 + rdev->wb.wb[index/4] = cpu_to_le32(tmp);
2077
2078 r = radeon_ib_get(rdev, ring->idx, &ib, NULL, 256);
2079 if (r) {
2080 @@ -685,8 +688,8 @@ int cik_sdma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
2081 }
2082
2083 ib.ptr[0] = SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0);
2084 - ib.ptr[1] = rdev->vram_scratch.gpu_addr & 0xfffffffc;
2085 - ib.ptr[2] = upper_32_bits(rdev->vram_scratch.gpu_addr);
2086 + ib.ptr[1] = lower_32_bits(gpu_addr);
2087 + ib.ptr[2] = upper_32_bits(gpu_addr);
2088 ib.ptr[3] = 1;
2089 ib.ptr[4] = 0xDEADBEEF;
2090 ib.length_dw = 5;
2091 @@ -703,7 +706,7 @@ int cik_sdma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
2092 return r;
2093 }
2094 for (i = 0; i < rdev->usec_timeout; i++) {
2095 - tmp = readl(ptr);
2096 + tmp = le32_to_cpu(rdev->wb.wb[index/4]);
2097 if (tmp == 0xDEADBEEF)
2098 break;
2099 DRM_UDELAY(1);
2100 diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
2101 index e50807c29f69..5d18cfe60e1f 100644
2102 --- a/drivers/gpu/drm/radeon/evergreen.c
2103 +++ b/drivers/gpu/drm/radeon/evergreen.c
2104 @@ -2346,6 +2346,9 @@ void evergreen_bandwidth_update(struct radeon_device *rdev)
2105 u32 num_heads = 0, lb_size;
2106 int i;
2107
2108 + if (!rdev->mode_info.mode_config_initialized)
2109 + return;
2110 +
2111 radeon_update_display_priority(rdev);
2112
2113 for (i = 0; i < rdev->num_crtc; i++) {
2114 @@ -2553,6 +2556,7 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav
2115 WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1);
2116 tmp |= EVERGREEN_CRTC_BLANK_DATA_EN;
2117 WREG32(EVERGREEN_CRTC_BLANK_CONTROL + crtc_offsets[i], tmp);
2118 + WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 0);
2119 }
2120 } else {
2121 tmp = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]);
2122 diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
2123 index b0098e792e62..6a5518f98296 100644
2124 --- a/drivers/gpu/drm/radeon/r100.c
2125 +++ b/drivers/gpu/drm/radeon/r100.c
2126 @@ -3204,6 +3204,9 @@ void r100_bandwidth_update(struct radeon_device *rdev)
2127 uint32_t pixel_bytes1 = 0;
2128 uint32_t pixel_bytes2 = 0;
2129
2130 + if (!rdev->mode_info.mode_config_initialized)
2131 + return;
2132 +
2133 radeon_update_display_priority(rdev);
2134
2135 if (rdev->mode_info.crtcs[0]->base.enabled) {
2136 diff --git a/drivers/gpu/drm/radeon/r600_dma.c b/drivers/gpu/drm/radeon/r600_dma.c
2137 index 44379bfca61f..5ef501bc9dc6 100644
2138 --- a/drivers/gpu/drm/radeon/r600_dma.c
2139 +++ b/drivers/gpu/drm/radeon/r600_dma.c
2140 @@ -338,17 +338,17 @@ int r600_dma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
2141 {
2142 struct radeon_ib ib;
2143 unsigned i;
2144 + unsigned index;
2145 int r;
2146 - void __iomem *ptr = (void *)rdev->vram_scratch.ptr;
2147 u32 tmp = 0;
2148 + u64 gpu_addr;
2149
2150 - if (!ptr) {
2151 - DRM_ERROR("invalid vram scratch pointer\n");
2152 - return -EINVAL;
2153 - }
2154 + if (ring->idx == R600_RING_TYPE_DMA_INDEX)
2155 + index = R600_WB_DMA_RING_TEST_OFFSET;
2156 + else
2157 + index = CAYMAN_WB_DMA1_RING_TEST_OFFSET;
2158
2159 - tmp = 0xCAFEDEAD;
2160 - writel(tmp, ptr);
2161 + gpu_addr = rdev->wb.gpu_addr + index;
2162
2163 r = radeon_ib_get(rdev, ring->idx, &ib, NULL, 256);
2164 if (r) {
2165 @@ -357,8 +357,8 @@ int r600_dma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
2166 }
2167
2168 ib.ptr[0] = DMA_PACKET(DMA_PACKET_WRITE, 0, 0, 1);
2169 - ib.ptr[1] = rdev->vram_scratch.gpu_addr & 0xfffffffc;
2170 - ib.ptr[2] = upper_32_bits(rdev->vram_scratch.gpu_addr) & 0xff;
2171 + ib.ptr[1] = lower_32_bits(gpu_addr);
2172 + ib.ptr[2] = upper_32_bits(gpu_addr) & 0xff;
2173 ib.ptr[3] = 0xDEADBEEF;
2174 ib.length_dw = 4;
2175
2176 @@ -374,7 +374,7 @@ int r600_dma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
2177 return r;
2178 }
2179 for (i = 0; i < rdev->usec_timeout; i++) {
2180 - tmp = readl(ptr);
2181 + tmp = le32_to_cpu(rdev->wb.wb[index/4]);
2182 if (tmp == 0xDEADBEEF)
2183 break;
2184 DRM_UDELAY(1);
2185 diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
2186 index 6684fbf09929..5d4416fbf124 100644
2187 --- a/drivers/gpu/drm/radeon/radeon_device.c
2188 +++ b/drivers/gpu/drm/radeon/radeon_device.c
2189 @@ -952,6 +952,7 @@ int radeon_atombios_init(struct radeon_device *rdev)
2190 }
2191
2192 mutex_init(&rdev->mode_info.atom_context->mutex);
2193 + mutex_init(&rdev->mode_info.atom_context->scratch_mutex);
2194 radeon_atom_initialize_bios_scratch_regs(rdev->ddev);
2195 atom_allocate_fb_scratch(rdev->mode_info.atom_context);
2196 return 0;
2197 diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
2198 index 5f6db4629aaa..9acb1c3c005b 100644
2199 --- a/drivers/gpu/drm/radeon/rs600.c
2200 +++ b/drivers/gpu/drm/radeon/rs600.c
2201 @@ -879,6 +879,9 @@ void rs600_bandwidth_update(struct radeon_device *rdev)
2202 u32 d1mode_priority_a_cnt, d2mode_priority_a_cnt;
2203 /* FIXME: implement full support */
2204
2205 + if (!rdev->mode_info.mode_config_initialized)
2206 + return;
2207 +
2208 radeon_update_display_priority(rdev);
2209
2210 if (rdev->mode_info.crtcs[0]->base.enabled)
2211 diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c
2212 index 3462b64369bf..0a2d36e81108 100644
2213 --- a/drivers/gpu/drm/radeon/rs690.c
2214 +++ b/drivers/gpu/drm/radeon/rs690.c
2215 @@ -579,6 +579,9 @@ void rs690_bandwidth_update(struct radeon_device *rdev)
2216 u32 d1mode_priority_a_cnt, d1mode_priority_b_cnt;
2217 u32 d2mode_priority_a_cnt, d2mode_priority_b_cnt;
2218
2219 + if (!rdev->mode_info.mode_config_initialized)
2220 + return;
2221 +
2222 radeon_update_display_priority(rdev);
2223
2224 if (rdev->mode_info.crtcs[0]->base.enabled)
2225 diff --git a/drivers/gpu/drm/radeon/rv515.c b/drivers/gpu/drm/radeon/rv515.c
2226 index 8a477bf1fdb3..c55d653aaf5f 100644
2227 --- a/drivers/gpu/drm/radeon/rv515.c
2228 +++ b/drivers/gpu/drm/radeon/rv515.c
2229 @@ -1277,6 +1277,9 @@ void rv515_bandwidth_update(struct radeon_device *rdev)
2230 struct drm_display_mode *mode0 = NULL;
2231 struct drm_display_mode *mode1 = NULL;
2232
2233 + if (!rdev->mode_info.mode_config_initialized)
2234 + return;
2235 +
2236 radeon_update_display_priority(rdev);
2237
2238 if (rdev->mode_info.crtcs[0]->base.enabled)
2239 diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
2240 index 3a0b973e8a96..7f13a824a613 100644
2241 --- a/drivers/gpu/drm/radeon/si.c
2242 +++ b/drivers/gpu/drm/radeon/si.c
2243 @@ -2384,6 +2384,9 @@ void dce6_bandwidth_update(struct radeon_device *rdev)
2244 u32 num_heads = 0, lb_size;
2245 int i;
2246
2247 + if (!rdev->mode_info.mode_config_initialized)
2248 + return;
2249 +
2250 radeon_update_display_priority(rdev);
2251
2252 for (i = 0; i < rdev->num_crtc; i++) {
2253 diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
2254 index 0600c50e6215..5ba2a86aab6a 100644
2255 --- a/drivers/infiniband/core/uverbs_cmd.c
2256 +++ b/drivers/infiniband/core/uverbs_cmd.c
2257 @@ -2518,6 +2518,8 @@ ssize_t ib_uverbs_create_ah(struct ib_uverbs_file *file,
2258 attr.grh.sgid_index = cmd.attr.grh.sgid_index;
2259 attr.grh.hop_limit = cmd.attr.grh.hop_limit;
2260 attr.grh.traffic_class = cmd.attr.grh.traffic_class;
2261 + attr.vlan_id = 0;
2262 + memset(&attr.dmac, 0, sizeof(attr.dmac));
2263 memcpy(attr.grh.dgid.raw, cmd.attr.grh.dgid, 16);
2264
2265 ah = ib_create_ah(pd, &attr);
2266 diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
2267 index 2b0ae8cc8e51..d125a019383f 100644
2268 --- a/drivers/input/mouse/alps.c
2269 +++ b/drivers/input/mouse/alps.c
2270 @@ -1156,7 +1156,13 @@ static psmouse_ret_t alps_process_byte(struct psmouse *psmouse)
2271 {
2272 struct alps_data *priv = psmouse->private;
2273
2274 - if ((psmouse->packet[0] & 0xc8) == 0x08) { /* PS/2 packet */
2275 + /*
2276 + * Check if we are dealing with a bare PS/2 packet, presumably from
2277 + * a device connected to the external PS/2 port. Because bare PS/2
2278 + * protocol does not have enough constant bits to self-synchronize
2279 + * properly we only do this if the device is fully synchronized.
2280 + */
2281 + if (!psmouse->out_of_sync_cnt && (psmouse->packet[0] & 0xc8) == 0x08) {
2282 if (psmouse->pktcnt == 3) {
2283 alps_report_bare_ps2_packet(psmouse, psmouse->packet,
2284 true);
2285 @@ -1180,12 +1186,27 @@ static psmouse_ret_t alps_process_byte(struct psmouse *psmouse)
2286 }
2287
2288 /* Bytes 2 - pktsize should have 0 in the highest bit */
2289 - if ((priv->proto_version < ALPS_PROTO_V5) &&
2290 + if (priv->proto_version < ALPS_PROTO_V5 &&
2291 psmouse->pktcnt >= 2 && psmouse->pktcnt <= psmouse->pktsize &&
2292 (psmouse->packet[psmouse->pktcnt - 1] & 0x80)) {
2293 psmouse_dbg(psmouse, "refusing packet[%i] = %x\n",
2294 psmouse->pktcnt - 1,
2295 psmouse->packet[psmouse->pktcnt - 1]);
2296 +
2297 + if (priv->proto_version == ALPS_PROTO_V3 &&
2298 + psmouse->pktcnt == psmouse->pktsize) {
2299 + /*
2300 + * Some Dell boxes, such as Latitude E6440 or E7440
2301 + * with closed lid, quite often smash last byte of
2302 + * otherwise valid packet with 0xff. Given that the
2303 + * next packet is very likely to be valid let's
2304 + * report PSMOUSE_FULL_PACKET but not process data,
2305 + * rather than reporting PSMOUSE_BAD_DATA and
2306 + * filling the logs.
2307 + */
2308 + return PSMOUSE_FULL_PACKET;
2309 + }
2310 +
2311 return PSMOUSE_BAD_DATA;
2312 }
2313
2314 @@ -2389,6 +2410,9 @@ int alps_init(struct psmouse *psmouse)
2315 /* We are having trouble resyncing ALPS touchpads so disable it for now */
2316 psmouse->resync_time = 0;
2317
2318 + /* Allow 2 invalid packets without resetting device */
2319 + psmouse->resetafter = psmouse->pktsize * 2;
2320 +
2321 return 0;
2322
2323 init_fail:
2324 diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
2325 index b5b630c484c5..2e8f3ba7b2bd 100644
2326 --- a/drivers/input/mouse/synaptics.c
2327 +++ b/drivers/input/mouse/synaptics.c
2328 @@ -135,8 +135,8 @@ static const struct min_max_quirk min_max_pnpid_table[] = {
2329 1232, 5710, 1156, 4696
2330 },
2331 {
2332 - (const char * const []){"LEN0034", "LEN0036", "LEN2002",
2333 - "LEN2004", NULL},
2334 + (const char * const []){"LEN0034", "LEN0036", "LEN0039",
2335 + "LEN2002", "LEN2004", NULL},
2336 1024, 5112, 2024, 4832
2337 },
2338 {
2339 @@ -163,6 +163,7 @@ static const char * const topbuttonpad_pnp_ids[] = {
2340 "LEN0036", /* T440 */
2341 "LEN0037",
2342 "LEN0038",
2343 + "LEN0039", /* T440s */
2344 "LEN0041",
2345 "LEN0042", /* Yoga */
2346 "LEN0045",
2347 diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
2348 index 9ea5b6041eb2..0be200b6dbf2 100644
2349 --- a/drivers/md/dm-bufio.c
2350 +++ b/drivers/md/dm-bufio.c
2351 @@ -1435,9 +1435,9 @@ static void drop_buffers(struct dm_bufio_client *c)
2352
2353 /*
2354 * Test if the buffer is unused and too old, and commit it.
2355 - * At if noio is set, we must not do any I/O because we hold
2356 - * dm_bufio_clients_lock and we would risk deadlock if the I/O gets rerouted to
2357 - * different bufio client.
2358 + * And if GFP_NOFS is used, we must not do any I/O because we hold
2359 + * dm_bufio_clients_lock and we would risk deadlock if the I/O gets
2360 + * rerouted to different bufio client.
2361 */
2362 static int __cleanup_old_buffer(struct dm_buffer *b, gfp_t gfp,
2363 unsigned long max_jiffies)
2364 @@ -1445,7 +1445,7 @@ static int __cleanup_old_buffer(struct dm_buffer *b, gfp_t gfp,
2365 if (jiffies - b->last_accessed < max_jiffies)
2366 return 0;
2367
2368 - if (!(gfp & __GFP_IO)) {
2369 + if (!(gfp & __GFP_FS)) {
2370 if (test_bit(B_READING, &b->state) ||
2371 test_bit(B_WRITING, &b->state) ||
2372 test_bit(B_DIRTY, &b->state))
2373 @@ -1487,7 +1487,7 @@ dm_bufio_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
2374 unsigned long freed;
2375
2376 c = container_of(shrink, struct dm_bufio_client, shrinker);
2377 - if (sc->gfp_mask & __GFP_IO)
2378 + if (sc->gfp_mask & __GFP_FS)
2379 dm_bufio_lock(c);
2380 else if (!dm_bufio_trylock(c))
2381 return SHRINK_STOP;
2382 @@ -1504,7 +1504,7 @@ dm_bufio_shrink_count(struct shrinker *shrink, struct shrink_control *sc)
2383 unsigned long count;
2384
2385 c = container_of(shrink, struct dm_bufio_client, shrinker);
2386 - if (sc->gfp_mask & __GFP_IO)
2387 + if (sc->gfp_mask & __GFP_FS)
2388 dm_bufio_lock(c);
2389 else if (!dm_bufio_trylock(c))
2390 return 0;
2391 diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
2392 index 4880b69e2e9e..59715389b3cf 100644
2393 --- a/drivers/md/dm-raid.c
2394 +++ b/drivers/md/dm-raid.c
2395 @@ -785,8 +785,7 @@ struct dm_raid_superblock {
2396 __le32 layout;
2397 __le32 stripe_sectors;
2398
2399 - __u8 pad[452]; /* Round struct to 512 bytes. */
2400 - /* Always set to 0 when writing. */
2401 + /* Remainder of a logical block is zero-filled when writing (see super_sync()). */
2402 } __packed;
2403
2404 static int read_disk_sb(struct md_rdev *rdev, int size)
2405 @@ -823,7 +822,7 @@ static void super_sync(struct mddev *mddev, struct md_rdev *rdev)
2406 test_bit(Faulty, &(rs->dev[i].rdev.flags)))
2407 failed_devices |= (1ULL << i);
2408
2409 - memset(sb, 0, sizeof(*sb));
2410 + memset(sb + 1, 0, rdev->sb_size - sizeof(*sb));
2411
2412 sb->magic = cpu_to_le32(DM_RAID_MAGIC);
2413 sb->features = cpu_to_le32(0); /* No features yet */
2414 @@ -858,7 +857,11 @@ static int super_load(struct md_rdev *rdev, struct md_rdev *refdev)
2415 uint64_t events_sb, events_refsb;
2416
2417 rdev->sb_start = 0;
2418 - rdev->sb_size = sizeof(*sb);
2419 + rdev->sb_size = bdev_logical_block_size(rdev->meta_bdev);
2420 + if (rdev->sb_size < sizeof(*sb) || rdev->sb_size > PAGE_SIZE) {
2421 + DMERR("superblock size of a logical block is no longer valid");
2422 + return -EINVAL;
2423 + }
2424
2425 ret = read_disk_sb(rdev, rdev->sb_size);
2426 if (ret)
2427 diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
2428 index 4843801173fe..0f86d802b533 100644
2429 --- a/drivers/md/dm-thin.c
2430 +++ b/drivers/md/dm-thin.c
2431 @@ -1936,6 +1936,14 @@ static int thin_bio_map(struct dm_target *ti, struct bio *bio)
2432 return DM_MAPIO_SUBMITTED;
2433 }
2434
2435 + /*
2436 + * We must hold the virtual cell before doing the lookup, otherwise
2437 + * there's a race with discard.
2438 + */
2439 + build_virtual_key(tc->td, block, &key);
2440 + if (dm_bio_detain(tc->pool->prison, &key, bio, &cell1, &cell_result))
2441 + return DM_MAPIO_SUBMITTED;
2442 +
2443 r = dm_thin_find_block(td, block, 0, &result);
2444
2445 /*
2446 @@ -1959,13 +1967,10 @@ static int thin_bio_map(struct dm_target *ti, struct bio *bio)
2447 * shared flag will be set in their case.
2448 */
2449 thin_defer_bio(tc, bio);
2450 + cell_defer_no_holder_no_free(tc, &cell1);
2451 return DM_MAPIO_SUBMITTED;
2452 }
2453
2454 - build_virtual_key(tc->td, block, &key);
2455 - if (dm_bio_detain(tc->pool->prison, &key, bio, &cell1, &cell_result))
2456 - return DM_MAPIO_SUBMITTED;
2457 -
2458 build_data_key(tc->td, result.block, &key);
2459 if (dm_bio_detain(tc->pool->prison, &key, bio, &cell2, &cell_result)) {
2460 cell_defer_no_holder_no_free(tc, &cell1);
2461 @@ -1986,6 +1991,7 @@ static int thin_bio_map(struct dm_target *ti, struct bio *bio)
2462 * of doing so.
2463 */
2464 handle_unserviceable_bio(tc->pool, bio);
2465 + cell_defer_no_holder_no_free(tc, &cell1);
2466 return DM_MAPIO_SUBMITTED;
2467 }
2468 /* fall through */
2469 @@ -1996,6 +2002,7 @@ static int thin_bio_map(struct dm_target *ti, struct bio *bio)
2470 * provide the hint to load the metadata into cache.
2471 */
2472 thin_defer_bio(tc, bio);
2473 + cell_defer_no_holder_no_free(tc, &cell1);
2474 return DM_MAPIO_SUBMITTED;
2475
2476 default:
2477 @@ -2005,6 +2012,7 @@ static int thin_bio_map(struct dm_target *ti, struct bio *bio)
2478 * pool is switched to fail-io mode.
2479 */
2480 bio_io_error(bio);
2481 + cell_defer_no_holder_no_free(tc, &cell1);
2482 return DM_MAPIO_SUBMITTED;
2483 }
2484 }
2485 diff --git a/drivers/md/md.c b/drivers/md/md.c
2486 index 1294238610df..b7f603c2a7d4 100644
2487 --- a/drivers/md/md.c
2488 +++ b/drivers/md/md.c
2489 @@ -5313,6 +5313,7 @@ static int md_set_readonly(struct mddev *mddev, struct block_device *bdev)
2490 printk("md: %s still in use.\n",mdname(mddev));
2491 if (did_freeze) {
2492 clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
2493 + set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
2494 md_wakeup_thread(mddev->thread);
2495 }
2496 err = -EBUSY;
2497 @@ -5327,6 +5328,8 @@ static int md_set_readonly(struct mddev *mddev, struct block_device *bdev)
2498 mddev->ro = 1;
2499 set_disk_ro(mddev->gendisk, 1);
2500 clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
2501 + set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
2502 + md_wakeup_thread(mddev->thread);
2503 sysfs_notify_dirent_safe(mddev->sysfs_state);
2504 err = 0;
2505 }
2506 @@ -5370,6 +5373,7 @@ static int do_md_stop(struct mddev * mddev, int mode,
2507 mutex_unlock(&mddev->open_mutex);
2508 if (did_freeze) {
2509 clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
2510 + set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
2511 md_wakeup_thread(mddev->thread);
2512 }
2513 return -EBUSY;
2514 diff --git a/drivers/md/persistent-data/dm-btree-internal.h b/drivers/md/persistent-data/dm-btree-internal.h
2515 index 37d367bb9aa8..bf2b80d5c470 100644
2516 --- a/drivers/md/persistent-data/dm-btree-internal.h
2517 +++ b/drivers/md/persistent-data/dm-btree-internal.h
2518 @@ -42,6 +42,12 @@ struct btree_node {
2519 } __packed;
2520
2521
2522 +/*
2523 + * Locks a block using the btree node validator.
2524 + */
2525 +int bn_read_lock(struct dm_btree_info *info, dm_block_t b,
2526 + struct dm_block **result);
2527 +
2528 void inc_children(struct dm_transaction_manager *tm, struct btree_node *n,
2529 struct dm_btree_value_type *vt);
2530
2531 diff --git a/drivers/md/persistent-data/dm-btree-spine.c b/drivers/md/persistent-data/dm-btree-spine.c
2532 index cf9fd676ae44..1b5e13ec7f96 100644
2533 --- a/drivers/md/persistent-data/dm-btree-spine.c
2534 +++ b/drivers/md/persistent-data/dm-btree-spine.c
2535 @@ -92,7 +92,7 @@ struct dm_block_validator btree_node_validator = {
2536
2537 /*----------------------------------------------------------------*/
2538
2539 -static int bn_read_lock(struct dm_btree_info *info, dm_block_t b,
2540 +int bn_read_lock(struct dm_btree_info *info, dm_block_t b,
2541 struct dm_block **result)
2542 {
2543 return dm_tm_read_lock(info->tm, b, &btree_node_validator, result);
2544 diff --git a/drivers/md/persistent-data/dm-btree.c b/drivers/md/persistent-data/dm-btree.c
2545 index 416060c25709..200ac12a1d40 100644
2546 --- a/drivers/md/persistent-data/dm-btree.c
2547 +++ b/drivers/md/persistent-data/dm-btree.c
2548 @@ -847,22 +847,26 @@ EXPORT_SYMBOL_GPL(dm_btree_find_lowest_key);
2549 * FIXME: We shouldn't use a recursive algorithm when we have limited stack
2550 * space. Also this only works for single level trees.
2551 */
2552 -static int walk_node(struct ro_spine *s, dm_block_t block,
2553 +static int walk_node(struct dm_btree_info *info, dm_block_t block,
2554 int (*fn)(void *context, uint64_t *keys, void *leaf),
2555 void *context)
2556 {
2557 int r;
2558 unsigned i, nr;
2559 + struct dm_block *node;
2560 struct btree_node *n;
2561 uint64_t keys;
2562
2563 - r = ro_step(s, block);
2564 - n = ro_node(s);
2565 + r = bn_read_lock(info, block, &node);
2566 + if (r)
2567 + return r;
2568 +
2569 + n = dm_block_data(node);
2570
2571 nr = le32_to_cpu(n->header.nr_entries);
2572 for (i = 0; i < nr; i++) {
2573 if (le32_to_cpu(n->header.flags) & INTERNAL_NODE) {
2574 - r = walk_node(s, value64(n, i), fn, context);
2575 + r = walk_node(info, value64(n, i), fn, context);
2576 if (r)
2577 goto out;
2578 } else {
2579 @@ -874,7 +878,7 @@ static int walk_node(struct ro_spine *s, dm_block_t block,
2580 }
2581
2582 out:
2583 - ro_pop(s);
2584 + dm_tm_unlock(info->tm, node);
2585 return r;
2586 }
2587
2588 @@ -882,15 +886,7 @@ int dm_btree_walk(struct dm_btree_info *info, dm_block_t root,
2589 int (*fn)(void *context, uint64_t *keys, void *leaf),
2590 void *context)
2591 {
2592 - int r;
2593 - struct ro_spine spine;
2594 -
2595 BUG_ON(info->levels > 1);
2596 -
2597 - init_ro_spine(&spine, info);
2598 - r = walk_node(&spine, root, fn, context);
2599 - exit_ro_spine(&spine);
2600 -
2601 - return r;
2602 + return walk_node(info, root, fn, context);
2603 }
2604 EXPORT_SYMBOL_GPL(dm_btree_walk);
2605 diff --git a/drivers/media/usb/ttusb-dec/ttusbdecfe.c b/drivers/media/usb/ttusb-dec/ttusbdecfe.c
2606 index 5c45c9d0712d..9c29552aedec 100644
2607 --- a/drivers/media/usb/ttusb-dec/ttusbdecfe.c
2608 +++ b/drivers/media/usb/ttusb-dec/ttusbdecfe.c
2609 @@ -156,6 +156,9 @@ static int ttusbdecfe_dvbs_diseqc_send_master_cmd(struct dvb_frontend* fe, struc
2610 0x00, 0x00, 0x00, 0x00,
2611 0x00, 0x00 };
2612
2613 + if (cmd->msg_len > sizeof(b) - 4)
2614 + return -EINVAL;
2615 +
2616 memcpy(&b[4], cmd->msg, cmd->msg_len);
2617
2618 state->config->send_command(fe, 0x72,
2619 diff --git a/drivers/mfd/max77693.c b/drivers/mfd/max77693.c
2620 index 249c139ef04a..dabb0241813c 100644
2621 --- a/drivers/mfd/max77693.c
2622 +++ b/drivers/mfd/max77693.c
2623 @@ -237,7 +237,7 @@ static int max77693_i2c_probe(struct i2c_client *i2c,
2624 goto err_irq_charger;
2625 }
2626
2627 - ret = regmap_add_irq_chip(max77693->regmap, max77693->irq,
2628 + ret = regmap_add_irq_chip(max77693->regmap_muic, max77693->irq,
2629 IRQF_ONESHOT | IRQF_SHARED |
2630 IRQF_TRIGGER_FALLING, 0,
2631 &max77693_muic_irq_chip,
2632 @@ -247,6 +247,17 @@ static int max77693_i2c_probe(struct i2c_client *i2c,
2633 goto err_irq_muic;
2634 }
2635
2636 + /* Unmask interrupts from all blocks in interrupt source register */
2637 + ret = regmap_update_bits(max77693->regmap,
2638 + MAX77693_PMIC_REG_INTSRC_MASK,
2639 + SRC_IRQ_ALL, (unsigned int)~SRC_IRQ_ALL);
2640 + if (ret < 0) {
2641 + dev_err(max77693->dev,
2642 + "Could not unmask interrupts in INTSRC: %d\n",
2643 + ret);
2644 + goto err_intsrc;
2645 + }
2646 +
2647 pm_runtime_set_active(max77693->dev);
2648
2649 ret = mfd_add_devices(max77693->dev, -1, max77693_devs,
2650 @@ -258,6 +269,7 @@ static int max77693_i2c_probe(struct i2c_client *i2c,
2651
2652 err_mfd:
2653 mfd_remove_devices(max77693->dev);
2654 +err_intsrc:
2655 regmap_del_irq_chip(max77693->irq, max77693->irq_data_muic);
2656 err_irq_muic:
2657 regmap_del_irq_chip(max77693->irq, max77693->irq_data_charger);
2658 diff --git a/drivers/mfd/twl4030-power.c b/drivers/mfd/twl4030-power.c
2659 index 4d3ff3771491..542f1a8247f5 100644
2660 --- a/drivers/mfd/twl4030-power.c
2661 +++ b/drivers/mfd/twl4030-power.c
2662 @@ -44,6 +44,15 @@ static u8 twl4030_start_script_address = 0x2b;
2663 #define PWR_DEVSLP BIT(1)
2664 #define PWR_DEVOFF BIT(0)
2665
2666 +/* Register bits for CFG_P1_TRANSITION (also for P2 and P3) */
2667 +#define STARTON_SWBUG BIT(7) /* Start on watchdog */
2668 +#define STARTON_VBUS BIT(5) /* Start on VBUS */
2669 +#define STARTON_VBAT BIT(4) /* Start on battery insert */
2670 +#define STARTON_RTC BIT(3) /* Start on RTC */
2671 +#define STARTON_USB BIT(2) /* Start on USB host */
2672 +#define STARTON_CHG BIT(1) /* Start on charger */
2673 +#define STARTON_PWON BIT(0) /* Start on PWRON button */
2674 +
2675 #define SEQ_OFFSYNC (1 << 0)
2676
2677 #define PHY_TO_OFF_PM_MASTER(p) (p - 0x36)
2678 @@ -606,6 +615,44 @@ twl4030_power_configure_resources(const struct twl4030_power_data *pdata)
2679 return 0;
2680 }
2681
2682 +static int twl4030_starton_mask_and_set(u8 bitmask, u8 bitvalues)
2683 +{
2684 + u8 regs[3] = { TWL4030_PM_MASTER_CFG_P1_TRANSITION,
2685 + TWL4030_PM_MASTER_CFG_P2_TRANSITION,
2686 + TWL4030_PM_MASTER_CFG_P3_TRANSITION, };
2687 + u8 val;
2688 + int i, err;
2689 +
2690 + err = twl_i2c_write_u8(TWL_MODULE_PM_MASTER, TWL4030_PM_MASTER_KEY_CFG1,
2691 + TWL4030_PM_MASTER_PROTECT_KEY);
2692 + if (err)
2693 + goto relock;
2694 + err = twl_i2c_write_u8(TWL_MODULE_PM_MASTER,
2695 + TWL4030_PM_MASTER_KEY_CFG2,
2696 + TWL4030_PM_MASTER_PROTECT_KEY);
2697 + if (err)
2698 + goto relock;
2699 +
2700 + for (i = 0; i < sizeof(regs); i++) {
2701 + err = twl_i2c_read_u8(TWL_MODULE_PM_MASTER,
2702 + &val, regs[i]);
2703 + if (err)
2704 + break;
2705 + val = (~bitmask & val) | (bitmask & bitvalues);
2706 + err = twl_i2c_write_u8(TWL_MODULE_PM_MASTER,
2707 + val, regs[i]);
2708 + if (err)
2709 + break;
2710 + }
2711 +
2712 + if (err)
2713 + pr_err("TWL4030 Register access failed: %i\n", err);
2714 +
2715 +relock:
2716 + return twl_i2c_write_u8(TWL_MODULE_PM_MASTER, 0,
2717 + TWL4030_PM_MASTER_PROTECT_KEY);
2718 +}
2719 +
2720 /*
2721 * In master mode, start the power off sequence.
2722 * After a successful execution, TWL shuts down the power to the SoC
2723 @@ -615,6 +662,11 @@ void twl4030_power_off(void)
2724 {
2725 int err;
2726
2727 + /* Disable start on charger or VBUS as it can break poweroff */
2728 + err = twl4030_starton_mask_and_set(STARTON_VBUS | STARTON_CHG, 0);
2729 + if (err)
2730 + pr_err("TWL4030 Unable to configure start-up\n");
2731 +
2732 err = twl_i2c_write_u8(TWL_MODULE_PM_MASTER, PWR_DEVOFF,
2733 TWL4030_PM_MASTER_P1_SW_EVENTS);
2734 if (err)
2735 diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
2736 index 71068d7d930d..ce60b960cd6c 100644
2737 --- a/drivers/net/ethernet/broadcom/bcmsysport.c
2738 +++ b/drivers/net/ethernet/broadcom/bcmsysport.c
2739 @@ -1384,6 +1384,9 @@ static void bcm_sysport_netif_start(struct net_device *dev)
2740 /* Enable NAPI */
2741 napi_enable(&priv->napi);
2742
2743 + /* Enable RX interrupt and TX ring full interrupt */
2744 + intrl2_0_mask_clear(priv, INTRL2_0_RDMA_MBDONE | INTRL2_0_TX_RING_FULL);
2745 +
2746 phy_start(priv->phydev);
2747
2748 /* Enable TX interrupts for the 32 TXQs */
2749 @@ -1486,9 +1489,6 @@ static int bcm_sysport_open(struct net_device *dev)
2750 if (ret)
2751 goto out_free_rx_ring;
2752
2753 - /* Enable RX interrupt and TX ring full interrupt */
2754 - intrl2_0_mask_clear(priv, INTRL2_0_RDMA_MBDONE | INTRL2_0_TX_RING_FULL);
2755 -
2756 /* Turn on TDMA */
2757 ret = tdma_enable_set(priv, 1);
2758 if (ret)
2759 @@ -1845,6 +1845,8 @@ static int bcm_sysport_resume(struct device *d)
2760 if (!netif_running(dev))
2761 return 0;
2762
2763 + umac_reset(priv);
2764 +
2765 /* We may have been suspended and never received a WOL event that
2766 * would turn off MPD detection, take care of that now
2767 */
2768 @@ -1872,9 +1874,6 @@ static int bcm_sysport_resume(struct device *d)
2769
2770 netif_device_attach(dev);
2771
2772 - /* Enable RX interrupt and TX ring full interrupt */
2773 - intrl2_0_mask_clear(priv, INTRL2_0_RDMA_MBDONE | INTRL2_0_TX_RING_FULL);
2774 -
2775 /* RX pipe enable */
2776 topctrl_writel(priv, 0, RX_FLUSH_CNTL);
2777
2778 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.c
2779 index 8edf0f5bd679..d4cc9b0c07f5 100644
2780 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.c
2781 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.c
2782 @@ -80,7 +80,6 @@ void cxgb4_dcb_state_fsm(struct net_device *dev,
2783 /* we're going to use Host DCB */
2784 dcb->state = CXGB4_DCB_STATE_HOST;
2785 dcb->supported = CXGB4_DCBX_HOST_SUPPORT;
2786 - dcb->enabled = 1;
2787 break;
2788 }
2789
2790 @@ -349,6 +348,12 @@ static u8 cxgb4_setstate(struct net_device *dev, u8 enabled)
2791 {
2792 struct port_info *pi = netdev2pinfo(dev);
2793
2794 + /* If DCBx is host-managed, dcb is enabled by outside lldp agents */
2795 + if (pi->dcb.state == CXGB4_DCB_STATE_HOST) {
2796 + pi->dcb.enabled = enabled;
2797 + return 0;
2798 + }
2799 +
2800 /* Firmware doesn't provide any mechanism to control the DCB state.
2801 */
2802 if (enabled != (pi->dcb.state == CXGB4_DCB_STATE_FW_ALLSYNCED))
2803 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
2804 index fac3821cef87..9f5f3c313993 100644
2805 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
2806 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
2807 @@ -688,7 +688,11 @@ int cxgb4_dcb_enabled(const struct net_device *dev)
2808 #ifdef CONFIG_CHELSIO_T4_DCB
2809 struct port_info *pi = netdev_priv(dev);
2810
2811 - return pi->dcb.state == CXGB4_DCB_STATE_FW_ALLSYNCED;
2812 + if (!pi->dcb.enabled)
2813 + return 0;
2814 +
2815 + return ((pi->dcb.state == CXGB4_DCB_STATE_FW_ALLSYNCED) ||
2816 + (pi->dcb.state == CXGB4_DCB_STATE_HOST));
2817 #else
2818 return 0;
2819 #endif
2820 diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c
2821 index b151a949f352..d44560d1d268 100644
2822 --- a/drivers/net/ethernet/marvell/mv643xx_eth.c
2823 +++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
2824 @@ -1047,7 +1047,6 @@ static int txq_reclaim(struct tx_queue *txq, int budget, int force)
2825 int tx_index;
2826 struct tx_desc *desc;
2827 u32 cmd_sts;
2828 - struct sk_buff *skb;
2829
2830 tx_index = txq->tx_used_desc;
2831 desc = &txq->tx_desc_area[tx_index];
2832 @@ -1066,19 +1065,22 @@ static int txq_reclaim(struct tx_queue *txq, int budget, int force)
2833 reclaimed++;
2834 txq->tx_desc_count--;
2835
2836 - skb = NULL;
2837 - if (cmd_sts & TX_LAST_DESC)
2838 - skb = __skb_dequeue(&txq->tx_skb);
2839 + if (!IS_TSO_HEADER(txq, desc->buf_ptr))
2840 + dma_unmap_single(mp->dev->dev.parent, desc->buf_ptr,
2841 + desc->byte_cnt, DMA_TO_DEVICE);
2842 +
2843 + if (cmd_sts & TX_ENABLE_INTERRUPT) {
2844 + struct sk_buff *skb = __skb_dequeue(&txq->tx_skb);
2845 +
2846 + if (!WARN_ON(!skb))
2847 + dev_kfree_skb(skb);
2848 + }
2849
2850 if (cmd_sts & ERROR_SUMMARY) {
2851 netdev_info(mp->dev, "tx error\n");
2852 mp->dev->stats.tx_errors++;
2853 }
2854
2855 - if (!IS_TSO_HEADER(txq, desc->buf_ptr))
2856 - dma_unmap_single(mp->dev->dev.parent, desc->buf_ptr,
2857 - desc->byte_cnt, DMA_TO_DEVICE);
2858 - dev_kfree_skb(skb);
2859 }
2860
2861 __netif_tx_unlock_bh(nq);
2862 diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c
2863 index 5e13fa5524ae..a4400035681f 100644
2864 --- a/drivers/net/ethernet/smsc/smsc911x.c
2865 +++ b/drivers/net/ethernet/smsc/smsc911x.c
2866 @@ -1342,6 +1342,42 @@ static void smsc911x_rx_multicast_update_workaround(struct smsc911x_data *pdata)
2867 spin_unlock(&pdata->mac_lock);
2868 }
2869
2870 +static int smsc911x_phy_general_power_up(struct smsc911x_data *pdata)
2871 +{
2872 + int rc = 0;
2873 +
2874 + if (!pdata->phy_dev)
2875 + return rc;
2876 +
2877 + /* If the internal PHY is in General Power-Down mode, all, except the
2878 + * management interface, is powered-down and stays in that condition as
2879 + * long as Phy register bit 0.11 is HIGH.
2880 + *
2881 + * In that case, clear the bit 0.11, so the PHY powers up and we can
2882 + * access to the phy registers.
2883 + */
2884 + rc = phy_read(pdata->phy_dev, MII_BMCR);
2885 + if (rc < 0) {
2886 + SMSC_WARN(pdata, drv, "Failed reading PHY control reg");
2887 + return rc;
2888 + }
2889 +
2890 + /* If the PHY general power-down bit is not set is not necessary to
2891 + * disable the general power down-mode.
2892 + */
2893 + if (rc & BMCR_PDOWN) {
2894 + rc = phy_write(pdata->phy_dev, MII_BMCR, rc & ~BMCR_PDOWN);
2895 + if (rc < 0) {
2896 + SMSC_WARN(pdata, drv, "Failed writing PHY control reg");
2897 + return rc;
2898 + }
2899 +
2900 + usleep_range(1000, 1500);
2901 + }
2902 +
2903 + return 0;
2904 +}
2905 +
2906 static int smsc911x_phy_disable_energy_detect(struct smsc911x_data *pdata)
2907 {
2908 int rc = 0;
2909 @@ -1415,6 +1451,16 @@ static int smsc911x_soft_reset(struct smsc911x_data *pdata)
2910 int ret;
2911
2912 /*
2913 + * Make sure to power-up the PHY chip before doing a reset, otherwise
2914 + * the reset fails.
2915 + */
2916 + ret = smsc911x_phy_general_power_up(pdata);
2917 + if (ret) {
2918 + SMSC_WARN(pdata, drv, "Failed to power-up the PHY chip");
2919 + return ret;
2920 + }
2921 +
2922 + /*
2923 * LAN9210/LAN9211/LAN9220/LAN9221 chips have an internal PHY that
2924 * are initialized in a Energy Detect Power-Down mode that prevents
2925 * the MAC chip to be software reseted. So we have to wakeup the PHY
2926 diff --git a/drivers/net/ethernet/sun/sunvnet.c b/drivers/net/ethernet/sun/sunvnet.c
2927 index f67539650c38..993779a77b34 100644
2928 --- a/drivers/net/ethernet/sun/sunvnet.c
2929 +++ b/drivers/net/ethernet/sun/sunvnet.c
2930 @@ -693,7 +693,7 @@ static int vnet_start_xmit(struct sk_buff *skb, struct net_device *dev)
2931 spin_lock_irqsave(&port->vio.lock, flags);
2932
2933 dr = &port->vio.drings[VIO_DRIVER_TX_RING];
2934 - if (unlikely(vnet_tx_dring_avail(dr) < 2)) {
2935 + if (unlikely(vnet_tx_dring_avail(dr) < 1)) {
2936 if (!netif_queue_stopped(dev)) {
2937 netif_stop_queue(dev);
2938
2939 @@ -749,7 +749,7 @@ static int vnet_start_xmit(struct sk_buff *skb, struct net_device *dev)
2940 dev->stats.tx_bytes += skb->len;
2941
2942 dr->prod = (dr->prod + 1) & (VNET_TX_RING_SIZE - 1);
2943 - if (unlikely(vnet_tx_dring_avail(dr) < 2)) {
2944 + if (unlikely(vnet_tx_dring_avail(dr) < 1)) {
2945 netif_stop_queue(dev);
2946 if (vnet_tx_dring_avail(dr) > VNET_TX_WAKEUP_THRESH(dr))
2947 netif_wake_queue(dev);
2948 diff --git a/drivers/net/ethernet/ti/cpts.c b/drivers/net/ethernet/ti/cpts.c
2949 index ab92f67da035..4a4388b813ac 100644
2950 --- a/drivers/net/ethernet/ti/cpts.c
2951 +++ b/drivers/net/ethernet/ti/cpts.c
2952 @@ -264,7 +264,7 @@ static int cpts_match(struct sk_buff *skb, unsigned int ptp_class,
2953
2954 switch (ptp_class & PTP_CLASS_PMASK) {
2955 case PTP_CLASS_IPV4:
2956 - offset += ETH_HLEN + IPV4_HLEN(data) + UDP_HLEN;
2957 + offset += ETH_HLEN + IPV4_HLEN(data + offset) + UDP_HLEN;
2958 break;
2959 case PTP_CLASS_IPV6:
2960 offset += ETH_HLEN + IP6_HLEN + UDP_HLEN;
2961 diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
2962 index 9b5481c70b4c..07c942b6ae01 100644
2963 --- a/drivers/net/macvtap.c
2964 +++ b/drivers/net/macvtap.c
2965 @@ -629,6 +629,8 @@ static void macvtap_skb_to_vnet_hdr(const struct sk_buff *skb,
2966 if (skb->ip_summed == CHECKSUM_PARTIAL) {
2967 vnet_hdr->flags = VIRTIO_NET_HDR_F_NEEDS_CSUM;
2968 vnet_hdr->csum_start = skb_checksum_start_offset(skb);
2969 + if (vlan_tx_tag_present(skb))
2970 + vnet_hdr->csum_start += VLAN_HLEN;
2971 vnet_hdr->csum_offset = skb->csum_offset;
2972 } else if (skb->ip_summed == CHECKSUM_UNNECESSARY) {
2973 vnet_hdr->flags = VIRTIO_NET_HDR_F_DATA_VALID;
2974 diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
2975 index c301e4cb37ca..2fa0c3d50692 100644
2976 --- a/drivers/net/phy/dp83640.c
2977 +++ b/drivers/net/phy/dp83640.c
2978 @@ -784,7 +784,7 @@ static int match(struct sk_buff *skb, unsigned int type, struct rxts *rxts)
2979
2980 switch (type & PTP_CLASS_PMASK) {
2981 case PTP_CLASS_IPV4:
2982 - offset += ETH_HLEN + IPV4_HLEN(data) + UDP_HLEN;
2983 + offset += ETH_HLEN + IPV4_HLEN(data + offset) + UDP_HLEN;
2984 break;
2985 case PTP_CLASS_IPV6:
2986 offset += ETH_HLEN + IP6_HLEN + UDP_HLEN;
2987 @@ -927,7 +927,7 @@ static int is_sync(struct sk_buff *skb, int type)
2988
2989 switch (type & PTP_CLASS_PMASK) {
2990 case PTP_CLASS_IPV4:
2991 - offset += ETH_HLEN + IPV4_HLEN(data) + UDP_HLEN;
2992 + offset += ETH_HLEN + IPV4_HLEN(data + offset) + UDP_HLEN;
2993 break;
2994 case PTP_CLASS_IPV6:
2995 offset += ETH_HLEN + IP6_HLEN + UDP_HLEN;
2996 diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
2997 index 90c639b0f18d..17ecdd60cf6c 100644
2998 --- a/drivers/net/ppp/ppp_generic.c
2999 +++ b/drivers/net/ppp/ppp_generic.c
3000 @@ -755,23 +755,23 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
3001
3002 err = get_filter(argp, &code);
3003 if (err >= 0) {
3004 + struct bpf_prog *pass_filter = NULL;
3005 struct sock_fprog_kern fprog = {
3006 .len = err,
3007 .filter = code,
3008 };
3009
3010 - ppp_lock(ppp);
3011 - if (ppp->pass_filter) {
3012 - bpf_prog_destroy(ppp->pass_filter);
3013 - ppp->pass_filter = NULL;
3014 + err = 0;
3015 + if (fprog.filter)
3016 + err = bpf_prog_create(&pass_filter, &fprog);
3017 + if (!err) {
3018 + ppp_lock(ppp);
3019 + if (ppp->pass_filter)
3020 + bpf_prog_destroy(ppp->pass_filter);
3021 + ppp->pass_filter = pass_filter;
3022 + ppp_unlock(ppp);
3023 }
3024 - if (fprog.filter != NULL)
3025 - err = bpf_prog_create(&ppp->pass_filter,
3026 - &fprog);
3027 - else
3028 - err = 0;
3029 kfree(code);
3030 - ppp_unlock(ppp);
3031 }
3032 break;
3033 }
3034 @@ -781,23 +781,23 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
3035
3036 err = get_filter(argp, &code);
3037 if (err >= 0) {
3038 + struct bpf_prog *active_filter = NULL;
3039 struct sock_fprog_kern fprog = {
3040 .len = err,
3041 .filter = code,
3042 };
3043
3044 - ppp_lock(ppp);
3045 - if (ppp->active_filter) {
3046 - bpf_prog_destroy(ppp->active_filter);
3047 - ppp->active_filter = NULL;
3048 + err = 0;
3049 + if (fprog.filter)
3050 + err = bpf_prog_create(&active_filter, &fprog);
3051 + if (!err) {
3052 + ppp_lock(ppp);
3053 + if (ppp->active_filter)
3054 + bpf_prog_destroy(ppp->active_filter);
3055 + ppp->active_filter = active_filter;
3056 + ppp_unlock(ppp);
3057 }
3058 - if (fprog.filter != NULL)
3059 - err = bpf_prog_create(&ppp->active_filter,
3060 - &fprog);
3061 - else
3062 - err = 0;
3063 kfree(code);
3064 - ppp_unlock(ppp);
3065 }
3066 break;
3067 }
3068 diff --git a/drivers/net/tun.c b/drivers/net/tun.c
3069 index 610d1662c500..d965e8a7a675 100644
3070 --- a/drivers/net/tun.c
3071 +++ b/drivers/net/tun.c
3072 @@ -1225,6 +1225,10 @@ static ssize_t tun_put_user(struct tun_struct *tun,
3073 struct tun_pi pi = { 0, skb->protocol };
3074 ssize_t total = 0;
3075 int vlan_offset = 0, copied;
3076 + int vlan_hlen = 0;
3077 +
3078 + if (vlan_tx_tag_present(skb))
3079 + vlan_hlen = VLAN_HLEN;
3080
3081 if (!(tun->flags & TUN_NO_PI)) {
3082 if ((len -= sizeof(pi)) < 0)
3083 @@ -1276,7 +1280,8 @@ static ssize_t tun_put_user(struct tun_struct *tun,
3084
3085 if (skb->ip_summed == CHECKSUM_PARTIAL) {
3086 gso.flags = VIRTIO_NET_HDR_F_NEEDS_CSUM;
3087 - gso.csum_start = skb_checksum_start_offset(skb);
3088 + gso.csum_start = skb_checksum_start_offset(skb) +
3089 + vlan_hlen;
3090 gso.csum_offset = skb->csum_offset;
3091 } else if (skb->ip_summed == CHECKSUM_UNNECESSARY) {
3092 gso.flags = VIRTIO_NET_HDR_F_DATA_VALID;
3093 @@ -1289,10 +1294,9 @@ static ssize_t tun_put_user(struct tun_struct *tun,
3094 }
3095
3096 copied = total;
3097 - total += skb->len;
3098 - if (!vlan_tx_tag_present(skb)) {
3099 - len = min_t(int, skb->len, len);
3100 - } else {
3101 + len = min_t(int, skb->len + vlan_hlen, len);
3102 + total += skb->len + vlan_hlen;
3103 + if (vlan_hlen) {
3104 int copy, ret;
3105 struct {
3106 __be16 h_vlan_proto;
3107 @@ -1303,8 +1307,6 @@ static ssize_t tun_put_user(struct tun_struct *tun,
3108 veth.h_vlan_TCI = htons(vlan_tx_tag_get(skb));
3109
3110 vlan_offset = offsetof(struct vlan_ethhdr, h_vlan_proto);
3111 - len = min_t(int, skb->len + VLAN_HLEN, len);
3112 - total += VLAN_HLEN;
3113
3114 copy = min_t(int, vlan_offset, len);
3115 ret = skb_copy_datagram_const_iovec(skb, 0, iv, copied, copy);
3116 diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
3117 index b4831274b0ab..81a8a296a582 100644
3118 --- a/drivers/net/vxlan.c
3119 +++ b/drivers/net/vxlan.c
3120 @@ -274,13 +274,15 @@ static inline struct vxlan_rdst *first_remote_rtnl(struct vxlan_fdb *fdb)
3121 return list_first_entry(&fdb->remotes, struct vxlan_rdst, list);
3122 }
3123
3124 -/* Find VXLAN socket based on network namespace and UDP port */
3125 -static struct vxlan_sock *vxlan_find_sock(struct net *net, __be16 port)
3126 +/* Find VXLAN socket based on network namespace, address family and UDP port */
3127 +static struct vxlan_sock *vxlan_find_sock(struct net *net,
3128 + sa_family_t family, __be16 port)
3129 {
3130 struct vxlan_sock *vs;
3131
3132 hlist_for_each_entry_rcu(vs, vs_head(net, port), hlist) {
3133 - if (inet_sk(vs->sock->sk)->inet_sport == port)
3134 + if (inet_sk(vs->sock->sk)->inet_sport == port &&
3135 + inet_sk(vs->sock->sk)->sk.sk_family == family)
3136 return vs;
3137 }
3138 return NULL;
3139 @@ -299,11 +301,12 @@ static struct vxlan_dev *vxlan_vs_find_vni(struct vxlan_sock *vs, u32 id)
3140 }
3141
3142 /* Look up VNI in a per net namespace table */
3143 -static struct vxlan_dev *vxlan_find_vni(struct net *net, u32 id, __be16 port)
3144 +static struct vxlan_dev *vxlan_find_vni(struct net *net, u32 id,
3145 + sa_family_t family, __be16 port)
3146 {
3147 struct vxlan_sock *vs;
3148
3149 - vs = vxlan_find_sock(net, port);
3150 + vs = vxlan_find_sock(net, family, port);
3151 if (!vs)
3152 return NULL;
3153
3154 @@ -620,6 +623,8 @@ static int vxlan_gro_complete(struct sk_buff *skb, int nhoff)
3155 int vxlan_len = sizeof(struct vxlanhdr) + sizeof(struct ethhdr);
3156 int err = -ENOSYS;
3157
3158 + udp_tunnel_gro_complete(skb, nhoff);
3159 +
3160 eh = (struct ethhdr *)(skb->data + nhoff + sizeof(struct vxlanhdr));
3161 type = eh->h_proto;
3162
3163 @@ -1820,7 +1825,8 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
3164 struct vxlan_dev *dst_vxlan;
3165
3166 ip_rt_put(rt);
3167 - dst_vxlan = vxlan_find_vni(vxlan->net, vni, dst_port);
3168 + dst_vxlan = vxlan_find_vni(vxlan->net, vni,
3169 + dst->sa.sa_family, dst_port);
3170 if (!dst_vxlan)
3171 goto tx_error;
3172 vxlan_encap_bypass(skb, vxlan, dst_vxlan);
3173 @@ -1874,7 +1880,8 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
3174 struct vxlan_dev *dst_vxlan;
3175
3176 dst_release(ndst);
3177 - dst_vxlan = vxlan_find_vni(vxlan->net, vni, dst_port);
3178 + dst_vxlan = vxlan_find_vni(vxlan->net, vni,
3179 + dst->sa.sa_family, dst_port);
3180 if (!dst_vxlan)
3181 goto tx_error;
3182 vxlan_encap_bypass(skb, vxlan, dst_vxlan);
3183 @@ -2034,13 +2041,15 @@ static int vxlan_init(struct net_device *dev)
3184 struct vxlan_dev *vxlan = netdev_priv(dev);
3185 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id);
3186 struct vxlan_sock *vs;
3187 + bool ipv6 = vxlan->flags & VXLAN_F_IPV6;
3188
3189 dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
3190 if (!dev->tstats)
3191 return -ENOMEM;
3192
3193 spin_lock(&vn->sock_lock);
3194 - vs = vxlan_find_sock(vxlan->net, vxlan->dst_port);
3195 + vs = vxlan_find_sock(vxlan->net, ipv6 ? AF_INET6 : AF_INET,
3196 + vxlan->dst_port);
3197 if (vs) {
3198 /* If we have a socket with same port already, reuse it */
3199 atomic_inc(&vs->refcnt);
3200 @@ -2439,6 +2448,7 @@ struct vxlan_sock *vxlan_sock_add(struct net *net, __be16 port,
3201 {
3202 struct vxlan_net *vn = net_generic(net, vxlan_net_id);
3203 struct vxlan_sock *vs;
3204 + bool ipv6 = flags & VXLAN_F_IPV6;
3205
3206 vs = vxlan_socket_create(net, port, rcv, data, flags);
3207 if (!IS_ERR(vs))
3208 @@ -2448,7 +2458,7 @@ struct vxlan_sock *vxlan_sock_add(struct net *net, __be16 port,
3209 return vs;
3210
3211 spin_lock(&vn->sock_lock);
3212 - vs = vxlan_find_sock(net, port);
3213 + vs = vxlan_find_sock(net, ipv6 ? AF_INET6 : AF_INET, port);
3214 if (vs) {
3215 if (vs->rcv == rcv)
3216 atomic_inc(&vs->refcnt);
3217 @@ -2607,7 +2617,8 @@ static int vxlan_newlink(struct net *net, struct net_device *dev,
3218 nla_get_u8(data[IFLA_VXLAN_UDP_ZERO_CSUM6_RX]))
3219 vxlan->flags |= VXLAN_F_UDP_ZERO_CSUM6_RX;
3220
3221 - if (vxlan_find_vni(net, vni, vxlan->dst_port)) {
3222 + if (vxlan_find_vni(net, vni, use_ipv6 ? AF_INET6 : AF_INET,
3223 + vxlan->dst_port)) {
3224 pr_info("duplicate VNI %u\n", vni);
3225 return -EEXIST;
3226 }
3227 diff --git a/drivers/net/wireless/iwlwifi/mvm/fw.c b/drivers/net/wireless/iwlwifi/mvm/fw.c
3228 index bf720a875e6b..c77e6bcc63d5 100644
3229 --- a/drivers/net/wireless/iwlwifi/mvm/fw.c
3230 +++ b/drivers/net/wireless/iwlwifi/mvm/fw.c
3231 @@ -282,7 +282,7 @@ int iwl_run_init_mvm_ucode(struct iwl_mvm *mvm, bool read_nvm)
3232
3233 lockdep_assert_held(&mvm->mutex);
3234
3235 - if (WARN_ON_ONCE(mvm->init_ucode_complete))
3236 + if (WARN_ON_ONCE(mvm->init_ucode_complete || mvm->calibrating))
3237 return 0;
3238
3239 iwl_init_notification_wait(&mvm->notif_wait,
3240 @@ -332,6 +332,8 @@ int iwl_run_init_mvm_ucode(struct iwl_mvm *mvm, bool read_nvm)
3241 goto out;
3242 }
3243
3244 + mvm->calibrating = true;
3245 +
3246 /* Send TX valid antennas before triggering calibrations */
3247 ret = iwl_send_tx_ant_cfg(mvm, mvm->fw->valid_tx_ant);
3248 if (ret)
3249 @@ -356,11 +358,17 @@ int iwl_run_init_mvm_ucode(struct iwl_mvm *mvm, bool read_nvm)
3250 MVM_UCODE_CALIB_TIMEOUT);
3251 if (!ret)
3252 mvm->init_ucode_complete = true;
3253 +
3254 + if (ret && iwl_mvm_is_radio_killed(mvm)) {
3255 + IWL_DEBUG_RF_KILL(mvm, "RFKILL while calibrating.\n");
3256 + ret = 1;
3257 + }
3258 goto out;
3259
3260 error:
3261 iwl_remove_notification(&mvm->notif_wait, &calib_wait);
3262 out:
3263 + mvm->calibrating = false;
3264 if (iwlmvm_mod_params.init_dbg && !mvm->nvm_data) {
3265 /* we want to debug INIT and we have no NVM - fake */
3266 mvm->nvm_data = kzalloc(sizeof(struct iwl_nvm_data) +
3267 diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
3268 index cdc272d776e7..26de13bb78a8 100644
3269 --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
3270 +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
3271 @@ -778,6 +778,7 @@ static void iwl_mvm_restart_cleanup(struct iwl_mvm *mvm)
3272 iwl_trans_stop_device(mvm->trans);
3273
3274 mvm->scan_status = IWL_MVM_SCAN_NONE;
3275 + mvm->calibrating = false;
3276
3277 /* just in case one was running */
3278 ieee80211_remain_on_channel_expired(mvm->hw);
3279 diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h
3280 index 2e73d3bd7757..c35f5557307e 100644
3281 --- a/drivers/net/wireless/iwlwifi/mvm/mvm.h
3282 +++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h
3283 @@ -541,6 +541,7 @@ struct iwl_mvm {
3284 enum iwl_ucode_type cur_ucode;
3285 bool ucode_loaded;
3286 bool init_ucode_complete;
3287 + bool calibrating;
3288 u32 error_event_table;
3289 u32 log_event_table;
3290 u32 umac_error_event_table;
3291 diff --git a/drivers/net/wireless/iwlwifi/mvm/ops.c b/drivers/net/wireless/iwlwifi/mvm/ops.c
3292 index d31a1178ae35..f9471ee9e260 100644
3293 --- a/drivers/net/wireless/iwlwifi/mvm/ops.c
3294 +++ b/drivers/net/wireless/iwlwifi/mvm/ops.c
3295 @@ -745,6 +745,7 @@ void iwl_mvm_set_hw_ctkill_state(struct iwl_mvm *mvm, bool state)
3296 static bool iwl_mvm_set_hw_rfkill_state(struct iwl_op_mode *op_mode, bool state)
3297 {
3298 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode);
3299 + bool calibrating = ACCESS_ONCE(mvm->calibrating);
3300
3301 if (state)
3302 set_bit(IWL_MVM_STATUS_HW_RFKILL, &mvm->status);
3303 @@ -753,7 +754,15 @@ static bool iwl_mvm_set_hw_rfkill_state(struct iwl_op_mode *op_mode, bool state)
3304
3305 wiphy_rfkill_set_hw_state(mvm->hw->wiphy, iwl_mvm_is_radio_killed(mvm));
3306
3307 - return state && mvm->cur_ucode != IWL_UCODE_INIT;
3308 + /* iwl_run_init_mvm_ucode is waiting for results, abort it */
3309 + if (calibrating)
3310 + iwl_abort_notification_waits(&mvm->notif_wait);
3311 +
3312 + /*
3313 + * Stop the device if we run OPERATIONAL firmware or if we are in the
3314 + * middle of the calibrations.
3315 + */
3316 + return state && (mvm->cur_ucode != IWL_UCODE_INIT || calibrating);
3317 }
3318
3319 static void iwl_mvm_free_skb(struct iwl_op_mode *op_mode, struct sk_buff *skb)
3320 diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
3321 index d7231a82fe42..6c02467a37c8 100644
3322 --- a/drivers/net/wireless/iwlwifi/pcie/trans.c
3323 +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
3324 @@ -913,7 +913,8 @@ static void iwl_trans_pcie_stop_device(struct iwl_trans *trans)
3325 * restart. So don't process again if the device is
3326 * already dead.
3327 */
3328 - if (test_bit(STATUS_DEVICE_ENABLED, &trans->status)) {
3329 + if (test_and_clear_bit(STATUS_DEVICE_ENABLED, &trans->status)) {
3330 + IWL_DEBUG_INFO(trans, "DEVICE_ENABLED bit was set and is now cleared\n");
3331 iwl_pcie_tx_stop(trans);
3332 iwl_pcie_rx_stop(trans);
3333
3334 @@ -943,7 +944,6 @@ static void iwl_trans_pcie_stop_device(struct iwl_trans *trans)
3335 /* clear all status bits */
3336 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status);
3337 clear_bit(STATUS_INT_ENABLED, &trans->status);
3338 - clear_bit(STATUS_DEVICE_ENABLED, &trans->status);
3339 clear_bit(STATUS_TPOWER_PMI, &trans->status);
3340 clear_bit(STATUS_RFKILL, &trans->status);
3341
3342 diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
3343 index 1326f6121835..6b48c865dd7a 100644
3344 --- a/drivers/net/wireless/mac80211_hwsim.c
3345 +++ b/drivers/net/wireless/mac80211_hwsim.c
3346 @@ -1987,7 +1987,7 @@ static int mac80211_hwsim_create_radio(int channels, const char *reg_alpha2,
3347 if (err != 0) {
3348 printk(KERN_DEBUG "mac80211_hwsim: device_bind_driver failed (%d)\n",
3349 err);
3350 - goto failed_hw;
3351 + goto failed_bind;
3352 }
3353
3354 skb_queue_head_init(&data->pending);
3355 @@ -2183,6 +2183,8 @@ static int mac80211_hwsim_create_radio(int channels, const char *reg_alpha2,
3356 return idx;
3357
3358 failed_hw:
3359 + device_release_driver(data->dev);
3360 +failed_bind:
3361 device_unregister(data->dev);
3362 failed_drvdata:
3363 ieee80211_free_hw(hw);
3364 diff --git a/drivers/platform/x86/asus-nb-wmi.c b/drivers/platform/x86/asus-nb-wmi.c
3365 index 3a4951f46065..c1a6cd66af42 100644
3366 --- a/drivers/platform/x86/asus-nb-wmi.c
3367 +++ b/drivers/platform/x86/asus-nb-wmi.c
3368 @@ -182,6 +182,15 @@ static const struct dmi_system_id asus_quirks[] = {
3369 },
3370 {
3371 .callback = dmi_matched,
3372 + .ident = "ASUSTeK COMPUTER INC. X550VB",
3373 + .matches = {
3374 + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
3375 + DMI_MATCH(DMI_PRODUCT_NAME, "X550VB"),
3376 + },
3377 + .driver_data = &quirk_asus_wapf4,
3378 + },
3379 + {
3380 + .callback = dmi_matched,
3381 .ident = "ASUSTeK COMPUTER INC. X55A",
3382 .matches = {
3383 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
3384 diff --git a/drivers/platform/x86/dell-wmi.c b/drivers/platform/x86/dell-wmi.c
3385 index 390e8e33d5e3..25721bf20092 100644
3386 --- a/drivers/platform/x86/dell-wmi.c
3387 +++ b/drivers/platform/x86/dell-wmi.c
3388 @@ -163,18 +163,24 @@ static void dell_wmi_notify(u32 value, void *context)
3389 const struct key_entry *key;
3390 int reported_key;
3391 u16 *buffer_entry = (u16 *)obj->buffer.pointer;
3392 + int buffer_size = obj->buffer.length/2;
3393
3394 - if (dell_new_hk_type && (buffer_entry[1] != 0x10)) {
3395 + if (buffer_size >= 2 && dell_new_hk_type && buffer_entry[1] != 0x10) {
3396 pr_info("Received unknown WMI event (0x%x)\n",
3397 buffer_entry[1]);
3398 kfree(obj);
3399 return;
3400 }
3401
3402 - if (dell_new_hk_type || buffer_entry[1] == 0x0)
3403 + if (buffer_size >= 3 && (dell_new_hk_type || buffer_entry[1] == 0x0))
3404 reported_key = (int)buffer_entry[2];
3405 - else
3406 + else if (buffer_size >= 2)
3407 reported_key = (int)buffer_entry[1] & 0xffff;
3408 + else {
3409 + pr_info("Received unknown WMI event\n");
3410 + kfree(obj);
3411 + return;
3412 + }
3413
3414 key = sparse_keymap_entry_from_scancode(dell_wmi_input_dev,
3415 reported_key);
3416 diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
3417 index 02152de135b5..ed494f37c40f 100644
3418 --- a/drivers/platform/x86/ideapad-laptop.c
3419 +++ b/drivers/platform/x86/ideapad-laptop.c
3420 @@ -837,6 +837,13 @@ static const struct dmi_system_id no_hw_rfkill_list[] = {
3421 DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 2"),
3422 },
3423 },
3424 + {
3425 + .ident = "Lenovo Yoga 3 Pro 1370",
3426 + .matches = {
3427 + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
3428 + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 3 Pro-1370"),
3429 + },
3430 + },
3431 {}
3432 };
3433
3434 diff --git a/drivers/power/bq2415x_charger.c b/drivers/power/bq2415x_charger.c
3435 index e384844a1ae1..1f49986fc605 100644
3436 --- a/drivers/power/bq2415x_charger.c
3437 +++ b/drivers/power/bq2415x_charger.c
3438 @@ -1579,8 +1579,15 @@ static int bq2415x_probe(struct i2c_client *client,
3439 if (np) {
3440 bq->notify_psy = power_supply_get_by_phandle(np, "ti,usb-charger-detection");
3441
3442 - if (!bq->notify_psy)
3443 - return -EPROBE_DEFER;
3444 + if (IS_ERR(bq->notify_psy)) {
3445 + dev_info(&client->dev,
3446 + "no 'ti,usb-charger-detection' property (err=%ld)\n",
3447 + PTR_ERR(bq->notify_psy));
3448 + bq->notify_psy = NULL;
3449 + } else if (!bq->notify_psy) {
3450 + ret = -EPROBE_DEFER;
3451 + goto error_2;
3452 + }
3453 }
3454 else if (pdata->notify_device)
3455 bq->notify_psy = power_supply_get_by_name(pdata->notify_device);
3456 @@ -1602,27 +1609,27 @@ static int bq2415x_probe(struct i2c_client *client,
3457 ret = of_property_read_u32(np, "ti,current-limit",
3458 &bq->init_data.current_limit);
3459 if (ret)
3460 - return ret;
3461 + goto error_2;
3462 ret = of_property_read_u32(np, "ti,weak-battery-voltage",
3463 &bq->init_data.weak_battery_voltage);
3464 if (ret)
3465 - return ret;
3466 + goto error_2;
3467 ret = of_property_read_u32(np, "ti,battery-regulation-voltage",
3468 &bq->init_data.battery_regulation_voltage);
3469 if (ret)
3470 - return ret;
3471 + goto error_2;
3472 ret = of_property_read_u32(np, "ti,charge-current",
3473 &bq->init_data.charge_current);
3474 if (ret)
3475 - return ret;
3476 + goto error_2;
3477 ret = of_property_read_u32(np, "ti,termination-current",
3478 &bq->init_data.termination_current);
3479 if (ret)
3480 - return ret;
3481 + goto error_2;
3482 ret = of_property_read_u32(np, "ti,resistor-sense",
3483 &bq->init_data.resistor_sense);
3484 if (ret)
3485 - return ret;
3486 + goto error_2;
3487 } else {
3488 memcpy(&bq->init_data, pdata, sizeof(bq->init_data));
3489 }
3490 diff --git a/drivers/power/charger-manager.c b/drivers/power/charger-manager.c
3491 index ef1f4c928431..03bfac3655ef 100644
3492 --- a/drivers/power/charger-manager.c
3493 +++ b/drivers/power/charger-manager.c
3494 @@ -97,6 +97,7 @@ static struct charger_global_desc *g_desc; /* init with setup_charger_manager */
3495 static bool is_batt_present(struct charger_manager *cm)
3496 {
3497 union power_supply_propval val;
3498 + struct power_supply *psy;
3499 bool present = false;
3500 int i, ret;
3501
3502 @@ -107,16 +108,27 @@ static bool is_batt_present(struct charger_manager *cm)
3503 case CM_NO_BATTERY:
3504 break;
3505 case CM_FUEL_GAUGE:
3506 - ret = cm->fuel_gauge->get_property(cm->fuel_gauge,
3507 + psy = power_supply_get_by_name(cm->desc->psy_fuel_gauge);
3508 + if (!psy)
3509 + break;
3510 +
3511 + ret = psy->get_property(psy,
3512 POWER_SUPPLY_PROP_PRESENT, &val);
3513 if (ret == 0 && val.intval)
3514 present = true;
3515 break;
3516 case CM_CHARGER_STAT:
3517 - for (i = 0; cm->charger_stat[i]; i++) {
3518 - ret = cm->charger_stat[i]->get_property(
3519 - cm->charger_stat[i],
3520 - POWER_SUPPLY_PROP_PRESENT, &val);
3521 + for (i = 0; cm->desc->psy_charger_stat[i]; i++) {
3522 + psy = power_supply_get_by_name(
3523 + cm->desc->psy_charger_stat[i]);
3524 + if (!psy) {
3525 + dev_err(cm->dev, "Cannot find power supply \"%s\"\n",
3526 + cm->desc->psy_charger_stat[i]);
3527 + continue;
3528 + }
3529 +
3530 + ret = psy->get_property(psy, POWER_SUPPLY_PROP_PRESENT,
3531 + &val);
3532 if (ret == 0 && val.intval) {
3533 present = true;
3534 break;
3535 @@ -139,14 +151,20 @@ static bool is_batt_present(struct charger_manager *cm)
3536 static bool is_ext_pwr_online(struct charger_manager *cm)
3537 {
3538 union power_supply_propval val;
3539 + struct power_supply *psy;
3540 bool online = false;
3541 int i, ret;
3542
3543 /* If at least one of them has one, it's yes. */
3544 - for (i = 0; cm->charger_stat[i]; i++) {
3545 - ret = cm->charger_stat[i]->get_property(
3546 - cm->charger_stat[i],
3547 - POWER_SUPPLY_PROP_ONLINE, &val);
3548 + for (i = 0; cm->desc->psy_charger_stat[i]; i++) {
3549 + psy = power_supply_get_by_name(cm->desc->psy_charger_stat[i]);
3550 + if (!psy) {
3551 + dev_err(cm->dev, "Cannot find power supply \"%s\"\n",
3552 + cm->desc->psy_charger_stat[i]);
3553 + continue;
3554 + }
3555 +
3556 + ret = psy->get_property(psy, POWER_SUPPLY_PROP_ONLINE, &val);
3557 if (ret == 0 && val.intval) {
3558 online = true;
3559 break;
3560 @@ -167,12 +185,14 @@ static bool is_ext_pwr_online(struct charger_manager *cm)
3561 static int get_batt_uV(struct charger_manager *cm, int *uV)
3562 {
3563 union power_supply_propval val;
3564 + struct power_supply *fuel_gauge;
3565 int ret;
3566
3567 - if (!cm->fuel_gauge)
3568 + fuel_gauge = power_supply_get_by_name(cm->desc->psy_fuel_gauge);
3569 + if (!fuel_gauge)
3570 return -ENODEV;
3571
3572 - ret = cm->fuel_gauge->get_property(cm->fuel_gauge,
3573 + ret = fuel_gauge->get_property(fuel_gauge,
3574 POWER_SUPPLY_PROP_VOLTAGE_NOW, &val);
3575 if (ret)
3576 return ret;
3577 @@ -189,6 +209,7 @@ static bool is_charging(struct charger_manager *cm)
3578 {
3579 int i, ret;
3580 bool charging = false;
3581 + struct power_supply *psy;
3582 union power_supply_propval val;
3583
3584 /* If there is no battery, it cannot be charged */
3585 @@ -196,17 +217,22 @@ static bool is_charging(struct charger_manager *cm)
3586 return false;
3587
3588 /* If at least one of the charger is charging, return yes */
3589 - for (i = 0; cm->charger_stat[i]; i++) {
3590 + for (i = 0; cm->desc->psy_charger_stat[i]; i++) {
3591 /* 1. The charger sholuld not be DISABLED */
3592 if (cm->emergency_stop)
3593 continue;
3594 if (!cm->charger_enabled)
3595 continue;
3596
3597 + psy = power_supply_get_by_name(cm->desc->psy_charger_stat[i]);
3598 + if (!psy) {
3599 + dev_err(cm->dev, "Cannot find power supply \"%s\"\n",
3600 + cm->desc->psy_charger_stat[i]);
3601 + continue;
3602 + }
3603 +
3604 /* 2. The charger should be online (ext-power) */
3605 - ret = cm->charger_stat[i]->get_property(
3606 - cm->charger_stat[i],
3607 - POWER_SUPPLY_PROP_ONLINE, &val);
3608 + ret = psy->get_property(psy, POWER_SUPPLY_PROP_ONLINE, &val);
3609 if (ret) {
3610 dev_warn(cm->dev, "Cannot read ONLINE value from %s\n",
3611 cm->desc->psy_charger_stat[i]);
3612 @@ -219,9 +245,7 @@ static bool is_charging(struct charger_manager *cm)
3613 * 3. The charger should not be FULL, DISCHARGING,
3614 * or NOT_CHARGING.
3615 */
3616 - ret = cm->charger_stat[i]->get_property(
3617 - cm->charger_stat[i],
3618 - POWER_SUPPLY_PROP_STATUS, &val);
3619 + ret = psy->get_property(psy, POWER_SUPPLY_PROP_STATUS, &val);
3620 if (ret) {
3621 dev_warn(cm->dev, "Cannot read STATUS value from %s\n",
3622 cm->desc->psy_charger_stat[i]);
3623 @@ -248,6 +272,7 @@ static bool is_full_charged(struct charger_manager *cm)
3624 {
3625 struct charger_desc *desc = cm->desc;
3626 union power_supply_propval val;
3627 + struct power_supply *fuel_gauge;
3628 int ret = 0;
3629 int uV;
3630
3631 @@ -255,11 +280,15 @@ static bool is_full_charged(struct charger_manager *cm)
3632 if (!is_batt_present(cm))
3633 return false;
3634
3635 - if (cm->fuel_gauge && desc->fullbatt_full_capacity > 0) {
3636 + fuel_gauge = power_supply_get_by_name(cm->desc->psy_fuel_gauge);
3637 + if (!fuel_gauge)
3638 + return false;
3639 +
3640 + if (desc->fullbatt_full_capacity > 0) {
3641 val.intval = 0;
3642
3643 /* Not full if capacity of fuel gauge isn't full */
3644 - ret = cm->fuel_gauge->get_property(cm->fuel_gauge,
3645 + ret = fuel_gauge->get_property(fuel_gauge,
3646 POWER_SUPPLY_PROP_CHARGE_FULL, &val);
3647 if (!ret && val.intval > desc->fullbatt_full_capacity)
3648 return true;
3649 @@ -273,10 +302,10 @@ static bool is_full_charged(struct charger_manager *cm)
3650 }
3651
3652 /* Full, if the capacity is more than fullbatt_soc */
3653 - if (cm->fuel_gauge && desc->fullbatt_soc > 0) {
3654 + if (desc->fullbatt_soc > 0) {
3655 val.intval = 0;
3656
3657 - ret = cm->fuel_gauge->get_property(cm->fuel_gauge,
3658 + ret = fuel_gauge->get_property(fuel_gauge,
3659 POWER_SUPPLY_PROP_CAPACITY, &val);
3660 if (!ret && val.intval >= desc->fullbatt_soc)
3661 return true;
3662 @@ -551,6 +580,20 @@ static int check_charging_duration(struct charger_manager *cm)
3663 return ret;
3664 }
3665
3666 +static int cm_get_battery_temperature_by_psy(struct charger_manager *cm,
3667 + int *temp)
3668 +{
3669 + struct power_supply *fuel_gauge;
3670 +
3671 + fuel_gauge = power_supply_get_by_name(cm->desc->psy_fuel_gauge);
3672 + if (!fuel_gauge)
3673 + return -ENODEV;
3674 +
3675 + return fuel_gauge->get_property(fuel_gauge,
3676 + POWER_SUPPLY_PROP_TEMP,
3677 + (union power_supply_propval *)temp);
3678 +}
3679 +
3680 static int cm_get_battery_temperature(struct charger_manager *cm,
3681 int *temp)
3682 {
3683 @@ -560,15 +603,18 @@ static int cm_get_battery_temperature(struct charger_manager *cm,
3684 return -ENODEV;
3685
3686 #ifdef CONFIG_THERMAL
3687 - ret = thermal_zone_get_temp(cm->tzd_batt, (unsigned long *)temp);
3688 - if (!ret)
3689 - /* Calibrate temperature unit */
3690 - *temp /= 100;
3691 -#else
3692 - ret = cm->fuel_gauge->get_property(cm->fuel_gauge,
3693 - POWER_SUPPLY_PROP_TEMP,
3694 - (union power_supply_propval *)temp);
3695 + if (cm->tzd_batt) {
3696 + ret = thermal_zone_get_temp(cm->tzd_batt, (unsigned long *)temp);
3697 + if (!ret)
3698 + /* Calibrate temperature unit */
3699 + *temp /= 100;
3700 + } else
3701 #endif
3702 + {
3703 + /* if-else continued from CONFIG_THERMAL */
3704 + ret = cm_get_battery_temperature_by_psy(cm, temp);
3705 + }
3706 +
3707 return ret;
3708 }
3709
3710 @@ -827,6 +873,7 @@ static int charger_get_property(struct power_supply *psy,
3711 struct charger_manager *cm = container_of(psy,
3712 struct charger_manager, charger_psy);
3713 struct charger_desc *desc = cm->desc;
3714 + struct power_supply *fuel_gauge;
3715 int ret = 0;
3716 int uV;
3717
3718 @@ -857,14 +904,20 @@ static int charger_get_property(struct power_supply *psy,
3719 ret = get_batt_uV(cm, &val->intval);
3720 break;
3721 case POWER_SUPPLY_PROP_CURRENT_NOW:
3722 - ret = cm->fuel_gauge->get_property(cm->fuel_gauge,
3723 + fuel_gauge = power_supply_get_by_name(cm->desc->psy_fuel_gauge);
3724 + if (!fuel_gauge) {
3725 + ret = -ENODEV;
3726 + break;
3727 + }
3728 + ret = fuel_gauge->get_property(fuel_gauge,
3729 POWER_SUPPLY_PROP_CURRENT_NOW, val);
3730 break;
3731 case POWER_SUPPLY_PROP_TEMP:
3732 case POWER_SUPPLY_PROP_TEMP_AMBIENT:
3733 return cm_get_battery_temperature(cm, &val->intval);
3734 case POWER_SUPPLY_PROP_CAPACITY:
3735 - if (!cm->fuel_gauge) {
3736 + fuel_gauge = power_supply_get_by_name(cm->desc->psy_fuel_gauge);
3737 + if (!fuel_gauge) {
3738 ret = -ENODEV;
3739 break;
3740 }
3741 @@ -875,7 +928,7 @@ static int charger_get_property(struct power_supply *psy,
3742 break;
3743 }
3744
3745 - ret = cm->fuel_gauge->get_property(cm->fuel_gauge,
3746 + ret = fuel_gauge->get_property(fuel_gauge,
3747 POWER_SUPPLY_PROP_CAPACITY, val);
3748 if (ret)
3749 break;
3750 @@ -924,7 +977,14 @@ static int charger_get_property(struct power_supply *psy,
3751 break;
3752 case POWER_SUPPLY_PROP_CHARGE_NOW:
3753 if (is_charging(cm)) {
3754 - ret = cm->fuel_gauge->get_property(cm->fuel_gauge,
3755 + fuel_gauge = power_supply_get_by_name(
3756 + cm->desc->psy_fuel_gauge);
3757 + if (!fuel_gauge) {
3758 + ret = -ENODEV;
3759 + break;
3760 + }
3761 +
3762 + ret = fuel_gauge->get_property(fuel_gauge,
3763 POWER_SUPPLY_PROP_CHARGE_NOW,
3764 val);
3765 if (ret) {
3766 @@ -1485,14 +1545,15 @@ err:
3767 return ret;
3768 }
3769
3770 -static int cm_init_thermal_data(struct charger_manager *cm)
3771 +static int cm_init_thermal_data(struct charger_manager *cm,
3772 + struct power_supply *fuel_gauge)
3773 {
3774 struct charger_desc *desc = cm->desc;
3775 union power_supply_propval val;
3776 int ret;
3777
3778 /* Verify whether fuel gauge provides battery temperature */
3779 - ret = cm->fuel_gauge->get_property(cm->fuel_gauge,
3780 + ret = fuel_gauge->get_property(fuel_gauge,
3781 POWER_SUPPLY_PROP_TEMP, &val);
3782
3783 if (!ret) {
3784 @@ -1502,8 +1563,6 @@ static int cm_init_thermal_data(struct charger_manager *cm)
3785 cm->desc->measure_battery_temp = true;
3786 }
3787 #ifdef CONFIG_THERMAL
3788 - cm->tzd_batt = cm->fuel_gauge->tzd;
3789 -
3790 if (ret && desc->thermal_zone) {
3791 cm->tzd_batt =
3792 thermal_zone_get_zone_by_name(desc->thermal_zone);
3793 @@ -1666,6 +1725,7 @@ static int charger_manager_probe(struct platform_device *pdev)
3794 int ret = 0, i = 0;
3795 int j = 0;
3796 union power_supply_propval val;
3797 + struct power_supply *fuel_gauge;
3798
3799 if (g_desc && !rtc_dev && g_desc->rtc_name) {
3800 rtc_dev = rtc_class_open(g_desc->rtc_name);
3801 @@ -1729,23 +1789,20 @@ static int charger_manager_probe(struct platform_device *pdev)
3802 while (desc->psy_charger_stat[i])
3803 i++;
3804
3805 - cm->charger_stat = devm_kzalloc(&pdev->dev,
3806 - sizeof(struct power_supply *) * i, GFP_KERNEL);
3807 - if (!cm->charger_stat)
3808 - return -ENOMEM;
3809 -
3810 + /* Check if charger's supplies are present at probe */
3811 for (i = 0; desc->psy_charger_stat[i]; i++) {
3812 - cm->charger_stat[i] = power_supply_get_by_name(
3813 - desc->psy_charger_stat[i]);
3814 - if (!cm->charger_stat[i]) {
3815 + struct power_supply *psy;
3816 +
3817 + psy = power_supply_get_by_name(desc->psy_charger_stat[i]);
3818 + if (!psy) {
3819 dev_err(&pdev->dev, "Cannot find power supply \"%s\"\n",
3820 desc->psy_charger_stat[i]);
3821 return -ENODEV;
3822 }
3823 }
3824
3825 - cm->fuel_gauge = power_supply_get_by_name(desc->psy_fuel_gauge);
3826 - if (!cm->fuel_gauge) {
3827 + fuel_gauge = power_supply_get_by_name(desc->psy_fuel_gauge);
3828 + if (!fuel_gauge) {
3829 dev_err(&pdev->dev, "Cannot find power supply \"%s\"\n",
3830 desc->psy_fuel_gauge);
3831 return -ENODEV;
3832 @@ -1788,13 +1845,13 @@ static int charger_manager_probe(struct platform_device *pdev)
3833 cm->charger_psy.num_properties = psy_default.num_properties;
3834
3835 /* Find which optional psy-properties are available */
3836 - if (!cm->fuel_gauge->get_property(cm->fuel_gauge,
3837 + if (!fuel_gauge->get_property(fuel_gauge,
3838 POWER_SUPPLY_PROP_CHARGE_NOW, &val)) {
3839 cm->charger_psy.properties[cm->charger_psy.num_properties] =
3840 POWER_SUPPLY_PROP_CHARGE_NOW;
3841 cm->charger_psy.num_properties++;
3842 }
3843 - if (!cm->fuel_gauge->get_property(cm->fuel_gauge,
3844 + if (!fuel_gauge->get_property(fuel_gauge,
3845 POWER_SUPPLY_PROP_CURRENT_NOW,
3846 &val)) {
3847 cm->charger_psy.properties[cm->charger_psy.num_properties] =
3848 @@ -1802,7 +1859,7 @@ static int charger_manager_probe(struct platform_device *pdev)
3849 cm->charger_psy.num_properties++;
3850 }
3851
3852 - ret = cm_init_thermal_data(cm);
3853 + ret = cm_init_thermal_data(cm, fuel_gauge);
3854 if (ret) {
3855 dev_err(&pdev->dev, "Failed to initialize thermal data\n");
3856 cm->desc->measure_battery_temp = false;
3857 @@ -2059,8 +2116,8 @@ static bool find_power_supply(struct charger_manager *cm,
3858 int i;
3859 bool found = false;
3860
3861 - for (i = 0; cm->charger_stat[i]; i++) {
3862 - if (psy == cm->charger_stat[i]) {
3863 + for (i = 0; cm->desc->psy_charger_stat[i]; i++) {
3864 + if (!strcmp(psy->name, cm->desc->psy_charger_stat[i])) {
3865 found = true;
3866 break;
3867 }
3868 diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
3869 index d2c35920ff08..66c210e39d71 100644
3870 --- a/drivers/pwm/core.c
3871 +++ b/drivers/pwm/core.c
3872 @@ -602,12 +602,9 @@ struct pwm_device *pwm_get(struct device *dev, const char *con_id)
3873 struct pwm_device *pwm = ERR_PTR(-EPROBE_DEFER);
3874 const char *dev_id = dev ? dev_name(dev) : NULL;
3875 struct pwm_chip *chip = NULL;
3876 - unsigned int index = 0;
3877 unsigned int best = 0;
3878 - struct pwm_lookup *p;
3879 + struct pwm_lookup *p, *chosen = NULL;
3880 unsigned int match;
3881 - unsigned int period;
3882 - enum pwm_polarity polarity;
3883
3884 /* look up via DT first */
3885 if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node)
3886 @@ -653,10 +650,7 @@ struct pwm_device *pwm_get(struct device *dev, const char *con_id)
3887 }
3888
3889 if (match > best) {
3890 - chip = pwmchip_find_by_name(p->provider);
3891 - index = p->index;
3892 - period = p->period;
3893 - polarity = p->polarity;
3894 + chosen = p;
3895
3896 if (match != 3)
3897 best = match;
3898 @@ -665,17 +659,22 @@ struct pwm_device *pwm_get(struct device *dev, const char *con_id)
3899 }
3900 }
3901
3902 - mutex_unlock(&pwm_lookup_lock);
3903 + if (!chosen)
3904 + goto out;
3905
3906 - if (chip)
3907 - pwm = pwm_request_from_chip(chip, index, con_id ?: dev_id);
3908 - if (IS_ERR(pwm))
3909 - return pwm;
3910 + chip = pwmchip_find_by_name(chosen->provider);
3911 + if (!chip)
3912 + goto out;
3913
3914 - pwm_set_period(pwm, period);
3915 - pwm_set_polarity(pwm, polarity);
3916 + pwm = pwm_request_from_chip(chip, chosen->index, con_id ?: dev_id);
3917 + if (IS_ERR(pwm))
3918 + goto out;
3919
3920 + pwm_set_period(pwm, chosen->period);
3921 + pwm_set_polarity(pwm, chosen->polarity);
3922
3923 +out:
3924 + mutex_unlock(&pwm_lookup_lock);
3925 return pwm;
3926 }
3927 EXPORT_SYMBOL_GPL(pwm_get);
3928 diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
3929 index 5db8454474ee..817d654dbc82 100644
3930 --- a/drivers/scsi/scsi_error.c
3931 +++ b/drivers/scsi/scsi_error.c
3932 @@ -1998,8 +1998,10 @@ static void scsi_restart_operations(struct Scsi_Host *shost)
3933 * is no point trying to lock the door of an off-line device.
3934 */
3935 shost_for_each_device(sdev, shost) {
3936 - if (scsi_device_online(sdev) && sdev->locked)
3937 + if (scsi_device_online(sdev) && sdev->was_reset && sdev->locked) {
3938 scsi_eh_lock_door(sdev);
3939 + sdev->was_reset = 0;
3940 + }
3941 }
3942
3943 /*
3944 diff --git a/fs/gfs2/dir.c b/fs/gfs2/dir.c
3945 index 1a349f9a9685..5d4261ff5d23 100644
3946 --- a/fs/gfs2/dir.c
3947 +++ b/fs/gfs2/dir.c
3948 @@ -2100,8 +2100,13 @@ int gfs2_diradd_alloc_required(struct inode *inode, const struct qstr *name,
3949 }
3950 if (IS_ERR(dent))
3951 return PTR_ERR(dent);
3952 - da->bh = bh;
3953 - da->dent = dent;
3954 +
3955 + if (da->save_loc) {
3956 + da->bh = bh;
3957 + da->dent = dent;
3958 + } else {
3959 + brelse(bh);
3960 + }
3961 return 0;
3962 }
3963
3964 diff --git a/fs/gfs2/dir.h b/fs/gfs2/dir.h
3965 index 126c65dda028..e1b309c24dab 100644
3966 --- a/fs/gfs2/dir.h
3967 +++ b/fs/gfs2/dir.h
3968 @@ -23,6 +23,7 @@ struct gfs2_diradd {
3969 unsigned nr_blocks;
3970 struct gfs2_dirent *dent;
3971 struct buffer_head *bh;
3972 + int save_loc;
3973 };
3974
3975 extern struct inode *gfs2_dir_search(struct inode *dir,
3976 diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c
3977 index fc8ac2ee0667..7d2723ce067e 100644
3978 --- a/fs/gfs2/inode.c
3979 +++ b/fs/gfs2/inode.c
3980 @@ -600,7 +600,7 @@ static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
3981 int error, free_vfs_inode = 0;
3982 u32 aflags = 0;
3983 unsigned blocks = 1;
3984 - struct gfs2_diradd da = { .bh = NULL, };
3985 + struct gfs2_diradd da = { .bh = NULL, .save_loc = 1, };
3986
3987 if (!name->len || name->len > GFS2_FNAMESIZE)
3988 return -ENAMETOOLONG;
3989 @@ -899,7 +899,7 @@ static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
3990 struct gfs2_inode *ip = GFS2_I(inode);
3991 struct gfs2_holder ghs[2];
3992 struct buffer_head *dibh;
3993 - struct gfs2_diradd da = { .bh = NULL, };
3994 + struct gfs2_diradd da = { .bh = NULL, .save_loc = 1, };
3995 int error;
3996
3997 if (S_ISDIR(inode->i_mode))
3998 @@ -1337,7 +1337,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
3999 struct gfs2_rgrpd *nrgd;
4000 unsigned int num_gh;
4001 int dir_rename = 0;
4002 - struct gfs2_diradd da = { .nr_blocks = 0, };
4003 + struct gfs2_diradd da = { .nr_blocks = 0, .save_loc = 0, };
4004 unsigned int x;
4005 int error;
4006
4007 diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c
4008 index 5853f53db732..7f3f60641344 100644
4009 --- a/fs/nfs/delegation.c
4010 +++ b/fs/nfs/delegation.c
4011 @@ -125,6 +125,8 @@ again:
4012 continue;
4013 if (!test_bit(NFS_DELEGATED_STATE, &state->flags))
4014 continue;
4015 + if (!nfs4_valid_open_stateid(state))
4016 + continue;
4017 if (!nfs4_stateid_match(&state->stateid, stateid))
4018 continue;
4019 get_nfs_open_context(ctx);
4020 @@ -193,7 +195,11 @@ static int nfs_do_return_delegation(struct inode *inode, struct nfs_delegation *
4021 {
4022 int res = 0;
4023
4024 - res = nfs4_proc_delegreturn(inode, delegation->cred, &delegation->stateid, issync);
4025 + if (!test_bit(NFS_DELEGATION_REVOKED, &delegation->flags))
4026 + res = nfs4_proc_delegreturn(inode,
4027 + delegation->cred,
4028 + &delegation->stateid,
4029 + issync);
4030 nfs_free_delegation(delegation);
4031 return res;
4032 }
4033 @@ -380,11 +386,13 @@ static int nfs_end_delegation_return(struct inode *inode, struct nfs_delegation
4034 {
4035 struct nfs_client *clp = NFS_SERVER(inode)->nfs_client;
4036 struct nfs_inode *nfsi = NFS_I(inode);
4037 - int err;
4038 + int err = 0;
4039
4040 if (delegation == NULL)
4041 return 0;
4042 do {
4043 + if (test_bit(NFS_DELEGATION_REVOKED, &delegation->flags))
4044 + break;
4045 err = nfs_delegation_claim_opens(inode, &delegation->stateid);
4046 if (!issync || err != -EAGAIN)
4047 break;
4048 @@ -605,10 +613,23 @@ static void nfs_client_mark_return_unused_delegation_types(struct nfs_client *cl
4049 rcu_read_unlock();
4050 }
4051
4052 +static void nfs_revoke_delegation(struct inode *inode)
4053 +{
4054 + struct nfs_delegation *delegation;
4055 + rcu_read_lock();
4056 + delegation = rcu_dereference(NFS_I(inode)->delegation);
4057 + if (delegation != NULL) {
4058 + set_bit(NFS_DELEGATION_REVOKED, &delegation->flags);
4059 + nfs_mark_return_delegation(NFS_SERVER(inode), delegation);
4060 + }
4061 + rcu_read_unlock();
4062 +}
4063 +
4064 void nfs_remove_bad_delegation(struct inode *inode)
4065 {
4066 struct nfs_delegation *delegation;
4067
4068 + nfs_revoke_delegation(inode);
4069 delegation = nfs_inode_detach_delegation(inode);
4070 if (delegation) {
4071 nfs_inode_find_state_and_recover(inode, &delegation->stateid);
4072 diff --git a/fs/nfs/delegation.h b/fs/nfs/delegation.h
4073 index 5c1cce39297f..e3c20a3ccc93 100644
4074 --- a/fs/nfs/delegation.h
4075 +++ b/fs/nfs/delegation.h
4076 @@ -31,6 +31,7 @@ enum {
4077 NFS_DELEGATION_RETURN_IF_CLOSED,
4078 NFS_DELEGATION_REFERENCED,
4079 NFS_DELEGATION_RETURNING,
4080 + NFS_DELEGATION_REVOKED,
4081 };
4082
4083 int nfs_inode_set_delegation(struct inode *inode, struct rpc_cred *cred, struct nfs_openres *res);
4084 diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
4085 index 65ef6e00deee..c6b5eddbcac0 100644
4086 --- a/fs/nfs/direct.c
4087 +++ b/fs/nfs/direct.c
4088 @@ -270,6 +270,7 @@ static void nfs_direct_req_free(struct kref *kref)
4089 {
4090 struct nfs_direct_req *dreq = container_of(kref, struct nfs_direct_req, kref);
4091
4092 + nfs_free_pnfs_ds_cinfo(&dreq->ds_cinfo);
4093 if (dreq->l_ctx != NULL)
4094 nfs_put_lock_context(dreq->l_ctx);
4095 if (dreq->ctx != NULL)
4096 diff --git a/fs/nfs/filelayout/filelayout.c b/fs/nfs/filelayout/filelayout.c
4097 index f59713e091a8..eb777ed34568 100644
4098 --- a/fs/nfs/filelayout/filelayout.c
4099 +++ b/fs/nfs/filelayout/filelayout.c
4100 @@ -145,9 +145,6 @@ static int filelayout_async_handle_error(struct rpc_task *task,
4101 case -NFS4ERR_DELEG_REVOKED:
4102 case -NFS4ERR_ADMIN_REVOKED:
4103 case -NFS4ERR_BAD_STATEID:
4104 - if (state == NULL)
4105 - break;
4106 - nfs_remove_bad_delegation(state->inode);
4107 case -NFS4ERR_OPENMODE:
4108 if (state == NULL)
4109 break;
4110 diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
4111 index 577a36f0a510..0689aa522092 100644
4112 --- a/fs/nfs/inode.c
4113 +++ b/fs/nfs/inode.c
4114 @@ -624,7 +624,7 @@ int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
4115 {
4116 struct inode *inode = dentry->d_inode;
4117 int need_atime = NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATIME;
4118 - int err;
4119 + int err = 0;
4120
4121 trace_nfs_getattr_enter(inode);
4122 /* Flush out writes to the server in order to update c/mtime. */
4123 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
4124 index 0422d77b73c7..d3ebdae1d9b8 100644
4125 --- a/fs/nfs/nfs4proc.c
4126 +++ b/fs/nfs/nfs4proc.c
4127 @@ -360,11 +360,6 @@ static int nfs4_handle_exception(struct nfs_server *server, int errorcode, struc
4128 case -NFS4ERR_DELEG_REVOKED:
4129 case -NFS4ERR_ADMIN_REVOKED:
4130 case -NFS4ERR_BAD_STATEID:
4131 - if (inode != NULL && nfs4_have_delegation(inode, FMODE_READ)) {
4132 - nfs_remove_bad_delegation(inode);
4133 - exception->retry = 1;
4134 - break;
4135 - }
4136 if (state == NULL)
4137 break;
4138 ret = nfs4_schedule_stateid_recovery(server, state);
4139 @@ -1647,7 +1642,7 @@ static int nfs4_handle_delegation_recall_error(struct nfs_server *server, struct
4140 nfs_inode_find_state_and_recover(state->inode,
4141 stateid);
4142 nfs4_schedule_stateid_recovery(server, state);
4143 - return 0;
4144 + return -EAGAIN;
4145 case -NFS4ERR_DELAY:
4146 case -NFS4ERR_GRACE:
4147 set_bit(NFS_DELEGATED_STATE, &state->flags);
4148 @@ -2102,46 +2097,60 @@ static int nfs4_open_expired(struct nfs4_state_owner *sp, struct nfs4_state *sta
4149 return ret;
4150 }
4151
4152 +static void nfs_finish_clear_delegation_stateid(struct nfs4_state *state)
4153 +{
4154 + nfs_remove_bad_delegation(state->inode);
4155 + write_seqlock(&state->seqlock);
4156 + nfs4_stateid_copy(&state->stateid, &state->open_stateid);
4157 + write_sequnlock(&state->seqlock);
4158 + clear_bit(NFS_DELEGATED_STATE, &state->flags);
4159 +}
4160 +
4161 +static void nfs40_clear_delegation_stateid(struct nfs4_state *state)
4162 +{
4163 + if (rcu_access_pointer(NFS_I(state->inode)->delegation) != NULL)
4164 + nfs_finish_clear_delegation_stateid(state);
4165 +}
4166 +
4167 +static int nfs40_open_expired(struct nfs4_state_owner *sp, struct nfs4_state *state)
4168 +{
4169 + /* NFSv4.0 doesn't allow for delegation recovery on open expire */
4170 + nfs40_clear_delegation_stateid(state);
4171 + return nfs4_open_expired(sp, state);
4172 +}
4173 +
4174 #if defined(CONFIG_NFS_V4_1)
4175 -static void nfs41_clear_delegation_stateid(struct nfs4_state *state)
4176 +static void nfs41_check_delegation_stateid(struct nfs4_state *state)
4177 {
4178 struct nfs_server *server = NFS_SERVER(state->inode);
4179 - nfs4_stateid *stateid = &state->stateid;
4180 + nfs4_stateid stateid;
4181 struct nfs_delegation *delegation;
4182 - struct rpc_cred *cred = NULL;
4183 - int status = -NFS4ERR_BAD_STATEID;
4184 -
4185 - /* If a state reset has been done, test_stateid is unneeded */
4186 - if (test_bit(NFS_DELEGATED_STATE, &state->flags) == 0)
4187 - return;
4188 + struct rpc_cred *cred;
4189 + int status;
4190
4191 /* Get the delegation credential for use by test/free_stateid */
4192 rcu_read_lock();
4193 delegation = rcu_dereference(NFS_I(state->inode)->delegation);
4194 - if (delegation != NULL &&
4195 - nfs4_stateid_match(&delegation->stateid, stateid)) {
4196 - cred = get_rpccred(delegation->cred);
4197 - rcu_read_unlock();
4198 - status = nfs41_test_stateid(server, stateid, cred);
4199 - trace_nfs4_test_delegation_stateid(state, NULL, status);
4200 - } else
4201 + if (delegation == NULL) {
4202 rcu_read_unlock();
4203 + return;
4204 + }
4205 +
4206 + nfs4_stateid_copy(&stateid, &delegation->stateid);
4207 + cred = get_rpccred(delegation->cred);
4208 + rcu_read_unlock();
4209 + status = nfs41_test_stateid(server, &stateid, cred);
4210 + trace_nfs4_test_delegation_stateid(state, NULL, status);
4211
4212 if (status != NFS_OK) {
4213 /* Free the stateid unless the server explicitly
4214 * informs us the stateid is unrecognized. */
4215 if (status != -NFS4ERR_BAD_STATEID)
4216 - nfs41_free_stateid(server, stateid, cred);
4217 - nfs_remove_bad_delegation(state->inode);
4218 -
4219 - write_seqlock(&state->seqlock);
4220 - nfs4_stateid_copy(&state->stateid, &state->open_stateid);
4221 - write_sequnlock(&state->seqlock);
4222 - clear_bit(NFS_DELEGATED_STATE, &state->flags);
4223 + nfs41_free_stateid(server, &stateid, cred);
4224 + nfs_finish_clear_delegation_stateid(state);
4225 }
4226
4227 - if (cred != NULL)
4228 - put_rpccred(cred);
4229 + put_rpccred(cred);
4230 }
4231
4232 /**
4233 @@ -2185,7 +2194,7 @@ static int nfs41_open_expired(struct nfs4_state_owner *sp, struct nfs4_state *st
4234 {
4235 int status;
4236
4237 - nfs41_clear_delegation_stateid(state);
4238 + nfs41_check_delegation_stateid(state);
4239 status = nfs41_check_open_stateid(state);
4240 if (status != NFS_OK)
4241 status = nfs4_open_expired(sp, state);
4242 @@ -4827,9 +4836,6 @@ nfs4_async_handle_error(struct rpc_task *task, const struct nfs_server *server,
4243 case -NFS4ERR_DELEG_REVOKED:
4244 case -NFS4ERR_ADMIN_REVOKED:
4245 case -NFS4ERR_BAD_STATEID:
4246 - if (state == NULL)
4247 - break;
4248 - nfs_remove_bad_delegation(state->inode);
4249 case -NFS4ERR_OPENMODE:
4250 if (state == NULL)
4251 break;
4252 @@ -8366,7 +8372,7 @@ static const struct nfs4_state_recovery_ops nfs41_reboot_recovery_ops = {
4253 static const struct nfs4_state_recovery_ops nfs40_nograce_recovery_ops = {
4254 .owner_flag_bit = NFS_OWNER_RECLAIM_NOGRACE,
4255 .state_flag_bit = NFS_STATE_RECLAIM_NOGRACE,
4256 - .recover_open = nfs4_open_expired,
4257 + .recover_open = nfs40_open_expired,
4258 .recover_lock = nfs4_lock_expired,
4259 .establish_clid = nfs4_init_clientid,
4260 };
4261 diff --git a/include/dt-bindings/pinctrl/dra.h b/include/dt-bindings/pinctrl/dra.h
4262 index 3d33794e4f3e..7448edff4723 100644
4263 --- a/include/dt-bindings/pinctrl/dra.h
4264 +++ b/include/dt-bindings/pinctrl/dra.h
4265 @@ -40,8 +40,8 @@
4266
4267 /* Active pin states */
4268 #define PIN_OUTPUT (0 | PULL_DIS)
4269 -#define PIN_OUTPUT_PULLUP (PIN_OUTPUT | PULL_ENA | PULL_UP)
4270 -#define PIN_OUTPUT_PULLDOWN (PIN_OUTPUT | PULL_ENA)
4271 +#define PIN_OUTPUT_PULLUP (PULL_UP)
4272 +#define PIN_OUTPUT_PULLDOWN (0)
4273 #define PIN_INPUT (INPUT_EN | PULL_DIS)
4274 #define PIN_INPUT_SLEW (INPUT_EN | SLEWCONTROL)
4275 #define PIN_INPUT_PULLUP (PULL_ENA | INPUT_EN | PULL_UP)
4276 diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h
4277 index 4e2bd4c95b66..0995c2de8162 100644
4278 --- a/include/linux/bootmem.h
4279 +++ b/include/linux/bootmem.h
4280 @@ -46,6 +46,7 @@ extern unsigned long init_bootmem_node(pg_data_t *pgdat,
4281 extern unsigned long init_bootmem(unsigned long addr, unsigned long memend);
4282
4283 extern unsigned long free_all_bootmem(void);
4284 +extern void reset_node_managed_pages(pg_data_t *pgdat);
4285 extern void reset_all_zones_managed_pages(void);
4286
4287 extern void free_bootmem_node(pg_data_t *pgdat,
4288 diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h
4289 index 653f0e2b6ca9..abcafaa20b86 100644
4290 --- a/include/linux/clocksource.h
4291 +++ b/include/linux/clocksource.h
4292 @@ -287,7 +287,7 @@ extern struct clocksource* clocksource_get_next(void);
4293 extern void clocksource_change_rating(struct clocksource *cs, int rating);
4294 extern void clocksource_suspend(void);
4295 extern void clocksource_resume(void);
4296 -extern struct clocksource * __init __weak clocksource_default_clock(void);
4297 +extern struct clocksource * __init clocksource_default_clock(void);
4298 extern void clocksource_mark_unstable(struct clocksource *cs);
4299
4300 extern u64
4301 diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h
4302 index 72ab536ad3de..3849fce7ecfe 100644
4303 --- a/include/linux/crash_dump.h
4304 +++ b/include/linux/crash_dump.h
4305 @@ -14,14 +14,13 @@
4306 extern unsigned long long elfcorehdr_addr;
4307 extern unsigned long long elfcorehdr_size;
4308
4309 -extern int __weak elfcorehdr_alloc(unsigned long long *addr,
4310 - unsigned long long *size);
4311 -extern void __weak elfcorehdr_free(unsigned long long addr);
4312 -extern ssize_t __weak elfcorehdr_read(char *buf, size_t count, u64 *ppos);
4313 -extern ssize_t __weak elfcorehdr_read_notes(char *buf, size_t count, u64 *ppos);
4314 -extern int __weak remap_oldmem_pfn_range(struct vm_area_struct *vma,
4315 - unsigned long from, unsigned long pfn,
4316 - unsigned long size, pgprot_t prot);
4317 +extern int elfcorehdr_alloc(unsigned long long *addr, unsigned long long *size);
4318 +extern void elfcorehdr_free(unsigned long long addr);
4319 +extern ssize_t elfcorehdr_read(char *buf, size_t count, u64 *ppos);
4320 +extern ssize_t elfcorehdr_read_notes(char *buf, size_t count, u64 *ppos);
4321 +extern int remap_oldmem_pfn_range(struct vm_area_struct *vma,
4322 + unsigned long from, unsigned long pfn,
4323 + unsigned long size, pgprot_t prot);
4324
4325 extern ssize_t copy_oldmem_page(unsigned long, char *, size_t,
4326 unsigned long, int);
4327 diff --git a/include/linux/kgdb.h b/include/linux/kgdb.h
4328 index 6b06d378f3df..e465bb15912d 100644
4329 --- a/include/linux/kgdb.h
4330 +++ b/include/linux/kgdb.h
4331 @@ -283,7 +283,7 @@ struct kgdb_io {
4332
4333 extern struct kgdb_arch arch_kgdb_ops;
4334
4335 -extern unsigned long __weak kgdb_arch_pc(int exception, struct pt_regs *regs);
4336 +extern unsigned long kgdb_arch_pc(int exception, struct pt_regs *regs);
4337
4338 #ifdef CONFIG_SERIAL_KGDB_NMI
4339 extern int kgdb_register_nmi_console(void);
4340 diff --git a/include/linux/khugepaged.h b/include/linux/khugepaged.h
4341 index 6b394f0b5148..eeb307985715 100644
4342 --- a/include/linux/khugepaged.h
4343 +++ b/include/linux/khugepaged.h
4344 @@ -6,7 +6,8 @@
4345 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
4346 extern int __khugepaged_enter(struct mm_struct *mm);
4347 extern void __khugepaged_exit(struct mm_struct *mm);
4348 -extern int khugepaged_enter_vma_merge(struct vm_area_struct *vma);
4349 +extern int khugepaged_enter_vma_merge(struct vm_area_struct *vma,
4350 + unsigned long vm_flags);
4351
4352 #define khugepaged_enabled() \
4353 (transparent_hugepage_flags & \
4354 @@ -35,13 +36,13 @@ static inline void khugepaged_exit(struct mm_struct *mm)
4355 __khugepaged_exit(mm);
4356 }
4357
4358 -static inline int khugepaged_enter(struct vm_area_struct *vma)
4359 +static inline int khugepaged_enter(struct vm_area_struct *vma,
4360 + unsigned long vm_flags)
4361 {
4362 if (!test_bit(MMF_VM_HUGEPAGE, &vma->vm_mm->flags))
4363 if ((khugepaged_always() ||
4364 - (khugepaged_req_madv() &&
4365 - vma->vm_flags & VM_HUGEPAGE)) &&
4366 - !(vma->vm_flags & VM_NOHUGEPAGE))
4367 + (khugepaged_req_madv() && (vm_flags & VM_HUGEPAGE))) &&
4368 + !(vm_flags & VM_NOHUGEPAGE))
4369 if (__khugepaged_enter(vma->vm_mm))
4370 return -ENOMEM;
4371 return 0;
4372 @@ -54,11 +55,13 @@ static inline int khugepaged_fork(struct mm_struct *mm, struct mm_struct *oldmm)
4373 static inline void khugepaged_exit(struct mm_struct *mm)
4374 {
4375 }
4376 -static inline int khugepaged_enter(struct vm_area_struct *vma)
4377 +static inline int khugepaged_enter(struct vm_area_struct *vma,
4378 + unsigned long vm_flags)
4379 {
4380 return 0;
4381 }
4382 -static inline int khugepaged_enter_vma_merge(struct vm_area_struct *vma)
4383 +static inline int khugepaged_enter_vma_merge(struct vm_area_struct *vma,
4384 + unsigned long vm_flags)
4385 {
4386 return 0;
4387 }
4388 diff --git a/include/linux/memory.h b/include/linux/memory.h
4389 index bb7384e3c3d8..8b8d8d12348e 100644
4390 --- a/include/linux/memory.h
4391 +++ b/include/linux/memory.h
4392 @@ -35,7 +35,7 @@ struct memory_block {
4393 };
4394
4395 int arch_get_memory_phys_device(unsigned long start_pfn);
4396 -unsigned long __weak memory_block_size_bytes(void);
4397 +unsigned long memory_block_size_bytes(void);
4398
4399 /* These states are exposed to userspace as text strings in sysfs */
4400 #define MEM_ONLINE (1<<0) /* exposed to userspace */
4401 diff --git a/include/linux/mfd/max77693-private.h b/include/linux/mfd/max77693-private.h
4402 index c466ff3e16b8..dc558cffd5db 100644
4403 --- a/include/linux/mfd/max77693-private.h
4404 +++ b/include/linux/mfd/max77693-private.h
4405 @@ -262,6 +262,13 @@ enum max77693_irq_source {
4406 MAX77693_IRQ_GROUP_NR,
4407 };
4408
4409 +#define SRC_IRQ_CHARGER BIT(0)
4410 +#define SRC_IRQ_TOP BIT(1)
4411 +#define SRC_IRQ_FLASH BIT(2)
4412 +#define SRC_IRQ_MUIC BIT(3)
4413 +#define SRC_IRQ_ALL (SRC_IRQ_CHARGER | SRC_IRQ_TOP \
4414 + | SRC_IRQ_FLASH | SRC_IRQ_MUIC)
4415 +
4416 #define LED_IRQ_FLED2_OPEN BIT(0)
4417 #define LED_IRQ_FLED2_SHORT BIT(1)
4418 #define LED_IRQ_FLED1_OPEN BIT(2)
4419 diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
4420 index 318df7051850..b21bac467dbe 100644
4421 --- a/include/linux/mmzone.h
4422 +++ b/include/linux/mmzone.h
4423 @@ -431,6 +431,15 @@ struct zone {
4424 */
4425 int nr_migrate_reserve_block;
4426
4427 +#ifdef CONFIG_MEMORY_ISOLATION
4428 + /*
4429 + * Number of isolated pageblock. It is used to solve incorrect
4430 + * freepage counting problem due to racy retrieving migratetype
4431 + * of pageblock. Protected by zone->lock.
4432 + */
4433 + unsigned long nr_isolate_pageblock;
4434 +#endif
4435 +
4436 #ifdef CONFIG_MEMORY_HOTPLUG
4437 /* see spanned/present_pages for more description */
4438 seqlock_t span_seqlock;
4439 diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
4440 index 0040629894df..cbec0ee54e10 100644
4441 --- a/include/linux/nfs_xdr.h
4442 +++ b/include/linux/nfs_xdr.h
4443 @@ -1232,11 +1232,22 @@ struct nfs41_free_stateid_res {
4444 unsigned int status;
4445 };
4446
4447 +static inline void
4448 +nfs_free_pnfs_ds_cinfo(struct pnfs_ds_commit_info *cinfo)
4449 +{
4450 + kfree(cinfo->buckets);
4451 +}
4452 +
4453 #else
4454
4455 struct pnfs_ds_commit_info {
4456 };
4457
4458 +static inline void
4459 +nfs_free_pnfs_ds_cinfo(struct pnfs_ds_commit_info *cinfo)
4460 +{
4461 +}
4462 +
4463 #endif /* CONFIG_NFS_V4_1 */
4464
4465 struct nfs_page;
4466 diff --git a/include/linux/page-isolation.h b/include/linux/page-isolation.h
4467 index 3fff8e774067..2dc1e1697b45 100644
4468 --- a/include/linux/page-isolation.h
4469 +++ b/include/linux/page-isolation.h
4470 @@ -2,6 +2,10 @@
4471 #define __LINUX_PAGEISOLATION_H
4472
4473 #ifdef CONFIG_MEMORY_ISOLATION
4474 +static inline bool has_isolate_pageblock(struct zone *zone)
4475 +{
4476 + return zone->nr_isolate_pageblock;
4477 +}
4478 static inline bool is_migrate_isolate_page(struct page *page)
4479 {
4480 return get_pageblock_migratetype(page) == MIGRATE_ISOLATE;
4481 @@ -11,6 +15,10 @@ static inline bool is_migrate_isolate(int migratetype)
4482 return migratetype == MIGRATE_ISOLATE;
4483 }
4484 #else
4485 +static inline bool has_isolate_pageblock(struct zone *zone)
4486 +{
4487 + return false;
4488 +}
4489 static inline bool is_migrate_isolate_page(struct page *page)
4490 {
4491 return false;
4492 diff --git a/include/linux/power/charger-manager.h b/include/linux/power/charger-manager.h
4493 index 07e7945a1ff2..e97fc656a058 100644
4494 --- a/include/linux/power/charger-manager.h
4495 +++ b/include/linux/power/charger-manager.h
4496 @@ -253,9 +253,6 @@ struct charger_manager {
4497 struct device *dev;
4498 struct charger_desc *desc;
4499
4500 - struct power_supply *fuel_gauge;
4501 - struct power_supply **charger_stat;
4502 -
4503 #ifdef CONFIG_THERMAL
4504 struct thermal_zone_device *tzd_batt;
4505 #endif
4506 diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h
4507 index 49a4d6f59108..e2c13cd863bd 100644
4508 --- a/include/linux/ring_buffer.h
4509 +++ b/include/linux/ring_buffer.h
4510 @@ -97,7 +97,7 @@ __ring_buffer_alloc(unsigned long size, unsigned flags, struct lock_class_key *k
4511 __ring_buffer_alloc((size), (flags), &__key); \
4512 })
4513
4514 -int ring_buffer_wait(struct ring_buffer *buffer, int cpu);
4515 +int ring_buffer_wait(struct ring_buffer *buffer, int cpu, bool full);
4516 int ring_buffer_poll_wait(struct ring_buffer *buffer, int cpu,
4517 struct file *filp, poll_table *poll_table);
4518
4519 diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h
4520 index 9fbd856e6713..856f01cb51dd 100644
4521 --- a/include/net/sctp/sctp.h
4522 +++ b/include/net/sctp/sctp.h
4523 @@ -426,6 +426,11 @@ static inline void sctp_assoc_pending_pmtu(struct sock *sk, struct sctp_associat
4524 asoc->pmtu_pending = 0;
4525 }
4526
4527 +static inline bool sctp_chunk_pending(const struct sctp_chunk *chunk)
4528 +{
4529 + return !list_empty(&chunk->list);
4530 +}
4531 +
4532 /* Walk through a list of TLV parameters. Don't trust the
4533 * individual parameter lengths and instead depend on
4534 * the chunk length to indicate when to stop. Make sure
4535 diff --git a/include/net/sctp/sm.h b/include/net/sctp/sm.h
4536 index 7f4eeb340a54..72a31db47ded 100644
4537 --- a/include/net/sctp/sm.h
4538 +++ b/include/net/sctp/sm.h
4539 @@ -248,9 +248,9 @@ struct sctp_chunk *sctp_make_asconf_update_ip(struct sctp_association *,
4540 int, __be16);
4541 struct sctp_chunk *sctp_make_asconf_set_prim(struct sctp_association *asoc,
4542 union sctp_addr *addr);
4543 -int sctp_verify_asconf(const struct sctp_association *asoc,
4544 - struct sctp_paramhdr *param_hdr, void *chunk_end,
4545 - struct sctp_paramhdr **errp);
4546 +bool sctp_verify_asconf(const struct sctp_association *asoc,
4547 + struct sctp_chunk *chunk, bool addr_param_needed,
4548 + struct sctp_paramhdr **errp);
4549 struct sctp_chunk *sctp_process_asconf(struct sctp_association *asoc,
4550 struct sctp_chunk *asconf);
4551 int sctp_process_asconf_ack(struct sctp_association *asoc,
4552 diff --git a/include/net/udp_tunnel.h b/include/net/udp_tunnel.h
4553 index ffd69cbded35..55003b84e2e1 100644
4554 --- a/include/net/udp_tunnel.h
4555 +++ b/include/net/udp_tunnel.h
4556 @@ -26,6 +26,15 @@ struct udp_port_cfg {
4557 use_udp6_rx_checksums:1;
4558 };
4559
4560 +static inline void udp_tunnel_gro_complete(struct sk_buff *skb, int nhoff)
4561 +{
4562 + struct udphdr *uh;
4563 +
4564 + uh = (struct udphdr *)(skb->data + nhoff - sizeof(struct udphdr));
4565 + skb_shinfo(skb)->gso_type |= uh->check ?
4566 + SKB_GSO_UDP_TUNNEL_CSUM : SKB_GSO_UDP_TUNNEL;
4567 +}
4568 +
4569 int udp_sock_create(struct net *net, struct udp_port_cfg *cfg,
4570 struct socket **sockp);
4571
4572 diff --git a/include/uapi/linux/netfilter/xt_bpf.h b/include/uapi/linux/netfilter/xt_bpf.h
4573 index 1fad2c27ac32..5df03939f69f 100644
4574 --- a/include/uapi/linux/netfilter/xt_bpf.h
4575 +++ b/include/uapi/linux/netfilter/xt_bpf.h
4576 @@ -8,6 +8,8 @@
4577
4578 struct bpf_prog;
4579
4580 +struct sk_filter;
4581 +
4582 struct xt_bpf_info {
4583 __u16 bpf_program_num_elem;
4584 struct sock_filter bpf_program[XT_BPF_MAX_NUM_INSTR];
4585 diff --git a/init/main.c b/init/main.c
4586 index bb1aed928f21..d0f4b5902c62 100644
4587 --- a/init/main.c
4588 +++ b/init/main.c
4589 @@ -544,7 +544,7 @@ asmlinkage __visible void __init start_kernel(void)
4590 static_command_line, __start___param,
4591 __stop___param - __start___param,
4592 -1, -1, &unknown_bootoption);
4593 - if (after_dashes)
4594 + if (!IS_ERR_OR_NULL(after_dashes))
4595 parse_args("Setting init args", after_dashes, NULL, 0, -1, -1,
4596 set_init_arg);
4597
4598 diff --git a/ipc/ipc_sysctl.c b/ipc/ipc_sysctl.c
4599 index c3f0326e98db..e8075b247497 100644
4600 --- a/ipc/ipc_sysctl.c
4601 +++ b/ipc/ipc_sysctl.c
4602 @@ -123,7 +123,6 @@ static int proc_ipcauto_dointvec_minmax(struct ctl_table *table, int write,
4603 void __user *buffer, size_t *lenp, loff_t *ppos)
4604 {
4605 struct ctl_table ipc_table;
4606 - size_t lenp_bef = *lenp;
4607 int oldval;
4608 int rc;
4609
4610 @@ -133,7 +132,7 @@ static int proc_ipcauto_dointvec_minmax(struct ctl_table *table, int write,
4611
4612 rc = proc_dointvec_minmax(&ipc_table, write, buffer, lenp, ppos);
4613
4614 - if (write && !rc && lenp_bef == *lenp) {
4615 + if (write && !rc) {
4616 int newval = *((int *)(ipc_table.data));
4617 /*
4618 * The file "auto_msgmni" has correctly been set.
4619 diff --git a/kernel/audit.c b/kernel/audit.c
4620 index ba2ff5a5c600..6726aa6f82be 100644
4621 --- a/kernel/audit.c
4622 +++ b/kernel/audit.c
4623 @@ -724,7 +724,7 @@ static int audit_get_feature(struct sk_buff *skb)
4624
4625 seq = nlmsg_hdr(skb)->nlmsg_seq;
4626
4627 - audit_send_reply(skb, seq, AUDIT_GET, 0, 0, &af, sizeof(af));
4628 + audit_send_reply(skb, seq, AUDIT_GET_FEATURE, 0, 0, &af, sizeof(af));
4629
4630 return 0;
4631 }
4632 @@ -739,7 +739,7 @@ static void audit_log_feature_change(int which, u32 old_feature, u32 new_feature
4633
4634 ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_FEATURE_CHANGE);
4635 audit_log_task_info(ab, current);
4636 - audit_log_format(ab, "feature=%s old=%u new=%u old_lock=%u new_lock=%u res=%d",
4637 + audit_log_format(ab, " feature=%s old=%u new=%u old_lock=%u new_lock=%u res=%d",
4638 audit_feature_names[which], !!old_feature, !!new_feature,
4639 !!old_lock, !!new_lock, res);
4640 audit_log_end(ab);
4641 diff --git a/kernel/audit_tree.c b/kernel/audit_tree.c
4642 index 135944a7b28a..a79db03990db 100644
4643 --- a/kernel/audit_tree.c
4644 +++ b/kernel/audit_tree.c
4645 @@ -154,6 +154,7 @@ static struct audit_chunk *alloc_chunk(int count)
4646 chunk->owners[i].index = i;
4647 }
4648 fsnotify_init_mark(&chunk->mark, audit_tree_destroy_watch);
4649 + chunk->mark.mask = FS_IN_IGNORED;
4650 return chunk;
4651 }
4652
4653 diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
4654 index 1b70cb6fbe3c..89a404a63ae5 100644
4655 --- a/kernel/rcu/tree.c
4656 +++ b/kernel/rcu/tree.c
4657 @@ -1928,7 +1928,7 @@ static void rcu_report_qs_rsp(struct rcu_state *rsp, unsigned long flags)
4658 {
4659 WARN_ON_ONCE(!rcu_gp_in_progress(rsp));
4660 raw_spin_unlock_irqrestore(&rcu_get_root(rsp)->lock, flags);
4661 - wake_up(&rsp->gp_wq); /* Memory barrier implied by wake_up() path. */
4662 + rcu_gp_kthread_wake(rsp);
4663 }
4664
4665 /*
4666 @@ -2507,7 +2507,7 @@ static void force_quiescent_state(struct rcu_state *rsp)
4667 }
4668 ACCESS_ONCE(rsp->gp_flags) |= RCU_GP_FLAG_FQS;
4669 raw_spin_unlock_irqrestore(&rnp_old->lock, flags);
4670 - wake_up(&rsp->gp_wq); /* Memory barrier implied by wake_up() path. */
4671 + rcu_gp_kthread_wake(rsp);
4672 }
4673
4674 /*
4675 diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
4676 index 2d75c94ae87d..a56e07c8d15b 100644
4677 --- a/kernel/trace/ring_buffer.c
4678 +++ b/kernel/trace/ring_buffer.c
4679 @@ -538,16 +538,18 @@ static void rb_wake_up_waiters(struct irq_work *work)
4680 * ring_buffer_wait - wait for input to the ring buffer
4681 * @buffer: buffer to wait on
4682 * @cpu: the cpu buffer to wait on
4683 + * @full: wait until a full page is available, if @cpu != RING_BUFFER_ALL_CPUS
4684 *
4685 * If @cpu == RING_BUFFER_ALL_CPUS then the task will wake up as soon
4686 * as data is added to any of the @buffer's cpu buffers. Otherwise
4687 * it will wait for data to be added to a specific cpu buffer.
4688 */
4689 -int ring_buffer_wait(struct ring_buffer *buffer, int cpu)
4690 +int ring_buffer_wait(struct ring_buffer *buffer, int cpu, bool full)
4691 {
4692 - struct ring_buffer_per_cpu *cpu_buffer;
4693 + struct ring_buffer_per_cpu *uninitialized_var(cpu_buffer);
4694 DEFINE_WAIT(wait);
4695 struct rb_irq_work *work;
4696 + int ret = 0;
4697
4698 /*
4699 * Depending on what the caller is waiting for, either any
4700 @@ -564,36 +566,61 @@ int ring_buffer_wait(struct ring_buffer *buffer, int cpu)
4701 }
4702
4703
4704 - prepare_to_wait(&work->waiters, &wait, TASK_INTERRUPTIBLE);
4705 + while (true) {
4706 + prepare_to_wait(&work->waiters, &wait, TASK_INTERRUPTIBLE);
4707
4708 - /*
4709 - * The events can happen in critical sections where
4710 - * checking a work queue can cause deadlocks.
4711 - * After adding a task to the queue, this flag is set
4712 - * only to notify events to try to wake up the queue
4713 - * using irq_work.
4714 - *
4715 - * We don't clear it even if the buffer is no longer
4716 - * empty. The flag only causes the next event to run
4717 - * irq_work to do the work queue wake up. The worse
4718 - * that can happen if we race with !trace_empty() is that
4719 - * an event will cause an irq_work to try to wake up
4720 - * an empty queue.
4721 - *
4722 - * There's no reason to protect this flag either, as
4723 - * the work queue and irq_work logic will do the necessary
4724 - * synchronization for the wake ups. The only thing
4725 - * that is necessary is that the wake up happens after
4726 - * a task has been queued. It's OK for spurious wake ups.
4727 - */
4728 - work->waiters_pending = true;
4729 + /*
4730 + * The events can happen in critical sections where
4731 + * checking a work queue can cause deadlocks.
4732 + * After adding a task to the queue, this flag is set
4733 + * only to notify events to try to wake up the queue
4734 + * using irq_work.
4735 + *
4736 + * We don't clear it even if the buffer is no longer
4737 + * empty. The flag only causes the next event to run
4738 + * irq_work to do the work queue wake up. The worse
4739 + * that can happen if we race with !trace_empty() is that
4740 + * an event will cause an irq_work to try to wake up
4741 + * an empty queue.
4742 + *
4743 + * There's no reason to protect this flag either, as
4744 + * the work queue and irq_work logic will do the necessary
4745 + * synchronization for the wake ups. The only thing
4746 + * that is necessary is that the wake up happens after
4747 + * a task has been queued. It's OK for spurious wake ups.
4748 + */
4749 + work->waiters_pending = true;
4750 +
4751 + if (signal_pending(current)) {
4752 + ret = -EINTR;
4753 + break;
4754 + }
4755 +
4756 + if (cpu == RING_BUFFER_ALL_CPUS && !ring_buffer_empty(buffer))
4757 + break;
4758 +
4759 + if (cpu != RING_BUFFER_ALL_CPUS &&
4760 + !ring_buffer_empty_cpu(buffer, cpu)) {
4761 + unsigned long flags;
4762 + bool pagebusy;
4763 +
4764 + if (!full)
4765 + break;
4766 +
4767 + raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
4768 + pagebusy = cpu_buffer->reader_page == cpu_buffer->commit_page;
4769 + raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
4770 +
4771 + if (!pagebusy)
4772 + break;
4773 + }
4774
4775 - if ((cpu == RING_BUFFER_ALL_CPUS && ring_buffer_empty(buffer)) ||
4776 - (cpu != RING_BUFFER_ALL_CPUS && ring_buffer_empty_cpu(buffer, cpu)))
4777 schedule();
4778 + }
4779
4780 finish_wait(&work->waiters, &wait);
4781 - return 0;
4782 +
4783 + return ret;
4784 }
4785
4786 /**
4787 diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
4788 index 8a528392b1f4..15209335888d 100644
4789 --- a/kernel/trace/trace.c
4790 +++ b/kernel/trace/trace.c
4791 @@ -1076,13 +1076,14 @@ update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu)
4792 }
4793 #endif /* CONFIG_TRACER_MAX_TRACE */
4794
4795 -static int wait_on_pipe(struct trace_iterator *iter)
4796 +static int wait_on_pipe(struct trace_iterator *iter, bool full)
4797 {
4798 /* Iterators are static, they should be filled or empty */
4799 if (trace_buffer_iter(iter, iter->cpu_file))
4800 return 0;
4801
4802 - return ring_buffer_wait(iter->trace_buffer->buffer, iter->cpu_file);
4803 + return ring_buffer_wait(iter->trace_buffer->buffer, iter->cpu_file,
4804 + full);
4805 }
4806
4807 #ifdef CONFIG_FTRACE_STARTUP_TEST
4808 @@ -4434,15 +4435,12 @@ static int tracing_wait_pipe(struct file *filp)
4809
4810 mutex_unlock(&iter->mutex);
4811
4812 - ret = wait_on_pipe(iter);
4813 + ret = wait_on_pipe(iter, false);
4814
4815 mutex_lock(&iter->mutex);
4816
4817 if (ret)
4818 return ret;
4819 -
4820 - if (signal_pending(current))
4821 - return -EINTR;
4822 }
4823
4824 return 1;
4825 @@ -5372,16 +5370,12 @@ tracing_buffers_read(struct file *filp, char __user *ubuf,
4826 goto out_unlock;
4827 }
4828 mutex_unlock(&trace_types_lock);
4829 - ret = wait_on_pipe(iter);
4830 + ret = wait_on_pipe(iter, false);
4831 mutex_lock(&trace_types_lock);
4832 if (ret) {
4833 size = ret;
4834 goto out_unlock;
4835 }
4836 - if (signal_pending(current)) {
4837 - size = -EINTR;
4838 - goto out_unlock;
4839 - }
4840 goto again;
4841 }
4842 size = 0;
4843 @@ -5587,14 +5581,11 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
4844 goto out;
4845 }
4846 mutex_unlock(&trace_types_lock);
4847 - ret = wait_on_pipe(iter);
4848 + ret = wait_on_pipe(iter, true);
4849 mutex_lock(&trace_types_lock);
4850 if (ret)
4851 goto out;
4852 - if (signal_pending(current)) {
4853 - ret = -EINTR;
4854 - goto out;
4855 - }
4856 +
4857 goto again;
4858 }
4859
4860 diff --git a/mm/bootmem.c b/mm/bootmem.c
4861 index 90bd3507b413..6603a7c4b136 100644
4862 --- a/mm/bootmem.c
4863 +++ b/mm/bootmem.c
4864 @@ -243,13 +243,10 @@ static unsigned long __init free_all_bootmem_core(bootmem_data_t *bdata)
4865
4866 static int reset_managed_pages_done __initdata;
4867
4868 -static inline void __init reset_node_managed_pages(pg_data_t *pgdat)
4869 +void reset_node_managed_pages(pg_data_t *pgdat)
4870 {
4871 struct zone *z;
4872
4873 - if (reset_managed_pages_done)
4874 - return;
4875 -
4876 for (z = pgdat->node_zones; z < pgdat->node_zones + MAX_NR_ZONES; z++)
4877 z->managed_pages = 0;
4878 }
4879 @@ -258,8 +255,12 @@ void __init reset_all_zones_managed_pages(void)
4880 {
4881 struct pglist_data *pgdat;
4882
4883 + if (reset_managed_pages_done)
4884 + return;
4885 +
4886 for_each_online_pgdat(pgdat)
4887 reset_node_managed_pages(pgdat);
4888 +
4889 reset_managed_pages_done = 1;
4890 }
4891
4892 diff --git a/mm/huge_memory.c b/mm/huge_memory.c
4893 index 45c6d6738dfa..23e900255205 100644
4894 --- a/mm/huge_memory.c
4895 +++ b/mm/huge_memory.c
4896 @@ -803,7 +803,7 @@ int do_huge_pmd_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
4897 return VM_FAULT_FALLBACK;
4898 if (unlikely(anon_vma_prepare(vma)))
4899 return VM_FAULT_OOM;
4900 - if (unlikely(khugepaged_enter(vma)))
4901 + if (unlikely(khugepaged_enter(vma, vma->vm_flags)))
4902 return VM_FAULT_OOM;
4903 if (!(flags & FAULT_FLAG_WRITE) &&
4904 transparent_hugepage_use_zero_page()) {
4905 @@ -1970,7 +1970,7 @@ int hugepage_madvise(struct vm_area_struct *vma,
4906 * register it here without waiting a page fault that
4907 * may not happen any time soon.
4908 */
4909 - if (unlikely(khugepaged_enter_vma_merge(vma)))
4910 + if (unlikely(khugepaged_enter_vma_merge(vma, *vm_flags)))
4911 return -ENOMEM;
4912 break;
4913 case MADV_NOHUGEPAGE:
4914 @@ -2071,7 +2071,8 @@ int __khugepaged_enter(struct mm_struct *mm)
4915 return 0;
4916 }
4917
4918 -int khugepaged_enter_vma_merge(struct vm_area_struct *vma)
4919 +int khugepaged_enter_vma_merge(struct vm_area_struct *vma,
4920 + unsigned long vm_flags)
4921 {
4922 unsigned long hstart, hend;
4923 if (!vma->anon_vma)
4924 @@ -2083,11 +2084,11 @@ int khugepaged_enter_vma_merge(struct vm_area_struct *vma)
4925 if (vma->vm_ops)
4926 /* khugepaged not yet working on file or special mappings */
4927 return 0;
4928 - VM_BUG_ON(vma->vm_flags & VM_NO_THP);
4929 + VM_BUG_ON(vm_flags & VM_NO_THP);
4930 hstart = (vma->vm_start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK;
4931 hend = vma->vm_end & HPAGE_PMD_MASK;
4932 if (hstart < hend)
4933 - return khugepaged_enter(vma);
4934 + return khugepaged_enter(vma, vm_flags);
4935 return 0;
4936 }
4937
4938 diff --git a/mm/internal.h b/mm/internal.h
4939 index a1b651b11c5f..5f2772f97013 100644
4940 --- a/mm/internal.h
4941 +++ b/mm/internal.h
4942 @@ -108,6 +108,31 @@ extern pmd_t *mm_find_pmd(struct mm_struct *mm, unsigned long address);
4943 /*
4944 * in mm/page_alloc.c
4945 */
4946 +
4947 +/*
4948 + * Locate the struct page for both the matching buddy in our
4949 + * pair (buddy1) and the combined O(n+1) page they form (page).
4950 + *
4951 + * 1) Any buddy B1 will have an order O twin B2 which satisfies
4952 + * the following equation:
4953 + * B2 = B1 ^ (1 << O)
4954 + * For example, if the starting buddy (buddy2) is #8 its order
4955 + * 1 buddy is #10:
4956 + * B2 = 8 ^ (1 << 1) = 8 ^ 2 = 10
4957 + *
4958 + * 2) Any buddy B will have an order O+1 parent P which
4959 + * satisfies the following equation:
4960 + * P = B & ~(1 << O)
4961 + *
4962 + * Assumption: *_mem_map is contiguous at least up to MAX_ORDER
4963 + */
4964 +static inline unsigned long
4965 +__find_buddy_index(unsigned long page_idx, unsigned int order)
4966 +{
4967 + return page_idx ^ (1 << order);
4968 +}
4969 +
4970 +extern int __isolate_free_page(struct page *page, unsigned int order);
4971 extern void __free_pages_bootmem(struct page *page, unsigned int order);
4972 extern void prep_compound_page(struct page *page, unsigned long order);
4973 #ifdef CONFIG_MEMORY_FAILURE
4974 diff --git a/mm/iov_iter.c b/mm/iov_iter.c
4975 index 9a09f2034fcc..141dcf796d28 100644
4976 --- a/mm/iov_iter.c
4977 +++ b/mm/iov_iter.c
4978 @@ -699,9 +699,9 @@ size_t iov_iter_single_seg_count(const struct iov_iter *i)
4979 if (i->nr_segs == 1)
4980 return i->count;
4981 else if (i->type & ITER_BVEC)
4982 - return min(i->count, i->iov->iov_len - i->iov_offset);
4983 - else
4984 return min(i->count, i->bvec->bv_len - i->iov_offset);
4985 + else
4986 + return min(i->count, i->iov->iov_len - i->iov_offset);
4987 }
4988 EXPORT_SYMBOL(iov_iter_single_seg_count);
4989
4990 diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
4991 index 2ff8c2325e96..55f94669d7c6 100644
4992 --- a/mm/memory_hotplug.c
4993 +++ b/mm/memory_hotplug.c
4994 @@ -31,6 +31,7 @@
4995 #include <linux/stop_machine.h>
4996 #include <linux/hugetlb.h>
4997 #include <linux/memblock.h>
4998 +#include <linux/bootmem.h>
4999
5000 #include <asm/tlbflush.h>
5001
5002 @@ -1066,6 +1067,16 @@ out:
5003 }
5004 #endif /* CONFIG_MEMORY_HOTPLUG_SPARSE */
5005
5006 +static void reset_node_present_pages(pg_data_t *pgdat)
5007 +{
5008 + struct zone *z;
5009 +
5010 + for (z = pgdat->node_zones; z < pgdat->node_zones + MAX_NR_ZONES; z++)
5011 + z->present_pages = 0;
5012 +
5013 + pgdat->node_present_pages = 0;
5014 +}
5015 +
5016 /* we are OK calling __meminit stuff here - we have CONFIG_MEMORY_HOTPLUG */
5017 static pg_data_t __ref *hotadd_new_pgdat(int nid, u64 start)
5018 {
5019 @@ -1096,6 +1107,21 @@ static pg_data_t __ref *hotadd_new_pgdat(int nid, u64 start)
5020 build_all_zonelists(pgdat, NULL);
5021 mutex_unlock(&zonelists_mutex);
5022
5023 + /*
5024 + * zone->managed_pages is set to an approximate value in
5025 + * free_area_init_core(), which will cause
5026 + * /sys/device/system/node/nodeX/meminfo has wrong data.
5027 + * So reset it to 0 before any memory is onlined.
5028 + */
5029 + reset_node_managed_pages(pgdat);
5030 +
5031 + /*
5032 + * When memory is hot-added, all the memory is in offline state. So
5033 + * clear all zones' present_pages because they will be updated in
5034 + * online_pages() and offline_pages().
5035 + */
5036 + reset_node_present_pages(pgdat);
5037 +
5038 return pgdat;
5039 }
5040
5041 diff --git a/mm/mmap.c b/mm/mmap.c
5042 index c0a3637cdb64..ebc25fab1545 100644
5043 --- a/mm/mmap.c
5044 +++ b/mm/mmap.c
5045 @@ -1056,7 +1056,7 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
5046 end, prev->vm_pgoff, NULL);
5047 if (err)
5048 return NULL;
5049 - khugepaged_enter_vma_merge(prev);
5050 + khugepaged_enter_vma_merge(prev, vm_flags);
5051 return prev;
5052 }
5053
5054 @@ -1075,7 +1075,7 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
5055 next->vm_pgoff - pglen, NULL);
5056 if (err)
5057 return NULL;
5058 - khugepaged_enter_vma_merge(area);
5059 + khugepaged_enter_vma_merge(area, vm_flags);
5060 return area;
5061 }
5062
5063 @@ -2192,7 +2192,7 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
5064 }
5065 }
5066 vma_unlock_anon_vma(vma);
5067 - khugepaged_enter_vma_merge(vma);
5068 + khugepaged_enter_vma_merge(vma, vma->vm_flags);
5069 validate_mm(vma->vm_mm);
5070 return error;
5071 }
5072 @@ -2261,7 +2261,7 @@ int expand_downwards(struct vm_area_struct *vma,
5073 }
5074 }
5075 vma_unlock_anon_vma(vma);
5076 - khugepaged_enter_vma_merge(vma);
5077 + khugepaged_enter_vma_merge(vma, vma->vm_flags);
5078 validate_mm(vma->vm_mm);
5079 return error;
5080 }
5081 diff --git a/mm/nobootmem.c b/mm/nobootmem.c
5082 index 7c7ab32ee503..90b50468333e 100644
5083 --- a/mm/nobootmem.c
5084 +++ b/mm/nobootmem.c
5085 @@ -145,12 +145,10 @@ static unsigned long __init free_low_memory_core_early(void)
5086
5087 static int reset_managed_pages_done __initdata;
5088
5089 -static inline void __init reset_node_managed_pages(pg_data_t *pgdat)
5090 +void reset_node_managed_pages(pg_data_t *pgdat)
5091 {
5092 struct zone *z;
5093
5094 - if (reset_managed_pages_done)
5095 - return;
5096 for (z = pgdat->node_zones; z < pgdat->node_zones + MAX_NR_ZONES; z++)
5097 z->managed_pages = 0;
5098 }
5099 @@ -159,8 +157,12 @@ void __init reset_all_zones_managed_pages(void)
5100 {
5101 struct pglist_data *pgdat;
5102
5103 + if (reset_managed_pages_done)
5104 + return;
5105 +
5106 for_each_online_pgdat(pgdat)
5107 reset_node_managed_pages(pgdat);
5108 +
5109 reset_managed_pages_done = 1;
5110 }
5111
5112 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
5113 index 8c5029f22bbe..c5fe124d6cdb 100644
5114 --- a/mm/page_alloc.c
5115 +++ b/mm/page_alloc.c
5116 @@ -468,29 +468,6 @@ static inline void rmv_page_order(struct page *page)
5117 }
5118
5119 /*
5120 - * Locate the struct page for both the matching buddy in our
5121 - * pair (buddy1) and the combined O(n+1) page they form (page).
5122 - *
5123 - * 1) Any buddy B1 will have an order O twin B2 which satisfies
5124 - * the following equation:
5125 - * B2 = B1 ^ (1 << O)
5126 - * For example, if the starting buddy (buddy2) is #8 its order
5127 - * 1 buddy is #10:
5128 - * B2 = 8 ^ (1 << 1) = 8 ^ 2 = 10
5129 - *
5130 - * 2) Any buddy B will have an order O+1 parent P which
5131 - * satisfies the following equation:
5132 - * P = B & ~(1 << O)
5133 - *
5134 - * Assumption: *_mem_map is contiguous at least up to MAX_ORDER
5135 - */
5136 -static inline unsigned long
5137 -__find_buddy_index(unsigned long page_idx, unsigned int order)
5138 -{
5139 - return page_idx ^ (1 << order);
5140 -}
5141 -
5142 -/*
5143 * This function checks whether a page is free && is the buddy
5144 * we can do coalesce a page and its buddy if
5145 * (a) the buddy is not in a hole &&
5146 @@ -570,6 +547,7 @@ static inline void __free_one_page(struct page *page,
5147 unsigned long combined_idx;
5148 unsigned long uninitialized_var(buddy_idx);
5149 struct page *buddy;
5150 + int max_order = MAX_ORDER;
5151
5152 VM_BUG_ON(!zone_is_initialized(zone));
5153
5154 @@ -578,13 +556,24 @@ static inline void __free_one_page(struct page *page,
5155 return;
5156
5157 VM_BUG_ON(migratetype == -1);
5158 + if (is_migrate_isolate(migratetype)) {
5159 + /*
5160 + * We restrict max order of merging to prevent merge
5161 + * between freepages on isolate pageblock and normal
5162 + * pageblock. Without this, pageblock isolation
5163 + * could cause incorrect freepage accounting.
5164 + */
5165 + max_order = min(MAX_ORDER, pageblock_order + 1);
5166 + } else {
5167 + __mod_zone_freepage_state(zone, 1 << order, migratetype);
5168 + }
5169
5170 - page_idx = pfn & ((1 << MAX_ORDER) - 1);
5171 + page_idx = pfn & ((1 << max_order) - 1);
5172
5173 VM_BUG_ON_PAGE(page_idx & ((1 << order) - 1), page);
5174 VM_BUG_ON_PAGE(bad_range(zone, page), page);
5175
5176 - while (order < MAX_ORDER-1) {
5177 + while (order < max_order - 1) {
5178 buddy_idx = __find_buddy_index(page_idx, order);
5179 buddy = page + (buddy_idx - page_idx);
5180 if (!page_is_buddy(page, buddy, order))
5181 @@ -716,14 +705,12 @@ static void free_pcppages_bulk(struct zone *zone, int count,
5182 /* must delete as __free_one_page list manipulates */
5183 list_del(&page->lru);
5184 mt = get_freepage_migratetype(page);
5185 + if (unlikely(has_isolate_pageblock(zone)))
5186 + mt = get_pageblock_migratetype(page);
5187 +
5188 /* MIGRATE_MOVABLE list may include MIGRATE_RESERVEs */
5189 __free_one_page(page, page_to_pfn(page), zone, 0, mt);
5190 trace_mm_page_pcpu_drain(page, 0, mt);
5191 - if (likely(!is_migrate_isolate_page(page))) {
5192 - __mod_zone_page_state(zone, NR_FREE_PAGES, 1);
5193 - if (is_migrate_cma(mt))
5194 - __mod_zone_page_state(zone, NR_FREE_CMA_PAGES, 1);
5195 - }
5196 } while (--to_free && --batch_free && !list_empty(list));
5197 }
5198 spin_unlock(&zone->lock);
5199 @@ -740,9 +727,11 @@ static void free_one_page(struct zone *zone,
5200 if (nr_scanned)
5201 __mod_zone_page_state(zone, NR_PAGES_SCANNED, -nr_scanned);
5202
5203 + if (unlikely(has_isolate_pageblock(zone) ||
5204 + is_migrate_isolate(migratetype))) {
5205 + migratetype = get_pfnblock_migratetype(page, pfn);
5206 + }
5207 __free_one_page(page, pfn, zone, order, migratetype);
5208 - if (unlikely(!is_migrate_isolate(migratetype)))
5209 - __mod_zone_freepage_state(zone, 1 << order, migratetype);
5210 spin_unlock(&zone->lock);
5211 }
5212
5213 @@ -1485,7 +1474,7 @@ void split_page(struct page *page, unsigned int order)
5214 }
5215 EXPORT_SYMBOL_GPL(split_page);
5216
5217 -static int __isolate_free_page(struct page *page, unsigned int order)
5218 +int __isolate_free_page(struct page *page, unsigned int order)
5219 {
5220 unsigned long watermark;
5221 struct zone *zone;
5222 diff --git a/mm/page_isolation.c b/mm/page_isolation.c
5223 index d1473b2e9481..c8778f7e208e 100644
5224 --- a/mm/page_isolation.c
5225 +++ b/mm/page_isolation.c
5226 @@ -60,6 +60,7 @@ out:
5227 int migratetype = get_pageblock_migratetype(page);
5228
5229 set_pageblock_migratetype(page, MIGRATE_ISOLATE);
5230 + zone->nr_isolate_pageblock++;
5231 nr_pages = move_freepages_block(zone, page, MIGRATE_ISOLATE);
5232
5233 __mod_zone_freepage_state(zone, -nr_pages, migratetype);
5234 @@ -75,16 +76,54 @@ void unset_migratetype_isolate(struct page *page, unsigned migratetype)
5235 {
5236 struct zone *zone;
5237 unsigned long flags, nr_pages;
5238 + struct page *isolated_page = NULL;
5239 + unsigned int order;
5240 + unsigned long page_idx, buddy_idx;
5241 + struct page *buddy;
5242
5243 zone = page_zone(page);
5244 spin_lock_irqsave(&zone->lock, flags);
5245 if (get_pageblock_migratetype(page) != MIGRATE_ISOLATE)
5246 goto out;
5247 - nr_pages = move_freepages_block(zone, page, migratetype);
5248 - __mod_zone_freepage_state(zone, nr_pages, migratetype);
5249 +
5250 + /*
5251 + * Because freepage with more than pageblock_order on isolated
5252 + * pageblock is restricted to merge due to freepage counting problem,
5253 + * it is possible that there is free buddy page.
5254 + * move_freepages_block() doesn't care of merge so we need other
5255 + * approach in order to merge them. Isolation and free will make
5256 + * these pages to be merged.
5257 + */
5258 + if (PageBuddy(page)) {
5259 + order = page_order(page);
5260 + if (order >= pageblock_order) {
5261 + page_idx = page_to_pfn(page) & ((1 << MAX_ORDER) - 1);
5262 + buddy_idx = __find_buddy_index(page_idx, order);
5263 + buddy = page + (buddy_idx - page_idx);
5264 +
5265 + if (!is_migrate_isolate_page(buddy)) {
5266 + __isolate_free_page(page, order);
5267 + set_page_refcounted(page);
5268 + isolated_page = page;
5269 + }
5270 + }
5271 + }
5272 +
5273 + /*
5274 + * If we isolate freepage with more than pageblock_order, there
5275 + * should be no freepage in the range, so we could avoid costly
5276 + * pageblock scanning for freepage moving.
5277 + */
5278 + if (!isolated_page) {
5279 + nr_pages = move_freepages_block(zone, page, migratetype);
5280 + __mod_zone_freepage_state(zone, nr_pages, migratetype);
5281 + }
5282 set_pageblock_migratetype(page, migratetype);
5283 + zone->nr_isolate_pageblock--;
5284 out:
5285 spin_unlock_irqrestore(&zone->lock, flags);
5286 + if (isolated_page)
5287 + __free_pages(isolated_page, order);
5288 }
5289
5290 static inline struct page *
5291 diff --git a/net/ceph/crypto.c b/net/ceph/crypto.c
5292 index ffeba8f9dda9..c0d666a993ec 100644
5293 --- a/net/ceph/crypto.c
5294 +++ b/net/ceph/crypto.c
5295 @@ -90,11 +90,82 @@ static struct crypto_blkcipher *ceph_crypto_alloc_cipher(void)
5296
5297 static const u8 *aes_iv = (u8 *)CEPH_AES_IV;
5298
5299 +/*
5300 + * Should be used for buffers allocated with ceph_kvmalloc().
5301 + * Currently these are encrypt out-buffer (ceph_buffer) and decrypt
5302 + * in-buffer (msg front).
5303 + *
5304 + * Dispose of @sgt with teardown_sgtable().
5305 + *
5306 + * @prealloc_sg is to avoid memory allocation inside sg_alloc_table()
5307 + * in cases where a single sg is sufficient. No attempt to reduce the
5308 + * number of sgs by squeezing physically contiguous pages together is
5309 + * made though, for simplicity.
5310 + */
5311 +static int setup_sgtable(struct sg_table *sgt, struct scatterlist *prealloc_sg,
5312 + const void *buf, unsigned int buf_len)
5313 +{
5314 + struct scatterlist *sg;
5315 + const bool is_vmalloc = is_vmalloc_addr(buf);
5316 + unsigned int off = offset_in_page(buf);
5317 + unsigned int chunk_cnt = 1;
5318 + unsigned int chunk_len = PAGE_ALIGN(off + buf_len);
5319 + int i;
5320 + int ret;
5321 +
5322 + if (buf_len == 0) {
5323 + memset(sgt, 0, sizeof(*sgt));
5324 + return -EINVAL;
5325 + }
5326 +
5327 + if (is_vmalloc) {
5328 + chunk_cnt = chunk_len >> PAGE_SHIFT;
5329 + chunk_len = PAGE_SIZE;
5330 + }
5331 +
5332 + if (chunk_cnt > 1) {
5333 + ret = sg_alloc_table(sgt, chunk_cnt, GFP_NOFS);
5334 + if (ret)
5335 + return ret;
5336 + } else {
5337 + WARN_ON(chunk_cnt != 1);
5338 + sg_init_table(prealloc_sg, 1);
5339 + sgt->sgl = prealloc_sg;
5340 + sgt->nents = sgt->orig_nents = 1;
5341 + }
5342 +
5343 + for_each_sg(sgt->sgl, sg, sgt->orig_nents, i) {
5344 + struct page *page;
5345 + unsigned int len = min(chunk_len - off, buf_len);
5346 +
5347 + if (is_vmalloc)
5348 + page = vmalloc_to_page(buf);
5349 + else
5350 + page = virt_to_page(buf);
5351 +
5352 + sg_set_page(sg, page, len, off);
5353 +
5354 + off = 0;
5355 + buf += len;
5356 + buf_len -= len;
5357 + }
5358 + WARN_ON(buf_len != 0);
5359 +
5360 + return 0;
5361 +}
5362 +
5363 +static void teardown_sgtable(struct sg_table *sgt)
5364 +{
5365 + if (sgt->orig_nents > 1)
5366 + sg_free_table(sgt);
5367 +}
5368 +
5369 static int ceph_aes_encrypt(const void *key, int key_len,
5370 void *dst, size_t *dst_len,
5371 const void *src, size_t src_len)
5372 {
5373 - struct scatterlist sg_in[2], sg_out[1];
5374 + struct scatterlist sg_in[2], prealloc_sg;
5375 + struct sg_table sg_out;
5376 struct crypto_blkcipher *tfm = ceph_crypto_alloc_cipher();
5377 struct blkcipher_desc desc = { .tfm = tfm, .flags = 0 };
5378 int ret;
5379 @@ -110,16 +181,18 @@ static int ceph_aes_encrypt(const void *key, int key_len,
5380
5381 *dst_len = src_len + zero_padding;
5382
5383 - crypto_blkcipher_setkey((void *)tfm, key, key_len);
5384 sg_init_table(sg_in, 2);
5385 sg_set_buf(&sg_in[0], src, src_len);
5386 sg_set_buf(&sg_in[1], pad, zero_padding);
5387 - sg_init_table(sg_out, 1);
5388 - sg_set_buf(sg_out, dst, *dst_len);
5389 + ret = setup_sgtable(&sg_out, &prealloc_sg, dst, *dst_len);
5390 + if (ret)
5391 + goto out_tfm;
5392 +
5393 + crypto_blkcipher_setkey((void *)tfm, key, key_len);
5394 iv = crypto_blkcipher_crt(tfm)->iv;
5395 ivsize = crypto_blkcipher_ivsize(tfm);
5396 -
5397 memcpy(iv, aes_iv, ivsize);
5398 +
5399 /*
5400 print_hex_dump(KERN_ERR, "enc key: ", DUMP_PREFIX_NONE, 16, 1,
5401 key, key_len, 1);
5402 @@ -128,16 +201,22 @@ static int ceph_aes_encrypt(const void *key, int key_len,
5403 print_hex_dump(KERN_ERR, "enc pad: ", DUMP_PREFIX_NONE, 16, 1,
5404 pad, zero_padding, 1);
5405 */
5406 - ret = crypto_blkcipher_encrypt(&desc, sg_out, sg_in,
5407 + ret = crypto_blkcipher_encrypt(&desc, sg_out.sgl, sg_in,
5408 src_len + zero_padding);
5409 - crypto_free_blkcipher(tfm);
5410 - if (ret < 0)
5411 + if (ret < 0) {
5412 pr_err("ceph_aes_crypt failed %d\n", ret);
5413 + goto out_sg;
5414 + }
5415 /*
5416 print_hex_dump(KERN_ERR, "enc out: ", DUMP_PREFIX_NONE, 16, 1,
5417 dst, *dst_len, 1);
5418 */
5419 - return 0;
5420 +
5421 +out_sg:
5422 + teardown_sgtable(&sg_out);
5423 +out_tfm:
5424 + crypto_free_blkcipher(tfm);
5425 + return ret;
5426 }
5427
5428 static int ceph_aes_encrypt2(const void *key, int key_len, void *dst,
5429 @@ -145,7 +224,8 @@ static int ceph_aes_encrypt2(const void *key, int key_len, void *dst,
5430 const void *src1, size_t src1_len,
5431 const void *src2, size_t src2_len)
5432 {
5433 - struct scatterlist sg_in[3], sg_out[1];
5434 + struct scatterlist sg_in[3], prealloc_sg;
5435 + struct sg_table sg_out;
5436 struct crypto_blkcipher *tfm = ceph_crypto_alloc_cipher();
5437 struct blkcipher_desc desc = { .tfm = tfm, .flags = 0 };
5438 int ret;
5439 @@ -161,17 +241,19 @@ static int ceph_aes_encrypt2(const void *key, int key_len, void *dst,
5440
5441 *dst_len = src1_len + src2_len + zero_padding;
5442
5443 - crypto_blkcipher_setkey((void *)tfm, key, key_len);
5444 sg_init_table(sg_in, 3);
5445 sg_set_buf(&sg_in[0], src1, src1_len);
5446 sg_set_buf(&sg_in[1], src2, src2_len);
5447 sg_set_buf(&sg_in[2], pad, zero_padding);
5448 - sg_init_table(sg_out, 1);
5449 - sg_set_buf(sg_out, dst, *dst_len);
5450 + ret = setup_sgtable(&sg_out, &prealloc_sg, dst, *dst_len);
5451 + if (ret)
5452 + goto out_tfm;
5453 +
5454 + crypto_blkcipher_setkey((void *)tfm, key, key_len);
5455 iv = crypto_blkcipher_crt(tfm)->iv;
5456 ivsize = crypto_blkcipher_ivsize(tfm);
5457 -
5458 memcpy(iv, aes_iv, ivsize);
5459 +
5460 /*
5461 print_hex_dump(KERN_ERR, "enc key: ", DUMP_PREFIX_NONE, 16, 1,
5462 key, key_len, 1);
5463 @@ -182,23 +264,30 @@ static int ceph_aes_encrypt2(const void *key, int key_len, void *dst,
5464 print_hex_dump(KERN_ERR, "enc pad: ", DUMP_PREFIX_NONE, 16, 1,
5465 pad, zero_padding, 1);
5466 */
5467 - ret = crypto_blkcipher_encrypt(&desc, sg_out, sg_in,
5468 + ret = crypto_blkcipher_encrypt(&desc, sg_out.sgl, sg_in,
5469 src1_len + src2_len + zero_padding);
5470 - crypto_free_blkcipher(tfm);
5471 - if (ret < 0)
5472 + if (ret < 0) {
5473 pr_err("ceph_aes_crypt2 failed %d\n", ret);
5474 + goto out_sg;
5475 + }
5476 /*
5477 print_hex_dump(KERN_ERR, "enc out: ", DUMP_PREFIX_NONE, 16, 1,
5478 dst, *dst_len, 1);
5479 */
5480 - return 0;
5481 +
5482 +out_sg:
5483 + teardown_sgtable(&sg_out);
5484 +out_tfm:
5485 + crypto_free_blkcipher(tfm);
5486 + return ret;
5487 }
5488
5489 static int ceph_aes_decrypt(const void *key, int key_len,
5490 void *dst, size_t *dst_len,
5491 const void *src, size_t src_len)
5492 {
5493 - struct scatterlist sg_in[1], sg_out[2];
5494 + struct sg_table sg_in;
5495 + struct scatterlist sg_out[2], prealloc_sg;
5496 struct crypto_blkcipher *tfm = ceph_crypto_alloc_cipher();
5497 struct blkcipher_desc desc = { .tfm = tfm };
5498 char pad[16];
5499 @@ -210,16 +299,16 @@ static int ceph_aes_decrypt(const void *key, int key_len,
5500 if (IS_ERR(tfm))
5501 return PTR_ERR(tfm);
5502
5503 - crypto_blkcipher_setkey((void *)tfm, key, key_len);
5504 - sg_init_table(sg_in, 1);
5505 sg_init_table(sg_out, 2);
5506 - sg_set_buf(sg_in, src, src_len);
5507 sg_set_buf(&sg_out[0], dst, *dst_len);
5508 sg_set_buf(&sg_out[1], pad, sizeof(pad));
5509 + ret = setup_sgtable(&sg_in, &prealloc_sg, src, src_len);
5510 + if (ret)
5511 + goto out_tfm;
5512
5513 + crypto_blkcipher_setkey((void *)tfm, key, key_len);
5514 iv = crypto_blkcipher_crt(tfm)->iv;
5515 ivsize = crypto_blkcipher_ivsize(tfm);
5516 -
5517 memcpy(iv, aes_iv, ivsize);
5518
5519 /*
5520 @@ -228,12 +317,10 @@ static int ceph_aes_decrypt(const void *key, int key_len,
5521 print_hex_dump(KERN_ERR, "dec in: ", DUMP_PREFIX_NONE, 16, 1,
5522 src, src_len, 1);
5523 */
5524 -
5525 - ret = crypto_blkcipher_decrypt(&desc, sg_out, sg_in, src_len);
5526 - crypto_free_blkcipher(tfm);
5527 + ret = crypto_blkcipher_decrypt(&desc, sg_out, sg_in.sgl, src_len);
5528 if (ret < 0) {
5529 pr_err("ceph_aes_decrypt failed %d\n", ret);
5530 - return ret;
5531 + goto out_sg;
5532 }
5533
5534 if (src_len <= *dst_len)
5535 @@ -251,7 +338,12 @@ static int ceph_aes_decrypt(const void *key, int key_len,
5536 print_hex_dump(KERN_ERR, "dec out: ", DUMP_PREFIX_NONE, 16, 1,
5537 dst, *dst_len, 1);
5538 */
5539 - return 0;
5540 +
5541 +out_sg:
5542 + teardown_sgtable(&sg_in);
5543 +out_tfm:
5544 + crypto_free_blkcipher(tfm);
5545 + return ret;
5546 }
5547
5548 static int ceph_aes_decrypt2(const void *key, int key_len,
5549 @@ -259,7 +351,8 @@ static int ceph_aes_decrypt2(const void *key, int key_len,
5550 void *dst2, size_t *dst2_len,
5551 const void *src, size_t src_len)
5552 {
5553 - struct scatterlist sg_in[1], sg_out[3];
5554 + struct sg_table sg_in;
5555 + struct scatterlist sg_out[3], prealloc_sg;
5556 struct crypto_blkcipher *tfm = ceph_crypto_alloc_cipher();
5557 struct blkcipher_desc desc = { .tfm = tfm };
5558 char pad[16];
5559 @@ -271,17 +364,17 @@ static int ceph_aes_decrypt2(const void *key, int key_len,
5560 if (IS_ERR(tfm))
5561 return PTR_ERR(tfm);
5562
5563 - sg_init_table(sg_in, 1);
5564 - sg_set_buf(sg_in, src, src_len);
5565 sg_init_table(sg_out, 3);
5566 sg_set_buf(&sg_out[0], dst1, *dst1_len);
5567 sg_set_buf(&sg_out[1], dst2, *dst2_len);
5568 sg_set_buf(&sg_out[2], pad, sizeof(pad));
5569 + ret = setup_sgtable(&sg_in, &prealloc_sg, src, src_len);
5570 + if (ret)
5571 + goto out_tfm;
5572
5573 crypto_blkcipher_setkey((void *)tfm, key, key_len);
5574 iv = crypto_blkcipher_crt(tfm)->iv;
5575 ivsize = crypto_blkcipher_ivsize(tfm);
5576 -
5577 memcpy(iv, aes_iv, ivsize);
5578
5579 /*
5580 @@ -290,12 +383,10 @@ static int ceph_aes_decrypt2(const void *key, int key_len,
5581 print_hex_dump(KERN_ERR, "dec in: ", DUMP_PREFIX_NONE, 16, 1,
5582 src, src_len, 1);
5583 */
5584 -
5585 - ret = crypto_blkcipher_decrypt(&desc, sg_out, sg_in, src_len);
5586 - crypto_free_blkcipher(tfm);
5587 + ret = crypto_blkcipher_decrypt(&desc, sg_out, sg_in.sgl, src_len);
5588 if (ret < 0) {
5589 pr_err("ceph_aes_decrypt failed %d\n", ret);
5590 - return ret;
5591 + goto out_sg;
5592 }
5593
5594 if (src_len <= *dst1_len)
5595 @@ -325,7 +416,11 @@ static int ceph_aes_decrypt2(const void *key, int key_len,
5596 dst2, *dst2_len, 1);
5597 */
5598
5599 - return 0;
5600 +out_sg:
5601 + teardown_sgtable(&sg_in);
5602 +out_tfm:
5603 + crypto_free_blkcipher(tfm);
5604 + return ret;
5605 }
5606
5607
5608 diff --git a/net/ipv4/inet_fragment.c b/net/ipv4/inet_fragment.c
5609 index 9eb89f3f0ee4..19419b60cb37 100644
5610 --- a/net/ipv4/inet_fragment.c
5611 +++ b/net/ipv4/inet_fragment.c
5612 @@ -146,7 +146,6 @@ evict_again:
5613 atomic_inc(&fq->refcnt);
5614 spin_unlock(&hb->chain_lock);
5615 del_timer_sync(&fq->timer);
5616 - WARN_ON(atomic_read(&fq->refcnt) != 1);
5617 inet_frag_put(fq, f);
5618 goto evict_again;
5619 }
5620 @@ -285,7 +284,8 @@ static inline void fq_unlink(struct inet_frag_queue *fq, struct inet_frags *f)
5621 struct inet_frag_bucket *hb;
5622
5623 hb = get_frag_bucket_locked(fq, f);
5624 - hlist_del(&fq->list);
5625 + if (!(fq->flags & INET_FRAG_EVICTED))
5626 + hlist_del(&fq->list);
5627 spin_unlock(&hb->chain_lock);
5628 }
5629
5630 diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
5631 index 5cb830c78990..2407e5db84ff 100644
5632 --- a/net/ipv4/ip_sockglue.c
5633 +++ b/net/ipv4/ip_sockglue.c
5634 @@ -195,7 +195,7 @@ int ip_cmsg_send(struct net *net, struct msghdr *msg, struct ipcm_cookie *ipc,
5635 for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) {
5636 if (!CMSG_OK(msg, cmsg))
5637 return -EINVAL;
5638 -#if defined(CONFIG_IPV6)
5639 +#if IS_ENABLED(CONFIG_IPV6)
5640 if (allow_ipv6 &&
5641 cmsg->cmsg_level == SOL_IPV6 &&
5642 cmsg->cmsg_type == IPV6_PKTINFO) {
5643 diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
5644 index 97299d76c1b0..cacb493a133d 100644
5645 --- a/net/ipv6/ip6_gre.c
5646 +++ b/net/ipv6/ip6_gre.c
5647 @@ -957,8 +957,6 @@ static void ip6gre_tnl_link_config(struct ip6_tnl *t, int set_mtu)
5648 else
5649 dev->flags &= ~IFF_POINTOPOINT;
5650
5651 - dev->iflink = p->link;
5652 -
5653 /* Precalculate GRE options length */
5654 if (t->parms.o_flags&(GRE_CSUM|GRE_KEY|GRE_SEQ)) {
5655 if (t->parms.o_flags&GRE_CSUM)
5656 @@ -1268,6 +1266,7 @@ static int ip6gre_tunnel_init(struct net_device *dev)
5657 u64_stats_init(&ip6gre_tunnel_stats->syncp);
5658 }
5659
5660 + dev->iflink = tunnel->parms.link;
5661
5662 return 0;
5663 }
5664 @@ -1477,6 +1476,8 @@ static int ip6gre_tap_init(struct net_device *dev)
5665 if (!dev->tstats)
5666 return -ENOMEM;
5667
5668 + dev->iflink = tunnel->parms.link;
5669 +
5670 return 0;
5671 }
5672
5673 diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
5674 index 69a84b464009..d2eeb3bf8fd8 100644
5675 --- a/net/ipv6/ip6_tunnel.c
5676 +++ b/net/ipv6/ip6_tunnel.c
5677 @@ -272,9 +272,6 @@ static int ip6_tnl_create2(struct net_device *dev)
5678 int err;
5679
5680 t = netdev_priv(dev);
5681 - err = ip6_tnl_dev_init(dev);
5682 - if (err < 0)
5683 - goto out;
5684
5685 err = register_netdevice(dev);
5686 if (err < 0)
5687 @@ -1462,6 +1459,7 @@ ip6_tnl_change_mtu(struct net_device *dev, int new_mtu)
5688
5689
5690 static const struct net_device_ops ip6_tnl_netdev_ops = {
5691 + .ndo_init = ip6_tnl_dev_init,
5692 .ndo_uninit = ip6_tnl_dev_uninit,
5693 .ndo_start_xmit = ip6_tnl_xmit,
5694 .ndo_do_ioctl = ip6_tnl_ioctl,
5695 @@ -1546,16 +1544,10 @@ static int __net_init ip6_fb_tnl_dev_init(struct net_device *dev)
5696 struct ip6_tnl *t = netdev_priv(dev);
5697 struct net *net = dev_net(dev);
5698 struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);
5699 - int err = ip6_tnl_dev_init_gen(dev);
5700 -
5701 - if (err)
5702 - return err;
5703
5704 t->parms.proto = IPPROTO_IPV6;
5705 dev_hold(dev);
5706
5707 - ip6_tnl_link_config(t);
5708 -
5709 rcu_assign_pointer(ip6n->tnls_wc[0], t);
5710 return 0;
5711 }
5712 diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
5713 index 5833a2244467..99c9487f236a 100644
5714 --- a/net/ipv6/ip6_vti.c
5715 +++ b/net/ipv6/ip6_vti.c
5716 @@ -172,10 +172,6 @@ static int vti6_tnl_create2(struct net_device *dev)
5717 struct vti6_net *ip6n = net_generic(net, vti6_net_id);
5718 int err;
5719
5720 - err = vti6_dev_init(dev);
5721 - if (err < 0)
5722 - goto out;
5723 -
5724 err = register_netdevice(dev);
5725 if (err < 0)
5726 goto out;
5727 @@ -783,6 +779,7 @@ static int vti6_change_mtu(struct net_device *dev, int new_mtu)
5728 }
5729
5730 static const struct net_device_ops vti6_netdev_ops = {
5731 + .ndo_init = vti6_dev_init,
5732 .ndo_uninit = vti6_dev_uninit,
5733 .ndo_start_xmit = vti6_tnl_xmit,
5734 .ndo_do_ioctl = vti6_ioctl,
5735 @@ -852,16 +849,10 @@ static int __net_init vti6_fb_tnl_dev_init(struct net_device *dev)
5736 struct ip6_tnl *t = netdev_priv(dev);
5737 struct net *net = dev_net(dev);
5738 struct vti6_net *ip6n = net_generic(net, vti6_net_id);
5739 - int err = vti6_dev_init_gen(dev);
5740 -
5741 - if (err)
5742 - return err;
5743
5744 t->parms.proto = IPPROTO_IPV6;
5745 dev_hold(dev);
5746
5747 - vti6_link_config(t);
5748 -
5749 rcu_assign_pointer(ip6n->tnls_wc[0], t);
5750 return 0;
5751 }
5752 diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
5753 index 6163f851dc01..ca1c7c4ccc88 100644
5754 --- a/net/ipv6/sit.c
5755 +++ b/net/ipv6/sit.c
5756 @@ -195,10 +195,8 @@ static int ipip6_tunnel_create(struct net_device *dev)
5757 struct sit_net *sitn = net_generic(net, sit_net_id);
5758 int err;
5759
5760 - err = ipip6_tunnel_init(dev);
5761 - if (err < 0)
5762 - goto out;
5763 - ipip6_tunnel_clone_6rd(dev, sitn);
5764 + memcpy(dev->dev_addr, &t->parms.iph.saddr, 4);
5765 + memcpy(dev->broadcast, &t->parms.iph.daddr, 4);
5766
5767 if ((__force u16)t->parms.i_flags & SIT_ISATAP)
5768 dev->priv_flags |= IFF_ISATAP;
5769 @@ -207,7 +205,8 @@ static int ipip6_tunnel_create(struct net_device *dev)
5770 if (err < 0)
5771 goto out;
5772
5773 - strcpy(t->parms.name, dev->name);
5774 + ipip6_tunnel_clone_6rd(dev, sitn);
5775 +
5776 dev->rtnl_link_ops = &sit_link_ops;
5777
5778 dev_hold(dev);
5779 @@ -1314,6 +1313,7 @@ static int ipip6_tunnel_change_mtu(struct net_device *dev, int new_mtu)
5780 }
5781
5782 static const struct net_device_ops ipip6_netdev_ops = {
5783 + .ndo_init = ipip6_tunnel_init,
5784 .ndo_uninit = ipip6_tunnel_uninit,
5785 .ndo_start_xmit = sit_tunnel_xmit,
5786 .ndo_do_ioctl = ipip6_tunnel_ioctl,
5787 @@ -1359,9 +1359,7 @@ static int ipip6_tunnel_init(struct net_device *dev)
5788
5789 tunnel->dev = dev;
5790 tunnel->net = dev_net(dev);
5791 -
5792 - memcpy(dev->dev_addr, &tunnel->parms.iph.saddr, 4);
5793 - memcpy(dev->broadcast, &tunnel->parms.iph.daddr, 4);
5794 + strcpy(tunnel->parms.name, dev->name);
5795
5796 ipip6_tunnel_bind_dev(dev);
5797 dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
5798 @@ -1386,7 +1384,6 @@ static int __net_init ipip6_fb_tunnel_init(struct net_device *dev)
5799
5800 tunnel->dev = dev;
5801 tunnel->net = dev_net(dev);
5802 - strcpy(tunnel->parms.name, dev->name);
5803
5804 iph->version = 4;
5805 iph->protocol = IPPROTO_IPV6;
5806 diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
5807 index 9713dc54ea4b..af526e9cfc1a 100644
5808 --- a/net/mac80211/ibss.c
5809 +++ b/net/mac80211/ibss.c
5810 @@ -804,7 +804,7 @@ ieee80211_ibss_process_chanswitch(struct ieee80211_sub_if_data *sdata,
5811
5812 memset(&params, 0, sizeof(params));
5813 memset(&csa_ie, 0, sizeof(csa_ie));
5814 - err = ieee80211_parse_ch_switch_ie(sdata, elems, beacon,
5815 + err = ieee80211_parse_ch_switch_ie(sdata, elems,
5816 ifibss->chandef.chan->band,
5817 sta_flags, ifibss->bssid, &csa_ie);
5818 /* can't switch to destination channel, fail */
5819 diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
5820 index ef7a089ac546..5d102b5c6e81 100644
5821 --- a/net/mac80211/ieee80211_i.h
5822 +++ b/net/mac80211/ieee80211_i.h
5823 @@ -1639,7 +1639,6 @@ void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,
5824 * ieee80211_parse_ch_switch_ie - parses channel switch IEs
5825 * @sdata: the sdata of the interface which has received the frame
5826 * @elems: parsed 802.11 elements received with the frame
5827 - * @beacon: indicates if the frame was a beacon or probe response
5828 * @current_band: indicates the current band
5829 * @sta_flags: contains information about own capabilities and restrictions
5830 * to decide which channel switch announcements can be accepted. Only the
5831 @@ -1653,7 +1652,7 @@ void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,
5832 * Return: 0 on success, <0 on error and >0 if there is nothing to parse.
5833 */
5834 int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata,
5835 - struct ieee802_11_elems *elems, bool beacon,
5836 + struct ieee802_11_elems *elems,
5837 enum ieee80211_band current_band,
5838 u32 sta_flags, u8 *bssid,
5839 struct ieee80211_csa_ie *csa_ie);
5840 diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
5841 index f75e5f132c5a..3538e5e47b0e 100644
5842 --- a/net/mac80211/iface.c
5843 +++ b/net/mac80211/iface.c
5844 @@ -765,10 +765,12 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
5845 int i, flushed;
5846 struct ps_data *ps;
5847 struct cfg80211_chan_def chandef;
5848 + bool cancel_scan;
5849
5850 clear_bit(SDATA_STATE_RUNNING, &sdata->state);
5851
5852 - if (rcu_access_pointer(local->scan_sdata) == sdata)
5853 + cancel_scan = rcu_access_pointer(local->scan_sdata) == sdata;
5854 + if (cancel_scan)
5855 ieee80211_scan_cancel(local);
5856
5857 /*
5858 @@ -990,6 +992,9 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
5859
5860 ieee80211_recalc_ps(local, -1);
5861
5862 + if (cancel_scan)
5863 + flush_delayed_work(&local->scan_work);
5864 +
5865 if (local->open_count == 0) {
5866 ieee80211_stop_device(local);
5867
5868 diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
5869 index e9f99c1e3fad..0c8b2a77d312 100644
5870 --- a/net/mac80211/mesh.c
5871 +++ b/net/mac80211/mesh.c
5872 @@ -874,7 +874,7 @@ ieee80211_mesh_process_chnswitch(struct ieee80211_sub_if_data *sdata,
5873
5874 memset(&params, 0, sizeof(params));
5875 memset(&csa_ie, 0, sizeof(csa_ie));
5876 - err = ieee80211_parse_ch_switch_ie(sdata, elems, beacon, band,
5877 + err = ieee80211_parse_ch_switch_ie(sdata, elems, band,
5878 sta_flags, sdata->vif.addr,
5879 &csa_ie);
5880 if (err < 0)
5881 diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
5882 index b82a12a9f0f1..86d44db5da06 100644
5883 --- a/net/mac80211/mlme.c
5884 +++ b/net/mac80211/mlme.c
5885 @@ -1058,7 +1058,7 @@ ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
5886
5887 current_band = cbss->channel->band;
5888 memset(&csa_ie, 0, sizeof(csa_ie));
5889 - res = ieee80211_parse_ch_switch_ie(sdata, elems, beacon, current_band,
5890 + res = ieee80211_parse_ch_switch_ie(sdata, elems, current_band,
5891 ifmgd->flags,
5892 ifmgd->associated->bssid, &csa_ie);
5893 if (res < 0)
5894 @@ -1154,7 +1154,8 @@ ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
5895 ieee80211_queue_work(&local->hw, &ifmgd->chswitch_work);
5896 else
5897 mod_timer(&ifmgd->chswitch_timer,
5898 - TU_TO_EXP_TIME(csa_ie.count * cbss->beacon_interval));
5899 + TU_TO_EXP_TIME((csa_ie.count - 1) *
5900 + cbss->beacon_interval));
5901 }
5902
5903 static u32 ieee80211_handle_pwr_constr(struct ieee80211_sub_if_data *sdata,
5904 diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
5905 index bd2c9b22c945..7e77410ca799 100644
5906 --- a/net/mac80211/rx.c
5907 +++ b/net/mac80211/rx.c
5908 @@ -1667,11 +1667,14 @@ ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx)
5909 sc = le16_to_cpu(hdr->seq_ctrl);
5910 frag = sc & IEEE80211_SCTL_FRAG;
5911
5912 - if (likely((!ieee80211_has_morefrags(fc) && frag == 0) ||
5913 - is_multicast_ether_addr(hdr->addr1))) {
5914 - /* not fragmented */
5915 + if (likely(!ieee80211_has_morefrags(fc) && frag == 0))
5916 + goto out;
5917 +
5918 + if (is_multicast_ether_addr(hdr->addr1)) {
5919 + rx->local->dot11MulticastReceivedFrameCount++;
5920 goto out;
5921 }
5922 +
5923 I802_DEBUG_INC(rx->local->rx_handlers_fragments);
5924
5925 if (skb_linearize(rx->skb))
5926 @@ -1764,10 +1767,7 @@ ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx)
5927 out:
5928 if (rx->sta)
5929 rx->sta->rx_packets++;
5930 - if (is_multicast_ether_addr(hdr->addr1))
5931 - rx->local->dot11MulticastReceivedFrameCount++;
5932 - else
5933 - ieee80211_led_rx(rx->local);
5934 + ieee80211_led_rx(rx->local);
5935 return RX_CONTINUE;
5936 }
5937
5938 diff --git a/net/mac80211/spectmgmt.c b/net/mac80211/spectmgmt.c
5939 index 6ab009070084..efeba56c913b 100644
5940 --- a/net/mac80211/spectmgmt.c
5941 +++ b/net/mac80211/spectmgmt.c
5942 @@ -22,7 +22,7 @@
5943 #include "wme.h"
5944
5945 int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata,
5946 - struct ieee802_11_elems *elems, bool beacon,
5947 + struct ieee802_11_elems *elems,
5948 enum ieee80211_band current_band,
5949 u32 sta_flags, u8 *bssid,
5950 struct ieee80211_csa_ie *csa_ie)
5951 @@ -91,19 +91,13 @@ int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata,
5952 return -EINVAL;
5953 }
5954
5955 - if (!beacon && sec_chan_offs) {
5956 + if (sec_chan_offs) {
5957 secondary_channel_offset = sec_chan_offs->sec_chan_offs;
5958 - } else if (beacon && ht_oper) {
5959 - secondary_channel_offset =
5960 - ht_oper->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET;
5961 } else if (!(sta_flags & IEEE80211_STA_DISABLE_HT)) {
5962 - /* If it's not a beacon, HT is enabled and the IE not present,
5963 - * it's 20 MHz, 802.11-2012 8.5.2.6:
5964 - * This element [the Secondary Channel Offset Element] is
5965 - * present when switching to a 40 MHz channel. It may be
5966 - * present when switching to a 20 MHz channel (in which
5967 - * case the secondary channel offset is set to SCN).
5968 - */
5969 + /* If the secondary channel offset IE is not present,
5970 + * we can't know what's the post-CSA offset, so the
5971 + * best we can do is use 20MHz.
5972 + */
5973 secondary_channel_offset = IEEE80211_HT_PARAM_CHA_SEC_NONE;
5974 }
5975
5976 diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c
5977 index ec8114fae50b..6582dce828b5 100644
5978 --- a/net/netfilter/ipset/ip_set_core.c
5979 +++ b/net/netfilter/ipset/ip_set_core.c
5980 @@ -635,7 +635,7 @@ ip_set_nfnl_get_byindex(struct net *net, ip_set_id_t index)
5981 struct ip_set *set;
5982 struct ip_set_net *inst = ip_set_pernet(net);
5983
5984 - if (index > inst->ip_set_max)
5985 + if (index >= inst->ip_set_max)
5986 return IPSET_INVALID_ID;
5987
5988 nfnl_lock(NFNL_SUBSYS_IPSET);
5989 diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
5990 index deeb95fb7028..c62c08e0998d 100644
5991 --- a/net/netfilter/nf_tables_api.c
5992 +++ b/net/netfilter/nf_tables_api.c
5993 @@ -1102,10 +1102,10 @@ static int nf_tables_newchain(struct sock *nlsk, struct sk_buff *skb,
5994 basechain->stats = stats;
5995 } else {
5996 stats = netdev_alloc_pcpu_stats(struct nft_stats);
5997 - if (IS_ERR(stats)) {
5998 + if (stats == NULL) {
5999 module_put(type->owner);
6000 kfree(basechain);
6001 - return PTR_ERR(stats);
6002 + return -ENOMEM;
6003 }
6004 rcu_assign_pointer(basechain->stats, stats);
6005 }
6006 diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c
6007 index a11c5ff2f720..32507355cc5d 100644
6008 --- a/net/netfilter/nfnetlink_log.c
6009 +++ b/net/netfilter/nfnetlink_log.c
6010 @@ -43,7 +43,8 @@
6011 #define NFULNL_NLBUFSIZ_DEFAULT NLMSG_GOODSIZE
6012 #define NFULNL_TIMEOUT_DEFAULT 100 /* every second */
6013 #define NFULNL_QTHRESH_DEFAULT 100 /* 100 packets */
6014 -#define NFULNL_COPY_RANGE_MAX 0xFFFF /* max packet size is limited by 16-bit struct nfattr nfa_len field */
6015 +/* max packet size is limited by 16-bit struct nfattr nfa_len field */
6016 +#define NFULNL_COPY_RANGE_MAX (0xFFFF - NLA_HDRLEN)
6017
6018 #define PRINTR(x, args...) do { if (net_ratelimit()) \
6019 printk(x, ## args); } while (0);
6020 @@ -252,6 +253,8 @@ nfulnl_set_mode(struct nfulnl_instance *inst, u_int8_t mode,
6021
6022 case NFULNL_COPY_PACKET:
6023 inst->copy_mode = mode;
6024 + if (range == 0)
6025 + range = NFULNL_COPY_RANGE_MAX;
6026 inst->copy_range = min_t(unsigned int,
6027 range, NFULNL_COPY_RANGE_MAX);
6028 break;
6029 @@ -343,26 +346,25 @@ nfulnl_alloc_skb(struct net *net, u32 peer_portid, unsigned int inst_size,
6030 return skb;
6031 }
6032
6033 -static int
6034 +static void
6035 __nfulnl_send(struct nfulnl_instance *inst)
6036 {
6037 - int status = -1;
6038 -
6039 if (inst->qlen > 1) {
6040 struct nlmsghdr *nlh = nlmsg_put(inst->skb, 0, 0,
6041 NLMSG_DONE,
6042 sizeof(struct nfgenmsg),
6043 0);
6044 - if (!nlh)
6045 + if (WARN_ONCE(!nlh, "bad nlskb size: %u, tailroom %d\n",
6046 + inst->skb->len, skb_tailroom(inst->skb))) {
6047 + kfree_skb(inst->skb);
6048 goto out;
6049 + }
6050 }
6051 - status = nfnetlink_unicast(inst->skb, inst->net, inst->peer_portid,
6052 - MSG_DONTWAIT);
6053 -
6054 + nfnetlink_unicast(inst->skb, inst->net, inst->peer_portid,
6055 + MSG_DONTWAIT);
6056 +out:
6057 inst->qlen = 0;
6058 inst->skb = NULL;
6059 -out:
6060 - return status;
6061 }
6062
6063 static void
6064 @@ -649,7 +651,8 @@ nfulnl_log_packet(struct net *net,
6065 + nla_total_size(sizeof(u_int32_t)) /* gid */
6066 + nla_total_size(plen) /* prefix */
6067 + nla_total_size(sizeof(struct nfulnl_msg_packet_hw))
6068 - + nla_total_size(sizeof(struct nfulnl_msg_packet_timestamp));
6069 + + nla_total_size(sizeof(struct nfulnl_msg_packet_timestamp))
6070 + + nla_total_size(sizeof(struct nfgenmsg)); /* NLMSG_DONE */
6071
6072 if (in && skb_mac_header_was_set(skb)) {
6073 size += nla_total_size(skb->dev->hard_header_len)
6074 @@ -678,8 +681,7 @@ nfulnl_log_packet(struct net *net,
6075 break;
6076
6077 case NFULNL_COPY_PACKET:
6078 - if (inst->copy_range == 0
6079 - || inst->copy_range > skb->len)
6080 + if (inst->copy_range > skb->len)
6081 data_len = skb->len;
6082 else
6083 data_len = inst->copy_range;
6084 @@ -692,8 +694,7 @@ nfulnl_log_packet(struct net *net,
6085 goto unlock_and_release;
6086 }
6087
6088 - if (inst->skb &&
6089 - size > skb_tailroom(inst->skb) - sizeof(struct nfgenmsg)) {
6090 + if (inst->skb && size > skb_tailroom(inst->skb)) {
6091 /* either the queue len is too high or we don't have
6092 * enough room in the skb left. flush to userspace. */
6093 __nfulnl_flush(inst);
6094 diff --git a/net/netfilter/nft_compat.c b/net/netfilter/nft_compat.c
6095 index 1840989092ed..5b5ab9ec1a90 100644
6096 --- a/net/netfilter/nft_compat.c
6097 +++ b/net/netfilter/nft_compat.c
6098 @@ -696,7 +696,7 @@ nft_target_select_ops(const struct nft_ctx *ctx,
6099 family = ctx->afi->family;
6100
6101 /* Re-use the existing target if it's already loaded. */
6102 - list_for_each_entry(nft_target, &nft_match_list, head) {
6103 + list_for_each_entry(nft_target, &nft_target_list, head) {
6104 struct xt_target *target = nft_target->ops.data;
6105
6106 if (strcmp(target->name, tg_name) == 0 &&
6107 diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
6108 index f1de72de273e..0007b8180397 100644
6109 --- a/net/netlink/af_netlink.c
6110 +++ b/net/netlink/af_netlink.c
6111 @@ -1440,7 +1440,7 @@ static void netlink_unbind(int group, long unsigned int groups,
6112 return;
6113
6114 for (undo = 0; undo < group; undo++)
6115 - if (test_bit(group, &groups))
6116 + if (test_bit(undo, &groups))
6117 nlk->netlink_unbind(undo);
6118 }
6119
6120 @@ -1492,7 +1492,7 @@ static int netlink_bind(struct socket *sock, struct sockaddr *addr,
6121 netlink_insert(sk, net, nladdr->nl_pid) :
6122 netlink_autobind(sock);
6123 if (err) {
6124 - netlink_unbind(nlk->ngroups - 1, groups, nlk);
6125 + netlink_unbind(nlk->ngroups, groups, nlk);
6126 return err;
6127 }
6128 }
6129 @@ -2509,6 +2509,7 @@ __netlink_kernel_create(struct net *net, int unit, struct module *module,
6130 nl_table[unit].module = module;
6131 if (cfg) {
6132 nl_table[unit].bind = cfg->bind;
6133 + nl_table[unit].unbind = cfg->unbind;
6134 nl_table[unit].flags = cfg->flags;
6135 if (cfg->compare)
6136 nl_table[unit].compare = cfg->compare;
6137 diff --git a/net/sctp/associola.c b/net/sctp/associola.c
6138 index a88b8524846e..f791edd64d6c 100644
6139 --- a/net/sctp/associola.c
6140 +++ b/net/sctp/associola.c
6141 @@ -1668,6 +1668,8 @@ struct sctp_chunk *sctp_assoc_lookup_asconf_ack(
6142 * ack chunk whose serial number matches that of the request.
6143 */
6144 list_for_each_entry(ack, &asoc->asconf_ack_list, transmitted_list) {
6145 + if (sctp_chunk_pending(ack))
6146 + continue;
6147 if (ack->subh.addip_hdr->serial == serial) {
6148 sctp_chunk_hold(ack);
6149 return ack;
6150 diff --git a/net/sctp/auth.c b/net/sctp/auth.c
6151 index 0e8529113dc5..fb7976aee61c 100644
6152 --- a/net/sctp/auth.c
6153 +++ b/net/sctp/auth.c
6154 @@ -862,8 +862,6 @@ int sctp_auth_set_key(struct sctp_endpoint *ep,
6155 list_add(&cur_key->key_list, sh_keys);
6156
6157 cur_key->key = key;
6158 - sctp_auth_key_hold(key);
6159 -
6160 return 0;
6161 nomem:
6162 if (!replace)
6163 diff --git a/net/sctp/inqueue.c b/net/sctp/inqueue.c
6164 index 4de12afa13d4..7e8a16c77039 100644
6165 --- a/net/sctp/inqueue.c
6166 +++ b/net/sctp/inqueue.c
6167 @@ -140,18 +140,9 @@ struct sctp_chunk *sctp_inq_pop(struct sctp_inq *queue)
6168 } else {
6169 /* Nothing to do. Next chunk in the packet, please. */
6170 ch = (sctp_chunkhdr_t *) chunk->chunk_end;
6171 -
6172 /* Force chunk->skb->data to chunk->chunk_end. */
6173 - skb_pull(chunk->skb,
6174 - chunk->chunk_end - chunk->skb->data);
6175 -
6176 - /* Verify that we have at least chunk headers
6177 - * worth of buffer left.
6178 - */
6179 - if (skb_headlen(chunk->skb) < sizeof(sctp_chunkhdr_t)) {
6180 - sctp_chunk_free(chunk);
6181 - chunk = queue->in_progress = NULL;
6182 - }
6183 + skb_pull(chunk->skb, chunk->chunk_end - chunk->skb->data);
6184 + /* We are guaranteed to pull a SCTP header. */
6185 }
6186 }
6187
6188 @@ -187,24 +178,14 @@ struct sctp_chunk *sctp_inq_pop(struct sctp_inq *queue)
6189 skb_pull(chunk->skb, sizeof(sctp_chunkhdr_t));
6190 chunk->subh.v = NULL; /* Subheader is no longer valid. */
6191
6192 - if (chunk->chunk_end < skb_tail_pointer(chunk->skb)) {
6193 + if (chunk->chunk_end + sizeof(sctp_chunkhdr_t) <
6194 + skb_tail_pointer(chunk->skb)) {
6195 /* This is not a singleton */
6196 chunk->singleton = 0;
6197 } else if (chunk->chunk_end > skb_tail_pointer(chunk->skb)) {
6198 - /* RFC 2960, Section 6.10 Bundling
6199 - *
6200 - * Partial chunks MUST NOT be placed in an SCTP packet.
6201 - * If the receiver detects a partial chunk, it MUST drop
6202 - * the chunk.
6203 - *
6204 - * Since the end of the chunk is past the end of our buffer
6205 - * (which contains the whole packet, we can freely discard
6206 - * the whole packet.
6207 - */
6208 - sctp_chunk_free(chunk);
6209 - chunk = queue->in_progress = NULL;
6210 -
6211 - return NULL;
6212 + /* Discard inside state machine. */
6213 + chunk->pdiscard = 1;
6214 + chunk->chunk_end = skb_tail_pointer(chunk->skb);
6215 } else {
6216 /* We are at the end of the packet, so mark the chunk
6217 * in case we need to send a SACK.
6218 diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c
6219 index ae0e616a7ca5..9f32741abb1c 100644
6220 --- a/net/sctp/sm_make_chunk.c
6221 +++ b/net/sctp/sm_make_chunk.c
6222 @@ -2609,6 +2609,9 @@ do_addr_param:
6223 addr_param = param.v + sizeof(sctp_addip_param_t);
6224
6225 af = sctp_get_af_specific(param_type2af(param.p->type));
6226 + if (af == NULL)
6227 + break;
6228 +
6229 af->from_addr_param(&addr, addr_param,
6230 htons(asoc->peer.port), 0);
6231
6232 @@ -3110,50 +3113,63 @@ static __be16 sctp_process_asconf_param(struct sctp_association *asoc,
6233 return SCTP_ERROR_NO_ERROR;
6234 }
6235
6236 -/* Verify the ASCONF packet before we process it. */
6237 -int sctp_verify_asconf(const struct sctp_association *asoc,
6238 - struct sctp_paramhdr *param_hdr, void *chunk_end,
6239 - struct sctp_paramhdr **errp) {
6240 - sctp_addip_param_t *asconf_param;
6241 +/* Verify the ASCONF packet before we process it. */
6242 +bool sctp_verify_asconf(const struct sctp_association *asoc,
6243 + struct sctp_chunk *chunk, bool addr_param_needed,
6244 + struct sctp_paramhdr **errp)
6245 +{
6246 + sctp_addip_chunk_t *addip = (sctp_addip_chunk_t *) chunk->chunk_hdr;
6247 union sctp_params param;
6248 - int length, plen;
6249 + bool addr_param_seen = false;
6250
6251 - param.v = (sctp_paramhdr_t *) param_hdr;
6252 - while (param.v <= chunk_end - sizeof(sctp_paramhdr_t)) {
6253 - length = ntohs(param.p->length);
6254 - *errp = param.p;
6255 -
6256 - if (param.v > chunk_end - length ||
6257 - length < sizeof(sctp_paramhdr_t))
6258 - return 0;
6259 + sctp_walk_params(param, addip, addip_hdr.params) {
6260 + size_t length = ntohs(param.p->length);
6261
6262 + *errp = param.p;
6263 switch (param.p->type) {
6264 + case SCTP_PARAM_ERR_CAUSE:
6265 + break;
6266 + case SCTP_PARAM_IPV4_ADDRESS:
6267 + if (length != sizeof(sctp_ipv4addr_param_t))
6268 + return false;
6269 + addr_param_seen = true;
6270 + break;
6271 + case SCTP_PARAM_IPV6_ADDRESS:
6272 + if (length != sizeof(sctp_ipv6addr_param_t))
6273 + return false;
6274 + addr_param_seen = true;
6275 + break;
6276 case SCTP_PARAM_ADD_IP:
6277 case SCTP_PARAM_DEL_IP:
6278 case SCTP_PARAM_SET_PRIMARY:
6279 - asconf_param = (sctp_addip_param_t *)param.v;
6280 - plen = ntohs(asconf_param->param_hdr.length);
6281 - if (plen < sizeof(sctp_addip_param_t) +
6282 - sizeof(sctp_paramhdr_t))
6283 - return 0;
6284 + /* In ASCONF chunks, these need to be first. */
6285 + if (addr_param_needed && !addr_param_seen)
6286 + return false;
6287 + length = ntohs(param.addip->param_hdr.length);
6288 + if (length < sizeof(sctp_addip_param_t) +
6289 + sizeof(sctp_paramhdr_t))
6290 + return false;
6291 break;
6292 case SCTP_PARAM_SUCCESS_REPORT:
6293 case SCTP_PARAM_ADAPTATION_LAYER_IND:
6294 if (length != sizeof(sctp_addip_param_t))
6295 - return 0;
6296 -
6297 + return false;
6298 break;
6299 default:
6300 - break;
6301 + /* This is unkown to us, reject! */
6302 + return false;
6303 }
6304 -
6305 - param.v += WORD_ROUND(length);
6306 }
6307
6308 - if (param.v != chunk_end)
6309 - return 0;
6310 + /* Remaining sanity checks. */
6311 + if (addr_param_needed && !addr_param_seen)
6312 + return false;
6313 + if (!addr_param_needed && addr_param_seen)
6314 + return false;
6315 + if (param.v != chunk->chunk_end)
6316 + return false;
6317
6318 - return 1;
6319 + return true;
6320 }
6321
6322 /* Process an incoming ASCONF chunk with the next expected serial no. and
6323 @@ -3162,16 +3178,17 @@ int sctp_verify_asconf(const struct sctp_association *asoc,
6324 struct sctp_chunk *sctp_process_asconf(struct sctp_association *asoc,
6325 struct sctp_chunk *asconf)
6326 {
6327 + sctp_addip_chunk_t *addip = (sctp_addip_chunk_t *) asconf->chunk_hdr;
6328 + bool all_param_pass = true;
6329 + union sctp_params param;
6330 sctp_addiphdr_t *hdr;
6331 union sctp_addr_param *addr_param;
6332 sctp_addip_param_t *asconf_param;
6333 struct sctp_chunk *asconf_ack;
6334 -
6335 __be16 err_code;
6336 int length = 0;
6337 int chunk_len;
6338 __u32 serial;
6339 - int all_param_pass = 1;
6340
6341 chunk_len = ntohs(asconf->chunk_hdr->length) - sizeof(sctp_chunkhdr_t);
6342 hdr = (sctp_addiphdr_t *)asconf->skb->data;
6343 @@ -3199,9 +3216,14 @@ struct sctp_chunk *sctp_process_asconf(struct sctp_association *asoc,
6344 goto done;
6345
6346 /* Process the TLVs contained within the ASCONF chunk. */
6347 - while (chunk_len > 0) {
6348 + sctp_walk_params(param, addip, addip_hdr.params) {
6349 + /* Skip preceeding address parameters. */
6350 + if (param.p->type == SCTP_PARAM_IPV4_ADDRESS ||
6351 + param.p->type == SCTP_PARAM_IPV6_ADDRESS)
6352 + continue;
6353 +
6354 err_code = sctp_process_asconf_param(asoc, asconf,
6355 - asconf_param);
6356 + param.addip);
6357 /* ADDIP 4.1 A7)
6358 * If an error response is received for a TLV parameter,
6359 * all TLVs with no response before the failed TLV are
6360 @@ -3209,28 +3231,20 @@ struct sctp_chunk *sctp_process_asconf(struct sctp_association *asoc,
6361 * the failed response are considered unsuccessful unless
6362 * a specific success indication is present for the parameter.
6363 */
6364 - if (SCTP_ERROR_NO_ERROR != err_code)
6365 - all_param_pass = 0;
6366 -
6367 + if (err_code != SCTP_ERROR_NO_ERROR)
6368 + all_param_pass = false;
6369 if (!all_param_pass)
6370 - sctp_add_asconf_response(asconf_ack,
6371 - asconf_param->crr_id, err_code,
6372 - asconf_param);
6373 + sctp_add_asconf_response(asconf_ack, param.addip->crr_id,
6374 + err_code, param.addip);
6375
6376 /* ADDIP 4.3 D11) When an endpoint receiving an ASCONF to add
6377 * an IP address sends an 'Out of Resource' in its response, it
6378 * MUST also fail any subsequent add or delete requests bundled
6379 * in the ASCONF.
6380 */
6381 - if (SCTP_ERROR_RSRC_LOW == err_code)
6382 + if (err_code == SCTP_ERROR_RSRC_LOW)
6383 goto done;
6384 -
6385 - /* Move to the next ASCONF param. */
6386 - length = ntohs(asconf_param->param_hdr.length);
6387 - asconf_param = (void *)asconf_param + length;
6388 - chunk_len -= length;
6389 }
6390 -
6391 done:
6392 asoc->peer.addip_serial++;
6393
6394 diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
6395 index c8f606324134..3ee27b7704ff 100644
6396 --- a/net/sctp/sm_statefuns.c
6397 +++ b/net/sctp/sm_statefuns.c
6398 @@ -170,6 +170,9 @@ sctp_chunk_length_valid(struct sctp_chunk *chunk,
6399 {
6400 __u16 chunk_length = ntohs(chunk->chunk_hdr->length);
6401
6402 + /* Previously already marked? */
6403 + if (unlikely(chunk->pdiscard))
6404 + return 0;
6405 if (unlikely(chunk_length < required_length))
6406 return 0;
6407
6408 @@ -3591,9 +3594,7 @@ sctp_disposition_t sctp_sf_do_asconf(struct net *net,
6409 struct sctp_chunk *asconf_ack = NULL;
6410 struct sctp_paramhdr *err_param = NULL;
6411 sctp_addiphdr_t *hdr;
6412 - union sctp_addr_param *addr_param;
6413 __u32 serial;
6414 - int length;
6415
6416 if (!sctp_vtag_verify(chunk, asoc)) {
6417 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_BAD_TAG,
6418 @@ -3618,17 +3619,8 @@ sctp_disposition_t sctp_sf_do_asconf(struct net *net,
6419 hdr = (sctp_addiphdr_t *)chunk->skb->data;
6420 serial = ntohl(hdr->serial);
6421
6422 - addr_param = (union sctp_addr_param *)hdr->params;
6423 - length = ntohs(addr_param->p.length);
6424 - if (length < sizeof(sctp_paramhdr_t))
6425 - return sctp_sf_violation_paramlen(net, ep, asoc, type, arg,
6426 - (void *)addr_param, commands);
6427 -
6428 /* Verify the ASCONF chunk before processing it. */
6429 - if (!sctp_verify_asconf(asoc,
6430 - (sctp_paramhdr_t *)((void *)addr_param + length),
6431 - (void *)chunk->chunk_end,
6432 - &err_param))
6433 + if (!sctp_verify_asconf(asoc, chunk, true, &err_param))
6434 return sctp_sf_violation_paramlen(net, ep, asoc, type, arg,
6435 (void *)err_param, commands);
6436
6437 @@ -3745,10 +3737,7 @@ sctp_disposition_t sctp_sf_do_asconf_ack(struct net *net,
6438 rcvd_serial = ntohl(addip_hdr->serial);
6439
6440 /* Verify the ASCONF-ACK chunk before processing it. */
6441 - if (!sctp_verify_asconf(asoc,
6442 - (sctp_paramhdr_t *)addip_hdr->params,
6443 - (void *)asconf_ack->chunk_end,
6444 - &err_param))
6445 + if (!sctp_verify_asconf(asoc, asconf_ack, false, &err_param))
6446 return sctp_sf_violation_paramlen(net, ep, asoc, type, arg,
6447 (void *)err_param, commands);
6448
6449 diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c
6450 index afb292cd797d..53ed8d3f8897 100644
6451 --- a/net/sunrpc/auth_gss/auth_gss.c
6452 +++ b/net/sunrpc/auth_gss/auth_gss.c
6453 @@ -1353,6 +1353,7 @@ gss_stringify_acceptor(struct rpc_cred *cred)
6454 char *string = NULL;
6455 struct gss_cred *gss_cred = container_of(cred, struct gss_cred, gc_base);
6456 struct gss_cl_ctx *ctx;
6457 + unsigned int len;
6458 struct xdr_netobj *acceptor;
6459
6460 rcu_read_lock();
6461 @@ -1360,15 +1361,39 @@ gss_stringify_acceptor(struct rpc_cred *cred)
6462 if (!ctx)
6463 goto out;
6464
6465 - acceptor = &ctx->gc_acceptor;
6466 + len = ctx->gc_acceptor.len;
6467 + rcu_read_unlock();
6468
6469 /* no point if there's no string */
6470 - if (!acceptor->len)
6471 - goto out;
6472 -
6473 - string = kmalloc(acceptor->len + 1, GFP_KERNEL);
6474 + if (!len)
6475 + return NULL;
6476 +realloc:
6477 + string = kmalloc(len + 1, GFP_KERNEL);
6478 if (!string)
6479 + return NULL;
6480 +
6481 + rcu_read_lock();
6482 + ctx = rcu_dereference(gss_cred->gc_ctx);
6483 +
6484 + /* did the ctx disappear or was it replaced by one with no acceptor? */
6485 + if (!ctx || !ctx->gc_acceptor.len) {
6486 + kfree(string);
6487 + string = NULL;
6488 goto out;
6489 + }
6490 +
6491 + acceptor = &ctx->gc_acceptor;
6492 +
6493 + /*
6494 + * Did we find a new acceptor that's longer than the original? Allocate
6495 + * a longer buffer and try again.
6496 + */
6497 + if (len < acceptor->len) {
6498 + len = acceptor->len;
6499 + rcu_read_unlock();
6500 + kfree(string);
6501 + goto realloc;
6502 + }
6503
6504 memcpy(string, acceptor->data, acceptor->len);
6505 string[acceptor->len] = '\0';
6506 diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
6507 index 4d08b398411f..cab1691b5ad6 100755
6508 --- a/scripts/checkpatch.pl
6509 +++ b/scripts/checkpatch.pl
6510 @@ -2424,7 +2424,7 @@ sub process {
6511 "please, no space before tabs\n" . $herevet) &&
6512 $fix) {
6513 while ($fixed[$fixlinenr] =~
6514 - s/(^\+.*) {8,8}+\t/$1\t\t/) {}
6515 + s/(^\+.*) {8,8}\t/$1\t\t/) {}
6516 while ($fixed[$fixlinenr] =~
6517 s/(^\+.*) +\t/$1\t/) {}
6518 }
6519 diff --git a/scripts/package/builddeb b/scripts/package/builddeb
6520 index 35d5a5877d04..7c0e6e46905d 100644
6521 --- a/scripts/package/builddeb
6522 +++ b/scripts/package/builddeb
6523 @@ -152,18 +152,16 @@ if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then
6524 rmdir "$tmpdir/lib/modules/$version"
6525 fi
6526 if [ -n "$BUILD_DEBUG" ] ; then
6527 - (
6528 - cd $tmpdir
6529 - for module in $(find lib/modules/ -name *.ko); do
6530 - mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module)
6531 - # only keep debug symbols in the debug file
6532 - $OBJCOPY --only-keep-debug $module $dbg_dir/usr/lib/debug/$module
6533 - # strip original module from debug symbols
6534 - $OBJCOPY --strip-debug $module
6535 - # then add a link to those
6536 - $OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $module
6537 - done
6538 - )
6539 + for module in $(find $tmpdir/lib/modules/ -name *.ko -printf '%P\n'); do
6540 + module=lib/modules/$module
6541 + mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module)
6542 + # only keep debug symbols in the debug file
6543 + $OBJCOPY --only-keep-debug $tmpdir/$module $dbg_dir/usr/lib/debug/$module
6544 + # strip original module from debug symbols
6545 + $OBJCOPY --strip-debug $tmpdir/$module
6546 + # then add a link to those
6547 + $OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module
6548 + done
6549 fi
6550 fi
6551
6552 diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
6553 index e26f860e5f2e..eff88a5f5d40 100644
6554 --- a/security/keys/keyctl.c
6555 +++ b/security/keys/keyctl.c
6556 @@ -37,6 +37,8 @@ static int key_get_type_from_user(char *type,
6557 return ret;
6558 if (ret == 0 || ret >= len)
6559 return -EINVAL;
6560 + if (type[0] == '.')
6561 + return -EPERM;
6562 type[len - 1] = '\0';
6563 return 0;
6564 }
6565 diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
6566 index 47ccb8f44adb..2fc3d13762c2 100644
6567 --- a/sound/pci/hda/patch_conexant.c
6568 +++ b/sound/pci/hda/patch_conexant.c
6569 @@ -44,6 +44,7 @@ struct conexant_spec {
6570 unsigned int num_eapds;
6571 hda_nid_t eapds[4];
6572 bool dynamic_eapd;
6573 + hda_nid_t mute_led_eapd;
6574
6575 unsigned int parse_flags; /* flag for snd_hda_parse_pin_defcfg() */
6576
6577 @@ -164,6 +165,17 @@ static void cx_auto_vmaster_hook(void *private_data, int enabled)
6578 cx_auto_turn_eapd(codec, spec->num_eapds, spec->eapds, enabled);
6579 }
6580
6581 +/* turn on/off EAPD according to Master switch (inversely!) for mute LED */
6582 +static void cx_auto_vmaster_hook_mute_led(void *private_data, int enabled)
6583 +{
6584 + struct hda_codec *codec = private_data;
6585 + struct conexant_spec *spec = codec->spec;
6586 +
6587 + snd_hda_codec_write(codec, spec->mute_led_eapd, 0,
6588 + AC_VERB_SET_EAPD_BTLENABLE,
6589 + enabled ? 0x00 : 0x02);
6590 +}
6591 +
6592 static int cx_auto_build_controls(struct hda_codec *codec)
6593 {
6594 int err;
6595 @@ -224,6 +236,7 @@ enum {
6596 CXT_FIXUP_TOSHIBA_P105,
6597 CXT_FIXUP_HP_530,
6598 CXT_FIXUP_CAP_MIX_AMP_5047,
6599 + CXT_FIXUP_MUTE_LED_EAPD,
6600 };
6601
6602 /* for hda_fixup_thinkpad_acpi() */
6603 @@ -557,6 +570,18 @@ static void cxt_fixup_olpc_xo(struct hda_codec *codec,
6604 }
6605 }
6606
6607 +static void cxt_fixup_mute_led_eapd(struct hda_codec *codec,
6608 + const struct hda_fixup *fix, int action)
6609 +{
6610 + struct conexant_spec *spec = codec->spec;
6611 +
6612 + if (action == HDA_FIXUP_ACT_PRE_PROBE) {
6613 + spec->mute_led_eapd = 0x1b;
6614 + spec->dynamic_eapd = 1;
6615 + spec->gen.vmaster_mute.hook = cx_auto_vmaster_hook_mute_led;
6616 + }
6617 +}
6618 +
6619 /*
6620 * Fix max input level on mixer widget to 0dB
6621 * (originally it has 0x2b steps with 0dB offset 0x14)
6622 @@ -705,6 +730,10 @@ static const struct hda_fixup cxt_fixups[] = {
6623 .type = HDA_FIXUP_FUNC,
6624 .v.func = cxt_fixup_cap_mix_amp_5047,
6625 },
6626 + [CXT_FIXUP_MUTE_LED_EAPD] = {
6627 + .type = HDA_FIXUP_FUNC,
6628 + .v.func = cxt_fixup_mute_led_eapd,
6629 + },
6630 };
6631
6632 static const struct snd_pci_quirk cxt5045_fixups[] = {
6633 @@ -761,6 +790,7 @@ static const struct snd_pci_quirk cxt5066_fixups[] = {
6634 SND_PCI_QUIRK(0x17aa, 0x21cf, "Lenovo T520", CXT_PINCFG_LENOVO_TP410),
6635 SND_PCI_QUIRK(0x17aa, 0x21da, "Lenovo X220", CXT_PINCFG_LENOVO_TP410),
6636 SND_PCI_QUIRK(0x17aa, 0x21db, "Lenovo X220-tablet", CXT_PINCFG_LENOVO_TP410),
6637 + SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo IdeaPad Z560", CXT_FIXUP_MUTE_LED_EAPD),
6638 SND_PCI_QUIRK(0x17aa, 0x3975, "Lenovo U300s", CXT_FIXUP_STEREO_DMIC),
6639 SND_PCI_QUIRK(0x17aa, 0x3977, "Lenovo IdeaPad U310", CXT_FIXUP_STEREO_DMIC),
6640 SND_PCI_QUIRK(0x17aa, 0x397b, "Lenovo S205", CXT_FIXUP_STEREO_DMIC),
6641 @@ -779,6 +809,7 @@ static const struct hda_model_fixup cxt5066_fixup_models[] = {
6642 { .id = CXT_PINCFG_LEMOTE_A1004, .name = "lemote-a1004" },
6643 { .id = CXT_PINCFG_LEMOTE_A1205, .name = "lemote-a1205" },
6644 { .id = CXT_FIXUP_OLPC_XO, .name = "olpc-xo" },
6645 + { .id = CXT_FIXUP_MUTE_LED_EAPD, .name = "mute-led-eapd" },
6646 {}
6647 };
6648
6649 diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
6650 index f119a41ed9a9..7c83bab69dee 100644
6651 --- a/sound/usb/mixer_quirks.c
6652 +++ b/sound/usb/mixer_quirks.c
6653 @@ -885,6 +885,11 @@ static int snd_ftu_eff_switch_put(struct snd_kcontrol *kctl,
6654 return changed;
6655 }
6656
6657 +static void kctl_private_value_free(struct snd_kcontrol *kctl)
6658 +{
6659 + kfree((void *)kctl->private_value);
6660 +}
6661 +
6662 static int snd_ftu_create_effect_switch(struct usb_mixer_interface *mixer,
6663 int validx, int bUnitID)
6664 {
6665 @@ -919,6 +924,7 @@ static int snd_ftu_create_effect_switch(struct usb_mixer_interface *mixer,
6666 return -ENOMEM;
6667 }
6668
6669 + kctl->private_free = kctl_private_value_free;
6670 err = snd_ctl_add(mixer->chip->card, kctl);
6671 if (err < 0)
6672 return err;