Contents of /trunk/kernel-alx/patches-4.4/0144-4.4.45-all-fixes.patch
Parent Directory | Revision Log
Revision 2880 -
(show annotations)
(download)
Mon Mar 27 13:49:20 2017 UTC (7 years, 6 months ago) by niro
File size: 37818 byte(s)
Mon Mar 27 13:49:20 2017 UTC (7 years, 6 months ago) by niro
File size: 37818 byte(s)
linux-4.4.45
1 | diff --git a/Documentation/devicetree/bindings/clock/imx31-clock.txt b/Documentation/devicetree/bindings/clock/imx31-clock.txt |
2 | index 19df842c694f..8163d565f697 100644 |
3 | --- a/Documentation/devicetree/bindings/clock/imx31-clock.txt |
4 | +++ b/Documentation/devicetree/bindings/clock/imx31-clock.txt |
5 | @@ -77,7 +77,7 @@ Examples: |
6 | clks: ccm@53f80000{ |
7 | compatible = "fsl,imx31-ccm"; |
8 | reg = <0x53f80000 0x4000>; |
9 | - interrupts = <0 31 0x04 0 53 0x04>; |
10 | + interrupts = <31>, <53>; |
11 | #clock-cells = <1>; |
12 | }; |
13 | |
14 | diff --git a/Makefile b/Makefile |
15 | index d6a1de0e2bd7..a3dfc73da722 100644 |
16 | --- a/Makefile |
17 | +++ b/Makefile |
18 | @@ -1,6 +1,6 @@ |
19 | VERSION = 4 |
20 | PATCHLEVEL = 4 |
21 | -SUBLEVEL = 44 |
22 | +SUBLEVEL = 45 |
23 | EXTRAVERSION = |
24 | NAME = Blurry Fish Butt |
25 | |
26 | diff --git a/arch/arm/boot/dts/da850-evm.dts b/arch/arm/boot/dts/da850-evm.dts |
27 | index 4f935ad9f27b..6881757b03e8 100644 |
28 | --- a/arch/arm/boot/dts/da850-evm.dts |
29 | +++ b/arch/arm/boot/dts/da850-evm.dts |
30 | @@ -85,6 +85,7 @@ |
31 | #size-cells = <1>; |
32 | compatible = "m25p64"; |
33 | spi-max-frequency = <30000000>; |
34 | + m25p,fast-read; |
35 | reg = <0>; |
36 | partition@0 { |
37 | label = "U-Boot-SPL"; |
38 | diff --git a/arch/arm/boot/dts/imx31.dtsi b/arch/arm/boot/dts/imx31.dtsi |
39 | index 5fdb222636a7..cbe5fd5ed179 100644 |
40 | --- a/arch/arm/boot/dts/imx31.dtsi |
41 | +++ b/arch/arm/boot/dts/imx31.dtsi |
42 | @@ -30,11 +30,11 @@ |
43 | }; |
44 | }; |
45 | |
46 | - avic: avic-interrupt-controller@60000000 { |
47 | + avic: interrupt-controller@68000000 { |
48 | compatible = "fsl,imx31-avic", "fsl,avic"; |
49 | interrupt-controller; |
50 | #interrupt-cells = <1>; |
51 | - reg = <0x60000000 0x100000>; |
52 | + reg = <0x68000000 0x100000>; |
53 | }; |
54 | |
55 | soc { |
56 | @@ -110,13 +110,6 @@ |
57 | interrupts = <19>; |
58 | clocks = <&clks 25>; |
59 | }; |
60 | - |
61 | - clks: ccm@53f80000{ |
62 | - compatible = "fsl,imx31-ccm"; |
63 | - reg = <0x53f80000 0x4000>; |
64 | - interrupts = <0 31 0x04 0 53 0x04>; |
65 | - #clock-cells = <1>; |
66 | - }; |
67 | }; |
68 | |
69 | aips@53f00000 { /* AIPS2 */ |
70 | @@ -126,6 +119,13 @@ |
71 | reg = <0x53f00000 0x100000>; |
72 | ranges; |
73 | |
74 | + clks: ccm@53f80000{ |
75 | + compatible = "fsl,imx31-ccm"; |
76 | + reg = <0x53f80000 0x4000>; |
77 | + interrupts = <31>, <53>; |
78 | + #clock-cells = <1>; |
79 | + }; |
80 | + |
81 | gpt: timer@53f90000 { |
82 | compatible = "fsl,imx31-gpt"; |
83 | reg = <0x53f90000 0x4000>; |
84 | diff --git a/arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi b/arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi |
85 | index a35d54fd9cd3..ddfdb75a6e90 100644 |
86 | --- a/arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi |
87 | +++ b/arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi |
88 | @@ -319,8 +319,6 @@ |
89 | compatible = "fsl,imx6q-nitrogen6_max-sgtl5000", |
90 | "fsl,imx-audio-sgtl5000"; |
91 | model = "imx6q-nitrogen6_max-sgtl5000"; |
92 | - pinctrl-names = "default"; |
93 | - pinctrl-0 = <&pinctrl_sgtl5000>; |
94 | ssi-controller = <&ssi1>; |
95 | audio-codec = <&codec>; |
96 | audio-routing = |
97 | @@ -401,6 +399,8 @@ |
98 | |
99 | codec: sgtl5000@0a { |
100 | compatible = "fsl,sgtl5000"; |
101 | + pinctrl-names = "default"; |
102 | + pinctrl-0 = <&pinctrl_sgtl5000>; |
103 | reg = <0x0a>; |
104 | clocks = <&clks 201>; |
105 | VDDA-supply = <®_2p5v>; |
106 | diff --git a/arch/arm/include/asm/cputype.h b/arch/arm/include/asm/cputype.h |
107 | index 85e374f873ac..e9d04f475929 100644 |
108 | --- a/arch/arm/include/asm/cputype.h |
109 | +++ b/arch/arm/include/asm/cputype.h |
110 | @@ -81,6 +81,9 @@ |
111 | #define ARM_CPU_XSCALE_ARCH_V2 0x4000 |
112 | #define ARM_CPU_XSCALE_ARCH_V3 0x6000 |
113 | |
114 | +/* Qualcomm implemented cores */ |
115 | +#define ARM_CPU_PART_SCORPION 0x510002d0 |
116 | + |
117 | extern unsigned int processor_id; |
118 | |
119 | #ifdef CONFIG_CPU_CP15 |
120 | diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c |
121 | index 6284779d64ee..abcbea1ae30b 100644 |
122 | --- a/arch/arm/kernel/hw_breakpoint.c |
123 | +++ b/arch/arm/kernel/hw_breakpoint.c |
124 | @@ -1066,6 +1066,22 @@ static int __init arch_hw_breakpoint_init(void) |
125 | return 0; |
126 | } |
127 | |
128 | + /* |
129 | + * Scorpion CPUs (at least those in APQ8060) seem to set DBGPRSR.SPD |
130 | + * whenever a WFI is issued, even if the core is not powered down, in |
131 | + * violation of the architecture. When DBGPRSR.SPD is set, accesses to |
132 | + * breakpoint and watchpoint registers are treated as undefined, so |
133 | + * this results in boot time and runtime failures when these are |
134 | + * accessed and we unexpectedly take a trap. |
135 | + * |
136 | + * It's not clear if/how this can be worked around, so we blacklist |
137 | + * Scorpion CPUs to avoid these issues. |
138 | + */ |
139 | + if (read_cpuid_part() == ARM_CPU_PART_SCORPION) { |
140 | + pr_info("Scorpion CPU detected. Hardware breakpoints and watchpoints disabled\n"); |
141 | + return 0; |
142 | + } |
143 | + |
144 | has_ossr = core_has_os_save_restore(); |
145 | |
146 | /* Determine how many BRPs/WRPs are available. */ |
147 | diff --git a/arch/arm/kernel/smp_tlb.c b/arch/arm/kernel/smp_tlb.c |
148 | index 2e72be4f623e..7cb079e74010 100644 |
149 | --- a/arch/arm/kernel/smp_tlb.c |
150 | +++ b/arch/arm/kernel/smp_tlb.c |
151 | @@ -9,6 +9,7 @@ |
152 | */ |
153 | #include <linux/preempt.h> |
154 | #include <linux/smp.h> |
155 | +#include <linux/uaccess.h> |
156 | |
157 | #include <asm/smp_plat.h> |
158 | #include <asm/tlbflush.h> |
159 | @@ -40,8 +41,11 @@ static inline void ipi_flush_tlb_mm(void *arg) |
160 | static inline void ipi_flush_tlb_page(void *arg) |
161 | { |
162 | struct tlb_args *ta = (struct tlb_args *)arg; |
163 | + unsigned int __ua_flags = uaccess_save_and_enable(); |
164 | |
165 | local_flush_tlb_page(ta->ta_vma, ta->ta_start); |
166 | + |
167 | + uaccess_restore(__ua_flags); |
168 | } |
169 | |
170 | static inline void ipi_flush_tlb_kernel_page(void *arg) |
171 | @@ -54,8 +58,11 @@ static inline void ipi_flush_tlb_kernel_page(void *arg) |
172 | static inline void ipi_flush_tlb_range(void *arg) |
173 | { |
174 | struct tlb_args *ta = (struct tlb_args *)arg; |
175 | + unsigned int __ua_flags = uaccess_save_and_enable(); |
176 | |
177 | local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end); |
178 | + |
179 | + uaccess_restore(__ua_flags); |
180 | } |
181 | |
182 | static inline void ipi_flush_tlb_kernel_range(void *arg) |
183 | diff --git a/arch/arm/mach-ux500/pm.c b/arch/arm/mach-ux500/pm.c |
184 | index 8538910db202..a970e7fcba9e 100644 |
185 | --- a/arch/arm/mach-ux500/pm.c |
186 | +++ b/arch/arm/mach-ux500/pm.c |
187 | @@ -134,8 +134,8 @@ bool prcmu_pending_irq(void) |
188 | */ |
189 | bool prcmu_is_cpu_in_wfi(int cpu) |
190 | { |
191 | - return readl(PRCM_ARM_WFI_STANDBY) & cpu ? PRCM_ARM_WFI_STANDBY_WFI1 : |
192 | - PRCM_ARM_WFI_STANDBY_WFI0; |
193 | + return readl(PRCM_ARM_WFI_STANDBY) & |
194 | + (cpu ? PRCM_ARM_WFI_STANDBY_WFI1 : PRCM_ARM_WFI_STANDBY_WFI0); |
195 | } |
196 | |
197 | /* |
198 | diff --git a/arch/arm64/include/uapi/asm/ptrace.h b/arch/arm64/include/uapi/asm/ptrace.h |
199 | index 208db3df135a..3378238b5d8b 100644 |
200 | --- a/arch/arm64/include/uapi/asm/ptrace.h |
201 | +++ b/arch/arm64/include/uapi/asm/ptrace.h |
202 | @@ -76,6 +76,7 @@ struct user_fpsimd_state { |
203 | __uint128_t vregs[32]; |
204 | __u32 fpsr; |
205 | __u32 fpcr; |
206 | + __u32 __reserved[2]; |
207 | }; |
208 | |
209 | struct user_hwdebug_state { |
210 | diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S |
211 | index 5a3753d09e20..bd14849beb73 100644 |
212 | --- a/arch/arm64/kernel/entry.S |
213 | +++ b/arch/arm64/kernel/entry.S |
214 | @@ -562,7 +562,7 @@ el0_inv: |
215 | mov x0, sp |
216 | mov x1, #BAD_SYNC |
217 | mov x2, x25 |
218 | - bl bad_mode |
219 | + bl bad_el0_sync |
220 | b ret_to_user |
221 | ENDPROC(el0_sync) |
222 | |
223 | diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c |
224 | index fc779ec6f051..55909b2208cc 100644 |
225 | --- a/arch/arm64/kernel/ptrace.c |
226 | +++ b/arch/arm64/kernel/ptrace.c |
227 | @@ -450,6 +450,8 @@ static int hw_break_set(struct task_struct *target, |
228 | /* (address, ctrl) registers */ |
229 | limit = regset->n * regset->size; |
230 | while (count && offset < limit) { |
231 | + if (count < PTRACE_HBP_ADDR_SZ) |
232 | + return -EINVAL; |
233 | ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &addr, |
234 | offset, offset + PTRACE_HBP_ADDR_SZ); |
235 | if (ret) |
236 | @@ -459,6 +461,8 @@ static int hw_break_set(struct task_struct *target, |
237 | return ret; |
238 | offset += PTRACE_HBP_ADDR_SZ; |
239 | |
240 | + if (!count) |
241 | + break; |
242 | ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &ctrl, |
243 | offset, offset + PTRACE_HBP_CTRL_SZ); |
244 | if (ret) |
245 | @@ -495,7 +499,7 @@ static int gpr_set(struct task_struct *target, const struct user_regset *regset, |
246 | const void *kbuf, const void __user *ubuf) |
247 | { |
248 | int ret; |
249 | - struct user_pt_regs newregs; |
250 | + struct user_pt_regs newregs = task_pt_regs(target)->user_regs; |
251 | |
252 | ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &newregs, 0, -1); |
253 | if (ret) |
254 | @@ -525,7 +529,8 @@ static int fpr_set(struct task_struct *target, const struct user_regset *regset, |
255 | const void *kbuf, const void __user *ubuf) |
256 | { |
257 | int ret; |
258 | - struct user_fpsimd_state newstate; |
259 | + struct user_fpsimd_state newstate = |
260 | + target->thread.fpsimd_state.user_fpsimd; |
261 | |
262 | ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &newstate, 0, -1); |
263 | if (ret) |
264 | @@ -549,7 +554,7 @@ static int tls_set(struct task_struct *target, const struct user_regset *regset, |
265 | const void *kbuf, const void __user *ubuf) |
266 | { |
267 | int ret; |
268 | - unsigned long tls; |
269 | + unsigned long tls = target->thread.tp_value; |
270 | |
271 | ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &tls, 0, -1); |
272 | if (ret) |
273 | @@ -575,7 +580,8 @@ static int system_call_set(struct task_struct *target, |
274 | unsigned int pos, unsigned int count, |
275 | const void *kbuf, const void __user *ubuf) |
276 | { |
277 | - int syscallno, ret; |
278 | + int syscallno = task_pt_regs(target)->syscallno; |
279 | + int ret; |
280 | |
281 | ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &syscallno, 0, -1); |
282 | if (ret) |
283 | @@ -847,7 +853,7 @@ static int compat_tls_set(struct task_struct *target, |
284 | const void __user *ubuf) |
285 | { |
286 | int ret; |
287 | - compat_ulong_t tls; |
288 | + compat_ulong_t tls = target->thread.tp_value; |
289 | |
290 | ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &tls, 0, -1); |
291 | if (ret) |
292 | diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c |
293 | index e9b9b5364393..ca7f0ac5f708 100644 |
294 | --- a/arch/arm64/kernel/traps.c |
295 | +++ b/arch/arm64/kernel/traps.c |
296 | @@ -434,16 +434,33 @@ const char *esr_get_class_string(u32 esr) |
297 | } |
298 | |
299 | /* |
300 | - * bad_mode handles the impossible case in the exception vector. |
301 | + * bad_mode handles the impossible case in the exception vector. This is always |
302 | + * fatal. |
303 | */ |
304 | asmlinkage void bad_mode(struct pt_regs *regs, int reason, unsigned int esr) |
305 | { |
306 | - siginfo_t info; |
307 | - void __user *pc = (void __user *)instruction_pointer(regs); |
308 | console_verbose(); |
309 | |
310 | pr_crit("Bad mode in %s handler detected, code 0x%08x -- %s\n", |
311 | handler[reason], esr, esr_get_class_string(esr)); |
312 | + |
313 | + die("Oops - bad mode", regs, 0); |
314 | + local_irq_disable(); |
315 | + panic("bad mode"); |
316 | +} |
317 | + |
318 | +/* |
319 | + * bad_el0_sync handles unexpected, but potentially recoverable synchronous |
320 | + * exceptions taken from EL0. Unlike bad_mode, this returns. |
321 | + */ |
322 | +asmlinkage void bad_el0_sync(struct pt_regs *regs, int reason, unsigned int esr) |
323 | +{ |
324 | + siginfo_t info; |
325 | + void __user *pc = (void __user *)instruction_pointer(regs); |
326 | + console_verbose(); |
327 | + |
328 | + pr_crit("Bad EL0 synchronous exception detected on CPU%d, code 0x%08x -- %s\n", |
329 | + smp_processor_id(), esr, esr_get_class_string(esr)); |
330 | __show_regs(regs); |
331 | |
332 | info.si_signo = SIGILL; |
333 | @@ -451,7 +468,10 @@ asmlinkage void bad_mode(struct pt_regs *regs, int reason, unsigned int esr) |
334 | info.si_code = ILL_ILLOPC; |
335 | info.si_addr = pc; |
336 | |
337 | - arm64_notify_die("Oops - bad mode", regs, &info, 0); |
338 | + current->thread.fault_address = 0; |
339 | + current->thread.fault_code = 0; |
340 | + |
341 | + force_sig_info(info.si_signo, &info, current); |
342 | } |
343 | |
344 | void __pte_error(const char *file, int line, unsigned long val) |
345 | diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c |
346 | index fdb0fbfb1197..aaacbd667212 100644 |
347 | --- a/arch/x86/kernel/apic/io_apic.c |
348 | +++ b/arch/x86/kernel/apic/io_apic.c |
349 | @@ -1875,6 +1875,7 @@ static struct irq_chip ioapic_chip __read_mostly = { |
350 | .irq_ack = irq_chip_ack_parent, |
351 | .irq_eoi = ioapic_ack_level, |
352 | .irq_set_affinity = ioapic_set_affinity, |
353 | + .irq_retrigger = irq_chip_retrigger_hierarchy, |
354 | .flags = IRQCHIP_SKIP_SET_WAKE, |
355 | }; |
356 | |
357 | @@ -1886,6 +1887,7 @@ static struct irq_chip ioapic_ir_chip __read_mostly = { |
358 | .irq_ack = irq_chip_ack_parent, |
359 | .irq_eoi = ioapic_ir_ack_level, |
360 | .irq_set_affinity = ioapic_set_affinity, |
361 | + .irq_retrigger = irq_chip_retrigger_hierarchy, |
362 | .flags = IRQCHIP_SKIP_SET_WAKE, |
363 | }; |
364 | |
365 | diff --git a/arch/x86/kernel/mcount_64.S b/arch/x86/kernel/mcount_64.S |
366 | index 87e1762e2bca..5d9afbcb6074 100644 |
367 | --- a/arch/x86/kernel/mcount_64.S |
368 | +++ b/arch/x86/kernel/mcount_64.S |
369 | @@ -180,7 +180,8 @@ GLOBAL(ftrace_graph_call) |
370 | jmp ftrace_stub |
371 | #endif |
372 | |
373 | -GLOBAL(ftrace_stub) |
374 | +/* This is weak to keep gas from relaxing the jumps */ |
375 | +WEAK(ftrace_stub) |
376 | retq |
377 | END(ftrace_caller) |
378 | |
379 | diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c |
380 | index 3cd69832d7f4..3961103e9176 100644 |
381 | --- a/arch/x86/pci/acpi.c |
382 | +++ b/arch/x86/pci/acpi.c |
383 | @@ -114,6 +114,16 @@ static const struct dmi_system_id pci_crs_quirks[] __initconst = { |
384 | DMI_MATCH(DMI_BIOS_VERSION, "6JET85WW (1.43 )"), |
385 | }, |
386 | }, |
387 | + /* https://bugzilla.kernel.org/show_bug.cgi?id=42606 */ |
388 | + { |
389 | + .callback = set_nouse_crs, |
390 | + .ident = "Supermicro X8DTH", |
391 | + .matches = { |
392 | + DMI_MATCH(DMI_SYS_VENDOR, "Supermicro"), |
393 | + DMI_MATCH(DMI_PRODUCT_NAME, "X8DTH-i/6/iF/6F"), |
394 | + DMI_MATCH(DMI_BIOS_VERSION, "2.0a"), |
395 | + }, |
396 | + }, |
397 | |
398 | /* https://bugzilla.kernel.org/show_bug.cgi?id=15362 */ |
399 | { |
400 | diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c |
401 | index ff44082a0827..47f8aafe3344 100644 |
402 | --- a/drivers/clocksource/exynos_mct.c |
403 | +++ b/drivers/clocksource/exynos_mct.c |
404 | @@ -482,6 +482,7 @@ static void exynos4_local_timer_stop(struct mct_clock_event_device *mevt) |
405 | if (mct_int_type == MCT_INT_SPI) { |
406 | if (evt->irq != -1) |
407 | disable_irq_nosync(evt->irq); |
408 | + exynos4_mct_write(0x1, mevt->base + MCT_L_INT_CSTAT_OFFSET); |
409 | } else { |
410 | disable_percpu_irq(mct_irqs[MCT_L0_IRQ]); |
411 | } |
412 | diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c |
413 | index 17ee758b419f..8250950aab8b 100644 |
414 | --- a/drivers/dma/pl330.c |
415 | +++ b/drivers/dma/pl330.c |
416 | @@ -445,6 +445,9 @@ struct dma_pl330_chan { |
417 | |
418 | /* for cyclic capability */ |
419 | bool cyclic; |
420 | + |
421 | + /* for runtime pm tracking */ |
422 | + bool active; |
423 | }; |
424 | |
425 | struct pl330_dmac { |
426 | @@ -1994,6 +1997,7 @@ static void pl330_tasklet(unsigned long data) |
427 | _stop(pch->thread); |
428 | spin_unlock(&pch->thread->dmac->lock); |
429 | power_down = true; |
430 | + pch->active = false; |
431 | } else { |
432 | /* Make sure the PL330 Channel thread is active */ |
433 | spin_lock(&pch->thread->dmac->lock); |
434 | @@ -2015,6 +2019,7 @@ static void pl330_tasklet(unsigned long data) |
435 | desc->status = PREP; |
436 | list_move_tail(&desc->node, &pch->work_list); |
437 | if (power_down) { |
438 | + pch->active = true; |
439 | spin_lock(&pch->thread->dmac->lock); |
440 | _start(pch->thread); |
441 | spin_unlock(&pch->thread->dmac->lock); |
442 | @@ -2129,6 +2134,7 @@ static int pl330_terminate_all(struct dma_chan *chan) |
443 | unsigned long flags; |
444 | struct pl330_dmac *pl330 = pch->dmac; |
445 | LIST_HEAD(list); |
446 | + bool power_down = false; |
447 | |
448 | pm_runtime_get_sync(pl330->ddma.dev); |
449 | spin_lock_irqsave(&pch->lock, flags); |
450 | @@ -2139,6 +2145,8 @@ static int pl330_terminate_all(struct dma_chan *chan) |
451 | pch->thread->req[0].desc = NULL; |
452 | pch->thread->req[1].desc = NULL; |
453 | pch->thread->req_running = -1; |
454 | + power_down = pch->active; |
455 | + pch->active = false; |
456 | |
457 | /* Mark all desc done */ |
458 | list_for_each_entry(desc, &pch->submitted_list, node) { |
459 | @@ -2156,6 +2164,8 @@ static int pl330_terminate_all(struct dma_chan *chan) |
460 | list_splice_tail_init(&pch->completed_list, &pl330->desc_pool); |
461 | spin_unlock_irqrestore(&pch->lock, flags); |
462 | pm_runtime_mark_last_busy(pl330->ddma.dev); |
463 | + if (power_down) |
464 | + pm_runtime_put_autosuspend(pl330->ddma.dev); |
465 | pm_runtime_put_autosuspend(pl330->ddma.dev); |
466 | |
467 | return 0; |
468 | @@ -2302,6 +2312,7 @@ static void pl330_issue_pending(struct dma_chan *chan) |
469 | * updated on work_list emptiness status. |
470 | */ |
471 | WARN_ON(list_empty(&pch->submitted_list)); |
472 | + pch->active = true; |
473 | pm_runtime_get_sync(pch->dmac->ddma.dev); |
474 | } |
475 | list_splice_tail_init(&pch->submitted_list, &pch->work_list); |
476 | diff --git a/drivers/hid/hid-corsair.c b/drivers/hid/hid-corsair.c |
477 | index bcefb9ebb026..88be56321610 100644 |
478 | --- a/drivers/hid/hid-corsair.c |
479 | +++ b/drivers/hid/hid-corsair.c |
480 | @@ -148,26 +148,36 @@ static enum led_brightness k90_backlight_get(struct led_classdev *led_cdev) |
481 | struct usb_interface *usbif = to_usb_interface(dev->parent); |
482 | struct usb_device *usbdev = interface_to_usbdev(usbif); |
483 | int brightness; |
484 | - char data[8]; |
485 | + char *data; |
486 | + |
487 | + data = kmalloc(8, GFP_KERNEL); |
488 | + if (!data) |
489 | + return -ENOMEM; |
490 | |
491 | ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), |
492 | K90_REQUEST_STATUS, |
493 | USB_DIR_IN | USB_TYPE_VENDOR | |
494 | USB_RECIP_DEVICE, 0, 0, data, 8, |
495 | USB_CTRL_SET_TIMEOUT); |
496 | - if (ret < 0) { |
497 | + if (ret < 5) { |
498 | dev_warn(dev, "Failed to get K90 initial state (error %d).\n", |
499 | ret); |
500 | - return -EIO; |
501 | + ret = -EIO; |
502 | + goto out; |
503 | } |
504 | brightness = data[4]; |
505 | if (brightness < 0 || brightness > 3) { |
506 | dev_warn(dev, |
507 | "Read invalid backlight brightness: %02hhx.\n", |
508 | data[4]); |
509 | - return -EIO; |
510 | + ret = -EIO; |
511 | + goto out; |
512 | } |
513 | - return brightness; |
514 | + ret = brightness; |
515 | +out: |
516 | + kfree(data); |
517 | + |
518 | + return ret; |
519 | } |
520 | |
521 | static enum led_brightness k90_record_led_get(struct led_classdev *led_cdev) |
522 | @@ -253,17 +263,22 @@ static ssize_t k90_show_macro_mode(struct device *dev, |
523 | struct usb_interface *usbif = to_usb_interface(dev->parent); |
524 | struct usb_device *usbdev = interface_to_usbdev(usbif); |
525 | const char *macro_mode; |
526 | - char data[8]; |
527 | + char *data; |
528 | + |
529 | + data = kmalloc(2, GFP_KERNEL); |
530 | + if (!data) |
531 | + return -ENOMEM; |
532 | |
533 | ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), |
534 | K90_REQUEST_GET_MODE, |
535 | USB_DIR_IN | USB_TYPE_VENDOR | |
536 | USB_RECIP_DEVICE, 0, 0, data, 2, |
537 | USB_CTRL_SET_TIMEOUT); |
538 | - if (ret < 0) { |
539 | + if (ret < 1) { |
540 | dev_warn(dev, "Failed to get K90 initial mode (error %d).\n", |
541 | ret); |
542 | - return -EIO; |
543 | + ret = -EIO; |
544 | + goto out; |
545 | } |
546 | |
547 | switch (data[0]) { |
548 | @@ -277,10 +292,15 @@ static ssize_t k90_show_macro_mode(struct device *dev, |
549 | default: |
550 | dev_warn(dev, "K90 in unknown mode: %02hhx.\n", |
551 | data[0]); |
552 | - return -EIO; |
553 | + ret = -EIO; |
554 | + goto out; |
555 | } |
556 | |
557 | - return snprintf(buf, PAGE_SIZE, "%s\n", macro_mode); |
558 | + ret = snprintf(buf, PAGE_SIZE, "%s\n", macro_mode); |
559 | +out: |
560 | + kfree(data); |
561 | + |
562 | + return ret; |
563 | } |
564 | |
565 | static ssize_t k90_store_macro_mode(struct device *dev, |
566 | @@ -320,26 +340,36 @@ static ssize_t k90_show_current_profile(struct device *dev, |
567 | struct usb_interface *usbif = to_usb_interface(dev->parent); |
568 | struct usb_device *usbdev = interface_to_usbdev(usbif); |
569 | int current_profile; |
570 | - char data[8]; |
571 | + char *data; |
572 | + |
573 | + data = kmalloc(8, GFP_KERNEL); |
574 | + if (!data) |
575 | + return -ENOMEM; |
576 | |
577 | ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), |
578 | K90_REQUEST_STATUS, |
579 | USB_DIR_IN | USB_TYPE_VENDOR | |
580 | USB_RECIP_DEVICE, 0, 0, data, 8, |
581 | USB_CTRL_SET_TIMEOUT); |
582 | - if (ret < 0) { |
583 | + if (ret < 8) { |
584 | dev_warn(dev, "Failed to get K90 initial state (error %d).\n", |
585 | ret); |
586 | - return -EIO; |
587 | + ret = -EIO; |
588 | + goto out; |
589 | } |
590 | current_profile = data[7]; |
591 | if (current_profile < 1 || current_profile > 3) { |
592 | dev_warn(dev, "Read invalid current profile: %02hhx.\n", |
593 | data[7]); |
594 | - return -EIO; |
595 | + ret = -EIO; |
596 | + goto out; |
597 | } |
598 | |
599 | - return snprintf(buf, PAGE_SIZE, "%d\n", current_profile); |
600 | + ret = snprintf(buf, PAGE_SIZE, "%d\n", current_profile); |
601 | +out: |
602 | + kfree(data); |
603 | + |
604 | + return ret; |
605 | } |
606 | |
607 | static ssize_t k90_store_current_profile(struct device *dev, |
608 | diff --git a/drivers/infiniband/hw/mlx4/ah.c b/drivers/infiniband/hw/mlx4/ah.c |
609 | index c007c766c61e..fc21bdbb8b32 100644 |
610 | --- a/drivers/infiniband/hw/mlx4/ah.c |
611 | +++ b/drivers/infiniband/hw/mlx4/ah.c |
612 | @@ -113,7 +113,9 @@ static struct ib_ah *create_iboe_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr |
613 | !(1 << ah->av.eth.stat_rate & dev->caps.stat_rate_support)) |
614 | --ah->av.eth.stat_rate; |
615 | } |
616 | - |
617 | + ah->av.eth.sl_tclass_flowlabel |= |
618 | + cpu_to_be32((ah_attr->grh.traffic_class << 20) | |
619 | + ah_attr->grh.flow_label); |
620 | /* |
621 | * HW requires multicast LID so we just choose one. |
622 | */ |
623 | @@ -121,7 +123,7 @@ static struct ib_ah *create_iboe_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr |
624 | ah->av.ib.dlid = cpu_to_be16(0xc000); |
625 | |
626 | memcpy(ah->av.eth.dgid, ah_attr->grh.dgid.raw, 16); |
627 | - ah->av.eth.sl_tclass_flowlabel = cpu_to_be32(ah_attr->sl << 29); |
628 | + ah->av.eth.sl_tclass_flowlabel |= cpu_to_be32(ah_attr->sl << 29); |
629 | |
630 | return &ah->ibah; |
631 | } |
632 | diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c |
633 | index 97d6878f9938..77ddf2fa8625 100644 |
634 | --- a/drivers/infiniband/hw/mlx4/main.c |
635 | +++ b/drivers/infiniband/hw/mlx4/main.c |
636 | @@ -630,9 +630,11 @@ static int eth_link_query_port(struct ib_device *ibdev, u8 port, |
637 | if (err) |
638 | goto out; |
639 | |
640 | - props->active_width = (((u8 *)mailbox->buf)[5] == 0x40) ? |
641 | - IB_WIDTH_4X : IB_WIDTH_1X; |
642 | - props->active_speed = IB_SPEED_QDR; |
643 | + props->active_width = (((u8 *)mailbox->buf)[5] == 0x40) || |
644 | + (((u8 *)mailbox->buf)[5] == 0x20 /*56Gb*/) ? |
645 | + IB_WIDTH_4X : IB_WIDTH_1X; |
646 | + props->active_speed = (((u8 *)mailbox->buf)[5] == 0x20 /*56Gb*/) ? |
647 | + IB_SPEED_FDR : IB_SPEED_QDR; |
648 | props->port_cap_flags = IB_PORT_CM_SUP | IB_PORT_IP_BASED_GIDS; |
649 | props->gid_tbl_len = mdev->dev->caps.gid_table_len[port]; |
650 | props->max_msg_sz = mdev->dev->caps.max_msg_sz; |
651 | @@ -2401,14 +2403,19 @@ static void *mlx4_ib_add(struct mlx4_dev *dev) |
652 | goto err_steer_qp_release; |
653 | } |
654 | |
655 | - bitmap_zero(ibdev->ib_uc_qpns_bitmap, ibdev->steer_qpn_count); |
656 | - |
657 | - err = mlx4_FLOW_STEERING_IB_UC_QP_RANGE( |
658 | - dev, ibdev->steer_qpn_base, |
659 | - ibdev->steer_qpn_base + |
660 | - ibdev->steer_qpn_count - 1); |
661 | - if (err) |
662 | - goto err_steer_free_bitmap; |
663 | + if (dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_DMFS_IPOIB) { |
664 | + bitmap_zero(ibdev->ib_uc_qpns_bitmap, |
665 | + ibdev->steer_qpn_count); |
666 | + err = mlx4_FLOW_STEERING_IB_UC_QP_RANGE( |
667 | + dev, ibdev->steer_qpn_base, |
668 | + ibdev->steer_qpn_base + |
669 | + ibdev->steer_qpn_count - 1); |
670 | + if (err) |
671 | + goto err_steer_free_bitmap; |
672 | + } else { |
673 | + bitmap_fill(ibdev->ib_uc_qpns_bitmap, |
674 | + ibdev->steer_qpn_count); |
675 | + } |
676 | } |
677 | |
678 | for (j = 1; j <= ibdev->dev->caps.num_ports; j++) |
679 | diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c |
680 | index f350f2d61c15..1c8b7c22c822 100644 |
681 | --- a/drivers/infiniband/hw/mlx4/qp.c |
682 | +++ b/drivers/infiniband/hw/mlx4/qp.c |
683 | @@ -1207,7 +1207,8 @@ int mlx4_ib_destroy_qp(struct ib_qp *qp) |
684 | if (is_qp0(dev, mqp)) |
685 | mlx4_CLOSE_PORT(dev->dev, mqp->port); |
686 | |
687 | - if (dev->qp1_proxy[mqp->port - 1] == mqp) { |
688 | + if (mqp->mlx4_ib_qp_type == MLX4_IB_QPT_PROXY_GSI && |
689 | + dev->qp1_proxy[mqp->port - 1] == mqp) { |
690 | mutex_lock(&dev->qp1_proxy_lock[mqp->port - 1]); |
691 | dev->qp1_proxy[mqp->port - 1] = NULL; |
692 | mutex_unlock(&dev->qp1_proxy_lock[mqp->port - 1]); |
693 | diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c |
694 | index 6000f7aeede9..3399271c235b 100644 |
695 | --- a/drivers/infiniband/hw/mlx5/mr.c |
696 | +++ b/drivers/infiniband/hw/mlx5/mr.c |
697 | @@ -614,6 +614,33 @@ int mlx5_mr_cache_init(struct mlx5_ib_dev *dev) |
698 | return 0; |
699 | } |
700 | |
701 | +static void wait_for_async_commands(struct mlx5_ib_dev *dev) |
702 | +{ |
703 | + struct mlx5_mr_cache *cache = &dev->cache; |
704 | + struct mlx5_cache_ent *ent; |
705 | + int total = 0; |
706 | + int i; |
707 | + int j; |
708 | + |
709 | + for (i = 0; i < MAX_MR_CACHE_ENTRIES; i++) { |
710 | + ent = &cache->ent[i]; |
711 | + for (j = 0 ; j < 1000; j++) { |
712 | + if (!ent->pending) |
713 | + break; |
714 | + msleep(50); |
715 | + } |
716 | + } |
717 | + for (i = 0; i < MAX_MR_CACHE_ENTRIES; i++) { |
718 | + ent = &cache->ent[i]; |
719 | + total += ent->pending; |
720 | + } |
721 | + |
722 | + if (total) |
723 | + mlx5_ib_warn(dev, "aborted while there are %d pending mr requests\n", total); |
724 | + else |
725 | + mlx5_ib_warn(dev, "done with all pending requests\n"); |
726 | +} |
727 | + |
728 | int mlx5_mr_cache_cleanup(struct mlx5_ib_dev *dev) |
729 | { |
730 | int i; |
731 | @@ -627,6 +654,7 @@ int mlx5_mr_cache_cleanup(struct mlx5_ib_dev *dev) |
732 | clean_keys(dev, i); |
733 | |
734 | destroy_workqueue(dev->cache.wq); |
735 | + wait_for_async_commands(dev); |
736 | del_timer_sync(&dev->delay_timer); |
737 | |
738 | return 0; |
739 | diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c |
740 | index 8ca75af0e6d1..de5e2b01ab05 100644 |
741 | --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c |
742 | +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c |
743 | @@ -1035,8 +1035,6 @@ static struct ib_qp *ipoib_cm_create_tx_qp(struct net_device *dev, struct ipoib_ |
744 | |
745 | tx_qp = ib_create_qp(priv->pd, &attr); |
746 | if (PTR_ERR(tx_qp) == -EINVAL) { |
747 | - ipoib_warn(priv, "can't use GFP_NOIO for QPs on device %s, using GFP_KERNEL\n", |
748 | - priv->ca->name); |
749 | attr.create_flags &= ~IB_QP_CREATE_USE_GFP_NOIO; |
750 | tx_qp = ib_create_qp(priv->pd, &attr); |
751 | } |
752 | diff --git a/drivers/media/platform/blackfin/ppi.c b/drivers/media/platform/blackfin/ppi.c |
753 | index cff63e511e6d..b8f3d9fa66e9 100644 |
754 | --- a/drivers/media/platform/blackfin/ppi.c |
755 | +++ b/drivers/media/platform/blackfin/ppi.c |
756 | @@ -214,6 +214,8 @@ static int ppi_set_params(struct ppi_if *ppi, struct ppi_params *params) |
757 | if (params->dlen > 24 || params->dlen <= 0) |
758 | return -EINVAL; |
759 | pctrl = devm_pinctrl_get(ppi->dev); |
760 | + if (IS_ERR(pctrl)) |
761 | + return PTR_ERR(pctrl); |
762 | pstate = pinctrl_lookup_state(pctrl, |
763 | pin_state[(params->dlen + 7) / 8 - 1]); |
764 | if (pinctrl_select_state(pctrl, pstate)) |
765 | diff --git a/drivers/media/rc/ite-cir.c b/drivers/media/rc/ite-cir.c |
766 | index 0f301903aa6f..63165d324fff 100644 |
767 | --- a/drivers/media/rc/ite-cir.c |
768 | +++ b/drivers/media/rc/ite-cir.c |
769 | @@ -263,6 +263,8 @@ static void ite_set_carrier_params(struct ite_dev *dev) |
770 | |
771 | if (allowance > ITE_RXDCR_MAX) |
772 | allowance = ITE_RXDCR_MAX; |
773 | + |
774 | + use_demodulator = true; |
775 | } |
776 | } |
777 | |
778 | diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c |
779 | index 44ecebd1ea8c..c8b8ac66ff7e 100644 |
780 | --- a/drivers/mmc/host/mxs-mmc.c |
781 | +++ b/drivers/mmc/host/mxs-mmc.c |
782 | @@ -309,6 +309,9 @@ static void mxs_mmc_ac(struct mxs_mmc_host *host) |
783 | cmd0 = BF_SSP(cmd->opcode, CMD0_CMD); |
784 | cmd1 = cmd->arg; |
785 | |
786 | + if (cmd->opcode == MMC_STOP_TRANSMISSION) |
787 | + cmd0 |= BM_SSP_CMD0_APPEND_8CYC; |
788 | + |
789 | if (host->sdio_irq_en) { |
790 | ctrl0 |= BM_SSP_CTRL0_SDIO_IRQ_CHECK; |
791 | cmd0 |= BM_SSP_CMD0_CONT_CLKING_EN | BM_SSP_CMD0_SLOW_CLKING_EN; |
792 | @@ -417,8 +420,7 @@ static void mxs_mmc_adtc(struct mxs_mmc_host *host) |
793 | ssp->base + HW_SSP_BLOCK_SIZE); |
794 | } |
795 | |
796 | - if ((cmd->opcode == MMC_STOP_TRANSMISSION) || |
797 | - (cmd->opcode == SD_IO_RW_EXTENDED)) |
798 | + if (cmd->opcode == SD_IO_RW_EXTENDED) |
799 | cmd0 |= BM_SSP_CMD0_APPEND_8CYC; |
800 | |
801 | cmd1 = cmd->arg; |
802 | diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig |
803 | index 289664089cf3..8f49f8aeff1a 100644 |
804 | --- a/drivers/mtd/nand/Kconfig |
805 | +++ b/drivers/mtd/nand/Kconfig |
806 | @@ -527,7 +527,7 @@ config MTD_NAND_FSMC |
807 | Flexible Static Memory Controller (FSMC) |
808 | |
809 | config MTD_NAND_XWAY |
810 | - tristate "Support for NAND on Lantiq XWAY SoC" |
811 | + bool "Support for NAND on Lantiq XWAY SoC" |
812 | depends on LANTIQ && SOC_TYPE_XWAY |
813 | select MTD_NAND_PLATFORM |
814 | help |
815 | diff --git a/drivers/net/ieee802154/atusb.c b/drivers/net/ieee802154/atusb.c |
816 | index 199a94a9c8bc..3a429f1a8002 100644 |
817 | --- a/drivers/net/ieee802154/atusb.c |
818 | +++ b/drivers/net/ieee802154/atusb.c |
819 | @@ -110,13 +110,26 @@ static int atusb_read_reg(struct atusb *atusb, uint8_t reg) |
820 | { |
821 | struct usb_device *usb_dev = atusb->usb_dev; |
822 | int ret; |
823 | + uint8_t *buffer; |
824 | uint8_t value; |
825 | |
826 | + buffer = kmalloc(1, GFP_KERNEL); |
827 | + if (!buffer) |
828 | + return -ENOMEM; |
829 | + |
830 | dev_dbg(&usb_dev->dev, "atusb: reg = 0x%x\n", reg); |
831 | ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0), |
832 | ATUSB_REG_READ, ATUSB_REQ_FROM_DEV, |
833 | - 0, reg, &value, 1, 1000); |
834 | - return ret >= 0 ? value : ret; |
835 | + 0, reg, buffer, 1, 1000); |
836 | + |
837 | + if (ret >= 0) { |
838 | + value = buffer[0]; |
839 | + kfree(buffer); |
840 | + return value; |
841 | + } else { |
842 | + kfree(buffer); |
843 | + return ret; |
844 | + } |
845 | } |
846 | |
847 | static int atusb_write_subreg(struct atusb *atusb, uint8_t reg, uint8_t mask, |
848 | @@ -517,9 +530,13 @@ static struct ieee802154_ops atusb_ops = { |
849 | static int atusb_get_and_show_revision(struct atusb *atusb) |
850 | { |
851 | struct usb_device *usb_dev = atusb->usb_dev; |
852 | - unsigned char buffer[3]; |
853 | + unsigned char *buffer; |
854 | int ret; |
855 | |
856 | + buffer = kmalloc(3, GFP_KERNEL); |
857 | + if (!buffer) |
858 | + return -ENOMEM; |
859 | + |
860 | /* Get a couple of the ATMega Firmware values */ |
861 | ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0), |
862 | ATUSB_ID, ATUSB_REQ_FROM_DEV, 0, 0, |
863 | @@ -535,15 +552,20 @@ static int atusb_get_and_show_revision(struct atusb *atusb) |
864 | dev_info(&usb_dev->dev, "Please update to version 0.2 or newer"); |
865 | } |
866 | |
867 | + kfree(buffer); |
868 | return ret; |
869 | } |
870 | |
871 | static int atusb_get_and_show_build(struct atusb *atusb) |
872 | { |
873 | struct usb_device *usb_dev = atusb->usb_dev; |
874 | - char build[ATUSB_BUILD_SIZE + 1]; |
875 | + char *build; |
876 | int ret; |
877 | |
878 | + build = kmalloc(ATUSB_BUILD_SIZE + 1, GFP_KERNEL); |
879 | + if (!build) |
880 | + return -ENOMEM; |
881 | + |
882 | ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0), |
883 | ATUSB_BUILD, ATUSB_REQ_FROM_DEV, 0, 0, |
884 | build, ATUSB_BUILD_SIZE, 1000); |
885 | @@ -552,6 +574,7 @@ static int atusb_get_and_show_build(struct atusb *atusb) |
886 | dev_info(&usb_dev->dev, "Firmware: build %s\n", build); |
887 | } |
888 | |
889 | + kfree(build); |
890 | return ret; |
891 | } |
892 | |
893 | diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c |
894 | index b5843c255263..71d9a6d1bd56 100644 |
895 | --- a/drivers/pci/probe.c |
896 | +++ b/drivers/pci/probe.c |
897 | @@ -1019,6 +1019,7 @@ void set_pcie_port_type(struct pci_dev *pdev) |
898 | pos = pci_find_capability(pdev, PCI_CAP_ID_EXP); |
899 | if (!pos) |
900 | return; |
901 | + |
902 | pdev->pcie_cap = pos; |
903 | pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, ®16); |
904 | pdev->pcie_flags_reg = reg16; |
905 | @@ -1026,13 +1027,14 @@ void set_pcie_port_type(struct pci_dev *pdev) |
906 | pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD; |
907 | |
908 | /* |
909 | - * A Root Port is always the upstream end of a Link. No PCIe |
910 | - * component has two Links. Two Links are connected by a Switch |
911 | - * that has a Port on each Link and internal logic to connect the |
912 | - * two Ports. |
913 | + * A Root Port or a PCI-to-PCIe bridge is always the upstream end |
914 | + * of a Link. No PCIe component has two Links. Two Links are |
915 | + * connected by a Switch that has a Port on each Link and internal |
916 | + * logic to connect the two Ports. |
917 | */ |
918 | type = pci_pcie_type(pdev); |
919 | - if (type == PCI_EXP_TYPE_ROOT_PORT) |
920 | + if (type == PCI_EXP_TYPE_ROOT_PORT || |
921 | + type == PCI_EXP_TYPE_PCIE_BRIDGE) |
922 | pdev->has_secondary_link = 1; |
923 | else if (type == PCI_EXP_TYPE_UPSTREAM || |
924 | type == PCI_EXP_TYPE_DOWNSTREAM) { |
925 | diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c |
926 | index c44cbf46221c..3588a56aabb4 100644 |
927 | --- a/drivers/scsi/qla2xxx/qla_os.c |
928 | +++ b/drivers/scsi/qla2xxx/qla_os.c |
929 | @@ -3365,7 +3365,7 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len, |
930 | sizeof(struct ct6_dsd), 0, |
931 | SLAB_HWCACHE_ALIGN, NULL); |
932 | if (!ctx_cachep) |
933 | - goto fail_free_gid_list; |
934 | + goto fail_free_srb_mempool; |
935 | } |
936 | ha->ctx_mempool = mempool_create_slab_pool(SRB_MIN_REQ, |
937 | ctx_cachep); |
938 | @@ -3518,7 +3518,7 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len, |
939 | ha->loop_id_map = kzalloc(BITS_TO_LONGS(LOOPID_MAP_SIZE) * sizeof(long), |
940 | GFP_KERNEL); |
941 | if (!ha->loop_id_map) |
942 | - goto fail_async_pd; |
943 | + goto fail_loop_id_map; |
944 | else { |
945 | qla2x00_set_reserved_loop_ids(ha); |
946 | ql_dbg_pci(ql_dbg_init, ha->pdev, 0x0123, |
947 | @@ -3527,6 +3527,8 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len, |
948 | |
949 | return 0; |
950 | |
951 | +fail_loop_id_map: |
952 | + dma_pool_free(ha->s_dma_pool, ha->async_pd, ha->async_pd_dma); |
953 | fail_async_pd: |
954 | dma_pool_free(ha->s_dma_pool, ha->ex_init_cb, ha->ex_init_cb_dma); |
955 | fail_ex_init_cb: |
956 | @@ -3554,6 +3556,10 @@ fail_free_ms_iocb: |
957 | dma_pool_free(ha->s_dma_pool, ha->ms_iocb, ha->ms_iocb_dma); |
958 | ha->ms_iocb = NULL; |
959 | ha->ms_iocb_dma = 0; |
960 | + |
961 | + if (ha->sns_cmd) |
962 | + dma_free_coherent(&ha->pdev->dev, sizeof(struct sns_cmd_pkt), |
963 | + ha->sns_cmd, ha->sns_cmd_dma); |
964 | fail_dma_pool: |
965 | if (IS_QLA82XX(ha) || ql2xenabledif) { |
966 | dma_pool_destroy(ha->fcp_cmnd_dma_pool); |
967 | @@ -3571,10 +3577,12 @@ fail_free_nvram: |
968 | kfree(ha->nvram); |
969 | ha->nvram = NULL; |
970 | fail_free_ctx_mempool: |
971 | - mempool_destroy(ha->ctx_mempool); |
972 | + if (ha->ctx_mempool) |
973 | + mempool_destroy(ha->ctx_mempool); |
974 | ha->ctx_mempool = NULL; |
975 | fail_free_srb_mempool: |
976 | - mempool_destroy(ha->srb_mempool); |
977 | + if (ha->srb_mempool) |
978 | + mempool_destroy(ha->srb_mempool); |
979 | ha->srb_mempool = NULL; |
980 | fail_free_gid_list: |
981 | dma_free_coherent(&ha->pdev->dev, qla2x00_gid_list_size(ha), |
982 | diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c |
983 | index e7b130a637f9..239bc9cba28c 100644 |
984 | --- a/fs/ceph/mds_client.c |
985 | +++ b/fs/ceph/mds_client.c |
986 | @@ -274,12 +274,13 @@ static int parse_reply_info_extra(void **p, void *end, |
987 | struct ceph_mds_reply_info_parsed *info, |
988 | u64 features) |
989 | { |
990 | - if (info->head->op == CEPH_MDS_OP_GETFILELOCK) |
991 | + u32 op = le32_to_cpu(info->head->op); |
992 | + |
993 | + if (op == CEPH_MDS_OP_GETFILELOCK) |
994 | return parse_reply_info_filelock(p, end, info, features); |
995 | - else if (info->head->op == CEPH_MDS_OP_READDIR || |
996 | - info->head->op == CEPH_MDS_OP_LSSNAP) |
997 | + else if (op == CEPH_MDS_OP_READDIR || op == CEPH_MDS_OP_LSSNAP) |
998 | return parse_reply_info_dir(p, end, info, features); |
999 | - else if (info->head->op == CEPH_MDS_OP_CREATE) |
1000 | + else if (op == CEPH_MDS_OP_CREATE) |
1001 | return parse_reply_info_create(p, end, info, features); |
1002 | else |
1003 | return -EIO; |
1004 | diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c |
1005 | index ebb5e37455a0..9096d44eb221 100644 |
1006 | --- a/fs/fuse/dev.c |
1007 | +++ b/fs/fuse/dev.c |
1008 | @@ -2083,7 +2083,6 @@ static void end_requests(struct fuse_conn *fc, struct list_head *head) |
1009 | struct fuse_req *req; |
1010 | req = list_entry(head->next, struct fuse_req, list); |
1011 | req->out.h.error = -ECONNABORTED; |
1012 | - clear_bit(FR_PENDING, &req->flags); |
1013 | clear_bit(FR_SENT, &req->flags); |
1014 | list_del_init(&req->list); |
1015 | request_end(fc, req); |
1016 | @@ -2161,6 +2160,8 @@ void fuse_abort_conn(struct fuse_conn *fc) |
1017 | spin_lock(&fiq->waitq.lock); |
1018 | fiq->connected = 0; |
1019 | list_splice_init(&fiq->pending, &to_end2); |
1020 | + list_for_each_entry(req, &to_end2, list) |
1021 | + clear_bit(FR_PENDING, &req->flags); |
1022 | while (forget_pending(fiq)) |
1023 | kfree(dequeue_forget(fiq, 1, NULL)); |
1024 | wake_up_all_locked(&fiq->waitq); |
1025 | diff --git a/fs/posix_acl.c b/fs/posix_acl.c |
1026 | index a60d3cc5b55d..993bb3b5f4d5 100644 |
1027 | --- a/fs/posix_acl.c |
1028 | +++ b/fs/posix_acl.c |
1029 | @@ -903,11 +903,10 @@ int simple_set_acl(struct inode *inode, struct posix_acl *acl, int type) |
1030 | int error; |
1031 | |
1032 | if (type == ACL_TYPE_ACCESS) { |
1033 | - error = posix_acl_equiv_mode(acl, &inode->i_mode); |
1034 | - if (error < 0) |
1035 | - return 0; |
1036 | - if (error == 0) |
1037 | - acl = NULL; |
1038 | + error = posix_acl_update_mode(inode, |
1039 | + &inode->i_mode, &acl); |
1040 | + if (error) |
1041 | + return error; |
1042 | } |
1043 | |
1044 | inode->i_ctime = CURRENT_TIME; |
1045 | diff --git a/fs/ubifs/tnc.c b/fs/ubifs/tnc.c |
1046 | index fa9a20cc60d6..fe5e8d4970ae 100644 |
1047 | --- a/fs/ubifs/tnc.c |
1048 | +++ b/fs/ubifs/tnc.c |
1049 | @@ -34,6 +34,11 @@ |
1050 | #include <linux/slab.h> |
1051 | #include "ubifs.h" |
1052 | |
1053 | +static int try_read_node(const struct ubifs_info *c, void *buf, int type, |
1054 | + int len, int lnum, int offs); |
1055 | +static int fallible_read_node(struct ubifs_info *c, const union ubifs_key *key, |
1056 | + struct ubifs_zbranch *zbr, void *node); |
1057 | + |
1058 | /* |
1059 | * Returned codes of 'matches_name()' and 'fallible_matches_name()' functions. |
1060 | * @NAME_LESS: name corresponding to the first argument is less than second |
1061 | @@ -402,7 +407,19 @@ static int tnc_read_node_nm(struct ubifs_info *c, struct ubifs_zbranch *zbr, |
1062 | return 0; |
1063 | } |
1064 | |
1065 | - err = ubifs_tnc_read_node(c, zbr, node); |
1066 | + if (c->replaying) { |
1067 | + err = fallible_read_node(c, &zbr->key, zbr, node); |
1068 | + /* |
1069 | + * When the node was not found, return -ENOENT, 0 otherwise. |
1070 | + * Negative return codes stay as-is. |
1071 | + */ |
1072 | + if (err == 0) |
1073 | + err = -ENOENT; |
1074 | + else if (err == 1) |
1075 | + err = 0; |
1076 | + } else { |
1077 | + err = ubifs_tnc_read_node(c, zbr, node); |
1078 | + } |
1079 | if (err) |
1080 | return err; |
1081 | |
1082 | @@ -2766,7 +2783,11 @@ struct ubifs_dent_node *ubifs_tnc_next_ent(struct ubifs_info *c, |
1083 | if (nm->name) { |
1084 | if (err) { |
1085 | /* Handle collisions */ |
1086 | - err = resolve_collision(c, key, &znode, &n, nm); |
1087 | + if (c->replaying) |
1088 | + err = fallible_resolve_collision(c, key, &znode, &n, |
1089 | + nm, 0); |
1090 | + else |
1091 | + err = resolve_collision(c, key, &znode, &n, nm); |
1092 | dbg_tnc("rc returned %d, znode %p, n %d", |
1093 | err, znode, n); |
1094 | if (unlikely(err < 0)) |
1095 | diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c |
1096 | index 4605dc73def6..033fec307528 100644 |
1097 | --- a/net/sunrpc/auth_gss/svcauth_gss.c |
1098 | +++ b/net/sunrpc/auth_gss/svcauth_gss.c |
1099 | @@ -1481,7 +1481,7 @@ svcauth_gss_accept(struct svc_rqst *rqstp, __be32 *authp) |
1100 | case RPC_GSS_PROC_DESTROY: |
1101 | if (gss_write_verf(rqstp, rsci->mechctx, gc->gc_seq)) |
1102 | goto auth_err; |
1103 | - rsci->h.expiry_time = get_seconds(); |
1104 | + rsci->h.expiry_time = seconds_since_boot(); |
1105 | set_bit(CACHE_NEGATIVE, &rsci->h.flags); |
1106 | if (resv->iov_len + 4 > PAGE_SIZE) |
1107 | goto drop; |
1108 | diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c |
1109 | index ff4f01e527ec..d4e0d648bcea 100644 |
1110 | --- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c |
1111 | +++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c |
1112 | @@ -346,8 +346,6 @@ int rdma_read_chunk_frmr(struct svcxprt_rdma *xprt, |
1113 | atomic_inc(&rdma_stat_read); |
1114 | return ret; |
1115 | err: |
1116 | - ib_dma_unmap_sg(xprt->sc_cm_id->device, |
1117 | - frmr->sg, frmr->sg_nents, frmr->direction); |
1118 | svc_rdma_put_context(ctxt, 0); |
1119 | svc_rdma_put_frmr(xprt, frmr); |
1120 | return ret; |
1121 | diff --git a/tools/perf/util/trace-event-scripting.c b/tools/perf/util/trace-event-scripting.c |
1122 | index 9df61059a85d..a2fd6e79d5a5 100644 |
1123 | --- a/tools/perf/util/trace-event-scripting.c |
1124 | +++ b/tools/perf/util/trace-event-scripting.c |
1125 | @@ -95,7 +95,8 @@ static void register_python_scripting(struct scripting_ops *scripting_ops) |
1126 | if (err) |
1127 | die("error registering py script extension"); |
1128 | |
1129 | - scripting_context = malloc(sizeof(struct scripting_context)); |
1130 | + if (scripting_context == NULL) |
1131 | + scripting_context = malloc(sizeof(*scripting_context)); |
1132 | } |
1133 | |
1134 | #ifdef NO_LIBPYTHON |
1135 | @@ -159,7 +160,8 @@ static void register_perl_scripting(struct scripting_ops *scripting_ops) |
1136 | if (err) |
1137 | die("error registering pl script extension"); |
1138 | |
1139 | - scripting_context = malloc(sizeof(struct scripting_context)); |
1140 | + if (scripting_context == NULL) |
1141 | + scripting_context = malloc(sizeof(*scripting_context)); |
1142 | } |
1143 | |
1144 | #ifdef NO_LIBPERL |
1145 | diff --git a/tools/testing/selftests/powerpc/pmu/ebb/pmc56_overflow_test.c b/tools/testing/selftests/powerpc/pmu/ebb/pmc56_overflow_test.c |
1146 | index c22860ab9733..30e1ac62e8cb 100644 |
1147 | --- a/tools/testing/selftests/powerpc/pmu/ebb/pmc56_overflow_test.c |
1148 | +++ b/tools/testing/selftests/powerpc/pmu/ebb/pmc56_overflow_test.c |
1149 | @@ -66,7 +66,7 @@ int pmc56_overflow(void) |
1150 | |
1151 | FAIL_IF(ebb_event_enable(&event)); |
1152 | |
1153 | - mtspr(SPRN_PMC1, pmc_sample_period(sample_period)); |
1154 | + mtspr(SPRN_PMC2, pmc_sample_period(sample_period)); |
1155 | mtspr(SPRN_PMC5, 0); |
1156 | mtspr(SPRN_PMC6, 0); |
1157 |