Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.4/0122-4.4.23-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2834 - (hide annotations) (download)
Thu Oct 13 09:54:05 2016 UTC (7 years, 7 months ago) by niro
File size: 94867 byte(s)
-linux-4.4.23
1 niro 2834 diff --git a/Makefile b/Makefile
2     index a6512f4eec9f..95421b688f23 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 4
8     -SUBLEVEL = 22
9     +SUBLEVEL = 23
10     EXTRAVERSION =
11     NAME = Blurry Fish Butt
12    
13     @@ -128,6 +128,10 @@ _all:
14     # Cancel implicit rules on top Makefile
15     $(CURDIR)/Makefile Makefile: ;
16    
17     +ifneq ($(words $(subst :, ,$(CURDIR))), 1)
18     + $(error main directory cannot contain spaces nor colons)
19     +endif
20     +
21     ifneq ($(KBUILD_OUTPUT),)
22     # Invoke a second make in the output directory, passing relevant variables
23     # check that the output directory actually exists
24     @@ -495,6 +499,12 @@ ifeq ($(KBUILD_EXTMOD),)
25     endif
26     endif
27     endif
28     +# install and module_install need also be processed one by one
29     +ifneq ($(filter install,$(MAKECMDGOALS)),)
30     + ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
31     + mixed-targets := 1
32     + endif
33     +endif
34    
35     ifeq ($(mixed-targets),1)
36     # ===========================================================================
37     @@ -606,11 +616,16 @@ ARCH_CFLAGS :=
38     include arch/$(SRCARCH)/Makefile
39    
40     KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,)
41     +KBUILD_CFLAGS += $(call cc-disable-warning,maybe-uninitialized,)
42    
43     ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
44     -KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,)
45     +KBUILD_CFLAGS += -Os
46     else
47     +ifdef CONFIG_PROFILE_ALL_BRANCHES
48     KBUILD_CFLAGS += -O2
49     +else
50     +KBUILD_CFLAGS += -O2
51     +endif
52     endif
53    
54     # Tell gcc to never replace conditional load with a non-conditional one
55     @@ -1260,7 +1275,7 @@ help:
56     @echo ' firmware_install- Install all firmware to INSTALL_FW_PATH'
57     @echo ' (default: $$(INSTALL_MOD_PATH)/lib/firmware)'
58     @echo ' dir/ - Build all files in dir and below'
59     - @echo ' dir/file.[oisS] - Build specified target only'
60     + @echo ' dir/file.[ois] - Build specified target only'
61     @echo ' dir/file.lst - Build specified mixed source/assembly target only'
62     @echo ' (requires a recent binutils and recent build (System.map))'
63     @echo ' dir/file.ko - Build module including final link'
64     @@ -1500,11 +1515,11 @@ image_name:
65     # Clear a bunch of variables before executing the submake
66     tools/: FORCE
67     $(Q)mkdir -p $(objtree)/tools
68     - $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(filter --j% -j,$(MAKEFLAGS))" O=$(O) subdir=tools -C $(src)/tools/
69     + $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(filter --j% -j,$(MAKEFLAGS))" O=$(shell cd $(objtree) && /bin/pwd) subdir=tools -C $(src)/tools/
70    
71     tools/%: FORCE
72     $(Q)mkdir -p $(objtree)/tools
73     - $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(filter --j% -j,$(MAKEFLAGS))" O=$(O) subdir=tools -C $(src)/tools/ $*
74     + $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(filter --j% -j,$(MAKEFLAGS))" O=$(shell cd $(objtree) && /bin/pwd) subdir=tools -C $(src)/tools/ $*
75    
76     # Single targets
77     # ---------------------------------------------------------------------------
78     diff --git a/arch/arm/crypto/aes-ce-glue.c b/arch/arm/crypto/aes-ce-glue.c
79     index b445a5d56f43..593da7ffb449 100644
80     --- a/arch/arm/crypto/aes-ce-glue.c
81     +++ b/arch/arm/crypto/aes-ce-glue.c
82     @@ -279,7 +279,7 @@ static int ctr_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
83     err = blkcipher_walk_done(desc, &walk,
84     walk.nbytes % AES_BLOCK_SIZE);
85     }
86     - if (nbytes) {
87     + if (walk.nbytes % AES_BLOCK_SIZE) {
88     u8 *tdst = walk.dst.virt.addr + blocks * AES_BLOCK_SIZE;
89     u8 *tsrc = walk.src.virt.addr + blocks * AES_BLOCK_SIZE;
90     u8 __aligned(8) tail[AES_BLOCK_SIZE];
91     diff --git a/arch/arm/mach-pxa/idp.c b/arch/arm/mach-pxa/idp.c
92     index f6d02e4cbcda..5c87dff5d46e 100644
93     --- a/arch/arm/mach-pxa/idp.c
94     +++ b/arch/arm/mach-pxa/idp.c
95     @@ -83,7 +83,8 @@ static struct resource smc91x_resources[] = {
96     };
97    
98     static struct smc91x_platdata smc91x_platdata = {
99     - .flags = SMC91X_USE_32BIT | SMC91X_USE_DMA | SMC91X_NOWAIT,
100     + .flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
101     + SMC91X_USE_DMA | SMC91X_NOWAIT,
102     };
103    
104     static struct platform_device smc91x_device = {
105     diff --git a/arch/arm/mach-pxa/xcep.c b/arch/arm/mach-pxa/xcep.c
106     index 13b1d4586d7d..9001312710f7 100644
107     --- a/arch/arm/mach-pxa/xcep.c
108     +++ b/arch/arm/mach-pxa/xcep.c
109     @@ -120,7 +120,8 @@ static struct resource smc91x_resources[] = {
110     };
111    
112     static struct smc91x_platdata xcep_smc91x_info = {
113     - .flags = SMC91X_USE_32BIT | SMC91X_NOWAIT | SMC91X_USE_DMA,
114     + .flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
115     + SMC91X_NOWAIT | SMC91X_USE_DMA,
116     };
117    
118     static struct platform_device smc91x_device = {
119     diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c
120     index 44575edc44b1..cf0a7c2359f0 100644
121     --- a/arch/arm/mach-realview/core.c
122     +++ b/arch/arm/mach-realview/core.c
123     @@ -95,7 +95,8 @@ static struct smsc911x_platform_config smsc911x_config = {
124     };
125    
126     static struct smc91x_platdata smc91x_platdata = {
127     - .flags = SMC91X_USE_32BIT | SMC91X_NOWAIT,
128     + .flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
129     + SMC91X_NOWAIT,
130     };
131    
132     static struct platform_device realview_eth_device = {
133     diff --git a/arch/arm/mach-sa1100/pleb.c b/arch/arm/mach-sa1100/pleb.c
134     index 1525d7b5f1b7..88149f85bc49 100644
135     --- a/arch/arm/mach-sa1100/pleb.c
136     +++ b/arch/arm/mach-sa1100/pleb.c
137     @@ -45,7 +45,7 @@ static struct resource smc91x_resources[] = {
138     };
139    
140     static struct smc91x_platdata smc91x_platdata = {
141     - .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
142     + .flags = SMC91X_USE_16BIT | SMC91X_USE_8BIT | SMC91X_NOWAIT,
143     };
144    
145     static struct platform_device smc91x_device = {
146     diff --git a/arch/arm64/crypto/aes-glue.c b/arch/arm64/crypto/aes-glue.c
147     index 05d9e16c0dfd..6a51dfccfe71 100644
148     --- a/arch/arm64/crypto/aes-glue.c
149     +++ b/arch/arm64/crypto/aes-glue.c
150     @@ -211,7 +211,7 @@ static int ctr_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
151     err = blkcipher_walk_done(desc, &walk,
152     walk.nbytes % AES_BLOCK_SIZE);
153     }
154     - if (nbytes) {
155     + if (walk.nbytes % AES_BLOCK_SIZE) {
156     u8 *tdst = walk.dst.virt.addr + blocks * AES_BLOCK_SIZE;
157     u8 *tsrc = walk.src.virt.addr + blocks * AES_BLOCK_SIZE;
158     u8 __aligned(8) tail[AES_BLOCK_SIZE];
159     diff --git a/arch/blackfin/mach-bf561/boards/cm_bf561.c b/arch/blackfin/mach-bf561/boards/cm_bf561.c
160     index c6db52ba3a06..10c57771822d 100644
161     --- a/arch/blackfin/mach-bf561/boards/cm_bf561.c
162     +++ b/arch/blackfin/mach-bf561/boards/cm_bf561.c
163     @@ -146,7 +146,8 @@ static struct platform_device hitachi_fb_device = {
164     #include <linux/smc91x.h>
165    
166     static struct smc91x_platdata smc91x_info = {
167     - .flags = SMC91X_USE_32BIT | SMC91X_NOWAIT,
168     + .flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
169     + SMC91X_NOWAIT,
170     .leda = RPC_LED_100_10,
171     .ledb = RPC_LED_TX_RX,
172     };
173     diff --git a/arch/blackfin/mach-bf561/boards/ezkit.c b/arch/blackfin/mach-bf561/boards/ezkit.c
174     index 2de71e8c104b..93c22468cc14 100644
175     --- a/arch/blackfin/mach-bf561/boards/ezkit.c
176     +++ b/arch/blackfin/mach-bf561/boards/ezkit.c
177     @@ -134,7 +134,8 @@ static struct platform_device net2272_bfin_device = {
178     #include <linux/smc91x.h>
179    
180     static struct smc91x_platdata smc91x_info = {
181     - .flags = SMC91X_USE_32BIT | SMC91X_NOWAIT,
182     + .flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
183     + SMC91X_NOWAIT,
184     .leda = RPC_LED_100_10,
185     .ledb = RPC_LED_TX_RX,
186     };
187     diff --git a/arch/mips/Kconfig.debug b/arch/mips/Kconfig.debug
188     index f0e314ceb8ba..7f975b20b20c 100644
189     --- a/arch/mips/Kconfig.debug
190     +++ b/arch/mips/Kconfig.debug
191     @@ -113,42 +113,6 @@ config SPINLOCK_TEST
192     help
193     Add several files to the debugfs to test spinlock speed.
194    
195     -if CPU_MIPSR6
196     -
197     -choice
198     - prompt "Compact branch policy"
199     - default MIPS_COMPACT_BRANCHES_OPTIMAL
200     -
201     -config MIPS_COMPACT_BRANCHES_NEVER
202     - bool "Never (force delay slot branches)"
203     - help
204     - Pass the -mcompact-branches=never flag to the compiler in order to
205     - force it to always emit branches with delay slots, and make no use
206     - of the compact branch instructions introduced by MIPSr6. This is
207     - useful if you suspect there may be an issue with compact branches in
208     - either the compiler or the CPU.
209     -
210     -config MIPS_COMPACT_BRANCHES_OPTIMAL
211     - bool "Optimal (use where beneficial)"
212     - help
213     - Pass the -mcompact-branches=optimal flag to the compiler in order for
214     - it to make use of compact branch instructions where it deems them
215     - beneficial, and use branches with delay slots elsewhere. This is the
216     - default compiler behaviour, and should be used unless you have a
217     - reason to choose otherwise.
218     -
219     -config MIPS_COMPACT_BRANCHES_ALWAYS
220     - bool "Always (force compact branches)"
221     - help
222     - Pass the -mcompact-branches=always flag to the compiler in order to
223     - force it to always emit compact branches, making no use of branch
224     - instructions with delay slots. This can result in more compact code
225     - which may be beneficial in some scenarios.
226     -
227     -endchoice
228     -
229     -endif # CPU_MIPSR6
230     -
231     config SCACHE_DEBUGFS
232     bool "L2 cache debugfs entries"
233     depends on DEBUG_FS
234     diff --git a/arch/mips/Makefile b/arch/mips/Makefile
235     index 3f70ba54ae21..252e347958f3 100644
236     --- a/arch/mips/Makefile
237     +++ b/arch/mips/Makefile
238     @@ -204,10 +204,6 @@ toolchain-msa := $(call cc-option-yn,$(mips-cflags) -mhard-float -mfp64 -Wa$(
239     cflags-$(toolchain-msa) += -DTOOLCHAIN_SUPPORTS_MSA
240     endif
241    
242     -cflags-$(CONFIG_MIPS_COMPACT_BRANCHES_NEVER) += -mcompact-branches=never
243     -cflags-$(CONFIG_MIPS_COMPACT_BRANCHES_OPTIMAL) += -mcompact-branches=optimal
244     -cflags-$(CONFIG_MIPS_COMPACT_BRANCHES_ALWAYS) += -mcompact-branches=always
245     -
246     #
247     # Firmware support
248     #
249     diff --git a/arch/mips/include/asm/asmmacro.h b/arch/mips/include/asm/asmmacro.h
250     index e689b894353c..8dedee1def83 100644
251     --- a/arch/mips/include/asm/asmmacro.h
252     +++ b/arch/mips/include/asm/asmmacro.h
253     @@ -135,6 +135,7 @@
254     ldc1 $f28, THREAD_FPR28(\thread)
255     ldc1 $f30, THREAD_FPR30(\thread)
256     ctc1 \tmp, fcr31
257     + .set pop
258     .endm
259    
260     .macro fpu_restore_16odd thread
261     diff --git a/arch/mips/include/asm/mach-paravirt/kernel-entry-init.h b/arch/mips/include/asm/mach-paravirt/kernel-entry-init.h
262     index 2f82bfa3a773..c9f5769dfc8f 100644
263     --- a/arch/mips/include/asm/mach-paravirt/kernel-entry-init.h
264     +++ b/arch/mips/include/asm/mach-paravirt/kernel-entry-init.h
265     @@ -11,11 +11,13 @@
266     #define CP0_EBASE $15, 1
267    
268     .macro kernel_entry_setup
269     +#ifdef CONFIG_SMP
270     mfc0 t0, CP0_EBASE
271     andi t0, t0, 0x3ff # CPUNum
272     beqz t0, 1f
273     # CPUs other than zero goto smp_bootstrap
274     j smp_bootstrap
275     +#endif /* CONFIG_SMP */
276    
277     1:
278     .endm
279     diff --git a/arch/mips/kernel/mips-r2-to-r6-emul.c b/arch/mips/kernel/mips-r2-to-r6-emul.c
280     index 4674a74a08b5..af27334d6809 100644
281     --- a/arch/mips/kernel/mips-r2-to-r6-emul.c
282     +++ b/arch/mips/kernel/mips-r2-to-r6-emul.c
283     @@ -1164,7 +1164,9 @@ fpu_emul:
284     regs->regs[31] = r31;
285     regs->cp0_epc = epc;
286     if (!used_math()) { /* First time FPU user. */
287     + preempt_disable();
288     err = init_fpu();
289     + preempt_enable();
290     set_used_math();
291     }
292     lose_fpu(1); /* Save FPU state for the emulator. */
293     diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
294     index 89847bee2b53..44a6f25e902e 100644
295     --- a/arch/mips/kernel/process.c
296     +++ b/arch/mips/kernel/process.c
297     @@ -593,14 +593,14 @@ int mips_set_process_fp_mode(struct task_struct *task, unsigned int value)
298     return -EOPNOTSUPP;
299    
300     /* Avoid inadvertently triggering emulation */
301     - if ((value & PR_FP_MODE_FR) && cpu_has_fpu &&
302     - !(current_cpu_data.fpu_id & MIPS_FPIR_F64))
303     + if ((value & PR_FP_MODE_FR) && raw_cpu_has_fpu &&
304     + !(raw_current_cpu_data.fpu_id & MIPS_FPIR_F64))
305     return -EOPNOTSUPP;
306     - if ((value & PR_FP_MODE_FRE) && cpu_has_fpu && !cpu_has_fre)
307     + if ((value & PR_FP_MODE_FRE) && raw_cpu_has_fpu && !cpu_has_fre)
308     return -EOPNOTSUPP;
309    
310     /* FR = 0 not supported in MIPS R6 */
311     - if (!(value & PR_FP_MODE_FR) && cpu_has_fpu && cpu_has_mips_r6)
312     + if (!(value & PR_FP_MODE_FR) && raw_cpu_has_fpu && cpu_has_mips_r6)
313     return -EOPNOTSUPP;
314    
315     /* Proceed with the mode switch */
316     diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c
317     index 2b521e07b860..7fef02a9eb85 100644
318     --- a/arch/mips/kernel/smp.c
319     +++ b/arch/mips/kernel/smp.c
320     @@ -174,6 +174,9 @@ asmlinkage void start_secondary(void)
321     cpumask_set_cpu(cpu, &cpu_coherent_mask);
322     notify_cpu_starting(cpu);
323    
324     + cpumask_set_cpu(cpu, &cpu_callin_map);
325     + synchronise_count_slave(cpu);
326     +
327     set_cpu_online(cpu, true);
328    
329     set_cpu_sibling_map(cpu);
330     @@ -181,10 +184,6 @@ asmlinkage void start_secondary(void)
331    
332     calculate_cpu_foreign_map();
333    
334     - cpumask_set_cpu(cpu, &cpu_callin_map);
335     -
336     - synchronise_count_slave(cpu);
337     -
338     /*
339     * irq will be enabled in ->smp_finish(), enabling it too early
340     * is dangerous.
341     diff --git a/arch/mips/kernel/vdso.c b/arch/mips/kernel/vdso.c
342     index 975e99759bab..5649a9e429e0 100644
343     --- a/arch/mips/kernel/vdso.c
344     +++ b/arch/mips/kernel/vdso.c
345     @@ -39,16 +39,16 @@ static struct vm_special_mapping vdso_vvar_mapping = {
346     static void __init init_vdso_image(struct mips_vdso_image *image)
347     {
348     unsigned long num_pages, i;
349     + unsigned long data_pfn;
350    
351     BUG_ON(!PAGE_ALIGNED(image->data));
352     BUG_ON(!PAGE_ALIGNED(image->size));
353    
354     num_pages = image->size / PAGE_SIZE;
355    
356     - for (i = 0; i < num_pages; i++) {
357     - image->mapping.pages[i] =
358     - virt_to_page(image->data + (i * PAGE_SIZE));
359     - }
360     + data_pfn = __phys_to_pfn(__pa_symbol(image->data));
361     + for (i = 0; i < num_pages; i++)
362     + image->mapping.pages[i] = pfn_to_page(data_pfn + i);
363     }
364    
365     static int __init init_vdso(void)
366     diff --git a/crypto/blkcipher.c b/crypto/blkcipher.c
367     index 8cc1622b2ee0..dca7bc87dad9 100644
368     --- a/crypto/blkcipher.c
369     +++ b/crypto/blkcipher.c
370     @@ -234,6 +234,8 @@ static int blkcipher_walk_next(struct blkcipher_desc *desc,
371     return blkcipher_walk_done(desc, walk, -EINVAL);
372     }
373    
374     + bsize = min(walk->walk_blocksize, n);
375     +
376     walk->flags &= ~(BLKCIPHER_WALK_SLOW | BLKCIPHER_WALK_COPY |
377     BLKCIPHER_WALK_DIFF);
378     if (!scatterwalk_aligned(&walk->in, walk->alignmask) ||
379     @@ -246,7 +248,6 @@ static int blkcipher_walk_next(struct blkcipher_desc *desc,
380     }
381     }
382    
383     - bsize = min(walk->walk_blocksize, n);
384     n = scatterwalk_clamp(&walk->in, n);
385     n = scatterwalk_clamp(&walk->out, n);
386    
387     diff --git a/crypto/echainiv.c b/crypto/echainiv.c
388     index b96a84560b67..343a74e96e2a 100644
389     --- a/crypto/echainiv.c
390     +++ b/crypto/echainiv.c
391     @@ -1,8 +1,8 @@
392     /*
393     * echainiv: Encrypted Chain IV Generator
394     *
395     - * This generator generates an IV based on a sequence number by xoring it
396     - * with a salt and then encrypting it with the same key as used to encrypt
397     + * This generator generates an IV based on a sequence number by multiplying
398     + * it with a salt and then encrypting it with the same key as used to encrypt
399     * the plain text. This algorithm requires that the block size be equal
400     * to the IV size. It is mainly useful for CBC.
401     *
402     @@ -23,81 +23,17 @@
403     #include <linux/err.h>
404     #include <linux/init.h>
405     #include <linux/kernel.h>
406     -#include <linux/mm.h>
407     #include <linux/module.h>
408     -#include <linux/percpu.h>
409     -#include <linux/spinlock.h>
410     +#include <linux/slab.h>
411     #include <linux/string.h>
412    
413     -#define MAX_IV_SIZE 16
414     -
415     -static DEFINE_PER_CPU(u32 [MAX_IV_SIZE / sizeof(u32)], echainiv_iv);
416     -
417     -/* We don't care if we get preempted and read/write IVs from the next CPU. */
418     -static void echainiv_read_iv(u8 *dst, unsigned size)
419     -{
420     - u32 *a = (u32 *)dst;
421     - u32 __percpu *b = echainiv_iv;
422     -
423     - for (; size >= 4; size -= 4) {
424     - *a++ = this_cpu_read(*b);
425     - b++;
426     - }
427     -}
428     -
429     -static void echainiv_write_iv(const u8 *src, unsigned size)
430     -{
431     - const u32 *a = (const u32 *)src;
432     - u32 __percpu *b = echainiv_iv;
433     -
434     - for (; size >= 4; size -= 4) {
435     - this_cpu_write(*b, *a);
436     - a++;
437     - b++;
438     - }
439     -}
440     -
441     -static void echainiv_encrypt_complete2(struct aead_request *req, int err)
442     -{
443     - struct aead_request *subreq = aead_request_ctx(req);
444     - struct crypto_aead *geniv;
445     - unsigned int ivsize;
446     -
447     - if (err == -EINPROGRESS)
448     - return;
449     -
450     - if (err)
451     - goto out;
452     -
453     - geniv = crypto_aead_reqtfm(req);
454     - ivsize = crypto_aead_ivsize(geniv);
455     -
456     - echainiv_write_iv(subreq->iv, ivsize);
457     -
458     - if (req->iv != subreq->iv)
459     - memcpy(req->iv, subreq->iv, ivsize);
460     -
461     -out:
462     - if (req->iv != subreq->iv)
463     - kzfree(subreq->iv);
464     -}
465     -
466     -static void echainiv_encrypt_complete(struct crypto_async_request *base,
467     - int err)
468     -{
469     - struct aead_request *req = base->data;
470     -
471     - echainiv_encrypt_complete2(req, err);
472     - aead_request_complete(req, err);
473     -}
474     -
475     static int echainiv_encrypt(struct aead_request *req)
476     {
477     struct crypto_aead *geniv = crypto_aead_reqtfm(req);
478     struct aead_geniv_ctx *ctx = crypto_aead_ctx(geniv);
479     struct aead_request *subreq = aead_request_ctx(req);
480     - crypto_completion_t compl;
481     - void *data;
482     + __be64 nseqno;
483     + u64 seqno;
484     u8 *info;
485     unsigned int ivsize = crypto_aead_ivsize(geniv);
486     int err;
487     @@ -107,8 +43,6 @@ static int echainiv_encrypt(struct aead_request *req)
488    
489     aead_request_set_tfm(subreq, ctx->child);
490    
491     - compl = echainiv_encrypt_complete;
492     - data = req;
493     info = req->iv;
494    
495     if (req->src != req->dst) {
496     @@ -123,29 +57,30 @@ static int echainiv_encrypt(struct aead_request *req)
497     return err;
498     }
499    
500     - if (unlikely(!IS_ALIGNED((unsigned long)info,
501     - crypto_aead_alignmask(geniv) + 1))) {
502     - info = kmalloc(ivsize, req->base.flags &
503     - CRYPTO_TFM_REQ_MAY_SLEEP ? GFP_KERNEL:
504     - GFP_ATOMIC);
505     - if (!info)
506     - return -ENOMEM;
507     -
508     - memcpy(info, req->iv, ivsize);
509     - }
510     -
511     - aead_request_set_callback(subreq, req->base.flags, compl, data);
512     + aead_request_set_callback(subreq, req->base.flags,
513     + req->base.complete, req->base.data);
514     aead_request_set_crypt(subreq, req->dst, req->dst,
515     req->cryptlen, info);
516     aead_request_set_ad(subreq, req->assoclen);
517    
518     - crypto_xor(info, ctx->salt, ivsize);
519     + memcpy(&nseqno, info + ivsize - 8, 8);
520     + seqno = be64_to_cpu(nseqno);
521     + memset(info, 0, ivsize);
522     +
523     scatterwalk_map_and_copy(info, req->dst, req->assoclen, ivsize, 1);
524     - echainiv_read_iv(info, ivsize);
525    
526     - err = crypto_aead_encrypt(subreq);
527     - echainiv_encrypt_complete2(req, err);
528     - return err;
529     + do {
530     + u64 a;
531     +
532     + memcpy(&a, ctx->salt + ivsize - 8, 8);
533     +
534     + a |= 1;
535     + a *= seqno;
536     +
537     + memcpy(info + ivsize - 8, &a, 8);
538     + } while ((ivsize -= 8));
539     +
540     + return crypto_aead_encrypt(subreq);
541     }
542    
543     static int echainiv_decrypt(struct aead_request *req)
544     @@ -192,8 +127,7 @@ static int echainiv_aead_create(struct crypto_template *tmpl,
545     alg = crypto_spawn_aead_alg(spawn);
546    
547     err = -EINVAL;
548     - if (inst->alg.ivsize & (sizeof(u32) - 1) ||
549     - inst->alg.ivsize > MAX_IV_SIZE)
550     + if (inst->alg.ivsize & (sizeof(u64) - 1) || !inst->alg.ivsize)
551     goto free_inst;
552    
553     inst->alg.encrypt = echainiv_encrypt;
554     @@ -202,7 +136,6 @@ static int echainiv_aead_create(struct crypto_template *tmpl,
555     inst->alg.init = aead_init_geniv;
556     inst->alg.exit = aead_exit_geniv;
557    
558     - inst->alg.base.cra_alignmask |= __alignof__(u32) - 1;
559     inst->alg.base.cra_ctxsize = sizeof(struct aead_geniv_ctx);
560     inst->alg.base.cra_ctxsize += inst->alg.ivsize;
561    
562     diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.c
563     index 4bef72a9d106..3fda594700e0 100644
564     --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.c
565     +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.c
566     @@ -59,9 +59,11 @@ static void
567     nv40_perfctr_next(struct nvkm_pm *pm, struct nvkm_perfdom *dom)
568     {
569     struct nvkm_device *device = pm->engine.subdev.device;
570     - if (pm->sequence != pm->sequence) {
571     + struct nv40_pm *nv40pm = container_of(pm, struct nv40_pm, base);
572     +
573     + if (nv40pm->sequence != pm->sequence) {
574     nvkm_wr32(device, 0x400084, 0x00000020);
575     - pm->sequence = pm->sequence;
576     + nv40pm->sequence = pm->sequence;
577     }
578     }
579    
580     diff --git a/drivers/gpu/drm/qxl/qxl_draw.c b/drivers/gpu/drm/qxl/qxl_draw.c
581     index 56e1d633875e..6e6c76080d6a 100644
582     --- a/drivers/gpu/drm/qxl/qxl_draw.c
583     +++ b/drivers/gpu/drm/qxl/qxl_draw.c
584     @@ -136,6 +136,8 @@ static int qxl_palette_create_1bit(struct qxl_bo *palette_bo,
585     * correctly globaly, since that would require
586     * tracking all of our palettes. */
587     ret = qxl_bo_kmap(palette_bo, (void **)&pal);
588     + if (ret)
589     + return ret;
590     pal->num_ents = 2;
591     pal->unique = unique++;
592     if (visual == FB_VISUAL_TRUECOLOR || visual == FB_VISUAL_DIRECTCOLOR) {
593     diff --git a/drivers/i2c/busses/i2c-eg20t.c b/drivers/i2c/busses/i2c-eg20t.c
594     index 76e699f9ed97..eef3aa6007f1 100644
595     --- a/drivers/i2c/busses/i2c-eg20t.c
596     +++ b/drivers/i2c/busses/i2c-eg20t.c
597     @@ -773,13 +773,6 @@ static int pch_i2c_probe(struct pci_dev *pdev,
598     /* Set the number of I2C channel instance */
599     adap_info->ch_num = id->driver_data;
600    
601     - ret = request_irq(pdev->irq, pch_i2c_handler, IRQF_SHARED,
602     - KBUILD_MODNAME, adap_info);
603     - if (ret) {
604     - pch_pci_err(pdev, "request_irq FAILED\n");
605     - goto err_request_irq;
606     - }
607     -
608     for (i = 0; i < adap_info->ch_num; i++) {
609     pch_adap = &adap_info->pch_data[i].pch_adapter;
610     adap_info->pch_i2c_suspended = false;
611     @@ -796,6 +789,17 @@ static int pch_i2c_probe(struct pci_dev *pdev,
612     adap_info->pch_data[i].pch_base_address = base_addr + 0x100 * i;
613    
614     pch_adap->dev.parent = &pdev->dev;
615     + }
616     +
617     + ret = request_irq(pdev->irq, pch_i2c_handler, IRQF_SHARED,
618     + KBUILD_MODNAME, adap_info);
619     + if (ret) {
620     + pch_pci_err(pdev, "request_irq FAILED\n");
621     + goto err_request_irq;
622     + }
623     +
624     + for (i = 0; i < adap_info->ch_num; i++) {
625     + pch_adap = &adap_info->pch_data[i].pch_adapter;
626    
627     pch_i2c_init(&adap_info->pch_data[i]);
628    
629     diff --git a/drivers/i2c/busses/i2c-qup.c b/drivers/i2c/busses/i2c-qup.c
630     index fdcbdab808e9..33b11563cde7 100644
631     --- a/drivers/i2c/busses/i2c-qup.c
632     +++ b/drivers/i2c/busses/i2c-qup.c
633     @@ -727,7 +727,8 @@ static int qup_i2c_pm_resume_runtime(struct device *device)
634     #ifdef CONFIG_PM_SLEEP
635     static int qup_i2c_suspend(struct device *device)
636     {
637     - qup_i2c_pm_suspend_runtime(device);
638     + if (!pm_runtime_suspended(device))
639     + return qup_i2c_pm_suspend_runtime(device);
640     return 0;
641     }
642    
643     diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
644     index 7ede941e9301..131b434af994 100644
645     --- a/drivers/iio/industrialio-core.c
646     +++ b/drivers/iio/industrialio-core.c
647     @@ -433,16 +433,15 @@ ssize_t iio_format_value(char *buf, unsigned int type, int size, int *vals)
648     scale_db = true;
649     case IIO_VAL_INT_PLUS_MICRO:
650     if (vals[1] < 0)
651     - return sprintf(buf, "-%ld.%06u%s\n", abs(vals[0]),
652     - -vals[1],
653     - scale_db ? " dB" : "");
654     + return sprintf(buf, "-%d.%06u%s\n", abs(vals[0]),
655     + -vals[1], scale_db ? " dB" : "");
656     else
657     return sprintf(buf, "%d.%06u%s\n", vals[0], vals[1],
658     scale_db ? " dB" : "");
659     case IIO_VAL_INT_PLUS_NANO:
660     if (vals[1] < 0)
661     - return sprintf(buf, "-%ld.%09u\n", abs(vals[0]),
662     - -vals[1]);
663     + return sprintf(buf, "-%d.%09u\n", abs(vals[0]),
664     + -vals[1]);
665     else
666     return sprintf(buf, "%d.%09u\n", vals[0], vals[1]);
667     case IIO_VAL_FRACTIONAL:
668     diff --git a/drivers/iommu/dmar.c b/drivers/iommu/dmar.c
669     index 3821c4786662..565bb2c140ed 100644
670     --- a/drivers/iommu/dmar.c
671     +++ b/drivers/iommu/dmar.c
672     @@ -1858,10 +1858,11 @@ static int dmar_hp_remove_drhd(struct acpi_dmar_header *header, void *arg)
673     /*
674     * All PCI devices managed by this unit should have been destroyed.
675     */
676     - if (!dmaru->include_all && dmaru->devices && dmaru->devices_cnt)
677     + if (!dmaru->include_all && dmaru->devices && dmaru->devices_cnt) {
678     for_each_active_dev_scope(dmaru->devices,
679     dmaru->devices_cnt, i, dev)
680     return -EBUSY;
681     + }
682    
683     ret = dmar_ir_hotplug(dmaru, false);
684     if (ret == 0)
685     diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
686     index 24d81308a1a6..b7f852d824a3 100644
687     --- a/drivers/iommu/intel-iommu.c
688     +++ b/drivers/iommu/intel-iommu.c
689     @@ -4182,10 +4182,11 @@ int dmar_check_one_atsr(struct acpi_dmar_header *hdr, void *arg)
690     if (!atsru)
691     return 0;
692    
693     - if (!atsru->include_all && atsru->devices && atsru->devices_cnt)
694     + if (!atsru->include_all && atsru->devices && atsru->devices_cnt) {
695     for_each_active_dev_scope(atsru->devices, atsru->devices_cnt,
696     i, dev)
697     return -EBUSY;
698     + }
699    
700     return 0;
701     }
702     diff --git a/drivers/media/platform/am437x/am437x-vpfe.c b/drivers/media/platform/am437x/am437x-vpfe.c
703     index f0480d687f17..ba780c45f645 100644
704     --- a/drivers/media/platform/am437x/am437x-vpfe.c
705     +++ b/drivers/media/platform/am437x/am437x-vpfe.c
706     @@ -1706,7 +1706,7 @@ static int vpfe_get_app_input_index(struct vpfe_device *vpfe,
707     sdinfo = &cfg->sub_devs[i];
708     client = v4l2_get_subdevdata(sdinfo->sd);
709     if (client->addr == curr_client->addr &&
710     - client->adapter->nr == client->adapter->nr) {
711     + client->adapter->nr == curr_client->adapter->nr) {
712     if (vpfe->current_input >= 1)
713     return -1;
714     *app_input_index = j + vpfe->current_input;
715     diff --git a/drivers/mtd/maps/pmcmsp-flash.c b/drivers/mtd/maps/pmcmsp-flash.c
716     index 744ca5cacc9b..f9fa3fad728e 100644
717     --- a/drivers/mtd/maps/pmcmsp-flash.c
718     +++ b/drivers/mtd/maps/pmcmsp-flash.c
719     @@ -75,15 +75,15 @@ static int __init init_msp_flash(void)
720    
721     printk(KERN_NOTICE "Found %d PMC flash devices\n", fcnt);
722    
723     - msp_flash = kmalloc(fcnt * sizeof(struct map_info *), GFP_KERNEL);
724     + msp_flash = kcalloc(fcnt, sizeof(*msp_flash), GFP_KERNEL);
725     if (!msp_flash)
726     return -ENOMEM;
727    
728     - msp_parts = kmalloc(fcnt * sizeof(struct mtd_partition *), GFP_KERNEL);
729     + msp_parts = kcalloc(fcnt, sizeof(*msp_parts), GFP_KERNEL);
730     if (!msp_parts)
731     goto free_msp_flash;
732    
733     - msp_maps = kcalloc(fcnt, sizeof(struct mtd_info), GFP_KERNEL);
734     + msp_maps = kcalloc(fcnt, sizeof(*msp_maps), GFP_KERNEL);
735     if (!msp_maps)
736     goto free_msp_parts;
737    
738     diff --git a/drivers/mtd/maps/sa1100-flash.c b/drivers/mtd/maps/sa1100-flash.c
739     index 142fc3d79463..784c6e1a0391 100644
740     --- a/drivers/mtd/maps/sa1100-flash.c
741     +++ b/drivers/mtd/maps/sa1100-flash.c
742     @@ -230,8 +230,10 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev,
743    
744     info->mtd = mtd_concat_create(cdev, info->num_subdev,
745     plat->name);
746     - if (info->mtd == NULL)
747     + if (info->mtd == NULL) {
748     ret = -ENXIO;
749     + goto err;
750     + }
751     }
752     info->mtd->dev.parent = &pdev->dev;
753    
754     diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
755     index b3d70a7a5262..5dca77e0ffed 100644
756     --- a/drivers/net/bonding/bond_main.c
757     +++ b/drivers/net/bonding/bond_main.c
758     @@ -1317,9 +1317,10 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
759     slave_dev->name);
760     }
761    
762     - /* already enslaved */
763     - if (slave_dev->flags & IFF_SLAVE) {
764     - netdev_dbg(bond_dev, "Error: Device was already enslaved\n");
765     + /* already in-use? */
766     + if (netdev_is_rx_handler_busy(slave_dev)) {
767     + netdev_err(bond_dev,
768     + "Error: Device is in use and cannot be enslaved\n");
769     return -EBUSY;
770     }
771    
772     diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
773     index 41c0fc9f3b14..16f7cadda5c3 100644
774     --- a/drivers/net/can/flexcan.c
775     +++ b/drivers/net/can/flexcan.c
776     @@ -1268,11 +1268,10 @@ static int __maybe_unused flexcan_suspend(struct device *device)
777     struct flexcan_priv *priv = netdev_priv(dev);
778     int err;
779    
780     - err = flexcan_chip_disable(priv);
781     - if (err)
782     - return err;
783     -
784     if (netif_running(dev)) {
785     + err = flexcan_chip_disable(priv);
786     + if (err)
787     + return err;
788     netif_stop_queue(dev);
789     netif_device_detach(dev);
790     }
791     @@ -1285,13 +1284,17 @@ static int __maybe_unused flexcan_resume(struct device *device)
792     {
793     struct net_device *dev = dev_get_drvdata(device);
794     struct flexcan_priv *priv = netdev_priv(dev);
795     + int err;
796    
797     priv->can.state = CAN_STATE_ERROR_ACTIVE;
798     if (netif_running(dev)) {
799     netif_device_attach(dev);
800     netif_start_queue(dev);
801     + err = flexcan_chip_enable(priv);
802     + if (err)
803     + return err;
804     }
805     - return flexcan_chip_enable(priv);
806     + return 0;
807     }
808    
809     static SIMPLE_DEV_PM_OPS(flexcan_pm_ops, flexcan_suspend, flexcan_resume);
810     diff --git a/drivers/net/dsa/bcm_sf2.h b/drivers/net/dsa/bcm_sf2.h
811     index 6bba1c98d764..c7994e372284 100644
812     --- a/drivers/net/dsa/bcm_sf2.h
813     +++ b/drivers/net/dsa/bcm_sf2.h
814     @@ -187,8 +187,8 @@ static inline void name##_writeq(struct bcm_sf2_priv *priv, u64 val, \
815     static inline void intrl2_##which##_mask_clear(struct bcm_sf2_priv *priv, \
816     u32 mask) \
817     { \
818     - intrl2_##which##_writel(priv, mask, INTRL2_CPU_MASK_CLEAR); \
819     priv->irq##which##_mask &= ~(mask); \
820     + intrl2_##which##_writel(priv, mask, INTRL2_CPU_MASK_CLEAR); \
821     } \
822     static inline void intrl2_##which##_mask_set(struct bcm_sf2_priv *priv, \
823     u32 mask) \
824     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
825     index 037fc4cdf5af..cc199063612a 100644
826     --- a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
827     +++ b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
828     @@ -143,13 +143,14 @@ static struct mlx5_cmd_layout *get_inst(struct mlx5_cmd *cmd, int idx)
829     return cmd->cmd_buf + (idx << cmd->log_stride);
830     }
831    
832     -static u8 xor8_buf(void *buf, int len)
833     +static u8 xor8_buf(void *buf, size_t offset, int len)
834     {
835     u8 *ptr = buf;
836     u8 sum = 0;
837     int i;
838     + int end = len + offset;
839    
840     - for (i = 0; i < len; i++)
841     + for (i = offset; i < end; i++)
842     sum ^= ptr[i];
843    
844     return sum;
845     @@ -157,41 +158,49 @@ static u8 xor8_buf(void *buf, int len)
846    
847     static int verify_block_sig(struct mlx5_cmd_prot_block *block)
848     {
849     - if (xor8_buf(block->rsvd0, sizeof(*block) - sizeof(block->data) - 1) != 0xff)
850     + size_t rsvd0_off = offsetof(struct mlx5_cmd_prot_block, rsvd0);
851     + int xor_len = sizeof(*block) - sizeof(block->data) - 1;
852     +
853     + if (xor8_buf(block, rsvd0_off, xor_len) != 0xff)
854     return -EINVAL;
855    
856     - if (xor8_buf(block, sizeof(*block)) != 0xff)
857     + if (xor8_buf(block, 0, sizeof(*block)) != 0xff)
858     return -EINVAL;
859    
860     return 0;
861     }
862    
863     -static void calc_block_sig(struct mlx5_cmd_prot_block *block, u8 token,
864     - int csum)
865     +static void calc_block_sig(struct mlx5_cmd_prot_block *block)
866     {
867     - block->token = token;
868     - if (csum) {
869     - block->ctrl_sig = ~xor8_buf(block->rsvd0, sizeof(*block) -
870     - sizeof(block->data) - 2);
871     - block->sig = ~xor8_buf(block, sizeof(*block) - 1);
872     - }
873     + int ctrl_xor_len = sizeof(*block) - sizeof(block->data) - 2;
874     + size_t rsvd0_off = offsetof(struct mlx5_cmd_prot_block, rsvd0);
875     +
876     + block->ctrl_sig = ~xor8_buf(block, rsvd0_off, ctrl_xor_len);
877     + block->sig = ~xor8_buf(block, 0, sizeof(*block) - 1);
878     }
879    
880     -static void calc_chain_sig(struct mlx5_cmd_msg *msg, u8 token, int csum)
881     +static void calc_chain_sig(struct mlx5_cmd_msg *msg)
882     {
883     struct mlx5_cmd_mailbox *next = msg->next;
884     -
885     - while (next) {
886     - calc_block_sig(next->buf, token, csum);
887     + int size = msg->len;
888     + int blen = size - min_t(int, sizeof(msg->first.data), size);
889     + int n = (blen + MLX5_CMD_DATA_BLOCK_SIZE - 1)
890     + / MLX5_CMD_DATA_BLOCK_SIZE;
891     + int i = 0;
892     +
893     + for (i = 0; i < n && next; i++) {
894     + calc_block_sig(next->buf);
895     next = next->next;
896     }
897     }
898    
899     static void set_signature(struct mlx5_cmd_work_ent *ent, int csum)
900     {
901     - ent->lay->sig = ~xor8_buf(ent->lay, sizeof(*ent->lay));
902     - calc_chain_sig(ent->in, ent->token, csum);
903     - calc_chain_sig(ent->out, ent->token, csum);
904     + ent->lay->sig = ~xor8_buf(ent->lay, 0, sizeof(*ent->lay));
905     + if (csum) {
906     + calc_chain_sig(ent->in);
907     + calc_chain_sig(ent->out);
908     + }
909     }
910    
911     static void poll_timeout(struct mlx5_cmd_work_ent *ent)
912     @@ -222,12 +231,17 @@ static int verify_signature(struct mlx5_cmd_work_ent *ent)
913     struct mlx5_cmd_mailbox *next = ent->out->next;
914     int err;
915     u8 sig;
916     + int size = ent->out->len;
917     + int blen = size - min_t(int, sizeof(ent->out->first.data), size);
918     + int n = (blen + MLX5_CMD_DATA_BLOCK_SIZE - 1)
919     + / MLX5_CMD_DATA_BLOCK_SIZE;
920     + int i = 0;
921    
922     - sig = xor8_buf(ent->lay, sizeof(*ent->lay));
923     + sig = xor8_buf(ent->lay, 0, sizeof(*ent->lay));
924     if (sig != 0xff)
925     return -EINVAL;
926    
927     - while (next) {
928     + for (i = 0; i < n && next; i++) {
929     err = verify_block_sig(next->buf);
930     if (err)
931     return err;
932     @@ -641,7 +655,6 @@ static void cmd_work_handler(struct work_struct *work)
933     spin_unlock_irqrestore(&cmd->alloc_lock, flags);
934     }
935    
936     - ent->token = alloc_token(cmd);
937     cmd->ent_arr[ent->idx] = ent;
938     lay = get_inst(cmd, ent->idx);
939     ent->lay = lay;
940     @@ -755,7 +768,8 @@ static u8 *get_status_ptr(struct mlx5_outbox_hdr *out)
941     static int mlx5_cmd_invoke(struct mlx5_core_dev *dev, struct mlx5_cmd_msg *in,
942     struct mlx5_cmd_msg *out, void *uout, int uout_size,
943     mlx5_cmd_cbk_t callback,
944     - void *context, int page_queue, u8 *status)
945     + void *context, int page_queue, u8 *status,
946     + u8 token)
947     {
948     struct mlx5_cmd *cmd = &dev->cmd;
949     struct mlx5_cmd_work_ent *ent;
950     @@ -772,6 +786,8 @@ static int mlx5_cmd_invoke(struct mlx5_core_dev *dev, struct mlx5_cmd_msg *in,
951     if (IS_ERR(ent))
952     return PTR_ERR(ent);
953    
954     + ent->token = token;
955     +
956     if (!callback)
957     init_completion(&ent->done);
958    
959     @@ -844,7 +860,8 @@ static const struct file_operations fops = {
960     .write = dbg_write,
961     };
962    
963     -static int mlx5_copy_to_msg(struct mlx5_cmd_msg *to, void *from, int size)
964     +static int mlx5_copy_to_msg(struct mlx5_cmd_msg *to, void *from, int size,
965     + u8 token)
966     {
967     struct mlx5_cmd_prot_block *block;
968     struct mlx5_cmd_mailbox *next;
969     @@ -870,6 +887,7 @@ static int mlx5_copy_to_msg(struct mlx5_cmd_msg *to, void *from, int size)
970     memcpy(block->data, from, copy);
971     from += copy;
972     size -= copy;
973     + block->token = token;
974     next = next->next;
975     }
976    
977     @@ -939,7 +957,8 @@ static void free_cmd_box(struct mlx5_core_dev *dev,
978     }
979    
980     static struct mlx5_cmd_msg *mlx5_alloc_cmd_msg(struct mlx5_core_dev *dev,
981     - gfp_t flags, int size)
982     + gfp_t flags, int size,
983     + u8 token)
984     {
985     struct mlx5_cmd_mailbox *tmp, *head = NULL;
986     struct mlx5_cmd_prot_block *block;
987     @@ -968,6 +987,7 @@ static struct mlx5_cmd_msg *mlx5_alloc_cmd_msg(struct mlx5_core_dev *dev,
988     tmp->next = head;
989     block->next = cpu_to_be64(tmp->next ? tmp->next->dma : 0);
990     block->block_num = cpu_to_be32(n - i - 1);
991     + block->token = token;
992     head = tmp;
993     }
994     msg->next = head;
995     @@ -1351,7 +1371,7 @@ static struct mlx5_cmd_msg *alloc_msg(struct mlx5_core_dev *dev, int in_size,
996     }
997    
998     if (IS_ERR(msg))
999     - msg = mlx5_alloc_cmd_msg(dev, gfp, in_size);
1000     + msg = mlx5_alloc_cmd_msg(dev, gfp, in_size, 0);
1001    
1002     return msg;
1003     }
1004     @@ -1376,6 +1396,7 @@ static int cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out,
1005     int err;
1006     u8 status = 0;
1007     u32 drv_synd;
1008     + u8 token;
1009    
1010     if (pci_channel_offline(dev->pdev) ||
1011     dev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR) {
1012     @@ -1394,20 +1415,22 @@ static int cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out,
1013     return err;
1014     }
1015    
1016     - err = mlx5_copy_to_msg(inb, in, in_size);
1017     + token = alloc_token(&dev->cmd);
1018     +
1019     + err = mlx5_copy_to_msg(inb, in, in_size, token);
1020     if (err) {
1021     mlx5_core_warn(dev, "err %d\n", err);
1022     goto out_in;
1023     }
1024    
1025     - outb = mlx5_alloc_cmd_msg(dev, gfp, out_size);
1026     + outb = mlx5_alloc_cmd_msg(dev, gfp, out_size, token);
1027     if (IS_ERR(outb)) {
1028     err = PTR_ERR(outb);
1029     goto out_in;
1030     }
1031    
1032     err = mlx5_cmd_invoke(dev, inb, outb, out, out_size, callback, context,
1033     - pages_queue, &status);
1034     + pages_queue, &status, token);
1035     if (err)
1036     goto out_out;
1037    
1038     @@ -1475,7 +1498,7 @@ static int create_msg_cache(struct mlx5_core_dev *dev)
1039     INIT_LIST_HEAD(&cmd->cache.med.head);
1040    
1041     for (i = 0; i < NUM_LONG_LISTS; i++) {
1042     - msg = mlx5_alloc_cmd_msg(dev, GFP_KERNEL, LONG_LIST_SIZE);
1043     + msg = mlx5_alloc_cmd_msg(dev, GFP_KERNEL, LONG_LIST_SIZE, 0);
1044     if (IS_ERR(msg)) {
1045     err = PTR_ERR(msg);
1046     goto ex_err;
1047     @@ -1485,7 +1508,7 @@ static int create_msg_cache(struct mlx5_core_dev *dev)
1048     }
1049    
1050     for (i = 0; i < NUM_MED_LISTS; i++) {
1051     - msg = mlx5_alloc_cmd_msg(dev, GFP_KERNEL, MED_LIST_SIZE);
1052     + msg = mlx5_alloc_cmd_msg(dev, GFP_KERNEL, MED_LIST_SIZE, 0);
1053     if (IS_ERR(msg)) {
1054     err = PTR_ERR(msg);
1055     goto ex_err;
1056     diff --git a/drivers/net/ethernet/smsc/smc91x.c b/drivers/net/ethernet/smsc/smc91x.c
1057     index 0e2fc1a844ab..8c44cf6ff7a2 100644
1058     --- a/drivers/net/ethernet/smsc/smc91x.c
1059     +++ b/drivers/net/ethernet/smsc/smc91x.c
1060     @@ -2269,6 +2269,13 @@ static int smc_drv_probe(struct platform_device *pdev)
1061     if (pd) {
1062     memcpy(&lp->cfg, pd, sizeof(lp->cfg));
1063     lp->io_shift = SMC91X_IO_SHIFT(lp->cfg.flags);
1064     +
1065     + if (!SMC_8BIT(lp) && !SMC_16BIT(lp)) {
1066     + dev_err(&pdev->dev,
1067     + "at least one of 8-bit or 16-bit access support is required.\n");
1068     + ret = -ENXIO;
1069     + goto out_free_netdev;
1070     + }
1071     }
1072    
1073     #if IS_BUILTIN(CONFIG_OF)
1074     diff --git a/drivers/net/ethernet/smsc/smc91x.h b/drivers/net/ethernet/smsc/smc91x.h
1075     index a3c129e1e40a..29df0465daf4 100644
1076     --- a/drivers/net/ethernet/smsc/smc91x.h
1077     +++ b/drivers/net/ethernet/smsc/smc91x.h
1078     @@ -37,6 +37,27 @@
1079     #include <linux/smc91x.h>
1080    
1081     /*
1082     + * Any 16-bit access is performed with two 8-bit accesses if the hardware
1083     + * can't do it directly. Most registers are 16-bit so those are mandatory.
1084     + */
1085     +#define SMC_outw_b(x, a, r) \
1086     + do { \
1087     + unsigned int __val16 = (x); \
1088     + unsigned int __reg = (r); \
1089     + SMC_outb(__val16, a, __reg); \
1090     + SMC_outb(__val16 >> 8, a, __reg + (1 << SMC_IO_SHIFT)); \
1091     + } while (0)
1092     +
1093     +#define SMC_inw_b(a, r) \
1094     + ({ \
1095     + unsigned int __val16; \
1096     + unsigned int __reg = r; \
1097     + __val16 = SMC_inb(a, __reg); \
1098     + __val16 |= SMC_inb(a, __reg + (1 << SMC_IO_SHIFT)) << 8; \
1099     + __val16; \
1100     + })
1101     +
1102     +/*
1103     * Define your architecture specific bus configuration parameters here.
1104     */
1105    
1106     @@ -55,10 +76,30 @@
1107     #define SMC_IO_SHIFT (lp->io_shift)
1108    
1109     #define SMC_inb(a, r) readb((a) + (r))
1110     -#define SMC_inw(a, r) readw((a) + (r))
1111     +#define SMC_inw(a, r) \
1112     + ({ \
1113     + unsigned int __smc_r = r; \
1114     + SMC_16BIT(lp) ? readw((a) + __smc_r) : \
1115     + SMC_8BIT(lp) ? SMC_inw_b(a, __smc_r) : \
1116     + ({ BUG(); 0; }); \
1117     + })
1118     +
1119     #define SMC_inl(a, r) readl((a) + (r))
1120     #define SMC_outb(v, a, r) writeb(v, (a) + (r))
1121     +#define SMC_outw(v, a, r) \
1122     + do { \
1123     + unsigned int __v = v, __smc_r = r; \
1124     + if (SMC_16BIT(lp)) \
1125     + __SMC_outw(__v, a, __smc_r); \
1126     + else if (SMC_8BIT(lp)) \
1127     + SMC_outw_b(__v, a, __smc_r); \
1128     + else \
1129     + BUG(); \
1130     + } while (0)
1131     +
1132     #define SMC_outl(v, a, r) writel(v, (a) + (r))
1133     +#define SMC_insb(a, r, p, l) readsb((a) + (r), p, l)
1134     +#define SMC_outsb(a, r, p, l) writesb((a) + (r), p, l)
1135     #define SMC_insw(a, r, p, l) readsw((a) + (r), p, l)
1136     #define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l)
1137     #define SMC_insl(a, r, p, l) readsl((a) + (r), p, l)
1138     @@ -66,7 +107,7 @@
1139     #define SMC_IRQ_FLAGS (-1) /* from resource */
1140    
1141     /* We actually can't write halfwords properly if not word aligned */
1142     -static inline void SMC_outw(u16 val, void __iomem *ioaddr, int reg)
1143     +static inline void __SMC_outw(u16 val, void __iomem *ioaddr, int reg)
1144     {
1145     if ((machine_is_mainstone() || machine_is_stargate2() ||
1146     machine_is_pxa_idp()) && reg & 2) {
1147     @@ -405,24 +446,8 @@ smc_pxa_dma_insw(void __iomem *ioaddr, struct smc_local *lp, int reg, int dma,
1148    
1149     #if ! SMC_CAN_USE_16BIT
1150    
1151     -/*
1152     - * Any 16-bit access is performed with two 8-bit accesses if the hardware
1153     - * can't do it directly. Most registers are 16-bit so those are mandatory.
1154     - */
1155     -#define SMC_outw(x, ioaddr, reg) \
1156     - do { \
1157     - unsigned int __val16 = (x); \
1158     - SMC_outb( __val16, ioaddr, reg ); \
1159     - SMC_outb( __val16 >> 8, ioaddr, reg + (1 << SMC_IO_SHIFT));\
1160     - } while (0)
1161     -#define SMC_inw(ioaddr, reg) \
1162     - ({ \
1163     - unsigned int __val16; \
1164     - __val16 = SMC_inb( ioaddr, reg ); \
1165     - __val16 |= SMC_inb( ioaddr, reg + (1 << SMC_IO_SHIFT)) << 8; \
1166     - __val16; \
1167     - })
1168     -
1169     +#define SMC_outw(x, ioaddr, reg) SMC_outw_b(x, ioaddr, reg)
1170     +#define SMC_inw(ioaddr, reg) SMC_inw_b(ioaddr, reg)
1171     #define SMC_insw(a, r, p, l) BUG()
1172     #define SMC_outsw(a, r, p, l) BUG()
1173    
1174     diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
1175     index 47cd306dbb3c..bba0ca786aaa 100644
1176     --- a/drivers/net/phy/phy.c
1177     +++ b/drivers/net/phy/phy.c
1178     @@ -640,8 +640,10 @@ phy_err:
1179     int phy_start_interrupts(struct phy_device *phydev)
1180     {
1181     atomic_set(&phydev->irq_disable, 0);
1182     - if (request_irq(phydev->irq, phy_interrupt, 0, "phy_interrupt",
1183     - phydev) < 0) {
1184     + if (request_irq(phydev->irq, phy_interrupt,
1185     + IRQF_SHARED,
1186     + "phy_interrupt",
1187     + phydev) < 0) {
1188     pr_warn("%s: Can't get IRQ %d (PHY)\n",
1189     phydev->bus->name, phydev->irq);
1190     phydev->irq = PHY_POLL;
1191     diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
1192     index 1bdeacf7b257..bc70ce62bc03 100644
1193     --- a/drivers/net/wireless/ath/ath9k/init.c
1194     +++ b/drivers/net/wireless/ath/ath9k/init.c
1195     @@ -869,8 +869,8 @@ static void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
1196     hw->wiphy->interface_modes |=
1197     BIT(NL80211_IFTYPE_P2P_DEVICE);
1198    
1199     - hw->wiphy->iface_combinations = if_comb;
1200     - hw->wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
1201     + hw->wiphy->iface_combinations = if_comb;
1202     + hw->wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
1203     }
1204    
1205     hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
1206     diff --git a/drivers/net/wireless/iwlegacy/3945.c b/drivers/net/wireless/iwlegacy/3945.c
1207     index 93bdf684babe..ae047ab7a4df 100644
1208     --- a/drivers/net/wireless/iwlegacy/3945.c
1209     +++ b/drivers/net/wireless/iwlegacy/3945.c
1210     @@ -1019,12 +1019,13 @@ il3945_hw_txq_ctx_free(struct il_priv *il)
1211     int txq_id;
1212    
1213     /* Tx queues */
1214     - if (il->txq)
1215     + if (il->txq) {
1216     for (txq_id = 0; txq_id < il->hw_params.max_txq_num; txq_id++)
1217     if (txq_id == IL39_CMD_QUEUE_NUM)
1218     il_cmd_queue_free(il);
1219     else
1220     il_tx_queue_free(il, txq_id);
1221     + }
1222    
1223     /* free tx queue structure */
1224     il_free_txq_mem(il);
1225     diff --git a/drivers/net/wireless/iwlwifi/dvm/calib.c b/drivers/net/wireless/iwlwifi/dvm/calib.c
1226     index 20e6aa910700..c148085742a0 100644
1227     --- a/drivers/net/wireless/iwlwifi/dvm/calib.c
1228     +++ b/drivers/net/wireless/iwlwifi/dvm/calib.c
1229     @@ -901,7 +901,7 @@ static void iwlagn_gain_computation(struct iwl_priv *priv,
1230     /* bound gain by 2 bits value max, 3rd bit is sign */
1231     data->delta_gain_code[i] =
1232     min(abs(delta_g),
1233     - (long) CHAIN_NOISE_MAX_DELTA_GAIN_CODE);
1234     + (s32) CHAIN_NOISE_MAX_DELTA_GAIN_CODE);
1235    
1236     if (delta_g < 0)
1237     /*
1238     diff --git a/drivers/power/max17042_battery.c b/drivers/power/max17042_battery.c
1239     index 9c65f134d447..da7a75f82489 100644
1240     --- a/drivers/power/max17042_battery.c
1241     +++ b/drivers/power/max17042_battery.c
1242     @@ -457,13 +457,16 @@ static inline void max17042_write_model_data(struct max17042_chip *chip,
1243     }
1244    
1245     static inline void max17042_read_model_data(struct max17042_chip *chip,
1246     - u8 addr, u32 *data, int size)
1247     + u8 addr, u16 *data, int size)
1248     {
1249     struct regmap *map = chip->regmap;
1250     int i;
1251     + u32 tmp;
1252    
1253     - for (i = 0; i < size; i++)
1254     - regmap_read(map, addr + i, &data[i]);
1255     + for (i = 0; i < size; i++) {
1256     + regmap_read(map, addr + i, &tmp);
1257     + data[i] = (u16)tmp;
1258     + }
1259     }
1260    
1261     static inline int max17042_model_data_compare(struct max17042_chip *chip,
1262     @@ -486,7 +489,7 @@ static int max17042_init_model(struct max17042_chip *chip)
1263     {
1264     int ret;
1265     int table_size = ARRAY_SIZE(chip->pdata->config_data->cell_char_tbl);
1266     - u32 *temp_data;
1267     + u16 *temp_data;
1268    
1269     temp_data = kcalloc(table_size, sizeof(*temp_data), GFP_KERNEL);
1270     if (!temp_data)
1271     @@ -501,7 +504,7 @@ static int max17042_init_model(struct max17042_chip *chip)
1272     ret = max17042_model_data_compare(
1273     chip,
1274     chip->pdata->config_data->cell_char_tbl,
1275     - (u16 *)temp_data,
1276     + temp_data,
1277     table_size);
1278    
1279     max10742_lock_model(chip);
1280     @@ -514,7 +517,7 @@ static int max17042_verify_model_lock(struct max17042_chip *chip)
1281     {
1282     int i;
1283     int table_size = ARRAY_SIZE(chip->pdata->config_data->cell_char_tbl);
1284     - u32 *temp_data;
1285     + u16 *temp_data;
1286     int ret = 0;
1287    
1288     temp_data = kcalloc(table_size, sizeof(*temp_data), GFP_KERNEL);
1289     diff --git a/drivers/power/reset/hisi-reboot.c b/drivers/power/reset/hisi-reboot.c
1290     index 9ab7f562a83b..f69387e12c1e 100644
1291     --- a/drivers/power/reset/hisi-reboot.c
1292     +++ b/drivers/power/reset/hisi-reboot.c
1293     @@ -53,13 +53,16 @@ static int hisi_reboot_probe(struct platform_device *pdev)
1294    
1295     if (of_property_read_u32(np, "reboot-offset", &reboot_offset) < 0) {
1296     pr_err("failed to find reboot-offset property\n");
1297     + iounmap(base);
1298     return -EINVAL;
1299     }
1300    
1301     err = register_restart_handler(&hisi_restart_nb);
1302     - if (err)
1303     + if (err) {
1304     dev_err(&pdev->dev, "cannot register restart handler (err=%d)\n",
1305     err);
1306     + iounmap(base);
1307     + }
1308    
1309     return err;
1310     }
1311     diff --git a/drivers/power/tps65217_charger.c b/drivers/power/tps65217_charger.c
1312     index d9f56730c735..040a40b4b173 100644
1313     --- a/drivers/power/tps65217_charger.c
1314     +++ b/drivers/power/tps65217_charger.c
1315     @@ -205,6 +205,7 @@ static int tps65217_charger_probe(struct platform_device *pdev)
1316     if (!charger)
1317     return -ENOMEM;
1318    
1319     + platform_set_drvdata(pdev, charger);
1320     charger->tps = tps;
1321     charger->dev = &pdev->dev;
1322    
1323     diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
1324     index d24ca5f281b4..7831bc6b51dd 100644
1325     --- a/drivers/pwm/core.c
1326     +++ b/drivers/pwm/core.c
1327     @@ -889,7 +889,7 @@ EXPORT_SYMBOL_GPL(devm_pwm_put);
1328     */
1329     bool pwm_can_sleep(struct pwm_device *pwm)
1330     {
1331     - return pwm->chip->can_sleep;
1332     + return true;
1333     }
1334     EXPORT_SYMBOL_GPL(pwm_can_sleep);
1335    
1336     diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
1337     index 3f8d357b1bac..278e10cd771f 100644
1338     --- a/drivers/scsi/megaraid/megaraid_sas_base.c
1339     +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
1340     @@ -5941,11 +5941,11 @@ static void megasas_detach_one(struct pci_dev *pdev)
1341     if (fusion->ld_drv_map[i])
1342     free_pages((ulong)fusion->ld_drv_map[i],
1343     fusion->drv_map_pages);
1344     - if (fusion->pd_seq_sync)
1345     - dma_free_coherent(&instance->pdev->dev,
1346     - pd_seq_map_sz,
1347     - fusion->pd_seq_sync[i],
1348     - fusion->pd_seq_phys[i]);
1349     + if (fusion->pd_seq_sync[i])
1350     + dma_free_coherent(&instance->pdev->dev,
1351     + pd_seq_map_sz,
1352     + fusion->pd_seq_sync[i],
1353     + fusion->pd_seq_phys[i]);
1354     }
1355     free_pages((ulong)instance->ctrl_context,
1356     instance->ctrl_context_pages);
1357     diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
1358     index bb40f3728742..20314ff08be0 100644
1359     --- a/drivers/staging/iio/adc/ad7192.c
1360     +++ b/drivers/staging/iio/adc/ad7192.c
1361     @@ -236,7 +236,7 @@ static int ad7192_setup(struct ad7192_state *st,
1362     st->mclk = pdata->ext_clk_hz;
1363     else
1364     st->mclk = AD7192_INT_FREQ_MHZ;
1365     - break;
1366     + break;
1367     default:
1368     ret = -EINVAL;
1369     goto out;
1370     diff --git a/fs/autofs4/autofs_i.h b/fs/autofs4/autofs_i.h
1371     index c37149b929be..502d3892d8a4 100644
1372     --- a/fs/autofs4/autofs_i.h
1373     +++ b/fs/autofs4/autofs_i.h
1374     @@ -79,9 +79,13 @@ struct autofs_info {
1375     };
1376    
1377     #define AUTOFS_INF_EXPIRING (1<<0) /* dentry is in the process of expiring */
1378     -#define AUTOFS_INF_NO_RCU (1<<1) /* the dentry is being considered
1379     +#define AUTOFS_INF_WANT_EXPIRE (1<<1) /* the dentry is being considered
1380     * for expiry, so RCU_walk is
1381     - * not permitted
1382     + * not permitted. If it progresses to
1383     + * actual expiry attempt, the flag is
1384     + * not cleared when EXPIRING is set -
1385     + * in that case it gets cleared only
1386     + * when it comes to clearing EXPIRING.
1387     */
1388     #define AUTOFS_INF_PENDING (1<<2) /* dentry pending mount */
1389    
1390     diff --git a/fs/autofs4/expire.c b/fs/autofs4/expire.c
1391     index 1cebc3c52fa5..7a5a598a2d94 100644
1392     --- a/fs/autofs4/expire.c
1393     +++ b/fs/autofs4/expire.c
1394     @@ -315,19 +315,17 @@ struct dentry *autofs4_expire_direct(struct super_block *sb,
1395     if (ino->flags & AUTOFS_INF_PENDING)
1396     goto out;
1397     if (!autofs4_direct_busy(mnt, root, timeout, do_now)) {
1398     - ino->flags |= AUTOFS_INF_NO_RCU;
1399     + ino->flags |= AUTOFS_INF_WANT_EXPIRE;
1400     spin_unlock(&sbi->fs_lock);
1401     synchronize_rcu();
1402     spin_lock(&sbi->fs_lock);
1403     if (!autofs4_direct_busy(mnt, root, timeout, do_now)) {
1404     ino->flags |= AUTOFS_INF_EXPIRING;
1405     - smp_mb();
1406     - ino->flags &= ~AUTOFS_INF_NO_RCU;
1407     init_completion(&ino->expire_complete);
1408     spin_unlock(&sbi->fs_lock);
1409     return root;
1410     }
1411     - ino->flags &= ~AUTOFS_INF_NO_RCU;
1412     + ino->flags &= ~AUTOFS_INF_WANT_EXPIRE;
1413     }
1414     out:
1415     spin_unlock(&sbi->fs_lock);
1416     @@ -417,6 +415,7 @@ static struct dentry *should_expire(struct dentry *dentry,
1417     }
1418     return NULL;
1419     }
1420     +
1421     /*
1422     * Find an eligible tree to time-out
1423     * A tree is eligible if :-
1424     @@ -432,6 +431,7 @@ struct dentry *autofs4_expire_indirect(struct super_block *sb,
1425     struct dentry *root = sb->s_root;
1426     struct dentry *dentry;
1427     struct dentry *expired;
1428     + struct dentry *found;
1429     struct autofs_info *ino;
1430    
1431     if (!root)
1432     @@ -442,48 +442,54 @@ struct dentry *autofs4_expire_indirect(struct super_block *sb,
1433    
1434     dentry = NULL;
1435     while ((dentry = get_next_positive_subdir(dentry, root))) {
1436     + int flags = how;
1437     +
1438     spin_lock(&sbi->fs_lock);
1439     ino = autofs4_dentry_ino(dentry);
1440     - if (ino->flags & AUTOFS_INF_NO_RCU)
1441     - expired = NULL;
1442     - else
1443     - expired = should_expire(dentry, mnt, timeout, how);
1444     - if (!expired) {
1445     + if (ino->flags & AUTOFS_INF_WANT_EXPIRE) {
1446     spin_unlock(&sbi->fs_lock);
1447     continue;
1448     }
1449     + spin_unlock(&sbi->fs_lock);
1450     +
1451     + expired = should_expire(dentry, mnt, timeout, flags);
1452     + if (!expired)
1453     + continue;
1454     +
1455     + spin_lock(&sbi->fs_lock);
1456     ino = autofs4_dentry_ino(expired);
1457     - ino->flags |= AUTOFS_INF_NO_RCU;
1458     + ino->flags |= AUTOFS_INF_WANT_EXPIRE;
1459     spin_unlock(&sbi->fs_lock);
1460     synchronize_rcu();
1461     - spin_lock(&sbi->fs_lock);
1462     - if (should_expire(expired, mnt, timeout, how)) {
1463     - if (expired != dentry)
1464     - dput(dentry);
1465     - goto found;
1466     - }
1467    
1468     - ino->flags &= ~AUTOFS_INF_NO_RCU;
1469     + /* Make sure a reference is not taken on found if
1470     + * things have changed.
1471     + */
1472     + flags &= ~AUTOFS_EXP_LEAVES;
1473     + found = should_expire(expired, mnt, timeout, how);
1474     + if (!found || found != expired)
1475     + /* Something has changed, continue */
1476     + goto next;
1477     +
1478     if (expired != dentry)
1479     - dput(expired);
1480     + dput(dentry);
1481     +
1482     + spin_lock(&sbi->fs_lock);
1483     + goto found;
1484     +next:
1485     + spin_lock(&sbi->fs_lock);
1486     + ino->flags &= ~AUTOFS_INF_WANT_EXPIRE;
1487     spin_unlock(&sbi->fs_lock);
1488     + if (expired != dentry)
1489     + dput(expired);
1490     }
1491     return NULL;
1492    
1493     found:
1494     DPRINTK("returning %p %pd", expired, expired);
1495     ino->flags |= AUTOFS_INF_EXPIRING;
1496     - smp_mb();
1497     - ino->flags &= ~AUTOFS_INF_NO_RCU;
1498     init_completion(&ino->expire_complete);
1499     spin_unlock(&sbi->fs_lock);
1500     - spin_lock(&sbi->lookup_lock);
1501     - spin_lock(&expired->d_parent->d_lock);
1502     - spin_lock_nested(&expired->d_lock, DENTRY_D_LOCK_NESTED);
1503     - list_move(&expired->d_parent->d_subdirs, &expired->d_child);
1504     - spin_unlock(&expired->d_lock);
1505     - spin_unlock(&expired->d_parent->d_lock);
1506     - spin_unlock(&sbi->lookup_lock);
1507     return expired;
1508     }
1509    
1510     @@ -492,15 +498,27 @@ int autofs4_expire_wait(struct dentry *dentry, int rcu_walk)
1511     struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
1512     struct autofs_info *ino = autofs4_dentry_ino(dentry);
1513     int status;
1514     + int state;
1515    
1516     /* Block on any pending expire */
1517     - if (!(ino->flags & (AUTOFS_INF_EXPIRING | AUTOFS_INF_NO_RCU)))
1518     + if (!(ino->flags & AUTOFS_INF_WANT_EXPIRE))
1519     return 0;
1520     if (rcu_walk)
1521     return -ECHILD;
1522    
1523     +retry:
1524     spin_lock(&sbi->fs_lock);
1525     - if (ino->flags & AUTOFS_INF_EXPIRING) {
1526     + state = ino->flags & (AUTOFS_INF_WANT_EXPIRE | AUTOFS_INF_EXPIRING);
1527     + if (state == AUTOFS_INF_WANT_EXPIRE) {
1528     + spin_unlock(&sbi->fs_lock);
1529     + /*
1530     + * Possibly being selected for expire, wait until
1531     + * it's selected or not.
1532     + */
1533     + schedule_timeout_uninterruptible(HZ/10);
1534     + goto retry;
1535     + }
1536     + if (state & AUTOFS_INF_EXPIRING) {
1537     spin_unlock(&sbi->fs_lock);
1538    
1539     DPRINTK("waiting for expire %p name=%pd", dentry, dentry);
1540     @@ -551,7 +569,7 @@ int autofs4_expire_run(struct super_block *sb,
1541     ino = autofs4_dentry_ino(dentry);
1542     /* avoid rapid-fire expire attempts if expiry fails */
1543     ino->last_used = now;
1544     - ino->flags &= ~AUTOFS_INF_EXPIRING;
1545     + ino->flags &= ~(AUTOFS_INF_EXPIRING|AUTOFS_INF_WANT_EXPIRE);
1546     complete_all(&ino->expire_complete);
1547     spin_unlock(&sbi->fs_lock);
1548    
1549     @@ -579,7 +597,7 @@ int autofs4_do_expire_multi(struct super_block *sb, struct vfsmount *mnt,
1550     spin_lock(&sbi->fs_lock);
1551     /* avoid rapid-fire expire attempts if expiry fails */
1552     ino->last_used = now;
1553     - ino->flags &= ~AUTOFS_INF_EXPIRING;
1554     + ino->flags &= ~(AUTOFS_INF_EXPIRING|AUTOFS_INF_WANT_EXPIRE);
1555     complete_all(&ino->expire_complete);
1556     spin_unlock(&sbi->fs_lock);
1557     dput(dentry);
1558     diff --git a/fs/autofs4/root.c b/fs/autofs4/root.c
1559     index c6d7d3dbd52a..7a54c6a867c8 100644
1560     --- a/fs/autofs4/root.c
1561     +++ b/fs/autofs4/root.c
1562     @@ -455,7 +455,7 @@ static int autofs4_d_manage(struct dentry *dentry, bool rcu_walk)
1563     * a mount-trap.
1564     */
1565     struct inode *inode;
1566     - if (ino->flags & (AUTOFS_INF_EXPIRING | AUTOFS_INF_NO_RCU))
1567     + if (ino->flags & AUTOFS_INF_WANT_EXPIRE)
1568     return 0;
1569     if (d_mountpoint(dentry))
1570     return 0;
1571     diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
1572     index 65f30b3b04f9..a7e18dbadf74 100644
1573     --- a/fs/btrfs/ioctl.c
1574     +++ b/fs/btrfs/ioctl.c
1575     @@ -1619,6 +1619,9 @@ static noinline int btrfs_ioctl_snap_create_transid(struct file *file,
1576     int namelen;
1577     int ret = 0;
1578    
1579     + if (!S_ISDIR(file_inode(file)->i_mode))
1580     + return -ENOTDIR;
1581     +
1582     ret = mnt_want_write_file(file);
1583     if (ret)
1584     goto out;
1585     @@ -1676,6 +1679,9 @@ static noinline int btrfs_ioctl_snap_create(struct file *file,
1586     struct btrfs_ioctl_vol_args *vol_args;
1587     int ret;
1588    
1589     + if (!S_ISDIR(file_inode(file)->i_mode))
1590     + return -ENOTDIR;
1591     +
1592     vol_args = memdup_user(arg, sizeof(*vol_args));
1593     if (IS_ERR(vol_args))
1594     return PTR_ERR(vol_args);
1595     @@ -1699,6 +1705,9 @@ static noinline int btrfs_ioctl_snap_create_v2(struct file *file,
1596     bool readonly = false;
1597     struct btrfs_qgroup_inherit *inherit = NULL;
1598    
1599     + if (!S_ISDIR(file_inode(file)->i_mode))
1600     + return -ENOTDIR;
1601     +
1602     vol_args = memdup_user(arg, sizeof(*vol_args));
1603     if (IS_ERR(vol_args))
1604     return PTR_ERR(vol_args);
1605     @@ -2345,6 +2354,9 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file,
1606     int ret;
1607     int err = 0;
1608    
1609     + if (!S_ISDIR(dir->i_mode))
1610     + return -ENOTDIR;
1611     +
1612     vol_args = memdup_user(arg, sizeof(*vol_args));
1613     if (IS_ERR(vol_args))
1614     return PTR_ERR(vol_args);
1615     diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c
1616     index 5a7b3229b956..f34d6f5a5aca 100644
1617     --- a/fs/hostfs/hostfs_kern.c
1618     +++ b/fs/hostfs/hostfs_kern.c
1619     @@ -959,10 +959,11 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)
1620    
1621     if (S_ISLNK(root_inode->i_mode)) {
1622     char *name = follow_link(host_root_path);
1623     - if (IS_ERR(name))
1624     + if (IS_ERR(name)) {
1625     err = PTR_ERR(name);
1626     - else
1627     - err = read_name(root_inode, name);
1628     + goto out_put;
1629     + }
1630     + err = read_name(root_inode, name);
1631     kfree(name);
1632     if (err)
1633     goto out_put;
1634     diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c
1635     index d2f97ecca6a5..e0e5f7c3c99f 100644
1636     --- a/fs/notify/fanotify/fanotify.c
1637     +++ b/fs/notify/fanotify/fanotify.c
1638     @@ -67,18 +67,7 @@ static int fanotify_get_response(struct fsnotify_group *group,
1639    
1640     pr_debug("%s: group=%p event=%p\n", __func__, group, event);
1641    
1642     - wait_event(group->fanotify_data.access_waitq, event->response ||
1643     - atomic_read(&group->fanotify_data.bypass_perm));
1644     -
1645     - if (!event->response) { /* bypass_perm set */
1646     - /*
1647     - * Event was canceled because group is being destroyed. Remove
1648     - * it from group's event list because we are responsible for
1649     - * freeing the permission event.
1650     - */
1651     - fsnotify_remove_event(group, &event->fae.fse);
1652     - return 0;
1653     - }
1654     + wait_event(group->fanotify_data.access_waitq, event->response);
1655    
1656     /* userspace responded, convert to something usable */
1657     switch (event->response) {
1658     diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c
1659     index 8e8e6bcd1d43..a64313868d3a 100644
1660     --- a/fs/notify/fanotify/fanotify_user.c
1661     +++ b/fs/notify/fanotify/fanotify_user.c
1662     @@ -358,16 +358,20 @@ static int fanotify_release(struct inode *ignored, struct file *file)
1663    
1664     #ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS
1665     struct fanotify_perm_event_info *event, *next;
1666     + struct fsnotify_event *fsn_event;
1667    
1668     /*
1669     - * There may be still new events arriving in the notification queue
1670     - * but since userspace cannot use fanotify fd anymore, no event can
1671     - * enter or leave access_list by now.
1672     + * Stop new events from arriving in the notification queue. since
1673     + * userspace cannot use fanotify fd anymore, no event can enter or
1674     + * leave access_list by now either.
1675     */
1676     - spin_lock(&group->fanotify_data.access_lock);
1677     -
1678     - atomic_inc(&group->fanotify_data.bypass_perm);
1679     + fsnotify_group_stop_queueing(group);
1680    
1681     + /*
1682     + * Process all permission events on access_list and notification queue
1683     + * and simulate reply from userspace.
1684     + */
1685     + spin_lock(&group->fanotify_data.access_lock);
1686     list_for_each_entry_safe(event, next, &group->fanotify_data.access_list,
1687     fae.fse.list) {
1688     pr_debug("%s: found group=%p event=%p\n", __func__, group,
1689     @@ -379,12 +383,21 @@ static int fanotify_release(struct inode *ignored, struct file *file)
1690     spin_unlock(&group->fanotify_data.access_lock);
1691    
1692     /*
1693     - * Since bypass_perm is set, newly queued events will not wait for
1694     - * access response. Wake up the already sleeping ones now.
1695     - * synchronize_srcu() in fsnotify_destroy_group() will wait for all
1696     - * processes sleeping in fanotify_handle_event() waiting for access
1697     - * response and thus also for all permission events to be freed.
1698     + * Destroy all non-permission events. For permission events just
1699     + * dequeue them and set the response. They will be freed once the
1700     + * response is consumed and fanotify_get_response() returns.
1701     */
1702     + mutex_lock(&group->notification_mutex);
1703     + while (!fsnotify_notify_queue_is_empty(group)) {
1704     + fsn_event = fsnotify_remove_first_event(group);
1705     + if (!(fsn_event->mask & FAN_ALL_PERM_EVENTS))
1706     + fsnotify_destroy_event(group, fsn_event);
1707     + else
1708     + FANOTIFY_PE(fsn_event)->response = FAN_ALLOW;
1709     + }
1710     + mutex_unlock(&group->notification_mutex);
1711     +
1712     + /* Response for all permission events it set, wakeup waiters */
1713     wake_up(&group->fanotify_data.access_waitq);
1714     #endif
1715    
1716     @@ -755,7 +768,6 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
1717     spin_lock_init(&group->fanotify_data.access_lock);
1718     init_waitqueue_head(&group->fanotify_data.access_waitq);
1719     INIT_LIST_HEAD(&group->fanotify_data.access_list);
1720     - atomic_set(&group->fanotify_data.bypass_perm, 0);
1721     #endif
1722     switch (flags & FAN_ALL_CLASS_BITS) {
1723     case FAN_CLASS_NOTIF:
1724     diff --git a/fs/notify/group.c b/fs/notify/group.c
1725     index d16b62cb2854..18eb30c6bd8f 100644
1726     --- a/fs/notify/group.c
1727     +++ b/fs/notify/group.c
1728     @@ -40,6 +40,17 @@ static void fsnotify_final_destroy_group(struct fsnotify_group *group)
1729     }
1730    
1731     /*
1732     + * Stop queueing new events for this group. Once this function returns
1733     + * fsnotify_add_event() will not add any new events to the group's queue.
1734     + */
1735     +void fsnotify_group_stop_queueing(struct fsnotify_group *group)
1736     +{
1737     + mutex_lock(&group->notification_mutex);
1738     + group->shutdown = true;
1739     + mutex_unlock(&group->notification_mutex);
1740     +}
1741     +
1742     +/*
1743     * Trying to get rid of a group. Remove all marks, flush all events and release
1744     * the group reference.
1745     * Note that another thread calling fsnotify_clear_marks_by_group() may still
1746     @@ -47,6 +58,14 @@ static void fsnotify_final_destroy_group(struct fsnotify_group *group)
1747     */
1748     void fsnotify_destroy_group(struct fsnotify_group *group)
1749     {
1750     + /*
1751     + * Stop queueing new events. The code below is careful enough to not
1752     + * require this but fanotify needs to stop queuing events even before
1753     + * fsnotify_destroy_group() is called and this makes the other callers
1754     + * of fsnotify_destroy_group() to see the same behavior.
1755     + */
1756     + fsnotify_group_stop_queueing(group);
1757     +
1758     /* clear all inode marks for this group */
1759     fsnotify_clear_marks_by_group(group);
1760    
1761     diff --git a/fs/notify/notification.c b/fs/notify/notification.c
1762     index a95d8e037aeb..e455e83ceeeb 100644
1763     --- a/fs/notify/notification.c
1764     +++ b/fs/notify/notification.c
1765     @@ -82,7 +82,8 @@ void fsnotify_destroy_event(struct fsnotify_group *group,
1766     * Add an event to the group notification queue. The group can later pull this
1767     * event off the queue to deal with. The function returns 0 if the event was
1768     * added to the queue, 1 if the event was merged with some other queued event,
1769     - * 2 if the queue of events has overflown.
1770     + * 2 if the event was not queued - either the queue of events has overflown
1771     + * or the group is shutting down.
1772     */
1773     int fsnotify_add_event(struct fsnotify_group *group,
1774     struct fsnotify_event *event,
1775     @@ -96,6 +97,11 @@ int fsnotify_add_event(struct fsnotify_group *group,
1776    
1777     mutex_lock(&group->notification_mutex);
1778    
1779     + if (group->shutdown) {
1780     + mutex_unlock(&group->notification_mutex);
1781     + return 2;
1782     + }
1783     +
1784     if (group->q_len >= group->max_events) {
1785     ret = 2;
1786     /* Queue overflow event only if it isn't already queued */
1787     @@ -126,21 +132,6 @@ queue:
1788     }
1789    
1790     /*
1791     - * Remove @event from group's notification queue. It is the responsibility of
1792     - * the caller to destroy the event.
1793     - */
1794     -void fsnotify_remove_event(struct fsnotify_group *group,
1795     - struct fsnotify_event *event)
1796     -{
1797     - mutex_lock(&group->notification_mutex);
1798     - if (!list_empty(&event->list)) {
1799     - list_del_init(&event->list);
1800     - group->q_len--;
1801     - }
1802     - mutex_unlock(&group->notification_mutex);
1803     -}
1804     -
1805     -/*
1806     * Remove and return the first event from the notification list. It is the
1807     * responsibility of the caller to destroy the obtained event
1808     */
1809     diff --git a/fs/ocfs2/dlm/dlmconvert.c b/fs/ocfs2/dlm/dlmconvert.c
1810     index f90931335c6b..2e11658676eb 100644
1811     --- a/fs/ocfs2/dlm/dlmconvert.c
1812     +++ b/fs/ocfs2/dlm/dlmconvert.c
1813     @@ -262,7 +262,6 @@ enum dlm_status dlmconvert_remote(struct dlm_ctxt *dlm,
1814     struct dlm_lock *lock, int flags, int type)
1815     {
1816     enum dlm_status status;
1817     - u8 old_owner = res->owner;
1818    
1819     mlog(0, "type=%d, convert_type=%d, busy=%d\n", lock->ml.type,
1820     lock->ml.convert_type, res->state & DLM_LOCK_RES_IN_PROGRESS);
1821     @@ -329,7 +328,6 @@ enum dlm_status dlmconvert_remote(struct dlm_ctxt *dlm,
1822    
1823     spin_lock(&res->spinlock);
1824     res->state &= ~DLM_LOCK_RES_IN_PROGRESS;
1825     - lock->convert_pending = 0;
1826     /* if it failed, move it back to granted queue.
1827     * if master returns DLM_NORMAL and then down before sending ast,
1828     * it may have already been moved to granted queue, reset to
1829     @@ -338,12 +336,14 @@ enum dlm_status dlmconvert_remote(struct dlm_ctxt *dlm,
1830     if (status != DLM_NOTQUEUED)
1831     dlm_error(status);
1832     dlm_revert_pending_convert(res, lock);
1833     - } else if ((res->state & DLM_LOCK_RES_RECOVERING) ||
1834     - (old_owner != res->owner)) {
1835     - mlog(0, "res %.*s is in recovering or has been recovered.\n",
1836     - res->lockname.len, res->lockname.name);
1837     + } else if (!lock->convert_pending) {
1838     + mlog(0, "%s: res %.*s, owner died and lock has been moved back "
1839     + "to granted list, retry convert.\n",
1840     + dlm->name, res->lockname.len, res->lockname.name);
1841     status = DLM_RECOVERING;
1842     }
1843     +
1844     + lock->convert_pending = 0;
1845     bail:
1846     spin_unlock(&res->spinlock);
1847    
1848     diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
1849     index 77d30cbd944d..56dd3957cc91 100644
1850     --- a/fs/ocfs2/file.c
1851     +++ b/fs/ocfs2/file.c
1852     @@ -1536,7 +1536,8 @@ static int ocfs2_zero_partial_clusters(struct inode *inode,
1853     u64 start, u64 len)
1854     {
1855     int ret = 0;
1856     - u64 tmpend, end = start + len;
1857     + u64 tmpend = 0;
1858     + u64 end = start + len;
1859     struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1860     unsigned int csize = osb->s_clustersize;
1861     handle_t *handle;
1862     @@ -1568,18 +1569,31 @@ static int ocfs2_zero_partial_clusters(struct inode *inode,
1863     }
1864    
1865     /*
1866     - * We want to get the byte offset of the end of the 1st cluster.
1867     + * If start is on a cluster boundary and end is somewhere in another
1868     + * cluster, we have not COWed the cluster starting at start, unless
1869     + * end is also within the same cluster. So, in this case, we skip this
1870     + * first call to ocfs2_zero_range_for_truncate() truncate and move on
1871     + * to the next one.
1872     */
1873     - tmpend = (u64)osb->s_clustersize + (start & ~(osb->s_clustersize - 1));
1874     - if (tmpend > end)
1875     - tmpend = end;
1876     + if ((start & (csize - 1)) != 0) {
1877     + /*
1878     + * We want to get the byte offset of the end of the 1st
1879     + * cluster.
1880     + */
1881     + tmpend = (u64)osb->s_clustersize +
1882     + (start & ~(osb->s_clustersize - 1));
1883     + if (tmpend > end)
1884     + tmpend = end;
1885    
1886     - trace_ocfs2_zero_partial_clusters_range1((unsigned long long)start,
1887     - (unsigned long long)tmpend);
1888     + trace_ocfs2_zero_partial_clusters_range1(
1889     + (unsigned long long)start,
1890     + (unsigned long long)tmpend);
1891    
1892     - ret = ocfs2_zero_range_for_truncate(inode, handle, start, tmpend);
1893     - if (ret)
1894     - mlog_errno(ret);
1895     + ret = ocfs2_zero_range_for_truncate(inode, handle, start,
1896     + tmpend);
1897     + if (ret)
1898     + mlog_errno(ret);
1899     + }
1900    
1901     if (tmpend < end) {
1902     /*
1903     diff --git a/fs/reiserfs/ibalance.c b/fs/reiserfs/ibalance.c
1904     index b751eea32e20..5db6f45b3fed 100644
1905     --- a/fs/reiserfs/ibalance.c
1906     +++ b/fs/reiserfs/ibalance.c
1907     @@ -1153,8 +1153,9 @@ int balance_internal(struct tree_balance *tb,
1908     insert_ptr);
1909     }
1910    
1911     - memcpy(new_insert_key_addr, &new_insert_key, KEY_SIZE);
1912     insert_ptr[0] = new_insert_ptr;
1913     + if (new_insert_ptr)
1914     + memcpy(new_insert_key_addr, &new_insert_key, KEY_SIZE);
1915    
1916     return order;
1917     }
1918     diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
1919     index 39090fc56f09..eb1b8c8acfcb 100644
1920     --- a/fs/xfs/xfs_buf.c
1921     +++ b/fs/xfs/xfs_buf.c
1922     @@ -1535,7 +1535,7 @@ xfs_wait_buftarg(
1923     * ensure here that all reference counts have been dropped before we
1924     * start walking the LRU list.
1925     */
1926     - drain_workqueue(btp->bt_mount->m_buf_workqueue);
1927     + flush_workqueue(btp->bt_mount->m_buf_workqueue);
1928    
1929     /* loop until there is nothing left on the lru list. */
1930     while (list_lru_count(&btp->bt_lru)) {
1931     diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h
1932     index 533c4408529a..850d8822e8ff 100644
1933     --- a/include/linux/fsnotify_backend.h
1934     +++ b/include/linux/fsnotify_backend.h
1935     @@ -148,6 +148,7 @@ struct fsnotify_group {
1936     #define FS_PRIO_1 1 /* fanotify content based access control */
1937     #define FS_PRIO_2 2 /* fanotify pre-content access */
1938     unsigned int priority;
1939     + bool shutdown; /* group is being shut down, don't queue more events */
1940    
1941     /* stores all fastpath marks assoc with this group so they can be cleaned on unregister */
1942     struct mutex mark_mutex; /* protect marks_list */
1943     @@ -179,7 +180,6 @@ struct fsnotify_group {
1944     spinlock_t access_lock;
1945     struct list_head access_list;
1946     wait_queue_head_t access_waitq;
1947     - atomic_t bypass_perm;
1948     #endif /* CONFIG_FANOTIFY_ACCESS_PERMISSIONS */
1949     int f_flags;
1950     unsigned int max_marks;
1951     @@ -308,6 +308,8 @@ extern struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *op
1952     extern void fsnotify_get_group(struct fsnotify_group *group);
1953     /* drop reference on a group from fsnotify_alloc_group */
1954     extern void fsnotify_put_group(struct fsnotify_group *group);
1955     +/* group destruction begins, stop queuing new events */
1956     +extern void fsnotify_group_stop_queueing(struct fsnotify_group *group);
1957     /* destroy group */
1958     extern void fsnotify_destroy_group(struct fsnotify_group *group);
1959     /* fasync handler function */
1960     @@ -320,8 +322,6 @@ extern int fsnotify_add_event(struct fsnotify_group *group,
1961     struct fsnotify_event *event,
1962     int (*merge)(struct list_head *,
1963     struct fsnotify_event *));
1964     -/* Remove passed event from groups notification queue */
1965     -extern void fsnotify_remove_event(struct fsnotify_group *group, struct fsnotify_event *event);
1966     /* true if the group notification queue is empty */
1967     extern bool fsnotify_notify_queue_is_empty(struct fsnotify_group *group);
1968     /* return, but do not dequeue the first event on the notification queue */
1969     diff --git a/include/linux/kernel.h b/include/linux/kernel.h
1970     index 924853d33a13..e571e592e53a 100644
1971     --- a/include/linux/kernel.h
1972     +++ b/include/linux/kernel.h
1973     @@ -202,26 +202,26 @@ extern int _cond_resched(void);
1974    
1975     /**
1976     * abs - return absolute value of an argument
1977     - * @x: the value. If it is unsigned type, it is converted to signed type first
1978     - * (s64, long or int depending on its size).
1979     + * @x: the value. If it is unsigned type, it is converted to signed type first.
1980     + * char is treated as if it was signed (regardless of whether it really is)
1981     + * but the macro's return type is preserved as char.
1982     *
1983     - * Return: an absolute value of x. If x is 64-bit, macro's return type is s64,
1984     - * otherwise it is signed long.
1985     + * Return: an absolute value of x.
1986     */
1987     -#define abs(x) __builtin_choose_expr(sizeof(x) == sizeof(s64), ({ \
1988     - s64 __x = (x); \
1989     - (__x < 0) ? -__x : __x; \
1990     - }), ({ \
1991     - long ret; \
1992     - if (sizeof(x) == sizeof(long)) { \
1993     - long __x = (x); \
1994     - ret = (__x < 0) ? -__x : __x; \
1995     - } else { \
1996     - int __x = (x); \
1997     - ret = (__x < 0) ? -__x : __x; \
1998     - } \
1999     - ret; \
2000     - }))
2001     +#define abs(x) __abs_choose_expr(x, long long, \
2002     + __abs_choose_expr(x, long, \
2003     + __abs_choose_expr(x, int, \
2004     + __abs_choose_expr(x, short, \
2005     + __abs_choose_expr(x, char, \
2006     + __builtin_choose_expr( \
2007     + __builtin_types_compatible_p(typeof(x), char), \
2008     + (char)({ signed char __x = (x); __x<0?-__x:__x; }), \
2009     + ((void)0)))))))
2010     +
2011     +#define __abs_choose_expr(x, type, other) __builtin_choose_expr( \
2012     + __builtin_types_compatible_p(typeof(x), signed type) || \
2013     + __builtin_types_compatible_p(typeof(x), unsigned type), \
2014     + ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
2015    
2016     /**
2017     * reciprocal_scale - "scale" a value into range [0, ep_ro)
2018     diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
2019     index b97d6823ef3c..4e9c75226f07 100644
2020     --- a/include/linux/netdevice.h
2021     +++ b/include/linux/netdevice.h
2022     @@ -3036,6 +3036,7 @@ static inline void napi_free_frags(struct napi_struct *napi)
2023     napi->skb = NULL;
2024     }
2025    
2026     +bool netdev_is_rx_handler_busy(struct net_device *dev);
2027     int netdev_rx_handler_register(struct net_device *dev,
2028     rx_handler_func_t *rx_handler,
2029     void *rx_handler_data);
2030     diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
2031     index 26eabf5ec718..fbfadba81c5a 100644
2032     --- a/include/linux/pagemap.h
2033     +++ b/include/linux/pagemap.h
2034     @@ -601,56 +601,56 @@ static inline int fault_in_pages_readable(const char __user *uaddr, int size)
2035     */
2036     static inline int fault_in_multipages_writeable(char __user *uaddr, int size)
2037     {
2038     - int ret = 0;
2039     char __user *end = uaddr + size - 1;
2040    
2041     if (unlikely(size == 0))
2042     - return ret;
2043     + return 0;
2044    
2045     + if (unlikely(uaddr > end))
2046     + return -EFAULT;
2047     /*
2048     * Writing zeroes into userspace here is OK, because we know that if
2049     * the zero gets there, we'll be overwriting it.
2050     */
2051     - while (uaddr <= end) {
2052     - ret = __put_user(0, uaddr);
2053     - if (ret != 0)
2054     - return ret;
2055     + do {
2056     + if (unlikely(__put_user(0, uaddr) != 0))
2057     + return -EFAULT;
2058     uaddr += PAGE_SIZE;
2059     - }
2060     + } while (uaddr <= end);
2061    
2062     /* Check whether the range spilled into the next page. */
2063     if (((unsigned long)uaddr & PAGE_MASK) ==
2064     ((unsigned long)end & PAGE_MASK))
2065     - ret = __put_user(0, end);
2066     + return __put_user(0, end);
2067    
2068     - return ret;
2069     + return 0;
2070     }
2071    
2072     static inline int fault_in_multipages_readable(const char __user *uaddr,
2073     int size)
2074     {
2075     volatile char c;
2076     - int ret = 0;
2077     const char __user *end = uaddr + size - 1;
2078    
2079     if (unlikely(size == 0))
2080     - return ret;
2081     + return 0;
2082    
2083     - while (uaddr <= end) {
2084     - ret = __get_user(c, uaddr);
2085     - if (ret != 0)
2086     - return ret;
2087     + if (unlikely(uaddr > end))
2088     + return -EFAULT;
2089     +
2090     + do {
2091     + if (unlikely(__get_user(c, uaddr) != 0))
2092     + return -EFAULT;
2093     uaddr += PAGE_SIZE;
2094     - }
2095     + } while (uaddr <= end);
2096    
2097     /* Check whether the range spilled into the next page. */
2098     if (((unsigned long)uaddr & PAGE_MASK) ==
2099     ((unsigned long)end & PAGE_MASK)) {
2100     - ret = __get_user(c, end);
2101     - (void)c;
2102     + return __get_user(c, end);
2103     }
2104    
2105     - return ret;
2106     + return 0;
2107     }
2108    
2109     int add_to_page_cache_locked(struct page *page, struct address_space *mapping,
2110     diff --git a/include/linux/smc91x.h b/include/linux/smc91x.h
2111     index 76199b75d584..e302c447e057 100644
2112     --- a/include/linux/smc91x.h
2113     +++ b/include/linux/smc91x.h
2114     @@ -1,6 +1,16 @@
2115     #ifndef __SMC91X_H__
2116     #define __SMC91X_H__
2117    
2118     +/*
2119     + * These bits define which access sizes a platform can support, rather
2120     + * than the maximal access size. So, if your platform can do 16-bit
2121     + * and 32-bit accesses to the SMC91x device, but not 8-bit, set both
2122     + * SMC91X_USE_16BIT and SMC91X_USE_32BIT.
2123     + *
2124     + * The SMC91x driver requires at least one of SMC91X_USE_8BIT or
2125     + * SMC91X_USE_16BIT to be supported - just setting SMC91X_USE_32BIT is
2126     + * an invalid configuration.
2127     + */
2128     #define SMC91X_USE_8BIT (1 << 0)
2129     #define SMC91X_USE_16BIT (1 << 1)
2130     #define SMC91X_USE_32BIT (1 << 2)
2131     diff --git a/include/net/af_unix.h b/include/net/af_unix.h
2132     index 9b4c418bebd8..fd60eccb59a6 100644
2133     --- a/include/net/af_unix.h
2134     +++ b/include/net/af_unix.h
2135     @@ -52,7 +52,7 @@ struct unix_sock {
2136     struct sock sk;
2137     struct unix_address *addr;
2138     struct path path;
2139     - struct mutex readlock;
2140     + struct mutex iolock, bindlock;
2141     struct sock *peer;
2142     struct list_head link;
2143     atomic_long_t inflight;
2144     diff --git a/include/net/tcp.h b/include/net/tcp.h
2145     index 414d822bc1db..9c3ab544d3a8 100644
2146     --- a/include/net/tcp.h
2147     +++ b/include/net/tcp.h
2148     @@ -1510,6 +1510,8 @@ static inline void tcp_check_send_head(struct sock *sk, struct sk_buff *skb_unli
2149     {
2150     if (sk->sk_send_head == skb_unlinked)
2151     sk->sk_send_head = NULL;
2152     + if (tcp_sk(sk)->highest_sack == skb_unlinked)
2153     + tcp_sk(sk)->highest_sack = NULL;
2154     }
2155    
2156     static inline void tcp_init_send_head(struct sock *sk)
2157     diff --git a/kernel/cpuset.c b/kernel/cpuset.c
2158     index e120bd983ad0..b9279a2844d8 100644
2159     --- a/kernel/cpuset.c
2160     +++ b/kernel/cpuset.c
2161     @@ -2079,7 +2079,7 @@ static void cpuset_bind(struct cgroup_subsys_state *root_css)
2162     * which could have been changed by cpuset just after it inherits the
2163     * state from the parent and before it sits on the cgroup's task list.
2164     */
2165     -void cpuset_fork(struct task_struct *task)
2166     +void cpuset_fork(struct task_struct *task, void *priv)
2167     {
2168     if (task_css_is_root(task, cpuset_cgrp_id))
2169     return;
2170     diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
2171     index b7dd5718836e..3124cebaec31 100644
2172     --- a/kernel/power/hibernate.c
2173     +++ b/kernel/power/hibernate.c
2174     @@ -299,12 +299,12 @@ static int create_image(int platform_mode)
2175     save_processor_state();
2176     trace_suspend_resume(TPS("machine_suspend"), PM_EVENT_HIBERNATE, true);
2177     error = swsusp_arch_suspend();
2178     + /* Restore control flow magically appears here */
2179     + restore_processor_state();
2180     trace_suspend_resume(TPS("machine_suspend"), PM_EVENT_HIBERNATE, false);
2181     if (error)
2182     printk(KERN_ERR "PM: Error %d creating hibernation image\n",
2183     error);
2184     - /* Restore control flow magically appears here */
2185     - restore_processor_state();
2186     if (!in_suspend)
2187     events_check_enabled = false;
2188    
2189     diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c
2190     index 3a970604308f..f155c62f1f2c 100644
2191     --- a/kernel/power/snapshot.c
2192     +++ b/kernel/power/snapshot.c
2193     @@ -765,9 +765,9 @@ static bool memory_bm_pfn_present(struct memory_bitmap *bm, unsigned long pfn)
2194     */
2195     static bool rtree_next_node(struct memory_bitmap *bm)
2196     {
2197     - bm->cur.node = list_entry(bm->cur.node->list.next,
2198     - struct rtree_node, list);
2199     - if (&bm->cur.node->list != &bm->cur.zone->leaves) {
2200     + if (!list_is_last(&bm->cur.node->list, &bm->cur.zone->leaves)) {
2201     + bm->cur.node = list_entry(bm->cur.node->list.next,
2202     + struct rtree_node, list);
2203     bm->cur.node_pfn += BM_BITS_PER_BLOCK;
2204     bm->cur.node_bit = 0;
2205     touch_softlockup_watchdog();
2206     @@ -775,9 +775,9 @@ static bool rtree_next_node(struct memory_bitmap *bm)
2207     }
2208    
2209     /* No more nodes, goto next zone */
2210     - bm->cur.zone = list_entry(bm->cur.zone->list.next,
2211     + if (!list_is_last(&bm->cur.zone->list, &bm->zones)) {
2212     + bm->cur.zone = list_entry(bm->cur.zone->list.next,
2213     struct mem_zone_bm_rtree, list);
2214     - if (&bm->cur.zone->list != &bm->zones) {
2215     bm->cur.node = list_entry(bm->cur.zone->leaves.next,
2216     struct rtree_node, list);
2217     bm->cur.node_pfn = 0;
2218     diff --git a/kernel/trace/Makefile b/kernel/trace/Makefile
2219     index 9b1044e936a6..05ea5167e6bb 100644
2220     --- a/kernel/trace/Makefile
2221     +++ b/kernel/trace/Makefile
2222     @@ -1,4 +1,8 @@
2223    
2224     +# We are fully aware of the dangers of __builtin_return_address()
2225     +FRAME_CFLAGS := $(call cc-disable-warning,frame-address)
2226     +KBUILD_CFLAGS += $(FRAME_CFLAGS)
2227     +
2228     # Do not instrument the tracer itself:
2229    
2230     ifdef CONFIG_FUNCTION_TRACER
2231     diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
2232     index 8305cbb2d5a2..059233abcfcf 100644
2233     --- a/kernel/trace/trace.c
2234     +++ b/kernel/trace/trace.c
2235     @@ -4727,19 +4727,20 @@ tracing_read_pipe(struct file *filp, char __user *ubuf,
2236     struct trace_iterator *iter = filp->private_data;
2237     ssize_t sret;
2238    
2239     - /* return any leftover data */
2240     - sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
2241     - if (sret != -EBUSY)
2242     - return sret;
2243     -
2244     - trace_seq_init(&iter->seq);
2245     -
2246     /*
2247     * Avoid more than one consumer on a single file descriptor
2248     * This is just a matter of traces coherency, the ring buffer itself
2249     * is protected.
2250     */
2251     mutex_lock(&iter->mutex);
2252     +
2253     + /* return any leftover data */
2254     + sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
2255     + if (sret != -EBUSY)
2256     + goto out;
2257     +
2258     + trace_seq_init(&iter->seq);
2259     +
2260     if (iter->trace->read) {
2261     sret = iter->trace->read(iter, filp, ubuf, cnt, ppos);
2262     if (sret)
2263     @@ -5766,9 +5767,6 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
2264     return -EBUSY;
2265     #endif
2266    
2267     - if (splice_grow_spd(pipe, &spd))
2268     - return -ENOMEM;
2269     -
2270     if (*ppos & (PAGE_SIZE - 1))
2271     return -EINVAL;
2272    
2273     @@ -5778,6 +5776,9 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
2274     len &= PAGE_MASK;
2275     }
2276    
2277     + if (splice_grow_spd(pipe, &spd))
2278     + return -ENOMEM;
2279     +
2280     again:
2281     trace_access_lock(iter->cpu_file);
2282     entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
2283     @@ -5835,19 +5836,21 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
2284     /* did we read anything? */
2285     if (!spd.nr_pages) {
2286     if (ret)
2287     - return ret;
2288     + goto out;
2289    
2290     + ret = -EAGAIN;
2291     if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK))
2292     - return -EAGAIN;
2293     + goto out;
2294    
2295     ret = wait_on_pipe(iter, true);
2296     if (ret)
2297     - return ret;
2298     + goto out;
2299    
2300     goto again;
2301     }
2302    
2303     ret = splice_to_pipe(pipe, &spd);
2304     +out:
2305     splice_shrink_spd(&spd);
2306    
2307     return ret;
2308     diff --git a/mm/vmscan.c b/mm/vmscan.c
2309     index 0c114e2b01d3..0838e9f02b11 100644
2310     --- a/mm/vmscan.c
2311     +++ b/mm/vmscan.c
2312     @@ -2159,23 +2159,6 @@ out:
2313     }
2314     }
2315    
2316     -#ifdef CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
2317     -static void init_tlb_ubc(void)
2318     -{
2319     - /*
2320     - * This deliberately does not clear the cpumask as it's expensive
2321     - * and unnecessary. If there happens to be data in there then the
2322     - * first SWAP_CLUSTER_MAX pages will send an unnecessary IPI and
2323     - * then will be cleared.
2324     - */
2325     - current->tlb_ubc.flush_required = false;
2326     -}
2327     -#else
2328     -static inline void init_tlb_ubc(void)
2329     -{
2330     -}
2331     -#endif /* CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH */
2332     -
2333     /*
2334     * This is a basic per-zone page freer. Used by both kswapd and direct reclaim.
2335     */
2336     @@ -2210,8 +2193,6 @@ static void shrink_lruvec(struct lruvec *lruvec, int swappiness,
2337     scan_adjusted = (global_reclaim(sc) && !current_is_kswapd() &&
2338     sc->priority == DEF_PRIORITY);
2339    
2340     - init_tlb_ubc();
2341     -
2342     blk_start_plug(&plug);
2343     while (nr[LRU_INACTIVE_ANON] || nr[LRU_ACTIVE_FILE] ||
2344     nr[LRU_INACTIVE_FILE]) {
2345     diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
2346     index 7173a685309a..9542e84a9455 100644
2347     --- a/net/bridge/br_multicast.c
2348     +++ b/net/bridge/br_multicast.c
2349     @@ -1113,7 +1113,7 @@ static int br_ip6_multicast_mld2_report(struct net_bridge *br,
2350     } else {
2351     err = br_ip6_multicast_add_group(br, port,
2352     &grec->grec_mca, vid);
2353     - if (!err)
2354     + if (err)
2355     break;
2356     }
2357     }
2358     diff --git a/net/caif/cfpkt_skbuff.c b/net/caif/cfpkt_skbuff.c
2359     index f6c3b2137eea..59ce1fcc220c 100644
2360     --- a/net/caif/cfpkt_skbuff.c
2361     +++ b/net/caif/cfpkt_skbuff.c
2362     @@ -286,7 +286,7 @@ int cfpkt_setlen(struct cfpkt *pkt, u16 len)
2363     else
2364     skb_trim(skb, len);
2365    
2366     - return cfpkt_getlen(pkt);
2367     + return cfpkt_getlen(pkt);
2368     }
2369    
2370     /* Need to expand SKB */
2371     diff --git a/net/core/dev.c b/net/core/dev.c
2372     index 9efbdb3ff78a..de4ed2b5a221 100644
2373     --- a/net/core/dev.c
2374     +++ b/net/core/dev.c
2375     @@ -3722,6 +3722,22 @@ static inline struct sk_buff *handle_ing(struct sk_buff *skb,
2376     }
2377    
2378     /**
2379     + * netdev_is_rx_handler_busy - check if receive handler is registered
2380     + * @dev: device to check
2381     + *
2382     + * Check if a receive handler is already registered for a given device.
2383     + * Return true if there one.
2384     + *
2385     + * The caller must hold the rtnl_mutex.
2386     + */
2387     +bool netdev_is_rx_handler_busy(struct net_device *dev)
2388     +{
2389     + ASSERT_RTNL();
2390     + return dev && rtnl_dereference(dev->rx_handler);
2391     +}
2392     +EXPORT_SYMBOL_GPL(netdev_is_rx_handler_busy);
2393     +
2394     +/**
2395     * netdev_rx_handler_register - register receive handler
2396     * @dev: device to register a handler for
2397     * @rx_handler: receive handler to register
2398     diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
2399     index 744e5936c10d..e5a3ff210fec 100644
2400     --- a/net/ipv4/fib_trie.c
2401     +++ b/net/ipv4/fib_trie.c
2402     @@ -2453,9 +2453,7 @@ struct fib_route_iter {
2403     static struct key_vector *fib_route_get_idx(struct fib_route_iter *iter,
2404     loff_t pos)
2405     {
2406     - struct fib_table *tb = iter->main_tb;
2407     struct key_vector *l, **tp = &iter->tnode;
2408     - struct trie *t;
2409     t_key key;
2410    
2411     /* use cache location of next-to-find key */
2412     @@ -2463,8 +2461,6 @@ static struct key_vector *fib_route_get_idx(struct fib_route_iter *iter,
2413     pos -= iter->pos;
2414     key = iter->key;
2415     } else {
2416     - t = (struct trie *)tb->tb_data;
2417     - iter->tnode = t->kv;
2418     iter->pos = 0;
2419     key = 0;
2420     }
2421     @@ -2505,12 +2501,12 @@ static void *fib_route_seq_start(struct seq_file *seq, loff_t *pos)
2422     return NULL;
2423    
2424     iter->main_tb = tb;
2425     + t = (struct trie *)tb->tb_data;
2426     + iter->tnode = t->kv;
2427    
2428     if (*pos != 0)
2429     return fib_route_get_idx(iter, *pos);
2430    
2431     - t = (struct trie *)tb->tb_data;
2432     - iter->tnode = t->kv;
2433     iter->pos = 0;
2434     iter->key = 0;
2435    
2436     diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
2437     index 4d8f0b698777..65036891e080 100644
2438     --- a/net/ipv4/ip_vti.c
2439     +++ b/net/ipv4/ip_vti.c
2440     @@ -540,6 +540,33 @@ static struct rtnl_link_ops vti_link_ops __read_mostly = {
2441     .get_link_net = ip_tunnel_get_link_net,
2442     };
2443    
2444     +static bool is_vti_tunnel(const struct net_device *dev)
2445     +{
2446     + return dev->netdev_ops == &vti_netdev_ops;
2447     +}
2448     +
2449     +static int vti_device_event(struct notifier_block *unused,
2450     + unsigned long event, void *ptr)
2451     +{
2452     + struct net_device *dev = netdev_notifier_info_to_dev(ptr);
2453     + struct ip_tunnel *tunnel = netdev_priv(dev);
2454     +
2455     + if (!is_vti_tunnel(dev))
2456     + return NOTIFY_DONE;
2457     +
2458     + switch (event) {
2459     + case NETDEV_DOWN:
2460     + if (!net_eq(tunnel->net, dev_net(dev)))
2461     + xfrm_garbage_collect(tunnel->net);
2462     + break;
2463     + }
2464     + return NOTIFY_DONE;
2465     +}
2466     +
2467     +static struct notifier_block vti_notifier_block __read_mostly = {
2468     + .notifier_call = vti_device_event,
2469     +};
2470     +
2471     static int __init vti_init(void)
2472     {
2473     const char *msg;
2474     @@ -547,6 +574,8 @@ static int __init vti_init(void)
2475    
2476     pr_info("IPv4 over IPsec tunneling driver\n");
2477    
2478     + register_netdevice_notifier(&vti_notifier_block);
2479     +
2480     msg = "tunnel device";
2481     err = register_pernet_device(&vti_net_ops);
2482     if (err < 0)
2483     @@ -579,6 +608,7 @@ xfrm_proto_ah_failed:
2484     xfrm_proto_esp_failed:
2485     unregister_pernet_device(&vti_net_ops);
2486     pernet_dev_failed:
2487     + unregister_netdevice_notifier(&vti_notifier_block);
2488     pr_err("vti init: failed to register %s\n", msg);
2489     return err;
2490     }
2491     @@ -590,6 +620,7 @@ static void __exit vti_fini(void)
2492     xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH);
2493     xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP);
2494     unregister_pernet_device(&vti_net_ops);
2495     + unregister_netdevice_notifier(&vti_notifier_block);
2496     }
2497    
2498     module_init(vti_init);
2499     diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
2500     index 048418b049d8..b5853cac3269 100644
2501     --- a/net/ipv4/tcp_ipv4.c
2502     +++ b/net/ipv4/tcp_ipv4.c
2503     @@ -808,8 +808,14 @@ static void tcp_v4_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb,
2504     u32 seq = (sk->sk_state == TCP_LISTEN) ? tcp_rsk(req)->snt_isn + 1 :
2505     tcp_sk(sk)->snd_nxt;
2506    
2507     + /* RFC 7323 2.3
2508     + * The window field (SEG.WND) of every outgoing segment, with the
2509     + * exception of <SYN> segments, MUST be right-shifted by
2510     + * Rcv.Wind.Shift bits:
2511     + */
2512     tcp_v4_send_ack(sock_net(sk), skb, seq,
2513     - tcp_rsk(req)->rcv_nxt, req->rsk_rcv_wnd,
2514     + tcp_rsk(req)->rcv_nxt,
2515     + req->rsk_rcv_wnd >> inet_rsk(req)->rcv_wscale,
2516     tcp_time_stamp,
2517     req->ts_recent,
2518     0,
2519     diff --git a/net/ipv4/tcp_yeah.c b/net/ipv4/tcp_yeah.c
2520     index 3e6a472e6b88..92ab5bc91592 100644
2521     --- a/net/ipv4/tcp_yeah.c
2522     +++ b/net/ipv4/tcp_yeah.c
2523     @@ -75,7 +75,7 @@ static void tcp_yeah_cong_avoid(struct sock *sk, u32 ack, u32 acked)
2524     if (!tcp_is_cwnd_limited(sk))
2525     return;
2526    
2527     - if (tp->snd_cwnd <= tp->snd_ssthresh)
2528     + if (tcp_in_slow_start(tp))
2529     tcp_slow_start(tp, acked);
2530    
2531     else if (!yeah->doing_reno_now) {
2532     diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c
2533     index 263a5164a6f5..3e55447b63a4 100644
2534     --- a/net/ipv6/ping.c
2535     +++ b/net/ipv6/ping.c
2536     @@ -150,8 +150,10 @@ int ping_v6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
2537     rt = (struct rt6_info *) dst;
2538    
2539     np = inet6_sk(sk);
2540     - if (!np)
2541     - return -EBADF;
2542     + if (!np) {
2543     + err = -EBADF;
2544     + goto dst_err_out;
2545     + }
2546    
2547     if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr))
2548     fl6.flowi6_oif = np->mcast_oif;
2549     @@ -186,6 +188,9 @@ int ping_v6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
2550     }
2551     release_sock(sk);
2552    
2553     +dst_err_out:
2554     + dst_release(dst);
2555     +
2556     if (err)
2557     return err;
2558    
2559     diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
2560     index 1a1cd3938fd0..2d81e2f33ef2 100644
2561     --- a/net/ipv6/tcp_ipv6.c
2562     +++ b/net/ipv6/tcp_ipv6.c
2563     @@ -932,9 +932,15 @@ static void tcp_v6_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb,
2564     /* sk->sk_state == TCP_LISTEN -> for regular TCP_SYN_RECV
2565     * sk->sk_state == TCP_SYN_RECV -> for Fast Open.
2566     */
2567     + /* RFC 7323 2.3
2568     + * The window field (SEG.WND) of every outgoing segment, with the
2569     + * exception of <SYN> segments, MUST be right-shifted by
2570     + * Rcv.Wind.Shift bits:
2571     + */
2572     tcp_v6_send_ack(sk, skb, (sk->sk_state == TCP_LISTEN) ?
2573     tcp_rsk(req)->snt_isn + 1 : tcp_sk(sk)->snd_nxt,
2574     - tcp_rsk(req)->rcv_nxt, req->rsk_rcv_wnd,
2575     + tcp_rsk(req)->rcv_nxt,
2576     + req->rsk_rcv_wnd >> inet_rsk(req)->rcv_wscale,
2577     tcp_time_stamp, req->ts_recent, sk->sk_bound_dev_if,
2578     tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->daddr),
2579     0, 0);
2580     diff --git a/net/irda/iriap.c b/net/irda/iriap.c
2581     index 4a7ae32afa09..1138eaf5c682 100644
2582     --- a/net/irda/iriap.c
2583     +++ b/net/irda/iriap.c
2584     @@ -185,8 +185,12 @@ struct iriap_cb *iriap_open(__u8 slsap_sel, int mode, void *priv,
2585    
2586     self->magic = IAS_MAGIC;
2587     self->mode = mode;
2588     - if (mode == IAS_CLIENT)
2589     - iriap_register_lsap(self, slsap_sel, mode);
2590     + if (mode == IAS_CLIENT) {
2591     + if (iriap_register_lsap(self, slsap_sel, mode)) {
2592     + kfree(self);
2593     + return NULL;
2594     + }
2595     + }
2596    
2597     self->confirm = callback;
2598     self->priv = priv;
2599     diff --git a/net/tipc/socket.c b/net/tipc/socket.c
2600     index 9b713e0ce00d..b26b7a127773 100644
2601     --- a/net/tipc/socket.c
2602     +++ b/net/tipc/socket.c
2603     @@ -2111,7 +2111,8 @@ restart:
2604     TIPC_CONN_MSG, SHORT_H_SIZE,
2605     0, dnode, onode, dport, oport,
2606     TIPC_CONN_SHUTDOWN);
2607     - tipc_node_xmit_skb(net, skb, dnode, tsk->portid);
2608     + if (skb)
2609     + tipc_node_xmit_skb(net, skb, dnode, tsk->portid);
2610     }
2611     tsk->connected = 0;
2612     sock->state = SS_DISCONNECTING;
2613     diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
2614     index 6579fd6e7459..824cc1e160bc 100644
2615     --- a/net/unix/af_unix.c
2616     +++ b/net/unix/af_unix.c
2617     @@ -661,11 +661,11 @@ static int unix_set_peek_off(struct sock *sk, int val)
2618     {
2619     struct unix_sock *u = unix_sk(sk);
2620    
2621     - if (mutex_lock_interruptible(&u->readlock))
2622     + if (mutex_lock_interruptible(&u->iolock))
2623     return -EINTR;
2624    
2625     sk->sk_peek_off = val;
2626     - mutex_unlock(&u->readlock);
2627     + mutex_unlock(&u->iolock);
2628    
2629     return 0;
2630     }
2631     @@ -778,7 +778,8 @@ static struct sock *unix_create1(struct net *net, struct socket *sock, int kern)
2632     spin_lock_init(&u->lock);
2633     atomic_long_set(&u->inflight, 0);
2634     INIT_LIST_HEAD(&u->link);
2635     - mutex_init(&u->readlock); /* single task reading lock */
2636     + mutex_init(&u->iolock); /* single task reading lock */
2637     + mutex_init(&u->bindlock); /* single task binding lock */
2638     init_waitqueue_head(&u->peer_wait);
2639     init_waitqueue_func_entry(&u->peer_wake, unix_dgram_peer_wake_relay);
2640     unix_insert_socket(unix_sockets_unbound(sk), sk);
2641     @@ -847,7 +848,7 @@ static int unix_autobind(struct socket *sock)
2642     int err;
2643     unsigned int retries = 0;
2644    
2645     - err = mutex_lock_interruptible(&u->readlock);
2646     + err = mutex_lock_interruptible(&u->bindlock);
2647     if (err)
2648     return err;
2649    
2650     @@ -894,7 +895,7 @@ retry:
2651     spin_unlock(&unix_table_lock);
2652     err = 0;
2653    
2654     -out: mutex_unlock(&u->readlock);
2655     +out: mutex_unlock(&u->bindlock);
2656     return err;
2657     }
2658    
2659     @@ -953,20 +954,32 @@ fail:
2660     return NULL;
2661     }
2662    
2663     -static int unix_mknod(struct dentry *dentry, struct path *path, umode_t mode,
2664     - struct path *res)
2665     +static int unix_mknod(const char *sun_path, umode_t mode, struct path *res)
2666     {
2667     - int err;
2668     + struct dentry *dentry;
2669     + struct path path;
2670     + int err = 0;
2671     + /*
2672     + * Get the parent directory, calculate the hash for last
2673     + * component.
2674     + */
2675     + dentry = kern_path_create(AT_FDCWD, sun_path, &path, 0);
2676     + err = PTR_ERR(dentry);
2677     + if (IS_ERR(dentry))
2678     + return err;
2679    
2680     - err = security_path_mknod(path, dentry, mode, 0);
2681     + /*
2682     + * All right, let's create it.
2683     + */
2684     + err = security_path_mknod(&path, dentry, mode, 0);
2685     if (!err) {
2686     - err = vfs_mknod(d_inode(path->dentry), dentry, mode, 0);
2687     + err = vfs_mknod(d_inode(path.dentry), dentry, mode, 0);
2688     if (!err) {
2689     - res->mnt = mntget(path->mnt);
2690     + res->mnt = mntget(path.mnt);
2691     res->dentry = dget(dentry);
2692     }
2693     }
2694     -
2695     + done_path_create(&path, dentry);
2696     return err;
2697     }
2698    
2699     @@ -977,12 +990,10 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
2700     struct unix_sock *u = unix_sk(sk);
2701     struct sockaddr_un *sunaddr = (struct sockaddr_un *)uaddr;
2702     char *sun_path = sunaddr->sun_path;
2703     - int err, name_err;
2704     + int err;
2705     unsigned int hash;
2706     struct unix_address *addr;
2707     struct hlist_head *list;
2708     - struct path path;
2709     - struct dentry *dentry;
2710    
2711     err = -EINVAL;
2712     if (sunaddr->sun_family != AF_UNIX)
2713     @@ -998,34 +1009,14 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
2714     goto out;
2715     addr_len = err;
2716    
2717     - name_err = 0;
2718     - dentry = NULL;
2719     - if (sun_path[0]) {
2720     - /* Get the parent directory, calculate the hash for last
2721     - * component.
2722     - */
2723     - dentry = kern_path_create(AT_FDCWD, sun_path, &path, 0);
2724     -
2725     - if (IS_ERR(dentry)) {
2726     - /* delay report until after 'already bound' check */
2727     - name_err = PTR_ERR(dentry);
2728     - dentry = NULL;
2729     - }
2730     - }
2731     -
2732     - err = mutex_lock_interruptible(&u->readlock);
2733     + err = mutex_lock_interruptible(&u->bindlock);
2734     if (err)
2735     - goto out_path;
2736     + goto out;
2737    
2738     err = -EINVAL;
2739     if (u->addr)
2740     goto out_up;
2741    
2742     - if (name_err) {
2743     - err = name_err == -EEXIST ? -EADDRINUSE : name_err;
2744     - goto out_up;
2745     - }
2746     -
2747     err = -ENOMEM;
2748     addr = kmalloc(sizeof(*addr)+addr_len, GFP_KERNEL);
2749     if (!addr)
2750     @@ -1036,11 +1027,11 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
2751     addr->hash = hash ^ sk->sk_type;
2752     atomic_set(&addr->refcnt, 1);
2753    
2754     - if (dentry) {
2755     - struct path u_path;
2756     + if (sun_path[0]) {
2757     + struct path path;
2758     umode_t mode = S_IFSOCK |
2759     (SOCK_INODE(sock)->i_mode & ~current_umask());
2760     - err = unix_mknod(dentry, &path, mode, &u_path);
2761     + err = unix_mknod(sun_path, mode, &path);
2762     if (err) {
2763     if (err == -EEXIST)
2764     err = -EADDRINUSE;
2765     @@ -1048,9 +1039,9 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
2766     goto out_up;
2767     }
2768     addr->hash = UNIX_HASH_SIZE;
2769     - hash = d_real_inode(dentry)->i_ino & (UNIX_HASH_SIZE - 1);
2770     + hash = d_real_inode(path.dentry)->i_ino & (UNIX_HASH_SIZE - 1);
2771     spin_lock(&unix_table_lock);
2772     - u->path = u_path;
2773     + u->path = path;
2774     list = &unix_socket_table[hash];
2775     } else {
2776     spin_lock(&unix_table_lock);
2777     @@ -1072,11 +1063,7 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
2778     out_unlock:
2779     spin_unlock(&unix_table_lock);
2780     out_up:
2781     - mutex_unlock(&u->readlock);
2782     -out_path:
2783     - if (dentry)
2784     - done_path_create(&path, dentry);
2785     -
2786     + mutex_unlock(&u->bindlock);
2787     out:
2788     return err;
2789     }
2790     @@ -1971,17 +1958,17 @@ static ssize_t unix_stream_sendpage(struct socket *socket, struct page *page,
2791     if (false) {
2792     alloc_skb:
2793     unix_state_unlock(other);
2794     - mutex_unlock(&unix_sk(other)->readlock);
2795     + mutex_unlock(&unix_sk(other)->iolock);
2796     newskb = sock_alloc_send_pskb(sk, 0, 0, flags & MSG_DONTWAIT,
2797     &err, 0);
2798     if (!newskb)
2799     goto err;
2800     }
2801    
2802     - /* we must acquire readlock as we modify already present
2803     + /* we must acquire iolock as we modify already present
2804     * skbs in the sk_receive_queue and mess with skb->len
2805     */
2806     - err = mutex_lock_interruptible(&unix_sk(other)->readlock);
2807     + err = mutex_lock_interruptible(&unix_sk(other)->iolock);
2808     if (err) {
2809     err = flags & MSG_DONTWAIT ? -EAGAIN : -ERESTARTSYS;
2810     goto err;
2811     @@ -2048,7 +2035,7 @@ alloc_skb:
2812     }
2813    
2814     unix_state_unlock(other);
2815     - mutex_unlock(&unix_sk(other)->readlock);
2816     + mutex_unlock(&unix_sk(other)->iolock);
2817    
2818     other->sk_data_ready(other);
2819     scm_destroy(&scm);
2820     @@ -2057,7 +2044,7 @@ alloc_skb:
2821     err_state_unlock:
2822     unix_state_unlock(other);
2823     err_unlock:
2824     - mutex_unlock(&unix_sk(other)->readlock);
2825     + mutex_unlock(&unix_sk(other)->iolock);
2826     err:
2827     kfree_skb(newskb);
2828     if (send_sigpipe && !(flags & MSG_NOSIGNAL))
2829     @@ -2122,7 +2109,7 @@ static int unix_dgram_recvmsg(struct socket *sock, struct msghdr *msg,
2830     if (flags&MSG_OOB)
2831     goto out;
2832    
2833     - err = mutex_lock_interruptible(&u->readlock);
2834     + err = mutex_lock_interruptible(&u->iolock);
2835     if (unlikely(err)) {
2836     /* recvmsg() in non blocking mode is supposed to return -EAGAIN
2837     * sk_rcvtimeo is not honored by mutex_lock_interruptible()
2838     @@ -2198,7 +2185,7 @@ static int unix_dgram_recvmsg(struct socket *sock, struct msghdr *msg,
2839     out_free:
2840     skb_free_datagram(sk, skb);
2841     out_unlock:
2842     - mutex_unlock(&u->readlock);
2843     + mutex_unlock(&u->iolock);
2844     out:
2845     return err;
2846     }
2847     @@ -2293,7 +2280,7 @@ static int unix_stream_read_generic(struct unix_stream_read_state *state)
2848     /* Lock the socket to prevent queue disordering
2849     * while sleeps in memcpy_tomsg
2850     */
2851     - mutex_lock(&u->readlock);
2852     + mutex_lock(&u->iolock);
2853    
2854     if (flags & MSG_PEEK)
2855     skip = sk_peek_offset(sk, flags);
2856     @@ -2334,7 +2321,7 @@ again:
2857     break;
2858     }
2859    
2860     - mutex_unlock(&u->readlock);
2861     + mutex_unlock(&u->iolock);
2862    
2863     timeo = unix_stream_data_wait(sk, timeo, last,
2864     last_len);
2865     @@ -2345,7 +2332,7 @@ again:
2866     goto out;
2867     }
2868    
2869     - mutex_lock(&u->readlock);
2870     + mutex_lock(&u->iolock);
2871     continue;
2872     unlock:
2873     unix_state_unlock(sk);
2874     @@ -2448,7 +2435,7 @@ unlock:
2875     }
2876     } while (size);
2877    
2878     - mutex_unlock(&u->readlock);
2879     + mutex_unlock(&u->iolock);
2880     if (state->msg)
2881     scm_recv(sock, state->msg, &scm, flags);
2882     else
2883     @@ -2489,9 +2476,9 @@ static ssize_t skb_unix_socket_splice(struct sock *sk,
2884     int ret;
2885     struct unix_sock *u = unix_sk(sk);
2886    
2887     - mutex_unlock(&u->readlock);
2888     + mutex_unlock(&u->iolock);
2889     ret = splice_to_pipe(pipe, spd);
2890     - mutex_lock(&u->readlock);
2891     + mutex_lock(&u->iolock);
2892    
2893     return ret;
2894     }
2895     diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
2896     index 5d89f13a98db..bf65f31bd55e 100644
2897     --- a/net/wireless/nl80211.c
2898     +++ b/net/wireless/nl80211.c
2899     @@ -6628,7 +6628,7 @@ static int nl80211_channel_switch(struct sk_buff *skb, struct genl_info *info)
2900    
2901     params.n_counter_offsets_presp = len / sizeof(u16);
2902     if (rdev->wiphy.max_num_csa_counters &&
2903     - (params.n_counter_offsets_beacon >
2904     + (params.n_counter_offsets_presp >
2905     rdev->wiphy.max_num_csa_counters))
2906     return -EINVAL;
2907