Magellan Linux

Contents of /trunk/kernel-alx/patches-5.4/0189-5.4.90-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3637 - (show annotations) (download)
Mon Oct 24 12:40:44 2022 UTC (18 months, 1 week ago) by niro
File size: 57969 byte(s)
-add missing
1 diff --git a/Makefile b/Makefile
2 index 95848875110ef..5c9d680b7ce51 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 5
8 PATCHLEVEL = 4
9 -SUBLEVEL = 89
10 +SUBLEVEL = 90
11 EXTRAVERSION =
12 NAME = Kleptomaniac Octopus
13
14 diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c
15 index 3acb4192918df..f85a0fd6aca5c 100644
16 --- a/arch/arm/mach-omap2/omap_device.c
17 +++ b/arch/arm/mach-omap2/omap_device.c
18 @@ -234,10 +234,12 @@ static int _omap_device_notifier_call(struct notifier_block *nb,
19 break;
20 case BUS_NOTIFY_BIND_DRIVER:
21 od = to_omap_device(pdev);
22 - if (od && (od->_state == OMAP_DEVICE_STATE_ENABLED) &&
23 - pm_runtime_status_suspended(dev)) {
24 + if (od) {
25 od->_driver_status = BUS_NOTIFY_BIND_DRIVER;
26 - pm_runtime_set_active(dev);
27 + if (od->_state == OMAP_DEVICE_STATE_ENABLED &&
28 + pm_runtime_status_suspended(dev)) {
29 + pm_runtime_set_active(dev);
30 + }
31 }
32 break;
33 case BUS_NOTIFY_ADD_DEVICE:
34 diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c
35 index 6478635ff2142..98a177dd1f89f 100644
36 --- a/arch/arm64/kvm/sys_regs.c
37 +++ b/arch/arm64/kvm/sys_regs.c
38 @@ -625,6 +625,10 @@ static void reset_pmcr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r)
39 {
40 u64 pmcr, val;
41
42 + /* No PMU available, PMCR_EL0 may UNDEF... */
43 + if (!kvm_arm_support_pmu_v3())
44 + return;
45 +
46 pmcr = read_sysreg(pmcr_el0);
47 /*
48 * Writable bits of PMCR_EL0 (ARMV8_PMU_PMCR_MASK) are reset to UNKNOWN
49 diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
50 index 390edb7638265..bde3e0f85425f 100644
51 --- a/arch/x86/entry/entry_32.S
52 +++ b/arch/x86/entry/entry_32.S
53 @@ -869,9 +869,10 @@ GLOBAL(__begin_SYSENTER_singlestep_region)
54 * Xen doesn't set %esp to be precisely what the normal SYSENTER
55 * entry point expects, so fix it up before using the normal path.
56 */
57 -ENTRY(xen_sysenter_target)
58 +SYM_CODE_START(xen_sysenter_target)
59 addl $5*4, %esp /* remove xen-provided frame */
60 jmp .Lsysenter_past_esp
61 +SYM_CODE_END(xen_sysenter_target)
62 #endif
63
64 /*
65 diff --git a/arch/x86/kernel/acpi/wakeup_32.S b/arch/x86/kernel/acpi/wakeup_32.S
66 index e95e95960156b..5b076cb79f5fb 100644
67 --- a/arch/x86/kernel/acpi/wakeup_32.S
68 +++ b/arch/x86/kernel/acpi/wakeup_32.S
69 @@ -9,8 +9,7 @@
70 .code32
71 ALIGN
72
73 -ENTRY(wakeup_pmode_return)
74 -wakeup_pmode_return:
75 +SYM_CODE_START(wakeup_pmode_return)
76 movw $__KERNEL_DS, %ax
77 movw %ax, %ss
78 movw %ax, %fs
79 @@ -39,6 +38,7 @@ wakeup_pmode_return:
80 # jump to place where we left off
81 movl saved_eip, %eax
82 jmp *%eax
83 +SYM_CODE_END(wakeup_pmode_return)
84
85 bogus_magic:
86 jmp bogus_magic
87 @@ -72,7 +72,7 @@ restore_registers:
88 popfl
89 ret
90
91 -ENTRY(do_suspend_lowlevel)
92 +SYM_CODE_START(do_suspend_lowlevel)
93 call save_processor_state
94 call save_registers
95 pushl $3
96 @@ -87,6 +87,7 @@ ret_point:
97 call restore_registers
98 call restore_processor_state
99 ret
100 +SYM_CODE_END(do_suspend_lowlevel)
101
102 .data
103 ALIGN
104 diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
105 index 830ccc396e26d..28f786289fce4 100644
106 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
107 +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
108 @@ -525,85 +525,70 @@ static void rdtgroup_remove(struct rdtgroup *rdtgrp)
109 kfree(rdtgrp);
110 }
111
112 -struct task_move_callback {
113 - struct callback_head work;
114 - struct rdtgroup *rdtgrp;
115 -};
116 -
117 -static void move_myself(struct callback_head *head)
118 +static void _update_task_closid_rmid(void *task)
119 {
120 - struct task_move_callback *callback;
121 - struct rdtgroup *rdtgrp;
122 -
123 - callback = container_of(head, struct task_move_callback, work);
124 - rdtgrp = callback->rdtgrp;
125 -
126 /*
127 - * If resource group was deleted before this task work callback
128 - * was invoked, then assign the task to root group and free the
129 - * resource group.
130 + * If the task is still current on this CPU, update PQR_ASSOC MSR.
131 + * Otherwise, the MSR is updated when the task is scheduled in.
132 */
133 - if (atomic_dec_and_test(&rdtgrp->waitcount) &&
134 - (rdtgrp->flags & RDT_DELETED)) {
135 - current->closid = 0;
136 - current->rmid = 0;
137 - rdtgroup_remove(rdtgrp);
138 - }
139 -
140 - preempt_disable();
141 - /* update PQR_ASSOC MSR to make resource group go into effect */
142 - resctrl_sched_in();
143 - preempt_enable();
144 + if (task == current)
145 + resctrl_sched_in();
146 +}
147
148 - kfree(callback);
149 +static void update_task_closid_rmid(struct task_struct *t)
150 +{
151 + if (IS_ENABLED(CONFIG_SMP) && task_curr(t))
152 + smp_call_function_single(task_cpu(t), _update_task_closid_rmid, t, 1);
153 + else
154 + _update_task_closid_rmid(t);
155 }
156
157 static int __rdtgroup_move_task(struct task_struct *tsk,
158 struct rdtgroup *rdtgrp)
159 {
160 - struct task_move_callback *callback;
161 - int ret;
162 -
163 - callback = kzalloc(sizeof(*callback), GFP_KERNEL);
164 - if (!callback)
165 - return -ENOMEM;
166 - callback->work.func = move_myself;
167 - callback->rdtgrp = rdtgrp;
168 + /* If the task is already in rdtgrp, no need to move the task. */
169 + if ((rdtgrp->type == RDTCTRL_GROUP && tsk->closid == rdtgrp->closid &&
170 + tsk->rmid == rdtgrp->mon.rmid) ||
171 + (rdtgrp->type == RDTMON_GROUP && tsk->rmid == rdtgrp->mon.rmid &&
172 + tsk->closid == rdtgrp->mon.parent->closid))
173 + return 0;
174
175 /*
176 - * Take a refcount, so rdtgrp cannot be freed before the
177 - * callback has been invoked.
178 + * Set the task's closid/rmid before the PQR_ASSOC MSR can be
179 + * updated by them.
180 + *
181 + * For ctrl_mon groups, move both closid and rmid.
182 + * For monitor groups, can move the tasks only from
183 + * their parent CTRL group.
184 */
185 - atomic_inc(&rdtgrp->waitcount);
186 - ret = task_work_add(tsk, &callback->work, true);
187 - if (ret) {
188 - /*
189 - * Task is exiting. Drop the refcount and free the callback.
190 - * No need to check the refcount as the group cannot be
191 - * deleted before the write function unlocks rdtgroup_mutex.
192 - */
193 - atomic_dec(&rdtgrp->waitcount);
194 - kfree(callback);
195 - rdt_last_cmd_puts("Task exited\n");
196 - } else {
197 - /*
198 - * For ctrl_mon groups move both closid and rmid.
199 - * For monitor groups, can move the tasks only from
200 - * their parent CTRL group.
201 - */
202 - if (rdtgrp->type == RDTCTRL_GROUP) {
203 - tsk->closid = rdtgrp->closid;
204 +
205 + if (rdtgrp->type == RDTCTRL_GROUP) {
206 + tsk->closid = rdtgrp->closid;
207 + tsk->rmid = rdtgrp->mon.rmid;
208 + } else if (rdtgrp->type == RDTMON_GROUP) {
209 + if (rdtgrp->mon.parent->closid == tsk->closid) {
210 tsk->rmid = rdtgrp->mon.rmid;
211 - } else if (rdtgrp->type == RDTMON_GROUP) {
212 - if (rdtgrp->mon.parent->closid == tsk->closid) {
213 - tsk->rmid = rdtgrp->mon.rmid;
214 - } else {
215 - rdt_last_cmd_puts("Can't move task to different control group\n");
216 - ret = -EINVAL;
217 - }
218 + } else {
219 + rdt_last_cmd_puts("Can't move task to different control group\n");
220 + return -EINVAL;
221 }
222 }
223 - return ret;
224 +
225 + /*
226 + * Ensure the task's closid and rmid are written before determining if
227 + * the task is current that will decide if it will be interrupted.
228 + */
229 + barrier();
230 +
231 + /*
232 + * By now, the task's closid and rmid are set. If the task is current
233 + * on a CPU, the PQR_ASSOC MSR needs to be updated to make the resource
234 + * group go into effect. If the task is not current, the MSR will be
235 + * updated when the task is scheduled in.
236 + */
237 + update_task_closid_rmid(tsk);
238 +
239 + return 0;
240 }
241
242 /**
243 diff --git a/arch/x86/kernel/ftrace_32.S b/arch/x86/kernel/ftrace_32.S
244 index 073aab525d800..2cc0303522c99 100644
245 --- a/arch/x86/kernel/ftrace_32.S
246 +++ b/arch/x86/kernel/ftrace_32.S
247 @@ -89,7 +89,7 @@ WEAK(ftrace_stub)
248 ret
249 END(ftrace_caller)
250
251 -ENTRY(ftrace_regs_caller)
252 +SYM_CODE_START(ftrace_regs_caller)
253 /*
254 * We're here from an mcount/fentry CALL, and the stack frame looks like:
255 *
256 @@ -163,6 +163,7 @@ GLOBAL(ftrace_regs_call)
257 popl %eax
258
259 jmp .Lftrace_ret
260 +SYM_CODE_END(ftrace_regs_caller)
261
262 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
263 ENTRY(ftrace_graph_caller)
264 diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
265 index 2e6a0676c1f43..11a5d5ade52ce 100644
266 --- a/arch/x86/kernel/head_32.S
267 +++ b/arch/x86/kernel/head_32.S
268 @@ -64,7 +64,7 @@ RESERVE_BRK(pagetables, INIT_MAP_SIZE)
269 * can.
270 */
271 __HEAD
272 -ENTRY(startup_32)
273 +SYM_CODE_START(startup_32)
274 movl pa(initial_stack),%ecx
275
276 /* test KEEP_SEGMENTS flag to see if the bootloader is asking
277 @@ -172,6 +172,7 @@ num_subarch_entries = (. - subarch_entries) / 4
278 #else
279 jmp .Ldefault_entry
280 #endif /* CONFIG_PARAVIRT */
281 +SYM_CODE_END(startup_32)
282
283 #ifdef CONFIG_HOTPLUG_CPU
284 /*
285 diff --git a/arch/x86/power/hibernate_asm_32.S b/arch/x86/power/hibernate_asm_32.S
286 index 6fe383002125f..a19ed3d231853 100644
287 --- a/arch/x86/power/hibernate_asm_32.S
288 +++ b/arch/x86/power/hibernate_asm_32.S
289 @@ -35,7 +35,7 @@ ENTRY(swsusp_arch_suspend)
290 ret
291 ENDPROC(swsusp_arch_suspend)
292
293 -ENTRY(restore_image)
294 +SYM_CODE_START(restore_image)
295 /* prepare to jump to the image kernel */
296 movl restore_jump_address, %ebx
297 movl restore_cr3, %ebp
298 @@ -45,9 +45,10 @@ ENTRY(restore_image)
299 /* jump to relocated restore code */
300 movl relocated_restore_code, %eax
301 jmpl *%eax
302 +SYM_CODE_END(restore_image)
303
304 /* code below has been relocated to a safe page */
305 -ENTRY(core_restore_code)
306 +SYM_CODE_START(core_restore_code)
307 movl temp_pgt, %eax
308 movl %eax, %cr3
309
310 @@ -77,6 +78,7 @@ copy_loop:
311
312 done:
313 jmpl *%ebx
314 +SYM_CODE_END(core_restore_code)
315
316 /* code below belongs to the image kernel */
317 .align PAGE_SIZE
318 diff --git a/arch/x86/realmode/rm/trampoline_32.S b/arch/x86/realmode/rm/trampoline_32.S
319 index 1868b158480d4..3a0ef0d577344 100644
320 --- a/arch/x86/realmode/rm/trampoline_32.S
321 +++ b/arch/x86/realmode/rm/trampoline_32.S
322 @@ -29,7 +29,7 @@
323 .code16
324
325 .balign PAGE_SIZE
326 -ENTRY(trampoline_start)
327 +SYM_CODE_START(trampoline_start)
328 wbinvd # Needed for NUMA-Q should be harmless for others
329
330 LJMPW_RM(1f)
331 @@ -54,11 +54,13 @@ ENTRY(trampoline_start)
332 lmsw %dx # into protected mode
333
334 ljmpl $__BOOT_CS, $pa_startup_32
335 +SYM_CODE_END(trampoline_start)
336
337 .section ".text32","ax"
338 .code32
339 -ENTRY(startup_32) # note: also used from wakeup_asm.S
340 +SYM_CODE_START(startup_32) # note: also used from wakeup_asm.S
341 jmp *%eax
342 +SYM_CODE_END(startup_32)
343
344 .bss
345 .balign 8
346 diff --git a/arch/x86/xen/xen-asm_32.S b/arch/x86/xen/xen-asm_32.S
347 index cd177772fe4d5..2712e91553063 100644
348 --- a/arch/x86/xen/xen-asm_32.S
349 +++ b/arch/x86/xen/xen-asm_32.S
350 @@ -56,7 +56,7 @@
351 _ASM_EXTABLE(1b,2b)
352 .endm
353
354 -ENTRY(xen_iret)
355 +SYM_CODE_START(xen_iret)
356 /* test eflags for special cases */
357 testl $(X86_EFLAGS_VM | XEN_EFLAGS_NMI), 8(%esp)
358 jnz hyper_iret
359 @@ -122,6 +122,7 @@ xen_iret_end_crit:
360 hyper_iret:
361 /* put this out of line since its very rarely used */
362 jmp hypercall_page + __HYPERVISOR_iret * 32
363 +SYM_CODE_END(xen_iret)
364
365 .globl xen_iret_start_crit, xen_iret_end_crit
366
367 @@ -152,7 +153,7 @@ hyper_iret:
368 * The only caveat is that if the outer eax hasn't been restored yet (i.e.
369 * it's still on stack), we need to restore its value here.
370 */
371 -ENTRY(xen_iret_crit_fixup)
372 +SYM_CODE_START(xen_iret_crit_fixup)
373 /*
374 * Paranoia: Make sure we're really coming from kernel space.
375 * One could imagine a case where userspace jumps into the
376 @@ -179,4 +180,4 @@ ENTRY(xen_iret_crit_fixup)
377
378 2:
379 ret
380 -END(xen_iret_crit_fixup)
381 +SYM_CODE_END(xen_iret_crit_fixup)
382 diff --git a/block/genhd.c b/block/genhd.c
383 index 26b31fcae217f..604f0a2cbc9a0 100644
384 --- a/block/genhd.c
385 +++ b/block/genhd.c
386 @@ -222,14 +222,17 @@ struct hd_struct *disk_part_iter_next(struct disk_part_iter *piter)
387 part = rcu_dereference(ptbl->part[piter->idx]);
388 if (!part)
389 continue;
390 + get_device(part_to_dev(part));
391 + piter->part = part;
392 if (!part_nr_sects_read(part) &&
393 !(piter->flags & DISK_PITER_INCL_EMPTY) &&
394 !(piter->flags & DISK_PITER_INCL_EMPTY_PART0 &&
395 - piter->idx == 0))
396 + piter->idx == 0)) {
397 + put_device(part_to_dev(part));
398 + piter->part = NULL;
399 continue;
400 + }
401
402 - get_device(part_to_dev(part));
403 - piter->part = part;
404 piter->idx += inc;
405 break;
406 }
407 diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c
408 index f58baff2be0af..398991381e9af 100644
409 --- a/drivers/base/regmap/regmap-debugfs.c
410 +++ b/drivers/base/regmap/regmap-debugfs.c
411 @@ -583,8 +583,12 @@ void regmap_debugfs_init(struct regmap *map, const char *name)
412 devname = dev_name(map->dev);
413
414 if (name) {
415 - map->debugfs_name = kasprintf(GFP_KERNEL, "%s-%s",
416 + if (!map->debugfs_name) {
417 + map->debugfs_name = kasprintf(GFP_KERNEL, "%s-%s",
418 devname, name);
419 + if (!map->debugfs_name)
420 + return;
421 + }
422 name = map->debugfs_name;
423 } else {
424 name = devname;
425 @@ -592,9 +596,10 @@ void regmap_debugfs_init(struct regmap *map, const char *name)
426
427 if (!strcmp(name, "dummy")) {
428 kfree(map->debugfs_name);
429 -
430 map->debugfs_name = kasprintf(GFP_KERNEL, "dummy%d",
431 dummy_index);
432 + if (!map->debugfs_name)
433 + return;
434 name = map->debugfs_name;
435 dummy_index++;
436 }
437 diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
438 index 1bb8ec5753527..0fc27ac14f29c 100644
439 --- a/drivers/block/Kconfig
440 +++ b/drivers/block/Kconfig
441 @@ -461,6 +461,7 @@ config BLK_DEV_RBD
442 config BLK_DEV_RSXX
443 tristate "IBM Flash Adapter 900GB Full Height PCIe Device Driver"
444 depends on PCI
445 + select CRC32
446 help
447 Device driver for IBM's high speed PCIe SSD
448 storage device: Flash Adapter 900GB Full Height.
449 diff --git a/drivers/cpufreq/powernow-k8.c b/drivers/cpufreq/powernow-k8.c
450 index 2db2f1739e092..1b2ec3be59eb7 100644
451 --- a/drivers/cpufreq/powernow-k8.c
452 +++ b/drivers/cpufreq/powernow-k8.c
453 @@ -878,9 +878,9 @@ static int get_transition_latency(struct powernow_k8_data *data)
454
455 /* Take a frequency, and issue the fid/vid transition command */
456 static int transition_frequency_fidvid(struct powernow_k8_data *data,
457 - unsigned int index)
458 + unsigned int index,
459 + struct cpufreq_policy *policy)
460 {
461 - struct cpufreq_policy *policy;
462 u32 fid = 0;
463 u32 vid = 0;
464 int res;
465 @@ -912,9 +912,6 @@ static int transition_frequency_fidvid(struct powernow_k8_data *data,
466 freqs.old = find_khz_freq_from_fid(data->currfid);
467 freqs.new = find_khz_freq_from_fid(fid);
468
469 - policy = cpufreq_cpu_get(smp_processor_id());
470 - cpufreq_cpu_put(policy);
471 -
472 cpufreq_freq_transition_begin(policy, &freqs);
473 res = transition_fid_vid(data, fid, vid);
474 cpufreq_freq_transition_end(policy, &freqs, res);
475 @@ -969,7 +966,7 @@ static long powernowk8_target_fn(void *arg)
476
477 powernow_k8_acpi_pst_values(data, newstate);
478
479 - ret = transition_frequency_fidvid(data, newstate);
480 + ret = transition_frequency_fidvid(data, newstate, pol);
481
482 if (ret) {
483 pr_err("transition frequency failed\n");
484 diff --git a/drivers/crypto/chelsio/chtls/chtls_cm.c b/drivers/crypto/chelsio/chtls/chtls_cm.c
485 index f81a5e35d8fd1..eddc6d1bdb2d1 100644
486 --- a/drivers/crypto/chelsio/chtls/chtls_cm.c
487 +++ b/drivers/crypto/chelsio/chtls/chtls_cm.c
488 @@ -577,7 +577,7 @@ static void chtls_reset_synq(struct listen_ctx *listen_ctx)
489
490 while (!skb_queue_empty(&listen_ctx->synq)) {
491 struct chtls_sock *csk =
492 - container_of((struct synq *)__skb_dequeue
493 + container_of((struct synq *)skb_peek
494 (&listen_ctx->synq), struct chtls_sock, synq);
495 struct sock *child = csk->sk;
496
497 @@ -1021,6 +1021,7 @@ static struct sock *chtls_recv_sock(struct sock *lsk,
498 const struct cpl_pass_accept_req *req,
499 struct chtls_dev *cdev)
500 {
501 + struct adapter *adap = pci_get_drvdata(cdev->pdev);
502 struct inet_sock *newinet;
503 const struct iphdr *iph;
504 struct tls_context *ctx;
505 @@ -1030,9 +1031,10 @@ static struct sock *chtls_recv_sock(struct sock *lsk,
506 struct neighbour *n;
507 struct tcp_sock *tp;
508 struct sock *newsk;
509 + bool found = false;
510 u16 port_id;
511 int rxq_idx;
512 - int step;
513 + int step, i;
514
515 iph = (const struct iphdr *)network_hdr;
516 newsk = tcp_create_openreq_child(lsk, oreq, cdev->askb);
517 @@ -1044,7 +1046,7 @@ static struct sock *chtls_recv_sock(struct sock *lsk,
518 goto free_sk;
519
520 n = dst_neigh_lookup(dst, &iph->saddr);
521 - if (!n)
522 + if (!n || !n->dev)
523 goto free_sk;
524
525 ndev = n->dev;
526 @@ -1053,6 +1055,13 @@ static struct sock *chtls_recv_sock(struct sock *lsk,
527 if (is_vlan_dev(ndev))
528 ndev = vlan_dev_real_dev(ndev);
529
530 + for_each_port(adap, i)
531 + if (cdev->ports[i] == ndev)
532 + found = true;
533 +
534 + if (!found)
535 + goto free_dst;
536 +
537 port_id = cxgb4_port_idx(ndev);
538
539 csk = chtls_sock_create(cdev);
540 @@ -1108,6 +1117,7 @@ static struct sock *chtls_recv_sock(struct sock *lsk,
541 free_csk:
542 chtls_sock_release(&csk->kref);
543 free_dst:
544 + neigh_release(n);
545 dst_release(dst);
546 free_sk:
547 inet_csk_prepare_forced_close(newsk);
548 @@ -1443,6 +1453,11 @@ static int chtls_pass_establish(struct chtls_dev *cdev, struct sk_buff *skb)
549 sk_wake_async(sk, 0, POLL_OUT);
550
551 data = lookup_stid(cdev->tids, stid);
552 + if (!data) {
553 + /* listening server close */
554 + kfree_skb(skb);
555 + goto unlock;
556 + }
557 lsk = ((struct listen_ctx *)data)->lsk;
558
559 bh_lock_sock(lsk);
560 @@ -1828,39 +1843,6 @@ static void send_defer_abort_rpl(struct chtls_dev *cdev, struct sk_buff *skb)
561 kfree_skb(skb);
562 }
563
564 -static void send_abort_rpl(struct sock *sk, struct sk_buff *skb,
565 - struct chtls_dev *cdev, int status, int queue)
566 -{
567 - struct cpl_abort_req_rss *req = cplhdr(skb);
568 - struct sk_buff *reply_skb;
569 - struct chtls_sock *csk;
570 -
571 - csk = rcu_dereference_sk_user_data(sk);
572 -
573 - reply_skb = alloc_skb(sizeof(struct cpl_abort_rpl),
574 - GFP_KERNEL);
575 -
576 - if (!reply_skb) {
577 - req->status = (queue << 1);
578 - send_defer_abort_rpl(cdev, skb);
579 - return;
580 - }
581 -
582 - set_abort_rpl_wr(reply_skb, GET_TID(req), status);
583 - kfree_skb(skb);
584 -
585 - set_wr_txq(reply_skb, CPL_PRIORITY_DATA, queue);
586 - if (csk_conn_inline(csk)) {
587 - struct l2t_entry *e = csk->l2t_entry;
588 -
589 - if (e && sk->sk_state != TCP_SYN_RECV) {
590 - cxgb4_l2t_send(csk->egress_dev, reply_skb, e);
591 - return;
592 - }
593 - }
594 - cxgb4_ofld_send(cdev->lldi->ports[0], reply_skb);
595 -}
596 -
597 /*
598 * Add an skb to the deferred skb queue for processing from process context.
599 */
600 @@ -1923,9 +1905,9 @@ static void bl_abort_syn_rcv(struct sock *lsk, struct sk_buff *skb)
601 queue = csk->txq_idx;
602
603 skb->sk = NULL;
604 + chtls_send_abort_rpl(child, skb, BLOG_SKB_CB(skb)->cdev,
605 + CPL_ABORT_NO_RST, queue);
606 do_abort_syn_rcv(child, lsk);
607 - send_abort_rpl(child, skb, BLOG_SKB_CB(skb)->cdev,
608 - CPL_ABORT_NO_RST, queue);
609 }
610
611 static int abort_syn_rcv(struct sock *sk, struct sk_buff *skb)
612 @@ -1955,8 +1937,8 @@ static int abort_syn_rcv(struct sock *sk, struct sk_buff *skb)
613 if (!sock_owned_by_user(psk)) {
614 int queue = csk->txq_idx;
615
616 + chtls_send_abort_rpl(sk, skb, cdev, CPL_ABORT_NO_RST, queue);
617 do_abort_syn_rcv(sk, psk);
618 - send_abort_rpl(sk, skb, cdev, CPL_ABORT_NO_RST, queue);
619 } else {
620 skb->sk = sk;
621 BLOG_SKB_CB(skb)->backlog_rcv = bl_abort_syn_rcv;
622 @@ -1974,9 +1956,6 @@ static void chtls_abort_req_rss(struct sock *sk, struct sk_buff *skb)
623 int queue = csk->txq_idx;
624
625 if (is_neg_adv(req->status)) {
626 - if (sk->sk_state == TCP_SYN_RECV)
627 - chtls_set_tcb_tflag(sk, 0, 0);
628 -
629 kfree_skb(skb);
630 return;
631 }
632 @@ -2002,12 +1981,11 @@ static void chtls_abort_req_rss(struct sock *sk, struct sk_buff *skb)
633
634 if (sk->sk_state == TCP_SYN_RECV && !abort_syn_rcv(sk, skb))
635 return;
636 -
637 - chtls_release_resources(sk);
638 - chtls_conn_done(sk);
639 }
640
641 chtls_send_abort_rpl(sk, skb, csk->cdev, rst_status, queue);
642 + chtls_release_resources(sk);
643 + chtls_conn_done(sk);
644 }
645
646 static void chtls_abort_rpl_rss(struct sock *sk, struct sk_buff *skb)
647 diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-edma-core.c
648 index 7f9a86c3c58ff..31577316f80bc 100644
649 --- a/drivers/dma/dw-edma/dw-edma-core.c
650 +++ b/drivers/dma/dw-edma/dw-edma-core.c
651 @@ -85,12 +85,12 @@ static struct dw_edma_chunk *dw_edma_alloc_chunk(struct dw_edma_desc *desc)
652
653 if (desc->chunk) {
654 /* Create and add new element into the linked list */
655 - desc->chunks_alloc++;
656 - list_add_tail(&chunk->list, &desc->chunk->list);
657 if (!dw_edma_alloc_burst(chunk)) {
658 kfree(chunk);
659 return NULL;
660 }
661 + desc->chunks_alloc++;
662 + list_add_tail(&chunk->list, &desc->chunk->list);
663 } else {
664 /* List head */
665 chunk->burst = NULL;
666 diff --git a/drivers/dma/mediatek/mtk-hsdma.c b/drivers/dma/mediatek/mtk-hsdma.c
667 index 4c58da7421432..04d89eec11e74 100644
668 --- a/drivers/dma/mediatek/mtk-hsdma.c
669 +++ b/drivers/dma/mediatek/mtk-hsdma.c
670 @@ -1007,6 +1007,7 @@ static int mtk_hsdma_probe(struct platform_device *pdev)
671 return 0;
672
673 err_free:
674 + mtk_hsdma_hw_deinit(hsdma);
675 of_dma_controller_free(pdev->dev.of_node);
676 err_unregister:
677 dma_async_device_unregister(dd);
678 diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c
679 index a6abfe702c5a3..1b5f3e9f43d70 100644
680 --- a/drivers/dma/xilinx/xilinx_dma.c
681 +++ b/drivers/dma/xilinx/xilinx_dma.c
682 @@ -2431,7 +2431,7 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev,
683 has_dre = false;
684
685 if (!has_dre)
686 - xdev->common.copy_align = fls(width - 1);
687 + xdev->common.copy_align = (enum dmaengine_alignment)fls(width - 1);
688
689 if (of_device_is_compatible(node, "xlnx,axi-vdma-mm2s-channel") ||
690 of_device_is_compatible(node, "xlnx,axi-dma-mm2s-channel") ||
691 @@ -2543,7 +2543,8 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev,
692 static int xilinx_dma_child_probe(struct xilinx_dma_device *xdev,
693 struct device_node *node)
694 {
695 - int ret, i, nr_channels = 1;
696 + int ret, i;
697 + u32 nr_channels = 1;
698
699 ret = of_property_read_u32(node, "dma-channels", &nr_channels);
700 if ((ret < 0) && xdev->mcdma)
701 @@ -2742,7 +2743,11 @@ static int xilinx_dma_probe(struct platform_device *pdev)
702 }
703
704 /* Register the DMA engine with the core */
705 - dma_async_device_register(&xdev->common);
706 + err = dma_async_device_register(&xdev->common);
707 + if (err) {
708 + dev_err(xdev->dev, "failed to register the dma device\n");
709 + goto error;
710 + }
711
712 err = of_dma_controller_register(node, of_dma_xilinx_xlate,
713 xdev);
714 diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
715 index cd71e71339446..9e852b4bbf92b 100644
716 --- a/drivers/hid/wacom_sys.c
717 +++ b/drivers/hid/wacom_sys.c
718 @@ -1270,6 +1270,37 @@ static int wacom_devm_sysfs_create_group(struct wacom *wacom,
719 group);
720 }
721
722 +static void wacom_devm_kfifo_release(struct device *dev, void *res)
723 +{
724 + struct kfifo_rec_ptr_2 *devres = res;
725 +
726 + kfifo_free(devres);
727 +}
728 +
729 +static int wacom_devm_kfifo_alloc(struct wacom *wacom)
730 +{
731 + struct wacom_wac *wacom_wac = &wacom->wacom_wac;
732 + struct kfifo_rec_ptr_2 *pen_fifo = &wacom_wac->pen_fifo;
733 + int error;
734 +
735 + pen_fifo = devres_alloc(wacom_devm_kfifo_release,
736 + sizeof(struct kfifo_rec_ptr_2),
737 + GFP_KERNEL);
738 +
739 + if (!pen_fifo)
740 + return -ENOMEM;
741 +
742 + error = kfifo_alloc(pen_fifo, WACOM_PKGLEN_MAX, GFP_KERNEL);
743 + if (error) {
744 + devres_free(pen_fifo);
745 + return error;
746 + }
747 +
748 + devres_add(&wacom->hdev->dev, pen_fifo);
749 +
750 + return 0;
751 +}
752 +
753 enum led_brightness wacom_leds_brightness_get(struct wacom_led *led)
754 {
755 struct wacom *wacom = led->wacom;
756 @@ -2724,7 +2755,7 @@ static int wacom_probe(struct hid_device *hdev,
757 if (features->check_for_hid_type && features->hid_type != hdev->type)
758 return -ENODEV;
759
760 - error = kfifo_alloc(&wacom_wac->pen_fifo, WACOM_PKGLEN_MAX, GFP_KERNEL);
761 + error = wacom_devm_kfifo_alloc(wacom);
762 if (error)
763 return error;
764
765 @@ -2786,8 +2817,6 @@ static void wacom_remove(struct hid_device *hdev)
766
767 if (wacom->wacom_wac.features.type != REMOTE)
768 wacom_release_resources(wacom);
769 -
770 - kfifo_free(&wacom_wac->pen_fifo);
771 }
772
773 #ifdef CONFIG_PM
774 diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
775 index c40eef4e7a985..2b6a4c1f188f4 100644
776 --- a/drivers/i2c/busses/i2c-i801.c
777 +++ b/drivers/i2c/busses/i2c-i801.c
778 @@ -1424,7 +1424,7 @@ static int i801_add_mux(struct i801_priv *priv)
779
780 /* Register GPIO descriptor lookup table */
781 lookup = devm_kzalloc(dev,
782 - struct_size(lookup, table, mux_config->n_gpios),
783 + struct_size(lookup, table, mux_config->n_gpios + 1),
784 GFP_KERNEL);
785 if (!lookup)
786 return -ENOMEM;
787 diff --git a/drivers/i2c/busses/i2c-sprd.c b/drivers/i2c/busses/i2c-sprd.c
788 index b432e7580458d..b2dc802864641 100644
789 --- a/drivers/i2c/busses/i2c-sprd.c
790 +++ b/drivers/i2c/busses/i2c-sprd.c
791 @@ -72,6 +72,8 @@
792
793 /* timeout (ms) for pm runtime autosuspend */
794 #define SPRD_I2C_PM_TIMEOUT 1000
795 +/* timeout (ms) for transfer message */
796 +#define I2C_XFER_TIMEOUT 1000
797
798 /* SPRD i2c data structure */
799 struct sprd_i2c {
800 @@ -244,6 +246,7 @@ static int sprd_i2c_handle_msg(struct i2c_adapter *i2c_adap,
801 struct i2c_msg *msg, bool is_last_msg)
802 {
803 struct sprd_i2c *i2c_dev = i2c_adap->algo_data;
804 + unsigned long time_left;
805
806 i2c_dev->msg = msg;
807 i2c_dev->buf = msg->buf;
808 @@ -273,7 +276,10 @@ static int sprd_i2c_handle_msg(struct i2c_adapter *i2c_adap,
809
810 sprd_i2c_opt_start(i2c_dev);
811
812 - wait_for_completion(&i2c_dev->complete);
813 + time_left = wait_for_completion_timeout(&i2c_dev->complete,
814 + msecs_to_jiffies(I2C_XFER_TIMEOUT));
815 + if (!time_left)
816 + return -ETIMEDOUT;
817
818 return i2c_dev->err;
819 }
820 diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
821 index b0f3da1976e4f..d1f2109012ed5 100644
822 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
823 +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
824 @@ -664,13 +664,29 @@ static irqreturn_t st_lsm6dsx_handler_irq(int irq, void *private)
825 static irqreturn_t st_lsm6dsx_handler_thread(int irq, void *private)
826 {
827 struct st_lsm6dsx_hw *hw = private;
828 - int count;
829 + int fifo_len = 0, len;
830
831 - mutex_lock(&hw->fifo_lock);
832 - count = hw->settings->fifo_ops.read_fifo(hw);
833 - mutex_unlock(&hw->fifo_lock);
834 + /*
835 + * If we are using edge IRQs, new samples can arrive while
836 + * processing current interrupt since there are no hw
837 + * guarantees the irq line stays "low" long enough to properly
838 + * detect the new interrupt. In this case the new sample will
839 + * be missed.
840 + * Polling FIFO status register allow us to read new
841 + * samples even if the interrupt arrives while processing
842 + * previous data and the timeslot where the line is "low" is
843 + * too short to be properly detected.
844 + */
845 + do {
846 + mutex_lock(&hw->fifo_lock);
847 + len = hw->settings->fifo_ops.read_fifo(hw);
848 + mutex_unlock(&hw->fifo_lock);
849 +
850 + if (len > 0)
851 + fifo_len += len;
852 + } while (len > 0);
853
854 - return count ? IRQ_HANDLED : IRQ_NONE;
855 + return fifo_len ? IRQ_HANDLED : IRQ_NONE;
856 }
857
858 static int st_lsm6dsx_buffer_preenable(struct iio_dev *iio_dev)
859 diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
860 index f697f3a1d46bc..5dcc81b1df623 100644
861 --- a/drivers/iommu/intel_irq_remapping.c
862 +++ b/drivers/iommu/intel_irq_remapping.c
863 @@ -1400,6 +1400,8 @@ static int intel_irq_remapping_alloc(struct irq_domain *domain,
864 irq_data = irq_domain_get_irq_data(domain, virq + i);
865 irq_cfg = irqd_cfg(irq_data);
866 if (!irq_data || !irq_cfg) {
867 + if (!i)
868 + kfree(data);
869 ret = -EINVAL;
870 goto out_free_data;
871 }
872 diff --git a/drivers/lightnvm/Kconfig b/drivers/lightnvm/Kconfig
873 index 8f39f9ba5c80e..4c2ce210c1237 100644
874 --- a/drivers/lightnvm/Kconfig
875 +++ b/drivers/lightnvm/Kconfig
876 @@ -19,6 +19,7 @@ if NVM
877
878 config NVM_PBLK
879 tristate "Physical Block Device Open-Channel SSD target"
880 + select CRC32
881 help
882 Allows an open-channel SSD to be exposed as a block device to the
883 host. The target assumes the device exposes raw flash and must be
884 diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig
885 index 17c166cc8482d..e4d944770ccaf 100644
886 --- a/drivers/net/can/Kconfig
887 +++ b/drivers/net/can/Kconfig
888 @@ -123,6 +123,7 @@ config CAN_JANZ_ICAN3
889 config CAN_KVASER_PCIEFD
890 depends on PCI
891 tristate "Kvaser PCIe FD cards"
892 + select CRC32
893 help
894 This is a driver for the Kvaser PCI Express CAN FD family.
895
896 diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
897 index d2bb9a87eff9a..8a842545e3f69 100644
898 --- a/drivers/net/can/m_can/m_can.c
899 +++ b/drivers/net/can/m_can/m_can.c
900 @@ -1868,8 +1868,6 @@ void m_can_class_unregister(struct m_can_classdev *m_can_dev)
901 {
902 unregister_candev(m_can_dev->net);
903
904 - m_can_clk_stop(m_can_dev);
905 -
906 free_candev(m_can_dev->net);
907 }
908 EXPORT_SYMBOL_GPL(m_can_class_unregister);
909 diff --git a/drivers/net/can/m_can/tcan4x5x.c b/drivers/net/can/m_can/tcan4x5x.c
910 index 681bb861de05e..1f8710b35c6d7 100644
911 --- a/drivers/net/can/m_can/tcan4x5x.c
912 +++ b/drivers/net/can/m_can/tcan4x5x.c
913 @@ -126,30 +126,6 @@ struct tcan4x5x_priv {
914 int reg_offset;
915 };
916
917 -static struct can_bittiming_const tcan4x5x_bittiming_const = {
918 - .name = DEVICE_NAME,
919 - .tseg1_min = 2,
920 - .tseg1_max = 31,
921 - .tseg2_min = 2,
922 - .tseg2_max = 16,
923 - .sjw_max = 16,
924 - .brp_min = 1,
925 - .brp_max = 32,
926 - .brp_inc = 1,
927 -};
928 -
929 -static struct can_bittiming_const tcan4x5x_data_bittiming_const = {
930 - .name = DEVICE_NAME,
931 - .tseg1_min = 1,
932 - .tseg1_max = 32,
933 - .tseg2_min = 1,
934 - .tseg2_max = 16,
935 - .sjw_max = 16,
936 - .brp_min = 1,
937 - .brp_max = 32,
938 - .brp_inc = 1,
939 -};
940 -
941 static void tcan4x5x_check_wake(struct tcan4x5x_priv *priv)
942 {
943 int wake_state = 0;
944 @@ -449,8 +425,6 @@ static int tcan4x5x_can_probe(struct spi_device *spi)
945 mcan_class->dev = &spi->dev;
946 mcan_class->ops = &tcan4x5x_ops;
947 mcan_class->is_peripheral = true;
948 - mcan_class->bit_timing = &tcan4x5x_bittiming_const;
949 - mcan_class->data_timing = &tcan4x5x_data_bittiming_const;
950 mcan_class->net->irq = spi->irq;
951
952 spi_set_drvdata(spi, priv);
953 diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
954 index 0d9b3fa7bd94e..ee1e67df1e7b4 100644
955 --- a/drivers/net/dsa/lantiq_gswip.c
956 +++ b/drivers/net/dsa/lantiq_gswip.c
957 @@ -1419,11 +1419,12 @@ static void gswip_phylink_validate(struct dsa_switch *ds, int port,
958 phylink_set(mask, Pause);
959 phylink_set(mask, Asym_Pause);
960
961 - /* With the exclusion of MII and Reverse MII, we support Gigabit,
962 - * including Half duplex
963 + /* With the exclusion of MII, Reverse MII and Reduced MII, we
964 + * support Gigabit, including Half duplex
965 */
966 if (state->interface != PHY_INTERFACE_MODE_MII &&
967 - state->interface != PHY_INTERFACE_MODE_REVMII) {
968 + state->interface != PHY_INTERFACE_MODE_REVMII &&
969 + state->interface != PHY_INTERFACE_MODE_RMII) {
970 phylink_set(mask, 1000baseT_Full);
971 phylink_set(mask, 1000baseT_Half);
972 }
973 diff --git a/drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h b/drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h
974 index f8a87f8ca9833..148e53812d89c 100644
975 --- a/drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h
976 +++ b/drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h
977 @@ -123,7 +123,7 @@ struct hclgevf_mbx_arq_ring {
978 #define hclge_mbx_ring_ptr_move_crq(crq) \
979 (crq->next_to_use = (crq->next_to_use + 1) % crq->desc_num)
980 #define hclge_mbx_tail_ptr_move_arq(arq) \
981 - (arq.tail = (arq.tail + 1) % HCLGE_MBX_MAX_ARQ_MSG_SIZE)
982 + (arq.tail = (arq.tail + 1) % HCLGE_MBX_MAX_ARQ_MSG_NUM)
983 #define hclge_mbx_head_ptr_move_arq(arq) \
984 - (arq.head = (arq.head + 1) % HCLGE_MBX_MAX_ARQ_MSG_SIZE)
985 + (arq.head = (arq.head + 1) % HCLGE_MBX_MAX_ARQ_MSG_NUM)
986 #endif
987 diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
988 index 6c3d13110993f..6887b7fda6e07 100644
989 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
990 +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
991 @@ -746,7 +746,8 @@ static int hclge_get_sset_count(struct hnae3_handle *handle, int stringset)
992 handle->flags |= HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK;
993 handle->flags |= HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK;
994
995 - if (hdev->hw.mac.phydev) {
996 + if (hdev->hw.mac.phydev && hdev->hw.mac.phydev->drv &&
997 + hdev->hw.mac.phydev->drv->set_loopback) {
998 count += 1;
999 handle->flags |= HNAE3_SUPPORT_PHY_LOOPBACK;
1000 }
1001 diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
1002 index 8827ab4b4932e..6988bbf2576f5 100644
1003 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
1004 +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
1005 @@ -4545,7 +4545,7 @@ static int mvpp2_port_init(struct mvpp2_port *port)
1006 struct mvpp2 *priv = port->priv;
1007 struct mvpp2_txq_pcpu *txq_pcpu;
1008 unsigned int thread;
1009 - int queue, err;
1010 + int queue, err, val;
1011
1012 /* Checks for hardware constraints */
1013 if (port->first_rxq + port->nrxqs >
1014 @@ -4559,6 +4559,18 @@ static int mvpp2_port_init(struct mvpp2_port *port)
1015 mvpp2_egress_disable(port);
1016 mvpp2_port_disable(port);
1017
1018 + if (mvpp2_is_xlg(port->phy_interface)) {
1019 + val = readl(port->base + MVPP22_XLG_CTRL0_REG);
1020 + val &= ~MVPP22_XLG_CTRL0_FORCE_LINK_PASS;
1021 + val |= MVPP22_XLG_CTRL0_FORCE_LINK_DOWN;
1022 + writel(val, port->base + MVPP22_XLG_CTRL0_REG);
1023 + } else {
1024 + val = readl(port->base + MVPP2_GMAC_AUTONEG_CONFIG);
1025 + val &= ~MVPP2_GMAC_FORCE_LINK_PASS;
1026 + val |= MVPP2_GMAC_FORCE_LINK_DOWN;
1027 + writel(val, port->base + MVPP2_GMAC_AUTONEG_CONFIG);
1028 + }
1029 +
1030 port->tx_time_coal = MVPP2_TXDONE_COAL_USEC;
1031
1032 port->txqs = devm_kcalloc(dev, port->ntxqs, sizeof(*port->txqs),
1033 diff --git a/drivers/net/ethernet/marvell/octeontx2/af/cgx.c b/drivers/net/ethernet/marvell/octeontx2/af/cgx.c
1034 index 6d55e3d0b7ea2..54e9f6dc24ea0 100644
1035 --- a/drivers/net/ethernet/marvell/octeontx2/af/cgx.c
1036 +++ b/drivers/net/ethernet/marvell/octeontx2/af/cgx.c
1037 @@ -725,8 +725,10 @@ static int cgx_lmac_init(struct cgx *cgx)
1038 if (!lmac)
1039 return -ENOMEM;
1040 lmac->name = kcalloc(1, sizeof("cgx_fwi_xxx_yyy"), GFP_KERNEL);
1041 - if (!lmac->name)
1042 - return -ENOMEM;
1043 + if (!lmac->name) {
1044 + err = -ENOMEM;
1045 + goto err_lmac_free;
1046 + }
1047 sprintf(lmac->name, "cgx_fwi_%d_%d", cgx->cgx_id, i);
1048 lmac->lmac_id = i;
1049 lmac->cgx = cgx;
1050 @@ -737,7 +739,7 @@ static int cgx_lmac_init(struct cgx *cgx)
1051 CGX_LMAC_FWI + i * 9),
1052 cgx_fwi_event_handler, 0, lmac->name, lmac);
1053 if (err)
1054 - return err;
1055 + goto err_irq;
1056
1057 /* Enable interrupt */
1058 cgx_write(cgx, lmac->lmac_id, CGXX_CMRX_INT_ENA_W1S,
1059 @@ -748,6 +750,12 @@ static int cgx_lmac_init(struct cgx *cgx)
1060 }
1061
1062 return cgx_lmac_verify_fwi_version(cgx);
1063 +
1064 +err_irq:
1065 + kfree(lmac->name);
1066 +err_lmac_free:
1067 + kfree(lmac);
1068 + return err;
1069 }
1070
1071 static int cgx_lmac_exit(struct cgx *cgx)
1072 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
1073 index 8cd529556b214..01089c2283d7f 100644
1074 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
1075 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
1076 @@ -976,6 +976,22 @@ static int mlx5e_get_link_ksettings(struct net_device *netdev,
1077 return mlx5e_ethtool_get_link_ksettings(priv, link_ksettings);
1078 }
1079
1080 +static int mlx5e_speed_validate(struct net_device *netdev, bool ext,
1081 + const unsigned long link_modes, u8 autoneg)
1082 +{
1083 + /* Extended link-mode has no speed limitations. */
1084 + if (ext)
1085 + return 0;
1086 +
1087 + if ((link_modes & MLX5E_PROT_MASK(MLX5E_56GBASE_R4)) &&
1088 + autoneg != AUTONEG_ENABLE) {
1089 + netdev_err(netdev, "%s: 56G link speed requires autoneg enabled\n",
1090 + __func__);
1091 + return -EINVAL;
1092 + }
1093 + return 0;
1094 +}
1095 +
1096 static u32 mlx5e_ethtool2ptys_adver_link(const unsigned long *link_modes)
1097 {
1098 u32 i, ptys_modes = 0;
1099 @@ -1068,13 +1084,9 @@ int mlx5e_ethtool_set_link_ksettings(struct mlx5e_priv *priv,
1100 link_modes = autoneg == AUTONEG_ENABLE ? ethtool2ptys_adver_func(adver) :
1101 mlx5e_port_speed2linkmodes(mdev, speed, !ext);
1102
1103 - if ((link_modes & MLX5E_PROT_MASK(MLX5E_56GBASE_R4)) &&
1104 - autoneg != AUTONEG_ENABLE) {
1105 - netdev_err(priv->netdev, "%s: 56G link speed requires autoneg enabled\n",
1106 - __func__);
1107 - err = -EINVAL;
1108 + err = mlx5e_speed_validate(priv->netdev, ext, link_modes, autoneg);
1109 + if (err)
1110 goto out;
1111 - }
1112
1113 link_modes = link_modes & eproto.cap;
1114 if (!link_modes) {
1115 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c b/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c
1116 index 713dc210f710c..c4ac7a9968d16 100644
1117 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c
1118 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c
1119 @@ -927,6 +927,7 @@ static int mlx5e_create_ttc_table_groups(struct mlx5e_ttc_table *ttc,
1120 in = kvzalloc(inlen, GFP_KERNEL);
1121 if (!in) {
1122 kfree(ft->g);
1123 + ft->g = NULL;
1124 return -ENOMEM;
1125 }
1126
1127 @@ -1067,6 +1068,7 @@ static int mlx5e_create_inner_ttc_table_groups(struct mlx5e_ttc_table *ttc)
1128 in = kvzalloc(inlen, GFP_KERNEL);
1129 if (!in) {
1130 kfree(ft->g);
1131 + ft->g = NULL;
1132 return -ENOMEM;
1133 }
1134
1135 @@ -1346,6 +1348,7 @@ err_destroy_groups:
1136 ft->g[ft->num_groups] = NULL;
1137 mlx5e_destroy_groups(ft);
1138 kvfree(in);
1139 + kfree(ft->g);
1140
1141 return err;
1142 }
1143 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/rdma.c b/drivers/net/ethernet/mellanox/mlx5/core/rdma.c
1144 index 0fc7de4aa572f..8e0dddc6383f0 100644
1145 --- a/drivers/net/ethernet/mellanox/mlx5/core/rdma.c
1146 +++ b/drivers/net/ethernet/mellanox/mlx5/core/rdma.c
1147 @@ -116,7 +116,7 @@ free:
1148 static void mlx5_rdma_del_roce_addr(struct mlx5_core_dev *dev)
1149 {
1150 mlx5_core_roce_gid_set(dev, 0, 0, 0,
1151 - NULL, NULL, false, 0, 0);
1152 + NULL, NULL, false, 0, 1);
1153 }
1154
1155 static void mlx5_rdma_make_default_gid(struct mlx5_core_dev *dev, union ib_gid *gid)
1156 diff --git a/drivers/net/ethernet/natsemi/macsonic.c b/drivers/net/ethernet/natsemi/macsonic.c
1157 index 0937fc2a928ed..23c9394cd5d22 100644
1158 --- a/drivers/net/ethernet/natsemi/macsonic.c
1159 +++ b/drivers/net/ethernet/natsemi/macsonic.c
1160 @@ -540,10 +540,14 @@ static int mac_sonic_platform_probe(struct platform_device *pdev)
1161
1162 err = register_netdev(dev);
1163 if (err)
1164 - goto out;
1165 + goto undo_probe;
1166
1167 return 0;
1168
1169 +undo_probe:
1170 + dma_free_coherent(lp->device,
1171 + SIZEOF_SONIC_DESC * SONIC_BUS_SCALE(lp->dma_bitmode),
1172 + lp->descriptors, lp->descriptors_laddr);
1173 out:
1174 free_netdev(dev);
1175
1176 @@ -618,12 +622,16 @@ static int mac_sonic_nubus_probe(struct nubus_board *board)
1177
1178 err = register_netdev(ndev);
1179 if (err)
1180 - goto out;
1181 + goto undo_probe;
1182
1183 nubus_set_drvdata(board, ndev);
1184
1185 return 0;
1186
1187 +undo_probe:
1188 + dma_free_coherent(lp->device,
1189 + SIZEOF_SONIC_DESC * SONIC_BUS_SCALE(lp->dma_bitmode),
1190 + lp->descriptors, lp->descriptors_laddr);
1191 out:
1192 free_netdev(ndev);
1193 return err;
1194 diff --git a/drivers/net/ethernet/natsemi/xtsonic.c b/drivers/net/ethernet/natsemi/xtsonic.c
1195 index e1b886e87a762..44171d7bb434c 100644
1196 --- a/drivers/net/ethernet/natsemi/xtsonic.c
1197 +++ b/drivers/net/ethernet/natsemi/xtsonic.c
1198 @@ -265,11 +265,14 @@ int xtsonic_probe(struct platform_device *pdev)
1199 sonic_msg_init(dev);
1200
1201 if ((err = register_netdev(dev)))
1202 - goto out1;
1203 + goto undo_probe1;
1204
1205 return 0;
1206
1207 -out1:
1208 +undo_probe1:
1209 + dma_free_coherent(lp->device,
1210 + SIZEOF_SONIC_DESC * SONIC_BUS_SCALE(lp->dma_bitmode),
1211 + lp->descriptors, lp->descriptors_laddr);
1212 release_region(dev->base_addr, SONIC_MEM_SIZE);
1213 out:
1214 free_netdev(dev);
1215 diff --git a/drivers/net/ethernet/qlogic/Kconfig b/drivers/net/ethernet/qlogic/Kconfig
1216 index 55a29ec766807..58eac2471d53a 100644
1217 --- a/drivers/net/ethernet/qlogic/Kconfig
1218 +++ b/drivers/net/ethernet/qlogic/Kconfig
1219 @@ -78,6 +78,7 @@ config QED
1220 depends on PCI
1221 select ZLIB_INFLATE
1222 select CRC8
1223 + select CRC32
1224 select NET_DEVLINK
1225 ---help---
1226 This enables the support for ...
1227 diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
1228 index e9e0867ec139d..c4c9cbdeb601e 100644
1229 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
1230 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
1231 @@ -64,6 +64,7 @@ struct emac_variant {
1232 * @variant: reference to the current board variant
1233 * @regmap: regmap for using the syscon
1234 * @internal_phy_powered: Does the internal PHY is enabled
1235 + * @use_internal_phy: Is the internal PHY selected for use
1236 * @mux_handle: Internal pointer used by mdio-mux lib
1237 */
1238 struct sunxi_priv_data {
1239 @@ -74,6 +75,7 @@ struct sunxi_priv_data {
1240 const struct emac_variant *variant;
1241 struct regmap_field *regmap_field;
1242 bool internal_phy_powered;
1243 + bool use_internal_phy;
1244 void *mux_handle;
1245 };
1246
1247 @@ -523,8 +525,11 @@ static const struct stmmac_dma_ops sun8i_dwmac_dma_ops = {
1248 .dma_interrupt = sun8i_dwmac_dma_interrupt,
1249 };
1250
1251 +static int sun8i_dwmac_power_internal_phy(struct stmmac_priv *priv);
1252 +
1253 static int sun8i_dwmac_init(struct platform_device *pdev, void *priv)
1254 {
1255 + struct net_device *ndev = platform_get_drvdata(pdev);
1256 struct sunxi_priv_data *gmac = priv;
1257 int ret;
1258
1259 @@ -538,13 +543,25 @@ static int sun8i_dwmac_init(struct platform_device *pdev, void *priv)
1260
1261 ret = clk_prepare_enable(gmac->tx_clk);
1262 if (ret) {
1263 - if (gmac->regulator)
1264 - regulator_disable(gmac->regulator);
1265 dev_err(&pdev->dev, "Could not enable AHB clock\n");
1266 - return ret;
1267 + goto err_disable_regulator;
1268 + }
1269 +
1270 + if (gmac->use_internal_phy) {
1271 + ret = sun8i_dwmac_power_internal_phy(netdev_priv(ndev));
1272 + if (ret)
1273 + goto err_disable_clk;
1274 }
1275
1276 return 0;
1277 +
1278 +err_disable_clk:
1279 + clk_disable_unprepare(gmac->tx_clk);
1280 +err_disable_regulator:
1281 + if (gmac->regulator)
1282 + regulator_disable(gmac->regulator);
1283 +
1284 + return ret;
1285 }
1286
1287 static void sun8i_dwmac_core_init(struct mac_device_info *hw,
1288 @@ -815,7 +832,6 @@ static int mdio_mux_syscon_switch_fn(int current_child, int desired_child,
1289 struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
1290 u32 reg, val;
1291 int ret = 0;
1292 - bool need_power_ephy = false;
1293
1294 if (current_child ^ desired_child) {
1295 regmap_field_read(gmac->regmap_field, &reg);
1296 @@ -823,13 +839,12 @@ static int mdio_mux_syscon_switch_fn(int current_child, int desired_child,
1297 case DWMAC_SUN8I_MDIO_MUX_INTERNAL_ID:
1298 dev_info(priv->device, "Switch mux to internal PHY");
1299 val = (reg & ~H3_EPHY_MUX_MASK) | H3_EPHY_SELECT;
1300 -
1301 - need_power_ephy = true;
1302 + gmac->use_internal_phy = true;
1303 break;
1304 case DWMAC_SUN8I_MDIO_MUX_EXTERNAL_ID:
1305 dev_info(priv->device, "Switch mux to external PHY");
1306 val = (reg & ~H3_EPHY_MUX_MASK) | H3_EPHY_SHUTDOWN;
1307 - need_power_ephy = false;
1308 + gmac->use_internal_phy = false;
1309 break;
1310 default:
1311 dev_err(priv->device, "Invalid child ID %x\n",
1312 @@ -837,7 +852,7 @@ static int mdio_mux_syscon_switch_fn(int current_child, int desired_child,
1313 return -EINVAL;
1314 }
1315 regmap_field_write(gmac->regmap_field, val);
1316 - if (need_power_ephy) {
1317 + if (gmac->use_internal_phy) {
1318 ret = sun8i_dwmac_power_internal_phy(priv);
1319 if (ret)
1320 return ret;
1321 @@ -988,17 +1003,12 @@ static void sun8i_dwmac_exit(struct platform_device *pdev, void *priv)
1322 struct sunxi_priv_data *gmac = priv;
1323
1324 if (gmac->variant->soc_has_internal_phy) {
1325 - /* sun8i_dwmac_exit could be called with mdiomux uninit */
1326 - if (gmac->mux_handle)
1327 - mdio_mux_uninit(gmac->mux_handle);
1328 if (gmac->internal_phy_powered)
1329 sun8i_dwmac_unpower_internal_phy(gmac);
1330 }
1331
1332 sun8i_dwmac_unset_syscon(gmac);
1333
1334 - reset_control_put(gmac->rst_ephy);
1335 -
1336 clk_disable_unprepare(gmac->tx_clk);
1337
1338 if (gmac->regulator)
1339 @@ -1227,12 +1237,32 @@ static int sun8i_dwmac_probe(struct platform_device *pdev)
1340
1341 return ret;
1342 dwmac_mux:
1343 + reset_control_put(gmac->rst_ephy);
1344 + clk_put(gmac->ephy_clk);
1345 sun8i_dwmac_unset_syscon(gmac);
1346 dwmac_exit:
1347 stmmac_pltfr_remove(pdev);
1348 return ret;
1349 }
1350
1351 +static int sun8i_dwmac_remove(struct platform_device *pdev)
1352 +{
1353 + struct net_device *ndev = platform_get_drvdata(pdev);
1354 + struct stmmac_priv *priv = netdev_priv(ndev);
1355 + struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
1356 +
1357 + if (gmac->variant->soc_has_internal_phy) {
1358 + mdio_mux_uninit(gmac->mux_handle);
1359 + sun8i_dwmac_unpower_internal_phy(gmac);
1360 + reset_control_put(gmac->rst_ephy);
1361 + clk_put(gmac->ephy_clk);
1362 + }
1363 +
1364 + stmmac_pltfr_remove(pdev);
1365 +
1366 + return 0;
1367 +}
1368 +
1369 static const struct of_device_id sun8i_dwmac_match[] = {
1370 { .compatible = "allwinner,sun8i-h3-emac",
1371 .data = &emac_variant_h3 },
1372 @@ -1252,7 +1282,7 @@ MODULE_DEVICE_TABLE(of, sun8i_dwmac_match);
1373
1374 static struct platform_driver sun8i_dwmac_driver = {
1375 .probe = sun8i_dwmac_probe,
1376 - .remove = stmmac_pltfr_remove,
1377 + .remove = sun8i_dwmac_remove,
1378 .driver = {
1379 .name = "dwmac-sun8i",
1380 .pm = &stmmac_pltfr_pm_ops,
1381 diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
1382 index d407489cec904..cbe7f35eac982 100644
1383 --- a/drivers/net/usb/cdc_ncm.c
1384 +++ b/drivers/net/usb/cdc_ncm.c
1385 @@ -1126,7 +1126,10 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)
1386 * accordingly. Otherwise, we should check here.
1387 */
1388 if (ctx->drvflags & CDC_NCM_FLAG_NDP_TO_END)
1389 - delayed_ndp_size = ALIGN(ctx->max_ndp_size, ctx->tx_ndp_modulus);
1390 + delayed_ndp_size = ctx->max_ndp_size +
1391 + max_t(u32,
1392 + ctx->tx_ndp_modulus,
1393 + ctx->tx_modulus + ctx->tx_remainder) - 1;
1394 else
1395 delayed_ndp_size = 0;
1396
1397 @@ -1307,7 +1310,8 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)
1398 if (!(dev->driver_info->flags & FLAG_SEND_ZLP) &&
1399 skb_out->len > ctx->min_tx_pkt) {
1400 padding_count = ctx->tx_curr_size - skb_out->len;
1401 - skb_put_zero(skb_out, padding_count);
1402 + if (!WARN_ON(padding_count > ctx->tx_curr_size))
1403 + skb_put_zero(skb_out, padding_count);
1404 } else if (skb_out->len < ctx->tx_curr_size &&
1405 (skb_out->len % dev->maxpacket) == 0) {
1406 skb_put_u8(skb_out, 0); /* force short packet */
1407 diff --git a/drivers/net/wan/Kconfig b/drivers/net/wan/Kconfig
1408 index 058d77d2e693d..0d6e1829e0ac9 100644
1409 --- a/drivers/net/wan/Kconfig
1410 +++ b/drivers/net/wan/Kconfig
1411 @@ -282,6 +282,7 @@ config SLIC_DS26522
1412 tristate "Slic Maxim ds26522 card support"
1413 depends on SPI
1414 depends on FSL_SOC || ARCH_MXC || ARCH_LAYERSCAPE || COMPILE_TEST
1415 + select BITREVERSE
1416 help
1417 This module initializes and configures the slic maxim card
1418 in T1 or E1 mode.
1419 diff --git a/drivers/net/wireless/ath/wil6210/Kconfig b/drivers/net/wireless/ath/wil6210/Kconfig
1420 index 0d1a8dab30ed4..32e1c036f3ac9 100644
1421 --- a/drivers/net/wireless/ath/wil6210/Kconfig
1422 +++ b/drivers/net/wireless/ath/wil6210/Kconfig
1423 @@ -2,6 +2,7 @@
1424 config WIL6210
1425 tristate "Wilocity 60g WiFi card wil6210 support"
1426 select WANT_DEV_COREDUMP
1427 + select CRC32
1428 depends on CFG80211
1429 depends on PCI
1430 default n
1431 diff --git a/drivers/regulator/qcom-rpmh-regulator.c b/drivers/regulator/qcom-rpmh-regulator.c
1432 index f11e4bfbc91be..a47f87b8373df 100644
1433 --- a/drivers/regulator/qcom-rpmh-regulator.c
1434 +++ b/drivers/regulator/qcom-rpmh-regulator.c
1435 @@ -726,7 +726,7 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps510 = {
1436 static const struct rpmh_vreg_hw_data pmic5_hfsmps515 = {
1437 .regulator_type = VRM,
1438 .ops = &rpmh_regulator_vrm_ops,
1439 - .voltage_range = REGULATOR_LINEAR_RANGE(2800000, 0, 4, 1600),
1440 + .voltage_range = REGULATOR_LINEAR_RANGE(2800000, 0, 4, 16000),
1441 .n_voltages = 5,
1442 .pmic_mode_map = pmic_mode_map_pmic5_smps,
1443 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
1444 diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
1445 index a1c23e998f977..8dee16aca421f 100644
1446 --- a/drivers/s390/net/qeth_l3_main.c
1447 +++ b/drivers/s390/net/qeth_l3_main.c
1448 @@ -2114,7 +2114,7 @@ static netdev_features_t qeth_l3_osa_features_check(struct sk_buff *skb,
1449 struct net_device *dev,
1450 netdev_features_t features)
1451 {
1452 - if (qeth_get_ip_version(skb) != 4)
1453 + if (vlan_get_protocol(skb) != htons(ETH_P_IP))
1454 features &= ~NETIF_F_HW_VLAN_CTAG_TX;
1455 return qeth_features_check(skb, dev, features);
1456 }
1457 diff --git a/drivers/spi/spi-stm32.c b/drivers/spi/spi-stm32.c
1458 index ed20ad2950885..77ddf23b65d65 100644
1459 --- a/drivers/spi/spi-stm32.c
1460 +++ b/drivers/spi/spi-stm32.c
1461 @@ -494,9 +494,9 @@ static u32 stm32h7_spi_prepare_fthlv(struct stm32_spi *spi, u32 xfer_len)
1462
1463 /* align packet size with data registers access */
1464 if (spi->cur_bpw > 8)
1465 - fthlv -= (fthlv % 2); /* multiple of 2 */
1466 + fthlv += (fthlv % 2) ? 1 : 0;
1467 else
1468 - fthlv -= (fthlv % 4); /* multiple of 4 */
1469 + fthlv += (fthlv % 4) ? (4 - (fthlv % 4)) : 0;
1470
1471 if (!fthlv)
1472 fthlv = 1;
1473 diff --git a/drivers/staging/exfat/exfat_super.c b/drivers/staging/exfat/exfat_super.c
1474 index 58c7d66060f7e..dd12777b9a788 100644
1475 --- a/drivers/staging/exfat/exfat_super.c
1476 +++ b/drivers/staging/exfat/exfat_super.c
1477 @@ -59,7 +59,7 @@ static void exfat_write_super(struct super_block *sb);
1478 /* Convert a FAT time/date pair to a UNIX date (seconds since 1 1 70). */
1479 static void exfat_time_fat2unix(struct timespec64 *ts, struct date_time_t *tp)
1480 {
1481 - ts->tv_sec = mktime64(tp->Year + 1980, tp->Month + 1, tp->Day,
1482 + ts->tv_sec = mktime64(tp->Year + 1980, tp->Month, tp->Day,
1483 tp->Hour, tp->Minute, tp->Second);
1484
1485 ts->tv_nsec = tp->MilliSecond * NSEC_PER_MSEC;
1486 diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
1487 index 3b31e83a92155..bc6ba41686fa3 100644
1488 --- a/drivers/vfio/vfio_iommu_type1.c
1489 +++ b/drivers/vfio/vfio_iommu_type1.c
1490 @@ -2303,6 +2303,24 @@ out_unlock:
1491 return ret;
1492 }
1493
1494 +static int vfio_iommu_dma_avail_build_caps(struct vfio_iommu *iommu,
1495 + struct vfio_info_cap *caps)
1496 +{
1497 + struct vfio_iommu_type1_info_dma_avail cap_dma_avail;
1498 + int ret;
1499 +
1500 + mutex_lock(&iommu->lock);
1501 + cap_dma_avail.header.id = VFIO_IOMMU_TYPE1_INFO_DMA_AVAIL;
1502 + cap_dma_avail.header.version = 1;
1503 +
1504 + cap_dma_avail.avail = iommu->dma_avail;
1505 +
1506 + ret = vfio_info_add_capability(caps, &cap_dma_avail.header,
1507 + sizeof(cap_dma_avail));
1508 + mutex_unlock(&iommu->lock);
1509 + return ret;
1510 +}
1511 +
1512 static long vfio_iommu_type1_ioctl(void *iommu_data,
1513 unsigned int cmd, unsigned long arg)
1514 {
1515 @@ -2349,6 +2367,10 @@ static long vfio_iommu_type1_ioctl(void *iommu_data,
1516 info.iova_pgsizes = vfio_pgsize_bitmap(iommu);
1517
1518 ret = vfio_iommu_iova_build_caps(iommu, &caps);
1519 +
1520 + if (!ret)
1521 + ret = vfio_iommu_dma_avail_build_caps(iommu, &caps);
1522 +
1523 if (ret)
1524 return ret;
1525
1526 diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
1527 index e5e2425875953..130f16cc0b86d 100644
1528 --- a/include/asm-generic/vmlinux.lds.h
1529 +++ b/include/asm-generic/vmlinux.lds.h
1530 @@ -520,7 +520,10 @@
1531 */
1532 #define TEXT_TEXT \
1533 ALIGN_FUNCTION(); \
1534 - *(.text.hot TEXT_MAIN .text.fixup .text.unlikely) \
1535 + *(.text.hot .text.hot.*) \
1536 + *(TEXT_MAIN .text.fixup) \
1537 + *(.text.unlikely .text.unlikely.*) \
1538 + *(.text.unknown .text.unknown.*) \
1539 *(.text..refcount) \
1540 *(.ref.text) \
1541 MEM_KEEP(init.text*) \
1542 diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h
1543 index 9e843a147ead0..cabc93118f9c8 100644
1544 --- a/include/uapi/linux/vfio.h
1545 +++ b/include/uapi/linux/vfio.h
1546 @@ -748,6 +748,21 @@ struct vfio_iommu_type1_info_cap_iova_range {
1547 struct vfio_iova_range iova_ranges[];
1548 };
1549
1550 +/*
1551 + * The DMA available capability allows to report the current number of
1552 + * simultaneously outstanding DMA mappings that are allowed.
1553 + *
1554 + * The structure below defines version 1 of this capability.
1555 + *
1556 + * avail: specifies the current number of outstanding DMA mappings allowed.
1557 + */
1558 +#define VFIO_IOMMU_TYPE1_INFO_DMA_AVAIL 3
1559 +
1560 +struct vfio_iommu_type1_info_dma_avail {
1561 + struct vfio_info_cap_header header;
1562 + __u32 avail;
1563 +};
1564 +
1565 #define VFIO_IOMMU_GET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12)
1566
1567 /**
1568 diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
1569 index d4bcfd8f95bf6..3f47abf9ef4a6 100644
1570 --- a/net/8021q/vlan.c
1571 +++ b/net/8021q/vlan.c
1572 @@ -280,7 +280,8 @@ static int register_vlan_device(struct net_device *real_dev, u16 vlan_id)
1573 return 0;
1574
1575 out_free_newdev:
1576 - if (new_dev->reg_state == NETREG_UNINITIALIZED)
1577 + if (new_dev->reg_state == NETREG_UNINITIALIZED ||
1578 + new_dev->reg_state == NETREG_UNREGISTERED)
1579 free_netdev(new_dev);
1580 return err;
1581 }
1582 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
1583 index a0486dcf5425b..49d923c227a21 100644
1584 --- a/net/core/skbuff.c
1585 +++ b/net/core/skbuff.c
1586 @@ -2017,6 +2017,12 @@ int pskb_trim_rcsum_slow(struct sk_buff *skb, unsigned int len)
1587 skb->csum = csum_block_sub(skb->csum,
1588 skb_checksum(skb, len, delta, 0),
1589 len);
1590 + } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
1591 + int hdlen = (len > skb_headlen(skb)) ? skb_headlen(skb) : len;
1592 + int offset = skb_checksum_start_offset(skb) + skb->csum_offset;
1593 +
1594 + if (offset + sizeof(__sum16) > hdlen)
1595 + return -EINVAL;
1596 }
1597 return __pskb_trim(skb, len);
1598 }
1599 diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
1600 index 079dcf9f0c56d..7a394479dd56c 100644
1601 --- a/net/ipv4/ip_output.c
1602 +++ b/net/ipv4/ip_output.c
1603 @@ -303,7 +303,7 @@ static int __ip_finish_output(struct net *net, struct sock *sk, struct sk_buff *
1604 if (skb_is_gso(skb))
1605 return ip_finish_output_gso(net, sk, skb, mtu);
1606
1607 - if (skb->len > mtu || (IPCB(skb)->flags & IPSKB_FRAG_PMTU))
1608 + if (skb->len > mtu || IPCB(skb)->frag_max_size)
1609 return ip_fragment(net, sk, skb, mtu, ip_finish_output2);
1610
1611 return ip_finish_output2(net, sk, skb);
1612 diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
1613 index f61c5a0b502a8..ca525cf681a4e 100644
1614 --- a/net/ipv4/ip_tunnel.c
1615 +++ b/net/ipv4/ip_tunnel.c
1616 @@ -765,8 +765,11 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
1617 goto tx_error;
1618 }
1619
1620 - if (tnl_update_pmtu(dev, skb, rt, tnl_params->frag_off, inner_iph,
1621 - 0, 0, false)) {
1622 + df = tnl_params->frag_off;
1623 + if (skb->protocol == htons(ETH_P_IP) && !tunnel->ignore_df)
1624 + df |= (inner_iph->frag_off & htons(IP_DF));
1625 +
1626 + if (tnl_update_pmtu(dev, skb, rt, df, inner_iph, 0, 0, false)) {
1627 ip_rt_put(rt);
1628 goto tx_error;
1629 }
1630 @@ -794,10 +797,6 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
1631 ttl = ip4_dst_hoplimit(&rt->dst);
1632 }
1633
1634 - df = tnl_params->frag_off;
1635 - if (skb->protocol == htons(ETH_P_IP) && !tunnel->ignore_df)
1636 - df |= (inner_iph->frag_off&htons(IP_DF));
1637 -
1638 max_headroom = LL_RESERVED_SPACE(rt->dst.dev) + sizeof(struct iphdr)
1639 + rt->dst.header_len + ip_encap_hlen(&tunnel->encap);
1640 if (max_headroom > dev->needed_headroom)
1641 diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c
1642 index ea32b113089d3..c2b7d43d92b0e 100644
1643 --- a/net/ipv4/nexthop.c
1644 +++ b/net/ipv4/nexthop.c
1645 @@ -1157,8 +1157,10 @@ static struct nexthop *nexthop_create_group(struct net *net,
1646 return nh;
1647
1648 out_no_nh:
1649 - for (; i >= 0; --i)
1650 + for (i--; i >= 0; --i) {
1651 + list_del(&nhg->nh_entries[i].nh_list);
1652 nexthop_put(nhg->nh_entries[i].nh);
1653 + }
1654
1655 kfree(nhg->spare);
1656 kfree(nhg);
1657 diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
1658 index 0646fce31b67a..906ac5e6d96cd 100644
1659 --- a/net/ipv6/ip6_fib.c
1660 +++ b/net/ipv6/ip6_fib.c
1661 @@ -973,6 +973,8 @@ static void fib6_purge_rt(struct fib6_info *rt, struct fib6_node *fn,
1662 {
1663 struct fib6_table *table = rt->fib6_table;
1664
1665 + /* Flush all cached dst in exception table */
1666 + rt6_flush_exceptions(rt);
1667 fib6_drop_pcpu_from(rt, table);
1668
1669 if (rt->nh && !list_empty(&rt->nh_list))
1670 @@ -1839,9 +1841,6 @@ static void fib6_del_route(struct fib6_table *table, struct fib6_node *fn,
1671 net->ipv6.rt6_stats->fib_rt_entries--;
1672 net->ipv6.rt6_stats->fib_discarded_routes++;
1673
1674 - /* Flush all cached dst in exception table */
1675 - rt6_flush_exceptions(rt);
1676 -
1677 /* Reset round-robin state, if necessary */
1678 if (rcu_access_pointer(fn->rr_ptr) == rt)
1679 fn->rr_ptr = NULL;
1680 diff --git a/tools/bpf/bpftool/net.c b/tools/bpf/bpftool/net.c
1681 index bb311ccc6c487..c6787a1daa481 100644
1682 --- a/tools/bpf/bpftool/net.c
1683 +++ b/tools/bpf/bpftool/net.c
1684 @@ -9,7 +9,6 @@
1685 #include <unistd.h>
1686 #include <libbpf.h>
1687 #include <net/if.h>
1688 -#include <linux/if.h>
1689 #include <linux/rtnetlink.h>
1690 #include <linux/tc_act/tc_bpf.h>
1691 #include <sys/socket.h>
1692 diff --git a/tools/testing/selftests/net/pmtu.sh b/tools/testing/selftests/net/pmtu.sh
1693 index 71a62e7e35b1c..3429767cadcdd 100755
1694 --- a/tools/testing/selftests/net/pmtu.sh
1695 +++ b/tools/testing/selftests/net/pmtu.sh
1696 @@ -119,7 +119,15 @@
1697 # - list_flush_ipv6_exception
1698 # Using the same topology as in pmtu_ipv6, create exceptions, and check
1699 # they are shown when listing exception caches, gone after flushing them
1700 -
1701 +#
1702 +# - pmtu_ipv4_route_change
1703 +# Use the same topology as in pmtu_ipv4, but issue a route replacement
1704 +# command and delete the corresponding device afterward. This tests for
1705 +# proper cleanup of the PMTU exceptions by the route replacement path.
1706 +# Device unregistration should complete successfully
1707 +#
1708 +# - pmtu_ipv6_route_change
1709 +# Same as above but with IPv6
1710
1711 # Kselftest framework requirement - SKIP code is 4.
1712 ksft_skip=4
1713 @@ -161,7 +169,9 @@ tests="
1714 cleanup_ipv4_exception ipv4: cleanup of cached exceptions 1
1715 cleanup_ipv6_exception ipv6: cleanup of cached exceptions 1
1716 list_flush_ipv4_exception ipv4: list and flush cached exceptions 1
1717 - list_flush_ipv6_exception ipv6: list and flush cached exceptions 1"
1718 + list_flush_ipv6_exception ipv6: list and flush cached exceptions 1
1719 + pmtu_ipv4_route_change ipv4: PMTU exception w/route replace 1
1720 + pmtu_ipv6_route_change ipv6: PMTU exception w/route replace 1"
1721
1722 NS_A="ns-A"
1723 NS_B="ns-B"
1724 @@ -1316,6 +1326,63 @@ test_list_flush_ipv6_exception() {
1725 return ${fail}
1726 }
1727
1728 +test_pmtu_ipvX_route_change() {
1729 + family=${1}
1730 +
1731 + setup namespaces routing || return 2
1732 + trace "${ns_a}" veth_A-R1 "${ns_r1}" veth_R1-A \
1733 + "${ns_r1}" veth_R1-B "${ns_b}" veth_B-R1 \
1734 + "${ns_a}" veth_A-R2 "${ns_r2}" veth_R2-A \
1735 + "${ns_r2}" veth_R2-B "${ns_b}" veth_B-R2
1736 +
1737 + if [ ${family} -eq 4 ]; then
1738 + ping=ping
1739 + dst1="${prefix4}.${b_r1}.1"
1740 + dst2="${prefix4}.${b_r2}.1"
1741 + gw="${prefix4}.${a_r1}.2"
1742 + else
1743 + ping=${ping6}
1744 + dst1="${prefix6}:${b_r1}::1"
1745 + dst2="${prefix6}:${b_r2}::1"
1746 + gw="${prefix6}:${a_r1}::2"
1747 + fi
1748 +
1749 + # Set up initial MTU values
1750 + mtu "${ns_a}" veth_A-R1 2000
1751 + mtu "${ns_r1}" veth_R1-A 2000
1752 + mtu "${ns_r1}" veth_R1-B 1400
1753 + mtu "${ns_b}" veth_B-R1 1400
1754 +
1755 + mtu "${ns_a}" veth_A-R2 2000
1756 + mtu "${ns_r2}" veth_R2-A 2000
1757 + mtu "${ns_r2}" veth_R2-B 1500
1758 + mtu "${ns_b}" veth_B-R2 1500
1759 +
1760 + # Create route exceptions
1761 + run_cmd ${ns_a} ${ping} -q -M want -i 0.1 -w 1 -s 1800 ${dst1}
1762 + run_cmd ${ns_a} ${ping} -q -M want -i 0.1 -w 1 -s 1800 ${dst2}
1763 +
1764 + # Check that exceptions have been created with the correct PMTU
1765 + pmtu_1="$(route_get_dst_pmtu_from_exception "${ns_a}" ${dst1})"
1766 + check_pmtu_value "1400" "${pmtu_1}" "exceeding MTU" || return 1
1767 + pmtu_2="$(route_get_dst_pmtu_from_exception "${ns_a}" ${dst2})"
1768 + check_pmtu_value "1500" "${pmtu_2}" "exceeding MTU" || return 1
1769 +
1770 + # Replace the route from A to R1
1771 + run_cmd ${ns_a} ip route change default via ${gw}
1772 +
1773 + # Delete the device in A
1774 + run_cmd ${ns_a} ip link del "veth_A-R1"
1775 +}
1776 +
1777 +test_pmtu_ipv4_route_change() {
1778 + test_pmtu_ipvX_route_change 4
1779 +}
1780 +
1781 +test_pmtu_ipv6_route_change() {
1782 + test_pmtu_ipvX_route_change 6
1783 +}
1784 +
1785 usage() {
1786 echo
1787 echo "$0 [OPTIONS] [TEST]..."