Magellan Linux

Contents of /trunk/kernel-alx/patches-4.9/0230-4.9.131-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3232 - (show annotations) (download)
Thu Oct 18 08:37:15 2018 UTC (5 years, 6 months ago) by niro
File size: 91650 byte(s)
-linux-4.9.131
1 diff --git a/Documentation/hwmon/ina2xx b/Documentation/hwmon/ina2xx
2 index cfd31d94c872..f8bf14055c2f 100644
3 --- a/Documentation/hwmon/ina2xx
4 +++ b/Documentation/hwmon/ina2xx
5 @@ -32,7 +32,7 @@ Supported chips:
6 Datasheet: Publicly available at the Texas Instruments website
7 http://www.ti.com/
8
9 -Author: Lothar Felten <l-felten@ti.com>
10 +Author: Lothar Felten <lothar.felten@gmail.com>
11
12 Description
13 -----------
14 diff --git a/Makefile b/Makefile
15 index b98e04a5e1e5..73c4e9a8c127 100644
16 --- a/Makefile
17 +++ b/Makefile
18 @@ -1,6 +1,6 @@
19 VERSION = 4
20 PATCHLEVEL = 9
21 -SUBLEVEL = 130
22 +SUBLEVEL = 131
23 EXTRAVERSION =
24 NAME = Roaring Lionus
25
26 diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi
27 index ce54a70b7695..a1a928064b53 100644
28 --- a/arch/arm/boot/dts/dra7.dtsi
29 +++ b/arch/arm/boot/dts/dra7.dtsi
30 @@ -1770,7 +1770,7 @@
31 };
32 };
33
34 - dcan1: can@481cc000 {
35 + dcan1: can@4ae3c000 {
36 compatible = "ti,dra7-d_can";
37 ti,hwmods = "dcan1";
38 reg = <0x4ae3c000 0x2000>;
39 @@ -1780,7 +1780,7 @@
40 status = "disabled";
41 };
42
43 - dcan2: can@481d0000 {
44 + dcan2: can@48480000 {
45 compatible = "ti,dra7-d_can";
46 ti,hwmods = "dcan2";
47 reg = <0x48480000 0x2000>;
48 diff --git a/arch/arm/mach-mvebu/pmsu.c b/arch/arm/mach-mvebu/pmsu.c
49 index f39bd51bce18..faaf7c3aaf9f 100644
50 --- a/arch/arm/mach-mvebu/pmsu.c
51 +++ b/arch/arm/mach-mvebu/pmsu.c
52 @@ -116,8 +116,8 @@ void mvebu_pmsu_set_cpu_boot_addr(int hw_cpu, void *boot_addr)
53 PMSU_BOOT_ADDR_REDIRECT_OFFSET(hw_cpu));
54 }
55
56 -extern unsigned char mvebu_boot_wa_start;
57 -extern unsigned char mvebu_boot_wa_end;
58 +extern unsigned char mvebu_boot_wa_start[];
59 +extern unsigned char mvebu_boot_wa_end[];
60
61 /*
62 * This function sets up the boot address workaround needed for SMP
63 @@ -130,7 +130,7 @@ int mvebu_setup_boot_addr_wa(unsigned int crypto_eng_target,
64 phys_addr_t resume_addr_reg)
65 {
66 void __iomem *sram_virt_base;
67 - u32 code_len = &mvebu_boot_wa_end - &mvebu_boot_wa_start;
68 + u32 code_len = mvebu_boot_wa_end - mvebu_boot_wa_start;
69
70 mvebu_mbus_del_window(BOOTROM_BASE, BOOTROM_SIZE);
71 mvebu_mbus_add_window_by_id(crypto_eng_target, crypto_eng_attribute,
72 diff --git a/arch/arm/mach-omap2/omap_hwmod_reset.c b/arch/arm/mach-omap2/omap_hwmod_reset.c
73 index b68f9c0aff0b..d5ddba00bb73 100644
74 --- a/arch/arm/mach-omap2/omap_hwmod_reset.c
75 +++ b/arch/arm/mach-omap2/omap_hwmod_reset.c
76 @@ -92,11 +92,13 @@ static void omap_rtc_wait_not_busy(struct omap_hwmod *oh)
77 */
78 void omap_hwmod_rtc_unlock(struct omap_hwmod *oh)
79 {
80 - local_irq_disable();
81 + unsigned long flags;
82 +
83 + local_irq_save(flags);
84 omap_rtc_wait_not_busy(oh);
85 omap_hwmod_write(OMAP_RTC_KICK0_VALUE, oh, OMAP_RTC_KICK0_REG);
86 omap_hwmod_write(OMAP_RTC_KICK1_VALUE, oh, OMAP_RTC_KICK1_REG);
87 - local_irq_enable();
88 + local_irq_restore(flags);
89 }
90
91 /**
92 @@ -110,9 +112,11 @@ void omap_hwmod_rtc_unlock(struct omap_hwmod *oh)
93 */
94 void omap_hwmod_rtc_lock(struct omap_hwmod *oh)
95 {
96 - local_irq_disable();
97 + unsigned long flags;
98 +
99 + local_irq_save(flags);
100 omap_rtc_wait_not_busy(oh);
101 omap_hwmod_write(0x0, oh, OMAP_RTC_KICK0_REG);
102 omap_hwmod_write(0x0, oh, OMAP_RTC_KICK1_REG);
103 - local_irq_enable();
104 + local_irq_restore(flags);
105 }
106 diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/kvm_emulate.h
107 index fe39e6841326..ba0d52c22b50 100644
108 --- a/arch/arm64/include/asm/kvm_emulate.h
109 +++ b/arch/arm64/include/asm/kvm_emulate.h
110 @@ -42,6 +42,11 @@ void kvm_inject_vabt(struct kvm_vcpu *vcpu);
111 void kvm_inject_dabt(struct kvm_vcpu *vcpu, unsigned long addr);
112 void kvm_inject_pabt(struct kvm_vcpu *vcpu, unsigned long addr);
113
114 +static inline bool vcpu_el1_is_32bit(struct kvm_vcpu *vcpu)
115 +{
116 + return !(vcpu->arch.hcr_el2 & HCR_RW);
117 +}
118 +
119 static inline void vcpu_reset_hcr(struct kvm_vcpu *vcpu)
120 {
121 vcpu->arch.hcr_el2 = HCR_GUEST_FLAGS;
122 diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c
123 index d3e0a2ffb383..e41a7b4f3a9b 100644
124 --- a/arch/arm64/kvm/guest.c
125 +++ b/arch/arm64/kvm/guest.c
126 @@ -57,6 +57,45 @@ static u64 core_reg_offset_from_id(u64 id)
127 return id & ~(KVM_REG_ARCH_MASK | KVM_REG_SIZE_MASK | KVM_REG_ARM_CORE);
128 }
129
130 +static int validate_core_offset(const struct kvm_one_reg *reg)
131 +{
132 + u64 off = core_reg_offset_from_id(reg->id);
133 + int size;
134 +
135 + switch (off) {
136 + case KVM_REG_ARM_CORE_REG(regs.regs[0]) ...
137 + KVM_REG_ARM_CORE_REG(regs.regs[30]):
138 + case KVM_REG_ARM_CORE_REG(regs.sp):
139 + case KVM_REG_ARM_CORE_REG(regs.pc):
140 + case KVM_REG_ARM_CORE_REG(regs.pstate):
141 + case KVM_REG_ARM_CORE_REG(sp_el1):
142 + case KVM_REG_ARM_CORE_REG(elr_el1):
143 + case KVM_REG_ARM_CORE_REG(spsr[0]) ...
144 + KVM_REG_ARM_CORE_REG(spsr[KVM_NR_SPSR - 1]):
145 + size = sizeof(__u64);
146 + break;
147 +
148 + case KVM_REG_ARM_CORE_REG(fp_regs.vregs[0]) ...
149 + KVM_REG_ARM_CORE_REG(fp_regs.vregs[31]):
150 + size = sizeof(__uint128_t);
151 + break;
152 +
153 + case KVM_REG_ARM_CORE_REG(fp_regs.fpsr):
154 + case KVM_REG_ARM_CORE_REG(fp_regs.fpcr):
155 + size = sizeof(__u32);
156 + break;
157 +
158 + default:
159 + return -EINVAL;
160 + }
161 +
162 + if (KVM_REG_SIZE(reg->id) == size &&
163 + IS_ALIGNED(off, size / sizeof(__u32)))
164 + return 0;
165 +
166 + return -EINVAL;
167 +}
168 +
169 static int get_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
170 {
171 /*
172 @@ -76,6 +115,9 @@ static int get_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
173 (off + (KVM_REG_SIZE(reg->id) / sizeof(__u32))) >= nr_regs)
174 return -ENOENT;
175
176 + if (validate_core_offset(reg))
177 + return -EINVAL;
178 +
179 if (copy_to_user(uaddr, ((u32 *)regs) + off, KVM_REG_SIZE(reg->id)))
180 return -EFAULT;
181
182 @@ -98,6 +140,9 @@ static int set_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
183 (off + (KVM_REG_SIZE(reg->id) / sizeof(__u32))) >= nr_regs)
184 return -ENOENT;
185
186 + if (validate_core_offset(reg))
187 + return -EINVAL;
188 +
189 if (KVM_REG_SIZE(reg->id) > sizeof(tmp))
190 return -EINVAL;
191
192 @@ -107,17 +152,25 @@ static int set_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
193 }
194
195 if (off == KVM_REG_ARM_CORE_REG(regs.pstate)) {
196 - u32 mode = (*(u32 *)valp) & COMPAT_PSR_MODE_MASK;
197 + u64 mode = (*(u64 *)valp) & COMPAT_PSR_MODE_MASK;
198 switch (mode) {
199 case COMPAT_PSR_MODE_USR:
200 + if (!system_supports_32bit_el0())
201 + return -EINVAL;
202 + break;
203 case COMPAT_PSR_MODE_FIQ:
204 case COMPAT_PSR_MODE_IRQ:
205 case COMPAT_PSR_MODE_SVC:
206 case COMPAT_PSR_MODE_ABT:
207 case COMPAT_PSR_MODE_UND:
208 + if (!vcpu_el1_is_32bit(vcpu))
209 + return -EINVAL;
210 + break;
211 case PSR_MODE_EL0t:
212 case PSR_MODE_EL1t:
213 case PSR_MODE_EL1h:
214 + if (vcpu_el1_is_32bit(vcpu))
215 + return -EINVAL;
216 break;
217 default:
218 err = -EINVAL;
219 diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c
220 index 2694d078741d..9dafd7af39b8 100644
221 --- a/arch/powerpc/kernel/machine_kexec.c
222 +++ b/arch/powerpc/kernel/machine_kexec.c
223 @@ -186,7 +186,12 @@ void __init reserve_crashkernel(void)
224 (unsigned long)(crashk_res.start >> 20),
225 (unsigned long)(memblock_phys_mem_size() >> 20));
226
227 - memblock_reserve(crashk_res.start, crash_size);
228 + if (!memblock_is_region_memory(crashk_res.start, crash_size) ||
229 + memblock_reserve(crashk_res.start, crash_size)) {
230 + pr_err("Failed to reserve memory for crashkernel!\n");
231 + crashk_res.start = crashk_res.end = 0;
232 + return;
233 + }
234 }
235
236 int overlaps_crashkernel(unsigned long start, unsigned long size)
237 diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
238 index f52cc6fd4290..8015e40bc7ee 100644
239 --- a/arch/powerpc/platforms/powernv/pci-ioda.c
240 +++ b/arch/powerpc/platforms/powernv/pci-ioda.c
241 @@ -2623,7 +2623,7 @@ static long pnv_pci_ioda2_table_alloc_pages(int nid, __u64 bus_offset,
242 level_shift = entries_shift + 3;
243 level_shift = max_t(unsigned, level_shift, PAGE_SHIFT);
244
245 - if ((level_shift - 3) * levels + page_shift >= 60)
246 + if ((level_shift - 3) * levels + page_shift >= 55)
247 return -EINVAL;
248
249 /* Allocate TCE table */
250 diff --git a/arch/s390/mm/extmem.c b/arch/s390/mm/extmem.c
251 index 02042b6b66bf..e6665a6e105e 100644
252 --- a/arch/s390/mm/extmem.c
253 +++ b/arch/s390/mm/extmem.c
254 @@ -79,7 +79,7 @@ struct qin64 {
255 struct dcss_segment {
256 struct list_head list;
257 char dcss_name[8];
258 - char res_name[15];
259 + char res_name[16];
260 unsigned long start_addr;
261 unsigned long end;
262 atomic_t ref_count;
263 @@ -432,7 +432,7 @@ __segment_load (char *name, int do_nonshared, unsigned long *addr, unsigned long
264 memcpy(&seg->res_name, seg->dcss_name, 8);
265 EBCASC(seg->res_name, 8);
266 seg->res_name[8] = '\0';
267 - strncat(seg->res_name, " (DCSS)", 7);
268 + strlcat(seg->res_name, " (DCSS)", sizeof(seg->res_name));
269 seg->res->name = seg->res_name;
270 rc = seg->vm_segtype;
271 if (rc == SEG_TYPE_SC ||
272 diff --git a/arch/s390/mm/pgalloc.c b/arch/s390/mm/pgalloc.c
273 index 995f78532cc2..781a044e1702 100644
274 --- a/arch/s390/mm/pgalloc.c
275 +++ b/arch/s390/mm/pgalloc.c
276 @@ -26,7 +26,7 @@ static struct ctl_table page_table_sysctl[] = {
277 .data = &page_table_allocate_pgste,
278 .maxlen = sizeof(int),
279 .mode = S_IRUGO | S_IWUSR,
280 - .proc_handler = proc_dointvec,
281 + .proc_handler = proc_dointvec_minmax,
282 .extra1 = &page_table_allocate_pgste_min,
283 .extra2 = &page_table_allocate_pgste_max,
284 },
285 diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
286 index 76c1d85e749b..870e941c1947 100644
287 --- a/arch/x86/entry/entry_64.S
288 +++ b/arch/x86/entry/entry_64.S
289 @@ -91,7 +91,7 @@ ENDPROC(native_usergs_sysret64)
290 .endm
291
292 .macro TRACE_IRQS_IRETQ_DEBUG
293 - bt $9, EFLAGS(%rsp) /* interrupts off? */
294 + btl $9, EFLAGS(%rsp) /* interrupts off? */
295 jnc 1f
296 TRACE_IRQS_ON_DEBUG
297 1:
298 @@ -485,7 +485,7 @@ retint_kernel:
299 #ifdef CONFIG_PREEMPT
300 /* Interrupts are off */
301 /* Check if we need preemption */
302 - bt $9, EFLAGS(%rsp) /* were interrupts off? */
303 + btl $9, EFLAGS(%rsp) /* were interrupts off? */
304 jnc 1f
305 0: cmpl $0, PER_CPU_VAR(__preempt_count)
306 jnz 1f
307 diff --git a/arch/x86/events/intel/lbr.c b/arch/x86/events/intel/lbr.c
308 index 5d103a87e984..2c3c7abf678b 100644
309 --- a/arch/x86/events/intel/lbr.c
310 +++ b/arch/x86/events/intel/lbr.c
311 @@ -342,7 +342,7 @@ static void __intel_pmu_lbr_restore(struct x86_perf_task_context *task_ctx)
312
313 mask = x86_pmu.lbr_nr - 1;
314 tos = task_ctx->tos;
315 - for (i = 0; i < tos; i++) {
316 + for (i = 0; i < task_ctx->valid_lbrs; i++) {
317 lbr_idx = (tos - i) & mask;
318 wrlbr_from(lbr_idx, task_ctx->lbr_from[i]);
319 wrlbr_to (lbr_idx, task_ctx->lbr_to[i]);
320 @@ -350,6 +350,15 @@ static void __intel_pmu_lbr_restore(struct x86_perf_task_context *task_ctx)
321 if (x86_pmu.intel_cap.lbr_format == LBR_FORMAT_INFO)
322 wrmsrl(MSR_LBR_INFO_0 + lbr_idx, task_ctx->lbr_info[i]);
323 }
324 +
325 + for (; i < x86_pmu.lbr_nr; i++) {
326 + lbr_idx = (tos - i) & mask;
327 + wrlbr_from(lbr_idx, 0);
328 + wrlbr_to(lbr_idx, 0);
329 + if (x86_pmu.intel_cap.lbr_format == LBR_FORMAT_INFO)
330 + wrmsrl(MSR_LBR_INFO_0 + lbr_idx, 0);
331 + }
332 +
333 wrmsrl(x86_pmu.lbr_tos, tos);
334 task_ctx->lbr_stack_state = LBR_NONE;
335 }
336 @@ -357,7 +366,7 @@ static void __intel_pmu_lbr_restore(struct x86_perf_task_context *task_ctx)
337 static void __intel_pmu_lbr_save(struct x86_perf_task_context *task_ctx)
338 {
339 unsigned lbr_idx, mask;
340 - u64 tos;
341 + u64 tos, from;
342 int i;
343
344 if (task_ctx->lbr_callstack_users == 0) {
345 @@ -367,13 +376,17 @@ static void __intel_pmu_lbr_save(struct x86_perf_task_context *task_ctx)
346
347 mask = x86_pmu.lbr_nr - 1;
348 tos = intel_pmu_lbr_tos();
349 - for (i = 0; i < tos; i++) {
350 + for (i = 0; i < x86_pmu.lbr_nr; i++) {
351 lbr_idx = (tos - i) & mask;
352 - task_ctx->lbr_from[i] = rdlbr_from(lbr_idx);
353 + from = rdlbr_from(lbr_idx);
354 + if (!from)
355 + break;
356 + task_ctx->lbr_from[i] = from;
357 task_ctx->lbr_to[i] = rdlbr_to(lbr_idx);
358 if (x86_pmu.intel_cap.lbr_format == LBR_FORMAT_INFO)
359 rdmsrl(MSR_LBR_INFO_0 + lbr_idx, task_ctx->lbr_info[i]);
360 }
361 + task_ctx->valid_lbrs = i;
362 task_ctx->tos = tos;
363 task_ctx->lbr_stack_state = LBR_VALID;
364 }
365 @@ -522,7 +535,7 @@ static void intel_pmu_lbr_read_32(struct cpu_hw_events *cpuc)
366 */
367 static void intel_pmu_lbr_read_64(struct cpu_hw_events *cpuc)
368 {
369 - bool need_info = false;
370 + bool need_info = false, call_stack = false;
371 unsigned long mask = x86_pmu.lbr_nr - 1;
372 int lbr_format = x86_pmu.intel_cap.lbr_format;
373 u64 tos = intel_pmu_lbr_tos();
374 @@ -533,7 +546,7 @@ static void intel_pmu_lbr_read_64(struct cpu_hw_events *cpuc)
375 if (cpuc->lbr_sel) {
376 need_info = !(cpuc->lbr_sel->config & LBR_NO_INFO);
377 if (cpuc->lbr_sel->config & LBR_CALL_STACK)
378 - num = tos;
379 + call_stack = true;
380 }
381
382 for (i = 0; i < num; i++) {
383 @@ -546,6 +559,13 @@ static void intel_pmu_lbr_read_64(struct cpu_hw_events *cpuc)
384 from = rdlbr_from(lbr_idx);
385 to = rdlbr_to(lbr_idx);
386
387 + /*
388 + * Read LBR call stack entries
389 + * until invalid entry (0s) is detected.
390 + */
391 + if (call_stack && !from)
392 + break;
393 +
394 if (lbr_format == LBR_FORMAT_INFO && need_info) {
395 u64 info;
396
397 diff --git a/arch/x86/events/perf_event.h b/arch/x86/events/perf_event.h
398 index f3563179290b..1bfebbc4d156 100644
399 --- a/arch/x86/events/perf_event.h
400 +++ b/arch/x86/events/perf_event.h
401 @@ -633,6 +633,7 @@ struct x86_perf_task_context {
402 u64 lbr_to[MAX_LBR_ENTRIES];
403 u64 lbr_info[MAX_LBR_ENTRIES];
404 int tos;
405 + int valid_lbrs;
406 int lbr_callstack_users;
407 int lbr_stack_state;
408 };
409 diff --git a/arch/x86/kernel/tsc_msr.c b/arch/x86/kernel/tsc_msr.c
410 index 0fe720d64fef..3f818ce985c0 100644
411 --- a/arch/x86/kernel/tsc_msr.c
412 +++ b/arch/x86/kernel/tsc_msr.c
413 @@ -12,6 +12,7 @@
414 #include <asm/setup.h>
415 #include <asm/apic.h>
416 #include <asm/param.h>
417 +#include <asm/tsc.h>
418
419 #define MAX_NUM_FREQS 9
420
421 diff --git a/arch/x86/mm/numa_emulation.c b/arch/x86/mm/numa_emulation.c
422 index a8f90ce3dedf..dc6d99017f3f 100644
423 --- a/arch/x86/mm/numa_emulation.c
424 +++ b/arch/x86/mm/numa_emulation.c
425 @@ -60,7 +60,7 @@ static int __init emu_setup_memblk(struct numa_meminfo *ei,
426 eb->nid = nid;
427
428 if (emu_nid_to_phys[nid] == NUMA_NO_NODE)
429 - emu_nid_to_phys[nid] = nid;
430 + emu_nid_to_phys[nid] = pb->nid;
431
432 pb->start += size;
433 if (pb->start >= pb->end) {
434 diff --git a/crypto/ablkcipher.c b/crypto/ablkcipher.c
435 index 860c9e5dfd7a..3bc0e76eaaef 100644
436 --- a/crypto/ablkcipher.c
437 +++ b/crypto/ablkcipher.c
438 @@ -367,6 +367,7 @@ static int crypto_ablkcipher_report(struct sk_buff *skb, struct crypto_alg *alg)
439 strncpy(rblkcipher.type, "ablkcipher", sizeof(rblkcipher.type));
440 strncpy(rblkcipher.geniv, alg->cra_ablkcipher.geniv ?: "<default>",
441 sizeof(rblkcipher.geniv));
442 + rblkcipher.geniv[sizeof(rblkcipher.geniv) - 1] = '\0';
443
444 rblkcipher.blocksize = alg->cra_blocksize;
445 rblkcipher.min_keysize = alg->cra_ablkcipher.min_keysize;
446 @@ -441,6 +442,7 @@ static int crypto_givcipher_report(struct sk_buff *skb, struct crypto_alg *alg)
447 strncpy(rblkcipher.type, "givcipher", sizeof(rblkcipher.type));
448 strncpy(rblkcipher.geniv, alg->cra_ablkcipher.geniv ?: "<built-in>",
449 sizeof(rblkcipher.geniv));
450 + rblkcipher.geniv[sizeof(rblkcipher.geniv) - 1] = '\0';
451
452 rblkcipher.blocksize = alg->cra_blocksize;
453 rblkcipher.min_keysize = alg->cra_ablkcipher.min_keysize;
454 diff --git a/crypto/blkcipher.c b/crypto/blkcipher.c
455 index 27f98666763a..59a0936ed8bc 100644
456 --- a/crypto/blkcipher.c
457 +++ b/crypto/blkcipher.c
458 @@ -510,6 +510,7 @@ static int crypto_blkcipher_report(struct sk_buff *skb, struct crypto_alg *alg)
459 strncpy(rblkcipher.type, "blkcipher", sizeof(rblkcipher.type));
460 strncpy(rblkcipher.geniv, alg->cra_blkcipher.geniv ?: "<default>",
461 sizeof(rblkcipher.geniv));
462 + rblkcipher.geniv[sizeof(rblkcipher.geniv) - 1] = '\0';
463
464 rblkcipher.blocksize = alg->cra_blocksize;
465 rblkcipher.min_keysize = alg->cra_blkcipher.min_keysize;
466 diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
467 index e3d8e4ced4a2..a321d7d849c6 100644
468 --- a/drivers/block/floppy.c
469 +++ b/drivers/block/floppy.c
470 @@ -3459,6 +3459,9 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned int
471 (struct floppy_struct **)&outparam);
472 if (ret)
473 return ret;
474 + memcpy(&inparam.g, outparam,
475 + offsetof(struct floppy_struct, name));
476 + outparam = &inparam.g;
477 break;
478 case FDMSGON:
479 UDP->flags |= FTD_MSG;
480 diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
481 index 44bccb1afa06..8dce1a890078 100644
482 --- a/drivers/bluetooth/btusb.c
483 +++ b/drivers/bluetooth/btusb.c
484 @@ -349,6 +349,7 @@ static const struct usb_device_id blacklist_table[] = {
485 { USB_DEVICE(0x7392, 0xa611), .driver_info = BTUSB_REALTEK },
486
487 /* Additional Realtek 8723DE Bluetooth devices */
488 + { USB_DEVICE(0x0bda, 0xb009), .driver_info = BTUSB_REALTEK },
489 { USB_DEVICE(0x2ff8, 0xb011), .driver_info = BTUSB_REALTEK },
490
491 /* Additional Realtek 8821AE Bluetooth devices */
492 diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
493 index 4e0f8e720ad9..40d792e96b75 100644
494 --- a/drivers/edac/edac_mc_sysfs.c
495 +++ b/drivers/edac/edac_mc_sysfs.c
496 @@ -1059,14 +1059,14 @@ int __init edac_mc_sysfs_init(void)
497
498 err = device_add(mci_pdev);
499 if (err < 0)
500 - goto out_dev_free;
501 + goto out_put_device;
502
503 edac_dbg(0, "device %s created\n", dev_name(mci_pdev));
504
505 return 0;
506
507 - out_dev_free:
508 - kfree(mci_pdev);
509 + out_put_device:
510 + put_device(mci_pdev);
511 out:
512 return err;
513 }
514 diff --git a/drivers/edac/i7core_edac.c b/drivers/edac/i7core_edac.c
515 index 8a68a5e943ea..b60932026e34 100644
516 --- a/drivers/edac/i7core_edac.c
517 +++ b/drivers/edac/i7core_edac.c
518 @@ -1177,15 +1177,14 @@ static int i7core_create_sysfs_devices(struct mem_ctl_info *mci)
519
520 rc = device_add(pvt->addrmatch_dev);
521 if (rc < 0)
522 - return rc;
523 + goto err_put_addrmatch;
524
525 if (!pvt->is_registered) {
526 pvt->chancounts_dev = kzalloc(sizeof(*pvt->chancounts_dev),
527 GFP_KERNEL);
528 if (!pvt->chancounts_dev) {
529 - put_device(pvt->addrmatch_dev);
530 - device_del(pvt->addrmatch_dev);
531 - return -ENOMEM;
532 + rc = -ENOMEM;
533 + goto err_del_addrmatch;
534 }
535
536 pvt->chancounts_dev->type = &all_channel_counts_type;
537 @@ -1199,9 +1198,18 @@ static int i7core_create_sysfs_devices(struct mem_ctl_info *mci)
538
539 rc = device_add(pvt->chancounts_dev);
540 if (rc < 0)
541 - return rc;
542 + goto err_put_chancounts;
543 }
544 return 0;
545 +
546 +err_put_chancounts:
547 + put_device(pvt->chancounts_dev);
548 +err_del_addrmatch:
549 + device_del(pvt->addrmatch_dev);
550 +err_put_addrmatch:
551 + put_device(pvt->addrmatch_dev);
552 +
553 + return rc;
554 }
555
556 static void i7core_delete_sysfs_devices(struct mem_ctl_info *mci)
557 @@ -1211,11 +1219,11 @@ static void i7core_delete_sysfs_devices(struct mem_ctl_info *mci)
558 edac_dbg(1, "\n");
559
560 if (!pvt->is_registered) {
561 - put_device(pvt->chancounts_dev);
562 device_del(pvt->chancounts_dev);
563 + put_device(pvt->chancounts_dev);
564 }
565 - put_device(pvt->addrmatch_dev);
566 device_del(pvt->addrmatch_dev);
567 + put_device(pvt->addrmatch_dev);
568 }
569
570 /****************************************************************************
571 diff --git a/drivers/gpio/gpio-menz127.c b/drivers/gpio/gpio-menz127.c
572 index a1210e330571..95061d25895b 100644
573 --- a/drivers/gpio/gpio-menz127.c
574 +++ b/drivers/gpio/gpio-menz127.c
575 @@ -56,9 +56,9 @@ static int men_z127_debounce(struct gpio_chip *gc, unsigned gpio,
576 rnd = fls(debounce) - 1;
577
578 if (rnd && (debounce & BIT(rnd - 1)))
579 - debounce = round_up(debounce, MEN_Z127_DB_MIN_US);
580 + debounce = roundup(debounce, MEN_Z127_DB_MIN_US);
581 else
582 - debounce = round_down(debounce, MEN_Z127_DB_MIN_US);
583 + debounce = rounddown(debounce, MEN_Z127_DB_MIN_US);
584
585 if (debounce > MEN_Z127_DB_MAX_US)
586 debounce = MEN_Z127_DB_MAX_US;
587 diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
588 index 564362e8b486..c8a5cf5365a9 100644
589 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
590 +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
591 @@ -5551,6 +5551,11 @@ static int gfx_v8_0_set_powergating_state(void *handle,
592 if (!(adev->pg_flags & AMD_PG_SUPPORT_GFX_PG))
593 return 0;
594
595 + if (adev->pg_flags & (AMD_PG_SUPPORT_GFX_SMG |
596 + AMD_PG_SUPPORT_RLC_SMU_HS |
597 + AMD_PG_SUPPORT_CP |
598 + AMD_PG_SUPPORT_GFX_DMG))
599 + adev->gfx.rlc.funcs->enter_safe_mode(adev);
600 switch (adev->asic_type) {
601 case CHIP_CARRIZO:
602 case CHIP_STONEY:
603 @@ -5586,7 +5591,11 @@ static int gfx_v8_0_set_powergating_state(void *handle,
604 default:
605 break;
606 }
607 -
608 + if (adev->pg_flags & (AMD_PG_SUPPORT_GFX_SMG |
609 + AMD_PG_SUPPORT_RLC_SMU_HS |
610 + AMD_PG_SUPPORT_CP |
611 + AMD_PG_SUPPORT_GFX_DMG))
612 + adev->gfx.rlc.funcs->exit_safe_mode(adev);
613 return 0;
614 }
615
616 diff --git a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
617 index 71d2856222fa..f61c489e5f6d 100644
618 --- a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
619 +++ b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
620 @@ -1350,8 +1350,6 @@ static int kv_dpm_enable(struct amdgpu_device *adev)
621 return ret;
622 }
623
624 - kv_update_current_ps(adev, adev->pm.dpm.boot_ps);
625 -
626 if (adev->irq.installed &&
627 amdgpu_is_internal_thermal_sensor(adev->pm.int_thermal_type)) {
628 ret = kv_set_thermal_temperature_range(adev, KV_TEMP_RANGE_MIN, KV_TEMP_RANGE_MAX);
629 @@ -3086,7 +3084,7 @@ static int kv_dpm_hw_init(void *handle)
630 else
631 adev->pm.dpm_enabled = true;
632 mutex_unlock(&adev->pm.mutex);
633 -
634 + amdgpu_pm_compute_clocks(adev);
635 return ret;
636 }
637
638 diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
639 index 3fa8320e49c1..4826befc1bc3 100644
640 --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c
641 +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
642 @@ -6959,7 +6959,6 @@ static int si_dpm_enable(struct amdgpu_device *adev)
643
644 si_enable_auto_throttle_source(adev, AMDGPU_DPM_AUTO_THROTTLE_SRC_THERMAL, true);
645 si_thermal_start_thermal_controller(adev);
646 - ni_update_current_ps(adev, boot_ps);
647
648 return 0;
649 }
650 @@ -7836,7 +7835,7 @@ static int si_dpm_hw_init(void *handle)
651 else
652 adev->pm.dpm_enabled = true;
653 mutex_unlock(&adev->pm.mutex);
654 -
655 + amdgpu_pm_compute_clocks(adev);
656 return ret;
657 }
658
659 diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
660 index aad2f4a2a0ef..97828faf2a1f 100644
661 --- a/drivers/gpu/drm/sun4i/sun4i_drv.c
662 +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
663 @@ -283,7 +283,6 @@ static int sun4i_drv_add_endpoints(struct device *dev,
664 remote = of_graph_get_remote_port_parent(ep);
665 if (!remote) {
666 DRM_DEBUG_DRIVER("Error retrieving the output node\n");
667 - of_node_put(remote);
668 continue;
669 }
670
671 @@ -297,11 +296,13 @@ static int sun4i_drv_add_endpoints(struct device *dev,
672
673 if (of_graph_parse_endpoint(ep, &endpoint)) {
674 DRM_DEBUG_DRIVER("Couldn't parse endpoint\n");
675 + of_node_put(remote);
676 continue;
677 }
678
679 if (!endpoint.id) {
680 DRM_DEBUG_DRIVER("Endpoint is our panel... skipping\n");
681 + of_node_put(remote);
682 continue;
683 }
684 }
685 diff --git a/drivers/hid/hid-ntrig.c b/drivers/hid/hid-ntrig.c
686 index 1b0084d4af2e..28373dab60ae 100644
687 --- a/drivers/hid/hid-ntrig.c
688 +++ b/drivers/hid/hid-ntrig.c
689 @@ -955,6 +955,8 @@ static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id)
690
691 ret = sysfs_create_group(&hdev->dev.kobj,
692 &ntrig_attribute_group);
693 + if (ret)
694 + hid_err(hdev, "cannot create sysfs group\n");
695
696 return 0;
697 err_free:
698 diff --git a/drivers/hwmon/adt7475.c b/drivers/hwmon/adt7475.c
699 index 3cefd1aeb24f..9c262d955331 100644
700 --- a/drivers/hwmon/adt7475.c
701 +++ b/drivers/hwmon/adt7475.c
702 @@ -274,14 +274,18 @@ static inline u16 volt2reg(int channel, long volt, u8 bypass_attn)
703 return clamp_val(reg, 0, 1023) & (0xff << 2);
704 }
705
706 -static u16 adt7475_read_word(struct i2c_client *client, int reg)
707 +static int adt7475_read_word(struct i2c_client *client, int reg)
708 {
709 - u16 val;
710 + int val1, val2;
711
712 - val = i2c_smbus_read_byte_data(client, reg);
713 - val |= (i2c_smbus_read_byte_data(client, reg + 1) << 8);
714 + val1 = i2c_smbus_read_byte_data(client, reg);
715 + if (val1 < 0)
716 + return val1;
717 + val2 = i2c_smbus_read_byte_data(client, reg + 1);
718 + if (val2 < 0)
719 + return val2;
720
721 - return val;
722 + return val1 | (val2 << 8);
723 }
724
725 static void adt7475_write_word(struct i2c_client *client, int reg, u16 val)
726 diff --git a/drivers/hwmon/ina2xx.c b/drivers/hwmon/ina2xx.c
727 index ac63e562071f..9ac6e1673375 100644
728 --- a/drivers/hwmon/ina2xx.c
729 +++ b/drivers/hwmon/ina2xx.c
730 @@ -17,7 +17,7 @@
731 * Bi-directional Current/Power Monitor with I2C Interface
732 * Datasheet: http://www.ti.com/product/ina230
733 *
734 - * Copyright (C) 2012 Lothar Felten <l-felten@ti.com>
735 + * Copyright (C) 2012 Lothar Felten <lothar.felten@gmail.com>
736 * Thanks to Jan Volkering
737 *
738 * This program is free software; you can redistribute it and/or modify
739 @@ -328,6 +328,15 @@ static int ina2xx_set_shunt(struct ina2xx_data *data, long val)
740 return 0;
741 }
742
743 +static ssize_t ina2xx_show_shunt(struct device *dev,
744 + struct device_attribute *da,
745 + char *buf)
746 +{
747 + struct ina2xx_data *data = dev_get_drvdata(dev);
748 +
749 + return snprintf(buf, PAGE_SIZE, "%li\n", data->rshunt);
750 +}
751 +
752 static ssize_t ina2xx_store_shunt(struct device *dev,
753 struct device_attribute *da,
754 const char *buf, size_t count)
755 @@ -402,7 +411,7 @@ static SENSOR_DEVICE_ATTR(power1_input, S_IRUGO, ina2xx_show_value, NULL,
756
757 /* shunt resistance */
758 static SENSOR_DEVICE_ATTR(shunt_resistor, S_IRUGO | S_IWUSR,
759 - ina2xx_show_value, ina2xx_store_shunt,
760 + ina2xx_show_shunt, ina2xx_store_shunt,
761 INA2XX_CALIBRATION);
762
763 /* update interval (ina226 only) */
764 diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
765 index 663017f1d078..26f1691f67ab 100644
766 --- a/drivers/i2c/busses/i2c-i801.c
767 +++ b/drivers/i2c/busses/i2c-i801.c
768 @@ -1408,6 +1408,13 @@ static void i801_add_tco(struct i801_priv *priv)
769 }
770
771 #ifdef CONFIG_ACPI
772 +static bool i801_acpi_is_smbus_ioport(const struct i801_priv *priv,
773 + acpi_physical_address address)
774 +{
775 + return address >= priv->smba &&
776 + address <= pci_resource_end(priv->pci_dev, SMBBAR);
777 +}
778 +
779 static acpi_status
780 i801_acpi_io_handler(u32 function, acpi_physical_address address, u32 bits,
781 u64 *value, void *handler_context, void *region_context)
782 @@ -1423,7 +1430,7 @@ i801_acpi_io_handler(u32 function, acpi_physical_address address, u32 bits,
783 */
784 mutex_lock(&priv->acpi_lock);
785
786 - if (!priv->acpi_reserved) {
787 + if (!priv->acpi_reserved && i801_acpi_is_smbus_ioport(priv, address)) {
788 priv->acpi_reserved = true;
789
790 dev_warn(&pdev->dev, "BIOS is accessing SMBus registers\n");
791 diff --git a/drivers/infiniband/core/rw.c b/drivers/infiniband/core/rw.c
792 index dbfd854c32c9..1d90a122fe5e 100644
793 --- a/drivers/infiniband/core/rw.c
794 +++ b/drivers/infiniband/core/rw.c
795 @@ -87,7 +87,7 @@ static int rdma_rw_init_one_mr(struct ib_qp *qp, u8 port_num,
796 }
797
798 ret = ib_map_mr_sg(reg->mr, sg, nents, &offset, PAGE_SIZE);
799 - if (ret < nents) {
800 + if (ret < 0 || ret < nents) {
801 ib_mr_pool_put(qp, &qp->rdma_mrs, reg->mr);
802 return -EINVAL;
803 }
804 diff --git a/drivers/infiniband/hw/hfi1/pio.c b/drivers/infiniband/hw/hfi1/pio.c
805 index d89b8745d4c1..c2982bbc82b3 100644
806 --- a/drivers/infiniband/hw/hfi1/pio.c
807 +++ b/drivers/infiniband/hw/hfi1/pio.c
808 @@ -88,6 +88,7 @@ void pio_send_control(struct hfi1_devdata *dd, int op)
809 unsigned long flags;
810 int write = 1; /* write sendctrl back */
811 int flush = 0; /* re-read sendctrl to make sure it is flushed */
812 + int i;
813
814 spin_lock_irqsave(&dd->sendctrl_lock, flags);
815
816 @@ -97,9 +98,13 @@ void pio_send_control(struct hfi1_devdata *dd, int op)
817 reg |= SEND_CTRL_SEND_ENABLE_SMASK;
818 /* Fall through */
819 case PSC_DATA_VL_ENABLE:
820 + mask = 0;
821 + for (i = 0; i < ARRAY_SIZE(dd->vld); i++)
822 + if (!dd->vld[i].mtu)
823 + mask |= BIT_ULL(i);
824 /* Disallow sending on VLs not enabled */
825 - mask = (((~0ull) << num_vls) & SEND_CTRL_UNSUPPORTED_VL_MASK) <<
826 - SEND_CTRL_UNSUPPORTED_VL_SHIFT;
827 + mask = (mask & SEND_CTRL_UNSUPPORTED_VL_MASK) <<
828 + SEND_CTRL_UNSUPPORTED_VL_SHIFT;
829 reg = (reg & ~SEND_CTRL_UNSUPPORTED_VL_SMASK) | mask;
830 break;
831 case PSC_GLOBAL_DISABLE:
832 diff --git a/drivers/infiniband/hw/hfi1/user_sdma.c b/drivers/infiniband/hw/hfi1/user_sdma.c
833 index 77697d690f3e..018a41562704 100644
834 --- a/drivers/infiniband/hw/hfi1/user_sdma.c
835 +++ b/drivers/infiniband/hw/hfi1/user_sdma.c
836 @@ -956,7 +956,7 @@ static int user_sdma_send_pkts(struct user_sdma_request *req, unsigned maxpkts)
837 if (ACCESS_ONCE(iovec->offset) == iovec->iov.iov_len) {
838 if (++req->iov_idx == req->data_iovs) {
839 ret = -EFAULT;
840 - goto free_txreq;
841 + goto free_tx;
842 }
843 iovec = &req->iovs[req->iov_idx];
844 WARN_ON(iovec->offset);
845 diff --git a/drivers/infiniband/hw/hfi1/verbs.c b/drivers/infiniband/hw/hfi1/verbs.c
846 index 01a380efea6b..14ddb7506085 100644
847 --- a/drivers/infiniband/hw/hfi1/verbs.c
848 +++ b/drivers/infiniband/hw/hfi1/verbs.c
849 @@ -1511,12 +1511,18 @@ static int hfi1_check_ah(struct ib_device *ibdev, struct ib_ah_attr *ah_attr)
850 struct hfi1_pportdata *ppd;
851 struct hfi1_devdata *dd;
852 u8 sc5;
853 + u8 sl;
854
855 /* test the mapping for validity */
856 ibp = to_iport(ibdev, ah_attr->port_num);
857 ppd = ppd_from_ibp(ibp);
858 - sc5 = ibp->sl_to_sc[ah_attr->sl];
859 dd = dd_from_ppd(ppd);
860 +
861 + sl = ah_attr->sl;
862 + if (sl >= ARRAY_SIZE(ibp->sl_to_sc))
863 + return -EINVAL;
864 +
865 + sc5 = ibp->sl_to_sc[sl];
866 if (sc_to_vlt(dd, sc5) > num_vls && sc_to_vlt(dd, sc5) != 0xf)
867 return -EINVAL;
868 return 0;
869 diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
870 index 463ea592a42a..646359025574 100644
871 --- a/drivers/infiniband/ulp/srp/ib_srp.c
872 +++ b/drivers/infiniband/ulp/srp/ib_srp.c
873 @@ -2639,7 +2639,7 @@ static int srp_reset_device(struct scsi_cmnd *scmnd)
874 {
875 struct srp_target_port *target = host_to_target(scmnd->device->host);
876 struct srp_rdma_ch *ch;
877 - int i;
878 + int i, j;
879 u8 status;
880
881 shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n");
882 @@ -2653,8 +2653,8 @@ static int srp_reset_device(struct scsi_cmnd *scmnd)
883
884 for (i = 0; i < target->ch_count; i++) {
885 ch = &target->ch[i];
886 - for (i = 0; i < target->req_ring_size; ++i) {
887 - struct srp_request *req = &ch->req_ring[i];
888 + for (j = 0; j < target->req_ring_size; ++j) {
889 + struct srp_request *req = &ch->req_ring[j];
890
891 srp_finish_req(ch, req, scmnd->device, DID_RESET << 16);
892 }
893 diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
894 index 4e77adbfa835..c120afd9c46a 100644
895 --- a/drivers/input/mouse/elantech.c
896 +++ b/drivers/input/mouse/elantech.c
897 @@ -1176,6 +1176,8 @@ static const struct dmi_system_id elantech_dmi_has_middle_button[] = {
898 static const char * const middle_button_pnp_ids[] = {
899 "LEN2131", /* ThinkPad P52 w/ NFC */
900 "LEN2132", /* ThinkPad P52 */
901 + "LEN2133", /* ThinkPad P72 w/ NFC */
902 + "LEN2134", /* ThinkPad P72 */
903 NULL
904 };
905
906 diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
907 index 0c910a863581..16199b36a11e 100644
908 --- a/drivers/iommu/amd_iommu.c
909 +++ b/drivers/iommu/amd_iommu.c
910 @@ -2452,9 +2452,9 @@ static void __unmap_single(struct dma_ops_domain *dma_dom,
911 }
912
913 if (amd_iommu_unmap_flush) {
914 - dma_ops_free_iova(dma_dom, dma_addr, pages);
915 domain_flush_tlb(&dma_dom->domain);
916 domain_flush_complete(&dma_dom->domain);
917 + dma_ops_free_iova(dma_dom, dma_addr, pages);
918 } else {
919 queue_add(dma_dom, dma_addr, pages);
920 }
921 diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c
922 index fcc2b5746a9f..e870b09b2c84 100644
923 --- a/drivers/md/md-cluster.c
924 +++ b/drivers/md/md-cluster.c
925 @@ -302,15 +302,6 @@ static void recover_bitmaps(struct md_thread *thread)
926 while (cinfo->recovery_map) {
927 slot = fls64((u64)cinfo->recovery_map) - 1;
928
929 - /* Clear suspend_area associated with the bitmap */
930 - spin_lock_irq(&cinfo->suspend_lock);
931 - list_for_each_entry_safe(s, tmp, &cinfo->suspend_list, list)
932 - if (slot == s->slot) {
933 - list_del(&s->list);
934 - kfree(s);
935 - }
936 - spin_unlock_irq(&cinfo->suspend_lock);
937 -
938 snprintf(str, 64, "bitmap%04d", slot);
939 bm_lockres = lockres_init(mddev, str, NULL, 1);
940 if (!bm_lockres) {
941 @@ -329,6 +320,16 @@ static void recover_bitmaps(struct md_thread *thread)
942 pr_err("md-cluster: Could not copy data from bitmap %d\n", slot);
943 goto clear_bit;
944 }
945 +
946 + /* Clear suspend_area associated with the bitmap */
947 + spin_lock_irq(&cinfo->suspend_lock);
948 + list_for_each_entry_safe(s, tmp, &cinfo->suspend_list, list)
949 + if (slot == s->slot) {
950 + list_del(&s->list);
951 + kfree(s);
952 + }
953 + spin_unlock_irq(&cinfo->suspend_lock);
954 +
955 if (hi > 0) {
956 if (lo < mddev->recovery_cp)
957 mddev->recovery_cp = lo;
958 diff --git a/drivers/media/i2c/soc_camera/ov772x.c b/drivers/media/i2c/soc_camera/ov772x.c
959 index 7e68762b3a4b..fa1cb246a66a 100644
960 --- a/drivers/media/i2c/soc_camera/ov772x.c
961 +++ b/drivers/media/i2c/soc_camera/ov772x.c
962 @@ -834,7 +834,7 @@ static int ov772x_set_params(struct ov772x_priv *priv,
963 * set COM8
964 */
965 if (priv->band_filter) {
966 - ret = ov772x_mask_set(client, COM8, BNDF_ON_OFF, 1);
967 + ret = ov772x_mask_set(client, COM8, BNDF_ON_OFF, BNDF_ON_OFF);
968 if (!ret)
969 ret = ov772x_mask_set(client, BDBASE,
970 0xff, 256 - priv->band_filter);
971 diff --git a/drivers/media/platform/exynos4-is/fimc-isp-video.c b/drivers/media/platform/exynos4-is/fimc-isp-video.c
972 index 400ce0cb0c0d..e00fa03ddc3e 100644
973 --- a/drivers/media/platform/exynos4-is/fimc-isp-video.c
974 +++ b/drivers/media/platform/exynos4-is/fimc-isp-video.c
975 @@ -384,12 +384,17 @@ static void __isp_video_try_fmt(struct fimc_isp *isp,
976 struct v4l2_pix_format_mplane *pixm,
977 const struct fimc_fmt **fmt)
978 {
979 - *fmt = fimc_isp_find_format(&pixm->pixelformat, NULL, 2);
980 + const struct fimc_fmt *__fmt;
981 +
982 + __fmt = fimc_isp_find_format(&pixm->pixelformat, NULL, 2);
983 +
984 + if (fmt)
985 + *fmt = __fmt;
986
987 pixm->colorspace = V4L2_COLORSPACE_SRGB;
988 pixm->field = V4L2_FIELD_NONE;
989 - pixm->num_planes = (*fmt)->memplanes;
990 - pixm->pixelformat = (*fmt)->fourcc;
991 + pixm->num_planes = __fmt->memplanes;
992 + pixm->pixelformat = __fmt->fourcc;
993 /*
994 * TODO: double check with the docmentation these width/height
995 * constraints are correct.
996 diff --git a/drivers/media/platform/fsl-viu.c b/drivers/media/platform/fsl-viu.c
997 index ae8c6b35a357..7f0ed5a26da9 100644
998 --- a/drivers/media/platform/fsl-viu.c
999 +++ b/drivers/media/platform/fsl-viu.c
1000 @@ -1417,7 +1417,7 @@ static int viu_of_probe(struct platform_device *op)
1001 sizeof(struct viu_reg), DRV_NAME)) {
1002 dev_err(&op->dev, "Error while requesting mem region\n");
1003 ret = -EBUSY;
1004 - goto err;
1005 + goto err_irq;
1006 }
1007
1008 /* remap registers */
1009 @@ -1425,7 +1425,7 @@ static int viu_of_probe(struct platform_device *op)
1010 if (!viu_regs) {
1011 dev_err(&op->dev, "Can't map register set\n");
1012 ret = -ENOMEM;
1013 - goto err;
1014 + goto err_irq;
1015 }
1016
1017 /* Prepare our private structure */
1018 @@ -1433,7 +1433,7 @@ static int viu_of_probe(struct platform_device *op)
1019 if (!viu_dev) {
1020 dev_err(&op->dev, "Can't allocate private structure\n");
1021 ret = -ENOMEM;
1022 - goto err;
1023 + goto err_irq;
1024 }
1025
1026 viu_dev->vr = viu_regs;
1027 @@ -1449,16 +1449,21 @@ static int viu_of_probe(struct platform_device *op)
1028 ret = v4l2_device_register(viu_dev->dev, &viu_dev->v4l2_dev);
1029 if (ret < 0) {
1030 dev_err(&op->dev, "v4l2_device_register() failed: %d\n", ret);
1031 - goto err;
1032 + goto err_irq;
1033 }
1034
1035 ad = i2c_get_adapter(0);
1036 + if (!ad) {
1037 + ret = -EFAULT;
1038 + dev_err(&op->dev, "couldn't get i2c adapter\n");
1039 + goto err_v4l2;
1040 + }
1041
1042 v4l2_ctrl_handler_init(&viu_dev->hdl, 5);
1043 if (viu_dev->hdl.error) {
1044 ret = viu_dev->hdl.error;
1045 dev_err(&op->dev, "couldn't register control\n");
1046 - goto err_vdev;
1047 + goto err_i2c;
1048 }
1049 /* This control handler will inherit the control(s) from the
1050 sub-device(s). */
1051 @@ -1476,7 +1481,7 @@ static int viu_of_probe(struct platform_device *op)
1052 vdev = video_device_alloc();
1053 if (vdev == NULL) {
1054 ret = -ENOMEM;
1055 - goto err_vdev;
1056 + goto err_hdl;
1057 }
1058
1059 *vdev = viu_template;
1060 @@ -1497,7 +1502,7 @@ static int viu_of_probe(struct platform_device *op)
1061 ret = video_register_device(viu_dev->vdev, VFL_TYPE_GRABBER, -1);
1062 if (ret < 0) {
1063 video_device_release(viu_dev->vdev);
1064 - goto err_vdev;
1065 + goto err_unlock;
1066 }
1067
1068 /* enable VIU clock */
1069 @@ -1505,12 +1510,12 @@ static int viu_of_probe(struct platform_device *op)
1070 if (IS_ERR(clk)) {
1071 dev_err(&op->dev, "failed to lookup the clock!\n");
1072 ret = PTR_ERR(clk);
1073 - goto err_clk;
1074 + goto err_vdev;
1075 }
1076 ret = clk_prepare_enable(clk);
1077 if (ret) {
1078 dev_err(&op->dev, "failed to enable the clock!\n");
1079 - goto err_clk;
1080 + goto err_vdev;
1081 }
1082 viu_dev->clk = clk;
1083
1084 @@ -1521,7 +1526,7 @@ static int viu_of_probe(struct platform_device *op)
1085 if (request_irq(viu_dev->irq, viu_intr, 0, "viu", (void *)viu_dev)) {
1086 dev_err(&op->dev, "Request VIU IRQ failed.\n");
1087 ret = -ENODEV;
1088 - goto err_irq;
1089 + goto err_clk;
1090 }
1091
1092 mutex_unlock(&viu_dev->lock);
1093 @@ -1529,16 +1534,19 @@ static int viu_of_probe(struct platform_device *op)
1094 dev_info(&op->dev, "Freescale VIU Video Capture Board\n");
1095 return ret;
1096
1097 -err_irq:
1098 - clk_disable_unprepare(viu_dev->clk);
1099 err_clk:
1100 - video_unregister_device(viu_dev->vdev);
1101 + clk_disable_unprepare(viu_dev->clk);
1102 err_vdev:
1103 - v4l2_ctrl_handler_free(&viu_dev->hdl);
1104 + video_unregister_device(viu_dev->vdev);
1105 +err_unlock:
1106 mutex_unlock(&viu_dev->lock);
1107 +err_hdl:
1108 + v4l2_ctrl_handler_free(&viu_dev->hdl);
1109 +err_i2c:
1110 i2c_put_adapter(ad);
1111 +err_v4l2:
1112 v4l2_device_unregister(&viu_dev->v4l2_dev);
1113 -err:
1114 +err_irq:
1115 irq_dispose_mapping(viu_irq);
1116 return ret;
1117 }
1118 diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c
1119 index 15a86bb4e61c..1e98b4845ea1 100644
1120 --- a/drivers/media/platform/omap3isp/isp.c
1121 +++ b/drivers/media/platform/omap3isp/isp.c
1122 @@ -304,7 +304,7 @@ static struct clk *isp_xclk_src_get(struct of_phandle_args *clkspec, void *data)
1123 static int isp_xclk_init(struct isp_device *isp)
1124 {
1125 struct device_node *np = isp->dev->of_node;
1126 - struct clk_init_data init;
1127 + struct clk_init_data init = { 0 };
1128 unsigned int i;
1129
1130 for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i)
1131 diff --git a/drivers/media/platform/s3c-camif/camif-capture.c b/drivers/media/platform/s3c-camif/camif-capture.c
1132 index 5c9db0910a76..d9710b5dd375 100644
1133 --- a/drivers/media/platform/s3c-camif/camif-capture.c
1134 +++ b/drivers/media/platform/s3c-camif/camif-capture.c
1135 @@ -117,6 +117,8 @@ static int sensor_set_power(struct camif_dev *camif, int on)
1136
1137 if (camif->sensor.power_count == !on)
1138 err = v4l2_subdev_call(sensor->sd, core, s_power, on);
1139 + if (err == -ENOIOCTLCMD)
1140 + err = 0;
1141 if (!err)
1142 sensor->power_count += on ? 1 : -1;
1143
1144 diff --git a/drivers/media/usb/tm6000/tm6000-dvb.c b/drivers/media/usb/tm6000/tm6000-dvb.c
1145 index 0426b210383b..ee88ae83230c 100644
1146 --- a/drivers/media/usb/tm6000/tm6000-dvb.c
1147 +++ b/drivers/media/usb/tm6000/tm6000-dvb.c
1148 @@ -273,6 +273,11 @@ static int register_dvb(struct tm6000_core *dev)
1149
1150 ret = dvb_register_adapter(&dvb->adapter, "Trident TVMaster 6000 DVB-T",
1151 THIS_MODULE, &dev->udev->dev, adapter_nr);
1152 + if (ret < 0) {
1153 + pr_err("tm6000: couldn't register the adapter!\n");
1154 + goto err;
1155 + }
1156 +
1157 dvb->adapter.priv = dev;
1158
1159 if (dvb->frontend) {
1160 diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c
1161 index b5589d5f5da4..48503f30b3a2 100644
1162 --- a/drivers/media/usb/uvc/uvc_video.c
1163 +++ b/drivers/media/usb/uvc/uvc_video.c
1164 @@ -163,14 +163,27 @@ static void uvc_fixup_video_ctrl(struct uvc_streaming *stream,
1165 }
1166 }
1167
1168 +static size_t uvc_video_ctrl_size(struct uvc_streaming *stream)
1169 +{
1170 + /*
1171 + * Return the size of the video probe and commit controls, which depends
1172 + * on the protocol version.
1173 + */
1174 + if (stream->dev->uvc_version < 0x0110)
1175 + return 26;
1176 + else if (stream->dev->uvc_version < 0x0150)
1177 + return 34;
1178 + else
1179 + return 48;
1180 +}
1181 +
1182 static int uvc_get_video_ctrl(struct uvc_streaming *stream,
1183 struct uvc_streaming_control *ctrl, int probe, __u8 query)
1184 {
1185 + __u16 size = uvc_video_ctrl_size(stream);
1186 __u8 *data;
1187 - __u16 size;
1188 int ret;
1189
1190 - size = stream->dev->uvc_version >= 0x0110 ? 34 : 26;
1191 if ((stream->dev->quirks & UVC_QUIRK_PROBE_DEF) &&
1192 query == UVC_GET_DEF)
1193 return -EIO;
1194 @@ -225,7 +238,7 @@ static int uvc_get_video_ctrl(struct uvc_streaming *stream,
1195 ctrl->dwMaxVideoFrameSize = get_unaligned_le32(&data[18]);
1196 ctrl->dwMaxPayloadTransferSize = get_unaligned_le32(&data[22]);
1197
1198 - if (size == 34) {
1199 + if (size >= 34) {
1200 ctrl->dwClockFrequency = get_unaligned_le32(&data[26]);
1201 ctrl->bmFramingInfo = data[30];
1202 ctrl->bPreferedVersion = data[31];
1203 @@ -254,11 +267,10 @@ out:
1204 static int uvc_set_video_ctrl(struct uvc_streaming *stream,
1205 struct uvc_streaming_control *ctrl, int probe)
1206 {
1207 + __u16 size = uvc_video_ctrl_size(stream);
1208 __u8 *data;
1209 - __u16 size;
1210 int ret;
1211
1212 - size = stream->dev->uvc_version >= 0x0110 ? 34 : 26;
1213 data = kzalloc(size, GFP_KERNEL);
1214 if (data == NULL)
1215 return -ENOMEM;
1216 @@ -275,7 +287,7 @@ static int uvc_set_video_ctrl(struct uvc_streaming *stream,
1217 put_unaligned_le32(ctrl->dwMaxVideoFrameSize, &data[18]);
1218 put_unaligned_le32(ctrl->dwMaxPayloadTransferSize, &data[22]);
1219
1220 - if (size == 34) {
1221 + if (size >= 34) {
1222 put_unaligned_le32(ctrl->dwClockFrequency, &data[26]);
1223 data[30] = ctrl->bmFramingInfo;
1224 data[31] = ctrl->bPreferedVersion;
1225 diff --git a/drivers/media/v4l2-core/v4l2-event.c b/drivers/media/v4l2-core/v4l2-event.c
1226 index 8d3171c6bee8..567d86835f00 100644
1227 --- a/drivers/media/v4l2-core/v4l2-event.c
1228 +++ b/drivers/media/v4l2-core/v4l2-event.c
1229 @@ -119,14 +119,6 @@ static void __v4l2_event_queue_fh(struct v4l2_fh *fh, const struct v4l2_event *e
1230 if (sev == NULL)
1231 return;
1232
1233 - /*
1234 - * If the event has been added to the fh->subscribed list, but its
1235 - * add op has not completed yet elems will be 0, treat this as
1236 - * not being subscribed.
1237 - */
1238 - if (!sev->elems)
1239 - return;
1240 -
1241 /* Increase event sequence number on fh. */
1242 fh->sequence++;
1243
1244 @@ -212,6 +204,7 @@ int v4l2_event_subscribe(struct v4l2_fh *fh,
1245 struct v4l2_subscribed_event *sev, *found_ev;
1246 unsigned long flags;
1247 unsigned i;
1248 + int ret = 0;
1249
1250 if (sub->type == V4L2_EVENT_ALL)
1251 return -EINVAL;
1252 @@ -229,31 +222,36 @@ int v4l2_event_subscribe(struct v4l2_fh *fh,
1253 sev->flags = sub->flags;
1254 sev->fh = fh;
1255 sev->ops = ops;
1256 + sev->elems = elems;
1257 +
1258 + mutex_lock(&fh->subscribe_lock);
1259
1260 spin_lock_irqsave(&fh->vdev->fh_lock, flags);
1261 found_ev = v4l2_event_subscribed(fh, sub->type, sub->id);
1262 - if (!found_ev)
1263 - list_add(&sev->list, &fh->subscribed);
1264 spin_unlock_irqrestore(&fh->vdev->fh_lock, flags);
1265
1266 if (found_ev) {
1267 + /* Already listening */
1268 kfree(sev);
1269 - return 0; /* Already listening */
1270 + goto out_unlock;
1271 }
1272
1273 if (sev->ops && sev->ops->add) {
1274 - int ret = sev->ops->add(sev, elems);
1275 + ret = sev->ops->add(sev, elems);
1276 if (ret) {
1277 - sev->ops = NULL;
1278 - v4l2_event_unsubscribe(fh, sub);
1279 - return ret;
1280 + kfree(sev);
1281 + goto out_unlock;
1282 }
1283 }
1284
1285 - /* Mark as ready for use */
1286 - sev->elems = elems;
1287 + spin_lock_irqsave(&fh->vdev->fh_lock, flags);
1288 + list_add(&sev->list, &fh->subscribed);
1289 + spin_unlock_irqrestore(&fh->vdev->fh_lock, flags);
1290
1291 - return 0;
1292 +out_unlock:
1293 + mutex_unlock(&fh->subscribe_lock);
1294 +
1295 + return ret;
1296 }
1297 EXPORT_SYMBOL_GPL(v4l2_event_subscribe);
1298
1299 @@ -292,6 +290,8 @@ int v4l2_event_unsubscribe(struct v4l2_fh *fh,
1300 return 0;
1301 }
1302
1303 + mutex_lock(&fh->subscribe_lock);
1304 +
1305 spin_lock_irqsave(&fh->vdev->fh_lock, flags);
1306
1307 sev = v4l2_event_subscribed(fh, sub->type, sub->id);
1308 @@ -309,6 +309,8 @@ int v4l2_event_unsubscribe(struct v4l2_fh *fh,
1309 if (sev && sev->ops && sev->ops->del)
1310 sev->ops->del(sev);
1311
1312 + mutex_unlock(&fh->subscribe_lock);
1313 +
1314 kfree(sev);
1315
1316 return 0;
1317 diff --git a/drivers/media/v4l2-core/v4l2-fh.c b/drivers/media/v4l2-core/v4l2-fh.c
1318 index c183f0996fa1..0c5e69070586 100644
1319 --- a/drivers/media/v4l2-core/v4l2-fh.c
1320 +++ b/drivers/media/v4l2-core/v4l2-fh.c
1321 @@ -50,6 +50,7 @@ void v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev)
1322 INIT_LIST_HEAD(&fh->available);
1323 INIT_LIST_HEAD(&fh->subscribed);
1324 fh->sequence = -1;
1325 + mutex_init(&fh->subscribe_lock);
1326 }
1327 EXPORT_SYMBOL_GPL(v4l2_fh_init);
1328
1329 @@ -95,6 +96,7 @@ void v4l2_fh_exit(struct v4l2_fh *fh)
1330 return;
1331 v4l_disable_media_source(fh->vdev);
1332 v4l2_event_unsubscribe_all(fh);
1333 + mutex_destroy(&fh->subscribe_lock);
1334 fh->vdev = NULL;
1335 }
1336 EXPORT_SYMBOL_GPL(v4l2_fh_exit);
1337 diff --git a/drivers/misc/tsl2550.c b/drivers/misc/tsl2550.c
1338 index 87a13374fdc0..eb5761067310 100644
1339 --- a/drivers/misc/tsl2550.c
1340 +++ b/drivers/misc/tsl2550.c
1341 @@ -177,7 +177,7 @@ static int tsl2550_calculate_lux(u8 ch0, u8 ch1)
1342 } else
1343 lux = 0;
1344 else
1345 - return -EAGAIN;
1346 + return 0;
1347
1348 /* LUX range check */
1349 return lux > TSL2550_MAX_LUX ? TSL2550_MAX_LUX : lux;
1350 diff --git a/drivers/misc/vmw_vmci/vmci_queue_pair.c b/drivers/misc/vmw_vmci/vmci_queue_pair.c
1351 index f735ab4ba84e..5927db046a87 100644
1352 --- a/drivers/misc/vmw_vmci/vmci_queue_pair.c
1353 +++ b/drivers/misc/vmw_vmci/vmci_queue_pair.c
1354 @@ -755,7 +755,7 @@ static int qp_host_get_user_memory(u64 produce_uva,
1355 retval = get_user_pages_fast((uintptr_t) produce_uva,
1356 produce_q->kernel_if->num_pages, 1,
1357 produce_q->kernel_if->u.h.header_page);
1358 - if (retval < produce_q->kernel_if->num_pages) {
1359 + if (retval < (int)produce_q->kernel_if->num_pages) {
1360 pr_debug("get_user_pages_fast(produce) failed (retval=%d)",
1361 retval);
1362 qp_release_pages(produce_q->kernel_if->u.h.header_page,
1363 @@ -767,7 +767,7 @@ static int qp_host_get_user_memory(u64 produce_uva,
1364 retval = get_user_pages_fast((uintptr_t) consume_uva,
1365 consume_q->kernel_if->num_pages, 1,
1366 consume_q->kernel_if->u.h.header_page);
1367 - if (retval < consume_q->kernel_if->num_pages) {
1368 + if (retval < (int)consume_q->kernel_if->num_pages) {
1369 pr_debug("get_user_pages_fast(consume) failed (retval=%d)",
1370 retval);
1371 qp_release_pages(consume_q->kernel_if->u.h.header_page,
1372 diff --git a/drivers/net/ethernet/hisilicon/hns/hnae.h b/drivers/net/ethernet/hisilicon/hns/hnae.h
1373 index e093cbf26c8c..f9d68453c81d 100644
1374 --- a/drivers/net/ethernet/hisilicon/hns/hnae.h
1375 +++ b/drivers/net/ethernet/hisilicon/hns/hnae.h
1376 @@ -213,10 +213,10 @@ struct hnae_desc_cb {
1377
1378 /* priv data for the desc, e.g. skb when use with ip stack*/
1379 void *priv;
1380 - u16 page_offset;
1381 - u16 reuse_flag;
1382 + u32 page_offset;
1383 + u32 length; /* length of the buffer */
1384
1385 - u16 length; /* length of the buffer */
1386 + u16 reuse_flag;
1387
1388 /* desc type, used by the ring user to mark the type of the priv data */
1389 u16 type;
1390 diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
1391 index 111e1aab7d83..8a2a07e21324 100644
1392 --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
1393 +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
1394 @@ -529,7 +529,7 @@ static void hns_nic_reuse_page(struct sk_buff *skb, int i,
1395 }
1396
1397 skb_add_rx_frag(skb, i, desc_cb->priv, desc_cb->page_offset + pull_len,
1398 - size - pull_len, truesize - pull_len);
1399 + size - pull_len, truesize);
1400
1401 /* avoid re-using remote pages,flag default unreuse */
1402 if (unlikely(page_to_nid(desc_cb->priv) != numa_node_id()))
1403 diff --git a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
1404 index 975eeb885ca2..e84574b1eae7 100644
1405 --- a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
1406 +++ b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
1407 @@ -645,14 +645,14 @@ static int e1000_set_ringparam(struct net_device *netdev,
1408 adapter->tx_ring = tx_old;
1409 e1000_free_all_rx_resources(adapter);
1410 e1000_free_all_tx_resources(adapter);
1411 - kfree(tx_old);
1412 - kfree(rx_old);
1413 adapter->rx_ring = rxdr;
1414 adapter->tx_ring = txdr;
1415 err = e1000_up(adapter);
1416 if (err)
1417 goto err_setup;
1418 }
1419 + kfree(tx_old);
1420 + kfree(rx_old);
1421
1422 clear_bit(__E1000_RESETTING, &adapter->flags);
1423 return 0;
1424 @@ -665,7 +665,8 @@ err_setup_rx:
1425 err_alloc_rx:
1426 kfree(txdr);
1427 err_alloc_tx:
1428 - e1000_up(adapter);
1429 + if (netif_running(adapter->netdev))
1430 + e1000_up(adapter);
1431 err_setup:
1432 clear_bit(__E1000_RESETTING, &adapter->flags);
1433 return err;
1434 diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.c b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
1435 index eaa242df4131..e175fcd73739 100644
1436 --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.c
1437 +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
1438 @@ -97,18 +97,57 @@ int qed_mcp_free(struct qed_hwfn *p_hwfn)
1439 return 0;
1440 }
1441
1442 +/* Maximum of 1 sec to wait for the SHMEM ready indication */
1443 +#define QED_MCP_SHMEM_RDY_MAX_RETRIES 20
1444 +#define QED_MCP_SHMEM_RDY_ITER_MS 50
1445 +
1446 static int qed_load_mcp_offsets(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
1447 {
1448 struct qed_mcp_info *p_info = p_hwfn->mcp_info;
1449 + u8 cnt = QED_MCP_SHMEM_RDY_MAX_RETRIES;
1450 + u8 msec = QED_MCP_SHMEM_RDY_ITER_MS;
1451 u32 drv_mb_offsize, mfw_mb_offsize;
1452 u32 mcp_pf_id = MCP_PF_ID(p_hwfn);
1453
1454 p_info->public_base = qed_rd(p_hwfn, p_ptt, MISC_REG_SHARED_MEM_ADDR);
1455 - if (!p_info->public_base)
1456 - return 0;
1457 + if (!p_info->public_base) {
1458 + DP_NOTICE(p_hwfn,
1459 + "The address of the MCP scratch-pad is not configured\n");
1460 + return -EINVAL;
1461 + }
1462
1463 p_info->public_base |= GRCBASE_MCP;
1464
1465 + /* Get the MFW MB address and number of supported messages */
1466 + mfw_mb_offsize = qed_rd(p_hwfn, p_ptt,
1467 + SECTION_OFFSIZE_ADDR(p_info->public_base,
1468 + PUBLIC_MFW_MB));
1469 + p_info->mfw_mb_addr = SECTION_ADDR(mfw_mb_offsize, mcp_pf_id);
1470 + p_info->mfw_mb_length = (u16)qed_rd(p_hwfn, p_ptt,
1471 + p_info->mfw_mb_addr +
1472 + offsetof(struct public_mfw_mb,
1473 + sup_msgs));
1474 +
1475 + /* The driver can notify that there was an MCP reset, and might read the
1476 + * SHMEM values before the MFW has completed initializing them.
1477 + * To avoid this, the "sup_msgs" field in the MFW mailbox is used as a
1478 + * data ready indication.
1479 + */
1480 + while (!p_info->mfw_mb_length && --cnt) {
1481 + msleep(msec);
1482 + p_info->mfw_mb_length =
1483 + (u16)qed_rd(p_hwfn, p_ptt,
1484 + p_info->mfw_mb_addr +
1485 + offsetof(struct public_mfw_mb, sup_msgs));
1486 + }
1487 +
1488 + if (!cnt) {
1489 + DP_NOTICE(p_hwfn,
1490 + "Failed to get the SHMEM ready notification after %d msec\n",
1491 + QED_MCP_SHMEM_RDY_MAX_RETRIES * msec);
1492 + return -EBUSY;
1493 + }
1494 +
1495 /* Calculate the driver and MFW mailbox address */
1496 drv_mb_offsize = qed_rd(p_hwfn, p_ptt,
1497 SECTION_OFFSIZE_ADDR(p_info->public_base,
1498 @@ -118,13 +157,6 @@ static int qed_load_mcp_offsets(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
1499 "drv_mb_offsiz = 0x%x, drv_mb_addr = 0x%x mcp_pf_id = 0x%x\n",
1500 drv_mb_offsize, p_info->drv_mb_addr, mcp_pf_id);
1501
1502 - /* Set the MFW MB address */
1503 - mfw_mb_offsize = qed_rd(p_hwfn, p_ptt,
1504 - SECTION_OFFSIZE_ADDR(p_info->public_base,
1505 - PUBLIC_MFW_MB));
1506 - p_info->mfw_mb_addr = SECTION_ADDR(mfw_mb_offsize, mcp_pf_id);
1507 - p_info->mfw_mb_length = (u16)qed_rd(p_hwfn, p_ptt, p_info->mfw_mb_addr);
1508 -
1509 /* Get the current driver mailbox sequence before sending
1510 * the first command
1511 */
1512 @@ -1198,31 +1230,61 @@ qed_mcp_send_drv_version(struct qed_hwfn *p_hwfn,
1513 return rc;
1514 }
1515
1516 +/* A maximal 100 msec waiting time for the MCP to halt */
1517 +#define QED_MCP_HALT_SLEEP_MS 10
1518 +#define QED_MCP_HALT_MAX_RETRIES 10
1519 +
1520 int qed_mcp_halt(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
1521 {
1522 - u32 resp = 0, param = 0;
1523 + u32 resp = 0, param = 0, cpu_state, cnt = 0;
1524 int rc;
1525
1526 rc = qed_mcp_cmd(p_hwfn, p_ptt, DRV_MSG_CODE_MCP_HALT, 0, &resp,
1527 &param);
1528 - if (rc)
1529 + if (rc) {
1530 DP_ERR(p_hwfn, "MCP response failure, aborting\n");
1531 + return rc;
1532 + }
1533
1534 - return rc;
1535 + do {
1536 + msleep(QED_MCP_HALT_SLEEP_MS);
1537 + cpu_state = qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_STATE);
1538 + if (cpu_state & MCP_REG_CPU_STATE_SOFT_HALTED)
1539 + break;
1540 + } while (++cnt < QED_MCP_HALT_MAX_RETRIES);
1541 +
1542 + if (cnt == QED_MCP_HALT_MAX_RETRIES) {
1543 + DP_NOTICE(p_hwfn,
1544 + "Failed to halt the MCP [CPU_MODE = 0x%08x, CPU_STATE = 0x%08x]\n",
1545 + qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_MODE), cpu_state);
1546 + return -EBUSY;
1547 + }
1548 +
1549 + return 0;
1550 }
1551
1552 +#define QED_MCP_RESUME_SLEEP_MS 10
1553 +
1554 int qed_mcp_resume(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
1555 {
1556 - u32 value, cpu_mode;
1557 + u32 cpu_mode, cpu_state;
1558
1559 qed_wr(p_hwfn, p_ptt, MCP_REG_CPU_STATE, 0xffffffff);
1560
1561 - value = qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_MODE);
1562 - value &= ~MCP_REG_CPU_MODE_SOFT_HALT;
1563 - qed_wr(p_hwfn, p_ptt, MCP_REG_CPU_MODE, value);
1564 cpu_mode = qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_MODE);
1565 + cpu_mode &= ~MCP_REG_CPU_MODE_SOFT_HALT;
1566 + qed_wr(p_hwfn, p_ptt, MCP_REG_CPU_MODE, cpu_mode);
1567 + msleep(QED_MCP_RESUME_SLEEP_MS);
1568 + cpu_state = qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_STATE);
1569
1570 - return (cpu_mode & MCP_REG_CPU_MODE_SOFT_HALT) ? -EAGAIN : 0;
1571 + if (cpu_state & MCP_REG_CPU_STATE_SOFT_HALTED) {
1572 + DP_NOTICE(p_hwfn,
1573 + "Failed to resume the MCP [CPU_MODE = 0x%08x, CPU_STATE = 0x%08x]\n",
1574 + cpu_mode, cpu_state);
1575 + return -EBUSY;
1576 + }
1577 +
1578 + return 0;
1579 }
1580
1581 int qed_mcp_set_led(struct qed_hwfn *p_hwfn,
1582 diff --git a/drivers/net/ethernet/qlogic/qed/qed_reg_addr.h b/drivers/net/ethernet/qlogic/qed/qed_reg_addr.h
1583 index b414a0542177..56be1d6adfcc 100644
1584 --- a/drivers/net/ethernet/qlogic/qed/qed_reg_addr.h
1585 +++ b/drivers/net/ethernet/qlogic/qed/qed_reg_addr.h
1586 @@ -510,6 +510,7 @@
1587 0
1588 #define MCP_REG_CPU_STATE \
1589 0xe05004UL
1590 +#define MCP_REG_CPU_STATE_SOFT_HALTED (0x1UL << 10)
1591 #define MCP_REG_CPU_EVENT_MASK \
1592 0xe05008UL
1593 #define PGLUE_B_REG_PF_BAR0_SIZE \
1594 diff --git a/drivers/net/phy/xilinx_gmii2rgmii.c b/drivers/net/phy/xilinx_gmii2rgmii.c
1595 index 2e5150b0b8d5..7a14e8170e82 100644
1596 --- a/drivers/net/phy/xilinx_gmii2rgmii.c
1597 +++ b/drivers/net/phy/xilinx_gmii2rgmii.c
1598 @@ -40,8 +40,11 @@ static int xgmiitorgmii_read_status(struct phy_device *phydev)
1599 {
1600 struct gmii2rgmii *priv = phydev->priv;
1601 u16 val = 0;
1602 + int err;
1603
1604 - priv->phy_drv->read_status(phydev);
1605 + err = priv->phy_drv->read_status(phydev);
1606 + if (err < 0)
1607 + return err;
1608
1609 val = mdiobus_read(phydev->mdio.bus, priv->addr, XILINX_GMII2RGMII_REG);
1610 val &= ~XILINX_GMII2RGMII_SPEED_MASK;
1611 @@ -81,6 +84,11 @@ static int xgmiitorgmii_probe(struct mdio_device *mdiodev)
1612 return -EPROBE_DEFER;
1613 }
1614
1615 + if (!priv->phy_dev->drv) {
1616 + dev_info(dev, "Attached phy not ready\n");
1617 + return -EPROBE_DEFER;
1618 + }
1619 +
1620 priv->addr = mdiodev->addr;
1621 priv->phy_drv = priv->phy_dev->drv;
1622 memcpy(&priv->conv_phy_drv, priv->phy_dev->drv,
1623 diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
1624 index ba1fe61e6ea6..a3c218047597 100644
1625 --- a/drivers/net/wireless/ath/ath10k/htt_rx.c
1626 +++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
1627 @@ -214,11 +214,12 @@ int ath10k_htt_rx_ring_refill(struct ath10k *ar)
1628 spin_lock_bh(&htt->rx_ring.lock);
1629 ret = ath10k_htt_rx_ring_fill_n(htt, (htt->rx_ring.fill_level -
1630 htt->rx_ring.fill_cnt));
1631 - spin_unlock_bh(&htt->rx_ring.lock);
1632
1633 if (ret)
1634 ath10k_htt_rx_ring_free(htt);
1635
1636 + spin_unlock_bh(&htt->rx_ring.lock);
1637 +
1638 return ret;
1639 }
1640
1641 @@ -230,7 +231,9 @@ void ath10k_htt_rx_free(struct ath10k_htt *htt)
1642 skb_queue_purge(&htt->rx_in_ord_compl_q);
1643 skb_queue_purge(&htt->tx_fetch_ind_q);
1644
1645 + spin_lock_bh(&htt->rx_ring.lock);
1646 ath10k_htt_rx_ring_free(htt);
1647 + spin_unlock_bh(&htt->rx_ring.lock);
1648
1649 dma_free_coherent(htt->ar->dev,
1650 (htt->rx_ring.size *
1651 diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c
1652 index 15b2350d9f45..c9f8847dc123 100644
1653 --- a/drivers/net/wireless/rndis_wlan.c
1654 +++ b/drivers/net/wireless/rndis_wlan.c
1655 @@ -2921,6 +2921,8 @@ static void rndis_wlan_auth_indication(struct usbnet *usbdev,
1656
1657 while (buflen >= sizeof(*auth_req)) {
1658 auth_req = (void *)buf;
1659 + if (buflen < le32_to_cpu(auth_req->length))
1660 + return;
1661 type = "unknown";
1662 flags = le32_to_cpu(auth_req->flags);
1663 pairwise_error = false;
1664 diff --git a/drivers/net/wireless/ti/wlcore/cmd.c b/drivers/net/wireless/ti/wlcore/cmd.c
1665 index 7f4da727bb7b..96f83f09b8c5 100644
1666 --- a/drivers/net/wireless/ti/wlcore/cmd.c
1667 +++ b/drivers/net/wireless/ti/wlcore/cmd.c
1668 @@ -35,6 +35,7 @@
1669 #include "wl12xx_80211.h"
1670 #include "cmd.h"
1671 #include "event.h"
1672 +#include "ps.h"
1673 #include "tx.h"
1674 #include "hw_ops.h"
1675
1676 @@ -191,6 +192,10 @@ int wlcore_cmd_wait_for_event_or_timeout(struct wl1271 *wl,
1677
1678 timeout_time = jiffies + msecs_to_jiffies(WL1271_EVENT_TIMEOUT);
1679
1680 + ret = wl1271_ps_elp_wakeup(wl);
1681 + if (ret < 0)
1682 + return ret;
1683 +
1684 do {
1685 if (time_after(jiffies, timeout_time)) {
1686 wl1271_debug(DEBUG_CMD, "timeout waiting for event %d",
1687 @@ -222,6 +227,7 @@ int wlcore_cmd_wait_for_event_or_timeout(struct wl1271 *wl,
1688 } while (!event);
1689
1690 out:
1691 + wl1271_ps_elp_sleep(wl);
1692 kfree(events_vector);
1693 return ret;
1694 }
1695 diff --git a/drivers/power/reset/vexpress-poweroff.c b/drivers/power/reset/vexpress-poweroff.c
1696 index 102f95a09460..e9e749f87517 100644
1697 --- a/drivers/power/reset/vexpress-poweroff.c
1698 +++ b/drivers/power/reset/vexpress-poweroff.c
1699 @@ -35,6 +35,7 @@ static void vexpress_reset_do(struct device *dev, const char *what)
1700 }
1701
1702 static struct device *vexpress_power_off_device;
1703 +static atomic_t vexpress_restart_nb_refcnt = ATOMIC_INIT(0);
1704
1705 static void vexpress_power_off(void)
1706 {
1707 @@ -99,10 +100,13 @@ static int _vexpress_register_restart_handler(struct device *dev)
1708 int err;
1709
1710 vexpress_restart_device = dev;
1711 - err = register_restart_handler(&vexpress_restart_nb);
1712 - if (err) {
1713 - dev_err(dev, "cannot register restart handler (err=%d)\n", err);
1714 - return err;
1715 + if (atomic_inc_return(&vexpress_restart_nb_refcnt) == 1) {
1716 + err = register_restart_handler(&vexpress_restart_nb);
1717 + if (err) {
1718 + dev_err(dev, "cannot register restart handler (err=%d)\n", err);
1719 + atomic_dec(&vexpress_restart_nb_refcnt);
1720 + return err;
1721 + }
1722 }
1723 device_create_file(dev, &dev_attr_active);
1724
1725 diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c
1726 index a74d8ca383a1..9e05ae0430a9 100644
1727 --- a/drivers/power/supply/power_supply_core.c
1728 +++ b/drivers/power/supply/power_supply_core.c
1729 @@ -14,6 +14,7 @@
1730 #include <linux/types.h>
1731 #include <linux/init.h>
1732 #include <linux/slab.h>
1733 +#include <linux/delay.h>
1734 #include <linux/device.h>
1735 #include <linux/notifier.h>
1736 #include <linux/err.h>
1737 @@ -138,8 +139,13 @@ static void power_supply_deferred_register_work(struct work_struct *work)
1738 struct power_supply *psy = container_of(work, struct power_supply,
1739 deferred_register_work.work);
1740
1741 - if (psy->dev.parent)
1742 - mutex_lock(&psy->dev.parent->mutex);
1743 + if (psy->dev.parent) {
1744 + while (!mutex_trylock(&psy->dev.parent->mutex)) {
1745 + if (psy->removing)
1746 + return;
1747 + msleep(10);
1748 + }
1749 + }
1750
1751 power_supply_changed(psy);
1752
1753 @@ -944,6 +950,7 @@ EXPORT_SYMBOL_GPL(devm_power_supply_register_no_ws);
1754 void power_supply_unregister(struct power_supply *psy)
1755 {
1756 WARN_ON(atomic_dec_return(&psy->use_cnt));
1757 + psy->removing = true;
1758 cancel_work_sync(&psy->changed_work);
1759 cancel_delayed_work_sync(&psy->deferred_register_work);
1760 sysfs_remove_link(&psy->dev.kobj, "powers");
1761 diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
1762 index 178fcda12cec..18d57c0efe9f 100644
1763 --- a/drivers/regulator/core.c
1764 +++ b/drivers/regulator/core.c
1765 @@ -4054,13 +4054,13 @@ regulator_register(const struct regulator_desc *regulator_desc,
1766 !rdev->desc->fixed_uV)
1767 rdev->is_switch = true;
1768
1769 + dev_set_drvdata(&rdev->dev, rdev);
1770 ret = device_register(&rdev->dev);
1771 if (ret != 0) {
1772 put_device(&rdev->dev);
1773 goto unset_supplies;
1774 }
1775
1776 - dev_set_drvdata(&rdev->dev, rdev);
1777 rdev_init_debugfs(rdev);
1778
1779 /* try to resolve regulators supply since a new one was registered */
1780 diff --git a/drivers/scsi/bnx2i/bnx2i_hwi.c b/drivers/scsi/bnx2i/bnx2i_hwi.c
1781 index 42921dbba927..4ca10501647b 100644
1782 --- a/drivers/scsi/bnx2i/bnx2i_hwi.c
1783 +++ b/drivers/scsi/bnx2i/bnx2i_hwi.c
1784 @@ -2742,6 +2742,8 @@ int bnx2i_map_ep_dbell_regs(struct bnx2i_endpoint *ep)
1785 BNX2X_DOORBELL_PCI_BAR);
1786 reg_off = (1 << BNX2X_DB_SHIFT) * (cid_num & 0x1FFFF);
1787 ep->qp.ctx_base = ioremap_nocache(reg_base + reg_off, 4);
1788 + if (!ep->qp.ctx_base)
1789 + return -ENOMEM;
1790 goto arm_cq;
1791 }
1792
1793 diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
1794 index d9534ee6ef52..e1730227b448 100644
1795 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c
1796 +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
1797 @@ -93,7 +93,7 @@ static int max_requests = IBMVSCSI_MAX_REQUESTS_DEFAULT;
1798 static int max_events = IBMVSCSI_MAX_REQUESTS_DEFAULT + 2;
1799 static int fast_fail = 1;
1800 static int client_reserve = 1;
1801 -static char partition_name[97] = "UNKNOWN";
1802 +static char partition_name[96] = "UNKNOWN";
1803 static unsigned int partition_number = -1;
1804
1805 static struct scsi_transport_template *ibmvscsi_transport_template;
1806 @@ -259,7 +259,7 @@ static void gather_partition_info(void)
1807
1808 ppartition_name = of_get_property(of_root, "ibm,partition-name", NULL);
1809 if (ppartition_name)
1810 - strncpy(partition_name, ppartition_name,
1811 + strlcpy(partition_name, ppartition_name,
1812 sizeof(partition_name));
1813 p_number_ptr = of_get_property(of_root, "ibm,partition-no", NULL);
1814 if (p_number_ptr)
1815 diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
1816 index 35cbd36f8d3b..090fdcdd15c9 100644
1817 --- a/drivers/scsi/megaraid/megaraid_sas_base.c
1818 +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
1819 @@ -6193,6 +6193,9 @@ megasas_resume(struct pci_dev *pdev)
1820 goto fail_init_mfi;
1821 }
1822
1823 + if (megasas_get_ctrl_info(instance) != DCMD_SUCCESS)
1824 + goto fail_init_mfi;
1825 +
1826 tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet,
1827 (unsigned long)instance);
1828
1829 diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c
1830 index a816f07e168e..093c9cf92bfd 100644
1831 --- a/drivers/spi/spi-rspi.c
1832 +++ b/drivers/spi/spi-rspi.c
1833 @@ -597,11 +597,13 @@ static int rspi_dma_transfer(struct rspi_data *rspi, struct sg_table *tx,
1834
1835 ret = wait_event_interruptible_timeout(rspi->wait,
1836 rspi->dma_callbacked, HZ);
1837 - if (ret > 0 && rspi->dma_callbacked)
1838 + if (ret > 0 && rspi->dma_callbacked) {
1839 ret = 0;
1840 - else if (!ret) {
1841 - dev_err(&rspi->master->dev, "DMA timeout\n");
1842 - ret = -ETIMEDOUT;
1843 + } else {
1844 + if (!ret) {
1845 + dev_err(&rspi->master->dev, "DMA timeout\n");
1846 + ret = -ETIMEDOUT;
1847 + }
1848 if (tx)
1849 dmaengine_terminate_all(rspi->master->dma_tx);
1850 if (rx)
1851 @@ -1313,12 +1315,36 @@ static const struct platform_device_id spi_driver_ids[] = {
1852
1853 MODULE_DEVICE_TABLE(platform, spi_driver_ids);
1854
1855 +#ifdef CONFIG_PM_SLEEP
1856 +static int rspi_suspend(struct device *dev)
1857 +{
1858 + struct platform_device *pdev = to_platform_device(dev);
1859 + struct rspi_data *rspi = platform_get_drvdata(pdev);
1860 +
1861 + return spi_master_suspend(rspi->master);
1862 +}
1863 +
1864 +static int rspi_resume(struct device *dev)
1865 +{
1866 + struct platform_device *pdev = to_platform_device(dev);
1867 + struct rspi_data *rspi = platform_get_drvdata(pdev);
1868 +
1869 + return spi_master_resume(rspi->master);
1870 +}
1871 +
1872 +static SIMPLE_DEV_PM_OPS(rspi_pm_ops, rspi_suspend, rspi_resume);
1873 +#define DEV_PM_OPS &rspi_pm_ops
1874 +#else
1875 +#define DEV_PM_OPS NULL
1876 +#endif /* CONFIG_PM_SLEEP */
1877 +
1878 static struct platform_driver rspi_driver = {
1879 .probe = rspi_probe,
1880 .remove = rspi_remove,
1881 .id_table = spi_driver_ids,
1882 .driver = {
1883 .name = "renesas_spi",
1884 + .pm = DEV_PM_OPS,
1885 .of_match_table = of_match_ptr(rspi_of_match),
1886 },
1887 };
1888 diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c
1889 index cbf02ebb30a2..711ea523b325 100644
1890 --- a/drivers/spi/spi-sh-msiof.c
1891 +++ b/drivers/spi/spi-sh-msiof.c
1892 @@ -373,7 +373,8 @@ static void sh_msiof_spi_set_mode_regs(struct sh_msiof_spi_priv *p,
1893
1894 static void sh_msiof_reset_str(struct sh_msiof_spi_priv *p)
1895 {
1896 - sh_msiof_write(p, STR, sh_msiof_read(p, STR));
1897 + sh_msiof_write(p, STR,
1898 + sh_msiof_read(p, STR) & ~(STR_TDREQ | STR_RDREQ));
1899 }
1900
1901 static void sh_msiof_spi_write_fifo_8(struct sh_msiof_spi_priv *p,
1902 @@ -1275,12 +1276,37 @@ static const struct platform_device_id spi_driver_ids[] = {
1903 };
1904 MODULE_DEVICE_TABLE(platform, spi_driver_ids);
1905
1906 +#ifdef CONFIG_PM_SLEEP
1907 +static int sh_msiof_spi_suspend(struct device *dev)
1908 +{
1909 + struct platform_device *pdev = to_platform_device(dev);
1910 + struct sh_msiof_spi_priv *p = platform_get_drvdata(pdev);
1911 +
1912 + return spi_master_suspend(p->master);
1913 +}
1914 +
1915 +static int sh_msiof_spi_resume(struct device *dev)
1916 +{
1917 + struct platform_device *pdev = to_platform_device(dev);
1918 + struct sh_msiof_spi_priv *p = platform_get_drvdata(pdev);
1919 +
1920 + return spi_master_resume(p->master);
1921 +}
1922 +
1923 +static SIMPLE_DEV_PM_OPS(sh_msiof_spi_pm_ops, sh_msiof_spi_suspend,
1924 + sh_msiof_spi_resume);
1925 +#define DEV_PM_OPS &sh_msiof_spi_pm_ops
1926 +#else
1927 +#define DEV_PM_OPS NULL
1928 +#endif /* CONFIG_PM_SLEEP */
1929 +
1930 static struct platform_driver sh_msiof_spi_drv = {
1931 .probe = sh_msiof_spi_probe,
1932 .remove = sh_msiof_spi_remove,
1933 .id_table = spi_driver_ids,
1934 .driver = {
1935 .name = "spi_sh_msiof",
1936 + .pm = DEV_PM_OPS,
1937 .of_match_table = of_match_ptr(sh_msiof_match),
1938 },
1939 };
1940 diff --git a/drivers/spi/spi-tegra20-slink.c b/drivers/spi/spi-tegra20-slink.c
1941 index 85c91f58b42f..af2880d0c112 100644
1942 --- a/drivers/spi/spi-tegra20-slink.c
1943 +++ b/drivers/spi/spi-tegra20-slink.c
1944 @@ -1063,6 +1063,24 @@ static int tegra_slink_probe(struct platform_device *pdev)
1945 goto exit_free_master;
1946 }
1947
1948 + /* disabled clock may cause interrupt storm upon request */
1949 + tspi->clk = devm_clk_get(&pdev->dev, NULL);
1950 + if (IS_ERR(tspi->clk)) {
1951 + ret = PTR_ERR(tspi->clk);
1952 + dev_err(&pdev->dev, "Can not get clock %d\n", ret);
1953 + goto exit_free_master;
1954 + }
1955 + ret = clk_prepare(tspi->clk);
1956 + if (ret < 0) {
1957 + dev_err(&pdev->dev, "Clock prepare failed %d\n", ret);
1958 + goto exit_free_master;
1959 + }
1960 + ret = clk_enable(tspi->clk);
1961 + if (ret < 0) {
1962 + dev_err(&pdev->dev, "Clock enable failed %d\n", ret);
1963 + goto exit_free_master;
1964 + }
1965 +
1966 spi_irq = platform_get_irq(pdev, 0);
1967 tspi->irq = spi_irq;
1968 ret = request_threaded_irq(tspi->irq, tegra_slink_isr,
1969 @@ -1071,14 +1089,7 @@ static int tegra_slink_probe(struct platform_device *pdev)
1970 if (ret < 0) {
1971 dev_err(&pdev->dev, "Failed to register ISR for IRQ %d\n",
1972 tspi->irq);
1973 - goto exit_free_master;
1974 - }
1975 -
1976 - tspi->clk = devm_clk_get(&pdev->dev, NULL);
1977 - if (IS_ERR(tspi->clk)) {
1978 - dev_err(&pdev->dev, "can not get clock\n");
1979 - ret = PTR_ERR(tspi->clk);
1980 - goto exit_free_irq;
1981 + goto exit_clk_disable;
1982 }
1983
1984 tspi->rst = devm_reset_control_get(&pdev->dev, "spi");
1985 @@ -1138,6 +1149,8 @@ exit_rx_dma_free:
1986 tegra_slink_deinit_dma_param(tspi, true);
1987 exit_free_irq:
1988 free_irq(spi_irq, tspi);
1989 +exit_clk_disable:
1990 + clk_disable(tspi->clk);
1991 exit_free_master:
1992 spi_master_put(master);
1993 return ret;
1994 @@ -1150,6 +1163,8 @@ static int tegra_slink_remove(struct platform_device *pdev)
1995
1996 free_irq(tspi->irq, tspi);
1997
1998 + clk_disable(tspi->clk);
1999 +
2000 if (tspi->tx_dma_chan)
2001 tegra_slink_deinit_dma_param(tspi, false);
2002
2003 diff --git a/drivers/staging/android/ashmem.c b/drivers/staging/android/ashmem.c
2004 index 6d690e5fa9bb..c6314d1552ea 100644
2005 --- a/drivers/staging/android/ashmem.c
2006 +++ b/drivers/staging/android/ashmem.c
2007 @@ -383,6 +383,12 @@ static int ashmem_mmap(struct file *file, struct vm_area_struct *vma)
2008 goto out;
2009 }
2010
2011 + /* requested mapping size larger than object size */
2012 + if (vma->vm_end - vma->vm_start > PAGE_ALIGN(asma->size)) {
2013 + ret = -EINVAL;
2014 + goto out;
2015 + }
2016 +
2017 /* requested protection bits must match our allowed protection mask */
2018 if (unlikely((vma->vm_flags & ~calc_vm_prot_bits(asma->prot_mask, 0)) &
2019 calc_vm_prot_bits(PROT_MASK, 0))) {
2020 diff --git a/drivers/staging/rts5208/sd.c b/drivers/staging/rts5208/sd.c
2021 index b0bbb36f8988..9e63bdf2afe7 100644
2022 --- a/drivers/staging/rts5208/sd.c
2023 +++ b/drivers/staging/rts5208/sd.c
2024 @@ -4976,7 +4976,7 @@ int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2025 goto SD_Execute_Write_Cmd_Failed;
2026 }
2027
2028 - rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
2029 + retval = rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
2030 if (retval != STATUS_SUCCESS) {
2031 rtsx_trace(chip);
2032 goto SD_Execute_Write_Cmd_Failed;
2033 diff --git a/drivers/target/iscsi/iscsi_target_auth.c b/drivers/target/iscsi/iscsi_target_auth.c
2034 index f06e74ea10d3..f0d97305575d 100644
2035 --- a/drivers/target/iscsi/iscsi_target_auth.c
2036 +++ b/drivers/target/iscsi/iscsi_target_auth.c
2037 @@ -26,15 +26,6 @@
2038 #include "iscsi_target_nego.h"
2039 #include "iscsi_target_auth.h"
2040
2041 -static void chap_binaryhex_to_asciihex(char *dst, char *src, int src_len)
2042 -{
2043 - int i;
2044 -
2045 - for (i = 0; i < src_len; i++) {
2046 - sprintf(&dst[i*2], "%02x", (int) src[i] & 0xff);
2047 - }
2048 -}
2049 -
2050 static void chap_gen_challenge(
2051 struct iscsi_conn *conn,
2052 int caller,
2053 @@ -47,7 +38,7 @@ static void chap_gen_challenge(
2054 memset(challenge_asciihex, 0, CHAP_CHALLENGE_LENGTH * 2 + 1);
2055
2056 get_random_bytes(chap->challenge, CHAP_CHALLENGE_LENGTH);
2057 - chap_binaryhex_to_asciihex(challenge_asciihex, chap->challenge,
2058 + bin2hex(challenge_asciihex, chap->challenge,
2059 CHAP_CHALLENGE_LENGTH);
2060 /*
2061 * Set CHAP_C, and copy the generated challenge into c_str.
2062 @@ -281,7 +272,7 @@ static int chap_server_compute_md5(
2063 goto out;
2064 }
2065
2066 - chap_binaryhex_to_asciihex(response, server_digest, MD5_SIGNATURE_SIZE);
2067 + bin2hex(response, server_digest, MD5_SIGNATURE_SIZE);
2068 pr_debug("[server] MD5 Server Digest: %s\n", response);
2069
2070 if (memcmp(server_digest, client_digest, MD5_SIGNATURE_SIZE) != 0) {
2071 @@ -403,7 +394,7 @@ static int chap_server_compute_md5(
2072 /*
2073 * Convert response from binary hex to ascii hext.
2074 */
2075 - chap_binaryhex_to_asciihex(response, digest, MD5_SIGNATURE_SIZE);
2076 + bin2hex(response, digest, MD5_SIGNATURE_SIZE);
2077 *nr_out_len += sprintf(nr_out_ptr + *nr_out_len, "CHAP_R=0x%s",
2078 response);
2079 *nr_out_len += 1;
2080 diff --git a/drivers/target/iscsi/iscsi_target_tpg.c b/drivers/target/iscsi/iscsi_target_tpg.c
2081 index 63e1dcc5914d..761b065a40bb 100644
2082 --- a/drivers/target/iscsi/iscsi_target_tpg.c
2083 +++ b/drivers/target/iscsi/iscsi_target_tpg.c
2084 @@ -637,8 +637,7 @@ int iscsit_ta_authentication(struct iscsi_portal_group *tpg, u32 authentication)
2085 none = strstr(buf1, NONE);
2086 if (none)
2087 goto out;
2088 - strncat(buf1, ",", strlen(","));
2089 - strncat(buf1, NONE, strlen(NONE));
2090 + strlcat(buf1, "," NONE, sizeof(buf1));
2091 if (iscsi_update_param_value(param, buf1) < 0)
2092 return -EINVAL;
2093 }
2094 diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
2095 index d04ec3b9e5ff..8a70b57d129c 100644
2096 --- a/drivers/thermal/of-thermal.c
2097 +++ b/drivers/thermal/of-thermal.c
2098 @@ -278,10 +278,13 @@ static int of_thermal_set_mode(struct thermal_zone_device *tz,
2099
2100 mutex_lock(&tz->lock);
2101
2102 - if (mode == THERMAL_DEVICE_ENABLED)
2103 + if (mode == THERMAL_DEVICE_ENABLED) {
2104 tz->polling_delay = data->polling_delay;
2105 - else
2106 + tz->passive_delay = data->passive_delay;
2107 + } else {
2108 tz->polling_delay = 0;
2109 + tz->passive_delay = 0;
2110 + }
2111
2112 mutex_unlock(&tz->lock);
2113
2114 diff --git a/drivers/tty/serial/8250/serial_cs.c b/drivers/tty/serial/8250/serial_cs.c
2115 index 933c2688dd7e..8106353ce7aa 100644
2116 --- a/drivers/tty/serial/8250/serial_cs.c
2117 +++ b/drivers/tty/serial/8250/serial_cs.c
2118 @@ -637,8 +637,10 @@ static int serial_config(struct pcmcia_device *link)
2119 (link->has_func_id) &&
2120 (link->socket->pcmcia_pfc == 0) &&
2121 ((link->func_id == CISTPL_FUNCID_MULTI) ||
2122 - (link->func_id == CISTPL_FUNCID_SERIAL)))
2123 - pcmcia_loop_config(link, serial_check_for_multi, info);
2124 + (link->func_id == CISTPL_FUNCID_SERIAL))) {
2125 + if (pcmcia_loop_config(link, serial_check_for_multi, info))
2126 + goto failed;
2127 + }
2128
2129 /*
2130 * Apply any multi-port quirk.
2131 diff --git a/drivers/tty/serial/cpm_uart/cpm_uart_core.c b/drivers/tty/serial/cpm_uart/cpm_uart_core.c
2132 index d3e3d42c0c12..0040c29f651a 100644
2133 --- a/drivers/tty/serial/cpm_uart/cpm_uart_core.c
2134 +++ b/drivers/tty/serial/cpm_uart/cpm_uart_core.c
2135 @@ -1068,8 +1068,8 @@ static int poll_wait_key(char *obuf, struct uart_cpm_port *pinfo)
2136 /* Get the address of the host memory buffer.
2137 */
2138 bdp = pinfo->rx_cur;
2139 - while (bdp->cbd_sc & BD_SC_EMPTY)
2140 - ;
2141 + if (bdp->cbd_sc & BD_SC_EMPTY)
2142 + return NO_POLL_CHAR;
2143
2144 /* If the buffer address is in the CPM DPRAM, don't
2145 * convert it.
2146 @@ -1104,7 +1104,11 @@ static int cpm_get_poll_char(struct uart_port *port)
2147 poll_chars = 0;
2148 }
2149 if (poll_chars <= 0) {
2150 - poll_chars = poll_wait_key(poll_buf, pinfo);
2151 + int ret = poll_wait_key(poll_buf, pinfo);
2152 +
2153 + if (ret == NO_POLL_CHAR)
2154 + return ret;
2155 + poll_chars = ret;
2156 pollp = poll_buf;
2157 }
2158 poll_chars--;
2159 diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c
2160 index 937f5e10f165..e2ec04904f54 100644
2161 --- a/drivers/tty/serial/fsl_lpuart.c
2162 +++ b/drivers/tty/serial/fsl_lpuart.c
2163 @@ -833,7 +833,8 @@ static inline int lpuart_start_rx_dma(struct lpuart_port *sport)
2164 struct circ_buf *ring = &sport->rx_ring;
2165 int ret, nent;
2166 int bits, baud;
2167 - struct tty_struct *tty = tty_port_tty_get(&sport->port.state->port);
2168 + struct tty_port *port = &sport->port.state->port;
2169 + struct tty_struct *tty = port->tty;
2170 struct ktermios *termios = &tty->termios;
2171
2172 baud = tty_get_baud_rate(tty);
2173 diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
2174 index b24edf634985..0d82be145c68 100644
2175 --- a/drivers/tty/serial/imx.c
2176 +++ b/drivers/tty/serial/imx.c
2177 @@ -2197,6 +2197,14 @@ static int serial_imx_probe(struct platform_device *pdev)
2178 ret);
2179 return ret;
2180 }
2181 +
2182 + ret = devm_request_irq(&pdev->dev, rtsirq, imx_rtsint, 0,
2183 + dev_name(&pdev->dev), sport);
2184 + if (ret) {
2185 + dev_err(&pdev->dev, "failed to request rts irq: %d\n",
2186 + ret);
2187 + return ret;
2188 + }
2189 } else {
2190 ret = devm_request_irq(&pdev->dev, rxirq, imx_int, 0,
2191 dev_name(&pdev->dev), sport);
2192 diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
2193 index adc0f78dc54d..9f001659807a 100644
2194 --- a/drivers/usb/class/cdc-wdm.c
2195 +++ b/drivers/usb/class/cdc-wdm.c
2196 @@ -470,7 +470,7 @@ static int service_outstanding_interrupt(struct wdm_device *desc)
2197
2198 set_bit(WDM_RESPONDING, &desc->flags);
2199 spin_unlock_irq(&desc->iuspin);
2200 - rv = usb_submit_urb(desc->response, GFP_ATOMIC);
2201 + rv = usb_submit_urb(desc->response, GFP_KERNEL);
2202 spin_lock_irq(&desc->iuspin);
2203 if (rv) {
2204 dev_err(&desc->intf->dev,
2205 diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
2206 index 893ebae51029..988240e3cb58 100644
2207 --- a/drivers/usb/core/devio.c
2208 +++ b/drivers/usb/core/devio.c
2209 @@ -1450,10 +1450,13 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
2210 struct async *as = NULL;
2211 struct usb_ctrlrequest *dr = NULL;
2212 unsigned int u, totlen, isofrmlen;
2213 - int i, ret, is_in, num_sgs = 0, ifnum = -1;
2214 + int i, ret, num_sgs = 0, ifnum = -1;
2215 int number_of_packets = 0;
2216 unsigned int stream_id = 0;
2217 void *buf;
2218 + bool is_in;
2219 + bool allow_short = false;
2220 + bool allow_zero = false;
2221 unsigned long mask = USBDEVFS_URB_SHORT_NOT_OK |
2222 USBDEVFS_URB_BULK_CONTINUATION |
2223 USBDEVFS_URB_NO_FSBR |
2224 @@ -1487,6 +1490,8 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
2225 u = 0;
2226 switch (uurb->type) {
2227 case USBDEVFS_URB_TYPE_CONTROL:
2228 + if (is_in)
2229 + allow_short = true;
2230 if (!usb_endpoint_xfer_control(&ep->desc))
2231 return -EINVAL;
2232 /* min 8 byte setup packet */
2233 @@ -1527,6 +1532,10 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
2234 break;
2235
2236 case USBDEVFS_URB_TYPE_BULK:
2237 + if (!is_in)
2238 + allow_zero = true;
2239 + else
2240 + allow_short = true;
2241 switch (usb_endpoint_type(&ep->desc)) {
2242 case USB_ENDPOINT_XFER_CONTROL:
2243 case USB_ENDPOINT_XFER_ISOC:
2244 @@ -1547,6 +1556,10 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
2245 if (!usb_endpoint_xfer_int(&ep->desc))
2246 return -EINVAL;
2247 interrupt_urb:
2248 + if (!is_in)
2249 + allow_zero = true;
2250 + else
2251 + allow_short = true;
2252 break;
2253
2254 case USBDEVFS_URB_TYPE_ISO:
2255 @@ -1691,16 +1704,21 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
2256 u = (is_in ? URB_DIR_IN : URB_DIR_OUT);
2257 if (uurb->flags & USBDEVFS_URB_ISO_ASAP)
2258 u |= URB_ISO_ASAP;
2259 - if (uurb->flags & USBDEVFS_URB_SHORT_NOT_OK && is_in)
2260 + if (allow_short && uurb->flags & USBDEVFS_URB_SHORT_NOT_OK)
2261 u |= URB_SHORT_NOT_OK;
2262 if (uurb->flags & USBDEVFS_URB_NO_FSBR)
2263 u |= URB_NO_FSBR;
2264 - if (uurb->flags & USBDEVFS_URB_ZERO_PACKET)
2265 + if (allow_zero && uurb->flags & USBDEVFS_URB_ZERO_PACKET)
2266 u |= URB_ZERO_PACKET;
2267 if (uurb->flags & USBDEVFS_URB_NO_INTERRUPT)
2268 u |= URB_NO_INTERRUPT;
2269 as->urb->transfer_flags = u;
2270
2271 + if (!allow_short && uurb->flags & USBDEVFS_URB_SHORT_NOT_OK)
2272 + dev_warn(&ps->dev->dev, "Requested nonsensical USBDEVFS_URB_SHORT_NOT_OK.\n");
2273 + if (!allow_zero && uurb->flags & USBDEVFS_URB_ZERO_PACKET)
2274 + dev_warn(&ps->dev->dev, "Requested nonsensical USBDEVFS_URB_ZERO_PACKET.\n");
2275 +
2276 as->urb->transfer_buffer_length = uurb->buffer_length;
2277 as->urb->setup_packet = (unsigned char *)dr;
2278 dr = NULL;
2279 diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
2280 index 0bb380a9fcf7..e9d6cf146fcc 100644
2281 --- a/drivers/usb/core/driver.c
2282 +++ b/drivers/usb/core/driver.c
2283 @@ -509,7 +509,6 @@ int usb_driver_claim_interface(struct usb_driver *driver,
2284 struct device *dev;
2285 struct usb_device *udev;
2286 int retval = 0;
2287 - int lpm_disable_error = -ENODEV;
2288
2289 if (!iface)
2290 return -ENODEV;
2291 @@ -530,16 +529,6 @@ int usb_driver_claim_interface(struct usb_driver *driver,
2292
2293 iface->condition = USB_INTERFACE_BOUND;
2294
2295 - /* See the comment about disabling LPM in usb_probe_interface(). */
2296 - if (driver->disable_hub_initiated_lpm) {
2297 - lpm_disable_error = usb_unlocked_disable_lpm(udev);
2298 - if (lpm_disable_error) {
2299 - dev_err(&iface->dev, "%s Failed to disable LPM for driver %s\n.",
2300 - __func__, driver->name);
2301 - return -ENOMEM;
2302 - }
2303 - }
2304 -
2305 /* Claimed interfaces are initially inactive (suspended) and
2306 * runtime-PM-enabled, but only if the driver has autosuspend
2307 * support. Otherwise they are marked active, to prevent the
2308 @@ -558,9 +547,20 @@ int usb_driver_claim_interface(struct usb_driver *driver,
2309 if (device_is_registered(dev))
2310 retval = device_bind_driver(dev);
2311
2312 - /* Attempt to re-enable USB3 LPM, if the disable was successful. */
2313 - if (!lpm_disable_error)
2314 - usb_unlocked_enable_lpm(udev);
2315 + if (retval) {
2316 + dev->driver = NULL;
2317 + usb_set_intfdata(iface, NULL);
2318 + iface->needs_remote_wakeup = 0;
2319 + iface->condition = USB_INTERFACE_UNBOUND;
2320 +
2321 + /*
2322 + * Unbound interfaces are always runtime-PM-disabled
2323 + * and runtime-PM-suspended
2324 + */
2325 + if (driver->supports_autosuspend)
2326 + pm_runtime_disable(dev);
2327 + pm_runtime_set_suspended(dev);
2328 + }
2329
2330 return retval;
2331 }
2332 diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
2333 index eaf1c3b06f02..891261b43c67 100644
2334 --- a/drivers/usb/core/usb.c
2335 +++ b/drivers/usb/core/usb.c
2336 @@ -91,6 +91,8 @@ struct usb_host_interface *usb_find_alt_setting(
2337 struct usb_interface_cache *intf_cache = NULL;
2338 int i;
2339
2340 + if (!config)
2341 + return NULL;
2342 for (i = 0; i < config->desc.bNumInterfaces; i++) {
2343 if (config->intf_cache[i]->altsetting[0].desc.bInterfaceNumber
2344 == iface_num) {
2345 diff --git a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c
2346 index 813035f51fe7..7d252678c55a 100644
2347 --- a/drivers/usb/serial/kobil_sct.c
2348 +++ b/drivers/usb/serial/kobil_sct.c
2349 @@ -408,12 +408,20 @@ static int kobil_tiocmget(struct tty_struct *tty)
2350 transfer_buffer_length,
2351 KOBIL_TIMEOUT);
2352
2353 - dev_dbg(&port->dev, "%s - Send get_status_line_state URB returns: %i. Statusline: %02x\n",
2354 - __func__, result, transfer_buffer[0]);
2355 + dev_dbg(&port->dev, "Send get_status_line_state URB returns: %i\n",
2356 + result);
2357 + if (result < 1) {
2358 + if (result >= 0)
2359 + result = -EIO;
2360 + goto out_free;
2361 + }
2362 +
2363 + dev_dbg(&port->dev, "Statusline: %02x\n", transfer_buffer[0]);
2364
2365 result = 0;
2366 if ((transfer_buffer[0] & SUSBCR_GSL_DSR) != 0)
2367 result = TIOCM_DSR;
2368 +out_free:
2369 kfree(transfer_buffer);
2370 return result;
2371 }
2372 diff --git a/drivers/usb/wusbcore/security.c b/drivers/usb/wusbcore/security.c
2373 index 8c9421b69da0..6bf86ca950b3 100644
2374 --- a/drivers/usb/wusbcore/security.c
2375 +++ b/drivers/usb/wusbcore/security.c
2376 @@ -230,7 +230,7 @@ int wusb_dev_sec_add(struct wusbhc *wusbhc,
2377
2378 result = usb_get_descriptor(usb_dev, USB_DT_SECURITY,
2379 0, secd, sizeof(*secd));
2380 - if (result < sizeof(*secd)) {
2381 + if (result < (int)sizeof(*secd)) {
2382 dev_err(dev, "Can't read security descriptor or "
2383 "not enough data: %d\n", result);
2384 goto out;
2385 diff --git a/drivers/uwb/hwa-rc.c b/drivers/uwb/hwa-rc.c
2386 index 9a53912bdfe9..5d3ba747ae17 100644
2387 --- a/drivers/uwb/hwa-rc.c
2388 +++ b/drivers/uwb/hwa-rc.c
2389 @@ -873,6 +873,7 @@ error_get_version:
2390 error_rc_add:
2391 usb_put_intf(iface);
2392 usb_put_dev(hwarc->usb_dev);
2393 + kfree(hwarc);
2394 error_alloc:
2395 uwb_rc_put(uwb_rc);
2396 error_rc_alloc:
2397 diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
2398 index fdcbe0f2814f..c19c96840480 100644
2399 --- a/fs/ext4/xattr.c
2400 +++ b/fs/ext4/xattr.c
2401 @@ -1426,6 +1426,11 @@ static int ext4_xattr_make_inode_space(handle_t *handle, struct inode *inode,
2402 last = IFIRST(header);
2403 /* Find the entry best suited to be pushed into EA block */
2404 for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
2405 + /* never move system.data out of the inode */
2406 + if ((last->e_name_len == 4) &&
2407 + (last->e_name_index == EXT4_XATTR_INDEX_SYSTEM) &&
2408 + !memcmp(last->e_name, "data", 4))
2409 + continue;
2410 total_size =
2411 EXT4_XATTR_SIZE(le32_to_cpu(last->e_value_size)) +
2412 EXT4_XATTR_LEN(last->e_name_len);
2413 diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
2414 index eef0caf6e67d..e9495516527d 100644
2415 --- a/fs/nfsd/nfs4proc.c
2416 +++ b/fs/nfsd/nfs4proc.c
2417 @@ -1725,6 +1725,7 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
2418 if (status) {
2419 op = &args->ops[0];
2420 op->status = status;
2421 + resp->opcnt = 1;
2422 goto encode_op;
2423 }
2424
2425 diff --git a/include/linux/arm-smccc.h b/include/linux/arm-smccc.h
2426 index ca1d2cc2cdfa..18863d56273c 100644
2427 --- a/include/linux/arm-smccc.h
2428 +++ b/include/linux/arm-smccc.h
2429 @@ -199,47 +199,57 @@ asmlinkage void __arm_smccc_hvc(unsigned long a0, unsigned long a1,
2430
2431 #define __declare_arg_0(a0, res) \
2432 struct arm_smccc_res *___res = res; \
2433 - register u32 r0 asm("r0") = a0; \
2434 + register unsigned long r0 asm("r0") = (u32)a0; \
2435 register unsigned long r1 asm("r1"); \
2436 register unsigned long r2 asm("r2"); \
2437 register unsigned long r3 asm("r3")
2438
2439 #define __declare_arg_1(a0, a1, res) \
2440 + typeof(a1) __a1 = a1; \
2441 struct arm_smccc_res *___res = res; \
2442 - register u32 r0 asm("r0") = a0; \
2443 - register typeof(a1) r1 asm("r1") = a1; \
2444 + register unsigned long r0 asm("r0") = (u32)a0; \
2445 + register unsigned long r1 asm("r1") = __a1; \
2446 register unsigned long r2 asm("r2"); \
2447 register unsigned long r3 asm("r3")
2448
2449 #define __declare_arg_2(a0, a1, a2, res) \
2450 + typeof(a1) __a1 = a1; \
2451 + typeof(a2) __a2 = a2; \
2452 struct arm_smccc_res *___res = res; \
2453 - register u32 r0 asm("r0") = a0; \
2454 - register typeof(a1) r1 asm("r1") = a1; \
2455 - register typeof(a2) r2 asm("r2") = a2; \
2456 + register unsigned long r0 asm("r0") = (u32)a0; \
2457 + register unsigned long r1 asm("r1") = __a1; \
2458 + register unsigned long r2 asm("r2") = __a2; \
2459 register unsigned long r3 asm("r3")
2460
2461 #define __declare_arg_3(a0, a1, a2, a3, res) \
2462 + typeof(a1) __a1 = a1; \
2463 + typeof(a2) __a2 = a2; \
2464 + typeof(a3) __a3 = a3; \
2465 struct arm_smccc_res *___res = res; \
2466 - register u32 r0 asm("r0") = a0; \
2467 - register typeof(a1) r1 asm("r1") = a1; \
2468 - register typeof(a2) r2 asm("r2") = a2; \
2469 - register typeof(a3) r3 asm("r3") = a3
2470 + register unsigned long r0 asm("r0") = (u32)a0; \
2471 + register unsigned long r1 asm("r1") = __a1; \
2472 + register unsigned long r2 asm("r2") = __a2; \
2473 + register unsigned long r3 asm("r3") = __a3
2474
2475 #define __declare_arg_4(a0, a1, a2, a3, a4, res) \
2476 + typeof(a4) __a4 = a4; \
2477 __declare_arg_3(a0, a1, a2, a3, res); \
2478 - register typeof(a4) r4 asm("r4") = a4
2479 + register unsigned long r4 asm("r4") = __a4
2480
2481 #define __declare_arg_5(a0, a1, a2, a3, a4, a5, res) \
2482 + typeof(a5) __a5 = a5; \
2483 __declare_arg_4(a0, a1, a2, a3, a4, res); \
2484 - register typeof(a5) r5 asm("r5") = a5
2485 + register unsigned long r5 asm("r5") = __a5
2486
2487 #define __declare_arg_6(a0, a1, a2, a3, a4, a5, a6, res) \
2488 + typeof(a6) __a6 = a6; \
2489 __declare_arg_5(a0, a1, a2, a3, a4, a5, res); \
2490 - register typeof(a6) r6 asm("r6") = a6
2491 + register unsigned long r6 asm("r6") = __a6
2492
2493 #define __declare_arg_7(a0, a1, a2, a3, a4, a5, a6, a7, res) \
2494 + typeof(a7) __a7 = a7; \
2495 __declare_arg_6(a0, a1, a2, a3, a4, a5, a6, res); \
2496 - register typeof(a7) r7 asm("r7") = a7
2497 + register unsigned long r7 asm("r7") = __a7
2498
2499 #define ___declare_args(count, ...) __declare_arg_ ## count(__VA_ARGS__)
2500 #define __declare_args(count, ...) ___declare_args(count, __VA_ARGS__)
2501 diff --git a/include/linux/platform_data/ina2xx.h b/include/linux/platform_data/ina2xx.h
2502 index 9abc0ca7259b..9f0aa1b48c78 100644
2503 --- a/include/linux/platform_data/ina2xx.h
2504 +++ b/include/linux/platform_data/ina2xx.h
2505 @@ -1,7 +1,7 @@
2506 /*
2507 * Driver for Texas Instruments INA219, INA226 power monitor chips
2508 *
2509 - * Copyright (C) 2012 Lothar Felten <l-felten@ti.com>
2510 + * Copyright (C) 2012 Lothar Felten <lothar.felten@gmail.com>
2511 *
2512 * This program is free software; you can redistribute it and/or modify
2513 * it under the terms of the GNU General Public License version 2 as
2514 diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
2515 index 3965503315ef..ad97baf7b8de 100644
2516 --- a/include/linux/power_supply.h
2517 +++ b/include/linux/power_supply.h
2518 @@ -249,6 +249,7 @@ struct power_supply {
2519 spinlock_t changed_lock;
2520 bool changed;
2521 bool initialized;
2522 + bool removing;
2523 atomic_t use_cnt;
2524 #ifdef CONFIG_THERMAL
2525 struct thermal_zone_device *tzd;
2526 diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h
2527 index 75f56c2ef2d4..b6a59e8cd855 100644
2528 --- a/include/linux/slub_def.h
2529 +++ b/include/linux/slub_def.h
2530 @@ -67,7 +67,8 @@ struct kmem_cache {
2531 int size; /* The size of an object including meta data */
2532 int object_size; /* The size of an object without meta data */
2533 int offset; /* Free pointer offset. */
2534 - int cpu_partial; /* Number of per cpu partial objects to keep around */
2535 + /* Number of per cpu partial objects to keep around */
2536 + unsigned int cpu_partial;
2537 struct kmem_cache_order_objects oo;
2538
2539 /* Allocation and freeing of slabs */
2540 diff --git a/include/media/v4l2-fh.h b/include/media/v4l2-fh.h
2541 index e19e6246e21c..d2671606cb5d 100644
2542 --- a/include/media/v4l2-fh.h
2543 +++ b/include/media/v4l2-fh.h
2544 @@ -42,10 +42,13 @@ struct v4l2_ctrl_handler;
2545 * @prio: priority of the file handler, as defined by &enum v4l2_priority
2546 *
2547 * @wait: event' s wait queue
2548 + * @subscribe_lock: serialise changes to the subscribed list; guarantee that
2549 + * the add and del event callbacks are orderly called
2550 * @subscribed: list of subscribed events
2551 * @available: list of events waiting to be dequeued
2552 * @navailable: number of available events at @available list
2553 * @sequence: event sequence number
2554 + *
2555 * @m2m_ctx: pointer to &struct v4l2_m2m_ctx
2556 */
2557 struct v4l2_fh {
2558 @@ -56,6 +59,7 @@ struct v4l2_fh {
2559
2560 /* Events */
2561 wait_queue_head_t wait;
2562 + struct mutex subscribe_lock;
2563 struct list_head subscribed;
2564 struct list_head available;
2565 unsigned int navailable;
2566 diff --git a/kernel/module.c b/kernel/module.c
2567 index 0651f2d25fc9..2325c9821f2a 100644
2568 --- a/kernel/module.c
2569 +++ b/kernel/module.c
2570 @@ -4011,7 +4011,7 @@ static unsigned long mod_find_symname(struct module *mod, const char *name)
2571
2572 for (i = 0; i < kallsyms->num_symtab; i++)
2573 if (strcmp(name, symname(kallsyms, i)) == 0 &&
2574 - kallsyms->symtab[i].st_info != 'U')
2575 + kallsyms->symtab[i].st_shndx != SHN_UNDEF)
2576 return kallsyms->symtab[i].st_value;
2577 return 0;
2578 }
2579 @@ -4057,6 +4057,10 @@ int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,
2580 if (mod->state == MODULE_STATE_UNFORMED)
2581 continue;
2582 for (i = 0; i < kallsyms->num_symtab; i++) {
2583 +
2584 + if (kallsyms->symtab[i].st_shndx == SHN_UNDEF)
2585 + continue;
2586 +
2587 ret = fn(data, symname(kallsyms, i),
2588 mod, kallsyms->symtab[i].st_value);
2589 if (ret != 0)
2590 diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
2591 index d67ef56ca9bc..a0ee81f49a87 100644
2592 --- a/kernel/time/alarmtimer.c
2593 +++ b/kernel/time/alarmtimer.c
2594 @@ -786,7 +786,8 @@ static int alarm_timer_nsleep(const clockid_t which_clock, int flags,
2595 /* Convert (if necessary) to absolute time */
2596 if (flags != TIMER_ABSTIME) {
2597 ktime_t now = alarm_bases[type].gettime();
2598 - exp = ktime_add(now, exp);
2599 +
2600 + exp = ktime_add_safe(now, exp);
2601 }
2602
2603 if (alarmtimer_do_nsleep(&alarm, exp))
2604 diff --git a/lib/klist.c b/lib/klist.c
2605 index 0507fa5d84c5..f6b547812fe3 100644
2606 --- a/lib/klist.c
2607 +++ b/lib/klist.c
2608 @@ -336,8 +336,9 @@ struct klist_node *klist_prev(struct klist_iter *i)
2609 void (*put)(struct klist_node *) = i->i_klist->put;
2610 struct klist_node *last = i->i_cur;
2611 struct klist_node *prev;
2612 + unsigned long flags;
2613
2614 - spin_lock(&i->i_klist->k_lock);
2615 + spin_lock_irqsave(&i->i_klist->k_lock, flags);
2616
2617 if (last) {
2618 prev = to_klist_node(last->n_node.prev);
2619 @@ -356,7 +357,7 @@ struct klist_node *klist_prev(struct klist_iter *i)
2620 prev = to_klist_node(prev->n_node.prev);
2621 }
2622
2623 - spin_unlock(&i->i_klist->k_lock);
2624 + spin_unlock_irqrestore(&i->i_klist->k_lock, flags);
2625
2626 if (put && last)
2627 put(last);
2628 @@ -377,8 +378,9 @@ struct klist_node *klist_next(struct klist_iter *i)
2629 void (*put)(struct klist_node *) = i->i_klist->put;
2630 struct klist_node *last = i->i_cur;
2631 struct klist_node *next;
2632 + unsigned long flags;
2633
2634 - spin_lock(&i->i_klist->k_lock);
2635 + spin_lock_irqsave(&i->i_klist->k_lock, flags);
2636
2637 if (last) {
2638 next = to_klist_node(last->n_node.next);
2639 @@ -397,7 +399,7 @@ struct klist_node *klist_next(struct klist_iter *i)
2640 next = to_klist_node(next->n_node.next);
2641 }
2642
2643 - spin_unlock(&i->i_klist->k_lock);
2644 + spin_unlock_irqrestore(&i->i_klist->k_lock, flags);
2645
2646 if (put && last)
2647 put(last);
2648 diff --git a/mm/slub.c b/mm/slub.c
2649 index e0ce5dec84ba..131dee87a67c 100644
2650 --- a/mm/slub.c
2651 +++ b/mm/slub.c
2652 @@ -1793,7 +1793,7 @@ static void *get_partial_node(struct kmem_cache *s, struct kmem_cache_node *n,
2653 {
2654 struct page *page, *page2;
2655 void *object = NULL;
2656 - int available = 0;
2657 + unsigned int available = 0;
2658 int objects;
2659
2660 /*
2661 @@ -4870,10 +4870,10 @@ static ssize_t cpu_partial_show(struct kmem_cache *s, char *buf)
2662 static ssize_t cpu_partial_store(struct kmem_cache *s, const char *buf,
2663 size_t length)
2664 {
2665 - unsigned long objects;
2666 + unsigned int objects;
2667 int err;
2668
2669 - err = kstrtoul(buf, 10, &objects);
2670 + err = kstrtouint(buf, 10, &objects);
2671 if (err)
2672 return err;
2673 if (objects && !kmem_cache_has_cpu_partial(s))
2674 diff --git a/net/6lowpan/iphc.c b/net/6lowpan/iphc.c
2675 index 79f1fa22509a..23654f1902f3 100644
2676 --- a/net/6lowpan/iphc.c
2677 +++ b/net/6lowpan/iphc.c
2678 @@ -745,6 +745,7 @@ int lowpan_header_decompress(struct sk_buff *skb, const struct net_device *dev,
2679 hdr.hop_limit, &hdr.daddr);
2680
2681 skb_push(skb, sizeof(hdr));
2682 + skb_reset_mac_header(skb);
2683 skb_reset_network_header(skb);
2684 skb_copy_to_linear_data(skb, &hdr, sizeof(hdr));
2685
2686 diff --git a/sound/aoa/core/gpio-feature.c b/sound/aoa/core/gpio-feature.c
2687 index 71960089e207..65557421fe0b 100644
2688 --- a/sound/aoa/core/gpio-feature.c
2689 +++ b/sound/aoa/core/gpio-feature.c
2690 @@ -88,8 +88,10 @@ static struct device_node *get_gpio(char *name,
2691 }
2692
2693 reg = of_get_property(np, "reg", NULL);
2694 - if (!reg)
2695 + if (!reg) {
2696 + of_node_put(np);
2697 return NULL;
2698 + }
2699
2700 *gpioptr = *reg;
2701
2702 diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
2703 index 4e331dd5ff47..f913809a7de3 100644
2704 --- a/sound/pci/hda/hda_intel.c
2705 +++ b/sound/pci/hda/hda_intel.c
2706 @@ -2349,7 +2349,8 @@ static const struct pci_device_id azx_ids[] = {
2707 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
2708 /* AMD Raven */
2709 { PCI_DEVICE(0x1022, 0x15e3),
2710 - .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
2711 + .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB |
2712 + AZX_DCAPS_PM_RUNTIME },
2713 /* ATI HDMI */
2714 { PCI_DEVICE(0x1002, 0x0002),
2715 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
2716 diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
2717 index 0b5d132bc3dd..8bfc534e3b34 100644
2718 --- a/sound/soc/soc-dapm.c
2719 +++ b/sound/soc/soc-dapm.c
2720 @@ -3913,6 +3913,13 @@ int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card)
2721 continue;
2722 }
2723
2724 + /* let users know there is no DAI to link */
2725 + if (!dai_w->priv) {
2726 + dev_dbg(card->dev, "dai widget %s has no DAI\n",
2727 + dai_w->name);
2728 + continue;
2729 + }
2730 +
2731 dai = dai_w->priv;
2732
2733 /* ...find all widgets with the same stream and link them */