Annotation of /trunk/kernel-alx/patches-4.9/0305-4.9.206-all-fixes.patch
Parent Directory | Revision Log
Revision 3580 -
(hide 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 | niro | 3580 | 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; |