Annotation of /trunk/kernel-alx/patches-4.9/0255-4.9.156-all-fixes.patch
Parent Directory | Revision Log
Revision 3308 -
(hide annotations)
(download)
Tue Mar 12 10:43:14 2019 UTC (5 years, 6 months ago) by niro
File size: 125133 byte(s)
Tue Mar 12 10:43:14 2019 UTC (5 years, 6 months ago) by niro
File size: 125133 byte(s)
-linux-4.9.156
1 | niro | 3308 | diff --git a/Makefile b/Makefile |
2 | index 1933ac9c3406..956923115f7e 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 9 | ||
8 | -SUBLEVEL = 155 | ||
9 | +SUBLEVEL = 156 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Roaring Lionus | ||
12 | |||
13 | diff --git a/arch/arm/boot/dts/mmp2.dtsi b/arch/arm/boot/dts/mmp2.dtsi | ||
14 | index 766bbb8495b6..47e5b63339d1 100644 | ||
15 | --- a/arch/arm/boot/dts/mmp2.dtsi | ||
16 | +++ b/arch/arm/boot/dts/mmp2.dtsi | ||
17 | @@ -220,12 +220,15 @@ | ||
18 | status = "disabled"; | ||
19 | }; | ||
20 | |||
21 | - twsi2: i2c@d4025000 { | ||
22 | + twsi2: i2c@d4031000 { | ||
23 | compatible = "mrvl,mmp-twsi"; | ||
24 | - reg = <0xd4025000 0x1000>; | ||
25 | - interrupts = <58>; | ||
26 | + reg = <0xd4031000 0x1000>; | ||
27 | + interrupt-parent = <&intcmux17>; | ||
28 | + interrupts = <0>; | ||
29 | clocks = <&soc_clocks MMP2_CLK_TWSI1>; | ||
30 | resets = <&soc_clocks MMP2_CLK_TWSI1>; | ||
31 | + #address-cells = <1>; | ||
32 | + #size-cells = <0>; | ||
33 | status = "disabled"; | ||
34 | }; | ||
35 | |||
36 | diff --git a/arch/arm/boot/dts/omap4-sdp.dts b/arch/arm/boot/dts/omap4-sdp.dts | ||
37 | index d728ec963111..891ba75fd459 100644 | ||
38 | --- a/arch/arm/boot/dts/omap4-sdp.dts | ||
39 | +++ b/arch/arm/boot/dts/omap4-sdp.dts | ||
40 | @@ -33,6 +33,7 @@ | ||
41 | gpio = <&gpio2 16 GPIO_ACTIVE_HIGH>; /* gpio line 48 */ | ||
42 | enable-active-high; | ||
43 | regulator-boot-on; | ||
44 | + startup-delay-us = <25000>; | ||
45 | }; | ||
46 | |||
47 | vbat: fixedregulator-vbat { | ||
48 | diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c | ||
49 | index d2ce37da87d8..4b129aac7233 100644 | ||
50 | --- a/arch/arm/kernel/smp.c | ||
51 | +++ b/arch/arm/kernel/smp.c | ||
52 | @@ -690,6 +690,21 @@ void smp_send_stop(void) | ||
53 | pr_warn("SMP: failed to stop secondary CPUs\n"); | ||
54 | } | ||
55 | |||
56 | +/* In case panic() and panic() called at the same time on CPU1 and CPU2, | ||
57 | + * and CPU 1 calls panic_smp_self_stop() before crash_smp_send_stop() | ||
58 | + * CPU1 can't receive the ipi irqs from CPU2, CPU1 will be always online, | ||
59 | + * kdump fails. So split out the panic_smp_self_stop() and add | ||
60 | + * set_cpu_online(smp_processor_id(), false). | ||
61 | + */ | ||
62 | +void panic_smp_self_stop(void) | ||
63 | +{ | ||
64 | + pr_debug("CPU %u will stop doing anything useful since another CPU has paniced\n", | ||
65 | + smp_processor_id()); | ||
66 | + set_cpu_online(smp_processor_id(), false); | ||
67 | + while (1) | ||
68 | + cpu_relax(); | ||
69 | +} | ||
70 | + | ||
71 | /* | ||
72 | * not supported here | ||
73 | */ | ||
74 | diff --git a/arch/arm/kvm/mmio.c b/arch/arm/kvm/mmio.c | ||
75 | index dac7ceb1a677..08443a15e6be 100644 | ||
76 | --- a/arch/arm/kvm/mmio.c | ||
77 | +++ b/arch/arm/kvm/mmio.c | ||
78 | @@ -117,6 +117,12 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
79 | vcpu_set_reg(vcpu, vcpu->arch.mmio_decode.rt, data); | ||
80 | } | ||
81 | |||
82 | + /* | ||
83 | + * The MMIO instruction is emulated and should not be re-executed | ||
84 | + * in the guest. | ||
85 | + */ | ||
86 | + kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu)); | ||
87 | + | ||
88 | return 0; | ||
89 | } | ||
90 | |||
91 | @@ -144,11 +150,6 @@ static int decode_hsr(struct kvm_vcpu *vcpu, bool *is_write, int *len) | ||
92 | vcpu->arch.mmio_decode.sign_extend = sign_extend; | ||
93 | vcpu->arch.mmio_decode.rt = rt; | ||
94 | |||
95 | - /* | ||
96 | - * The MMIO instruction is emulated and should not be re-executed | ||
97 | - * in the guest. | ||
98 | - */ | ||
99 | - kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu)); | ||
100 | return 0; | ||
101 | } | ||
102 | |||
103 | diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c | ||
104 | index b5c1714ebfdd..bfc74954540c 100644 | ||
105 | --- a/arch/arm/mach-omap2/omap_hwmod.c | ||
106 | +++ b/arch/arm/mach-omap2/omap_hwmod.c | ||
107 | @@ -2551,7 +2551,7 @@ static int __init _init(struct omap_hwmod *oh, void *data) | ||
108 | * a stub; implementing this properly requires iclk autoidle usecounting in | ||
109 | * the clock code. No return value. | ||
110 | */ | ||
111 | -static void __init _setup_iclk_autoidle(struct omap_hwmod *oh) | ||
112 | +static void _setup_iclk_autoidle(struct omap_hwmod *oh) | ||
113 | { | ||
114 | struct omap_hwmod_ocp_if *os; | ||
115 | struct list_head *p; | ||
116 | @@ -2586,7 +2586,7 @@ static void __init _setup_iclk_autoidle(struct omap_hwmod *oh) | ||
117 | * reset. Returns 0 upon success or a negative error code upon | ||
118 | * failure. | ||
119 | */ | ||
120 | -static int __init _setup_reset(struct omap_hwmod *oh) | ||
121 | +static int _setup_reset(struct omap_hwmod *oh) | ||
122 | { | ||
123 | int r; | ||
124 | |||
125 | @@ -2647,7 +2647,7 @@ static int __init _setup_reset(struct omap_hwmod *oh) | ||
126 | * | ||
127 | * No return value. | ||
128 | */ | ||
129 | -static void __init _setup_postsetup(struct omap_hwmod *oh) | ||
130 | +static void _setup_postsetup(struct omap_hwmod *oh) | ||
131 | { | ||
132 | u8 postsetup_state; | ||
133 | |||
134 | diff --git a/arch/arm/mach-pxa/cm-x300.c b/arch/arm/mach-pxa/cm-x300.c | ||
135 | index 868448d2cd82..38ab30869821 100644 | ||
136 | --- a/arch/arm/mach-pxa/cm-x300.c | ||
137 | +++ b/arch/arm/mach-pxa/cm-x300.c | ||
138 | @@ -547,7 +547,7 @@ static struct pxa3xx_u2d_platform_data cm_x300_u2d_platform_data = { | ||
139 | .exit = cm_x300_u2d_exit, | ||
140 | }; | ||
141 | |||
142 | -static void cm_x300_init_u2d(void) | ||
143 | +static void __init cm_x300_init_u2d(void) | ||
144 | { | ||
145 | pxa3xx_set_u2d_info(&cm_x300_u2d_platform_data); | ||
146 | } | ||
147 | diff --git a/arch/arm/mach-pxa/littleton.c b/arch/arm/mach-pxa/littleton.c | ||
148 | index 051c554776a6..ebdef6661f5f 100644 | ||
149 | --- a/arch/arm/mach-pxa/littleton.c | ||
150 | +++ b/arch/arm/mach-pxa/littleton.c | ||
151 | @@ -183,7 +183,7 @@ static struct pxafb_mach_info littleton_lcd_info = { | ||
152 | .lcd_conn = LCD_COLOR_TFT_16BPP, | ||
153 | }; | ||
154 | |||
155 | -static void littleton_init_lcd(void) | ||
156 | +static void __init littleton_init_lcd(void) | ||
157 | { | ||
158 | pxa_set_fb_info(NULL, &littleton_lcd_info); | ||
159 | } | ||
160 | diff --git a/arch/arm/mach-pxa/zeus.c b/arch/arm/mach-pxa/zeus.c | ||
161 | index 3b94ecfb9426..3fcd5854bf5b 100644 | ||
162 | --- a/arch/arm/mach-pxa/zeus.c | ||
163 | +++ b/arch/arm/mach-pxa/zeus.c | ||
164 | @@ -557,7 +557,7 @@ static struct pxaohci_platform_data zeus_ohci_platform_data = { | ||
165 | .flags = ENABLE_PORT_ALL | POWER_SENSE_LOW, | ||
166 | }; | ||
167 | |||
168 | -static void zeus_register_ohci(void) | ||
169 | +static void __init zeus_register_ohci(void) | ||
170 | { | ||
171 | /* Port 2 is shared between host and client interface. */ | ||
172 | UP2OCR = UP2OCR_HXOE | UP2OCR_HXS | UP2OCR_DMPDE | UP2OCR_DPPDE; | ||
173 | diff --git a/arch/arm64/kernel/entry-ftrace.S b/arch/arm64/kernel/entry-ftrace.S | ||
174 | index aef02d2af3b5..7a87d32e98f4 100644 | ||
175 | --- a/arch/arm64/kernel/entry-ftrace.S | ||
176 | +++ b/arch/arm64/kernel/entry-ftrace.S | ||
177 | @@ -78,7 +78,6 @@ | ||
178 | .macro mcount_get_lr reg | ||
179 | ldr \reg, [x29] | ||
180 | ldr \reg, [\reg, #8] | ||
181 | - mcount_adjust_addr \reg, \reg | ||
182 | .endm | ||
183 | |||
184 | .macro mcount_get_lr_addr reg | ||
185 | diff --git a/arch/mips/include/uapi/asm/inst.h b/arch/mips/include/uapi/asm/inst.h | ||
186 | index 711d9b8465b8..377d5179ea3b 100644 | ||
187 | --- a/arch/mips/include/uapi/asm/inst.h | ||
188 | +++ b/arch/mips/include/uapi/asm/inst.h | ||
189 | @@ -361,8 +361,8 @@ enum mm_32a_minor_op { | ||
190 | mm_ext_op = 0x02c, | ||
191 | mm_pool32axf_op = 0x03c, | ||
192 | mm_srl32_op = 0x040, | ||
193 | + mm_srlv32_op = 0x050, | ||
194 | mm_sra_op = 0x080, | ||
195 | - mm_srlv32_op = 0x090, | ||
196 | mm_rotr_op = 0x0c0, | ||
197 | mm_lwxs_op = 0x118, | ||
198 | mm_addu32_op = 0x150, | ||
199 | diff --git a/arch/mips/ralink/Kconfig b/arch/mips/ralink/Kconfig | ||
200 | index 813826a456ca..55a5fee781e8 100644 | ||
201 | --- a/arch/mips/ralink/Kconfig | ||
202 | +++ b/arch/mips/ralink/Kconfig | ||
203 | @@ -38,6 +38,7 @@ choice | ||
204 | |||
205 | config SOC_MT7620 | ||
206 | bool "MT7620/8" | ||
207 | + select CPU_MIPSR2_IRQ_VI | ||
208 | select HW_HAS_PCI | ||
209 | |||
210 | config SOC_MT7621 | ||
211 | diff --git a/arch/powerpc/include/asm/uaccess.h b/arch/powerpc/include/asm/uaccess.h | ||
212 | index c266227fdd5b..31913b3ac7ab 100644 | ||
213 | --- a/arch/powerpc/include/asm/uaccess.h | ||
214 | +++ b/arch/powerpc/include/asm/uaccess.h | ||
215 | @@ -59,7 +59,7 @@ | ||
216 | #endif | ||
217 | |||
218 | #define access_ok(type, addr, size) \ | ||
219 | - (__chk_user_ptr(addr), \ | ||
220 | + (__chk_user_ptr(addr), (void)(type), \ | ||
221 | __access_ok((__force unsigned long)(addr), (size), get_fs())) | ||
222 | |||
223 | /* | ||
224 | diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c | ||
225 | index 72ae2cdbcd6a..999b04819d69 100644 | ||
226 | --- a/arch/powerpc/platforms/pseries/dlpar.c | ||
227 | +++ b/arch/powerpc/platforms/pseries/dlpar.c | ||
228 | @@ -288,6 +288,8 @@ int dlpar_detach_node(struct device_node *dn) | ||
229 | if (rc) | ||
230 | return rc; | ||
231 | |||
232 | + of_node_put(dn); | ||
233 | + | ||
234 | return 0; | ||
235 | } | ||
236 | |||
237 | diff --git a/arch/um/include/asm/pgtable.h b/arch/um/include/asm/pgtable.h | ||
238 | index 7485398d0737..9c04562310b3 100644 | ||
239 | --- a/arch/um/include/asm/pgtable.h | ||
240 | +++ b/arch/um/include/asm/pgtable.h | ||
241 | @@ -197,12 +197,17 @@ static inline pte_t pte_mkold(pte_t pte) | ||
242 | |||
243 | static inline pte_t pte_wrprotect(pte_t pte) | ||
244 | { | ||
245 | - pte_clear_bits(pte, _PAGE_RW); | ||
246 | + if (likely(pte_get_bits(pte, _PAGE_RW))) | ||
247 | + pte_clear_bits(pte, _PAGE_RW); | ||
248 | + else | ||
249 | + return pte; | ||
250 | return(pte_mknewprot(pte)); | ||
251 | } | ||
252 | |||
253 | static inline pte_t pte_mkread(pte_t pte) | ||
254 | { | ||
255 | + if (unlikely(pte_get_bits(pte, _PAGE_USER))) | ||
256 | + return pte; | ||
257 | pte_set_bits(pte, _PAGE_USER); | ||
258 | return(pte_mknewprot(pte)); | ||
259 | } | ||
260 | @@ -221,6 +226,8 @@ static inline pte_t pte_mkyoung(pte_t pte) | ||
261 | |||
262 | static inline pte_t pte_mkwrite(pte_t pte) | ||
263 | { | ||
264 | + if (unlikely(pte_get_bits(pte, _PAGE_RW))) | ||
265 | + return pte; | ||
266 | pte_set_bits(pte, _PAGE_RW); | ||
267 | return(pte_mknewprot(pte)); | ||
268 | } | ||
269 | diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c | ||
270 | index 4f8560774082..f600ab601e00 100644 | ||
271 | --- a/arch/x86/events/intel/core.c | ||
272 | +++ b/arch/x86/events/intel/core.c | ||
273 | @@ -3234,6 +3234,11 @@ static void free_excl_cntrs(int cpu) | ||
274 | } | ||
275 | |||
276 | static void intel_pmu_cpu_dying(int cpu) | ||
277 | +{ | ||
278 | + fini_debug_store_on_cpu(cpu); | ||
279 | +} | ||
280 | + | ||
281 | +static void intel_pmu_cpu_dead(int cpu) | ||
282 | { | ||
283 | struct cpu_hw_events *cpuc = &per_cpu(cpu_hw_events, cpu); | ||
284 | struct intel_shared_regs *pc; | ||
285 | @@ -3246,8 +3251,6 @@ static void intel_pmu_cpu_dying(int cpu) | ||
286 | } | ||
287 | |||
288 | free_excl_cntrs(cpu); | ||
289 | - | ||
290 | - fini_debug_store_on_cpu(cpu); | ||
291 | } | ||
292 | |||
293 | static void intel_pmu_sched_task(struct perf_event_context *ctx, | ||
294 | @@ -3324,6 +3327,7 @@ static __initconst const struct x86_pmu core_pmu = { | ||
295 | .cpu_prepare = intel_pmu_cpu_prepare, | ||
296 | .cpu_starting = intel_pmu_cpu_starting, | ||
297 | .cpu_dying = intel_pmu_cpu_dying, | ||
298 | + .cpu_dead = intel_pmu_cpu_dead, | ||
299 | }; | ||
300 | |||
301 | static __initconst const struct x86_pmu intel_pmu = { | ||
302 | @@ -3359,6 +3363,8 @@ static __initconst const struct x86_pmu intel_pmu = { | ||
303 | .cpu_prepare = intel_pmu_cpu_prepare, | ||
304 | .cpu_starting = intel_pmu_cpu_starting, | ||
305 | .cpu_dying = intel_pmu_cpu_dying, | ||
306 | + .cpu_dead = intel_pmu_cpu_dead, | ||
307 | + | ||
308 | .guest_get_msrs = intel_guest_get_msrs, | ||
309 | .sched_task = intel_pmu_sched_task, | ||
310 | }; | ||
311 | diff --git a/arch/x86/events/intel/uncore_snbep.c b/arch/x86/events/intel/uncore_snbep.c | ||
312 | index 8c2a9fa0caf3..686dd4339370 100644 | ||
313 | --- a/arch/x86/events/intel/uncore_snbep.c | ||
314 | +++ b/arch/x86/events/intel/uncore_snbep.c | ||
315 | @@ -1221,6 +1221,8 @@ static struct pci_driver snbep_uncore_pci_driver = { | ||
316 | .id_table = snbep_uncore_pci_ids, | ||
317 | }; | ||
318 | |||
319 | +#define NODE_ID_MASK 0x7 | ||
320 | + | ||
321 | /* | ||
322 | * build pci bus to socket mapping | ||
323 | */ | ||
324 | @@ -1242,7 +1244,7 @@ static int snbep_pci2phy_map_init(int devid, int nodeid_loc, int idmap_loc, bool | ||
325 | err = pci_read_config_dword(ubox_dev, nodeid_loc, &config); | ||
326 | if (err) | ||
327 | break; | ||
328 | - nodeid = config; | ||
329 | + nodeid = config & NODE_ID_MASK; | ||
330 | /* get the Node ID mapping */ | ||
331 | err = pci_read_config_dword(ubox_dev, idmap_loc, &config); | ||
332 | if (err) | ||
333 | diff --git a/arch/x86/include/asm/fpu/internal.h b/arch/x86/include/asm/fpu/internal.h | ||
334 | index 499d6ed0e376..21d6fa27b4a9 100644 | ||
335 | --- a/arch/x86/include/asm/fpu/internal.h | ||
336 | +++ b/arch/x86/include/asm/fpu/internal.h | ||
337 | @@ -97,6 +97,9 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu); | ||
338 | #define user_insn(insn, output, input...) \ | ||
339 | ({ \ | ||
340 | int err; \ | ||
341 | + \ | ||
342 | + might_fault(); \ | ||
343 | + \ | ||
344 | asm volatile(ASM_STAC "\n" \ | ||
345 | "1:" #insn "\n\t" \ | ||
346 | "2: " ASM_CLAC "\n" \ | ||
347 | diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c | ||
348 | index 7e6163c9d434..25310d2b8609 100644 | ||
349 | --- a/arch/x86/kernel/cpu/mcheck/mce.c | ||
350 | +++ b/arch/x86/kernel/cpu/mcheck/mce.c | ||
351 | @@ -751,6 +751,7 @@ static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp, | ||
352 | quirk_no_way_out(i, m, regs); | ||
353 | |||
354 | if (mce_severity(m, mca_cfg.tolerant, &tmp, true) >= MCE_PANIC_SEVERITY) { | ||
355 | + m->bank = i; | ||
356 | mce_read_aux(m, i); | ||
357 | *msg = tmp; | ||
358 | return 1; | ||
359 | diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c | ||
360 | index fa1b0e3c8a06..c8efacf2e65f 100644 | ||
361 | --- a/arch/x86/kvm/svm.c | ||
362 | +++ b/arch/x86/kvm/svm.c | ||
363 | @@ -5223,6 +5223,13 @@ static bool svm_cpu_has_accelerated_tpr(void) | ||
364 | |||
365 | static bool svm_has_emulated_msr(int index) | ||
366 | { | ||
367 | + switch (index) { | ||
368 | + case MSR_IA32_MCG_EXT_CTL: | ||
369 | + return false; | ||
370 | + default: | ||
371 | + break; | ||
372 | + } | ||
373 | + | ||
374 | return true; | ||
375 | } | ||
376 | |||
377 | diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c | ||
378 | index 9446a3a2fc69..91db841101ca 100644 | ||
379 | --- a/arch/x86/kvm/vmx.c | ||
380 | +++ b/arch/x86/kvm/vmx.c | ||
381 | @@ -7368,6 +7368,7 @@ static void free_nested(struct vcpu_vmx *vmx) | ||
382 | if (!vmx->nested.vmxon) | ||
383 | return; | ||
384 | |||
385 | + hrtimer_cancel(&vmx->nested.preemption_timer); | ||
386 | vmx->nested.vmxon = false; | ||
387 | free_vpid(vmx->nested.vpid02); | ||
388 | nested_release_vmcs12(vmx); | ||
389 | diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c | ||
390 | index 851e9d6c864f..5a35fee46620 100644 | ||
391 | --- a/arch/x86/kvm/x86.c | ||
392 | +++ b/arch/x86/kvm/x86.c | ||
393 | @@ -4513,6 +4513,13 @@ int kvm_read_guest_virt(struct kvm_vcpu *vcpu, | ||
394 | { | ||
395 | u32 access = (kvm_x86_ops->get_cpl(vcpu) == 3) ? PFERR_USER_MASK : 0; | ||
396 | |||
397 | + /* | ||
398 | + * FIXME: this should call handle_emulation_failure if X86EMUL_IO_NEEDED | ||
399 | + * is returned, but our callers are not ready for that and they blindly | ||
400 | + * call kvm_inject_page_fault. Ensure that they at least do not leak | ||
401 | + * uninitialized kernel stack memory into cr2 and error code. | ||
402 | + */ | ||
403 | + memset(exception, 0, sizeof(*exception)); | ||
404 | return kvm_read_guest_virt_helper(addr, val, bytes, vcpu, access, | ||
405 | exception); | ||
406 | } | ||
407 | diff --git a/arch/x86/pci/broadcom_bus.c b/arch/x86/pci/broadcom_bus.c | ||
408 | index 526536c81ddc..ca1e8e6dccc8 100644 | ||
409 | --- a/arch/x86/pci/broadcom_bus.c | ||
410 | +++ b/arch/x86/pci/broadcom_bus.c | ||
411 | @@ -50,8 +50,8 @@ static void __init cnb20le_res(u8 bus, u8 slot, u8 func) | ||
412 | word1 = read_pci_config_16(bus, slot, func, 0xc0); | ||
413 | word2 = read_pci_config_16(bus, slot, func, 0xc2); | ||
414 | if (word1 != word2) { | ||
415 | - res.start = (word1 << 16) | 0x0000; | ||
416 | - res.end = (word2 << 16) | 0xffff; | ||
417 | + res.start = ((resource_size_t) word1 << 16) | 0x0000; | ||
418 | + res.end = ((resource_size_t) word2 << 16) | 0xffff; | ||
419 | res.flags = IORESOURCE_MEM; | ||
420 | update_res(info, res.start, res.end, res.flags, 0); | ||
421 | } | ||
422 | diff --git a/drivers/ata/sata_rcar.c b/drivers/ata/sata_rcar.c | ||
423 | index e83a3d3421b9..07e146b772ea 100644 | ||
424 | --- a/drivers/ata/sata_rcar.c | ||
425 | +++ b/drivers/ata/sata_rcar.c | ||
426 | @@ -872,7 +872,9 @@ static int sata_rcar_probe(struct platform_device *pdev) | ||
427 | int ret = 0; | ||
428 | |||
429 | irq = platform_get_irq(pdev, 0); | ||
430 | - if (irq <= 0) | ||
431 | + if (irq < 0) | ||
432 | + return irq; | ||
433 | + if (!irq) | ||
434 | return -EINVAL; | ||
435 | |||
436 | priv = devm_kzalloc(&pdev->dev, sizeof(struct sata_rcar_priv), | ||
437 | diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c | ||
438 | index f35db29cac76..abee91940a36 100644 | ||
439 | --- a/drivers/block/drbd/drbd_nl.c | ||
440 | +++ b/drivers/block/drbd/drbd_nl.c | ||
441 | @@ -668,14 +668,15 @@ drbd_set_role(struct drbd_device *const device, enum drbd_role new_role, int for | ||
442 | if (rv == SS_TWO_PRIMARIES) { | ||
443 | /* Maybe the peer is detected as dead very soon... | ||
444 | retry at most once more in this case. */ | ||
445 | - int timeo; | ||
446 | - rcu_read_lock(); | ||
447 | - nc = rcu_dereference(connection->net_conf); | ||
448 | - timeo = nc ? (nc->ping_timeo + 1) * HZ / 10 : 1; | ||
449 | - rcu_read_unlock(); | ||
450 | - schedule_timeout_interruptible(timeo); | ||
451 | - if (try < max_tries) | ||
452 | + if (try < max_tries) { | ||
453 | + int timeo; | ||
454 | try = max_tries - 1; | ||
455 | + rcu_read_lock(); | ||
456 | + nc = rcu_dereference(connection->net_conf); | ||
457 | + timeo = nc ? (nc->ping_timeo + 1) * HZ / 10 : 1; | ||
458 | + rcu_read_unlock(); | ||
459 | + schedule_timeout_interruptible(timeo); | ||
460 | + } | ||
461 | continue; | ||
462 | } | ||
463 | if (rv < SS_SUCCESS) { | ||
464 | diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c | ||
465 | index 942384f34e22..83957a1e15ed 100644 | ||
466 | --- a/drivers/block/drbd/drbd_receiver.c | ||
467 | +++ b/drivers/block/drbd/drbd_receiver.c | ||
468 | @@ -3421,7 +3421,7 @@ static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device, | ||
469 | enum drbd_conns rv = C_MASK; | ||
470 | enum drbd_disk_state mydisk; | ||
471 | struct net_conf *nc; | ||
472 | - int hg, rule_nr, rr_conflict, tentative; | ||
473 | + int hg, rule_nr, rr_conflict, tentative, always_asbp; | ||
474 | |||
475 | mydisk = device->state.disk; | ||
476 | if (mydisk == D_NEGOTIATING) | ||
477 | @@ -3472,8 +3472,12 @@ static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device, | ||
478 | |||
479 | rcu_read_lock(); | ||
480 | nc = rcu_dereference(peer_device->connection->net_conf); | ||
481 | + always_asbp = nc->always_asbp; | ||
482 | + rr_conflict = nc->rr_conflict; | ||
483 | + tentative = nc->tentative; | ||
484 | + rcu_read_unlock(); | ||
485 | |||
486 | - if (hg == 100 || (hg == -100 && nc->always_asbp)) { | ||
487 | + if (hg == 100 || (hg == -100 && always_asbp)) { | ||
488 | int pcount = (device->state.role == R_PRIMARY) | ||
489 | + (peer_role == R_PRIMARY); | ||
490 | int forced = (hg == -100); | ||
491 | @@ -3512,9 +3516,6 @@ static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device, | ||
492 | "Sync from %s node\n", | ||
493 | (hg < 0) ? "peer" : "this"); | ||
494 | } | ||
495 | - rr_conflict = nc->rr_conflict; | ||
496 | - tentative = nc->tentative; | ||
497 | - rcu_read_unlock(); | ||
498 | |||
499 | if (hg == -100) { | ||
500 | /* FIXME this log message is not correct if we end up here | ||
501 | @@ -4198,7 +4199,7 @@ static int receive_uuids(struct drbd_connection *connection, struct packet_info | ||
502 | kfree(device->p_uuid); | ||
503 | device->p_uuid = p_uuid; | ||
504 | |||
505 | - if (device->state.conn < C_CONNECTED && | ||
506 | + if ((device->state.conn < C_CONNECTED || device->state.pdsk == D_DISKLESS) && | ||
507 | device->state.disk < D_INCONSISTENT && | ||
508 | device->state.role == R_PRIMARY && | ||
509 | (device->ed_uuid & ~((u64)1)) != (p_uuid[UI_CURRENT] & ~((u64)1))) { | ||
510 | diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c | ||
511 | index cab157331c4e..c6d43a2a807d 100644 | ||
512 | --- a/drivers/block/sunvdc.c | ||
513 | +++ b/drivers/block/sunvdc.c | ||
514 | @@ -40,6 +40,8 @@ MODULE_VERSION(DRV_MODULE_VERSION); | ||
515 | #define WAITING_FOR_GEN_CMD 0x04 | ||
516 | #define WAITING_FOR_ANY -1 | ||
517 | |||
518 | +#define VDC_MAX_RETRIES 10 | ||
519 | + | ||
520 | static struct workqueue_struct *sunvdc_wq; | ||
521 | |||
522 | struct vdc_req_entry { | ||
523 | @@ -419,6 +421,7 @@ static int __vdc_tx_trigger(struct vdc_port *port) | ||
524 | .end_idx = dr->prod, | ||
525 | }; | ||
526 | int err, delay; | ||
527 | + int retries = 0; | ||
528 | |||
529 | hdr.seq = dr->snd_nxt; | ||
530 | delay = 1; | ||
531 | @@ -431,6 +434,8 @@ static int __vdc_tx_trigger(struct vdc_port *port) | ||
532 | udelay(delay); | ||
533 | if ((delay <<= 1) > 128) | ||
534 | delay = 128; | ||
535 | + if (retries++ > VDC_MAX_RETRIES) | ||
536 | + break; | ||
537 | } while (err == -EAGAIN); | ||
538 | |||
539 | if (err == -ENOTCONN) | ||
540 | diff --git a/drivers/block/swim3.c b/drivers/block/swim3.c | ||
541 | index c264f2d284a7..2e0a9e2531cb 100644 | ||
542 | --- a/drivers/block/swim3.c | ||
543 | +++ b/drivers/block/swim3.c | ||
544 | @@ -1027,7 +1027,11 @@ static void floppy_release(struct gendisk *disk, fmode_t mode) | ||
545 | struct swim3 __iomem *sw = fs->swim3; | ||
546 | |||
547 | mutex_lock(&swim3_mutex); | ||
548 | - if (fs->ref_count > 0 && --fs->ref_count == 0) { | ||
549 | + if (fs->ref_count > 0) | ||
550 | + --fs->ref_count; | ||
551 | + else if (fs->ref_count == -1) | ||
552 | + fs->ref_count = 0; | ||
553 | + if (fs->ref_count == 0) { | ||
554 | swim3_action(fs, MOTOR_OFF); | ||
555 | out_8(&sw->control_bic, 0xff); | ||
556 | swim3_select(fs, RELAX); | ||
557 | diff --git a/drivers/cdrom/gdrom.c b/drivers/cdrom/gdrom.c | ||
558 | index e2808fefbb78..1852d19d0d7b 100644 | ||
559 | --- a/drivers/cdrom/gdrom.c | ||
560 | +++ b/drivers/cdrom/gdrom.c | ||
561 | @@ -882,6 +882,7 @@ static void __exit exit_gdrom(void) | ||
562 | platform_device_unregister(pd); | ||
563 | platform_driver_unregister(&gdrom_driver); | ||
564 | kfree(gd.toc); | ||
565 | + kfree(gd.cd_info); | ||
566 | } | ||
567 | |||
568 | module_init(init_gdrom); | ||
569 | diff --git a/drivers/clk/imx/clk-imx6sl.c b/drivers/clk/imx/clk-imx6sl.c | ||
570 | index 5fd4ddac1bf1..f3d9dc2d2405 100644 | ||
571 | --- a/drivers/clk/imx/clk-imx6sl.c | ||
572 | +++ b/drivers/clk/imx/clk-imx6sl.c | ||
573 | @@ -17,6 +17,8 @@ | ||
574 | |||
575 | #include "clk.h" | ||
576 | |||
577 | +#define CCDR 0x4 | ||
578 | +#define BM_CCM_CCDR_MMDC_CH0_MASK (1 << 17) | ||
579 | #define CCSR 0xc | ||
580 | #define BM_CCSR_PLL1_SW_CLK_SEL (1 << 2) | ||
581 | #define CACRR 0x10 | ||
582 | @@ -414,6 +416,10 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node) | ||
583 | clks[IMX6SL_CLK_USDHC3] = imx_clk_gate2("usdhc3", "usdhc3_podf", base + 0x80, 6); | ||
584 | clks[IMX6SL_CLK_USDHC4] = imx_clk_gate2("usdhc4", "usdhc4_podf", base + 0x80, 8); | ||
585 | |||
586 | + /* Ensure the MMDC CH0 handshake is bypassed */ | ||
587 | + writel_relaxed(readl_relaxed(base + CCDR) | | ||
588 | + BM_CCM_CCDR_MMDC_CH0_MASK, base + CCDR); | ||
589 | + | ||
590 | imx_check_clocks(clks, ARRAY_SIZE(clks)); | ||
591 | |||
592 | clk_data.clks = clks; | ||
593 | diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-a33.c b/drivers/clk/sunxi-ng/ccu-sun8i-a33.c | ||
594 | index e1dc4e5b34e1..82add4670c53 100644 | ||
595 | --- a/drivers/clk/sunxi-ng/ccu-sun8i-a33.c | ||
596 | +++ b/drivers/clk/sunxi-ng/ccu-sun8i-a33.c | ||
597 | @@ -362,10 +362,10 @@ static SUNXI_CCU_MP_WITH_MUX_GATE(spi1_clk, "spi1", mod0_default_parents, 0x0a4, | ||
598 | static const char * const i2s_parents[] = { "pll-audio-8x", "pll-audio-4x", | ||
599 | "pll-audio-2x", "pll-audio" }; | ||
600 | static SUNXI_CCU_MUX_WITH_GATE(i2s0_clk, "i2s0", i2s_parents, | ||
601 | - 0x0b0, 16, 2, BIT(31), 0); | ||
602 | + 0x0b0, 16, 2, BIT(31), CLK_SET_RATE_PARENT); | ||
603 | |||
604 | static SUNXI_CCU_MUX_WITH_GATE(i2s1_clk, "i2s1", i2s_parents, | ||
605 | - 0x0b4, 16, 2, BIT(31), 0); | ||
606 | + 0x0b4, 16, 2, BIT(31), CLK_SET_RATE_PARENT); | ||
607 | |||
608 | /* TODO: the parent for most of the USB clocks is not known */ | ||
609 | static SUNXI_CCU_GATE(usb_phy0_clk, "usb-phy0", "osc24M", | ||
610 | @@ -442,7 +442,7 @@ static SUNXI_CCU_M_WITH_GATE(ve_clk, "ve", "pll-ve", | ||
611 | static SUNXI_CCU_GATE(ac_dig_clk, "ac-dig", "pll-audio", | ||
612 | 0x140, BIT(31), 0); | ||
613 | static SUNXI_CCU_GATE(ac_dig_4x_clk, "ac-dig-4x", "pll-audio-4x", | ||
614 | - 0x140, BIT(30), 0); | ||
615 | + 0x140, BIT(30), CLK_SET_RATE_PARENT); | ||
616 | static SUNXI_CCU_GATE(avs_clk, "avs", "osc24M", | ||
617 | 0x144, BIT(31), 0); | ||
618 | |||
619 | diff --git a/drivers/cpuidle/cpuidle-big_little.c b/drivers/cpuidle/cpuidle-big_little.c | ||
620 | index db2ede565f1a..b44476a1b7ad 100644 | ||
621 | --- a/drivers/cpuidle/cpuidle-big_little.c | ||
622 | +++ b/drivers/cpuidle/cpuidle-big_little.c | ||
623 | @@ -167,6 +167,7 @@ static int __init bl_idle_init(void) | ||
624 | { | ||
625 | int ret; | ||
626 | struct device_node *root = of_find_node_by_path("/"); | ||
627 | + const struct of_device_id *match_id; | ||
628 | |||
629 | if (!root) | ||
630 | return -ENODEV; | ||
631 | @@ -174,7 +175,11 @@ static int __init bl_idle_init(void) | ||
632 | /* | ||
633 | * Initialize the driver just for a compliant set of machines | ||
634 | */ | ||
635 | - if (!of_match_node(compatible_machine_match, root)) | ||
636 | + match_id = of_match_node(compatible_machine_match, root); | ||
637 | + | ||
638 | + of_node_put(root); | ||
639 | + | ||
640 | + if (!match_id) | ||
641 | return -ENODEV; | ||
642 | |||
643 | if (!mcpm_is_available()) | ||
644 | diff --git a/drivers/crypto/ux500/cryp/cryp_core.c b/drivers/crypto/ux500/cryp/cryp_core.c | ||
645 | index 790f7cadc1ed..efebc484e371 100644 | ||
646 | --- a/drivers/crypto/ux500/cryp/cryp_core.c | ||
647 | +++ b/drivers/crypto/ux500/cryp/cryp_core.c | ||
648 | @@ -555,7 +555,7 @@ static int cryp_set_dma_transfer(struct cryp_ctx *ctx, | ||
649 | desc = dmaengine_prep_slave_sg(channel, | ||
650 | ctx->device->dma.sg_src, | ||
651 | ctx->device->dma.sg_src_len, | ||
652 | - direction, DMA_CTRL_ACK); | ||
653 | + DMA_MEM_TO_DEV, DMA_CTRL_ACK); | ||
654 | break; | ||
655 | |||
656 | case DMA_FROM_DEVICE: | ||
657 | @@ -579,7 +579,7 @@ static int cryp_set_dma_transfer(struct cryp_ctx *ctx, | ||
658 | desc = dmaengine_prep_slave_sg(channel, | ||
659 | ctx->device->dma.sg_dst, | ||
660 | ctx->device->dma.sg_dst_len, | ||
661 | - direction, | ||
662 | + DMA_DEV_TO_MEM, | ||
663 | DMA_CTRL_ACK | | ||
664 | DMA_PREP_INTERRUPT); | ||
665 | |||
666 | diff --git a/drivers/crypto/ux500/hash/hash_core.c b/drivers/crypto/ux500/hash/hash_core.c | ||
667 | index 9acccad26928..17c8e2b28c42 100644 | ||
668 | --- a/drivers/crypto/ux500/hash/hash_core.c | ||
669 | +++ b/drivers/crypto/ux500/hash/hash_core.c | ||
670 | @@ -165,7 +165,7 @@ static int hash_set_dma_transfer(struct hash_ctx *ctx, struct scatterlist *sg, | ||
671 | __func__); | ||
672 | desc = dmaengine_prep_slave_sg(channel, | ||
673 | ctx->device->dma.sg, ctx->device->dma.sg_len, | ||
674 | - direction, DMA_CTRL_ACK | DMA_PREP_INTERRUPT); | ||
675 | + DMA_MEM_TO_DEV, DMA_CTRL_ACK | DMA_PREP_INTERRUPT); | ||
676 | if (!desc) { | ||
677 | dev_err(ctx->device->dev, | ||
678 | "%s: dmaengine_prep_slave_sg() failed!\n", __func__); | ||
679 | diff --git a/drivers/dma/bcm2835-dma.c b/drivers/dma/bcm2835-dma.c | ||
680 | index 6204cc32d09c..6ba53bbd0e16 100644 | ||
681 | --- a/drivers/dma/bcm2835-dma.c | ||
682 | +++ b/drivers/dma/bcm2835-dma.c | ||
683 | @@ -415,38 +415,32 @@ static void bcm2835_dma_fill_cb_chain_with_sg( | ||
684 | } | ||
685 | } | ||
686 | |||
687 | -static int bcm2835_dma_abort(void __iomem *chan_base) | ||
688 | +static int bcm2835_dma_abort(struct bcm2835_chan *c) | ||
689 | { | ||
690 | - unsigned long cs; | ||
691 | + void __iomem *chan_base = c->chan_base; | ||
692 | long int timeout = 10000; | ||
693 | |||
694 | - cs = readl(chan_base + BCM2835_DMA_CS); | ||
695 | - if (!(cs & BCM2835_DMA_ACTIVE)) | ||
696 | + /* | ||
697 | + * A zero control block address means the channel is idle. | ||
698 | + * (The ACTIVE flag in the CS register is not a reliable indicator.) | ||
699 | + */ | ||
700 | + if (!readl(chan_base + BCM2835_DMA_ADDR)) | ||
701 | return 0; | ||
702 | |||
703 | /* Write 0 to the active bit - Pause the DMA */ | ||
704 | writel(0, chan_base + BCM2835_DMA_CS); | ||
705 | |||
706 | /* Wait for any current AXI transfer to complete */ | ||
707 | - while ((cs & BCM2835_DMA_ISPAUSED) && --timeout) { | ||
708 | + while ((readl(chan_base + BCM2835_DMA_CS) & | ||
709 | + BCM2835_DMA_WAITING_FOR_WRITES) && --timeout) | ||
710 | cpu_relax(); | ||
711 | - cs = readl(chan_base + BCM2835_DMA_CS); | ||
712 | - } | ||
713 | |||
714 | - /* We'll un-pause when we set of our next DMA */ | ||
715 | + /* Peripheral might be stuck and fail to signal AXI write responses */ | ||
716 | if (!timeout) | ||
717 | - return -ETIMEDOUT; | ||
718 | - | ||
719 | - if (!(cs & BCM2835_DMA_ACTIVE)) | ||
720 | - return 0; | ||
721 | - | ||
722 | - /* Terminate the control block chain */ | ||
723 | - writel(0, chan_base + BCM2835_DMA_NEXTCB); | ||
724 | - | ||
725 | - /* Abort the whole DMA */ | ||
726 | - writel(BCM2835_DMA_ABORT | BCM2835_DMA_ACTIVE, | ||
727 | - chan_base + BCM2835_DMA_CS); | ||
728 | + dev_err(c->vc.chan.device->dev, | ||
729 | + "failed to complete outstanding writes\n"); | ||
730 | |||
731 | + writel(BCM2835_DMA_RESET, chan_base + BCM2835_DMA_CS); | ||
732 | return 0; | ||
733 | } | ||
734 | |||
735 | @@ -485,8 +479,15 @@ static irqreturn_t bcm2835_dma_callback(int irq, void *data) | ||
736 | |||
737 | spin_lock_irqsave(&c->vc.lock, flags); | ||
738 | |||
739 | - /* Acknowledge interrupt */ | ||
740 | - writel(BCM2835_DMA_INT, c->chan_base + BCM2835_DMA_CS); | ||
741 | + /* | ||
742 | + * Clear the INT flag to receive further interrupts. Keep the channel | ||
743 | + * active in case the descriptor is cyclic or in case the client has | ||
744 | + * already terminated the descriptor and issued a new one. (May happen | ||
745 | + * if this IRQ handler is threaded.) If the channel is finished, it | ||
746 | + * will remain idle despite the ACTIVE flag being set. | ||
747 | + */ | ||
748 | + writel(BCM2835_DMA_INT | BCM2835_DMA_ACTIVE, | ||
749 | + c->chan_base + BCM2835_DMA_CS); | ||
750 | |||
751 | d = c->desc; | ||
752 | |||
753 | @@ -494,11 +495,7 @@ static irqreturn_t bcm2835_dma_callback(int irq, void *data) | ||
754 | if (d->cyclic) { | ||
755 | /* call the cyclic callback */ | ||
756 | vchan_cyclic_callback(&d->vd); | ||
757 | - | ||
758 | - /* Keep the DMA engine running */ | ||
759 | - writel(BCM2835_DMA_ACTIVE, | ||
760 | - c->chan_base + BCM2835_DMA_CS); | ||
761 | - } else { | ||
762 | + } else if (!readl(c->chan_base + BCM2835_DMA_ADDR)) { | ||
763 | vchan_cookie_complete(&c->desc->vd); | ||
764 | bcm2835_dma_start_desc(c); | ||
765 | } | ||
766 | @@ -796,7 +793,6 @@ static int bcm2835_dma_terminate_all(struct dma_chan *chan) | ||
767 | struct bcm2835_chan *c = to_bcm2835_dma_chan(chan); | ||
768 | struct bcm2835_dmadev *d = to_bcm2835_dma_dev(c->vc.chan.device); | ||
769 | unsigned long flags; | ||
770 | - int timeout = 10000; | ||
771 | LIST_HEAD(head); | ||
772 | |||
773 | spin_lock_irqsave(&c->vc.lock, flags); | ||
774 | @@ -806,27 +802,11 @@ static int bcm2835_dma_terminate_all(struct dma_chan *chan) | ||
775 | list_del_init(&c->node); | ||
776 | spin_unlock(&d->lock); | ||
777 | |||
778 | - /* | ||
779 | - * Stop DMA activity: we assume the callback will not be called | ||
780 | - * after bcm_dma_abort() returns (even if it does, it will see | ||
781 | - * c->desc is NULL and exit.) | ||
782 | - */ | ||
783 | + /* stop DMA activity */ | ||
784 | if (c->desc) { | ||
785 | bcm2835_dma_desc_free(&c->desc->vd); | ||
786 | c->desc = NULL; | ||
787 | - bcm2835_dma_abort(c->chan_base); | ||
788 | - | ||
789 | - /* Wait for stopping */ | ||
790 | - while (--timeout) { | ||
791 | - if (!(readl(c->chan_base + BCM2835_DMA_CS) & | ||
792 | - BCM2835_DMA_ACTIVE)) | ||
793 | - break; | ||
794 | - | ||
795 | - cpu_relax(); | ||
796 | - } | ||
797 | - | ||
798 | - if (!timeout) | ||
799 | - dev_err(d->ddev.dev, "DMA transfer could not be terminated\n"); | ||
800 | + bcm2835_dma_abort(c); | ||
801 | } | ||
802 | |||
803 | vchan_get_all_descriptors(&c->vc, &head); | ||
804 | diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c | ||
805 | index ab0fb804fb1e..1cfa1d9bc971 100644 | ||
806 | --- a/drivers/dma/imx-dma.c | ||
807 | +++ b/drivers/dma/imx-dma.c | ||
808 | @@ -623,7 +623,7 @@ static void imxdma_tasklet(unsigned long data) | ||
809 | { | ||
810 | struct imxdma_channel *imxdmac = (void *)data; | ||
811 | struct imxdma_engine *imxdma = imxdmac->imxdma; | ||
812 | - struct imxdma_desc *desc; | ||
813 | + struct imxdma_desc *desc, *next_desc; | ||
814 | unsigned long flags; | ||
815 | |||
816 | spin_lock_irqsave(&imxdma->lock, flags); | ||
817 | @@ -653,10 +653,10 @@ static void imxdma_tasklet(unsigned long data) | ||
818 | list_move_tail(imxdmac->ld_active.next, &imxdmac->ld_free); | ||
819 | |||
820 | if (!list_empty(&imxdmac->ld_queue)) { | ||
821 | - desc = list_first_entry(&imxdmac->ld_queue, struct imxdma_desc, | ||
822 | - node); | ||
823 | + next_desc = list_first_entry(&imxdmac->ld_queue, | ||
824 | + struct imxdma_desc, node); | ||
825 | list_move_tail(imxdmac->ld_queue.next, &imxdmac->ld_active); | ||
826 | - if (imxdma_xfer_desc(desc) < 0) | ||
827 | + if (imxdma_xfer_desc(next_desc) < 0) | ||
828 | dev_warn(imxdma->dev, "%s: channel: %d couldn't xfer desc\n", | ||
829 | __func__, imxdmac->channel); | ||
830 | } | ||
831 | diff --git a/drivers/dma/xilinx/zynqmp_dma.c b/drivers/dma/xilinx/zynqmp_dma.c | ||
832 | index 22658057fe27..9069fb854319 100644 | ||
833 | --- a/drivers/dma/xilinx/zynqmp_dma.c | ||
834 | +++ b/drivers/dma/xilinx/zynqmp_dma.c | ||
835 | @@ -159,7 +159,7 @@ struct zynqmp_dma_desc_ll { | ||
836 | u32 ctrl; | ||
837 | u64 nxtdscraddr; | ||
838 | u64 rsvd; | ||
839 | -}; __aligned(64) | ||
840 | +}; | ||
841 | |||
842 | /** | ||
843 | * struct zynqmp_dma_desc_sw - Per Transaction structure | ||
844 | diff --git a/drivers/firmware/efi/vars.c b/drivers/firmware/efi/vars.c | ||
845 | index 9336ffdf6e2c..fceaafd67ec6 100644 | ||
846 | --- a/drivers/firmware/efi/vars.c | ||
847 | +++ b/drivers/firmware/efi/vars.c | ||
848 | @@ -318,7 +318,12 @@ EXPORT_SYMBOL_GPL(efivar_variable_is_removable); | ||
849 | static efi_status_t | ||
850 | check_var_size(u32 attributes, unsigned long size) | ||
851 | { | ||
852 | - const struct efivar_operations *fops = __efivars->ops; | ||
853 | + const struct efivar_operations *fops; | ||
854 | + | ||
855 | + if (!__efivars) | ||
856 | + return EFI_UNSUPPORTED; | ||
857 | + | ||
858 | + fops = __efivars->ops; | ||
859 | |||
860 | if (!fops->query_variable_store) | ||
861 | return EFI_UNSUPPORTED; | ||
862 | @@ -329,7 +334,12 @@ check_var_size(u32 attributes, unsigned long size) | ||
863 | static efi_status_t | ||
864 | check_var_size_nonblocking(u32 attributes, unsigned long size) | ||
865 | { | ||
866 | - const struct efivar_operations *fops = __efivars->ops; | ||
867 | + const struct efivar_operations *fops; | ||
868 | + | ||
869 | + if (!__efivars) | ||
870 | + return EFI_UNSUPPORTED; | ||
871 | + | ||
872 | + fops = __efivars->ops; | ||
873 | |||
874 | if (!fops->query_variable_store) | ||
875 | return EFI_UNSUPPORTED; | ||
876 | @@ -429,13 +439,18 @@ static void dup_variable_bug(efi_char16_t *str16, efi_guid_t *vendor_guid, | ||
877 | int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *), | ||
878 | void *data, bool duplicates, struct list_head *head) | ||
879 | { | ||
880 | - const struct efivar_operations *ops = __efivars->ops; | ||
881 | + const struct efivar_operations *ops; | ||
882 | unsigned long variable_name_size = 1024; | ||
883 | efi_char16_t *variable_name; | ||
884 | efi_status_t status; | ||
885 | efi_guid_t vendor_guid; | ||
886 | int err = 0; | ||
887 | |||
888 | + if (!__efivars) | ||
889 | + return -EFAULT; | ||
890 | + | ||
891 | + ops = __efivars->ops; | ||
892 | + | ||
893 | variable_name = kzalloc(variable_name_size, GFP_KERNEL); | ||
894 | if (!variable_name) { | ||
895 | printk(KERN_ERR "efivars: Memory allocation failed.\n"); | ||
896 | @@ -583,12 +598,14 @@ static void efivar_entry_list_del_unlock(struct efivar_entry *entry) | ||
897 | */ | ||
898 | int __efivar_entry_delete(struct efivar_entry *entry) | ||
899 | { | ||
900 | - const struct efivar_operations *ops = __efivars->ops; | ||
901 | efi_status_t status; | ||
902 | |||
903 | - status = ops->set_variable(entry->var.VariableName, | ||
904 | - &entry->var.VendorGuid, | ||
905 | - 0, 0, NULL); | ||
906 | + if (!__efivars) | ||
907 | + return -EINVAL; | ||
908 | + | ||
909 | + status = __efivars->ops->set_variable(entry->var.VariableName, | ||
910 | + &entry->var.VendorGuid, | ||
911 | + 0, 0, NULL); | ||
912 | |||
913 | return efi_status_to_err(status); | ||
914 | } | ||
915 | @@ -607,12 +624,17 @@ EXPORT_SYMBOL_GPL(__efivar_entry_delete); | ||
916 | */ | ||
917 | int efivar_entry_delete(struct efivar_entry *entry) | ||
918 | { | ||
919 | - const struct efivar_operations *ops = __efivars->ops; | ||
920 | + const struct efivar_operations *ops; | ||
921 | efi_status_t status; | ||
922 | |||
923 | if (down_interruptible(&efivars_lock)) | ||
924 | return -EINTR; | ||
925 | |||
926 | + if (!__efivars) { | ||
927 | + up(&efivars_lock); | ||
928 | + return -EINVAL; | ||
929 | + } | ||
930 | + ops = __efivars->ops; | ||
931 | status = ops->set_variable(entry->var.VariableName, | ||
932 | &entry->var.VendorGuid, | ||
933 | 0, 0, NULL); | ||
934 | @@ -650,13 +672,19 @@ EXPORT_SYMBOL_GPL(efivar_entry_delete); | ||
935 | int efivar_entry_set(struct efivar_entry *entry, u32 attributes, | ||
936 | unsigned long size, void *data, struct list_head *head) | ||
937 | { | ||
938 | - const struct efivar_operations *ops = __efivars->ops; | ||
939 | + const struct efivar_operations *ops; | ||
940 | efi_status_t status; | ||
941 | efi_char16_t *name = entry->var.VariableName; | ||
942 | efi_guid_t vendor = entry->var.VendorGuid; | ||
943 | |||
944 | if (down_interruptible(&efivars_lock)) | ||
945 | return -EINTR; | ||
946 | + | ||
947 | + if (!__efivars) { | ||
948 | + up(&efivars_lock); | ||
949 | + return -EINVAL; | ||
950 | + } | ||
951 | + ops = __efivars->ops; | ||
952 | if (head && efivar_entry_find(name, vendor, head, false)) { | ||
953 | up(&efivars_lock); | ||
954 | return -EEXIST; | ||
955 | @@ -687,12 +715,17 @@ static int | ||
956 | efivar_entry_set_nonblocking(efi_char16_t *name, efi_guid_t vendor, | ||
957 | u32 attributes, unsigned long size, void *data) | ||
958 | { | ||
959 | - const struct efivar_operations *ops = __efivars->ops; | ||
960 | + const struct efivar_operations *ops; | ||
961 | efi_status_t status; | ||
962 | |||
963 | if (down_trylock(&efivars_lock)) | ||
964 | return -EBUSY; | ||
965 | |||
966 | + if (!__efivars) { | ||
967 | + up(&efivars_lock); | ||
968 | + return -EINVAL; | ||
969 | + } | ||
970 | + | ||
971 | status = check_var_size_nonblocking(attributes, | ||
972 | size + ucs2_strsize(name, 1024)); | ||
973 | if (status != EFI_SUCCESS) { | ||
974 | @@ -700,6 +733,7 @@ efivar_entry_set_nonblocking(efi_char16_t *name, efi_guid_t vendor, | ||
975 | return -ENOSPC; | ||
976 | } | ||
977 | |||
978 | + ops = __efivars->ops; | ||
979 | status = ops->set_variable_nonblocking(name, &vendor, attributes, | ||
980 | size, data); | ||
981 | |||
982 | @@ -727,9 +761,13 @@ efivar_entry_set_nonblocking(efi_char16_t *name, efi_guid_t vendor, | ||
983 | int efivar_entry_set_safe(efi_char16_t *name, efi_guid_t vendor, u32 attributes, | ||
984 | bool block, unsigned long size, void *data) | ||
985 | { | ||
986 | - const struct efivar_operations *ops = __efivars->ops; | ||
987 | + const struct efivar_operations *ops; | ||
988 | efi_status_t status; | ||
989 | |||
990 | + if (!__efivars) | ||
991 | + return -EINVAL; | ||
992 | + | ||
993 | + ops = __efivars->ops; | ||
994 | if (!ops->query_variable_store) | ||
995 | return -ENOSYS; | ||
996 | |||
997 | @@ -829,13 +867,18 @@ EXPORT_SYMBOL_GPL(efivar_entry_find); | ||
998 | */ | ||
999 | int efivar_entry_size(struct efivar_entry *entry, unsigned long *size) | ||
1000 | { | ||
1001 | - const struct efivar_operations *ops = __efivars->ops; | ||
1002 | + const struct efivar_operations *ops; | ||
1003 | efi_status_t status; | ||
1004 | |||
1005 | *size = 0; | ||
1006 | |||
1007 | if (down_interruptible(&efivars_lock)) | ||
1008 | return -EINTR; | ||
1009 | + if (!__efivars) { | ||
1010 | + up(&efivars_lock); | ||
1011 | + return -EINVAL; | ||
1012 | + } | ||
1013 | + ops = __efivars->ops; | ||
1014 | status = ops->get_variable(entry->var.VariableName, | ||
1015 | &entry->var.VendorGuid, NULL, size, NULL); | ||
1016 | up(&efivars_lock); | ||
1017 | @@ -861,12 +904,14 @@ EXPORT_SYMBOL_GPL(efivar_entry_size); | ||
1018 | int __efivar_entry_get(struct efivar_entry *entry, u32 *attributes, | ||
1019 | unsigned long *size, void *data) | ||
1020 | { | ||
1021 | - const struct efivar_operations *ops = __efivars->ops; | ||
1022 | efi_status_t status; | ||
1023 | |||
1024 | - status = ops->get_variable(entry->var.VariableName, | ||
1025 | - &entry->var.VendorGuid, | ||
1026 | - attributes, size, data); | ||
1027 | + if (!__efivars) | ||
1028 | + return -EINVAL; | ||
1029 | + | ||
1030 | + status = __efivars->ops->get_variable(entry->var.VariableName, | ||
1031 | + &entry->var.VendorGuid, | ||
1032 | + attributes, size, data); | ||
1033 | |||
1034 | return efi_status_to_err(status); | ||
1035 | } | ||
1036 | @@ -882,14 +927,19 @@ EXPORT_SYMBOL_GPL(__efivar_entry_get); | ||
1037 | int efivar_entry_get(struct efivar_entry *entry, u32 *attributes, | ||
1038 | unsigned long *size, void *data) | ||
1039 | { | ||
1040 | - const struct efivar_operations *ops = __efivars->ops; | ||
1041 | efi_status_t status; | ||
1042 | |||
1043 | if (down_interruptible(&efivars_lock)) | ||
1044 | return -EINTR; | ||
1045 | - status = ops->get_variable(entry->var.VariableName, | ||
1046 | - &entry->var.VendorGuid, | ||
1047 | - attributes, size, data); | ||
1048 | + | ||
1049 | + if (!__efivars) { | ||
1050 | + up(&efivars_lock); | ||
1051 | + return -EINVAL; | ||
1052 | + } | ||
1053 | + | ||
1054 | + status = __efivars->ops->get_variable(entry->var.VariableName, | ||
1055 | + &entry->var.VendorGuid, | ||
1056 | + attributes, size, data); | ||
1057 | up(&efivars_lock); | ||
1058 | |||
1059 | return efi_status_to_err(status); | ||
1060 | @@ -921,7 +971,7 @@ EXPORT_SYMBOL_GPL(efivar_entry_get); | ||
1061 | int efivar_entry_set_get_size(struct efivar_entry *entry, u32 attributes, | ||
1062 | unsigned long *size, void *data, bool *set) | ||
1063 | { | ||
1064 | - const struct efivar_operations *ops = __efivars->ops; | ||
1065 | + const struct efivar_operations *ops; | ||
1066 | efi_char16_t *name = entry->var.VariableName; | ||
1067 | efi_guid_t *vendor = &entry->var.VendorGuid; | ||
1068 | efi_status_t status; | ||
1069 | @@ -940,6 +990,11 @@ int efivar_entry_set_get_size(struct efivar_entry *entry, u32 attributes, | ||
1070 | if (down_interruptible(&efivars_lock)) | ||
1071 | return -EINTR; | ||
1072 | |||
1073 | + if (!__efivars) { | ||
1074 | + err = -EINVAL; | ||
1075 | + goto out; | ||
1076 | + } | ||
1077 | + | ||
1078 | /* | ||
1079 | * Ensure that the available space hasn't shrunk below the safe level | ||
1080 | */ | ||
1081 | @@ -956,6 +1011,8 @@ int efivar_entry_set_get_size(struct efivar_entry *entry, u32 attributes, | ||
1082 | } | ||
1083 | } | ||
1084 | |||
1085 | + ops = __efivars->ops; | ||
1086 | + | ||
1087 | status = ops->set_variable(name, vendor, attributes, *size, data); | ||
1088 | if (status != EFI_SUCCESS) { | ||
1089 | err = efi_status_to_err(status); | ||
1090 | diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c | ||
1091 | index adb1dd7fde5f..9ccd7d702cd3 100644 | ||
1092 | --- a/drivers/gpu/drm/drm_bufs.c | ||
1093 | +++ b/drivers/gpu/drm/drm_bufs.c | ||
1094 | @@ -36,6 +36,8 @@ | ||
1095 | #include <drm/drmP.h> | ||
1096 | #include "drm_legacy.h" | ||
1097 | |||
1098 | +#include <linux/nospec.h> | ||
1099 | + | ||
1100 | static struct drm_map_list *drm_find_matching_map(struct drm_device *dev, | ||
1101 | struct drm_local_map *map) | ||
1102 | { | ||
1103 | @@ -1413,6 +1415,7 @@ int drm_legacy_freebufs(struct drm_device *dev, void *data, | ||
1104 | idx, dma->buf_count - 1); | ||
1105 | return -EINVAL; | ||
1106 | } | ||
1107 | + idx = array_index_nospec(idx, dma->buf_count); | ||
1108 | buf = dma->buflist[idx]; | ||
1109 | if (buf->file_priv != file_priv) { | ||
1110 | DRM_ERROR("Process %d freeing buffer not owned\n", | ||
1111 | diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c | ||
1112 | index 70051bf0ee5c..0376c0c2fc66 100644 | ||
1113 | --- a/drivers/gpu/drm/vc4/vc4_plane.c | ||
1114 | +++ b/drivers/gpu/drm/vc4/vc4_plane.c | ||
1115 | @@ -345,12 +345,14 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) | ||
1116 | vc4_get_scaling_mode(vc4_state->src_h[1], | ||
1117 | vc4_state->crtc_h); | ||
1118 | |||
1119 | - /* YUV conversion requires that horizontal scaling be enabled, | ||
1120 | - * even on a plane that's otherwise 1:1. Looks like only PPF | ||
1121 | - * works in that case, so let's pick that one. | ||
1122 | + /* YUV conversion requires that horizontal scaling be enabled | ||
1123 | + * on the UV plane even if vc4_get_scaling_mode() returned | ||
1124 | + * VC4_SCALING_NONE (which can happen when the down-scaling | ||
1125 | + * ratio is 0.5). Let's force it to VC4_SCALING_PPF in this | ||
1126 | + * case. | ||
1127 | */ | ||
1128 | - if (vc4_state->is_unity) | ||
1129 | - vc4_state->x_scaling[0] = VC4_SCALING_PPF; | ||
1130 | + if (vc4_state->x_scaling[1] == VC4_SCALING_NONE) | ||
1131 | + vc4_state->x_scaling[1] = VC4_SCALING_PPF; | ||
1132 | } else { | ||
1133 | vc4_state->is_yuv = false; | ||
1134 | vc4_state->x_scaling[1] = VC4_SCALING_NONE; | ||
1135 | diff --git a/drivers/gpu/ipu-v3/ipu-image-convert.c b/drivers/gpu/ipu-v3/ipu-image-convert.c | ||
1136 | index 805b6fa7b5f4..50b73f3876fb 100644 | ||
1137 | --- a/drivers/gpu/ipu-v3/ipu-image-convert.c | ||
1138 | +++ b/drivers/gpu/ipu-v3/ipu-image-convert.c | ||
1139 | @@ -1513,7 +1513,7 @@ unlock: | ||
1140 | EXPORT_SYMBOL_GPL(ipu_image_convert_queue); | ||
1141 | |||
1142 | /* Abort any active or pending conversions for this context */ | ||
1143 | -void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx) | ||
1144 | +static void __ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx) | ||
1145 | { | ||
1146 | struct ipu_image_convert_chan *chan = ctx->chan; | ||
1147 | struct ipu_image_convert_priv *priv = chan->priv; | ||
1148 | @@ -1540,7 +1540,7 @@ void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx) | ||
1149 | |||
1150 | need_abort = (run_count || active_run); | ||
1151 | |||
1152 | - ctx->aborting = need_abort; | ||
1153 | + ctx->aborting = true; | ||
1154 | |||
1155 | spin_unlock_irqrestore(&chan->irqlock, flags); | ||
1156 | |||
1157 | @@ -1561,7 +1561,11 @@ void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx) | ||
1158 | dev_warn(priv->ipu->dev, "%s: timeout\n", __func__); | ||
1159 | force_abort(ctx); | ||
1160 | } | ||
1161 | +} | ||
1162 | |||
1163 | +void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx) | ||
1164 | +{ | ||
1165 | + __ipu_image_convert_abort(ctx); | ||
1166 | ctx->aborting = false; | ||
1167 | } | ||
1168 | EXPORT_SYMBOL_GPL(ipu_image_convert_abort); | ||
1169 | @@ -1575,7 +1579,7 @@ void ipu_image_convert_unprepare(struct ipu_image_convert_ctx *ctx) | ||
1170 | bool put_res; | ||
1171 | |||
1172 | /* make sure no runs are hanging around */ | ||
1173 | - ipu_image_convert_abort(ctx); | ||
1174 | + __ipu_image_convert_abort(ctx); | ||
1175 | |||
1176 | dev_dbg(priv->ipu->dev, "%s: task %u: removing ctx %p\n", __func__, | ||
1177 | chan->ic_task, ctx); | ||
1178 | diff --git a/drivers/hid/hid-lenovo.c b/drivers/hid/hid-lenovo.c | ||
1179 | index 1ac4ff4d57a6..d409cc8759fc 100644 | ||
1180 | --- a/drivers/hid/hid-lenovo.c | ||
1181 | +++ b/drivers/hid/hid-lenovo.c | ||
1182 | @@ -713,7 +713,9 @@ static int lenovo_probe_tpkbd(struct hid_device *hdev) | ||
1183 | data_pointer->led_mute.brightness_get = lenovo_led_brightness_get_tpkbd; | ||
1184 | data_pointer->led_mute.brightness_set = lenovo_led_brightness_set_tpkbd; | ||
1185 | data_pointer->led_mute.dev = dev; | ||
1186 | - led_classdev_register(dev, &data_pointer->led_mute); | ||
1187 | + ret = led_classdev_register(dev, &data_pointer->led_mute); | ||
1188 | + if (ret < 0) | ||
1189 | + goto err; | ||
1190 | |||
1191 | data_pointer->led_micmute.name = name_micmute; | ||
1192 | data_pointer->led_micmute.brightness_get = | ||
1193 | @@ -721,7 +723,11 @@ static int lenovo_probe_tpkbd(struct hid_device *hdev) | ||
1194 | data_pointer->led_micmute.brightness_set = | ||
1195 | lenovo_led_brightness_set_tpkbd; | ||
1196 | data_pointer->led_micmute.dev = dev; | ||
1197 | - led_classdev_register(dev, &data_pointer->led_micmute); | ||
1198 | + ret = led_classdev_register(dev, &data_pointer->led_micmute); | ||
1199 | + if (ret < 0) { | ||
1200 | + led_classdev_unregister(&data_pointer->led_mute); | ||
1201 | + goto err; | ||
1202 | + } | ||
1203 | |||
1204 | lenovo_features_set_tpkbd(hdev); | ||
1205 | |||
1206 | diff --git a/drivers/hwmon/lm80.c b/drivers/hwmon/lm80.c | ||
1207 | index 4bcd9b882948..cb6606a0470d 100644 | ||
1208 | --- a/drivers/hwmon/lm80.c | ||
1209 | +++ b/drivers/hwmon/lm80.c | ||
1210 | @@ -360,9 +360,11 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, | ||
1211 | struct i2c_client *client = data->client; | ||
1212 | unsigned long min, val; | ||
1213 | u8 reg; | ||
1214 | - int err = kstrtoul(buf, 10, &val); | ||
1215 | - if (err < 0) | ||
1216 | - return err; | ||
1217 | + int rv; | ||
1218 | + | ||
1219 | + rv = kstrtoul(buf, 10, &val); | ||
1220 | + if (rv < 0) | ||
1221 | + return rv; | ||
1222 | |||
1223 | /* Save fan_min */ | ||
1224 | mutex_lock(&data->update_lock); | ||
1225 | @@ -390,8 +392,11 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, | ||
1226 | return -EINVAL; | ||
1227 | } | ||
1228 | |||
1229 | - reg = (lm80_read_value(client, LM80_REG_FANDIV) & | ||
1230 | - ~(3 << (2 * (nr + 1)))) | (data->fan_div[nr] << (2 * (nr + 1))); | ||
1231 | + rv = lm80_read_value(client, LM80_REG_FANDIV); | ||
1232 | + if (rv < 0) | ||
1233 | + return rv; | ||
1234 | + reg = (rv & ~(3 << (2 * (nr + 1)))) | ||
1235 | + | (data->fan_div[nr] << (2 * (nr + 1))); | ||
1236 | lm80_write_value(client, LM80_REG_FANDIV, reg); | ||
1237 | |||
1238 | /* Restore fan_min */ | ||
1239 | @@ -623,6 +628,7 @@ static int lm80_probe(struct i2c_client *client, | ||
1240 | struct device *dev = &client->dev; | ||
1241 | struct device *hwmon_dev; | ||
1242 | struct lm80_data *data; | ||
1243 | + int rv; | ||
1244 | |||
1245 | data = devm_kzalloc(dev, sizeof(struct lm80_data), GFP_KERNEL); | ||
1246 | if (!data) | ||
1247 | @@ -635,8 +641,14 @@ static int lm80_probe(struct i2c_client *client, | ||
1248 | lm80_init_client(client); | ||
1249 | |||
1250 | /* A few vars need to be filled upon startup */ | ||
1251 | - data->fan[f_min][0] = lm80_read_value(client, LM80_REG_FAN_MIN(1)); | ||
1252 | - data->fan[f_min][1] = lm80_read_value(client, LM80_REG_FAN_MIN(2)); | ||
1253 | + rv = lm80_read_value(client, LM80_REG_FAN_MIN(1)); | ||
1254 | + if (rv < 0) | ||
1255 | + return rv; | ||
1256 | + data->fan[f_min][0] = rv; | ||
1257 | + rv = lm80_read_value(client, LM80_REG_FAN_MIN(2)); | ||
1258 | + if (rv < 0) | ||
1259 | + return rv; | ||
1260 | + data->fan[f_min][1] = rv; | ||
1261 | |||
1262 | hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, | ||
1263 | data, lm80_groups); | ||
1264 | diff --git a/drivers/i2c/busses/i2c-axxia.c b/drivers/i2c/busses/i2c-axxia.c | ||
1265 | index 96a6d5df9b26..b0962897bc45 100644 | ||
1266 | --- a/drivers/i2c/busses/i2c-axxia.c | ||
1267 | +++ b/drivers/i2c/busses/i2c-axxia.c | ||
1268 | @@ -296,22 +296,7 @@ static irqreturn_t axxia_i2c_isr(int irq, void *_dev) | ||
1269 | i2c_int_disable(idev, MST_STATUS_TFL); | ||
1270 | } | ||
1271 | |||
1272 | - if (status & MST_STATUS_SCC) { | ||
1273 | - /* Stop completed */ | ||
1274 | - i2c_int_disable(idev, ~MST_STATUS_TSS); | ||
1275 | - complete(&idev->msg_complete); | ||
1276 | - } else if (status & MST_STATUS_SNS) { | ||
1277 | - /* Transfer done */ | ||
1278 | - i2c_int_disable(idev, ~MST_STATUS_TSS); | ||
1279 | - if (i2c_m_rd(idev->msg) && idev->msg_xfrd < idev->msg->len) | ||
1280 | - axxia_i2c_empty_rx_fifo(idev); | ||
1281 | - complete(&idev->msg_complete); | ||
1282 | - } else if (status & MST_STATUS_TSS) { | ||
1283 | - /* Transfer timeout */ | ||
1284 | - idev->msg_err = -ETIMEDOUT; | ||
1285 | - i2c_int_disable(idev, ~MST_STATUS_TSS); | ||
1286 | - complete(&idev->msg_complete); | ||
1287 | - } else if (unlikely(status & MST_STATUS_ERR)) { | ||
1288 | + if (unlikely(status & MST_STATUS_ERR)) { | ||
1289 | /* Transfer error */ | ||
1290 | i2c_int_disable(idev, ~0); | ||
1291 | if (status & MST_STATUS_AL) | ||
1292 | @@ -328,6 +313,21 @@ static irqreturn_t axxia_i2c_isr(int irq, void *_dev) | ||
1293 | readl(idev->base + MST_TX_BYTES_XFRD), | ||
1294 | readl(idev->base + MST_TX_XFER)); | ||
1295 | complete(&idev->msg_complete); | ||
1296 | + } else if (status & MST_STATUS_SCC) { | ||
1297 | + /* Stop completed */ | ||
1298 | + i2c_int_disable(idev, ~MST_STATUS_TSS); | ||
1299 | + complete(&idev->msg_complete); | ||
1300 | + } else if (status & MST_STATUS_SNS) { | ||
1301 | + /* Transfer done */ | ||
1302 | + i2c_int_disable(idev, ~MST_STATUS_TSS); | ||
1303 | + if (i2c_m_rd(idev->msg) && idev->msg_xfrd < idev->msg->len) | ||
1304 | + axxia_i2c_empty_rx_fifo(idev); | ||
1305 | + complete(&idev->msg_complete); | ||
1306 | + } else if (status & MST_STATUS_TSS) { | ||
1307 | + /* Transfer timeout */ | ||
1308 | + idev->msg_err = -ETIMEDOUT; | ||
1309 | + i2c_int_disable(idev, ~MST_STATUS_TSS); | ||
1310 | + complete(&idev->msg_complete); | ||
1311 | } | ||
1312 | |||
1313 | out: | ||
1314 | diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c | ||
1315 | index 3f968c46e667..784636800361 100644 | ||
1316 | --- a/drivers/iio/accel/kxcjk-1013.c | ||
1317 | +++ b/drivers/iio/accel/kxcjk-1013.c | ||
1318 | @@ -1393,6 +1393,7 @@ static const struct acpi_device_id kx_acpi_match[] = { | ||
1319 | {"KXCJ1008", KXCJ91008}, | ||
1320 | {"KXCJ9000", KXCJ91008}, | ||
1321 | {"KIOX000A", KXCJ91008}, | ||
1322 | + {"KIOX010A", KXCJ91008}, /* KXCJ91008 inside the display of a 2-in-1 */ | ||
1323 | {"KXTJ1009", KXTJ21009}, | ||
1324 | {"SMO8500", KXCJ91008}, | ||
1325 | { }, | ||
1326 | diff --git a/drivers/infiniband/hw/hfi1/ruc.c b/drivers/infiniband/hw/hfi1/ruc.c | ||
1327 | index 9f768b48321f..d1514294bd68 100644 | ||
1328 | --- a/drivers/infiniband/hw/hfi1/ruc.c | ||
1329 | +++ b/drivers/infiniband/hw/hfi1/ruc.c | ||
1330 | @@ -471,6 +471,8 @@ send: | ||
1331 | goto op_err; | ||
1332 | if (!ret) | ||
1333 | goto rnr_nak; | ||
1334 | + if (wqe->length > qp->r_len) | ||
1335 | + goto inv_err; | ||
1336 | break; | ||
1337 | |||
1338 | case IB_WR_RDMA_WRITE_WITH_IMM: | ||
1339 | @@ -638,7 +640,10 @@ op_err: | ||
1340 | goto err; | ||
1341 | |||
1342 | inv_err: | ||
1343 | - send_status = IB_WC_REM_INV_REQ_ERR; | ||
1344 | + send_status = | ||
1345 | + sqp->ibqp.qp_type == IB_QPT_RC ? | ||
1346 | + IB_WC_REM_INV_REQ_ERR : | ||
1347 | + IB_WC_SUCCESS; | ||
1348 | wc.status = IB_WC_LOC_QP_OP_ERR; | ||
1349 | goto err; | ||
1350 | |||
1351 | diff --git a/drivers/infiniband/hw/qib/qib_ruc.c b/drivers/infiniband/hw/qib/qib_ruc.c | ||
1352 | index de1bde5950f5..10afde6d02fa 100644 | ||
1353 | --- a/drivers/infiniband/hw/qib/qib_ruc.c | ||
1354 | +++ b/drivers/infiniband/hw/qib/qib_ruc.c | ||
1355 | @@ -449,6 +449,8 @@ again: | ||
1356 | goto op_err; | ||
1357 | if (!ret) | ||
1358 | goto rnr_nak; | ||
1359 | + if (wqe->length > qp->r_len) | ||
1360 | + goto inv_err; | ||
1361 | break; | ||
1362 | |||
1363 | case IB_WR_RDMA_WRITE_WITH_IMM: | ||
1364 | @@ -612,7 +614,10 @@ op_err: | ||
1365 | goto err; | ||
1366 | |||
1367 | inv_err: | ||
1368 | - send_status = IB_WC_REM_INV_REQ_ERR; | ||
1369 | + send_status = | ||
1370 | + sqp->ibqp.qp_type == IB_QPT_RC ? | ||
1371 | + IB_WC_REM_INV_REQ_ERR : | ||
1372 | + IB_WC_SUCCESS; | ||
1373 | wc.status = IB_WC_LOC_QP_OP_ERR; | ||
1374 | goto err; | ||
1375 | |||
1376 | diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c | ||
1377 | index bba1b9f2f782..e984418ffa2a 100644 | ||
1378 | --- a/drivers/iommu/amd_iommu.c | ||
1379 | +++ b/drivers/iommu/amd_iommu.c | ||
1380 | @@ -464,7 +464,14 @@ static int iommu_init_device(struct device *dev) | ||
1381 | |||
1382 | dev_data->alias = get_alias(dev); | ||
1383 | |||
1384 | - if (dev_is_pci(dev) && pci_iommuv2_capable(to_pci_dev(dev))) { | ||
1385 | + /* | ||
1386 | + * By default we use passthrough mode for IOMMUv2 capable device. | ||
1387 | + * But if amd_iommu=force_isolation is set (e.g. to debug DMA to | ||
1388 | + * invalid address), we ignore the capability for the device so | ||
1389 | + * it'll be forced to go into translation mode. | ||
1390 | + */ | ||
1391 | + if ((iommu_pass_through || !amd_iommu_force_isolation) && | ||
1392 | + dev_is_pci(dev) && pci_iommuv2_capable(to_pci_dev(dev))) { | ||
1393 | struct amd_iommu *iommu; | ||
1394 | |||
1395 | iommu = amd_iommu_rlookup_table[dev_data->devid]; | ||
1396 | diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c | ||
1397 | index ff4be1174ff0..7bd98585d78d 100644 | ||
1398 | --- a/drivers/iommu/arm-smmu-v3.c | ||
1399 | +++ b/drivers/iommu/arm-smmu-v3.c | ||
1400 | @@ -697,7 +697,13 @@ static void queue_inc_cons(struct arm_smmu_queue *q) | ||
1401 | u32 cons = (Q_WRP(q, q->cons) | Q_IDX(q, q->cons)) + 1; | ||
1402 | |||
1403 | q->cons = Q_OVF(q, q->cons) | Q_WRP(q, cons) | Q_IDX(q, cons); | ||
1404 | - writel(q->cons, q->cons_reg); | ||
1405 | + | ||
1406 | + /* | ||
1407 | + * Ensure that all CPU accesses (reads and writes) to the queue | ||
1408 | + * are complete before we update the cons pointer. | ||
1409 | + */ | ||
1410 | + mb(); | ||
1411 | + writel_relaxed(q->cons, q->cons_reg); | ||
1412 | } | ||
1413 | |||
1414 | static int queue_sync_prod(struct arm_smmu_queue *q) | ||
1415 | diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c | ||
1416 | index 5a9a4416f467..f7ecb30a0bac 100644 | ||
1417 | --- a/drivers/iommu/arm-smmu.c | ||
1418 | +++ b/drivers/iommu/arm-smmu.c | ||
1419 | @@ -297,6 +297,7 @@ enum arm_smmu_implementation { | ||
1420 | GENERIC_SMMU, | ||
1421 | ARM_MMU500, | ||
1422 | CAVIUM_SMMUV2, | ||
1423 | + QCOM_SMMUV2, | ||
1424 | }; | ||
1425 | |||
1426 | struct arm_smmu_s2cr { | ||
1427 | @@ -1894,6 +1895,7 @@ ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU); | ||
1428 | ARM_SMMU_MATCH_DATA(arm_mmu401, ARM_SMMU_V1_64K, GENERIC_SMMU); | ||
1429 | ARM_SMMU_MATCH_DATA(arm_mmu500, ARM_SMMU_V2, ARM_MMU500); | ||
1430 | ARM_SMMU_MATCH_DATA(cavium_smmuv2, ARM_SMMU_V2, CAVIUM_SMMUV2); | ||
1431 | +ARM_SMMU_MATCH_DATA(qcom_smmuv2, ARM_SMMU_V2, QCOM_SMMUV2); | ||
1432 | |||
1433 | static const struct of_device_id arm_smmu_of_match[] = { | ||
1434 | { .compatible = "arm,smmu-v1", .data = &smmu_generic_v1 }, | ||
1435 | @@ -1902,6 +1904,7 @@ static const struct of_device_id arm_smmu_of_match[] = { | ||
1436 | { .compatible = "arm,mmu-401", .data = &arm_mmu401 }, | ||
1437 | { .compatible = "arm,mmu-500", .data = &arm_mmu500 }, | ||
1438 | { .compatible = "cavium,smmu-v2", .data = &cavium_smmuv2 }, | ||
1439 | + { .compatible = "qcom,smmu-v2", .data = &qcom_smmuv2 }, | ||
1440 | { }, | ||
1441 | }; | ||
1442 | MODULE_DEVICE_TABLE(of, arm_smmu_of_match); | ||
1443 | diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c | ||
1444 | index 90449e1e91e5..1b1453d62fed 100644 | ||
1445 | --- a/drivers/isdn/hisax/hfc_pci.c | ||
1446 | +++ b/drivers/isdn/hisax/hfc_pci.c | ||
1447 | @@ -1169,11 +1169,13 @@ HFCPCI_l1hw(struct PStack *st, int pr, void *arg) | ||
1448 | if (cs->debug & L1_DEB_LAPD) | ||
1449 | debugl1(cs, "-> PH_REQUEST_PULL"); | ||
1450 | #endif | ||
1451 | + spin_lock_irqsave(&cs->lock, flags); | ||
1452 | if (!cs->tx_skb) { | ||
1453 | test_and_clear_bit(FLG_L1_PULL_REQ, &st->l1.Flags); | ||
1454 | st->l1.l1l2(st, PH_PULL | CONFIRM, NULL); | ||
1455 | } else | ||
1456 | test_and_set_bit(FLG_L1_PULL_REQ, &st->l1.Flags); | ||
1457 | + spin_unlock_irqrestore(&cs->lock, flags); | ||
1458 | break; | ||
1459 | case (HW_RESET | REQUEST): | ||
1460 | spin_lock_irqsave(&cs->lock, flags); | ||
1461 | diff --git a/drivers/media/i2c/ad9389b.c b/drivers/media/i2c/ad9389b.c | ||
1462 | index 50f354144ee7..2abbbc6392c0 100644 | ||
1463 | --- a/drivers/media/i2c/ad9389b.c | ||
1464 | +++ b/drivers/media/i2c/ad9389b.c | ||
1465 | @@ -590,7 +590,7 @@ static const struct v4l2_dv_timings_cap ad9389b_timings_cap = { | ||
1466 | .type = V4L2_DV_BT_656_1120, | ||
1467 | /* keep this initialization for compatibility with GCC < 4.4.6 */ | ||
1468 | .reserved = { 0 }, | ||
1469 | - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000, | ||
1470 | + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 170000000, | ||
1471 | V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | | ||
1472 | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, | ||
1473 | V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING | | ||
1474 | diff --git a/drivers/media/i2c/adv7511.c b/drivers/media/i2c/adv7511.c | ||
1475 | index 5ba0f21bcfe4..5f1c8ee8a50e 100644 | ||
1476 | --- a/drivers/media/i2c/adv7511.c | ||
1477 | +++ b/drivers/media/i2c/adv7511.c | ||
1478 | @@ -142,7 +142,7 @@ static const struct v4l2_dv_timings_cap adv7511_timings_cap = { | ||
1479 | .type = V4L2_DV_BT_656_1120, | ||
1480 | /* keep this initialization for compatibility with GCC < 4.4.6 */ | ||
1481 | .reserved = { 0 }, | ||
1482 | - V4L2_INIT_BT_TIMINGS(0, ADV7511_MAX_WIDTH, 0, ADV7511_MAX_HEIGHT, | ||
1483 | + V4L2_INIT_BT_TIMINGS(640, ADV7511_MAX_WIDTH, 350, ADV7511_MAX_HEIGHT, | ||
1484 | ADV7511_MIN_PIXELCLOCK, ADV7511_MAX_PIXELCLOCK, | ||
1485 | V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | | ||
1486 | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, | ||
1487 | diff --git a/drivers/media/i2c/adv7604.c b/drivers/media/i2c/adv7604.c | ||
1488 | index 7b1935ab03c8..ce6f93074ae0 100644 | ||
1489 | --- a/drivers/media/i2c/adv7604.c | ||
1490 | +++ b/drivers/media/i2c/adv7604.c | ||
1491 | @@ -777,7 +777,7 @@ static const struct v4l2_dv_timings_cap adv7604_timings_cap_analog = { | ||
1492 | .type = V4L2_DV_BT_656_1120, | ||
1493 | /* keep this initialization for compatibility with GCC < 4.4.6 */ | ||
1494 | .reserved = { 0 }, | ||
1495 | - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000, | ||
1496 | + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 170000000, | ||
1497 | V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | | ||
1498 | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, | ||
1499 | V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING | | ||
1500 | @@ -788,7 +788,7 @@ static const struct v4l2_dv_timings_cap adv76xx_timings_cap_digital = { | ||
1501 | .type = V4L2_DV_BT_656_1120, | ||
1502 | /* keep this initialization for compatibility with GCC < 4.4.6 */ | ||
1503 | .reserved = { 0 }, | ||
1504 | - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 225000000, | ||
1505 | + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 225000000, | ||
1506 | V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | | ||
1507 | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, | ||
1508 | V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING | | ||
1509 | diff --git a/drivers/media/i2c/adv7842.c b/drivers/media/i2c/adv7842.c | ||
1510 | index 8c2a52e280af..cf3b42c9417e 100644 | ||
1511 | --- a/drivers/media/i2c/adv7842.c | ||
1512 | +++ b/drivers/media/i2c/adv7842.c | ||
1513 | @@ -676,7 +676,7 @@ static const struct v4l2_dv_timings_cap adv7842_timings_cap_analog = { | ||
1514 | .type = V4L2_DV_BT_656_1120, | ||
1515 | /* keep this initialization for compatibility with GCC < 4.4.6 */ | ||
1516 | .reserved = { 0 }, | ||
1517 | - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000, | ||
1518 | + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 170000000, | ||
1519 | V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | | ||
1520 | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, | ||
1521 | V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING | | ||
1522 | @@ -687,7 +687,7 @@ static const struct v4l2_dv_timings_cap adv7842_timings_cap_digital = { | ||
1523 | .type = V4L2_DV_BT_656_1120, | ||
1524 | /* keep this initialization for compatibility with GCC < 4.4.6 */ | ||
1525 | .reserved = { 0 }, | ||
1526 | - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 225000000, | ||
1527 | + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 225000000, | ||
1528 | V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | | ||
1529 | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, | ||
1530 | V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING | | ||
1531 | diff --git a/drivers/media/i2c/tc358743.c b/drivers/media/i2c/tc358743.c | ||
1532 | index 0f572bff64f5..7ebcb9473956 100644 | ||
1533 | --- a/drivers/media/i2c/tc358743.c | ||
1534 | +++ b/drivers/media/i2c/tc358743.c | ||
1535 | @@ -66,7 +66,7 @@ static const struct v4l2_dv_timings_cap tc358743_timings_cap = { | ||
1536 | /* keep this initialization for compatibility with GCC < 4.4.6 */ | ||
1537 | .reserved = { 0 }, | ||
1538 | /* Pixel clock from REF_01 p. 20. Min/max height/width are unknown */ | ||
1539 | - V4L2_INIT_BT_TIMINGS(1, 10000, 1, 10000, 0, 165000000, | ||
1540 | + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 13000000, 165000000, | ||
1541 | V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | | ||
1542 | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, | ||
1543 | V4L2_DV_BT_CAP_PROGRESSIVE | | ||
1544 | diff --git a/drivers/media/i2c/ths8200.c b/drivers/media/i2c/ths8200.c | ||
1545 | index 42340e364cea..e06e2de87f90 100644 | ||
1546 | --- a/drivers/media/i2c/ths8200.c | ||
1547 | +++ b/drivers/media/i2c/ths8200.c | ||
1548 | @@ -49,7 +49,7 @@ static const struct v4l2_dv_timings_cap ths8200_timings_cap = { | ||
1549 | .type = V4L2_DV_BT_656_1120, | ||
1550 | /* keep this initialization for compatibility with GCC < 4.4.6 */ | ||
1551 | .reserved = { 0 }, | ||
1552 | - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1080, 25000000, 148500000, | ||
1553 | + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1080, 25000000, 148500000, | ||
1554 | V4L2_DV_BT_STD_CEA861, V4L2_DV_BT_CAP_PROGRESSIVE) | ||
1555 | }; | ||
1556 | |||
1557 | diff --git a/drivers/media/platform/davinci/vpbe.c b/drivers/media/platform/davinci/vpbe.c | ||
1558 | index 9a6c2cc38acb..abce9c4a1a8e 100644 | ||
1559 | --- a/drivers/media/platform/davinci/vpbe.c | ||
1560 | +++ b/drivers/media/platform/davinci/vpbe.c | ||
1561 | @@ -753,7 +753,7 @@ static int vpbe_initialize(struct device *dev, struct vpbe_device *vpbe_dev) | ||
1562 | if (ret) { | ||
1563 | v4l2_err(&vpbe_dev->v4l2_dev, "Failed to set default output %s", | ||
1564 | def_output); | ||
1565 | - return ret; | ||
1566 | + goto fail_kfree_amp; | ||
1567 | } | ||
1568 | |||
1569 | printk(KERN_NOTICE "Setting default mode to %s\n", def_mode); | ||
1570 | @@ -761,12 +761,15 @@ static int vpbe_initialize(struct device *dev, struct vpbe_device *vpbe_dev) | ||
1571 | if (ret) { | ||
1572 | v4l2_err(&vpbe_dev->v4l2_dev, "Failed to set default mode %s", | ||
1573 | def_mode); | ||
1574 | - return ret; | ||
1575 | + goto fail_kfree_amp; | ||
1576 | } | ||
1577 | vpbe_dev->initialized = 1; | ||
1578 | /* TBD handling of bootargs for default output and mode */ | ||
1579 | return 0; | ||
1580 | |||
1581 | +fail_kfree_amp: | ||
1582 | + mutex_lock(&vpbe_dev->lock); | ||
1583 | + kfree(vpbe_dev->amp); | ||
1584 | fail_kfree_encoders: | ||
1585 | kfree(vpbe_dev->encoders); | ||
1586 | fail_dev_unregister: | ||
1587 | diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c | ||
1588 | index 3e73e9db781f..7c025045ea90 100644 | ||
1589 | --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c | ||
1590 | +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c | ||
1591 | @@ -41,25 +41,27 @@ int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *mtkdev) | ||
1592 | node = of_parse_phandle(dev->of_node, "mediatek,larb", 0); | ||
1593 | if (!node) { | ||
1594 | mtk_v4l2_err("no mediatek,larb found"); | ||
1595 | - return -1; | ||
1596 | + return -ENODEV; | ||
1597 | } | ||
1598 | pdev = of_find_device_by_node(node); | ||
1599 | + of_node_put(node); | ||
1600 | if (!pdev) { | ||
1601 | mtk_v4l2_err("no mediatek,larb device found"); | ||
1602 | - return -1; | ||
1603 | + return -ENODEV; | ||
1604 | } | ||
1605 | pm->larbvenc = &pdev->dev; | ||
1606 | |||
1607 | node = of_parse_phandle(dev->of_node, "mediatek,larb", 1); | ||
1608 | if (!node) { | ||
1609 | mtk_v4l2_err("no mediatek,larb found"); | ||
1610 | - return -1; | ||
1611 | + return -ENODEV; | ||
1612 | } | ||
1613 | |||
1614 | pdev = of_find_device_by_node(node); | ||
1615 | + of_node_put(node); | ||
1616 | if (!pdev) { | ||
1617 | mtk_v4l2_err("no mediatek,larb device found"); | ||
1618 | - return -1; | ||
1619 | + return -ENODEV; | ||
1620 | } | ||
1621 | |||
1622 | pm->larbvenclt = &pdev->dev; | ||
1623 | diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c | ||
1624 | index a0547dbf9806..4d673a626db4 100644 | ||
1625 | --- a/drivers/memstick/core/memstick.c | ||
1626 | +++ b/drivers/memstick/core/memstick.c | ||
1627 | @@ -18,6 +18,7 @@ | ||
1628 | #include <linux/delay.h> | ||
1629 | #include <linux/slab.h> | ||
1630 | #include <linux/module.h> | ||
1631 | +#include <linux/pm_runtime.h> | ||
1632 | |||
1633 | #define DRIVER_NAME "memstick" | ||
1634 | |||
1635 | @@ -436,6 +437,7 @@ static void memstick_check(struct work_struct *work) | ||
1636 | struct memstick_dev *card; | ||
1637 | |||
1638 | dev_dbg(&host->dev, "memstick_check started\n"); | ||
1639 | + pm_runtime_get_noresume(host->dev.parent); | ||
1640 | mutex_lock(&host->lock); | ||
1641 | if (!host->card) { | ||
1642 | if (memstick_power_on(host)) | ||
1643 | @@ -479,6 +481,7 @@ out_power_off: | ||
1644 | host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_OFF); | ||
1645 | |||
1646 | mutex_unlock(&host->lock); | ||
1647 | + pm_runtime_put(host->dev.parent); | ||
1648 | dev_dbg(&host->dev, "memstick_check finished\n"); | ||
1649 | } | ||
1650 | |||
1651 | diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c | ||
1652 | index 16dc9ac7ecb6..53a506b0d790 100644 | ||
1653 | --- a/drivers/net/ethernet/broadcom/bcmsysport.c | ||
1654 | +++ b/drivers/net/ethernet/broadcom/bcmsysport.c | ||
1655 | @@ -378,7 +378,6 @@ static void bcm_sysport_get_wol(struct net_device *dev, | ||
1656 | struct ethtool_wolinfo *wol) | ||
1657 | { | ||
1658 | struct bcm_sysport_priv *priv = netdev_priv(dev); | ||
1659 | - u32 reg; | ||
1660 | |||
1661 | wol->supported = WAKE_MAGIC | WAKE_MAGICSECURE; | ||
1662 | wol->wolopts = priv->wolopts; | ||
1663 | @@ -386,11 +385,7 @@ static void bcm_sysport_get_wol(struct net_device *dev, | ||
1664 | if (!(priv->wolopts & WAKE_MAGICSECURE)) | ||
1665 | return; | ||
1666 | |||
1667 | - /* Return the programmed SecureOn password */ | ||
1668 | - reg = umac_readl(priv, UMAC_PSW_MS); | ||
1669 | - put_unaligned_be16(reg, &wol->sopass[0]); | ||
1670 | - reg = umac_readl(priv, UMAC_PSW_LS); | ||
1671 | - put_unaligned_be32(reg, &wol->sopass[2]); | ||
1672 | + memcpy(wol->sopass, priv->sopass, sizeof(priv->sopass)); | ||
1673 | } | ||
1674 | |||
1675 | static int bcm_sysport_set_wol(struct net_device *dev, | ||
1676 | @@ -406,13 +401,8 @@ static int bcm_sysport_set_wol(struct net_device *dev, | ||
1677 | if (wol->wolopts & ~supported) | ||
1678 | return -EINVAL; | ||
1679 | |||
1680 | - /* Program the SecureOn password */ | ||
1681 | - if (wol->wolopts & WAKE_MAGICSECURE) { | ||
1682 | - umac_writel(priv, get_unaligned_be16(&wol->sopass[0]), | ||
1683 | - UMAC_PSW_MS); | ||
1684 | - umac_writel(priv, get_unaligned_be32(&wol->sopass[2]), | ||
1685 | - UMAC_PSW_LS); | ||
1686 | - } | ||
1687 | + if (wol->wolopts & WAKE_MAGICSECURE) | ||
1688 | + memcpy(priv->sopass, wol->sopass, sizeof(priv->sopass)); | ||
1689 | |||
1690 | /* Flag the device and relevant IRQ as wakeup capable */ | ||
1691 | if (wol->wolopts) { | ||
1692 | @@ -1875,12 +1865,17 @@ static int bcm_sysport_suspend_to_wol(struct bcm_sysport_priv *priv) | ||
1693 | unsigned int timeout = 1000; | ||
1694 | u32 reg; | ||
1695 | |||
1696 | - /* Password has already been programmed */ | ||
1697 | reg = umac_readl(priv, UMAC_MPD_CTRL); | ||
1698 | reg |= MPD_EN; | ||
1699 | reg &= ~PSW_EN; | ||
1700 | - if (priv->wolopts & WAKE_MAGICSECURE) | ||
1701 | + if (priv->wolopts & WAKE_MAGICSECURE) { | ||
1702 | + /* Program the SecureOn password */ | ||
1703 | + umac_writel(priv, get_unaligned_be16(&priv->sopass[0]), | ||
1704 | + UMAC_PSW_MS); | ||
1705 | + umac_writel(priv, get_unaligned_be32(&priv->sopass[2]), | ||
1706 | + UMAC_PSW_LS); | ||
1707 | reg |= PSW_EN; | ||
1708 | + } | ||
1709 | umac_writel(priv, reg, UMAC_MPD_CTRL); | ||
1710 | |||
1711 | /* Make sure RBUF entered WoL mode as result */ | ||
1712 | diff --git a/drivers/net/ethernet/broadcom/bcmsysport.h b/drivers/net/ethernet/broadcom/bcmsysport.h | ||
1713 | index 07b0aaa98de0..0d3444f1d78a 100644 | ||
1714 | --- a/drivers/net/ethernet/broadcom/bcmsysport.h | ||
1715 | +++ b/drivers/net/ethernet/broadcom/bcmsysport.h | ||
1716 | @@ -11,6 +11,7 @@ | ||
1717 | #ifndef __BCM_SYSPORT_H | ||
1718 | #define __BCM_SYSPORT_H | ||
1719 | |||
1720 | +#include <linux/ethtool.h> | ||
1721 | #include <linux/if_vlan.h> | ||
1722 | |||
1723 | /* Receive/transmit descriptor format */ | ||
1724 | @@ -681,6 +682,7 @@ struct bcm_sysport_priv { | ||
1725 | unsigned int crc_fwd:1; | ||
1726 | u16 rev; | ||
1727 | u32 wolopts; | ||
1728 | + u8 sopass[SOPASS_MAX]; | ||
1729 | unsigned int wol_irq_disabled:1; | ||
1730 | |||
1731 | /* MIB related fields */ | ||
1732 | diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c | ||
1733 | index 07282eb76867..89acf7bc4cf9 100644 | ||
1734 | --- a/drivers/net/ethernet/cisco/enic/enic_main.c | ||
1735 | +++ b/drivers/net/ethernet/cisco/enic/enic_main.c | ||
1736 | @@ -1180,7 +1180,7 @@ static void enic_rq_indicate_buf(struct vnic_rq *rq, | ||
1737 | * CHECSUM_UNNECESSARY. | ||
1738 | */ | ||
1739 | if ((netdev->features & NETIF_F_RXCSUM) && tcp_udp_csum_ok && | ||
1740 | - ipv4_csum_ok) | ||
1741 | + (ipv4_csum_ok || ipv6)) | ||
1742 | skb->ip_summed = CHECKSUM_UNNECESSARY; | ||
1743 | |||
1744 | if (vlan_stripped) | ||
1745 | diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c | ||
1746 | index 71a5ded9d1de..21dd5579130e 100644 | ||
1747 | --- a/drivers/net/ethernet/freescale/fman/fman_memac.c | ||
1748 | +++ b/drivers/net/ethernet/freescale/fman/fman_memac.c | ||
1749 | @@ -923,7 +923,7 @@ int memac_add_hash_mac_address(struct fman_mac *memac, enet_addr_t *eth_addr) | ||
1750 | hash = get_mac_addr_hash_code(addr) & HASH_CTRL_ADDR_MASK; | ||
1751 | |||
1752 | /* Create element to be added to the driver hash table */ | ||
1753 | - hash_entry = kmalloc(sizeof(*hash_entry), GFP_KERNEL); | ||
1754 | + hash_entry = kmalloc(sizeof(*hash_entry), GFP_ATOMIC); | ||
1755 | if (!hash_entry) | ||
1756 | return -ENOMEM; | ||
1757 | hash_entry->addr = addr; | ||
1758 | diff --git a/drivers/net/ethernet/freescale/fman/fman_tgec.c b/drivers/net/ethernet/freescale/fman/fman_tgec.c | ||
1759 | index 4b0f3a50b293..e575259d20f4 100644 | ||
1760 | --- a/drivers/net/ethernet/freescale/fman/fman_tgec.c | ||
1761 | +++ b/drivers/net/ethernet/freescale/fman/fman_tgec.c | ||
1762 | @@ -551,7 +551,7 @@ int tgec_add_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr) | ||
1763 | hash = (crc >> TGEC_HASH_MCAST_SHIFT) & TGEC_HASH_ADR_MSK; | ||
1764 | |||
1765 | /* Create element to be added to the driver hash table */ | ||
1766 | - hash_entry = kmalloc(sizeof(*hash_entry), GFP_KERNEL); | ||
1767 | + hash_entry = kmalloc(sizeof(*hash_entry), GFP_ATOMIC); | ||
1768 | if (!hash_entry) | ||
1769 | return -ENOMEM; | ||
1770 | hash_entry->addr = addr; | ||
1771 | diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c | ||
1772 | index 57c7456a5751..7836072d3f63 100644 | ||
1773 | --- a/drivers/net/ethernet/intel/i40e/i40e_main.c | ||
1774 | +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c | ||
1775 | @@ -9194,6 +9194,9 @@ static int i40e_config_netdev(struct i40e_vsi *vsi) | ||
1776 | ether_addr_copy(netdev->dev_addr, mac_addr); | ||
1777 | ether_addr_copy(netdev->perm_addr, mac_addr); | ||
1778 | |||
1779 | + /* i40iw_net_event() reads 16 bytes from neigh->primary_key */ | ||
1780 | + netdev->neigh_priv_len = sizeof(u32) * 4; | ||
1781 | + | ||
1782 | netdev->priv_flags |= IFF_UNICAST_FLT; | ||
1783 | netdev->priv_flags |= IFF_SUPP_NOFCS; | ||
1784 | /* Setup netdev TC information */ | ||
1785 | diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c | ||
1786 | index 3a61491421b1..82e48e355fb9 100644 | ||
1787 | --- a/drivers/net/ethernet/intel/igb/igb_main.c | ||
1788 | +++ b/drivers/net/ethernet/intel/igb/igb_main.c | ||
1789 | @@ -7564,9 +7564,11 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake, | ||
1790 | rtnl_unlock(); | ||
1791 | |||
1792 | #ifdef CONFIG_PM | ||
1793 | - retval = pci_save_state(pdev); | ||
1794 | - if (retval) | ||
1795 | - return retval; | ||
1796 | + if (!runtime) { | ||
1797 | + retval = pci_save_state(pdev); | ||
1798 | + if (retval) | ||
1799 | + return retval; | ||
1800 | + } | ||
1801 | #endif | ||
1802 | |||
1803 | status = rd32(E1000_STATUS); | ||
1804 | diff --git a/drivers/net/ethernet/marvell/skge.c b/drivers/net/ethernet/marvell/skge.c | ||
1805 | index 7173836fe361..c9f4b5412844 100644 | ||
1806 | --- a/drivers/net/ethernet/marvell/skge.c | ||
1807 | +++ b/drivers/net/ethernet/marvell/skge.c | ||
1808 | @@ -152,8 +152,10 @@ static void skge_get_regs(struct net_device *dev, struct ethtool_regs *regs, | ||
1809 | memset(p, 0, regs->len); | ||
1810 | memcpy_fromio(p, io, B3_RAM_ADDR); | ||
1811 | |||
1812 | - memcpy_fromio(p + B3_RI_WTO_R1, io + B3_RI_WTO_R1, | ||
1813 | - regs->len - B3_RI_WTO_R1); | ||
1814 | + if (regs->len > B3_RI_WTO_R1) { | ||
1815 | + memcpy_fromio(p + B3_RI_WTO_R1, io + B3_RI_WTO_R1, | ||
1816 | + regs->len - B3_RI_WTO_R1); | ||
1817 | + } | ||
1818 | } | ||
1819 | |||
1820 | /* Wake on Lan only supported on Yukon chips with rev 1 or above */ | ||
1821 | diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | ||
1822 | index 7309ae3b8c7b..2b6a7eb2be7e 100644 | ||
1823 | --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | ||
1824 | +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | ||
1825 | @@ -553,6 +553,8 @@ static inline bool is_first_ethertype_ip(struct sk_buff *skb) | ||
1826 | return (ethertype == htons(ETH_P_IP) || ethertype == htons(ETH_P_IPV6)); | ||
1827 | } | ||
1828 | |||
1829 | +#define short_frame(size) ((size) <= ETH_ZLEN + ETH_FCS_LEN) | ||
1830 | + | ||
1831 | static inline void mlx5e_handle_csum(struct net_device *netdev, | ||
1832 | struct mlx5_cqe64 *cqe, | ||
1833 | struct mlx5e_rq *rq, | ||
1834 | @@ -567,6 +569,17 @@ static inline void mlx5e_handle_csum(struct net_device *netdev, | ||
1835 | return; | ||
1836 | } | ||
1837 | |||
1838 | + /* CQE csum doesn't cover padding octets in short ethernet | ||
1839 | + * frames. And the pad field is appended prior to calculating | ||
1840 | + * and appending the FCS field. | ||
1841 | + * | ||
1842 | + * Detecting these padded frames requires to verify and parse | ||
1843 | + * IP headers, so we simply force all those small frames to be | ||
1844 | + * CHECKSUM_UNNECESSARY even if they are not padded. | ||
1845 | + */ | ||
1846 | + if (short_frame(skb->len)) | ||
1847 | + goto csum_unnecessary; | ||
1848 | + | ||
1849 | if (is_first_ethertype_ip(skb)) { | ||
1850 | skb->ip_summed = CHECKSUM_COMPLETE; | ||
1851 | skb->csum = csum_unfold((__force __sum16)cqe->check_sum); | ||
1852 | @@ -574,6 +587,7 @@ static inline void mlx5e_handle_csum(struct net_device *netdev, | ||
1853 | return; | ||
1854 | } | ||
1855 | |||
1856 | +csum_unnecessary: | ||
1857 | if (likely((cqe->hds_ip_ext & CQE_L3_OK) && | ||
1858 | (cqe->hds_ip_ext & CQE_L4_OK))) { | ||
1859 | skb->ip_summed = CHECKSUM_UNNECESSARY; | ||
1860 | diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c | ||
1861 | index e45e2f14fb94..fe5b0ac8c631 100644 | ||
1862 | --- a/drivers/net/ethernet/sun/niu.c | ||
1863 | +++ b/drivers/net/ethernet/sun/niu.c | ||
1864 | @@ -8121,6 +8121,8 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end) | ||
1865 | start += 3; | ||
1866 | |||
1867 | prop_len = niu_pci_eeprom_read(np, start + 4); | ||
1868 | + if (prop_len < 0) | ||
1869 | + return prop_len; | ||
1870 | err = niu_pci_vpd_get_propname(np, start + 5, namebuf, 64); | ||
1871 | if (err < 0) | ||
1872 | return err; | ||
1873 | @@ -8165,8 +8167,12 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end) | ||
1874 | netif_printk(np, probe, KERN_DEBUG, np->dev, | ||
1875 | "VPD_SCAN: Reading in property [%s] len[%d]\n", | ||
1876 | namebuf, prop_len); | ||
1877 | - for (i = 0; i < prop_len; i++) | ||
1878 | - *prop_buf++ = niu_pci_eeprom_read(np, off + i); | ||
1879 | + for (i = 0; i < prop_len; i++) { | ||
1880 | + err = niu_pci_eeprom_read(np, off + i); | ||
1881 | + if (err >= 0) | ||
1882 | + *prop_buf = err; | ||
1883 | + ++prop_buf; | ||
1884 | + } | ||
1885 | } | ||
1886 | |||
1887 | start += len; | ||
1888 | diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c | ||
1889 | index 482ea404a2d4..557f6510bad7 100644 | ||
1890 | --- a/drivers/net/phy/dp83640.c | ||
1891 | +++ b/drivers/net/phy/dp83640.c | ||
1892 | @@ -891,14 +891,14 @@ static void decode_txts(struct dp83640_private *dp83640, | ||
1893 | struct phy_txts *phy_txts) | ||
1894 | { | ||
1895 | struct skb_shared_hwtstamps shhwtstamps; | ||
1896 | + struct dp83640_skb_info *skb_info; | ||
1897 | struct sk_buff *skb; | ||
1898 | - u64 ns; | ||
1899 | u8 overflow; | ||
1900 | + u64 ns; | ||
1901 | |||
1902 | /* We must already have the skb that triggered this. */ | ||
1903 | - | ||
1904 | +again: | ||
1905 | skb = skb_dequeue(&dp83640->tx_queue); | ||
1906 | - | ||
1907 | if (!skb) { | ||
1908 | pr_debug("have timestamp but tx_queue empty\n"); | ||
1909 | return; | ||
1910 | @@ -913,6 +913,11 @@ static void decode_txts(struct dp83640_private *dp83640, | ||
1911 | } | ||
1912 | return; | ||
1913 | } | ||
1914 | + skb_info = (struct dp83640_skb_info *)skb->cb; | ||
1915 | + if (time_after(jiffies, skb_info->tmo)) { | ||
1916 | + kfree_skb(skb); | ||
1917 | + goto again; | ||
1918 | + } | ||
1919 | |||
1920 | ns = phy2txts(phy_txts); | ||
1921 | memset(&shhwtstamps, 0, sizeof(shhwtstamps)); | ||
1922 | @@ -1463,6 +1468,7 @@ static bool dp83640_rxtstamp(struct phy_device *phydev, | ||
1923 | static void dp83640_txtstamp(struct phy_device *phydev, | ||
1924 | struct sk_buff *skb, int type) | ||
1925 | { | ||
1926 | + struct dp83640_skb_info *skb_info = (struct dp83640_skb_info *)skb->cb; | ||
1927 | struct dp83640_private *dp83640 = phydev->priv; | ||
1928 | |||
1929 | switch (dp83640->hwts_tx_en) { | ||
1930 | @@ -1475,6 +1481,7 @@ static void dp83640_txtstamp(struct phy_device *phydev, | ||
1931 | /* fall through */ | ||
1932 | case HWTSTAMP_TX_ON: | ||
1933 | skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; | ||
1934 | + skb_info->tmo = jiffies + SKB_TIMESTAMP_TIMEOUT; | ||
1935 | skb_queue_tail(&dp83640->tx_queue, skb); | ||
1936 | break; | ||
1937 | |||
1938 | diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h | ||
1939 | index a7316710a902..7bda18c61eb6 100644 | ||
1940 | --- a/drivers/net/wireless/ath/ath9k/ath9k.h | ||
1941 | +++ b/drivers/net/wireless/ath/ath9k/ath9k.h | ||
1942 | @@ -267,7 +267,7 @@ struct ath_node { | ||
1943 | #endif | ||
1944 | u8 key_idx[4]; | ||
1945 | |||
1946 | - u32 ackto; | ||
1947 | + int ackto; | ||
1948 | struct list_head list; | ||
1949 | }; | ||
1950 | |||
1951 | diff --git a/drivers/net/wireless/ath/ath9k/dynack.c b/drivers/net/wireless/ath/ath9k/dynack.c | ||
1952 | index 7334c9b09e82..6e236a485431 100644 | ||
1953 | --- a/drivers/net/wireless/ath/ath9k/dynack.c | ||
1954 | +++ b/drivers/net/wireless/ath/ath9k/dynack.c | ||
1955 | @@ -29,9 +29,13 @@ | ||
1956 | * ath_dynack_ewma - EWMA (Exponentially Weighted Moving Average) calculation | ||
1957 | * | ||
1958 | */ | ||
1959 | -static inline u32 ath_dynack_ewma(u32 old, u32 new) | ||
1960 | +static inline int ath_dynack_ewma(int old, int new) | ||
1961 | { | ||
1962 | - return (new * (EWMA_DIV - EWMA_LEVEL) + old * EWMA_LEVEL) / EWMA_DIV; | ||
1963 | + if (old > 0) | ||
1964 | + return (new * (EWMA_DIV - EWMA_LEVEL) + | ||
1965 | + old * EWMA_LEVEL) / EWMA_DIV; | ||
1966 | + else | ||
1967 | + return new; | ||
1968 | } | ||
1969 | |||
1970 | /** | ||
1971 | @@ -82,10 +86,10 @@ static inline bool ath_dynack_bssidmask(struct ath_hw *ah, const u8 *mac) | ||
1972 | */ | ||
1973 | static void ath_dynack_compute_ackto(struct ath_hw *ah) | ||
1974 | { | ||
1975 | - struct ath_node *an; | ||
1976 | - u32 to = 0; | ||
1977 | - struct ath_dynack *da = &ah->dynack; | ||
1978 | struct ath_common *common = ath9k_hw_common(ah); | ||
1979 | + struct ath_dynack *da = &ah->dynack; | ||
1980 | + struct ath_node *an; | ||
1981 | + int to = 0; | ||
1982 | |||
1983 | list_for_each_entry(an, &da->nodes, list) | ||
1984 | if (an->ackto > to) | ||
1985 | @@ -144,7 +148,8 @@ static void ath_dynack_compute_to(struct ath_hw *ah) | ||
1986 | an->ackto = ath_dynack_ewma(an->ackto, | ||
1987 | ackto); | ||
1988 | ath_dbg(ath9k_hw_common(ah), DYNACK, | ||
1989 | - "%pM to %u\n", dst, an->ackto); | ||
1990 | + "%pM to %d [%u]\n", dst, | ||
1991 | + an->ackto, ackto); | ||
1992 | if (time_is_before_jiffies(da->lto)) { | ||
1993 | ath_dynack_compute_ackto(ah); | ||
1994 | da->lto = jiffies + COMPUTE_TO; | ||
1995 | @@ -166,10 +171,12 @@ static void ath_dynack_compute_to(struct ath_hw *ah) | ||
1996 | * @ah: ath hw | ||
1997 | * @skb: socket buffer | ||
1998 | * @ts: tx status info | ||
1999 | + * @sta: station pointer | ||
2000 | * | ||
2001 | */ | ||
2002 | void ath_dynack_sample_tx_ts(struct ath_hw *ah, struct sk_buff *skb, | ||
2003 | - struct ath_tx_status *ts) | ||
2004 | + struct ath_tx_status *ts, | ||
2005 | + struct ieee80211_sta *sta) | ||
2006 | { | ||
2007 | u8 ridx; | ||
2008 | struct ieee80211_hdr *hdr; | ||
2009 | @@ -177,7 +184,7 @@ void ath_dynack_sample_tx_ts(struct ath_hw *ah, struct sk_buff *skb, | ||
2010 | struct ath_common *common = ath9k_hw_common(ah); | ||
2011 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); | ||
2012 | |||
2013 | - if ((info->flags & IEEE80211_TX_CTL_NO_ACK) || !da->enabled) | ||
2014 | + if (!da->enabled || (info->flags & IEEE80211_TX_CTL_NO_ACK)) | ||
2015 | return; | ||
2016 | |||
2017 | spin_lock_bh(&da->qlock); | ||
2018 | @@ -187,11 +194,19 @@ void ath_dynack_sample_tx_ts(struct ath_hw *ah, struct sk_buff *skb, | ||
2019 | /* late ACK */ | ||
2020 | if (ts->ts_status & ATH9K_TXERR_XRETRY) { | ||
2021 | if (ieee80211_is_assoc_req(hdr->frame_control) || | ||
2022 | - ieee80211_is_assoc_resp(hdr->frame_control)) { | ||
2023 | + ieee80211_is_assoc_resp(hdr->frame_control) || | ||
2024 | + ieee80211_is_auth(hdr->frame_control)) { | ||
2025 | ath_dbg(common, DYNACK, "late ack\n"); | ||
2026 | + | ||
2027 | ath9k_hw_setslottime(ah, (LATEACK_TO - 3) / 2); | ||
2028 | ath9k_hw_set_ack_timeout(ah, LATEACK_TO); | ||
2029 | ath9k_hw_set_cts_timeout(ah, LATEACK_TO); | ||
2030 | + if (sta) { | ||
2031 | + struct ath_node *an; | ||
2032 | + | ||
2033 | + an = (struct ath_node *)sta->drv_priv; | ||
2034 | + an->ackto = -1; | ||
2035 | + } | ||
2036 | da->lto = jiffies + LATEACK_DELAY; | ||
2037 | } | ||
2038 | |||
2039 | @@ -251,7 +266,7 @@ void ath_dynack_sample_ack_ts(struct ath_hw *ah, struct sk_buff *skb, | ||
2040 | struct ath_common *common = ath9k_hw_common(ah); | ||
2041 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; | ||
2042 | |||
2043 | - if (!ath_dynack_bssidmask(ah, hdr->addr1) || !da->enabled) | ||
2044 | + if (!da->enabled || !ath_dynack_bssidmask(ah, hdr->addr1)) | ||
2045 | return; | ||
2046 | |||
2047 | spin_lock_bh(&da->qlock); | ||
2048 | diff --git a/drivers/net/wireless/ath/ath9k/dynack.h b/drivers/net/wireless/ath/ath9k/dynack.h | ||
2049 | index 6d7bef976742..cf60224d40df 100644 | ||
2050 | --- a/drivers/net/wireless/ath/ath9k/dynack.h | ||
2051 | +++ b/drivers/net/wireless/ath/ath9k/dynack.h | ||
2052 | @@ -86,7 +86,8 @@ void ath_dynack_node_deinit(struct ath_hw *ah, struct ath_node *an); | ||
2053 | void ath_dynack_init(struct ath_hw *ah); | ||
2054 | void ath_dynack_sample_ack_ts(struct ath_hw *ah, struct sk_buff *skb, u32 ts); | ||
2055 | void ath_dynack_sample_tx_ts(struct ath_hw *ah, struct sk_buff *skb, | ||
2056 | - struct ath_tx_status *ts); | ||
2057 | + struct ath_tx_status *ts, | ||
2058 | + struct ieee80211_sta *sta); | ||
2059 | #else | ||
2060 | static inline void ath_dynack_init(struct ath_hw *ah) {} | ||
2061 | static inline void ath_dynack_node_init(struct ath_hw *ah, | ||
2062 | @@ -97,7 +98,8 @@ static inline void ath_dynack_sample_ack_ts(struct ath_hw *ah, | ||
2063 | struct sk_buff *skb, u32 ts) {} | ||
2064 | static inline void ath_dynack_sample_tx_ts(struct ath_hw *ah, | ||
2065 | struct sk_buff *skb, | ||
2066 | - struct ath_tx_status *ts) {} | ||
2067 | + struct ath_tx_status *ts, | ||
2068 | + struct ieee80211_sta *sta) {} | ||
2069 | #endif | ||
2070 | |||
2071 | #endif /* DYNACK_H */ | ||
2072 | diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c | ||
2073 | index 8a504afe667e..0ef27d99bef3 100644 | ||
2074 | --- a/drivers/net/wireless/ath/ath9k/xmit.c | ||
2075 | +++ b/drivers/net/wireless/ath/ath9k/xmit.c | ||
2076 | @@ -593,7 +593,7 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq, | ||
2077 | if (bf == bf->bf_lastbf) | ||
2078 | ath_dynack_sample_tx_ts(sc->sc_ah, | ||
2079 | bf->bf_mpdu, | ||
2080 | - ts); | ||
2081 | + ts, sta); | ||
2082 | } | ||
2083 | |||
2084 | ath_tx_complete_buf(sc, bf, txq, &bf_head, sta, ts, | ||
2085 | @@ -709,7 +709,8 @@ static void ath_tx_process_buffer(struct ath_softc *sc, struct ath_txq *txq, | ||
2086 | memcpy(info->control.rates, bf->rates, | ||
2087 | sizeof(info->control.rates)); | ||
2088 | ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok); | ||
2089 | - ath_dynack_sample_tx_ts(sc->sc_ah, bf->bf_mpdu, ts); | ||
2090 | + ath_dynack_sample_tx_ts(sc->sc_ah, bf->bf_mpdu, ts, | ||
2091 | + sta); | ||
2092 | } | ||
2093 | ath_tx_complete_buf(sc, bf, txq, bf_head, sta, ts, txok); | ||
2094 | } else | ||
2095 | diff --git a/drivers/net/wireless/st/cw1200/scan.c b/drivers/net/wireless/st/cw1200/scan.c | ||
2096 | index 0a0ff7e31f5b..c5492d792f43 100644 | ||
2097 | --- a/drivers/net/wireless/st/cw1200/scan.c | ||
2098 | +++ b/drivers/net/wireless/st/cw1200/scan.c | ||
2099 | @@ -78,6 +78,10 @@ int cw1200_hw_scan(struct ieee80211_hw *hw, | ||
2100 | if (req->n_ssids > WSM_SCAN_MAX_NUM_OF_SSIDS) | ||
2101 | return -EINVAL; | ||
2102 | |||
2103 | + /* will be unlocked in cw1200_scan_work() */ | ||
2104 | + down(&priv->scan.lock); | ||
2105 | + mutex_lock(&priv->conf_mutex); | ||
2106 | + | ||
2107 | frame.skb = ieee80211_probereq_get(hw, priv->vif->addr, NULL, 0, | ||
2108 | req->ie_len); | ||
2109 | if (!frame.skb) | ||
2110 | @@ -86,19 +90,15 @@ int cw1200_hw_scan(struct ieee80211_hw *hw, | ||
2111 | if (req->ie_len) | ||
2112 | memcpy(skb_put(frame.skb, req->ie_len), req->ie, req->ie_len); | ||
2113 | |||
2114 | - /* will be unlocked in cw1200_scan_work() */ | ||
2115 | - down(&priv->scan.lock); | ||
2116 | - mutex_lock(&priv->conf_mutex); | ||
2117 | - | ||
2118 | ret = wsm_set_template_frame(priv, &frame); | ||
2119 | if (!ret) { | ||
2120 | /* Host want to be the probe responder. */ | ||
2121 | ret = wsm_set_probe_responder(priv, true); | ||
2122 | } | ||
2123 | if (ret) { | ||
2124 | + dev_kfree_skb(frame.skb); | ||
2125 | mutex_unlock(&priv->conf_mutex); | ||
2126 | up(&priv->scan.lock); | ||
2127 | - dev_kfree_skb(frame.skb); | ||
2128 | return ret; | ||
2129 | } | ||
2130 | |||
2131 | @@ -120,10 +120,9 @@ int cw1200_hw_scan(struct ieee80211_hw *hw, | ||
2132 | ++priv->scan.n_ssids; | ||
2133 | } | ||
2134 | |||
2135 | - mutex_unlock(&priv->conf_mutex); | ||
2136 | - | ||
2137 | if (frame.skb) | ||
2138 | dev_kfree_skb(frame.skb); | ||
2139 | + mutex_unlock(&priv->conf_mutex); | ||
2140 | queue_work(priv->workqueue, &priv->scan.work); | ||
2141 | return 0; | ||
2142 | } | ||
2143 | diff --git a/drivers/pci/host/vmd.c b/drivers/pci/host/vmd.c | ||
2144 | index 0e7f8f319fe3..9a60098f7b7d 100644 | ||
2145 | --- a/drivers/pci/host/vmd.c | ||
2146 | +++ b/drivers/pci/host/vmd.c | ||
2147 | @@ -731,6 +731,11 @@ static void vmd_remove(struct pci_dev *dev) | ||
2148 | static int vmd_suspend(struct device *dev) | ||
2149 | { | ||
2150 | struct pci_dev *pdev = to_pci_dev(dev); | ||
2151 | + struct vmd_dev *vmd = pci_get_drvdata(pdev); | ||
2152 | + int i; | ||
2153 | + | ||
2154 | + for (i = 0; i < vmd->msix_count; i++) | ||
2155 | + devm_free_irq(dev, pci_irq_vector(pdev, i), &vmd->irqs[i]); | ||
2156 | |||
2157 | pci_save_state(pdev); | ||
2158 | return 0; | ||
2159 | @@ -739,6 +744,16 @@ static int vmd_suspend(struct device *dev) | ||
2160 | static int vmd_resume(struct device *dev) | ||
2161 | { | ||
2162 | struct pci_dev *pdev = to_pci_dev(dev); | ||
2163 | + struct vmd_dev *vmd = pci_get_drvdata(pdev); | ||
2164 | + int err, i; | ||
2165 | + | ||
2166 | + for (i = 0; i < vmd->msix_count; i++) { | ||
2167 | + err = devm_request_irq(dev, pci_irq_vector(pdev, i), | ||
2168 | + vmd_irq, IRQF_NO_THREAD, | ||
2169 | + "vmd", &vmd->irqs[i]); | ||
2170 | + if (err) | ||
2171 | + return err; | ||
2172 | + } | ||
2173 | |||
2174 | pci_restore_state(pdev); | ||
2175 | return 0; | ||
2176 | diff --git a/drivers/pinctrl/meson/pinctrl-meson8.c b/drivers/pinctrl/meson/pinctrl-meson8.c | ||
2177 | index 07f1cb21c1b8..0de7fa414beb 100644 | ||
2178 | --- a/drivers/pinctrl/meson/pinctrl-meson8.c | ||
2179 | +++ b/drivers/pinctrl/meson/pinctrl-meson8.c | ||
2180 | @@ -736,7 +736,9 @@ static const char * const gpio_groups[] = { | ||
2181 | "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_9", | ||
2182 | "BOOT_10", "BOOT_11", "BOOT_12", "BOOT_13", "BOOT_14", | ||
2183 | "BOOT_15", "BOOT_16", "BOOT_17", "BOOT_18", | ||
2184 | +}; | ||
2185 | |||
2186 | +static const char * const gpio_aobus_groups[] = { | ||
2187 | "GPIOAO_0", "GPIOAO_1", "GPIOAO_2", "GPIOAO_3", | ||
2188 | "GPIOAO_4", "GPIOAO_5", "GPIOAO_6", "GPIOAO_7", | ||
2189 | "GPIOAO_8", "GPIOAO_9", "GPIOAO_10", "GPIOAO_11", | ||
2190 | @@ -908,6 +910,7 @@ static struct meson_pmx_func meson8_cbus_functions[] = { | ||
2191 | }; | ||
2192 | |||
2193 | static struct meson_pmx_func meson8_aobus_functions[] = { | ||
2194 | + FUNCTION(gpio_aobus), | ||
2195 | FUNCTION(uart_ao), | ||
2196 | FUNCTION(remote), | ||
2197 | FUNCTION(i2c_slave_ao), | ||
2198 | diff --git a/drivers/pinctrl/meson/pinctrl-meson8b.c b/drivers/pinctrl/meson/pinctrl-meson8b.c | ||
2199 | index f87ef5a0ee6c..cbe5f5cbddb8 100644 | ||
2200 | --- a/drivers/pinctrl/meson/pinctrl-meson8b.c | ||
2201 | +++ b/drivers/pinctrl/meson/pinctrl-meson8b.c | ||
2202 | @@ -643,16 +643,18 @@ static const char * const gpio_groups[] = { | ||
2203 | "BOOT_10", "BOOT_11", "BOOT_12", "BOOT_13", "BOOT_14", | ||
2204 | "BOOT_15", "BOOT_16", "BOOT_17", "BOOT_18", | ||
2205 | |||
2206 | - "GPIOAO_0", "GPIOAO_1", "GPIOAO_2", "GPIOAO_3", | ||
2207 | - "GPIOAO_4", "GPIOAO_5", "GPIOAO_6", "GPIOAO_7", | ||
2208 | - "GPIOAO_8", "GPIOAO_9", "GPIOAO_10", "GPIOAO_11", | ||
2209 | - "GPIOAO_12", "GPIOAO_13", "GPIO_BSD_EN", "GPIO_TEST_N", | ||
2210 | - | ||
2211 | "DIF_0_P", "DIF_0_N", "DIF_1_P", "DIF_1_N", | ||
2212 | "DIF_2_P", "DIF_2_N", "DIF_3_P", "DIF_3_N", | ||
2213 | "DIF_4_P", "DIF_4_N" | ||
2214 | }; | ||
2215 | |||
2216 | +static const char * const gpio_aobus_groups[] = { | ||
2217 | + "GPIOAO_0", "GPIOAO_1", "GPIOAO_2", "GPIOAO_3", | ||
2218 | + "GPIOAO_4", "GPIOAO_5", "GPIOAO_6", "GPIOAO_7", | ||
2219 | + "GPIOAO_8", "GPIOAO_9", "GPIOAO_10", "GPIOAO_11", | ||
2220 | + "GPIOAO_12", "GPIOAO_13", "GPIO_BSD_EN", "GPIO_TEST_N" | ||
2221 | +}; | ||
2222 | + | ||
2223 | static const char * const sd_a_groups[] = { | ||
2224 | "sd_d0_a", "sd_d1_a", "sd_d2_a", "sd_d3_a", "sd_clk_a", | ||
2225 | "sd_cmd_a" | ||
2226 | @@ -868,6 +870,7 @@ static struct meson_pmx_func meson8b_cbus_functions[] = { | ||
2227 | }; | ||
2228 | |||
2229 | static struct meson_pmx_func meson8b_aobus_functions[] = { | ||
2230 | + FUNCTION(gpio_aobus), | ||
2231 | FUNCTION(uart_ao), | ||
2232 | FUNCTION(uart_ao_b), | ||
2233 | FUNCTION(i2c_slave_ao), | ||
2234 | diff --git a/drivers/ptp/ptp_chardev.c b/drivers/ptp/ptp_chardev.c | ||
2235 | index a421d6c551b6..ecb41eacd74b 100644 | ||
2236 | --- a/drivers/ptp/ptp_chardev.c | ||
2237 | +++ b/drivers/ptp/ptp_chardev.c | ||
2238 | @@ -228,7 +228,9 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg) | ||
2239 | pct->sec = ts.tv_sec; | ||
2240 | pct->nsec = ts.tv_nsec; | ||
2241 | pct++; | ||
2242 | - ptp->info->gettime64(ptp->info, &ts); | ||
2243 | + err = ptp->info->gettime64(ptp->info, &ts); | ||
2244 | + if (err) | ||
2245 | + goto out; | ||
2246 | pct->sec = ts.tv_sec; | ||
2247 | pct->nsec = ts.tv_nsec; | ||
2248 | pct++; | ||
2249 | @@ -281,6 +283,7 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg) | ||
2250 | break; | ||
2251 | } | ||
2252 | |||
2253 | +out: | ||
2254 | kfree(sysoff); | ||
2255 | return err; | ||
2256 | } | ||
2257 | diff --git a/drivers/scsi/aic94xx/aic94xx_init.c b/drivers/scsi/aic94xx/aic94xx_init.c | ||
2258 | index 913ebb6d0d29..85442edf3c49 100644 | ||
2259 | --- a/drivers/scsi/aic94xx/aic94xx_init.c | ||
2260 | +++ b/drivers/scsi/aic94xx/aic94xx_init.c | ||
2261 | @@ -281,7 +281,7 @@ static ssize_t asd_show_dev_rev(struct device *dev, | ||
2262 | return snprintf(buf, PAGE_SIZE, "%s\n", | ||
2263 | asd_dev_rev[asd_ha->revision_id]); | ||
2264 | } | ||
2265 | -static DEVICE_ATTR(revision, S_IRUGO, asd_show_dev_rev, NULL); | ||
2266 | +static DEVICE_ATTR(aic_revision, S_IRUGO, asd_show_dev_rev, NULL); | ||
2267 | |||
2268 | static ssize_t asd_show_dev_bios_build(struct device *dev, | ||
2269 | struct device_attribute *attr,char *buf) | ||
2270 | @@ -478,7 +478,7 @@ static int asd_create_dev_attrs(struct asd_ha_struct *asd_ha) | ||
2271 | { | ||
2272 | int err; | ||
2273 | |||
2274 | - err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_revision); | ||
2275 | + err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_aic_revision); | ||
2276 | if (err) | ||
2277 | return err; | ||
2278 | |||
2279 | @@ -500,13 +500,13 @@ err_update_bios: | ||
2280 | err_biosb: | ||
2281 | device_remove_file(&asd_ha->pcidev->dev, &dev_attr_bios_build); | ||
2282 | err_rev: | ||
2283 | - device_remove_file(&asd_ha->pcidev->dev, &dev_attr_revision); | ||
2284 | + device_remove_file(&asd_ha->pcidev->dev, &dev_attr_aic_revision); | ||
2285 | return err; | ||
2286 | } | ||
2287 | |||
2288 | static void asd_remove_dev_attrs(struct asd_ha_struct *asd_ha) | ||
2289 | { | ||
2290 | - device_remove_file(&asd_ha->pcidev->dev, &dev_attr_revision); | ||
2291 | + device_remove_file(&asd_ha->pcidev->dev, &dev_attr_aic_revision); | ||
2292 | device_remove_file(&asd_ha->pcidev->dev, &dev_attr_bios_build); | ||
2293 | device_remove_file(&asd_ha->pcidev->dev, &dev_attr_pcba_sn); | ||
2294 | device_remove_file(&asd_ha->pcidev->dev, &dev_attr_update_bios); | ||
2295 | diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c | ||
2296 | index fc7addaf24da..4905455bbfc7 100644 | ||
2297 | --- a/drivers/scsi/lpfc/lpfc_els.c | ||
2298 | +++ b/drivers/scsi/lpfc/lpfc_els.c | ||
2299 | @@ -5396,6 +5396,9 @@ error: | ||
2300 | stat = (struct ls_rjt *)(pcmd + sizeof(uint32_t)); | ||
2301 | stat->un.b.lsRjtRsnCode = LSRJT_UNABLE_TPC; | ||
2302 | |||
2303 | + if (shdr_add_status == ADD_STATUS_OPERATION_ALREADY_ACTIVE) | ||
2304 | + stat->un.b.lsRjtRsnCodeExp = LSEXP_CMD_IN_PROGRESS; | ||
2305 | + | ||
2306 | elsiocb->iocb_cmpl = lpfc_cmpl_els_rsp; | ||
2307 | phba->fc_stat.elsXmitLSRJT++; | ||
2308 | rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, elsiocb, 0); | ||
2309 | diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c | ||
2310 | index b2b969990a5d..06a062455404 100644 | ||
2311 | --- a/drivers/scsi/smartpqi/smartpqi_init.c | ||
2312 | +++ b/drivers/scsi/smartpqi/smartpqi_init.c | ||
2313 | @@ -473,6 +473,7 @@ struct bmic_host_wellness_driver_version { | ||
2314 | u8 driver_version_tag[2]; | ||
2315 | __le16 driver_version_length; | ||
2316 | char driver_version[32]; | ||
2317 | + u8 dont_write_tag[2]; | ||
2318 | u8 end_tag[2]; | ||
2319 | }; | ||
2320 | |||
2321 | @@ -502,6 +503,8 @@ static int pqi_write_driver_version_to_host_wellness( | ||
2322 | strncpy(buffer->driver_version, DRIVER_VERSION, | ||
2323 | sizeof(buffer->driver_version) - 1); | ||
2324 | buffer->driver_version[sizeof(buffer->driver_version) - 1] = '\0'; | ||
2325 | + buffer->dont_write_tag[0] = 'D'; | ||
2326 | + buffer->dont_write_tag[1] = 'W'; | ||
2327 | buffer->end_tag[0] = 'Z'; | ||
2328 | buffer->end_tag[1] = 'Z'; | ||
2329 | |||
2330 | @@ -980,6 +983,9 @@ static void pqi_get_volume_status(struct pqi_ctrl_info *ctrl_info, | ||
2331 | if (rc) | ||
2332 | goto out; | ||
2333 | |||
2334 | + if (vpd->page_code != CISS_VPD_LV_STATUS) | ||
2335 | + goto out; | ||
2336 | + | ||
2337 | page_length = offsetof(struct ciss_vpd_logical_volume_status, | ||
2338 | volume_status) + vpd->page_length; | ||
2339 | if (page_length < sizeof(*vpd)) | ||
2340 | diff --git a/drivers/soc/bcm/brcmstb/common.c b/drivers/soc/bcm/brcmstb/common.c | ||
2341 | index 94e7335553f4..3f6063b639ac 100644 | ||
2342 | --- a/drivers/soc/bcm/brcmstb/common.c | ||
2343 | +++ b/drivers/soc/bcm/brcmstb/common.c | ||
2344 | @@ -31,13 +31,17 @@ static const struct of_device_id brcmstb_machine_match[] = { | ||
2345 | |||
2346 | bool soc_is_brcmstb(void) | ||
2347 | { | ||
2348 | + const struct of_device_id *match; | ||
2349 | struct device_node *root; | ||
2350 | |||
2351 | root = of_find_node_by_path("/"); | ||
2352 | if (!root) | ||
2353 | return false; | ||
2354 | |||
2355 | - return of_match_node(brcmstb_machine_match, root) != NULL; | ||
2356 | + match = of_match_node(brcmstb_machine_match, root); | ||
2357 | + of_node_put(root); | ||
2358 | + | ||
2359 | + return match != NULL; | ||
2360 | } | ||
2361 | |||
2362 | static const struct of_device_id sun_top_ctrl_match[] = { | ||
2363 | diff --git a/drivers/soc/tegra/common.c b/drivers/soc/tegra/common.c | ||
2364 | index cd8f41351add..7bfb154d6fa5 100644 | ||
2365 | --- a/drivers/soc/tegra/common.c | ||
2366 | +++ b/drivers/soc/tegra/common.c | ||
2367 | @@ -22,11 +22,15 @@ static const struct of_device_id tegra_machine_match[] = { | ||
2368 | |||
2369 | bool soc_is_tegra(void) | ||
2370 | { | ||
2371 | + const struct of_device_id *match; | ||
2372 | struct device_node *root; | ||
2373 | |||
2374 | root = of_find_node_by_path("/"); | ||
2375 | if (!root) | ||
2376 | return false; | ||
2377 | |||
2378 | - return of_match_node(tegra_machine_match, root) != NULL; | ||
2379 | + match = of_match_node(tegra_machine_match, root); | ||
2380 | + of_node_put(root); | ||
2381 | + | ||
2382 | + return match != NULL; | ||
2383 | } | ||
2384 | diff --git a/drivers/staging/iio/adc/ad7280a.c b/drivers/staging/iio/adc/ad7280a.c | ||
2385 | index b460dda7eb65..dec25fadba8c 100644 | ||
2386 | --- a/drivers/staging/iio/adc/ad7280a.c | ||
2387 | +++ b/drivers/staging/iio/adc/ad7280a.c | ||
2388 | @@ -250,7 +250,9 @@ static int ad7280_read(struct ad7280_state *st, unsigned int devaddr, | ||
2389 | if (ret) | ||
2390 | return ret; | ||
2391 | |||
2392 | - __ad7280_read32(st, &tmp); | ||
2393 | + ret = __ad7280_read32(st, &tmp); | ||
2394 | + if (ret) | ||
2395 | + return ret; | ||
2396 | |||
2397 | if (ad7280_check_crc(st, tmp)) | ||
2398 | return -EIO; | ||
2399 | @@ -288,7 +290,9 @@ static int ad7280_read_channel(struct ad7280_state *st, unsigned int devaddr, | ||
2400 | |||
2401 | ad7280_delay(st); | ||
2402 | |||
2403 | - __ad7280_read32(st, &tmp); | ||
2404 | + ret = __ad7280_read32(st, &tmp); | ||
2405 | + if (ret) | ||
2406 | + return ret; | ||
2407 | |||
2408 | if (ad7280_check_crc(st, tmp)) | ||
2409 | return -EIO; | ||
2410 | @@ -321,7 +325,9 @@ static int ad7280_read_all_channels(struct ad7280_state *st, unsigned int cnt, | ||
2411 | ad7280_delay(st); | ||
2412 | |||
2413 | for (i = 0; i < cnt; i++) { | ||
2414 | - __ad7280_read32(st, &tmp); | ||
2415 | + ret = __ad7280_read32(st, &tmp); | ||
2416 | + if (ret) | ||
2417 | + return ret; | ||
2418 | |||
2419 | if (ad7280_check_crc(st, tmp)) | ||
2420 | return -EIO; | ||
2421 | @@ -364,7 +370,10 @@ static int ad7280_chain_setup(struct ad7280_state *st) | ||
2422 | return ret; | ||
2423 | |||
2424 | for (n = 0; n <= AD7280A_MAX_CHAIN; n++) { | ||
2425 | - __ad7280_read32(st, &val); | ||
2426 | + ret = __ad7280_read32(st, &val); | ||
2427 | + if (ret) | ||
2428 | + return ret; | ||
2429 | + | ||
2430 | if (val == 0) | ||
2431 | return n - 1; | ||
2432 | |||
2433 | diff --git a/drivers/staging/iio/adc/ad7780.c b/drivers/staging/iio/adc/ad7780.c | ||
2434 | index c9a0c2aa602f..5d163386ab6e 100644 | ||
2435 | --- a/drivers/staging/iio/adc/ad7780.c | ||
2436 | +++ b/drivers/staging/iio/adc/ad7780.c | ||
2437 | @@ -87,12 +87,16 @@ static int ad7780_read_raw(struct iio_dev *indio_dev, | ||
2438 | long m) | ||
2439 | { | ||
2440 | struct ad7780_state *st = iio_priv(indio_dev); | ||
2441 | + int voltage_uv; | ||
2442 | |||
2443 | switch (m) { | ||
2444 | case IIO_CHAN_INFO_RAW: | ||
2445 | return ad_sigma_delta_single_conversion(indio_dev, chan, val); | ||
2446 | case IIO_CHAN_INFO_SCALE: | ||
2447 | - *val = st->int_vref_mv * st->gain; | ||
2448 | + voltage_uv = regulator_get_voltage(st->reg); | ||
2449 | + if (voltage_uv < 0) | ||
2450 | + return voltage_uv; | ||
2451 | + *val = (voltage_uv / 1000) * st->gain; | ||
2452 | *val2 = chan->scan_type.realbits - 1; | ||
2453 | return IIO_VAL_FRACTIONAL_LOG2; | ||
2454 | case IIO_CHAN_INFO_OFFSET: | ||
2455 | diff --git a/drivers/staging/iio/resolver/ad2s90.c b/drivers/staging/iio/resolver/ad2s90.c | ||
2456 | index 5b1c0db33e7f..b44253eb62ec 100644 | ||
2457 | --- a/drivers/staging/iio/resolver/ad2s90.c | ||
2458 | +++ b/drivers/staging/iio/resolver/ad2s90.c | ||
2459 | @@ -86,7 +86,12 @@ static int ad2s90_probe(struct spi_device *spi) | ||
2460 | /* need 600ns between CS and the first falling edge of SCLK */ | ||
2461 | spi->max_speed_hz = 830000; | ||
2462 | spi->mode = SPI_MODE_3; | ||
2463 | - spi_setup(spi); | ||
2464 | + ret = spi_setup(spi); | ||
2465 | + | ||
2466 | + if (ret < 0) { | ||
2467 | + dev_err(&spi->dev, "spi_setup failed!\n"); | ||
2468 | + return ret; | ||
2469 | + } | ||
2470 | |||
2471 | return 0; | ||
2472 | } | ||
2473 | diff --git a/drivers/thermal/thermal-generic-adc.c b/drivers/thermal/thermal-generic-adc.c | ||
2474 | index 73f55d6a1721..ad601e5b4175 100644 | ||
2475 | --- a/drivers/thermal/thermal-generic-adc.c | ||
2476 | +++ b/drivers/thermal/thermal-generic-adc.c | ||
2477 | @@ -26,7 +26,7 @@ struct gadc_thermal_info { | ||
2478 | |||
2479 | static int gadc_thermal_adc_to_temp(struct gadc_thermal_info *gti, int val) | ||
2480 | { | ||
2481 | - int temp, adc_hi, adc_lo; | ||
2482 | + int temp, temp_hi, temp_lo, adc_hi, adc_lo; | ||
2483 | int i; | ||
2484 | |||
2485 | for (i = 0; i < gti->nlookup_table; i++) { | ||
2486 | @@ -36,13 +36,17 @@ static int gadc_thermal_adc_to_temp(struct gadc_thermal_info *gti, int val) | ||
2487 | |||
2488 | if (i == 0) { | ||
2489 | temp = gti->lookup_table[0]; | ||
2490 | - } else if (i >= (gti->nlookup_table - 1)) { | ||
2491 | + } else if (i >= gti->nlookup_table) { | ||
2492 | temp = gti->lookup_table[2 * (gti->nlookup_table - 1)]; | ||
2493 | } else { | ||
2494 | adc_hi = gti->lookup_table[2 * i - 1]; | ||
2495 | adc_lo = gti->lookup_table[2 * i + 1]; | ||
2496 | - temp = gti->lookup_table[2 * i]; | ||
2497 | - temp -= ((val - adc_lo) * 1000) / (adc_hi - adc_lo); | ||
2498 | + | ||
2499 | + temp_hi = gti->lookup_table[2 * i - 2]; | ||
2500 | + temp_lo = gti->lookup_table[2 * i]; | ||
2501 | + | ||
2502 | + temp = temp_hi + mult_frac(temp_lo - temp_hi, val - adc_hi, | ||
2503 | + adc_lo - adc_hi); | ||
2504 | } | ||
2505 | |||
2506 | return temp; | ||
2507 | diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c | ||
2508 | index 226b0b4aced6..cd82ae34ddfa 100644 | ||
2509 | --- a/drivers/thermal/thermal_core.c | ||
2510 | +++ b/drivers/thermal/thermal_core.c | ||
2511 | @@ -597,16 +597,20 @@ static void update_temperature(struct thermal_zone_device *tz) | ||
2512 | tz->last_temperature, tz->temperature); | ||
2513 | } | ||
2514 | |||
2515 | -static void thermal_zone_device_reset(struct thermal_zone_device *tz) | ||
2516 | +static void thermal_zone_device_init(struct thermal_zone_device *tz) | ||
2517 | { | ||
2518 | struct thermal_instance *pos; | ||
2519 | - | ||
2520 | tz->temperature = THERMAL_TEMP_INVALID; | ||
2521 | - tz->passive = 0; | ||
2522 | list_for_each_entry(pos, &tz->thermal_instances, tz_node) | ||
2523 | pos->initialized = false; | ||
2524 | } | ||
2525 | |||
2526 | +static void thermal_zone_device_reset(struct thermal_zone_device *tz) | ||
2527 | +{ | ||
2528 | + tz->passive = 0; | ||
2529 | + thermal_zone_device_init(tz); | ||
2530 | +} | ||
2531 | + | ||
2532 | void thermal_zone_device_update(struct thermal_zone_device *tz, | ||
2533 | enum thermal_notify_event event) | ||
2534 | { | ||
2535 | @@ -2297,7 +2301,7 @@ static int thermal_pm_notify(struct notifier_block *nb, | ||
2536 | case PM_POST_SUSPEND: | ||
2537 | atomic_set(&in_suspend, 0); | ||
2538 | list_for_each_entry(tz, &thermal_tz_list, node) { | ||
2539 | - thermal_zone_device_reset(tz); | ||
2540 | + thermal_zone_device_init(tz); | ||
2541 | thermal_zone_device_update(tz, | ||
2542 | THERMAL_EVENT_UNSPECIFIED); | ||
2543 | } | ||
2544 | diff --git a/drivers/thermal/thermal_hwmon.h b/drivers/thermal/thermal_hwmon.h | ||
2545 | index c798fdb2ae43..f97f76691bd0 100644 | ||
2546 | --- a/drivers/thermal/thermal_hwmon.h | ||
2547 | +++ b/drivers/thermal/thermal_hwmon.h | ||
2548 | @@ -34,13 +34,13 @@ | ||
2549 | int thermal_add_hwmon_sysfs(struct thermal_zone_device *tz); | ||
2550 | void thermal_remove_hwmon_sysfs(struct thermal_zone_device *tz); | ||
2551 | #else | ||
2552 | -static int | ||
2553 | +static inline int | ||
2554 | thermal_add_hwmon_sysfs(struct thermal_zone_device *tz) | ||
2555 | { | ||
2556 | return 0; | ||
2557 | } | ||
2558 | |||
2559 | -static void | ||
2560 | +static inline void | ||
2561 | thermal_remove_hwmon_sysfs(struct thermal_zone_device *tz) | ||
2562 | { | ||
2563 | } | ||
2564 | diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c | ||
2565 | index e2ec04904f54..5c471c3481bd 100644 | ||
2566 | --- a/drivers/tty/serial/fsl_lpuart.c | ||
2567 | +++ b/drivers/tty/serial/fsl_lpuart.c | ||
2568 | @@ -1344,6 +1344,8 @@ lpuart_set_termios(struct uart_port *port, struct ktermios *termios, | ||
2569 | else | ||
2570 | cr1 &= ~UARTCR1_PT; | ||
2571 | } | ||
2572 | + } else { | ||
2573 | + cr1 &= ~UARTCR1_PE; | ||
2574 | } | ||
2575 | |||
2576 | /* ask the core to calculate the divisor */ | ||
2577 | @@ -1487,6 +1489,8 @@ lpuart32_set_termios(struct uart_port *port, struct ktermios *termios, | ||
2578 | else | ||
2579 | ctrl &= ~UARTCTRL_PT; | ||
2580 | } | ||
2581 | + } else { | ||
2582 | + ctrl &= ~UARTCTRL_PE; | ||
2583 | } | ||
2584 | |||
2585 | /* ask the core to calculate the divisor */ | ||
2586 | diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c | ||
2587 | index 5609305b3676..01ff8ec78023 100644 | ||
2588 | --- a/drivers/tty/serial/samsung.c | ||
2589 | +++ b/drivers/tty/serial/samsung.c | ||
2590 | @@ -1335,11 +1335,14 @@ static void s3c24xx_serial_set_termios(struct uart_port *port, | ||
2591 | wr_regl(port, S3C2410_ULCON, ulcon); | ||
2592 | wr_regl(port, S3C2410_UBRDIV, quot); | ||
2593 | |||
2594 | + port->status &= ~UPSTAT_AUTOCTS; | ||
2595 | + | ||
2596 | umcon = rd_regl(port, S3C2410_UMCON); | ||
2597 | if (termios->c_cflag & CRTSCTS) { | ||
2598 | umcon |= S3C2410_UMCOM_AFC; | ||
2599 | /* Disable RTS when RX FIFO contains 63 bytes */ | ||
2600 | umcon &= ~S3C2412_UMCON_AFC_8; | ||
2601 | + port->status = UPSTAT_AUTOCTS; | ||
2602 | } else { | ||
2603 | umcon &= ~S3C2410_UMCOM_AFC; | ||
2604 | } | ||
2605 | diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c | ||
2606 | index 95fc7e893fd2..55ed4c66f77f 100644 | ||
2607 | --- a/drivers/tty/serial/serial_core.c | ||
2608 | +++ b/drivers/tty/serial/serial_core.c | ||
2609 | @@ -141,6 +141,9 @@ static void uart_start(struct tty_struct *tty) | ||
2610 | struct uart_port *port; | ||
2611 | unsigned long flags; | ||
2612 | |||
2613 | + if (!state) | ||
2614 | + return; | ||
2615 | + | ||
2616 | port = uart_port_lock(state, flags); | ||
2617 | __uart_start(tty); | ||
2618 | uart_port_unlock(port, flags); | ||
2619 | @@ -717,6 +720,9 @@ static void uart_unthrottle(struct tty_struct *tty) | ||
2620 | struct uart_port *port; | ||
2621 | upstat_t mask = 0; | ||
2622 | |||
2623 | + if (!state) | ||
2624 | + return; | ||
2625 | + | ||
2626 | port = uart_port_ref(state); | ||
2627 | if (!port) | ||
2628 | return; | ||
2629 | diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c | ||
2630 | index 67679f619c3b..7b6919086539 100644 | ||
2631 | --- a/drivers/usb/core/hub.c | ||
2632 | +++ b/drivers/usb/core/hub.c | ||
2633 | @@ -1108,6 +1108,16 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type) | ||
2634 | USB_PORT_FEAT_ENABLE); | ||
2635 | } | ||
2636 | |||
2637 | + /* | ||
2638 | + * Add debounce if USB3 link is in polling/link training state. | ||
2639 | + * Link will automatically transition to Enabled state after | ||
2640 | + * link training completes. | ||
2641 | + */ | ||
2642 | + if (hub_is_superspeed(hdev) && | ||
2643 | + ((portstatus & USB_PORT_STAT_LINK_STATE) == | ||
2644 | + USB_SS_PORT_LS_POLLING)) | ||
2645 | + need_debounce_delay = true; | ||
2646 | + | ||
2647 | /* Clear status-change flags; we'll debounce later */ | ||
2648 | if (portchange & USB_PORT_STAT_C_CONNECTION) { | ||
2649 | need_debounce_delay = true; | ||
2650 | diff --git a/drivers/usb/gadget/udc/net2272.c b/drivers/usb/gadget/udc/net2272.c | ||
2651 | index 7c6113432093..40396a265a3f 100644 | ||
2652 | --- a/drivers/usb/gadget/udc/net2272.c | ||
2653 | +++ b/drivers/usb/gadget/udc/net2272.c | ||
2654 | @@ -2096,7 +2096,7 @@ static irqreturn_t net2272_irq(int irq, void *_dev) | ||
2655 | #if defined(PLX_PCI_RDK2) | ||
2656 | /* see if PCI int for us by checking irqstat */ | ||
2657 | intcsr = readl(dev->rdk2.fpga_base_addr + RDK2_IRQSTAT); | ||
2658 | - if (!intcsr & (1 << NET2272_PCI_IRQ)) { | ||
2659 | + if (!(intcsr & (1 << NET2272_PCI_IRQ))) { | ||
2660 | spin_unlock(&dev->lock); | ||
2661 | return IRQ_NONE; | ||
2662 | } | ||
2663 | diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c | ||
2664 | index f1219f6d58a9..60540a8ac431 100644 | ||
2665 | --- a/drivers/usb/musb/musb_gadget.c | ||
2666 | +++ b/drivers/usb/musb/musb_gadget.c | ||
2667 | @@ -477,13 +477,10 @@ void musb_g_tx(struct musb *musb, u8 epnum) | ||
2668 | } | ||
2669 | |||
2670 | if (request) { | ||
2671 | - u8 is_dma = 0; | ||
2672 | - bool short_packet = false; | ||
2673 | |||
2674 | trace_musb_req_tx(req); | ||
2675 | |||
2676 | if (dma && (csr & MUSB_TXCSR_DMAENAB)) { | ||
2677 | - is_dma = 1; | ||
2678 | csr |= MUSB_TXCSR_P_WZC_BITS; | ||
2679 | csr &= ~(MUSB_TXCSR_DMAENAB | MUSB_TXCSR_P_UNDERRUN | | ||
2680 | MUSB_TXCSR_TXPKTRDY | MUSB_TXCSR_AUTOSET); | ||
2681 | @@ -501,16 +498,8 @@ void musb_g_tx(struct musb *musb, u8 epnum) | ||
2682 | */ | ||
2683 | if ((request->zero && request->length) | ||
2684 | && (request->length % musb_ep->packet_sz == 0) | ||
2685 | - && (request->actual == request->length)) | ||
2686 | - short_packet = true; | ||
2687 | + && (request->actual == request->length)) { | ||
2688 | |||
2689 | - if ((musb_dma_inventra(musb) || musb_dma_ux500(musb)) && | ||
2690 | - (is_dma && (!dma->desired_mode || | ||
2691 | - (request->actual & | ||
2692 | - (musb_ep->packet_sz - 1))))) | ||
2693 | - short_packet = true; | ||
2694 | - | ||
2695 | - if (short_packet) { | ||
2696 | /* | ||
2697 | * On DMA completion, FIFO may not be | ||
2698 | * available yet... | ||
2699 | diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c | ||
2700 | index 3620073da58c..512108e22d2b 100644 | ||
2701 | --- a/drivers/usb/musb/musbhsdma.c | ||
2702 | +++ b/drivers/usb/musb/musbhsdma.c | ||
2703 | @@ -320,12 +320,10 @@ static irqreturn_t dma_controller_irq(int irq, void *private_data) | ||
2704 | channel->status = MUSB_DMA_STATUS_FREE; | ||
2705 | |||
2706 | /* completed */ | ||
2707 | - if ((devctl & MUSB_DEVCTL_HM) | ||
2708 | - && (musb_channel->transmit) | ||
2709 | - && ((channel->desired_mode == 0) | ||
2710 | - || (channel->actual_len & | ||
2711 | - (musb_channel->max_packet_sz - 1))) | ||
2712 | - ) { | ||
2713 | + if (musb_channel->transmit && | ||
2714 | + (!channel->desired_mode || | ||
2715 | + (channel->actual_len % | ||
2716 | + musb_channel->max_packet_sz))) { | ||
2717 | u8 epnum = musb_channel->epnum; | ||
2718 | int offset = musb->io.ep_offset(epnum, | ||
2719 | MUSB_TXCSR); | ||
2720 | @@ -337,11 +335,14 @@ static irqreturn_t dma_controller_irq(int irq, void *private_data) | ||
2721 | */ | ||
2722 | musb_ep_select(mbase, epnum); | ||
2723 | txcsr = musb_readw(mbase, offset); | ||
2724 | - txcsr &= ~(MUSB_TXCSR_DMAENAB | ||
2725 | + if (channel->desired_mode == 1) { | ||
2726 | + txcsr &= ~(MUSB_TXCSR_DMAENAB | ||
2727 | | MUSB_TXCSR_AUTOSET); | ||
2728 | - musb_writew(mbase, offset, txcsr); | ||
2729 | - /* Send out the packet */ | ||
2730 | - txcsr &= ~MUSB_TXCSR_DMAMODE; | ||
2731 | + musb_writew(mbase, offset, txcsr); | ||
2732 | + /* Send out the packet */ | ||
2733 | + txcsr &= ~MUSB_TXCSR_DMAMODE; | ||
2734 | + txcsr |= MUSB_TXCSR_DMAENAB; | ||
2735 | + } | ||
2736 | txcsr |= MUSB_TXCSR_TXPKTRDY; | ||
2737 | musb_writew(mbase, offset, txcsr); | ||
2738 | } | ||
2739 | diff --git a/drivers/usb/phy/phy-am335x.c b/drivers/usb/phy/phy-am335x.c | ||
2740 | index 7e5aece769da..cb1382a52765 100644 | ||
2741 | --- a/drivers/usb/phy/phy-am335x.c | ||
2742 | +++ b/drivers/usb/phy/phy-am335x.c | ||
2743 | @@ -60,9 +60,6 @@ static int am335x_phy_probe(struct platform_device *pdev) | ||
2744 | if (ret) | ||
2745 | return ret; | ||
2746 | |||
2747 | - ret = usb_add_phy_dev(&am_phy->usb_phy_gen.phy); | ||
2748 | - if (ret) | ||
2749 | - return ret; | ||
2750 | am_phy->usb_phy_gen.phy.init = am335x_init; | ||
2751 | am_phy->usb_phy_gen.phy.shutdown = am335x_shutdown; | ||
2752 | |||
2753 | @@ -81,7 +78,7 @@ static int am335x_phy_probe(struct platform_device *pdev) | ||
2754 | device_set_wakeup_enable(dev, false); | ||
2755 | phy_ctrl_power(am_phy->phy_ctrl, am_phy->id, am_phy->dr_mode, false); | ||
2756 | |||
2757 | - return 0; | ||
2758 | + return usb_add_phy_dev(&am_phy->usb_phy_gen.phy); | ||
2759 | } | ||
2760 | |||
2761 | static int am335x_phy_remove(struct platform_device *pdev) | ||
2762 | diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c | ||
2763 | index 4db10d7990c9..178b507a6fe0 100644 | ||
2764 | --- a/drivers/video/console/fbcon.c | ||
2765 | +++ b/drivers/video/console/fbcon.c | ||
2766 | @@ -3030,7 +3030,7 @@ static int fbcon_fb_unbind(int idx) | ||
2767 | for (i = first_fb_vc; i <= last_fb_vc; i++) { | ||
2768 | if (con2fb_map[i] != idx && | ||
2769 | con2fb_map[i] != -1) { | ||
2770 | - new_idx = i; | ||
2771 | + new_idx = con2fb_map[i]; | ||
2772 | break; | ||
2773 | } | ||
2774 | } | ||
2775 | diff --git a/drivers/video/fbdev/clps711x-fb.c b/drivers/video/fbdev/clps711x-fb.c | ||
2776 | index ff561073ee4e..42f909618f04 100644 | ||
2777 | --- a/drivers/video/fbdev/clps711x-fb.c | ||
2778 | +++ b/drivers/video/fbdev/clps711x-fb.c | ||
2779 | @@ -287,14 +287,17 @@ static int clps711x_fb_probe(struct platform_device *pdev) | ||
2780 | } | ||
2781 | |||
2782 | ret = of_get_fb_videomode(disp, &cfb->mode, OF_USE_NATIVE_MODE); | ||
2783 | - if (ret) | ||
2784 | + if (ret) { | ||
2785 | + of_node_put(disp); | ||
2786 | goto out_fb_release; | ||
2787 | + } | ||
2788 | |||
2789 | of_property_read_u32(disp, "ac-prescale", &cfb->ac_prescale); | ||
2790 | cfb->cmap_invert = of_property_read_bool(disp, "cmap-invert"); | ||
2791 | |||
2792 | ret = of_property_read_u32(disp, "bits-per-pixel", | ||
2793 | &info->var.bits_per_pixel); | ||
2794 | + of_node_put(disp); | ||
2795 | if (ret) | ||
2796 | goto out_fb_release; | ||
2797 | |||
2798 | diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c | ||
2799 | index 74273bc7ca9a..a1d93151c059 100644 | ||
2800 | --- a/drivers/video/fbdev/core/fbmem.c | ||
2801 | +++ b/drivers/video/fbdev/core/fbmem.c | ||
2802 | @@ -433,7 +433,9 @@ static void fb_do_show_logo(struct fb_info *info, struct fb_image *image, | ||
2803 | image->dx += image->width + 8; | ||
2804 | } | ||
2805 | } else if (rotate == FB_ROTATE_UD) { | ||
2806 | - for (x = 0; x < num; x++) { | ||
2807 | + u32 dx = image->dx; | ||
2808 | + | ||
2809 | + for (x = 0; x < num && image->dx <= dx; x++) { | ||
2810 | info->fbops->fb_imageblit(info, image); | ||
2811 | image->dx -= image->width + 8; | ||
2812 | } | ||
2813 | @@ -445,7 +447,9 @@ static void fb_do_show_logo(struct fb_info *info, struct fb_image *image, | ||
2814 | image->dy += image->height + 8; | ||
2815 | } | ||
2816 | } else if (rotate == FB_ROTATE_CCW) { | ||
2817 | - for (x = 0; x < num; x++) { | ||
2818 | + u32 dy = image->dy; | ||
2819 | + | ||
2820 | + for (x = 0; x < num && image->dy <= dy; x++) { | ||
2821 | info->fbops->fb_imageblit(info, image); | ||
2822 | image->dy -= image->height + 8; | ||
2823 | } | ||
2824 | diff --git a/fs/binfmt_script.c b/fs/binfmt_script.c | ||
2825 | index afdf4e3cafc2..634bdbb23851 100644 | ||
2826 | --- a/fs/binfmt_script.c | ||
2827 | +++ b/fs/binfmt_script.c | ||
2828 | @@ -43,10 +43,14 @@ static int load_script(struct linux_binprm *bprm) | ||
2829 | fput(bprm->file); | ||
2830 | bprm->file = NULL; | ||
2831 | |||
2832 | - bprm->buf[BINPRM_BUF_SIZE - 1] = '\0'; | ||
2833 | - if ((cp = strchr(bprm->buf, '\n')) == NULL) | ||
2834 | - cp = bprm->buf+BINPRM_BUF_SIZE-1; | ||
2835 | + for (cp = bprm->buf+2;; cp++) { | ||
2836 | + if (cp >= bprm->buf + BINPRM_BUF_SIZE) | ||
2837 | + return -ENOEXEC; | ||
2838 | + if (!*cp || (*cp == '\n')) | ||
2839 | + break; | ||
2840 | + } | ||
2841 | *cp = '\0'; | ||
2842 | + | ||
2843 | while (cp > bprm->buf) { | ||
2844 | cp--; | ||
2845 | if ((*cp == ' ') || (*cp == '\t')) | ||
2846 | diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c | ||
2847 | index ef24b4527459..68183872bf8b 100644 | ||
2848 | --- a/fs/cifs/readdir.c | ||
2849 | +++ b/fs/cifs/readdir.c | ||
2850 | @@ -655,7 +655,14 @@ find_cifs_entry(const unsigned int xid, struct cifs_tcon *tcon, loff_t pos, | ||
2851 | /* scan and find it */ | ||
2852 | int i; | ||
2853 | char *cur_ent; | ||
2854 | - char *end_of_smb = cfile->srch_inf.ntwrk_buf_start + | ||
2855 | + char *end_of_smb; | ||
2856 | + | ||
2857 | + if (cfile->srch_inf.ntwrk_buf_start == NULL) { | ||
2858 | + cifs_dbg(VFS, "ntwrk_buf_start is NULL during readdir\n"); | ||
2859 | + return -EIO; | ||
2860 | + } | ||
2861 | + | ||
2862 | + end_of_smb = cfile->srch_inf.ntwrk_buf_start + | ||
2863 | server->ops->calc_smb_size( | ||
2864 | cfile->srch_inf.ntwrk_buf_start); | ||
2865 | |||
2866 | diff --git a/fs/dlm/ast.c b/fs/dlm/ast.c | ||
2867 | index dcea1e37a1b7..f18619bc2e09 100644 | ||
2868 | --- a/fs/dlm/ast.c | ||
2869 | +++ b/fs/dlm/ast.c | ||
2870 | @@ -290,6 +290,8 @@ void dlm_callback_suspend(struct dlm_ls *ls) | ||
2871 | flush_workqueue(ls->ls_callback_wq); | ||
2872 | } | ||
2873 | |||
2874 | +#define MAX_CB_QUEUE 25 | ||
2875 | + | ||
2876 | void dlm_callback_resume(struct dlm_ls *ls) | ||
2877 | { | ||
2878 | struct dlm_lkb *lkb, *safe; | ||
2879 | @@ -300,15 +302,23 @@ void dlm_callback_resume(struct dlm_ls *ls) | ||
2880 | if (!ls->ls_callback_wq) | ||
2881 | return; | ||
2882 | |||
2883 | +more: | ||
2884 | mutex_lock(&ls->ls_cb_mutex); | ||
2885 | list_for_each_entry_safe(lkb, safe, &ls->ls_cb_delay, lkb_cb_list) { | ||
2886 | list_del_init(&lkb->lkb_cb_list); | ||
2887 | queue_work(ls->ls_callback_wq, &lkb->lkb_cb_work); | ||
2888 | count++; | ||
2889 | + if (count == MAX_CB_QUEUE) | ||
2890 | + break; | ||
2891 | } | ||
2892 | mutex_unlock(&ls->ls_cb_mutex); | ||
2893 | |||
2894 | if (count) | ||
2895 | log_rinfo(ls, "dlm_callback_resume %d", count); | ||
2896 | + if (count == MAX_CB_QUEUE) { | ||
2897 | + count = 0; | ||
2898 | + cond_resched(); | ||
2899 | + goto more; | ||
2900 | + } | ||
2901 | } | ||
2902 | |||
2903 | diff --git a/fs/eventpoll.c b/fs/eventpoll.c | ||
2904 | index 3cbc30413add..a9c0bf8782f5 100644 | ||
2905 | --- a/fs/eventpoll.c | ||
2906 | +++ b/fs/eventpoll.c | ||
2907 | @@ -1040,7 +1040,7 @@ static int ep_poll_callback(wait_queue_t *wait, unsigned mode, int sync, void *k | ||
2908 | * semantics). All the events that happen during that period of time are | ||
2909 | * chained in ep->ovflist and requeued later on. | ||
2910 | */ | ||
2911 | - if (unlikely(ep->ovflist != EP_UNACTIVE_PTR)) { | ||
2912 | + if (ep->ovflist != EP_UNACTIVE_PTR) { | ||
2913 | if (epi->next == EP_UNACTIVE_PTR) { | ||
2914 | epi->next = ep->ovflist; | ||
2915 | ep->ovflist = epi; | ||
2916 | diff --git a/fs/f2fs/acl.c b/fs/f2fs/acl.c | ||
2917 | index 55aa29c0c78d..a9894089d9dc 100644 | ||
2918 | --- a/fs/f2fs/acl.c | ||
2919 | +++ b/fs/f2fs/acl.c | ||
2920 | @@ -348,12 +348,14 @@ static int f2fs_acl_create(struct inode *dir, umode_t *mode, | ||
2921 | return PTR_ERR(p); | ||
2922 | |||
2923 | clone = f2fs_acl_clone(p, GFP_NOFS); | ||
2924 | - if (!clone) | ||
2925 | - goto no_mem; | ||
2926 | + if (!clone) { | ||
2927 | + ret = -ENOMEM; | ||
2928 | + goto release_acl; | ||
2929 | + } | ||
2930 | |||
2931 | ret = f2fs_acl_create_masq(clone, mode); | ||
2932 | if (ret < 0) | ||
2933 | - goto no_mem_clone; | ||
2934 | + goto release_clone; | ||
2935 | |||
2936 | if (ret == 0) | ||
2937 | posix_acl_release(clone); | ||
2938 | @@ -367,11 +369,11 @@ static int f2fs_acl_create(struct inode *dir, umode_t *mode, | ||
2939 | |||
2940 | return 0; | ||
2941 | |||
2942 | -no_mem_clone: | ||
2943 | +release_clone: | ||
2944 | posix_acl_release(clone); | ||
2945 | -no_mem: | ||
2946 | +release_acl: | ||
2947 | posix_acl_release(p); | ||
2948 | - return -ENOMEM; | ||
2949 | + return ret; | ||
2950 | } | ||
2951 | |||
2952 | int f2fs_init_acl(struct inode *inode, struct inode *dir, struct page *ipage, | ||
2953 | diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h | ||
2954 | index 9c380885b0fc..b16ab4187234 100644 | ||
2955 | --- a/fs/f2fs/f2fs.h | ||
2956 | +++ b/fs/f2fs/f2fs.h | ||
2957 | @@ -1885,10 +1885,19 @@ static inline bool is_dot_dotdot(const struct qstr *str) | ||
2958 | |||
2959 | static inline bool f2fs_may_extent_tree(struct inode *inode) | ||
2960 | { | ||
2961 | - if (!test_opt(F2FS_I_SB(inode), EXTENT_CACHE) || | ||
2962 | + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); | ||
2963 | + | ||
2964 | + if (!test_opt(sbi, EXTENT_CACHE) || | ||
2965 | is_inode_flag_set(inode, FI_NO_EXTENT)) | ||
2966 | return false; | ||
2967 | |||
2968 | + /* | ||
2969 | + * for recovered files during mount do not create extents | ||
2970 | + * if shrinker is not registered. | ||
2971 | + */ | ||
2972 | + if (list_empty(&sbi->s_list)) | ||
2973 | + return false; | ||
2974 | + | ||
2975 | return S_ISREG(inode->i_mode); | ||
2976 | } | ||
2977 | |||
2978 | diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c | ||
2979 | index b768f495603e..f46ac1651bd5 100644 | ||
2980 | --- a/fs/f2fs/file.c | ||
2981 | +++ b/fs/f2fs/file.c | ||
2982 | @@ -198,6 +198,9 @@ static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end, | ||
2983 | |||
2984 | trace_f2fs_sync_file_enter(inode); | ||
2985 | |||
2986 | + if (S_ISDIR(inode->i_mode)) | ||
2987 | + goto go_write; | ||
2988 | + | ||
2989 | /* if fdatasync is triggered, let's do in-place-update */ | ||
2990 | if (datasync || get_dirty_pages(inode) <= SM_I(sbi)->min_fsync_blocks) | ||
2991 | set_inode_flag(inode, FI_NEED_IPU); | ||
2992 | diff --git a/fs/f2fs/shrinker.c b/fs/f2fs/shrinker.c | ||
2993 | index 46c915425923..a40bfa7fafec 100644 | ||
2994 | --- a/fs/f2fs/shrinker.c | ||
2995 | +++ b/fs/f2fs/shrinker.c | ||
2996 | @@ -136,6 +136,6 @@ void f2fs_leave_shrinker(struct f2fs_sb_info *sbi) | ||
2997 | f2fs_shrink_extent_tree(sbi, __count_extent_cache(sbi)); | ||
2998 | |||
2999 | spin_lock(&f2fs_list_lock); | ||
3000 | - list_del(&sbi->s_list); | ||
3001 | + list_del_init(&sbi->s_list); | ||
3002 | spin_unlock(&f2fs_list_lock); | ||
3003 | } | ||
3004 | diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c | ||
3005 | index b4253181b5d4..411f16101d1a 100644 | ||
3006 | --- a/fs/fuse/dev.c | ||
3007 | +++ b/fs/fuse/dev.c | ||
3008 | @@ -1685,7 +1685,6 @@ static int fuse_retrieve(struct fuse_conn *fc, struct inode *inode, | ||
3009 | req->in.h.nodeid = outarg->nodeid; | ||
3010 | req->in.numargs = 2; | ||
3011 | req->in.argpages = 1; | ||
3012 | - req->page_descs[0].offset = offset; | ||
3013 | req->end = fuse_retrieve_end; | ||
3014 | |||
3015 | index = outarg->offset >> PAGE_SHIFT; | ||
3016 | @@ -1700,6 +1699,7 @@ static int fuse_retrieve(struct fuse_conn *fc, struct inode *inode, | ||
3017 | |||
3018 | this_num = min_t(unsigned, num, PAGE_SIZE - offset); | ||
3019 | req->pages[req->num_pages] = page; | ||
3020 | + req->page_descs[req->num_pages].offset = offset; | ||
3021 | req->page_descs[req->num_pages].length = this_num; | ||
3022 | req->num_pages++; | ||
3023 | |||
3024 | @@ -2018,8 +2018,10 @@ static ssize_t fuse_dev_splice_write(struct pipe_inode_info *pipe, | ||
3025 | |||
3026 | ret = fuse_dev_do_write(fud, &cs, len); | ||
3027 | |||
3028 | + pipe_lock(pipe); | ||
3029 | for (idx = 0; idx < nbuf; idx++) | ||
3030 | pipe_buf_release(pipe, &bufs[idx]); | ||
3031 | + pipe_unlock(pipe); | ||
3032 | |||
3033 | out: | ||
3034 | kfree(bufs); | ||
3035 | diff --git a/fs/fuse/file.c b/fs/fuse/file.c | ||
3036 | index 1cd46e667e3d..30a607473621 100644 | ||
3037 | --- a/fs/fuse/file.c | ||
3038 | +++ b/fs/fuse/file.c | ||
3039 | @@ -1772,7 +1772,7 @@ static bool fuse_writepage_in_flight(struct fuse_req *new_req, | ||
3040 | spin_unlock(&fc->lock); | ||
3041 | |||
3042 | dec_wb_stat(&bdi->wb, WB_WRITEBACK); | ||
3043 | - dec_node_page_state(page, NR_WRITEBACK_TEMP); | ||
3044 | + dec_node_page_state(new_req->pages[0], NR_WRITEBACK_TEMP); | ||
3045 | wb_writeout_inc(&bdi->wb); | ||
3046 | fuse_writepage_free(fc, new_req); | ||
3047 | fuse_request_free(new_req); | ||
3048 | diff --git a/fs/nfs/super.c b/fs/nfs/super.c | ||
3049 | index 2fdb8f5a7b69..35aef192a13f 100644 | ||
3050 | --- a/fs/nfs/super.c | ||
3051 | +++ b/fs/nfs/super.c | ||
3052 | @@ -2403,8 +2403,7 @@ static int nfs_compare_mount_options(const struct super_block *s, const struct n | ||
3053 | goto Ebusy; | ||
3054 | if (a->acdirmax != b->acdirmax) | ||
3055 | goto Ebusy; | ||
3056 | - if (b->auth_info.flavor_len > 0 && | ||
3057 | - clnt_a->cl_auth->au_flavor != clnt_b->cl_auth->au_flavor) | ||
3058 | + if (clnt_a->cl_auth->au_flavor != clnt_b->cl_auth->au_flavor) | ||
3059 | goto Ebusy; | ||
3060 | return 1; | ||
3061 | Ebusy: | ||
3062 | diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c | ||
3063 | index 36b2af931e06..797a155c9a67 100644 | ||
3064 | --- a/fs/nfsd/nfsctl.c | ||
3065 | +++ b/fs/nfsd/nfsctl.c | ||
3066 | @@ -1103,6 +1103,8 @@ static ssize_t write_v4_end_grace(struct file *file, char *buf, size_t size) | ||
3067 | case 'Y': | ||
3068 | case 'y': | ||
3069 | case '1': | ||
3070 | + if (nn->nfsd_serv) | ||
3071 | + return -EBUSY; | ||
3072 | nfsd4_end_grace(nn); | ||
3073 | break; | ||
3074 | default: | ||
3075 | diff --git a/fs/ocfs2/buffer_head_io.c b/fs/ocfs2/buffer_head_io.c | ||
3076 | index 25c8b328c43d..935bac253991 100644 | ||
3077 | --- a/fs/ocfs2/buffer_head_io.c | ||
3078 | +++ b/fs/ocfs2/buffer_head_io.c | ||
3079 | @@ -151,7 +151,6 @@ int ocfs2_read_blocks_sync(struct ocfs2_super *osb, u64 block, | ||
3080 | #endif | ||
3081 | } | ||
3082 | |||
3083 | - clear_buffer_uptodate(bh); | ||
3084 | get_bh(bh); /* for end_buffer_read_sync() */ | ||
3085 | bh->b_end_io = end_buffer_read_sync; | ||
3086 | submit_bh(REQ_OP_READ, 0, bh); | ||
3087 | @@ -305,7 +304,6 @@ int ocfs2_read_blocks(struct ocfs2_caching_info *ci, u64 block, int nr, | ||
3088 | continue; | ||
3089 | } | ||
3090 | |||
3091 | - clear_buffer_uptodate(bh); | ||
3092 | get_bh(bh); /* for end_buffer_read_sync() */ | ||
3093 | if (validate) | ||
3094 | set_buffer_needs_validate(bh); | ||
3095 | diff --git a/fs/udf/inode.c b/fs/udf/inode.c | ||
3096 | index 035943501b9f..fd817022cb9b 100644 | ||
3097 | --- a/fs/udf/inode.c | ||
3098 | +++ b/fs/udf/inode.c | ||
3099 | @@ -1372,6 +1372,12 @@ reread: | ||
3100 | |||
3101 | iinfo->i_alloc_type = le16_to_cpu(fe->icbTag.flags) & | ||
3102 | ICBTAG_FLAG_AD_MASK; | ||
3103 | + if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_SHORT && | ||
3104 | + iinfo->i_alloc_type != ICBTAG_FLAG_AD_LONG && | ||
3105 | + iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) { | ||
3106 | + ret = -EIO; | ||
3107 | + goto out; | ||
3108 | + } | ||
3109 | iinfo->i_unique = 0; | ||
3110 | iinfo->i_lenEAttr = 0; | ||
3111 | iinfo->i_lenExtents = 0; | ||
3112 | diff --git a/include/linux/genl_magic_struct.h b/include/linux/genl_magic_struct.h | ||
3113 | index 6270a56e5edc..d0d6fdc22698 100644 | ||
3114 | --- a/include/linux/genl_magic_struct.h | ||
3115 | +++ b/include/linux/genl_magic_struct.h | ||
3116 | @@ -190,6 +190,7 @@ static inline void ct_assert_unique_operations(void) | ||
3117 | { | ||
3118 | switch (0) { | ||
3119 | #include GENL_MAGIC_INCLUDE_FILE | ||
3120 | + case 0: | ||
3121 | ; | ||
3122 | } | ||
3123 | } | ||
3124 | @@ -208,6 +209,7 @@ static inline void ct_assert_unique_top_level_attributes(void) | ||
3125 | { | ||
3126 | switch (0) { | ||
3127 | #include GENL_MAGIC_INCLUDE_FILE | ||
3128 | + case 0: | ||
3129 | ; | ||
3130 | } | ||
3131 | } | ||
3132 | @@ -217,7 +219,8 @@ static inline void ct_assert_unique_top_level_attributes(void) | ||
3133 | static inline void ct_assert_unique_ ## s_name ## _attributes(void) \ | ||
3134 | { \ | ||
3135 | switch (0) { \ | ||
3136 | - s_fields \ | ||
3137 | + s_fields \ | ||
3138 | + case 0: \ | ||
3139 | ; \ | ||
3140 | } \ | ||
3141 | } | ||
3142 | diff --git a/include/linux/sched.h b/include/linux/sched.h | ||
3143 | index f4a551a5482c..ebd0afb35d16 100644 | ||
3144 | --- a/include/linux/sched.h | ||
3145 | +++ b/include/linux/sched.h | ||
3146 | @@ -527,6 +527,7 @@ static inline int get_dumpable(struct mm_struct *mm) | ||
3147 | #define MMF_OOM_SKIP 21 /* mm is of no interest for the OOM killer */ | ||
3148 | #define MMF_UNSTABLE 22 /* mm is unstable for copy_from_user */ | ||
3149 | #define MMF_HUGE_ZERO_PAGE 23 /* mm has ever used the global huge zero page */ | ||
3150 | +#define MMF_OOM_REAP_QUEUED 26 /* mm was queued for oom_reaper */ | ||
3151 | |||
3152 | #define MMF_INIT_MASK (MMF_DUMPABLE_MASK | MMF_DUMP_FILTER_MASK) | ||
3153 | |||
3154 | diff --git a/include/sound/compress_driver.h b/include/sound/compress_driver.h | ||
3155 | index cee8c00f3d3e..96bc5acdade3 100644 | ||
3156 | --- a/include/sound/compress_driver.h | ||
3157 | +++ b/include/sound/compress_driver.h | ||
3158 | @@ -185,7 +185,11 @@ static inline void snd_compr_drain_notify(struct snd_compr_stream *stream) | ||
3159 | if (snd_BUG_ON(!stream)) | ||
3160 | return; | ||
3161 | |||
3162 | - stream->runtime->state = SNDRV_PCM_STATE_SETUP; | ||
3163 | + if (stream->direction == SND_COMPRESS_PLAYBACK) | ||
3164 | + stream->runtime->state = SNDRV_PCM_STATE_SETUP; | ||
3165 | + else | ||
3166 | + stream->runtime->state = SNDRV_PCM_STATE_PREPARED; | ||
3167 | + | ||
3168 | wake_up(&stream->runtime->sleep); | ||
3169 | } | ||
3170 | |||
3171 | diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c | ||
3172 | index 017f7933a37d..f4b5811ebe23 100644 | ||
3173 | --- a/kernel/events/ring_buffer.c | ||
3174 | +++ b/kernel/events/ring_buffer.c | ||
3175 | @@ -700,6 +700,9 @@ struct ring_buffer *rb_alloc(int nr_pages, long watermark, int cpu, int flags) | ||
3176 | size = sizeof(struct ring_buffer); | ||
3177 | size += nr_pages * sizeof(void *); | ||
3178 | |||
3179 | + if (order_base_2(size) >= MAX_ORDER) | ||
3180 | + goto fail; | ||
3181 | + | ||
3182 | rb = kzalloc(size, GFP_KERNEL); | ||
3183 | if (!rb) | ||
3184 | goto fail; | ||
3185 | diff --git a/kernel/hung_task.c b/kernel/hung_task.c | ||
3186 | index 2b59c82cc3e1..fd781a468f32 100644 | ||
3187 | --- a/kernel/hung_task.c | ||
3188 | +++ b/kernel/hung_task.c | ||
3189 | @@ -30,7 +30,7 @@ int __read_mostly sysctl_hung_task_check_count = PID_MAX_LIMIT; | ||
3190 | * is disabled during the critical section. It also controls the size of | ||
3191 | * the RCU grace period. So it needs to be upper-bound. | ||
3192 | */ | ||
3193 | -#define HUNG_TASK_BATCHING 1024 | ||
3194 | +#define HUNG_TASK_LOCK_BREAK (HZ / 10) | ||
3195 | |||
3196 | /* | ||
3197 | * Zero means infinite timeout - no checking done: | ||
3198 | @@ -158,7 +158,7 @@ static bool rcu_lock_break(struct task_struct *g, struct task_struct *t) | ||
3199 | static void check_hung_uninterruptible_tasks(unsigned long timeout) | ||
3200 | { | ||
3201 | int max_count = sysctl_hung_task_check_count; | ||
3202 | - int batch_count = HUNG_TASK_BATCHING; | ||
3203 | + unsigned long last_break = jiffies; | ||
3204 | struct task_struct *g, *t; | ||
3205 | |||
3206 | /* | ||
3207 | @@ -172,10 +172,10 @@ static void check_hung_uninterruptible_tasks(unsigned long timeout) | ||
3208 | for_each_process_thread(g, t) { | ||
3209 | if (!max_count--) | ||
3210 | goto unlock; | ||
3211 | - if (!--batch_count) { | ||
3212 | - batch_count = HUNG_TASK_BATCHING; | ||
3213 | + if (time_after(jiffies, last_break + HUNG_TASK_LOCK_BREAK)) { | ||
3214 | if (!rcu_lock_break(g, t)) | ||
3215 | goto unlock; | ||
3216 | + last_break = jiffies; | ||
3217 | } | ||
3218 | /* use "==" to skip the TASK_KILLABLE tasks waiting on NFS */ | ||
3219 | if (t->state == TASK_UNINTERRUPTIBLE) | ||
3220 | diff --git a/kernel/sysctl.c b/kernel/sysctl.c | ||
3221 | index 23f658d311c0..93c7b02279b9 100644 | ||
3222 | --- a/kernel/sysctl.c | ||
3223 | +++ b/kernel/sysctl.c | ||
3224 | @@ -2503,6 +2503,8 @@ static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int | ||
3225 | bool neg; | ||
3226 | |||
3227 | left -= proc_skip_spaces(&p); | ||
3228 | + if (!left) | ||
3229 | + break; | ||
3230 | |||
3231 | err = proc_get_long(&p, &left, &val, &neg, | ||
3232 | proc_wspace_sep, | ||
3233 | diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c | ||
3234 | index d831827d7ab0..e24e1f0c5690 100644 | ||
3235 | --- a/kernel/time/timekeeping.c | ||
3236 | +++ b/kernel/time/timekeeping.c | ||
3237 | @@ -39,7 +39,9 @@ | ||
3238 | static struct { | ||
3239 | seqcount_t seq; | ||
3240 | struct timekeeper timekeeper; | ||
3241 | -} tk_core ____cacheline_aligned; | ||
3242 | +} tk_core ____cacheline_aligned = { | ||
3243 | + .seq = SEQCNT_ZERO(tk_core.seq), | ||
3244 | +}; | ||
3245 | |||
3246 | static DEFINE_RAW_SPINLOCK(timekeeper_lock); | ||
3247 | static struct timekeeper shadow_timekeeper; | ||
3248 | diff --git a/lib/seq_buf.c b/lib/seq_buf.c | ||
3249 | index cb18469e1f49..5954f9fb6675 100644 | ||
3250 | --- a/lib/seq_buf.c | ||
3251 | +++ b/lib/seq_buf.c | ||
3252 | @@ -143,9 +143,13 @@ int seq_buf_puts(struct seq_buf *s, const char *str) | ||
3253 | |||
3254 | WARN_ON(s->size == 0); | ||
3255 | |||
3256 | + /* Add 1 to len for the trailing null byte which must be there */ | ||
3257 | + len += 1; | ||
3258 | + | ||
3259 | if (seq_buf_can_fit(s, len)) { | ||
3260 | memcpy(s->buffer + s->len, str, len); | ||
3261 | - s->len += len; | ||
3262 | + /* Don't count the trailing null byte against the capacity */ | ||
3263 | + s->len += len - 1; | ||
3264 | return 0; | ||
3265 | } | ||
3266 | seq_buf_set_overflow(s); | ||
3267 | diff --git a/mm/oom_kill.c b/mm/oom_kill.c | ||
3268 | index 1de3695cb419..d514eebad905 100644 | ||
3269 | --- a/mm/oom_kill.c | ||
3270 | +++ b/mm/oom_kill.c | ||
3271 | @@ -626,8 +626,8 @@ static void wake_oom_reaper(struct task_struct *tsk) | ||
3272 | if (!oom_reaper_th) | ||
3273 | return; | ||
3274 | |||
3275 | - /* tsk is already queued? */ | ||
3276 | - if (tsk == oom_reaper_list || tsk->oom_reaper_list) | ||
3277 | + /* mm is already queued? */ | ||
3278 | + if (test_and_set_bit(MMF_OOM_REAP_QUEUED, &tsk->signal->oom_mm->flags)) | ||
3279 | return; | ||
3280 | |||
3281 | get_task_struct(tsk); | ||
3282 | diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c | ||
3283 | index d2f9eb169ba8..6f78489fdb13 100644 | ||
3284 | --- a/net/bluetooth/hci_event.c | ||
3285 | +++ b/net/bluetooth/hci_event.c | ||
3286 | @@ -5212,6 +5212,12 @@ static bool hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode, | ||
3287 | return true; | ||
3288 | } | ||
3289 | |||
3290 | + /* Check if request ended in Command Status - no way to retreive | ||
3291 | + * any extra parameters in this case. | ||
3292 | + */ | ||
3293 | + if (hdr->evt == HCI_EV_CMD_STATUS) | ||
3294 | + return false; | ||
3295 | + | ||
3296 | if (hdr->evt != HCI_EV_CMD_COMPLETE) { | ||
3297 | BT_DBG("Last event is not cmd complete (0x%2.2x)", hdr->evt); | ||
3298 | return false; | ||
3299 | diff --git a/net/dccp/ccid.h b/net/dccp/ccid.h | ||
3300 | index 6eb837a47b5c..baaaeb2b2c42 100644 | ||
3301 | --- a/net/dccp/ccid.h | ||
3302 | +++ b/net/dccp/ccid.h | ||
3303 | @@ -202,7 +202,7 @@ static inline void ccid_hc_tx_packet_recv(struct ccid *ccid, struct sock *sk, | ||
3304 | static inline int ccid_hc_tx_parse_options(struct ccid *ccid, struct sock *sk, | ||
3305 | u8 pkt, u8 opt, u8 *val, u8 len) | ||
3306 | { | ||
3307 | - if (ccid->ccid_ops->ccid_hc_tx_parse_options == NULL) | ||
3308 | + if (!ccid || !ccid->ccid_ops->ccid_hc_tx_parse_options) | ||
3309 | return 0; | ||
3310 | return ccid->ccid_ops->ccid_hc_tx_parse_options(sk, pkt, opt, val, len); | ||
3311 | } | ||
3312 | @@ -214,7 +214,7 @@ static inline int ccid_hc_tx_parse_options(struct ccid *ccid, struct sock *sk, | ||
3313 | static inline int ccid_hc_rx_parse_options(struct ccid *ccid, struct sock *sk, | ||
3314 | u8 pkt, u8 opt, u8 *val, u8 len) | ||
3315 | { | ||
3316 | - if (ccid->ccid_ops->ccid_hc_rx_parse_options == NULL) | ||
3317 | + if (!ccid || !ccid->ccid_ops->ccid_hc_rx_parse_options) | ||
3318 | return 0; | ||
3319 | return ccid->ccid_ops->ccid_hc_rx_parse_options(sk, pkt, opt, val, len); | ||
3320 | } | ||
3321 | diff --git a/net/dsa/slave.c b/net/dsa/slave.c | ||
3322 | index 339d9c678d3e..d7883e55fe15 100644 | ||
3323 | --- a/net/dsa/slave.c | ||
3324 | +++ b/net/dsa/slave.c | ||
3325 | @@ -180,10 +180,14 @@ static void dsa_slave_change_rx_flags(struct net_device *dev, int change) | ||
3326 | struct dsa_slave_priv *p = netdev_priv(dev); | ||
3327 | struct net_device *master = p->parent->dst->master_netdev; | ||
3328 | |||
3329 | - if (change & IFF_ALLMULTI) | ||
3330 | - dev_set_allmulti(master, dev->flags & IFF_ALLMULTI ? 1 : -1); | ||
3331 | - if (change & IFF_PROMISC) | ||
3332 | - dev_set_promiscuity(master, dev->flags & IFF_PROMISC ? 1 : -1); | ||
3333 | + if (dev->flags & IFF_UP) { | ||
3334 | + if (change & IFF_ALLMULTI) | ||
3335 | + dev_set_allmulti(master, | ||
3336 | + dev->flags & IFF_ALLMULTI ? 1 : -1); | ||
3337 | + if (change & IFF_PROMISC) | ||
3338 | + dev_set_promiscuity(master, | ||
3339 | + dev->flags & IFF_PROMISC ? 1 : -1); | ||
3340 | + } | ||
3341 | } | ||
3342 | |||
3343 | static void dsa_slave_set_rx_mode(struct net_device *dev) | ||
3344 | diff --git a/net/ipv6/xfrm6_tunnel.c b/net/ipv6/xfrm6_tunnel.c | ||
3345 | index e1c0bbe7996c..3a2701d42f47 100644 | ||
3346 | --- a/net/ipv6/xfrm6_tunnel.c | ||
3347 | +++ b/net/ipv6/xfrm6_tunnel.c | ||
3348 | @@ -144,6 +144,9 @@ static u32 __xfrm6_tunnel_alloc_spi(struct net *net, xfrm_address_t *saddr) | ||
3349 | index = __xfrm6_tunnel_spi_check(net, spi); | ||
3350 | if (index >= 0) | ||
3351 | goto alloc_spi; | ||
3352 | + | ||
3353 | + if (spi == XFRM6_TUNNEL_SPI_MAX) | ||
3354 | + break; | ||
3355 | } | ||
3356 | for (spi = XFRM6_TUNNEL_SPI_MIN; spi < xfrm6_tn->spi; spi++) { | ||
3357 | index = __xfrm6_tunnel_spi_check(net, spi); | ||
3358 | diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c | ||
3359 | index 93c332737e86..af02d2136a06 100644 | ||
3360 | --- a/net/mac80211/rx.c | ||
3361 | +++ b/net/mac80211/rx.c | ||
3362 | @@ -152,6 +152,9 @@ ieee80211_rx_radiotap_hdrlen(struct ieee80211_local *local, | ||
3363 | /* allocate extra bitmaps */ | ||
3364 | if (status->chains) | ||
3365 | len += 4 * hweight8(status->chains); | ||
3366 | + /* vendor presence bitmap */ | ||
3367 | + if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA) | ||
3368 | + len += 4; | ||
3369 | |||
3370 | if (ieee80211_have_rx_timestamp(status)) { | ||
3371 | len = ALIGN(len, 8); | ||
3372 | @@ -193,8 +196,6 @@ ieee80211_rx_radiotap_hdrlen(struct ieee80211_local *local, | ||
3373 | if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA) { | ||
3374 | struct ieee80211_vendor_radiotap *rtap = (void *)skb->data; | ||
3375 | |||
3376 | - /* vendor presence bitmap */ | ||
3377 | - len += 4; | ||
3378 | /* alignment for fixed 6-byte vendor data header */ | ||
3379 | len = ALIGN(len, 2); | ||
3380 | /* vendor data header */ | ||
3381 | diff --git a/net/rds/bind.c b/net/rds/bind.c | ||
3382 | index cc7e3a138598..438452fb5fbc 100644 | ||
3383 | --- a/net/rds/bind.c | ||
3384 | +++ b/net/rds/bind.c | ||
3385 | @@ -62,10 +62,10 @@ struct rds_sock *rds_find_bound(__be32 addr, __be16 port) | ||
3386 | |||
3387 | rcu_read_lock(); | ||
3388 | rs = rhashtable_lookup(&bind_hash_table, &key, ht_parms); | ||
3389 | - if (rs && !sock_flag(rds_rs_to_sk(rs), SOCK_DEAD)) | ||
3390 | - rds_sock_addref(rs); | ||
3391 | - else | ||
3392 | + if (rs && (sock_flag(rds_rs_to_sk(rs), SOCK_DEAD) || | ||
3393 | + !atomic_inc_not_zero(&rds_rs_to_sk(rs)->sk_refcnt))) | ||
3394 | rs = NULL; | ||
3395 | + | ||
3396 | rcu_read_unlock(); | ||
3397 | |||
3398 | rdsdebug("returning rs %p for %pI4:%u\n", rs, &addr, | ||
3399 | diff --git a/net/rxrpc/recvmsg.c b/net/rxrpc/recvmsg.c | ||
3400 | index 3e52b7fdc35d..72de69175476 100644 | ||
3401 | --- a/net/rxrpc/recvmsg.c | ||
3402 | +++ b/net/rxrpc/recvmsg.c | ||
3403 | @@ -552,6 +552,7 @@ error: | ||
3404 | rxrpc_put_call(call, rxrpc_call_put); | ||
3405 | error_no_call: | ||
3406 | release_sock(&rx->sk); | ||
3407 | +error_trace: | ||
3408 | trace_rxrpc_recvmsg(call, rxrpc_recvmsg_return, 0, 0, 0, ret); | ||
3409 | return ret; | ||
3410 | |||
3411 | @@ -560,7 +561,7 @@ wait_interrupted: | ||
3412 | wait_error: | ||
3413 | finish_wait(sk_sleep(&rx->sk), &wait); | ||
3414 | call = NULL; | ||
3415 | - goto error_no_call; | ||
3416 | + goto error_trace; | ||
3417 | } | ||
3418 | |||
3419 | /** | ||
3420 | diff --git a/scripts/decode_stacktrace.sh b/scripts/decode_stacktrace.sh | ||
3421 | index c332684e1b5a..edde8250195c 100755 | ||
3422 | --- a/scripts/decode_stacktrace.sh | ||
3423 | +++ b/scripts/decode_stacktrace.sh | ||
3424 | @@ -77,7 +77,7 @@ parse_symbol() { | ||
3425 | fi | ||
3426 | |||
3427 | # Strip out the base of the path | ||
3428 | - code=${code//$basepath/""} | ||
3429 | + code=${code//^$basepath/""} | ||
3430 | |||
3431 | # In the case of inlines, move everything to same line | ||
3432 | code=${code//$'\n'/' '} | ||
3433 | diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c | ||
3434 | index 88b3dc19bbae..fdf5bbfd00cd 100644 | ||
3435 | --- a/scripts/mod/modpost.c | ||
3436 | +++ b/scripts/mod/modpost.c | ||
3437 | @@ -1198,6 +1198,30 @@ static int secref_whitelist(const struct sectioncheck *mismatch, | ||
3438 | return 1; | ||
3439 | } | ||
3440 | |||
3441 | +static inline int is_arm_mapping_symbol(const char *str) | ||
3442 | +{ | ||
3443 | + return str[0] == '$' && strchr("axtd", str[1]) | ||
3444 | + && (str[2] == '\0' || str[2] == '.'); | ||
3445 | +} | ||
3446 | + | ||
3447 | +/* | ||
3448 | + * If there's no name there, ignore it; likewise, ignore it if it's | ||
3449 | + * one of the magic symbols emitted used by current ARM tools. | ||
3450 | + * | ||
3451 | + * Otherwise if find_symbols_between() returns those symbols, they'll | ||
3452 | + * fail the whitelist tests and cause lots of false alarms ... fixable | ||
3453 | + * only by merging __exit and __init sections into __text, bloating | ||
3454 | + * the kernel (which is especially evil on embedded platforms). | ||
3455 | + */ | ||
3456 | +static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym) | ||
3457 | +{ | ||
3458 | + const char *name = elf->strtab + sym->st_name; | ||
3459 | + | ||
3460 | + if (!name || !strlen(name)) | ||
3461 | + return 0; | ||
3462 | + return !is_arm_mapping_symbol(name); | ||
3463 | +} | ||
3464 | + | ||
3465 | /** | ||
3466 | * Find symbol based on relocation record info. | ||
3467 | * In some cases the symbol supplied is a valid symbol so | ||
3468 | @@ -1223,6 +1247,8 @@ static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr, | ||
3469 | continue; | ||
3470 | if (ELF_ST_TYPE(sym->st_info) == STT_SECTION) | ||
3471 | continue; | ||
3472 | + if (!is_valid_name(elf, sym)) | ||
3473 | + continue; | ||
3474 | if (sym->st_value == addr) | ||
3475 | return sym; | ||
3476 | /* Find a symbol nearby - addr are maybe negative */ | ||
3477 | @@ -1241,30 +1267,6 @@ static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr, | ||
3478 | return NULL; | ||
3479 | } | ||
3480 | |||
3481 | -static inline int is_arm_mapping_symbol(const char *str) | ||
3482 | -{ | ||
3483 | - return str[0] == '$' && strchr("axtd", str[1]) | ||
3484 | - && (str[2] == '\0' || str[2] == '.'); | ||
3485 | -} | ||
3486 | - | ||
3487 | -/* | ||
3488 | - * If there's no name there, ignore it; likewise, ignore it if it's | ||
3489 | - * one of the magic symbols emitted used by current ARM tools. | ||
3490 | - * | ||
3491 | - * Otherwise if find_symbols_between() returns those symbols, they'll | ||
3492 | - * fail the whitelist tests and cause lots of false alarms ... fixable | ||
3493 | - * only by merging __exit and __init sections into __text, bloating | ||
3494 | - * the kernel (which is especially evil on embedded platforms). | ||
3495 | - */ | ||
3496 | -static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym) | ||
3497 | -{ | ||
3498 | - const char *name = elf->strtab + sym->st_name; | ||
3499 | - | ||
3500 | - if (!name || !strlen(name)) | ||
3501 | - return 0; | ||
3502 | - return !is_arm_mapping_symbol(name); | ||
3503 | -} | ||
3504 | - | ||
3505 | /* | ||
3506 | * Find symbols before or equal addr and after addr - in the section sec. | ||
3507 | * If we find two symbols with equal offset prefer one with a valid name. | ||
3508 | diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c | ||
3509 | index fb7c534fb57d..aeb3ba70f907 100644 | ||
3510 | --- a/security/smack/smack_lsm.c | ||
3511 | +++ b/security/smack/smack_lsm.c | ||
3512 | @@ -4362,6 +4362,12 @@ static int smack_key_permission(key_ref_t key_ref, | ||
3513 | int request = 0; | ||
3514 | int rc; | ||
3515 | |||
3516 | + /* | ||
3517 | + * Validate requested permissions | ||
3518 | + */ | ||
3519 | + if (perm & ~KEY_NEED_ALL) | ||
3520 | + return -EINVAL; | ||
3521 | + | ||
3522 | keyp = key_ref_to_ptr(key_ref); | ||
3523 | if (keyp == NULL) | ||
3524 | return -EINVAL; | ||
3525 | @@ -4381,10 +4387,10 @@ static int smack_key_permission(key_ref_t key_ref, | ||
3526 | ad.a.u.key_struct.key = keyp->serial; | ||
3527 | ad.a.u.key_struct.key_desc = keyp->description; | ||
3528 | #endif | ||
3529 | - if (perm & KEY_NEED_READ) | ||
3530 | - request = MAY_READ; | ||
3531 | + if (perm & (KEY_NEED_READ | KEY_NEED_SEARCH | KEY_NEED_VIEW)) | ||
3532 | + request |= MAY_READ; | ||
3533 | if (perm & (KEY_NEED_WRITE | KEY_NEED_LINK | KEY_NEED_SETATTR)) | ||
3534 | - request = MAY_WRITE; | ||
3535 | + request |= MAY_WRITE; | ||
3536 | rc = smk_access(tkp, keyp->security, request, &ad); | ||
3537 | rc = smk_bu_note("key access", tkp, keyp->security, request, rc); | ||
3538 | return rc; | ||
3539 | diff --git a/sound/pci/hda/hda_bind.c b/sound/pci/hda/hda_bind.c | ||
3540 | index 6efadbfb3fe3..7ea201c05e5d 100644 | ||
3541 | --- a/sound/pci/hda/hda_bind.c | ||
3542 | +++ b/sound/pci/hda/hda_bind.c | ||
3543 | @@ -109,7 +109,8 @@ static int hda_codec_driver_probe(struct device *dev) | ||
3544 | err = snd_hda_codec_build_controls(codec); | ||
3545 | if (err < 0) | ||
3546 | goto error_module; | ||
3547 | - if (codec->card->registered) { | ||
3548 | + /* only register after the bus probe finished; otherwise it's racy */ | ||
3549 | + if (!codec->bus->bus_probing && codec->card->registered) { | ||
3550 | err = snd_card_register(codec->card); | ||
3551 | if (err < 0) | ||
3552 | goto error_module; | ||
3553 | diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h | ||
3554 | index 776dffa88aee..171e11be938d 100644 | ||
3555 | --- a/sound/pci/hda/hda_codec.h | ||
3556 | +++ b/sound/pci/hda/hda_codec.h | ||
3557 | @@ -68,6 +68,7 @@ struct hda_bus { | ||
3558 | unsigned int response_reset:1; /* controller was reset */ | ||
3559 | unsigned int in_reset:1; /* during reset operation */ | ||
3560 | unsigned int no_response_fallback:1; /* don't fallback at RIRB error */ | ||
3561 | + unsigned int bus_probing :1; /* during probing process */ | ||
3562 | |||
3563 | int primary_dig_out_type; /* primary digital out PCM type */ | ||
3564 | unsigned int mixer_assigned; /* codec addr for mixer name */ | ||
3565 | diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c | ||
3566 | index fcd583efe011..789eca17fc60 100644 | ||
3567 | --- a/sound/pci/hda/hda_intel.c | ||
3568 | +++ b/sound/pci/hda/hda_intel.c | ||
3569 | @@ -2089,6 +2089,7 @@ static int azx_probe_continue(struct azx *chip) | ||
3570 | int val; | ||
3571 | int err; | ||
3572 | |||
3573 | + to_hda_bus(bus)->bus_probing = 1; | ||
3574 | hda->probe_continued = 1; | ||
3575 | |||
3576 | /* Request display power well for the HDA controller or codec. For | ||
3577 | @@ -2189,6 +2190,7 @@ i915_power_fail: | ||
3578 | if (err < 0) | ||
3579 | hda->init_failed = 1; | ||
3580 | complete_all(&hda->probe_wait); | ||
3581 | + to_hda_bus(bus)->bus_probing = 0; | ||
3582 | return err; | ||
3583 | } | ||
3584 | |||
3585 | diff --git a/sound/soc/fsl/Kconfig b/sound/soc/fsl/Kconfig | ||
3586 | index 19bdcac71775..a732b3a065c9 100644 | ||
3587 | --- a/sound/soc/fsl/Kconfig | ||
3588 | +++ b/sound/soc/fsl/Kconfig | ||
3589 | @@ -220,7 +220,7 @@ config SND_SOC_PHYCORE_AC97 | ||
3590 | |||
3591 | config SND_SOC_EUKREA_TLV320 | ||
3592 | tristate "Eukrea TLV320" | ||
3593 | - depends on ARCH_MXC && I2C | ||
3594 | + depends on ARCH_MXC && !ARM64 && I2C | ||
3595 | select SND_SOC_TLV320AIC23_I2C | ||
3596 | select SND_SOC_IMX_AUDMUX | ||
3597 | select SND_SOC_IMX_SSI | ||
3598 | diff --git a/sound/soc/intel/atom/sst/sst_loader.c b/sound/soc/intel/atom/sst/sst_loader.c | ||
3599 | index 33917146d9c4..054b1d514e8a 100644 | ||
3600 | --- a/sound/soc/intel/atom/sst/sst_loader.c | ||
3601 | +++ b/sound/soc/intel/atom/sst/sst_loader.c | ||
3602 | @@ -354,14 +354,14 @@ static int sst_request_fw(struct intel_sst_drv *sst) | ||
3603 | const struct firmware *fw; | ||
3604 | |||
3605 | retval = request_firmware(&fw, sst->firmware_name, sst->dev); | ||
3606 | - if (fw == NULL) { | ||
3607 | - dev_err(sst->dev, "fw is returning as null\n"); | ||
3608 | - return -EINVAL; | ||
3609 | - } | ||
3610 | if (retval) { | ||
3611 | dev_err(sst->dev, "request fw failed %d\n", retval); | ||
3612 | return retval; | ||
3613 | } | ||
3614 | + if (fw == NULL) { | ||
3615 | + dev_err(sst->dev, "fw is returning as null\n"); | ||
3616 | + return -EINVAL; | ||
3617 | + } | ||
3618 | mutex_lock(&sst->sst_lock); | ||
3619 | retval = sst_cache_and_parse_fw(sst, fw); | ||
3620 | mutex_unlock(&sst->sst_lock); | ||
3621 | diff --git a/tools/perf/arch/x86/util/kvm-stat.c b/tools/perf/arch/x86/util/kvm-stat.c | ||
3622 | index b63d4be655a2..2020e12a856f 100644 | ||
3623 | --- a/tools/perf/arch/x86/util/kvm-stat.c | ||
3624 | +++ b/tools/perf/arch/x86/util/kvm-stat.c | ||
3625 | @@ -154,7 +154,7 @@ int cpu_isa_init(struct perf_kvm_stat *kvm, const char *cpuid) | ||
3626 | if (strstr(cpuid, "Intel")) { | ||
3627 | kvm->exit_reasons = vmx_exit_reasons; | ||
3628 | kvm->exit_reasons_isa = "VMX"; | ||
3629 | - } else if (strstr(cpuid, "AMD")) { | ||
3630 | + } else if (strstr(cpuid, "AMD") || strstr(cpuid, "Hygon")) { | ||
3631 | kvm->exit_reasons = svm_exit_reasons; | ||
3632 | kvm->exit_reasons_isa = "SVM"; | ||
3633 | } else | ||
3634 | diff --git a/tools/perf/tests/evsel-tp-sched.c b/tools/perf/tests/evsel-tp-sched.c | ||
3635 | index 1984b3bbfe15..66b53f10eb18 100644 | ||
3636 | --- a/tools/perf/tests/evsel-tp-sched.c | ||
3637 | +++ b/tools/perf/tests/evsel-tp-sched.c | ||
3638 | @@ -16,7 +16,7 @@ static int perf_evsel__test_field(struct perf_evsel *evsel, const char *name, | ||
3639 | return -1; | ||
3640 | } | ||
3641 | |||
3642 | - is_signed = !!(field->flags | FIELD_IS_SIGNED); | ||
3643 | + is_signed = !!(field->flags & FIELD_IS_SIGNED); | ||
3644 | if (should_be_signed && !is_signed) { | ||
3645 | pr_debug("%s: \"%s\" signedness(%d) is wrong, should be %d\n", | ||
3646 | evsel->name, name, is_signed, should_be_signed); | ||
3647 | diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c | ||
3648 | index ab36aa5585b4..a11f6760cce8 100644 | ||
3649 | --- a/tools/perf/util/header.c | ||
3650 | +++ b/tools/perf/util/header.c | ||
3651 | @@ -2988,7 +2988,7 @@ perf_event__synthesize_event_update_unit(struct perf_tool *tool, | ||
3652 | if (ev == NULL) | ||
3653 | return -ENOMEM; | ||
3654 | |||
3655 | - strncpy(ev->data, evsel->unit, size); | ||
3656 | + strlcpy(ev->data, evsel->unit, size + 1); | ||
3657 | err = process(tool, (union perf_event *)ev, NULL, NULL); | ||
3658 | free(ev); | ||
3659 | return err; | ||
3660 | diff --git a/tools/perf/util/probe-file.c b/tools/perf/util/probe-file.c | ||
3661 | index 436b64731f65..b9507a8d0e30 100644 | ||
3662 | --- a/tools/perf/util/probe-file.c | ||
3663 | +++ b/tools/perf/util/probe-file.c | ||
3664 | @@ -414,7 +414,7 @@ static int probe_cache__open(struct probe_cache *pcache, const char *target) | ||
3665 | |||
3666 | if (target && build_id_cache__cached(target)) { | ||
3667 | /* This is a cached buildid */ | ||
3668 | - strncpy(sbuildid, target, SBUILD_ID_SIZE); | ||
3669 | + strlcpy(sbuildid, target, SBUILD_ID_SIZE); | ||
3670 | dir_name = build_id_cache__linkname(sbuildid, NULL, 0); | ||
3671 | goto found; | ||
3672 | } | ||
3673 | diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c | ||
3674 | index 4f2a2df85b1f..60de4c337f0a 100644 | ||
3675 | --- a/virt/kvm/kvm_main.c | ||
3676 | +++ b/virt/kvm/kvm_main.c | ||
3677 | @@ -2900,8 +2900,10 @@ static int kvm_ioctl_create_device(struct kvm *kvm, | ||
3678 | if (ops->init) | ||
3679 | ops->init(dev); | ||
3680 | |||
3681 | + kvm_get_kvm(kvm); | ||
3682 | ret = anon_inode_getfd(ops->name, &kvm_device_fops, dev, O_RDWR | O_CLOEXEC); | ||
3683 | if (ret < 0) { | ||
3684 | + kvm_put_kvm(kvm); | ||
3685 | mutex_lock(&kvm->lock); | ||
3686 | list_del(&dev->vm_node); | ||
3687 | mutex_unlock(&kvm->lock); | ||
3688 | @@ -2909,7 +2911,6 @@ static int kvm_ioctl_create_device(struct kvm *kvm, | ||
3689 | return ret; | ||
3690 | } | ||
3691 | |||
3692 | - kvm_get_kvm(kvm); | ||
3693 | cd->fd = ret; | ||
3694 | return 0; | ||
3695 | } |