Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.19/0127-4.19.28-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3406 - (hide annotations) (download)
Fri Aug 2 11:47:38 2019 UTC (4 years, 10 months ago) by niro
File size: 84745 byte(s)
-linux-4.19.28
1 niro 3406 diff --git a/Makefile b/Makefile
2     index 70ed9a53558a5..c6ac023ba33a5 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 4
8     PATCHLEVEL = 19
9     -SUBLEVEL = 27
10     +SUBLEVEL = 28
11     EXTRAVERSION =
12     NAME = "People's Front"
13    
14     diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c
15     index ba150c755fcce..85b6c60f285d2 100644
16     --- a/arch/mips/kernel/irq.c
17     +++ b/arch/mips/kernel/irq.c
18     @@ -52,6 +52,7 @@ asmlinkage void spurious_interrupt(void)
19     void __init init_IRQ(void)
20     {
21     int i;
22     + unsigned int order = get_order(IRQ_STACK_SIZE);
23    
24     for (i = 0; i < NR_IRQS; i++)
25     irq_set_noprobe(i);
26     @@ -62,8 +63,7 @@ void __init init_IRQ(void)
27     arch_init_irq();
28    
29     for_each_possible_cpu(i) {
30     - int irq_pages = IRQ_STACK_SIZE / PAGE_SIZE;
31     - void *s = (void *)__get_free_pages(GFP_KERNEL, irq_pages);
32     + void *s = (void *)__get_free_pages(GFP_KERNEL, order);
33    
34     irq_stack[i] = s;
35     pr_debug("CPU%d IRQ stack at 0x%p - 0x%p\n", i,
36     diff --git a/arch/x86/boot/compressed/pgtable_64.c b/arch/x86/boot/compressed/pgtable_64.c
37     index 9e21573714910..f8debf7aeb4c1 100644
38     --- a/arch/x86/boot/compressed/pgtable_64.c
39     +++ b/arch/x86/boot/compressed/pgtable_64.c
40     @@ -1,5 +1,7 @@
41     +#include <linux/efi.h>
42     #include <asm/e820/types.h>
43     #include <asm/processor.h>
44     +#include <asm/efi.h>
45     #include "pgtable.h"
46     #include "../string.h"
47    
48     @@ -37,9 +39,10 @@ int cmdline_find_option_bool(const char *option);
49    
50     static unsigned long find_trampoline_placement(void)
51     {
52     - unsigned long bios_start, ebda_start;
53     + unsigned long bios_start = 0, ebda_start = 0;
54     unsigned long trampoline_start;
55     struct boot_e820_entry *entry;
56     + char *signature;
57     int i;
58    
59     /*
60     @@ -47,8 +50,18 @@ static unsigned long find_trampoline_placement(void)
61     * This code is based on reserve_bios_regions().
62     */
63    
64     - ebda_start = *(unsigned short *)0x40e << 4;
65     - bios_start = *(unsigned short *)0x413 << 10;
66     + /*
67     + * EFI systems may not provide legacy ROM. The memory may not be mapped
68     + * at all.
69     + *
70     + * Only look for values in the legacy ROM for non-EFI system.
71     + */
72     + signature = (char *)&boot_params->efi_info.efi_loader_signature;
73     + if (strncmp(signature, EFI32_LOADER_SIGNATURE, 4) &&
74     + strncmp(signature, EFI64_LOADER_SIGNATURE, 4)) {
75     + ebda_start = *(unsigned short *)0x40e << 4;
76     + bios_start = *(unsigned short *)0x413 << 10;
77     + }
78    
79     if (bios_start < BIOS_START_MIN || bios_start > BIOS_START_MAX)
80     bios_start = BIOS_START_MAX;
81     diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
82     index eeea634bee0a7..6a25278e00929 100644
83     --- a/arch/x86/kernel/cpu/amd.c
84     +++ b/arch/x86/kernel/cpu/amd.c
85     @@ -818,11 +818,9 @@ static void init_amd_bd(struct cpuinfo_x86 *c)
86     static void init_amd_zn(struct cpuinfo_x86 *c)
87     {
88     set_cpu_cap(c, X86_FEATURE_ZEN);
89     - /*
90     - * Fix erratum 1076: CPB feature bit not being set in CPUID. It affects
91     - * all up to and including B1.
92     - */
93     - if (c->x86_model <= 1 && c->x86_stepping <= 1)
94     +
95     + /* Fix erratum 1076: CPB feature bit not being set in CPUID. */
96     + if (!cpu_has(c, X86_FEATURE_CPB))
97     set_cpu_cap(c, X86_FEATURE_CPB);
98     }
99    
100     diff --git a/arch/xtensa/kernel/process.c b/arch/xtensa/kernel/process.c
101     index 4bb68133a72af..5a0e0bd68b769 100644
102     --- a/arch/xtensa/kernel/process.c
103     +++ b/arch/xtensa/kernel/process.c
104     @@ -320,8 +320,8 @@ unsigned long get_wchan(struct task_struct *p)
105    
106     /* Stack layout: sp-4: ra, sp-3: sp' */
107    
108     - pc = MAKE_PC_FROM_RA(*(unsigned long*)sp - 4, sp);
109     - sp = *(unsigned long *)sp - 3;
110     + pc = MAKE_PC_FROM_RA(SPILL_SLOT(sp, 0), sp);
111     + sp = SPILL_SLOT(sp, 1);
112     } while (count++ < 16);
113     return 0;
114     }
115     diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c
116     index 7f9ea8e4c1b22..1342f8e6025cc 100644
117     --- a/drivers/bluetooth/btrtl.c
118     +++ b/drivers/bluetooth/btrtl.c
119     @@ -544,10 +544,9 @@ struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
120     hdev->bus);
121    
122     if (!btrtl_dev->ic_info) {
123     - rtl_dev_err(hdev, "rtl: unknown IC info, lmp subver %04x, hci rev %04x, hci ver %04x",
124     + rtl_dev_info(hdev, "rtl: unknown IC info, lmp subver %04x, hci rev %04x, hci ver %04x",
125     lmp_subver, hci_rev, hci_ver);
126     - ret = -EINVAL;
127     - goto err_free;
128     + return btrtl_dev;
129     }
130    
131     if (btrtl_dev->ic_info->has_rom_version) {
132     @@ -602,6 +601,11 @@ int btrtl_download_firmware(struct hci_dev *hdev,
133     * standard btusb. Once that firmware is uploaded, the subver changes
134     * to a different value.
135     */
136     + if (!btrtl_dev->ic_info) {
137     + rtl_dev_info(hdev, "rtl: assuming no firmware upload needed\n");
138     + return 0;
139     + }
140     +
141     switch (btrtl_dev->ic_info->lmp_subver) {
142     case RTL_ROM_LMP_8723A:
143     case RTL_ROM_LMP_3499:
144     diff --git a/drivers/char/applicom.c b/drivers/char/applicom.c
145     index c0a5b1f3a9863..4ccc39e00ced3 100644
146     --- a/drivers/char/applicom.c
147     +++ b/drivers/char/applicom.c
148     @@ -32,6 +32,7 @@
149     #include <linux/wait.h>
150     #include <linux/init.h>
151     #include <linux/fs.h>
152     +#include <linux/nospec.h>
153    
154     #include <asm/io.h>
155     #include <linux/uaccess.h>
156     @@ -386,7 +387,11 @@ static ssize_t ac_write(struct file *file, const char __user *buf, size_t count,
157     TicCard = st_loc.tic_des_from_pc; /* tic number to send */
158     IndexCard = NumCard - 1;
159    
160     - if((NumCard < 1) || (NumCard > MAX_BOARD) || !apbs[IndexCard].RamIO)
161     + if (IndexCard >= MAX_BOARD)
162     + return -EINVAL;
163     + IndexCard = array_index_nospec(IndexCard, MAX_BOARD);
164     +
165     + if (!apbs[IndexCard].RamIO)
166     return -EINVAL;
167    
168     #ifdef DEBUG
169     @@ -697,6 +702,7 @@ static long ac_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
170     unsigned char IndexCard;
171     void __iomem *pmem;
172     int ret = 0;
173     + static int warncount = 10;
174     volatile unsigned char byte_reset_it;
175     struct st_ram_io *adgl;
176     void __user *argp = (void __user *)arg;
177     @@ -711,16 +717,12 @@ static long ac_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
178     mutex_lock(&ac_mutex);
179     IndexCard = adgl->num_card-1;
180    
181     - if(cmd != 6 && ((IndexCard >= MAX_BOARD) || !apbs[IndexCard].RamIO)) {
182     - static int warncount = 10;
183     - if (warncount) {
184     - printk( KERN_WARNING "APPLICOM driver IOCTL, bad board number %d\n",(int)IndexCard+1);
185     - warncount--;
186     - }
187     - kfree(adgl);
188     - mutex_unlock(&ac_mutex);
189     - return -EINVAL;
190     - }
191     + if (cmd != 6 && IndexCard >= MAX_BOARD)
192     + goto err;
193     + IndexCard = array_index_nospec(IndexCard, MAX_BOARD);
194     +
195     + if (cmd != 6 && !apbs[IndexCard].RamIO)
196     + goto err;
197    
198     switch (cmd) {
199    
200     @@ -838,5 +840,16 @@ static long ac_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
201     kfree(adgl);
202     mutex_unlock(&ac_mutex);
203     return 0;
204     +
205     +err:
206     + if (warncount) {
207     + pr_warn("APPLICOM driver IOCTL, bad board number %d\n",
208     + (int)IndexCard + 1);
209     + warncount--;
210     + }
211     + kfree(adgl);
212     + mutex_unlock(&ac_mutex);
213     + return -EINVAL;
214     +
215     }
216    
217     diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
218     index b100260b6ed2e..505c9a55d5551 100644
219     --- a/drivers/cpufreq/cpufreq.c
220     +++ b/drivers/cpufreq/cpufreq.c
221     @@ -545,13 +545,13 @@ EXPORT_SYMBOL_GPL(cpufreq_policy_transition_delay_us);
222     * SYSFS INTERFACE *
223     *********************************************************************/
224     static ssize_t show_boost(struct kobject *kobj,
225     - struct attribute *attr, char *buf)
226     + struct kobj_attribute *attr, char *buf)
227     {
228     return sprintf(buf, "%d\n", cpufreq_driver->boost_enabled);
229     }
230    
231     -static ssize_t store_boost(struct kobject *kobj, struct attribute *attr,
232     - const char *buf, size_t count)
233     +static ssize_t store_boost(struct kobject *kobj, struct kobj_attribute *attr,
234     + const char *buf, size_t count)
235     {
236     int ret, enable;
237    
238     diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
239     index b6a1aadaff9f3..a005711f909ea 100644
240     --- a/drivers/cpufreq/intel_pstate.c
241     +++ b/drivers/cpufreq/intel_pstate.c
242     @@ -833,7 +833,7 @@ static void intel_pstate_update_policies(void)
243     /************************** sysfs begin ************************/
244     #define show_one(file_name, object) \
245     static ssize_t show_##file_name \
246     - (struct kobject *kobj, struct attribute *attr, char *buf) \
247     + (struct kobject *kobj, struct kobj_attribute *attr, char *buf) \
248     { \
249     return sprintf(buf, "%u\n", global.object); \
250     }
251     @@ -842,7 +842,7 @@ static ssize_t intel_pstate_show_status(char *buf);
252     static int intel_pstate_update_status(const char *buf, size_t size);
253    
254     static ssize_t show_status(struct kobject *kobj,
255     - struct attribute *attr, char *buf)
256     + struct kobj_attribute *attr, char *buf)
257     {
258     ssize_t ret;
259    
260     @@ -853,7 +853,7 @@ static ssize_t show_status(struct kobject *kobj,
261     return ret;
262     }
263    
264     -static ssize_t store_status(struct kobject *a, struct attribute *b,
265     +static ssize_t store_status(struct kobject *a, struct kobj_attribute *b,
266     const char *buf, size_t count)
267     {
268     char *p = memchr(buf, '\n', count);
269     @@ -867,7 +867,7 @@ static ssize_t store_status(struct kobject *a, struct attribute *b,
270     }
271    
272     static ssize_t show_turbo_pct(struct kobject *kobj,
273     - struct attribute *attr, char *buf)
274     + struct kobj_attribute *attr, char *buf)
275     {
276     struct cpudata *cpu;
277     int total, no_turbo, turbo_pct;
278     @@ -893,7 +893,7 @@ static ssize_t show_turbo_pct(struct kobject *kobj,
279     }
280    
281     static ssize_t show_num_pstates(struct kobject *kobj,
282     - struct attribute *attr, char *buf)
283     + struct kobj_attribute *attr, char *buf)
284     {
285     struct cpudata *cpu;
286     int total;
287     @@ -914,7 +914,7 @@ static ssize_t show_num_pstates(struct kobject *kobj,
288     }
289    
290     static ssize_t show_no_turbo(struct kobject *kobj,
291     - struct attribute *attr, char *buf)
292     + struct kobj_attribute *attr, char *buf)
293     {
294     ssize_t ret;
295    
296     @@ -936,7 +936,7 @@ static ssize_t show_no_turbo(struct kobject *kobj,
297     return ret;
298     }
299    
300     -static ssize_t store_no_turbo(struct kobject *a, struct attribute *b,
301     +static ssize_t store_no_turbo(struct kobject *a, struct kobj_attribute *b,
302     const char *buf, size_t count)
303     {
304     unsigned int input;
305     @@ -983,7 +983,7 @@ static ssize_t store_no_turbo(struct kobject *a, struct attribute *b,
306     return count;
307     }
308    
309     -static ssize_t store_max_perf_pct(struct kobject *a, struct attribute *b,
310     +static ssize_t store_max_perf_pct(struct kobject *a, struct kobj_attribute *b,
311     const char *buf, size_t count)
312     {
313     unsigned int input;
314     @@ -1013,7 +1013,7 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct attribute *b,
315     return count;
316     }
317    
318     -static ssize_t store_min_perf_pct(struct kobject *a, struct attribute *b,
319     +static ssize_t store_min_perf_pct(struct kobject *a, struct kobj_attribute *b,
320     const char *buf, size_t count)
321     {
322     unsigned int input;
323     @@ -1045,12 +1045,13 @@ static ssize_t store_min_perf_pct(struct kobject *a, struct attribute *b,
324     }
325    
326     static ssize_t show_hwp_dynamic_boost(struct kobject *kobj,
327     - struct attribute *attr, char *buf)
328     + struct kobj_attribute *attr, char *buf)
329     {
330     return sprintf(buf, "%u\n", hwp_boost);
331     }
332    
333     -static ssize_t store_hwp_dynamic_boost(struct kobject *a, struct attribute *b,
334     +static ssize_t store_hwp_dynamic_boost(struct kobject *a,
335     + struct kobj_attribute *b,
336     const char *buf, size_t count)
337     {
338     unsigned int input;
339     diff --git a/drivers/gnss/sirf.c b/drivers/gnss/sirf.c
340     index 2c22836d3ffd5..4596fde16dfe6 100644
341     --- a/drivers/gnss/sirf.c
342     +++ b/drivers/gnss/sirf.c
343     @@ -310,30 +310,26 @@ static int sirf_probe(struct serdev_device *serdev)
344     ret = -ENODEV;
345     goto err_put_device;
346     }
347     +
348     + ret = regulator_enable(data->vcc);
349     + if (ret)
350     + goto err_put_device;
351     +
352     + /* Wait for chip to boot into hibernate mode. */
353     + msleep(SIRF_BOOT_DELAY);
354     }
355    
356     if (data->wakeup) {
357     ret = gpiod_to_irq(data->wakeup);
358     if (ret < 0)
359     - goto err_put_device;
360     -
361     + goto err_disable_vcc;
362     data->irq = ret;
363    
364     - ret = devm_request_threaded_irq(dev, data->irq, NULL,
365     - sirf_wakeup_handler,
366     + ret = request_threaded_irq(data->irq, NULL, sirf_wakeup_handler,
367     IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
368     "wakeup", data);
369     if (ret)
370     - goto err_put_device;
371     - }
372     -
373     - if (data->on_off) {
374     - ret = regulator_enable(data->vcc);
375     - if (ret)
376     - goto err_put_device;
377     -
378     - /* Wait for chip to boot into hibernate mode */
379     - msleep(SIRF_BOOT_DELAY);
380     + goto err_disable_vcc;
381     }
382    
383     if (IS_ENABLED(CONFIG_PM)) {
384     @@ -342,7 +338,7 @@ static int sirf_probe(struct serdev_device *serdev)
385     } else {
386     ret = sirf_runtime_resume(dev);
387     if (ret < 0)
388     - goto err_disable_vcc;
389     + goto err_free_irq;
390     }
391    
392     ret = gnss_register_device(gdev);
393     @@ -356,6 +352,9 @@ err_disable_rpm:
394     pm_runtime_disable(dev);
395     else
396     sirf_runtime_suspend(dev);
397     +err_free_irq:
398     + if (data->wakeup)
399     + free_irq(data->irq, data);
400     err_disable_vcc:
401     if (data->on_off)
402     regulator_disable(data->vcc);
403     @@ -376,6 +375,9 @@ static void sirf_remove(struct serdev_device *serdev)
404     else
405     sirf_runtime_suspend(&serdev->dev);
406    
407     + if (data->wakeup)
408     + free_irq(data->irq, data);
409     +
410     if (data->on_off)
411     regulator_disable(data->vcc);
412    
413     diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
414     index 9f697a5b8e3df..c078c791f481a 100644
415     --- a/drivers/net/dsa/mv88e6xxx/chip.c
416     +++ b/drivers/net/dsa/mv88e6xxx/chip.c
417     @@ -884,7 +884,7 @@ static uint64_t _mv88e6xxx_get_ethtool_stat(struct mv88e6xxx_chip *chip,
418     default:
419     return U64_MAX;
420     }
421     - value = (((u64)high) << 16) | low;
422     + value = (((u64)high) << 32) | low;
423     return value;
424     }
425    
426     @@ -3070,7 +3070,7 @@ static const struct mv88e6xxx_ops mv88e6161_ops = {
427     .port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
428     .port_link_state = mv88e6352_port_link_state,
429     .port_get_cmode = mv88e6185_port_get_cmode,
430     - .stats_snapshot = mv88e6320_g1_stats_snapshot,
431     + .stats_snapshot = mv88e6xxx_g1_stats_snapshot,
432     .stats_set_histogram = mv88e6095_g1_stats_set_histogram,
433     .stats_get_sset_count = mv88e6095_stats_get_sset_count,
434     .stats_get_strings = mv88e6095_stats_get_strings,
435     @@ -4188,7 +4188,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
436     .name = "Marvell 88E6190",
437     .num_databases = 4096,
438     .num_ports = 11, /* 10 + Z80 */
439     - .num_internal_phys = 11,
440     + .num_internal_phys = 9,
441     .num_gpio = 16,
442     .max_vid = 8191,
443     .port_base_addr = 0x0,
444     @@ -4211,7 +4211,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
445     .name = "Marvell 88E6190X",
446     .num_databases = 4096,
447     .num_ports = 11, /* 10 + Z80 */
448     - .num_internal_phys = 11,
449     + .num_internal_phys = 9,
450     .num_gpio = 16,
451     .max_vid = 8191,
452     .port_base_addr = 0x0,
453     @@ -4234,7 +4234,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
454     .name = "Marvell 88E6191",
455     .num_databases = 4096,
456     .num_ports = 11, /* 10 + Z80 */
457     - .num_internal_phys = 11,
458     + .num_internal_phys = 9,
459     .max_vid = 8191,
460     .port_base_addr = 0x0,
461     .phy_base_addr = 0x0,
462     @@ -4281,7 +4281,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
463     .name = "Marvell 88E6290",
464     .num_databases = 4096,
465     .num_ports = 11, /* 10 + Z80 */
466     - .num_internal_phys = 11,
467     + .num_internal_phys = 9,
468     .num_gpio = 16,
469     .max_vid = 8191,
470     .port_base_addr = 0x0,
471     @@ -4443,7 +4443,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
472     .name = "Marvell 88E6390",
473     .num_databases = 4096,
474     .num_ports = 11, /* 10 + Z80 */
475     - .num_internal_phys = 11,
476     + .num_internal_phys = 9,
477     .num_gpio = 16,
478     .max_vid = 8191,
479     .port_base_addr = 0x0,
480     @@ -4466,7 +4466,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
481     .name = "Marvell 88E6390X",
482     .num_databases = 4096,
483     .num_ports = 11, /* 10 + Z80 */
484     - .num_internal_phys = 11,
485     + .num_internal_phys = 9,
486     .num_gpio = 16,
487     .max_vid = 8191,
488     .port_base_addr = 0x0,
489     @@ -4561,6 +4561,14 @@ static int mv88e6xxx_smi_init(struct mv88e6xxx_chip *chip,
490     return 0;
491     }
492    
493     +static void mv88e6xxx_ports_cmode_init(struct mv88e6xxx_chip *chip)
494     +{
495     + int i;
496     +
497     + for (i = 0; i < mv88e6xxx_num_ports(chip); i++)
498     + chip->ports[i].cmode = MV88E6XXX_PORT_STS_CMODE_INVALID;
499     +}
500     +
501     static enum dsa_tag_protocol mv88e6xxx_get_tag_protocol(struct dsa_switch *ds,
502     int port)
503     {
504     @@ -4597,6 +4605,8 @@ static const char *mv88e6xxx_drv_probe(struct device *dsa_dev,
505     if (err)
506     goto free;
507    
508     + mv88e6xxx_ports_cmode_init(chip);
509     +
510     mutex_lock(&chip->reg_lock);
511     err = mv88e6xxx_switch_reset(chip);
512     mutex_unlock(&chip->reg_lock);
513     diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c
514     index 92945841c8e88..7fffce734f0a5 100644
515     --- a/drivers/net/dsa/mv88e6xxx/port.c
516     +++ b/drivers/net/dsa/mv88e6xxx/port.c
517     @@ -190,7 +190,7 @@ int mv88e6xxx_port_set_duplex(struct mv88e6xxx_chip *chip, int port, int dup)
518     /* normal duplex detection */
519     break;
520     default:
521     - return -EINVAL;
522     + return -EOPNOTSUPP;
523     }
524    
525     err = mv88e6xxx_port_write(chip, port, MV88E6XXX_PORT_MAC_CTL, reg);
526     @@ -374,6 +374,10 @@ int mv88e6390x_port_set_cmode(struct mv88e6xxx_chip *chip, int port,
527     cmode = 0;
528     }
529    
530     + /* cmode doesn't change, nothing to do for us */
531     + if (cmode == chip->ports[port].cmode)
532     + return 0;
533     +
534     lane = mv88e6390x_serdes_get_lane(chip, port);
535     if (lane < 0)
536     return lane;
537     @@ -384,7 +388,7 @@ int mv88e6390x_port_set_cmode(struct mv88e6xxx_chip *chip, int port,
538     return err;
539     }
540    
541     - err = mv88e6390_serdes_power(chip, port, false);
542     + err = mv88e6390x_serdes_power(chip, port, false);
543     if (err)
544     return err;
545    
546     @@ -400,7 +404,7 @@ int mv88e6390x_port_set_cmode(struct mv88e6xxx_chip *chip, int port,
547     if (err)
548     return err;
549    
550     - err = mv88e6390_serdes_power(chip, port, true);
551     + err = mv88e6390x_serdes_power(chip, port, true);
552     if (err)
553     return err;
554    
555     diff --git a/drivers/net/dsa/mv88e6xxx/port.h b/drivers/net/dsa/mv88e6xxx/port.h
556     index b31910023bb64..95b59f5eb3931 100644
557     --- a/drivers/net/dsa/mv88e6xxx/port.h
558     +++ b/drivers/net/dsa/mv88e6xxx/port.h
559     @@ -52,6 +52,7 @@
560     #define MV88E6185_PORT_STS_CMODE_1000BASE_X 0x0005
561     #define MV88E6185_PORT_STS_CMODE_PHY 0x0006
562     #define MV88E6185_PORT_STS_CMODE_DISABLED 0x0007
563     +#define MV88E6XXX_PORT_STS_CMODE_INVALID 0xff
564    
565     /* Offset 0x01: MAC (or PCS or Physical) Control Register */
566     #define MV88E6XXX_PORT_MAC_CTL 0x01
567     diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
568     index 034f57500f00e..1fdaf86bbe8fb 100644
569     --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
570     +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
571     @@ -463,6 +463,12 @@ normal_tx:
572     }
573    
574     length >>= 9;
575     + if (unlikely(length >= ARRAY_SIZE(bnxt_lhint_arr))) {
576     + dev_warn_ratelimited(&pdev->dev, "Dropped oversize %d bytes TX packet.\n",
577     + skb->len);
578     + i = 0;
579     + goto tx_dma_error;
580     + }
581     flags |= bnxt_lhint_arr[length];
582     txbd->tx_bd_len_flags_type = cpu_to_le32(flags);
583    
584     diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c
585     index ae2f35039343b..1485f66cf7b0c 100644
586     --- a/drivers/net/ethernet/marvell/sky2.c
587     +++ b/drivers/net/ethernet/marvell/sky2.c
588     @@ -46,6 +46,7 @@
589     #include <linux/mii.h>
590     #include <linux/of_device.h>
591     #include <linux/of_net.h>
592     +#include <linux/dmi.h>
593    
594     #include <asm/irq.h>
595    
596     @@ -93,7 +94,7 @@ static int copybreak __read_mostly = 128;
597     module_param(copybreak, int, 0);
598     MODULE_PARM_DESC(copybreak, "Receive copy threshold");
599    
600     -static int disable_msi = 0;
601     +static int disable_msi = -1;
602     module_param(disable_msi, int, 0);
603     MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)");
604    
605     @@ -4931,6 +4932,24 @@ static const char *sky2_name(u8 chipid, char *buf, int sz)
606     return buf;
607     }
608    
609     +static const struct dmi_system_id msi_blacklist[] = {
610     + {
611     + .ident = "Dell Inspiron 1545",
612     + .matches = {
613     + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
614     + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1545"),
615     + },
616     + },
617     + {
618     + .ident = "Gateway P-79",
619     + .matches = {
620     + DMI_MATCH(DMI_SYS_VENDOR, "Gateway"),
621     + DMI_MATCH(DMI_PRODUCT_NAME, "P-79"),
622     + },
623     + },
624     + {}
625     +};
626     +
627     static int sky2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
628     {
629     struct net_device *dev, *dev1;
630     @@ -5042,6 +5061,9 @@ static int sky2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
631     goto err_out_free_pci;
632     }
633    
634     + if (disable_msi == -1)
635     + disable_msi = !!dmi_check_system(msi_blacklist);
636     +
637     if (!disable_msi && pci_enable_msi(pdev) == 0) {
638     err = sky2_test_msi(hw);
639     if (err) {
640     diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c
641     index 42f5bfa33694c..de5a6abda7e3f 100644
642     --- a/drivers/net/ethernet/microchip/lan743x_main.c
643     +++ b/drivers/net/ethernet/microchip/lan743x_main.c
644     @@ -1403,7 +1403,8 @@ static int lan743x_tx_frame_start(struct lan743x_tx *tx,
645     }
646    
647     static void lan743x_tx_frame_add_lso(struct lan743x_tx *tx,
648     - unsigned int frame_length)
649     + unsigned int frame_length,
650     + int nr_frags)
651     {
652     /* called only from within lan743x_tx_xmit_frame.
653     * assuming tx->ring_lock has already been acquired.
654     @@ -1413,6 +1414,10 @@ static void lan743x_tx_frame_add_lso(struct lan743x_tx *tx,
655    
656     /* wrap up previous descriptor */
657     tx->frame_data0 |= TX_DESC_DATA0_EXT_;
658     + if (nr_frags <= 0) {
659     + tx->frame_data0 |= TX_DESC_DATA0_LS_;
660     + tx->frame_data0 |= TX_DESC_DATA0_IOC_;
661     + }
662     tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail];
663     tx_descriptor->data0 = tx->frame_data0;
664    
665     @@ -1517,8 +1522,11 @@ static void lan743x_tx_frame_end(struct lan743x_tx *tx,
666     u32 tx_tail_flags = 0;
667    
668     /* wrap up previous descriptor */
669     - tx->frame_data0 |= TX_DESC_DATA0_LS_;
670     - tx->frame_data0 |= TX_DESC_DATA0_IOC_;
671     + if ((tx->frame_data0 & TX_DESC_DATA0_DTYPE_MASK_) ==
672     + TX_DESC_DATA0_DTYPE_DATA_) {
673     + tx->frame_data0 |= TX_DESC_DATA0_LS_;
674     + tx->frame_data0 |= TX_DESC_DATA0_IOC_;
675     + }
676    
677     tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail];
678     buffer_info = &tx->buffer_info[tx->frame_tail];
679     @@ -1603,7 +1611,7 @@ static netdev_tx_t lan743x_tx_xmit_frame(struct lan743x_tx *tx,
680     }
681    
682     if (gso)
683     - lan743x_tx_frame_add_lso(tx, frame_length);
684     + lan743x_tx_frame_add_lso(tx, frame_length, nr_frags);
685    
686     if (nr_frags <= 0)
687     goto finish;
688     diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
689     index 01711e6e9a394..e1427b56a073a 100644
690     --- a/drivers/net/geneve.c
691     +++ b/drivers/net/geneve.c
692     @@ -636,15 +636,20 @@ out:
693     static int geneve_open(struct net_device *dev)
694     {
695     struct geneve_dev *geneve = netdev_priv(dev);
696     - bool ipv6 = !!(geneve->info.mode & IP_TUNNEL_INFO_IPV6);
697     bool metadata = geneve->collect_md;
698     + bool ipv4, ipv6;
699     int ret = 0;
700    
701     + ipv6 = geneve->info.mode & IP_TUNNEL_INFO_IPV6 || metadata;
702     + ipv4 = !ipv6 || metadata;
703     #if IS_ENABLED(CONFIG_IPV6)
704     - if (ipv6 || metadata)
705     + if (ipv6) {
706     ret = geneve_sock_add(geneve, true);
707     + if (ret < 0 && ret != -EAFNOSUPPORT)
708     + ipv4 = false;
709     + }
710     #endif
711     - if (!ret && (!ipv6 || metadata))
712     + if (ipv4)
713     ret = geneve_sock_add(geneve, false);
714     if (ret < 0)
715     geneve_sock_release(geneve);
716     diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
717     index c9e2a986ccb72..c8320405c8f1d 100644
718     --- a/drivers/net/hyperv/netvsc_drv.c
719     +++ b/drivers/net/hyperv/netvsc_drv.c
720     @@ -743,6 +743,14 @@ void netvsc_linkstatus_callback(struct net_device *net,
721     schedule_delayed_work(&ndev_ctx->dwork, 0);
722     }
723    
724     +static void netvsc_comp_ipcsum(struct sk_buff *skb)
725     +{
726     + struct iphdr *iph = (struct iphdr *)skb->data;
727     +
728     + iph->check = 0;
729     + iph->check = ip_fast_csum(iph, iph->ihl);
730     +}
731     +
732     static struct sk_buff *netvsc_alloc_recv_skb(struct net_device *net,
733     struct napi_struct *napi,
734     const struct ndis_tcp_ip_checksum_info *csum_info,
735     @@ -766,9 +774,17 @@ static struct sk_buff *netvsc_alloc_recv_skb(struct net_device *net,
736     /* skb is already created with CHECKSUM_NONE */
737     skb_checksum_none_assert(skb);
738    
739     - /*
740     - * In Linux, the IP checksum is always checked.
741     - * Do L4 checksum offload if enabled and present.
742     + /* Incoming packets may have IP header checksum verified by the host.
743     + * They may not have IP header checksum computed after coalescing.
744     + * We compute it here if the flags are set, because on Linux, the IP
745     + * checksum is always checked.
746     + */
747     + if (csum_info && csum_info->receive.ip_checksum_value_invalid &&
748     + csum_info->receive.ip_checksum_succeeded &&
749     + skb->protocol == htons(ETH_P_IP))
750     + netvsc_comp_ipcsum(skb);
751     +
752     + /* Do L4 checksum offload if enabled and present.
753     */
754     if (csum_info && (net->features & NETIF_F_RXCSUM)) {
755     if (csum_info->receive.tcp_checksum_succeeded ||
756     diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
757     index 3db06b40580d3..05a6ae32ff652 100644
758     --- a/drivers/net/phy/micrel.c
759     +++ b/drivers/net/phy/micrel.c
760     @@ -339,6 +339,17 @@ static int ksz8041_config_aneg(struct phy_device *phydev)
761     return genphy_config_aneg(phydev);
762     }
763    
764     +static int ksz8061_config_init(struct phy_device *phydev)
765     +{
766     + int ret;
767     +
768     + ret = phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_DEVID1, 0xB61A);
769     + if (ret)
770     + return ret;
771     +
772     + return kszphy_config_init(phydev);
773     +}
774     +
775     static int ksz9021_load_values_from_of(struct phy_device *phydev,
776     const struct device_node *of_node,
777     u16 reg,
778     @@ -934,7 +945,7 @@ static struct phy_driver ksphy_driver[] = {
779     .phy_id_mask = MICREL_PHY_ID_MASK,
780     .features = PHY_BASIC_FEATURES,
781     .flags = PHY_HAS_INTERRUPT,
782     - .config_init = kszphy_config_init,
783     + .config_init = ksz8061_config_init,
784     .ack_interrupt = kszphy_ack_interrupt,
785     .config_intr = kszphy_config_intr,
786     .suspend = genphy_suspend,
787     diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
788     index 2787e8b1d668a..f6e70f2dfd12b 100644
789     --- a/drivers/net/phy/phylink.c
790     +++ b/drivers/net/phy/phylink.c
791     @@ -348,6 +348,10 @@ static int phylink_get_mac_state(struct phylink *pl, struct phylink_link_state *
792     linkmode_zero(state->lp_advertising);
793     state->interface = pl->link_config.interface;
794     state->an_enabled = pl->link_config.an_enabled;
795     + state->speed = SPEED_UNKNOWN;
796     + state->duplex = DUPLEX_UNKNOWN;
797     + state->pause = MLO_PAUSE_NONE;
798     + state->an_complete = 0;
799     state->link = 1;
800    
801     return pl->ops->mac_link_state(ndev, state);
802     diff --git a/drivers/net/team/team_mode_loadbalance.c b/drivers/net/team/team_mode_loadbalance.c
803     index a5ef97010eb34..5541e1c19936c 100644
804     --- a/drivers/net/team/team_mode_loadbalance.c
805     +++ b/drivers/net/team/team_mode_loadbalance.c
806     @@ -325,6 +325,20 @@ static int lb_bpf_func_set(struct team *team, struct team_gsetter_ctx *ctx)
807     return 0;
808     }
809    
810     +static void lb_bpf_func_free(struct team *team)
811     +{
812     + struct lb_priv *lb_priv = get_lb_priv(team);
813     + struct bpf_prog *fp;
814     +
815     + if (!lb_priv->ex->orig_fprog)
816     + return;
817     +
818     + __fprog_destroy(lb_priv->ex->orig_fprog);
819     + fp = rcu_dereference_protected(lb_priv->fp,
820     + lockdep_is_held(&team->lock));
821     + bpf_prog_destroy(fp);
822     +}
823     +
824     static int lb_tx_method_get(struct team *team, struct team_gsetter_ctx *ctx)
825     {
826     struct lb_priv *lb_priv = get_lb_priv(team);
827     @@ -639,6 +653,7 @@ static void lb_exit(struct team *team)
828    
829     team_options_unregister(team, lb_options,
830     ARRAY_SIZE(lb_options));
831     + lb_bpf_func_free(team);
832     cancel_delayed_work_sync(&lb_priv->ex->stats.refresh_dw);
833     free_percpu(lb_priv->pcpu_stats);
834     kfree(lb_priv->ex);
835     diff --git a/drivers/net/tun.c b/drivers/net/tun.c
836     index 65844f28db30e..f3293355c7849 100644
837     --- a/drivers/net/tun.c
838     +++ b/drivers/net/tun.c
839     @@ -2122,9 +2122,9 @@ static void *tun_ring_recv(struct tun_file *tfile, int noblock, int *err)
840     }
841    
842     add_wait_queue(&tfile->wq.wait, &wait);
843     - current->state = TASK_INTERRUPTIBLE;
844    
845     while (1) {
846     + set_current_state(TASK_INTERRUPTIBLE);
847     ptr = ptr_ring_consume(&tfile->tx_ring);
848     if (ptr)
849     break;
850     @@ -2140,7 +2140,7 @@ static void *tun_ring_recv(struct tun_file *tfile, int noblock, int *err)
851     schedule();
852     }
853    
854     - current->state = TASK_RUNNING;
855     + __set_current_state(TASK_RUNNING);
856     remove_wait_queue(&tfile->wq.wait, &wait);
857    
858     out:
859     diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
860     index 735ad838e2ba8..6e381354f658e 100644
861     --- a/drivers/net/usb/qmi_wwan.c
862     +++ b/drivers/net/usb/qmi_wwan.c
863     @@ -976,6 +976,13 @@ static const struct usb_device_id products[] = {
864     0xff),
865     .driver_info = (unsigned long)&qmi_wwan_info_quirk_dtr,
866     },
867     + { /* Quectel EG12/EM12 */
868     + USB_DEVICE_AND_INTERFACE_INFO(0x2c7c, 0x0512,
869     + USB_CLASS_VENDOR_SPEC,
870     + USB_SUBCLASS_VENDOR_SPEC,
871     + 0xff),
872     + .driver_info = (unsigned long)&qmi_wwan_info_quirk_dtr,
873     + },
874    
875     /* 3. Combined interface devices matching on interface number */
876     {QMI_FIXED_INTF(0x0408, 0xea42, 4)}, /* Yota / Megafon M100-1 */
877     @@ -1343,17 +1350,20 @@ static bool quectel_ec20_detected(struct usb_interface *intf)
878     return false;
879     }
880    
881     -static bool quectel_ep06_diag_detected(struct usb_interface *intf)
882     +static bool quectel_diag_detected(struct usb_interface *intf)
883     {
884     struct usb_device *dev = interface_to_usbdev(intf);
885     struct usb_interface_descriptor intf_desc = intf->cur_altsetting->desc;
886     + u16 id_vendor = le16_to_cpu(dev->descriptor.idVendor);
887     + u16 id_product = le16_to_cpu(dev->descriptor.idProduct);
888    
889     - if (le16_to_cpu(dev->descriptor.idVendor) == 0x2c7c &&
890     - le16_to_cpu(dev->descriptor.idProduct) == 0x0306 &&
891     - intf_desc.bNumEndpoints == 2)
892     - return true;
893     + if (id_vendor != 0x2c7c || intf_desc.bNumEndpoints != 2)
894     + return false;
895    
896     - return false;
897     + if (id_product == 0x0306 || id_product == 0x0512)
898     + return true;
899     + else
900     + return false;
901     }
902    
903     static int qmi_wwan_probe(struct usb_interface *intf,
904     @@ -1390,13 +1400,13 @@ static int qmi_wwan_probe(struct usb_interface *intf,
905     return -ENODEV;
906     }
907    
908     - /* Quectel EP06/EM06/EG06 supports dynamic interface configuration, so
909     + /* Several Quectel modems supports dynamic interface configuration, so
910     * we need to match on class/subclass/protocol. These values are
911     * identical for the diagnostic- and QMI-interface, but bNumEndpoints is
912     * different. Ignore the current interface if the number of endpoints
913     * the number for the diag interface (two).
914     */
915     - if (quectel_ep06_diag_detected(intf))
916     + if (quectel_diag_detected(intf))
917     return -ENODEV;
918    
919     return usbnet_probe(intf, id);
920     diff --git a/drivers/net/xen-netback/hash.c b/drivers/net/xen-netback/hash.c
921     index 0ccb021f1e786..10d580c3dea3f 100644
922     --- a/drivers/net/xen-netback/hash.c
923     +++ b/drivers/net/xen-netback/hash.c
924     @@ -454,6 +454,8 @@ void xenvif_init_hash(struct xenvif *vif)
925     if (xenvif_hash_cache_size == 0)
926     return;
927    
928     + BUG_ON(vif->hash.cache.count);
929     +
930     spin_lock_init(&vif->hash.cache.lock);
931     INIT_LIST_HEAD(&vif->hash.cache.list);
932     }
933     diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
934     index f6ae23fc3f6b0..82add0ac4a5f6 100644
935     --- a/drivers/net/xen-netback/interface.c
936     +++ b/drivers/net/xen-netback/interface.c
937     @@ -153,6 +153,13 @@ static u16 xenvif_select_queue(struct net_device *dev, struct sk_buff *skb,
938     {
939     struct xenvif *vif = netdev_priv(dev);
940     unsigned int size = vif->hash.size;
941     + unsigned int num_queues;
942     +
943     + /* If queues are not set up internally - always return 0
944     + * as the packet going to be dropped anyway */
945     + num_queues = READ_ONCE(vif->num_queues);
946     + if (num_queues < 1)
947     + return 0;
948    
949     if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE)
950     return fallback(dev, skb, NULL) % dev->real_num_tx_queues;
951     diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
952     index 3621e05a7494c..d5081ffdc8f03 100644
953     --- a/drivers/net/xen-netback/netback.c
954     +++ b/drivers/net/xen-netback/netback.c
955     @@ -1072,11 +1072,6 @@ static int xenvif_handle_frag_list(struct xenvif_queue *queue, struct sk_buff *s
956     skb_frag_size_set(&frags[i], len);
957     }
958    
959     - /* Copied all the bits from the frag list -- free it. */
960     - skb_frag_list_init(skb);
961     - xenvif_skb_zerocopy_prepare(queue, nskb);
962     - kfree_skb(nskb);
963     -
964     /* Release all the original (foreign) frags. */
965     for (f = 0; f < skb_shinfo(skb)->nr_frags; f++)
966     skb_frag_unref(skb, f);
967     @@ -1145,6 +1140,8 @@ static int xenvif_tx_submit(struct xenvif_queue *queue)
968     xenvif_fill_frags(queue, skb);
969    
970     if (unlikely(skb_has_frag_list(skb))) {
971     + struct sk_buff *nskb = skb_shinfo(skb)->frag_list;
972     + xenvif_skb_zerocopy_prepare(queue, nskb);
973     if (xenvif_handle_frag_list(queue, skb)) {
974     if (net_ratelimit())
975     netdev_err(queue->vif->dev,
976     @@ -1153,6 +1150,9 @@ static int xenvif_tx_submit(struct xenvif_queue *queue)
977     kfree_skb(skb);
978     continue;
979     }
980     + /* Copied all the bits from the frag list -- free it. */
981     + skb_frag_list_init(skb);
982     + kfree_skb(nskb);
983     }
984    
985     skb->dev = queue->vif->dev;
986     diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
987     index b5f638286037a..18e4289baf993 100644
988     --- a/drivers/scsi/scsi_lib.c
989     +++ b/drivers/scsi/scsi_lib.c
990     @@ -757,6 +757,7 @@ static blk_status_t scsi_result_to_blk_status(struct scsi_cmnd *cmd, int result)
991     set_host_byte(cmd, DID_OK);
992     return BLK_STS_TARGET;
993     case DID_NEXUS_FAILURE:
994     + set_host_byte(cmd, DID_OK);
995     return BLK_STS_NEXUS;
996     case DID_ALLOC_FAILURE:
997     set_host_byte(cmd, DID_OK);
998     diff --git a/drivers/staging/android/ashmem.c b/drivers/staging/android/ashmem.c
999     index a880b5c6c6c32..be815330ed958 100644
1000     --- a/drivers/staging/android/ashmem.c
1001     +++ b/drivers/staging/android/ashmem.c
1002     @@ -75,6 +75,9 @@ struct ashmem_range {
1003     /* LRU list of unpinned pages, protected by ashmem_mutex */
1004     static LIST_HEAD(ashmem_lru_list);
1005    
1006     +static atomic_t ashmem_shrink_inflight = ATOMIC_INIT(0);
1007     +static DECLARE_WAIT_QUEUE_HEAD(ashmem_shrink_wait);
1008     +
1009     /*
1010     * long lru_count - The count of pages on our LRU list.
1011     *
1012     @@ -168,19 +171,15 @@ static inline void lru_del(struct ashmem_range *range)
1013     * @end: The ending page (inclusive)
1014     *
1015     * This function is protected by ashmem_mutex.
1016     - *
1017     - * Return: 0 if successful, or -ENOMEM if there is an error
1018     */
1019     -static int range_alloc(struct ashmem_area *asma,
1020     - struct ashmem_range *prev_range, unsigned int purged,
1021     - size_t start, size_t end)
1022     +static void range_alloc(struct ashmem_area *asma,
1023     + struct ashmem_range *prev_range, unsigned int purged,
1024     + size_t start, size_t end,
1025     + struct ashmem_range **new_range)
1026     {
1027     - struct ashmem_range *range;
1028     -
1029     - range = kmem_cache_zalloc(ashmem_range_cachep, GFP_KERNEL);
1030     - if (!range)
1031     - return -ENOMEM;
1032     + struct ashmem_range *range = *new_range;
1033    
1034     + *new_range = NULL;
1035     range->asma = asma;
1036     range->pgstart = start;
1037     range->pgend = end;
1038     @@ -190,8 +189,6 @@ static int range_alloc(struct ashmem_area *asma,
1039    
1040     if (range_on_lru(range))
1041     lru_add(range);
1042     -
1043     - return 0;
1044     }
1045    
1046     /**
1047     @@ -438,7 +435,6 @@ out:
1048     static unsigned long
1049     ashmem_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
1050     {
1051     - struct ashmem_range *range, *next;
1052     unsigned long freed = 0;
1053    
1054     /* We might recurse into filesystem code, so bail out if necessary */
1055     @@ -448,21 +444,33 @@ ashmem_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
1056     if (!mutex_trylock(&ashmem_mutex))
1057     return -1;
1058    
1059     - list_for_each_entry_safe(range, next, &ashmem_lru_list, lru) {
1060     + while (!list_empty(&ashmem_lru_list)) {
1061     + struct ashmem_range *range =
1062     + list_first_entry(&ashmem_lru_list, typeof(*range), lru);
1063     loff_t start = range->pgstart * PAGE_SIZE;
1064     loff_t end = (range->pgend + 1) * PAGE_SIZE;
1065     + struct file *f = range->asma->file;
1066    
1067     - range->asma->file->f_op->fallocate(range->asma->file,
1068     - FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
1069     - start, end - start);
1070     + get_file(f);
1071     + atomic_inc(&ashmem_shrink_inflight);
1072     range->purged = ASHMEM_WAS_PURGED;
1073     lru_del(range);
1074    
1075     freed += range_size(range);
1076     + mutex_unlock(&ashmem_mutex);
1077     + f->f_op->fallocate(f,
1078     + FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
1079     + start, end - start);
1080     + fput(f);
1081     + if (atomic_dec_and_test(&ashmem_shrink_inflight))
1082     + wake_up_all(&ashmem_shrink_wait);
1083     + if (!mutex_trylock(&ashmem_mutex))
1084     + goto out;
1085     if (--sc->nr_to_scan <= 0)
1086     break;
1087     }
1088     mutex_unlock(&ashmem_mutex);
1089     +out:
1090     return freed;
1091     }
1092    
1093     @@ -582,7 +590,8 @@ static int get_name(struct ashmem_area *asma, void __user *name)
1094     *
1095     * Caller must hold ashmem_mutex.
1096     */
1097     -static int ashmem_pin(struct ashmem_area *asma, size_t pgstart, size_t pgend)
1098     +static int ashmem_pin(struct ashmem_area *asma, size_t pgstart, size_t pgend,
1099     + struct ashmem_range **new_range)
1100     {
1101     struct ashmem_range *range, *next;
1102     int ret = ASHMEM_NOT_PURGED;
1103     @@ -635,7 +644,7 @@ static int ashmem_pin(struct ashmem_area *asma, size_t pgstart, size_t pgend)
1104     * second half and adjust the first chunk's endpoint.
1105     */
1106     range_alloc(asma, range, range->purged,
1107     - pgend + 1, range->pgend);
1108     + pgend + 1, range->pgend, new_range);
1109     range_shrink(range, range->pgstart, pgstart - 1);
1110     break;
1111     }
1112     @@ -649,7 +658,8 @@ static int ashmem_pin(struct ashmem_area *asma, size_t pgstart, size_t pgend)
1113     *
1114     * Caller must hold ashmem_mutex.
1115     */
1116     -static int ashmem_unpin(struct ashmem_area *asma, size_t pgstart, size_t pgend)
1117     +static int ashmem_unpin(struct ashmem_area *asma, size_t pgstart, size_t pgend,
1118     + struct ashmem_range **new_range)
1119     {
1120     struct ashmem_range *range, *next;
1121     unsigned int purged = ASHMEM_NOT_PURGED;
1122     @@ -675,7 +685,8 @@ restart:
1123     }
1124     }
1125    
1126     - return range_alloc(asma, range, purged, pgstart, pgend);
1127     + range_alloc(asma, range, purged, pgstart, pgend, new_range);
1128     + return 0;
1129     }
1130    
1131     /*
1132     @@ -708,11 +719,19 @@ static int ashmem_pin_unpin(struct ashmem_area *asma, unsigned long cmd,
1133     struct ashmem_pin pin;
1134     size_t pgstart, pgend;
1135     int ret = -EINVAL;
1136     + struct ashmem_range *range = NULL;
1137    
1138     if (copy_from_user(&pin, p, sizeof(pin)))
1139     return -EFAULT;
1140    
1141     + if (cmd == ASHMEM_PIN || cmd == ASHMEM_UNPIN) {
1142     + range = kmem_cache_zalloc(ashmem_range_cachep, GFP_KERNEL);
1143     + if (!range)
1144     + return -ENOMEM;
1145     + }
1146     +
1147     mutex_lock(&ashmem_mutex);
1148     + wait_event(ashmem_shrink_wait, !atomic_read(&ashmem_shrink_inflight));
1149    
1150     if (!asma->file)
1151     goto out_unlock;
1152     @@ -735,10 +754,10 @@ static int ashmem_pin_unpin(struct ashmem_area *asma, unsigned long cmd,
1153    
1154     switch (cmd) {
1155     case ASHMEM_PIN:
1156     - ret = ashmem_pin(asma, pgstart, pgend);
1157     + ret = ashmem_pin(asma, pgstart, pgend, &range);
1158     break;
1159     case ASHMEM_UNPIN:
1160     - ret = ashmem_unpin(asma, pgstart, pgend);
1161     + ret = ashmem_unpin(asma, pgstart, pgend, &range);
1162     break;
1163     case ASHMEM_GET_PIN_STATUS:
1164     ret = ashmem_get_pin_status(asma, pgstart, pgend);
1165     @@ -747,6 +766,8 @@ static int ashmem_pin_unpin(struct ashmem_area *asma, unsigned long cmd,
1166    
1167     out_unlock:
1168     mutex_unlock(&ashmem_mutex);
1169     + if (range)
1170     + kmem_cache_free(ashmem_range_cachep, range);
1171    
1172     return ret;
1173     }
1174     diff --git a/drivers/staging/android/ion/ion_system_heap.c b/drivers/staging/android/ion/ion_system_heap.c
1175     index 701eb9f3b0f13..0a1b1ff1be042 100644
1176     --- a/drivers/staging/android/ion/ion_system_heap.c
1177     +++ b/drivers/staging/android/ion/ion_system_heap.c
1178     @@ -247,10 +247,10 @@ static void ion_system_heap_destroy_pools(struct ion_page_pool **pools)
1179     static int ion_system_heap_create_pools(struct ion_page_pool **pools)
1180     {
1181     int i;
1182     - gfp_t gfp_flags = low_order_gfp_flags;
1183    
1184     for (i = 0; i < NUM_ORDERS; i++) {
1185     struct ion_page_pool *pool;
1186     + gfp_t gfp_flags = low_order_gfp_flags;
1187    
1188     if (orders[i] > 4)
1189     gfp_flags = high_order_gfp_flags;
1190     diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c
1191     index e521ed9d08870..35bd4d2efe166 100644
1192     --- a/drivers/staging/comedi/drivers/ni_660x.c
1193     +++ b/drivers/staging/comedi/drivers/ni_660x.c
1194     @@ -602,6 +602,7 @@ static int ni_660x_set_pfi_routing(struct comedi_device *dev,
1195     case NI_660X_PFI_OUTPUT_DIO:
1196     if (chan > 31)
1197     return -EINVAL;
1198     + break;
1199     default:
1200     return -EINVAL;
1201     }
1202     diff --git a/drivers/staging/erofs/unzip_vle.c b/drivers/staging/erofs/unzip_vle.c
1203     index 1279241449f4b..f44662dd795c4 100644
1204     --- a/drivers/staging/erofs/unzip_vle.c
1205     +++ b/drivers/staging/erofs/unzip_vle.c
1206     @@ -57,15 +57,30 @@ enum z_erofs_vle_work_role {
1207     Z_EROFS_VLE_WORK_SECONDARY,
1208     Z_EROFS_VLE_WORK_PRIMARY,
1209     /*
1210     - * The current work has at least been linked with the following
1211     - * processed chained works, which means if the processing page
1212     - * is the tail partial page of the work, the current work can
1213     - * safely use the whole page, as illustrated below:
1214     - * +--------------+-------------------------------------------+
1215     - * | tail page | head page (of the previous work) |
1216     - * +--------------+-------------------------------------------+
1217     - * /\ which belongs to the current work
1218     - * [ (*) this page can be used for the current work itself. ]
1219     + * The current work was the tail of an exist chain, and the previous
1220     + * processed chained works are all decided to be hooked up to it.
1221     + * A new chain should be created for the remaining unprocessed works,
1222     + * therefore different from Z_EROFS_VLE_WORK_PRIMARY_FOLLOWED,
1223     + * the next work cannot reuse the whole page in the following scenario:
1224     + * ________________________________________________________________
1225     + * | tail (partial) page | head (partial) page |
1226     + * | (belongs to the next work) | (belongs to the current work) |
1227     + * |_______PRIMARY_FOLLOWED_______|________PRIMARY_HOOKED___________|
1228     + */
1229     + Z_EROFS_VLE_WORK_PRIMARY_HOOKED,
1230     + /*
1231     + * The current work has been linked with the processed chained works,
1232     + * and could be also linked with the potential remaining works, which
1233     + * means if the processing page is the tail partial page of the work,
1234     + * the current work can safely use the whole page (since the next work
1235     + * is under control) for in-place decompression, as illustrated below:
1236     + * ________________________________________________________________
1237     + * | tail (partial) page | head (partial) page |
1238     + * | (of the current work) | (of the previous work) |
1239     + * | PRIMARY_FOLLOWED or | |
1240     + * |_____PRIMARY_HOOKED____|____________PRIMARY_FOLLOWED____________|
1241     + *
1242     + * [ (*) the above page can be used for the current work itself. ]
1243     */
1244     Z_EROFS_VLE_WORK_PRIMARY_FOLLOWED,
1245     Z_EROFS_VLE_WORK_MAX
1246     @@ -234,10 +249,10 @@ static int z_erofs_vle_work_add_page(
1247     return ret ? 0 : -EAGAIN;
1248     }
1249    
1250     -static inline bool try_to_claim_workgroup(
1251     - struct z_erofs_vle_workgroup *grp,
1252     - z_erofs_vle_owned_workgrp_t *owned_head,
1253     - bool *hosted)
1254     +static enum z_erofs_vle_work_role
1255     +try_to_claim_workgroup(struct z_erofs_vle_workgroup *grp,
1256     + z_erofs_vle_owned_workgrp_t *owned_head,
1257     + bool *hosted)
1258     {
1259     DBG_BUGON(*hosted == true);
1260    
1261     @@ -251,6 +266,9 @@ retry:
1262    
1263     *owned_head = grp;
1264     *hosted = true;
1265     + /* lucky, I am the followee :) */
1266     + return Z_EROFS_VLE_WORK_PRIMARY_FOLLOWED;
1267     +
1268     } else if (grp->next == Z_EROFS_VLE_WORKGRP_TAIL) {
1269     /*
1270     * type 2, link to the end of a existing open chain,
1271     @@ -260,12 +278,11 @@ retry:
1272     if (Z_EROFS_VLE_WORKGRP_TAIL != cmpxchg(&grp->next,
1273     Z_EROFS_VLE_WORKGRP_TAIL, *owned_head))
1274     goto retry;
1275     -
1276     *owned_head = Z_EROFS_VLE_WORKGRP_TAIL;
1277     - } else
1278     - return false; /* :( better luck next time */
1279     + return Z_EROFS_VLE_WORK_PRIMARY_HOOKED;
1280     + }
1281    
1282     - return true; /* lucky, I am the followee :) */
1283     + return Z_EROFS_VLE_WORK_PRIMARY; /* :( better luck next time */
1284     }
1285    
1286     static struct z_erofs_vle_work *
1287     @@ -337,12 +354,8 @@ z_erofs_vle_work_lookup(struct super_block *sb,
1288     *hosted = false;
1289     if (!primary)
1290     *role = Z_EROFS_VLE_WORK_SECONDARY;
1291     - /* claim the workgroup if possible */
1292     - else if (try_to_claim_workgroup(grp, owned_head, hosted))
1293     - *role = Z_EROFS_VLE_WORK_PRIMARY_FOLLOWED;
1294     - else
1295     - *role = Z_EROFS_VLE_WORK_PRIMARY;
1296     -
1297     + else /* claim the workgroup if possible */
1298     + *role = try_to_claim_workgroup(grp, owned_head, hosted);
1299     return work;
1300     }
1301    
1302     @@ -419,6 +432,9 @@ static inline void __update_workgrp_llen(struct z_erofs_vle_workgroup *grp,
1303     }
1304     }
1305    
1306     +#define builder_is_hooked(builder) \
1307     + ((builder)->role >= Z_EROFS_VLE_WORK_PRIMARY_HOOKED)
1308     +
1309     #define builder_is_followed(builder) \
1310     ((builder)->role >= Z_EROFS_VLE_WORK_PRIMARY_FOLLOWED)
1311    
1312     @@ -583,7 +599,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
1313     struct z_erofs_vle_work_builder *const builder = &fe->builder;
1314     const loff_t offset = page_offset(page);
1315    
1316     - bool tight = builder_is_followed(builder);
1317     + bool tight = builder_is_hooked(builder);
1318     struct z_erofs_vle_work *work = builder->work;
1319    
1320     #ifdef EROFS_FS_HAS_MANAGED_CACHE
1321     @@ -606,8 +622,12 @@ repeat:
1322    
1323     /* lucky, within the range of the current map_blocks */
1324     if (offset + cur >= map->m_la &&
1325     - offset + cur < map->m_la + map->m_llen)
1326     + offset + cur < map->m_la + map->m_llen) {
1327     + /* didn't get a valid unzip work previously (very rare) */
1328     + if (!builder->work)
1329     + goto restart_now;
1330     goto hitted;
1331     + }
1332    
1333     /* go ahead the next map_blocks */
1334     debugln("%s: [out-of-range] pos %llu", __func__, offset + cur);
1335     @@ -621,6 +641,7 @@ repeat:
1336     if (unlikely(err))
1337     goto err_out;
1338    
1339     +restart_now:
1340     if (unlikely(!(map->m_flags & EROFS_MAP_MAPPED)))
1341     goto hitted;
1342    
1343     @@ -646,7 +667,7 @@ repeat:
1344     builder->role = Z_EROFS_VLE_WORK_PRIMARY;
1345     #endif
1346    
1347     - tight &= builder_is_followed(builder);
1348     + tight &= builder_is_hooked(builder);
1349     work = builder->work;
1350     hitted:
1351     cur = end - min_t(unsigned, offset + end - map->m_la, end);
1352     @@ -661,6 +682,9 @@ hitted:
1353     (tight ? Z_EROFS_PAGE_TYPE_EXCLUSIVE :
1354     Z_EROFS_VLE_PAGE_TYPE_TAIL_SHARED));
1355    
1356     + if (cur)
1357     + tight &= builder_is_followed(builder);
1358     +
1359     retry:
1360     err = z_erofs_vle_work_add_page(builder, page, page_type);
1361     /* should allocate an additional staging page for pagevec */
1362     @@ -901,11 +925,10 @@ repeat:
1363     if (llen > grp->llen)
1364     llen = grp->llen;
1365    
1366     - err = z_erofs_vle_unzip_fast_percpu(compressed_pages,
1367     - clusterpages, pages, llen, work->pageofs,
1368     - z_erofs_onlinepage_endio);
1369     + err = z_erofs_vle_unzip_fast_percpu(compressed_pages, clusterpages,
1370     + pages, llen, work->pageofs);
1371     if (err != -ENOTSUPP)
1372     - goto out_percpu;
1373     + goto out;
1374    
1375     if (sparsemem_pages >= nr_pages)
1376     goto skip_allocpage;
1377     @@ -926,8 +949,25 @@ skip_allocpage:
1378     erofs_vunmap(vout, nr_pages);
1379    
1380     out:
1381     + /* must handle all compressed pages before endding pages */
1382     + for (i = 0; i < clusterpages; ++i) {
1383     + page = compressed_pages[i];
1384     +
1385     +#ifdef EROFS_FS_HAS_MANAGED_CACHE
1386     + if (page->mapping == mngda)
1387     + continue;
1388     +#endif
1389     + /* recycle all individual staging pages */
1390     + (void)z_erofs_gather_if_stagingpage(page_pool, page);
1391     +
1392     + WRITE_ONCE(compressed_pages[i], NULL);
1393     + }
1394     +
1395     for (i = 0; i < nr_pages; ++i) {
1396     page = pages[i];
1397     + if (!page)
1398     + continue;
1399     +
1400     DBG_BUGON(page->mapping == NULL);
1401    
1402     /* recycle all individual staging pages */
1403     @@ -940,20 +980,6 @@ out:
1404     z_erofs_onlinepage_endio(page);
1405     }
1406    
1407     -out_percpu:
1408     - for (i = 0; i < clusterpages; ++i) {
1409     - page = compressed_pages[i];
1410     -
1411     -#ifdef EROFS_FS_HAS_MANAGED_CACHE
1412     - if (page->mapping == mngda)
1413     - continue;
1414     -#endif
1415     - /* recycle all individual staging pages */
1416     - (void)z_erofs_gather_if_stagingpage(page_pool, page);
1417     -
1418     - WRITE_ONCE(compressed_pages[i], NULL);
1419     - }
1420     -
1421     if (pages == z_pagemap_global)
1422     mutex_unlock(&z_pagemap_global_lock);
1423     else if (unlikely(pages != pages_onstack))
1424     diff --git a/drivers/staging/erofs/unzip_vle.h b/drivers/staging/erofs/unzip_vle.h
1425     index 3316bc36965d4..684ff06fc7bf8 100644
1426     --- a/drivers/staging/erofs/unzip_vle.h
1427     +++ b/drivers/staging/erofs/unzip_vle.h
1428     @@ -218,8 +218,7 @@ extern int z_erofs_vle_plain_copy(struct page **compressed_pages,
1429    
1430     extern int z_erofs_vle_unzip_fast_percpu(struct page **compressed_pages,
1431     unsigned clusterpages, struct page **pages,
1432     - unsigned outlen, unsigned short pageofs,
1433     - void (*endio)(struct page *));
1434     + unsigned int outlen, unsigned short pageofs);
1435    
1436     extern int z_erofs_vle_unzip_vmap(struct page **compressed_pages,
1437     unsigned clusterpages, void *vaddr, unsigned llen,
1438     diff --git a/drivers/staging/erofs/unzip_vle_lz4.c b/drivers/staging/erofs/unzip_vle_lz4.c
1439     index 9cb35cd33365a..055420e8af2cf 100644
1440     --- a/drivers/staging/erofs/unzip_vle_lz4.c
1441     +++ b/drivers/staging/erofs/unzip_vle_lz4.c
1442     @@ -105,8 +105,7 @@ int z_erofs_vle_unzip_fast_percpu(struct page **compressed_pages,
1443     unsigned clusterpages,
1444     struct page **pages,
1445     unsigned outlen,
1446     - unsigned short pageofs,
1447     - void (*endio)(struct page *))
1448     + unsigned short pageofs)
1449     {
1450     void *vin, *vout;
1451     unsigned nr_pages, i, j;
1452     @@ -128,31 +127,30 @@ int z_erofs_vle_unzip_fast_percpu(struct page **compressed_pages,
1453     ret = z_erofs_unzip_lz4(vin, vout + pageofs,
1454     clusterpages * PAGE_SIZE, outlen);
1455    
1456     - if (ret >= 0) {
1457     - outlen = ret;
1458     - ret = 0;
1459     - }
1460     + if (ret < 0)
1461     + goto out;
1462     + ret = 0;
1463    
1464     for (i = 0; i < nr_pages; ++i) {
1465     j = min((unsigned)PAGE_SIZE - pageofs, outlen);
1466    
1467     if (pages[i] != NULL) {
1468     - if (ret < 0)
1469     - SetPageError(pages[i]);
1470     - else if (clusterpages == 1 && pages[i] == compressed_pages[0])
1471     + if (clusterpages == 1 &&
1472     + pages[i] == compressed_pages[0]) {
1473     memcpy(vin + pageofs, vout + pageofs, j);
1474     - else {
1475     + } else {
1476     void *dst = kmap_atomic(pages[i]);
1477    
1478     memcpy(dst + pageofs, vout + pageofs, j);
1479     kunmap_atomic(dst);
1480     }
1481     - endio(pages[i]);
1482     }
1483     vout += PAGE_SIZE;
1484     outlen -= j;
1485     pageofs = 0;
1486     }
1487     +
1488     +out:
1489     preempt_enable();
1490    
1491     if (clusterpages == 1)
1492     diff --git a/drivers/staging/wilc1000/linux_wlan.c b/drivers/staging/wilc1000/linux_wlan.c
1493     index 3b8d237decbf1..649caae2b6033 100644
1494     --- a/drivers/staging/wilc1000/linux_wlan.c
1495     +++ b/drivers/staging/wilc1000/linux_wlan.c
1496     @@ -1090,8 +1090,8 @@ int wilc_netdev_init(struct wilc **wilc, struct device *dev, int io_type,
1497     vif->wilc = *wilc;
1498     vif->ndev = ndev;
1499     wl->vif[i] = vif;
1500     - wl->vif_num = i;
1501     - vif->idx = wl->vif_num;
1502     + wl->vif_num = i + 1;
1503     + vif->idx = i;
1504    
1505     ndev->netdev_ops = &wilc_netdev_ops;
1506    
1507     diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
1508     index 09bf6b4b741b8..1493d0fdf5ad1 100644
1509     --- a/drivers/usb/host/xhci-pci.c
1510     +++ b/drivers/usb/host/xhci-pci.c
1511     @@ -187,6 +187,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
1512     xhci->quirks |= XHCI_SSIC_PORT_UNUSED;
1513     if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
1514     (pdev->device == PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI ||
1515     + pdev->device == PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_XHCI ||
1516     pdev->device == PCI_DEVICE_ID_INTEL_APL_XHCI))
1517     xhci->quirks |= XHCI_INTEL_USB_ROLE_SW;
1518     if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
1519     diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
1520     index c0777a374a88f..4c66edf533fe9 100644
1521     --- a/drivers/usb/serial/cp210x.c
1522     +++ b/drivers/usb/serial/cp210x.c
1523     @@ -61,6 +61,7 @@ static const struct usb_device_id id_table[] = {
1524     { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */
1525     { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */
1526     { USB_DEVICE(0x0908, 0x01FF) }, /* Siemens RUGGEDCOM USB Serial Console */
1527     + { USB_DEVICE(0x0B00, 0x3070) }, /* Ingenico 3070 */
1528     { USB_DEVICE(0x0BED, 0x1100) }, /* MEI (TM) Cashflow-SC Bill/Voucher Acceptor */
1529     { USB_DEVICE(0x0BED, 0x1101) }, /* MEI series 2000 Combo Acceptor */
1530     { USB_DEVICE(0x0FCF, 0x1003) }, /* Dynastream ANT development board */
1531     @@ -1353,8 +1354,13 @@ static int cp210x_gpio_get(struct gpio_chip *gc, unsigned int gpio)
1532     if (priv->partnum == CP210X_PARTNUM_CP2105)
1533     req_type = REQTYPE_INTERFACE_TO_HOST;
1534    
1535     + result = usb_autopm_get_interface(serial->interface);
1536     + if (result)
1537     + return result;
1538     +
1539     result = cp210x_read_vendor_block(serial, req_type,
1540     CP210X_READ_LATCH, &buf, sizeof(buf));
1541     + usb_autopm_put_interface(serial->interface);
1542     if (result < 0)
1543     return result;
1544    
1545     @@ -1375,6 +1381,10 @@ static void cp210x_gpio_set(struct gpio_chip *gc, unsigned int gpio, int value)
1546    
1547     buf.mask = BIT(gpio);
1548    
1549     + result = usb_autopm_get_interface(serial->interface);
1550     + if (result)
1551     + goto out;
1552     +
1553     if (priv->partnum == CP210X_PARTNUM_CP2105) {
1554     result = cp210x_write_vendor_block(serial,
1555     REQTYPE_HOST_TO_INTERFACE,
1556     @@ -1392,6 +1402,8 @@ static void cp210x_gpio_set(struct gpio_chip *gc, unsigned int gpio, int value)
1557     NULL, 0, USB_CTRL_SET_TIMEOUT);
1558     }
1559    
1560     + usb_autopm_put_interface(serial->interface);
1561     +out:
1562     if (result < 0) {
1563     dev_err(&serial->interface->dev, "failed to set GPIO value: %d\n",
1564     result);
1565     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1566     index b5cef322826f1..1d8077e880a01 100644
1567     --- a/drivers/usb/serial/ftdi_sio.c
1568     +++ b/drivers/usb/serial/ftdi_sio.c
1569     @@ -1015,6 +1015,8 @@ static const struct usb_device_id id_table_combined[] = {
1570     { USB_DEVICE(CYPRESS_VID, CYPRESS_WICED_BT_USB_PID) },
1571     { USB_DEVICE(CYPRESS_VID, CYPRESS_WICED_WL_USB_PID) },
1572     { USB_DEVICE(AIRBUS_DS_VID, AIRBUS_DS_P8GR) },
1573     + /* EZPrototypes devices */
1574     + { USB_DEVICE(EZPROTOTYPES_VID, HJELMSLUND_USB485_ISO_PID) },
1575     { } /* Terminating entry */
1576     };
1577    
1578     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
1579     index 975d02666c5a0..b863bedb55a13 100644
1580     --- a/drivers/usb/serial/ftdi_sio_ids.h
1581     +++ b/drivers/usb/serial/ftdi_sio_ids.h
1582     @@ -1308,6 +1308,12 @@
1583     #define IONICS_VID 0x1c0c
1584     #define IONICS_PLUGCOMPUTER_PID 0x0102
1585    
1586     +/*
1587     + * EZPrototypes (PID reseller)
1588     + */
1589     +#define EZPROTOTYPES_VID 0x1c40
1590     +#define HJELMSLUND_USB485_ISO_PID 0x0477
1591     +
1592     /*
1593     * Dresden Elektronik Sensor Terminal Board
1594     */
1595     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
1596     index fb544340888b0..faf833e8f5573 100644
1597     --- a/drivers/usb/serial/option.c
1598     +++ b/drivers/usb/serial/option.c
1599     @@ -1148,6 +1148,8 @@ static const struct usb_device_id option_ids[] = {
1600     .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) },
1601     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
1602     .driver_info = NCTRL(0) | RSVD(3) },
1603     + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1102, 0xff), /* Telit ME910 (ECM) */
1604     + .driver_info = NCTRL(0) },
1605     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),
1606     .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
1607     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
1608     diff --git a/fs/aio.c b/fs/aio.c
1609     index 44551d96eaa4b..45d5ef8dd0a87 100644
1610     --- a/fs/aio.c
1611     +++ b/fs/aio.c
1612     @@ -1661,6 +1661,7 @@ static int aio_poll_wake(struct wait_queue_entry *wait, unsigned mode, int sync,
1613     struct poll_iocb *req = container_of(wait, struct poll_iocb, wait);
1614     struct aio_kiocb *iocb = container_of(req, struct aio_kiocb, poll);
1615     __poll_t mask = key_to_poll(key);
1616     + unsigned long flags;
1617    
1618     req->woken = true;
1619    
1620     @@ -1669,10 +1670,15 @@ static int aio_poll_wake(struct wait_queue_entry *wait, unsigned mode, int sync,
1621     if (!(mask & req->events))
1622     return 0;
1623    
1624     - /* try to complete the iocb inline if we can: */
1625     - if (spin_trylock(&iocb->ki_ctx->ctx_lock)) {
1626     + /*
1627     + * Try to complete the iocb inline if we can. Use
1628     + * irqsave/irqrestore because not all filesystems (e.g. fuse)
1629     + * call this function with IRQs disabled and because IRQs
1630     + * have to be disabled before ctx_lock is obtained.
1631     + */
1632     + if (spin_trylock_irqsave(&iocb->ki_ctx->ctx_lock, flags)) {
1633     list_del(&iocb->ki_list);
1634     - spin_unlock(&iocb->ki_ctx->ctx_lock);
1635     + spin_unlock_irqrestore(&iocb->ki_ctx->ctx_lock, flags);
1636    
1637     list_del_init(&req->wait.entry);
1638     aio_poll_complete(iocb, mask);
1639     diff --git a/fs/exec.c b/fs/exec.c
1640     index 1ebf6e5a521d9..433b1257694ab 100644
1641     --- a/fs/exec.c
1642     +++ b/fs/exec.c
1643     @@ -929,7 +929,7 @@ int kernel_read_file(struct file *file, void **buf, loff_t *size,
1644     bytes = kernel_read(file, *buf + pos, i_size - pos, &pos);
1645     if (bytes < 0) {
1646     ret = bytes;
1647     - goto out;
1648     + goto out_free;
1649     }
1650    
1651     if (bytes == 0)
1652     diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
1653     index 882a9b9e34bc2..72f59e8321e79 100644
1654     --- a/include/linux/cpufreq.h
1655     +++ b/include/linux/cpufreq.h
1656     @@ -254,20 +254,12 @@ __ATTR(_name, 0644, show_##_name, store_##_name)
1657     static struct freq_attr _name = \
1658     __ATTR(_name, 0200, NULL, store_##_name)
1659    
1660     -struct global_attr {
1661     - struct attribute attr;
1662     - ssize_t (*show)(struct kobject *kobj,
1663     - struct attribute *attr, char *buf);
1664     - ssize_t (*store)(struct kobject *a, struct attribute *b,
1665     - const char *c, size_t count);
1666     -};
1667     -
1668     #define define_one_global_ro(_name) \
1669     -static struct global_attr _name = \
1670     +static struct kobj_attribute _name = \
1671     __ATTR(_name, 0444, show_##_name, NULL)
1672    
1673     #define define_one_global_rw(_name) \
1674     -static struct global_attr _name = \
1675     +static struct kobj_attribute _name = \
1676     __ATTR(_name, 0644, show_##_name, store_##_name)
1677    
1678    
1679     diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
1680     index ec9d6bc658559..fabee6db0abb7 100644
1681     --- a/include/net/bluetooth/bluetooth.h
1682     +++ b/include/net/bluetooth/bluetooth.h
1683     @@ -276,7 +276,7 @@ int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
1684     int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo);
1685     int bt_sock_wait_ready(struct sock *sk, unsigned long flags);
1686    
1687     -void bt_accept_enqueue(struct sock *parent, struct sock *sk);
1688     +void bt_accept_enqueue(struct sock *parent, struct sock *sk, bool bh);
1689     void bt_accept_unlink(struct sock *sk);
1690     struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock);
1691    
1692     diff --git a/include/net/icmp.h b/include/net/icmp.h
1693     index 3ef2743a8eecc..8665bf24e3b7a 100644
1694     --- a/include/net/icmp.h
1695     +++ b/include/net/icmp.h
1696     @@ -22,6 +22,7 @@
1697    
1698     #include <net/inet_sock.h>
1699     #include <net/snmp.h>
1700     +#include <net/ip.h>
1701    
1702     struct icmp_err {
1703     int errno;
1704     @@ -39,7 +40,13 @@ struct net_proto_family;
1705     struct sk_buff;
1706     struct net;
1707    
1708     -void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info);
1709     +void __icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info,
1710     + const struct ip_options *opt);
1711     +static inline void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info)
1712     +{
1713     + __icmp_send(skb_in, type, code, info, &IPCB(skb_in)->opt);
1714     +}
1715     +
1716     int icmp_rcv(struct sk_buff *skb);
1717     void icmp_err(struct sk_buff *skb, u32 info);
1718     int icmp_init(void);
1719     diff --git a/include/net/ip.h b/include/net/ip.h
1720     index e44b1a44f67ad..71d31e4d4391f 100644
1721     --- a/include/net/ip.h
1722     +++ b/include/net/ip.h
1723     @@ -638,6 +638,8 @@ static inline int ip_options_echo(struct net *net, struct ip_options *dopt,
1724     }
1725    
1726     void ip_options_fragment(struct sk_buff *skb);
1727     +int __ip_options_compile(struct net *net, struct ip_options *opt,
1728     + struct sk_buff *skb, __be32 *info);
1729     int ip_options_compile(struct net *net, struct ip_options *opt,
1730     struct sk_buff *skb);
1731     int ip_options_get(struct net *net, struct ip_options_rcu **optp,
1732     @@ -687,7 +689,7 @@ extern int sysctl_icmp_msgs_burst;
1733     int ip_misc_proc_init(void);
1734     #endif
1735    
1736     -int rtm_getroute_parse_ip_proto(struct nlattr *attr, u8 *ip_proto,
1737     +int rtm_getroute_parse_ip_proto(struct nlattr *attr, u8 *ip_proto, u8 family,
1738     struct netlink_ext_ack *extack);
1739    
1740     #endif /* _IP_H */
1741     diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
1742     index a6d00093f35e7..c44da48de7dfd 100644
1743     --- a/include/net/sch_generic.h
1744     +++ b/include/net/sch_generic.h
1745     @@ -47,7 +47,10 @@ struct qdisc_size_table {
1746     struct qdisc_skb_head {
1747     struct sk_buff *head;
1748     struct sk_buff *tail;
1749     - __u32 qlen;
1750     + union {
1751     + u32 qlen;
1752     + atomic_t atomic_qlen;
1753     + };
1754     spinlock_t lock;
1755     };
1756    
1757     @@ -384,27 +387,19 @@ static inline void qdisc_cb_private_validate(const struct sk_buff *skb, int sz)
1758     BUILD_BUG_ON(sizeof(qcb->data) < sz);
1759     }
1760    
1761     -static inline int qdisc_qlen_cpu(const struct Qdisc *q)
1762     -{
1763     - return this_cpu_ptr(q->cpu_qstats)->qlen;
1764     -}
1765     -
1766     static inline int qdisc_qlen(const struct Qdisc *q)
1767     {
1768     return q->q.qlen;
1769     }
1770    
1771     -static inline int qdisc_qlen_sum(const struct Qdisc *q)
1772     +static inline u32 qdisc_qlen_sum(const struct Qdisc *q)
1773     {
1774     - __u32 qlen = q->qstats.qlen;
1775     - int i;
1776     + u32 qlen = q->qstats.qlen;
1777    
1778     - if (q->flags & TCQ_F_NOLOCK) {
1779     - for_each_possible_cpu(i)
1780     - qlen += per_cpu_ptr(q->cpu_qstats, i)->qlen;
1781     - } else {
1782     + if (q->flags & TCQ_F_NOLOCK)
1783     + qlen += atomic_read(&q->q.atomic_qlen);
1784     + else
1785     qlen += q->q.qlen;
1786     - }
1787    
1788     return qlen;
1789     }
1790     @@ -776,14 +771,14 @@ static inline void qdisc_qstats_cpu_backlog_inc(struct Qdisc *sch,
1791     this_cpu_add(sch->cpu_qstats->backlog, qdisc_pkt_len(skb));
1792     }
1793    
1794     -static inline void qdisc_qstats_cpu_qlen_inc(struct Qdisc *sch)
1795     +static inline void qdisc_qstats_atomic_qlen_inc(struct Qdisc *sch)
1796     {
1797     - this_cpu_inc(sch->cpu_qstats->qlen);
1798     + atomic_inc(&sch->q.atomic_qlen);
1799     }
1800    
1801     -static inline void qdisc_qstats_cpu_qlen_dec(struct Qdisc *sch)
1802     +static inline void qdisc_qstats_atomic_qlen_dec(struct Qdisc *sch)
1803     {
1804     - this_cpu_dec(sch->cpu_qstats->qlen);
1805     + atomic_dec(&sch->q.atomic_qlen);
1806     }
1807    
1808     static inline void qdisc_qstats_cpu_requeues_inc(struct Qdisc *sch)
1809     diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
1810     index 4d81be2d07390..bcb42aaf1b3ae 100644
1811     --- a/kernel/bpf/verifier.c
1812     +++ b/kernel/bpf/verifier.c
1813     @@ -6035,7 +6035,8 @@ static int fixup_bpf_calls(struct bpf_verifier_env *env)
1814     u32 off_reg;
1815    
1816     aux = &env->insn_aux_data[i + delta];
1817     - if (!aux->alu_state)
1818     + if (!aux->alu_state ||
1819     + aux->alu_state == BPF_ALU_NON_POINTER)
1820     continue;
1821    
1822     isneg = aux->alu_state & BPF_ALU_NEG_VALUE;
1823     diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
1824     index 5574e862de8d5..5a1c64a26e819 100644
1825     --- a/kernel/trace/trace_events_filter.c
1826     +++ b/kernel/trace/trace_events_filter.c
1827     @@ -1301,7 +1301,7 @@ static int parse_pred(const char *str, void *data,
1828     /* go past the last quote */
1829     i++;
1830    
1831     - } else if (isdigit(str[i])) {
1832     + } else if (isdigit(str[i]) || str[i] == '-') {
1833    
1834     /* Make sure the field is not a string */
1835     if (is_string_field(field)) {
1836     @@ -1314,6 +1314,9 @@ static int parse_pred(const char *str, void *data,
1837     goto err_free;
1838     }
1839    
1840     + if (str[i] == '-')
1841     + i++;
1842     +
1843     /* We allow 0xDEADBEEF */
1844     while (isalnum(str[i]))
1845     i++;
1846     diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
1847     index deacc52d7ff18..8d12198eaa949 100644
1848     --- a/net/bluetooth/af_bluetooth.c
1849     +++ b/net/bluetooth/af_bluetooth.c
1850     @@ -154,15 +154,25 @@ void bt_sock_unlink(struct bt_sock_list *l, struct sock *sk)
1851     }
1852     EXPORT_SYMBOL(bt_sock_unlink);
1853    
1854     -void bt_accept_enqueue(struct sock *parent, struct sock *sk)
1855     +void bt_accept_enqueue(struct sock *parent, struct sock *sk, bool bh)
1856     {
1857     BT_DBG("parent %p, sk %p", parent, sk);
1858    
1859     sock_hold(sk);
1860     - lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
1861     +
1862     + if (bh)
1863     + bh_lock_sock_nested(sk);
1864     + else
1865     + lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
1866     +
1867     list_add_tail(&bt_sk(sk)->accept_q, &bt_sk(parent)->accept_q);
1868     bt_sk(sk)->parent = parent;
1869     - release_sock(sk);
1870     +
1871     + if (bh)
1872     + bh_unlock_sock(sk);
1873     + else
1874     + release_sock(sk);
1875     +
1876     parent->sk_ack_backlog++;
1877     }
1878     EXPORT_SYMBOL(bt_accept_enqueue);
1879     diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
1880     index 686bdc6b35b03..a3a2cd55e23a9 100644
1881     --- a/net/bluetooth/l2cap_sock.c
1882     +++ b/net/bluetooth/l2cap_sock.c
1883     @@ -1252,7 +1252,7 @@ static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan)
1884    
1885     l2cap_sock_init(sk, parent);
1886    
1887     - bt_accept_enqueue(parent, sk);
1888     + bt_accept_enqueue(parent, sk, false);
1889    
1890     release_sock(parent);
1891    
1892     diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c
1893     index d606e92122916..c044ff2f73e6c 100644
1894     --- a/net/bluetooth/rfcomm/sock.c
1895     +++ b/net/bluetooth/rfcomm/sock.c
1896     @@ -988,7 +988,7 @@ int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc *
1897     rfcomm_pi(sk)->channel = channel;
1898    
1899     sk->sk_state = BT_CONFIG;
1900     - bt_accept_enqueue(parent, sk);
1901     + bt_accept_enqueue(parent, sk, true);
1902    
1903     /* Accept connection and return socket DLC */
1904     *d = rfcomm_pi(sk)->dlc;
1905     diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
1906     index 8f0f9279eac9f..a4ca55df73908 100644
1907     --- a/net/bluetooth/sco.c
1908     +++ b/net/bluetooth/sco.c
1909     @@ -193,7 +193,7 @@ static void __sco_chan_add(struct sco_conn *conn, struct sock *sk,
1910     conn->sk = sk;
1911    
1912     if (parent)
1913     - bt_accept_enqueue(parent, sk);
1914     + bt_accept_enqueue(parent, sk, true);
1915     }
1916    
1917     static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
1918     diff --git a/net/core/gen_stats.c b/net/core/gen_stats.c
1919     index 188d693cb251a..e2fd8baec65f3 100644
1920     --- a/net/core/gen_stats.c
1921     +++ b/net/core/gen_stats.c
1922     @@ -256,7 +256,6 @@ __gnet_stats_copy_queue_cpu(struct gnet_stats_queue *qstats,
1923     for_each_possible_cpu(i) {
1924     const struct gnet_stats_queue *qcpu = per_cpu_ptr(q, i);
1925    
1926     - qstats->qlen = 0;
1927     qstats->backlog += qcpu->backlog;
1928     qstats->drops += qcpu->drops;
1929     qstats->requeues += qcpu->requeues;
1930     @@ -272,7 +271,6 @@ void __gnet_stats_copy_queue(struct gnet_stats_queue *qstats,
1931     if (cpu) {
1932     __gnet_stats_copy_queue_cpu(qstats, cpu);
1933     } else {
1934     - qstats->qlen = q->qlen;
1935     qstats->backlog = q->backlog;
1936     qstats->drops = q->drops;
1937     qstats->requeues = q->requeues;
1938     diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
1939     index bd67c4d0fcfdf..2aabb7eb08541 100644
1940     --- a/net/core/net-sysfs.c
1941     +++ b/net/core/net-sysfs.c
1942     @@ -1547,6 +1547,9 @@ static int register_queue_kobjects(struct net_device *dev)
1943     error:
1944     netdev_queue_update_kobjects(dev, txq, 0);
1945     net_rx_queue_update_kobjects(dev, rxq, 0);
1946     +#ifdef CONFIG_SYSFS
1947     + kset_unregister(dev->queues_kset);
1948     +#endif
1949     return error;
1950     }
1951    
1952     diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c
1953     index 777fa3b7fb13d..f0165c5f376b3 100644
1954     --- a/net/ipv4/cipso_ipv4.c
1955     +++ b/net/ipv4/cipso_ipv4.c
1956     @@ -667,7 +667,8 @@ static int cipso_v4_map_lvl_valid(const struct cipso_v4_doi *doi_def, u8 level)
1957     case CIPSO_V4_MAP_PASS:
1958     return 0;
1959     case CIPSO_V4_MAP_TRANS:
1960     - if (doi_def->map.std->lvl.cipso[level] < CIPSO_V4_INV_LVL)
1961     + if ((level < doi_def->map.std->lvl.cipso_size) &&
1962     + (doi_def->map.std->lvl.cipso[level] < CIPSO_V4_INV_LVL))
1963     return 0;
1964     break;
1965     }
1966     @@ -1735,13 +1736,26 @@ validate_return:
1967     */
1968     void cipso_v4_error(struct sk_buff *skb, int error, u32 gateway)
1969     {
1970     + unsigned char optbuf[sizeof(struct ip_options) + 40];
1971     + struct ip_options *opt = (struct ip_options *)optbuf;
1972     +
1973     if (ip_hdr(skb)->protocol == IPPROTO_ICMP || error != -EACCES)
1974     return;
1975    
1976     + /*
1977     + * We might be called above the IP layer,
1978     + * so we can not use icmp_send and IPCB here.
1979     + */
1980     +
1981     + memset(opt, 0, sizeof(struct ip_options));
1982     + opt->optlen = ip_hdr(skb)->ihl*4 - sizeof(struct iphdr);
1983     + if (__ip_options_compile(dev_net(skb->dev), opt, skb, NULL))
1984     + return;
1985     +
1986     if (gateway)
1987     - icmp_send(skb, ICMP_DEST_UNREACH, ICMP_NET_ANO, 0);
1988     + __icmp_send(skb, ICMP_DEST_UNREACH, ICMP_NET_ANO, 0, opt);
1989     else
1990     - icmp_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_ANO, 0);
1991     + __icmp_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_ANO, 0, opt);
1992     }
1993    
1994     /**
1995     diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
1996     index 958e185a8e8d1..dae743b649c1d 100644
1997     --- a/net/ipv4/fib_frontend.c
1998     +++ b/net/ipv4/fib_frontend.c
1999     @@ -700,6 +700,10 @@ static int rtm_to_fib_config(struct net *net, struct sk_buff *skb,
2000     case RTA_GATEWAY:
2001     cfg->fc_gw = nla_get_be32(attr);
2002     break;
2003     + case RTA_VIA:
2004     + NL_SET_ERR_MSG(extack, "IPv4 does not support RTA_VIA attribute");
2005     + err = -EINVAL;
2006     + goto errout;
2007     case RTA_PRIORITY:
2008     cfg->fc_priority = nla_get_u32(attr);
2009     break;
2010     diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
2011     index 695979b7ef6d0..ad75c468ecfb2 100644
2012     --- a/net/ipv4/icmp.c
2013     +++ b/net/ipv4/icmp.c
2014     @@ -570,7 +570,8 @@ relookup_failed:
2015     * MUST reply to only the first fragment.
2016     */
2017    
2018     -void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info)
2019     +void __icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info,
2020     + const struct ip_options *opt)
2021     {
2022     struct iphdr *iph;
2023     int room;
2024     @@ -691,7 +692,7 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info)
2025     iph->tos;
2026     mark = IP4_REPLY_MARK(net, skb_in->mark);
2027    
2028     - if (ip_options_echo(net, &icmp_param.replyopts.opt.opt, skb_in))
2029     + if (__ip_options_echo(net, &icmp_param.replyopts.opt.opt, skb_in, opt))
2030     goto out_unlock;
2031    
2032    
2033     @@ -742,7 +743,7 @@ out_bh_enable:
2034     local_bh_enable();
2035     out:;
2036     }
2037     -EXPORT_SYMBOL(icmp_send);
2038     +EXPORT_SYMBOL(__icmp_send);
2039    
2040    
2041     static void icmp_socket_deliver(struct sk_buff *skb, u32 info)
2042     diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c
2043     index 6f977b0fef545..bd8ef4f87c795 100644
2044     --- a/net/ipv4/ip_input.c
2045     +++ b/net/ipv4/ip_input.c
2046     @@ -308,11 +308,10 @@ drop:
2047     }
2048    
2049     static int ip_rcv_finish_core(struct net *net, struct sock *sk,
2050     - struct sk_buff *skb)
2051     + struct sk_buff *skb, struct net_device *dev)
2052     {
2053     const struct iphdr *iph = ip_hdr(skb);
2054     int (*edemux)(struct sk_buff *skb);
2055     - struct net_device *dev = skb->dev;
2056     struct rtable *rt;
2057     int err;
2058    
2059     @@ -401,6 +400,7 @@ drop_error:
2060    
2061     static int ip_rcv_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
2062     {
2063     + struct net_device *dev = skb->dev;
2064     int ret;
2065    
2066     /* if ingress device is enslaved to an L3 master device pass the
2067     @@ -410,7 +410,7 @@ static int ip_rcv_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
2068     if (!skb)
2069     return NET_RX_SUCCESS;
2070    
2071     - ret = ip_rcv_finish_core(net, sk, skb);
2072     + ret = ip_rcv_finish_core(net, sk, skb, dev);
2073     if (ret != NET_RX_DROP)
2074     ret = dst_input(skb);
2075     return ret;
2076     @@ -550,6 +550,7 @@ static void ip_list_rcv_finish(struct net *net, struct sock *sk,
2077    
2078     INIT_LIST_HEAD(&sublist);
2079     list_for_each_entry_safe(skb, next, head, list) {
2080     + struct net_device *dev = skb->dev;
2081     struct dst_entry *dst;
2082    
2083     skb_list_del_init(skb);
2084     @@ -559,7 +560,7 @@ static void ip_list_rcv_finish(struct net *net, struct sock *sk,
2085     skb = l3mdev_ip_rcv(skb);
2086     if (!skb)
2087     continue;
2088     - if (ip_rcv_finish_core(net, sk, skb) == NET_RX_DROP)
2089     + if (ip_rcv_finish_core(net, sk, skb, dev) == NET_RX_DROP)
2090     continue;
2091    
2092     dst = skb_dst(skb);
2093     diff --git a/net/ipv4/ip_options.c b/net/ipv4/ip_options.c
2094     index ed194d46c00e3..32a35043c9f59 100644
2095     --- a/net/ipv4/ip_options.c
2096     +++ b/net/ipv4/ip_options.c
2097     @@ -251,8 +251,9 @@ static void spec_dst_fill(__be32 *spec_dst, struct sk_buff *skb)
2098     * If opt == NULL, then skb->data should point to IP header.
2099     */
2100    
2101     -int ip_options_compile(struct net *net,
2102     - struct ip_options *opt, struct sk_buff *skb)
2103     +int __ip_options_compile(struct net *net,
2104     + struct ip_options *opt, struct sk_buff *skb,
2105     + __be32 *info)
2106     {
2107     __be32 spec_dst = htonl(INADDR_ANY);
2108     unsigned char *pp_ptr = NULL;
2109     @@ -468,11 +469,22 @@ eol:
2110     return 0;
2111    
2112     error:
2113     - if (skb) {
2114     - icmp_send(skb, ICMP_PARAMETERPROB, 0, htonl((pp_ptr-iph)<<24));
2115     - }
2116     + if (info)
2117     + *info = htonl((pp_ptr-iph)<<24);
2118     return -EINVAL;
2119     }
2120     +
2121     +int ip_options_compile(struct net *net,
2122     + struct ip_options *opt, struct sk_buff *skb)
2123     +{
2124     + int ret;
2125     + __be32 info;
2126     +
2127     + ret = __ip_options_compile(net, opt, skb, &info);
2128     + if (ret != 0 && skb)
2129     + icmp_send(skb, ICMP_PARAMETERPROB, 0, info);
2130     + return ret;
2131     +}
2132     EXPORT_SYMBOL(ip_options_compile);
2133    
2134     /*
2135     diff --git a/net/ipv4/netlink.c b/net/ipv4/netlink.c
2136     index f86bb4f066095..d8e3a1fb8e826 100644
2137     --- a/net/ipv4/netlink.c
2138     +++ b/net/ipv4/netlink.c
2139     @@ -3,9 +3,10 @@
2140     #include <linux/types.h>
2141     #include <net/net_namespace.h>
2142     #include <net/netlink.h>
2143     +#include <linux/in6.h>
2144     #include <net/ip.h>
2145    
2146     -int rtm_getroute_parse_ip_proto(struct nlattr *attr, u8 *ip_proto,
2147     +int rtm_getroute_parse_ip_proto(struct nlattr *attr, u8 *ip_proto, u8 family,
2148     struct netlink_ext_ack *extack)
2149     {
2150     *ip_proto = nla_get_u8(attr);
2151     @@ -13,11 +14,19 @@ int rtm_getroute_parse_ip_proto(struct nlattr *attr, u8 *ip_proto,
2152     switch (*ip_proto) {
2153     case IPPROTO_TCP:
2154     case IPPROTO_UDP:
2155     + return 0;
2156     case IPPROTO_ICMP:
2157     + if (family != AF_INET)
2158     + break;
2159     + return 0;
2160     +#if IS_ENABLED(CONFIG_IPV6)
2161     + case IPPROTO_ICMPV6:
2162     + if (family != AF_INET6)
2163     + break;
2164     return 0;
2165     - default:
2166     - NL_SET_ERR_MSG(extack, "Unsupported ip proto");
2167     - return -EOPNOTSUPP;
2168     +#endif
2169     }
2170     + NL_SET_ERR_MSG(extack, "Unsupported ip proto");
2171     + return -EOPNOTSUPP;
2172     }
2173     EXPORT_SYMBOL_GPL(rtm_getroute_parse_ip_proto);
2174     diff --git a/net/ipv4/route.c b/net/ipv4/route.c
2175     index 436b46c0e687f..ca87bb6784e5d 100644
2176     --- a/net/ipv4/route.c
2177     +++ b/net/ipv4/route.c
2178     @@ -2814,7 +2814,7 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
2179    
2180     if (tb[RTA_IP_PROTO]) {
2181     err = rtm_getroute_parse_ip_proto(tb[RTA_IP_PROTO],
2182     - &ip_proto, extack);
2183     + &ip_proto, AF_INET, extack);
2184     if (err)
2185     return err;
2186     }
2187     diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
2188     index 10aafea3af0f1..35e7092eceb37 100644
2189     --- a/net/ipv6/ip6mr.c
2190     +++ b/net/ipv6/ip6mr.c
2191     @@ -1954,10 +1954,10 @@ int ip6mr_compat_ioctl(struct sock *sk, unsigned int cmd, void __user *arg)
2192    
2193     static inline int ip6mr_forward2_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
2194     {
2195     - __IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
2196     - IPSTATS_MIB_OUTFORWDATAGRAMS);
2197     - __IP6_ADD_STATS(net, ip6_dst_idev(skb_dst(skb)),
2198     - IPSTATS_MIB_OUTOCTETS, skb->len);
2199     + IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
2200     + IPSTATS_MIB_OUTFORWDATAGRAMS);
2201     + IP6_ADD_STATS(net, ip6_dst_idev(skb_dst(skb)),
2202     + IPSTATS_MIB_OUTOCTETS, skb->len);
2203     return dst_output(net, sk, skb);
2204     }
2205    
2206     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
2207     index 08c4516ae4a4d..ba59a9c14e02a 100644
2208     --- a/net/ipv6/route.c
2209     +++ b/net/ipv6/route.c
2210     @@ -4213,6 +4213,10 @@ static int rtm_to_fib6_config(struct sk_buff *skb, struct nlmsghdr *nlh,
2211     cfg->fc_gateway = nla_get_in6_addr(tb[RTA_GATEWAY]);
2212     cfg->fc_flags |= RTF_GATEWAY;
2213     }
2214     + if (tb[RTA_VIA]) {
2215     + NL_SET_ERR_MSG(extack, "IPv6 does not support RTA_VIA attribute");
2216     + goto errout;
2217     + }
2218    
2219     if (tb[RTA_DST]) {
2220     int plen = (rtm->rtm_dst_len + 7) >> 3;
2221     @@ -4907,7 +4911,8 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
2222    
2223     if (tb[RTA_IP_PROTO]) {
2224     err = rtm_getroute_parse_ip_proto(tb[RTA_IP_PROTO],
2225     - &fl6.flowi6_proto, extack);
2226     + &fl6.flowi6_proto, AF_INET6,
2227     + extack);
2228     if (err)
2229     goto errout;
2230     }
2231     diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
2232     index da6d5a3f53995..868d7da7a0cb3 100644
2233     --- a/net/ipv6/sit.c
2234     +++ b/net/ipv6/sit.c
2235     @@ -1873,6 +1873,7 @@ static int __net_init sit_init_net(struct net *net)
2236    
2237     err_reg_dev:
2238     ipip6_dev_free(sitn->fb_tunnel_dev);
2239     + free_netdev(sitn->fb_tunnel_dev);
2240     err_alloc_dev:
2241     return err;
2242     }
2243     diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
2244     index 8fbe6cdbe255d..d5a4db5b3fe7b 100644
2245     --- a/net/mpls/af_mpls.c
2246     +++ b/net/mpls/af_mpls.c
2247     @@ -1822,6 +1822,9 @@ static int rtm_to_route_config(struct sk_buff *skb,
2248     goto errout;
2249     break;
2250     }
2251     + case RTA_GATEWAY:
2252     + NL_SET_ERR_MSG(extack, "MPLS does not support RTA_GATEWAY attribute");
2253     + goto errout;
2254     case RTA_VIA:
2255     {
2256     if (nla_get_via(nla, &cfg->rc_via_alen,
2257     diff --git a/net/netlabel/netlabel_kapi.c b/net/netlabel/netlabel_kapi.c
2258     index ea7c67050792c..ee3e5b6471a69 100644
2259     --- a/net/netlabel/netlabel_kapi.c
2260     +++ b/net/netlabel/netlabel_kapi.c
2261     @@ -903,7 +903,8 @@ int netlbl_bitmap_walk(const unsigned char *bitmap, u32 bitmap_len,
2262     (state == 0 && (byte & bitmask) == 0))
2263     return bit_spot;
2264    
2265     - bit_spot++;
2266     + if (++bit_spot >= bitmap_len)
2267     + return -1;
2268     bitmask >>= 1;
2269     if (bitmask == 0) {
2270     byte = bitmap[++byte_offset];
2271     diff --git a/net/nfc/llcp_commands.c b/net/nfc/llcp_commands.c
2272     index 6a196e438b6c0..d1fc019e932e0 100644
2273     --- a/net/nfc/llcp_commands.c
2274     +++ b/net/nfc/llcp_commands.c
2275     @@ -419,6 +419,10 @@ int nfc_llcp_send_connect(struct nfc_llcp_sock *sock)
2276     sock->service_name,
2277     sock->service_name_len,
2278     &service_name_tlv_length);
2279     + if (!service_name_tlv) {
2280     + err = -ENOMEM;
2281     + goto error_tlv;
2282     + }
2283     size += service_name_tlv_length;
2284     }
2285    
2286     @@ -429,9 +433,17 @@ int nfc_llcp_send_connect(struct nfc_llcp_sock *sock)
2287    
2288     miux_tlv = nfc_llcp_build_tlv(LLCP_TLV_MIUX, (u8 *)&miux, 0,
2289     &miux_tlv_length);
2290     + if (!miux_tlv) {
2291     + err = -ENOMEM;
2292     + goto error_tlv;
2293     + }
2294     size += miux_tlv_length;
2295    
2296     rw_tlv = nfc_llcp_build_tlv(LLCP_TLV_RW, &rw, 0, &rw_tlv_length);
2297     + if (!rw_tlv) {
2298     + err = -ENOMEM;
2299     + goto error_tlv;
2300     + }
2301     size += rw_tlv_length;
2302    
2303     pr_debug("SKB size %d SN length %zu\n", size, sock->service_name_len);
2304     @@ -484,9 +496,17 @@ int nfc_llcp_send_cc(struct nfc_llcp_sock *sock)
2305    
2306     miux_tlv = nfc_llcp_build_tlv(LLCP_TLV_MIUX, (u8 *)&miux, 0,
2307     &miux_tlv_length);
2308     + if (!miux_tlv) {
2309     + err = -ENOMEM;
2310     + goto error_tlv;
2311     + }
2312     size += miux_tlv_length;
2313    
2314     rw_tlv = nfc_llcp_build_tlv(LLCP_TLV_RW, &rw, 0, &rw_tlv_length);
2315     + if (!rw_tlv) {
2316     + err = -ENOMEM;
2317     + goto error_tlv;
2318     + }
2319     size += rw_tlv_length;
2320    
2321     skb = llcp_allocate_pdu(sock, LLCP_PDU_CC, size);
2322     diff --git a/net/nfc/llcp_core.c b/net/nfc/llcp_core.c
2323     index ef4026a23e802..4fa015208aab1 100644
2324     --- a/net/nfc/llcp_core.c
2325     +++ b/net/nfc/llcp_core.c
2326     @@ -532,10 +532,10 @@ static u8 nfc_llcp_reserve_sdp_ssap(struct nfc_llcp_local *local)
2327    
2328     static int nfc_llcp_build_gb(struct nfc_llcp_local *local)
2329     {
2330     - u8 *gb_cur, *version_tlv, version, version_length;
2331     - u8 *lto_tlv, lto_length;
2332     - u8 *wks_tlv, wks_length;
2333     - u8 *miux_tlv, miux_length;
2334     + u8 *gb_cur, version, version_length;
2335     + u8 lto_length, wks_length, miux_length;
2336     + u8 *version_tlv = NULL, *lto_tlv = NULL,
2337     + *wks_tlv = NULL, *miux_tlv = NULL;
2338     __be16 wks = cpu_to_be16(local->local_wks);
2339     u8 gb_len = 0;
2340     int ret = 0;
2341     @@ -543,17 +543,33 @@ static int nfc_llcp_build_gb(struct nfc_llcp_local *local)
2342     version = LLCP_VERSION_11;
2343     version_tlv = nfc_llcp_build_tlv(LLCP_TLV_VERSION, &version,
2344     1, &version_length);
2345     + if (!version_tlv) {
2346     + ret = -ENOMEM;
2347     + goto out;
2348     + }
2349     gb_len += version_length;
2350    
2351     lto_tlv = nfc_llcp_build_tlv(LLCP_TLV_LTO, &local->lto, 1, &lto_length);
2352     + if (!lto_tlv) {
2353     + ret = -ENOMEM;
2354     + goto out;
2355     + }
2356     gb_len += lto_length;
2357    
2358     pr_debug("Local wks 0x%lx\n", local->local_wks);
2359     wks_tlv = nfc_llcp_build_tlv(LLCP_TLV_WKS, (u8 *)&wks, 2, &wks_length);
2360     + if (!wks_tlv) {
2361     + ret = -ENOMEM;
2362     + goto out;
2363     + }
2364     gb_len += wks_length;
2365    
2366     miux_tlv = nfc_llcp_build_tlv(LLCP_TLV_MIUX, (u8 *)&local->miux, 0,
2367     &miux_length);
2368     + if (!miux_tlv) {
2369     + ret = -ENOMEM;
2370     + goto out;
2371     + }
2372     gb_len += miux_length;
2373    
2374     gb_len += ARRAY_SIZE(llcp_magic);
2375     diff --git a/net/sched/act_ipt.c b/net/sched/act_ipt.c
2376     index 8525de8116163..334f3a0576713 100644
2377     --- a/net/sched/act_ipt.c
2378     +++ b/net/sched/act_ipt.c
2379     @@ -199,8 +199,7 @@ err3:
2380     err2:
2381     kfree(tname);
2382     err1:
2383     - if (ret == ACT_P_CREATED)
2384     - tcf_idr_release(*a, bind);
2385     + tcf_idr_release(*a, bind);
2386     return err;
2387     }
2388    
2389     diff --git a/net/sched/act_skbedit.c b/net/sched/act_skbedit.c
2390     index 73e44ce2a8837..86d90fc5e97ea 100644
2391     --- a/net/sched/act_skbedit.c
2392     +++ b/net/sched/act_skbedit.c
2393     @@ -191,8 +191,7 @@ static int tcf_skbedit_init(struct net *net, struct nlattr *nla,
2394    
2395     params_new = kzalloc(sizeof(*params_new), GFP_KERNEL);
2396     if (unlikely(!params_new)) {
2397     - if (ret == ACT_P_CREATED)
2398     - tcf_idr_release(*a, bind);
2399     + tcf_idr_release(*a, bind);
2400     return -ENOMEM;
2401     }
2402    
2403     diff --git a/net/sched/act_tunnel_key.c b/net/sched/act_tunnel_key.c
2404     index 0f6601fdf8899..72d9c432e8b42 100644
2405     --- a/net/sched/act_tunnel_key.c
2406     +++ b/net/sched/act_tunnel_key.c
2407     @@ -377,7 +377,8 @@ static int tunnel_key_init(struct net *net, struct nlattr *nla,
2408     return ret;
2409    
2410     release_tun_meta:
2411     - dst_release(&metadata->dst);
2412     + if (metadata)
2413     + dst_release(&metadata->dst);
2414    
2415     err_out:
2416     if (exists)
2417     diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
2418     index 69078c82963ef..77b289da77636 100644
2419     --- a/net/sched/sch_generic.c
2420     +++ b/net/sched/sch_generic.c
2421     @@ -68,7 +68,7 @@ static inline struct sk_buff *__skb_dequeue_bad_txq(struct Qdisc *q)
2422     skb = __skb_dequeue(&q->skb_bad_txq);
2423     if (qdisc_is_percpu_stats(q)) {
2424     qdisc_qstats_cpu_backlog_dec(q, skb);
2425     - qdisc_qstats_cpu_qlen_dec(q);
2426     + qdisc_qstats_atomic_qlen_dec(q);
2427     } else {
2428     qdisc_qstats_backlog_dec(q, skb);
2429     q->q.qlen--;
2430     @@ -108,7 +108,7 @@ static inline void qdisc_enqueue_skb_bad_txq(struct Qdisc *q,
2431    
2432     if (qdisc_is_percpu_stats(q)) {
2433     qdisc_qstats_cpu_backlog_inc(q, skb);
2434     - qdisc_qstats_cpu_qlen_inc(q);
2435     + qdisc_qstats_atomic_qlen_inc(q);
2436     } else {
2437     qdisc_qstats_backlog_inc(q, skb);
2438     q->q.qlen++;
2439     @@ -147,7 +147,7 @@ static inline int dev_requeue_skb_locked(struct sk_buff *skb, struct Qdisc *q)
2440    
2441     qdisc_qstats_cpu_requeues_inc(q);
2442     qdisc_qstats_cpu_backlog_inc(q, skb);
2443     - qdisc_qstats_cpu_qlen_inc(q);
2444     + qdisc_qstats_atomic_qlen_inc(q);
2445    
2446     skb = next;
2447     }
2448     @@ -252,7 +252,7 @@ static struct sk_buff *dequeue_skb(struct Qdisc *q, bool *validate,
2449     skb = __skb_dequeue(&q->gso_skb);
2450     if (qdisc_is_percpu_stats(q)) {
2451     qdisc_qstats_cpu_backlog_dec(q, skb);
2452     - qdisc_qstats_cpu_qlen_dec(q);
2453     + qdisc_qstats_atomic_qlen_dec(q);
2454     } else {
2455     qdisc_qstats_backlog_dec(q, skb);
2456     q->q.qlen--;
2457     @@ -633,7 +633,7 @@ static int pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc *qdisc,
2458     if (unlikely(err))
2459     return qdisc_drop_cpu(skb, qdisc, to_free);
2460    
2461     - qdisc_qstats_cpu_qlen_inc(qdisc);
2462     + qdisc_qstats_atomic_qlen_inc(qdisc);
2463     /* Note: skb can not be used after skb_array_produce(),
2464     * so we better not use qdisc_qstats_cpu_backlog_inc()
2465     */
2466     @@ -658,7 +658,7 @@ static struct sk_buff *pfifo_fast_dequeue(struct Qdisc *qdisc)
2467     if (likely(skb)) {
2468     qdisc_qstats_cpu_backlog_dec(qdisc, skb);
2469     qdisc_bstats_cpu_update(qdisc, skb);
2470     - qdisc_qstats_cpu_qlen_dec(qdisc);
2471     + qdisc_qstats_atomic_qlen_dec(qdisc);
2472     }
2473    
2474     return skb;
2475     @@ -702,7 +702,6 @@ static void pfifo_fast_reset(struct Qdisc *qdisc)
2476     struct gnet_stats_queue *q = per_cpu_ptr(qdisc->cpu_qstats, i);
2477    
2478     q->backlog = 0;
2479     - q->qlen = 0;
2480     }
2481     }
2482    
2483     diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
2484     index 74c0f656f28c5..4dfe10b9f96c8 100644
2485     --- a/net/sched/sch_netem.c
2486     +++ b/net/sched/sch_netem.c
2487     @@ -440,6 +440,7 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch,
2488     int nb = 0;
2489     int count = 1;
2490     int rc = NET_XMIT_SUCCESS;
2491     + int rc_drop = NET_XMIT_DROP;
2492    
2493     /* Do not fool qdisc_drop_all() */
2494     skb->prev = NULL;
2495     @@ -479,6 +480,7 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch,
2496     q->duplicate = 0;
2497     rootq->enqueue(skb2, rootq, to_free);
2498     q->duplicate = dupsave;
2499     + rc_drop = NET_XMIT_SUCCESS;
2500     }
2501    
2502     /*
2503     @@ -491,7 +493,7 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch,
2504     if (skb_is_gso(skb)) {
2505     segs = netem_segment(skb, sch, to_free);
2506     if (!segs)
2507     - return NET_XMIT_DROP;
2508     + return rc_drop;
2509     } else {
2510     segs = skb;
2511     }
2512     @@ -514,8 +516,10 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch,
2513     1<<(prandom_u32() % 8);
2514     }
2515    
2516     - if (unlikely(sch->q.qlen >= sch->limit))
2517     - return qdisc_drop_all(skb, sch, to_free);
2518     + if (unlikely(sch->q.qlen >= sch->limit)) {
2519     + qdisc_drop_all(skb, sch, to_free);
2520     + return rc_drop;
2521     + }
2522    
2523     qdisc_qstats_backlog_inc(sch, skb);
2524    
2525     diff --git a/net/sctp/socket.c b/net/sctp/socket.c
2526     index e5e70cff5bb30..1b16250c5718d 100644
2527     --- a/net/sctp/socket.c
2528     +++ b/net/sctp/socket.c
2529     @@ -1884,6 +1884,7 @@ static int sctp_sendmsg_check_sflags(struct sctp_association *asoc,
2530    
2531     pr_debug("%s: aborting association:%p\n", __func__, asoc);
2532     sctp_primitive_ABORT(net, asoc, chunk);
2533     + iov_iter_revert(&msg->msg_iter, msg_len);
2534    
2535     return 0;
2536     }
2537     diff --git a/net/socket.c b/net/socket.c
2538     index 5c820212ba815..18d27b8c25116 100644
2539     --- a/net/socket.c
2540     +++ b/net/socket.c
2541     @@ -577,6 +577,7 @@ static void __sock_release(struct socket *sock, struct inode *inode)
2542     if (inode)
2543     inode_lock(inode);
2544     sock->ops->release(sock);
2545     + sock->sk = NULL;
2546     if (inode)
2547     inode_unlock(inode);
2548     sock->ops = NULL;
2549     diff --git a/net/tipc/socket.c b/net/tipc/socket.c
2550     index e1bdaf056c8f7..88c307ef13181 100644
2551     --- a/net/tipc/socket.c
2552     +++ b/net/tipc/socket.c
2553     @@ -377,11 +377,13 @@ static int tipc_sk_sock_err(struct socket *sock, long *timeout)
2554    
2555     #define tipc_wait_for_cond(sock_, timeo_, condition_) \
2556     ({ \
2557     + DEFINE_WAIT_FUNC(wait_, woken_wake_function); \
2558     struct sock *sk_; \
2559     int rc_; \
2560     \
2561     while ((rc_ = !(condition_))) { \
2562     - DEFINE_WAIT_FUNC(wait_, woken_wake_function); \
2563     + /* coupled with smp_wmb() in tipc_sk_proto_rcv() */ \
2564     + smp_rmb(); \
2565     sk_ = (sock_)->sk; \
2566     rc_ = tipc_sk_sock_err((sock_), timeo_); \
2567     if (rc_) \
2568     @@ -1318,7 +1320,7 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen)
2569    
2570     if (unlikely(!dest)) {
2571     dest = &tsk->peer;
2572     - if (!syn || dest->family != AF_TIPC)
2573     + if (!syn && dest->family != AF_TIPC)
2574     return -EDESTADDRREQ;
2575     }
2576    
2577     @@ -1961,6 +1963,8 @@ static void tipc_sk_proto_rcv(struct sock *sk,
2578     return;
2579     case SOCK_WAKEUP:
2580     tipc_dest_del(&tsk->cong_links, msg_orignode(hdr), 0);
2581     + /* coupled with smp_rmb() in tipc_wait_for_cond() */
2582     + smp_wmb();
2583     tsk->cong_link_cnt--;
2584     wakeup = true;
2585     break;
2586     diff --git a/tools/testing/selftests/firmware/fw_lib.sh b/tools/testing/selftests/firmware/fw_lib.sh
2587     index 6c5f1b2ffb745..1cbb12e284a68 100755
2588     --- a/tools/testing/selftests/firmware/fw_lib.sh
2589     +++ b/tools/testing/selftests/firmware/fw_lib.sh
2590     @@ -91,7 +91,7 @@ verify_reqs()
2591     if [ "$TEST_REQS_FW_SYSFS_FALLBACK" = "yes" ]; then
2592     if [ ! "$HAS_FW_LOADER_USER_HELPER" = "yes" ]; then
2593     echo "usermode helper disabled so ignoring test"
2594     - exit $ksft_skip
2595     + exit 0
2596     fi
2597     fi
2598     }