Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.9/0280-4.9.181-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3357 - (hide annotations) (download)
Tue Jun 18 09:42:10 2019 UTC (4 years, 11 months ago) by niro
File size: 125350 byte(s)
-linux-4.9.181
1 niro 3357 diff --git a/Documentation/conf.py b/Documentation/conf.py
2     index d769cd89a9f7..da7b54388eff 100644
3     --- a/Documentation/conf.py
4     +++ b/Documentation/conf.py
5     @@ -37,7 +37,7 @@ from load_config import loadConfig
6     extensions = ['kernel-doc', 'rstFlatTable', 'kernel_include', 'cdomain']
7    
8     # The name of the math extension changed on Sphinx 1.4
9     -if major == 1 and minor > 3:
10     +if (major == 1 and minor > 3) or (major > 1):
11     extensions.append("sphinx.ext.imgmath")
12     else:
13     extensions.append("sphinx.ext.pngmath")
14     diff --git a/Makefile b/Makefile
15     index 0b996e9d2c5f..584af2e57735 100644
16     --- a/Makefile
17     +++ b/Makefile
18     @@ -1,6 +1,6 @@
19     VERSION = 4
20     PATCHLEVEL = 9
21     -SUBLEVEL = 180
22     +SUBLEVEL = 181
23     EXTRAVERSION =
24     NAME = Roaring Lionus
25    
26     diff --git a/arch/mips/ath79/setup.c b/arch/mips/ath79/setup.c
27     index c7c31e214813..26a058d58d37 100644
28     --- a/arch/mips/ath79/setup.c
29     +++ b/arch/mips/ath79/setup.c
30     @@ -183,6 +183,12 @@ const char *get_system_type(void)
31     return ath79_sys_type;
32     }
33    
34     +int get_c0_perfcount_int(void)
35     +{
36     + return ATH79_MISC_IRQ(5);
37     +}
38     +EXPORT_SYMBOL_GPL(get_c0_perfcount_int);
39     +
40     unsigned int get_c0_compare_int(void)
41     {
42     return CP0_LEGACY_COMPARE_IRQ;
43     diff --git a/arch/mips/pistachio/Platform b/arch/mips/pistachio/Platform
44     index d80cd612df1f..c3592b374ad2 100644
45     --- a/arch/mips/pistachio/Platform
46     +++ b/arch/mips/pistachio/Platform
47     @@ -6,3 +6,4 @@ cflags-$(CONFIG_MACH_PISTACHIO) += \
48     -I$(srctree)/arch/mips/include/asm/mach-pistachio
49     load-$(CONFIG_MACH_PISTACHIO) += 0xffffffff80400000
50     zload-$(CONFIG_MACH_PISTACHIO) += 0xffffffff81000000
51     +all-$(CONFIG_MACH_PISTACHIO) := uImage.gz
52     diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
53     index 771edffa2d40..ba49ae6625f1 100644
54     --- a/arch/powerpc/perf/core-book3s.c
55     +++ b/arch/powerpc/perf/core-book3s.c
56     @@ -1800,6 +1800,7 @@ static int power_pmu_event_init(struct perf_event *event)
57     int n;
58     int err;
59     struct cpu_hw_events *cpuhw;
60     + u64 bhrb_filter;
61    
62     if (!ppmu)
63     return -ENOENT;
64     @@ -1896,13 +1897,14 @@ static int power_pmu_event_init(struct perf_event *event)
65     err = power_check_constraints(cpuhw, events, cflags, n + 1);
66    
67     if (has_branch_stack(event)) {
68     - cpuhw->bhrb_filter = ppmu->bhrb_filter_map(
69     + bhrb_filter = ppmu->bhrb_filter_map(
70     event->attr.branch_sample_type);
71    
72     - if (cpuhw->bhrb_filter == -1) {
73     + if (bhrb_filter == -1) {
74     put_cpu_var(cpu_hw_events);
75     return -EOPNOTSUPP;
76     }
77     + cpuhw->bhrb_filter = bhrb_filter;
78     }
79    
80     put_cpu_var(cpu_hw_events);
81     diff --git a/arch/powerpc/perf/power8-pmu.c b/arch/powerpc/perf/power8-pmu.c
82     index ab830d106ec5..5fbd9bdefa4e 100644
83     --- a/arch/powerpc/perf/power8-pmu.c
84     +++ b/arch/powerpc/perf/power8-pmu.c
85     @@ -29,6 +29,7 @@ enum {
86     #define POWER8_MMCRA_IFM1 0x0000000040000000UL
87     #define POWER8_MMCRA_IFM2 0x0000000080000000UL
88     #define POWER8_MMCRA_IFM3 0x00000000C0000000UL
89     +#define POWER8_MMCRA_BHRB_MASK 0x00000000C0000000UL
90    
91     /* Table of alternatives, sorted by column 0 */
92     static const unsigned int event_alternatives[][MAX_ALT] = {
93     @@ -262,6 +263,8 @@ static u64 power8_bhrb_filter_map(u64 branch_sample_type)
94    
95     static void power8_config_bhrb(u64 pmu_bhrb_filter)
96     {
97     + pmu_bhrb_filter &= POWER8_MMCRA_BHRB_MASK;
98     +
99     /* Enable BHRB filter in PMU */
100     mtspr(SPRN_MMCRA, (mfspr(SPRN_MMCRA) | pmu_bhrb_filter));
101     }
102     diff --git a/arch/powerpc/perf/power9-pmu.c b/arch/powerpc/perf/power9-pmu.c
103     index 9abcd8f65504..c396d5e5098c 100644
104     --- a/arch/powerpc/perf/power9-pmu.c
105     +++ b/arch/powerpc/perf/power9-pmu.c
106     @@ -30,6 +30,7 @@ enum {
107     #define POWER9_MMCRA_IFM1 0x0000000040000000UL
108     #define POWER9_MMCRA_IFM2 0x0000000080000000UL
109     #define POWER9_MMCRA_IFM3 0x00000000C0000000UL
110     +#define POWER9_MMCRA_BHRB_MASK 0x00000000C0000000UL
111    
112     GENERIC_EVENT_ATTR(cpu-cycles, PM_CYC);
113     GENERIC_EVENT_ATTR(stalled-cycles-frontend, PM_ICT_NOSLOT_CYC);
114     @@ -177,6 +178,8 @@ static u64 power9_bhrb_filter_map(u64 branch_sample_type)
115    
116     static void power9_config_bhrb(u64 pmu_bhrb_filter)
117     {
118     + pmu_bhrb_filter &= POWER9_MMCRA_BHRB_MASK;
119     +
120     /* Enable BHRB filter in PMU */
121     mtspr(SPRN_MMCRA, (mfspr(SPRN_MMCRA) | pmu_bhrb_filter));
122     }
123     diff --git a/arch/sparc/mm/ultra.S b/arch/sparc/mm/ultra.S
124     index fcf4d27a38fb..e09f7b440b8c 100644
125     --- a/arch/sparc/mm/ultra.S
126     +++ b/arch/sparc/mm/ultra.S
127     @@ -586,7 +586,7 @@ xcall_flush_tlb_kernel_range: /* 44 insns */
128     sub %g7, %g1, %g3
129     srlx %g3, 18, %g2
130     brnz,pn %g2, 2f
131     - add %g2, 1, %g2
132     + sethi %hi(PAGE_SIZE), %g2
133     sub %g3, %g2, %g3
134     or %g1, 0x20, %g1 ! Nucleus
135     1: stxa %g0, [%g1 + %g3] ASI_DMMU_DEMAP
136     @@ -750,7 +750,7 @@ __cheetah_xcall_flush_tlb_kernel_range: /* 44 insns */
137     sub %g7, %g1, %g3
138     srlx %g3, 18, %g2
139     brnz,pn %g2, 2f
140     - add %g2, 1, %g2
141     + sethi %hi(PAGE_SIZE), %g2
142     sub %g3, %g2, %g3
143     or %g1, 0x20, %g1 ! Nucleus
144     1: stxa %g0, [%g1 + %g3] ASI_DMMU_DEMAP
145     diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
146     index 51b772f9d886..55f04875293f 100644
147     --- a/arch/x86/kernel/vmlinux.lds.S
148     +++ b/arch/x86/kernel/vmlinux.lds.S
149     @@ -111,10 +111,10 @@ SECTIONS
150     *(.text.__x86.indirect_thunk)
151     __indirect_thunk_end = .;
152     #endif
153     - } :text = 0x9090
154    
155     - /* End of text section */
156     - _etext = .;
157     + /* End of text section */
158     + _etext = .;
159     + } :text = 0x9090
160    
161     NOTES :text :note
162    
163     diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c
164     index 054e27671df9..29dc59baf0c2 100644
165     --- a/arch/x86/power/cpu.c
166     +++ b/arch/x86/power/cpu.c
167     @@ -292,7 +292,17 @@ int hibernate_resume_nonboot_cpu_disable(void)
168     * address in its instruction pointer may not be possible to resolve
169     * any more at that point (the page tables used by it previously may
170     * have been overwritten by hibernate image data).
171     + *
172     + * First, make sure that we wake up all the potentially disabled SMT
173     + * threads which have been initially brought up and then put into
174     + * mwait/cpuidle sleep.
175     + * Those will be put to proper (not interfering with hibernation
176     + * resume) sleep afterwards, and the resumed kernel will decide itself
177     + * what to do with them.
178     */
179     + ret = cpuhp_smt_enable();
180     + if (ret)
181     + return ret;
182     smp_ops.play_dead = resume_play_dead;
183     ret = disable_nonboot_cpus();
184     smp_ops.play_dead = play_dead;
185     diff --git a/arch/x86/power/hibernate_64.c b/arch/x86/power/hibernate_64.c
186     index fef485b789ca..6120046bb7dd 100644
187     --- a/arch/x86/power/hibernate_64.c
188     +++ b/arch/x86/power/hibernate_64.c
189     @@ -11,6 +11,7 @@
190     #include <linux/gfp.h>
191     #include <linux/smp.h>
192     #include <linux/suspend.h>
193     +#include <linux/cpu.h>
194    
195     #include <asm/init.h>
196     #include <asm/proto.h>
197     @@ -218,3 +219,35 @@ int arch_hibernation_header_restore(void *addr)
198     restore_cr3 = rdr->cr3;
199     return (rdr->magic == RESTORE_MAGIC) ? 0 : -EINVAL;
200     }
201     +
202     +int arch_resume_nosmt(void)
203     +{
204     + int ret = 0;
205     + /*
206     + * We reached this while coming out of hibernation. This means
207     + * that SMT siblings are sleeping in hlt, as mwait is not safe
208     + * against control transition during resume (see comment in
209     + * hibernate_resume_nonboot_cpu_disable()).
210     + *
211     + * If the resumed kernel has SMT disabled, we have to take all the
212     + * SMT siblings out of hlt, and offline them again so that they
213     + * end up in mwait proper.
214     + *
215     + * Called with hotplug disabled.
216     + */
217     + cpu_hotplug_enable();
218     + if (cpu_smt_control == CPU_SMT_DISABLED ||
219     + cpu_smt_control == CPU_SMT_FORCE_DISABLED) {
220     + enum cpuhp_smt_control old = cpu_smt_control;
221     +
222     + ret = cpuhp_smt_enable();
223     + if (ret)
224     + goto out;
225     + ret = cpuhp_smt_disable(old);
226     + if (ret)
227     + goto out;
228     + }
229     +out:
230     + cpu_hotplug_disable();
231     + return ret;
232     +}
233     diff --git a/drivers/android/binder.c b/drivers/android/binder.c
234     index 80499f421a29..29632a6dd1c6 100644
235     --- a/drivers/android/binder.c
236     +++ b/drivers/android/binder.c
237     @@ -488,7 +488,7 @@ static void binder_insert_free_buffer(struct binder_proc *proc,
238     new_buffer_size = binder_buffer_size(proc, new_buffer);
239    
240     binder_debug(BINDER_DEBUG_BUFFER_ALLOC,
241     - "%d: add free buffer, size %zd, at %p\n",
242     + "%d: add free buffer, size %zd, at %pK\n",
243     proc->pid, new_buffer_size, new_buffer);
244    
245     while (*p) {
246     @@ -566,7 +566,7 @@ static int binder_update_page_range(struct binder_proc *proc, int allocate,
247     struct mm_struct *mm;
248    
249     binder_debug(BINDER_DEBUG_BUFFER_ALLOC,
250     - "%d: %s pages %p-%p\n", proc->pid,
251     + "%d: %s pages %pK-%pK\n", proc->pid,
252     allocate ? "allocate" : "free", start, end);
253    
254     if (end <= start)
255     @@ -606,7 +606,7 @@ static int binder_update_page_range(struct binder_proc *proc, int allocate,
256     BUG_ON(*page);
257     *page = alloc_page(GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO);
258     if (*page == NULL) {
259     - pr_err("%d: binder_alloc_buf failed for page at %p\n",
260     + pr_err("%d: binder_alloc_buf failed for page at %pK\n",
261     proc->pid, page_addr);
262     goto err_alloc_page_failed;
263     }
264     @@ -615,7 +615,7 @@ static int binder_update_page_range(struct binder_proc *proc, int allocate,
265     flush_cache_vmap((unsigned long)page_addr,
266     (unsigned long)page_addr + PAGE_SIZE);
267     if (ret != 1) {
268     - pr_err("%d: binder_alloc_buf failed to map page at %p in kernel\n",
269     + pr_err("%d: binder_alloc_buf failed to map page at %pK in kernel\n",
270     proc->pid, page_addr);
271     goto err_map_kernel_failed;
272     }
273     @@ -719,7 +719,7 @@ static struct binder_buffer *binder_alloc_buf(struct binder_proc *proc,
274     }
275    
276     binder_debug(BINDER_DEBUG_BUFFER_ALLOC,
277     - "%d: binder_alloc_buf size %zd got buffer %p size %zd\n",
278     + "%d: binder_alloc_buf size %zd got buffer %pK size %zd\n",
279     proc->pid, size, buffer, buffer_size);
280    
281     has_page_addr =
282     @@ -749,7 +749,7 @@ static struct binder_buffer *binder_alloc_buf(struct binder_proc *proc,
283     binder_insert_free_buffer(proc, new_buffer);
284     }
285     binder_debug(BINDER_DEBUG_BUFFER_ALLOC,
286     - "%d: binder_alloc_buf size %zd got %p\n",
287     + "%d: binder_alloc_buf size %zd got %pK\n",
288     proc->pid, size, buffer);
289     buffer->data_size = data_size;
290     buffer->offsets_size = offsets_size;
291     @@ -789,7 +789,7 @@ static void binder_delete_free_buffer(struct binder_proc *proc,
292     if (buffer_end_page(prev) == buffer_end_page(buffer))
293     free_page_end = 0;
294     binder_debug(BINDER_DEBUG_BUFFER_ALLOC,
295     - "%d: merge free, buffer %p share page with %p\n",
296     + "%d: merge free, buffer %pK share page with %pK\n",
297     proc->pid, buffer, prev);
298     }
299    
300     @@ -802,14 +802,14 @@ static void binder_delete_free_buffer(struct binder_proc *proc,
301     buffer_start_page(buffer))
302     free_page_start = 0;
303     binder_debug(BINDER_DEBUG_BUFFER_ALLOC,
304     - "%d: merge free, buffer %p share page with %p\n",
305     + "%d: merge free, buffer %pK share page with %pK\n",
306     proc->pid, buffer, prev);
307     }
308     }
309     list_del(&buffer->entry);
310     if (free_page_start || free_page_end) {
311     binder_debug(BINDER_DEBUG_BUFFER_ALLOC,
312     - "%d: merge free, buffer %p do not share page%s%s with %p or %p\n",
313     + "%d: merge free, buffer %pK do not share page%s%s with %pK or %pK\n",
314     proc->pid, buffer, free_page_start ? "" : " end",
315     free_page_end ? "" : " start", prev, next);
316     binder_update_page_range(proc, 0, free_page_start ?
317     @@ -830,7 +830,7 @@ static void binder_free_buf(struct binder_proc *proc,
318     ALIGN(buffer->offsets_size, sizeof(void *));
319    
320     binder_debug(BINDER_DEBUG_BUFFER_ALLOC,
321     - "%d: binder_free_buf %p size %zd buffer_size %zd\n",
322     + "%d: binder_free_buf %pK size %zd buffer_size %zd\n",
323     proc->pid, buffer, size, buffer_size);
324    
325     BUG_ON(buffer->free);
326     @@ -1260,7 +1260,7 @@ static void binder_transaction_buffer_release(struct binder_proc *proc,
327     int debug_id = buffer->debug_id;
328    
329     binder_debug(BINDER_DEBUG_TRANSACTION,
330     - "%d buffer release %d, size %zd-%zd, failed at %p\n",
331     + "%d buffer release %d, size %zd-%zd, failed at %pK\n",
332     proc->pid, buffer->debug_id,
333     buffer->data_size, buffer->offsets_size, failed_at);
334    
335     @@ -2123,7 +2123,7 @@ static int binder_thread_write(struct binder_proc *proc,
336     }
337     }
338     binder_debug(BINDER_DEBUG_DEAD_BINDER,
339     - "%d:%d BC_DEAD_BINDER_DONE %016llx found %p\n",
340     + "%d:%d BC_DEAD_BINDER_DONE %016llx found %pK\n",
341     proc->pid, thread->pid, (u64)cookie,
342     death);
343     if (death == NULL) {
344     @@ -2930,7 +2930,7 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma)
345     #ifdef CONFIG_CPU_CACHE_VIPT
346     if (cache_is_vipt_aliasing()) {
347     while (CACHE_COLOUR((vma->vm_start ^ (uint32_t)proc->buffer))) {
348     - pr_info("binder_mmap: %d %lx-%lx maps %p bad alignment\n", proc->pid, vma->vm_start, vma->vm_end, proc->buffer);
349     + pr_info("binder_mmap: %d %lx-%lx maps %pK bad alignment\n", proc->pid, vma->vm_start, vma->vm_end, proc->buffer);
350     vma->vm_start += PAGE_SIZE;
351     }
352     }
353     @@ -3191,7 +3191,7 @@ static void binder_deferred_release(struct binder_proc *proc)
354    
355     page_addr = proc->buffer + i * PAGE_SIZE;
356     binder_debug(BINDER_DEBUG_BUFFER_ALLOC,
357     - "%s: %d: page %d at %p not freed\n",
358     + "%s: %d: page %d at %pK not freed\n",
359     __func__, proc->pid, i, page_addr);
360     unmap_kernel_range((unsigned long)page_addr, PAGE_SIZE);
361     __free_page(proc->pages[i]);
362     @@ -3272,7 +3272,7 @@ static void print_binder_transaction(struct seq_file *m, const char *prefix,
363     struct binder_transaction *t)
364     {
365     seq_printf(m,
366     - "%s %d: %p from %d:%d to %d:%d code %x flags %x pri %ld r%d",
367     + "%s %d: %pK from %d:%d to %d:%d code %x flags %x pri %ld r%d",
368     prefix, t->debug_id, t,
369     t->from ? t->from->proc->pid : 0,
370     t->from ? t->from->pid : 0,
371     @@ -3286,7 +3286,7 @@ static void print_binder_transaction(struct seq_file *m, const char *prefix,
372     if (t->buffer->target_node)
373     seq_printf(m, " node %d",
374     t->buffer->target_node->debug_id);
375     - seq_printf(m, " size %zd:%zd data %p\n",
376     + seq_printf(m, " size %zd:%zd data %pK\n",
377     t->buffer->data_size, t->buffer->offsets_size,
378     t->buffer->data);
379     }
380     @@ -3294,7 +3294,7 @@ static void print_binder_transaction(struct seq_file *m, const char *prefix,
381     static void print_binder_buffer(struct seq_file *m, const char *prefix,
382     struct binder_buffer *buffer)
383     {
384     - seq_printf(m, "%s %d: %p size %zd:%zd %s\n",
385     + seq_printf(m, "%s %d: %pK size %zd:%zd %s\n",
386     prefix, buffer->debug_id, buffer->data,
387     buffer->data_size, buffer->offsets_size,
388     buffer->transaction ? "active" : "delivered");
389     @@ -3397,7 +3397,7 @@ static void print_binder_node(struct seq_file *m, struct binder_node *node)
390    
391     static void print_binder_ref(struct seq_file *m, struct binder_ref *ref)
392     {
393     - seq_printf(m, " ref %d: desc %d %snode %d s %d w %d d %p\n",
394     + seq_printf(m, " ref %d: desc %d %snode %d s %d w %d d %pK\n",
395     ref->debug_id, ref->desc, ref->node->proc ? "" : "dead ",
396     ref->node->debug_id, ref->strong, ref->weak, ref->death);
397     }
398     diff --git a/drivers/crypto/vmx/ghash.c b/drivers/crypto/vmx/ghash.c
399     index 1c4b5b889fba..1bfe867c0b7b 100644
400     --- a/drivers/crypto/vmx/ghash.c
401     +++ b/drivers/crypto/vmx/ghash.c
402     @@ -1,22 +1,14 @@
403     +// SPDX-License-Identifier: GPL-2.0
404     /**
405     * GHASH routines supporting VMX instructions on the Power 8
406     *
407     - * Copyright (C) 2015 International Business Machines Inc.
408     - *
409     - * This program is free software; you can redistribute it and/or modify
410     - * it under the terms of the GNU General Public License as published by
411     - * the Free Software Foundation; version 2 only.
412     - *
413     - * This program is distributed in the hope that it will be useful,
414     - * but WITHOUT ANY WARRANTY; without even the implied warranty of
415     - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
416     - * GNU General Public License for more details.
417     - *
418     - * You should have received a copy of the GNU General Public License
419     - * along with this program; if not, write to the Free Software
420     - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
421     + * Copyright (C) 2015, 2019 International Business Machines Inc.
422     *
423     * Author: Marcelo Henrique Cerri <mhcerri@br.ibm.com>
424     + *
425     + * Extended by Daniel Axtens <dja@axtens.net> to replace the fallback
426     + * mechanism. The new approach is based on arm64 code, which is:
427     + * Copyright (C) 2014 - 2018 Linaro Ltd. <ard.biesheuvel@linaro.org>
428     */
429    
430     #include <linux/types.h>
431     @@ -39,71 +31,25 @@ void gcm_ghash_p8(u64 Xi[2], const u128 htable[16],
432     const u8 *in, size_t len);
433    
434     struct p8_ghash_ctx {
435     + /* key used by vector asm */
436     u128 htable[16];
437     - struct crypto_shash *fallback;
438     + /* key used by software fallback */
439     + be128 key;
440     };
441    
442     struct p8_ghash_desc_ctx {
443     u64 shash[2];
444     u8 buffer[GHASH_DIGEST_SIZE];
445     int bytes;
446     - struct shash_desc fallback_desc;
447     };
448    
449     -static int p8_ghash_init_tfm(struct crypto_tfm *tfm)
450     -{
451     - const char *alg = "ghash-generic";
452     - struct crypto_shash *fallback;
453     - struct crypto_shash *shash_tfm = __crypto_shash_cast(tfm);
454     - struct p8_ghash_ctx *ctx = crypto_tfm_ctx(tfm);
455     -
456     - fallback = crypto_alloc_shash(alg, 0, CRYPTO_ALG_NEED_FALLBACK);
457     - if (IS_ERR(fallback)) {
458     - printk(KERN_ERR
459     - "Failed to allocate transformation for '%s': %ld\n",
460     - alg, PTR_ERR(fallback));
461     - return PTR_ERR(fallback);
462     - }
463     -
464     - crypto_shash_set_flags(fallback,
465     - crypto_shash_get_flags((struct crypto_shash
466     - *) tfm));
467     -
468     - /* Check if the descsize defined in the algorithm is still enough. */
469     - if (shash_tfm->descsize < sizeof(struct p8_ghash_desc_ctx)
470     - + crypto_shash_descsize(fallback)) {
471     - printk(KERN_ERR
472     - "Desc size of the fallback implementation (%s) does not match the expected value: %lu vs %u\n",
473     - alg,
474     - shash_tfm->descsize - sizeof(struct p8_ghash_desc_ctx),
475     - crypto_shash_descsize(fallback));
476     - return -EINVAL;
477     - }
478     - ctx->fallback = fallback;
479     -
480     - return 0;
481     -}
482     -
483     -static void p8_ghash_exit_tfm(struct crypto_tfm *tfm)
484     -{
485     - struct p8_ghash_ctx *ctx = crypto_tfm_ctx(tfm);
486     -
487     - if (ctx->fallback) {
488     - crypto_free_shash(ctx->fallback);
489     - ctx->fallback = NULL;
490     - }
491     -}
492     -
493     static int p8_ghash_init(struct shash_desc *desc)
494     {
495     - struct p8_ghash_ctx *ctx = crypto_tfm_ctx(crypto_shash_tfm(desc->tfm));
496     struct p8_ghash_desc_ctx *dctx = shash_desc_ctx(desc);
497    
498     dctx->bytes = 0;
499     memset(dctx->shash, 0, GHASH_DIGEST_SIZE);
500     - dctx->fallback_desc.tfm = ctx->fallback;
501     - dctx->fallback_desc.flags = desc->flags;
502     - return crypto_shash_init(&dctx->fallback_desc);
503     + return 0;
504     }
505    
506     static int p8_ghash_setkey(struct crypto_shash *tfm, const u8 *key,
507     @@ -121,7 +67,51 @@ static int p8_ghash_setkey(struct crypto_shash *tfm, const u8 *key,
508     disable_kernel_vsx();
509     pagefault_enable();
510     preempt_enable();
511     - return crypto_shash_setkey(ctx->fallback, key, keylen);
512     +
513     + memcpy(&ctx->key, key, GHASH_BLOCK_SIZE);
514     +
515     + return 0;
516     +}
517     +
518     +static inline void __ghash_block(struct p8_ghash_ctx *ctx,
519     + struct p8_ghash_desc_ctx *dctx)
520     +{
521     + if (!IN_INTERRUPT) {
522     + preempt_disable();
523     + pagefault_disable();
524     + enable_kernel_vsx();
525     + gcm_ghash_p8(dctx->shash, ctx->htable,
526     + dctx->buffer, GHASH_DIGEST_SIZE);
527     + disable_kernel_vsx();
528     + pagefault_enable();
529     + preempt_enable();
530     + } else {
531     + crypto_xor((u8 *)dctx->shash, dctx->buffer, GHASH_BLOCK_SIZE);
532     + gf128mul_lle((be128 *)dctx->shash, &ctx->key);
533     + }
534     +}
535     +
536     +static inline void __ghash_blocks(struct p8_ghash_ctx *ctx,
537     + struct p8_ghash_desc_ctx *dctx,
538     + const u8 *src, unsigned int srclen)
539     +{
540     + if (!IN_INTERRUPT) {
541     + preempt_disable();
542     + pagefault_disable();
543     + enable_kernel_vsx();
544     + gcm_ghash_p8(dctx->shash, ctx->htable,
545     + src, srclen);
546     + disable_kernel_vsx();
547     + pagefault_enable();
548     + preempt_enable();
549     + } else {
550     + while (srclen >= GHASH_BLOCK_SIZE) {
551     + crypto_xor((u8 *)dctx->shash, src, GHASH_BLOCK_SIZE);
552     + gf128mul_lle((be128 *)dctx->shash, &ctx->key);
553     + srclen -= GHASH_BLOCK_SIZE;
554     + src += GHASH_BLOCK_SIZE;
555     + }
556     + }
557     }
558    
559     static int p8_ghash_update(struct shash_desc *desc,
560     @@ -131,49 +121,33 @@ static int p8_ghash_update(struct shash_desc *desc,
561     struct p8_ghash_ctx *ctx = crypto_tfm_ctx(crypto_shash_tfm(desc->tfm));
562     struct p8_ghash_desc_ctx *dctx = shash_desc_ctx(desc);
563    
564     - if (IN_INTERRUPT) {
565     - return crypto_shash_update(&dctx->fallback_desc, src,
566     - srclen);
567     - } else {
568     - if (dctx->bytes) {
569     - if (dctx->bytes + srclen < GHASH_DIGEST_SIZE) {
570     - memcpy(dctx->buffer + dctx->bytes, src,
571     - srclen);
572     - dctx->bytes += srclen;
573     - return 0;
574     - }
575     + if (dctx->bytes) {
576     + if (dctx->bytes + srclen < GHASH_DIGEST_SIZE) {
577     memcpy(dctx->buffer + dctx->bytes, src,
578     - GHASH_DIGEST_SIZE - dctx->bytes);
579     - preempt_disable();
580     - pagefault_disable();
581     - enable_kernel_vsx();
582     - gcm_ghash_p8(dctx->shash, ctx->htable,
583     - dctx->buffer, GHASH_DIGEST_SIZE);
584     - disable_kernel_vsx();
585     - pagefault_enable();
586     - preempt_enable();
587     - src += GHASH_DIGEST_SIZE - dctx->bytes;
588     - srclen -= GHASH_DIGEST_SIZE - dctx->bytes;
589     - dctx->bytes = 0;
590     - }
591     - len = srclen & ~(GHASH_DIGEST_SIZE - 1);
592     - if (len) {
593     - preempt_disable();
594     - pagefault_disable();
595     - enable_kernel_vsx();
596     - gcm_ghash_p8(dctx->shash, ctx->htable, src, len);
597     - disable_kernel_vsx();
598     - pagefault_enable();
599     - preempt_enable();
600     - src += len;
601     - srclen -= len;
602     - }
603     - if (srclen) {
604     - memcpy(dctx->buffer, src, srclen);
605     - dctx->bytes = srclen;
606     + srclen);
607     + dctx->bytes += srclen;
608     + return 0;
609     }
610     - return 0;
611     + memcpy(dctx->buffer + dctx->bytes, src,
612     + GHASH_DIGEST_SIZE - dctx->bytes);
613     +
614     + __ghash_block(ctx, dctx);
615     +
616     + src += GHASH_DIGEST_SIZE - dctx->bytes;
617     + srclen -= GHASH_DIGEST_SIZE - dctx->bytes;
618     + dctx->bytes = 0;
619     + }
620     + len = srclen & ~(GHASH_DIGEST_SIZE - 1);
621     + if (len) {
622     + __ghash_blocks(ctx, dctx, src, len);
623     + src += len;
624     + srclen -= len;
625     }
626     + if (srclen) {
627     + memcpy(dctx->buffer, src, srclen);
628     + dctx->bytes = srclen;
629     + }
630     + return 0;
631     }
632    
633     static int p8_ghash_final(struct shash_desc *desc, u8 *out)
634     @@ -182,25 +156,14 @@ static int p8_ghash_final(struct shash_desc *desc, u8 *out)
635     struct p8_ghash_ctx *ctx = crypto_tfm_ctx(crypto_shash_tfm(desc->tfm));
636     struct p8_ghash_desc_ctx *dctx = shash_desc_ctx(desc);
637    
638     - if (IN_INTERRUPT) {
639     - return crypto_shash_final(&dctx->fallback_desc, out);
640     - } else {
641     - if (dctx->bytes) {
642     - for (i = dctx->bytes; i < GHASH_DIGEST_SIZE; i++)
643     - dctx->buffer[i] = 0;
644     - preempt_disable();
645     - pagefault_disable();
646     - enable_kernel_vsx();
647     - gcm_ghash_p8(dctx->shash, ctx->htable,
648     - dctx->buffer, GHASH_DIGEST_SIZE);
649     - disable_kernel_vsx();
650     - pagefault_enable();
651     - preempt_enable();
652     - dctx->bytes = 0;
653     - }
654     - memcpy(out, dctx->shash, GHASH_DIGEST_SIZE);
655     - return 0;
656     + if (dctx->bytes) {
657     + for (i = dctx->bytes; i < GHASH_DIGEST_SIZE; i++)
658     + dctx->buffer[i] = 0;
659     + __ghash_block(ctx, dctx);
660     + dctx->bytes = 0;
661     }
662     + memcpy(out, dctx->shash, GHASH_DIGEST_SIZE);
663     + return 0;
664     }
665    
666     struct shash_alg p8_ghash_alg = {
667     @@ -215,11 +178,9 @@ struct shash_alg p8_ghash_alg = {
668     .cra_name = "ghash",
669     .cra_driver_name = "p8_ghash",
670     .cra_priority = 1000,
671     - .cra_flags = CRYPTO_ALG_TYPE_SHASH | CRYPTO_ALG_NEED_FALLBACK,
672     + .cra_flags = CRYPTO_ALG_TYPE_SHASH,
673     .cra_blocksize = GHASH_BLOCK_SIZE,
674     .cra_ctxsize = sizeof(struct p8_ghash_ctx),
675     .cra_module = THIS_MODULE,
676     - .cra_init = p8_ghash_init_tfm,
677     - .cra_exit = p8_ghash_exit_tfm,
678     },
679     };
680     diff --git a/drivers/firmware/efi/libstub/arm-stub.c b/drivers/firmware/efi/libstub/arm-stub.c
681     index 993aa56755f6..726d1467b778 100644
682     --- a/drivers/firmware/efi/libstub/arm-stub.c
683     +++ b/drivers/firmware/efi/libstub/arm-stub.c
684     @@ -18,7 +18,6 @@
685    
686     #include "efistub.h"
687    
688     -bool __nokaslr;
689    
690     static int efi_get_secureboot(efi_system_table_t *sys_table_arg)
691     {
692     @@ -268,18 +267,6 @@ unsigned long efi_entry(void *handle, efi_system_table_t *sys_table,
693     goto fail;
694     }
695    
696     - /* check whether 'nokaslr' was passed on the command line */
697     - if (IS_ENABLED(CONFIG_RANDOMIZE_BASE)) {
698     - static const u8 default_cmdline[] = CONFIG_CMDLINE;
699     - const u8 *str, *cmdline = cmdline_ptr;
700     -
701     - if (IS_ENABLED(CONFIG_CMDLINE_FORCE))
702     - cmdline = default_cmdline;
703     - str = strstr(cmdline, "nokaslr");
704     - if (str == cmdline || (str > cmdline && *(str - 1) == ' '))
705     - __nokaslr = true;
706     - }
707     -
708     si = setup_graphics(sys_table);
709    
710     status = handle_kernel_image(sys_table, image_addr, &image_size,
711     @@ -291,9 +278,13 @@ unsigned long efi_entry(void *handle, efi_system_table_t *sys_table,
712     goto fail_free_cmdline;
713     }
714    
715     - status = efi_parse_options(cmdline_ptr);
716     - if (status != EFI_SUCCESS)
717     - pr_efi_err(sys_table, "Failed to parse EFI cmdline options\n");
718     + if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) ||
719     + IS_ENABLED(CONFIG_CMDLINE_FORCE) ||
720     + cmdline_size == 0)
721     + efi_parse_options(CONFIG_CMDLINE);
722     +
723     + if (!IS_ENABLED(CONFIG_CMDLINE_FORCE) && cmdline_size > 0)
724     + efi_parse_options(cmdline_ptr);
725    
726     secure_boot = efi_get_secureboot(sys_table);
727     if (secure_boot > 0)
728     diff --git a/drivers/firmware/efi/libstub/arm64-stub.c b/drivers/firmware/efi/libstub/arm64-stub.c
729     index 959d9b8d4845..f7a6970e9abc 100644
730     --- a/drivers/firmware/efi/libstub/arm64-stub.c
731     +++ b/drivers/firmware/efi/libstub/arm64-stub.c
732     @@ -24,8 +24,6 @@
733    
734     #include "efistub.h"
735    
736     -extern bool __nokaslr;
737     -
738     efi_status_t check_platform_features(efi_system_table_t *sys_table_arg)
739     {
740     u64 tg;
741     @@ -60,7 +58,7 @@ efi_status_t handle_kernel_image(efi_system_table_t *sys_table_arg,
742     u64 phys_seed = 0;
743    
744     if (IS_ENABLED(CONFIG_RANDOMIZE_BASE)) {
745     - if (!__nokaslr) {
746     + if (!nokaslr()) {
747     status = efi_get_random_bytes(sys_table_arg,
748     sizeof(phys_seed),
749     (u8 *)&phys_seed);
750     diff --git a/drivers/firmware/efi/libstub/efi-stub-helper.c b/drivers/firmware/efi/libstub/efi-stub-helper.c
751     index 09d10dcf1fc6..1c963c4d1bde 100644
752     --- a/drivers/firmware/efi/libstub/efi-stub-helper.c
753     +++ b/drivers/firmware/efi/libstub/efi-stub-helper.c
754     @@ -32,6 +32,13 @@
755    
756     static unsigned long __chunk_size = EFI_READ_CHUNK_SIZE;
757    
758     +static int __section(.data) __nokaslr;
759     +
760     +int __pure nokaslr(void)
761     +{
762     + return __nokaslr;
763     +}
764     +
765     /*
766     * Allow the platform to override the allocation granularity: this allows
767     * systems that have the capability to run with a larger page size to deal
768     @@ -351,17 +358,13 @@ void efi_free(efi_system_table_t *sys_table_arg, unsigned long size,
769     * environments, first in the early boot environment of the EFI boot
770     * stub, and subsequently during the kernel boot.
771     */
772     -efi_status_t efi_parse_options(char *cmdline)
773     +efi_status_t efi_parse_options(char const *cmdline)
774     {
775     char *str;
776    
777     - /*
778     - * Currently, the only efi= option we look for is 'nochunk', which
779     - * is intended to work around known issues on certain x86 UEFI
780     - * versions. So ignore for now on other architectures.
781     - */
782     - if (!IS_ENABLED(CONFIG_X86))
783     - return EFI_SUCCESS;
784     + str = strstr(cmdline, "nokaslr");
785     + if (str == cmdline || (str && str > cmdline && *(str - 1) == ' '))
786     + __nokaslr = 1;
787    
788     /*
789     * If no EFI parameters were specified on the cmdline we've got
790     diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h
791     index fac67992bede..d0e5acab547f 100644
792     --- a/drivers/firmware/efi/libstub/efistub.h
793     +++ b/drivers/firmware/efi/libstub/efistub.h
794     @@ -15,6 +15,8 @@
795     */
796     #undef __init
797    
798     +extern int __pure nokaslr(void);
799     +
800     void efi_char16_printk(efi_system_table_t *, efi_char16_t *);
801    
802     efi_status_t efi_open_volume(efi_system_table_t *sys_table_arg, void *__image,
803     diff --git a/drivers/gpu/drm/gma500/cdv_intel_lvds.c b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
804     index ea733ab5b1e0..d83be4623c7f 100644
805     --- a/drivers/gpu/drm/gma500/cdv_intel_lvds.c
806     +++ b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
807     @@ -609,6 +609,9 @@ void cdv_intel_lvds_init(struct drm_device *dev,
808     int pipe;
809     u8 pin;
810    
811     + if (!dev_priv->lvds_enabled_in_vbt)
812     + return;
813     +
814     pin = GMBUS_PORT_PANEL;
815     if (!lvds_is_present_in_vbt(dev, &pin)) {
816     DRM_DEBUG_KMS("LVDS is not present in VBT\n");
817     diff --git a/drivers/gpu/drm/gma500/intel_bios.c b/drivers/gpu/drm/gma500/intel_bios.c
818     index 63bde4e86c6a..e019ea271ffc 100644
819     --- a/drivers/gpu/drm/gma500/intel_bios.c
820     +++ b/drivers/gpu/drm/gma500/intel_bios.c
821     @@ -436,6 +436,9 @@ parse_driver_features(struct drm_psb_private *dev_priv,
822     if (driver->lvds_config == BDB_DRIVER_FEATURE_EDP)
823     dev_priv->edp.support = 1;
824    
825     + dev_priv->lvds_enabled_in_vbt = driver->lvds_config != 0;
826     + DRM_DEBUG_KMS("LVDS VBT config bits: 0x%x\n", driver->lvds_config);
827     +
828     /* This bit means to use 96Mhz for DPLL_A or not */
829     if (driver->primary_lfp_id)
830     dev_priv->dplla_96mhz = true;
831     diff --git a/drivers/gpu/drm/gma500/psb_drv.h b/drivers/gpu/drm/gma500/psb_drv.h
832     index b74372760d7f..d18e11d61312 100644
833     --- a/drivers/gpu/drm/gma500/psb_drv.h
834     +++ b/drivers/gpu/drm/gma500/psb_drv.h
835     @@ -538,6 +538,7 @@ struct drm_psb_private {
836     int lvds_ssc_freq;
837     bool is_lvds_on;
838     bool is_mipi_on;
839     + bool lvds_enabled_in_vbt;
840     u32 mipi_ctrl_display;
841    
842     unsigned int core_freq;
843     diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/i2c.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/i2c.h
844     index a63c5ac69f66..23b8f25402d0 100644
845     --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/i2c.h
846     +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/i2c.h
847     @@ -37,6 +37,7 @@ struct nvkm_i2c_bus {
848     struct mutex mutex;
849     struct list_head head;
850     struct i2c_adapter i2c;
851     + u8 enabled;
852     };
853    
854     int nvkm_i2c_bus_acquire(struct nvkm_i2c_bus *);
855     @@ -56,6 +57,7 @@ struct nvkm_i2c_aux {
856     struct mutex mutex;
857     struct list_head head;
858     struct i2c_adapter i2c;
859     + u8 enabled;
860    
861     u32 intr;
862     };
863     diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.c
864     index f0851d57df2f..f89692cb2bc7 100644
865     --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.c
866     +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.c
867     @@ -105,9 +105,15 @@ nvkm_i2c_aux_acquire(struct nvkm_i2c_aux *aux)
868     {
869     struct nvkm_i2c_pad *pad = aux->pad;
870     int ret;
871     +
872     AUX_TRACE(aux, "acquire");
873     mutex_lock(&aux->mutex);
874     - ret = nvkm_i2c_pad_acquire(pad, NVKM_I2C_PAD_AUX);
875     +
876     + if (aux->enabled)
877     + ret = nvkm_i2c_pad_acquire(pad, NVKM_I2C_PAD_AUX);
878     + else
879     + ret = -EIO;
880     +
881     if (ret)
882     mutex_unlock(&aux->mutex);
883     return ret;
884     @@ -141,6 +147,24 @@ nvkm_i2c_aux_del(struct nvkm_i2c_aux **paux)
885     }
886     }
887    
888     +void
889     +nvkm_i2c_aux_init(struct nvkm_i2c_aux *aux)
890     +{
891     + AUX_TRACE(aux, "init");
892     + mutex_lock(&aux->mutex);
893     + aux->enabled = true;
894     + mutex_unlock(&aux->mutex);
895     +}
896     +
897     +void
898     +nvkm_i2c_aux_fini(struct nvkm_i2c_aux *aux)
899     +{
900     + AUX_TRACE(aux, "fini");
901     + mutex_lock(&aux->mutex);
902     + aux->enabled = false;
903     + mutex_unlock(&aux->mutex);
904     +}
905     +
906     int
907     nvkm_i2c_aux_ctor(const struct nvkm_i2c_aux_func *func,
908     struct nvkm_i2c_pad *pad, int id,
909     diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.h b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.h
910     index fc6b162fa0b1..1be175a8fb02 100644
911     --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.h
912     +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.h
913     @@ -14,6 +14,8 @@ int nvkm_i2c_aux_ctor(const struct nvkm_i2c_aux_func *, struct nvkm_i2c_pad *,
914     int nvkm_i2c_aux_new_(const struct nvkm_i2c_aux_func *, struct nvkm_i2c_pad *,
915     int id, struct nvkm_i2c_aux **);
916     void nvkm_i2c_aux_del(struct nvkm_i2c_aux **);
917     +void nvkm_i2c_aux_init(struct nvkm_i2c_aux *);
918     +void nvkm_i2c_aux_fini(struct nvkm_i2c_aux *);
919     int nvkm_i2c_aux_xfer(struct nvkm_i2c_aux *, bool retry, u8 type,
920     u32 addr, u8 *data, u8 size);
921    
922     diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c
923     index 4f197b15acf6..ecacb22834d7 100644
924     --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c
925     +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c
926     @@ -160,8 +160,18 @@ nvkm_i2c_fini(struct nvkm_subdev *subdev, bool suspend)
927     {
928     struct nvkm_i2c *i2c = nvkm_i2c(subdev);
929     struct nvkm_i2c_pad *pad;
930     + struct nvkm_i2c_bus *bus;
931     + struct nvkm_i2c_aux *aux;
932     u32 mask;
933    
934     + list_for_each_entry(aux, &i2c->aux, head) {
935     + nvkm_i2c_aux_fini(aux);
936     + }
937     +
938     + list_for_each_entry(bus, &i2c->bus, head) {
939     + nvkm_i2c_bus_fini(bus);
940     + }
941     +
942     if ((mask = (1 << i2c->func->aux) - 1), i2c->func->aux_stat) {
943     i2c->func->aux_mask(i2c, NVKM_I2C_ANY, mask, 0);
944     i2c->func->aux_stat(i2c, &mask, &mask, &mask, &mask);
945     @@ -180,6 +190,7 @@ nvkm_i2c_init(struct nvkm_subdev *subdev)
946     struct nvkm_i2c *i2c = nvkm_i2c(subdev);
947     struct nvkm_i2c_bus *bus;
948     struct nvkm_i2c_pad *pad;
949     + struct nvkm_i2c_aux *aux;
950    
951     list_for_each_entry(pad, &i2c->pad, head) {
952     nvkm_i2c_pad_init(pad);
953     @@ -189,6 +200,10 @@ nvkm_i2c_init(struct nvkm_subdev *subdev)
954     nvkm_i2c_bus_init(bus);
955     }
956    
957     + list_for_each_entry(aux, &i2c->aux, head) {
958     + nvkm_i2c_aux_init(aux);
959     + }
960     +
961     return 0;
962     }
963    
964     diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.c
965     index 807a2b67bd64..ed50cc3736b9 100644
966     --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.c
967     +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.c
968     @@ -110,6 +110,19 @@ nvkm_i2c_bus_init(struct nvkm_i2c_bus *bus)
969     BUS_TRACE(bus, "init");
970     if (bus->func->init)
971     bus->func->init(bus);
972     +
973     + mutex_lock(&bus->mutex);
974     + bus->enabled = true;
975     + mutex_unlock(&bus->mutex);
976     +}
977     +
978     +void
979     +nvkm_i2c_bus_fini(struct nvkm_i2c_bus *bus)
980     +{
981     + BUS_TRACE(bus, "fini");
982     + mutex_lock(&bus->mutex);
983     + bus->enabled = false;
984     + mutex_unlock(&bus->mutex);
985     }
986    
987     void
988     @@ -126,9 +139,15 @@ nvkm_i2c_bus_acquire(struct nvkm_i2c_bus *bus)
989     {
990     struct nvkm_i2c_pad *pad = bus->pad;
991     int ret;
992     +
993     BUS_TRACE(bus, "acquire");
994     mutex_lock(&bus->mutex);
995     - ret = nvkm_i2c_pad_acquire(pad, NVKM_I2C_PAD_I2C);
996     +
997     + if (bus->enabled)
998     + ret = nvkm_i2c_pad_acquire(pad, NVKM_I2C_PAD_I2C);
999     + else
1000     + ret = -EIO;
1001     +
1002     if (ret)
1003     mutex_unlock(&bus->mutex);
1004     return ret;
1005     diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.h b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.h
1006     index e1be14c23e54..2fdb1b8e7164 100644
1007     --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.h
1008     +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.h
1009     @@ -17,6 +17,7 @@ int nvkm_i2c_bus_new_(const struct nvkm_i2c_bus_func *, struct nvkm_i2c_pad *,
1010     int id, struct nvkm_i2c_bus **);
1011     void nvkm_i2c_bus_del(struct nvkm_i2c_bus **);
1012     void nvkm_i2c_bus_init(struct nvkm_i2c_bus *);
1013     +void nvkm_i2c_bus_fini(struct nvkm_i2c_bus *);
1014    
1015     int nvkm_i2c_bit_xfer(struct nvkm_i2c_bus *, struct i2c_msg *, int);
1016    
1017     diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
1018     index ca1caf405832..8b6f8aa23806 100644
1019     --- a/drivers/gpu/drm/radeon/radeon_display.c
1020     +++ b/drivers/gpu/drm/radeon/radeon_display.c
1021     @@ -935,12 +935,12 @@ static void avivo_get_fb_ref_div(unsigned nom, unsigned den, unsigned post_div,
1022     ref_div_max = max(min(100 / post_div, ref_div_max), 1u);
1023    
1024     /* get matching reference and feedback divider */
1025     - *ref_div = min(max(DIV_ROUND_CLOSEST(den, post_div), 1u), ref_div_max);
1026     + *ref_div = min(max(den/post_div, 1u), ref_div_max);
1027     *fb_div = DIV_ROUND_CLOSEST(nom * *ref_div * post_div, den);
1028    
1029     /* limit fb divider to its maximum */
1030     if (*fb_div > fb_div_max) {
1031     - *ref_div = DIV_ROUND_CLOSEST(*ref_div * fb_div_max, *fb_div);
1032     + *ref_div = (*ref_div * fb_div_max)/(*fb_div);
1033     *fb_div = fb_div_max;
1034     }
1035     }
1036     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
1037     index 4b556e698f13..6c30c24c779f 100644
1038     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
1039     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
1040     @@ -1245,7 +1245,13 @@ static int vmw_master_set(struct drm_device *dev,
1041     }
1042    
1043     dev_priv->active_master = vmaster;
1044     - drm_sysfs_hotplug_event(dev);
1045     +
1046     + /*
1047     + * Inform a new master that the layout may have changed while
1048     + * it was gone.
1049     + */
1050     + if (!from_open)
1051     + drm_sysfs_hotplug_event(dev);
1052    
1053     return 0;
1054     }
1055     diff --git a/drivers/irqchip/irq-ath79-misc.c b/drivers/irqchip/irq-ath79-misc.c
1056     index 0390603170b4..aa7290784636 100644
1057     --- a/drivers/irqchip/irq-ath79-misc.c
1058     +++ b/drivers/irqchip/irq-ath79-misc.c
1059     @@ -22,15 +22,6 @@
1060     #define AR71XX_RESET_REG_MISC_INT_ENABLE 4
1061    
1062     #define ATH79_MISC_IRQ_COUNT 32
1063     -#define ATH79_MISC_PERF_IRQ 5
1064     -
1065     -static int ath79_perfcount_irq;
1066     -
1067     -int get_c0_perfcount_int(void)
1068     -{
1069     - return ath79_perfcount_irq;
1070     -}
1071     -EXPORT_SYMBOL_GPL(get_c0_perfcount_int);
1072    
1073     static void ath79_misc_irq_handler(struct irq_desc *desc)
1074     {
1075     @@ -122,8 +113,6 @@ static void __init ath79_misc_intc_domain_init(
1076     {
1077     void __iomem *base = domain->host_data;
1078    
1079     - ath79_perfcount_irq = irq_create_mapping(domain, ATH79_MISC_PERF_IRQ);
1080     -
1081     /* Disable and clear all interrupts */
1082     __raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_ENABLE);
1083     __raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_STATUS);
1084     diff --git a/drivers/media/usb/siano/smsusb.c b/drivers/media/usb/siano/smsusb.c
1085     index 18b41b9dc2e4..73889d6cfd50 100644
1086     --- a/drivers/media/usb/siano/smsusb.c
1087     +++ b/drivers/media/usb/siano/smsusb.c
1088     @@ -402,6 +402,7 @@ static int smsusb_init_device(struct usb_interface *intf, int board_id)
1089     struct smsusb_device_t *dev;
1090     void *mdev;
1091     int i, rc;
1092     + int align = 0;
1093    
1094     /* create device object */
1095     dev = kzalloc(sizeof(struct smsusb_device_t), GFP_KERNEL);
1096     @@ -413,6 +414,24 @@ static int smsusb_init_device(struct usb_interface *intf, int board_id)
1097     dev->udev = interface_to_usbdev(intf);
1098     dev->state = SMSUSB_DISCONNECTED;
1099    
1100     + for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
1101     + struct usb_endpoint_descriptor *desc =
1102     + &intf->cur_altsetting->endpoint[i].desc;
1103     +
1104     + if (desc->bEndpointAddress & USB_DIR_IN) {
1105     + dev->in_ep = desc->bEndpointAddress;
1106     + align = usb_endpoint_maxp(desc) - sizeof(struct sms_msg_hdr);
1107     + } else {
1108     + dev->out_ep = desc->bEndpointAddress;
1109     + }
1110     + }
1111     +
1112     + pr_debug("in_ep = %02x, out_ep = %02x\n", dev->in_ep, dev->out_ep);
1113     + if (!dev->in_ep || !dev->out_ep || align < 0) { /* Missing endpoints? */
1114     + smsusb_term_device(intf);
1115     + return -ENODEV;
1116     + }
1117     +
1118     params.device_type = sms_get_board(board_id)->type;
1119    
1120     switch (params.device_type) {
1121     @@ -427,24 +446,12 @@ static int smsusb_init_device(struct usb_interface *intf, int board_id)
1122     /* fall-thru */
1123     default:
1124     dev->buffer_size = USB2_BUFFER_SIZE;
1125     - dev->response_alignment =
1126     - le16_to_cpu(dev->udev->ep_in[1]->desc.wMaxPacketSize) -
1127     - sizeof(struct sms_msg_hdr);
1128     + dev->response_alignment = align;
1129    
1130     params.flags |= SMS_DEVICE_FAMILY2;
1131     break;
1132     }
1133    
1134     - for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
1135     - if (intf->cur_altsetting->endpoint[i].desc. bEndpointAddress & USB_DIR_IN)
1136     - dev->in_ep = intf->cur_altsetting->endpoint[i].desc.bEndpointAddress;
1137     - else
1138     - dev->out_ep = intf->cur_altsetting->endpoint[i].desc.bEndpointAddress;
1139     - }
1140     -
1141     - pr_debug("in_ep = %02x, out_ep = %02x\n",
1142     - dev->in_ep, dev->out_ep);
1143     -
1144     params.device = &dev->udev->dev;
1145     params.buffer_size = dev->buffer_size;
1146     params.num_buffers = MAX_BUFFERS;
1147     diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
1148     index c630a9f8e356..a905d79381da 100644
1149     --- a/drivers/media/usb/uvc/uvc_driver.c
1150     +++ b/drivers/media/usb/uvc/uvc_driver.c
1151     @@ -868,7 +868,7 @@ static struct uvc_entity *uvc_alloc_entity(u16 type, u8 id,
1152     unsigned int size;
1153     unsigned int i;
1154    
1155     - extra_size = ALIGN(extra_size, sizeof(*entity->pads));
1156     + extra_size = roundup(extra_size, sizeof(*entity->pads));
1157     num_inputs = (type & UVC_TERM_OUTPUT) ? num_pads : num_pads - 1;
1158     size = sizeof(*entity) + extra_size + sizeof(*entity->pads) * num_pads
1159     + num_inputs;
1160     diff --git a/drivers/misc/genwqe/card_dev.c b/drivers/misc/genwqe/card_dev.c
1161     index c0012ca4229e..74923ffb0df1 100644
1162     --- a/drivers/misc/genwqe/card_dev.c
1163     +++ b/drivers/misc/genwqe/card_dev.c
1164     @@ -782,6 +782,8 @@ static int genwqe_pin_mem(struct genwqe_file *cfile, struct genwqe_mem *m)
1165    
1166     if ((m->addr == 0x0) || (m->size == 0))
1167     return -EINVAL;
1168     + if (m->size > ULONG_MAX - PAGE_SIZE - (m->addr & ~PAGE_MASK))
1169     + return -EINVAL;
1170    
1171     map_addr = (m->addr & PAGE_MASK);
1172     map_size = round_up(m->size + (m->addr & ~PAGE_MASK), PAGE_SIZE);
1173     diff --git a/drivers/misc/genwqe/card_utils.c b/drivers/misc/genwqe/card_utils.c
1174     index 466a9b711480..b642b4fd731b 100644
1175     --- a/drivers/misc/genwqe/card_utils.c
1176     +++ b/drivers/misc/genwqe/card_utils.c
1177     @@ -582,6 +582,10 @@ int genwqe_user_vmap(struct genwqe_dev *cd, struct dma_mapping *m, void *uaddr,
1178     /* determine space needed for page_list. */
1179     data = (unsigned long)uaddr;
1180     offs = offset_in_page(data);
1181     + if (size > ULONG_MAX - PAGE_SIZE - offs) {
1182     + m->size = 0; /* mark unused and not added */
1183     + return -EINVAL;
1184     + }
1185     m->nr_pages = DIV_ROUND_UP(offs + size, PAGE_SIZE);
1186    
1187     m->page_list = kcalloc(m->nr_pages,
1188     diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
1189     index 7cee3e5db56c..dc510069d37b 100644
1190     --- a/drivers/net/dsa/mv88e6xxx/chip.c
1191     +++ b/drivers/net/dsa/mv88e6xxx/chip.c
1192     @@ -789,7 +789,7 @@ static uint64_t _mv88e6xxx_get_ethtool_stat(struct mv88e6xxx_chip *chip,
1193     err = mv88e6xxx_port_read(chip, port, s->reg + 1, &reg);
1194     if (err)
1195     return UINT64_MAX;
1196     - high = reg;
1197     + low |= ((u32)reg) << 16;
1198     }
1199     break;
1200     case BANK0:
1201     diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1202     index 620a470eb4c8..fbe3c2c114f9 100644
1203     --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1204     +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1205     @@ -1425,6 +1425,8 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_napi *bnapi, u32 *raw_cons,
1206     skb = bnxt_copy_skb(bnapi, data, len, dma_addr);
1207     bnxt_reuse_rx_data(rxr, cons, data);
1208     if (!skb) {
1209     + if (agg_bufs)
1210     + bnxt_reuse_rx_agg_bufs(bnapi, cp_cons, agg_bufs);
1211     rc = -ENOMEM;
1212     goto next_rx;
1213     }
1214     diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
1215     index 051ecc76a7ef..1eb34109b207 100644
1216     --- a/drivers/net/ethernet/freescale/fec_main.c
1217     +++ b/drivers/net/ethernet/freescale/fec_main.c
1218     @@ -3508,7 +3508,7 @@ failed_init:
1219     if (fep->reg_phy)
1220     regulator_disable(fep->reg_phy);
1221     failed_reset:
1222     - pm_runtime_put(&pdev->dev);
1223     + pm_runtime_put_noidle(&pdev->dev);
1224     pm_runtime_disable(&pdev->dev);
1225     failed_regulator:
1226     failed_clk_ipg:
1227     diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
1228     index d98b874a7238..f2904afe10e4 100644
1229     --- a/drivers/net/ethernet/marvell/mvneta.c
1230     +++ b/drivers/net/ethernet/marvell/mvneta.c
1231     @@ -4162,7 +4162,7 @@ static int mvneta_probe(struct platform_device *pdev)
1232     err = register_netdev(dev);
1233     if (err < 0) {
1234     dev_err(&pdev->dev, "failed to register\n");
1235     - goto err_free_stats;
1236     + goto err_netdev;
1237     }
1238    
1239     netdev_info(dev, "Using %s mac address %pM\n", mac_from,
1240     @@ -4181,13 +4181,11 @@ static int mvneta_probe(struct platform_device *pdev)
1241     return 0;
1242    
1243     err_netdev:
1244     - unregister_netdev(dev);
1245     if (pp->bm_priv) {
1246     mvneta_bm_pool_destroy(pp->bm_priv, pp->pool_long, 1 << pp->id);
1247     mvneta_bm_pool_destroy(pp->bm_priv, pp->pool_short,
1248     1 << pp->id);
1249     }
1250     -err_free_stats:
1251     free_percpu(pp->stats);
1252     err_free_ports:
1253     free_percpu(pp->ports);
1254     diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
1255     index ff62dc7485d5..0ea1c05f5f0e 100644
1256     --- a/drivers/net/ethernet/marvell/mvpp2.c
1257     +++ b/drivers/net/ethernet/marvell/mvpp2.c
1258     @@ -3938,7 +3938,7 @@ static inline void mvpp2_gmac_max_rx_size_set(struct mvpp2_port *port)
1259     /* Set defaults to the MVPP2 port */
1260     static void mvpp2_defaults_set(struct mvpp2_port *port)
1261     {
1262     - int tx_port_num, val, queue, ptxq, lrxq;
1263     + int tx_port_num, val, queue, lrxq;
1264    
1265     /* Configure port to loopback if needed */
1266     if (port->flags & MVPP2_F_LOOPBACK)
1267     @@ -3958,11 +3958,9 @@ static void mvpp2_defaults_set(struct mvpp2_port *port)
1268     mvpp2_write(port->priv, MVPP2_TXP_SCHED_CMD_1_REG, 0);
1269    
1270     /* Close bandwidth for all queues */
1271     - for (queue = 0; queue < MVPP2_MAX_TXQ; queue++) {
1272     - ptxq = mvpp2_txq_phys(port->id, queue);
1273     + for (queue = 0; queue < MVPP2_MAX_TXQ; queue++)
1274     mvpp2_write(port->priv,
1275     - MVPP2_TXQ_SCHED_TOKEN_CNTR_REG(ptxq), 0);
1276     - }
1277     + MVPP2_TXQ_SCHED_TOKEN_CNTR_REG(queue), 0);
1278    
1279     /* Set refill period to 1 usec, refill tokens
1280     * and bucket size to maximum
1281     @@ -4709,7 +4707,7 @@ static void mvpp2_txq_deinit(struct mvpp2_port *port,
1282     txq->descs_phys = 0;
1283    
1284     /* Set minimum bandwidth for disabled TXQs */
1285     - mvpp2_write(port->priv, MVPP2_TXQ_SCHED_TOKEN_CNTR_REG(txq->id), 0);
1286     + mvpp2_write(port->priv, MVPP2_TXQ_SCHED_TOKEN_CNTR_REG(txq->log_id), 0);
1287    
1288     /* Set Tx descriptors queue starting address and size */
1289     mvpp2_write(port->priv, MVPP2_TXQ_NUM_REG, txq->id);
1290     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
1291     index 8a9a332d78b4..74d2db505866 100644
1292     --- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
1293     +++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
1294     @@ -1930,6 +1930,8 @@ static int mlx4_en_set_tunable(struct net_device *dev,
1295     return ret;
1296     }
1297    
1298     +#define MLX4_EEPROM_PAGE_LEN 256
1299     +
1300     static int mlx4_en_get_module_info(struct net_device *dev,
1301     struct ethtool_modinfo *modinfo)
1302     {
1303     @@ -1964,7 +1966,7 @@ static int mlx4_en_get_module_info(struct net_device *dev,
1304     break;
1305     case MLX4_MODULE_ID_SFP:
1306     modinfo->type = ETH_MODULE_SFF_8472;
1307     - modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
1308     + modinfo->eeprom_len = MLX4_EEPROM_PAGE_LEN;
1309     break;
1310     default:
1311     return -ENOSYS;
1312     diff --git a/drivers/net/ethernet/mellanox/mlx4/port.c b/drivers/net/ethernet/mellanox/mlx4/port.c
1313     index b656dd5772e5..3173875a715f 100644
1314     --- a/drivers/net/ethernet/mellanox/mlx4/port.c
1315     +++ b/drivers/net/ethernet/mellanox/mlx4/port.c
1316     @@ -1960,11 +1960,6 @@ int mlx4_get_module_info(struct mlx4_dev *dev, u8 port,
1317     size -= offset + size - I2C_PAGE_SIZE;
1318    
1319     i2c_addr = I2C_ADDR_LOW;
1320     - if (offset >= I2C_PAGE_SIZE) {
1321     - /* Reset offset to high page */
1322     - i2c_addr = I2C_ADDR_HIGH;
1323     - offset -= I2C_PAGE_SIZE;
1324     - }
1325    
1326     cable_info = (struct mlx4_cable_info *)inmad->data;
1327     cable_info->dev_mem_address = cpu_to_be16(offset);
1328     diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
1329     index 2abeba41c0af..5fe3622d27d7 100644
1330     --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
1331     +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
1332     @@ -240,7 +240,8 @@ int stmmac_mdio_reset(struct mii_bus *bus)
1333     of_property_read_u32_array(np,
1334     "snps,reset-delays-us", data->delays, 3);
1335    
1336     - if (gpio_request(data->reset_gpio, "mdio-reset"))
1337     + if (devm_gpio_request(priv->device, data->reset_gpio,
1338     + "mdio-reset"))
1339     return 0;
1340     }
1341    
1342     diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
1343     index 4ab82b998a0f..a5acbcb3c044 100644
1344     --- a/drivers/net/usb/usbnet.c
1345     +++ b/drivers/net/usb/usbnet.c
1346     @@ -508,6 +508,7 @@ static int rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags)
1347    
1348     if (netif_running (dev->net) &&
1349     netif_device_present (dev->net) &&
1350     + test_bit(EVENT_DEV_OPEN, &dev->flags) &&
1351     !test_bit (EVENT_RX_HALT, &dev->flags) &&
1352     !test_bit (EVENT_DEV_ASLEEP, &dev->flags)) {
1353     switch (retval = usb_submit_urb (urb, GFP_ATOMIC)) {
1354     @@ -1394,6 +1395,11 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb,
1355     spin_unlock_irqrestore(&dev->txq.lock, flags);
1356     goto drop;
1357     }
1358     + if (netif_queue_stopped(net)) {
1359     + usb_autopm_put_interface_async(dev->intf);
1360     + spin_unlock_irqrestore(&dev->txq.lock, flags);
1361     + goto drop;
1362     + }
1363    
1364     #ifdef CONFIG_PM
1365     /* if this triggers the device is still a sleep */
1366     diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
1367     index 8f8fe6f2af5b..64f8f404c53f 100644
1368     --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
1369     +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
1370     @@ -3220,6 +3220,7 @@ brcmf_notify_sched_scan_results(struct brcmf_if *ifp,
1371     struct brcmf_pno_scanresults_le *pfn_result;
1372     u32 result_count;
1373     u32 status;
1374     + u32 datalen;
1375    
1376     brcmf_dbg(SCAN, "Enter\n");
1377    
1378     @@ -3245,6 +3246,14 @@ brcmf_notify_sched_scan_results(struct brcmf_if *ifp,
1379     if (result_count > 0) {
1380     int i;
1381    
1382     + data += sizeof(struct brcmf_pno_scanresults_le);
1383     + netinfo_start = (struct brcmf_pno_net_info_le *)data;
1384     + datalen = e->datalen - ((void *)netinfo_start - (void *)pfn_result);
1385     + if (datalen < result_count * sizeof(*netinfo)) {
1386     + brcmf_err("insufficient event data\n");
1387     + goto out_err;
1388     + }
1389     +
1390     request = kzalloc(sizeof(*request), GFP_KERNEL);
1391     ssid = kcalloc(result_count, sizeof(*ssid), GFP_KERNEL);
1392     channel = kcalloc(result_count, sizeof(*channel), GFP_KERNEL);
1393     @@ -3254,9 +3263,6 @@ brcmf_notify_sched_scan_results(struct brcmf_if *ifp,
1394     }
1395    
1396     request->wiphy = wiphy;
1397     - data += sizeof(struct brcmf_pno_scanresults_le);
1398     - netinfo_start = (struct brcmf_pno_net_info_le *)data;
1399     -
1400     for (i = 0; i < result_count; i++) {
1401     netinfo = &netinfo_start[i];
1402     if (!netinfo) {
1403     @@ -3266,6 +3272,8 @@ brcmf_notify_sched_scan_results(struct brcmf_if *ifp,
1404     goto out_err;
1405     }
1406    
1407     + if (netinfo->SSID_len > IEEE80211_MAX_SSID_LEN)
1408     + netinfo->SSID_len = IEEE80211_MAX_SSID_LEN;
1409     brcmf_dbg(SCAN, "SSID:%s Channel:%d\n",
1410     netinfo->SSID, netinfo->channel);
1411     memcpy(ssid[i].ssid, netinfo->SSID, netinfo->SSID_len);
1412     @@ -3571,6 +3579,8 @@ brcmf_wowl_nd_results(struct brcmf_if *ifp, const struct brcmf_event_msg *e,
1413    
1414     data += sizeof(struct brcmf_pno_scanresults_le);
1415     netinfo = (struct brcmf_pno_net_info_le *)data;
1416     + if (netinfo->SSID_len > IEEE80211_MAX_SSID_LEN)
1417     + netinfo->SSID_len = IEEE80211_MAX_SSID_LEN;
1418     memcpy(cfg->wowl.nd->ssid.ssid, netinfo->SSID, netinfo->SSID_len);
1419     cfg->wowl.nd->ssid.ssid_len = netinfo->SSID_len;
1420     cfg->wowl.nd->n_channels = 1;
1421     diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
1422     index ecfe056d7643..349cc5cb9e80 100644
1423     --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
1424     +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
1425     @@ -339,7 +339,8 @@ void brcmf_rx_frame(struct device *dev, struct sk_buff *skb, bool handle_event)
1426     } else {
1427     /* Process special event packets */
1428     if (handle_event)
1429     - brcmf_fweh_process_skb(ifp->drvr, skb);
1430     + brcmf_fweh_process_skb(ifp->drvr, skb,
1431     + BCMILCP_SUBTYPE_VENDOR_LONG);
1432    
1433     brcmf_netif_rx(ifp, skb);
1434     }
1435     @@ -356,7 +357,7 @@ void brcmf_rx_event(struct device *dev, struct sk_buff *skb)
1436     if (brcmf_rx_hdrpull(drvr, skb, &ifp))
1437     return;
1438    
1439     - brcmf_fweh_process_skb(ifp->drvr, skb);
1440     + brcmf_fweh_process_skb(ifp->drvr, skb, 0);
1441     brcmu_pkt_buf_free_skb(skb);
1442     }
1443    
1444     diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.h
1445     index 26ff5a9648f3..9cd112ef87d7 100644
1446     --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.h
1447     +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.h
1448     @@ -181,7 +181,7 @@ enum brcmf_fweh_event_code {
1449     */
1450     #define BRCM_OUI "\x00\x10\x18"
1451     #define BCMILCP_BCM_SUBTYPE_EVENT 1
1452     -
1453     +#define BCMILCP_SUBTYPE_VENDOR_LONG 32769
1454    
1455     /**
1456     * struct brcm_ethhdr - broadcom specific ether header.
1457     @@ -302,10 +302,10 @@ void brcmf_fweh_process_event(struct brcmf_pub *drvr,
1458     void brcmf_fweh_p2pdev_setup(struct brcmf_if *ifp, bool ongoing);
1459    
1460     static inline void brcmf_fweh_process_skb(struct brcmf_pub *drvr,
1461     - struct sk_buff *skb)
1462     + struct sk_buff *skb, u16 stype)
1463     {
1464     struct brcmf_event *event_packet;
1465     - u16 usr_stype;
1466     + u16 subtype, usr_stype;
1467    
1468     /* only process events when protocol matches */
1469     if (skb->protocol != cpu_to_be16(ETH_P_LINK_CTL))
1470     @@ -314,8 +314,16 @@ static inline void brcmf_fweh_process_skb(struct brcmf_pub *drvr,
1471     if ((skb->len + ETH_HLEN) < sizeof(*event_packet))
1472     return;
1473    
1474     - /* check for BRCM oui match */
1475     event_packet = (struct brcmf_event *)skb_mac_header(skb);
1476     +
1477     + /* check subtype if needed */
1478     + if (unlikely(stype)) {
1479     + subtype = get_unaligned_be16(&event_packet->hdr.subtype);
1480     + if (subtype != stype)
1481     + return;
1482     + }
1483     +
1484     + /* check for BRCM oui match */
1485     if (memcmp(BRCM_OUI, &event_packet->hdr.oui[0],
1486     sizeof(event_packet->hdr.oui)))
1487     return;
1488     diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
1489     index 2b9a2bc429d6..ab9f136c1593 100644
1490     --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
1491     +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
1492     @@ -1114,7 +1114,7 @@ static void brcmf_msgbuf_process_event(struct brcmf_msgbuf *msgbuf, void *buf)
1493    
1494     skb->protocol = eth_type_trans(skb, ifp->ndev);
1495    
1496     - brcmf_fweh_process_skb(ifp->drvr, skb);
1497     + brcmf_fweh_process_skb(ifp->drvr, skb, 0);
1498    
1499     exit:
1500     brcmu_pkt_buf_free_skb(skb);
1501     diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c
1502     index c4953eca907d..7a5306bf56c8 100644
1503     --- a/drivers/parisc/ccio-dma.c
1504     +++ b/drivers/parisc/ccio-dma.c
1505     @@ -563,8 +563,6 @@ ccio_io_pdir_entry(u64 *pdir_ptr, space_t sid, unsigned long vba,
1506     /* We currently only support kernel addresses */
1507     BUG_ON(sid != KERNEL_SPACE);
1508    
1509     - mtsp(sid,1);
1510     -
1511     /*
1512     ** WORD 1 - low order word
1513     ** "hints" parm includes the VALID bit!
1514     @@ -595,7 +593,7 @@ ccio_io_pdir_entry(u64 *pdir_ptr, space_t sid, unsigned long vba,
1515     ** Grab virtual index [0:11]
1516     ** Deposit virt_idx bits into I/O PDIR word
1517     */
1518     - asm volatile ("lci %%r0(%%sr1, %1), %0" : "=r" (ci) : "r" (vba));
1519     + asm volatile ("lci %%r0(%1), %0" : "=r" (ci) : "r" (vba));
1520     asm volatile ("extru %1,19,12,%0" : "+r" (ci) : "r" (ci));
1521     asm volatile ("depw %1,15,12,%0" : "+r" (pa) : "r" (ci));
1522    
1523     diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c
1524     index 56918d1c0ed3..188fab57d170 100644
1525     --- a/drivers/parisc/sba_iommu.c
1526     +++ b/drivers/parisc/sba_iommu.c
1527     @@ -573,8 +573,7 @@ sba_io_pdir_entry(u64 *pdir_ptr, space_t sid, unsigned long vba,
1528     pa = virt_to_phys(vba);
1529     pa &= IOVP_MASK;
1530    
1531     - mtsp(sid,1);
1532     - asm("lci 0(%%sr1, %1), %0" : "=r" (ci) : "r" (vba));
1533     + asm("lci 0(%1), %0" : "=r" (ci) : "r" (vba));
1534     pa |= (ci >> PAGE_SHIFT) & 0xff; /* move CI (8 bits) into lowest byte */
1535    
1536     pa |= SBA_PDIR_VALID_BIT; /* set "valid" bit */
1537     diff --git a/drivers/s390/scsi/zfcp_ext.h b/drivers/s390/scsi/zfcp_ext.h
1538     index a39a74500e23..aeb93478482f 100644
1539     --- a/drivers/s390/scsi/zfcp_ext.h
1540     +++ b/drivers/s390/scsi/zfcp_ext.h
1541     @@ -161,6 +161,7 @@ extern const struct attribute_group *zfcp_port_attr_groups[];
1542     extern struct mutex zfcp_sysfs_port_units_mutex;
1543     extern struct device_attribute *zfcp_sysfs_sdev_attrs[];
1544     extern struct device_attribute *zfcp_sysfs_shost_attrs[];
1545     +bool zfcp_sysfs_port_is_removing(const struct zfcp_port *const port);
1546    
1547     /* zfcp_unit.c */
1548     extern int zfcp_unit_add(struct zfcp_port *, u64);
1549     diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c
1550     index bdb257eaa2e5..68146b398603 100644
1551     --- a/drivers/s390/scsi/zfcp_scsi.c
1552     +++ b/drivers/s390/scsi/zfcp_scsi.c
1553     @@ -124,6 +124,15 @@ static int zfcp_scsi_slave_alloc(struct scsi_device *sdev)
1554    
1555     zfcp_sdev->erp_action.port = port;
1556    
1557     + mutex_lock(&zfcp_sysfs_port_units_mutex);
1558     + if (zfcp_sysfs_port_is_removing(port)) {
1559     + /* port is already gone */
1560     + mutex_unlock(&zfcp_sysfs_port_units_mutex);
1561     + put_device(&port->dev); /* undo zfcp_get_port_by_wwpn() */
1562     + return -ENXIO;
1563     + }
1564     + mutex_unlock(&zfcp_sysfs_port_units_mutex);
1565     +
1566     unit = zfcp_unit_find(port, zfcp_scsi_dev_lun(sdev));
1567     if (unit)
1568     put_device(&unit->dev);
1569     diff --git a/drivers/s390/scsi/zfcp_sysfs.c b/drivers/s390/scsi/zfcp_sysfs.c
1570     index 96a0be13e841..5df597d1b978 100644
1571     --- a/drivers/s390/scsi/zfcp_sysfs.c
1572     +++ b/drivers/s390/scsi/zfcp_sysfs.c
1573     @@ -237,6 +237,53 @@ static ZFCP_DEV_ATTR(adapter, port_rescan, S_IWUSR, NULL,
1574    
1575     DEFINE_MUTEX(zfcp_sysfs_port_units_mutex);
1576    
1577     +static void zfcp_sysfs_port_set_removing(struct zfcp_port *const port)
1578     +{
1579     + lockdep_assert_held(&zfcp_sysfs_port_units_mutex);
1580     + atomic_set(&port->units, -1);
1581     +}
1582     +
1583     +bool zfcp_sysfs_port_is_removing(const struct zfcp_port *const port)
1584     +{
1585     + lockdep_assert_held(&zfcp_sysfs_port_units_mutex);
1586     + return atomic_read(&port->units) == -1;
1587     +}
1588     +
1589     +static bool zfcp_sysfs_port_in_use(struct zfcp_port *const port)
1590     +{
1591     + struct zfcp_adapter *const adapter = port->adapter;
1592     + unsigned long flags;
1593     + struct scsi_device *sdev;
1594     + bool in_use = true;
1595     +
1596     + mutex_lock(&zfcp_sysfs_port_units_mutex);
1597     + if (atomic_read(&port->units) > 0)
1598     + goto unlock_port_units_mutex; /* zfcp_unit(s) under port */
1599     +
1600     + spin_lock_irqsave(adapter->scsi_host->host_lock, flags);
1601     + __shost_for_each_device(sdev, adapter->scsi_host) {
1602     + const struct zfcp_scsi_dev *zsdev = sdev_to_zfcp(sdev);
1603     +
1604     + if (sdev->sdev_state == SDEV_DEL ||
1605     + sdev->sdev_state == SDEV_CANCEL)
1606     + continue;
1607     + if (zsdev->port != port)
1608     + continue;
1609     + /* alive scsi_device under port of interest */
1610     + goto unlock_host_lock;
1611     + }
1612     +
1613     + /* port is about to be removed, so no more unit_add or slave_alloc */
1614     + zfcp_sysfs_port_set_removing(port);
1615     + in_use = false;
1616     +
1617     +unlock_host_lock:
1618     + spin_unlock_irqrestore(adapter->scsi_host->host_lock, flags);
1619     +unlock_port_units_mutex:
1620     + mutex_unlock(&zfcp_sysfs_port_units_mutex);
1621     + return in_use;
1622     +}
1623     +
1624     static ssize_t zfcp_sysfs_port_remove_store(struct device *dev,
1625     struct device_attribute *attr,
1626     const char *buf, size_t count)
1627     @@ -259,15 +306,11 @@ static ssize_t zfcp_sysfs_port_remove_store(struct device *dev,
1628     else
1629     retval = 0;
1630    
1631     - mutex_lock(&zfcp_sysfs_port_units_mutex);
1632     - if (atomic_read(&port->units) > 0) {
1633     + if (zfcp_sysfs_port_in_use(port)) {
1634     retval = -EBUSY;
1635     - mutex_unlock(&zfcp_sysfs_port_units_mutex);
1636     + put_device(&port->dev); /* undo zfcp_get_port_by_wwpn() */
1637     goto out;
1638     }
1639     - /* port is about to be removed, so no more unit_add */
1640     - atomic_set(&port->units, -1);
1641     - mutex_unlock(&zfcp_sysfs_port_units_mutex);
1642    
1643     write_lock_irq(&adapter->port_list_lock);
1644     list_del(&port->list);
1645     diff --git a/drivers/s390/scsi/zfcp_unit.c b/drivers/s390/scsi/zfcp_unit.c
1646     index 9310a547b89f..1435029ade55 100644
1647     --- a/drivers/s390/scsi/zfcp_unit.c
1648     +++ b/drivers/s390/scsi/zfcp_unit.c
1649     @@ -123,7 +123,7 @@ int zfcp_unit_add(struct zfcp_port *port, u64 fcp_lun)
1650     int retval = 0;
1651    
1652     mutex_lock(&zfcp_sysfs_port_units_mutex);
1653     - if (atomic_read(&port->units) == -1) {
1654     + if (zfcp_sysfs_port_is_removing(port)) {
1655     /* port is already gone */
1656     retval = -ENODEV;
1657     goto out;
1658     @@ -167,8 +167,14 @@ int zfcp_unit_add(struct zfcp_port *port, u64 fcp_lun)
1659     write_lock_irq(&port->unit_list_lock);
1660     list_add_tail(&unit->list, &port->unit_list);
1661     write_unlock_irq(&port->unit_list_lock);
1662     + /*
1663     + * lock order: shost->scan_mutex before zfcp_sysfs_port_units_mutex
1664     + * due to zfcp_unit_scsi_scan() => zfcp_scsi_slave_alloc()
1665     + */
1666     + mutex_unlock(&zfcp_sysfs_port_units_mutex);
1667    
1668     zfcp_unit_scsi_scan(unit);
1669     + return retval;
1670    
1671     out:
1672     mutex_unlock(&zfcp_sysfs_port_units_mutex);
1673     diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
1674     index f72eebc71dd8..94590ac5b3cf 100644
1675     --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
1676     +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
1677     @@ -381,9 +381,18 @@ create_pagelist(char __user *buf, size_t count, unsigned short type,
1678     int run, addridx, actual_pages;
1679     unsigned long *need_release;
1680    
1681     + if (count >= INT_MAX - PAGE_SIZE)
1682     + return NULL;
1683     +
1684     offset = (unsigned int)buf & (PAGE_SIZE - 1);
1685     num_pages = (count + offset + PAGE_SIZE - 1) / PAGE_SIZE;
1686    
1687     + if (num_pages > (SIZE_MAX - sizeof(PAGELIST_T) -
1688     + sizeof(struct vchiq_pagelist_info)) /
1689     + (sizeof(u32) + sizeof(pages[0]) +
1690     + sizeof(struct scatterlist)))
1691     + return NULL;
1692     +
1693     *ppagelist = NULL;
1694    
1695     /* Allocate enough storage to hold the page pointers and the page
1696     diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c
1697     index 5331baf3f699..ec3db8d8306c 100644
1698     --- a/drivers/tty/serial/max310x.c
1699     +++ b/drivers/tty/serial/max310x.c
1700     @@ -579,7 +579,7 @@ static int max310x_set_ref_clk(struct max310x_port *s, unsigned long freq,
1701     }
1702    
1703     /* Configure clock source */
1704     - clksrc = xtal ? MAX310X_CLKSRC_CRYST_BIT : MAX310X_CLKSRC_EXTCLK_BIT;
1705     + clksrc = MAX310X_CLKSRC_EXTCLK_BIT | (xtal ? MAX310X_CLKSRC_CRYST_BIT : 0);
1706    
1707     /* Configure PLL */
1708     if (pllcfg) {
1709     diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
1710     index 6788e7532dff..7dc8272c6b15 100644
1711     --- a/drivers/tty/serial/msm_serial.c
1712     +++ b/drivers/tty/serial/msm_serial.c
1713     @@ -868,6 +868,7 @@ static void msm_handle_tx(struct uart_port *port)
1714     struct circ_buf *xmit = &msm_port->uart.state->xmit;
1715     struct msm_dma *dma = &msm_port->tx_dma;
1716     unsigned int pio_count, dma_count, dma_min;
1717     + char buf[4] = { 0 };
1718     void __iomem *tf;
1719     int err = 0;
1720    
1721     @@ -877,10 +878,12 @@ static void msm_handle_tx(struct uart_port *port)
1722     else
1723     tf = port->membase + UART_TF;
1724    
1725     + buf[0] = port->x_char;
1726     +
1727     if (msm_port->is_uartdm)
1728     msm_reset_dm_count(port, 1);
1729    
1730     - iowrite8_rep(tf, &port->x_char, 1);
1731     + iowrite32_rep(tf, buf, 1);
1732     port->icount.tx++;
1733     port->x_char = 0;
1734     return;
1735     diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
1736     index 55ed4c66f77f..680fb3f9be2d 100644
1737     --- a/drivers/tty/serial/serial_core.c
1738     +++ b/drivers/tty/serial/serial_core.c
1739     @@ -141,9 +141,6 @@ static void uart_start(struct tty_struct *tty)
1740     struct uart_port *port;
1741     unsigned long flags;
1742    
1743     - if (!state)
1744     - return;
1745     -
1746     port = uart_port_lock(state, flags);
1747     __uart_start(tty);
1748     uart_port_unlock(port, flags);
1749     @@ -1714,11 +1711,8 @@ static void uart_dtr_rts(struct tty_port *port, int onoff)
1750     */
1751     static int uart_open(struct tty_struct *tty, struct file *filp)
1752     {
1753     - struct uart_driver *drv = tty->driver->driver_state;
1754     - int retval, line = tty->index;
1755     - struct uart_state *state = drv->state + line;
1756     -
1757     - tty->driver_data = state;
1758     + struct uart_state *state = tty->driver_data;
1759     + int retval;
1760    
1761     retval = tty_port_open(&state->port, tty, filp);
1762     if (retval > 0)
1763     @@ -2409,9 +2403,6 @@ static void uart_poll_put_char(struct tty_driver *driver, int line, char ch)
1764     struct uart_state *state = drv->state + line;
1765     struct uart_port *port;
1766    
1767     - if (!state)
1768     - return;
1769     -
1770     port = uart_port_ref(state);
1771     if (!port)
1772     return;
1773     @@ -2423,7 +2414,18 @@ static void uart_poll_put_char(struct tty_driver *driver, int line, char ch)
1774     }
1775     #endif
1776    
1777     +static int uart_install(struct tty_driver *driver, struct tty_struct *tty)
1778     +{
1779     + struct uart_driver *drv = driver->driver_state;
1780     + struct uart_state *state = drv->state + tty->index;
1781     +
1782     + tty->driver_data = state;
1783     +
1784     + return tty_standard_install(driver, tty);
1785     +}
1786     +
1787     static const struct tty_operations uart_ops = {
1788     + .install = uart_install,
1789     .open = uart_open,
1790     .close = uart_close,
1791     .write = uart_write,
1792     diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
1793     index 5e6136d2ed71..eb12eea13770 100644
1794     --- a/drivers/usb/core/config.c
1795     +++ b/drivers/usb/core/config.c
1796     @@ -931,8 +931,8 @@ int usb_get_bos_descriptor(struct usb_device *dev)
1797    
1798     /* Get BOS descriptor */
1799     ret = usb_get_descriptor(dev, USB_DT_BOS, 0, bos, USB_DT_BOS_SIZE);
1800     - if (ret < USB_DT_BOS_SIZE) {
1801     - dev_err(ddev, "unable to get BOS descriptor\n");
1802     + if (ret < USB_DT_BOS_SIZE || bos->bLength < USB_DT_BOS_SIZE) {
1803     + dev_err(ddev, "unable to get BOS descriptor or descriptor too short\n");
1804     if (ret >= 0)
1805     ret = -ENOMSG;
1806     kfree(bos);
1807     diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
1808     index 733479ddf8a7..38c7676e7a82 100644
1809     --- a/drivers/usb/core/quirks.c
1810     +++ b/drivers/usb/core/quirks.c
1811     @@ -64,6 +64,9 @@ static const struct usb_device_id usb_quirk_list[] = {
1812     /* Microsoft LifeCam-VX700 v2.0 */
1813     { USB_DEVICE(0x045e, 0x0770), .driver_info = USB_QUIRK_RESET_RESUME },
1814    
1815     + /* Microsoft Surface Dock Ethernet (RTL8153 GigE) */
1816     + { USB_DEVICE(0x045e, 0x07c6), .driver_info = USB_QUIRK_NO_LPM },
1817     +
1818     /* Cherry Stream G230 2.0 (G85-231) and 3.0 (G85-232) */
1819     { USB_DEVICE(0x046a, 0x0023), .driver_info = USB_QUIRK_RESET_RESUME },
1820    
1821     diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
1822     index 879d82223068..d2e3917cbd91 100644
1823     --- a/drivers/usb/host/xhci-ring.c
1824     +++ b/drivers/usb/host/xhci-ring.c
1825     @@ -678,6 +678,7 @@ void xhci_unmap_td_bounce_buffer(struct xhci_hcd *xhci, struct xhci_ring *ring,
1826     struct device *dev = xhci_to_hcd(xhci)->self.controller;
1827     struct xhci_segment *seg = td->bounce_seg;
1828     struct urb *urb = td->urb;
1829     + size_t len;
1830    
1831     if (!seg || !urb)
1832     return;
1833     @@ -688,11 +689,14 @@ void xhci_unmap_td_bounce_buffer(struct xhci_hcd *xhci, struct xhci_ring *ring,
1834     return;
1835     }
1836    
1837     - /* for in tranfers we need to copy the data from bounce to sg */
1838     - sg_pcopy_from_buffer(urb->sg, urb->num_mapped_sgs, seg->bounce_buf,
1839     - seg->bounce_len, seg->bounce_offs);
1840     dma_unmap_single(dev, seg->bounce_dma, ring->bounce_buf_len,
1841     DMA_FROM_DEVICE);
1842     + /* for in tranfers we need to copy the data from bounce to sg */
1843     + len = sg_pcopy_from_buffer(urb->sg, urb->num_sgs, seg->bounce_buf,
1844     + seg->bounce_len, seg->bounce_offs);
1845     + if (len != seg->bounce_len)
1846     + xhci_warn(xhci, "WARN Wrong bounce buffer read length: %zu != %d\n",
1847     + len, seg->bounce_len);
1848     seg->bounce_len = 0;
1849     seg->bounce_offs = 0;
1850     }
1851     @@ -3163,6 +3167,7 @@ static int xhci_align_td(struct xhci_hcd *xhci, struct urb *urb, u32 enqd_len,
1852     unsigned int unalign;
1853     unsigned int max_pkt;
1854     u32 new_buff_len;
1855     + size_t len;
1856    
1857     max_pkt = GET_MAX_PACKET(usb_endpoint_maxp(&urb->ep->desc));
1858     unalign = (enqd_len + *trb_buff_len) % max_pkt;
1859     @@ -3193,8 +3198,12 @@ static int xhci_align_td(struct xhci_hcd *xhci, struct urb *urb, u32 enqd_len,
1860    
1861     /* create a max max_pkt sized bounce buffer pointed to by last trb */
1862     if (usb_urb_dir_out(urb)) {
1863     - sg_pcopy_to_buffer(urb->sg, urb->num_mapped_sgs,
1864     + len = sg_pcopy_to_buffer(urb->sg, urb->num_sgs,
1865     seg->bounce_buf, new_buff_len, enqd_len);
1866     + if (len != seg->bounce_len)
1867     + xhci_warn(xhci,
1868     + "WARN Wrong bounce buffer write length: %zu != %d\n",
1869     + len, seg->bounce_len);
1870     seg->bounce_dma = dma_map_single(dev, seg->bounce_buf,
1871     max_pkt, DMA_TO_DEVICE);
1872     } else {
1873     diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
1874     index 7ff32088cfa4..ebdd82091a42 100644
1875     --- a/drivers/usb/host/xhci.c
1876     +++ b/drivers/usb/host/xhci.c
1877     @@ -21,6 +21,7 @@
1878     */
1879    
1880     #include <linux/pci.h>
1881     +#include <linux/iopoll.h>
1882     #include <linux/irq.h>
1883     #include <linux/log2.h>
1884     #include <linux/module.h>
1885     @@ -47,7 +48,6 @@ static unsigned int quirks;
1886     module_param(quirks, uint, S_IRUGO);
1887     MODULE_PARM_DESC(quirks, "Bit flags for quirks to be enabled as default");
1888    
1889     -/* TODO: copied from ehci-hcd.c - can this be refactored? */
1890     /*
1891     * xhci_handshake - spin reading hc until handshake completes or fails
1892     * @ptr: address of hc register to be read
1893     @@ -64,18 +64,16 @@ MODULE_PARM_DESC(quirks, "Bit flags for quirks to be enabled as default");
1894     int xhci_handshake(void __iomem *ptr, u32 mask, u32 done, int usec)
1895     {
1896     u32 result;
1897     + int ret;
1898    
1899     - do {
1900     - result = readl(ptr);
1901     - if (result == ~(u32)0) /* card removed */
1902     - return -ENODEV;
1903     - result &= mask;
1904     - if (result == done)
1905     - return 0;
1906     - udelay(1);
1907     - usec--;
1908     - } while (usec > 0);
1909     - return -ETIMEDOUT;
1910     + ret = readl_poll_timeout_atomic(ptr, result,
1911     + (result & mask) == done ||
1912     + result == U32_MAX,
1913     + 1, usec);
1914     + if (result == U32_MAX) /* card removed */
1915     + return -ENODEV;
1916     +
1917     + return ret;
1918     }
1919    
1920     /*
1921     @@ -4174,7 +4172,6 @@ int xhci_set_usb2_hardware_lpm(struct usb_hcd *hcd,
1922     pm_addr = port_array[port_num] + PORTPMSC;
1923     pm_val = readl(pm_addr);
1924     hlpm_addr = port_array[port_num] + PORTHLPMC;
1925     - field = le32_to_cpu(udev->bos->ext_cap->bmAttributes);
1926    
1927     xhci_dbg(xhci, "%s port %d USB2 hardware LPM\n",
1928     enable ? "enable" : "disable", port_num + 1);
1929     @@ -4186,6 +4183,7 @@ int xhci_set_usb2_hardware_lpm(struct usb_hcd *hcd,
1930     * default one which works with mixed HIRD and BESL
1931     * systems. See XHCI_DEFAULT_BESL definition in xhci.h
1932     */
1933     + field = le32_to_cpu(udev->bos->ext_cap->bmAttributes);
1934     if ((field & USB_BESL_SUPPORT) &&
1935     (field & USB_BESL_BASELINE_VALID))
1936     hird = USB_GET_BESL_BASELINE(field);
1937     diff --git a/drivers/usb/misc/rio500.c b/drivers/usb/misc/rio500.c
1938     index 13731d512624..6e761fabffca 100644
1939     --- a/drivers/usb/misc/rio500.c
1940     +++ b/drivers/usb/misc/rio500.c
1941     @@ -103,9 +103,22 @@ static int close_rio(struct inode *inode, struct file *file)
1942     {
1943     struct rio_usb_data *rio = &rio_instance;
1944    
1945     - rio->isopen = 0;
1946     + /* against disconnect() */
1947     + mutex_lock(&rio500_mutex);
1948     + mutex_lock(&(rio->lock));
1949    
1950     - dev_info(&rio->rio_dev->dev, "Rio closed.\n");
1951     + rio->isopen = 0;
1952     + if (!rio->present) {
1953     + /* cleanup has been delayed */
1954     + kfree(rio->ibuf);
1955     + kfree(rio->obuf);
1956     + rio->ibuf = NULL;
1957     + rio->obuf = NULL;
1958     + } else {
1959     + dev_info(&rio->rio_dev->dev, "Rio closed.\n");
1960     + }
1961     + mutex_unlock(&(rio->lock));
1962     + mutex_unlock(&rio500_mutex);
1963     return 0;
1964     }
1965    
1966     @@ -464,15 +477,23 @@ static int probe_rio(struct usb_interface *intf,
1967     {
1968     struct usb_device *dev = interface_to_usbdev(intf);
1969     struct rio_usb_data *rio = &rio_instance;
1970     - int retval;
1971     + int retval = 0;
1972    
1973     - dev_info(&intf->dev, "USB Rio found at address %d\n", dev->devnum);
1974     + mutex_lock(&rio500_mutex);
1975     + if (rio->present) {
1976     + dev_info(&intf->dev, "Second USB Rio at address %d refused\n", dev->devnum);
1977     + retval = -EBUSY;
1978     + goto bail_out;
1979     + } else {
1980     + dev_info(&intf->dev, "USB Rio found at address %d\n", dev->devnum);
1981     + }
1982    
1983     retval = usb_register_dev(intf, &usb_rio_class);
1984     if (retval) {
1985     dev_err(&dev->dev,
1986     "Not able to get a minor for this device.\n");
1987     - return -ENOMEM;
1988     + retval = -ENOMEM;
1989     + goto bail_out;
1990     }
1991    
1992     rio->rio_dev = dev;
1993     @@ -481,7 +502,8 @@ static int probe_rio(struct usb_interface *intf,
1994     dev_err(&dev->dev,
1995     "probe_rio: Not enough memory for the output buffer\n");
1996     usb_deregister_dev(intf, &usb_rio_class);
1997     - return -ENOMEM;
1998     + retval = -ENOMEM;
1999     + goto bail_out;
2000     }
2001     dev_dbg(&intf->dev, "obuf address:%p\n", rio->obuf);
2002    
2003     @@ -490,7 +512,8 @@ static int probe_rio(struct usb_interface *intf,
2004     "probe_rio: Not enough memory for the input buffer\n");
2005     usb_deregister_dev(intf, &usb_rio_class);
2006     kfree(rio->obuf);
2007     - return -ENOMEM;
2008     + retval = -ENOMEM;
2009     + goto bail_out;
2010     }
2011     dev_dbg(&intf->dev, "ibuf address:%p\n", rio->ibuf);
2012    
2013     @@ -498,8 +521,10 @@ static int probe_rio(struct usb_interface *intf,
2014    
2015     usb_set_intfdata (intf, rio);
2016     rio->present = 1;
2017     +bail_out:
2018     + mutex_unlock(&rio500_mutex);
2019    
2020     - return 0;
2021     + return retval;
2022     }
2023    
2024     static void disconnect_rio(struct usb_interface *intf)
2025     diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c
2026     index 05bd39d62568..b7a4ba020893 100644
2027     --- a/drivers/usb/misc/sisusbvga/sisusb.c
2028     +++ b/drivers/usb/misc/sisusbvga/sisusb.c
2029     @@ -3041,6 +3041,13 @@ static int sisusb_probe(struct usb_interface *intf,
2030    
2031     mutex_init(&(sisusb->lock));
2032    
2033     + sisusb->sisusb_dev = dev;
2034     + sisusb->vrambase = SISUSB_PCI_MEMBASE;
2035     + sisusb->mmiobase = SISUSB_PCI_MMIOBASE;
2036     + sisusb->mmiosize = SISUSB_PCI_MMIOSIZE;
2037     + sisusb->ioportbase = SISUSB_PCI_IOPORTBASE;
2038     + /* Everything else is zero */
2039     +
2040     /* Register device */
2041     retval = usb_register_dev(intf, &usb_sisusb_class);
2042     if (retval) {
2043     @@ -3051,13 +3058,7 @@ static int sisusb_probe(struct usb_interface *intf,
2044     goto error_1;
2045     }
2046    
2047     - sisusb->sisusb_dev = dev;
2048     - sisusb->minor = intf->minor;
2049     - sisusb->vrambase = SISUSB_PCI_MEMBASE;
2050     - sisusb->mmiobase = SISUSB_PCI_MMIOBASE;
2051     - sisusb->mmiosize = SISUSB_PCI_MMIOSIZE;
2052     - sisusb->ioportbase = SISUSB_PCI_IOPORTBASE;
2053     - /* Everything else is zero */
2054     + sisusb->minor = intf->minor;
2055    
2056     /* Allocate buffers */
2057     sisusb->ibufsize = SISUSB_IBUF_SIZE;
2058     diff --git a/drivers/usb/usbip/stub_dev.c b/drivers/usb/usbip/stub_dev.c
2059     index 8e629b6a6f3f..a5a6a114219a 100644
2060     --- a/drivers/usb/usbip/stub_dev.c
2061     +++ b/drivers/usb/usbip/stub_dev.c
2062     @@ -315,9 +315,17 @@ static int stub_probe(struct usb_device *udev)
2063     const char *udev_busid = dev_name(&udev->dev);
2064     struct bus_id_priv *busid_priv;
2065     int rc = 0;
2066     + char save_status;
2067    
2068     dev_dbg(&udev->dev, "Enter probe\n");
2069    
2070     + /* Not sure if this is our device. Allocate here to avoid
2071     + * calling alloc while holding busid_table lock.
2072     + */
2073     + sdev = stub_device_alloc(udev);
2074     + if (!sdev)
2075     + return -ENOMEM;
2076     +
2077     /* check we should claim or not by busid_table */
2078     busid_priv = get_busid_priv(udev_busid);
2079     if (!busid_priv || (busid_priv->status == STUB_BUSID_REMOV) ||
2080     @@ -332,6 +340,9 @@ static int stub_probe(struct usb_device *udev)
2081     * See driver_probe_device() in driver/base/dd.c
2082     */
2083     rc = -ENODEV;
2084     + if (!busid_priv)
2085     + goto sdev_free;
2086     +
2087     goto call_put_busid_priv;
2088     }
2089    
2090     @@ -351,12 +362,6 @@ static int stub_probe(struct usb_device *udev)
2091     goto call_put_busid_priv;
2092     }
2093    
2094     - /* ok, this is my device */
2095     - sdev = stub_device_alloc(udev);
2096     - if (!sdev) {
2097     - rc = -ENOMEM;
2098     - goto call_put_busid_priv;
2099     - }
2100    
2101     dev_info(&udev->dev,
2102     "usbip-host: register new device (bus %u dev %u)\n",
2103     @@ -366,9 +371,16 @@ static int stub_probe(struct usb_device *udev)
2104    
2105     /* set private data to usb_device */
2106     dev_set_drvdata(&udev->dev, sdev);
2107     +
2108     busid_priv->sdev = sdev;
2109     busid_priv->udev = udev;
2110    
2111     + save_status = busid_priv->status;
2112     + busid_priv->status = STUB_BUSID_ALLOC;
2113     +
2114     + /* release the busid_lock */
2115     + put_busid_priv(busid_priv);
2116     +
2117     /*
2118     * Claim this hub port.
2119     * It doesn't matter what value we pass as owner
2120     @@ -386,10 +398,8 @@ static int stub_probe(struct usb_device *udev)
2121     dev_err(&udev->dev, "stub_add_files for %s\n", udev_busid);
2122     goto err_files;
2123     }
2124     - busid_priv->status = STUB_BUSID_ALLOC;
2125    
2126     - rc = 0;
2127     - goto call_put_busid_priv;
2128     + return 0;
2129    
2130     err_files:
2131     usb_hub_release_port(udev->parent, udev->portnum,
2132     @@ -398,23 +408,30 @@ err_port:
2133     dev_set_drvdata(&udev->dev, NULL);
2134     usb_put_dev(udev);
2135    
2136     + /* we already have busid_priv, just lock busid_lock */
2137     + spin_lock(&busid_priv->busid_lock);
2138     busid_priv->sdev = NULL;
2139     - stub_device_free(sdev);
2140     + busid_priv->status = save_status;
2141     + spin_unlock(&busid_priv->busid_lock);
2142     + /* lock is released - go to free */
2143     + goto sdev_free;
2144    
2145     call_put_busid_priv:
2146     + /* release the busid_lock */
2147     put_busid_priv(busid_priv);
2148     +
2149     +sdev_free:
2150     + stub_device_free(sdev);
2151     +
2152     return rc;
2153     }
2154    
2155     static void shutdown_busid(struct bus_id_priv *busid_priv)
2156     {
2157     - if (busid_priv->sdev && !busid_priv->shutdown_busid) {
2158     - busid_priv->shutdown_busid = 1;
2159     - usbip_event_add(&busid_priv->sdev->ud, SDEV_EVENT_REMOVED);
2160     + usbip_event_add(&busid_priv->sdev->ud, SDEV_EVENT_REMOVED);
2161    
2162     - /* wait for the stop of the event handler */
2163     - usbip_stop_eh(&busid_priv->sdev->ud);
2164     - }
2165     + /* wait for the stop of the event handler */
2166     + usbip_stop_eh(&busid_priv->sdev->ud);
2167     }
2168    
2169     /*
2170     @@ -441,11 +458,16 @@ static void stub_disconnect(struct usb_device *udev)
2171     /* get stub_device */
2172     if (!sdev) {
2173     dev_err(&udev->dev, "could not get device");
2174     - goto call_put_busid_priv;
2175     + /* release busid_lock */
2176     + put_busid_priv(busid_priv);
2177     + return;
2178     }
2179    
2180     dev_set_drvdata(&udev->dev, NULL);
2181    
2182     + /* release busid_lock before call to remove device files */
2183     + put_busid_priv(busid_priv);
2184     +
2185     /*
2186     * NOTE: rx/tx threads are invoked for each usb_device.
2187     */
2188     @@ -456,27 +478,36 @@ static void stub_disconnect(struct usb_device *udev)
2189     (struct usb_dev_state *) udev);
2190     if (rc) {
2191     dev_dbg(&udev->dev, "unable to release port\n");
2192     - goto call_put_busid_priv;
2193     + return;
2194     }
2195    
2196     /* If usb reset is called from event handler */
2197     if (usbip_in_eh(current))
2198     - goto call_put_busid_priv;
2199     + return;
2200     +
2201     + /* we already have busid_priv, just lock busid_lock */
2202     + spin_lock(&busid_priv->busid_lock);
2203     + if (!busid_priv->shutdown_busid)
2204     + busid_priv->shutdown_busid = 1;
2205     + /* release busid_lock */
2206     + spin_unlock(&busid_priv->busid_lock);
2207    
2208     /* shutdown the current connection */
2209     shutdown_busid(busid_priv);
2210    
2211     usb_put_dev(sdev->udev);
2212    
2213     + /* we already have busid_priv, just lock busid_lock */
2214     + spin_lock(&busid_priv->busid_lock);
2215     /* free sdev */
2216     busid_priv->sdev = NULL;
2217     stub_device_free(sdev);
2218    
2219     if (busid_priv->status == STUB_BUSID_ALLOC)
2220     busid_priv->status = STUB_BUSID_ADDED;
2221     -
2222     -call_put_busid_priv:
2223     - put_busid_priv(busid_priv);
2224     + /* release busid_lock */
2225     + spin_unlock(&busid_priv->busid_lock);
2226     + return;
2227     }
2228    
2229     #ifdef CONFIG_PM
2230     diff --git a/drivers/xen/xen-pciback/pciback_ops.c b/drivers/xen/xen-pciback/pciback_ops.c
2231     index f8c77751f330..e7fbed56c044 100644
2232     --- a/drivers/xen/xen-pciback/pciback_ops.c
2233     +++ b/drivers/xen/xen-pciback/pciback_ops.c
2234     @@ -126,8 +126,6 @@ void xen_pcibk_reset_device(struct pci_dev *dev)
2235     if (pci_is_enabled(dev))
2236     pci_disable_device(dev);
2237    
2238     - pci_write_config_word(dev, PCI_COMMAND, 0);
2239     -
2240     dev->is_busmaster = 0;
2241     } else {
2242     pci_read_config_word(dev, PCI_COMMAND, &cmd);
2243     diff --git a/drivers/xen/xenbus/xenbus_dev_frontend.c b/drivers/xen/xenbus/xenbus_dev_frontend.c
2244     index 0a3c6762df1b..07f6ba6ccaa7 100644
2245     --- a/drivers/xen/xenbus/xenbus_dev_frontend.c
2246     +++ b/drivers/xen/xenbus/xenbus_dev_frontend.c
2247     @@ -536,7 +536,7 @@ static int xenbus_file_open(struct inode *inode, struct file *filp)
2248     if (xen_store_evtchn == 0)
2249     return -ENOENT;
2250    
2251     - nonseekable_open(inode, filp);
2252     + stream_open(inode, filp);
2253    
2254     u = kzalloc(sizeof(*u), GFP_KERNEL);
2255     if (u == NULL)
2256     diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
2257     index a36bb75383dc..02bb7b52cb36 100644
2258     --- a/fs/btrfs/tree-log.c
2259     +++ b/fs/btrfs/tree-log.c
2260     @@ -2826,6 +2826,12 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans,
2261     root->log_transid++;
2262     log->log_transid = root->log_transid;
2263     root->log_start_pid = 0;
2264     + /*
2265     + * Update or create log root item under the root's log_mutex to prevent
2266     + * races with concurrent log syncs that can lead to failure to update
2267     + * log root item because it was not created yet.
2268     + */
2269     + ret = update_log_root(trans, log);
2270     /*
2271     * IO has been started, blocks of the log tree have WRITTEN flag set
2272     * in their headers. new modifications of the log will be written to
2273     @@ -2845,8 +2851,6 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans,
2274    
2275     mutex_unlock(&log_root_tree->log_mutex);
2276    
2277     - ret = update_log_root(trans, log);
2278     -
2279     mutex_lock(&log_root_tree->log_mutex);
2280     if (atomic_dec_and_test(&log_root_tree->log_writers)) {
2281     /*
2282     diff --git a/fs/cifs/file.c b/fs/cifs/file.c
2283     index e7f1773b25d6..df3ee0b6264f 100644
2284     --- a/fs/cifs/file.c
2285     +++ b/fs/cifs/file.c
2286     @@ -2892,7 +2892,9 @@ cifs_read_allocate_pages(struct cifs_readdata *rdata, unsigned int nr_pages)
2287     }
2288    
2289     if (rc) {
2290     - for (i = 0; i < nr_pages; i++) {
2291     + unsigned int nr_page_failed = i;
2292     +
2293     + for (i = 0; i < nr_page_failed; i++) {
2294     put_page(rdata->pages[i]);
2295     rdata->pages[i] = NULL;
2296     }
2297     diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
2298     index 411f16101d1a..eaedbc1a3e95 100644
2299     --- a/fs/fuse/dev.c
2300     +++ b/fs/fuse/dev.c
2301     @@ -1975,10 +1975,8 @@ static ssize_t fuse_dev_splice_write(struct pipe_inode_info *pipe,
2302     rem += pipe->bufs[(pipe->curbuf + idx) & (pipe->buffers - 1)].len;
2303    
2304     ret = -EINVAL;
2305     - if (rem < len) {
2306     - pipe_unlock(pipe);
2307     - goto out;
2308     - }
2309     + if (rem < len)
2310     + goto out_free;
2311    
2312     rem = len;
2313     while (rem) {
2314     @@ -1996,7 +1994,9 @@ static ssize_t fuse_dev_splice_write(struct pipe_inode_info *pipe,
2315     pipe->curbuf = (pipe->curbuf + 1) & (pipe->buffers - 1);
2316     pipe->nrbufs--;
2317     } else {
2318     - pipe_buf_get(pipe, ibuf);
2319     + if (!pipe_buf_get(pipe, ibuf))
2320     + goto out_free;
2321     +
2322     *obuf = *ibuf;
2323     obuf->flags &= ~PIPE_BUF_FLAG_GIFT;
2324     obuf->len = rem;
2325     @@ -2019,11 +2019,11 @@ static ssize_t fuse_dev_splice_write(struct pipe_inode_info *pipe,
2326     ret = fuse_dev_do_write(fud, &cs, len);
2327    
2328     pipe_lock(pipe);
2329     +out_free:
2330     for (idx = 0; idx < nbuf; idx++)
2331     pipe_buf_release(pipe, &bufs[idx]);
2332     pipe_unlock(pipe);
2333    
2334     -out:
2335     kfree(bufs);
2336     return ret;
2337     }
2338     diff --git a/fs/fuse/file.c b/fs/fuse/file.c
2339     index 037990342321..72be347a0469 100644
2340     --- a/fs/fuse/file.c
2341     +++ b/fs/fuse/file.c
2342     @@ -178,7 +178,9 @@ void fuse_finish_open(struct inode *inode, struct file *file)
2343     file->f_op = &fuse_direct_io_file_operations;
2344     if (!(ff->open_flags & FOPEN_KEEP_CACHE))
2345     invalidate_inode_pages2(inode->i_mapping);
2346     - if (ff->open_flags & FOPEN_NONSEEKABLE)
2347     + if (ff->open_flags & FOPEN_STREAM)
2348     + stream_open(inode, file);
2349     + else if (ff->open_flags & FOPEN_NONSEEKABLE)
2350     nonseekable_open(inode, file);
2351     if (fc->atomic_o_trunc && (file->f_flags & O_TRUNC)) {
2352     struct fuse_inode *fi = get_fuse_inode(inode);
2353     @@ -2965,7 +2967,7 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset,
2354     offset + length > i_size_read(inode)) {
2355     err = inode_newsize_ok(inode, offset + length);
2356     if (err)
2357     - return err;
2358     + goto out;
2359     }
2360    
2361     if (!(mode & FALLOC_FL_KEEP_SIZE))
2362     diff --git a/fs/open.c b/fs/open.c
2363     index f1deb36ee1b7..6ad9a21f2459 100644
2364     --- a/fs/open.c
2365     +++ b/fs/open.c
2366     @@ -1192,3 +1192,21 @@ int nonseekable_open(struct inode *inode, struct file *filp)
2367     }
2368    
2369     EXPORT_SYMBOL(nonseekable_open);
2370     +
2371     +/*
2372     + * stream_open is used by subsystems that want stream-like file descriptors.
2373     + * Such file descriptors are not seekable and don't have notion of position
2374     + * (file.f_pos is always 0). Contrary to file descriptors of other regular
2375     + * files, .read() and .write() can run simultaneously.
2376     + *
2377     + * stream_open never fails and is marked to return int so that it could be
2378     + * directly used as file_operations.open .
2379     + */
2380     +int stream_open(struct inode *inode, struct file *filp)
2381     +{
2382     + filp->f_mode &= ~(FMODE_LSEEK | FMODE_PREAD | FMODE_PWRITE | FMODE_ATOMIC_POS);
2383     + filp->f_mode |= FMODE_STREAM;
2384     + return 0;
2385     +}
2386     +
2387     +EXPORT_SYMBOL(stream_open);
2388     diff --git a/fs/pipe.c b/fs/pipe.c
2389     index 388e09a689de..347c6dc888c8 100644
2390     --- a/fs/pipe.c
2391     +++ b/fs/pipe.c
2392     @@ -193,9 +193,9 @@ EXPORT_SYMBOL(generic_pipe_buf_steal);
2393     * in the tee() system call, when we duplicate the buffers in one
2394     * pipe into another.
2395     */
2396     -void generic_pipe_buf_get(struct pipe_inode_info *pipe, struct pipe_buffer *buf)
2397     +bool generic_pipe_buf_get(struct pipe_inode_info *pipe, struct pipe_buffer *buf)
2398     {
2399     - get_page(buf->page);
2400     + return try_get_page(buf->page);
2401     }
2402     EXPORT_SYMBOL(generic_pipe_buf_get);
2403    
2404     diff --git a/fs/read_write.c b/fs/read_write.c
2405     index 6ab67b860159..9e1fd4c20e89 100644
2406     --- a/fs/read_write.c
2407     +++ b/fs/read_write.c
2408     @@ -575,12 +575,13 @@ EXPORT_SYMBOL(vfs_write);
2409    
2410     static inline loff_t file_pos_read(struct file *file)
2411     {
2412     - return file->f_pos;
2413     + return file->f_mode & FMODE_STREAM ? 0 : file->f_pos;
2414     }
2415    
2416     static inline void file_pos_write(struct file *file, loff_t pos)
2417     {
2418     - file->f_pos = pos;
2419     + if ((file->f_mode & FMODE_STREAM) == 0)
2420     + file->f_pos = pos;
2421     }
2422    
2423     SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)
2424     diff --git a/fs/splice.c b/fs/splice.c
2425     index 01983bea760c..8bfbc8a50164 100644
2426     --- a/fs/splice.c
2427     +++ b/fs/splice.c
2428     @@ -1585,7 +1585,11 @@ retry:
2429     * Get a reference to this pipe buffer,
2430     * so we can copy the contents over.
2431     */
2432     - pipe_buf_get(ipipe, ibuf);
2433     + if (!pipe_buf_get(ipipe, ibuf)) {
2434     + if (ret == 0)
2435     + ret = -EFAULT;
2436     + break;
2437     + }
2438     *obuf = *ibuf;
2439    
2440     /*
2441     @@ -1659,7 +1663,11 @@ static int link_pipe(struct pipe_inode_info *ipipe,
2442     * Get a reference to this pipe buffer,
2443     * so we can copy the contents over.
2444     */
2445     - pipe_buf_get(ipipe, ibuf);
2446     + if (!pipe_buf_get(ipipe, ibuf)) {
2447     + if (ret == 0)
2448     + ret = -EFAULT;
2449     + break;
2450     + }
2451    
2452     obuf = opipe->bufs + nbuf;
2453     *obuf = *ibuf;
2454     diff --git a/include/linux/bitops.h b/include/linux/bitops.h
2455     index d4b167fc9ecb..76ad8a957ffa 100644
2456     --- a/include/linux/bitops.h
2457     +++ b/include/linux/bitops.h
2458     @@ -58,7 +58,7 @@ static __always_inline unsigned long hweight_long(unsigned long w)
2459     */
2460     static inline __u64 rol64(__u64 word, unsigned int shift)
2461     {
2462     - return (word << shift) | (word >> (64 - shift));
2463     + return (word << (shift & 63)) | (word >> ((-shift) & 63));
2464     }
2465    
2466     /**
2467     @@ -68,7 +68,7 @@ static inline __u64 rol64(__u64 word, unsigned int shift)
2468     */
2469     static inline __u64 ror64(__u64 word, unsigned int shift)
2470     {
2471     - return (word >> shift) | (word << (64 - shift));
2472     + return (word >> (shift & 63)) | (word << ((-shift) & 63));
2473     }
2474    
2475     /**
2476     @@ -78,7 +78,7 @@ static inline __u64 ror64(__u64 word, unsigned int shift)
2477     */
2478     static inline __u32 rol32(__u32 word, unsigned int shift)
2479     {
2480     - return (word << shift) | (word >> ((-shift) & 31));
2481     + return (word << (shift & 31)) | (word >> ((-shift) & 31));
2482     }
2483    
2484     /**
2485     @@ -88,7 +88,7 @@ static inline __u32 rol32(__u32 word, unsigned int shift)
2486     */
2487     static inline __u32 ror32(__u32 word, unsigned int shift)
2488     {
2489     - return (word >> shift) | (word << (32 - shift));
2490     + return (word >> (shift & 31)) | (word << ((-shift) & 31));
2491     }
2492    
2493     /**
2494     @@ -98,7 +98,7 @@ static inline __u32 ror32(__u32 word, unsigned int shift)
2495     */
2496     static inline __u16 rol16(__u16 word, unsigned int shift)
2497     {
2498     - return (word << shift) | (word >> (16 - shift));
2499     + return (word << (shift & 15)) | (word >> ((-shift) & 15));
2500     }
2501    
2502     /**
2503     @@ -108,7 +108,7 @@ static inline __u16 rol16(__u16 word, unsigned int shift)
2504     */
2505     static inline __u16 ror16(__u16 word, unsigned int shift)
2506     {
2507     - return (word >> shift) | (word << (16 - shift));
2508     + return (word >> (shift & 15)) | (word << ((-shift) & 15));
2509     }
2510    
2511     /**
2512     @@ -118,7 +118,7 @@ static inline __u16 ror16(__u16 word, unsigned int shift)
2513     */
2514     static inline __u8 rol8(__u8 word, unsigned int shift)
2515     {
2516     - return (word << shift) | (word >> (8 - shift));
2517     + return (word << (shift & 7)) | (word >> ((-shift) & 7));
2518     }
2519    
2520     /**
2521     @@ -128,7 +128,7 @@ static inline __u8 rol8(__u8 word, unsigned int shift)
2522     */
2523     static inline __u8 ror8(__u8 word, unsigned int shift)
2524     {
2525     - return (word >> shift) | (word << (8 - shift));
2526     + return (word >> (shift & 7)) | (word << ((-shift) & 7));
2527     }
2528    
2529     /**
2530     diff --git a/include/linux/cpu.h b/include/linux/cpu.h
2531     index 166686209f2c..b27c9b2e683f 100644
2532     --- a/include/linux/cpu.h
2533     +++ b/include/linux/cpu.h
2534     @@ -271,11 +271,15 @@ extern enum cpuhp_smt_control cpu_smt_control;
2535     extern void cpu_smt_disable(bool force);
2536     extern void cpu_smt_check_topology_early(void);
2537     extern void cpu_smt_check_topology(void);
2538     +extern int cpuhp_smt_enable(void);
2539     +extern int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval);
2540     #else
2541     # define cpu_smt_control (CPU_SMT_ENABLED)
2542     static inline void cpu_smt_disable(bool force) { }
2543     static inline void cpu_smt_check_topology_early(void) { }
2544     static inline void cpu_smt_check_topology(void) { }
2545     +static inline int cpuhp_smt_enable(void) { return 0; }
2546     +static inline int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval) { return 0; }
2547     #endif
2548    
2549     /*
2550     diff --git a/include/linux/efi.h b/include/linux/efi.h
2551     index e6711bf9f0d1..02c4f16685b6 100644
2552     --- a/include/linux/efi.h
2553     +++ b/include/linux/efi.h
2554     @@ -1427,7 +1427,7 @@ efi_status_t handle_cmdline_files(efi_system_table_t *sys_table_arg,
2555     unsigned long *load_addr,
2556     unsigned long *load_size);
2557    
2558     -efi_status_t efi_parse_options(char *cmdline);
2559     +efi_status_t efi_parse_options(char const *cmdline);
2560    
2561     efi_status_t efi_setup_gop(efi_system_table_t *sys_table_arg,
2562     struct screen_info *si, efi_guid_t *proto,
2563     diff --git a/include/linux/fs.h b/include/linux/fs.h
2564     index bcad2b963296..5244df520bed 100644
2565     --- a/include/linux/fs.h
2566     +++ b/include/linux/fs.h
2567     @@ -143,6 +143,9 @@ typedef int (dio_iodone_t)(struct kiocb *iocb, loff_t offset,
2568     /* Has write method(s) */
2569     #define FMODE_CAN_WRITE ((__force fmode_t)0x40000)
2570    
2571     +/* File is stream-like */
2572     +#define FMODE_STREAM ((__force fmode_t)0x200000)
2573     +
2574     /* File was opened by fanotify and shouldn't generate fanotify events */
2575     #define FMODE_NONOTIFY ((__force fmode_t)0x4000000)
2576    
2577     @@ -2843,6 +2846,7 @@ extern loff_t no_seek_end_llseek_size(struct file *, loff_t, int, loff_t);
2578     extern loff_t no_seek_end_llseek(struct file *, loff_t, int);
2579     extern int generic_file_open(struct inode * inode, struct file * filp);
2580     extern int nonseekable_open(struct inode * inode, struct file * filp);
2581     +extern int stream_open(struct inode * inode, struct file * filp);
2582    
2583     #ifdef CONFIG_BLOCK
2584     typedef void (dio_submit_t)(struct bio *bio, struct inode *inode,
2585     diff --git a/include/linux/list_lru.h b/include/linux/list_lru.h
2586     index fa7fd03cb5f9..f2e966937e39 100644
2587     --- a/include/linux/list_lru.h
2588     +++ b/include/linux/list_lru.h
2589     @@ -51,6 +51,7 @@ struct list_lru {
2590     struct list_lru_node *node;
2591     #if defined(CONFIG_MEMCG) && !defined(CONFIG_SLOB)
2592     struct list_head list;
2593     + bool memcg_aware;
2594     #endif
2595     };
2596    
2597     diff --git a/include/linux/mm.h b/include/linux/mm.h
2598     index e3c8d40a18b5..478466081265 100644
2599     --- a/include/linux/mm.h
2600     +++ b/include/linux/mm.h
2601     @@ -763,6 +763,10 @@ static inline bool is_zone_device_page(const struct page *page)
2602     }
2603     #endif
2604    
2605     +/* 127: arbitrary random number, small enough to assemble well */
2606     +#define page_ref_zero_or_close_to_overflow(page) \
2607     + ((unsigned int) page_ref_count(page) + 127u <= 127u)
2608     +
2609     static inline void get_page(struct page *page)
2610     {
2611     page = compound_head(page);
2612     @@ -770,7 +774,7 @@ static inline void get_page(struct page *page)
2613     * Getting a normal page or the head of a compound page
2614     * requires to already have an elevated page->_refcount.
2615     */
2616     - VM_BUG_ON_PAGE(page_ref_count(page) <= 0, page);
2617     + VM_BUG_ON_PAGE(page_ref_zero_or_close_to_overflow(page), page);
2618     page_ref_inc(page);
2619    
2620     if (unlikely(is_zone_device_page(page)))
2621     diff --git a/include/linux/pipe_fs_i.h b/include/linux/pipe_fs_i.h
2622     index 4f7129389855..c6ae0d5e9f0f 100644
2623     --- a/include/linux/pipe_fs_i.h
2624     +++ b/include/linux/pipe_fs_i.h
2625     @@ -107,18 +107,20 @@ struct pipe_buf_operations {
2626     /*
2627     * Get a reference to the pipe buffer.
2628     */
2629     - void (*get)(struct pipe_inode_info *, struct pipe_buffer *);
2630     + bool (*get)(struct pipe_inode_info *, struct pipe_buffer *);
2631     };
2632    
2633     /**
2634     * pipe_buf_get - get a reference to a pipe_buffer
2635     * @pipe: the pipe that the buffer belongs to
2636     * @buf: the buffer to get a reference to
2637     + *
2638     + * Return: %true if the reference was successfully obtained.
2639     */
2640     -static inline void pipe_buf_get(struct pipe_inode_info *pipe,
2641     +static inline __must_check bool pipe_buf_get(struct pipe_inode_info *pipe,
2642     struct pipe_buffer *buf)
2643     {
2644     - buf->ops->get(pipe, buf);
2645     + return buf->ops->get(pipe, buf);
2646     }
2647    
2648     /**
2649     @@ -178,7 +180,7 @@ struct pipe_inode_info *alloc_pipe_info(void);
2650     void free_pipe_info(struct pipe_inode_info *);
2651    
2652     /* Generic pipe buffer ops functions */
2653     -void generic_pipe_buf_get(struct pipe_inode_info *, struct pipe_buffer *);
2654     +bool generic_pipe_buf_get(struct pipe_inode_info *, struct pipe_buffer *);
2655     int generic_pipe_buf_confirm(struct pipe_inode_info *, struct pipe_buffer *);
2656     int generic_pipe_buf_steal(struct pipe_inode_info *, struct pipe_buffer *);
2657     void generic_pipe_buf_release(struct pipe_inode_info *, struct pipe_buffer *);
2658     diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
2659     index 01f71e1d2e94..aa2935779e43 100644
2660     --- a/include/linux/rcupdate.h
2661     +++ b/include/linux/rcupdate.h
2662     @@ -306,14 +306,12 @@ void synchronize_rcu(void);
2663    
2664     static inline void __rcu_read_lock(void)
2665     {
2666     - if (IS_ENABLED(CONFIG_PREEMPT_COUNT))
2667     - preempt_disable();
2668     + preempt_disable();
2669     }
2670    
2671     static inline void __rcu_read_unlock(void)
2672     {
2673     - if (IS_ENABLED(CONFIG_PREEMPT_COUNT))
2674     - preempt_enable();
2675     + preempt_enable();
2676     }
2677    
2678     static inline void synchronize_rcu(void)
2679     diff --git a/include/net/arp.h b/include/net/arp.h
2680     index 1b3f86981757..92d2f7d7d1cb 100644
2681     --- a/include/net/arp.h
2682     +++ b/include/net/arp.h
2683     @@ -17,6 +17,7 @@ static inline u32 arp_hashfn(const void *pkey, const struct net_device *dev, u32
2684     return val * hash_rnd[0];
2685     }
2686    
2687     +#ifdef CONFIG_INET
2688     static inline struct neighbour *__ipv4_neigh_lookup_noref(struct net_device *dev, u32 key)
2689     {
2690     if (dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT))
2691     @@ -24,6 +25,13 @@ static inline struct neighbour *__ipv4_neigh_lookup_noref(struct net_device *dev
2692    
2693     return ___neigh_lookup_noref(&arp_tbl, neigh_key_eq32, arp_hashfn, &key, dev);
2694     }
2695     +#else
2696     +static inline
2697     +struct neighbour *__ipv4_neigh_lookup_noref(struct net_device *dev, u32 key)
2698     +{
2699     + return NULL;
2700     +}
2701     +#endif
2702    
2703     static inline struct neighbour *__ipv4_neigh_lookup(struct net_device *dev, u32 key)
2704     {
2705     diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
2706     index 03725fe89859..02137b508666 100644
2707     --- a/include/uapi/drm/i915_drm.h
2708     +++ b/include/uapi/drm/i915_drm.h
2709     @@ -756,7 +756,7 @@ struct drm_i915_gem_execbuffer2 {
2710     __u32 num_cliprects;
2711     /** This is a struct drm_clip_rect *cliprects */
2712     __u64 cliprects_ptr;
2713     -#define I915_EXEC_RING_MASK (7<<0)
2714     +#define I915_EXEC_RING_MASK (0x3f)
2715     #define I915_EXEC_DEFAULT (0<<0)
2716     #define I915_EXEC_RENDER (1<<0)
2717     #define I915_EXEC_BSD (2<<0)
2718     diff --git a/include/uapi/linux/fuse.h b/include/uapi/linux/fuse.h
2719     index 42fa977e3b14..8ca749a109d5 100644
2720     --- a/include/uapi/linux/fuse.h
2721     +++ b/include/uapi/linux/fuse.h
2722     @@ -215,10 +215,12 @@ struct fuse_file_lock {
2723     * FOPEN_DIRECT_IO: bypass page cache for this open file
2724     * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
2725     * FOPEN_NONSEEKABLE: the file is not seekable
2726     + * FOPEN_STREAM: the file is stream-like (no file position at all)
2727     */
2728     #define FOPEN_DIRECT_IO (1 << 0)
2729     #define FOPEN_KEEP_CACHE (1 << 1)
2730     #define FOPEN_NONSEEKABLE (1 << 2)
2731     +#define FOPEN_STREAM (1 << 4)
2732    
2733     /**
2734     * INIT request/reply flags
2735     diff --git a/include/uapi/linux/tipc_config.h b/include/uapi/linux/tipc_config.h
2736     index 087b0ef82c07..bbebd258cf07 100644
2737     --- a/include/uapi/linux/tipc_config.h
2738     +++ b/include/uapi/linux/tipc_config.h
2739     @@ -301,8 +301,10 @@ static inline int TLV_SET(void *tlv, __u16 type, void *data, __u16 len)
2740     tlv_ptr = (struct tlv_desc *)tlv;
2741     tlv_ptr->tlv_type = htons(type);
2742     tlv_ptr->tlv_len = htons(tlv_len);
2743     - if (len && data)
2744     - memcpy(TLV_DATA(tlv_ptr), data, tlv_len);
2745     + if (len && data) {
2746     + memcpy(TLV_DATA(tlv_ptr), data, len);
2747     + memset(TLV_DATA(tlv_ptr) + len, 0, TLV_SPACE(len) - tlv_len);
2748     + }
2749     return TLV_SPACE(len);
2750     }
2751    
2752     @@ -399,8 +401,10 @@ static inline int TCM_SET(void *msg, __u16 cmd, __u16 flags,
2753     tcm_hdr->tcm_len = htonl(msg_len);
2754     tcm_hdr->tcm_type = htons(cmd);
2755     tcm_hdr->tcm_flags = htons(flags);
2756     - if (data_len && data)
2757     + if (data_len && data) {
2758     memcpy(TCM_DATA(msg), data, data_len);
2759     + memset(TCM_DATA(msg) + data_len, 0, TCM_SPACE(data_len) - msg_len);
2760     + }
2761     return TCM_SPACE(data_len);
2762     }
2763    
2764     diff --git a/kernel/cpu.c b/kernel/cpu.c
2765     index db1a0bc46c3e..be8cc6c9c87d 100644
2766     --- a/kernel/cpu.c
2767     +++ b/kernel/cpu.c
2768     @@ -1995,7 +1995,7 @@ static void cpuhp_online_cpu_device(unsigned int cpu)
2769     kobject_uevent(&dev->kobj, KOBJ_ONLINE);
2770     }
2771    
2772     -static int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval)
2773     +int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval)
2774     {
2775     int cpu, ret = 0;
2776    
2777     @@ -2029,7 +2029,7 @@ static int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval)
2778     return ret;
2779     }
2780    
2781     -static int cpuhp_smt_enable(void)
2782     +int cpuhp_smt_enable(void)
2783     {
2784     int cpu, ret = 0;
2785    
2786     diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
2787     index b26dbc48c75b..81695a492ebe 100644
2788     --- a/kernel/power/hibernate.c
2789     +++ b/kernel/power/hibernate.c
2790     @@ -256,6 +256,11 @@ void swsusp_show_speed(ktime_t start, ktime_t stop,
2791     kps / 1000, (kps % 1000) / 10);
2792     }
2793    
2794     +__weak int arch_resume_nosmt(void)
2795     +{
2796     + return 0;
2797     +}
2798     +
2799     /**
2800     * create_image - Create a hibernation image.
2801     * @platform_mode: Whether or not to use the platform driver.
2802     @@ -322,6 +327,10 @@ static int create_image(int platform_mode)
2803     Enable_cpus:
2804     enable_nonboot_cpus();
2805    
2806     + /* Allow architectures to do nosmt-specific post-resume dances */
2807     + if (!in_suspend)
2808     + error = arch_resume_nosmt();
2809     +
2810     Platform_finish:
2811     platform_finish(platform_mode);
2812    
2813     diff --git a/kernel/signal.c b/kernel/signal.c
2814     index c091dcc9f19b..2bb1f9dc86c7 100644
2815     --- a/kernel/signal.c
2816     +++ b/kernel/signal.c
2817     @@ -2244,6 +2244,8 @@ relock:
2818     if (signal_group_exit(signal)) {
2819     ksig->info.si_signo = signr = SIGKILL;
2820     sigdelset(&current->pending.signal, SIGKILL);
2821     + trace_signal_deliver(SIGKILL, SEND_SIG_NOINFO,
2822     + &sighand->action[SIGKILL - 1]);
2823     recalc_sigpending();
2824     goto fatal;
2825     }
2826     diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
2827     index a2d8bd68c16e..fc59dd11090d 100644
2828     --- a/kernel/trace/trace.c
2829     +++ b/kernel/trace/trace.c
2830     @@ -6145,12 +6145,16 @@ static void buffer_pipe_buf_release(struct pipe_inode_info *pipe,
2831     buf->private = 0;
2832     }
2833    
2834     -static void buffer_pipe_buf_get(struct pipe_inode_info *pipe,
2835     +static bool buffer_pipe_buf_get(struct pipe_inode_info *pipe,
2836     struct pipe_buffer *buf)
2837     {
2838     struct buffer_ref *ref = (struct buffer_ref *)buf->private;
2839    
2840     + if (ref->ref > INT_MAX/2)
2841     + return false;
2842     +
2843     ref->ref++;
2844     + return true;
2845     }
2846    
2847     /* Pipe buffer operations for a buffer. */
2848     diff --git a/mm/gup.c b/mm/gup.c
2849     index 99c2f10188c0..6bb7a8eb7f82 100644
2850     --- a/mm/gup.c
2851     +++ b/mm/gup.c
2852     @@ -153,7 +153,10 @@ retry:
2853     }
2854    
2855     if (flags & FOLL_GET) {
2856     - get_page(page);
2857     + if (unlikely(!try_get_page(page))) {
2858     + page = ERR_PTR(-ENOMEM);
2859     + goto out;
2860     + }
2861    
2862     /* drop the pgmap reference now that we hold the page */
2863     if (pgmap) {
2864     @@ -292,7 +295,10 @@ struct page *follow_page_mask(struct vm_area_struct *vma,
2865     if (pmd_trans_unstable(pmd))
2866     ret = -EBUSY;
2867     } else {
2868     - get_page(page);
2869     + if (unlikely(!try_get_page(page))) {
2870     + spin_unlock(ptl);
2871     + return ERR_PTR(-ENOMEM);
2872     + }
2873     spin_unlock(ptl);
2874     lock_page(page);
2875     ret = split_huge_page(page);
2876     @@ -348,7 +354,10 @@ static int get_gate_page(struct mm_struct *mm, unsigned long address,
2877     goto unmap;
2878     *page = pte_page(*pte);
2879     }
2880     - get_page(*page);
2881     + if (unlikely(!try_get_page(*page))) {
2882     + ret = -ENOMEM;
2883     + goto unmap;
2884     + }
2885     out:
2886     ret = 0;
2887     unmap:
2888     @@ -1231,6 +1240,20 @@ struct page *get_dump_page(unsigned long addr)
2889     */
2890     #ifdef CONFIG_HAVE_GENERIC_RCU_GUP
2891    
2892     +/*
2893     + * Return the compund head page with ref appropriately incremented,
2894     + * or NULL if that failed.
2895     + */
2896     +static inline struct page *try_get_compound_head(struct page *page, int refs)
2897     +{
2898     + struct page *head = compound_head(page);
2899     + if (WARN_ON_ONCE(page_ref_count(head) < 0))
2900     + return NULL;
2901     + if (unlikely(!page_cache_add_speculative(head, refs)))
2902     + return NULL;
2903     + return head;
2904     +}
2905     +
2906     #ifdef __HAVE_ARCH_PTE_SPECIAL
2907     static int gup_pte_range(pmd_t pmd, unsigned long addr, unsigned long end,
2908     int write, struct page **pages, int *nr)
2909     @@ -1263,9 +1286,9 @@ static int gup_pte_range(pmd_t pmd, unsigned long addr, unsigned long end,
2910    
2911     VM_BUG_ON(!pfn_valid(pte_pfn(pte)));
2912     page = pte_page(pte);
2913     - head = compound_head(page);
2914    
2915     - if (!page_cache_get_speculative(head))
2916     + head = try_get_compound_head(page, 1);
2917     + if (!head)
2918     goto pte_unmap;
2919    
2920     if (unlikely(pte_val(pte) != pte_val(*ptep))) {
2921     @@ -1313,17 +1336,16 @@ static int gup_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr,
2922     return 0;
2923    
2924     refs = 0;
2925     - head = pmd_page(orig);
2926     - page = head + ((addr & ~PMD_MASK) >> PAGE_SHIFT);
2927     + page = pmd_page(orig) + ((addr & ~PMD_MASK) >> PAGE_SHIFT);
2928     do {
2929     - VM_BUG_ON_PAGE(compound_head(page) != head, page);
2930     pages[*nr] = page;
2931     (*nr)++;
2932     page++;
2933     refs++;
2934     } while (addr += PAGE_SIZE, addr != end);
2935    
2936     - if (!page_cache_add_speculative(head, refs)) {
2937     + head = try_get_compound_head(pmd_page(orig), refs);
2938     + if (!head) {
2939     *nr -= refs;
2940     return 0;
2941     }
2942     @@ -1348,17 +1370,16 @@ static int gup_huge_pud(pud_t orig, pud_t *pudp, unsigned long addr,
2943     return 0;
2944    
2945     refs = 0;
2946     - head = pud_page(orig);
2947     - page = head + ((addr & ~PUD_MASK) >> PAGE_SHIFT);
2948     + page = pud_page(orig) + ((addr & ~PUD_MASK) >> PAGE_SHIFT);
2949     do {
2950     - VM_BUG_ON_PAGE(compound_head(page) != head, page);
2951     pages[*nr] = page;
2952     (*nr)++;
2953     page++;
2954     refs++;
2955     } while (addr += PAGE_SIZE, addr != end);
2956    
2957     - if (!page_cache_add_speculative(head, refs)) {
2958     + head = try_get_compound_head(pud_page(orig), refs);
2959     + if (!head) {
2960     *nr -= refs;
2961     return 0;
2962     }
2963     @@ -1384,17 +1405,16 @@ static int gup_huge_pgd(pgd_t orig, pgd_t *pgdp, unsigned long addr,
2964     return 0;
2965    
2966     refs = 0;
2967     - head = pgd_page(orig);
2968     - page = head + ((addr & ~PGDIR_MASK) >> PAGE_SHIFT);
2969     + page = pgd_page(orig) + ((addr & ~PGDIR_MASK) >> PAGE_SHIFT);
2970     do {
2971     - VM_BUG_ON_PAGE(compound_head(page) != head, page);
2972     pages[*nr] = page;
2973     (*nr)++;
2974     page++;
2975     refs++;
2976     } while (addr += PAGE_SIZE, addr != end);
2977    
2978     - if (!page_cache_add_speculative(head, refs)) {
2979     + head = try_get_compound_head(pgd_page(orig), refs);
2980     + if (!head) {
2981     *nr -= refs;
2982     return 0;
2983     }
2984     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
2985     index 75d8bd7e8798..6b03cd9b6d37 100644
2986     --- a/mm/hugetlb.c
2987     +++ b/mm/hugetlb.c
2988     @@ -3984,6 +3984,7 @@ long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
2989     unsigned long vaddr = *position;
2990     unsigned long remainder = *nr_pages;
2991     struct hstate *h = hstate_vma(vma);
2992     + int err = -EFAULT;
2993    
2994     while (vaddr < vma->vm_end && remainder) {
2995     pte_t *pte;
2996     @@ -4055,6 +4056,19 @@ long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
2997    
2998     pfn_offset = (vaddr & ~huge_page_mask(h)) >> PAGE_SHIFT;
2999     page = pte_page(huge_ptep_get(pte));
3000     +
3001     + /*
3002     + * Instead of doing 'try_get_page()' below in the same_page
3003     + * loop, just check the count once here.
3004     + */
3005     + if (unlikely(page_count(page) <= 0)) {
3006     + if (pages) {
3007     + spin_unlock(ptl);
3008     + remainder = 0;
3009     + err = -ENOMEM;
3010     + break;
3011     + }
3012     + }
3013     same_page:
3014     if (pages) {
3015     pages[i] = mem_map_offset(page, pfn_offset);
3016     @@ -4081,7 +4095,7 @@ same_page:
3017     *nr_pages = remainder;
3018     *position = vaddr;
3019    
3020     - return i ? i : -EFAULT;
3021     + return i ? i : err;
3022     }
3023    
3024     #ifndef __HAVE_ARCH_FLUSH_HUGETLB_TLB_RANGE
3025     diff --git a/mm/list_lru.c b/mm/list_lru.c
3026     index 7a40fa2be858..db3a77c60201 100644
3027     --- a/mm/list_lru.c
3028     +++ b/mm/list_lru.c
3029     @@ -42,11 +42,7 @@ static void list_lru_unregister(struct list_lru *lru)
3030     #if defined(CONFIG_MEMCG) && !defined(CONFIG_SLOB)
3031     static inline bool list_lru_memcg_aware(struct list_lru *lru)
3032     {
3033     - /*
3034     - * This needs node 0 to be always present, even
3035     - * in the systems supporting sparse numa ids.
3036     - */
3037     - return !!lru->node[0].memcg_lrus;
3038     + return lru->memcg_aware;
3039     }
3040    
3041     static inline struct list_lru_one *
3042     @@ -389,6 +385,8 @@ static int memcg_init_list_lru(struct list_lru *lru, bool memcg_aware)
3043     {
3044     int i;
3045    
3046     + lru->memcg_aware = memcg_aware;
3047     +
3048     if (!memcg_aware)
3049     return 0;
3050    
3051     diff --git a/net/core/dev.c b/net/core/dev.c
3052     index 5a3196448bd7..4e10bae5e3da 100644
3053     --- a/net/core/dev.c
3054     +++ b/net/core/dev.c
3055     @@ -4828,7 +4828,6 @@ static struct sk_buff *napi_frags_skb(struct napi_struct *napi)
3056     skb_reset_mac_header(skb);
3057     skb_gro_reset_offset(skb);
3058    
3059     - eth = skb_gro_header_fast(skb, 0);
3060     if (unlikely(skb_gro_header_hard(skb, hlen))) {
3061     eth = skb_gro_header_slow(skb, hlen, 0);
3062     if (unlikely(!eth)) {
3063     @@ -4838,6 +4837,7 @@ static struct sk_buff *napi_frags_skb(struct napi_struct *napi)
3064     return NULL;
3065     }
3066     } else {
3067     + eth = (const struct ethhdr *)skb->data;
3068     gro_pull_from_frag0(skb, hlen);
3069     NAPI_GRO_CB(skb)->frag0 += hlen;
3070     NAPI_GRO_CB(skb)->frag0_len -= hlen;
3071     diff --git a/net/core/ethtool.c b/net/core/ethtool.c
3072     index 20ae57fbe009..ffe7b03c9ab5 100644
3073     --- a/net/core/ethtool.c
3074     +++ b/net/core/ethtool.c
3075     @@ -878,8 +878,13 @@ static noinline_for_stack int ethtool_get_drvinfo(struct net_device *dev,
3076     if (rc >= 0)
3077     info.n_priv_flags = rc;
3078     }
3079     - if (ops->get_regs_len)
3080     - info.regdump_len = ops->get_regs_len(dev);
3081     + if (ops->get_regs_len) {
3082     + int ret = ops->get_regs_len(dev);
3083     +
3084     + if (ret > 0)
3085     + info.regdump_len = ret;
3086     + }
3087     +
3088     if (ops->get_eeprom_len)
3089     info.eedump_len = ops->get_eeprom_len(dev);
3090    
3091     @@ -1380,6 +1385,9 @@ static int ethtool_get_regs(struct net_device *dev, char __user *useraddr)
3092     return -EFAULT;
3093    
3094     reglen = ops->get_regs_len(dev);
3095     + if (reglen <= 0)
3096     + return reglen;
3097     +
3098     if (regs.len > reglen)
3099     regs.len = reglen;
3100    
3101     @@ -1390,13 +1398,16 @@ static int ethtool_get_regs(struct net_device *dev, char __user *useraddr)
3102     return -ENOMEM;
3103     }
3104    
3105     + if (regs.len < reglen)
3106     + reglen = regs.len;
3107     +
3108     ops->get_regs(dev, &regs, regbuf);
3109    
3110     ret = -EFAULT;
3111     if (copy_to_user(useraddr, &regs, sizeof(regs)))
3112     goto out;
3113     useraddr += offsetof(struct ethtool_regs, data);
3114     - if (regbuf && copy_to_user(useraddr, regbuf, regs.len))
3115     + if (copy_to_user(useraddr, regbuf, reglen))
3116     goto out;
3117     ret = 0;
3118    
3119     diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c
3120     index c03dd2104d33..be4629c344a6 100644
3121     --- a/net/core/fib_rules.c
3122     +++ b/net/core/fib_rules.c
3123     @@ -429,10 +429,9 @@ int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr *nlh)
3124     if (rule->l3mdev && rule->table)
3125     goto errout_free;
3126    
3127     - if (rule_exists(ops, frh, tb, rule)) {
3128     - err = 0;
3129     - if (nlh->nlmsg_flags & NLM_F_EXCL)
3130     - err = -EEXIST;
3131     + if ((nlh->nlmsg_flags & NLM_F_EXCL) &&
3132     + rule_exists(ops, frh, tb, rule)) {
3133     + err = -EEXIST;
3134     goto errout_free;
3135     }
3136    
3137     diff --git a/net/core/neighbour.c b/net/core/neighbour.c
3138     index 8eb1916b742c..428dd614a18a 100644
3139     --- a/net/core/neighbour.c
3140     +++ b/net/core/neighbour.c
3141     @@ -30,6 +30,7 @@
3142     #include <linux/times.h>
3143     #include <net/net_namespace.h>
3144     #include <net/neighbour.h>
3145     +#include <net/arp.h>
3146     #include <net/dst.h>
3147     #include <net/sock.h>
3148     #include <net/netevent.h>
3149     @@ -2489,7 +2490,13 @@ int neigh_xmit(int index, struct net_device *dev,
3150     if (!tbl)
3151     goto out;
3152     rcu_read_lock_bh();
3153     - neigh = __neigh_lookup_noref(tbl, addr, dev);
3154     + if (index == NEIGH_ARP_TABLE) {
3155     + u32 key = *((u32 *)addr);
3156     +
3157     + neigh = __ipv4_neigh_lookup_noref(dev, key);
3158     + } else {
3159     + neigh = __neigh_lookup_noref(tbl, addr, dev);
3160     + }
3161     if (!neigh)
3162     neigh = __neigh_create(tbl, addr, dev, false);
3163     err = PTR_ERR(neigh);
3164     diff --git a/net/core/pktgen.c b/net/core/pktgen.c
3165     index 306b8f0e03c1..433b26feb320 100644
3166     --- a/net/core/pktgen.c
3167     +++ b/net/core/pktgen.c
3168     @@ -3147,7 +3147,13 @@ static int pktgen_wait_thread_run(struct pktgen_thread *t)
3169     {
3170     while (thread_is_running(t)) {
3171    
3172     + /* note: 't' will still be around even after the unlock/lock
3173     + * cycle because pktgen_thread threads are only cleared at
3174     + * net exit
3175     + */
3176     + mutex_unlock(&pktgen_thread_lock);
3177     msleep_interruptible(100);
3178     + mutex_lock(&pktgen_thread_lock);
3179    
3180     if (signal_pending(current))
3181     goto signal;
3182     @@ -3162,6 +3168,10 @@ static int pktgen_wait_all_threads_run(struct pktgen_net *pn)
3183     struct pktgen_thread *t;
3184     int sig = 1;
3185    
3186     + /* prevent from racing with rmmod */
3187     + if (!try_module_get(THIS_MODULE))
3188     + return sig;
3189     +
3190     mutex_lock(&pktgen_thread_lock);
3191    
3192     list_for_each_entry(t, &pn->pktgen_threads, th_list) {
3193     @@ -3175,6 +3185,7 @@ static int pktgen_wait_all_threads_run(struct pktgen_net *pn)
3194     t->control |= (T_STOP);
3195    
3196     mutex_unlock(&pktgen_thread_lock);
3197     + module_put(THIS_MODULE);
3198     return sig;
3199     }
3200    
3201     diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
3202     index f2e6e874e4ec..780dc6fe899d 100644
3203     --- a/net/ipv4/igmp.c
3204     +++ b/net/ipv4/igmp.c
3205     @@ -190,6 +190,17 @@ static void ip_ma_put(struct ip_mc_list *im)
3206     pmc != NULL; \
3207     pmc = rtnl_dereference(pmc->next_rcu))
3208    
3209     +static void ip_sf_list_clear_all(struct ip_sf_list *psf)
3210     +{
3211     + struct ip_sf_list *next;
3212     +
3213     + while (psf) {
3214     + next = psf->sf_next;
3215     + kfree(psf);
3216     + psf = next;
3217     + }
3218     +}
3219     +
3220     #ifdef CONFIG_IP_MULTICAST
3221    
3222     /*
3223     @@ -635,6 +646,13 @@ static void igmpv3_clear_zeros(struct ip_sf_list **ppsf)
3224     }
3225     }
3226    
3227     +static void kfree_pmc(struct ip_mc_list *pmc)
3228     +{
3229     + ip_sf_list_clear_all(pmc->sources);
3230     + ip_sf_list_clear_all(pmc->tomb);
3231     + kfree(pmc);
3232     +}
3233     +
3234     static void igmpv3_send_cr(struct in_device *in_dev)
3235     {
3236     struct ip_mc_list *pmc, *pmc_prev, *pmc_next;
3237     @@ -671,7 +689,7 @@ static void igmpv3_send_cr(struct in_device *in_dev)
3238     else
3239     in_dev->mc_tomb = pmc_next;
3240     in_dev_put(pmc->interface);
3241     - kfree(pmc);
3242     + kfree_pmc(pmc);
3243     } else
3244     pmc_prev = pmc;
3245     }
3246     @@ -1195,12 +1213,16 @@ static void igmpv3_del_delrec(struct in_device *in_dev, struct ip_mc_list *im)
3247     im->crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
3248     if (im->sfmode == MCAST_INCLUDE) {
3249     im->tomb = pmc->tomb;
3250     + pmc->tomb = NULL;
3251     +
3252     im->sources = pmc->sources;
3253     + pmc->sources = NULL;
3254     +
3255     for (psf = im->sources; psf; psf = psf->sf_next)
3256     psf->sf_crcount = im->crcount;
3257     }
3258     in_dev_put(pmc->interface);
3259     - kfree(pmc);
3260     + kfree_pmc(pmc);
3261     }
3262     spin_unlock_bh(&im->lock);
3263     }
3264     @@ -1221,21 +1243,18 @@ static void igmpv3_clear_delrec(struct in_device *in_dev)
3265     nextpmc = pmc->next;
3266     ip_mc_clear_src(pmc);
3267     in_dev_put(pmc->interface);
3268     - kfree(pmc);
3269     + kfree_pmc(pmc);
3270     }
3271     /* clear dead sources, too */
3272     rcu_read_lock();
3273     for_each_pmc_rcu(in_dev, pmc) {
3274     - struct ip_sf_list *psf, *psf_next;
3275     + struct ip_sf_list *psf;
3276    
3277     spin_lock_bh(&pmc->lock);
3278     psf = pmc->tomb;
3279     pmc->tomb = NULL;
3280     spin_unlock_bh(&pmc->lock);
3281     - for (; psf; psf = psf_next) {
3282     - psf_next = psf->sf_next;
3283     - kfree(psf);
3284     - }
3285     + ip_sf_list_clear_all(psf);
3286     }
3287     rcu_read_unlock();
3288     }
3289     @@ -2099,7 +2118,7 @@ static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
3290    
3291     static void ip_mc_clear_src(struct ip_mc_list *pmc)
3292     {
3293     - struct ip_sf_list *psf, *nextpsf, *tomb, *sources;
3294     + struct ip_sf_list *tomb, *sources;
3295    
3296     spin_lock_bh(&pmc->lock);
3297     tomb = pmc->tomb;
3298     @@ -2111,14 +2130,8 @@ static void ip_mc_clear_src(struct ip_mc_list *pmc)
3299     pmc->sfcount[MCAST_EXCLUDE] = 1;
3300     spin_unlock_bh(&pmc->lock);
3301    
3302     - for (psf = tomb; psf; psf = nextpsf) {
3303     - nextpsf = psf->sf_next;
3304     - kfree(psf);
3305     - }
3306     - for (psf = sources; psf; psf = nextpsf) {
3307     - nextpsf = psf->sf_next;
3308     - kfree(psf);
3309     - }
3310     + ip_sf_list_clear_all(tomb);
3311     + ip_sf_list_clear_all(sources);
3312     }
3313    
3314     /* Join a multicast group
3315     diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
3316     index a4f979ff31b9..301978df650e 100644
3317     --- a/net/ipv6/raw.c
3318     +++ b/net/ipv6/raw.c
3319     @@ -283,7 +283,9 @@ static int rawv6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
3320     /* Binding to link-local address requires an interface */
3321     if (!sk->sk_bound_dev_if)
3322     goto out_unlock;
3323     + }
3324    
3325     + if (sk->sk_bound_dev_if) {
3326     err = -ENODEV;
3327     dev = dev_get_by_index_rcu(sock_net(sk),
3328     sk->sk_bound_dev_if);
3329     @@ -772,6 +774,7 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
3330     struct sockcm_cookie sockc;
3331     struct ipcm6_cookie ipc6;
3332     int addr_len = msg->msg_namelen;
3333     + int hdrincl;
3334     u16 proto;
3335     int err;
3336    
3337     @@ -785,6 +788,13 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
3338     if (msg->msg_flags & MSG_OOB)
3339     return -EOPNOTSUPP;
3340    
3341     + /* hdrincl should be READ_ONCE(inet->hdrincl)
3342     + * but READ_ONCE() doesn't work with bit fields.
3343     + * Doing this indirectly yields the same result.
3344     + */
3345     + hdrincl = inet->hdrincl;
3346     + hdrincl = READ_ONCE(hdrincl);
3347     +
3348     /*
3349     * Get and verify the address.
3350     */
3351     @@ -878,11 +888,14 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
3352     opt = ipv6_fixup_options(&opt_space, opt);
3353    
3354     fl6.flowi6_proto = proto;
3355     - rfv.msg = msg;
3356     - rfv.hlen = 0;
3357     - err = rawv6_probe_proto_opt(&rfv, &fl6);
3358     - if (err)
3359     - goto out;
3360     +
3361     + if (!hdrincl) {
3362     + rfv.msg = msg;
3363     + rfv.hlen = 0;
3364     + err = rawv6_probe_proto_opt(&rfv, &fl6);
3365     + if (err)
3366     + goto out;
3367     + }
3368    
3369     if (!ipv6_addr_any(daddr))
3370     fl6.daddr = *daddr;
3371     @@ -899,7 +912,7 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
3372     fl6.flowi6_oif = np->ucast_oif;
3373     security_sk_classify_flow(sk, flowi6_to_flowi(&fl6));
3374    
3375     - if (inet->hdrincl)
3376     + if (hdrincl)
3377     fl6.flowi6_flags |= FLOWI_FLAG_KNOWN_NH;
3378    
3379     if (ipc6.tclass < 0)
3380     @@ -922,7 +935,7 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
3381     goto do_confirm;
3382    
3383     back_from_confirm:
3384     - if (inet->hdrincl)
3385     + if (hdrincl)
3386     err = rawv6_send_hdrinc(sk, msg, len, &fl6, &dst, msg->msg_flags);
3387     else {
3388     ipc6.opt = opt;
3389     diff --git a/net/llc/llc_output.c b/net/llc/llc_output.c
3390     index 94425e421213..9e4b6bcf6920 100644
3391     --- a/net/llc/llc_output.c
3392     +++ b/net/llc/llc_output.c
3393     @@ -72,6 +72,8 @@ int llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb,
3394     rc = llc_mac_hdr_init(skb, skb->dev->dev_addr, dmac);
3395     if (likely(!rc))
3396     rc = dev_queue_xmit(skb);
3397     + else
3398     + kfree_skb(skb);
3399     return rc;
3400     }
3401    
3402     diff --git a/net/rds/ib_rdma.c b/net/rds/ib_rdma.c
3403     index 91b53d462fc0..78d5d68cbbce 100644
3404     --- a/net/rds/ib_rdma.c
3405     +++ b/net/rds/ib_rdma.c
3406     @@ -416,12 +416,14 @@ int rds_ib_flush_mr_pool(struct rds_ib_mr_pool *pool,
3407     wait_clean_list_grace();
3408    
3409     list_to_llist_nodes(pool, &unmap_list, &clean_nodes, &clean_tail);
3410     - if (ibmr_ret)
3411     + if (ibmr_ret) {
3412     *ibmr_ret = llist_entry(clean_nodes, struct rds_ib_mr, llnode);
3413     -
3414     + clean_nodes = clean_nodes->next;
3415     + }
3416     /* more than one entry in llist nodes */
3417     - if (clean_nodes->next)
3418     - llist_add_batch(clean_nodes->next, clean_tail, &pool->clean_list);
3419     + if (clean_nodes)
3420     + llist_add_batch(clean_nodes, clean_tail,
3421     + &pool->clean_list);
3422    
3423     }
3424    
3425     diff --git a/net/tipc/core.c b/net/tipc/core.c
3426     index 974694121ce9..816c125bfc13 100644
3427     --- a/net/tipc/core.c
3428     +++ b/net/tipc/core.c
3429     @@ -62,10 +62,6 @@ static int __net_init tipc_init_net(struct net *net)
3430     INIT_LIST_HEAD(&tn->node_list);
3431     spin_lock_init(&tn->node_list_lock);
3432    
3433     - err = tipc_socket_init();
3434     - if (err)
3435     - goto out_socket;
3436     -
3437     err = tipc_sk_rht_init(net);
3438     if (err)
3439     goto out_sk_rht;
3440     @@ -75,9 +71,6 @@ static int __net_init tipc_init_net(struct net *net)
3441     goto out_nametbl;
3442    
3443     INIT_LIST_HEAD(&tn->dist_queue);
3444     - err = tipc_topsrv_start(net);
3445     - if (err)
3446     - goto out_subscr;
3447    
3448     err = tipc_bcast_init(net);
3449     if (err)
3450     @@ -86,25 +79,19 @@ static int __net_init tipc_init_net(struct net *net)
3451     return 0;
3452    
3453     out_bclink:
3454     - tipc_bcast_stop(net);
3455     -out_subscr:
3456     tipc_nametbl_stop(net);
3457     out_nametbl:
3458     tipc_sk_rht_destroy(net);
3459     out_sk_rht:
3460     - tipc_socket_stop();
3461     -out_socket:
3462     return err;
3463     }
3464    
3465     static void __net_exit tipc_exit_net(struct net *net)
3466     {
3467     - tipc_topsrv_stop(net);
3468     tipc_net_stop(net);
3469     tipc_bcast_stop(net);
3470     tipc_nametbl_stop(net);
3471     tipc_sk_rht_destroy(net);
3472     - tipc_socket_stop();
3473     }
3474    
3475     static struct pernet_operations tipc_net_ops = {
3476     @@ -114,6 +101,11 @@ static struct pernet_operations tipc_net_ops = {
3477     .size = sizeof(struct tipc_net),
3478     };
3479    
3480     +static struct pernet_operations tipc_topsrv_net_ops = {
3481     + .init = tipc_topsrv_init_net,
3482     + .exit = tipc_topsrv_exit_net,
3483     +};
3484     +
3485     static int __init tipc_init(void)
3486     {
3487     int err;
3488     @@ -140,6 +132,14 @@ static int __init tipc_init(void)
3489     if (err)
3490     goto out_pernet;
3491    
3492     + err = tipc_socket_init();
3493     + if (err)
3494     + goto out_socket;
3495     +
3496     + err = register_pernet_subsys(&tipc_topsrv_net_ops);
3497     + if (err)
3498     + goto out_pernet_topsrv;
3499     +
3500     err = tipc_bearer_setup();
3501     if (err)
3502     goto out_bearer;
3503     @@ -147,6 +147,10 @@ static int __init tipc_init(void)
3504     pr_info("Started in single node mode\n");
3505     return 0;
3506     out_bearer:
3507     + unregister_pernet_subsys(&tipc_topsrv_net_ops);
3508     +out_pernet_topsrv:
3509     + tipc_socket_stop();
3510     +out_socket:
3511     unregister_pernet_subsys(&tipc_net_ops);
3512     out_pernet:
3513     tipc_unregister_sysctl();
3514     @@ -162,6 +166,8 @@ out_netlink:
3515     static void __exit tipc_exit(void)
3516     {
3517     tipc_bearer_cleanup();
3518     + unregister_pernet_subsys(&tipc_topsrv_net_ops);
3519     + tipc_socket_stop();
3520     unregister_pernet_subsys(&tipc_net_ops);
3521     tipc_netlink_stop();
3522     tipc_netlink_compat_stop();
3523     diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c
3524     index d62affeb2a38..5e6dc7276abe 100644
3525     --- a/net/tipc/subscr.c
3526     +++ b/net/tipc/subscr.c
3527     @@ -358,7 +358,7 @@ static void *tipc_subscrb_connect_cb(int conid)
3528     return (void *)tipc_subscrb_create(conid);
3529     }
3530    
3531     -int tipc_topsrv_start(struct net *net)
3532     +static int tipc_topsrv_start(struct net *net)
3533     {
3534     struct tipc_net *tn = net_generic(net, tipc_net_id);
3535     const char name[] = "topology_server";
3536     @@ -396,7 +396,7 @@ int tipc_topsrv_start(struct net *net)
3537     return tipc_server_start(topsrv);
3538     }
3539    
3540     -void tipc_topsrv_stop(struct net *net)
3541     +static void tipc_topsrv_stop(struct net *net)
3542     {
3543     struct tipc_net *tn = net_generic(net, tipc_net_id);
3544     struct tipc_server *topsrv = tn->topsrv;
3545     @@ -405,3 +405,13 @@ void tipc_topsrv_stop(struct net *net)
3546     kfree(topsrv->saddr);
3547     kfree(topsrv);
3548     }
3549     +
3550     +int __net_init tipc_topsrv_init_net(struct net *net)
3551     +{
3552     + return tipc_topsrv_start(net);
3553     +}
3554     +
3555     +void __net_exit tipc_topsrv_exit_net(struct net *net)
3556     +{
3557     + tipc_topsrv_stop(net);
3558     +}
3559     diff --git a/net/tipc/subscr.h b/net/tipc/subscr.h
3560     index ffdc214c117a..814dfcef33c2 100644
3561     --- a/net/tipc/subscr.h
3562     +++ b/net/tipc/subscr.h
3563     @@ -75,7 +75,8 @@ void tipc_subscrp_report_overlap(struct tipc_subscription *sub,
3564     void tipc_subscrp_convert_seq(struct tipc_name_seq *in, int swap,
3565     struct tipc_name_seq *out);
3566     u32 tipc_subscrp_convert_seq_type(u32 type, int swap);
3567     -int tipc_topsrv_start(struct net *net);
3568     -void tipc_topsrv_stop(struct net *net);
3569     +
3570     +int __net_init tipc_topsrv_init_net(struct net *net);
3571     +void __net_exit tipc_topsrv_exit_net(struct net *net);
3572    
3573     #endif
3574     diff --git a/scripts/coccinelle/api/stream_open.cocci b/scripts/coccinelle/api/stream_open.cocci
3575     new file mode 100644
3576     index 000000000000..350145da7669
3577     --- /dev/null
3578     +++ b/scripts/coccinelle/api/stream_open.cocci
3579     @@ -0,0 +1,363 @@
3580     +// SPDX-License-Identifier: GPL-2.0
3581     +// Author: Kirill Smelkov (kirr@nexedi.com)
3582     +//
3583     +// Search for stream-like files that are using nonseekable_open and convert
3584     +// them to stream_open. A stream-like file is a file that does not use ppos in
3585     +// its read and write. Rationale for the conversion is to avoid deadlock in
3586     +// between read and write.
3587     +
3588     +virtual report
3589     +virtual patch
3590     +virtual explain // explain decisions in the patch (SPFLAGS="-D explain")
3591     +
3592     +// stream-like reader & writer - ones that do not depend on f_pos.
3593     +@ stream_reader @
3594     +identifier readstream, ppos;
3595     +identifier f, buf, len;
3596     +type loff_t;
3597     +@@
3598     + ssize_t readstream(struct file *f, char *buf, size_t len, loff_t *ppos)
3599     + {
3600     + ... when != ppos
3601     + }
3602     +
3603     +@ stream_writer @
3604     +identifier writestream, ppos;
3605     +identifier f, buf, len;
3606     +type loff_t;
3607     +@@
3608     + ssize_t writestream(struct file *f, const char *buf, size_t len, loff_t *ppos)
3609     + {
3610     + ... when != ppos
3611     + }
3612     +
3613     +
3614     +// a function that blocks
3615     +@ blocks @
3616     +identifier block_f;
3617     +identifier wait_event =~ "^wait_event_.*";
3618     +@@
3619     + block_f(...) {
3620     + ... when exists
3621     + wait_event(...)
3622     + ... when exists
3623     + }
3624     +
3625     +// stream_reader that can block inside.
3626     +//
3627     +// XXX wait_* can be called not directly from current function (e.g. func -> f -> g -> wait())
3628     +// XXX currently reader_blocks supports only direct and 1-level indirect cases.
3629     +@ reader_blocks_direct @
3630     +identifier stream_reader.readstream;
3631     +identifier wait_event =~ "^wait_event_.*";
3632     +@@
3633     + readstream(...)
3634     + {
3635     + ... when exists
3636     + wait_event(...)
3637     + ... when exists
3638     + }
3639     +
3640     +@ reader_blocks_1 @
3641     +identifier stream_reader.readstream;
3642     +identifier blocks.block_f;
3643     +@@
3644     + readstream(...)
3645     + {
3646     + ... when exists
3647     + block_f(...)
3648     + ... when exists
3649     + }
3650     +
3651     +@ reader_blocks depends on reader_blocks_direct || reader_blocks_1 @
3652     +identifier stream_reader.readstream;
3653     +@@
3654     + readstream(...) {
3655     + ...
3656     + }
3657     +
3658     +
3659     +// file_operations + whether they have _any_ .read, .write, .llseek ... at all.
3660     +//
3661     +// XXX add support for file_operations xxx[N] = ... (sound/core/pcm_native.c)
3662     +@ fops0 @
3663     +identifier fops;
3664     +@@
3665     + struct file_operations fops = {
3666     + ...
3667     + };
3668     +
3669     +@ has_read @
3670     +identifier fops0.fops;
3671     +identifier read_f;
3672     +@@
3673     + struct file_operations fops = {
3674     + .read = read_f,
3675     + };
3676     +
3677     +@ has_read_iter @
3678     +identifier fops0.fops;
3679     +identifier read_iter_f;
3680     +@@
3681     + struct file_operations fops = {
3682     + .read_iter = read_iter_f,
3683     + };
3684     +
3685     +@ has_write @
3686     +identifier fops0.fops;
3687     +identifier write_f;
3688     +@@
3689     + struct file_operations fops = {
3690     + .write = write_f,
3691     + };
3692     +
3693     +@ has_write_iter @
3694     +identifier fops0.fops;
3695     +identifier write_iter_f;
3696     +@@
3697     + struct file_operations fops = {
3698     + .write_iter = write_iter_f,
3699     + };
3700     +
3701     +@ has_llseek @
3702     +identifier fops0.fops;
3703     +identifier llseek_f;
3704     +@@
3705     + struct file_operations fops = {
3706     + .llseek = llseek_f,
3707     + };
3708     +
3709     +@ has_no_llseek @
3710     +identifier fops0.fops;
3711     +@@
3712     + struct file_operations fops = {
3713     + .llseek = no_llseek,
3714     + };
3715     +
3716     +@ has_mmap @
3717     +identifier fops0.fops;
3718     +identifier mmap_f;
3719     +@@
3720     + struct file_operations fops = {
3721     + .mmap = mmap_f,
3722     + };
3723     +
3724     +@ has_copy_file_range @
3725     +identifier fops0.fops;
3726     +identifier copy_file_range_f;
3727     +@@
3728     + struct file_operations fops = {
3729     + .copy_file_range = copy_file_range_f,
3730     + };
3731     +
3732     +@ has_remap_file_range @
3733     +identifier fops0.fops;
3734     +identifier remap_file_range_f;
3735     +@@
3736     + struct file_operations fops = {
3737     + .remap_file_range = remap_file_range_f,
3738     + };
3739     +
3740     +@ has_splice_read @
3741     +identifier fops0.fops;
3742     +identifier splice_read_f;
3743     +@@
3744     + struct file_operations fops = {
3745     + .splice_read = splice_read_f,
3746     + };
3747     +
3748     +@ has_splice_write @
3749     +identifier fops0.fops;
3750     +identifier splice_write_f;
3751     +@@
3752     + struct file_operations fops = {
3753     + .splice_write = splice_write_f,
3754     + };
3755     +
3756     +
3757     +// file_operations that is candidate for stream_open conversion - it does not
3758     +// use mmap and other methods that assume @offset access to file.
3759     +//
3760     +// XXX for simplicity require no .{read/write}_iter and no .splice_{read/write} for now.
3761     +// XXX maybe_steam.fops cannot be used in other rules - it gives "bad rule maybe_stream or bad variable fops".
3762     +@ maybe_stream depends on (!has_llseek || has_no_llseek) && !has_mmap && !has_copy_file_range && !has_remap_file_range && !has_read_iter && !has_write_iter && !has_splice_read && !has_splice_write @
3763     +identifier fops0.fops;
3764     +@@
3765     + struct file_operations fops = {
3766     + };
3767     +
3768     +
3769     +// ---- conversions ----
3770     +
3771     +// XXX .open = nonseekable_open -> .open = stream_open
3772     +// XXX .open = func -> openfunc -> nonseekable_open
3773     +
3774     +// read & write
3775     +//
3776     +// if both are used in the same file_operations together with an opener -
3777     +// under that conditions we can use stream_open instead of nonseekable_open.
3778     +@ fops_rw depends on maybe_stream @
3779     +identifier fops0.fops, openfunc;
3780     +identifier stream_reader.readstream;
3781     +identifier stream_writer.writestream;
3782     +@@
3783     + struct file_operations fops = {
3784     + .open = openfunc,
3785     + .read = readstream,
3786     + .write = writestream,
3787     + };
3788     +
3789     +@ report_rw depends on report @
3790     +identifier fops_rw.openfunc;
3791     +position p1;
3792     +@@
3793     + openfunc(...) {
3794     + <...
3795     + nonseekable_open@p1
3796     + ...>
3797     + }
3798     +
3799     +@ script:python depends on report && reader_blocks @
3800     +fops << fops0.fops;
3801     +p << report_rw.p1;
3802     +@@
3803     +coccilib.report.print_report(p[0],
3804     + "ERROR: %s: .read() can deadlock .write(); change nonseekable_open -> stream_open to fix." % (fops,))
3805     +
3806     +@ script:python depends on report && !reader_blocks @
3807     +fops << fops0.fops;
3808     +p << report_rw.p1;
3809     +@@
3810     +coccilib.report.print_report(p[0],
3811     + "WARNING: %s: .read() and .write() have stream semantic; safe to change nonseekable_open -> stream_open." % (fops,))
3812     +
3813     +
3814     +@ explain_rw_deadlocked depends on explain && reader_blocks @
3815     +identifier fops_rw.openfunc;
3816     +@@
3817     + openfunc(...) {
3818     + <...
3819     +- nonseekable_open
3820     ++ nonseekable_open /* read & write (was deadlock) */
3821     + ...>
3822     + }
3823     +
3824     +
3825     +@ explain_rw_nodeadlock depends on explain && !reader_blocks @
3826     +identifier fops_rw.openfunc;
3827     +@@
3828     + openfunc(...) {
3829     + <...
3830     +- nonseekable_open
3831     ++ nonseekable_open /* read & write (no direct deadlock) */
3832     + ...>
3833     + }
3834     +
3835     +@ patch_rw depends on patch @
3836     +identifier fops_rw.openfunc;
3837     +@@
3838     + openfunc(...) {
3839     + <...
3840     +- nonseekable_open
3841     ++ stream_open
3842     + ...>
3843     + }
3844     +
3845     +
3846     +// read, but not write
3847     +@ fops_r depends on maybe_stream && !has_write @
3848     +identifier fops0.fops, openfunc;
3849     +identifier stream_reader.readstream;
3850     +@@
3851     + struct file_operations fops = {
3852     + .open = openfunc,
3853     + .read = readstream,
3854     + };
3855     +
3856     +@ report_r depends on report @
3857     +identifier fops_r.openfunc;
3858     +position p1;
3859     +@@
3860     + openfunc(...) {
3861     + <...
3862     + nonseekable_open@p1
3863     + ...>
3864     + }
3865     +
3866     +@ script:python depends on report @
3867     +fops << fops0.fops;
3868     +p << report_r.p1;
3869     +@@
3870     +coccilib.report.print_report(p[0],
3871     + "WARNING: %s: .read() has stream semantic; safe to change nonseekable_open -> stream_open." % (fops,))
3872     +
3873     +@ explain_r depends on explain @
3874     +identifier fops_r.openfunc;
3875     +@@
3876     + openfunc(...) {
3877     + <...
3878     +- nonseekable_open
3879     ++ nonseekable_open /* read only */
3880     + ...>
3881     + }
3882     +
3883     +@ patch_r depends on patch @
3884     +identifier fops_r.openfunc;
3885     +@@
3886     + openfunc(...) {
3887     + <...
3888     +- nonseekable_open
3889     ++ stream_open
3890     + ...>
3891     + }
3892     +
3893     +
3894     +// write, but not read
3895     +@ fops_w depends on maybe_stream && !has_read @
3896     +identifier fops0.fops, openfunc;
3897     +identifier stream_writer.writestream;
3898     +@@
3899     + struct file_operations fops = {
3900     + .open = openfunc,
3901     + .write = writestream,
3902     + };
3903     +
3904     +@ report_w depends on report @
3905     +identifier fops_w.openfunc;
3906     +position p1;
3907     +@@
3908     + openfunc(...) {
3909     + <...
3910     + nonseekable_open@p1
3911     + ...>
3912     + }
3913     +
3914     +@ script:python depends on report @
3915     +fops << fops0.fops;
3916     +p << report_w.p1;
3917     +@@
3918     +coccilib.report.print_report(p[0],
3919     + "WARNING: %s: .write() has stream semantic; safe to change nonseekable_open -> stream_open." % (fops,))
3920     +
3921     +@ explain_w depends on explain @
3922     +identifier fops_w.openfunc;
3923     +@@
3924     + openfunc(...) {
3925     + <...
3926     +- nonseekable_open
3927     ++ nonseekable_open /* write only */
3928     + ...>
3929     + }
3930     +
3931     +@ patch_w depends on patch @
3932     +identifier fops_w.openfunc;
3933     +@@
3934     + openfunc(...) {
3935     + <...
3936     +- nonseekable_open
3937     ++ stream_open
3938     + ...>
3939     + }
3940     +
3941     +
3942     +// no read, no write - don't change anything
3943     diff --git a/scripts/gcc-plugins/gcc-common.h b/scripts/gcc-plugins/gcc-common.h
3944     index 12262c0cc691..08fe09c28bd2 100644
3945     --- a/scripts/gcc-plugins/gcc-common.h
3946     +++ b/scripts/gcc-plugins/gcc-common.h
3947     @@ -135,8 +135,12 @@ extern void print_gimple_expr(FILE *, gimple, int, int);
3948     extern void dump_gimple_stmt(pretty_printer *, gimple, int, int);
3949     #endif
3950    
3951     +#ifndef __unused
3952     #define __unused __attribute__((__unused__))
3953     +#endif
3954     +#ifndef __visible
3955     #define __visible __attribute__((visibility("default")))
3956     +#endif
3957    
3958     #define DECL_NAME_POINTER(node) IDENTIFIER_POINTER(DECL_NAME(node))
3959     #define DECL_NAME_LENGTH(node) IDENTIFIER_LENGTH(DECL_NAME(node))
3960     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
3961     index 822650d907fa..95fb213cf94b 100644
3962     --- a/sound/pci/hda/patch_realtek.c
3963     +++ b/sound/pci/hda/patch_realtek.c
3964     @@ -6317,7 +6317,7 @@ static int patch_alc269(struct hda_codec *codec)
3965    
3966     spec = codec->spec;
3967     spec->gen.shared_mic_vref_pin = 0x18;
3968     - codec->power_save_node = 1;
3969     + codec->power_save_node = 0;
3970    
3971     #ifdef CONFIG_PM
3972     codec->patch_ops.suspend = alc269_suspend;