Magellan Linux

Contents of /trunk/kernel-alx/patches-4.9/0273-4.9.174-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3350 - (show annotations) (download)
Tue Jun 18 09:42:03 2019 UTC (4 years, 10 months ago) by niro
File size: 83462 byte(s)
-linux-4.9.174
1 diff --git a/Documentation/usb/power-management.txt b/Documentation/usb/power-management.txt
2 index 0a94ffe17ab6..b13e031beaa6 100644
3 --- a/Documentation/usb/power-management.txt
4 +++ b/Documentation/usb/power-management.txt
5 @@ -365,11 +365,15 @@ autosuspend the interface's device. When the usage counter is = 0
6 then the interface is considered to be idle, and the kernel may
7 autosuspend the device.
8
9 -Drivers need not be concerned about balancing changes to the usage
10 -counter; the USB core will undo any remaining "get"s when a driver
11 -is unbound from its interface. As a corollary, drivers must not call
12 -any of the usb_autopm_* functions after their disconnect() routine has
13 -returned.
14 +Drivers must be careful to balance their overall changes to the usage
15 +counter. Unbalanced "get"s will remain in effect when a driver is
16 +unbound from its interface, preventing the device from going into
17 +runtime suspend should the interface be bound to a driver again. On
18 +the other hand, drivers are allowed to achieve this balance by calling
19 +the ``usb_autopm_*`` functions even after their ``disconnect`` routine
20 +has returned -- say from within a work-queue routine -- provided they
21 +retain an active reference to the interface (via ``usb_get_intf`` and
22 +``usb_put_intf``).
23
24 Drivers using the async routines are responsible for their own
25 synchronization and mutual exclusion.
26 diff --git a/Makefile b/Makefile
27 index a4e35453f9e4..f5836837df15 100644
28 --- a/Makefile
29 +++ b/Makefile
30 @@ -1,6 +1,6 @@
31 VERSION = 4
32 PATCHLEVEL = 9
33 -SUBLEVEL = 173
34 +SUBLEVEL = 174
35 EXTRAVERSION =
36 NAME = Roaring Lionus
37
38 diff --git a/arch/arm/mach-iop13xx/setup.c b/arch/arm/mach-iop13xx/setup.c
39 index 53c316f7301e..fe4932fda01d 100644
40 --- a/arch/arm/mach-iop13xx/setup.c
41 +++ b/arch/arm/mach-iop13xx/setup.c
42 @@ -300,7 +300,7 @@ static struct resource iop13xx_adma_2_resources[] = {
43 }
44 };
45
46 -static u64 iop13xx_adma_dmamask = DMA_BIT_MASK(64);
47 +static u64 iop13xx_adma_dmamask = DMA_BIT_MASK(32);
48 static struct iop_adma_platform_data iop13xx_adma_0_data = {
49 .hw_id = 0,
50 .pool_size = PAGE_SIZE,
51 @@ -324,7 +324,7 @@ static struct platform_device iop13xx_adma_0_channel = {
52 .resource = iop13xx_adma_0_resources,
53 .dev = {
54 .dma_mask = &iop13xx_adma_dmamask,
55 - .coherent_dma_mask = DMA_BIT_MASK(64),
56 + .coherent_dma_mask = DMA_BIT_MASK(32),
57 .platform_data = (void *) &iop13xx_adma_0_data,
58 },
59 };
60 @@ -336,7 +336,7 @@ static struct platform_device iop13xx_adma_1_channel = {
61 .resource = iop13xx_adma_1_resources,
62 .dev = {
63 .dma_mask = &iop13xx_adma_dmamask,
64 - .coherent_dma_mask = DMA_BIT_MASK(64),
65 + .coherent_dma_mask = DMA_BIT_MASK(32),
66 .platform_data = (void *) &iop13xx_adma_1_data,
67 },
68 };
69 @@ -348,7 +348,7 @@ static struct platform_device iop13xx_adma_2_channel = {
70 .resource = iop13xx_adma_2_resources,
71 .dev = {
72 .dma_mask = &iop13xx_adma_dmamask,
73 - .coherent_dma_mask = DMA_BIT_MASK(64),
74 + .coherent_dma_mask = DMA_BIT_MASK(32),
75 .platform_data = (void *) &iop13xx_adma_2_data,
76 },
77 };
78 diff --git a/arch/arm/mach-iop13xx/tpmi.c b/arch/arm/mach-iop13xx/tpmi.c
79 index db511ec2b1df..116feb6b261e 100644
80 --- a/arch/arm/mach-iop13xx/tpmi.c
81 +++ b/arch/arm/mach-iop13xx/tpmi.c
82 @@ -152,7 +152,7 @@ static struct resource iop13xx_tpmi_3_resources[] = {
83 }
84 };
85
86 -u64 iop13xx_tpmi_mask = DMA_BIT_MASK(64);
87 +u64 iop13xx_tpmi_mask = DMA_BIT_MASK(32);
88 static struct platform_device iop13xx_tpmi_0_device = {
89 .name = "iop-tpmi",
90 .id = 0,
91 @@ -160,7 +160,7 @@ static struct platform_device iop13xx_tpmi_0_device = {
92 .resource = iop13xx_tpmi_0_resources,
93 .dev = {
94 .dma_mask = &iop13xx_tpmi_mask,
95 - .coherent_dma_mask = DMA_BIT_MASK(64),
96 + .coherent_dma_mask = DMA_BIT_MASK(32),
97 },
98 };
99
100 @@ -171,7 +171,7 @@ static struct platform_device iop13xx_tpmi_1_device = {
101 .resource = iop13xx_tpmi_1_resources,
102 .dev = {
103 .dma_mask = &iop13xx_tpmi_mask,
104 - .coherent_dma_mask = DMA_BIT_MASK(64),
105 + .coherent_dma_mask = DMA_BIT_MASK(32),
106 },
107 };
108
109 @@ -182,7 +182,7 @@ static struct platform_device iop13xx_tpmi_2_device = {
110 .resource = iop13xx_tpmi_2_resources,
111 .dev = {
112 .dma_mask = &iop13xx_tpmi_mask,
113 - .coherent_dma_mask = DMA_BIT_MASK(64),
114 + .coherent_dma_mask = DMA_BIT_MASK(32),
115 },
116 };
117
118 @@ -193,7 +193,7 @@ static struct platform_device iop13xx_tpmi_3_device = {
119 .resource = iop13xx_tpmi_3_resources,
120 .dev = {
121 .dma_mask = &iop13xx_tpmi_mask,
122 - .coherent_dma_mask = DMA_BIT_MASK(64),
123 + .coherent_dma_mask = DMA_BIT_MASK(32),
124 },
125 };
126
127 diff --git a/arch/arm/plat-iop/adma.c b/arch/arm/plat-iop/adma.c
128 index a4d1f8de3b5b..d9612221e484 100644
129 --- a/arch/arm/plat-iop/adma.c
130 +++ b/arch/arm/plat-iop/adma.c
131 @@ -143,7 +143,7 @@ struct platform_device iop3xx_dma_0_channel = {
132 .resource = iop3xx_dma_0_resources,
133 .dev = {
134 .dma_mask = &iop3xx_adma_dmamask,
135 - .coherent_dma_mask = DMA_BIT_MASK(64),
136 + .coherent_dma_mask = DMA_BIT_MASK(32),
137 .platform_data = (void *) &iop3xx_dma_0_data,
138 },
139 };
140 @@ -155,7 +155,7 @@ struct platform_device iop3xx_dma_1_channel = {
141 .resource = iop3xx_dma_1_resources,
142 .dev = {
143 .dma_mask = &iop3xx_adma_dmamask,
144 - .coherent_dma_mask = DMA_BIT_MASK(64),
145 + .coherent_dma_mask = DMA_BIT_MASK(32),
146 .platform_data = (void *) &iop3xx_dma_1_data,
147 },
148 };
149 @@ -167,7 +167,7 @@ struct platform_device iop3xx_aau_channel = {
150 .resource = iop3xx_aau_resources,
151 .dev = {
152 .dma_mask = &iop3xx_adma_dmamask,
153 - .coherent_dma_mask = DMA_BIT_MASK(64),
154 + .coherent_dma_mask = DMA_BIT_MASK(32),
155 .platform_data = (void *) &iop3xx_aau_data,
156 },
157 };
158 diff --git a/arch/arm/plat-orion/common.c b/arch/arm/plat-orion/common.c
159 index 272f49b2c68f..bb29e6ebdc0d 100644
160 --- a/arch/arm/plat-orion/common.c
161 +++ b/arch/arm/plat-orion/common.c
162 @@ -605,7 +605,7 @@ static struct platform_device orion_xor0_shared = {
163 .resource = orion_xor0_shared_resources,
164 .dev = {
165 .dma_mask = &orion_xor_dmamask,
166 - .coherent_dma_mask = DMA_BIT_MASK(64),
167 + .coherent_dma_mask = DMA_BIT_MASK(32),
168 .platform_data = &orion_xor0_pdata,
169 },
170 };
171 @@ -666,7 +666,7 @@ static struct platform_device orion_xor1_shared = {
172 .resource = orion_xor1_shared_resources,
173 .dev = {
174 .dma_mask = &orion_xor_dmamask,
175 - .coherent_dma_mask = DMA_BIT_MASK(64),
176 + .coherent_dma_mask = DMA_BIT_MASK(32),
177 .platform_data = &orion_xor1_pdata,
178 },
179 };
180 diff --git a/arch/arm64/include/asm/system_misc.h b/arch/arm64/include/asm/system_misc.h
181 index bc812435bc76..d0beefeb6d25 100644
182 --- a/arch/arm64/include/asm/system_misc.h
183 +++ b/arch/arm64/include/asm/system_misc.h
184 @@ -40,7 +40,7 @@ void hook_debug_fault_code(int nr, int (*fn)(unsigned long, unsigned int,
185 int sig, int code, const char *name);
186
187 struct mm_struct;
188 -extern void show_pte(struct mm_struct *mm, unsigned long addr);
189 +extern void show_pte(unsigned long addr);
190 extern void __show_regs(struct pt_regs *);
191
192 extern void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
193 diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
194 index 051b32084776..575c11a6f9b6 100644
195 --- a/arch/arm64/mm/fault.c
196 +++ b/arch/arm64/mm/fault.c
197 @@ -79,18 +79,33 @@ static inline int notify_page_fault(struct pt_regs *regs, unsigned int esr)
198 #endif
199
200 /*
201 - * Dump out the page tables associated with 'addr' in mm 'mm'.
202 + * Dump out the page tables associated with 'addr' in the currently active mm.
203 */
204 -void show_pte(struct mm_struct *mm, unsigned long addr)
205 +void show_pte(unsigned long addr)
206 {
207 + struct mm_struct *mm;
208 pgd_t *pgd;
209
210 - if (!mm)
211 + if (addr < TASK_SIZE) {
212 + /* TTBR0 */
213 + mm = current->active_mm;
214 + if (mm == &init_mm) {
215 + pr_alert("[%016lx] user address but active_mm is swapper\n",
216 + addr);
217 + return;
218 + }
219 + } else if (addr >= VA_START) {
220 + /* TTBR1 */
221 mm = &init_mm;
222 + } else {
223 + pr_alert("[%016lx] address between user and kernel address ranges\n",
224 + addr);
225 + return;
226 + }
227
228 pr_alert("pgd = %p\n", mm->pgd);
229 pgd = pgd_offset(mm, addr);
230 - pr_alert("[%08lx] *pgd=%016llx", addr, pgd_val(*pgd));
231 + pr_alert("[%016lx] *pgd=%016llx", addr, pgd_val(*pgd));
232
233 do {
234 pud_t *pud;
235 @@ -176,8 +191,8 @@ static bool is_el1_instruction_abort(unsigned int esr)
236 /*
237 * The kernel tried to access some page that wasn't present.
238 */
239 -static void __do_kernel_fault(struct mm_struct *mm, unsigned long addr,
240 - unsigned int esr, struct pt_regs *regs)
241 +static void __do_kernel_fault(unsigned long addr, unsigned int esr,
242 + struct pt_regs *regs)
243 {
244 /*
245 * Are we prepared to handle this kernel fault?
246 @@ -194,7 +209,7 @@ static void __do_kernel_fault(struct mm_struct *mm, unsigned long addr,
247 (addr < PAGE_SIZE) ? "NULL pointer dereference" :
248 "paging request", addr);
249
250 - show_pte(mm, addr);
251 + show_pte(addr);
252 die("Oops", regs, esr);
253 bust_spinlocks(0);
254 do_exit(SIGKILL);
255 @@ -216,7 +231,6 @@ static void __do_user_fault(struct task_struct *tsk, unsigned long addr,
256 pr_info("%s[%d]: unhandled %s (%d) at 0x%08lx, esr 0x%03x\n",
257 tsk->comm, task_pid_nr(tsk), inf->name, sig,
258 addr, esr);
259 - show_pte(tsk->mm, addr);
260 show_regs(regs);
261 }
262
263 @@ -232,7 +246,6 @@ static void __do_user_fault(struct task_struct *tsk, unsigned long addr,
264 static void do_bad_area(unsigned long addr, unsigned int esr, struct pt_regs *regs)
265 {
266 struct task_struct *tsk = current;
267 - struct mm_struct *mm = tsk->active_mm;
268 const struct fault_info *inf;
269
270 /*
271 @@ -243,7 +256,7 @@ static void do_bad_area(unsigned long addr, unsigned int esr, struct pt_regs *re
272 inf = esr_to_fault_info(esr);
273 __do_user_fault(tsk, addr, esr, inf->sig, inf->code, regs);
274 } else
275 - __do_kernel_fault(mm, addr, esr, regs);
276 + __do_kernel_fault(addr, esr, regs);
277 }
278
279 #define VM_FAULT_BADMAP 0x010000
280 @@ -454,7 +467,7 @@ retry:
281 return 0;
282
283 no_context:
284 - __do_kernel_fault(mm, addr, esr, regs);
285 + __do_kernel_fault(addr, esr, regs);
286 return 0;
287 }
288
289 diff --git a/arch/arm64/mm/kasan_init.c b/arch/arm64/mm/kasan_init.c
290 index 757009daa9ed..ff43da269fe8 100644
291 --- a/arch/arm64/mm/kasan_init.c
292 +++ b/arch/arm64/mm/kasan_init.c
293 @@ -153,7 +153,7 @@ void __init kasan_init(void)
294 clear_pgds(KASAN_SHADOW_START, KASAN_SHADOW_END);
295
296 vmemmap_populate(kimg_shadow_start, kimg_shadow_end,
297 - pfn_to_nid(virt_to_pfn(_text)));
298 + pfn_to_nid(virt_to_pfn(lm_alias(_text))));
299
300 /*
301 * vmemmap_populate() has populated the shadow region that covers the
302 diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S
303 index 18d96d349a8b..f5fde8d389c9 100644
304 --- a/arch/arm64/mm/proc.S
305 +++ b/arch/arm64/mm/proc.S
306 @@ -181,7 +181,8 @@ ENDPROC(idmap_cpu_replace_ttbr1)
307 dc cvac, cur_\()\type\()p // Ensure any existing dirty
308 dmb sy // lines are written back before
309 ldr \type, [cur_\()\type\()p] // loading the entry
310 - tbz \type, #0, next_\()\type // Skip invalid entries
311 + tbz \type, #0, skip_\()\type // Skip invalid and
312 + tbnz \type, #11, skip_\()\type // non-global entries
313 .endm
314
315 .macro __idmap_kpti_put_pgtable_ent_ng, type
316 @@ -241,8 +242,9 @@ ENTRY(idmap_kpti_install_ng_mappings)
317 add end_pgdp, cur_pgdp, #(PTRS_PER_PGD * 8)
318 do_pgd: __idmap_kpti_get_pgtable_ent pgd
319 tbnz pgd, #1, walk_puds
320 - __idmap_kpti_put_pgtable_ent_ng pgd
321 next_pgd:
322 + __idmap_kpti_put_pgtable_ent_ng pgd
323 +skip_pgd:
324 add cur_pgdp, cur_pgdp, #8
325 cmp cur_pgdp, end_pgdp
326 b.ne do_pgd
327 @@ -270,8 +272,9 @@ walk_puds:
328 add end_pudp, cur_pudp, #(PTRS_PER_PUD * 8)
329 do_pud: __idmap_kpti_get_pgtable_ent pud
330 tbnz pud, #1, walk_pmds
331 - __idmap_kpti_put_pgtable_ent_ng pud
332 next_pud:
333 + __idmap_kpti_put_pgtable_ent_ng pud
334 +skip_pud:
335 add cur_pudp, cur_pudp, 8
336 cmp cur_pudp, end_pudp
337 b.ne do_pud
338 @@ -290,8 +293,9 @@ walk_pmds:
339 add end_pmdp, cur_pmdp, #(PTRS_PER_PMD * 8)
340 do_pmd: __idmap_kpti_get_pgtable_ent pmd
341 tbnz pmd, #1, walk_ptes
342 - __idmap_kpti_put_pgtable_ent_ng pmd
343 next_pmd:
344 + __idmap_kpti_put_pgtable_ent_ng pmd
345 +skip_pmd:
346 add cur_pmdp, cur_pmdp, #8
347 cmp cur_pmdp, end_pmdp
348 b.ne do_pmd
349 @@ -309,7 +313,7 @@ walk_ptes:
350 add end_ptep, cur_ptep, #(PTRS_PER_PTE * 8)
351 do_pte: __idmap_kpti_get_pgtable_ent pte
352 __idmap_kpti_put_pgtable_ent_ng pte
353 -next_pte:
354 +skip_pte:
355 add cur_ptep, cur_ptep, #8
356 cmp cur_ptep, end_ptep
357 b.ne do_pte
358 diff --git a/arch/sh/boards/of-generic.c b/arch/sh/boards/of-generic.c
359 index 1fb6d5714bae..fd00566677c9 100644
360 --- a/arch/sh/boards/of-generic.c
361 +++ b/arch/sh/boards/of-generic.c
362 @@ -180,10 +180,10 @@ static struct sh_machine_vector __initmv sh_of_generic_mv = {
363
364 struct sh_clk_ops;
365
366 -void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)
367 +void __init __weak arch_init_clk_ops(struct sh_clk_ops **ops, int idx)
368 {
369 }
370
371 -void __init plat_irq_setup(void)
372 +void __init __weak plat_irq_setup(void)
373 {
374 }
375 diff --git a/arch/x86/events/amd/core.c b/arch/x86/events/amd/core.c
376 index de050d5a4506..00b56cc69d37 100644
377 --- a/arch/x86/events/amd/core.c
378 +++ b/arch/x86/events/amd/core.c
379 @@ -112,6 +112,110 @@ static __initconst const u64 amd_hw_cache_event_ids
380 },
381 };
382
383 +static __initconst const u64 amd_hw_cache_event_ids_f17h
384 + [PERF_COUNT_HW_CACHE_MAX]
385 + [PERF_COUNT_HW_CACHE_OP_MAX]
386 + [PERF_COUNT_HW_CACHE_RESULT_MAX] = {
387 +[C(L1D)] = {
388 + [C(OP_READ)] = {
389 + [C(RESULT_ACCESS)] = 0x0040, /* Data Cache Accesses */
390 + [C(RESULT_MISS)] = 0xc860, /* L2$ access from DC Miss */
391 + },
392 + [C(OP_WRITE)] = {
393 + [C(RESULT_ACCESS)] = 0,
394 + [C(RESULT_MISS)] = 0,
395 + },
396 + [C(OP_PREFETCH)] = {
397 + [C(RESULT_ACCESS)] = 0xff5a, /* h/w prefetch DC Fills */
398 + [C(RESULT_MISS)] = 0,
399 + },
400 +},
401 +[C(L1I)] = {
402 + [C(OP_READ)] = {
403 + [C(RESULT_ACCESS)] = 0x0080, /* Instruction cache fetches */
404 + [C(RESULT_MISS)] = 0x0081, /* Instruction cache misses */
405 + },
406 + [C(OP_WRITE)] = {
407 + [C(RESULT_ACCESS)] = -1,
408 + [C(RESULT_MISS)] = -1,
409 + },
410 + [C(OP_PREFETCH)] = {
411 + [C(RESULT_ACCESS)] = 0,
412 + [C(RESULT_MISS)] = 0,
413 + },
414 +},
415 +[C(LL)] = {
416 + [C(OP_READ)] = {
417 + [C(RESULT_ACCESS)] = 0,
418 + [C(RESULT_MISS)] = 0,
419 + },
420 + [C(OP_WRITE)] = {
421 + [C(RESULT_ACCESS)] = 0,
422 + [C(RESULT_MISS)] = 0,
423 + },
424 + [C(OP_PREFETCH)] = {
425 + [C(RESULT_ACCESS)] = 0,
426 + [C(RESULT_MISS)] = 0,
427 + },
428 +},
429 +[C(DTLB)] = {
430 + [C(OP_READ)] = {
431 + [C(RESULT_ACCESS)] = 0xff45, /* All L2 DTLB accesses */
432 + [C(RESULT_MISS)] = 0xf045, /* L2 DTLB misses (PT walks) */
433 + },
434 + [C(OP_WRITE)] = {
435 + [C(RESULT_ACCESS)] = 0,
436 + [C(RESULT_MISS)] = 0,
437 + },
438 + [C(OP_PREFETCH)] = {
439 + [C(RESULT_ACCESS)] = 0,
440 + [C(RESULT_MISS)] = 0,
441 + },
442 +},
443 +[C(ITLB)] = {
444 + [C(OP_READ)] = {
445 + [C(RESULT_ACCESS)] = 0x0084, /* L1 ITLB misses, L2 ITLB hits */
446 + [C(RESULT_MISS)] = 0xff85, /* L1 ITLB misses, L2 misses */
447 + },
448 + [C(OP_WRITE)] = {
449 + [C(RESULT_ACCESS)] = -1,
450 + [C(RESULT_MISS)] = -1,
451 + },
452 + [C(OP_PREFETCH)] = {
453 + [C(RESULT_ACCESS)] = -1,
454 + [C(RESULT_MISS)] = -1,
455 + },
456 +},
457 +[C(BPU)] = {
458 + [C(OP_READ)] = {
459 + [C(RESULT_ACCESS)] = 0x00c2, /* Retired Branch Instr. */
460 + [C(RESULT_MISS)] = 0x00c3, /* Retired Mispredicted BI */
461 + },
462 + [C(OP_WRITE)] = {
463 + [C(RESULT_ACCESS)] = -1,
464 + [C(RESULT_MISS)] = -1,
465 + },
466 + [C(OP_PREFETCH)] = {
467 + [C(RESULT_ACCESS)] = -1,
468 + [C(RESULT_MISS)] = -1,
469 + },
470 +},
471 +[C(NODE)] = {
472 + [C(OP_READ)] = {
473 + [C(RESULT_ACCESS)] = 0,
474 + [C(RESULT_MISS)] = 0,
475 + },
476 + [C(OP_WRITE)] = {
477 + [C(RESULT_ACCESS)] = -1,
478 + [C(RESULT_MISS)] = -1,
479 + },
480 + [C(OP_PREFETCH)] = {
481 + [C(RESULT_ACCESS)] = -1,
482 + [C(RESULT_MISS)] = -1,
483 + },
484 +},
485 +};
486 +
487 /*
488 * AMD Performance Monitor K7 and later, up to and including Family 16h:
489 */
490 @@ -731,9 +835,10 @@ __init int amd_pmu_init(void)
491 x86_pmu.amd_nb_constraints = 0;
492 }
493
494 - /* Events are common for all AMDs */
495 - memcpy(hw_cache_event_ids, amd_hw_cache_event_ids,
496 - sizeof(hw_cache_event_ids));
497 + if (boot_cpu_data.x86 >= 0x17)
498 + memcpy(hw_cache_event_ids, amd_hw_cache_event_ids_f17h, sizeof(hw_cache_event_ids));
499 + else
500 + memcpy(hw_cache_event_ids, amd_hw_cache_event_ids, sizeof(hw_cache_event_ids));
501
502 return 0;
503 }
504 diff --git a/arch/x86/include/asm/stacktrace.h b/arch/x86/include/asm/stacktrace.h
505 index 37f2e0b377ad..4141ead86879 100644
506 --- a/arch/x86/include/asm/stacktrace.h
507 +++ b/arch/x86/include/asm/stacktrace.h
508 @@ -55,13 +55,16 @@ extern int kstack_depth_to_print;
509 static inline unsigned long *
510 get_frame_pointer(struct task_struct *task, struct pt_regs *regs)
511 {
512 + struct inactive_task_frame *frame;
513 +
514 if (regs)
515 return (unsigned long *)regs->bp;
516
517 if (task == current)
518 return __builtin_frame_address(0);
519
520 - return (unsigned long *)((struct inactive_task_frame *)task->thread.sp)->bp;
521 + frame = (struct inactive_task_frame *)task->thread.sp;
522 + return (unsigned long *)READ_ONCE_NOCHECK(frame->bp);
523 }
524 #else
525 static inline unsigned long *
526 diff --git a/arch/x86/kernel/acpi/wakeup_64.S b/arch/x86/kernel/acpi/wakeup_64.S
527 index 169963f471bb..50b8ed0317a3 100644
528 --- a/arch/x86/kernel/acpi/wakeup_64.S
529 +++ b/arch/x86/kernel/acpi/wakeup_64.S
530 @@ -109,6 +109,15 @@ ENTRY(do_suspend_lowlevel)
531 movq pt_regs_r14(%rax), %r14
532 movq pt_regs_r15(%rax), %r15
533
534 +#ifdef CONFIG_KASAN
535 + /*
536 + * The suspend path may have poisoned some areas deeper in the stack,
537 + * which we now need to unpoison.
538 + */
539 + movq %rsp, %rdi
540 + call kasan_unpoison_task_stack_below
541 +#endif
542 +
543 xorl %eax, %eax
544 addq $8, %rsp
545 FRAME_END
546 diff --git a/arch/x86/kernel/cpu/mcheck/mce-severity.c b/arch/x86/kernel/cpu/mcheck/mce-severity.c
547 index 3e0199ee5a2f..0372913e0134 100644
548 --- a/arch/x86/kernel/cpu/mcheck/mce-severity.c
549 +++ b/arch/x86/kernel/cpu/mcheck/mce-severity.c
550 @@ -148,6 +148,11 @@ static struct severity {
551 SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR|MCI_ADDR|MCACOD, MCI_UC_SAR|MCI_ADDR|MCACOD_DATA),
552 KERNEL
553 ),
554 + MCESEV(
555 + PANIC, "Instruction fetch error in kernel",
556 + SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR|MCI_ADDR|MCACOD, MCI_UC_SAR|MCI_ADDR|MCACOD_INSTR),
557 + KERNEL
558 + ),
559 #endif
560 MCESEV(
561 PANIC, "Action required: unknown MCACOD",
562 diff --git a/arch/x86/kernel/unwind_frame.c b/arch/x86/kernel/unwind_frame.c
563 index a2456d4d286a..9b8b3cb2e934 100644
564 --- a/arch/x86/kernel/unwind_frame.c
565 +++ b/arch/x86/kernel/unwind_frame.c
566 @@ -6,6 +6,21 @@
567
568 #define FRAME_HEADER_SIZE (sizeof(long) * 2)
569
570 +/*
571 + * This disables KASAN checking when reading a value from another task's stack,
572 + * since the other task could be running on another CPU and could have poisoned
573 + * the stack in the meantime.
574 + */
575 +#define READ_ONCE_TASK_STACK(task, x) \
576 +({ \
577 + unsigned long val; \
578 + if (task == current) \
579 + val = READ_ONCE(x); \
580 + else \
581 + val = READ_ONCE_NOCHECK(x); \
582 + val; \
583 +})
584 +
585 unsigned long unwind_get_return_address(struct unwind_state *state)
586 {
587 unsigned long addr;
588 @@ -14,7 +29,8 @@ unsigned long unwind_get_return_address(struct unwind_state *state)
589 if (unwind_done(state))
590 return 0;
591
592 - addr = ftrace_graph_ret_addr(state->task, &state->graph_idx, *addr_p,
593 + addr = READ_ONCE_TASK_STACK(state->task, *addr_p);
594 + addr = ftrace_graph_ret_addr(state->task, &state->graph_idx, addr,
595 addr_p);
596
597 return __kernel_text_address(addr) ? addr : 0;
598 @@ -48,7 +64,7 @@ bool unwind_next_frame(struct unwind_state *state)
599 if (unwind_done(state))
600 return false;
601
602 - next_bp = (unsigned long *)*state->bp;
603 + next_bp = (unsigned long *)READ_ONCE_TASK_STACK(state->task,*state->bp);
604
605 /* make sure the next frame's data is accessible */
606 if (!update_stack_state(state, next_bp, FRAME_HEADER_SIZE))
607 diff --git a/drivers/block/xsysace.c b/drivers/block/xsysace.c
608 index c4328d9d9981..f838119d12b2 100644
609 --- a/drivers/block/xsysace.c
610 +++ b/drivers/block/xsysace.c
611 @@ -1062,6 +1062,8 @@ static int ace_setup(struct ace_device *ace)
612 return 0;
613
614 err_read:
615 + /* prevent double queue cleanup */
616 + ace->gd->queue = NULL;
617 put_disk(ace->gd);
618 err_alloc_disk:
619 blk_cleanup_queue(ace->queue);
620 diff --git a/drivers/hid/hid-debug.c b/drivers/hid/hid-debug.c
621 index d7179dd3c9ef..3cafa1d28fed 100644
622 --- a/drivers/hid/hid-debug.c
623 +++ b/drivers/hid/hid-debug.c
624 @@ -1058,10 +1058,15 @@ static int hid_debug_rdesc_show(struct seq_file *f, void *p)
625 seq_printf(f, "\n\n");
626
627 /* dump parsed data and input mappings */
628 + if (down_interruptible(&hdev->driver_input_lock))
629 + return 0;
630 +
631 hid_dump_device(hdev, f);
632 seq_printf(f, "\n");
633 hid_dump_input_mapping(hdev, f);
634
635 + up(&hdev->driver_input_lock);
636 +
637 return 0;
638 }
639
640 diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
641 index 2e2515a4c070..3198faf5cff4 100644
642 --- a/drivers/hid/hid-logitech-hidpp.c
643 +++ b/drivers/hid/hid-logitech-hidpp.c
644 @@ -1282,6 +1282,13 @@ static int hidpp_ff_init(struct hidpp_device *hidpp, u8 feature_index)
645 kfree(data);
646 return -ENOMEM;
647 }
648 + data->wq = create_singlethread_workqueue("hidpp-ff-sendqueue");
649 + if (!data->wq) {
650 + kfree(data->effect_ids);
651 + kfree(data);
652 + return -ENOMEM;
653 + }
654 +
655 data->hidpp = hidpp;
656 data->feature_index = feature_index;
657 data->version = version;
658 @@ -1326,7 +1333,6 @@ static int hidpp_ff_init(struct hidpp_device *hidpp, u8 feature_index)
659 /* ignore boost value at response.fap.params[2] */
660
661 /* init the hardware command queue */
662 - data->wq = create_singlethread_workqueue("hidpp-ff-sendqueue");
663 atomic_set(&data->workqueue_size, 0);
664
665 /* initialize with zero autocenter to get wheel in usable state */
666 diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c
667 index 2a44a2c3e859..6914cc18b4a1 100644
668 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c
669 +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
670 @@ -2368,8 +2368,19 @@ static void srpt_queue_tm_rsp(struct se_cmd *cmd)
671 srpt_queue_response(cmd);
672 }
673
674 +/*
675 + * This function is called for aborted commands if no response is sent to the
676 + * initiator. Make sure that the credits freed by aborting a command are
677 + * returned to the initiator the next time a response is sent by incrementing
678 + * ch->req_lim_delta.
679 + */
680 static void srpt_aborted_task(struct se_cmd *cmd)
681 {
682 + struct srpt_send_ioctx *ioctx = container_of(cmd,
683 + struct srpt_send_ioctx, cmd);
684 + struct srpt_rdma_ch *ch = ioctx->ch;
685 +
686 + atomic_inc(&ch->req_lim_delta);
687 }
688
689 static int srpt_queue_status(struct se_cmd *cmd)
690 diff --git a/drivers/input/keyboard/snvs_pwrkey.c b/drivers/input/keyboard/snvs_pwrkey.c
691 index 7544888c4749..b8dbde746b4e 100644
692 --- a/drivers/input/keyboard/snvs_pwrkey.c
693 +++ b/drivers/input/keyboard/snvs_pwrkey.c
694 @@ -156,6 +156,9 @@ static int imx_snvs_pwrkey_probe(struct platform_device *pdev)
695 return error;
696 }
697
698 + pdata->input = input;
699 + platform_set_drvdata(pdev, pdata);
700 +
701 error = devm_request_irq(&pdev->dev, pdata->irq,
702 imx_snvs_pwrkey_interrupt,
703 0, pdev->name, pdev);
704 @@ -171,9 +174,6 @@ static int imx_snvs_pwrkey_probe(struct platform_device *pdev)
705 return error;
706 }
707
708 - pdata->input = input;
709 - platform_set_drvdata(pdev, pdata);
710 -
711 device_init_wakeup(&pdev->dev, pdata->wakeup);
712
713 return 0;
714 diff --git a/drivers/media/i2c/ov7670.c b/drivers/media/i2c/ov7670.c
715 index 56cfb5ca9c95..0a72228734ae 100644
716 --- a/drivers/media/i2c/ov7670.c
717 +++ b/drivers/media/i2c/ov7670.c
718 @@ -155,10 +155,10 @@ MODULE_PARM_DESC(debug, "Debug level (0-1)");
719 #define REG_GFIX 0x69 /* Fix gain control */
720
721 #define REG_DBLV 0x6b /* PLL control an debugging */
722 -#define DBLV_BYPASS 0x00 /* Bypass PLL */
723 -#define DBLV_X4 0x01 /* clock x4 */
724 -#define DBLV_X6 0x10 /* clock x6 */
725 -#define DBLV_X8 0x11 /* clock x8 */
726 +#define DBLV_BYPASS 0x0a /* Bypass PLL */
727 +#define DBLV_X4 0x4a /* clock x4 */
728 +#define DBLV_X6 0x8a /* clock x6 */
729 +#define DBLV_X8 0xca /* clock x8 */
730
731 #define REG_REG76 0x76 /* OV's name */
732 #define R76_BLKPCOR 0x80 /* Black pixel correction enable */
733 @@ -833,7 +833,7 @@ static int ov7675_set_framerate(struct v4l2_subdev *sd,
734 if (ret < 0)
735 return ret;
736
737 - return ov7670_write(sd, REG_DBLV, DBLV_X4);
738 + return 0;
739 }
740
741 static void ov7670_get_framerate_legacy(struct v4l2_subdev *sd,
742 @@ -1578,11 +1578,7 @@ static int ov7670_probe(struct i2c_client *client,
743 if (config->clock_speed)
744 info->clock_speed = config->clock_speed;
745
746 - /*
747 - * It should be allowed for ov7670 too when it is migrated to
748 - * the new frame rate formula.
749 - */
750 - if (config->pll_bypass && id->driver_data != MODEL_OV7670)
751 + if (config->pll_bypass)
752 info->pll_bypass = true;
753
754 if (config->pclk_hb_disable)
755 diff --git a/drivers/net/bonding/bond_sysfs_slave.c b/drivers/net/bonding/bond_sysfs_slave.c
756 index 7d16c51e6913..641a532b67cb 100644
757 --- a/drivers/net/bonding/bond_sysfs_slave.c
758 +++ b/drivers/net/bonding/bond_sysfs_slave.c
759 @@ -55,7 +55,9 @@ static SLAVE_ATTR_RO(link_failure_count);
760
761 static ssize_t perm_hwaddr_show(struct slave *slave, char *buf)
762 {
763 - return sprintf(buf, "%pM\n", slave->perm_hwaddr);
764 + return sprintf(buf, "%*phC\n",
765 + slave->dev->addr_len,
766 + slave->perm_hwaddr);
767 }
768 static SLAVE_ATTR_RO(perm_hwaddr);
769
770 diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
771 index 45ea2718c65d..620a470eb4c8 100644
772 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
773 +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
774 @@ -5954,8 +5954,15 @@ static int bnxt_cfg_rx_mode(struct bnxt *bp)
775
776 skip_uc:
777 rc = bnxt_hwrm_cfa_l2_set_rx_mask(bp, 0);
778 + if (rc && vnic->mc_list_count) {
779 + netdev_info(bp->dev, "Failed setting MC filters rc: %d, turning on ALL_MCAST mode\n",
780 + rc);
781 + vnic->rx_mask |= CFA_L2_SET_RX_MASK_REQ_MASK_ALL_MCAST;
782 + vnic->mc_list_count = 0;
783 + rc = bnxt_hwrm_cfa_l2_set_rx_mask(bp, 0);
784 + }
785 if (rc)
786 - netdev_err(bp->dev, "HWRM cfa l2 rx mask failure rc: %x\n",
787 + netdev_err(bp->dev, "HWRM cfa l2 rx mask failure rc: %d\n",
788 rc);
789
790 return rc;
791 diff --git a/drivers/net/ethernet/hisilicon/hns/hnae.c b/drivers/net/ethernet/hisilicon/hns/hnae.c
792 index 06bc8638501e..66e7a5fd4249 100644
793 --- a/drivers/net/ethernet/hisilicon/hns/hnae.c
794 +++ b/drivers/net/ethernet/hisilicon/hns/hnae.c
795 @@ -146,7 +146,6 @@ out_buffer_fail:
796 /* free desc along with its attached buffer */
797 static void hnae_free_desc(struct hnae_ring *ring)
798 {
799 - hnae_free_buffers(ring);
800 dma_unmap_single(ring_to_dev(ring), ring->desc_dma_addr,
801 ring->desc_num * sizeof(ring->desc[0]),
802 ring_to_dma_dir(ring));
803 @@ -179,6 +178,9 @@ static int hnae_alloc_desc(struct hnae_ring *ring)
804 /* fini ring, also free the buffer for the ring */
805 static void hnae_fini_ring(struct hnae_ring *ring)
806 {
807 + if (is_rx_ring(ring))
808 + hnae_free_buffers(ring);
809 +
810 hnae_free_desc(ring);
811 kfree(ring->desc_cb);
812 ring->desc_cb = NULL;
813 diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
814 index ad8681cf5ef0..24a815997ec5 100644
815 --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
816 +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
817 @@ -28,9 +28,6 @@
818
819 #define SERVICE_TIMER_HZ (1 * HZ)
820
821 -#define NIC_TX_CLEAN_MAX_NUM 256
822 -#define NIC_RX_CLEAN_MAX_NUM 64
823 -
824 #define RCB_IRQ_NOT_INITED 0
825 #define RCB_IRQ_INITED 1
826 #define HNS_BUFFER_SIZE_2048 2048
827 @@ -375,8 +372,6 @@ netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev,
828 wmb(); /* commit all data before submit */
829 assert(skb->queue_mapping < priv->ae_handle->q_num);
830 hnae_queue_xmit(priv->ae_handle->qs[skb->queue_mapping], buf_num);
831 - ring->stats.tx_pkts++;
832 - ring->stats.tx_bytes += skb->len;
833
834 return NETDEV_TX_OK;
835
836 @@ -916,6 +911,9 @@ static int hns_nic_tx_poll_one(struct hns_nic_ring_data *ring_data,
837 /* issue prefetch for next Tx descriptor */
838 prefetch(&ring->desc_cb[ring->next_to_clean]);
839 }
840 + /* update tx ring statistics. */
841 + ring->stats.tx_pkts += pkts;
842 + ring->stats.tx_bytes += bytes;
843
844 NETIF_TX_UNLOCK(ndev);
845
846 @@ -1821,7 +1819,7 @@ static int hns_nic_init_ring_data(struct hns_nic_priv *priv)
847 hns_nic_tx_fini_pro_v2;
848
849 netif_napi_add(priv->netdev, &rd->napi,
850 - hns_nic_common_poll, NIC_TX_CLEAN_MAX_NUM);
851 + hns_nic_common_poll, NAPI_POLL_WEIGHT);
852 rd->ring->irq_init_flag = RCB_IRQ_NOT_INITED;
853 }
854 for (i = h->q_num; i < h->q_num * 2; i++) {
855 @@ -1834,7 +1832,7 @@ static int hns_nic_init_ring_data(struct hns_nic_priv *priv)
856 hns_nic_rx_fini_pro_v2;
857
858 netif_napi_add(priv->netdev, &rd->napi,
859 - hns_nic_common_poll, NIC_RX_CLEAN_MAX_NUM);
860 + hns_nic_common_poll, NAPI_POLL_WEIGHT);
861 rd->ring->irq_init_flag = RCB_IRQ_NOT_INITED;
862 }
863
864 diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h b/drivers/net/ethernet/intel/igb/e1000_defines.h
865 index 2688180a7acd..f948eec7b35f 100644
866 --- a/drivers/net/ethernet/intel/igb/e1000_defines.h
867 +++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
868 @@ -193,6 +193,8 @@
869 /* enable link status from external LINK_0 and LINK_1 pins */
870 #define E1000_CTRL_SWDPIN0 0x00040000 /* SWDPIN 0 value */
871 #define E1000_CTRL_SWDPIN1 0x00080000 /* SWDPIN 1 value */
872 +#define E1000_CTRL_ADVD3WUC 0x00100000 /* D3 WUC */
873 +#define E1000_CTRL_EN_PHY_PWR_MGMT 0x00200000 /* PHY PM enable */
874 #define E1000_CTRL_SDP0_DIR 0x00400000 /* SDP0 Data direction */
875 #define E1000_CTRL_SDP1_DIR 0x00800000 /* SDP1 Data direction */
876 #define E1000_CTRL_RST 0x04000000 /* Global reset */
877 diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
878 index 82e48e355fb9..7956176c2c73 100644
879 --- a/drivers/net/ethernet/intel/igb/igb_main.c
880 +++ b/drivers/net/ethernet/intel/igb/igb_main.c
881 @@ -7548,9 +7548,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
882 struct e1000_hw *hw = &adapter->hw;
883 u32 ctrl, rctl, status;
884 u32 wufc = runtime ? E1000_WUFC_LNKC : adapter->wol;
885 -#ifdef CONFIG_PM
886 - int retval = 0;
887 -#endif
888 + bool wake;
889
890 rtnl_lock();
891 netif_device_detach(netdev);
892 @@ -7563,14 +7561,6 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
893 igb_clear_interrupt_scheme(adapter);
894 rtnl_unlock();
895
896 -#ifdef CONFIG_PM
897 - if (!runtime) {
898 - retval = pci_save_state(pdev);
899 - if (retval)
900 - return retval;
901 - }
902 -#endif
903 -
904 status = rd32(E1000_STATUS);
905 if (status & E1000_STATUS_LU)
906 wufc &= ~E1000_WUFC_LNKC;
907 @@ -7587,10 +7577,6 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
908 }
909
910 ctrl = rd32(E1000_CTRL);
911 - /* advertise wake from D3Cold */
912 - #define E1000_CTRL_ADVD3WUC 0x00100000
913 - /* phy power management enable */
914 - #define E1000_CTRL_EN_PHY_PWR_MGMT 0x00200000
915 ctrl |= E1000_CTRL_ADVD3WUC;
916 wr32(E1000_CTRL, ctrl);
917
918 @@ -7604,12 +7590,15 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
919 wr32(E1000_WUFC, 0);
920 }
921
922 - *enable_wake = wufc || adapter->en_mng_pt;
923 - if (!*enable_wake)
924 + wake = wufc || adapter->en_mng_pt;
925 + if (!wake)
926 igb_power_down_link(adapter);
927 else
928 igb_power_up_link(adapter);
929
930 + if (enable_wake)
931 + *enable_wake = wake;
932 +
933 /* Release control of h/w to f/w. If f/w is AMT enabled, this
934 * would have already happened in close and is redundant.
935 */
936 @@ -7624,22 +7613,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
937 #ifdef CONFIG_PM_SLEEP
938 static int igb_suspend(struct device *dev)
939 {
940 - int retval;
941 - bool wake;
942 - struct pci_dev *pdev = to_pci_dev(dev);
943 -
944 - retval = __igb_shutdown(pdev, &wake, 0);
945 - if (retval)
946 - return retval;
947 -
948 - if (wake) {
949 - pci_prepare_to_sleep(pdev);
950 - } else {
951 - pci_wake_from_d3(pdev, false);
952 - pci_set_power_state(pdev, PCI_D3hot);
953 - }
954 -
955 - return 0;
956 + return __igb_shutdown(to_pci_dev(dev), NULL, 0);
957 }
958 #endif /* CONFIG_PM_SLEEP */
959
960 @@ -7707,22 +7681,7 @@ static int igb_runtime_idle(struct device *dev)
961
962 static int igb_runtime_suspend(struct device *dev)
963 {
964 - struct pci_dev *pdev = to_pci_dev(dev);
965 - int retval;
966 - bool wake;
967 -
968 - retval = __igb_shutdown(pdev, &wake, 1);
969 - if (retval)
970 - return retval;
971 -
972 - if (wake) {
973 - pci_prepare_to_sleep(pdev);
974 - } else {
975 - pci_wake_from_d3(pdev, false);
976 - pci_set_power_state(pdev, PCI_D3hot);
977 - }
978 -
979 - return 0;
980 + return __igb_shutdown(to_pci_dev(dev), NULL, 1);
981 }
982
983 static int igb_runtime_resume(struct device *dev)
984 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
985 index da9246f6c31e..d1a3a35ba87b 100644
986 --- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
987 +++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
988 @@ -92,8 +92,7 @@ static int arm_vport_context_events_cmd(struct mlx5_core_dev *dev, u16 vport,
989 opcode, MLX5_CMD_OP_MODIFY_NIC_VPORT_CONTEXT);
990 MLX5_SET(modify_nic_vport_context_in, in, field_select.change_event, 1);
991 MLX5_SET(modify_nic_vport_context_in, in, vport_number, vport);
992 - if (vport)
993 - MLX5_SET(modify_nic_vport_context_in, in, other_vport, 1);
994 + MLX5_SET(modify_nic_vport_context_in, in, other_vport, 1);
995 nic_vport_ctx = MLX5_ADDR_OF(modify_nic_vport_context_in,
996 in, nic_vport_context);
997
998 @@ -121,8 +120,7 @@ static int modify_esw_vport_context_cmd(struct mlx5_core_dev *dev, u16 vport,
999 MLX5_SET(modify_esw_vport_context_in, in, opcode,
1000 MLX5_CMD_OP_MODIFY_ESW_VPORT_CONTEXT);
1001 MLX5_SET(modify_esw_vport_context_in, in, vport_number, vport);
1002 - if (vport)
1003 - MLX5_SET(modify_esw_vport_context_in, in, other_vport, 1);
1004 + MLX5_SET(modify_esw_vport_context_in, in, other_vport, 1);
1005 return mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
1006 }
1007
1008 diff --git a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
1009 index ce97e522566a..77dc5842bd0b 100644
1010 --- a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
1011 +++ b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
1012 @@ -205,6 +205,11 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x,
1013 if (unlikely(rdes0 & RDES0_OWN))
1014 return dma_own;
1015
1016 + if (unlikely(!(rdes0 & RDES0_LAST_DESCRIPTOR))) {
1017 + stats->rx_length_errors++;
1018 + return discard_frame;
1019 + }
1020 +
1021 if (unlikely(rdes0 & RDES0_ERROR_SUMMARY)) {
1022 if (unlikely(rdes0 & RDES0_DESCRIPTOR_ERROR)) {
1023 x->rx_desc++;
1024 @@ -235,9 +240,10 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x,
1025 * It doesn't match with the information reported into the databook.
1026 * At any rate, we need to understand if the CSUM hw computation is ok
1027 * and report this info to the upper layers. */
1028 - ret = enh_desc_coe_rdes0(!!(rdes0 & RDES0_IPC_CSUM_ERROR),
1029 - !!(rdes0 & RDES0_FRAME_TYPE),
1030 - !!(rdes0 & ERDES0_RX_MAC_ADDR));
1031 + if (likely(ret == good_frame))
1032 + ret = enh_desc_coe_rdes0(!!(rdes0 & RDES0_IPC_CSUM_ERROR),
1033 + !!(rdes0 & RDES0_FRAME_TYPE),
1034 + !!(rdes0 & ERDES0_RX_MAC_ADDR));
1035
1036 if (unlikely(rdes0 & RDES0_DRIBBLING))
1037 x->dribbling_bit++;
1038 diff --git a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
1039 index fd78406e2e9a..01f8f2e94c0f 100644
1040 --- a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
1041 +++ b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
1042 @@ -95,8 +95,6 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x,
1043 return dma_own;
1044
1045 if (unlikely(!(rdes0 & RDES0_LAST_DESCRIPTOR))) {
1046 - pr_warn("%s: Oversized frame spanned multiple buffers\n",
1047 - __func__);
1048 stats->rx_length_errors++;
1049 return discard_frame;
1050 }
1051 diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
1052 index 520352327104..77357b07f6c9 100644
1053 --- a/drivers/net/phy/marvell.c
1054 +++ b/drivers/net/phy/marvell.c
1055 @@ -1429,9 +1429,10 @@ static int marvell_get_sset_count(struct phy_device *phydev)
1056
1057 static void marvell_get_strings(struct phy_device *phydev, u8 *data)
1058 {
1059 + int count = marvell_get_sset_count(phydev);
1060 int i;
1061
1062 - for (i = 0; i < ARRAY_SIZE(marvell_hw_stats); i++) {
1063 + for (i = 0; i < count; i++) {
1064 memcpy(data + i * ETH_GSTRING_LEN,
1065 marvell_hw_stats[i].string, ETH_GSTRING_LEN);
1066 }
1067 @@ -1470,9 +1471,10 @@ static u64 marvell_get_stat(struct phy_device *phydev, int i)
1068 static void marvell_get_stats(struct phy_device *phydev,
1069 struct ethtool_stats *stats, u64 *data)
1070 {
1071 + int count = marvell_get_sset_count(phydev);
1072 int i;
1073
1074 - for (i = 0; i < ARRAY_SIZE(marvell_hw_stats); i++)
1075 + for (i = 0; i < count; i++)
1076 data[i] = marvell_get_stat(phydev, i);
1077 }
1078
1079 diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
1080 index f12753eb3216..96ea6c76be6e 100644
1081 --- a/drivers/nvme/target/core.c
1082 +++ b/drivers/nvme/target/core.c
1083 @@ -709,6 +709,15 @@ bool nvmet_host_allowed(struct nvmet_req *req, struct nvmet_subsys *subsys,
1084 return __nvmet_host_allowed(subsys, hostnqn);
1085 }
1086
1087 +static void nvmet_fatal_error_handler(struct work_struct *work)
1088 +{
1089 + struct nvmet_ctrl *ctrl =
1090 + container_of(work, struct nvmet_ctrl, fatal_err_work);
1091 +
1092 + pr_err("ctrl %d fatal error occurred!\n", ctrl->cntlid);
1093 + ctrl->ops->delete_ctrl(ctrl);
1094 +}
1095 +
1096 u16 nvmet_alloc_ctrl(const char *subsysnqn, const char *hostnqn,
1097 struct nvmet_req *req, u32 kato, struct nvmet_ctrl **ctrlp)
1098 {
1099 @@ -747,6 +756,7 @@ u16 nvmet_alloc_ctrl(const char *subsysnqn, const char *hostnqn,
1100
1101 INIT_WORK(&ctrl->async_event_work, nvmet_async_event_work);
1102 INIT_LIST_HEAD(&ctrl->async_events);
1103 + INIT_WORK(&ctrl->fatal_err_work, nvmet_fatal_error_handler);
1104
1105 memcpy(ctrl->subsysnqn, subsysnqn, NVMF_NQN_SIZE);
1106 memcpy(ctrl->hostnqn, hostnqn, NVMF_NQN_SIZE);
1107 @@ -849,21 +859,11 @@ void nvmet_ctrl_put(struct nvmet_ctrl *ctrl)
1108 kref_put(&ctrl->ref, nvmet_ctrl_free);
1109 }
1110
1111 -static void nvmet_fatal_error_handler(struct work_struct *work)
1112 -{
1113 - struct nvmet_ctrl *ctrl =
1114 - container_of(work, struct nvmet_ctrl, fatal_err_work);
1115 -
1116 - pr_err("ctrl %d fatal error occurred!\n", ctrl->cntlid);
1117 - ctrl->ops->delete_ctrl(ctrl);
1118 -}
1119 -
1120 void nvmet_ctrl_fatal_error(struct nvmet_ctrl *ctrl)
1121 {
1122 mutex_lock(&ctrl->lock);
1123 if (!(ctrl->csts & NVME_CSTS_CFS)) {
1124 ctrl->csts |= NVME_CSTS_CFS;
1125 - INIT_WORK(&ctrl->fatal_err_work, nvmet_fatal_error_handler);
1126 schedule_work(&ctrl->fatal_err_work);
1127 }
1128 mutex_unlock(&ctrl->lock);
1129 diff --git a/drivers/rtc/rtc-da9063.c b/drivers/rtc/rtc-da9063.c
1130 index f85cae240f12..7e92e491c2e7 100644
1131 --- a/drivers/rtc/rtc-da9063.c
1132 +++ b/drivers/rtc/rtc-da9063.c
1133 @@ -480,6 +480,13 @@ static int da9063_rtc_probe(struct platform_device *pdev)
1134 da9063_data_to_tm(data, &rtc->alarm_time, rtc);
1135 rtc->rtc_sync = false;
1136
1137 + /*
1138 + * TODO: some models have alarms on a minute boundary but still support
1139 + * real hardware interrupts. Add this once the core supports it.
1140 + */
1141 + if (config->rtc_data_start != RTC_SEC)
1142 + rtc->rtc_dev->uie_unsupported = 1;
1143 +
1144 irq_alarm = platform_get_irq_byname(pdev, "ALARM");
1145 ret = devm_request_threaded_irq(&pdev->dev, irq_alarm, NULL,
1146 da9063_alarm_event,
1147 diff --git a/drivers/rtc/rtc-sh.c b/drivers/rtc/rtc-sh.c
1148 index 17b6235d67a5..600fb7f93939 100644
1149 --- a/drivers/rtc/rtc-sh.c
1150 +++ b/drivers/rtc/rtc-sh.c
1151 @@ -454,7 +454,7 @@ static int sh_rtc_set_time(struct device *dev, struct rtc_time *tm)
1152 static inline int sh_rtc_read_alarm_value(struct sh_rtc *rtc, int reg_off)
1153 {
1154 unsigned int byte;
1155 - int value = 0xff; /* return 0xff for ignored values */
1156 + int value = -1; /* return -1 for ignored values */
1157
1158 byte = readb(rtc->regbase + reg_off);
1159 if (byte & AR_ENB) {
1160 diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
1161 index 282ea00d0f87..9d555b63d2e2 100644
1162 --- a/drivers/scsi/scsi_devinfo.c
1163 +++ b/drivers/scsi/scsi_devinfo.c
1164 @@ -249,6 +249,7 @@ static struct {
1165 {"NETAPP", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
1166 {"LSI", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
1167 {"ENGENIO", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
1168 + {"LENOVO", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
1169 {"SMSC", "USB 2 HS-CF", NULL, BLIST_SPARSELUN | BLIST_INQUIRY_36},
1170 {"SONY", "CD-ROM CDU-8001", NULL, BLIST_BORKEN},
1171 {"SONY", "TSL", NULL, BLIST_FORCELUN}, /* DDS3 & DDS4 autoloaders */
1172 diff --git a/drivers/scsi/scsi_dh.c b/drivers/scsi/scsi_dh.c
1173 index 375cede0c534..c9bc6f058424 100644
1174 --- a/drivers/scsi/scsi_dh.c
1175 +++ b/drivers/scsi/scsi_dh.c
1176 @@ -75,6 +75,7 @@ static const struct scsi_dh_blist scsi_dh_blist[] = {
1177 {"NETAPP", "INF-01-00", "rdac", },
1178 {"LSI", "INF-01-00", "rdac", },
1179 {"ENGENIO", "INF-01-00", "rdac", },
1180 + {"LENOVO", "DE_Series", "rdac", },
1181 {NULL, NULL, NULL },
1182 };
1183
1184 diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
1185 index d92b2808d191..6df34d68737f 100644
1186 --- a/drivers/scsi/storvsc_drv.c
1187 +++ b/drivers/scsi/storvsc_drv.c
1188 @@ -641,13 +641,22 @@ static void handle_sc_creation(struct vmbus_channel *new_sc)
1189 static void handle_multichannel_storage(struct hv_device *device, int max_chns)
1190 {
1191 struct storvsc_device *stor_device;
1192 - int num_cpus = num_online_cpus();
1193 int num_sc;
1194 struct storvsc_cmd_request *request;
1195 struct vstor_packet *vstor_packet;
1196 int ret, t;
1197
1198 - num_sc = ((max_chns > num_cpus) ? num_cpus : max_chns);
1199 + /*
1200 + * If the number of CPUs is artificially restricted, such as
1201 + * with maxcpus=1 on the kernel boot line, Hyper-V could offer
1202 + * sub-channels >= the number of CPUs. These sub-channels
1203 + * should not be created. The primary channel is already created
1204 + * and assigned to one CPU, so check against # CPUs - 1.
1205 + */
1206 + num_sc = min((int)(num_online_cpus() - 1), max_chns);
1207 + if (!num_sc)
1208 + return;
1209 +
1210 stor_device = get_out_stor_device(device);
1211 if (!stor_device)
1212 return;
1213 diff --git a/drivers/staging/iio/addac/adt7316.c b/drivers/staging/iio/addac/adt7316.c
1214 index 3faffe59c933..95f5be1cd498 100644
1215 --- a/drivers/staging/iio/addac/adt7316.c
1216 +++ b/drivers/staging/iio/addac/adt7316.c
1217 @@ -47,6 +47,8 @@
1218 #define ADT7516_MSB_AIN3 0xA
1219 #define ADT7516_MSB_AIN4 0xB
1220 #define ADT7316_DA_DATA_BASE 0x10
1221 +#define ADT7316_DA_10_BIT_LSB_SHIFT 6
1222 +#define ADT7316_DA_12_BIT_LSB_SHIFT 4
1223 #define ADT7316_DA_MSB_DATA_REGS 4
1224 #define ADT7316_LSB_DAC_A 0x10
1225 #define ADT7316_MSB_DAC_A 0x11
1226 @@ -1089,7 +1091,7 @@ static ssize_t adt7316_store_DAC_internal_Vref(struct device *dev,
1227 ldac_config = chip->ldac_config & (~ADT7516_DAC_IN_VREF_MASK);
1228 if (data & 0x1)
1229 ldac_config |= ADT7516_DAC_AB_IN_VREF;
1230 - else if (data & 0x2)
1231 + if (data & 0x2)
1232 ldac_config |= ADT7516_DAC_CD_IN_VREF;
1233 } else {
1234 ret = kstrtou8(buf, 16, &data);
1235 @@ -1411,7 +1413,7 @@ static IIO_DEVICE_ATTR(ex_analog_temp_offset, S_IRUGO | S_IWUSR,
1236 static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip,
1237 int channel, char *buf)
1238 {
1239 - u16 data;
1240 + u16 data = 0;
1241 u8 msb, lsb, offset;
1242 int ret;
1243
1244 @@ -1436,7 +1438,11 @@ static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip,
1245 if (ret)
1246 return -EIO;
1247
1248 - data = (msb << offset) + (lsb & ((1 << offset) - 1));
1249 + if (chip->dac_bits == 12)
1250 + data = lsb >> ADT7316_DA_12_BIT_LSB_SHIFT;
1251 + else if (chip->dac_bits == 10)
1252 + data = lsb >> ADT7316_DA_10_BIT_LSB_SHIFT;
1253 + data |= msb << offset;
1254
1255 return sprintf(buf, "%d\n", data);
1256 }
1257 @@ -1444,7 +1450,7 @@ static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip,
1258 static ssize_t adt7316_store_DAC(struct adt7316_chip_info *chip,
1259 int channel, const char *buf, size_t len)
1260 {
1261 - u8 msb, lsb, offset;
1262 + u8 msb, lsb, lsb_reg, offset;
1263 u16 data;
1264 int ret;
1265
1266 @@ -1462,9 +1468,13 @@ static ssize_t adt7316_store_DAC(struct adt7316_chip_info *chip,
1267 return -EINVAL;
1268
1269 if (chip->dac_bits > 8) {
1270 - lsb = data & (1 << offset);
1271 + lsb = data & ((1 << offset) - 1);
1272 + if (chip->dac_bits == 12)
1273 + lsb_reg = lsb << ADT7316_DA_12_BIT_LSB_SHIFT;
1274 + else
1275 + lsb_reg = lsb << ADT7316_DA_10_BIT_LSB_SHIFT;
1276 ret = chip->bus.write(chip->bus.client,
1277 - ADT7316_DA_DATA_BASE + channel * 2, lsb);
1278 + ADT7316_DA_DATA_BASE + channel * 2, lsb_reg);
1279 if (ret)
1280 return -EIO;
1281 }
1282 diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
1283 index c17b254e4f64..654199c6a36c 100644
1284 --- a/drivers/usb/core/driver.c
1285 +++ b/drivers/usb/core/driver.c
1286 @@ -470,11 +470,6 @@ static int usb_unbind_interface(struct device *dev)
1287 pm_runtime_disable(dev);
1288 pm_runtime_set_suspended(dev);
1289
1290 - /* Undo any residual pm_autopm_get_interface_* calls */
1291 - for (r = atomic_read(&intf->pm_usage_cnt); r > 0; --r)
1292 - usb_autopm_put_interface_no_suspend(intf);
1293 - atomic_set(&intf->pm_usage_cnt, 0);
1294 -
1295 if (!error)
1296 usb_autosuspend_device(udev);
1297
1298 @@ -1625,7 +1620,6 @@ void usb_autopm_put_interface(struct usb_interface *intf)
1299 int status;
1300
1301 usb_mark_last_busy(udev);
1302 - atomic_dec(&intf->pm_usage_cnt);
1303 status = pm_runtime_put_sync(&intf->dev);
1304 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
1305 __func__, atomic_read(&intf->dev.power.usage_count),
1306 @@ -1654,7 +1648,6 @@ void usb_autopm_put_interface_async(struct usb_interface *intf)
1307 int status;
1308
1309 usb_mark_last_busy(udev);
1310 - atomic_dec(&intf->pm_usage_cnt);
1311 status = pm_runtime_put(&intf->dev);
1312 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
1313 __func__, atomic_read(&intf->dev.power.usage_count),
1314 @@ -1676,7 +1669,6 @@ void usb_autopm_put_interface_no_suspend(struct usb_interface *intf)
1315 struct usb_device *udev = interface_to_usbdev(intf);
1316
1317 usb_mark_last_busy(udev);
1318 - atomic_dec(&intf->pm_usage_cnt);
1319 pm_runtime_put_noidle(&intf->dev);
1320 }
1321 EXPORT_SYMBOL_GPL(usb_autopm_put_interface_no_suspend);
1322 @@ -1707,8 +1699,6 @@ int usb_autopm_get_interface(struct usb_interface *intf)
1323 status = pm_runtime_get_sync(&intf->dev);
1324 if (status < 0)
1325 pm_runtime_put_sync(&intf->dev);
1326 - else
1327 - atomic_inc(&intf->pm_usage_cnt);
1328 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
1329 __func__, atomic_read(&intf->dev.power.usage_count),
1330 status);
1331 @@ -1742,8 +1732,6 @@ int usb_autopm_get_interface_async(struct usb_interface *intf)
1332 status = pm_runtime_get(&intf->dev);
1333 if (status < 0 && status != -EINPROGRESS)
1334 pm_runtime_put_noidle(&intf->dev);
1335 - else
1336 - atomic_inc(&intf->pm_usage_cnt);
1337 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
1338 __func__, atomic_read(&intf->dev.power.usage_count),
1339 status);
1340 @@ -1767,7 +1755,6 @@ void usb_autopm_get_interface_no_resume(struct usb_interface *intf)
1341 struct usb_device *udev = interface_to_usbdev(intf);
1342
1343 usb_mark_last_busy(udev);
1344 - atomic_inc(&intf->pm_usage_cnt);
1345 pm_runtime_get_noresume(&intf->dev);
1346 }
1347 EXPORT_SYMBOL_GPL(usb_autopm_get_interface_no_resume);
1348 diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
1349 index 0e6ab0a17c08..955cd6552e95 100644
1350 --- a/drivers/usb/core/message.c
1351 +++ b/drivers/usb/core/message.c
1352 @@ -817,9 +817,11 @@ int usb_string(struct usb_device *dev, int index, char *buf, size_t size)
1353
1354 if (dev->state == USB_STATE_SUSPENDED)
1355 return -EHOSTUNREACH;
1356 - if (size <= 0 || !buf || !index)
1357 + if (size <= 0 || !buf)
1358 return -EINVAL;
1359 buf[0] = 0;
1360 + if (index <= 0 || index >= 256)
1361 + return -EINVAL;
1362 tbuf = kmalloc(256, GFP_NOIO);
1363 if (!tbuf)
1364 return -ENOMEM;
1365 diff --git a/drivers/usb/misc/yurex.c b/drivers/usb/misc/yurex.c
1366 index 1e672343bcd6..efa3c86bd262 100644
1367 --- a/drivers/usb/misc/yurex.c
1368 +++ b/drivers/usb/misc/yurex.c
1369 @@ -324,6 +324,7 @@ static void yurex_disconnect(struct usb_interface *interface)
1370 usb_deregister_dev(interface, &yurex_class);
1371
1372 /* prevent more I/O from starting */
1373 + usb_poison_urb(dev->urb);
1374 mutex_lock(&dev->io_mutex);
1375 dev->interface = NULL;
1376 mutex_unlock(&dev->io_mutex);
1377 diff --git a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c
1378 index 4176d1af9bf2..fac3447021b2 100644
1379 --- a/drivers/usb/storage/realtek_cr.c
1380 +++ b/drivers/usb/storage/realtek_cr.c
1381 @@ -776,18 +776,16 @@ static void rts51x_suspend_timer_fn(unsigned long data)
1382 break;
1383 case RTS51X_STAT_IDLE:
1384 case RTS51X_STAT_SS:
1385 - usb_stor_dbg(us, "RTS51X_STAT_SS, intf->pm_usage_cnt:%d, power.usage:%d\n",
1386 - atomic_read(&us->pusb_intf->pm_usage_cnt),
1387 + usb_stor_dbg(us, "RTS51X_STAT_SS, power.usage:%d\n",
1388 atomic_read(&us->pusb_intf->dev.power.usage_count));
1389
1390 - if (atomic_read(&us->pusb_intf->pm_usage_cnt) > 0) {
1391 + if (atomic_read(&us->pusb_intf->dev.power.usage_count) > 0) {
1392 usb_stor_dbg(us, "Ready to enter SS state\n");
1393 rts51x_set_stat(chip, RTS51X_STAT_SS);
1394 /* ignore mass storage interface's children */
1395 pm_suspend_ignore_children(&us->pusb_intf->dev, true);
1396 usb_autopm_put_interface_async(us->pusb_intf);
1397 - usb_stor_dbg(us, "RTS51X_STAT_SS 01, intf->pm_usage_cnt:%d, power.usage:%d\n",
1398 - atomic_read(&us->pusb_intf->pm_usage_cnt),
1399 + usb_stor_dbg(us, "RTS51X_STAT_SS 01, power.usage:%d\n",
1400 atomic_read(&us->pusb_intf->dev.power.usage_count));
1401 }
1402 break;
1403 @@ -820,11 +818,10 @@ static void rts51x_invoke_transport(struct scsi_cmnd *srb, struct us_data *us)
1404 int ret;
1405
1406 if (working_scsi(srb)) {
1407 - usb_stor_dbg(us, "working scsi, intf->pm_usage_cnt:%d, power.usage:%d\n",
1408 - atomic_read(&us->pusb_intf->pm_usage_cnt),
1409 + usb_stor_dbg(us, "working scsi, power.usage:%d\n",
1410 atomic_read(&us->pusb_intf->dev.power.usage_count));
1411
1412 - if (atomic_read(&us->pusb_intf->pm_usage_cnt) <= 0) {
1413 + if (atomic_read(&us->pusb_intf->dev.power.usage_count) <= 0) {
1414 ret = usb_autopm_get_interface(us->pusb_intf);
1415 usb_stor_dbg(us, "working scsi, ret=%d\n", ret);
1416 }
1417 diff --git a/drivers/usb/usbip/stub_rx.c b/drivers/usb/usbip/stub_rx.c
1418 index 5b807185f79e..777a4058c407 100644
1419 --- a/drivers/usb/usbip/stub_rx.c
1420 +++ b/drivers/usb/usbip/stub_rx.c
1421 @@ -383,16 +383,10 @@ static int get_pipe(struct stub_device *sdev, struct usbip_header *pdu)
1422 }
1423
1424 if (usb_endpoint_xfer_isoc(epd)) {
1425 - /* validate packet size and number of packets */
1426 - unsigned int maxp, packets, bytes;
1427 -
1428 - maxp = usb_endpoint_maxp(epd);
1429 - maxp *= usb_endpoint_maxp_mult(epd);
1430 - bytes = pdu->u.cmd_submit.transfer_buffer_length;
1431 - packets = DIV_ROUND_UP(bytes, maxp);
1432 -
1433 + /* validate number of packets */
1434 if (pdu->u.cmd_submit.number_of_packets < 0 ||
1435 - pdu->u.cmd_submit.number_of_packets > packets) {
1436 + pdu->u.cmd_submit.number_of_packets >
1437 + USBIP_MAX_ISO_PACKETS) {
1438 dev_err(&sdev->udev->dev,
1439 "CMD_SUBMIT: isoc invalid num packets %d\n",
1440 pdu->u.cmd_submit.number_of_packets);
1441 diff --git a/drivers/usb/usbip/usbip_common.h b/drivers/usb/usbip/usbip_common.h
1442 index 109e65ba01a0..0b199a2664c0 100644
1443 --- a/drivers/usb/usbip/usbip_common.h
1444 +++ b/drivers/usb/usbip/usbip_common.h
1445 @@ -136,6 +136,13 @@ extern struct device_attribute dev_attr_usbip_debug;
1446 #define USBIP_DIR_OUT 0x00
1447 #define USBIP_DIR_IN 0x01
1448
1449 +/*
1450 + * Arbitrary limit for the maximum number of isochronous packets in an URB,
1451 + * compare for example the uhci_submit_isochronous function in
1452 + * drivers/usb/host/uhci-q.c
1453 + */
1454 +#define USBIP_MAX_ISO_PACKETS 1024
1455 +
1456 /**
1457 * struct usbip_header_basic - data pertinent to every request
1458 * @command: the usbip request type
1459 diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c
1460 index 7338e43faa17..f9a75df2d22d 100644
1461 --- a/drivers/vfio/pci/vfio_pci.c
1462 +++ b/drivers/vfio/pci/vfio_pci.c
1463 @@ -1467,11 +1467,11 @@ static void __init vfio_pci_fill_ids(void)
1464 rc = pci_add_dynid(&vfio_pci_driver, vendor, device,
1465 subvendor, subdevice, class, class_mask, 0);
1466 if (rc)
1467 - pr_warn("failed to add dynamic id [%04hx:%04hx[%04hx:%04hx]] class %#08x/%08x (%d)\n",
1468 + pr_warn("failed to add dynamic id [%04x:%04x[%04x:%04x]] class %#08x/%08x (%d)\n",
1469 vendor, device, subvendor, subdevice,
1470 class, class_mask, rc);
1471 else
1472 - pr_info("add [%04hx:%04hx[%04hx:%04hx]] class %#08x/%08x\n",
1473 + pr_info("add [%04x:%04x[%04x:%04x]] class %#08x/%08x\n",
1474 vendor, device, subvendor, subdevice,
1475 class, class_mask);
1476 }
1477 diff --git a/drivers/w1/masters/ds2490.c b/drivers/w1/masters/ds2490.c
1478 index 59d74d1b47a8..2287e1be0e55 100644
1479 --- a/drivers/w1/masters/ds2490.c
1480 +++ b/drivers/w1/masters/ds2490.c
1481 @@ -1039,15 +1039,15 @@ static int ds_probe(struct usb_interface *intf,
1482 /* alternative 3, 1ms interrupt (greatly speeds search), 64 byte bulk */
1483 alt = 3;
1484 err = usb_set_interface(dev->udev,
1485 - intf->altsetting[alt].desc.bInterfaceNumber, alt);
1486 + intf->cur_altsetting->desc.bInterfaceNumber, alt);
1487 if (err) {
1488 dev_err(&dev->udev->dev, "Failed to set alternative setting %d "
1489 "for %d interface: err=%d.\n", alt,
1490 - intf->altsetting[alt].desc.bInterfaceNumber, err);
1491 + intf->cur_altsetting->desc.bInterfaceNumber, err);
1492 goto err_out_clear;
1493 }
1494
1495 - iface_desc = &intf->altsetting[alt];
1496 + iface_desc = intf->cur_altsetting;
1497 if (iface_desc->desc.bNumEndpoints != NUM_EP-1) {
1498 pr_info("Num endpoints=%d. It is not DS9490R.\n",
1499 iface_desc->desc.bNumEndpoints);
1500 diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
1501 index 77e9cd7a0137..20ee612017bf 100644
1502 --- a/fs/debugfs/inode.c
1503 +++ b/fs/debugfs/inode.c
1504 @@ -170,19 +170,24 @@ static int debugfs_show_options(struct seq_file *m, struct dentry *root)
1505 return 0;
1506 }
1507
1508 -static void debugfs_evict_inode(struct inode *inode)
1509 +static void debugfs_i_callback(struct rcu_head *head)
1510 {
1511 - truncate_inode_pages_final(&inode->i_data);
1512 - clear_inode(inode);
1513 + struct inode *inode = container_of(head, struct inode, i_rcu);
1514 if (S_ISLNK(inode->i_mode))
1515 kfree(inode->i_link);
1516 + free_inode_nonrcu(inode);
1517 +}
1518 +
1519 +static void debugfs_destroy_inode(struct inode *inode)
1520 +{
1521 + call_rcu(&inode->i_rcu, debugfs_i_callback);
1522 }
1523
1524 static const struct super_operations debugfs_super_operations = {
1525 .statfs = simple_statfs,
1526 .remount_fs = debugfs_remount,
1527 .show_options = debugfs_show_options,
1528 - .evict_inode = debugfs_evict_inode,
1529 + .destroy_inode = debugfs_destroy_inode,
1530 };
1531
1532 static struct vfsmount *debugfs_automount(struct path *path)
1533 diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
1534 index 001487b230b5..4acc677ac8fb 100644
1535 --- a/fs/hugetlbfs/inode.c
1536 +++ b/fs/hugetlbfs/inode.c
1537 @@ -746,11 +746,17 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb,
1538 umode_t mode, dev_t dev)
1539 {
1540 struct inode *inode;
1541 - struct resv_map *resv_map;
1542 + struct resv_map *resv_map = NULL;
1543
1544 - resv_map = resv_map_alloc();
1545 - if (!resv_map)
1546 - return NULL;
1547 + /*
1548 + * Reserve maps are only needed for inodes that can have associated
1549 + * page allocations.
1550 + */
1551 + if (S_ISREG(mode) || S_ISLNK(mode)) {
1552 + resv_map = resv_map_alloc();
1553 + if (!resv_map)
1554 + return NULL;
1555 + }
1556
1557 inode = new_inode(sb);
1558 if (inode) {
1559 @@ -782,8 +788,10 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb,
1560 break;
1561 }
1562 lockdep_annotate_inode_mutex_key(inode);
1563 - } else
1564 - kref_put(&resv_map->refs, resv_map_release);
1565 + } else {
1566 + if (resv_map)
1567 + kref_put(&resv_map->refs, resv_map_release);
1568 + }
1569
1570 return inode;
1571 }
1572 diff --git a/fs/jffs2/readinode.c b/fs/jffs2/readinode.c
1573 index 06a71dbd4833..2f236cca6095 100644
1574 --- a/fs/jffs2/readinode.c
1575 +++ b/fs/jffs2/readinode.c
1576 @@ -1414,11 +1414,6 @@ void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f)
1577
1578 jffs2_kill_fragtree(&f->fragtree, deleted?c:NULL);
1579
1580 - if (f->target) {
1581 - kfree(f->target);
1582 - f->target = NULL;
1583 - }
1584 -
1585 fds = f->dents;
1586 while(fds) {
1587 fd = fds;
1588 diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c
1589 index 226640563df3..76aedbc97773 100644
1590 --- a/fs/jffs2/super.c
1591 +++ b/fs/jffs2/super.c
1592 @@ -47,7 +47,10 @@ static struct inode *jffs2_alloc_inode(struct super_block *sb)
1593 static void jffs2_i_callback(struct rcu_head *head)
1594 {
1595 struct inode *inode = container_of(head, struct inode, i_rcu);
1596 - kmem_cache_free(jffs2_inode_cachep, JFFS2_INODE_INFO(inode));
1597 + struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
1598 +
1599 + kfree(f->target);
1600 + kmem_cache_free(jffs2_inode_cachep, f);
1601 }
1602
1603 static void jffs2_destroy_inode(struct inode *inode)
1604 diff --git a/include/linux/kasan.h b/include/linux/kasan.h
1605 index 820c0ad54a01..c9df9e180610 100644
1606 --- a/include/linux/kasan.h
1607 +++ b/include/linux/kasan.h
1608 @@ -7,6 +7,7 @@
1609 struct kmem_cache;
1610 struct page;
1611 struct vm_struct;
1612 +struct task_struct;
1613
1614 #ifdef CONFIG_KASAN
1615
1616 diff --git a/include/linux/usb.h b/include/linux/usb.h
1617 index 346665a0c49d..9b5ca59271d9 100644
1618 --- a/include/linux/usb.h
1619 +++ b/include/linux/usb.h
1620 @@ -129,7 +129,6 @@ enum usb_interface_condition {
1621 * @dev: driver model's view of this device
1622 * @usb_dev: if an interface is bound to the USB major, this will point
1623 * to the sysfs representation for that device.
1624 - * @pm_usage_cnt: PM usage counter for this interface
1625 * @reset_ws: Used for scheduling resets from atomic context.
1626 * @resetting_device: USB core reset the device, so use alt setting 0 as
1627 * current; needs bandwidth alloc after reset.
1628 @@ -186,7 +185,6 @@ struct usb_interface {
1629
1630 struct device dev; /* interface specific device info */
1631 struct device *usb_dev;
1632 - atomic_t pm_usage_cnt; /* usage counter for autosuspend */
1633 struct work_struct reset_ws; /* for resets in atomic context */
1634 };
1635 #define to_usb_interface(d) container_of(d, struct usb_interface, dev)
1636 diff --git a/include/net/caif/cfpkt.h b/include/net/caif/cfpkt.h
1637 index fe328c52c46b..801489bb14c3 100644
1638 --- a/include/net/caif/cfpkt.h
1639 +++ b/include/net/caif/cfpkt.h
1640 @@ -32,6 +32,33 @@ void cfpkt_destroy(struct cfpkt *pkt);
1641 */
1642 int cfpkt_extr_head(struct cfpkt *pkt, void *data, u16 len);
1643
1644 +static inline u8 cfpkt_extr_head_u8(struct cfpkt *pkt)
1645 +{
1646 + u8 tmp;
1647 +
1648 + cfpkt_extr_head(pkt, &tmp, 1);
1649 +
1650 + return tmp;
1651 +}
1652 +
1653 +static inline u16 cfpkt_extr_head_u16(struct cfpkt *pkt)
1654 +{
1655 + __le16 tmp;
1656 +
1657 + cfpkt_extr_head(pkt, &tmp, 2);
1658 +
1659 + return le16_to_cpu(tmp);
1660 +}
1661 +
1662 +static inline u32 cfpkt_extr_head_u32(struct cfpkt *pkt)
1663 +{
1664 + __le32 tmp;
1665 +
1666 + cfpkt_extr_head(pkt, &tmp, 4);
1667 +
1668 + return le32_to_cpu(tmp);
1669 +}
1670 +
1671 /*
1672 * Peek header from packet.
1673 * Reads data from packet without changing packet.
1674 diff --git a/lib/Makefile b/lib/Makefile
1675 index 50144a3aeebd..2447a218fff8 100644
1676 --- a/lib/Makefile
1677 +++ b/lib/Makefile
1678 @@ -46,6 +46,7 @@ obj-$(CONFIG_TEST_BPF) += test_bpf.o
1679 obj-$(CONFIG_TEST_FIRMWARE) += test_firmware.o
1680 obj-$(CONFIG_TEST_HASH) += test_hash.o
1681 obj-$(CONFIG_TEST_KASAN) += test_kasan.o
1682 +CFLAGS_test_kasan.o += -fno-builtin
1683 obj-$(CONFIG_TEST_KSTRTOX) += test-kstrtox.o
1684 obj-$(CONFIG_TEST_LKM) += test_module.o
1685 obj-$(CONFIG_TEST_RHASHTABLE) += test_rhashtable.o
1686 diff --git a/lib/test_kasan.c b/lib/test_kasan.c
1687 index fbdf87920093..4ba4cbe169a8 100644
1688 --- a/lib/test_kasan.c
1689 +++ b/lib/test_kasan.c
1690 @@ -355,7 +355,7 @@ static noinline void __init kasan_stack_oob(void)
1691 static noinline void __init ksize_unpoisons_memory(void)
1692 {
1693 char *ptr;
1694 - size_t size = 123, real_size = size;
1695 + size_t size = 123, real_size;
1696
1697 pr_info("ksize() unpoisons the whole allocated chunk\n");
1698 ptr = kmalloc(size, GFP_KERNEL);
1699 diff --git a/mm/kasan/kasan.c b/mm/kasan/kasan.c
1700 index 4ce386c44cf1..1169c1fe941f 100644
1701 --- a/mm/kasan/kasan.c
1702 +++ b/mm/kasan/kasan.c
1703 @@ -80,7 +80,14 @@ void kasan_unpoison_task_stack(struct task_struct *task)
1704 /* Unpoison the stack for the current task beyond a watermark sp value. */
1705 asmlinkage void kasan_unpoison_task_stack_below(const void *watermark)
1706 {
1707 - __kasan_unpoison_stack(current, watermark);
1708 + /*
1709 + * Calculate the task stack base address. Avoid using 'current'
1710 + * because this function is called by early resume code which hasn't
1711 + * yet set up the percpu register (%gs).
1712 + */
1713 + void *base = (void *)((unsigned long)watermark & ~(THREAD_SIZE - 1));
1714 +
1715 + kasan_unpoison_shadow(base, watermark - base);
1716 }
1717
1718 /*
1719 diff --git a/mm/kasan/kasan_init.c b/mm/kasan/kasan_init.c
1720 index 3f9a41cf0ac6..31238dad85fb 100644
1721 --- a/mm/kasan/kasan_init.c
1722 +++ b/mm/kasan/kasan_init.c
1723 @@ -15,6 +15,7 @@
1724 #include <linux/kasan.h>
1725 #include <linux/kernel.h>
1726 #include <linux/memblock.h>
1727 +#include <linux/mm.h>
1728 #include <linux/pfn.h>
1729
1730 #include <asm/page.h>
1731 @@ -49,7 +50,7 @@ static void __init zero_pte_populate(pmd_t *pmd, unsigned long addr,
1732 pte_t *pte = pte_offset_kernel(pmd, addr);
1733 pte_t zero_pte;
1734
1735 - zero_pte = pfn_pte(PFN_DOWN(__pa(kasan_zero_page)), PAGE_KERNEL);
1736 + zero_pte = pfn_pte(PFN_DOWN(__pa_symbol(kasan_zero_page)), PAGE_KERNEL);
1737 zero_pte = pte_wrprotect(zero_pte);
1738
1739 while (addr + PAGE_SIZE <= end) {
1740 @@ -69,7 +70,7 @@ static void __init zero_pmd_populate(pud_t *pud, unsigned long addr,
1741 next = pmd_addr_end(addr, end);
1742
1743 if (IS_ALIGNED(addr, PMD_SIZE) && end - addr >= PMD_SIZE) {
1744 - pmd_populate_kernel(&init_mm, pmd, kasan_zero_pte);
1745 + pmd_populate_kernel(&init_mm, pmd, lm_alias(kasan_zero_pte));
1746 continue;
1747 }
1748
1749 @@ -92,9 +93,9 @@ static void __init zero_pud_populate(pgd_t *pgd, unsigned long addr,
1750 if (IS_ALIGNED(addr, PUD_SIZE) && end - addr >= PUD_SIZE) {
1751 pmd_t *pmd;
1752
1753 - pud_populate(&init_mm, pud, kasan_zero_pmd);
1754 + pud_populate(&init_mm, pud, lm_alias(kasan_zero_pmd));
1755 pmd = pmd_offset(pud, addr);
1756 - pmd_populate_kernel(&init_mm, pmd, kasan_zero_pte);
1757 + pmd_populate_kernel(&init_mm, pmd, lm_alias(kasan_zero_pte));
1758 continue;
1759 }
1760
1761 @@ -135,11 +136,11 @@ void __init kasan_populate_zero_shadow(const void *shadow_start,
1762 * puds,pmds, so pgd_populate(), pud_populate()
1763 * is noops.
1764 */
1765 - pgd_populate(&init_mm, pgd, kasan_zero_pud);
1766 + pgd_populate(&init_mm, pgd, lm_alias(kasan_zero_pud));
1767 pud = pud_offset(pgd, addr);
1768 - pud_populate(&init_mm, pud, kasan_zero_pmd);
1769 + pud_populate(&init_mm, pud, lm_alias(kasan_zero_pmd));
1770 pmd = pmd_offset(pud, addr);
1771 - pmd_populate_kernel(&init_mm, pmd, kasan_zero_pte);
1772 + pmd_populate_kernel(&init_mm, pmd, lm_alias(kasan_zero_pte));
1773 continue;
1774 }
1775
1776 diff --git a/mm/kasan/report.c b/mm/kasan/report.c
1777 index 8ca412aebcf1..c505ac5b2d46 100644
1778 --- a/mm/kasan/report.c
1779 +++ b/mm/kasan/report.c
1780 @@ -302,6 +302,7 @@ void kasan_report(unsigned long addr, size_t size,
1781 disable_trace_on_warning();
1782
1783 info.access_addr = (void *)addr;
1784 + info.first_bad_addr = (void *)addr;
1785 info.access_size = size;
1786 info.is_write = is_write;
1787 info.ip = ip;
1788 diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c
1789 index 8b6f654bc85d..00123064eb26 100644
1790 --- a/net/batman-adv/bridge_loop_avoidance.c
1791 +++ b/net/batman-adv/bridge_loop_avoidance.c
1792 @@ -802,6 +802,8 @@ static void batadv_bla_del_claim(struct batadv_priv *bat_priv,
1793 const u8 *mac, const unsigned short vid)
1794 {
1795 struct batadv_bla_claim search_claim, *claim;
1796 + struct batadv_bla_claim *claim_removed_entry;
1797 + struct hlist_node *claim_removed_node;
1798
1799 ether_addr_copy(search_claim.addr, mac);
1800 search_claim.vid = vid;
1801 @@ -812,10 +814,18 @@ static void batadv_bla_del_claim(struct batadv_priv *bat_priv,
1802 batadv_dbg(BATADV_DBG_BLA, bat_priv, "bla_del_claim(): %pM, vid %d\n",
1803 mac, BATADV_PRINT_VID(vid));
1804
1805 - batadv_hash_remove(bat_priv->bla.claim_hash, batadv_compare_claim,
1806 - batadv_choose_claim, claim);
1807 - batadv_claim_put(claim); /* reference from the hash is gone */
1808 + claim_removed_node = batadv_hash_remove(bat_priv->bla.claim_hash,
1809 + batadv_compare_claim,
1810 + batadv_choose_claim, claim);
1811 + if (!claim_removed_node)
1812 + goto free_claim;
1813
1814 + /* reference from the hash is gone */
1815 + claim_removed_entry = hlist_entry(claim_removed_node,
1816 + struct batadv_bla_claim, hash_entry);
1817 + batadv_claim_put(claim_removed_entry);
1818 +
1819 +free_claim:
1820 /* don't need the reference from hash_find() anymore */
1821 batadv_claim_put(claim);
1822 }
1823 diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
1824 index b9f9a310eb78..af4a02ad8503 100644
1825 --- a/net/batman-adv/translation-table.c
1826 +++ b/net/batman-adv/translation-table.c
1827 @@ -615,14 +615,26 @@ static void batadv_tt_global_free(struct batadv_priv *bat_priv,
1828 struct batadv_tt_global_entry *tt_global,
1829 const char *message)
1830 {
1831 + struct batadv_tt_global_entry *tt_removed_entry;
1832 + struct hlist_node *tt_removed_node;
1833 +
1834 batadv_dbg(BATADV_DBG_TT, bat_priv,
1835 "Deleting global tt entry %pM (vid: %d): %s\n",
1836 tt_global->common.addr,
1837 BATADV_PRINT_VID(tt_global->common.vid), message);
1838
1839 - batadv_hash_remove(bat_priv->tt.global_hash, batadv_compare_tt,
1840 - batadv_choose_tt, &tt_global->common);
1841 - batadv_tt_global_entry_put(tt_global);
1842 + tt_removed_node = batadv_hash_remove(bat_priv->tt.global_hash,
1843 + batadv_compare_tt,
1844 + batadv_choose_tt,
1845 + &tt_global->common);
1846 + if (!tt_removed_node)
1847 + return;
1848 +
1849 + /* drop reference of remove hash entry */
1850 + tt_removed_entry = hlist_entry(tt_removed_node,
1851 + struct batadv_tt_global_entry,
1852 + common.hash_entry);
1853 + batadv_tt_global_entry_put(tt_removed_entry);
1854 }
1855
1856 /**
1857 @@ -1308,9 +1320,10 @@ u16 batadv_tt_local_remove(struct batadv_priv *bat_priv, const u8 *addr,
1858 unsigned short vid, const char *message,
1859 bool roaming)
1860 {
1861 + struct batadv_tt_local_entry *tt_removed_entry;
1862 struct batadv_tt_local_entry *tt_local_entry;
1863 u16 flags, curr_flags = BATADV_NO_FLAGS;
1864 - void *tt_entry_exists;
1865 + struct hlist_node *tt_removed_node;
1866
1867 tt_local_entry = batadv_tt_local_hash_find(bat_priv, addr, vid);
1868 if (!tt_local_entry)
1869 @@ -1339,15 +1352,18 @@ u16 batadv_tt_local_remove(struct batadv_priv *bat_priv, const u8 *addr,
1870 */
1871 batadv_tt_local_event(bat_priv, tt_local_entry, BATADV_TT_CLIENT_DEL);
1872
1873 - tt_entry_exists = batadv_hash_remove(bat_priv->tt.local_hash,
1874 + tt_removed_node = batadv_hash_remove(bat_priv->tt.local_hash,
1875 batadv_compare_tt,
1876 batadv_choose_tt,
1877 &tt_local_entry->common);
1878 - if (!tt_entry_exists)
1879 + if (!tt_removed_node)
1880 goto out;
1881
1882 - /* extra call to free the local tt entry */
1883 - batadv_tt_local_entry_put(tt_local_entry);
1884 + /* drop reference of remove hash entry */
1885 + tt_removed_entry = hlist_entry(tt_removed_node,
1886 + struct batadv_tt_local_entry,
1887 + common.hash_entry);
1888 + batadv_tt_local_entry_put(tt_removed_entry);
1889
1890 out:
1891 if (tt_local_entry)
1892 diff --git a/net/caif/cfctrl.c b/net/caif/cfctrl.c
1893 index f5afda1abc76..4dc82e9a855d 100644
1894 --- a/net/caif/cfctrl.c
1895 +++ b/net/caif/cfctrl.c
1896 @@ -352,15 +352,14 @@ static int cfctrl_recv(struct cflayer *layer, struct cfpkt *pkt)
1897 u8 cmdrsp;
1898 u8 cmd;
1899 int ret = -1;
1900 - u16 tmp16;
1901 u8 len;
1902 u8 param[255];
1903 - u8 linkid;
1904 + u8 linkid = 0;
1905 struct cfctrl *cfctrl = container_obj(layer);
1906 struct cfctrl_request_info rsp, *req;
1907
1908
1909 - cfpkt_extr_head(pkt, &cmdrsp, 1);
1910 + cmdrsp = cfpkt_extr_head_u8(pkt);
1911 cmd = cmdrsp & CFCTRL_CMD_MASK;
1912 if (cmd != CFCTRL_CMD_LINK_ERR
1913 && CFCTRL_RSP_BIT != (CFCTRL_RSP_BIT & cmdrsp)
1914 @@ -378,13 +377,12 @@ static int cfctrl_recv(struct cflayer *layer, struct cfpkt *pkt)
1915 u8 physlinkid;
1916 u8 prio;
1917 u8 tmp;
1918 - u32 tmp32;
1919 u8 *cp;
1920 int i;
1921 struct cfctrl_link_param linkparam;
1922 memset(&linkparam, 0, sizeof(linkparam));
1923
1924 - cfpkt_extr_head(pkt, &tmp, 1);
1925 + tmp = cfpkt_extr_head_u8(pkt);
1926
1927 serv = tmp & CFCTRL_SRV_MASK;
1928 linkparam.linktype = serv;
1929 @@ -392,13 +390,13 @@ static int cfctrl_recv(struct cflayer *layer, struct cfpkt *pkt)
1930 servtype = tmp >> 4;
1931 linkparam.chtype = servtype;
1932
1933 - cfpkt_extr_head(pkt, &tmp, 1);
1934 + tmp = cfpkt_extr_head_u8(pkt);
1935 physlinkid = tmp & 0x07;
1936 prio = tmp >> 3;
1937
1938 linkparam.priority = prio;
1939 linkparam.phyid = physlinkid;
1940 - cfpkt_extr_head(pkt, &endpoint, 1);
1941 + endpoint = cfpkt_extr_head_u8(pkt);
1942 linkparam.endpoint = endpoint & 0x03;
1943
1944 switch (serv) {
1945 @@ -407,45 +405,43 @@ static int cfctrl_recv(struct cflayer *layer, struct cfpkt *pkt)
1946 if (CFCTRL_ERR_BIT & cmdrsp)
1947 break;
1948 /* Link ID */
1949 - cfpkt_extr_head(pkt, &linkid, 1);
1950 + linkid = cfpkt_extr_head_u8(pkt);
1951 break;
1952 case CFCTRL_SRV_VIDEO:
1953 - cfpkt_extr_head(pkt, &tmp, 1);
1954 + tmp = cfpkt_extr_head_u8(pkt);
1955 linkparam.u.video.connid = tmp;
1956 if (CFCTRL_ERR_BIT & cmdrsp)
1957 break;
1958 /* Link ID */
1959 - cfpkt_extr_head(pkt, &linkid, 1);
1960 + linkid = cfpkt_extr_head_u8(pkt);
1961 break;
1962
1963 case CFCTRL_SRV_DATAGRAM:
1964 - cfpkt_extr_head(pkt, &tmp32, 4);
1965 linkparam.u.datagram.connid =
1966 - le32_to_cpu(tmp32);
1967 + cfpkt_extr_head_u32(pkt);
1968 if (CFCTRL_ERR_BIT & cmdrsp)
1969 break;
1970 /* Link ID */
1971 - cfpkt_extr_head(pkt, &linkid, 1);
1972 + linkid = cfpkt_extr_head_u8(pkt);
1973 break;
1974 case CFCTRL_SRV_RFM:
1975 /* Construct a frame, convert
1976 * DatagramConnectionID
1977 * to network format long and copy it out...
1978 */
1979 - cfpkt_extr_head(pkt, &tmp32, 4);
1980 linkparam.u.rfm.connid =
1981 - le32_to_cpu(tmp32);
1982 + cfpkt_extr_head_u32(pkt);
1983 cp = (u8 *) linkparam.u.rfm.volume;
1984 - for (cfpkt_extr_head(pkt, &tmp, 1);
1985 + for (tmp = cfpkt_extr_head_u8(pkt);
1986 cfpkt_more(pkt) && tmp != '\0';
1987 - cfpkt_extr_head(pkt, &tmp, 1))
1988 + tmp = cfpkt_extr_head_u8(pkt))
1989 *cp++ = tmp;
1990 *cp = '\0';
1991
1992 if (CFCTRL_ERR_BIT & cmdrsp)
1993 break;
1994 /* Link ID */
1995 - cfpkt_extr_head(pkt, &linkid, 1);
1996 + linkid = cfpkt_extr_head_u8(pkt);
1997
1998 break;
1999 case CFCTRL_SRV_UTIL:
2000 @@ -454,13 +450,11 @@ static int cfctrl_recv(struct cflayer *layer, struct cfpkt *pkt)
2001 * to network format long and copy it out...
2002 */
2003 /* Fifosize KB */
2004 - cfpkt_extr_head(pkt, &tmp16, 2);
2005 linkparam.u.utility.fifosize_kb =
2006 - le16_to_cpu(tmp16);
2007 + cfpkt_extr_head_u16(pkt);
2008 /* Fifosize bufs */
2009 - cfpkt_extr_head(pkt, &tmp16, 2);
2010 linkparam.u.utility.fifosize_bufs =
2011 - le16_to_cpu(tmp16);
2012 + cfpkt_extr_head_u16(pkt);
2013 /* name */
2014 cp = (u8 *) linkparam.u.utility.name;
2015 caif_assert(sizeof(linkparam.u.utility.name)
2016 @@ -468,24 +462,24 @@ static int cfctrl_recv(struct cflayer *layer, struct cfpkt *pkt)
2017 for (i = 0;
2018 i < UTILITY_NAME_LENGTH
2019 && cfpkt_more(pkt); i++) {
2020 - cfpkt_extr_head(pkt, &tmp, 1);
2021 + tmp = cfpkt_extr_head_u8(pkt);
2022 *cp++ = tmp;
2023 }
2024 /* Length */
2025 - cfpkt_extr_head(pkt, &len, 1);
2026 + len = cfpkt_extr_head_u8(pkt);
2027 linkparam.u.utility.paramlen = len;
2028 /* Param Data */
2029 cp = linkparam.u.utility.params;
2030 while (cfpkt_more(pkt) && len--) {
2031 - cfpkt_extr_head(pkt, &tmp, 1);
2032 + tmp = cfpkt_extr_head_u8(pkt);
2033 *cp++ = tmp;
2034 }
2035 if (CFCTRL_ERR_BIT & cmdrsp)
2036 break;
2037 /* Link ID */
2038 - cfpkt_extr_head(pkt, &linkid, 1);
2039 + linkid = cfpkt_extr_head_u8(pkt);
2040 /* Length */
2041 - cfpkt_extr_head(pkt, &len, 1);
2042 + len = cfpkt_extr_head_u8(pkt);
2043 /* Param Data */
2044 cfpkt_extr_head(pkt, &param, len);
2045 break;
2046 @@ -522,7 +516,7 @@ static int cfctrl_recv(struct cflayer *layer, struct cfpkt *pkt)
2047 }
2048 break;
2049 case CFCTRL_CMD_LINK_DESTROY:
2050 - cfpkt_extr_head(pkt, &linkid, 1);
2051 + linkid = cfpkt_extr_head_u8(pkt);
2052 cfctrl->res.linkdestroy_rsp(cfctrl->serv.layer.up, linkid);
2053 break;
2054 case CFCTRL_CMD_LINK_ERR:
2055 diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
2056 index 100c86f1f547..7f1a85c6a614 100644
2057 --- a/net/ipv4/ip_output.c
2058 +++ b/net/ipv4/ip_output.c
2059 @@ -492,6 +492,7 @@ static void ip_copy_metadata(struct sk_buff *to, struct sk_buff *from)
2060 to->pkt_type = from->pkt_type;
2061 to->priority = from->priority;
2062 to->protocol = from->protocol;
2063 + to->skb_iif = from->skb_iif;
2064 skb_dst_drop(to);
2065 skb_dst_copy(to, from);
2066 to->dev = from->dev;
2067 diff --git a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c
2068 index b82e439804d1..8c2f9aedc2af 100644
2069 --- a/net/ipv6/ip6_flowlabel.c
2070 +++ b/net/ipv6/ip6_flowlabel.c
2071 @@ -94,15 +94,21 @@ static struct ip6_flowlabel *fl_lookup(struct net *net, __be32 label)
2072 return fl;
2073 }
2074
2075 +static void fl_free_rcu(struct rcu_head *head)
2076 +{
2077 + struct ip6_flowlabel *fl = container_of(head, struct ip6_flowlabel, rcu);
2078 +
2079 + if (fl->share == IPV6_FL_S_PROCESS)
2080 + put_pid(fl->owner.pid);
2081 + kfree(fl->opt);
2082 + kfree(fl);
2083 +}
2084 +
2085
2086 static void fl_free(struct ip6_flowlabel *fl)
2087 {
2088 - if (fl) {
2089 - if (fl->share == IPV6_FL_S_PROCESS)
2090 - put_pid(fl->owner.pid);
2091 - kfree(fl->opt);
2092 - kfree_rcu(fl, rcu);
2093 - }
2094 + if (fl)
2095 + call_rcu(&fl->rcu, fl_free_rcu);
2096 }
2097
2098 static void fl_release(struct ip6_flowlabel *fl)
2099 @@ -634,9 +640,9 @@ recheck:
2100 if (fl1->share == IPV6_FL_S_EXCL ||
2101 fl1->share != fl->share ||
2102 ((fl1->share == IPV6_FL_S_PROCESS) &&
2103 - (fl1->owner.pid == fl->owner.pid)) ||
2104 + (fl1->owner.pid != fl->owner.pid)) ||
2105 ((fl1->share == IPV6_FL_S_USER) &&
2106 - uid_eq(fl1->owner.uid, fl->owner.uid)))
2107 + !uid_eq(fl1->owner.uid, fl->owner.uid)))
2108 goto release;
2109
2110 err = -ENOMEM;
2111 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
2112 index 522d4ca715c9..ea37160d5ae2 100644
2113 --- a/net/packet/af_packet.c
2114 +++ b/net/packet/af_packet.c
2115 @@ -2638,8 +2638,8 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
2116 void *ph;
2117 DECLARE_SOCKADDR(struct sockaddr_ll *, saddr, msg->msg_name);
2118 bool need_wait = !(msg->msg_flags & MSG_DONTWAIT);
2119 + unsigned char *addr = NULL;
2120 int tp_len, size_max;
2121 - unsigned char *addr;
2122 void *data;
2123 int len_sum = 0;
2124 int status = TP_STATUS_AVAILABLE;
2125 @@ -2650,7 +2650,6 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
2126 if (likely(saddr == NULL)) {
2127 dev = packet_cached_dev_get(po);
2128 proto = po->num;
2129 - addr = NULL;
2130 } else {
2131 err = -EINVAL;
2132 if (msg->msg_namelen < sizeof(struct sockaddr_ll))
2133 @@ -2660,10 +2659,13 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
2134 sll_addr)))
2135 goto out;
2136 proto = saddr->sll_protocol;
2137 - addr = saddr->sll_halen ? saddr->sll_addr : NULL;
2138 dev = dev_get_by_index(sock_net(&po->sk), saddr->sll_ifindex);
2139 - if (addr && dev && saddr->sll_halen < dev->addr_len)
2140 - goto out_put;
2141 + if (po->sk.sk_socket->type == SOCK_DGRAM) {
2142 + if (dev && msg->msg_namelen < dev->addr_len +
2143 + offsetof(struct sockaddr_ll, sll_addr))
2144 + goto out_put;
2145 + addr = saddr->sll_addr;
2146 + }
2147 }
2148
2149 err = -ENXIO;
2150 @@ -2834,7 +2836,7 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
2151 struct sk_buff *skb;
2152 struct net_device *dev;
2153 __be16 proto;
2154 - unsigned char *addr;
2155 + unsigned char *addr = NULL;
2156 int err, reserve = 0;
2157 struct sockcm_cookie sockc;
2158 struct virtio_net_hdr vnet_hdr = { 0 };
2159 @@ -2851,7 +2853,6 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
2160 if (likely(saddr == NULL)) {
2161 dev = packet_cached_dev_get(po);
2162 proto = po->num;
2163 - addr = NULL;
2164 } else {
2165 err = -EINVAL;
2166 if (msg->msg_namelen < sizeof(struct sockaddr_ll))
2167 @@ -2859,10 +2860,13 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
2168 if (msg->msg_namelen < (saddr->sll_halen + offsetof(struct sockaddr_ll, sll_addr)))
2169 goto out;
2170 proto = saddr->sll_protocol;
2171 - addr = saddr->sll_halen ? saddr->sll_addr : NULL;
2172 dev = dev_get_by_index(sock_net(sk), saddr->sll_ifindex);
2173 - if (addr && dev && saddr->sll_halen < dev->addr_len)
2174 - goto out_unlock;
2175 + if (sock->type == SOCK_DGRAM) {
2176 + if (dev && msg->msg_namelen < dev->addr_len +
2177 + offsetof(struct sockaddr_ll, sll_addr))
2178 + goto out_unlock;
2179 + addr = saddr->sll_addr;
2180 + }
2181 }
2182
2183 err = -ENXIO;
2184 diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
2185 index 9bd6f97ccd21..772df402c495 100644
2186 --- a/security/selinux/hooks.c
2187 +++ b/security/selinux/hooks.c
2188 @@ -467,21 +467,43 @@ static int may_context_mount_inode_relabel(u32 sid,
2189 return rc;
2190 }
2191
2192 -static int selinux_is_sblabel_mnt(struct super_block *sb)
2193 +static int selinux_is_genfs_special_handling(struct super_block *sb)
2194 {
2195 - struct superblock_security_struct *sbsec = sb->s_security;
2196 -
2197 - return sbsec->behavior == SECURITY_FS_USE_XATTR ||
2198 - sbsec->behavior == SECURITY_FS_USE_TRANS ||
2199 - sbsec->behavior == SECURITY_FS_USE_TASK ||
2200 - sbsec->behavior == SECURITY_FS_USE_NATIVE ||
2201 - /* Special handling. Genfs but also in-core setxattr handler */
2202 - !strcmp(sb->s_type->name, "sysfs") ||
2203 + /* Special handling. Genfs but also in-core setxattr handler */
2204 + return !strcmp(sb->s_type->name, "sysfs") ||
2205 !strcmp(sb->s_type->name, "pstore") ||
2206 !strcmp(sb->s_type->name, "debugfs") ||
2207 !strcmp(sb->s_type->name, "rootfs");
2208 }
2209
2210 +static int selinux_is_sblabel_mnt(struct super_block *sb)
2211 +{
2212 + struct superblock_security_struct *sbsec = sb->s_security;
2213 +
2214 + /*
2215 + * IMPORTANT: Double-check logic in this function when adding a new
2216 + * SECURITY_FS_USE_* definition!
2217 + */
2218 + BUILD_BUG_ON(SECURITY_FS_USE_MAX != 7);
2219 +
2220 + switch (sbsec->behavior) {
2221 + case SECURITY_FS_USE_XATTR:
2222 + case SECURITY_FS_USE_TRANS:
2223 + case SECURITY_FS_USE_TASK:
2224 + case SECURITY_FS_USE_NATIVE:
2225 + return 1;
2226 +
2227 + case SECURITY_FS_USE_GENFS:
2228 + return selinux_is_genfs_special_handling(sb);
2229 +
2230 + /* Never allow relabeling on context mounts */
2231 + case SECURITY_FS_USE_MNTPOINT:
2232 + case SECURITY_FS_USE_NONE:
2233 + default:
2234 + return 0;
2235 + }
2236 +}
2237 +
2238 static int sb_finish_set_opts(struct super_block *sb)
2239 {
2240 struct superblock_security_struct *sbsec = sb->s_security;
2241 diff --git a/sound/usb/line6/driver.c b/sound/usb/line6/driver.c
2242 index 58d624938a9f..09189249d0d1 100644
2243 --- a/sound/usb/line6/driver.c
2244 +++ b/sound/usb/line6/driver.c
2245 @@ -337,12 +337,16 @@ int line6_read_data(struct usb_line6 *line6, unsigned address, void *data,
2246 {
2247 struct usb_device *usbdev = line6->usbdev;
2248 int ret;
2249 - unsigned char len;
2250 + unsigned char *len;
2251 unsigned count;
2252
2253 if (address > 0xffff || datalen > 0xff)
2254 return -EINVAL;
2255
2256 + len = kmalloc(sizeof(*len), GFP_KERNEL);
2257 + if (!len)
2258 + return -ENOMEM;
2259 +
2260 /* query the serial number: */
2261 ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), 0x67,
2262 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
2263 @@ -351,7 +355,7 @@ int line6_read_data(struct usb_line6 *line6, unsigned address, void *data,
2264
2265 if (ret < 0) {
2266 dev_err(line6->ifcdev, "read request failed (error %d)\n", ret);
2267 - return ret;
2268 + goto exit;
2269 }
2270
2271 /* Wait for data length. We'll get 0xff until length arrives. */
2272 @@ -361,28 +365,29 @@ int line6_read_data(struct usb_line6 *line6, unsigned address, void *data,
2273 ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 0x67,
2274 USB_TYPE_VENDOR | USB_RECIP_DEVICE |
2275 USB_DIR_IN,
2276 - 0x0012, 0x0000, &len, 1,
2277 + 0x0012, 0x0000, len, 1,
2278 LINE6_TIMEOUT * HZ);
2279 if (ret < 0) {
2280 dev_err(line6->ifcdev,
2281 "receive length failed (error %d)\n", ret);
2282 - return ret;
2283 + goto exit;
2284 }
2285
2286 - if (len != 0xff)
2287 + if (*len != 0xff)
2288 break;
2289 }
2290
2291 - if (len == 0xff) {
2292 + ret = -EIO;
2293 + if (*len == 0xff) {
2294 dev_err(line6->ifcdev, "read failed after %d retries\n",
2295 count);
2296 - return -EIO;
2297 - } else if (len != datalen) {
2298 + goto exit;
2299 + } else if (*len != datalen) {
2300 /* should be equal or something went wrong */
2301 dev_err(line6->ifcdev,
2302 "length mismatch (expected %d, got %d)\n",
2303 - (int)datalen, (int)len);
2304 - return -EIO;
2305 + (int)datalen, (int)*len);
2306 + goto exit;
2307 }
2308
2309 /* receive the result: */
2310 @@ -391,12 +396,12 @@ int line6_read_data(struct usb_line6 *line6, unsigned address, void *data,
2311 0x0013, 0x0000, data, datalen,
2312 LINE6_TIMEOUT * HZ);
2313
2314 - if (ret < 0) {
2315 + if (ret < 0)
2316 dev_err(line6->ifcdev, "read failed (error %d)\n", ret);
2317 - return ret;
2318 - }
2319
2320 - return 0;
2321 +exit:
2322 + kfree(len);
2323 + return ret;
2324 }
2325 EXPORT_SYMBOL_GPL(line6_read_data);
2326
2327 @@ -408,12 +413,16 @@ int line6_write_data(struct usb_line6 *line6, unsigned address, void *data,
2328 {
2329 struct usb_device *usbdev = line6->usbdev;
2330 int ret;
2331 - unsigned char status;
2332 + unsigned char *status;
2333 int count;
2334
2335 if (address > 0xffff || datalen > 0xffff)
2336 return -EINVAL;
2337
2338 + status = kmalloc(sizeof(*status), GFP_KERNEL);
2339 + if (!status)
2340 + return -ENOMEM;
2341 +
2342 ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), 0x67,
2343 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
2344 0x0022, address, data, datalen,
2345 @@ -422,7 +431,7 @@ int line6_write_data(struct usb_line6 *line6, unsigned address, void *data,
2346 if (ret < 0) {
2347 dev_err(line6->ifcdev,
2348 "write request failed (error %d)\n", ret);
2349 - return ret;
2350 + goto exit;
2351 }
2352
2353 for (count = 0; count < LINE6_READ_WRITE_MAX_RETRIES; count++) {
2354 @@ -433,28 +442,29 @@ int line6_write_data(struct usb_line6 *line6, unsigned address, void *data,
2355 USB_TYPE_VENDOR | USB_RECIP_DEVICE |
2356 USB_DIR_IN,
2357 0x0012, 0x0000,
2358 - &status, 1, LINE6_TIMEOUT * HZ);
2359 + status, 1, LINE6_TIMEOUT * HZ);
2360
2361 if (ret < 0) {
2362 dev_err(line6->ifcdev,
2363 "receiving status failed (error %d)\n", ret);
2364 - return ret;
2365 + goto exit;
2366 }
2367
2368 - if (status != 0xff)
2369 + if (*status != 0xff)
2370 break;
2371 }
2372
2373 - if (status == 0xff) {
2374 + if (*status == 0xff) {
2375 dev_err(line6->ifcdev, "write failed after %d retries\n",
2376 count);
2377 - return -EIO;
2378 - } else if (status != 0) {
2379 + ret = -EIO;
2380 + } else if (*status != 0) {
2381 dev_err(line6->ifcdev, "write failed (error %d)\n", ret);
2382 - return -EIO;
2383 + ret = -EIO;
2384 }
2385 -
2386 - return 0;
2387 +exit:
2388 + kfree(status);
2389 + return ret;
2390 }
2391 EXPORT_SYMBOL_GPL(line6_write_data);
2392
2393 diff --git a/sound/usb/line6/podhd.c b/sound/usb/line6/podhd.c
2394 index 5ab9e0c89211..c0b6733c0623 100644
2395 --- a/sound/usb/line6/podhd.c
2396 +++ b/sound/usb/line6/podhd.c
2397 @@ -221,28 +221,32 @@ static void podhd_startup_start_workqueue(unsigned long data)
2398 static int podhd_dev_start(struct usb_line6_podhd *pod)
2399 {
2400 int ret;
2401 - u8 init_bytes[8];
2402 + u8 *init_bytes;
2403 int i;
2404 struct usb_device *usbdev = pod->line6.usbdev;
2405
2406 + init_bytes = kmalloc(8, GFP_KERNEL);
2407 + if (!init_bytes)
2408 + return -ENOMEM;
2409 +
2410 ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0),
2411 0x67, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
2412 0x11, 0,
2413 NULL, 0, LINE6_TIMEOUT * HZ);
2414 if (ret < 0) {
2415 dev_err(pod->line6.ifcdev, "read request failed (error %d)\n", ret);
2416 - return ret;
2417 + goto exit;
2418 }
2419
2420 /* NOTE: looks like some kind of ping message */
2421 ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 0x67,
2422 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
2423 0x11, 0x0,
2424 - &init_bytes, 3, LINE6_TIMEOUT * HZ);
2425 + init_bytes, 3, LINE6_TIMEOUT * HZ);
2426 if (ret < 0) {
2427 dev_err(pod->line6.ifcdev,
2428 "receive length failed (error %d)\n", ret);
2429 - return ret;
2430 + goto exit;
2431 }
2432
2433 pod->firmware_version =
2434 @@ -251,7 +255,7 @@ static int podhd_dev_start(struct usb_line6_podhd *pod)
2435 for (i = 0; i <= 16; i++) {
2436 ret = line6_read_data(&pod->line6, 0xf000 + 0x08 * i, init_bytes, 8);
2437 if (ret < 0)
2438 - return ret;
2439 + goto exit;
2440 }
2441
2442 ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0),
2443 @@ -259,10 +263,9 @@ static int podhd_dev_start(struct usb_line6_podhd *pod)
2444 USB_TYPE_STANDARD | USB_RECIP_DEVICE | USB_DIR_OUT,
2445 1, 0,
2446 NULL, 0, LINE6_TIMEOUT * HZ);
2447 - if (ret < 0)
2448 - return ret;
2449 -
2450 - return 0;
2451 +exit:
2452 + kfree(init_bytes);
2453 + return ret;
2454 }
2455
2456 static void podhd_startup_workqueue(struct work_struct *work)
2457 diff --git a/sound/usb/line6/toneport.c b/sound/usb/line6/toneport.c
2458 index 8e22f430d700..d3871d99ade4 100644
2459 --- a/sound/usb/line6/toneport.c
2460 +++ b/sound/usb/line6/toneport.c
2461 @@ -365,15 +365,20 @@ static bool toneport_has_source_select(struct usb_line6_toneport *toneport)
2462 /*
2463 Setup Toneport device.
2464 */
2465 -static void toneport_setup(struct usb_line6_toneport *toneport)
2466 +static int toneport_setup(struct usb_line6_toneport *toneport)
2467 {
2468 - int ticks;
2469 + int *ticks;
2470 struct usb_line6 *line6 = &toneport->line6;
2471 struct usb_device *usbdev = line6->usbdev;
2472
2473 + ticks = kmalloc(sizeof(*ticks), GFP_KERNEL);
2474 + if (!ticks)
2475 + return -ENOMEM;
2476 +
2477 /* sync time on device with host: */
2478 - ticks = (int)get_seconds();
2479 - line6_write_data(line6, 0x80c6, &ticks, 4);
2480 + *ticks = (int)get_seconds();
2481 + line6_write_data(line6, 0x80c6, ticks, 4);
2482 + kfree(ticks);
2483
2484 /* enable device: */
2485 toneport_send_cmd(usbdev, 0x0301, 0x0000);
2486 @@ -388,6 +393,7 @@ static void toneport_setup(struct usb_line6_toneport *toneport)
2487 toneport_update_led(toneport);
2488
2489 mod_timer(&toneport->timer, jiffies + TONEPORT_PCM_DELAY * HZ);
2490 + return 0;
2491 }
2492
2493 /*
2494 @@ -451,7 +457,9 @@ static int toneport_init(struct usb_line6 *line6,
2495 return err;
2496 }
2497
2498 - toneport_setup(toneport);
2499 + err = toneport_setup(toneport);
2500 + if (err)
2501 + return err;
2502
2503 /* register audio system: */
2504 return snd_card_register(line6->card);
2505 @@ -463,7 +471,11 @@ static int toneport_init(struct usb_line6 *line6,
2506 */
2507 static int toneport_reset_resume(struct usb_interface *interface)
2508 {
2509 - toneport_setup(usb_get_intfdata(interface));
2510 + int err;
2511 +
2512 + err = toneport_setup(usb_get_intfdata(interface));
2513 + if (err)
2514 + return err;
2515 return line6_resume(interface);
2516 }
2517 #endif