Magellan Linux

Contents of /trunk/kernel-alx/patches-4.9/0193-4.9.94-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3170 - (show annotations) (download)
Wed Aug 8 14:17:25 2018 UTC (5 years, 8 months ago) by niro
File size: 313734 byte(s)
-linux-4.9.94
1 diff --git a/Documentation/devicetree/bindings/clock/amlogic,meson8b-clkc.txt b/Documentation/devicetree/bindings/clock/amlogic,meson8b-clkc.txt
2 index 2b7b3fa588d7..606da38c0959 100644
3 --- a/Documentation/devicetree/bindings/clock/amlogic,meson8b-clkc.txt
4 +++ b/Documentation/devicetree/bindings/clock/amlogic,meson8b-clkc.txt
5 @@ -1,11 +1,14 @@
6 -* Amlogic Meson8b Clock and Reset Unit
7 +* Amlogic Meson8, Meson8b and Meson8m2 Clock and Reset Unit
8
9 -The Amlogic Meson8b clock controller generates and supplies clock to various
10 -controllers within the SoC.
11 +The Amlogic Meson8 / Meson8b / Meson8m2 clock controller generates and
12 +supplies clock to various controllers within the SoC.
13
14 Required Properties:
15
16 -- compatible: should be "amlogic,meson8b-clkc"
17 +- compatible: must be one of:
18 + - "amlogic,meson8-clkc" for Meson8 (S802) SoCs
19 + - "amlogic,meson8b-clkc" for Meson8 (S805) SoCs
20 + - "amlogic,meson8m2-clkc" for Meson8m2 (S812) SoCs
21 - reg: it must be composed by two tuples:
22 0) physical base address of the xtal register and length of memory
23 mapped region.
24 diff --git a/Documentation/devicetree/bindings/display/sunxi/sun4i-drm.txt b/Documentation/devicetree/bindings/display/sunxi/sun4i-drm.txt
25 index 4f7ae7555758..bda9d6fab6b4 100644
26 --- a/Documentation/devicetree/bindings/display/sunxi/sun4i-drm.txt
27 +++ b/Documentation/devicetree/bindings/display/sunxi/sun4i-drm.txt
28 @@ -47,10 +47,13 @@ Required properties:
29 Documentation/devicetree/bindings/media/video-interfaces.txt. The
30 first port should be the input endpoint, the second one the output
31
32 - The output should have two endpoints. The first is the block
33 - connected to the TCON channel 0 (usually a panel or a bridge), the
34 - second the block connected to the TCON channel 1 (usually the TV
35 - encoder)
36 + The output may have multiple endpoints. The TCON has two channels,
37 + usually with the first channel being used for the panels interfaces
38 + (RGB, LVDS, etc.), and the second being used for the outputs that
39 + require another controller (TV Encoder, HDMI, etc.). The endpoints
40 + will take an extra property, allwinner,tcon-channel, to specify the
41 + channel the endpoint is associated to. If that property is not
42 + present, the endpoint number will be used as the channel number.
43
44 On SoCs other than the A33, there is one more clock required:
45 - 'tcon-ch1': The clock driving the TCON channel 1
46 diff --git a/Makefile b/Makefile
47 index f5cf4159fc20..02188cf8e9af 100644
48 --- a/Makefile
49 +++ b/Makefile
50 @@ -1,6 +1,6 @@
51 VERSION = 4
52 PATCHLEVEL = 9
53 -SUBLEVEL = 93
54 +SUBLEVEL = 94
55 EXTRAVERSION =
56 NAME = Roaring Lionus
57
58 diff --git a/arch/arm/boot/dts/imx53-qsrb.dts b/arch/arm/boot/dts/imx53-qsrb.dts
59 index 96d7eede412e..036c9bd9bf75 100644
60 --- a/arch/arm/boot/dts/imx53-qsrb.dts
61 +++ b/arch/arm/boot/dts/imx53-qsrb.dts
62 @@ -23,7 +23,7 @@
63 imx53-qsrb {
64 pinctrl_pmic: pmicgrp {
65 fsl,pins = <
66 - MX53_PAD_CSI0_DAT5__GPIO5_23 0x1e4 /* IRQ */
67 + MX53_PAD_CSI0_DAT5__GPIO5_23 0x1c4 /* IRQ */
68 >;
69 };
70 };
71 diff --git a/arch/arm/boot/dts/imx6qdl-wandboard.dtsi b/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
72 index 2b9c2be436f9..47c955458a77 100644
73 --- a/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
74 +++ b/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
75 @@ -88,6 +88,7 @@
76 clocks = <&clks IMX6QDL_CLK_CKO>;
77 VDDA-supply = <&reg_2p5v>;
78 VDDIO-supply = <&reg_3p3v>;
79 + lrclk-strength = <3>;
80 };
81 };
82
83 diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi
84 index 368e21934285..825f6eae3d1c 100644
85 --- a/arch/arm/boot/dts/ls1021a.dtsi
86 +++ b/arch/arm/boot/dts/ls1021a.dtsi
87 @@ -146,7 +146,7 @@
88 };
89
90 esdhc: esdhc@1560000 {
91 - compatible = "fsl,esdhc";
92 + compatible = "fsl,ls1021a-esdhc", "fsl,esdhc";
93 reg = <0x0 0x1560000 0x0 0x10000>;
94 interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
95 clock-frequency = <0>;
96 diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi b/arch/arm/boot/dts/qcom-ipq4019.dtsi
97 index b7a24af8f47b..4b7d97275c62 100644
98 --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
99 +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
100 @@ -154,10 +154,10 @@
101
102 i2c_0: i2c@78b7000 {
103 compatible = "qcom,i2c-qup-v2.2.1";
104 - reg = <0x78b7000 0x6000>;
105 + reg = <0x78b7000 0x600>;
106 interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
107 clocks = <&gcc GCC_BLSP1_AHB_CLK>,
108 - <&gcc GCC_BLSP1_QUP2_I2C_APPS_CLK>;
109 + <&gcc GCC_BLSP1_QUP1_I2C_APPS_CLK>;
110 clock-names = "iface", "core";
111 #address-cells = <1>;
112 #size-cells = <0>;
113 diff --git a/arch/arm/boot/dts/r8a7740-armadillo800eva.dts b/arch/arm/boot/dts/r8a7740-armadillo800eva.dts
114 index 7885075428bb..1788e186a512 100644
115 --- a/arch/arm/boot/dts/r8a7740-armadillo800eva.dts
116 +++ b/arch/arm/boot/dts/r8a7740-armadillo800eva.dts
117 @@ -266,7 +266,9 @@
118 lcd0_pins: lcd0 {
119 groups = "lcd0_data24_0", "lcd0_lclk_1", "lcd0_sync";
120 function = "lcd0";
121 + };
122
123 + lcd0_mux {
124 /* DBGMD/LCDC0/FSIA MUX */
125 gpio-hog;
126 gpios = <176 0>;
127 diff --git a/arch/arm/boot/dts/rk322x.dtsi b/arch/arm/boot/dts/rk322x.dtsi
128 index 9e6bf0e311bb..2679dc80f831 100644
129 --- a/arch/arm/boot/dts/rk322x.dtsi
130 +++ b/arch/arm/boot/dts/rk322x.dtsi
131 @@ -617,9 +617,9 @@
132 <0 12 RK_FUNC_1 &pcfg_pull_none>,
133 <0 13 RK_FUNC_1 &pcfg_pull_none>,
134 <0 14 RK_FUNC_1 &pcfg_pull_none>,
135 - <1 2 RK_FUNC_1 &pcfg_pull_none>,
136 - <1 4 RK_FUNC_1 &pcfg_pull_none>,
137 - <1 5 RK_FUNC_1 &pcfg_pull_none>;
138 + <1 2 RK_FUNC_2 &pcfg_pull_none>,
139 + <1 4 RK_FUNC_2 &pcfg_pull_none>,
140 + <1 5 RK_FUNC_2 &pcfg_pull_none>;
141 };
142 };
143
144 diff --git a/arch/arm/include/asm/xen/events.h b/arch/arm/include/asm/xen/events.h
145 index 71e473d05fcc..620dc75362e5 100644
146 --- a/arch/arm/include/asm/xen/events.h
147 +++ b/arch/arm/include/asm/xen/events.h
148 @@ -16,7 +16,7 @@ static inline int xen_irqs_disabled(struct pt_regs *regs)
149 return raw_irqs_disabled_flags(regs->ARM_cpsr);
150 }
151
152 -#define xchg_xen_ulong(ptr, val) atomic64_xchg(container_of((ptr), \
153 +#define xchg_xen_ulong(ptr, val) atomic64_xchg(container_of((long long*)(ptr),\
154 atomic64_t, \
155 counter), (val))
156
157 diff --git a/arch/arm/kvm/hyp/switch.c b/arch/arm/kvm/hyp/switch.c
158 index 624a510d31df..ebd2dd46adf7 100644
159 --- a/arch/arm/kvm/hyp/switch.c
160 +++ b/arch/arm/kvm/hyp/switch.c
161 @@ -237,8 +237,10 @@ void __hyp_text __noreturn __hyp_panic(int cause)
162
163 vcpu = (struct kvm_vcpu *)read_sysreg(HTPIDR);
164 host_ctxt = kern_hyp_va(vcpu->arch.host_cpu_context);
165 + __timer_save_state(vcpu);
166 __deactivate_traps(vcpu);
167 __deactivate_vm(vcpu);
168 + __banked_restore_state(host_ctxt);
169 __sysreg_restore_state(host_ctxt);
170 }
171
172 diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
173 index add3771d38f6..9a22d40602aa 100644
174 --- a/arch/arm/mach-davinci/devices-da8xx.c
175 +++ b/arch/arm/mach-davinci/devices-da8xx.c
176 @@ -821,6 +821,8 @@ static struct platform_device da8xx_dsp = {
177 .resource = da8xx_rproc_resources,
178 };
179
180 +static bool rproc_mem_inited __initdata;
181 +
182 #if IS_ENABLED(CONFIG_DA8XX_REMOTEPROC)
183
184 static phys_addr_t rproc_base __initdata;
185 @@ -859,6 +861,8 @@ void __init da8xx_rproc_reserve_cma(void)
186 ret = dma_declare_contiguous(&da8xx_dsp.dev, rproc_size, rproc_base, 0);
187 if (ret)
188 pr_err("%s: dma_declare_contiguous failed %d\n", __func__, ret);
189 + else
190 + rproc_mem_inited = true;
191 }
192
193 #else
194 @@ -873,6 +877,12 @@ int __init da8xx_register_rproc(void)
195 {
196 int ret;
197
198 + if (!rproc_mem_inited) {
199 + pr_warn("%s: memory not reserved for DSP, not registering DSP device\n",
200 + __func__);
201 + return -ENOMEM;
202 + }
203 +
204 ret = platform_device_register(&da8xx_dsp);
205 if (ret)
206 pr_err("%s: can't register DSP device: %d\n", __func__, ret);
207 diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c
208 index b3347d32349f..94906ed49392 100644
209 --- a/arch/arm/mach-imx/cpu.c
210 +++ b/arch/arm/mach-imx/cpu.c
211 @@ -131,6 +131,9 @@ struct device * __init imx_soc_device_init(void)
212 case MXC_CPU_IMX6UL:
213 soc_id = "i.MX6UL";
214 break;
215 + case MXC_CPU_IMX6ULL:
216 + soc_id = "i.MX6ULL";
217 + break;
218 case MXC_CPU_IMX7D:
219 soc_id = "i.MX7D";
220 break;
221 diff --git a/arch/arm/mach-imx/mxc.h b/arch/arm/mach-imx/mxc.h
222 index 34f2ff62583c..e00d6260c3df 100644
223 --- a/arch/arm/mach-imx/mxc.h
224 +++ b/arch/arm/mach-imx/mxc.h
225 @@ -39,6 +39,7 @@
226 #define MXC_CPU_IMX6SX 0x62
227 #define MXC_CPU_IMX6Q 0x63
228 #define MXC_CPU_IMX6UL 0x64
229 +#define MXC_CPU_IMX6ULL 0x65
230 #define MXC_CPU_IMX7D 0x72
231
232 #define IMX_DDR_TYPE_LPDDR2 1
233 @@ -73,6 +74,11 @@ static inline bool cpu_is_imx6ul(void)
234 return __mxc_cpu_type == MXC_CPU_IMX6UL;
235 }
236
237 +static inline bool cpu_is_imx6ull(void)
238 +{
239 + return __mxc_cpu_type == MXC_CPU_IMX6ULL;
240 +}
241 +
242 static inline bool cpu_is_imx6q(void)
243 {
244 return __mxc_cpu_type == MXC_CPU_IMX6Q;
245 diff --git a/arch/arm64/include/asm/futex.h b/arch/arm64/include/asm/futex.h
246 index f2585cdd32c2..20dcb196b240 100644
247 --- a/arch/arm64/include/asm/futex.h
248 +++ b/arch/arm64/include/asm/futex.h
249 @@ -51,16 +51,16 @@
250 : "memory")
251
252 static inline int
253 -futex_atomic_op_inuser (int encoded_op, u32 __user *uaddr)
254 +futex_atomic_op_inuser(unsigned int encoded_op, u32 __user *uaddr)
255 {
256 int op = (encoded_op >> 28) & 7;
257 int cmp = (encoded_op >> 24) & 15;
258 - int oparg = (encoded_op << 8) >> 20;
259 - int cmparg = (encoded_op << 20) >> 20;
260 + int oparg = (int)(encoded_op << 8) >> 20;
261 + int cmparg = (int)(encoded_op << 20) >> 20;
262 int oldval = 0, ret, tmp;
263
264 if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
265 - oparg = 1 << oparg;
266 + oparg = 1U << (oparg & 0x1f);
267
268 if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32)))
269 return -EFAULT;
270 diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c
271 index 409abc45bdb6..1b3eb67edefb 100644
272 --- a/arch/arm64/kernel/pci.c
273 +++ b/arch/arm64/kernel/pci.c
274 @@ -175,8 +175,10 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
275 return NULL;
276
277 root_ops = kzalloc_node(sizeof(*root_ops), GFP_KERNEL, node);
278 - if (!root_ops)
279 + if (!root_ops) {
280 + kfree(ri);
281 return NULL;
282 + }
283
284 ri->cfg = pci_acpi_setup_ecam_mapping(root);
285 if (!ri->cfg) {
286 diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c
287 index 57ae9d9ed9bb..199a23f058d5 100644
288 --- a/arch/arm64/kernel/perf_event.c
289 +++ b/arch/arm64/kernel/perf_event.c
290 @@ -871,15 +871,24 @@ static int armv8pmu_set_event_filter(struct hw_perf_event *event,
291
292 if (attr->exclude_idle)
293 return -EPERM;
294 - if (is_kernel_in_hyp_mode() &&
295 - attr->exclude_kernel != attr->exclude_hv)
296 - return -EINVAL;
297 +
298 + /*
299 + * If we're running in hyp mode, then we *are* the hypervisor.
300 + * Therefore we ignore exclude_hv in this configuration, since
301 + * there's no hypervisor to sample anyway. This is consistent
302 + * with other architectures (x86 and Power).
303 + */
304 + if (is_kernel_in_hyp_mode()) {
305 + if (!attr->exclude_kernel)
306 + config_base |= ARMV8_PMU_INCLUDE_EL2;
307 + } else {
308 + if (attr->exclude_kernel)
309 + config_base |= ARMV8_PMU_EXCLUDE_EL1;
310 + if (!attr->exclude_hv)
311 + config_base |= ARMV8_PMU_INCLUDE_EL2;
312 + }
313 if (attr->exclude_user)
314 config_base |= ARMV8_PMU_EXCLUDE_EL0;
315 - if (!is_kernel_in_hyp_mode() && attr->exclude_kernel)
316 - config_base |= ARMV8_PMU_EXCLUDE_EL1;
317 - if (!attr->exclude_hv)
318 - config_base |= ARMV8_PMU_INCLUDE_EL2;
319
320 /*
321 * Install the filter into config_base as this is used to
322 diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
323 index 0c848c18ca44..9174ba917d65 100644
324 --- a/arch/arm64/kvm/hyp/switch.c
325 +++ b/arch/arm64/kvm/hyp/switch.c
326 @@ -404,6 +404,7 @@ void __hyp_text __noreturn __hyp_panic(void)
327
328 vcpu = (struct kvm_vcpu *)read_sysreg(tpidr_el2);
329 host_ctxt = kern_hyp_va(vcpu->arch.host_cpu_context);
330 + __timer_save_state(vcpu);
331 __deactivate_traps(vcpu);
332 __deactivate_vm(vcpu);
333 __sysreg_restore_host_state(host_ctxt);
334 diff --git a/arch/arm64/mm/mmap.c b/arch/arm64/mm/mmap.c
335 index 01c171723bb3..caf75abf6ae7 100644
336 --- a/arch/arm64/mm/mmap.c
337 +++ b/arch/arm64/mm/mmap.c
338 @@ -18,6 +18,7 @@
339
340 #include <linux/elf.h>
341 #include <linux/fs.h>
342 +#include <linux/memblock.h>
343 #include <linux/mm.h>
344 #include <linux/mman.h>
345 #include <linux/export.h>
346 @@ -102,12 +103,18 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
347 */
348 int valid_phys_addr_range(phys_addr_t addr, size_t size)
349 {
350 - if (addr < PHYS_OFFSET)
351 - return 0;
352 - if (addr + size > __pa(high_memory - 1) + 1)
353 - return 0;
354 -
355 - return 1;
356 + /*
357 + * Check whether addr is covered by a memory region without the
358 + * MEMBLOCK_NOMAP attribute, and whether that region covers the
359 + * entire range. In theory, this could lead to false negatives
360 + * if the range is covered by distinct but adjacent memory regions
361 + * that only differ in other attributes. However, few of such
362 + * attributes have been defined, and it is debatable whether it
363 + * follows that /dev/mem read() calls should be able traverse
364 + * such boundaries.
365 + */
366 + return memblock_is_region_memory(addr, size) &&
367 + memblock_is_map_memory(addr);
368 }
369
370 /*
371 diff --git a/arch/mips/include/asm/kprobes.h b/arch/mips/include/asm/kprobes.h
372 index daba1f9a4f79..174aedce3167 100644
373 --- a/arch/mips/include/asm/kprobes.h
374 +++ b/arch/mips/include/asm/kprobes.h
375 @@ -40,7 +40,8 @@ typedef union mips_instruction kprobe_opcode_t;
376
377 #define flush_insn_slot(p) \
378 do { \
379 - flush_icache_range((unsigned long)p->addr, \
380 + if (p->addr) \
381 + flush_icache_range((unsigned long)p->addr, \
382 (unsigned long)p->addr + \
383 (MAX_INSN_SIZE * sizeof(kprobe_opcode_t))); \
384 } while (0)
385 diff --git a/arch/mips/include/asm/pgtable-32.h b/arch/mips/include/asm/pgtable-32.h
386 index d21f3da7bdb6..c0be540e83cb 100644
387 --- a/arch/mips/include/asm/pgtable-32.h
388 +++ b/arch/mips/include/asm/pgtable-32.h
389 @@ -18,6 +18,10 @@
390
391 #include <asm-generic/pgtable-nopmd.h>
392
393 +#ifdef CONFIG_HIGHMEM
394 +#include <asm/highmem.h>
395 +#endif
396 +
397 extern int temp_tlb_entry;
398
399 /*
400 @@ -61,7 +65,8 @@ extern int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1,
401
402 #define VMALLOC_START MAP_BASE
403
404 -#define PKMAP_BASE (0xfe000000UL)
405 +#define PKMAP_END ((FIXADDR_START) & ~((LAST_PKMAP << PAGE_SHIFT)-1))
406 +#define PKMAP_BASE (PKMAP_END - PAGE_SIZE * LAST_PKMAP)
407
408 #ifdef CONFIG_HIGHMEM
409 # define VMALLOC_END (PKMAP_BASE-2*PAGE_SIZE)
410 diff --git a/arch/mips/mm/pgtable-32.c b/arch/mips/mm/pgtable-32.c
411 index adc6911ba748..b19a3c506b1e 100644
412 --- a/arch/mips/mm/pgtable-32.c
413 +++ b/arch/mips/mm/pgtable-32.c
414 @@ -51,15 +51,15 @@ void __init pagetable_init(void)
415 /*
416 * Fixed mappings:
417 */
418 - vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK;
419 - fixrange_init(vaddr, vaddr + FIXADDR_SIZE, pgd_base);
420 + vaddr = __fix_to_virt(__end_of_fixed_addresses - 1);
421 + fixrange_init(vaddr & PMD_MASK, vaddr + FIXADDR_SIZE, pgd_base);
422
423 #ifdef CONFIG_HIGHMEM
424 /*
425 * Permanent kmaps:
426 */
427 vaddr = PKMAP_BASE;
428 - fixrange_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base);
429 + fixrange_init(vaddr & PMD_MASK, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base);
430
431 pgd = swapper_pg_dir + __pgd_offset(vaddr);
432 pud = pud_offset(pgd, vaddr);
433 diff --git a/arch/powerpc/include/asm/module.h b/arch/powerpc/include/asm/module.h
434 index cd4ffd86765f..bb9073a2b2ae 100644
435 --- a/arch/powerpc/include/asm/module.h
436 +++ b/arch/powerpc/include/asm/module.h
437 @@ -14,6 +14,10 @@
438 #include <asm-generic/module.h>
439
440
441 +#ifdef CC_USING_MPROFILE_KERNEL
442 +#define MODULE_ARCH_VERMAGIC "mprofile-kernel"
443 +#endif
444 +
445 #ifndef __powerpc64__
446 /*
447 * Thanks to Paul M for explaining this.
448 diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h
449 index 56398e7e6100..71c69883125a 100644
450 --- a/arch/powerpc/include/asm/page.h
451 +++ b/arch/powerpc/include/asm/page.h
452 @@ -132,7 +132,19 @@ extern long long virt_phys_offset;
453 #define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT)
454 #define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr))
455 #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
456 +
457 +#ifdef CONFIG_PPC_BOOK3S_64
458 +/*
459 + * On hash the vmalloc and other regions alias to the kernel region when passed
460 + * through __pa(), which virt_to_pfn() uses. That means virt_addr_valid() can
461 + * return true for some vmalloc addresses, which is incorrect. So explicitly
462 + * check that the address is in the kernel region.
463 + */
464 +#define virt_addr_valid(kaddr) (REGION_ID(kaddr) == KERNEL_REGION_ID && \
465 + pfn_valid(virt_to_pfn(kaddr)))
466 +#else
467 #define virt_addr_valid(kaddr) pfn_valid(virt_to_pfn(kaddr))
468 +#endif
469
470 /*
471 * On Book-E parts we need __va to parse the device tree and we can't
472 diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
473 index f1d7e996e673..ab7b661b6da3 100644
474 --- a/arch/powerpc/kernel/time.c
475 +++ b/arch/powerpc/kernel/time.c
476 @@ -719,12 +719,20 @@ static int __init get_freq(char *name, int cells, unsigned long *val)
477 static void start_cpu_decrementer(void)
478 {
479 #if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
480 + unsigned int tcr;
481 +
482 /* Clear any pending timer interrupts */
483 mtspr(SPRN_TSR, TSR_ENW | TSR_WIS | TSR_DIS | TSR_FIS);
484
485 - /* Enable decrementer interrupt */
486 - mtspr(SPRN_TCR, TCR_DIE);
487 -#endif /* defined(CONFIG_BOOKE) || defined(CONFIG_40x) */
488 + tcr = mfspr(SPRN_TCR);
489 + /*
490 + * The watchdog may have already been enabled by u-boot. So leave
491 + * TRC[WP] (Watchdog Period) alone.
492 + */
493 + tcr &= TCR_WP_MASK; /* Clear all bits except for TCR[WP] */
494 + tcr |= TCR_DIE; /* Enable decrementer */
495 + mtspr(SPRN_TCR, tcr);
496 +#endif
497 }
498
499 void __init generic_calibrate_decr(void)
500 diff --git a/arch/powerpc/kvm/book3s_pr_papr.c b/arch/powerpc/kvm/book3s_pr_papr.c
501 index 02176fd52f84..286a3b051ff6 100644
502 --- a/arch/powerpc/kvm/book3s_pr_papr.c
503 +++ b/arch/powerpc/kvm/book3s_pr_papr.c
504 @@ -50,7 +50,9 @@ static int kvmppc_h_pr_enter(struct kvm_vcpu *vcpu)
505 pteg_addr = get_pteg_addr(vcpu, pte_index);
506
507 mutex_lock(&vcpu->kvm->arch.hpt_mutex);
508 - copy_from_user(pteg, (void __user *)pteg_addr, sizeof(pteg));
509 + ret = H_FUNCTION;
510 + if (copy_from_user(pteg, (void __user *)pteg_addr, sizeof(pteg)))
511 + goto done;
512 hpte = pteg;
513
514 ret = H_PTEG_FULL;
515 @@ -71,7 +73,9 @@ static int kvmppc_h_pr_enter(struct kvm_vcpu *vcpu)
516 hpte[0] = cpu_to_be64(kvmppc_get_gpr(vcpu, 6));
517 hpte[1] = cpu_to_be64(kvmppc_get_gpr(vcpu, 7));
518 pteg_addr += i * HPTE_SIZE;
519 - copy_to_user((void __user *)pteg_addr, hpte, HPTE_SIZE);
520 + ret = H_FUNCTION;
521 + if (copy_to_user((void __user *)pteg_addr, hpte, HPTE_SIZE))
522 + goto done;
523 kvmppc_set_gpr(vcpu, 4, pte_index | i);
524 ret = H_SUCCESS;
525
526 @@ -93,7 +97,9 @@ static int kvmppc_h_pr_remove(struct kvm_vcpu *vcpu)
527
528 pteg = get_pteg_addr(vcpu, pte_index);
529 mutex_lock(&vcpu->kvm->arch.hpt_mutex);
530 - copy_from_user(pte, (void __user *)pteg, sizeof(pte));
531 + ret = H_FUNCTION;
532 + if (copy_from_user(pte, (void __user *)pteg, sizeof(pte)))
533 + goto done;
534 pte[0] = be64_to_cpu((__force __be64)pte[0]);
535 pte[1] = be64_to_cpu((__force __be64)pte[1]);
536
537 @@ -103,7 +109,9 @@ static int kvmppc_h_pr_remove(struct kvm_vcpu *vcpu)
538 ((flags & H_ANDCOND) && (pte[0] & avpn) != 0))
539 goto done;
540
541 - copy_to_user((void __user *)pteg, &v, sizeof(v));
542 + ret = H_FUNCTION;
543 + if (copy_to_user((void __user *)pteg, &v, sizeof(v)))
544 + goto done;
545
546 rb = compute_tlbie_rb(pte[0], pte[1], pte_index);
547 vcpu->arch.mmu.tlbie(vcpu, rb, rb & 1 ? true : false);
548 @@ -171,7 +179,10 @@ static int kvmppc_h_pr_bulk_remove(struct kvm_vcpu *vcpu)
549 }
550
551 pteg = get_pteg_addr(vcpu, tsh & H_BULK_REMOVE_PTEX);
552 - copy_from_user(pte, (void __user *)pteg, sizeof(pte));
553 + if (copy_from_user(pte, (void __user *)pteg, sizeof(pte))) {
554 + ret = H_FUNCTION;
555 + break;
556 + }
557 pte[0] = be64_to_cpu((__force __be64)pte[0]);
558 pte[1] = be64_to_cpu((__force __be64)pte[1]);
559
560 @@ -184,7 +195,10 @@ static int kvmppc_h_pr_bulk_remove(struct kvm_vcpu *vcpu)
561 tsh |= H_BULK_REMOVE_NOT_FOUND;
562 } else {
563 /* Splat the pteg in (userland) hpt */
564 - copy_to_user((void __user *)pteg, &v, sizeof(v));
565 + if (copy_to_user((void __user *)pteg, &v, sizeof(v))) {
566 + ret = H_FUNCTION;
567 + break;
568 + }
569
570 rb = compute_tlbie_rb(pte[0], pte[1],
571 tsh & H_BULK_REMOVE_PTEX);
572 @@ -211,7 +225,9 @@ static int kvmppc_h_pr_protect(struct kvm_vcpu *vcpu)
573
574 pteg = get_pteg_addr(vcpu, pte_index);
575 mutex_lock(&vcpu->kvm->arch.hpt_mutex);
576 - copy_from_user(pte, (void __user *)pteg, sizeof(pte));
577 + ret = H_FUNCTION;
578 + if (copy_from_user(pte, (void __user *)pteg, sizeof(pte)))
579 + goto done;
580 pte[0] = be64_to_cpu((__force __be64)pte[0]);
581 pte[1] = be64_to_cpu((__force __be64)pte[1]);
582
583 @@ -234,7 +250,9 @@ static int kvmppc_h_pr_protect(struct kvm_vcpu *vcpu)
584 vcpu->arch.mmu.tlbie(vcpu, rb, rb & 1 ? true : false);
585 pte[0] = (__force u64)cpu_to_be64(pte[0]);
586 pte[1] = (__force u64)cpu_to_be64(pte[1]);
587 - copy_to_user((void __user *)pteg, pte, sizeof(pte));
588 + ret = H_FUNCTION;
589 + if (copy_to_user((void __user *)pteg, pte, sizeof(pte)))
590 + goto done;
591 ret = H_SUCCESS;
592
593 done:
594 diff --git a/arch/powerpc/platforms/cell/spufs/coredump.c b/arch/powerpc/platforms/cell/spufs/coredump.c
595 index 85c85eb3e245..b4abf9d5d9e1 100644
596 --- a/arch/powerpc/platforms/cell/spufs/coredump.c
597 +++ b/arch/powerpc/platforms/cell/spufs/coredump.c
598 @@ -175,6 +175,8 @@ static int spufs_arch_write_note(struct spu_context *ctx, int i,
599 skip = roundup(cprm->pos - total + sz, 4) - cprm->pos;
600 if (!dump_skip(cprm, skip))
601 goto Eio;
602 +
603 + rc = 0;
604 out:
605 free_page((unsigned long)buf);
606 return rc;
607 diff --git a/arch/powerpc/sysdev/mpc8xx_pic.c b/arch/powerpc/sysdev/mpc8xx_pic.c
608 index 3e828b20c21e..2842f9d63d21 100644
609 --- a/arch/powerpc/sysdev/mpc8xx_pic.c
610 +++ b/arch/powerpc/sysdev/mpc8xx_pic.c
611 @@ -79,7 +79,7 @@ unsigned int mpc8xx_get_irq(void)
612 irq = in_be32(&siu_reg->sc_sivec) >> 26;
613
614 if (irq == PIC_VEC_SPURRIOUS)
615 - irq = 0;
616 + return 0;
617
618 return irq_linear_revmap(mpc8xx_pic_host, irq);
619
620 diff --git a/arch/s390/kernel/vmlinux.lds.S b/arch/s390/kernel/vmlinux.lds.S
621 index 3667d20e997f..115bda280d50 100644
622 --- a/arch/s390/kernel/vmlinux.lds.S
623 +++ b/arch/s390/kernel/vmlinux.lds.S
624 @@ -31,8 +31,14 @@ SECTIONS
625 {
626 . = 0x00000000;
627 .text : {
628 - _text = .; /* Text and read-only data */
629 + /* Text and read-only data */
630 HEAD_TEXT
631 + /*
632 + * E.g. perf doesn't like symbols starting at address zero,
633 + * therefore skip the initial PSW and channel program located
634 + * at address zero and let _text start at 0x200.
635 + */
636 + _text = 0x200;
637 TEXT_TEXT
638 SCHED_TEXT
639 CPUIDLE_TEXT
640 diff --git a/arch/sparc/kernel/ldc.c b/arch/sparc/kernel/ldc.c
641 index 59d503866431..9cc600b2d68c 100644
642 --- a/arch/sparc/kernel/ldc.c
643 +++ b/arch/sparc/kernel/ldc.c
644 @@ -1733,9 +1733,14 @@ static int read_nonraw(struct ldc_channel *lp, void *buf, unsigned int size)
645
646 lp->rcv_nxt = p->seqid;
647
648 + /*
649 + * If this is a control-only packet, there is nothing
650 + * else to do but advance the rx queue since the packet
651 + * was already processed above.
652 + */
653 if (!(p->type & LDC_DATA)) {
654 new = rx_advance(lp, new);
655 - goto no_data;
656 + break;
657 }
658 if (p->stype & (LDC_ACK | LDC_NACK)) {
659 err = data_ack_nack(lp, p);
660 diff --git a/arch/x86/boot/compressed/error.h b/arch/x86/boot/compressed/error.h
661 index 2e59dac07f9e..d732e608e3af 100644
662 --- a/arch/x86/boot/compressed/error.h
663 +++ b/arch/x86/boot/compressed/error.h
664 @@ -1,7 +1,9 @@
665 #ifndef BOOT_COMPRESSED_ERROR_H
666 #define BOOT_COMPRESSED_ERROR_H
667
668 +#include <linux/compiler.h>
669 +
670 void warn(char *m);
671 -void error(char *m);
672 +void error(char *m) __noreturn;
673
674 #endif /* BOOT_COMPRESSED_ERROR_H */
675 diff --git a/arch/x86/include/asm/asm.h b/arch/x86/include/asm/asm.h
676 index f35f246a26bf..8d8c24f3a963 100644
677 --- a/arch/x86/include/asm/asm.h
678 +++ b/arch/x86/include/asm/asm.h
679 @@ -34,6 +34,7 @@
680 #define _ASM_ADD __ASM_SIZE(add)
681 #define _ASM_SUB __ASM_SIZE(sub)
682 #define _ASM_XADD __ASM_SIZE(xadd)
683 +#define _ASM_MUL __ASM_SIZE(mul)
684
685 #define _ASM_AX __ASM_REG(ax)
686 #define _ASM_BX __ASM_REG(bx)
687 diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
688 index d07a9390023e..bbfb03eccb7f 100644
689 --- a/arch/x86/kernel/tsc.c
690 +++ b/arch/x86/kernel/tsc.c
691 @@ -366,6 +366,8 @@ static int __init tsc_setup(char *str)
692 tsc_clocksource_reliable = 1;
693 if (!strncmp(str, "noirqtime", 9))
694 no_sched_irq_time = 1;
695 + if (!strcmp(str, "unstable"))
696 + mark_tsc_unstable("boot parameter");
697 return 1;
698 }
699
700 diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
701 index b24b3c6d686e..5c3d416fff17 100644
702 --- a/arch/x86/kvm/lapic.c
703 +++ b/arch/x86/kvm/lapic.c
704 @@ -1363,8 +1363,10 @@ EXPORT_SYMBOL_GPL(kvm_lapic_hv_timer_in_use);
705
706 static void cancel_hv_tscdeadline(struct kvm_lapic *apic)
707 {
708 + preempt_disable();
709 kvm_x86_ops->cancel_hv_timer(apic->vcpu);
710 apic->lapic_timer.hv_timer_in_use = false;
711 + preempt_enable();
712 }
713
714 void kvm_lapic_expired_hv_timer(struct kvm_vcpu *vcpu)
715 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
716 index 8c99f2fbae80..aaa93b4b0380 100644
717 --- a/arch/x86/kvm/svm.c
718 +++ b/arch/x86/kvm/svm.c
719 @@ -1879,6 +1879,7 @@ static void svm_get_segment(struct kvm_vcpu *vcpu,
720 */
721 if (var->unusable)
722 var->db = 0;
723 + /* This is symmetric with svm_set_segment() */
724 var->dpl = to_svm(vcpu)->vmcb->save.cpl;
725 break;
726 }
727 @@ -2024,18 +2025,14 @@ static void svm_set_segment(struct kvm_vcpu *vcpu,
728 s->base = var->base;
729 s->limit = var->limit;
730 s->selector = var->selector;
731 - if (var->unusable)
732 - s->attrib = 0;
733 - else {
734 - s->attrib = (var->type & SVM_SELECTOR_TYPE_MASK);
735 - s->attrib |= (var->s & 1) << SVM_SELECTOR_S_SHIFT;
736 - s->attrib |= (var->dpl & 3) << SVM_SELECTOR_DPL_SHIFT;
737 - s->attrib |= (var->present & 1) << SVM_SELECTOR_P_SHIFT;
738 - s->attrib |= (var->avl & 1) << SVM_SELECTOR_AVL_SHIFT;
739 - s->attrib |= (var->l & 1) << SVM_SELECTOR_L_SHIFT;
740 - s->attrib |= (var->db & 1) << SVM_SELECTOR_DB_SHIFT;
741 - s->attrib |= (var->g & 1) << SVM_SELECTOR_G_SHIFT;
742 - }
743 + s->attrib = (var->type & SVM_SELECTOR_TYPE_MASK);
744 + s->attrib |= (var->s & 1) << SVM_SELECTOR_S_SHIFT;
745 + s->attrib |= (var->dpl & 3) << SVM_SELECTOR_DPL_SHIFT;
746 + s->attrib |= ((var->present & 1) && !var->unusable) << SVM_SELECTOR_P_SHIFT;
747 + s->attrib |= (var->avl & 1) << SVM_SELECTOR_AVL_SHIFT;
748 + s->attrib |= (var->l & 1) << SVM_SELECTOR_L_SHIFT;
749 + s->attrib |= (var->db & 1) << SVM_SELECTOR_DB_SHIFT;
750 + s->attrib |= (var->g & 1) << SVM_SELECTOR_G_SHIFT;
751
752 /*
753 * This is always accurate, except if SYSRET returned to a segment
754 @@ -2044,7 +2041,8 @@ static void svm_set_segment(struct kvm_vcpu *vcpu,
755 * would entail passing the CPL to userspace and back.
756 */
757 if (seg == VCPU_SREG_SS)
758 - svm->vmcb->save.cpl = (s->attrib >> SVM_SELECTOR_DPL_SHIFT) & 3;
759 + /* This is symmetric with svm_get_segment() */
760 + svm->vmcb->save.cpl = (var->dpl & 3);
761
762 mark_dirty(svm->vmcb, VMCB_SEG);
763 }
764 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
765 index 7ed422e2641b..b978aeccda78 100644
766 --- a/arch/x86/kvm/vmx.c
767 +++ b/arch/x86/kvm/vmx.c
768 @@ -7924,11 +7924,13 @@ static bool nested_vmx_exit_handled_cr(struct kvm_vcpu *vcpu,
769 {
770 unsigned long exit_qualification = vmcs_readl(EXIT_QUALIFICATION);
771 int cr = exit_qualification & 15;
772 - int reg = (exit_qualification >> 8) & 15;
773 - unsigned long val = kvm_register_readl(vcpu, reg);
774 + int reg;
775 + unsigned long val;
776
777 switch ((exit_qualification >> 4) & 3) {
778 case 0: /* mov to cr */
779 + reg = (exit_qualification >> 8) & 15;
780 + val = kvm_register_readl(vcpu, reg);
781 switch (cr) {
782 case 0:
783 if (vmcs12->cr0_guest_host_mask &
784 @@ -7983,6 +7985,7 @@ static bool nested_vmx_exit_handled_cr(struct kvm_vcpu *vcpu,
785 * lmsw can change bits 1..3 of cr0, and only set bit 0 of
786 * cr0. Other attempted changes are ignored, with no exit.
787 */
788 + val = (exit_qualification >> LMSW_SOURCE_DATA_SHIFT) & 0x0f;
789 if (vmcs12->cr0_guest_host_mask & 0xe &
790 (val ^ vmcs12->cr0_read_shadow))
791 return true;
792 @@ -10661,8 +10664,7 @@ static void prepare_vmcs12(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12,
793 vmcs12->guest_pdptr3 = vmcs_read64(GUEST_PDPTR3);
794 }
795
796 - if (nested_cpu_has_ept(vmcs12))
797 - vmcs12->guest_linear_address = vmcs_readl(GUEST_LINEAR_ADDRESS);
798 + vmcs12->guest_linear_address = vmcs_readl(GUEST_LINEAR_ADDRESS);
799
800 if (nested_cpu_has_vid(vmcs12))
801 vmcs12->guest_intr_status = vmcs_read16(GUEST_INTR_STATUS);
802 diff --git a/arch/x86/lib/csum-copy_64.S b/arch/x86/lib/csum-copy_64.S
803 index 7e48807b2fa1..45a53dfe1859 100644
804 --- a/arch/x86/lib/csum-copy_64.S
805 +++ b/arch/x86/lib/csum-copy_64.S
806 @@ -55,7 +55,7 @@ ENTRY(csum_partial_copy_generic)
807 movq %r12, 3*8(%rsp)
808 movq %r14, 4*8(%rsp)
809 movq %r13, 5*8(%rsp)
810 - movq %rbp, 6*8(%rsp)
811 + movq %r15, 6*8(%rsp)
812
813 movq %r8, (%rsp)
814 movq %r9, 1*8(%rsp)
815 @@ -74,7 +74,7 @@ ENTRY(csum_partial_copy_generic)
816 /* main loop. clear in 64 byte blocks */
817 /* r9: zero, r8: temp2, rbx: temp1, rax: sum, rcx: saved length */
818 /* r11: temp3, rdx: temp4, r12 loopcnt */
819 - /* r10: temp5, rbp: temp6, r14 temp7, r13 temp8 */
820 + /* r10: temp5, r15: temp6, r14 temp7, r13 temp8 */
821 .p2align 4
822 .Lloop:
823 source
824 @@ -89,7 +89,7 @@ ENTRY(csum_partial_copy_generic)
825 source
826 movq 32(%rdi), %r10
827 source
828 - movq 40(%rdi), %rbp
829 + movq 40(%rdi), %r15
830 source
831 movq 48(%rdi), %r14
832 source
833 @@ -103,7 +103,7 @@ ENTRY(csum_partial_copy_generic)
834 adcq %r11, %rax
835 adcq %rdx, %rax
836 adcq %r10, %rax
837 - adcq %rbp, %rax
838 + adcq %r15, %rax
839 adcq %r14, %rax
840 adcq %r13, %rax
841
842 @@ -121,7 +121,7 @@ ENTRY(csum_partial_copy_generic)
843 dest
844 movq %r10, 32(%rsi)
845 dest
846 - movq %rbp, 40(%rsi)
847 + movq %r15, 40(%rsi)
848 dest
849 movq %r14, 48(%rsi)
850 dest
851 @@ -203,7 +203,7 @@ ENTRY(csum_partial_copy_generic)
852 movq 3*8(%rsp), %r12
853 movq 4*8(%rsp), %r14
854 movq 5*8(%rsp), %r13
855 - movq 6*8(%rsp), %rbp
856 + movq 6*8(%rsp), %r15
857 addq $7*8, %rsp
858 ret
859
860 diff --git a/arch/x86/lib/kaslr.c b/arch/x86/lib/kaslr.c
861 index 121f59c6ee54..0c7fe444dcdd 100644
862 --- a/arch/x86/lib/kaslr.c
863 +++ b/arch/x86/lib/kaslr.c
864 @@ -5,6 +5,7 @@
865 * kernel starts. This file is included in the compressed kernel and
866 * normally linked in the regular.
867 */
868 +#include <asm/asm.h>
869 #include <asm/kaslr.h>
870 #include <asm/msr.h>
871 #include <asm/archrandom.h>
872 @@ -79,7 +80,7 @@ unsigned long kaslr_get_random_long(const char *purpose)
873 }
874
875 /* Circular multiply for better bit diffusion */
876 - asm("mul %3"
877 + asm(_ASM_MUL "%3"
878 : "=a" (random), "=d" (raw)
879 : "a" (random), "rm" (mix_const));
880 random += raw;
881 diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
882 index 274dfc481849..a0e85f2aff7d 100644
883 --- a/arch/x86/platform/efi/efi.c
884 +++ b/arch/x86/platform/efi/efi.c
885 @@ -832,9 +832,11 @@ static void __init kexec_enter_virtual_mode(void)
886
887 /*
888 * We don't do virtual mode, since we don't do runtime services, on
889 - * non-native EFI
890 + * non-native EFI. With efi=old_map, we don't do runtime services in
891 + * kexec kernel because in the initial boot something else might
892 + * have been mapped at these virtual addresses.
893 */
894 - if (!efi_is_native()) {
895 + if (!efi_is_native() || efi_enabled(EFI_OLD_MEMMAP)) {
896 efi_memmap_unmap();
897 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
898 return;
899 diff --git a/block/bio-integrity.c b/block/bio-integrity.c
900 index 63f72f00c72e..80dedde0de73 100644
901 --- a/block/bio-integrity.c
902 +++ b/block/bio-integrity.c
903 @@ -175,6 +175,9 @@ bool bio_integrity_enabled(struct bio *bio)
904 if (!bio_is_rw(bio))
905 return false;
906
907 + if (!bio_sectors(bio))
908 + return false;
909 +
910 /* Already protected? */
911 if (bio_integrity(bio))
912 return false;
913 diff --git a/block/blk-mq.c b/block/blk-mq.c
914 index c6572ffc1e87..5ca4e4cd8cba 100644
915 --- a/block/blk-mq.c
916 +++ b/block/blk-mq.c
917 @@ -1265,13 +1265,13 @@ static blk_qc_t blk_mq_make_request(struct request_queue *q, struct bio *bio)
918
919 blk_queue_bounce(q, &bio);
920
921 + blk_queue_split(q, &bio, q->bio_split);
922 +
923 if (bio_integrity_enabled(bio) && bio_integrity_prep(bio)) {
924 bio_io_error(bio);
925 return BLK_QC_T_NONE;
926 }
927
928 - blk_queue_split(q, &bio, q->bio_split);
929 -
930 if (!is_flush_fua && !blk_queue_nomerges(q) &&
931 blk_attempt_plug_merge(q, bio, &request_count, &same_queue_rq))
932 return BLK_QC_T_NONE;
933 @@ -1592,7 +1592,8 @@ static void blk_mq_exit_hctx(struct request_queue *q,
934 {
935 unsigned flush_start_tag = set->queue_depth;
936
937 - blk_mq_tag_idle(hctx);
938 + if (blk_mq_hw_queue_mapped(hctx))
939 + blk_mq_tag_idle(hctx);
940
941 if (set->ops->exit_request)
942 set->ops->exit_request(set->driver_data,
943 @@ -1907,6 +1908,9 @@ static void blk_mq_realloc_hw_ctxs(struct blk_mq_tag_set *set,
944 struct blk_mq_hw_ctx **hctxs = q->queue_hw_ctx;
945
946 blk_mq_sysfs_unregister(q);
947 +
948 + /* protect against switching io scheduler */
949 + mutex_lock(&q->sysfs_lock);
950 for (i = 0; i < set->nr_hw_queues; i++) {
951 int node;
952
953 @@ -1956,6 +1960,7 @@ static void blk_mq_realloc_hw_ctxs(struct blk_mq_tag_set *set,
954 }
955 }
956 q->nr_hw_queues = i;
957 + mutex_unlock(&q->sysfs_lock);
958 blk_mq_sysfs_register(q);
959 }
960
961 diff --git a/block/partition-generic.c b/block/partition-generic.c
962 index a2437c006640..298c05f8b5e3 100644
963 --- a/block/partition-generic.c
964 +++ b/block/partition-generic.c
965 @@ -321,8 +321,10 @@ struct hd_struct *add_partition(struct gendisk *disk, int partno,
966
967 if (info) {
968 struct partition_meta_info *pinfo = alloc_part_info(disk);
969 - if (!pinfo)
970 + if (!pinfo) {
971 + err = -ENOMEM;
972 goto out_free_stats;
973 + }
974 memcpy(pinfo, info, sizeof(*info));
975 p->info = pinfo;
976 }
977 diff --git a/crypto/asymmetric_keys/x509_cert_parser.c b/crypto/asymmetric_keys/x509_cert_parser.c
978 index 029f7051f2be..ce2df8c9c583 100644
979 --- a/crypto/asymmetric_keys/x509_cert_parser.c
980 +++ b/crypto/asymmetric_keys/x509_cert_parser.c
981 @@ -102,6 +102,7 @@ struct x509_certificate *x509_cert_parse(const void *data, size_t datalen)
982 }
983 }
984
985 + ret = -ENOMEM;
986 cert->pub->key = kmemdup(ctx->key, ctx->key_size, GFP_KERNEL);
987 if (!cert->pub->key)
988 goto error_decode;
989 diff --git a/crypto/async_tx/async_pq.c b/crypto/async_tx/async_pq.c
990 index f83de99d7d71..56bd612927ab 100644
991 --- a/crypto/async_tx/async_pq.c
992 +++ b/crypto/async_tx/async_pq.c
993 @@ -62,9 +62,6 @@ do_async_gen_syndrome(struct dma_chan *chan,
994 dma_addr_t dma_dest[2];
995 int src_off = 0;
996
997 - if (submit->flags & ASYNC_TX_FENCE)
998 - dma_flags |= DMA_PREP_FENCE;
999 -
1000 while (src_cnt > 0) {
1001 submit->flags = flags_orig;
1002 pq_src_cnt = min(src_cnt, dma_maxpq(dma, dma_flags));
1003 @@ -83,6 +80,8 @@ do_async_gen_syndrome(struct dma_chan *chan,
1004 if (cb_fn_orig)
1005 dma_flags |= DMA_PREP_INTERRUPT;
1006 }
1007 + if (submit->flags & ASYNC_TX_FENCE)
1008 + dma_flags |= DMA_PREP_FENCE;
1009
1010 /* Drivers force forward progress in case they can not provide
1011 * a descriptor
1012 diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
1013 index c5557d070954..94e04c9de12b 100644
1014 --- a/drivers/acpi/acpi_video.c
1015 +++ b/drivers/acpi/acpi_video.c
1016 @@ -87,8 +87,8 @@ MODULE_PARM_DESC(report_key_events,
1017 static bool device_id_scheme = false;
1018 module_param(device_id_scheme, bool, 0444);
1019
1020 -static bool only_lcd = false;
1021 -module_param(only_lcd, bool, 0444);
1022 +static int only_lcd = -1;
1023 +module_param(only_lcd, int, 0444);
1024
1025 static int register_count;
1026 static DEFINE_MUTEX(register_count_mutex);
1027 @@ -2082,6 +2082,16 @@ int acpi_video_register(void)
1028 goto leave;
1029 }
1030
1031 + /*
1032 + * We're seeing a lot of bogus backlight interfaces on newer machines
1033 + * without a LCD such as desktops, servers and HDMI sticks. Checking
1034 + * the lcd flag fixes this, so enable this on any machines which are
1035 + * win8 ready (where we also prefer the native backlight driver, so
1036 + * normally the acpi_video code should not register there anyways).
1037 + */
1038 + if (only_lcd == -1)
1039 + only_lcd = acpi_osi_is_win8();
1040 +
1041 dmi_check_system(video_dmi_table);
1042
1043 ret = acpi_bus_register_driver(&acpi_video_bus);
1044 diff --git a/drivers/acpi/acpica/evxfevnt.c b/drivers/acpi/acpica/evxfevnt.c
1045 index 9179e9abe3db..35a2d9ea0654 100644
1046 --- a/drivers/acpi/acpica/evxfevnt.c
1047 +++ b/drivers/acpi/acpica/evxfevnt.c
1048 @@ -180,6 +180,12 @@ acpi_status acpi_enable_event(u32 event, u32 flags)
1049
1050 ACPI_FUNCTION_TRACE(acpi_enable_event);
1051
1052 + /* If Hardware Reduced flag is set, there are no fixed events */
1053 +
1054 + if (acpi_gbl_reduced_hardware) {
1055 + return_ACPI_STATUS(AE_OK);
1056 + }
1057 +
1058 /* Decode the Fixed Event */
1059
1060 if (event > ACPI_EVENT_MAX) {
1061 @@ -237,6 +243,12 @@ acpi_status acpi_disable_event(u32 event, u32 flags)
1062
1063 ACPI_FUNCTION_TRACE(acpi_disable_event);
1064
1065 + /* If Hardware Reduced flag is set, there are no fixed events */
1066 +
1067 + if (acpi_gbl_reduced_hardware) {
1068 + return_ACPI_STATUS(AE_OK);
1069 + }
1070 +
1071 /* Decode the Fixed Event */
1072
1073 if (event > ACPI_EVENT_MAX) {
1074 @@ -290,6 +302,12 @@ acpi_status acpi_clear_event(u32 event)
1075
1076 ACPI_FUNCTION_TRACE(acpi_clear_event);
1077
1078 + /* If Hardware Reduced flag is set, there are no fixed events */
1079 +
1080 + if (acpi_gbl_reduced_hardware) {
1081 + return_ACPI_STATUS(AE_OK);
1082 + }
1083 +
1084 /* Decode the Fixed Event */
1085
1086 if (event > ACPI_EVENT_MAX) {
1087 diff --git a/drivers/acpi/acpica/psobject.c b/drivers/acpi/acpica/psobject.c
1088 index db0e90342e82..ac2e8dfdf74e 100644
1089 --- a/drivers/acpi/acpica/psobject.c
1090 +++ b/drivers/acpi/acpica/psobject.c
1091 @@ -121,6 +121,9 @@ static acpi_status acpi_ps_get_aml_opcode(struct acpi_walk_state *walk_state)
1092 (u32)(aml_offset +
1093 sizeof(struct acpi_table_header)));
1094
1095 + ACPI_ERROR((AE_INFO,
1096 + "Aborting disassembly, AML byte code is corrupt"));
1097 +
1098 /* Dump the context surrounding the invalid opcode */
1099
1100 acpi_ut_dump_buffer(((u8 *)walk_state->parser_state.
1101 @@ -129,6 +132,14 @@ static acpi_status acpi_ps_get_aml_opcode(struct acpi_walk_state *walk_state)
1102 sizeof(struct acpi_table_header) -
1103 16));
1104 acpi_os_printf(" */\n");
1105 +
1106 + /*
1107 + * Just abort the disassembly, cannot continue because the
1108 + * parser is essentially lost. The disassembler can then
1109 + * randomly fail because an ill-constructed parse tree
1110 + * can result.
1111 + */
1112 + return_ACPI_STATUS(AE_AML_BAD_OPCODE);
1113 #endif
1114 }
1115
1116 @@ -293,6 +304,9 @@ acpi_ps_create_op(struct acpi_walk_state *walk_state,
1117 if (status == AE_CTRL_PARSE_CONTINUE) {
1118 return_ACPI_STATUS(AE_CTRL_PARSE_CONTINUE);
1119 }
1120 + if (ACPI_FAILURE(status)) {
1121 + return_ACPI_STATUS(status);
1122 + }
1123
1124 /* Create Op structure and append to parent's argument list */
1125
1126 diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
1127 index c3bcb7f5986e..307b3e28f34c 100644
1128 --- a/drivers/acpi/ec.c
1129 +++ b/drivers/acpi/ec.c
1130 @@ -1518,7 +1518,7 @@ static int acpi_ec_setup(struct acpi_ec *ec, bool handle_events)
1131 }
1132
1133 acpi_handle_info(ec->handle,
1134 - "GPE=0x%lx, EC_CMD/EC_SC=0x%lx, EC_DATA=0x%lx\n",
1135 + "GPE=0x%x, EC_CMD/EC_SC=0x%lx, EC_DATA=0x%lx\n",
1136 ec->gpe, ec->command_addr, ec->data_addr);
1137 return ret;
1138 }
1139 diff --git a/drivers/acpi/ec_sys.c b/drivers/acpi/ec_sys.c
1140 index 6c7dd7af789e..dd70d6c2bca0 100644
1141 --- a/drivers/acpi/ec_sys.c
1142 +++ b/drivers/acpi/ec_sys.c
1143 @@ -128,7 +128,7 @@ static int acpi_ec_add_debugfs(struct acpi_ec *ec, unsigned int ec_device_count)
1144 return -ENOMEM;
1145 }
1146
1147 - if (!debugfs_create_x32("gpe", 0444, dev_dir, (u32 *)&first_ec->gpe))
1148 + if (!debugfs_create_x32("gpe", 0444, dev_dir, &first_ec->gpe))
1149 goto error;
1150 if (!debugfs_create_bool("use_global_lock", 0444, dev_dir,
1151 &first_ec->global_lock))
1152 diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h
1153 index 08b3ca0ead69..b012e94b7d9f 100644
1154 --- a/drivers/acpi/internal.h
1155 +++ b/drivers/acpi/internal.h
1156 @@ -158,7 +158,7 @@ static inline void acpi_early_processor_osc(void) {}
1157 -------------------------------------------------------------------------- */
1158 struct acpi_ec {
1159 acpi_handle handle;
1160 - unsigned long gpe;
1161 + u32 gpe;
1162 unsigned long command_addr;
1163 unsigned long data_addr;
1164 bool global_lock;
1165 diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c
1166 index aaa761b9081c..cd2eab6aa92e 100644
1167 --- a/drivers/ata/libahci_platform.c
1168 +++ b/drivers/ata/libahci_platform.c
1169 @@ -514,8 +514,9 @@ int ahci_platform_init_host(struct platform_device *pdev,
1170
1171 irq = platform_get_irq(pdev, 0);
1172 if (irq <= 0) {
1173 - dev_err(dev, "no irq\n");
1174 - return -EINVAL;
1175 + if (irq != -EPROBE_DEFER)
1176 + dev_err(dev, "no irq\n");
1177 + return irq;
1178 }
1179
1180 hpriv->irq = irq;
1181 diff --git a/drivers/block/loop.c b/drivers/block/loop.c
1182 index 68bfcef24701..dc318b9100c2 100644
1183 --- a/drivers/block/loop.c
1184 +++ b/drivers/block/loop.c
1185 @@ -612,6 +612,9 @@ static int loop_switch(struct loop_device *lo, struct file *file)
1186 */
1187 static int loop_flush(struct loop_device *lo)
1188 {
1189 + /* loop not yet configured, no running thread, nothing to flush */
1190 + if (lo->lo_state != Lo_bound)
1191 + return 0;
1192 return loop_switch(lo, NULL);
1193 }
1194
1195 diff --git a/drivers/bus/brcmstb_gisb.c b/drivers/bus/brcmstb_gisb.c
1196 index 72fe0a5a8bf3..017c37b9c7c1 100644
1197 --- a/drivers/bus/brcmstb_gisb.c
1198 +++ b/drivers/bus/brcmstb_gisb.c
1199 @@ -1,5 +1,5 @@
1200 /*
1201 - * Copyright (C) 2014 Broadcom Corporation
1202 + * Copyright (C) 2014-2017 Broadcom
1203 *
1204 * This program is free software; you can redistribute it and/or modify
1205 * it under the terms of the GNU General Public License version 2 as
1206 @@ -37,8 +37,6 @@
1207 #define ARB_ERR_CAP_CLEAR (1 << 0)
1208 #define ARB_ERR_CAP_STATUS_TIMEOUT (1 << 12)
1209 #define ARB_ERR_CAP_STATUS_TEA (1 << 11)
1210 -#define ARB_ERR_CAP_STATUS_BS_SHIFT (1 << 2)
1211 -#define ARB_ERR_CAP_STATUS_BS_MASK 0x3c
1212 #define ARB_ERR_CAP_STATUS_WRITE (1 << 1)
1213 #define ARB_ERR_CAP_STATUS_VALID (1 << 0)
1214
1215 @@ -47,7 +45,6 @@ enum {
1216 ARB_ERR_CAP_CLR,
1217 ARB_ERR_CAP_HI_ADDR,
1218 ARB_ERR_CAP_ADDR,
1219 - ARB_ERR_CAP_DATA,
1220 ARB_ERR_CAP_STATUS,
1221 ARB_ERR_CAP_MASTER,
1222 };
1223 @@ -57,7 +54,6 @@ static const int gisb_offsets_bcm7038[] = {
1224 [ARB_ERR_CAP_CLR] = 0x0c4,
1225 [ARB_ERR_CAP_HI_ADDR] = -1,
1226 [ARB_ERR_CAP_ADDR] = 0x0c8,
1227 - [ARB_ERR_CAP_DATA] = 0x0cc,
1228 [ARB_ERR_CAP_STATUS] = 0x0d0,
1229 [ARB_ERR_CAP_MASTER] = -1,
1230 };
1231 @@ -67,7 +63,6 @@ static const int gisb_offsets_bcm7400[] = {
1232 [ARB_ERR_CAP_CLR] = 0x0c8,
1233 [ARB_ERR_CAP_HI_ADDR] = -1,
1234 [ARB_ERR_CAP_ADDR] = 0x0cc,
1235 - [ARB_ERR_CAP_DATA] = 0x0d0,
1236 [ARB_ERR_CAP_STATUS] = 0x0d4,
1237 [ARB_ERR_CAP_MASTER] = 0x0d8,
1238 };
1239 @@ -77,7 +72,6 @@ static const int gisb_offsets_bcm7435[] = {
1240 [ARB_ERR_CAP_CLR] = 0x168,
1241 [ARB_ERR_CAP_HI_ADDR] = -1,
1242 [ARB_ERR_CAP_ADDR] = 0x16c,
1243 - [ARB_ERR_CAP_DATA] = 0x170,
1244 [ARB_ERR_CAP_STATUS] = 0x174,
1245 [ARB_ERR_CAP_MASTER] = 0x178,
1246 };
1247 @@ -87,7 +81,6 @@ static const int gisb_offsets_bcm7445[] = {
1248 [ARB_ERR_CAP_CLR] = 0x7e4,
1249 [ARB_ERR_CAP_HI_ADDR] = 0x7e8,
1250 [ARB_ERR_CAP_ADDR] = 0x7ec,
1251 - [ARB_ERR_CAP_DATA] = 0x7f0,
1252 [ARB_ERR_CAP_STATUS] = 0x7f4,
1253 [ARB_ERR_CAP_MASTER] = 0x7f8,
1254 };
1255 @@ -109,9 +102,13 @@ static u32 gisb_read(struct brcmstb_gisb_arb_device *gdev, int reg)
1256 {
1257 int offset = gdev->gisb_offsets[reg];
1258
1259 - /* return 1 if the hardware doesn't have ARB_ERR_CAP_MASTER */
1260 - if (offset == -1)
1261 - return 1;
1262 + if (offset < 0) {
1263 + /* return 1 if the hardware doesn't have ARB_ERR_CAP_MASTER */
1264 + if (reg == ARB_ERR_CAP_MASTER)
1265 + return 1;
1266 + else
1267 + return 0;
1268 + }
1269
1270 if (gdev->big_endian)
1271 return ioread32be(gdev->base + offset);
1272 @@ -119,6 +116,16 @@ static u32 gisb_read(struct brcmstb_gisb_arb_device *gdev, int reg)
1273 return ioread32(gdev->base + offset);
1274 }
1275
1276 +static u64 gisb_read_address(struct brcmstb_gisb_arb_device *gdev)
1277 +{
1278 + u64 value;
1279 +
1280 + value = gisb_read(gdev, ARB_ERR_CAP_ADDR);
1281 + value |= (u64)gisb_read(gdev, ARB_ERR_CAP_HI_ADDR) << 32;
1282 +
1283 + return value;
1284 +}
1285 +
1286 static void gisb_write(struct brcmstb_gisb_arb_device *gdev, u32 val, int reg)
1287 {
1288 int offset = gdev->gisb_offsets[reg];
1289 @@ -127,9 +134,9 @@ static void gisb_write(struct brcmstb_gisb_arb_device *gdev, u32 val, int reg)
1290 return;
1291
1292 if (gdev->big_endian)
1293 - iowrite32be(val, gdev->base + reg);
1294 + iowrite32be(val, gdev->base + offset);
1295 else
1296 - iowrite32(val, gdev->base + reg);
1297 + iowrite32(val, gdev->base + offset);
1298 }
1299
1300 static ssize_t gisb_arb_get_timeout(struct device *dev,
1301 @@ -185,7 +192,7 @@ static int brcmstb_gisb_arb_decode_addr(struct brcmstb_gisb_arb_device *gdev,
1302 const char *reason)
1303 {
1304 u32 cap_status;
1305 - unsigned long arb_addr;
1306 + u64 arb_addr;
1307 u32 master;
1308 const char *m_name;
1309 char m_fmt[11];
1310 @@ -197,10 +204,7 @@ static int brcmstb_gisb_arb_decode_addr(struct brcmstb_gisb_arb_device *gdev,
1311 return 1;
1312
1313 /* Read the address and master */
1314 - arb_addr = gisb_read(gdev, ARB_ERR_CAP_ADDR) & 0xffffffff;
1315 -#if (IS_ENABLED(CONFIG_PHYS_ADDR_T_64BIT))
1316 - arb_addr |= (u64)gisb_read(gdev, ARB_ERR_CAP_HI_ADDR) << 32;
1317 -#endif
1318 + arb_addr = gisb_read_address(gdev);
1319 master = gisb_read(gdev, ARB_ERR_CAP_MASTER);
1320
1321 m_name = brcmstb_gisb_master_to_str(gdev, master);
1322 @@ -209,7 +213,7 @@ static int brcmstb_gisb_arb_decode_addr(struct brcmstb_gisb_arb_device *gdev,
1323 m_name = m_fmt;
1324 }
1325
1326 - pr_crit("%s: %s at 0x%lx [%c %s], core: %s\n",
1327 + pr_crit("%s: %s at 0x%llx [%c %s], core: %s\n",
1328 __func__, reason, arb_addr,
1329 cap_status & ARB_ERR_CAP_STATUS_WRITE ? 'W' : 'R',
1330 cap_status & ARB_ERR_CAP_STATUS_TIMEOUT ? "timeout" : "",
1331 diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
1332 index 510fc104bcdc..f11c1c7e84c6 100644
1333 --- a/drivers/char/ipmi/ipmi_ssif.c
1334 +++ b/drivers/char/ipmi/ipmi_ssif.c
1335 @@ -409,6 +409,7 @@ static void start_event_fetch(struct ssif_info *ssif_info, unsigned long *flags)
1336 msg = ipmi_alloc_smi_msg();
1337 if (!msg) {
1338 ssif_info->ssif_state = SSIF_NORMAL;
1339 + ipmi_ssif_unlock_cond(ssif_info, flags);
1340 return;
1341 }
1342
1343 @@ -431,6 +432,7 @@ static void start_recv_msg_fetch(struct ssif_info *ssif_info,
1344 msg = ipmi_alloc_smi_msg();
1345 if (!msg) {
1346 ssif_info->ssif_state = SSIF_NORMAL;
1347 + ipmi_ssif_unlock_cond(ssif_info, flags);
1348 return;
1349 }
1350
1351 diff --git a/drivers/char/random.c b/drivers/char/random.c
1352 index 08d1dd58c0d2..0c23ced255cb 100644
1353 --- a/drivers/char/random.c
1354 +++ b/drivers/char/random.c
1355 @@ -1115,12 +1115,16 @@ static void add_interrupt_bench(cycles_t start)
1356 static __u32 get_reg(struct fast_pool *f, struct pt_regs *regs)
1357 {
1358 __u32 *ptr = (__u32 *) regs;
1359 + unsigned int idx;
1360
1361 if (regs == NULL)
1362 return 0;
1363 - if (f->reg_idx >= sizeof(struct pt_regs) / sizeof(__u32))
1364 - f->reg_idx = 0;
1365 - return *(ptr + f->reg_idx++);
1366 + idx = READ_ONCE(f->reg_idx);
1367 + if (idx >= sizeof(struct pt_regs) / sizeof(__u32))
1368 + idx = 0;
1369 + ptr += idx++;
1370 + WRITE_ONCE(f->reg_idx, idx);
1371 + return *ptr;
1372 }
1373
1374 void add_interrupt_randomness(int irq, int irq_flags)
1375 diff --git a/drivers/clk/at91/clk-generated.c b/drivers/clk/at91/clk-generated.c
1376 index 4e1cd5aa69d8..07c8f701e51c 100644
1377 --- a/drivers/clk/at91/clk-generated.c
1378 +++ b/drivers/clk/at91/clk-generated.c
1379 @@ -260,13 +260,13 @@ at91_clk_register_generated(struct regmap *regmap, spinlock_t *lock,
1380 gck->lock = lock;
1381 gck->range = *range;
1382
1383 + clk_generated_startup(gck);
1384 hw = &gck->hw;
1385 ret = clk_hw_register(NULL, &gck->hw);
1386 if (ret) {
1387 kfree(gck);
1388 hw = ERR_PTR(ret);
1389 - } else
1390 - clk_generated_startup(gck);
1391 + }
1392
1393 return hw;
1394 }
1395 diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c
1396 index 674785d968a3..f02900922bbe 100644
1397 --- a/drivers/clk/clk-conf.c
1398 +++ b/drivers/clk/clk-conf.c
1399 @@ -106,7 +106,7 @@ static int __set_clk_rates(struct device_node *node, bool clk_supplier)
1400
1401 rc = clk_set_rate(clk, rate);
1402 if (rc < 0)
1403 - pr_err("clk: couldn't set %s clk rate to %d (%d), current rate: %ld\n",
1404 + pr_err("clk: couldn't set %s clk rate to %u (%d), current rate: %lu\n",
1405 __clk_get_name(clk), rate, rc,
1406 clk_get_rate(clk));
1407 clk_put(clk);
1408 diff --git a/drivers/clk/clk-scpi.c b/drivers/clk/clk-scpi.c
1409 index 96d37175d0ad..8ad458b5ad6e 100644
1410 --- a/drivers/clk/clk-scpi.c
1411 +++ b/drivers/clk/clk-scpi.c
1412 @@ -71,15 +71,15 @@ static const struct clk_ops scpi_clk_ops = {
1413 };
1414
1415 /* find closest match to given frequency in OPP table */
1416 -static int __scpi_dvfs_round_rate(struct scpi_clk *clk, unsigned long rate)
1417 +static long __scpi_dvfs_round_rate(struct scpi_clk *clk, unsigned long rate)
1418 {
1419 int idx;
1420 - u32 fmin = 0, fmax = ~0, ftmp;
1421 + unsigned long fmin = 0, fmax = ~0, ftmp;
1422 const struct scpi_opp *opp = clk->info->opps;
1423
1424 for (idx = 0; idx < clk->info->count; idx++, opp++) {
1425 ftmp = opp->freq;
1426 - if (ftmp >= (u32)rate) {
1427 + if (ftmp >= rate) {
1428 if (ftmp <= fmax)
1429 fmax = ftmp;
1430 break;
1431 diff --git a/drivers/clk/meson/Kconfig b/drivers/clk/meson/Kconfig
1432 index 2f29ee1a4d00..5588f75a8414 100644
1433 --- a/drivers/clk/meson/Kconfig
1434 +++ b/drivers/clk/meson/Kconfig
1435 @@ -7,9 +7,9 @@ config COMMON_CLK_MESON8B
1436 bool
1437 depends on COMMON_CLK_AMLOGIC
1438 help
1439 - Support for the clock controller on AmLogic S805 devices, aka
1440 - meson8b. Say Y if you want peripherals and CPU frequency scaling to
1441 - work.
1442 + Support for the clock controller on AmLogic S802 (Meson8),
1443 + S805 (Meson8b) and S812 (Meson8m2) devices. Say Y if you
1444 + want peripherals and CPU frequency scaling to work.
1445
1446 config COMMON_CLK_GXBB
1447 bool
1448 diff --git a/drivers/clk/meson/meson8b.c b/drivers/clk/meson/meson8b.c
1449 index 3f1be46cbb33..70567958b86a 100644
1450 --- a/drivers/clk/meson/meson8b.c
1451 +++ b/drivers/clk/meson/meson8b.c
1452 @@ -1,5 +1,6 @@
1453 /*
1454 - * AmLogic S805 / Meson8b Clock Controller Driver
1455 + * AmLogic S802 (Meson8) / S805 (Meson8b) / S812 (Meson8m2) Clock Controller
1456 + * Driver
1457 *
1458 * Copyright (c) 2015 Endless Mobile, Inc.
1459 * Author: Carlo Caione <carlo@endlessm.com>
1460 @@ -661,7 +662,9 @@ static int meson8b_clkc_probe(struct platform_device *pdev)
1461 }
1462
1463 static const struct of_device_id meson8b_clkc_match_table[] = {
1464 + { .compatible = "amlogic,meson8-clkc" },
1465 { .compatible = "amlogic,meson8b-clkc" },
1466 + { .compatible = "amlogic,meson8m2-clkc" },
1467 { }
1468 };
1469
1470 diff --git a/drivers/clk/renesas/clk-rcar-gen2.c b/drivers/clk/renesas/clk-rcar-gen2.c
1471 index 00e6aba4b9c0..c55d5fe116d6 100644
1472 --- a/drivers/clk/renesas/clk-rcar-gen2.c
1473 +++ b/drivers/clk/renesas/clk-rcar-gen2.c
1474 @@ -271,11 +271,14 @@ struct cpg_pll_config {
1475 unsigned int extal_div;
1476 unsigned int pll1_mult;
1477 unsigned int pll3_mult;
1478 + unsigned int pll0_mult; /* For R-Car V2H and E2 only */
1479 };
1480
1481 static const struct cpg_pll_config cpg_pll_configs[8] __initconst = {
1482 - { 1, 208, 106 }, { 1, 208, 88 }, { 1, 156, 80 }, { 1, 156, 66 },
1483 - { 2, 240, 122 }, { 2, 240, 102 }, { 2, 208, 106 }, { 2, 208, 88 },
1484 + { 1, 208, 106, 200 }, { 1, 208, 88, 200 },
1485 + { 1, 156, 80, 150 }, { 1, 156, 66, 150 },
1486 + { 2, 240, 122, 230 }, { 2, 240, 102, 230 },
1487 + { 2, 208, 106, 200 }, { 2, 208, 88, 200 },
1488 };
1489
1490 /* SDHI divisors */
1491 @@ -297,6 +300,12 @@ static const struct clk_div_table cpg_sd01_div_table[] = {
1492
1493 static u32 cpg_mode __initdata;
1494
1495 +static const char * const pll0_mult_match[] = {
1496 + "renesas,r8a7792-cpg-clocks",
1497 + "renesas,r8a7794-cpg-clocks",
1498 + NULL
1499 +};
1500 +
1501 static struct clk * __init
1502 rcar_gen2_cpg_register_clock(struct device_node *np, struct rcar_gen2_cpg *cpg,
1503 const struct cpg_pll_config *config,
1504 @@ -317,9 +326,15 @@ rcar_gen2_cpg_register_clock(struct device_node *np, struct rcar_gen2_cpg *cpg,
1505 * clock implementation and we currently have no need to change
1506 * the multiplier value.
1507 */
1508 - u32 value = clk_readl(cpg->reg + CPG_PLL0CR);
1509 + if (of_device_compatible_match(np, pll0_mult_match)) {
1510 + /* R-Car V2H and E2 do not have PLL0CR */
1511 + mult = config->pll0_mult;
1512 + div = 3;
1513 + } else {
1514 + u32 value = clk_readl(cpg->reg + CPG_PLL0CR);
1515 + mult = ((value >> 24) & ((1 << 7) - 1)) + 1;
1516 + }
1517 parent_name = "main";
1518 - mult = ((value >> 24) & ((1 << 7) - 1)) + 1;
1519 } else if (!strcmp(name, "pll1")) {
1520 parent_name = "main";
1521 mult = config->pll1_mult / 2;
1522 diff --git a/drivers/cpuidle/dt_idle_states.c b/drivers/cpuidle/dt_idle_states.c
1523 index a5c111b67f37..ea11a33e7fff 100644
1524 --- a/drivers/cpuidle/dt_idle_states.c
1525 +++ b/drivers/cpuidle/dt_idle_states.c
1526 @@ -174,8 +174,10 @@ int dt_init_idle_driver(struct cpuidle_driver *drv,
1527 if (!state_node)
1528 break;
1529
1530 - if (!of_device_is_available(state_node))
1531 + if (!of_device_is_available(state_node)) {
1532 + of_node_put(state_node);
1533 continue;
1534 + }
1535
1536 if (!idle_state_valid(state_node, i, cpumask)) {
1537 pr_warn("%s idle state not valid, bailing out\n",
1538 diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c
1539 index d0b16e5e4ee5..d8305ddf87d0 100644
1540 --- a/drivers/crypto/omap-sham.c
1541 +++ b/drivers/crypto/omap-sham.c
1542 @@ -750,7 +750,10 @@ static int omap_sham_align_sgs(struct scatterlist *sg,
1543 if (final)
1544 new_len = DIV_ROUND_UP(new_len, bs) * bs;
1545 else
1546 - new_len = new_len / bs * bs;
1547 + new_len = (new_len - 1) / bs * bs;
1548 +
1549 + if (nbytes != new_len)
1550 + list_ok = false;
1551
1552 while (nbytes > 0 && sg_tmp) {
1553 n++;
1554 @@ -846,6 +849,8 @@ static int omap_sham_prepare_request(struct ahash_request *req, bool update)
1555 xmit_len = DIV_ROUND_UP(xmit_len, bs) * bs;
1556 else
1557 xmit_len = xmit_len / bs * bs;
1558 + } else if (!final) {
1559 + xmit_len -= bs;
1560 }
1561
1562 hash_later = rctx->total - xmit_len;
1563 @@ -873,14 +878,21 @@ static int omap_sham_prepare_request(struct ahash_request *req, bool update)
1564 }
1565
1566 if (hash_later) {
1567 - if (req->nbytes) {
1568 - scatterwalk_map_and_copy(rctx->buffer, req->src,
1569 - req->nbytes - hash_later,
1570 - hash_later, 0);
1571 - } else {
1572 + int offset = 0;
1573 +
1574 + if (hash_later > req->nbytes) {
1575 memcpy(rctx->buffer, rctx->buffer + xmit_len,
1576 - hash_later);
1577 + hash_later - req->nbytes);
1578 + offset = hash_later - req->nbytes;
1579 }
1580 +
1581 + if (req->nbytes) {
1582 + scatterwalk_map_and_copy(rctx->buffer + offset,
1583 + req->src,
1584 + offset + req->nbytes -
1585 + hash_later, hash_later, 0);
1586 + }
1587 +
1588 rctx->bufcnt = hash_later;
1589 } else {
1590 rctx->bufcnt = 0;
1591 @@ -1130,7 +1142,7 @@ static int omap_sham_handle_queue(struct omap_sham_dev *dd,
1592 ctx = ahash_request_ctx(req);
1593
1594 err = omap_sham_prepare_request(req, ctx->op == OP_UPDATE);
1595 - if (err)
1596 + if (err || !ctx->total)
1597 goto err1;
1598
1599 dev_dbg(dd->dev, "handling new req, op: %lu, nbytes: %d\n",
1600 @@ -1189,11 +1201,10 @@ static int omap_sham_update(struct ahash_request *req)
1601 if (!req->nbytes)
1602 return 0;
1603
1604 - if (ctx->total + req->nbytes < ctx->buflen) {
1605 + if (ctx->bufcnt + req->nbytes <= ctx->buflen) {
1606 scatterwalk_map_and_copy(ctx->buffer + ctx->bufcnt, req->src,
1607 0, req->nbytes, 0);
1608 ctx->bufcnt += req->nbytes;
1609 - ctx->total += req->nbytes;
1610 return 0;
1611 }
1612
1613 diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
1614 index 9e5674c5a07b..db70cee71caa 100644
1615 --- a/drivers/devfreq/devfreq.c
1616 +++ b/drivers/devfreq/devfreq.c
1617 @@ -943,7 +943,8 @@ static ssize_t governor_store(struct device *dev, struct device_attribute *attr,
1618 if (df->governor == governor) {
1619 ret = 0;
1620 goto out;
1621 - } else if (df->governor->immutable || governor->immutable) {
1622 + } else if ((df->governor && df->governor->immutable) ||
1623 + governor->immutable) {
1624 ret = -EINVAL;
1625 goto out;
1626 }
1627 diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
1628 index 21726a270fc4..b9c29720aeb1 100644
1629 --- a/drivers/dma/imx-sdma.c
1630 +++ b/drivers/dma/imx-sdma.c
1631 @@ -1755,19 +1755,26 @@ static int sdma_probe(struct platform_device *pdev)
1632 if (IS_ERR(sdma->clk_ahb))
1633 return PTR_ERR(sdma->clk_ahb);
1634
1635 - clk_prepare(sdma->clk_ipg);
1636 - clk_prepare(sdma->clk_ahb);
1637 + ret = clk_prepare(sdma->clk_ipg);
1638 + if (ret)
1639 + return ret;
1640 +
1641 + ret = clk_prepare(sdma->clk_ahb);
1642 + if (ret)
1643 + goto err_clk;
1644
1645 ret = devm_request_irq(&pdev->dev, irq, sdma_int_handler, 0, "sdma",
1646 sdma);
1647 if (ret)
1648 - return ret;
1649 + goto err_irq;
1650
1651 sdma->irq = irq;
1652
1653 sdma->script_addrs = kzalloc(sizeof(*sdma->script_addrs), GFP_KERNEL);
1654 - if (!sdma->script_addrs)
1655 - return -ENOMEM;
1656 + if (!sdma->script_addrs) {
1657 + ret = -ENOMEM;
1658 + goto err_irq;
1659 + }
1660
1661 /* initially no scripts available */
1662 saddr_arr = (s32 *)sdma->script_addrs;
1663 @@ -1882,6 +1889,10 @@ static int sdma_probe(struct platform_device *pdev)
1664 dma_async_device_unregister(&sdma->dma_device);
1665 err_init:
1666 kfree(sdma->script_addrs);
1667 +err_irq:
1668 + clk_unprepare(sdma->clk_ahb);
1669 +err_clk:
1670 + clk_unprepare(sdma->clk_ipg);
1671 return ret;
1672 }
1673
1674 @@ -1893,6 +1904,8 @@ static int sdma_remove(struct platform_device *pdev)
1675 devm_free_irq(&pdev->dev, sdma->irq, sdma);
1676 dma_async_device_unregister(&sdma->dma_device);
1677 kfree(sdma->script_addrs);
1678 + clk_unprepare(sdma->clk_ahb);
1679 + clk_unprepare(sdma->clk_ipg);
1680 /* Kill the tasklet */
1681 for (i = 0; i < MAX_DMA_CHANNELS; i++) {
1682 struct sdma_channel *sdmac = &sdma->channel[i];
1683 diff --git a/drivers/edac/mv64x60_edac.c b/drivers/edac/mv64x60_edac.c
1684 index cb9b8577acbc..61c19b81ed81 100644
1685 --- a/drivers/edac/mv64x60_edac.c
1686 +++ b/drivers/edac/mv64x60_edac.c
1687 @@ -759,7 +759,7 @@ static int mv64x60_mc_err_probe(struct platform_device *pdev)
1688 /* Non-ECC RAM? */
1689 printk(KERN_WARNING "%s: No ECC DIMMs discovered\n", __func__);
1690 res = -ENODEV;
1691 - goto err2;
1692 + goto err;
1693 }
1694
1695 edac_dbg(3, "init mci\n");
1696 diff --git a/drivers/gpio/gpio-crystalcove.c b/drivers/gpio/gpio-crystalcove.c
1697 index 7c446d118cd6..1d87b0718d3a 100644
1698 --- a/drivers/gpio/gpio-crystalcove.c
1699 +++ b/drivers/gpio/gpio-crystalcove.c
1700 @@ -90,8 +90,18 @@ static inline int to_reg(int gpio, enum ctrl_register reg_type)
1701 {
1702 int reg;
1703
1704 - if (gpio == 94)
1705 - return GPIOPANELCTL;
1706 + if (gpio >= CRYSTALCOVE_GPIO_NUM) {
1707 + /*
1708 + * Virtual GPIO called from ACPI, for now we only support
1709 + * the panel ctl.
1710 + */
1711 + switch (gpio) {
1712 + case 0x5e:
1713 + return GPIOPANELCTL;
1714 + default:
1715 + return -EOPNOTSUPP;
1716 + }
1717 + }
1718
1719 if (reg_type == CTRL_IN) {
1720 if (gpio < 8)
1721 @@ -130,36 +140,36 @@ static void crystalcove_update_irq_ctrl(struct crystalcove_gpio *cg, int gpio)
1722 static int crystalcove_gpio_dir_in(struct gpio_chip *chip, unsigned gpio)
1723 {
1724 struct crystalcove_gpio *cg = gpiochip_get_data(chip);
1725 + int reg = to_reg(gpio, CTRL_OUT);
1726
1727 - if (gpio > CRYSTALCOVE_VGPIO_NUM)
1728 + if (reg < 0)
1729 return 0;
1730
1731 - return regmap_write(cg->regmap, to_reg(gpio, CTRL_OUT),
1732 - CTLO_INPUT_SET);
1733 + return regmap_write(cg->regmap, reg, CTLO_INPUT_SET);
1734 }
1735
1736 static int crystalcove_gpio_dir_out(struct gpio_chip *chip, unsigned gpio,
1737 int value)
1738 {
1739 struct crystalcove_gpio *cg = gpiochip_get_data(chip);
1740 + int reg = to_reg(gpio, CTRL_OUT);
1741
1742 - if (gpio > CRYSTALCOVE_VGPIO_NUM)
1743 + if (reg < 0)
1744 return 0;
1745
1746 - return regmap_write(cg->regmap, to_reg(gpio, CTRL_OUT),
1747 - CTLO_OUTPUT_SET | value);
1748 + return regmap_write(cg->regmap, reg, CTLO_OUTPUT_SET | value);
1749 }
1750
1751 static int crystalcove_gpio_get(struct gpio_chip *chip, unsigned gpio)
1752 {
1753 struct crystalcove_gpio *cg = gpiochip_get_data(chip);
1754 - int ret;
1755 unsigned int val;
1756 + int ret, reg = to_reg(gpio, CTRL_IN);
1757
1758 - if (gpio > CRYSTALCOVE_VGPIO_NUM)
1759 + if (reg < 0)
1760 return 0;
1761
1762 - ret = regmap_read(cg->regmap, to_reg(gpio, CTRL_IN), &val);
1763 + ret = regmap_read(cg->regmap, reg, &val);
1764 if (ret)
1765 return ret;
1766
1767 @@ -170,14 +180,15 @@ static void crystalcove_gpio_set(struct gpio_chip *chip,
1768 unsigned gpio, int value)
1769 {
1770 struct crystalcove_gpio *cg = gpiochip_get_data(chip);
1771 + int reg = to_reg(gpio, CTRL_OUT);
1772
1773 - if (gpio > CRYSTALCOVE_VGPIO_NUM)
1774 + if (reg < 0)
1775 return;
1776
1777 if (value)
1778 - regmap_update_bits(cg->regmap, to_reg(gpio, CTRL_OUT), 1, 1);
1779 + regmap_update_bits(cg->regmap, reg, 1, 1);
1780 else
1781 - regmap_update_bits(cg->regmap, to_reg(gpio, CTRL_OUT), 1, 0);
1782 + regmap_update_bits(cg->regmap, reg, 1, 0);
1783 }
1784
1785 static int crystalcove_irq_type(struct irq_data *data, unsigned type)
1786 @@ -185,6 +196,9 @@ static int crystalcove_irq_type(struct irq_data *data, unsigned type)
1787 struct crystalcove_gpio *cg =
1788 gpiochip_get_data(irq_data_get_irq_chip_data(data));
1789
1790 + if (data->hwirq >= CRYSTALCOVE_GPIO_NUM)
1791 + return 0;
1792 +
1793 switch (type) {
1794 case IRQ_TYPE_NONE:
1795 cg->intcnt_value = CTLI_INTCNT_DIS;
1796 @@ -235,8 +249,10 @@ static void crystalcove_irq_unmask(struct irq_data *data)
1797 struct crystalcove_gpio *cg =
1798 gpiochip_get_data(irq_data_get_irq_chip_data(data));
1799
1800 - cg->set_irq_mask = false;
1801 - cg->update |= UPDATE_IRQ_MASK;
1802 + if (data->hwirq < CRYSTALCOVE_GPIO_NUM) {
1803 + cg->set_irq_mask = false;
1804 + cg->update |= UPDATE_IRQ_MASK;
1805 + }
1806 }
1807
1808 static void crystalcove_irq_mask(struct irq_data *data)
1809 @@ -244,8 +260,10 @@ static void crystalcove_irq_mask(struct irq_data *data)
1810 struct crystalcove_gpio *cg =
1811 gpiochip_get_data(irq_data_get_irq_chip_data(data));
1812
1813 - cg->set_irq_mask = true;
1814 - cg->update |= UPDATE_IRQ_MASK;
1815 + if (data->hwirq < CRYSTALCOVE_GPIO_NUM) {
1816 + cg->set_irq_mask = true;
1817 + cg->update |= UPDATE_IRQ_MASK;
1818 + }
1819 }
1820
1821 static struct irq_chip crystalcove_irqchip = {
1822 diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
1823 index f3c3680963b9..4f54ff45e09e 100644
1824 --- a/drivers/gpio/gpiolib.c
1825 +++ b/drivers/gpio/gpiolib.c
1826 @@ -3231,7 +3231,8 @@ struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
1827 return desc;
1828 }
1829
1830 - status = gpiod_request(desc, con_id);
1831 + /* If a connection label was passed use that, else use the device name as label */
1832 + status = gpiod_request(desc, con_id ? con_id : dev_name(dev));
1833 if (status < 0)
1834 return ERR_PTR(status);
1835
1836 diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
1837 index ef7c8de7060e..171480bb95d0 100644
1838 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
1839 +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
1840 @@ -317,7 +317,8 @@ static struct kfd_process *create_process(const struct task_struct *thread)
1841
1842 /* init process apertures*/
1843 process->is_32bit_user_mode = in_compat_syscall();
1844 - if (kfd_init_apertures(process) != 0)
1845 + err = kfd_init_apertures(process);
1846 + if (err != 0)
1847 goto err_init_apretures;
1848
1849 return process;
1850 diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
1851 index 797d1f8340b9..7145127513c4 100644
1852 --- a/drivers/gpu/drm/msm/msm_gem.c
1853 +++ b/drivers/gpu/drm/msm/msm_gem.c
1854 @@ -770,6 +770,8 @@ static int msm_gem_new_impl(struct drm_device *dev,
1855 unsigned sz;
1856 bool use_vram = false;
1857
1858 + WARN_ON(!mutex_is_locked(&dev->struct_mutex));
1859 +
1860 switch (flags & MSM_BO_CACHE_MASK) {
1861 case MSM_BO_UNCACHED:
1862 case MSM_BO_CACHED:
1863 @@ -863,7 +865,11 @@ struct drm_gem_object *msm_gem_import(struct drm_device *dev,
1864
1865 size = PAGE_ALIGN(dmabuf->size);
1866
1867 + /* Take mutex so we can modify the inactive list in msm_gem_new_impl */
1868 + mutex_lock(&dev->struct_mutex);
1869 ret = msm_gem_new_impl(dev, size, MSM_BO_WC, dmabuf->resv, &obj);
1870 + mutex_unlock(&dev->struct_mutex);
1871 +
1872 if (ret)
1873 goto fail;
1874
1875 diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c
1876 index 505dee0db973..ca91651be3d4 100644
1877 --- a/drivers/gpu/drm/omapdrm/omap_gem.c
1878 +++ b/drivers/gpu/drm/omapdrm/omap_gem.c
1879 @@ -195,7 +195,7 @@ static void evict_entry(struct drm_gem_object *obj,
1880 size_t size = PAGE_SIZE * n;
1881 loff_t off = mmap_offset(obj) +
1882 (entry->obj_pgoff << PAGE_SHIFT);
1883 - const int m = 1 + ((omap_obj->width << fmt) / PAGE_SIZE);
1884 + const int m = DIV_ROUND_UP(omap_obj->width << fmt, PAGE_SIZE);
1885
1886 if (m > 1) {
1887 int i;
1888 @@ -442,7 +442,7 @@ static int fault_2d(struct drm_gem_object *obj,
1889 * into account in some of the math, so figure out virtual stride
1890 * in pages
1891 */
1892 - const int m = 1 + ((omap_obj->width << fmt) / PAGE_SIZE);
1893 + const int m = DIV_ROUND_UP(omap_obj->width << fmt, PAGE_SIZE);
1894
1895 /* We don't use vmf->pgoff since that has the fake offset: */
1896 pgoff = ((unsigned long)vmf->virtual_address -
1897 diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
1898 index 9e77fc034e0a..aad2f4a2a0ef 100644
1899 --- a/drivers/gpu/drm/sun4i/sun4i_drv.c
1900 +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
1901 @@ -212,6 +212,11 @@ static const struct component_master_ops sun4i_drv_master_ops = {
1902 .unbind = sun4i_drv_unbind,
1903 };
1904
1905 +static bool sun4i_drv_node_is_connector(struct device_node *node)
1906 +{
1907 + return of_device_is_compatible(node, "hdmi-connector");
1908 +}
1909 +
1910 static bool sun4i_drv_node_is_frontend(struct device_node *node)
1911 {
1912 return of_device_is_compatible(node, "allwinner,sun5i-a13-display-frontend") ||
1913 @@ -252,6 +257,13 @@ static int sun4i_drv_add_endpoints(struct device *dev,
1914 !of_device_is_available(node))
1915 return 0;
1916
1917 + /*
1918 + * The connectors will be the last nodes in our pipeline, we
1919 + * can just bail out.
1920 + */
1921 + if (sun4i_drv_node_is_connector(node))
1922 + return 0;
1923 +
1924 if (!sun4i_drv_node_is_frontend(node)) {
1925 /* Add current component */
1926 DRM_DEBUG_DRIVER("Adding component %s\n",
1927 diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c
1928 index ab3016982466..b608cd463d4e 100644
1929 --- a/drivers/gpu/drm/vc4/vc4_gem.c
1930 +++ b/drivers/gpu/drm/vc4/vc4_gem.c
1931 @@ -110,8 +110,8 @@ vc4_get_hang_state_ioctl(struct drm_device *dev, void *data,
1932 &handle);
1933
1934 if (ret) {
1935 - state->bo_count = i - 1;
1936 - goto err;
1937 + state->bo_count = i;
1938 + goto err_delete_handle;
1939 }
1940 bo_state[i].handle = handle;
1941 bo_state[i].paddr = vc4_bo->base.paddr;
1942 @@ -123,13 +123,16 @@ vc4_get_hang_state_ioctl(struct drm_device *dev, void *data,
1943 state->bo_count * sizeof(*bo_state)))
1944 ret = -EFAULT;
1945
1946 - kfree(bo_state);
1947 +err_delete_handle:
1948 + if (ret) {
1949 + for (i = 0; i < state->bo_count; i++)
1950 + drm_gem_handle_delete(file_priv, bo_state[i].handle);
1951 + }
1952
1953 err_free:
1954 -
1955 vc4_free_hang_state(dev, kernel_state);
1956 + kfree(bo_state);
1957
1958 -err:
1959 return ret;
1960 }
1961
1962 diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c
1963 index 865e7c262322..7d6da9b43dab 100644
1964 --- a/drivers/hid/i2c-hid/i2c-hid.c
1965 +++ b/drivers/hid/i2c-hid/i2c-hid.c
1966 @@ -968,6 +968,15 @@ static int i2c_hid_acpi_pdata(struct i2c_client *client,
1967 return ret < 0 && ret != -ENXIO ? ret : 0;
1968 }
1969
1970 +static void i2c_hid_acpi_fix_up_power(struct device *dev)
1971 +{
1972 + acpi_handle handle = ACPI_HANDLE(dev);
1973 + struct acpi_device *adev;
1974 +
1975 + if (handle && acpi_bus_get_device(handle, &adev) == 0)
1976 + acpi_device_fix_up_power(adev);
1977 +}
1978 +
1979 static const struct acpi_device_id i2c_hid_acpi_match[] = {
1980 {"ACPI0C50", 0 },
1981 {"PNP0C50", 0 },
1982 @@ -980,6 +989,8 @@ static inline int i2c_hid_acpi_pdata(struct i2c_client *client,
1983 {
1984 return -ENODEV;
1985 }
1986 +
1987 +static inline void i2c_hid_acpi_fix_up_power(struct device *dev) {}
1988 #endif
1989
1990 #ifdef CONFIG_OF
1991 @@ -1082,6 +1093,8 @@ static int i2c_hid_probe(struct i2c_client *client,
1992 if (ret < 0)
1993 goto err;
1994
1995 + i2c_hid_acpi_fix_up_power(&client->dev);
1996 +
1997 pm_runtime_get_noresume(&client->dev);
1998 pm_runtime_set_active(&client->dev);
1999 pm_runtime_enable(&client->dev);
2000 diff --git a/drivers/hwmon/ina2xx.c b/drivers/hwmon/ina2xx.c
2001 index b24f1d3045f0..a629f7c130f0 100644
2002 --- a/drivers/hwmon/ina2xx.c
2003 +++ b/drivers/hwmon/ina2xx.c
2004 @@ -94,18 +94,20 @@ enum ina2xx_ids { ina219, ina226 };
2005
2006 struct ina2xx_config {
2007 u16 config_default;
2008 - int calibration_factor;
2009 + int calibration_value;
2010 int registers;
2011 int shunt_div;
2012 int bus_voltage_shift;
2013 int bus_voltage_lsb; /* uV */
2014 - int power_lsb; /* uW */
2015 + int power_lsb_factor;
2016 };
2017
2018 struct ina2xx_data {
2019 const struct ina2xx_config *config;
2020
2021 long rshunt;
2022 + long current_lsb_uA;
2023 + long power_lsb_uW;
2024 struct mutex config_lock;
2025 struct regmap *regmap;
2026
2027 @@ -115,21 +117,21 @@ struct ina2xx_data {
2028 static const struct ina2xx_config ina2xx_config[] = {
2029 [ina219] = {
2030 .config_default = INA219_CONFIG_DEFAULT,
2031 - .calibration_factor = 40960000,
2032 + .calibration_value = 4096,
2033 .registers = INA219_REGISTERS,
2034 .shunt_div = 100,
2035 .bus_voltage_shift = 3,
2036 .bus_voltage_lsb = 4000,
2037 - .power_lsb = 20000,
2038 + .power_lsb_factor = 20,
2039 },
2040 [ina226] = {
2041 .config_default = INA226_CONFIG_DEFAULT,
2042 - .calibration_factor = 5120000,
2043 + .calibration_value = 2048,
2044 .registers = INA226_REGISTERS,
2045 .shunt_div = 400,
2046 .bus_voltage_shift = 0,
2047 .bus_voltage_lsb = 1250,
2048 - .power_lsb = 25000,
2049 + .power_lsb_factor = 25,
2050 },
2051 };
2052
2053 @@ -168,12 +170,16 @@ static u16 ina226_interval_to_reg(int interval)
2054 return INA226_SHIFT_AVG(avg_bits);
2055 }
2056
2057 +/*
2058 + * Calibration register is set to the best value, which eliminates
2059 + * truncation errors on calculating current register in hardware.
2060 + * According to datasheet (eq. 3) the best values are 2048 for
2061 + * ina226 and 4096 for ina219. They are hardcoded as calibration_value.
2062 + */
2063 static int ina2xx_calibrate(struct ina2xx_data *data)
2064 {
2065 - u16 val = DIV_ROUND_CLOSEST(data->config->calibration_factor,
2066 - data->rshunt);
2067 -
2068 - return regmap_write(data->regmap, INA2XX_CALIBRATION, val);
2069 + return regmap_write(data->regmap, INA2XX_CALIBRATION,
2070 + data->config->calibration_value);
2071 }
2072
2073 /*
2074 @@ -186,10 +192,6 @@ static int ina2xx_init(struct ina2xx_data *data)
2075 if (ret < 0)
2076 return ret;
2077
2078 - /*
2079 - * Set current LSB to 1mA, shunt is in uOhms
2080 - * (equation 13 in datasheet).
2081 - */
2082 return ina2xx_calibrate(data);
2083 }
2084
2085 @@ -267,15 +269,15 @@ static int ina2xx_get_value(struct ina2xx_data *data, u8 reg,
2086 val = DIV_ROUND_CLOSEST(val, 1000);
2087 break;
2088 case INA2XX_POWER:
2089 - val = regval * data->config->power_lsb;
2090 + val = regval * data->power_lsb_uW;
2091 break;
2092 case INA2XX_CURRENT:
2093 - /* signed register, LSB=1mA (selected), in mA */
2094 - val = (s16)regval;
2095 + /* signed register, result in mA */
2096 + val = regval * data->current_lsb_uA;
2097 + val = DIV_ROUND_CLOSEST(val, 1000);
2098 break;
2099 case INA2XX_CALIBRATION:
2100 - val = DIV_ROUND_CLOSEST(data->config->calibration_factor,
2101 - regval);
2102 + val = regval;
2103 break;
2104 default:
2105 /* programmer goofed */
2106 @@ -303,9 +305,32 @@ static ssize_t ina2xx_show_value(struct device *dev,
2107 ina2xx_get_value(data, attr->index, regval));
2108 }
2109
2110 -static ssize_t ina2xx_set_shunt(struct device *dev,
2111 - struct device_attribute *da,
2112 - const char *buf, size_t count)
2113 +/*
2114 + * In order to keep calibration register value fixed, the product
2115 + * of current_lsb and shunt_resistor should also be fixed and equal
2116 + * to shunt_voltage_lsb = 1 / shunt_div multiplied by 10^9 in order
2117 + * to keep the scale.
2118 + */
2119 +static int ina2xx_set_shunt(struct ina2xx_data *data, long val)
2120 +{
2121 + unsigned int dividend = DIV_ROUND_CLOSEST(1000000000,
2122 + data->config->shunt_div);
2123 + if (val <= 0 || val > dividend)
2124 + return -EINVAL;
2125 +
2126 + mutex_lock(&data->config_lock);
2127 + data->rshunt = val;
2128 + data->current_lsb_uA = DIV_ROUND_CLOSEST(dividend, val);
2129 + data->power_lsb_uW = data->config->power_lsb_factor *
2130 + data->current_lsb_uA;
2131 + mutex_unlock(&data->config_lock);
2132 +
2133 + return 0;
2134 +}
2135 +
2136 +static ssize_t ina2xx_store_shunt(struct device *dev,
2137 + struct device_attribute *da,
2138 + const char *buf, size_t count)
2139 {
2140 unsigned long val;
2141 int status;
2142 @@ -315,18 +340,9 @@ static ssize_t ina2xx_set_shunt(struct device *dev,
2143 if (status < 0)
2144 return status;
2145
2146 - if (val == 0 ||
2147 - /* Values greater than the calibration factor make no sense. */
2148 - val > data->config->calibration_factor)
2149 - return -EINVAL;
2150 -
2151 - mutex_lock(&data->config_lock);
2152 - data->rshunt = val;
2153 - status = ina2xx_calibrate(data);
2154 - mutex_unlock(&data->config_lock);
2155 + status = ina2xx_set_shunt(data, val);
2156 if (status < 0)
2157 return status;
2158 -
2159 return count;
2160 }
2161
2162 @@ -386,7 +402,7 @@ static SENSOR_DEVICE_ATTR(power1_input, S_IRUGO, ina2xx_show_value, NULL,
2163
2164 /* shunt resistance */
2165 static SENSOR_DEVICE_ATTR(shunt_resistor, S_IRUGO | S_IWUSR,
2166 - ina2xx_show_value, ina2xx_set_shunt,
2167 + ina2xx_show_value, ina2xx_store_shunt,
2168 INA2XX_CALIBRATION);
2169
2170 /* update interval (ina226 only) */
2171 @@ -441,10 +457,7 @@ static int ina2xx_probe(struct i2c_client *client,
2172 val = INA2XX_RSHUNT_DEFAULT;
2173 }
2174
2175 - if (val <= 0 || val > data->config->calibration_factor)
2176 - return -ENODEV;
2177 -
2178 - data->rshunt = val;
2179 + ina2xx_set_shunt(data, val);
2180
2181 ina2xx_regmap_config.max_register = data->config->registers;
2182
2183 diff --git a/drivers/hwtracing/coresight/coresight-tmc.c b/drivers/hwtracing/coresight/coresight-tmc.c
2184 index d8517d2a968c..864488793f09 100644
2185 --- a/drivers/hwtracing/coresight/coresight-tmc.c
2186 +++ b/drivers/hwtracing/coresight/coresight-tmc.c
2187 @@ -362,6 +362,13 @@ static int tmc_probe(struct amba_device *adev, const struct amba_id *id)
2188 desc.type = CORESIGHT_DEV_TYPE_SINK;
2189 desc.subtype.sink_subtype = CORESIGHT_DEV_SUBTYPE_SINK_BUFFER;
2190 desc.ops = &tmc_etr_cs_ops;
2191 + /*
2192 + * ETR configuration uses a 40-bit AXI master in place of
2193 + * the embedded SRAM of ETB/ETF.
2194 + */
2195 + ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(40));
2196 + if (ret)
2197 + goto out;
2198 } else {
2199 desc.type = CORESIGHT_DEV_TYPE_LINKSINK;
2200 desc.subtype.link_subtype = CORESIGHT_DEV_SUBTYPE_LINK_FIFO;
2201 diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c
2202 index 7bf00a0beb6f..4383324ec01c 100644
2203 --- a/drivers/hwtracing/coresight/coresight.c
2204 +++ b/drivers/hwtracing/coresight/coresight.c
2205 @@ -498,6 +498,9 @@ int coresight_enable(struct coresight_device *csdev)
2206 {
2207 int cpu, ret = 0;
2208 struct list_head *path;
2209 + enum coresight_dev_subtype_source subtype;
2210 +
2211 + subtype = csdev->subtype.source_subtype;
2212
2213 mutex_lock(&coresight_mutex);
2214
2215 @@ -505,8 +508,16 @@ int coresight_enable(struct coresight_device *csdev)
2216 if (ret)
2217 goto out;
2218
2219 - if (csdev->enable)
2220 + if (csdev->enable) {
2221 + /*
2222 + * There could be multiple applications driving the software
2223 + * source. So keep the refcount for each such user when the
2224 + * source is already enabled.
2225 + */
2226 + if (subtype == CORESIGHT_DEV_SUBTYPE_SOURCE_SOFTWARE)
2227 + atomic_inc(csdev->refcnt);
2228 goto out;
2229 + }
2230
2231 path = coresight_build_path(csdev);
2232 if (IS_ERR(path)) {
2233 @@ -523,7 +534,7 @@ int coresight_enable(struct coresight_device *csdev)
2234 if (ret)
2235 goto err_source;
2236
2237 - switch (csdev->subtype.source_subtype) {
2238 + switch (subtype) {
2239 case CORESIGHT_DEV_SUBTYPE_SOURCE_PROC:
2240 /*
2241 * When working from sysFS it is important to keep track
2242 diff --git a/drivers/i2c/muxes/i2c-mux-reg.c b/drivers/i2c/muxes/i2c-mux-reg.c
2243 index c6a90b4a9c62..91b10afc8c34 100644
2244 --- a/drivers/i2c/muxes/i2c-mux-reg.c
2245 +++ b/drivers/i2c/muxes/i2c-mux-reg.c
2246 @@ -196,20 +196,25 @@ static int i2c_mux_reg_probe(struct platform_device *pdev)
2247 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2248 mux->data.reg_size = resource_size(res);
2249 mux->data.reg = devm_ioremap_resource(&pdev->dev, res);
2250 - if (IS_ERR(mux->data.reg))
2251 - return PTR_ERR(mux->data.reg);
2252 + if (IS_ERR(mux->data.reg)) {
2253 + ret = PTR_ERR(mux->data.reg);
2254 + goto err_put_parent;
2255 + }
2256 }
2257
2258 if (mux->data.reg_size != 4 && mux->data.reg_size != 2 &&
2259 mux->data.reg_size != 1) {
2260 dev_err(&pdev->dev, "Invalid register size\n");
2261 - return -EINVAL;
2262 + ret = -EINVAL;
2263 + goto err_put_parent;
2264 }
2265
2266 muxc = i2c_mux_alloc(parent, &pdev->dev, mux->data.n_values, 0, 0,
2267 i2c_mux_reg_select, NULL);
2268 - if (!muxc)
2269 - return -ENOMEM;
2270 + if (!muxc) {
2271 + ret = -ENOMEM;
2272 + goto err_put_parent;
2273 + }
2274 muxc->priv = mux;
2275
2276 platform_set_drvdata(pdev, muxc);
2277 @@ -235,6 +240,8 @@ static int i2c_mux_reg_probe(struct platform_device *pdev)
2278
2279 add_adapter_failed:
2280 i2c_mux_del_adapters(muxc);
2281 +err_put_parent:
2282 + i2c_put_adapter(parent);
2283
2284 return ret;
2285 }
2286 diff --git a/drivers/iio/adc/hi8435.c b/drivers/iio/adc/hi8435.c
2287 index 678e8c7ea763..fec696ec3fd1 100644
2288 --- a/drivers/iio/adc/hi8435.c
2289 +++ b/drivers/iio/adc/hi8435.c
2290 @@ -121,10 +121,21 @@ static int hi8435_write_event_config(struct iio_dev *idev,
2291 enum iio_event_direction dir, int state)
2292 {
2293 struct hi8435_priv *priv = iio_priv(idev);
2294 + int ret;
2295 + u32 tmp;
2296 +
2297 + if (state) {
2298 + ret = hi8435_readl(priv, HI8435_SO31_0_REG, &tmp);
2299 + if (ret < 0)
2300 + return ret;
2301 + if (tmp & BIT(chan->channel))
2302 + priv->event_prev_val |= BIT(chan->channel);
2303 + else
2304 + priv->event_prev_val &= ~BIT(chan->channel);
2305
2306 - priv->event_scan_mask &= ~BIT(chan->channel);
2307 - if (state)
2308 priv->event_scan_mask |= BIT(chan->channel);
2309 + } else
2310 + priv->event_scan_mask &= ~BIT(chan->channel);
2311
2312 return 0;
2313 }
2314 @@ -442,13 +453,15 @@ static int hi8435_probe(struct spi_device *spi)
2315 priv->spi = spi;
2316
2317 reset_gpio = devm_gpiod_get(&spi->dev, NULL, GPIOD_OUT_LOW);
2318 - if (IS_ERR(reset_gpio)) {
2319 - /* chip s/w reset if h/w reset failed */
2320 + if (!IS_ERR(reset_gpio)) {
2321 + /* need >=100ns low pulse to reset chip */
2322 + gpiod_set_raw_value_cansleep(reset_gpio, 0);
2323 + udelay(1);
2324 + gpiod_set_raw_value_cansleep(reset_gpio, 1);
2325 + } else {
2326 + /* s/w reset chip if h/w reset is not available */
2327 hi8435_writeb(priv, HI8435_CTRL_REG, HI8435_CTRL_SRST);
2328 hi8435_writeb(priv, HI8435_CTRL_REG, 0);
2329 - } else {
2330 - udelay(5);
2331 - gpiod_set_value(reset_gpio, 1);
2332 }
2333
2334 spi_set_drvdata(spi, idev);
2335 diff --git a/drivers/iio/light/rpr0521.c b/drivers/iio/light/rpr0521.c
2336 index 7de0f397194b..d23cf7759ee7 100644
2337 --- a/drivers/iio/light/rpr0521.c
2338 +++ b/drivers/iio/light/rpr0521.c
2339 @@ -510,13 +510,26 @@ static int rpr0521_probe(struct i2c_client *client,
2340
2341 ret = pm_runtime_set_active(&client->dev);
2342 if (ret < 0)
2343 - return ret;
2344 + goto err_poweroff;
2345
2346 pm_runtime_enable(&client->dev);
2347 pm_runtime_set_autosuspend_delay(&client->dev, RPR0521_SLEEP_DELAY_MS);
2348 pm_runtime_use_autosuspend(&client->dev);
2349
2350 - return iio_device_register(indio_dev);
2351 + ret = iio_device_register(indio_dev);
2352 + if (ret)
2353 + goto err_pm_disable;
2354 +
2355 + return 0;
2356 +
2357 +err_pm_disable:
2358 + pm_runtime_disable(&client->dev);
2359 + pm_runtime_set_suspended(&client->dev);
2360 + pm_runtime_put_noidle(&client->dev);
2361 +err_poweroff:
2362 + rpr0521_poweroff(data);
2363 +
2364 + return ret;
2365 }
2366
2367 static int rpr0521_remove(struct i2c_client *client)
2368 diff --git a/drivers/iio/magnetometer/st_magn_spi.c b/drivers/iio/magnetometer/st_magn_spi.c
2369 index 6325e7dc8e03..f3cb4dc05391 100644
2370 --- a/drivers/iio/magnetometer/st_magn_spi.c
2371 +++ b/drivers/iio/magnetometer/st_magn_spi.c
2372 @@ -48,8 +48,6 @@ static int st_magn_spi_remove(struct spi_device *spi)
2373 }
2374
2375 static const struct spi_device_id st_magn_id_table[] = {
2376 - { LSM303DLHC_MAGN_DEV_NAME },
2377 - { LSM303DLM_MAGN_DEV_NAME },
2378 { LIS3MDL_MAGN_DEV_NAME },
2379 { LSM303AGR_MAGN_DEV_NAME },
2380 {},
2381 diff --git a/drivers/iio/pressure/zpa2326.c b/drivers/iio/pressure/zpa2326.c
2382 index 19d2eb46fda6..2a4a62ebfd8d 100644
2383 --- a/drivers/iio/pressure/zpa2326.c
2384 +++ b/drivers/iio/pressure/zpa2326.c
2385 @@ -871,12 +871,13 @@ static int zpa2326_wait_oneshot_completion(const struct iio_dev *indio_dev,
2386 {
2387 int ret;
2388 unsigned int val;
2389 + long timeout;
2390
2391 zpa2326_dbg(indio_dev, "waiting for one shot completion interrupt");
2392
2393 - ret = wait_for_completion_interruptible_timeout(
2394 + timeout = wait_for_completion_interruptible_timeout(
2395 &private->data_ready, ZPA2326_CONVERSION_JIFFIES);
2396 - if (ret > 0)
2397 + if (timeout > 0)
2398 /*
2399 * Interrupt handler completed before timeout: return operation
2400 * status.
2401 @@ -886,13 +887,16 @@ static int zpa2326_wait_oneshot_completion(const struct iio_dev *indio_dev,
2402 /* Clear all interrupts just to be sure. */
2403 regmap_read(private->regmap, ZPA2326_INT_SOURCE_REG, &val);
2404
2405 - if (!ret)
2406 + if (!timeout) {
2407 /* Timed out. */
2408 + zpa2326_warn(indio_dev, "no one shot interrupt occurred (%ld)",
2409 + timeout);
2410 ret = -ETIME;
2411 -
2412 - if (ret != -ERESTARTSYS)
2413 - zpa2326_warn(indio_dev, "no one shot interrupt occurred (%d)",
2414 - ret);
2415 + } else if (timeout < 0) {
2416 + zpa2326_warn(indio_dev,
2417 + "wait for one shot interrupt cancelled");
2418 + ret = -ERESTARTSYS;
2419 + }
2420
2421 return ret;
2422 }
2423 diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
2424 index 6512a555f7f8..dd18b74cd01d 100644
2425 --- a/drivers/infiniband/hw/cxgb4/cm.c
2426 +++ b/drivers/infiniband/hw/cxgb4/cm.c
2427 @@ -488,6 +488,7 @@ static int _put_ep_safe(struct c4iw_dev *dev, struct sk_buff *skb)
2428
2429 ep = *((struct c4iw_ep **)(skb->cb + 2 * sizeof(void *)));
2430 release_ep_resources(ep);
2431 + kfree_skb(skb);
2432 return 0;
2433 }
2434
2435 @@ -498,6 +499,7 @@ static int _put_pass_ep_safe(struct c4iw_dev *dev, struct sk_buff *skb)
2436 ep = *((struct c4iw_ep **)(skb->cb + 2 * sizeof(void *)));
2437 c4iw_put_ep(&ep->parent_ep->com);
2438 release_ep_resources(ep);
2439 + kfree_skb(skb);
2440 return 0;
2441 }
2442
2443 @@ -569,11 +571,13 @@ static void abort_arp_failure(void *handle, struct sk_buff *skb)
2444
2445 PDBG("%s rdev %p\n", __func__, rdev);
2446 req->cmd = CPL_ABORT_NO_RST;
2447 + skb_get(skb);
2448 ret = c4iw_ofld_send(rdev, skb);
2449 if (ret) {
2450 __state_set(&ep->com, DEAD);
2451 queue_arp_failure_cpl(ep, skb, FAKE_CPL_PUT_EP_SAFE);
2452 - }
2453 + } else
2454 + kfree_skb(skb);
2455 }
2456
2457 static int send_flowc(struct c4iw_ep *ep)
2458 diff --git a/drivers/infiniband/hw/hfi1/sysfs.c b/drivers/infiniband/hw/hfi1/sysfs.c
2459 index 919a5474e651..621b60ab74ee 100644
2460 --- a/drivers/infiniband/hw/hfi1/sysfs.c
2461 +++ b/drivers/infiniband/hw/hfi1/sysfs.c
2462 @@ -196,7 +196,8 @@ static const struct sysfs_ops port_cc_sysfs_ops = {
2463 };
2464
2465 static struct attribute *port_cc_default_attributes[] = {
2466 - &cc_prescan_attr.attr
2467 + &cc_prescan_attr.attr,
2468 + NULL
2469 };
2470
2471 static struct kobj_type port_cc_ktype = {
2472 diff --git a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
2473 index 2c4b4d072d6a..3b973cba8975 100644
2474 --- a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
2475 +++ b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
2476 @@ -3644,8 +3644,10 @@ enum i40iw_status_code i40iw_config_fpm_values(struct i40iw_sc_dev *dev, u32 qp_
2477 hmc_info->hmc_obj[I40IW_HMC_IW_APBVT_ENTRY].cnt = 1;
2478 hmc_info->hmc_obj[I40IW_HMC_IW_MR].cnt = mrwanted;
2479
2480 - hmc_info->hmc_obj[I40IW_HMC_IW_XF].cnt = I40IW_MAX_WQ_ENTRIES * qpwanted;
2481 - hmc_info->hmc_obj[I40IW_HMC_IW_Q1].cnt = 4 * I40IW_MAX_IRD_SIZE * qpwanted;
2482 + hmc_info->hmc_obj[I40IW_HMC_IW_XF].cnt =
2483 + roundup_pow_of_two(I40IW_MAX_WQ_ENTRIES * qpwanted);
2484 + hmc_info->hmc_obj[I40IW_HMC_IW_Q1].cnt =
2485 + roundup_pow_of_two(2 * I40IW_MAX_IRD_SIZE * qpwanted);
2486 hmc_info->hmc_obj[I40IW_HMC_IW_XFFL].cnt =
2487 hmc_info->hmc_obj[I40IW_HMC_IW_XF].cnt / hmc_fpm_misc->xf_block_size;
2488 hmc_info->hmc_obj[I40IW_HMC_IW_Q1FL].cnt =
2489 diff --git a/drivers/infiniband/hw/i40iw/i40iw_d.h b/drivers/infiniband/hw/i40iw/i40iw_d.h
2490 index d1328a697750..8ce599e1639c 100644
2491 --- a/drivers/infiniband/hw/i40iw/i40iw_d.h
2492 +++ b/drivers/infiniband/hw/i40iw/i40iw_d.h
2493 @@ -86,6 +86,7 @@
2494 #define RDMA_OPCODE_MASK 0x0f
2495 #define RDMA_READ_REQ_OPCODE 1
2496 #define Q2_BAD_FRAME_OFFSET 72
2497 +#define Q2_FPSN_OFFSET 64
2498 #define CQE_MAJOR_DRV 0x8000
2499
2500 #define I40IW_TERM_SENT 0x01
2501 diff --git a/drivers/infiniband/hw/i40iw/i40iw_puda.c b/drivers/infiniband/hw/i40iw/i40iw_puda.c
2502 index c62d354f7810..3ed49146d73c 100644
2503 --- a/drivers/infiniband/hw/i40iw/i40iw_puda.c
2504 +++ b/drivers/infiniband/hw/i40iw/i40iw_puda.c
2505 @@ -1320,7 +1320,7 @@ static void i40iw_ieq_handle_exception(struct i40iw_puda_rsrc *ieq,
2506 u32 *hw_host_ctx = (u32 *)qp->hw_host_ctx;
2507 u32 rcv_wnd = hw_host_ctx[23];
2508 /* first partial seq # in q2 */
2509 - u32 fps = qp->q2_buf[16];
2510 + u32 fps = *(u32 *)(qp->q2_buf + Q2_FPSN_OFFSET);
2511 struct list_head *rxlist = &pfpdu->rxlist;
2512 struct list_head *plist;
2513
2514 diff --git a/drivers/infiniband/sw/rdmavt/cq.c b/drivers/infiniband/sw/rdmavt/cq.c
2515 index 6d9904a4a0ab..29dc5278d7be 100644
2516 --- a/drivers/infiniband/sw/rdmavt/cq.c
2517 +++ b/drivers/infiniband/sw/rdmavt/cq.c
2518 @@ -197,7 +197,7 @@ struct ib_cq *rvt_create_cq(struct ib_device *ibdev,
2519 return ERR_PTR(-EINVAL);
2520
2521 /* Allocate the completion queue structure. */
2522 - cq = kzalloc(sizeof(*cq), GFP_KERNEL);
2523 + cq = kzalloc_node(sizeof(*cq), GFP_KERNEL, rdi->dparms.node);
2524 if (!cq)
2525 return ERR_PTR(-ENOMEM);
2526
2527 @@ -213,7 +213,9 @@ struct ib_cq *rvt_create_cq(struct ib_device *ibdev,
2528 sz += sizeof(struct ib_uverbs_wc) * (entries + 1);
2529 else
2530 sz += sizeof(struct ib_wc) * (entries + 1);
2531 - wc = vmalloc_user(sz);
2532 + wc = udata ?
2533 + vmalloc_user(sz) :
2534 + vzalloc_node(sz, rdi->dparms.node);
2535 if (!wc) {
2536 ret = ERR_PTR(-ENOMEM);
2537 goto bail_cq;
2538 @@ -368,7 +370,9 @@ int rvt_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata)
2539 sz += sizeof(struct ib_uverbs_wc) * (cqe + 1);
2540 else
2541 sz += sizeof(struct ib_wc) * (cqe + 1);
2542 - wc = vmalloc_user(sz);
2543 + wc = udata ?
2544 + vmalloc_user(sz) :
2545 + vzalloc_node(sz, rdi->dparms.node);
2546 if (!wc)
2547 return -ENOMEM;
2548
2549 diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c
2550 index 29ab814693fc..876f438aa048 100644
2551 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c
2552 +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
2553 @@ -2292,12 +2292,8 @@ static void srpt_queue_response(struct se_cmd *cmd)
2554 }
2555 spin_unlock_irqrestore(&ioctx->spinlock, flags);
2556
2557 - if (unlikely(transport_check_aborted_status(&ioctx->cmd, false)
2558 - || WARN_ON_ONCE(state == SRPT_STATE_CMD_RSP_SENT))) {
2559 - atomic_inc(&ch->req_lim_delta);
2560 - srpt_abort_cmd(ioctx);
2561 + if (unlikely(WARN_ON_ONCE(state == SRPT_STATE_CMD_RSP_SENT)))
2562 return;
2563 - }
2564
2565 /* For read commands, transfer the data to the initiator. */
2566 if (ioctx->cmd.data_direction == DMA_FROM_DEVICE &&
2567 @@ -2670,7 +2666,8 @@ static void srpt_release_cmd(struct se_cmd *se_cmd)
2568 struct srpt_rdma_ch *ch = ioctx->ch;
2569 unsigned long flags;
2570
2571 - WARN_ON(ioctx->state != SRPT_STATE_DONE);
2572 + WARN_ON_ONCE(ioctx->state != SRPT_STATE_DONE &&
2573 + !(ioctx->cmd.transport_state & CMD_T_ABORTED));
2574
2575 if (ioctx->n_rw_ctx) {
2576 srpt_free_rw_ctxs(ch, ioctx);
2577 diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
2578 index c9d491bc85e0..3851d5715772 100644
2579 --- a/drivers/input/mouse/elan_i2c_core.c
2580 +++ b/drivers/input/mouse/elan_i2c_core.c
2581 @@ -1082,6 +1082,13 @@ static int elan_probe(struct i2c_client *client,
2582 return error;
2583 }
2584
2585 + /* Make sure there is something at this address */
2586 + error = i2c_smbus_read_byte(client);
2587 + if (error < 0) {
2588 + dev_dbg(&client->dev, "nothing at this address: %d\n", error);
2589 + return -ENXIO;
2590 + }
2591 +
2592 /* Initialize the touchpad. */
2593 error = elan_initialize(data);
2594 if (error)
2595 diff --git a/drivers/input/mouse/elan_i2c_i2c.c b/drivers/input/mouse/elan_i2c_i2c.c
2596 index a679e56c44cd..765879dcaf85 100644
2597 --- a/drivers/input/mouse/elan_i2c_i2c.c
2598 +++ b/drivers/input/mouse/elan_i2c_i2c.c
2599 @@ -557,7 +557,14 @@ static int elan_i2c_finish_fw_update(struct i2c_client *client,
2600 long ret;
2601 int error;
2602 int len;
2603 - u8 buffer[ETP_I2C_INF_LENGTH];
2604 + u8 buffer[ETP_I2C_REPORT_LEN];
2605 +
2606 + len = i2c_master_recv(client, buffer, ETP_I2C_REPORT_LEN);
2607 + if (len != ETP_I2C_REPORT_LEN) {
2608 + error = len < 0 ? len : -EIO;
2609 + dev_warn(dev, "failed to read I2C data after FW WDT reset: %d (%d)\n",
2610 + error, len);
2611 + }
2612
2613 reinit_completion(completion);
2614 enable_irq(client->irq);
2615 diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
2616 index 59603a5728f7..c519c0b09568 100644
2617 --- a/drivers/input/mouse/elantech.c
2618 +++ b/drivers/input/mouse/elantech.c
2619 @@ -1711,6 +1711,17 @@ int elantech_init(struct psmouse *psmouse)
2620 etd->samples[0], etd->samples[1], etd->samples[2]);
2621 }
2622
2623 + if (etd->samples[1] == 0x74 && etd->hw_version == 0x03) {
2624 + /*
2625 + * This module has a bug which makes absolute mode
2626 + * unusable, so let's abort so we'll be using standard
2627 + * PS/2 protocol.
2628 + */
2629 + psmouse_info(psmouse,
2630 + "absolute mode broken, forcing standard PS/2 protocol\n");
2631 + goto init_fail;
2632 + }
2633 +
2634 if (elantech_set_absolute_mode(psmouse)) {
2635 psmouse_err(psmouse,
2636 "failed to put touchpad into absolute mode.\n");
2637 diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c
2638 index 240b16f3ee97..5907fddcc966 100644
2639 --- a/drivers/input/touchscreen/goodix.c
2640 +++ b/drivers/input/touchscreen/goodix.c
2641 @@ -778,8 +778,10 @@ static int __maybe_unused goodix_suspend(struct device *dev)
2642 int error;
2643
2644 /* We need gpio pins to suspend/resume */
2645 - if (!ts->gpiod_int || !ts->gpiod_rst)
2646 + if (!ts->gpiod_int || !ts->gpiod_rst) {
2647 + disable_irq(client->irq);
2648 return 0;
2649 + }
2650
2651 wait_for_completion(&ts->firmware_loading_complete);
2652
2653 @@ -819,8 +821,10 @@ static int __maybe_unused goodix_resume(struct device *dev)
2654 struct goodix_ts_data *ts = i2c_get_clientdata(client);
2655 int error;
2656
2657 - if (!ts->gpiod_int || !ts->gpiod_rst)
2658 + if (!ts->gpiod_int || !ts->gpiod_rst) {
2659 + enable_irq(client->irq);
2660 return 0;
2661 + }
2662
2663 /*
2664 * Exit sleep mode by outputting HIGH level to INT pin
2665 diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
2666 index fd4a78296b48..100c80e48190 100644
2667 --- a/drivers/irqchip/irq-gic-v3.c
2668 +++ b/drivers/irqchip/irq-gic-v3.c
2669 @@ -1250,6 +1250,10 @@ gic_acpi_parse_madt_gicc(struct acpi_subtable_header *header,
2670 u32 size = reg == GIC_PIDR2_ARCH_GICv4 ? SZ_64K * 4 : SZ_64K * 2;
2671 void __iomem *redist_base;
2672
2673 + /* GICC entry which has !ACPI_MADT_ENABLED is not unusable so skip */
2674 + if (!(gicc->flags & ACPI_MADT_ENABLED))
2675 + return 0;
2676 +
2677 redist_base = ioremap(gicc->gicr_base_address, size);
2678 if (!redist_base)
2679 return -ENOMEM;
2680 @@ -1299,6 +1303,13 @@ static int __init gic_acpi_match_gicc(struct acpi_subtable_header *header,
2681 if ((gicc->flags & ACPI_MADT_ENABLED) && gicc->gicr_base_address)
2682 return 0;
2683
2684 + /*
2685 + * It's perfectly valid firmware can pass disabled GICC entry, driver
2686 + * should not treat as errors, skip the entry instead of probe fail.
2687 + */
2688 + if (!(gicc->flags & ACPI_MADT_ENABLED))
2689 + return 0;
2690 +
2691 return -ENODEV;
2692 }
2693
2694 diff --git a/drivers/irqchip/irq-mbigen.c b/drivers/irqchip/irq-mbigen.c
2695 index 03b79b061d24..05d87f60d929 100644
2696 --- a/drivers/irqchip/irq-mbigen.c
2697 +++ b/drivers/irqchip/irq-mbigen.c
2698 @@ -105,10 +105,7 @@ static inline void get_mbigen_type_reg(irq_hw_number_t hwirq,
2699 static inline void get_mbigen_clear_reg(irq_hw_number_t hwirq,
2700 u32 *mask, u32 *addr)
2701 {
2702 - unsigned int ofst;
2703 -
2704 - hwirq -= RESERVED_IRQ_PER_MBIGEN_CHIP;
2705 - ofst = hwirq / 32 * 4;
2706 + unsigned int ofst = (hwirq / 32) * 4;
2707
2708 *mask = 1 << (hwirq % 32);
2709 *addr = ofst + REG_MBIGEN_CLEAR_OFFSET;
2710 diff --git a/drivers/isdn/mISDN/stack.c b/drivers/isdn/mISDN/stack.c
2711 index 9cb4b621fbc3..b92a19a594a1 100644
2712 --- a/drivers/isdn/mISDN/stack.c
2713 +++ b/drivers/isdn/mISDN/stack.c
2714 @@ -72,7 +72,7 @@ send_socklist(struct mISDN_sock_list *sl, struct sk_buff *skb)
2715 if (sk->sk_state != MISDN_BOUND)
2716 continue;
2717 if (!cskb)
2718 - cskb = skb_copy(skb, GFP_KERNEL);
2719 + cskb = skb_copy(skb, GFP_ATOMIC);
2720 if (!cskb) {
2721 printk(KERN_WARNING "%s no skb\n", __func__);
2722 break;
2723 diff --git a/drivers/leds/leds-pca955x.c b/drivers/leds/leds-pca955x.c
2724 index 840401ae9a4e..f6726484a8a1 100644
2725 --- a/drivers/leds/leds-pca955x.c
2726 +++ b/drivers/leds/leds-pca955x.c
2727 @@ -266,7 +266,7 @@ static int pca955x_probe(struct i2c_client *client,
2728 "slave address 0x%02x\n",
2729 id->name, chip->bits, client->addr);
2730
2731 - if (!i2c_check_functionality(adapter, I2C_FUNC_I2C))
2732 + if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
2733 return -EIO;
2734
2735 if (pdata) {
2736 diff --git a/drivers/md/bcache/alloc.c b/drivers/md/bcache/alloc.c
2737 index 537903bf9add..d23337e8c4ee 100644
2738 --- a/drivers/md/bcache/alloc.c
2739 +++ b/drivers/md/bcache/alloc.c
2740 @@ -512,15 +512,21 @@ struct open_bucket {
2741
2742 /*
2743 * We keep multiple buckets open for writes, and try to segregate different
2744 - * write streams for better cache utilization: first we look for a bucket where
2745 - * the last write to it was sequential with the current write, and failing that
2746 - * we look for a bucket that was last used by the same task.
2747 + * write streams for better cache utilization: first we try to segregate flash
2748 + * only volume write streams from cached devices, secondly we look for a bucket
2749 + * where the last write to it was sequential with the current write, and
2750 + * failing that we look for a bucket that was last used by the same task.
2751 *
2752 * The ideas is if you've got multiple tasks pulling data into the cache at the
2753 * same time, you'll get better cache utilization if you try to segregate their
2754 * data and preserve locality.
2755 *
2756 - * For example, say you've starting Firefox at the same time you're copying a
2757 + * For example, dirty sectors of flash only volume is not reclaimable, if their
2758 + * dirty sectors mixed with dirty sectors of cached device, such buckets will
2759 + * be marked as dirty and won't be reclaimed, though the dirty data of cached
2760 + * device have been written back to backend device.
2761 + *
2762 + * And say you've starting Firefox at the same time you're copying a
2763 * bunch of files. Firefox will likely end up being fairly hot and stay in the
2764 * cache awhile, but the data you copied might not be; if you wrote all that
2765 * data to the same buckets it'd get invalidated at the same time.
2766 @@ -537,7 +543,10 @@ static struct open_bucket *pick_data_bucket(struct cache_set *c,
2767 struct open_bucket *ret, *ret_task = NULL;
2768
2769 list_for_each_entry_reverse(ret, &c->data_buckets, list)
2770 - if (!bkey_cmp(&ret->key, search))
2771 + if (UUID_FLASH_ONLY(&c->uuids[KEY_INODE(&ret->key)]) !=
2772 + UUID_FLASH_ONLY(&c->uuids[KEY_INODE(search)]))
2773 + continue;
2774 + else if (!bkey_cmp(&ret->key, search))
2775 goto found;
2776 else if (ret->last_write_point == write_point)
2777 ret_task = ret;
2778 diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
2779 index c61341c84d2d..4af7cd423c71 100644
2780 --- a/drivers/md/bcache/super.c
2781 +++ b/drivers/md/bcache/super.c
2782 @@ -892,6 +892,12 @@ static void cached_dev_detach_finish(struct work_struct *w)
2783
2784 mutex_lock(&bch_register_lock);
2785
2786 + cancel_delayed_work_sync(&dc->writeback_rate_update);
2787 + if (!IS_ERR_OR_NULL(dc->writeback_thread)) {
2788 + kthread_stop(dc->writeback_thread);
2789 + dc->writeback_thread = NULL;
2790 + }
2791 +
2792 memset(&dc->sb.set_uuid, 0, 16);
2793 SET_BDEV_STATE(&dc->sb, BDEV_STATE_NONE);
2794
2795 diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c
2796 index ba7edcdd09ce..fcc2b5746a9f 100644
2797 --- a/drivers/md/md-cluster.c
2798 +++ b/drivers/md/md-cluster.c
2799 @@ -1122,8 +1122,10 @@ static int add_new_disk(struct mddev *mddev, struct md_rdev *rdev)
2800 cmsg.raid_slot = cpu_to_le32(rdev->desc_nr);
2801 lock_comm(cinfo);
2802 ret = __sendmsg(cinfo, &cmsg);
2803 - if (ret)
2804 + if (ret) {
2805 + unlock_comm(cinfo);
2806 return ret;
2807 + }
2808 cinfo->no_new_dev_lockres->flags |= DLM_LKF_NOQUEUE;
2809 ret = dlm_lock_sync(cinfo->no_new_dev_lockres, DLM_LOCK_EX);
2810 cinfo->no_new_dev_lockres->flags &= ~DLM_LKF_NOQUEUE;
2811 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
2812 index 4493be50fc6a..86ba7851e881 100644
2813 --- a/drivers/md/raid5.c
2814 +++ b/drivers/md/raid5.c
2815 @@ -110,8 +110,7 @@ static inline void unlock_device_hash_lock(struct r5conf *conf, int hash)
2816 static inline void lock_all_device_hash_locks_irq(struct r5conf *conf)
2817 {
2818 int i;
2819 - local_irq_disable();
2820 - spin_lock(conf->hash_locks);
2821 + spin_lock_irq(conf->hash_locks);
2822 for (i = 1; i < NR_STRIPE_HASH_LOCKS; i++)
2823 spin_lock_nest_lock(conf->hash_locks + i, conf->hash_locks);
2824 spin_lock(&conf->device_lock);
2825 @@ -121,9 +120,9 @@ static inline void unlock_all_device_hash_locks_irq(struct r5conf *conf)
2826 {
2827 int i;
2828 spin_unlock(&conf->device_lock);
2829 - for (i = NR_STRIPE_HASH_LOCKS; i; i--)
2830 - spin_unlock(conf->hash_locks + i - 1);
2831 - local_irq_enable();
2832 + for (i = NR_STRIPE_HASH_LOCKS - 1; i; i--)
2833 + spin_unlock(conf->hash_locks + i);
2834 + spin_unlock_irq(conf->hash_locks);
2835 }
2836
2837 /* bio's attached to a stripe+device for I/O are linked together in bi_sector
2838 @@ -732,12 +731,11 @@ static bool is_full_stripe_write(struct stripe_head *sh)
2839
2840 static void lock_two_stripes(struct stripe_head *sh1, struct stripe_head *sh2)
2841 {
2842 - local_irq_disable();
2843 if (sh1 > sh2) {
2844 - spin_lock(&sh2->stripe_lock);
2845 + spin_lock_irq(&sh2->stripe_lock);
2846 spin_lock_nested(&sh1->stripe_lock, 1);
2847 } else {
2848 - spin_lock(&sh1->stripe_lock);
2849 + spin_lock_irq(&sh1->stripe_lock);
2850 spin_lock_nested(&sh2->stripe_lock, 1);
2851 }
2852 }
2853 @@ -745,8 +743,7 @@ static void lock_two_stripes(struct stripe_head *sh1, struct stripe_head *sh2)
2854 static void unlock_two_stripes(struct stripe_head *sh1, struct stripe_head *sh2)
2855 {
2856 spin_unlock(&sh1->stripe_lock);
2857 - spin_unlock(&sh2->stripe_lock);
2858 - local_irq_enable();
2859 + spin_unlock_irq(&sh2->stripe_lock);
2860 }
2861
2862 /* Only freshly new full stripe normal write stripe can be added to a batch list */
2863 diff --git a/drivers/media/i2c/cx25840/cx25840-core.c b/drivers/media/i2c/cx25840/cx25840-core.c
2864 index 142ae28803bb..d558ed3e59c6 100644
2865 --- a/drivers/media/i2c/cx25840/cx25840-core.c
2866 +++ b/drivers/media/i2c/cx25840/cx25840-core.c
2867 @@ -420,11 +420,13 @@ static void cx25840_initialize(struct i2c_client *client)
2868 INIT_WORK(&state->fw_work, cx25840_work_handler);
2869 init_waitqueue_head(&state->fw_wait);
2870 q = create_singlethread_workqueue("cx25840_fw");
2871 - prepare_to_wait(&state->fw_wait, &wait, TASK_UNINTERRUPTIBLE);
2872 - queue_work(q, &state->fw_work);
2873 - schedule();
2874 - finish_wait(&state->fw_wait, &wait);
2875 - destroy_workqueue(q);
2876 + if (q) {
2877 + prepare_to_wait(&state->fw_wait, &wait, TASK_UNINTERRUPTIBLE);
2878 + queue_work(q, &state->fw_work);
2879 + schedule();
2880 + finish_wait(&state->fw_wait, &wait);
2881 + destroy_workqueue(q);
2882 + }
2883
2884 /* 6. */
2885 cx25840_write(client, 0x115, 0x8c);
2886 @@ -634,11 +636,13 @@ static void cx23885_initialize(struct i2c_client *client)
2887 INIT_WORK(&state->fw_work, cx25840_work_handler);
2888 init_waitqueue_head(&state->fw_wait);
2889 q = create_singlethread_workqueue("cx25840_fw");
2890 - prepare_to_wait(&state->fw_wait, &wait, TASK_UNINTERRUPTIBLE);
2891 - queue_work(q, &state->fw_work);
2892 - schedule();
2893 - finish_wait(&state->fw_wait, &wait);
2894 - destroy_workqueue(q);
2895 + if (q) {
2896 + prepare_to_wait(&state->fw_wait, &wait, TASK_UNINTERRUPTIBLE);
2897 + queue_work(q, &state->fw_work);
2898 + schedule();
2899 + finish_wait(&state->fw_wait, &wait);
2900 + destroy_workqueue(q);
2901 + }
2902
2903 /* Call the cx23888 specific std setup func, we no longer rely on
2904 * the generic cx24840 func.
2905 @@ -752,11 +756,13 @@ static void cx231xx_initialize(struct i2c_client *client)
2906 INIT_WORK(&state->fw_work, cx25840_work_handler);
2907 init_waitqueue_head(&state->fw_wait);
2908 q = create_singlethread_workqueue("cx25840_fw");
2909 - prepare_to_wait(&state->fw_wait, &wait, TASK_UNINTERRUPTIBLE);
2910 - queue_work(q, &state->fw_work);
2911 - schedule();
2912 - finish_wait(&state->fw_wait, &wait);
2913 - destroy_workqueue(q);
2914 + if (q) {
2915 + prepare_to_wait(&state->fw_wait, &wait, TASK_UNINTERRUPTIBLE);
2916 + queue_work(q, &state->fw_work);
2917 + schedule();
2918 + finish_wait(&state->fw_wait, &wait);
2919 + destroy_workqueue(q);
2920 + }
2921
2922 cx25840_std_setup(client);
2923
2924 diff --git a/drivers/media/platform/pxa_camera.c b/drivers/media/platform/pxa_camera.c
2925 index c12209c701d3..390d708c807a 100644
2926 --- a/drivers/media/platform/pxa_camera.c
2927 +++ b/drivers/media/platform/pxa_camera.c
2928 @@ -2169,6 +2169,12 @@ static void pxa_camera_sensor_unbind(struct v4l2_async_notifier *notifier,
2929 pxa_dma_stop_channels(pcdev);
2930
2931 pxa_camera_destroy_formats(pcdev);
2932 +
2933 + if (pcdev->mclk_clk) {
2934 + v4l2_clk_unregister(pcdev->mclk_clk);
2935 + pcdev->mclk_clk = NULL;
2936 + }
2937 +
2938 video_unregister_device(&pcdev->vdev);
2939 pcdev->sensor = NULL;
2940
2941 @@ -2495,7 +2501,13 @@ static int pxa_camera_remove(struct platform_device *pdev)
2942 dma_release_channel(pcdev->dma_chans[1]);
2943 dma_release_channel(pcdev->dma_chans[2]);
2944
2945 - v4l2_clk_unregister(pcdev->mclk_clk);
2946 + v4l2_async_notifier_unregister(&pcdev->notifier);
2947 +
2948 + if (pcdev->mclk_clk) {
2949 + v4l2_clk_unregister(pcdev->mclk_clk);
2950 + pcdev->mclk_clk = NULL;
2951 + }
2952 +
2953 v4l2_device_unregister(&pcdev->v4l2_dev);
2954
2955 dev_info(&pdev->dev, "PXA Camera driver unloaded\n");
2956 diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c
2957 index db525cdfac88..d9f88a4a96bd 100644
2958 --- a/drivers/media/rc/mceusb.c
2959 +++ b/drivers/media/rc/mceusb.c
2960 @@ -1381,8 +1381,13 @@ static int mceusb_dev_probe(struct usb_interface *intf,
2961 goto rc_dev_fail;
2962
2963 /* wire up inbound data handler */
2964 - usb_fill_int_urb(ir->urb_in, dev, pipe, ir->buf_in, maxp,
2965 - mceusb_dev_recv, ir, ep_in->bInterval);
2966 + if (usb_endpoint_xfer_int(ep_in))
2967 + usb_fill_int_urb(ir->urb_in, dev, pipe, ir->buf_in, maxp,
2968 + mceusb_dev_recv, ir, ep_in->bInterval);
2969 + else
2970 + usb_fill_bulk_urb(ir->urb_in, dev, pipe, ir->buf_in, maxp,
2971 + mceusb_dev_recv, ir);
2972 +
2973 ir->urb_in->transfer_dma = ir->dma_in;
2974 ir->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
2975
2976 diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
2977 index 9ccf7f5e0e2e..4299ce06c25b 100644
2978 --- a/drivers/media/v4l2-core/videobuf2-core.c
2979 +++ b/drivers/media/v4l2-core/videobuf2-core.c
2980 @@ -334,6 +334,10 @@ static int __vb2_queue_alloc(struct vb2_queue *q, enum vb2_memory memory,
2981 struct vb2_buffer *vb;
2982 int ret;
2983
2984 + /* Ensure that q->num_buffers+num_buffers is below VB2_MAX_FRAME */
2985 + num_buffers = min_t(unsigned int, num_buffers,
2986 + VB2_MAX_FRAME - q->num_buffers);
2987 +
2988 for (buffer = 0; buffer < num_buffers; ++buffer) {
2989 /* Allocate videobuf buffer structures */
2990 vb = kzalloc(q->buf_struct_size, GFP_KERNEL);
2991 diff --git a/drivers/misc/cxl/flash.c b/drivers/misc/cxl/flash.c
2992 index c63d61e17d56..381a9a166f93 100644
2993 --- a/drivers/misc/cxl/flash.c
2994 +++ b/drivers/misc/cxl/flash.c
2995 @@ -401,8 +401,10 @@ static int device_open(struct inode *inode, struct file *file)
2996 if (down_interruptible(&sem) != 0)
2997 return -EPERM;
2998
2999 - if (!(adapter = get_cxl_adapter(adapter_num)))
3000 - return -ENODEV;
3001 + if (!(adapter = get_cxl_adapter(adapter_num))) {
3002 + rc = -ENODEV;
3003 + goto err_unlock;
3004 + }
3005
3006 file->private_data = adapter;
3007 continue_token = 0;
3008 @@ -446,6 +448,8 @@ static int device_open(struct inode *inode, struct file *file)
3009 free_page((unsigned long) le);
3010 err:
3011 put_device(&adapter->dev);
3012 +err_unlock:
3013 + up(&sem);
3014
3015 return rc;
3016 }
3017 diff --git a/drivers/misc/vmw_vmci/vmci_queue_pair.c b/drivers/misc/vmw_vmci/vmci_queue_pair.c
3018 index f84a4275ca29..f735ab4ba84e 100644
3019 --- a/drivers/misc/vmw_vmci/vmci_queue_pair.c
3020 +++ b/drivers/misc/vmw_vmci/vmci_queue_pair.c
3021 @@ -298,8 +298,11 @@ static void *qp_alloc_queue(u64 size, u32 flags)
3022 size_t pas_size;
3023 size_t vas_size;
3024 size_t queue_size = sizeof(*queue) + sizeof(*queue->kernel_if);
3025 - const u64 num_pages = DIV_ROUND_UP(size, PAGE_SIZE) + 1;
3026 + u64 num_pages;
3027
3028 + if (size > SIZE_MAX - PAGE_SIZE)
3029 + return NULL;
3030 + num_pages = DIV_ROUND_UP(size, PAGE_SIZE) + 1;
3031 if (num_pages >
3032 (SIZE_MAX - queue_size) /
3033 (sizeof(*queue->kernel_if->u.g.pas) +
3034 @@ -624,9 +627,12 @@ static struct vmci_queue *qp_host_alloc_queue(u64 size)
3035 {
3036 struct vmci_queue *queue;
3037 size_t queue_page_size;
3038 - const u64 num_pages = DIV_ROUND_UP(size, PAGE_SIZE) + 1;
3039 + u64 num_pages;
3040 const size_t queue_size = sizeof(*queue) + sizeof(*(queue->kernel_if));
3041
3042 + if (size > SIZE_MAX - PAGE_SIZE)
3043 + return NULL;
3044 + num_pages = DIV_ROUND_UP(size, PAGE_SIZE) + 1;
3045 if (num_pages > (SIZE_MAX - queue_size) /
3046 sizeof(*queue->kernel_if->u.h.page))
3047 return NULL;
3048 diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c
3049 index b0b9ceb0ab01..cfb794766fea 100644
3050 --- a/drivers/mmc/host/sdhci-pci-core.c
3051 +++ b/drivers/mmc/host/sdhci-pci-core.c
3052 @@ -492,6 +492,8 @@ static int intel_mrfld_mmc_probe_slot(struct sdhci_pci_slot *slot)
3053 slot->host->quirks2 |= SDHCI_QUIRK2_NO_1_8_V;
3054 break;
3055 case INTEL_MRFLD_SDIO:
3056 + /* Advertise 2.0v for compatibility with the SDIO card's OCR */
3057 + slot->host->ocr_mask = MMC_VDD_20_21 | MMC_VDD_165_195;
3058 slot->host->mmc->caps |= MMC_CAP_NONREMOVABLE |
3059 MMC_CAP_POWER_OFF_CARD;
3060 break;
3061 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
3062 index 7d275e72903a..44ea9d88651f 100644
3063 --- a/drivers/mmc/host/sdhci.c
3064 +++ b/drivers/mmc/host/sdhci.c
3065 @@ -1404,6 +1404,13 @@ void sdhci_set_power_noreg(struct sdhci_host *host, unsigned char mode,
3066 if (mode != MMC_POWER_OFF) {
3067 switch (1 << vdd) {
3068 case MMC_VDD_165_195:
3069 + /*
3070 + * Without a regulator, SDHCI does not support 2.0v
3071 + * so we only get here if the driver deliberately
3072 + * added the 2.0v range to ocr_avail. Map it to 1.8v
3073 + * for the purpose of turning on the power.
3074 + */
3075 + case MMC_VDD_20_21:
3076 pwr = SDHCI_POWER_180;
3077 break;
3078 case MMC_VDD_29_30:
3079 diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
3080 index 427039b77668..d9dab4275859 100644
3081 --- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
3082 +++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
3083 @@ -2047,18 +2047,20 @@ static int gpmi_nand_init(struct gpmi_nand_data *this)
3084
3085 ret = nand_boot_init(this);
3086 if (ret)
3087 - goto err_out;
3088 + goto err_nand_cleanup;
3089 ret = chip->scan_bbt(mtd);
3090 if (ret)
3091 - goto err_out;
3092 + goto err_nand_cleanup;
3093
3094 ret = mtd_device_register(mtd, NULL, 0);
3095 if (ret)
3096 - goto err_out;
3097 + goto err_nand_cleanup;
3098 return 0;
3099
3100 +err_nand_cleanup:
3101 + nand_cleanup(chip);
3102 err_out:
3103 - gpmi_nand_exit(this);
3104 + gpmi_free_dma_buffer(this);
3105 return ret;
3106 }
3107
3108 diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
3109 index a3e86e52640a..5fb45161789c 100644
3110 --- a/drivers/mtd/nand/nand_base.c
3111 +++ b/drivers/mtd/nand/nand_base.c
3112 @@ -4785,6 +4785,11 @@ int nand_scan_tail(struct mtd_info *mtd)
3113 goto err_free;
3114 }
3115 ecc->total = ecc->steps * ecc->bytes;
3116 + if (ecc->total > mtd->oobsize) {
3117 + WARN(1, "Total number of ECC bytes exceeded oobsize\n");
3118 + ret = -EINVAL;
3119 + goto err_free;
3120 + }
3121
3122 /*
3123 * The number of bytes available for a client to place data into
3124 diff --git a/drivers/mtd/tests/oobtest.c b/drivers/mtd/tests/oobtest.c
3125 index 1cb3f7758fb6..766b2c385682 100644
3126 --- a/drivers/mtd/tests/oobtest.c
3127 +++ b/drivers/mtd/tests/oobtest.c
3128 @@ -193,6 +193,9 @@ static int verify_eraseblock(int ebnum)
3129 ops.datbuf = NULL;
3130 ops.oobbuf = readbuf;
3131 err = mtd_read_oob(mtd, addr, &ops);
3132 + if (mtd_is_bitflip(err))
3133 + err = 0;
3134 +
3135 if (err || ops.oobretlen != use_len) {
3136 pr_err("error: readoob failed at %#llx\n",
3137 (long long)addr);
3138 @@ -227,6 +230,9 @@ static int verify_eraseblock(int ebnum)
3139 ops.datbuf = NULL;
3140 ops.oobbuf = readbuf;
3141 err = mtd_read_oob(mtd, addr, &ops);
3142 + if (mtd_is_bitflip(err))
3143 + err = 0;
3144 +
3145 if (err || ops.oobretlen != mtd->oobavail) {
3146 pr_err("error: readoob failed at %#llx\n",
3147 (long long)addr);
3148 @@ -286,6 +292,9 @@ static int verify_eraseblock_in_one_go(int ebnum)
3149
3150 /* read entire block's OOB at one go */
3151 err = mtd_read_oob(mtd, addr, &ops);
3152 + if (mtd_is_bitflip(err))
3153 + err = 0;
3154 +
3155 if (err || ops.oobretlen != len) {
3156 pr_err("error: readoob failed at %#llx\n",
3157 (long long)addr);
3158 @@ -527,6 +536,9 @@ static int __init mtd_oobtest_init(void)
3159 pr_info("attempting to start read past end of OOB\n");
3160 pr_info("an error is expected...\n");
3161 err = mtd_read_oob(mtd, addr0, &ops);
3162 + if (mtd_is_bitflip(err))
3163 + err = 0;
3164 +
3165 if (err) {
3166 pr_info("error occurred as expected\n");
3167 err = 0;
3168 @@ -571,6 +583,9 @@ static int __init mtd_oobtest_init(void)
3169 pr_info("attempting to read past end of device\n");
3170 pr_info("an error is expected...\n");
3171 err = mtd_read_oob(mtd, mtd->size - mtd->writesize, &ops);
3172 + if (mtd_is_bitflip(err))
3173 + err = 0;
3174 +
3175 if (err) {
3176 pr_info("error occurred as expected\n");
3177 err = 0;
3178 @@ -615,6 +630,9 @@ static int __init mtd_oobtest_init(void)
3179 pr_info("attempting to read past end of device\n");
3180 pr_info("an error is expected...\n");
3181 err = mtd_read_oob(mtd, mtd->size - mtd->writesize, &ops);
3182 + if (mtd_is_bitflip(err))
3183 + err = 0;
3184 +
3185 if (err) {
3186 pr_info("error occurred as expected\n");
3187 err = 0;
3188 @@ -684,6 +702,9 @@ static int __init mtd_oobtest_init(void)
3189 ops.datbuf = NULL;
3190 ops.oobbuf = readbuf;
3191 err = mtd_read_oob(mtd, addr, &ops);
3192 + if (mtd_is_bitflip(err))
3193 + err = 0;
3194 +
3195 if (err)
3196 goto out;
3197 if (memcmpshow(addr, readbuf, writebuf,
3198 diff --git a/drivers/mtd/ubi/fastmap.c b/drivers/mtd/ubi/fastmap.c
3199 index c1f5c29e458e..b44c8d348e78 100644
3200 --- a/drivers/mtd/ubi/fastmap.c
3201 +++ b/drivers/mtd/ubi/fastmap.c
3202 @@ -828,6 +828,24 @@ static int find_fm_anchor(struct ubi_attach_info *ai)
3203 return ret;
3204 }
3205
3206 +static struct ubi_ainf_peb *clone_aeb(struct ubi_attach_info *ai,
3207 + struct ubi_ainf_peb *old)
3208 +{
3209 + struct ubi_ainf_peb *new;
3210 +
3211 + new = ubi_alloc_aeb(ai, old->pnum, old->ec);
3212 + if (!new)
3213 + return NULL;
3214 +
3215 + new->vol_id = old->vol_id;
3216 + new->sqnum = old->sqnum;
3217 + new->lnum = old->lnum;
3218 + new->scrub = old->scrub;
3219 + new->copy_flag = old->copy_flag;
3220 +
3221 + return new;
3222 +}
3223 +
3224 /**
3225 * ubi_scan_fastmap - scan the fastmap.
3226 * @ubi: UBI device object
3227 @@ -847,7 +865,7 @@ int ubi_scan_fastmap(struct ubi_device *ubi, struct ubi_attach_info *ai,
3228 struct ubi_vid_hdr *vh;
3229 struct ubi_ec_hdr *ech;
3230 struct ubi_fastmap_layout *fm;
3231 - struct ubi_ainf_peb *tmp_aeb, *aeb;
3232 + struct ubi_ainf_peb *aeb;
3233 int i, used_blocks, pnum, fm_anchor, ret = 0;
3234 size_t fm_size;
3235 __be32 crc, tmp_crc;
3236 @@ -857,9 +875,16 @@ int ubi_scan_fastmap(struct ubi_device *ubi, struct ubi_attach_info *ai,
3237 if (fm_anchor < 0)
3238 return UBI_NO_FASTMAP;
3239
3240 - /* Move all (possible) fastmap blocks into our new attach structure. */
3241 - list_for_each_entry_safe(aeb, tmp_aeb, &scan_ai->fastmap, u.list)
3242 - list_move_tail(&aeb->u.list, &ai->fastmap);
3243 + /* Copy all (possible) fastmap blocks into our new attach structure. */
3244 + list_for_each_entry(aeb, &scan_ai->fastmap, u.list) {
3245 + struct ubi_ainf_peb *new;
3246 +
3247 + new = clone_aeb(ai, aeb);
3248 + if (!new)
3249 + return -ENOMEM;
3250 +
3251 + list_add(&new->u.list, &ai->fastmap);
3252 + }
3253
3254 down_write(&ubi->fm_protect);
3255 memset(ubi->fm_buf, 0, ubi->fm_size);
3256 diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
3257 index 4907c9b57565..513457a2a7bf 100644
3258 --- a/drivers/net/bonding/bond_main.c
3259 +++ b/drivers/net/bonding/bond_main.c
3260 @@ -1524,39 +1524,6 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
3261 goto err_close;
3262 }
3263
3264 - /* If the mode uses primary, then the following is handled by
3265 - * bond_change_active_slave().
3266 - */
3267 - if (!bond_uses_primary(bond)) {
3268 - /* set promiscuity level to new slave */
3269 - if (bond_dev->flags & IFF_PROMISC) {
3270 - res = dev_set_promiscuity(slave_dev, 1);
3271 - if (res)
3272 - goto err_close;
3273 - }
3274 -
3275 - /* set allmulti level to new slave */
3276 - if (bond_dev->flags & IFF_ALLMULTI) {
3277 - res = dev_set_allmulti(slave_dev, 1);
3278 - if (res)
3279 - goto err_close;
3280 - }
3281 -
3282 - netif_addr_lock_bh(bond_dev);
3283 -
3284 - dev_mc_sync_multiple(slave_dev, bond_dev);
3285 - dev_uc_sync_multiple(slave_dev, bond_dev);
3286 -
3287 - netif_addr_unlock_bh(bond_dev);
3288 - }
3289 -
3290 - if (BOND_MODE(bond) == BOND_MODE_8023AD) {
3291 - /* add lacpdu mc addr to mc list */
3292 - u8 lacpdu_multicast[ETH_ALEN] = MULTICAST_LACPDU_ADDR;
3293 -
3294 - dev_mc_add(slave_dev, lacpdu_multicast);
3295 - }
3296 -
3297 res = vlan_vids_add_by_dev(slave_dev, bond_dev);
3298 if (res) {
3299 netdev_err(bond_dev, "Couldn't add bond vlan ids to %s\n",
3300 @@ -1719,6 +1686,40 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
3301 goto err_upper_unlink;
3302 }
3303
3304 + /* If the mode uses primary, then the following is handled by
3305 + * bond_change_active_slave().
3306 + */
3307 + if (!bond_uses_primary(bond)) {
3308 + /* set promiscuity level to new slave */
3309 + if (bond_dev->flags & IFF_PROMISC) {
3310 + res = dev_set_promiscuity(slave_dev, 1);
3311 + if (res)
3312 + goto err_sysfs_del;
3313 + }
3314 +
3315 + /* set allmulti level to new slave */
3316 + if (bond_dev->flags & IFF_ALLMULTI) {
3317 + res = dev_set_allmulti(slave_dev, 1);
3318 + if (res) {
3319 + if (bond_dev->flags & IFF_PROMISC)
3320 + dev_set_promiscuity(slave_dev, -1);
3321 + goto err_sysfs_del;
3322 + }
3323 + }
3324 +
3325 + netif_addr_lock_bh(bond_dev);
3326 + dev_mc_sync_multiple(slave_dev, bond_dev);
3327 + dev_uc_sync_multiple(slave_dev, bond_dev);
3328 + netif_addr_unlock_bh(bond_dev);
3329 +
3330 + if (BOND_MODE(bond) == BOND_MODE_8023AD) {
3331 + /* add lacpdu mc addr to mc list */
3332 + u8 lacpdu_multicast[ETH_ALEN] = MULTICAST_LACPDU_ADDR;
3333 +
3334 + dev_mc_add(slave_dev, lacpdu_multicast);
3335 + }
3336 + }
3337 +
3338 bond->slave_cnt++;
3339 bond_compute_features(bond);
3340 bond_set_carrier(bond);
3341 @@ -1742,6 +1743,9 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
3342 return 0;
3343
3344 /* Undo stages on error */
3345 +err_sysfs_del:
3346 + bond_sysfs_slave_del(new_slave);
3347 +
3348 err_upper_unlink:
3349 bond_upper_dev_unlink(bond, new_slave);
3350
3351 @@ -1749,9 +1753,6 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
3352 netdev_rx_handler_unregister(slave_dev);
3353
3354 err_detach:
3355 - if (!bond_uses_primary(bond))
3356 - bond_hw_addr_flush(bond_dev, slave_dev);
3357 -
3358 vlan_vids_del_by_dev(slave_dev, bond_dev);
3359 if (rcu_access_pointer(bond->primary_slave) == new_slave)
3360 RCU_INIT_POINTER(bond->primary_slave, NULL);
3361 @@ -2605,11 +2606,13 @@ static void bond_loadbalance_arp_mon(struct work_struct *work)
3362 bond_for_each_slave_rcu(bond, slave, iter) {
3363 unsigned long trans_start = dev_trans_start(slave->dev);
3364
3365 + slave->new_link = BOND_LINK_NOCHANGE;
3366 +
3367 if (slave->link != BOND_LINK_UP) {
3368 if (bond_time_in_interval(bond, trans_start, 1) &&
3369 bond_time_in_interval(bond, slave->last_rx, 1)) {
3370
3371 - slave->link = BOND_LINK_UP;
3372 + slave->new_link = BOND_LINK_UP;
3373 slave_state_changed = 1;
3374
3375 /* primary_slave has no meaning in round-robin
3376 @@ -2636,7 +2639,7 @@ static void bond_loadbalance_arp_mon(struct work_struct *work)
3377 if (!bond_time_in_interval(bond, trans_start, 2) ||
3378 !bond_time_in_interval(bond, slave->last_rx, 2)) {
3379
3380 - slave->link = BOND_LINK_DOWN;
3381 + slave->new_link = BOND_LINK_DOWN;
3382 slave_state_changed = 1;
3383
3384 if (slave->link_failure_count < UINT_MAX)
3385 @@ -2667,6 +2670,11 @@ static void bond_loadbalance_arp_mon(struct work_struct *work)
3386 if (!rtnl_trylock())
3387 goto re_arm;
3388
3389 + bond_for_each_slave(bond, slave, iter) {
3390 + if (slave->new_link != BOND_LINK_NOCHANGE)
3391 + slave->link = slave->new_link;
3392 + }
3393 +
3394 if (slave_state_changed) {
3395 bond_slave_state_change(bond);
3396 if (BOND_MODE(bond) == BOND_MODE_XOR)
3397 diff --git a/drivers/net/ethernet/amazon/ena/ena_com.c b/drivers/net/ethernet/amazon/ena/ena_com.c
3398 index e2512ab41168..e13c9cd45dc0 100644
3399 --- a/drivers/net/ethernet/amazon/ena/ena_com.c
3400 +++ b/drivers/net/ethernet/amazon/ena/ena_com.c
3401 @@ -61,6 +61,8 @@
3402
3403 #define ENA_MMIO_READ_TIMEOUT 0xFFFFFFFF
3404
3405 +#define ENA_REGS_ADMIN_INTR_MASK 1
3406 +
3407 /*****************************************************************************/
3408 /*****************************************************************************/
3409 /*****************************************************************************/
3410 @@ -232,11 +234,9 @@ static struct ena_comp_ctx *__ena_com_submit_admin_cmd(struct ena_com_admin_queu
3411 tail_masked = admin_queue->sq.tail & queue_size_mask;
3412
3413 /* In case of queue FULL */
3414 - cnt = admin_queue->sq.tail - admin_queue->sq.head;
3415 + cnt = atomic_read(&admin_queue->outstanding_cmds);
3416 if (cnt >= admin_queue->q_depth) {
3417 - pr_debug("admin queue is FULL (tail %d head %d depth: %d)\n",
3418 - admin_queue->sq.tail, admin_queue->sq.head,
3419 - admin_queue->q_depth);
3420 + pr_debug("admin queue is full.\n");
3421 admin_queue->stats.out_of_space++;
3422 return ERR_PTR(-ENOSPC);
3423 }
3424 @@ -508,15 +508,20 @@ static int ena_com_comp_status_to_errno(u8 comp_status)
3425 static int ena_com_wait_and_process_admin_cq_polling(struct ena_comp_ctx *comp_ctx,
3426 struct ena_com_admin_queue *admin_queue)
3427 {
3428 - unsigned long flags;
3429 - u32 start_time;
3430 + unsigned long flags, timeout;
3431 int ret;
3432
3433 - start_time = ((u32)jiffies_to_usecs(jiffies));
3434 + timeout = jiffies + ADMIN_CMD_TIMEOUT_US;
3435 +
3436 + while (1) {
3437 + spin_lock_irqsave(&admin_queue->q_lock, flags);
3438 + ena_com_handle_admin_completion(admin_queue);
3439 + spin_unlock_irqrestore(&admin_queue->q_lock, flags);
3440 +
3441 + if (comp_ctx->status != ENA_CMD_SUBMITTED)
3442 + break;
3443
3444 - while (comp_ctx->status == ENA_CMD_SUBMITTED) {
3445 - if ((((u32)jiffies_to_usecs(jiffies)) - start_time) >
3446 - ADMIN_CMD_TIMEOUT_US) {
3447 + if (time_is_before_jiffies(timeout)) {
3448 pr_err("Wait for completion (polling) timeout\n");
3449 /* ENA didn't have any completion */
3450 spin_lock_irqsave(&admin_queue->q_lock, flags);
3451 @@ -528,10 +533,6 @@ static int ena_com_wait_and_process_admin_cq_polling(struct ena_comp_ctx *comp_c
3452 goto err;
3453 }
3454
3455 - spin_lock_irqsave(&admin_queue->q_lock, flags);
3456 - ena_com_handle_admin_completion(admin_queue);
3457 - spin_unlock_irqrestore(&admin_queue->q_lock, flags);
3458 -
3459 msleep(100);
3460 }
3461
3462 @@ -1449,6 +1450,12 @@ void ena_com_admin_destroy(struct ena_com_dev *ena_dev)
3463
3464 void ena_com_set_admin_polling_mode(struct ena_com_dev *ena_dev, bool polling)
3465 {
3466 + u32 mask_value = 0;
3467 +
3468 + if (polling)
3469 + mask_value = ENA_REGS_ADMIN_INTR_MASK;
3470 +
3471 + writel(mask_value, ena_dev->reg_bar + ENA_REGS_INTR_MASK_OFF);
3472 ena_dev->admin_queue.polling = polling;
3473 }
3474
3475 diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
3476 index bfeaec5bd7b9..0d9ce08ee3a9 100644
3477 --- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
3478 +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
3479 @@ -1542,6 +1542,7 @@ static int ena_create_io_tx_queue(struct ena_adapter *adapter, int qid)
3480 "Failed to get TX queue handlers. TX queue num %d rc: %d\n",
3481 qid, rc);
3482 ena_com_destroy_io_queue(ena_dev, ena_qid);
3483 + return rc;
3484 }
3485
3486 ena_com_update_numa_node(tx_ring->ena_com_io_cq, ctx.numa_node);
3487 @@ -1606,6 +1607,7 @@ static int ena_create_io_rx_queue(struct ena_adapter *adapter, int qid)
3488 "Failed to get RX queue handlers. RX queue num %d rc: %d\n",
3489 qid, rc);
3490 ena_com_destroy_io_queue(ena_dev, ena_qid);
3491 + return rc;
3492 }
3493
3494 ena_com_update_numa_node(rx_ring->ena_com_io_cq, ctx.numa_node);
3495 @@ -2806,6 +2808,11 @@ static void ena_release_bars(struct ena_com_dev *ena_dev, struct pci_dev *pdev)
3496 {
3497 int release_bars;
3498
3499 + if (ena_dev->mem_bar)
3500 + devm_iounmap(&pdev->dev, ena_dev->mem_bar);
3501 +
3502 + devm_iounmap(&pdev->dev, ena_dev->reg_bar);
3503 +
3504 release_bars = pci_select_bars(pdev, IORESOURCE_MEM) & ENA_BAR_MASK;
3505 pci_release_selected_regions(pdev, release_bars);
3506 }
3507 @@ -2893,8 +2900,9 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
3508 goto err_free_ena_dev;
3509 }
3510
3511 - ena_dev->reg_bar = ioremap(pci_resource_start(pdev, ENA_REG_BAR),
3512 - pci_resource_len(pdev, ENA_REG_BAR));
3513 + ena_dev->reg_bar = devm_ioremap(&pdev->dev,
3514 + pci_resource_start(pdev, ENA_REG_BAR),
3515 + pci_resource_len(pdev, ENA_REG_BAR));
3516 if (!ena_dev->reg_bar) {
3517 dev_err(&pdev->dev, "failed to remap regs bar\n");
3518 rc = -EFAULT;
3519 @@ -2914,8 +2922,9 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
3520 ena_set_push_mode(pdev, ena_dev, &get_feat_ctx);
3521
3522 if (ena_dev->tx_mem_queue_type == ENA_ADMIN_PLACEMENT_POLICY_DEV) {
3523 - ena_dev->mem_bar = ioremap_wc(pci_resource_start(pdev, ENA_MEM_BAR),
3524 - pci_resource_len(pdev, ENA_MEM_BAR));
3525 + ena_dev->mem_bar = devm_ioremap_wc(&pdev->dev,
3526 + pci_resource_start(pdev, ENA_MEM_BAR),
3527 + pci_resource_len(pdev, ENA_MEM_BAR));
3528 if (!ena_dev->mem_bar) {
3529 rc = -EFAULT;
3530 goto err_device_destroy;
3531 diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
3532 index ca6c4718000f..31287cec6e3a 100644
3533 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
3534 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
3535 @@ -3887,15 +3887,26 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
3536 /* when transmitting in a vf, start bd must hold the ethertype
3537 * for fw to enforce it
3538 */
3539 + u16 vlan_tci = 0;
3540 #ifndef BNX2X_STOP_ON_ERROR
3541 - if (IS_VF(bp))
3542 + if (IS_VF(bp)) {
3543 #endif
3544 - tx_start_bd->vlan_or_ethertype =
3545 - cpu_to_le16(ntohs(eth->h_proto));
3546 + /* Still need to consider inband vlan for enforced */
3547 + if (__vlan_get_tag(skb, &vlan_tci)) {
3548 + tx_start_bd->vlan_or_ethertype =
3549 + cpu_to_le16(ntohs(eth->h_proto));
3550 + } else {
3551 + tx_start_bd->bd_flags.as_bitfield |=
3552 + (X_ETH_INBAND_VLAN <<
3553 + ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT);
3554 + tx_start_bd->vlan_or_ethertype =
3555 + cpu_to_le16(vlan_tci);
3556 + }
3557 #ifndef BNX2X_STOP_ON_ERROR
3558 - else
3559 + } else {
3560 /* used by FW for packet accounting */
3561 tx_start_bd->vlan_or_ethertype = cpu_to_le16(pkt_prod);
3562 + }
3563 #endif
3564 }
3565
3566 diff --git a/drivers/net/ethernet/brocade/bna/bfa_ioc.c b/drivers/net/ethernet/brocade/bna/bfa_ioc.c
3567 index 0f6811860ad5..a36e38676640 100644
3568 --- a/drivers/net/ethernet/brocade/bna/bfa_ioc.c
3569 +++ b/drivers/net/ethernet/brocade/bna/bfa_ioc.c
3570 @@ -2845,7 +2845,7 @@ bfa_ioc_get_adapter_optrom_ver(struct bfa_ioc *ioc, char *optrom_ver)
3571 static void
3572 bfa_ioc_get_adapter_manufacturer(struct bfa_ioc *ioc, char *manufacturer)
3573 {
3574 - memcpy(manufacturer, BFA_MFG_NAME, BFA_ADAPTER_MFG_NAME_LEN);
3575 + strncpy(manufacturer, BFA_MFG_NAME, BFA_ADAPTER_MFG_NAME_LEN);
3576 }
3577
3578 static void
3579 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
3580 index 0c2a32a305bc..3ec32d7c5866 100644
3581 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
3582 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
3583 @@ -2742,6 +2742,16 @@ static int cxgb_setup_tc(struct net_device *dev, u32 handle, __be16 proto,
3584 return -EOPNOTSUPP;
3585 }
3586
3587 +static netdev_features_t cxgb_fix_features(struct net_device *dev,
3588 + netdev_features_t features)
3589 +{
3590 + /* Disable GRO, if RX_CSUM is disabled */
3591 + if (!(features & NETIF_F_RXCSUM))
3592 + features &= ~NETIF_F_GRO;
3593 +
3594 + return features;
3595 +}
3596 +
3597 static const struct net_device_ops cxgb4_netdev_ops = {
3598 .ndo_open = cxgb_open,
3599 .ndo_stop = cxgb_close,
3600 @@ -2766,6 +2776,7 @@ static const struct net_device_ops cxgb4_netdev_ops = {
3601 #endif
3602 .ndo_set_tx_maxrate = cxgb_set_tx_maxrate,
3603 .ndo_setup_tc = cxgb_setup_tc,
3604 + .ndo_fix_features = cxgb_fix_features,
3605 };
3606
3607 #ifdef CONFIG_PCI_IOV
3608 diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
3609 index 6fd3be69ff21..ebeeb3581b9c 100644
3610 --- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
3611 +++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
3612 @@ -6185,13 +6185,18 @@ int t4_fw_upgrade(struct adapter *adap, unsigned int mbox,
3613 if (!t4_fw_matches_chip(adap, fw_hdr))
3614 return -EINVAL;
3615
3616 + /* Disable FW_OK flag so that mbox commands with FW_OK flag set
3617 + * wont be sent when we are flashing FW.
3618 + */
3619 + adap->flags &= ~FW_OK;
3620 +
3621 ret = t4_fw_halt(adap, mbox, force);
3622 if (ret < 0 && !force)
3623 - return ret;
3624 + goto out;
3625
3626 ret = t4_load_fw(adap, fw_data, size);
3627 if (ret < 0)
3628 - return ret;
3629 + goto out;
3630
3631 /*
3632 * Older versions of the firmware don't understand the new
3633 @@ -6202,7 +6207,17 @@ int t4_fw_upgrade(struct adapter *adap, unsigned int mbox,
3634 * its header flags to see if it advertises the capability.
3635 */
3636 reset = ((be32_to_cpu(fw_hdr->flags) & FW_HDR_FLAGS_RESET_HALT) == 0);
3637 - return t4_fw_restart(adap, mbox, reset);
3638 + ret = t4_fw_restart(adap, mbox, reset);
3639 +
3640 + /* Grab potentially new Firmware Device Log parameters so we can see
3641 + * how healthy the new Firmware is. It's okay to contact the new
3642 + * Firmware for these parameters even though, as far as it's
3643 + * concerned, we've never said "HELLO" to it ...
3644 + */
3645 + (void)t4_init_devlog_params(adap);
3646 +out:
3647 + adap->flags |= FW_OK;
3648 + return ret;
3649 }
3650
3651 /**
3652 @@ -8073,7 +8088,16 @@ int t4_cim_read_la(struct adapter *adap, u32 *la_buf, unsigned int *wrptr)
3653 ret = t4_cim_read(adap, UP_UP_DBG_LA_DATA_A, 1, &la_buf[i]);
3654 if (ret)
3655 break;
3656 - idx = (idx + 1) & UPDBGLARDPTR_M;
3657 +
3658 + /* Bits 0-3 of UpDbgLaRdPtr can be between 0000 to 1001 to
3659 + * identify the 32-bit portion of the full 312-bit data
3660 + */
3661 + if (is_t6(adap->params.chip) && (idx & 0xf) >= 9)
3662 + idx = (idx & 0xff0) + 0x10;
3663 + else
3664 + idx++;
3665 + /* address can't exceed 0xfff */
3666 + idx &= UPDBGLARDPTR_M;
3667 }
3668 restart:
3669 if (cfg & UPDBGLAEN_F) {
3670 diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c
3671 index f3ed9ce99e5e..9d64e8e7c417 100644
3672 --- a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c
3673 +++ b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c
3674 @@ -2616,8 +2616,8 @@ void t4vf_sge_stop(struct adapter *adapter)
3675 int t4vf_sge_init(struct adapter *adapter)
3676 {
3677 struct sge_params *sge_params = &adapter->params.sge;
3678 - u32 fl0 = sge_params->sge_fl_buffer_size[0];
3679 - u32 fl1 = sge_params->sge_fl_buffer_size[1];
3680 + u32 fl_small_pg = sge_params->sge_fl_buffer_size[0];
3681 + u32 fl_large_pg = sge_params->sge_fl_buffer_size[1];
3682 struct sge *s = &adapter->sge;
3683
3684 /*
3685 @@ -2625,9 +2625,20 @@ int t4vf_sge_init(struct adapter *adapter)
3686 * the Physical Function Driver. Ideally we should be able to deal
3687 * with _any_ configuration. Practice is different ...
3688 */
3689 - if (fl0 != PAGE_SIZE || (fl1 != 0 && fl1 <= fl0)) {
3690 +
3691 + /* We only bother using the Large Page logic if the Large Page Buffer
3692 + * is larger than our Page Size Buffer.
3693 + */
3694 + if (fl_large_pg <= fl_small_pg)
3695 + fl_large_pg = 0;
3696 +
3697 + /* The Page Size Buffer must be exactly equal to our Page Size and the
3698 + * Large Page Size Buffer should be 0 (per above) or a power of 2.
3699 + */
3700 + if (fl_small_pg != PAGE_SIZE ||
3701 + (fl_large_pg & (fl_large_pg - 1)) != 0) {
3702 dev_err(adapter->pdev_dev, "bad SGE FL buffer sizes [%d, %d]\n",
3703 - fl0, fl1);
3704 + fl_small_pg, fl_large_pg);
3705 return -EINVAL;
3706 }
3707 if ((sge_params->sge_control & RXPKTCPLMODE_F) !=
3708 @@ -2639,8 +2650,8 @@ int t4vf_sge_init(struct adapter *adapter)
3709 /*
3710 * Now translate the adapter parameters into our internal forms.
3711 */
3712 - if (fl1)
3713 - s->fl_pg_order = ilog2(fl1) - PAGE_SHIFT;
3714 + if (fl_large_pg)
3715 + s->fl_pg_order = ilog2(fl_large_pg) - PAGE_SHIFT;
3716 s->stat_len = ((sge_params->sge_control & EGRSTATUSPAGESIZE_F)
3717 ? 128 : 64);
3718 s->pktshift = PKTSHIFT_G(sge_params->sge_control);
3719 diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
3720 index 05e5b38e4891..fe00f71bc6b4 100644
3721 --- a/drivers/net/ethernet/freescale/fec_main.c
3722 +++ b/drivers/net/ethernet/freescale/fec_main.c
3723 @@ -2371,6 +2371,10 @@ static int fec_enet_get_sset_count(struct net_device *dev, int sset)
3724 static inline void fec_enet_update_ethtool_stats(struct net_device *dev)
3725 {
3726 }
3727 +
3728 +static inline void fec_enet_clear_ethtool_stats(struct net_device *dev)
3729 +{
3730 +}
3731 #endif /* !defined(CONFIG_M5272) */
3732
3733 static int fec_enet_nway_reset(struct net_device *dev)
3734 diff --git a/drivers/net/ethernet/freescale/fsl_pq_mdio.c b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
3735 index 446c7b374ff5..a10de1e9c157 100644
3736 --- a/drivers/net/ethernet/freescale/fsl_pq_mdio.c
3737 +++ b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
3738 @@ -381,7 +381,7 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
3739 {
3740 const struct of_device_id *id =
3741 of_match_device(fsl_pq_mdio_match, &pdev->dev);
3742 - const struct fsl_pq_mdio_data *data = id->data;
3743 + const struct fsl_pq_mdio_data *data;
3744 struct device_node *np = pdev->dev.of_node;
3745 struct resource res;
3746 struct device_node *tbi;
3747 @@ -389,6 +389,13 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
3748 struct mii_bus *new_bus;
3749 int err;
3750
3751 + if (!id) {
3752 + dev_err(&pdev->dev, "Failed to match device\n");
3753 + return -ENODEV;
3754 + }
3755 +
3756 + data = id->data;
3757 +
3758 dev_dbg(&pdev->dev, "found %s compatible node\n", id->compatible);
3759
3760 new_bus = mdiobus_alloc_size(sizeof(*priv));
3761 diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
3762 index 8f139197f1aa..5977b695d0fa 100644
3763 --- a/drivers/net/ethernet/ibm/emac/core.c
3764 +++ b/drivers/net/ethernet/ibm/emac/core.c
3765 @@ -342,6 +342,7 @@ static int emac_reset(struct emac_instance *dev)
3766 {
3767 struct emac_regs __iomem *p = dev->emacp;
3768 int n = 20;
3769 + bool __maybe_unused try_internal_clock = false;
3770
3771 DBG(dev, "reset" NL);
3772
3773 @@ -354,6 +355,7 @@ static int emac_reset(struct emac_instance *dev)
3774 }
3775
3776 #ifdef CONFIG_PPC_DCR_NATIVE
3777 +do_retry:
3778 /*
3779 * PPC460EX/GT Embedded Processor Advanced User's Manual
3780 * section 28.10.1 Mode Register 0 (EMACx_MR0) states:
3781 @@ -361,10 +363,19 @@ static int emac_reset(struct emac_instance *dev)
3782 * of the EMAC. If none is present, select the internal clock
3783 * (SDR0_ETH_CFG[EMACx_PHY_CLK] = 1).
3784 * After a soft reset, select the external clock.
3785 + *
3786 + * The AR8035-A PHY Meraki MR24 does not provide a TX Clk if the
3787 + * ethernet cable is not attached. This causes the reset to timeout
3788 + * and the PHY detection code in emac_init_phy() is unable to
3789 + * communicate and detect the AR8035-A PHY. As a result, the emac
3790 + * driver bails out early and the user has no ethernet.
3791 + * In order to stay compatible with existing configurations, the
3792 + * driver will temporarily switch to the internal clock, after
3793 + * the first reset fails.
3794 */
3795 if (emac_has_feature(dev, EMAC_FTR_460EX_PHY_CLK_FIX)) {
3796 - if (dev->phy_address == 0xffffffff &&
3797 - dev->phy_map == 0xffffffff) {
3798 + if (try_internal_clock || (dev->phy_address == 0xffffffff &&
3799 + dev->phy_map == 0xffffffff)) {
3800 /* No PHY: select internal loop clock before reset */
3801 dcri_clrset(SDR0, SDR0_ETH_CFG,
3802 0, SDR0_ETH_CFG_ECS << dev->cell_index);
3803 @@ -382,8 +393,15 @@ static int emac_reset(struct emac_instance *dev)
3804
3805 #ifdef CONFIG_PPC_DCR_NATIVE
3806 if (emac_has_feature(dev, EMAC_FTR_460EX_PHY_CLK_FIX)) {
3807 - if (dev->phy_address == 0xffffffff &&
3808 - dev->phy_map == 0xffffffff) {
3809 + if (!n && !try_internal_clock) {
3810 + /* first attempt has timed out. */
3811 + n = 20;
3812 + try_internal_clock = true;
3813 + goto do_retry;
3814 + }
3815 +
3816 + if (try_internal_clock || (dev->phy_address == 0xffffffff &&
3817 + dev->phy_map == 0xffffffff)) {
3818 /* No PHY: restore external clock source after reset */
3819 dcri_clrset(SDR0, SDR0_ETH_CFG,
3820 SDR0_ETH_CFG_ECS << dev->cell_index, 0);
3821 diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
3822 index 528a926dd979..825ec8f710e7 100644
3823 --- a/drivers/net/ethernet/intel/e1000e/netdev.c
3824 +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
3825 @@ -1182,6 +1182,7 @@ static void e1000e_tx_hwtstamp_work(struct work_struct *work)
3826 struct e1000_hw *hw = &adapter->hw;
3827
3828 if (er32(TSYNCTXCTL) & E1000_TSYNCTXCTL_VALID) {
3829 + struct sk_buff *skb = adapter->tx_hwtstamp_skb;
3830 struct skb_shared_hwtstamps shhwtstamps;
3831 u64 txstmp;
3832
3833 @@ -1190,9 +1191,14 @@ static void e1000e_tx_hwtstamp_work(struct work_struct *work)
3834
3835 e1000e_systim_to_hwtstamp(adapter, &shhwtstamps, txstmp);
3836
3837 - skb_tstamp_tx(adapter->tx_hwtstamp_skb, &shhwtstamps);
3838 - dev_kfree_skb_any(adapter->tx_hwtstamp_skb);
3839 + /* Clear the global tx_hwtstamp_skb pointer and force writes
3840 + * prior to notifying the stack of a Tx timestamp.
3841 + */
3842 adapter->tx_hwtstamp_skb = NULL;
3843 + wmb(); /* force write prior to skb_tstamp_tx */
3844 +
3845 + skb_tstamp_tx(skb, &shhwtstamps);
3846 + dev_kfree_skb_any(skb);
3847 } else if (time_after(jiffies, adapter->tx_hwtstamp_start
3848 + adapter->tx_timeout_factor * HZ)) {
3849 dev_kfree_skb_any(adapter->tx_hwtstamp_skb);
3850 @@ -6645,12 +6651,17 @@ static int e1000e_pm_thaw(struct device *dev)
3851 static int e1000e_pm_suspend(struct device *dev)
3852 {
3853 struct pci_dev *pdev = to_pci_dev(dev);
3854 + int rc;
3855
3856 e1000e_flush_lpic(pdev);
3857
3858 e1000e_pm_freeze(dev);
3859
3860 - return __e1000_shutdown(pdev, false);
3861 + rc = __e1000_shutdown(pdev, false);
3862 + if (rc)
3863 + e1000e_pm_thaw(dev);
3864 +
3865 + return rc;
3866 }
3867
3868 static int e1000e_pm_resume(struct device *dev)
3869 diff --git a/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c b/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c
3870 index ddf478d6322b..614f93e01500 100644
3871 --- a/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c
3872 +++ b/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c
3873 @@ -154,6 +154,7 @@ int i40evf_send_vf_config_msg(struct i40evf_adapter *adapter)
3874 adapter->current_op = I40E_VIRTCHNL_OP_GET_VF_RESOURCES;
3875 adapter->aq_required &= ~I40EVF_FLAG_AQ_GET_CONFIG;
3876 caps = I40E_VIRTCHNL_VF_OFFLOAD_L2 |
3877 + I40E_VIRTCHNL_VF_OFFLOAD_RSS_PF |
3878 I40E_VIRTCHNL_VF_OFFLOAD_RSS_AQ |
3879 I40E_VIRTCHNL_VF_OFFLOAD_RSS_REG |
3880 I40E_VIRTCHNL_VF_OFFLOAD_VLAN |
3881 diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c
3882 index a7895c4cbcc3..9eb9b68f8935 100644
3883 --- a/drivers/net/ethernet/intel/igb/igb_ptp.c
3884 +++ b/drivers/net/ethernet/intel/igb/igb_ptp.c
3885 @@ -721,6 +721,7 @@ void igb_ptp_rx_hang(struct igb_adapter *adapter)
3886 **/
3887 static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter)
3888 {
3889 + struct sk_buff *skb = adapter->ptp_tx_skb;
3890 struct e1000_hw *hw = &adapter->hw;
3891 struct skb_shared_hwtstamps shhwtstamps;
3892 u64 regval;
3893 @@ -748,10 +749,17 @@ static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter)
3894 shhwtstamps.hwtstamp =
3895 ktime_add_ns(shhwtstamps.hwtstamp, adjust);
3896
3897 - skb_tstamp_tx(adapter->ptp_tx_skb, &shhwtstamps);
3898 - dev_kfree_skb_any(adapter->ptp_tx_skb);
3899 + /* Clear the lock early before calling skb_tstamp_tx so that
3900 + * applications are not woken up before the lock bit is clear. We use
3901 + * a copy of the skb pointer to ensure other threads can't change it
3902 + * while we're notifying the stack.
3903 + */
3904 adapter->ptp_tx_skb = NULL;
3905 clear_bit_unlock(__IGB_PTP_TX_IN_PROGRESS, &adapter->state);
3906 +
3907 + /* Notify the stack and free the skb after we've unlocked */
3908 + skb_tstamp_tx(skb, &shhwtstamps);
3909 + dev_kfree_skb_any(skb);
3910 }
3911
3912 /**
3913 diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c
3914 index 941c8e2c944e..93ab0b3ad393 100644
3915 --- a/drivers/net/ethernet/marvell/sky2.c
3916 +++ b/drivers/net/ethernet/marvell/sky2.c
3917 @@ -5079,7 +5079,7 @@ static int sky2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
3918 INIT_WORK(&hw->restart_work, sky2_restart);
3919
3920 pci_set_drvdata(pdev, hw);
3921 - pdev->d3_delay = 150;
3922 + pdev->d3_delay = 200;
3923
3924 return 0;
3925
3926 diff --git a/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c b/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c
3927 index b04760a5034b..af2e6ea36eac 100644
3928 --- a/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c
3929 +++ b/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c
3930 @@ -156,57 +156,63 @@ static int mlx4_en_dcbnl_getnumtcs(struct net_device *netdev, int tcid, u8 *num)
3931 static u8 mlx4_en_dcbnl_set_all(struct net_device *netdev)
3932 {
3933 struct mlx4_en_priv *priv = netdev_priv(netdev);
3934 + struct mlx4_en_port_profile *prof = priv->prof;
3935 struct mlx4_en_dev *mdev = priv->mdev;
3936 + u8 tx_pause, tx_ppp, rx_pause, rx_ppp;
3937
3938 if (!(priv->dcbx_cap & DCB_CAP_DCBX_VER_CEE))
3939 return 1;
3940
3941 if (priv->cee_config.pfc_state) {
3942 int tc;
3943 + rx_ppp = prof->rx_ppp;
3944 + tx_ppp = prof->tx_ppp;
3945
3946 - priv->prof->rx_pause = 0;
3947 - priv->prof->tx_pause = 0;
3948 for (tc = 0; tc < CEE_DCBX_MAX_PRIO; tc++) {
3949 u8 tc_mask = 1 << tc;
3950
3951 switch (priv->cee_config.dcb_pfc[tc]) {
3952 case pfc_disabled:
3953 - priv->prof->tx_ppp &= ~tc_mask;
3954 - priv->prof->rx_ppp &= ~tc_mask;
3955 + tx_ppp &= ~tc_mask;
3956 + rx_ppp &= ~tc_mask;
3957 break;
3958 case pfc_enabled_full:
3959 - priv->prof->tx_ppp |= tc_mask;
3960 - priv->prof->rx_ppp |= tc_mask;
3961 + tx_ppp |= tc_mask;
3962 + rx_ppp |= tc_mask;
3963 break;
3964 case pfc_enabled_tx:
3965 - priv->prof->tx_ppp |= tc_mask;
3966 - priv->prof->rx_ppp &= ~tc_mask;
3967 + tx_ppp |= tc_mask;
3968 + rx_ppp &= ~tc_mask;
3969 break;
3970 case pfc_enabled_rx:
3971 - priv->prof->tx_ppp &= ~tc_mask;
3972 - priv->prof->rx_ppp |= tc_mask;
3973 + tx_ppp &= ~tc_mask;
3974 + rx_ppp |= tc_mask;
3975 break;
3976 default:
3977 break;
3978 }
3979 }
3980 - en_dbg(DRV, priv, "Set pfc on\n");
3981 + rx_pause = !!(rx_ppp || tx_ppp) ? 0 : prof->rx_pause;
3982 + tx_pause = !!(rx_ppp || tx_ppp) ? 0 : prof->tx_pause;
3983 } else {
3984 - priv->prof->rx_pause = 1;
3985 - priv->prof->tx_pause = 1;
3986 - en_dbg(DRV, priv, "Set pfc off\n");
3987 + rx_ppp = 0;
3988 + tx_ppp = 0;
3989 + rx_pause = prof->rx_pause;
3990 + tx_pause = prof->tx_pause;
3991 }
3992
3993 if (mlx4_SET_PORT_general(mdev->dev, priv->port,
3994 priv->rx_skb_size + ETH_FCS_LEN,
3995 - priv->prof->tx_pause,
3996 - priv->prof->tx_ppp,
3997 - priv->prof->rx_pause,
3998 - priv->prof->rx_ppp)) {
3999 + tx_pause, tx_ppp, rx_pause, rx_ppp)) {
4000 en_err(priv, "Failed setting pause params\n");
4001 return 1;
4002 }
4003
4004 + prof->tx_ppp = tx_ppp;
4005 + prof->rx_ppp = rx_ppp;
4006 + prof->tx_pause = tx_pause;
4007 + prof->rx_pause = rx_pause;
4008 +
4009 return 0;
4010 }
4011
4012 @@ -310,6 +316,7 @@ static int mlx4_en_ets_validate(struct mlx4_en_priv *priv, struct ieee_ets *ets)
4013 }
4014
4015 switch (ets->tc_tsa[i]) {
4016 + case IEEE_8021QAZ_TSA_VENDOR:
4017 case IEEE_8021QAZ_TSA_STRICT:
4018 break;
4019 case IEEE_8021QAZ_TSA_ETS:
4020 @@ -347,6 +354,10 @@ static int mlx4_en_config_port_scheduler(struct mlx4_en_priv *priv,
4021 /* higher TC means higher priority => lower pg */
4022 for (i = IEEE_8021QAZ_MAX_TCS - 1; i >= 0; i--) {
4023 switch (ets->tc_tsa[i]) {
4024 + case IEEE_8021QAZ_TSA_VENDOR:
4025 + pg[i] = MLX4_EN_TC_VENDOR;
4026 + tc_tx_bw[i] = MLX4_EN_BW_MAX;
4027 + break;
4028 case IEEE_8021QAZ_TSA_STRICT:
4029 pg[i] = num_strict++;
4030 tc_tx_bw[i] = MLX4_EN_BW_MAX;
4031 @@ -403,6 +414,7 @@ static int mlx4_en_dcbnl_ieee_setpfc(struct net_device *dev,
4032 struct mlx4_en_priv *priv = netdev_priv(dev);
4033 struct mlx4_en_port_profile *prof = priv->prof;
4034 struct mlx4_en_dev *mdev = priv->mdev;
4035 + u32 tx_pause, tx_ppp, rx_pause, rx_ppp;
4036 int err;
4037
4038 en_dbg(DRV, priv, "cap: 0x%x en: 0x%x mbc: 0x%x delay: %d\n",
4039 @@ -411,23 +423,26 @@ static int mlx4_en_dcbnl_ieee_setpfc(struct net_device *dev,
4040 pfc->mbc,
4041 pfc->delay);
4042
4043 - prof->rx_pause = !pfc->pfc_en;
4044 - prof->tx_pause = !pfc->pfc_en;
4045 - prof->rx_ppp = pfc->pfc_en;
4046 - prof->tx_ppp = pfc->pfc_en;
4047 + rx_pause = prof->rx_pause && !pfc->pfc_en;
4048 + tx_pause = prof->tx_pause && !pfc->pfc_en;
4049 + rx_ppp = pfc->pfc_en;
4050 + tx_ppp = pfc->pfc_en;
4051
4052 err = mlx4_SET_PORT_general(mdev->dev, priv->port,
4053 priv->rx_skb_size + ETH_FCS_LEN,
4054 - prof->tx_pause,
4055 - prof->tx_ppp,
4056 - prof->rx_pause,
4057 - prof->rx_ppp);
4058 - if (err)
4059 + tx_pause, tx_ppp, rx_pause, rx_ppp);
4060 + if (err) {
4061 en_err(priv, "Failed setting pause params\n");
4062 - else
4063 - mlx4_en_update_pfc_stats_bitmap(mdev->dev, &priv->stats_bitmap,
4064 - prof->rx_ppp, prof->rx_pause,
4065 - prof->tx_ppp, prof->tx_pause);
4066 + return err;
4067 + }
4068 +
4069 + mlx4_en_update_pfc_stats_bitmap(mdev->dev, &priv->stats_bitmap,
4070 + rx_ppp, rx_pause, tx_ppp, tx_pause);
4071 +
4072 + prof->tx_ppp = tx_ppp;
4073 + prof->rx_ppp = rx_ppp;
4074 + prof->rx_pause = rx_pause;
4075 + prof->tx_pause = tx_pause;
4076
4077 return err;
4078 }
4079 diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
4080 index bdda17d2ea0f..24977cc881d2 100644
4081 --- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
4082 +++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
4083 @@ -1003,27 +1003,32 @@ static int mlx4_en_set_pauseparam(struct net_device *dev,
4084 {
4085 struct mlx4_en_priv *priv = netdev_priv(dev);
4086 struct mlx4_en_dev *mdev = priv->mdev;
4087 + u8 tx_pause, tx_ppp, rx_pause, rx_ppp;
4088 int err;
4089
4090 if (pause->autoneg)
4091 return -EINVAL;
4092
4093 - priv->prof->tx_pause = pause->tx_pause != 0;
4094 - priv->prof->rx_pause = pause->rx_pause != 0;
4095 + tx_pause = !!(pause->tx_pause);
4096 + rx_pause = !!(pause->rx_pause);
4097 + rx_ppp = priv->prof->rx_ppp && !(tx_pause || rx_pause);
4098 + tx_ppp = priv->prof->tx_ppp && !(tx_pause || rx_pause);
4099 +
4100 err = mlx4_SET_PORT_general(mdev->dev, priv->port,
4101 priv->rx_skb_size + ETH_FCS_LEN,
4102 - priv->prof->tx_pause,
4103 - priv->prof->tx_ppp,
4104 - priv->prof->rx_pause,
4105 - priv->prof->rx_ppp);
4106 - if (err)
4107 - en_err(priv, "Failed setting pause params\n");
4108 - else
4109 - mlx4_en_update_pfc_stats_bitmap(mdev->dev, &priv->stats_bitmap,
4110 - priv->prof->rx_ppp,
4111 - priv->prof->rx_pause,
4112 - priv->prof->tx_ppp,
4113 - priv->prof->tx_pause);
4114 + tx_pause, tx_ppp, rx_pause, rx_ppp);
4115 + if (err) {
4116 + en_err(priv, "Failed setting pause params, err = %d\n", err);
4117 + return err;
4118 + }
4119 +
4120 + mlx4_en_update_pfc_stats_bitmap(mdev->dev, &priv->stats_bitmap,
4121 + rx_ppp, rx_pause, tx_ppp, tx_pause);
4122 +
4123 + priv->prof->tx_pause = tx_pause;
4124 + priv->prof->rx_pause = rx_pause;
4125 + priv->prof->tx_ppp = tx_ppp;
4126 + priv->prof->rx_ppp = rx_ppp;
4127
4128 return err;
4129 }
4130 diff --git a/drivers/net/ethernet/mellanox/mlx4/en_main.c b/drivers/net/ethernet/mellanox/mlx4/en_main.c
4131 index bf7628db098a..22c3fdd5482a 100644
4132 --- a/drivers/net/ethernet/mellanox/mlx4/en_main.c
4133 +++ b/drivers/net/ethernet/mellanox/mlx4/en_main.c
4134 @@ -163,9 +163,9 @@ static int mlx4_en_get_profile(struct mlx4_en_dev *mdev)
4135 params->udp_rss = 0;
4136 }
4137 for (i = 1; i <= MLX4_MAX_PORTS; i++) {
4138 - params->prof[i].rx_pause = 1;
4139 + params->prof[i].rx_pause = !(pfcrx || pfctx);
4140 params->prof[i].rx_ppp = pfcrx;
4141 - params->prof[i].tx_pause = 1;
4142 + params->prof[i].tx_pause = !(pfcrx || pfctx);
4143 params->prof[i].tx_ppp = pfctx;
4144 params->prof[i].tx_ring_size = MLX4_EN_DEF_TX_RING_SIZE;
4145 params->prof[i].rx_ring_size = MLX4_EN_DEF_RX_RING_SIZE;
4146 diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
4147 index d223e7cb68ba..0160c93de6d3 100644
4148 --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
4149 +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
4150 @@ -3125,6 +3125,13 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
4151 priv->msg_enable = MLX4_EN_MSG_LEVEL;
4152 #ifdef CONFIG_MLX4_EN_DCB
4153 if (!mlx4_is_slave(priv->mdev->dev)) {
4154 + u8 prio;
4155 +
4156 + for (prio = 0; prio < IEEE_8021QAZ_MAX_TCS; ++prio) {
4157 + priv->ets.prio_tc[prio] = prio;
4158 + priv->ets.tc_tsa[prio] = IEEE_8021QAZ_TSA_VENDOR;
4159 + }
4160 +
4161 priv->dcbx_cap = DCB_CAP_DCBX_VER_CEE | DCB_CAP_DCBX_HOST |
4162 DCB_CAP_DCBX_VER_IEEE;
4163 priv->flags |= MLX4_EN_DCB_ENABLED;
4164 diff --git a/drivers/net/ethernet/mellanox/mlx4/mcg.c b/drivers/net/ethernet/mellanox/mlx4/mcg.c
4165 index 1a670b681555..0710b3677464 100644
4166 --- a/drivers/net/ethernet/mellanox/mlx4/mcg.c
4167 +++ b/drivers/net/ethernet/mellanox/mlx4/mcg.c
4168 @@ -35,6 +35,7 @@
4169 #include <linux/etherdevice.h>
4170
4171 #include <linux/mlx4/cmd.h>
4172 +#include <linux/mlx4/qp.h>
4173 #include <linux/export.h>
4174
4175 #include "mlx4.h"
4176 @@ -985,16 +986,21 @@ int mlx4_flow_attach(struct mlx4_dev *dev,
4177 if (IS_ERR(mailbox))
4178 return PTR_ERR(mailbox);
4179
4180 + if (!mlx4_qp_lookup(dev, rule->qpn)) {
4181 + mlx4_err_rule(dev, "QP doesn't exist\n", rule);
4182 + ret = -EINVAL;
4183 + goto out;
4184 + }
4185 +
4186 trans_rule_ctrl_to_hw(rule, mailbox->buf);
4187
4188 size += sizeof(struct mlx4_net_trans_rule_hw_ctrl);
4189
4190 list_for_each_entry(cur, &rule->list, list) {
4191 ret = parse_trans_rule(dev, cur, mailbox->buf + size);
4192 - if (ret < 0) {
4193 - mlx4_free_cmd_mailbox(dev, mailbox);
4194 - return ret;
4195 - }
4196 + if (ret < 0)
4197 + goto out;
4198 +
4199 size += ret;
4200 }
4201
4202 @@ -1021,6 +1027,7 @@ int mlx4_flow_attach(struct mlx4_dev *dev,
4203 }
4204 }
4205
4206 +out:
4207 mlx4_free_cmd_mailbox(dev, mailbox);
4208
4209 return ret;
4210 diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
4211 index df0f39611c5e..18f221d8a04d 100644
4212 --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
4213 +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
4214 @@ -472,6 +472,7 @@ struct mlx4_en_frag_info {
4215 #define MLX4_EN_BW_MIN 1
4216 #define MLX4_EN_BW_MAX 100 /* Utilize 100% of the line */
4217
4218 +#define MLX4_EN_TC_VENDOR 0
4219 #define MLX4_EN_TC_ETS 7
4220
4221 enum dcb_pfc_type {
4222 diff --git a/drivers/net/ethernet/mellanox/mlx4/qp.c b/drivers/net/ethernet/mellanox/mlx4/qp.c
4223 index 6143113a7fef..474ff36b9755 100644
4224 --- a/drivers/net/ethernet/mellanox/mlx4/qp.c
4225 +++ b/drivers/net/ethernet/mellanox/mlx4/qp.c
4226 @@ -387,6 +387,19 @@ static void mlx4_qp_free_icm(struct mlx4_dev *dev, int qpn)
4227 __mlx4_qp_free_icm(dev, qpn);
4228 }
4229
4230 +struct mlx4_qp *mlx4_qp_lookup(struct mlx4_dev *dev, u32 qpn)
4231 +{
4232 + struct mlx4_qp_table *qp_table = &mlx4_priv(dev)->qp_table;
4233 + struct mlx4_qp *qp;
4234 +
4235 + spin_lock(&qp_table->lock);
4236 +
4237 + qp = __mlx4_qp_lookup(dev, qpn);
4238 +
4239 + spin_unlock(&qp_table->lock);
4240 + return qp;
4241 +}
4242 +
4243 int mlx4_qp_alloc(struct mlx4_dev *dev, int qpn, struct mlx4_qp *qp, gfp_t gfp)
4244 {
4245 struct mlx4_priv *priv = mlx4_priv(dev);
4246 @@ -474,6 +487,12 @@ int mlx4_update_qp(struct mlx4_dev *dev, u32 qpn,
4247 }
4248
4249 if (attr & MLX4_UPDATE_QP_QOS_VPORT) {
4250 + if (!(dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_QOS_VPP)) {
4251 + mlx4_warn(dev, "Granular QoS per VF is not enabled\n");
4252 + err = -EOPNOTSUPP;
4253 + goto out;
4254 + }
4255 +
4256 qp_mask |= 1ULL << MLX4_UPD_QP_MASK_QOS_VPP;
4257 cmd->qp_context.qos_vport = params->qos_vport;
4258 }
4259 diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
4260 index 1822382212ee..d6b06bef1b69 100644
4261 --- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
4262 +++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
4263 @@ -5048,6 +5048,7 @@ static void rem_slave_fs_rule(struct mlx4_dev *dev, int slave)
4264 &tracker->res_tree[RES_FS_RULE]);
4265 list_del(&fs_rule->com.list);
4266 spin_unlock_irq(mlx4_tlock(dev));
4267 + kfree(fs_rule->mirr_mbox);
4268 kfree(fs_rule);
4269 state = 0;
4270 break;
4271 @@ -5214,6 +5215,13 @@ void mlx4_delete_all_resources_for_slave(struct mlx4_dev *dev, int slave)
4272 mutex_unlock(&priv->mfunc.master.res_tracker.slave_list[slave].mutex);
4273 }
4274
4275 +static void update_qos_vpp(struct mlx4_update_qp_context *ctx,
4276 + struct mlx4_vf_immed_vlan_work *work)
4277 +{
4278 + ctx->qp_mask |= cpu_to_be64(1ULL << MLX4_UPD_QP_MASK_QOS_VPP);
4279 + ctx->qp_context.qos_vport = work->qos_vport;
4280 +}
4281 +
4282 void mlx4_vf_immed_vlan_work_handler(struct work_struct *_work)
4283 {
4284 struct mlx4_vf_immed_vlan_work *work =
4285 @@ -5328,11 +5336,10 @@ void mlx4_vf_immed_vlan_work_handler(struct work_struct *_work)
4286 qp->sched_queue & 0xC7;
4287 upd_context->qp_context.pri_path.sched_queue |=
4288 ((work->qos & 0x7) << 3);
4289 - upd_context->qp_mask |=
4290 - cpu_to_be64(1ULL <<
4291 - MLX4_UPD_QP_MASK_QOS_VPP);
4292 - upd_context->qp_context.qos_vport =
4293 - work->qos_vport;
4294 +
4295 + if (dev->caps.flags2 &
4296 + MLX4_DEV_CAP_FLAG2_QOS_VPP)
4297 + update_qos_vpp(upd_context, work);
4298 }
4299
4300 err = mlx4_cmd(dev, mailbox->dma,
4301 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
4302 index 38981db43bc3..2d235e8433be 100644
4303 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
4304 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
4305 @@ -2741,6 +2741,9 @@ static int set_feature_lro(struct net_device *netdev, bool enable)
4306
4307 mutex_unlock(&priv->state_lock);
4308
4309 + if (mlx5e_vxlan_allowed(priv->mdev))
4310 + udp_tunnel_get_rx_info(netdev);
4311 +
4312 return err;
4313 }
4314
4315 @@ -3785,13 +3788,6 @@ static void mlx5e_nic_enable(struct mlx5e_priv *priv)
4316 if (netdev->reg_state != NETREG_REGISTERED)
4317 return;
4318
4319 - /* Device already registered: sync netdev system state */
4320 - if (mlx5e_vxlan_allowed(mdev)) {
4321 - rtnl_lock();
4322 - udp_tunnel_get_rx_info(netdev);
4323 - rtnl_unlock();
4324 - }
4325 -
4326 queue_work(priv->wq, &priv->set_rx_mode_work);
4327 }
4328
4329 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
4330 index 981cd1d84a5b..3c183b8c083a 100644
4331 --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
4332 +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
4333 @@ -548,7 +548,6 @@ static int mlx5_irq_set_affinity_hint(struct mlx5_core_dev *mdev, int i)
4334 struct mlx5_priv *priv = &mdev->priv;
4335 struct msix_entry *msix = priv->msix_arr;
4336 int irq = msix[i + MLX5_EQ_VEC_COMP_BASE].vector;
4337 - int err;
4338
4339 if (!zalloc_cpumask_var(&priv->irq_info[i].mask, GFP_KERNEL)) {
4340 mlx5_core_warn(mdev, "zalloc_cpumask_var failed");
4341 @@ -558,18 +557,11 @@ static int mlx5_irq_set_affinity_hint(struct mlx5_core_dev *mdev, int i)
4342 cpumask_set_cpu(cpumask_local_spread(i, priv->numa_node),
4343 priv->irq_info[i].mask);
4344
4345 - err = irq_set_affinity_hint(irq, priv->irq_info[i].mask);
4346 - if (err) {
4347 - mlx5_core_warn(mdev, "irq_set_affinity_hint failed,irq 0x%.4x",
4348 - irq);
4349 - goto err_clear_mask;
4350 - }
4351 + if (IS_ENABLED(CONFIG_SMP) &&
4352 + irq_set_affinity_hint(irq, priv->irq_info[i].mask))
4353 + mlx5_core_warn(mdev, "irq_set_affinity_hint failed, irq 0x%.4x", irq);
4354
4355 return 0;
4356 -
4357 -err_clear_mask:
4358 - free_cpumask_var(priv->irq_info[i].mask);
4359 - return err;
4360 }
4361
4362 static void mlx5_irq_clear_affinity_hint(struct mlx5_core_dev *mdev, int i)
4363 diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
4364 index bea9ae31a769..60e1edcbe573 100644
4365 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
4366 +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
4367 @@ -1448,8 +1448,7 @@ static void mlxsw_sp_fdb_notify_mac_process(struct mlxsw_sp *mlxsw_sp,
4368 err = mlxsw_sp_port_fdb_uc_op(mlxsw_sp, local_port, mac, fid,
4369 adding, true);
4370 if (err) {
4371 - if (net_ratelimit())
4372 - netdev_err(mlxsw_sp_port->dev, "Failed to set FDB entry\n");
4373 + dev_err_ratelimited(mlxsw_sp->bus_info->dev, "Failed to set FDB entry\n");
4374 return;
4375 }
4376
4377 @@ -1509,8 +1508,7 @@ static void mlxsw_sp_fdb_notify_mac_lag_process(struct mlxsw_sp *mlxsw_sp,
4378 err = mlxsw_sp_port_fdb_uc_lag_op(mlxsw_sp, lag_id, mac, fid, lag_vid,
4379 adding, true);
4380 if (err) {
4381 - if (net_ratelimit())
4382 - netdev_err(mlxsw_sp_port->dev, "Failed to set FDB entry\n");
4383 + dev_err_ratelimited(mlxsw_sp->bus_info->dev, "Failed to set FDB entry\n");
4384 return;
4385 }
4386
4387 diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_ctx.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_ctx.c
4388 index b8d5270359cd..e30676515529 100644
4389 --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_ctx.c
4390 +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_ctx.c
4391 @@ -247,7 +247,7 @@ nx_fw_cmd_set_mtu(struct netxen_adapter *adapter, int mtu)
4392 cmd.req.arg3 = 0;
4393
4394 if (recv_ctx->state == NX_HOST_CTX_STATE_ACTIVE)
4395 - netxen_issue_cmd(adapter, &cmd);
4396 + rcode = netxen_issue_cmd(adapter, &cmd);
4397
4398 if (rcode != NX_RCODE_SUCCESS)
4399 return -EIO;
4400 diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
4401 index afe5e57d9acb..d02313770fc2 100644
4402 --- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
4403 +++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
4404 @@ -850,7 +850,7 @@ qed_hw_init_pf_doorbell_bar(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
4405 NULL) +
4406 qed_cxt_get_proto_cid_count(p_hwfn, PROTOCOLID_ETH,
4407 NULL);
4408 - norm_regsize = roundup(QED_PF_DEMS_SIZE * non_pwm_conn, 4096);
4409 + norm_regsize = roundup(QED_PF_DEMS_SIZE * non_pwm_conn, PAGE_SIZE);
4410 min_addr_reg1 = norm_regsize / 4096;
4411 pwm_regsize = db_bar_size - norm_regsize;
4412
4413 @@ -1628,6 +1628,9 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
4414 DP_NOTICE(p_hwfn, "Unknown Speed in 0x%08x\n", link_temp);
4415 }
4416
4417 + p_hwfn->mcp_info->link_capabilities.default_speed_autoneg =
4418 + link->speed.autoneg;
4419 +
4420 link_temp &= NVM_CFG1_PORT_DRV_FLOW_CONTROL_MASK;
4421 link_temp >>= NVM_CFG1_PORT_DRV_FLOW_CONTROL_OFFSET;
4422 link->pause.autoneg = !!(link_temp &
4423 diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c
4424 index dba3fbe4800e..0b949c6d83fc 100644
4425 --- a/drivers/net/ethernet/qlogic/qed/qed_main.c
4426 +++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
4427 @@ -1240,7 +1240,7 @@ static void qed_fill_link(struct qed_hwfn *hwfn,
4428
4429 /* TODO - at the moment assume supported and advertised speed equal */
4430 if_link->supported_caps = QED_LM_FIBRE_BIT;
4431 - if (params.speed.autoneg)
4432 + if (link_caps.default_speed_autoneg)
4433 if_link->supported_caps |= QED_LM_Autoneg_BIT;
4434 if (params.pause.autoneg ||
4435 (params.pause.forced_rx && params.pause.forced_tx))
4436 @@ -1250,6 +1250,10 @@ static void qed_fill_link(struct qed_hwfn *hwfn,
4437 if_link->supported_caps |= QED_LM_Pause_BIT;
4438
4439 if_link->advertised_caps = if_link->supported_caps;
4440 + if (params.speed.autoneg)
4441 + if_link->advertised_caps |= QED_LM_Autoneg_BIT;
4442 + else
4443 + if_link->advertised_caps &= ~QED_LM_Autoneg_BIT;
4444 if (params.speed.advertised_speeds &
4445 NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_1G)
4446 if_link->advertised_caps |= QED_LM_1000baseT_Half_BIT |
4447 diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.h b/drivers/net/ethernet/qlogic/qed/qed_mcp.h
4448 index dff520ed069b..7b7a84d2c839 100644
4449 --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.h
4450 +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.h
4451 @@ -35,6 +35,7 @@ struct qed_mcp_link_params {
4452
4453 struct qed_mcp_link_capabilities {
4454 u32 speed_capabilities;
4455 + bool default_speed_autoneg;
4456 };
4457
4458 struct qed_mcp_link_state {
4459 diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
4460 index 509b596cf1e8..bd1ec70fb736 100644
4461 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
4462 +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
4463 @@ -341,7 +341,7 @@ qlcnic_pcie_sem_lock(struct qlcnic_adapter *adapter, int sem, u32 id_reg)
4464 }
4465 return -EIO;
4466 }
4467 - usleep_range(1000, 1500);
4468 + udelay(1200);
4469 }
4470
4471 if (id_reg)
4472 diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_dbg.c b/drivers/net/ethernet/qlogic/qlge/qlge_dbg.c
4473 index be258d90de9e..e3223f2fe2ff 100644
4474 --- a/drivers/net/ethernet/qlogic/qlge/qlge_dbg.c
4475 +++ b/drivers/net/ethernet/qlogic/qlge/qlge_dbg.c
4476 @@ -765,7 +765,7 @@ int ql_core_dump(struct ql_adapter *qdev, struct ql_mpi_coredump *mpi_coredump)
4477 sizeof(struct mpi_coredump_global_header);
4478 mpi_coredump->mpi_global_header.imageSize =
4479 sizeof(struct ql_mpi_coredump);
4480 - memcpy(mpi_coredump->mpi_global_header.idString, "MPI Coredump",
4481 + strncpy(mpi_coredump->mpi_global_header.idString, "MPI Coredump",
4482 sizeof(mpi_coredump->mpi_global_header.idString));
4483
4484 /* Get generic NIC reg dump */
4485 @@ -1255,7 +1255,7 @@ static void ql_gen_reg_dump(struct ql_adapter *qdev,
4486 sizeof(struct mpi_coredump_global_header);
4487 mpi_coredump->mpi_global_header.imageSize =
4488 sizeof(struct ql_reg_dump);
4489 - memcpy(mpi_coredump->mpi_global_header.idString, "MPI Coredump",
4490 + strncpy(mpi_coredump->mpi_global_header.idString, "MPI Coredump",
4491 sizeof(mpi_coredump->mpi_global_header.idString));
4492
4493
4494 diff --git a/drivers/net/ethernet/qualcomm/qca_spi.c b/drivers/net/ethernet/qualcomm/qca_spi.c
4495 index 6e2add979471..8bbb55f31909 100644
4496 --- a/drivers/net/ethernet/qualcomm/qca_spi.c
4497 +++ b/drivers/net/ethernet/qualcomm/qca_spi.c
4498 @@ -296,8 +296,9 @@ qcaspi_receive(struct qcaspi *qca)
4499
4500 /* Allocate rx SKB if we don't have one available. */
4501 if (!qca->rx_skb) {
4502 - qca->rx_skb = netdev_alloc_skb(net_dev,
4503 - net_dev->mtu + VLAN_ETH_HLEN);
4504 + qca->rx_skb = netdev_alloc_skb_ip_align(net_dev,
4505 + net_dev->mtu +
4506 + VLAN_ETH_HLEN);
4507 if (!qca->rx_skb) {
4508 netdev_dbg(net_dev, "out of RX resources\n");
4509 qca->stats.out_of_mem++;
4510 @@ -377,7 +378,7 @@ qcaspi_receive(struct qcaspi *qca)
4511 qca->rx_skb, qca->rx_skb->dev);
4512 qca->rx_skb->ip_summed = CHECKSUM_UNNECESSARY;
4513 netif_rx_ni(qca->rx_skb);
4514 - qca->rx_skb = netdev_alloc_skb(net_dev,
4515 + qca->rx_skb = netdev_alloc_skb_ip_align(net_dev,
4516 net_dev->mtu + VLAN_ETH_HLEN);
4517 if (!qca->rx_skb) {
4518 netdev_dbg(net_dev, "out of RX resources\n");
4519 @@ -759,7 +760,8 @@ qcaspi_netdev_init(struct net_device *dev)
4520 if (!qca->rx_buffer)
4521 return -ENOBUFS;
4522
4523 - qca->rx_skb = netdev_alloc_skb(dev, qca->net_dev->mtu + VLAN_ETH_HLEN);
4524 + qca->rx_skb = netdev_alloc_skb_ip_align(dev, qca->net_dev->mtu +
4525 + VLAN_ETH_HLEN);
4526 if (!qca->rx_skb) {
4527 kfree(qca->rx_buffer);
4528 netdev_info(qca->net_dev, "Failed to allocate RX sk_buff.\n");
4529 diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
4530 index 18e68c91e651..dbb63640bc6e 100644
4531 --- a/drivers/net/ethernet/realtek/r8169.c
4532 +++ b/drivers/net/ethernet/realtek/r8169.c
4533 @@ -8446,12 +8446,12 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
4534 goto err_out_msi_5;
4535 }
4536
4537 + pci_set_drvdata(pdev, dev);
4538 +
4539 rc = register_netdev(dev);
4540 if (rc < 0)
4541 goto err_out_cnt_6;
4542
4543 - pci_set_drvdata(pdev, dev);
4544 -
4545 netif_info(tp, probe, dev, "%s at 0x%p, %pM, XID %08x IRQ %d\n",
4546 rtl_chip_infos[chipset].name, ioaddr, dev->dev_addr,
4547 (u32)(RTL_R32(TxConfig) & 0x9cf0f8ff), pdev->irq);
4548 diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
4549 index b6816ae00b7a..c8fd99b3ca29 100644
4550 --- a/drivers/net/ethernet/renesas/sh_eth.c
4551 +++ b/drivers/net/ethernet/renesas/sh_eth.c
4552 @@ -3133,7 +3133,7 @@ static int sh_eth_drv_probe(struct platform_device *pdev)
4553 /* MDIO bus init */
4554 ret = sh_mdio_init(mdp, pd);
4555 if (ret) {
4556 - dev_err(&ndev->dev, "failed to initialise MDIO\n");
4557 + dev_err(&pdev->dev, "failed to initialise MDIO\n");
4558 goto out_release;
4559 }
4560
4561 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
4562 index 98bbb91336e4..c212d1dd8bfd 100644
4563 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
4564 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
4565 @@ -478,7 +478,10 @@ static int stmmac_hwtstamp_ioctl(struct net_device *dev, struct ifreq *ifr)
4566 /* PTP v1, UDP, any kind of event packet */
4567 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
4568 /* take time stamp for all event messages */
4569 - snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
4570 + if (priv->plat->has_gmac4)
4571 + snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1;
4572 + else
4573 + snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
4574
4575 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
4576 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
4577 @@ -510,7 +513,10 @@ static int stmmac_hwtstamp_ioctl(struct net_device *dev, struct ifreq *ifr)
4578 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
4579 ptp_v2 = PTP_TCR_TSVER2ENA;
4580 /* take time stamp for all event messages */
4581 - snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
4582 + if (priv->plat->has_gmac4)
4583 + snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1;
4584 + else
4585 + snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
4586
4587 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
4588 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
4589 @@ -544,7 +550,10 @@ static int stmmac_hwtstamp_ioctl(struct net_device *dev, struct ifreq *ifr)
4590 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
4591 ptp_v2 = PTP_TCR_TSVER2ENA;
4592 /* take time stamp for all event messages */
4593 - snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
4594 + if (priv->plat->has_gmac4)
4595 + snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1;
4596 + else
4597 + snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
4598
4599 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
4600 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
4601 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h b/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h
4602 index c06938c47af5..174777cd888e 100644
4603 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h
4604 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h
4605 @@ -63,7 +63,8 @@
4606 /* Enable Snapshot for Messages Relevant to Master */
4607 #define PTP_TCR_TSMSTRENA BIT(15)
4608 /* Select PTP packets for Taking Snapshots */
4609 -#define PTP_TCR_SNAPTYPSEL_1 GENMASK(17, 16)
4610 +#define PTP_TCR_SNAPTYPSEL_1 BIT(16)
4611 +#define PTP_GMAC4_TCR_SNAPTYPSEL_1 GENMASK(17, 16)
4612 /* Enable MAC address for PTP Frame Filtering */
4613 #define PTP_TCR_TSENMACADDR BIT(18)
4614
4615 diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
4616 index 2bd1282735b0..552de9c490c6 100644
4617 --- a/drivers/net/ethernet/ti/cpsw.c
4618 +++ b/drivers/net/ethernet/ti/cpsw.c
4619 @@ -282,6 +282,10 @@ struct cpsw_ss_regs {
4620 /* Bit definitions for the CPSW1_TS_SEQ_LTYPE register */
4621 #define CPSW_V1_SEQ_ID_OFS_SHIFT 16
4622
4623 +#define CPSW_MAX_BLKS_TX 15
4624 +#define CPSW_MAX_BLKS_TX_SHIFT 4
4625 +#define CPSW_MAX_BLKS_RX 5
4626 +
4627 struct cpsw_host_regs {
4628 u32 max_blks;
4629 u32 blk_cnt;
4630 @@ -1160,11 +1164,23 @@ static void cpsw_slave_open(struct cpsw_slave *slave, struct cpsw_priv *priv)
4631 switch (cpsw->version) {
4632 case CPSW_VERSION_1:
4633 slave_write(slave, TX_PRIORITY_MAPPING, CPSW1_TX_PRI_MAP);
4634 + /* Increase RX FIFO size to 5 for supporting fullduplex
4635 + * flow control mode
4636 + */
4637 + slave_write(slave,
4638 + (CPSW_MAX_BLKS_TX << CPSW_MAX_BLKS_TX_SHIFT) |
4639 + CPSW_MAX_BLKS_RX, CPSW1_MAX_BLKS);
4640 break;
4641 case CPSW_VERSION_2:
4642 case CPSW_VERSION_3:
4643 case CPSW_VERSION_4:
4644 slave_write(slave, TX_PRIORITY_MAPPING, CPSW2_TX_PRI_MAP);
4645 + /* Increase RX FIFO size to 5 for supporting fullduplex
4646 + * flow control mode
4647 + */
4648 + slave_write(slave,
4649 + (CPSW_MAX_BLKS_TX << CPSW_MAX_BLKS_TX_SHIFT) |
4650 + CPSW_MAX_BLKS_RX, CPSW2_MAX_BLKS);
4651 break;
4652 }
4653
4654 diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
4655 index 3c1f89ab0110..92ad43e53c72 100644
4656 --- a/drivers/net/geneve.c
4657 +++ b/drivers/net/geneve.c
4658 @@ -209,6 +209,7 @@ static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
4659 struct genevehdr *gnvh = geneve_hdr(skb);
4660 struct metadata_dst *tun_dst = NULL;
4661 struct pcpu_sw_netstats *stats;
4662 + unsigned int len;
4663 int err = 0;
4664 void *oiph;
4665
4666 @@ -222,8 +223,10 @@ static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
4667 tun_dst = udp_tun_rx_dst(skb, geneve_get_sk_family(gs), flags,
4668 vni_to_tunnel_id(gnvh->vni),
4669 gnvh->opt_len * 4);
4670 - if (!tun_dst)
4671 + if (!tun_dst) {
4672 + geneve->dev->stats.rx_dropped++;
4673 goto drop;
4674 + }
4675 /* Update tunnel dst according to Geneve options. */
4676 ip_tunnel_info_opts_set(&tun_dst->u.tun_info,
4677 gnvh->options, gnvh->opt_len * 4);
4678 @@ -231,8 +234,11 @@ static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
4679 /* Drop packets w/ critical options,
4680 * since we don't support any...
4681 */
4682 - if (gnvh->critical)
4683 + if (gnvh->critical) {
4684 + geneve->dev->stats.rx_frame_errors++;
4685 + geneve->dev->stats.rx_errors++;
4686 goto drop;
4687 + }
4688 }
4689
4690 skb_reset_mac_header(skb);
4691 @@ -243,8 +249,10 @@ static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
4692 skb_dst_set(skb, &tun_dst->dst);
4693
4694 /* Ignore packet loops (and multicast echo) */
4695 - if (ether_addr_equal(eth_hdr(skb)->h_source, geneve->dev->dev_addr))
4696 + if (ether_addr_equal(eth_hdr(skb)->h_source, geneve->dev->dev_addr)) {
4697 + geneve->dev->stats.rx_errors++;
4698 goto drop;
4699 + }
4700
4701 oiph = skb_network_header(skb);
4702 skb_reset_network_header(skb);
4703 @@ -276,13 +284,15 @@ static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
4704 }
4705 }
4706
4707 - stats = this_cpu_ptr(geneve->dev->tstats);
4708 - u64_stats_update_begin(&stats->syncp);
4709 - stats->rx_packets++;
4710 - stats->rx_bytes += skb->len;
4711 - u64_stats_update_end(&stats->syncp);
4712 -
4713 - gro_cells_receive(&geneve->gro_cells, skb);
4714 + len = skb->len;
4715 + err = gro_cells_receive(&geneve->gro_cells, skb);
4716 + if (likely(err == NET_RX_SUCCESS)) {
4717 + stats = this_cpu_ptr(geneve->dev->tstats);
4718 + u64_stats_update_begin(&stats->syncp);
4719 + stats->rx_packets++;
4720 + stats->rx_bytes += len;
4721 + u64_stats_update_end(&stats->syncp);
4722 + }
4723 return;
4724 drop:
4725 /* Consume bad packet */
4726 @@ -332,7 +342,7 @@ static int geneve_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
4727 struct geneve_sock *gs;
4728 int opts_len;
4729
4730 - /* Need Geneve and inner Ethernet header to be present */
4731 + /* Need UDP and Geneve header to be present */
4732 if (unlikely(!pskb_may_pull(skb, GENEVE_BASE_HLEN)))
4733 goto drop;
4734
4735 @@ -355,8 +365,10 @@ static int geneve_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
4736 opts_len = geneveh->opt_len * 4;
4737 if (iptunnel_pull_header(skb, GENEVE_BASE_HLEN + opts_len,
4738 htons(ETH_P_TEB),
4739 - !net_eq(geneve->net, dev_net(geneve->dev))))
4740 + !net_eq(geneve->net, dev_net(geneve->dev)))) {
4741 + geneve->dev->stats.rx_dropped++;
4742 goto drop;
4743 + }
4744
4745 geneve_rx(geneve, gs, skb);
4746 return 0;
4747 diff --git a/drivers/net/hamradio/hdlcdrv.c b/drivers/net/hamradio/hdlcdrv.c
4748 index 4bad0b894e9c..27160d1870e1 100644
4749 --- a/drivers/net/hamradio/hdlcdrv.c
4750 +++ b/drivers/net/hamradio/hdlcdrv.c
4751 @@ -576,6 +576,8 @@ static int hdlcdrv_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
4752 case HDLCDRVCTL_CALIBRATE:
4753 if(!capable(CAP_SYS_RAWIO))
4754 return -EPERM;
4755 + if (s->par.bitrate <= 0)
4756 + return -EINVAL;
4757 if (bi.data.calibrate > INT_MAX / s->par.bitrate)
4758 return -EINVAL;
4759 s->hdlctx.calibrate = bi.data.calibrate * s->par.bitrate / 16;
4760 diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
4761 index 2caac0c37059..365a48cfcbbf 100644
4762 --- a/drivers/net/macsec.c
4763 +++ b/drivers/net/macsec.c
4764 @@ -742,7 +742,12 @@ static struct sk_buff *macsec_encrypt(struct sk_buff *skb,
4765 macsec_fill_iv(iv, secy->sci, pn);
4766
4767 sg_init_table(sg, ret);
4768 - skb_to_sgvec(skb, sg, 0, skb->len);
4769 + ret = skb_to_sgvec(skb, sg, 0, skb->len);
4770 + if (unlikely(ret < 0)) {
4771 + macsec_txsa_put(tx_sa);
4772 + kfree_skb(skb);
4773 + return ERR_PTR(ret);
4774 + }
4775
4776 if (tx_sc->encrypt) {
4777 int len = skb->len - macsec_hdr_len(sci_present) -
4778 @@ -949,7 +954,11 @@ static struct sk_buff *macsec_decrypt(struct sk_buff *skb,
4779 macsec_fill_iv(iv, sci, ntohl(hdr->packet_number));
4780
4781 sg_init_table(sg, ret);
4782 - skb_to_sgvec(skb, sg, 0, skb->len);
4783 + ret = skb_to_sgvec(skb, sg, 0, skb->len);
4784 + if (unlikely(ret < 0)) {
4785 + kfree_skb(skb);
4786 + return ERR_PTR(ret);
4787 + }
4788
4789 if (hdr->tci_an & MACSEC_TCI_E) {
4790 /* confidentiality: ethernet + macsec header
4791 diff --git a/drivers/net/phy/mdio-mux.c b/drivers/net/phy/mdio-mux.c
4792 index 963838d4fac1..599ce24c514f 100644
4793 --- a/drivers/net/phy/mdio-mux.c
4794 +++ b/drivers/net/phy/mdio-mux.c
4795 @@ -122,10 +122,9 @@ int mdio_mux_init(struct device *dev,
4796 pb = devm_kzalloc(dev, sizeof(*pb), GFP_KERNEL);
4797 if (pb == NULL) {
4798 ret_val = -ENOMEM;
4799 - goto err_parent_bus;
4800 + goto err_pb_kz;
4801 }
4802
4803 -
4804 pb->switch_data = data;
4805 pb->switch_fn = switch_fn;
4806 pb->current_child = -1;
4807 @@ -154,6 +153,7 @@ int mdio_mux_init(struct device *dev,
4808 cb->mii_bus = mdiobus_alloc();
4809 if (!cb->mii_bus) {
4810 ret_val = -ENOMEM;
4811 + devm_kfree(dev, cb);
4812 of_node_put(child_bus_node);
4813 break;
4814 }
4815 @@ -170,7 +170,6 @@ int mdio_mux_init(struct device *dev,
4816 mdiobus_free(cb->mii_bus);
4817 devm_kfree(dev, cb);
4818 } else {
4819 - of_node_get(child_bus_node);
4820 cb->next = pb->children;
4821 pb->children = cb;
4822 }
4823 @@ -181,9 +180,11 @@ int mdio_mux_init(struct device *dev,
4824 return 0;
4825 }
4826
4827 + devm_kfree(dev, pb);
4828 +err_pb_kz:
4829 /* balance the reference of_mdio_find_bus() took */
4830 - put_device(&pb->mii_bus->dev);
4831 -
4832 + if (!mux_bus)
4833 + put_device(&parent_bus->dev);
4834 err_parent_bus:
4835 of_node_put(parent_bus_node);
4836 return ret_val;
4837 diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
4838 index 2032a6de026b..4da73e2c37cf 100644
4839 --- a/drivers/net/phy/micrel.c
4840 +++ b/drivers/net/phy/micrel.c
4841 @@ -268,23 +268,12 @@ static int kszphy_nand_tree_disable(struct phy_device *phydev)
4842 return ret;
4843 }
4844
4845 -static int kszphy_config_init(struct phy_device *phydev)
4846 +/* Some config bits need to be set again on resume, handle them here. */
4847 +static int kszphy_config_reset(struct phy_device *phydev)
4848 {
4849 struct kszphy_priv *priv = phydev->priv;
4850 - const struct kszphy_type *type;
4851 int ret;
4852
4853 - if (!priv)
4854 - return 0;
4855 -
4856 - type = priv->type;
4857 -
4858 - if (type->has_broadcast_disable)
4859 - kszphy_broadcast_disable(phydev);
4860 -
4861 - if (type->has_nand_tree_disable)
4862 - kszphy_nand_tree_disable(phydev);
4863 -
4864 if (priv->rmii_ref_clk_sel) {
4865 ret = kszphy_rmii_clk_sel(phydev, priv->rmii_ref_clk_sel_val);
4866 if (ret) {
4867 @@ -295,7 +284,7 @@ static int kszphy_config_init(struct phy_device *phydev)
4868 }
4869
4870 if (priv->led_mode >= 0)
4871 - kszphy_setup_led(phydev, type->led_mode_reg, priv->led_mode);
4872 + kszphy_setup_led(phydev, priv->type->led_mode_reg, priv->led_mode);
4873
4874 if (phy_interrupt_is_valid(phydev)) {
4875 int ctl = phy_read(phydev, MII_BMCR);
4876 @@ -311,6 +300,25 @@ static int kszphy_config_init(struct phy_device *phydev)
4877 return 0;
4878 }
4879
4880 +static int kszphy_config_init(struct phy_device *phydev)
4881 +{
4882 + struct kszphy_priv *priv = phydev->priv;
4883 + const struct kszphy_type *type;
4884 +
4885 + if (!priv)
4886 + return 0;
4887 +
4888 + type = priv->type;
4889 +
4890 + if (type->has_broadcast_disable)
4891 + kszphy_broadcast_disable(phydev);
4892 +
4893 + if (type->has_nand_tree_disable)
4894 + kszphy_nand_tree_disable(phydev);
4895 +
4896 + return kszphy_config_reset(phydev);
4897 +}
4898 +
4899 static int ksz8041_config_init(struct phy_device *phydev)
4900 {
4901 struct device_node *of_node = phydev->mdio.dev.of_node;
4902 @@ -715,8 +723,14 @@ static int kszphy_suspend(struct phy_device *phydev)
4903
4904 static int kszphy_resume(struct phy_device *phydev)
4905 {
4906 + int ret;
4907 +
4908 genphy_resume(phydev);
4909
4910 + ret = kszphy_config_reset(phydev);
4911 + if (ret)
4912 + return ret;
4913 +
4914 /* Enable PHY Interrupts */
4915 if (phy_interrupt_is_valid(phydev)) {
4916 phydev->interrupts = PHY_INTERRUPT_ENABLED;
4917 diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
4918 index e2d9ca60e467..4d217649c8b1 100644
4919 --- a/drivers/net/phy/phy.c
4920 +++ b/drivers/net/phy/phy.c
4921 @@ -148,6 +148,12 @@ static inline int phy_aneg_done(struct phy_device *phydev)
4922 if (phydev->drv->aneg_done)
4923 return phydev->drv->aneg_done(phydev);
4924
4925 + /* Avoid genphy_aneg_done() if the Clause 45 PHY does not
4926 + * implement Clause 22 registers
4927 + */
4928 + if (phydev->is_c45 && !(phydev->c45_ids.devices_in_package & BIT(0)))
4929 + return -EINVAL;
4930 +
4931 return genphy_aneg_done(phydev);
4932 }
4933
4934 diff --git a/drivers/net/ppp/pptp.c b/drivers/net/ppp/pptp.c
4935 index 1951b1085cb8..3045c9662ed6 100644
4936 --- a/drivers/net/ppp/pptp.c
4937 +++ b/drivers/net/ppp/pptp.c
4938 @@ -465,7 +465,6 @@ static int pptp_connect(struct socket *sock, struct sockaddr *uservaddr,
4939 po->chan.mtu = dst_mtu(&rt->dst);
4940 if (!po->chan.mtu)
4941 po->chan.mtu = PPP_MRU;
4942 - ip_rt_put(rt);
4943 po->chan.mtu -= PPTP_HEADER_OVERHEAD;
4944
4945 po->chan.hdrlen = 2 + sizeof(struct pptp_gre_header);
4946 diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
4947 index a0a9c9d39f01..8673ef3c9cdc 100644
4948 --- a/drivers/net/team/team.c
4949 +++ b/drivers/net/team/team.c
4950 @@ -1203,11 +1203,6 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
4951 goto err_dev_open;
4952 }
4953
4954 - netif_addr_lock_bh(dev);
4955 - dev_uc_sync_multiple(port_dev, dev);
4956 - dev_mc_sync_multiple(port_dev, dev);
4957 - netif_addr_unlock_bh(dev);
4958 -
4959 err = vlan_vids_add_by_dev(port_dev, dev);
4960 if (err) {
4961 netdev_err(dev, "Failed to add vlan ids to device %s\n",
4962 @@ -1247,6 +1242,11 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
4963 goto err_option_port_add;
4964 }
4965
4966 + netif_addr_lock_bh(dev);
4967 + dev_uc_sync_multiple(port_dev, dev);
4968 + dev_mc_sync_multiple(port_dev, dev);
4969 + netif_addr_unlock_bh(dev);
4970 +
4971 port->index = -1;
4972 list_add_tail_rcu(&port->list, &team->port_list);
4973 team_port_enable(team, port);
4974 @@ -1271,8 +1271,6 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
4975 vlan_vids_del_by_dev(port_dev, dev);
4976
4977 err_vids_add:
4978 - dev_uc_unsync(port_dev, dev);
4979 - dev_mc_unsync(port_dev, dev);
4980 dev_close(port_dev);
4981
4982 err_dev_open:
4983 diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
4984 index dc6d3b0a0be8..feb61eaffe32 100644
4985 --- a/drivers/net/usb/cdc_ncm.c
4986 +++ b/drivers/net/usb/cdc_ncm.c
4987 @@ -1118,6 +1118,7 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)
4988 u16 n = 0, index, ndplen;
4989 u8 ready2send = 0;
4990 u32 delayed_ndp_size;
4991 + size_t padding_count;
4992
4993 /* When our NDP gets written in cdc_ncm_ndp(), then skb_out->len gets updated
4994 * accordingly. Otherwise, we should check here.
4995 @@ -1274,11 +1275,13 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)
4996 * a ZLP after full sized NTBs.
4997 */
4998 if (!(dev->driver_info->flags & FLAG_SEND_ZLP) &&
4999 - skb_out->len > ctx->min_tx_pkt)
5000 - memset(skb_put(skb_out, ctx->tx_max - skb_out->len), 0,
5001 - ctx->tx_max - skb_out->len);
5002 - else if (skb_out->len < ctx->tx_max && (skb_out->len % dev->maxpacket) == 0)
5003 + skb_out->len > ctx->min_tx_pkt) {
5004 + padding_count = ctx->tx_max - skb_out->len;
5005 + memset(skb_put(skb_out, padding_count), 0, padding_count);
5006 + } else if (skb_out->len < ctx->tx_max &&
5007 + (skb_out->len % dev->maxpacket) == 0) {
5008 *skb_put(skb_out, 1) = 0; /* force short packet */
5009 + }
5010
5011 /* set final frame length */
5012 nth16 = (struct usb_cdc_ncm_nth16 *)skb_out->data;
5013 diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
5014 index 1568aedddfc9..472ed6df2221 100644
5015 --- a/drivers/net/virtio_net.c
5016 +++ b/drivers/net/virtio_net.c
5017 @@ -529,7 +529,12 @@ static int add_recvbuf_small(struct virtnet_info *vi, struct receive_queue *rq,
5018 hdr = skb_vnet_hdr(skb);
5019 sg_init_table(rq->sg, 2);
5020 sg_set_buf(rq->sg, hdr, vi->hdr_len);
5021 - skb_to_sgvec(skb, rq->sg + 1, 0, skb->len);
5022 +
5023 + err = skb_to_sgvec(skb, rq->sg + 1, 0, skb->len);
5024 + if (unlikely(err < 0)) {
5025 + dev_kfree_skb(skb);
5026 + return err;
5027 + }
5028
5029 err = virtqueue_add_inbuf(rq->vq, rq->sg, 2, skb, gfp);
5030 if (err < 0)
5031 @@ -831,7 +836,7 @@ static int xmit_skb(struct send_queue *sq, struct sk_buff *skb)
5032 struct virtio_net_hdr_mrg_rxbuf *hdr;
5033 const unsigned char *dest = ((struct ethhdr *)skb->data)->h_dest;
5034 struct virtnet_info *vi = sq->vq->vdev->priv;
5035 - unsigned num_sg;
5036 + int num_sg;
5037 unsigned hdr_len = vi->hdr_len;
5038 bool can_push;
5039
5040 @@ -858,11 +863,16 @@ static int xmit_skb(struct send_queue *sq, struct sk_buff *skb)
5041 if (can_push) {
5042 __skb_push(skb, hdr_len);
5043 num_sg = skb_to_sgvec(skb, sq->sg, 0, skb->len);
5044 + if (unlikely(num_sg < 0))
5045 + return num_sg;
5046 /* Pull header back to avoid skew in tx bytes calculations. */
5047 __skb_pull(skb, hdr_len);
5048 } else {
5049 sg_set_buf(sq->sg, hdr, hdr_len);
5050 - num_sg = skb_to_sgvec(skb, sq->sg + 1, 0, skb->len) + 1;
5051 + num_sg = skb_to_sgvec(skb, sq->sg + 1, 0, skb->len);
5052 + if (unlikely(num_sg < 0))
5053 + return num_sg;
5054 + num_sg++;
5055 }
5056 return virtqueue_add_outbuf(sq->vq, sq->sg, num_sg, skb, GFP_ATOMIC);
5057 }
5058 diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
5059 index 4afba17e2403..f809eed0343c 100644
5060 --- a/drivers/net/vmxnet3/vmxnet3_drv.c
5061 +++ b/drivers/net/vmxnet3/vmxnet3_drv.c
5062 @@ -2962,6 +2962,11 @@ vmxnet3_force_close(struct vmxnet3_adapter *adapter)
5063 /* we need to enable NAPI, otherwise dev_close will deadlock */
5064 for (i = 0; i < adapter->num_rx_queues; i++)
5065 napi_enable(&adapter->rx_queue[i].napi);
5066 + /*
5067 + * Need to clear the quiesce bit to ensure that vmxnet3_close
5068 + * can quiesce the device properly
5069 + */
5070 + clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state);
5071 dev_close(adapter->netdev);
5072 }
5073
5074 diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
5075 index 346e48698555..42c9480acdc7 100644
5076 --- a/drivers/net/vrf.c
5077 +++ b/drivers/net/vrf.c
5078 @@ -585,13 +585,15 @@ static int vrf_finish_output(struct net *net, struct sock *sk, struct sk_buff *s
5079 neigh = __ipv4_neigh_lookup_noref(dev, nexthop);
5080 if (unlikely(!neigh))
5081 neigh = __neigh_create(&arp_tbl, &nexthop, dev, false);
5082 - if (!IS_ERR(neigh))
5083 + if (!IS_ERR(neigh)) {
5084 ret = dst_neigh_output(dst, neigh, skb);
5085 + rcu_read_unlock_bh();
5086 + return ret;
5087 + }
5088
5089 rcu_read_unlock_bh();
5090 err:
5091 - if (unlikely(ret < 0))
5092 - vrf_tx_error(skb->dev, skb);
5093 + vrf_tx_error(skb->dev, skb);
5094 return ret;
5095 }
5096
5097 diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
5098 index 0f5dfb8a545d..28afdf22b88f 100644
5099 --- a/drivers/net/vxlan.c
5100 +++ b/drivers/net/vxlan.c
5101 @@ -930,7 +930,7 @@ static bool vxlan_snoop(struct net_device *dev,
5102 return false;
5103
5104 /* Don't migrate static entries, drop packets */
5105 - if (f->state & NUD_NOARP)
5106 + if (f->state & (NUD_PERMANENT | NUD_NOARP))
5107 return true;
5108
5109 if (net_ratelimit())
5110 diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
5111 index 65647533b401..a8bd68f252e9 100644
5112 --- a/drivers/net/wan/fsl_ucc_hdlc.c
5113 +++ b/drivers/net/wan/fsl_ucc_hdlc.c
5114 @@ -137,7 +137,7 @@ static int uhdlc_init(struct ucc_hdlc_private *priv)
5115 priv->tx_ring_size = TX_BD_RING_LEN;
5116 /* Alloc Rx BD */
5117 priv->rx_bd_base = dma_alloc_coherent(priv->dev,
5118 - RX_BD_RING_LEN * sizeof(struct qe_bd *),
5119 + RX_BD_RING_LEN * sizeof(struct qe_bd),
5120 &priv->dma_rx_bd, GFP_KERNEL);
5121
5122 if (!priv->rx_bd_base) {
5123 @@ -148,7 +148,7 @@ static int uhdlc_init(struct ucc_hdlc_private *priv)
5124
5125 /* Alloc Tx BD */
5126 priv->tx_bd_base = dma_alloc_coherent(priv->dev,
5127 - TX_BD_RING_LEN * sizeof(struct qe_bd *),
5128 + TX_BD_RING_LEN * sizeof(struct qe_bd),
5129 &priv->dma_tx_bd, GFP_KERNEL);
5130
5131 if (!priv->tx_bd_base) {
5132 @@ -158,7 +158,7 @@ static int uhdlc_init(struct ucc_hdlc_private *priv)
5133 }
5134
5135 /* Alloc parameter ram for ucc hdlc */
5136 - priv->ucc_pram_offset = qe_muram_alloc(sizeof(priv->ucc_pram),
5137 + priv->ucc_pram_offset = qe_muram_alloc(sizeof(struct ucc_hdlc_param),
5138 ALIGNMENT_OF_UCC_HDLC_PRAM);
5139
5140 if (priv->ucc_pram_offset < 0) {
5141 @@ -295,11 +295,11 @@ static int uhdlc_init(struct ucc_hdlc_private *priv)
5142 qe_muram_free(priv->ucc_pram_offset);
5143 free_tx_bd:
5144 dma_free_coherent(priv->dev,
5145 - TX_BD_RING_LEN * sizeof(struct qe_bd *),
5146 + TX_BD_RING_LEN * sizeof(struct qe_bd),
5147 priv->tx_bd_base, priv->dma_tx_bd);
5148 free_rx_bd:
5149 dma_free_coherent(priv->dev,
5150 - RX_BD_RING_LEN * sizeof(struct qe_bd *),
5151 + RX_BD_RING_LEN * sizeof(struct qe_bd),
5152 priv->rx_bd_base, priv->dma_rx_bd);
5153 free_uccf:
5154 ucc_fast_free(priv->uccf);
5155 @@ -454,7 +454,7 @@ static int hdlc_tx_done(struct ucc_hdlc_private *priv)
5156 static int hdlc_rx_done(struct ucc_hdlc_private *priv, int rx_work_limit)
5157 {
5158 struct net_device *dev = priv->ndev;
5159 - struct sk_buff *skb;
5160 + struct sk_buff *skb = NULL;
5161 hdlc_device *hdlc = dev_to_hdlc(dev);
5162 struct qe_bd *bd;
5163 u32 bd_status;
5164 @@ -688,7 +688,7 @@ static void uhdlc_memclean(struct ucc_hdlc_private *priv)
5165
5166 if (priv->rx_bd_base) {
5167 dma_free_coherent(priv->dev,
5168 - RX_BD_RING_LEN * sizeof(struct qe_bd *),
5169 + RX_BD_RING_LEN * sizeof(struct qe_bd),
5170 priv->rx_bd_base, priv->dma_rx_bd);
5171
5172 priv->rx_bd_base = NULL;
5173 @@ -697,7 +697,7 @@ static void uhdlc_memclean(struct ucc_hdlc_private *priv)
5174
5175 if (priv->tx_bd_base) {
5176 dma_free_coherent(priv->dev,
5177 - TX_BD_RING_LEN * sizeof(struct qe_bd *),
5178 + TX_BD_RING_LEN * sizeof(struct qe_bd),
5179 priv->tx_bd_base, priv->dma_tx_bd);
5180
5181 priv->tx_bd_base = NULL;
5182 @@ -1002,7 +1002,7 @@ static int ucc_hdlc_probe(struct platform_device *pdev)
5183 struct device_node *np = pdev->dev.of_node;
5184 struct ucc_hdlc_private *uhdlc_priv = NULL;
5185 struct ucc_tdm_info *ut_info;
5186 - struct ucc_tdm *utdm;
5187 + struct ucc_tdm *utdm = NULL;
5188 struct resource res;
5189 struct net_device *dev;
5190 hdlc_device *hdlc;
5191 diff --git a/drivers/net/wireless/ath/ath10k/bmi.h b/drivers/net/wireless/ath/ath10k/bmi.h
5192 index 7d3231acfb24..82bdec744055 100644
5193 --- a/drivers/net/wireless/ath/ath10k/bmi.h
5194 +++ b/drivers/net/wireless/ath/ath10k/bmi.h
5195 @@ -83,6 +83,8 @@ enum bmi_cmd_id {
5196 #define BMI_NVRAM_SEG_NAME_SZ 16
5197
5198 #define BMI_PARAM_GET_EEPROM_BOARD_ID 0x10
5199 +#define BMI_PARAM_GET_FLASH_BOARD_ID 0x8000
5200 +#define BMI_PARAM_FLASH_SECTION_ALL 0x10000
5201
5202 #define ATH10K_BMI_BOARD_ID_FROM_OTP_MASK 0x7c00
5203 #define ATH10K_BMI_BOARD_ID_FROM_OTP_LSB 10
5204 diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
5205 index 7b3017f55e3d..65ad7a130ca1 100644
5206 --- a/drivers/net/wireless/ath/ath10k/core.c
5207 +++ b/drivers/net/wireless/ath/ath10k/core.c
5208 @@ -652,7 +652,7 @@ static int ath10k_core_get_board_id_from_otp(struct ath10k *ar)
5209 {
5210 u32 result, address;
5211 u8 board_id, chip_id;
5212 - int ret;
5213 + int ret, bmi_board_id_param;
5214
5215 address = ar->hw_params.patch_load_addr;
5216
5217 @@ -676,8 +676,13 @@ static int ath10k_core_get_board_id_from_otp(struct ath10k *ar)
5218 return ret;
5219 }
5220
5221 - ret = ath10k_bmi_execute(ar, address, BMI_PARAM_GET_EEPROM_BOARD_ID,
5222 - &result);
5223 + if (ar->cal_mode == ATH10K_PRE_CAL_MODE_DT ||
5224 + ar->cal_mode == ATH10K_PRE_CAL_MODE_FILE)
5225 + bmi_board_id_param = BMI_PARAM_GET_FLASH_BOARD_ID;
5226 + else
5227 + bmi_board_id_param = BMI_PARAM_GET_EEPROM_BOARD_ID;
5228 +
5229 + ret = ath10k_bmi_execute(ar, address, bmi_board_id_param, &result);
5230 if (ret) {
5231 ath10k_err(ar, "could not execute otp for board id check: %d\n",
5232 ret);
5233 @@ -739,6 +744,11 @@ static int ath10k_download_and_run_otp(struct ath10k *ar)
5234 return ret;
5235 }
5236
5237 + /* As of now pre-cal is valid for 10_4 variants */
5238 + if (ar->cal_mode == ATH10K_PRE_CAL_MODE_DT ||
5239 + ar->cal_mode == ATH10K_PRE_CAL_MODE_FILE)
5240 + bmi_otp_exe_param = BMI_PARAM_FLASH_SECTION_ALL;
5241 +
5242 ret = ath10k_bmi_execute(ar, address, bmi_otp_exe_param, &result);
5243 if (ret) {
5244 ath10k_err(ar, "could not execute otp (%d)\n", ret);
5245 diff --git a/drivers/net/wireless/ath/ath5k/debug.c b/drivers/net/wireless/ath/ath5k/debug.c
5246 index 4f8d9ed04f5e..4a1054408f1a 100644
5247 --- a/drivers/net/wireless/ath/ath5k/debug.c
5248 +++ b/drivers/net/wireless/ath/ath5k/debug.c
5249 @@ -939,7 +939,10 @@ static int open_file_eeprom(struct inode *inode, struct file *file)
5250 }
5251
5252 for (i = 0; i < eesize; ++i) {
5253 - AR5K_EEPROM_READ(i, val);
5254 + if (!ath5k_hw_nvram_read(ah, i, &val)) {
5255 + ret = -EIO;
5256 + goto freebuf;
5257 + }
5258 buf[i] = val;
5259 }
5260
5261 diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-7000.c b/drivers/net/wireless/intel/iwlwifi/iwl-7000.c
5262 index d4b73dedf89b..b35adbca7a5d 100644
5263 --- a/drivers/net/wireless/intel/iwlwifi/iwl-7000.c
5264 +++ b/drivers/net/wireless/intel/iwlwifi/iwl-7000.c
5265 @@ -79,8 +79,8 @@
5266 /* Lowest firmware API version supported */
5267 #define IWL7260_UCODE_API_MIN 17
5268 #define IWL7265_UCODE_API_MIN 17
5269 -#define IWL7265D_UCODE_API_MIN 17
5270 -#define IWL3168_UCODE_API_MIN 20
5271 +#define IWL7265D_UCODE_API_MIN 22
5272 +#define IWL3168_UCODE_API_MIN 22
5273
5274 /* NVM versions */
5275 #define IWL7260_NVM_VERSION 0x0a1d
5276 diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-8000.c b/drivers/net/wireless/intel/iwlwifi/iwl-8000.c
5277 index 8d3e53fac1da..20d08ddb4388 100644
5278 --- a/drivers/net/wireless/intel/iwlwifi/iwl-8000.c
5279 +++ b/drivers/net/wireless/intel/iwlwifi/iwl-8000.c
5280 @@ -74,8 +74,8 @@
5281 #define IWL8265_UCODE_API_MAX 26
5282
5283 /* Lowest firmware API version supported */
5284 -#define IWL8000_UCODE_API_MIN 17
5285 -#define IWL8265_UCODE_API_MIN 20
5286 +#define IWL8000_UCODE_API_MIN 22
5287 +#define IWL8265_UCODE_API_MIN 22
5288
5289 /* NVM versions */
5290 #define IWL8000_NVM_VERSION 0x0a1d
5291 diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-prph.h b/drivers/net/wireless/intel/iwlwifi/iwl-prph.h
5292 index 406ef301b8ab..da8234b762bf 100644
5293 --- a/drivers/net/wireless/intel/iwlwifi/iwl-prph.h
5294 +++ b/drivers/net/wireless/intel/iwlwifi/iwl-prph.h
5295 @@ -369,6 +369,7 @@
5296 #define MON_DMARB_RD_DATA_ADDR (0xa03c5c)
5297
5298 #define DBGC_IN_SAMPLE (0xa03c00)
5299 +#define DBGC_OUT_CTRL (0xa03c0c)
5300
5301 /* enable the ID buf for read */
5302 #define WFPM_PS_CTL_CLR 0xA0300C
5303 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw-dbg.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw-dbg.c
5304 index 700d244df34b..2642d8e477b8 100644
5305 --- a/drivers/net/wireless/intel/iwlwifi/mvm/fw-dbg.c
5306 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw-dbg.c
5307 @@ -914,14 +914,6 @@ int iwl_mvm_fw_dbg_collect_trig(struct iwl_mvm *mvm,
5308 return 0;
5309 }
5310
5311 -static inline void iwl_mvm_restart_early_start(struct iwl_mvm *mvm)
5312 -{
5313 - if (mvm->cfg->device_family == IWL_DEVICE_FAMILY_7000)
5314 - iwl_clear_bits_prph(mvm->trans, MON_BUFF_SAMPLE_CTL, 0x100);
5315 - else
5316 - iwl_write_prph(mvm->trans, DBGC_IN_SAMPLE, 1);
5317 -}
5318 -
5319 int iwl_mvm_start_fw_dbg_conf(struct iwl_mvm *mvm, u8 conf_id)
5320 {
5321 u8 *ptr;
5322 @@ -935,10 +927,8 @@ int iwl_mvm_start_fw_dbg_conf(struct iwl_mvm *mvm, u8 conf_id)
5323 /* EARLY START - firmware's configuration is hard coded */
5324 if ((!mvm->fw->dbg_conf_tlv[conf_id] ||
5325 !mvm->fw->dbg_conf_tlv[conf_id]->num_of_hcmds) &&
5326 - conf_id == FW_DBG_START_FROM_ALIVE) {
5327 - iwl_mvm_restart_early_start(mvm);
5328 + conf_id == FW_DBG_START_FROM_ALIVE)
5329 return 0;
5330 - }
5331
5332 if (!mvm->fw->dbg_conf_tlv[conf_id])
5333 return -EINVAL;
5334 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
5335 index c60703e0c246..2b1c691bb4b2 100644
5336 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
5337 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
5338 @@ -1666,8 +1666,11 @@ int iwl_mvm_find_free_queue(struct iwl_mvm *mvm, u8 sta_id, u8 minq, u8 maxq);
5339 */
5340 static inline u32 iwl_mvm_flushable_queues(struct iwl_mvm *mvm)
5341 {
5342 + u32 cmd_queue = iwl_mvm_is_dqa_supported(mvm) ? IWL_MVM_DQA_CMD_QUEUE :
5343 + IWL_MVM_CMD_QUEUE;
5344 +
5345 return ((BIT(mvm->cfg->base_params->num_of_queues) - 1) &
5346 - ~BIT(IWL_MVM_CMD_QUEUE));
5347 + ~BIT(cmd_queue));
5348 }
5349
5350 static inline
5351 @@ -1687,6 +1690,7 @@ void iwl_mvm_enable_ac_txq(struct iwl_mvm *mvm, int queue, int mac80211_queue,
5352 static inline void iwl_mvm_stop_device(struct iwl_mvm *mvm)
5353 {
5354 mvm->ucode_loaded = false;
5355 + mvm->fw_dbg_conf = FW_DBG_INVALID;
5356 iwl_trans_stop_device(mvm->trans);
5357 }
5358
5359 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
5360 index 4d35deb628bc..6d38eec3f9d3 100644
5361 --- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
5362 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
5363 @@ -1118,21 +1118,37 @@ static void iwl_mvm_fw_error_dump_wk(struct work_struct *work)
5364
5365 mutex_lock(&mvm->mutex);
5366
5367 - /* stop recording */
5368 if (mvm->cfg->device_family == IWL_DEVICE_FAMILY_7000) {
5369 + /* stop recording */
5370 iwl_set_bits_prph(mvm->trans, MON_BUFF_SAMPLE_CTL, 0x100);
5371 +
5372 + iwl_mvm_fw_error_dump(mvm);
5373 +
5374 + /* start recording again if the firmware is not crashed */
5375 + if (!test_bit(STATUS_FW_ERROR, &mvm->trans->status) &&
5376 + mvm->fw->dbg_dest_tlv)
5377 + iwl_clear_bits_prph(mvm->trans,
5378 + MON_BUFF_SAMPLE_CTL, 0x100);
5379 } else {
5380 + u32 in_sample = iwl_read_prph(mvm->trans, DBGC_IN_SAMPLE);
5381 + u32 out_ctrl = iwl_read_prph(mvm->trans, DBGC_OUT_CTRL);
5382 +
5383 + /* stop recording */
5384 iwl_write_prph(mvm->trans, DBGC_IN_SAMPLE, 0);
5385 - /* wait before we collect the data till the DBGC stop */
5386 udelay(100);
5387 - }
5388 + iwl_write_prph(mvm->trans, DBGC_OUT_CTRL, 0);
5389 + /* wait before we collect the data till the DBGC stop */
5390 + udelay(500);
5391
5392 - iwl_mvm_fw_error_dump(mvm);
5393 + iwl_mvm_fw_error_dump(mvm);
5394
5395 - /* start recording again if the firmware is not crashed */
5396 - WARN_ON_ONCE((!test_bit(STATUS_FW_ERROR, &mvm->trans->status)) &&
5397 - mvm->fw->dbg_dest_tlv &&
5398 - iwl_mvm_start_fw_dbg_conf(mvm, mvm->fw_dbg_conf));
5399 + /* start recording again if the firmware is not crashed */
5400 + if (!test_bit(STATUS_FW_ERROR, &mvm->trans->status) &&
5401 + mvm->fw->dbg_dest_tlv) {
5402 + iwl_write_prph(mvm->trans, DBGC_IN_SAMPLE, in_sample);
5403 + iwl_write_prph(mvm->trans, DBGC_OUT_CTRL, out_ctrl);
5404 + }
5405 + }
5406
5407 mutex_unlock(&mvm->mutex);
5408
5409 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
5410 index bec7d9c46087..c5203568a47a 100644
5411 --- a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
5412 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
5413 @@ -790,11 +790,13 @@ static int iwl_mvm_tcool_set_cur_state(struct thermal_cooling_device *cdev,
5414 struct iwl_mvm *mvm = (struct iwl_mvm *)(cdev->devdata);
5415 int ret;
5416
5417 - if (!mvm->ucode_loaded || !(mvm->cur_ucode == IWL_UCODE_REGULAR))
5418 - return -EIO;
5419 -
5420 mutex_lock(&mvm->mutex);
5421
5422 + if (!mvm->ucode_loaded || !(mvm->cur_ucode == IWL_UCODE_REGULAR)) {
5423 + ret = -EIO;
5424 + goto unlock;
5425 + }
5426 +
5427 if (new_state >= ARRAY_SIZE(iwl_mvm_cdev_budgets)) {
5428 ret = -EINVAL;
5429 goto unlock;
5430 diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
5431 index 10ef44e8ecd5..fe32de252e6b 100644
5432 --- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
5433 +++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
5434 @@ -2824,7 +2824,8 @@ static struct iwl_trans_dump_data
5435 #ifdef CONFIG_PM_SLEEP
5436 static int iwl_trans_pcie_suspend(struct iwl_trans *trans)
5437 {
5438 - if (trans->runtime_pm_mode == IWL_PLAT_PM_MODE_D0I3)
5439 + if (trans->runtime_pm_mode == IWL_PLAT_PM_MODE_D0I3 &&
5440 + (trans->system_pm_mode == IWL_PLAT_PM_MODE_D0I3))
5441 return iwl_pci_fw_enter_d0i3(trans);
5442
5443 return 0;
5444 @@ -2832,7 +2833,8 @@ static int iwl_trans_pcie_suspend(struct iwl_trans *trans)
5445
5446 static void iwl_trans_pcie_resume(struct iwl_trans *trans)
5447 {
5448 - if (trans->runtime_pm_mode == IWL_PLAT_PM_MODE_D0I3)
5449 + if (trans->runtime_pm_mode == IWL_PLAT_PM_MODE_D0I3 &&
5450 + (trans->system_pm_mode == IWL_PLAT_PM_MODE_D0I3))
5451 iwl_pci_fw_exit_d0i3(trans);
5452 }
5453 #endif /* CONFIG_PM_SLEEP */
5454 diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c b/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c
5455 index 13da95a24cf7..987c7c4f43cd 100644
5456 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c
5457 +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c
5458 @@ -142,15 +142,25 @@ void rt2x00mac_tx(struct ieee80211_hw *hw,
5459 if (!rt2x00dev->ops->hw->set_rts_threshold &&
5460 (tx_info->control.rates[0].flags & (IEEE80211_TX_RC_USE_RTS_CTS |
5461 IEEE80211_TX_RC_USE_CTS_PROTECT))) {
5462 - if (rt2x00queue_available(queue) <= 1)
5463 - goto exit_fail;
5464 + if (rt2x00queue_available(queue) <= 1) {
5465 + /*
5466 + * Recheck for full queue under lock to avoid race
5467 + * conditions with rt2x00lib_txdone().
5468 + */
5469 + spin_lock(&queue->tx_lock);
5470 + if (rt2x00queue_threshold(queue))
5471 + rt2x00queue_pause_queue(queue);
5472 + spin_unlock(&queue->tx_lock);
5473 +
5474 + goto exit_free_skb;
5475 + }
5476
5477 if (rt2x00mac_tx_rts_cts(rt2x00dev, queue, skb))
5478 - goto exit_fail;
5479 + goto exit_free_skb;
5480 }
5481
5482 if (unlikely(rt2x00queue_write_tx_frame(queue, skb, control->sta, false)))
5483 - goto exit_fail;
5484 + goto exit_free_skb;
5485
5486 /*
5487 * Pausing queue has to be serialized with rt2x00lib_txdone(). Note
5488 @@ -164,10 +174,6 @@ void rt2x00mac_tx(struct ieee80211_hw *hw,
5489
5490 return;
5491
5492 - exit_fail:
5493 - spin_lock(&queue->tx_lock);
5494 - rt2x00queue_pause_queue(queue);
5495 - spin_unlock(&queue->tx_lock);
5496 exit_free_skb:
5497 ieee80211_free_txskb(hw, skb);
5498 }
5499 diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c
5500 index 0881ba8535f4..c78abfc7bd96 100644
5501 --- a/drivers/net/wireless/ray_cs.c
5502 +++ b/drivers/net/wireless/ray_cs.c
5503 @@ -247,7 +247,10 @@ static const UCHAR b4_default_startup_parms[] = {
5504 0x04, 0x08, /* Noise gain, limit offset */
5505 0x28, 0x28, /* det rssi, med busy offsets */
5506 7, /* det sync thresh */
5507 - 0, 2, 2 /* test mode, min, max */
5508 + 0, 2, 2, /* test mode, min, max */
5509 + 0, /* rx/tx delay */
5510 + 0, 0, 0, 0, 0, 0, /* current BSS id */
5511 + 0 /* hop set */
5512 };
5513
5514 /*===========================================================================*/
5515 @@ -598,7 +601,7 @@ static void init_startup_params(ray_dev_t *local)
5516 * a_beacon_period = hops a_beacon_period = KuS
5517 *//* 64ms = 010000 */
5518 if (local->fw_ver == 0x55) {
5519 - memcpy((UCHAR *) &local->sparm.b4, b4_default_startup_parms,
5520 + memcpy(&local->sparm.b4, b4_default_startup_parms,
5521 sizeof(struct b4_startup_params));
5522 /* Translate sane kus input values to old build 4/5 format */
5523 /* i = hop time in uS truncated to 3 bytes */
5524 diff --git a/drivers/net/wireless/ti/wl1251/main.c b/drivers/net/wireless/ti/wl1251/main.c
5525 index 1c539c83e8cf..5e41bf04ef61 100644
5526 --- a/drivers/net/wireless/ti/wl1251/main.c
5527 +++ b/drivers/net/wireless/ti/wl1251/main.c
5528 @@ -1200,8 +1200,7 @@ static void wl1251_op_bss_info_changed(struct ieee80211_hw *hw,
5529 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
5530
5531 enable = bss_conf->arp_addr_cnt == 1 && bss_conf->assoc;
5532 - wl1251_acx_arp_ip_filter(wl, enable, addr);
5533 -
5534 + ret = wl1251_acx_arp_ip_filter(wl, enable, addr);
5535 if (ret < 0)
5536 goto out_sleep;
5537 }
5538 diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
5539 index ad9d82eb2aed..c823e9346389 100644
5540 --- a/drivers/nvme/host/core.c
5541 +++ b/drivers/nvme/host/core.c
5542 @@ -2040,6 +2040,10 @@ void nvme_kill_queues(struct nvme_ctrl *ctrl)
5543 struct nvme_ns *ns;
5544
5545 mutex_lock(&ctrl->namespaces_mutex);
5546 +
5547 + /* Forcibly start all queues to avoid having stuck requests */
5548 + blk_mq_start_hw_queues(ctrl->admin_q);
5549 +
5550 list_for_each_entry(ns, &ctrl->namespaces, list) {
5551 /*
5552 * Revalidating a dead namespace sets capacity to 0. This will
5553 diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
5554 index e48ecb9303ca..8cc856ecec95 100644
5555 --- a/drivers/nvme/host/pci.c
5556 +++ b/drivers/nvme/host/pci.c
5557 @@ -1263,7 +1263,7 @@ static bool nvme_should_reset(struct nvme_dev *dev, u32 csts)
5558 bool nssro = dev->subsystem && (csts & NVME_CSTS_NSSRO);
5559
5560 /* If there is a reset ongoing, we shouldn't reset again. */
5561 - if (work_busy(&dev->reset_work))
5562 + if (dev->ctrl.state == NVME_CTRL_RESETTING)
5563 return false;
5564
5565 /* We shouldn't reset unless the controller is on fatal error state
5566 @@ -1755,7 +1755,7 @@ static void nvme_reset_work(struct work_struct *work)
5567 struct nvme_dev *dev = container_of(work, struct nvme_dev, reset_work);
5568 int result = -ENODEV;
5569
5570 - if (WARN_ON(dev->ctrl.state == NVME_CTRL_RESETTING))
5571 + if (WARN_ON(dev->ctrl.state != NVME_CTRL_RESETTING))
5572 goto out;
5573
5574 /*
5575 @@ -1765,9 +1765,6 @@ static void nvme_reset_work(struct work_struct *work)
5576 if (dev->ctrl.ctrl_config & NVME_CC_ENABLE)
5577 nvme_dev_disable(dev, false);
5578
5579 - if (!nvme_change_ctrl_state(&dev->ctrl, NVME_CTRL_RESETTING))
5580 - goto out;
5581 -
5582 result = nvme_pci_enable(dev);
5583 if (result)
5584 goto out;
5585 @@ -1841,8 +1838,8 @@ static int nvme_reset(struct nvme_dev *dev)
5586 {
5587 if (!dev->ctrl.admin_q || blk_queue_dying(dev->ctrl.admin_q))
5588 return -ENODEV;
5589 - if (work_busy(&dev->reset_work))
5590 - return -ENODEV;
5591 + if (!nvme_change_ctrl_state(&dev->ctrl, NVME_CTRL_RESETTING))
5592 + return -EBUSY;
5593 if (!queue_work(nvme_workq, &dev->reset_work))
5594 return -EBUSY;
5595 return 0;
5596 @@ -1944,6 +1941,7 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
5597 if (result)
5598 goto release_pools;
5599
5600 + nvme_change_ctrl_state(&dev->ctrl, NVME_CTRL_RESETTING);
5601 dev_info(dev->ctrl.device, "pci function %s\n", dev_name(&pdev->dev));
5602
5603 queue_work(nvme_workq, &dev->reset_work);
5604 @@ -1987,6 +1985,7 @@ static void nvme_remove(struct pci_dev *pdev)
5605
5606 nvme_change_ctrl_state(&dev->ctrl, NVME_CTRL_DELETING);
5607
5608 + cancel_work_sync(&dev->reset_work);
5609 pci_set_drvdata(pdev, NULL);
5610
5611 if (!pci_device_is_present(pdev)) {
5612 diff --git a/drivers/pinctrl/intel/pinctrl-baytrail.c b/drivers/pinctrl/intel/pinctrl-baytrail.c
5613 index 0a965026b134..fc5b18d3db20 100644
5614 --- a/drivers/pinctrl/intel/pinctrl-baytrail.c
5615 +++ b/drivers/pinctrl/intel/pinctrl-baytrail.c
5616 @@ -46,6 +46,9 @@
5617 #define BYT_TRIG_POS BIT(25)
5618 #define BYT_TRIG_LVL BIT(24)
5619 #define BYT_DEBOUNCE_EN BIT(20)
5620 +#define BYT_GLITCH_FILTER_EN BIT(19)
5621 +#define BYT_GLITCH_F_SLOW_CLK BIT(17)
5622 +#define BYT_GLITCH_F_FAST_CLK BIT(16)
5623 #define BYT_PULL_STR_SHIFT 9
5624 #define BYT_PULL_STR_MASK (3 << BYT_PULL_STR_SHIFT)
5625 #define BYT_PULL_STR_2K (0 << BYT_PULL_STR_SHIFT)
5626 @@ -1579,6 +1582,9 @@ static int byt_irq_type(struct irq_data *d, unsigned int type)
5627 */
5628 value &= ~(BYT_DIRECT_IRQ_EN | BYT_TRIG_POS | BYT_TRIG_NEG |
5629 BYT_TRIG_LVL);
5630 + /* Enable glitch filtering */
5631 + value |= BYT_GLITCH_FILTER_EN | BYT_GLITCH_F_SLOW_CLK |
5632 + BYT_GLITCH_F_FAST_CLK;
5633
5634 writel(value, reg);
5635
5636 diff --git a/drivers/pinctrl/meson/pinctrl-meson-gxbb.c b/drivers/pinctrl/meson/pinctrl-meson-gxbb.c
5637 index 7511723c6b05..257c1c2e5888 100644
5638 --- a/drivers/pinctrl/meson/pinctrl-meson-gxbb.c
5639 +++ b/drivers/pinctrl/meson/pinctrl-meson-gxbb.c
5640 @@ -138,7 +138,6 @@ static const struct pinctrl_pin_desc meson_gxbb_periphs_pins[] = {
5641 MESON_PIN(GPIOX_19, EE_OFF),
5642 MESON_PIN(GPIOX_20, EE_OFF),
5643 MESON_PIN(GPIOX_21, EE_OFF),
5644 - MESON_PIN(GPIOX_22, EE_OFF),
5645
5646 MESON_PIN(GPIOCLK_0, EE_OFF),
5647 MESON_PIN(GPIOCLK_1, EE_OFF),
5648 diff --git a/drivers/powercap/powercap_sys.c b/drivers/powercap/powercap_sys.c
5649 index 14bde0db8c24..5b10b50f8686 100644
5650 --- a/drivers/powercap/powercap_sys.c
5651 +++ b/drivers/powercap/powercap_sys.c
5652 @@ -538,6 +538,7 @@ struct powercap_zone *powercap_register_zone(
5653
5654 power_zone->id = result;
5655 idr_init(&power_zone->idr);
5656 + result = -ENOMEM;
5657 power_zone->name = kstrdup(name, GFP_KERNEL);
5658 if (!power_zone->name)
5659 goto err_name_alloc;
5660 diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c
5661 index 6ebd42aad291..25cf3069e2e7 100644
5662 --- a/drivers/rtc/interface.c
5663 +++ b/drivers/rtc/interface.c
5664 @@ -227,6 +227,13 @@ int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
5665 missing = year;
5666 }
5667
5668 + /* Can't proceed if alarm is still invalid after replacing
5669 + * missing fields.
5670 + */
5671 + err = rtc_valid_tm(&alarm->time);
5672 + if (err)
5673 + goto done;
5674 +
5675 /* with luck, no rollover is needed */
5676 t_now = rtc_tm_to_time64(&now);
5677 t_alm = rtc_tm_to_time64(&alarm->time);
5678 @@ -278,9 +285,9 @@ int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
5679 dev_warn(&rtc->dev, "alarm rollover not handled\n");
5680 }
5681
5682 -done:
5683 err = rtc_valid_tm(&alarm->time);
5684
5685 +done:
5686 if (err) {
5687 dev_warn(&rtc->dev, "invalid alarm value: %d-%d-%d %d:%d:%d\n",
5688 alarm->time.tm_year + 1900, alarm->time.tm_mon + 1,
5689 diff --git a/drivers/rtc/rtc-m41t80.c b/drivers/rtc/rtc-m41t80.c
5690 index 58698d21c2c3..c4ca6a385790 100644
5691 --- a/drivers/rtc/rtc-m41t80.c
5692 +++ b/drivers/rtc/rtc-m41t80.c
5693 @@ -168,6 +168,7 @@ static int m41t80_get_datetime(struct i2c_client *client,
5694 /* Sets the given date and time to the real time clock. */
5695 static int m41t80_set_datetime(struct i2c_client *client, struct rtc_time *tm)
5696 {
5697 + struct m41t80_data *clientdata = i2c_get_clientdata(client);
5698 unsigned char buf[8];
5699 int err, flags;
5700
5701 @@ -183,6 +184,17 @@ static int m41t80_set_datetime(struct i2c_client *client, struct rtc_time *tm)
5702 buf[M41T80_REG_YEAR] = bin2bcd(tm->tm_year - 100);
5703 buf[M41T80_REG_WDAY] = tm->tm_wday;
5704
5705 + /* If the square wave output is controlled in the weekday register */
5706 + if (clientdata->features & M41T80_FEATURE_SQ_ALT) {
5707 + int val;
5708 +
5709 + val = i2c_smbus_read_byte_data(client, M41T80_REG_WDAY);
5710 + if (val < 0)
5711 + return val;
5712 +
5713 + buf[M41T80_REG_WDAY] |= (val & 0xf0);
5714 + }
5715 +
5716 err = i2c_smbus_write_i2c_block_data(client, M41T80_REG_SSEC,
5717 sizeof(buf), buf);
5718 if (err < 0) {
5719 diff --git a/drivers/rtc/rtc-opal.c b/drivers/rtc/rtc-opal.c
5720 index e4324dcf9508..aa53fceaa5e0 100644
5721 --- a/drivers/rtc/rtc-opal.c
5722 +++ b/drivers/rtc/rtc-opal.c
5723 @@ -150,6 +150,16 @@ static int opal_get_tpo_time(struct device *dev, struct rtc_wkalrm *alarm)
5724
5725 y_m_d = be32_to_cpu(__y_m_d);
5726 h_m_s_ms = ((u64)be32_to_cpu(__h_m) << 32);
5727 +
5728 + /* check if no alarm is set */
5729 + if (y_m_d == 0 && h_m_s_ms == 0) {
5730 + pr_debug("No alarm is set\n");
5731 + rc = -ENOENT;
5732 + goto exit;
5733 + } else {
5734 + pr_debug("Alarm set to %x %llx\n", y_m_d, h_m_s_ms);
5735 + }
5736 +
5737 opal_to_tm(y_m_d, h_m_s_ms, &alarm->time);
5738
5739 exit:
5740 diff --git a/drivers/rtc/rtc-snvs.c b/drivers/rtc/rtc-snvs.c
5741 index 0f11c2a228e3..a753ef9c1459 100644
5742 --- a/drivers/rtc/rtc-snvs.c
5743 +++ b/drivers/rtc/rtc-snvs.c
5744 @@ -257,7 +257,7 @@ static int snvs_rtc_probe(struct platform_device *pdev)
5745 of_property_read_u32(pdev->dev.of_node, "offset", &data->offset);
5746 }
5747
5748 - if (!data->regmap) {
5749 + if (IS_ERR(data->regmap)) {
5750 dev_err(&pdev->dev, "Can't find snvs syscon\n");
5751 return -ENODEV;
5752 }
5753 diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
5754 index 5ecd40884f01..0da246505f70 100644
5755 --- a/drivers/s390/block/dasd.c
5756 +++ b/drivers/s390/block/dasd.c
5757 @@ -1950,8 +1950,12 @@ static int __dasd_device_is_unusable(struct dasd_device *device,
5758 {
5759 int mask = ~(DASD_STOPPED_DC_WAIT | DASD_UNRESUMED_PM);
5760
5761 - if (test_bit(DASD_FLAG_OFFLINE, &device->flags)) {
5762 - /* dasd is being set offline. */
5763 + if (test_bit(DASD_FLAG_OFFLINE, &device->flags) &&
5764 + !test_bit(DASD_FLAG_SAFE_OFFLINE_RUNNING, &device->flags)) {
5765 + /*
5766 + * dasd is being set offline
5767 + * but it is no safe offline where we have to allow I/O
5768 + */
5769 return 1;
5770 }
5771 if (device->stopped) {
5772 diff --git a/drivers/scsi/bnx2fc/bnx2fc.h b/drivers/scsi/bnx2fc/bnx2fc.h
5773 index fdd4eb4e41b2..e58786f797d9 100644
5774 --- a/drivers/scsi/bnx2fc/bnx2fc.h
5775 +++ b/drivers/scsi/bnx2fc/bnx2fc.h
5776 @@ -191,6 +191,7 @@ struct bnx2fc_hba {
5777 struct bnx2fc_cmd_mgr *cmd_mgr;
5778 spinlock_t hba_lock;
5779 struct mutex hba_mutex;
5780 + struct mutex hba_stats_mutex;
5781 unsigned long adapter_state;
5782 #define ADAPTER_STATE_UP 0
5783 #define ADAPTER_STATE_GOING_DOWN 1
5784 diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
5785 index f9ddb6156f14..bee7d37367ca 100644
5786 --- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
5787 +++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
5788 @@ -670,15 +670,17 @@ static struct fc_host_statistics *bnx2fc_get_host_stats(struct Scsi_Host *shost)
5789 if (!fw_stats)
5790 return NULL;
5791
5792 + mutex_lock(&hba->hba_stats_mutex);
5793 +
5794 bnx2fc_stats = fc_get_host_stats(shost);
5795
5796 init_completion(&hba->stat_req_done);
5797 if (bnx2fc_send_stat_req(hba))
5798 - return bnx2fc_stats;
5799 + goto unlock_stats_mutex;
5800 rc = wait_for_completion_timeout(&hba->stat_req_done, (2 * HZ));
5801 if (!rc) {
5802 BNX2FC_HBA_DBG(lport, "FW stat req timed out\n");
5803 - return bnx2fc_stats;
5804 + goto unlock_stats_mutex;
5805 }
5806 BNX2FC_STATS(hba, rx_stat2, fc_crc_cnt);
5807 bnx2fc_stats->invalid_crc_count += hba->bfw_stats.fc_crc_cnt;
5808 @@ -700,6 +702,9 @@ static struct fc_host_statistics *bnx2fc_get_host_stats(struct Scsi_Host *shost)
5809
5810 memcpy(&hba->prev_stats, hba->stats_buffer,
5811 sizeof(struct fcoe_statistics_params));
5812 +
5813 +unlock_stats_mutex:
5814 + mutex_unlock(&hba->hba_stats_mutex);
5815 return bnx2fc_stats;
5816 }
5817
5818 @@ -1348,6 +1353,7 @@ static struct bnx2fc_hba *bnx2fc_hba_create(struct cnic_dev *cnic)
5819 }
5820 spin_lock_init(&hba->hba_lock);
5821 mutex_init(&hba->hba_mutex);
5822 + mutex_init(&hba->hba_stats_mutex);
5823
5824 hba->cnic = cnic;
5825
5826 diff --git a/drivers/scsi/csiostor/csio_hw.c b/drivers/scsi/csiostor/csio_hw.c
5827 index 622bdabc8894..dab195f04da7 100644
5828 --- a/drivers/scsi/csiostor/csio_hw.c
5829 +++ b/drivers/scsi/csiostor/csio_hw.c
5830 @@ -1769,7 +1769,6 @@ csio_hw_use_fwconfig(struct csio_hw *hw, int reset, u32 *fw_cfg_param)
5831 goto bye;
5832 }
5833
5834 - mempool_free(mbp, hw->mb_mempool);
5835 if (finicsum != cfcsum) {
5836 csio_warn(hw,
5837 "Config File checksum mismatch: csum=%#x, computed=%#x\n",
5838 @@ -1780,6 +1779,10 @@ csio_hw_use_fwconfig(struct csio_hw *hw, int reset, u32 *fw_cfg_param)
5839 rv = csio_hw_validate_caps(hw, mbp);
5840 if (rv != 0)
5841 goto bye;
5842 +
5843 + mempool_free(mbp, hw->mb_mempool);
5844 + mbp = NULL;
5845 +
5846 /*
5847 * Note that we're operating with parameters
5848 * not supplied by the driver, rather than from hard-wired
5849 diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
5850 index 4abd3fce5ab6..c2b682916337 100644
5851 --- a/drivers/scsi/libiscsi.c
5852 +++ b/drivers/scsi/libiscsi.c
5853 @@ -1695,6 +1695,15 @@ int iscsi_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *sc)
5854 */
5855 switch (session->state) {
5856 case ISCSI_STATE_FAILED:
5857 + /*
5858 + * cmds should fail during shutdown, if the session
5859 + * state is bad, allowing completion to happen
5860 + */
5861 + if (unlikely(system_state != SYSTEM_RUNNING)) {
5862 + reason = FAILURE_SESSION_FAILED;
5863 + sc->result = DID_NO_CONNECT << 16;
5864 + break;
5865 + }
5866 case ISCSI_STATE_IN_RECOVERY:
5867 reason = FAILURE_SESSION_IN_RECOVERY;
5868 sc->result = DID_IMM_RETRY << 16;
5869 @@ -1979,6 +1988,19 @@ static enum blk_eh_timer_return iscsi_eh_cmd_timed_out(struct scsi_cmnd *sc)
5870 }
5871
5872 if (session->state != ISCSI_STATE_LOGGED_IN) {
5873 + /*
5874 + * During shutdown, if session is prematurely disconnected,
5875 + * recovery won't happen and there will be hung cmds. Not
5876 + * handling cmds would trigger EH, also bad in this case.
5877 + * Instead, handle cmd, allow completion to happen and let
5878 + * upper layer to deal with the result.
5879 + */
5880 + if (unlikely(system_state != SYSTEM_RUNNING)) {
5881 + sc->result = DID_NO_CONNECT << 16;
5882 + ISCSI_DBG_EH(session, "sc on shutdown, handled\n");
5883 + rc = BLK_EH_HANDLED;
5884 + goto done;
5885 + }
5886 /*
5887 * We are probably in the middle of iscsi recovery so let
5888 * that complete and handle the error.
5889 @@ -2083,7 +2105,7 @@ static enum blk_eh_timer_return iscsi_eh_cmd_timed_out(struct scsi_cmnd *sc)
5890 task->last_timeout = jiffies;
5891 spin_unlock(&session->frwd_lock);
5892 ISCSI_DBG_EH(session, "return %s\n", rc == BLK_EH_RESET_TIMER ?
5893 - "timer reset" : "nh");
5894 + "timer reset" : "shutdown or nh");
5895 return rc;
5896 }
5897
5898 diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c
5899 index 022bb6e10d98..12886f96b286 100644
5900 --- a/drivers/scsi/libsas/sas_expander.c
5901 +++ b/drivers/scsi/libsas/sas_expander.c
5902 @@ -282,6 +282,7 @@ static void sas_set_ex_phy(struct domain_device *dev, int phy_id, void *rsp)
5903 phy->phy->minimum_linkrate = dr->pmin_linkrate;
5904 phy->phy->maximum_linkrate = dr->pmax_linkrate;
5905 phy->phy->negotiated_linkrate = phy->linkrate;
5906 + phy->phy->enabled = (phy->linkrate != SAS_PHY_DISABLED);
5907
5908 skip:
5909 if (new_phy)
5910 @@ -675,7 +676,7 @@ int sas_smp_get_phy_events(struct sas_phy *phy)
5911 res = smp_execute_task(dev, req, RPEL_REQ_SIZE,
5912 resp, RPEL_RESP_SIZE);
5913
5914 - if (!res)
5915 + if (res)
5916 goto out;
5917
5918 phy->invalid_dword_count = scsi_to_u32(&resp[12]);
5919 @@ -684,6 +685,7 @@ int sas_smp_get_phy_events(struct sas_phy *phy)
5920 phy->phy_reset_problem_count = scsi_to_u32(&resp[24]);
5921
5922 out:
5923 + kfree(req);
5924 kfree(resp);
5925 return res;
5926
5927 diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
5928 index 468acab04d3d..b8589068d175 100644
5929 --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
5930 +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
5931 @@ -4065,19 +4065,6 @@ scsih_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *scmd)
5932 return 0;
5933 }
5934
5935 - /*
5936 - * Bug work around for firmware SATL handling. The loop
5937 - * is based on atomic operations and ensures consistency
5938 - * since we're lockless at this point
5939 - */
5940 - do {
5941 - if (test_bit(0, &sas_device_priv_data->ata_command_pending)) {
5942 - scmd->result = SAM_STAT_BUSY;
5943 - scmd->scsi_done(scmd);
5944 - return 0;
5945 - }
5946 - } while (_scsih_set_satl_pending(scmd, true));
5947 -
5948 sas_target_priv_data = sas_device_priv_data->sas_target;
5949
5950 /* invalid device handle */
5951 @@ -4103,6 +4090,19 @@ scsih_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *scmd)
5952 sas_device_priv_data->block)
5953 return SCSI_MLQUEUE_DEVICE_BUSY;
5954
5955 + /*
5956 + * Bug work around for firmware SATL handling. The loop
5957 + * is based on atomic operations and ensures consistency
5958 + * since we're lockless at this point
5959 + */
5960 + do {
5961 + if (test_bit(0, &sas_device_priv_data->ata_command_pending)) {
5962 + scmd->result = SAM_STAT_BUSY;
5963 + scmd->scsi_done(scmd);
5964 + return 0;
5965 + }
5966 + } while (_scsih_set_satl_pending(scmd, true));
5967 +
5968 if (scmd->sc_data_direction == DMA_FROM_DEVICE)
5969 mpi_control = MPI2_SCSIIO_CONTROL_READ;
5970 else if (scmd->sc_data_direction == DMA_TO_DEVICE)
5971 @@ -4124,6 +4124,7 @@ scsih_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *scmd)
5972 if (!smid) {
5973 pr_err(MPT3SAS_FMT "%s: failed obtaining a smid\n",
5974 ioc->name, __func__);
5975 + _scsih_set_satl_pending(scmd, false);
5976 goto out;
5977 }
5978 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid);
5979 @@ -4154,6 +4155,7 @@ scsih_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *scmd)
5980 if (mpi_request->DataLength) {
5981 if (ioc->build_sg_scmd(ioc, scmd, smid)) {
5982 mpt3sas_base_free_smid(ioc, smid);
5983 + _scsih_set_satl_pending(scmd, false);
5984 goto out;
5985 }
5986 } else
5987 diff --git a/drivers/staging/wlan-ng/prism2mgmt.c b/drivers/staging/wlan-ng/prism2mgmt.c
5988 index 170de1c9eac4..f815f9d5045f 100644
5989 --- a/drivers/staging/wlan-ng/prism2mgmt.c
5990 +++ b/drivers/staging/wlan-ng/prism2mgmt.c
5991 @@ -169,7 +169,7 @@ int prism2mgmt_scan(struct wlandevice *wlandev, void *msgp)
5992 hw->ident_sta_fw.variant) >
5993 HFA384x_FIRMWARE_VERSION(1, 5, 0)) {
5994 if (msg->scantype.data != P80211ENUM_scantype_active)
5995 - word = cpu_to_le16(msg->maxchanneltime.data);
5996 + word = msg->maxchanneltime.data;
5997 else
5998 word = 0;
5999
6000 diff --git a/drivers/thermal/power_allocator.c b/drivers/thermal/power_allocator.c
6001 index b4d3116cfdaf..3055f9a12a17 100644
6002 --- a/drivers/thermal/power_allocator.c
6003 +++ b/drivers/thermal/power_allocator.c
6004 @@ -523,6 +523,7 @@ static void allow_maximum_power(struct thermal_zone_device *tz)
6005 struct thermal_instance *instance;
6006 struct power_allocator_params *params = tz->governor_data;
6007
6008 + mutex_lock(&tz->lock);
6009 list_for_each_entry(instance, &tz->thermal_instances, tz_node) {
6010 if ((instance->trip != params->trip_max_desired_temperature) ||
6011 (!cdev_is_power_actor(instance->cdev)))
6012 @@ -534,6 +535,7 @@ static void allow_maximum_power(struct thermal_zone_device *tz)
6013 mutex_unlock(&instance->cdev->lock);
6014 thermal_cdev_update(instance->cdev);
6015 }
6016 + mutex_unlock(&tz->lock);
6017 }
6018
6019 /**
6020 diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
6021 index 54cab59e20ed..fe2291795d2f 100644
6022 --- a/drivers/tty/n_gsm.c
6023 +++ b/drivers/tty/n_gsm.c
6024 @@ -1467,6 +1467,10 @@ static void gsm_dlci_open(struct gsm_dlci *dlci)
6025 * in which case an opening port goes back to closed and a closing port
6026 * is simply put into closed state (any further frames from the other
6027 * end will get a DM response)
6028 + *
6029 + * Some control dlci can stay in ADM mode with other dlci working just
6030 + * fine. In that case we can just keep the control dlci open after the
6031 + * DLCI_OPENING retries time out.
6032 */
6033
6034 static void gsm_dlci_t1(unsigned long data)
6035 @@ -1480,8 +1484,15 @@ static void gsm_dlci_t1(unsigned long data)
6036 if (dlci->retries) {
6037 gsm_command(dlci->gsm, dlci->addr, SABM|PF);
6038 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100);
6039 - } else
6040 + } else if (!dlci->addr && gsm->control == (DM | PF)) {
6041 + if (debug & 8)
6042 + pr_info("DLCI %d opening in ADM mode.\n",
6043 + dlci->addr);
6044 + gsm_dlci_open(dlci);
6045 + } else {
6046 gsm_dlci_close(dlci);
6047 + }
6048 +
6049 break;
6050 case DLCI_CLOSING:
6051 dlci->retries--;
6052 @@ -1499,8 +1510,8 @@ static void gsm_dlci_t1(unsigned long data)
6053 * @dlci: DLCI to open
6054 *
6055 * Commence opening a DLCI from the Linux side. We issue SABM messages
6056 - * to the modem which should then reply with a UA, at which point we
6057 - * will move into open state. Opening is done asynchronously with retry
6058 + * to the modem which should then reply with a UA or ADM, at which point
6059 + * we will move into open state. Opening is done asynchronously with retry
6060 * running off timers and the responses.
6061 */
6062
6063 diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
6064 index da31159a03ec..e8b34f16ba2c 100644
6065 --- a/drivers/tty/serial/8250/8250_omap.c
6066 +++ b/drivers/tty/serial/8250/8250_omap.c
6067 @@ -613,6 +613,10 @@ static int omap_8250_startup(struct uart_port *port)
6068 up->lsr_saved_flags = 0;
6069 up->msr_saved_flags = 0;
6070
6071 + /* Disable DMA for console UART */
6072 + if (uart_console(port))
6073 + up->dma = NULL;
6074 +
6075 if (up->dma) {
6076 ret = serial8250_request_dma(up);
6077 if (ret) {
6078 diff --git a/drivers/tty/serial/sccnxp.c b/drivers/tty/serial/sccnxp.c
6079 index fcf803ffad19..cdd2f942317c 100644
6080 --- a/drivers/tty/serial/sccnxp.c
6081 +++ b/drivers/tty/serial/sccnxp.c
6082 @@ -884,14 +884,19 @@ static int sccnxp_probe(struct platform_device *pdev)
6083
6084 clk = devm_clk_get(&pdev->dev, NULL);
6085 if (IS_ERR(clk)) {
6086 - if (PTR_ERR(clk) == -EPROBE_DEFER) {
6087 - ret = -EPROBE_DEFER;
6088 + ret = PTR_ERR(clk);
6089 + if (ret == -EPROBE_DEFER)
6090 goto err_out;
6091 - }
6092 + uartclk = 0;
6093 + } else {
6094 + clk_prepare_enable(clk);
6095 + uartclk = clk_get_rate(clk);
6096 + }
6097 +
6098 + if (!uartclk) {
6099 dev_notice(&pdev->dev, "Using default clock frequency\n");
6100 uartclk = s->chip->freq_std;
6101 - } else
6102 - uartclk = clk_get_rate(clk);
6103 + }
6104
6105 /* Check input frequency */
6106 if ((uartclk < s->chip->freq_min) || (uartclk > s->chip->freq_max)) {
6107 diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
6108 index a55c94dfefd2..107f0d194ac5 100644
6109 --- a/drivers/tty/serial/sh-sci.c
6110 +++ b/drivers/tty/serial/sh-sci.c
6111 @@ -1545,7 +1545,16 @@ static void sci_free_dma(struct uart_port *port)
6112 if (s->chan_rx)
6113 sci_rx_dma_release(s, false);
6114 }
6115 -#else
6116 +
6117 +static void sci_flush_buffer(struct uart_port *port)
6118 +{
6119 + /*
6120 + * In uart_flush_buffer(), the xmit circular buffer has just been
6121 + * cleared, so we have to reset tx_dma_len accordingly.
6122 + */
6123 + to_sci_port(port)->tx_dma_len = 0;
6124 +}
6125 +#else /* !CONFIG_SERIAL_SH_SCI_DMA */
6126 static inline void sci_request_dma(struct uart_port *port)
6127 {
6128 }
6129 @@ -1553,7 +1562,9 @@ static inline void sci_request_dma(struct uart_port *port)
6130 static inline void sci_free_dma(struct uart_port *port)
6131 {
6132 }
6133 -#endif
6134 +
6135 +#define sci_flush_buffer NULL
6136 +#endif /* !CONFIG_SERIAL_SH_SCI_DMA */
6137
6138 static irqreturn_t sci_rx_interrupt(int irq, void *ptr)
6139 {
6140 @@ -2551,6 +2562,7 @@ static const struct uart_ops sci_uart_ops = {
6141 .break_ctl = sci_break_ctl,
6142 .startup = sci_startup,
6143 .shutdown = sci_shutdown,
6144 + .flush_buffer = sci_flush_buffer,
6145 .set_termios = sci_set_termios,
6146 .pm = sci_pm,
6147 .type = sci_type,
6148 diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
6149 index fba021f5736a..208bc52fc84d 100644
6150 --- a/drivers/uio/uio.c
6151 +++ b/drivers/uio/uio.c
6152 @@ -279,7 +279,7 @@ static int uio_dev_add_attributes(struct uio_device *idev)
6153 map = kzalloc(sizeof(*map), GFP_KERNEL);
6154 if (!map) {
6155 ret = -ENOMEM;
6156 - goto err_map_kobj;
6157 + goto err_map;
6158 }
6159 kobject_init(&map->kobj, &map_attr_type);
6160 map->mem = mem;
6161 @@ -289,7 +289,7 @@ static int uio_dev_add_attributes(struct uio_device *idev)
6162 goto err_map_kobj;
6163 ret = kobject_uevent(&map->kobj, KOBJ_ADD);
6164 if (ret)
6165 - goto err_map;
6166 + goto err_map_kobj;
6167 }
6168
6169 for (pi = 0; pi < MAX_UIO_PORT_REGIONS; pi++) {
6170 @@ -308,7 +308,7 @@ static int uio_dev_add_attributes(struct uio_device *idev)
6171 portio = kzalloc(sizeof(*portio), GFP_KERNEL);
6172 if (!portio) {
6173 ret = -ENOMEM;
6174 - goto err_portio_kobj;
6175 + goto err_portio;
6176 }
6177 kobject_init(&portio->kobj, &portio_attr_type);
6178 portio->port = port;
6179 @@ -319,7 +319,7 @@ static int uio_dev_add_attributes(struct uio_device *idev)
6180 goto err_portio_kobj;
6181 ret = kobject_uevent(&portio->kobj, KOBJ_ADD);
6182 if (ret)
6183 - goto err_portio;
6184 + goto err_portio_kobj;
6185 }
6186
6187 return 0;
6188 diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
6189 index 6e0d614a8075..64c6af2c8559 100644
6190 --- a/drivers/usb/chipidea/core.c
6191 +++ b/drivers/usb/chipidea/core.c
6192 @@ -839,7 +839,7 @@ static inline void ci_role_destroy(struct ci_hdrc *ci)
6193 {
6194 ci_hdrc_gadget_destroy(ci);
6195 ci_hdrc_host_destroy(ci);
6196 - if (ci->is_otg)
6197 + if (ci->is_otg && ci->roles[CI_ROLE_GADGET])
6198 ci_hdrc_otg_destroy(ci);
6199 }
6200
6201 @@ -939,27 +939,35 @@ static int ci_hdrc_probe(struct platform_device *pdev)
6202 /* initialize role(s) before the interrupt is requested */
6203 if (dr_mode == USB_DR_MODE_OTG || dr_mode == USB_DR_MODE_HOST) {
6204 ret = ci_hdrc_host_init(ci);
6205 - if (ret)
6206 - dev_info(dev, "doesn't support host\n");
6207 + if (ret) {
6208 + if (ret == -ENXIO)
6209 + dev_info(dev, "doesn't support host\n");
6210 + else
6211 + goto deinit_phy;
6212 + }
6213 }
6214
6215 if (dr_mode == USB_DR_MODE_OTG || dr_mode == USB_DR_MODE_PERIPHERAL) {
6216 ret = ci_hdrc_gadget_init(ci);
6217 - if (ret)
6218 - dev_info(dev, "doesn't support gadget\n");
6219 + if (ret) {
6220 + if (ret == -ENXIO)
6221 + dev_info(dev, "doesn't support gadget\n");
6222 + else
6223 + goto deinit_host;
6224 + }
6225 }
6226
6227 if (!ci->roles[CI_ROLE_HOST] && !ci->roles[CI_ROLE_GADGET]) {
6228 dev_err(dev, "no supported roles\n");
6229 ret = -ENODEV;
6230 - goto deinit_phy;
6231 + goto deinit_gadget;
6232 }
6233
6234 if (ci->is_otg && ci->roles[CI_ROLE_GADGET]) {
6235 ret = ci_hdrc_otg_init(ci);
6236 if (ret) {
6237 dev_err(dev, "init otg fails, ret = %d\n", ret);
6238 - goto stop;
6239 + goto deinit_gadget;
6240 }
6241 }
6242
6243 @@ -1024,7 +1032,12 @@ static int ci_hdrc_probe(struct platform_device *pdev)
6244
6245 ci_extcon_unregister(ci);
6246 stop:
6247 - ci_role_destroy(ci);
6248 + if (ci->is_otg && ci->roles[CI_ROLE_GADGET])
6249 + ci_hdrc_otg_destroy(ci);
6250 +deinit_gadget:
6251 + ci_hdrc_gadget_destroy(ci);
6252 +deinit_host:
6253 + ci_hdrc_host_destroy(ci);
6254 deinit_phy:
6255 ci_usb_phy_exit(ci);
6256
6257 diff --git a/drivers/usb/dwc3/dwc3-keystone.c b/drivers/usb/dwc3/dwc3-keystone.c
6258 index 72664700b8a2..12ee23f53cdd 100644
6259 --- a/drivers/usb/dwc3/dwc3-keystone.c
6260 +++ b/drivers/usb/dwc3/dwc3-keystone.c
6261 @@ -107,6 +107,10 @@ static int kdwc3_probe(struct platform_device *pdev)
6262 return PTR_ERR(kdwc->usbss);
6263
6264 kdwc->clk = devm_clk_get(kdwc->dev, "usb");
6265 + if (IS_ERR(kdwc->clk)) {
6266 + dev_err(kdwc->dev, "unable to get usb clock\n");
6267 + return PTR_ERR(kdwc->clk);
6268 + }
6269
6270 error = clk_prepare_enable(kdwc->clk);
6271 if (error < 0) {
6272 diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
6273 index dec100811946..ca8b0b1ae37d 100644
6274 --- a/drivers/usb/host/xhci-plat.c
6275 +++ b/drivers/usb/host/xhci-plat.c
6276 @@ -335,7 +335,6 @@ MODULE_DEVICE_TABLE(acpi, usb_xhci_acpi_match);
6277 static struct platform_driver usb_xhci_driver = {
6278 .probe = xhci_plat_probe,
6279 .remove = xhci_plat_remove,
6280 - .shutdown = usb_hcd_platform_shutdown,
6281 .driver = {
6282 .name = "xhci-hcd",
6283 .pm = DEV_PM_OPS,
6284 diff --git a/drivers/usb/storage/ene_ub6250.c b/drivers/usb/storage/ene_ub6250.c
6285 index 4340b4925daa..4d6eb48b2c45 100644
6286 --- a/drivers/usb/storage/ene_ub6250.c
6287 +++ b/drivers/usb/storage/ene_ub6250.c
6288 @@ -1942,6 +1942,8 @@ static int ene_load_bincode(struct us_data *us, unsigned char flag)
6289 bcb->CDB[0] = 0xEF;
6290
6291 result = ene_send_scsi_cmd(us, FDIR_WRITE, buf, 0);
6292 + if (us->srb != NULL)
6293 + scsi_set_resid(us->srb, 0);
6294 info->BIN_FLAG = flag;
6295 kfree(buf);
6296
6297 @@ -2295,21 +2297,22 @@ static int ms_scsi_irp(struct us_data *us, struct scsi_cmnd *srb)
6298
6299 static int ene_transport(struct scsi_cmnd *srb, struct us_data *us)
6300 {
6301 - int result = 0;
6302 + int result = USB_STOR_XFER_GOOD;
6303 struct ene_ub6250_info *info = (struct ene_ub6250_info *)(us->extra);
6304
6305 /*US_DEBUG(usb_stor_show_command(us, srb)); */
6306 scsi_set_resid(srb, 0);
6307 - if (unlikely(!(info->SD_Status.Ready || info->MS_Status.Ready))) {
6308 + if (unlikely(!(info->SD_Status.Ready || info->MS_Status.Ready)))
6309 result = ene_init(us);
6310 - } else {
6311 + if (result == USB_STOR_XFER_GOOD) {
6312 + result = USB_STOR_TRANSPORT_ERROR;
6313 if (info->SD_Status.Ready)
6314 result = sd_scsi_irp(us, srb);
6315
6316 if (info->MS_Status.Ready)
6317 result = ms_scsi_irp(us, srb);
6318 }
6319 - return 0;
6320 + return result;
6321 }
6322
6323 static struct scsi_host_template ene_ub6250_host_template;
6324 diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
6325 index e5b7652234fc..487586e2d8b9 100644
6326 --- a/drivers/vhost/net.c
6327 +++ b/drivers/vhost/net.c
6328 @@ -524,7 +524,7 @@ static int vhost_net_rx_peek_head_len(struct vhost_net *net, struct sock *sk)
6329
6330 if (!len && vq->busyloop_timeout) {
6331 /* Both tx vq and rx socket were polled here */
6332 - mutex_lock(&vq->mutex);
6333 + mutex_lock_nested(&vq->mutex, 1);
6334 vhost_disable_notify(&net->dev, vq);
6335
6336 preempt_disable();
6337 @@ -657,7 +657,7 @@ static void handle_rx(struct vhost_net *net)
6338 struct iov_iter fixup;
6339 __virtio16 num_buffers;
6340
6341 - mutex_lock(&vq->mutex);
6342 + mutex_lock_nested(&vq->mutex, 0);
6343 sock = vq->private_data;
6344 if (!sock)
6345 goto out;
6346 diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
6347 index cd38f5add254..e2c37aeed45a 100644
6348 --- a/drivers/vhost/vhost.c
6349 +++ b/drivers/vhost/vhost.c
6350 @@ -211,8 +211,7 @@ int vhost_poll_start(struct vhost_poll *poll, struct file *file)
6351 if (mask)
6352 vhost_poll_wakeup(&poll->wait, 0, 0, (void *)mask);
6353 if (mask & POLLERR) {
6354 - if (poll->wqh)
6355 - remove_wait_queue(poll->wqh, &poll->wait);
6356 + vhost_poll_stop(poll);
6357 ret = -EINVAL;
6358 }
6359
6360 @@ -1176,14 +1175,12 @@ static int vq_log_access_ok(struct vhost_virtqueue *vq,
6361 /* Caller should have vq mutex and device mutex */
6362 int vhost_vq_access_ok(struct vhost_virtqueue *vq)
6363 {
6364 - if (vq->iotlb) {
6365 - /* When device IOTLB was used, the access validation
6366 - * will be validated during prefetching.
6367 - */
6368 - return 1;
6369 - }
6370 - return vq_access_ok(vq, vq->num, vq->desc, vq->avail, vq->used) &&
6371 - vq_log_access_ok(vq, vq->log_base);
6372 + int ret = vq_log_access_ok(vq, vq->log_base);
6373 +
6374 + if (ret || vq->iotlb)
6375 + return ret;
6376 +
6377 + return vq_access_ok(vq, vq->num, vq->desc, vq->avail, vq->used);
6378 }
6379 EXPORT_SYMBOL_GPL(vhost_vq_access_ok);
6380
6381 diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
6382 index 288318ad21dd..8049e7656daa 100644
6383 --- a/drivers/video/backlight/backlight.c
6384 +++ b/drivers/video/backlight/backlight.c
6385 @@ -134,7 +134,7 @@ static ssize_t bl_power_store(struct device *dev, struct device_attribute *attr,
6386 {
6387 int rc;
6388 struct backlight_device *bd = to_backlight_device(dev);
6389 - unsigned long power;
6390 + unsigned long power, old_power;
6391
6392 rc = kstrtoul(buf, 0, &power);
6393 if (rc)
6394 @@ -145,10 +145,16 @@ static ssize_t bl_power_store(struct device *dev, struct device_attribute *attr,
6395 if (bd->ops) {
6396 pr_debug("set power to %lu\n", power);
6397 if (bd->props.power != power) {
6398 + old_power = bd->props.power;
6399 bd->props.power = power;
6400 - backlight_update_status(bd);
6401 + rc = backlight_update_status(bd);
6402 + if (rc)
6403 + bd->props.power = old_power;
6404 + else
6405 + rc = count;
6406 + } else {
6407 + rc = count;
6408 }
6409 - rc = count;
6410 }
6411 mutex_unlock(&bd->ops_lock);
6412
6413 @@ -176,8 +182,7 @@ int backlight_device_set_brightness(struct backlight_device *bd,
6414 else {
6415 pr_debug("set brightness to %lu\n", brightness);
6416 bd->props.brightness = brightness;
6417 - backlight_update_status(bd);
6418 - rc = 0;
6419 + rc = backlight_update_status(bd);
6420 }
6421 }
6422 mutex_unlock(&bd->ops_lock);
6423 diff --git a/drivers/video/backlight/corgi_lcd.c b/drivers/video/backlight/corgi_lcd.c
6424 index d7c239ea3d09..f5574060f9c8 100644
6425 --- a/drivers/video/backlight/corgi_lcd.c
6426 +++ b/drivers/video/backlight/corgi_lcd.c
6427 @@ -177,7 +177,7 @@ static int corgi_ssp_lcdtg_send(struct corgi_lcd *lcd, int adrs, uint8_t data)
6428 struct spi_message msg;
6429 struct spi_transfer xfer = {
6430 .len = 1,
6431 - .cs_change = 1,
6432 + .cs_change = 0,
6433 .tx_buf = lcd->buf,
6434 };
6435
6436 diff --git a/drivers/video/backlight/tdo24m.c b/drivers/video/backlight/tdo24m.c
6437 index eab1f842f9c0..e4bd63e9db6b 100644
6438 --- a/drivers/video/backlight/tdo24m.c
6439 +++ b/drivers/video/backlight/tdo24m.c
6440 @@ -369,7 +369,7 @@ static int tdo24m_probe(struct spi_device *spi)
6441
6442 spi_message_init(m);
6443
6444 - x->cs_change = 1;
6445 + x->cs_change = 0;
6446 x->tx_buf = &lcd->buf[0];
6447 spi_message_add_tail(x, m);
6448
6449 diff --git a/drivers/video/backlight/tosa_lcd.c b/drivers/video/backlight/tosa_lcd.c
6450 index 6a41ea92737a..4dc5ee8debeb 100644
6451 --- a/drivers/video/backlight/tosa_lcd.c
6452 +++ b/drivers/video/backlight/tosa_lcd.c
6453 @@ -49,7 +49,7 @@ static int tosa_tg_send(struct spi_device *spi, int adrs, uint8_t data)
6454 struct spi_message msg;
6455 struct spi_transfer xfer = {
6456 .len = 1,
6457 - .cs_change = 1,
6458 + .cs_change = 0,
6459 .tx_buf = buf,
6460 };
6461
6462 diff --git a/drivers/video/fbdev/vfb.c b/drivers/video/fbdev/vfb.c
6463 index da653a080394..54127905bfe7 100644
6464 --- a/drivers/video/fbdev/vfb.c
6465 +++ b/drivers/video/fbdev/vfb.c
6466 @@ -239,8 +239,23 @@ static int vfb_check_var(struct fb_var_screeninfo *var,
6467 */
6468 static int vfb_set_par(struct fb_info *info)
6469 {
6470 + switch (info->var.bits_per_pixel) {
6471 + case 1:
6472 + info->fix.visual = FB_VISUAL_MONO01;
6473 + break;
6474 + case 8:
6475 + info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
6476 + break;
6477 + case 16:
6478 + case 24:
6479 + case 32:
6480 + info->fix.visual = FB_VISUAL_TRUECOLOR;
6481 + break;
6482 + }
6483 +
6484 info->fix.line_length = get_line_length(info->var.xres_virtual,
6485 info->var.bits_per_pixel);
6486 +
6487 return 0;
6488 }
6489
6490 @@ -450,6 +465,8 @@ static int vfb_probe(struct platform_device *dev)
6491 goto err2;
6492 platform_set_drvdata(dev, info);
6493
6494 + vfb_set_par(info);
6495 +
6496 fb_info(info, "Virtual frame buffer device, using %ldK of video memory\n",
6497 videomemorysize >> 10);
6498 return 0;
6499 diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
6500 index 3eb58cb51e56..8f8909a668d7 100644
6501 --- a/drivers/watchdog/Kconfig
6502 +++ b/drivers/watchdog/Kconfig
6503 @@ -799,11 +799,12 @@ config EBC_C384_WDT
6504 the timeout module parameter.
6505
6506 config F71808E_WDT
6507 - tristate "Fintek F71808E, F71862FG, F71869, F71882FG and F71889FG Watchdog"
6508 + tristate "Fintek F718xx, F818xx Super I/O Watchdog"
6509 depends on X86
6510 help
6511 - This is the driver for the hardware watchdog on the Fintek
6512 - F71808E, F71862FG, F71869, F71882FG and F71889FG Super I/O controllers.
6513 + This is the driver for the hardware watchdog on the Fintek F71808E,
6514 + F71862FG, F71868, F71869, F71882FG, F71889FG, F81865 and F81866
6515 + Super I/O controllers.
6516
6517 You can compile this driver directly into the kernel, or use
6518 it as a module. The module will be called f71808e_wdt.
6519 diff --git a/drivers/watchdog/f71808e_wdt.c b/drivers/watchdog/f71808e_wdt.c
6520 index 1b7e9169072f..8658dba21768 100644
6521 --- a/drivers/watchdog/f71808e_wdt.c
6522 +++ b/drivers/watchdog/f71808e_wdt.c
6523 @@ -57,6 +57,7 @@
6524 #define SIO_F71808_ID 0x0901 /* Chipset ID */
6525 #define SIO_F71858_ID 0x0507 /* Chipset ID */
6526 #define SIO_F71862_ID 0x0601 /* Chipset ID */
6527 +#define SIO_F71868_ID 0x1106 /* Chipset ID */
6528 #define SIO_F71869_ID 0x0814 /* Chipset ID */
6529 #define SIO_F71869A_ID 0x1007 /* Chipset ID */
6530 #define SIO_F71882_ID 0x0541 /* Chipset ID */
6531 @@ -101,7 +102,7 @@ MODULE_PARM_DESC(timeout,
6532 static unsigned int pulse_width = WATCHDOG_PULSE_WIDTH;
6533 module_param(pulse_width, uint, 0);
6534 MODULE_PARM_DESC(pulse_width,
6535 - "Watchdog signal pulse width. 0(=level), 1 ms, 25 ms, 125 ms or 5000 ms"
6536 + "Watchdog signal pulse width. 0(=level), 1, 25, 30, 125, 150, 5000 or 6000 ms"
6537 " (default=" __MODULE_STRING(WATCHDOG_PULSE_WIDTH) ")");
6538
6539 static unsigned int f71862fg_pin = WATCHDOG_F71862FG_PIN;
6540 @@ -119,13 +120,14 @@ module_param(start_withtimeout, uint, 0);
6541 MODULE_PARM_DESC(start_withtimeout, "Start watchdog timer on module load with"
6542 " given initial timeout. Zero (default) disables this feature.");
6543
6544 -enum chips { f71808fg, f71858fg, f71862fg, f71869, f71882fg, f71889fg, f81865,
6545 - f81866};
6546 +enum chips { f71808fg, f71858fg, f71862fg, f71868, f71869, f71882fg, f71889fg,
6547 + f81865, f81866};
6548
6549 static const char *f71808e_names[] = {
6550 "f71808fg",
6551 "f71858fg",
6552 "f71862fg",
6553 + "f71868",
6554 "f71869",
6555 "f71882fg",
6556 "f71889fg",
6557 @@ -252,16 +254,23 @@ static int watchdog_set_timeout(int timeout)
6558 static int watchdog_set_pulse_width(unsigned int pw)
6559 {
6560 int err = 0;
6561 + unsigned int t1 = 25, t2 = 125, t3 = 5000;
6562 +
6563 + if (watchdog.type == f71868) {
6564 + t1 = 30;
6565 + t2 = 150;
6566 + t3 = 6000;
6567 + }
6568
6569 mutex_lock(&watchdog.lock);
6570
6571 - if (pw <= 1) {
6572 + if (pw <= 1) {
6573 watchdog.pulse_val = 0;
6574 - } else if (pw <= 25) {
6575 + } else if (pw <= t1) {
6576 watchdog.pulse_val = 1;
6577 - } else if (pw <= 125) {
6578 + } else if (pw <= t2) {
6579 watchdog.pulse_val = 2;
6580 - } else if (pw <= 5000) {
6581 + } else if (pw <= t3) {
6582 watchdog.pulse_val = 3;
6583 } else {
6584 pr_err("pulse width out of range\n");
6585 @@ -354,6 +363,7 @@ static int watchdog_start(void)
6586 goto exit_superio;
6587 break;
6588
6589 + case f71868:
6590 case f71869:
6591 /* GPIO14 --> WDTRST# */
6592 superio_clear_bit(watchdog.sioaddr, SIO_REG_MFUNCT1, 4);
6593 @@ -792,6 +802,9 @@ static int __init f71808e_find(int sioaddr)
6594 watchdog.type = f71862fg;
6595 err = f71862fg_pin_configure(0); /* validate module parameter */
6596 break;
6597 + case SIO_F71868_ID:
6598 + watchdog.type = f71868;
6599 + break;
6600 case SIO_F71869_ID:
6601 case SIO_F71869A_ID:
6602 watchdog.type = f71869;
6603 diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
6604 index 8ed05d95584a..03ac3ab4b3b4 100644
6605 --- a/fs/btrfs/extent_io.c
6606 +++ b/fs/btrfs/extent_io.c
6607 @@ -2453,7 +2453,7 @@ void end_extent_writepage(struct page *page, int err, u64 start, u64 end)
6608 if (!uptodate) {
6609 ClearPageUptodate(page);
6610 SetPageError(page);
6611 - ret = ret < 0 ? ret : -EIO;
6612 + ret = err < 0 ? err : -EIO;
6613 mapping_set_error(page->mapping, ret);
6614 }
6615 }
6616 diff --git a/fs/cifs/file.c b/fs/cifs/file.c
6617 index 02e403af9518..49eeed25f200 100644
6618 --- a/fs/cifs/file.c
6619 +++ b/fs/cifs/file.c
6620 @@ -589,7 +589,7 @@ cifs_relock_file(struct cifsFileInfo *cfile)
6621 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
6622 int rc = 0;
6623
6624 - down_read(&cinode->lock_sem);
6625 + down_read_nested(&cinode->lock_sem, SINGLE_DEPTH_NESTING);
6626 if (cinode->can_cache_brlcks) {
6627 /* can cache locks - no need to relock */
6628 up_read(&cinode->lock_sem);
6629 diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
6630 index 7c26286a525d..44b7ccbe4b08 100644
6631 --- a/fs/cifs/smb2pdu.c
6632 +++ b/fs/cifs/smb2pdu.c
6633 @@ -1151,15 +1151,19 @@ SMB2_tcon(const unsigned int xid, struct cifs_ses *ses, const char *tree,
6634 goto tcon_exit;
6635 }
6636
6637 - if (rsp->ShareType & SMB2_SHARE_TYPE_DISK)
6638 + switch (rsp->ShareType) {
6639 + case SMB2_SHARE_TYPE_DISK:
6640 cifs_dbg(FYI, "connection to disk share\n");
6641 - else if (rsp->ShareType & SMB2_SHARE_TYPE_PIPE) {
6642 + break;
6643 + case SMB2_SHARE_TYPE_PIPE:
6644 tcon->ipc = true;
6645 cifs_dbg(FYI, "connection to pipe share\n");
6646 - } else if (rsp->ShareType & SMB2_SHARE_TYPE_PRINT) {
6647 - tcon->print = true;
6648 + break;
6649 + case SMB2_SHARE_TYPE_PRINT:
6650 + tcon->ipc = true;
6651 cifs_dbg(FYI, "connection to printer\n");
6652 - } else {
6653 + break;
6654 + default:
6655 cifs_dbg(VFS, "unknown share type %d\n", rsp->ShareType);
6656 rc = -EOPNOTSUPP;
6657 goto tcon_error_exit;
6658 diff --git a/fs/dcache.c b/fs/dcache.c
6659 index c0c7fa8224ba..2225b9855c5f 100644
6660 --- a/fs/dcache.c
6661 +++ b/fs/dcache.c
6662 @@ -461,9 +461,11 @@ static void dentry_lru_add(struct dentry *dentry)
6663 * d_drop() is used mainly for stuff that wants to invalidate a dentry for some
6664 * reason (NFS timeouts or autofs deletes).
6665 *
6666 - * __d_drop requires dentry->d_lock.
6667 + * __d_drop requires dentry->d_lock
6668 + * ___d_drop doesn't mark dentry as "unhashed"
6669 + * (dentry->d_hash.pprev will be LIST_POISON2, not NULL).
6670 */
6671 -void __d_drop(struct dentry *dentry)
6672 +static void ___d_drop(struct dentry *dentry)
6673 {
6674 if (!d_unhashed(dentry)) {
6675 struct hlist_bl_head *b;
6676 @@ -479,12 +481,17 @@ void __d_drop(struct dentry *dentry)
6677
6678 hlist_bl_lock(b);
6679 __hlist_bl_del(&dentry->d_hash);
6680 - dentry->d_hash.pprev = NULL;
6681 hlist_bl_unlock(b);
6682 /* After this call, in-progress rcu-walk path lookup will fail. */
6683 write_seqcount_invalidate(&dentry->d_seq);
6684 }
6685 }
6686 +
6687 +void __d_drop(struct dentry *dentry)
6688 +{
6689 + ___d_drop(dentry);
6690 + dentry->d_hash.pprev = NULL;
6691 +}
6692 EXPORT_SYMBOL(__d_drop);
6693
6694 void d_drop(struct dentry *dentry)
6695 @@ -2378,7 +2385,7 @@ EXPORT_SYMBOL(d_delete);
6696 static void __d_rehash(struct dentry *entry)
6697 {
6698 struct hlist_bl_head *b = d_hash(entry->d_name.hash);
6699 - BUG_ON(!d_unhashed(entry));
6700 +
6701 hlist_bl_lock(b);
6702 hlist_bl_add_head_rcu(&entry->d_hash, b);
6703 hlist_bl_unlock(b);
6704 @@ -2815,9 +2822,9 @@ static void __d_move(struct dentry *dentry, struct dentry *target,
6705 write_seqcount_begin_nested(&target->d_seq, DENTRY_D_LOCK_NESTED);
6706
6707 /* unhash both */
6708 - /* __d_drop does write_seqcount_barrier, but they're OK to nest. */
6709 - __d_drop(dentry);
6710 - __d_drop(target);
6711 + /* ___d_drop does write_seqcount_barrier, but they're OK to nest. */
6712 + ___d_drop(dentry);
6713 + ___d_drop(target);
6714
6715 /* Switch the names.. */
6716 if (exchange)
6717 @@ -2829,6 +2836,8 @@ static void __d_move(struct dentry *dentry, struct dentry *target,
6718 __d_rehash(dentry);
6719 if (exchange)
6720 __d_rehash(target);
6721 + else
6722 + target->d_hash.pprev = NULL;
6723
6724 /* ... and switch them in the tree */
6725 if (IS_ROOT(dentry)) {
6726 diff --git a/fs/ext4/file.c b/fs/ext4/file.c
6727 index 510e66422f04..08fca4add1e2 100644
6728 --- a/fs/ext4/file.c
6729 +++ b/fs/ext4/file.c
6730 @@ -429,7 +429,7 @@ static int ext4_find_unwritten_pgoff(struct inode *inode,
6731 int i, num;
6732 unsigned long nr_pages;
6733
6734 - num = min_t(pgoff_t, end - index, PAGEVEC_SIZE);
6735 + num = min_t(pgoff_t, end - index, PAGEVEC_SIZE - 1) + 1;
6736 nr_pages = pagevec_lookup(&pvec, inode->i_mapping, index,
6737 (pgoff_t)num);
6738 if (nr_pages == 0)
6739 diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
6740 index 64056c6eb857..14bd37041e1a 100644
6741 --- a/fs/ext4/mballoc.c
6742 +++ b/fs/ext4/mballoc.c
6743 @@ -3877,7 +3877,8 @@ ext4_mb_discard_group_preallocations(struct super_block *sb,
6744
6745 err = ext4_mb_load_buddy(sb, group, &e4b);
6746 if (err) {
6747 - ext4_error(sb, "Error loading buddy information for %u", group);
6748 + ext4_warning(sb, "Error %d loading buddy information for %u",
6749 + err, group);
6750 put_bh(bitmap_bh);
6751 return 0;
6752 }
6753 @@ -4034,10 +4035,11 @@ void ext4_discard_preallocations(struct inode *inode)
6754 BUG_ON(pa->pa_type != MB_INODE_PA);
6755 group = ext4_get_group_number(sb, pa->pa_pstart);
6756
6757 - err = ext4_mb_load_buddy(sb, group, &e4b);
6758 + err = ext4_mb_load_buddy_gfp(sb, group, &e4b,
6759 + GFP_NOFS|__GFP_NOFAIL);
6760 if (err) {
6761 - ext4_error(sb, "Error loading buddy information for %u",
6762 - group);
6763 + ext4_error(sb, "Error %d loading buddy information for %u",
6764 + err, group);
6765 continue;
6766 }
6767
6768 @@ -4293,11 +4295,14 @@ ext4_mb_discard_lg_preallocations(struct super_block *sb,
6769 spin_unlock(&lg->lg_prealloc_lock);
6770
6771 list_for_each_entry_safe(pa, tmp, &discard_list, u.pa_tmp_list) {
6772 + int err;
6773
6774 group = ext4_get_group_number(sb, pa->pa_pstart);
6775 - if (ext4_mb_load_buddy(sb, group, &e4b)) {
6776 - ext4_error(sb, "Error loading buddy information for %u",
6777 - group);
6778 + err = ext4_mb_load_buddy_gfp(sb, group, &e4b,
6779 + GFP_NOFS|__GFP_NOFAIL);
6780 + if (err) {
6781 + ext4_error(sb, "Error %d loading buddy information for %u",
6782 + err, group);
6783 continue;
6784 }
6785 ext4_lock_group(sb, group);
6786 @@ -5117,8 +5122,8 @@ ext4_trim_all_free(struct super_block *sb, ext4_group_t group,
6787
6788 ret = ext4_mb_load_buddy(sb, group, &e4b);
6789 if (ret) {
6790 - ext4_error(sb, "Error in loading buddy "
6791 - "information for %u", group);
6792 + ext4_warning(sb, "Error %d loading buddy information for %u",
6793 + ret, group);
6794 return ret;
6795 }
6796 bitmap = e4b.bd_bitmap;
6797 diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c
6798 index 9d373247222c..85135df0eb34 100644
6799 --- a/fs/lockd/svc.c
6800 +++ b/fs/lockd/svc.c
6801 @@ -132,6 +132,8 @@ lockd(void *vrqstp)
6802 {
6803 int err = 0;
6804 struct svc_rqst *rqstp = vrqstp;
6805 + struct net *net = &init_net;
6806 + struct lockd_net *ln = net_generic(net, lockd_net_id);
6807
6808 /* try_to_freeze() is called from svc_recv() */
6809 set_freezable();
6810 @@ -176,6 +178,8 @@ lockd(void *vrqstp)
6811 if (nlmsvc_ops)
6812 nlmsvc_invalidate_all();
6813 nlm_shutdown_hosts();
6814 + cancel_delayed_work_sync(&ln->grace_period_end);
6815 + locks_end_grace(&ln->lockd_manager);
6816 return 0;
6817 }
6818
6819 @@ -270,8 +274,6 @@ static void lockd_down_net(struct svc_serv *serv, struct net *net)
6820 if (ln->nlmsvc_users) {
6821 if (--ln->nlmsvc_users == 0) {
6822 nlm_shutdown_hosts_net(net);
6823 - cancel_delayed_work_sync(&ln->grace_period_end);
6824 - locks_end_grace(&ln->lockd_manager);
6825 svc_shutdown_net(serv, net);
6826 dprintk("lockd_down_net: per-net data destroyed; net=%p\n", net);
6827 }
6828 diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c
6829 index 13abd608af0f..4539008502ce 100644
6830 --- a/fs/nfs/flexfilelayout/flexfilelayout.c
6831 +++ b/fs/nfs/flexfilelayout/flexfilelayout.c
6832 @@ -475,6 +475,7 @@ ff_layout_alloc_lseg(struct pnfs_layout_hdr *lh,
6833 goto out_err_free;
6834
6835 /* fh */
6836 + rc = -EIO;
6837 p = xdr_inline_decode(&stream, 4);
6838 if (!p)
6839 goto out_err_free;
6840 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
6841 index 4638654e26f3..1b1b616a6171 100644
6842 --- a/fs/nfs/nfs4proc.c
6843 +++ b/fs/nfs/nfs4proc.c
6844 @@ -3300,6 +3300,7 @@ static int _nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh *f
6845 .rpc_resp = &res,
6846 };
6847 int status;
6848 + int i;
6849
6850 bitmask[0] = FATTR4_WORD0_SUPPORTED_ATTRS |
6851 FATTR4_WORD0_FH_EXPIRE_TYPE |
6852 @@ -3365,8 +3366,13 @@ static int _nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh *f
6853 server->cache_consistency_bitmask[0] &= FATTR4_WORD0_CHANGE|FATTR4_WORD0_SIZE;
6854 server->cache_consistency_bitmask[1] &= FATTR4_WORD1_TIME_METADATA|FATTR4_WORD1_TIME_MODIFY;
6855 server->cache_consistency_bitmask[2] = 0;
6856 +
6857 + /* Avoid a regression due to buggy server */
6858 + for (i = 0; i < ARRAY_SIZE(res.exclcreat_bitmask); i++)
6859 + res.exclcreat_bitmask[i] &= res.attr_bitmask[i];
6860 memcpy(server->exclcreat_bitmask, res.exclcreat_bitmask,
6861 sizeof(server->exclcreat_bitmask));
6862 +
6863 server->acl_bitmask = res.acl_bitmask;
6864 server->fh_expire_type = res.fh_expire_type;
6865 }
6866 @@ -8173,6 +8179,12 @@ static int nfs41_reclaim_complete_handle_errors(struct rpc_task *task, struct nf
6867 /* fall through */
6868 case -NFS4ERR_RETRY_UNCACHED_REP:
6869 return -EAGAIN;
6870 + case -NFS4ERR_BADSESSION:
6871 + case -NFS4ERR_DEADSESSION:
6872 + case -NFS4ERR_CONN_NOT_BOUND_TO_SESSION:
6873 + nfs4_schedule_session_recovery(clp->cl_session,
6874 + task->tk_status);
6875 + break;
6876 default:
6877 nfs4_schedule_lease_recovery(clp);
6878 }
6879 @@ -8251,7 +8263,6 @@ static int nfs41_proc_reclaim_complete(struct nfs_client *clp,
6880 if (status == 0)
6881 status = task->tk_status;
6882 rpc_put_task(task);
6883 - return 0;
6884 out:
6885 dprintk("<-- %s status=%d\n", __func__, status);
6886 return status;
6887 diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
6888 index 71deeae6eefd..0bb0e620cf42 100644
6889 --- a/fs/nfs/nfs4state.c
6890 +++ b/fs/nfs/nfs4state.c
6891 @@ -1637,13 +1637,14 @@ static void nfs4_state_start_reclaim_reboot(struct nfs_client *clp)
6892 nfs4_state_mark_reclaim_helper(clp, nfs4_state_mark_reclaim_reboot);
6893 }
6894
6895 -static void nfs4_reclaim_complete(struct nfs_client *clp,
6896 +static int nfs4_reclaim_complete(struct nfs_client *clp,
6897 const struct nfs4_state_recovery_ops *ops,
6898 struct rpc_cred *cred)
6899 {
6900 /* Notify the server we're done reclaiming our state */
6901 if (ops->reclaim_complete)
6902 - (void)ops->reclaim_complete(clp, cred);
6903 + return ops->reclaim_complete(clp, cred);
6904 + return 0;
6905 }
6906
6907 static void nfs4_clear_reclaim_server(struct nfs_server *server)
6908 @@ -1690,13 +1691,16 @@ static void nfs4_state_end_reclaim_reboot(struct nfs_client *clp)
6909 {
6910 const struct nfs4_state_recovery_ops *ops;
6911 struct rpc_cred *cred;
6912 + int err;
6913
6914 if (!nfs4_state_clear_reclaim_reboot(clp))
6915 return;
6916 ops = clp->cl_mvops->reboot_recovery_ops;
6917 cred = nfs4_get_clid_cred(clp);
6918 - nfs4_reclaim_complete(clp, ops, cred);
6919 + err = nfs4_reclaim_complete(clp, ops, cred);
6920 put_rpccred(cred);
6921 + if (err == -NFS4ERR_CONN_NOT_BOUND_TO_SESSION)
6922 + set_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state);
6923 }
6924
6925 static void nfs4_state_start_reclaim_nograce(struct nfs_client *clp)
6926 diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
6927 index 306b6c161840..8546384a5fdf 100644
6928 --- a/fs/overlayfs/dir.c
6929 +++ b/fs/overlayfs/dir.c
6930 @@ -180,6 +180,9 @@ static void ovl_instantiate(struct dentry *dentry, struct inode *inode,
6931 inc_nlink(inode);
6932 }
6933 d_instantiate(dentry, inode);
6934 + /* Force lookup of new upper hardlink to find its lower */
6935 + if (hardlink)
6936 + d_drop(dentry);
6937 }
6938
6939 static int ovl_create_upper(struct dentry *dentry, struct inode *inode,
6940 diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
6941 index 7fb53d055537..16f6db88c8e5 100644
6942 --- a/fs/overlayfs/inode.c
6943 +++ b/fs/overlayfs/inode.c
6944 @@ -227,6 +227,16 @@ int ovl_xattr_get(struct dentry *dentry, const char *name,
6945 return res;
6946 }
6947
6948 +static bool ovl_can_list(const char *s)
6949 +{
6950 + /* List all non-trusted xatts */
6951 + if (strncmp(s, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) != 0)
6952 + return true;
6953 +
6954 + /* Never list trusted.overlay, list other trusted for superuser only */
6955 + return !ovl_is_private_xattr(s) && capable(CAP_SYS_ADMIN);
6956 +}
6957 +
6958 ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size)
6959 {
6960 struct dentry *realdentry = ovl_dentry_real(dentry);
6961 @@ -250,7 +260,7 @@ ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size)
6962 return -EIO;
6963
6964 len -= slen;
6965 - if (ovl_is_private_xattr(s)) {
6966 + if (!ovl_can_list(s)) {
6967 res -= slen;
6968 memmove(s, s + slen, len);
6969 } else {
6970 diff --git a/include/acpi/platform/acgcc.h b/include/acpi/platform/acgcc.h
6971 index 8f66aaabadf7..9e3f7618593f 100644
6972 --- a/include/acpi/platform/acgcc.h
6973 +++ b/include/acpi/platform/acgcc.h
6974 @@ -48,7 +48,17 @@
6975 * Use compiler specific <stdarg.h> is a good practice for even when
6976 * -nostdinc is specified (i.e., ACPI_USE_STANDARD_HEADERS undefined.
6977 */
6978 +#ifndef va_arg
6979 +#ifdef ACPI_USE_BUILTIN_STDARG
6980 +typedef __builtin_va_list va_list;
6981 +#define va_start(v, l) __builtin_va_start(v, l)
6982 +#define va_end(v) __builtin_va_end(v)
6983 +#define va_arg(v, l) __builtin_va_arg(v, l)
6984 +#define va_copy(d, s) __builtin_va_copy(d, s)
6985 +#else
6986 #include <stdarg.h>
6987 +#endif
6988 +#endif
6989
6990 #define ACPI_INLINE __inline__
6991
6992 diff --git a/include/acpi/platform/acintel.h b/include/acpi/platform/acintel.h
6993 index 17bd3b7b4e5a..bdb6858e2458 100644
6994 --- a/include/acpi/platform/acintel.h
6995 +++ b/include/acpi/platform/acintel.h
6996 @@ -48,7 +48,9 @@
6997 * Use compiler specific <stdarg.h> is a good practice for even when
6998 * -nostdinc is specified (i.e., ACPI_USE_STANDARD_HEADERS undefined.
6999 */
7000 +#ifndef va_arg
7001 #include <stdarg.h>
7002 +#endif
7003
7004 /* Configuration specific to Intel 64-bit C compiler */
7005
7006 diff --git a/include/linux/mlx4/qp.h b/include/linux/mlx4/qp.h
7007 index b4ee8f62ce8d..8e2828d48d7f 100644
7008 --- a/include/linux/mlx4/qp.h
7009 +++ b/include/linux/mlx4/qp.h
7010 @@ -470,6 +470,7 @@ struct mlx4_update_qp_params {
7011 u16 rate_val;
7012 };
7013
7014 +struct mlx4_qp *mlx4_qp_lookup(struct mlx4_dev *dev, u32 qpn);
7015 int mlx4_update_qp(struct mlx4_dev *dev, u32 qpn,
7016 enum mlx4_update_qp_attr attr,
7017 struct mlx4_update_qp_params *params);
7018 diff --git a/include/linux/mlx5/device.h b/include/linux/mlx5/device.h
7019 index 58276144ba81..5f3e62253e2f 100644
7020 --- a/include/linux/mlx5/device.h
7021 +++ b/include/linux/mlx5/device.h
7022 @@ -750,8 +750,14 @@ enum {
7023 };
7024
7025 enum {
7026 - CQE_RSS_HTYPE_IP = 0x3 << 6,
7027 - CQE_RSS_HTYPE_L4 = 0x3 << 2,
7028 + CQE_RSS_HTYPE_IP = 0x3 << 2,
7029 + /* cqe->rss_hash_type[3:2] - IP destination selected for hash
7030 + * (00 = none, 01 = IPv4, 10 = IPv6, 11 = Reserved)
7031 + */
7032 + CQE_RSS_HTYPE_L4 = 0x3 << 6,
7033 + /* cqe->rss_hash_type[7:6] - L4 destination selected for hash
7034 + * (00 = none, 01 = TCP. 10 = UDP, 11 = IPSEC.SPI
7035 + */
7036 };
7037
7038 enum {
7039 diff --git a/include/linux/pci.h b/include/linux/pci.h
7040 index 1b711796d989..36522905685b 100644
7041 --- a/include/linux/pci.h
7042 +++ b/include/linux/pci.h
7043 @@ -1348,9 +1348,9 @@ static inline int pci_alloc_irq_vectors(struct pci_dev *dev,
7044 unsigned int min_vecs, unsigned int max_vecs,
7045 unsigned int flags)
7046 {
7047 - if (min_vecs > 1)
7048 - return -EINVAL;
7049 - return 1;
7050 + if ((flags & PCI_IRQ_LEGACY) && min_vecs == 1 && dev->irq)
7051 + return 1;
7052 + return -ENOSPC;
7053 }
7054 static inline void pci_free_irq_vectors(struct pci_dev *dev)
7055 {
7056 diff --git a/include/linux/sched.h b/include/linux/sched.h
7057 index a4d0afc009a7..c549c8c9245c 100644
7058 --- a/include/linux/sched.h
7059 +++ b/include/linux/sched.h
7060 @@ -1412,6 +1412,7 @@ struct sched_dl_entity {
7061 u64 dl_deadline; /* relative deadline of each instance */
7062 u64 dl_period; /* separation of two instances (period) */
7063 u64 dl_bw; /* dl_runtime / dl_deadline */
7064 + u64 dl_density; /* dl_runtime / dl_deadline */
7065
7066 /*
7067 * Actual scheduling parameters. Initialized with the values above,
7068 diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
7069 index 601dfa849d30..1b3a2f95503d 100644
7070 --- a/include/linux/skbuff.h
7071 +++ b/include/linux/skbuff.h
7072 @@ -984,10 +984,10 @@ struct sk_buff *skb_realloc_headroom(struct sk_buff *skb,
7073 unsigned int headroom);
7074 struct sk_buff *skb_copy_expand(const struct sk_buff *skb, int newheadroom,
7075 int newtailroom, gfp_t priority);
7076 -int skb_to_sgvec_nomark(struct sk_buff *skb, struct scatterlist *sg,
7077 - int offset, int len);
7078 -int skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset,
7079 - int len);
7080 +int __must_check skb_to_sgvec_nomark(struct sk_buff *skb, struct scatterlist *sg,
7081 + int offset, int len);
7082 +int __must_check skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg,
7083 + int offset, int len);
7084 int skb_cow_data(struct sk_buff *skb, int tailbits, struct sk_buff **trailer);
7085 int skb_pad(struct sk_buff *skb, int pad);
7086 #define dev_kfree_skb(a) consume_skb(a)
7087 diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
7088 index 66167138120a..9d57639223c3 100644
7089 --- a/include/net/cfg80211.h
7090 +++ b/include/net/cfg80211.h
7091 @@ -947,9 +947,9 @@ enum rate_info_flags {
7092 * @RATE_INFO_BW_160: 160 MHz bandwidth
7093 */
7094 enum rate_info_bw {
7095 + RATE_INFO_BW_20 = 0,
7096 RATE_INFO_BW_5,
7097 RATE_INFO_BW_10,
7098 - RATE_INFO_BW_20,
7099 RATE_INFO_BW_40,
7100 RATE_INFO_BW_80,
7101 RATE_INFO_BW_160,
7102 diff --git a/include/net/x25.h b/include/net/x25.h
7103 index c383aa4edbf0..6d30a01d281d 100644
7104 --- a/include/net/x25.h
7105 +++ b/include/net/x25.h
7106 @@ -298,10 +298,10 @@ void x25_check_rbuf(struct sock *);
7107
7108 /* sysctl_net_x25.c */
7109 #ifdef CONFIG_SYSCTL
7110 -void x25_register_sysctl(void);
7111 +int x25_register_sysctl(void);
7112 void x25_unregister_sysctl(void);
7113 #else
7114 -static inline void x25_register_sysctl(void) {};
7115 +static inline int x25_register_sysctl(void) { return 0; };
7116 static inline void x25_unregister_sysctl(void) {};
7117 #endif /* CONFIG_SYSCTL */
7118
7119 diff --git a/include/soc/fsl/qe/qe.h b/include/soc/fsl/qe/qe.h
7120 index 0cd4c11479b1..226f915a68c2 100644
7121 --- a/include/soc/fsl/qe/qe.h
7122 +++ b/include/soc/fsl/qe/qe.h
7123 @@ -668,6 +668,10 @@ struct ucc_slow_pram {
7124 #define UCC_FAST_GUMR_CTSS 0x00800000
7125 #define UCC_FAST_GUMR_TXSY 0x00020000
7126 #define UCC_FAST_GUMR_RSYN 0x00010000
7127 +#define UCC_FAST_GUMR_SYNL_MASK 0x0000C000
7128 +#define UCC_FAST_GUMR_SYNL_16 0x0000C000
7129 +#define UCC_FAST_GUMR_SYNL_8 0x00008000
7130 +#define UCC_FAST_GUMR_SYNL_AUTO 0x00004000
7131 #define UCC_FAST_GUMR_RTSM 0x00002000
7132 #define UCC_FAST_GUMR_REVD 0x00000400
7133 #define UCC_FAST_GUMR_ENR 0x00000020
7134 diff --git a/kernel/cpu.c b/kernel/cpu.c
7135 index 802eb3361a0a..967163fb90a8 100644
7136 --- a/kernel/cpu.c
7137 +++ b/kernel/cpu.c
7138 @@ -63,6 +63,12 @@ struct cpuhp_cpu_state {
7139
7140 static DEFINE_PER_CPU(struct cpuhp_cpu_state, cpuhp_state);
7141
7142 +#if defined(CONFIG_LOCKDEP) && defined(CONFIG_SMP)
7143 +static struct lock_class_key cpuhp_state_key;
7144 +static struct lockdep_map cpuhp_state_lock_map =
7145 + STATIC_LOCKDEP_MAP_INIT("cpuhp_state", &cpuhp_state_key);
7146 +#endif
7147 +
7148 /**
7149 * cpuhp_step - Hotplug state machine step
7150 * @name: Name of the step
7151 @@ -563,6 +569,7 @@ static void cpuhp_thread_fun(unsigned int cpu)
7152
7153 st->should_run = false;
7154
7155 + lock_map_acquire(&cpuhp_state_lock_map);
7156 /* Single callback invocation for [un]install ? */
7157 if (st->single) {
7158 if (st->cb_state < CPUHP_AP_ONLINE) {
7159 @@ -594,6 +601,7 @@ static void cpuhp_thread_fun(unsigned int cpu)
7160 else if (st->state > st->target)
7161 ret = cpuhp_ap_offline(cpu, st);
7162 }
7163 + lock_map_release(&cpuhp_state_lock_map);
7164 st->result = ret;
7165 complete(&st->done);
7166 }
7167 @@ -608,6 +616,9 @@ cpuhp_invoke_ap_callback(int cpu, enum cpuhp_state state, bool bringup,
7168 if (!cpu_online(cpu))
7169 return 0;
7170
7171 + lock_map_acquire(&cpuhp_state_lock_map);
7172 + lock_map_release(&cpuhp_state_lock_map);
7173 +
7174 /*
7175 * If we are up and running, use the hotplug thread. For early calls
7176 * we invoke the thread function directly.
7177 @@ -651,6 +662,8 @@ static int cpuhp_kick_ap_work(unsigned int cpu)
7178 enum cpuhp_state state = st->state;
7179
7180 trace_cpuhp_enter(cpu, st->target, state, cpuhp_kick_ap_work);
7181 + lock_map_acquire(&cpuhp_state_lock_map);
7182 + lock_map_release(&cpuhp_state_lock_map);
7183 __cpuhp_kick_ap_work(st);
7184 wait_for_completion(&st->done);
7185 trace_cpuhp_exit(cpu, st->state, state, st->result);
7186 diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c
7187 index e9fdb5203de5..411226b26bca 100644
7188 --- a/kernel/events/callchain.c
7189 +++ b/kernel/events/callchain.c
7190 @@ -227,12 +227,18 @@ get_perf_callchain(struct pt_regs *regs, u32 init_nr, bool kernel, bool user,
7191 }
7192
7193 if (regs) {
7194 + mm_segment_t fs;
7195 +
7196 if (crosstask)
7197 goto exit_put;
7198
7199 if (add_mark)
7200 perf_callchain_store_context(&ctx, PERF_CONTEXT_USER);
7201 +
7202 + fs = get_fs();
7203 + set_fs(USER_DS);
7204 perf_callchain_user(&ctx, regs);
7205 + set_fs(fs);
7206 }
7207 }
7208
7209 diff --git a/kernel/events/core.c b/kernel/events/core.c
7210 index 13b9784427b0..c4100c38a467 100644
7211 --- a/kernel/events/core.c
7212 +++ b/kernel/events/core.c
7213 @@ -5669,9 +5669,6 @@ static void perf_output_read_one(struct perf_output_handle *handle,
7214 __output_copy(handle, values, n * sizeof(u64));
7215 }
7216
7217 -/*
7218 - * XXX PERF_FORMAT_GROUP vs inherited events seems difficult.
7219 - */
7220 static void perf_output_read_group(struct perf_output_handle *handle,
7221 struct perf_event *event,
7222 u64 enabled, u64 running)
7223 @@ -5716,6 +5713,13 @@ static void perf_output_read_group(struct perf_output_handle *handle,
7224 #define PERF_FORMAT_TOTAL_TIMES (PERF_FORMAT_TOTAL_TIME_ENABLED|\
7225 PERF_FORMAT_TOTAL_TIME_RUNNING)
7226
7227 +/*
7228 + * XXX PERF_SAMPLE_READ vs inherited events seems difficult.
7229 + *
7230 + * The problem is that its both hard and excessively expensive to iterate the
7231 + * child list, not to mention that its impossible to IPI the children running
7232 + * on another CPU, from interrupt/NMI context.
7233 + */
7234 static void perf_output_read(struct perf_output_handle *handle,
7235 struct perf_event *event)
7236 {
7237 @@ -9259,9 +9263,10 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
7238 local64_set(&hwc->period_left, hwc->sample_period);
7239
7240 /*
7241 - * we currently do not support PERF_FORMAT_GROUP on inherited events
7242 + * We currently do not support PERF_SAMPLE_READ on inherited events.
7243 + * See perf_output_read().
7244 */
7245 - if (attr->inherit && (attr->read_format & PERF_FORMAT_GROUP))
7246 + if (attr->inherit && (attr->sample_type & PERF_SAMPLE_READ))
7247 goto err_ns;
7248
7249 if (!has_branch_stack(event))
7250 @@ -9289,8 +9294,10 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
7251 event->addr_filters_offs = kcalloc(pmu->nr_addr_filters,
7252 sizeof(unsigned long),
7253 GFP_KERNEL);
7254 - if (!event->addr_filters_offs)
7255 + if (!event->addr_filters_offs) {
7256 + err = -ENOMEM;
7257 goto err_per_task;
7258 + }
7259
7260 /* force hw sync on the address filters */
7261 event->addr_filters_gen = 1;
7262 diff --git a/kernel/pid.c b/kernel/pid.c
7263 index 693a64385d59..fa704f88ff8e 100644
7264 --- a/kernel/pid.c
7265 +++ b/kernel/pid.c
7266 @@ -322,8 +322,10 @@ struct pid *alloc_pid(struct pid_namespace *ns)
7267 }
7268
7269 if (unlikely(is_child_reaper(pid))) {
7270 - if (pid_ns_prepare_proc(ns))
7271 + if (pid_ns_prepare_proc(ns)) {
7272 + disable_pid_allocation(ns);
7273 goto out_free;
7274 + }
7275 }
7276
7277 get_pid_ns(ns);
7278 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
7279 index 291ea6fa7ee6..917be221438b 100644
7280 --- a/kernel/sched/core.c
7281 +++ b/kernel/sched/core.c
7282 @@ -2184,6 +2184,7 @@ void __dl_clear_params(struct task_struct *p)
7283 dl_se->dl_period = 0;
7284 dl_se->flags = 0;
7285 dl_se->dl_bw = 0;
7286 + dl_se->dl_density = 0;
7287
7288 dl_se->dl_throttled = 0;
7289 dl_se->dl_yielded = 0;
7290 @@ -3912,6 +3913,7 @@ __setparam_dl(struct task_struct *p, const struct sched_attr *attr)
7291 dl_se->dl_period = attr->sched_period ?: dl_se->dl_deadline;
7292 dl_se->flags = attr->sched_flags;
7293 dl_se->dl_bw = to_ratio(dl_se->dl_period, dl_se->dl_runtime);
7294 + dl_se->dl_density = to_ratio(dl_se->dl_deadline, dl_se->dl_runtime);
7295
7296 /*
7297 * Changing the parameters of a task is 'tricky' and we're not doing
7298 diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
7299 index 3042881169b4..3042927c8b8a 100644
7300 --- a/kernel/sched/deadline.c
7301 +++ b/kernel/sched/deadline.c
7302 @@ -484,13 +484,84 @@ static bool dl_entity_overflow(struct sched_dl_entity *dl_se,
7303 }
7304
7305 /*
7306 - * When a -deadline entity is queued back on the runqueue, its runtime and
7307 - * deadline might need updating.
7308 + * Revised wakeup rule [1]: For self-suspending tasks, rather then
7309 + * re-initializing task's runtime and deadline, the revised wakeup
7310 + * rule adjusts the task's runtime to avoid the task to overrun its
7311 + * density.
7312 *
7313 - * The policy here is that we update the deadline of the entity only if:
7314 - * - the current deadline is in the past,
7315 - * - using the remaining runtime with the current deadline would make
7316 - * the entity exceed its bandwidth.
7317 + * Reasoning: a task may overrun the density if:
7318 + * runtime / (deadline - t) > dl_runtime / dl_deadline
7319 + *
7320 + * Therefore, runtime can be adjusted to:
7321 + * runtime = (dl_runtime / dl_deadline) * (deadline - t)
7322 + *
7323 + * In such way that runtime will be equal to the maximum density
7324 + * the task can use without breaking any rule.
7325 + *
7326 + * [1] Luca Abeni, Giuseppe Lipari, and Juri Lelli. 2015. Constant
7327 + * bandwidth server revisited. SIGBED Rev. 11, 4 (January 2015), 19-24.
7328 + */
7329 +static void
7330 +update_dl_revised_wakeup(struct sched_dl_entity *dl_se, struct rq *rq)
7331 +{
7332 + u64 laxity = dl_se->deadline - rq_clock(rq);
7333 +
7334 + /*
7335 + * If the task has deadline < period, and the deadline is in the past,
7336 + * it should already be throttled before this check.
7337 + *
7338 + * See update_dl_entity() comments for further details.
7339 + */
7340 + WARN_ON(dl_time_before(dl_se->deadline, rq_clock(rq)));
7341 +
7342 + dl_se->runtime = (dl_se->dl_density * laxity) >> 20;
7343 +}
7344 +
7345 +/*
7346 + * Regarding the deadline, a task with implicit deadline has a relative
7347 + * deadline == relative period. A task with constrained deadline has a
7348 + * relative deadline <= relative period.
7349 + *
7350 + * We support constrained deadline tasks. However, there are some restrictions
7351 + * applied only for tasks which do not have an implicit deadline. See
7352 + * update_dl_entity() to know more about such restrictions.
7353 + *
7354 + * The dl_is_implicit() returns true if the task has an implicit deadline.
7355 + */
7356 +static inline bool dl_is_implicit(struct sched_dl_entity *dl_se)
7357 +{
7358 + return dl_se->dl_deadline == dl_se->dl_period;
7359 +}
7360 +
7361 +/*
7362 + * When a deadline entity is placed in the runqueue, its runtime and deadline
7363 + * might need to be updated. This is done by a CBS wake up rule. There are two
7364 + * different rules: 1) the original CBS; and 2) the Revisited CBS.
7365 + *
7366 + * When the task is starting a new period, the Original CBS is used. In this
7367 + * case, the runtime is replenished and a new absolute deadline is set.
7368 + *
7369 + * When a task is queued before the begin of the next period, using the
7370 + * remaining runtime and deadline could make the entity to overflow, see
7371 + * dl_entity_overflow() to find more about runtime overflow. When such case
7372 + * is detected, the runtime and deadline need to be updated.
7373 + *
7374 + * If the task has an implicit deadline, i.e., deadline == period, the Original
7375 + * CBS is applied. the runtime is replenished and a new absolute deadline is
7376 + * set, as in the previous cases.
7377 + *
7378 + * However, the Original CBS does not work properly for tasks with
7379 + * deadline < period, which are said to have a constrained deadline. By
7380 + * applying the Original CBS, a constrained deadline task would be able to run
7381 + * runtime/deadline in a period. With deadline < period, the task would
7382 + * overrun the runtime/period allowed bandwidth, breaking the admission test.
7383 + *
7384 + * In order to prevent this misbehave, the Revisited CBS is used for
7385 + * constrained deadline tasks when a runtime overflow is detected. In the
7386 + * Revisited CBS, rather than replenishing & setting a new absolute deadline,
7387 + * the remaining runtime of the task is reduced to avoid runtime overflow.
7388 + * Please refer to the comments update_dl_revised_wakeup() function to find
7389 + * more about the Revised CBS rule.
7390 */
7391 static void update_dl_entity(struct sched_dl_entity *dl_se,
7392 struct sched_dl_entity *pi_se)
7393 @@ -500,6 +571,14 @@ static void update_dl_entity(struct sched_dl_entity *dl_se,
7394
7395 if (dl_time_before(dl_se->deadline, rq_clock(rq)) ||
7396 dl_entity_overflow(dl_se, pi_se, rq_clock(rq))) {
7397 +
7398 + if (unlikely(!dl_is_implicit(dl_se) &&
7399 + !dl_time_before(dl_se->deadline, rq_clock(rq)) &&
7400 + !dl_se->dl_boosted)){
7401 + update_dl_revised_wakeup(dl_se, rq);
7402 + return;
7403 + }
7404 +
7405 dl_se->deadline = rq_clock(rq) + pi_se->dl_deadline;
7406 dl_se->runtime = pi_se->dl_runtime;
7407 }
7408 @@ -961,11 +1040,6 @@ static void dequeue_dl_entity(struct sched_dl_entity *dl_se)
7409 __dequeue_dl_entity(dl_se);
7410 }
7411
7412 -static inline bool dl_is_constrained(struct sched_dl_entity *dl_se)
7413 -{
7414 - return dl_se->dl_deadline < dl_se->dl_period;
7415 -}
7416 -
7417 static void enqueue_task_dl(struct rq *rq, struct task_struct *p, int flags)
7418 {
7419 struct task_struct *pi_task = rt_mutex_get_top_task(p);
7420 @@ -997,7 +1071,7 @@ static void enqueue_task_dl(struct rq *rq, struct task_struct *p, int flags)
7421 * If that is the case, the task will be throttled and
7422 * the replenishment timer will be set to the next period.
7423 */
7424 - if (!p->dl.dl_throttled && dl_is_constrained(&p->dl))
7425 + if (!p->dl.dl_throttled && !dl_is_implicit(&p->dl))
7426 dl_check_constrained_dl(&p->dl);
7427
7428 /*
7429 diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
7430 index 3d862f5b0331..f6e8727f7fa3 100644
7431 --- a/kernel/sched/fair.c
7432 +++ b/kernel/sched/fair.c
7433 @@ -2429,7 +2429,8 @@ void task_numa_work(struct callback_head *work)
7434 return;
7435
7436
7437 - down_read(&mm->mmap_sem);
7438 + if (!down_read_trylock(&mm->mmap_sem))
7439 + return;
7440 vma = find_vma(mm, start);
7441 if (!vma) {
7442 reset_ptenuma_scan(p);
7443 diff --git a/mm/vmstat.c b/mm/vmstat.c
7444 index 68b3193e4493..5f658b6a684f 100644
7445 --- a/mm/vmstat.c
7446 +++ b/mm/vmstat.c
7447 @@ -1351,8 +1351,6 @@ static bool is_zone_first_populated(pg_data_t *pgdat, struct zone *zone)
7448 return zone == compare;
7449 }
7450
7451 - /* The zone must be somewhere! */
7452 - WARN_ON_ONCE(1);
7453 return false;
7454 }
7455
7456 diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
7457 index 767144128b95..fb3e2a50d76e 100644
7458 --- a/net/8021q/vlan_dev.c
7459 +++ b/net/8021q/vlan_dev.c
7460 @@ -29,6 +29,7 @@
7461 #include <linux/net_tstamp.h>
7462 #include <linux/etherdevice.h>
7463 #include <linux/ethtool.h>
7464 +#include <linux/phy.h>
7465 #include <net/arp.h>
7466 #include <net/switchdev.h>
7467
7468 @@ -658,8 +659,11 @@ static int vlan_ethtool_get_ts_info(struct net_device *dev,
7469 {
7470 const struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
7471 const struct ethtool_ops *ops = vlan->real_dev->ethtool_ops;
7472 + struct phy_device *phydev = vlan->real_dev->phydev;
7473
7474 - if (ops->get_ts_info) {
7475 + if (phydev && phydev->drv && phydev->drv->ts_info) {
7476 + return phydev->drv->ts_info(phydev, info);
7477 + } else if (ops->get_ts_info) {
7478 return ops->get_ts_info(vlan->real_dev, info);
7479 } else {
7480 info->so_timestamping = SOF_TIMESTAMPING_RX_SOFTWARE |
7481 diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
7482 index 3ac89e9ace71..4bd72d2fe415 100644
7483 --- a/net/bluetooth/hci_core.c
7484 +++ b/net/bluetooth/hci_core.c
7485 @@ -548,6 +548,7 @@ static void hci_set_event_mask_page_2(struct hci_request *req)
7486 {
7487 struct hci_dev *hdev = req->hdev;
7488 u8 events[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
7489 + bool changed = false;
7490
7491 /* If Connectionless Slave Broadcast master role is supported
7492 * enable all necessary events for it.
7493 @@ -557,6 +558,7 @@ static void hci_set_event_mask_page_2(struct hci_request *req)
7494 events[1] |= 0x80; /* Synchronization Train Complete */
7495 events[2] |= 0x10; /* Slave Page Response Timeout */
7496 events[2] |= 0x20; /* CSB Channel Map Change */
7497 + changed = true;
7498 }
7499
7500 /* If Connectionless Slave Broadcast slave role is supported
7501 @@ -567,13 +569,24 @@ static void hci_set_event_mask_page_2(struct hci_request *req)
7502 events[2] |= 0x02; /* CSB Receive */
7503 events[2] |= 0x04; /* CSB Timeout */
7504 events[2] |= 0x08; /* Truncated Page Complete */
7505 + changed = true;
7506 }
7507
7508 /* Enable Authenticated Payload Timeout Expired event if supported */
7509 - if (lmp_ping_capable(hdev) || hdev->le_features[0] & HCI_LE_PING)
7510 + if (lmp_ping_capable(hdev) || hdev->le_features[0] & HCI_LE_PING) {
7511 events[2] |= 0x80;
7512 + changed = true;
7513 + }
7514
7515 - hci_req_add(req, HCI_OP_SET_EVENT_MASK_PAGE_2, sizeof(events), events);
7516 + /* Some Broadcom based controllers indicate support for Set Event
7517 + * Mask Page 2 command, but then actually do not support it. Since
7518 + * the default value is all bits set to zero, the command is only
7519 + * required if the event mask has to be changed. In case no change
7520 + * to the event mask is needed, skip this command.
7521 + */
7522 + if (changed)
7523 + hci_req_add(req, HCI_OP_SET_EVENT_MASK_PAGE_2,
7524 + sizeof(events), events);
7525 }
7526
7527 static int hci_init3_req(struct hci_request *req, unsigned long opt)
7528 diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c
7529 index d3f6c26425b3..255c0a075e49 100644
7530 --- a/net/ceph/osdmap.c
7531 +++ b/net/ceph/osdmap.c
7532 @@ -295,6 +295,7 @@ static struct crush_map *crush_decode(void *pbyval, void *end)
7533 u32 yes;
7534 struct crush_rule *r;
7535
7536 + err = -EINVAL;
7537 ceph_decode_32_safe(p, end, yes, bad);
7538 if (!yes) {
7539 dout("crush_decode NO rule %d off %x %p to %p\n",
7540 diff --git a/net/core/dev.c b/net/core/dev.c
7541 index 07d2c93c9636..3d9190c2940d 100644
7542 --- a/net/core/dev.c
7543 +++ b/net/core/dev.c
7544 @@ -993,7 +993,7 @@ bool dev_valid_name(const char *name)
7545 {
7546 if (*name == '\0')
7547 return false;
7548 - if (strlen(name) >= IFNAMSIZ)
7549 + if (strnlen(name, IFNAMSIZ) == IFNAMSIZ)
7550 return false;
7551 if (!strcmp(name, ".") || !strcmp(name, ".."))
7552 return false;
7553 @@ -2667,7 +2667,7 @@ __be16 skb_network_protocol(struct sk_buff *skb, int *depth)
7554 if (unlikely(!pskb_may_pull(skb, sizeof(struct ethhdr))))
7555 return 0;
7556
7557 - eth = (struct ethhdr *)skb_mac_header(skb);
7558 + eth = (struct ethhdr *)skb->data;
7559 type = eth->h_proto;
7560 }
7561
7562 diff --git a/net/core/neighbour.c b/net/core/neighbour.c
7563 index 7b315663f840..a426790b0688 100644
7564 --- a/net/core/neighbour.c
7565 +++ b/net/core/neighbour.c
7566 @@ -1130,10 +1130,6 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
7567 lladdr = neigh->ha;
7568 }
7569
7570 - if (new & NUD_CONNECTED)
7571 - neigh->confirmed = jiffies;
7572 - neigh->updated = jiffies;
7573 -
7574 /* If entry was valid and address is not changed,
7575 do not change entry state, if new one is STALE.
7576 */
7577 @@ -1155,6 +1151,16 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
7578 }
7579 }
7580
7581 + /* Update timestamps only once we know we will make a change to the
7582 + * neighbour entry. Otherwise we risk to move the locktime window with
7583 + * noop updates and ignore relevant ARP updates.
7584 + */
7585 + if (new != old || lladdr != neigh->ha) {
7586 + if (new & NUD_CONNECTED)
7587 + neigh->confirmed = jiffies;
7588 + neigh->updated = jiffies;
7589 + }
7590 +
7591 if (new != old) {
7592 neigh_del_timer(neigh);
7593 if (new & NUD_PROBE)
7594 diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
7595 index b7efe2f19f83..04fd04ccaa04 100644
7596 --- a/net/core/net_namespace.c
7597 +++ b/net/core/net_namespace.c
7598 @@ -312,6 +312,25 @@ static __net_init int setup_net(struct net *net, struct user_namespace *user_ns)
7599 goto out;
7600 }
7601
7602 +static int __net_init net_defaults_init_net(struct net *net)
7603 +{
7604 + net->core.sysctl_somaxconn = SOMAXCONN;
7605 + return 0;
7606 +}
7607 +
7608 +static struct pernet_operations net_defaults_ops = {
7609 + .init = net_defaults_init_net,
7610 +};
7611 +
7612 +static __init int net_defaults_init(void)
7613 +{
7614 + if (register_pernet_subsys(&net_defaults_ops))
7615 + panic("Cannot initialize net default settings");
7616 +
7617 + return 0;
7618 +}
7619 +
7620 +core_initcall(net_defaults_init);
7621
7622 #ifdef CONFIG_NET_NS
7623 static struct ucounts *inc_net_namespaces(struct user_namespace *ns)
7624 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
7625 index c5ac9f48f058..fb422dfec848 100644
7626 --- a/net/core/skbuff.c
7627 +++ b/net/core/skbuff.c
7628 @@ -2615,7 +2615,8 @@ void skb_split(struct sk_buff *skb, struct sk_buff *skb1, const u32 len)
7629 {
7630 int pos = skb_headlen(skb);
7631
7632 - skb_shinfo(skb1)->tx_flags = skb_shinfo(skb)->tx_flags & SKBTX_SHARED_FRAG;
7633 + skb_shinfo(skb1)->tx_flags |= skb_shinfo(skb)->tx_flags &
7634 + SKBTX_SHARED_FRAG;
7635 if (len < pos) /* Split line is inside header. */
7636 skb_split_inside_header(skb, skb1, len, pos);
7637 else /* Second chunk has no header, nothing to copy. */
7638 @@ -3228,8 +3229,8 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb,
7639 skb_copy_from_linear_data_offset(head_skb, offset,
7640 skb_put(nskb, hsize), hsize);
7641
7642 - skb_shinfo(nskb)->tx_flags = skb_shinfo(head_skb)->tx_flags &
7643 - SKBTX_SHARED_FRAG;
7644 + skb_shinfo(nskb)->tx_flags |= skb_shinfo(head_skb)->tx_flags &
7645 + SKBTX_SHARED_FRAG;
7646
7647 while (pos < offset + len) {
7648 if (i >= nfrags) {
7649 @@ -3475,24 +3476,18 @@ void __init skb_init(void)
7650 NULL);
7651 }
7652
7653 -/**
7654 - * skb_to_sgvec - Fill a scatter-gather list from a socket buffer
7655 - * @skb: Socket buffer containing the buffers to be mapped
7656 - * @sg: The scatter-gather list to map into
7657 - * @offset: The offset into the buffer's contents to start mapping
7658 - * @len: Length of buffer space to be mapped
7659 - *
7660 - * Fill the specified scatter-gather list with mappings/pointers into a
7661 - * region of the buffer space attached to a socket buffer.
7662 - */
7663 static int
7664 -__skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset, int len)
7665 +__skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset, int len,
7666 + unsigned int recursion_level)
7667 {
7668 int start = skb_headlen(skb);
7669 int i, copy = start - offset;
7670 struct sk_buff *frag_iter;
7671 int elt = 0;
7672
7673 + if (unlikely(recursion_level >= 24))
7674 + return -EMSGSIZE;
7675 +
7676 if (copy > 0) {
7677 if (copy > len)
7678 copy = len;
7679 @@ -3511,6 +3506,8 @@ __skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset, int len)
7680 end = start + skb_frag_size(&skb_shinfo(skb)->frags[i]);
7681 if ((copy = end - offset) > 0) {
7682 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7683 + if (unlikely(elt && sg_is_last(&sg[elt - 1])))
7684 + return -EMSGSIZE;
7685
7686 if (copy > len)
7687 copy = len;
7688 @@ -3525,16 +3522,22 @@ __skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset, int len)
7689 }
7690
7691 skb_walk_frags(skb, frag_iter) {
7692 - int end;
7693 + int end, ret;
7694
7695 WARN_ON(start > offset + len);
7696
7697 end = start + frag_iter->len;
7698 if ((copy = end - offset) > 0) {
7699 + if (unlikely(elt && sg_is_last(&sg[elt - 1])))
7700 + return -EMSGSIZE;
7701 +
7702 if (copy > len)
7703 copy = len;
7704 - elt += __skb_to_sgvec(frag_iter, sg+elt, offset - start,
7705 - copy);
7706 + ret = __skb_to_sgvec(frag_iter, sg+elt, offset - start,
7707 + copy, recursion_level + 1);
7708 + if (unlikely(ret < 0))
7709 + return ret;
7710 + elt += ret;
7711 if ((len -= copy) == 0)
7712 return elt;
7713 offset += copy;
7714 @@ -3545,6 +3548,31 @@ __skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset, int len)
7715 return elt;
7716 }
7717
7718 +/**
7719 + * skb_to_sgvec - Fill a scatter-gather list from a socket buffer
7720 + * @skb: Socket buffer containing the buffers to be mapped
7721 + * @sg: The scatter-gather list to map into
7722 + * @offset: The offset into the buffer's contents to start mapping
7723 + * @len: Length of buffer space to be mapped
7724 + *
7725 + * Fill the specified scatter-gather list with mappings/pointers into a
7726 + * region of the buffer space attached to a socket buffer. Returns either
7727 + * the number of scatterlist items used, or -EMSGSIZE if the contents
7728 + * could not fit.
7729 + */
7730 +int skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset, int len)
7731 +{
7732 + int nsg = __skb_to_sgvec(skb, sg, offset, len, 0);
7733 +
7734 + if (nsg <= 0)
7735 + return nsg;
7736 +
7737 + sg_mark_end(&sg[nsg - 1]);
7738 +
7739 + return nsg;
7740 +}
7741 +EXPORT_SYMBOL_GPL(skb_to_sgvec);
7742 +
7743 /* As compared with skb_to_sgvec, skb_to_sgvec_nomark only map skb to given
7744 * sglist without mark the sg which contain last skb data as the end.
7745 * So the caller can mannipulate sg list as will when padding new data after
7746 @@ -3567,19 +3595,11 @@ __skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset, int len)
7747 int skb_to_sgvec_nomark(struct sk_buff *skb, struct scatterlist *sg,
7748 int offset, int len)
7749 {
7750 - return __skb_to_sgvec(skb, sg, offset, len);
7751 + return __skb_to_sgvec(skb, sg, offset, len, 0);
7752 }
7753 EXPORT_SYMBOL_GPL(skb_to_sgvec_nomark);
7754
7755 -int skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset, int len)
7756 -{
7757 - int nsg = __skb_to_sgvec(skb, sg, offset, len);
7758
7759 - sg_mark_end(&sg[nsg - 1]);
7760 -
7761 - return nsg;
7762 -}
7763 -EXPORT_SYMBOL_GPL(skb_to_sgvec);
7764
7765 /**
7766 * skb_cow_data - Check that a socket buffer's data buffers are writable
7767 @@ -3862,7 +3882,8 @@ void __skb_tstamp_tx(struct sk_buff *orig_skb,
7768 return;
7769
7770 if (tsonly) {
7771 - skb_shinfo(skb)->tx_flags = skb_shinfo(orig_skb)->tx_flags;
7772 + skb_shinfo(skb)->tx_flags |= skb_shinfo(orig_skb)->tx_flags &
7773 + SKBTX_ANY_TSTAMP;
7774 skb_shinfo(skb)->tskey = skb_shinfo(orig_skb)->tskey;
7775 }
7776
7777 diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
7778 index 1b4619008c4e..546ba76b35a5 100644
7779 --- a/net/core/sysctl_net_core.c
7780 +++ b/net/core/sysctl_net_core.c
7781 @@ -438,8 +438,6 @@ static __net_init int sysctl_core_net_init(struct net *net)
7782 {
7783 struct ctl_table *tbl;
7784
7785 - net->core.sysctl_somaxconn = SOMAXCONN;
7786 -
7787 tbl = netns_core_table;
7788 if (!net_eq(net, &init_net)) {
7789 tbl = kmemdup(tbl, sizeof(netns_core_table), GFP_KERNEL);
7790 diff --git a/net/hsr/hsr_forward.c b/net/hsr/hsr_forward.c
7791 index 4ebe2aa3e7d3..04b5450c5a55 100644
7792 --- a/net/hsr/hsr_forward.c
7793 +++ b/net/hsr/hsr_forward.c
7794 @@ -324,8 +324,7 @@ static int hsr_fill_frame_info(struct hsr_frame_info *frame,
7795 unsigned long irqflags;
7796
7797 frame->is_supervision = is_supervision_frame(port->hsr, skb);
7798 - frame->node_src = hsr_get_node(&port->hsr->node_db, skb,
7799 - frame->is_supervision);
7800 + frame->node_src = hsr_get_node(port, skb, frame->is_supervision);
7801 if (frame->node_src == NULL)
7802 return -1; /* Unknown node and !is_supervision, or no mem */
7803
7804 diff --git a/net/hsr/hsr_framereg.c b/net/hsr/hsr_framereg.c
7805 index 7ea925816f79..284a9b820df8 100644
7806 --- a/net/hsr/hsr_framereg.c
7807 +++ b/net/hsr/hsr_framereg.c
7808 @@ -158,9 +158,10 @@ struct hsr_node *hsr_add_node(struct list_head *node_db, unsigned char addr[],
7809
7810 /* Get the hsr_node from which 'skb' was sent.
7811 */
7812 -struct hsr_node *hsr_get_node(struct list_head *node_db, struct sk_buff *skb,
7813 +struct hsr_node *hsr_get_node(struct hsr_port *port, struct sk_buff *skb,
7814 bool is_sup)
7815 {
7816 + struct list_head *node_db = &port->hsr->node_db;
7817 struct hsr_node *node;
7818 struct ethhdr *ethhdr;
7819 u16 seq_out;
7820 @@ -186,7 +187,11 @@ struct hsr_node *hsr_get_node(struct list_head *node_db, struct sk_buff *skb,
7821 */
7822 seq_out = hsr_get_skb_sequence_nr(skb) - 1;
7823 } else {
7824 - WARN_ONCE(1, "%s: Non-HSR frame\n", __func__);
7825 + /* this is called also for frames from master port and
7826 + * so warn only for non master ports
7827 + */
7828 + if (port->type != HSR_PT_MASTER)
7829 + WARN_ONCE(1, "%s: Non-HSR frame\n", __func__);
7830 seq_out = HSR_SEQNR_START;
7831 }
7832
7833 diff --git a/net/hsr/hsr_framereg.h b/net/hsr/hsr_framereg.h
7834 index 438b40f98f5a..4e04f0e868e9 100644
7835 --- a/net/hsr/hsr_framereg.h
7836 +++ b/net/hsr/hsr_framereg.h
7837 @@ -18,7 +18,7 @@ struct hsr_node;
7838
7839 struct hsr_node *hsr_add_node(struct list_head *node_db, unsigned char addr[],
7840 u16 seq_out);
7841 -struct hsr_node *hsr_get_node(struct list_head *node_db, struct sk_buff *skb,
7842 +struct hsr_node *hsr_get_node(struct hsr_port *port, struct sk_buff *skb,
7843 bool is_sup);
7844 void hsr_handle_sup_frame(struct sk_buff *skb, struct hsr_node *node_curr,
7845 struct hsr_port *port);
7846 diff --git a/net/ieee802154/socket.c b/net/ieee802154/socket.c
7847 index e0bd013a1e5e..bf5d26d83af0 100644
7848 --- a/net/ieee802154/socket.c
7849 +++ b/net/ieee802154/socket.c
7850 @@ -304,12 +304,12 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
7851 skb->sk = sk;
7852 skb->protocol = htons(ETH_P_IEEE802154);
7853
7854 - dev_put(dev);
7855 -
7856 err = dev_queue_xmit(skb);
7857 if (err > 0)
7858 err = net_xmit_errno(err);
7859
7860 + dev_put(dev);
7861 +
7862 return err ?: size;
7863
7864 out_skb:
7865 @@ -693,12 +693,12 @@ static int dgram_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
7866 skb->sk = sk;
7867 skb->protocol = htons(ETH_P_IEEE802154);
7868
7869 - dev_put(dev);
7870 -
7871 err = dev_queue_xmit(skb);
7872 if (err > 0)
7873 err = net_xmit_errno(err);
7874
7875 + dev_put(dev);
7876 +
7877 return err ?: size;
7878
7879 out_skb:
7880 diff --git a/net/ipv4/ah4.c b/net/ipv4/ah4.c
7881 index 22377c8ff14b..e8f862358518 100644
7882 --- a/net/ipv4/ah4.c
7883 +++ b/net/ipv4/ah4.c
7884 @@ -220,7 +220,9 @@ static int ah_output(struct xfrm_state *x, struct sk_buff *skb)
7885 ah->seq_no = htonl(XFRM_SKB_CB(skb)->seq.output.low);
7886
7887 sg_init_table(sg, nfrags + sglists);
7888 - skb_to_sgvec_nomark(skb, sg, 0, skb->len);
7889 + err = skb_to_sgvec_nomark(skb, sg, 0, skb->len);
7890 + if (unlikely(err < 0))
7891 + goto out_free;
7892
7893 if (x->props.flags & XFRM_STATE_ESN) {
7894 /* Attach seqhi sg right after packet payload */
7895 @@ -393,7 +395,9 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb)
7896 skb_push(skb, ihl);
7897
7898 sg_init_table(sg, nfrags + sglists);
7899 - skb_to_sgvec_nomark(skb, sg, 0, skb->len);
7900 + err = skb_to_sgvec_nomark(skb, sg, 0, skb->len);
7901 + if (unlikely(err < 0))
7902 + goto out_free;
7903
7904 if (x->props.flags & XFRM_STATE_ESN) {
7905 /* Attach seqhi sg right after packet payload */
7906 diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
7907 index e60517eb1c3a..8cae791a7ace 100644
7908 --- a/net/ipv4/arp.c
7909 +++ b/net/ipv4/arp.c
7910 @@ -437,7 +437,7 @@ static int arp_filter(__be32 sip, __be32 tip, struct net_device *dev)
7911 /*unsigned long now; */
7912 struct net *net = dev_net(dev);
7913
7914 - rt = ip_route_output(net, sip, tip, 0, 0);
7915 + rt = ip_route_output(net, sip, tip, 0, l3mdev_master_ifindex_rcu(dev));
7916 if (IS_ERR(rt))
7917 return 1;
7918 if (rt->dst.dev != dev) {
7919 @@ -658,6 +658,7 @@ static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb)
7920 unsigned char *arp_ptr;
7921 struct rtable *rt;
7922 unsigned char *sha;
7923 + unsigned char *tha = NULL;
7924 __be32 sip, tip;
7925 u16 dev_type = dev->type;
7926 int addr_type;
7927 @@ -729,6 +730,7 @@ static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb)
7928 break;
7929 #endif
7930 default:
7931 + tha = arp_ptr;
7932 arp_ptr += dev->addr_len;
7933 }
7934 memcpy(&tip, arp_ptr, 4);
7935 @@ -847,8 +849,18 @@ static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb)
7936 It is possible, that this option should be enabled for some
7937 devices (strip is candidate)
7938 */
7939 - is_garp = arp->ar_op == htons(ARPOP_REQUEST) && tip == sip &&
7940 - addr_type == RTN_UNICAST;
7941 + is_garp = tip == sip && addr_type == RTN_UNICAST;
7942 +
7943 + /* Unsolicited ARP _replies_ also require target hwaddr to be
7944 + * the same as source.
7945 + */
7946 + if (is_garp && arp->ar_op == htons(ARPOP_REPLY))
7947 + is_garp =
7948 + /* IPv4 over IEEE 1394 doesn't provide target
7949 + * hardware address field in its ARP payload.
7950 + */
7951 + tha &&
7952 + !memcmp(tha, sha, dev->addr_len);
7953
7954 if (!n &&
7955 ((arp->ar_op == htons(ARPOP_REPLY) &&
7956 diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c
7957 index 20fb25e3027b..3d8021d55336 100644
7958 --- a/net/ipv4/esp4.c
7959 +++ b/net/ipv4/esp4.c
7960 @@ -268,10 +268,11 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb)
7961 esph->spi = x->id.spi;
7962
7963 sg_init_table(sg, nfrags);
7964 - skb_to_sgvec(skb, sg,
7965 - (unsigned char *)esph - skb->data,
7966 - assoclen + ivlen + clen + alen);
7967 -
7968 + err = skb_to_sgvec(skb, sg,
7969 + (unsigned char *)esph - skb->data,
7970 + assoclen + ivlen + clen + alen);
7971 + if (unlikely(err < 0))
7972 + goto error;
7973 aead_request_set_crypt(req, sg, sg, ivlen + clen, iv);
7974 aead_request_set_ad(req, assoclen);
7975
7976 @@ -481,7 +482,9 @@ static int esp_input(struct xfrm_state *x, struct sk_buff *skb)
7977 }
7978
7979 sg_init_table(sg, nfrags);
7980 - skb_to_sgvec(skb, sg, 0, skb->len);
7981 + err = skb_to_sgvec(skb, sg, 0, skb->len);
7982 + if (unlikely(err < 0))
7983 + goto out;
7984
7985 aead_request_set_crypt(req, sg, sg, elen + ivlen, iv);
7986 aead_request_set_ad(req, assoclen);
7987 diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
7988 index 7e7b7a3efa99..e1be24416c0e 100644
7989 --- a/net/ipv4/fib_semantics.c
7990 +++ b/net/ipv4/fib_semantics.c
7991 @@ -1611,18 +1611,20 @@ void fib_select_multipath(struct fib_result *res, int hash)
7992 bool first = false;
7993
7994 for_nexthops(fi) {
7995 + if (net->ipv4.sysctl_fib_multipath_use_neigh) {
7996 + if (!fib_good_nh(nh))
7997 + continue;
7998 + if (!first) {
7999 + res->nh_sel = nhsel;
8000 + first = true;
8001 + }
8002 + }
8003 +
8004 if (hash > atomic_read(&nh->nh_upper_bound))
8005 continue;
8006
8007 - if (!net->ipv4.sysctl_fib_multipath_use_neigh ||
8008 - fib_good_nh(nh)) {
8009 - res->nh_sel = nhsel;
8010 - return;
8011 - }
8012 - if (!first) {
8013 - res->nh_sel = nhsel;
8014 - first = true;
8015 - }
8016 + res->nh_sel = nhsel;
8017 + return;
8018 } endfor_nexthops(fi);
8019 }
8020 #endif
8021 diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
8022 index 96536a0d6e2d..e1271e75e107 100644
8023 --- a/net/ipv4/ip_tunnel.c
8024 +++ b/net/ipv4/ip_tunnel.c
8025 @@ -253,13 +253,14 @@ static struct net_device *__ip_tunnel_create(struct net *net,
8026 struct net_device *dev;
8027 char name[IFNAMSIZ];
8028
8029 - if (parms->name[0])
8030 + err = -E2BIG;
8031 + if (parms->name[0]) {
8032 + if (!dev_valid_name(parms->name))
8033 + goto failed;
8034 strlcpy(name, parms->name, IFNAMSIZ);
8035 - else {
8036 - if (strlen(ops->kind) > (IFNAMSIZ - 3)) {
8037 - err = -E2BIG;
8038 + } else {
8039 + if (strlen(ops->kind) > (IFNAMSIZ - 3))
8040 goto failed;
8041 - }
8042 strlcpy(name, ops->kind, IFNAMSIZ);
8043 strncat(name, "%d", 2);
8044 }
8045 diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
8046 index 27089f5ebbb1..742a3432c3ea 100644
8047 --- a/net/ipv4/ipmr.c
8048 +++ b/net/ipv4/ipmr.c
8049 @@ -1929,6 +1929,20 @@ int ip_mr_input(struct sk_buff *skb)
8050 struct net *net = dev_net(skb->dev);
8051 int local = skb_rtable(skb)->rt_flags & RTCF_LOCAL;
8052 struct mr_table *mrt;
8053 + struct net_device *dev;
8054 +
8055 + /* skb->dev passed in is the loX master dev for vrfs.
8056 + * As there are no vifs associated with loopback devices,
8057 + * get the proper interface that does have a vif associated with it.
8058 + */
8059 + dev = skb->dev;
8060 + if (netif_is_l3_master(skb->dev)) {
8061 + dev = dev_get_by_index_rcu(net, IPCB(skb)->iif);
8062 + if (!dev) {
8063 + kfree_skb(skb);
8064 + return -ENODEV;
8065 + }
8066 + }
8067
8068 /* Packet is looped back after forward, it should not be
8069 * forwarded second time, but still can be delivered locally.
8070 @@ -1966,7 +1980,7 @@ int ip_mr_input(struct sk_buff *skb)
8071 /* already under rcu_read_lock() */
8072 cache = ipmr_cache_find(mrt, ip_hdr(skb)->saddr, ip_hdr(skb)->daddr);
8073 if (!cache) {
8074 - int vif = ipmr_find_vif(mrt, skb->dev);
8075 + int vif = ipmr_find_vif(mrt, dev);
8076
8077 if (vif >= 0)
8078 cache = ipmr_cache_find_any(mrt, ip_hdr(skb)->daddr,
8079 @@ -1986,7 +2000,7 @@ int ip_mr_input(struct sk_buff *skb)
8080 }
8081
8082 read_lock(&mrt_lock);
8083 - vif = ipmr_find_vif(mrt, skb->dev);
8084 + vif = ipmr_find_vif(mrt, dev);
8085 if (vif >= 0) {
8086 int err2 = ipmr_cache_unresolved(mrt, vif, skb);
8087 read_unlock(&mrt_lock);
8088 diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
8089 index b5f264ae3bff..eb05ad940e37 100644
8090 --- a/net/ipv4/tcp_input.c
8091 +++ b/net/ipv4/tcp_input.c
8092 @@ -115,6 +115,7 @@ int sysctl_tcp_invalid_ratelimit __read_mostly = HZ/2;
8093 #define FLAG_DSACKING_ACK 0x800 /* SACK blocks contained D-SACK info */
8094 #define FLAG_SACK_RENEGING 0x2000 /* snd_una advanced to a sacked seq */
8095 #define FLAG_UPDATE_TS_RECENT 0x4000 /* tcp_replace_ts_recent() */
8096 +#define FLAG_NO_CHALLENGE_ACK 0x8000 /* do not call tcp_send_challenge_ack() */
8097
8098 #define FLAG_ACKED (FLAG_DATA_ACKED|FLAG_SYN_ACKED)
8099 #define FLAG_NOT_DUP (FLAG_DATA|FLAG_WIN_UPDATE|FLAG_ACKED)
8100 @@ -3618,7 +3619,8 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
8101 if (before(ack, prior_snd_una)) {
8102 /* RFC 5961 5.2 [Blind Data Injection Attack].[Mitigation] */
8103 if (before(ack, prior_snd_una - tp->max_window)) {
8104 - tcp_send_challenge_ack(sk, skb);
8105 + if (!(flag & FLAG_NO_CHALLENGE_ACK))
8106 + tcp_send_challenge_ack(sk, skb);
8107 return -1;
8108 }
8109 goto old_ack;
8110 @@ -5969,13 +5971,17 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb)
8111
8112 /* step 5: check the ACK field */
8113 acceptable = tcp_ack(sk, skb, FLAG_SLOWPATH |
8114 - FLAG_UPDATE_TS_RECENT) > 0;
8115 + FLAG_UPDATE_TS_RECENT |
8116 + FLAG_NO_CHALLENGE_ACK) > 0;
8117
8118 + if (!acceptable) {
8119 + if (sk->sk_state == TCP_SYN_RECV)
8120 + return 1; /* send one RST */
8121 + tcp_send_challenge_ack(sk, skb);
8122 + goto discard;
8123 + }
8124 switch (sk->sk_state) {
8125 case TCP_SYN_RECV:
8126 - if (!acceptable)
8127 - return 1;
8128 -
8129 if (!tp->srtt_us)
8130 tcp_synack_rtt_meas(sk, req);
8131
8132 @@ -6045,14 +6051,6 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb)
8133 * our SYNACK so stop the SYNACK timer.
8134 */
8135 if (req) {
8136 - /* Return RST if ack_seq is invalid.
8137 - * Note that RFC793 only says to generate a
8138 - * DUPACK for it but for TCP Fast Open it seems
8139 - * better to treat this case like TCP_SYN_RECV
8140 - * above.
8141 - */
8142 - if (!acceptable)
8143 - return 1;
8144 /* We no longer need the request sock. */
8145 reqsk_fastopen_remove(sk, req, false);
8146 tcp_rearm_rto(sk);
8147 diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
8148 index 1594d9fc9c92..3a27cf762da1 100644
8149 --- a/net/ipv6/addrconf.c
8150 +++ b/net/ipv6/addrconf.c
8151 @@ -988,7 +988,10 @@ ipv6_add_addr(struct inet6_dev *idev, const struct in6_addr *addr,
8152 INIT_HLIST_NODE(&ifa->addr_lst);
8153 ifa->scope = scope;
8154 ifa->prefix_len = pfxlen;
8155 - ifa->flags = flags | IFA_F_TENTATIVE;
8156 + ifa->flags = flags;
8157 + /* No need to add the TENTATIVE flag for addresses with NODAD */
8158 + if (!(flags & IFA_F_NODAD))
8159 + ifa->flags |= IFA_F_TENTATIVE;
8160 ifa->valid_lft = valid_lft;
8161 ifa->prefered_lft = prefered_lft;
8162 ifa->cstamp = ifa->tstamp = jiffies;
8163 diff --git a/net/ipv6/ah6.c b/net/ipv6/ah6.c
8164 index 0630a4d5daaa..0edc44cb254e 100644
8165 --- a/net/ipv6/ah6.c
8166 +++ b/net/ipv6/ah6.c
8167 @@ -423,7 +423,9 @@ static int ah6_output(struct xfrm_state *x, struct sk_buff *skb)
8168 ah->seq_no = htonl(XFRM_SKB_CB(skb)->seq.output.low);
8169
8170 sg_init_table(sg, nfrags + sglists);
8171 - skb_to_sgvec_nomark(skb, sg, 0, skb->len);
8172 + err = skb_to_sgvec_nomark(skb, sg, 0, skb->len);
8173 + if (unlikely(err < 0))
8174 + goto out_free;
8175
8176 if (x->props.flags & XFRM_STATE_ESN) {
8177 /* Attach seqhi sg right after packet payload */
8178 @@ -603,7 +605,9 @@ static int ah6_input(struct xfrm_state *x, struct sk_buff *skb)
8179 ip6h->hop_limit = 0;
8180
8181 sg_init_table(sg, nfrags + sglists);
8182 - skb_to_sgvec_nomark(skb, sg, 0, skb->len);
8183 + err = skb_to_sgvec_nomark(skb, sg, 0, skb->len);
8184 + if (unlikely(err < 0))
8185 + goto out_free;
8186
8187 if (x->props.flags & XFRM_STATE_ESN) {
8188 /* Attach seqhi sg right after packet payload */
8189 diff --git a/net/ipv6/esp6.c b/net/ipv6/esp6.c
8190 index 111ba55fd512..6a924be66e37 100644
8191 --- a/net/ipv6/esp6.c
8192 +++ b/net/ipv6/esp6.c
8193 @@ -248,9 +248,11 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb)
8194 esph->spi = x->id.spi;
8195
8196 sg_init_table(sg, nfrags);
8197 - skb_to_sgvec(skb, sg,
8198 - (unsigned char *)esph - skb->data,
8199 - assoclen + ivlen + clen + alen);
8200 + err = skb_to_sgvec(skb, sg,
8201 + (unsigned char *)esph - skb->data,
8202 + assoclen + ivlen + clen + alen);
8203 + if (unlikely(err < 0))
8204 + goto error;
8205
8206 aead_request_set_crypt(req, sg, sg, ivlen + clen, iv);
8207 aead_request_set_ad(req, assoclen);
8208 @@ -423,7 +425,9 @@ static int esp6_input(struct xfrm_state *x, struct sk_buff *skb)
8209 }
8210
8211 sg_init_table(sg, nfrags);
8212 - skb_to_sgvec(skb, sg, 0, skb->len);
8213 + ret = skb_to_sgvec(skb, sg, 0, skb->len);
8214 + if (unlikely(ret < 0))
8215 + goto out;
8216
8217 aead_request_set_crypt(req, sg, sg, elen + ivlen, iv);
8218 aead_request_set_ad(req, assoclen);
8219 diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
8220 index db2613b4a049..caee5530ae2c 100644
8221 --- a/net/ipv6/ip6_gre.c
8222 +++ b/net/ipv6/ip6_gre.c
8223 @@ -319,11 +319,13 @@ static struct ip6_tnl *ip6gre_tunnel_locate(struct net *net,
8224 if (t || !create)
8225 return t;
8226
8227 - if (parms->name[0])
8228 + if (parms->name[0]) {
8229 + if (!dev_valid_name(parms->name))
8230 + return NULL;
8231 strlcpy(name, parms->name, IFNAMSIZ);
8232 - else
8233 + } else {
8234 strcpy(name, "ip6gre%d");
8235 -
8236 + }
8237 dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
8238 ip6gre_tunnel_setup);
8239 if (!dev)
8240 diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
8241 index 2e3db3619858..58a6eeeacbf7 100644
8242 --- a/net/ipv6/ip6_output.c
8243 +++ b/net/ipv6/ip6_output.c
8244 @@ -356,6 +356,11 @@ static int ip6_forward_proxy_check(struct sk_buff *skb)
8245 static inline int ip6_forward_finish(struct net *net, struct sock *sk,
8246 struct sk_buff *skb)
8247 {
8248 + struct dst_entry *dst = skb_dst(skb);
8249 +
8250 + __IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS);
8251 + __IP6_ADD_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTOCTETS, skb->len);
8252 +
8253 return dst_output(net, sk, skb);
8254 }
8255
8256 @@ -549,8 +554,6 @@ int ip6_forward(struct sk_buff *skb)
8257
8258 hdr->hop_limit--;
8259
8260 - __IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS);
8261 - __IP6_ADD_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTOCTETS, skb->len);
8262 return NF_HOOK(NFPROTO_IPV6, NF_INET_FORWARD,
8263 net, NULL, skb, skb->dev, dst->dev,
8264 ip6_forward_finish);
8265 @@ -1291,7 +1294,7 @@ static int __ip6_append_data(struct sock *sk,
8266 const struct sockcm_cookie *sockc)
8267 {
8268 struct sk_buff *skb, *skb_prev = NULL;
8269 - unsigned int maxfraglen, fragheaderlen, mtu, orig_mtu;
8270 + unsigned int maxfraglen, fragheaderlen, mtu, orig_mtu, pmtu;
8271 int exthdrlen = 0;
8272 int dst_exthdrlen = 0;
8273 int hh_len;
8274 @@ -1327,6 +1330,12 @@ static int __ip6_append_data(struct sock *sk,
8275 sizeof(struct frag_hdr) : 0) +
8276 rt->rt6i_nfheader_len;
8277
8278 + /* as per RFC 7112 section 5, the entire IPv6 Header Chain must fit
8279 + * the first fragment
8280 + */
8281 + if (headersize + transhdrlen > mtu)
8282 + goto emsgsize;
8283 +
8284 if (cork->length + length > mtu - headersize && ipc6->dontfrag &&
8285 (sk->sk_protocol == IPPROTO_UDP ||
8286 sk->sk_protocol == IPPROTO_RAW)) {
8287 @@ -1342,9 +1351,8 @@ static int __ip6_append_data(struct sock *sk,
8288
8289 if (cork->length + length > maxnonfragsize - headersize) {
8290 emsgsize:
8291 - ipv6_local_error(sk, EMSGSIZE, fl6,
8292 - mtu - headersize +
8293 - sizeof(struct ipv6hdr));
8294 + pmtu = max_t(int, mtu - headersize + sizeof(struct ipv6hdr), 0);
8295 + ipv6_local_error(sk, EMSGSIZE, fl6, pmtu);
8296 return -EMSGSIZE;
8297 }
8298
8299 diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
8300 index a2fcf7bdb597..417af5ea2509 100644
8301 --- a/net/ipv6/ip6_tunnel.c
8302 +++ b/net/ipv6/ip6_tunnel.c
8303 @@ -298,13 +298,16 @@ static struct ip6_tnl *ip6_tnl_create(struct net *net, struct __ip6_tnl_parm *p)
8304 struct net_device *dev;
8305 struct ip6_tnl *t;
8306 char name[IFNAMSIZ];
8307 - int err = -ENOMEM;
8308 + int err = -E2BIG;
8309
8310 - if (p->name[0])
8311 + if (p->name[0]) {
8312 + if (!dev_valid_name(p->name))
8313 + goto failed;
8314 strlcpy(name, p->name, IFNAMSIZ);
8315 - else
8316 + } else {
8317 sprintf(name, "ip6tnl%%d");
8318 -
8319 + }
8320 + err = -ENOMEM;
8321 dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
8322 ip6_tnl_dev_setup);
8323 if (!dev)
8324 @@ -1097,6 +1100,9 @@ int ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev, __u8 dsfield,
8325
8326 if (!dst) {
8327 route_lookup:
8328 + /* add dsfield to flowlabel for route lookup */
8329 + fl6->flowlabel = ip6_make_flowinfo(dsfield, fl6->flowlabel);
8330 +
8331 dst = ip6_route_output(net, NULL, fl6);
8332
8333 if (dst->error)
8334 diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
8335 index 912333586de6..beae93fd66d5 100644
8336 --- a/net/ipv6/ip6_vti.c
8337 +++ b/net/ipv6/ip6_vti.c
8338 @@ -212,10 +212,13 @@ static struct ip6_tnl *vti6_tnl_create(struct net *net, struct __ip6_tnl_parm *p
8339 char name[IFNAMSIZ];
8340 int err;
8341
8342 - if (p->name[0])
8343 + if (p->name[0]) {
8344 + if (!dev_valid_name(p->name))
8345 + goto failed;
8346 strlcpy(name, p->name, IFNAMSIZ);
8347 - else
8348 + } else {
8349 sprintf(name, "ip6_vti%%d");
8350 + }
8351
8352 dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN, vti6_dev_setup);
8353 if (!dev)
8354 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
8355 index a8f80bd20c55..d6a4b2c73a7c 100644
8356 --- a/net/ipv6/route.c
8357 +++ b/net/ipv6/route.c
8358 @@ -856,6 +856,9 @@ static struct rt6_info *ip6_pol_route_lookup(struct net *net,
8359 struct fib6_node *fn;
8360 struct rt6_info *rt;
8361
8362 + if (fl6->flowi6_flags & FLOWI_FLAG_SKIP_NH_OIF)
8363 + flags &= ~RT6_LOOKUP_F_IFACE;
8364 +
8365 read_lock_bh(&table->tb6_lock);
8366 fn = fib6_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr);
8367 restart:
8368 diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
8369 index d4d84da28672..dcb292134c21 100644
8370 --- a/net/ipv6/sit.c
8371 +++ b/net/ipv6/sit.c
8372 @@ -244,11 +244,13 @@ static struct ip_tunnel *ipip6_tunnel_locate(struct net *net,
8373 if (!create)
8374 goto failed;
8375
8376 - if (parms->name[0])
8377 + if (parms->name[0]) {
8378 + if (!dev_valid_name(parms->name))
8379 + goto failed;
8380 strlcpy(name, parms->name, IFNAMSIZ);
8381 - else
8382 + } else {
8383 strcpy(name, "sit%d");
8384 -
8385 + }
8386 dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
8387 ipip6_tunnel_setup);
8388 if (!dev)
8389 @@ -657,6 +659,7 @@ static int ipip6_rcv(struct sk_buff *skb)
8390 if (iptunnel_pull_header(skb, 0, htons(ETH_P_IPV6),
8391 !net_eq(tunnel->net, dev_net(tunnel->dev))))
8392 goto out;
8393 + iph = ip_hdr(skb);
8394
8395 err = IP_ECN_decapsulate(iph, skb);
8396 if (unlikely(err)) {
8397 diff --git a/net/key/af_key.c b/net/key/af_key.c
8398 index 6482b001f19a..15150b412930 100644
8399 --- a/net/key/af_key.c
8400 +++ b/net/key/af_key.c
8401 @@ -3305,7 +3305,7 @@ static struct xfrm_policy *pfkey_compile_policy(struct sock *sk, int opt,
8402 p += pol->sadb_x_policy_len*8;
8403 sec_ctx = (struct sadb_x_sec_ctx *)p;
8404 if (len < pol->sadb_x_policy_len*8 +
8405 - sec_ctx->sadb_x_sec_len) {
8406 + sec_ctx->sadb_x_sec_len*8) {
8407 *dir = -EINVAL;
8408 goto out;
8409 }
8410 diff --git a/net/l2tp/l2tp_netlink.c b/net/l2tp/l2tp_netlink.c
8411 index ee03bc866d1b..ce1238492c0f 100644
8412 --- a/net/l2tp/l2tp_netlink.c
8413 +++ b/net/l2tp/l2tp_netlink.c
8414 @@ -750,6 +750,8 @@ static int l2tp_nl_session_send(struct sk_buff *skb, u32 portid, u32 seq, int fl
8415
8416 if ((session->ifname[0] &&
8417 nla_put_string(skb, L2TP_ATTR_IFNAME, session->ifname)) ||
8418 + (session->offset &&
8419 + nla_put_u16(skb, L2TP_ATTR_OFFSET, session->offset)) ||
8420 (session->cookie_len &&
8421 nla_put(skb, L2TP_ATTR_COOKIE, session->cookie_len,
8422 &session->cookie[0])) ||
8423 diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
8424 index db916cf51ffe..f7caf0f5d9c8 100644
8425 --- a/net/llc/af_llc.c
8426 +++ b/net/llc/af_llc.c
8427 @@ -309,6 +309,8 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
8428 int rc = -EINVAL;
8429
8430 dprintk("%s: binding %02X\n", __func__, addr->sllc_sap);
8431 +
8432 + lock_sock(sk);
8433 if (unlikely(!sock_flag(sk, SOCK_ZAPPED) || addrlen != sizeof(*addr)))
8434 goto out;
8435 rc = -EAFNOSUPPORT;
8436 @@ -380,6 +382,7 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
8437 out_put:
8438 llc_sap_put(sap);
8439 out:
8440 + release_sock(sk);
8441 return rc;
8442 }
8443
8444 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
8445 index efa2a2fcae72..d7801f6877af 100644
8446 --- a/net/mac80211/cfg.c
8447 +++ b/net/mac80211/cfg.c
8448 @@ -2341,10 +2341,17 @@ static int ieee80211_set_tx_power(struct wiphy *wiphy,
8449 struct ieee80211_sub_if_data *sdata;
8450 enum nl80211_tx_power_setting txp_type = type;
8451 bool update_txp_type = false;
8452 + bool has_monitor = false;
8453
8454 if (wdev) {
8455 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
8456
8457 + if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
8458 + sdata = rtnl_dereference(local->monitor_sdata);
8459 + if (!sdata)
8460 + return -EOPNOTSUPP;
8461 + }
8462 +
8463 switch (type) {
8464 case NL80211_TX_POWER_AUTOMATIC:
8465 sdata->user_power_level = IEEE80211_UNSET_POWER_LEVEL;
8466 @@ -2383,15 +2390,34 @@ static int ieee80211_set_tx_power(struct wiphy *wiphy,
8467
8468 mutex_lock(&local->iflist_mtx);
8469 list_for_each_entry(sdata, &local->interfaces, list) {
8470 + if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
8471 + has_monitor = true;
8472 + continue;
8473 + }
8474 sdata->user_power_level = local->user_power_level;
8475 if (txp_type != sdata->vif.bss_conf.txpower_type)
8476 update_txp_type = true;
8477 sdata->vif.bss_conf.txpower_type = txp_type;
8478 }
8479 - list_for_each_entry(sdata, &local->interfaces, list)
8480 + list_for_each_entry(sdata, &local->interfaces, list) {
8481 + if (sdata->vif.type == NL80211_IFTYPE_MONITOR)
8482 + continue;
8483 ieee80211_recalc_txpower(sdata, update_txp_type);
8484 + }
8485 mutex_unlock(&local->iflist_mtx);
8486
8487 + if (has_monitor) {
8488 + sdata = rtnl_dereference(local->monitor_sdata);
8489 + if (sdata) {
8490 + sdata->user_power_level = local->user_power_level;
8491 + if (txp_type != sdata->vif.bss_conf.txpower_type)
8492 + update_txp_type = true;
8493 + sdata->vif.bss_conf.txpower_type = txp_type;
8494 +
8495 + ieee80211_recalc_txpower(sdata, update_txp_type);
8496 + }
8497 + }
8498 +
8499 return 0;
8500 }
8501
8502 diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h
8503 index 09f77e4a8a79..49c8a9c9b91f 100644
8504 --- a/net/mac80211/driver-ops.h
8505 +++ b/net/mac80211/driver-ops.h
8506 @@ -164,7 +164,8 @@ static inline void drv_bss_info_changed(struct ieee80211_local *local,
8507 if (WARN_ON_ONCE(sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE ||
8508 sdata->vif.type == NL80211_IFTYPE_NAN ||
8509 (sdata->vif.type == NL80211_IFTYPE_MONITOR &&
8510 - !sdata->vif.mu_mimo_owner)))
8511 + !sdata->vif.mu_mimo_owner &&
8512 + !(changed & BSS_CHANGED_TXPOWER))))
8513 return;
8514
8515 if (!check_sdata_in_driver(sdata))
8516 diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
8517 index fdab4f1390d2..e6f42d12222e 100644
8518 --- a/net/mac80211/mlme.c
8519 +++ b/net/mac80211/mlme.c
8520 @@ -4332,6 +4332,10 @@ static int ieee80211_prep_connection(struct ieee80211_sub_if_data *sdata,
8521 if (WARN_ON(!ifmgd->auth_data && !ifmgd->assoc_data))
8522 return -EINVAL;
8523
8524 + /* If a reconfig is happening, bail out */
8525 + if (local->in_reconfig)
8526 + return -EBUSY;
8527 +
8528 if (assoc) {
8529 rcu_read_lock();
8530 have_sta = sta_info_get(sdata, cbss->bssid);
8531 diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
8532 index 750b8bf13e60..2039fd7daf4e 100644
8533 --- a/net/netfilter/nf_conntrack_core.c
8534 +++ b/net/netfilter/nf_conntrack_core.c
8535 @@ -1542,7 +1542,6 @@ get_next_corpse(struct net *net, int (*iter)(struct nf_conn *i, void *data),
8536 struct nf_conntrack_tuple_hash *h;
8537 struct nf_conn *ct;
8538 struct hlist_nulls_node *n;
8539 - int cpu;
8540 spinlock_t *lockp;
8541
8542 for (; *bucket < nf_conntrack_htable_size; (*bucket)++) {
8543 @@ -1564,24 +1563,40 @@ get_next_corpse(struct net *net, int (*iter)(struct nf_conn *i, void *data),
8544 cond_resched();
8545 }
8546
8547 + return NULL;
8548 +found:
8549 + atomic_inc(&ct->ct_general.use);
8550 + spin_unlock(lockp);
8551 + local_bh_enable();
8552 + return ct;
8553 +}
8554 +
8555 +static void
8556 +__nf_ct_unconfirmed_destroy(struct net *net)
8557 +{
8558 + int cpu;
8559 +
8560 for_each_possible_cpu(cpu) {
8561 - struct ct_pcpu *pcpu = per_cpu_ptr(net->ct.pcpu_lists, cpu);
8562 + struct nf_conntrack_tuple_hash *h;
8563 + struct hlist_nulls_node *n;
8564 + struct ct_pcpu *pcpu;
8565 +
8566 + pcpu = per_cpu_ptr(net->ct.pcpu_lists, cpu);
8567
8568 spin_lock_bh(&pcpu->lock);
8569 hlist_nulls_for_each_entry(h, n, &pcpu->unconfirmed, hnnode) {
8570 + struct nf_conn *ct;
8571 +
8572 ct = nf_ct_tuplehash_to_ctrack(h);
8573 - if (iter(ct, data))
8574 - set_bit(IPS_DYING_BIT, &ct->status);
8575 +
8576 + /* we cannot call iter() on unconfirmed list, the
8577 + * owning cpu can reallocate ct->ext at any time.
8578 + */
8579 + set_bit(IPS_DYING_BIT, &ct->status);
8580 }
8581 spin_unlock_bh(&pcpu->lock);
8582 cond_resched();
8583 }
8584 - return NULL;
8585 -found:
8586 - atomic_inc(&ct->ct_general.use);
8587 - spin_unlock(lockp);
8588 - local_bh_enable();
8589 - return ct;
8590 }
8591
8592 void nf_ct_iterate_cleanup(struct net *net,
8593 @@ -1596,6 +1611,10 @@ void nf_ct_iterate_cleanup(struct net *net,
8594 if (atomic_read(&net->ct.count) == 0)
8595 return;
8596
8597 + __nf_ct_unconfirmed_destroy(net);
8598 +
8599 + synchronize_net();
8600 +
8601 while ((ct = get_next_corpse(net, iter, data, &bucket)) != NULL) {
8602 /* Time to push up daises... */
8603
8604 diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
8605 index d49a4639465f..9e30fd0ab227 100644
8606 --- a/net/netfilter/nf_conntrack_netlink.c
8607 +++ b/net/netfilter/nf_conntrack_netlink.c
8608 @@ -890,8 +890,13 @@ ctnetlink_dump_table(struct sk_buff *skb, struct netlink_callback *cb)
8609 }
8610 out:
8611 local_bh_enable();
8612 - if (last)
8613 + if (last) {
8614 + /* nf ct hash resize happened, now clear the leftover. */
8615 + if ((struct nf_conn *)cb->args[1] == last)
8616 + cb->args[1] = 0;
8617 +
8618 nf_ct_put(last);
8619 + }
8620
8621 while (i) {
8622 i--;
8623 diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
8624 index c1f59a06da6f..1e97b8d9a159 100644
8625 --- a/net/netlink/af_netlink.c
8626 +++ b/net/netlink/af_netlink.c
8627 @@ -1054,6 +1054,9 @@ static int netlink_connect(struct socket *sock, struct sockaddr *addr,
8628 if (addr->sa_family != AF_NETLINK)
8629 return -EINVAL;
8630
8631 + if (alen < sizeof(struct sockaddr_nl))
8632 + return -EINVAL;
8633 +
8634 if ((nladdr->nl_groups || nladdr->nl_pid) &&
8635 !netlink_allowed(sock, NL_CFG_F_NONROOT_SEND))
8636 return -EPERM;
8637 diff --git a/net/rds/bind.c b/net/rds/bind.c
8638 index 095f6ce583fe..adb53ae97a02 100644
8639 --- a/net/rds/bind.c
8640 +++ b/net/rds/bind.c
8641 @@ -114,6 +114,7 @@ static int rds_add_bound(struct rds_sock *rs, __be32 addr, __be16 *port)
8642 rs, &addr, (int)ntohs(*port));
8643 break;
8644 } else {
8645 + rs->rs_bound_addr = 0;
8646 rds_sock_put(rs);
8647 ret = -ENOMEM;
8648 break;
8649 diff --git a/net/rxrpc/rxkad.c b/net/rxrpc/rxkad.c
8650 index 4374e7b9c7bf..90df95e18ea4 100644
8651 --- a/net/rxrpc/rxkad.c
8652 +++ b/net/rxrpc/rxkad.c
8653 @@ -229,7 +229,9 @@ static int rxkad_secure_packet_encrypt(const struct rxrpc_call *call,
8654 len &= ~(call->conn->size_align - 1);
8655
8656 sg_init_table(sg, nsg);
8657 - skb_to_sgvec(skb, sg, 0, len);
8658 + err = skb_to_sgvec(skb, sg, 0, len);
8659 + if (unlikely(err < 0))
8660 + goto out;
8661 skcipher_request_set_crypt(req, sg, sg, len, iv.x);
8662 crypto_skcipher_encrypt(req);
8663
8664 @@ -325,7 +327,7 @@ static int rxkad_verify_packet_1(struct rxrpc_call *call, struct sk_buff *skb,
8665 struct sk_buff *trailer;
8666 u32 data_size, buf;
8667 u16 check;
8668 - int nsg;
8669 + int nsg, ret;
8670
8671 _enter("");
8672
8673 @@ -342,7 +344,9 @@ static int rxkad_verify_packet_1(struct rxrpc_call *call, struct sk_buff *skb,
8674 goto nomem;
8675
8676 sg_init_table(sg, nsg);
8677 - skb_to_sgvec(skb, sg, offset, 8);
8678 + ret = skb_to_sgvec(skb, sg, offset, 8);
8679 + if (unlikely(ret < 0))
8680 + return ret;
8681
8682 /* start the decryption afresh */
8683 memset(&iv, 0, sizeof(iv));
8684 @@ -405,7 +409,7 @@ static int rxkad_verify_packet_2(struct rxrpc_call *call, struct sk_buff *skb,
8685 struct sk_buff *trailer;
8686 u32 data_size, buf;
8687 u16 check;
8688 - int nsg;
8689 + int nsg, ret;
8690
8691 _enter(",{%d}", skb->len);
8692
8693 @@ -429,7 +433,12 @@ static int rxkad_verify_packet_2(struct rxrpc_call *call, struct sk_buff *skb,
8694 }
8695
8696 sg_init_table(sg, nsg);
8697 - skb_to_sgvec(skb, sg, offset, len);
8698 + ret = skb_to_sgvec(skb, sg, offset, len);
8699 + if (unlikely(ret < 0)) {
8700 + if (sg != _sg)
8701 + kfree(sg);
8702 + return ret;
8703 + }
8704
8705 /* decrypt from the session key */
8706 token = call->conn->params.key->payload.data[0];
8707 diff --git a/net/sched/act_api.c b/net/sched/act_api.c
8708 index f3117324146a..67adb4ecded2 100644
8709 --- a/net/sched/act_api.c
8710 +++ b/net/sched/act_api.c
8711 @@ -95,8 +95,10 @@ static int tcf_dump_walker(struct tcf_hashinfo *hinfo, struct sk_buff *skb,
8712 continue;
8713
8714 nest = nla_nest_start(skb, n_i);
8715 - if (nest == NULL)
8716 + if (nest == NULL) {
8717 + index--;
8718 goto nla_put_failure;
8719 + }
8720 err = tcf_action_dump_1(skb, p, 0, 0);
8721 if (err < 0) {
8722 index--;
8723 diff --git a/net/sched/act_bpf.c b/net/sched/act_bpf.c
8724 index 1d3960033f61..40496f34bdb3 100644
8725 --- a/net/sched/act_bpf.c
8726 +++ b/net/sched/act_bpf.c
8727 @@ -245,10 +245,14 @@ static int tcf_bpf_init_from_efd(struct nlattr **tb, struct tcf_bpf_cfg *cfg)
8728
8729 static void tcf_bpf_cfg_cleanup(const struct tcf_bpf_cfg *cfg)
8730 {
8731 - if (cfg->is_ebpf)
8732 - bpf_prog_put(cfg->filter);
8733 - else
8734 - bpf_prog_destroy(cfg->filter);
8735 + struct bpf_prog *filter = cfg->filter;
8736 +
8737 + if (filter) {
8738 + if (cfg->is_ebpf)
8739 + bpf_prog_put(filter);
8740 + else
8741 + bpf_prog_destroy(filter);
8742 + }
8743
8744 kfree(cfg->bpf_ops);
8745 kfree(cfg->bpf_name);
8746 diff --git a/net/sched/act_skbmod.c b/net/sched/act_skbmod.c
8747 index f85313d60a4d..bd8e86cb8743 100644
8748 --- a/net/sched/act_skbmod.c
8749 +++ b/net/sched/act_skbmod.c
8750 @@ -192,7 +192,8 @@ static void tcf_skbmod_cleanup(struct tc_action *a, int bind)
8751 struct tcf_skbmod_params *p;
8752
8753 p = rcu_dereference_protected(d->skbmod_p, 1);
8754 - kfree_rcu(p, rcu);
8755 + if (p)
8756 + kfree_rcu(p, rcu);
8757 }
8758
8759 static int tcf_skbmod_dump(struct sk_buff *skb, struct tc_action *a,
8760 diff --git a/net/sched/act_tunnel_key.c b/net/sched/act_tunnel_key.c
8761 index b6e3abe505ac..901fb8bb9dce 100644
8762 --- a/net/sched/act_tunnel_key.c
8763 +++ b/net/sched/act_tunnel_key.c
8764 @@ -196,11 +196,12 @@ static void tunnel_key_release(struct tc_action *a, int bind)
8765 struct tcf_tunnel_key_params *params;
8766
8767 params = rcu_dereference_protected(t->params, 1);
8768 + if (params) {
8769 + if (params->tcft_action == TCA_TUNNEL_KEY_ACT_SET)
8770 + dst_release(&params->tcft_enc_metadata->dst);
8771
8772 - if (params->tcft_action == TCA_TUNNEL_KEY_ACT_SET)
8773 - dst_release(&params->tcft_enc_metadata->dst);
8774 -
8775 - kfree_rcu(params, rcu);
8776 + kfree_rcu(params, rcu);
8777 + }
8778 }
8779
8780 static int tunnel_key_dump_addresses(struct sk_buff *skb,
8781 diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
8782 index 11f69d4c5619..355d95a7cd81 100644
8783 --- a/net/sctp/ipv6.c
8784 +++ b/net/sctp/ipv6.c
8785 @@ -727,8 +727,10 @@ static int sctp_v6_addr_to_user(struct sctp_sock *sp, union sctp_addr *addr)
8786 sctp_v6_map_v4(addr);
8787 }
8788
8789 - if (addr->sa.sa_family == AF_INET)
8790 + if (addr->sa.sa_family == AF_INET) {
8791 + memset(addr->v4.sin_zero, 0, sizeof(addr->v4.sin_zero));
8792 return sizeof(struct sockaddr_in);
8793 + }
8794 return sizeof(struct sockaddr_in6);
8795 }
8796
8797 diff --git a/net/sctp/socket.c b/net/sctp/socket.c
8798 index 8cdd6bbe2efa..78f38056fca6 100644
8799 --- a/net/sctp/socket.c
8800 +++ b/net/sctp/socket.c
8801 @@ -335,11 +335,14 @@ static struct sctp_af *sctp_sockaddr_af(struct sctp_sock *opt,
8802 if (!opt->pf->af_supported(addr->sa.sa_family, opt))
8803 return NULL;
8804
8805 - /* V4 mapped address are really of AF_INET family */
8806 - if (addr->sa.sa_family == AF_INET6 &&
8807 - ipv6_addr_v4mapped(&addr->v6.sin6_addr) &&
8808 - !opt->pf->af_supported(AF_INET, opt))
8809 - return NULL;
8810 + if (addr->sa.sa_family == AF_INET6) {
8811 + if (len < SIN6_LEN_RFC2133)
8812 + return NULL;
8813 + /* V4 mapped address are really of AF_INET family */
8814 + if (ipv6_addr_v4mapped(&addr->v6.sin6_addr) &&
8815 + !opt->pf->af_supported(AF_INET, opt))
8816 + return NULL;
8817 + }
8818
8819 /* If we get this far, af is valid. */
8820 af = sctp_get_af_specific(addr->sa.sa_family);
8821 @@ -1519,7 +1522,7 @@ static void sctp_close(struct sock *sk, long timeout)
8822
8823 pr_debug("%s: sk:%p, timeout:%ld\n", __func__, sk, timeout);
8824
8825 - lock_sock(sk);
8826 + lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
8827 sk->sk_shutdown = SHUTDOWN_MASK;
8828 sk->sk_state = SCTP_SS_CLOSING;
8829
8830 @@ -1569,7 +1572,7 @@ static void sctp_close(struct sock *sk, long timeout)
8831 * held and that should be grabbed before socket lock.
8832 */
8833 spin_lock_bh(&net->sctp.addr_wq_lock);
8834 - bh_lock_sock(sk);
8835 + bh_lock_sock_nested(sk);
8836
8837 /* Hold the sock, since sk_common_release() will put sock_put()
8838 * and we have just a little more cleanup.
8839 diff --git a/net/strparser/strparser.c b/net/strparser/strparser.c
8840 index b5c279b22680..6cbc935ddd96 100644
8841 --- a/net/strparser/strparser.c
8842 +++ b/net/strparser/strparser.c
8843 @@ -59,7 +59,7 @@ static void strp_abort_rx_strp(struct strparser *strp, int err)
8844 strp->rx_stopped = 1;
8845
8846 /* Report an error on the lower socket */
8847 - csk->sk_err = err;
8848 + csk->sk_err = -err;
8849 csk->sk_error_report(csk);
8850 }
8851
8852 @@ -422,7 +422,7 @@ static void strp_rx_msg_timeout(unsigned long arg)
8853 /* Message assembly timed out */
8854 STRP_STATS_INCR(strp->stats.rx_msg_timeouts);
8855 lock_sock(strp->sk);
8856 - strp->cb.abort_parser(strp, ETIMEDOUT);
8857 + strp->cb.abort_parser(strp, -ETIMEDOUT);
8858 release_sock(strp->sk);
8859 }
8860
8861 diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
8862 index d24d14ea8ba4..1bf9153004cd 100644
8863 --- a/net/sunrpc/xprtsock.c
8864 +++ b/net/sunrpc/xprtsock.c
8865 @@ -2384,7 +2384,12 @@ static void xs_tcp_setup_socket(struct work_struct *work)
8866 case -EHOSTUNREACH:
8867 case -EADDRINUSE:
8868 case -ENOBUFS:
8869 - /* retry with existing socket, after a delay */
8870 + /*
8871 + * xs_tcp_force_close() wakes tasks with -EIO.
8872 + * We need to wake them first to ensure the
8873 + * correct error code.
8874 + */
8875 + xprt_wake_pending_tasks(xprt, status);
8876 xs_tcp_force_close(xprt);
8877 goto out;
8878 }
8879 diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
8880 index f83b74d3e2ac..007721632b07 100644
8881 --- a/net/x25/af_x25.c
8882 +++ b/net/x25/af_x25.c
8883 @@ -1790,32 +1790,40 @@ void x25_kill_by_neigh(struct x25_neigh *nb)
8884
8885 static int __init x25_init(void)
8886 {
8887 - int rc = proto_register(&x25_proto, 0);
8888 + int rc;
8889
8890 - if (rc != 0)
8891 + rc = proto_register(&x25_proto, 0);
8892 + if (rc)
8893 goto out;
8894
8895 rc = sock_register(&x25_family_ops);
8896 - if (rc != 0)
8897 + if (rc)
8898 goto out_proto;
8899
8900 dev_add_pack(&x25_packet_type);
8901
8902 rc = register_netdevice_notifier(&x25_dev_notifier);
8903 - if (rc != 0)
8904 + if (rc)
8905 goto out_sock;
8906
8907 - pr_info("Linux Version 0.2\n");
8908 + rc = x25_register_sysctl();
8909 + if (rc)
8910 + goto out_dev;
8911
8912 - x25_register_sysctl();
8913 rc = x25_proc_init();
8914 - if (rc != 0)
8915 - goto out_dev;
8916 + if (rc)
8917 + goto out_sysctl;
8918 +
8919 + pr_info("Linux Version 0.2\n");
8920 +
8921 out:
8922 return rc;
8923 +out_sysctl:
8924 + x25_unregister_sysctl();
8925 out_dev:
8926 unregister_netdevice_notifier(&x25_dev_notifier);
8927 out_sock:
8928 + dev_remove_pack(&x25_packet_type);
8929 sock_unregister(AF_X25);
8930 out_proto:
8931 proto_unregister(&x25_proto);
8932 diff --git a/net/x25/sysctl_net_x25.c b/net/x25/sysctl_net_x25.c
8933 index 43239527a205..703d46aae7a2 100644
8934 --- a/net/x25/sysctl_net_x25.c
8935 +++ b/net/x25/sysctl_net_x25.c
8936 @@ -73,9 +73,12 @@ static struct ctl_table x25_table[] = {
8937 { 0, },
8938 };
8939
8940 -void __init x25_register_sysctl(void)
8941 +int __init x25_register_sysctl(void)
8942 {
8943 x25_table_header = register_net_sysctl(&init_net, "net/x25", x25_table);
8944 + if (!x25_table_header)
8945 + return -ENOMEM;
8946 + return 0;
8947 }
8948
8949 void x25_unregister_sysctl(void)
8950 diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
8951 index fdb9742d934e..6f5635770d6a 100644
8952 --- a/net/xfrm/xfrm_state.c
8953 +++ b/net/xfrm/xfrm_state.c
8954 @@ -1246,6 +1246,8 @@ static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig)
8955 x->curlft.add_time = orig->curlft.add_time;
8956 x->km.state = orig->km.state;
8957 x->km.seq = orig->km.seq;
8958 + x->replay = orig->replay;
8959 + x->preplay = orig->preplay;
8960
8961 return x;
8962
8963 diff --git a/scripts/tags.sh b/scripts/tags.sh
8964 index a2ff3388e5ea..2a61db329adf 100755
8965 --- a/scripts/tags.sh
8966 +++ b/scripts/tags.sh
8967 @@ -106,6 +106,7 @@ all_compiled_sources()
8968 case "$i" in
8969 *.[cS])
8970 j=${i/\.[cS]/\.o}
8971 + j="${j#$tree}"
8972 if [ -e $j ]; then
8973 echo $i
8974 fi
8975 diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
8976 index 17627d8d5a26..8ded80867b92 100644
8977 --- a/security/selinux/hooks.c
8978 +++ b/security/selinux/hooks.c
8979 @@ -2033,8 +2033,9 @@ static inline u32 file_to_av(struct file *file)
8980 static inline u32 open_file_to_av(struct file *file)
8981 {
8982 u32 av = file_to_av(file);
8983 + struct inode *inode = file_inode(file);
8984
8985 - if (selinux_policycap_openperm)
8986 + if (selinux_policycap_openperm && inode->i_sb->s_magic != SOCKFS_MAGIC)
8987 av |= FILE__OPEN;
8988
8989 return av;
8990 @@ -3031,6 +3032,7 @@ static int selinux_inode_permission(struct inode *inode, int mask)
8991 static int selinux_inode_setattr(struct dentry *dentry, struct iattr *iattr)
8992 {
8993 const struct cred *cred = current_cred();
8994 + struct inode *inode = d_backing_inode(dentry);
8995 unsigned int ia_valid = iattr->ia_valid;
8996 __u32 av = FILE__WRITE;
8997
8998 @@ -3046,8 +3048,10 @@ static int selinux_inode_setattr(struct dentry *dentry, struct iattr *iattr)
8999 ATTR_ATIME_SET | ATTR_MTIME_SET | ATTR_TIMES_SET))
9000 return dentry_has_perm(cred, dentry, FILE__SETATTR);
9001
9002 - if (selinux_policycap_openperm && (ia_valid & ATTR_SIZE)
9003 - && !(ia_valid & ATTR_FILE))
9004 + if (selinux_policycap_openperm &&
9005 + inode->i_sb->s_magic != SOCKFS_MAGIC &&
9006 + (ia_valid & ATTR_SIZE) &&
9007 + !(ia_valid & ATTR_FILE))
9008 av |= FILE__OPEN;
9009
9010 return dentry_has_perm(cred, dentry, av);
9011 diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
9012 index dd88c2cb6470..48804e4ab530 100644
9013 --- a/sound/soc/generic/simple-card.c
9014 +++ b/sound/soc/generic/simple-card.c
9015 @@ -201,7 +201,7 @@ static int asoc_simple_card_dai_init(struct snd_soc_pcm_runtime *rtd)
9016 if (ret < 0)
9017 return ret;
9018
9019 - ret = asoc_simple_card_init_mic(rtd->card, &priv->hp_jack, PREFIX);
9020 + ret = asoc_simple_card_init_mic(rtd->card, &priv->mic_jack, PREFIX);
9021 if (ret < 0)
9022 return ret;
9023
9024 diff --git a/sound/soc/intel/atom/sst/sst_stream.c b/sound/soc/intel/atom/sst/sst_stream.c
9025 index 4ccc80e5e8cc..c798f8d4ae43 100644
9026 --- a/sound/soc/intel/atom/sst/sst_stream.c
9027 +++ b/sound/soc/intel/atom/sst/sst_stream.c
9028 @@ -221,7 +221,7 @@ int sst_send_byte_stream_mrfld(struct intel_sst_drv *sst_drv_ctx,
9029 sst_free_block(sst_drv_ctx, block);
9030 out:
9031 test_and_clear_bit(pvt_id, &sst_drv_ctx->pvt_id);
9032 - return 0;
9033 + return ret;
9034 }
9035
9036 /*
9037 diff --git a/sound/soc/intel/boards/cht_bsw_rt5645.c b/sound/soc/intel/boards/cht_bsw_rt5645.c
9038 index 90525614c20a..b1eb696f33b6 100644
9039 --- a/sound/soc/intel/boards/cht_bsw_rt5645.c
9040 +++ b/sound/soc/intel/boards/cht_bsw_rt5645.c
9041 @@ -111,6 +111,7 @@ static const struct snd_soc_dapm_widget cht_dapm_widgets[] = {
9042 SND_SOC_DAPM_HP("Headphone", NULL),
9043 SND_SOC_DAPM_MIC("Headset Mic", NULL),
9044 SND_SOC_DAPM_MIC("Int Mic", NULL),
9045 + SND_SOC_DAPM_MIC("Int Analog Mic", NULL),
9046 SND_SOC_DAPM_SPK("Ext Spk", NULL),
9047 SND_SOC_DAPM_SUPPLY("Platform Clock", SND_SOC_NOPM, 0, 0,
9048 platform_clock_control, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
9049 @@ -121,6 +122,8 @@ static const struct snd_soc_dapm_route cht_rt5645_audio_map[] = {
9050 {"IN1N", NULL, "Headset Mic"},
9051 {"DMIC L1", NULL, "Int Mic"},
9052 {"DMIC R1", NULL, "Int Mic"},
9053 + {"IN2P", NULL, "Int Analog Mic"},
9054 + {"IN2N", NULL, "Int Analog Mic"},
9055 {"Headphone", NULL, "HPOL"},
9056 {"Headphone", NULL, "HPOR"},
9057 {"Ext Spk", NULL, "SPOL"},
9058 @@ -134,6 +137,9 @@ static const struct snd_soc_dapm_route cht_rt5645_audio_map[] = {
9059 {"Headphone", NULL, "Platform Clock"},
9060 {"Headset Mic", NULL, "Platform Clock"},
9061 {"Int Mic", NULL, "Platform Clock"},
9062 + {"Int Analog Mic", NULL, "Platform Clock"},
9063 + {"Int Analog Mic", NULL, "micbias1"},
9064 + {"Int Analog Mic", NULL, "micbias2"},
9065 {"Ext Spk", NULL, "Platform Clock"},
9066 };
9067
9068 @@ -162,6 +168,7 @@ static const struct snd_kcontrol_new cht_mc_controls[] = {
9069 SOC_DAPM_PIN_SWITCH("Headphone"),
9070 SOC_DAPM_PIN_SWITCH("Headset Mic"),
9071 SOC_DAPM_PIN_SWITCH("Int Mic"),
9072 + SOC_DAPM_PIN_SWITCH("Int Analog Mic"),
9073 SOC_DAPM_PIN_SWITCH("Ext Spk"),
9074 };
9075
9076 diff --git a/sound/soc/intel/skylake/skl-messages.c b/sound/soc/intel/skylake/skl-messages.c
9077 index 805b7f2173f3..78472c908ae9 100644
9078 --- a/sound/soc/intel/skylake/skl-messages.c
9079 +++ b/sound/soc/intel/skylake/skl-messages.c
9080 @@ -331,7 +331,11 @@ int skl_resume_dsp(struct skl *skl)
9081 if (skl->skl_sst->is_first_boot == true)
9082 return 0;
9083
9084 + /* disable dynamic clock gating during fw and lib download */
9085 + ctx->enable_miscbdcge(ctx->dev, false);
9086 +
9087 ret = skl_dsp_wake(ctx->dsp);
9088 + ctx->enable_miscbdcge(ctx->dev, true);
9089 if (ret < 0)
9090 return ret;
9091
9092 diff --git a/sound/soc/intel/skylake/skl-pcm.c b/sound/soc/intel/skylake/skl-pcm.c
9093 index 58c728662600..2fd213cd9a40 100644
9094 --- a/sound/soc/intel/skylake/skl-pcm.c
9095 +++ b/sound/soc/intel/skylake/skl-pcm.c
9096 @@ -1191,7 +1191,11 @@ static int skl_platform_soc_probe(struct snd_soc_platform *platform)
9097 return -EIO;
9098 }
9099
9100 + /* disable dynamic clock gating during fw and lib download */
9101 + skl->skl_sst->enable_miscbdcge(platform->dev, false);
9102 +
9103 ret = ops->init_fw(platform->dev, skl->skl_sst);
9104 + skl->skl_sst->enable_miscbdcge(platform->dev, true);
9105 if (ret < 0) {
9106 dev_err(platform->dev, "Failed to boot first fw: %d\n", ret);
9107 return ret;
9108 diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
9109 index fefa6ad5de8b..17e305b71fd9 100644
9110 --- a/sound/soc/sh/rcar/ssi.c
9111 +++ b/sound/soc/sh/rcar/ssi.c
9112 @@ -552,6 +552,13 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
9113 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
9114 u32 *buf = (u32 *)(runtime->dma_area +
9115 rsnd_dai_pointer_offset(io, 0));
9116 + int shift = 0;
9117 +
9118 + switch (runtime->sample_bits) {
9119 + case 32:
9120 + shift = 8;
9121 + break;
9122 + }
9123
9124 /*
9125 * 8/16/32 data can be assesse to TDR/RDR register
9126 @@ -559,9 +566,9 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
9127 * see rsnd_ssi_init()
9128 */
9129 if (rsnd_io_is_play(io))
9130 - rsnd_mod_write(mod, SSITDR, *buf);
9131 + rsnd_mod_write(mod, SSITDR, (*buf) << shift);
9132 else
9133 - *buf = rsnd_mod_read(mod, SSIRDR);
9134 + *buf = (rsnd_mod_read(mod, SSIRDR) >> shift);
9135
9136 elapsed = rsnd_dai_pointer_update(io, sizeof(*buf));
9137 }
9138 diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
9139 index 4c596ba310cb..0fd8bfb77f65 100644
9140 --- a/tools/perf/builtin-trace.c
9141 +++ b/tools/perf/builtin-trace.c
9142 @@ -679,6 +679,10 @@ static struct syscall_fmt {
9143 { .name = "mlockall", .errmsg = true,
9144 .arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, },
9145 { .name = "mmap", .hexret = true,
9146 +/* The standard mmap maps to old_mmap on s390x */
9147 +#if defined(__s390x__)
9148 + .alias = "old_mmap",
9149 +#endif
9150 .arg_scnprintf = { [0] = SCA_HEX, /* addr */
9151 [2] = SCA_MMAP_PROT, /* prot */
9152 [3] = SCA_MMAP_FLAGS, /* flags */ }, },
9153 diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
9154 index ff5bc6363a79..150334064071 100644
9155 --- a/tools/perf/tests/code-reading.c
9156 +++ b/tools/perf/tests/code-reading.c
9157 @@ -224,6 +224,8 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,
9158 unsigned char buf2[BUFSZ];
9159 size_t ret_len;
9160 u64 objdump_addr;
9161 + const char *objdump_name;
9162 + char decomp_name[KMOD_DECOMP_LEN];
9163 int ret;
9164
9165 pr_debug("Reading object code for memory address: %#"PRIx64"\n", addr);
9166 @@ -284,9 +286,25 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,
9167 state->done[state->done_cnt++] = al.map->start;
9168 }
9169
9170 + objdump_name = al.map->dso->long_name;
9171 + if (dso__needs_decompress(al.map->dso)) {
9172 + if (dso__decompress_kmodule_path(al.map->dso, objdump_name,
9173 + decomp_name,
9174 + sizeof(decomp_name)) < 0) {
9175 + pr_debug("decompression failed\n");
9176 + return -1;
9177 + }
9178 +
9179 + objdump_name = decomp_name;
9180 + }
9181 +
9182 /* Read the object code using objdump */
9183 objdump_addr = map__rip_2objdump(al.map, al.addr);
9184 - ret = read_via_objdump(al.map->dso->long_name, objdump_addr, buf2, len);
9185 + ret = read_via_objdump(objdump_name, objdump_addr, buf2, len);
9186 +
9187 + if (dso__needs_decompress(al.map->dso))
9188 + unlink(objdump_name);
9189 +
9190 if (ret > 0) {
9191 /*
9192 * The kernel maps are inaccurate - assume objdump is right in
9193 diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
9194 index d2c6cdd9d42b..4bc58822416c 100644
9195 --- a/tools/perf/util/dso.c
9196 +++ b/tools/perf/util/dso.c
9197 @@ -366,7 +366,23 @@ static int __open_dso(struct dso *dso, struct machine *machine)
9198 if (!is_regular_file(name))
9199 return -EINVAL;
9200
9201 + if (dso__needs_decompress(dso)) {
9202 + char newpath[KMOD_DECOMP_LEN];
9203 + size_t len = sizeof(newpath);
9204 +
9205 + if (dso__decompress_kmodule_path(dso, name, newpath, len) < 0) {
9206 + free(name);
9207 + return -dso->load_errno;
9208 + }
9209 +
9210 + strcpy(name, newpath);
9211 + }
9212 +
9213 fd = do_open(name);
9214 +
9215 + if (dso__needs_decompress(dso))
9216 + unlink(name);
9217 +
9218 free(name);
9219 return fd;
9220 }
9221 diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
9222 index 28bdb48357f0..ab36aa5585b4 100644
9223 --- a/tools/perf/util/header.c
9224 +++ b/tools/perf/util/header.c
9225 @@ -1454,8 +1454,16 @@ static int __event_process_build_id(struct build_id_event *bev,
9226
9227 dso__set_build_id(dso, &bev->build_id);
9228
9229 - if (!is_kernel_module(filename, cpumode))
9230 - dso->kernel = dso_type;
9231 + if (dso_type != DSO_TYPE_USER) {
9232 + struct kmod_path m = { .name = NULL, };
9233 +
9234 + if (!kmod_path__parse_name(&m, filename) && m.kmod)
9235 + dso__set_short_name(dso, strdup(m.name), true);
9236 + else
9237 + dso->kernel = dso_type;
9238 +
9239 + free(m.name);
9240 + }
9241
9242 build_id__sprintf(dso->build_id, sizeof(dso->build_id),
9243 sbuild_id);
9244 diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
9245 index 4d2e22f8bd94..c93daccec755 100644
9246 --- a/tools/perf/util/probe-event.c
9247 +++ b/tools/perf/util/probe-event.c
9248 @@ -2609,6 +2609,14 @@ static int get_new_event_name(char *buf, size_t len, const char *base,
9249
9250 out:
9251 free(nbase);
9252 +
9253 + /* Final validation */
9254 + if (ret >= 0 && !is_c_func_name(buf)) {
9255 + pr_warning("Internal error: \"%s\" is an invalid event name.\n",
9256 + buf);
9257 + ret = -EINVAL;
9258 + }
9259 +
9260 return ret;
9261 }
9262
9263 diff --git a/tools/perf/util/unwind-libdw.c b/tools/perf/util/unwind-libdw.c
9264 index 783a53fb7a4e..b46e1cf347e5 100644
9265 --- a/tools/perf/util/unwind-libdw.c
9266 +++ b/tools/perf/util/unwind-libdw.c
9267 @@ -38,6 +38,14 @@ static int __report_module(struct addr_location *al, u64 ip,
9268 return 0;
9269
9270 mod = dwfl_addrmodule(ui->dwfl, ip);
9271 + if (mod) {
9272 + Dwarf_Addr s;
9273 +
9274 + dwfl_module_info(mod, NULL, &s, NULL, NULL, NULL, NULL, NULL);
9275 + if (s != al->map->start)
9276 + mod = 0;
9277 + }
9278 +
9279 if (!mod)
9280 mod = dwfl_report_elf(ui->dwfl, dso->short_name,
9281 dso->long_name, -1, al->map->start,
9282 @@ -167,12 +175,16 @@ frame_callback(Dwfl_Frame *state, void *arg)
9283 {
9284 struct unwind_info *ui = arg;
9285 Dwarf_Addr pc;
9286 + bool isactivation;
9287
9288 - if (!dwfl_frame_pc(state, &pc, NULL)) {
9289 + if (!dwfl_frame_pc(state, &pc, &isactivation)) {
9290 pr_err("%s", dwfl_errmsg(-1));
9291 return DWARF_CB_ABORT;
9292 }
9293
9294 + if (!isactivation)
9295 + --pc;
9296 +
9297 return entry(pc, ui) || !(--ui->max_stack) ?
9298 DWARF_CB_ABORT : DWARF_CB_OK;
9299 }
9300 diff --git a/tools/perf/util/unwind-libunwind-local.c b/tools/perf/util/unwind-libunwind-local.c
9301 index 20c2e5743903..120383494ff2 100644
9302 --- a/tools/perf/util/unwind-libunwind-local.c
9303 +++ b/tools/perf/util/unwind-libunwind-local.c
9304 @@ -646,6 +646,17 @@ static int get_entries(struct unwind_info *ui, unwind_entry_cb_t cb,
9305
9306 while (!ret && (unw_step(&c) > 0) && i < max_stack) {
9307 unw_get_reg(&c, UNW_REG_IP, &ips[i]);
9308 +
9309 + /*
9310 + * Decrement the IP for any non-activation frames.
9311 + * this is required to properly find the srcline
9312 + * for caller frames.
9313 + * See also the documentation for dwfl_frame_pc(),
9314 + * which this code tries to replicate.
9315 + */
9316 + if (unw_is_signal_frame(&c) <= 0)
9317 + --ips[i];
9318 +
9319 ++i;
9320 }
9321
9322 diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c
9323 index 85c56800f17a..dfb010bd29f2 100644
9324 --- a/tools/perf/util/util.c
9325 +++ b/tools/perf/util/util.c
9326 @@ -207,7 +207,7 @@ int copyfile_offset(int ifd, loff_t off_in, int ofd, loff_t off_out, u64 size)
9327
9328 size -= ret;
9329 off_in += ret;
9330 - off_out -= ret;
9331 + off_out += ret;
9332 }
9333 munmap(ptr, off_in + size);
9334
9335 diff --git a/tools/testing/selftests/powerpc/tm/tm-resched-dscr.c b/tools/testing/selftests/powerpc/tm/tm-resched-dscr.c
9336 index d9c49f41515e..e79ccd6aada1 100644
9337 --- a/tools/testing/selftests/powerpc/tm/tm-resched-dscr.c
9338 +++ b/tools/testing/selftests/powerpc/tm/tm-resched-dscr.c
9339 @@ -42,12 +42,12 @@ int test_body(void)
9340 printf("Check DSCR TM context switch: ");
9341 fflush(stdout);
9342 for (;;) {
9343 - rv = 1;
9344 asm __volatile__ (
9345 /* set a known value into the DSCR */
9346 "ld 3, %[dscr1];"
9347 "mtspr %[sprn_dscr], 3;"
9348
9349 + "li %[rv], 1;"
9350 /* start and suspend a transaction */
9351 "tbegin.;"
9352 "beq 1f;"
9353 diff --git a/tools/testing/selftests/seccomp/seccomp_bpf.c b/tools/testing/selftests/seccomp/seccomp_bpf.c
9354 index cbb0564c0ec4..f68998149351 100644
9355 --- a/tools/testing/selftests/seccomp/seccomp_bpf.c
9356 +++ b/tools/testing/selftests/seccomp/seccomp_bpf.c
9357 @@ -1318,7 +1318,7 @@ void change_syscall(struct __test_metadata *_metadata,
9358 iov.iov_len = sizeof(regs);
9359 ret = ptrace(PTRACE_GETREGSET, tracee, NT_PRSTATUS, &iov);
9360 #endif
9361 - EXPECT_EQ(0, ret);
9362 + EXPECT_EQ(0, ret) {}
9363
9364 #if defined(__x86_64__) || defined(__i386__) || defined(__powerpc__) || \
9365 defined(__s390__) || defined(__hppa__)