Magellan Linux

Contents of /trunk/kernel-magellan/patches-4.16/0105-4.16.6-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3109 - (show annotations) (download)
Wed May 16 14:24:32 2018 UTC (6 years ago) by niro
File size: 121097 byte(s)
-linux-4.16.6
1 diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
2 index a553d4e4a0fb..f778901c4297 100644
3 --- a/Documentation/networking/ip-sysctl.txt
4 +++ b/Documentation/networking/ip-sysctl.txt
5 @@ -1386,26 +1386,26 @@ mld_qrv - INTEGER
6 Default: 2 (as specified by RFC3810 9.1)
7 Minimum: 1 (as specified by RFC6636 4.5)
8
9 -max_dst_opts_cnt - INTEGER
10 +max_dst_opts_number - INTEGER
11 Maximum number of non-padding TLVs allowed in a Destination
12 options extension header. If this value is less than zero
13 then unknown options are disallowed and the number of known
14 TLVs allowed is the absolute value of this number.
15 Default: 8
16
17 -max_hbh_opts_cnt - INTEGER
18 +max_hbh_opts_number - INTEGER
19 Maximum number of non-padding TLVs allowed in a Hop-by-Hop
20 options extension header. If this value is less than zero
21 then unknown options are disallowed and the number of known
22 TLVs allowed is the absolute value of this number.
23 Default: 8
24
25 -max dst_opts_len - INTEGER
26 +max_dst_opts_length - INTEGER
27 Maximum length allowed for a Destination options extension
28 header.
29 Default: INT_MAX (unlimited)
30
31 -max hbh_opts_len - INTEGER
32 +max_hbh_length - INTEGER
33 Maximum length allowed for a Hop-by-Hop options extension
34 header.
35 Default: INT_MAX (unlimited)
36 diff --git a/Makefile b/Makefile
37 index 6678a90f355b..41f07b2b7905 100644
38 --- a/Makefile
39 +++ b/Makefile
40 @@ -1,7 +1,7 @@
41 # SPDX-License-Identifier: GPL-2.0
42 VERSION = 4
43 PATCHLEVEL = 16
44 -SUBLEVEL = 5
45 +SUBLEVEL = 6
46 EXTRAVERSION =
47 NAME = Fearless Coyote
48
49 diff --git a/arch/s390/kernel/perf_cpum_cf_events.c b/arch/s390/kernel/perf_cpum_cf_events.c
50 index 5ee27dc9a10c..feebb2944882 100644
51 --- a/arch/s390/kernel/perf_cpum_cf_events.c
52 +++ b/arch/s390/kernel/perf_cpum_cf_events.c
53 @@ -123,7 +123,7 @@ CPUMF_EVENT_ATTR(cf_zec12, L1I_OFFBOOK_L3_SOURCED_WRITES_IV, 0x00a1);
54 CPUMF_EVENT_ATTR(cf_zec12, TX_NC_TABORT, 0x00b1);
55 CPUMF_EVENT_ATTR(cf_zec12, TX_C_TABORT_NO_SPECIAL, 0x00b2);
56 CPUMF_EVENT_ATTR(cf_zec12, TX_C_TABORT_SPECIAL, 0x00b3);
57 -CPUMF_EVENT_ATTR(cf_z13, L1D_WRITES_RO_EXCL, 0x0080);
58 +CPUMF_EVENT_ATTR(cf_z13, L1D_RO_EXCL_WRITES, 0x0080);
59 CPUMF_EVENT_ATTR(cf_z13, DTLB1_WRITES, 0x0081);
60 CPUMF_EVENT_ATTR(cf_z13, DTLB1_MISSES, 0x0082);
61 CPUMF_EVENT_ATTR(cf_z13, DTLB1_HPAGE_WRITES, 0x0083);
62 @@ -179,7 +179,7 @@ CPUMF_EVENT_ATTR(cf_z13, TX_C_TABORT_NO_SPECIAL, 0x00db);
63 CPUMF_EVENT_ATTR(cf_z13, TX_C_TABORT_SPECIAL, 0x00dc);
64 CPUMF_EVENT_ATTR(cf_z13, MT_DIAG_CYCLES_ONE_THR_ACTIVE, 0x01c0);
65 CPUMF_EVENT_ATTR(cf_z13, MT_DIAG_CYCLES_TWO_THR_ACTIVE, 0x01c1);
66 -CPUMF_EVENT_ATTR(cf_z14, L1D_WRITES_RO_EXCL, 0x0080);
67 +CPUMF_EVENT_ATTR(cf_z14, L1D_RO_EXCL_WRITES, 0x0080);
68 CPUMF_EVENT_ATTR(cf_z14, DTLB2_WRITES, 0x0081);
69 CPUMF_EVENT_ATTR(cf_z14, DTLB2_MISSES, 0x0082);
70 CPUMF_EVENT_ATTR(cf_z14, DTLB2_HPAGE_WRITES, 0x0083);
71 @@ -371,7 +371,7 @@ static struct attribute *cpumcf_zec12_pmu_event_attr[] __initdata = {
72 };
73
74 static struct attribute *cpumcf_z13_pmu_event_attr[] __initdata = {
75 - CPUMF_EVENT_PTR(cf_z13, L1D_WRITES_RO_EXCL),
76 + CPUMF_EVENT_PTR(cf_z13, L1D_RO_EXCL_WRITES),
77 CPUMF_EVENT_PTR(cf_z13, DTLB1_WRITES),
78 CPUMF_EVENT_PTR(cf_z13, DTLB1_MISSES),
79 CPUMF_EVENT_PTR(cf_z13, DTLB1_HPAGE_WRITES),
80 @@ -431,7 +431,7 @@ static struct attribute *cpumcf_z13_pmu_event_attr[] __initdata = {
81 };
82
83 static struct attribute *cpumcf_z14_pmu_event_attr[] __initdata = {
84 - CPUMF_EVENT_PTR(cf_z14, L1D_WRITES_RO_EXCL),
85 + CPUMF_EVENT_PTR(cf_z14, L1D_RO_EXCL_WRITES),
86 CPUMF_EVENT_PTR(cf_z14, DTLB2_WRITES),
87 CPUMF_EVENT_PTR(cf_z14, DTLB2_MISSES),
88 CPUMF_EVENT_PTR(cf_z14, DTLB2_HPAGE_WRITES),
89 diff --git a/arch/s390/kernel/uprobes.c b/arch/s390/kernel/uprobes.c
90 index d9d1f512f019..5007fac01bb5 100644
91 --- a/arch/s390/kernel/uprobes.c
92 +++ b/arch/s390/kernel/uprobes.c
93 @@ -150,6 +150,15 @@ unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline,
94 return orig;
95 }
96
97 +bool arch_uretprobe_is_alive(struct return_instance *ret, enum rp_check ctx,
98 + struct pt_regs *regs)
99 +{
100 + if (ctx == RP_CHECK_CHAIN_CALL)
101 + return user_stack_pointer(regs) <= ret->stack;
102 + else
103 + return user_stack_pointer(regs) < ret->stack;
104 +}
105 +
106 /* Instruction Emulation */
107
108 static void adjust_psw_addr(psw_t *psw, unsigned long len)
109 diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
110 index 76fb96966f7b..2f2e737be0f8 100644
111 --- a/drivers/acpi/acpi_video.c
112 +++ b/drivers/acpi/acpi_video.c
113 @@ -2123,6 +2123,25 @@ static int __init intel_opregion_present(void)
114 return opregion;
115 }
116
117 +static bool dmi_is_desktop(void)
118 +{
119 + const char *chassis_type;
120 +
121 + chassis_type = dmi_get_system_info(DMI_CHASSIS_TYPE);
122 + if (!chassis_type)
123 + return false;
124 +
125 + if (!strcmp(chassis_type, "3") || /* 3: Desktop */
126 + !strcmp(chassis_type, "4") || /* 4: Low Profile Desktop */
127 + !strcmp(chassis_type, "5") || /* 5: Pizza Box */
128 + !strcmp(chassis_type, "6") || /* 6: Mini Tower */
129 + !strcmp(chassis_type, "7") || /* 7: Tower */
130 + !strcmp(chassis_type, "11")) /* 11: Main Server Chassis */
131 + return true;
132 +
133 + return false;
134 +}
135 +
136 int acpi_video_register(void)
137 {
138 int ret = 0;
139 @@ -2143,8 +2162,12 @@ int acpi_video_register(void)
140 * win8 ready (where we also prefer the native backlight driver, so
141 * normally the acpi_video code should not register there anyways).
142 */
143 - if (only_lcd == -1)
144 - only_lcd = acpi_osi_is_win8();
145 + if (only_lcd == -1) {
146 + if (dmi_is_desktop() && acpi_osi_is_win8())
147 + only_lcd = true;
148 + else
149 + only_lcd = false;
150 + }
151
152 dmi_check_system(video_dmi_table);
153
154 diff --git a/drivers/block/swim.c b/drivers/block/swim.c
155 index 64e066eba72e..0e31884a9519 100644
156 --- a/drivers/block/swim.c
157 +++ b/drivers/block/swim.c
158 @@ -110,7 +110,7 @@ struct iwm {
159 /* Select values for swim_select and swim_readbit */
160
161 #define READ_DATA_0 0x074
162 -#define TWOMEG_DRIVE 0x075
163 +#define ONEMEG_DRIVE 0x075
164 #define SINGLE_SIDED 0x076
165 #define DRIVE_PRESENT 0x077
166 #define DISK_IN 0x170
167 @@ -118,9 +118,9 @@ struct iwm {
168 #define TRACK_ZERO 0x172
169 #define TACHO 0x173
170 #define READ_DATA_1 0x174
171 -#define MFM_MODE 0x175
172 +#define GCR_MODE 0x175
173 #define SEEK_COMPLETE 0x176
174 -#define ONEMEG_MEDIA 0x177
175 +#define TWOMEG_MEDIA 0x177
176
177 /* Bits in handshake register */
178
179 @@ -612,7 +612,6 @@ static void setup_medium(struct floppy_state *fs)
180 struct floppy_struct *g;
181 fs->disk_in = 1;
182 fs->write_protected = swim_readbit(base, WRITE_PROT);
183 - fs->type = swim_readbit(base, ONEMEG_MEDIA);
184
185 if (swim_track00(base))
186 printk(KERN_ERR
187 @@ -620,6 +619,9 @@ static void setup_medium(struct floppy_state *fs)
188
189 swim_track00(base);
190
191 + fs->type = swim_readbit(base, TWOMEG_MEDIA) ?
192 + HD_MEDIA : DD_MEDIA;
193 + fs->head_number = swim_readbit(base, SINGLE_SIDED) ? 1 : 2;
194 get_floppy_geometry(fs, 0, &g);
195 fs->total_secs = g->size;
196 fs->secpercyl = g->head * g->sect;
197 @@ -646,7 +648,7 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)
198
199 swim_write(base, setup, S_IBM_DRIVE | S_FCLK_DIV2);
200 udelay(10);
201 - swim_drive(base, INTERNAL_DRIVE);
202 + swim_drive(base, fs->location);
203 swim_motor(base, ON);
204 swim_action(base, SETMFM);
205 if (fs->ejected)
206 @@ -656,6 +658,8 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)
207 goto out;
208 }
209
210 + set_capacity(fs->disk, fs->total_secs);
211 +
212 if (mode & FMODE_NDELAY)
213 return 0;
214
215 @@ -727,14 +731,9 @@ static int floppy_ioctl(struct block_device *bdev, fmode_t mode,
216 if (copy_to_user((void __user *) param, (void *) &floppy_type,
217 sizeof(struct floppy_struct)))
218 return -EFAULT;
219 - break;
220 -
221 - default:
222 - printk(KERN_DEBUG "SWIM floppy_ioctl: unknown cmd %d\n",
223 - cmd);
224 - return -ENOSYS;
225 + return 0;
226 }
227 - return 0;
228 + return -ENOTTY;
229 }
230
231 static int floppy_getgeo(struct block_device *bdev, struct hd_geometry *geo)
232 @@ -795,7 +794,7 @@ static struct kobject *floppy_find(dev_t dev, int *part, void *data)
233 struct swim_priv *swd = data;
234 int drive = (*part & 3);
235
236 - if (drive > swd->floppy_count)
237 + if (drive >= swd->floppy_count)
238 return NULL;
239
240 *part = 0;
241 @@ -813,10 +812,9 @@ static int swim_add_floppy(struct swim_priv *swd, enum drive_location location)
242
243 swim_motor(base, OFF);
244
245 - if (swim_readbit(base, SINGLE_SIDED))
246 - fs->head_number = 1;
247 - else
248 - fs->head_number = 2;
249 + fs->type = HD_MEDIA;
250 + fs->head_number = 2;
251 +
252 fs->ref_count = 0;
253 fs->ejected = 1;
254
255 @@ -834,10 +832,12 @@ static int swim_floppy_init(struct swim_priv *swd)
256 /* scan floppy drives */
257
258 swim_drive(base, INTERNAL_DRIVE);
259 - if (swim_readbit(base, DRIVE_PRESENT))
260 + if (swim_readbit(base, DRIVE_PRESENT) &&
261 + !swim_readbit(base, ONEMEG_DRIVE))
262 swim_add_floppy(swd, INTERNAL_DRIVE);
263 swim_drive(base, EXTERNAL_DRIVE);
264 - if (swim_readbit(base, DRIVE_PRESENT))
265 + if (swim_readbit(base, DRIVE_PRESENT) &&
266 + !swim_readbit(base, ONEMEG_DRIVE))
267 swim_add_floppy(swd, EXTERNAL_DRIVE);
268
269 /* register floppy drives */
270 @@ -861,7 +861,6 @@ static int swim_floppy_init(struct swim_priv *swd)
271 &swd->lock);
272 if (!swd->unit[drive].disk->queue) {
273 err = -ENOMEM;
274 - put_disk(swd->unit[drive].disk);
275 goto exit_put_disks;
276 }
277 blk_queue_bounce_limit(swd->unit[drive].disk->queue,
278 @@ -911,7 +910,7 @@ static int swim_probe(struct platform_device *dev)
279 goto out;
280 }
281
282 - swim_base = ioremap(res->start, resource_size(res));
283 + swim_base = (struct swim __iomem *)res->start;
284 if (!swim_base) {
285 ret = -ENOMEM;
286 goto out_release_io;
287 @@ -923,7 +922,7 @@ static int swim_probe(struct platform_device *dev)
288 if (!get_swim_mode(swim_base)) {
289 printk(KERN_INFO "SWIM device not found !\n");
290 ret = -ENODEV;
291 - goto out_iounmap;
292 + goto out_release_io;
293 }
294
295 /* set platform driver data */
296 @@ -931,7 +930,7 @@ static int swim_probe(struct platform_device *dev)
297 swd = kzalloc(sizeof(struct swim_priv), GFP_KERNEL);
298 if (!swd) {
299 ret = -ENOMEM;
300 - goto out_iounmap;
301 + goto out_release_io;
302 }
303 platform_set_drvdata(dev, swd);
304
305 @@ -945,8 +944,6 @@ static int swim_probe(struct platform_device *dev)
306
307 out_kfree:
308 kfree(swd);
309 -out_iounmap:
310 - iounmap(swim_base);
311 out_release_io:
312 release_mem_region(res->start, resource_size(res));
313 out:
314 @@ -974,8 +971,6 @@ static int swim_remove(struct platform_device *dev)
315 for (drive = 0; drive < swd->floppy_count; drive++)
316 floppy_eject(&swd->unit[drive]);
317
318 - iounmap(swd->base);
319 -
320 res = platform_get_resource(dev, IORESOURCE_MEM, 0);
321 if (res)
322 release_mem_region(res->start, resource_size(res));
323 diff --git a/drivers/block/swim3.c b/drivers/block/swim3.c
324 index af51015d056e..469541c1e51e 100644
325 --- a/drivers/block/swim3.c
326 +++ b/drivers/block/swim3.c
327 @@ -148,7 +148,7 @@ struct swim3 {
328 #define MOTOR_ON 2
329 #define RELAX 3 /* also eject in progress */
330 #define READ_DATA_0 4
331 -#define TWOMEG_DRIVE 5
332 +#define ONEMEG_DRIVE 5
333 #define SINGLE_SIDED 6 /* drive or diskette is 4MB type? */
334 #define DRIVE_PRESENT 7
335 #define DISK_IN 8
336 @@ -156,9 +156,9 @@ struct swim3 {
337 #define TRACK_ZERO 10
338 #define TACHO 11
339 #define READ_DATA_1 12
340 -#define MFM_MODE 13
341 +#define GCR_MODE 13
342 #define SEEK_COMPLETE 14
343 -#define ONEMEG_MEDIA 15
344 +#define TWOMEG_MEDIA 15
345
346 /* Definitions of values used in writing and formatting */
347 #define DATA_ESCAPE 0x99
348 diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
349 index e36d160c458f..5f7d86509f2f 100644
350 --- a/drivers/cdrom/cdrom.c
351 +++ b/drivers/cdrom/cdrom.c
352 @@ -2374,7 +2374,7 @@ static int cdrom_ioctl_media_changed(struct cdrom_device_info *cdi,
353 if (!CDROM_CAN(CDC_SELECT_DISC) || arg == CDSL_CURRENT)
354 return media_changed(cdi, 1);
355
356 - if ((unsigned int)arg >= cdi->capacity)
357 + if (arg >= cdi->capacity)
358 return -EINVAL;
359
360 info = kmalloc(sizeof(*info), GFP_KERNEL);
361 diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
362 index 248c04090dea..255db6fe15c8 100644
363 --- a/drivers/char/tpm/tpm-interface.c
364 +++ b/drivers/char/tpm/tpm-interface.c
365 @@ -369,20 +369,40 @@ static int tpm_validate_command(struct tpm_chip *chip,
366 return -EINVAL;
367 }
368
369 -/**
370 - * tmp_transmit - Internal kernel interface to transmit TPM commands.
371 - *
372 - * @chip: TPM chip to use
373 - * @buf: TPM command buffer
374 - * @bufsiz: length of the TPM command buffer
375 - * @flags: tpm transmit flags - bitmap
376 - *
377 - * Return:
378 - * 0 when the operation is successful.
379 - * A negative number for system errors (errno).
380 - */
381 -ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
382 - u8 *buf, size_t bufsiz, unsigned int flags)
383 +static int tpm_request_locality(struct tpm_chip *chip)
384 +{
385 + int rc;
386 +
387 + if (!chip->ops->request_locality)
388 + return 0;
389 +
390 + rc = chip->ops->request_locality(chip, 0);
391 + if (rc < 0)
392 + return rc;
393 +
394 + chip->locality = rc;
395 +
396 + return 0;
397 +}
398 +
399 +static void tpm_relinquish_locality(struct tpm_chip *chip)
400 +{
401 + int rc;
402 +
403 + if (!chip->ops->relinquish_locality)
404 + return;
405 +
406 + rc = chip->ops->relinquish_locality(chip, chip->locality);
407 + if (rc)
408 + dev_err(&chip->dev, "%s: : error %d\n", __func__, rc);
409 +
410 + chip->locality = -1;
411 +}
412 +
413 +static ssize_t tpm_try_transmit(struct tpm_chip *chip,
414 + struct tpm_space *space,
415 + u8 *buf, size_t bufsiz,
416 + unsigned int flags)
417 {
418 struct tpm_output_header *header = (void *)buf;
419 int rc;
420 @@ -422,8 +442,6 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
421 if (!(flags & TPM_TRANSMIT_UNLOCKED))
422 mutex_lock(&chip->tpm_mutex);
423
424 - if (chip->dev.parent)
425 - pm_runtime_get_sync(chip->dev.parent);
426
427 if (chip->ops->clk_enable != NULL)
428 chip->ops->clk_enable(chip, true);
429 @@ -431,14 +449,15 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
430 /* Store the decision as chip->locality will be changed. */
431 need_locality = chip->locality == -1;
432
433 - if (!(flags & TPM_TRANSMIT_RAW) &&
434 - need_locality && chip->ops->request_locality) {
435 - rc = chip->ops->request_locality(chip, 0);
436 + if (!(flags & TPM_TRANSMIT_RAW) && need_locality) {
437 + rc = tpm_request_locality(chip);
438 if (rc < 0)
439 goto out_no_locality;
440 - chip->locality = rc;
441 }
442
443 + if (chip->dev.parent)
444 + pm_runtime_get_sync(chip->dev.parent);
445 +
446 rc = tpm2_prepare_space(chip, space, ordinal, buf);
447 if (rc)
448 goto out;
449 @@ -499,27 +518,83 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
450 rc = tpm2_commit_space(chip, space, ordinal, buf, &len);
451
452 out:
453 - if (need_locality && chip->ops->relinquish_locality) {
454 - chip->ops->relinquish_locality(chip, chip->locality);
455 - chip->locality = -1;
456 - }
457 + if (chip->dev.parent)
458 + pm_runtime_put_sync(chip->dev.parent);
459 +
460 + if (need_locality)
461 + tpm_relinquish_locality(chip);
462 +
463 out_no_locality:
464 if (chip->ops->clk_enable != NULL)
465 chip->ops->clk_enable(chip, false);
466
467 - if (chip->dev.parent)
468 - pm_runtime_put_sync(chip->dev.parent);
469 -
470 if (!(flags & TPM_TRANSMIT_UNLOCKED))
471 mutex_unlock(&chip->tpm_mutex);
472 return rc ? rc : len;
473 }
474
475 /**
476 - * tmp_transmit_cmd - send a tpm command to the device
477 + * tpm_transmit - Internal kernel interface to transmit TPM commands.
478 + *
479 + * @chip: TPM chip to use
480 + * @space: tpm space
481 + * @buf: TPM command buffer
482 + * @bufsiz: length of the TPM command buffer
483 + * @flags: tpm transmit flags - bitmap
484 + *
485 + * A wrapper around tpm_try_transmit that handles TPM2_RC_RETRY
486 + * returns from the TPM and retransmits the command after a delay up
487 + * to a maximum wait of TPM2_DURATION_LONG.
488 + *
489 + * Note: TPM1 never returns TPM2_RC_RETRY so the retry logic is TPM2
490 + * only
491 + *
492 + * Return:
493 + * the length of the return when the operation is successful.
494 + * A negative number for system errors (errno).
495 + */
496 +ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
497 + u8 *buf, size_t bufsiz, unsigned int flags)
498 +{
499 + struct tpm_output_header *header = (struct tpm_output_header *)buf;
500 + /* space for header and handles */
501 + u8 save[TPM_HEADER_SIZE + 3*sizeof(u32)];
502 + unsigned int delay_msec = TPM2_DURATION_SHORT;
503 + u32 rc = 0;
504 + ssize_t ret;
505 + const size_t save_size = min(space ? sizeof(save) : TPM_HEADER_SIZE,
506 + bufsiz);
507 +
508 + /*
509 + * Subtlety here: if we have a space, the handles will be
510 + * transformed, so when we restore the header we also have to
511 + * restore the handles.
512 + */
513 + memcpy(save, buf, save_size);
514 +
515 + for (;;) {
516 + ret = tpm_try_transmit(chip, space, buf, bufsiz, flags);
517 + if (ret < 0)
518 + break;
519 + rc = be32_to_cpu(header->return_code);
520 + if (rc != TPM2_RC_RETRY)
521 + break;
522 + delay_msec *= 2;
523 + if (delay_msec > TPM2_DURATION_LONG) {
524 + dev_err(&chip->dev, "TPM is in retry loop\n");
525 + break;
526 + }
527 + tpm_msleep(delay_msec);
528 + memcpy(buf, save, save_size);
529 + }
530 + return ret;
531 +}
532 +/**
533 + * tpm_transmit_cmd - send a tpm command to the device
534 * The function extracts tpm out header return code
535 *
536 * @chip: TPM chip to use
537 + * @space: tpm space
538 * @buf: TPM command buffer
539 * @bufsiz: length of the buffer
540 * @min_rsp_body_length: minimum expected length of response body
541 diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
542 index f895fba4e20d..d73f3fb81b42 100644
543 --- a/drivers/char/tpm/tpm.h
544 +++ b/drivers/char/tpm/tpm.h
545 @@ -108,6 +108,7 @@ enum tpm2_return_codes {
546 TPM2_RC_COMMAND_CODE = 0x0143,
547 TPM2_RC_TESTING = 0x090A, /* RC_WARN */
548 TPM2_RC_REFERENCE_H0 = 0x0910,
549 + TPM2_RC_RETRY = 0x0922,
550 };
551
552 enum tpm2_algorithms {
553 diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
554 index 7b3c2a8aa9de..497edd9848cd 100644
555 --- a/drivers/char/tpm/tpm_crb.c
556 +++ b/drivers/char/tpm/tpm_crb.c
557 @@ -112,6 +112,25 @@ struct tpm2_crb_smc {
558 u32 smc_func_id;
559 };
560
561 +static bool crb_wait_for_reg_32(u32 __iomem *reg, u32 mask, u32 value,
562 + unsigned long timeout)
563 +{
564 + ktime_t start;
565 + ktime_t stop;
566 +
567 + start = ktime_get();
568 + stop = ktime_add(start, ms_to_ktime(timeout));
569 +
570 + do {
571 + if ((ioread32(reg) & mask) == value)
572 + return true;
573 +
574 + usleep_range(50, 100);
575 + } while (ktime_before(ktime_get(), stop));
576 +
577 + return ((ioread32(reg) & mask) == value);
578 +}
579 +
580 /**
581 * crb_go_idle - request tpm crb device to go the idle state
582 *
583 @@ -128,7 +147,7 @@ struct tpm2_crb_smc {
584 *
585 * Return: 0 always
586 */
587 -static int __maybe_unused crb_go_idle(struct device *dev, struct crb_priv *priv)
588 +static int crb_go_idle(struct device *dev, struct crb_priv *priv)
589 {
590 if ((priv->sm == ACPI_TPM2_START_METHOD) ||
591 (priv->sm == ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD) ||
592 @@ -136,30 +155,17 @@ static int __maybe_unused crb_go_idle(struct device *dev, struct crb_priv *priv)
593 return 0;
594
595 iowrite32(CRB_CTRL_REQ_GO_IDLE, &priv->regs_t->ctrl_req);
596 - /* we don't really care when this settles */
597
598 + if (!crb_wait_for_reg_32(&priv->regs_t->ctrl_req,
599 + CRB_CTRL_REQ_GO_IDLE/* mask */,
600 + 0, /* value */
601 + TPM2_TIMEOUT_C)) {
602 + dev_warn(dev, "goIdle timed out\n");
603 + return -ETIME;
604 + }
605 return 0;
606 }
607
608 -static bool crb_wait_for_reg_32(u32 __iomem *reg, u32 mask, u32 value,
609 - unsigned long timeout)
610 -{
611 - ktime_t start;
612 - ktime_t stop;
613 -
614 - start = ktime_get();
615 - stop = ktime_add(start, ms_to_ktime(timeout));
616 -
617 - do {
618 - if ((ioread32(reg) & mask) == value)
619 - return true;
620 -
621 - usleep_range(50, 100);
622 - } while (ktime_before(ktime_get(), stop));
623 -
624 - return false;
625 -}
626 -
627 /**
628 * crb_cmd_ready - request tpm crb device to enter ready state
629 *
630 @@ -175,8 +181,7 @@ static bool crb_wait_for_reg_32(u32 __iomem *reg, u32 mask, u32 value,
631 *
632 * Return: 0 on success -ETIME on timeout;
633 */
634 -static int __maybe_unused crb_cmd_ready(struct device *dev,
635 - struct crb_priv *priv)
636 +static int crb_cmd_ready(struct device *dev, struct crb_priv *priv)
637 {
638 if ((priv->sm == ACPI_TPM2_START_METHOD) ||
639 (priv->sm == ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD) ||
640 @@ -195,11 +200,11 @@ static int __maybe_unused crb_cmd_ready(struct device *dev,
641 return 0;
642 }
643
644 -static int crb_request_locality(struct tpm_chip *chip, int loc)
645 +static int __crb_request_locality(struct device *dev,
646 + struct crb_priv *priv, int loc)
647 {
648 - struct crb_priv *priv = dev_get_drvdata(&chip->dev);
649 u32 value = CRB_LOC_STATE_LOC_ASSIGNED |
650 - CRB_LOC_STATE_TPM_REG_VALID_STS;
651 + CRB_LOC_STATE_TPM_REG_VALID_STS;
652
653 if (!priv->regs_h)
654 return 0;
655 @@ -207,21 +212,45 @@ static int crb_request_locality(struct tpm_chip *chip, int loc)
656 iowrite32(CRB_LOC_CTRL_REQUEST_ACCESS, &priv->regs_h->loc_ctrl);
657 if (!crb_wait_for_reg_32(&priv->regs_h->loc_state, value, value,
658 TPM2_TIMEOUT_C)) {
659 - dev_warn(&chip->dev, "TPM_LOC_STATE_x.requestAccess timed out\n");
660 + dev_warn(dev, "TPM_LOC_STATE_x.requestAccess timed out\n");
661 return -ETIME;
662 }
663
664 return 0;
665 }
666
667 -static void crb_relinquish_locality(struct tpm_chip *chip, int loc)
668 +static int crb_request_locality(struct tpm_chip *chip, int loc)
669 {
670 struct crb_priv *priv = dev_get_drvdata(&chip->dev);
671
672 + return __crb_request_locality(&chip->dev, priv, loc);
673 +}
674 +
675 +static int __crb_relinquish_locality(struct device *dev,
676 + struct crb_priv *priv, int loc)
677 +{
678 + u32 mask = CRB_LOC_STATE_LOC_ASSIGNED |
679 + CRB_LOC_STATE_TPM_REG_VALID_STS;
680 + u32 value = CRB_LOC_STATE_TPM_REG_VALID_STS;
681 +
682 if (!priv->regs_h)
683 - return;
684 + return 0;
685
686 iowrite32(CRB_LOC_CTRL_RELINQUISH, &priv->regs_h->loc_ctrl);
687 + if (!crb_wait_for_reg_32(&priv->regs_h->loc_state, mask, value,
688 + TPM2_TIMEOUT_C)) {
689 + dev_warn(dev, "TPM_LOC_STATE_x.requestAccess timed out\n");
690 + return -ETIME;
691 + }
692 +
693 + return 0;
694 +}
695 +
696 +static int crb_relinquish_locality(struct tpm_chip *chip, int loc)
697 +{
698 + struct crb_priv *priv = dev_get_drvdata(&chip->dev);
699 +
700 + return __crb_relinquish_locality(&chip->dev, priv, loc);
701 }
702
703 static u8 crb_status(struct tpm_chip *chip)
704 @@ -475,6 +504,10 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
705 dev_warn(dev, FW_BUG "Bad ACPI memory layout");
706 }
707
708 + ret = __crb_request_locality(dev, priv, 0);
709 + if (ret)
710 + return ret;
711 +
712 priv->regs_t = crb_map_res(dev, priv, &io_res, buf->control_address,
713 sizeof(struct crb_regs_tail));
714 if (IS_ERR(priv->regs_t))
715 @@ -531,6 +564,8 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
716
717 crb_go_idle(dev, priv);
718
719 + __crb_relinquish_locality(dev, priv, 0);
720 +
721 return ret;
722 }
723
724 @@ -588,10 +623,14 @@ static int crb_acpi_add(struct acpi_device *device)
725 chip->acpi_dev_handle = device->handle;
726 chip->flags = TPM_CHIP_FLAG_TPM2;
727
728 - rc = crb_cmd_ready(dev, priv);
729 + rc = __crb_request_locality(dev, priv, 0);
730 if (rc)
731 return rc;
732
733 + rc = crb_cmd_ready(dev, priv);
734 + if (rc)
735 + goto out;
736 +
737 pm_runtime_get_noresume(dev);
738 pm_runtime_set_active(dev);
739 pm_runtime_enable(dev);
740 @@ -601,12 +640,15 @@ static int crb_acpi_add(struct acpi_device *device)
741 crb_go_idle(dev, priv);
742 pm_runtime_put_noidle(dev);
743 pm_runtime_disable(dev);
744 - return rc;
745 + goto out;
746 }
747
748 - pm_runtime_put(dev);
749 + pm_runtime_put_sync(dev);
750
751 - return 0;
752 +out:
753 + __crb_relinquish_locality(dev, priv, 0);
754 +
755 + return rc;
756 }
757
758 static int crb_acpi_remove(struct acpi_device *device)
759 diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c
760 index da074e3db19b..5a1f47b43947 100644
761 --- a/drivers/char/tpm/tpm_tis_core.c
762 +++ b/drivers/char/tpm/tpm_tis_core.c
763 @@ -143,11 +143,13 @@ static bool check_locality(struct tpm_chip *chip, int l)
764 return false;
765 }
766
767 -static void release_locality(struct tpm_chip *chip, int l)
768 +static int release_locality(struct tpm_chip *chip, int l)
769 {
770 struct tpm_tis_data *priv = dev_get_drvdata(&chip->dev);
771
772 tpm_tis_write8(priv, TPM_ACCESS(l), TPM_ACCESS_ACTIVE_LOCALITY);
773 +
774 + return 0;
775 }
776
777 static int request_locality(struct tpm_chip *chip, int l)
778 diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
779 index a38db40ce990..b2447ee3b245 100644
780 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
781 +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
782 @@ -1637,6 +1637,8 @@ static void dw_hdmi_clear_overflow(struct dw_hdmi *hdmi)
783 * (and possibly on the platform). So far only i.MX6Q (v1.30a) and
784 * i.MX6DL (v1.31a) have been identified as needing the workaround, with
785 * 4 and 1 iterations respectively.
786 + * The Amlogic Meson GX SoCs (v2.01a) have been identified as needing
787 + * the workaround with a single iteration.
788 */
789
790 switch (hdmi->version) {
791 @@ -1644,6 +1646,7 @@ static void dw_hdmi_clear_overflow(struct dw_hdmi *hdmi)
792 count = 4;
793 break;
794 case 0x131a:
795 + case 0x201a:
796 count = 1;
797 break;
798 default:
799 diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
800 index 051a72eecb24..d2cc55e21374 100644
801 --- a/drivers/hwmon/k10temp.c
802 +++ b/drivers/hwmon/k10temp.c
803 @@ -40,6 +40,10 @@ static DEFINE_MUTEX(nb_smu_ind_mutex);
804 #define PCI_DEVICE_ID_AMD_17H_DF_F3 0x1463
805 #endif
806
807 +#ifndef PCI_DEVICE_ID_AMD_17H_RR_NB
808 +#define PCI_DEVICE_ID_AMD_17H_RR_NB 0x15d0
809 +#endif
810 +
811 /* CPUID function 0x80000001, ebx */
812 #define CPUID_PKGTYPE_MASK 0xf0000000
813 #define CPUID_PKGTYPE_F 0x00000000
814 @@ -72,6 +76,7 @@ struct k10temp_data {
815 struct pci_dev *pdev;
816 void (*read_tempreg)(struct pci_dev *pdev, u32 *regval);
817 int temp_offset;
818 + u32 temp_adjust_mask;
819 };
820
821 struct tctl_offset {
822 @@ -84,6 +89,7 @@ static const struct tctl_offset tctl_offset_table[] = {
823 { 0x17, "AMD Ryzen 5 1600X", 20000 },
824 { 0x17, "AMD Ryzen 7 1700X", 20000 },
825 { 0x17, "AMD Ryzen 7 1800X", 20000 },
826 + { 0x17, "AMD Ryzen 7 2700X", 10000 },
827 { 0x17, "AMD Ryzen Threadripper 1950X", 27000 },
828 { 0x17, "AMD Ryzen Threadripper 1920X", 27000 },
829 { 0x17, "AMD Ryzen Threadripper 1900X", 27000 },
830 @@ -129,6 +135,8 @@ static ssize_t temp1_input_show(struct device *dev,
831
832 data->read_tempreg(data->pdev, &regval);
833 temp = (regval >> 21) * 125;
834 + if (regval & data->temp_adjust_mask)
835 + temp -= 49000;
836 if (temp > data->temp_offset)
837 temp -= data->temp_offset;
838 else
839 @@ -259,12 +267,14 @@ static int k10temp_probe(struct pci_dev *pdev,
840 data->pdev = pdev;
841
842 if (boot_cpu_data.x86 == 0x15 && (boot_cpu_data.x86_model == 0x60 ||
843 - boot_cpu_data.x86_model == 0x70))
844 + boot_cpu_data.x86_model == 0x70)) {
845 data->read_tempreg = read_tempreg_nb_f15;
846 - else if (boot_cpu_data.x86 == 0x17)
847 + } else if (boot_cpu_data.x86 == 0x17) {
848 + data->temp_adjust_mask = 0x80000;
849 data->read_tempreg = read_tempreg_nb_f17;
850 - else
851 + } else {
852 data->read_tempreg = read_tempreg_pci;
853 + }
854
855 for (i = 0; i < ARRAY_SIZE(tctl_offset_table); i++) {
856 const struct tctl_offset *entry = &tctl_offset_table[i];
857 @@ -292,6 +302,7 @@ static const struct pci_device_id k10temp_id_table[] = {
858 { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_NB_F3) },
859 { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F3) },
860 { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_17H_DF_F3) },
861 + { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_17H_RR_NB) },
862 {}
863 };
864 MODULE_DEVICE_TABLE(pci, k10temp_id_table);
865 diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c
866 index 439ee9c5f535..c59b5da85321 100644
867 --- a/drivers/message/fusion/mptsas.c
868 +++ b/drivers/message/fusion/mptsas.c
869 @@ -1994,6 +1994,7 @@ static struct scsi_host_template mptsas_driver_template = {
870 .cmd_per_lun = 7,
871 .use_clustering = ENABLE_CLUSTERING,
872 .shost_attrs = mptscsih_host_attrs,
873 + .no_write_same = 1,
874 };
875
876 static int mptsas_get_linkerrors(struct sas_phy *phy)
877 diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
878 index b7b113018853..718e4914e3a0 100644
879 --- a/drivers/net/bonding/bond_main.c
880 +++ b/drivers/net/bonding/bond_main.c
881 @@ -1660,8 +1660,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
882 } /* switch(bond_mode) */
883
884 #ifdef CONFIG_NET_POLL_CONTROLLER
885 - slave_dev->npinfo = bond->dev->npinfo;
886 - if (slave_dev->npinfo) {
887 + if (bond->dev->npinfo) {
888 if (slave_enable_netpoll(new_slave)) {
889 netdev_info(bond_dev, "master_dev is using netpoll, but new slave device does not support netpoll\n");
890 res = -EBUSY;
891 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h
892 index 7ea72ef11a55..d272dc6984ac 100644
893 --- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h
894 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h
895 @@ -1321,6 +1321,10 @@
896 #define MDIO_VEND2_AN_STAT 0x8002
897 #endif
898
899 +#ifndef MDIO_VEND2_PMA_CDR_CONTROL
900 +#define MDIO_VEND2_PMA_CDR_CONTROL 0x8056
901 +#endif
902 +
903 #ifndef MDIO_CTRL1_SPEED1G
904 #define MDIO_CTRL1_SPEED1G (MDIO_CTRL1_SPEED10G & ~BMCR_SPEED100)
905 #endif
906 @@ -1369,6 +1373,10 @@
907 #define XGBE_AN_CL37_TX_CONFIG_MASK 0x08
908 #define XGBE_AN_CL37_MII_CTRL_8BIT 0x0100
909
910 +#define XGBE_PMA_CDR_TRACK_EN_MASK 0x01
911 +#define XGBE_PMA_CDR_TRACK_EN_OFF 0x00
912 +#define XGBE_PMA_CDR_TRACK_EN_ON 0x01
913 +
914 /* Bit setting and getting macros
915 * The get macro will extract the current bit field value from within
916 * the variable
917 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c b/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c
918 index 7d128be61310..b91143947ed2 100644
919 --- a/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c
920 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c
921 @@ -519,6 +519,22 @@ void xgbe_debugfs_init(struct xgbe_prv_data *pdata)
922 "debugfs_create_file failed\n");
923 }
924
925 + if (pdata->vdata->an_cdr_workaround) {
926 + pfile = debugfs_create_bool("an_cdr_workaround", 0600,
927 + pdata->xgbe_debugfs,
928 + &pdata->debugfs_an_cdr_workaround);
929 + if (!pfile)
930 + netdev_err(pdata->netdev,
931 + "debugfs_create_bool failed\n");
932 +
933 + pfile = debugfs_create_bool("an_cdr_track_early", 0600,
934 + pdata->xgbe_debugfs,
935 + &pdata->debugfs_an_cdr_track_early);
936 + if (!pfile)
937 + netdev_err(pdata->netdev,
938 + "debugfs_create_bool failed\n");
939 + }
940 +
941 kfree(buf);
942 }
943
944 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-main.c b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
945 index d91fa595be98..e31d9d1fb6a6 100644
946 --- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c
947 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
948 @@ -349,6 +349,7 @@ int xgbe_config_netdev(struct xgbe_prv_data *pdata)
949 XGMAC_SET_BITS(pdata->rss_options, MAC_RSSCR, UDP4TE, 1);
950
951 /* Call MDIO/PHY initialization routine */
952 + pdata->debugfs_an_cdr_workaround = pdata->vdata->an_cdr_workaround;
953 ret = pdata->phy_if.phy_init(pdata);
954 if (ret)
955 return ret;
956 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
957 index 072b9f664597..1b45cd73a258 100644
958 --- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
959 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
960 @@ -432,11 +432,16 @@ static void xgbe_an73_disable(struct xgbe_prv_data *pdata)
961 xgbe_an73_set(pdata, false, false);
962 xgbe_an73_disable_interrupts(pdata);
963
964 + pdata->an_start = 0;
965 +
966 netif_dbg(pdata, link, pdata->netdev, "CL73 AN disabled\n");
967 }
968
969 static void xgbe_an_restart(struct xgbe_prv_data *pdata)
970 {
971 + if (pdata->phy_if.phy_impl.an_pre)
972 + pdata->phy_if.phy_impl.an_pre(pdata);
973 +
974 switch (pdata->an_mode) {
975 case XGBE_AN_MODE_CL73:
976 case XGBE_AN_MODE_CL73_REDRV:
977 @@ -453,6 +458,9 @@ static void xgbe_an_restart(struct xgbe_prv_data *pdata)
978
979 static void xgbe_an_disable(struct xgbe_prv_data *pdata)
980 {
981 + if (pdata->phy_if.phy_impl.an_post)
982 + pdata->phy_if.phy_impl.an_post(pdata);
983 +
984 switch (pdata->an_mode) {
985 case XGBE_AN_MODE_CL73:
986 case XGBE_AN_MODE_CL73_REDRV:
987 @@ -505,11 +513,11 @@ static enum xgbe_an xgbe_an73_tx_training(struct xgbe_prv_data *pdata,
988 XMDIO_WRITE(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL,
989 reg);
990
991 - if (pdata->phy_if.phy_impl.kr_training_post)
992 - pdata->phy_if.phy_impl.kr_training_post(pdata);
993 -
994 netif_dbg(pdata, link, pdata->netdev,
995 "KR training initiated\n");
996 +
997 + if (pdata->phy_if.phy_impl.kr_training_post)
998 + pdata->phy_if.phy_impl.kr_training_post(pdata);
999 }
1000
1001 return XGBE_AN_PAGE_RECEIVED;
1002 @@ -637,11 +645,11 @@ static enum xgbe_an xgbe_an73_incompat_link(struct xgbe_prv_data *pdata)
1003 return XGBE_AN_NO_LINK;
1004 }
1005
1006 - xgbe_an73_disable(pdata);
1007 + xgbe_an_disable(pdata);
1008
1009 xgbe_switch_mode(pdata);
1010
1011 - xgbe_an73_restart(pdata);
1012 + xgbe_an_restart(pdata);
1013
1014 return XGBE_AN_INCOMPAT_LINK;
1015 }
1016 @@ -820,6 +828,9 @@ static void xgbe_an37_state_machine(struct xgbe_prv_data *pdata)
1017 pdata->an_result = pdata->an_state;
1018 pdata->an_state = XGBE_AN_READY;
1019
1020 + if (pdata->phy_if.phy_impl.an_post)
1021 + pdata->phy_if.phy_impl.an_post(pdata);
1022 +
1023 netif_dbg(pdata, link, pdata->netdev, "CL37 AN result: %s\n",
1024 xgbe_state_as_string(pdata->an_result));
1025 }
1026 @@ -903,6 +914,9 @@ static void xgbe_an73_state_machine(struct xgbe_prv_data *pdata)
1027 pdata->kx_state = XGBE_RX_BPA;
1028 pdata->an_start = 0;
1029
1030 + if (pdata->phy_if.phy_impl.an_post)
1031 + pdata->phy_if.phy_impl.an_post(pdata);
1032 +
1033 netif_dbg(pdata, link, pdata->netdev, "CL73 AN result: %s\n",
1034 xgbe_state_as_string(pdata->an_result));
1035 }
1036 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-pci.c b/drivers/net/ethernet/amd/xgbe/xgbe-pci.c
1037 index eb23f9ba1a9a..82d1f416ee2a 100644
1038 --- a/drivers/net/ethernet/amd/xgbe/xgbe-pci.c
1039 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-pci.c
1040 @@ -456,6 +456,7 @@ static const struct xgbe_version_data xgbe_v2a = {
1041 .irq_reissue_support = 1,
1042 .tx_desc_prefetch = 5,
1043 .rx_desc_prefetch = 5,
1044 + .an_cdr_workaround = 1,
1045 };
1046
1047 static const struct xgbe_version_data xgbe_v2b = {
1048 @@ -470,6 +471,7 @@ static const struct xgbe_version_data xgbe_v2b = {
1049 .irq_reissue_support = 1,
1050 .tx_desc_prefetch = 5,
1051 .rx_desc_prefetch = 5,
1052 + .an_cdr_workaround = 1,
1053 };
1054
1055 static const struct pci_device_id xgbe_pci_table[] = {
1056 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
1057 index 3304a291aa96..aac884314000 100644
1058 --- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
1059 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
1060 @@ -147,6 +147,14 @@
1061 /* Rate-change complete wait/retry count */
1062 #define XGBE_RATECHANGE_COUNT 500
1063
1064 +/* CDR delay values for KR support (in usec) */
1065 +#define XGBE_CDR_DELAY_INIT 10000
1066 +#define XGBE_CDR_DELAY_INC 10000
1067 +#define XGBE_CDR_DELAY_MAX 100000
1068 +
1069 +/* RRC frequency during link status check */
1070 +#define XGBE_RRC_FREQUENCY 10
1071 +
1072 enum xgbe_port_mode {
1073 XGBE_PORT_MODE_RSVD = 0,
1074 XGBE_PORT_MODE_BACKPLANE,
1075 @@ -245,6 +253,10 @@ enum xgbe_sfp_speed {
1076 #define XGBE_SFP_BASE_VENDOR_SN 4
1077 #define XGBE_SFP_BASE_VENDOR_SN_LEN 16
1078
1079 +#define XGBE_SFP_EXTD_OPT1 1
1080 +#define XGBE_SFP_EXTD_OPT1_RX_LOS BIT(1)
1081 +#define XGBE_SFP_EXTD_OPT1_TX_FAULT BIT(3)
1082 +
1083 #define XGBE_SFP_EXTD_DIAG 28
1084 #define XGBE_SFP_EXTD_DIAG_ADDR_CHANGE BIT(2)
1085
1086 @@ -324,6 +336,7 @@ struct xgbe_phy_data {
1087
1088 unsigned int sfp_gpio_address;
1089 unsigned int sfp_gpio_mask;
1090 + unsigned int sfp_gpio_inputs;
1091 unsigned int sfp_gpio_rx_los;
1092 unsigned int sfp_gpio_tx_fault;
1093 unsigned int sfp_gpio_mod_absent;
1094 @@ -355,6 +368,10 @@ struct xgbe_phy_data {
1095 unsigned int redrv_addr;
1096 unsigned int redrv_lane;
1097 unsigned int redrv_model;
1098 +
1099 + /* KR AN support */
1100 + unsigned int phy_cdr_notrack;
1101 + unsigned int phy_cdr_delay;
1102 };
1103
1104 /* I2C, MDIO and GPIO lines are muxed, so only one device at a time */
1105 @@ -974,6 +991,49 @@ static void xgbe_phy_sfp_external_phy(struct xgbe_prv_data *pdata)
1106 phy_data->sfp_phy_avail = 1;
1107 }
1108
1109 +static bool xgbe_phy_check_sfp_rx_los(struct xgbe_phy_data *phy_data)
1110 +{
1111 + u8 *sfp_extd = phy_data->sfp_eeprom.extd;
1112 +
1113 + if (!(sfp_extd[XGBE_SFP_EXTD_OPT1] & XGBE_SFP_EXTD_OPT1_RX_LOS))
1114 + return false;
1115 +
1116 + if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_RX_LOS)
1117 + return false;
1118 +
1119 + if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_rx_los))
1120 + return true;
1121 +
1122 + return false;
1123 +}
1124 +
1125 +static bool xgbe_phy_check_sfp_tx_fault(struct xgbe_phy_data *phy_data)
1126 +{
1127 + u8 *sfp_extd = phy_data->sfp_eeprom.extd;
1128 +
1129 + if (!(sfp_extd[XGBE_SFP_EXTD_OPT1] & XGBE_SFP_EXTD_OPT1_TX_FAULT))
1130 + return false;
1131 +
1132 + if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_TX_FAULT)
1133 + return false;
1134 +
1135 + if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_tx_fault))
1136 + return true;
1137 +
1138 + return false;
1139 +}
1140 +
1141 +static bool xgbe_phy_check_sfp_mod_absent(struct xgbe_phy_data *phy_data)
1142 +{
1143 + if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_MOD_ABSENT)
1144 + return false;
1145 +
1146 + if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_mod_absent))
1147 + return true;
1148 +
1149 + return false;
1150 +}
1151 +
1152 static bool xgbe_phy_belfuse_parse_quirks(struct xgbe_prv_data *pdata)
1153 {
1154 struct xgbe_phy_data *phy_data = pdata->phy_data;
1155 @@ -1019,6 +1079,10 @@ static void xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data *pdata)
1156 if (sfp_base[XGBE_SFP_BASE_EXT_ID] != XGBE_SFP_EXT_ID_SFP)
1157 return;
1158
1159 + /* Update transceiver signals (eeprom extd/options) */
1160 + phy_data->sfp_tx_fault = xgbe_phy_check_sfp_tx_fault(phy_data);
1161 + phy_data->sfp_rx_los = xgbe_phy_check_sfp_rx_los(phy_data);
1162 +
1163 if (xgbe_phy_sfp_parse_quirks(pdata))
1164 return;
1165
1166 @@ -1184,7 +1248,6 @@ static int xgbe_phy_sfp_read_eeprom(struct xgbe_prv_data *pdata)
1167 static void xgbe_phy_sfp_signals(struct xgbe_prv_data *pdata)
1168 {
1169 struct xgbe_phy_data *phy_data = pdata->phy_data;
1170 - unsigned int gpio_input;
1171 u8 gpio_reg, gpio_ports[2];
1172 int ret;
1173
1174 @@ -1199,23 +1262,9 @@ static void xgbe_phy_sfp_signals(struct xgbe_prv_data *pdata)
1175 return;
1176 }
1177
1178 - gpio_input = (gpio_ports[1] << 8) | gpio_ports[0];
1179 -
1180 - if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_MOD_ABSENT) {
1181 - /* No GPIO, just assume the module is present for now */
1182 - phy_data->sfp_mod_absent = 0;
1183 - } else {
1184 - if (!(gpio_input & (1 << phy_data->sfp_gpio_mod_absent)))
1185 - phy_data->sfp_mod_absent = 0;
1186 - }
1187 -
1188 - if (!(phy_data->sfp_gpio_mask & XGBE_GPIO_NO_RX_LOS) &&
1189 - (gpio_input & (1 << phy_data->sfp_gpio_rx_los)))
1190 - phy_data->sfp_rx_los = 1;
1191 + phy_data->sfp_gpio_inputs = (gpio_ports[1] << 8) | gpio_ports[0];
1192
1193 - if (!(phy_data->sfp_gpio_mask & XGBE_GPIO_NO_TX_FAULT) &&
1194 - (gpio_input & (1 << phy_data->sfp_gpio_tx_fault)))
1195 - phy_data->sfp_tx_fault = 1;
1196 + phy_data->sfp_mod_absent = xgbe_phy_check_sfp_mod_absent(phy_data);
1197 }
1198
1199 static void xgbe_phy_sfp_mod_absent(struct xgbe_prv_data *pdata)
1200 @@ -2361,7 +2410,7 @@ static int xgbe_phy_link_status(struct xgbe_prv_data *pdata, int *an_restart)
1201 return 1;
1202
1203 /* No link, attempt a receiver reset cycle */
1204 - if (phy_data->rrc_count++) {
1205 + if (phy_data->rrc_count++ > XGBE_RRC_FREQUENCY) {
1206 phy_data->rrc_count = 0;
1207 xgbe_phy_rrc(pdata);
1208 }
1209 @@ -2669,6 +2718,103 @@ static bool xgbe_phy_port_enabled(struct xgbe_prv_data *pdata)
1210 return true;
1211 }
1212
1213 +static void xgbe_phy_cdr_track(struct xgbe_prv_data *pdata)
1214 +{
1215 + struct xgbe_phy_data *phy_data = pdata->phy_data;
1216 +
1217 + if (!pdata->debugfs_an_cdr_workaround)
1218 + return;
1219 +
1220 + if (!phy_data->phy_cdr_notrack)
1221 + return;
1222 +
1223 + usleep_range(phy_data->phy_cdr_delay,
1224 + phy_data->phy_cdr_delay + 500);
1225 +
1226 + XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_CDR_CONTROL,
1227 + XGBE_PMA_CDR_TRACK_EN_MASK,
1228 + XGBE_PMA_CDR_TRACK_EN_ON);
1229 +
1230 + phy_data->phy_cdr_notrack = 0;
1231 +}
1232 +
1233 +static void xgbe_phy_cdr_notrack(struct xgbe_prv_data *pdata)
1234 +{
1235 + struct xgbe_phy_data *phy_data = pdata->phy_data;
1236 +
1237 + if (!pdata->debugfs_an_cdr_workaround)
1238 + return;
1239 +
1240 + if (phy_data->phy_cdr_notrack)
1241 + return;
1242 +
1243 + XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_CDR_CONTROL,
1244 + XGBE_PMA_CDR_TRACK_EN_MASK,
1245 + XGBE_PMA_CDR_TRACK_EN_OFF);
1246 +
1247 + xgbe_phy_rrc(pdata);
1248 +
1249 + phy_data->phy_cdr_notrack = 1;
1250 +}
1251 +
1252 +static void xgbe_phy_kr_training_post(struct xgbe_prv_data *pdata)
1253 +{
1254 + if (!pdata->debugfs_an_cdr_track_early)
1255 + xgbe_phy_cdr_track(pdata);
1256 +}
1257 +
1258 +static void xgbe_phy_kr_training_pre(struct xgbe_prv_data *pdata)
1259 +{
1260 + if (pdata->debugfs_an_cdr_track_early)
1261 + xgbe_phy_cdr_track(pdata);
1262 +}
1263 +
1264 +static void xgbe_phy_an_post(struct xgbe_prv_data *pdata)
1265 +{
1266 + struct xgbe_phy_data *phy_data = pdata->phy_data;
1267 +
1268 + switch (pdata->an_mode) {
1269 + case XGBE_AN_MODE_CL73:
1270 + case XGBE_AN_MODE_CL73_REDRV:
1271 + if (phy_data->cur_mode != XGBE_MODE_KR)
1272 + break;
1273 +
1274 + xgbe_phy_cdr_track(pdata);
1275 +
1276 + switch (pdata->an_result) {
1277 + case XGBE_AN_READY:
1278 + case XGBE_AN_COMPLETE:
1279 + break;
1280 + default:
1281 + if (phy_data->phy_cdr_delay < XGBE_CDR_DELAY_MAX)
1282 + phy_data->phy_cdr_delay += XGBE_CDR_DELAY_INC;
1283 + else
1284 + phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT;
1285 + break;
1286 + }
1287 + break;
1288 + default:
1289 + break;
1290 + }
1291 +}
1292 +
1293 +static void xgbe_phy_an_pre(struct xgbe_prv_data *pdata)
1294 +{
1295 + struct xgbe_phy_data *phy_data = pdata->phy_data;
1296 +
1297 + switch (pdata->an_mode) {
1298 + case XGBE_AN_MODE_CL73:
1299 + case XGBE_AN_MODE_CL73_REDRV:
1300 + if (phy_data->cur_mode != XGBE_MODE_KR)
1301 + break;
1302 +
1303 + xgbe_phy_cdr_notrack(pdata);
1304 + break;
1305 + default:
1306 + break;
1307 + }
1308 +}
1309 +
1310 static void xgbe_phy_stop(struct xgbe_prv_data *pdata)
1311 {
1312 struct xgbe_phy_data *phy_data = pdata->phy_data;
1313 @@ -2680,6 +2826,9 @@ static void xgbe_phy_stop(struct xgbe_prv_data *pdata)
1314 xgbe_phy_sfp_reset(phy_data);
1315 xgbe_phy_sfp_mod_absent(pdata);
1316
1317 + /* Reset CDR support */
1318 + xgbe_phy_cdr_track(pdata);
1319 +
1320 /* Power off the PHY */
1321 xgbe_phy_power_off(pdata);
1322
1323 @@ -2712,6 +2861,9 @@ static int xgbe_phy_start(struct xgbe_prv_data *pdata)
1324 /* Start in highest supported mode */
1325 xgbe_phy_set_mode(pdata, phy_data->start_mode);
1326
1327 + /* Reset CDR support */
1328 + xgbe_phy_cdr_track(pdata);
1329 +
1330 /* After starting the I2C controller, we can check for an SFP */
1331 switch (phy_data->port_mode) {
1332 case XGBE_PORT_MODE_SFP:
1333 @@ -3019,6 +3171,8 @@ static int xgbe_phy_init(struct xgbe_prv_data *pdata)
1334 }
1335 }
1336
1337 + phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT;
1338 +
1339 /* Register for driving external PHYs */
1340 mii = devm_mdiobus_alloc(pdata->dev);
1341 if (!mii) {
1342 @@ -3071,4 +3225,10 @@ void xgbe_init_function_ptrs_phy_v2(struct xgbe_phy_if *phy_if)
1343 phy_impl->an_advertising = xgbe_phy_an_advertising;
1344
1345 phy_impl->an_outcome = xgbe_phy_an_outcome;
1346 +
1347 + phy_impl->an_pre = xgbe_phy_an_pre;
1348 + phy_impl->an_post = xgbe_phy_an_post;
1349 +
1350 + phy_impl->kr_training_pre = xgbe_phy_kr_training_pre;
1351 + phy_impl->kr_training_post = xgbe_phy_kr_training_post;
1352 }
1353 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h
1354 index ad102c8bac7b..95d4b56448c6 100644
1355 --- a/drivers/net/ethernet/amd/xgbe/xgbe.h
1356 +++ b/drivers/net/ethernet/amd/xgbe/xgbe.h
1357 @@ -833,6 +833,7 @@ struct xgbe_hw_if {
1358 /* This structure represents implementation specific routines for an
1359 * implementation of a PHY. All routines are required unless noted below.
1360 * Optional routines:
1361 + * an_pre, an_post
1362 * kr_training_pre, kr_training_post
1363 */
1364 struct xgbe_phy_impl_if {
1365 @@ -875,6 +876,10 @@ struct xgbe_phy_impl_if {
1366 /* Process results of auto-negotiation */
1367 enum xgbe_mode (*an_outcome)(struct xgbe_prv_data *);
1368
1369 + /* Pre/Post auto-negotiation support */
1370 + void (*an_pre)(struct xgbe_prv_data *);
1371 + void (*an_post)(struct xgbe_prv_data *);
1372 +
1373 /* Pre/Post KR training enablement support */
1374 void (*kr_training_pre)(struct xgbe_prv_data *);
1375 void (*kr_training_post)(struct xgbe_prv_data *);
1376 @@ -989,6 +994,7 @@ struct xgbe_version_data {
1377 unsigned int irq_reissue_support;
1378 unsigned int tx_desc_prefetch;
1379 unsigned int rx_desc_prefetch;
1380 + unsigned int an_cdr_workaround;
1381 };
1382
1383 struct xgbe_vxlan_data {
1384 @@ -1257,6 +1263,9 @@ struct xgbe_prv_data {
1385 unsigned int debugfs_xprop_reg;
1386
1387 unsigned int debugfs_xi2c_reg;
1388 +
1389 + bool debugfs_an_cdr_workaround;
1390 + bool debugfs_an_cdr_track_early;
1391 };
1392
1393 /* Function prototypes*/
1394 diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
1395 index c96a92118b8b..32f6d2e24d66 100644
1396 --- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
1397 +++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
1398 @@ -951,9 +951,11 @@ void aq_nic_shutdown(struct aq_nic_s *self)
1399
1400 netif_device_detach(self->ndev);
1401
1402 - err = aq_nic_stop(self);
1403 - if (err < 0)
1404 - goto err_exit;
1405 + if (netif_running(self->ndev)) {
1406 + err = aq_nic_stop(self);
1407 + if (err < 0)
1408 + goto err_exit;
1409 + }
1410 aq_nic_deinit(self);
1411
1412 err_exit:
1413 diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c
1414 index d3b847ec7465..c58b2c227260 100644
1415 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c
1416 +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c
1417 @@ -48,6 +48,8 @@
1418 #define FORCE_FLASHLESS 0
1419
1420 static int hw_atl_utils_ver_match(u32 ver_expected, u32 ver_actual);
1421 +static int hw_atl_utils_mpi_set_state(struct aq_hw_s *self,
1422 + enum hal_atl_utils_fw_state_e state);
1423
1424 int hw_atl_utils_initfw(struct aq_hw_s *self, const struct aq_fw_ops **fw_ops)
1425 {
1426 @@ -247,6 +249,20 @@ int hw_atl_utils_soft_reset(struct aq_hw_s *self)
1427
1428 self->rbl_enabled = (boot_exit_code != 0);
1429
1430 + /* FW 1.x may bootup in an invalid POWER state (WOL feature).
1431 + * We should work around this by forcing its state back to DEINIT
1432 + */
1433 + if (!hw_atl_utils_ver_match(HW_ATL_FW_VER_1X,
1434 + aq_hw_read_reg(self,
1435 + HW_ATL_MPI_FW_VERSION))) {
1436 + int err = 0;
1437 +
1438 + hw_atl_utils_mpi_set_state(self, MPI_DEINIT);
1439 + AQ_HW_WAIT_FOR((aq_hw_read_reg(self, HW_ATL_MPI_STATE_ADR) &
1440 + HW_ATL_MPI_STATE_MSK) == MPI_DEINIT,
1441 + 10, 1000U);
1442 + }
1443 +
1444 if (self->rbl_enabled)
1445 return hw_atl_utils_soft_reset_rbl(self);
1446 else
1447 diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
1448 index 1801582076be..9442605f4fd4 100644
1449 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
1450 +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
1451 @@ -1874,22 +1874,39 @@ static char *bnxt_parse_pkglog(int desired_field, u8 *data, size_t datalen)
1452 return retval;
1453 }
1454
1455 -static char *bnxt_get_pkgver(struct net_device *dev, char *buf, size_t buflen)
1456 +static void bnxt_get_pkgver(struct net_device *dev)
1457 {
1458 + struct bnxt *bp = netdev_priv(dev);
1459 u16 index = 0;
1460 - u32 datalen;
1461 + char *pkgver;
1462 + u32 pkglen;
1463 + u8 *pkgbuf;
1464 + int len;
1465
1466 if (bnxt_find_nvram_item(dev, BNX_DIR_TYPE_PKG_LOG,
1467 BNX_DIR_ORDINAL_FIRST, BNX_DIR_EXT_NONE,
1468 - &index, NULL, &datalen) != 0)
1469 - return NULL;
1470 + &index, NULL, &pkglen) != 0)
1471 + return;
1472
1473 - memset(buf, 0, buflen);
1474 - if (bnxt_get_nvram_item(dev, index, 0, datalen, buf) != 0)
1475 - return NULL;
1476 + pkgbuf = kzalloc(pkglen, GFP_KERNEL);
1477 + if (!pkgbuf) {
1478 + dev_err(&bp->pdev->dev, "Unable to allocate memory for pkg version, length = %u\n",
1479 + pkglen);
1480 + return;
1481 + }
1482 +
1483 + if (bnxt_get_nvram_item(dev, index, 0, pkglen, pkgbuf))
1484 + goto err;
1485
1486 - return bnxt_parse_pkglog(BNX_PKG_LOG_FIELD_IDX_PKG_VERSION, buf,
1487 - datalen);
1488 + pkgver = bnxt_parse_pkglog(BNX_PKG_LOG_FIELD_IDX_PKG_VERSION, pkgbuf,
1489 + pkglen);
1490 + if (pkgver && *pkgver != 0 && isdigit(*pkgver)) {
1491 + len = strlen(bp->fw_ver_str);
1492 + snprintf(bp->fw_ver_str + len, FW_VER_STR_LEN - len - 1,
1493 + "/pkg %s", pkgver);
1494 + }
1495 +err:
1496 + kfree(pkgbuf);
1497 }
1498
1499 static int bnxt_get_eeprom(struct net_device *dev,
1500 @@ -2558,22 +2575,10 @@ void bnxt_ethtool_init(struct bnxt *bp)
1501 struct hwrm_selftest_qlist_input req = {0};
1502 struct bnxt_test_info *test_info;
1503 struct net_device *dev = bp->dev;
1504 - char *pkglog;
1505 int i, rc;
1506
1507 - pkglog = kzalloc(BNX_PKG_LOG_MAX_LENGTH, GFP_KERNEL);
1508 - if (pkglog) {
1509 - char *pkgver;
1510 - int len;
1511 + bnxt_get_pkgver(dev);
1512
1513 - pkgver = bnxt_get_pkgver(dev, pkglog, BNX_PKG_LOG_MAX_LENGTH);
1514 - if (pkgver && *pkgver != 0 && isdigit(*pkgver)) {
1515 - len = strlen(bp->fw_ver_str);
1516 - snprintf(bp->fw_ver_str + len, FW_VER_STR_LEN - len - 1,
1517 - "/pkg %s", pkgver);
1518 - }
1519 - kfree(pkglog);
1520 - }
1521 if (bp->hwrm_spec_code < 0x10704 || !BNXT_SINGLE_PF(bp))
1522 return;
1523
1524 diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_nvm_defs.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_nvm_defs.h
1525 index 73f2249555b5..83444811d3c6 100644
1526 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_nvm_defs.h
1527 +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_nvm_defs.h
1528 @@ -59,8 +59,6 @@ enum bnxt_nvm_directory_type {
1529 #define BNX_DIR_ATTR_NO_CHKSUM (1 << 0)
1530 #define BNX_DIR_ATTR_PROP_STREAM (1 << 1)
1531
1532 -#define BNX_PKG_LOG_MAX_LENGTH 4096
1533 -
1534 enum bnxnvm_pkglog_field_index {
1535 BNX_PKG_LOG_FIELD_IDX_INSTALLED_TIMESTAMP = 0,
1536 BNX_PKG_LOG_FIELD_IDX_PKG_DESCRIPTION = 1,
1537 diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
1538 index e9309fb9084b..21a21934e5bf 100644
1539 --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
1540 +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
1541 @@ -2889,6 +2889,7 @@ int i40e_ndo_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac)
1542 int ret = 0;
1543 struct hlist_node *h;
1544 int bkt;
1545 + u8 i;
1546
1547 /* validate the request */
1548 if (vf_id >= pf->num_alloc_vfs) {
1549 @@ -2900,6 +2901,16 @@ int i40e_ndo_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac)
1550
1551 vf = &(pf->vf[vf_id]);
1552 vsi = pf->vsi[vf->lan_vsi_idx];
1553 +
1554 + /* When the VF is resetting wait until it is done.
1555 + * It can take up to 200 milliseconds,
1556 + * but wait for up to 300 milliseconds to be safe.
1557 + */
1558 + for (i = 0; i < 15; i++) {
1559 + if (test_bit(I40E_VF_STATE_INIT, &vf->vf_states))
1560 + break;
1561 + msleep(20);
1562 + }
1563 if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) {
1564 dev_err(&pf->pdev->dev, "VF %d still in reset. Try again.\n",
1565 vf_id);
1566 diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
1567 index 5a1668cdb461..7f1083ce23da 100644
1568 --- a/drivers/net/ethernet/marvell/mvpp2.c
1569 +++ b/drivers/net/ethernet/marvell/mvpp2.c
1570 @@ -838,6 +838,8 @@ enum mvpp2_bm_type {
1571
1572 #define MVPP2_MIB_COUNTERS_STATS_DELAY (1 * HZ)
1573
1574 +#define MVPP2_DESC_DMA_MASK DMA_BIT_MASK(40)
1575 +
1576 /* Definitions */
1577
1578 /* Shared Packet Processor resources */
1579 @@ -1336,7 +1338,7 @@ static dma_addr_t mvpp2_txdesc_dma_addr_get(struct mvpp2_port *port,
1580 if (port->priv->hw_version == MVPP21)
1581 return tx_desc->pp21.buf_dma_addr;
1582 else
1583 - return tx_desc->pp22.buf_dma_addr_ptp & GENMASK_ULL(40, 0);
1584 + return tx_desc->pp22.buf_dma_addr_ptp & MVPP2_DESC_DMA_MASK;
1585 }
1586
1587 static void mvpp2_txdesc_dma_addr_set(struct mvpp2_port *port,
1588 @@ -1354,7 +1356,7 @@ static void mvpp2_txdesc_dma_addr_set(struct mvpp2_port *port,
1589 } else {
1590 u64 val = (u64)addr;
1591
1592 - tx_desc->pp22.buf_dma_addr_ptp &= ~GENMASK_ULL(40, 0);
1593 + tx_desc->pp22.buf_dma_addr_ptp &= ~MVPP2_DESC_DMA_MASK;
1594 tx_desc->pp22.buf_dma_addr_ptp |= val;
1595 tx_desc->pp22.packet_offset = offset;
1596 }
1597 @@ -1414,7 +1416,7 @@ static dma_addr_t mvpp2_rxdesc_dma_addr_get(struct mvpp2_port *port,
1598 if (port->priv->hw_version == MVPP21)
1599 return rx_desc->pp21.buf_dma_addr;
1600 else
1601 - return rx_desc->pp22.buf_dma_addr_key_hash & GENMASK_ULL(40, 0);
1602 + return rx_desc->pp22.buf_dma_addr_key_hash & MVPP2_DESC_DMA_MASK;
1603 }
1604
1605 static unsigned long mvpp2_rxdesc_cookie_get(struct mvpp2_port *port,
1606 @@ -1423,7 +1425,7 @@ static unsigned long mvpp2_rxdesc_cookie_get(struct mvpp2_port *port,
1607 if (port->priv->hw_version == MVPP21)
1608 return rx_desc->pp21.buf_cookie;
1609 else
1610 - return rx_desc->pp22.buf_cookie_misc & GENMASK_ULL(40, 0);
1611 + return rx_desc->pp22.buf_cookie_misc & MVPP2_DESC_DMA_MASK;
1612 }
1613
1614 static size_t mvpp2_rxdesc_size_get(struct mvpp2_port *port,
1615 @@ -8347,7 +8349,7 @@ static int mvpp2_probe(struct platform_device *pdev)
1616 }
1617
1618 if (priv->hw_version == MVPP22) {
1619 - err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(40));
1620 + err = dma_set_mask(&pdev->dev, MVPP2_DESC_DMA_MASK);
1621 if (err)
1622 goto err_mg_clk;
1623 /* Sadly, the BM pools all share the same register to
1624 diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4.h b/drivers/net/ethernet/stmicro/stmmac/dwmac4.h
1625 index 7761a26ec9c5..e7565416639b 100644
1626 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4.h
1627 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4.h
1628 @@ -343,7 +343,7 @@ enum power_event {
1629 #define MTL_RX_OVERFLOW_INT BIT(16)
1630
1631 /* Default operating mode of the MAC */
1632 -#define GMAC_CORE_INIT (GMAC_CONFIG_JD | GMAC_CONFIG_PS | GMAC_CONFIG_ACS | \
1633 +#define GMAC_CORE_INIT (GMAC_CONFIG_JD | GMAC_CONFIG_PS | \
1634 GMAC_CONFIG_BE | GMAC_CONFIG_DCRS)
1635
1636 /* To dump the core regs excluding the Address Registers */
1637 diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
1638 index 63795ecafc8d..26dfb75e927a 100644
1639 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
1640 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
1641 @@ -30,13 +30,6 @@ static void dwmac4_core_init(struct mac_device_info *hw,
1642
1643 value |= GMAC_CORE_INIT;
1644
1645 - /* Clear ACS bit because Ethernet switch tagging formats such as
1646 - * Broadcom tags can look like invalid LLC/SNAP packets and cause the
1647 - * hardware to truncate packets on reception.
1648 - */
1649 - if (netdev_uses_dsa(dev))
1650 - value &= ~GMAC_CONFIG_ACS;
1651 -
1652 if (mtu > 1500)
1653 value |= GMAC_CONFIG_2K;
1654 if (mtu > 2000)
1655 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1656 index 7ad841434ec8..3ea343b45d93 100644
1657 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1658 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1659 @@ -3435,8 +3435,13 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
1660
1661 /* ACS is set; GMAC core strips PAD/FCS for IEEE 802.3
1662 * Type frames (LLC/LLC-SNAP)
1663 + *
1664 + * llc_snap is never checked in GMAC >= 4, so this ACS
1665 + * feature is always disabled and packets need to be
1666 + * stripped manually.
1667 */
1668 - if (unlikely(status != llc_snap))
1669 + if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00) ||
1670 + unlikely(status != llc_snap))
1671 frame_len -= ETH_FCS_LEN;
1672
1673 if (netif_msg_rx_status(priv)) {
1674 diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
1675 index b2b30c9df037..33c35b2df7d5 100644
1676 --- a/drivers/net/ethernet/ti/cpsw.c
1677 +++ b/drivers/net/ethernet/ti/cpsw.c
1678 @@ -125,7 +125,7 @@ do { \
1679
1680 #define RX_PRIORITY_MAPPING 0x76543210
1681 #define TX_PRIORITY_MAPPING 0x33221100
1682 -#define CPDMA_TX_PRIORITY_MAP 0x01234567
1683 +#define CPDMA_TX_PRIORITY_MAP 0x76543210
1684
1685 #define CPSW_VLAN_AWARE BIT(1)
1686 #define CPSW_ALE_VLAN_AWARE 1
1687 diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
1688 index 9cbb0c8a896a..7de88b33d5b9 100644
1689 --- a/drivers/net/macsec.c
1690 +++ b/drivers/net/macsec.c
1691 @@ -3277,7 +3277,7 @@ static int macsec_newlink(struct net *net, struct net_device *dev,
1692
1693 err = netdev_upper_dev_link(real_dev, dev, extack);
1694 if (err < 0)
1695 - goto put_dev;
1696 + goto unregister;
1697
1698 /* need to be already registered so that ->init has run and
1699 * the MAC addr is set
1700 @@ -3316,8 +3316,7 @@ static int macsec_newlink(struct net *net, struct net_device *dev,
1701 macsec_del_dev(macsec);
1702 unlink:
1703 netdev_upper_dev_unlink(real_dev, dev);
1704 -put_dev:
1705 - dev_put(real_dev);
1706 +unregister:
1707 unregister_netdevice(dev);
1708 return err;
1709 }
1710 diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c
1711 index 5aa59f41bf8c..71e2aef6b7a1 100644
1712 --- a/drivers/net/ppp/pppoe.c
1713 +++ b/drivers/net/ppp/pppoe.c
1714 @@ -620,6 +620,10 @@ static int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr,
1715 lock_sock(sk);
1716
1717 error = -EINVAL;
1718 +
1719 + if (sockaddr_len != sizeof(struct sockaddr_pppox))
1720 + goto end;
1721 +
1722 if (sp->sa_protocol != PX_PROTO_OE)
1723 goto end;
1724
1725 diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
1726 index befed2d22bf4..3175f7410baf 100644
1727 --- a/drivers/net/team/team.c
1728 +++ b/drivers/net/team/team.c
1729 @@ -261,6 +261,17 @@ static void __team_option_inst_mark_removed_port(struct team *team,
1730 }
1731 }
1732
1733 +static bool __team_option_inst_tmp_find(const struct list_head *opts,
1734 + const struct team_option_inst *needle)
1735 +{
1736 + struct team_option_inst *opt_inst;
1737 +
1738 + list_for_each_entry(opt_inst, opts, tmp_list)
1739 + if (opt_inst == needle)
1740 + return true;
1741 + return false;
1742 +}
1743 +
1744 static int __team_options_register(struct team *team,
1745 const struct team_option *option,
1746 size_t option_count)
1747 @@ -1061,14 +1072,11 @@ static void team_port_leave(struct team *team, struct team_port *port)
1748 }
1749
1750 #ifdef CONFIG_NET_POLL_CONTROLLER
1751 -static int team_port_enable_netpoll(struct team *team, struct team_port *port)
1752 +static int __team_port_enable_netpoll(struct team_port *port)
1753 {
1754 struct netpoll *np;
1755 int err;
1756
1757 - if (!team->dev->npinfo)
1758 - return 0;
1759 -
1760 np = kzalloc(sizeof(*np), GFP_KERNEL);
1761 if (!np)
1762 return -ENOMEM;
1763 @@ -1082,6 +1090,14 @@ static int team_port_enable_netpoll(struct team *team, struct team_port *port)
1764 return err;
1765 }
1766
1767 +static int team_port_enable_netpoll(struct team_port *port)
1768 +{
1769 + if (!port->team->dev->npinfo)
1770 + return 0;
1771 +
1772 + return __team_port_enable_netpoll(port);
1773 +}
1774 +
1775 static void team_port_disable_netpoll(struct team_port *port)
1776 {
1777 struct netpoll *np = port->np;
1778 @@ -1096,7 +1112,7 @@ static void team_port_disable_netpoll(struct team_port *port)
1779 kfree(np);
1780 }
1781 #else
1782 -static int team_port_enable_netpoll(struct team *team, struct team_port *port)
1783 +static int team_port_enable_netpoll(struct team_port *port)
1784 {
1785 return 0;
1786 }
1787 @@ -1204,7 +1220,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
1788 goto err_vids_add;
1789 }
1790
1791 - err = team_port_enable_netpoll(team, port);
1792 + err = team_port_enable_netpoll(port);
1793 if (err) {
1794 netdev_err(dev, "Failed to enable netpoll on device %s\n",
1795 portname);
1796 @@ -1901,7 +1917,7 @@ static int team_netpoll_setup(struct net_device *dev,
1797
1798 mutex_lock(&team->lock);
1799 list_for_each_entry(port, &team->port_list, list) {
1800 - err = team_port_enable_netpoll(team, port);
1801 + err = __team_port_enable_netpoll(port);
1802 if (err) {
1803 __team_netpoll_cleanup(team);
1804 break;
1805 @@ -2562,6 +2578,14 @@ static int team_nl_cmd_options_set(struct sk_buff *skb, struct genl_info *info)
1806 if (err)
1807 goto team_put;
1808 opt_inst->changed = true;
1809 +
1810 + /* dumb/evil user-space can send us duplicate opt,
1811 + * keep only the last one
1812 + */
1813 + if (__team_option_inst_tmp_find(&opt_inst_list,
1814 + opt_inst))
1815 + continue;
1816 +
1817 list_add(&opt_inst->tmp_list, &opt_inst_list);
1818 }
1819 if (!opt_found) {
1820 diff --git a/drivers/net/tun.c b/drivers/net/tun.c
1821 index 28cfa642e39a..6c7bdd0c361a 100644
1822 --- a/drivers/net/tun.c
1823 +++ b/drivers/net/tun.c
1824 @@ -1094,12 +1094,7 @@ static netdev_tx_t tun_net_xmit(struct sk_buff *skb, struct net_device *dev)
1825 goto drop;
1826
1827 len = run_ebpf_filter(tun, skb, len);
1828 -
1829 - /* Trim extra bytes since we may insert vlan proto & TCI
1830 - * in tun_put_user().
1831 - */
1832 - len -= skb_vlan_tag_present(skb) ? sizeof(struct veth) : 0;
1833 - if (len <= 0 || pskb_trim(skb, len))
1834 + if (len == 0 || pskb_trim(skb, len))
1835 goto drop;
1836
1837 if (unlikely(skb_orphan_frags_rx(skb, GFP_ATOMIC)))
1838 diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
1839 index ca066b785e9f..c853e7410f5a 100644
1840 --- a/drivers/net/usb/qmi_wwan.c
1841 +++ b/drivers/net/usb/qmi_wwan.c
1842 @@ -1107,6 +1107,7 @@ static const struct usb_device_id products[] = {
1843 {QMI_FIXED_INTF(0x1435, 0xd181, 3)}, /* Wistron NeWeb D18Q1 */
1844 {QMI_FIXED_INTF(0x1435, 0xd181, 4)}, /* Wistron NeWeb D18Q1 */
1845 {QMI_FIXED_INTF(0x1435, 0xd181, 5)}, /* Wistron NeWeb D18Q1 */
1846 + {QMI_FIXED_INTF(0x1435, 0xd191, 4)}, /* Wistron NeWeb D19Q1 */
1847 {QMI_FIXED_INTF(0x16d8, 0x6003, 0)}, /* CMOTech 6003 */
1848 {QMI_FIXED_INTF(0x16d8, 0x6007, 0)}, /* CMOTech CHE-628S */
1849 {QMI_FIXED_INTF(0x16d8, 0x6008, 0)}, /* CMOTech CMU-301 */
1850 diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
1851 index 23374603e4d9..aa21b2225679 100644
1852 --- a/drivers/net/virtio_net.c
1853 +++ b/drivers/net/virtio_net.c
1854 @@ -147,6 +147,17 @@ struct receive_queue {
1855 struct xdp_rxq_info xdp_rxq;
1856 };
1857
1858 +/* Control VQ buffers: protected by the rtnl lock */
1859 +struct control_buf {
1860 + struct virtio_net_ctrl_hdr hdr;
1861 + virtio_net_ctrl_ack status;
1862 + struct virtio_net_ctrl_mq mq;
1863 + u8 promisc;
1864 + u8 allmulti;
1865 + __virtio16 vid;
1866 + u64 offloads;
1867 +};
1868 +
1869 struct virtnet_info {
1870 struct virtio_device *vdev;
1871 struct virtqueue *cvq;
1872 @@ -192,14 +203,7 @@ struct virtnet_info {
1873 struct hlist_node node;
1874 struct hlist_node node_dead;
1875
1876 - /* Control VQ buffers: protected by the rtnl lock */
1877 - struct virtio_net_ctrl_hdr ctrl_hdr;
1878 - virtio_net_ctrl_ack ctrl_status;
1879 - struct virtio_net_ctrl_mq ctrl_mq;
1880 - u8 ctrl_promisc;
1881 - u8 ctrl_allmulti;
1882 - u16 ctrl_vid;
1883 - u64 ctrl_offloads;
1884 + struct control_buf *ctrl;
1885
1886 /* Ethtool settings */
1887 u8 duplex;
1888 @@ -1269,7 +1273,9 @@ static int virtnet_poll(struct napi_struct *napi, int budget)
1889 {
1890 struct receive_queue *rq =
1891 container_of(napi, struct receive_queue, napi);
1892 - unsigned int received;
1893 + struct virtnet_info *vi = rq->vq->vdev->priv;
1894 + struct send_queue *sq;
1895 + unsigned int received, qp;
1896 bool xdp_xmit = false;
1897
1898 virtnet_poll_cleantx(rq);
1899 @@ -1280,8 +1286,13 @@ static int virtnet_poll(struct napi_struct *napi, int budget)
1900 if (received < budget)
1901 virtqueue_napi_complete(napi, rq->vq, received);
1902
1903 - if (xdp_xmit)
1904 + if (xdp_xmit) {
1905 + qp = vi->curr_queue_pairs - vi->xdp_queue_pairs +
1906 + smp_processor_id();
1907 + sq = &vi->sq[qp];
1908 + virtqueue_kick(sq->vq);
1909 xdp_do_flush_map();
1910 + }
1911
1912 return received;
1913 }
1914 @@ -1454,25 +1465,25 @@ static bool virtnet_send_command(struct virtnet_info *vi, u8 class, u8 cmd,
1915 /* Caller should know better */
1916 BUG_ON(!virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VQ));
1917
1918 - vi->ctrl_status = ~0;
1919 - vi->ctrl_hdr.class = class;
1920 - vi->ctrl_hdr.cmd = cmd;
1921 + vi->ctrl->status = ~0;
1922 + vi->ctrl->hdr.class = class;
1923 + vi->ctrl->hdr.cmd = cmd;
1924 /* Add header */
1925 - sg_init_one(&hdr, &vi->ctrl_hdr, sizeof(vi->ctrl_hdr));
1926 + sg_init_one(&hdr, &vi->ctrl->hdr, sizeof(vi->ctrl->hdr));
1927 sgs[out_num++] = &hdr;
1928
1929 if (out)
1930 sgs[out_num++] = out;
1931
1932 /* Add return status. */
1933 - sg_init_one(&stat, &vi->ctrl_status, sizeof(vi->ctrl_status));
1934 + sg_init_one(&stat, &vi->ctrl->status, sizeof(vi->ctrl->status));
1935 sgs[out_num] = &stat;
1936
1937 BUG_ON(out_num + 1 > ARRAY_SIZE(sgs));
1938 virtqueue_add_sgs(vi->cvq, sgs, out_num, 1, vi, GFP_ATOMIC);
1939
1940 if (unlikely(!virtqueue_kick(vi->cvq)))
1941 - return vi->ctrl_status == VIRTIO_NET_OK;
1942 + return vi->ctrl->status == VIRTIO_NET_OK;
1943
1944 /* Spin for a response, the kick causes an ioport write, trapping
1945 * into the hypervisor, so the request should be handled immediately.
1946 @@ -1481,7 +1492,7 @@ static bool virtnet_send_command(struct virtnet_info *vi, u8 class, u8 cmd,
1947 !virtqueue_is_broken(vi->cvq))
1948 cpu_relax();
1949
1950 - return vi->ctrl_status == VIRTIO_NET_OK;
1951 + return vi->ctrl->status == VIRTIO_NET_OK;
1952 }
1953
1954 static int virtnet_set_mac_address(struct net_device *dev, void *p)
1955 @@ -1593,8 +1604,8 @@ static int _virtnet_set_queues(struct virtnet_info *vi, u16 queue_pairs)
1956 if (!vi->has_cvq || !virtio_has_feature(vi->vdev, VIRTIO_NET_F_MQ))
1957 return 0;
1958
1959 - vi->ctrl_mq.virtqueue_pairs = cpu_to_virtio16(vi->vdev, queue_pairs);
1960 - sg_init_one(&sg, &vi->ctrl_mq, sizeof(vi->ctrl_mq));
1961 + vi->ctrl->mq.virtqueue_pairs = cpu_to_virtio16(vi->vdev, queue_pairs);
1962 + sg_init_one(&sg, &vi->ctrl->mq, sizeof(vi->ctrl->mq));
1963
1964 if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_MQ,
1965 VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET, &sg)) {
1966 @@ -1653,22 +1664,22 @@ static void virtnet_set_rx_mode(struct net_device *dev)
1967 if (!virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_RX))
1968 return;
1969
1970 - vi->ctrl_promisc = ((dev->flags & IFF_PROMISC) != 0);
1971 - vi->ctrl_allmulti = ((dev->flags & IFF_ALLMULTI) != 0);
1972 + vi->ctrl->promisc = ((dev->flags & IFF_PROMISC) != 0);
1973 + vi->ctrl->allmulti = ((dev->flags & IFF_ALLMULTI) != 0);
1974
1975 - sg_init_one(sg, &vi->ctrl_promisc, sizeof(vi->ctrl_promisc));
1976 + sg_init_one(sg, &vi->ctrl->promisc, sizeof(vi->ctrl->promisc));
1977
1978 if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_RX,
1979 VIRTIO_NET_CTRL_RX_PROMISC, sg))
1980 dev_warn(&dev->dev, "Failed to %sable promisc mode.\n",
1981 - vi->ctrl_promisc ? "en" : "dis");
1982 + vi->ctrl->promisc ? "en" : "dis");
1983
1984 - sg_init_one(sg, &vi->ctrl_allmulti, sizeof(vi->ctrl_allmulti));
1985 + sg_init_one(sg, &vi->ctrl->allmulti, sizeof(vi->ctrl->allmulti));
1986
1987 if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_RX,
1988 VIRTIO_NET_CTRL_RX_ALLMULTI, sg))
1989 dev_warn(&dev->dev, "Failed to %sable allmulti mode.\n",
1990 - vi->ctrl_allmulti ? "en" : "dis");
1991 + vi->ctrl->allmulti ? "en" : "dis");
1992
1993 uc_count = netdev_uc_count(dev);
1994 mc_count = netdev_mc_count(dev);
1995 @@ -1714,8 +1725,8 @@ static int virtnet_vlan_rx_add_vid(struct net_device *dev,
1996 struct virtnet_info *vi = netdev_priv(dev);
1997 struct scatterlist sg;
1998
1999 - vi->ctrl_vid = vid;
2000 - sg_init_one(&sg, &vi->ctrl_vid, sizeof(vi->ctrl_vid));
2001 + vi->ctrl->vid = cpu_to_virtio16(vi->vdev, vid);
2002 + sg_init_one(&sg, &vi->ctrl->vid, sizeof(vi->ctrl->vid));
2003
2004 if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_VLAN,
2005 VIRTIO_NET_CTRL_VLAN_ADD, &sg))
2006 @@ -1729,8 +1740,8 @@ static int virtnet_vlan_rx_kill_vid(struct net_device *dev,
2007 struct virtnet_info *vi = netdev_priv(dev);
2008 struct scatterlist sg;
2009
2010 - vi->ctrl_vid = vid;
2011 - sg_init_one(&sg, &vi->ctrl_vid, sizeof(vi->ctrl_vid));
2012 + vi->ctrl->vid = cpu_to_virtio16(vi->vdev, vid);
2013 + sg_init_one(&sg, &vi->ctrl->vid, sizeof(vi->ctrl->vid));
2014
2015 if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_VLAN,
2016 VIRTIO_NET_CTRL_VLAN_DEL, &sg))
2017 @@ -2126,9 +2137,9 @@ static int virtnet_restore_up(struct virtio_device *vdev)
2018 static int virtnet_set_guest_offloads(struct virtnet_info *vi, u64 offloads)
2019 {
2020 struct scatterlist sg;
2021 - vi->ctrl_offloads = cpu_to_virtio64(vi->vdev, offloads);
2022 + vi->ctrl->offloads = cpu_to_virtio64(vi->vdev, offloads);
2023
2024 - sg_init_one(&sg, &vi->ctrl_offloads, sizeof(vi->ctrl_offloads));
2025 + sg_init_one(&sg, &vi->ctrl->offloads, sizeof(vi->ctrl->offloads));
2026
2027 if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_GUEST_OFFLOADS,
2028 VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET, &sg)) {
2029 @@ -2351,6 +2362,7 @@ static void virtnet_free_queues(struct virtnet_info *vi)
2030
2031 kfree(vi->rq);
2032 kfree(vi->sq);
2033 + kfree(vi->ctrl);
2034 }
2035
2036 static void _free_receive_bufs(struct virtnet_info *vi)
2037 @@ -2543,6 +2555,9 @@ static int virtnet_alloc_queues(struct virtnet_info *vi)
2038 {
2039 int i;
2040
2041 + vi->ctrl = kzalloc(sizeof(*vi->ctrl), GFP_KERNEL);
2042 + if (!vi->ctrl)
2043 + goto err_ctrl;
2044 vi->sq = kzalloc(sizeof(*vi->sq) * vi->max_queue_pairs, GFP_KERNEL);
2045 if (!vi->sq)
2046 goto err_sq;
2047 @@ -2571,6 +2586,8 @@ static int virtnet_alloc_queues(struct virtnet_info *vi)
2048 err_rq:
2049 kfree(vi->sq);
2050 err_sq:
2051 + kfree(vi->ctrl);
2052 +err_ctrl:
2053 return -ENOMEM;
2054 }
2055
2056 diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
2057 index e04937f44f33..9ebe2a689966 100644
2058 --- a/drivers/net/vmxnet3/vmxnet3_drv.c
2059 +++ b/drivers/net/vmxnet3/vmxnet3_drv.c
2060 @@ -1218,6 +1218,7 @@ vmxnet3_get_hdr_len(struct vmxnet3_adapter *adapter, struct sk_buff *skb,
2061 union {
2062 void *ptr;
2063 struct ethhdr *eth;
2064 + struct vlan_ethhdr *veth;
2065 struct iphdr *ipv4;
2066 struct ipv6hdr *ipv6;
2067 struct tcphdr *tcp;
2068 @@ -1228,16 +1229,24 @@ vmxnet3_get_hdr_len(struct vmxnet3_adapter *adapter, struct sk_buff *skb,
2069 if (unlikely(sizeof(struct iphdr) + sizeof(struct tcphdr) > maplen))
2070 return 0;
2071
2072 + if (skb->protocol == cpu_to_be16(ETH_P_8021Q) ||
2073 + skb->protocol == cpu_to_be16(ETH_P_8021AD))
2074 + hlen = sizeof(struct vlan_ethhdr);
2075 + else
2076 + hlen = sizeof(struct ethhdr);
2077 +
2078 hdr.eth = eth_hdr(skb);
2079 if (gdesc->rcd.v4) {
2080 - BUG_ON(hdr.eth->h_proto != htons(ETH_P_IP));
2081 - hdr.ptr += sizeof(struct ethhdr);
2082 + BUG_ON(hdr.eth->h_proto != htons(ETH_P_IP) &&
2083 + hdr.veth->h_vlan_encapsulated_proto != htons(ETH_P_IP));
2084 + hdr.ptr += hlen;
2085 BUG_ON(hdr.ipv4->protocol != IPPROTO_TCP);
2086 hlen = hdr.ipv4->ihl << 2;
2087 hdr.ptr += hdr.ipv4->ihl << 2;
2088 } else if (gdesc->rcd.v6) {
2089 - BUG_ON(hdr.eth->h_proto != htons(ETH_P_IPV6));
2090 - hdr.ptr += sizeof(struct ethhdr);
2091 + BUG_ON(hdr.eth->h_proto != htons(ETH_P_IPV6) &&
2092 + hdr.veth->h_vlan_encapsulated_proto != htons(ETH_P_IPV6));
2093 + hdr.ptr += hlen;
2094 /* Use an estimated value, since we also need to handle
2095 * TSO case.
2096 */
2097 diff --git a/drivers/net/vmxnet3/vmxnet3_int.h b/drivers/net/vmxnet3/vmxnet3_int.h
2098 index 59ec34052a65..a3326463b71f 100644
2099 --- a/drivers/net/vmxnet3/vmxnet3_int.h
2100 +++ b/drivers/net/vmxnet3/vmxnet3_int.h
2101 @@ -69,10 +69,10 @@
2102 /*
2103 * Version numbers
2104 */
2105 -#define VMXNET3_DRIVER_VERSION_STRING "1.4.13.0-k"
2106 +#define VMXNET3_DRIVER_VERSION_STRING "1.4.14.0-k"
2107
2108 /* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */
2109 -#define VMXNET3_DRIVER_VERSION_NUM 0x01040d00
2110 +#define VMXNET3_DRIVER_VERSION_NUM 0x01040e00
2111
2112 #if defined(CONFIG_PCI_MSI)
2113 /* RSS only makes sense if MSI-X is supported. */
2114 diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
2115 index ebb3f1b046f3..800a86e2d671 100644
2116 --- a/drivers/net/wireless/ath/ath10k/mac.c
2117 +++ b/drivers/net/wireless/ath/ath10k/mac.c
2118 @@ -6028,9 +6028,8 @@ static void ath10k_sta_rc_update_wk(struct work_struct *wk)
2119 sta->addr, smps, err);
2120 }
2121
2122 - if (changed & IEEE80211_RC_SUPP_RATES_CHANGED ||
2123 - changed & IEEE80211_RC_NSS_CHANGED) {
2124 - ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM supp rates/nss\n",
2125 + if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) {
2126 + ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM supp rates\n",
2127 sta->addr);
2128
2129 err = ath10k_station_assoc(ar, arvif->vif, sta, true);
2130 diff --git a/drivers/pinctrl/intel/pinctrl-intel.c b/drivers/pinctrl/intel/pinctrl-intel.c
2131 index 96e73e30204e..5f111f0ee7ca 100644
2132 --- a/drivers/pinctrl/intel/pinctrl-intel.c
2133 +++ b/drivers/pinctrl/intel/pinctrl-intel.c
2134 @@ -425,18 +425,6 @@ static void __intel_gpio_set_direction(void __iomem *padcfg0, bool input)
2135 writel(value, padcfg0);
2136 }
2137
2138 -static void intel_gpio_set_gpio_mode(void __iomem *padcfg0)
2139 -{
2140 - u32 value;
2141 -
2142 - /* Put the pad into GPIO mode */
2143 - value = readl(padcfg0) & ~PADCFG0_PMODE_MASK;
2144 - /* Disable SCI/SMI/NMI generation */
2145 - value &= ~(PADCFG0_GPIROUTIOXAPIC | PADCFG0_GPIROUTSCI);
2146 - value &= ~(PADCFG0_GPIROUTSMI | PADCFG0_GPIROUTNMI);
2147 - writel(value, padcfg0);
2148 -}
2149 -
2150 static int intel_gpio_request_enable(struct pinctrl_dev *pctldev,
2151 struct pinctrl_gpio_range *range,
2152 unsigned pin)
2153 @@ -444,6 +432,7 @@ static int intel_gpio_request_enable(struct pinctrl_dev *pctldev,
2154 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
2155 void __iomem *padcfg0;
2156 unsigned long flags;
2157 + u32 value;
2158
2159 raw_spin_lock_irqsave(&pctrl->lock, flags);
2160
2161 @@ -453,7 +442,13 @@ static int intel_gpio_request_enable(struct pinctrl_dev *pctldev,
2162 }
2163
2164 padcfg0 = intel_get_padcfg(pctrl, pin, PADCFG0);
2165 - intel_gpio_set_gpio_mode(padcfg0);
2166 + /* Put the pad into GPIO mode */
2167 + value = readl(padcfg0) & ~PADCFG0_PMODE_MASK;
2168 + /* Disable SCI/SMI/NMI generation */
2169 + value &= ~(PADCFG0_GPIROUTIOXAPIC | PADCFG0_GPIROUTSCI);
2170 + value &= ~(PADCFG0_GPIROUTSMI | PADCFG0_GPIROUTNMI);
2171 + writel(value, padcfg0);
2172 +
2173 /* Disable TX buffer and enable RX (this will be input) */
2174 __intel_gpio_set_direction(padcfg0, true);
2175
2176 @@ -973,8 +968,6 @@ static int intel_gpio_irq_type(struct irq_data *d, unsigned type)
2177
2178 raw_spin_lock_irqsave(&pctrl->lock, flags);
2179
2180 - intel_gpio_set_gpio_mode(reg);
2181 -
2182 value = readl(reg);
2183
2184 value &= ~(PADCFG0_RXEVCFG_MASK | PADCFG0_RXINV);
2185 diff --git a/drivers/s390/block/dasd_alias.c b/drivers/s390/block/dasd_alias.c
2186 index 62f5f04d8f61..5e963fe0e38d 100644
2187 --- a/drivers/s390/block/dasd_alias.c
2188 +++ b/drivers/s390/block/dasd_alias.c
2189 @@ -592,13 +592,22 @@ static int _schedule_lcu_update(struct alias_lcu *lcu,
2190 int dasd_alias_add_device(struct dasd_device *device)
2191 {
2192 struct dasd_eckd_private *private = device->private;
2193 - struct alias_lcu *lcu;
2194 + __u8 uaddr = private->uid.real_unit_addr;
2195 + struct alias_lcu *lcu = private->lcu;
2196 unsigned long flags;
2197 int rc;
2198
2199 - lcu = private->lcu;
2200 rc = 0;
2201 spin_lock_irqsave(&lcu->lock, flags);
2202 + /*
2203 + * Check if device and lcu type differ. If so, the uac data may be
2204 + * outdated and needs to be updated.
2205 + */
2206 + if (private->uid.type != lcu->uac->unit[uaddr].ua_type) {
2207 + lcu->flags |= UPDATE_PENDING;
2208 + DBF_DEV_EVENT(DBF_WARNING, device, "%s",
2209 + "uid type mismatch - trigger rescan");
2210 + }
2211 if (!(lcu->flags & UPDATE_PENDING)) {
2212 rc = _add_device_to_lcu(lcu, device, device);
2213 if (rc)
2214 diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c
2215 index c08fc5a8df0c..aea0b25eff29 100644
2216 --- a/drivers/s390/cio/chsc.c
2217 +++ b/drivers/s390/cio/chsc.c
2218 @@ -452,6 +452,7 @@ static void chsc_process_sei_link_incident(struct chsc_sei_nt0_area *sei_area)
2219
2220 static void chsc_process_sei_res_acc(struct chsc_sei_nt0_area *sei_area)
2221 {
2222 + struct channel_path *chp;
2223 struct chp_link link;
2224 struct chp_id chpid;
2225 int status;
2226 @@ -464,10 +465,17 @@ static void chsc_process_sei_res_acc(struct chsc_sei_nt0_area *sei_area)
2227 chpid.id = sei_area->rsid;
2228 /* allocate a new channel path structure, if needed */
2229 status = chp_get_status(chpid);
2230 - if (status < 0)
2231 - chp_new(chpid);
2232 - else if (!status)
2233 + if (!status)
2234 return;
2235 +
2236 + if (status < 0) {
2237 + chp_new(chpid);
2238 + } else {
2239 + chp = chpid_to_chp(chpid);
2240 + mutex_lock(&chp->lock);
2241 + chp_update_desc(chp);
2242 + mutex_unlock(&chp->lock);
2243 + }
2244 memset(&link, 0, sizeof(struct chp_link));
2245 link.chpid = chpid;
2246 if ((sei_area->vf & 0xc0) != 0) {
2247 diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h
2248 index 959c65cf75d9..e338ce823c44 100644
2249 --- a/drivers/s390/net/qeth_core.h
2250 +++ b/drivers/s390/net/qeth_core.h
2251 @@ -565,7 +565,6 @@ enum qeth_ip_types {
2252 enum qeth_cmd_buffer_state {
2253 BUF_STATE_FREE,
2254 BUF_STATE_LOCKED,
2255 - BUF_STATE_PROCESSED,
2256 };
2257
2258 enum qeth_cq {
2259 @@ -609,7 +608,6 @@ struct qeth_channel {
2260 struct qeth_cmd_buffer iob[QETH_CMD_BUFFER_NO];
2261 atomic_t irq_pending;
2262 int io_buf_no;
2263 - int buf_no;
2264 };
2265
2266 /**
2267 diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
2268 index 3653bea38470..c11a083cd956 100644
2269 --- a/drivers/s390/net/qeth_core_main.c
2270 +++ b/drivers/s390/net/qeth_core_main.c
2271 @@ -821,7 +821,6 @@ void qeth_clear_cmd_buffers(struct qeth_channel *channel)
2272
2273 for (cnt = 0; cnt < QETH_CMD_BUFFER_NO; cnt++)
2274 qeth_release_buffer(channel, &channel->iob[cnt]);
2275 - channel->buf_no = 0;
2276 channel->io_buf_no = 0;
2277 }
2278 EXPORT_SYMBOL_GPL(qeth_clear_cmd_buffers);
2279 @@ -927,7 +926,6 @@ static int qeth_setup_channel(struct qeth_channel *channel)
2280 kfree(channel->iob[cnt].data);
2281 return -ENOMEM;
2282 }
2283 - channel->buf_no = 0;
2284 channel->io_buf_no = 0;
2285 atomic_set(&channel->irq_pending, 0);
2286 spin_lock_init(&channel->iob_lock);
2287 @@ -1103,11 +1101,9 @@ static void qeth_irq(struct ccw_device *cdev, unsigned long intparm,
2288 {
2289 int rc;
2290 int cstat, dstat;
2291 - struct qeth_cmd_buffer *buffer;
2292 struct qeth_channel *channel;
2293 struct qeth_card *card;
2294 struct qeth_cmd_buffer *iob;
2295 - __u8 index;
2296
2297 if (__qeth_check_irb_error(cdev, intparm, irb))
2298 return;
2299 @@ -1185,25 +1181,18 @@ static void qeth_irq(struct ccw_device *cdev, unsigned long intparm,
2300 channel->state = CH_STATE_RCD_DONE;
2301 goto out;
2302 }
2303 - if (intparm) {
2304 - buffer = (struct qeth_cmd_buffer *) __va((addr_t)intparm);
2305 - buffer->state = BUF_STATE_PROCESSED;
2306 - }
2307 if (channel == &card->data)
2308 return;
2309 if (channel == &card->read &&
2310 channel->state == CH_STATE_UP)
2311 __qeth_issue_next_read(card);
2312
2313 - iob = channel->iob;
2314 - index = channel->buf_no;
2315 - while (iob[index].state == BUF_STATE_PROCESSED) {
2316 - if (iob[index].callback != NULL)
2317 - iob[index].callback(channel, iob + index);
2318 -
2319 - index = (index + 1) % QETH_CMD_BUFFER_NO;
2320 + if (intparm) {
2321 + iob = (struct qeth_cmd_buffer *) __va((addr_t)intparm);
2322 + if (iob->callback)
2323 + iob->callback(iob->channel, iob);
2324 }
2325 - channel->buf_no = index;
2326 +
2327 out:
2328 wake_up(&card->wait_q);
2329 return;
2330 @@ -2217,7 +2206,6 @@ int qeth_send_control_data(struct qeth_card *card, int len,
2331 error:
2332 atomic_set(&card->write.irq_pending, 0);
2333 qeth_release_buffer(iob->channel, iob);
2334 - card->write.buf_no = (card->write.buf_no + 1) % QETH_CMD_BUFFER_NO;
2335 rc = reply->rc;
2336 qeth_put_reply(reply);
2337 return rc;
2338 @@ -3037,28 +3025,23 @@ static int qeth_send_startlan(struct qeth_card *card)
2339 return rc;
2340 }
2341
2342 -static int qeth_default_setadapterparms_cb(struct qeth_card *card,
2343 - struct qeth_reply *reply, unsigned long data)
2344 +static int qeth_setadpparms_inspect_rc(struct qeth_ipa_cmd *cmd)
2345 {
2346 - struct qeth_ipa_cmd *cmd;
2347 -
2348 - QETH_CARD_TEXT(card, 4, "defadpcb");
2349 -
2350 - cmd = (struct qeth_ipa_cmd *) data;
2351 - if (cmd->hdr.return_code == 0)
2352 + if (!cmd->hdr.return_code)
2353 cmd->hdr.return_code =
2354 cmd->data.setadapterparms.hdr.return_code;
2355 - return 0;
2356 + return cmd->hdr.return_code;
2357 }
2358
2359 static int qeth_query_setadapterparms_cb(struct qeth_card *card,
2360 struct qeth_reply *reply, unsigned long data)
2361 {
2362 - struct qeth_ipa_cmd *cmd;
2363 + struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
2364
2365 QETH_CARD_TEXT(card, 3, "quyadpcb");
2366 + if (qeth_setadpparms_inspect_rc(cmd))
2367 + return 0;
2368
2369 - cmd = (struct qeth_ipa_cmd *) data;
2370 if (cmd->data.setadapterparms.data.query_cmds_supp.lan_type & 0x7f) {
2371 card->info.link_type =
2372 cmd->data.setadapterparms.data.query_cmds_supp.lan_type;
2373 @@ -3066,7 +3049,7 @@ static int qeth_query_setadapterparms_cb(struct qeth_card *card,
2374 }
2375 card->options.adp.supported_funcs =
2376 cmd->data.setadapterparms.data.query_cmds_supp.supported_cmds;
2377 - return qeth_default_setadapterparms_cb(card, reply, (unsigned long)cmd);
2378 + return 0;
2379 }
2380
2381 static struct qeth_cmd_buffer *qeth_get_adapter_cmd(struct qeth_card *card,
2382 @@ -3158,22 +3141,20 @@ EXPORT_SYMBOL_GPL(qeth_query_ipassists);
2383 static int qeth_query_switch_attributes_cb(struct qeth_card *card,
2384 struct qeth_reply *reply, unsigned long data)
2385 {
2386 - struct qeth_ipa_cmd *cmd;
2387 - struct qeth_switch_info *sw_info;
2388 + struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
2389 struct qeth_query_switch_attributes *attrs;
2390 + struct qeth_switch_info *sw_info;
2391
2392 QETH_CARD_TEXT(card, 2, "qswiatcb");
2393 - cmd = (struct qeth_ipa_cmd *) data;
2394 - sw_info = (struct qeth_switch_info *)reply->param;
2395 - if (cmd->data.setadapterparms.hdr.return_code == 0) {
2396 - attrs = &cmd->data.setadapterparms.data.query_switch_attributes;
2397 - sw_info->capabilities = attrs->capabilities;
2398 - sw_info->settings = attrs->settings;
2399 - QETH_CARD_TEXT_(card, 2, "%04x%04x", sw_info->capabilities,
2400 - sw_info->settings);
2401 - }
2402 - qeth_default_setadapterparms_cb(card, reply, (unsigned long) cmd);
2403 + if (qeth_setadpparms_inspect_rc(cmd))
2404 + return 0;
2405
2406 + sw_info = (struct qeth_switch_info *)reply->param;
2407 + attrs = &cmd->data.setadapterparms.data.query_switch_attributes;
2408 + sw_info->capabilities = attrs->capabilities;
2409 + sw_info->settings = attrs->settings;
2410 + QETH_CARD_TEXT_(card, 2, "%04x%04x", sw_info->capabilities,
2411 + sw_info->settings);
2412 return 0;
2413 }
2414
2415 @@ -4211,16 +4192,13 @@ EXPORT_SYMBOL_GPL(qeth_do_send_packet);
2416 static int qeth_setadp_promisc_mode_cb(struct qeth_card *card,
2417 struct qeth_reply *reply, unsigned long data)
2418 {
2419 - struct qeth_ipa_cmd *cmd;
2420 + struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
2421 struct qeth_ipacmd_setadpparms *setparms;
2422
2423 QETH_CARD_TEXT(card, 4, "prmadpcb");
2424
2425 - cmd = (struct qeth_ipa_cmd *) data;
2426 setparms = &(cmd->data.setadapterparms);
2427 -
2428 - qeth_default_setadapterparms_cb(card, reply, (unsigned long)cmd);
2429 - if (cmd->hdr.return_code) {
2430 + if (qeth_setadpparms_inspect_rc(cmd)) {
2431 QETH_CARD_TEXT_(card, 4, "prmrc%x", cmd->hdr.return_code);
2432 setparms->data.mode = SET_PROMISC_MODE_OFF;
2433 }
2434 @@ -4290,18 +4268,18 @@ EXPORT_SYMBOL_GPL(qeth_get_stats);
2435 static int qeth_setadpparms_change_macaddr_cb(struct qeth_card *card,
2436 struct qeth_reply *reply, unsigned long data)
2437 {
2438 - struct qeth_ipa_cmd *cmd;
2439 + struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
2440
2441 QETH_CARD_TEXT(card, 4, "chgmaccb");
2442 + if (qeth_setadpparms_inspect_rc(cmd))
2443 + return 0;
2444
2445 - cmd = (struct qeth_ipa_cmd *) data;
2446 if (!card->options.layer2 ||
2447 !(card->info.mac_bits & QETH_LAYER2_MAC_READ)) {
2448 ether_addr_copy(card->dev->dev_addr,
2449 cmd->data.setadapterparms.data.change_addr.addr);
2450 card->info.mac_bits |= QETH_LAYER2_MAC_READ;
2451 }
2452 - qeth_default_setadapterparms_cb(card, reply, (unsigned long) cmd);
2453 return 0;
2454 }
2455
2456 @@ -4332,13 +4310,15 @@ EXPORT_SYMBOL_GPL(qeth_setadpparms_change_macaddr);
2457 static int qeth_setadpparms_set_access_ctrl_cb(struct qeth_card *card,
2458 struct qeth_reply *reply, unsigned long data)
2459 {
2460 - struct qeth_ipa_cmd *cmd;
2461 + struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
2462 struct qeth_set_access_ctrl *access_ctrl_req;
2463 int fallback = *(int *)reply->param;
2464
2465 QETH_CARD_TEXT(card, 4, "setaccb");
2466 + if (cmd->hdr.return_code)
2467 + return 0;
2468 + qeth_setadpparms_inspect_rc(cmd);
2469
2470 - cmd = (struct qeth_ipa_cmd *) data;
2471 access_ctrl_req = &cmd->data.setadapterparms.data.set_access_ctrl;
2472 QETH_DBF_TEXT_(SETUP, 2, "setaccb");
2473 QETH_DBF_TEXT_(SETUP, 2, "%s", card->gdev->dev.kobj.name);
2474 @@ -4411,7 +4391,6 @@ static int qeth_setadpparms_set_access_ctrl_cb(struct qeth_card *card,
2475 card->options.isolation = card->options.prev_isolation;
2476 break;
2477 }
2478 - qeth_default_setadapterparms_cb(card, reply, (unsigned long) cmd);
2479 return 0;
2480 }
2481
2482 @@ -4699,14 +4678,15 @@ static int qeth_snmp_command(struct qeth_card *card, char __user *udata)
2483 static int qeth_setadpparms_query_oat_cb(struct qeth_card *card,
2484 struct qeth_reply *reply, unsigned long data)
2485 {
2486 - struct qeth_ipa_cmd *cmd;
2487 + struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *)data;
2488 struct qeth_qoat_priv *priv;
2489 char *resdata;
2490 int resdatalen;
2491
2492 QETH_CARD_TEXT(card, 3, "qoatcb");
2493 + if (qeth_setadpparms_inspect_rc(cmd))
2494 + return 0;
2495
2496 - cmd = (struct qeth_ipa_cmd *)data;
2497 priv = (struct qeth_qoat_priv *)reply->param;
2498 resdatalen = cmd->data.setadapterparms.hdr.cmdlength;
2499 resdata = (char *)data + 28;
2500 @@ -4800,21 +4780,18 @@ static int qeth_query_oat_command(struct qeth_card *card, char __user *udata)
2501 static int qeth_query_card_info_cb(struct qeth_card *card,
2502 struct qeth_reply *reply, unsigned long data)
2503 {
2504 - struct qeth_ipa_cmd *cmd;
2505 + struct carrier_info *carrier_info = (struct carrier_info *)reply->param;
2506 + struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *)data;
2507 struct qeth_query_card_info *card_info;
2508 - struct carrier_info *carrier_info;
2509
2510 QETH_CARD_TEXT(card, 2, "qcrdincb");
2511 - carrier_info = (struct carrier_info *)reply->param;
2512 - cmd = (struct qeth_ipa_cmd *)data;
2513 - card_info = &cmd->data.setadapterparms.data.card_info;
2514 - if (cmd->data.setadapterparms.hdr.return_code == 0) {
2515 - carrier_info->card_type = card_info->card_type;
2516 - carrier_info->port_mode = card_info->port_mode;
2517 - carrier_info->port_speed = card_info->port_speed;
2518 - }
2519 + if (qeth_setadpparms_inspect_rc(cmd))
2520 + return 0;
2521
2522 - qeth_default_setadapterparms_cb(card, reply, (unsigned long) cmd);
2523 + card_info = &cmd->data.setadapterparms.data.card_info;
2524 + carrier_info->card_type = card_info->card_type;
2525 + carrier_info->port_mode = card_info->port_mode;
2526 + carrier_info->port_speed = card_info->port_speed;
2527 return 0;
2528 }
2529
2530 @@ -6567,10 +6544,14 @@ static int __init qeth_core_init(void)
2531 mutex_init(&qeth_mod_mutex);
2532
2533 qeth_wq = create_singlethread_workqueue("qeth_wq");
2534 + if (!qeth_wq) {
2535 + rc = -ENOMEM;
2536 + goto out_err;
2537 + }
2538
2539 rc = qeth_register_dbf_views();
2540 if (rc)
2541 - goto out_err;
2542 + goto dbf_err;
2543 qeth_core_root_dev = root_device_register("qeth");
2544 rc = PTR_ERR_OR_ZERO(qeth_core_root_dev);
2545 if (rc)
2546 @@ -6607,6 +6588,8 @@ static int __init qeth_core_init(void)
2547 root_device_unregister(qeth_core_root_dev);
2548 register_err:
2549 qeth_unregister_dbf_views();
2550 +dbf_err:
2551 + destroy_workqueue(qeth_wq);
2552 out_err:
2553 pr_err("Initializing the qeth device driver failed\n");
2554 return rc;
2555 diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h
2556 index 067d52e95f02..d7191943ecb8 100644
2557 --- a/include/linux/fsnotify_backend.h
2558 +++ b/include/linux/fsnotify_backend.h
2559 @@ -217,12 +217,10 @@ struct fsnotify_mark_connector {
2560 union { /* Object pointer [lock] */
2561 struct inode *inode;
2562 struct vfsmount *mnt;
2563 - };
2564 - union {
2565 - struct hlist_head list;
2566 /* Used listing heads to free after srcu period expires */
2567 struct fsnotify_mark_connector *destroy_next;
2568 };
2569 + struct hlist_head list;
2570 };
2571
2572 /*
2573 diff --git a/include/linux/hmm.h b/include/linux/hmm.h
2574 index 36dd21fe5caf..325017ad9311 100644
2575 --- a/include/linux/hmm.h
2576 +++ b/include/linux/hmm.h
2577 @@ -498,16 +498,23 @@ struct hmm_device {
2578 struct hmm_device *hmm_device_new(void *drvdata);
2579 void hmm_device_put(struct hmm_device *hmm_device);
2580 #endif /* CONFIG_DEVICE_PRIVATE || CONFIG_DEVICE_PUBLIC */
2581 +#endif /* IS_ENABLED(CONFIG_HMM) */
2582
2583 /* Below are for HMM internal use only! Not to be used by device driver! */
2584 +#if IS_ENABLED(CONFIG_HMM_MIRROR)
2585 void hmm_mm_destroy(struct mm_struct *mm);
2586
2587 static inline void hmm_mm_init(struct mm_struct *mm)
2588 {
2589 mm->hmm = NULL;
2590 }
2591 +#else /* IS_ENABLED(CONFIG_HMM_MIRROR) */
2592 +static inline void hmm_mm_destroy(struct mm_struct *mm) {}
2593 +static inline void hmm_mm_init(struct mm_struct *mm) {}
2594 +#endif /* IS_ENABLED(CONFIG_HMM_MIRROR) */
2595 +
2596 +
2597 #else /* IS_ENABLED(CONFIG_HMM) */
2598 static inline void hmm_mm_destroy(struct mm_struct *mm) {}
2599 static inline void hmm_mm_init(struct mm_struct *mm) {}
2600 -#endif /* IS_ENABLED(CONFIG_HMM) */
2601 #endif /* LINUX_HMM_H */
2602 diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
2603 index 7d30892da064..87b8c20d5b27 100644
2604 --- a/include/linux/if_vlan.h
2605 +++ b/include/linux/if_vlan.h
2606 @@ -639,7 +639,7 @@ static inline bool skb_vlan_tagged(const struct sk_buff *skb)
2607 * Returns true if the skb is tagged with multiple vlan headers, regardless
2608 * of whether it is hardware accelerated or not.
2609 */
2610 -static inline bool skb_vlan_tagged_multi(const struct sk_buff *skb)
2611 +static inline bool skb_vlan_tagged_multi(struct sk_buff *skb)
2612 {
2613 __be16 protocol = skb->protocol;
2614
2615 @@ -649,6 +649,9 @@ static inline bool skb_vlan_tagged_multi(const struct sk_buff *skb)
2616 if (likely(!eth_type_vlan(protocol)))
2617 return false;
2618
2619 + if (unlikely(!pskb_may_pull(skb, VLAN_ETH_HLEN)))
2620 + return false;
2621 +
2622 veh = (struct vlan_ethhdr *)skb->data;
2623 protocol = veh->h_vlan_encapsulated_proto;
2624 }
2625 @@ -666,7 +669,7 @@ static inline bool skb_vlan_tagged_multi(const struct sk_buff *skb)
2626 *
2627 * Returns features without unsafe ones if the skb has multiple tags.
2628 */
2629 -static inline netdev_features_t vlan_features_check(const struct sk_buff *skb,
2630 +static inline netdev_features_t vlan_features_check(struct sk_buff *skb,
2631 netdev_features_t features)
2632 {
2633 if (skb_vlan_tagged_multi(skb)) {
2634 diff --git a/include/linux/tpm.h b/include/linux/tpm.h
2635 index bcdd3790e94d..06639fb6ab85 100644
2636 --- a/include/linux/tpm.h
2637 +++ b/include/linux/tpm.h
2638 @@ -44,7 +44,7 @@ struct tpm_class_ops {
2639 bool (*update_timeouts)(struct tpm_chip *chip,
2640 unsigned long *timeout_cap);
2641 int (*request_locality)(struct tpm_chip *chip, int loc);
2642 - void (*relinquish_locality)(struct tpm_chip *chip, int loc);
2643 + int (*relinquish_locality)(struct tpm_chip *chip, int loc);
2644 void (*clk_enable)(struct tpm_chip *chip, bool value);
2645 };
2646
2647 diff --git a/include/net/ife.h b/include/net/ife.h
2648 index 44b9c00f7223..e117617e3c34 100644
2649 --- a/include/net/ife.h
2650 +++ b/include/net/ife.h
2651 @@ -12,7 +12,8 @@
2652 void *ife_encode(struct sk_buff *skb, u16 metalen);
2653 void *ife_decode(struct sk_buff *skb, u16 *metalen);
2654
2655 -void *ife_tlv_meta_decode(void *skbdata, u16 *attrtype, u16 *dlen, u16 *totlen);
2656 +void *ife_tlv_meta_decode(void *skbdata, const void *ifehdr_end, u16 *attrtype,
2657 + u16 *dlen, u16 *totlen);
2658 int ife_tlv_meta_encode(void *skbdata, u16 attrtype, u16 dlen,
2659 const void *dval);
2660
2661 diff --git a/include/net/llc_conn.h b/include/net/llc_conn.h
2662 index 5c40f118c0fa..df528a623548 100644
2663 --- a/include/net/llc_conn.h
2664 +++ b/include/net/llc_conn.h
2665 @@ -97,6 +97,7 @@ static __inline__ char llc_backlog_type(struct sk_buff *skb)
2666
2667 struct sock *llc_sk_alloc(struct net *net, int family, gfp_t priority,
2668 struct proto *prot, int kern);
2669 +void llc_sk_stop_all_timers(struct sock *sk, bool sync);
2670 void llc_sk_free(struct sock *sk);
2671
2672 void llc_sk_reset(struct sock *sk);
2673 diff --git a/kernel/kprobes.c b/kernel/kprobes.c
2674 index 102160ff5c66..ea619021d901 100644
2675 --- a/kernel/kprobes.c
2676 +++ b/kernel/kprobes.c
2677 @@ -2428,7 +2428,7 @@ static int kprobe_blacklist_seq_show(struct seq_file *m, void *v)
2678 struct kprobe_blacklist_entry *ent =
2679 list_entry(v, struct kprobe_blacklist_entry, list);
2680
2681 - seq_printf(m, "0x%p-0x%p\t%ps\n", (void *)ent->start_addr,
2682 + seq_printf(m, "0x%px-0x%px\t%ps\n", (void *)ent->start_addr,
2683 (void *)ent->end_addr, (void *)ent->start_addr);
2684 return 0;
2685 }
2686 diff --git a/kernel/trace/trace_entries.h b/kernel/trace/trace_entries.h
2687 index e954ae3d82c0..e3a658bac10f 100644
2688 --- a/kernel/trace/trace_entries.h
2689 +++ b/kernel/trace/trace_entries.h
2690 @@ -356,7 +356,7 @@ FTRACE_ENTRY(hwlat, hwlat_entry,
2691 __field( unsigned int, seqnum )
2692 ),
2693
2694 - F_printk("cnt:%u\tts:%010llu.%010lu\tinner:%llu\touter:%llunmi-ts:%llu\tnmi-count:%u\n",
2695 + F_printk("cnt:%u\tts:%010llu.%010lu\tinner:%llu\touter:%llu\tnmi-ts:%llu\tnmi-count:%u\n",
2696 __entry->seqnum,
2697 __entry->tv_sec,
2698 __entry->tv_nsec,
2699 diff --git a/net/core/dev.c b/net/core/dev.c
2700 index c4aa2941dbfd..3e550507e9f0 100644
2701 --- a/net/core/dev.c
2702 +++ b/net/core/dev.c
2703 @@ -2942,7 +2942,7 @@ netdev_features_t passthru_features_check(struct sk_buff *skb,
2704 }
2705 EXPORT_SYMBOL(passthru_features_check);
2706
2707 -static netdev_features_t dflt_features_check(const struct sk_buff *skb,
2708 +static netdev_features_t dflt_features_check(struct sk_buff *skb,
2709 struct net_device *dev,
2710 netdev_features_t features)
2711 {
2712 diff --git a/net/core/neighbour.c b/net/core/neighbour.c
2713 index 7b7a14abba28..ce519861be59 100644
2714 --- a/net/core/neighbour.c
2715 +++ b/net/core/neighbour.c
2716 @@ -55,7 +55,8 @@ static void neigh_timer_handler(struct timer_list *t);
2717 static void __neigh_notify(struct neighbour *n, int type, int flags,
2718 u32 pid);
2719 static void neigh_update_notify(struct neighbour *neigh, u32 nlmsg_pid);
2720 -static int pneigh_ifdown(struct neigh_table *tbl, struct net_device *dev);
2721 +static int pneigh_ifdown_and_unlock(struct neigh_table *tbl,
2722 + struct net_device *dev);
2723
2724 #ifdef CONFIG_PROC_FS
2725 static const struct file_operations neigh_stat_seq_fops;
2726 @@ -291,8 +292,7 @@ int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
2727 {
2728 write_lock_bh(&tbl->lock);
2729 neigh_flush_dev(tbl, dev);
2730 - pneigh_ifdown(tbl, dev);
2731 - write_unlock_bh(&tbl->lock);
2732 + pneigh_ifdown_and_unlock(tbl, dev);
2733
2734 del_timer_sync(&tbl->proxy_timer);
2735 pneigh_queue_purge(&tbl->proxy_queue);
2736 @@ -681,9 +681,10 @@ int pneigh_delete(struct neigh_table *tbl, struct net *net, const void *pkey,
2737 return -ENOENT;
2738 }
2739
2740 -static int pneigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
2741 +static int pneigh_ifdown_and_unlock(struct neigh_table *tbl,
2742 + struct net_device *dev)
2743 {
2744 - struct pneigh_entry *n, **np;
2745 + struct pneigh_entry *n, **np, *freelist = NULL;
2746 u32 h;
2747
2748 for (h = 0; h <= PNEIGH_HASHMASK; h++) {
2749 @@ -691,16 +692,23 @@ static int pneigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
2750 while ((n = *np) != NULL) {
2751 if (!dev || n->dev == dev) {
2752 *np = n->next;
2753 - if (tbl->pdestructor)
2754 - tbl->pdestructor(n);
2755 - if (n->dev)
2756 - dev_put(n->dev);
2757 - kfree(n);
2758 + n->next = freelist;
2759 + freelist = n;
2760 continue;
2761 }
2762 np = &n->next;
2763 }
2764 }
2765 + write_unlock_bh(&tbl->lock);
2766 + while ((n = freelist)) {
2767 + freelist = n->next;
2768 + n->next = NULL;
2769 + if (tbl->pdestructor)
2770 + tbl->pdestructor(n);
2771 + if (n->dev)
2772 + dev_put(n->dev);
2773 + kfree(n);
2774 + }
2775 return -ENOENT;
2776 }
2777
2778 @@ -2323,12 +2331,16 @@ static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb,
2779
2780 err = nlmsg_parse(nlh, sizeof(struct ndmsg), tb, NDA_MAX, NULL, NULL);
2781 if (!err) {
2782 - if (tb[NDA_IFINDEX])
2783 + if (tb[NDA_IFINDEX]) {
2784 + if (nla_len(tb[NDA_IFINDEX]) != sizeof(u32))
2785 + return -EINVAL;
2786 filter_idx = nla_get_u32(tb[NDA_IFINDEX]);
2787 -
2788 - if (tb[NDA_MASTER])
2789 + }
2790 + if (tb[NDA_MASTER]) {
2791 + if (nla_len(tb[NDA_MASTER]) != sizeof(u32))
2792 + return -EINVAL;
2793 filter_master_idx = nla_get_u32(tb[NDA_MASTER]);
2794 -
2795 + }
2796 if (filter_idx || filter_master_idx)
2797 flags |= NLM_F_DUMP_FILTERED;
2798 }
2799 diff --git a/net/dns_resolver/dns_key.c b/net/dns_resolver/dns_key.c
2800 index e1d4d898a007..ed372d550137 100644
2801 --- a/net/dns_resolver/dns_key.c
2802 +++ b/net/dns_resolver/dns_key.c
2803 @@ -91,9 +91,9 @@ dns_resolver_preparse(struct key_preparsed_payload *prep)
2804
2805 next_opt = memchr(opt, '#', end - opt) ?: end;
2806 opt_len = next_opt - opt;
2807 - if (!opt_len) {
2808 - printk(KERN_WARNING
2809 - "Empty option to dns_resolver key\n");
2810 + if (opt_len <= 0 || opt_len > 128) {
2811 + pr_warn_ratelimited("Invalid option length (%d) for dns_resolver key\n",
2812 + opt_len);
2813 return -EINVAL;
2814 }
2815
2816 @@ -127,10 +127,8 @@ dns_resolver_preparse(struct key_preparsed_payload *prep)
2817 }
2818
2819 bad_option_value:
2820 - printk(KERN_WARNING
2821 - "Option '%*.*s' to dns_resolver key:"
2822 - " bad/missing value\n",
2823 - opt_nlen, opt_nlen, opt);
2824 + pr_warn_ratelimited("Option '%*.*s' to dns_resolver key: bad/missing value\n",
2825 + opt_nlen, opt_nlen, opt);
2826 return -EINVAL;
2827 } while (opt = next_opt + 1, opt < end);
2828 }
2829 diff --git a/net/ife/ife.c b/net/ife/ife.c
2830 index 7d1ec76e7f43..13bbf8cb6a39 100644
2831 --- a/net/ife/ife.c
2832 +++ b/net/ife/ife.c
2833 @@ -69,6 +69,9 @@ void *ife_decode(struct sk_buff *skb, u16 *metalen)
2834 int total_pull;
2835 u16 ifehdrln;
2836
2837 + if (!pskb_may_pull(skb, skb->dev->hard_header_len + IFE_METAHDRLEN))
2838 + return NULL;
2839 +
2840 ifehdr = (struct ifeheadr *) (skb->data + skb->dev->hard_header_len);
2841 ifehdrln = ntohs(ifehdr->metalen);
2842 total_pull = skb->dev->hard_header_len + ifehdrln;
2843 @@ -92,12 +95,43 @@ struct meta_tlvhdr {
2844 __be16 len;
2845 };
2846
2847 +static bool __ife_tlv_meta_valid(const unsigned char *skbdata,
2848 + const unsigned char *ifehdr_end)
2849 +{
2850 + const struct meta_tlvhdr *tlv;
2851 + u16 tlvlen;
2852 +
2853 + if (unlikely(skbdata + sizeof(*tlv) > ifehdr_end))
2854 + return false;
2855 +
2856 + tlv = (const struct meta_tlvhdr *)skbdata;
2857 + tlvlen = ntohs(tlv->len);
2858 +
2859 + /* tlv length field is inc header, check on minimum */
2860 + if (tlvlen < NLA_HDRLEN)
2861 + return false;
2862 +
2863 + /* overflow by NLA_ALIGN check */
2864 + if (NLA_ALIGN(tlvlen) < tlvlen)
2865 + return false;
2866 +
2867 + if (unlikely(skbdata + NLA_ALIGN(tlvlen) > ifehdr_end))
2868 + return false;
2869 +
2870 + return true;
2871 +}
2872 +
2873 /* Caller takes care of presenting data in network order
2874 */
2875 -void *ife_tlv_meta_decode(void *skbdata, u16 *attrtype, u16 *dlen, u16 *totlen)
2876 +void *ife_tlv_meta_decode(void *skbdata, const void *ifehdr_end, u16 *attrtype,
2877 + u16 *dlen, u16 *totlen)
2878 {
2879 - struct meta_tlvhdr *tlv = (struct meta_tlvhdr *) skbdata;
2880 + struct meta_tlvhdr *tlv;
2881 +
2882 + if (!__ife_tlv_meta_valid(skbdata, ifehdr_end))
2883 + return NULL;
2884
2885 + tlv = (struct meta_tlvhdr *)skbdata;
2886 *dlen = ntohs(tlv->len) - NLA_HDRLEN;
2887 *attrtype = ntohs(tlv->type);
2888
2889 diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
2890 index 8b8059b7af4d..1ab8733dac5f 100644
2891 --- a/net/ipv4/tcp.c
2892 +++ b/net/ipv4/tcp.c
2893 @@ -2385,6 +2385,7 @@ void tcp_write_queue_purge(struct sock *sk)
2894 INIT_LIST_HEAD(&tcp_sk(sk)->tsorted_sent_queue);
2895 sk_mem_reclaim(sk);
2896 tcp_clear_all_retrans_hints(tcp_sk(sk));
2897 + tcp_sk(sk)->packets_out = 0;
2898 }
2899
2900 int tcp_disconnect(struct sock *sk, int flags)
2901 @@ -2434,7 +2435,6 @@ int tcp_disconnect(struct sock *sk, int flags)
2902 icsk->icsk_backoff = 0;
2903 tp->snd_cwnd = 2;
2904 icsk->icsk_probes_out = 0;
2905 - tp->packets_out = 0;
2906 tp->snd_ssthresh = TCP_INFINITE_SSTHRESH;
2907 tp->snd_cwnd_cnt = 0;
2908 tp->window_clamp = 0;
2909 @@ -2830,8 +2830,10 @@ static int do_tcp_setsockopt(struct sock *sk, int level,
2910 #ifdef CONFIG_TCP_MD5SIG
2911 case TCP_MD5SIG:
2912 case TCP_MD5SIG_EXT:
2913 - /* Read the IP->Key mappings from userspace */
2914 - err = tp->af_specific->md5_parse(sk, optname, optval, optlen);
2915 + if ((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN))
2916 + err = tp->af_specific->md5_parse(sk, optname, optval, optlen);
2917 + else
2918 + err = -EINVAL;
2919 break;
2920 #endif
2921 case TCP_USER_TIMEOUT:
2922 diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
2923 index ff6cd98ce8d5..31ca27fdde66 100644
2924 --- a/net/ipv4/tcp_input.c
2925 +++ b/net/ipv4/tcp_input.c
2926 @@ -3871,11 +3871,8 @@ const u8 *tcp_parse_md5sig_option(const struct tcphdr *th)
2927 int length = (th->doff << 2) - sizeof(*th);
2928 const u8 *ptr = (const u8 *)(th + 1);
2929
2930 - /* If the TCP option is too short, we can short cut */
2931 - if (length < TCPOLEN_MD5SIG)
2932 - return NULL;
2933 -
2934 - while (length > 0) {
2935 + /* If not enough data remaining, we can short cut */
2936 + while (length >= TCPOLEN_MD5SIG) {
2937 int opcode = *ptr++;
2938 int opsize;
2939
2940 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
2941 index fc74352fac12..74a2e37412b2 100644
2942 --- a/net/ipv6/route.c
2943 +++ b/net/ipv6/route.c
2944 @@ -3862,6 +3862,7 @@ void rt6_mtu_change(struct net_device *dev, unsigned int mtu)
2945
2946 static const struct nla_policy rtm_ipv6_policy[RTA_MAX+1] = {
2947 [RTA_GATEWAY] = { .len = sizeof(struct in6_addr) },
2948 + [RTA_PREFSRC] = { .len = sizeof(struct in6_addr) },
2949 [RTA_OIF] = { .type = NLA_U32 },
2950 [RTA_IIF] = { .type = NLA_U32 },
2951 [RTA_PRIORITY] = { .type = NLA_U32 },
2952 @@ -3873,6 +3874,7 @@ static const struct nla_policy rtm_ipv6_policy[RTA_MAX+1] = {
2953 [RTA_EXPIRES] = { .type = NLA_U32 },
2954 [RTA_UID] = { .type = NLA_U32 },
2955 [RTA_MARK] = { .type = NLA_U32 },
2956 + [RTA_TABLE] = { .type = NLA_U32 },
2957 };
2958
2959 static int rtm_to_fib6_config(struct sk_buff *skb, struct nlmsghdr *nlh,
2960 diff --git a/net/ipv6/seg6_iptunnel.c b/net/ipv6/seg6_iptunnel.c
2961 index f343e6f0fc95..5fe139484919 100644
2962 --- a/net/ipv6/seg6_iptunnel.c
2963 +++ b/net/ipv6/seg6_iptunnel.c
2964 @@ -136,7 +136,7 @@ int seg6_do_srh_encap(struct sk_buff *skb, struct ipv6_sr_hdr *osrh, int proto)
2965 isrh->nexthdr = proto;
2966
2967 hdr->daddr = isrh->segments[isrh->first_segment];
2968 - set_tun_src(net, ip6_dst_idev(dst)->dev, &hdr->daddr, &hdr->saddr);
2969 + set_tun_src(net, dst->dev, &hdr->daddr, &hdr->saddr);
2970
2971 #ifdef CONFIG_IPV6_SEG6_HMAC
2972 if (sr_has_hmac(isrh)) {
2973 diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c
2974 index 0fbd3ee26165..40261cb68e83 100644
2975 --- a/net/l2tp/l2tp_core.c
2976 +++ b/net/l2tp/l2tp_core.c
2977 @@ -183,6 +183,26 @@ struct l2tp_tunnel *l2tp_tunnel_get(const struct net *net, u32 tunnel_id)
2978 }
2979 EXPORT_SYMBOL_GPL(l2tp_tunnel_get);
2980
2981 +struct l2tp_tunnel *l2tp_tunnel_get_nth(const struct net *net, int nth)
2982 +{
2983 + const struct l2tp_net *pn = l2tp_pernet(net);
2984 + struct l2tp_tunnel *tunnel;
2985 + int count = 0;
2986 +
2987 + rcu_read_lock_bh();
2988 + list_for_each_entry_rcu(tunnel, &pn->l2tp_tunnel_list, list) {
2989 + if (++count > nth) {
2990 + l2tp_tunnel_inc_refcount(tunnel);
2991 + rcu_read_unlock_bh();
2992 + return tunnel;
2993 + }
2994 + }
2995 + rcu_read_unlock_bh();
2996 +
2997 + return NULL;
2998 +}
2999 +EXPORT_SYMBOL_GPL(l2tp_tunnel_get_nth);
3000 +
3001 /* Lookup a session. A new reference is held on the returned session. */
3002 struct l2tp_session *l2tp_session_get(const struct net *net,
3003 struct l2tp_tunnel *tunnel,
3004 @@ -335,26 +355,6 @@ int l2tp_session_register(struct l2tp_session *session,
3005 }
3006 EXPORT_SYMBOL_GPL(l2tp_session_register);
3007
3008 -struct l2tp_tunnel *l2tp_tunnel_find_nth(const struct net *net, int nth)
3009 -{
3010 - struct l2tp_net *pn = l2tp_pernet(net);
3011 - struct l2tp_tunnel *tunnel;
3012 - int count = 0;
3013 -
3014 - rcu_read_lock_bh();
3015 - list_for_each_entry_rcu(tunnel, &pn->l2tp_tunnel_list, list) {
3016 - if (++count > nth) {
3017 - rcu_read_unlock_bh();
3018 - return tunnel;
3019 - }
3020 - }
3021 -
3022 - rcu_read_unlock_bh();
3023 -
3024 - return NULL;
3025 -}
3026 -EXPORT_SYMBOL_GPL(l2tp_tunnel_find_nth);
3027 -
3028 /*****************************************************************************
3029 * Receive data handling
3030 *****************************************************************************/
3031 diff --git a/net/l2tp/l2tp_core.h b/net/l2tp/l2tp_core.h
3032 index ba33cbec71eb..c199020f8a8a 100644
3033 --- a/net/l2tp/l2tp_core.h
3034 +++ b/net/l2tp/l2tp_core.h
3035 @@ -212,6 +212,8 @@ static inline void *l2tp_session_priv(struct l2tp_session *session)
3036 }
3037
3038 struct l2tp_tunnel *l2tp_tunnel_get(const struct net *net, u32 tunnel_id);
3039 +struct l2tp_tunnel *l2tp_tunnel_get_nth(const struct net *net, int nth);
3040 +
3041 void l2tp_tunnel_free(struct l2tp_tunnel *tunnel);
3042
3043 struct l2tp_session *l2tp_session_get(const struct net *net,
3044 @@ -220,7 +222,6 @@ struct l2tp_session *l2tp_session_get(const struct net *net,
3045 struct l2tp_session *l2tp_session_get_nth(struct l2tp_tunnel *tunnel, int nth);
3046 struct l2tp_session *l2tp_session_get_by_ifname(const struct net *net,
3047 const char *ifname);
3048 -struct l2tp_tunnel *l2tp_tunnel_find_nth(const struct net *net, int nth);
3049
3050 int l2tp_tunnel_create(struct net *net, int fd, int version, u32 tunnel_id,
3051 u32 peer_tunnel_id, struct l2tp_tunnel_cfg *cfg,
3052 diff --git a/net/l2tp/l2tp_debugfs.c b/net/l2tp/l2tp_debugfs.c
3053 index 72e713da4733..7f1e842ef05a 100644
3054 --- a/net/l2tp/l2tp_debugfs.c
3055 +++ b/net/l2tp/l2tp_debugfs.c
3056 @@ -47,7 +47,11 @@ struct l2tp_dfs_seq_data {
3057
3058 static void l2tp_dfs_next_tunnel(struct l2tp_dfs_seq_data *pd)
3059 {
3060 - pd->tunnel = l2tp_tunnel_find_nth(pd->net, pd->tunnel_idx);
3061 + /* Drop reference taken during previous invocation */
3062 + if (pd->tunnel)
3063 + l2tp_tunnel_dec_refcount(pd->tunnel);
3064 +
3065 + pd->tunnel = l2tp_tunnel_get_nth(pd->net, pd->tunnel_idx);
3066 pd->tunnel_idx++;
3067 }
3068
3069 @@ -96,7 +100,17 @@ static void *l2tp_dfs_seq_next(struct seq_file *m, void *v, loff_t *pos)
3070
3071 static void l2tp_dfs_seq_stop(struct seq_file *p, void *v)
3072 {
3073 - /* nothing to do */
3074 + struct l2tp_dfs_seq_data *pd = v;
3075 +
3076 + if (!pd || pd == SEQ_START_TOKEN)
3077 + return;
3078 +
3079 + /* Drop reference taken by last invocation of l2tp_dfs_next_tunnel() */
3080 + if (pd->tunnel) {
3081 + l2tp_tunnel_dec_refcount(pd->tunnel);
3082 + pd->tunnel = NULL;
3083 + pd->session = NULL;
3084 + }
3085 }
3086
3087 static void l2tp_dfs_seq_tunnel_show(struct seq_file *m, void *v)
3088 diff --git a/net/l2tp/l2tp_netlink.c b/net/l2tp/l2tp_netlink.c
3089 index b05dbd9ffcb2..6616c9fd292f 100644
3090 --- a/net/l2tp/l2tp_netlink.c
3091 +++ b/net/l2tp/l2tp_netlink.c
3092 @@ -487,14 +487,17 @@ static int l2tp_nl_cmd_tunnel_dump(struct sk_buff *skb, struct netlink_callback
3093 struct net *net = sock_net(skb->sk);
3094
3095 for (;;) {
3096 - tunnel = l2tp_tunnel_find_nth(net, ti);
3097 + tunnel = l2tp_tunnel_get_nth(net, ti);
3098 if (tunnel == NULL)
3099 goto out;
3100
3101 if (l2tp_nl_tunnel_send(skb, NETLINK_CB(cb->skb).portid,
3102 cb->nlh->nlmsg_seq, NLM_F_MULTI,
3103 - tunnel, L2TP_CMD_TUNNEL_GET) < 0)
3104 + tunnel, L2TP_CMD_TUNNEL_GET) < 0) {
3105 + l2tp_tunnel_dec_refcount(tunnel);
3106 goto out;
3107 + }
3108 + l2tp_tunnel_dec_refcount(tunnel);
3109
3110 ti++;
3111 }
3112 @@ -848,7 +851,7 @@ static int l2tp_nl_cmd_session_dump(struct sk_buff *skb, struct netlink_callback
3113
3114 for (;;) {
3115 if (tunnel == NULL) {
3116 - tunnel = l2tp_tunnel_find_nth(net, ti);
3117 + tunnel = l2tp_tunnel_get_nth(net, ti);
3118 if (tunnel == NULL)
3119 goto out;
3120 }
3121 @@ -856,6 +859,7 @@ static int l2tp_nl_cmd_session_dump(struct sk_buff *skb, struct netlink_callback
3122 session = l2tp_session_get_nth(tunnel, si);
3123 if (session == NULL) {
3124 ti++;
3125 + l2tp_tunnel_dec_refcount(tunnel);
3126 tunnel = NULL;
3127 si = 0;
3128 continue;
3129 @@ -865,6 +869,7 @@ static int l2tp_nl_cmd_session_dump(struct sk_buff *skb, struct netlink_callback
3130 cb->nlh->nlmsg_seq, NLM_F_MULTI,
3131 session, L2TP_CMD_SESSION_GET) < 0) {
3132 l2tp_session_dec_refcount(session);
3133 + l2tp_tunnel_dec_refcount(tunnel);
3134 break;
3135 }
3136 l2tp_session_dec_refcount(session);
3137 diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c
3138 index 3d7887cc599b..0c4530ad74be 100644
3139 --- a/net/l2tp/l2tp_ppp.c
3140 +++ b/net/l2tp/l2tp_ppp.c
3141 @@ -619,6 +619,13 @@ static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
3142 lock_sock(sk);
3143
3144 error = -EINVAL;
3145 +
3146 + if (sockaddr_len != sizeof(struct sockaddr_pppol2tp) &&
3147 + sockaddr_len != sizeof(struct sockaddr_pppol2tpv3) &&
3148 + sockaddr_len != sizeof(struct sockaddr_pppol2tpin6) &&
3149 + sockaddr_len != sizeof(struct sockaddr_pppol2tpv3in6))
3150 + goto end;
3151 +
3152 if (sp->sa_protocol != PX_PROTO_OL2TP)
3153 goto end;
3154
3155 @@ -1552,16 +1559,19 @@ struct pppol2tp_seq_data {
3156
3157 static void pppol2tp_next_tunnel(struct net *net, struct pppol2tp_seq_data *pd)
3158 {
3159 + /* Drop reference taken during previous invocation */
3160 + if (pd->tunnel)
3161 + l2tp_tunnel_dec_refcount(pd->tunnel);
3162 +
3163 for (;;) {
3164 - pd->tunnel = l2tp_tunnel_find_nth(net, pd->tunnel_idx);
3165 + pd->tunnel = l2tp_tunnel_get_nth(net, pd->tunnel_idx);
3166 pd->tunnel_idx++;
3167
3168 - if (pd->tunnel == NULL)
3169 - break;
3170 + /* Only accept L2TPv2 tunnels */
3171 + if (!pd->tunnel || pd->tunnel->version == 2)
3172 + return;
3173
3174 - /* Ignore L2TPv3 tunnels */
3175 - if (pd->tunnel->version < 3)
3176 - break;
3177 + l2tp_tunnel_dec_refcount(pd->tunnel);
3178 }
3179 }
3180
3181 @@ -1610,7 +1620,17 @@ static void *pppol2tp_seq_next(struct seq_file *m, void *v, loff_t *pos)
3182
3183 static void pppol2tp_seq_stop(struct seq_file *p, void *v)
3184 {
3185 - /* nothing to do */
3186 + struct pppol2tp_seq_data *pd = v;
3187 +
3188 + if (!pd || pd == SEQ_START_TOKEN)
3189 + return;
3190 +
3191 + /* Drop reference taken by last invocation of pppol2tp_next_tunnel() */
3192 + if (pd->tunnel) {
3193 + l2tp_tunnel_dec_refcount(pd->tunnel);
3194 + pd->tunnel = NULL;
3195 + pd->session = NULL;
3196 + }
3197 }
3198
3199 static void pppol2tp_seq_tunnel_show(struct seq_file *m, void *v)
3200 diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
3201 index c38d16f22d2a..cf41d9b4a0b8 100644
3202 --- a/net/llc/af_llc.c
3203 +++ b/net/llc/af_llc.c
3204 @@ -199,9 +199,19 @@ static int llc_ui_release(struct socket *sock)
3205 llc->laddr.lsap, llc->daddr.lsap);
3206 if (!llc_send_disc(sk))
3207 llc_ui_wait_for_disc(sk, sk->sk_rcvtimeo);
3208 - if (!sock_flag(sk, SOCK_ZAPPED))
3209 + if (!sock_flag(sk, SOCK_ZAPPED)) {
3210 + struct llc_sap *sap = llc->sap;
3211 +
3212 + /* Hold this for release_sock(), so that llc_backlog_rcv()
3213 + * could still use it.
3214 + */
3215 + llc_sap_hold(sap);
3216 llc_sap_remove_socket(llc->sap, sk);
3217 - release_sock(sk);
3218 + release_sock(sk);
3219 + llc_sap_put(sap);
3220 + } else {
3221 + release_sock(sk);
3222 + }
3223 if (llc->dev)
3224 dev_put(llc->dev);
3225 sock_put(sk);
3226 diff --git a/net/llc/llc_c_ac.c b/net/llc/llc_c_ac.c
3227 index 163121192aca..4d78375f9872 100644
3228 --- a/net/llc/llc_c_ac.c
3229 +++ b/net/llc/llc_c_ac.c
3230 @@ -1099,14 +1099,7 @@ int llc_conn_ac_inc_tx_win_size(struct sock *sk, struct sk_buff *skb)
3231
3232 int llc_conn_ac_stop_all_timers(struct sock *sk, struct sk_buff *skb)
3233 {
3234 - struct llc_sock *llc = llc_sk(sk);
3235 -
3236 - del_timer(&llc->pf_cycle_timer.timer);
3237 - del_timer(&llc->ack_timer.timer);
3238 - del_timer(&llc->rej_sent_timer.timer);
3239 - del_timer(&llc->busy_state_timer.timer);
3240 - llc->ack_must_be_send = 0;
3241 - llc->ack_pf = 0;
3242 + llc_sk_stop_all_timers(sk, false);
3243 return 0;
3244 }
3245
3246 diff --git a/net/llc/llc_conn.c b/net/llc/llc_conn.c
3247 index 110e32bcb399..c0ac522b48a1 100644
3248 --- a/net/llc/llc_conn.c
3249 +++ b/net/llc/llc_conn.c
3250 @@ -961,6 +961,26 @@ struct sock *llc_sk_alloc(struct net *net, int family, gfp_t priority, struct pr
3251 return sk;
3252 }
3253
3254 +void llc_sk_stop_all_timers(struct sock *sk, bool sync)
3255 +{
3256 + struct llc_sock *llc = llc_sk(sk);
3257 +
3258 + if (sync) {
3259 + del_timer_sync(&llc->pf_cycle_timer.timer);
3260 + del_timer_sync(&llc->ack_timer.timer);
3261 + del_timer_sync(&llc->rej_sent_timer.timer);
3262 + del_timer_sync(&llc->busy_state_timer.timer);
3263 + } else {
3264 + del_timer(&llc->pf_cycle_timer.timer);
3265 + del_timer(&llc->ack_timer.timer);
3266 + del_timer(&llc->rej_sent_timer.timer);
3267 + del_timer(&llc->busy_state_timer.timer);
3268 + }
3269 +
3270 + llc->ack_must_be_send = 0;
3271 + llc->ack_pf = 0;
3272 +}
3273 +
3274 /**
3275 * llc_sk_free - Frees a LLC socket
3276 * @sk - socket to free
3277 @@ -973,7 +993,7 @@ void llc_sk_free(struct sock *sk)
3278
3279 llc->state = LLC_CONN_OUT_OF_SVC;
3280 /* Stop all (possibly) running timers */
3281 - llc_conn_ac_stop_all_timers(sk, NULL);
3282 + llc_sk_stop_all_timers(sk, true);
3283 #ifdef DEBUG_LLC_CONN_ALLOC
3284 printk(KERN_INFO "%s: unackq=%d, txq=%d\n", __func__,
3285 skb_queue_len(&llc->pdu_unack_q),
3286 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
3287 index e0f3f4aeeb4f..3b43b1fcd618 100644
3288 --- a/net/packet/af_packet.c
3289 +++ b/net/packet/af_packet.c
3290 @@ -329,11 +329,11 @@ static void packet_pick_tx_queue(struct net_device *dev, struct sk_buff *skb)
3291 skb_set_queue_mapping(skb, queue_index);
3292 }
3293
3294 -/* register_prot_hook must be invoked with the po->bind_lock held,
3295 +/* __register_prot_hook must be invoked through register_prot_hook
3296 * or from a context in which asynchronous accesses to the packet
3297 * socket is not possible (packet_create()).
3298 */
3299 -static void register_prot_hook(struct sock *sk)
3300 +static void __register_prot_hook(struct sock *sk)
3301 {
3302 struct packet_sock *po = pkt_sk(sk);
3303
3304 @@ -348,8 +348,13 @@ static void register_prot_hook(struct sock *sk)
3305 }
3306 }
3307
3308 -/* {,__}unregister_prot_hook() must be invoked with the po->bind_lock
3309 - * held. If the sync parameter is true, we will temporarily drop
3310 +static void register_prot_hook(struct sock *sk)
3311 +{
3312 + lockdep_assert_held_once(&pkt_sk(sk)->bind_lock);
3313 + __register_prot_hook(sk);
3314 +}
3315 +
3316 +/* If the sync parameter is true, we will temporarily drop
3317 * the po->bind_lock and do a synchronize_net to make sure no
3318 * asynchronous packet processing paths still refer to the elements
3319 * of po->prot_hook. If the sync parameter is false, it is the
3320 @@ -359,6 +364,8 @@ static void __unregister_prot_hook(struct sock *sk, bool sync)
3321 {
3322 struct packet_sock *po = pkt_sk(sk);
3323
3324 + lockdep_assert_held_once(&po->bind_lock);
3325 +
3326 po->running = 0;
3327
3328 if (po->fanout)
3329 @@ -3008,6 +3015,7 @@ static int packet_release(struct socket *sock)
3330
3331 packet_flush_mclist(sk);
3332
3333 + lock_sock(sk);
3334 if (po->rx_ring.pg_vec) {
3335 memset(&req_u, 0, sizeof(req_u));
3336 packet_set_ring(sk, &req_u, 1, 0);
3337 @@ -3017,6 +3025,7 @@ static int packet_release(struct socket *sock)
3338 memset(&req_u, 0, sizeof(req_u));
3339 packet_set_ring(sk, &req_u, 1, 1);
3340 }
3341 + release_sock(sk);
3342
3343 f = fanout_release(sk);
3344
3345 @@ -3250,7 +3259,7 @@ static int packet_create(struct net *net, struct socket *sock, int protocol,
3346
3347 if (proto) {
3348 po->prot_hook.type = proto;
3349 - register_prot_hook(sk);
3350 + __register_prot_hook(sk);
3351 }
3352
3353 mutex_lock(&net->packet.sklist_lock);
3354 @@ -3645,6 +3654,7 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv
3355 union tpacket_req_u req_u;
3356 int len;
3357
3358 + lock_sock(sk);
3359 switch (po->tp_version) {
3360 case TPACKET_V1:
3361 case TPACKET_V2:
3362 @@ -3655,12 +3665,17 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv
3363 len = sizeof(req_u.req3);
3364 break;
3365 }
3366 - if (optlen < len)
3367 - return -EINVAL;
3368 - if (copy_from_user(&req_u.req, optval, len))
3369 - return -EFAULT;
3370 - return packet_set_ring(sk, &req_u, 0,
3371 - optname == PACKET_TX_RING);
3372 + if (optlen < len) {
3373 + ret = -EINVAL;
3374 + } else {
3375 + if (copy_from_user(&req_u.req, optval, len))
3376 + ret = -EFAULT;
3377 + else
3378 + ret = packet_set_ring(sk, &req_u, 0,
3379 + optname == PACKET_TX_RING);
3380 + }
3381 + release_sock(sk);
3382 + return ret;
3383 }
3384 case PACKET_COPY_THRESH:
3385 {
3386 @@ -3726,12 +3741,18 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv
3387
3388 if (optlen != sizeof(val))
3389 return -EINVAL;
3390 - if (po->rx_ring.pg_vec || po->tx_ring.pg_vec)
3391 - return -EBUSY;
3392 if (copy_from_user(&val, optval, sizeof(val)))
3393 return -EFAULT;
3394 - po->tp_loss = !!val;
3395 - return 0;
3396 +
3397 + lock_sock(sk);
3398 + if (po->rx_ring.pg_vec || po->tx_ring.pg_vec) {
3399 + ret = -EBUSY;
3400 + } else {
3401 + po->tp_loss = !!val;
3402 + ret = 0;
3403 + }
3404 + release_sock(sk);
3405 + return ret;
3406 }
3407 case PACKET_AUXDATA:
3408 {
3409 @@ -3742,7 +3763,9 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv
3410 if (copy_from_user(&val, optval, sizeof(val)))
3411 return -EFAULT;
3412
3413 + lock_sock(sk);
3414 po->auxdata = !!val;
3415 + release_sock(sk);
3416 return 0;
3417 }
3418 case PACKET_ORIGDEV:
3419 @@ -3754,7 +3777,9 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv
3420 if (copy_from_user(&val, optval, sizeof(val)))
3421 return -EFAULT;
3422
3423 + lock_sock(sk);
3424 po->origdev = !!val;
3425 + release_sock(sk);
3426 return 0;
3427 }
3428 case PACKET_VNET_HDR:
3429 @@ -3763,15 +3788,20 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv
3430
3431 if (sock->type != SOCK_RAW)
3432 return -EINVAL;
3433 - if (po->rx_ring.pg_vec || po->tx_ring.pg_vec)
3434 - return -EBUSY;
3435 if (optlen < sizeof(val))
3436 return -EINVAL;
3437 if (copy_from_user(&val, optval, sizeof(val)))
3438 return -EFAULT;
3439
3440 - po->has_vnet_hdr = !!val;
3441 - return 0;
3442 + lock_sock(sk);
3443 + if (po->rx_ring.pg_vec || po->tx_ring.pg_vec) {
3444 + ret = -EBUSY;
3445 + } else {
3446 + po->has_vnet_hdr = !!val;
3447 + ret = 0;
3448 + }
3449 + release_sock(sk);
3450 + return ret;
3451 }
3452 case PACKET_TIMESTAMP:
3453 {
3454 @@ -3809,11 +3839,17 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv
3455
3456 if (optlen != sizeof(val))
3457 return -EINVAL;
3458 - if (po->rx_ring.pg_vec || po->tx_ring.pg_vec)
3459 - return -EBUSY;
3460 if (copy_from_user(&val, optval, sizeof(val)))
3461 return -EFAULT;
3462 - po->tp_tx_has_off = !!val;
3463 +
3464 + lock_sock(sk);
3465 + if (po->rx_ring.pg_vec || po->tx_ring.pg_vec) {
3466 + ret = -EBUSY;
3467 + } else {
3468 + po->tp_tx_has_off = !!val;
3469 + ret = 0;
3470 + }
3471 + release_sock(sk);
3472 return 0;
3473 }
3474 case PACKET_QDISC_BYPASS:
3475 @@ -4210,8 +4246,6 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u,
3476 /* Added to avoid minimal code churn */
3477 struct tpacket_req *req = &req_u->req;
3478
3479 - lock_sock(sk);
3480 -
3481 rb = tx_ring ? &po->tx_ring : &po->rx_ring;
3482 rb_queue = tx_ring ? &sk->sk_write_queue : &sk->sk_receive_queue;
3483
3484 @@ -4349,7 +4383,6 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u,
3485 if (pg_vec)
3486 free_pg_vec(pg_vec, order, req->tp_block_nr);
3487 out:
3488 - release_sock(sk);
3489 return err;
3490 }
3491
3492 diff --git a/net/packet/internal.h b/net/packet/internal.h
3493 index a1d2b2319ae9..3bb7c5fb3bff 100644
3494 --- a/net/packet/internal.h
3495 +++ b/net/packet/internal.h
3496 @@ -112,10 +112,12 @@ struct packet_sock {
3497 int copy_thresh;
3498 spinlock_t bind_lock;
3499 struct mutex pg_vec_lock;
3500 - unsigned int running:1, /* prot_hook is attached*/
3501 - auxdata:1,
3502 + unsigned int running; /* bind_lock must be held */
3503 + unsigned int auxdata:1, /* writer must hold sock lock */
3504 origdev:1,
3505 - has_vnet_hdr:1;
3506 + has_vnet_hdr:1,
3507 + tp_loss:1,
3508 + tp_tx_has_off:1;
3509 int pressure;
3510 int ifindex; /* bound device */
3511 __be16 num;
3512 @@ -125,8 +127,6 @@ struct packet_sock {
3513 enum tpacket_versions tp_version;
3514 unsigned int tp_hdrlen;
3515 unsigned int tp_reserve;
3516 - unsigned int tp_loss:1;
3517 - unsigned int tp_tx_has_off:1;
3518 unsigned int tp_tstamp;
3519 struct net_device __rcu *cached_dev;
3520 int (*xmit)(struct sk_buff *skb);
3521 diff --git a/net/sched/act_ife.c b/net/sched/act_ife.c
3522 index 5954e992685a..1d477b054f2e 100644
3523 --- a/net/sched/act_ife.c
3524 +++ b/net/sched/act_ife.c
3525 @@ -652,7 +652,7 @@ static int find_decode_metaid(struct sk_buff *skb, struct tcf_ife_info *ife,
3526 }
3527 }
3528
3529 - return 0;
3530 + return -ENOENT;
3531 }
3532
3533 static int tcf_ife_decode(struct sk_buff *skb, const struct tc_action *a,
3534 @@ -682,7 +682,12 @@ static int tcf_ife_decode(struct sk_buff *skb, const struct tc_action *a,
3535 u16 mtype;
3536 u16 dlen;
3537
3538 - curr_data = ife_tlv_meta_decode(tlv_data, &mtype, &dlen, NULL);
3539 + curr_data = ife_tlv_meta_decode(tlv_data, ifehdr_end, &mtype,
3540 + &dlen, NULL);
3541 + if (!curr_data) {
3542 + qstats_drop_inc(this_cpu_ptr(ife->common.cpu_qstats));
3543 + return TC_ACT_SHOT;
3544 + }
3545
3546 if (find_decode_metaid(skb, ife, mtype, dlen, curr_data)) {
3547 /* abuse overlimits to count when we receive metadata
3548 diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
3549 index f6d3d0c1e133..07b64719d1bc 100644
3550 --- a/net/sctp/ipv6.c
3551 +++ b/net/sctp/ipv6.c
3552 @@ -521,46 +521,49 @@ static void sctp_v6_to_addr(union sctp_addr *addr, struct in6_addr *saddr,
3553 addr->v6.sin6_scope_id = 0;
3554 }
3555
3556 -/* Compare addresses exactly.
3557 - * v4-mapped-v6 is also in consideration.
3558 - */
3559 -static int sctp_v6_cmp_addr(const union sctp_addr *addr1,
3560 - const union sctp_addr *addr2)
3561 +static int __sctp_v6_cmp_addr(const union sctp_addr *addr1,
3562 + const union sctp_addr *addr2)
3563 {
3564 if (addr1->sa.sa_family != addr2->sa.sa_family) {
3565 if (addr1->sa.sa_family == AF_INET &&
3566 addr2->sa.sa_family == AF_INET6 &&
3567 - ipv6_addr_v4mapped(&addr2->v6.sin6_addr)) {
3568 - if (addr2->v6.sin6_port == addr1->v4.sin_port &&
3569 - addr2->v6.sin6_addr.s6_addr32[3] ==
3570 - addr1->v4.sin_addr.s_addr)
3571 - return 1;
3572 - }
3573 + ipv6_addr_v4mapped(&addr2->v6.sin6_addr) &&
3574 + addr2->v6.sin6_addr.s6_addr32[3] ==
3575 + addr1->v4.sin_addr.s_addr)
3576 + return 1;
3577 +
3578 if (addr2->sa.sa_family == AF_INET &&
3579 addr1->sa.sa_family == AF_INET6 &&
3580 - ipv6_addr_v4mapped(&addr1->v6.sin6_addr)) {
3581 - if (addr1->v6.sin6_port == addr2->v4.sin_port &&
3582 - addr1->v6.sin6_addr.s6_addr32[3] ==
3583 - addr2->v4.sin_addr.s_addr)
3584 - return 1;
3585 - }
3586 + ipv6_addr_v4mapped(&addr1->v6.sin6_addr) &&
3587 + addr1->v6.sin6_addr.s6_addr32[3] ==
3588 + addr2->v4.sin_addr.s_addr)
3589 + return 1;
3590 +
3591 return 0;
3592 }
3593 - if (addr1->v6.sin6_port != addr2->v6.sin6_port)
3594 - return 0;
3595 +
3596 if (!ipv6_addr_equal(&addr1->v6.sin6_addr, &addr2->v6.sin6_addr))
3597 return 0;
3598 +
3599 /* If this is a linklocal address, compare the scope_id. */
3600 - if (ipv6_addr_type(&addr1->v6.sin6_addr) & IPV6_ADDR_LINKLOCAL) {
3601 - if (addr1->v6.sin6_scope_id && addr2->v6.sin6_scope_id &&
3602 - (addr1->v6.sin6_scope_id != addr2->v6.sin6_scope_id)) {
3603 - return 0;
3604 - }
3605 - }
3606 + if ((ipv6_addr_type(&addr1->v6.sin6_addr) & IPV6_ADDR_LINKLOCAL) &&
3607 + addr1->v6.sin6_scope_id && addr2->v6.sin6_scope_id &&
3608 + addr1->v6.sin6_scope_id != addr2->v6.sin6_scope_id)
3609 + return 0;
3610
3611 return 1;
3612 }
3613
3614 +/* Compare addresses exactly.
3615 + * v4-mapped-v6 is also in consideration.
3616 + */
3617 +static int sctp_v6_cmp_addr(const union sctp_addr *addr1,
3618 + const union sctp_addr *addr2)
3619 +{
3620 + return __sctp_v6_cmp_addr(addr1, addr2) &&
3621 + addr1->v6.sin6_port == addr2->v6.sin6_port;
3622 +}
3623 +
3624 /* Initialize addr struct to INADDR_ANY. */
3625 static void sctp_v6_inaddr_any(union sctp_addr *addr, __be16 port)
3626 {
3627 @@ -846,8 +849,8 @@ static int sctp_inet6_cmp_addr(const union sctp_addr *addr1,
3628 const union sctp_addr *addr2,
3629 struct sctp_sock *opt)
3630 {
3631 - struct sctp_af *af1, *af2;
3632 struct sock *sk = sctp_opt2sk(opt);
3633 + struct sctp_af *af1, *af2;
3634
3635 af1 = sctp_get_af_specific(addr1->sa.sa_family);
3636 af2 = sctp_get_af_specific(addr2->sa.sa_family);
3637 @@ -863,10 +866,7 @@ static int sctp_inet6_cmp_addr(const union sctp_addr *addr1,
3638 if (sctp_is_any(sk, addr1) || sctp_is_any(sk, addr2))
3639 return 1;
3640
3641 - if (addr1->sa.sa_family != addr2->sa.sa_family)
3642 - return 0;
3643 -
3644 - return af1->cmp_addr(addr1, addr2);
3645 + return __sctp_v6_cmp_addr(addr1, addr2);
3646 }
3647
3648 /* Verify that the provided sockaddr looks bindable. Common verification,
3649 diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
3650 index 1e0d780855c3..afd5a935bbcb 100644
3651 --- a/net/smc/af_smc.c
3652 +++ b/net/smc/af_smc.c
3653 @@ -1254,14 +1254,12 @@ static int smc_shutdown(struct socket *sock, int how)
3654 rc = smc_close_shutdown_write(smc);
3655 break;
3656 case SHUT_RD:
3657 - if (sk->sk_state == SMC_LISTEN)
3658 - rc = smc_close_active(smc);
3659 - else
3660 - rc = 0;
3661 - /* nothing more to do because peer is not involved */
3662 + rc = 0;
3663 + /* nothing more to do because peer is not involved */
3664 break;
3665 }
3666 - rc1 = kernel_sock_shutdown(smc->clcsock, how);
3667 + if (smc->clcsock)
3668 + rc1 = kernel_sock_shutdown(smc->clcsock, how);
3669 /* map sock_shutdown_cmd constants to sk_shutdown value range */
3670 sk->sk_shutdown |= how + 1;
3671
3672 diff --git a/net/strparser/strparser.c b/net/strparser/strparser.c
3673 index b9283ce5cd85..092bebc70048 100644
3674 --- a/net/strparser/strparser.c
3675 +++ b/net/strparser/strparser.c
3676 @@ -67,7 +67,7 @@ static void strp_abort_strp(struct strparser *strp, int err)
3677
3678 static void strp_start_timer(struct strparser *strp, long timeo)
3679 {
3680 - if (timeo)
3681 + if (timeo && timeo != LONG_MAX)
3682 mod_delayed_work(strp_wq, &strp->msg_timer_work, timeo);
3683 }
3684
3685 @@ -296,9 +296,9 @@ static int __strp_recv(read_descriptor_t *desc, struct sk_buff *orig_skb,
3686 strp_start_timer(strp, timeo);
3687 }
3688
3689 + stm->accum_len += cand_len;
3690 strp->need_bytes = stm->strp.full_len -
3691 stm->accum_len;
3692 - stm->accum_len += cand_len;
3693 stm->early_eaten = cand_len;
3694 STRP_STATS_ADD(strp->stats.bytes, cand_len);
3695 desc->count = 0; /* Stop reading socket */
3696 @@ -321,6 +321,7 @@ static int __strp_recv(read_descriptor_t *desc, struct sk_buff *orig_skb,
3697 /* Hurray, we have a new message! */
3698 cancel_delayed_work(&strp->msg_timer_work);
3699 strp->skb_head = NULL;
3700 + strp->need_bytes = 0;
3701 STRP_STATS_INCR(strp->stats.msgs);
3702
3703 /* Give skb to upper layer */
3704 @@ -410,9 +411,7 @@ void strp_data_ready(struct strparser *strp)
3705 return;
3706
3707 if (strp->need_bytes) {
3708 - if (strp_peek_len(strp) >= strp->need_bytes)
3709 - strp->need_bytes = 0;
3710 - else
3711 + if (strp_peek_len(strp) < strp->need_bytes)
3712 return;
3713 }
3714
3715 diff --git a/net/tipc/netlink.c b/net/tipc/netlink.c
3716 index b76f13f6fea1..d4e0bbeee727 100644
3717 --- a/net/tipc/netlink.c
3718 +++ b/net/tipc/netlink.c
3719 @@ -79,7 +79,8 @@ const struct nla_policy tipc_nl_sock_policy[TIPC_NLA_SOCK_MAX + 1] = {
3720
3721 const struct nla_policy tipc_nl_net_policy[TIPC_NLA_NET_MAX + 1] = {
3722 [TIPC_NLA_NET_UNSPEC] = { .type = NLA_UNSPEC },
3723 - [TIPC_NLA_NET_ID] = { .type = NLA_U32 }
3724 + [TIPC_NLA_NET_ID] = { .type = NLA_U32 },
3725 + [TIPC_NLA_NET_ADDR] = { .type = NLA_U32 },
3726 };
3727
3728 const struct nla_policy tipc_nl_link_policy[TIPC_NLA_LINK_MAX + 1] = {
3729 diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
3730 index e0fc84daed94..ad17a985f74e 100644
3731 --- a/net/vmw_vsock/af_vsock.c
3732 +++ b/net/vmw_vsock/af_vsock.c
3733 @@ -2018,7 +2018,13 @@ const struct vsock_transport *vsock_core_get_transport(void)
3734 }
3735 EXPORT_SYMBOL_GPL(vsock_core_get_transport);
3736
3737 +static void __exit vsock_exit(void)
3738 +{
3739 + /* Do nothing. This function makes this module removable. */
3740 +}
3741 +
3742 module_init(vsock_init_tables);
3743 +module_exit(vsock_exit);
3744
3745 MODULE_AUTHOR("VMware, Inc.");
3746 MODULE_DESCRIPTION("VMware Virtual Socket Family");
3747 diff --git a/security/commoncap.c b/security/commoncap.c
3748 index 48620c93d697..1ce701fcb3f3 100644
3749 --- a/security/commoncap.c
3750 +++ b/security/commoncap.c
3751 @@ -449,6 +449,8 @@ int cap_inode_getsecurity(struct inode *inode, const char *name, void **buffer,
3752 magic |= VFS_CAP_FLAGS_EFFECTIVE;
3753 memcpy(&cap->data, &nscap->data, sizeof(__le32) * 2 * VFS_CAP_U32);
3754 cap->magic_etc = cpu_to_le32(magic);
3755 + } else {
3756 + size = -ENOMEM;
3757 }
3758 }
3759 kfree(tmpbuf);