Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.19/0117-4.19.18-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3396 - (hide annotations) (download)
Fri Aug 2 11:47:30 2019 UTC (4 years, 10 months ago) by niro
File size: 156651 byte(s)
-linux-4.19.18
1 niro 3396 diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt
2     index 22b4b00dee31..06ac6dda9b34 100644
3     --- a/Documentation/filesystems/proc.txt
4     +++ b/Documentation/filesystems/proc.txt
5     @@ -496,7 +496,9 @@ manner. The codes are the following:
6    
7     Note that there is no guarantee that every flag and associated mnemonic will
8     be present in all further kernel releases. Things get changed, the flags may
9     -be vanished or the reverse -- new added.
10     +be vanished or the reverse -- new added. Interpretation of their meaning
11     +might change in future as well. So each consumer of these flags has to
12     +follow each specific kernel version for the exact semantic.
13    
14     This file is only present if the CONFIG_MMU kernel configuration option is
15     enabled.
16     diff --git a/Makefile b/Makefile
17     index 4b0bce87a36b..9f37a8a9feb9 100644
18     --- a/Makefile
19     +++ b/Makefile
20     @@ -1,7 +1,7 @@
21     # SPDX-License-Identifier: GPL-2.0
22     VERSION = 4
23     PATCHLEVEL = 19
24     -SUBLEVEL = 17
25     +SUBLEVEL = 18
26     EXTRAVERSION =
27     NAME = "People's Front"
28    
29     diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h
30     index 0bcc98dbba56..f90f5d83b228 100644
31     --- a/arch/arm64/include/asm/assembler.h
32     +++ b/arch/arm64/include/asm/assembler.h
33     @@ -378,27 +378,33 @@ alternative_endif
34     * size: size of the region
35     * Corrupts: kaddr, size, tmp1, tmp2
36     */
37     + .macro __dcache_op_workaround_clean_cache, op, kaddr
38     +alternative_if_not ARM64_WORKAROUND_CLEAN_CACHE
39     + dc \op, \kaddr
40     +alternative_else
41     + dc civac, \kaddr
42     +alternative_endif
43     + .endm
44     +
45     .macro dcache_by_line_op op, domain, kaddr, size, tmp1, tmp2
46     dcache_line_size \tmp1, \tmp2
47     add \size, \kaddr, \size
48     sub \tmp2, \tmp1, #1
49     bic \kaddr, \kaddr, \tmp2
50     9998:
51     - .if (\op == cvau || \op == cvac)
52     -alternative_if_not ARM64_WORKAROUND_CLEAN_CACHE
53     - dc \op, \kaddr
54     -alternative_else
55     - dc civac, \kaddr
56     -alternative_endif
57     - .elseif (\op == cvap)
58     -alternative_if ARM64_HAS_DCPOP
59     - sys 3, c7, c12, 1, \kaddr // dc cvap
60     -alternative_else
61     - dc cvac, \kaddr
62     -alternative_endif
63     + .ifc \op, cvau
64     + __dcache_op_workaround_clean_cache \op, \kaddr
65     + .else
66     + .ifc \op, cvac
67     + __dcache_op_workaround_clean_cache \op, \kaddr
68     + .else
69     + .ifc \op, cvap
70     + sys 3, c7, c12, 1, \kaddr // dc cvap
71     .else
72     dc \op, \kaddr
73     .endif
74     + .endif
75     + .endif
76     add \kaddr, \kaddr, \tmp1
77     cmp \kaddr, \size
78     b.lo 9998b
79     diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h
80     index b96442960aea..56562ff01076 100644
81     --- a/arch/arm64/include/asm/memory.h
82     +++ b/arch/arm64/include/asm/memory.h
83     @@ -76,12 +76,17 @@
84     /*
85     * KASAN requires 1/8th of the kernel virtual address space for the shadow
86     * region. KASAN can bloat the stack significantly, so double the (minimum)
87     - * stack size when KASAN is in use.
88     + * stack size when KASAN is in use, and then double it again if KASAN_EXTRA is
89     + * on.
90     */
91     #ifdef CONFIG_KASAN
92     #define KASAN_SHADOW_SCALE_SHIFT 3
93     #define KASAN_SHADOW_SIZE (UL(1) << (VA_BITS - KASAN_SHADOW_SCALE_SHIFT))
94     +#ifdef CONFIG_KASAN_EXTRA
95     +#define KASAN_THREAD_SHIFT 2
96     +#else
97     #define KASAN_THREAD_SHIFT 1
98     +#endif /* CONFIG_KASAN_EXTRA */
99     #else
100     #define KASAN_SHADOW_SIZE (0)
101     #define KASAN_THREAD_SHIFT 0
102     diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c
103     index e213f8e867f6..8a91ac067d44 100644
104     --- a/arch/arm64/kernel/perf_event.c
105     +++ b/arch/arm64/kernel/perf_event.c
106     @@ -1274,6 +1274,7 @@ static struct platform_driver armv8_pmu_driver = {
107     .driver = {
108     .name = ARMV8_PMU_PDEV_NAME,
109     .of_match_table = armv8_pmu_of_device_ids,
110     + .suppress_bind_attrs = true,
111     },
112     .probe = armv8_pmu_device_probe,
113     };
114     diff --git a/arch/arm64/mm/cache.S b/arch/arm64/mm/cache.S
115     index 0c22ede52f90..a194fd0e837f 100644
116     --- a/arch/arm64/mm/cache.S
117     +++ b/arch/arm64/mm/cache.S
118     @@ -212,6 +212,9 @@ ENDPROC(__dma_clean_area)
119     * - size - size in question
120     */
121     ENTRY(__clean_dcache_area_pop)
122     + alternative_if_not ARM64_HAS_DCPOP
123     + b __clean_dcache_area_poc
124     + alternative_else_nop_endif
125     dcache_by_line_op cvap, sy, x0, x1, x2, x3
126     ret
127     ENDPIPROC(__clean_dcache_area_pop)
128     diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
129     index 154b811d5894..201caf226b47 100644
130     --- a/arch/mips/Kconfig
131     +++ b/arch/mips/Kconfig
132     @@ -794,6 +794,7 @@ config SIBYTE_SWARM
133     select SYS_SUPPORTS_HIGHMEM
134     select SYS_SUPPORTS_LITTLE_ENDIAN
135     select ZONE_DMA32 if 64BIT
136     + select SWIOTLB if ARCH_DMA_ADDR_T_64BIT && PCI
137    
138     config SIBYTE_LITTLESUR
139     bool "Sibyte BCM91250C2-LittleSur"
140     @@ -814,6 +815,7 @@ config SIBYTE_SENTOSA
141     select SYS_HAS_CPU_SB1
142     select SYS_SUPPORTS_BIG_ENDIAN
143     select SYS_SUPPORTS_LITTLE_ENDIAN
144     + select SWIOTLB if ARCH_DMA_ADDR_T_64BIT && PCI
145    
146     config SIBYTE_BIGSUR
147     bool "Sibyte BCM91480B-BigSur"
148     @@ -826,6 +828,7 @@ config SIBYTE_BIGSUR
149     select SYS_SUPPORTS_HIGHMEM
150     select SYS_SUPPORTS_LITTLE_ENDIAN
151     select ZONE_DMA32 if 64BIT
152     + select SWIOTLB if ARCH_DMA_ADDR_T_64BIT && PCI
153    
154     config SNI_RM
155     bool "SNI RM200/300/400"
156     diff --git a/arch/mips/sibyte/common/Makefile b/arch/mips/sibyte/common/Makefile
157     index b3d6bf23a662..3ef3fb658136 100644
158     --- a/arch/mips/sibyte/common/Makefile
159     +++ b/arch/mips/sibyte/common/Makefile
160     @@ -1,4 +1,5 @@
161     obj-y := cfe.o
162     +obj-$(CONFIG_SWIOTLB) += dma.o
163     obj-$(CONFIG_SIBYTE_BUS_WATCHER) += bus_watcher.o
164     obj-$(CONFIG_SIBYTE_CFE_CONSOLE) += cfe_console.o
165     obj-$(CONFIG_SIBYTE_TBPROF) += sb_tbprof.o
166     diff --git a/arch/mips/sibyte/common/dma.c b/arch/mips/sibyte/common/dma.c
167     new file mode 100644
168     index 000000000000..eb47a94f3583
169     --- /dev/null
170     +++ b/arch/mips/sibyte/common/dma.c
171     @@ -0,0 +1,14 @@
172     +// SPDX-License-Identifier: GPL-2.0+
173     +/*
174     + * DMA support for Broadcom SiByte platforms.
175     + *
176     + * Copyright (c) 2018 Maciej W. Rozycki
177     + */
178     +
179     +#include <linux/swiotlb.h>
180     +#include <asm/bootinfo.h>
181     +
182     +void __init plat_swiotlb_setup(void)
183     +{
184     + swiotlb_init(1);
185     +}
186     diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
187     index 4264aedc7775..dd6badc31f45 100644
188     --- a/arch/powerpc/xmon/xmon.c
189     +++ b/arch/powerpc/xmon/xmon.c
190     @@ -75,6 +75,9 @@ static int xmon_gate;
191     #define xmon_owner 0
192     #endif /* CONFIG_SMP */
193    
194     +#ifdef CONFIG_PPC_PSERIES
195     +static int set_indicator_token = RTAS_UNKNOWN_SERVICE;
196     +#endif
197     static unsigned long in_xmon __read_mostly = 0;
198     static int xmon_on = IS_ENABLED(CONFIG_XMON_DEFAULT);
199    
200     @@ -358,7 +361,6 @@ static inline void disable_surveillance(void)
201     #ifdef CONFIG_PPC_PSERIES
202     /* Since this can't be a module, args should end up below 4GB. */
203     static struct rtas_args args;
204     - int token;
205    
206     /*
207     * At this point we have got all the cpus we can into
208     @@ -367,11 +369,11 @@ static inline void disable_surveillance(void)
209     * If we did try to take rtas.lock there would be a
210     * real possibility of deadlock.
211     */
212     - token = rtas_token("set-indicator");
213     - if (token == RTAS_UNKNOWN_SERVICE)
214     + if (set_indicator_token == RTAS_UNKNOWN_SERVICE)
215     return;
216    
217     - rtas_call_unlocked(&args, token, 3, 1, NULL, SURVEILLANCE_TOKEN, 0, 0);
218     + rtas_call_unlocked(&args, set_indicator_token, 3, 1, NULL,
219     + SURVEILLANCE_TOKEN, 0, 0);
220    
221     #endif /* CONFIG_PPC_PSERIES */
222     }
223     @@ -3672,6 +3674,14 @@ static void xmon_init(int enable)
224     __debugger_iabr_match = xmon_iabr_match;
225     __debugger_break_match = xmon_break_match;
226     __debugger_fault_handler = xmon_fault_handler;
227     +
228     +#ifdef CONFIG_PPC_PSERIES
229     + /*
230     + * Get the token here to avoid trying to get a lock
231     + * during the crash, causing a deadlock.
232     + */
233     + set_indicator_token = rtas_token("set-indicator");
234     +#endif
235     } else {
236     __debugger = NULL;
237     __debugger_ipi = NULL;
238     diff --git a/arch/x86/include/asm/traps.h b/arch/x86/include/asm/traps.h
239     index 3de69330e6c5..afbc87206886 100644
240     --- a/arch/x86/include/asm/traps.h
241     +++ b/arch/x86/include/asm/traps.h
242     @@ -104,9 +104,9 @@ extern int panic_on_unrecovered_nmi;
243    
244     void math_emulate(struct math_emu_info *);
245     #ifndef CONFIG_X86_32
246     -asmlinkage void smp_thermal_interrupt(void);
247     -asmlinkage void smp_threshold_interrupt(void);
248     -asmlinkage void smp_deferred_error_interrupt(void);
249     +asmlinkage void smp_thermal_interrupt(struct pt_regs *regs);
250     +asmlinkage void smp_threshold_interrupt(struct pt_regs *regs);
251     +asmlinkage void smp_deferred_error_interrupt(struct pt_regs *regs);
252     #endif
253    
254     extern void ist_enter(struct pt_regs *regs);
255     diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c
256     index e12454e21b8a..9f915a8791cc 100644
257     --- a/arch/x86/kernel/cpu/mcheck/mce_amd.c
258     +++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c
259     @@ -23,6 +23,7 @@
260     #include <linux/string.h>
261    
262     #include <asm/amd_nb.h>
263     +#include <asm/traps.h>
264     #include <asm/apic.h>
265     #include <asm/mce.h>
266     #include <asm/msr.h>
267     @@ -99,7 +100,7 @@ static u32 smca_bank_addrs[MAX_NR_BANKS][NR_BLOCKS] __ro_after_init =
268     [0 ... MAX_NR_BANKS - 1] = { [0 ... NR_BLOCKS - 1] = -1 }
269     };
270    
271     -const char *smca_get_name(enum smca_bank_types t)
272     +static const char *smca_get_name(enum smca_bank_types t)
273     {
274     if (t >= N_SMCA_BANK_TYPES)
275     return NULL;
276     @@ -824,7 +825,7 @@ static void __log_error(unsigned int bank, u64 status, u64 addr, u64 misc)
277     mce_log(&m);
278     }
279    
280     -asmlinkage __visible void __irq_entry smp_deferred_error_interrupt(void)
281     +asmlinkage __visible void __irq_entry smp_deferred_error_interrupt(struct pt_regs *regs)
282     {
283     entering_irq();
284     trace_deferred_error_apic_entry(DEFERRED_ERROR_VECTOR);
285     diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c
286     index 2da67b70ba98..ee229ceee745 100644
287     --- a/arch/x86/kernel/cpu/mcheck/therm_throt.c
288     +++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c
289     @@ -25,6 +25,7 @@
290     #include <linux/cpu.h>
291    
292     #include <asm/processor.h>
293     +#include <asm/traps.h>
294     #include <asm/apic.h>
295     #include <asm/mce.h>
296     #include <asm/msr.h>
297     @@ -390,7 +391,7 @@ static void unexpected_thermal_interrupt(void)
298    
299     static void (*smp_thermal_vector)(void) = unexpected_thermal_interrupt;
300    
301     -asmlinkage __visible void __irq_entry smp_thermal_interrupt(struct pt_regs *r)
302     +asmlinkage __visible void __irq_entry smp_thermal_interrupt(struct pt_regs *regs)
303     {
304     entering_irq();
305     trace_thermal_apic_entry(THERMAL_APIC_VECTOR);
306     diff --git a/arch/x86/kernel/cpu/mcheck/threshold.c b/arch/x86/kernel/cpu/mcheck/threshold.c
307     index 2b584b319eff..c21e0a1efd0f 100644
308     --- a/arch/x86/kernel/cpu/mcheck/threshold.c
309     +++ b/arch/x86/kernel/cpu/mcheck/threshold.c
310     @@ -6,6 +6,7 @@
311     #include <linux/kernel.h>
312    
313     #include <asm/irq_vectors.h>
314     +#include <asm/traps.h>
315     #include <asm/apic.h>
316     #include <asm/mce.h>
317     #include <asm/trace/irq_vectors.h>
318     @@ -18,7 +19,7 @@ static void default_threshold_interrupt(void)
319    
320     void (*mce_threshold_vector)(void) = default_threshold_interrupt;
321    
322     -asmlinkage __visible void __irq_entry smp_threshold_interrupt(void)
323     +asmlinkage __visible void __irq_entry smp_threshold_interrupt(struct pt_regs *regs)
324     {
325     entering_irq();
326     trace_threshold_apic_entry(THRESHOLD_APIC_VECTOR);
327     diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
328     index f02ecaf97904..6489067b78a4 100644
329     --- a/arch/x86/kernel/smpboot.c
330     +++ b/arch/x86/kernel/smpboot.c
331     @@ -1346,7 +1346,7 @@ void __init calculate_max_logical_packages(void)
332     * extrapolate the boot cpu's data to all packages.
333     */
334     ncpus = cpu_data(0).booted_cores * topology_max_smt_threads();
335     - __max_logical_packages = DIV_ROUND_UP(nr_cpu_ids, ncpus);
336     + __max_logical_packages = DIV_ROUND_UP(total_cpus, ncpus);
337     pr_info("Max logical packages: %u\n", __max_logical_packages);
338     }
339    
340     diff --git a/crypto/ecc.c b/crypto/ecc.c
341     index 8facafd67802..adcce310f646 100644
342     --- a/crypto/ecc.c
343     +++ b/crypto/ecc.c
344     @@ -842,15 +842,23 @@ static void xycz_add_c(u64 *x1, u64 *y1, u64 *x2, u64 *y2, u64 *curve_prime,
345    
346     static void ecc_point_mult(struct ecc_point *result,
347     const struct ecc_point *point, const u64 *scalar,
348     - u64 *initial_z, u64 *curve_prime,
349     + u64 *initial_z, const struct ecc_curve *curve,
350     unsigned int ndigits)
351     {
352     /* R0 and R1 */
353     u64 rx[2][ECC_MAX_DIGITS];
354     u64 ry[2][ECC_MAX_DIGITS];
355     u64 z[ECC_MAX_DIGITS];
356     + u64 sk[2][ECC_MAX_DIGITS];
357     + u64 *curve_prime = curve->p;
358     int i, nb;
359     - int num_bits = vli_num_bits(scalar, ndigits);
360     + int num_bits;
361     + int carry;
362     +
363     + carry = vli_add(sk[0], scalar, curve->n, ndigits);
364     + vli_add(sk[1], sk[0], curve->n, ndigits);
365     + scalar = sk[!carry];
366     + num_bits = sizeof(u64) * ndigits * 8 + 1;
367    
368     vli_set(rx[1], point->x, ndigits);
369     vli_set(ry[1], point->y, ndigits);
370     @@ -1004,7 +1012,7 @@ int ecc_make_pub_key(unsigned int curve_id, unsigned int ndigits,
371     goto out;
372     }
373    
374     - ecc_point_mult(pk, &curve->g, priv, NULL, curve->p, ndigits);
375     + ecc_point_mult(pk, &curve->g, priv, NULL, curve, ndigits);
376     if (ecc_point_is_zero(pk)) {
377     ret = -EAGAIN;
378     goto err_free_point;
379     @@ -1090,7 +1098,7 @@ int crypto_ecdh_shared_secret(unsigned int curve_id, unsigned int ndigits,
380     goto err_alloc_product;
381     }
382    
383     - ecc_point_mult(product, pk, priv, rand_z, curve->p, ndigits);
384     + ecc_point_mult(product, pk, priv, rand_z, curve, ndigits);
385    
386     ecc_swap_digits(product->x, secret, ndigits);
387    
388     diff --git a/drivers/base/bus.c b/drivers/base/bus.c
389     index 8bfd27ec73d6..585e2e1c9c8f 100644
390     --- a/drivers/base/bus.c
391     +++ b/drivers/base/bus.c
392     @@ -31,6 +31,9 @@ static struct kset *system_kset;
393    
394     #define to_drv_attr(_attr) container_of(_attr, struct driver_attribute, attr)
395    
396     +#define DRIVER_ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store) \
397     + struct driver_attribute driver_attr_##_name = \
398     + __ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store)
399    
400     static int __must_check bus_rescan_devices_helper(struct device *dev,
401     void *data);
402     @@ -195,7 +198,7 @@ static ssize_t unbind_store(struct device_driver *drv, const char *buf,
403     bus_put(bus);
404     return err;
405     }
406     -static DRIVER_ATTR_WO(unbind);
407     +static DRIVER_ATTR_IGNORE_LOCKDEP(unbind, S_IWUSR, NULL, unbind_store);
408    
409     /*
410     * Manually attach a device to a driver.
411     @@ -231,7 +234,7 @@ static ssize_t bind_store(struct device_driver *drv, const char *buf,
412     bus_put(bus);
413     return err;
414     }
415     -static DRIVER_ATTR_WO(bind);
416     +static DRIVER_ATTR_IGNORE_LOCKDEP(bind, S_IWUSR, NULL, bind_store);
417    
418     static ssize_t show_drivers_autoprobe(struct bus_type *bus, char *buf)
419     {
420     diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
421     index cd2e5cf14ea5..77b67a5f21ee 100644
422     --- a/drivers/bluetooth/btusb.c
423     +++ b/drivers/bluetooth/btusb.c
424     @@ -343,6 +343,7 @@ static const struct usb_device_id blacklist_table[] = {
425     /* Intel Bluetooth devices */
426     { USB_DEVICE(0x8087, 0x0025), .driver_info = BTUSB_INTEL_NEW },
427     { USB_DEVICE(0x8087, 0x0026), .driver_info = BTUSB_INTEL_NEW },
428     + { USB_DEVICE(0x8087, 0x0029), .driver_info = BTUSB_INTEL_NEW },
429     { USB_DEVICE(0x8087, 0x07da), .driver_info = BTUSB_CSR },
430     { USB_DEVICE(0x8087, 0x07dc), .driver_info = BTUSB_INTEL },
431     { USB_DEVICE(0x8087, 0x0a2a), .driver_info = BTUSB_INTEL },
432     @@ -2054,6 +2055,35 @@ static int btusb_send_frame_intel(struct hci_dev *hdev, struct sk_buff *skb)
433     return -EILSEQ;
434     }
435    
436     +static bool btusb_setup_intel_new_get_fw_name(struct intel_version *ver,
437     + struct intel_boot_params *params,
438     + char *fw_name, size_t len,
439     + const char *suffix)
440     +{
441     + switch (ver->hw_variant) {
442     + case 0x0b: /* SfP */
443     + case 0x0c: /* WsP */
444     + snprintf(fw_name, len, "intel/ibt-%u-%u.%s",
445     + le16_to_cpu(ver->hw_variant),
446     + le16_to_cpu(params->dev_revid),
447     + suffix);
448     + break;
449     + case 0x11: /* JfP */
450     + case 0x12: /* ThP */
451     + case 0x13: /* HrP */
452     + case 0x14: /* CcP */
453     + snprintf(fw_name, len, "intel/ibt-%u-%u-%u.%s",
454     + le16_to_cpu(ver->hw_variant),
455     + le16_to_cpu(ver->hw_revision),
456     + le16_to_cpu(ver->fw_revision),
457     + suffix);
458     + break;
459     + default:
460     + return false;
461     + }
462     + return true;
463     +}
464     +
465     static int btusb_setup_intel_new(struct hci_dev *hdev)
466     {
467     struct btusb_data *data = hci_get_drvdata(hdev);
468     @@ -2105,7 +2135,7 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
469     case 0x11: /* JfP */
470     case 0x12: /* ThP */
471     case 0x13: /* HrP */
472     - case 0x14: /* QnJ, IcP */
473     + case 0x14: /* CcP */
474     break;
475     default:
476     bt_dev_err(hdev, "Unsupported Intel hardware variant (%u)",
477     @@ -2189,23 +2219,9 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
478     * ibt-<hw_variant>-<hw_revision>-<fw_revision>.sfi.
479     *
480     */
481     - switch (ver.hw_variant) {
482     - case 0x0b: /* SfP */
483     - case 0x0c: /* WsP */
484     - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.sfi",
485     - le16_to_cpu(ver.hw_variant),
486     - le16_to_cpu(params.dev_revid));
487     - break;
488     - case 0x11: /* JfP */
489     - case 0x12: /* ThP */
490     - case 0x13: /* HrP */
491     - case 0x14: /* QnJ, IcP */
492     - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u-%u.sfi",
493     - le16_to_cpu(ver.hw_variant),
494     - le16_to_cpu(ver.hw_revision),
495     - le16_to_cpu(ver.fw_revision));
496     - break;
497     - default:
498     + err = btusb_setup_intel_new_get_fw_name(&ver, &params, fwname,
499     + sizeof(fwname), "sfi");
500     + if (!err) {
501     bt_dev_err(hdev, "Unsupported Intel firmware naming");
502     return -EINVAL;
503     }
504     @@ -2221,23 +2237,9 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
505     /* Save the DDC file name for later use to apply once the firmware
506     * downloading is done.
507     */
508     - switch (ver.hw_variant) {
509     - case 0x0b: /* SfP */
510     - case 0x0c: /* WsP */
511     - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.ddc",
512     - le16_to_cpu(ver.hw_variant),
513     - le16_to_cpu(params.dev_revid));
514     - break;
515     - case 0x11: /* JfP */
516     - case 0x12: /* ThP */
517     - case 0x13: /* HrP */
518     - case 0x14: /* QnJ, IcP */
519     - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u-%u.ddc",
520     - le16_to_cpu(ver.hw_variant),
521     - le16_to_cpu(ver.hw_revision),
522     - le16_to_cpu(ver.fw_revision));
523     - break;
524     - default:
525     + err = btusb_setup_intel_new_get_fw_name(&ver, &params, fwname,
526     + sizeof(fwname), "ddc");
527     + if (!err) {
528     bt_dev_err(hdev, "Unsupported Intel firmware naming");
529     return -EINVAL;
530     }
531     diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
532     index 7fc9612070a1..d5f7a12e350e 100644
533     --- a/drivers/char/ipmi/ipmi_msghandler.c
534     +++ b/drivers/char/ipmi/ipmi_msghandler.c
535     @@ -29,6 +29,7 @@
536     #include <linux/moduleparam.h>
537     #include <linux/workqueue.h>
538     #include <linux/uuid.h>
539     +#include <linux/nospec.h>
540    
541     #define PFX "IPMI message handler: "
542    
543     @@ -61,7 +62,8 @@ static void ipmi_debug_msg(const char *title, unsigned char *data,
544     { }
545     #endif
546    
547     -static int initialized;
548     +static bool initialized;
549     +static bool drvregistered;
550    
551     enum ipmi_panic_event_op {
552     IPMI_SEND_PANIC_EVENT_NONE,
553     @@ -611,7 +613,7 @@ static DEFINE_MUTEX(ipmidriver_mutex);
554    
555     static LIST_HEAD(ipmi_interfaces);
556     static DEFINE_MUTEX(ipmi_interfaces_mutex);
557     -DEFINE_STATIC_SRCU(ipmi_interfaces_srcu);
558     +struct srcu_struct ipmi_interfaces_srcu;
559    
560     /*
561     * List of watchers that want to know when smi's are added and deleted.
562     @@ -719,7 +721,15 @@ struct watcher_entry {
563     int ipmi_smi_watcher_register(struct ipmi_smi_watcher *watcher)
564     {
565     struct ipmi_smi *intf;
566     - int index;
567     + int index, rv;
568     +
569     + /*
570     + * Make sure the driver is actually initialized, this handles
571     + * problems with initialization order.
572     + */
573     + rv = ipmi_init_msghandler();
574     + if (rv)
575     + return rv;
576    
577     mutex_lock(&smi_watchers_mutex);
578    
579     @@ -883,7 +893,7 @@ static int deliver_response(struct ipmi_smi *intf, struct ipmi_recv_msg *msg)
580    
581     if (user) {
582     user->handler->ipmi_recv_hndl(msg, user->handler_data);
583     - release_ipmi_user(msg->user, index);
584     + release_ipmi_user(user, index);
585     } else {
586     /* User went away, give up. */
587     ipmi_free_recv_msg(msg);
588     @@ -1075,7 +1085,7 @@ int ipmi_create_user(unsigned int if_num,
589     {
590     unsigned long flags;
591     struct ipmi_user *new_user;
592     - int rv = 0, index;
593     + int rv, index;
594     struct ipmi_smi *intf;
595    
596     /*
597     @@ -1093,18 +1103,9 @@ int ipmi_create_user(unsigned int if_num,
598     * Make sure the driver is actually initialized, this handles
599     * problems with initialization order.
600     */
601     - if (!initialized) {
602     - rv = ipmi_init_msghandler();
603     - if (rv)
604     - return rv;
605     -
606     - /*
607     - * The init code doesn't return an error if it was turned
608     - * off, but it won't initialize. Check that.
609     - */
610     - if (!initialized)
611     - return -ENODEV;
612     - }
613     + rv = ipmi_init_msghandler();
614     + if (rv)
615     + return rv;
616    
617     new_user = kmalloc(sizeof(*new_user), GFP_KERNEL);
618     if (!new_user)
619     @@ -1182,6 +1183,7 @@ EXPORT_SYMBOL(ipmi_get_smi_info);
620     static void free_user(struct kref *ref)
621     {
622     struct ipmi_user *user = container_of(ref, struct ipmi_user, refcount);
623     + cleanup_srcu_struct(&user->release_barrier);
624     kfree(user);
625     }
626    
627     @@ -1258,7 +1260,6 @@ int ipmi_destroy_user(struct ipmi_user *user)
628     {
629     _ipmi_destroy_user(user);
630    
631     - cleanup_srcu_struct(&user->release_barrier);
632     kref_put(&user->refcount, free_user);
633    
634     return 0;
635     @@ -1297,10 +1298,12 @@ int ipmi_set_my_address(struct ipmi_user *user,
636     if (!user)
637     return -ENODEV;
638    
639     - if (channel >= IPMI_MAX_CHANNELS)
640     + if (channel >= IPMI_MAX_CHANNELS) {
641     rv = -EINVAL;
642     - else
643     + } else {
644     + channel = array_index_nospec(channel, IPMI_MAX_CHANNELS);
645     user->intf->addrinfo[channel].address = address;
646     + }
647     release_ipmi_user(user, index);
648    
649     return rv;
650     @@ -1317,10 +1320,12 @@ int ipmi_get_my_address(struct ipmi_user *user,
651     if (!user)
652     return -ENODEV;
653    
654     - if (channel >= IPMI_MAX_CHANNELS)
655     + if (channel >= IPMI_MAX_CHANNELS) {
656     rv = -EINVAL;
657     - else
658     + } else {
659     + channel = array_index_nospec(channel, IPMI_MAX_CHANNELS);
660     *address = user->intf->addrinfo[channel].address;
661     + }
662     release_ipmi_user(user, index);
663    
664     return rv;
665     @@ -1337,10 +1342,12 @@ int ipmi_set_my_LUN(struct ipmi_user *user,
666     if (!user)
667     return -ENODEV;
668    
669     - if (channel >= IPMI_MAX_CHANNELS)
670     + if (channel >= IPMI_MAX_CHANNELS) {
671     rv = -EINVAL;
672     - else
673     + } else {
674     + channel = array_index_nospec(channel, IPMI_MAX_CHANNELS);
675     user->intf->addrinfo[channel].lun = LUN & 0x3;
676     + }
677     release_ipmi_user(user, index);
678    
679     return 0;
680     @@ -1357,10 +1364,12 @@ int ipmi_get_my_LUN(struct ipmi_user *user,
681     if (!user)
682     return -ENODEV;
683    
684     - if (channel >= IPMI_MAX_CHANNELS)
685     + if (channel >= IPMI_MAX_CHANNELS) {
686     rv = -EINVAL;
687     - else
688     + } else {
689     + channel = array_index_nospec(channel, IPMI_MAX_CHANNELS);
690     *address = user->intf->addrinfo[channel].lun;
691     + }
692     release_ipmi_user(user, index);
693    
694     return rv;
695     @@ -2184,6 +2193,7 @@ static int check_addr(struct ipmi_smi *intf,
696     {
697     if (addr->channel >= IPMI_MAX_CHANNELS)
698     return -EINVAL;
699     + addr->channel = array_index_nospec(addr->channel, IPMI_MAX_CHANNELS);
700     *lun = intf->addrinfo[addr->channel].lun;
701     *saddr = intf->addrinfo[addr->channel].address;
702     return 0;
703     @@ -3294,17 +3304,9 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers,
704     * Make sure the driver is actually initialized, this handles
705     * problems with initialization order.
706     */
707     - if (!initialized) {
708     - rv = ipmi_init_msghandler();
709     - if (rv)
710     - return rv;
711     - /*
712     - * The init code doesn't return an error if it was turned
713     - * off, but it won't initialize. Check that.
714     - */
715     - if (!initialized)
716     - return -ENODEV;
717     - }
718     + rv = ipmi_init_msghandler();
719     + if (rv)
720     + return rv;
721    
722     intf = kzalloc(sizeof(*intf), GFP_KERNEL);
723     if (!intf)
724     @@ -5020,6 +5022,22 @@ static int panic_event(struct notifier_block *this,
725     return NOTIFY_DONE;
726     }
727    
728     +/* Must be called with ipmi_interfaces_mutex held. */
729     +static int ipmi_register_driver(void)
730     +{
731     + int rv;
732     +
733     + if (drvregistered)
734     + return 0;
735     +
736     + rv = driver_register(&ipmidriver.driver);
737     + if (rv)
738     + pr_err("Could not register IPMI driver\n");
739     + else
740     + drvregistered = true;
741     + return rv;
742     +}
743     +
744     static struct notifier_block panic_block = {
745     .notifier_call = panic_event,
746     .next = NULL,
747     @@ -5030,66 +5048,74 @@ static int ipmi_init_msghandler(void)
748     {
749     int rv;
750    
751     + mutex_lock(&ipmi_interfaces_mutex);
752     + rv = ipmi_register_driver();
753     + if (rv)
754     + goto out;
755     if (initialized)
756     - return 0;
757     -
758     - rv = driver_register(&ipmidriver.driver);
759     - if (rv) {
760     - pr_err(PFX "Could not register IPMI driver\n");
761     - return rv;
762     - }
763     + goto out;
764    
765     - pr_info("ipmi message handler version " IPMI_DRIVER_VERSION "\n");
766     + init_srcu_struct(&ipmi_interfaces_srcu);
767    
768     timer_setup(&ipmi_timer, ipmi_timeout, 0);
769     mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES);
770    
771     atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
772    
773     - initialized = 1;
774     + initialized = true;
775    
776     - return 0;
777     +out:
778     + mutex_unlock(&ipmi_interfaces_mutex);
779     + return rv;
780     }
781    
782     static int __init ipmi_init_msghandler_mod(void)
783     {
784     - ipmi_init_msghandler();
785     - return 0;
786     + int rv;
787     +
788     + pr_info("version " IPMI_DRIVER_VERSION "\n");
789     +
790     + mutex_lock(&ipmi_interfaces_mutex);
791     + rv = ipmi_register_driver();
792     + mutex_unlock(&ipmi_interfaces_mutex);
793     +
794     + return rv;
795     }
796    
797     static void __exit cleanup_ipmi(void)
798     {
799     int count;
800    
801     - if (!initialized)
802     - return;
803     -
804     - atomic_notifier_chain_unregister(&panic_notifier_list, &panic_block);
805     -
806     - /*
807     - * This can't be called if any interfaces exist, so no worry
808     - * about shutting down the interfaces.
809     - */
810     -
811     - /*
812     - * Tell the timer to stop, then wait for it to stop. This
813     - * avoids problems with race conditions removing the timer
814     - * here.
815     - */
816     - atomic_inc(&stop_operation);
817     - del_timer_sync(&ipmi_timer);
818     + if (initialized) {
819     + atomic_notifier_chain_unregister(&panic_notifier_list,
820     + &panic_block);
821    
822     - driver_unregister(&ipmidriver.driver);
823     -
824     - initialized = 0;
825     + /*
826     + * This can't be called if any interfaces exist, so no worry
827     + * about shutting down the interfaces.
828     + */
829    
830     - /* Check for buffer leaks. */
831     - count = atomic_read(&smi_msg_inuse_count);
832     - if (count != 0)
833     - pr_warn(PFX "SMI message count %d at exit\n", count);
834     - count = atomic_read(&recv_msg_inuse_count);
835     - if (count != 0)
836     - pr_warn(PFX "recv message count %d at exit\n", count);
837     + /*
838     + * Tell the timer to stop, then wait for it to stop. This
839     + * avoids problems with race conditions removing the timer
840     + * here.
841     + */
842     + atomic_inc(&stop_operation);
843     + del_timer_sync(&ipmi_timer);
844     +
845     + initialized = false;
846     +
847     + /* Check for buffer leaks. */
848     + count = atomic_read(&smi_msg_inuse_count);
849     + if (count != 0)
850     + pr_warn(PFX "SMI message count %d at exit\n", count);
851     + count = atomic_read(&recv_msg_inuse_count);
852     + if (count != 0)
853     + pr_warn(PFX "recv message count %d at exit\n", count);
854     + cleanup_srcu_struct(&ipmi_interfaces_srcu);
855     + }
856     + if (drvregistered)
857     + driver_unregister(&ipmidriver.driver);
858     }
859     module_exit(cleanup_ipmi);
860    
861     diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
862     index 9b786726e426..76c2010ba672 100644
863     --- a/drivers/char/ipmi/ipmi_ssif.c
864     +++ b/drivers/char/ipmi/ipmi_ssif.c
865     @@ -630,8 +630,9 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
866    
867     /* Remove the multi-part read marker. */
868     len -= 2;
869     + data += 2;
870     for (i = 0; i < len; i++)
871     - ssif_info->data[i] = data[i+2];
872     + ssif_info->data[i] = data[i];
873     ssif_info->multi_len = len;
874     ssif_info->multi_pos = 1;
875    
876     @@ -659,8 +660,19 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
877     }
878    
879     blocknum = data[0];
880     + len--;
881     + data++;
882     +
883     + if (blocknum != 0xff && len != 31) {
884     + /* All blocks but the last must have 31 data bytes. */
885     + result = -EIO;
886     + if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
887     + pr_info("Received middle message <31\n");
888    
889     - if (ssif_info->multi_len + len - 1 > IPMI_MAX_MSG_LENGTH) {
890     + goto continue_op;
891     + }
892     +
893     + if (ssif_info->multi_len + len > IPMI_MAX_MSG_LENGTH) {
894     /* Received message too big, abort the operation. */
895     result = -E2BIG;
896     if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
897     @@ -669,16 +681,14 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
898     goto continue_op;
899     }
900    
901     - /* Remove the blocknum from the data. */
902     - len--;
903     for (i = 0; i < len; i++)
904     - ssif_info->data[i + ssif_info->multi_len] = data[i + 1];
905     + ssif_info->data[i + ssif_info->multi_len] = data[i];
906     ssif_info->multi_len += len;
907     if (blocknum == 0xff) {
908     /* End of read */
909     len = ssif_info->multi_len;
910     data = ssif_info->data;
911     - } else if (blocknum + 1 != ssif_info->multi_pos) {
912     + } else if (blocknum != ssif_info->multi_pos) {
913     /*
914     * Out of sequence block, just abort. Block
915     * numbers start at zero for the second block,
916     @@ -706,6 +716,7 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
917     }
918     }
919    
920     + continue_op:
921     if (result < 0) {
922     ssif_inc_stat(ssif_info, receive_errors);
923     } else {
924     @@ -713,8 +724,6 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
925     ssif_inc_stat(ssif_info, received_message_parts);
926     }
927    
928     -
929     - continue_op:
930     if (ssif_info->ssif_debug & SSIF_DEBUG_STATE)
931     pr_info(PFX "DONE 1: state = %d, result=%d.\n",
932     ssif_info->ssif_state, result);
933     diff --git a/drivers/clk/imx/clk-busy.c b/drivers/clk/imx/clk-busy.c
934     index 99036527eb0d..e695622c5aa5 100644
935     --- a/drivers/clk/imx/clk-busy.c
936     +++ b/drivers/clk/imx/clk-busy.c
937     @@ -154,7 +154,7 @@ static const struct clk_ops clk_busy_mux_ops = {
938    
939     struct clk *imx_clk_busy_mux(const char *name, void __iomem *reg, u8 shift,
940     u8 width, void __iomem *busy_reg, u8 busy_shift,
941     - const char **parent_names, int num_parents)
942     + const char * const *parent_names, int num_parents)
943     {
944     struct clk_busy_mux *busy;
945     struct clk *clk;
946     diff --git a/drivers/clk/imx/clk-fixup-mux.c b/drivers/clk/imx/clk-fixup-mux.c
947     index c9b327e0a8dd..44817c1b0b88 100644
948     --- a/drivers/clk/imx/clk-fixup-mux.c
949     +++ b/drivers/clk/imx/clk-fixup-mux.c
950     @@ -70,7 +70,7 @@ static const struct clk_ops clk_fixup_mux_ops = {
951     };
952    
953     struct clk *imx_clk_fixup_mux(const char *name, void __iomem *reg,
954     - u8 shift, u8 width, const char **parents,
955     + u8 shift, u8 width, const char * const *parents,
956     int num_parents, void (*fixup)(u32 *val))
957     {
958     struct clk_fixup_mux *fixup_mux;
959     diff --git a/drivers/clk/imx/clk-imx6q.c b/drivers/clk/imx/clk-imx6q.c
960     index 8c7c2fcb8d94..c509324f6338 100644
961     --- a/drivers/clk/imx/clk-imx6q.c
962     +++ b/drivers/clk/imx/clk-imx6q.c
963     @@ -508,8 +508,12 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
964     * lvds1_gate and lvds2_gate are pseudo-gates. Both can be
965     * independently configured as clock inputs or outputs. We treat
966     * the "output_enable" bit as a gate, even though it's really just
967     - * enabling clock output.
968     + * enabling clock output. Initially the gate bits are cleared, as
969     + * otherwise the exclusive configuration gets locked in the setup done
970     + * by software running before the clock driver, with no way to change
971     + * it.
972     */
973     + writel(readl(base + 0x160) & ~0x3c00, base + 0x160);
974     clk[IMX6QDL_CLK_LVDS1_GATE] = imx_clk_gate_exclusive("lvds1_gate", "lvds1_sel", base + 0x160, 10, BIT(12));
975     clk[IMX6QDL_CLK_LVDS2_GATE] = imx_clk_gate_exclusive("lvds2_gate", "lvds2_sel", base + 0x160, 11, BIT(13));
976    
977     diff --git a/drivers/clk/imx/clk.h b/drivers/clk/imx/clk.h
978     index 8076ec040f37..e65c1115d978 100644
979     --- a/drivers/clk/imx/clk.h
980     +++ b/drivers/clk/imx/clk.h
981     @@ -63,14 +63,14 @@ struct clk *imx_clk_busy_divider(const char *name, const char *parent_name,
982    
983     struct clk *imx_clk_busy_mux(const char *name, void __iomem *reg, u8 shift,
984     u8 width, void __iomem *busy_reg, u8 busy_shift,
985     - const char **parent_names, int num_parents);
986     + const char * const *parent_names, int num_parents);
987    
988     struct clk *imx_clk_fixup_divider(const char *name, const char *parent,
989     void __iomem *reg, u8 shift, u8 width,
990     void (*fixup)(u32 *val));
991    
992     struct clk *imx_clk_fixup_mux(const char *name, void __iomem *reg,
993     - u8 shift, u8 width, const char **parents,
994     + u8 shift, u8 width, const char * const *parents,
995     int num_parents, void (*fixup)(u32 *val));
996    
997     static inline struct clk *imx_clk_fixed(const char *name, int rate)
998     @@ -79,7 +79,8 @@ static inline struct clk *imx_clk_fixed(const char *name, int rate)
999     }
1000    
1001     static inline struct clk *imx_clk_mux_ldb(const char *name, void __iomem *reg,
1002     - u8 shift, u8 width, const char **parents, int num_parents)
1003     + u8 shift, u8 width, const char * const *parents,
1004     + int num_parents)
1005     {
1006     return clk_register_mux(NULL, name, parents, num_parents,
1007     CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT, reg,
1008     @@ -192,7 +193,8 @@ static inline struct clk *imx_clk_gate4(const char *name, const char *parent,
1009     }
1010    
1011     static inline struct clk *imx_clk_mux(const char *name, void __iomem *reg,
1012     - u8 shift, u8 width, const char **parents, int num_parents)
1013     + u8 shift, u8 width, const char * const *parents,
1014     + int num_parents)
1015     {
1016     return clk_register_mux(NULL, name, parents, num_parents,
1017     CLK_SET_RATE_NO_REPARENT, reg, shift,
1018     @@ -200,7 +202,8 @@ static inline struct clk *imx_clk_mux(const char *name, void __iomem *reg,
1019     }
1020    
1021     static inline struct clk *imx_clk_mux2(const char *name, void __iomem *reg,
1022     - u8 shift, u8 width, const char **parents, int num_parents)
1023     + u8 shift, u8 width, const char * const *parents,
1024     + int num_parents)
1025     {
1026     return clk_register_mux(NULL, name, parents, num_parents,
1027     CLK_SET_RATE_NO_REPARENT | CLK_OPS_PARENT_ENABLE,
1028     @@ -208,8 +211,9 @@ static inline struct clk *imx_clk_mux2(const char *name, void __iomem *reg,
1029     }
1030    
1031     static inline struct clk *imx_clk_mux_flags(const char *name,
1032     - void __iomem *reg, u8 shift, u8 width, const char **parents,
1033     - int num_parents, unsigned long flags)
1034     + void __iomem *reg, u8 shift, u8 width,
1035     + const char * const *parents, int num_parents,
1036     + unsigned long flags)
1037     {
1038     return clk_register_mux(NULL, name, parents, num_parents,
1039     flags | CLK_SET_RATE_NO_REPARENT, reg, shift, width, 0,
1040     diff --git a/drivers/clk/meson/meson8b.c b/drivers/clk/meson/meson8b.c
1041     index 74697e145dde..50060e895e7a 100644
1042     --- a/drivers/clk/meson/meson8b.c
1043     +++ b/drivers/clk/meson/meson8b.c
1044     @@ -568,13 +568,14 @@ static struct clk_fixed_factor meson8b_cpu_div3 = {
1045     };
1046    
1047     static const struct clk_div_table cpu_scale_table[] = {
1048     - { .val = 2, .div = 4 },
1049     - { .val = 3, .div = 6 },
1050     - { .val = 4, .div = 8 },
1051     - { .val = 5, .div = 10 },
1052     - { .val = 6, .div = 12 },
1053     - { .val = 7, .div = 14 },
1054     - { .val = 8, .div = 16 },
1055     + { .val = 1, .div = 4 },
1056     + { .val = 2, .div = 6 },
1057     + { .val = 3, .div = 8 },
1058     + { .val = 4, .div = 10 },
1059     + { .val = 5, .div = 12 },
1060     + { .val = 6, .div = 14 },
1061     + { .val = 7, .div = 16 },
1062     + { .val = 8, .div = 18 },
1063     { /* sentinel */ },
1064     };
1065    
1066     diff --git a/drivers/clocksource/timer-integrator-ap.c b/drivers/clocksource/timer-integrator-ap.c
1067     index 62d24690ba02..9701107806a7 100644
1068     --- a/drivers/clocksource/timer-integrator-ap.c
1069     +++ b/drivers/clocksource/timer-integrator-ap.c
1070     @@ -181,8 +181,7 @@ static int __init integrator_ap_timer_init_of(struct device_node *node)
1071     int irq;
1072     struct clk *clk;
1073     unsigned long rate;
1074     - struct device_node *pri_node;
1075     - struct device_node *sec_node;
1076     + struct device_node *alias_node;
1077    
1078     base = of_io_request_and_map(node, 0, "integrator-timer");
1079     if (IS_ERR(base))
1080     @@ -204,7 +203,18 @@ static int __init integrator_ap_timer_init_of(struct device_node *node)
1081     return err;
1082     }
1083    
1084     - pri_node = of_find_node_by_path(path);
1085     + alias_node = of_find_node_by_path(path);
1086     +
1087     + /*
1088     + * The pointer is used as an identifier not as a pointer, we
1089     + * can drop the refcount on the of__node immediately after
1090     + * getting it.
1091     + */
1092     + of_node_put(alias_node);
1093     +
1094     + if (node == alias_node)
1095     + /* The primary timer lacks IRQ, use as clocksource */
1096     + return integrator_clocksource_init(rate, base);
1097    
1098     err = of_property_read_string(of_aliases,
1099     "arm,timer-secondary", &path);
1100     @@ -213,14 +223,11 @@ static int __init integrator_ap_timer_init_of(struct device_node *node)
1101     return err;
1102     }
1103    
1104     + alias_node = of_find_node_by_path(path);
1105    
1106     - sec_node = of_find_node_by_path(path);
1107     -
1108     - if (node == pri_node)
1109     - /* The primary timer lacks IRQ, use as clocksource */
1110     - return integrator_clocksource_init(rate, base);
1111     + of_node_put(alias_node);
1112    
1113     - if (node == sec_node) {
1114     + if (node == alias_node) {
1115     /* The secondary timer will drive the clock event */
1116     irq = irq_of_parse_and_map(node, 0);
1117     return integrator_clockevent_init(rate, base, irq);
1118     diff --git a/drivers/cpuidle/cpuidle-pseries.c b/drivers/cpuidle/cpuidle-pseries.c
1119     index 9e56bc411061..74c247972bb3 100644
1120     --- a/drivers/cpuidle/cpuidle-pseries.c
1121     +++ b/drivers/cpuidle/cpuidle-pseries.c
1122     @@ -247,7 +247,13 @@ static int pseries_idle_probe(void)
1123     return -ENODEV;
1124    
1125     if (firmware_has_feature(FW_FEATURE_SPLPAR)) {
1126     - if (lppaca_shared_proc(get_lppaca())) {
1127     + /*
1128     + * Use local_paca instead of get_lppaca() since
1129     + * preemption is not disabled, and it is not required in
1130     + * fact, since lppaca_ptr does not need to be the value
1131     + * associated to the current CPU, it can be from any CPU.
1132     + */
1133     + if (lppaca_shared_proc(local_paca->lppaca_ptr)) {
1134     cpuidle_state_table = shared_states;
1135     max_idle_state = ARRAY_SIZE(shared_states);
1136     } else {
1137     diff --git a/drivers/firmware/efi/libstub/Makefile b/drivers/firmware/efi/libstub/Makefile
1138     index c51627660dbb..d9845099635e 100644
1139     --- a/drivers/firmware/efi/libstub/Makefile
1140     +++ b/drivers/firmware/efi/libstub/Makefile
1141     @@ -9,7 +9,10 @@ cflags-$(CONFIG_X86_32) := -march=i386
1142     cflags-$(CONFIG_X86_64) := -mcmodel=small
1143     cflags-$(CONFIG_X86) += -m$(BITS) -D__KERNEL__ -O2 \
1144     -fPIC -fno-strict-aliasing -mno-red-zone \
1145     - -mno-mmx -mno-sse -fshort-wchar
1146     + -mno-mmx -mno-sse -fshort-wchar \
1147     + -Wno-pointer-sign \
1148     + $(call cc-disable-warning, address-of-packed-member) \
1149     + $(call cc-disable-warning, gnu)
1150    
1151     # arm64 uses the full KBUILD_CFLAGS so it's necessary to explicitly
1152     # disable the stackleak plugin
1153     diff --git a/drivers/fpga/altera-cvp.c b/drivers/fpga/altera-cvp.c
1154     index 7fa793672a7a..68e4b2b98c8f 100644
1155     --- a/drivers/fpga/altera-cvp.c
1156     +++ b/drivers/fpga/altera-cvp.c
1157     @@ -468,14 +468,6 @@ static int altera_cvp_probe(struct pci_dev *pdev,
1158     goto err_unmap;
1159     }
1160    
1161     - ret = driver_create_file(&altera_cvp_driver.driver,
1162     - &driver_attr_chkcfg);
1163     - if (ret) {
1164     - dev_err(&pdev->dev, "Can't create sysfs chkcfg file\n");
1165     - fpga_mgr_unregister(mgr);
1166     - goto err_unmap;
1167     - }
1168     -
1169     return 0;
1170    
1171     err_unmap:
1172     @@ -493,7 +485,6 @@ static void altera_cvp_remove(struct pci_dev *pdev)
1173     struct altera_cvp_conf *conf = mgr->priv;
1174     u16 cmd;
1175    
1176     - driver_remove_file(&altera_cvp_driver.driver, &driver_attr_chkcfg);
1177     fpga_mgr_unregister(mgr);
1178     pci_iounmap(pdev, conf->map);
1179     pci_release_region(pdev, CVP_BAR);
1180     @@ -502,7 +493,30 @@ static void altera_cvp_remove(struct pci_dev *pdev)
1181     pci_write_config_word(pdev, PCI_COMMAND, cmd);
1182     }
1183    
1184     -module_pci_driver(altera_cvp_driver);
1185     +static int __init altera_cvp_init(void)
1186     +{
1187     + int ret;
1188     +
1189     + ret = pci_register_driver(&altera_cvp_driver);
1190     + if (ret)
1191     + return ret;
1192     +
1193     + ret = driver_create_file(&altera_cvp_driver.driver,
1194     + &driver_attr_chkcfg);
1195     + if (ret)
1196     + pr_warn("Can't create sysfs chkcfg file\n");
1197     +
1198     + return 0;
1199     +}
1200     +
1201     +static void __exit altera_cvp_exit(void)
1202     +{
1203     + driver_remove_file(&altera_cvp_driver.driver, &driver_attr_chkcfg);
1204     + pci_unregister_driver(&altera_cvp_driver);
1205     +}
1206     +
1207     +module_init(altera_cvp_init);
1208     +module_exit(altera_cvp_exit);
1209    
1210     MODULE_LICENSE("GPL v2");
1211     MODULE_AUTHOR("Anatolij Gustschin <agust@denx.de>");
1212     diff --git a/drivers/gpio/gpio-pl061.c b/drivers/gpio/gpio-pl061.c
1213     index 2afd9de84a0d..dc42571e6fdc 100644
1214     --- a/drivers/gpio/gpio-pl061.c
1215     +++ b/drivers/gpio/gpio-pl061.c
1216     @@ -54,6 +54,7 @@ struct pl061 {
1217    
1218     void __iomem *base;
1219     struct gpio_chip gc;
1220     + struct irq_chip irq_chip;
1221     int parent_irq;
1222    
1223     #ifdef CONFIG_PM
1224     @@ -281,15 +282,6 @@ static int pl061_irq_set_wake(struct irq_data *d, unsigned int state)
1225     return irq_set_irq_wake(pl061->parent_irq, state);
1226     }
1227    
1228     -static struct irq_chip pl061_irqchip = {
1229     - .name = "pl061",
1230     - .irq_ack = pl061_irq_ack,
1231     - .irq_mask = pl061_irq_mask,
1232     - .irq_unmask = pl061_irq_unmask,
1233     - .irq_set_type = pl061_irq_type,
1234     - .irq_set_wake = pl061_irq_set_wake,
1235     -};
1236     -
1237     static int pl061_probe(struct amba_device *adev, const struct amba_id *id)
1238     {
1239     struct device *dev = &adev->dev;
1240     @@ -328,6 +320,13 @@ static int pl061_probe(struct amba_device *adev, const struct amba_id *id)
1241     /*
1242     * irq_chip support
1243     */
1244     + pl061->irq_chip.name = dev_name(dev);
1245     + pl061->irq_chip.irq_ack = pl061_irq_ack;
1246     + pl061->irq_chip.irq_mask = pl061_irq_mask;
1247     + pl061->irq_chip.irq_unmask = pl061_irq_unmask;
1248     + pl061->irq_chip.irq_set_type = pl061_irq_type;
1249     + pl061->irq_chip.irq_set_wake = pl061_irq_set_wake;
1250     +
1251     writeb(0, pl061->base + GPIOIE); /* disable irqs */
1252     irq = adev->irq[0];
1253     if (irq < 0) {
1254     @@ -336,14 +335,14 @@ static int pl061_probe(struct amba_device *adev, const struct amba_id *id)
1255     }
1256     pl061->parent_irq = irq;
1257    
1258     - ret = gpiochip_irqchip_add(&pl061->gc, &pl061_irqchip,
1259     + ret = gpiochip_irqchip_add(&pl061->gc, &pl061->irq_chip,
1260     0, handle_bad_irq,
1261     IRQ_TYPE_NONE);
1262     if (ret) {
1263     dev_info(&adev->dev, "could not add irqchip\n");
1264     return ret;
1265     }
1266     - gpiochip_set_chained_irqchip(&pl061->gc, &pl061_irqchip,
1267     + gpiochip_set_chained_irqchip(&pl061->gc, &pl061->irq_chip,
1268     irq, pl061_irq_handler);
1269    
1270     amba_set_drvdata(adev, pl061);
1271     diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
1272     index 8a926d1df939..2b4199adcd94 100644
1273     --- a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
1274     +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
1275     @@ -116,16 +116,16 @@ static int uvd_v4_2_sw_init(void *handle)
1276     if (r)
1277     return r;
1278    
1279     - r = amdgpu_uvd_resume(adev);
1280     - if (r)
1281     - return r;
1282     -
1283     ring = &adev->uvd.inst->ring;
1284     sprintf(ring->name, "uvd");
1285     r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0);
1286     if (r)
1287     return r;
1288    
1289     + r = amdgpu_uvd_resume(adev);
1290     + if (r)
1291     + return r;
1292     +
1293     r = amdgpu_uvd_entity_init(adev);
1294    
1295     return r;
1296     diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
1297     index 50248059412e..88c006c5ee2c 100644
1298     --- a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
1299     +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
1300     @@ -113,16 +113,16 @@ static int uvd_v5_0_sw_init(void *handle)
1301     if (r)
1302     return r;
1303    
1304     - r = amdgpu_uvd_resume(adev);
1305     - if (r)
1306     - return r;
1307     -
1308     ring = &adev->uvd.inst->ring;
1309     sprintf(ring->name, "uvd");
1310     r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0);
1311     if (r)
1312     return r;
1313    
1314     + r = amdgpu_uvd_resume(adev);
1315     + if (r)
1316     + return r;
1317     +
1318     r = amdgpu_uvd_entity_init(adev);
1319    
1320     return r;
1321     diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
1322     index 6ae82cc2e55e..d4070839ac80 100644
1323     --- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
1324     +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
1325     @@ -420,16 +420,16 @@ static int uvd_v6_0_sw_init(void *handle)
1326     DRM_INFO("UVD ENC is disabled\n");
1327     }
1328    
1329     - r = amdgpu_uvd_resume(adev);
1330     - if (r)
1331     - return r;
1332     -
1333     ring = &adev->uvd.inst->ring;
1334     sprintf(ring->name, "uvd");
1335     r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0);
1336     if (r)
1337     return r;
1338    
1339     + r = amdgpu_uvd_resume(adev);
1340     + if (r)
1341     + return r;
1342     +
1343     if (uvd_v6_0_enc_support(adev)) {
1344     for (i = 0; i < adev->uvd.num_enc_rings; ++i) {
1345     ring = &adev->uvd.inst->ring_enc[i];
1346     diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
1347     index 9b7f8469bc5c..057151b17b45 100644
1348     --- a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
1349     +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
1350     @@ -444,10 +444,6 @@ static int uvd_v7_0_sw_init(void *handle)
1351     DRM_INFO("PSP loading UVD firmware\n");
1352     }
1353    
1354     - r = amdgpu_uvd_resume(adev);
1355     - if (r)
1356     - return r;
1357     -
1358     for (j = 0; j < adev->uvd.num_uvd_inst; j++) {
1359     if (adev->uvd.harvest_config & (1 << j))
1360     continue;
1361     @@ -479,6 +475,10 @@ static int uvd_v7_0_sw_init(void *handle)
1362     }
1363     }
1364    
1365     + r = amdgpu_uvd_resume(adev);
1366     + if (r)
1367     + return r;
1368     +
1369     r = amdgpu_uvd_entity_init(adev);
1370     if (r)
1371     return r;
1372     diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
1373     index 1427675d0e5a..5aba50f63ac6 100644
1374     --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
1375     +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
1376     @@ -661,6 +661,7 @@ void kgd2kfd_interrupt(struct kfd_dev *kfd, const void *ih_ring_entry)
1377     {
1378     uint32_t patched_ihre[KFD_MAX_RING_ENTRY_SIZE];
1379     bool is_patched = false;
1380     + unsigned long flags;
1381    
1382     if (!kfd->init_complete)
1383     return;
1384     @@ -670,7 +671,7 @@ void kgd2kfd_interrupt(struct kfd_dev *kfd, const void *ih_ring_entry)
1385     return;
1386     }
1387    
1388     - spin_lock(&kfd->interrupt_lock);
1389     + spin_lock_irqsave(&kfd->interrupt_lock, flags);
1390    
1391     if (kfd->interrupts_active
1392     && interrupt_is_wanted(kfd, ih_ring_entry,
1393     @@ -679,7 +680,7 @@ void kgd2kfd_interrupt(struct kfd_dev *kfd, const void *ih_ring_entry)
1394     is_patched ? patched_ihre : ih_ring_entry))
1395     queue_work(kfd->ih_wq, &kfd->interrupt_work);
1396    
1397     - spin_unlock(&kfd->interrupt_lock);
1398     + spin_unlock_irqrestore(&kfd->interrupt_lock, flags);
1399     }
1400    
1401     int kgd2kfd_quiesce_mm(struct mm_struct *mm)
1402     diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
1403     index 9bfb040352e9..6a6d977ddd7a 100644
1404     --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
1405     +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
1406     @@ -60,6 +60,11 @@ int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name,
1407     return -EINVAL;
1408     }
1409    
1410     + if (!stream_state) {
1411     + DRM_ERROR("No stream state for CRTC%d\n", crtc->index);
1412     + return -EINVAL;
1413     + }
1414     +
1415     /* When enabling CRC, we should also disable dithering. */
1416     if (source == AMDGPU_DM_PIPE_CRC_SOURCE_AUTO) {
1417     if (dc_stream_configure_crc(stream_state->ctx->dc,
1418     diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
1419     index 1bb4c318bdd4..f77bff5aa307 100644
1420     --- a/drivers/gpu/drm/drm_atomic_helper.c
1421     +++ b/drivers/gpu/drm/drm_atomic_helper.c
1422     @@ -1425,6 +1425,9 @@ void drm_atomic_helper_wait_for_flip_done(struct drm_device *dev,
1423     DRM_ERROR("[CRTC:%d:%s] flip_done timed out\n",
1424     crtc->base.id, crtc->name);
1425     }
1426     +
1427     + if (old_state->fake_commit)
1428     + complete_all(&old_state->fake_commit->flip_done);
1429     }
1430     EXPORT_SYMBOL(drm_atomic_helper_wait_for_flip_done);
1431    
1432     diff --git a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
1433     index 9973ac893635..3db232429630 100644
1434     --- a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
1435     +++ b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
1436     @@ -334,13 +334,16 @@ int usnic_ib_query_port(struct ib_device *ibdev, u8 port,
1437    
1438     usnic_dbg("\n");
1439    
1440     - mutex_lock(&us_ibdev->usdev_lock);
1441     if (ib_get_eth_speed(ibdev, port, &props->active_speed,
1442     - &props->active_width)) {
1443     - mutex_unlock(&us_ibdev->usdev_lock);
1444     + &props->active_width))
1445     return -EINVAL;
1446     - }
1447    
1448     + /*
1449     + * usdev_lock is acquired after (and not before) ib_get_eth_speed call
1450     + * because acquiring rtnl_lock in ib_get_eth_speed, while holding
1451     + * usdev_lock could lead to a deadlock.
1452     + */
1453     + mutex_lock(&us_ibdev->usdev_lock);
1454     /* props being zeroed by the caller, avoid zeroing it here */
1455    
1456     props->lid = 0;
1457     diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rxe/rxe_req.c
1458     index 8be27238a86e..fa98a5279647 100644
1459     --- a/drivers/infiniband/sw/rxe/rxe_req.c
1460     +++ b/drivers/infiniband/sw/rxe/rxe_req.c
1461     @@ -640,6 +640,7 @@ next_wqe:
1462     rmr->access = wqe->wr.wr.reg.access;
1463     rmr->lkey = wqe->wr.wr.reg.key;
1464     rmr->rkey = wqe->wr.wr.reg.key;
1465     + rmr->iova = wqe->wr.wr.reg.mr->iova;
1466     wqe->state = wqe_state_done;
1467     wqe->status = IB_WC_SUCCESS;
1468     } else {
1469     diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
1470     index 0481223b1deb..f2ec882f96be 100644
1471     --- a/drivers/md/dm-crypt.c
1472     +++ b/drivers/md/dm-crypt.c
1473     @@ -49,7 +49,7 @@ struct convert_context {
1474     struct bio *bio_out;
1475     struct bvec_iter iter_in;
1476     struct bvec_iter iter_out;
1477     - sector_t cc_sector;
1478     + u64 cc_sector;
1479     atomic_t cc_pending;
1480     union {
1481     struct skcipher_request *req;
1482     @@ -81,7 +81,7 @@ struct dm_crypt_request {
1483     struct convert_context *ctx;
1484     struct scatterlist sg_in[4];
1485     struct scatterlist sg_out[4];
1486     - sector_t iv_sector;
1487     + u64 iv_sector;
1488     };
1489    
1490     struct crypt_config;
1491     @@ -160,7 +160,7 @@ struct crypt_config {
1492     struct iv_lmk_private lmk;
1493     struct iv_tcw_private tcw;
1494     } iv_gen_private;
1495     - sector_t iv_offset;
1496     + u64 iv_offset;
1497     unsigned int iv_size;
1498     unsigned short int sector_size;
1499     unsigned char sector_shift;
1500     @@ -2780,7 +2780,7 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1501     }
1502    
1503     ret = -EINVAL;
1504     - if (sscanf(argv[4], "%llu%c", &tmpll, &dummy) != 1) {
1505     + if (sscanf(argv[4], "%llu%c", &tmpll, &dummy) != 1 || tmpll != (sector_t)tmpll) {
1506     ti->error = "Invalid device sector";
1507     goto bad;
1508     }
1509     diff --git a/drivers/md/dm-delay.c b/drivers/md/dm-delay.c
1510     index 2fb7bb4304ad..fddffe251bf6 100644
1511     --- a/drivers/md/dm-delay.c
1512     +++ b/drivers/md/dm-delay.c
1513     @@ -141,7 +141,7 @@ static int delay_class_ctr(struct dm_target *ti, struct delay_class *c, char **a
1514     unsigned long long tmpll;
1515     char dummy;
1516    
1517     - if (sscanf(argv[1], "%llu%c", &tmpll, &dummy) != 1) {
1518     + if (sscanf(argv[1], "%llu%c", &tmpll, &dummy) != 1 || tmpll != (sector_t)tmpll) {
1519     ti->error = "Invalid device sector";
1520     return -EINVAL;
1521     }
1522     diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
1523     index 32aabe27b37c..b86d2439ffc7 100644
1524     --- a/drivers/md/dm-flakey.c
1525     +++ b/drivers/md/dm-flakey.c
1526     @@ -213,7 +213,7 @@ static int flakey_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1527     devname = dm_shift_arg(&as);
1528    
1529     r = -EINVAL;
1530     - if (sscanf(dm_shift_arg(&as), "%llu%c", &tmpll, &dummy) != 1) {
1531     + if (sscanf(dm_shift_arg(&as), "%llu%c", &tmpll, &dummy) != 1 || tmpll != (sector_t)tmpll) {
1532     ti->error = "Invalid device sector";
1533     goto bad;
1534     }
1535     diff --git a/drivers/md/dm-kcopyd.c b/drivers/md/dm-kcopyd.c
1536     index 2fc4213e02b5..671c24332802 100644
1537     --- a/drivers/md/dm-kcopyd.c
1538     +++ b/drivers/md/dm-kcopyd.c
1539     @@ -56,15 +56,17 @@ struct dm_kcopyd_client {
1540     atomic_t nr_jobs;
1541    
1542     /*
1543     - * We maintain three lists of jobs:
1544     + * We maintain four lists of jobs:
1545     *
1546     * i) jobs waiting for pages
1547     * ii) jobs that have pages, and are waiting for the io to be issued.
1548     - * iii) jobs that have completed.
1549     + * iii) jobs that don't need to do any IO and just run a callback
1550     + * iv) jobs that have completed.
1551     *
1552     - * All three of these are protected by job_lock.
1553     + * All four of these are protected by job_lock.
1554     */
1555     spinlock_t job_lock;
1556     + struct list_head callback_jobs;
1557     struct list_head complete_jobs;
1558     struct list_head io_jobs;
1559     struct list_head pages_jobs;
1560     @@ -625,6 +627,7 @@ static void do_work(struct work_struct *work)
1561     struct dm_kcopyd_client *kc = container_of(work,
1562     struct dm_kcopyd_client, kcopyd_work);
1563     struct blk_plug plug;
1564     + unsigned long flags;
1565    
1566     /*
1567     * The order that these are called is *very* important.
1568     @@ -633,6 +636,10 @@ static void do_work(struct work_struct *work)
1569     * list. io jobs call wake when they complete and it all
1570     * starts again.
1571     */
1572     + spin_lock_irqsave(&kc->job_lock, flags);
1573     + list_splice_tail_init(&kc->callback_jobs, &kc->complete_jobs);
1574     + spin_unlock_irqrestore(&kc->job_lock, flags);
1575     +
1576     blk_start_plug(&plug);
1577     process_jobs(&kc->complete_jobs, kc, run_complete_job);
1578     process_jobs(&kc->pages_jobs, kc, run_pages_job);
1579     @@ -650,7 +657,7 @@ static void dispatch_job(struct kcopyd_job *job)
1580     struct dm_kcopyd_client *kc = job->kc;
1581     atomic_inc(&kc->nr_jobs);
1582     if (unlikely(!job->source.count))
1583     - push(&kc->complete_jobs, job);
1584     + push(&kc->callback_jobs, job);
1585     else if (job->pages == &zero_page_list)
1586     push(&kc->io_jobs, job);
1587     else
1588     @@ -858,7 +865,7 @@ void dm_kcopyd_do_callback(void *j, int read_err, unsigned long write_err)
1589     job->read_err = read_err;
1590     job->write_err = write_err;
1591    
1592     - push(&kc->complete_jobs, job);
1593     + push(&kc->callback_jobs, job);
1594     wake(kc);
1595     }
1596     EXPORT_SYMBOL(dm_kcopyd_do_callback);
1597     @@ -888,6 +895,7 @@ struct dm_kcopyd_client *dm_kcopyd_client_create(struct dm_kcopyd_throttle *thro
1598     return ERR_PTR(-ENOMEM);
1599    
1600     spin_lock_init(&kc->job_lock);
1601     + INIT_LIST_HEAD(&kc->callback_jobs);
1602     INIT_LIST_HEAD(&kc->complete_jobs);
1603     INIT_LIST_HEAD(&kc->io_jobs);
1604     INIT_LIST_HEAD(&kc->pages_jobs);
1605     @@ -939,6 +947,7 @@ void dm_kcopyd_client_destroy(struct dm_kcopyd_client *kc)
1606     /* Wait for completion of all jobs submitted by this client. */
1607     wait_event(kc->destroyq, !atomic_read(&kc->nr_jobs));
1608    
1609     + BUG_ON(!list_empty(&kc->callback_jobs));
1610     BUG_ON(!list_empty(&kc->complete_jobs));
1611     BUG_ON(!list_empty(&kc->io_jobs));
1612     BUG_ON(!list_empty(&kc->pages_jobs));
1613     diff --git a/drivers/md/dm-linear.c b/drivers/md/dm-linear.c
1614     index 2f7c44a006c4..caa08c4b84cd 100644
1615     --- a/drivers/md/dm-linear.c
1616     +++ b/drivers/md/dm-linear.c
1617     @@ -45,7 +45,7 @@ static int linear_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1618     }
1619    
1620     ret = -EINVAL;
1621     - if (sscanf(argv[1], "%llu%c", &tmp, &dummy) != 1) {
1622     + if (sscanf(argv[1], "%llu%c", &tmp, &dummy) != 1 || tmp != (sector_t)tmp) {
1623     ti->error = "Invalid device sector";
1624     goto bad;
1625     }
1626     diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c
1627     index 79eab1071ec2..5a51151f680d 100644
1628     --- a/drivers/md/dm-raid1.c
1629     +++ b/drivers/md/dm-raid1.c
1630     @@ -943,7 +943,8 @@ static int get_mirror(struct mirror_set *ms, struct dm_target *ti,
1631     char dummy;
1632     int ret;
1633    
1634     - if (sscanf(argv[1], "%llu%c", &offset, &dummy) != 1) {
1635     + if (sscanf(argv[1], "%llu%c", &offset, &dummy) != 1 ||
1636     + offset != (sector_t)offset) {
1637     ti->error = "Invalid offset";
1638     return -EINVAL;
1639     }
1640     diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
1641     index ae4b33d10924..36805b12661e 100644
1642     --- a/drivers/md/dm-snap.c
1643     +++ b/drivers/md/dm-snap.c
1644     @@ -19,6 +19,7 @@
1645     #include <linux/vmalloc.h>
1646     #include <linux/log2.h>
1647     #include <linux/dm-kcopyd.h>
1648     +#include <linux/semaphore.h>
1649    
1650     #include "dm.h"
1651    
1652     @@ -105,6 +106,9 @@ struct dm_snapshot {
1653     /* The on disk metadata handler */
1654     struct dm_exception_store *store;
1655    
1656     + /* Maximum number of in-flight COW jobs. */
1657     + struct semaphore cow_count;
1658     +
1659     struct dm_kcopyd_client *kcopyd_client;
1660    
1661     /* Wait for events based on state_bits */
1662     @@ -145,6 +149,19 @@ struct dm_snapshot {
1663     #define RUNNING_MERGE 0
1664     #define SHUTDOWN_MERGE 1
1665    
1666     +/*
1667     + * Maximum number of chunks being copied on write.
1668     + *
1669     + * The value was decided experimentally as a trade-off between memory
1670     + * consumption, stalling the kernel's workqueues and maintaining a high enough
1671     + * throughput.
1672     + */
1673     +#define DEFAULT_COW_THRESHOLD 2048
1674     +
1675     +static int cow_threshold = DEFAULT_COW_THRESHOLD;
1676     +module_param_named(snapshot_cow_threshold, cow_threshold, int, 0644);
1677     +MODULE_PARM_DESC(snapshot_cow_threshold, "Maximum number of chunks being copied on write");
1678     +
1679     DECLARE_DM_KCOPYD_THROTTLE_WITH_MODULE_PARM(snapshot_copy_throttle,
1680     "A percentage of time allocated for copy on write");
1681    
1682     @@ -1190,6 +1207,8 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1683     goto bad_hash_tables;
1684     }
1685    
1686     + sema_init(&s->cow_count, (cow_threshold > 0) ? cow_threshold : INT_MAX);
1687     +
1688     s->kcopyd_client = dm_kcopyd_client_create(&dm_kcopyd_throttle);
1689     if (IS_ERR(s->kcopyd_client)) {
1690     r = PTR_ERR(s->kcopyd_client);
1691     @@ -1575,6 +1594,7 @@ static void copy_callback(int read_err, unsigned long write_err, void *context)
1692     rb_link_node(&pe->out_of_order_node, parent, p);
1693     rb_insert_color(&pe->out_of_order_node, &s->out_of_order_tree);
1694     }
1695     + up(&s->cow_count);
1696     }
1697    
1698     /*
1699     @@ -1598,6 +1618,7 @@ static void start_copy(struct dm_snap_pending_exception *pe)
1700     dest.count = src.count;
1701    
1702     /* Hand over to kcopyd */
1703     + down(&s->cow_count);
1704     dm_kcopyd_copy(s->kcopyd_client, &src, 1, &dest, 0, copy_callback, pe);
1705     }
1706    
1707     @@ -1617,6 +1638,7 @@ static void start_full_bio(struct dm_snap_pending_exception *pe,
1708     pe->full_bio = bio;
1709     pe->full_bio_end_io = bio->bi_end_io;
1710    
1711     + down(&s->cow_count);
1712     callback_data = dm_kcopyd_prepare_callback(s->kcopyd_client,
1713     copy_callback, pe);
1714    
1715     diff --git a/drivers/md/dm-unstripe.c b/drivers/md/dm-unstripe.c
1716     index 954b7ab4e684..e673dacf6418 100644
1717     --- a/drivers/md/dm-unstripe.c
1718     +++ b/drivers/md/dm-unstripe.c
1719     @@ -78,7 +78,7 @@ static int unstripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1720     goto err;
1721     }
1722    
1723     - if (sscanf(argv[4], "%llu%c", &start, &dummy) != 1) {
1724     + if (sscanf(argv[4], "%llu%c", &start, &dummy) != 1 || start != (sector_t)start) {
1725     ti->error = "Invalid striped device offset";
1726     goto err;
1727     }
1728     diff --git a/drivers/media/firewire/firedtv-avc.c b/drivers/media/firewire/firedtv-avc.c
1729     index 1c933b2cf760..3ef5df1648d7 100644
1730     --- a/drivers/media/firewire/firedtv-avc.c
1731     +++ b/drivers/media/firewire/firedtv-avc.c
1732     @@ -968,7 +968,8 @@ static int get_ca_object_length(struct avc_response_frame *r)
1733     return r->operand[7];
1734     }
1735    
1736     -int avc_ca_app_info(struct firedtv *fdtv, char *app_info, unsigned int *len)
1737     +int avc_ca_app_info(struct firedtv *fdtv, unsigned char *app_info,
1738     + unsigned int *len)
1739     {
1740     struct avc_command_frame *c = (void *)fdtv->avc_data;
1741     struct avc_response_frame *r = (void *)fdtv->avc_data;
1742     @@ -1009,7 +1010,8 @@ out:
1743     return ret;
1744     }
1745    
1746     -int avc_ca_info(struct firedtv *fdtv, char *app_info, unsigned int *len)
1747     +int avc_ca_info(struct firedtv *fdtv, unsigned char *app_info,
1748     + unsigned int *len)
1749     {
1750     struct avc_command_frame *c = (void *)fdtv->avc_data;
1751     struct avc_response_frame *r = (void *)fdtv->avc_data;
1752     diff --git a/drivers/media/firewire/firedtv.h b/drivers/media/firewire/firedtv.h
1753     index 876cdec8329b..009905a19947 100644
1754     --- a/drivers/media/firewire/firedtv.h
1755     +++ b/drivers/media/firewire/firedtv.h
1756     @@ -124,8 +124,10 @@ int avc_lnb_control(struct firedtv *fdtv, char voltage, char burst,
1757     struct dvb_diseqc_master_cmd *diseqcmd);
1758     void avc_remote_ctrl_work(struct work_struct *work);
1759     int avc_register_remote_control(struct firedtv *fdtv);
1760     -int avc_ca_app_info(struct firedtv *fdtv, char *app_info, unsigned int *len);
1761     -int avc_ca_info(struct firedtv *fdtv, char *app_info, unsigned int *len);
1762     +int avc_ca_app_info(struct firedtv *fdtv, unsigned char *app_info,
1763     + unsigned int *len);
1764     +int avc_ca_info(struct firedtv *fdtv, unsigned char *app_info,
1765     + unsigned int *len);
1766     int avc_ca_reset(struct firedtv *fdtv);
1767     int avc_ca_pmt(struct firedtv *fdtv, char *app_info, int length);
1768     int avc_ca_get_time_date(struct firedtv *fdtv, int *interval);
1769     diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
1770     index bb6add9d340e..5b8350e87e75 100644
1771     --- a/drivers/media/platform/qcom/venus/core.c
1772     +++ b/drivers/media/platform/qcom/venus/core.c
1773     @@ -264,6 +264,14 @@ static int venus_probe(struct platform_device *pdev)
1774     if (ret)
1775     return ret;
1776    
1777     + if (!dev->dma_parms) {
1778     + dev->dma_parms = devm_kzalloc(dev, sizeof(*dev->dma_parms),
1779     + GFP_KERNEL);
1780     + if (!dev->dma_parms)
1781     + return -ENOMEM;
1782     + }
1783     + dma_set_max_seg_size(dev, DMA_BIT_MASK(32));
1784     +
1785     INIT_LIST_HEAD(&core->instances);
1786     mutex_init(&core->lock);
1787     INIT_DELAYED_WORK(&core->work, venus_sys_error_handler);
1788     diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
1789     index d46dc432456c..361abbc00486 100644
1790     --- a/drivers/media/usb/uvc/uvc_driver.c
1791     +++ b/drivers/media/usb/uvc/uvc_driver.c
1792     @@ -1824,11 +1824,7 @@ static void uvc_delete(struct kref *kref)
1793     usb_put_intf(dev->intf);
1794     usb_put_dev(dev->udev);
1795    
1796     - if (dev->vdev.dev)
1797     - v4l2_device_unregister(&dev->vdev);
1798     #ifdef CONFIG_MEDIA_CONTROLLER
1799     - if (media_devnode_is_registered(dev->mdev.devnode))
1800     - media_device_unregister(&dev->mdev);
1801     media_device_cleanup(&dev->mdev);
1802     #endif
1803    
1804     @@ -1885,6 +1881,15 @@ static void uvc_unregister_video(struct uvc_device *dev)
1805    
1806     uvc_debugfs_cleanup_stream(stream);
1807     }
1808     +
1809     + uvc_status_unregister(dev);
1810     +
1811     + if (dev->vdev.dev)
1812     + v4l2_device_unregister(&dev->vdev);
1813     +#ifdef CONFIG_MEDIA_CONTROLLER
1814     + if (media_devnode_is_registered(dev->mdev.devnode))
1815     + media_device_unregister(&dev->mdev);
1816     +#endif
1817     }
1818    
1819     int uvc_register_video_device(struct uvc_device *dev,
1820     diff --git a/drivers/media/usb/uvc/uvc_status.c b/drivers/media/usb/uvc/uvc_status.c
1821     index 0722dc684378..883e4cab45e7 100644
1822     --- a/drivers/media/usb/uvc/uvc_status.c
1823     +++ b/drivers/media/usb/uvc/uvc_status.c
1824     @@ -54,7 +54,7 @@ error:
1825     return ret;
1826     }
1827    
1828     -static void uvc_input_cleanup(struct uvc_device *dev)
1829     +static void uvc_input_unregister(struct uvc_device *dev)
1830     {
1831     if (dev->input)
1832     input_unregister_device(dev->input);
1833     @@ -71,7 +71,7 @@ static void uvc_input_report_key(struct uvc_device *dev, unsigned int code,
1834    
1835     #else
1836     #define uvc_input_init(dev)
1837     -#define uvc_input_cleanup(dev)
1838     +#define uvc_input_unregister(dev)
1839     #define uvc_input_report_key(dev, code, value)
1840     #endif /* CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV */
1841    
1842     @@ -292,12 +292,16 @@ int uvc_status_init(struct uvc_device *dev)
1843     return 0;
1844     }
1845    
1846     -void uvc_status_cleanup(struct uvc_device *dev)
1847     +void uvc_status_unregister(struct uvc_device *dev)
1848     {
1849     usb_kill_urb(dev->int_urb);
1850     + uvc_input_unregister(dev);
1851     +}
1852     +
1853     +void uvc_status_cleanup(struct uvc_device *dev)
1854     +{
1855     usb_free_urb(dev->int_urb);
1856     kfree(dev->status);
1857     - uvc_input_cleanup(dev);
1858     }
1859    
1860     int uvc_status_start(struct uvc_device *dev, gfp_t flags)
1861     diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
1862     index e5f5d84f1d1d..a738486fd9d6 100644
1863     --- a/drivers/media/usb/uvc/uvcvideo.h
1864     +++ b/drivers/media/usb/uvc/uvcvideo.h
1865     @@ -750,6 +750,7 @@ int uvc_register_video_device(struct uvc_device *dev,
1866    
1867     /* Status */
1868     int uvc_status_init(struct uvc_device *dev);
1869     +void uvc_status_unregister(struct uvc_device *dev);
1870     void uvc_status_cleanup(struct uvc_device *dev);
1871     int uvc_status_start(struct uvc_device *dev, gfp_t flags);
1872     void uvc_status_stop(struct uvc_device *dev);
1873     diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
1874     index be53044086c7..fbc56ee99682 100644
1875     --- a/drivers/mmc/host/atmel-mci.c
1876     +++ b/drivers/mmc/host/atmel-mci.c
1877     @@ -1954,13 +1954,14 @@ static void atmci_tasklet_func(unsigned long priv)
1878     }
1879    
1880     atmci_request_end(host, host->mrq);
1881     - state = STATE_IDLE;
1882     + goto unlock; /* atmci_request_end() sets host->state */
1883     break;
1884     }
1885     } while (state != prev_state);
1886    
1887     host->state = state;
1888    
1889     +unlock:
1890     spin_unlock(&host->lock);
1891     }
1892    
1893     diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
1894     index 8da3d39e3218..258918d8a416 100644
1895     --- a/drivers/net/dsa/mv88e6xxx/chip.c
1896     +++ b/drivers/net/dsa/mv88e6xxx/chip.c
1897     @@ -2391,6 +2391,107 @@ static int mv88e6xxx_stats_setup(struct mv88e6xxx_chip *chip)
1898     return mv88e6xxx_g1_stats_clear(chip);
1899     }
1900    
1901     +/* The mv88e6390 has some hidden registers used for debug and
1902     + * development. The errata also makes use of them.
1903     + */
1904     +static int mv88e6390_hidden_write(struct mv88e6xxx_chip *chip, int port,
1905     + int reg, u16 val)
1906     +{
1907     + u16 ctrl;
1908     + int err;
1909     +
1910     + err = mv88e6xxx_port_write(chip, PORT_RESERVED_1A_DATA_PORT,
1911     + PORT_RESERVED_1A, val);
1912     + if (err)
1913     + return err;
1914     +
1915     + ctrl = PORT_RESERVED_1A_BUSY | PORT_RESERVED_1A_WRITE |
1916     + PORT_RESERVED_1A_BLOCK | port << PORT_RESERVED_1A_PORT_SHIFT |
1917     + reg;
1918     +
1919     + return mv88e6xxx_port_write(chip, PORT_RESERVED_1A_CTRL_PORT,
1920     + PORT_RESERVED_1A, ctrl);
1921     +}
1922     +
1923     +static int mv88e6390_hidden_wait(struct mv88e6xxx_chip *chip)
1924     +{
1925     + return mv88e6xxx_wait(chip, PORT_RESERVED_1A_CTRL_PORT,
1926     + PORT_RESERVED_1A, PORT_RESERVED_1A_BUSY);
1927     +}
1928     +
1929     +
1930     +static int mv88e6390_hidden_read(struct mv88e6xxx_chip *chip, int port,
1931     + int reg, u16 *val)
1932     +{
1933     + u16 ctrl;
1934     + int err;
1935     +
1936     + ctrl = PORT_RESERVED_1A_BUSY | PORT_RESERVED_1A_READ |
1937     + PORT_RESERVED_1A_BLOCK | port << PORT_RESERVED_1A_PORT_SHIFT |
1938     + reg;
1939     +
1940     + err = mv88e6xxx_port_write(chip, PORT_RESERVED_1A_CTRL_PORT,
1941     + PORT_RESERVED_1A, ctrl);
1942     + if (err)
1943     + return err;
1944     +
1945     + err = mv88e6390_hidden_wait(chip);
1946     + if (err)
1947     + return err;
1948     +
1949     + return mv88e6xxx_port_read(chip, PORT_RESERVED_1A_DATA_PORT,
1950     + PORT_RESERVED_1A, val);
1951     +}
1952     +
1953     +/* Check if the errata has already been applied. */
1954     +static bool mv88e6390_setup_errata_applied(struct mv88e6xxx_chip *chip)
1955     +{
1956     + int port;
1957     + int err;
1958     + u16 val;
1959     +
1960     + for (port = 0; port < mv88e6xxx_num_ports(chip); port++) {
1961     + err = mv88e6390_hidden_read(chip, port, 0, &val);
1962     + if (err) {
1963     + dev_err(chip->dev,
1964     + "Error reading hidden register: %d\n", err);
1965     + return false;
1966     + }
1967     + if (val != 0x01c0)
1968     + return false;
1969     + }
1970     +
1971     + return true;
1972     +}
1973     +
1974     +/* The 6390 copper ports have an errata which require poking magic
1975     + * values into undocumented hidden registers and then performing a
1976     + * software reset.
1977     + */
1978     +static int mv88e6390_setup_errata(struct mv88e6xxx_chip *chip)
1979     +{
1980     + int port;
1981     + int err;
1982     +
1983     + if (mv88e6390_setup_errata_applied(chip))
1984     + return 0;
1985     +
1986     + /* Set the ports into blocking mode */
1987     + for (port = 0; port < mv88e6xxx_num_ports(chip); port++) {
1988     + err = mv88e6xxx_port_set_state(chip, port, BR_STATE_DISABLED);
1989     + if (err)
1990     + return err;
1991     + }
1992     +
1993     + for (port = 0; port < mv88e6xxx_num_ports(chip); port++) {
1994     + err = mv88e6390_hidden_write(chip, port, 0, 0x01c0);
1995     + if (err)
1996     + return err;
1997     + }
1998     +
1999     + return mv88e6xxx_software_reset(chip);
2000     +}
2001     +
2002     static int mv88e6xxx_setup(struct dsa_switch *ds)
2003     {
2004     struct mv88e6xxx_chip *chip = ds->priv;
2005     @@ -2403,6 +2504,12 @@ static int mv88e6xxx_setup(struct dsa_switch *ds)
2006    
2007     mutex_lock(&chip->reg_lock);
2008    
2009     + if (chip->info->ops->setup_errata) {
2010     + err = chip->info->ops->setup_errata(chip);
2011     + if (err)
2012     + goto unlock;
2013     + }
2014     +
2015     /* Cache the cmode of each port. */
2016     for (i = 0; i < mv88e6xxx_num_ports(chip); i++) {
2017     if (chip->info->ops->port_get_cmode) {
2018     @@ -3201,6 +3308,7 @@ static const struct mv88e6xxx_ops mv88e6185_ops = {
2019    
2020     static const struct mv88e6xxx_ops mv88e6190_ops = {
2021     /* MV88E6XXX_FAMILY_6390 */
2022     + .setup_errata = mv88e6390_setup_errata,
2023     .irl_init_all = mv88e6390_g2_irl_init_all,
2024     .get_eeprom = mv88e6xxx_g2_get_eeprom8,
2025     .set_eeprom = mv88e6xxx_g2_set_eeprom8,
2026     @@ -3243,6 +3351,7 @@ static const struct mv88e6xxx_ops mv88e6190_ops = {
2027    
2028     static const struct mv88e6xxx_ops mv88e6190x_ops = {
2029     /* MV88E6XXX_FAMILY_6390 */
2030     + .setup_errata = mv88e6390_setup_errata,
2031     .irl_init_all = mv88e6390_g2_irl_init_all,
2032     .get_eeprom = mv88e6xxx_g2_get_eeprom8,
2033     .set_eeprom = mv88e6xxx_g2_set_eeprom8,
2034     @@ -3285,6 +3394,7 @@ static const struct mv88e6xxx_ops mv88e6190x_ops = {
2035    
2036     static const struct mv88e6xxx_ops mv88e6191_ops = {
2037     /* MV88E6XXX_FAMILY_6390 */
2038     + .setup_errata = mv88e6390_setup_errata,
2039     .irl_init_all = mv88e6390_g2_irl_init_all,
2040     .get_eeprom = mv88e6xxx_g2_get_eeprom8,
2041     .set_eeprom = mv88e6xxx_g2_set_eeprom8,
2042     @@ -3374,6 +3484,7 @@ static const struct mv88e6xxx_ops mv88e6240_ops = {
2043    
2044     static const struct mv88e6xxx_ops mv88e6290_ops = {
2045     /* MV88E6XXX_FAMILY_6390 */
2046     + .setup_errata = mv88e6390_setup_errata,
2047     .irl_init_all = mv88e6390_g2_irl_init_all,
2048     .get_eeprom = mv88e6xxx_g2_get_eeprom8,
2049     .set_eeprom = mv88e6xxx_g2_set_eeprom8,
2050     @@ -3675,6 +3786,7 @@ static const struct mv88e6xxx_ops mv88e6352_ops = {
2051    
2052     static const struct mv88e6xxx_ops mv88e6390_ops = {
2053     /* MV88E6XXX_FAMILY_6390 */
2054     + .setup_errata = mv88e6390_setup_errata,
2055     .irl_init_all = mv88e6390_g2_irl_init_all,
2056     .get_eeprom = mv88e6xxx_g2_get_eeprom8,
2057     .set_eeprom = mv88e6xxx_g2_set_eeprom8,
2058     @@ -3722,6 +3834,7 @@ static const struct mv88e6xxx_ops mv88e6390_ops = {
2059    
2060     static const struct mv88e6xxx_ops mv88e6390x_ops = {
2061     /* MV88E6XXX_FAMILY_6390 */
2062     + .setup_errata = mv88e6390_setup_errata,
2063     .irl_init_all = mv88e6390_g2_irl_init_all,
2064     .get_eeprom = mv88e6xxx_g2_get_eeprom8,
2065     .set_eeprom = mv88e6xxx_g2_set_eeprom8,
2066     diff --git a/drivers/net/dsa/mv88e6xxx/chip.h b/drivers/net/dsa/mv88e6xxx/chip.h
2067     index f9ecb7872d32..546651d8c3e1 100644
2068     --- a/drivers/net/dsa/mv88e6xxx/chip.h
2069     +++ b/drivers/net/dsa/mv88e6xxx/chip.h
2070     @@ -300,6 +300,11 @@ struct mv88e6xxx_mdio_bus {
2071     };
2072    
2073     struct mv88e6xxx_ops {
2074     + /* Switch Setup Errata, called early in the switch setup to
2075     + * allow any errata actions to be performed
2076     + */
2077     + int (*setup_errata)(struct mv88e6xxx_chip *chip);
2078     +
2079     int (*ieee_pri_map)(struct mv88e6xxx_chip *chip);
2080     int (*ip_pri_map)(struct mv88e6xxx_chip *chip);
2081    
2082     diff --git a/drivers/net/dsa/mv88e6xxx/port.h b/drivers/net/dsa/mv88e6xxx/port.h
2083     index f32f56af8e35..b31910023bb6 100644
2084     --- a/drivers/net/dsa/mv88e6xxx/port.h
2085     +++ b/drivers/net/dsa/mv88e6xxx/port.h
2086     @@ -251,6 +251,16 @@
2087     /* Offset 0x19: Port IEEE Priority Remapping Registers (4-7) */
2088     #define MV88E6095_PORT_IEEE_PRIO_REMAP_4567 0x19
2089    
2090     +/* Offset 0x1a: Magic undocumented errata register */
2091     +#define PORT_RESERVED_1A 0x1a
2092     +#define PORT_RESERVED_1A_BUSY BIT(15)
2093     +#define PORT_RESERVED_1A_WRITE BIT(14)
2094     +#define PORT_RESERVED_1A_READ 0
2095     +#define PORT_RESERVED_1A_PORT_SHIFT 5
2096     +#define PORT_RESERVED_1A_BLOCK (0xf << 10)
2097     +#define PORT_RESERVED_1A_CTRL_PORT 4
2098     +#define PORT_RESERVED_1A_DATA_PORT 5
2099     +
2100     int mv88e6xxx_port_read(struct mv88e6xxx_chip *chip, int port, int reg,
2101     u16 *val);
2102     int mv88e6xxx_port_write(struct mv88e6xxx_chip *chip, int port, int reg,
2103     diff --git a/drivers/net/ethernet/intel/e1000e/ptp.c b/drivers/net/ethernet/intel/e1000e/ptp.c
2104     index 37c76945ad9b..e1f821edbc21 100644
2105     --- a/drivers/net/ethernet/intel/e1000e/ptp.c
2106     +++ b/drivers/net/ethernet/intel/e1000e/ptp.c
2107     @@ -173,10 +173,14 @@ static int e1000e_phc_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
2108     struct e1000_adapter *adapter = container_of(ptp, struct e1000_adapter,
2109     ptp_clock_info);
2110     unsigned long flags;
2111     - u64 ns;
2112     + u64 cycles, ns;
2113    
2114     spin_lock_irqsave(&adapter->systim_lock, flags);
2115     - ns = timecounter_read(&adapter->tc);
2116     +
2117     + /* Use timecounter_cyc2time() to allow non-monotonic SYSTIM readings */
2118     + cycles = adapter->cc.read(&adapter->cc);
2119     + ns = timecounter_cyc2time(&adapter->tc, cycles);
2120     +
2121     spin_unlock_irqrestore(&adapter->systim_lock, flags);
2122    
2123     *ts = ns_to_timespec64(ns);
2124     @@ -232,9 +236,12 @@ static void e1000e_systim_overflow_work(struct work_struct *work)
2125     systim_overflow_work.work);
2126     struct e1000_hw *hw = &adapter->hw;
2127     struct timespec64 ts;
2128     + u64 ns;
2129    
2130     - adapter->ptp_clock_info.gettime64(&adapter->ptp_clock_info, &ts);
2131     + /* Update the timecounter */
2132     + ns = timecounter_read(&adapter->tc);
2133    
2134     + ts = ns_to_timespec64(ns);
2135     e_dbg("SYSTIM overflow check at %lld.%09lu\n",
2136     (long long) ts.tv_sec, ts.tv_nsec);
2137    
2138     diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
2139     index add124e0381d..b27f7a968820 100644
2140     --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
2141     +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
2142     @@ -4,6 +4,7 @@
2143     #include "ixgbe.h"
2144     #include <net/xfrm.h>
2145     #include <crypto/aead.h>
2146     +#include <linux/if_bridge.h>
2147    
2148     /**
2149     * ixgbe_ipsec_set_tx_sa - set the Tx SA registers
2150     @@ -676,7 +677,8 @@ static int ixgbe_ipsec_add_sa(struct xfrm_state *xs)
2151     } else {
2152     struct tx_sa tsa;
2153    
2154     - if (adapter->num_vfs)
2155     + if (adapter->num_vfs &&
2156     + adapter->bridge_mode != BRIDGE_MODE_VEPA)
2157     return -EOPNOTSUPP;
2158    
2159     /* find the first unused index */
2160     diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
2161     index 3d1159f8a53f..de821a9fdfaf 100644
2162     --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
2163     +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
2164     @@ -4635,12 +4635,15 @@ static int mlxsw_sp_netdevice_port_upper_event(struct net_device *lower_dev,
2165     lower_dev,
2166     upper_dev);
2167     } else if (netif_is_lag_master(upper_dev)) {
2168     - if (info->linking)
2169     + if (info->linking) {
2170     err = mlxsw_sp_port_lag_join(mlxsw_sp_port,
2171     upper_dev);
2172     - else
2173     + } else {
2174     + mlxsw_sp_port_lag_tx_en_set(mlxsw_sp_port,
2175     + false);
2176     mlxsw_sp_port_lag_leave(mlxsw_sp_port,
2177     upper_dev);
2178     + }
2179     } else if (netif_is_ovs_master(upper_dev)) {
2180     if (info->linking)
2181     err = mlxsw_sp_port_ovs_join(mlxsw_sp_port);
2182     diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
2183     index 4eb64cb0d9a1..0d9ea37c5d21 100644
2184     --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
2185     +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
2186     @@ -1761,7 +1761,7 @@ static void
2187     mlxsw_sp_bridge_port_vlan_del(struct mlxsw_sp_port *mlxsw_sp_port,
2188     struct mlxsw_sp_bridge_port *bridge_port, u16 vid)
2189     {
2190     - u16 pvid = mlxsw_sp_port->pvid == vid ? 0 : vid;
2191     + u16 pvid = mlxsw_sp_port->pvid == vid ? 0 : mlxsw_sp_port->pvid;
2192     struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan;
2193    
2194     mlxsw_sp_port_vlan = mlxsw_sp_port_vlan_find_by_vid(mlxsw_sp_port, vid);
2195     diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
2196     index 07f3080eca18..5f45ffeeecb4 100644
2197     --- a/drivers/net/ethernet/realtek/r8169.c
2198     +++ b/drivers/net/ethernet/realtek/r8169.c
2199     @@ -214,6 +214,8 @@ enum cfg_version {
2200     };
2201    
2202     static const struct pci_device_id rtl8169_pci_tbl[] = {
2203     + { PCI_VDEVICE(REALTEK, 0x2502), RTL_CFG_1 },
2204     + { PCI_VDEVICE(REALTEK, 0x2600), RTL_CFG_1 },
2205     { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8129), 0, 0, RTL_CFG_0 },
2206     { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8136), 0, 0, RTL_CFG_2 },
2207     { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8161), 0, 0, RTL_CFG_1 },
2208     diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
2209     index 774e1ff01c9a..735ad838e2ba 100644
2210     --- a/drivers/net/usb/qmi_wwan.c
2211     +++ b/drivers/net/usb/qmi_wwan.c
2212     @@ -123,6 +123,7 @@ static void qmimux_setup(struct net_device *dev)
2213     dev->addr_len = 0;
2214     dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
2215     dev->netdev_ops = &qmimux_netdev_ops;
2216     + dev->mtu = 1500;
2217     dev->needs_free_netdev = true;
2218     }
2219    
2220     diff --git a/drivers/net/wireless/ath/ath10k/debugfs_sta.c b/drivers/net/wireless/ath/ath10k/debugfs_sta.c
2221     index a63c97e2c50c..6f10331e986b 100644
2222     --- a/drivers/net/wireless/ath/ath10k/debugfs_sta.c
2223     +++ b/drivers/net/wireless/ath/ath10k/debugfs_sta.c
2224     @@ -71,7 +71,7 @@ void ath10k_sta_update_rx_tid_stats_ampdu(struct ath10k *ar, u16 peer_id, u8 tid
2225     spin_lock_bh(&ar->data_lock);
2226    
2227     peer = ath10k_peer_find_by_id(ar, peer_id);
2228     - if (!peer)
2229     + if (!peer || !peer->sta)
2230     goto out;
2231    
2232     arsta = (struct ath10k_sta *)peer->sta->drv_priv;
2233     diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
2234     index 4d1cd90d6d27..03d4cc6f35bc 100644
2235     --- a/drivers/net/wireless/ath/ath10k/htt_rx.c
2236     +++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
2237     @@ -2589,7 +2589,7 @@ static void ath10k_htt_fetch_peer_stats(struct ath10k *ar,
2238     rcu_read_lock();
2239     spin_lock_bh(&ar->data_lock);
2240     peer = ath10k_peer_find_by_id(ar, peer_id);
2241     - if (!peer) {
2242     + if (!peer || !peer->sta) {
2243     ath10k_warn(ar, "Invalid peer id %d peer stats buffer\n",
2244     peer_id);
2245     goto out;
2246     @@ -2642,7 +2642,7 @@ static void ath10k_fetch_10_2_tx_stats(struct ath10k *ar, u8 *data)
2247     rcu_read_lock();
2248     spin_lock_bh(&ar->data_lock);
2249     peer = ath10k_peer_find_by_id(ar, peer_id);
2250     - if (!peer) {
2251     + if (!peer || !peer->sta) {
2252     ath10k_warn(ar, "Invalid peer id %d in peer stats buffer\n",
2253     peer_id);
2254     goto out;
2255     diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
2256     index afed549f5645..9a764af30f36 100644
2257     --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
2258     +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
2259     @@ -2938,7 +2938,8 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
2260     iwl_mvm_mac_ctxt_changed(mvm, vif, false, NULL);
2261     }
2262    
2263     - iwl_mvm_rs_rate_init(mvm, sta, mvmvif->phy_ctxt->channel->band);
2264     + iwl_mvm_rs_rate_init(mvm, sta, mvmvif->phy_ctxt->channel->band,
2265     + false);
2266     ret = iwl_mvm_update_sta(mvm, vif, sta);
2267     } else if (old_state == IEEE80211_STA_ASSOC &&
2268     new_state == IEEE80211_STA_AUTHORIZED) {
2269     @@ -2954,7 +2955,8 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
2270     /* enable beacon filtering */
2271     WARN_ON(iwl_mvm_enable_beacon_filter(mvm, vif, 0));
2272    
2273     - iwl_mvm_rs_rate_init(mvm, sta, mvmvif->phy_ctxt->channel->band);
2274     + iwl_mvm_rs_rate_init(mvm, sta, mvmvif->phy_ctxt->channel->band,
2275     + true);
2276    
2277     ret = 0;
2278     } else if (old_state == IEEE80211_STA_AUTHORIZED &&
2279     diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
2280     index b3987a0a7018..6b65ad6c9b56 100644
2281     --- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
2282     +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
2283     @@ -1685,7 +1685,7 @@ iwl_mvm_vif_dbgfs_clean(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
2284     #endif /* CONFIG_IWLWIFI_DEBUGFS */
2285    
2286     /* rate scaling */
2287     -int iwl_mvm_send_lq_cmd(struct iwl_mvm *mvm, struct iwl_lq_cmd *lq, bool init);
2288     +int iwl_mvm_send_lq_cmd(struct iwl_mvm *mvm, struct iwl_lq_cmd *lq, bool sync);
2289     void iwl_mvm_update_frame_stats(struct iwl_mvm *mvm, u32 rate, bool agg);
2290     int rs_pretty_print_rate(char *buf, int bufsz, const u32 rate);
2291     void rs_update_last_rssi(struct iwl_mvm *mvm,
2292     diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
2293     index f2830b5693d2..6b9c670fcef8 100644
2294     --- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
2295     +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
2296     @@ -1280,7 +1280,7 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
2297     (unsigned long)(lq_sta->last_tx +
2298     (IWL_MVM_RS_IDLE_TIMEOUT * HZ)))) {
2299     IWL_DEBUG_RATE(mvm, "Tx idle for too long. reinit rs\n");
2300     - iwl_mvm_rs_rate_init(mvm, sta, info->band);
2301     + iwl_mvm_rs_rate_init(mvm, sta, info->band, true);
2302     return;
2303     }
2304     lq_sta->last_tx = jiffies;
2305     @@ -2870,9 +2870,8 @@ void rs_update_last_rssi(struct iwl_mvm *mvm,
2306     static void rs_initialize_lq(struct iwl_mvm *mvm,
2307     struct ieee80211_sta *sta,
2308     struct iwl_lq_sta *lq_sta,
2309     - enum nl80211_band band)
2310     + enum nl80211_band band, bool update)
2311     {
2312     - struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
2313     struct iwl_scale_tbl_info *tbl;
2314     struct rs_rate *rate;
2315     u8 active_tbl = 0;
2316     @@ -2901,8 +2900,7 @@ static void rs_initialize_lq(struct iwl_mvm *mvm,
2317     rs_set_expected_tpt_table(lq_sta, tbl);
2318     rs_fill_lq_cmd(mvm, sta, lq_sta, rate);
2319     /* TODO restore station should remember the lq cmd */
2320     - iwl_mvm_send_lq_cmd(mvm, &lq_sta->lq,
2321     - mvmsta->sta_state < IEEE80211_STA_AUTHORIZED);
2322     + iwl_mvm_send_lq_cmd(mvm, &lq_sta->lq, !update);
2323     }
2324    
2325     static void rs_drv_get_rate(void *mvm_r, struct ieee80211_sta *sta,
2326     @@ -3155,7 +3153,7 @@ void iwl_mvm_update_frame_stats(struct iwl_mvm *mvm, u32 rate, bool agg)
2327     * Called after adding a new station to initialize rate scaling
2328     */
2329     static void rs_drv_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
2330     - enum nl80211_band band)
2331     + enum nl80211_band band, bool update)
2332     {
2333     int i, j;
2334     struct ieee80211_hw *hw = mvm->hw;
2335     @@ -3235,7 +3233,7 @@ static void rs_drv_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
2336     #ifdef CONFIG_IWLWIFI_DEBUGFS
2337     iwl_mvm_reset_frame_stats(mvm);
2338     #endif
2339     - rs_initialize_lq(mvm, sta, lq_sta, band);
2340     + rs_initialize_lq(mvm, sta, lq_sta, band, update);
2341     }
2342    
2343     static void rs_drv_rate_update(void *mvm_r,
2344     @@ -3255,7 +3253,7 @@ static void rs_drv_rate_update(void *mvm_r,
2345     for (tid = 0; tid < IWL_MAX_TID_COUNT; tid++)
2346     ieee80211_stop_tx_ba_session(sta, tid);
2347    
2348     - iwl_mvm_rs_rate_init(mvm, sta, sband->band);
2349     + iwl_mvm_rs_rate_init(mvm, sta, sband->band, true);
2350     }
2351    
2352     #ifdef CONFIG_MAC80211_DEBUGFS
2353     @@ -4112,12 +4110,12 @@ static const struct rate_control_ops rs_mvm_ops_drv = {
2354     };
2355    
2356     void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
2357     - enum nl80211_band band)
2358     + enum nl80211_band band, bool update)
2359     {
2360     if (iwl_mvm_has_tlc_offload(mvm))
2361     rs_fw_rate_init(mvm, sta, band);
2362     else
2363     - rs_drv_rate_init(mvm, sta, band);
2364     + rs_drv_rate_init(mvm, sta, band, update);
2365     }
2366    
2367     int iwl_mvm_rate_control_register(void)
2368     diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.h b/drivers/net/wireless/intel/iwlwifi/mvm/rs.h
2369     index d2cf484e2b73..8e7f993e2911 100644
2370     --- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.h
2371     +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.h
2372     @@ -420,7 +420,7 @@ struct iwl_lq_sta {
2373    
2374     /* Initialize station's rate scaling information after adding station */
2375     void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
2376     - enum nl80211_band band);
2377     + enum nl80211_band band, bool init);
2378    
2379     /* Notify RS about Tx status */
2380     void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
2381     diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/utils.c b/drivers/net/wireless/intel/iwlwifi/mvm/utils.c
2382     index b002a7afb5f5..6a5349401aa9 100644
2383     --- a/drivers/net/wireless/intel/iwlwifi/mvm/utils.c
2384     +++ b/drivers/net/wireless/intel/iwlwifi/mvm/utils.c
2385     @@ -900,20 +900,19 @@ int iwl_mvm_disable_txq(struct iwl_mvm *mvm, int queue, int mac80211_queue,
2386    
2387     /**
2388     * iwl_mvm_send_lq_cmd() - Send link quality command
2389     - * @init: This command is sent as part of station initialization right
2390     - * after station has been added.
2391     + * @sync: This command can be sent synchronously.
2392     *
2393     * The link quality command is sent as the last step of station creation.
2394     * This is the special case in which init is set and we call a callback in
2395     * this case to clear the state indicating that station creation is in
2396     * progress.
2397     */
2398     -int iwl_mvm_send_lq_cmd(struct iwl_mvm *mvm, struct iwl_lq_cmd *lq, bool init)
2399     +int iwl_mvm_send_lq_cmd(struct iwl_mvm *mvm, struct iwl_lq_cmd *lq, bool sync)
2400     {
2401     struct iwl_host_cmd cmd = {
2402     .id = LQ_CMD,
2403     .len = { sizeof(struct iwl_lq_cmd), },
2404     - .flags = init ? 0 : CMD_ASYNC,
2405     + .flags = sync ? 0 : CMD_ASYNC,
2406     .data = { lq, },
2407     };
2408    
2409     diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
2410     index eda57ef12fd0..baa9cee6fa2c 100644
2411     --- a/drivers/of/overlay.c
2412     +++ b/drivers/of/overlay.c
2413     @@ -378,7 +378,9 @@ static int add_changeset_node(struct overlay_changeset *ovcs,
2414     if (ret)
2415     return ret;
2416    
2417     - return build_changeset_next_level(ovcs, tchild, node);
2418     + ret = build_changeset_next_level(ovcs, tchild, node);
2419     + of_node_put(tchild);
2420     + return ret;
2421     }
2422    
2423     if (node->phandle && tchild->phandle)
2424     diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
2425     index 2d6e272315a8..db3556dc90d1 100644
2426     --- a/drivers/platform/x86/asus-wmi.c
2427     +++ b/drivers/platform/x86/asus-wmi.c
2428     @@ -2231,7 +2231,8 @@ static int asus_wmi_add(struct platform_device *pdev)
2429     err = asus_wmi_backlight_init(asus);
2430     if (err && err != -ENODEV)
2431     goto fail_backlight;
2432     - }
2433     + } else
2434     + err = asus_wmi_set_devstate(ASUS_WMI_DEVID_BACKLIGHT, 2, NULL);
2435    
2436     status = wmi_install_notify_handler(asus->driver->event_guid,
2437     asus_wmi_notify, asus);
2438     diff --git a/drivers/scsi/megaraid/megaraid_sas_fp.c b/drivers/scsi/megaraid/megaraid_sas_fp.c
2439     index 59ecbb3b53b5..a33628550425 100644
2440     --- a/drivers/scsi/megaraid/megaraid_sas_fp.c
2441     +++ b/drivers/scsi/megaraid/megaraid_sas_fp.c
2442     @@ -1266,7 +1266,7 @@ void mr_update_load_balance_params(struct MR_DRV_RAID_MAP_ALL *drv_map,
2443    
2444     for (ldCount = 0; ldCount < MAX_LOGICAL_DRIVES_EXT; ldCount++) {
2445     ld = MR_TargetIdToLdGet(ldCount, drv_map);
2446     - if (ld >= MAX_LOGICAL_DRIVES_EXT) {
2447     + if (ld >= MAX_LOGICAL_DRIVES_EXT - 1) {
2448     lbInfo[ldCount].loadBalanceFlag = 0;
2449     continue;
2450     }
2451     diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
2452     index c7f95bace353..f45c54f02bfa 100644
2453     --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
2454     +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
2455     @@ -2832,7 +2832,7 @@ static void megasas_build_ld_nonrw_fusion(struct megasas_instance *instance,
2456     device_id < instance->fw_supported_vd_count)) {
2457    
2458     ld = MR_TargetIdToLdGet(device_id, local_map_ptr);
2459     - if (ld >= instance->fw_supported_vd_count)
2460     + if (ld >= instance->fw_supported_vd_count - 1)
2461     fp_possible = 0;
2462     else {
2463     raid = MR_LdRaidGet(ld, local_map_ptr);
2464     diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
2465     index 59d7844ee022..b59bba3e6516 100644
2466     --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
2467     +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
2468     @@ -3344,8 +3344,9 @@ _base_mpi_ep_writeq(__u64 b, volatile void __iomem *addr,
2469     static inline void
2470     _base_writeq(__u64 b, volatile void __iomem *addr, spinlock_t *writeq_lock)
2471     {
2472     + wmb();
2473     __raw_writeq(b, addr);
2474     - mmiowb();
2475     + barrier();
2476     }
2477     #else
2478     static inline void
2479     diff --git a/drivers/scsi/qedi/qedi_main.c b/drivers/scsi/qedi/qedi_main.c
2480     index e5bd035ebad0..4de740da547b 100644
2481     --- a/drivers/scsi/qedi/qedi_main.c
2482     +++ b/drivers/scsi/qedi/qedi_main.c
2483     @@ -952,6 +952,9 @@ static int qedi_find_boot_info(struct qedi_ctx *qedi,
2484     cls_sess = iscsi_conn_to_session(cls_conn);
2485     sess = cls_sess->dd_data;
2486    
2487     + if (!iscsi_is_session_online(cls_sess))
2488     + continue;
2489     +
2490     if (pri_ctrl_flags) {
2491     if (!strcmp(pri_tgt->iscsi_name, sess->targetname) &&
2492     !strcmp(pri_tgt->ip_addr, ep_ip_addr)) {
2493     diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c
2494     index 2112ea6723c6..8c1a232ac6bf 100644
2495     --- a/drivers/scsi/smartpqi/smartpqi_init.c
2496     +++ b/drivers/scsi/smartpqi/smartpqi_init.c
2497     @@ -2720,6 +2720,9 @@ static unsigned int pqi_process_io_intr(struct pqi_ctrl_info *ctrl_info,
2498     switch (response->header.iu_type) {
2499     case PQI_RESPONSE_IU_RAID_PATH_IO_SUCCESS:
2500     case PQI_RESPONSE_IU_AIO_PATH_IO_SUCCESS:
2501     + if (io_request->scmd)
2502     + io_request->scmd->result = 0;
2503     + /* fall through */
2504     case PQI_RESPONSE_IU_GENERAL_MANAGEMENT:
2505     break;
2506     case PQI_RESPONSE_IU_TASK_MANAGEMENT:
2507     @@ -6686,6 +6689,7 @@ static void pqi_shutdown(struct pci_dev *pci_dev)
2508     * storage.
2509     */
2510     rc = pqi_flush_cache(ctrl_info, SHUTDOWN);
2511     + pqi_free_interrupts(ctrl_info);
2512     pqi_reset(ctrl_info);
2513     if (rc == 0)
2514     return;
2515     diff --git a/drivers/staging/erofs/unzip_vle.c b/drivers/staging/erofs/unzip_vle.c
2516     index 14da8cc2246a..0346630b67c8 100644
2517     --- a/drivers/staging/erofs/unzip_vle.c
2518     +++ b/drivers/staging/erofs/unzip_vle.c
2519     @@ -724,13 +724,18 @@ static void z_erofs_vle_unzip_kickoff(void *ptr, int bios)
2520     struct z_erofs_vle_unzip_io *io = tagptr_unfold_ptr(t);
2521     bool background = tagptr_unfold_tags(t);
2522    
2523     - if (atomic_add_return(bios, &io->pending_bios))
2524     + if (!background) {
2525     + unsigned long flags;
2526     +
2527     + spin_lock_irqsave(&io->u.wait.lock, flags);
2528     + if (!atomic_add_return(bios, &io->pending_bios))
2529     + wake_up_locked(&io->u.wait);
2530     + spin_unlock_irqrestore(&io->u.wait.lock, flags);
2531     return;
2532     + }
2533    
2534     - if (background)
2535     + if (!atomic_add_return(bios, &io->pending_bios))
2536     queue_work(z_erofs_workqueue, &io->u.work);
2537     - else
2538     - wake_up(&io->u.wait);
2539     }
2540    
2541     static inline void z_erofs_vle_read_endio(struct bio *bio)
2542     diff --git a/drivers/target/target_core_spc.c b/drivers/target/target_core_spc.c
2543     index cb0461a10808..93424db5f002 100644
2544     --- a/drivers/target/target_core_spc.c
2545     +++ b/drivers/target/target_core_spc.c
2546     @@ -108,12 +108,17 @@ spc_emulate_inquiry_std(struct se_cmd *cmd, unsigned char *buf)
2547    
2548     buf[7] = 0x2; /* CmdQue=1 */
2549    
2550     - memcpy(&buf[8], "LIO-ORG ", 8);
2551     - memset(&buf[16], 0x20, 16);
2552     + /*
2553     + * ASCII data fields described as being left-aligned shall have any
2554     + * unused bytes at the end of the field (i.e., highest offset) and the
2555     + * unused bytes shall be filled with ASCII space characters (20h).
2556     + */
2557     + memset(&buf[8], 0x20, 8 + 16 + 4);
2558     + memcpy(&buf[8], "LIO-ORG", sizeof("LIO-ORG") - 1);
2559     memcpy(&buf[16], dev->t10_wwn.model,
2560     - min_t(size_t, strlen(dev->t10_wwn.model), 16));
2561     + strnlen(dev->t10_wwn.model, 16));
2562     memcpy(&buf[32], dev->t10_wwn.revision,
2563     - min_t(size_t, strlen(dev->t10_wwn.revision), 4));
2564     + strnlen(dev->t10_wwn.revision, 4));
2565     buf[4] = 31; /* Set additional length to 31 */
2566    
2567     return 0;
2568     @@ -251,7 +256,9 @@ check_t10_vend_desc:
2569     buf[off] = 0x2; /* ASCII */
2570     buf[off+1] = 0x1; /* T10 Vendor ID */
2571     buf[off+2] = 0x0;
2572     - memcpy(&buf[off+4], "LIO-ORG", 8);
2573     + /* left align Vendor ID and pad with spaces */
2574     + memset(&buf[off+4], 0x20, 8);
2575     + memcpy(&buf[off+4], "LIO-ORG", sizeof("LIO-ORG") - 1);
2576     /* Extra Byte for NULL Terminator */
2577     id_len++;
2578     /* Identifier Length */
2579     diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
2580     index fc3093d21b96..3f7aad45d215 100644
2581     --- a/drivers/target/target_core_transport.c
2582     +++ b/drivers/target/target_core_transport.c
2583     @@ -224,19 +224,28 @@ void transport_subsystem_check_init(void)
2584     sub_api_initialized = 1;
2585     }
2586    
2587     +static void target_release_sess_cmd_refcnt(struct percpu_ref *ref)
2588     +{
2589     + struct se_session *sess = container_of(ref, typeof(*sess), cmd_count);
2590     +
2591     + wake_up(&sess->cmd_list_wq);
2592     +}
2593     +
2594     /**
2595     * transport_init_session - initialize a session object
2596     * @se_sess: Session object pointer.
2597     *
2598     * The caller must have zero-initialized @se_sess before calling this function.
2599     */
2600     -void transport_init_session(struct se_session *se_sess)
2601     +int transport_init_session(struct se_session *se_sess)
2602     {
2603     INIT_LIST_HEAD(&se_sess->sess_list);
2604     INIT_LIST_HEAD(&se_sess->sess_acl_list);
2605     INIT_LIST_HEAD(&se_sess->sess_cmd_list);
2606     spin_lock_init(&se_sess->sess_cmd_lock);
2607     init_waitqueue_head(&se_sess->cmd_list_wq);
2608     + return percpu_ref_init(&se_sess->cmd_count,
2609     + target_release_sess_cmd_refcnt, 0, GFP_KERNEL);
2610     }
2611     EXPORT_SYMBOL(transport_init_session);
2612    
2613     @@ -247,6 +256,7 @@ EXPORT_SYMBOL(transport_init_session);
2614     struct se_session *transport_alloc_session(enum target_prot_op sup_prot_ops)
2615     {
2616     struct se_session *se_sess;
2617     + int ret;
2618    
2619     se_sess = kmem_cache_zalloc(se_sess_cache, GFP_KERNEL);
2620     if (!se_sess) {
2621     @@ -254,7 +264,11 @@ struct se_session *transport_alloc_session(enum target_prot_op sup_prot_ops)
2622     " se_sess_cache\n");
2623     return ERR_PTR(-ENOMEM);
2624     }
2625     - transport_init_session(se_sess);
2626     + ret = transport_init_session(se_sess);
2627     + if (ret < 0) {
2628     + kfree(se_sess);
2629     + return ERR_PTR(ret);
2630     + }
2631     se_sess->sup_prot_ops = sup_prot_ops;
2632    
2633     return se_sess;
2634     @@ -581,6 +595,7 @@ void transport_free_session(struct se_session *se_sess)
2635     sbitmap_queue_free(&se_sess->sess_tag_pool);
2636     kvfree(se_sess->sess_cmd_map);
2637     }
2638     + percpu_ref_exit(&se_sess->cmd_count);
2639     kmem_cache_free(se_sess_cache, se_sess);
2640     }
2641     EXPORT_SYMBOL(transport_free_session);
2642     @@ -2724,6 +2739,7 @@ int target_get_sess_cmd(struct se_cmd *se_cmd, bool ack_kref)
2643     }
2644     se_cmd->transport_state |= CMD_T_PRE_EXECUTE;
2645     list_add_tail(&se_cmd->se_cmd_list, &se_sess->sess_cmd_list);
2646     + percpu_ref_get(&se_sess->cmd_count);
2647     out:
2648     spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
2649    
2650     @@ -2754,8 +2770,6 @@ static void target_release_cmd_kref(struct kref *kref)
2651     if (se_sess) {
2652     spin_lock_irqsave(&se_sess->sess_cmd_lock, flags);
2653     list_del_init(&se_cmd->se_cmd_list);
2654     - if (se_sess->sess_tearing_down && list_empty(&se_sess->sess_cmd_list))
2655     - wake_up(&se_sess->cmd_list_wq);
2656     spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
2657     }
2658    
2659     @@ -2763,6 +2777,8 @@ static void target_release_cmd_kref(struct kref *kref)
2660     se_cmd->se_tfo->release_cmd(se_cmd);
2661     if (compl)
2662     complete(compl);
2663     +
2664     + percpu_ref_put(&se_sess->cmd_count);
2665     }
2666    
2667     /**
2668     @@ -2891,6 +2907,8 @@ void target_sess_cmd_list_set_waiting(struct se_session *se_sess)
2669     spin_lock_irqsave(&se_sess->sess_cmd_lock, flags);
2670     se_sess->sess_tearing_down = 1;
2671     spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
2672     +
2673     + percpu_ref_kill(&se_sess->cmd_count);
2674     }
2675     EXPORT_SYMBOL(target_sess_cmd_list_set_waiting);
2676    
2677     @@ -2905,17 +2923,14 @@ void target_wait_for_sess_cmds(struct se_session *se_sess)
2678    
2679     WARN_ON_ONCE(!se_sess->sess_tearing_down);
2680    
2681     - spin_lock_irq(&se_sess->sess_cmd_lock);
2682     do {
2683     - ret = wait_event_lock_irq_timeout(
2684     - se_sess->cmd_list_wq,
2685     - list_empty(&se_sess->sess_cmd_list),
2686     - se_sess->sess_cmd_lock, 180 * HZ);
2687     + ret = wait_event_timeout(se_sess->cmd_list_wq,
2688     + percpu_ref_is_zero(&se_sess->cmd_count),
2689     + 180 * HZ);
2690     list_for_each_entry(cmd, &se_sess->sess_cmd_list, se_cmd_list)
2691     target_show_cmd("session shutdown: still waiting for ",
2692     cmd);
2693     } while (ret <= 0);
2694     - spin_unlock_irq(&se_sess->sess_cmd_lock);
2695     }
2696     EXPORT_SYMBOL(target_wait_for_sess_cmds);
2697    
2698     diff --git a/drivers/target/target_core_xcopy.c b/drivers/target/target_core_xcopy.c
2699     index 2718a933c0c6..7cdb5d7f6538 100644
2700     --- a/drivers/target/target_core_xcopy.c
2701     +++ b/drivers/target/target_core_xcopy.c
2702     @@ -480,6 +480,8 @@ static const struct target_core_fabric_ops xcopy_pt_tfo = {
2703    
2704     int target_xcopy_setup_pt(void)
2705     {
2706     + int ret;
2707     +
2708     xcopy_wq = alloc_workqueue("xcopy_wq", WQ_MEM_RECLAIM, 0);
2709     if (!xcopy_wq) {
2710     pr_err("Unable to allocate xcopy_wq\n");
2711     @@ -497,7 +499,9 @@ int target_xcopy_setup_pt(void)
2712     INIT_LIST_HEAD(&xcopy_pt_nacl.acl_list);
2713     INIT_LIST_HEAD(&xcopy_pt_nacl.acl_sess_list);
2714     memset(&xcopy_pt_sess, 0, sizeof(struct se_session));
2715     - transport_init_session(&xcopy_pt_sess);
2716     + ret = transport_init_session(&xcopy_pt_sess);
2717     + if (ret < 0)
2718     + return ret;
2719    
2720     xcopy_pt_nacl.se_tpg = &xcopy_pt_tpg;
2721     xcopy_pt_nacl.nacl_sess = &xcopy_pt_sess;
2722     diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
2723     index ebd33c0232e6..89ade213a1a9 100644
2724     --- a/drivers/tty/serial/amba-pl011.c
2725     +++ b/drivers/tty/serial/amba-pl011.c
2726     @@ -2780,6 +2780,7 @@ static struct platform_driver arm_sbsa_uart_platform_driver = {
2727     .name = "sbsa-uart",
2728     .of_match_table = of_match_ptr(sbsa_uart_of_match),
2729     .acpi_match_table = ACPI_PTR(sbsa_uart_acpi_match),
2730     + .suppress_bind_attrs = IS_BUILTIN(CONFIG_SERIAL_AMBA_PL011),
2731     },
2732     };
2733    
2734     @@ -2808,6 +2809,7 @@ static struct amba_driver pl011_driver = {
2735     .drv = {
2736     .name = "uart-pl011",
2737     .pm = &pl011_dev_pm_ops,
2738     + .suppress_bind_attrs = IS_BUILTIN(CONFIG_SERIAL_AMBA_PL011),
2739     },
2740     .id_table = pl011_ids,
2741     .probe = pl011_probe,
2742     diff --git a/drivers/tty/serial/pic32_uart.c b/drivers/tty/serial/pic32_uart.c
2743     index fd80d999308d..0bdf1687983f 100644
2744     --- a/drivers/tty/serial/pic32_uart.c
2745     +++ b/drivers/tty/serial/pic32_uart.c
2746     @@ -919,6 +919,7 @@ static struct platform_driver pic32_uart_platform_driver = {
2747     .driver = {
2748     .name = PIC32_DEV_NAME,
2749     .of_match_table = of_match_ptr(pic32_serial_dt_ids),
2750     + .suppress_bind_attrs = IS_BUILTIN(CONFIG_SERIAL_PIC32),
2751     },
2752     };
2753    
2754     diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
2755     index 80bb56facfb6..ad126f51d549 100644
2756     --- a/drivers/tty/serial/serial_core.c
2757     +++ b/drivers/tty/serial/serial_core.c
2758     @@ -205,10 +205,15 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state,
2759     if (!state->xmit.buf) {
2760     state->xmit.buf = (unsigned char *) page;
2761     uart_circ_clear(&state->xmit);
2762     + uart_port_unlock(uport, flags);
2763     } else {
2764     + uart_port_unlock(uport, flags);
2765     + /*
2766     + * Do not free() the page under the port lock, see
2767     + * uart_shutdown().
2768     + */
2769     free_page(page);
2770     }
2771     - uart_port_unlock(uport, flags);
2772    
2773     retval = uport->ops->startup(uport);
2774     if (retval == 0) {
2775     @@ -268,6 +273,7 @@ static void uart_shutdown(struct tty_struct *tty, struct uart_state *state)
2776     struct uart_port *uport = uart_port_check(state);
2777     struct tty_port *port = &state->port;
2778     unsigned long flags = 0;
2779     + char *xmit_buf = NULL;
2780    
2781     /*
2782     * Set the TTY IO error marker
2783     @@ -298,14 +304,18 @@ static void uart_shutdown(struct tty_struct *tty, struct uart_state *state)
2784     tty_port_set_suspended(port, 0);
2785    
2786     /*
2787     - * Free the transmit buffer page.
2788     + * Do not free() the transmit buffer page under the port lock since
2789     + * this can create various circular locking scenarios. For instance,
2790     + * console driver may need to allocate/free a debug object, which
2791     + * can endup in printk() recursion.
2792     */
2793     uart_port_lock(state, flags);
2794     - if (state->xmit.buf) {
2795     - free_page((unsigned long)state->xmit.buf);
2796     - state->xmit.buf = NULL;
2797     - }
2798     + xmit_buf = state->xmit.buf;
2799     + state->xmit.buf = NULL;
2800     uart_port_unlock(uport, flags);
2801     +
2802     + if (xmit_buf)
2803     + free_page((unsigned long)xmit_buf);
2804     }
2805    
2806     /**
2807     diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
2808     index 6ed74735b58c..87d8dd90d605 100644
2809     --- a/drivers/tty/serial/xilinx_uartps.c
2810     +++ b/drivers/tty/serial/xilinx_uartps.c
2811     @@ -1608,6 +1608,7 @@ static struct platform_driver cdns_uart_platform_driver = {
2812     .name = CDNS_UART_NAME,
2813     .of_match_table = cdns_uart_of_match,
2814     .pm = &cdns_uart_dev_pm_ops,
2815     + .suppress_bind_attrs = IS_BUILTIN(CONFIG_SERIAL_XILINX_PS_UART),
2816     },
2817     };
2818    
2819     diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c
2820     index 67d8a501d994..fea02c7ad4f4 100644
2821     --- a/drivers/usb/gadget/udc/renesas_usb3.c
2822     +++ b/drivers/usb/gadget/udc/renesas_usb3.c
2823     @@ -358,6 +358,7 @@ struct renesas_usb3 {
2824     bool extcon_host; /* check id and set EXTCON_USB_HOST */
2825     bool extcon_usb; /* check vbus and set EXTCON_USB */
2826     bool forced_b_device;
2827     + bool start_to_connect;
2828     };
2829    
2830     #define gadget_to_renesas_usb3(_gadget) \
2831     @@ -476,7 +477,8 @@ static void usb3_init_axi_bridge(struct renesas_usb3 *usb3)
2832     static void usb3_init_epc_registers(struct renesas_usb3 *usb3)
2833     {
2834     usb3_write(usb3, ~0, USB3_USB_INT_STA_1);
2835     - usb3_enable_irq_1(usb3, USB_INT_1_VBUS_CNG);
2836     + if (!usb3->workaround_for_vbus)
2837     + usb3_enable_irq_1(usb3, USB_INT_1_VBUS_CNG);
2838     }
2839    
2840     static bool usb3_wakeup_usb2_phy(struct renesas_usb3 *usb3)
2841     @@ -700,8 +702,7 @@ static void usb3_mode_config(struct renesas_usb3 *usb3, bool host, bool a_dev)
2842     usb3_set_mode_by_role_sw(usb3, host);
2843     usb3_vbus_out(usb3, a_dev);
2844     /* for A-Peripheral or forced B-device mode */
2845     - if ((!host && a_dev) ||
2846     - (usb3->workaround_for_vbus && usb3->forced_b_device))
2847     + if ((!host && a_dev) || usb3->start_to_connect)
2848     usb3_connect(usb3);
2849     spin_unlock_irqrestore(&usb3->lock, flags);
2850     }
2851     @@ -2432,7 +2433,11 @@ static ssize_t renesas_usb3_b_device_write(struct file *file,
2852     if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
2853     return -EFAULT;
2854    
2855     - if (!strncmp(buf, "1", 1))
2856     + usb3->start_to_connect = false;
2857     + if (usb3->workaround_for_vbus && usb3->forced_b_device &&
2858     + !strncmp(buf, "2", 1))
2859     + usb3->start_to_connect = true;
2860     + else if (!strncmp(buf, "1", 1))
2861     usb3->forced_b_device = true;
2862     else
2863     usb3->forced_b_device = false;
2864     @@ -2440,7 +2445,7 @@ static ssize_t renesas_usb3_b_device_write(struct file *file,
2865     if (usb3->workaround_for_vbus)
2866     usb3_disconnect(usb3);
2867    
2868     - /* Let this driver call usb3_connect() anyway */
2869     + /* Let this driver call usb3_connect() if needed */
2870     usb3_check_id(usb3);
2871    
2872     return count;
2873     diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
2874     index c74cc9c309b1..3457c1fdebd1 100644
2875     --- a/drivers/usb/typec/tcpm.c
2876     +++ b/drivers/usb/typec/tcpm.c
2877     @@ -317,6 +317,9 @@ struct tcpm_port {
2878     /* Deadline in jiffies to exit src_try_wait state */
2879     unsigned long max_wait;
2880    
2881     + /* port belongs to a self powered device */
2882     + bool self_powered;
2883     +
2884     #ifdef CONFIG_DEBUG_FS
2885     struct dentry *dentry;
2886     struct mutex logbuffer_lock; /* log buffer access lock */
2887     @@ -3257,7 +3260,8 @@ static void run_state_machine(struct tcpm_port *port)
2888     case SRC_HARD_RESET_VBUS_OFF:
2889     tcpm_set_vconn(port, true);
2890     tcpm_set_vbus(port, false);
2891     - tcpm_set_roles(port, false, TYPEC_SOURCE, TYPEC_HOST);
2892     + tcpm_set_roles(port, port->self_powered, TYPEC_SOURCE,
2893     + TYPEC_HOST);
2894     tcpm_set_state(port, SRC_HARD_RESET_VBUS_ON, PD_T_SRC_RECOVER);
2895     break;
2896     case SRC_HARD_RESET_VBUS_ON:
2897     @@ -3270,7 +3274,8 @@ static void run_state_machine(struct tcpm_port *port)
2898     memset(&port->pps_data, 0, sizeof(port->pps_data));
2899     tcpm_set_vconn(port, false);
2900     tcpm_set_charge(port, false);
2901     - tcpm_set_roles(port, false, TYPEC_SINK, TYPEC_DEVICE);
2902     + tcpm_set_roles(port, port->self_powered, TYPEC_SINK,
2903     + TYPEC_DEVICE);
2904     /*
2905     * VBUS may or may not toggle, depending on the adapter.
2906     * If it doesn't toggle, transition to SNK_HARD_RESET_SINK_ON
2907     @@ -4415,6 +4420,8 @@ sink:
2908     return -EINVAL;
2909     port->operating_snk_mw = mw / 1000;
2910    
2911     + port->self_powered = fwnode_property_read_bool(fwnode, "self-powered");
2912     +
2913     return 0;
2914     }
2915    
2916     @@ -4723,6 +4730,7 @@ static int tcpm_copy_caps(struct tcpm_port *port,
2917     port->typec_caps.prefer_role = tcfg->default_role;
2918     port->typec_caps.type = tcfg->type;
2919     port->typec_caps.data = tcfg->data;
2920     + port->self_powered = port->tcpc->config->self_powered;
2921    
2922     return 0;
2923     }
2924     diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c
2925     index b2b283e48439..8fed470bb7e1 100644
2926     --- a/fs/btrfs/dev-replace.c
2927     +++ b/fs/btrfs/dev-replace.c
2928     @@ -800,39 +800,58 @@ int btrfs_dev_replace_cancel(struct btrfs_fs_info *fs_info)
2929     case BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED:
2930     result = BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED;
2931     btrfs_dev_replace_write_unlock(dev_replace);
2932     - goto leave;
2933     + break;
2934     case BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED:
2935     + result = BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR;
2936     + tgt_device = dev_replace->tgtdev;
2937     + src_device = dev_replace->srcdev;
2938     + btrfs_dev_replace_write_unlock(dev_replace);
2939     + btrfs_scrub_cancel(fs_info);
2940     + /* btrfs_dev_replace_finishing() will handle the cleanup part */
2941     + btrfs_info_in_rcu(fs_info,
2942     + "dev_replace from %s (devid %llu) to %s canceled",
2943     + btrfs_dev_name(src_device), src_device->devid,
2944     + btrfs_dev_name(tgt_device));
2945     + break;
2946     case BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED:
2947     + /*
2948     + * Scrub doing the replace isn't running so we need to do the
2949     + * cleanup step of btrfs_dev_replace_finishing() here
2950     + */
2951     result = BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR;
2952     tgt_device = dev_replace->tgtdev;
2953     src_device = dev_replace->srcdev;
2954     dev_replace->tgtdev = NULL;
2955     dev_replace->srcdev = NULL;
2956     - break;
2957     - }
2958     - dev_replace->replace_state = BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED;
2959     - dev_replace->time_stopped = ktime_get_real_seconds();
2960     - dev_replace->item_needs_writeback = 1;
2961     - btrfs_dev_replace_write_unlock(dev_replace);
2962     - btrfs_scrub_cancel(fs_info);
2963     + dev_replace->replace_state =
2964     + BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED;
2965     + dev_replace->time_stopped = ktime_get_real_seconds();
2966     + dev_replace->item_needs_writeback = 1;
2967    
2968     - trans = btrfs_start_transaction(root, 0);
2969     - if (IS_ERR(trans)) {
2970     - mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
2971     - return PTR_ERR(trans);
2972     - }
2973     - ret = btrfs_commit_transaction(trans);
2974     - WARN_ON(ret);
2975     + btrfs_dev_replace_write_unlock(dev_replace);
2976    
2977     - btrfs_info_in_rcu(fs_info,
2978     - "dev_replace from %s (devid %llu) to %s canceled",
2979     - btrfs_dev_name(src_device), src_device->devid,
2980     - btrfs_dev_name(tgt_device));
2981     + btrfs_scrub_cancel(fs_info);
2982     +
2983     + trans = btrfs_start_transaction(root, 0);
2984     + if (IS_ERR(trans)) {
2985     + mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
2986     + return PTR_ERR(trans);
2987     + }
2988     + ret = btrfs_commit_transaction(trans);
2989     + WARN_ON(ret);
2990    
2991     - if (tgt_device)
2992     - btrfs_destroy_dev_replace_tgtdev(tgt_device);
2993     + btrfs_info_in_rcu(fs_info,
2994     + "suspended dev_replace from %s (devid %llu) to %s canceled",
2995     + btrfs_dev_name(src_device), src_device->devid,
2996     + btrfs_dev_name(tgt_device));
2997     +
2998     + if (tgt_device)
2999     + btrfs_destroy_dev_replace_tgtdev(tgt_device);
3000     + break;
3001     + default:
3002     + result = -EINVAL;
3003     + }
3004    
3005     -leave:
3006     mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
3007     return result;
3008     }
3009     diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
3010     index 4f6dc56b4f4d..83b3a626c796 100644
3011     --- a/fs/btrfs/inode.c
3012     +++ b/fs/btrfs/inode.c
3013     @@ -6440,14 +6440,19 @@ fail_dir_item:
3014     err = btrfs_del_root_ref(trans, key.objectid,
3015     root->root_key.objectid, parent_ino,
3016     &local_index, name, name_len);
3017     -
3018     + if (err)
3019     + btrfs_abort_transaction(trans, err);
3020     } else if (add_backref) {
3021     u64 local_index;
3022     int err;
3023    
3024     err = btrfs_del_inode_ref(trans, root, name, name_len,
3025     ino, parent_ino, &local_index);
3026     + if (err)
3027     + btrfs_abort_transaction(trans, err);
3028     }
3029     +
3030     + /* Return the original error code */
3031     return ret;
3032     }
3033    
3034     diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
3035     index 223334f08530..0ee1cd4b56fb 100644
3036     --- a/fs/btrfs/volumes.c
3037     +++ b/fs/btrfs/volumes.c
3038     @@ -4768,19 +4768,17 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
3039     /*
3040     * Use the number of data stripes to figure out how big this chunk
3041     * is really going to be in terms of logical address space,
3042     - * and compare that answer with the max chunk size
3043     + * and compare that answer with the max chunk size. If it's higher,
3044     + * we try to reduce stripe_size.
3045     */
3046     if (stripe_size * data_stripes > max_chunk_size) {
3047     - stripe_size = div_u64(max_chunk_size, data_stripes);
3048     -
3049     - /* bump the answer up to a 16MB boundary */
3050     - stripe_size = round_up(stripe_size, SZ_16M);
3051     -
3052     /*
3053     - * But don't go higher than the limits we found while searching
3054     - * for free extents
3055     + * Reduce stripe_size, round it up to a 16MB boundary again and
3056     + * then use it, unless it ends up being even bigger than the
3057     + * previous value we had already.
3058     */
3059     - stripe_size = min(devices_info[ndevs - 1].max_avail,
3060     + stripe_size = min(round_up(div_u64(max_chunk_size,
3061     + data_stripes), SZ_16M),
3062     stripe_size);
3063     }
3064    
3065     @@ -7474,6 +7472,8 @@ int btrfs_verify_dev_extents(struct btrfs_fs_info *fs_info)
3066     struct btrfs_path *path;
3067     struct btrfs_root *root = fs_info->dev_root;
3068     struct btrfs_key key;
3069     + u64 prev_devid = 0;
3070     + u64 prev_dev_ext_end = 0;
3071     int ret = 0;
3072    
3073     key.objectid = 1;
3074     @@ -7518,10 +7518,22 @@ int btrfs_verify_dev_extents(struct btrfs_fs_info *fs_info)
3075     chunk_offset = btrfs_dev_extent_chunk_offset(leaf, dext);
3076     physical_len = btrfs_dev_extent_length(leaf, dext);
3077    
3078     + /* Check if this dev extent overlaps with the previous one */
3079     + if (devid == prev_devid && physical_offset < prev_dev_ext_end) {
3080     + btrfs_err(fs_info,
3081     +"dev extent devid %llu physical offset %llu overlap with previous dev extent end %llu",
3082     + devid, physical_offset, prev_dev_ext_end);
3083     + ret = -EUCLEAN;
3084     + goto out;
3085     + }
3086     +
3087     ret = verify_one_dev_extent(fs_info, chunk_offset, devid,
3088     physical_offset, physical_len);
3089     if (ret < 0)
3090     goto out;
3091     + prev_devid = devid;
3092     + prev_dev_ext_end = physical_offset + physical_len;
3093     +
3094     ret = btrfs_next_item(root, path);
3095     if (ret < 0)
3096     goto out;
3097     diff --git a/fs/iomap.c b/fs/iomap.c
3098     index ec15cf2ec696..e57fb1e534c5 100644
3099     --- a/fs/iomap.c
3100     +++ b/fs/iomap.c
3101     @@ -488,16 +488,29 @@ done:
3102     }
3103     EXPORT_SYMBOL_GPL(iomap_readpages);
3104    
3105     +/*
3106     + * iomap_is_partially_uptodate checks whether blocks within a page are
3107     + * uptodate or not.
3108     + *
3109     + * Returns true if all blocks which correspond to a file portion
3110     + * we want to read within the page are uptodate.
3111     + */
3112     int
3113     iomap_is_partially_uptodate(struct page *page, unsigned long from,
3114     unsigned long count)
3115     {
3116     struct iomap_page *iop = to_iomap_page(page);
3117     struct inode *inode = page->mapping->host;
3118     - unsigned first = from >> inode->i_blkbits;
3119     - unsigned last = (from + count - 1) >> inode->i_blkbits;
3120     + unsigned len, first, last;
3121     unsigned i;
3122    
3123     + /* Limit range to one page */
3124     + len = min_t(unsigned, PAGE_SIZE - from, count);
3125     +
3126     + /* First and last blocks in range within page */
3127     + first = from >> inode->i_blkbits;
3128     + last = (from + len - 1) >> inode->i_blkbits;
3129     +
3130     if (iop) {
3131     for (i = first; i <= last; i++)
3132     if (!test_bit(i, iop->uptodate))
3133     diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c
3134     index 902a7dd10e5c..bb6ae387469f 100644
3135     --- a/fs/jffs2/super.c
3136     +++ b/fs/jffs2/super.c
3137     @@ -101,7 +101,8 @@ static int jffs2_sync_fs(struct super_block *sb, int wait)
3138     struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
3139    
3140     #ifdef CONFIG_JFFS2_FS_WRITEBUFFER
3141     - cancel_delayed_work_sync(&c->wbuf_dwork);
3142     + if (jffs2_is_writebuffered(c))
3143     + cancel_delayed_work_sync(&c->wbuf_dwork);
3144     #endif
3145    
3146     mutex_lock(&c->alloc_sem);
3147     diff --git a/fs/ocfs2/localalloc.c b/fs/ocfs2/localalloc.c
3148     index 7642b6712c39..30208233f65b 100644
3149     --- a/fs/ocfs2/localalloc.c
3150     +++ b/fs/ocfs2/localalloc.c
3151     @@ -345,13 +345,18 @@ int ocfs2_load_local_alloc(struct ocfs2_super *osb)
3152     if (num_used
3153     || alloc->id1.bitmap1.i_used
3154     || alloc->id1.bitmap1.i_total
3155     - || la->la_bm_off)
3156     - mlog(ML_ERROR, "Local alloc hasn't been recovered!\n"
3157     + || la->la_bm_off) {
3158     + mlog(ML_ERROR, "inconsistent detected, clean journal with"
3159     + " unrecovered local alloc, please run fsck.ocfs2!\n"
3160     "found = %u, set = %u, taken = %u, off = %u\n",
3161     num_used, le32_to_cpu(alloc->id1.bitmap1.i_used),
3162     le32_to_cpu(alloc->id1.bitmap1.i_total),
3163     OCFS2_LOCAL_ALLOC(alloc)->la_bm_off);
3164    
3165     + status = -EINVAL;
3166     + goto bail;
3167     + }
3168     +
3169     osb->local_alloc_bh = alloc_bh;
3170     osb->local_alloc_state = OCFS2_LA_ENABLED;
3171    
3172     diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
3173     index 0792595ebcfb..3c777ec80d47 100644
3174     --- a/fs/pstore/ram_core.c
3175     +++ b/fs/pstore/ram_core.c
3176     @@ -496,6 +496,11 @@ static int persistent_ram_post_init(struct persistent_ram_zone *prz, u32 sig,
3177     sig ^= PERSISTENT_RAM_SIG;
3178    
3179     if (prz->buffer->sig == sig) {
3180     + if (buffer_size(prz) == 0) {
3181     + pr_debug("found existing empty buffer\n");
3182     + return 0;
3183     + }
3184     +
3185     if (buffer_size(prz) > prz->buffer_size ||
3186     buffer_start(prz) > buffer_size(prz))
3187     pr_info("found existing invalid buffer, size %zu, start %zu\n",
3188     diff --git a/fs/quota/quota.c b/fs/quota/quota.c
3189     index f0cbf58ad4da..fd5dd806f1b9 100644
3190     --- a/fs/quota/quota.c
3191     +++ b/fs/quota/quota.c
3192     @@ -791,7 +791,8 @@ static int quotactl_cmd_write(int cmd)
3193     /* Return true if quotactl command is manipulating quota on/off state */
3194     static bool quotactl_cmd_onoff(int cmd)
3195     {
3196     - return (cmd == Q_QUOTAON) || (cmd == Q_QUOTAOFF);
3197     + return (cmd == Q_QUOTAON) || (cmd == Q_QUOTAOFF) ||
3198     + (cmd == Q_XQUOTAON) || (cmd == Q_XQUOTAOFF);
3199     }
3200    
3201     /*
3202     diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c
3203     index 7a85e609fc27..d8b8323e80f4 100644
3204     --- a/fs/userfaultfd.c
3205     +++ b/fs/userfaultfd.c
3206     @@ -736,10 +736,18 @@ void mremap_userfaultfd_prep(struct vm_area_struct *vma,
3207     struct userfaultfd_ctx *ctx;
3208    
3209     ctx = vma->vm_userfaultfd_ctx.ctx;
3210     - if (ctx && (ctx->features & UFFD_FEATURE_EVENT_REMAP)) {
3211     +
3212     + if (!ctx)
3213     + return;
3214     +
3215     + if (ctx->features & UFFD_FEATURE_EVENT_REMAP) {
3216     vm_ctx->ctx = ctx;
3217     userfaultfd_ctx_get(ctx);
3218     WRITE_ONCE(ctx->mmap_changing, true);
3219     + } else {
3220     + /* Drop uffd context if remap feature not enabled */
3221     + vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;
3222     + vma->vm_flags &= ~(VM_UFFD_WP | VM_UFFD_MISSING);
3223     }
3224     }
3225    
3226     diff --git a/include/linux/backing-dev-defs.h b/include/linux/backing-dev-defs.h
3227     index 9a6bc0951cfa..c31157135598 100644
3228     --- a/include/linux/backing-dev-defs.h
3229     +++ b/include/linux/backing-dev-defs.h
3230     @@ -258,6 +258,14 @@ static inline void wb_get(struct bdi_writeback *wb)
3231     */
3232     static inline void wb_put(struct bdi_writeback *wb)
3233     {
3234     + if (WARN_ON_ONCE(!wb->bdi)) {
3235     + /*
3236     + * A driver bug might cause a file to be removed before bdi was
3237     + * initialized.
3238     + */
3239     + return;
3240     + }
3241     +
3242     if (wb != &wb->bdi->wb)
3243     percpu_ref_put(&wb->refcnt);
3244     }
3245     diff --git a/include/linux/filter.h b/include/linux/filter.h
3246     index 6791a0ac0139..ec90d5255cf7 100644
3247     --- a/include/linux/filter.h
3248     +++ b/include/linux/filter.h
3249     @@ -665,24 +665,10 @@ static inline u32 bpf_ctx_off_adjust_machine(u32 size)
3250     return size;
3251     }
3252    
3253     -static inline bool bpf_ctx_narrow_align_ok(u32 off, u32 size_access,
3254     - u32 size_default)
3255     -{
3256     - size_default = bpf_ctx_off_adjust_machine(size_default);
3257     - size_access = bpf_ctx_off_adjust_machine(size_access);
3258     -
3259     -#ifdef __LITTLE_ENDIAN
3260     - return (off & (size_default - 1)) == 0;
3261     -#else
3262     - return (off & (size_default - 1)) + size_access == size_default;
3263     -#endif
3264     -}
3265     -
3266     static inline bool
3267     bpf_ctx_narrow_access_ok(u32 off, u32 size, u32 size_default)
3268     {
3269     - return bpf_ctx_narrow_align_ok(off, size, size_default) &&
3270     - size <= size_default && (size & (size - 1)) == 0;
3271     + return size <= size_default && (size & (size - 1)) == 0;
3272     }
3273    
3274     #define bpf_classic_proglen(fprog) (fprog->len * sizeof(fprog->filter[0]))
3275     diff --git a/include/linux/swap.h b/include/linux/swap.h
3276     index 8e2c11e692ba..77221c16733a 100644
3277     --- a/include/linux/swap.h
3278     +++ b/include/linux/swap.h
3279     @@ -232,7 +232,6 @@ struct swap_info_struct {
3280     unsigned long flags; /* SWP_USED etc: see above */
3281     signed short prio; /* swap priority of this type */
3282     struct plist_node list; /* entry in swap_active_head */
3283     - struct plist_node avail_lists[MAX_NUMNODES];/* entry in swap_avail_heads */
3284     signed char type; /* strange name for an index */
3285     unsigned int max; /* extent of the swap_map */
3286     unsigned char *swap_map; /* vmalloc'ed array of usage counts */
3287     @@ -273,6 +272,16 @@ struct swap_info_struct {
3288     */
3289     struct work_struct discard_work; /* discard worker */
3290     struct swap_cluster_list discard_clusters; /* discard clusters list */
3291     + struct plist_node avail_lists[0]; /*
3292     + * entries in swap_avail_heads, one
3293     + * entry per node.
3294     + * Must be last as the number of the
3295     + * array is nr_node_ids, which is not
3296     + * a fixed value so have to allocate
3297     + * dynamically.
3298     + * And it has to be an array so that
3299     + * plist_for_each_* can work.
3300     + */
3301     };
3302    
3303     #ifdef CONFIG_64BIT
3304     diff --git a/include/linux/usb/tcpm.h b/include/linux/usb/tcpm.h
3305     index 7e7fbfb84e8e..50c74a77db55 100644
3306     --- a/include/linux/usb/tcpm.h
3307     +++ b/include/linux/usb/tcpm.h
3308     @@ -89,6 +89,7 @@ struct tcpc_config {
3309     enum typec_port_data data;
3310     enum typec_role default_role;
3311     bool try_role_hw; /* try.{src,snk} implemented in hardware */
3312     + bool self_powered; /* port belongs to a self powered device */
3313    
3314     const struct typec_altmode_desc *alt_modes;
3315     };
3316     diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
3317     index 7a4ee7852ca4..2cfd3b4573b0 100644
3318     --- a/include/target/target_core_base.h
3319     +++ b/include/target/target_core_base.h
3320     @@ -602,6 +602,7 @@ struct se_session {
3321     struct se_node_acl *se_node_acl;
3322     struct se_portal_group *se_tpg;
3323     void *fabric_sess_ptr;
3324     + struct percpu_ref cmd_count;
3325     struct list_head sess_list;
3326     struct list_head sess_acl_list;
3327     struct list_head sess_cmd_list;
3328     diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h
3329     index f4147b398431..eb9d0923c55c 100644
3330     --- a/include/target/target_core_fabric.h
3331     +++ b/include/target/target_core_fabric.h
3332     @@ -116,7 +116,7 @@ struct se_session *target_setup_session(struct se_portal_group *,
3333     struct se_session *, void *));
3334     void target_remove_session(struct se_session *);
3335    
3336     -void transport_init_session(struct se_session *);
3337     +int transport_init_session(struct se_session *se_sess);
3338     struct se_session *transport_alloc_session(enum target_prot_op);
3339     int transport_alloc_session_tags(struct se_session *, unsigned int,
3340     unsigned int);
3341     diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
3342     index 2954e4b3abd5..341806668f03 100644
3343     --- a/kernel/bpf/verifier.c
3344     +++ b/kernel/bpf/verifier.c
3345     @@ -3285,12 +3285,15 @@ static int check_alu_op(struct bpf_verifier_env *env, struct bpf_insn *insn)
3346     return err;
3347    
3348     if (BPF_SRC(insn->code) == BPF_X) {
3349     + struct bpf_reg_state *src_reg = regs + insn->src_reg;
3350     + struct bpf_reg_state *dst_reg = regs + insn->dst_reg;
3351     +
3352     if (BPF_CLASS(insn->code) == BPF_ALU64) {
3353     /* case: R1 = R2
3354     * copy register state to dest reg
3355     */
3356     - regs[insn->dst_reg] = regs[insn->src_reg];
3357     - regs[insn->dst_reg].live |= REG_LIVE_WRITTEN;
3358     + *dst_reg = *src_reg;
3359     + dst_reg->live |= REG_LIVE_WRITTEN;
3360     } else {
3361     /* R1 = (u32) R2 */
3362     if (is_pointer_value(env, insn->src_reg)) {
3363     @@ -3298,9 +3301,14 @@ static int check_alu_op(struct bpf_verifier_env *env, struct bpf_insn *insn)
3364     "R%d partial copy of pointer\n",
3365     insn->src_reg);
3366     return -EACCES;
3367     + } else if (src_reg->type == SCALAR_VALUE) {
3368     + *dst_reg = *src_reg;
3369     + dst_reg->live |= REG_LIVE_WRITTEN;
3370     + } else {
3371     + mark_reg_unknown(env, regs,
3372     + insn->dst_reg);
3373     }
3374     - mark_reg_unknown(env, regs, insn->dst_reg);
3375     - coerce_reg_to_size(&regs[insn->dst_reg], 4);
3376     + coerce_reg_to_size(dst_reg, 4);
3377     }
3378     } else {
3379     /* case: R = imm
3380     @@ -5341,10 +5349,10 @@ static int convert_ctx_accesses(struct bpf_verifier_env *env)
3381     int i, cnt, size, ctx_field_size, delta = 0;
3382     const int insn_cnt = env->prog->len;
3383     struct bpf_insn insn_buf[16], *insn;
3384     + u32 target_size, size_default, off;
3385     struct bpf_prog *new_prog;
3386     enum bpf_access_type type;
3387     bool is_narrower_load;
3388     - u32 target_size;
3389    
3390     if (ops->gen_prologue) {
3391     cnt = ops->gen_prologue(insn_buf, env->seen_direct_write,
3392     @@ -5421,9 +5429,9 @@ static int convert_ctx_accesses(struct bpf_verifier_env *env)
3393     * we will apply proper mask to the result.
3394     */
3395     is_narrower_load = size < ctx_field_size;
3396     + size_default = bpf_ctx_off_adjust_machine(ctx_field_size);
3397     + off = insn->off;
3398     if (is_narrower_load) {
3399     - u32 size_default = bpf_ctx_off_adjust_machine(ctx_field_size);
3400     - u32 off = insn->off;
3401     u8 size_code;
3402    
3403     if (type == BPF_WRITE) {
3404     @@ -5451,12 +5459,23 @@ static int convert_ctx_accesses(struct bpf_verifier_env *env)
3405     }
3406    
3407     if (is_narrower_load && size < target_size) {
3408     - if (ctx_field_size <= 4)
3409     + u8 shift = (off & (size_default - 1)) * 8;
3410     +
3411     + if (ctx_field_size <= 4) {
3412     + if (shift)
3413     + insn_buf[cnt++] = BPF_ALU32_IMM(BPF_RSH,
3414     + insn->dst_reg,
3415     + shift);
3416     insn_buf[cnt++] = BPF_ALU32_IMM(BPF_AND, insn->dst_reg,
3417     (1 << size * 8) - 1);
3418     - else
3419     + } else {
3420     + if (shift)
3421     + insn_buf[cnt++] = BPF_ALU64_IMM(BPF_RSH,
3422     + insn->dst_reg,
3423     + shift);
3424     insn_buf[cnt++] = BPF_ALU64_IMM(BPF_AND, insn->dst_reg,
3425     (1 << size * 8) - 1);
3426     + }
3427     }
3428    
3429     new_prog = bpf_patch_insn_data(env, i + delta, insn_buf, cnt);
3430     diff --git a/mm/page-writeback.c b/mm/page-writeback.c
3431     index 84ae9bf5858a..ea4fd3af3b4b 100644
3432     --- a/mm/page-writeback.c
3433     +++ b/mm/page-writeback.c
3434     @@ -2156,6 +2156,7 @@ int write_cache_pages(struct address_space *mapping,
3435     {
3436     int ret = 0;
3437     int done = 0;
3438     + int error;
3439     struct pagevec pvec;
3440     int nr_pages;
3441     pgoff_t uninitialized_var(writeback_index);
3442     @@ -2236,25 +2237,31 @@ continue_unlock:
3443     goto continue_unlock;
3444    
3445     trace_wbc_writepage(wbc, inode_to_bdi(mapping->host));
3446     - ret = (*writepage)(page, wbc, data);
3447     - if (unlikely(ret)) {
3448     - if (ret == AOP_WRITEPAGE_ACTIVATE) {
3449     + error = (*writepage)(page, wbc, data);
3450     + if (unlikely(error)) {
3451     + /*
3452     + * Handle errors according to the type of
3453     + * writeback. There's no need to continue for
3454     + * background writeback. Just push done_index
3455     + * past this page so media errors won't choke
3456     + * writeout for the entire file. For integrity
3457     + * writeback, we must process the entire dirty
3458     + * set regardless of errors because the fs may
3459     + * still have state to clear for each page. In
3460     + * that case we continue processing and return
3461     + * the first error.
3462     + */
3463     + if (error == AOP_WRITEPAGE_ACTIVATE) {
3464     unlock_page(page);
3465     - ret = 0;
3466     - } else {
3467     - /*
3468     - * done_index is set past this page,
3469     - * so media errors will not choke
3470     - * background writeout for the entire
3471     - * file. This has consequences for
3472     - * range_cyclic semantics (ie. it may
3473     - * not be suitable for data integrity
3474     - * writeout).
3475     - */
3476     + error = 0;
3477     + } else if (wbc->sync_mode != WB_SYNC_ALL) {
3478     + ret = error;
3479     done_index = page->index + 1;
3480     done = 1;
3481     break;
3482     }
3483     + if (!ret)
3484     + ret = error;
3485     }
3486    
3487     /*
3488     diff --git a/mm/swapfile.c b/mm/swapfile.c
3489     index 67aaf7ae22ff..340ef3177686 100644
3490     --- a/mm/swapfile.c
3491     +++ b/mm/swapfile.c
3492     @@ -2820,8 +2820,9 @@ static struct swap_info_struct *alloc_swap_info(void)
3493     struct swap_info_struct *p;
3494     unsigned int type;
3495     int i;
3496     + int size = sizeof(*p) + nr_node_ids * sizeof(struct plist_node);
3497    
3498     - p = kvzalloc(sizeof(*p), GFP_KERNEL);
3499     + p = kvzalloc(size, GFP_KERNEL);
3500     if (!p)
3501     return ERR_PTR(-ENOMEM);
3502    
3503     diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
3504     index f12555f23a49..7f800c3480f7 100644
3505     --- a/net/bluetooth/hci_event.c
3506     +++ b/net/bluetooth/hci_event.c
3507     @@ -5668,6 +5668,12 @@ static bool hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode,
3508     return true;
3509     }
3510    
3511     + /* Check if request ended in Command Status - no way to retreive
3512     + * any extra parameters in this case.
3513     + */
3514     + if (hdr->evt == HCI_EV_CMD_STATUS)
3515     + return false;
3516     +
3517     if (hdr->evt != HCI_EV_CMD_COMPLETE) {
3518     bt_dev_err(hdev, "last event is not cmd complete (0x%2.2x)",
3519     hdr->evt);
3520     diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c
3521     index 5372e2042adf..2cb8da465b98 100644
3522     --- a/net/bridge/br_forward.c
3523     +++ b/net/bridge/br_forward.c
3524     @@ -65,6 +65,7 @@ EXPORT_SYMBOL_GPL(br_dev_queue_push_xmit);
3525    
3526     int br_forward_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
3527     {
3528     + skb->tstamp = 0;
3529     return NF_HOOK(NFPROTO_BRIDGE, NF_BR_POST_ROUTING,
3530     net, sk, skb, NULL, skb->dev,
3531     br_dev_queue_push_xmit);
3532     diff --git a/net/core/skbuff.c b/net/core/skbuff.c
3533     index abbbd7fd17fe..589ec5b9ec5f 100644
3534     --- a/net/core/skbuff.c
3535     +++ b/net/core/skbuff.c
3536     @@ -5258,7 +5258,6 @@ struct sk_buff *alloc_skb_with_frags(unsigned long header_len,
3537     unsigned long chunk;
3538     struct sk_buff *skb;
3539     struct page *page;
3540     - gfp_t gfp_head;
3541     int i;
3542    
3543     *errcode = -EMSGSIZE;
3544     @@ -5268,12 +5267,8 @@ struct sk_buff *alloc_skb_with_frags(unsigned long header_len,
3545     if (npages > MAX_SKB_FRAGS)
3546     return NULL;
3547    
3548     - gfp_head = gfp_mask;
3549     - if (gfp_head & __GFP_DIRECT_RECLAIM)
3550     - gfp_head |= __GFP_RETRY_MAYFAIL;
3551     -
3552     *errcode = -ENOBUFS;
3553     - skb = alloc_skb(header_len, gfp_head);
3554     + skb = alloc_skb(header_len, gfp_mask);
3555     if (!skb)
3556     return NULL;
3557    
3558     diff --git a/net/core/sock.c b/net/core/sock.c
3559     index 5a8a3b76832f..c9668dcb5eb9 100644
3560     --- a/net/core/sock.c
3561     +++ b/net/core/sock.c
3562     @@ -698,6 +698,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
3563     break;
3564     case SO_DONTROUTE:
3565     sock_valbool_flag(sk, SOCK_LOCALROUTE, valbool);
3566     + sk_dst_reset(sk);
3567     break;
3568     case SO_BROADCAST:
3569     sock_valbool_flag(sk, SOCK_BROADCAST, valbool);
3570     diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c
3571     index 2c8d313ae216..fb1e7f237f53 100644
3572     --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
3573     +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
3574     @@ -57,17 +57,14 @@ struct clusterip_config {
3575     enum clusterip_hashmode hash_mode; /* which hashing mode */
3576     u_int32_t hash_initval; /* hash initialization */
3577     struct rcu_head rcu;
3578     -
3579     + struct net *net; /* netns for pernet list */
3580     char ifname[IFNAMSIZ]; /* device ifname */
3581     - struct notifier_block notifier; /* refresh c->ifindex in it */
3582     };
3583    
3584     #ifdef CONFIG_PROC_FS
3585     static const struct file_operations clusterip_proc_fops;
3586     #endif
3587    
3588     -static unsigned int clusterip_net_id __read_mostly;
3589     -
3590     struct clusterip_net {
3591     struct list_head configs;
3592     /* lock protects the configs list */
3593     @@ -78,16 +75,30 @@ struct clusterip_net {
3594     #endif
3595     };
3596    
3597     +static unsigned int clusterip_net_id __read_mostly;
3598     +static inline struct clusterip_net *clusterip_pernet(struct net *net)
3599     +{
3600     + return net_generic(net, clusterip_net_id);
3601     +}
3602     +
3603     static inline void
3604     clusterip_config_get(struct clusterip_config *c)
3605     {
3606     refcount_inc(&c->refcount);
3607     }
3608    
3609     -
3610     static void clusterip_config_rcu_free(struct rcu_head *head)
3611     {
3612     - kfree(container_of(head, struct clusterip_config, rcu));
3613     + struct clusterip_config *config;
3614     + struct net_device *dev;
3615     +
3616     + config = container_of(head, struct clusterip_config, rcu);
3617     + dev = dev_get_by_name(config->net, config->ifname);
3618     + if (dev) {
3619     + dev_mc_del(dev, config->clustermac);
3620     + dev_put(dev);
3621     + }
3622     + kfree(config);
3623     }
3624    
3625     static inline void
3626     @@ -101,9 +112,9 @@ clusterip_config_put(struct clusterip_config *c)
3627     * entry(rule) is removed, remove the config from lists, but don't free it
3628     * yet, since proc-files could still be holding references */
3629     static inline void
3630     -clusterip_config_entry_put(struct net *net, struct clusterip_config *c)
3631     +clusterip_config_entry_put(struct clusterip_config *c)
3632     {
3633     - struct clusterip_net *cn = net_generic(net, clusterip_net_id);
3634     + struct clusterip_net *cn = clusterip_pernet(c->net);
3635    
3636     local_bh_disable();
3637     if (refcount_dec_and_lock(&c->entries, &cn->lock)) {
3638     @@ -118,8 +129,6 @@ clusterip_config_entry_put(struct net *net, struct clusterip_config *c)
3639     spin_unlock(&cn->lock);
3640     local_bh_enable();
3641    
3642     - unregister_netdevice_notifier(&c->notifier);
3643     -
3644     return;
3645     }
3646     local_bh_enable();
3647     @@ -129,7 +138,7 @@ static struct clusterip_config *
3648     __clusterip_config_find(struct net *net, __be32 clusterip)
3649     {
3650     struct clusterip_config *c;
3651     - struct clusterip_net *cn = net_generic(net, clusterip_net_id);
3652     + struct clusterip_net *cn = clusterip_pernet(net);
3653    
3654     list_for_each_entry_rcu(c, &cn->configs, list) {
3655     if (c->clusterip == clusterip)
3656     @@ -181,32 +190,37 @@ clusterip_netdev_event(struct notifier_block *this, unsigned long event,
3657     void *ptr)
3658     {
3659     struct net_device *dev = netdev_notifier_info_to_dev(ptr);
3660     + struct net *net = dev_net(dev);
3661     + struct clusterip_net *cn = clusterip_pernet(net);
3662     struct clusterip_config *c;
3663    
3664     - c = container_of(this, struct clusterip_config, notifier);
3665     - switch (event) {
3666     - case NETDEV_REGISTER:
3667     - if (!strcmp(dev->name, c->ifname)) {
3668     - c->ifindex = dev->ifindex;
3669     - dev_mc_add(dev, c->clustermac);
3670     - }
3671     - break;
3672     - case NETDEV_UNREGISTER:
3673     - if (dev->ifindex == c->ifindex) {
3674     - dev_mc_del(dev, c->clustermac);
3675     - c->ifindex = -1;
3676     - }
3677     - break;
3678     - case NETDEV_CHANGENAME:
3679     - if (!strcmp(dev->name, c->ifname)) {
3680     - c->ifindex = dev->ifindex;
3681     - dev_mc_add(dev, c->clustermac);
3682     - } else if (dev->ifindex == c->ifindex) {
3683     - dev_mc_del(dev, c->clustermac);
3684     - c->ifindex = -1;
3685     + spin_lock_bh(&cn->lock);
3686     + list_for_each_entry_rcu(c, &cn->configs, list) {
3687     + switch (event) {
3688     + case NETDEV_REGISTER:
3689     + if (!strcmp(dev->name, c->ifname)) {
3690     + c->ifindex = dev->ifindex;
3691     + dev_mc_add(dev, c->clustermac);
3692     + }
3693     + break;
3694     + case NETDEV_UNREGISTER:
3695     + if (dev->ifindex == c->ifindex) {
3696     + dev_mc_del(dev, c->clustermac);
3697     + c->ifindex = -1;
3698     + }
3699     + break;
3700     + case NETDEV_CHANGENAME:
3701     + if (!strcmp(dev->name, c->ifname)) {
3702     + c->ifindex = dev->ifindex;
3703     + dev_mc_add(dev, c->clustermac);
3704     + } else if (dev->ifindex == c->ifindex) {
3705     + dev_mc_del(dev, c->clustermac);
3706     + c->ifindex = -1;
3707     + }
3708     + break;
3709     }
3710     - break;
3711     }
3712     + spin_unlock_bh(&cn->lock);
3713    
3714     return NOTIFY_DONE;
3715     }
3716     @@ -215,30 +229,44 @@ static struct clusterip_config *
3717     clusterip_config_init(struct net *net, const struct ipt_clusterip_tgt_info *i,
3718     __be32 ip, const char *iniface)
3719     {
3720     - struct clusterip_net *cn = net_generic(net, clusterip_net_id);
3721     + struct clusterip_net *cn = clusterip_pernet(net);
3722     struct clusterip_config *c;
3723     + struct net_device *dev;
3724     int err;
3725    
3726     + if (iniface[0] == '\0') {
3727     + pr_info("Please specify an interface name\n");
3728     + return ERR_PTR(-EINVAL);
3729     + }
3730     +
3731     c = kzalloc(sizeof(*c), GFP_ATOMIC);
3732     if (!c)
3733     return ERR_PTR(-ENOMEM);
3734    
3735     - strcpy(c->ifname, iniface);
3736     - c->ifindex = -1;
3737     - c->clusterip = ip;
3738     + dev = dev_get_by_name(net, iniface);
3739     + if (!dev) {
3740     + pr_info("no such interface %s\n", iniface);
3741     + kfree(c);
3742     + return ERR_PTR(-ENOENT);
3743     + }
3744     + c->ifindex = dev->ifindex;
3745     + strcpy(c->ifname, dev->name);
3746     memcpy(&c->clustermac, &i->clustermac, ETH_ALEN);
3747     + dev_mc_add(dev, c->clustermac);
3748     + dev_put(dev);
3749     +
3750     + c->clusterip = ip;
3751     c->num_total_nodes = i->num_total_nodes;
3752     clusterip_config_init_nodelist(c, i);
3753     c->hash_mode = i->hash_mode;
3754     c->hash_initval = i->hash_initval;
3755     + c->net = net;
3756     refcount_set(&c->refcount, 1);
3757    
3758     spin_lock_bh(&cn->lock);
3759     if (__clusterip_config_find(net, ip)) {
3760     - spin_unlock_bh(&cn->lock);
3761     - kfree(c);
3762     -
3763     - return ERR_PTR(-EBUSY);
3764     + err = -EBUSY;
3765     + goto out_config_put;
3766     }
3767    
3768     list_add_rcu(&c->list, &cn->configs);
3769     @@ -260,22 +288,17 @@ clusterip_config_init(struct net *net, const struct ipt_clusterip_tgt_info *i,
3770     }
3771     #endif
3772    
3773     - c->notifier.notifier_call = clusterip_netdev_event;
3774     - err = register_netdevice_notifier(&c->notifier);
3775     - if (!err) {
3776     - refcount_set(&c->entries, 1);
3777     - return c;
3778     - }
3779     + refcount_set(&c->entries, 1);
3780     + return c;
3781    
3782     #ifdef CONFIG_PROC_FS
3783     - proc_remove(c->pde);
3784     err:
3785     #endif
3786     spin_lock_bh(&cn->lock);
3787     list_del_rcu(&c->list);
3788     +out_config_put:
3789     spin_unlock_bh(&cn->lock);
3790     clusterip_config_put(c);
3791     -
3792     return ERR_PTR(err);
3793     }
3794    
3795     @@ -475,34 +498,20 @@ static int clusterip_tg_check(const struct xt_tgchk_param *par)
3796     &e->ip.dst.s_addr);
3797     return -EINVAL;
3798     } else {
3799     - struct net_device *dev;
3800     -
3801     - if (e->ip.iniface[0] == '\0') {
3802     - pr_info("Please specify an interface name\n");
3803     - return -EINVAL;
3804     - }
3805     -
3806     - dev = dev_get_by_name(par->net, e->ip.iniface);
3807     - if (!dev) {
3808     - pr_info("no such interface %s\n",
3809     - e->ip.iniface);
3810     - return -ENOENT;
3811     - }
3812     - dev_put(dev);
3813     -
3814     config = clusterip_config_init(par->net, cipinfo,
3815     e->ip.dst.s_addr,
3816     e->ip.iniface);
3817     if (IS_ERR(config))
3818     return PTR_ERR(config);
3819     }
3820     - }
3821     + } else if (memcmp(&config->clustermac, &cipinfo->clustermac, ETH_ALEN))
3822     + return -EINVAL;
3823    
3824     ret = nf_ct_netns_get(par->net, par->family);
3825     if (ret < 0) {
3826     pr_info("cannot load conntrack support for proto=%u\n",
3827     par->family);
3828     - clusterip_config_entry_put(par->net, config);
3829     + clusterip_config_entry_put(config);
3830     clusterip_config_put(config);
3831     return ret;
3832     }
3833     @@ -524,7 +533,7 @@ static void clusterip_tg_destroy(const struct xt_tgdtor_param *par)
3834    
3835     /* if no more entries are referencing the config, remove it
3836     * from the list and destroy the proc entry */
3837     - clusterip_config_entry_put(par->net, cipinfo->config);
3838     + clusterip_config_entry_put(cipinfo->config);
3839    
3840     clusterip_config_put(cipinfo->config);
3841    
3842     @@ -806,7 +815,7 @@ static const struct file_operations clusterip_proc_fops = {
3843    
3844     static int clusterip_net_init(struct net *net)
3845     {
3846     - struct clusterip_net *cn = net_generic(net, clusterip_net_id);
3847     + struct clusterip_net *cn = clusterip_pernet(net);
3848     int ret;
3849    
3850     INIT_LIST_HEAD(&cn->configs);
3851     @@ -831,13 +840,12 @@ static int clusterip_net_init(struct net *net)
3852    
3853     static void clusterip_net_exit(struct net *net)
3854     {
3855     - struct clusterip_net *cn = net_generic(net, clusterip_net_id);
3856     + struct clusterip_net *cn = clusterip_pernet(net);
3857     #ifdef CONFIG_PROC_FS
3858     proc_remove(cn->procdir);
3859     cn->procdir = NULL;
3860     #endif
3861     nf_unregister_net_hook(net, &cip_arp_ops);
3862     - WARN_ON_ONCE(!list_empty(&cn->configs));
3863     }
3864    
3865     static struct pernet_operations clusterip_net_ops = {
3866     @@ -847,6 +855,10 @@ static struct pernet_operations clusterip_net_ops = {
3867     .size = sizeof(struct clusterip_net),
3868     };
3869    
3870     +struct notifier_block cip_netdev_notifier = {
3871     + .notifier_call = clusterip_netdev_event
3872     +};
3873     +
3874     static int __init clusterip_tg_init(void)
3875     {
3876     int ret;
3877     @@ -859,11 +871,17 @@ static int __init clusterip_tg_init(void)
3878     if (ret < 0)
3879     goto cleanup_subsys;
3880    
3881     + ret = register_netdevice_notifier(&cip_netdev_notifier);
3882     + if (ret < 0)
3883     + goto unregister_target;
3884     +
3885     pr_info("ClusterIP Version %s loaded successfully\n",
3886     CLUSTERIP_VERSION);
3887    
3888     return 0;
3889    
3890     +unregister_target:
3891     + xt_unregister_target(&clusterip_tg_reg);
3892     cleanup_subsys:
3893     unregister_pernet_subsys(&clusterip_net_ops);
3894     return ret;
3895     @@ -873,6 +891,7 @@ static void __exit clusterip_tg_exit(void)
3896     {
3897     pr_info("ClusterIP Version %s unloading\n", CLUSTERIP_VERSION);
3898    
3899     + unregister_netdevice_notifier(&cip_netdev_notifier);
3900     xt_unregister_target(&clusterip_tg_reg);
3901     unregister_pernet_subsys(&clusterip_net_ops);
3902    
3903     diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
3904     index 9a4261e50272..506b2ae07bb3 100644
3905     --- a/net/ipv6/af_inet6.c
3906     +++ b/net/ipv6/af_inet6.c
3907     @@ -309,6 +309,7 @@ static int __inet6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len,
3908    
3909     /* Check if the address belongs to the host. */
3910     if (addr_type == IPV6_ADDR_MAPPED) {
3911     + struct net_device *dev = NULL;
3912     int chk_addr_ret;
3913    
3914     /* Binding to v4-mapped address on a v6-only socket
3915     @@ -319,9 +320,20 @@ static int __inet6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len,
3916     goto out;
3917     }
3918    
3919     + rcu_read_lock();
3920     + if (sk->sk_bound_dev_if) {
3921     + dev = dev_get_by_index_rcu(net, sk->sk_bound_dev_if);
3922     + if (!dev) {
3923     + err = -ENODEV;
3924     + goto out_unlock;
3925     + }
3926     + }
3927     +
3928     /* Reproduce AF_INET checks to make the bindings consistent */
3929     v4addr = addr->sin6_addr.s6_addr32[3];
3930     - chk_addr_ret = inet_addr_type(net, v4addr);
3931     + chk_addr_ret = inet_addr_type_dev_table(net, dev, v4addr);
3932     + rcu_read_unlock();
3933     +
3934     if (!inet_can_nonlocal_bind(net, inet) &&
3935     v4addr != htonl(INADDR_ANY) &&
3936     chk_addr_ret != RTN_LOCAL &&
3937     diff --git a/net/netfilter/ipset/ip_set_bitmap_ipmac.c b/net/netfilter/ipset/ip_set_bitmap_ipmac.c
3938     index c00b6a2e8e3c..13ade5782847 100644
3939     --- a/net/netfilter/ipset/ip_set_bitmap_ipmac.c
3940     +++ b/net/netfilter/ipset/ip_set_bitmap_ipmac.c
3941     @@ -219,10 +219,6 @@ bitmap_ipmac_kadt(struct ip_set *set, const struct sk_buff *skb,
3942     struct ip_set_ext ext = IP_SET_INIT_KEXT(skb, opt, set);
3943     u32 ip;
3944    
3945     - /* MAC can be src only */
3946     - if (!(opt->flags & IPSET_DIM_TWO_SRC))
3947     - return 0;
3948     -
3949     ip = ntohl(ip4addr(skb, opt->flags & IPSET_DIM_ONE_SRC));
3950     if (ip < map->first_ip || ip > map->last_ip)
3951     return -IPSET_ERR_BITMAP_RANGE;
3952     @@ -233,7 +229,11 @@ bitmap_ipmac_kadt(struct ip_set *set, const struct sk_buff *skb,
3953     return -EINVAL;
3954    
3955     e.id = ip_to_id(map, ip);
3956     - memcpy(e.ether, eth_hdr(skb)->h_source, ETH_ALEN);
3957     +
3958     + if (opt->flags & IPSET_DIM_ONE_SRC)
3959     + ether_addr_copy(e.ether, eth_hdr(skb)->h_source);
3960     + else
3961     + ether_addr_copy(e.ether, eth_hdr(skb)->h_dest);
3962    
3963     return adtfn(set, &e, &ext, &opt->ext, opt->cmdflags);
3964     }
3965     diff --git a/net/netfilter/ipset/ip_set_hash_ipmac.c b/net/netfilter/ipset/ip_set_hash_ipmac.c
3966     index 1ab5ed2f6839..fd87de3ed55b 100644
3967     --- a/net/netfilter/ipset/ip_set_hash_ipmac.c
3968     +++ b/net/netfilter/ipset/ip_set_hash_ipmac.c
3969     @@ -103,7 +103,11 @@ hash_ipmac4_kadt(struct ip_set *set, const struct sk_buff *skb,
3970     (skb_mac_header(skb) + ETH_HLEN) > skb->data)
3971     return -EINVAL;
3972    
3973     - memcpy(e.ether, eth_hdr(skb)->h_source, ETH_ALEN);
3974     + if (opt->flags & IPSET_DIM_ONE_SRC)
3975     + ether_addr_copy(e.ether, eth_hdr(skb)->h_source);
3976     + else
3977     + ether_addr_copy(e.ether, eth_hdr(skb)->h_dest);
3978     +
3979     if (ether_addr_equal(e.ether, invalid_ether))
3980     return -EINVAL;
3981    
3982     @@ -211,15 +215,15 @@ hash_ipmac6_kadt(struct ip_set *set, const struct sk_buff *skb,
3983     };
3984     struct ip_set_ext ext = IP_SET_INIT_KEXT(skb, opt, set);
3985    
3986     - /* MAC can be src only */
3987     - if (!(opt->flags & IPSET_DIM_TWO_SRC))
3988     - return 0;
3989     -
3990     if (skb_mac_header(skb) < skb->head ||
3991     (skb_mac_header(skb) + ETH_HLEN) > skb->data)
3992     return -EINVAL;
3993    
3994     - memcpy(e.ether, eth_hdr(skb)->h_source, ETH_ALEN);
3995     + if (opt->flags & IPSET_DIM_ONE_SRC)
3996     + ether_addr_copy(e.ether, eth_hdr(skb)->h_source);
3997     + else
3998     + ether_addr_copy(e.ether, eth_hdr(skb)->h_dest);
3999     +
4000     if (ether_addr_equal(e.ether, invalid_ether))
4001     return -EINVAL;
4002    
4003     diff --git a/net/netfilter/ipset/ip_set_hash_mac.c b/net/netfilter/ipset/ip_set_hash_mac.c
4004     index f9d5a2a1e3d0..4fe5f243d0a3 100644
4005     --- a/net/netfilter/ipset/ip_set_hash_mac.c
4006     +++ b/net/netfilter/ipset/ip_set_hash_mac.c
4007     @@ -81,15 +81,15 @@ hash_mac4_kadt(struct ip_set *set, const struct sk_buff *skb,
4008     struct hash_mac4_elem e = { { .foo[0] = 0, .foo[1] = 0 } };
4009     struct ip_set_ext ext = IP_SET_INIT_KEXT(skb, opt, set);
4010    
4011     - /* MAC can be src only */
4012     - if (!(opt->flags & IPSET_DIM_ONE_SRC))
4013     - return 0;
4014     -
4015     if (skb_mac_header(skb) < skb->head ||
4016     (skb_mac_header(skb) + ETH_HLEN) > skb->data)
4017     return -EINVAL;
4018    
4019     - ether_addr_copy(e.ether, eth_hdr(skb)->h_source);
4020     + if (opt->flags & IPSET_DIM_ONE_SRC)
4021     + ether_addr_copy(e.ether, eth_hdr(skb)->h_source);
4022     + else
4023     + ether_addr_copy(e.ether, eth_hdr(skb)->h_dest);
4024     +
4025     if (is_zero_ether_addr(e.ether))
4026     return -EINVAL;
4027     return adtfn(set, &e, &ext, &opt->ext, opt->cmdflags);
4028     diff --git a/samples/bpf/bpf_load.c b/samples/bpf/bpf_load.c
4029     index 904e775d1a44..cf40a8284a38 100644
4030     --- a/samples/bpf/bpf_load.c
4031     +++ b/samples/bpf/bpf_load.c
4032     @@ -55,6 +55,23 @@ static int populate_prog_array(const char *event, int prog_fd)
4033     return 0;
4034     }
4035    
4036     +static int write_kprobe_events(const char *val)
4037     +{
4038     + int fd, ret, flags;
4039     +
4040     + if ((val != NULL) && (val[0] == '\0'))
4041     + flags = O_WRONLY | O_TRUNC;
4042     + else
4043     + flags = O_WRONLY | O_APPEND;
4044     +
4045     + fd = open("/sys/kernel/debug/tracing/kprobe_events", flags);
4046     +
4047     + ret = write(fd, val, strlen(val));
4048     + close(fd);
4049     +
4050     + return ret;
4051     +}
4052     +
4053     static int load_and_attach(const char *event, struct bpf_insn *prog, int size)
4054     {
4055     bool is_socket = strncmp(event, "socket", 6) == 0;
4056     @@ -166,10 +183,9 @@ static int load_and_attach(const char *event, struct bpf_insn *prog, int size)
4057    
4058     #ifdef __x86_64__
4059     if (strncmp(event, "sys_", 4) == 0) {
4060     - snprintf(buf, sizeof(buf),
4061     - "echo '%c:__x64_%s __x64_%s' >> /sys/kernel/debug/tracing/kprobe_events",
4062     - is_kprobe ? 'p' : 'r', event, event);
4063     - err = system(buf);
4064     + snprintf(buf, sizeof(buf), "%c:__x64_%s __x64_%s",
4065     + is_kprobe ? 'p' : 'r', event, event);
4066     + err = write_kprobe_events(buf);
4067     if (err >= 0) {
4068     need_normal_check = false;
4069     event_prefix = "__x64_";
4070     @@ -177,10 +193,9 @@ static int load_and_attach(const char *event, struct bpf_insn *prog, int size)
4071     }
4072     #endif
4073     if (need_normal_check) {
4074     - snprintf(buf, sizeof(buf),
4075     - "echo '%c:%s %s' >> /sys/kernel/debug/tracing/kprobe_events",
4076     - is_kprobe ? 'p' : 'r', event, event);
4077     - err = system(buf);
4078     + snprintf(buf, sizeof(buf), "%c:%s %s",
4079     + is_kprobe ? 'p' : 'r', event, event);
4080     + err = write_kprobe_events(buf);
4081     if (err < 0) {
4082     printf("failed to create kprobe '%s' error '%s'\n",
4083     event, strerror(errno));
4084     @@ -520,7 +535,7 @@ static int do_load_bpf_file(const char *path, fixup_map_cb fixup_map)
4085     return 1;
4086    
4087     /* clear all kprobes */
4088     - i = system("echo \"\" > /sys/kernel/debug/tracing/kprobe_events");
4089     + i = write_kprobe_events("");
4090    
4091     /* scan over all elf sections to get license and map info */
4092     for (i = 1; i < ehdr.e_shnum; i++) {
4093     diff --git a/scripts/kconfig/zconf.l b/scripts/kconfig/zconf.l
4094     index 25bd2b89fe3f..c2f577d71964 100644
4095     --- a/scripts/kconfig/zconf.l
4096     +++ b/scripts/kconfig/zconf.l
4097     @@ -73,7 +73,7 @@ static void warn_ignored_character(char chr)
4098     {
4099     fprintf(stderr,
4100     "%s:%d:warning: ignoring unsupported character '%c'\n",
4101     - zconf_curname(), zconf_lineno(), chr);
4102     + current_file->name, yylineno, chr);
4103     }
4104     %}
4105    
4106     @@ -221,6 +221,8 @@ n [A-Za-z0-9_-]
4107     }
4108     <<EOF>> {
4109     BEGIN(INITIAL);
4110     + yylval.string = text;
4111     + return T_WORD_QUOTE;
4112     }
4113     }
4114    
4115     diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
4116     index fe251c6f09f1..3c3878f0d2fa 100644
4117     --- a/security/selinux/hooks.c
4118     +++ b/security/selinux/hooks.c
4119     @@ -2934,7 +2934,7 @@ static int selinux_sb_kern_mount(struct super_block *sb, int flags, void *data)
4120     return rc;
4121    
4122     /* Allow all mounts performed by the kernel */
4123     - if (flags & MS_KERNMOUNT)
4124     + if (flags & (MS_KERNMOUNT | MS_SUBMOUNT))
4125     return 0;
4126    
4127     ad.type = LSM_AUDIT_DATA_DENTRY;
4128     diff --git a/sound/firewire/Kconfig b/sound/firewire/Kconfig
4129     index 529d9f405fa9..0cb65d0864cc 100644
4130     --- a/sound/firewire/Kconfig
4131     +++ b/sound/firewire/Kconfig
4132     @@ -41,6 +41,7 @@ config SND_OXFW
4133     * Mackie(Loud) U.420/U.420d
4134     * TASCAM FireOne
4135     * Stanton Controllers & Systems 1 Deck/Mixer
4136     + * APOGEE duet FireWire
4137    
4138     To compile this driver as a module, choose M here: the module
4139     will be called snd-oxfw.
4140     diff --git a/sound/firewire/bebob/bebob.c b/sound/firewire/bebob/bebob.c
4141     index 93676354f87f..de4af8a41ff0 100644
4142     --- a/sound/firewire/bebob/bebob.c
4143     +++ b/sound/firewire/bebob/bebob.c
4144     @@ -434,7 +434,7 @@ static const struct ieee1394_device_id bebob_id_table[] = {
4145     /* Apogee Electronics, DA/AD/DD-16X (X-FireWire card) */
4146     SND_BEBOB_DEV_ENTRY(VEN_APOGEE, 0x00010048, &spec_normal),
4147     /* Apogee Electronics, Ensemble */
4148     - SND_BEBOB_DEV_ENTRY(VEN_APOGEE, 0x00001eee, &spec_normal),
4149     + SND_BEBOB_DEV_ENTRY(VEN_APOGEE, 0x01eeee, &spec_normal),
4150     /* ESI, Quatafire610 */
4151     SND_BEBOB_DEV_ENTRY(VEN_ESI, 0x00010064, &spec_normal),
4152     /* AcousticReality, eARMasterOne */
4153     diff --git a/sound/firewire/oxfw/oxfw.c b/sound/firewire/oxfw/oxfw.c
4154     index 2ea8be6c8584..5f82a375725a 100644
4155     --- a/sound/firewire/oxfw/oxfw.c
4156     +++ b/sound/firewire/oxfw/oxfw.c
4157     @@ -20,6 +20,7 @@
4158     #define VENDOR_LACIE 0x00d04b
4159     #define VENDOR_TASCAM 0x00022e
4160     #define OUI_STANTON 0x001260
4161     +#define OUI_APOGEE 0x0003db
4162    
4163     #define MODEL_SATELLITE 0x00200f
4164    
4165     @@ -436,6 +437,13 @@ static const struct ieee1394_device_id oxfw_id_table[] = {
4166     .vendor_id = OUI_STANTON,
4167     .model_id = 0x002000,
4168     },
4169     + // APOGEE, duet FireWire
4170     + {
4171     + .match_flags = IEEE1394_MATCH_VENDOR_ID |
4172     + IEEE1394_MATCH_MODEL_ID,
4173     + .vendor_id = OUI_APOGEE,
4174     + .model_id = 0x01dddd,
4175     + },
4176     { }
4177     };
4178     MODULE_DEVICE_TABLE(ieee1394, oxfw_id_table);
4179     diff --git a/sound/soc/amd/acp-pcm-dma.c b/sound/soc/amd/acp-pcm-dma.c
4180     index 3135e9eafd18..7f376b63a166 100644
4181     --- a/sound/soc/amd/acp-pcm-dma.c
4182     +++ b/sound/soc/amd/acp-pcm-dma.c
4183     @@ -1147,18 +1147,21 @@ static int acp_dma_new(struct snd_soc_pcm_runtime *rtd)
4184     struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd,
4185     DRV_NAME);
4186     struct audio_drv_data *adata = dev_get_drvdata(component->dev);
4187     + struct device *parent = component->dev->parent;
4188    
4189     switch (adata->asic_type) {
4190     case CHIP_STONEY:
4191     ret = snd_pcm_lib_preallocate_pages_for_all(rtd->pcm,
4192     SNDRV_DMA_TYPE_DEV,
4193     - NULL, ST_MIN_BUFFER,
4194     + parent,
4195     + ST_MIN_BUFFER,
4196     ST_MAX_BUFFER);
4197     break;
4198     default:
4199     ret = snd_pcm_lib_preallocate_pages_for_all(rtd->pcm,
4200     SNDRV_DMA_TYPE_DEV,
4201     - NULL, MIN_BUFFER,
4202     + parent,
4203     + MIN_BUFFER,
4204     MAX_BUFFER);
4205     break;
4206     }
4207     diff --git a/sound/soc/codecs/pcm3168a.c b/sound/soc/codecs/pcm3168a.c
4208     index 3356c91f55b0..e3de1ff3b6c2 100644
4209     --- a/sound/soc/codecs/pcm3168a.c
4210     +++ b/sound/soc/codecs/pcm3168a.c
4211     @@ -688,15 +688,22 @@ err_clk:
4212     }
4213     EXPORT_SYMBOL_GPL(pcm3168a_probe);
4214    
4215     -void pcm3168a_remove(struct device *dev)
4216     +static void pcm3168a_disable(struct device *dev)
4217     {
4218     struct pcm3168a_priv *pcm3168a = dev_get_drvdata(dev);
4219    
4220     - pm_runtime_disable(dev);
4221     regulator_bulk_disable(ARRAY_SIZE(pcm3168a->supplies),
4222     - pcm3168a->supplies);
4223     + pcm3168a->supplies);
4224     clk_disable_unprepare(pcm3168a->scki);
4225     }
4226     +
4227     +void pcm3168a_remove(struct device *dev)
4228     +{
4229     + pm_runtime_disable(dev);
4230     +#ifndef CONFIG_PM
4231     + pcm3168a_disable(dev);
4232     +#endif
4233     +}
4234     EXPORT_SYMBOL_GPL(pcm3168a_remove);
4235    
4236     #ifdef CONFIG_PM
4237     @@ -751,10 +758,7 @@ static int pcm3168a_rt_suspend(struct device *dev)
4238    
4239     regcache_cache_only(pcm3168a->regmap, true);
4240    
4241     - regulator_bulk_disable(ARRAY_SIZE(pcm3168a->supplies),
4242     - pcm3168a->supplies);
4243     -
4244     - clk_disable_unprepare(pcm3168a->scki);
4245     + pcm3168a_disable(dev);
4246    
4247     return 0;
4248     }
4249     diff --git a/tools/lib/subcmd/Makefile b/tools/lib/subcmd/Makefile
4250     index 95563b8e1ad7..ed61fb3a46c0 100644
4251     --- a/tools/lib/subcmd/Makefile
4252     +++ b/tools/lib/subcmd/Makefile
4253     @@ -36,8 +36,6 @@ endif
4254     CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
4255    
4256     CFLAGS += -I$(srctree)/tools/include/
4257     -CFLAGS += -I$(srctree)/include/uapi
4258     -CFLAGS += -I$(srctree)/include
4259    
4260     SUBCMD_IN := $(OUTPUT)libsubcmd-in.o
4261    
4262     diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
4263     index e30d20fb482d..f00ea77f5f08 100644
4264     --- a/tools/perf/Makefile.config
4265     +++ b/tools/perf/Makefile.config
4266     @@ -294,6 +294,8 @@ ifndef NO_BIONIC
4267     $(call feature_check,bionic)
4268     ifeq ($(feature-bionic), 1)
4269     BIONIC := 1
4270     + CFLAGS += -DLACKS_SIGQUEUE_PROTOTYPE
4271     + CFLAGS += -DLACKS_OPEN_MEMSTREAM_PROTOTYPE
4272     EXTLIBS := $(filter-out -lrt,$(EXTLIBS))
4273     EXTLIBS := $(filter-out -lpthread,$(EXTLIBS))
4274     endif
4275     diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c
4276     index db0ba8caf5a2..ba8ecaf52200 100644
4277     --- a/tools/perf/arch/x86/util/intel-pt.c
4278     +++ b/tools/perf/arch/x86/util/intel-pt.c
4279     @@ -524,10 +524,21 @@ static int intel_pt_validate_config(struct perf_pmu *intel_pt_pmu,
4280     struct perf_evsel *evsel)
4281     {
4282     int err;
4283     + char c;
4284    
4285     if (!evsel)
4286     return 0;
4287    
4288     + /*
4289     + * If supported, force pass-through config term (pt=1) even if user
4290     + * sets pt=0, which avoids senseless kernel errors.
4291     + */
4292     + if (perf_pmu__scan_file(intel_pt_pmu, "format/pt", "%c", &c) == 1 &&
4293     + !(evsel->attr.config & 1)) {
4294     + pr_warning("pt=0 doesn't make sense, forcing pt=1\n");
4295     + evsel->attr.config |= 1;
4296     + }
4297     +
4298     err = intel_pt_val_config_term(intel_pt_pmu, "caps/cycle_thresholds",
4299     "cyc_thresh", "caps/psb_cyc",
4300     evsel->attr.config);
4301     diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
4302     index d097b5b47eb8..40720150ccd8 100644
4303     --- a/tools/perf/builtin-stat.c
4304     +++ b/tools/perf/builtin-stat.c
4305     @@ -1961,7 +1961,7 @@ static int parse_metric_groups(const struct option *opt,
4306     return metricgroup__parse_groups(opt, str, &metric_events);
4307     }
4308    
4309     -static const struct option stat_options[] = {
4310     +static struct option stat_options[] = {
4311     OPT_BOOLEAN('T', "transaction", &transaction_run,
4312     "hardware transaction statistics"),
4313     OPT_CALLBACK('e', "event", &evsel_list, "event",
4314     @@ -2847,6 +2847,12 @@ int cmd_stat(int argc, const char **argv)
4315     return -ENOMEM;
4316    
4317     parse_events__shrink_config_terms();
4318     +
4319     + /* String-parsing callback-based options would segfault when negated */
4320     + set_option_flag(stat_options, 'e', "event", PARSE_OPT_NONEG);
4321     + set_option_flag(stat_options, 'M', "metrics", PARSE_OPT_NONEG);
4322     + set_option_flag(stat_options, 'G', "cgroup", PARSE_OPT_NONEG);
4323     +
4324     argc = parse_options_subcommand(argc, argv, stat_options, stat_subcommands,
4325     (const char **) stat_usage,
4326     PARSE_OPT_STOP_AT_NON_OPTION);
4327     diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c
4328     index a827919c6263..775b99833e51 100644
4329     --- a/tools/perf/builtin-timechart.c
4330     +++ b/tools/perf/builtin-timechart.c
4331     @@ -43,6 +43,10 @@
4332     #include "util/data.h"
4333     #include "util/debug.h"
4334    
4335     +#ifdef LACKS_OPEN_MEMSTREAM_PROTOTYPE
4336     +FILE *open_memstream(char **ptr, size_t *sizeloc);
4337     +#endif
4338     +
4339     #define SUPPORT_OLD_POWER_EVENTS 1
4340     #define PWR_EVENT_EXIT -1
4341    
4342     diff --git a/tools/perf/pmu-events/arch/x86/skylake/skl-metrics.json b/tools/perf/pmu-events/arch/x86/skylake/skl-metrics.json
4343     index 36c903faed0b..71e9737f4614 100644
4344     --- a/tools/perf/pmu-events/arch/x86/skylake/skl-metrics.json
4345     +++ b/tools/perf/pmu-events/arch/x86/skylake/skl-metrics.json
4346     @@ -73,7 +73,7 @@
4347     },
4348     {
4349     "BriefDescription": "Actual Average Latency for L1 data-cache miss demand loads",
4350     - "MetricExpr": "L1D_PEND_MISS.PENDING / ( MEM_LOAD_RETIRED.L1_MISS_PS + MEM_LOAD_RETIRED.FB_HIT_PS )",
4351     + "MetricExpr": "L1D_PEND_MISS.PENDING / ( MEM_LOAD_RETIRED.L1_MISS + MEM_LOAD_RETIRED.FB_HIT )",
4352     "MetricGroup": "Memory_Bound;Memory_Lat",
4353     "MetricName": "Load_Miss_Real_Latency"
4354     },
4355     diff --git a/tools/perf/pmu-events/arch/x86/skylakex/skx-metrics.json b/tools/perf/pmu-events/arch/x86/skylakex/skx-metrics.json
4356     index 36c903faed0b..71e9737f4614 100644
4357     --- a/tools/perf/pmu-events/arch/x86/skylakex/skx-metrics.json
4358     +++ b/tools/perf/pmu-events/arch/x86/skylakex/skx-metrics.json
4359     @@ -73,7 +73,7 @@
4360     },
4361     {
4362     "BriefDescription": "Actual Average Latency for L1 data-cache miss demand loads",
4363     - "MetricExpr": "L1D_PEND_MISS.PENDING / ( MEM_LOAD_RETIRED.L1_MISS_PS + MEM_LOAD_RETIRED.FB_HIT_PS )",
4364     + "MetricExpr": "L1D_PEND_MISS.PENDING / ( MEM_LOAD_RETIRED.L1_MISS + MEM_LOAD_RETIRED.FB_HIT )",
4365     "MetricGroup": "Memory_Bound;Memory_Lat",
4366     "MetricName": "Load_Miss_Real_Latency"
4367     },
4368     diff --git a/tools/perf/tests/bp_signal.c b/tools/perf/tests/bp_signal.c
4369     index a467615c5a0e..910e25e64188 100644
4370     --- a/tools/perf/tests/bp_signal.c
4371     +++ b/tools/perf/tests/bp_signal.c
4372     @@ -291,12 +291,20 @@ int test__bp_signal(struct test *test __maybe_unused, int subtest __maybe_unused
4373    
4374     bool test__bp_signal_is_supported(void)
4375     {
4376     -/*
4377     - * The powerpc so far does not have support to even create
4378     - * instruction breakpoint using the perf event interface.
4379     - * Once it's there we can release this.
4380     - */
4381     -#if defined(__powerpc__) || defined(__s390x__)
4382     + /*
4383     + * PowerPC and S390 do not support creation of instruction
4384     + * breakpoints using the perf_event interface.
4385     + *
4386     + * ARM requires explicit rounding down of the instruction
4387     + * pointer in Thumb mode, and then requires the single-step
4388     + * to be handled explicitly in the overflow handler to avoid
4389     + * stepping into the SIGIO handler and getting stuck on the
4390     + * breakpointed instruction.
4391     + *
4392     + * Just disable the test for these architectures until these
4393     + * issues are resolved.
4394     + */
4395     +#if defined(__powerpc__) || defined(__s390x__) || defined(__arm__)
4396     return false;
4397     #else
4398     return true;
4399     diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
4400     index ca577658e890..7b5e15cc6b71 100644
4401     --- a/tools/perf/util/cs-etm.c
4402     +++ b/tools/perf/util/cs-etm.c
4403     @@ -1005,7 +1005,7 @@ static int cs_etm__flush(struct cs_etm_queue *etmq)
4404     }
4405    
4406     swap_packet:
4407     - if (etmq->etm->synth_opts.last_branch) {
4408     + if (etm->sample_branches || etm->synth_opts.last_branch) {
4409     /*
4410     * Swap PACKET with PREV_PACKET: PACKET becomes PREV_PACKET for
4411     * the next incoming packet.
4412     diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
4413     index be440df29615..819aa4491b53 100644
4414     --- a/tools/perf/util/evlist.c
4415     +++ b/tools/perf/util/evlist.c
4416     @@ -34,6 +34,10 @@
4417     #include <linux/log2.h>
4418     #include <linux/err.h>
4419    
4420     +#ifdef LACKS_SIGQUEUE_PROTOTYPE
4421     +int sigqueue(pid_t pid, int sig, const union sigval value);
4422     +#endif
4423     +
4424     #define FD(e, x, y) (*(int *)xyarray__entry(e->fd, x, y))
4425     #define SID(e, x, y) xyarray__entry(e->sample_id, x, y)
4426    
4427     diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
4428     index f8cd3e7c9186..ebb18a9bc460 100644
4429     --- a/tools/perf/util/parse-events.c
4430     +++ b/tools/perf/util/parse-events.c
4431     @@ -2454,7 +2454,7 @@ restart:
4432     if (!name_only && strlen(syms->alias))
4433     snprintf(name, MAX_NAME_LEN, "%s OR %s", syms->symbol, syms->alias);
4434     else
4435     - strncpy(name, syms->symbol, MAX_NAME_LEN);
4436     + strlcpy(name, syms->symbol, MAX_NAME_LEN);
4437    
4438     evt_list[evt_i] = strdup(name);
4439     if (evt_list[evt_i] == NULL)
4440     diff --git a/tools/perf/util/svghelper.c b/tools/perf/util/svghelper.c
4441     index 1cbada2dc6be..f735ee038713 100644
4442     --- a/tools/perf/util/svghelper.c
4443     +++ b/tools/perf/util/svghelper.c
4444     @@ -334,7 +334,7 @@ static char *cpu_model(void)
4445     if (file) {
4446     while (fgets(buf, 255, file)) {
4447     if (strstr(buf, "model name")) {
4448     - strncpy(cpu_m, &buf[13], 255);
4449     + strlcpy(cpu_m, &buf[13], 255);
4450     break;
4451     }
4452     }
4453     diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
4454     index fff7fb1285fc..f3f874ba186b 100644
4455     --- a/tools/testing/selftests/bpf/Makefile
4456     +++ b/tools/testing/selftests/bpf/Makefile
4457     @@ -124,6 +124,16 @@ endif
4458     endif
4459     endif
4460    
4461     +# Have one program compiled without "-target bpf" to test whether libbpf loads
4462     +# it successfully
4463     +$(OUTPUT)/test_xdp.o: test_xdp.c
4464     + $(CLANG) $(CLANG_FLAGS) \
4465     + -O2 -emit-llvm -c $< -o - | \
4466     + $(LLC) -march=bpf -mcpu=$(CPU) $(LLC_FLAGS) -filetype=obj -o $@
4467     +ifeq ($(DWARF2BTF),y)
4468     + $(BTF_PAHOLE) -J $@
4469     +endif
4470     +
4471     $(OUTPUT)/%.o: %.c
4472     $(CLANG) $(CLANG_FLAGS) \
4473     -O2 -target bpf -emit-llvm -c $< -o - | \
4474     diff --git a/tools/testing/selftests/bpf/test_libbpf.sh b/tools/testing/selftests/bpf/test_libbpf.sh
4475     index d97dc914cd49..8b1bc96d8e0c 100755
4476     --- a/tools/testing/selftests/bpf/test_libbpf.sh
4477     +++ b/tools/testing/selftests/bpf/test_libbpf.sh
4478     @@ -33,17 +33,11 @@ trap exit_handler 0 2 3 6 9
4479    
4480     libbpf_open_file test_l4lb.o
4481    
4482     -# TODO: fix libbpf to load noinline functions
4483     -# [warning] libbpf: incorrect bpf_call opcode
4484     -#libbpf_open_file test_l4lb_noinline.o
4485     +# Load a program with BPF-to-BPF calls
4486     +libbpf_open_file test_l4lb_noinline.o
4487    
4488     -# TODO: fix test_xdp_meta.c to load with libbpf
4489     -# [warning] libbpf: test_xdp_meta.o doesn't provide kernel version
4490     -#libbpf_open_file test_xdp_meta.o
4491     -
4492     -# TODO: fix libbpf to handle .eh_frame
4493     -# [warning] libbpf: relocation failed: no section(10)
4494     -#libbpf_open_file ../../../../samples/bpf/tracex3_kern.o
4495     +# Load a program compiled without the "-target bpf" flag
4496     +libbpf_open_file test_xdp.o
4497    
4498     # Success
4499     exit 0
4500     diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c
4501     index e436b67f2426..9db5a7378f40 100644
4502     --- a/tools/testing/selftests/bpf/test_verifier.c
4503     +++ b/tools/testing/selftests/bpf/test_verifier.c
4504     @@ -2748,6 +2748,19 @@ static struct bpf_test tests[] = {
4505     .result_unpriv = REJECT,
4506     .result = ACCEPT,
4507     },
4508     + {
4509     + "alu32: mov u32 const",
4510     + .insns = {
4511     + BPF_MOV32_IMM(BPF_REG_7, 0),
4512     + BPF_ALU32_IMM(BPF_AND, BPF_REG_7, 1),
4513     + BPF_MOV32_REG(BPF_REG_0, BPF_REG_7),
4514     + BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1),
4515     + BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_7, 0),
4516     + BPF_EXIT_INSN(),
4517     + },
4518     + .result = ACCEPT,
4519     + .retval = 0,
4520     + },
4521     {
4522     "unpriv: partial copy of pointer",
4523     .insns = {
4524     diff --git a/tools/testing/selftests/kselftest_harness.h b/tools/testing/selftests/kselftest_harness.h
4525     index 6ae3730c4ee3..76d654ef3234 100644
4526     --- a/tools/testing/selftests/kselftest_harness.h
4527     +++ b/tools/testing/selftests/kselftest_harness.h
4528     @@ -354,7 +354,7 @@
4529     * ASSERT_EQ(expected, measured): expected == measured
4530     */
4531     #define ASSERT_EQ(expected, seen) \
4532     - __EXPECT(expected, seen, ==, 1)
4533     + __EXPECT(expected, #expected, seen, #seen, ==, 1)
4534    
4535     /**
4536     * ASSERT_NE(expected, seen)
4537     @@ -365,7 +365,7 @@
4538     * ASSERT_NE(expected, measured): expected != measured
4539     */
4540     #define ASSERT_NE(expected, seen) \
4541     - __EXPECT(expected, seen, !=, 1)
4542     + __EXPECT(expected, #expected, seen, #seen, !=, 1)
4543    
4544     /**
4545     * ASSERT_LT(expected, seen)
4546     @@ -376,7 +376,7 @@
4547     * ASSERT_LT(expected, measured): expected < measured
4548     */
4549     #define ASSERT_LT(expected, seen) \
4550     - __EXPECT(expected, seen, <, 1)
4551     + __EXPECT(expected, #expected, seen, #seen, <, 1)
4552    
4553     /**
4554     * ASSERT_LE(expected, seen)
4555     @@ -387,7 +387,7 @@
4556     * ASSERT_LE(expected, measured): expected <= measured
4557     */
4558     #define ASSERT_LE(expected, seen) \
4559     - __EXPECT(expected, seen, <=, 1)
4560     + __EXPECT(expected, #expected, seen, #seen, <=, 1)
4561    
4562     /**
4563     * ASSERT_GT(expected, seen)
4564     @@ -398,7 +398,7 @@
4565     * ASSERT_GT(expected, measured): expected > measured
4566     */
4567     #define ASSERT_GT(expected, seen) \
4568     - __EXPECT(expected, seen, >, 1)
4569     + __EXPECT(expected, #expected, seen, #seen, >, 1)
4570    
4571     /**
4572     * ASSERT_GE(expected, seen)
4573     @@ -409,7 +409,7 @@
4574     * ASSERT_GE(expected, measured): expected >= measured
4575     */
4576     #define ASSERT_GE(expected, seen) \
4577     - __EXPECT(expected, seen, >=, 1)
4578     + __EXPECT(expected, #expected, seen, #seen, >=, 1)
4579    
4580     /**
4581     * ASSERT_NULL(seen)
4582     @@ -419,7 +419,7 @@
4583     * ASSERT_NULL(measured): NULL == measured
4584     */
4585     #define ASSERT_NULL(seen) \
4586     - __EXPECT(NULL, seen, ==, 1)
4587     + __EXPECT(NULL, "NULL", seen, #seen, ==, 1)
4588    
4589     /**
4590     * ASSERT_TRUE(seen)
4591     @@ -429,7 +429,7 @@
4592     * ASSERT_TRUE(measured): measured != 0
4593     */
4594     #define ASSERT_TRUE(seen) \
4595     - ASSERT_NE(0, seen)
4596     + __EXPECT(0, "0", seen, #seen, !=, 1)
4597    
4598     /**
4599     * ASSERT_FALSE(seen)
4600     @@ -439,7 +439,7 @@
4601     * ASSERT_FALSE(measured): measured == 0
4602     */
4603     #define ASSERT_FALSE(seen) \
4604     - ASSERT_EQ(0, seen)
4605     + __EXPECT(0, "0", seen, #seen, ==, 1)
4606    
4607     /**
4608     * ASSERT_STREQ(expected, seen)
4609     @@ -472,7 +472,7 @@
4610     * EXPECT_EQ(expected, measured): expected == measured
4611     */
4612     #define EXPECT_EQ(expected, seen) \
4613     - __EXPECT(expected, seen, ==, 0)
4614     + __EXPECT(expected, #expected, seen, #seen, ==, 0)
4615    
4616     /**
4617     * EXPECT_NE(expected, seen)
4618     @@ -483,7 +483,7 @@
4619     * EXPECT_NE(expected, measured): expected != measured
4620     */
4621     #define EXPECT_NE(expected, seen) \
4622     - __EXPECT(expected, seen, !=, 0)
4623     + __EXPECT(expected, #expected, seen, #seen, !=, 0)
4624    
4625     /**
4626     * EXPECT_LT(expected, seen)
4627     @@ -494,7 +494,7 @@
4628     * EXPECT_LT(expected, measured): expected < measured
4629     */
4630     #define EXPECT_LT(expected, seen) \
4631     - __EXPECT(expected, seen, <, 0)
4632     + __EXPECT(expected, #expected, seen, #seen, <, 0)
4633    
4634     /**
4635     * EXPECT_LE(expected, seen)
4636     @@ -505,7 +505,7 @@
4637     * EXPECT_LE(expected, measured): expected <= measured
4638     */
4639     #define EXPECT_LE(expected, seen) \
4640     - __EXPECT(expected, seen, <=, 0)
4641     + __EXPECT(expected, #expected, seen, #seen, <=, 0)
4642    
4643     /**
4644     * EXPECT_GT(expected, seen)
4645     @@ -516,7 +516,7 @@
4646     * EXPECT_GT(expected, measured): expected > measured
4647     */
4648     #define EXPECT_GT(expected, seen) \
4649     - __EXPECT(expected, seen, >, 0)
4650     + __EXPECT(expected, #expected, seen, #seen, >, 0)
4651    
4652     /**
4653     * EXPECT_GE(expected, seen)
4654     @@ -527,7 +527,7 @@
4655     * EXPECT_GE(expected, measured): expected >= measured
4656     */
4657     #define EXPECT_GE(expected, seen) \
4658     - __EXPECT(expected, seen, >=, 0)
4659     + __EXPECT(expected, #expected, seen, #seen, >=, 0)
4660    
4661     /**
4662     * EXPECT_NULL(seen)
4663     @@ -537,7 +537,7 @@
4664     * EXPECT_NULL(measured): NULL == measured
4665     */
4666     #define EXPECT_NULL(seen) \
4667     - __EXPECT(NULL, seen, ==, 0)
4668     + __EXPECT(NULL, "NULL", seen, #seen, ==, 0)
4669    
4670     /**
4671     * EXPECT_TRUE(seen)
4672     @@ -547,7 +547,7 @@
4673     * EXPECT_TRUE(measured): 0 != measured
4674     */
4675     #define EXPECT_TRUE(seen) \
4676     - EXPECT_NE(0, seen)
4677     + __EXPECT(0, "0", seen, #seen, !=, 0)
4678    
4679     /**
4680     * EXPECT_FALSE(seen)
4681     @@ -557,7 +557,7 @@
4682     * EXPECT_FALSE(measured): 0 == measured
4683     */
4684     #define EXPECT_FALSE(seen) \
4685     - EXPECT_EQ(0, seen)
4686     + __EXPECT(0, "0", seen, #seen, ==, 0)
4687    
4688     /**
4689     * EXPECT_STREQ(expected, seen)
4690     @@ -597,7 +597,7 @@
4691     if (_metadata->passed && _metadata->step < 255) \
4692     _metadata->step++;
4693    
4694     -#define __EXPECT(_expected, _seen, _t, _assert) do { \
4695     +#define __EXPECT(_expected, _expected_str, _seen, _seen_str, _t, _assert) do { \
4696     /* Avoid multiple evaluation of the cases */ \
4697     __typeof__(_expected) __exp = (_expected); \
4698     __typeof__(_seen) __seen = (_seen); \
4699     @@ -606,8 +606,8 @@
4700     unsigned long long __exp_print = (uintptr_t)__exp; \
4701     unsigned long long __seen_print = (uintptr_t)__seen; \
4702     __TH_LOG("Expected %s (%llu) %s %s (%llu)", \
4703     - #_expected, __exp_print, #_t, \
4704     - #_seen, __seen_print); \
4705     + _expected_str, __exp_print, #_t, \
4706     + _seen_str, __seen_print); \
4707     _metadata->passed = 0; \
4708     /* Ensure the optional handler is triggered */ \
4709     _metadata->trigger = 1; \