Contents of /trunk/kernel-alx-legacy/patches-4.9/0216-4.9.117-all-fixes.patch
Parent Directory | Revision Log
Revision 3608 -
(show annotations)
(download)
Fri Aug 14 07:34:29 2020 UTC (4 years, 1 month ago) by niro
File size: 121182 byte(s)
Fri Aug 14 07:34:29 2020 UTC (4 years, 1 month ago) by niro
File size: 121182 byte(s)
-added kerenl-alx-legacy pkg
1 | diff --git a/Documentation/devicetree/bindings/net/dsa/qca8k.txt b/Documentation/devicetree/bindings/net/dsa/qca8k.txt |
2 | index 9c67ee4890d7..bbcb255c3150 100644 |
3 | --- a/Documentation/devicetree/bindings/net/dsa/qca8k.txt |
4 | +++ b/Documentation/devicetree/bindings/net/dsa/qca8k.txt |
5 | @@ -2,7 +2,10 @@ |
6 | |
7 | Required properties: |
8 | |
9 | -- compatible: should be "qca,qca8337" |
10 | +- compatible: should be one of: |
11 | + "qca,qca8334" |
12 | + "qca,qca8337" |
13 | + |
14 | - #size-cells: must be 0 |
15 | - #address-cells: must be 1 |
16 | |
17 | @@ -14,6 +17,20 @@ port and PHY id, each subnode describing a port needs to have a valid phandle |
18 | referencing the internal PHY connected to it. The CPU port of this switch is |
19 | always port 0. |
20 | |
21 | +A CPU port node has the following optional node: |
22 | + |
23 | +- fixed-link : Fixed-link subnode describing a link to a non-MDIO |
24 | + managed entity. See |
25 | + Documentation/devicetree/bindings/net/fixed-link.txt |
26 | + for details. |
27 | + |
28 | +For QCA8K the 'fixed-link' sub-node supports only the following properties: |
29 | + |
30 | +- 'speed' (integer, mandatory), to indicate the link speed. Accepted |
31 | + values are 10, 100 and 1000 |
32 | +- 'full-duplex' (boolean, optional), to indicate that full duplex is |
33 | + used. When absent, half duplex is assumed. |
34 | + |
35 | Example: |
36 | |
37 | |
38 | @@ -53,6 +70,10 @@ Example: |
39 | label = "cpu"; |
40 | ethernet = <&gmac1>; |
41 | phy-mode = "rgmii"; |
42 | + fixed-link { |
43 | + speed = 1000; |
44 | + full-duplex; |
45 | + }; |
46 | }; |
47 | |
48 | port@1 { |
49 | diff --git a/Documentation/devicetree/bindings/net/meson-dwmac.txt b/Documentation/devicetree/bindings/net/meson-dwmac.txt |
50 | index 89e62ddc69ca..da37da0fdd3f 100644 |
51 | --- a/Documentation/devicetree/bindings/net/meson-dwmac.txt |
52 | +++ b/Documentation/devicetree/bindings/net/meson-dwmac.txt |
53 | @@ -10,6 +10,7 @@ Required properties on all platforms: |
54 | - "amlogic,meson6-dwmac" |
55 | - "amlogic,meson8b-dwmac" |
56 | - "amlogic,meson-gxbb-dwmac" |
57 | + - "amlogic,meson-axg-dwmac" |
58 | Additionally "snps,dwmac" and any applicable more |
59 | detailed version number described in net/stmmac.txt |
60 | should be used. |
61 | diff --git a/Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt |
62 | index fe7fe0b03cfb..1b9881786ce9 100644 |
63 | --- a/Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt |
64 | +++ b/Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt |
65 | @@ -3,8 +3,10 @@ |
66 | Required properties for the root node: |
67 | - compatible: one of "amlogic,meson8-cbus-pinctrl" |
68 | "amlogic,meson8b-cbus-pinctrl" |
69 | + "amlogic,meson8m2-cbus-pinctrl" |
70 | "amlogic,meson8-aobus-pinctrl" |
71 | "amlogic,meson8b-aobus-pinctrl" |
72 | + "amlogic,meson8m2-aobus-pinctrl" |
73 | "amlogic,meson-gxbb-periphs-pinctrl" |
74 | "amlogic,meson-gxbb-aobus-pinctrl" |
75 | - reg: address and size of registers controlling irq functionality |
76 | diff --git a/Makefile b/Makefile |
77 | index a6b011778960..773c26c95d98 100644 |
78 | --- a/Makefile |
79 | +++ b/Makefile |
80 | @@ -1,6 +1,6 @@ |
81 | VERSION = 4 |
82 | PATCHLEVEL = 9 |
83 | -SUBLEVEL = 116 |
84 | +SUBLEVEL = 117 |
85 | EXTRAVERSION = |
86 | NAME = Roaring Lionus |
87 | |
88 | diff --git a/arch/arm/boot/dts/emev2.dtsi b/arch/arm/boot/dts/emev2.dtsi |
89 | index cd119400f440..fd6f9ce9206a 100644 |
90 | --- a/arch/arm/boot/dts/emev2.dtsi |
91 | +++ b/arch/arm/boot/dts/emev2.dtsi |
92 | @@ -30,13 +30,13 @@ |
93 | #address-cells = <1>; |
94 | #size-cells = <0>; |
95 | |
96 | - cpu@0 { |
97 | + cpu0: cpu@0 { |
98 | device_type = "cpu"; |
99 | compatible = "arm,cortex-a9"; |
100 | reg = <0>; |
101 | clock-frequency = <533000000>; |
102 | }; |
103 | - cpu@1 { |
104 | + cpu1: cpu@1 { |
105 | device_type = "cpu"; |
106 | compatible = "arm,cortex-a9"; |
107 | reg = <1>; |
108 | @@ -56,6 +56,7 @@ |
109 | compatible = "arm,cortex-a9-pmu"; |
110 | interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>, |
111 | <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>; |
112 | + interrupt-affinity = <&cpu0>, <&cpu1>; |
113 | }; |
114 | |
115 | clocks@e0110000 { |
116 | diff --git a/arch/arm/boot/dts/sh73a0.dtsi b/arch/arm/boot/dts/sh73a0.dtsi |
117 | index 032fe2f14b16..6b0cc225149c 100644 |
118 | --- a/arch/arm/boot/dts/sh73a0.dtsi |
119 | +++ b/arch/arm/boot/dts/sh73a0.dtsi |
120 | @@ -22,7 +22,7 @@ |
121 | #address-cells = <1>; |
122 | #size-cells = <0>; |
123 | |
124 | - cpu@0 { |
125 | + cpu0: cpu@0 { |
126 | device_type = "cpu"; |
127 | compatible = "arm,cortex-a9"; |
128 | reg = <0>; |
129 | @@ -30,7 +30,7 @@ |
130 | power-domains = <&pd_a2sl>; |
131 | next-level-cache = <&L2>; |
132 | }; |
133 | - cpu@1 { |
134 | + cpu1: cpu@1 { |
135 | device_type = "cpu"; |
136 | compatible = "arm,cortex-a9"; |
137 | reg = <1>; |
138 | @@ -89,6 +89,7 @@ |
139 | compatible = "arm,cortex-a9-pmu"; |
140 | interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>, |
141 | <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>; |
142 | + interrupt-affinity = <&cpu0>, <&cpu1>; |
143 | }; |
144 | |
145 | cmt1: timer@e6138000 { |
146 | diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig |
147 | index dab2cb0c1f1c..b4c4d823569a 100644 |
148 | --- a/arch/arm64/configs/defconfig |
149 | +++ b/arch/arm64/configs/defconfig |
150 | @@ -260,6 +260,8 @@ CONFIG_GPIO_XGENE=y |
151 | CONFIG_GPIO_PCA953X=y |
152 | CONFIG_GPIO_PCA953X_IRQ=y |
153 | CONFIG_GPIO_MAX77620=y |
154 | +CONFIG_POWER_AVS=y |
155 | +CONFIG_ROCKCHIP_IODOMAIN=y |
156 | CONFIG_POWER_RESET_MSM=y |
157 | CONFIG_BATTERY_BQ27XXX=y |
158 | CONFIG_POWER_RESET_XGENE=y |
159 | diff --git a/arch/arm64/include/asm/cmpxchg.h b/arch/arm64/include/asm/cmpxchg.h |
160 | index ae852add053d..0f2e1ab5e166 100644 |
161 | --- a/arch/arm64/include/asm/cmpxchg.h |
162 | +++ b/arch/arm64/include/asm/cmpxchg.h |
163 | @@ -229,7 +229,9 @@ static inline void __cmpwait_case_##name(volatile void *ptr, \ |
164 | unsigned long tmp; \ |
165 | \ |
166 | asm volatile( \ |
167 | - " ldxr" #sz "\t%" #w "[tmp], %[v]\n" \ |
168 | + " sevl\n" \ |
169 | + " wfe\n" \ |
170 | + " ldxr" #sz "\t%" #w "[tmp], %[v]\n" \ |
171 | " eor %" #w "[tmp], %" #w "[tmp], %" #w "[val]\n" \ |
172 | " cbnz %" #w "[tmp], 1f\n" \ |
173 | " wfe\n" \ |
174 | diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c |
175 | index 9b8b477c363d..9d07b421f090 100644 |
176 | --- a/arch/arm64/mm/init.c |
177 | +++ b/arch/arm64/mm/init.c |
178 | @@ -468,11 +468,13 @@ void __init mem_init(void) |
179 | BUILD_BUG_ON(TASK_SIZE_32 > TASK_SIZE_64); |
180 | #endif |
181 | |
182 | +#ifdef CONFIG_SPARSEMEM_VMEMMAP |
183 | /* |
184 | * Make sure we chose the upper bound of sizeof(struct page) |
185 | - * correctly. |
186 | + * correctly when sizing the VMEMMAP array. |
187 | */ |
188 | BUILD_BUG_ON(sizeof(struct page) > (1 << STRUCT_PAGE_MAX_SHIFT)); |
189 | +#endif |
190 | |
191 | if (PAGE_SIZE >= 16384 && get_num_physpages() <= 128) { |
192 | extern int sysctl_overcommit_memory; |
193 | diff --git a/arch/microblaze/boot/Makefile b/arch/microblaze/boot/Makefile |
194 | index 91d2068da1b9..0f3fe6a151dc 100644 |
195 | --- a/arch/microblaze/boot/Makefile |
196 | +++ b/arch/microblaze/boot/Makefile |
197 | @@ -21,17 +21,19 @@ $(obj)/linux.bin.gz: $(obj)/linux.bin FORCE |
198 | quiet_cmd_cp = CP $< $@$2 |
199 | cmd_cp = cat $< >$@$2 || (rm -f $@ && echo false) |
200 | |
201 | -quiet_cmd_strip = STRIP $@ |
202 | +quiet_cmd_strip = STRIP $< $@$2 |
203 | cmd_strip = $(STRIP) -K microblaze_start -K _end -K __log_buf \ |
204 | - -K _fdt_start vmlinux -o $@ |
205 | + -K _fdt_start $< -o $@$2 |
206 | |
207 | UIMAGE_LOADADDR = $(CONFIG_KERNEL_BASE_ADDR) |
208 | +UIMAGE_IN = $@ |
209 | +UIMAGE_OUT = $@.ub |
210 | |
211 | $(obj)/simpleImage.%: vmlinux FORCE |
212 | $(call if_changed,cp,.unstrip) |
213 | $(call if_changed,objcopy) |
214 | $(call if_changed,uimage) |
215 | - $(call if_changed,strip) |
216 | - @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' |
217 | + $(call if_changed,strip,.strip) |
218 | + @echo 'Kernel: $(UIMAGE_OUT) is ready' ' (#'`cat .version`')' |
219 | |
220 | clean-files += simpleImage.*.unstrip linux.bin.ub dts/*.dtb |
221 | diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c |
222 | index 27843665da9e..620e08d4eb6e 100644 |
223 | --- a/arch/powerpc/kernel/eeh_driver.c |
224 | +++ b/arch/powerpc/kernel/eeh_driver.c |
225 | @@ -450,9 +450,11 @@ static void *eeh_add_virt_device(void *data, void *userdata) |
226 | |
227 | driver = eeh_pcid_get(dev); |
228 | if (driver) { |
229 | - eeh_pcid_put(dev); |
230 | - if (driver->err_handler) |
231 | + if (driver->err_handler) { |
232 | + eeh_pcid_put(dev); |
233 | return NULL; |
234 | + } |
235 | + eeh_pcid_put(dev); |
236 | } |
237 | |
238 | #ifdef CONFIG_PPC_POWERNV |
239 | @@ -489,17 +491,19 @@ static void *eeh_rmv_device(void *data, void *userdata) |
240 | if (eeh_dev_removed(edev)) |
241 | return NULL; |
242 | |
243 | - driver = eeh_pcid_get(dev); |
244 | - if (driver) { |
245 | - eeh_pcid_put(dev); |
246 | - if (removed && |
247 | - eeh_pe_passed(edev->pe)) |
248 | - return NULL; |
249 | - if (removed && |
250 | - driver->err_handler && |
251 | - driver->err_handler->error_detected && |
252 | - driver->err_handler->slot_reset) |
253 | + if (removed) { |
254 | + if (eeh_pe_passed(edev->pe)) |
255 | return NULL; |
256 | + driver = eeh_pcid_get(dev); |
257 | + if (driver) { |
258 | + if (driver->err_handler && |
259 | + driver->err_handler->error_detected && |
260 | + driver->err_handler->slot_reset) { |
261 | + eeh_pcid_put(dev); |
262 | + return NULL; |
263 | + } |
264 | + eeh_pcid_put(dev); |
265 | + } |
266 | } |
267 | |
268 | /* Remove it from PCI subsystem */ |
269 | diff --git a/arch/powerpc/kernel/head_8xx.S b/arch/powerpc/kernel/head_8xx.S |
270 | index fb133a163263..2274be535dda 100644 |
271 | --- a/arch/powerpc/kernel/head_8xx.S |
272 | +++ b/arch/powerpc/kernel/head_8xx.S |
273 | @@ -769,7 +769,7 @@ start_here: |
274 | tovirt(r6,r6) |
275 | lis r5, abatron_pteptrs@h |
276 | ori r5, r5, abatron_pteptrs@l |
277 | - stw r5, 0xf0(r0) /* Must match your Abatron config file */ |
278 | + stw r5, 0xf0(0) /* Must match your Abatron config file */ |
279 | tophys(r5,r5) |
280 | stw r6, 0(r5) |
281 | |
282 | diff --git a/arch/powerpc/kernel/pci_32.c b/arch/powerpc/kernel/pci_32.c |
283 | index 678f87a63645..97b02b8c4f10 100644 |
284 | --- a/arch/powerpc/kernel/pci_32.c |
285 | +++ b/arch/powerpc/kernel/pci_32.c |
286 | @@ -11,6 +11,7 @@ |
287 | #include <linux/sched.h> |
288 | #include <linux/errno.h> |
289 | #include <linux/bootmem.h> |
290 | +#include <linux/syscalls.h> |
291 | #include <linux/irq.h> |
292 | #include <linux/list.h> |
293 | #include <linux/of.h> |
294 | diff --git a/arch/powerpc/mm/slb.c b/arch/powerpc/mm/slb.c |
295 | index 48fc28bab544..64c9a91773af 100644 |
296 | --- a/arch/powerpc/mm/slb.c |
297 | +++ b/arch/powerpc/mm/slb.c |
298 | @@ -68,14 +68,14 @@ static inline void slb_shadow_update(unsigned long ea, int ssize, |
299 | * updating it. No write barriers are needed here, provided |
300 | * we only update the current CPU's SLB shadow buffer. |
301 | */ |
302 | - p->save_area[index].esid = 0; |
303 | - p->save_area[index].vsid = cpu_to_be64(mk_vsid_data(ea, ssize, flags)); |
304 | - p->save_area[index].esid = cpu_to_be64(mk_esid_data(ea, ssize, index)); |
305 | + WRITE_ONCE(p->save_area[index].esid, 0); |
306 | + WRITE_ONCE(p->save_area[index].vsid, cpu_to_be64(mk_vsid_data(ea, ssize, flags))); |
307 | + WRITE_ONCE(p->save_area[index].esid, cpu_to_be64(mk_esid_data(ea, ssize, index))); |
308 | } |
309 | |
310 | static inline void slb_shadow_clear(enum slb_index index) |
311 | { |
312 | - get_slb_shadow()->save_area[index].esid = 0; |
313 | + WRITE_ONCE(get_slb_shadow()->save_area[index].esid, 0); |
314 | } |
315 | |
316 | static inline void create_shadowed_slbe(unsigned long ea, int ssize, |
317 | diff --git a/arch/powerpc/net/bpf_jit_comp64.c b/arch/powerpc/net/bpf_jit_comp64.c |
318 | index be9d968244ad..c0e817f35e69 100644 |
319 | --- a/arch/powerpc/net/bpf_jit_comp64.c |
320 | +++ b/arch/powerpc/net/bpf_jit_comp64.c |
321 | @@ -207,25 +207,37 @@ static void bpf_jit_build_epilogue(u32 *image, struct codegen_context *ctx) |
322 | |
323 | static void bpf_jit_emit_func_call(u32 *image, struct codegen_context *ctx, u64 func) |
324 | { |
325 | + unsigned int i, ctx_idx = ctx->idx; |
326 | + |
327 | + /* Load function address into r12 */ |
328 | + PPC_LI64(12, func); |
329 | + |
330 | + /* For bpf-to-bpf function calls, the callee's address is unknown |
331 | + * until the last extra pass. As seen above, we use PPC_LI64() to |
332 | + * load the callee's address, but this may optimize the number of |
333 | + * instructions required based on the nature of the address. |
334 | + * |
335 | + * Since we don't want the number of instructions emitted to change, |
336 | + * we pad the optimized PPC_LI64() call with NOPs to guarantee that |
337 | + * we always have a five-instruction sequence, which is the maximum |
338 | + * that PPC_LI64() can emit. |
339 | + */ |
340 | + for (i = ctx->idx - ctx_idx; i < 5; i++) |
341 | + PPC_NOP(); |
342 | + |
343 | #ifdef PPC64_ELF_ABI_v1 |
344 | - /* func points to the function descriptor */ |
345 | - PPC_LI64(b2p[TMP_REG_2], func); |
346 | - /* Load actual entry point from function descriptor */ |
347 | - PPC_BPF_LL(b2p[TMP_REG_1], b2p[TMP_REG_2], 0); |
348 | - /* ... and move it to LR */ |
349 | - PPC_MTLR(b2p[TMP_REG_1]); |
350 | /* |
351 | * Load TOC from function descriptor at offset 8. |
352 | * We can clobber r2 since we get called through a |
353 | * function pointer (so caller will save/restore r2) |
354 | * and since we don't use a TOC ourself. |
355 | */ |
356 | - PPC_BPF_LL(2, b2p[TMP_REG_2], 8); |
357 | -#else |
358 | - /* We can clobber r12 */ |
359 | - PPC_FUNC_ADDR(12, func); |
360 | - PPC_MTLR(12); |
361 | + PPC_BPF_LL(2, 12, 8); |
362 | + /* Load actual entry point from function descriptor */ |
363 | + PPC_BPF_LL(12, 12, 0); |
364 | #endif |
365 | + |
366 | + PPC_MTLR(12); |
367 | PPC_BLRL(); |
368 | } |
369 | |
370 | diff --git a/arch/powerpc/platforms/chrp/time.c b/arch/powerpc/platforms/chrp/time.c |
371 | index f803f4b8ab6f..8608e358217f 100644 |
372 | --- a/arch/powerpc/platforms/chrp/time.c |
373 | +++ b/arch/powerpc/platforms/chrp/time.c |
374 | @@ -27,6 +27,8 @@ |
375 | #include <asm/sections.h> |
376 | #include <asm/time.h> |
377 | |
378 | +#include <platforms/chrp/chrp.h> |
379 | + |
380 | extern spinlock_t rtc_lock; |
381 | |
382 | #define NVRAM_AS0 0x74 |
383 | @@ -62,7 +64,7 @@ long __init chrp_time_init(void) |
384 | return 0; |
385 | } |
386 | |
387 | -int chrp_cmos_clock_read(int addr) |
388 | +static int chrp_cmos_clock_read(int addr) |
389 | { |
390 | if (nvram_as1 != 0) |
391 | outb(addr>>8, nvram_as1); |
392 | @@ -70,7 +72,7 @@ int chrp_cmos_clock_read(int addr) |
393 | return (inb(nvram_data)); |
394 | } |
395 | |
396 | -void chrp_cmos_clock_write(unsigned long val, int addr) |
397 | +static void chrp_cmos_clock_write(unsigned long val, int addr) |
398 | { |
399 | if (nvram_as1 != 0) |
400 | outb(addr>>8, nvram_as1); |
401 | diff --git a/arch/powerpc/platforms/embedded6xx/hlwd-pic.c b/arch/powerpc/platforms/embedded6xx/hlwd-pic.c |
402 | index 89c54de88b7a..bf4a125faec6 100644 |
403 | --- a/arch/powerpc/platforms/embedded6xx/hlwd-pic.c |
404 | +++ b/arch/powerpc/platforms/embedded6xx/hlwd-pic.c |
405 | @@ -35,6 +35,8 @@ |
406 | */ |
407 | #define HW_BROADWAY_ICR 0x00 |
408 | #define HW_BROADWAY_IMR 0x04 |
409 | +#define HW_STARLET_ICR 0x08 |
410 | +#define HW_STARLET_IMR 0x0c |
411 | |
412 | |
413 | /* |
414 | @@ -74,6 +76,9 @@ static void hlwd_pic_unmask(struct irq_data *d) |
415 | void __iomem *io_base = irq_data_get_irq_chip_data(d); |
416 | |
417 | setbits32(io_base + HW_BROADWAY_IMR, 1 << irq); |
418 | + |
419 | + /* Make sure the ARM (aka. Starlet) doesn't handle this interrupt. */ |
420 | + clrbits32(io_base + HW_STARLET_IMR, 1 << irq); |
421 | } |
422 | |
423 | |
424 | diff --git a/arch/powerpc/platforms/powermac/bootx_init.c b/arch/powerpc/platforms/powermac/bootx_init.c |
425 | index c3c9bbb3573a..ba0964c17620 100644 |
426 | --- a/arch/powerpc/platforms/powermac/bootx_init.c |
427 | +++ b/arch/powerpc/platforms/powermac/bootx_init.c |
428 | @@ -468,7 +468,7 @@ void __init bootx_init(unsigned long r3, unsigned long r4) |
429 | boot_infos_t *bi = (boot_infos_t *) r4; |
430 | unsigned long hdr; |
431 | unsigned long space; |
432 | - unsigned long ptr, x; |
433 | + unsigned long ptr; |
434 | char *model; |
435 | unsigned long offset = reloc_offset(); |
436 | |
437 | @@ -562,6 +562,8 @@ void __init bootx_init(unsigned long r3, unsigned long r4) |
438 | * MMU switched OFF, so this should not be useful anymore. |
439 | */ |
440 | if (bi->version < 4) { |
441 | + unsigned long x __maybe_unused; |
442 | + |
443 | bootx_printf("Touching pages...\n"); |
444 | |
445 | /* |
446 | diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c |
447 | index 6b4e9d181126..4929dd4b165e 100644 |
448 | --- a/arch/powerpc/platforms/powermac/setup.c |
449 | +++ b/arch/powerpc/platforms/powermac/setup.c |
450 | @@ -352,6 +352,7 @@ static int pmac_late_init(void) |
451 | } |
452 | machine_late_initcall(powermac, pmac_late_init); |
453 | |
454 | +void note_bootable_part(dev_t dev, int part, int goodness); |
455 | /* |
456 | * This is __ref because we check for "initializing" before |
457 | * touching any of the __init sensitive things and "initializing" |
458 | diff --git a/arch/s390/include/asm/cpu_mf.h b/arch/s390/include/asm/cpu_mf.h |
459 | index 03516476127b..ee64e624c511 100644 |
460 | --- a/arch/s390/include/asm/cpu_mf.h |
461 | +++ b/arch/s390/include/asm/cpu_mf.h |
462 | @@ -113,7 +113,7 @@ struct hws_basic_entry { |
463 | |
464 | struct hws_diag_entry { |
465 | unsigned int def:16; /* 0-15 Data Entry Format */ |
466 | - unsigned int R:14; /* 16-19 and 20-30 reserved */ |
467 | + unsigned int R:15; /* 16-19 and 20-30 reserved */ |
468 | unsigned int I:1; /* 31 entry valid or invalid */ |
469 | u8 data[]; /* Machine-dependent sample data */ |
470 | } __packed; |
471 | @@ -129,7 +129,9 @@ struct hws_trailer_entry { |
472 | unsigned int f:1; /* 0 - Block Full Indicator */ |
473 | unsigned int a:1; /* 1 - Alert request control */ |
474 | unsigned int t:1; /* 2 - Timestamp format */ |
475 | - unsigned long long:61; /* 3 - 63: Reserved */ |
476 | + unsigned int :29; /* 3 - 31: Reserved */ |
477 | + unsigned int bsdes:16; /* 32-47: size of basic SDE */ |
478 | + unsigned int dsdes:16; /* 48-63: size of diagnostic SDE */ |
479 | }; |
480 | unsigned long long flags; /* 0 - 63: All indicators */ |
481 | }; |
482 | diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c |
483 | index aec6cc925af8..4f365267b12f 100644 |
484 | --- a/arch/x86/events/intel/uncore.c |
485 | +++ b/arch/x86/events/intel/uncore.c |
486 | @@ -212,7 +212,7 @@ void uncore_perf_event_update(struct intel_uncore_box *box, struct perf_event *e |
487 | u64 prev_count, new_count, delta; |
488 | int shift; |
489 | |
490 | - if (event->hw.idx >= UNCORE_PMC_IDX_FIXED) |
491 | + if (event->hw.idx == UNCORE_PMC_IDX_FIXED) |
492 | shift = 64 - uncore_fixed_ctr_bits(box); |
493 | else |
494 | shift = 64 - uncore_perf_ctr_bits(box); |
495 | diff --git a/arch/x86/events/intel/uncore_nhmex.c b/arch/x86/events/intel/uncore_nhmex.c |
496 | index cda569332005..83e2188adac4 100644 |
497 | --- a/arch/x86/events/intel/uncore_nhmex.c |
498 | +++ b/arch/x86/events/intel/uncore_nhmex.c |
499 | @@ -245,7 +245,7 @@ static void nhmex_uncore_msr_enable_event(struct intel_uncore_box *box, struct p |
500 | { |
501 | struct hw_perf_event *hwc = &event->hw; |
502 | |
503 | - if (hwc->idx >= UNCORE_PMC_IDX_FIXED) |
504 | + if (hwc->idx == UNCORE_PMC_IDX_FIXED) |
505 | wrmsrl(hwc->config_base, NHMEX_PMON_CTL_EN_BIT0); |
506 | else if (box->pmu->type->event_mask & NHMEX_PMON_CTL_EN_BIT0) |
507 | wrmsrl(hwc->config_base, hwc->config | NHMEX_PMON_CTL_EN_BIT22); |
508 | diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c |
509 | index a16c06604a56..8a4d6bc8fed0 100644 |
510 | --- a/arch/x86/kvm/mmu.c |
511 | +++ b/arch/x86/kvm/mmu.c |
512 | @@ -698,7 +698,7 @@ static int mmu_topup_memory_cache_page(struct kvm_mmu_memory_cache *cache, |
513 | if (cache->nobjs >= min) |
514 | return 0; |
515 | while (cache->nobjs < ARRAY_SIZE(cache->objects)) { |
516 | - page = (void *)__get_free_page(GFP_KERNEL); |
517 | + page = (void *)__get_free_page(GFP_KERNEL_ACCOUNT); |
518 | if (!page) |
519 | return -ENOMEM; |
520 | cache->objects[cache->nobjs++] = page; |
521 | diff --git a/crypto/authenc.c b/crypto/authenc.c |
522 | index a7e1ac786c5d..c3180eb6d1ee 100644 |
523 | --- a/crypto/authenc.c |
524 | +++ b/crypto/authenc.c |
525 | @@ -108,6 +108,7 @@ static int crypto_authenc_setkey(struct crypto_aead *authenc, const u8 *key, |
526 | CRYPTO_TFM_RES_MASK); |
527 | |
528 | out: |
529 | + memzero_explicit(&keys, sizeof(keys)); |
530 | return err; |
531 | |
532 | badkey: |
533 | diff --git a/crypto/authencesn.c b/crypto/authencesn.c |
534 | index 18c94e1c31d1..49e7e85a23d5 100644 |
535 | --- a/crypto/authencesn.c |
536 | +++ b/crypto/authencesn.c |
537 | @@ -90,6 +90,7 @@ static int crypto_authenc_esn_setkey(struct crypto_aead *authenc_esn, const u8 * |
538 | CRYPTO_TFM_RES_MASK); |
539 | |
540 | out: |
541 | + memzero_explicit(&keys, sizeof(keys)); |
542 | return err; |
543 | |
544 | badkey: |
545 | diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c |
546 | index bf601d4df8cf..b66815f35be6 100644 |
547 | --- a/drivers/acpi/pci_root.c |
548 | +++ b/drivers/acpi/pci_root.c |
549 | @@ -472,9 +472,11 @@ static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm) |
550 | } |
551 | |
552 | control = OSC_PCI_EXPRESS_CAPABILITY_CONTROL |
553 | - | OSC_PCI_EXPRESS_NATIVE_HP_CONTROL |
554 | | OSC_PCI_EXPRESS_PME_CONTROL; |
555 | |
556 | + if (IS_ENABLED(CONFIG_HOTPLUG_PCI_PCIE)) |
557 | + control |= OSC_PCI_EXPRESS_NATIVE_HP_CONTROL; |
558 | + |
559 | if (pci_aer_available()) { |
560 | if (aer_acpi_firmware_first()) |
561 | dev_info(&device->dev, |
562 | diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c |
563 | index 6475a1343483..90c38778bc1f 100644 |
564 | --- a/drivers/ata/libata-eh.c |
565 | +++ b/drivers/ata/libata-eh.c |
566 | @@ -2282,12 +2282,16 @@ static void ata_eh_link_autopsy(struct ata_link *link) |
567 | if (qc->err_mask & ~AC_ERR_OTHER) |
568 | qc->err_mask &= ~AC_ERR_OTHER; |
569 | |
570 | - /* SENSE_VALID trumps dev/unknown error and revalidation */ |
571 | + /* |
572 | + * SENSE_VALID trumps dev/unknown error and revalidation. Upper |
573 | + * layers will determine whether the command is worth retrying |
574 | + * based on the sense data and device class/type. Otherwise, |
575 | + * determine directly if the command is worth retrying using its |
576 | + * error mask and flags. |
577 | + */ |
578 | if (qc->flags & ATA_QCFLAG_SENSE_VALID) |
579 | qc->err_mask &= ~(AC_ERR_DEV | AC_ERR_OTHER); |
580 | - |
581 | - /* determine whether the command is worth retrying */ |
582 | - if (ata_eh_worth_retry(qc)) |
583 | + else if (ata_eh_worth_retry(qc)) |
584 | qc->flags |= ATA_QCFLAG_RETRY; |
585 | |
586 | /* accumulate error info */ |
587 | diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c |
588 | index bff67c5a5fe7..44bccb1afa06 100644 |
589 | --- a/drivers/bluetooth/btusb.c |
590 | +++ b/drivers/bluetooth/btusb.c |
591 | @@ -348,6 +348,9 @@ static const struct usb_device_id blacklist_table[] = { |
592 | /* Additional Realtek 8723BU Bluetooth devices */ |
593 | { USB_DEVICE(0x7392, 0xa611), .driver_info = BTUSB_REALTEK }, |
594 | |
595 | + /* Additional Realtek 8723DE Bluetooth devices */ |
596 | + { USB_DEVICE(0x2ff8, 0xb011), .driver_info = BTUSB_REALTEK }, |
597 | + |
598 | /* Additional Realtek 8821AE Bluetooth devices */ |
599 | { USB_DEVICE(0x0b05, 0x17dc), .driver_info = BTUSB_REALTEK }, |
600 | { USB_DEVICE(0x13d3, 0x3414), .driver_info = BTUSB_REALTEK }, |
601 | diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c |
602 | index 3a8b9aef96a6..0986c324459f 100644 |
603 | --- a/drivers/bluetooth/hci_qca.c |
604 | +++ b/drivers/bluetooth/hci_qca.c |
605 | @@ -884,7 +884,7 @@ static int qca_set_baudrate(struct hci_dev *hdev, uint8_t baudrate) |
606 | */ |
607 | set_current_state(TASK_UNINTERRUPTIBLE); |
608 | schedule_timeout(msecs_to_jiffies(BAUDRATE_SETTLE_TIMEOUT_MS)); |
609 | - set_current_state(TASK_INTERRUPTIBLE); |
610 | + set_current_state(TASK_RUNNING); |
611 | |
612 | return 0; |
613 | } |
614 | diff --git a/drivers/bus/arm-ccn.c b/drivers/bus/arm-ccn.c |
615 | index 45d7ecc66b22..4e9e9e618c9f 100644 |
616 | --- a/drivers/bus/arm-ccn.c |
617 | +++ b/drivers/bus/arm-ccn.c |
618 | @@ -736,7 +736,7 @@ static int arm_ccn_pmu_event_init(struct perf_event *event) |
619 | ccn = pmu_to_arm_ccn(event->pmu); |
620 | |
621 | if (hw->sample_period) { |
622 | - dev_warn(ccn->dev, "Sampling not supported!\n"); |
623 | + dev_dbg(ccn->dev, "Sampling not supported!\n"); |
624 | return -EOPNOTSUPP; |
625 | } |
626 | |
627 | @@ -744,12 +744,12 @@ static int arm_ccn_pmu_event_init(struct perf_event *event) |
628 | event->attr.exclude_kernel || event->attr.exclude_hv || |
629 | event->attr.exclude_idle || event->attr.exclude_host || |
630 | event->attr.exclude_guest) { |
631 | - dev_warn(ccn->dev, "Can't exclude execution levels!\n"); |
632 | + dev_dbg(ccn->dev, "Can't exclude execution levels!\n"); |
633 | return -EINVAL; |
634 | } |
635 | |
636 | if (event->cpu < 0) { |
637 | - dev_warn(ccn->dev, "Can't provide per-task data!\n"); |
638 | + dev_dbg(ccn->dev, "Can't provide per-task data!\n"); |
639 | return -EOPNOTSUPP; |
640 | } |
641 | /* |
642 | @@ -771,13 +771,13 @@ static int arm_ccn_pmu_event_init(struct perf_event *event) |
643 | switch (type) { |
644 | case CCN_TYPE_MN: |
645 | if (node_xp != ccn->mn_id) { |
646 | - dev_warn(ccn->dev, "Invalid MN ID %d!\n", node_xp); |
647 | + dev_dbg(ccn->dev, "Invalid MN ID %d!\n", node_xp); |
648 | return -EINVAL; |
649 | } |
650 | break; |
651 | case CCN_TYPE_XP: |
652 | if (node_xp >= ccn->num_xps) { |
653 | - dev_warn(ccn->dev, "Invalid XP ID %d!\n", node_xp); |
654 | + dev_dbg(ccn->dev, "Invalid XP ID %d!\n", node_xp); |
655 | return -EINVAL; |
656 | } |
657 | break; |
658 | @@ -785,11 +785,11 @@ static int arm_ccn_pmu_event_init(struct perf_event *event) |
659 | break; |
660 | default: |
661 | if (node_xp >= ccn->num_nodes) { |
662 | - dev_warn(ccn->dev, "Invalid node ID %d!\n", node_xp); |
663 | + dev_dbg(ccn->dev, "Invalid node ID %d!\n", node_xp); |
664 | return -EINVAL; |
665 | } |
666 | if (!arm_ccn_pmu_type_eq(type, ccn->node[node_xp].type)) { |
667 | - dev_warn(ccn->dev, "Invalid type 0x%x for node %d!\n", |
668 | + dev_dbg(ccn->dev, "Invalid type 0x%x for node %d!\n", |
669 | type, node_xp); |
670 | return -EINVAL; |
671 | } |
672 | @@ -808,19 +808,19 @@ static int arm_ccn_pmu_event_init(struct perf_event *event) |
673 | if (event_id != e->event) |
674 | continue; |
675 | if (e->num_ports && port >= e->num_ports) { |
676 | - dev_warn(ccn->dev, "Invalid port %d for node/XP %d!\n", |
677 | + dev_dbg(ccn->dev, "Invalid port %d for node/XP %d!\n", |
678 | port, node_xp); |
679 | return -EINVAL; |
680 | } |
681 | if (e->num_vcs && vc >= e->num_vcs) { |
682 | - dev_warn(ccn->dev, "Invalid vc %d for node/XP %d!\n", |
683 | + dev_dbg(ccn->dev, "Invalid vc %d for node/XP %d!\n", |
684 | vc, node_xp); |
685 | return -EINVAL; |
686 | } |
687 | valid = 1; |
688 | } |
689 | if (!valid) { |
690 | - dev_warn(ccn->dev, "Invalid event 0x%x for node/XP %d!\n", |
691 | + dev_dbg(ccn->dev, "Invalid event 0x%x for node/XP %d!\n", |
692 | event_id, node_xp); |
693 | return -EINVAL; |
694 | } |
695 | diff --git a/drivers/char/random.c b/drivers/char/random.c |
696 | index ddeac4eefd0a..81b65d0e7563 100644 |
697 | --- a/drivers/char/random.c |
698 | +++ b/drivers/char/random.c |
699 | @@ -1826,14 +1826,22 @@ static int |
700 | write_pool(struct entropy_store *r, const char __user *buffer, size_t count) |
701 | { |
702 | size_t bytes; |
703 | - __u32 buf[16]; |
704 | + __u32 t, buf[16]; |
705 | const char __user *p = buffer; |
706 | |
707 | while (count > 0) { |
708 | + int b, i = 0; |
709 | + |
710 | bytes = min(count, sizeof(buf)); |
711 | if (copy_from_user(&buf, p, bytes)) |
712 | return -EFAULT; |
713 | |
714 | + for (b = bytes ; b > 0 ; b -= sizeof(__u32), i++) { |
715 | + if (!arch_get_random_int(&t)) |
716 | + break; |
717 | + buf[i] ^= t; |
718 | + } |
719 | + |
720 | count -= bytes; |
721 | p += bytes; |
722 | |
723 | diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c |
724 | index 61262a7a5c3a..b0bd0f64d8f2 100644 |
725 | --- a/drivers/edac/altera_edac.c |
726 | +++ b/drivers/edac/altera_edac.c |
727 | @@ -1111,7 +1111,7 @@ static void *ocram_alloc_mem(size_t size, void **other) |
728 | |
729 | static void ocram_free_mem(void *p, size_t size, void *other) |
730 | { |
731 | - gen_pool_free((struct gen_pool *)other, (u32)p, size); |
732 | + gen_pool_free((struct gen_pool *)other, (unsigned long)p, size); |
733 | } |
734 | |
735 | static const struct edac_device_prv_data ocramecc_data = { |
736 | diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c |
737 | index 34adde169a78..dd6fff1c98d6 100644 |
738 | --- a/drivers/gpu/drm/drm_atomic.c |
739 | +++ b/drivers/gpu/drm/drm_atomic.c |
740 | @@ -1091,7 +1091,9 @@ drm_atomic_set_crtc_for_plane(struct drm_plane_state *plane_state, |
741 | { |
742 | struct drm_plane *plane = plane_state->plane; |
743 | struct drm_crtc_state *crtc_state; |
744 | - |
745 | + /* Nothing to do for same crtc*/ |
746 | + if (plane_state->crtc == crtc) |
747 | + return 0; |
748 | if (plane_state->crtc) { |
749 | crtc_state = drm_atomic_get_crtc_state(plane_state->state, |
750 | plane_state->crtc); |
751 | diff --git a/drivers/gpu/drm/gma500/psb_intel_drv.h b/drivers/gpu/drm/gma500/psb_intel_drv.h |
752 | index 2a3b7c684db2..fbd3fa340c4f 100644 |
753 | --- a/drivers/gpu/drm/gma500/psb_intel_drv.h |
754 | +++ b/drivers/gpu/drm/gma500/psb_intel_drv.h |
755 | @@ -255,7 +255,7 @@ extern int intelfb_remove(struct drm_device *dev, |
756 | extern bool psb_intel_lvds_mode_fixup(struct drm_encoder *encoder, |
757 | const struct drm_display_mode *mode, |
758 | struct drm_display_mode *adjusted_mode); |
759 | -extern int psb_intel_lvds_mode_valid(struct drm_connector *connector, |
760 | +extern enum drm_mode_status psb_intel_lvds_mode_valid(struct drm_connector *connector, |
761 | struct drm_display_mode *mode); |
762 | extern int psb_intel_lvds_set_property(struct drm_connector *connector, |
763 | struct drm_property *property, |
764 | diff --git a/drivers/gpu/drm/gma500/psb_intel_lvds.c b/drivers/gpu/drm/gma500/psb_intel_lvds.c |
765 | index 79e9d3690667..e2c6ba3eded4 100644 |
766 | --- a/drivers/gpu/drm/gma500/psb_intel_lvds.c |
767 | +++ b/drivers/gpu/drm/gma500/psb_intel_lvds.c |
768 | @@ -343,7 +343,7 @@ static void psb_intel_lvds_restore(struct drm_connector *connector) |
769 | } |
770 | } |
771 | |
772 | -int psb_intel_lvds_mode_valid(struct drm_connector *connector, |
773 | +enum drm_mode_status psb_intel_lvds_mode_valid(struct drm_connector *connector, |
774 | struct drm_display_mode *mode) |
775 | { |
776 | struct drm_psb_private *dev_priv = connector->dev->dev_private; |
777 | diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c |
778 | index f416f5c2e8e9..c5e1aa5f1d8e 100644 |
779 | --- a/drivers/gpu/drm/radeon/radeon_connectors.c |
780 | +++ b/drivers/gpu/drm/radeon/radeon_connectors.c |
781 | @@ -850,7 +850,7 @@ static int radeon_lvds_get_modes(struct drm_connector *connector) |
782 | return ret; |
783 | } |
784 | |
785 | -static int radeon_lvds_mode_valid(struct drm_connector *connector, |
786 | +static enum drm_mode_status radeon_lvds_mode_valid(struct drm_connector *connector, |
787 | struct drm_display_mode *mode) |
788 | { |
789 | struct drm_encoder *encoder = radeon_best_single_encoder(connector); |
790 | @@ -1010,7 +1010,7 @@ static int radeon_vga_get_modes(struct drm_connector *connector) |
791 | return ret; |
792 | } |
793 | |
794 | -static int radeon_vga_mode_valid(struct drm_connector *connector, |
795 | +static enum drm_mode_status radeon_vga_mode_valid(struct drm_connector *connector, |
796 | struct drm_display_mode *mode) |
797 | { |
798 | struct drm_device *dev = connector->dev; |
799 | @@ -1154,7 +1154,7 @@ static int radeon_tv_get_modes(struct drm_connector *connector) |
800 | return 1; |
801 | } |
802 | |
803 | -static int radeon_tv_mode_valid(struct drm_connector *connector, |
804 | +static enum drm_mode_status radeon_tv_mode_valid(struct drm_connector *connector, |
805 | struct drm_display_mode *mode) |
806 | { |
807 | if ((mode->hdisplay > 1024) || (mode->vdisplay > 768)) |
808 | @@ -1496,7 +1496,7 @@ static void radeon_dvi_force(struct drm_connector *connector) |
809 | radeon_connector->use_digital = true; |
810 | } |
811 | |
812 | -static int radeon_dvi_mode_valid(struct drm_connector *connector, |
813 | +static enum drm_mode_status radeon_dvi_mode_valid(struct drm_connector *connector, |
814 | struct drm_display_mode *mode) |
815 | { |
816 | struct drm_device *dev = connector->dev; |
817 | @@ -1798,7 +1798,7 @@ out: |
818 | return ret; |
819 | } |
820 | |
821 | -static int radeon_dp_mode_valid(struct drm_connector *connector, |
822 | +static enum drm_mode_status radeon_dp_mode_valid(struct drm_connector *connector, |
823 | struct drm_display_mode *mode) |
824 | { |
825 | struct drm_device *dev = connector->dev; |
826 | diff --git a/drivers/hid/hid-plantronics.c b/drivers/hid/hid-plantronics.c |
827 | index febb21ee190e..584b10d3fc3d 100644 |
828 | --- a/drivers/hid/hid-plantronics.c |
829 | +++ b/drivers/hid/hid-plantronics.c |
830 | @@ -2,7 +2,7 @@ |
831 | * Plantronics USB HID Driver |
832 | * |
833 | * Copyright (c) 2014 JD Cole <jd.cole@plantronics.com> |
834 | - * Copyright (c) 2015 Terry Junge <terry.junge@plantronics.com> |
835 | + * Copyright (c) 2015-2018 Terry Junge <terry.junge@plantronics.com> |
836 | */ |
837 | |
838 | /* |
839 | @@ -48,6 +48,10 @@ static int plantronics_input_mapping(struct hid_device *hdev, |
840 | unsigned short mapped_key; |
841 | unsigned long plt_type = (unsigned long)hid_get_drvdata(hdev); |
842 | |
843 | + /* special case for PTT products */ |
844 | + if (field->application == HID_GD_JOYSTICK) |
845 | + goto defaulted; |
846 | + |
847 | /* handle volume up/down mapping */ |
848 | /* non-standard types or multi-HID interfaces - plt_type is PID */ |
849 | if (!(plt_type & HID_USAGE_PAGE)) { |
850 | diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c |
851 | index 00bce002b357..ce2b80009c19 100644 |
852 | --- a/drivers/hid/i2c-hid/i2c-hid.c |
853 | +++ b/drivers/hid/i2c-hid/i2c-hid.c |
854 | @@ -1101,6 +1101,14 @@ static int i2c_hid_probe(struct i2c_client *client, |
855 | pm_runtime_enable(&client->dev); |
856 | device_enable_async_suspend(&client->dev); |
857 | |
858 | + /* Make sure there is something at this address */ |
859 | + ret = i2c_smbus_read_byte(client); |
860 | + if (ret < 0) { |
861 | + dev_dbg(&client->dev, "nothing at this address: %d\n", ret); |
862 | + ret = -ENXIO; |
863 | + goto err_pm; |
864 | + } |
865 | + |
866 | ret = i2c_hid_fetch_hid_descriptor(ihid); |
867 | if (ret < 0) |
868 | goto err_pm; |
869 | diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c |
870 | index 2395fe2021c9..3e2ab04201e2 100644 |
871 | --- a/drivers/infiniband/core/mad.c |
872 | +++ b/drivers/infiniband/core/mad.c |
873 | @@ -1549,7 +1549,8 @@ static int add_oui_reg_req(struct ib_mad_reg_req *mad_reg_req, |
874 | mad_reg_req->oui, 3)) { |
875 | method = &(*vendor_table)->vendor_class[ |
876 | vclass]->method_table[i]; |
877 | - BUG_ON(!*method); |
878 | + if (!*method) |
879 | + goto error3; |
880 | goto check_in_use; |
881 | } |
882 | } |
883 | @@ -1559,10 +1560,12 @@ static int add_oui_reg_req(struct ib_mad_reg_req *mad_reg_req, |
884 | vclass]->oui[i])) { |
885 | method = &(*vendor_table)->vendor_class[ |
886 | vclass]->method_table[i]; |
887 | - BUG_ON(*method); |
888 | /* Allocate method table for this OUI */ |
889 | - if ((ret = allocate_method_table(method))) |
890 | - goto error3; |
891 | + if (!*method) { |
892 | + ret = allocate_method_table(method); |
893 | + if (ret) |
894 | + goto error3; |
895 | + } |
896 | memcpy((*vendor_table)->vendor_class[vclass]->oui[i], |
897 | mad_reg_req->oui, 3); |
898 | goto check_in_use; |
899 | diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c |
900 | index a036d7087ddf..3bef6d4ffe6f 100644 |
901 | --- a/drivers/infiniband/core/ucma.c |
902 | +++ b/drivers/infiniband/core/ucma.c |
903 | @@ -218,7 +218,7 @@ static struct ucma_multicast* ucma_alloc_multicast(struct ucma_context *ctx) |
904 | return NULL; |
905 | |
906 | mutex_lock(&mut); |
907 | - mc->id = idr_alloc(&multicast_idr, mc, 0, 0, GFP_KERNEL); |
908 | + mc->id = idr_alloc(&multicast_idr, NULL, 0, 0, GFP_KERNEL); |
909 | mutex_unlock(&mut); |
910 | if (mc->id < 0) |
911 | goto error; |
912 | @@ -1385,6 +1385,10 @@ static ssize_t ucma_process_join(struct ucma_file *file, |
913 | goto err3; |
914 | } |
915 | |
916 | + mutex_lock(&mut); |
917 | + idr_replace(&multicast_idr, mc, mc->id); |
918 | + mutex_unlock(&mut); |
919 | + |
920 | mutex_unlock(&file->mut); |
921 | ucma_put_ctx(ctx); |
922 | return 0; |
923 | diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c |
924 | index 4b717cf50d27..6f875bf9cc9d 100644 |
925 | --- a/drivers/infiniband/core/uverbs_cmd.c |
926 | +++ b/drivers/infiniband/core/uverbs_cmd.c |
927 | @@ -3725,6 +3725,11 @@ int ib_uverbs_ex_create_flow(struct ib_uverbs_file *file, |
928 | goto err_uobj; |
929 | } |
930 | |
931 | + if (qp->qp_type != IB_QPT_UD && qp->qp_type != IB_QPT_RAW_PACKET) { |
932 | + err = -EINVAL; |
933 | + goto err_put; |
934 | + } |
935 | + |
936 | flow_attr = kzalloc(sizeof(*flow_attr) + cmd.flow_attr.num_of_specs * |
937 | sizeof(union ib_flow_spec), GFP_KERNEL); |
938 | if (!flow_attr) { |
939 | diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c |
940 | index 97f6e05cffce..a716482774db 100644 |
941 | --- a/drivers/input/mouse/elan_i2c_core.c |
942 | +++ b/drivers/input/mouse/elan_i2c_core.c |
943 | @@ -1251,6 +1251,8 @@ static const struct acpi_device_id elan_acpi_id[] = { |
944 | { "ELAN0611", 0 }, |
945 | { "ELAN0612", 0 }, |
946 | { "ELAN0618", 0 }, |
947 | + { "ELAN061D", 0 }, |
948 | + { "ELAN0622", 0 }, |
949 | { "ELAN1000", 0 }, |
950 | { } |
951 | }; |
952 | diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h |
953 | index e484ea2dc787..34be09651ee8 100644 |
954 | --- a/drivers/input/serio/i8042-x86ia64io.h |
955 | +++ b/drivers/input/serio/i8042-x86ia64io.h |
956 | @@ -527,6 +527,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { |
957 | DMI_MATCH(DMI_PRODUCT_NAME, "N24_25BU"), |
958 | }, |
959 | }, |
960 | + { |
961 | + /* Lenovo LaVie Z */ |
962 | + .matches = { |
963 | + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), |
964 | + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo LaVie Z"), |
965 | + }, |
966 | + }, |
967 | { } |
968 | }; |
969 | |
970 | diff --git a/drivers/md/md.c b/drivers/md/md.c |
971 | index 3bb985679f34..a7a0e3acdb2f 100644 |
972 | --- a/drivers/md/md.c |
973 | +++ b/drivers/md/md.c |
974 | @@ -6192,6 +6192,9 @@ static int hot_remove_disk(struct mddev *mddev, dev_t dev) |
975 | char b[BDEVNAME_SIZE]; |
976 | struct md_rdev *rdev; |
977 | |
978 | + if (!mddev->pers) |
979 | + return -ENODEV; |
980 | + |
981 | rdev = find_rdev(mddev, dev); |
982 | if (!rdev) |
983 | return -ENXIO; |
984 | diff --git a/drivers/media/common/siano/smsendian.c b/drivers/media/common/siano/smsendian.c |
985 | index bfe831c10b1c..b95a631f23f9 100644 |
986 | --- a/drivers/media/common/siano/smsendian.c |
987 | +++ b/drivers/media/common/siano/smsendian.c |
988 | @@ -35,7 +35,7 @@ void smsendian_handle_tx_message(void *buffer) |
989 | switch (msg->x_msg_header.msg_type) { |
990 | case MSG_SMS_DATA_DOWNLOAD_REQ: |
991 | { |
992 | - msg->msg_data[0] = le32_to_cpu(msg->msg_data[0]); |
993 | + msg->msg_data[0] = le32_to_cpu((__force __le32)(msg->msg_data[0])); |
994 | break; |
995 | } |
996 | |
997 | @@ -44,7 +44,7 @@ void smsendian_handle_tx_message(void *buffer) |
998 | sizeof(struct sms_msg_hdr))/4; |
999 | |
1000 | for (i = 0; i < msg_words; i++) |
1001 | - msg->msg_data[i] = le32_to_cpu(msg->msg_data[i]); |
1002 | + msg->msg_data[i] = le32_to_cpu((__force __le32)msg->msg_data[i]); |
1003 | |
1004 | break; |
1005 | } |
1006 | @@ -64,7 +64,7 @@ void smsendian_handle_rx_message(void *buffer) |
1007 | { |
1008 | struct sms_version_res *ver = |
1009 | (struct sms_version_res *) msg; |
1010 | - ver->chip_model = le16_to_cpu(ver->chip_model); |
1011 | + ver->chip_model = le16_to_cpu((__force __le16)ver->chip_model); |
1012 | break; |
1013 | } |
1014 | |
1015 | @@ -81,7 +81,7 @@ void smsendian_handle_rx_message(void *buffer) |
1016 | sizeof(struct sms_msg_hdr))/4; |
1017 | |
1018 | for (i = 0; i < msg_words; i++) |
1019 | - msg->msg_data[i] = le32_to_cpu(msg->msg_data[i]); |
1020 | + msg->msg_data[i] = le32_to_cpu((__force __le32)msg->msg_data[i]); |
1021 | |
1022 | break; |
1023 | } |
1024 | @@ -95,9 +95,9 @@ void smsendian_handle_message_header(void *msg) |
1025 | #ifdef __BIG_ENDIAN |
1026 | struct sms_msg_hdr *phdr = (struct sms_msg_hdr *)msg; |
1027 | |
1028 | - phdr->msg_type = le16_to_cpu(phdr->msg_type); |
1029 | - phdr->msg_length = le16_to_cpu(phdr->msg_length); |
1030 | - phdr->msg_flags = le16_to_cpu(phdr->msg_flags); |
1031 | + phdr->msg_type = le16_to_cpu((__force __le16)phdr->msg_type); |
1032 | + phdr->msg_length = le16_to_cpu((__force __le16)phdr->msg_length); |
1033 | + phdr->msg_flags = le16_to_cpu((__force __le16)phdr->msg_flags); |
1034 | #endif /* __BIG_ENDIAN */ |
1035 | } |
1036 | EXPORT_SYMBOL_GPL(smsendian_handle_message_header); |
1037 | diff --git a/drivers/media/i2c/smiapp/smiapp-core.c b/drivers/media/i2c/smiapp/smiapp-core.c |
1038 | index 44f8c7e10a35..8ffa13f39a86 100644 |
1039 | --- a/drivers/media/i2c/smiapp/smiapp-core.c |
1040 | +++ b/drivers/media/i2c/smiapp/smiapp-core.c |
1041 | @@ -991,7 +991,7 @@ static int smiapp_read_nvm(struct smiapp_sensor *sensor, |
1042 | if (rval) |
1043 | goto out; |
1044 | |
1045 | - for (i = 0; i < 1000; i++) { |
1046 | + for (i = 1000; i > 0; i--) { |
1047 | rval = smiapp_read( |
1048 | sensor, |
1049 | SMIAPP_REG_U8_DATA_TRANSFER_IF_1_STATUS, &s); |
1050 | @@ -1002,11 +1002,10 @@ static int smiapp_read_nvm(struct smiapp_sensor *sensor, |
1051 | if (s & SMIAPP_DATA_TRANSFER_IF_1_STATUS_RD_READY) |
1052 | break; |
1053 | |
1054 | - if (--i == 0) { |
1055 | - rval = -ETIMEDOUT; |
1056 | - goto out; |
1057 | - } |
1058 | - |
1059 | + } |
1060 | + if (!i) { |
1061 | + rval = -ETIMEDOUT; |
1062 | + goto out; |
1063 | } |
1064 | |
1065 | for (i = 0; i < SMIAPP_NVM_PAGE_SIZE; i++) { |
1066 | diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c |
1067 | index 4462d8c69d57..6f46c59415fe 100644 |
1068 | --- a/drivers/media/media-device.c |
1069 | +++ b/drivers/media/media-device.c |
1070 | @@ -58,9 +58,10 @@ static int media_device_close(struct file *filp) |
1071 | return 0; |
1072 | } |
1073 | |
1074 | -static int media_device_get_info(struct media_device *dev, |
1075 | - struct media_device_info *info) |
1076 | +static long media_device_get_info(struct media_device *dev, void *arg) |
1077 | { |
1078 | + struct media_device_info *info = arg; |
1079 | + |
1080 | memset(info, 0, sizeof(*info)); |
1081 | |
1082 | if (dev->driver_name[0]) |
1083 | @@ -97,9 +98,9 @@ static struct media_entity *find_entity(struct media_device *mdev, u32 id) |
1084 | return NULL; |
1085 | } |
1086 | |
1087 | -static long media_device_enum_entities(struct media_device *mdev, |
1088 | - struct media_entity_desc *entd) |
1089 | +static long media_device_enum_entities(struct media_device *mdev, void *arg) |
1090 | { |
1091 | + struct media_entity_desc *entd = arg; |
1092 | struct media_entity *ent; |
1093 | |
1094 | ent = find_entity(mdev, entd->id); |
1095 | @@ -150,9 +151,9 @@ static void media_device_kpad_to_upad(const struct media_pad *kpad, |
1096 | upad->flags = kpad->flags; |
1097 | } |
1098 | |
1099 | -static long media_device_enum_links(struct media_device *mdev, |
1100 | - struct media_links_enum *links) |
1101 | +static long media_device_enum_links(struct media_device *mdev, void *arg) |
1102 | { |
1103 | + struct media_links_enum *links = arg; |
1104 | struct media_entity *entity; |
1105 | |
1106 | entity = find_entity(mdev, links->entity); |
1107 | @@ -198,9 +199,9 @@ static long media_device_enum_links(struct media_device *mdev, |
1108 | return 0; |
1109 | } |
1110 | |
1111 | -static long media_device_setup_link(struct media_device *mdev, |
1112 | - struct media_link_desc *linkd) |
1113 | +static long media_device_setup_link(struct media_device *mdev, void *arg) |
1114 | { |
1115 | + struct media_link_desc *linkd = arg; |
1116 | struct media_link *link = NULL; |
1117 | struct media_entity *source; |
1118 | struct media_entity *sink; |
1119 | @@ -226,9 +227,9 @@ static long media_device_setup_link(struct media_device *mdev, |
1120 | return __media_entity_setup_link(link, linkd->flags); |
1121 | } |
1122 | |
1123 | -static long media_device_get_topology(struct media_device *mdev, |
1124 | - struct media_v2_topology *topo) |
1125 | +static long media_device_get_topology(struct media_device *mdev, void *arg) |
1126 | { |
1127 | + struct media_v2_topology *topo = arg; |
1128 | struct media_entity *entity; |
1129 | struct media_interface *intf; |
1130 | struct media_pad *pad; |
1131 | diff --git a/drivers/media/pci/saa7164/saa7164-fw.c b/drivers/media/pci/saa7164/saa7164-fw.c |
1132 | index 269e0782c7b6..93d53195e8ca 100644 |
1133 | --- a/drivers/media/pci/saa7164/saa7164-fw.c |
1134 | +++ b/drivers/media/pci/saa7164/saa7164-fw.c |
1135 | @@ -430,7 +430,8 @@ int saa7164_downloadfirmware(struct saa7164_dev *dev) |
1136 | __func__, fw->size); |
1137 | |
1138 | if (fw->size != fwlength) { |
1139 | - printk(KERN_ERR "xc5000: firmware incorrect size\n"); |
1140 | + printk(KERN_ERR "saa7164: firmware incorrect size %zu != %u\n", |
1141 | + fw->size, fwlength); |
1142 | ret = -ENOMEM; |
1143 | goto out; |
1144 | } |
1145 | diff --git a/drivers/media/pci/tw686x/tw686x-video.c b/drivers/media/pci/tw686x/tw686x-video.c |
1146 | index c3fafa97b2d0..0ea8dd44026c 100644 |
1147 | --- a/drivers/media/pci/tw686x/tw686x-video.c |
1148 | +++ b/drivers/media/pci/tw686x/tw686x-video.c |
1149 | @@ -1228,7 +1228,8 @@ int tw686x_video_init(struct tw686x_dev *dev) |
1150 | vc->vidq.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; |
1151 | vc->vidq.min_buffers_needed = 2; |
1152 | vc->vidq.lock = &vc->vb_mutex; |
1153 | - vc->vidq.gfp_flags = GFP_DMA32; |
1154 | + vc->vidq.gfp_flags = dev->dma_mode != TW686X_DMA_MODE_MEMCPY ? |
1155 | + GFP_DMA32 : 0; |
1156 | vc->vidq.dev = &dev->pci_dev->dev; |
1157 | |
1158 | err = vb2_queue_init(&vc->vidq); |
1159 | diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c |
1160 | index 0321d84addc7..15a86bb4e61c 100644 |
1161 | --- a/drivers/media/platform/omap3isp/isp.c |
1162 | +++ b/drivers/media/platform/omap3isp/isp.c |
1163 | @@ -1941,6 +1941,7 @@ error_csiphy: |
1164 | |
1165 | static void isp_detach_iommu(struct isp_device *isp) |
1166 | { |
1167 | + arm_iommu_detach_device(isp->dev); |
1168 | arm_iommu_release_mapping(isp->mapping); |
1169 | isp->mapping = NULL; |
1170 | iommu_group_remove_device(isp->dev); |
1171 | @@ -1974,8 +1975,7 @@ static int isp_attach_iommu(struct isp_device *isp) |
1172 | mapping = arm_iommu_create_mapping(&platform_bus_type, SZ_1G, SZ_2G); |
1173 | if (IS_ERR(mapping)) { |
1174 | dev_err(isp->dev, "failed to create ARM IOMMU mapping\n"); |
1175 | - ret = PTR_ERR(mapping); |
1176 | - goto error; |
1177 | + return PTR_ERR(mapping); |
1178 | } |
1179 | |
1180 | isp->mapping = mapping; |
1181 | @@ -1990,7 +1990,8 @@ static int isp_attach_iommu(struct isp_device *isp) |
1182 | return 0; |
1183 | |
1184 | error: |
1185 | - isp_detach_iommu(isp); |
1186 | + arm_iommu_release_mapping(isp->mapping); |
1187 | + isp->mapping = NULL; |
1188 | return ret; |
1189 | } |
1190 | |
1191 | diff --git a/drivers/media/platform/rcar_jpu.c b/drivers/media/platform/rcar_jpu.c |
1192 | index d1746ecc645d..db1110a492e0 100644 |
1193 | --- a/drivers/media/platform/rcar_jpu.c |
1194 | +++ b/drivers/media/platform/rcar_jpu.c |
1195 | @@ -1280,7 +1280,7 @@ static int jpu_open(struct file *file) |
1196 | /* ...issue software reset */ |
1197 | ret = jpu_reset(jpu); |
1198 | if (ret) |
1199 | - goto device_prepare_rollback; |
1200 | + goto jpu_reset_rollback; |
1201 | } |
1202 | |
1203 | jpu->ref_count++; |
1204 | @@ -1288,6 +1288,8 @@ static int jpu_open(struct file *file) |
1205 | mutex_unlock(&jpu->mutex); |
1206 | return 0; |
1207 | |
1208 | +jpu_reset_rollback: |
1209 | + clk_disable_unprepare(jpu->clk); |
1210 | device_prepare_rollback: |
1211 | mutex_unlock(&jpu->mutex); |
1212 | v4l_prepare_rollback: |
1213 | diff --git a/drivers/media/radio/si470x/radio-si470x-i2c.c b/drivers/media/radio/si470x/radio-si470x-i2c.c |
1214 | index ee0470a3196b..f218886c504d 100644 |
1215 | --- a/drivers/media/radio/si470x/radio-si470x-i2c.c |
1216 | +++ b/drivers/media/radio/si470x/radio-si470x-i2c.c |
1217 | @@ -96,7 +96,7 @@ MODULE_PARM_DESC(max_rds_errors, "RDS maximum block errors: *1*"); |
1218 | */ |
1219 | int si470x_get_register(struct si470x_device *radio, int regnr) |
1220 | { |
1221 | - u16 buf[READ_REG_NUM]; |
1222 | + __be16 buf[READ_REG_NUM]; |
1223 | struct i2c_msg msgs[1] = { |
1224 | { |
1225 | .addr = radio->client->addr, |
1226 | @@ -121,7 +121,7 @@ int si470x_get_register(struct si470x_device *radio, int regnr) |
1227 | int si470x_set_register(struct si470x_device *radio, int regnr) |
1228 | { |
1229 | int i; |
1230 | - u16 buf[WRITE_REG_NUM]; |
1231 | + __be16 buf[WRITE_REG_NUM]; |
1232 | struct i2c_msg msgs[1] = { |
1233 | { |
1234 | .addr = radio->client->addr, |
1235 | @@ -151,7 +151,7 @@ int si470x_set_register(struct si470x_device *radio, int regnr) |
1236 | static int si470x_get_all_registers(struct si470x_device *radio) |
1237 | { |
1238 | int i; |
1239 | - u16 buf[READ_REG_NUM]; |
1240 | + __be16 buf[READ_REG_NUM]; |
1241 | struct i2c_msg msgs[1] = { |
1242 | { |
1243 | .addr = radio->client->addr, |
1244 | diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c |
1245 | index 4299ce06c25b..b3a9fa75e8e7 100644 |
1246 | --- a/drivers/media/v4l2-core/videobuf2-core.c |
1247 | +++ b/drivers/media/v4l2-core/videobuf2-core.c |
1248 | @@ -914,9 +914,12 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state) |
1249 | dprintk(4, "done processing on buffer %d, state: %d\n", |
1250 | vb->index, state); |
1251 | |
1252 | - /* sync buffers */ |
1253 | - for (plane = 0; plane < vb->num_planes; ++plane) |
1254 | - call_void_memop(vb, finish, vb->planes[plane].mem_priv); |
1255 | + if (state != VB2_BUF_STATE_QUEUED && |
1256 | + state != VB2_BUF_STATE_REQUEUEING) { |
1257 | + /* sync buffers */ |
1258 | + for (plane = 0; plane < vb->num_planes; ++plane) |
1259 | + call_void_memop(vb, finish, vb->planes[plane].mem_priv); |
1260 | + } |
1261 | |
1262 | spin_lock_irqsave(&q->done_lock, flags); |
1263 | if (state == VB2_BUF_STATE_QUEUED || |
1264 | diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c |
1265 | index a4803ac192bb..1d49a8dd4a37 100644 |
1266 | --- a/drivers/memory/tegra/mc.c |
1267 | +++ b/drivers/memory/tegra/mc.c |
1268 | @@ -20,14 +20,6 @@ |
1269 | #include "mc.h" |
1270 | |
1271 | #define MC_INTSTATUS 0x000 |
1272 | -#define MC_INT_DECERR_MTS (1 << 16) |
1273 | -#define MC_INT_SECERR_SEC (1 << 13) |
1274 | -#define MC_INT_DECERR_VPR (1 << 12) |
1275 | -#define MC_INT_INVALID_APB_ASID_UPDATE (1 << 11) |
1276 | -#define MC_INT_INVALID_SMMU_PAGE (1 << 10) |
1277 | -#define MC_INT_ARBITRATION_EMEM (1 << 9) |
1278 | -#define MC_INT_SECURITY_VIOLATION (1 << 8) |
1279 | -#define MC_INT_DECERR_EMEM (1 << 6) |
1280 | |
1281 | #define MC_INTMASK 0x004 |
1282 | |
1283 | @@ -248,12 +240,13 @@ static const char *const error_names[8] = { |
1284 | static irqreturn_t tegra_mc_irq(int irq, void *data) |
1285 | { |
1286 | struct tegra_mc *mc = data; |
1287 | - unsigned long status, mask; |
1288 | + unsigned long status; |
1289 | unsigned int bit; |
1290 | |
1291 | /* mask all interrupts to avoid flooding */ |
1292 | - status = mc_readl(mc, MC_INTSTATUS); |
1293 | - mask = mc_readl(mc, MC_INTMASK); |
1294 | + status = mc_readl(mc, MC_INTSTATUS) & mc->soc->intmask; |
1295 | + if (!status) |
1296 | + return IRQ_NONE; |
1297 | |
1298 | for_each_set_bit(bit, &status, 32) { |
1299 | const char *error = status_names[bit] ?: "unknown"; |
1300 | @@ -346,7 +339,6 @@ static int tegra_mc_probe(struct platform_device *pdev) |
1301 | const struct of_device_id *match; |
1302 | struct resource *res; |
1303 | struct tegra_mc *mc; |
1304 | - u32 value; |
1305 | int err; |
1306 | |
1307 | match = of_match_node(tegra_mc_of_match, pdev->dev.of_node); |
1308 | @@ -414,11 +406,7 @@ static int tegra_mc_probe(struct platform_device *pdev) |
1309 | |
1310 | WARN(!mc->soc->client_id_mask, "Missing client ID mask for this SoC\n"); |
1311 | |
1312 | - value = MC_INT_DECERR_MTS | MC_INT_SECERR_SEC | MC_INT_DECERR_VPR | |
1313 | - MC_INT_INVALID_APB_ASID_UPDATE | MC_INT_INVALID_SMMU_PAGE | |
1314 | - MC_INT_SECURITY_VIOLATION | MC_INT_DECERR_EMEM; |
1315 | - |
1316 | - mc_writel(mc, value, MC_INTMASK); |
1317 | + mc_writel(mc, mc->soc->intmask, MC_INTMASK); |
1318 | |
1319 | return 0; |
1320 | } |
1321 | diff --git a/drivers/memory/tegra/mc.h b/drivers/memory/tegra/mc.h |
1322 | index ddb16676c3af..24e020b4609b 100644 |
1323 | --- a/drivers/memory/tegra/mc.h |
1324 | +++ b/drivers/memory/tegra/mc.h |
1325 | @@ -14,6 +14,15 @@ |
1326 | |
1327 | #include <soc/tegra/mc.h> |
1328 | |
1329 | +#define MC_INT_DECERR_MTS (1 << 16) |
1330 | +#define MC_INT_SECERR_SEC (1 << 13) |
1331 | +#define MC_INT_DECERR_VPR (1 << 12) |
1332 | +#define MC_INT_INVALID_APB_ASID_UPDATE (1 << 11) |
1333 | +#define MC_INT_INVALID_SMMU_PAGE (1 << 10) |
1334 | +#define MC_INT_ARBITRATION_EMEM (1 << 9) |
1335 | +#define MC_INT_SECURITY_VIOLATION (1 << 8) |
1336 | +#define MC_INT_DECERR_EMEM (1 << 6) |
1337 | + |
1338 | static inline u32 mc_readl(struct tegra_mc *mc, unsigned long offset) |
1339 | { |
1340 | return readl(mc->regs + offset); |
1341 | diff --git a/drivers/memory/tegra/tegra114.c b/drivers/memory/tegra/tegra114.c |
1342 | index ba8fff3d66a6..6d2a5a849d92 100644 |
1343 | --- a/drivers/memory/tegra/tegra114.c |
1344 | +++ b/drivers/memory/tegra/tegra114.c |
1345 | @@ -930,4 +930,6 @@ const struct tegra_mc_soc tegra114_mc_soc = { |
1346 | .atom_size = 32, |
1347 | .client_id_mask = 0x7f, |
1348 | .smmu = &tegra114_smmu_soc, |
1349 | + .intmask = MC_INT_INVALID_SMMU_PAGE | MC_INT_SECURITY_VIOLATION | |
1350 | + MC_INT_DECERR_EMEM, |
1351 | }; |
1352 | diff --git a/drivers/memory/tegra/tegra124.c b/drivers/memory/tegra/tegra124.c |
1353 | index 5a58e440f4a7..9f68a56f2727 100644 |
1354 | --- a/drivers/memory/tegra/tegra124.c |
1355 | +++ b/drivers/memory/tegra/tegra124.c |
1356 | @@ -1020,6 +1020,9 @@ const struct tegra_mc_soc tegra124_mc_soc = { |
1357 | .smmu = &tegra124_smmu_soc, |
1358 | .emem_regs = tegra124_mc_emem_regs, |
1359 | .num_emem_regs = ARRAY_SIZE(tegra124_mc_emem_regs), |
1360 | + .intmask = MC_INT_DECERR_MTS | MC_INT_SECERR_SEC | MC_INT_DECERR_VPR | |
1361 | + MC_INT_INVALID_APB_ASID_UPDATE | MC_INT_INVALID_SMMU_PAGE | |
1362 | + MC_INT_SECURITY_VIOLATION | MC_INT_DECERR_EMEM, |
1363 | }; |
1364 | #endif /* CONFIG_ARCH_TEGRA_124_SOC */ |
1365 | |
1366 | @@ -1042,5 +1045,8 @@ const struct tegra_mc_soc tegra132_mc_soc = { |
1367 | .atom_size = 32, |
1368 | .client_id_mask = 0x7f, |
1369 | .smmu = &tegra132_smmu_soc, |
1370 | + .intmask = MC_INT_DECERR_MTS | MC_INT_SECERR_SEC | MC_INT_DECERR_VPR | |
1371 | + MC_INT_INVALID_APB_ASID_UPDATE | MC_INT_INVALID_SMMU_PAGE | |
1372 | + MC_INT_SECURITY_VIOLATION | MC_INT_DECERR_EMEM, |
1373 | }; |
1374 | #endif /* CONFIG_ARCH_TEGRA_132_SOC */ |
1375 | diff --git a/drivers/memory/tegra/tegra210.c b/drivers/memory/tegra/tegra210.c |
1376 | index 5e144abe4c18..47c78a6d8f00 100644 |
1377 | --- a/drivers/memory/tegra/tegra210.c |
1378 | +++ b/drivers/memory/tegra/tegra210.c |
1379 | @@ -1077,4 +1077,7 @@ const struct tegra_mc_soc tegra210_mc_soc = { |
1380 | .atom_size = 64, |
1381 | .client_id_mask = 0xff, |
1382 | .smmu = &tegra210_smmu_soc, |
1383 | + .intmask = MC_INT_DECERR_MTS | MC_INT_SECERR_SEC | MC_INT_DECERR_VPR | |
1384 | + MC_INT_INVALID_APB_ASID_UPDATE | MC_INT_INVALID_SMMU_PAGE | |
1385 | + MC_INT_SECURITY_VIOLATION | MC_INT_DECERR_EMEM, |
1386 | }; |
1387 | diff --git a/drivers/memory/tegra/tegra30.c b/drivers/memory/tegra/tegra30.c |
1388 | index b44737840e70..d0689428ea1a 100644 |
1389 | --- a/drivers/memory/tegra/tegra30.c |
1390 | +++ b/drivers/memory/tegra/tegra30.c |
1391 | @@ -952,4 +952,6 @@ const struct tegra_mc_soc tegra30_mc_soc = { |
1392 | .atom_size = 16, |
1393 | .client_id_mask = 0x7f, |
1394 | .smmu = &tegra30_smmu_soc, |
1395 | + .intmask = MC_INT_INVALID_SMMU_PAGE | MC_INT_SECURITY_VIOLATION | |
1396 | + MC_INT_DECERR_EMEM, |
1397 | }; |
1398 | diff --git a/drivers/mfd/cros_ec.c b/drivers/mfd/cros_ec.c |
1399 | index abd83424b498..3e18d2595b6d 100644 |
1400 | --- a/drivers/mfd/cros_ec.c |
1401 | +++ b/drivers/mfd/cros_ec.c |
1402 | @@ -86,7 +86,11 @@ int cros_ec_register(struct cros_ec_device *ec_dev) |
1403 | |
1404 | mutex_init(&ec_dev->lock); |
1405 | |
1406 | - cros_ec_query_all(ec_dev); |
1407 | + err = cros_ec_query_all(ec_dev); |
1408 | + if (err) { |
1409 | + dev_err(dev, "Cannot identify the EC: error %d\n", err); |
1410 | + return err; |
1411 | + } |
1412 | |
1413 | if (ec_dev->irq) { |
1414 | err = request_threaded_irq(ec_dev->irq, NULL, ec_irq_thread, |
1415 | diff --git a/drivers/mmc/core/pwrseq_simple.c b/drivers/mmc/core/pwrseq_simple.c |
1416 | index 1304160de168..8cd9ddf1fab9 100644 |
1417 | --- a/drivers/mmc/core/pwrseq_simple.c |
1418 | +++ b/drivers/mmc/core/pwrseq_simple.c |
1419 | @@ -39,14 +39,18 @@ static void mmc_pwrseq_simple_set_gpios_value(struct mmc_pwrseq_simple *pwrseq, |
1420 | struct gpio_descs *reset_gpios = pwrseq->reset_gpios; |
1421 | |
1422 | if (!IS_ERR(reset_gpios)) { |
1423 | - int i; |
1424 | - int values[reset_gpios->ndescs]; |
1425 | + int i, *values; |
1426 | + int nvalues = reset_gpios->ndescs; |
1427 | |
1428 | - for (i = 0; i < reset_gpios->ndescs; i++) |
1429 | + values = kmalloc_array(nvalues, sizeof(int), GFP_KERNEL); |
1430 | + if (!values) |
1431 | + return; |
1432 | + |
1433 | + for (i = 0; i < nvalues; i++) |
1434 | values[i] = value; |
1435 | |
1436 | - gpiod_set_array_value_cansleep( |
1437 | - reset_gpios->ndescs, reset_gpios->desc, values); |
1438 | + gpiod_set_array_value_cansleep(nvalues, reset_gpios->desc, values); |
1439 | + kfree(values); |
1440 | } |
1441 | } |
1442 | |
1443 | diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c |
1444 | index 1a1501fde010..e10a00d0d44d 100644 |
1445 | --- a/drivers/mmc/host/dw_mmc.c |
1446 | +++ b/drivers/mmc/host/dw_mmc.c |
1447 | @@ -1164,6 +1164,8 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit) |
1448 | if (host->state == STATE_WAITING_CMD11_DONE) |
1449 | sdmmc_cmd_bits |= SDMMC_CMD_VOLT_SWITCH; |
1450 | |
1451 | + slot->mmc->actual_clock = 0; |
1452 | + |
1453 | if (!clock) { |
1454 | mci_writel(host, CLKENA, 0); |
1455 | mci_send_cmd(slot, sdmmc_cmd_bits, 0); |
1456 | @@ -1209,6 +1211,8 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit) |
1457 | |
1458 | /* keep the last clock value that was requested from core */ |
1459 | slot->__clk_old = clock; |
1460 | + slot->mmc->actual_clock = div ? ((host->bus_hz / div) >> 1) : |
1461 | + host->bus_hz; |
1462 | } |
1463 | |
1464 | host->current_speed = clock; |
1465 | diff --git a/drivers/mtd/nand/fsl_ifc_nand.c b/drivers/mtd/nand/fsl_ifc_nand.c |
1466 | index 2f6b55229d5b..4c3b986dd74d 100644 |
1467 | --- a/drivers/mtd/nand/fsl_ifc_nand.c |
1468 | +++ b/drivers/mtd/nand/fsl_ifc_nand.c |
1469 | @@ -372,9 +372,16 @@ static void fsl_ifc_cmdfunc(struct mtd_info *mtd, unsigned int command, |
1470 | |
1471 | case NAND_CMD_READID: |
1472 | case NAND_CMD_PARAM: { |
1473 | + /* |
1474 | + * For READID, read 8 bytes that are currently used. |
1475 | + * For PARAM, read all 3 copies of 256-bytes pages. |
1476 | + */ |
1477 | + int len = 8; |
1478 | int timing = IFC_FIR_OP_RB; |
1479 | - if (command == NAND_CMD_PARAM) |
1480 | + if (command == NAND_CMD_PARAM) { |
1481 | timing = IFC_FIR_OP_RBCD; |
1482 | + len = 256 * 3; |
1483 | + } |
1484 | |
1485 | ifc_out32((IFC_FIR_OP_CW0 << IFC_NAND_FIR0_OP0_SHIFT) | |
1486 | (IFC_FIR_OP_UA << IFC_NAND_FIR0_OP1_SHIFT) | |
1487 | @@ -384,12 +391,8 @@ static void fsl_ifc_cmdfunc(struct mtd_info *mtd, unsigned int command, |
1488 | &ifc->ifc_nand.nand_fcr0); |
1489 | ifc_out32(column, &ifc->ifc_nand.row3); |
1490 | |
1491 | - /* |
1492 | - * although currently it's 8 bytes for READID, we always read |
1493 | - * the maximum 256 bytes(for PARAM) |
1494 | - */ |
1495 | - ifc_out32(256, &ifc->ifc_nand.nand_fbcr); |
1496 | - ifc_nand_ctrl->read_bytes = 256; |
1497 | + ifc_out32(len, &ifc->ifc_nand.nand_fbcr); |
1498 | + ifc_nand_ctrl->read_bytes = len; |
1499 | |
1500 | set_addr(mtd, 0, 0, 0); |
1501 | fsl_ifc_run_command(mtd); |
1502 | diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c |
1503 | index b3df70d07ff6..7f64a76acd37 100644 |
1504 | --- a/drivers/net/dsa/qca8k.c |
1505 | +++ b/drivers/net/dsa/qca8k.c |
1506 | @@ -474,7 +474,7 @@ qca8k_set_pad_ctrl(struct qca8k_priv *priv, int port, int mode) |
1507 | static void |
1508 | qca8k_port_set_status(struct qca8k_priv *priv, int port, int enable) |
1509 | { |
1510 | - u32 mask = QCA8K_PORT_STATUS_TXMAC; |
1511 | + u32 mask = QCA8K_PORT_STATUS_TXMAC | QCA8K_PORT_STATUS_RXMAC; |
1512 | |
1513 | /* Port 0 and 6 have no internal PHY */ |
1514 | if ((port > 0) && (port < 6)) |
1515 | @@ -491,6 +491,7 @@ qca8k_setup(struct dsa_switch *ds) |
1516 | { |
1517 | struct qca8k_priv *priv = (struct qca8k_priv *)ds->priv; |
1518 | int ret, i, phy_mode = -1; |
1519 | + u32 mask; |
1520 | |
1521 | /* Make sure that port 0 is the cpu port */ |
1522 | if (!dsa_is_cpu_port(ds, 0)) { |
1523 | @@ -516,7 +517,10 @@ qca8k_setup(struct dsa_switch *ds) |
1524 | if (ret < 0) |
1525 | return ret; |
1526 | |
1527 | - /* Enable CPU Port */ |
1528 | + /* Enable CPU Port, force it to maximum bandwidth and full-duplex */ |
1529 | + mask = QCA8K_PORT_STATUS_SPEED_1000 | QCA8K_PORT_STATUS_TXFLOW | |
1530 | + QCA8K_PORT_STATUS_RXFLOW | QCA8K_PORT_STATUS_DUPLEX; |
1531 | + qca8k_write(priv, QCA8K_REG_PORT_STATUS(QCA8K_CPU_PORT), mask); |
1532 | qca8k_reg_set(priv, QCA8K_REG_GLOBAL_FW_CTRL0, |
1533 | QCA8K_GLOBAL_FW_CTRL0_CPU_PORT_EN); |
1534 | qca8k_port_set_status(priv, QCA8K_CPU_PORT, 1); |
1535 | @@ -585,6 +589,47 @@ qca8k_setup(struct dsa_switch *ds) |
1536 | return 0; |
1537 | } |
1538 | |
1539 | +static void |
1540 | +qca8k_adjust_link(struct dsa_switch *ds, int port, struct phy_device *phy) |
1541 | +{ |
1542 | + struct qca8k_priv *priv = ds->priv; |
1543 | + u32 reg; |
1544 | + |
1545 | + /* Force fixed-link setting for CPU port, skip others. */ |
1546 | + if (!phy_is_pseudo_fixed_link(phy)) |
1547 | + return; |
1548 | + |
1549 | + /* Set port speed */ |
1550 | + switch (phy->speed) { |
1551 | + case 10: |
1552 | + reg = QCA8K_PORT_STATUS_SPEED_10; |
1553 | + break; |
1554 | + case 100: |
1555 | + reg = QCA8K_PORT_STATUS_SPEED_100; |
1556 | + break; |
1557 | + case 1000: |
1558 | + reg = QCA8K_PORT_STATUS_SPEED_1000; |
1559 | + break; |
1560 | + default: |
1561 | + dev_dbg(priv->dev, "port%d link speed %dMbps not supported.\n", |
1562 | + port, phy->speed); |
1563 | + return; |
1564 | + } |
1565 | + |
1566 | + /* Set duplex mode */ |
1567 | + if (phy->duplex == DUPLEX_FULL) |
1568 | + reg |= QCA8K_PORT_STATUS_DUPLEX; |
1569 | + |
1570 | + /* Force flow control */ |
1571 | + if (dsa_is_cpu_port(ds, port)) |
1572 | + reg |= QCA8K_PORT_STATUS_RXFLOW | QCA8K_PORT_STATUS_TXFLOW; |
1573 | + |
1574 | + /* Force link down before changing MAC options */ |
1575 | + qca8k_port_set_status(priv, port, 0); |
1576 | + qca8k_write(priv, QCA8K_REG_PORT_STATUS(port), reg); |
1577 | + qca8k_port_set_status(priv, port, 1); |
1578 | +} |
1579 | + |
1580 | static int |
1581 | qca8k_phy_read(struct dsa_switch *ds, int phy, int regnum) |
1582 | { |
1583 | @@ -914,6 +959,7 @@ qca8k_get_tag_protocol(struct dsa_switch *ds) |
1584 | static struct dsa_switch_ops qca8k_switch_ops = { |
1585 | .get_tag_protocol = qca8k_get_tag_protocol, |
1586 | .setup = qca8k_setup, |
1587 | + .adjust_link = qca8k_adjust_link, |
1588 | .get_strings = qca8k_get_strings, |
1589 | .phy_read = qca8k_phy_read, |
1590 | .phy_write = qca8k_phy_write, |
1591 | @@ -946,6 +992,7 @@ qca8k_sw_probe(struct mdio_device *mdiodev) |
1592 | return -ENOMEM; |
1593 | |
1594 | priv->bus = mdiodev->bus; |
1595 | + priv->dev = &mdiodev->dev; |
1596 | |
1597 | /* read the switches ID register */ |
1598 | id = qca8k_read(priv, QCA8K_REG_MASK_CTRL); |
1599 | @@ -1018,6 +1065,7 @@ static SIMPLE_DEV_PM_OPS(qca8k_pm_ops, |
1600 | qca8k_suspend, qca8k_resume); |
1601 | |
1602 | static const struct of_device_id qca8k_of_match[] = { |
1603 | + { .compatible = "qca,qca8334" }, |
1604 | { .compatible = "qca,qca8337" }, |
1605 | { /* sentinel */ }, |
1606 | }; |
1607 | diff --git a/drivers/net/dsa/qca8k.h b/drivers/net/dsa/qca8k.h |
1608 | index 201464719531..9c22bc3210cd 100644 |
1609 | --- a/drivers/net/dsa/qca8k.h |
1610 | +++ b/drivers/net/dsa/qca8k.h |
1611 | @@ -51,8 +51,10 @@ |
1612 | #define QCA8K_GOL_MAC_ADDR0 0x60 |
1613 | #define QCA8K_GOL_MAC_ADDR1 0x64 |
1614 | #define QCA8K_REG_PORT_STATUS(_i) (0x07c + (_i) * 4) |
1615 | -#define QCA8K_PORT_STATUS_SPEED GENMASK(2, 0) |
1616 | -#define QCA8K_PORT_STATUS_SPEED_S 0 |
1617 | +#define QCA8K_PORT_STATUS_SPEED GENMASK(1, 0) |
1618 | +#define QCA8K_PORT_STATUS_SPEED_10 0 |
1619 | +#define QCA8K_PORT_STATUS_SPEED_100 0x1 |
1620 | +#define QCA8K_PORT_STATUS_SPEED_1000 0x2 |
1621 | #define QCA8K_PORT_STATUS_TXMAC BIT(2) |
1622 | #define QCA8K_PORT_STATUS_RXMAC BIT(3) |
1623 | #define QCA8K_PORT_STATUS_TXFLOW BIT(4) |
1624 | @@ -167,6 +169,7 @@ struct qca8k_priv { |
1625 | struct ar8xxx_port_status port_sts[QCA8K_NUM_PORTS]; |
1626 | struct dsa_switch *ds; |
1627 | struct mutex reg_mutex; |
1628 | + struct device *dev; |
1629 | }; |
1630 | |
1631 | struct qca8k_mib_desc { |
1632 | diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c |
1633 | index ca57eb56c717..8777c3a4c095 100644 |
1634 | --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c |
1635 | +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c |
1636 | @@ -5257,6 +5257,9 @@ static int bnxt_update_link(struct bnxt *bp, bool chng_link_state) |
1637 | } |
1638 | mutex_unlock(&bp->hwrm_cmd_lock); |
1639 | |
1640 | + if (!BNXT_SINGLE_PF(bp)) |
1641 | + return 0; |
1642 | + |
1643 | diff = link_info->support_auto_speeds ^ link_info->advertising; |
1644 | if ((link_info->support_auto_speeds | diff) != |
1645 | link_info->support_auto_speeds) { |
1646 | diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |
1647 | index 1499ce2bf9f6..029513294984 100644 |
1648 | --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |
1649 | +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |
1650 | @@ -3729,6 +3729,7 @@ static int ixgbevf_set_mac(struct net_device *netdev, void *p) |
1651 | return -EPERM; |
1652 | |
1653 | ether_addr_copy(hw->mac.addr, addr->sa_data); |
1654 | + ether_addr_copy(hw->mac.perm_addr, addr->sa_data); |
1655 | ether_addr_copy(netdev->dev_addr, addr->sa_data); |
1656 | |
1657 | return 0; |
1658 | diff --git a/drivers/net/ethernet/ti/cpsw-phy-sel.c b/drivers/net/ethernet/ti/cpsw-phy-sel.c |
1659 | index 18013645e76c..0c1adad7415d 100644 |
1660 | --- a/drivers/net/ethernet/ti/cpsw-phy-sel.c |
1661 | +++ b/drivers/net/ethernet/ti/cpsw-phy-sel.c |
1662 | @@ -177,12 +177,18 @@ void cpsw_phy_sel(struct device *dev, phy_interface_t phy_mode, int slave) |
1663 | } |
1664 | |
1665 | dev = bus_find_device(&platform_bus_type, NULL, node, match); |
1666 | - of_node_put(node); |
1667 | + if (!dev) { |
1668 | + dev_err(dev, "unable to find platform device for %pOF\n", node); |
1669 | + goto out; |
1670 | + } |
1671 | + |
1672 | priv = dev_get_drvdata(dev); |
1673 | |
1674 | priv->cpsw_phy_sel(priv, phy_mode, slave); |
1675 | |
1676 | put_device(dev); |
1677 | +out: |
1678 | + of_node_put(node); |
1679 | } |
1680 | EXPORT_SYMBOL_GPL(cpsw_phy_sel); |
1681 | |
1682 | diff --git a/drivers/net/wireless/ath/regd.h b/drivers/net/wireless/ath/regd.h |
1683 | index 565d3075f06e..8553ab44d930 100644 |
1684 | --- a/drivers/net/wireless/ath/regd.h |
1685 | +++ b/drivers/net/wireless/ath/regd.h |
1686 | @@ -68,12 +68,14 @@ enum CountryCode { |
1687 | CTRY_AUSTRALIA = 36, |
1688 | CTRY_AUSTRIA = 40, |
1689 | CTRY_AZERBAIJAN = 31, |
1690 | + CTRY_BAHAMAS = 44, |
1691 | CTRY_BAHRAIN = 48, |
1692 | CTRY_BANGLADESH = 50, |
1693 | CTRY_BARBADOS = 52, |
1694 | CTRY_BELARUS = 112, |
1695 | CTRY_BELGIUM = 56, |
1696 | CTRY_BELIZE = 84, |
1697 | + CTRY_BERMUDA = 60, |
1698 | CTRY_BOLIVIA = 68, |
1699 | CTRY_BOSNIA_HERZ = 70, |
1700 | CTRY_BRAZIL = 76, |
1701 | @@ -159,6 +161,7 @@ enum CountryCode { |
1702 | CTRY_ROMANIA = 642, |
1703 | CTRY_RUSSIA = 643, |
1704 | CTRY_SAUDI_ARABIA = 682, |
1705 | + CTRY_SERBIA = 688, |
1706 | CTRY_SERBIA_MONTENEGRO = 891, |
1707 | CTRY_SINGAPORE = 702, |
1708 | CTRY_SLOVAKIA = 703, |
1709 | @@ -170,11 +173,13 @@ enum CountryCode { |
1710 | CTRY_SWITZERLAND = 756, |
1711 | CTRY_SYRIA = 760, |
1712 | CTRY_TAIWAN = 158, |
1713 | + CTRY_TANZANIA = 834, |
1714 | CTRY_THAILAND = 764, |
1715 | CTRY_TRINIDAD_Y_TOBAGO = 780, |
1716 | CTRY_TUNISIA = 788, |
1717 | CTRY_TURKEY = 792, |
1718 | CTRY_UAE = 784, |
1719 | + CTRY_UGANDA = 800, |
1720 | CTRY_UKRAINE = 804, |
1721 | CTRY_UNITED_KINGDOM = 826, |
1722 | CTRY_UNITED_STATES = 840, |
1723 | diff --git a/drivers/net/wireless/ath/regd_common.h b/drivers/net/wireless/ath/regd_common.h |
1724 | index bdd2b4d61f2f..15bbd1e0d912 100644 |
1725 | --- a/drivers/net/wireless/ath/regd_common.h |
1726 | +++ b/drivers/net/wireless/ath/regd_common.h |
1727 | @@ -35,6 +35,7 @@ enum EnumRd { |
1728 | FRANCE_RES = 0x31, |
1729 | FCC3_FCCA = 0x3A, |
1730 | FCC3_WORLD = 0x3B, |
1731 | + FCC3_ETSIC = 0x3F, |
1732 | |
1733 | ETSI1_WORLD = 0x37, |
1734 | ETSI3_ETSIA = 0x32, |
1735 | @@ -44,6 +45,7 @@ enum EnumRd { |
1736 | ETSI4_ETSIC = 0x38, |
1737 | ETSI5_WORLD = 0x39, |
1738 | ETSI6_WORLD = 0x34, |
1739 | + ETSI8_WORLD = 0x3D, |
1740 | ETSI_RESERVED = 0x33, |
1741 | |
1742 | MKK1_MKKA = 0x40, |
1743 | @@ -59,6 +61,7 @@ enum EnumRd { |
1744 | MKK1_MKKA1 = 0x4A, |
1745 | MKK1_MKKA2 = 0x4B, |
1746 | MKK1_MKKC = 0x4C, |
1747 | + APL2_FCCA = 0x4D, |
1748 | |
1749 | APL3_FCCA = 0x50, |
1750 | APL1_WORLD = 0x52, |
1751 | @@ -67,6 +70,7 @@ enum EnumRd { |
1752 | APL1_ETSIC = 0x55, |
1753 | APL2_ETSIC = 0x56, |
1754 | APL5_WORLD = 0x58, |
1755 | + APL13_WORLD = 0x5A, |
1756 | APL6_WORLD = 0x5B, |
1757 | APL7_FCCA = 0x5C, |
1758 | APL8_WORLD = 0x5D, |
1759 | @@ -168,6 +172,7 @@ static struct reg_dmn_pair_mapping regDomainPairs[] = { |
1760 | {FCC2_ETSIC, CTL_FCC, CTL_ETSI}, |
1761 | {FCC3_FCCA, CTL_FCC, CTL_FCC}, |
1762 | {FCC3_WORLD, CTL_FCC, CTL_ETSI}, |
1763 | + {FCC3_ETSIC, CTL_FCC, CTL_ETSI}, |
1764 | {FCC4_FCCA, CTL_FCC, CTL_FCC}, |
1765 | {FCC5_FCCA, CTL_FCC, CTL_FCC}, |
1766 | {FCC6_FCCA, CTL_FCC, CTL_FCC}, |
1767 | @@ -179,6 +184,7 @@ static struct reg_dmn_pair_mapping regDomainPairs[] = { |
1768 | {ETSI4_WORLD, CTL_ETSI, CTL_ETSI}, |
1769 | {ETSI5_WORLD, CTL_ETSI, CTL_ETSI}, |
1770 | {ETSI6_WORLD, CTL_ETSI, CTL_ETSI}, |
1771 | + {ETSI8_WORLD, CTL_ETSI, CTL_ETSI}, |
1772 | |
1773 | /* XXX: For ETSI3_ETSIA, Was NO_CTL meant for the 2 GHz band ? */ |
1774 | {ETSI3_ETSIA, CTL_ETSI, CTL_ETSI}, |
1775 | @@ -188,9 +194,11 @@ static struct reg_dmn_pair_mapping regDomainPairs[] = { |
1776 | {FCC1_FCCA, CTL_FCC, CTL_FCC}, |
1777 | {APL1_WORLD, CTL_FCC, CTL_ETSI}, |
1778 | {APL2_WORLD, CTL_FCC, CTL_ETSI}, |
1779 | + {APL2_FCCA, CTL_FCC, CTL_FCC}, |
1780 | {APL3_WORLD, CTL_FCC, CTL_ETSI}, |
1781 | {APL4_WORLD, CTL_FCC, CTL_ETSI}, |
1782 | {APL5_WORLD, CTL_FCC, CTL_ETSI}, |
1783 | + {APL13_WORLD, CTL_ETSI, CTL_ETSI}, |
1784 | {APL6_WORLD, CTL_ETSI, CTL_ETSI}, |
1785 | {APL8_WORLD, CTL_ETSI, CTL_ETSI}, |
1786 | {APL9_WORLD, CTL_ETSI, CTL_ETSI}, |
1787 | @@ -298,6 +306,7 @@ static struct country_code_to_enum_rd allCountries[] = { |
1788 | {CTRY_AUSTRALIA2, FCC6_WORLD, "AU"}, |
1789 | {CTRY_AUSTRIA, ETSI1_WORLD, "AT"}, |
1790 | {CTRY_AZERBAIJAN, ETSI4_WORLD, "AZ"}, |
1791 | + {CTRY_BAHAMAS, FCC3_WORLD, "BS"}, |
1792 | {CTRY_BAHRAIN, APL6_WORLD, "BH"}, |
1793 | {CTRY_BANGLADESH, NULL1_WORLD, "BD"}, |
1794 | {CTRY_BARBADOS, FCC2_WORLD, "BB"}, |
1795 | @@ -305,6 +314,7 @@ static struct country_code_to_enum_rd allCountries[] = { |
1796 | {CTRY_BELGIUM, ETSI1_WORLD, "BE"}, |
1797 | {CTRY_BELGIUM2, ETSI4_WORLD, "BL"}, |
1798 | {CTRY_BELIZE, APL1_ETSIC, "BZ"}, |
1799 | + {CTRY_BERMUDA, FCC3_FCCA, "BM"}, |
1800 | {CTRY_BOLIVIA, APL1_ETSIC, "BO"}, |
1801 | {CTRY_BOSNIA_HERZ, ETSI1_WORLD, "BA"}, |
1802 | {CTRY_BRAZIL, FCC3_WORLD, "BR"}, |
1803 | @@ -444,6 +454,7 @@ static struct country_code_to_enum_rd allCountries[] = { |
1804 | {CTRY_ROMANIA, NULL1_WORLD, "RO"}, |
1805 | {CTRY_RUSSIA, NULL1_WORLD, "RU"}, |
1806 | {CTRY_SAUDI_ARABIA, NULL1_WORLD, "SA"}, |
1807 | + {CTRY_SERBIA, ETSI1_WORLD, "RS"}, |
1808 | {CTRY_SERBIA_MONTENEGRO, ETSI1_WORLD, "CS"}, |
1809 | {CTRY_SINGAPORE, APL6_WORLD, "SG"}, |
1810 | {CTRY_SLOVAKIA, ETSI1_WORLD, "SK"}, |
1811 | @@ -455,10 +466,12 @@ static struct country_code_to_enum_rd allCountries[] = { |
1812 | {CTRY_SWITZERLAND, ETSI1_WORLD, "CH"}, |
1813 | {CTRY_SYRIA, NULL1_WORLD, "SY"}, |
1814 | {CTRY_TAIWAN, APL3_FCCA, "TW"}, |
1815 | + {CTRY_TANZANIA, APL1_WORLD, "TZ"}, |
1816 | {CTRY_THAILAND, FCC3_WORLD, "TH"}, |
1817 | {CTRY_TRINIDAD_Y_TOBAGO, FCC3_WORLD, "TT"}, |
1818 | {CTRY_TUNISIA, ETSI3_WORLD, "TN"}, |
1819 | {CTRY_TURKEY, ETSI3_WORLD, "TR"}, |
1820 | + {CTRY_UGANDA, FCC3_WORLD, "UG"}, |
1821 | {CTRY_UKRAINE, NULL1_WORLD, "UA"}, |
1822 | {CTRY_UAE, NULL1_WORLD, "AE"}, |
1823 | {CTRY_UNITED_KINGDOM, ETSI1_WORLD, "GB"}, |
1824 | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c |
1825 | index 746f8c9a891d..e69cf0ef9574 100644 |
1826 | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c |
1827 | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c |
1828 | @@ -1099,6 +1099,7 @@ static const struct sdio_device_id brcmf_sdmmc_ids[] = { |
1829 | BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43340), |
1830 | BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43341), |
1831 | BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43362), |
1832 | + BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43364), |
1833 | BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4335_4339), |
1834 | BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4339), |
1835 | BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43430), |
1836 | diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c |
1837 | index 6fe5546dc773..996a928142ad 100644 |
1838 | --- a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c |
1839 | +++ b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c |
1840 | @@ -898,6 +898,8 @@ int iwl_pcie_rx_init(struct iwl_trans *trans) |
1841 | WQ_HIGHPRI | WQ_UNBOUND, 1); |
1842 | INIT_WORK(&rba->rx_alloc, iwl_pcie_rx_allocator_work); |
1843 | |
1844 | + cancel_work_sync(&rba->rx_alloc); |
1845 | + |
1846 | spin_lock(&rba->lock); |
1847 | atomic_set(&rba->req_pending, 0); |
1848 | atomic_set(&rba->req_ready, 0); |
1849 | diff --git a/drivers/net/wireless/marvell/mwifiex/usb.c b/drivers/net/wireless/marvell/mwifiex/usb.c |
1850 | index 73eb0846db21..09185a1f7379 100644 |
1851 | --- a/drivers/net/wireless/marvell/mwifiex/usb.c |
1852 | +++ b/drivers/net/wireless/marvell/mwifiex/usb.c |
1853 | @@ -624,6 +624,9 @@ static void mwifiex_usb_disconnect(struct usb_interface *intf) |
1854 | MWIFIEX_FUNC_SHUTDOWN); |
1855 | } |
1856 | |
1857 | + if (adapter->workqueue) |
1858 | + flush_workqueue(adapter->workqueue); |
1859 | + |
1860 | mwifiex_usb_free(card); |
1861 | |
1862 | mwifiex_dbg(adapter, FATAL, |
1863 | diff --git a/drivers/net/wireless/marvell/mwifiex/util.c b/drivers/net/wireless/marvell/mwifiex/util.c |
1864 | index 18fbb96a46e9..d75756c68e16 100644 |
1865 | --- a/drivers/net/wireless/marvell/mwifiex/util.c |
1866 | +++ b/drivers/net/wireless/marvell/mwifiex/util.c |
1867 | @@ -723,12 +723,14 @@ void mwifiex_hist_data_set(struct mwifiex_private *priv, u8 rx_rate, s8 snr, |
1868 | s8 nflr) |
1869 | { |
1870 | struct mwifiex_histogram_data *phist_data = priv->hist_data; |
1871 | + s8 nf = -nflr; |
1872 | + s8 rssi = snr - nflr; |
1873 | |
1874 | atomic_inc(&phist_data->num_samples); |
1875 | atomic_inc(&phist_data->rx_rate[rx_rate]); |
1876 | - atomic_inc(&phist_data->snr[snr]); |
1877 | - atomic_inc(&phist_data->noise_flr[128 + nflr]); |
1878 | - atomic_inc(&phist_data->sig_str[nflr - snr]); |
1879 | + atomic_inc(&phist_data->snr[snr + 128]); |
1880 | + atomic_inc(&phist_data->noise_flr[nf + 128]); |
1881 | + atomic_inc(&phist_data->sig_str[rssi + 128]); |
1882 | } |
1883 | |
1884 | /* function to reset histogram data during init/reset */ |
1885 | diff --git a/drivers/net/wireless/rsi/rsi_91x_sdio.c b/drivers/net/wireless/rsi/rsi_91x_sdio.c |
1886 | index 8428858204a6..fc895b466ebb 100644 |
1887 | --- a/drivers/net/wireless/rsi/rsi_91x_sdio.c |
1888 | +++ b/drivers/net/wireless/rsi/rsi_91x_sdio.c |
1889 | @@ -155,7 +155,6 @@ static void rsi_reset_card(struct sdio_func *pfunction) |
1890 | int err; |
1891 | struct mmc_card *card = pfunction->card; |
1892 | struct mmc_host *host = card->host; |
1893 | - s32 bit = (fls(host->ocr_avail) - 1); |
1894 | u8 cmd52_resp; |
1895 | u32 clock, resp, i; |
1896 | u16 rca; |
1897 | @@ -175,7 +174,6 @@ static void rsi_reset_card(struct sdio_func *pfunction) |
1898 | msleep(20); |
1899 | |
1900 | /* Initialize the SDIO card */ |
1901 | - host->ios.vdd = bit; |
1902 | host->ios.chip_select = MMC_CS_DONTCARE; |
1903 | host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN; |
1904 | host->ios.power_mode = MMC_POWER_UP; |
1905 | diff --git a/drivers/net/wireless/ti/wlcore/sdio.c b/drivers/net/wireless/ti/wlcore/sdio.c |
1906 | index 47fe7f96a242..6921cb0bf563 100644 |
1907 | --- a/drivers/net/wireless/ti/wlcore/sdio.c |
1908 | +++ b/drivers/net/wireless/ti/wlcore/sdio.c |
1909 | @@ -404,6 +404,11 @@ static int wl1271_suspend(struct device *dev) |
1910 | mmc_pm_flag_t sdio_flags; |
1911 | int ret = 0; |
1912 | |
1913 | + if (!wl) { |
1914 | + dev_err(dev, "no wilink module was probed\n"); |
1915 | + goto out; |
1916 | + } |
1917 | + |
1918 | dev_dbg(dev, "wl1271 suspend. wow_enabled: %d\n", |
1919 | wl->wow_enabled); |
1920 | |
1921 | diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c |
1922 | index 520050eae836..a5908e4c06cb 100644 |
1923 | --- a/drivers/net/xen-netfront.c |
1924 | +++ b/drivers/net/xen-netfront.c |
1925 | @@ -238,7 +238,7 @@ static void rx_refill_timeout(unsigned long data) |
1926 | static int netfront_tx_slot_available(struct netfront_queue *queue) |
1927 | { |
1928 | return (queue->tx.req_prod_pvt - queue->tx.rsp_cons) < |
1929 | - (NET_TX_RING_SIZE - MAX_SKB_FRAGS - 2); |
1930 | + (NET_TX_RING_SIZE - XEN_NETIF_NR_SLOTS_MIN - 1); |
1931 | } |
1932 | |
1933 | static void xennet_maybe_wake_tx(struct netfront_queue *queue) |
1934 | @@ -789,7 +789,7 @@ static int xennet_get_responses(struct netfront_queue *queue, |
1935 | RING_IDX cons = queue->rx.rsp_cons; |
1936 | struct sk_buff *skb = xennet_get_rx_skb(queue, cons); |
1937 | grant_ref_t ref = xennet_get_rx_ref(queue, cons); |
1938 | - int max = MAX_SKB_FRAGS + (rx->status <= RX_COPY_THRESHOLD); |
1939 | + int max = XEN_NETIF_NR_SLOTS_MIN + (rx->status <= RX_COPY_THRESHOLD); |
1940 | int slots = 1; |
1941 | int err = 0; |
1942 | unsigned long ret; |
1943 | diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c |
1944 | index 1b4d93e9157e..824e282cd80e 100644 |
1945 | --- a/drivers/nvmem/core.c |
1946 | +++ b/drivers/nvmem/core.c |
1947 | @@ -1031,6 +1031,8 @@ static inline void *nvmem_cell_prepare_write_buffer(struct nvmem_cell *cell, |
1948 | |
1949 | /* setup the first byte with lsb bits from nvmem */ |
1950 | rc = nvmem_reg_read(nvmem, cell->offset, &v, 1); |
1951 | + if (rc) |
1952 | + goto err; |
1953 | *b++ |= GENMASK(bit_offset - 1, 0) & v; |
1954 | |
1955 | /* setup rest of the byte if any */ |
1956 | @@ -1049,11 +1051,16 @@ static inline void *nvmem_cell_prepare_write_buffer(struct nvmem_cell *cell, |
1957 | /* setup the last byte with msb bits from nvmem */ |
1958 | rc = nvmem_reg_read(nvmem, |
1959 | cell->offset + cell->bytes - 1, &v, 1); |
1960 | + if (rc) |
1961 | + goto err; |
1962 | *p |= GENMASK(7, (nbits + bit_offset) % BITS_PER_BYTE) & v; |
1963 | |
1964 | } |
1965 | |
1966 | return buf; |
1967 | +err: |
1968 | + kfree(buf); |
1969 | + return ERR_PTR(rc); |
1970 | } |
1971 | |
1972 | /** |
1973 | diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c |
1974 | index f9f4d1c18eb2..e5d8e2e2bd30 100644 |
1975 | --- a/drivers/pci/pci-sysfs.c |
1976 | +++ b/drivers/pci/pci-sysfs.c |
1977 | @@ -180,13 +180,16 @@ static ssize_t enable_store(struct device *dev, struct device_attribute *attr, |
1978 | if (!capable(CAP_SYS_ADMIN)) |
1979 | return -EPERM; |
1980 | |
1981 | - if (!val) { |
1982 | - if (pci_is_enabled(pdev)) |
1983 | - pci_disable_device(pdev); |
1984 | - else |
1985 | - result = -EIO; |
1986 | - } else |
1987 | + device_lock(dev); |
1988 | + if (dev->driver) |
1989 | + result = -EBUSY; |
1990 | + else if (val) |
1991 | result = pci_enable_device(pdev); |
1992 | + else if (pci_is_enabled(pdev)) |
1993 | + pci_disable_device(pdev); |
1994 | + else |
1995 | + result = -EIO; |
1996 | + device_unlock(dev); |
1997 | |
1998 | return result < 0 ? result : count; |
1999 | } |
2000 | diff --git a/drivers/pinctrl/pinctrl-at91-pio4.c b/drivers/pinctrl/pinctrl-at91-pio4.c |
2001 | index 28bbc1bb9e6c..88ba9c50cc8e 100644 |
2002 | --- a/drivers/pinctrl/pinctrl-at91-pio4.c |
2003 | +++ b/drivers/pinctrl/pinctrl-at91-pio4.c |
2004 | @@ -573,8 +573,10 @@ static int atmel_pctl_dt_node_to_map(struct pinctrl_dev *pctldev, |
2005 | for_each_child_of_node(np_config, np) { |
2006 | ret = atmel_pctl_dt_subnode_to_map(pctldev, np, map, |
2007 | &reserved_maps, num_maps); |
2008 | - if (ret < 0) |
2009 | + if (ret < 0) { |
2010 | + of_node_put(np); |
2011 | break; |
2012 | + } |
2013 | } |
2014 | } |
2015 | |
2016 | diff --git a/drivers/regulator/pfuze100-regulator.c b/drivers/regulator/pfuze100-regulator.c |
2017 | index cb18b5c4f2db..86b348740fcd 100644 |
2018 | --- a/drivers/regulator/pfuze100-regulator.c |
2019 | +++ b/drivers/regulator/pfuze100-regulator.c |
2020 | @@ -153,6 +153,7 @@ static struct regulator_ops pfuze100_sw_regulator_ops = { |
2021 | static struct regulator_ops pfuze100_swb_regulator_ops = { |
2022 | .enable = regulator_enable_regmap, |
2023 | .disable = regulator_disable_regmap, |
2024 | + .is_enabled = regulator_is_enabled_regmap, |
2025 | .list_voltage = regulator_list_voltage_table, |
2026 | .map_voltage = regulator_map_voltage_ascend, |
2027 | .set_voltage_sel = regulator_set_voltage_sel_regmap, |
2028 | diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c |
2029 | index 25cf3069e2e7..4131bfb2cc61 100644 |
2030 | --- a/drivers/rtc/interface.c |
2031 | +++ b/drivers/rtc/interface.c |
2032 | @@ -359,6 +359,11 @@ int rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) |
2033 | { |
2034 | int err; |
2035 | |
2036 | + if (!rtc->ops) |
2037 | + return -ENODEV; |
2038 | + else if (!rtc->ops->set_alarm) |
2039 | + return -EINVAL; |
2040 | + |
2041 | err = rtc_valid_tm(&alarm->time); |
2042 | if (err != 0) |
2043 | return err; |
2044 | diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c |
2045 | index a56a7b243e91..5466246c69b4 100644 |
2046 | --- a/drivers/scsi/3w-9xxx.c |
2047 | +++ b/drivers/scsi/3w-9xxx.c |
2048 | @@ -889,6 +889,11 @@ static int twa_chrdev_open(struct inode *inode, struct file *file) |
2049 | unsigned int minor_number; |
2050 | int retval = TW_IOCTL_ERROR_OS_ENODEV; |
2051 | |
2052 | + if (!capable(CAP_SYS_ADMIN)) { |
2053 | + retval = -EACCES; |
2054 | + goto out; |
2055 | + } |
2056 | + |
2057 | minor_number = iminor(inode); |
2058 | if (minor_number >= twa_device_extension_count) |
2059 | goto out; |
2060 | diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c |
2061 | index 25aba1613e21..24ac19e31003 100644 |
2062 | --- a/drivers/scsi/3w-xxxx.c |
2063 | +++ b/drivers/scsi/3w-xxxx.c |
2064 | @@ -1034,6 +1034,9 @@ static int tw_chrdev_open(struct inode *inode, struct file *file) |
2065 | |
2066 | dprintk(KERN_WARNING "3w-xxxx: tw_ioctl_open()\n"); |
2067 | |
2068 | + if (!capable(CAP_SYS_ADMIN)) |
2069 | + return -EACCES; |
2070 | + |
2071 | minor_number = iminor(inode); |
2072 | if (minor_number >= tw_device_extension_count) |
2073 | return -ENODEV; |
2074 | diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c |
2075 | index 9d05302a3bcd..19bffe0b2cc0 100644 |
2076 | --- a/drivers/scsi/megaraid.c |
2077 | +++ b/drivers/scsi/megaraid.c |
2078 | @@ -4197,6 +4197,9 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) |
2079 | int irq, i, j; |
2080 | int error = -ENODEV; |
2081 | |
2082 | + if (hba_count >= MAX_CONTROLLERS) |
2083 | + goto out; |
2084 | + |
2085 | if (pci_enable_device(pdev)) |
2086 | goto out; |
2087 | pci_set_master(pdev); |
2088 | diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c |
2089 | index a156451553a7..f722a0e6caa4 100644 |
2090 | --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c |
2091 | +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c |
2092 | @@ -2031,6 +2031,9 @@ megasas_build_syspd_fusion(struct megasas_instance *instance, |
2093 | pRAID_Context->timeoutValue = cpu_to_le16(os_timeout_value); |
2094 | pRAID_Context->VirtualDiskTgtId = cpu_to_le16(device_id); |
2095 | } else { |
2096 | + if (os_timeout_value) |
2097 | + os_timeout_value++; |
2098 | + |
2099 | /* system pd Fast Path */ |
2100 | io_request->Function = MPI2_FUNCTION_SCSI_IO_REQUEST; |
2101 | timeout_limit = (scmd->device->type == TYPE_DISK) ? |
2102 | diff --git a/drivers/scsi/scsi_dh.c b/drivers/scsi/scsi_dh.c |
2103 | index a5e30e9449ef..375cede0c534 100644 |
2104 | --- a/drivers/scsi/scsi_dh.c |
2105 | +++ b/drivers/scsi/scsi_dh.c |
2106 | @@ -58,7 +58,10 @@ static const struct scsi_dh_blist scsi_dh_blist[] = { |
2107 | {"IBM", "3526", "rdac", }, |
2108 | {"IBM", "3542", "rdac", }, |
2109 | {"IBM", "3552", "rdac", }, |
2110 | - {"SGI", "TP9", "rdac", }, |
2111 | + {"SGI", "TP9300", "rdac", }, |
2112 | + {"SGI", "TP9400", "rdac", }, |
2113 | + {"SGI", "TP9500", "rdac", }, |
2114 | + {"SGI", "TP9700", "rdac", }, |
2115 | {"SGI", "IS", "rdac", }, |
2116 | {"STK", "OPENstorage", "rdac", }, |
2117 | {"STK", "FLEXLINE 380", "rdac", }, |
2118 | diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c |
2119 | index 86a3110c6d75..f857086ce2fa 100644 |
2120 | --- a/drivers/scsi/ufs/ufshcd.c |
2121 | +++ b/drivers/scsi/ufs/ufshcd.c |
2122 | @@ -4012,6 +4012,7 @@ static void ufshcd_exception_event_handler(struct work_struct *work) |
2123 | hba = container_of(work, struct ufs_hba, eeh_work); |
2124 | |
2125 | pm_runtime_get_sync(hba->dev); |
2126 | + scsi_block_requests(hba->host); |
2127 | err = ufshcd_get_ee_status(hba, &status); |
2128 | if (err) { |
2129 | dev_err(hba->dev, "%s: failed to get exception status %d\n", |
2130 | @@ -4025,6 +4026,7 @@ static void ufshcd_exception_event_handler(struct work_struct *work) |
2131 | ufshcd_bkops_exception_event_handler(hba); |
2132 | |
2133 | out: |
2134 | + scsi_unblock_requests(hba->host); |
2135 | pm_runtime_put_sync(hba->dev); |
2136 | return; |
2137 | } |
2138 | diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c |
2139 | index ea9a0c21d29d..4ff293129675 100644 |
2140 | --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c |
2141 | +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c |
2142 | @@ -1299,11 +1299,6 @@ kiblnd_connect_peer(struct kib_peer *peer) |
2143 | goto failed2; |
2144 | } |
2145 | |
2146 | - LASSERT(cmid->device); |
2147 | - CDEBUG(D_NET, "%s: connection bound to %s:%pI4h:%s\n", |
2148 | - libcfs_nid2str(peer->ibp_nid), dev->ibd_ifname, |
2149 | - &dev->ibd_ifip, cmid->device->name); |
2150 | - |
2151 | return; |
2152 | |
2153 | failed2: |
2154 | @@ -3005,8 +3000,19 @@ kiblnd_cm_callback(struct rdma_cm_id *cmid, struct rdma_cm_event *event) |
2155 | } else { |
2156 | rc = rdma_resolve_route( |
2157 | cmid, *kiblnd_tunables.kib_timeout * 1000); |
2158 | - if (!rc) |
2159 | + if (!rc) { |
2160 | + struct kib_net *net = peer->ibp_ni->ni_data; |
2161 | + struct kib_dev *dev = net->ibn_dev; |
2162 | + |
2163 | + CDEBUG(D_NET, "%s: connection bound to "\ |
2164 | + "%s:%pI4h:%s\n", |
2165 | + libcfs_nid2str(peer->ibp_nid), |
2166 | + dev->ibd_ifname, |
2167 | + &dev->ibd_ifip, cmid->device->name); |
2168 | + |
2169 | return 0; |
2170 | + } |
2171 | + |
2172 | /* Can't initiate route resolution */ |
2173 | CERROR("Can't resolve route for %s: %d\n", |
2174 | libcfs_nid2str(peer->ibp_nid), rc); |
2175 | diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c |
2176 | index d18ab3f28c70..9addcdbe9374 100644 |
2177 | --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c |
2178 | +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c |
2179 | @@ -1489,8 +1489,10 @@ struct ldlm_lock *ldlm_lock_create(struct ldlm_namespace *ns, |
2180 | return ERR_CAST(res); |
2181 | |
2182 | lock = ldlm_lock_new(res); |
2183 | - if (!lock) |
2184 | + if (!lock) { |
2185 | + ldlm_resource_putref(res); |
2186 | return ERR_PTR(-ENOMEM); |
2187 | + } |
2188 | |
2189 | lock->l_req_mode = mode; |
2190 | lock->l_ast_data = data; |
2191 | @@ -1533,6 +1535,8 @@ out: |
2192 | return ERR_PTR(rc); |
2193 | } |
2194 | |
2195 | + |
2196 | + |
2197 | /** |
2198 | * Enqueue (request) a lock. |
2199 | * On the client this is called from ldlm_cli_enqueue_fini |
2200 | diff --git a/drivers/staging/lustre/lustre/llite/xattr.c b/drivers/staging/lustre/lustre/llite/xattr.c |
2201 | index e070adb7a3cc..57121fd5f050 100644 |
2202 | --- a/drivers/staging/lustre/lustre/llite/xattr.c |
2203 | +++ b/drivers/staging/lustre/lustre/llite/xattr.c |
2204 | @@ -103,7 +103,11 @@ ll_xattr_set_common(const struct xattr_handler *handler, |
2205 | __u64 valid; |
2206 | int rc; |
2207 | |
2208 | - if (flags == XATTR_REPLACE) { |
2209 | + /* When setxattr() is called with a size of 0 the value is |
2210 | + * unconditionally replaced by "". When removexattr() is |
2211 | + * called we get a NULL value and XATTR_REPLACE for flags. |
2212 | + */ |
2213 | + if (!value && flags == XATTR_REPLACE) { |
2214 | ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_REMOVEXATTR, 1); |
2215 | valid = OBD_MD_FLXATTRRM; |
2216 | } else { |
2217 | diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c |
2218 | index a45810b43f70..c974cb5fb958 100644 |
2219 | --- a/drivers/thermal/samsung/exynos_tmu.c |
2220 | +++ b/drivers/thermal/samsung/exynos_tmu.c |
2221 | @@ -598,6 +598,7 @@ static int exynos5433_tmu_initialize(struct platform_device *pdev) |
2222 | threshold_code = temp_to_code(data, temp); |
2223 | |
2224 | rising_threshold = readl(data->base + rising_reg_offset); |
2225 | + rising_threshold &= ~(0xff << j * 8); |
2226 | rising_threshold |= (threshold_code << j * 8); |
2227 | writel(rising_threshold, data->base + rising_reg_offset); |
2228 | |
2229 | diff --git a/drivers/tty/hvc/hvc_opal.c b/drivers/tty/hvc/hvc_opal.c |
2230 | index 510799311099..1fc5d5b82778 100644 |
2231 | --- a/drivers/tty/hvc/hvc_opal.c |
2232 | +++ b/drivers/tty/hvc/hvc_opal.c |
2233 | @@ -332,7 +332,6 @@ static void udbg_init_opal_common(void) |
2234 | udbg_putc = udbg_opal_putc; |
2235 | udbg_getc = udbg_opal_getc; |
2236 | udbg_getc_poll = udbg_opal_getc_poll; |
2237 | - tb_ticks_per_usec = 0x200; /* Make udelay not suck */ |
2238 | } |
2239 | |
2240 | void __init hvc_opal_init_early(void) |
2241 | diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c |
2242 | index 2b907385b4a8..171130a9ecc8 100644 |
2243 | --- a/drivers/tty/pty.c |
2244 | +++ b/drivers/tty/pty.c |
2245 | @@ -106,16 +106,19 @@ static void pty_unthrottle(struct tty_struct *tty) |
2246 | static int pty_write(struct tty_struct *tty, const unsigned char *buf, int c) |
2247 | { |
2248 | struct tty_struct *to = tty->link; |
2249 | + unsigned long flags; |
2250 | |
2251 | if (tty->stopped) |
2252 | return 0; |
2253 | |
2254 | if (c > 0) { |
2255 | + spin_lock_irqsave(&to->port->lock, flags); |
2256 | /* Stuff the data into the input queue of the other end */ |
2257 | c = tty_insert_flip_string(to->port, buf, c); |
2258 | /* And shovel */ |
2259 | if (c) |
2260 | tty_flip_buffer_push(to->port); |
2261 | + spin_unlock_irqrestore(&to->port->lock, flags); |
2262 | } |
2263 | return c; |
2264 | } |
2265 | diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c |
2266 | index bdb19db542a4..7aee55244b4a 100644 |
2267 | --- a/drivers/usb/core/hub.c |
2268 | +++ b/drivers/usb/core/hub.c |
2269 | @@ -3363,6 +3363,10 @@ static int wait_for_connected(struct usb_device *udev, |
2270 | while (delay_ms < 2000) { |
2271 | if (status || *portstatus & USB_PORT_STAT_CONNECTION) |
2272 | break; |
2273 | + if (!port_is_power_on(hub, *portstatus)) { |
2274 | + status = -ENODEV; |
2275 | + break; |
2276 | + } |
2277 | msleep(20); |
2278 | delay_ms += 20; |
2279 | status = hub_port_status(hub, *port1, portstatus, portchange); |
2280 | diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c |
2281 | index 0a0cf154814b..984d6aae7529 100644 |
2282 | --- a/drivers/usb/dwc2/hcd.c |
2283 | +++ b/drivers/usb/dwc2/hcd.c |
2284 | @@ -2544,34 +2544,29 @@ static void dwc2_hc_init_xfer(struct dwc2_hsotg *hsotg, |
2285 | |
2286 | #define DWC2_USB_DMA_ALIGN 4 |
2287 | |
2288 | -struct dma_aligned_buffer { |
2289 | - void *kmalloc_ptr; |
2290 | - void *old_xfer_buffer; |
2291 | - u8 data[0]; |
2292 | -}; |
2293 | - |
2294 | static void dwc2_free_dma_aligned_buffer(struct urb *urb) |
2295 | { |
2296 | - struct dma_aligned_buffer *temp; |
2297 | + void *stored_xfer_buffer; |
2298 | |
2299 | if (!(urb->transfer_flags & URB_ALIGNED_TEMP_BUFFER)) |
2300 | return; |
2301 | |
2302 | - temp = container_of(urb->transfer_buffer, |
2303 | - struct dma_aligned_buffer, data); |
2304 | + /* Restore urb->transfer_buffer from the end of the allocated area */ |
2305 | + memcpy(&stored_xfer_buffer, urb->transfer_buffer + |
2306 | + urb->transfer_buffer_length, sizeof(urb->transfer_buffer)); |
2307 | |
2308 | if (usb_urb_dir_in(urb)) |
2309 | - memcpy(temp->old_xfer_buffer, temp->data, |
2310 | + memcpy(stored_xfer_buffer, urb->transfer_buffer, |
2311 | urb->transfer_buffer_length); |
2312 | - urb->transfer_buffer = temp->old_xfer_buffer; |
2313 | - kfree(temp->kmalloc_ptr); |
2314 | + kfree(urb->transfer_buffer); |
2315 | + urb->transfer_buffer = stored_xfer_buffer; |
2316 | |
2317 | urb->transfer_flags &= ~URB_ALIGNED_TEMP_BUFFER; |
2318 | } |
2319 | |
2320 | static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags) |
2321 | { |
2322 | - struct dma_aligned_buffer *temp, *kmalloc_ptr; |
2323 | + void *kmalloc_ptr; |
2324 | size_t kmalloc_size; |
2325 | |
2326 | if (urb->num_sgs || urb->sg || |
2327 | @@ -2579,22 +2574,29 @@ static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags) |
2328 | !((uintptr_t)urb->transfer_buffer & (DWC2_USB_DMA_ALIGN - 1))) |
2329 | return 0; |
2330 | |
2331 | - /* Allocate a buffer with enough padding for alignment */ |
2332 | + /* |
2333 | + * Allocate a buffer with enough padding for original transfer_buffer |
2334 | + * pointer. This allocation is guaranteed to be aligned properly for |
2335 | + * DMA |
2336 | + */ |
2337 | kmalloc_size = urb->transfer_buffer_length + |
2338 | - sizeof(struct dma_aligned_buffer) + DWC2_USB_DMA_ALIGN - 1; |
2339 | + sizeof(urb->transfer_buffer); |
2340 | |
2341 | kmalloc_ptr = kmalloc(kmalloc_size, mem_flags); |
2342 | if (!kmalloc_ptr) |
2343 | return -ENOMEM; |
2344 | |
2345 | - /* Position our struct dma_aligned_buffer such that data is aligned */ |
2346 | - temp = PTR_ALIGN(kmalloc_ptr + 1, DWC2_USB_DMA_ALIGN) - 1; |
2347 | - temp->kmalloc_ptr = kmalloc_ptr; |
2348 | - temp->old_xfer_buffer = urb->transfer_buffer; |
2349 | + /* |
2350 | + * Position value of original urb->transfer_buffer pointer to the end |
2351 | + * of allocation for later referencing |
2352 | + */ |
2353 | + memcpy(kmalloc_ptr + urb->transfer_buffer_length, |
2354 | + &urb->transfer_buffer, sizeof(urb->transfer_buffer)); |
2355 | + |
2356 | if (usb_urb_dir_out(urb)) |
2357 | - memcpy(temp->data, urb->transfer_buffer, |
2358 | + memcpy(kmalloc_ptr, urb->transfer_buffer, |
2359 | urb->transfer_buffer_length); |
2360 | - urb->transfer_buffer = temp->data; |
2361 | + urb->transfer_buffer = kmalloc_ptr; |
2362 | |
2363 | urb->transfer_flags |= URB_ALIGNED_TEMP_BUFFER; |
2364 | |
2365 | diff --git a/drivers/vfio/platform/vfio_platform_common.c b/drivers/vfio/platform/vfio_platform_common.c |
2366 | index d78142830754..d143d08c4f0f 100644 |
2367 | --- a/drivers/vfio/platform/vfio_platform_common.c |
2368 | +++ b/drivers/vfio/platform/vfio_platform_common.c |
2369 | @@ -696,18 +696,23 @@ int vfio_platform_probe_common(struct vfio_platform_device *vdev, |
2370 | group = vfio_iommu_group_get(dev); |
2371 | if (!group) { |
2372 | pr_err("VFIO: No IOMMU group for device %s\n", vdev->name); |
2373 | - return -EINVAL; |
2374 | + ret = -EINVAL; |
2375 | + goto put_reset; |
2376 | } |
2377 | |
2378 | ret = vfio_add_group_dev(dev, &vfio_platform_ops, vdev); |
2379 | - if (ret) { |
2380 | - vfio_iommu_group_put(group, dev); |
2381 | - return ret; |
2382 | - } |
2383 | + if (ret) |
2384 | + goto put_iommu; |
2385 | |
2386 | mutex_init(&vdev->igate); |
2387 | |
2388 | return 0; |
2389 | + |
2390 | +put_iommu: |
2391 | + vfio_iommu_group_put(group, dev); |
2392 | +put_reset: |
2393 | + vfio_platform_put_reset(vdev); |
2394 | + return ret; |
2395 | } |
2396 | EXPORT_SYMBOL_GPL(vfio_platform_probe_common); |
2397 | |
2398 | diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c |
2399 | index dfd99867ff4d..9afad8c14220 100644 |
2400 | --- a/fs/btrfs/qgroup.c |
2401 | +++ b/fs/btrfs/qgroup.c |
2402 | @@ -2236,6 +2236,21 @@ void assert_qgroups_uptodate(struct btrfs_trans_handle *trans) |
2403 | BUG(); |
2404 | } |
2405 | |
2406 | +/* |
2407 | + * Check if the leaf is the last leaf. Which means all node pointers |
2408 | + * are at their last position. |
2409 | + */ |
2410 | +static bool is_last_leaf(struct btrfs_path *path) |
2411 | +{ |
2412 | + int i; |
2413 | + |
2414 | + for (i = 1; i < BTRFS_MAX_LEVEL && path->nodes[i]; i++) { |
2415 | + if (path->slots[i] != btrfs_header_nritems(path->nodes[i]) - 1) |
2416 | + return false; |
2417 | + } |
2418 | + return true; |
2419 | +} |
2420 | + |
2421 | /* |
2422 | * returns < 0 on error, 0 when more leafs are to be scanned. |
2423 | * returns 1 when done. |
2424 | @@ -2249,6 +2264,7 @@ qgroup_rescan_leaf(struct btrfs_fs_info *fs_info, struct btrfs_path *path, |
2425 | struct ulist *roots = NULL; |
2426 | struct seq_list tree_mod_seq_elem = SEQ_LIST_INIT(tree_mod_seq_elem); |
2427 | u64 num_bytes; |
2428 | + bool done; |
2429 | int slot; |
2430 | int ret; |
2431 | |
2432 | @@ -2277,6 +2293,7 @@ qgroup_rescan_leaf(struct btrfs_fs_info *fs_info, struct btrfs_path *path, |
2433 | mutex_unlock(&fs_info->qgroup_rescan_lock); |
2434 | return ret; |
2435 | } |
2436 | + done = is_last_leaf(path); |
2437 | |
2438 | btrfs_item_key_to_cpu(path->nodes[0], &found, |
2439 | btrfs_header_nritems(path->nodes[0]) - 1); |
2440 | @@ -2323,6 +2340,8 @@ out: |
2441 | } |
2442 | btrfs_put_tree_mod_seq(fs_info, &tree_mod_seq_elem); |
2443 | |
2444 | + if (done && !ret) |
2445 | + ret = 1; |
2446 | return ret; |
2447 | } |
2448 | |
2449 | diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c |
2450 | index 44d34923de9c..44966fd00790 100644 |
2451 | --- a/fs/btrfs/tree-log.c |
2452 | +++ b/fs/btrfs/tree-log.c |
2453 | @@ -2979,8 +2979,11 @@ out_wake_log_root: |
2454 | mutex_unlock(&log_root_tree->log_mutex); |
2455 | |
2456 | /* |
2457 | - * The barrier before waitqueue_active is implied by mutex_unlock |
2458 | + * The barrier before waitqueue_active is needed so all the updates |
2459 | + * above are seen by the woken threads. It might not be necessary, but |
2460 | + * proving that seems to be hard. |
2461 | */ |
2462 | + smp_mb(); |
2463 | if (waitqueue_active(&log_root_tree->log_commit_wait[index2])) |
2464 | wake_up(&log_root_tree->log_commit_wait[index2]); |
2465 | out: |
2466 | @@ -2991,8 +2994,11 @@ out: |
2467 | mutex_unlock(&root->log_mutex); |
2468 | |
2469 | /* |
2470 | - * The barrier before waitqueue_active is implied by mutex_unlock |
2471 | + * The barrier before waitqueue_active is needed so all the updates |
2472 | + * above are seen by the woken threads. It might not be necessary, but |
2473 | + * proving that seems to be hard. |
2474 | */ |
2475 | + smp_mb(); |
2476 | if (waitqueue_active(&root->log_commit_wait[index1])) |
2477 | wake_up(&root->log_commit_wait[index1]); |
2478 | return ret; |
2479 | diff --git a/fs/crypto/crypto.c b/fs/crypto/crypto.c |
2480 | index 73de1446c8d4..1a8962569b5c 100644 |
2481 | --- a/fs/crypto/crypto.c |
2482 | +++ b/fs/crypto/crypto.c |
2483 | @@ -517,8 +517,17 @@ EXPORT_SYMBOL(fscrypt_initialize); |
2484 | */ |
2485 | static int __init fscrypt_init(void) |
2486 | { |
2487 | + /* |
2488 | + * Use an unbound workqueue to allow bios to be decrypted in parallel |
2489 | + * even when they happen to complete on the same CPU. This sacrifices |
2490 | + * locality, but it's worthwhile since decryption is CPU-intensive. |
2491 | + * |
2492 | + * Also use a high-priority workqueue to prioritize decryption work, |
2493 | + * which blocks reads from completing, over regular application tasks. |
2494 | + */ |
2495 | fscrypt_read_workqueue = alloc_workqueue("fscrypt_read_queue", |
2496 | - WQ_HIGHPRI, 0); |
2497 | + WQ_UNBOUND | WQ_HIGHPRI, |
2498 | + num_online_cpus()); |
2499 | if (!fscrypt_read_workqueue) |
2500 | goto fail; |
2501 | |
2502 | diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c |
2503 | index ad13f07cf0d3..2455fe1446d6 100644 |
2504 | --- a/fs/ext4/balloc.c |
2505 | +++ b/fs/ext4/balloc.c |
2506 | @@ -378,6 +378,8 @@ static int ext4_validate_block_bitmap(struct super_block *sb, |
2507 | return -EFSCORRUPTED; |
2508 | |
2509 | ext4_lock_group(sb, block_group); |
2510 | + if (buffer_verified(bh)) |
2511 | + goto verified; |
2512 | if (unlikely(!ext4_block_bitmap_csum_verify(sb, block_group, |
2513 | desc, bh))) { |
2514 | ext4_unlock_group(sb, block_group); |
2515 | @@ -400,6 +402,7 @@ static int ext4_validate_block_bitmap(struct super_block *sb, |
2516 | return -EFSCORRUPTED; |
2517 | } |
2518 | set_buffer_verified(bh); |
2519 | +verified: |
2520 | ext4_unlock_group(sb, block_group); |
2521 | return 0; |
2522 | } |
2523 | diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c |
2524 | index 460866b2166d..ffaf66a51de3 100644 |
2525 | --- a/fs/ext4/ialloc.c |
2526 | +++ b/fs/ext4/ialloc.c |
2527 | @@ -88,6 +88,8 @@ static int ext4_validate_inode_bitmap(struct super_block *sb, |
2528 | return -EFSCORRUPTED; |
2529 | |
2530 | ext4_lock_group(sb, block_group); |
2531 | + if (buffer_verified(bh)) |
2532 | + goto verified; |
2533 | blk = ext4_inode_bitmap(sb, desc); |
2534 | if (!ext4_inode_bitmap_csum_verify(sb, block_group, desc, bh, |
2535 | EXT4_INODES_PER_GROUP(sb) / 8)) { |
2536 | @@ -105,6 +107,7 @@ static int ext4_validate_inode_bitmap(struct super_block *sb, |
2537 | return -EFSBADCRC; |
2538 | } |
2539 | set_buffer_verified(bh); |
2540 | +verified: |
2541 | ext4_unlock_group(sb, block_group); |
2542 | return 0; |
2543 | } |
2544 | diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c |
2545 | index e6ac24de119d..436baf7cdca3 100644 |
2546 | --- a/fs/ext4/inline.c |
2547 | +++ b/fs/ext4/inline.c |
2548 | @@ -679,6 +679,10 @@ int ext4_try_to_write_inline_data(struct address_space *mapping, |
2549 | goto convert; |
2550 | } |
2551 | |
2552 | + ret = ext4_journal_get_write_access(handle, iloc.bh); |
2553 | + if (ret) |
2554 | + goto out; |
2555 | + |
2556 | flags |= AOP_FLAG_NOFS; |
2557 | |
2558 | page = grab_cache_page_write_begin(mapping, 0, flags); |
2559 | @@ -707,7 +711,7 @@ int ext4_try_to_write_inline_data(struct address_space *mapping, |
2560 | out_up_read: |
2561 | up_read(&EXT4_I(inode)->xattr_sem); |
2562 | out: |
2563 | - if (handle) |
2564 | + if (handle && (ret != 1)) |
2565 | ext4_journal_stop(handle); |
2566 | brelse(iloc.bh); |
2567 | return ret; |
2568 | @@ -749,6 +753,7 @@ int ext4_write_inline_data_end(struct inode *inode, loff_t pos, unsigned len, |
2569 | |
2570 | ext4_write_unlock_xattr(inode, &no_expand); |
2571 | brelse(iloc.bh); |
2572 | + mark_inode_dirty(inode); |
2573 | out: |
2574 | return copied; |
2575 | } |
2576 | @@ -895,7 +900,6 @@ retry_journal: |
2577 | goto out; |
2578 | } |
2579 | |
2580 | - |
2581 | page = grab_cache_page_write_begin(mapping, 0, flags); |
2582 | if (!page) { |
2583 | ret = -ENOMEM; |
2584 | @@ -913,6 +917,9 @@ retry_journal: |
2585 | if (ret < 0) |
2586 | goto out_release_page; |
2587 | } |
2588 | + ret = ext4_journal_get_write_access(handle, iloc.bh); |
2589 | + if (ret) |
2590 | + goto out_release_page; |
2591 | |
2592 | up_read(&EXT4_I(inode)->xattr_sem); |
2593 | *pagep = page; |
2594 | @@ -933,7 +940,6 @@ int ext4_da_write_inline_data_end(struct inode *inode, loff_t pos, |
2595 | unsigned len, unsigned copied, |
2596 | struct page *page) |
2597 | { |
2598 | - int i_size_changed = 0; |
2599 | int ret; |
2600 | |
2601 | ret = ext4_write_inline_data_end(inode, pos, len, copied, page); |
2602 | @@ -951,10 +957,8 @@ int ext4_da_write_inline_data_end(struct inode *inode, loff_t pos, |
2603 | * But it's important to update i_size while still holding page lock: |
2604 | * page writeout could otherwise come in and zero beyond i_size. |
2605 | */ |
2606 | - if (pos+copied > inode->i_size) { |
2607 | + if (pos+copied > inode->i_size) |
2608 | i_size_write(inode, pos+copied); |
2609 | - i_size_changed = 1; |
2610 | - } |
2611 | unlock_page(page); |
2612 | put_page(page); |
2613 | |
2614 | @@ -964,8 +968,7 @@ int ext4_da_write_inline_data_end(struct inode *inode, loff_t pos, |
2615 | * ordering of page lock and transaction start for journaling |
2616 | * filesystems. |
2617 | */ |
2618 | - if (i_size_changed) |
2619 | - mark_inode_dirty(inode); |
2620 | + mark_inode_dirty(inode); |
2621 | |
2622 | return copied; |
2623 | } |
2624 | diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c |
2625 | index 5c4c9af4aaf4..f62eca8cbde0 100644 |
2626 | --- a/fs/ext4/inode.c |
2627 | +++ b/fs/ext4/inode.c |
2628 | @@ -1318,9 +1318,10 @@ static int ext4_write_end(struct file *file, |
2629 | loff_t old_size = inode->i_size; |
2630 | int ret = 0, ret2; |
2631 | int i_size_changed = 0; |
2632 | + int inline_data = ext4_has_inline_data(inode); |
2633 | |
2634 | trace_ext4_write_end(inode, pos, len, copied); |
2635 | - if (ext4_has_inline_data(inode)) { |
2636 | + if (inline_data) { |
2637 | ret = ext4_write_inline_data_end(inode, pos, len, |
2638 | copied, page); |
2639 | if (ret < 0) { |
2640 | @@ -1348,7 +1349,7 @@ static int ext4_write_end(struct file *file, |
2641 | * ordering of page lock and transaction start for journaling |
2642 | * filesystems. |
2643 | */ |
2644 | - if (i_size_changed) |
2645 | + if (i_size_changed || inline_data) |
2646 | ext4_mark_inode_dirty(handle, inode); |
2647 | |
2648 | if (pos + len > inode->i_size && ext4_can_truncate(inode)) |
2649 | @@ -1422,6 +1423,7 @@ static int ext4_journalled_write_end(struct file *file, |
2650 | int partial = 0; |
2651 | unsigned from, to; |
2652 | int size_changed = 0; |
2653 | + int inline_data = ext4_has_inline_data(inode); |
2654 | |
2655 | trace_ext4_journalled_write_end(inode, pos, len, copied); |
2656 | from = pos & (PAGE_SIZE - 1); |
2657 | @@ -1429,7 +1431,7 @@ static int ext4_journalled_write_end(struct file *file, |
2658 | |
2659 | BUG_ON(!ext4_handle_valid(handle)); |
2660 | |
2661 | - if (ext4_has_inline_data(inode)) { |
2662 | + if (inline_data) { |
2663 | ret = ext4_write_inline_data_end(inode, pos, len, |
2664 | copied, page); |
2665 | if (ret < 0) { |
2666 | @@ -1460,7 +1462,7 @@ static int ext4_journalled_write_end(struct file *file, |
2667 | if (old_size < pos) |
2668 | pagecache_isize_extended(inode, old_size, pos); |
2669 | |
2670 | - if (size_changed) { |
2671 | + if (size_changed || inline_data) { |
2672 | ret2 = ext4_mark_inode_dirty(handle, inode); |
2673 | if (!ret) |
2674 | ret = ret2; |
2675 | @@ -1958,11 +1960,7 @@ static int __ext4_journalled_writepage(struct page *page, |
2676 | } |
2677 | |
2678 | if (inline_data) { |
2679 | - BUFFER_TRACE(inode_bh, "get write access"); |
2680 | - ret = ext4_journal_get_write_access(handle, inode_bh); |
2681 | - |
2682 | - err = ext4_handle_dirty_metadata(handle, inode, inode_bh); |
2683 | - |
2684 | + ret = ext4_mark_inode_dirty(handle, inode); |
2685 | } else { |
2686 | ret = ext4_walk_page_buffers(handle, page_bufs, 0, len, NULL, |
2687 | do_journal_get_write_access); |
2688 | diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c |
2689 | index 801111e1f8ef..7d0e8d6bf009 100644 |
2690 | --- a/fs/f2fs/file.c |
2691 | +++ b/fs/f2fs/file.c |
2692 | @@ -1512,6 +1512,8 @@ static int f2fs_ioc_start_atomic_write(struct file *filp) |
2693 | |
2694 | inode_lock(inode); |
2695 | |
2696 | + down_write(&F2FS_I(inode)->dio_rwsem[WRITE]); |
2697 | + |
2698 | if (f2fs_is_atomic_file(inode)) |
2699 | goto out; |
2700 | |
2701 | @@ -1532,6 +1534,7 @@ static int f2fs_ioc_start_atomic_write(struct file *filp) |
2702 | if (ret) |
2703 | clear_inode_flag(inode, FI_ATOMIC_FILE); |
2704 | out: |
2705 | + up_write(&F2FS_I(inode)->dio_rwsem[WRITE]); |
2706 | inode_unlock(inode); |
2707 | mnt_drop_write_file(filp); |
2708 | return ret; |
2709 | @@ -1670,9 +1673,11 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg) |
2710 | if (get_user(in, (__u32 __user *)arg)) |
2711 | return -EFAULT; |
2712 | |
2713 | - ret = mnt_want_write_file(filp); |
2714 | - if (ret) |
2715 | - return ret; |
2716 | + if (in != F2FS_GOING_DOWN_FULLSYNC) { |
2717 | + ret = mnt_want_write_file(filp); |
2718 | + if (ret) |
2719 | + return ret; |
2720 | + } |
2721 | |
2722 | switch (in) { |
2723 | case F2FS_GOING_DOWN_FULLSYNC: |
2724 | @@ -1700,7 +1705,8 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg) |
2725 | } |
2726 | f2fs_update_time(sbi, REQ_TIME); |
2727 | out: |
2728 | - mnt_drop_write_file(filp); |
2729 | + if (in != F2FS_GOING_DOWN_FULLSYNC) |
2730 | + mnt_drop_write_file(filp); |
2731 | return ret; |
2732 | } |
2733 | |
2734 | diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c |
2735 | index 17ab23f64bba..ad4dfd29d923 100644 |
2736 | --- a/fs/f2fs/gc.c |
2737 | +++ b/fs/f2fs/gc.c |
2738 | @@ -688,9 +688,14 @@ retry: |
2739 | set_cold_data(page); |
2740 | |
2741 | err = do_write_data_page(&fio); |
2742 | - if (err == -ENOMEM && is_dirty) { |
2743 | - congestion_wait(BLK_RW_ASYNC, HZ/50); |
2744 | - goto retry; |
2745 | + if (err) { |
2746 | + clear_cold_data(page); |
2747 | + if (err == -ENOMEM) { |
2748 | + congestion_wait(BLK_RW_ASYNC, HZ/50); |
2749 | + goto retry; |
2750 | + } |
2751 | + if (is_dirty) |
2752 | + set_page_dirty(page); |
2753 | } |
2754 | |
2755 | clear_cold_data(page); |
2756 | diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c |
2757 | index e10f61684ea4..35d48ef0573c 100644 |
2758 | --- a/fs/f2fs/segment.c |
2759 | +++ b/fs/f2fs/segment.c |
2760 | @@ -207,6 +207,8 @@ static int __revoke_inmem_pages(struct inode *inode, |
2761 | |
2762 | lock_page(page); |
2763 | |
2764 | + f2fs_wait_on_page_writeback(page, DATA, true); |
2765 | + |
2766 | if (recover) { |
2767 | struct dnode_of_data dn; |
2768 | struct node_info ni; |
2769 | @@ -369,6 +371,9 @@ void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need) |
2770 | |
2771 | void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi) |
2772 | { |
2773 | + if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING))) |
2774 | + return; |
2775 | + |
2776 | /* try to shrink extent cache when there is no enough memory */ |
2777 | if (!available_free_memory(sbi, EXTENT_CACHE)) |
2778 | f2fs_shrink_extent_tree(sbi, EXTENT_CACHE_SHRINK_NUMBER); |
2779 | diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c |
2780 | index eb20b8767f3c..e627671f0183 100644 |
2781 | --- a/fs/f2fs/super.c |
2782 | +++ b/fs/f2fs/super.c |
2783 | @@ -1980,6 +1980,12 @@ static int __init init_f2fs_fs(void) |
2784 | { |
2785 | int err; |
2786 | |
2787 | + if (PAGE_SIZE != F2FS_BLKSIZE) { |
2788 | + printk("F2FS not supported on PAGE_SIZE(%lu) != %d\n", |
2789 | + PAGE_SIZE, F2FS_BLKSIZE); |
2790 | + return -EINVAL; |
2791 | + } |
2792 | + |
2793 | f2fs_build_trace_ios(); |
2794 | |
2795 | err = init_inodecache(); |
2796 | diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c |
2797 | index 91e017ca7072..cf5fdc25289a 100644 |
2798 | --- a/fs/nfs/nfs4proc.c |
2799 | +++ b/fs/nfs/nfs4proc.c |
2800 | @@ -2701,7 +2701,7 @@ static int _nfs4_open_and_get_state(struct nfs4_opendata *opendata, |
2801 | if (ret != 0) |
2802 | goto out; |
2803 | |
2804 | - state = nfs4_opendata_to_nfs4_state(opendata); |
2805 | + state = _nfs4_opendata_to_nfs4_state(opendata); |
2806 | ret = PTR_ERR(state); |
2807 | if (IS_ERR(state)) |
2808 | goto out; |
2809 | @@ -2737,6 +2737,7 @@ static int _nfs4_open_and_get_state(struct nfs4_opendata *opendata, |
2810 | nfs4_schedule_stateid_recovery(server, state); |
2811 | } |
2812 | out: |
2813 | + nfs4_sequence_free_slot(&opendata->o_res.seq_res); |
2814 | return ret; |
2815 | } |
2816 | |
2817 | diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c |
2818 | index bdbd9e6d1ace..b16a6c036352 100644 |
2819 | --- a/fs/nfsd/nfs4xdr.c |
2820 | +++ b/fs/nfsd/nfs4xdr.c |
2821 | @@ -1536,6 +1536,8 @@ nfsd4_decode_getdeviceinfo(struct nfsd4_compoundargs *argp, |
2822 | gdev->gd_maxcount = be32_to_cpup(p++); |
2823 | num = be32_to_cpup(p++); |
2824 | if (num) { |
2825 | + if (num > 1000) |
2826 | + goto xdr_error; |
2827 | READ_BUF(4 * num); |
2828 | gdev->gd_notify_types = be32_to_cpup(p++); |
2829 | for (i = 1; i < num; i++) { |
2830 | diff --git a/fs/squashfs/cache.c b/fs/squashfs/cache.c |
2831 | index 23813c078cc9..0839efa720b3 100644 |
2832 | --- a/fs/squashfs/cache.c |
2833 | +++ b/fs/squashfs/cache.c |
2834 | @@ -350,6 +350,9 @@ int squashfs_read_metadata(struct super_block *sb, void *buffer, |
2835 | |
2836 | TRACE("Entered squashfs_read_metadata [%llx:%x]\n", *block, *offset); |
2837 | |
2838 | + if (unlikely(length < 0)) |
2839 | + return -EIO; |
2840 | + |
2841 | while (length) { |
2842 | entry = squashfs_cache_get(sb, msblk->block_cache, *block, 0); |
2843 | if (entry->error) { |
2844 | diff --git a/fs/squashfs/file.c b/fs/squashfs/file.c |
2845 | index 13d80947bf9e..fcff2e0487fe 100644 |
2846 | --- a/fs/squashfs/file.c |
2847 | +++ b/fs/squashfs/file.c |
2848 | @@ -194,7 +194,11 @@ static long long read_indexes(struct super_block *sb, int n, |
2849 | } |
2850 | |
2851 | for (i = 0; i < blocks; i++) { |
2852 | - int size = le32_to_cpu(blist[i]); |
2853 | + int size = squashfs_block_size(blist[i]); |
2854 | + if (size < 0) { |
2855 | + err = size; |
2856 | + goto failure; |
2857 | + } |
2858 | block += SQUASHFS_COMPRESSED_SIZE_BLOCK(size); |
2859 | } |
2860 | n -= blocks; |
2861 | @@ -367,7 +371,7 @@ static int read_blocklist(struct inode *inode, int index, u64 *block) |
2862 | sizeof(size)); |
2863 | if (res < 0) |
2864 | return res; |
2865 | - return le32_to_cpu(size); |
2866 | + return squashfs_block_size(size); |
2867 | } |
2868 | |
2869 | /* Copy data into page cache */ |
2870 | diff --git a/fs/squashfs/fragment.c b/fs/squashfs/fragment.c |
2871 | index 0ed6edbc5c71..86ad9a4b8c36 100644 |
2872 | --- a/fs/squashfs/fragment.c |
2873 | +++ b/fs/squashfs/fragment.c |
2874 | @@ -61,9 +61,7 @@ int squashfs_frag_lookup(struct super_block *sb, unsigned int fragment, |
2875 | return size; |
2876 | |
2877 | *fragment_block = le64_to_cpu(fragment_entry.start_block); |
2878 | - size = le32_to_cpu(fragment_entry.size); |
2879 | - |
2880 | - return size; |
2881 | + return squashfs_block_size(fragment_entry.size); |
2882 | } |
2883 | |
2884 | |
2885 | diff --git a/fs/squashfs/squashfs_fs.h b/fs/squashfs/squashfs_fs.h |
2886 | index 506f4ba5b983..e66486366f02 100644 |
2887 | --- a/fs/squashfs/squashfs_fs.h |
2888 | +++ b/fs/squashfs/squashfs_fs.h |
2889 | @@ -129,6 +129,12 @@ |
2890 | |
2891 | #define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK)) |
2892 | |
2893 | +static inline int squashfs_block_size(__le32 raw) |
2894 | +{ |
2895 | + u32 size = le32_to_cpu(raw); |
2896 | + return (size >> 25) ? -EIO : size; |
2897 | +} |
2898 | + |
2899 | /* |
2900 | * Inode number ops. Inodes consist of a compressed block number, and an |
2901 | * uncompressed offset within that block |
2902 | diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h |
2903 | index 2a79882cb68e..2fff10de317d 100644 |
2904 | --- a/include/drm/drm_dp_helper.h |
2905 | +++ b/include/drm/drm_dp_helper.h |
2906 | @@ -345,6 +345,7 @@ |
2907 | # define DP_PSR_FRAME_CAPTURE (1 << 3) |
2908 | # define DP_PSR_SELECTIVE_UPDATE (1 << 4) |
2909 | # define DP_PSR_IRQ_HPD_WITH_CRC_ERRORS (1 << 5) |
2910 | +# define DP_PSR_ENABLE_PSR2 (1 << 6) /* eDP 1.4a */ |
2911 | |
2912 | #define DP_ADAPTER_CTRL 0x1a0 |
2913 | # define DP_ADAPTER_CTRL_FORCE_LOAD_SENSE (1 << 0) |
2914 | diff --git a/include/linux/dma-iommu.h b/include/linux/dma-iommu.h |
2915 | index 32c589062bd9..f30d23011060 100644 |
2916 | --- a/include/linux/dma-iommu.h |
2917 | +++ b/include/linux/dma-iommu.h |
2918 | @@ -17,6 +17,7 @@ |
2919 | #define __DMA_IOMMU_H |
2920 | |
2921 | #ifdef __KERNEL__ |
2922 | +#include <linux/types.h> |
2923 | #include <asm/errno.h> |
2924 | |
2925 | #ifdef CONFIG_IOMMU_DMA |
2926 | diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h |
2927 | index d43ef96bf075..3e4d4f4bccd3 100644 |
2928 | --- a/include/linux/mmc/sdio_ids.h |
2929 | +++ b/include/linux/mmc/sdio_ids.h |
2930 | @@ -34,6 +34,7 @@ |
2931 | #define SDIO_DEVICE_ID_BROADCOM_4335_4339 0x4335 |
2932 | #define SDIO_DEVICE_ID_BROADCOM_4339 0x4339 |
2933 | #define SDIO_DEVICE_ID_BROADCOM_43362 0xa962 |
2934 | +#define SDIO_DEVICE_ID_BROADCOM_43364 0xa9a4 |
2935 | #define SDIO_DEVICE_ID_BROADCOM_43430 0xa9a6 |
2936 | #define SDIO_DEVICE_ID_BROADCOM_4345 0x4345 |
2937 | #define SDIO_DEVICE_ID_BROADCOM_4354 0x4354 |
2938 | diff --git a/include/linux/netfilter/ipset/ip_set_timeout.h b/include/linux/netfilter/ipset/ip_set_timeout.h |
2939 | index 1d6a935c1ac5..8793f5a7b820 100644 |
2940 | --- a/include/linux/netfilter/ipset/ip_set_timeout.h |
2941 | +++ b/include/linux/netfilter/ipset/ip_set_timeout.h |
2942 | @@ -65,8 +65,14 @@ ip_set_timeout_set(unsigned long *timeout, u32 value) |
2943 | static inline u32 |
2944 | ip_set_timeout_get(unsigned long *timeout) |
2945 | { |
2946 | - return *timeout == IPSET_ELEM_PERMANENT ? 0 : |
2947 | - jiffies_to_msecs(*timeout - jiffies)/MSEC_PER_SEC; |
2948 | + u32 t; |
2949 | + |
2950 | + if (*timeout == IPSET_ELEM_PERMANENT) |
2951 | + return 0; |
2952 | + |
2953 | + t = jiffies_to_msecs(*timeout - jiffies)/MSEC_PER_SEC; |
2954 | + /* Zero value in userspace means no timeout */ |
2955 | + return t == 0 ? 1 : t; |
2956 | } |
2957 | |
2958 | #endif /* __KERNEL__ */ |
2959 | diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h |
2960 | index 7b16c5322673..eb4f6456521e 100644 |
2961 | --- a/include/linux/serial_core.h |
2962 | +++ b/include/linux/serial_core.h |
2963 | @@ -344,7 +344,8 @@ struct earlycon_device { |
2964 | }; |
2965 | |
2966 | struct earlycon_id { |
2967 | - char name[16]; |
2968 | + char name[15]; |
2969 | + char name_term; /* In case compiler didn't '\0' term name */ |
2970 | char compatible[128]; |
2971 | int (*setup)(struct earlycon_device *, const char *options); |
2972 | }; |
2973 | diff --git a/include/soc/tegra/mc.h b/include/soc/tegra/mc.h |
2974 | index 44202ff897fd..f759e0918037 100644 |
2975 | --- a/include/soc/tegra/mc.h |
2976 | +++ b/include/soc/tegra/mc.h |
2977 | @@ -99,6 +99,8 @@ struct tegra_mc_soc { |
2978 | u8 client_id_mask; |
2979 | |
2980 | const struct tegra_smmu_soc *smmu; |
2981 | + |
2982 | + u32 intmask; |
2983 | }; |
2984 | |
2985 | struct tegra_mc { |
2986 | diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c |
2987 | index 85d9cac497e4..cd4f41397c7e 100644 |
2988 | --- a/kernel/auditfilter.c |
2989 | +++ b/kernel/auditfilter.c |
2990 | @@ -406,7 +406,7 @@ static int audit_field_valid(struct audit_entry *entry, struct audit_field *f) |
2991 | return -EINVAL; |
2992 | break; |
2993 | case AUDIT_EXE: |
2994 | - if (f->op != Audit_equal) |
2995 | + if (f->op != Audit_not_equal && f->op != Audit_equal) |
2996 | return -EINVAL; |
2997 | if (entry->rule.listnr != AUDIT_FILTER_EXIT) |
2998 | return -EINVAL; |
2999 | diff --git a/kernel/auditsc.c b/kernel/auditsc.c |
3000 | index 2cd5256dbff7..c2aaf539728f 100644 |
3001 | --- a/kernel/auditsc.c |
3002 | +++ b/kernel/auditsc.c |
3003 | @@ -469,6 +469,8 @@ static int audit_filter_rules(struct task_struct *tsk, |
3004 | break; |
3005 | case AUDIT_EXE: |
3006 | result = audit_exe_compare(tsk, rule->exe); |
3007 | + if (f->op == Audit_not_equal) |
3008 | + result = !result; |
3009 | break; |
3010 | case AUDIT_UID: |
3011 | result = audit_uid_comparator(cred->uid, f->op, f->uid); |
3012 | diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c |
3013 | index 076e4a0ff95e..dafa2708ce9e 100644 |
3014 | --- a/kernel/bpf/verifier.c |
3015 | +++ b/kernel/bpf/verifier.c |
3016 | @@ -3225,7 +3225,7 @@ static int replace_map_fd_with_map_ptr(struct bpf_verifier_env *env) |
3017 | /* hold the map. If the program is rejected by verifier, |
3018 | * the map will be released by release_maps() or it |
3019 | * will be used by the valid program until it's unloaded |
3020 | - * and all maps are released in free_bpf_prog_info() |
3021 | + * and all maps are released in free_used_maps() |
3022 | */ |
3023 | map = bpf_map_inc(map, false); |
3024 | if (IS_ERR(map)) { |
3025 | @@ -3629,7 +3629,7 @@ free_log_buf: |
3026 | vfree(log_buf); |
3027 | if (!env->prog->aux->used_maps) |
3028 | /* if we didn't copy map pointers into bpf_prog_info, release |
3029 | - * them now. Otherwise free_bpf_prog_info() will release them. |
3030 | + * them now. Otherwise free_used_maps() will release them. |
3031 | */ |
3032 | release_maps(env); |
3033 | *prog = env->prog; |
3034 | diff --git a/kernel/kcov.c b/kernel/kcov.c |
3035 | index 3883df58aa12..b0ec31493fdc 100644 |
3036 | --- a/kernel/kcov.c |
3037 | +++ b/kernel/kcov.c |
3038 | @@ -103,7 +103,8 @@ static void kcov_put(struct kcov *kcov) |
3039 | |
3040 | void kcov_task_init(struct task_struct *t) |
3041 | { |
3042 | - t->kcov_mode = KCOV_MODE_DISABLED; |
3043 | + WRITE_ONCE(t->kcov_mode, KCOV_MODE_DISABLED); |
3044 | + barrier(); |
3045 | t->kcov_size = 0; |
3046 | t->kcov_area = NULL; |
3047 | t->kcov = NULL; |
3048 | diff --git a/kernel/kthread.c b/kernel/kthread.c |
3049 | index c2c911a106cf..fbc230e41969 100644 |
3050 | --- a/kernel/kthread.c |
3051 | +++ b/kernel/kthread.c |
3052 | @@ -290,8 +290,14 @@ static struct task_struct *__kthread_create_on_node(int (*threadfn)(void *data), |
3053 | task = create->result; |
3054 | if (!IS_ERR(task)) { |
3055 | static const struct sched_param param = { .sched_priority = 0 }; |
3056 | + char name[TASK_COMM_LEN]; |
3057 | |
3058 | - vsnprintf(task->comm, sizeof(task->comm), namefmt, args); |
3059 | + /* |
3060 | + * task is already visible to other tasks, so updating |
3061 | + * COMM must be protected. |
3062 | + */ |
3063 | + vsnprintf(name, sizeof(name), namefmt, args); |
3064 | + set_task_comm(task, name); |
3065 | /* |
3066 | * root may have changed our (kthreadd's) priority or CPU mask. |
3067 | * The kernel thread should not inherit these properties. |
3068 | diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c |
3069 | index ec9ab2f01489..9b8cd7ebf27b 100644 |
3070 | --- a/kernel/stop_machine.c |
3071 | +++ b/kernel/stop_machine.c |
3072 | @@ -36,7 +36,7 @@ struct cpu_stop_done { |
3073 | struct cpu_stopper { |
3074 | struct task_struct *thread; |
3075 | |
3076 | - spinlock_t lock; |
3077 | + raw_spinlock_t lock; |
3078 | bool enabled; /* is this stopper enabled? */ |
3079 | struct list_head works; /* list of pending works */ |
3080 | |
3081 | @@ -78,13 +78,13 @@ static bool cpu_stop_queue_work(unsigned int cpu, struct cpu_stop_work *work) |
3082 | unsigned long flags; |
3083 | bool enabled; |
3084 | |
3085 | - spin_lock_irqsave(&stopper->lock, flags); |
3086 | + raw_spin_lock_irqsave(&stopper->lock, flags); |
3087 | enabled = stopper->enabled; |
3088 | if (enabled) |
3089 | __cpu_stop_queue_work(stopper, work); |
3090 | else if (work->done) |
3091 | cpu_stop_signal_done(work->done); |
3092 | - spin_unlock_irqrestore(&stopper->lock, flags); |
3093 | + raw_spin_unlock_irqrestore(&stopper->lock, flags); |
3094 | |
3095 | return enabled; |
3096 | } |
3097 | @@ -231,8 +231,8 @@ static int cpu_stop_queue_two_works(int cpu1, struct cpu_stop_work *work1, |
3098 | struct cpu_stopper *stopper2 = per_cpu_ptr(&cpu_stopper, cpu2); |
3099 | int err; |
3100 | retry: |
3101 | - spin_lock_irq(&stopper1->lock); |
3102 | - spin_lock_nested(&stopper2->lock, SINGLE_DEPTH_NESTING); |
3103 | + raw_spin_lock_irq(&stopper1->lock); |
3104 | + raw_spin_lock_nested(&stopper2->lock, SINGLE_DEPTH_NESTING); |
3105 | |
3106 | err = -ENOENT; |
3107 | if (!stopper1->enabled || !stopper2->enabled) |
3108 | @@ -255,8 +255,8 @@ retry: |
3109 | __cpu_stop_queue_work(stopper1, work1); |
3110 | __cpu_stop_queue_work(stopper2, work2); |
3111 | unlock: |
3112 | - spin_unlock(&stopper2->lock); |
3113 | - spin_unlock_irq(&stopper1->lock); |
3114 | + raw_spin_unlock(&stopper2->lock); |
3115 | + raw_spin_unlock_irq(&stopper1->lock); |
3116 | |
3117 | if (unlikely(err == -EDEADLK)) { |
3118 | while (stop_cpus_in_progress) |
3119 | @@ -448,9 +448,9 @@ static int cpu_stop_should_run(unsigned int cpu) |
3120 | unsigned long flags; |
3121 | int run; |
3122 | |
3123 | - spin_lock_irqsave(&stopper->lock, flags); |
3124 | + raw_spin_lock_irqsave(&stopper->lock, flags); |
3125 | run = !list_empty(&stopper->works); |
3126 | - spin_unlock_irqrestore(&stopper->lock, flags); |
3127 | + raw_spin_unlock_irqrestore(&stopper->lock, flags); |
3128 | return run; |
3129 | } |
3130 | |
3131 | @@ -461,13 +461,13 @@ static void cpu_stopper_thread(unsigned int cpu) |
3132 | |
3133 | repeat: |
3134 | work = NULL; |
3135 | - spin_lock_irq(&stopper->lock); |
3136 | + raw_spin_lock_irq(&stopper->lock); |
3137 | if (!list_empty(&stopper->works)) { |
3138 | work = list_first_entry(&stopper->works, |
3139 | struct cpu_stop_work, list); |
3140 | list_del_init(&work->list); |
3141 | } |
3142 | - spin_unlock_irq(&stopper->lock); |
3143 | + raw_spin_unlock_irq(&stopper->lock); |
3144 | |
3145 | if (work) { |
3146 | cpu_stop_fn_t fn = work->fn; |
3147 | @@ -541,7 +541,7 @@ static int __init cpu_stop_init(void) |
3148 | for_each_possible_cpu(cpu) { |
3149 | struct cpu_stopper *stopper = &per_cpu(cpu_stopper, cpu); |
3150 | |
3151 | - spin_lock_init(&stopper->lock); |
3152 | + raw_spin_lock_init(&stopper->lock); |
3153 | INIT_LIST_HEAD(&stopper->works); |
3154 | } |
3155 | |
3156 | diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c |
3157 | index 88f398af57fa..8819944bbcbf 100644 |
3158 | --- a/kernel/trace/trace_events_trigger.c |
3159 | +++ b/kernel/trace/trace_events_trigger.c |
3160 | @@ -678,6 +678,8 @@ event_trigger_callback(struct event_command *cmd_ops, |
3161 | goto out_free; |
3162 | |
3163 | out_reg: |
3164 | + /* Up the trigger_data count to make sure reg doesn't free it on failure */ |
3165 | + event_trigger_init(trigger_ops, trigger_data); |
3166 | ret = cmd_ops->reg(glob, trigger_ops, trigger_data, file); |
3167 | /* |
3168 | * The above returns on success the # of functions enabled, |
3169 | @@ -685,11 +687,13 @@ event_trigger_callback(struct event_command *cmd_ops, |
3170 | * Consider no functions a failure too. |
3171 | */ |
3172 | if (!ret) { |
3173 | + cmd_ops->unreg(glob, trigger_ops, trigger_data, file); |
3174 | ret = -ENOENT; |
3175 | - goto out_free; |
3176 | - } else if (ret < 0) |
3177 | - goto out_free; |
3178 | - ret = 0; |
3179 | + } else if (ret > 0) |
3180 | + ret = 0; |
3181 | + |
3182 | + /* Down the counter of trigger_data or free it if not used anymore */ |
3183 | + event_trigger_free(trigger_ops, trigger_data); |
3184 | out: |
3185 | return ret; |
3186 | |
3187 | @@ -1385,6 +1389,9 @@ int event_enable_trigger_func(struct event_command *cmd_ops, |
3188 | goto out; |
3189 | } |
3190 | |
3191 | + /* Up the trigger_data count to make sure nothing frees it on failure */ |
3192 | + event_trigger_init(trigger_ops, trigger_data); |
3193 | + |
3194 | if (trigger) { |
3195 | number = strsep(&trigger, ":"); |
3196 | |
3197 | @@ -1435,6 +1442,7 @@ int event_enable_trigger_func(struct event_command *cmd_ops, |
3198 | goto out_disable; |
3199 | /* Just return zero, not the number of enabled functions */ |
3200 | ret = 0; |
3201 | + event_trigger_free(trigger_ops, trigger_data); |
3202 | out: |
3203 | return ret; |
3204 | |
3205 | @@ -1445,7 +1453,7 @@ int event_enable_trigger_func(struct event_command *cmd_ops, |
3206 | out_free: |
3207 | if (cmd_ops->set_filter) |
3208 | cmd_ops->set_filter(NULL, trigger_data, NULL); |
3209 | - kfree(trigger_data); |
3210 | + event_trigger_free(trigger_ops, trigger_data); |
3211 | kfree(enable_data); |
3212 | goto out; |
3213 | } |
3214 | diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c |
3215 | index ea3ed03fed7e..3b4cd44ad323 100644 |
3216 | --- a/kernel/trace/trace_kprobe.c |
3217 | +++ b/kernel/trace/trace_kprobe.c |
3218 | @@ -359,11 +359,10 @@ static struct trace_kprobe *find_trace_kprobe(const char *event, |
3219 | static int |
3220 | enable_trace_kprobe(struct trace_kprobe *tk, struct trace_event_file *file) |
3221 | { |
3222 | + struct event_file_link *link = NULL; |
3223 | int ret = 0; |
3224 | |
3225 | if (file) { |
3226 | - struct event_file_link *link; |
3227 | - |
3228 | link = kmalloc(sizeof(*link), GFP_KERNEL); |
3229 | if (!link) { |
3230 | ret = -ENOMEM; |
3231 | @@ -383,6 +382,18 @@ enable_trace_kprobe(struct trace_kprobe *tk, struct trace_event_file *file) |
3232 | else |
3233 | ret = enable_kprobe(&tk->rp.kp); |
3234 | } |
3235 | + |
3236 | + if (ret) { |
3237 | + if (file) { |
3238 | + /* Notice the if is true on not WARN() */ |
3239 | + if (!WARN_ON_ONCE(!link)) |
3240 | + list_del_rcu(&link->list); |
3241 | + kfree(link); |
3242 | + tk->tp.flags &= ~TP_FLAG_TRACE; |
3243 | + } else { |
3244 | + tk->tp.flags &= ~TP_FLAG_PROFILE; |
3245 | + } |
3246 | + } |
3247 | out: |
3248 | return ret; |
3249 | } |
3250 | diff --git a/mm/slub.c b/mm/slub.c |
3251 | index edc79ca3c6d5..e0ce5dec84ba 100644 |
3252 | --- a/mm/slub.c |
3253 | +++ b/mm/slub.c |
3254 | @@ -673,7 +673,7 @@ void object_err(struct kmem_cache *s, struct page *page, |
3255 | print_trailer(s, page, object); |
3256 | } |
3257 | |
3258 | -static void slab_err(struct kmem_cache *s, struct page *page, |
3259 | +static __printf(3, 4) void slab_err(struct kmem_cache *s, struct page *page, |
3260 | const char *fmt, ...) |
3261 | { |
3262 | va_list args; |
3263 | diff --git a/mm/vmalloc.c b/mm/vmalloc.c |
3264 | index 195de42bea1f..fa598162dbf0 100644 |
3265 | --- a/mm/vmalloc.c |
3266 | +++ b/mm/vmalloc.c |
3267 | @@ -1494,7 +1494,7 @@ static void __vunmap(const void *addr, int deallocate_pages) |
3268 | addr)) |
3269 | return; |
3270 | |
3271 | - area = remove_vm_area(addr); |
3272 | + area = find_vmap_area((unsigned long)addr)->vm; |
3273 | if (unlikely(!area)) { |
3274 | WARN(1, KERN_ERR "Trying to vfree() nonexistent vm area (%p)\n", |
3275 | addr); |
3276 | @@ -1504,6 +1504,7 @@ static void __vunmap(const void *addr, int deallocate_pages) |
3277 | debug_check_no_locks_freed(addr, get_vm_area_size(area)); |
3278 | debug_check_no_obj_freed(addr, get_vm_area_size(area)); |
3279 | |
3280 | + remove_vm_area(addr); |
3281 | if (deallocate_pages) { |
3282 | int i; |
3283 | |
3284 | diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c |
3285 | index b23464d9c538..d278b06459ac 100644 |
3286 | --- a/net/ipv4/ipconfig.c |
3287 | +++ b/net/ipv4/ipconfig.c |
3288 | @@ -779,6 +779,11 @@ static void __init ic_bootp_init_ext(u8 *e) |
3289 | */ |
3290 | static inline void __init ic_bootp_init(void) |
3291 | { |
3292 | + /* Re-initialise all name servers to NONE, in case any were set via the |
3293 | + * "ip=" or "nfsaddrs=" kernel command line parameters: any IP addresses |
3294 | + * specified there will already have been decoded but are no longer |
3295 | + * needed |
3296 | + */ |
3297 | ic_nameservers_predef(); |
3298 | |
3299 | dev_add_pack(&bootp_packet_type); |
3300 | @@ -1401,6 +1406,13 @@ static int __init ip_auto_config(void) |
3301 | int err; |
3302 | unsigned int i; |
3303 | |
3304 | + /* Initialise all name servers to NONE (but only if the "ip=" or |
3305 | + * "nfsaddrs=" kernel command line parameters weren't decoded, otherwise |
3306 | + * we'll overwrite the IP addresses specified there) |
3307 | + */ |
3308 | + if (ic_set_manually == 0) |
3309 | + ic_nameservers_predef(); |
3310 | + |
3311 | #ifdef CONFIG_PROC_FS |
3312 | proc_create("pnp", S_IRUGO, init_net.proc_net, &pnp_seq_fops); |
3313 | #endif /* CONFIG_PROC_FS */ |
3314 | @@ -1621,6 +1633,7 @@ static int __init ip_auto_config_setup(char *addrs) |
3315 | return 1; |
3316 | } |
3317 | |
3318 | + /* Initialise all name servers to NONE */ |
3319 | ic_nameservers_predef(); |
3320 | |
3321 | /* Parse string for static IP assignment. */ |
3322 | diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c |
3323 | index 762f31fb5b67..a3fb30f5a1a9 100644 |
3324 | --- a/net/netfilter/nf_tables_api.c |
3325 | +++ b/net/netfilter/nf_tables_api.c |
3326 | @@ -2476,12 +2476,13 @@ struct nft_set *nf_tables_set_lookup_byid(const struct net *net, |
3327 | u32 id = ntohl(nla_get_be32(nla)); |
3328 | |
3329 | list_for_each_entry(trans, &net->nft.commit_list, list) { |
3330 | - struct nft_set *set = nft_trans_set(trans); |
3331 | + if (trans->msg_type == NFT_MSG_NEWSET) { |
3332 | + struct nft_set *set = nft_trans_set(trans); |
3333 | |
3334 | - if (trans->msg_type == NFT_MSG_NEWSET && |
3335 | - id == nft_trans_set_id(trans) && |
3336 | - nft_active_genmask(set, genmask)) |
3337 | - return set; |
3338 | + if (id == nft_trans_set_id(trans) && |
3339 | + nft_active_genmask(set, genmask)) |
3340 | + return set; |
3341 | + } |
3342 | } |
3343 | return ERR_PTR(-ENOENT); |
3344 | } |
3345 | diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c |
3346 | index a71f906b4f7a..9652541c4d43 100644 |
3347 | --- a/security/integrity/ima/ima_main.c |
3348 | +++ b/security/integrity/ima/ima_main.c |
3349 | @@ -379,6 +379,7 @@ int ima_read_file(struct file *file, enum kernel_read_file_id read_id) |
3350 | |
3351 | static int read_idmap[READING_MAX_ID] = { |
3352 | [READING_FIRMWARE] = FIRMWARE_CHECK, |
3353 | + [READING_FIRMWARE_PREALLOC_BUFFER] = FIRMWARE_CHECK, |
3354 | [READING_MODULE] = MODULE_CHECK, |
3355 | [READING_KEXEC_IMAGE] = KEXEC_KERNEL_CHECK, |
3356 | [READING_KEXEC_INITRAMFS] = KEXEC_INITRAMFS_CHECK, |
3357 | diff --git a/sound/pci/emu10k1/emupcm.c b/sound/pci/emu10k1/emupcm.c |
3358 | index 37be1e14d756..0d2bb30d9f7e 100644 |
3359 | --- a/sound/pci/emu10k1/emupcm.c |
3360 | +++ b/sound/pci/emu10k1/emupcm.c |
3361 | @@ -1850,7 +1850,9 @@ int snd_emu10k1_pcm_efx(struct snd_emu10k1 *emu, int device) |
3362 | if (!kctl) |
3363 | return -ENOMEM; |
3364 | kctl->id.device = device; |
3365 | - snd_ctl_add(emu->card, kctl); |
3366 | + err = snd_ctl_add(emu->card, kctl); |
3367 | + if (err < 0) |
3368 | + return err; |
3369 | |
3370 | snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(emu->pci), 64*1024, 64*1024); |
3371 | |
3372 | diff --git a/sound/pci/emu10k1/memory.c b/sound/pci/emu10k1/memory.c |
3373 | index 4f1f69be1865..8c778fa33031 100644 |
3374 | --- a/sound/pci/emu10k1/memory.c |
3375 | +++ b/sound/pci/emu10k1/memory.c |
3376 | @@ -237,13 +237,13 @@ __found_pages: |
3377 | static int is_valid_page(struct snd_emu10k1 *emu, dma_addr_t addr) |
3378 | { |
3379 | if (addr & ~emu->dma_mask) { |
3380 | - dev_err(emu->card->dev, |
3381 | + dev_err_ratelimited(emu->card->dev, |
3382 | "max memory size is 0x%lx (addr = 0x%lx)!!\n", |
3383 | emu->dma_mask, (unsigned long)addr); |
3384 | return 0; |
3385 | } |
3386 | if (addr & (EMUPAGESIZE-1)) { |
3387 | - dev_err(emu->card->dev, "page is not aligned\n"); |
3388 | + dev_err_ratelimited(emu->card->dev, "page is not aligned\n"); |
3389 | return 0; |
3390 | } |
3391 | return 1; |
3392 | @@ -334,7 +334,7 @@ snd_emu10k1_alloc_pages(struct snd_emu10k1 *emu, struct snd_pcm_substream *subst |
3393 | else |
3394 | addr = snd_pcm_sgbuf_get_addr(substream, ofs); |
3395 | if (! is_valid_page(emu, addr)) { |
3396 | - dev_err(emu->card->dev, |
3397 | + dev_err_ratelimited(emu->card->dev, |
3398 | "emu: failure page = %d\n", idx); |
3399 | mutex_unlock(&hdr->block_mutex); |
3400 | return NULL; |
3401 | diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c |
3402 | index a178e0d03088..8561f60b4284 100644 |
3403 | --- a/sound/pci/fm801.c |
3404 | +++ b/sound/pci/fm801.c |
3405 | @@ -1068,11 +1068,19 @@ static int snd_fm801_mixer(struct fm801 *chip) |
3406 | if ((err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97_sec)) < 0) |
3407 | return err; |
3408 | } |
3409 | - for (i = 0; i < FM801_CONTROLS; i++) |
3410 | - snd_ctl_add(chip->card, snd_ctl_new1(&snd_fm801_controls[i], chip)); |
3411 | + for (i = 0; i < FM801_CONTROLS; i++) { |
3412 | + err = snd_ctl_add(chip->card, |
3413 | + snd_ctl_new1(&snd_fm801_controls[i], chip)); |
3414 | + if (err < 0) |
3415 | + return err; |
3416 | + } |
3417 | if (chip->multichannel) { |
3418 | - for (i = 0; i < FM801_CONTROLS_MULTI; i++) |
3419 | - snd_ctl_add(chip->card, snd_ctl_new1(&snd_fm801_controls_multi[i], chip)); |
3420 | + for (i = 0; i < FM801_CONTROLS_MULTI; i++) { |
3421 | + err = snd_ctl_add(chip->card, |
3422 | + snd_ctl_new1(&snd_fm801_controls_multi[i], chip)); |
3423 | + if (err < 0) |
3424 | + return err; |
3425 | + } |
3426 | } |
3427 | return 0; |
3428 | } |
3429 | diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c |
3430 | index 9ec4dba8a793..280999961226 100644 |
3431 | --- a/sound/pci/hda/patch_ca0132.c |
3432 | +++ b/sound/pci/hda/patch_ca0132.c |
3433 | @@ -38,6 +38,10 @@ |
3434 | /* Enable this to see controls for tuning purpose. */ |
3435 | /*#define ENABLE_TUNING_CONTROLS*/ |
3436 | |
3437 | +#ifdef ENABLE_TUNING_CONTROLS |
3438 | +#include <sound/tlv.h> |
3439 | +#endif |
3440 | + |
3441 | #define FLOAT_ZERO 0x00000000 |
3442 | #define FLOAT_ONE 0x3f800000 |
3443 | #define FLOAT_TWO 0x40000000 |
3444 | @@ -3067,8 +3071,8 @@ static int equalizer_ctl_put(struct snd_kcontrol *kcontrol, |
3445 | return 1; |
3446 | } |
3447 | |
3448 | -static const DECLARE_TLV_DB_SCALE(voice_focus_db_scale, 2000, 100, 0); |
3449 | -static const DECLARE_TLV_DB_SCALE(eq_db_scale, -2400, 100, 0); |
3450 | +static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(voice_focus_db_scale, 2000, 100, 0); |
3451 | +static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(eq_db_scale, -2400, 100, 0); |
3452 | |
3453 | static int add_tuning_control(struct hda_codec *codec, |
3454 | hda_nid_t pnid, hda_nid_t nid, |
3455 | diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c |
3456 | index 80088c98ce27..20680a490897 100644 |
3457 | --- a/sound/soc/soc-pcm.c |
3458 | +++ b/sound/soc/soc-pcm.c |
3459 | @@ -1793,8 +1793,10 @@ int dpcm_be_dai_shutdown(struct snd_soc_pcm_runtime *fe, int stream) |
3460 | continue; |
3461 | |
3462 | if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_FREE) && |
3463 | - (be->dpcm[stream].state != SND_SOC_DPCM_STATE_OPEN)) |
3464 | - continue; |
3465 | + (be->dpcm[stream].state != SND_SOC_DPCM_STATE_OPEN)) { |
3466 | + soc_pcm_hw_free(be_substream); |
3467 | + be->dpcm[stream].state = SND_SOC_DPCM_STATE_HW_FREE; |
3468 | + } |
3469 | |
3470 | dev_dbg(be->dev, "ASoC: close BE %s\n", |
3471 | be->dai_link->name); |
3472 | diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c |
3473 | index c5dfe82beb24..e6ac7b9b4648 100644 |
3474 | --- a/sound/usb/pcm.c |
3475 | +++ b/sound/usb/pcm.c |
3476 | @@ -1310,7 +1310,7 @@ static void retire_capture_urb(struct snd_usb_substream *subs, |
3477 | if (bytes % (runtime->sample_bits >> 3) != 0) { |
3478 | int oldbytes = bytes; |
3479 | bytes = frames * stride; |
3480 | - dev_warn(&subs->dev->dev, |
3481 | + dev_warn_ratelimited(&subs->dev->dev, |
3482 | "Corrected urb data len. %d->%d\n", |
3483 | oldbytes, bytes); |
3484 | } |
3485 | diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y |
3486 | index 879115f93edc..98a4205a5f8a 100644 |
3487 | --- a/tools/perf/util/parse-events.y |
3488 | +++ b/tools/perf/util/parse-events.y |
3489 | @@ -68,6 +68,7 @@ static void inc_group_count(struct list_head *list, |
3490 | %type <num> value_sym |
3491 | %type <head> event_config |
3492 | %type <head> opt_event_config |
3493 | +%type <head> opt_pmu_config |
3494 | %type <term> event_term |
3495 | %type <head> event_pmu |
3496 | %type <head> event_legacy_symbol |
3497 | @@ -219,7 +220,7 @@ event_def: event_pmu | |
3498 | event_bpf_file |
3499 | |
3500 | event_pmu: |
3501 | -PE_NAME opt_event_config |
3502 | +PE_NAME opt_pmu_config |
3503 | { |
3504 | struct parse_events_evlist *data = _data; |
3505 | struct list_head *list; |
3506 | @@ -482,6 +483,17 @@ opt_event_config: |
3507 | $$ = NULL; |
3508 | } |
3509 | |
3510 | +opt_pmu_config: |
3511 | +'/' event_config '/' |
3512 | +{ |
3513 | + $$ = $2; |
3514 | +} |
3515 | +| |
3516 | +'/' '/' |
3517 | +{ |
3518 | + $$ = NULL; |
3519 | +} |
3520 | + |
3521 | start_terms: event_config |
3522 | { |
3523 | struct parse_events_terms *data = _data; |
3524 | diff --git a/tools/testing/selftests/intel_pstate/run.sh b/tools/testing/selftests/intel_pstate/run.sh |
3525 | index 7868c106b8b1..b62876f41eca 100755 |
3526 | --- a/tools/testing/selftests/intel_pstate/run.sh |
3527 | +++ b/tools/testing/selftests/intel_pstate/run.sh |
3528 | @@ -48,11 +48,12 @@ function run_test () { |
3529 | |
3530 | echo "sleeping for 5 seconds" |
3531 | sleep 5 |
3532 | - num_freqs=$(cat /proc/cpuinfo | grep MHz | sort -u | wc -l) |
3533 | - if [ $num_freqs -le 2 ]; then |
3534 | - cat /proc/cpuinfo | grep MHz | sort -u | tail -1 > /tmp/result.$1 |
3535 | + grep MHz /proc/cpuinfo | sort -u > /tmp/result.freqs |
3536 | + num_freqs=$(wc -l /tmp/result.freqs | awk ' { print $1 } ') |
3537 | + if [ $num_freqs -ge 2 ]; then |
3538 | + tail -n 1 /tmp/result.freqs > /tmp/result.$1 |
3539 | else |
3540 | - cat /proc/cpuinfo | grep MHz | sort -u > /tmp/result.$1 |
3541 | + cp /tmp/result.freqs /tmp/result.$1 |
3542 | fi |
3543 | ./msr 0 >> /tmp/result.$1 |
3544 | |
3545 | @@ -82,21 +83,20 @@ _max_freq=$(cpupower frequency-info -l | tail -1 | awk ' { print $2 } ') |
3546 | max_freq=$(($_max_freq / 1000)) |
3547 | |
3548 | |
3549 | -for freq in `seq $max_freq -100 $min_freq` |
3550 | +[ $EVALUATE_ONLY -eq 0 ] && for freq in `seq $max_freq -100 $min_freq` |
3551 | do |
3552 | echo "Setting maximum frequency to $freq" |
3553 | cpupower frequency-set -g powersave --max=${freq}MHz >& /dev/null |
3554 | - [ $EVALUATE_ONLY -eq 0 ] && run_test $freq |
3555 | + run_test $freq |
3556 | done |
3557 | |
3558 | -echo "==============================================================================" |
3559 | +[ $EVALUATE_ONLY -eq 0 ] && cpupower frequency-set -g powersave --max=${max_freq}MHz >& /dev/null |
3560 | |
3561 | +echo "==============================================================================" |
3562 | echo "The marketing frequency of the cpu is $mkt_freq MHz" |
3563 | echo "The maximum frequency of the cpu is $max_freq MHz" |
3564 | echo "The minimum frequency of the cpu is $min_freq MHz" |
3565 | |
3566 | -cpupower frequency-set -g powersave --max=${max_freq}MHz >& /dev/null |
3567 | - |
3568 | # make a pretty table |
3569 | echo "Target Actual Difference MSR(0x199) max_perf_pct" |
3570 | for freq in `seq $max_freq -100 $min_freq` |
3571 | @@ -104,10 +104,6 @@ do |
3572 | result_freq=$(cat /tmp/result.${freq} | grep "cpu MHz" | awk ' { print $4 } ' | awk -F "." ' { print $1 } ') |
3573 | msr=$(cat /tmp/result.${freq} | grep "msr" | awk ' { print $3 } ') |
3574 | max_perf_pct=$(cat /tmp/result.${freq} | grep "max_perf_pct" | awk ' { print $2 } ' ) |
3575 | - if [ $result_freq -eq $freq ]; then |
3576 | - echo " $freq $result_freq 0 $msr $(($max_perf_pct*3300))" |
3577 | - else |
3578 | - echo " $freq $result_freq $(($result_freq-$freq)) $msr $(($max_perf_pct*$max_freq))" |
3579 | - fi |
3580 | + echo " $freq $result_freq $(($result_freq-$freq)) $msr $(($max_perf_pct*$max_freq))" |
3581 | done |
3582 | exit 0 |
3583 | diff --git a/tools/usb/usbip/src/usbip_detach.c b/tools/usb/usbip/src/usbip_detach.c |
3584 | index 9db9d21bb2ec..6a8db858caa5 100644 |
3585 | --- a/tools/usb/usbip/src/usbip_detach.c |
3586 | +++ b/tools/usb/usbip/src/usbip_detach.c |
3587 | @@ -43,7 +43,7 @@ void usbip_detach_usage(void) |
3588 | |
3589 | static int detach_port(char *port) |
3590 | { |
3591 | - int ret; |
3592 | + int ret = 0; |
3593 | uint8_t portnum; |
3594 | char path[PATH_MAX+1]; |
3595 | |
3596 | @@ -73,9 +73,12 @@ static int detach_port(char *port) |
3597 | } |
3598 | |
3599 | ret = usbip_vhci_detach_device(portnum); |
3600 | - if (ret < 0) |
3601 | - return -1; |
3602 | + if (ret < 0) { |
3603 | + ret = -1; |
3604 | + goto call_driver_close; |
3605 | + } |
3606 | |
3607 | +call_driver_close: |
3608 | usbip_vhci_driver_close(); |
3609 | |
3610 | return ret; |