Contents of /trunk/kernel-alx/patches-4.9/0305-4.9.206-all-fixes.patch
Parent Directory | Revision Log
Revision 3580 -
(show annotations)
(download)
Thu Aug 13 10:21:21 2020 UTC (4 years, 1 month ago) by niro
File size: 121616 byte(s)
Thu Aug 13 10:21:21 2020 UTC (4 years, 1 month ago) by niro
File size: 121616 byte(s)
linux-206
1 | diff --git a/Documentation/hid/uhid.txt b/Documentation/hid/uhid.txt |
2 | index c8656dd029a9..958fff945304 100644 |
3 | --- a/Documentation/hid/uhid.txt |
4 | +++ b/Documentation/hid/uhid.txt |
5 | @@ -160,7 +160,7 @@ them but you should handle them according to your needs. |
6 | UHID_OUTPUT: |
7 | This is sent if the HID device driver wants to send raw data to the I/O |
8 | device on the interrupt channel. You should read the payload and forward it to |
9 | - the device. The payload is of type "struct uhid_data_req". |
10 | + the device. The payload is of type "struct uhid_output_req". |
11 | This may be received even though you haven't received UHID_OPEN, yet. |
12 | |
13 | UHID_GET_REPORT: |
14 | diff --git a/Makefile b/Makefile |
15 | index fc1a58ef7e56..55a91bc3d8f9 100644 |
16 | --- a/Makefile |
17 | +++ b/Makefile |
18 | @@ -1,6 +1,6 @@ |
19 | VERSION = 4 |
20 | PATCHLEVEL = 9 |
21 | -SUBLEVEL = 205 |
22 | +SUBLEVEL = 206 |
23 | EXTRAVERSION = |
24 | NAME = Roaring Lionus |
25 | |
26 | diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug |
27 | index d83f7c369e51..a5625430bef6 100644 |
28 | --- a/arch/arm/Kconfig.debug |
29 | +++ b/arch/arm/Kconfig.debug |
30 | @@ -1340,21 +1340,21 @@ config DEBUG_OMAP2PLUS_UART |
31 | depends on ARCH_OMAP2PLUS |
32 | |
33 | config DEBUG_IMX_UART_PORT |
34 | - int "i.MX Debug UART Port Selection" if DEBUG_IMX1_UART || \ |
35 | - DEBUG_IMX25_UART || \ |
36 | - DEBUG_IMX21_IMX27_UART || \ |
37 | - DEBUG_IMX31_UART || \ |
38 | - DEBUG_IMX35_UART || \ |
39 | - DEBUG_IMX50_UART || \ |
40 | - DEBUG_IMX51_UART || \ |
41 | - DEBUG_IMX53_UART || \ |
42 | - DEBUG_IMX6Q_UART || \ |
43 | - DEBUG_IMX6SL_UART || \ |
44 | - DEBUG_IMX6SX_UART || \ |
45 | - DEBUG_IMX6UL_UART || \ |
46 | - DEBUG_IMX7D_UART |
47 | + int "i.MX Debug UART Port Selection" |
48 | + depends on DEBUG_IMX1_UART || \ |
49 | + DEBUG_IMX25_UART || \ |
50 | + DEBUG_IMX21_IMX27_UART || \ |
51 | + DEBUG_IMX31_UART || \ |
52 | + DEBUG_IMX35_UART || \ |
53 | + DEBUG_IMX50_UART || \ |
54 | + DEBUG_IMX51_UART || \ |
55 | + DEBUG_IMX53_UART || \ |
56 | + DEBUG_IMX6Q_UART || \ |
57 | + DEBUG_IMX6SL_UART || \ |
58 | + DEBUG_IMX6SX_UART || \ |
59 | + DEBUG_IMX6UL_UART || \ |
60 | + DEBUG_IMX7D_UART |
61 | default 1 |
62 | - depends on ARCH_MXC |
63 | help |
64 | Choose UART port on which kernel low-level debug messages |
65 | should be output. |
66 | diff --git a/arch/arm/boot/dts/imx53-voipac-dmm-668.dtsi b/arch/arm/boot/dts/imx53-voipac-dmm-668.dtsi |
67 | index ba689fbd0e41..301cf8d45947 100644 |
68 | --- a/arch/arm/boot/dts/imx53-voipac-dmm-668.dtsi |
69 | +++ b/arch/arm/boot/dts/imx53-voipac-dmm-668.dtsi |
70 | @@ -17,12 +17,8 @@ |
71 | |
72 | memory@70000000 { |
73 | device_type = "memory"; |
74 | - reg = <0x70000000 0x20000000>; |
75 | - }; |
76 | - |
77 | - memory@b0000000 { |
78 | - device_type = "memory"; |
79 | - reg = <0xb0000000 0x20000000>; |
80 | + reg = <0x70000000 0x20000000>, |
81 | + <0xb0000000 0x20000000>; |
82 | }; |
83 | |
84 | regulators { |
85 | diff --git a/arch/arm/mach-ks8695/board-acs5k.c b/arch/arm/mach-ks8695/board-acs5k.c |
86 | index e4d709c8ed32..76d3083f1f63 100644 |
87 | --- a/arch/arm/mach-ks8695/board-acs5k.c |
88 | +++ b/arch/arm/mach-ks8695/board-acs5k.c |
89 | @@ -92,7 +92,7 @@ static struct i2c_board_info acs5k_i2c_devs[] __initdata = { |
90 | }, |
91 | }; |
92 | |
93 | -static void acs5k_i2c_init(void) |
94 | +static void __init acs5k_i2c_init(void) |
95 | { |
96 | /* The gpio interface */ |
97 | platform_device_register(&acs5k_i2c_device); |
98 | diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S |
99 | index db6ff1944c41..3b10b9395960 100644 |
100 | --- a/arch/arm64/kernel/head.S |
101 | +++ b/arch/arm64/kernel/head.S |
102 | @@ -686,6 +686,7 @@ secondary_startup: |
103 | /* |
104 | * Common entry point for secondary CPUs. |
105 | */ |
106 | + bl __cpu_secondary_check52bitva |
107 | bl __cpu_setup // initialise processor |
108 | bl __enable_mmu |
109 | ldr x8, =__secondary_switched |
110 | @@ -759,6 +760,31 @@ ENTRY(__enable_mmu) |
111 | ret |
112 | ENDPROC(__enable_mmu) |
113 | |
114 | +ENTRY(__cpu_secondary_check52bitva) |
115 | +#ifdef CONFIG_ARM64_52BIT_VA |
116 | + ldr_l x0, vabits_user |
117 | + cmp x0, #52 |
118 | + b.ne 2f |
119 | + |
120 | + mrs_s x0, SYS_ID_AA64MMFR2_EL1 |
121 | + and x0, x0, #(0xf << ID_AA64MMFR2_LVA_SHIFT) |
122 | + cbnz x0, 2f |
123 | + |
124 | + adr_l x0, va52mismatch |
125 | + mov w1, #1 |
126 | + strb w1, [x0] |
127 | + dmb sy |
128 | + dc ivac, x0 // Invalidate potentially stale cache line |
129 | + |
130 | + update_early_cpu_boot_status CPU_STUCK_IN_KERNEL, x0, x1 |
131 | +1: wfe |
132 | + wfi |
133 | + b 1b |
134 | + |
135 | +#endif |
136 | +2: ret |
137 | +ENDPROC(__cpu_secondary_check52bitva) |
138 | + |
139 | __no_granule_support: |
140 | /* Indicate that this CPU can't boot and is stuck in the kernel */ |
141 | update_early_cpu_boot_status CPU_STUCK_IN_KERNEL, x1, x2 |
142 | diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c |
143 | index cfd33f18f437..b2d6de9f6f4f 100644 |
144 | --- a/arch/arm64/kernel/smp.c |
145 | +++ b/arch/arm64/kernel/smp.c |
146 | @@ -136,6 +136,7 @@ static int boot_secondary(unsigned int cpu, struct task_struct *idle) |
147 | } |
148 | |
149 | static DECLARE_COMPLETION(cpu_running); |
150 | +bool va52mismatch __ro_after_init; |
151 | |
152 | int __cpu_up(unsigned int cpu, struct task_struct *idle) |
153 | { |
154 | @@ -164,10 +165,15 @@ int __cpu_up(unsigned int cpu, struct task_struct *idle) |
155 | |
156 | if (!cpu_online(cpu)) { |
157 | pr_crit("CPU%u: failed to come online\n", cpu); |
158 | + |
159 | + if (IS_ENABLED(CONFIG_ARM64_52BIT_VA) && va52mismatch) |
160 | + pr_crit("CPU%u: does not support 52-bit VAs\n", cpu); |
161 | + |
162 | ret = -EIO; |
163 | } |
164 | } else { |
165 | pr_err("CPU%u: failed to boot: %d\n", cpu, ret); |
166 | + return ret; |
167 | } |
168 | |
169 | secondary_data.stack = NULL; |
170 | diff --git a/arch/microblaze/Makefile b/arch/microblaze/Makefile |
171 | index 740f2b82a182..491676a6cde5 100644 |
172 | --- a/arch/microblaze/Makefile |
173 | +++ b/arch/microblaze/Makefile |
174 | @@ -75,19 +75,21 @@ archclean: |
175 | |
176 | linux.bin linux.bin.gz linux.bin.ub: vmlinux |
177 | $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ |
178 | + @echo 'Kernel: $(boot)/$@ is ready' ' (#'`cat .version`')' |
179 | |
180 | simpleImage.%: vmlinux |
181 | $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ |
182 | + @echo 'Kernel: $(boot)/$@ is ready' ' (#'`cat .version`')' |
183 | |
184 | define archhelp |
185 | echo '* linux.bin - Create raw binary' |
186 | echo ' linux.bin.gz - Create compressed raw binary' |
187 | echo ' linux.bin.ub - Create U-Boot wrapped raw binary' |
188 | - echo ' simpleImage.<dt> - ELF image with $(arch)/boot/dts/<dt>.dts linked in' |
189 | - echo ' - stripped elf with fdt blob' |
190 | - echo ' simpleImage.<dt>.unstrip - full ELF image with fdt blob' |
191 | - echo ' *_defconfig - Select default config from arch/microblaze/configs' |
192 | - echo '' |
193 | + echo ' simpleImage.<dt> - Create the following images with <dt>.dtb linked in' |
194 | + echo ' simpleImage.<dt> : raw image' |
195 | + echo ' simpleImage.<dt>.ub : raw image with U-Boot header' |
196 | + echo ' simpleImage.<dt>.unstrip: ELF (identical to vmlinux)' |
197 | + echo ' simpleImage.<dt>.strip : stripped ELF' |
198 | echo ' Targets with <dt> embed a device tree blob inside the image' |
199 | echo ' These targets support board with firmware that does not' |
200 | echo ' support passing a device tree directly. Replace <dt> with the' |
201 | diff --git a/arch/microblaze/boot/Makefile b/arch/microblaze/boot/Makefile |
202 | index 0f3fe6a151dc..22bed08ec7f2 100644 |
203 | --- a/arch/microblaze/boot/Makefile |
204 | +++ b/arch/microblaze/boot/Makefile |
205 | @@ -8,15 +8,12 @@ OBJCOPYFLAGS := -R .note -R .comment -R .note.gnu.build-id -O binary |
206 | |
207 | $(obj)/linux.bin: vmlinux FORCE |
208 | $(call if_changed,objcopy) |
209 | - @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' |
210 | |
211 | $(obj)/linux.bin.ub: $(obj)/linux.bin FORCE |
212 | $(call if_changed,uimage) |
213 | - @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' |
214 | |
215 | $(obj)/linux.bin.gz: $(obj)/linux.bin FORCE |
216 | $(call if_changed,gzip) |
217 | - @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' |
218 | |
219 | quiet_cmd_cp = CP $< $@$2 |
220 | cmd_cp = cat $< >$@$2 || (rm -f $@ && echo false) |
221 | @@ -34,6 +31,5 @@ $(obj)/simpleImage.%: vmlinux FORCE |
222 | $(call if_changed,objcopy) |
223 | $(call if_changed,uimage) |
224 | $(call if_changed,strip,.strip) |
225 | - @echo 'Kernel: $(UIMAGE_OUT) is ready' ' (#'`cat .version`')' |
226 | |
227 | clean-files += simpleImage.*.unstrip linux.bin.ub dts/*.dtb |
228 | diff --git a/arch/openrisc/kernel/entry.S b/arch/openrisc/kernel/entry.S |
229 | index fec8bf97d806..c17e8451d997 100644 |
230 | --- a/arch/openrisc/kernel/entry.S |
231 | +++ b/arch/openrisc/kernel/entry.S |
232 | @@ -179,7 +179,7 @@ handler: ;\ |
233 | * occured. in fact they never do. if you need them use |
234 | * values saved on stack (for SPR_EPC, SPR_ESR) or content |
235 | * of r4 (for SPR_EEAR). for details look at EXCEPTION_HANDLE() |
236 | - * in 'arch/or32/kernel/head.S' |
237 | + * in 'arch/openrisc/kernel/head.S' |
238 | */ |
239 | |
240 | /* =====================================================[ exceptions] === */ |
241 | diff --git a/arch/openrisc/kernel/head.S b/arch/openrisc/kernel/head.S |
242 | index f14793306b03..98dd6860bc0b 100644 |
243 | --- a/arch/openrisc/kernel/head.S |
244 | +++ b/arch/openrisc/kernel/head.S |
245 | @@ -1596,7 +1596,7 @@ _string_esr_irq_bug: |
246 | |
247 | /* |
248 | * .data section should be page aligned |
249 | - * (look into arch/or32/kernel/vmlinux.lds) |
250 | + * (look into arch/openrisc/kernel/vmlinux.lds.S) |
251 | */ |
252 | .section .data,"aw" |
253 | .align 8192 |
254 | diff --git a/arch/powerpc/boot/dts/bamboo.dts b/arch/powerpc/boot/dts/bamboo.dts |
255 | index aa68911f6560..084b82ba7493 100644 |
256 | --- a/arch/powerpc/boot/dts/bamboo.dts |
257 | +++ b/arch/powerpc/boot/dts/bamboo.dts |
258 | @@ -268,8 +268,10 @@ |
259 | /* Outbound ranges, one memory and one IO, |
260 | * later cannot be changed. Chip supports a second |
261 | * IO range but we don't use it for now |
262 | + * The chip also supports a larger memory range but |
263 | + * it's not naturally aligned, so our code will break |
264 | */ |
265 | - ranges = <0x02000000 0x00000000 0xa0000000 0x00000000 0xa0000000 0x00000000 0x40000000 |
266 | + ranges = <0x02000000 0x00000000 0xa0000000 0x00000000 0xa0000000 0x00000000 0x20000000 |
267 | 0x02000000 0x00000000 0x00000000 0x00000000 0xe0000000 0x00000000 0x00100000 |
268 | 0x01000000 0x00000000 0x00000000 0x00000000 0xe8000000 0x00000000 0x00010000>; |
269 | |
270 | diff --git a/arch/powerpc/include/asm/cputable.h b/arch/powerpc/include/asm/cputable.h |
271 | index 4e54282c29b4..cf51aea47510 100644 |
272 | --- a/arch/powerpc/include/asm/cputable.h |
273 | +++ b/arch/powerpc/include/asm/cputable.h |
274 | @@ -44,6 +44,7 @@ extern int machine_check_e500(struct pt_regs *regs); |
275 | extern int machine_check_e200(struct pt_regs *regs); |
276 | extern int machine_check_47x(struct pt_regs *regs); |
277 | int machine_check_8xx(struct pt_regs *regs); |
278 | +int machine_check_83xx(struct pt_regs *regs); |
279 | |
280 | extern void cpu_down_flush_e500v2(void); |
281 | extern void cpu_down_flush_e500mc(void); |
282 | diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h |
283 | index ceb168cd3b81..26aeeaad3267 100644 |
284 | --- a/arch/powerpc/include/asm/reg.h |
285 | +++ b/arch/powerpc/include/asm/reg.h |
286 | @@ -663,6 +663,8 @@ |
287 | #define SRR1_PROGTRAP 0x00020000 /* Trap */ |
288 | #define SRR1_PROGADDR 0x00010000 /* SRR0 contains subsequent addr */ |
289 | |
290 | +#define SRR1_MCE_MCP 0x00080000 /* Machine check signal caused interrupt */ |
291 | + |
292 | #define SPRN_HSRR0 0x13A /* Save/Restore Register 0 */ |
293 | #define SPRN_HSRR1 0x13B /* Save/Restore Register 1 */ |
294 | #define HSRR1_DENORM 0x00100000 /* Denorm exception */ |
295 | diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c |
296 | index 6a82ef039c50..7471ed48f41f 100644 |
297 | --- a/arch/powerpc/kernel/cputable.c |
298 | +++ b/arch/powerpc/kernel/cputable.c |
299 | @@ -1162,6 +1162,7 @@ static struct cpu_spec __initdata cpu_specs[] = { |
300 | .machine_check = machine_check_generic, |
301 | .platform = "ppc603", |
302 | }, |
303 | +#ifdef CONFIG_PPC_83xx |
304 | { /* e300c1 (a 603e core, plus some) on 83xx */ |
305 | .pvr_mask = 0x7fff0000, |
306 | .pvr_value = 0x00830000, |
307 | @@ -1172,7 +1173,7 @@ static struct cpu_spec __initdata cpu_specs[] = { |
308 | .icache_bsize = 32, |
309 | .dcache_bsize = 32, |
310 | .cpu_setup = __setup_cpu_603, |
311 | - .machine_check = machine_check_generic, |
312 | + .machine_check = machine_check_83xx, |
313 | .platform = "ppc603", |
314 | }, |
315 | { /* e300c2 (an e300c1 core, plus some, minus FPU) on 83xx */ |
316 | @@ -1186,7 +1187,7 @@ static struct cpu_spec __initdata cpu_specs[] = { |
317 | .icache_bsize = 32, |
318 | .dcache_bsize = 32, |
319 | .cpu_setup = __setup_cpu_603, |
320 | - .machine_check = machine_check_generic, |
321 | + .machine_check = machine_check_83xx, |
322 | .platform = "ppc603", |
323 | }, |
324 | { /* e300c3 (e300c1, plus one IU, half cache size) on 83xx */ |
325 | @@ -1200,7 +1201,7 @@ static struct cpu_spec __initdata cpu_specs[] = { |
326 | .icache_bsize = 32, |
327 | .dcache_bsize = 32, |
328 | .cpu_setup = __setup_cpu_603, |
329 | - .machine_check = machine_check_generic, |
330 | + .machine_check = machine_check_83xx, |
331 | .num_pmcs = 4, |
332 | .oprofile_cpu_type = "ppc/e300", |
333 | .oprofile_type = PPC_OPROFILE_FSL_EMB, |
334 | @@ -1217,12 +1218,13 @@ static struct cpu_spec __initdata cpu_specs[] = { |
335 | .icache_bsize = 32, |
336 | .dcache_bsize = 32, |
337 | .cpu_setup = __setup_cpu_603, |
338 | - .machine_check = machine_check_generic, |
339 | + .machine_check = machine_check_83xx, |
340 | .num_pmcs = 4, |
341 | .oprofile_cpu_type = "ppc/e300", |
342 | .oprofile_type = PPC_OPROFILE_FSL_EMB, |
343 | .platform = "ppc603", |
344 | }, |
345 | +#endif |
346 | { /* default match, we assume split I/D cache & TB (non-601)... */ |
347 | .pvr_mask = 0x00000000, |
348 | .pvr_value = 0x00000000, |
349 | diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c |
350 | index b0245bed6f54..b868f07c4246 100644 |
351 | --- a/arch/powerpc/kernel/prom.c |
352 | +++ b/arch/powerpc/kernel/prom.c |
353 | @@ -128,7 +128,7 @@ static void __init move_device_tree(void) |
354 | p = __va(memblock_alloc(size, PAGE_SIZE)); |
355 | memcpy(p, initial_boot_params, size); |
356 | initial_boot_params = p; |
357 | - DBG("Moved device tree to 0x%p\n", p); |
358 | + DBG("Moved device tree to 0x%px\n", p); |
359 | } |
360 | |
361 | DBG("<- move_device_tree\n"); |
362 | @@ -651,7 +651,7 @@ void __init early_init_devtree(void *params) |
363 | { |
364 | phys_addr_t limit; |
365 | |
366 | - DBG(" -> early_init_devtree(%p)\n", params); |
367 | + DBG(" -> early_init_devtree(%px)\n", params); |
368 | |
369 | /* Too early to BUG_ON(), do it by hand */ |
370 | if (!early_init_dt_verify(params)) |
371 | @@ -711,7 +711,7 @@ void __init early_init_devtree(void *params) |
372 | memblock_allow_resize(); |
373 | memblock_dump_all(); |
374 | |
375 | - DBG("Phys. mem: %llx\n", memblock_phys_mem_size()); |
376 | + DBG("Phys. mem: %llx\n", (unsigned long long)memblock_phys_mem_size()); |
377 | |
378 | /* We may need to relocate the flat tree, do it now. |
379 | * FIXME .. and the initrd too? */ |
380 | diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c |
381 | index 9376e8e53bfa..2791f568bdb2 100644 |
382 | --- a/arch/powerpc/mm/fault.c |
383 | +++ b/arch/powerpc/mm/fault.c |
384 | @@ -521,21 +521,22 @@ void bad_page_fault(struct pt_regs *regs, unsigned long address, int sig) |
385 | switch (regs->trap) { |
386 | case 0x300: |
387 | case 0x380: |
388 | - printk(KERN_ALERT "Unable to handle kernel paging request for " |
389 | - "data at address 0x%08lx\n", regs->dar); |
390 | + pr_alert("BUG: %s at 0x%08lx\n", |
391 | + regs->dar < PAGE_SIZE ? "Kernel NULL pointer dereference" : |
392 | + "Unable to handle kernel data access", regs->dar); |
393 | break; |
394 | case 0x400: |
395 | case 0x480: |
396 | - printk(KERN_ALERT "Unable to handle kernel paging request for " |
397 | - "instruction fetch\n"); |
398 | + pr_alert("BUG: Unable to handle kernel instruction fetch%s", |
399 | + regs->nip < PAGE_SIZE ? " (NULL pointer?)\n" : "\n"); |
400 | break; |
401 | case 0x600: |
402 | - printk(KERN_ALERT "Unable to handle kernel paging request for " |
403 | - "unaligned access at address 0x%08lx\n", regs->dar); |
404 | + pr_alert("BUG: Unable to handle kernel unaligned access at 0x%08lx\n", |
405 | + regs->dar); |
406 | break; |
407 | default: |
408 | - printk(KERN_ALERT "Unable to handle kernel paging request for " |
409 | - "unknown fault\n"); |
410 | + pr_alert("BUG: Unable to handle unknown paging fault at 0x%08lx\n", |
411 | + regs->dar); |
412 | break; |
413 | } |
414 | printk(KERN_ALERT "Faulting instruction address: 0x%08lx\n", |
415 | diff --git a/arch/powerpc/mm/ppc_mmu_32.c b/arch/powerpc/mm/ppc_mmu_32.c |
416 | index 2a049fb8523d..96c52271e9c2 100644 |
417 | --- a/arch/powerpc/mm/ppc_mmu_32.c |
418 | +++ b/arch/powerpc/mm/ppc_mmu_32.c |
419 | @@ -52,7 +52,7 @@ struct batrange { /* stores address ranges mapped by BATs */ |
420 | phys_addr_t v_block_mapped(unsigned long va) |
421 | { |
422 | int b; |
423 | - for (b = 0; b < 4; ++b) |
424 | + for (b = 0; b < ARRAY_SIZE(bat_addrs); ++b) |
425 | if (va >= bat_addrs[b].start && va < bat_addrs[b].limit) |
426 | return bat_addrs[b].phys + (va - bat_addrs[b].start); |
427 | return 0; |
428 | @@ -64,7 +64,7 @@ phys_addr_t v_block_mapped(unsigned long va) |
429 | unsigned long p_block_mapped(phys_addr_t pa) |
430 | { |
431 | int b; |
432 | - for (b = 0; b < 4; ++b) |
433 | + for (b = 0; b < ARRAY_SIZE(bat_addrs); ++b) |
434 | if (pa >= bat_addrs[b].phys |
435 | && pa < (bat_addrs[b].limit-bat_addrs[b].start) |
436 | +bat_addrs[b].phys) |
437 | diff --git a/arch/powerpc/platforms/83xx/misc.c b/arch/powerpc/platforms/83xx/misc.c |
438 | index d75c9816a5c9..2b6589fe812d 100644 |
439 | --- a/arch/powerpc/platforms/83xx/misc.c |
440 | +++ b/arch/powerpc/platforms/83xx/misc.c |
441 | @@ -14,6 +14,7 @@ |
442 | #include <linux/of_platform.h> |
443 | #include <linux/pci.h> |
444 | |
445 | +#include <asm/debug.h> |
446 | #include <asm/io.h> |
447 | #include <asm/hw_irq.h> |
448 | #include <asm/ipic.h> |
449 | @@ -150,3 +151,19 @@ void __init mpc83xx_setup_arch(void) |
450 | |
451 | mpc83xx_setup_pci(); |
452 | } |
453 | + |
454 | +int machine_check_83xx(struct pt_regs *regs) |
455 | +{ |
456 | + u32 mask = 1 << (31 - IPIC_MCP_WDT); |
457 | + |
458 | + if (!(regs->msr & SRR1_MCE_MCP) || !(ipic_get_mcp_status() & mask)) |
459 | + return machine_check_generic(regs); |
460 | + ipic_clear_mcp_status(mask); |
461 | + |
462 | + if (debugger_fault_handler(regs)) |
463 | + return 1; |
464 | + |
465 | + die("Watchdog NMI Reset", regs, 0); |
466 | + |
467 | + return 1; |
468 | +} |
469 | diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c |
470 | index 2354ea51e871..6189c4cf56c3 100644 |
471 | --- a/arch/powerpc/platforms/powernv/eeh-powernv.c |
472 | +++ b/arch/powerpc/platforms/powernv/eeh-powernv.c |
473 | @@ -546,8 +546,8 @@ static void pnv_eeh_get_phb_diag(struct eeh_pe *pe) |
474 | static int pnv_eeh_get_phb_state(struct eeh_pe *pe) |
475 | { |
476 | struct pnv_phb *phb = pe->phb->private_data; |
477 | - u8 fstate; |
478 | - __be16 pcierr; |
479 | + u8 fstate = 0; |
480 | + __be16 pcierr = 0; |
481 | s64 rc; |
482 | int result = 0; |
483 | |
484 | @@ -585,8 +585,8 @@ static int pnv_eeh_get_phb_state(struct eeh_pe *pe) |
485 | static int pnv_eeh_get_pe_state(struct eeh_pe *pe) |
486 | { |
487 | struct pnv_phb *phb = pe->phb->private_data; |
488 | - u8 fstate; |
489 | - __be16 pcierr; |
490 | + u8 fstate = 0; |
491 | + __be16 pcierr = 0; |
492 | s64 rc; |
493 | int result; |
494 | |
495 | diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c |
496 | index 8015e40bc7ee..3ec673b4ca6c 100644 |
497 | --- a/arch/powerpc/platforms/powernv/pci-ioda.c |
498 | +++ b/arch/powerpc/platforms/powernv/pci-ioda.c |
499 | @@ -599,8 +599,8 @@ static int pnv_ioda_unfreeze_pe(struct pnv_phb *phb, int pe_no, int opt) |
500 | static int pnv_ioda_get_pe_state(struct pnv_phb *phb, int pe_no) |
501 | { |
502 | struct pnv_ioda_pe *slave, *pe; |
503 | - u8 fstate, state; |
504 | - __be16 pcierr; |
505 | + u8 fstate = 0, state; |
506 | + __be16 pcierr = 0; |
507 | s64 rc; |
508 | |
509 | /* Sanity check on PE number */ |
510 | diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c |
511 | index db7b8020f68e..98cc8ba07c23 100644 |
512 | --- a/arch/powerpc/platforms/powernv/pci.c |
513 | +++ b/arch/powerpc/platforms/powernv/pci.c |
514 | @@ -482,8 +482,8 @@ static void pnv_pci_handle_eeh_config(struct pnv_phb *phb, u32 pe_no) |
515 | static void pnv_pci_config_check_eeh(struct pci_dn *pdn) |
516 | { |
517 | struct pnv_phb *phb = pdn->phb->private_data; |
518 | - u8 fstate; |
519 | - __be16 pcierr; |
520 | + u8 fstate = 0; |
521 | + __be16 pcierr = 0; |
522 | unsigned int pe_no; |
523 | s64 rc; |
524 | |
525 | diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c |
526 | index 999b04819d69..5abb8e2239a5 100644 |
527 | --- a/arch/powerpc/platforms/pseries/dlpar.c |
528 | +++ b/arch/powerpc/platforms/pseries/dlpar.c |
529 | @@ -63,6 +63,10 @@ static struct property *dlpar_parse_cc_property(struct cc_workarea *ccwa) |
530 | |
531 | name = (char *)ccwa + be32_to_cpu(ccwa->name_offset); |
532 | prop->name = kstrdup(name, GFP_KERNEL); |
533 | + if (!prop->name) { |
534 | + dlpar_free_cc_property(prop); |
535 | + return NULL; |
536 | + } |
537 | |
538 | prop->length = be32_to_cpu(ccwa->prop_length); |
539 | value = (char *)ccwa + be32_to_cpu(ccwa->prop_offset); |
540 | diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c |
541 | index 656bbbd731d0..6c12b02f4a61 100644 |
542 | --- a/arch/powerpc/platforms/pseries/hotplug-memory.c |
543 | +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c |
544 | @@ -294,6 +294,7 @@ static u32 lookup_lmb_associativity_index(struct of_drconf_cell *lmb) |
545 | |
546 | aa_index = find_aa_index(dr_node, ala_prop, lmb_assoc); |
547 | |
548 | + of_node_put(dr_node); |
549 | dlpar_free_cc_nodes(lmb_node); |
550 | return aa_index; |
551 | } |
552 | diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c |
553 | index 687e8b8bf5c6..899288b71145 100644 |
554 | --- a/arch/powerpc/xmon/xmon.c |
555 | +++ b/arch/powerpc/xmon/xmon.c |
556 | @@ -3043,7 +3043,7 @@ void dump_segments(void) |
557 | |
558 | printf("sr0-15 ="); |
559 | for (i = 0; i < 16; ++i) |
560 | - printf(" %x", mfsrin(i)); |
561 | + printf(" %x", mfsrin(i << 28)); |
562 | printf("\n"); |
563 | } |
564 | #endif |
565 | diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c |
566 | index 37c254677ccd..d8fd2eadcda7 100644 |
567 | --- a/arch/s390/kvm/kvm-s390.c |
568 | +++ b/arch/s390/kvm/kvm-s390.c |
569 | @@ -319,19 +319,30 @@ static void kvm_s390_cpu_feat_init(void) |
570 | |
571 | int kvm_arch_init(void *opaque) |
572 | { |
573 | + int rc; |
574 | + |
575 | kvm_s390_dbf = debug_register("kvm-trace", 32, 1, 7 * sizeof(long)); |
576 | if (!kvm_s390_dbf) |
577 | return -ENOMEM; |
578 | |
579 | if (debug_register_view(kvm_s390_dbf, &debug_sprintf_view)) { |
580 | - debug_unregister(kvm_s390_dbf); |
581 | - return -ENOMEM; |
582 | + rc = -ENOMEM; |
583 | + goto out_debug_unreg; |
584 | } |
585 | |
586 | kvm_s390_cpu_feat_init(); |
587 | |
588 | /* Register floating interrupt controller interface. */ |
589 | - return kvm_register_device_ops(&kvm_flic_ops, KVM_DEV_TYPE_FLIC); |
590 | + rc = kvm_register_device_ops(&kvm_flic_ops, KVM_DEV_TYPE_FLIC); |
591 | + if (rc) { |
592 | + pr_err("Failed to register FLIC rc=%d\n", rc); |
593 | + goto out_debug_unreg; |
594 | + } |
595 | + return 0; |
596 | + |
597 | +out_debug_unreg: |
598 | + debug_unregister(kvm_s390_dbf); |
599 | + return rc; |
600 | } |
601 | |
602 | void kvm_arch_exit(void) |
603 | diff --git a/arch/s390/mm/gup.c b/arch/s390/mm/gup.c |
604 | index 97fc449a7470..cf045f56581e 100644 |
605 | --- a/arch/s390/mm/gup.c |
606 | +++ b/arch/s390/mm/gup.c |
607 | @@ -38,7 +38,8 @@ static inline int gup_pte_range(pmd_t *pmdp, pmd_t pmd, unsigned long addr, |
608 | VM_BUG_ON(!pfn_valid(pte_pfn(pte))); |
609 | page = pte_page(pte); |
610 | head = compound_head(page); |
611 | - if (!page_cache_get_speculative(head)) |
612 | + if (WARN_ON_ONCE(page_ref_count(head) < 0) |
613 | + || !page_cache_get_speculative(head)) |
614 | return 0; |
615 | if (unlikely(pte_val(pte) != pte_val(*ptep))) { |
616 | put_page(head); |
617 | @@ -76,7 +77,8 @@ static inline int gup_huge_pmd(pmd_t *pmdp, pmd_t pmd, unsigned long addr, |
618 | refs++; |
619 | } while (addr += PAGE_SIZE, addr != end); |
620 | |
621 | - if (!page_cache_add_speculative(head, refs)) { |
622 | + if (WARN_ON_ONCE(page_ref_count(head) < 0) |
623 | + || !page_cache_add_speculative(head, refs)) { |
624 | *nr -= refs; |
625 | return 0; |
626 | } |
627 | @@ -150,7 +152,8 @@ static int gup_huge_pud(pud_t *pudp, pud_t pud, unsigned long addr, |
628 | refs++; |
629 | } while (addr += PAGE_SIZE, addr != end); |
630 | |
631 | - if (!page_cache_add_speculative(head, refs)) { |
632 | + if (WARN_ON_ONCE(page_ref_count(head) < 0) |
633 | + || !page_cache_add_speculative(head, refs)) { |
634 | *nr -= refs; |
635 | return 0; |
636 | } |
637 | diff --git a/arch/um/Kconfig.debug b/arch/um/Kconfig.debug |
638 | index 68205fd3b08c..6ae7f0f434a9 100644 |
639 | --- a/arch/um/Kconfig.debug |
640 | +++ b/arch/um/Kconfig.debug |
641 | @@ -18,6 +18,7 @@ config GPROF |
642 | config GCOV |
643 | bool "Enable gcov support" |
644 | depends on DEBUG_INFO |
645 | + depends on !KCOV |
646 | help |
647 | This option allows developers to retrieve coverage data from a UML |
648 | session. |
649 | diff --git a/arch/x86/mm/gup.c b/arch/x86/mm/gup.c |
650 | index d7db45bdfb3b..82f727fbbbd2 100644 |
651 | --- a/arch/x86/mm/gup.c |
652 | +++ b/arch/x86/mm/gup.c |
653 | @@ -202,9 +202,12 @@ static int __gup_device_huge_pmd(pmd_t pmd, unsigned long addr, |
654 | undo_dev_pagemap(nr, nr_start, pages); |
655 | return 0; |
656 | } |
657 | + if (unlikely(!try_get_page(page))) { |
658 | + put_dev_pagemap(pgmap); |
659 | + return 0; |
660 | + } |
661 | SetPageReferenced(page); |
662 | pages[*nr] = page; |
663 | - get_page(page); |
664 | put_dev_pagemap(pgmap); |
665 | (*nr)++; |
666 | pfn++; |
667 | @@ -230,6 +233,8 @@ static noinline int gup_huge_pmd(pmd_t pmd, unsigned long addr, |
668 | |
669 | refs = 0; |
670 | head = pmd_page(pmd); |
671 | + if (WARN_ON_ONCE(page_ref_count(head) <= 0)) |
672 | + return 0; |
673 | page = head + ((addr & ~PMD_MASK) >> PAGE_SHIFT); |
674 | do { |
675 | VM_BUG_ON_PAGE(compound_head(page) != head, page); |
676 | @@ -289,6 +294,8 @@ static noinline int gup_huge_pud(pud_t pud, unsigned long addr, |
677 | |
678 | refs = 0; |
679 | head = pud_page(pud); |
680 | + if (WARN_ON_ONCE(page_ref_count(head) <= 0)) |
681 | + return 0; |
682 | page = head + ((addr & ~PUD_MASK) >> PAGE_SHIFT); |
683 | do { |
684 | VM_BUG_ON_PAGE(compound_head(page) != head, page); |
685 | diff --git a/crypto/crypto_user.c b/crypto/crypto_user.c |
686 | index c90a1727cd2c..60cf7d163731 100644 |
687 | --- a/crypto/crypto_user.c |
688 | +++ b/crypto/crypto_user.c |
689 | @@ -277,30 +277,33 @@ drop_alg: |
690 | |
691 | static int crypto_dump_report(struct sk_buff *skb, struct netlink_callback *cb) |
692 | { |
693 | - struct crypto_alg *alg; |
694 | + const size_t start_pos = cb->args[0]; |
695 | + size_t pos = 0; |
696 | struct crypto_dump_info info; |
697 | - int err; |
698 | - |
699 | - if (cb->args[0]) |
700 | - goto out; |
701 | - |
702 | - cb->args[0] = 1; |
703 | + struct crypto_alg *alg; |
704 | + int res; |
705 | |
706 | info.in_skb = cb->skb; |
707 | info.out_skb = skb; |
708 | info.nlmsg_seq = cb->nlh->nlmsg_seq; |
709 | info.nlmsg_flags = NLM_F_MULTI; |
710 | |
711 | + down_read(&crypto_alg_sem); |
712 | list_for_each_entry(alg, &crypto_alg_list, cra_list) { |
713 | - err = crypto_report_alg(alg, &info); |
714 | - if (err) |
715 | - goto out_err; |
716 | + if (pos >= start_pos) { |
717 | + res = crypto_report_alg(alg, &info); |
718 | + if (res == -EMSGSIZE) |
719 | + break; |
720 | + if (res) |
721 | + goto out; |
722 | + } |
723 | + pos++; |
724 | } |
725 | - |
726 | + cb->args[0] = pos; |
727 | + res = skb->len; |
728 | out: |
729 | - return skb->len; |
730 | -out_err: |
731 | - return err; |
732 | + up_read(&crypto_alg_sem); |
733 | + return res; |
734 | } |
735 | |
736 | static int crypto_dump_report_done(struct netlink_callback *cb) |
737 | @@ -483,7 +486,7 @@ static int crypto_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) |
738 | if ((type == (CRYPTO_MSG_GETALG - CRYPTO_MSG_BASE) && |
739 | (nlh->nlmsg_flags & NLM_F_DUMP))) { |
740 | struct crypto_alg *alg; |
741 | - u16 dump_alloc = 0; |
742 | + unsigned long dump_alloc = 0; |
743 | |
744 | if (link->dump == NULL) |
745 | return -EINVAL; |
746 | @@ -491,16 +494,16 @@ static int crypto_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) |
747 | down_read(&crypto_alg_sem); |
748 | list_for_each_entry(alg, &crypto_alg_list, cra_list) |
749 | dump_alloc += CRYPTO_REPORT_MAXSIZE; |
750 | + up_read(&crypto_alg_sem); |
751 | |
752 | { |
753 | struct netlink_dump_control c = { |
754 | .dump = link->dump, |
755 | .done = link->done, |
756 | - .min_dump_alloc = dump_alloc, |
757 | + .min_dump_alloc = min(dump_alloc, 65535UL), |
758 | }; |
759 | err = netlink_dump_start(crypto_nlsk, skb, nlh, &c); |
760 | } |
761 | - up_read(&crypto_alg_sem); |
762 | |
763 | return err; |
764 | } |
765 | diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c |
766 | index 8e38249311bd..a9158858f54c 100644 |
767 | --- a/drivers/acpi/acpi_lpss.c |
768 | +++ b/drivers/acpi/acpi_lpss.c |
769 | @@ -448,12 +448,7 @@ static int acpi_lpss_create_device(struct acpi_device *adev, |
770 | * have _PS0 and _PS3 without _PSC (and no power resources), so |
771 | * acpi_bus_init_power() will assume that the BIOS has put them into D0. |
772 | */ |
773 | - ret = acpi_device_fix_up_power(adev); |
774 | - if (ret) { |
775 | - /* Skip the device, but continue the namespace scan. */ |
776 | - ret = 0; |
777 | - goto err_out; |
778 | - } |
779 | + acpi_device_fix_up_power(adev); |
780 | |
781 | adev->driver_data = pdata; |
782 | pdev = acpi_create_platform_device(adev, dev_desc->properties); |
783 | diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c |
784 | index 0375c6024062..a6e3c8dc2be4 100644 |
785 | --- a/drivers/acpi/apei/ghes.c |
786 | +++ b/drivers/acpi/apei/ghes.c |
787 | @@ -203,40 +203,40 @@ static int ghes_estatus_pool_init(void) |
788 | return 0; |
789 | } |
790 | |
791 | -static void ghes_estatus_pool_free_chunk_page(struct gen_pool *pool, |
792 | +static void ghes_estatus_pool_free_chunk(struct gen_pool *pool, |
793 | struct gen_pool_chunk *chunk, |
794 | void *data) |
795 | { |
796 | - free_page(chunk->start_addr); |
797 | + vfree((void *)chunk->start_addr); |
798 | } |
799 | |
800 | static void ghes_estatus_pool_exit(void) |
801 | { |
802 | gen_pool_for_each_chunk(ghes_estatus_pool, |
803 | - ghes_estatus_pool_free_chunk_page, NULL); |
804 | + ghes_estatus_pool_free_chunk, NULL); |
805 | gen_pool_destroy(ghes_estatus_pool); |
806 | } |
807 | |
808 | static int ghes_estatus_pool_expand(unsigned long len) |
809 | { |
810 | - unsigned long i, pages, size, addr; |
811 | - int ret; |
812 | + unsigned long size, addr; |
813 | |
814 | ghes_estatus_pool_size_request += PAGE_ALIGN(len); |
815 | size = gen_pool_size(ghes_estatus_pool); |
816 | if (size >= ghes_estatus_pool_size_request) |
817 | return 0; |
818 | - pages = (ghes_estatus_pool_size_request - size) / PAGE_SIZE; |
819 | - for (i = 0; i < pages; i++) { |
820 | - addr = __get_free_page(GFP_KERNEL); |
821 | - if (!addr) |
822 | - return -ENOMEM; |
823 | - ret = gen_pool_add(ghes_estatus_pool, addr, PAGE_SIZE, -1); |
824 | - if (ret) |
825 | - return ret; |
826 | - } |
827 | |
828 | - return 0; |
829 | + addr = (unsigned long)vmalloc(PAGE_ALIGN(len)); |
830 | + if (!addr) |
831 | + return -ENOMEM; |
832 | + |
833 | + /* |
834 | + * New allocation must be visible in all pgd before it can be found by |
835 | + * an NMI allocating from the pool. |
836 | + */ |
837 | + vmalloc_sync_all(); |
838 | + |
839 | + return gen_pool_add(ghes_estatus_pool, addr, PAGE_ALIGN(len), -1); |
840 | } |
841 | |
842 | static struct ghes *ghes_new(struct acpi_hest_generic *generic) |
843 | diff --git a/drivers/base/platform.c b/drivers/base/platform.c |
844 | index 14ff40371f01..f90b1b9bbad0 100644 |
845 | --- a/drivers/base/platform.c |
846 | +++ b/drivers/base/platform.c |
847 | @@ -27,6 +27,7 @@ |
848 | #include <linux/clk/clk-conf.h> |
849 | #include <linux/limits.h> |
850 | #include <linux/property.h> |
851 | +#include <linux/kmemleak.h> |
852 | |
853 | #include "base.h" |
854 | #include "power/power.h" |
855 | @@ -516,6 +517,8 @@ struct platform_device *platform_device_register_full( |
856 | if (!pdev->dev.dma_mask) |
857 | goto err; |
858 | |
859 | + kmemleak_ignore(pdev->dev.dma_mask); |
860 | + |
861 | *pdev->dev.dma_mask = pdevinfo->dma_mask; |
862 | pdev->dev.coherent_dma_mask = pdevinfo->dma_mask; |
863 | } |
864 | diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c |
865 | index 83482721bc01..f5c24459fc5c 100644 |
866 | --- a/drivers/block/drbd/drbd_main.c |
867 | +++ b/drivers/block/drbd/drbd_main.c |
868 | @@ -793,7 +793,6 @@ int __drbd_send_protocol(struct drbd_connection *connection, enum drbd_packet cm |
869 | |
870 | if (nc->tentative && connection->agreed_pro_version < 92) { |
871 | rcu_read_unlock(); |
872 | - mutex_unlock(&sock->mutex); |
873 | drbd_err(connection, "--dry-run is not supported by peer"); |
874 | return -EOPNOTSUPP; |
875 | } |
876 | diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c |
877 | index abee91940a36..b809f325c2be 100644 |
878 | --- a/drivers/block/drbd/drbd_nl.c |
879 | +++ b/drivers/block/drbd/drbd_nl.c |
880 | @@ -1508,6 +1508,30 @@ static void sanitize_disk_conf(struct drbd_device *device, struct disk_conf *dis |
881 | } |
882 | } |
883 | |
884 | +static int disk_opts_check_al_size(struct drbd_device *device, struct disk_conf *dc) |
885 | +{ |
886 | + int err = -EBUSY; |
887 | + |
888 | + if (device->act_log && |
889 | + device->act_log->nr_elements == dc->al_extents) |
890 | + return 0; |
891 | + |
892 | + drbd_suspend_io(device); |
893 | + /* If IO completion is currently blocked, we would likely wait |
894 | + * "forever" for the activity log to become unused. So we don't. */ |
895 | + if (atomic_read(&device->ap_bio_cnt)) |
896 | + goto out; |
897 | + |
898 | + wait_event(device->al_wait, lc_try_lock(device->act_log)); |
899 | + drbd_al_shrink(device); |
900 | + err = drbd_check_al_size(device, dc); |
901 | + lc_unlock(device->act_log); |
902 | + wake_up(&device->al_wait); |
903 | +out: |
904 | + drbd_resume_io(device); |
905 | + return err; |
906 | +} |
907 | + |
908 | int drbd_adm_disk_opts(struct sk_buff *skb, struct genl_info *info) |
909 | { |
910 | struct drbd_config_context adm_ctx; |
911 | @@ -1570,15 +1594,12 @@ int drbd_adm_disk_opts(struct sk_buff *skb, struct genl_info *info) |
912 | } |
913 | } |
914 | |
915 | - drbd_suspend_io(device); |
916 | - wait_event(device->al_wait, lc_try_lock(device->act_log)); |
917 | - drbd_al_shrink(device); |
918 | - err = drbd_check_al_size(device, new_disk_conf); |
919 | - lc_unlock(device->act_log); |
920 | - wake_up(&device->al_wait); |
921 | - drbd_resume_io(device); |
922 | - |
923 | + err = disk_opts_check_al_size(device, new_disk_conf); |
924 | if (err) { |
925 | + /* Could be just "busy". Ignore? |
926 | + * Introduce dedicated error code? */ |
927 | + drbd_msg_put_info(adm_ctx.reply_skb, |
928 | + "Try again without changing current al-extents setting"); |
929 | retcode = ERR_NOMEM; |
930 | goto fail_unlock; |
931 | } |
932 | @@ -1927,9 +1948,9 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info) |
933 | } |
934 | } |
935 | |
936 | - if (device->state.conn < C_CONNECTED && |
937 | - device->state.role == R_PRIMARY && device->ed_uuid && |
938 | - (device->ed_uuid & ~((u64)1)) != (nbc->md.uuid[UI_CURRENT] & ~((u64)1))) { |
939 | + if (device->state.pdsk != D_UP_TO_DATE && device->ed_uuid && |
940 | + (device->state.role == R_PRIMARY || device->state.peer == R_PRIMARY) && |
941 | + (device->ed_uuid & ~((u64)1)) != (nbc->md.uuid[UI_CURRENT] & ~((u64)1))) { |
942 | drbd_err(device, "Can only attach to data with current UUID=%016llX\n", |
943 | (unsigned long long)device->ed_uuid); |
944 | retcode = ERR_DATA_NOT_CURRENT; |
945 | diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c |
946 | index 8e8e4ccb128f..a10ff6e8c20b 100644 |
947 | --- a/drivers/block/drbd/drbd_receiver.c |
948 | +++ b/drivers/block/drbd/drbd_receiver.c |
949 | @@ -4037,6 +4037,7 @@ static int receive_sizes(struct drbd_connection *connection, struct packet_info |
950 | struct o_qlim *o = (connection->agreed_features & DRBD_FF_WSAME) ? p->qlim : NULL; |
951 | enum determine_dev_size dd = DS_UNCHANGED; |
952 | sector_t p_size, p_usize, p_csize, my_usize; |
953 | + sector_t new_size, cur_size; |
954 | int ldsc = 0; /* local disk size changed */ |
955 | enum dds_flags ddsf; |
956 | |
957 | @@ -4044,6 +4045,7 @@ static int receive_sizes(struct drbd_connection *connection, struct packet_info |
958 | if (!peer_device) |
959 | return config_unknown_volume(connection, pi); |
960 | device = peer_device->device; |
961 | + cur_size = drbd_get_capacity(device->this_bdev); |
962 | |
963 | p_size = be64_to_cpu(p->d_size); |
964 | p_usize = be64_to_cpu(p->u_size); |
965 | @@ -4054,7 +4056,6 @@ static int receive_sizes(struct drbd_connection *connection, struct packet_info |
966 | device->p_size = p_size; |
967 | |
968 | if (get_ldev(device)) { |
969 | - sector_t new_size, cur_size; |
970 | rcu_read_lock(); |
971 | my_usize = rcu_dereference(device->ldev->disk_conf)->disk_size; |
972 | rcu_read_unlock(); |
973 | @@ -4072,7 +4073,6 @@ static int receive_sizes(struct drbd_connection *connection, struct packet_info |
974 | /* Never shrink a device with usable data during connect. |
975 | But allow online shrinking if we are connected. */ |
976 | new_size = drbd_new_dev_size(device, device->ldev, p_usize, 0); |
977 | - cur_size = drbd_get_capacity(device->this_bdev); |
978 | if (new_size < cur_size && |
979 | device->state.disk >= D_OUTDATED && |
980 | device->state.conn < C_CONNECTED) { |
981 | @@ -4137,9 +4137,36 @@ static int receive_sizes(struct drbd_connection *connection, struct packet_info |
982 | * |
983 | * However, if he sends a zero current size, |
984 | * take his (user-capped or) backing disk size anyways. |
985 | + * |
986 | + * Unless of course he does not have a disk himself. |
987 | + * In which case we ignore this completely. |
988 | */ |
989 | + sector_t new_size = p_csize ?: p_usize ?: p_size; |
990 | drbd_reconsider_queue_parameters(device, NULL, o); |
991 | - drbd_set_my_capacity(device, p_csize ?: p_usize ?: p_size); |
992 | + if (new_size == 0) { |
993 | + /* Ignore, peer does not know nothing. */ |
994 | + } else if (new_size == cur_size) { |
995 | + /* nothing to do */ |
996 | + } else if (cur_size != 0 && p_size == 0) { |
997 | + drbd_warn(device, "Ignored diskless peer device size (peer:%llu != me:%llu sectors)!\n", |
998 | + (unsigned long long)new_size, (unsigned long long)cur_size); |
999 | + } else if (new_size < cur_size && device->state.role == R_PRIMARY) { |
1000 | + drbd_err(device, "The peer's device size is too small! (%llu < %llu sectors); demote me first!\n", |
1001 | + (unsigned long long)new_size, (unsigned long long)cur_size); |
1002 | + conn_request_state(peer_device->connection, NS(conn, C_DISCONNECTING), CS_HARD); |
1003 | + return -EIO; |
1004 | + } else { |
1005 | + /* I believe the peer, if |
1006 | + * - I don't have a current size myself |
1007 | + * - we agree on the size anyways |
1008 | + * - I do have a current size, am Secondary, |
1009 | + * and he has the only disk |
1010 | + * - I do have a current size, am Primary, |
1011 | + * and he has the only disk, |
1012 | + * which is larger than my current size |
1013 | + */ |
1014 | + drbd_set_my_capacity(device, new_size); |
1015 | + } |
1016 | } |
1017 | |
1018 | if (get_ldev(device)) { |
1019 | @@ -4425,6 +4452,25 @@ static int receive_state(struct drbd_connection *connection, struct packet_info |
1020 | if (peer_state.conn == C_AHEAD) |
1021 | ns.conn = C_BEHIND; |
1022 | |
1023 | + /* TODO: |
1024 | + * if (primary and diskless and peer uuid != effective uuid) |
1025 | + * abort attach on peer; |
1026 | + * |
1027 | + * If this node does not have good data, was already connected, but |
1028 | + * the peer did a late attach only now, trying to "negotiate" with me, |
1029 | + * AND I am currently Primary, possibly frozen, with some specific |
1030 | + * "effective" uuid, this should never be reached, really, because |
1031 | + * we first send the uuids, then the current state. |
1032 | + * |
1033 | + * In this scenario, we already dropped the connection hard |
1034 | + * when we received the unsuitable uuids (receive_uuids(). |
1035 | + * |
1036 | + * Should we want to change this, that is: not drop the connection in |
1037 | + * receive_uuids() already, then we would need to add a branch here |
1038 | + * that aborts the attach of "unsuitable uuids" on the peer in case |
1039 | + * this node is currently Diskless Primary. |
1040 | + */ |
1041 | + |
1042 | if (device->p_uuid && peer_state.disk >= D_NEGOTIATING && |
1043 | get_ldev_if_state(device, D_NEGOTIATING)) { |
1044 | int cr; /* consider resync */ |
1045 | diff --git a/drivers/block/drbd/drbd_state.h b/drivers/block/drbd/drbd_state.h |
1046 | index 6c9d5d4a8a75..110f64d9e91c 100644 |
1047 | --- a/drivers/block/drbd/drbd_state.h |
1048 | +++ b/drivers/block/drbd/drbd_state.h |
1049 | @@ -126,7 +126,7 @@ extern enum drbd_state_rv _drbd_set_state(struct drbd_device *, union drbd_state |
1050 | enum chg_state_flags, |
1051 | struct completion *done); |
1052 | extern void print_st_err(struct drbd_device *, union drbd_state, |
1053 | - union drbd_state, int); |
1054 | + union drbd_state, enum drbd_state_rv); |
1055 | |
1056 | enum drbd_state_rv |
1057 | _conn_request_state(struct drbd_connection *connection, union drbd_state mask, union drbd_state val, |
1058 | diff --git a/drivers/char/hw_random/stm32-rng.c b/drivers/char/hw_random/stm32-rng.c |
1059 | index 83c695938a2d..f53d47e3355d 100644 |
1060 | --- a/drivers/char/hw_random/stm32-rng.c |
1061 | +++ b/drivers/char/hw_random/stm32-rng.c |
1062 | @@ -166,6 +166,13 @@ static int stm32_rng_probe(struct platform_device *ofdev) |
1063 | return devm_hwrng_register(dev, &priv->rng); |
1064 | } |
1065 | |
1066 | +static int stm32_rng_remove(struct platform_device *ofdev) |
1067 | +{ |
1068 | + pm_runtime_disable(&ofdev->dev); |
1069 | + |
1070 | + return 0; |
1071 | +} |
1072 | + |
1073 | #ifdef CONFIG_PM |
1074 | static int stm32_rng_runtime_suspend(struct device *dev) |
1075 | { |
1076 | @@ -202,6 +209,7 @@ static struct platform_driver stm32_rng_driver = { |
1077 | .of_match_table = stm32_rng_match, |
1078 | }, |
1079 | .probe = stm32_rng_probe, |
1080 | + .remove = stm32_rng_remove, |
1081 | }; |
1082 | |
1083 | module_platform_driver(stm32_rng_driver); |
1084 | diff --git a/drivers/clk/at91/clk-main.c b/drivers/clk/at91/clk-main.c |
1085 | index 2f97a843d6d6..90988e7a5b47 100644 |
1086 | --- a/drivers/clk/at91/clk-main.c |
1087 | +++ b/drivers/clk/at91/clk-main.c |
1088 | @@ -162,7 +162,7 @@ at91_clk_register_main_osc(struct regmap *regmap, |
1089 | if (bypass) |
1090 | regmap_update_bits(regmap, |
1091 | AT91_CKGR_MOR, MOR_KEY_MASK | |
1092 | - AT91_PMC_MOSCEN, |
1093 | + AT91_PMC_OSCBYPASS, |
1094 | AT91_PMC_OSCBYPASS | AT91_PMC_KEY); |
1095 | |
1096 | hw = &osc->hw; |
1097 | @@ -354,7 +354,10 @@ static int clk_main_probe_frequency(struct regmap *regmap) |
1098 | regmap_read(regmap, AT91_CKGR_MCFR, &mcfr); |
1099 | if (mcfr & AT91_PMC_MAINRDY) |
1100 | return 0; |
1101 | - usleep_range(MAINF_LOOP_MIN_WAIT, MAINF_LOOP_MAX_WAIT); |
1102 | + if (system_state < SYSTEM_RUNNING) |
1103 | + udelay(MAINF_LOOP_MIN_WAIT); |
1104 | + else |
1105 | + usleep_range(MAINF_LOOP_MIN_WAIT, MAINF_LOOP_MAX_WAIT); |
1106 | } while (time_before(prep_time, timeout)); |
1107 | |
1108 | return -ETIMEDOUT; |
1109 | diff --git a/drivers/clk/at91/sckc.c b/drivers/clk/at91/sckc.c |
1110 | index ab6ecefc49ad..43ba2a8b03fa 100644 |
1111 | --- a/drivers/clk/at91/sckc.c |
1112 | +++ b/drivers/clk/at91/sckc.c |
1113 | @@ -74,7 +74,10 @@ static int clk_slow_osc_prepare(struct clk_hw *hw) |
1114 | |
1115 | writel(tmp | AT91_SCKC_OSC32EN, sckcr); |
1116 | |
1117 | - usleep_range(osc->startup_usec, osc->startup_usec + 1); |
1118 | + if (system_state < SYSTEM_RUNNING) |
1119 | + udelay(osc->startup_usec); |
1120 | + else |
1121 | + usleep_range(osc->startup_usec, osc->startup_usec + 1); |
1122 | |
1123 | return 0; |
1124 | } |
1125 | @@ -197,7 +200,10 @@ static int clk_slow_rc_osc_prepare(struct clk_hw *hw) |
1126 | |
1127 | writel(readl(sckcr) | AT91_SCKC_RCEN, sckcr); |
1128 | |
1129 | - usleep_range(osc->startup_usec, osc->startup_usec + 1); |
1130 | + if (system_state < SYSTEM_RUNNING) |
1131 | + udelay(osc->startup_usec); |
1132 | + else |
1133 | + usleep_range(osc->startup_usec, osc->startup_usec + 1); |
1134 | |
1135 | return 0; |
1136 | } |
1137 | @@ -310,7 +316,10 @@ static int clk_sam9x5_slow_set_parent(struct clk_hw *hw, u8 index) |
1138 | |
1139 | writel(tmp, sckcr); |
1140 | |
1141 | - usleep_range(SLOWCK_SW_TIME_USEC, SLOWCK_SW_TIME_USEC + 1); |
1142 | + if (system_state < SYSTEM_RUNNING) |
1143 | + udelay(SLOWCK_SW_TIME_USEC); |
1144 | + else |
1145 | + usleep_range(SLOWCK_SW_TIME_USEC, SLOWCK_SW_TIME_USEC + 1); |
1146 | |
1147 | return 0; |
1148 | } |
1149 | @@ -443,7 +452,10 @@ static int clk_sama5d4_slow_osc_prepare(struct clk_hw *hw) |
1150 | return 0; |
1151 | } |
1152 | |
1153 | - usleep_range(osc->startup_usec, osc->startup_usec + 1); |
1154 | + if (system_state < SYSTEM_RUNNING) |
1155 | + udelay(osc->startup_usec); |
1156 | + else |
1157 | + usleep_range(osc->startup_usec, osc->startup_usec + 1); |
1158 | osc->prepared = true; |
1159 | |
1160 | return 0; |
1161 | diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c |
1162 | index 13c09a740840..2bb88d125113 100644 |
1163 | --- a/drivers/clk/samsung/clk-exynos5420.c |
1164 | +++ b/drivers/clk/samsung/clk-exynos5420.c |
1165 | @@ -170,12 +170,18 @@ static const unsigned long exynos5x_clk_regs[] __initconst = { |
1166 | GATE_BUS_CPU, |
1167 | GATE_SCLK_CPU, |
1168 | CLKOUT_CMU_CPU, |
1169 | + CPLL_CON0, |
1170 | + DPLL_CON0, |
1171 | EPLL_CON0, |
1172 | EPLL_CON1, |
1173 | EPLL_CON2, |
1174 | RPLL_CON0, |
1175 | RPLL_CON1, |
1176 | RPLL_CON2, |
1177 | + IPLL_CON0, |
1178 | + SPLL_CON0, |
1179 | + VPLL_CON0, |
1180 | + MPLL_CON0, |
1181 | SRC_TOP0, |
1182 | SRC_TOP1, |
1183 | SRC_TOP2, |
1184 | diff --git a/drivers/crypto/mxc-scc.c b/drivers/crypto/mxc-scc.c |
1185 | index ee4be1b0d30b..0a57b3db2d67 100644 |
1186 | --- a/drivers/crypto/mxc-scc.c |
1187 | +++ b/drivers/crypto/mxc-scc.c |
1188 | @@ -178,12 +178,12 @@ static int mxc_scc_get_data(struct mxc_scc_ctx *ctx, |
1189 | else |
1190 | from = scc->black_memory; |
1191 | |
1192 | - dev_dbg(scc->dev, "pcopy: from 0x%p %d bytes\n", from, |
1193 | + dev_dbg(scc->dev, "pcopy: from 0x%p %zu bytes\n", from, |
1194 | ctx->dst_nents * 8); |
1195 | len = sg_pcopy_from_buffer(ablkreq->dst, ctx->dst_nents, |
1196 | from, ctx->size, ctx->offset); |
1197 | if (!len) { |
1198 | - dev_err(scc->dev, "pcopy err from 0x%p (len=%d)\n", from, len); |
1199 | + dev_err(scc->dev, "pcopy err from 0x%p (len=%zu)\n", from, len); |
1200 | return -EINVAL; |
1201 | } |
1202 | |
1203 | @@ -274,7 +274,7 @@ static int mxc_scc_put_data(struct mxc_scc_ctx *ctx, |
1204 | len = sg_pcopy_to_buffer(req->src, ctx->src_nents, |
1205 | to, len, ctx->offset); |
1206 | if (!len) { |
1207 | - dev_err(scc->dev, "pcopy err to 0x%p (len=%d)\n", to, len); |
1208 | + dev_err(scc->dev, "pcopy err to 0x%p (len=%zu)\n", to, len); |
1209 | return -EINVAL; |
1210 | } |
1211 | |
1212 | @@ -335,9 +335,9 @@ static void mxc_scc_ablkcipher_next(struct mxc_scc_ctx *ctx, |
1213 | return; |
1214 | } |
1215 | |
1216 | - dev_dbg(scc->dev, "Start encryption (0x%p/0x%p)\n", |
1217 | - (void *)readl(scc->base + SCC_SCM_RED_START), |
1218 | - (void *)readl(scc->base + SCC_SCM_BLACK_START)); |
1219 | + dev_dbg(scc->dev, "Start encryption (0x%x/0x%x)\n", |
1220 | + readl(scc->base + SCC_SCM_RED_START), |
1221 | + readl(scc->base + SCC_SCM_BLACK_START)); |
1222 | |
1223 | /* clear interrupt control registers */ |
1224 | writel(SCC_SCM_INTR_CTRL_CLR_INTR, |
1225 | diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c |
1226 | index 9aeab4ff2d81..42d1b350afd2 100644 |
1227 | --- a/drivers/hid/hid-core.c |
1228 | +++ b/drivers/hid/hid-core.c |
1229 | @@ -196,6 +196,18 @@ static unsigned hid_lookup_collection(struct hid_parser *parser, unsigned type) |
1230 | return 0; /* we know nothing about this usage type */ |
1231 | } |
1232 | |
1233 | +/* |
1234 | + * Concatenate usage which defines 16 bits or less with the |
1235 | + * currently defined usage page to form a 32 bit usage |
1236 | + */ |
1237 | + |
1238 | +static void complete_usage(struct hid_parser *parser, unsigned int index) |
1239 | +{ |
1240 | + parser->local.usage[index] &= 0xFFFF; |
1241 | + parser->local.usage[index] |= |
1242 | + (parser->global.usage_page & 0xFFFF) << 16; |
1243 | +} |
1244 | + |
1245 | /* |
1246 | * Add a usage to the temporary parser table. |
1247 | */ |
1248 | @@ -207,6 +219,14 @@ static int hid_add_usage(struct hid_parser *parser, unsigned usage, u8 size) |
1249 | return -1; |
1250 | } |
1251 | parser->local.usage[parser->local.usage_index] = usage; |
1252 | + |
1253 | + /* |
1254 | + * If Usage item only includes usage id, concatenate it with |
1255 | + * currently defined usage page |
1256 | + */ |
1257 | + if (size <= 2) |
1258 | + complete_usage(parser, parser->local.usage_index); |
1259 | + |
1260 | parser->local.usage_size[parser->local.usage_index] = size; |
1261 | parser->local.collection_index[parser->local.usage_index] = |
1262 | parser->collection_stack_ptr ? |
1263 | @@ -523,13 +543,32 @@ static int hid_parser_local(struct hid_parser *parser, struct hid_item *item) |
1264 | * usage value." |
1265 | */ |
1266 | |
1267 | -static void hid_concatenate_usage_page(struct hid_parser *parser) |
1268 | +static void hid_concatenate_last_usage_page(struct hid_parser *parser) |
1269 | { |
1270 | int i; |
1271 | + unsigned int usage_page; |
1272 | + unsigned int current_page; |
1273 | |
1274 | - for (i = 0; i < parser->local.usage_index; i++) |
1275 | - if (parser->local.usage_size[i] <= 2) |
1276 | - parser->local.usage[i] += parser->global.usage_page << 16; |
1277 | + if (!parser->local.usage_index) |
1278 | + return; |
1279 | + |
1280 | + usage_page = parser->global.usage_page; |
1281 | + |
1282 | + /* |
1283 | + * Concatenate usage page again only if last declared Usage Page |
1284 | + * has not been already used in previous usages concatenation |
1285 | + */ |
1286 | + for (i = parser->local.usage_index - 1; i >= 0; i--) { |
1287 | + if (parser->local.usage_size[i] > 2) |
1288 | + /* Ignore extended usages */ |
1289 | + continue; |
1290 | + |
1291 | + current_page = parser->local.usage[i] >> 16; |
1292 | + if (current_page == usage_page) |
1293 | + break; |
1294 | + |
1295 | + complete_usage(parser, i); |
1296 | + } |
1297 | } |
1298 | |
1299 | /* |
1300 | @@ -541,7 +580,7 @@ static int hid_parser_main(struct hid_parser *parser, struct hid_item *item) |
1301 | __u32 data; |
1302 | int ret; |
1303 | |
1304 | - hid_concatenate_usage_page(parser); |
1305 | + hid_concatenate_last_usage_page(parser); |
1306 | |
1307 | data = item_udata(item); |
1308 | |
1309 | @@ -756,7 +795,7 @@ static int hid_scan_main(struct hid_parser *parser, struct hid_item *item) |
1310 | __u32 data; |
1311 | int i; |
1312 | |
1313 | - hid_concatenate_usage_page(parser); |
1314 | + hid_concatenate_last_usage_page(parser); |
1315 | |
1316 | data = item_udata(item); |
1317 | |
1318 | diff --git a/drivers/hid/intel-ish-hid/ishtp-hid.c b/drivers/hid/intel-ish-hid/ishtp-hid.c |
1319 | index 277983aa1d90..d0b902285fc3 100644 |
1320 | --- a/drivers/hid/intel-ish-hid/ishtp-hid.c |
1321 | +++ b/drivers/hid/intel-ish-hid/ishtp-hid.c |
1322 | @@ -222,7 +222,7 @@ int ishtp_hid_probe(unsigned int cur_hid_dev, |
1323 | err_hid_device: |
1324 | kfree(hid_data); |
1325 | err_hid_data: |
1326 | - kfree(hid); |
1327 | + hid_destroy_device(hid); |
1328 | return rv; |
1329 | } |
1330 | |
1331 | diff --git a/drivers/infiniband/hw/qib/qib_sdma.c b/drivers/infiniband/hw/qib/qib_sdma.c |
1332 | index 891873b38a1e..5f3f197678b7 100644 |
1333 | --- a/drivers/infiniband/hw/qib/qib_sdma.c |
1334 | +++ b/drivers/infiniband/hw/qib/qib_sdma.c |
1335 | @@ -600,8 +600,10 @@ retry: |
1336 | dw = (len + 3) >> 2; |
1337 | addr = dma_map_single(&ppd->dd->pcidev->dev, sge->vaddr, |
1338 | dw << 2, DMA_TO_DEVICE); |
1339 | - if (dma_mapping_error(&ppd->dd->pcidev->dev, addr)) |
1340 | + if (dma_mapping_error(&ppd->dd->pcidev->dev, addr)) { |
1341 | + ret = -ENOMEM; |
1342 | goto unmap; |
1343 | + } |
1344 | sdmadesc[0] = 0; |
1345 | make_sdma_desc(ppd, sdmadesc, (u64) addr, dw, dwoffset); |
1346 | /* SDmaUseLargeBuf has to be set in every descriptor */ |
1347 | diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c |
1348 | index 74de1ae48d4f..af68be201c29 100644 |
1349 | --- a/drivers/infiniband/ulp/srp/ib_srp.c |
1350 | +++ b/drivers/infiniband/ulp/srp/ib_srp.c |
1351 | @@ -2180,6 +2180,7 @@ static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd) |
1352 | |
1353 | if (srp_post_send(ch, iu, len)) { |
1354 | shost_printk(KERN_ERR, target->scsi_host, PFX "Send failed\n"); |
1355 | + scmnd->result = DID_ERROR << 16; |
1356 | goto err_unmap; |
1357 | } |
1358 | |
1359 | diff --git a/drivers/input/serio/gscps2.c b/drivers/input/serio/gscps2.c |
1360 | index ecba666afadb..cca26e6f38b3 100644 |
1361 | --- a/drivers/input/serio/gscps2.c |
1362 | +++ b/drivers/input/serio/gscps2.c |
1363 | @@ -382,9 +382,9 @@ static int gscps2_probe(struct parisc_device *dev) |
1364 | goto fail; |
1365 | #endif |
1366 | |
1367 | - printk(KERN_INFO "serio: %s port at 0x%p irq %d @ %s\n", |
1368 | + pr_info("serio: %s port at 0x%08lx irq %d @ %s\n", |
1369 | ps2port->port->name, |
1370 | - ps2port->addr, |
1371 | + hpa, |
1372 | ps2port->padev->irq, |
1373 | ps2port->port->phys); |
1374 | |
1375 | diff --git a/drivers/input/serio/hp_sdc.c b/drivers/input/serio/hp_sdc.c |
1376 | index 852858e5d8d0..92f541db98a0 100644 |
1377 | --- a/drivers/input/serio/hp_sdc.c |
1378 | +++ b/drivers/input/serio/hp_sdc.c |
1379 | @@ -887,8 +887,8 @@ static int __init hp_sdc_init(void) |
1380 | "HP SDC NMI", &hp_sdc)) |
1381 | goto err2; |
1382 | |
1383 | - printk(KERN_INFO PREFIX "HP SDC at 0x%p, IRQ %d (NMI IRQ %d)\n", |
1384 | - (void *)hp_sdc.base_io, hp_sdc.irq, hp_sdc.nmi); |
1385 | + pr_info(PREFIX "HP SDC at 0x%08lx, IRQ %d (NMI IRQ %d)\n", |
1386 | + hp_sdc.base_io, hp_sdc.irq, hp_sdc.nmi); |
1387 | |
1388 | hp_sdc_status_in8(); |
1389 | hp_sdc_data_in8(); |
1390 | diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c |
1391 | index e81acb2b6ee7..c898c70472bb 100644 |
1392 | --- a/drivers/iommu/amd_iommu.c |
1393 | +++ b/drivers/iommu/amd_iommu.c |
1394 | @@ -176,10 +176,14 @@ static struct lock_class_key reserved_rbtree_key; |
1395 | static inline int match_hid_uid(struct device *dev, |
1396 | struct acpihid_map_entry *entry) |
1397 | { |
1398 | + struct acpi_device *adev = ACPI_COMPANION(dev); |
1399 | const char *hid, *uid; |
1400 | |
1401 | - hid = acpi_device_hid(ACPI_COMPANION(dev)); |
1402 | - uid = acpi_device_uid(ACPI_COMPANION(dev)); |
1403 | + if (!adev) |
1404 | + return -ENODEV; |
1405 | + |
1406 | + hid = acpi_device_hid(adev); |
1407 | + uid = acpi_device_uid(adev); |
1408 | |
1409 | if (!hid || !(*hid)) |
1410 | return -ENODEV; |
1411 | diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c |
1412 | index 3643cba71351..742c1fa870da 100644 |
1413 | --- a/drivers/md/dm-flakey.c |
1414 | +++ b/drivers/md/dm-flakey.c |
1415 | @@ -258,20 +258,31 @@ static void flakey_map_bio(struct dm_target *ti, struct bio *bio) |
1416 | |
1417 | static void corrupt_bio_data(struct bio *bio, struct flakey_c *fc) |
1418 | { |
1419 | - unsigned bio_bytes = bio_cur_bytes(bio); |
1420 | - char *data = bio_data(bio); |
1421 | + unsigned int corrupt_bio_byte = fc->corrupt_bio_byte - 1; |
1422 | + |
1423 | + struct bvec_iter iter; |
1424 | + struct bio_vec bvec; |
1425 | + |
1426 | + if (!bio_has_data(bio)) |
1427 | + return; |
1428 | |
1429 | /* |
1430 | - * Overwrite the Nth byte of the data returned. |
1431 | + * Overwrite the Nth byte of the bio's data, on whichever page |
1432 | + * it falls. |
1433 | */ |
1434 | - if (data && bio_bytes >= fc->corrupt_bio_byte) { |
1435 | - data[fc->corrupt_bio_byte - 1] = fc->corrupt_bio_value; |
1436 | - |
1437 | - DMDEBUG("Corrupting data bio=%p by writing %u to byte %u " |
1438 | - "(rw=%c bi_opf=%u bi_sector=%llu cur_bytes=%u)\n", |
1439 | - bio, fc->corrupt_bio_value, fc->corrupt_bio_byte, |
1440 | - (bio_data_dir(bio) == WRITE) ? 'w' : 'r', bio->bi_opf, |
1441 | - (unsigned long long)bio->bi_iter.bi_sector, bio_bytes); |
1442 | + bio_for_each_segment(bvec, bio, iter) { |
1443 | + if (bio_iter_len(bio, iter) > corrupt_bio_byte) { |
1444 | + char *segment = (page_address(bio_iter_page(bio, iter)) |
1445 | + + bio_iter_offset(bio, iter)); |
1446 | + segment[corrupt_bio_byte] = fc->corrupt_bio_value; |
1447 | + DMDEBUG("Corrupting data bio=%p by writing %u to byte %u " |
1448 | + "(rw=%c bi_opf=%u bi_sector=%llu size=%u)\n", |
1449 | + bio, fc->corrupt_bio_value, fc->corrupt_bio_byte, |
1450 | + (bio_data_dir(bio) == WRITE) ? 'w' : 'r', bio->bi_opf, |
1451 | + (unsigned long long)bio->bi_iter.bi_sector, bio->bi_iter.bi_size); |
1452 | + break; |
1453 | + } |
1454 | + corrupt_bio_byte -= bio_iter_len(bio, iter); |
1455 | } |
1456 | } |
1457 | |
1458 | diff --git a/drivers/media/platform/atmel/atmel-isc.c b/drivers/media/platform/atmel/atmel-isc.c |
1459 | index ccfe13b7d3f8..ecf9fb08f36b 100644 |
1460 | --- a/drivers/media/platform/atmel/atmel-isc.c |
1461 | +++ b/drivers/media/platform/atmel/atmel-isc.c |
1462 | @@ -1297,8 +1297,11 @@ static int isc_parse_dt(struct device *dev, struct isc_device *isc) |
1463 | break; |
1464 | } |
1465 | |
1466 | - subdev_entity->asd = devm_kzalloc(dev, |
1467 | - sizeof(*subdev_entity->asd), GFP_KERNEL); |
1468 | + /* asd will be freed by the subsystem once it's added to the |
1469 | + * notifier list |
1470 | + */ |
1471 | + subdev_entity->asd = kzalloc(sizeof(*subdev_entity->asd), |
1472 | + GFP_KERNEL); |
1473 | if (subdev_entity->asd == NULL) { |
1474 | of_node_put(rem); |
1475 | ret = -ENOMEM; |
1476 | @@ -1432,6 +1435,7 @@ static int atmel_isc_probe(struct platform_device *pdev) |
1477 | &subdev_entity->notifier); |
1478 | if (ret) { |
1479 | dev_err(dev, "fail to register async notifier\n"); |
1480 | + kfree(subdev_entity->asd); |
1481 | goto cleanup_subdev; |
1482 | } |
1483 | |
1484 | diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c |
1485 | index b3d8b9592f8a..6c0c5de2527b 100644 |
1486 | --- a/drivers/media/v4l2-core/v4l2-ctrls.c |
1487 | +++ b/drivers/media/v4l2-core/v4l2-ctrls.c |
1488 | @@ -1007,6 +1007,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, |
1489 | case V4L2_CID_FLASH_STROBE_STOP: |
1490 | case V4L2_CID_AUTO_FOCUS_START: |
1491 | case V4L2_CID_AUTO_FOCUS_STOP: |
1492 | + case V4L2_CID_DO_WHITE_BALANCE: |
1493 | *type = V4L2_CTRL_TYPE_BUTTON; |
1494 | *flags |= V4L2_CTRL_FLAG_WRITE_ONLY | |
1495 | V4L2_CTRL_FLAG_EXECUTE_ON_WRITE; |
1496 | diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c |
1497 | index 0c98ed44df05..582b24d2c479 100644 |
1498 | --- a/drivers/misc/mei/bus.c |
1499 | +++ b/drivers/misc/mei/bus.c |
1500 | @@ -765,15 +765,16 @@ static struct device_type mei_cl_device_type = { |
1501 | |
1502 | /** |
1503 | * mei_cl_bus_set_name - set device name for me client device |
1504 | + * <controller>-<client device> |
1505 | + * Example: 0000:00:16.0-55213584-9a29-4916-badf-0fb7ed682aeb |
1506 | * |
1507 | * @cldev: me client device |
1508 | */ |
1509 | static inline void mei_cl_bus_set_name(struct mei_cl_device *cldev) |
1510 | { |
1511 | - dev_set_name(&cldev->dev, "mei:%s:%pUl:%02X", |
1512 | - cldev->name, |
1513 | - mei_me_cl_uuid(cldev->me_cl), |
1514 | - mei_me_cl_ver(cldev->me_cl)); |
1515 | + dev_set_name(&cldev->dev, "%s-%pUl", |
1516 | + dev_name(cldev->bus->dev), |
1517 | + mei_me_cl_uuid(cldev->me_cl)); |
1518 | } |
1519 | |
1520 | /** |
1521 | diff --git a/drivers/mtd/mtdcore.h b/drivers/mtd/mtdcore.h |
1522 | index 55fdb8e1fd2a..488b652ba9e6 100644 |
1523 | --- a/drivers/mtd/mtdcore.h |
1524 | +++ b/drivers/mtd/mtdcore.h |
1525 | @@ -6,7 +6,7 @@ |
1526 | extern struct mutex mtd_table_mutex; |
1527 | |
1528 | struct mtd_info *__mtd_next_device(int i); |
1529 | -int add_mtd_device(struct mtd_info *mtd); |
1530 | +int __must_check add_mtd_device(struct mtd_info *mtd); |
1531 | int del_mtd_device(struct mtd_info *mtd); |
1532 | int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int); |
1533 | int del_mtd_partitions(struct mtd_info *); |
1534 | diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c |
1535 | index fccdd49bb964..5e2d1aa5e81e 100644 |
1536 | --- a/drivers/mtd/mtdpart.c |
1537 | +++ b/drivers/mtd/mtdpart.c |
1538 | @@ -648,10 +648,21 @@ int mtd_add_partition(struct mtd_info *master, const char *name, |
1539 | list_add(&new->list, &mtd_partitions); |
1540 | mutex_unlock(&mtd_partitions_mutex); |
1541 | |
1542 | - add_mtd_device(&new->mtd); |
1543 | + ret = add_mtd_device(&new->mtd); |
1544 | + if (ret) |
1545 | + goto err_remove_part; |
1546 | |
1547 | mtd_add_partition_attrs(new); |
1548 | |
1549 | + return 0; |
1550 | + |
1551 | +err_remove_part: |
1552 | + mutex_lock(&mtd_partitions_mutex); |
1553 | + list_del(&new->list); |
1554 | + mutex_unlock(&mtd_partitions_mutex); |
1555 | + |
1556 | + free_partition(new); |
1557 | + |
1558 | return ret; |
1559 | } |
1560 | EXPORT_SYMBOL_GPL(mtd_add_partition); |
1561 | @@ -696,28 +707,42 @@ int add_mtd_partitions(struct mtd_info *master, |
1562 | { |
1563 | struct mtd_part *slave; |
1564 | uint64_t cur_offset = 0; |
1565 | - int i; |
1566 | + int i, ret; |
1567 | |
1568 | printk(KERN_NOTICE "Creating %d MTD partitions on \"%s\":\n", nbparts, master->name); |
1569 | |
1570 | for (i = 0; i < nbparts; i++) { |
1571 | slave = allocate_partition(master, parts + i, i, cur_offset); |
1572 | if (IS_ERR(slave)) { |
1573 | - del_mtd_partitions(master); |
1574 | - return PTR_ERR(slave); |
1575 | + ret = PTR_ERR(slave); |
1576 | + goto err_del_partitions; |
1577 | } |
1578 | |
1579 | mutex_lock(&mtd_partitions_mutex); |
1580 | list_add(&slave->list, &mtd_partitions); |
1581 | mutex_unlock(&mtd_partitions_mutex); |
1582 | |
1583 | - add_mtd_device(&slave->mtd); |
1584 | + ret = add_mtd_device(&slave->mtd); |
1585 | + if (ret) { |
1586 | + mutex_lock(&mtd_partitions_mutex); |
1587 | + list_del(&slave->list); |
1588 | + mutex_unlock(&mtd_partitions_mutex); |
1589 | + |
1590 | + free_partition(slave); |
1591 | + goto err_del_partitions; |
1592 | + } |
1593 | + |
1594 | mtd_add_partition_attrs(slave); |
1595 | |
1596 | cur_offset = slave->offset + slave->mtd.size; |
1597 | } |
1598 | |
1599 | return 0; |
1600 | + |
1601 | +err_del_partitions: |
1602 | + del_mtd_partitions(master); |
1603 | + |
1604 | + return ret; |
1605 | } |
1606 | |
1607 | static DEFINE_SPINLOCK(part_parser_lock); |
1608 | diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c |
1609 | index e26c4f880df6..886355bfa761 100644 |
1610 | --- a/drivers/mtd/nand/sunxi_nand.c |
1611 | +++ b/drivers/mtd/nand/sunxi_nand.c |
1612 | @@ -1420,7 +1420,7 @@ static int sunxi_nfc_hw_ecc_write_page_dma(struct mtd_info *mtd, |
1613 | sunxi_nfc_randomizer_enable(mtd); |
1614 | |
1615 | writel((NAND_CMD_RNDIN << 8) | NAND_CMD_PAGEPROG, |
1616 | - nfc->regs + NFC_REG_RCMD_SET); |
1617 | + nfc->regs + NFC_REG_WCMD_SET); |
1618 | |
1619 | dma_async_issue_pending(nfc->dmac); |
1620 | |
1621 | diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c |
1622 | index ad2b57c6b13f..211ee13d36ed 100644 |
1623 | --- a/drivers/mtd/ubi/build.c |
1624 | +++ b/drivers/mtd/ubi/build.c |
1625 | @@ -1146,10 +1146,10 @@ int ubi_detach_mtd_dev(int ubi_num, int anyway) |
1626 | ubi_wl_close(ubi); |
1627 | ubi_free_internal_volumes(ubi); |
1628 | vfree(ubi->vtbl); |
1629 | - put_mtd_device(ubi->mtd); |
1630 | vfree(ubi->peb_buf); |
1631 | vfree(ubi->fm_buf); |
1632 | ubi_msg(ubi, "mtd%d is detached", ubi->mtd->index); |
1633 | + put_mtd_device(ubi->mtd); |
1634 | put_device(&ubi->dev); |
1635 | return 0; |
1636 | } |
1637 | diff --git a/drivers/mtd/ubi/kapi.c b/drivers/mtd/ubi/kapi.c |
1638 | index 88b1897aeb40..7826f7c4ec2f 100644 |
1639 | --- a/drivers/mtd/ubi/kapi.c |
1640 | +++ b/drivers/mtd/ubi/kapi.c |
1641 | @@ -227,9 +227,9 @@ out_unlock: |
1642 | out_free: |
1643 | kfree(desc); |
1644 | out_put_ubi: |
1645 | - ubi_put_device(ubi); |
1646 | ubi_err(ubi, "cannot open device %d, volume %d, error %d", |
1647 | ubi_num, vol_id, err); |
1648 | + ubi_put_device(ubi); |
1649 | return ERR_PTR(err); |
1650 | } |
1651 | EXPORT_SYMBOL_GPL(ubi_open_volume); |
1652 | diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c |
1653 | index 7d35f6737499..4ead5a18b794 100644 |
1654 | --- a/drivers/net/can/c_can/c_can.c |
1655 | +++ b/drivers/net/can/c_can/c_can.c |
1656 | @@ -52,6 +52,7 @@ |
1657 | #define CONTROL_EX_PDR BIT(8) |
1658 | |
1659 | /* control register */ |
1660 | +#define CONTROL_SWR BIT(15) |
1661 | #define CONTROL_TEST BIT(7) |
1662 | #define CONTROL_CCE BIT(6) |
1663 | #define CONTROL_DISABLE_AR BIT(5) |
1664 | @@ -572,6 +573,26 @@ static void c_can_configure_msg_objects(struct net_device *dev) |
1665 | IF_MCONT_RCV_EOB); |
1666 | } |
1667 | |
1668 | +static int c_can_software_reset(struct net_device *dev) |
1669 | +{ |
1670 | + struct c_can_priv *priv = netdev_priv(dev); |
1671 | + int retry = 0; |
1672 | + |
1673 | + if (priv->type != BOSCH_D_CAN) |
1674 | + return 0; |
1675 | + |
1676 | + priv->write_reg(priv, C_CAN_CTRL_REG, CONTROL_SWR | CONTROL_INIT); |
1677 | + while (priv->read_reg(priv, C_CAN_CTRL_REG) & CONTROL_SWR) { |
1678 | + msleep(20); |
1679 | + if (retry++ > 100) { |
1680 | + netdev_err(dev, "CCTRL: software reset failed\n"); |
1681 | + return -EIO; |
1682 | + } |
1683 | + } |
1684 | + |
1685 | + return 0; |
1686 | +} |
1687 | + |
1688 | /* |
1689 | * Configure C_CAN chip: |
1690 | * - enable/disable auto-retransmission |
1691 | @@ -581,6 +602,11 @@ static void c_can_configure_msg_objects(struct net_device *dev) |
1692 | static int c_can_chip_config(struct net_device *dev) |
1693 | { |
1694 | struct c_can_priv *priv = netdev_priv(dev); |
1695 | + int err; |
1696 | + |
1697 | + err = c_can_software_reset(dev); |
1698 | + if (err) |
1699 | + return err; |
1700 | |
1701 | /* enable automatic retransmission */ |
1702 | priv->write_reg(priv, C_CAN_CTRL_REG, CONTROL_ENABLE_AR); |
1703 | diff --git a/drivers/net/can/usb/peak_usb/pcan_usb.c b/drivers/net/can/usb/peak_usb/pcan_usb.c |
1704 | index e626c2afbbb1..0e1fc6c4360e 100644 |
1705 | --- a/drivers/net/can/usb/peak_usb/pcan_usb.c |
1706 | +++ b/drivers/net/can/usb/peak_usb/pcan_usb.c |
1707 | @@ -441,8 +441,8 @@ static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n, |
1708 | } |
1709 | if ((n & PCAN_USB_ERROR_BUS_LIGHT) == 0) { |
1710 | /* no error (back to active state) */ |
1711 | - mc->pdev->dev.can.state = CAN_STATE_ERROR_ACTIVE; |
1712 | - return 0; |
1713 | + new_state = CAN_STATE_ERROR_ACTIVE; |
1714 | + break; |
1715 | } |
1716 | break; |
1717 | |
1718 | @@ -465,9 +465,9 @@ static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n, |
1719 | } |
1720 | |
1721 | if ((n & PCAN_USB_ERROR_BUS_HEAVY) == 0) { |
1722 | - /* no error (back to active state) */ |
1723 | - mc->pdev->dev.can.state = CAN_STATE_ERROR_ACTIVE; |
1724 | - return 0; |
1725 | + /* no error (back to warning state) */ |
1726 | + new_state = CAN_STATE_ERROR_WARNING; |
1727 | + break; |
1728 | } |
1729 | break; |
1730 | |
1731 | @@ -506,6 +506,11 @@ static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n, |
1732 | mc->pdev->dev.can.can_stats.error_warning++; |
1733 | break; |
1734 | |
1735 | + case CAN_STATE_ERROR_ACTIVE: |
1736 | + cf->can_id |= CAN_ERR_CRTL; |
1737 | + cf->data[1] = CAN_ERR_CRTL_ACTIVE; |
1738 | + break; |
1739 | + |
1740 | default: |
1741 | /* CAN_STATE_MAX (trick to handle other errors) */ |
1742 | cf->can_id |= CAN_ERR_CRTL; |
1743 | diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c |
1744 | index c2cd540e9c9e..a3a8d7b62f3f 100644 |
1745 | --- a/drivers/net/dsa/bcm_sf2.c |
1746 | +++ b/drivers/net/dsa/bcm_sf2.c |
1747 | @@ -405,11 +405,10 @@ static int bcm_sf2_sw_mdio_write(struct mii_bus *bus, int addr, int regnum, |
1748 | * send them to our master MDIO bus controller |
1749 | */ |
1750 | if (addr == BRCM_PSEUDO_PHY_ADDR && priv->indir_phy_mask & BIT(addr)) |
1751 | - bcm_sf2_sw_indir_rw(priv, 0, addr, regnum, val); |
1752 | + return bcm_sf2_sw_indir_rw(priv, 0, addr, regnum, val); |
1753 | else |
1754 | - mdiobus_write_nested(priv->master_mii_bus, addr, regnum, val); |
1755 | - |
1756 | - return 0; |
1757 | + return mdiobus_write_nested(priv->master_mii_bus, addr, |
1758 | + regnum, val); |
1759 | } |
1760 | |
1761 | static irqreturn_t bcm_sf2_switch_0_isr(int irq, void *dev_id) |
1762 | diff --git a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c |
1763 | index 974713b19ab6..5e1f03590aaf 100644 |
1764 | --- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c |
1765 | +++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c |
1766 | @@ -478,7 +478,9 @@ static void atl1e_mdio_write(struct net_device *netdev, int phy_id, |
1767 | { |
1768 | struct atl1e_adapter *adapter = netdev_priv(netdev); |
1769 | |
1770 | - atl1e_write_phy_reg(&adapter->hw, reg_num & MDIO_REG_ADDR_MASK, val); |
1771 | + if (atl1e_write_phy_reg(&adapter->hw, |
1772 | + reg_num & MDIO_REG_ADDR_MASK, val)) |
1773 | + netdev_err(netdev, "write phy register failed\n"); |
1774 | } |
1775 | |
1776 | static int atl1e_mii_ioctl(struct net_device *netdev, |
1777 | diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c |
1778 | index a0d640243df2..30e93041bf83 100644 |
1779 | --- a/drivers/net/ethernet/cadence/macb.c |
1780 | +++ b/drivers/net/ethernet/cadence/macb.c |
1781 | @@ -2364,14 +2364,14 @@ static int macb_clk_init(struct platform_device *pdev, struct clk **pclk, |
1782 | *pclk = devm_clk_get(&pdev->dev, "pclk"); |
1783 | if (IS_ERR(*pclk)) { |
1784 | err = PTR_ERR(*pclk); |
1785 | - dev_err(&pdev->dev, "failed to get macb_clk (%u)\n", err); |
1786 | + dev_err(&pdev->dev, "failed to get macb_clk (%d)\n", err); |
1787 | return err; |
1788 | } |
1789 | |
1790 | *hclk = devm_clk_get(&pdev->dev, "hclk"); |
1791 | if (IS_ERR(*hclk)) { |
1792 | err = PTR_ERR(*hclk); |
1793 | - dev_err(&pdev->dev, "failed to get hclk (%u)\n", err); |
1794 | + dev_err(&pdev->dev, "failed to get hclk (%d)\n", err); |
1795 | return err; |
1796 | } |
1797 | |
1798 | @@ -2385,25 +2385,25 @@ static int macb_clk_init(struct platform_device *pdev, struct clk **pclk, |
1799 | |
1800 | err = clk_prepare_enable(*pclk); |
1801 | if (err) { |
1802 | - dev_err(&pdev->dev, "failed to enable pclk (%u)\n", err); |
1803 | + dev_err(&pdev->dev, "failed to enable pclk (%d)\n", err); |
1804 | return err; |
1805 | } |
1806 | |
1807 | err = clk_prepare_enable(*hclk); |
1808 | if (err) { |
1809 | - dev_err(&pdev->dev, "failed to enable hclk (%u)\n", err); |
1810 | + dev_err(&pdev->dev, "failed to enable hclk (%d)\n", err); |
1811 | goto err_disable_pclk; |
1812 | } |
1813 | |
1814 | err = clk_prepare_enable(*tx_clk); |
1815 | if (err) { |
1816 | - dev_err(&pdev->dev, "failed to enable tx_clk (%u)\n", err); |
1817 | + dev_err(&pdev->dev, "failed to enable tx_clk (%d)\n", err); |
1818 | goto err_disable_hclk; |
1819 | } |
1820 | |
1821 | err = clk_prepare_enable(*rx_clk); |
1822 | if (err) { |
1823 | - dev_err(&pdev->dev, "failed to enable rx_clk (%u)\n", err); |
1824 | + dev_err(&pdev->dev, "failed to enable rx_clk (%d)\n", err); |
1825 | goto err_disable_txclk; |
1826 | } |
1827 | |
1828 | @@ -2823,7 +2823,7 @@ static int at91ether_clk_init(struct platform_device *pdev, struct clk **pclk, |
1829 | |
1830 | err = clk_prepare_enable(*pclk); |
1831 | if (err) { |
1832 | - dev_err(&pdev->dev, "failed to enable pclk (%u)\n", err); |
1833 | + dev_err(&pdev->dev, "failed to enable pclk (%d)\n", err); |
1834 | return err; |
1835 | } |
1836 | |
1837 | diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c |
1838 | index 92ea760c4822..1b07c6216e2a 100644 |
1839 | --- a/drivers/net/ethernet/freescale/fec_main.c |
1840 | +++ b/drivers/net/ethernet/freescale/fec_main.c |
1841 | @@ -3530,6 +3530,11 @@ fec_drv_remove(struct platform_device *pdev) |
1842 | struct net_device *ndev = platform_get_drvdata(pdev); |
1843 | struct fec_enet_private *fep = netdev_priv(ndev); |
1844 | struct device_node *np = pdev->dev.of_node; |
1845 | + int ret; |
1846 | + |
1847 | + ret = pm_runtime_get_sync(&pdev->dev); |
1848 | + if (ret < 0) |
1849 | + return ret; |
1850 | |
1851 | cancel_work_sync(&fep->tx_timeout_work); |
1852 | fec_ptp_stop(pdev); |
1853 | @@ -3537,13 +3542,17 @@ fec_drv_remove(struct platform_device *pdev) |
1854 | fec_enet_mii_remove(fep); |
1855 | if (fep->reg_phy) |
1856 | regulator_disable(fep->reg_phy); |
1857 | - pm_runtime_put(&pdev->dev); |
1858 | - pm_runtime_disable(&pdev->dev); |
1859 | + |
1860 | if (of_phy_is_fixed_link(np)) |
1861 | of_phy_deregister_fixed_link(np); |
1862 | of_node_put(fep->phy_node); |
1863 | free_netdev(ndev); |
1864 | |
1865 | + clk_disable_unprepare(fep->clk_ahb); |
1866 | + clk_disable_unprepare(fep->clk_ipg); |
1867 | + pm_runtime_put_noidle(&pdev->dev); |
1868 | + pm_runtime_disable(&pdev->dev); |
1869 | + |
1870 | return 0; |
1871 | } |
1872 | |
1873 | diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c |
1874 | index d676088512cf..c9fb589690ee 100644 |
1875 | --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c |
1876 | +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c |
1877 | @@ -786,11 +786,9 @@ static int mlx5_pci_init(struct mlx5_core_dev *dev, struct mlx5_priv *priv) |
1878 | |
1879 | priv->numa_node = dev_to_node(&dev->pdev->dev); |
1880 | |
1881 | - priv->dbg_root = debugfs_create_dir(dev_name(&pdev->dev), mlx5_debugfs_root); |
1882 | - if (!priv->dbg_root) { |
1883 | - dev_err(&pdev->dev, "Cannot create debugfs dir, aborting\n"); |
1884 | - return -ENOMEM; |
1885 | - } |
1886 | + if (mlx5_debugfs_root) |
1887 | + priv->dbg_root = |
1888 | + debugfs_create_dir(pci_name(pdev), mlx5_debugfs_root); |
1889 | |
1890 | err = mlx5_pci_enable_device(dev); |
1891 | if (err) { |
1892 | diff --git a/drivers/net/ethernet/sfc/ef10.c b/drivers/net/ethernet/sfc/ef10.c |
1893 | index 3d5d5d54c103..22bc3dc44298 100644 |
1894 | --- a/drivers/net/ethernet/sfc/ef10.c |
1895 | +++ b/drivers/net/ethernet/sfc/ef10.c |
1896 | @@ -5093,22 +5093,25 @@ static const struct efx_ef10_nvram_type_info efx_ef10_nvram_types[] = { |
1897 | { NVRAM_PARTITION_TYPE_LICENSE, 0, 0, "sfc_license" }, |
1898 | { NVRAM_PARTITION_TYPE_PHY_MIN, 0xff, 0, "sfc_phy_fw" }, |
1899 | }; |
1900 | +#define EF10_NVRAM_PARTITION_COUNT ARRAY_SIZE(efx_ef10_nvram_types) |
1901 | |
1902 | static int efx_ef10_mtd_probe_partition(struct efx_nic *efx, |
1903 | struct efx_mcdi_mtd_partition *part, |
1904 | - unsigned int type) |
1905 | + unsigned int type, |
1906 | + unsigned long *found) |
1907 | { |
1908 | MCDI_DECLARE_BUF(inbuf, MC_CMD_NVRAM_METADATA_IN_LEN); |
1909 | MCDI_DECLARE_BUF(outbuf, MC_CMD_NVRAM_METADATA_OUT_LENMAX); |
1910 | const struct efx_ef10_nvram_type_info *info; |
1911 | size_t size, erase_size, outlen; |
1912 | + int type_idx = 0; |
1913 | bool protected; |
1914 | int rc; |
1915 | |
1916 | - for (info = efx_ef10_nvram_types; ; info++) { |
1917 | - if (info == |
1918 | - efx_ef10_nvram_types + ARRAY_SIZE(efx_ef10_nvram_types)) |
1919 | + for (type_idx = 0; ; type_idx++) { |
1920 | + if (type_idx == EF10_NVRAM_PARTITION_COUNT) |
1921 | return -ENODEV; |
1922 | + info = efx_ef10_nvram_types + type_idx; |
1923 | if ((type & ~info->type_mask) == info->type) |
1924 | break; |
1925 | } |
1926 | @@ -5121,6 +5124,13 @@ static int efx_ef10_mtd_probe_partition(struct efx_nic *efx, |
1927 | if (protected) |
1928 | return -ENODEV; /* hide it */ |
1929 | |
1930 | + /* If we've already exposed a partition of this type, hide this |
1931 | + * duplicate. All operations on MTDs are keyed by the type anyway, |
1932 | + * so we can't act on the duplicate. |
1933 | + */ |
1934 | + if (__test_and_set_bit(type_idx, found)) |
1935 | + return -EEXIST; |
1936 | + |
1937 | part->nvram_type = type; |
1938 | |
1939 | MCDI_SET_DWORD(inbuf, NVRAM_METADATA_IN_TYPE, type); |
1940 | @@ -5149,6 +5159,7 @@ static int efx_ef10_mtd_probe_partition(struct efx_nic *efx, |
1941 | static int efx_ef10_mtd_probe(struct efx_nic *efx) |
1942 | { |
1943 | MCDI_DECLARE_BUF(outbuf, MC_CMD_NVRAM_PARTITIONS_OUT_LENMAX); |
1944 | + DECLARE_BITMAP(found, EF10_NVRAM_PARTITION_COUNT) = { 0 }; |
1945 | struct efx_mcdi_mtd_partition *parts; |
1946 | size_t outlen, n_parts_total, i, n_parts; |
1947 | unsigned int type; |
1948 | @@ -5177,11 +5188,13 @@ static int efx_ef10_mtd_probe(struct efx_nic *efx) |
1949 | for (i = 0; i < n_parts_total; i++) { |
1950 | type = MCDI_ARRAY_DWORD(outbuf, NVRAM_PARTITIONS_OUT_TYPE_ID, |
1951 | i); |
1952 | - rc = efx_ef10_mtd_probe_partition(efx, &parts[n_parts], type); |
1953 | - if (rc == 0) |
1954 | - n_parts++; |
1955 | - else if (rc != -ENODEV) |
1956 | + rc = efx_ef10_mtd_probe_partition(efx, &parts[n_parts], type, |
1957 | + found); |
1958 | + if (rc == -EEXIST || rc == -ENODEV) |
1959 | + continue; |
1960 | + if (rc) |
1961 | goto fail; |
1962 | + n_parts++; |
1963 | } |
1964 | |
1965 | rc = efx_mtd_add(efx, &parts[0].common, n_parts, sizeof(*parts)); |
1966 | diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c |
1967 | index d07520fb969e..62ccbd47c1db 100644 |
1968 | --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c |
1969 | +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c |
1970 | @@ -59,7 +59,9 @@ static int sun7i_gmac_init(struct platform_device *pdev, void *priv) |
1971 | gmac->clk_enabled = 1; |
1972 | } else { |
1973 | clk_set_rate(gmac->tx_clk, SUN7I_GMAC_MII_RATE); |
1974 | - clk_prepare(gmac->tx_clk); |
1975 | + ret = clk_prepare(gmac->tx_clk); |
1976 | + if (ret) |
1977 | + return ret; |
1978 | } |
1979 | |
1980 | return 0; |
1981 | diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c |
1982 | index 6237236b7c4c..b1dcc7448b4f 100644 |
1983 | --- a/drivers/net/macvlan.c |
1984 | +++ b/drivers/net/macvlan.c |
1985 | @@ -334,10 +334,11 @@ static void macvlan_broadcast_enqueue(struct macvlan_port *port, |
1986 | } |
1987 | spin_unlock(&port->bc_queue.lock); |
1988 | |
1989 | + schedule_work(&port->bc_work); |
1990 | + |
1991 | if (err) |
1992 | goto free_nskb; |
1993 | |
1994 | - schedule_work(&port->bc_work); |
1995 | return; |
1996 | |
1997 | free_nskb: |
1998 | diff --git a/drivers/net/slip/slip.c b/drivers/net/slip/slip.c |
1999 | index b2317b3a542a..7ec96c3e38a6 100644 |
2000 | --- a/drivers/net/slip/slip.c |
2001 | +++ b/drivers/net/slip/slip.c |
2002 | @@ -860,6 +860,7 @@ err_free_chan: |
2003 | sl->tty = NULL; |
2004 | tty->disc_data = NULL; |
2005 | clear_bit(SLF_INUSE, &sl->flags); |
2006 | + sl_free_netdev(sl->dev); |
2007 | free_netdev(sl->dev); |
2008 | |
2009 | err_exit: |
2010 | diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c |
2011 | index 7a62316c570d..b2c1e872d5ed 100644 |
2012 | --- a/drivers/net/wan/fsl_ucc_hdlc.c |
2013 | +++ b/drivers/net/wan/fsl_ucc_hdlc.c |
2014 | @@ -1117,7 +1117,6 @@ static int ucc_hdlc_probe(struct platform_device *pdev) |
2015 | if (register_hdlc_device(dev)) { |
2016 | ret = -ENOBUFS; |
2017 | pr_err("ucc_hdlc: unable to register hdlc device\n"); |
2018 | - free_netdev(dev); |
2019 | goto free_dev; |
2020 | } |
2021 | |
2022 | diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c |
2023 | index b7fe0af4cb24..650d2f6446a6 100644 |
2024 | --- a/drivers/net/wireless/ath/ath6kl/cfg80211.c |
2025 | +++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c |
2026 | @@ -934,7 +934,7 @@ static int ath6kl_set_probed_ssids(struct ath6kl *ar, |
2027 | else |
2028 | ssid_list[i].flag = ANY_SSID_FLAG; |
2029 | |
2030 | - if (n_match_ssid == 0) |
2031 | + if (ar->wiphy->max_match_sets != 0 && n_match_ssid == 0) |
2032 | ssid_list[i].flag |= MATCH_SSID_FLAG; |
2033 | } |
2034 | |
2035 | @@ -1088,7 +1088,7 @@ void ath6kl_cfg80211_scan_complete_event(struct ath6kl_vif *vif, bool aborted) |
2036 | if (vif->scan_req->n_ssids && vif->scan_req->ssids[0].ssid_len) { |
2037 | for (i = 0; i < vif->scan_req->n_ssids; i++) { |
2038 | ath6kl_wmi_probedssid_cmd(ar->wmi, vif->fw_vif_idx, |
2039 | - i + 1, DISABLE_SSID_FLAG, |
2040 | + i, DISABLE_SSID_FLAG, |
2041 | 0, NULL); |
2042 | } |
2043 | } |
2044 | diff --git a/drivers/net/wireless/marvell/mwifiex/debugfs.c b/drivers/net/wireless/marvell/mwifiex/debugfs.c |
2045 | index ae2b69db5994..6eacea28d7ac 100644 |
2046 | --- a/drivers/net/wireless/marvell/mwifiex/debugfs.c |
2047 | +++ b/drivers/net/wireless/marvell/mwifiex/debugfs.c |
2048 | @@ -296,15 +296,13 @@ mwifiex_histogram_read(struct file *file, char __user *ubuf, |
2049 | "total samples = %d\n", |
2050 | atomic_read(&phist_data->num_samples)); |
2051 | |
2052 | - p += sprintf(p, "rx rates (in Mbps): 0=1M 1=2M"); |
2053 | - p += sprintf(p, "2=5.5M 3=11M 4=6M 5=9M 6=12M\n"); |
2054 | - p += sprintf(p, "7=18M 8=24M 9=36M 10=48M 11=54M"); |
2055 | - p += sprintf(p, "12-27=MCS0-15(BW20) 28-43=MCS0-15(BW40)\n"); |
2056 | + p += sprintf(p, |
2057 | + "rx rates (in Mbps): 0=1M 1=2M 2=5.5M 3=11M 4=6M 5=9M 6=12M\n" |
2058 | + "7=18M 8=24M 9=36M 10=48M 11=54M 12-27=MCS0-15(BW20) 28-43=MCS0-15(BW40)\n"); |
2059 | |
2060 | if (ISSUPP_11ACENABLED(priv->adapter->fw_cap_info)) { |
2061 | - p += sprintf(p, "44-53=MCS0-9(VHT:BW20)"); |
2062 | - p += sprintf(p, "54-63=MCS0-9(VHT:BW40)"); |
2063 | - p += sprintf(p, "64-73=MCS0-9(VHT:BW80)\n\n"); |
2064 | + p += sprintf(p, |
2065 | + "44-53=MCS0-9(VHT:BW20) 54-63=MCS0-9(VHT:BW40) 64-73=MCS0-9(VHT:BW80)\n\n"); |
2066 | } else { |
2067 | p += sprintf(p, "\n"); |
2068 | } |
2069 | @@ -333,7 +331,7 @@ mwifiex_histogram_read(struct file *file, char __user *ubuf, |
2070 | for (i = 0; i < MWIFIEX_MAX_NOISE_FLR; i++) { |
2071 | value = atomic_read(&phist_data->noise_flr[i]); |
2072 | if (value) |
2073 | - p += sprintf(p, "noise_flr[-%02ddBm] = %d\n", |
2074 | + p += sprintf(p, "noise_flr[%02ddBm] = %d\n", |
2075 | (int)(i-128), value); |
2076 | } |
2077 | for (i = 0; i < MWIFIEX_MAX_SIG_STRENGTH; i++) { |
2078 | diff --git a/drivers/net/wireless/marvell/mwifiex/scan.c b/drivers/net/wireless/marvell/mwifiex/scan.c |
2079 | index 7e96b6a37946..828c6f5eb83c 100644 |
2080 | --- a/drivers/net/wireless/marvell/mwifiex/scan.c |
2081 | +++ b/drivers/net/wireless/marvell/mwifiex/scan.c |
2082 | @@ -1890,15 +1890,17 @@ mwifiex_parse_single_response_buf(struct mwifiex_private *priv, u8 **bss_info, |
2083 | ETH_ALEN)) |
2084 | mwifiex_update_curr_bss_params(priv, |
2085 | bss); |
2086 | - cfg80211_put_bss(priv->wdev.wiphy, bss); |
2087 | - } |
2088 | |
2089 | - if ((chan->flags & IEEE80211_CHAN_RADAR) || |
2090 | - (chan->flags & IEEE80211_CHAN_NO_IR)) { |
2091 | - mwifiex_dbg(adapter, INFO, |
2092 | - "radar or passive channel %d\n", |
2093 | - channel); |
2094 | - mwifiex_save_hidden_ssid_channels(priv, bss); |
2095 | + if ((chan->flags & IEEE80211_CHAN_RADAR) || |
2096 | + (chan->flags & IEEE80211_CHAN_NO_IR)) { |
2097 | + mwifiex_dbg(adapter, INFO, |
2098 | + "radar or passive channel %d\n", |
2099 | + channel); |
2100 | + mwifiex_save_hidden_ssid_channels(priv, |
2101 | + bss); |
2102 | + } |
2103 | + |
2104 | + cfg80211_put_bss(priv->wdev.wiphy, bss); |
2105 | } |
2106 | } |
2107 | } else { |
2108 | diff --git a/drivers/net/wireless/realtek/rtl818x/rtl8187/dev.c b/drivers/net/wireless/realtek/rtl818x/rtl8187/dev.c |
2109 | index 6113624ccec3..17e3d5e83062 100644 |
2110 | --- a/drivers/net/wireless/realtek/rtl818x/rtl8187/dev.c |
2111 | +++ b/drivers/net/wireless/realtek/rtl818x/rtl8187/dev.c |
2112 | @@ -446,12 +446,13 @@ static int rtl8187_init_urbs(struct ieee80211_hw *dev) |
2113 | skb_queue_tail(&priv->rx_queue, skb); |
2114 | usb_anchor_urb(entry, &priv->anchored); |
2115 | ret = usb_submit_urb(entry, GFP_KERNEL); |
2116 | - usb_put_urb(entry); |
2117 | if (ret) { |
2118 | skb_unlink(skb, &priv->rx_queue); |
2119 | usb_unanchor_urb(entry); |
2120 | + usb_put_urb(entry); |
2121 | goto err; |
2122 | } |
2123 | + usb_put_urb(entry); |
2124 | } |
2125 | return ret; |
2126 | |
2127 | diff --git a/drivers/pinctrl/pinctrl-xway.c b/drivers/pinctrl/pinctrl-xway.c |
2128 | index dd85ad1807f5..8ea1c6e2a6b2 100644 |
2129 | --- a/drivers/pinctrl/pinctrl-xway.c |
2130 | +++ b/drivers/pinctrl/pinctrl-xway.c |
2131 | @@ -1748,14 +1748,6 @@ static int pinmux_xway_probe(struct platform_device *pdev) |
2132 | } |
2133 | xway_pctrl_desc.pins = xway_info.pads; |
2134 | |
2135 | - /* register the gpio chip */ |
2136 | - xway_chip.parent = &pdev->dev; |
2137 | - ret = devm_gpiochip_add_data(&pdev->dev, &xway_chip, NULL); |
2138 | - if (ret) { |
2139 | - dev_err(&pdev->dev, "Failed to register gpio chip\n"); |
2140 | - return ret; |
2141 | - } |
2142 | - |
2143 | /* setup the data needed by pinctrl */ |
2144 | xway_pctrl_desc.name = dev_name(&pdev->dev); |
2145 | xway_pctrl_desc.npins = xway_chip.ngpio; |
2146 | @@ -1777,10 +1769,33 @@ static int pinmux_xway_probe(struct platform_device *pdev) |
2147 | return ret; |
2148 | } |
2149 | |
2150 | - /* finish with registering the gpio range in pinctrl */ |
2151 | - xway_gpio_range.npins = xway_chip.ngpio; |
2152 | - xway_gpio_range.base = xway_chip.base; |
2153 | - pinctrl_add_gpio_range(xway_info.pctrl, &xway_gpio_range); |
2154 | + /* register the gpio chip */ |
2155 | + xway_chip.parent = &pdev->dev; |
2156 | + xway_chip.owner = THIS_MODULE; |
2157 | + xway_chip.of_node = pdev->dev.of_node; |
2158 | + ret = devm_gpiochip_add_data(&pdev->dev, &xway_chip, NULL); |
2159 | + if (ret) { |
2160 | + dev_err(&pdev->dev, "Failed to register gpio chip\n"); |
2161 | + return ret; |
2162 | + } |
2163 | + |
2164 | + /* |
2165 | + * For DeviceTree-supported systems, the gpio core checks the |
2166 | + * pinctrl's device node for the "gpio-ranges" property. |
2167 | + * If it is present, it takes care of adding the pin ranges |
2168 | + * for the driver. In this case the driver can skip ahead. |
2169 | + * |
2170 | + * In order to remain compatible with older, existing DeviceTree |
2171 | + * files which don't set the "gpio-ranges" property or systems that |
2172 | + * utilize ACPI the driver has to call gpiochip_add_pin_range(). |
2173 | + */ |
2174 | + if (!of_property_read_bool(pdev->dev.of_node, "gpio-ranges")) { |
2175 | + /* finish with registering the gpio range in pinctrl */ |
2176 | + xway_gpio_range.npins = xway_chip.ngpio; |
2177 | + xway_gpio_range.base = xway_chip.base; |
2178 | + pinctrl_add_gpio_range(xway_info.pctrl, &xway_gpio_range); |
2179 | + } |
2180 | + |
2181 | dev_info(&pdev->dev, "Init done\n"); |
2182 | return 0; |
2183 | } |
2184 | diff --git a/drivers/pinctrl/sh-pfc/pfc-sh7264.c b/drivers/pinctrl/sh-pfc/pfc-sh7264.c |
2185 | index 8070765311db..e1c34e19222e 100644 |
2186 | --- a/drivers/pinctrl/sh-pfc/pfc-sh7264.c |
2187 | +++ b/drivers/pinctrl/sh-pfc/pfc-sh7264.c |
2188 | @@ -1716,6 +1716,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = { |
2189 | }, |
2190 | |
2191 | { PINMUX_CFG_REG("PFCR3", 0xfffe38a8, 16, 4) { |
2192 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
2193 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
2194 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
2195 | PF12MD_000, PF12MD_001, 0, PF12MD_011, |
2196 | PF12MD_100, PF12MD_101, 0, 0, |
2197 | 0, 0, 0, 0, 0, 0, 0, 0 } |
2198 | @@ -1759,8 +1762,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = { |
2199 | 0, 0, 0, 0, 0, 0, 0, 0, |
2200 | PF1MD_000, PF1MD_001, PF1MD_010, PF1MD_011, |
2201 | PF1MD_100, PF1MD_101, 0, 0, |
2202 | - 0, 0, 0, 0, 0, 0, 0, 0 |
2203 | - } |
2204 | + 0, 0, 0, 0, 0, 0, 0, 0, |
2205 | + PF0MD_000, PF0MD_001, PF0MD_010, PF0MD_011, |
2206 | + PF0MD_100, PF0MD_101, 0, 0, |
2207 | + 0, 0, 0, 0, 0, 0, 0, 0 } |
2208 | }, |
2209 | |
2210 | { PINMUX_CFG_REG("PFIOR0", 0xfffe38b2, 16, 1) { |
2211 | diff --git a/drivers/pinctrl/sh-pfc/pfc-sh7734.c b/drivers/pinctrl/sh-pfc/pfc-sh7734.c |
2212 | index 6502e676d368..33232041ee86 100644 |
2213 | --- a/drivers/pinctrl/sh-pfc/pfc-sh7734.c |
2214 | +++ b/drivers/pinctrl/sh-pfc/pfc-sh7734.c |
2215 | @@ -2213,22 +2213,22 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = { |
2216 | /* IP10_22 [1] */ |
2217 | FN_CAN_CLK_A, FN_RX4_D, |
2218 | /* IP10_21_19 [3] */ |
2219 | - FN_AUDIO_CLKOUT, FN_TX1_E, FN_HRTS0_C, FN_FSE_B, |
2220 | - FN_LCD_M_DISP_B, 0, 0, 0, |
2221 | + FN_AUDIO_CLKOUT, FN_TX1_E, 0, FN_HRTS0_C, FN_FSE_B, |
2222 | + FN_LCD_M_DISP_B, 0, 0, |
2223 | /* IP10_18_16 [3] */ |
2224 | - FN_AUDIO_CLKC, FN_SCK1_E, FN_HCTS0_C, FN_FRB_B, |
2225 | - FN_LCD_VEPWC_B, 0, 0, 0, |
2226 | + FN_AUDIO_CLKC, FN_SCK1_E, 0, FN_HCTS0_C, FN_FRB_B, |
2227 | + FN_LCD_VEPWC_B, 0, 0, |
2228 | /* IP10_15 [1] */ |
2229 | FN_AUDIO_CLKB_A, FN_LCD_CLK_B, |
2230 | /* IP10_14_12 [3] */ |
2231 | FN_AUDIO_CLKA_A, FN_VI1_CLK_B, FN_SCK1_D, FN_IECLK_B, |
2232 | FN_LCD_FLM_B, 0, 0, 0, |
2233 | /* IP10_11_9 [3] */ |
2234 | - FN_SSI_SDATA3, FN_VI1_7_B, FN_HTX0_C, FN_FWE_B, |
2235 | - FN_LCD_CL2_B, 0, 0, 0, |
2236 | + FN_SSI_SDATA3, FN_VI1_7_B, 0, FN_HTX0_C, FN_FWE_B, |
2237 | + FN_LCD_CL2_B, 0, 0, |
2238 | /* IP10_8_6 [3] */ |
2239 | - FN_SSI_SDATA2, FN_VI1_6_B, FN_HRX0_C, FN_FRE_B, |
2240 | - FN_LCD_CL1_B, 0, 0, 0, |
2241 | + FN_SSI_SDATA2, FN_VI1_6_B, 0, FN_HRX0_C, FN_FRE_B, |
2242 | + FN_LCD_CL1_B, 0, 0, |
2243 | /* IP10_5_3 [3] */ |
2244 | FN_SSI_WS23, FN_VI1_5_B, FN_TX1_D, FN_HSCK0_C, FN_FALE_B, |
2245 | FN_LCD_DON_B, 0, 0, 0, |
2246 | diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c |
2247 | index 454cb2ee3cee..05dc16b477f0 100644 |
2248 | --- a/drivers/platform/x86/hp-wmi.c |
2249 | +++ b/drivers/platform/x86/hp-wmi.c |
2250 | @@ -90,7 +90,7 @@ struct bios_args { |
2251 | u32 command; |
2252 | u32 commandtype; |
2253 | u32 datasize; |
2254 | - u32 data; |
2255 | + u8 data[128]; |
2256 | }; |
2257 | |
2258 | struct bios_return { |
2259 | @@ -198,7 +198,7 @@ static int hp_wmi_perform_query(int query, int write, void *buffer, |
2260 | .command = write ? 0x2 : 0x1, |
2261 | .commandtype = query, |
2262 | .datasize = insize, |
2263 | - .data = 0, |
2264 | + .data = { 0 }, |
2265 | }; |
2266 | struct acpi_buffer input = { sizeof(struct bios_args), &args }; |
2267 | struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; |
2268 | @@ -206,7 +206,7 @@ static int hp_wmi_perform_query(int query, int write, void *buffer, |
2269 | |
2270 | if (WARN_ON(insize > sizeof(args.data))) |
2271 | return -EINVAL; |
2272 | - memcpy(&args.data, buffer, insize); |
2273 | + memcpy(&args.data[0], buffer, insize); |
2274 | |
2275 | wmi_evaluate_method(HPWMI_BIOS_GUID, 0, 0x3, &input, &output); |
2276 | |
2277 | diff --git a/drivers/power/avs/smartreflex.c b/drivers/power/avs/smartreflex.c |
2278 | index fa0f19b975a6..bb7b817cca59 100644 |
2279 | --- a/drivers/power/avs/smartreflex.c |
2280 | +++ b/drivers/power/avs/smartreflex.c |
2281 | @@ -994,8 +994,7 @@ static int omap_sr_remove(struct platform_device *pdev) |
2282 | |
2283 | if (sr_info->autocomp_active) |
2284 | sr_stop_vddautocomp(sr_info); |
2285 | - if (sr_info->dbg_dir) |
2286 | - debugfs_remove_recursive(sr_info->dbg_dir); |
2287 | + debugfs_remove_recursive(sr_info->dbg_dir); |
2288 | |
2289 | pm_runtime_disable(&pdev->dev); |
2290 | list_del(&sr_info->node); |
2291 | diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c |
2292 | index a19246455c13..cc12032ee60d 100644 |
2293 | --- a/drivers/pwm/core.c |
2294 | +++ b/drivers/pwm/core.c |
2295 | @@ -858,6 +858,7 @@ void pwm_put(struct pwm_device *pwm) |
2296 | if (pwm->chip->ops->free) |
2297 | pwm->chip->ops->free(pwm->chip, pwm); |
2298 | |
2299 | + pwm_set_chip_data(pwm, NULL); |
2300 | pwm->label = NULL; |
2301 | |
2302 | module_put(pwm->chip->ops->owner); |
2303 | diff --git a/drivers/pwm/pwm-bcm-iproc.c b/drivers/pwm/pwm-bcm-iproc.c |
2304 | index d961a8207b1c..31b01035d0ab 100644 |
2305 | --- a/drivers/pwm/pwm-bcm-iproc.c |
2306 | +++ b/drivers/pwm/pwm-bcm-iproc.c |
2307 | @@ -187,6 +187,7 @@ static int iproc_pwmc_apply(struct pwm_chip *chip, struct pwm_device *pwm, |
2308 | static const struct pwm_ops iproc_pwm_ops = { |
2309 | .apply = iproc_pwmc_apply, |
2310 | .get_state = iproc_pwmc_get_state, |
2311 | + .owner = THIS_MODULE, |
2312 | }; |
2313 | |
2314 | static int iproc_pwmc_probe(struct platform_device *pdev) |
2315 | diff --git a/drivers/pwm/pwm-berlin.c b/drivers/pwm/pwm-berlin.c |
2316 | index 01339c152ab0..64d9bb1ac272 100644 |
2317 | --- a/drivers/pwm/pwm-berlin.c |
2318 | +++ b/drivers/pwm/pwm-berlin.c |
2319 | @@ -78,7 +78,6 @@ static void berlin_pwm_free(struct pwm_chip *chip, struct pwm_device *pwm) |
2320 | { |
2321 | struct berlin_pwm_channel *channel = pwm_get_chip_data(pwm); |
2322 | |
2323 | - pwm_set_chip_data(pwm, NULL); |
2324 | kfree(channel); |
2325 | } |
2326 | |
2327 | diff --git a/drivers/pwm/pwm-clps711x.c b/drivers/pwm/pwm-clps711x.c |
2328 | index 26ec24e457b1..7e16b7def0dc 100644 |
2329 | --- a/drivers/pwm/pwm-clps711x.c |
2330 | +++ b/drivers/pwm/pwm-clps711x.c |
2331 | @@ -48,7 +48,7 @@ static void clps711x_pwm_update_val(struct clps711x_chip *priv, u32 n, u32 v) |
2332 | static unsigned int clps711x_get_duty(struct pwm_device *pwm, unsigned int v) |
2333 | { |
2334 | /* Duty cycle 0..15 max */ |
2335 | - return DIV_ROUND_CLOSEST(v * 0xf, pwm_get_period(pwm)); |
2336 | + return DIV_ROUND_CLOSEST(v * 0xf, pwm->args.period); |
2337 | } |
2338 | |
2339 | static int clps711x_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm) |
2340 | @@ -71,7 +71,7 @@ static int clps711x_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, |
2341 | struct clps711x_chip *priv = to_clps711x_chip(chip); |
2342 | unsigned int duty; |
2343 | |
2344 | - if (period_ns != pwm_get_period(pwm)) |
2345 | + if (period_ns != pwm->args.period) |
2346 | return -EINVAL; |
2347 | |
2348 | duty = clps711x_get_duty(pwm, duty_ns); |
2349 | diff --git a/drivers/pwm/pwm-samsung.c b/drivers/pwm/pwm-samsung.c |
2350 | index f113cda47032..219757087995 100644 |
2351 | --- a/drivers/pwm/pwm-samsung.c |
2352 | +++ b/drivers/pwm/pwm-samsung.c |
2353 | @@ -235,7 +235,6 @@ static int pwm_samsung_request(struct pwm_chip *chip, struct pwm_device *pwm) |
2354 | static void pwm_samsung_free(struct pwm_chip *chip, struct pwm_device *pwm) |
2355 | { |
2356 | devm_kfree(chip->dev, pwm_get_chip_data(pwm)); |
2357 | - pwm_set_chip_data(pwm, NULL); |
2358 | } |
2359 | |
2360 | static int pwm_samsung_enable(struct pwm_chip *chip, struct pwm_device *pwm) |
2361 | diff --git a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c |
2362 | index f11d41dad9c1..1eb605b6f049 100644 |
2363 | --- a/drivers/regulator/palmas-regulator.c |
2364 | +++ b/drivers/regulator/palmas-regulator.c |
2365 | @@ -435,13 +435,16 @@ static int palmas_ldo_write(struct palmas *palmas, unsigned int reg, |
2366 | static int palmas_set_mode_smps(struct regulator_dev *dev, unsigned int mode) |
2367 | { |
2368 | int id = rdev_get_id(dev); |
2369 | + int ret; |
2370 | struct palmas_pmic *pmic = rdev_get_drvdata(dev); |
2371 | struct palmas_pmic_driver_data *ddata = pmic->palmas->pmic_ddata; |
2372 | struct palmas_regs_info *rinfo = &ddata->palmas_regs_info[id]; |
2373 | unsigned int reg; |
2374 | bool rail_enable = true; |
2375 | |
2376 | - palmas_smps_read(pmic->palmas, rinfo->ctrl_addr, ®); |
2377 | + ret = palmas_smps_read(pmic->palmas, rinfo->ctrl_addr, ®); |
2378 | + if (ret) |
2379 | + return ret; |
2380 | |
2381 | reg &= ~PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK; |
2382 | |
2383 | diff --git a/drivers/regulator/tps65910-regulator.c b/drivers/regulator/tps65910-regulator.c |
2384 | index 696116ebdf50..9cde7b075701 100644 |
2385 | --- a/drivers/regulator/tps65910-regulator.c |
2386 | +++ b/drivers/regulator/tps65910-regulator.c |
2387 | @@ -1102,8 +1102,10 @@ static int tps65910_probe(struct platform_device *pdev) |
2388 | platform_set_drvdata(pdev, pmic); |
2389 | |
2390 | /* Give control of all register to control port */ |
2391 | - tps65910_reg_set_bits(pmic->mfd, TPS65910_DEVCTRL, |
2392 | + err = tps65910_reg_set_bits(pmic->mfd, TPS65910_DEVCTRL, |
2393 | DEVCTRL_SR_CTL_I2C_SEL_MASK); |
2394 | + if (err < 0) |
2395 | + return err; |
2396 | |
2397 | switch (tps65910_chip_id(tps65910)) { |
2398 | case TPS65910: |
2399 | diff --git a/drivers/scsi/csiostor/csio_init.c b/drivers/scsi/csiostor/csio_init.c |
2400 | index dbe416ff46c2..776b99278688 100644 |
2401 | --- a/drivers/scsi/csiostor/csio_init.c |
2402 | +++ b/drivers/scsi/csiostor/csio_init.c |
2403 | @@ -648,7 +648,7 @@ csio_shost_init(struct csio_hw *hw, struct device *dev, |
2404 | if (csio_lnode_init(ln, hw, pln)) |
2405 | goto err_shost_put; |
2406 | |
2407 | - if (scsi_add_host(shost, dev)) |
2408 | + if (scsi_add_host_with_dma(shost, dev, &hw->pdev->dev)) |
2409 | goto err_lnode_exit; |
2410 | |
2411 | return ln; |
2412 | diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c |
2413 | index d44f18f773c0..7e8274938a3e 100644 |
2414 | --- a/drivers/scsi/libsas/sas_expander.c |
2415 | +++ b/drivers/scsi/libsas/sas_expander.c |
2416 | @@ -603,7 +603,14 @@ int sas_smp_phy_control(struct domain_device *dev, int phy_id, |
2417 | } |
2418 | |
2419 | res = smp_execute_task(dev, pc_req, PC_REQ_SIZE, pc_resp,PC_RESP_SIZE); |
2420 | - |
2421 | + if (res) { |
2422 | + pr_err("ex %016llx phy%02d PHY control failed: %d\n", |
2423 | + SAS_ADDR(dev->sas_addr), phy_id, res); |
2424 | + } else if (pc_resp[2] != SMP_RESP_FUNC_ACC) { |
2425 | + pr_err("ex %016llx phy%02d PHY control failed: function result 0x%x\n", |
2426 | + SAS_ADDR(dev->sas_addr), phy_id, pc_resp[2]); |
2427 | + res = pc_resp[2]; |
2428 | + } |
2429 | kfree(pc_resp); |
2430 | kfree(pc_req); |
2431 | return res; |
2432 | @@ -806,6 +813,26 @@ static struct domain_device *sas_ex_discover_end_dev( |
2433 | |
2434 | #ifdef CONFIG_SCSI_SAS_ATA |
2435 | if ((phy->attached_tproto & SAS_PROTOCOL_STP) || phy->attached_sata_dev) { |
2436 | + if (child->linkrate > parent->min_linkrate) { |
2437 | + struct sas_phy_linkrates rates = { |
2438 | + .maximum_linkrate = parent->min_linkrate, |
2439 | + .minimum_linkrate = parent->min_linkrate, |
2440 | + }; |
2441 | + int ret; |
2442 | + |
2443 | + pr_notice("ex %016llx phy%02d SATA device linkrate > min pathway connection rate, attempting to lower device linkrate\n", |
2444 | + SAS_ADDR(child->sas_addr), phy_id); |
2445 | + ret = sas_smp_phy_control(parent, phy_id, |
2446 | + PHY_FUNC_LINK_RESET, &rates); |
2447 | + if (ret) { |
2448 | + pr_err("ex %016llx phy%02d SATA device could not set linkrate (%d)\n", |
2449 | + SAS_ADDR(child->sas_addr), phy_id, ret); |
2450 | + goto out_free; |
2451 | + } |
2452 | + pr_notice("ex %016llx phy%02d SATA device set linkrate successfully\n", |
2453 | + SAS_ADDR(child->sas_addr), phy_id); |
2454 | + child->linkrate = child->min_linkrate; |
2455 | + } |
2456 | res = sas_get_ata_info(child, phy); |
2457 | if (res) |
2458 | goto out_free; |
2459 | diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c |
2460 | index d197aa176dee..d489cc1018b5 100644 |
2461 | --- a/drivers/scsi/lpfc/lpfc_scsi.c |
2462 | +++ b/drivers/scsi/lpfc/lpfc_scsi.c |
2463 | @@ -2707,6 +2707,7 @@ lpfc_bg_scsi_prep_dma_buf_s3(struct lpfc_hba *phba, |
2464 | int datasegcnt, protsegcnt, datadir = scsi_cmnd->sc_data_direction; |
2465 | int prot_group_type = 0; |
2466 | int fcpdl; |
2467 | + struct lpfc_vport *vport = phba->pport; |
2468 | |
2469 | /* |
2470 | * Start the lpfc command prep by bumping the bpl beyond fcp_cmnd |
2471 | @@ -2812,6 +2813,14 @@ lpfc_bg_scsi_prep_dma_buf_s3(struct lpfc_hba *phba, |
2472 | */ |
2473 | iocb_cmd->un.fcpi.fcpi_parm = fcpdl; |
2474 | |
2475 | + /* |
2476 | + * For First burst, we may need to adjust the initial transfer |
2477 | + * length for DIF |
2478 | + */ |
2479 | + if (iocb_cmd->un.fcpi.fcpi_XRdy && |
2480 | + (fcpdl < vport->cfg_first_burst_size)) |
2481 | + iocb_cmd->un.fcpi.fcpi_XRdy = fcpdl; |
2482 | + |
2483 | return 0; |
2484 | err: |
2485 | if (lpfc_cmd->seg_cnt) |
2486 | @@ -3364,6 +3373,7 @@ lpfc_bg_scsi_prep_dma_buf_s4(struct lpfc_hba *phba, |
2487 | int datasegcnt, protsegcnt, datadir = scsi_cmnd->sc_data_direction; |
2488 | int prot_group_type = 0; |
2489 | int fcpdl; |
2490 | + struct lpfc_vport *vport = phba->pport; |
2491 | |
2492 | /* |
2493 | * Start the lpfc command prep by bumping the sgl beyond fcp_cmnd |
2494 | @@ -3479,6 +3489,14 @@ lpfc_bg_scsi_prep_dma_buf_s4(struct lpfc_hba *phba, |
2495 | */ |
2496 | iocb_cmd->un.fcpi.fcpi_parm = fcpdl; |
2497 | |
2498 | + /* |
2499 | + * For First burst, we may need to adjust the initial transfer |
2500 | + * length for DIF |
2501 | + */ |
2502 | + if (iocb_cmd->un.fcpi.fcpi_XRdy && |
2503 | + (fcpdl < vport->cfg_first_burst_size)) |
2504 | + iocb_cmd->un.fcpi.fcpi_XRdy = fcpdl; |
2505 | + |
2506 | /* |
2507 | * If the OAS driver feature is enabled and the lun is enabled for |
2508 | * OAS, set the oas iocb related flags. |
2509 | diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c |
2510 | index 0ad8ecef1e30..abdd6f93c8fe 100644 |
2511 | --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c |
2512 | +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c |
2513 | @@ -821,38 +821,14 @@ static ssize_t tcm_qla2xxx_tpg_enable_show(struct config_item *item, |
2514 | atomic_read(&tpg->lport_tpg_enabled)); |
2515 | } |
2516 | |
2517 | -static void tcm_qla2xxx_depend_tpg(struct work_struct *work) |
2518 | -{ |
2519 | - struct tcm_qla2xxx_tpg *base_tpg = container_of(work, |
2520 | - struct tcm_qla2xxx_tpg, tpg_base_work); |
2521 | - struct se_portal_group *se_tpg = &base_tpg->se_tpg; |
2522 | - struct scsi_qla_host *base_vha = base_tpg->lport->qla_vha; |
2523 | - |
2524 | - if (!target_depend_item(&se_tpg->tpg_group.cg_item)) { |
2525 | - atomic_set(&base_tpg->lport_tpg_enabled, 1); |
2526 | - qlt_enable_vha(base_vha); |
2527 | - } |
2528 | - complete(&base_tpg->tpg_base_comp); |
2529 | -} |
2530 | - |
2531 | -static void tcm_qla2xxx_undepend_tpg(struct work_struct *work) |
2532 | -{ |
2533 | - struct tcm_qla2xxx_tpg *base_tpg = container_of(work, |
2534 | - struct tcm_qla2xxx_tpg, tpg_base_work); |
2535 | - struct se_portal_group *se_tpg = &base_tpg->se_tpg; |
2536 | - struct scsi_qla_host *base_vha = base_tpg->lport->qla_vha; |
2537 | - |
2538 | - if (!qlt_stop_phase1(base_vha->vha_tgt.qla_tgt)) { |
2539 | - atomic_set(&base_tpg->lport_tpg_enabled, 0); |
2540 | - target_undepend_item(&se_tpg->tpg_group.cg_item); |
2541 | - } |
2542 | - complete(&base_tpg->tpg_base_comp); |
2543 | -} |
2544 | - |
2545 | static ssize_t tcm_qla2xxx_tpg_enable_store(struct config_item *item, |
2546 | const char *page, size_t count) |
2547 | { |
2548 | struct se_portal_group *se_tpg = to_tpg(item); |
2549 | + struct se_wwn *se_wwn = se_tpg->se_tpg_wwn; |
2550 | + struct tcm_qla2xxx_lport *lport = container_of(se_wwn, |
2551 | + struct tcm_qla2xxx_lport, lport_wwn); |
2552 | + struct scsi_qla_host *vha = lport->qla_vha; |
2553 | struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, |
2554 | struct tcm_qla2xxx_tpg, se_tpg); |
2555 | unsigned long op; |
2556 | @@ -871,24 +847,16 @@ static ssize_t tcm_qla2xxx_tpg_enable_store(struct config_item *item, |
2557 | if (atomic_read(&tpg->lport_tpg_enabled)) |
2558 | return -EEXIST; |
2559 | |
2560 | - INIT_WORK(&tpg->tpg_base_work, tcm_qla2xxx_depend_tpg); |
2561 | + atomic_set(&tpg->lport_tpg_enabled, 1); |
2562 | + qlt_enable_vha(vha); |
2563 | } else { |
2564 | if (!atomic_read(&tpg->lport_tpg_enabled)) |
2565 | return count; |
2566 | |
2567 | - INIT_WORK(&tpg->tpg_base_work, tcm_qla2xxx_undepend_tpg); |
2568 | + atomic_set(&tpg->lport_tpg_enabled, 0); |
2569 | + qlt_stop_phase1(vha->vha_tgt.qla_tgt); |
2570 | } |
2571 | - init_completion(&tpg->tpg_base_comp); |
2572 | - schedule_work(&tpg->tpg_base_work); |
2573 | - wait_for_completion(&tpg->tpg_base_comp); |
2574 | |
2575 | - if (op) { |
2576 | - if (!atomic_read(&tpg->lport_tpg_enabled)) |
2577 | - return -ENODEV; |
2578 | - } else { |
2579 | - if (atomic_read(&tpg->lport_tpg_enabled)) |
2580 | - return -EPERM; |
2581 | - } |
2582 | return count; |
2583 | } |
2584 | |
2585 | diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.h b/drivers/scsi/qla2xxx/tcm_qla2xxx.h |
2586 | index 37e026a4823d..8b70fa3105bd 100644 |
2587 | --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.h |
2588 | +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.h |
2589 | @@ -48,9 +48,6 @@ struct tcm_qla2xxx_tpg { |
2590 | struct tcm_qla2xxx_tpg_attrib tpg_attrib; |
2591 | /* Returned by tcm_qla2xxx_make_tpg() */ |
2592 | struct se_portal_group se_tpg; |
2593 | - /* Items for dealing with configfs_depend_item */ |
2594 | - struct completion tpg_base_comp; |
2595 | - struct work_struct tpg_base_work; |
2596 | }; |
2597 | |
2598 | struct tcm_qla2xxx_fc_loopid { |
2599 | diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c |
2600 | index 4c30eea45f89..0d6fe039ac19 100644 |
2601 | --- a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c |
2602 | +++ b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c |
2603 | @@ -1630,14 +1630,15 @@ static void _rtl92e_hard_data_xmit(struct sk_buff *skb, struct net_device *dev, |
2604 | memcpy((unsigned char *)(skb->cb), &dev, sizeof(dev)); |
2605 | skb_push(skb, priv->rtllib->tx_headroom); |
2606 | ret = _rtl92e_tx(dev, skb); |
2607 | - if (ret != 0) |
2608 | - kfree_skb(skb); |
2609 | |
2610 | if (queue_index != MGNT_QUEUE) { |
2611 | priv->rtllib->stats.tx_bytes += (skb->len - |
2612 | priv->rtllib->tx_headroom); |
2613 | priv->rtllib->stats.tx_packets++; |
2614 | } |
2615 | + |
2616 | + if (ret != 0) |
2617 | + kfree_skb(skb); |
2618 | } |
2619 | |
2620 | static int _rtl92e_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) |
2621 | diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c |
2622 | index bacc7e284c0c..80ab672d61cc 100644 |
2623 | --- a/drivers/tty/serial/max310x.c |
2624 | +++ b/drivers/tty/serial/max310x.c |
2625 | @@ -769,12 +769,9 @@ static void max310x_start_tx(struct uart_port *port) |
2626 | |
2627 | static unsigned int max310x_tx_empty(struct uart_port *port) |
2628 | { |
2629 | - unsigned int lvl, sts; |
2630 | + u8 lvl = max310x_port_read(port, MAX310X_TXFIFOLVL_REG); |
2631 | |
2632 | - lvl = max310x_port_read(port, MAX310X_TXFIFOLVL_REG); |
2633 | - sts = max310x_port_read(port, MAX310X_IRQSTS_REG); |
2634 | - |
2635 | - return ((sts & MAX310X_IRQ_TXEMPTY_BIT) && !lvl) ? TIOCSER_TEMT : 0; |
2636 | + return lvl ? 0 : TIOCSER_TEMT; |
2637 | } |
2638 | |
2639 | static unsigned int max310x_get_mctrl(struct uart_port *port) |
2640 | diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c |
2641 | index f94d11615b45..a7cb0968259e 100644 |
2642 | --- a/drivers/usb/serial/ftdi_sio.c |
2643 | +++ b/drivers/usb/serial/ftdi_sio.c |
2644 | @@ -1028,6 +1028,9 @@ static const struct usb_device_id id_table_combined[] = { |
2645 | /* Sienna devices */ |
2646 | { USB_DEVICE(FTDI_VID, FTDI_SIENNA_PID) }, |
2647 | { USB_DEVICE(ECHELON_VID, ECHELON_U20_PID) }, |
2648 | + /* U-Blox devices */ |
2649 | + { USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ZED_PID) }, |
2650 | + { USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ODIN_PID) }, |
2651 | { } /* Terminating entry */ |
2652 | }; |
2653 | |
2654 | diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h |
2655 | index 2e8161f79b49..32a40ab9a385 100644 |
2656 | --- a/drivers/usb/serial/ftdi_sio_ids.h |
2657 | +++ b/drivers/usb/serial/ftdi_sio_ids.h |
2658 | @@ -1557,3 +1557,10 @@ |
2659 | */ |
2660 | #define UNJO_VID 0x22B7 |
2661 | #define UNJO_ISODEBUG_V1_PID 0x150D |
2662 | + |
2663 | +/* |
2664 | + * U-Blox products (http://www.u-blox.com). |
2665 | + */ |
2666 | +#define UBLOX_VID 0x1546 |
2667 | +#define UBLOX_C099F9P_ZED_PID 0x0502 |
2668 | +#define UBLOX_C099F9P_ODIN_PID 0x0503 |
2669 | diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c b/drivers/vfio/vfio_iommu_spapr_tce.c |
2670 | index 70c748a5fbcc..a8e25f9409fa 100644 |
2671 | --- a/drivers/vfio/vfio_iommu_spapr_tce.c |
2672 | +++ b/drivers/vfio/vfio_iommu_spapr_tce.c |
2673 | @@ -406,6 +406,7 @@ static void tce_iommu_release(void *iommu_data) |
2674 | { |
2675 | struct tce_container *container = iommu_data; |
2676 | struct tce_iommu_group *tcegrp; |
2677 | + struct tce_iommu_prereg *tcemem, *tmtmp; |
2678 | long i; |
2679 | |
2680 | while (tce_groups_attached(container)) { |
2681 | @@ -428,13 +429,8 @@ static void tce_iommu_release(void *iommu_data) |
2682 | tce_iommu_free_table(container, tbl); |
2683 | } |
2684 | |
2685 | - while (!list_empty(&container->prereg_list)) { |
2686 | - struct tce_iommu_prereg *tcemem; |
2687 | - |
2688 | - tcemem = list_first_entry(&container->prereg_list, |
2689 | - struct tce_iommu_prereg, next); |
2690 | - WARN_ON_ONCE(tce_iommu_prereg_free(container, tcemem)); |
2691 | - } |
2692 | + list_for_each_entry_safe(tcemem, tmtmp, &container->prereg_list, next) |
2693 | + WARN_ON(tce_iommu_prereg_free(container, tcemem)); |
2694 | |
2695 | tce_iommu_disable(container); |
2696 | if (container->mm) |
2697 | diff --git a/drivers/watchdog/meson_gxbb_wdt.c b/drivers/watchdog/meson_gxbb_wdt.c |
2698 | index 44d180a2c5e5..58e06f059e67 100644 |
2699 | --- a/drivers/watchdog/meson_gxbb_wdt.c |
2700 | +++ b/drivers/watchdog/meson_gxbb_wdt.c |
2701 | @@ -137,8 +137,8 @@ static unsigned int meson_gxbb_wdt_get_timeleft(struct watchdog_device *wdt_dev) |
2702 | |
2703 | reg = readl(data->reg_base + GXBB_WDT_TCNT_REG); |
2704 | |
2705 | - return ((reg >> GXBB_WDT_TCNT_CNT_SHIFT) - |
2706 | - (reg & GXBB_WDT_TCNT_SETUP_MASK)) / 1000; |
2707 | + return ((reg & GXBB_WDT_TCNT_SETUP_MASK) - |
2708 | + (reg >> GXBB_WDT_TCNT_CNT_SHIFT)) / 1000; |
2709 | } |
2710 | |
2711 | static const struct watchdog_ops meson_gxbb_wdt_ops = { |
2712 | diff --git a/drivers/xen/xen-pciback/pci_stub.c b/drivers/xen/xen-pciback/pci_stub.c |
2713 | index 6331a95691a4..ee5ce9286d61 100644 |
2714 | --- a/drivers/xen/xen-pciback/pci_stub.c |
2715 | +++ b/drivers/xen/xen-pciback/pci_stub.c |
2716 | @@ -106,7 +106,8 @@ static void pcistub_device_release(struct kref *kref) |
2717 | * is called from "unbind" which takes a device_lock mutex. |
2718 | */ |
2719 | __pci_reset_function_locked(dev); |
2720 | - if (pci_load_and_free_saved_state(dev, &dev_data->pci_saved_state)) |
2721 | + if (dev_data && |
2722 | + pci_load_and_free_saved_state(dev, &dev_data->pci_saved_state)) |
2723 | dev_info(&dev->dev, "Could not reload PCI state\n"); |
2724 | else |
2725 | pci_restore_state(dev); |
2726 | diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c |
2727 | index 8d93854a4b4f..74c17db75201 100644 |
2728 | --- a/fs/btrfs/delayed-ref.c |
2729 | +++ b/fs/btrfs/delayed-ref.c |
2730 | @@ -193,8 +193,6 @@ static inline void drop_delayed_ref(struct btrfs_trans_handle *trans, |
2731 | ref->in_tree = 0; |
2732 | btrfs_put_delayed_ref(ref); |
2733 | atomic_dec(&delayed_refs->num_entries); |
2734 | - if (trans->delayed_ref_updates) |
2735 | - trans->delayed_ref_updates--; |
2736 | } |
2737 | |
2738 | static bool merge_ref(struct btrfs_trans_handle *trans, |
2739 | @@ -445,7 +443,6 @@ add_delayed_ref_tail_merge(struct btrfs_trans_handle *trans, |
2740 | add_tail: |
2741 | list_add_tail(&ref->list, &href->ref_list); |
2742 | atomic_inc(&root->num_entries); |
2743 | - trans->delayed_ref_updates++; |
2744 | spin_unlock(&href->lock); |
2745 | return ret; |
2746 | } |
2747 | diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c |
2748 | index 39af17b407f0..d83e99fa98b3 100644 |
2749 | --- a/fs/gfs2/bmap.c |
2750 | +++ b/fs/gfs2/bmap.c |
2751 | @@ -1236,6 +1236,8 @@ static int do_grow(struct inode *inode, u64 size) |
2752 | } |
2753 | |
2754 | error = gfs2_trans_begin(sdp, RES_DINODE + RES_STATFS + RES_RG_BIT + |
2755 | + (unstuff && |
2756 | + gfs2_is_jdata(ip) ? RES_JDATA : 0) + |
2757 | (sdp->sd_args.ar_quota == GFS2_QUOTA_OFF ? |
2758 | 0 : RES_QUOTA), 0); |
2759 | if (error) |
2760 | diff --git a/fs/ocfs2/journal.c b/fs/ocfs2/journal.c |
2761 | index a30f63623db7..13cf69aa4cae 100644 |
2762 | --- a/fs/ocfs2/journal.c |
2763 | +++ b/fs/ocfs2/journal.c |
2764 | @@ -1018,7 +1018,8 @@ void ocfs2_journal_shutdown(struct ocfs2_super *osb) |
2765 | mlog_errno(status); |
2766 | } |
2767 | |
2768 | - if (status == 0) { |
2769 | + /* Shutdown the kernel journal system */ |
2770 | + if (!jbd2_journal_destroy(journal->j_journal) && !status) { |
2771 | /* |
2772 | * Do not toggle if flush was unsuccessful otherwise |
2773 | * will leave dirty metadata in a "clean" journal |
2774 | @@ -1027,9 +1028,6 @@ void ocfs2_journal_shutdown(struct ocfs2_super *osb) |
2775 | if (status < 0) |
2776 | mlog_errno(status); |
2777 | } |
2778 | - |
2779 | - /* Shutdown the kernel journal system */ |
2780 | - jbd2_journal_destroy(journal->j_journal); |
2781 | journal->j_journal = NULL; |
2782 | |
2783 | OCFS2_I(inode)->ip_open_count--; |
2784 | diff --git a/fs/xfs/xfs_ioctl32.c b/fs/xfs/xfs_ioctl32.c |
2785 | index 321f57721b92..6b7ed221726d 100644 |
2786 | --- a/fs/xfs/xfs_ioctl32.c |
2787 | +++ b/fs/xfs/xfs_ioctl32.c |
2788 | @@ -251,6 +251,32 @@ xfs_compat_ioc_bulkstat( |
2789 | int done; |
2790 | int error; |
2791 | |
2792 | + /* |
2793 | + * Output structure handling functions. Depending on the command, |
2794 | + * either the xfs_bstat and xfs_inogrp structures are written out |
2795 | + * to userpace memory via bulkreq.ubuffer. Normally the compat |
2796 | + * functions and structure size are the correct ones to use ... |
2797 | + */ |
2798 | + inumbers_fmt_pf inumbers_func = xfs_inumbers_fmt_compat; |
2799 | + bulkstat_one_pf bs_one_func = xfs_bulkstat_one_compat; |
2800 | + size_t bs_one_size = sizeof(struct compat_xfs_bstat); |
2801 | + |
2802 | +#ifdef CONFIG_X86_X32 |
2803 | + if (in_x32_syscall()) { |
2804 | + /* |
2805 | + * ... but on x32 the input xfs_fsop_bulkreq has pointers |
2806 | + * which must be handled in the "compat" (32-bit) way, while |
2807 | + * the xfs_bstat and xfs_inogrp structures follow native 64- |
2808 | + * bit layout convention. So adjust accordingly, otherwise |
2809 | + * the data written out in compat layout will not match what |
2810 | + * x32 userspace expects. |
2811 | + */ |
2812 | + inumbers_func = xfs_inumbers_fmt; |
2813 | + bs_one_func = xfs_bulkstat_one; |
2814 | + bs_one_size = sizeof(struct xfs_bstat); |
2815 | + } |
2816 | +#endif |
2817 | + |
2818 | /* done = 1 if there are more stats to get and if bulkstat */ |
2819 | /* should be called again (unused here, but used in dmapi) */ |
2820 | |
2821 | @@ -282,15 +308,15 @@ xfs_compat_ioc_bulkstat( |
2822 | |
2823 | if (cmd == XFS_IOC_FSINUMBERS_32) { |
2824 | error = xfs_inumbers(mp, &inlast, &count, |
2825 | - bulkreq.ubuffer, xfs_inumbers_fmt_compat); |
2826 | + bulkreq.ubuffer, inumbers_func); |
2827 | } else if (cmd == XFS_IOC_FSBULKSTAT_SINGLE_32) { |
2828 | int res; |
2829 | |
2830 | - error = xfs_bulkstat_one_compat(mp, inlast, bulkreq.ubuffer, |
2831 | - sizeof(compat_xfs_bstat_t), NULL, &res); |
2832 | + error = bs_one_func(mp, inlast, bulkreq.ubuffer, |
2833 | + bs_one_size, NULL, &res); |
2834 | } else if (cmd == XFS_IOC_FSBULKSTAT_32) { |
2835 | error = xfs_bulkstat(mp, &inlast, &count, |
2836 | - xfs_bulkstat_one_compat, sizeof(compat_xfs_bstat_t), |
2837 | + bs_one_func, bs_one_size, |
2838 | bulkreq.ubuffer, &done); |
2839 | } else |
2840 | error = -EINVAL; |
2841 | @@ -346,6 +372,7 @@ xfs_compat_attrlist_by_handle( |
2842 | { |
2843 | int error; |
2844 | attrlist_cursor_kern_t *cursor; |
2845 | + compat_xfs_fsop_attrlist_handlereq_t __user *p = arg; |
2846 | compat_xfs_fsop_attrlist_handlereq_t al_hreq; |
2847 | struct dentry *dentry; |
2848 | char *kbuf; |
2849 | @@ -380,6 +407,11 @@ xfs_compat_attrlist_by_handle( |
2850 | if (error) |
2851 | goto out_kfree; |
2852 | |
2853 | + if (copy_to_user(&p->pos, cursor, sizeof(attrlist_cursor_kern_t))) { |
2854 | + error = -EFAULT; |
2855 | + goto out_kfree; |
2856 | + } |
2857 | + |
2858 | if (copy_to_user(compat_ptr(al_hreq.buffer), kbuf, al_hreq.buflen)) |
2859 | error = -EFAULT; |
2860 | |
2861 | diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c |
2862 | index 802bcc326d9f..0d93d3c10fcc 100644 |
2863 | --- a/fs/xfs/xfs_rtalloc.c |
2864 | +++ b/fs/xfs/xfs_rtalloc.c |
2865 | @@ -1222,13 +1222,11 @@ xfs_rtmount_inodes( |
2866 | xfs_sb_t *sbp; |
2867 | |
2868 | sbp = &mp->m_sb; |
2869 | - if (sbp->sb_rbmino == NULLFSINO) |
2870 | - return 0; |
2871 | error = xfs_iget(mp, NULL, sbp->sb_rbmino, 0, 0, &mp->m_rbmip); |
2872 | if (error) |
2873 | return error; |
2874 | ASSERT(mp->m_rbmip != NULL); |
2875 | - ASSERT(sbp->sb_rsumino != NULLFSINO); |
2876 | + |
2877 | error = xfs_iget(mp, NULL, sbp->sb_rsumino, 0, 0, &mp->m_rsumip); |
2878 | if (error) { |
2879 | IRELE(mp->m_rbmip); |
2880 | diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h |
2881 | index 206fe3bccccc..575f2dee8cf7 100644 |
2882 | --- a/include/linux/genalloc.h |
2883 | +++ b/include/linux/genalloc.h |
2884 | @@ -50,7 +50,8 @@ typedef unsigned long (*genpool_algo_t)(unsigned long *map, |
2885 | unsigned long size, |
2886 | unsigned long start, |
2887 | unsigned int nr, |
2888 | - void *data, struct gen_pool *pool); |
2889 | + void *data, struct gen_pool *pool, |
2890 | + unsigned long start_addr); |
2891 | |
2892 | /* |
2893 | * General purpose special memory pool descriptor. |
2894 | @@ -130,24 +131,24 @@ extern void gen_pool_set_algo(struct gen_pool *pool, genpool_algo_t algo, |
2895 | |
2896 | extern unsigned long gen_pool_first_fit(unsigned long *map, unsigned long size, |
2897 | unsigned long start, unsigned int nr, void *data, |
2898 | - struct gen_pool *pool); |
2899 | + struct gen_pool *pool, unsigned long start_addr); |
2900 | |
2901 | extern unsigned long gen_pool_fixed_alloc(unsigned long *map, |
2902 | unsigned long size, unsigned long start, unsigned int nr, |
2903 | - void *data, struct gen_pool *pool); |
2904 | + void *data, struct gen_pool *pool, unsigned long start_addr); |
2905 | |
2906 | extern unsigned long gen_pool_first_fit_align(unsigned long *map, |
2907 | unsigned long size, unsigned long start, unsigned int nr, |
2908 | - void *data, struct gen_pool *pool); |
2909 | + void *data, struct gen_pool *pool, unsigned long start_addr); |
2910 | |
2911 | |
2912 | extern unsigned long gen_pool_first_fit_order_align(unsigned long *map, |
2913 | unsigned long size, unsigned long start, unsigned int nr, |
2914 | - void *data, struct gen_pool *pool); |
2915 | + void *data, struct gen_pool *pool, unsigned long start_addr); |
2916 | |
2917 | extern unsigned long gen_pool_best_fit(unsigned long *map, unsigned long size, |
2918 | unsigned long start, unsigned int nr, void *data, |
2919 | - struct gen_pool *pool); |
2920 | + struct gen_pool *pool, unsigned long start_addr); |
2921 | |
2922 | |
2923 | extern struct gen_pool *devm_gen_pool_create(struct device *dev, |
2924 | diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h |
2925 | index fb0fde686cb1..4a9838feb086 100644 |
2926 | --- a/include/linux/gpio/consumer.h |
2927 | +++ b/include/linux/gpio/consumer.h |
2928 | @@ -398,7 +398,7 @@ static inline int gpiod_to_irq(const struct gpio_desc *desc) |
2929 | |
2930 | static inline struct gpio_desc *gpio_to_desc(unsigned gpio) |
2931 | { |
2932 | - return ERR_PTR(-EINVAL); |
2933 | + return NULL; |
2934 | } |
2935 | |
2936 | static inline int desc_to_gpio(const struct gpio_desc *desc) |
2937 | diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h |
2938 | index 2ecf0f32444e..29ed5977ac04 100644 |
2939 | --- a/include/linux/netdevice.h |
2940 | +++ b/include/linux/netdevice.h |
2941 | @@ -3565,7 +3565,7 @@ static inline u32 netif_msg_init(int debug_value, int default_msg_enable_bits) |
2942 | if (debug_value == 0) /* no output */ |
2943 | return 0; |
2944 | /* set low N bits */ |
2945 | - return (1 << debug_value) - 1; |
2946 | + return (1U << debug_value) - 1; |
2947 | } |
2948 | |
2949 | static inline void __netif_tx_lock(struct netdev_queue *txq, int cpu) |
2950 | diff --git a/include/linux/reset-controller.h b/include/linux/reset-controller.h |
2951 | index db1fe6772ad5..b5542aff192c 100644 |
2952 | --- a/include/linux/reset-controller.h |
2953 | +++ b/include/linux/reset-controller.h |
2954 | @@ -6,7 +6,7 @@ |
2955 | struct reset_controller_dev; |
2956 | |
2957 | /** |
2958 | - * struct reset_control_ops |
2959 | + * struct reset_control_ops - reset controller driver callbacks |
2960 | * |
2961 | * @reset: for self-deasserting resets, does all necessary |
2962 | * things to reset the device |
2963 | diff --git a/include/linux/swap.h b/include/linux/swap.h |
2964 | index 2228907d08ff..d13617c7bcc4 100644 |
2965 | --- a/include/linux/swap.h |
2966 | +++ b/include/linux/swap.h |
2967 | @@ -335,14 +335,8 @@ extern unsigned long vm_total_pages; |
2968 | extern int node_reclaim_mode; |
2969 | extern int sysctl_min_unmapped_ratio; |
2970 | extern int sysctl_min_slab_ratio; |
2971 | -extern int node_reclaim(struct pglist_data *, gfp_t, unsigned int); |
2972 | #else |
2973 | #define node_reclaim_mode 0 |
2974 | -static inline int node_reclaim(struct pglist_data *pgdat, gfp_t mask, |
2975 | - unsigned int order) |
2976 | -{ |
2977 | - return 0; |
2978 | -} |
2979 | #endif |
2980 | |
2981 | extern int page_evictable(struct page *page); |
2982 | diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h |
2983 | index 11c3bf262a85..b46133a41f55 100644 |
2984 | --- a/include/net/sctp/structs.h |
2985 | +++ b/include/net/sctp/structs.h |
2986 | @@ -1202,6 +1202,9 @@ struct sctp_ep_common { |
2987 | /* What socket does this endpoint belong to? */ |
2988 | struct sock *sk; |
2989 | |
2990 | + /* Cache netns and it won't change once set */ |
2991 | + struct net *net; |
2992 | + |
2993 | /* This is where we receive inbound chunks. */ |
2994 | struct sctp_inq inqueue; |
2995 | |
2996 | diff --git a/include/net/sock.h b/include/net/sock.h |
2997 | index d8d14ae8892a..aed436567d70 100644 |
2998 | --- a/include/net/sock.h |
2999 | +++ b/include/net/sock.h |
3000 | @@ -1201,7 +1201,7 @@ static inline void sk_sockets_allocated_inc(struct sock *sk) |
3001 | percpu_counter_inc(sk->sk_prot->sockets_allocated); |
3002 | } |
3003 | |
3004 | -static inline int |
3005 | +static inline u64 |
3006 | sk_sockets_allocated_read_positive(struct sock *sk) |
3007 | { |
3008 | return percpu_counter_read_positive(sk->sk_prot->sockets_allocated); |
3009 | diff --git a/lib/genalloc.c b/lib/genalloc.c |
3010 | index ca06adc4f445..7e85d1e37a6e 100644 |
3011 | --- a/lib/genalloc.c |
3012 | +++ b/lib/genalloc.c |
3013 | @@ -35,6 +35,7 @@ |
3014 | #include <linux/interrupt.h> |
3015 | #include <linux/genalloc.h> |
3016 | #include <linux/of_device.h> |
3017 | +#include <linux/vmalloc.h> |
3018 | |
3019 | static inline size_t chunk_size(const struct gen_pool_chunk *chunk) |
3020 | { |
3021 | @@ -187,7 +188,7 @@ int gen_pool_add_virt(struct gen_pool *pool, unsigned long virt, phys_addr_t phy |
3022 | int nbytes = sizeof(struct gen_pool_chunk) + |
3023 | BITS_TO_LONGS(nbits) * sizeof(long); |
3024 | |
3025 | - chunk = kzalloc_node(nbytes, GFP_KERNEL, nid); |
3026 | + chunk = vzalloc_node(nbytes, nid); |
3027 | if (unlikely(chunk == NULL)) |
3028 | return -ENOMEM; |
3029 | |
3030 | @@ -251,7 +252,7 @@ void gen_pool_destroy(struct gen_pool *pool) |
3031 | bit = find_next_bit(chunk->bits, end_bit, 0); |
3032 | BUG_ON(bit < end_bit); |
3033 | |
3034 | - kfree(chunk); |
3035 | + vfree(chunk); |
3036 | } |
3037 | kfree_const(pool->name); |
3038 | kfree(pool); |
3039 | @@ -311,7 +312,7 @@ unsigned long gen_pool_alloc_algo(struct gen_pool *pool, size_t size, |
3040 | end_bit = chunk_size(chunk) >> order; |
3041 | retry: |
3042 | start_bit = algo(chunk->bits, end_bit, start_bit, |
3043 | - nbits, data, pool); |
3044 | + nbits, data, pool, chunk->start_addr); |
3045 | if (start_bit >= end_bit) |
3046 | continue; |
3047 | remain = bitmap_set_ll(chunk->bits, start_bit, nbits); |
3048 | @@ -525,7 +526,7 @@ EXPORT_SYMBOL(gen_pool_set_algo); |
3049 | */ |
3050 | unsigned long gen_pool_first_fit(unsigned long *map, unsigned long size, |
3051 | unsigned long start, unsigned int nr, void *data, |
3052 | - struct gen_pool *pool) |
3053 | + struct gen_pool *pool, unsigned long start_addr) |
3054 | { |
3055 | return bitmap_find_next_zero_area(map, size, start, nr, 0); |
3056 | } |
3057 | @@ -543,16 +544,19 @@ EXPORT_SYMBOL(gen_pool_first_fit); |
3058 | */ |
3059 | unsigned long gen_pool_first_fit_align(unsigned long *map, unsigned long size, |
3060 | unsigned long start, unsigned int nr, void *data, |
3061 | - struct gen_pool *pool) |
3062 | + struct gen_pool *pool, unsigned long start_addr) |
3063 | { |
3064 | struct genpool_data_align *alignment; |
3065 | - unsigned long align_mask; |
3066 | + unsigned long align_mask, align_off; |
3067 | int order; |
3068 | |
3069 | alignment = data; |
3070 | order = pool->min_alloc_order; |
3071 | align_mask = ((alignment->align + (1UL << order) - 1) >> order) - 1; |
3072 | - return bitmap_find_next_zero_area(map, size, start, nr, align_mask); |
3073 | + align_off = (start_addr & (alignment->align - 1)) >> order; |
3074 | + |
3075 | + return bitmap_find_next_zero_area_off(map, size, start, nr, |
3076 | + align_mask, align_off); |
3077 | } |
3078 | EXPORT_SYMBOL(gen_pool_first_fit_align); |
3079 | |
3080 | @@ -567,7 +571,7 @@ EXPORT_SYMBOL(gen_pool_first_fit_align); |
3081 | */ |
3082 | unsigned long gen_pool_fixed_alloc(unsigned long *map, unsigned long size, |
3083 | unsigned long start, unsigned int nr, void *data, |
3084 | - struct gen_pool *pool) |
3085 | + struct gen_pool *pool, unsigned long start_addr) |
3086 | { |
3087 | struct genpool_data_fixed *fixed_data; |
3088 | int order; |
3089 | @@ -601,7 +605,8 @@ EXPORT_SYMBOL(gen_pool_fixed_alloc); |
3090 | */ |
3091 | unsigned long gen_pool_first_fit_order_align(unsigned long *map, |
3092 | unsigned long size, unsigned long start, |
3093 | - unsigned int nr, void *data, struct gen_pool *pool) |
3094 | + unsigned int nr, void *data, struct gen_pool *pool, |
3095 | + unsigned long start_addr) |
3096 | { |
3097 | unsigned long align_mask = roundup_pow_of_two(nr) - 1; |
3098 | |
3099 | @@ -624,7 +629,7 @@ EXPORT_SYMBOL(gen_pool_first_fit_order_align); |
3100 | */ |
3101 | unsigned long gen_pool_best_fit(unsigned long *map, unsigned long size, |
3102 | unsigned long start, unsigned int nr, void *data, |
3103 | - struct gen_pool *pool) |
3104 | + struct gen_pool *pool, unsigned long start_addr) |
3105 | { |
3106 | unsigned long start_bit = size; |
3107 | unsigned long len = size + 1; |
3108 | diff --git a/mm/internal.h b/mm/internal.h |
3109 | index 3e2d01694747..f6df7cb8cbc0 100644 |
3110 | --- a/mm/internal.h |
3111 | +++ b/mm/internal.h |
3112 | @@ -442,6 +442,16 @@ static inline void mminit_validate_memmodel_limits(unsigned long *start_pfn, |
3113 | #define NODE_RECLAIM_SOME 0 |
3114 | #define NODE_RECLAIM_SUCCESS 1 |
3115 | |
3116 | +#ifdef CONFIG_NUMA |
3117 | +extern int node_reclaim(struct pglist_data *, gfp_t, unsigned int); |
3118 | +#else |
3119 | +static inline int node_reclaim(struct pglist_data *pgdat, gfp_t mask, |
3120 | + unsigned int order) |
3121 | +{ |
3122 | + return NODE_RECLAIM_NOSCAN; |
3123 | +} |
3124 | +#endif |
3125 | + |
3126 | extern int hwpoison_filter(struct page *p); |
3127 | |
3128 | extern u32 hwpoison_filter_dev_major; |
3129 | diff --git a/net/core/neighbour.c b/net/core/neighbour.c |
3130 | index 6e964fec45cf..44a29be7bfff 100644 |
3131 | --- a/net/core/neighbour.c |
3132 | +++ b/net/core/neighbour.c |
3133 | @@ -18,6 +18,7 @@ |
3134 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
3135 | |
3136 | #include <linux/slab.h> |
3137 | +#include <linux/kmemleak.h> |
3138 | #include <linux/types.h> |
3139 | #include <linux/kernel.h> |
3140 | #include <linux/module.h> |
3141 | @@ -325,12 +326,14 @@ static struct neigh_hash_table *neigh_hash_alloc(unsigned int shift) |
3142 | ret = kmalloc(sizeof(*ret), GFP_ATOMIC); |
3143 | if (!ret) |
3144 | return NULL; |
3145 | - if (size <= PAGE_SIZE) |
3146 | + if (size <= PAGE_SIZE) { |
3147 | buckets = kzalloc(size, GFP_ATOMIC); |
3148 | - else |
3149 | + } else { |
3150 | buckets = (struct neighbour __rcu **) |
3151 | __get_free_pages(GFP_ATOMIC | __GFP_ZERO, |
3152 | get_order(size)); |
3153 | + kmemleak_alloc(buckets, size, 1, GFP_ATOMIC); |
3154 | + } |
3155 | if (!buckets) { |
3156 | kfree(ret); |
3157 | return NULL; |
3158 | @@ -350,10 +353,12 @@ static void neigh_hash_free_rcu(struct rcu_head *head) |
3159 | size_t size = (1 << nht->hash_shift) * sizeof(struct neighbour *); |
3160 | struct neighbour __rcu **buckets = nht->hash_buckets; |
3161 | |
3162 | - if (size <= PAGE_SIZE) |
3163 | + if (size <= PAGE_SIZE) { |
3164 | kfree(buckets); |
3165 | - else |
3166 | + } else { |
3167 | + kmemleak_free(buckets); |
3168 | free_pages((unsigned long)buckets, get_order(size)); |
3169 | + } |
3170 | kfree(nht); |
3171 | } |
3172 | |
3173 | diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c |
3174 | index 4509dec7bd1c..7630fa80db92 100644 |
3175 | --- a/net/core/net_namespace.c |
3176 | +++ b/net/core/net_namespace.c |
3177 | @@ -802,7 +802,8 @@ static int __init net_ns_init(void) |
3178 | |
3179 | mutex_unlock(&net_mutex); |
3180 | |
3181 | - register_pernet_subsys(&net_ns_ops); |
3182 | + if (register_pernet_subsys(&net_ns_ops)) |
3183 | + panic("Could not register network namespace subsystems"); |
3184 | |
3185 | rtnl_register(PF_UNSPEC, RTM_NEWNSID, rtnl_net_newid, NULL, NULL); |
3186 | rtnl_register(PF_UNSPEC, RTM_GETNSID, rtnl_net_getid, rtnl_net_dumpid, |
3187 | diff --git a/net/core/sock.c b/net/core/sock.c |
3188 | index d22493351407..41794a698da6 100644 |
3189 | --- a/net/core/sock.c |
3190 | +++ b/net/core/sock.c |
3191 | @@ -2156,7 +2156,7 @@ int __sk_mem_schedule(struct sock *sk, int size, int kind) |
3192 | } |
3193 | |
3194 | if (sk_has_memory_pressure(sk)) { |
3195 | - int alloc; |
3196 | + u64 alloc; |
3197 | |
3198 | if (!sk_under_memory_pressure(sk)) |
3199 | return 1; |
3200 | diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c |
3201 | index b2c26b081134..80554e7e9a0f 100644 |
3202 | --- a/net/decnet/dn_dev.c |
3203 | +++ b/net/decnet/dn_dev.c |
3204 | @@ -55,7 +55,7 @@ |
3205 | #include <net/dn_neigh.h> |
3206 | #include <net/dn_fib.h> |
3207 | |
3208 | -#define DN_IFREQ_SIZE (sizeof(struct ifreq) - sizeof(struct sockaddr) + sizeof(struct sockaddr_dn)) |
3209 | +#define DN_IFREQ_SIZE (offsetof(struct ifreq, ifr_ifru) + sizeof(struct sockaddr_dn)) |
3210 | |
3211 | static char dn_rt_all_end_mcast[ETH_ALEN] = {0xAB,0x00,0x00,0x04,0x00,0x00}; |
3212 | static char dn_rt_all_rt_mcast[ETH_ALEN] = {0xAB,0x00,0x00,0x03,0x00,0x00}; |
3213 | diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c |
3214 | index e6ee6acac80c..a4db2d79b913 100644 |
3215 | --- a/net/ipv4/ip_tunnel.c |
3216 | +++ b/net/ipv4/ip_tunnel.c |
3217 | @@ -653,13 +653,19 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, |
3218 | dst = tnl_params->daddr; |
3219 | if (dst == 0) { |
3220 | /* NBMA tunnel */ |
3221 | + struct ip_tunnel_info *tun_info; |
3222 | |
3223 | if (!skb_dst(skb)) { |
3224 | dev->stats.tx_fifo_errors++; |
3225 | goto tx_error; |
3226 | } |
3227 | |
3228 | - if (skb->protocol == htons(ETH_P_IP)) { |
3229 | + tun_info = skb_tunnel_info(skb); |
3230 | + if (tun_info && (tun_info->mode & IP_TUNNEL_INFO_TX) && |
3231 | + ip_tunnel_info_af(tun_info) == AF_INET && |
3232 | + tun_info->key.u.ipv4.dst) |
3233 | + dst = tun_info->key.u.ipv4.dst; |
3234 | + else if (skb->protocol == htons(ETH_P_IP)) { |
3235 | rt = skb_rtable(skb); |
3236 | dst = rt_nexthop(rt, inner_iph->daddr); |
3237 | } |
3238 | diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c |
3239 | index 892c392ff8fc..8e8a185dbb9b 100644 |
3240 | --- a/net/mac80211/sta_info.c |
3241 | +++ b/net/mac80211/sta_info.c |
3242 | @@ -2305,7 +2305,8 @@ unsigned long ieee80211_sta_last_active(struct sta_info *sta) |
3243 | { |
3244 | struct ieee80211_sta_rx_stats *stats = sta_get_last_rx_stats(sta); |
3245 | |
3246 | - if (time_after(stats->last_rx, sta->status_stats.last_ack)) |
3247 | + if (!sta->status_stats.last_ack || |
3248 | + time_after(stats->last_rx, sta->status_stats.last_ack)) |
3249 | return stats->last_rx; |
3250 | return sta->status_stats.last_ack; |
3251 | } |
3252 | diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c |
3253 | index 0ddcc63a0247..c28f0e2a7c3c 100644 |
3254 | --- a/net/openvswitch/datapath.c |
3255 | +++ b/net/openvswitch/datapath.c |
3256 | @@ -738,9 +738,13 @@ static size_t ovs_flow_cmd_msg_size(const struct sw_flow_actions *acts, |
3257 | { |
3258 | size_t len = NLMSG_ALIGN(sizeof(struct ovs_header)); |
3259 | |
3260 | - /* OVS_FLOW_ATTR_UFID */ |
3261 | + /* OVS_FLOW_ATTR_UFID, or unmasked flow key as fallback |
3262 | + * see ovs_nla_put_identifier() |
3263 | + */ |
3264 | if (sfid && ovs_identifier_is_ufid(sfid)) |
3265 | len += nla_total_size(sfid->ufid_len); |
3266 | + else |
3267 | + len += nla_total_size(ovs_key_attr_size()); |
3268 | |
3269 | /* OVS_FLOW_ATTR_KEY */ |
3270 | if (!sfid || should_fill_key(sfid, ufid_flags)) |
3271 | @@ -916,7 +920,10 @@ static struct sk_buff *ovs_flow_cmd_build_info(const struct sw_flow *flow, |
3272 | retval = ovs_flow_cmd_fill_info(flow, dp_ifindex, skb, |
3273 | info->snd_portid, info->snd_seq, 0, |
3274 | cmd, ufid_flags); |
3275 | - BUG_ON(retval < 0); |
3276 | + if (WARN_ON_ONCE(retval < 0)) { |
3277 | + kfree_skb(skb); |
3278 | + skb = ERR_PTR(retval); |
3279 | + } |
3280 | return skb; |
3281 | } |
3282 | |
3283 | @@ -1343,7 +1350,10 @@ static int ovs_flow_cmd_del(struct sk_buff *skb, struct genl_info *info) |
3284 | OVS_FLOW_CMD_DEL, |
3285 | ufid_flags); |
3286 | rcu_read_unlock(); |
3287 | - BUG_ON(err < 0); |
3288 | + if (WARN_ON_ONCE(err < 0)) { |
3289 | + kfree_skb(reply); |
3290 | + goto out_free; |
3291 | + } |
3292 | |
3293 | ovs_notify(&dp_flow_genl_family, reply, info); |
3294 | } else { |
3295 | @@ -1351,6 +1361,7 @@ static int ovs_flow_cmd_del(struct sk_buff *skb, struct genl_info *info) |
3296 | } |
3297 | } |
3298 | |
3299 | +out_free: |
3300 | ovs_flow_free(flow, true); |
3301 | return 0; |
3302 | unlock: |
3303 | diff --git a/net/sched/sch_mq.c b/net/sched/sch_mq.c |
3304 | index 20b7f1646f69..c3c4c09ab289 100644 |
3305 | --- a/net/sched/sch_mq.c |
3306 | +++ b/net/sched/sch_mq.c |
3307 | @@ -195,7 +195,8 @@ static int mq_dump_class_stats(struct Qdisc *sch, unsigned long cl, |
3308 | struct netdev_queue *dev_queue = mq_queue_get(sch, cl); |
3309 | |
3310 | sch = dev_queue->qdisc_sleeping; |
3311 | - if (gnet_stats_copy_basic(&sch->running, d, NULL, &sch->bstats) < 0 || |
3312 | + if (gnet_stats_copy_basic(&sch->running, d, sch->cpu_bstats, |
3313 | + &sch->bstats) < 0 || |
3314 | gnet_stats_copy_queue(d, NULL, &sch->qstats, sch->q.qlen) < 0) |
3315 | return -1; |
3316 | return 0; |
3317 | diff --git a/net/sched/sch_mqprio.c b/net/sched/sch_mqprio.c |
3318 | index 922683418e53..1451fa180e6c 100644 |
3319 | --- a/net/sched/sch_mqprio.c |
3320 | +++ b/net/sched/sch_mqprio.c |
3321 | @@ -362,8 +362,8 @@ static int mqprio_dump_class_stats(struct Qdisc *sch, unsigned long cl, |
3322 | struct netdev_queue *dev_queue = mqprio_queue_get(sch, cl); |
3323 | |
3324 | sch = dev_queue->qdisc_sleeping; |
3325 | - if (gnet_stats_copy_basic(qdisc_root_sleeping_running(sch), |
3326 | - d, NULL, &sch->bstats) < 0 || |
3327 | + if (gnet_stats_copy_basic(qdisc_root_sleeping_running(sch), d, |
3328 | + sch->cpu_bstats, &sch->bstats) < 0 || |
3329 | gnet_stats_copy_queue(d, NULL, |
3330 | &sch->qstats, sch->q.qlen) < 0) |
3331 | return -1; |
3332 | diff --git a/net/sched/sch_multiq.c b/net/sched/sch_multiq.c |
3333 | index 66b6e807b4ec..4a8680b1f861 100644 |
3334 | --- a/net/sched/sch_multiq.c |
3335 | +++ b/net/sched/sch_multiq.c |
3336 | @@ -332,7 +332,7 @@ static int multiq_dump_class_stats(struct Qdisc *sch, unsigned long cl, |
3337 | |
3338 | cl_q = q->queues[cl - 1]; |
3339 | if (gnet_stats_copy_basic(qdisc_root_sleeping_running(sch), |
3340 | - d, NULL, &cl_q->bstats) < 0 || |
3341 | + d, cl_q->cpu_bstats, &cl_q->bstats) < 0 || |
3342 | gnet_stats_copy_queue(d, NULL, &cl_q->qstats, cl_q->q.qlen) < 0) |
3343 | return -1; |
3344 | |
3345 | diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c |
3346 | index 8f575899adfa..2cca1ead96b5 100644 |
3347 | --- a/net/sched/sch_prio.c |
3348 | +++ b/net/sched/sch_prio.c |
3349 | @@ -286,7 +286,7 @@ static int prio_dump_class_stats(struct Qdisc *sch, unsigned long cl, |
3350 | |
3351 | cl_q = q->queues[cl - 1]; |
3352 | if (gnet_stats_copy_basic(qdisc_root_sleeping_running(sch), |
3353 | - d, NULL, &cl_q->bstats) < 0 || |
3354 | + d, cl_q->cpu_bstats, &cl_q->bstats) < 0 || |
3355 | gnet_stats_copy_queue(d, NULL, &cl_q->qstats, cl_q->q.qlen) < 0) |
3356 | return -1; |
3357 | |
3358 | diff --git a/net/sctp/associola.c b/net/sctp/associola.c |
3359 | index 7e127cde1ccc..16e120b84118 100644 |
3360 | --- a/net/sctp/associola.c |
3361 | +++ b/net/sctp/associola.c |
3362 | @@ -81,6 +81,7 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a |
3363 | /* Discarding const is appropriate here. */ |
3364 | asoc->ep = (struct sctp_endpoint *)ep; |
3365 | asoc->base.sk = (struct sock *)sk; |
3366 | + asoc->base.net = sock_net(sk); |
3367 | |
3368 | sctp_endpoint_hold(asoc->ep); |
3369 | sock_hold(asoc->base.sk); |
3370 | diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c |
3371 | index beae42bfa68f..8164d0275137 100644 |
3372 | --- a/net/sctp/endpointola.c |
3373 | +++ b/net/sctp/endpointola.c |
3374 | @@ -163,6 +163,7 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep, |
3375 | |
3376 | /* Remember who we are attached to. */ |
3377 | ep->base.sk = sk; |
3378 | + ep->base.net = sock_net(sk); |
3379 | sock_hold(ep->base.sk); |
3380 | |
3381 | return ep; |
3382 | diff --git a/net/sctp/input.c b/net/sctp/input.c |
3383 | index 68b84d3a7cac..969fb1623e4e 100644 |
3384 | --- a/net/sctp/input.c |
3385 | +++ b/net/sctp/input.c |
3386 | @@ -812,7 +812,7 @@ static inline int sctp_hash_cmp(struct rhashtable_compare_arg *arg, |
3387 | return err; |
3388 | |
3389 | asoc = t->asoc; |
3390 | - if (!net_eq(sock_net(asoc->base.sk), x->net)) |
3391 | + if (!net_eq(asoc->base.net, x->net)) |
3392 | goto out; |
3393 | if (x->ep) { |
3394 | if (x->ep != asoc->ep) |
3395 | @@ -835,7 +835,7 @@ static inline u32 sctp_hash_obj(const void *data, u32 len, u32 seed) |
3396 | { |
3397 | const struct sctp_transport *t = data; |
3398 | const union sctp_addr *paddr = &t->ipaddr; |
3399 | - const struct net *net = sock_net(t->asoc->base.sk); |
3400 | + const struct net *net = t->asoc->base.net; |
3401 | u16 lport = htons(t->asoc->base.bind_addr.port); |
3402 | u32 addr; |
3403 | |
3404 | diff --git a/net/sctp/transport.c b/net/sctp/transport.c |
3405 | index 03d71cd97ec0..5c78942550e9 100644 |
3406 | --- a/net/sctp/transport.c |
3407 | +++ b/net/sctp/transport.c |
3408 | @@ -205,7 +205,8 @@ void sctp_transport_reset_hb_timer(struct sctp_transport *transport) |
3409 | |
3410 | /* When a data chunk is sent, reset the heartbeat interval. */ |
3411 | expires = jiffies + sctp_transport_timeout(transport); |
3412 | - if (time_before(transport->hb_timer.expires, expires) && |
3413 | + if ((time_before(transport->hb_timer.expires, expires) || |
3414 | + !timer_pending(&transport->hb_timer)) && |
3415 | !mod_timer(&transport->hb_timer, |
3416 | expires + prandom_u32_max(transport->rto))) |
3417 | sctp_transport_hold(transport); |
3418 | diff --git a/net/tipc/link.c b/net/tipc/link.c |
3419 | index 4e8647aef01c..c7406c1fdc14 100644 |
3420 | --- a/net/tipc/link.c |
3421 | +++ b/net/tipc/link.c |
3422 | @@ -1063,7 +1063,7 @@ static bool tipc_data_input(struct tipc_link *l, struct sk_buff *skb, |
3423 | default: |
3424 | pr_warn("Dropping received illegal msg type\n"); |
3425 | kfree_skb(skb); |
3426 | - return false; |
3427 | + return true; |
3428 | }; |
3429 | } |
3430 | |
3431 | diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c |
3432 | index 63a913b23873..cdc49e680be4 100644 |
3433 | --- a/net/tipc/netlink_compat.c |
3434 | +++ b/net/tipc/netlink_compat.c |
3435 | @@ -539,7 +539,7 @@ static int tipc_nl_compat_link_stat_dump(struct tipc_nl_compat_msg *msg, |
3436 | if (len <= 0) |
3437 | return -EINVAL; |
3438 | |
3439 | - len = min_t(int, len, TIPC_MAX_BEARER_NAME); |
3440 | + len = min_t(int, len, TIPC_MAX_LINK_NAME); |
3441 | if (!string_is_valid(name, len)) |
3442 | return -EINVAL; |
3443 | |
3444 | @@ -821,7 +821,7 @@ static int tipc_nl_compat_link_reset_stats(struct tipc_nl_compat_cmd_doit *cmd, |
3445 | if (len <= 0) |
3446 | return -EINVAL; |
3447 | |
3448 | - len = min_t(int, len, TIPC_MAX_BEARER_NAME); |
3449 | + len = min_t(int, len, TIPC_MAX_LINK_NAME); |
3450 | if (!string_is_valid(name, len)) |
3451 | return -EINVAL; |
3452 | |
3453 | @@ -974,6 +974,10 @@ static int tipc_nl_compat_publ_dump(struct tipc_nl_compat_msg *msg, u32 sock) |
3454 | |
3455 | hdr = genlmsg_put(args, 0, 0, &tipc_genl_family, NLM_F_MULTI, |
3456 | TIPC_NL_PUBL_GET); |
3457 | + if (!hdr) { |
3458 | + kfree_skb(args); |
3459 | + return -EMSGSIZE; |
3460 | + } |
3461 | |
3462 | nest = nla_nest_start(args, TIPC_NLA_SOCK); |
3463 | if (!nest) { |
3464 | diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c |
3465 | index 7566395e526d..18f377306884 100644 |
3466 | --- a/net/vmw_vsock/af_vsock.c |
3467 | +++ b/net/vmw_vsock/af_vsock.c |
3468 | @@ -97,6 +97,7 @@ |
3469 | #include <linux/mutex.h> |
3470 | #include <linux/net.h> |
3471 | #include <linux/poll.h> |
3472 | +#include <linux/random.h> |
3473 | #include <linux/skbuff.h> |
3474 | #include <linux/smp.h> |
3475 | #include <linux/socket.h> |
3476 | @@ -501,9 +502,13 @@ out: |
3477 | static int __vsock_bind_stream(struct vsock_sock *vsk, |
3478 | struct sockaddr_vm *addr) |
3479 | { |
3480 | - static u32 port = LAST_RESERVED_PORT + 1; |
3481 | + static u32 port = 0; |
3482 | struct sockaddr_vm new_addr; |
3483 | |
3484 | + if (!port) |
3485 | + port = LAST_RESERVED_PORT + 1 + |
3486 | + prandom_u32_max(U32_MAX - LAST_RESERVED_PORT); |
3487 | + |
3488 | vsock_addr_init(&new_addr, addr->svm_cid, addr->svm_port); |
3489 | |
3490 | if (addr->svm_port == VMADDR_PORT_ANY) { |
3491 | diff --git a/scripts/gdb/linux/symbols.py b/scripts/gdb/linux/symbols.py |
3492 | index 004b0ac7fa72..4644f1a83b57 100644 |
3493 | --- a/scripts/gdb/linux/symbols.py |
3494 | +++ b/scripts/gdb/linux/symbols.py |
3495 | @@ -99,7 +99,8 @@ lx-symbols command.""" |
3496 | attrs[n]['name'].string(): attrs[n]['address'] |
3497 | for n in range(int(sect_attrs['nsections']))} |
3498 | args = [] |
3499 | - for section_name in [".data", ".data..read_mostly", ".rodata", ".bss"]: |
3500 | + for section_name in [".data", ".data..read_mostly", ".rodata", ".bss", |
3501 | + ".text", ".text.hot", ".text.unlikely"]: |
3502 | address = section_name_to_address.get(section_name) |
3503 | if address: |
3504 | args.append(" -s {name} {addr}".format( |
3505 | diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c |
3506 | index 2e2d18468491..7ae8e24dc1e6 100644 |
3507 | --- a/sound/core/compress_offload.c |
3508 | +++ b/sound/core/compress_offload.c |
3509 | @@ -529,7 +529,7 @@ static int snd_compress_check_input(struct snd_compr_params *params) |
3510 | { |
3511 | /* first let's check the buffer parameter's */ |
3512 | if (params->buffer.fragment_size == 0 || |
3513 | - params->buffer.fragments > INT_MAX / params->buffer.fragment_size || |
3514 | + params->buffer.fragments > U32_MAX / params->buffer.fragment_size || |
3515 | params->buffer.fragments == 0) |
3516 | return -EINVAL; |
3517 | |
3518 | diff --git a/sound/soc/kirkwood/kirkwood-i2s.c b/sound/soc/kirkwood/kirkwood-i2s.c |
3519 | index 3a36d60e1785..0a5d9fb6fc84 100644 |
3520 | --- a/sound/soc/kirkwood/kirkwood-i2s.c |
3521 | +++ b/sound/soc/kirkwood/kirkwood-i2s.c |
3522 | @@ -570,10 +570,6 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) |
3523 | return PTR_ERR(priv->clk); |
3524 | } |
3525 | |
3526 | - err = clk_prepare_enable(priv->clk); |
3527 | - if (err < 0) |
3528 | - return err; |
3529 | - |
3530 | priv->extclk = devm_clk_get(&pdev->dev, "extclk"); |
3531 | if (IS_ERR(priv->extclk)) { |
3532 | if (PTR_ERR(priv->extclk) == -EPROBE_DEFER) |
3533 | @@ -589,6 +585,10 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) |
3534 | } |
3535 | } |
3536 | |
3537 | + err = clk_prepare_enable(priv->clk); |
3538 | + if (err < 0) |
3539 | + return err; |
3540 | + |
3541 | /* Some sensible defaults - this reflects the powerup values */ |
3542 | priv->ctl_play = KIRKWOOD_PLAYCTL_SIZE_24; |
3543 | priv->ctl_rec = KIRKWOOD_RECCTL_SIZE_24; |