Annotation of /trunk/kernel-alx/patches-4.9/0267-4.9.168-all-fixes.patch
Parent Directory | Revision Log
Revision 3344 -
(hide annotations)
(download)
Tue Jun 18 09:41:58 2019 UTC (5 years, 3 months ago) by niro
File size: 93547 byte(s)
Tue Jun 18 09:41:58 2019 UTC (5 years, 3 months ago) by niro
File size: 93547 byte(s)
-linux-4.9.168
1 | niro | 3344 | diff --git a/Documentation/arm/kernel_mode_neon.txt b/Documentation/arm/kernel_mode_neon.txt |
2 | index 525452726d31..b9e060c5b61e 100644 | ||
3 | --- a/Documentation/arm/kernel_mode_neon.txt | ||
4 | +++ b/Documentation/arm/kernel_mode_neon.txt | ||
5 | @@ -6,7 +6,7 @@ TL;DR summary | ||
6 | * Use only NEON instructions, or VFP instructions that don't rely on support | ||
7 | code | ||
8 | * Isolate your NEON code in a separate compilation unit, and compile it with | ||
9 | - '-mfpu=neon -mfloat-abi=softfp' | ||
10 | + '-march=armv7-a -mfpu=neon -mfloat-abi=softfp' | ||
11 | * Put kernel_neon_begin() and kernel_neon_end() calls around the calls into your | ||
12 | NEON code | ||
13 | * Don't sleep in your NEON code, and be aware that it will be executed with | ||
14 | @@ -87,7 +87,7 @@ instructions appearing in unexpected places if no special care is taken. | ||
15 | Therefore, the recommended and only supported way of using NEON/VFP in the | ||
16 | kernel is by adhering to the following rules: | ||
17 | * isolate the NEON code in a separate compilation unit and compile it with | ||
18 | - '-mfpu=neon -mfloat-abi=softfp'; | ||
19 | + '-march=armv7-a -mfpu=neon -mfloat-abi=softfp'; | ||
20 | * issue the calls to kernel_neon_begin(), kernel_neon_end() as well as the calls | ||
21 | into the unit containing the NEON code from a compilation unit which is *not* | ||
22 | built with the GCC flag '-mfpu=neon' set. | ||
23 | diff --git a/Makefile b/Makefile | ||
24 | index 2f030baeb162..f44094d2b147 100644 | ||
25 | --- a/Makefile | ||
26 | +++ b/Makefile | ||
27 | @@ -1,6 +1,6 @@ | ||
28 | VERSION = 4 | ||
29 | PATCHLEVEL = 9 | ||
30 | -SUBLEVEL = 167 | ||
31 | +SUBLEVEL = 168 | ||
32 | EXTRAVERSION = | ||
33 | NAME = Roaring Lionus | ||
34 | |||
35 | diff --git a/arch/arm/boot/dts/lpc32xx.dtsi b/arch/arm/boot/dts/lpc32xx.dtsi | ||
36 | index b5841fab51c1..0d20aadc78bb 100644 | ||
37 | --- a/arch/arm/boot/dts/lpc32xx.dtsi | ||
38 | +++ b/arch/arm/boot/dts/lpc32xx.dtsi | ||
39 | @@ -230,7 +230,7 @@ | ||
40 | status = "disabled"; | ||
41 | }; | ||
42 | |||
43 | - i2s1: i2s@2009C000 { | ||
44 | + i2s1: i2s@2009c000 { | ||
45 | compatible = "nxp,lpc3220-i2s"; | ||
46 | reg = <0x2009C000 0x1000>; | ||
47 | }; | ||
48 | @@ -273,7 +273,7 @@ | ||
49 | status = "disabled"; | ||
50 | }; | ||
51 | |||
52 | - i2c1: i2c@400A0000 { | ||
53 | + i2c1: i2c@400a0000 { | ||
54 | compatible = "nxp,pnx-i2c"; | ||
55 | reg = <0x400A0000 0x100>; | ||
56 | interrupt-parent = <&sic1>; | ||
57 | @@ -284,7 +284,7 @@ | ||
58 | clocks = <&clk LPC32XX_CLK_I2C1>; | ||
59 | }; | ||
60 | |||
61 | - i2c2: i2c@400A8000 { | ||
62 | + i2c2: i2c@400a8000 { | ||
63 | compatible = "nxp,pnx-i2c"; | ||
64 | reg = <0x400A8000 0x100>; | ||
65 | interrupt-parent = <&sic1>; | ||
66 | @@ -295,7 +295,7 @@ | ||
67 | clocks = <&clk LPC32XX_CLK_I2C2>; | ||
68 | }; | ||
69 | |||
70 | - mpwm: mpwm@400E8000 { | ||
71 | + mpwm: mpwm@400e8000 { | ||
72 | compatible = "nxp,lpc3220-motor-pwm"; | ||
73 | reg = <0x400E8000 0x78>; | ||
74 | status = "disabled"; | ||
75 | @@ -394,7 +394,7 @@ | ||
76 | #gpio-cells = <3>; /* bank, pin, flags */ | ||
77 | }; | ||
78 | |||
79 | - timer4: timer@4002C000 { | ||
80 | + timer4: timer@4002c000 { | ||
81 | compatible = "nxp,lpc3220-timer"; | ||
82 | reg = <0x4002C000 0x1000>; | ||
83 | interrupts = <3 IRQ_TYPE_LEVEL_LOW>; | ||
84 | @@ -412,7 +412,7 @@ | ||
85 | status = "disabled"; | ||
86 | }; | ||
87 | |||
88 | - watchdog: watchdog@4003C000 { | ||
89 | + watchdog: watchdog@4003c000 { | ||
90 | compatible = "nxp,pnx4008-wdt"; | ||
91 | reg = <0x4003C000 0x1000>; | ||
92 | clocks = <&clk LPC32XX_CLK_WDOG>; | ||
93 | @@ -451,7 +451,7 @@ | ||
94 | status = "disabled"; | ||
95 | }; | ||
96 | |||
97 | - timer1: timer@4004C000 { | ||
98 | + timer1: timer@4004c000 { | ||
99 | compatible = "nxp,lpc3220-timer"; | ||
100 | reg = <0x4004C000 0x1000>; | ||
101 | interrupts = <17 IRQ_TYPE_LEVEL_LOW>; | ||
102 | @@ -475,14 +475,14 @@ | ||
103 | status = "disabled"; | ||
104 | }; | ||
105 | |||
106 | - pwm1: pwm@4005C000 { | ||
107 | + pwm1: pwm@4005c000 { | ||
108 | compatible = "nxp,lpc3220-pwm"; | ||
109 | reg = <0x4005C000 0x4>; | ||
110 | clocks = <&clk LPC32XX_CLK_PWM1>; | ||
111 | status = "disabled"; | ||
112 | }; | ||
113 | |||
114 | - pwm2: pwm@4005C004 { | ||
115 | + pwm2: pwm@4005c004 { | ||
116 | compatible = "nxp,lpc3220-pwm"; | ||
117 | reg = <0x4005C004 0x4>; | ||
118 | clocks = <&clk LPC32XX_CLK_PWM2>; | ||
119 | diff --git a/arch/arm/include/asm/barrier.h b/arch/arm/include/asm/barrier.h | ||
120 | index 513e03d138ea..8331cb0d3461 100644 | ||
121 | --- a/arch/arm/include/asm/barrier.h | ||
122 | +++ b/arch/arm/include/asm/barrier.h | ||
123 | @@ -10,6 +10,8 @@ | ||
124 | #define sev() __asm__ __volatile__ ("sev" : : : "memory") | ||
125 | #define wfe() __asm__ __volatile__ ("wfe" : : : "memory") | ||
126 | #define wfi() __asm__ __volatile__ ("wfi" : : : "memory") | ||
127 | +#else | ||
128 | +#define wfe() do { } while (0) | ||
129 | #endif | ||
130 | |||
131 | #if __LINUX_ARM_ARCH__ >= 7 | ||
132 | diff --git a/arch/arm/include/asm/processor.h b/arch/arm/include/asm/processor.h | ||
133 | index 8a1e8e995dae..08509183c7df 100644 | ||
134 | --- a/arch/arm/include/asm/processor.h | ||
135 | +++ b/arch/arm/include/asm/processor.h | ||
136 | @@ -77,7 +77,11 @@ extern void release_thread(struct task_struct *); | ||
137 | unsigned long get_wchan(struct task_struct *p); | ||
138 | |||
139 | #if __LINUX_ARM_ARCH__ == 6 || defined(CONFIG_ARM_ERRATA_754327) | ||
140 | -#define cpu_relax() smp_mb() | ||
141 | +#define cpu_relax() \ | ||
142 | + do { \ | ||
143 | + smp_mb(); \ | ||
144 | + __asm__ __volatile__("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;"); \ | ||
145 | + } while (0) | ||
146 | #else | ||
147 | #define cpu_relax() barrier() | ||
148 | #endif | ||
149 | diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c | ||
150 | index b18c1ea56bed..ef6b27fe1d2e 100644 | ||
151 | --- a/arch/arm/kernel/machine_kexec.c | ||
152 | +++ b/arch/arm/kernel/machine_kexec.c | ||
153 | @@ -87,8 +87,11 @@ void machine_crash_nonpanic_core(void *unused) | ||
154 | |||
155 | set_cpu_online(smp_processor_id(), false); | ||
156 | atomic_dec(&waiting_for_crash_ipi); | ||
157 | - while (1) | ||
158 | + | ||
159 | + while (1) { | ||
160 | cpu_relax(); | ||
161 | + wfe(); | ||
162 | + } | ||
163 | } | ||
164 | |||
165 | static void machine_kexec_mask_interrupts(void) | ||
166 | diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c | ||
167 | index bc83ec7ed53f..7a5dc011c523 100644 | ||
168 | --- a/arch/arm/kernel/smp.c | ||
169 | +++ b/arch/arm/kernel/smp.c | ||
170 | @@ -602,8 +602,10 @@ static void ipi_cpu_stop(unsigned int cpu) | ||
171 | local_fiq_disable(); | ||
172 | local_irq_disable(); | ||
173 | |||
174 | - while (1) | ||
175 | + while (1) { | ||
176 | cpu_relax(); | ||
177 | + wfe(); | ||
178 | + } | ||
179 | } | ||
180 | |||
181 | static DEFINE_PER_CPU(struct completion *, cpu_completion); | ||
182 | diff --git a/arch/arm/kernel/unwind.c b/arch/arm/kernel/unwind.c | ||
183 | index 0bee233fef9a..314cfb232a63 100644 | ||
184 | --- a/arch/arm/kernel/unwind.c | ||
185 | +++ b/arch/arm/kernel/unwind.c | ||
186 | @@ -93,7 +93,7 @@ extern const struct unwind_idx __start_unwind_idx[]; | ||
187 | static const struct unwind_idx *__origin_unwind_idx; | ||
188 | extern const struct unwind_idx __stop_unwind_idx[]; | ||
189 | |||
190 | -static DEFINE_SPINLOCK(unwind_lock); | ||
191 | +static DEFINE_RAW_SPINLOCK(unwind_lock); | ||
192 | static LIST_HEAD(unwind_tables); | ||
193 | |||
194 | /* Convert a prel31 symbol to an absolute address */ | ||
195 | @@ -201,7 +201,7 @@ static const struct unwind_idx *unwind_find_idx(unsigned long addr) | ||
196 | /* module unwind tables */ | ||
197 | struct unwind_table *table; | ||
198 | |||
199 | - spin_lock_irqsave(&unwind_lock, flags); | ||
200 | + raw_spin_lock_irqsave(&unwind_lock, flags); | ||
201 | list_for_each_entry(table, &unwind_tables, list) { | ||
202 | if (addr >= table->begin_addr && | ||
203 | addr < table->end_addr) { | ||
204 | @@ -213,7 +213,7 @@ static const struct unwind_idx *unwind_find_idx(unsigned long addr) | ||
205 | break; | ||
206 | } | ||
207 | } | ||
208 | - spin_unlock_irqrestore(&unwind_lock, flags); | ||
209 | + raw_spin_unlock_irqrestore(&unwind_lock, flags); | ||
210 | } | ||
211 | |||
212 | pr_debug("%s: idx = %p\n", __func__, idx); | ||
213 | @@ -529,9 +529,9 @@ struct unwind_table *unwind_table_add(unsigned long start, unsigned long size, | ||
214 | tab->begin_addr = text_addr; | ||
215 | tab->end_addr = text_addr + text_size; | ||
216 | |||
217 | - spin_lock_irqsave(&unwind_lock, flags); | ||
218 | + raw_spin_lock_irqsave(&unwind_lock, flags); | ||
219 | list_add_tail(&tab->list, &unwind_tables); | ||
220 | - spin_unlock_irqrestore(&unwind_lock, flags); | ||
221 | + raw_spin_unlock_irqrestore(&unwind_lock, flags); | ||
222 | |||
223 | return tab; | ||
224 | } | ||
225 | @@ -543,9 +543,9 @@ void unwind_table_del(struct unwind_table *tab) | ||
226 | if (!tab) | ||
227 | return; | ||
228 | |||
229 | - spin_lock_irqsave(&unwind_lock, flags); | ||
230 | + raw_spin_lock_irqsave(&unwind_lock, flags); | ||
231 | list_del(&tab->list); | ||
232 | - spin_unlock_irqrestore(&unwind_lock, flags); | ||
233 | + raw_spin_unlock_irqrestore(&unwind_lock, flags); | ||
234 | |||
235 | kfree(tab); | ||
236 | } | ||
237 | diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile | ||
238 | index 27f4d96258a2..b3ecffb76c3f 100644 | ||
239 | --- a/arch/arm/lib/Makefile | ||
240 | +++ b/arch/arm/lib/Makefile | ||
241 | @@ -38,7 +38,7 @@ $(obj)/csumpartialcopy.o: $(obj)/csumpartialcopygeneric.S | ||
242 | $(obj)/csumpartialcopyuser.o: $(obj)/csumpartialcopygeneric.S | ||
243 | |||
244 | ifeq ($(CONFIG_KERNEL_MODE_NEON),y) | ||
245 | - NEON_FLAGS := -mfloat-abi=softfp -mfpu=neon | ||
246 | + NEON_FLAGS := -march=armv7-a -mfloat-abi=softfp -mfpu=neon | ||
247 | CFLAGS_xor-neon.o += $(NEON_FLAGS) | ||
248 | obj-$(CONFIG_XOR_BLOCKS) += xor-neon.o | ||
249 | endif | ||
250 | diff --git a/arch/arm/lib/xor-neon.c b/arch/arm/lib/xor-neon.c | ||
251 | index 2c40aeab3eaa..c691b901092f 100644 | ||
252 | --- a/arch/arm/lib/xor-neon.c | ||
253 | +++ b/arch/arm/lib/xor-neon.c | ||
254 | @@ -14,7 +14,7 @@ | ||
255 | MODULE_LICENSE("GPL"); | ||
256 | |||
257 | #ifndef __ARM_NEON__ | ||
258 | -#error You should compile this file with '-mfloat-abi=softfp -mfpu=neon' | ||
259 | +#error You should compile this file with '-march=armv7-a -mfloat-abi=softfp -mfpu=neon' | ||
260 | #endif | ||
261 | |||
262 | /* | ||
263 | diff --git a/arch/arm/mach-omap2/prm_common.c b/arch/arm/mach-omap2/prm_common.c | ||
264 | index f1ca9479491b..9e14604b9642 100644 | ||
265 | --- a/arch/arm/mach-omap2/prm_common.c | ||
266 | +++ b/arch/arm/mach-omap2/prm_common.c | ||
267 | @@ -533,8 +533,10 @@ void omap_prm_reset_system(void) | ||
268 | |||
269 | prm_ll_data->reset_system(); | ||
270 | |||
271 | - while (1) | ||
272 | + while (1) { | ||
273 | cpu_relax(); | ||
274 | + wfe(); | ||
275 | + } | ||
276 | } | ||
277 | |||
278 | /** | ||
279 | diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c | ||
280 | index e017a9493b92..72a660a74ff9 100644 | ||
281 | --- a/arch/arm64/kernel/kgdb.c | ||
282 | +++ b/arch/arm64/kernel/kgdb.c | ||
283 | @@ -231,24 +231,33 @@ int kgdb_arch_handle_exception(int exception_vector, int signo, | ||
284 | |||
285 | static int kgdb_brk_fn(struct pt_regs *regs, unsigned int esr) | ||
286 | { | ||
287 | + if (user_mode(regs)) | ||
288 | + return DBG_HOOK_ERROR; | ||
289 | + | ||
290 | kgdb_handle_exception(1, SIGTRAP, 0, regs); | ||
291 | - return 0; | ||
292 | + return DBG_HOOK_HANDLED; | ||
293 | } | ||
294 | NOKPROBE_SYMBOL(kgdb_brk_fn) | ||
295 | |||
296 | static int kgdb_compiled_brk_fn(struct pt_regs *regs, unsigned int esr) | ||
297 | { | ||
298 | + if (user_mode(regs)) | ||
299 | + return DBG_HOOK_ERROR; | ||
300 | + | ||
301 | compiled_break = 1; | ||
302 | kgdb_handle_exception(1, SIGTRAP, 0, regs); | ||
303 | |||
304 | - return 0; | ||
305 | + return DBG_HOOK_HANDLED; | ||
306 | } | ||
307 | NOKPROBE_SYMBOL(kgdb_compiled_brk_fn); | ||
308 | |||
309 | static int kgdb_step_brk_fn(struct pt_regs *regs, unsigned int esr) | ||
310 | { | ||
311 | + if (user_mode(regs)) | ||
312 | + return DBG_HOOK_ERROR; | ||
313 | + | ||
314 | kgdb_handle_exception(1, SIGTRAP, 0, regs); | ||
315 | - return 0; | ||
316 | + return DBG_HOOK_HANDLED; | ||
317 | } | ||
318 | NOKPROBE_SYMBOL(kgdb_step_brk_fn); | ||
319 | |||
320 | diff --git a/arch/arm64/kernel/probes/kprobes.c b/arch/arm64/kernel/probes/kprobes.c | ||
321 | index d2b1b624ddc3..17f647103ed7 100644 | ||
322 | --- a/arch/arm64/kernel/probes/kprobes.c | ||
323 | +++ b/arch/arm64/kernel/probes/kprobes.c | ||
324 | @@ -450,6 +450,9 @@ kprobe_single_step_handler(struct pt_regs *regs, unsigned int esr) | ||
325 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); | ||
326 | int retval; | ||
327 | |||
328 | + if (user_mode(regs)) | ||
329 | + return DBG_HOOK_ERROR; | ||
330 | + | ||
331 | /* return error if this is not our step */ | ||
332 | retval = kprobe_ss_hit(kcb, instruction_pointer(regs)); | ||
333 | |||
334 | @@ -466,6 +469,9 @@ kprobe_single_step_handler(struct pt_regs *regs, unsigned int esr) | ||
335 | int __kprobes | ||
336 | kprobe_breakpoint_handler(struct pt_regs *regs, unsigned int esr) | ||
337 | { | ||
338 | + if (user_mode(regs)) | ||
339 | + return DBG_HOOK_ERROR; | ||
340 | + | ||
341 | kprobe_handler(regs); | ||
342 | return DBG_HOOK_HANDLED; | ||
343 | } | ||
344 | diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c | ||
345 | index ad49ae8f3967..051b32084776 100644 | ||
346 | --- a/arch/arm64/mm/fault.c | ||
347 | +++ b/arch/arm64/mm/fault.c | ||
348 | @@ -673,11 +673,12 @@ void __init hook_debug_fault_code(int nr, | ||
349 | debug_fault_info[nr].name = name; | ||
350 | } | ||
351 | |||
352 | -asmlinkage int __exception do_debug_exception(unsigned long addr, | ||
353 | +asmlinkage int __exception do_debug_exception(unsigned long addr_if_watchpoint, | ||
354 | unsigned int esr, | ||
355 | struct pt_regs *regs) | ||
356 | { | ||
357 | const struct fault_info *inf = debug_fault_info + DBG_ESR_EVT(esr); | ||
358 | + unsigned long pc = instruction_pointer(regs); | ||
359 | struct siginfo info; | ||
360 | int rv; | ||
361 | |||
362 | @@ -688,19 +689,19 @@ asmlinkage int __exception do_debug_exception(unsigned long addr, | ||
363 | if (interrupts_enabled(regs)) | ||
364 | trace_hardirqs_off(); | ||
365 | |||
366 | - if (user_mode(regs) && instruction_pointer(regs) > TASK_SIZE) | ||
367 | + if (user_mode(regs) && pc > TASK_SIZE) | ||
368 | arm64_apply_bp_hardening(); | ||
369 | |||
370 | - if (!inf->fn(addr, esr, regs)) { | ||
371 | + if (!inf->fn(addr_if_watchpoint, esr, regs)) { | ||
372 | rv = 1; | ||
373 | } else { | ||
374 | pr_alert("Unhandled debug exception: %s (0x%08x) at 0x%016lx\n", | ||
375 | - inf->name, esr, addr); | ||
376 | + inf->name, esr, pc); | ||
377 | |||
378 | info.si_signo = inf->sig; | ||
379 | info.si_errno = 0; | ||
380 | info.si_code = inf->code; | ||
381 | - info.si_addr = (void __user *)addr; | ||
382 | + info.si_addr = (void __user *)pc; | ||
383 | arm64_notify_die("", regs, &info, 0); | ||
384 | rv = 0; | ||
385 | } | ||
386 | diff --git a/arch/h8300/Makefile b/arch/h8300/Makefile | ||
387 | index e1c02ca230cb..073bba6f9f60 100644 | ||
388 | --- a/arch/h8300/Makefile | ||
389 | +++ b/arch/h8300/Makefile | ||
390 | @@ -23,7 +23,7 @@ KBUILD_AFLAGS += $(aflags-y) | ||
391 | LDFLAGS += $(ldflags-y) | ||
392 | |||
393 | ifeq ($(CROSS_COMPILE),) | ||
394 | -CROSS_COMPILE := h8300-unknown-linux- | ||
395 | +CROSS_COMPILE := $(call cc-cross-prefix, h8300-unknown-linux- h8300-linux-) | ||
396 | endif | ||
397 | |||
398 | core-y += arch/$(ARCH)/kernel/ arch/$(ARCH)/mm/ | ||
399 | diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h | ||
400 | index 8b3b46b7b0f2..229c91bcf616 100644 | ||
401 | --- a/arch/powerpc/include/asm/topology.h | ||
402 | +++ b/arch/powerpc/include/asm/topology.h | ||
403 | @@ -90,6 +90,8 @@ static inline int prrn_is_enabled(void) | ||
404 | #define topology_sibling_cpumask(cpu) (per_cpu(cpu_sibling_map, cpu)) | ||
405 | #define topology_core_cpumask(cpu) (per_cpu(cpu_core_map, cpu)) | ||
406 | #define topology_core_id(cpu) (cpu_to_core_id(cpu)) | ||
407 | + | ||
408 | +int dlpar_cpu_readd(int cpu); | ||
409 | #endif | ||
410 | #endif | ||
411 | |||
412 | diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c | ||
413 | index 0ef83c274019..9cad2ed812ab 100644 | ||
414 | --- a/arch/powerpc/mm/numa.c | ||
415 | +++ b/arch/powerpc/mm/numa.c | ||
416 | @@ -1540,13 +1540,6 @@ static void reset_topology_timer(void) | ||
417 | |||
418 | #ifdef CONFIG_SMP | ||
419 | |||
420 | -static void stage_topology_update(int core_id) | ||
421 | -{ | ||
422 | - cpumask_or(&cpu_associativity_changes_mask, | ||
423 | - &cpu_associativity_changes_mask, cpu_sibling_mask(core_id)); | ||
424 | - reset_topology_timer(); | ||
425 | -} | ||
426 | - | ||
427 | static int dt_update_callback(struct notifier_block *nb, | ||
428 | unsigned long action, void *data) | ||
429 | { | ||
430 | @@ -1559,7 +1552,7 @@ static int dt_update_callback(struct notifier_block *nb, | ||
431 | !of_prop_cmp(update->prop->name, "ibm,associativity")) { | ||
432 | u32 core_id; | ||
433 | of_property_read_u32(update->dn, "reg", &core_id); | ||
434 | - stage_topology_update(core_id); | ||
435 | + rc = dlpar_cpu_readd(core_id); | ||
436 | rc = NOTIFY_OK; | ||
437 | } | ||
438 | break; | ||
439 | diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c | ||
440 | index a1b63e00b2f7..7a2beedb9740 100644 | ||
441 | --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c | ||
442 | +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c | ||
443 | @@ -785,6 +785,25 @@ static int dlpar_cpu_add_by_count(u32 cpus_to_add) | ||
444 | return rc; | ||
445 | } | ||
446 | |||
447 | +int dlpar_cpu_readd(int cpu) | ||
448 | +{ | ||
449 | + struct device_node *dn; | ||
450 | + struct device *dev; | ||
451 | + u32 drc_index; | ||
452 | + int rc; | ||
453 | + | ||
454 | + dev = get_cpu_device(cpu); | ||
455 | + dn = dev->of_node; | ||
456 | + | ||
457 | + rc = of_property_read_u32(dn, "ibm,my-drc-index", &drc_index); | ||
458 | + | ||
459 | + rc = dlpar_cpu_remove_by_index(drc_index); | ||
460 | + if (!rc) | ||
461 | + rc = dlpar_cpu_add(drc_index); | ||
462 | + | ||
463 | + return rc; | ||
464 | +} | ||
465 | + | ||
466 | int dlpar_cpu(struct pseries_hp_errorlog *hp_elog) | ||
467 | { | ||
468 | u32 count, drc_index; | ||
469 | diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile | ||
470 | index 3b7156f46bc1..3b16935b22bc 100644 | ||
471 | --- a/arch/x86/boot/Makefile | ||
472 | +++ b/arch/x86/boot/Makefile | ||
473 | @@ -100,7 +100,7 @@ $(obj)/zoffset.h: $(obj)/compressed/vmlinux FORCE | ||
474 | AFLAGS_header.o += -I$(objtree)/$(obj) | ||
475 | $(obj)/header.o: $(obj)/zoffset.h | ||
476 | |||
477 | -LDFLAGS_setup.elf := -T | ||
478 | +LDFLAGS_setup.elf := -m elf_i386 -T | ||
479 | $(obj)/setup.elf: $(src)/setup.ld $(SETUP_OBJS) FORCE | ||
480 | $(call if_changed,ld) | ||
481 | |||
482 | diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S | ||
483 | index e783a5daaab2..55f04875293f 100644 | ||
484 | --- a/arch/x86/kernel/vmlinux.lds.S | ||
485 | +++ b/arch/x86/kernel/vmlinux.lds.S | ||
486 | @@ -367,7 +367,7 @@ SECTIONS | ||
487 | * Per-cpu symbols which need to be offset from __per_cpu_load | ||
488 | * for the boot processor. | ||
489 | */ | ||
490 | -#define INIT_PER_CPU(x) init_per_cpu__##x = x + __per_cpu_load | ||
491 | +#define INIT_PER_CPU(x) init_per_cpu__##x = ABSOLUTE(x) + __per_cpu_load | ||
492 | INIT_PER_CPU(gdt_page); | ||
493 | INIT_PER_CPU(irq_stack_union); | ||
494 | |||
495 | diff --git a/arch/x86/realmode/rm/Makefile b/arch/x86/realmode/rm/Makefile | ||
496 | index 25012abc3409..ce5f431e6823 100644 | ||
497 | --- a/arch/x86/realmode/rm/Makefile | ||
498 | +++ b/arch/x86/realmode/rm/Makefile | ||
499 | @@ -47,7 +47,7 @@ $(obj)/pasyms.h: $(REALMODE_OBJS) FORCE | ||
500 | targets += realmode.lds | ||
501 | $(obj)/realmode.lds: $(obj)/pasyms.h | ||
502 | |||
503 | -LDFLAGS_realmode.elf := --emit-relocs -T | ||
504 | +LDFLAGS_realmode.elf := -m elf_i386 --emit-relocs -T | ||
505 | CPPFLAGS_realmode.lds += -P -C -I$(objtree)/$(obj) | ||
506 | |||
507 | targets += realmode.elf | ||
508 | diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c | ||
509 | index 667dc5c86fef..ea0573176894 100644 | ||
510 | --- a/drivers/acpi/acpi_video.c | ||
511 | +++ b/drivers/acpi/acpi_video.c | ||
512 | @@ -2069,21 +2069,29 @@ static int __init intel_opregion_present(void) | ||
513 | return opregion; | ||
514 | } | ||
515 | |||
516 | +/* Check if the chassis-type indicates there is no builtin LCD panel */ | ||
517 | static bool dmi_is_desktop(void) | ||
518 | { | ||
519 | const char *chassis_type; | ||
520 | + unsigned long type; | ||
521 | |||
522 | chassis_type = dmi_get_system_info(DMI_CHASSIS_TYPE); | ||
523 | if (!chassis_type) | ||
524 | return false; | ||
525 | |||
526 | - if (!strcmp(chassis_type, "3") || /* 3: Desktop */ | ||
527 | - !strcmp(chassis_type, "4") || /* 4: Low Profile Desktop */ | ||
528 | - !strcmp(chassis_type, "5") || /* 5: Pizza Box */ | ||
529 | - !strcmp(chassis_type, "6") || /* 6: Mini Tower */ | ||
530 | - !strcmp(chassis_type, "7") || /* 7: Tower */ | ||
531 | - !strcmp(chassis_type, "11")) /* 11: Main Server Chassis */ | ||
532 | + if (kstrtoul(chassis_type, 10, &type) != 0) | ||
533 | + return false; | ||
534 | + | ||
535 | + switch (type) { | ||
536 | + case 0x03: /* Desktop */ | ||
537 | + case 0x04: /* Low Profile Desktop */ | ||
538 | + case 0x05: /* Pizza Box */ | ||
539 | + case 0x06: /* Mini Tower */ | ||
540 | + case 0x07: /* Tower */ | ||
541 | + case 0x10: /* Lunch Box */ | ||
542 | + case 0x11: /* Main Server Chassis */ | ||
543 | return true; | ||
544 | + } | ||
545 | |||
546 | return false; | ||
547 | } | ||
548 | diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c | ||
549 | index ff4280800cd0..a46f188f679e 100644 | ||
550 | --- a/drivers/cdrom/cdrom.c | ||
551 | +++ b/drivers/cdrom/cdrom.c | ||
552 | @@ -265,6 +265,7 @@ | ||
553 | /* #define ERRLOGMASK (CD_WARNING|CD_OPEN|CD_COUNT_TRACKS|CD_CLOSE) */ | ||
554 | /* #define ERRLOGMASK (CD_WARNING|CD_REG_UNREG|CD_DO_IOCTL|CD_OPEN|CD_CLOSE|CD_COUNT_TRACKS) */ | ||
555 | |||
556 | +#include <linux/atomic.h> | ||
557 | #include <linux/module.h> | ||
558 | #include <linux/fs.h> | ||
559 | #include <linux/major.h> | ||
560 | @@ -3683,9 +3684,9 @@ static struct ctl_table_header *cdrom_sysctl_header; | ||
561 | |||
562 | static void cdrom_sysctl_register(void) | ||
563 | { | ||
564 | - static int initialized; | ||
565 | + static atomic_t initialized = ATOMIC_INIT(0); | ||
566 | |||
567 | - if (initialized == 1) | ||
568 | + if (!atomic_add_unless(&initialized, 1, 1)) | ||
569 | return; | ||
570 | |||
571 | cdrom_sysctl_header = register_sysctl_table(cdrom_root_table); | ||
572 | @@ -3696,8 +3697,6 @@ static void cdrom_sysctl_register(void) | ||
573 | cdrom_sysctl_settings.debug = debug; | ||
574 | cdrom_sysctl_settings.lock = lockdoor; | ||
575 | cdrom_sysctl_settings.check = check_media_type; | ||
576 | - | ||
577 | - initialized = 1; | ||
578 | } | ||
579 | |||
580 | static void cdrom_sysctl_unregister(void) | ||
581 | diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c | ||
582 | index 50272fe81f26..818a8d40e5c9 100644 | ||
583 | --- a/drivers/char/hpet.c | ||
584 | +++ b/drivers/char/hpet.c | ||
585 | @@ -376,7 +376,7 @@ static __init int hpet_mmap_enable(char *str) | ||
586 | pr_info("HPET mmap %s\n", hpet_mmap_enabled ? "enabled" : "disabled"); | ||
587 | return 1; | ||
588 | } | ||
589 | -__setup("hpet_mmap", hpet_mmap_enable); | ||
590 | +__setup("hpet_mmap=", hpet_mmap_enable); | ||
591 | |||
592 | static int hpet_mmap(struct file *file, struct vm_area_struct *vma) | ||
593 | { | ||
594 | diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c | ||
595 | index 3fa2f8a009b3..1c5c4314c6b5 100644 | ||
596 | --- a/drivers/char/hw_random/virtio-rng.c | ||
597 | +++ b/drivers/char/hw_random/virtio-rng.c | ||
598 | @@ -73,7 +73,7 @@ static int virtio_read(struct hwrng *rng, void *buf, size_t size, bool wait) | ||
599 | |||
600 | if (!vi->busy) { | ||
601 | vi->busy = true; | ||
602 | - init_completion(&vi->have_data); | ||
603 | + reinit_completion(&vi->have_data); | ||
604 | register_buffer(vi, buf, size); | ||
605 | } | ||
606 | |||
607 | diff --git a/drivers/crypto/amcc/crypto4xx_trng.c b/drivers/crypto/amcc/crypto4xx_trng.c | ||
608 | index 677ca17fd223..368c5599515e 100644 | ||
609 | --- a/drivers/crypto/amcc/crypto4xx_trng.c | ||
610 | +++ b/drivers/crypto/amcc/crypto4xx_trng.c | ||
611 | @@ -80,8 +80,10 @@ void ppc4xx_trng_probe(struct crypto4xx_core_device *core_dev) | ||
612 | |||
613 | /* Find the TRNG device node and map it */ | ||
614 | trng = of_find_matching_node(NULL, ppc4xx_trng_match); | ||
615 | - if (!trng || !of_device_is_available(trng)) | ||
616 | + if (!trng || !of_device_is_available(trng)) { | ||
617 | + of_node_put(trng); | ||
618 | return; | ||
619 | + } | ||
620 | |||
621 | dev->trng_base = of_iomap(trng, 0); | ||
622 | of_node_put(trng); | ||
623 | diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c | ||
624 | index 1cfa1d9bc971..f8786f60cdc1 100644 | ||
625 | --- a/drivers/dma/imx-dma.c | ||
626 | +++ b/drivers/dma/imx-dma.c | ||
627 | @@ -290,7 +290,7 @@ static inline int imxdma_sg_next(struct imxdma_desc *d) | ||
628 | struct scatterlist *sg = d->sg; | ||
629 | unsigned long now; | ||
630 | |||
631 | - now = min(d->len, sg_dma_len(sg)); | ||
632 | + now = min_t(size_t, d->len, sg_dma_len(sg)); | ||
633 | if (d->len != IMX_DMA_LENGTH_LOOP) | ||
634 | d->len -= now; | ||
635 | |||
636 | diff --git a/drivers/dma/qcom/hidma.c b/drivers/dma/qcom/hidma.c | ||
637 | index e244e10a94b5..5444f39bf939 100644 | ||
638 | --- a/drivers/dma/qcom/hidma.c | ||
639 | +++ b/drivers/dma/qcom/hidma.c | ||
640 | @@ -131,24 +131,25 @@ static void hidma_process_completed(struct hidma_chan *mchan) | ||
641 | desc = &mdesc->desc; | ||
642 | last_cookie = desc->cookie; | ||
643 | |||
644 | + llstat = hidma_ll_status(mdma->lldev, mdesc->tre_ch); | ||
645 | + | ||
646 | spin_lock_irqsave(&mchan->lock, irqflags); | ||
647 | + if (llstat == DMA_COMPLETE) { | ||
648 | + mchan->last_success = last_cookie; | ||
649 | + result.result = DMA_TRANS_NOERROR; | ||
650 | + } else { | ||
651 | + result.result = DMA_TRANS_ABORTED; | ||
652 | + } | ||
653 | + | ||
654 | dma_cookie_complete(desc); | ||
655 | spin_unlock_irqrestore(&mchan->lock, irqflags); | ||
656 | |||
657 | - llstat = hidma_ll_status(mdma->lldev, mdesc->tre_ch); | ||
658 | dmaengine_desc_get_callback(desc, &cb); | ||
659 | |||
660 | dma_run_dependencies(desc); | ||
661 | |||
662 | spin_lock_irqsave(&mchan->lock, irqflags); | ||
663 | list_move(&mdesc->node, &mchan->free); | ||
664 | - | ||
665 | - if (llstat == DMA_COMPLETE) { | ||
666 | - mchan->last_success = last_cookie; | ||
667 | - result.result = DMA_TRANS_NOERROR; | ||
668 | - } else | ||
669 | - result.result = DMA_TRANS_ABORTED; | ||
670 | - | ||
671 | spin_unlock_irqrestore(&mchan->lock, irqflags); | ||
672 | |||
673 | dmaengine_desc_callback_invoke(&cb, &result); | ||
674 | diff --git a/drivers/dma/tegra20-apb-dma.c b/drivers/dma/tegra20-apb-dma.c | ||
675 | index 3722b9d8d9fe..22f7f0c68a48 100644 | ||
676 | --- a/drivers/dma/tegra20-apb-dma.c | ||
677 | +++ b/drivers/dma/tegra20-apb-dma.c | ||
678 | @@ -635,7 +635,10 @@ static void handle_cont_sngl_cycle_dma_done(struct tegra_dma_channel *tdc, | ||
679 | |||
680 | sgreq = list_first_entry(&tdc->pending_sg_req, typeof(*sgreq), node); | ||
681 | dma_desc = sgreq->dma_desc; | ||
682 | - dma_desc->bytes_transferred += sgreq->req_len; | ||
683 | + /* if we dma for long enough the transfer count will wrap */ | ||
684 | + dma_desc->bytes_transferred = | ||
685 | + (dma_desc->bytes_transferred + sgreq->req_len) % | ||
686 | + dma_desc->bytes_requested; | ||
687 | |||
688 | /* Callback need to be call */ | ||
689 | if (!dma_desc->cb_count) | ||
690 | diff --git a/drivers/firmware/efi/memattr.c b/drivers/firmware/efi/memattr.c | ||
691 | index 236004b9a50d..9faa09e7c31f 100644 | ||
692 | --- a/drivers/firmware/efi/memattr.c | ||
693 | +++ b/drivers/firmware/efi/memattr.c | ||
694 | @@ -93,7 +93,7 @@ static bool entry_is_valid(const efi_memory_desc_t *in, efi_memory_desc_t *out) | ||
695 | |||
696 | if (!(md->attribute & EFI_MEMORY_RUNTIME)) | ||
697 | continue; | ||
698 | - if (md->virt_addr == 0) { | ||
699 | + if (md->virt_addr == 0 && md->phys_addr != 0) { | ||
700 | /* no virtual mapping has been installed by the stub */ | ||
701 | break; | ||
702 | } | ||
703 | diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c | ||
704 | index 6f9c9ac6ee70..75f30a0c418a 100644 | ||
705 | --- a/drivers/gpio/gpio-omap.c | ||
706 | +++ b/drivers/gpio/gpio-omap.c | ||
707 | @@ -837,14 +837,16 @@ static void omap_gpio_unmask_irq(struct irq_data *d) | ||
708 | if (trigger) | ||
709 | omap_set_gpio_triggering(bank, offset, trigger); | ||
710 | |||
711 | - /* For level-triggered GPIOs, the clearing must be done after | ||
712 | - * the HW source is cleared, thus after the handler has run */ | ||
713 | - if (bank->level_mask & BIT(offset)) { | ||
714 | - omap_set_gpio_irqenable(bank, offset, 0); | ||
715 | + omap_set_gpio_irqenable(bank, offset, 1); | ||
716 | + | ||
717 | + /* | ||
718 | + * For level-triggered GPIOs, clearing must be done after the source | ||
719 | + * is cleared, thus after the handler has run. OMAP4 needs this done | ||
720 | + * after enabing the interrupt to clear the wakeup status. | ||
721 | + */ | ||
722 | + if (bank->level_mask & BIT(offset)) | ||
723 | omap_clear_gpio_irqstatus(bank, offset); | ||
724 | - } | ||
725 | |||
726 | - omap_set_gpio_irqenable(bank, offset, 1); | ||
727 | raw_spin_unlock_irqrestore(&bank->lock, flags); | ||
728 | } | ||
729 | |||
730 | diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c | ||
731 | index b59441d109a5..4a959740058e 100644 | ||
732 | --- a/drivers/gpu/drm/drm_dp_mst_topology.c | ||
733 | +++ b/drivers/gpu/drm/drm_dp_mst_topology.c | ||
734 | @@ -3069,6 +3069,7 @@ static int drm_dp_mst_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs | ||
735 | msg.u.i2c_read.transactions[i].i2c_dev_id = msgs[i].addr; | ||
736 | msg.u.i2c_read.transactions[i].num_bytes = msgs[i].len; | ||
737 | msg.u.i2c_read.transactions[i].bytes = msgs[i].buf; | ||
738 | + msg.u.i2c_read.transactions[i].no_stop_bit = !(msgs[i].flags & I2C_M_STOP); | ||
739 | } | ||
740 | msg.u.i2c_read.read_i2c_device_id = msgs[num - 1].addr; | ||
741 | msg.u.i2c_read.num_bytes_read = msgs[num - 1].len; | ||
742 | diff --git a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c | ||
743 | index 434d1e29f279..cd37d00e9723 100644 | ||
744 | --- a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c | ||
745 | +++ b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c | ||
746 | @@ -750,7 +750,9 @@ static int nv17_tv_set_property(struct drm_encoder *encoder, | ||
747 | /* Disable the crtc to ensure a full modeset is | ||
748 | * performed whenever it's turned on again. */ | ||
749 | if (crtc) | ||
750 | - drm_crtc_force_disable(crtc); | ||
751 | + drm_crtc_helper_set_mode(crtc, &crtc->mode, | ||
752 | + crtc->x, crtc->y, | ||
753 | + crtc->primary->fb); | ||
754 | } | ||
755 | |||
756 | return 0; | ||
757 | diff --git a/drivers/hid/intel-ish-hid/ipc/ipc.c b/drivers/hid/intel-ish-hid/ipc/ipc.c | ||
758 | index 0c9ac4d5d850..41d44536aa15 100644 | ||
759 | --- a/drivers/hid/intel-ish-hid/ipc/ipc.c | ||
760 | +++ b/drivers/hid/intel-ish-hid/ipc/ipc.c | ||
761 | @@ -92,7 +92,10 @@ static bool check_generated_interrupt(struct ishtp_device *dev) | ||
762 | IPC_INT_FROM_ISH_TO_HOST_CHV_AB(pisr_val); | ||
763 | } else { | ||
764 | pisr_val = ish_reg_read(dev, IPC_REG_PISR_BXT); | ||
765 | - interrupt_generated = IPC_INT_FROM_ISH_TO_HOST_BXT(pisr_val); | ||
766 | + interrupt_generated = !!pisr_val; | ||
767 | + /* only busy-clear bit is RW, others are RO */ | ||
768 | + if (pisr_val) | ||
769 | + ish_reg_write(dev, IPC_REG_PISR_BXT, pisr_val); | ||
770 | } | ||
771 | |||
772 | return interrupt_generated; | ||
773 | @@ -795,11 +798,11 @@ int ish_hw_start(struct ishtp_device *dev) | ||
774 | { | ||
775 | ish_set_host_rdy(dev); | ||
776 | |||
777 | + set_host_ready(dev); | ||
778 | + | ||
779 | /* After that we can enable ISH DMA operation and wakeup ISHFW */ | ||
780 | ish_wakeup(dev); | ||
781 | |||
782 | - set_host_ready(dev); | ||
783 | - | ||
784 | /* wait for FW-initiated reset flow */ | ||
785 | if (!dev->recvd_hw_ready) | ||
786 | wait_event_interruptible_timeout(dev->wait_hw_ready, | ||
787 | diff --git a/drivers/hid/intel-ish-hid/ishtp/bus.c b/drivers/hid/intel-ish-hid/ishtp/bus.c | ||
788 | index 256521509d20..0de18c76f8d4 100644 | ||
789 | --- a/drivers/hid/intel-ish-hid/ishtp/bus.c | ||
790 | +++ b/drivers/hid/intel-ish-hid/ishtp/bus.c | ||
791 | @@ -628,7 +628,8 @@ int ishtp_cl_device_bind(struct ishtp_cl *cl) | ||
792 | spin_lock_irqsave(&cl->dev->device_list_lock, flags); | ||
793 | list_for_each_entry(cl_device, &cl->dev->device_list, | ||
794 | device_link) { | ||
795 | - if (cl_device->fw_client->client_id == cl->fw_client_id) { | ||
796 | + if (cl_device->fw_client && | ||
797 | + cl_device->fw_client->client_id == cl->fw_client_id) { | ||
798 | cl->device = cl_device; | ||
799 | rv = 0; | ||
800 | break; | ||
801 | @@ -688,6 +689,7 @@ void ishtp_bus_remove_all_clients(struct ishtp_device *ishtp_dev, | ||
802 | spin_lock_irqsave(&ishtp_dev->device_list_lock, flags); | ||
803 | list_for_each_entry_safe(cl_device, n, &ishtp_dev->device_list, | ||
804 | device_link) { | ||
805 | + cl_device->fw_client = NULL; | ||
806 | if (warm_reset && cl_device->reference_count) | ||
807 | continue; | ||
808 | |||
809 | diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c | ||
810 | index 4db8d6a4d0cb..da27f8edba50 100644 | ||
811 | --- a/drivers/hwtracing/coresight/coresight-etm4x.c | ||
812 | +++ b/drivers/hwtracing/coresight/coresight-etm4x.c | ||
813 | @@ -61,7 +61,8 @@ static void etm4_os_unlock(struct etmv4_drvdata *drvdata) | ||
814 | |||
815 | static bool etm4_arch_supported(u8 arch) | ||
816 | { | ||
817 | - switch (arch) { | ||
818 | + /* Mask out the minor version number */ | ||
819 | + switch (arch & 0xf0) { | ||
820 | case ETM_ARCH_V4: | ||
821 | break; | ||
822 | default: | ||
823 | diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c | ||
824 | index 7484aac1e14d..80d82c6792d8 100644 | ||
825 | --- a/drivers/i2c/i2c-core.c | ||
826 | +++ b/drivers/i2c/i2c-core.c | ||
827 | @@ -3250,16 +3250,16 @@ static s32 i2c_smbus_xfer_emulated(struct i2c_adapter *adapter, u16 addr, | ||
828 | the underlying bus driver */ | ||
829 | break; | ||
830 | case I2C_SMBUS_I2C_BLOCK_DATA: | ||
831 | + if (data->block[0] > I2C_SMBUS_BLOCK_MAX) { | ||
832 | + dev_err(&adapter->dev, "Invalid block %s size %d\n", | ||
833 | + read_write == I2C_SMBUS_READ ? "read" : "write", | ||
834 | + data->block[0]); | ||
835 | + return -EINVAL; | ||
836 | + } | ||
837 | if (read_write == I2C_SMBUS_READ) { | ||
838 | msg[1].len = data->block[0]; | ||
839 | } else { | ||
840 | msg[0].len = data->block[0] + 1; | ||
841 | - if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 1) { | ||
842 | - dev_err(&adapter->dev, | ||
843 | - "Invalid block write size %d\n", | ||
844 | - data->block[0]); | ||
845 | - return -EINVAL; | ||
846 | - } | ||
847 | for (i = 1; i <= data->block[0]; i++) | ||
848 | msgbuf0[i] = data->block[i]; | ||
849 | } | ||
850 | diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c | ||
851 | index dd18b74cd01d..a2322b2dbd82 100644 | ||
852 | --- a/drivers/infiniband/hw/cxgb4/cm.c | ||
853 | +++ b/drivers/infiniband/hw/cxgb4/cm.c | ||
854 | @@ -1872,8 +1872,10 @@ static int abort_rpl(struct c4iw_dev *dev, struct sk_buff *skb) | ||
855 | } | ||
856 | mutex_unlock(&ep->com.mutex); | ||
857 | |||
858 | - if (release) | ||
859 | + if (release) { | ||
860 | + close_complete_upcall(ep, -ECONNRESET); | ||
861 | release_ep_resources(ep); | ||
862 | + } | ||
863 | c4iw_put_ep(&ep->com); | ||
864 | return 0; | ||
865 | } | ||
866 | @@ -3567,7 +3569,6 @@ int c4iw_ep_disconnect(struct c4iw_ep *ep, int abrupt, gfp_t gfp) | ||
867 | if (close) { | ||
868 | if (abrupt) { | ||
869 | set_bit(EP_DISC_ABORT, &ep->com.history); | ||
870 | - close_complete_upcall(ep, -ECONNRESET); | ||
871 | ret = send_abort(ep); | ||
872 | } else { | ||
873 | set_bit(EP_DISC_CLOSE, &ep->com.history); | ||
874 | diff --git a/drivers/infiniband/hw/mlx4/cm.c b/drivers/infiniband/hw/mlx4/cm.c | ||
875 | index 39a488889fc7..5dc920fe1326 100644 | ||
876 | --- a/drivers/infiniband/hw/mlx4/cm.c | ||
877 | +++ b/drivers/infiniband/hw/mlx4/cm.c | ||
878 | @@ -39,7 +39,7 @@ | ||
879 | |||
880 | #include "mlx4_ib.h" | ||
881 | |||
882 | -#define CM_CLEANUP_CACHE_TIMEOUT (5 * HZ) | ||
883 | +#define CM_CLEANUP_CACHE_TIMEOUT (30 * HZ) | ||
884 | |||
885 | struct id_map_entry { | ||
886 | struct rb_node node; | ||
887 | diff --git a/drivers/iommu/io-pgtable-arm-v7s.c b/drivers/iommu/io-pgtable-arm-v7s.c | ||
888 | index d68a552cfe8d..3085b47fac1d 100644 | ||
889 | --- a/drivers/iommu/io-pgtable-arm-v7s.c | ||
890 | +++ b/drivers/iommu/io-pgtable-arm-v7s.c | ||
891 | @@ -207,7 +207,8 @@ static void *__arm_v7s_alloc_table(int lvl, gfp_t gfp, | ||
892 | if (dma != virt_to_phys(table)) | ||
893 | goto out_unmap; | ||
894 | } | ||
895 | - kmemleak_ignore(table); | ||
896 | + if (lvl == 2) | ||
897 | + kmemleak_ignore(table); | ||
898 | return table; | ||
899 | |||
900 | out_unmap: | ||
901 | diff --git a/drivers/leds/leds-lp55xx-common.c b/drivers/leds/leds-lp55xx-common.c | ||
902 | index 5377f22ff994..e2655953667c 100644 | ||
903 | --- a/drivers/leds/leds-lp55xx-common.c | ||
904 | +++ b/drivers/leds/leds-lp55xx-common.c | ||
905 | @@ -201,7 +201,7 @@ static void lp55xx_firmware_loaded(const struct firmware *fw, void *context) | ||
906 | |||
907 | if (!fw) { | ||
908 | dev_err(dev, "firmware request failed\n"); | ||
909 | - goto out; | ||
910 | + return; | ||
911 | } | ||
912 | |||
913 | /* handling firmware data is chip dependent */ | ||
914 | @@ -214,9 +214,9 @@ static void lp55xx_firmware_loaded(const struct firmware *fw, void *context) | ||
915 | |||
916 | mutex_unlock(&chip->lock); | ||
917 | |||
918 | -out: | ||
919 | /* firmware should be released for other channel use */ | ||
920 | release_firmware(chip->fw); | ||
921 | + chip->fw = NULL; | ||
922 | } | ||
923 | |||
924 | static int lp55xx_request_firmware(struct lp55xx_chip *chip) | ||
925 | diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c | ||
926 | index 5a5c1f1bd8a5..463ce6757338 100644 | ||
927 | --- a/drivers/md/bcache/sysfs.c | ||
928 | +++ b/drivers/md/bcache/sysfs.c | ||
929 | @@ -215,7 +215,9 @@ STORE(__cached_dev) | ||
930 | d_strtoul(writeback_rate_d_term); | ||
931 | d_strtoul_nonzero(writeback_rate_p_term_inverse); | ||
932 | |||
933 | - d_strtoi_h(sequential_cutoff); | ||
934 | + sysfs_strtoul_clamp(sequential_cutoff, | ||
935 | + dc->sequential_cutoff, | ||
936 | + 0, UINT_MAX); | ||
937 | d_strtoi_h(readahead); | ||
938 | |||
939 | if (attr == &sysfs_clear_stats) | ||
940 | @@ -645,8 +647,17 @@ STORE(__bch_cache_set) | ||
941 | c->error_limit = strtoul_or_return(buf) << IO_ERROR_SHIFT; | ||
942 | |||
943 | /* See count_io_errors() for why 88 */ | ||
944 | - if (attr == &sysfs_io_error_halflife) | ||
945 | - c->error_decay = strtoul_or_return(buf) / 88; | ||
946 | + if (attr == &sysfs_io_error_halflife) { | ||
947 | + unsigned long v = 0; | ||
948 | + ssize_t ret; | ||
949 | + | ||
950 | + ret = strtoul_safe_clamp(buf, v, 0, UINT_MAX); | ||
951 | + if (!ret) { | ||
952 | + c->error_decay = v / 88; | ||
953 | + return size; | ||
954 | + } | ||
955 | + return ret; | ||
956 | + } | ||
957 | |||
958 | sysfs_strtoul(journal_delay_ms, c->journal_delay_ms); | ||
959 | sysfs_strtoul(verify, c->verify); | ||
960 | diff --git a/drivers/md/bcache/sysfs.h b/drivers/md/bcache/sysfs.h | ||
961 | index 0526fe92a683..e7a3c12aa66f 100644 | ||
962 | --- a/drivers/md/bcache/sysfs.h | ||
963 | +++ b/drivers/md/bcache/sysfs.h | ||
964 | @@ -80,9 +80,16 @@ do { \ | ||
965 | |||
966 | #define sysfs_strtoul_clamp(file, var, min, max) \ | ||
967 | do { \ | ||
968 | - if (attr == &sysfs_ ## file) \ | ||
969 | - return strtoul_safe_clamp(buf, var, min, max) \ | ||
970 | - ?: (ssize_t) size; \ | ||
971 | + if (attr == &sysfs_ ## file) { \ | ||
972 | + unsigned long v = 0; \ | ||
973 | + ssize_t ret; \ | ||
974 | + ret = strtoul_safe_clamp(buf, v, min, max); \ | ||
975 | + if (!ret) { \ | ||
976 | + var = v; \ | ||
977 | + return size; \ | ||
978 | + } \ | ||
979 | + return ret; \ | ||
980 | + } \ | ||
981 | } while (0) | ||
982 | |||
983 | #define strtoul_or_return(cp) \ | ||
984 | diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c | ||
985 | index 345f4d81ba07..23a7e108352a 100644 | ||
986 | --- a/drivers/md/dm-thin.c | ||
987 | +++ b/drivers/md/dm-thin.c | ||
988 | @@ -3295,6 +3295,13 @@ static int pool_ctr(struct dm_target *ti, unsigned argc, char **argv) | ||
989 | as.argc = argc; | ||
990 | as.argv = argv; | ||
991 | |||
992 | + /* make sure metadata and data are different devices */ | ||
993 | + if (!strcmp(argv[0], argv[1])) { | ||
994 | + ti->error = "Error setting metadata or data device"; | ||
995 | + r = -EINVAL; | ||
996 | + goto out_unlock; | ||
997 | + } | ||
998 | + | ||
999 | /* | ||
1000 | * Set default pool features. | ||
1001 | */ | ||
1002 | @@ -4177,6 +4184,12 @@ static int thin_ctr(struct dm_target *ti, unsigned argc, char **argv) | ||
1003 | tc->sort_bio_list = RB_ROOT; | ||
1004 | |||
1005 | if (argc == 3) { | ||
1006 | + if (!strcmp(argv[0], argv[2])) { | ||
1007 | + ti->error = "Error setting origin device"; | ||
1008 | + r = -EINVAL; | ||
1009 | + goto bad_origin_dev; | ||
1010 | + } | ||
1011 | + | ||
1012 | r = dm_get_device(ti, argv[2], FMODE_READ, &origin_dev); | ||
1013 | if (r) { | ||
1014 | ti->error = "Error opening origin device"; | ||
1015 | diff --git a/drivers/media/i2c/mt9m111.c b/drivers/media/i2c/mt9m111.c | ||
1016 | index 72e71b762827..a6145877bd00 100644 | ||
1017 | --- a/drivers/media/i2c/mt9m111.c | ||
1018 | +++ b/drivers/media/i2c/mt9m111.c | ||
1019 | @@ -974,6 +974,8 @@ static int mt9m111_probe(struct i2c_client *client, | ||
1020 | mt9m111->rect.top = MT9M111_MIN_DARK_ROWS; | ||
1021 | mt9m111->rect.width = MT9M111_MAX_WIDTH; | ||
1022 | mt9m111->rect.height = MT9M111_MAX_HEIGHT; | ||
1023 | + mt9m111->width = mt9m111->rect.width; | ||
1024 | + mt9m111->height = mt9m111->rect.height; | ||
1025 | mt9m111->fmt = &mt9m111_colour_fmts[0]; | ||
1026 | mt9m111->lastpage = -1; | ||
1027 | mutex_init(&mt9m111->power_lock); | ||
1028 | diff --git a/drivers/media/platform/mx2_emmaprp.c b/drivers/media/platform/mx2_emmaprp.c | ||
1029 | index e68d271b10af..8354ad20865a 100644 | ||
1030 | --- a/drivers/media/platform/mx2_emmaprp.c | ||
1031 | +++ b/drivers/media/platform/mx2_emmaprp.c | ||
1032 | @@ -288,7 +288,7 @@ static void emmaprp_device_run(void *priv) | ||
1033 | { | ||
1034 | struct emmaprp_ctx *ctx = priv; | ||
1035 | struct emmaprp_q_data *s_q_data, *d_q_data; | ||
1036 | - struct vb2_buffer *src_buf, *dst_buf; | ||
1037 | + struct vb2_v4l2_buffer *src_buf, *dst_buf; | ||
1038 | struct emmaprp_dev *pcdev = ctx->dev; | ||
1039 | unsigned int s_width, s_height; | ||
1040 | unsigned int d_width, d_height; | ||
1041 | @@ -308,8 +308,8 @@ static void emmaprp_device_run(void *priv) | ||
1042 | d_height = d_q_data->height; | ||
1043 | d_size = d_width * d_height; | ||
1044 | |||
1045 | - p_in = vb2_dma_contig_plane_dma_addr(src_buf, 0); | ||
1046 | - p_out = vb2_dma_contig_plane_dma_addr(dst_buf, 0); | ||
1047 | + p_in = vb2_dma_contig_plane_dma_addr(&src_buf->vb2_buf, 0); | ||
1048 | + p_out = vb2_dma_contig_plane_dma_addr(&dst_buf->vb2_buf, 0); | ||
1049 | if (!p_in || !p_out) { | ||
1050 | v4l2_err(&pcdev->v4l2_dev, | ||
1051 | "Acquiring kernel pointers to buffers failed\n"); | ||
1052 | diff --git a/drivers/media/platform/s5p-g2d/g2d.c b/drivers/media/platform/s5p-g2d/g2d.c | ||
1053 | index 62c0dec30b59..5f6ccf492111 100644 | ||
1054 | --- a/drivers/media/platform/s5p-g2d/g2d.c | ||
1055 | +++ b/drivers/media/platform/s5p-g2d/g2d.c | ||
1056 | @@ -498,7 +498,7 @@ static void device_run(void *prv) | ||
1057 | { | ||
1058 | struct g2d_ctx *ctx = prv; | ||
1059 | struct g2d_dev *dev = ctx->dev; | ||
1060 | - struct vb2_buffer *src, *dst; | ||
1061 | + struct vb2_v4l2_buffer *src, *dst; | ||
1062 | unsigned long flags; | ||
1063 | u32 cmd = 0; | ||
1064 | |||
1065 | @@ -513,10 +513,10 @@ static void device_run(void *prv) | ||
1066 | spin_lock_irqsave(&dev->ctrl_lock, flags); | ||
1067 | |||
1068 | g2d_set_src_size(dev, &ctx->in); | ||
1069 | - g2d_set_src_addr(dev, vb2_dma_contig_plane_dma_addr(src, 0)); | ||
1070 | + g2d_set_src_addr(dev, vb2_dma_contig_plane_dma_addr(&src->vb2_buf, 0)); | ||
1071 | |||
1072 | g2d_set_dst_size(dev, &ctx->out); | ||
1073 | - g2d_set_dst_addr(dev, vb2_dma_contig_plane_dma_addr(dst, 0)); | ||
1074 | + g2d_set_dst_addr(dev, vb2_dma_contig_plane_dma_addr(&dst->vb2_buf, 0)); | ||
1075 | |||
1076 | g2d_set_rop4(dev, ctx->rop); | ||
1077 | g2d_set_flip(dev, ctx->flip); | ||
1078 | diff --git a/drivers/media/platform/s5p-jpeg/jpeg-core.c b/drivers/media/platform/s5p-jpeg/jpeg-core.c | ||
1079 | index 1da2c94e1dca..c89922fb42ce 100644 | ||
1080 | --- a/drivers/media/platform/s5p-jpeg/jpeg-core.c | ||
1081 | +++ b/drivers/media/platform/s5p-jpeg/jpeg-core.c | ||
1082 | @@ -789,14 +789,14 @@ static void skip(struct s5p_jpeg_buffer *buf, long len); | ||
1083 | static void exynos4_jpeg_parse_decode_h_tbl(struct s5p_jpeg_ctx *ctx) | ||
1084 | { | ||
1085 | struct s5p_jpeg *jpeg = ctx->jpeg; | ||
1086 | - struct vb2_buffer *vb = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); | ||
1087 | + struct vb2_v4l2_buffer *vb = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); | ||
1088 | struct s5p_jpeg_buffer jpeg_buffer; | ||
1089 | unsigned int word; | ||
1090 | int c, x, components; | ||
1091 | |||
1092 | jpeg_buffer.size = 2; /* Ls */ | ||
1093 | jpeg_buffer.data = | ||
1094 | - (unsigned long)vb2_plane_vaddr(vb, 0) + ctx->out_q.sos + 2; | ||
1095 | + (unsigned long)vb2_plane_vaddr(&vb->vb2_buf, 0) + ctx->out_q.sos + 2; | ||
1096 | jpeg_buffer.curr = 0; | ||
1097 | |||
1098 | word = 0; | ||
1099 | @@ -826,14 +826,14 @@ static void exynos4_jpeg_parse_decode_h_tbl(struct s5p_jpeg_ctx *ctx) | ||
1100 | static void exynos4_jpeg_parse_huff_tbl(struct s5p_jpeg_ctx *ctx) | ||
1101 | { | ||
1102 | struct s5p_jpeg *jpeg = ctx->jpeg; | ||
1103 | - struct vb2_buffer *vb = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); | ||
1104 | + struct vb2_v4l2_buffer *vb = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); | ||
1105 | struct s5p_jpeg_buffer jpeg_buffer; | ||
1106 | unsigned int word; | ||
1107 | int c, i, n, j; | ||
1108 | |||
1109 | for (j = 0; j < ctx->out_q.dht.n; ++j) { | ||
1110 | jpeg_buffer.size = ctx->out_q.dht.len[j]; | ||
1111 | - jpeg_buffer.data = (unsigned long)vb2_plane_vaddr(vb, 0) + | ||
1112 | + jpeg_buffer.data = (unsigned long)vb2_plane_vaddr(&vb->vb2_buf, 0) + | ||
1113 | ctx->out_q.dht.marker[j]; | ||
1114 | jpeg_buffer.curr = 0; | ||
1115 | |||
1116 | @@ -885,13 +885,13 @@ static void exynos4_jpeg_parse_huff_tbl(struct s5p_jpeg_ctx *ctx) | ||
1117 | static void exynos4_jpeg_parse_decode_q_tbl(struct s5p_jpeg_ctx *ctx) | ||
1118 | { | ||
1119 | struct s5p_jpeg *jpeg = ctx->jpeg; | ||
1120 | - struct vb2_buffer *vb = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); | ||
1121 | + struct vb2_v4l2_buffer *vb = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); | ||
1122 | struct s5p_jpeg_buffer jpeg_buffer; | ||
1123 | int c, x, components; | ||
1124 | |||
1125 | jpeg_buffer.size = ctx->out_q.sof_len; | ||
1126 | jpeg_buffer.data = | ||
1127 | - (unsigned long)vb2_plane_vaddr(vb, 0) + ctx->out_q.sof; | ||
1128 | + (unsigned long)vb2_plane_vaddr(&vb->vb2_buf, 0) + ctx->out_q.sof; | ||
1129 | jpeg_buffer.curr = 0; | ||
1130 | |||
1131 | skip(&jpeg_buffer, 5); /* P, Y, X */ | ||
1132 | @@ -916,14 +916,14 @@ static void exynos4_jpeg_parse_decode_q_tbl(struct s5p_jpeg_ctx *ctx) | ||
1133 | static void exynos4_jpeg_parse_q_tbl(struct s5p_jpeg_ctx *ctx) | ||
1134 | { | ||
1135 | struct s5p_jpeg *jpeg = ctx->jpeg; | ||
1136 | - struct vb2_buffer *vb = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); | ||
1137 | + struct vb2_v4l2_buffer *vb = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); | ||
1138 | struct s5p_jpeg_buffer jpeg_buffer; | ||
1139 | unsigned int word; | ||
1140 | int c, i, j; | ||
1141 | |||
1142 | for (j = 0; j < ctx->out_q.dqt.n; ++j) { | ||
1143 | jpeg_buffer.size = ctx->out_q.dqt.len[j]; | ||
1144 | - jpeg_buffer.data = (unsigned long)vb2_plane_vaddr(vb, 0) + | ||
1145 | + jpeg_buffer.data = (unsigned long)vb2_plane_vaddr(&vb->vb2_buf, 0) + | ||
1146 | ctx->out_q.dqt.marker[j]; | ||
1147 | jpeg_buffer.curr = 0; | ||
1148 | |||
1149 | @@ -1264,13 +1264,16 @@ static int s5p_jpeg_querycap(struct file *file, void *priv, | ||
1150 | return 0; | ||
1151 | } | ||
1152 | |||
1153 | -static int enum_fmt(struct s5p_jpeg_fmt *sjpeg_formats, int n, | ||
1154 | +static int enum_fmt(struct s5p_jpeg_ctx *ctx, | ||
1155 | + struct s5p_jpeg_fmt *sjpeg_formats, int n, | ||
1156 | struct v4l2_fmtdesc *f, u32 type) | ||
1157 | { | ||
1158 | int i, num = 0; | ||
1159 | + unsigned int fmt_ver_flag = ctx->jpeg->variant->fmt_ver_flag; | ||
1160 | |||
1161 | for (i = 0; i < n; ++i) { | ||
1162 | - if (sjpeg_formats[i].flags & type) { | ||
1163 | + if (sjpeg_formats[i].flags & type && | ||
1164 | + sjpeg_formats[i].flags & fmt_ver_flag) { | ||
1165 | /* index-th format of type type found ? */ | ||
1166 | if (num == f->index) | ||
1167 | break; | ||
1168 | @@ -1297,11 +1300,11 @@ static int s5p_jpeg_enum_fmt_vid_cap(struct file *file, void *priv, | ||
1169 | struct s5p_jpeg_ctx *ctx = fh_to_ctx(priv); | ||
1170 | |||
1171 | if (ctx->mode == S5P_JPEG_ENCODE) | ||
1172 | - return enum_fmt(sjpeg_formats, SJPEG_NUM_FORMATS, f, | ||
1173 | + return enum_fmt(ctx, sjpeg_formats, SJPEG_NUM_FORMATS, f, | ||
1174 | SJPEG_FMT_FLAG_ENC_CAPTURE); | ||
1175 | |||
1176 | - return enum_fmt(sjpeg_formats, SJPEG_NUM_FORMATS, f, | ||
1177 | - SJPEG_FMT_FLAG_DEC_CAPTURE); | ||
1178 | + return enum_fmt(ctx, sjpeg_formats, SJPEG_NUM_FORMATS, f, | ||
1179 | + SJPEG_FMT_FLAG_DEC_CAPTURE); | ||
1180 | } | ||
1181 | |||
1182 | static int s5p_jpeg_enum_fmt_vid_out(struct file *file, void *priv, | ||
1183 | @@ -1310,11 +1313,11 @@ static int s5p_jpeg_enum_fmt_vid_out(struct file *file, void *priv, | ||
1184 | struct s5p_jpeg_ctx *ctx = fh_to_ctx(priv); | ||
1185 | |||
1186 | if (ctx->mode == S5P_JPEG_ENCODE) | ||
1187 | - return enum_fmt(sjpeg_formats, SJPEG_NUM_FORMATS, f, | ||
1188 | + return enum_fmt(ctx, sjpeg_formats, SJPEG_NUM_FORMATS, f, | ||
1189 | SJPEG_FMT_FLAG_ENC_OUTPUT); | ||
1190 | |||
1191 | - return enum_fmt(sjpeg_formats, SJPEG_NUM_FORMATS, f, | ||
1192 | - SJPEG_FMT_FLAG_DEC_OUTPUT); | ||
1193 | + return enum_fmt(ctx, sjpeg_formats, SJPEG_NUM_FORMATS, f, | ||
1194 | + SJPEG_FMT_FLAG_DEC_OUTPUT); | ||
1195 | } | ||
1196 | |||
1197 | static struct s5p_jpeg_q_data *get_q_data(struct s5p_jpeg_ctx *ctx, | ||
1198 | @@ -2027,15 +2030,15 @@ static void s5p_jpeg_device_run(void *priv) | ||
1199 | { | ||
1200 | struct s5p_jpeg_ctx *ctx = priv; | ||
1201 | struct s5p_jpeg *jpeg = ctx->jpeg; | ||
1202 | - struct vb2_buffer *src_buf, *dst_buf; | ||
1203 | + struct vb2_v4l2_buffer *src_buf, *dst_buf; | ||
1204 | unsigned long src_addr, dst_addr, flags; | ||
1205 | |||
1206 | spin_lock_irqsave(&ctx->jpeg->slock, flags); | ||
1207 | |||
1208 | src_buf = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); | ||
1209 | dst_buf = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx); | ||
1210 | - src_addr = vb2_dma_contig_plane_dma_addr(src_buf, 0); | ||
1211 | - dst_addr = vb2_dma_contig_plane_dma_addr(dst_buf, 0); | ||
1212 | + src_addr = vb2_dma_contig_plane_dma_addr(&src_buf->vb2_buf, 0); | ||
1213 | + dst_addr = vb2_dma_contig_plane_dma_addr(&dst_buf->vb2_buf, 0); | ||
1214 | |||
1215 | s5p_jpeg_reset(jpeg->regs); | ||
1216 | s5p_jpeg_poweron(jpeg->regs); | ||
1217 | @@ -2108,7 +2111,7 @@ static void exynos4_jpeg_set_img_addr(struct s5p_jpeg_ctx *ctx) | ||
1218 | { | ||
1219 | struct s5p_jpeg *jpeg = ctx->jpeg; | ||
1220 | struct s5p_jpeg_fmt *fmt; | ||
1221 | - struct vb2_buffer *vb; | ||
1222 | + struct vb2_v4l2_buffer *vb; | ||
1223 | struct s5p_jpeg_addr jpeg_addr = {}; | ||
1224 | u32 pix_size, padding_bytes = 0; | ||
1225 | |||
1226 | @@ -2127,7 +2130,7 @@ static void exynos4_jpeg_set_img_addr(struct s5p_jpeg_ctx *ctx) | ||
1227 | vb = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx); | ||
1228 | } | ||
1229 | |||
1230 | - jpeg_addr.y = vb2_dma_contig_plane_dma_addr(vb, 0); | ||
1231 | + jpeg_addr.y = vb2_dma_contig_plane_dma_addr(&vb->vb2_buf, 0); | ||
1232 | |||
1233 | if (fmt->colplanes == 2) { | ||
1234 | jpeg_addr.cb = jpeg_addr.y + pix_size - padding_bytes; | ||
1235 | @@ -2145,7 +2148,7 @@ static void exynos4_jpeg_set_img_addr(struct s5p_jpeg_ctx *ctx) | ||
1236 | static void exynos4_jpeg_set_jpeg_addr(struct s5p_jpeg_ctx *ctx) | ||
1237 | { | ||
1238 | struct s5p_jpeg *jpeg = ctx->jpeg; | ||
1239 | - struct vb2_buffer *vb; | ||
1240 | + struct vb2_v4l2_buffer *vb; | ||
1241 | unsigned int jpeg_addr = 0; | ||
1242 | |||
1243 | if (ctx->mode == S5P_JPEG_ENCODE) | ||
1244 | @@ -2153,7 +2156,7 @@ static void exynos4_jpeg_set_jpeg_addr(struct s5p_jpeg_ctx *ctx) | ||
1245 | else | ||
1246 | vb = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); | ||
1247 | |||
1248 | - jpeg_addr = vb2_dma_contig_plane_dma_addr(vb, 0); | ||
1249 | + jpeg_addr = vb2_dma_contig_plane_dma_addr(&vb->vb2_buf, 0); | ||
1250 | if (jpeg->variant->version == SJPEG_EXYNOS5433 && | ||
1251 | ctx->mode == S5P_JPEG_DECODE) | ||
1252 | jpeg_addr += ctx->out_q.sos; | ||
1253 | @@ -2268,7 +2271,7 @@ static void exynos3250_jpeg_set_img_addr(struct s5p_jpeg_ctx *ctx) | ||
1254 | { | ||
1255 | struct s5p_jpeg *jpeg = ctx->jpeg; | ||
1256 | struct s5p_jpeg_fmt *fmt; | ||
1257 | - struct vb2_buffer *vb; | ||
1258 | + struct vb2_v4l2_buffer *vb; | ||
1259 | struct s5p_jpeg_addr jpeg_addr = {}; | ||
1260 | u32 pix_size; | ||
1261 | |||
1262 | @@ -2282,7 +2285,7 @@ static void exynos3250_jpeg_set_img_addr(struct s5p_jpeg_ctx *ctx) | ||
1263 | fmt = ctx->cap_q.fmt; | ||
1264 | } | ||
1265 | |||
1266 | - jpeg_addr.y = vb2_dma_contig_plane_dma_addr(vb, 0); | ||
1267 | + jpeg_addr.y = vb2_dma_contig_plane_dma_addr(&vb->vb2_buf, 0); | ||
1268 | |||
1269 | if (fmt->colplanes == 2) { | ||
1270 | jpeg_addr.cb = jpeg_addr.y + pix_size; | ||
1271 | @@ -2300,7 +2303,7 @@ static void exynos3250_jpeg_set_img_addr(struct s5p_jpeg_ctx *ctx) | ||
1272 | static void exynos3250_jpeg_set_jpeg_addr(struct s5p_jpeg_ctx *ctx) | ||
1273 | { | ||
1274 | struct s5p_jpeg *jpeg = ctx->jpeg; | ||
1275 | - struct vb2_buffer *vb; | ||
1276 | + struct vb2_v4l2_buffer *vb; | ||
1277 | unsigned int jpeg_addr = 0; | ||
1278 | |||
1279 | if (ctx->mode == S5P_JPEG_ENCODE) | ||
1280 | @@ -2308,7 +2311,7 @@ static void exynos3250_jpeg_set_jpeg_addr(struct s5p_jpeg_ctx *ctx) | ||
1281 | else | ||
1282 | vb = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); | ||
1283 | |||
1284 | - jpeg_addr = vb2_dma_contig_plane_dma_addr(vb, 0); | ||
1285 | + jpeg_addr = vb2_dma_contig_plane_dma_addr(&vb->vb2_buf, 0); | ||
1286 | exynos3250_jpeg_jpgadr(jpeg->regs, jpeg_addr); | ||
1287 | } | ||
1288 | |||
1289 | diff --git a/drivers/media/platform/sh_veu.c b/drivers/media/platform/sh_veu.c | ||
1290 | index 15a562af13c7..a4f593220ef0 100644 | ||
1291 | --- a/drivers/media/platform/sh_veu.c | ||
1292 | +++ b/drivers/media/platform/sh_veu.c | ||
1293 | @@ -276,13 +276,13 @@ static void sh_veu_process(struct sh_veu_dev *veu, | ||
1294 | static void sh_veu_device_run(void *priv) | ||
1295 | { | ||
1296 | struct sh_veu_dev *veu = priv; | ||
1297 | - struct vb2_buffer *src_buf, *dst_buf; | ||
1298 | + struct vb2_v4l2_buffer *src_buf, *dst_buf; | ||
1299 | |||
1300 | src_buf = v4l2_m2m_next_src_buf(veu->m2m_ctx); | ||
1301 | dst_buf = v4l2_m2m_next_dst_buf(veu->m2m_ctx); | ||
1302 | |||
1303 | if (src_buf && dst_buf) | ||
1304 | - sh_veu_process(veu, src_buf, dst_buf); | ||
1305 | + sh_veu_process(veu, &src_buf->vb2_buf, &dst_buf->vb2_buf); | ||
1306 | } | ||
1307 | |||
1308 | /* ========== video ioctls ========== */ | ||
1309 | diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c | ||
1310 | index a4bf14e21b5e..21dfce21aa63 100644 | ||
1311 | --- a/drivers/mmc/host/omap.c | ||
1312 | +++ b/drivers/mmc/host/omap.c | ||
1313 | @@ -920,7 +920,7 @@ static inline void set_cmd_timeout(struct mmc_omap_host *host, struct mmc_reques | ||
1314 | reg &= ~(1 << 5); | ||
1315 | OMAP_MMC_WRITE(host, SDIO, reg); | ||
1316 | /* Set maximum timeout */ | ||
1317 | - OMAP_MMC_WRITE(host, CTO, 0xff); | ||
1318 | + OMAP_MMC_WRITE(host, CTO, 0xfd); | ||
1319 | } | ||
1320 | |||
1321 | static inline void set_data_timeout(struct mmc_omap_host *host, struct mmc_request *req) | ||
1322 | diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c | ||
1323 | index 89acf7bc4cf9..b73d9ba9496c 100644 | ||
1324 | --- a/drivers/net/ethernet/cisco/enic/enic_main.c | ||
1325 | +++ b/drivers/net/ethernet/cisco/enic/enic_main.c | ||
1326 | @@ -120,7 +120,7 @@ static void enic_init_affinity_hint(struct enic *enic) | ||
1327 | |||
1328 | for (i = 0; i < enic->intr_count; i++) { | ||
1329 | if (enic_is_err_intr(enic, i) || enic_is_notify_intr(enic, i) || | ||
1330 | - (enic->msix[i].affinity_mask && | ||
1331 | + (cpumask_available(enic->msix[i].affinity_mask) && | ||
1332 | !cpumask_empty(enic->msix[i].affinity_mask))) | ||
1333 | continue; | ||
1334 | if (zalloc_cpumask_var(&enic->msix[i].affinity_mask, | ||
1335 | @@ -149,7 +149,7 @@ static void enic_set_affinity_hint(struct enic *enic) | ||
1336 | for (i = 0; i < enic->intr_count; i++) { | ||
1337 | if (enic_is_err_intr(enic, i) || | ||
1338 | enic_is_notify_intr(enic, i) || | ||
1339 | - !enic->msix[i].affinity_mask || | ||
1340 | + !cpumask_available(enic->msix[i].affinity_mask) || | ||
1341 | cpumask_empty(enic->msix[i].affinity_mask)) | ||
1342 | continue; | ||
1343 | err = irq_set_affinity_hint(enic->msix_entry[i].vector, | ||
1344 | @@ -162,7 +162,7 @@ static void enic_set_affinity_hint(struct enic *enic) | ||
1345 | for (i = 0; i < enic->wq_count; i++) { | ||
1346 | int wq_intr = enic_msix_wq_intr(enic, i); | ||
1347 | |||
1348 | - if (enic->msix[wq_intr].affinity_mask && | ||
1349 | + if (cpumask_available(enic->msix[wq_intr].affinity_mask) && | ||
1350 | !cpumask_empty(enic->msix[wq_intr].affinity_mask)) | ||
1351 | netif_set_xps_queue(enic->netdev, | ||
1352 | enic->msix[wq_intr].affinity_mask, | ||
1353 | diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c | ||
1354 | index 6855b3380a83..8bbedfc9c48f 100644 | ||
1355 | --- a/drivers/net/ethernet/intel/e1000e/netdev.c | ||
1356 | +++ b/drivers/net/ethernet/intel/e1000e/netdev.c | ||
1357 | @@ -2121,7 +2121,7 @@ static int e1000_request_msix(struct e1000_adapter *adapter) | ||
1358 | if (strlen(netdev->name) < (IFNAMSIZ - 5)) | ||
1359 | snprintf(adapter->rx_ring->name, | ||
1360 | sizeof(adapter->rx_ring->name) - 1, | ||
1361 | - "%s-rx-0", netdev->name); | ||
1362 | + "%.14s-rx-0", netdev->name); | ||
1363 | else | ||
1364 | memcpy(adapter->rx_ring->name, netdev->name, IFNAMSIZ); | ||
1365 | err = request_irq(adapter->msix_entries[vector].vector, | ||
1366 | @@ -2137,7 +2137,7 @@ static int e1000_request_msix(struct e1000_adapter *adapter) | ||
1367 | if (strlen(netdev->name) < (IFNAMSIZ - 5)) | ||
1368 | snprintf(adapter->tx_ring->name, | ||
1369 | sizeof(adapter->tx_ring->name) - 1, | ||
1370 | - "%s-tx-0", netdev->name); | ||
1371 | + "%.14s-tx-0", netdev->name); | ||
1372 | else | ||
1373 | memcpy(adapter->tx_ring->name, netdev->name, IFNAMSIZ); | ||
1374 | err = request_irq(adapter->msix_entries[vector].vector, | ||
1375 | @@ -5291,8 +5291,13 @@ static void e1000_watchdog_task(struct work_struct *work) | ||
1376 | /* 8000ES2LAN requires a Rx packet buffer work-around | ||
1377 | * on link down event; reset the controller to flush | ||
1378 | * the Rx packet buffer. | ||
1379 | + * | ||
1380 | + * If the link is lost the controller stops DMA, but | ||
1381 | + * if there is queued Tx work it cannot be done. So | ||
1382 | + * reset the controller to flush the Tx packet buffers. | ||
1383 | */ | ||
1384 | - if (adapter->flags & FLAG_RX_NEEDS_RESTART) | ||
1385 | + if ((adapter->flags & FLAG_RX_NEEDS_RESTART) || | ||
1386 | + e1000_desc_unused(tx_ring) + 1 < tx_ring->count) | ||
1387 | adapter->flags |= FLAG_RESTART_NOW; | ||
1388 | else | ||
1389 | pm_schedule_suspend(netdev->dev.parent, | ||
1390 | @@ -5315,14 +5320,6 @@ link_up: | ||
1391 | adapter->gotc_old = adapter->stats.gotc; | ||
1392 | spin_unlock(&adapter->stats64_lock); | ||
1393 | |||
1394 | - /* If the link is lost the controller stops DMA, but | ||
1395 | - * if there is queued Tx work it cannot be done. So | ||
1396 | - * reset the controller to flush the Tx packet buffers. | ||
1397 | - */ | ||
1398 | - if (!netif_carrier_ok(netdev) && | ||
1399 | - (e1000_desc_unused(tx_ring) + 1 < tx_ring->count)) | ||
1400 | - adapter->flags |= FLAG_RESTART_NOW; | ||
1401 | - | ||
1402 | /* If reset is necessary, do it outside of interrupt context. */ | ||
1403 | if (adapter->flags & FLAG_RESTART_NOW) { | ||
1404 | schedule_work(&adapter->reset_task); | ||
1405 | diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||
1406 | index 22a5916e477e..cc847e0cac2d 100644 | ||
1407 | --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||
1408 | +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||
1409 | @@ -1565,7 +1565,7 @@ static void mlxsw_sp_port_get_prio_strings(u8 **p, int prio) | ||
1410 | int i; | ||
1411 | |||
1412 | for (i = 0; i < MLXSW_SP_PORT_HW_PRIO_STATS_LEN; i++) { | ||
1413 | - snprintf(*p, ETH_GSTRING_LEN, "%s_%d", | ||
1414 | + snprintf(*p, ETH_GSTRING_LEN, "%.29s_%.1d", | ||
1415 | mlxsw_sp_port_hw_prio_stats[i].str, prio); | ||
1416 | *p += ETH_GSTRING_LEN; | ||
1417 | } | ||
1418 | @@ -1576,7 +1576,7 @@ static void mlxsw_sp_port_get_tc_strings(u8 **p, int tc) | ||
1419 | int i; | ||
1420 | |||
1421 | for (i = 0; i < MLXSW_SP_PORT_HW_TC_STATS_LEN; i++) { | ||
1422 | - snprintf(*p, ETH_GSTRING_LEN, "%s_%d", | ||
1423 | + snprintf(*p, ETH_GSTRING_LEN, "%.29s_%.1d", | ||
1424 | mlxsw_sp_port_hw_tc_stats[i].str, tc); | ||
1425 | *p += ETH_GSTRING_LEN; | ||
1426 | } | ||
1427 | diff --git a/drivers/net/wireless/ath/wil6210/cfg80211.c b/drivers/net/wireless/ath/wil6210/cfg80211.c | ||
1428 | index d117240d9a73..b8eeaef17edc 100644 | ||
1429 | --- a/drivers/net/wireless/ath/wil6210/cfg80211.c | ||
1430 | +++ b/drivers/net/wireless/ath/wil6210/cfg80211.c | ||
1431 | @@ -1005,6 +1005,12 @@ static int _wil_cfg80211_merge_extra_ies(const u8 *ies1, u16 ies1_len, | ||
1432 | u8 *buf, *dpos; | ||
1433 | const u8 *spos; | ||
1434 | |||
1435 | + if (!ies1) | ||
1436 | + ies1_len = 0; | ||
1437 | + | ||
1438 | + if (!ies2) | ||
1439 | + ies2_len = 0; | ||
1440 | + | ||
1441 | if (ies1_len == 0 && ies2_len == 0) { | ||
1442 | *merged_ies = NULL; | ||
1443 | *merged_len = 0; | ||
1444 | @@ -1014,17 +1020,19 @@ static int _wil_cfg80211_merge_extra_ies(const u8 *ies1, u16 ies1_len, | ||
1445 | buf = kmalloc(ies1_len + ies2_len, GFP_KERNEL); | ||
1446 | if (!buf) | ||
1447 | return -ENOMEM; | ||
1448 | - memcpy(buf, ies1, ies1_len); | ||
1449 | + if (ies1) | ||
1450 | + memcpy(buf, ies1, ies1_len); | ||
1451 | dpos = buf + ies1_len; | ||
1452 | spos = ies2; | ||
1453 | - while (spos + 1 < ies2 + ies2_len) { | ||
1454 | + while (spos && (spos + 1 < ies2 + ies2_len)) { | ||
1455 | /* IE tag at offset 0, length at offset 1 */ | ||
1456 | u16 ielen = 2 + spos[1]; | ||
1457 | |||
1458 | if (spos + ielen > ies2 + ies2_len) | ||
1459 | break; | ||
1460 | if (spos[0] == WLAN_EID_VENDOR_SPECIFIC && | ||
1461 | - !_wil_cfg80211_find_ie(ies1, ies1_len, spos, ielen)) { | ||
1462 | + (!ies1 || !_wil_cfg80211_find_ie(ies1, ies1_len, | ||
1463 | + spos, ielen))) { | ||
1464 | memcpy(dpos, spos, ielen); | ||
1465 | dpos += ielen; | ||
1466 | } | ||
1467 | diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c | ||
1468 | index e58a50d31d96..c21f8bd32d08 100644 | ||
1469 | --- a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c | ||
1470 | +++ b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c | ||
1471 | @@ -475,7 +475,7 @@ static void iwl_pcie_rx_allocator(struct iwl_trans *trans) | ||
1472 | struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); | ||
1473 | struct iwl_rb_allocator *rba = &trans_pcie->rba; | ||
1474 | struct list_head local_empty; | ||
1475 | - int pending = atomic_xchg(&rba->req_pending, 0); | ||
1476 | + int pending = atomic_read(&rba->req_pending); | ||
1477 | |||
1478 | IWL_DEBUG_RX(trans, "Pending allocation requests = %d\n", pending); | ||
1479 | |||
1480 | @@ -530,11 +530,13 @@ static void iwl_pcie_rx_allocator(struct iwl_trans *trans) | ||
1481 | i++; | ||
1482 | } | ||
1483 | |||
1484 | + atomic_dec(&rba->req_pending); | ||
1485 | pending--; | ||
1486 | + | ||
1487 | if (!pending) { | ||
1488 | - pending = atomic_xchg(&rba->req_pending, 0); | ||
1489 | + pending = atomic_read(&rba->req_pending); | ||
1490 | IWL_DEBUG_RX(trans, | ||
1491 | - "Pending allocation requests = %d\n", | ||
1492 | + "Got more pending allocation requests = %d\n", | ||
1493 | pending); | ||
1494 | } | ||
1495 | |||
1496 | @@ -546,12 +548,15 @@ static void iwl_pcie_rx_allocator(struct iwl_trans *trans) | ||
1497 | spin_unlock(&rba->lock); | ||
1498 | |||
1499 | atomic_inc(&rba->req_ready); | ||
1500 | + | ||
1501 | } | ||
1502 | |||
1503 | spin_lock(&rba->lock); | ||
1504 | /* return unused rbds to the allocator empty list */ | ||
1505 | list_splice_tail(&local_empty, &rba->rbd_empty); | ||
1506 | spin_unlock(&rba->lock); | ||
1507 | + | ||
1508 | + IWL_DEBUG_RX(trans, "%s, exit.\n", __func__); | ||
1509 | } | ||
1510 | |||
1511 | /* | ||
1512 | diff --git a/drivers/net/wireless/mediatek/mt7601u/eeprom.h b/drivers/net/wireless/mediatek/mt7601u/eeprom.h | ||
1513 | index 662d12703b69..57b503ae63f1 100644 | ||
1514 | --- a/drivers/net/wireless/mediatek/mt7601u/eeprom.h | ||
1515 | +++ b/drivers/net/wireless/mediatek/mt7601u/eeprom.h | ||
1516 | @@ -17,7 +17,7 @@ | ||
1517 | |||
1518 | struct mt7601u_dev; | ||
1519 | |||
1520 | -#define MT7601U_EE_MAX_VER 0x0c | ||
1521 | +#define MT7601U_EE_MAX_VER 0x0d | ||
1522 | #define MT7601U_EEPROM_SIZE 256 | ||
1523 | |||
1524 | #define MT7601U_DEFAULT_TX_POWER 6 | ||
1525 | diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c | ||
1526 | index 5438975c7ff2..17d32ce5d16b 100644 | ||
1527 | --- a/drivers/net/wireless/ti/wlcore/main.c | ||
1528 | +++ b/drivers/net/wireless/ti/wlcore/main.c | ||
1529 | @@ -1058,8 +1058,11 @@ static int wl12xx_chip_wakeup(struct wl1271 *wl, bool plt) | ||
1530 | goto out; | ||
1531 | |||
1532 | ret = wl12xx_fetch_firmware(wl, plt); | ||
1533 | - if (ret < 0) | ||
1534 | - goto out; | ||
1535 | + if (ret < 0) { | ||
1536 | + kfree(wl->fw_status); | ||
1537 | + kfree(wl->raw_fw_status); | ||
1538 | + kfree(wl->tx_res_if); | ||
1539 | + } | ||
1540 | |||
1541 | out: | ||
1542 | return ret; | ||
1543 | diff --git a/drivers/regulator/act8865-regulator.c b/drivers/regulator/act8865-regulator.c | ||
1544 | index 7652477e6a9d..39e8d60df060 100644 | ||
1545 | --- a/drivers/regulator/act8865-regulator.c | ||
1546 | +++ b/drivers/regulator/act8865-regulator.c | ||
1547 | @@ -131,7 +131,7 @@ | ||
1548 | * ACT8865 voltage number | ||
1549 | */ | ||
1550 | #define ACT8865_VOLTAGE_NUM 64 | ||
1551 | -#define ACT8600_SUDCDC_VOLTAGE_NUM 255 | ||
1552 | +#define ACT8600_SUDCDC_VOLTAGE_NUM 256 | ||
1553 | |||
1554 | struct act8865 { | ||
1555 | struct regmap *regmap; | ||
1556 | @@ -222,7 +222,8 @@ static const struct regulator_linear_range act8600_sudcdc_voltage_ranges[] = { | ||
1557 | REGULATOR_LINEAR_RANGE(3000000, 0, 63, 0), | ||
1558 | REGULATOR_LINEAR_RANGE(3000000, 64, 159, 100000), | ||
1559 | REGULATOR_LINEAR_RANGE(12600000, 160, 191, 200000), | ||
1560 | - REGULATOR_LINEAR_RANGE(19000000, 191, 255, 400000), | ||
1561 | + REGULATOR_LINEAR_RANGE(19000000, 192, 247, 400000), | ||
1562 | + REGULATOR_LINEAR_RANGE(41400000, 248, 255, 0), | ||
1563 | }; | ||
1564 | |||
1565 | static struct regulator_ops act8865_ops = { | ||
1566 | diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c | ||
1567 | index 2f872f784e10..5252dd5d3f4b 100644 | ||
1568 | --- a/drivers/scsi/hisi_sas/hisi_sas_main.c | ||
1569 | +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c | ||
1570 | @@ -10,6 +10,7 @@ | ||
1571 | */ | ||
1572 | |||
1573 | #include "hisi_sas.h" | ||
1574 | +#include "../libsas/sas_internal.h" | ||
1575 | #define DRV_NAME "hisi_sas" | ||
1576 | |||
1577 | #define DEV_IS_GONE(dev) \ | ||
1578 | @@ -1128,9 +1129,18 @@ static void hisi_sas_port_deformed(struct asd_sas_phy *sas_phy) | ||
1579 | |||
1580 | static void hisi_sas_phy_disconnected(struct hisi_sas_phy *phy) | ||
1581 | { | ||
1582 | + struct asd_sas_phy *sas_phy = &phy->sas_phy; | ||
1583 | + struct sas_phy *sphy = sas_phy->phy; | ||
1584 | + struct sas_phy_data *d = sphy->hostdata; | ||
1585 | + | ||
1586 | phy->phy_attached = 0; | ||
1587 | phy->phy_type = 0; | ||
1588 | phy->port = NULL; | ||
1589 | + | ||
1590 | + if (d->enable) | ||
1591 | + sphy->negotiated_linkrate = SAS_LINK_RATE_UNKNOWN; | ||
1592 | + else | ||
1593 | + sphy->negotiated_linkrate = SAS_PHY_DISABLED; | ||
1594 | } | ||
1595 | |||
1596 | void hisi_sas_phy_down(struct hisi_hba *hisi_hba, int phy_no, int rdy) | ||
1597 | diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c | ||
1598 | index 5de024a50e15..5b1c37e3913c 100644 | ||
1599 | --- a/drivers/scsi/megaraid/megaraid_sas_base.c | ||
1600 | +++ b/drivers/scsi/megaraid/megaraid_sas_base.c | ||
1601 | @@ -3956,6 +3956,7 @@ int megasas_alloc_cmds(struct megasas_instance *instance) | ||
1602 | if (megasas_create_frame_pool(instance)) { | ||
1603 | dev_printk(KERN_DEBUG, &instance->pdev->dev, "Error creating frame DMA pool\n"); | ||
1604 | megasas_free_cmds(instance); | ||
1605 | + return -ENOMEM; | ||
1606 | } | ||
1607 | |||
1608 | return 0; | ||
1609 | diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c | ||
1610 | index 27a6d3c6cb7c..67f6f134abc4 100644 | ||
1611 | --- a/drivers/scsi/scsi_scan.c | ||
1612 | +++ b/drivers/scsi/scsi_scan.c | ||
1613 | @@ -219,7 +219,7 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget, | ||
1614 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); | ||
1615 | |||
1616 | sdev = kzalloc(sizeof(*sdev) + shost->transportt->device_size, | ||
1617 | - GFP_ATOMIC); | ||
1618 | + GFP_KERNEL); | ||
1619 | if (!sdev) | ||
1620 | goto out; | ||
1621 | |||
1622 | @@ -796,7 +796,7 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result, | ||
1623 | */ | ||
1624 | sdev->inquiry = kmemdup(inq_result, | ||
1625 | max_t(size_t, sdev->inquiry_len, 36), | ||
1626 | - GFP_ATOMIC); | ||
1627 | + GFP_KERNEL); | ||
1628 | if (sdev->inquiry == NULL) | ||
1629 | return SCSI_SCAN_NO_RESPONSE; | ||
1630 | |||
1631 | @@ -1095,7 +1095,7 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget, | ||
1632 | if (!sdev) | ||
1633 | goto out; | ||
1634 | |||
1635 | - result = kmalloc(result_len, GFP_ATOMIC | | ||
1636 | + result = kmalloc(result_len, GFP_KERNEL | | ||
1637 | ((shost->unchecked_isa_dma) ? __GFP_DMA : 0)); | ||
1638 | if (!result) | ||
1639 | goto out_free_sdev; | ||
1640 | diff --git a/drivers/soc/qcom/qcom_gsbi.c b/drivers/soc/qcom/qcom_gsbi.c | ||
1641 | index 09c669e70d63..038abc377fdb 100644 | ||
1642 | --- a/drivers/soc/qcom/qcom_gsbi.c | ||
1643 | +++ b/drivers/soc/qcom/qcom_gsbi.c | ||
1644 | @@ -138,7 +138,7 @@ static int gsbi_probe(struct platform_device *pdev) | ||
1645 | struct resource *res; | ||
1646 | void __iomem *base; | ||
1647 | struct gsbi_info *gsbi; | ||
1648 | - int i; | ||
1649 | + int i, ret; | ||
1650 | u32 mask, gsbi_num; | ||
1651 | const struct crci_config *config = NULL; | ||
1652 | |||
1653 | @@ -221,7 +221,10 @@ static int gsbi_probe(struct platform_device *pdev) | ||
1654 | |||
1655 | platform_set_drvdata(pdev, gsbi); | ||
1656 | |||
1657 | - return of_platform_populate(node, NULL, NULL, &pdev->dev); | ||
1658 | + ret = of_platform_populate(node, NULL, NULL, &pdev->dev); | ||
1659 | + if (ret) | ||
1660 | + clk_disable_unprepare(gsbi->hclk); | ||
1661 | + return ret; | ||
1662 | } | ||
1663 | |||
1664 | static int gsbi_remove(struct platform_device *pdev) | ||
1665 | diff --git a/drivers/soc/tegra/fuse/fuse-tegra.c b/drivers/soc/tegra/fuse/fuse-tegra.c | ||
1666 | index de2c1bfe28b5..c4f5e5bbb8dc 100644 | ||
1667 | --- a/drivers/soc/tegra/fuse/fuse-tegra.c | ||
1668 | +++ b/drivers/soc/tegra/fuse/fuse-tegra.c | ||
1669 | @@ -131,13 +131,17 @@ static int tegra_fuse_probe(struct platform_device *pdev) | ||
1670 | /* take over the memory region from the early initialization */ | ||
1671 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
1672 | fuse->base = devm_ioremap_resource(&pdev->dev, res); | ||
1673 | - if (IS_ERR(fuse->base)) | ||
1674 | - return PTR_ERR(fuse->base); | ||
1675 | + if (IS_ERR(fuse->base)) { | ||
1676 | + err = PTR_ERR(fuse->base); | ||
1677 | + fuse->base = base; | ||
1678 | + return err; | ||
1679 | + } | ||
1680 | |||
1681 | fuse->clk = devm_clk_get(&pdev->dev, "fuse"); | ||
1682 | if (IS_ERR(fuse->clk)) { | ||
1683 | dev_err(&pdev->dev, "failed to get FUSE clock: %ld", | ||
1684 | PTR_ERR(fuse->clk)); | ||
1685 | + fuse->base = base; | ||
1686 | return PTR_ERR(fuse->clk); | ||
1687 | } | ||
1688 | |||
1689 | @@ -146,8 +150,10 @@ static int tegra_fuse_probe(struct platform_device *pdev) | ||
1690 | |||
1691 | if (fuse->soc->probe) { | ||
1692 | err = fuse->soc->probe(fuse); | ||
1693 | - if (err < 0) | ||
1694 | + if (err < 0) { | ||
1695 | + fuse->base = base; | ||
1696 | return err; | ||
1697 | + } | ||
1698 | } | ||
1699 | |||
1700 | if (tegra_fuse_create_sysfs(&pdev->dev, fuse->soc->info->size, | ||
1701 | diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c | ||
1702 | index d8e1945cb627..ef688aadb032 100644 | ||
1703 | --- a/drivers/tty/serial/atmel_serial.c | ||
1704 | +++ b/drivers/tty/serial/atmel_serial.c | ||
1705 | @@ -175,6 +175,8 @@ struct atmel_uart_port { | ||
1706 | unsigned int pending_status; | ||
1707 | spinlock_t lock_suspended; | ||
1708 | |||
1709 | + bool hd_start_rx; /* can start RX during half-duplex operation */ | ||
1710 | + | ||
1711 | int (*prepare_rx)(struct uart_port *port); | ||
1712 | int (*prepare_tx)(struct uart_port *port); | ||
1713 | void (*schedule_rx)(struct uart_port *port); | ||
1714 | @@ -241,6 +243,12 @@ static inline void atmel_uart_write_char(struct uart_port *port, u8 value) | ||
1715 | |||
1716 | #endif | ||
1717 | |||
1718 | +static inline int atmel_uart_is_half_duplex(struct uart_port *port) | ||
1719 | +{ | ||
1720 | + return (port->rs485.flags & SER_RS485_ENABLED) && | ||
1721 | + !(port->rs485.flags & SER_RS485_RX_DURING_TX); | ||
1722 | +} | ||
1723 | + | ||
1724 | #ifdef CONFIG_SERIAL_ATMEL_PDC | ||
1725 | static bool atmel_use_pdc_rx(struct uart_port *port) | ||
1726 | { | ||
1727 | @@ -492,9 +500,9 @@ static void atmel_stop_tx(struct uart_port *port) | ||
1728 | /* Disable interrupts */ | ||
1729 | atmel_uart_writel(port, ATMEL_US_IDR, atmel_port->tx_done_mask); | ||
1730 | |||
1731 | - if ((port->rs485.flags & SER_RS485_ENABLED) && | ||
1732 | - !(port->rs485.flags & SER_RS485_RX_DURING_TX)) | ||
1733 | + if (atmel_uart_is_half_duplex(port)) | ||
1734 | atmel_start_rx(port); | ||
1735 | + | ||
1736 | } | ||
1737 | |||
1738 | /* | ||
1739 | @@ -511,8 +519,7 @@ static void atmel_start_tx(struct uart_port *port) | ||
1740 | return; | ||
1741 | |||
1742 | if (atmel_use_pdc_tx(port) || atmel_use_dma_tx(port)) | ||
1743 | - if ((port->rs485.flags & SER_RS485_ENABLED) && | ||
1744 | - !(port->rs485.flags & SER_RS485_RX_DURING_TX)) | ||
1745 | + if (atmel_uart_is_half_duplex(port)) | ||
1746 | atmel_stop_rx(port); | ||
1747 | |||
1748 | if (atmel_use_pdc_tx(port)) | ||
1749 | @@ -809,10 +816,14 @@ static void atmel_complete_tx_dma(void *arg) | ||
1750 | */ | ||
1751 | if (!uart_circ_empty(xmit)) | ||
1752 | atmel_tasklet_schedule(atmel_port, &atmel_port->tasklet_tx); | ||
1753 | - else if ((port->rs485.flags & SER_RS485_ENABLED) && | ||
1754 | - !(port->rs485.flags & SER_RS485_RX_DURING_TX)) { | ||
1755 | - /* DMA done, stop TX, start RX for RS485 */ | ||
1756 | - atmel_start_rx(port); | ||
1757 | + else if (atmel_uart_is_half_duplex(port)) { | ||
1758 | + /* | ||
1759 | + * DMA done, re-enable TXEMPTY and signal that we can stop | ||
1760 | + * TX and start RX for RS485 | ||
1761 | + */ | ||
1762 | + atmel_port->hd_start_rx = true; | ||
1763 | + atmel_uart_writel(port, ATMEL_US_IER, | ||
1764 | + atmel_port->tx_done_mask); | ||
1765 | } | ||
1766 | |||
1767 | spin_unlock_irqrestore(&port->lock, flags); | ||
1768 | @@ -1257,9 +1268,20 @@ atmel_handle_transmit(struct uart_port *port, unsigned int pending) | ||
1769 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); | ||
1770 | |||
1771 | if (pending & atmel_port->tx_done_mask) { | ||
1772 | - /* Either PDC or interrupt transmission */ | ||
1773 | atmel_uart_writel(port, ATMEL_US_IDR, | ||
1774 | atmel_port->tx_done_mask); | ||
1775 | + | ||
1776 | + /* Start RX if flag was set and FIFO is empty */ | ||
1777 | + if (atmel_port->hd_start_rx) { | ||
1778 | + if (!(atmel_uart_readl(port, ATMEL_US_CSR) | ||
1779 | + & ATMEL_US_TXEMPTY)) | ||
1780 | + dev_warn(port->dev, "Should start RX, but TX fifo is not empty\n"); | ||
1781 | + | ||
1782 | + atmel_port->hd_start_rx = false; | ||
1783 | + atmel_start_rx(port); | ||
1784 | + return; | ||
1785 | + } | ||
1786 | + | ||
1787 | atmel_tasklet_schedule(atmel_port, &atmel_port->tasklet_tx); | ||
1788 | } | ||
1789 | } | ||
1790 | @@ -1386,8 +1408,7 @@ static void atmel_tx_pdc(struct uart_port *port) | ||
1791 | atmel_uart_writel(port, ATMEL_US_IER, | ||
1792 | atmel_port->tx_done_mask); | ||
1793 | } else { | ||
1794 | - if ((port->rs485.flags & SER_RS485_ENABLED) && | ||
1795 | - !(port->rs485.flags & SER_RS485_RX_DURING_TX)) { | ||
1796 | + if (atmel_uart_is_half_duplex(port)) { | ||
1797 | /* DMA done, stop TX, start RX for RS485 */ | ||
1798 | atmel_start_rx(port); | ||
1799 | } | ||
1800 | diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c | ||
1801 | index 41b9a7ccce08..ca9c82ee6c35 100644 | ||
1802 | --- a/drivers/tty/tty_buffer.c | ||
1803 | +++ b/drivers/tty/tty_buffer.c | ||
1804 | @@ -25,7 +25,7 @@ | ||
1805 | * Byte threshold to limit memory consumption for flip buffers. | ||
1806 | * The actual memory limit is > 2x this amount. | ||
1807 | */ | ||
1808 | -#define TTYB_DEFAULT_MEM_LIMIT 65536 | ||
1809 | +#define TTYB_DEFAULT_MEM_LIMIT (640 * 1024UL) | ||
1810 | |||
1811 | /* | ||
1812 | * We default to dicing tty buffer allocations to this many characters | ||
1813 | diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c | ||
1814 | index 64c6af2c8559..e96e3a5808b3 100644 | ||
1815 | --- a/drivers/usb/chipidea/core.c | ||
1816 | +++ b/drivers/usb/chipidea/core.c | ||
1817 | @@ -901,8 +901,15 @@ static int ci_hdrc_probe(struct platform_device *pdev) | ||
1818 | } else if (ci->platdata->usb_phy) { | ||
1819 | ci->usb_phy = ci->platdata->usb_phy; | ||
1820 | } else { | ||
1821 | + ci->usb_phy = devm_usb_get_phy_by_phandle(dev->parent, "phys", | ||
1822 | + 0); | ||
1823 | ci->phy = devm_phy_get(dev->parent, "usb-phy"); | ||
1824 | - ci->usb_phy = devm_usb_get_phy(dev->parent, USB_PHY_TYPE_USB2); | ||
1825 | + | ||
1826 | + /* Fallback to grabbing any registered USB2 PHY */ | ||
1827 | + if (IS_ERR(ci->usb_phy) && | ||
1828 | + PTR_ERR(ci->usb_phy) != -EPROBE_DEFER) | ||
1829 | + ci->usb_phy = devm_usb_get_phy(dev->parent, | ||
1830 | + USB_PHY_TYPE_USB2); | ||
1831 | |||
1832 | /* if both generic PHY and USB PHY layers aren't enabled */ | ||
1833 | if (PTR_ERR(ci->phy) == -ENOSYS && | ||
1834 | diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c | ||
1835 | index 04eb64381d92..927ac0ee09b7 100644 | ||
1836 | --- a/drivers/usb/gadget/function/f_fs.c | ||
1837 | +++ b/drivers/usb/gadget/function/f_fs.c | ||
1838 | @@ -1008,6 +1008,7 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data) | ||
1839 | * condition with req->complete callback. | ||
1840 | */ | ||
1841 | usb_ep_dequeue(ep->ep, req); | ||
1842 | + wait_for_completion(&done); | ||
1843 | interrupted = ep->status < 0; | ||
1844 | } | ||
1845 | |||
1846 | diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c | ||
1847 | index a1d93151c059..c928190666ac 100644 | ||
1848 | --- a/drivers/video/fbdev/core/fbmem.c | ||
1849 | +++ b/drivers/video/fbdev/core/fbmem.c | ||
1850 | @@ -425,6 +425,9 @@ static void fb_do_show_logo(struct fb_info *info, struct fb_image *image, | ||
1851 | { | ||
1852 | unsigned int x; | ||
1853 | |||
1854 | + if (image->width > info->var.xres || image->height > info->var.yres) | ||
1855 | + return; | ||
1856 | + | ||
1857 | if (rotate == FB_ROTATE_UR) { | ||
1858 | for (x = 0; | ||
1859 | x < num && image->dx + image->width <= info->var.xres; | ||
1860 | diff --git a/fs/buffer.c b/fs/buffer.c | ||
1861 | index e0d46d47e358..a89be9741d12 100644 | ||
1862 | --- a/fs/buffer.c | ||
1863 | +++ b/fs/buffer.c | ||
1864 | @@ -3041,6 +3041,13 @@ void guard_bio_eod(int op, struct bio *bio) | ||
1865 | /* Uhhuh. We've got a bio that straddles the device size! */ | ||
1866 | truncated_bytes = bio->bi_iter.bi_size - (maxsector << 9); | ||
1867 | |||
1868 | + /* | ||
1869 | + * The bio contains more than one segment which spans EOD, just return | ||
1870 | + * and let IO layer turn it into an EIO | ||
1871 | + */ | ||
1872 | + if (truncated_bytes > bvec->bv_len) | ||
1873 | + return; | ||
1874 | + | ||
1875 | /* Truncate the bio.. */ | ||
1876 | bio->bi_iter.bi_size -= truncated_bytes; | ||
1877 | bvec->bv_len -= truncated_bytes; | ||
1878 | diff --git a/fs/cifs/cifs_dfs_ref.c b/fs/cifs/cifs_dfs_ref.c | ||
1879 | index 9156be545b0f..4660208132a2 100644 | ||
1880 | --- a/fs/cifs/cifs_dfs_ref.c | ||
1881 | +++ b/fs/cifs/cifs_dfs_ref.c | ||
1882 | @@ -271,9 +271,9 @@ static void dump_referral(const struct dfs_info3_param *ref) | ||
1883 | { | ||
1884 | cifs_dbg(FYI, "DFS: ref path: %s\n", ref->path_name); | ||
1885 | cifs_dbg(FYI, "DFS: node path: %s\n", ref->node_name); | ||
1886 | - cifs_dbg(FYI, "DFS: fl: %hd, srv_type: %hd\n", | ||
1887 | + cifs_dbg(FYI, "DFS: fl: %d, srv_type: %d\n", | ||
1888 | ref->flags, ref->server_type); | ||
1889 | - cifs_dbg(FYI, "DFS: ref_flags: %hd, path_consumed: %hd\n", | ||
1890 | + cifs_dbg(FYI, "DFS: ref_flags: %d, path_consumed: %d\n", | ||
1891 | ref->ref_flag, ref->path_consumed); | ||
1892 | } | ||
1893 | |||
1894 | diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c | ||
1895 | index 33e65b71c49a..f291ed0c155d 100644 | ||
1896 | --- a/fs/cifs/connect.c | ||
1897 | +++ b/fs/cifs/connect.c | ||
1898 | @@ -1201,6 +1201,11 @@ cifs_parse_devname(const char *devname, struct smb_vol *vol) | ||
1899 | const char *delims = "/\\"; | ||
1900 | size_t len; | ||
1901 | |||
1902 | + if (unlikely(!devname || !*devname)) { | ||
1903 | + cifs_dbg(VFS, "Device name not specified.\n"); | ||
1904 | + return -EINVAL; | ||
1905 | + } | ||
1906 | + | ||
1907 | /* make sure we have a valid UNC double delimiter prefix */ | ||
1908 | len = strspn(devname, delims); | ||
1909 | if (len != 2) | ||
1910 | diff --git a/fs/cifs/file.c b/fs/cifs/file.c | ||
1911 | index 1c5099fffaec..7d295bf283ca 100644 | ||
1912 | --- a/fs/cifs/file.c | ||
1913 | +++ b/fs/cifs/file.c | ||
1914 | @@ -1627,8 +1627,20 @@ cifs_setlk(struct file *file, struct file_lock *flock, __u32 type, | ||
1915 | rc = server->ops->mand_unlock_range(cfile, flock, xid); | ||
1916 | |||
1917 | out: | ||
1918 | - if (flock->fl_flags & FL_POSIX && !rc) | ||
1919 | + if (flock->fl_flags & FL_POSIX) { | ||
1920 | + /* | ||
1921 | + * If this is a request to remove all locks because we | ||
1922 | + * are closing the file, it doesn't matter if the | ||
1923 | + * unlocking failed as both cifs.ko and the SMB server | ||
1924 | + * remove the lock on file close | ||
1925 | + */ | ||
1926 | + if (rc) { | ||
1927 | + cifs_dbg(VFS, "%s failed rc=%d\n", __func__, rc); | ||
1928 | + if (!(flock->fl_flags & FL_CLOSE)) | ||
1929 | + return rc; | ||
1930 | + } | ||
1931 | rc = locks_lock_file_wait(file, flock); | ||
1932 | + } | ||
1933 | return rc; | ||
1934 | } | ||
1935 | |||
1936 | diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c | ||
1937 | index efd72e1fae74..f7a9adab0b84 100644 | ||
1938 | --- a/fs/cifs/smb1ops.c | ||
1939 | +++ b/fs/cifs/smb1ops.c | ||
1940 | @@ -305,7 +305,7 @@ coalesce_t2(char *second_buf, struct smb_hdr *target_hdr) | ||
1941 | remaining = tgt_total_cnt - total_in_tgt; | ||
1942 | |||
1943 | if (remaining < 0) { | ||
1944 | - cifs_dbg(FYI, "Server sent too much data. tgt_total_cnt=%hu total_in_tgt=%hu\n", | ||
1945 | + cifs_dbg(FYI, "Server sent too much data. tgt_total_cnt=%hu total_in_tgt=%u\n", | ||
1946 | tgt_total_cnt, total_in_tgt); | ||
1947 | return -EPROTO; | ||
1948 | } | ||
1949 | diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c | ||
1950 | index 14007e621d2a..d2844fe9040d 100644 | ||
1951 | --- a/fs/ext4/indirect.c | ||
1952 | +++ b/fs/ext4/indirect.c | ||
1953 | @@ -1217,6 +1217,7 @@ int ext4_ind_remove_space(handle_t *handle, struct inode *inode, | ||
1954 | ext4_lblk_t offsets[4], offsets2[4]; | ||
1955 | Indirect chain[4], chain2[4]; | ||
1956 | Indirect *partial, *partial2; | ||
1957 | + Indirect *p = NULL, *p2 = NULL; | ||
1958 | ext4_lblk_t max_block; | ||
1959 | __le32 nr = 0, nr2 = 0; | ||
1960 | int n = 0, n2 = 0; | ||
1961 | @@ -1258,7 +1259,7 @@ int ext4_ind_remove_space(handle_t *handle, struct inode *inode, | ||
1962 | } | ||
1963 | |||
1964 | |||
1965 | - partial = ext4_find_shared(inode, n, offsets, chain, &nr); | ||
1966 | + partial = p = ext4_find_shared(inode, n, offsets, chain, &nr); | ||
1967 | if (nr) { | ||
1968 | if (partial == chain) { | ||
1969 | /* Shared branch grows from the inode */ | ||
1970 | @@ -1283,13 +1284,11 @@ int ext4_ind_remove_space(handle_t *handle, struct inode *inode, | ||
1971 | partial->p + 1, | ||
1972 | (__le32 *)partial->bh->b_data+addr_per_block, | ||
1973 | (chain+n-1) - partial); | ||
1974 | - BUFFER_TRACE(partial->bh, "call brelse"); | ||
1975 | - brelse(partial->bh); | ||
1976 | partial--; | ||
1977 | } | ||
1978 | |||
1979 | end_range: | ||
1980 | - partial2 = ext4_find_shared(inode, n2, offsets2, chain2, &nr2); | ||
1981 | + partial2 = p2 = ext4_find_shared(inode, n2, offsets2, chain2, &nr2); | ||
1982 | if (nr2) { | ||
1983 | if (partial2 == chain2) { | ||
1984 | /* | ||
1985 | @@ -1319,16 +1318,14 @@ end_range: | ||
1986 | (__le32 *)partial2->bh->b_data, | ||
1987 | partial2->p, | ||
1988 | (chain2+n2-1) - partial2); | ||
1989 | - BUFFER_TRACE(partial2->bh, "call brelse"); | ||
1990 | - brelse(partial2->bh); | ||
1991 | partial2--; | ||
1992 | } | ||
1993 | goto do_indirects; | ||
1994 | } | ||
1995 | |||
1996 | /* Punch happened within the same level (n == n2) */ | ||
1997 | - partial = ext4_find_shared(inode, n, offsets, chain, &nr); | ||
1998 | - partial2 = ext4_find_shared(inode, n2, offsets2, chain2, &nr2); | ||
1999 | + partial = p = ext4_find_shared(inode, n, offsets, chain, &nr); | ||
2000 | + partial2 = p2 = ext4_find_shared(inode, n2, offsets2, chain2, &nr2); | ||
2001 | |||
2002 | /* Free top, but only if partial2 isn't its subtree. */ | ||
2003 | if (nr) { | ||
2004 | @@ -1385,15 +1382,7 @@ end_range: | ||
2005 | partial->p + 1, | ||
2006 | partial2->p, | ||
2007 | (chain+n-1) - partial); | ||
2008 | - while (partial > chain) { | ||
2009 | - BUFFER_TRACE(partial->bh, "call brelse"); | ||
2010 | - brelse(partial->bh); | ||
2011 | - } | ||
2012 | - while (partial2 > chain2) { | ||
2013 | - BUFFER_TRACE(partial2->bh, "call brelse"); | ||
2014 | - brelse(partial2->bh); | ||
2015 | - } | ||
2016 | - return 0; | ||
2017 | + goto cleanup; | ||
2018 | } | ||
2019 | |||
2020 | /* | ||
2021 | @@ -1408,8 +1397,6 @@ end_range: | ||
2022 | partial->p + 1, | ||
2023 | (__le32 *)partial->bh->b_data+addr_per_block, | ||
2024 | (chain+n-1) - partial); | ||
2025 | - BUFFER_TRACE(partial->bh, "call brelse"); | ||
2026 | - brelse(partial->bh); | ||
2027 | partial--; | ||
2028 | } | ||
2029 | if (partial2 > chain2 && depth2 <= depth) { | ||
2030 | @@ -1417,11 +1404,21 @@ end_range: | ||
2031 | (__le32 *)partial2->bh->b_data, | ||
2032 | partial2->p, | ||
2033 | (chain2+n2-1) - partial2); | ||
2034 | - BUFFER_TRACE(partial2->bh, "call brelse"); | ||
2035 | - brelse(partial2->bh); | ||
2036 | partial2--; | ||
2037 | } | ||
2038 | } | ||
2039 | + | ||
2040 | +cleanup: | ||
2041 | + while (p && p > chain) { | ||
2042 | + BUFFER_TRACE(p->bh, "call brelse"); | ||
2043 | + brelse(p->bh); | ||
2044 | + p--; | ||
2045 | + } | ||
2046 | + while (p2 && p2 > chain2) { | ||
2047 | + BUFFER_TRACE(p2->bh, "call brelse"); | ||
2048 | + brelse(p2->bh); | ||
2049 | + p2--; | ||
2050 | + } | ||
2051 | return 0; | ||
2052 | |||
2053 | do_indirects: | ||
2054 | @@ -1429,7 +1426,7 @@ do_indirects: | ||
2055 | switch (offsets[0]) { | ||
2056 | default: | ||
2057 | if (++n >= n2) | ||
2058 | - return 0; | ||
2059 | + break; | ||
2060 | nr = i_data[EXT4_IND_BLOCK]; | ||
2061 | if (nr) { | ||
2062 | ext4_free_branches(handle, inode, NULL, &nr, &nr+1, 1); | ||
2063 | @@ -1437,7 +1434,7 @@ do_indirects: | ||
2064 | } | ||
2065 | case EXT4_IND_BLOCK: | ||
2066 | if (++n >= n2) | ||
2067 | - return 0; | ||
2068 | + break; | ||
2069 | nr = i_data[EXT4_DIND_BLOCK]; | ||
2070 | if (nr) { | ||
2071 | ext4_free_branches(handle, inode, NULL, &nr, &nr+1, 2); | ||
2072 | @@ -1445,7 +1442,7 @@ do_indirects: | ||
2073 | } | ||
2074 | case EXT4_DIND_BLOCK: | ||
2075 | if (++n >= n2) | ||
2076 | - return 0; | ||
2077 | + break; | ||
2078 | nr = i_data[EXT4_TIND_BLOCK]; | ||
2079 | if (nr) { | ||
2080 | ext4_free_branches(handle, inode, NULL, &nr, &nr+1, 3); | ||
2081 | @@ -1454,5 +1451,5 @@ do_indirects: | ||
2082 | case EXT4_TIND_BLOCK: | ||
2083 | ; | ||
2084 | } | ||
2085 | - return 0; | ||
2086 | + goto cleanup; | ||
2087 | } | ||
2088 | diff --git a/fs/f2fs/trace.c b/fs/f2fs/trace.c | ||
2089 | index 73b4e1d1912a..501c283761d2 100644 | ||
2090 | --- a/fs/f2fs/trace.c | ||
2091 | +++ b/fs/f2fs/trace.c | ||
2092 | @@ -61,6 +61,7 @@ void f2fs_trace_pid(struct page *page) | ||
2093 | |||
2094 | page->private = pid; | ||
2095 | |||
2096 | +retry: | ||
2097 | if (radix_tree_preload(GFP_NOFS)) | ||
2098 | return; | ||
2099 | |||
2100 | @@ -71,7 +72,12 @@ void f2fs_trace_pid(struct page *page) | ||
2101 | if (p) | ||
2102 | radix_tree_delete(&pids, pid); | ||
2103 | |||
2104 | - f2fs_radix_tree_insert(&pids, pid, current); | ||
2105 | + if (radix_tree_insert(&pids, pid, current)) { | ||
2106 | + spin_unlock(&pids_lock); | ||
2107 | + radix_tree_preload_end(); | ||
2108 | + cond_resched(); | ||
2109 | + goto retry; | ||
2110 | + } | ||
2111 | |||
2112 | trace_printk("%3x:%3x %4x %-16s\n", | ||
2113 | MAJOR(inode->i_sb->s_dev), MINOR(inode->i_sb->s_dev), | ||
2114 | diff --git a/fs/file.c b/fs/file.c | ||
2115 | index 69d6990e3021..09aac4d4729b 100644 | ||
2116 | --- a/fs/file.c | ||
2117 | +++ b/fs/file.c | ||
2118 | @@ -475,6 +475,7 @@ struct files_struct init_files = { | ||
2119 | .full_fds_bits = init_files.full_fds_bits_init, | ||
2120 | }, | ||
2121 | .file_lock = __SPIN_LOCK_UNLOCKED(init_files.file_lock), | ||
2122 | + .resize_wait = __WAIT_QUEUE_HEAD_INITIALIZER(init_files.resize_wait), | ||
2123 | }; | ||
2124 | |||
2125 | static unsigned int find_next_fd(struct fdtable *fdt, unsigned int start) | ||
2126 | diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c | ||
2127 | index 31f8ca046639..10ec27676191 100644 | ||
2128 | --- a/fs/jbd2/commit.c | ||
2129 | +++ b/fs/jbd2/commit.c | ||
2130 | @@ -700,9 +700,11 @@ void jbd2_journal_commit_transaction(journal_t *journal) | ||
2131 | the last tag we set up. */ | ||
2132 | |||
2133 | tag->t_flags |= cpu_to_be16(JBD2_FLAG_LAST_TAG); | ||
2134 | - | ||
2135 | - jbd2_descriptor_block_csum_set(journal, descriptor); | ||
2136 | start_journal_io: | ||
2137 | + if (descriptor) | ||
2138 | + jbd2_descriptor_block_csum_set(journal, | ||
2139 | + descriptor); | ||
2140 | + | ||
2141 | for (i = 0; i < bufs; i++) { | ||
2142 | struct buffer_head *bh = wbuf[i]; | ||
2143 | /* | ||
2144 | diff --git a/fs/ocfs2/cluster/nodemanager.c b/fs/ocfs2/cluster/nodemanager.c | ||
2145 | index c204ac9b49e5..81a0d5d82757 100644 | ||
2146 | --- a/fs/ocfs2/cluster/nodemanager.c | ||
2147 | +++ b/fs/ocfs2/cluster/nodemanager.c | ||
2148 | @@ -621,13 +621,15 @@ static void o2nm_node_group_drop_item(struct config_group *group, | ||
2149 | struct o2nm_node *node = to_o2nm_node(item); | ||
2150 | struct o2nm_cluster *cluster = to_o2nm_cluster(group->cg_item.ci_parent); | ||
2151 | |||
2152 | - o2net_disconnect_node(node); | ||
2153 | + if (cluster->cl_nodes[node->nd_num] == node) { | ||
2154 | + o2net_disconnect_node(node); | ||
2155 | |||
2156 | - if (cluster->cl_has_local && | ||
2157 | - (cluster->cl_local_node == node->nd_num)) { | ||
2158 | - cluster->cl_has_local = 0; | ||
2159 | - cluster->cl_local_node = O2NM_INVALID_NODE_NUM; | ||
2160 | - o2net_stop_listening(node); | ||
2161 | + if (cluster->cl_has_local && | ||
2162 | + (cluster->cl_local_node == node->nd_num)) { | ||
2163 | + cluster->cl_has_local = 0; | ||
2164 | + cluster->cl_local_node = O2NM_INVALID_NODE_NUM; | ||
2165 | + o2net_stop_listening(node); | ||
2166 | + } | ||
2167 | } | ||
2168 | |||
2169 | /* XXX call into net to stop this node from trading messages */ | ||
2170 | diff --git a/fs/read_write.c b/fs/read_write.c | ||
2171 | index 9819f7c6c8c5..6ab67b860159 100644 | ||
2172 | --- a/fs/read_write.c | ||
2173 | +++ b/fs/read_write.c | ||
2174 | @@ -1204,6 +1204,9 @@ COMPAT_SYSCALL_DEFINE5(preadv64v2, unsigned long, fd, | ||
2175 | const struct compat_iovec __user *,vec, | ||
2176 | unsigned long, vlen, loff_t, pos, int, flags) | ||
2177 | { | ||
2178 | + if (pos == -1) | ||
2179 | + return do_compat_readv(fd, vec, vlen, flags); | ||
2180 | + | ||
2181 | return do_compat_preadv64(fd, vec, vlen, pos, flags); | ||
2182 | } | ||
2183 | #endif | ||
2184 | @@ -1310,6 +1313,9 @@ COMPAT_SYSCALL_DEFINE5(pwritev64v2, unsigned long, fd, | ||
2185 | const struct compat_iovec __user *,vec, | ||
2186 | unsigned long, vlen, loff_t, pos, int, flags) | ||
2187 | { | ||
2188 | + if (pos == -1) | ||
2189 | + return do_compat_writev(fd, vec, vlen, flags); | ||
2190 | + | ||
2191 | return do_compat_pwritev64(fd, vec, vlen, pos, flags); | ||
2192 | } | ||
2193 | #endif | ||
2194 | diff --git a/include/linux/irqdesc.h b/include/linux/irqdesc.h | ||
2195 | index c9be57931b58..bb5547a83daf 100644 | ||
2196 | --- a/include/linux/irqdesc.h | ||
2197 | +++ b/include/linux/irqdesc.h | ||
2198 | @@ -61,6 +61,7 @@ struct irq_desc { | ||
2199 | unsigned int core_internal_state__do_not_mess_with_it; | ||
2200 | unsigned int depth; /* nested irq disables */ | ||
2201 | unsigned int wake_depth; /* nested wake enables */ | ||
2202 | + unsigned int tot_count; | ||
2203 | unsigned int irq_count; /* For detecting broken IRQs */ | ||
2204 | unsigned long last_unhandled; /* Aging timer for unhandled count */ | ||
2205 | unsigned int irqs_unhandled; | ||
2206 | diff --git a/include/linux/relay.h b/include/linux/relay.h | ||
2207 | index 68c1448e56bb..2560f8706408 100644 | ||
2208 | --- a/include/linux/relay.h | ||
2209 | +++ b/include/linux/relay.h | ||
2210 | @@ -65,7 +65,7 @@ struct rchan | ||
2211 | struct kref kref; /* channel refcount */ | ||
2212 | void *private_data; /* for user-defined data */ | ||
2213 | size_t last_toobig; /* tried to log event > subbuf size */ | ||
2214 | - struct rchan_buf ** __percpu buf; /* per-cpu channel buffers */ | ||
2215 | + struct rchan_buf * __percpu *buf; /* per-cpu channel buffers */ | ||
2216 | int is_global; /* One global buffer ? */ | ||
2217 | struct list_head list; /* for channel list */ | ||
2218 | struct dentry *parent; /* parent dentry passed to open */ | ||
2219 | diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h | ||
2220 | index 19d0778ec382..121c8f99ecdd 100644 | ||
2221 | --- a/include/linux/ring_buffer.h | ||
2222 | +++ b/include/linux/ring_buffer.h | ||
2223 | @@ -125,7 +125,7 @@ ring_buffer_consume(struct ring_buffer *buffer, int cpu, u64 *ts, | ||
2224 | unsigned long *lost_events); | ||
2225 | |||
2226 | struct ring_buffer_iter * | ||
2227 | -ring_buffer_read_prepare(struct ring_buffer *buffer, int cpu); | ||
2228 | +ring_buffer_read_prepare(struct ring_buffer *buffer, int cpu, gfp_t flags); | ||
2229 | void ring_buffer_read_prepare_sync(void); | ||
2230 | void ring_buffer_read_start(struct ring_buffer_iter *iter); | ||
2231 | void ring_buffer_read_finish(struct ring_buffer_iter *iter); | ||
2232 | diff --git a/include/net/netfilter/br_netfilter.h b/include/net/netfilter/br_netfilter.h | ||
2233 | index 0b0c35c37125..238d1b83a45a 100644 | ||
2234 | --- a/include/net/netfilter/br_netfilter.h | ||
2235 | +++ b/include/net/netfilter/br_netfilter.h | ||
2236 | @@ -48,7 +48,6 @@ static inline struct rtable *bridge_parent_rtable(const struct net_device *dev) | ||
2237 | } | ||
2238 | |||
2239 | struct net_device *setup_pre_routing(struct sk_buff *skb); | ||
2240 | -void br_netfilter_enable(void); | ||
2241 | |||
2242 | #if IS_ENABLED(CONFIG_IPV6) | ||
2243 | int br_validate_ipv6(struct net *net, struct sk_buff *skb); | ||
2244 | diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c | ||
2245 | index f30110e1b8c9..9e745cc0726d 100644 | ||
2246 | --- a/kernel/irq/chip.c | ||
2247 | +++ b/kernel/irq/chip.c | ||
2248 | @@ -729,7 +729,11 @@ void handle_percpu_irq(struct irq_desc *desc) | ||
2249 | { | ||
2250 | struct irq_chip *chip = irq_desc_get_chip(desc); | ||
2251 | |||
2252 | - kstat_incr_irqs_this_cpu(desc); | ||
2253 | + /* | ||
2254 | + * PER CPU interrupts are not serialized. Do not touch | ||
2255 | + * desc->tot_count. | ||
2256 | + */ | ||
2257 | + __kstat_incr_irqs_this_cpu(desc); | ||
2258 | |||
2259 | if (chip->irq_ack) | ||
2260 | chip->irq_ack(&desc->irq_data); | ||
2261 | @@ -758,7 +762,11 @@ void handle_percpu_devid_irq(struct irq_desc *desc) | ||
2262 | unsigned int irq = irq_desc_get_irq(desc); | ||
2263 | irqreturn_t res; | ||
2264 | |||
2265 | - kstat_incr_irqs_this_cpu(desc); | ||
2266 | + /* | ||
2267 | + * PER CPU interrupts are not serialized. Do not touch | ||
2268 | + * desc->tot_count. | ||
2269 | + */ | ||
2270 | + __kstat_incr_irqs_this_cpu(desc); | ||
2271 | |||
2272 | if (chip->irq_ack) | ||
2273 | chip->irq_ack(&desc->irq_data); | ||
2274 | diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h | ||
2275 | index bc226e783bd2..22e3f29a30d8 100644 | ||
2276 | --- a/kernel/irq/internals.h | ||
2277 | +++ b/kernel/irq/internals.h | ||
2278 | @@ -199,12 +199,18 @@ static inline bool irqd_has_set(struct irq_data *d, unsigned int mask) | ||
2279 | |||
2280 | #undef __irqd_to_state | ||
2281 | |||
2282 | -static inline void kstat_incr_irqs_this_cpu(struct irq_desc *desc) | ||
2283 | +static inline void __kstat_incr_irqs_this_cpu(struct irq_desc *desc) | ||
2284 | { | ||
2285 | __this_cpu_inc(*desc->kstat_irqs); | ||
2286 | __this_cpu_inc(kstat.irqs_sum); | ||
2287 | } | ||
2288 | |||
2289 | +static inline void kstat_incr_irqs_this_cpu(struct irq_desc *desc) | ||
2290 | +{ | ||
2291 | + __kstat_incr_irqs_this_cpu(desc); | ||
2292 | + desc->tot_count++; | ||
2293 | +} | ||
2294 | + | ||
2295 | static inline int irq_desc_get_node(struct irq_desc *desc) | ||
2296 | { | ||
2297 | return irq_common_data_get_node(&desc->irq_common_data); | ||
2298 | diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c | ||
2299 | index 77977f55dff7..5e0ea17d01a6 100644 | ||
2300 | --- a/kernel/irq/irqdesc.c | ||
2301 | +++ b/kernel/irq/irqdesc.c | ||
2302 | @@ -109,6 +109,7 @@ static void desc_set_defaults(unsigned int irq, struct irq_desc *desc, int node, | ||
2303 | desc->depth = 1; | ||
2304 | desc->irq_count = 0; | ||
2305 | desc->irqs_unhandled = 0; | ||
2306 | + desc->tot_count = 0; | ||
2307 | desc->name = NULL; | ||
2308 | desc->owner = owner; | ||
2309 | for_each_possible_cpu(cpu) | ||
2310 | @@ -880,11 +881,15 @@ unsigned int kstat_irqs_cpu(unsigned int irq, int cpu) | ||
2311 | unsigned int kstat_irqs(unsigned int irq) | ||
2312 | { | ||
2313 | struct irq_desc *desc = irq_to_desc(irq); | ||
2314 | - int cpu; | ||
2315 | unsigned int sum = 0; | ||
2316 | + int cpu; | ||
2317 | |||
2318 | if (!desc || !desc->kstat_irqs) | ||
2319 | return 0; | ||
2320 | + if (!irq_settings_is_per_cpu_devid(desc) && | ||
2321 | + !irq_settings_is_per_cpu(desc)) | ||
2322 | + return desc->tot_count; | ||
2323 | + | ||
2324 | for_each_possible_cpu(cpu) | ||
2325 | sum += *per_cpu_ptr(desc->kstat_irqs, cpu); | ||
2326 | return sum; | ||
2327 | diff --git a/kernel/sysctl.c b/kernel/sysctl.c | ||
2328 | index efd340a510a9..5515d578095b 100644 | ||
2329 | --- a/kernel/sysctl.c | ||
2330 | +++ b/kernel/sysctl.c | ||
2331 | @@ -125,6 +125,7 @@ static int __maybe_unused one = 1; | ||
2332 | static int __maybe_unused two = 2; | ||
2333 | static int __maybe_unused four = 4; | ||
2334 | static unsigned long one_ul = 1; | ||
2335 | +static unsigned long long_max = LONG_MAX; | ||
2336 | static int one_hundred = 100; | ||
2337 | static int one_thousand = 1000; | ||
2338 | #ifdef CONFIG_PRINTK | ||
2339 | @@ -1682,6 +1683,8 @@ static struct ctl_table fs_table[] = { | ||
2340 | .maxlen = sizeof(files_stat.max_files), | ||
2341 | .mode = 0644, | ||
2342 | .proc_handler = proc_doulongvec_minmax, | ||
2343 | + .extra1 = &zero, | ||
2344 | + .extra2 = &long_max, | ||
2345 | }, | ||
2346 | { | ||
2347 | .procname = "nr_open", | ||
2348 | diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c | ||
2349 | index f316e90ad538..5473dcaaca8d 100644 | ||
2350 | --- a/kernel/trace/ring_buffer.c | ||
2351 | +++ b/kernel/trace/ring_buffer.c | ||
2352 | @@ -4037,6 +4037,7 @@ EXPORT_SYMBOL_GPL(ring_buffer_consume); | ||
2353 | * ring_buffer_read_prepare - Prepare for a non consuming read of the buffer | ||
2354 | * @buffer: The ring buffer to read from | ||
2355 | * @cpu: The cpu buffer to iterate over | ||
2356 | + * @flags: gfp flags to use for memory allocation | ||
2357 | * | ||
2358 | * This performs the initial preparations necessary to iterate | ||
2359 | * through the buffer. Memory is allocated, buffer recording | ||
2360 | @@ -4054,7 +4055,7 @@ EXPORT_SYMBOL_GPL(ring_buffer_consume); | ||
2361 | * This overall must be paired with ring_buffer_read_finish. | ||
2362 | */ | ||
2363 | struct ring_buffer_iter * | ||
2364 | -ring_buffer_read_prepare(struct ring_buffer *buffer, int cpu) | ||
2365 | +ring_buffer_read_prepare(struct ring_buffer *buffer, int cpu, gfp_t flags) | ||
2366 | { | ||
2367 | struct ring_buffer_per_cpu *cpu_buffer; | ||
2368 | struct ring_buffer_iter *iter; | ||
2369 | @@ -4062,7 +4063,7 @@ ring_buffer_read_prepare(struct ring_buffer *buffer, int cpu) | ||
2370 | if (!cpumask_test_cpu(cpu, buffer->cpumask)) | ||
2371 | return NULL; | ||
2372 | |||
2373 | - iter = kmalloc(sizeof(*iter), GFP_KERNEL); | ||
2374 | + iter = kmalloc(sizeof(*iter), flags); | ||
2375 | if (!iter) | ||
2376 | return NULL; | ||
2377 | |||
2378 | diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c | ||
2379 | index f18dedf9195e..d4773939c054 100644 | ||
2380 | --- a/kernel/trace/trace.c | ||
2381 | +++ b/kernel/trace/trace.c | ||
2382 | @@ -3449,7 +3449,8 @@ __tracing_open(struct inode *inode, struct file *file, bool snapshot) | ||
2383 | if (iter->cpu_file == RING_BUFFER_ALL_CPUS) { | ||
2384 | for_each_tracing_cpu(cpu) { | ||
2385 | iter->buffer_iter[cpu] = | ||
2386 | - ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu); | ||
2387 | + ring_buffer_read_prepare(iter->trace_buffer->buffer, | ||
2388 | + cpu, GFP_KERNEL); | ||
2389 | } | ||
2390 | ring_buffer_read_prepare_sync(); | ||
2391 | for_each_tracing_cpu(cpu) { | ||
2392 | @@ -3459,7 +3460,8 @@ __tracing_open(struct inode *inode, struct file *file, bool snapshot) | ||
2393 | } else { | ||
2394 | cpu = iter->cpu_file; | ||
2395 | iter->buffer_iter[cpu] = | ||
2396 | - ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu); | ||
2397 | + ring_buffer_read_prepare(iter->trace_buffer->buffer, | ||
2398 | + cpu, GFP_KERNEL); | ||
2399 | ring_buffer_read_prepare_sync(); | ||
2400 | ring_buffer_read_start(iter->buffer_iter[cpu]); | ||
2401 | tracing_iter_reset(iter, cpu); | ||
2402 | diff --git a/kernel/trace/trace_kdb.c b/kernel/trace/trace_kdb.c | ||
2403 | index 57149bce6aad..896458285fdd 100644 | ||
2404 | --- a/kernel/trace/trace_kdb.c | ||
2405 | +++ b/kernel/trace/trace_kdb.c | ||
2406 | @@ -50,14 +50,16 @@ static void ftrace_dump_buf(int skip_lines, long cpu_file) | ||
2407 | if (cpu_file == RING_BUFFER_ALL_CPUS) { | ||
2408 | for_each_tracing_cpu(cpu) { | ||
2409 | iter.buffer_iter[cpu] = | ||
2410 | - ring_buffer_read_prepare(iter.trace_buffer->buffer, cpu); | ||
2411 | + ring_buffer_read_prepare(iter.trace_buffer->buffer, | ||
2412 | + cpu, GFP_ATOMIC); | ||
2413 | ring_buffer_read_start(iter.buffer_iter[cpu]); | ||
2414 | tracing_iter_reset(&iter, cpu); | ||
2415 | } | ||
2416 | } else { | ||
2417 | iter.cpu_file = cpu_file; | ||
2418 | iter.buffer_iter[cpu_file] = | ||
2419 | - ring_buffer_read_prepare(iter.trace_buffer->buffer, cpu_file); | ||
2420 | + ring_buffer_read_prepare(iter.trace_buffer->buffer, | ||
2421 | + cpu_file, GFP_ATOMIC); | ||
2422 | ring_buffer_read_start(iter.buffer_iter[cpu_file]); | ||
2423 | tracing_iter_reset(&iter, cpu_file); | ||
2424 | } | ||
2425 | diff --git a/lib/bsearch.c b/lib/bsearch.c | ||
2426 | index e33c179089db..d50048446b77 100644 | ||
2427 | --- a/lib/bsearch.c | ||
2428 | +++ b/lib/bsearch.c | ||
2429 | @@ -11,6 +11,7 @@ | ||
2430 | |||
2431 | #include <linux/export.h> | ||
2432 | #include <linux/bsearch.h> | ||
2433 | +#include <linux/kprobes.h> | ||
2434 | |||
2435 | /* | ||
2436 | * bsearch - binary search an array of elements | ||
2437 | @@ -51,3 +52,4 @@ void *bsearch(const void *key, const void *base, size_t num, size_t size, | ||
2438 | return NULL; | ||
2439 | } | ||
2440 | EXPORT_SYMBOL(bsearch); | ||
2441 | +NOKPROBE_SYMBOL(bsearch); | ||
2442 | diff --git a/lib/int_sqrt.c b/lib/int_sqrt.c | ||
2443 | index 1afb545a37c5..6d35274170bc 100644 | ||
2444 | --- a/lib/int_sqrt.c | ||
2445 | +++ b/lib/int_sqrt.c | ||
2446 | @@ -7,6 +7,7 @@ | ||
2447 | |||
2448 | #include <linux/kernel.h> | ||
2449 | #include <linux/export.h> | ||
2450 | +#include <linux/bitops.h> | ||
2451 | |||
2452 | /** | ||
2453 | * int_sqrt - rough approximation to sqrt | ||
2454 | @@ -21,10 +22,7 @@ unsigned long int_sqrt(unsigned long x) | ||
2455 | if (x <= 1) | ||
2456 | return x; | ||
2457 | |||
2458 | - m = 1UL << (BITS_PER_LONG - 2); | ||
2459 | - while (m > x) | ||
2460 | - m >>= 2; | ||
2461 | - | ||
2462 | + m = 1UL << (__fls(x) & ~1UL); | ||
2463 | while (m != 0) { | ||
2464 | b = y + m; | ||
2465 | y >>= 1; | ||
2466 | diff --git a/lib/raid6/Makefile b/lib/raid6/Makefile | ||
2467 | index 3057011f5599..10ca69475611 100644 | ||
2468 | --- a/lib/raid6/Makefile | ||
2469 | +++ b/lib/raid6/Makefile | ||
2470 | @@ -24,7 +24,7 @@ endif | ||
2471 | ifeq ($(CONFIG_KERNEL_MODE_NEON),y) | ||
2472 | NEON_FLAGS := -ffreestanding | ||
2473 | ifeq ($(ARCH),arm) | ||
2474 | -NEON_FLAGS += -mfloat-abi=softfp -mfpu=neon | ||
2475 | +NEON_FLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=neon | ||
2476 | endif | ||
2477 | ifeq ($(ARCH),arm64) | ||
2478 | CFLAGS_REMOVE_neon1.o += -mgeneral-regs-only | ||
2479 | diff --git a/mm/cma.c b/mm/cma.c | ||
2480 | index 397687fc51f9..b5d8847497a3 100644 | ||
2481 | --- a/mm/cma.c | ||
2482 | +++ b/mm/cma.c | ||
2483 | @@ -339,12 +339,14 @@ int __init cma_declare_contiguous(phys_addr_t base, | ||
2484 | |||
2485 | ret = cma_init_reserved_mem(base, size, order_per_bit, res_cma); | ||
2486 | if (ret) | ||
2487 | - goto err; | ||
2488 | + goto free_mem; | ||
2489 | |||
2490 | pr_info("Reserved %ld MiB at %pa\n", (unsigned long)size / SZ_1M, | ||
2491 | &base); | ||
2492 | return 0; | ||
2493 | |||
2494 | +free_mem: | ||
2495 | + memblock_free(base, size); | ||
2496 | err: | ||
2497 | pr_err("Failed to reserve %ld MiB\n", (unsigned long)size / SZ_1M); | ||
2498 | return ret; | ||
2499 | diff --git a/mm/mempolicy.c b/mm/mempolicy.c | ||
2500 | index 593b74bed59b..5cb5147235df 100644 | ||
2501 | --- a/mm/mempolicy.c | ||
2502 | +++ b/mm/mempolicy.c | ||
2503 | @@ -547,11 +547,16 @@ retry: | ||
2504 | goto retry; | ||
2505 | } | ||
2506 | |||
2507 | - migrate_page_add(page, qp->pagelist, flags); | ||
2508 | + if (flags & (MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)) { | ||
2509 | + if (!vma_migratable(vma)) | ||
2510 | + break; | ||
2511 | + migrate_page_add(page, qp->pagelist, flags); | ||
2512 | + } else | ||
2513 | + break; | ||
2514 | } | ||
2515 | pte_unmap_unlock(pte - 1, ptl); | ||
2516 | cond_resched(); | ||
2517 | - return 0; | ||
2518 | + return addr != end ? -EIO : 0; | ||
2519 | } | ||
2520 | |||
2521 | static int queue_pages_hugetlb(pte_t *pte, unsigned long hmask, | ||
2522 | @@ -623,7 +628,12 @@ static int queue_pages_test_walk(unsigned long start, unsigned long end, | ||
2523 | unsigned long endvma = vma->vm_end; | ||
2524 | unsigned long flags = qp->flags; | ||
2525 | |||
2526 | - if (!vma_migratable(vma)) | ||
2527 | + /* | ||
2528 | + * Need check MPOL_MF_STRICT to return -EIO if possible | ||
2529 | + * regardless of vma_migratable | ||
2530 | + */ | ||
2531 | + if (!vma_migratable(vma) && | ||
2532 | + !(flags & MPOL_MF_STRICT)) | ||
2533 | return 1; | ||
2534 | |||
2535 | if (endvma > end) | ||
2536 | @@ -650,7 +660,7 @@ static int queue_pages_test_walk(unsigned long start, unsigned long end, | ||
2537 | } | ||
2538 | |||
2539 | /* queue pages from current vma */ | ||
2540 | - if (flags & (MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)) | ||
2541 | + if (flags & MPOL_MF_VALID) | ||
2542 | return 0; | ||
2543 | return 1; | ||
2544 | } | ||
2545 | diff --git a/mm/page_ext.c b/mm/page_ext.c | ||
2546 | index 121dcffc4ec1..a7be1c7a79f6 100644 | ||
2547 | --- a/mm/page_ext.c | ||
2548 | +++ b/mm/page_ext.c | ||
2549 | @@ -286,6 +286,7 @@ static void free_page_ext(void *addr) | ||
2550 | table_size = get_entry_size() * PAGES_PER_SECTION; | ||
2551 | |||
2552 | BUG_ON(PageReserved(page)); | ||
2553 | + kmemleak_free(addr); | ||
2554 | free_pages_exact(addr, table_size); | ||
2555 | } | ||
2556 | } | ||
2557 | diff --git a/mm/slab.c b/mm/slab.c | ||
2558 | index 354a09deecff..d2c0499c6b15 100644 | ||
2559 | --- a/mm/slab.c | ||
2560 | +++ b/mm/slab.c | ||
2561 | @@ -566,14 +566,6 @@ static void start_cpu_timer(int cpu) | ||
2562 | |||
2563 | static void init_arraycache(struct array_cache *ac, int limit, int batch) | ||
2564 | { | ||
2565 | - /* | ||
2566 | - * The array_cache structures contain pointers to free object. | ||
2567 | - * However, when such objects are allocated or transferred to another | ||
2568 | - * cache the pointers are not cleared and they could be counted as | ||
2569 | - * valid references during a kmemleak scan. Therefore, kmemleak must | ||
2570 | - * not scan such objects. | ||
2571 | - */ | ||
2572 | - kmemleak_no_scan(ac); | ||
2573 | if (ac) { | ||
2574 | ac->avail = 0; | ||
2575 | ac->limit = limit; | ||
2576 | @@ -589,6 +581,14 @@ static struct array_cache *alloc_arraycache(int node, int entries, | ||
2577 | struct array_cache *ac = NULL; | ||
2578 | |||
2579 | ac = kmalloc_node(memsize, gfp, node); | ||
2580 | + /* | ||
2581 | + * The array_cache structures contain pointers to free object. | ||
2582 | + * However, when such objects are allocated or transferred to another | ||
2583 | + * cache the pointers are not cleared and they could be counted as | ||
2584 | + * valid references during a kmemleak scan. Therefore, kmemleak must | ||
2585 | + * not scan such objects. | ||
2586 | + */ | ||
2587 | + kmemleak_no_scan(ac); | ||
2588 | init_arraycache(ac, entries, batchcount); | ||
2589 | return ac; | ||
2590 | } | ||
2591 | @@ -683,6 +683,7 @@ static struct alien_cache *__alloc_alien_cache(int node, int entries, | ||
2592 | |||
2593 | alc = kmalloc_node(memsize, gfp, node); | ||
2594 | if (alc) { | ||
2595 | + kmemleak_no_scan(alc); | ||
2596 | init_arraycache(&alc->ac, entries, batch); | ||
2597 | spin_lock_init(&alc->lock); | ||
2598 | } | ||
2599 | diff --git a/mm/vmalloc.c b/mm/vmalloc.c | ||
2600 | index e6aa073f01df..73afe460caf0 100644 | ||
2601 | --- a/mm/vmalloc.c | ||
2602 | +++ b/mm/vmalloc.c | ||
2603 | @@ -459,7 +459,11 @@ nocache: | ||
2604 | } | ||
2605 | |||
2606 | found: | ||
2607 | - if (addr + size > vend) | ||
2608 | + /* | ||
2609 | + * Check also calculated address against the vstart, | ||
2610 | + * because it can be 0 because of big align request. | ||
2611 | + */ | ||
2612 | + if (addr + size > vend || addr < vstart) | ||
2613 | goto overflow; | ||
2614 | |||
2615 | va->va_start = addr; | ||
2616 | diff --git a/net/bridge/br_netfilter_hooks.c b/net/bridge/br_netfilter_hooks.c | ||
2617 | index 7e42c0d1f55b..38865deab3ac 100644 | ||
2618 | --- a/net/bridge/br_netfilter_hooks.c | ||
2619 | +++ b/net/bridge/br_netfilter_hooks.c | ||
2620 | @@ -878,11 +878,6 @@ static const struct nf_br_ops br_ops = { | ||
2621 | .br_dev_xmit_hook = br_nf_dev_xmit, | ||
2622 | }; | ||
2623 | |||
2624 | -void br_netfilter_enable(void) | ||
2625 | -{ | ||
2626 | -} | ||
2627 | -EXPORT_SYMBOL_GPL(br_netfilter_enable); | ||
2628 | - | ||
2629 | /* For br_nf_post_routing, we need (prio = NF_BR_PRI_LAST), because | ||
2630 | * br_dev_queue_push_xmit is called afterwards */ | ||
2631 | static struct nf_hook_ops br_nf_ops[] __read_mostly = { | ||
2632 | diff --git a/net/netfilter/xt_physdev.c b/net/netfilter/xt_physdev.c | ||
2633 | index bb33598e4530..ec247d8370e8 100644 | ||
2634 | --- a/net/netfilter/xt_physdev.c | ||
2635 | +++ b/net/netfilter/xt_physdev.c | ||
2636 | @@ -96,8 +96,7 @@ match_outdev: | ||
2637 | static int physdev_mt_check(const struct xt_mtchk_param *par) | ||
2638 | { | ||
2639 | const struct xt_physdev_info *info = par->matchinfo; | ||
2640 | - | ||
2641 | - br_netfilter_enable(); | ||
2642 | + static bool brnf_probed __read_mostly; | ||
2643 | |||
2644 | if (!(info->bitmask & XT_PHYSDEV_OP_MASK) || | ||
2645 | info->bitmask & ~XT_PHYSDEV_OP_MASK) | ||
2646 | @@ -113,6 +112,12 @@ static int physdev_mt_check(const struct xt_mtchk_param *par) | ||
2647 | if (par->hook_mask & (1 << NF_INET_LOCAL_OUT)) | ||
2648 | return -EINVAL; | ||
2649 | } | ||
2650 | + | ||
2651 | + if (!brnf_probed) { | ||
2652 | + brnf_probed = true; | ||
2653 | + request_module("br_netfilter"); | ||
2654 | + } | ||
2655 | + | ||
2656 | return 0; | ||
2657 | } | ||
2658 | |||
2659 | diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c | ||
2660 | index d293b546a2aa..9bd6f97ccd21 100644 | ||
2661 | --- a/security/selinux/hooks.c | ||
2662 | +++ b/security/selinux/hooks.c | ||
2663 | @@ -3265,12 +3265,16 @@ static int selinux_inode_setsecurity(struct inode *inode, const char *name, | ||
2664 | const void *value, size_t size, int flags) | ||
2665 | { | ||
2666 | struct inode_security_struct *isec = inode_security_novalidate(inode); | ||
2667 | + struct superblock_security_struct *sbsec = inode->i_sb->s_security; | ||
2668 | u32 newsid; | ||
2669 | int rc; | ||
2670 | |||
2671 | if (strcmp(name, XATTR_SELINUX_SUFFIX)) | ||
2672 | return -EOPNOTSUPP; | ||
2673 | |||
2674 | + if (!(sbsec->flags & SBLABEL_MNT)) | ||
2675 | + return -EOPNOTSUPP; | ||
2676 | + | ||
2677 | if (!value || !size) | ||
2678 | return -EACCES; | ||
2679 | |||
2680 | @@ -5984,7 +5988,10 @@ static void selinux_inode_invalidate_secctx(struct inode *inode) | ||
2681 | */ | ||
2682 | static int selinux_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen) | ||
2683 | { | ||
2684 | - return selinux_inode_setsecurity(inode, XATTR_SELINUX_SUFFIX, ctx, ctxlen, 0); | ||
2685 | + int rc = selinux_inode_setsecurity(inode, XATTR_SELINUX_SUFFIX, | ||
2686 | + ctx, ctxlen, 0); | ||
2687 | + /* Do not return error when suppressing label (SBLABEL_MNT not set). */ | ||
2688 | + return rc == -EOPNOTSUPP ? 0 : rc; | ||
2689 | } | ||
2690 | |||
2691 | /* | ||
2692 | diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c | ||
2693 | index e1138e70dbb3..f5eb10f8021c 100644 | ||
2694 | --- a/sound/core/pcm_native.c | ||
2695 | +++ b/sound/core/pcm_native.c | ||
2696 | @@ -1346,6 +1346,14 @@ int snd_pcm_suspend_all(struct snd_pcm *pcm) | ||
2697 | /* FIXME: the open/close code should lock this as well */ | ||
2698 | if (substream->runtime == NULL) | ||
2699 | continue; | ||
2700 | + | ||
2701 | + /* | ||
2702 | + * Skip BE dai link PCM's that are internal and may | ||
2703 | + * not have their substream ops set. | ||
2704 | + */ | ||
2705 | + if (!substream->ops) | ||
2706 | + continue; | ||
2707 | + | ||
2708 | err = snd_pcm_suspend(substream); | ||
2709 | if (err < 0 && err != -EBUSY) | ||
2710 | return err; | ||
2711 | diff --git a/sound/soc/fsl/fsl-asoc-card.c b/sound/soc/fsl/fsl-asoc-card.c | ||
2712 | index dffd549a0e2a..705d2524ec31 100644 | ||
2713 | --- a/sound/soc/fsl/fsl-asoc-card.c | ||
2714 | +++ b/sound/soc/fsl/fsl-asoc-card.c | ||
2715 | @@ -689,6 +689,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) | ||
2716 | asrc_fail: | ||
2717 | of_node_put(asrc_np); | ||
2718 | of_node_put(codec_np); | ||
2719 | + put_device(&cpu_pdev->dev); | ||
2720 | fail: | ||
2721 | of_node_put(cpu_np); | ||
2722 | |||
2723 | diff --git a/sound/soc/fsl/imx-sgtl5000.c b/sound/soc/fsl/imx-sgtl5000.c | ||
2724 | index b99e0b5e00e9..8e525f7ac08d 100644 | ||
2725 | --- a/sound/soc/fsl/imx-sgtl5000.c | ||
2726 | +++ b/sound/soc/fsl/imx-sgtl5000.c | ||
2727 | @@ -115,6 +115,7 @@ static int imx_sgtl5000_probe(struct platform_device *pdev) | ||
2728 | ret = -EPROBE_DEFER; | ||
2729 | goto fail; | ||
2730 | } | ||
2731 | + put_device(&ssi_pdev->dev); | ||
2732 | codec_dev = of_find_i2c_device_by_node(codec_np); | ||
2733 | if (!codec_dev) { | ||
2734 | dev_err(&pdev->dev, "failed to find codec platform device\n"); | ||
2735 | diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c | ||
2736 | index 669475300ba8..700c74b0aed0 100644 | ||
2737 | --- a/tools/lib/traceevent/event-parse.c | ||
2738 | +++ b/tools/lib/traceevent/event-parse.c | ||
2739 | @@ -2428,7 +2428,7 @@ static int arg_num_eval(struct print_arg *arg, long long *val) | ||
2740 | static char *arg_eval (struct print_arg *arg) | ||
2741 | { | ||
2742 | long long val; | ||
2743 | - static char buf[20]; | ||
2744 | + static char buf[24]; | ||
2745 | |||
2746 | switch (arg->type) { | ||
2747 | case PRINT_ATOM: | ||
2748 | diff --git a/tools/perf/tests/evsel-tp-sched.c b/tools/perf/tests/evsel-tp-sched.c | ||
2749 | index 66b53f10eb18..ea772d41e472 100644 | ||
2750 | --- a/tools/perf/tests/evsel-tp-sched.c | ||
2751 | +++ b/tools/perf/tests/evsel-tp-sched.c | ||
2752 | @@ -42,7 +42,7 @@ int test__perf_evsel__tp_sched_test(int subtest __maybe_unused) | ||
2753 | return -1; | ||
2754 | } | ||
2755 | |||
2756 | - if (perf_evsel__test_field(evsel, "prev_comm", 16, true)) | ||
2757 | + if (perf_evsel__test_field(evsel, "prev_comm", 16, false)) | ||
2758 | ret = -1; | ||
2759 | |||
2760 | if (perf_evsel__test_field(evsel, "prev_pid", 4, true)) | ||
2761 | @@ -54,7 +54,7 @@ int test__perf_evsel__tp_sched_test(int subtest __maybe_unused) | ||
2762 | if (perf_evsel__test_field(evsel, "prev_state", sizeof(long), true)) | ||
2763 | ret = -1; | ||
2764 | |||
2765 | - if (perf_evsel__test_field(evsel, "next_comm", 16, true)) | ||
2766 | + if (perf_evsel__test_field(evsel, "next_comm", 16, false)) | ||
2767 | ret = -1; | ||
2768 | |||
2769 | if (perf_evsel__test_field(evsel, "next_pid", 4, true)) | ||
2770 | @@ -72,7 +72,7 @@ int test__perf_evsel__tp_sched_test(int subtest __maybe_unused) | ||
2771 | return -1; | ||
2772 | } | ||
2773 | |||
2774 | - if (perf_evsel__test_field(evsel, "comm", 16, true)) | ||
2775 | + if (perf_evsel__test_field(evsel, "comm", 16, false)) | ||
2776 | ret = -1; | ||
2777 | |||
2778 | if (perf_evsel__test_field(evsel, "pid", 4, true)) |