Magellan Linux

Contents of /trunk/kernel-alx-legacy/patches-4.9/0133-4.9.34-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3608 - (show annotations) (download)
Fri Aug 14 07:34:29 2020 UTC (3 years, 8 months ago) by niro
File size: 82864 byte(s)
-added kerenl-alx-legacy pkg
1 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
2 index a6fadef92d6d..86a6746f6833 100644
3 --- a/Documentation/kernel-parameters.txt
4 +++ b/Documentation/kernel-parameters.txt
5 @@ -3932,6 +3932,13 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
6 spia_pedr=
7 spia_peddr=
8
9 + stack_guard_gap= [MM]
10 + override the default stack gap protection. The value
11 + is in page units and it defines how many pages prior
12 + to (for stacks growing down) resp. after (for stacks
13 + growing up) the main stack are reserved for no other
14 + mapping. Default value is 256 pages.
15 +
16 stacktrace [FTRACE]
17 Enabled the stack tracer on boot up.
18
19 diff --git a/Makefile b/Makefile
20 index 8470d81d5cc2..a40b373eba3a 100644
21 --- a/Makefile
22 +++ b/Makefile
23 @@ -1,6 +1,6 @@
24 VERSION = 4
25 PATCHLEVEL = 9
26 -SUBLEVEL = 33
27 +SUBLEVEL = 34
28 EXTRAVERSION =
29 NAME = Roaring Lionus
30
31 diff --git a/arch/arc/mm/mmap.c b/arch/arc/mm/mmap.c
32 index 2e06d56e987b..cf4ae6958240 100644
33 --- a/arch/arc/mm/mmap.c
34 +++ b/arch/arc/mm/mmap.c
35 @@ -64,7 +64,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
36
37 vma = find_vma(mm, addr);
38 if (TASK_SIZE - len >= addr &&
39 - (!vma || addr + len <= vma->vm_start))
40 + (!vma || addr + len <= vm_start_gap(vma)))
41 return addr;
42 }
43
44 diff --git a/arch/arm/mm/mmap.c b/arch/arm/mm/mmap.c
45 index 66353caa35b9..641334ebf46d 100644
46 --- a/arch/arm/mm/mmap.c
47 +++ b/arch/arm/mm/mmap.c
48 @@ -89,7 +89,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
49
50 vma = find_vma(mm, addr);
51 if (TASK_SIZE - len >= addr &&
52 - (!vma || addr + len <= vma->vm_start))
53 + (!vma || addr + len <= vm_start_gap(vma)))
54 return addr;
55 }
56
57 @@ -140,7 +140,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
58 addr = PAGE_ALIGN(addr);
59 vma = find_vma(mm, addr);
60 if (TASK_SIZE - len >= addr &&
61 - (!vma || addr + len <= vma->vm_start))
62 + (!vma || addr + len <= vm_start_gap(vma)))
63 return addr;
64 }
65
66 diff --git a/arch/frv/mm/elf-fdpic.c b/arch/frv/mm/elf-fdpic.c
67 index 836f14707a62..efa59f1f8022 100644
68 --- a/arch/frv/mm/elf-fdpic.c
69 +++ b/arch/frv/mm/elf-fdpic.c
70 @@ -74,7 +74,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi
71 addr = PAGE_ALIGN(addr);
72 vma = find_vma(current->mm, addr);
73 if (TASK_SIZE - len >= addr &&
74 - (!vma || addr + len <= vma->vm_start))
75 + (!vma || addr + len <= vm_start_gap(vma)))
76 goto success;
77 }
78
79 diff --git a/arch/mips/boot/Makefile b/arch/mips/boot/Makefile
80 index 2728a9a9c7c5..145b5ce8eb7e 100644
81 --- a/arch/mips/boot/Makefile
82 +++ b/arch/mips/boot/Makefile
83 @@ -128,19 +128,19 @@ quiet_cmd_cpp_its_S = ITS $@
84 -DADDR_BITS=$(ADDR_BITS) \
85 -DADDR_CELLS=$(itb_addr_cells)
86
87 -$(obj)/vmlinux.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE
88 +$(obj)/vmlinux.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
89 $(call if_changed_dep,cpp_its_S,none,vmlinux.bin)
90
91 -$(obj)/vmlinux.gz.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE
92 +$(obj)/vmlinux.gz.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
93 $(call if_changed_dep,cpp_its_S,gzip,vmlinux.bin.gz)
94
95 -$(obj)/vmlinux.bz2.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE
96 +$(obj)/vmlinux.bz2.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
97 $(call if_changed_dep,cpp_its_S,bzip2,vmlinux.bin.bz2)
98
99 -$(obj)/vmlinux.lzma.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE
100 +$(obj)/vmlinux.lzma.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
101 $(call if_changed_dep,cpp_its_S,lzma,vmlinux.bin.lzma)
102
103 -$(obj)/vmlinux.lzo.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE
104 +$(obj)/vmlinux.lzo.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
105 $(call if_changed_dep,cpp_its_S,lzo,vmlinux.bin.lzo)
106
107 quiet_cmd_itb-image = ITB $@
108 diff --git a/arch/mips/kernel/branch.c b/arch/mips/kernel/branch.c
109 index 12c718181e5e..c86b66b57fc6 100644
110 --- a/arch/mips/kernel/branch.c
111 +++ b/arch/mips/kernel/branch.c
112 @@ -804,8 +804,10 @@ int __compute_return_epc_for_insn(struct pt_regs *regs,
113 break;
114 }
115 /* Compact branch: BNEZC || JIALC */
116 - if (insn.i_format.rs)
117 + if (!insn.i_format.rs) {
118 + /* JIALC: set $31/ra */
119 regs->regs[31] = epc + 4;
120 + }
121 regs->cp0_epc += 8;
122 break;
123 #endif
124 diff --git a/arch/mips/mm/mmap.c b/arch/mips/mm/mmap.c
125 index d08ea3ff0f53..a44052c05f93 100644
126 --- a/arch/mips/mm/mmap.c
127 +++ b/arch/mips/mm/mmap.c
128 @@ -92,7 +92,7 @@ static unsigned long arch_get_unmapped_area_common(struct file *filp,
129
130 vma = find_vma(mm, addr);
131 if (TASK_SIZE - len >= addr &&
132 - (!vma || addr + len <= vma->vm_start))
133 + (!vma || addr + len <= vm_start_gap(vma)))
134 return addr;
135 }
136
137 diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c
138 index 0a393a04e891..1d7691fa8ab2 100644
139 --- a/arch/parisc/kernel/sys_parisc.c
140 +++ b/arch/parisc/kernel/sys_parisc.c
141 @@ -88,7 +88,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
142 unsigned long len, unsigned long pgoff, unsigned long flags)
143 {
144 struct mm_struct *mm = current->mm;
145 - struct vm_area_struct *vma;
146 + struct vm_area_struct *vma, *prev;
147 unsigned long task_size = TASK_SIZE;
148 int do_color_align, last_mmap;
149 struct vm_unmapped_area_info info;
150 @@ -115,9 +115,10 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
151 else
152 addr = PAGE_ALIGN(addr);
153
154 - vma = find_vma(mm, addr);
155 + vma = find_vma_prev(mm, addr, &prev);
156 if (task_size - len >= addr &&
157 - (!vma || addr + len <= vma->vm_start))
158 + (!vma || addr + len <= vm_start_gap(vma)) &&
159 + (!prev || addr >= vm_end_gap(prev)))
160 goto found_addr;
161 }
162
163 @@ -141,7 +142,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
164 const unsigned long len, const unsigned long pgoff,
165 const unsigned long flags)
166 {
167 - struct vm_area_struct *vma;
168 + struct vm_area_struct *vma, *prev;
169 struct mm_struct *mm = current->mm;
170 unsigned long addr = addr0;
171 int do_color_align, last_mmap;
172 @@ -175,9 +176,11 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
173 addr = COLOR_ALIGN(addr, last_mmap, pgoff);
174 else
175 addr = PAGE_ALIGN(addr);
176 - vma = find_vma(mm, addr);
177 +
178 + vma = find_vma_prev(mm, addr, &prev);
179 if (TASK_SIZE - len >= addr &&
180 - (!vma || addr + len <= vma->vm_start))
181 + (!vma || addr + len <= vm_start_gap(vma)) &&
182 + (!prev || addr >= vm_end_gap(prev)))
183 goto found_addr;
184 }
185
186 diff --git a/arch/powerpc/mm/hugetlbpage-radix.c b/arch/powerpc/mm/hugetlbpage-radix.c
187 index 35254a678456..a2b2d97f7eda 100644
188 --- a/arch/powerpc/mm/hugetlbpage-radix.c
189 +++ b/arch/powerpc/mm/hugetlbpage-radix.c
190 @@ -65,7 +65,7 @@ radix__hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
191 addr = ALIGN(addr, huge_page_size(h));
192 vma = find_vma(mm, addr);
193 if (TASK_SIZE - len >= addr &&
194 - (!vma || addr + len <= vma->vm_start))
195 + (!vma || addr + len <= vm_start_gap(vma)))
196 return addr;
197 }
198 /*
199 diff --git a/arch/powerpc/mm/mmap.c b/arch/powerpc/mm/mmap.c
200 index 2f1e44362198..5bc2845cddf4 100644
201 --- a/arch/powerpc/mm/mmap.c
202 +++ b/arch/powerpc/mm/mmap.c
203 @@ -106,7 +106,7 @@ radix__arch_get_unmapped_area(struct file *filp, unsigned long addr,
204 addr = PAGE_ALIGN(addr);
205 vma = find_vma(mm, addr);
206 if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
207 - (!vma || addr + len <= vma->vm_start))
208 + (!vma || addr + len <= vm_start_gap(vma)))
209 return addr;
210 }
211
212 @@ -142,7 +142,7 @@ radix__arch_get_unmapped_area_topdown(struct file *filp,
213 addr = PAGE_ALIGN(addr);
214 vma = find_vma(mm, addr);
215 if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
216 - (!vma || addr + len <= vma->vm_start))
217 + (!vma || addr + len <= vm_start_gap(vma)))
218 return addr;
219 }
220
221 diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c
222 index 2b27458902ee..c4d5c9c61e0f 100644
223 --- a/arch/powerpc/mm/slice.c
224 +++ b/arch/powerpc/mm/slice.c
225 @@ -105,7 +105,7 @@ static int slice_area_is_free(struct mm_struct *mm, unsigned long addr,
226 if ((mm->task_size - len) < addr)
227 return 0;
228 vma = find_vma(mm, addr);
229 - return (!vma || (addr + len) <= vma->vm_start);
230 + return (!vma || (addr + len) <= vm_start_gap(vma));
231 }
232
233 static int slice_low_has_vma(struct mm_struct *mm, unsigned long slice)
234 diff --git a/arch/s390/mm/mmap.c b/arch/s390/mm/mmap.c
235 index eb9df2822da1..812368f274c9 100644
236 --- a/arch/s390/mm/mmap.c
237 +++ b/arch/s390/mm/mmap.c
238 @@ -98,7 +98,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
239 addr = PAGE_ALIGN(addr);
240 vma = find_vma(mm, addr);
241 if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
242 - (!vma || addr + len <= vma->vm_start))
243 + (!vma || addr + len <= vm_start_gap(vma)))
244 return addr;
245 }
246
247 @@ -136,7 +136,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
248 addr = PAGE_ALIGN(addr);
249 vma = find_vma(mm, addr);
250 if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
251 - (!vma || addr + len <= vma->vm_start))
252 + (!vma || addr + len <= vm_start_gap(vma)))
253 return addr;
254 }
255
256 diff --git a/arch/sh/mm/mmap.c b/arch/sh/mm/mmap.c
257 index 6777177807c2..7df7d5944188 100644
258 --- a/arch/sh/mm/mmap.c
259 +++ b/arch/sh/mm/mmap.c
260 @@ -63,7 +63,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
261
262 vma = find_vma(mm, addr);
263 if (TASK_SIZE - len >= addr &&
264 - (!vma || addr + len <= vma->vm_start))
265 + (!vma || addr + len <= vm_start_gap(vma)))
266 return addr;
267 }
268
269 @@ -113,7 +113,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
270
271 vma = find_vma(mm, addr);
272 if (TASK_SIZE - len >= addr &&
273 - (!vma || addr + len <= vma->vm_start))
274 + (!vma || addr + len <= vm_start_gap(vma)))
275 return addr;
276 }
277
278 diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c
279 index fe8b8ee8e660..02e05e221b94 100644
280 --- a/arch/sparc/kernel/sys_sparc_64.c
281 +++ b/arch/sparc/kernel/sys_sparc_64.c
282 @@ -118,7 +118,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi
283
284 vma = find_vma(mm, addr);
285 if (task_size - len >= addr &&
286 - (!vma || addr + len <= vma->vm_start))
287 + (!vma || addr + len <= vm_start_gap(vma)))
288 return addr;
289 }
290
291 @@ -181,7 +181,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
292
293 vma = find_vma(mm, addr);
294 if (task_size - len >= addr &&
295 - (!vma || addr + len <= vma->vm_start))
296 + (!vma || addr + len <= vm_start_gap(vma)))
297 return addr;
298 }
299
300 diff --git a/arch/sparc/mm/hugetlbpage.c b/arch/sparc/mm/hugetlbpage.c
301 index 988acc8b1b80..58cde8d9be8a 100644
302 --- a/arch/sparc/mm/hugetlbpage.c
303 +++ b/arch/sparc/mm/hugetlbpage.c
304 @@ -116,7 +116,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
305 addr = ALIGN(addr, HPAGE_SIZE);
306 vma = find_vma(mm, addr);
307 if (task_size - len >= addr &&
308 - (!vma || addr + len <= vma->vm_start))
309 + (!vma || addr + len <= vm_start_gap(vma)))
310 return addr;
311 }
312 if (mm->get_unmapped_area == arch_get_unmapped_area)
313 diff --git a/arch/tile/mm/hugetlbpage.c b/arch/tile/mm/hugetlbpage.c
314 index 77ceaa343fce..67508b249ede 100644
315 --- a/arch/tile/mm/hugetlbpage.c
316 +++ b/arch/tile/mm/hugetlbpage.c
317 @@ -232,7 +232,7 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
318 addr = ALIGN(addr, huge_page_size(h));
319 vma = find_vma(mm, addr);
320 if (TASK_SIZE - len >= addr &&
321 - (!vma || addr + len <= vma->vm_start))
322 + (!vma || addr + len <= vm_start_gap(vma)))
323 return addr;
324 }
325 if (current->mm->get_unmapped_area == arch_get_unmapped_area)
326 diff --git a/arch/x86/kernel/sys_x86_64.c b/arch/x86/kernel/sys_x86_64.c
327 index a55ed63b9f91..1119414ab419 100644
328 --- a/arch/x86/kernel/sys_x86_64.c
329 +++ b/arch/x86/kernel/sys_x86_64.c
330 @@ -140,7 +140,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
331 addr = PAGE_ALIGN(addr);
332 vma = find_vma(mm, addr);
333 if (end - len >= addr &&
334 - (!vma || addr + len <= vma->vm_start))
335 + (!vma || addr + len <= vm_start_gap(vma)))
336 return addr;
337 }
338
339 @@ -183,7 +183,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
340 addr = PAGE_ALIGN(addr);
341 vma = find_vma(mm, addr);
342 if (TASK_SIZE - len >= addr &&
343 - (!vma || addr + len <= vma->vm_start))
344 + (!vma || addr + len <= vm_start_gap(vma)))
345 return addr;
346 }
347
348 diff --git a/arch/x86/mm/hugetlbpage.c b/arch/x86/mm/hugetlbpage.c
349 index 2ae8584b44c7..fe342e8ed529 100644
350 --- a/arch/x86/mm/hugetlbpage.c
351 +++ b/arch/x86/mm/hugetlbpage.c
352 @@ -144,7 +144,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
353 addr = ALIGN(addr, huge_page_size(h));
354 vma = find_vma(mm, addr);
355 if (TASK_SIZE - len >= addr &&
356 - (!vma || addr + len <= vma->vm_start))
357 + (!vma || addr + len <= vm_start_gap(vma)))
358 return addr;
359 }
360 if (mm->get_unmapped_area == arch_get_unmapped_area)
361 diff --git a/arch/x86/mm/numa_32.c b/arch/x86/mm/numa_32.c
362 index 6b7ce6279133..aca6295350f3 100644
363 --- a/arch/x86/mm/numa_32.c
364 +++ b/arch/x86/mm/numa_32.c
365 @@ -100,5 +100,6 @@ void __init initmem_init(void)
366 printk(KERN_DEBUG "High memory starts at vaddr %08lx\n",
367 (ulong) pfn_to_kaddr(highstart_pfn));
368
369 + __vmalloc_start_set = true;
370 setup_bootmem_allocator();
371 }
372 diff --git a/arch/xtensa/kernel/syscall.c b/arch/xtensa/kernel/syscall.c
373 index 83cf49685373..3aaaae18417c 100644
374 --- a/arch/xtensa/kernel/syscall.c
375 +++ b/arch/xtensa/kernel/syscall.c
376 @@ -87,7 +87,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
377 /* At this point: (!vmm || addr < vmm->vm_end). */
378 if (TASK_SIZE - len < addr)
379 return -ENOMEM;
380 - if (!vmm || addr + len <= vmm->vm_start)
381 + if (!vmm || addr + len <= vm_start_gap(vmm))
382 return addr;
383 addr = vmm->vm_end;
384 if (flags & MAP_SHARED)
385 diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c
386 index 946025a7413b..84eca4f93b82 100644
387 --- a/drivers/char/tpm/tpm_ibmvtpm.c
388 +++ b/drivers/char/tpm/tpm_ibmvtpm.c
389 @@ -295,6 +295,8 @@ static int tpm_ibmvtpm_remove(struct vio_dev *vdev)
390 }
391
392 kfree(ibmvtpm);
393 + /* For tpm_ibmvtpm_get_desired_dma */
394 + dev_set_drvdata(&vdev->dev, NULL);
395
396 return 0;
397 }
398 @@ -309,13 +311,16 @@ static int tpm_ibmvtpm_remove(struct vio_dev *vdev)
399 static unsigned long tpm_ibmvtpm_get_desired_dma(struct vio_dev *vdev)
400 {
401 struct tpm_chip *chip = dev_get_drvdata(&vdev->dev);
402 - struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
403 + struct ibmvtpm_dev *ibmvtpm;
404
405 - /* ibmvtpm initializes at probe time, so the data we are
406 - * asking for may not be set yet. Estimate that 4K required
407 - * for TCE-mapped buffer in addition to CRQ.
408 - */
409 - if (!ibmvtpm)
410 + /*
411 + * ibmvtpm initializes at probe time, so the data we are
412 + * asking for may not be set yet. Estimate that 4K required
413 + * for TCE-mapped buffer in addition to CRQ.
414 + */
415 + if (chip)
416 + ibmvtpm = dev_get_drvdata(&chip->dev);
417 + else
418 return CRQ_RES_BUF_SIZE + PAGE_SIZE;
419
420 return CRQ_RES_BUF_SIZE + ibmvtpm->rtce_size;
421 diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c
422 index 13475890d792..00a74351f623 100644
423 --- a/drivers/cpufreq/cpufreq_conservative.c
424 +++ b/drivers/cpufreq/cpufreq_conservative.c
425 @@ -169,8 +169,8 @@ static ssize_t store_down_threshold(struct gov_attr_set *attr_set,
426 int ret;
427 ret = sscanf(buf, "%u", &input);
428
429 - /* cannot be lower than 11 otherwise freq will not fall */
430 - if (ret != 1 || input < 11 || input > 100 ||
431 + /* cannot be lower than 1 otherwise freq will not fall */
432 + if (ret != 1 || input < 1 || input > 100 ||
433 input >= dbs_data->up_threshold)
434 return -EINVAL;
435
436 diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
437 index 42448c7c5ff5..db9b79a8b160 100644
438 --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
439 +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
440 @@ -1290,8 +1290,11 @@ static void dce_v10_0_program_watermarks(struct amdgpu_device *adev,
441 u32 tmp, wm_mask, lb_vblank_lead_lines = 0;
442
443 if (amdgpu_crtc->base.enabled && num_heads && mode) {
444 - active_time = 1000000UL * (u32)mode->crtc_hdisplay / (u32)mode->clock;
445 - line_time = min((u32) (1000000UL * (u32)mode->crtc_htotal / (u32)mode->clock), (u32)65535);
446 + active_time = (u32) div_u64((u64)mode->crtc_hdisplay * 1000000,
447 + (u32)mode->clock);
448 + line_time = (u32) div_u64((u64)mode->crtc_htotal * 1000000,
449 + (u32)mode->clock);
450 + line_time = min(line_time, (u32)65535);
451
452 /* watermark for high clocks */
453 if (adev->pm.dpm_enabled) {
454 diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
455 index 904dabdc3a1e..36d5128a2aad 100644
456 --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
457 +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
458 @@ -1257,8 +1257,11 @@ static void dce_v11_0_program_watermarks(struct amdgpu_device *adev,
459 u32 tmp, wm_mask, lb_vblank_lead_lines = 0;
460
461 if (amdgpu_crtc->base.enabled && num_heads && mode) {
462 - active_time = 1000000UL * (u32)mode->crtc_hdisplay / (u32)mode->clock;
463 - line_time = min((u32) (1000000UL * (u32)mode->crtc_htotal / (u32)mode->clock), (u32)65535);
464 + active_time = (u32) div_u64((u64)mode->crtc_hdisplay * 1000000,
465 + (u32)mode->clock);
466 + line_time = (u32) div_u64((u64)mode->crtc_htotal * 1000000,
467 + (u32)mode->clock);
468 + line_time = min(line_time, (u32)65535);
469
470 /* watermark for high clocks */
471 if (adev->pm.dpm_enabled) {
472 diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
473 index 6d02bdb25d98..75689a2c2de6 100644
474 --- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
475 +++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
476 @@ -1054,8 +1054,11 @@ static void dce_v6_0_program_watermarks(struct amdgpu_device *adev,
477 fixed20_12 a, b, c;
478
479 if (amdgpu_crtc->base.enabled && num_heads && mode) {
480 - active_time = 1000000UL * (u32)mode->crtc_hdisplay / (u32)mode->clock;
481 - line_time = min((u32) (1000000UL * (u32)mode->crtc_htotal / (u32)mode->clock), (u32)65535);
482 + active_time = (u32) div_u64((u64)mode->crtc_hdisplay * 1000000,
483 + (u32)mode->clock);
484 + line_time = (u32) div_u64((u64)mode->crtc_htotal * 1000000,
485 + (u32)mode->clock);
486 + line_time = min(line_time, (u32)65535);
487 priority_a_cnt = 0;
488 priority_b_cnt = 0;
489
490 diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
491 index b1fb60107cfa..ba2321ea800e 100644
492 --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
493 +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
494 @@ -1211,8 +1211,11 @@ static void dce_v8_0_program_watermarks(struct amdgpu_device *adev,
495 u32 tmp, wm_mask, lb_vblank_lead_lines = 0;
496
497 if (amdgpu_crtc->base.enabled && num_heads && mode) {
498 - active_time = 1000000UL * (u32)mode->crtc_hdisplay / (u32)mode->clock;
499 - line_time = min((u32) (1000000UL * (u32)mode->crtc_htotal / (u32)mode->clock), (u32)65535);
500 + active_time = (u32) div_u64((u64)mode->crtc_hdisplay * 1000000,
501 + (u32)mode->clock);
502 + line_time = (u32) div_u64((u64)mode->crtc_htotal * 1000000,
503 + (u32)mode->clock);
504 + line_time = min(line_time, (u32)65535);
505
506 /* watermark for high clocks */
507 if (adev->pm.dpm_enabled) {
508 diff --git a/drivers/gpu/drm/i915/i915_pvinfo.h b/drivers/gpu/drm/i915/i915_pvinfo.h
509 index c0cb2974caac..2cfe96d3e5d1 100644
510 --- a/drivers/gpu/drm/i915/i915_pvinfo.h
511 +++ b/drivers/gpu/drm/i915/i915_pvinfo.h
512 @@ -36,10 +36,6 @@
513 #define VGT_VERSION_MAJOR 1
514 #define VGT_VERSION_MINOR 0
515
516 -#define INTEL_VGT_IF_VERSION_ENCODE(major, minor) ((major) << 16 | (minor))
517 -#define INTEL_VGT_IF_VERSION \
518 - INTEL_VGT_IF_VERSION_ENCODE(VGT_VERSION_MAJOR, VGT_VERSION_MINOR)
519 -
520 /*
521 * notifications from guest to vgpu device model
522 */
523 @@ -55,8 +51,8 @@ enum vgt_g2v_type {
524
525 struct vgt_if {
526 u64 magic; /* VGT_MAGIC */
527 - uint16_t version_major;
528 - uint16_t version_minor;
529 + u16 version_major;
530 + u16 version_minor;
531 u32 vgt_id; /* ID of vGT instance */
532 u32 rsv1[12]; /* pad to offset 0x40 */
533 /*
534 diff --git a/drivers/gpu/drm/i915/i915_vgpu.c b/drivers/gpu/drm/i915/i915_vgpu.c
535 index dae340cfc6c7..125adcc6d6ca 100644
536 --- a/drivers/gpu/drm/i915/i915_vgpu.c
537 +++ b/drivers/gpu/drm/i915/i915_vgpu.c
538 @@ -60,8 +60,8 @@
539 */
540 void i915_check_vgpu(struct drm_i915_private *dev_priv)
541 {
542 - uint64_t magic;
543 - uint32_t version;
544 + u64 magic;
545 + u16 version_major;
546
547 BUILD_BUG_ON(sizeof(struct vgt_if) != VGT_PVINFO_SIZE);
548
549 @@ -69,10 +69,8 @@ void i915_check_vgpu(struct drm_i915_private *dev_priv)
550 if (magic != VGT_MAGIC)
551 return;
552
553 - version = INTEL_VGT_IF_VERSION_ENCODE(
554 - __raw_i915_read16(dev_priv, vgtif_reg(version_major)),
555 - __raw_i915_read16(dev_priv, vgtif_reg(version_minor)));
556 - if (version != INTEL_VGT_IF_VERSION) {
557 + version_major = __raw_i915_read16(dev_priv, vgtif_reg(version_major));
558 + if (version_major < VGT_VERSION_MAJOR) {
559 DRM_INFO("VGT interface version mismatch!\n");
560 return;
561 }
562 diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c
563 index 0e8c4d9af340..e097780752f6 100644
564 --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
565 +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
566 @@ -1061,7 +1061,7 @@ static int mtk_hdmi_setup_vendor_specific_infoframe(struct mtk_hdmi *hdmi,
567 }
568
569 err = hdmi_vendor_infoframe_pack(&frame, buffer, sizeof(buffer));
570 - if (err) {
571 + if (err < 0) {
572 dev_err(hdmi->dev, "Failed to pack vendor infoframe: %zd\n",
573 err);
574 return err;
575 diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
576 index 3f6704cf6608..ec9023bd935b 100644
577 --- a/drivers/gpu/drm/vc4/vc4_bo.c
578 +++ b/drivers/gpu/drm/vc4/vc4_bo.c
579 @@ -313,6 +313,14 @@ void vc4_free_object(struct drm_gem_object *gem_bo)
580 goto out;
581 }
582
583 + /* If this object was partially constructed but CMA allocation
584 + * had failed, just free it.
585 + */
586 + if (!bo->base.vaddr) {
587 + vc4_bo_destroy(bo);
588 + goto out;
589 + }
590 +
591 cache_list = vc4_get_cache_list_for_size(dev, gem_bo->size);
592 if (!cache_list) {
593 vc4_bo_destroy(bo);
594 diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
595 index 2de1f52f1b19..62b0dec6d777 100644
596 --- a/drivers/iio/adc/ti_am335x_adc.c
597 +++ b/drivers/iio/adc/ti_am335x_adc.c
598 @@ -484,7 +484,7 @@ static int tiadc_probe(struct platform_device *pdev)
599 return -EINVAL;
600 }
601
602 - indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*indio_dev));
603 + indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*adc_dev));
604 if (indio_dev == NULL) {
605 dev_err(&pdev->dev, "failed to allocate iio device\n");
606 return -ENOMEM;
607 diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
608 index b9fcbf18aa99..5faea370ab57 100644
609 --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
610 +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
611 @@ -41,6 +41,7 @@ static const int accel_scale[] = {598, 1196, 2392, 4785};
612 static const struct inv_mpu6050_reg_map reg_set_6500 = {
613 .sample_rate_div = INV_MPU6050_REG_SAMPLE_RATE_DIV,
614 .lpf = INV_MPU6050_REG_CONFIG,
615 + .accel_lpf = INV_MPU6500_REG_ACCEL_CONFIG_2,
616 .user_ctrl = INV_MPU6050_REG_USER_CTRL,
617 .fifo_en = INV_MPU6050_REG_FIFO_EN,
618 .gyro_config = INV_MPU6050_REG_GYRO_CONFIG,
619 @@ -205,6 +206,37 @@ int inv_mpu6050_set_power_itg(struct inv_mpu6050_state *st, bool power_on)
620 EXPORT_SYMBOL_GPL(inv_mpu6050_set_power_itg);
621
622 /**
623 + * inv_mpu6050_set_lpf_regs() - set low pass filter registers, chip dependent
624 + *
625 + * MPU60xx/MPU9150 use only 1 register for accelerometer + gyroscope
626 + * MPU6500 and above have a dedicated register for accelerometer
627 + */
628 +static int inv_mpu6050_set_lpf_regs(struct inv_mpu6050_state *st,
629 + enum inv_mpu6050_filter_e val)
630 +{
631 + int result;
632 +
633 + result = regmap_write(st->map, st->reg->lpf, val);
634 + if (result)
635 + return result;
636 +
637 + switch (st->chip_type) {
638 + case INV_MPU6050:
639 + case INV_MPU6000:
640 + case INV_MPU9150:
641 + /* old chips, nothing to do */
642 + result = 0;
643 + break;
644 + default:
645 + /* set accel lpf */
646 + result = regmap_write(st->map, st->reg->accel_lpf, val);
647 + break;
648 + }
649 +
650 + return result;
651 +}
652 +
653 +/**
654 * inv_mpu6050_init_config() - Initialize hardware, disable FIFO.
655 *
656 * Initial configuration:
657 @@ -227,8 +259,7 @@ static int inv_mpu6050_init_config(struct iio_dev *indio_dev)
658 if (result)
659 return result;
660
661 - d = INV_MPU6050_FILTER_20HZ;
662 - result = regmap_write(st->map, st->reg->lpf, d);
663 + result = inv_mpu6050_set_lpf_regs(st, INV_MPU6050_FILTER_20HZ);
664 if (result)
665 return result;
666
667 @@ -531,6 +562,8 @@ static int inv_mpu6050_write_raw(struct iio_dev *indio_dev,
668 * would be alising. This function basically search for the
669 * correct low pass parameters based on the fifo rate, e.g,
670 * sampling frequency.
671 + *
672 + * lpf is set automatically when setting sampling rate to avoid any aliases.
673 */
674 static int inv_mpu6050_set_lpf(struct inv_mpu6050_state *st, int rate)
675 {
676 @@ -546,7 +579,7 @@ static int inv_mpu6050_set_lpf(struct inv_mpu6050_state *st, int rate)
677 while ((h < hz[i]) && (i < ARRAY_SIZE(d) - 1))
678 i++;
679 data = d[i];
680 - result = regmap_write(st->map, st->reg->lpf, data);
681 + result = inv_mpu6050_set_lpf_regs(st, data);
682 if (result)
683 return result;
684 st->chip_config.lpf = data;
685 diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
686 index f0e8c5dd9fae..d851581bb0b8 100644
687 --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
688 +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
689 @@ -28,6 +28,7 @@
690 * struct inv_mpu6050_reg_map - Notable registers.
691 * @sample_rate_div: Divider applied to gyro output rate.
692 * @lpf: Configures internal low pass filter.
693 + * @accel_lpf: Configures accelerometer low pass filter.
694 * @user_ctrl: Enables/resets the FIFO.
695 * @fifo_en: Determines which data will appear in FIFO.
696 * @gyro_config: gyro config register.
697 @@ -47,6 +48,7 @@
698 struct inv_mpu6050_reg_map {
699 u8 sample_rate_div;
700 u8 lpf;
701 + u8 accel_lpf;
702 u8 user_ctrl;
703 u8 fifo_en;
704 u8 gyro_config;
705 @@ -187,6 +189,7 @@ struct inv_mpu6050_state {
706 #define INV_MPU6050_FIFO_THRESHOLD 500
707
708 /* mpu6500 registers */
709 +#define INV_MPU6500_REG_ACCEL_CONFIG_2 0x1D
710 #define INV_MPU6500_REG_ACCEL_OFFSET 0x77
711
712 /* delay time in milliseconds */
713 diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c
714 index 55df9a75eb3a..44e46c159a7e 100644
715 --- a/drivers/iio/pressure/st_pressure_core.c
716 +++ b/drivers/iio/pressure/st_pressure_core.c
717 @@ -227,7 +227,7 @@ static const struct iio_chan_spec st_press_1_channels[] = {
718 .address = ST_PRESS_1_OUT_XL_ADDR,
719 .scan_index = 0,
720 .scan_type = {
721 - .sign = 'u',
722 + .sign = 's',
723 .realbits = 24,
724 .storagebits = 32,
725 .endianness = IIO_LE,
726 @@ -240,7 +240,7 @@ static const struct iio_chan_spec st_press_1_channels[] = {
727 .address = ST_TEMP_1_OUT_L_ADDR,
728 .scan_index = 1,
729 .scan_type = {
730 - .sign = 'u',
731 + .sign = 's',
732 .realbits = 16,
733 .storagebits = 16,
734 .endianness = IIO_LE,
735 @@ -259,7 +259,7 @@ static const struct iio_chan_spec st_press_lps001wp_channels[] = {
736 .address = ST_PRESS_LPS001WP_OUT_L_ADDR,
737 .scan_index = 0,
738 .scan_type = {
739 - .sign = 'u',
740 + .sign = 's',
741 .realbits = 16,
742 .storagebits = 16,
743 .endianness = IIO_LE,
744 @@ -273,7 +273,7 @@ static const struct iio_chan_spec st_press_lps001wp_channels[] = {
745 .address = ST_TEMP_LPS001WP_OUT_L_ADDR,
746 .scan_index = 1,
747 .scan_type = {
748 - .sign = 'u',
749 + .sign = 's',
750 .realbits = 16,
751 .storagebits = 16,
752 .endianness = IIO_LE,
753 @@ -291,7 +291,7 @@ static const struct iio_chan_spec st_press_lps22hb_channels[] = {
754 .address = ST_PRESS_1_OUT_XL_ADDR,
755 .scan_index = 0,
756 .scan_type = {
757 - .sign = 'u',
758 + .sign = 's',
759 .realbits = 24,
760 .storagebits = 32,
761 .endianness = IIO_LE,
762 diff --git a/drivers/iio/proximity/as3935.c b/drivers/iio/proximity/as3935.c
763 index 268210ea4990..24fb54398a3b 100644
764 --- a/drivers/iio/proximity/as3935.c
765 +++ b/drivers/iio/proximity/as3935.c
766 @@ -269,8 +269,6 @@ static irqreturn_t as3935_interrupt_handler(int irq, void *private)
767
768 static void calibrate_as3935(struct as3935_state *st)
769 {
770 - mutex_lock(&st->lock);
771 -
772 /* mask disturber interrupt bit */
773 as3935_write(st, AS3935_INT, BIT(5));
774
775 @@ -280,8 +278,6 @@ static void calibrate_as3935(struct as3935_state *st)
776
777 mdelay(2);
778 as3935_write(st, AS3935_TUNE_CAP, (st->tune_cap / TUNE_CAP_DIV));
779 -
780 - mutex_unlock(&st->lock);
781 }
782
783 #ifdef CONFIG_PM_SLEEP
784 @@ -318,6 +314,8 @@ static int as3935_resume(struct device *dev)
785 val &= ~AS3935_AFE_PWR_BIT;
786 ret = as3935_write(st, AS3935_AFE_GAIN, val);
787
788 + calibrate_as3935(st);
789 +
790 err_resume:
791 mutex_unlock(&st->lock);
792
793 diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
794 index 11bfa27b022c..282c9fb0ba95 100644
795 --- a/drivers/infiniband/hw/mlx5/main.c
796 +++ b/drivers/infiniband/hw/mlx5/main.c
797 @@ -1105,13 +1105,13 @@ static struct ib_ucontext *mlx5_ib_alloc_ucontext(struct ib_device *ibdev,
798 * pretend we don't support reading the HCA's core clock. This is also
799 * forced by mmap function.
800 */
801 - if (PAGE_SIZE <= 4096 &&
802 - field_avail(typeof(resp), hca_core_clock_offset, udata->outlen)) {
803 - resp.comp_mask |=
804 - MLX5_IB_ALLOC_UCONTEXT_RESP_MASK_CORE_CLOCK_OFFSET;
805 - resp.hca_core_clock_offset =
806 - offsetof(struct mlx5_init_seg, internal_timer_h) %
807 - PAGE_SIZE;
808 + if (field_avail(typeof(resp), hca_core_clock_offset, udata->outlen)) {
809 + if (PAGE_SIZE <= 4096) {
810 + resp.comp_mask |=
811 + MLX5_IB_ALLOC_UCONTEXT_RESP_MASK_CORE_CLOCK_OFFSET;
812 + resp.hca_core_clock_offset =
813 + offsetof(struct mlx5_init_seg, internal_timer_h) % PAGE_SIZE;
814 + }
815 resp.response_length += sizeof(resp.hca_core_clock_offset) +
816 sizeof(resp.reserved2);
817 }
818 diff --git a/drivers/media/usb/pvrusb2/pvrusb2-eeprom.c b/drivers/media/usb/pvrusb2/pvrusb2-eeprom.c
819 index e1907cd0c3b7..7613d1fee104 100644
820 --- a/drivers/media/usb/pvrusb2/pvrusb2-eeprom.c
821 +++ b/drivers/media/usb/pvrusb2/pvrusb2-eeprom.c
822 @@ -123,15 +123,10 @@ int pvr2_eeprom_analyze(struct pvr2_hdw *hdw)
823 memset(&tvdata,0,sizeof(tvdata));
824
825 eeprom = pvr2_eeprom_fetch(hdw);
826 - if (!eeprom) return -EINVAL;
827 -
828 - {
829 - struct i2c_client fake_client;
830 - /* Newer version expects a useless client interface */
831 - fake_client.addr = hdw->eeprom_addr;
832 - fake_client.adapter = &hdw->i2c_adap;
833 - tveeprom_hauppauge_analog(&fake_client,&tvdata,eeprom);
834 - }
835 + if (!eeprom)
836 + return -EINVAL;
837 +
838 + tveeprom_hauppauge_analog(NULL, &tvdata, eeprom);
839
840 trace_eeprom("eeprom assumed v4l tveeprom module");
841 trace_eeprom("eeprom direct call results:");
842 diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
843 index 21900202ff83..9ccf7f5e0e2e 100644
844 --- a/drivers/media/v4l2-core/videobuf2-core.c
845 +++ b/drivers/media/v4l2-core/videobuf2-core.c
846 @@ -868,7 +868,7 @@ EXPORT_SYMBOL_GPL(vb2_core_create_bufs);
847
848 void *vb2_plane_vaddr(struct vb2_buffer *vb, unsigned int plane_no)
849 {
850 - if (plane_no > vb->num_planes || !vb->planes[plane_no].mem_priv)
851 + if (plane_no >= vb->num_planes || !vb->planes[plane_no].mem_priv)
852 return NULL;
853
854 return call_ptr_memop(vb, vaddr, vb->planes[plane_no].mem_priv);
855 diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
856 index 1aa74c4c3ced..9d167c9af2c6 100644
857 --- a/drivers/mfd/omap-usb-tll.c
858 +++ b/drivers/mfd/omap-usb-tll.c
859 @@ -377,8 +377,8 @@ int omap_tll_init(struct usbhs_omap_platform_data *pdata)
860 * and use SDR Mode
861 */
862 reg &= ~(OMAP_TLL_CHANNEL_CONF_UTMIAUTOIDLE
863 - | OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF
864 | OMAP_TLL_CHANNEL_CONF_ULPIDDRMODE);
865 + reg |= OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF;
866 } else if (pdata->port_mode[i] ==
867 OMAP_EHCI_PORT_MODE_HSIC) {
868 /*
869 diff --git a/drivers/misc/c2port/c2port-duramar2150.c b/drivers/misc/c2port/c2port-duramar2150.c
870 index 5484301d57d9..3dc61ea7dc64 100644
871 --- a/drivers/misc/c2port/c2port-duramar2150.c
872 +++ b/drivers/misc/c2port/c2port-duramar2150.c
873 @@ -129,8 +129,8 @@ static int __init duramar2150_c2port_init(void)
874
875 duramar2150_c2port_dev = c2port_device_register("uc",
876 &duramar2150_c2port_ops, NULL);
877 - if (!duramar2150_c2port_dev) {
878 - ret = -ENODEV;
879 + if (IS_ERR(duramar2150_c2port_dev)) {
880 + ret = PTR_ERR(duramar2150_c2port_dev);
881 goto free_region;
882 }
883
884 diff --git a/drivers/misc/mic/vop/vop_vringh.c b/drivers/misc/mic/vop/vop_vringh.c
885 index 88e45234d527..fed992e2c258 100644
886 --- a/drivers/misc/mic/vop/vop_vringh.c
887 +++ b/drivers/misc/mic/vop/vop_vringh.c
888 @@ -292,7 +292,6 @@ static int vop_virtio_add_device(struct vop_vdev *vdev,
889 if (ret) {
890 dev_err(vop_dev(vdev), "%s %d err %d\n",
891 __func__, __LINE__, ret);
892 - kfree(vdev);
893 return ret;
894 }
895
896 diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c
897 index 7ab24c5262f3..05369dc9dd09 100644
898 --- a/drivers/net/can/usb/gs_usb.c
899 +++ b/drivers/net/can/usb/gs_usb.c
900 @@ -265,6 +265,8 @@ static int gs_cmd_reset(struct gs_usb *gsusb, struct gs_can *gsdev)
901 sizeof(*dm),
902 1000);
903
904 + kfree(dm);
905 +
906 return rc;
907 }
908
909 diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
910 index 0457e315d336..6063cf439d3d 100644
911 --- a/drivers/net/wireless/ath/ath10k/pci.c
912 +++ b/drivers/net/wireless/ath/ath10k/pci.c
913 @@ -1647,6 +1647,8 @@ static int ath10k_pci_hif_start(struct ath10k *ar)
914
915 ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot hif start\n");
916
917 + napi_enable(&ar->napi);
918 +
919 ath10k_pci_irq_enable(ar);
920 ath10k_pci_rx_post(ar);
921
922 @@ -2531,7 +2533,6 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar)
923 ath10k_err(ar, "could not wake up target CPU: %d\n", ret);
924 goto err_ce;
925 }
926 - napi_enable(&ar->napi);
927
928 return 0;
929
930 diff --git a/drivers/staging/iio/light/tsl2x7x_core.c b/drivers/staging/iio/light/tsl2x7x_core.c
931 index ea15bc1c300c..197201a70d59 100644
932 --- a/drivers/staging/iio/light/tsl2x7x_core.c
933 +++ b/drivers/staging/iio/light/tsl2x7x_core.c
934 @@ -854,7 +854,7 @@ void tsl2x7x_prox_calculate(int *data, int length,
935 tmp = data[i] - statP->mean;
936 sample_sum += tmp * tmp;
937 }
938 - statP->stddev = int_sqrt((long)sample_sum) / length;
939 + statP->stddev = int_sqrt((long)sample_sum / length);
940 }
941
942 /**
943 diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c b/drivers/staging/rtl8188eu/core/rtw_ap.c
944 index 553e8d50352f..6513ace1fce6 100644
945 --- a/drivers/staging/rtl8188eu/core/rtw_ap.c
946 +++ b/drivers/staging/rtl8188eu/core/rtw_ap.c
947 @@ -890,7 +890,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)
948 return _FAIL;
949
950
951 - if (len > MAX_IE_SZ)
952 + if (len < 0 || len > MAX_IE_SZ)
953 return _FAIL;
954
955 pbss_network->IELength = len;
956 diff --git a/drivers/tty/serial/efm32-uart.c b/drivers/tty/serial/efm32-uart.c
957 index 195acc868763..5d476916191b 100644
958 --- a/drivers/tty/serial/efm32-uart.c
959 +++ b/drivers/tty/serial/efm32-uart.c
960 @@ -27,6 +27,7 @@
961 #define UARTn_FRAME 0x04
962 #define UARTn_FRAME_DATABITS__MASK 0x000f
963 #define UARTn_FRAME_DATABITS(n) ((n) - 3)
964 +#define UARTn_FRAME_PARITY__MASK 0x0300
965 #define UARTn_FRAME_PARITY_NONE 0x0000
966 #define UARTn_FRAME_PARITY_EVEN 0x0200
967 #define UARTn_FRAME_PARITY_ODD 0x0300
968 @@ -572,12 +573,16 @@ static void efm32_uart_console_get_options(struct efm32_uart_port *efm_port,
969 16 * (4 + (clkdiv >> 6)));
970
971 frame = efm32_uart_read32(efm_port, UARTn_FRAME);
972 - if (frame & UARTn_FRAME_PARITY_ODD)
973 + switch (frame & UARTn_FRAME_PARITY__MASK) {
974 + case UARTn_FRAME_PARITY_ODD:
975 *parity = 'o';
976 - else if (frame & UARTn_FRAME_PARITY_EVEN)
977 + break;
978 + case UARTn_FRAME_PARITY_EVEN:
979 *parity = 'e';
980 - else
981 + break;
982 + default:
983 *parity = 'n';
984 + }
985
986 *bits = (frame & UARTn_FRAME_DATABITS__MASK) -
987 UARTn_FRAME_DATABITS(4) + 4;
988 diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
989 index ee84f89391ca..7e97a1ccab23 100644
990 --- a/drivers/tty/serial/sh-sci.c
991 +++ b/drivers/tty/serial/sh-sci.c
992 @@ -2366,6 +2366,10 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios,
993 */
994 udelay(DIV_ROUND_UP(10 * 1000000, baud));
995 }
996 + if (port->flags & UPF_HARD_FLOW) {
997 + /* Refresh (Auto) RTS */
998 + sci_set_mctrl(port, port->mctrl);
999 + }
1000
1001 #ifdef CONFIG_SERIAL_SH_SCI_DMA
1002 /*
1003 diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
1004 index 3b9735abf2e0..8a7c6bbaed7e 100644
1005 --- a/drivers/usb/core/hcd.c
1006 +++ b/drivers/usb/core/hcd.c
1007 @@ -2535,6 +2535,7 @@ struct usb_hcd *usb_create_shared_hcd(const struct hc_driver *driver,
1008 hcd->bandwidth_mutex = kmalloc(sizeof(*hcd->bandwidth_mutex),
1009 GFP_KERNEL);
1010 if (!hcd->bandwidth_mutex) {
1011 + kfree(hcd->address0_mutex);
1012 kfree(hcd);
1013 dev_dbg(dev, "hcd bandwidth mutex alloc failed\n");
1014 return NULL;
1015 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
1016 index 8714b352e57f..f953d6d647f2 100644
1017 --- a/drivers/usb/core/hub.c
1018 +++ b/drivers/usb/core/hub.c
1019 @@ -1334,7 +1334,13 @@ static int hub_configure(struct usb_hub *hub,
1020 if (ret < 0) {
1021 message = "can't read hub descriptor";
1022 goto fail;
1023 - } else if (hub->descriptor->bNbrPorts > USB_MAXCHILDREN) {
1024 + }
1025 +
1026 + maxchild = USB_MAXCHILDREN;
1027 + if (hub_is_superspeed(hdev))
1028 + maxchild = min_t(unsigned, maxchild, USB_SS_MAXPORTS);
1029 +
1030 + if (hub->descriptor->bNbrPorts > maxchild) {
1031 message = "hub has too many ports!";
1032 ret = -ENODEV;
1033 goto fail;
1034 diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c
1035 index 2f1fb7e7aa54..9eba51b92f72 100644
1036 --- a/drivers/usb/dwc3/dwc3-exynos.c
1037 +++ b/drivers/usb/dwc3/dwc3-exynos.c
1038 @@ -148,7 +148,8 @@ static int dwc3_exynos_probe(struct platform_device *pdev)
1039 exynos->axius_clk = devm_clk_get(dev, "usbdrd30_axius_clk");
1040 if (IS_ERR(exynos->axius_clk)) {
1041 dev_err(dev, "no AXI UpScaler clk specified\n");
1042 - return -ENODEV;
1043 + ret = -ENODEV;
1044 + goto axius_clk_err;
1045 }
1046 clk_prepare_enable(exynos->axius_clk);
1047 } else {
1048 @@ -206,6 +207,7 @@ static int dwc3_exynos_probe(struct platform_device *pdev)
1049 regulator_disable(exynos->vdd33);
1050 err2:
1051 clk_disable_unprepare(exynos->axius_clk);
1052 +axius_clk_err:
1053 clk_disable_unprepare(exynos->susp_clk);
1054 clk_disable_unprepare(exynos->clk);
1055 return ret;
1056 diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
1057 index c3c5b87b35b3..baa7cdcc0ebc 100644
1058 --- a/drivers/usb/gadget/composite.c
1059 +++ b/drivers/usb/gadget/composite.c
1060 @@ -2147,7 +2147,7 @@ int composite_os_desc_req_prepare(struct usb_composite_dev *cdev,
1061 cdev->os_desc_req->buf = kmalloc(4096, GFP_KERNEL);
1062 if (!cdev->os_desc_req->buf) {
1063 ret = -ENOMEM;
1064 - kfree(cdev->os_desc_req);
1065 + usb_ep_free_request(ep0, cdev->os_desc_req);
1066 goto end;
1067 }
1068 cdev->os_desc_req->context = cdev;
1069 diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c
1070 index 1468d8f085a3..f959c42ecace 100644
1071 --- a/drivers/usb/gadget/legacy/inode.c
1072 +++ b/drivers/usb/gadget/legacy/inode.c
1073 @@ -1183,8 +1183,10 @@ dev_release (struct inode *inode, struct file *fd)
1074
1075 /* closing ep0 === shutdown all */
1076
1077 - if (dev->gadget_registered)
1078 + if (dev->gadget_registered) {
1079 usb_gadget_unregister_driver (&gadgetfs_driver);
1080 + dev->gadget_registered = false;
1081 + }
1082
1083 /* at this point "good" hardware has disconnected the
1084 * device from USB; the host won't see it any more.
1085 @@ -1677,9 +1679,10 @@ static void
1086 gadgetfs_suspend (struct usb_gadget *gadget)
1087 {
1088 struct dev_data *dev = get_gadget_data (gadget);
1089 + unsigned long flags;
1090
1091 INFO (dev, "suspended from state %d\n", dev->state);
1092 - spin_lock (&dev->lock);
1093 + spin_lock_irqsave(&dev->lock, flags);
1094 switch (dev->state) {
1095 case STATE_DEV_SETUP: // VERY odd... host died??
1096 case STATE_DEV_CONNECTED:
1097 @@ -1690,7 +1693,7 @@ gadgetfs_suspend (struct usb_gadget *gadget)
1098 default:
1099 break;
1100 }
1101 - spin_unlock (&dev->lock);
1102 + spin_unlock_irqrestore(&dev->lock, flags);
1103 }
1104
1105 static struct usb_gadget_driver gadgetfs_driver = {
1106 diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c
1107 index 4fa5de2eb501..94c8a9f6cbf1 100644
1108 --- a/drivers/usb/gadget/udc/dummy_hcd.c
1109 +++ b/drivers/usb/gadget/udc/dummy_hcd.c
1110 @@ -442,23 +442,16 @@ static void set_link_state(struct dummy_hcd *dum_hcd)
1111 /* Report reset and disconnect events to the driver */
1112 if (dum->driver && (disconnect || reset)) {
1113 stop_activity(dum);
1114 - spin_unlock(&dum->lock);
1115 if (reset)
1116 usb_gadget_udc_reset(&dum->gadget, dum->driver);
1117 else
1118 dum->driver->disconnect(&dum->gadget);
1119 - spin_lock(&dum->lock);
1120 }
1121 } else if (dum_hcd->active != dum_hcd->old_active) {
1122 - if (dum_hcd->old_active && dum->driver->suspend) {
1123 - spin_unlock(&dum->lock);
1124 + if (dum_hcd->old_active && dum->driver->suspend)
1125 dum->driver->suspend(&dum->gadget);
1126 - spin_lock(&dum->lock);
1127 - } else if (!dum_hcd->old_active && dum->driver->resume) {
1128 - spin_unlock(&dum->lock);
1129 + else if (!dum_hcd->old_active && dum->driver->resume)
1130 dum->driver->resume(&dum->gadget);
1131 - spin_lock(&dum->lock);
1132 - }
1133 }
1134
1135 dum_hcd->old_status = dum_hcd->port_status;
1136 @@ -983,7 +976,9 @@ static int dummy_udc_stop(struct usb_gadget *g)
1137 struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(g);
1138 struct dummy *dum = dum_hcd->dum;
1139
1140 + spin_lock_irq(&dum->lock);
1141 dum->driver = NULL;
1142 + spin_unlock_irq(&dum->lock);
1143
1144 return 0;
1145 }
1146 @@ -2009,7 +2004,7 @@ ss_hub_descriptor(struct usb_hub_descriptor *desc)
1147 HUB_CHAR_COMMON_OCPM);
1148 desc->bNbrPorts = 1;
1149 desc->u.ss.bHubHdrDecLat = 0x04; /* Worst case: 0.4 micro sec*/
1150 - desc->u.ss.DeviceRemovable = 0xffff;
1151 + desc->u.ss.DeviceRemovable = 0;
1152 }
1153
1154 static inline void hub_descriptor(struct usb_hub_descriptor *desc)
1155 @@ -2021,8 +2016,8 @@ static inline void hub_descriptor(struct usb_hub_descriptor *desc)
1156 HUB_CHAR_INDV_PORT_LPSM |
1157 HUB_CHAR_COMMON_OCPM);
1158 desc->bNbrPorts = 1;
1159 - desc->u.hs.DeviceRemovable[0] = 0xff;
1160 - desc->u.hs.DeviceRemovable[1] = 0xff;
1161 + desc->u.hs.DeviceRemovable[0] = 0;
1162 + desc->u.hs.DeviceRemovable[1] = 0xff; /* PortPwrCtrlMask */
1163 }
1164
1165 static int dummy_hub_control(
1166 diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
1167 index 61c938c36d88..33f3987218f7 100644
1168 --- a/drivers/usb/gadget/udc/net2280.c
1169 +++ b/drivers/usb/gadget/udc/net2280.c
1170 @@ -2469,11 +2469,8 @@ static void stop_activity(struct net2280 *dev, struct usb_gadget_driver *driver)
1171 nuke(&dev->ep[i]);
1172
1173 /* report disconnect; the driver is already quiesced */
1174 - if (driver) {
1175 - spin_unlock(&dev->lock);
1176 + if (driver)
1177 driver->disconnect(&dev->gadget);
1178 - spin_lock(&dev->lock);
1179 - }
1180
1181 usb_reinit(dev);
1182 }
1183 @@ -3347,8 +3344,6 @@ static void handle_stat0_irqs(struct net2280 *dev, u32 stat)
1184 BIT(PCI_RETRY_ABORT_INTERRUPT))
1185
1186 static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
1187 -__releases(dev->lock)
1188 -__acquires(dev->lock)
1189 {
1190 struct net2280_ep *ep;
1191 u32 tmp, num, mask, scratch;
1192 @@ -3389,14 +3384,12 @@ __acquires(dev->lock)
1193 if (disconnect || reset) {
1194 stop_activity(dev, dev->driver);
1195 ep0_start(dev);
1196 - spin_unlock(&dev->lock);
1197 if (reset)
1198 usb_gadget_udc_reset
1199 (&dev->gadget, dev->driver);
1200 else
1201 (dev->driver->disconnect)
1202 (&dev->gadget);
1203 - spin_lock(&dev->lock);
1204 return;
1205 }
1206 }
1207 diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c
1208 index fb8fc34827ab..ba78e3f7aea8 100644
1209 --- a/drivers/usb/gadget/udc/renesas_usb3.c
1210 +++ b/drivers/usb/gadget/udc/renesas_usb3.c
1211 @@ -1401,7 +1401,13 @@ static void usb3_request_done_pipen(struct renesas_usb3 *usb3,
1212 struct renesas_usb3_request *usb3_req,
1213 int status)
1214 {
1215 - usb3_pn_stop(usb3);
1216 + unsigned long flags;
1217 +
1218 + spin_lock_irqsave(&usb3->lock, flags);
1219 + if (usb3_pn_change(usb3, usb3_ep->num))
1220 + usb3_pn_stop(usb3);
1221 + spin_unlock_irqrestore(&usb3->lock, flags);
1222 +
1223 usb3_disable_pipe_irq(usb3, usb3_ep->num);
1224 usb3_request_done(usb3_ep, usb3_req, status);
1225
1226 @@ -1430,30 +1436,46 @@ static void usb3_irq_epc_pipen_bfrdy(struct renesas_usb3 *usb3, int num)
1227 {
1228 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, num);
1229 struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
1230 + bool done = false;
1231
1232 if (!usb3_req)
1233 return;
1234
1235 + spin_lock(&usb3->lock);
1236 + if (usb3_pn_change(usb3, num))
1237 + goto out;
1238 +
1239 if (usb3_ep->dir_in) {
1240 /* Do not stop the IN pipe here to detect LSTTR interrupt */
1241 if (!usb3_write_pipe(usb3_ep, usb3_req, USB3_PN_WRITE))
1242 usb3_clear_bit(usb3, PN_INT_BFRDY, USB3_PN_INT_ENA);
1243 } else {
1244 if (!usb3_read_pipe(usb3_ep, usb3_req, USB3_PN_READ))
1245 - usb3_request_done_pipen(usb3, usb3_ep, usb3_req, 0);
1246 + done = true;
1247 }
1248 +
1249 +out:
1250 + /* need to unlock because usb3_request_done_pipen() locks it */
1251 + spin_unlock(&usb3->lock);
1252 +
1253 + if (done)
1254 + usb3_request_done_pipen(usb3, usb3_ep, usb3_req, 0);
1255 }
1256
1257 static void usb3_irq_epc_pipen(struct renesas_usb3 *usb3, int num)
1258 {
1259 u32 pn_int_sta;
1260
1261 - if (usb3_pn_change(usb3, num) < 0)
1262 + spin_lock(&usb3->lock);
1263 + if (usb3_pn_change(usb3, num) < 0) {
1264 + spin_unlock(&usb3->lock);
1265 return;
1266 + }
1267
1268 pn_int_sta = usb3_read(usb3, USB3_PN_INT_STA);
1269 pn_int_sta &= usb3_read(usb3, USB3_PN_INT_ENA);
1270 usb3_write(usb3, pn_int_sta, USB3_PN_INT_STA);
1271 + spin_unlock(&usb3->lock);
1272 if (pn_int_sta & PN_INT_LSTTR)
1273 usb3_irq_epc_pipen_lsttr(usb3, num);
1274 if (pn_int_sta & PN_INT_BFRDY)
1275 @@ -1707,6 +1729,9 @@ static int renesas_usb3_start(struct usb_gadget *gadget,
1276 /* hook up the driver */
1277 usb3->driver = driver;
1278
1279 + pm_runtime_enable(usb3_to_dev(usb3));
1280 + pm_runtime_get_sync(usb3_to_dev(usb3));
1281 +
1282 renesas_usb3_init_controller(usb3);
1283
1284 return 0;
1285 @@ -1715,14 +1740,14 @@ static int renesas_usb3_start(struct usb_gadget *gadget,
1286 static int renesas_usb3_stop(struct usb_gadget *gadget)
1287 {
1288 struct renesas_usb3 *usb3 = gadget_to_renesas_usb3(gadget);
1289 - unsigned long flags;
1290
1291 - spin_lock_irqsave(&usb3->lock, flags);
1292 usb3->softconnect = false;
1293 usb3->gadget.speed = USB_SPEED_UNKNOWN;
1294 usb3->driver = NULL;
1295 renesas_usb3_stop_controller(usb3);
1296 - spin_unlock_irqrestore(&usb3->lock, flags);
1297 +
1298 + pm_runtime_put(usb3_to_dev(usb3));
1299 + pm_runtime_disable(usb3_to_dev(usb3));
1300
1301 return 0;
1302 }
1303 @@ -1761,9 +1786,6 @@ static int renesas_usb3_remove(struct platform_device *pdev)
1304 {
1305 struct renesas_usb3 *usb3 = platform_get_drvdata(pdev);
1306
1307 - pm_runtime_put(&pdev->dev);
1308 - pm_runtime_disable(&pdev->dev);
1309 -
1310 usb_del_gadget_udc(&usb3->gadget);
1311
1312 __renesas_usb3_ep_free_request(usb3->ep0_req);
1313 @@ -1948,9 +1970,6 @@ static int renesas_usb3_probe(struct platform_device *pdev)
1314
1315 usb3->workaround_for_vbus = priv->workaround_for_vbus;
1316
1317 - pm_runtime_enable(&pdev->dev);
1318 - pm_runtime_get_sync(&pdev->dev);
1319 -
1320 dev_info(&pdev->dev, "probed\n");
1321
1322 return 0;
1323 diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c
1324 index bfa7fa3d2eea..7bf78be1fd32 100644
1325 --- a/drivers/usb/host/r8a66597-hcd.c
1326 +++ b/drivers/usb/host/r8a66597-hcd.c
1327 @@ -1269,7 +1269,7 @@ static void set_td_timer(struct r8a66597 *r8a66597, struct r8a66597_td *td)
1328 time = 30;
1329 break;
1330 default:
1331 - time = 300;
1332 + time = 50;
1333 break;
1334 }
1335
1336 @@ -1785,6 +1785,7 @@ static void r8a66597_td_timer(unsigned long _r8a66597)
1337 pipe = td->pipe;
1338 pipe_stop(r8a66597, pipe);
1339
1340 + /* Select a different address or endpoint */
1341 new_td = td;
1342 do {
1343 list_move_tail(&new_td->queue,
1344 @@ -1794,7 +1795,8 @@ static void r8a66597_td_timer(unsigned long _r8a66597)
1345 new_td = td;
1346 break;
1347 }
1348 - } while (td != new_td && td->address == new_td->address);
1349 + } while (td != new_td && td->address == new_td->address &&
1350 + td->pipe->info.epnum == new_td->pipe->info.epnum);
1351
1352 start_transfer(r8a66597, new_td);
1353
1354 diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
1355 index 8c6eafe8966c..b7114c3f52aa 100644
1356 --- a/drivers/usb/host/xhci-mem.c
1357 +++ b/drivers/usb/host/xhci-mem.c
1358 @@ -2123,11 +2123,12 @@ static void xhci_add_in_port(struct xhci_hcd *xhci, unsigned int num_ports,
1359 {
1360 u32 temp, port_offset, port_count;
1361 int i;
1362 - u8 major_revision;
1363 + u8 major_revision, minor_revision;
1364 struct xhci_hub *rhub;
1365
1366 temp = readl(addr);
1367 major_revision = XHCI_EXT_PORT_MAJOR(temp);
1368 + minor_revision = XHCI_EXT_PORT_MINOR(temp);
1369
1370 if (major_revision == 0x03) {
1371 rhub = &xhci->usb3_rhub;
1372 @@ -2141,7 +2142,9 @@ static void xhci_add_in_port(struct xhci_hcd *xhci, unsigned int num_ports,
1373 return;
1374 }
1375 rhub->maj_rev = XHCI_EXT_PORT_MAJOR(temp);
1376 - rhub->min_rev = XHCI_EXT_PORT_MINOR(temp);
1377 +
1378 + if (rhub->min_rev < minor_revision)
1379 + rhub->min_rev = minor_revision;
1380
1381 /* Port offset and count in the third dword, see section 7.2 */
1382 temp = readl(addr + 2);
1383 diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
1384 index e7d6752eff32..69864ba38698 100644
1385 --- a/drivers/usb/host/xhci-pci.c
1386 +++ b/drivers/usb/host/xhci-pci.c
1387 @@ -201,6 +201,9 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
1388 if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
1389 pdev->device == 0x1042)
1390 xhci->quirks |= XHCI_BROKEN_STREAMS;
1391 + if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
1392 + pdev->device == 0x1142)
1393 + xhci->quirks |= XHCI_TRUST_TX_LENGTH;
1394
1395 if (pdev->vendor == PCI_VENDOR_ID_TI && pdev->device == 0x8241)
1396 xhci->quirks |= XHCI_LIMIT_ENDPOINT_INTERVAL_7;
1397 diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
1398 index 9f125e179acd..39666fb911b0 100644
1399 --- a/drivers/usb/musb/musb_dsps.c
1400 +++ b/drivers/usb/musb/musb_dsps.c
1401 @@ -213,6 +213,12 @@ static int dsps_check_status(struct musb *musb, void *unused)
1402 msecs_to_jiffies(wrp->poll_timeout));
1403 break;
1404 case OTG_STATE_A_WAIT_BCON:
1405 + /* keep VBUS on for host-only mode */
1406 + if (musb->port_mode == MUSB_PORT_MODE_HOST) {
1407 + mod_timer(&glue->timer, jiffies +
1408 + msecs_to_jiffies(wrp->poll_timeout));
1409 + break;
1410 + }
1411 musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
1412 skip_session = 1;
1413 /* fall */
1414 diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c
1415 index 03eccf29ace0..d6dc165e924b 100644
1416 --- a/drivers/usb/usbip/vhci_hcd.c
1417 +++ b/drivers/usb/usbip/vhci_hcd.c
1418 @@ -235,14 +235,19 @@ static int vhci_hub_status(struct usb_hcd *hcd, char *buf)
1419
1420 static inline void hub_descriptor(struct usb_hub_descriptor *desc)
1421 {
1422 + int width;
1423 +
1424 memset(desc, 0, sizeof(*desc));
1425 desc->bDescriptorType = USB_DT_HUB;
1426 - desc->bDescLength = 9;
1427 desc->wHubCharacteristics = cpu_to_le16(
1428 HUB_CHAR_INDV_PORT_LPSM | HUB_CHAR_COMMON_OCPM);
1429 +
1430 desc->bNbrPorts = VHCI_HC_PORTS;
1431 - desc->u.hs.DeviceRemovable[0] = 0xff;
1432 - desc->u.hs.DeviceRemovable[1] = 0xff;
1433 + BUILD_BUG_ON(VHCI_HC_PORTS > USB_MAXCHILDREN);
1434 + width = desc->bNbrPorts / 8 + 1;
1435 + desc->bDescLength = USB_DT_HUB_NONVAR_SIZE + 2 * width;
1436 + memset(&desc->u.hs.DeviceRemovable[0], 0, width);
1437 + memset(&desc->u.hs.DeviceRemovable[width], 0xff, width);
1438 }
1439
1440 static int vhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
1441 diff --git a/fs/btrfs/hash.c b/fs/btrfs/hash.c
1442 index a97fdc156a03..baacc1866861 100644
1443 --- a/fs/btrfs/hash.c
1444 +++ b/fs/btrfs/hash.c
1445 @@ -38,6 +38,7 @@ u32 btrfs_crc32c(u32 crc, const void *address, unsigned int length)
1446 {
1447 SHASH_DESC_ON_STACK(shash, tfm);
1448 u32 *ctx = (u32 *)shash_desc_ctx(shash);
1449 + u32 retval;
1450 int err;
1451
1452 shash->tfm = tfm;
1453 @@ -47,5 +48,7 @@ u32 btrfs_crc32c(u32 crc, const void *address, unsigned int length)
1454 err = crypto_shash_update(shash, address, length);
1455 BUG_ON(err);
1456
1457 - return *ctx;
1458 + retval = *ctx;
1459 + barrier_data(ctx);
1460 + return retval;
1461 }
1462 diff --git a/fs/configfs/symlink.c b/fs/configfs/symlink.c
1463 index db6d69289608..314b4edac72b 100644
1464 --- a/fs/configfs/symlink.c
1465 +++ b/fs/configfs/symlink.c
1466 @@ -83,14 +83,13 @@ static int create_link(struct config_item *parent_item,
1467 ret = -ENOMEM;
1468 sl = kmalloc(sizeof(struct configfs_symlink), GFP_KERNEL);
1469 if (sl) {
1470 - sl->sl_target = config_item_get(item);
1471 spin_lock(&configfs_dirent_lock);
1472 if (target_sd->s_type & CONFIGFS_USET_DROPPING) {
1473 spin_unlock(&configfs_dirent_lock);
1474 - config_item_put(item);
1475 kfree(sl);
1476 return -ENOENT;
1477 }
1478 + sl->sl_target = config_item_get(item);
1479 list_add(&sl->sl_list, &target_sd->s_links);
1480 spin_unlock(&configfs_dirent_lock);
1481 ret = configfs_create_link(sl, parent_item->ci_dentry,
1482 diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
1483 index c12f695923b6..88e111ab068b 100644
1484 --- a/fs/f2fs/f2fs.h
1485 +++ b/fs/f2fs/f2fs.h
1486 @@ -948,6 +948,7 @@ static inline u32 f2fs_crc32(struct f2fs_sb_info *sbi, const void *address,
1487 {
1488 SHASH_DESC_ON_STACK(shash, sbi->s_chksum_driver);
1489 u32 *ctx = (u32 *)shash_desc_ctx(shash);
1490 + u32 retval;
1491 int err;
1492
1493 shash->tfm = sbi->s_chksum_driver;
1494 @@ -957,7 +958,9 @@ static inline u32 f2fs_crc32(struct f2fs_sb_info *sbi, const void *address,
1495 err = crypto_shash_update(shash, address, length);
1496 BUG_ON(err);
1497
1498 - return *ctx;
1499 + retval = *ctx;
1500 + barrier_data(ctx);
1501 + return retval;
1502 }
1503
1504 static inline bool f2fs_crc_valid(struct f2fs_sb_info *sbi, __u32 blk_crc,
1505 diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
1506 index 4fb7b10f3a05..704fa0b17309 100644
1507 --- a/fs/hugetlbfs/inode.c
1508 +++ b/fs/hugetlbfs/inode.c
1509 @@ -191,7 +191,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
1510 addr = ALIGN(addr, huge_page_size(h));
1511 vma = find_vma(mm, addr);
1512 if (TASK_SIZE - len >= addr &&
1513 - (!vma || addr + len <= vma->vm_start))
1514 + (!vma || addr + len <= vm_start_gap(vma)))
1515 return addr;
1516 }
1517
1518 diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
1519 index b1517b6dcbdd..5138e781737a 100644
1520 --- a/fs/proc/task_mmu.c
1521 +++ b/fs/proc/task_mmu.c
1522 @@ -299,11 +299,7 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
1523
1524 /* We don't show the stack guard page in /proc/maps */
1525 start = vma->vm_start;
1526 - if (stack_guard_page_start(vma, start))
1527 - start += PAGE_SIZE;
1528 end = vma->vm_end;
1529 - if (stack_guard_page_end(vma, end))
1530 - end -= PAGE_SIZE;
1531
1532 seq_setwidth(m, 25 + sizeof(void *) * 6 - 1);
1533 seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu ",
1534 diff --git a/fs/read_write.c b/fs/read_write.c
1535 index 190e0d362581..e479e24dcd4c 100644
1536 --- a/fs/read_write.c
1537 +++ b/fs/read_write.c
1538 @@ -1232,7 +1232,7 @@ static size_t compat_writev(struct file *file,
1539 if (!(file->f_mode & FMODE_CAN_WRITE))
1540 goto out;
1541
1542 - ret = compat_do_readv_writev(WRITE, file, vec, vlen, pos, 0);
1543 + ret = compat_do_readv_writev(WRITE, file, vec, vlen, pos, flags);
1544
1545 out:
1546 if (ret > 0)
1547 diff --git a/include/linux/mm.h b/include/linux/mm.h
1548 index 0b5b2e4df14e..6c9e1ad12831 100644
1549 --- a/include/linux/mm.h
1550 +++ b/include/linux/mm.h
1551 @@ -1356,39 +1356,11 @@ int clear_page_dirty_for_io(struct page *page);
1552
1553 int get_cmdline(struct task_struct *task, char *buffer, int buflen);
1554
1555 -/* Is the vma a continuation of the stack vma above it? */
1556 -static inline int vma_growsdown(struct vm_area_struct *vma, unsigned long addr)
1557 -{
1558 - return vma && (vma->vm_end == addr) && (vma->vm_flags & VM_GROWSDOWN);
1559 -}
1560 -
1561 static inline bool vma_is_anonymous(struct vm_area_struct *vma)
1562 {
1563 return !vma->vm_ops;
1564 }
1565
1566 -static inline int stack_guard_page_start(struct vm_area_struct *vma,
1567 - unsigned long addr)
1568 -{
1569 - return (vma->vm_flags & VM_GROWSDOWN) &&
1570 - (vma->vm_start == addr) &&
1571 - !vma_growsdown(vma->vm_prev, addr);
1572 -}
1573 -
1574 -/* Is the vma a continuation of the stack vma below it? */
1575 -static inline int vma_growsup(struct vm_area_struct *vma, unsigned long addr)
1576 -{
1577 - return vma && (vma->vm_start == addr) && (vma->vm_flags & VM_GROWSUP);
1578 -}
1579 -
1580 -static inline int stack_guard_page_end(struct vm_area_struct *vma,
1581 - unsigned long addr)
1582 -{
1583 - return (vma->vm_flags & VM_GROWSUP) &&
1584 - (vma->vm_end == addr) &&
1585 - !vma_growsup(vma->vm_next, addr);
1586 -}
1587 -
1588 int vma_is_stack_for_current(struct vm_area_struct *vma);
1589
1590 extern unsigned long move_page_tables(struct vm_area_struct *vma,
1591 @@ -2127,6 +2099,7 @@ void page_cache_async_readahead(struct address_space *mapping,
1592 pgoff_t offset,
1593 unsigned long size);
1594
1595 +extern unsigned long stack_guard_gap;
1596 /* Generic expand stack which grows the stack according to GROWS{UP,DOWN} */
1597 extern int expand_stack(struct vm_area_struct *vma, unsigned long address);
1598
1599 @@ -2155,6 +2128,30 @@ static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * m
1600 return vma;
1601 }
1602
1603 +static inline unsigned long vm_start_gap(struct vm_area_struct *vma)
1604 +{
1605 + unsigned long vm_start = vma->vm_start;
1606 +
1607 + if (vma->vm_flags & VM_GROWSDOWN) {
1608 + vm_start -= stack_guard_gap;
1609 + if (vm_start > vma->vm_start)
1610 + vm_start = 0;
1611 + }
1612 + return vm_start;
1613 +}
1614 +
1615 +static inline unsigned long vm_end_gap(struct vm_area_struct *vma)
1616 +{
1617 + unsigned long vm_end = vma->vm_end;
1618 +
1619 + if (vma->vm_flags & VM_GROWSUP) {
1620 + vm_end += stack_guard_gap;
1621 + if (vm_end < vma->vm_end)
1622 + vm_end = -PAGE_SIZE;
1623 + }
1624 + return vm_end;
1625 +}
1626 +
1627 static inline unsigned long vma_pages(struct vm_area_struct *vma)
1628 {
1629 return (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
1630 diff --git a/include/uapi/linux/usb/ch11.h b/include/uapi/linux/usb/ch11.h
1631 index 361297e96f58..576c704e3fb8 100644
1632 --- a/include/uapi/linux/usb/ch11.h
1633 +++ b/include/uapi/linux/usb/ch11.h
1634 @@ -22,6 +22,9 @@
1635 */
1636 #define USB_MAXCHILDREN 31
1637
1638 +/* See USB 3.1 spec Table 10-5 */
1639 +#define USB_SS_MAXPORTS 15
1640 +
1641 /*
1642 * Hub request types
1643 */
1644 diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
1645 index 6b669593e7eb..ea41820ab12e 100644
1646 --- a/kernel/irq/manage.c
1647 +++ b/kernel/irq/manage.c
1648 @@ -1308,8 +1308,10 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
1649 ret = __irq_set_trigger(desc,
1650 new->flags & IRQF_TRIGGER_MASK);
1651
1652 - if (ret)
1653 + if (ret) {
1654 + irq_release_resources(desc);
1655 goto out_mask;
1656 + }
1657 }
1658
1659 desc->istate &= ~(IRQS_AUTODETECT | IRQS_SPURIOUS_DISABLED | \
1660 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
1661 index 154fd689fe02..692c948ae333 100644
1662 --- a/kernel/sched/core.c
1663 +++ b/kernel/sched/core.c
1664 @@ -5469,7 +5469,7 @@ void idle_task_exit(void)
1665 BUG_ON(cpu_online(smp_processor_id()));
1666
1667 if (mm != &init_mm) {
1668 - switch_mm_irqs_off(mm, &init_mm, current);
1669 + switch_mm(mm, &init_mm, current);
1670 finish_arch_post_lock_switch();
1671 }
1672 mmdrop(mm);
1673 diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
1674 index 12dd190634ab..9ba04aa740b9 100644
1675 --- a/kernel/time/alarmtimer.c
1676 +++ b/kernel/time/alarmtimer.c
1677 @@ -354,7 +354,7 @@ void alarm_start_relative(struct alarm *alarm, ktime_t start)
1678 {
1679 struct alarm_base *base = &alarm_bases[alarm->type];
1680
1681 - start = ktime_add(start, base->gettime());
1682 + start = ktime_add_safe(start, base->gettime());
1683 alarm_start(alarm, start);
1684 }
1685 EXPORT_SYMBOL_GPL(alarm_start_relative);
1686 @@ -440,7 +440,7 @@ u64 alarm_forward(struct alarm *alarm, ktime_t now, ktime_t interval)
1687 overrun++;
1688 }
1689
1690 - alarm->node.expires = ktime_add(alarm->node.expires, interval);
1691 + alarm->node.expires = ktime_add_safe(alarm->node.expires, interval);
1692 return overrun;
1693 }
1694 EXPORT_SYMBOL_GPL(alarm_forward);
1695 @@ -624,13 +624,21 @@ static int alarm_timer_set(struct k_itimer *timr, int flags,
1696
1697 /* start the timer */
1698 timr->it.alarm.interval = timespec_to_ktime(new_setting->it_interval);
1699 +
1700 + /*
1701 + * Rate limit to the tick as a hot fix to prevent DOS. Will be
1702 + * mopped up later.
1703 + */
1704 + if (ktime_to_ns(timr->it.alarm.interval) < TICK_NSEC)
1705 + timr->it.alarm.interval = ktime_set(0, TICK_NSEC);
1706 +
1707 exp = timespec_to_ktime(new_setting->it_value);
1708 /* Convert (if necessary) to absolute time */
1709 if (flags != TIMER_ABSTIME) {
1710 ktime_t now;
1711
1712 now = alarm_bases[timr->it.alarm.alarmtimer.type].gettime();
1713 - exp = ktime_add(now, exp);
1714 + exp = ktime_add_safe(now, exp);
1715 }
1716
1717 alarm_start(&timr->it.alarm.alarmtimer, exp);
1718 diff --git a/lib/libcrc32c.c b/lib/libcrc32c.c
1719 index 74a54b7f2562..9f79547d1b97 100644
1720 --- a/lib/libcrc32c.c
1721 +++ b/lib/libcrc32c.c
1722 @@ -43,7 +43,7 @@ static struct crypto_shash *tfm;
1723 u32 crc32c(u32 crc, const void *address, unsigned int length)
1724 {
1725 SHASH_DESC_ON_STACK(shash, tfm);
1726 - u32 *ctx = (u32 *)shash_desc_ctx(shash);
1727 + u32 ret, *ctx = (u32 *)shash_desc_ctx(shash);
1728 int err;
1729
1730 shash->tfm = tfm;
1731 @@ -53,7 +53,9 @@ u32 crc32c(u32 crc, const void *address, unsigned int length)
1732 err = crypto_shash_update(shash, address, length);
1733 BUG_ON(err);
1734
1735 - return *ctx;
1736 + ret = *ctx;
1737 + barrier_data(ctx);
1738 + return ret;
1739 }
1740
1741 EXPORT_SYMBOL(crc32c);
1742 diff --git a/mm/gup.c b/mm/gup.c
1743 index ec4f82704b6f..c63a0341ae38 100644
1744 --- a/mm/gup.c
1745 +++ b/mm/gup.c
1746 @@ -370,11 +370,6 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
1747 /* mlock all present pages, but do not fault in new pages */
1748 if ((*flags & (FOLL_POPULATE | FOLL_MLOCK)) == FOLL_MLOCK)
1749 return -ENOENT;
1750 - /* For mm_populate(), just skip the stack guard page. */
1751 - if ((*flags & FOLL_POPULATE) &&
1752 - (stack_guard_page_start(vma, address) ||
1753 - stack_guard_page_end(vma, address + PAGE_SIZE)))
1754 - return -ENOENT;
1755 if (*flags & FOLL_WRITE)
1756 fault_flags |= FAULT_FLAG_WRITE;
1757 if (*flags & FOLL_REMOTE)
1758 diff --git a/mm/memory-failure.c b/mm/memory-failure.c
1759 index 4bd44803e366..ce7d416edab7 100644
1760 --- a/mm/memory-failure.c
1761 +++ b/mm/memory-failure.c
1762 @@ -1176,7 +1176,10 @@ int memory_failure(unsigned long pfn, int trapno, int flags)
1763 * page_remove_rmap() in try_to_unmap_one(). So to determine page status
1764 * correctly, we save a copy of the page flags at this time.
1765 */
1766 - page_flags = p->flags;
1767 + if (PageHuge(p))
1768 + page_flags = hpage->flags;
1769 + else
1770 + page_flags = p->flags;
1771
1772 /*
1773 * unpoison always clear PG_hwpoison inside page lock
1774 diff --git a/mm/memory.c b/mm/memory.c
1775 index cbb1e5e5f791..e6a5a1f20492 100644
1776 --- a/mm/memory.c
1777 +++ b/mm/memory.c
1778 @@ -2699,40 +2699,6 @@ int do_swap_page(struct fault_env *fe, pte_t orig_pte)
1779 }
1780
1781 /*
1782 - * This is like a special single-page "expand_{down|up}wards()",
1783 - * except we must first make sure that 'address{-|+}PAGE_SIZE'
1784 - * doesn't hit another vma.
1785 - */
1786 -static inline int check_stack_guard_page(struct vm_area_struct *vma, unsigned long address)
1787 -{
1788 - address &= PAGE_MASK;
1789 - if ((vma->vm_flags & VM_GROWSDOWN) && address == vma->vm_start) {
1790 - struct vm_area_struct *prev = vma->vm_prev;
1791 -
1792 - /*
1793 - * Is there a mapping abutting this one below?
1794 - *
1795 - * That's only ok if it's the same stack mapping
1796 - * that has gotten split..
1797 - */
1798 - if (prev && prev->vm_end == address)
1799 - return prev->vm_flags & VM_GROWSDOWN ? 0 : -ENOMEM;
1800 -
1801 - return expand_downwards(vma, address - PAGE_SIZE);
1802 - }
1803 - if ((vma->vm_flags & VM_GROWSUP) && address + PAGE_SIZE == vma->vm_end) {
1804 - struct vm_area_struct *next = vma->vm_next;
1805 -
1806 - /* As VM_GROWSDOWN but s/below/above/ */
1807 - if (next && next->vm_start == address + PAGE_SIZE)
1808 - return next->vm_flags & VM_GROWSUP ? 0 : -ENOMEM;
1809 -
1810 - return expand_upwards(vma, address + PAGE_SIZE);
1811 - }
1812 - return 0;
1813 -}
1814 -
1815 -/*
1816 * We enter with non-exclusive mmap_sem (to exclude vma changes,
1817 * but allow concurrent faults), and pte mapped but not yet locked.
1818 * We return with mmap_sem still held, but pte unmapped and unlocked.
1819 @@ -2748,10 +2714,6 @@ static int do_anonymous_page(struct fault_env *fe)
1820 if (vma->vm_flags & VM_SHARED)
1821 return VM_FAULT_SIGBUS;
1822
1823 - /* Check if we need to add a guard page to the stack */
1824 - if (check_stack_guard_page(vma, fe->address) < 0)
1825 - return VM_FAULT_SIGSEGV;
1826 -
1827 /*
1828 * Use pte_alloc() instead of pte_alloc_map(). We can't run
1829 * pte_offset_map() on pmds where a huge pmd might be created
1830 diff --git a/mm/mmap.c b/mm/mmap.c
1831 index 1af87c14183d..145d3d5253e8 100644
1832 --- a/mm/mmap.c
1833 +++ b/mm/mmap.c
1834 @@ -183,6 +183,7 @@ SYSCALL_DEFINE1(brk, unsigned long, brk)
1835 unsigned long retval;
1836 unsigned long newbrk, oldbrk;
1837 struct mm_struct *mm = current->mm;
1838 + struct vm_area_struct *next;
1839 unsigned long min_brk;
1840 bool populate;
1841
1842 @@ -228,7 +229,8 @@ SYSCALL_DEFINE1(brk, unsigned long, brk)
1843 }
1844
1845 /* Check against existing mmap mappings. */
1846 - if (find_vma_intersection(mm, oldbrk, newbrk+PAGE_SIZE))
1847 + next = find_vma(mm, oldbrk);
1848 + if (next && newbrk + PAGE_SIZE > vm_start_gap(next))
1849 goto out;
1850
1851 /* Ok, looks good - let it rip. */
1852 @@ -251,10 +253,22 @@ SYSCALL_DEFINE1(brk, unsigned long, brk)
1853
1854 static long vma_compute_subtree_gap(struct vm_area_struct *vma)
1855 {
1856 - unsigned long max, subtree_gap;
1857 - max = vma->vm_start;
1858 - if (vma->vm_prev)
1859 - max -= vma->vm_prev->vm_end;
1860 + unsigned long max, prev_end, subtree_gap;
1861 +
1862 + /*
1863 + * Note: in the rare case of a VM_GROWSDOWN above a VM_GROWSUP, we
1864 + * allow two stack_guard_gaps between them here, and when choosing
1865 + * an unmapped area; whereas when expanding we only require one.
1866 + * That's a little inconsistent, but keeps the code here simpler.
1867 + */
1868 + max = vm_start_gap(vma);
1869 + if (vma->vm_prev) {
1870 + prev_end = vm_end_gap(vma->vm_prev);
1871 + if (max > prev_end)
1872 + max -= prev_end;
1873 + else
1874 + max = 0;
1875 + }
1876 if (vma->vm_rb.rb_left) {
1877 subtree_gap = rb_entry(vma->vm_rb.rb_left,
1878 struct vm_area_struct, vm_rb)->rb_subtree_gap;
1879 @@ -350,7 +364,7 @@ static void validate_mm(struct mm_struct *mm)
1880 anon_vma_unlock_read(anon_vma);
1881 }
1882
1883 - highest_address = vma->vm_end;
1884 + highest_address = vm_end_gap(vma);
1885 vma = vma->vm_next;
1886 i++;
1887 }
1888 @@ -539,7 +553,7 @@ void __vma_link_rb(struct mm_struct *mm, struct vm_area_struct *vma,
1889 if (vma->vm_next)
1890 vma_gap_update(vma->vm_next);
1891 else
1892 - mm->highest_vm_end = vma->vm_end;
1893 + mm->highest_vm_end = vm_end_gap(vma);
1894
1895 /*
1896 * vma->vm_prev wasn't known when we followed the rbtree to find the
1897 @@ -854,7 +868,7 @@ int __vma_adjust(struct vm_area_struct *vma, unsigned long start,
1898 vma_gap_update(vma);
1899 if (end_changed) {
1900 if (!next)
1901 - mm->highest_vm_end = end;
1902 + mm->highest_vm_end = vm_end_gap(vma);
1903 else if (!adjust_next)
1904 vma_gap_update(next);
1905 }
1906 @@ -939,7 +953,7 @@ int __vma_adjust(struct vm_area_struct *vma, unsigned long start,
1907 * mm->highest_vm_end doesn't need any update
1908 * in remove_next == 1 case.
1909 */
1910 - VM_WARN_ON(mm->highest_vm_end != end);
1911 + VM_WARN_ON(mm->highest_vm_end != vm_end_gap(vma));
1912 }
1913 }
1914 if (insert && file)
1915 @@ -1783,7 +1797,7 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info)
1916
1917 while (true) {
1918 /* Visit left subtree if it looks promising */
1919 - gap_end = vma->vm_start;
1920 + gap_end = vm_start_gap(vma);
1921 if (gap_end >= low_limit && vma->vm_rb.rb_left) {
1922 struct vm_area_struct *left =
1923 rb_entry(vma->vm_rb.rb_left,
1924 @@ -1794,12 +1808,13 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info)
1925 }
1926 }
1927
1928 - gap_start = vma->vm_prev ? vma->vm_prev->vm_end : 0;
1929 + gap_start = vma->vm_prev ? vm_end_gap(vma->vm_prev) : 0;
1930 check_current:
1931 /* Check if current node has a suitable gap */
1932 if (gap_start > high_limit)
1933 return -ENOMEM;
1934 - if (gap_end >= low_limit && gap_end - gap_start >= length)
1935 + if (gap_end >= low_limit &&
1936 + gap_end > gap_start && gap_end - gap_start >= length)
1937 goto found;
1938
1939 /* Visit right subtree if it looks promising */
1940 @@ -1821,8 +1836,8 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info)
1941 vma = rb_entry(rb_parent(prev),
1942 struct vm_area_struct, vm_rb);
1943 if (prev == vma->vm_rb.rb_left) {
1944 - gap_start = vma->vm_prev->vm_end;
1945 - gap_end = vma->vm_start;
1946 + gap_start = vm_end_gap(vma->vm_prev);
1947 + gap_end = vm_start_gap(vma);
1948 goto check_current;
1949 }
1950 }
1951 @@ -1886,7 +1901,7 @@ unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info)
1952
1953 while (true) {
1954 /* Visit right subtree if it looks promising */
1955 - gap_start = vma->vm_prev ? vma->vm_prev->vm_end : 0;
1956 + gap_start = vma->vm_prev ? vm_end_gap(vma->vm_prev) : 0;
1957 if (gap_start <= high_limit && vma->vm_rb.rb_right) {
1958 struct vm_area_struct *right =
1959 rb_entry(vma->vm_rb.rb_right,
1960 @@ -1899,10 +1914,11 @@ unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info)
1961
1962 check_current:
1963 /* Check if current node has a suitable gap */
1964 - gap_end = vma->vm_start;
1965 + gap_end = vm_start_gap(vma);
1966 if (gap_end < low_limit)
1967 return -ENOMEM;
1968 - if (gap_start <= high_limit && gap_end - gap_start >= length)
1969 + if (gap_start <= high_limit &&
1970 + gap_end > gap_start && gap_end - gap_start >= length)
1971 goto found;
1972
1973 /* Visit left subtree if it looks promising */
1974 @@ -1925,7 +1941,7 @@ unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info)
1975 struct vm_area_struct, vm_rb);
1976 if (prev == vma->vm_rb.rb_right) {
1977 gap_start = vma->vm_prev ?
1978 - vma->vm_prev->vm_end : 0;
1979 + vm_end_gap(vma->vm_prev) : 0;
1980 goto check_current;
1981 }
1982 }
1983 @@ -1963,7 +1979,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
1984 unsigned long len, unsigned long pgoff, unsigned long flags)
1985 {
1986 struct mm_struct *mm = current->mm;
1987 - struct vm_area_struct *vma;
1988 + struct vm_area_struct *vma, *prev;
1989 struct vm_unmapped_area_info info;
1990
1991 if (len > TASK_SIZE - mmap_min_addr)
1992 @@ -1974,9 +1990,10 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
1993
1994 if (addr) {
1995 addr = PAGE_ALIGN(addr);
1996 - vma = find_vma(mm, addr);
1997 + vma = find_vma_prev(mm, addr, &prev);
1998 if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
1999 - (!vma || addr + len <= vma->vm_start))
2000 + (!vma || addr + len <= vm_start_gap(vma)) &&
2001 + (!prev || addr >= vm_end_gap(prev)))
2002 return addr;
2003 }
2004
2005 @@ -1999,7 +2016,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
2006 const unsigned long len, const unsigned long pgoff,
2007 const unsigned long flags)
2008 {
2009 - struct vm_area_struct *vma;
2010 + struct vm_area_struct *vma, *prev;
2011 struct mm_struct *mm = current->mm;
2012 unsigned long addr = addr0;
2013 struct vm_unmapped_area_info info;
2014 @@ -2014,9 +2031,10 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
2015 /* requesting a specific address */
2016 if (addr) {
2017 addr = PAGE_ALIGN(addr);
2018 - vma = find_vma(mm, addr);
2019 + vma = find_vma_prev(mm, addr, &prev);
2020 if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
2021 - (!vma || addr + len <= vma->vm_start))
2022 + (!vma || addr + len <= vm_start_gap(vma)) &&
2023 + (!prev || addr >= vm_end_gap(prev)))
2024 return addr;
2025 }
2026
2027 @@ -2151,21 +2169,19 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr,
2028 * update accounting. This is shared with both the
2029 * grow-up and grow-down cases.
2030 */
2031 -static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, unsigned long grow)
2032 +static int acct_stack_growth(struct vm_area_struct *vma,
2033 + unsigned long size, unsigned long grow)
2034 {
2035 struct mm_struct *mm = vma->vm_mm;
2036 struct rlimit *rlim = current->signal->rlim;
2037 - unsigned long new_start, actual_size;
2038 + unsigned long new_start;
2039
2040 /* address space limit tests */
2041 if (!may_expand_vm(mm, vma->vm_flags, grow))
2042 return -ENOMEM;
2043
2044 /* Stack limit test */
2045 - actual_size = size;
2046 - if (size && (vma->vm_flags & (VM_GROWSUP | VM_GROWSDOWN)))
2047 - actual_size -= PAGE_SIZE;
2048 - if (actual_size > READ_ONCE(rlim[RLIMIT_STACK].rlim_cur))
2049 + if (size > READ_ONCE(rlim[RLIMIT_STACK].rlim_cur))
2050 return -ENOMEM;
2051
2052 /* mlock limit tests */
2053 @@ -2203,16 +2219,32 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
2054 int expand_upwards(struct vm_area_struct *vma, unsigned long address)
2055 {
2056 struct mm_struct *mm = vma->vm_mm;
2057 + struct vm_area_struct *next;
2058 + unsigned long gap_addr;
2059 int error = 0;
2060
2061 if (!(vma->vm_flags & VM_GROWSUP))
2062 return -EFAULT;
2063
2064 - /* Guard against wrapping around to address 0. */
2065 - if (address < PAGE_ALIGN(address+4))
2066 - address = PAGE_ALIGN(address+4);
2067 - else
2068 + /* Guard against exceeding limits of the address space. */
2069 + address &= PAGE_MASK;
2070 + if (address >= TASK_SIZE)
2071 return -ENOMEM;
2072 + address += PAGE_SIZE;
2073 +
2074 + /* Enforce stack_guard_gap */
2075 + gap_addr = address + stack_guard_gap;
2076 +
2077 + /* Guard against overflow */
2078 + if (gap_addr < address || gap_addr > TASK_SIZE)
2079 + gap_addr = TASK_SIZE;
2080 +
2081 + next = vma->vm_next;
2082 + if (next && next->vm_start < gap_addr) {
2083 + if (!(next->vm_flags & VM_GROWSUP))
2084 + return -ENOMEM;
2085 + /* Check that both stack segments have the same anon_vma? */
2086 + }
2087
2088 /* We must make sure the anon_vma is allocated. */
2089 if (unlikely(anon_vma_prepare(vma)))
2090 @@ -2257,7 +2289,7 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
2091 if (vma->vm_next)
2092 vma_gap_update(vma->vm_next);
2093 else
2094 - mm->highest_vm_end = address;
2095 + mm->highest_vm_end = vm_end_gap(vma);
2096 spin_unlock(&mm->page_table_lock);
2097
2098 perf_event_mmap(vma);
2099 @@ -2278,6 +2310,8 @@ int expand_downwards(struct vm_area_struct *vma,
2100 unsigned long address)
2101 {
2102 struct mm_struct *mm = vma->vm_mm;
2103 + struct vm_area_struct *prev;
2104 + unsigned long gap_addr;
2105 int error;
2106
2107 address &= PAGE_MASK;
2108 @@ -2285,6 +2319,17 @@ int expand_downwards(struct vm_area_struct *vma,
2109 if (error)
2110 return error;
2111
2112 + /* Enforce stack_guard_gap */
2113 + gap_addr = address - stack_guard_gap;
2114 + if (gap_addr > address)
2115 + return -ENOMEM;
2116 + prev = vma->vm_prev;
2117 + if (prev && prev->vm_end > gap_addr) {
2118 + if (!(prev->vm_flags & VM_GROWSDOWN))
2119 + return -ENOMEM;
2120 + /* Check that both stack segments have the same anon_vma? */
2121 + }
2122 +
2123 /* We must make sure the anon_vma is allocated. */
2124 if (unlikely(anon_vma_prepare(vma)))
2125 return -ENOMEM;
2126 @@ -2339,28 +2384,25 @@ int expand_downwards(struct vm_area_struct *vma,
2127 return error;
2128 }
2129
2130 -/*
2131 - * Note how expand_stack() refuses to expand the stack all the way to
2132 - * abut the next virtual mapping, *unless* that mapping itself is also
2133 - * a stack mapping. We want to leave room for a guard page, after all
2134 - * (the guard page itself is not added here, that is done by the
2135 - * actual page faulting logic)
2136 - *
2137 - * This matches the behavior of the guard page logic (see mm/memory.c:
2138 - * check_stack_guard_page()), which only allows the guard page to be
2139 - * removed under these circumstances.
2140 - */
2141 +/* enforced gap between the expanding stack and other mappings. */
2142 +unsigned long stack_guard_gap = 256UL<<PAGE_SHIFT;
2143 +
2144 +static int __init cmdline_parse_stack_guard_gap(char *p)
2145 +{
2146 + unsigned long val;
2147 + char *endptr;
2148 +
2149 + val = simple_strtoul(p, &endptr, 10);
2150 + if (!*endptr)
2151 + stack_guard_gap = val << PAGE_SHIFT;
2152 +
2153 + return 0;
2154 +}
2155 +__setup("stack_guard_gap=", cmdline_parse_stack_guard_gap);
2156 +
2157 #ifdef CONFIG_STACK_GROWSUP
2158 int expand_stack(struct vm_area_struct *vma, unsigned long address)
2159 {
2160 - struct vm_area_struct *next;
2161 -
2162 - address &= PAGE_MASK;
2163 - next = vma->vm_next;
2164 - if (next && next->vm_start == address + PAGE_SIZE) {
2165 - if (!(next->vm_flags & VM_GROWSUP))
2166 - return -ENOMEM;
2167 - }
2168 return expand_upwards(vma, address);
2169 }
2170
2171 @@ -2382,14 +2424,6 @@ find_extend_vma(struct mm_struct *mm, unsigned long addr)
2172 #else
2173 int expand_stack(struct vm_area_struct *vma, unsigned long address)
2174 {
2175 - struct vm_area_struct *prev;
2176 -
2177 - address &= PAGE_MASK;
2178 - prev = vma->vm_prev;
2179 - if (prev && prev->vm_end == address) {
2180 - if (!(prev->vm_flags & VM_GROWSDOWN))
2181 - return -ENOMEM;
2182 - }
2183 return expand_downwards(vma, address);
2184 }
2185
2186 @@ -2487,7 +2521,7 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma,
2187 vma->vm_prev = prev;
2188 vma_gap_update(vma);
2189 } else
2190 - mm->highest_vm_end = prev ? prev->vm_end : 0;
2191 + mm->highest_vm_end = prev ? vm_end_gap(prev) : 0;
2192 tail_vma->vm_next = NULL;
2193
2194 /* Kill the cache */
2195 diff --git a/mm/swap_cgroup.c b/mm/swap_cgroup.c
2196 index 310ac0b8f974..454d6d7509ed 100644
2197 --- a/mm/swap_cgroup.c
2198 +++ b/mm/swap_cgroup.c
2199 @@ -48,6 +48,9 @@ static int swap_cgroup_prepare(int type)
2200 if (!page)
2201 goto not_enough_page;
2202 ctrl->map[idx] = page;
2203 +
2204 + if (!(idx % SWAP_CLUSTER_MAX))
2205 + cond_resched();
2206 }
2207 return 0;
2208 not_enough_page:
2209 diff --git a/net/ipv6/ila/ila_xlat.c b/net/ipv6/ila/ila_xlat.c
2210 index e604013dd814..7a5b9812af10 100644
2211 --- a/net/ipv6/ila/ila_xlat.c
2212 +++ b/net/ipv6/ila/ila_xlat.c
2213 @@ -68,6 +68,7 @@ static inline u32 ila_locator_hash(struct ila_locator loc)
2214 {
2215 u32 *v = (u32 *)loc.v32;
2216
2217 + __ila_hash_secret_init();
2218 return jhash_2words(v[0], v[1], hashrnd);
2219 }
2220
2221 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
2222 index fd6541f3ade3..07001b6d36cc 100644
2223 --- a/net/mac80211/cfg.c
2224 +++ b/net/mac80211/cfg.c
2225 @@ -865,6 +865,8 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
2226 default:
2227 return -EINVAL;
2228 }
2229 + sdata->u.ap.req_smps = sdata->smps_mode;
2230 +
2231 sdata->needed_rx_chains = sdata->local->rx_chains;
2232
2233 mutex_lock(&local->mtx);
2234 diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
2235 index a31d30713d08..62d13eabe17f 100644
2236 --- a/net/mac80211/ibss.c
2237 +++ b/net/mac80211/ibss.c
2238 @@ -66,6 +66,8 @@ ieee80211_ibss_build_presp(struct ieee80211_sub_if_data *sdata,
2239 2 + (IEEE80211_MAX_SUPP_RATES - 8) +
2240 2 + sizeof(struct ieee80211_ht_cap) +
2241 2 + sizeof(struct ieee80211_ht_operation) +
2242 + 2 + sizeof(struct ieee80211_vht_cap) +
2243 + 2 + sizeof(struct ieee80211_vht_operation) +
2244 ifibss->ie_len;
2245 presp = kzalloc(sizeof(*presp) + frame_len, GFP_KERNEL);
2246 if (!presp)
2247 @@ -487,14 +489,14 @@ int ieee80211_ibss_csa_beacon(struct ieee80211_sub_if_data *sdata,
2248 struct beacon_data *presp, *old_presp;
2249 struct cfg80211_bss *cbss;
2250 const struct cfg80211_bss_ies *ies;
2251 - u16 capability = 0;
2252 + u16 capability = WLAN_CAPABILITY_IBSS;
2253 u64 tsf;
2254 int ret = 0;
2255
2256 sdata_assert_lock(sdata);
2257
2258 if (ifibss->privacy)
2259 - capability = WLAN_CAPABILITY_PRIVACY;
2260 + capability |= WLAN_CAPABILITY_PRIVACY;
2261
2262 cbss = cfg80211_get_bss(sdata->local->hw.wiphy, ifibss->chandef.chan,
2263 ifibss->bssid, ifibss->ssid,
2264 diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
2265 index acaaf616da71..c45a0fcfb3e7 100644
2266 --- a/net/mac80211/rx.c
2267 +++ b/net/mac80211/rx.c
2268 @@ -1585,12 +1585,16 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx)
2269 */
2270 if (!ieee80211_hw_check(&sta->local->hw, AP_LINK_PS) &&
2271 !ieee80211_has_morefrags(hdr->frame_control) &&
2272 + !ieee80211_is_back_req(hdr->frame_control) &&
2273 !(status->rx_flags & IEEE80211_RX_DEFERRED_RELEASE) &&
2274 (rx->sdata->vif.type == NL80211_IFTYPE_AP ||
2275 rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN) &&
2276 - /* PM bit is only checked in frames where it isn't reserved,
2277 + /*
2278 + * PM bit is only checked in frames where it isn't reserved,
2279 * in AP mode it's reserved in non-bufferable management frames
2280 * (cf. IEEE 802.11-2012 8.2.4.1.7 Power Management field)
2281 + * BAR frames should be ignored as specified in
2282 + * IEEE 802.11-2012 10.2.1.2.
2283 */
2284 (!ieee80211_is_mgmt(hdr->frame_control) ||
2285 ieee80211_is_bufferable_mmpdu(hdr->frame_control))) {
2286 @@ -2467,7 +2471,8 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
2287 if (is_multicast_ether_addr(hdr->addr1)) {
2288 mpp_addr = hdr->addr3;
2289 proxied_addr = mesh_hdr->eaddr1;
2290 - } else if (mesh_hdr->flags & MESH_FLAGS_AE_A5_A6) {
2291 + } else if ((mesh_hdr->flags & MESH_FLAGS_AE) ==
2292 + MESH_FLAGS_AE_A5_A6) {
2293 /* has_a4 already checked in ieee80211_rx_mesh_check */
2294 mpp_addr = hdr->addr4;
2295 proxied_addr = mesh_hdr->eaddr2;
2296 @@ -3949,6 +3954,7 @@ static bool ieee80211_invoke_fast_rx(struct ieee80211_rx_data *rx,
2297 stats->last_rate = sta_stats_encode_rate(status);
2298
2299 stats->fragments++;
2300 + stats->packets++;
2301
2302 if (!(status->flag & RX_FLAG_NO_SIGNAL_VAL)) {
2303 stats->last_signal = status->signal;
2304 diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
2305 index 8e05032689f0..b2c823ffad74 100644
2306 --- a/net/mac80211/sta_info.c
2307 +++ b/net/mac80211/sta_info.c
2308 @@ -2148,7 +2148,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
2309 struct ieee80211_sta_rx_stats *cpurxs;
2310
2311 cpurxs = per_cpu_ptr(sta->pcpu_rx_stats, cpu);
2312 - sinfo->rx_packets += cpurxs->dropped;
2313 + sinfo->rx_dropped_misc += cpurxs->dropped;
2314 }
2315 }
2316
2317 diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c
2318 index 42ce9bd4426f..5c71d60f3a64 100644
2319 --- a/net/mac80211/wpa.c
2320 +++ b/net/mac80211/wpa.c
2321 @@ -17,6 +17,7 @@
2322 #include <asm/unaligned.h>
2323 #include <net/mac80211.h>
2324 #include <crypto/aes.h>
2325 +#include <crypto/algapi.h>
2326
2327 #include "ieee80211_i.h"
2328 #include "michael.h"
2329 @@ -153,7 +154,7 @@ ieee80211_rx_h_michael_mic_verify(struct ieee80211_rx_data *rx)
2330 data_len = skb->len - hdrlen - MICHAEL_MIC_LEN;
2331 key = &rx->key->conf.key[NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY];
2332 michael_mic(key, hdr, data, data_len, mic);
2333 - if (memcmp(mic, data + data_len, MICHAEL_MIC_LEN) != 0)
2334 + if (crypto_memneq(mic, data + data_len, MICHAEL_MIC_LEN))
2335 goto mic_fail;
2336
2337 /* remove Michael MIC from payload */
2338 @@ -1047,7 +1048,7 @@ ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx)
2339 bip_aad(skb, aad);
2340 ieee80211_aes_cmac(key->u.aes_cmac.tfm, aad,
2341 skb->data + 24, skb->len - 24, mic);
2342 - if (memcmp(mic, mmie->mic, sizeof(mmie->mic)) != 0) {
2343 + if (crypto_memneq(mic, mmie->mic, sizeof(mmie->mic))) {
2344 key->u.aes_cmac.icverrors++;
2345 return RX_DROP_UNUSABLE;
2346 }
2347 @@ -1097,7 +1098,7 @@ ieee80211_crypto_aes_cmac_256_decrypt(struct ieee80211_rx_data *rx)
2348 bip_aad(skb, aad);
2349 ieee80211_aes_cmac_256(key->u.aes_cmac.tfm, aad,
2350 skb->data + 24, skb->len - 24, mic);
2351 - if (memcmp(mic, mmie->mic, sizeof(mmie->mic)) != 0) {
2352 + if (crypto_memneq(mic, mmie->mic, sizeof(mmie->mic))) {
2353 key->u.aes_cmac.icverrors++;
2354 return RX_DROP_UNUSABLE;
2355 }
2356 @@ -1201,7 +1202,7 @@ ieee80211_crypto_aes_gmac_decrypt(struct ieee80211_rx_data *rx)
2357 if (ieee80211_aes_gmac(key->u.aes_gmac.tfm, aad, nonce,
2358 skb->data + 24, skb->len - 24,
2359 mic) < 0 ||
2360 - memcmp(mic, mmie->mic, sizeof(mmie->mic)) != 0) {
2361 + crypto_memneq(mic, mmie->mic, sizeof(mmie->mic))) {
2362 key->u.aes_gmac.icverrors++;
2363 return RX_DROP_UNUSABLE;
2364 }
2365 diff --git a/net/wireless/util.c b/net/wireless/util.c
2366 index 659b507b347d..c921c2eed15d 100644
2367 --- a/net/wireless/util.c
2368 +++ b/net/wireless/util.c
2369 @@ -454,6 +454,8 @@ int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,
2370 if (iftype == NL80211_IFTYPE_MESH_POINT)
2371 skb_copy_bits(skb, hdrlen, &mesh_flags, 1);
2372
2373 + mesh_flags &= MESH_FLAGS_AE;
2374 +
2375 switch (hdr->frame_control &
2376 cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) {
2377 case cpu_to_le16(IEEE80211_FCTL_TODS):
2378 @@ -469,9 +471,9 @@ int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,
2379 iftype != NL80211_IFTYPE_STATION))
2380 return -1;
2381 if (iftype == NL80211_IFTYPE_MESH_POINT) {
2382 - if (mesh_flags & MESH_FLAGS_AE_A4)
2383 + if (mesh_flags == MESH_FLAGS_AE_A4)
2384 return -1;
2385 - if (mesh_flags & MESH_FLAGS_AE_A5_A6) {
2386 + if (mesh_flags == MESH_FLAGS_AE_A5_A6) {
2387 skb_copy_bits(skb, hdrlen +
2388 offsetof(struct ieee80211s_hdr, eaddr1),
2389 tmp.h_dest, 2 * ETH_ALEN);
2390 @@ -487,9 +489,9 @@ int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,
2391 ether_addr_equal(tmp.h_source, addr)))
2392 return -1;
2393 if (iftype == NL80211_IFTYPE_MESH_POINT) {
2394 - if (mesh_flags & MESH_FLAGS_AE_A5_A6)
2395 + if (mesh_flags == MESH_FLAGS_AE_A5_A6)
2396 return -1;
2397 - if (mesh_flags & MESH_FLAGS_AE_A4)
2398 + if (mesh_flags == MESH_FLAGS_AE_A4)
2399 skb_copy_bits(skb, hdrlen +
2400 offsetof(struct ieee80211s_hdr, eaddr1),
2401 tmp.h_source, ETH_ALEN);