Magellan Linux

Contents of /trunk/kernel-magellan/patches-4.11/0107-4.11.8-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2950 - (show annotations) (download)
Tue Jul 4 08:38:28 2017 UTC (6 years, 9 months ago) by niro
File size: 86606 byte(s)
-linux-4.11.8
1 diff --git a/Makefile b/Makefile
2 index 1b0fe238d633..8c5c94ca56d9 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 11
8 -SUBLEVEL = 7
9 +SUBLEVEL = 8
10 EXTRAVERSION =
11 NAME = Fearless Coyote
12
13 diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c
14 index 41b6e31f8f55..d0cb007fa482 100644
15 --- a/arch/arm64/kernel/vdso.c
16 +++ b/arch/arm64/kernel/vdso.c
17 @@ -221,10 +221,11 @@ void update_vsyscall(struct timekeeper *tk)
18 /* tkr_mono.cycle_last == tkr_raw.cycle_last */
19 vdso_data->cs_cycle_last = tk->tkr_mono.cycle_last;
20 vdso_data->raw_time_sec = tk->raw_time.tv_sec;
21 - vdso_data->raw_time_nsec = tk->raw_time.tv_nsec;
22 + vdso_data->raw_time_nsec = (tk->raw_time.tv_nsec <<
23 + tk->tkr_raw.shift) +
24 + tk->tkr_raw.xtime_nsec;
25 vdso_data->xtime_clock_sec = tk->xtime_sec;
26 vdso_data->xtime_clock_nsec = tk->tkr_mono.xtime_nsec;
27 - /* tkr_raw.xtime_nsec == 0 */
28 vdso_data->cs_mono_mult = tk->tkr_mono.mult;
29 vdso_data->cs_raw_mult = tk->tkr_raw.mult;
30 /* tkr_mono.shift == tkr_raw.shift */
31 diff --git a/arch/arm64/kernel/vdso/gettimeofday.S b/arch/arm64/kernel/vdso/gettimeofday.S
32 index e00b4671bd7c..76320e920965 100644
33 --- a/arch/arm64/kernel/vdso/gettimeofday.S
34 +++ b/arch/arm64/kernel/vdso/gettimeofday.S
35 @@ -256,7 +256,6 @@ monotonic_raw:
36 seqcnt_check fail=monotonic_raw
37
38 /* All computations are done with left-shifted nsecs. */
39 - lsl x14, x14, x12
40 get_nsec_per_sec res=x9
41 lsl x9, x9, x12
42
43 diff --git a/arch/mips/kvm/tlb.c b/arch/mips/kvm/tlb.c
44 index 2819eb793345..3b5b7936345c 100644
45 --- a/arch/mips/kvm/tlb.c
46 +++ b/arch/mips/kvm/tlb.c
47 @@ -147,7 +147,11 @@ static int _kvm_mips_host_tlb_inv(unsigned long entryhi)
48 int kvm_mips_host_tlb_inv(struct kvm_vcpu *vcpu, unsigned long va,
49 bool user, bool kernel)
50 {
51 - int idx_user, idx_kernel;
52 + /*
53 + * Initialize idx_user and idx_kernel to workaround bogus
54 + * maybe-initialized warning when using GCC 6.
55 + */
56 + int idx_user = 0, idx_kernel = 0;
57 unsigned long flags, old_entryhi;
58
59 local_irq_save(flags);
60 diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
61 index 6353019966e6..a59880c81d52 100644
62 --- a/arch/powerpc/kernel/exceptions-64s.S
63 +++ b/arch/powerpc/kernel/exceptions-64s.S
64 @@ -1425,10 +1425,8 @@ USE_TEXT_SECTION()
65 .balign IFETCH_ALIGN_BYTES
66 do_hash_page:
67 #ifdef CONFIG_PPC_STD_MMU_64
68 - andis. r0,r4,0xa410 /* weird error? */
69 + andis. r0,r4,0xa450 /* weird error? */
70 bne- handle_page_fault /* if not, try to insert a HPTE */
71 - andis. r0,r4,DSISR_DABRMATCH@h
72 - bne- handle_dabr_fault
73 CURRENT_THREAD_INFO(r11, r1)
74 lwz r0,TI_PREEMPT(r11) /* If we're in an "NMI" */
75 andis. r0,r0,NMI_MASK@h /* (i.e. an irq when soft-disabled) */
76 @@ -1452,11 +1450,16 @@ do_hash_page:
77
78 /* Error */
79 blt- 13f
80 +
81 + /* Reload DSISR into r4 for the DABR check below */
82 + ld r4,_DSISR(r1)
83 #endif /* CONFIG_PPC_STD_MMU_64 */
84
85 /* Here we have a page fault that hash_page can't handle. */
86 handle_page_fault:
87 -11: ld r4,_DAR(r1)
88 +11: andis. r0,r4,DSISR_DABRMATCH@h
89 + bne- handle_dabr_fault
90 + ld r4,_DAR(r1)
91 ld r5,_DSISR(r1)
92 addi r3,r1,STACK_FRAME_OVERHEAD
93 bl do_page_fault
94 diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
95 index fce05a38851c..49d5f193438a 100644
96 --- a/arch/powerpc/kernel/kprobes.c
97 +++ b/arch/powerpc/kernel/kprobes.c
98 @@ -495,6 +495,15 @@ int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
99 regs->gpr[2] = (unsigned long)(((func_descr_t *)jp->entry)->toc);
100 #endif
101
102 + /*
103 + * jprobes use jprobe_return() which skips the normal return
104 + * path of the function, and this messes up the accounting of the
105 + * function graph tracer.
106 + *
107 + * Pause function graph tracing while performing the jprobe function.
108 + */
109 + pause_graph_tracing();
110 +
111 return 1;
112 }
113
114 @@ -517,6 +526,8 @@ int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
115 * saved regs...
116 */
117 memcpy(regs, &kcb->jprobe_saved_regs, sizeof(struct pt_regs));
118 + /* It's OK to start function graph tracing again */
119 + unpause_graph_tracing();
120 preempt_enable_no_resched();
121 return 1;
122 }
123 diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
124 index 1ec86d9e2a82..e6a94bd2b158 100644
125 --- a/arch/powerpc/kvm/book3s_hv.c
126 +++ b/arch/powerpc/kvm/book3s_hv.c
127 @@ -1481,6 +1481,14 @@ static int kvmppc_set_one_reg_hv(struct kvm_vcpu *vcpu, u64 id,
128 r = set_vpa(vcpu, &vcpu->arch.dtl, addr, len);
129 break;
130 case KVM_REG_PPC_TB_OFFSET:
131 + /*
132 + * POWER9 DD1 has an erratum where writing TBU40 causes
133 + * the timebase to lose ticks. So we don't let the
134 + * timebase offset be changed on P9 DD1. (It is
135 + * initialized to zero.)
136 + */
137 + if (cpu_has_feature(CPU_FTR_POWER9_DD1))
138 + break;
139 /* round up to multiple of 2^24 */
140 vcpu->arch.vcore->tb_offset =
141 ALIGN(set_reg_val(id, *val), 1UL << 24);
142 @@ -2902,12 +2910,36 @@ static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu)
143 {
144 int r;
145 int srcu_idx;
146 + unsigned long ebb_regs[3] = {}; /* shut up GCC */
147 + unsigned long user_tar = 0;
148 + unsigned int user_vrsave;
149
150 if (!vcpu->arch.sane) {
151 run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
152 return -EINVAL;
153 }
154
155 + /*
156 + * Don't allow entry with a suspended transaction, because
157 + * the guest entry/exit code will lose it.
158 + * If the guest has TM enabled, save away their TM-related SPRs
159 + * (they will get restored by the TM unavailable interrupt).
160 + */
161 +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
162 + if (cpu_has_feature(CPU_FTR_TM) && current->thread.regs &&
163 + (current->thread.regs->msr & MSR_TM)) {
164 + if (MSR_TM_ACTIVE(current->thread.regs->msr)) {
165 + run->exit_reason = KVM_EXIT_FAIL_ENTRY;
166 + run->fail_entry.hardware_entry_failure_reason = 0;
167 + return -EINVAL;
168 + }
169 + current->thread.tm_tfhar = mfspr(SPRN_TFHAR);
170 + current->thread.tm_tfiar = mfspr(SPRN_TFIAR);
171 + current->thread.tm_texasr = mfspr(SPRN_TEXASR);
172 + current->thread.regs->msr &= ~MSR_TM;
173 + }
174 +#endif
175 +
176 kvmppc_core_prepare_to_enter(vcpu);
177
178 /* No need to go into the guest when all we'll do is come back out */
179 @@ -2929,6 +2961,15 @@ static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu)
180
181 flush_all_to_thread(current);
182
183 + /* Save userspace EBB and other register values */
184 + if (cpu_has_feature(CPU_FTR_ARCH_207S)) {
185 + ebb_regs[0] = mfspr(SPRN_EBBHR);
186 + ebb_regs[1] = mfspr(SPRN_EBBRR);
187 + ebb_regs[2] = mfspr(SPRN_BESCR);
188 + user_tar = mfspr(SPRN_TAR);
189 + }
190 + user_vrsave = mfspr(SPRN_VRSAVE);
191 +
192 vcpu->arch.wqp = &vcpu->arch.vcore->wq;
193 vcpu->arch.pgdir = current->mm->pgd;
194 vcpu->arch.state = KVMPPC_VCPU_BUSY_IN_HOST;
195 @@ -2951,6 +2992,16 @@ static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu)
196 r = kvmppc_xics_rm_complete(vcpu, 0);
197 } while (is_kvmppc_resume_guest(r));
198
199 + /* Restore userspace EBB and other register values */
200 + if (cpu_has_feature(CPU_FTR_ARCH_207S)) {
201 + mtspr(SPRN_EBBHR, ebb_regs[0]);
202 + mtspr(SPRN_EBBRR, ebb_regs[1]);
203 + mtspr(SPRN_BESCR, ebb_regs[2]);
204 + mtspr(SPRN_TAR, user_tar);
205 + mtspr(SPRN_FSCR, current->thread.fscr);
206 + }
207 + mtspr(SPRN_VRSAVE, user_vrsave);
208 +
209 out:
210 vcpu->arch.state = KVMPPC_VCPU_NOTREADY;
211 atomic_dec(&vcpu->kvm->arch.vcpus_running);
212 diff --git a/arch/powerpc/kvm/book3s_hv_interrupts.S b/arch/powerpc/kvm/book3s_hv_interrupts.S
213 index 0fdc4a28970b..404deb512844 100644
214 --- a/arch/powerpc/kvm/book3s_hv_interrupts.S
215 +++ b/arch/powerpc/kvm/book3s_hv_interrupts.S
216 @@ -121,10 +121,20 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
217 * Put whatever is in the decrementer into the
218 * hypervisor decrementer.
219 */
220 +BEGIN_FTR_SECTION
221 + ld r5, HSTATE_KVM_VCORE(r13)
222 + ld r6, VCORE_KVM(r5)
223 + ld r9, KVM_HOST_LPCR(r6)
224 + andis. r9, r9, LPCR_LD@h
225 +END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
226 mfspr r8,SPRN_DEC
227 mftb r7
228 - mtspr SPRN_HDEC,r8
229 +BEGIN_FTR_SECTION
230 + /* On POWER9, don't sign-extend if host LPCR[LD] bit is set */
231 + bne 32f
232 +END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
233 extsw r8,r8
234 +32: mtspr SPRN_HDEC,r8
235 add r8,r8,r7
236 std r8,HSTATE_DECEXP(r13)
237
238 diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
239 index 7c6477d1840a..9250866cc900 100644
240 --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
241 +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
242 @@ -31,12 +31,29 @@
243 #include <asm/tm.h>
244 #include <asm/opal.h>
245
246 +/* Sign-extend HDEC if not on POWER9 */
247 +#define EXTEND_HDEC(reg) \
248 +BEGIN_FTR_SECTION; \
249 + extsw reg, reg; \
250 +END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
251 +
252 #define VCPU_GPRS_TM(reg) (((reg) * ULONG_SIZE) + VCPU_GPR_TM)
253
254 /* Values in HSTATE_NAPPING(r13) */
255 #define NAPPING_CEDE 1
256 #define NAPPING_NOVCPU 2
257
258 +/* Stack frame offsets for kvmppc_hv_entry */
259 +#define SFS 144
260 +#define STACK_SLOT_TRAP (SFS-4)
261 +#define STACK_SLOT_TID (SFS-16)
262 +#define STACK_SLOT_PSSCR (SFS-24)
263 +#define STACK_SLOT_PID (SFS-32)
264 +#define STACK_SLOT_IAMR (SFS-40)
265 +#define STACK_SLOT_CIABR (SFS-48)
266 +#define STACK_SLOT_DAWR (SFS-56)
267 +#define STACK_SLOT_DAWRX (SFS-64)
268 +
269 /*
270 * Call kvmppc_hv_entry in real mode.
271 * Must be called with interrupts hard-disabled.
272 @@ -213,6 +230,8 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
273 kvmppc_primary_no_guest:
274 /* We handle this much like a ceded vcpu */
275 /* put the HDEC into the DEC, since HDEC interrupts don't wake us */
276 + /* HDEC may be larger than DEC for arch >= v3.00, but since the */
277 + /* HDEC value came from DEC in the first place, it will fit */
278 mfspr r3, SPRN_HDEC
279 mtspr SPRN_DEC, r3
280 /*
281 @@ -294,8 +313,9 @@ kvm_novcpu_wakeup:
282
283 /* See if our timeslice has expired (HDEC is negative) */
284 mfspr r0, SPRN_HDEC
285 + EXTEND_HDEC(r0)
286 li r12, BOOK3S_INTERRUPT_HV_DECREMENTER
287 - cmpwi r0, 0
288 + cmpdi r0, 0
289 blt kvm_novcpu_exit
290
291 /* Got an IPI but other vcpus aren't yet exiting, must be a latecomer */
292 @@ -318,10 +338,10 @@ kvm_novcpu_exit:
293 bl kvmhv_accumulate_time
294 #endif
295 13: mr r3, r12
296 - stw r12, 112-4(r1)
297 + stw r12, STACK_SLOT_TRAP(r1)
298 bl kvmhv_commence_exit
299 nop
300 - lwz r12, 112-4(r1)
301 + lwz r12, STACK_SLOT_TRAP(r1)
302 b kvmhv_switch_to_host
303
304 /*
305 @@ -389,8 +409,8 @@ kvm_secondary_got_guest:
306 lbz r4, HSTATE_PTID(r13)
307 cmpwi r4, 0
308 bne 63f
309 - lis r6, 0x7fff
310 - ori r6, r6, 0xffff
311 + LOAD_REG_ADDR(r6, decrementer_max)
312 + ld r6, 0(r6)
313 mtspr SPRN_HDEC, r6
314 /* and set per-LPAR registers, if doing dynamic micro-threading */
315 ld r6, HSTATE_SPLIT_MODE(r13)
316 @@ -544,11 +564,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
317 * *
318 *****************************************************************************/
319
320 -/* Stack frame offsets */
321 -#define STACK_SLOT_TID (112-16)
322 -#define STACK_SLOT_PSSCR (112-24)
323 -#define STACK_SLOT_PID (112-32)
324 -
325 .global kvmppc_hv_entry
326 kvmppc_hv_entry:
327
328 @@ -564,7 +579,7 @@ kvmppc_hv_entry:
329 */
330 mflr r0
331 std r0, PPC_LR_STKOFF(r1)
332 - stdu r1, -112(r1)
333 + stdu r1, -SFS(r1)
334
335 /* Save R1 in the PACA */
336 std r1, HSTATE_HOST_R1(r13)
337 @@ -748,10 +763,20 @@ BEGIN_FTR_SECTION
338 mfspr r5, SPRN_TIDR
339 mfspr r6, SPRN_PSSCR
340 mfspr r7, SPRN_PID
341 + mfspr r8, SPRN_IAMR
342 std r5, STACK_SLOT_TID(r1)
343 std r6, STACK_SLOT_PSSCR(r1)
344 std r7, STACK_SLOT_PID(r1)
345 + std r8, STACK_SLOT_IAMR(r1)
346 END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
347 +BEGIN_FTR_SECTION
348 + mfspr r5, SPRN_CIABR
349 + mfspr r6, SPRN_DAWR
350 + mfspr r7, SPRN_DAWRX
351 + std r5, STACK_SLOT_CIABR(r1)
352 + std r6, STACK_SLOT_DAWR(r1)
353 + std r7, STACK_SLOT_DAWRX(r1)
354 +END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
355
356 BEGIN_FTR_SECTION
357 /* Set partition DABR */
358 @@ -967,7 +992,8 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_300)
359
360 /* Check if HDEC expires soon */
361 mfspr r3, SPRN_HDEC
362 - cmpwi r3, 512 /* 1 microsecond */
363 + EXTEND_HDEC(r3)
364 + cmpdi r3, 512 /* 1 microsecond */
365 blt hdec_soon
366
367 deliver_guest_interrupt:
368 @@ -1451,11 +1477,10 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_300)
369 * set by the guest could disrupt the host.
370 */
371 li r0, 0
372 - mtspr SPRN_IAMR, r0
373 - mtspr SPRN_CIABR, r0
374 - mtspr SPRN_DAWRX, r0
375 + mtspr SPRN_PSPB, r0
376 mtspr SPRN_WORT, r0
377 BEGIN_FTR_SECTION
378 + mtspr SPRN_IAMR, r0
379 mtspr SPRN_TCSCR, r0
380 /* Set MMCRS to 1<<31 to freeze and disable the SPMC counters */
381 li r0, 1
382 @@ -1471,6 +1496,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
383 std r6,VCPU_UAMOR(r9)
384 li r6,0
385 mtspr SPRN_AMR,r6
386 + mtspr SPRN_UAMOR, r6
387
388 /* Switch DSCR back to host value */
389 mfspr r8, SPRN_DSCR
390 @@ -1616,12 +1642,22 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
391
392 /* Restore host values of some registers */
393 BEGIN_FTR_SECTION
394 + ld r5, STACK_SLOT_CIABR(r1)
395 + ld r6, STACK_SLOT_DAWR(r1)
396 + ld r7, STACK_SLOT_DAWRX(r1)
397 + mtspr SPRN_CIABR, r5
398 + mtspr SPRN_DAWR, r6
399 + mtspr SPRN_DAWRX, r7
400 +END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
401 +BEGIN_FTR_SECTION
402 ld r5, STACK_SLOT_TID(r1)
403 ld r6, STACK_SLOT_PSSCR(r1)
404 ld r7, STACK_SLOT_PID(r1)
405 + ld r8, STACK_SLOT_IAMR(r1)
406 mtspr SPRN_TIDR, r5
407 mtspr SPRN_PSSCR, r6
408 mtspr SPRN_PID, r7
409 + mtspr SPRN_IAMR, r8
410 END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
411 BEGIN_FTR_SECTION
412 PPC_INVALIDATE_ERAT
413 @@ -1765,8 +1801,8 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_TYPE_RADIX)
414 li r0, KVM_GUEST_MODE_NONE
415 stb r0, HSTATE_IN_GUEST(r13)
416
417 - ld r0, 112+PPC_LR_STKOFF(r1)
418 - addi r1, r1, 112
419 + ld r0, SFS+PPC_LR_STKOFF(r1)
420 + addi r1, r1, SFS
421 mtlr r0
422 blr
423
424 @@ -2308,12 +2344,13 @@ END_FTR_SECTION_IFSET(CPU_FTR_TM)
425 mfspr r3, SPRN_DEC
426 mfspr r4, SPRN_HDEC
427 mftb r5
428 - cmpw r3, r4
429 + extsw r3, r3
430 + EXTEND_HDEC(r4)
431 + cmpd r3, r4
432 ble 67f
433 mtspr SPRN_DEC, r4
434 67:
435 /* save expiry time of guest decrementer */
436 - extsw r3, r3
437 add r3, r3, r5
438 ld r4, HSTATE_KVM_VCPU(r13)
439 ld r5, HSTATE_KVM_VCORE(r13)
440 diff --git a/arch/powerpc/perf/perf_regs.c b/arch/powerpc/perf/perf_regs.c
441 index cbd82fde5770..09ceea6175ba 100644
442 --- a/arch/powerpc/perf/perf_regs.c
443 +++ b/arch/powerpc/perf/perf_regs.c
444 @@ -101,5 +101,6 @@ void perf_get_regs_user(struct perf_regs *regs_user,
445 struct pt_regs *regs_user_copy)
446 {
447 regs_user->regs = task_pt_regs(current);
448 - regs_user->abi = perf_reg_abi(current);
449 + regs_user->abi = (regs_user->regs) ? perf_reg_abi(current) :
450 + PERF_SAMPLE_REGS_ABI_NONE;
451 }
452 diff --git a/arch/s390/kvm/gaccess.c b/arch/s390/kvm/gaccess.c
453 index ddbffb715b40..e92f5bd9d0b4 100644
454 --- a/arch/s390/kvm/gaccess.c
455 +++ b/arch/s390/kvm/gaccess.c
456 @@ -977,11 +977,12 @@ static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
457 ptr = asce.origin * 4096;
458 if (asce.r) {
459 *fake = 1;
460 + ptr = 0;
461 asce.dt = ASCE_TYPE_REGION1;
462 }
463 switch (asce.dt) {
464 case ASCE_TYPE_REGION1:
465 - if (vaddr.rfx01 > asce.tl && !asce.r)
466 + if (vaddr.rfx01 > asce.tl && !*fake)
467 return PGM_REGION_FIRST_TRANS;
468 break;
469 case ASCE_TYPE_REGION2:
470 @@ -1009,8 +1010,7 @@ static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
471 union region1_table_entry rfte;
472
473 if (*fake) {
474 - /* offset in 16EB guest memory block */
475 - ptr = ptr + ((unsigned long) vaddr.rsx << 53UL);
476 + ptr += (unsigned long) vaddr.rfx << 53;
477 rfte.val = ptr;
478 goto shadow_r2t;
479 }
480 @@ -1036,8 +1036,7 @@ static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
481 union region2_table_entry rste;
482
483 if (*fake) {
484 - /* offset in 8PB guest memory block */
485 - ptr = ptr + ((unsigned long) vaddr.rtx << 42UL);
486 + ptr += (unsigned long) vaddr.rsx << 42;
487 rste.val = ptr;
488 goto shadow_r3t;
489 }
490 @@ -1064,8 +1063,7 @@ static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
491 union region3_table_entry rtte;
492
493 if (*fake) {
494 - /* offset in 4TB guest memory block */
495 - ptr = ptr + ((unsigned long) vaddr.sx << 31UL);
496 + ptr += (unsigned long) vaddr.rtx << 31;
497 rtte.val = ptr;
498 goto shadow_sgt;
499 }
500 @@ -1101,8 +1099,7 @@ static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
501 union segment_table_entry ste;
502
503 if (*fake) {
504 - /* offset in 2G guest memory block */
505 - ptr = ptr + ((unsigned long) vaddr.sx << 20UL);
506 + ptr += (unsigned long) vaddr.sx << 20;
507 ste.val = ptr;
508 goto shadow_pgt;
509 }
510 diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
511 index eb1484c86bb4..65c2ca578556 100644
512 --- a/arch/x86/events/intel/core.c
513 +++ b/arch/x86/events/intel/core.c
514 @@ -431,11 +431,11 @@ static __initconst const u64 skl_hw_cache_event_ids
515 [ C(DTLB) ] = {
516 [ C(OP_READ) ] = {
517 [ C(RESULT_ACCESS) ] = 0x81d0, /* MEM_INST_RETIRED.ALL_LOADS */
518 - [ C(RESULT_MISS) ] = 0x608, /* DTLB_LOAD_MISSES.WALK_COMPLETED */
519 + [ C(RESULT_MISS) ] = 0xe08, /* DTLB_LOAD_MISSES.WALK_COMPLETED */
520 },
521 [ C(OP_WRITE) ] = {
522 [ C(RESULT_ACCESS) ] = 0x82d0, /* MEM_INST_RETIRED.ALL_STORES */
523 - [ C(RESULT_MISS) ] = 0x649, /* DTLB_STORE_MISSES.WALK_COMPLETED */
524 + [ C(RESULT_MISS) ] = 0xe49, /* DTLB_STORE_MISSES.WALK_COMPLETED */
525 },
526 [ C(OP_PREFETCH) ] = {
527 [ C(RESULT_ACCESS) ] = 0x0,
528 diff --git a/arch/x86/include/asm/kvm_emulate.h b/arch/x86/include/asm/kvm_emulate.h
529 index 3e8c287090e4..d5f83cda1dea 100644
530 --- a/arch/x86/include/asm/kvm_emulate.h
531 +++ b/arch/x86/include/asm/kvm_emulate.h
532 @@ -294,6 +294,7 @@ struct x86_emulate_ctxt {
533
534 bool perm_ok; /* do not check permissions if true */
535 bool ud; /* inject an #UD if host doesn't support insn */
536 + bool tf; /* TF value before instruction (after for syscall/sysret) */
537
538 bool have_exception;
539 struct x86_exception exception;
540 diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
541 index 45c7306c8780..ce7f80baa664 100644
542 --- a/arch/x86/kvm/emulate.c
543 +++ b/arch/x86/kvm/emulate.c
544 @@ -2742,6 +2742,7 @@ static int em_syscall(struct x86_emulate_ctxt *ctxt)
545 ctxt->eflags &= ~(X86_EFLAGS_VM | X86_EFLAGS_IF);
546 }
547
548 + ctxt->tf = (ctxt->eflags & X86_EFLAGS_TF) != 0;
549 return X86EMUL_CONTINUE;
550 }
551
552 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
553 index 6557c790c8c1..dd1fe338c5f5 100644
554 --- a/arch/x86/kvm/x86.c
555 +++ b/arch/x86/kvm/x86.c
556 @@ -5330,6 +5330,8 @@ static void init_emulate_ctxt(struct kvm_vcpu *vcpu)
557 kvm_x86_ops->get_cs_db_l_bits(vcpu, &cs_db, &cs_l);
558
559 ctxt->eflags = kvm_get_rflags(vcpu);
560 + ctxt->tf = (ctxt->eflags & X86_EFLAGS_TF) != 0;
561 +
562 ctxt->eip = kvm_rip_read(vcpu);
563 ctxt->mode = (!is_protmode(vcpu)) ? X86EMUL_MODE_REAL :
564 (ctxt->eflags & X86_EFLAGS_VM) ? X86EMUL_MODE_VM86 :
565 @@ -5546,36 +5548,25 @@ static int kvm_vcpu_check_hw_bp(unsigned long addr, u32 type, u32 dr7,
566 return dr6;
567 }
568
569 -static void kvm_vcpu_check_singlestep(struct kvm_vcpu *vcpu, unsigned long rflags, int *r)
570 +static void kvm_vcpu_do_singlestep(struct kvm_vcpu *vcpu, int *r)
571 {
572 struct kvm_run *kvm_run = vcpu->run;
573
574 - /*
575 - * rflags is the old, "raw" value of the flags. The new value has
576 - * not been saved yet.
577 - *
578 - * This is correct even for TF set by the guest, because "the
579 - * processor will not generate this exception after the instruction
580 - * that sets the TF flag".
581 - */
582 - if (unlikely(rflags & X86_EFLAGS_TF)) {
583 - if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) {
584 - kvm_run->debug.arch.dr6 = DR6_BS | DR6_FIXED_1 |
585 - DR6_RTM;
586 - kvm_run->debug.arch.pc = vcpu->arch.singlestep_rip;
587 - kvm_run->debug.arch.exception = DB_VECTOR;
588 - kvm_run->exit_reason = KVM_EXIT_DEBUG;
589 - *r = EMULATE_USER_EXIT;
590 - } else {
591 - /*
592 - * "Certain debug exceptions may clear bit 0-3. The
593 - * remaining contents of the DR6 register are never
594 - * cleared by the processor".
595 - */
596 - vcpu->arch.dr6 &= ~15;
597 - vcpu->arch.dr6 |= DR6_BS | DR6_RTM;
598 - kvm_queue_exception(vcpu, DB_VECTOR);
599 - }
600 + if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) {
601 + kvm_run->debug.arch.dr6 = DR6_BS | DR6_FIXED_1 | DR6_RTM;
602 + kvm_run->debug.arch.pc = vcpu->arch.singlestep_rip;
603 + kvm_run->debug.arch.exception = DB_VECTOR;
604 + kvm_run->exit_reason = KVM_EXIT_DEBUG;
605 + *r = EMULATE_USER_EXIT;
606 + } else {
607 + /*
608 + * "Certain debug exceptions may clear bit 0-3. The
609 + * remaining contents of the DR6 register are never
610 + * cleared by the processor".
611 + */
612 + vcpu->arch.dr6 &= ~15;
613 + vcpu->arch.dr6 |= DR6_BS | DR6_RTM;
614 + kvm_queue_exception(vcpu, DB_VECTOR);
615 }
616 }
617
618 @@ -5585,7 +5576,17 @@ int kvm_skip_emulated_instruction(struct kvm_vcpu *vcpu)
619 int r = EMULATE_DONE;
620
621 kvm_x86_ops->skip_emulated_instruction(vcpu);
622 - kvm_vcpu_check_singlestep(vcpu, rflags, &r);
623 +
624 + /*
625 + * rflags is the old, "raw" value of the flags. The new value has
626 + * not been saved yet.
627 + *
628 + * This is correct even for TF set by the guest, because "the
629 + * processor will not generate this exception after the instruction
630 + * that sets the TF flag".
631 + */
632 + if (unlikely(rflags & X86_EFLAGS_TF))
633 + kvm_vcpu_do_singlestep(vcpu, &r);
634 return r == EMULATE_DONE;
635 }
636 EXPORT_SYMBOL_GPL(kvm_skip_emulated_instruction);
637 @@ -5746,8 +5747,9 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu,
638 if (vcpu->arch.hflags != ctxt->emul_flags)
639 kvm_set_hflags(vcpu, ctxt->emul_flags);
640 kvm_rip_write(vcpu, ctxt->eip);
641 - if (r == EMULATE_DONE)
642 - kvm_vcpu_check_singlestep(vcpu, rflags, &r);
643 + if (r == EMULATE_DONE &&
644 + (ctxt->tf || (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP)))
645 + kvm_vcpu_do_singlestep(vcpu, &r);
646 if (!ctxt->have_exception ||
647 exception_type(ctxt->exception.vector) == EXCPT_TRAP)
648 __kvm_set_rflags(vcpu, ctxt->eflags);
649 diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
650 index 2433569b02ef..bc9adb4a2fd7 100644
651 --- a/drivers/acpi/scan.c
652 +++ b/drivers/acpi/scan.c
653 @@ -1433,6 +1433,37 @@ static void acpi_init_coherency(struct acpi_device *adev)
654 adev->flags.coherent_dma = cca;
655 }
656
657 +static int acpi_check_spi_i2c_slave(struct acpi_resource *ares, void *data)
658 +{
659 + bool *is_spi_i2c_slave_p = data;
660 +
661 + if (ares->type != ACPI_RESOURCE_TYPE_SERIAL_BUS)
662 + return 1;
663 +
664 + /*
665 + * devices that are connected to UART still need to be enumerated to
666 + * platform bus
667 + */
668 + if (ares->data.common_serial_bus.type != ACPI_RESOURCE_SERIAL_TYPE_UART)
669 + *is_spi_i2c_slave_p = true;
670 +
671 + /* no need to do more checking */
672 + return -1;
673 +}
674 +
675 +static bool acpi_is_spi_i2c_slave(struct acpi_device *device)
676 +{
677 + struct list_head resource_list;
678 + bool is_spi_i2c_slave = false;
679 +
680 + INIT_LIST_HEAD(&resource_list);
681 + acpi_dev_get_resources(device, &resource_list, acpi_check_spi_i2c_slave,
682 + &is_spi_i2c_slave);
683 + acpi_dev_free_resource_list(&resource_list);
684 +
685 + return is_spi_i2c_slave;
686 +}
687 +
688 void acpi_init_device_object(struct acpi_device *device, acpi_handle handle,
689 int type, unsigned long long sta)
690 {
691 @@ -1448,6 +1479,7 @@ void acpi_init_device_object(struct acpi_device *device, acpi_handle handle,
692 acpi_bus_get_flags(device);
693 device->flags.match_driver = false;
694 device->flags.initialized = true;
695 + device->flags.spi_i2c_slave = acpi_is_spi_i2c_slave(device);
696 acpi_device_clear_enumerated(device);
697 device_initialize(&device->dev);
698 dev_set_uevent_suppress(&device->dev, true);
699 @@ -1732,38 +1764,13 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl_not_used,
700 return AE_OK;
701 }
702
703 -static int acpi_check_spi_i2c_slave(struct acpi_resource *ares, void *data)
704 -{
705 - bool *is_spi_i2c_slave_p = data;
706 -
707 - if (ares->type != ACPI_RESOURCE_TYPE_SERIAL_BUS)
708 - return 1;
709 -
710 - /*
711 - * devices that are connected to UART still need to be enumerated to
712 - * platform bus
713 - */
714 - if (ares->data.common_serial_bus.type != ACPI_RESOURCE_SERIAL_TYPE_UART)
715 - *is_spi_i2c_slave_p = true;
716 -
717 - /* no need to do more checking */
718 - return -1;
719 -}
720 -
721 static void acpi_default_enumeration(struct acpi_device *device)
722 {
723 - struct list_head resource_list;
724 - bool is_spi_i2c_slave = false;
725 -
726 /*
727 * Do not enumerate SPI/I2C slaves as they will be enumerated by their
728 * respective parents.
729 */
730 - INIT_LIST_HEAD(&resource_list);
731 - acpi_dev_get_resources(device, &resource_list, acpi_check_spi_i2c_slave,
732 - &is_spi_i2c_slave);
733 - acpi_dev_free_resource_list(&resource_list);
734 - if (!is_spi_i2c_slave) {
735 + if (!device->flags.spi_i2c_slave) {
736 acpi_create_platform_device(device, NULL);
737 acpi_device_set_enumerated(device);
738 } else {
739 @@ -1857,7 +1864,7 @@ static void acpi_bus_attach(struct acpi_device *device)
740 return;
741
742 device->flags.match_driver = true;
743 - if (ret > 0) {
744 + if (ret > 0 && !device->flags.spi_i2c_slave) {
745 acpi_device_set_enumerated(device);
746 goto ok;
747 }
748 @@ -1866,7 +1873,7 @@ static void acpi_bus_attach(struct acpi_device *device)
749 if (ret < 0)
750 return;
751
752 - if (ret > 0 || !device->pnp.type.platform_id)
753 + if (!device->pnp.type.platform_id && !device->flags.spi_i2c_slave)
754 acpi_device_set_enumerated(device);
755 else
756 acpi_default_enumeration(device);
757 diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
758 index 726c32e35db9..fbe0dfdffc0d 100644
759 --- a/drivers/block/xen-blkback/blkback.c
760 +++ b/drivers/block/xen-blkback/blkback.c
761 @@ -1436,34 +1436,35 @@ static int dispatch_rw_block_io(struct xen_blkif_ring *ring,
762 static void make_response(struct xen_blkif_ring *ring, u64 id,
763 unsigned short op, int st)
764 {
765 - struct blkif_response resp;
766 + struct blkif_response *resp;
767 unsigned long flags;
768 union blkif_back_rings *blk_rings;
769 int notify;
770
771 - resp.id = id;
772 - resp.operation = op;
773 - resp.status = st;
774 -
775 spin_lock_irqsave(&ring->blk_ring_lock, flags);
776 blk_rings = &ring->blk_rings;
777 /* Place on the response ring for the relevant domain. */
778 switch (ring->blkif->blk_protocol) {
779 case BLKIF_PROTOCOL_NATIVE:
780 - memcpy(RING_GET_RESPONSE(&blk_rings->native, blk_rings->native.rsp_prod_pvt),
781 - &resp, sizeof(resp));
782 + resp = RING_GET_RESPONSE(&blk_rings->native,
783 + blk_rings->native.rsp_prod_pvt);
784 break;
785 case BLKIF_PROTOCOL_X86_32:
786 - memcpy(RING_GET_RESPONSE(&blk_rings->x86_32, blk_rings->x86_32.rsp_prod_pvt),
787 - &resp, sizeof(resp));
788 + resp = RING_GET_RESPONSE(&blk_rings->x86_32,
789 + blk_rings->x86_32.rsp_prod_pvt);
790 break;
791 case BLKIF_PROTOCOL_X86_64:
792 - memcpy(RING_GET_RESPONSE(&blk_rings->x86_64, blk_rings->x86_64.rsp_prod_pvt),
793 - &resp, sizeof(resp));
794 + resp = RING_GET_RESPONSE(&blk_rings->x86_64,
795 + blk_rings->x86_64.rsp_prod_pvt);
796 break;
797 default:
798 BUG();
799 }
800 +
801 + resp->id = id;
802 + resp->operation = op;
803 + resp->status = st;
804 +
805 blk_rings->common.rsp_prod_pvt++;
806 RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&blk_rings->common, notify);
807 spin_unlock_irqrestore(&ring->blk_ring_lock, flags);
808 diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h
809 index dea61f6ab8cb..ecb35fe8ca8d 100644
810 --- a/drivers/block/xen-blkback/common.h
811 +++ b/drivers/block/xen-blkback/common.h
812 @@ -75,9 +75,8 @@ extern unsigned int xenblk_max_queues;
813 struct blkif_common_request {
814 char dummy;
815 };
816 -struct blkif_common_response {
817 - char dummy;
818 -};
819 +
820 +/* i386 protocol version */
821
822 struct blkif_x86_32_request_rw {
823 uint8_t nr_segments; /* number of segments */
824 @@ -129,14 +128,6 @@ struct blkif_x86_32_request {
825 } u;
826 } __attribute__((__packed__));
827
828 -/* i386 protocol version */
829 -#pragma pack(push, 4)
830 -struct blkif_x86_32_response {
831 - uint64_t id; /* copied from request */
832 - uint8_t operation; /* copied from request */
833 - int16_t status; /* BLKIF_RSP_??? */
834 -};
835 -#pragma pack(pop)
836 /* x86_64 protocol version */
837
838 struct blkif_x86_64_request_rw {
839 @@ -193,18 +184,12 @@ struct blkif_x86_64_request {
840 } u;
841 } __attribute__((__packed__));
842
843 -struct blkif_x86_64_response {
844 - uint64_t __attribute__((__aligned__(8))) id;
845 - uint8_t operation; /* copied from request */
846 - int16_t status; /* BLKIF_RSP_??? */
847 -};
848 -
849 DEFINE_RING_TYPES(blkif_common, struct blkif_common_request,
850 - struct blkif_common_response);
851 + struct blkif_response);
852 DEFINE_RING_TYPES(blkif_x86_32, struct blkif_x86_32_request,
853 - struct blkif_x86_32_response);
854 + struct blkif_response __packed);
855 DEFINE_RING_TYPES(blkif_x86_64, struct blkif_x86_64_request,
856 - struct blkif_x86_64_response);
857 + struct blkif_response);
858
859 union blkif_back_rings {
860 struct blkif_back_ring native;
861 @@ -281,6 +266,7 @@ struct xen_blkif_ring {
862
863 wait_queue_head_t wq;
864 atomic_t inflight;
865 + bool active;
866 /* One thread per blkif ring. */
867 struct task_struct *xenblkd;
868 unsigned int waiting_reqs;
869 diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
870 index 8fe61b5dc5a6..dcabf52425ff 100644
871 --- a/drivers/block/xen-blkback/xenbus.c
872 +++ b/drivers/block/xen-blkback/xenbus.c
873 @@ -159,7 +159,7 @@ static int xen_blkif_alloc_rings(struct xen_blkif *blkif)
874 init_waitqueue_head(&ring->shutdown_wq);
875 ring->blkif = blkif;
876 ring->st_print = jiffies;
877 - xen_blkif_get(blkif);
878 + ring->active = true;
879 }
880
881 return 0;
882 @@ -249,6 +249,9 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
883 struct xen_blkif_ring *ring = &blkif->rings[r];
884 unsigned int i = 0;
885
886 + if (!ring->active)
887 + continue;
888 +
889 if (ring->xenblkd) {
890 kthread_stop(ring->xenblkd);
891 wake_up(&ring->shutdown_wq);
892 @@ -296,7 +299,7 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
893 BUG_ON(ring->free_pages_num != 0);
894 BUG_ON(ring->persistent_gnt_c != 0);
895 WARN_ON(i != (XEN_BLKIF_REQS_PER_PAGE * blkif->nr_ring_pages));
896 - xen_blkif_put(blkif);
897 + ring->active = false;
898 }
899 blkif->nr_ring_pages = 0;
900 /*
901 diff --git a/drivers/char/random.c b/drivers/char/random.c
902 index 2291e6224ed3..8944a844ca95 100644
903 --- a/drivers/char/random.c
904 +++ b/drivers/char/random.c
905 @@ -803,13 +803,13 @@ static int crng_fast_load(const char *cp, size_t len)
906 p[crng_init_cnt % CHACHA20_KEY_SIZE] ^= *cp;
907 cp++; crng_init_cnt++; len--;
908 }
909 + spin_unlock_irqrestore(&primary_crng.lock, flags);
910 if (crng_init_cnt >= CRNG_INIT_CNT_THRESH) {
911 invalidate_batched_entropy();
912 crng_init = 1;
913 wake_up_interruptible(&crng_init_wait);
914 pr_notice("random: fast init done\n");
915 }
916 - spin_unlock_irqrestore(&primary_crng.lock, flags);
917 return 1;
918 }
919
920 @@ -841,6 +841,7 @@ static void crng_reseed(struct crng_state *crng, struct entropy_store *r)
921 }
922 memzero_explicit(&buf, sizeof(buf));
923 crng->init_time = jiffies;
924 + spin_unlock_irqrestore(&primary_crng.lock, flags);
925 if (crng == &primary_crng && crng_init < 2) {
926 invalidate_batched_entropy();
927 crng_init = 2;
928 @@ -848,7 +849,6 @@ static void crng_reseed(struct crng_state *crng, struct entropy_store *r)
929 wake_up_interruptible(&crng_init_wait);
930 pr_notice("random: crng init done\n");
931 }
932 - spin_unlock_irqrestore(&primary_crng.lock, flags);
933 }
934
935 static inline void crng_wait_ready(void)
936 @@ -2037,8 +2037,8 @@ static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_u64);
937 u64 get_random_u64(void)
938 {
939 u64 ret;
940 - bool use_lock = crng_init < 2;
941 - unsigned long flags;
942 + bool use_lock = READ_ONCE(crng_init) < 2;
943 + unsigned long flags = 0;
944 struct batched_entropy *batch;
945
946 #if BITS_PER_LONG == 64
947 @@ -2069,8 +2069,8 @@ static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_u32);
948 u32 get_random_u32(void)
949 {
950 u32 ret;
951 - bool use_lock = crng_init < 2;
952 - unsigned long flags;
953 + bool use_lock = READ_ONCE(crng_init) < 2;
954 + unsigned long flags = 0;
955 struct batched_entropy *batch;
956
957 if (arch_get_random_int(&ret))
958 diff --git a/drivers/clk/sunxi-ng/ccu-sun5i.c b/drivers/clk/sunxi-ng/ccu-sun5i.c
959 index 06edaa523479..2999618e1a59 100644
960 --- a/drivers/clk/sunxi-ng/ccu-sun5i.c
961 +++ b/drivers/clk/sunxi-ng/ccu-sun5i.c
962 @@ -243,7 +243,7 @@ static SUNXI_CCU_GATE(ahb_ss_clk, "ahb-ss", "ahb",
963 static SUNXI_CCU_GATE(ahb_dma_clk, "ahb-dma", "ahb",
964 0x060, BIT(6), 0);
965 static SUNXI_CCU_GATE(ahb_bist_clk, "ahb-bist", "ahb",
966 - 0x060, BIT(6), 0);
967 + 0x060, BIT(7), 0);
968 static SUNXI_CCU_GATE(ahb_mmc0_clk, "ahb-mmc0", "ahb",
969 0x060, BIT(8), 0);
970 static SUNXI_CCU_GATE(ahb_mmc1_clk, "ahb-mmc1", "ahb",
971 diff --git a/drivers/clk/sunxi-ng/ccu-sun6i-a31.c b/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
972 index 89e68d29bf45..df97e25aec76 100644
973 --- a/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
974 +++ b/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
975 @@ -556,7 +556,7 @@ static SUNXI_CCU_M_WITH_MUX_GATE(lcd0_ch1_clk, "lcd0-ch1", lcd_ch1_parents,
976 0x12c, 0, 4, 24, 3, BIT(31),
977 CLK_SET_RATE_PARENT);
978 static SUNXI_CCU_M_WITH_MUX_GATE(lcd1_ch1_clk, "lcd1-ch1", lcd_ch1_parents,
979 - 0x12c, 0, 4, 24, 3, BIT(31),
980 + 0x130, 0, 4, 24, 3, BIT(31),
981 CLK_SET_RATE_PARENT);
982
983 static const char * const csi_sclk_parents[] = { "pll-video0", "pll-video1",
984 diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c b/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c
985 index e58706b40ae9..6297add857b5 100644
986 --- a/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c
987 +++ b/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c
988 @@ -537,7 +537,7 @@ static struct ccu_reset_map sun8i_v3s_ccu_resets[] = {
989 [RST_BUS_EMAC] = { 0x2c0, BIT(17) },
990 [RST_BUS_HSTIMER] = { 0x2c0, BIT(19) },
991 [RST_BUS_SPI0] = { 0x2c0, BIT(20) },
992 - [RST_BUS_OTG] = { 0x2c0, BIT(23) },
993 + [RST_BUS_OTG] = { 0x2c0, BIT(24) },
994 [RST_BUS_EHCI0] = { 0x2c0, BIT(26) },
995 [RST_BUS_OHCI0] = { 0x2c0, BIT(29) },
996
997 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
998 index 56a86dd5789e..2de6475a684e 100644
999 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
1000 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
1001 @@ -693,6 +693,10 @@ int amdgpu_atombios_get_clock_info(struct amdgpu_device *adev)
1002 DRM_INFO("Changing default dispclk from %dMhz to 600Mhz\n",
1003 adev->clock.default_dispclk / 100);
1004 adev->clock.default_dispclk = 60000;
1005 + } else if (adev->clock.default_dispclk <= 60000) {
1006 + DRM_INFO("Changing default dispclk from %dMhz to 625Mhz\n",
1007 + adev->clock.default_dispclk / 100);
1008 + adev->clock.default_dispclk = 62500;
1009 }
1010 adev->clock.dp_extclk =
1011 le16_to_cpu(firmware_info->info_21.usUniphyDPModeExtClkFreq);
1012 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
1013 index b76cd699eb0d..b1f02277be79 100644
1014 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
1015 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
1016 @@ -422,6 +422,7 @@ static const struct pci_device_id pciidlist[] = {
1017 {0x1002, 0x6986, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12},
1018 {0x1002, 0x6987, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12},
1019 {0x1002, 0x6995, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12},
1020 + {0x1002, 0x6997, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12},
1021 {0x1002, 0x699F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12},
1022
1023 {0, 0, 0}
1024 diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c b/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c
1025 index 8c9bc75a9c2d..8a0818b23ea4 100644
1026 --- a/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c
1027 +++ b/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c
1028 @@ -165,7 +165,7 @@ void amdgpu_atombios_crtc_powergate(struct drm_crtc *crtc, int state)
1029 struct drm_device *dev = crtc->dev;
1030 struct amdgpu_device *adev = dev->dev_private;
1031 int index = GetIndexIntoMasterTable(COMMAND, EnableDispPowerGating);
1032 - ENABLE_DISP_POWER_GATING_PARAMETERS_V2_1 args;
1033 + ENABLE_DISP_POWER_GATING_PS_ALLOCATION args;
1034
1035 memset(&args, 0, sizeof(args));
1036
1037 @@ -178,7 +178,7 @@ void amdgpu_atombios_crtc_powergate(struct drm_crtc *crtc, int state)
1038 void amdgpu_atombios_crtc_powergate_init(struct amdgpu_device *adev)
1039 {
1040 int index = GetIndexIntoMasterTable(COMMAND, EnableDispPowerGating);
1041 - ENABLE_DISP_POWER_GATING_PARAMETERS_V2_1 args;
1042 + ENABLE_DISP_POWER_GATING_PS_ALLOCATION args;
1043
1044 memset(&args, 0, sizeof(args));
1045
1046 diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
1047 index 45464c8b797d..2a6059ce3842 100644
1048 --- a/drivers/gpu/drm/drm_connector.c
1049 +++ b/drivers/gpu/drm/drm_connector.c
1050 @@ -1169,21 +1169,6 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
1051 if (!connector)
1052 return -ENOENT;
1053
1054 - drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
1055 - encoder = drm_connector_get_encoder(connector);
1056 - if (encoder)
1057 - out_resp->encoder_id = encoder->base.id;
1058 - else
1059 - out_resp->encoder_id = 0;
1060 -
1061 - ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
1062 - (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
1063 - (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
1064 - &out_resp->count_props);
1065 - drm_modeset_unlock(&dev->mode_config.connection_mutex);
1066 - if (ret)
1067 - goto out_unref;
1068 -
1069 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++)
1070 if (connector->encoder_ids[i] != 0)
1071 encoders_count++;
1072 @@ -1196,7 +1181,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
1073 if (put_user(connector->encoder_ids[i],
1074 encoder_ptr + copied)) {
1075 ret = -EFAULT;
1076 - goto out_unref;
1077 + goto out;
1078 }
1079 copied++;
1080 }
1081 @@ -1240,15 +1225,32 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
1082 if (copy_to_user(mode_ptr + copied,
1083 &u_mode, sizeof(u_mode))) {
1084 ret = -EFAULT;
1085 + mutex_unlock(&dev->mode_config.mutex);
1086 +
1087 goto out;
1088 }
1089 copied++;
1090 }
1091 }
1092 out_resp->count_modes = mode_count;
1093 -out:
1094 mutex_unlock(&dev->mode_config.mutex);
1095 -out_unref:
1096 +
1097 + drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
1098 + encoder = drm_connector_get_encoder(connector);
1099 + if (encoder)
1100 + out_resp->encoder_id = encoder->base.id;
1101 + else
1102 + out_resp->encoder_id = 0;
1103 +
1104 + /* Only grab properties after probing, to make sure EDID and other
1105 + * properties reflect the latest status. */
1106 + ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
1107 + (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
1108 + (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
1109 + &out_resp->count_props);
1110 + drm_modeset_unlock(&dev->mode_config.connection_mutex);
1111 +
1112 +out:
1113 drm_connector_unreference(connector);
1114
1115 return ret;
1116 diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
1117 index 432480ff9d22..3178ba0c537c 100644
1118 --- a/drivers/gpu/drm/radeon/radeon_combios.c
1119 +++ b/drivers/gpu/drm/radeon/radeon_combios.c
1120 @@ -3393,6 +3393,13 @@ void radeon_combios_asic_init(struct drm_device *dev)
1121 rdev->pdev->subsystem_vendor == 0x103c &&
1122 rdev->pdev->subsystem_device == 0x280a)
1123 return;
1124 + /* quirk for rs4xx Toshiba Sattellite L20-183 latop to make it resume
1125 + * - it hangs on resume inside the dynclk 1 table.
1126 + */
1127 + if (rdev->family == CHIP_RS400 &&
1128 + rdev->pdev->subsystem_vendor == 0x1179 &&
1129 + rdev->pdev->subsystem_device == 0xff31)
1130 + return;
1131
1132 /* DYN CLK 1 */
1133 table = combios_get_table_offset(dev, COMBIOS_DYN_CLK_1_TABLE);
1134 diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
1135 index 4b0c388be3f5..5cdc39125b42 100644
1136 --- a/drivers/gpu/drm/radeon/radeon_device.c
1137 +++ b/drivers/gpu/drm/radeon/radeon_device.c
1138 @@ -136,6 +136,10 @@ static struct radeon_px_quirk radeon_px_quirk_list[] = {
1139 * https://bugzilla.kernel.org/show_bug.cgi?id=51381
1140 */
1141 { PCI_VENDOR_ID_ATI, 0x6840, 0x1043, 0x2122, RADEON_PX_QUIRK_DISABLE_PX },
1142 + /* Asus K53TK laptop with AMD A6-3420M APU and Radeon 7670m GPU
1143 + * https://bugs.freedesktop.org/show_bug.cgi?id=101491
1144 + */
1145 + { PCI_VENDOR_ID_ATI, 0x6741, 0x1043, 0x2122, RADEON_PX_QUIRK_DISABLE_PX },
1146 /* macbook pro 8.2 */
1147 { PCI_VENDOR_ID_ATI, 0x6741, PCI_VENDOR_ID_APPLE, 0x00e2, RADEON_PX_QUIRK_LONG_WAKEUP },
1148 { 0, 0, 0, 0, 0 },
1149 diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
1150 index b26c030926c1..d3793867adae 100644
1151 --- a/drivers/hid/hid-ids.h
1152 +++ b/drivers/hid/hid-ids.h
1153 @@ -315,6 +315,9 @@
1154 #define USB_VENDOR_ID_DELCOM 0x0fc5
1155 #define USB_DEVICE_ID_DELCOM_VISUAL_IND 0xb080
1156
1157 +#define USB_VENDOR_ID_DELL 0x413c
1158 +#define USB_DEVICE_ID_DELL_PIXART_USB_OPTICAL_MOUSE 0x301a
1159 +
1160 #define USB_VENDOR_ID_DELORME 0x1163
1161 #define USB_DEVICE_ID_DELORME_EARTHMATE 0x0100
1162 #define USB_DEVICE_ID_DELORME_EM_LT20 0x0200
1163 diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
1164 index a69a3c88ab29..9f9eb32ab7db 100644
1165 --- a/drivers/hid/usbhid/hid-quirks.c
1166 +++ b/drivers/hid/usbhid/hid-quirks.c
1167 @@ -84,6 +84,7 @@ static const struct hid_blacklist {
1168 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB_RAPIDFIRE, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
1169 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
1170 { USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_CREATIVE_SB_OMNI_SURROUND_51, HID_QUIRK_NOGET },
1171 + { USB_VENDOR_ID_DELL, USB_DEVICE_ID_DELL_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
1172 { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
1173 { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
1174 { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3, HID_QUIRK_MULTI_INPUT },
1175 diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
1176 index 09720d950686..f932a83b4990 100644
1177 --- a/drivers/input/serio/i8042-x86ia64io.h
1178 +++ b/drivers/input/serio/i8042-x86ia64io.h
1179 @@ -723,6 +723,13 @@ static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = {
1180 DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U574"),
1181 },
1182 },
1183 + {
1184 + /* Fujitsu UH554 laptop */
1185 + .matches = {
1186 + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
1187 + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK UH544"),
1188 + },
1189 + },
1190 { }
1191 };
1192
1193 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
1194 index 012194bc92d3..1238c4ec5215 100644
1195 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
1196 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
1197 @@ -2192,9 +2192,10 @@ static int cxgb_up(struct adapter *adap)
1198 {
1199 int err;
1200
1201 + mutex_lock(&uld_mutex);
1202 err = setup_sge_queues(adap);
1203 if (err)
1204 - goto out;
1205 + goto rel_lock;
1206 err = setup_rss(adap);
1207 if (err)
1208 goto freeq;
1209 @@ -2218,7 +2219,6 @@ static int cxgb_up(struct adapter *adap)
1210 goto irq_err;
1211 }
1212
1213 - mutex_lock(&uld_mutex);
1214 enable_rx(adap);
1215 t4_sge_start(adap);
1216 t4_intr_enable(adap);
1217 @@ -2231,13 +2231,15 @@ static int cxgb_up(struct adapter *adap)
1218 #endif
1219 /* Initialize hash mac addr list*/
1220 INIT_LIST_HEAD(&adap->mac_hlist);
1221 - out:
1222 return err;
1223 +
1224 irq_err:
1225 dev_err(adap->pdev_dev, "request_irq failed, err %d\n", err);
1226 freeq:
1227 t4_free_sge_resources(adap);
1228 - goto out;
1229 + rel_lock:
1230 + mutex_unlock(&uld_mutex);
1231 + return err;
1232 }
1233
1234 static void cxgb_down(struct adapter *adapter)
1235 diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
1236 index 9097e42bec2e..57297ba23987 100644
1237 --- a/drivers/net/phy/marvell.c
1238 +++ b/drivers/net/phy/marvell.c
1239 @@ -1127,8 +1127,6 @@ static int marvell_read_status_page(struct phy_device *phydev, int page)
1240 if (adv < 0)
1241 return adv;
1242
1243 - lpa &= adv;
1244 -
1245 if (status & MII_M1011_PHY_STATUS_FULLDUPLEX)
1246 phydev->duplex = DUPLEX_FULL;
1247 else
1248 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
1249 index c7c1e9906500..d231042f19d6 100644
1250 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
1251 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
1252 @@ -442,7 +442,7 @@ struct brcmf_fw {
1253 const char *nvram_name;
1254 u16 domain_nr;
1255 u16 bus_nr;
1256 - void (*done)(struct device *dev, const struct firmware *fw,
1257 + void (*done)(struct device *dev, int err, const struct firmware *fw,
1258 void *nvram_image, u32 nvram_len);
1259 };
1260
1261 @@ -477,52 +477,51 @@ static void brcmf_fw_request_nvram_done(const struct firmware *fw, void *ctx)
1262 if (!nvram && !(fwctx->flags & BRCMF_FW_REQ_NV_OPTIONAL))
1263 goto fail;
1264
1265 - fwctx->done(fwctx->dev, fwctx->code, nvram, nvram_length);
1266 + fwctx->done(fwctx->dev, 0, fwctx->code, nvram, nvram_length);
1267 kfree(fwctx);
1268 return;
1269
1270 fail:
1271 brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev));
1272 release_firmware(fwctx->code);
1273 - device_release_driver(fwctx->dev);
1274 + fwctx->done(fwctx->dev, -ENOENT, NULL, NULL, 0);
1275 kfree(fwctx);
1276 }
1277
1278 static void brcmf_fw_request_code_done(const struct firmware *fw, void *ctx)
1279 {
1280 struct brcmf_fw *fwctx = ctx;
1281 - int ret;
1282 + int ret = 0;
1283
1284 brcmf_dbg(TRACE, "enter: dev=%s\n", dev_name(fwctx->dev));
1285 - if (!fw)
1286 + if (!fw) {
1287 + ret = -ENOENT;
1288 goto fail;
1289 -
1290 - /* only requested code so done here */
1291 - if (!(fwctx->flags & BRCMF_FW_REQUEST_NVRAM)) {
1292 - fwctx->done(fwctx->dev, fw, NULL, 0);
1293 - kfree(fwctx);
1294 - return;
1295 }
1296 + /* only requested code so done here */
1297 + if (!(fwctx->flags & BRCMF_FW_REQUEST_NVRAM))
1298 + goto done;
1299 +
1300 fwctx->code = fw;
1301 ret = request_firmware_nowait(THIS_MODULE, true, fwctx->nvram_name,
1302 fwctx->dev, GFP_KERNEL, fwctx,
1303 brcmf_fw_request_nvram_done);
1304
1305 - if (!ret)
1306 - return;
1307 -
1308 - brcmf_fw_request_nvram_done(NULL, fwctx);
1309 + /* pass NULL to nvram callback for bcm47xx fallback */
1310 + if (ret)
1311 + brcmf_fw_request_nvram_done(NULL, fwctx);
1312 return;
1313
1314 fail:
1315 brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev));
1316 - device_release_driver(fwctx->dev);
1317 +done:
1318 + fwctx->done(fwctx->dev, ret, fw, NULL, 0);
1319 kfree(fwctx);
1320 }
1321
1322 int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags,
1323 const char *code, const char *nvram,
1324 - void (*fw_cb)(struct device *dev,
1325 + void (*fw_cb)(struct device *dev, int err,
1326 const struct firmware *fw,
1327 void *nvram_image, u32 nvram_len),
1328 u16 domain_nr, u16 bus_nr)
1329 @@ -555,7 +554,7 @@ int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags,
1330
1331 int brcmf_fw_get_firmwares(struct device *dev, u16 flags,
1332 const char *code, const char *nvram,
1333 - void (*fw_cb)(struct device *dev,
1334 + void (*fw_cb)(struct device *dev, int err,
1335 const struct firmware *fw,
1336 void *nvram_image, u32 nvram_len))
1337 {
1338 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
1339 index d3c9f0d52ae3..8fa4b7e1ab3d 100644
1340 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
1341 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
1342 @@ -73,13 +73,13 @@ void brcmf_fw_nvram_free(void *nvram);
1343 */
1344 int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags,
1345 const char *code, const char *nvram,
1346 - void (*fw_cb)(struct device *dev,
1347 + void (*fw_cb)(struct device *dev, int err,
1348 const struct firmware *fw,
1349 void *nvram_image, u32 nvram_len),
1350 u16 domain_nr, u16 bus_nr);
1351 int brcmf_fw_get_firmwares(struct device *dev, u16 flags,
1352 const char *code, const char *nvram,
1353 - void (*fw_cb)(struct device *dev,
1354 + void (*fw_cb)(struct device *dev, int err,
1355 const struct firmware *fw,
1356 void *nvram_image, u32 nvram_len));
1357
1358 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
1359 index 6fae4cf3f6ab..42c081d9fb9a 100644
1360 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
1361 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
1362 @@ -1650,16 +1650,23 @@ static const struct brcmf_buscore_ops brcmf_pcie_buscore_ops = {
1363 .write32 = brcmf_pcie_buscore_write32,
1364 };
1365
1366 -static void brcmf_pcie_setup(struct device *dev, const struct firmware *fw,
1367 +static void brcmf_pcie_setup(struct device *dev, int ret,
1368 + const struct firmware *fw,
1369 void *nvram, u32 nvram_len)
1370 {
1371 - struct brcmf_bus *bus = dev_get_drvdata(dev);
1372 - struct brcmf_pciedev *pcie_bus_dev = bus->bus_priv.pcie;
1373 - struct brcmf_pciedev_info *devinfo = pcie_bus_dev->devinfo;
1374 + struct brcmf_bus *bus;
1375 + struct brcmf_pciedev *pcie_bus_dev;
1376 + struct brcmf_pciedev_info *devinfo;
1377 struct brcmf_commonring **flowrings;
1378 - int ret;
1379 u32 i;
1380
1381 + /* check firmware loading result */
1382 + if (ret)
1383 + goto fail;
1384 +
1385 + bus = dev_get_drvdata(dev);
1386 + pcie_bus_dev = bus->bus_priv.pcie;
1387 + devinfo = pcie_bus_dev->devinfo;
1388 brcmf_pcie_attach(devinfo);
1389
1390 /* Some of the firmwares have the size of the memory of the device
1391 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
1392 index 65689469c5a1..67bff5b8cd60 100644
1393 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
1394 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
1395 @@ -3976,21 +3976,26 @@ static const struct brcmf_bus_ops brcmf_sdio_bus_ops = {
1396 .get_memdump = brcmf_sdio_bus_get_memdump,
1397 };
1398
1399 -static void brcmf_sdio_firmware_callback(struct device *dev,
1400 +static void brcmf_sdio_firmware_callback(struct device *dev, int err,
1401 const struct firmware *code,
1402 void *nvram, u32 nvram_len)
1403 {
1404 - struct brcmf_bus *bus_if = dev_get_drvdata(dev);
1405 - struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
1406 - struct brcmf_sdio *bus = sdiodev->bus;
1407 - int err = 0;
1408 + struct brcmf_bus *bus_if;
1409 + struct brcmf_sdio_dev *sdiodev;
1410 + struct brcmf_sdio *bus;
1411 u8 saveclk;
1412
1413 - brcmf_dbg(TRACE, "Enter: dev=%s\n", dev_name(dev));
1414 + brcmf_dbg(TRACE, "Enter: dev=%s, err=%d\n", dev_name(dev), err);
1415 + bus_if = dev_get_drvdata(dev);
1416 + sdiodev = bus_if->bus_priv.sdio;
1417 + if (err)
1418 + goto fail;
1419
1420 if (!bus_if->drvr)
1421 return;
1422
1423 + bus = sdiodev->bus;
1424 +
1425 /* try to download image and nvram to the dongle */
1426 bus->alp_only = true;
1427 err = brcmf_sdio_download_firmware(bus, code, nvram, nvram_len);
1428 @@ -4077,6 +4082,7 @@ static void brcmf_sdio_firmware_callback(struct device *dev,
1429 fail:
1430 brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), err);
1431 device_release_driver(dev);
1432 + device_release_driver(&sdiodev->func[2]->dev);
1433 }
1434
1435 struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
1436 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
1437 index d93ebbdc7737..1242c3f05aad 100644
1438 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
1439 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
1440 @@ -1158,17 +1158,18 @@ static int brcmf_usb_bus_setup(struct brcmf_usbdev_info *devinfo)
1441 return ret;
1442 }
1443
1444 -static void brcmf_usb_probe_phase2(struct device *dev,
1445 +static void brcmf_usb_probe_phase2(struct device *dev, int ret,
1446 const struct firmware *fw,
1447 void *nvram, u32 nvlen)
1448 {
1449 struct brcmf_bus *bus = dev_get_drvdata(dev);
1450 - struct brcmf_usbdev_info *devinfo;
1451 - int ret;
1452 + struct brcmf_usbdev_info *devinfo = bus->bus_priv.usb->devinfo;
1453 +
1454 + if (ret)
1455 + goto error;
1456
1457 brcmf_dbg(USB, "Start fw downloading\n");
1458
1459 - devinfo = bus->bus_priv.usb->devinfo;
1460 ret = check_file(fw->data);
1461 if (ret < 0) {
1462 brcmf_err("invalid firmware\n");
1463 diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
1464 index 90b5b2efafbf..b4a8bb7759b2 100644
1465 --- a/drivers/spi/spi.c
1466 +++ b/drivers/spi/spi.c
1467 @@ -1015,7 +1015,7 @@ static int spi_transfer_one_message(struct spi_master *master,
1468 ret = 0;
1469 ms = 8LL * 1000LL * xfer->len;
1470 do_div(ms, xfer->speed_hz);
1471 - ms += ms + 100; /* some tolerance */
1472 + ms += ms + 200; /* some tolerance */
1473
1474 if (ms > UINT_MAX)
1475 ms = UINT_MAX;
1476 diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
1477 index fd45b48480cb..86433ef7f953 100644
1478 --- a/drivers/target/iscsi/iscsi_target.c
1479 +++ b/drivers/target/iscsi/iscsi_target.c
1480 @@ -1289,6 +1289,18 @@ iscsit_get_immediate_data(struct iscsi_cmd *cmd, struct iscsi_scsi_req *hdr,
1481 */
1482 if (dump_payload)
1483 goto after_immediate_data;
1484 + /*
1485 + * Check for underflow case where both EDTL and immediate data payload
1486 + * exceeds what is presented by CDB's TRANSFER LENGTH, and what has
1487 + * already been set in target_cmd_size_check() as se_cmd->data_length.
1488 + *
1489 + * For this special case, fail the command and dump the immediate data
1490 + * payload.
1491 + */
1492 + if (cmd->first_burst_len > cmd->se_cmd.data_length) {
1493 + cmd->sense_reason = TCM_INVALID_CDB_FIELD;
1494 + goto after_immediate_data;
1495 + }
1496
1497 immed_ret = iscsit_handle_immediate_data(cmd, hdr,
1498 cmd->first_burst_len);
1499 @@ -4443,8 +4455,11 @@ static void iscsit_logout_post_handler_closesession(
1500 * always sleep waiting for RX/TX thread shutdown to complete
1501 * within iscsit_close_connection().
1502 */
1503 - if (!conn->conn_transport->rdma_shutdown)
1504 + if (!conn->conn_transport->rdma_shutdown) {
1505 sleep = cmpxchg(&conn->tx_thread_active, true, false);
1506 + if (!sleep)
1507 + return;
1508 + }
1509
1510 atomic_set(&conn->conn_logout_remove, 0);
1511 complete(&conn->conn_logout_comp);
1512 @@ -4460,8 +4475,11 @@ static void iscsit_logout_post_handler_samecid(
1513 {
1514 int sleep = 1;
1515
1516 - if (!conn->conn_transport->rdma_shutdown)
1517 + if (!conn->conn_transport->rdma_shutdown) {
1518 sleep = cmpxchg(&conn->tx_thread_active, true, false);
1519 + if (!sleep)
1520 + return;
1521 + }
1522
1523 atomic_set(&conn->conn_logout_remove, 0);
1524 complete(&conn->conn_logout_comp);
1525 diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h
1526 index 9ab7090f7c83..0912de7c0cf8 100644
1527 --- a/drivers/target/target_core_internal.h
1528 +++ b/drivers/target/target_core_internal.h
1529 @@ -136,7 +136,7 @@ int init_se_kmem_caches(void);
1530 void release_se_kmem_caches(void);
1531 u32 scsi_get_new_index(scsi_index_t);
1532 void transport_subsystem_check_init(void);
1533 -void transport_cmd_finish_abort(struct se_cmd *, int);
1534 +int transport_cmd_finish_abort(struct se_cmd *, int);
1535 unsigned char *transport_dump_cmd_direction(struct se_cmd *);
1536 void transport_dump_dev_state(struct se_device *, char *, int *);
1537 void transport_dump_dev_info(struct se_device *, struct se_lun *,
1538 diff --git a/drivers/target/target_core_tmr.c b/drivers/target/target_core_tmr.c
1539 index dce1e1b47316..13f47bf4d16b 100644
1540 --- a/drivers/target/target_core_tmr.c
1541 +++ b/drivers/target/target_core_tmr.c
1542 @@ -75,7 +75,7 @@ void core_tmr_release_req(struct se_tmr_req *tmr)
1543 kfree(tmr);
1544 }
1545
1546 -static void core_tmr_handle_tas_abort(struct se_cmd *cmd, int tas)
1547 +static int core_tmr_handle_tas_abort(struct se_cmd *cmd, int tas)
1548 {
1549 unsigned long flags;
1550 bool remove = true, send_tas;
1551 @@ -91,7 +91,7 @@ static void core_tmr_handle_tas_abort(struct se_cmd *cmd, int tas)
1552 transport_send_task_abort(cmd);
1553 }
1554
1555 - transport_cmd_finish_abort(cmd, remove);
1556 + return transport_cmd_finish_abort(cmd, remove);
1557 }
1558
1559 static int target_check_cdb_and_preempt(struct list_head *list,
1560 @@ -184,8 +184,8 @@ void core_tmr_abort_task(
1561 cancel_work_sync(&se_cmd->work);
1562 transport_wait_for_tasks(se_cmd);
1563
1564 - transport_cmd_finish_abort(se_cmd, true);
1565 - target_put_sess_cmd(se_cmd);
1566 + if (!transport_cmd_finish_abort(se_cmd, true))
1567 + target_put_sess_cmd(se_cmd);
1568
1569 printk("ABORT_TASK: Sending TMR_FUNCTION_COMPLETE for"
1570 " ref_tag: %llu\n", ref_tag);
1571 @@ -281,8 +281,8 @@ static void core_tmr_drain_tmr_list(
1572 cancel_work_sync(&cmd->work);
1573 transport_wait_for_tasks(cmd);
1574
1575 - transport_cmd_finish_abort(cmd, 1);
1576 - target_put_sess_cmd(cmd);
1577 + if (!transport_cmd_finish_abort(cmd, 1))
1578 + target_put_sess_cmd(cmd);
1579 }
1580 }
1581
1582 @@ -380,8 +380,8 @@ static void core_tmr_drain_state_list(
1583 cancel_work_sync(&cmd->work);
1584 transport_wait_for_tasks(cmd);
1585
1586 - core_tmr_handle_tas_abort(cmd, tas);
1587 - target_put_sess_cmd(cmd);
1588 + if (!core_tmr_handle_tas_abort(cmd, tas))
1589 + target_put_sess_cmd(cmd);
1590 }
1591 }
1592
1593 diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
1594 index ff26626d94ef..690c790431dd 100644
1595 --- a/drivers/target/target_core_transport.c
1596 +++ b/drivers/target/target_core_transport.c
1597 @@ -651,9 +651,10 @@ static void transport_lun_remove_cmd(struct se_cmd *cmd)
1598 percpu_ref_put(&lun->lun_ref);
1599 }
1600
1601 -void transport_cmd_finish_abort(struct se_cmd *cmd, int remove)
1602 +int transport_cmd_finish_abort(struct se_cmd *cmd, int remove)
1603 {
1604 bool ack_kref = (cmd->se_cmd_flags & SCF_ACK_KREF);
1605 + int ret = 0;
1606
1607 if (cmd->se_cmd_flags & SCF_SE_LUN_CMD)
1608 transport_lun_remove_cmd(cmd);
1609 @@ -665,9 +666,11 @@ void transport_cmd_finish_abort(struct se_cmd *cmd, int remove)
1610 cmd->se_tfo->aborted_task(cmd);
1611
1612 if (transport_cmd_check_stop_to_fabric(cmd))
1613 - return;
1614 + return 1;
1615 if (remove && ack_kref)
1616 - transport_put_cmd(cmd);
1617 + ret = transport_put_cmd(cmd);
1618 +
1619 + return ret;
1620 }
1621
1622 static void target_complete_failure_work(struct work_struct *work)
1623 diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
1624 index a0085571824d..4c32c96f9c90 100644
1625 --- a/drivers/usb/gadget/function/f_fs.c
1626 +++ b/drivers/usb/gadget/function/f_fs.c
1627 @@ -1859,12 +1859,12 @@ static int ffs_func_eps_enable(struct ffs_function *func)
1628 ep->ep->driver_data = ep;
1629 ep->ep->desc = ds;
1630
1631 - comp_desc = (struct usb_ss_ep_comp_descriptor *)(ds +
1632 - USB_DT_ENDPOINT_SIZE);
1633 - ep->ep->maxburst = comp_desc->bMaxBurst + 1;
1634 -
1635 - if (needs_comp_desc)
1636 + if (needs_comp_desc) {
1637 + comp_desc = (struct usb_ss_ep_comp_descriptor *)(ds +
1638 + USB_DT_ENDPOINT_SIZE);
1639 + ep->ep->maxburst = comp_desc->bMaxBurst + 1;
1640 ep->ep->comp_desc = comp_desc;
1641 + }
1642
1643 ret = usb_ep_enable(ep->ep);
1644 if (likely(!ret)) {
1645 diff --git a/fs/autofs4/dev-ioctl.c b/fs/autofs4/dev-ioctl.c
1646 index 734cbf8d9676..dd9f1bebb5a3 100644
1647 --- a/fs/autofs4/dev-ioctl.c
1648 +++ b/fs/autofs4/dev-ioctl.c
1649 @@ -344,7 +344,7 @@ static int autofs_dev_ioctl_fail(struct file *fp,
1650 int status;
1651
1652 token = (autofs_wqt_t) param->fail.token;
1653 - status = param->fail.status ? param->fail.status : -ENOENT;
1654 + status = param->fail.status < 0 ? param->fail.status : -ENOENT;
1655 return autofs4_wait_release(sbi, token, status);
1656 }
1657
1658 diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
1659 index 27bc360c7ffd..a723df3e0197 100644
1660 --- a/fs/cifs/smb1ops.c
1661 +++ b/fs/cifs/smb1ops.c
1662 @@ -849,8 +849,13 @@ cifs_query_dir_first(const unsigned int xid, struct cifs_tcon *tcon,
1663 struct cifs_fid *fid, __u16 search_flags,
1664 struct cifs_search_info *srch_inf)
1665 {
1666 - return CIFSFindFirst(xid, tcon, path, cifs_sb,
1667 - &fid->netfid, search_flags, srch_inf, true);
1668 + int rc;
1669 +
1670 + rc = CIFSFindFirst(xid, tcon, path, cifs_sb,
1671 + &fid->netfid, search_flags, srch_inf, true);
1672 + if (rc)
1673 + cifs_dbg(FYI, "find first failed=%d\n", rc);
1674 + return rc;
1675 }
1676
1677 static int
1678 diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
1679 index c58691834eb2..7e48561abd29 100644
1680 --- a/fs/cifs/smb2ops.c
1681 +++ b/fs/cifs/smb2ops.c
1682 @@ -982,7 +982,7 @@ smb2_query_dir_first(const unsigned int xid, struct cifs_tcon *tcon,
1683 rc = SMB2_open(xid, &oparms, utf16_path, &oplock, NULL, NULL);
1684 kfree(utf16_path);
1685 if (rc) {
1686 - cifs_dbg(VFS, "open dir failed\n");
1687 + cifs_dbg(FYI, "open dir failed rc=%d\n", rc);
1688 return rc;
1689 }
1690
1691 @@ -992,7 +992,7 @@ smb2_query_dir_first(const unsigned int xid, struct cifs_tcon *tcon,
1692 rc = SMB2_query_directory(xid, tcon, fid->persistent_fid,
1693 fid->volatile_fid, 0, srch_inf);
1694 if (rc) {
1695 - cifs_dbg(VFS, "query directory failed\n");
1696 + cifs_dbg(FYI, "query directory failed rc=%d\n", rc);
1697 SMB2_close(xid, tcon, fid->persistent_fid, fid->volatile_fid);
1698 }
1699 return rc;
1700 @@ -1809,7 +1809,8 @@ crypt_message(struct TCP_Server_Info *server, struct smb_rqst *rqst, int enc)
1701
1702 sg = init_sg(rqst, sign);
1703 if (!sg) {
1704 - cifs_dbg(VFS, "%s: Failed to init sg %d", __func__, rc);
1705 + cifs_dbg(VFS, "%s: Failed to init sg", __func__);
1706 + rc = -ENOMEM;
1707 goto free_req;
1708 }
1709
1710 @@ -1817,6 +1818,7 @@ crypt_message(struct TCP_Server_Info *server, struct smb_rqst *rqst, int enc)
1711 iv = kzalloc(iv_len, GFP_KERNEL);
1712 if (!iv) {
1713 cifs_dbg(VFS, "%s: Failed to alloc IV", __func__);
1714 + rc = -ENOMEM;
1715 goto free_sg;
1716 }
1717 iv[0] = 3;
1718 diff --git a/fs/dax.c b/fs/dax.c
1719 index 285f4ab6f498..08a793c61580 100644
1720 --- a/fs/dax.c
1721 +++ b/fs/dax.c
1722 @@ -875,6 +875,7 @@ int dax_writeback_mapping_range(struct address_space *mapping,
1723 if (ret < 0)
1724 return ret;
1725 }
1726 + start_index = indices[pvec.nr - 1] + 1;
1727 }
1728 return 0;
1729 }
1730 diff --git a/fs/exec.c b/fs/exec.c
1731 index 65145a3df065..ce0901e65c40 100644
1732 --- a/fs/exec.c
1733 +++ b/fs/exec.c
1734 @@ -220,8 +220,26 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
1735
1736 if (write) {
1737 unsigned long size = bprm->vma->vm_end - bprm->vma->vm_start;
1738 + unsigned long ptr_size;
1739 struct rlimit *rlim;
1740
1741 + /*
1742 + * Since the stack will hold pointers to the strings, we
1743 + * must account for them as well.
1744 + *
1745 + * The size calculation is the entire vma while each arg page is
1746 + * built, so each time we get here it's calculating how far it
1747 + * is currently (rather than each call being just the newly
1748 + * added size from the arg page). As a result, we need to
1749 + * always add the entire size of the pointers, so that on the
1750 + * last call to get_arg_page() we'll actually have the entire
1751 + * correct size.
1752 + */
1753 + ptr_size = (bprm->argc + bprm->envc) * sizeof(void *);
1754 + if (ptr_size > ULONG_MAX - size)
1755 + goto fail;
1756 + size += ptr_size;
1757 +
1758 acct_arg_size(bprm, size / PAGE_SIZE);
1759
1760 /*
1761 @@ -239,13 +257,15 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
1762 * to work from.
1763 */
1764 rlim = current->signal->rlim;
1765 - if (size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur) / 4) {
1766 - put_page(page);
1767 - return NULL;
1768 - }
1769 + if (size > READ_ONCE(rlim[RLIMIT_STACK].rlim_cur) / 4)
1770 + goto fail;
1771 }
1772
1773 return page;
1774 +
1775 +fail:
1776 + put_page(page);
1777 + return NULL;
1778 }
1779
1780 static void put_arg_page(struct page *page)
1781 diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
1782 index ef0ae8aaa567..94f18da4be87 100644
1783 --- a/include/acpi/acpi_bus.h
1784 +++ b/include/acpi/acpi_bus.h
1785 @@ -209,7 +209,8 @@ struct acpi_device_flags {
1786 u32 of_compatible_ok:1;
1787 u32 coherent_dma:1;
1788 u32 cca_seen:1;
1789 - u32 reserved:20;
1790 + u32 spi_i2c_slave:1;
1791 + u32 reserved:19;
1792 };
1793
1794 /* File System */
1795 diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h
1796 index be378cf47fcc..b3044c2c62cb 100644
1797 --- a/include/linux/netfilter/x_tables.h
1798 +++ b/include/linux/netfilter/x_tables.h
1799 @@ -294,7 +294,7 @@ int xt_match_to_user(const struct xt_entry_match *m,
1800 int xt_target_to_user(const struct xt_entry_target *t,
1801 struct xt_entry_target __user *u);
1802 int xt_data_to_user(void __user *dst, const void *src,
1803 - int usersize, int size);
1804 + int usersize, int size, int aligned_size);
1805
1806 void *xt_copy_counters_from_user(const void __user *user, unsigned int len,
1807 struct xt_counters_info *info, bool compat);
1808 diff --git a/include/linux/timekeeper_internal.h b/include/linux/timekeeper_internal.h
1809 index 110f4532188c..f7043ccca81c 100644
1810 --- a/include/linux/timekeeper_internal.h
1811 +++ b/include/linux/timekeeper_internal.h
1812 @@ -29,7 +29,6 @@
1813 */
1814 struct tk_read_base {
1815 struct clocksource *clock;
1816 - u64 (*read)(struct clocksource *cs);
1817 u64 mask;
1818 u64 cycle_last;
1819 u32 mult;
1820 @@ -58,7 +57,7 @@ struct tk_read_base {
1821 * interval.
1822 * @xtime_remainder: Shifted nano seconds left over when rounding
1823 * @cycle_interval
1824 - * @raw_interval: Raw nano seconds accumulated per NTP interval.
1825 + * @raw_interval: Shifted raw nano seconds accumulated per NTP interval.
1826 * @ntp_error: Difference between accumulated time and NTP time in ntp
1827 * shifted nano seconds.
1828 * @ntp_error_shift: Shift conversion between clock shifted nano seconds and
1829 @@ -100,7 +99,7 @@ struct timekeeper {
1830 u64 cycle_interval;
1831 u64 xtime_interval;
1832 s64 xtime_remainder;
1833 - u32 raw_interval;
1834 + u64 raw_interval;
1835 /* The ntp_tick_length() value currently being used.
1836 * This cached copy ensures we consistently apply the tick
1837 * length for an entire tick, as ntp_tick_length may change
1838 diff --git a/kernel/signal.c b/kernel/signal.c
1839 index 7e59ebc2c25e..e75e9601817e 100644
1840 --- a/kernel/signal.c
1841 +++ b/kernel/signal.c
1842 @@ -510,7 +510,8 @@ int unhandled_signal(struct task_struct *tsk, int sig)
1843 return !tsk->ptrace;
1844 }
1845
1846 -static void collect_signal(int sig, struct sigpending *list, siginfo_t *info)
1847 +static void collect_signal(int sig, struct sigpending *list, siginfo_t *info,
1848 + bool *resched_timer)
1849 {
1850 struct sigqueue *q, *first = NULL;
1851
1852 @@ -532,6 +533,12 @@ static void collect_signal(int sig, struct sigpending *list, siginfo_t *info)
1853 still_pending:
1854 list_del_init(&first->list);
1855 copy_siginfo(info, &first->info);
1856 +
1857 + *resched_timer =
1858 + (first->flags & SIGQUEUE_PREALLOC) &&
1859 + (info->si_code == SI_TIMER) &&
1860 + (info->si_sys_private);
1861 +
1862 __sigqueue_free(first);
1863 } else {
1864 /*
1865 @@ -548,12 +555,12 @@ static void collect_signal(int sig, struct sigpending *list, siginfo_t *info)
1866 }
1867
1868 static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
1869 - siginfo_t *info)
1870 + siginfo_t *info, bool *resched_timer)
1871 {
1872 int sig = next_signal(pending, mask);
1873
1874 if (sig)
1875 - collect_signal(sig, pending, info);
1876 + collect_signal(sig, pending, info, resched_timer);
1877 return sig;
1878 }
1879
1880 @@ -565,15 +572,16 @@ static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
1881 */
1882 int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
1883 {
1884 + bool resched_timer = false;
1885 int signr;
1886
1887 /* We only dequeue private signals from ourselves, we don't let
1888 * signalfd steal them
1889 */
1890 - signr = __dequeue_signal(&tsk->pending, mask, info);
1891 + signr = __dequeue_signal(&tsk->pending, mask, info, &resched_timer);
1892 if (!signr) {
1893 signr = __dequeue_signal(&tsk->signal->shared_pending,
1894 - mask, info);
1895 + mask, info, &resched_timer);
1896 #ifdef CONFIG_POSIX_TIMERS
1897 /*
1898 * itimer signal ?
1899 @@ -621,7 +629,7 @@ int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
1900 current->jobctl |= JOBCTL_STOP_DEQUEUED;
1901 }
1902 #ifdef CONFIG_POSIX_TIMERS
1903 - if ((info->si_code & __SI_MASK) == __SI_TIMER && info->si_sys_private) {
1904 + if (resched_timer) {
1905 /*
1906 * Release the siglock to ensure proper locking order
1907 * of timer locks outside of siglocks. Note, we leave
1908 diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
1909 index 5b63a2102c29..0eaf309aae63 100644
1910 --- a/kernel/time/timekeeping.c
1911 +++ b/kernel/time/timekeeping.c
1912 @@ -118,6 +118,26 @@ static inline void tk_update_sleep_time(struct timekeeper *tk, ktime_t delta)
1913 tk->offs_boot = ktime_add(tk->offs_boot, delta);
1914 }
1915
1916 +/*
1917 + * tk_clock_read - atomic clocksource read() helper
1918 + *
1919 + * This helper is necessary to use in the read paths because, while the
1920 + * seqlock ensures we don't return a bad value while structures are updated,
1921 + * it doesn't protect from potential crashes. There is the possibility that
1922 + * the tkr's clocksource may change between the read reference, and the
1923 + * clock reference passed to the read function. This can cause crashes if
1924 + * the wrong clocksource is passed to the wrong read function.
1925 + * This isn't necessary to use when holding the timekeeper_lock or doing
1926 + * a read of the fast-timekeeper tkrs (which is protected by its own locking
1927 + * and update logic).
1928 + */
1929 +static inline u64 tk_clock_read(struct tk_read_base *tkr)
1930 +{
1931 + struct clocksource *clock = READ_ONCE(tkr->clock);
1932 +
1933 + return clock->read(clock);
1934 +}
1935 +
1936 #ifdef CONFIG_DEBUG_TIMEKEEPING
1937 #define WARNING_FREQ (HZ*300) /* 5 minute rate-limiting */
1938
1939 @@ -175,7 +195,7 @@ static inline u64 timekeeping_get_delta(struct tk_read_base *tkr)
1940 */
1941 do {
1942 seq = read_seqcount_begin(&tk_core.seq);
1943 - now = tkr->read(tkr->clock);
1944 + now = tk_clock_read(tkr);
1945 last = tkr->cycle_last;
1946 mask = tkr->mask;
1947 max = tkr->clock->max_cycles;
1948 @@ -209,7 +229,7 @@ static inline u64 timekeeping_get_delta(struct tk_read_base *tkr)
1949 u64 cycle_now, delta;
1950
1951 /* read clocksource */
1952 - cycle_now = tkr->read(tkr->clock);
1953 + cycle_now = tk_clock_read(tkr);
1954
1955 /* calculate the delta since the last update_wall_time */
1956 delta = clocksource_delta(cycle_now, tkr->cycle_last, tkr->mask);
1957 @@ -238,12 +258,10 @@ static void tk_setup_internals(struct timekeeper *tk, struct clocksource *clock)
1958 ++tk->cs_was_changed_seq;
1959 old_clock = tk->tkr_mono.clock;
1960 tk->tkr_mono.clock = clock;
1961 - tk->tkr_mono.read = clock->read;
1962 tk->tkr_mono.mask = clock->mask;
1963 - tk->tkr_mono.cycle_last = tk->tkr_mono.read(clock);
1964 + tk->tkr_mono.cycle_last = tk_clock_read(&tk->tkr_mono);
1965
1966 tk->tkr_raw.clock = clock;
1967 - tk->tkr_raw.read = clock->read;
1968 tk->tkr_raw.mask = clock->mask;
1969 tk->tkr_raw.cycle_last = tk->tkr_mono.cycle_last;
1970
1971 @@ -262,7 +280,7 @@ static void tk_setup_internals(struct timekeeper *tk, struct clocksource *clock)
1972 /* Go back from cycles -> shifted ns */
1973 tk->xtime_interval = interval * clock->mult;
1974 tk->xtime_remainder = ntpinterval - tk->xtime_interval;
1975 - tk->raw_interval = (interval * clock->mult) >> clock->shift;
1976 + tk->raw_interval = interval * clock->mult;
1977
1978 /* if changing clocks, convert xtime_nsec shift units */
1979 if (old_clock) {
1980 @@ -404,7 +422,7 @@ static __always_inline u64 __ktime_get_fast_ns(struct tk_fast *tkf)
1981
1982 now += timekeeping_delta_to_ns(tkr,
1983 clocksource_delta(
1984 - tkr->read(tkr->clock),
1985 + tk_clock_read(tkr),
1986 tkr->cycle_last,
1987 tkr->mask));
1988 } while (read_seqcount_retry(&tkf->seq, seq));
1989 @@ -461,6 +479,10 @@ static u64 dummy_clock_read(struct clocksource *cs)
1990 return cycles_at_suspend;
1991 }
1992
1993 +static struct clocksource dummy_clock = {
1994 + .read = dummy_clock_read,
1995 +};
1996 +
1997 /**
1998 * halt_fast_timekeeper - Prevent fast timekeeper from accessing clocksource.
1999 * @tk: Timekeeper to snapshot.
2000 @@ -477,13 +499,13 @@ static void halt_fast_timekeeper(struct timekeeper *tk)
2001 struct tk_read_base *tkr = &tk->tkr_mono;
2002
2003 memcpy(&tkr_dummy, tkr, sizeof(tkr_dummy));
2004 - cycles_at_suspend = tkr->read(tkr->clock);
2005 - tkr_dummy.read = dummy_clock_read;
2006 + cycles_at_suspend = tk_clock_read(tkr);
2007 + tkr_dummy.clock = &dummy_clock;
2008 update_fast_timekeeper(&tkr_dummy, &tk_fast_mono);
2009
2010 tkr = &tk->tkr_raw;
2011 memcpy(&tkr_dummy, tkr, sizeof(tkr_dummy));
2012 - tkr_dummy.read = dummy_clock_read;
2013 + tkr_dummy.clock = &dummy_clock;
2014 update_fast_timekeeper(&tkr_dummy, &tk_fast_raw);
2015 }
2016
2017 @@ -649,11 +671,10 @@ static void timekeeping_update(struct timekeeper *tk, unsigned int action)
2018 */
2019 static void timekeeping_forward_now(struct timekeeper *tk)
2020 {
2021 - struct clocksource *clock = tk->tkr_mono.clock;
2022 u64 cycle_now, delta;
2023 u64 nsec;
2024
2025 - cycle_now = tk->tkr_mono.read(clock);
2026 + cycle_now = tk_clock_read(&tk->tkr_mono);
2027 delta = clocksource_delta(cycle_now, tk->tkr_mono.cycle_last, tk->tkr_mono.mask);
2028 tk->tkr_mono.cycle_last = cycle_now;
2029 tk->tkr_raw.cycle_last = cycle_now;
2030 @@ -929,8 +950,7 @@ void ktime_get_snapshot(struct system_time_snapshot *systime_snapshot)
2031
2032 do {
2033 seq = read_seqcount_begin(&tk_core.seq);
2034 -
2035 - now = tk->tkr_mono.read(tk->tkr_mono.clock);
2036 + now = tk_clock_read(&tk->tkr_mono);
2037 systime_snapshot->cs_was_changed_seq = tk->cs_was_changed_seq;
2038 systime_snapshot->clock_was_set_seq = tk->clock_was_set_seq;
2039 base_real = ktime_add(tk->tkr_mono.base,
2040 @@ -1109,7 +1129,7 @@ int get_device_system_crosststamp(int (*get_time_fn)
2041 * Check whether the system counter value provided by the
2042 * device driver is on the current timekeeping interval.
2043 */
2044 - now = tk->tkr_mono.read(tk->tkr_mono.clock);
2045 + now = tk_clock_read(&tk->tkr_mono);
2046 interval_start = tk->tkr_mono.cycle_last;
2047 if (!cycle_between(interval_start, cycles, now)) {
2048 clock_was_set_seq = tk->clock_was_set_seq;
2049 @@ -1630,7 +1650,7 @@ void timekeeping_resume(void)
2050 * The less preferred source will only be tried if there is no better
2051 * usable source. The rtc part is handled separately in rtc core code.
2052 */
2053 - cycle_now = tk->tkr_mono.read(clock);
2054 + cycle_now = tk_clock_read(&tk->tkr_mono);
2055 if ((clock->flags & CLOCK_SOURCE_SUSPEND_NONSTOP) &&
2056 cycle_now > tk->tkr_mono.cycle_last) {
2057 u64 nsec, cyc_delta;
2058 @@ -1977,7 +1997,7 @@ static u64 logarithmic_accumulation(struct timekeeper *tk, u64 offset,
2059 u32 shift, unsigned int *clock_set)
2060 {
2061 u64 interval = tk->cycle_interval << shift;
2062 - u64 raw_nsecs;
2063 + u64 snsec_per_sec;
2064
2065 /* If the offset is smaller than a shifted interval, do nothing */
2066 if (offset < interval)
2067 @@ -1992,14 +2012,15 @@ static u64 logarithmic_accumulation(struct timekeeper *tk, u64 offset,
2068 *clock_set |= accumulate_nsecs_to_secs(tk);
2069
2070 /* Accumulate raw time */
2071 - raw_nsecs = (u64)tk->raw_interval << shift;
2072 - raw_nsecs += tk->raw_time.tv_nsec;
2073 - if (raw_nsecs >= NSEC_PER_SEC) {
2074 - u64 raw_secs = raw_nsecs;
2075 - raw_nsecs = do_div(raw_secs, NSEC_PER_SEC);
2076 - tk->raw_time.tv_sec += raw_secs;
2077 + tk->tkr_raw.xtime_nsec += (u64)tk->raw_time.tv_nsec << tk->tkr_raw.shift;
2078 + tk->tkr_raw.xtime_nsec += tk->raw_interval << shift;
2079 + snsec_per_sec = (u64)NSEC_PER_SEC << tk->tkr_raw.shift;
2080 + while (tk->tkr_raw.xtime_nsec >= snsec_per_sec) {
2081 + tk->tkr_raw.xtime_nsec -= snsec_per_sec;
2082 + tk->raw_time.tv_sec++;
2083 }
2084 - tk->raw_time.tv_nsec = raw_nsecs;
2085 + tk->raw_time.tv_nsec = tk->tkr_raw.xtime_nsec >> tk->tkr_raw.shift;
2086 + tk->tkr_raw.xtime_nsec -= (u64)tk->raw_time.tv_nsec << tk->tkr_raw.shift;
2087
2088 /* Accumulate error between NTP and clock interval */
2089 tk->ntp_error += tk->ntp_tick << shift;
2090 @@ -2031,7 +2052,7 @@ void update_wall_time(void)
2091 #ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
2092 offset = real_tk->cycle_interval;
2093 #else
2094 - offset = clocksource_delta(tk->tkr_mono.read(tk->tkr_mono.clock),
2095 + offset = clocksource_delta(tk_clock_read(&tk->tkr_mono),
2096 tk->tkr_mono.cycle_last, tk->tkr_mono.mask);
2097 #endif
2098
2099 diff --git a/lib/cmdline.c b/lib/cmdline.c
2100 index 8f13cf73c2ec..79069d7938ea 100644
2101 --- a/lib/cmdline.c
2102 +++ b/lib/cmdline.c
2103 @@ -22,14 +22,14 @@
2104 * the values[M, M+1, ..., N] into the ints array in get_options.
2105 */
2106
2107 -static int get_range(char **str, int *pint)
2108 +static int get_range(char **str, int *pint, int n)
2109 {
2110 int x, inc_counter, upper_range;
2111
2112 (*str)++;
2113 upper_range = simple_strtol((*str), NULL, 0);
2114 inc_counter = upper_range - *pint;
2115 - for (x = *pint; x < upper_range; x++)
2116 + for (x = *pint; n && x < upper_range; x++, n--)
2117 *pint++ = x;
2118 return inc_counter;
2119 }
2120 @@ -96,7 +96,7 @@ char *get_options(const char *str, int nints, int *ints)
2121 break;
2122 if (res == 3) {
2123 int range_nums;
2124 - range_nums = get_range((char **)&str, ints + i);
2125 + range_nums = get_range((char **)&str, ints + i, nints - i);
2126 if (range_nums < 0)
2127 break;
2128 /*
2129 diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c
2130 index 79b69917f521..656c259bcc14 100644
2131 --- a/net/bridge/netfilter/ebtables.c
2132 +++ b/net/bridge/netfilter/ebtables.c
2133 @@ -1358,7 +1358,8 @@ static inline int ebt_obj_to_user(char __user *um, const char *_name,
2134 strlcpy(name, _name, sizeof(name));
2135 if (copy_to_user(um, name, EBT_FUNCTION_MAXNAMELEN) ||
2136 put_user(datasize, (int __user *)(um + EBT_FUNCTION_MAXNAMELEN)) ||
2137 - xt_data_to_user(um + entrysize, data, usersize, datasize))
2138 + xt_data_to_user(um + entrysize, data, usersize, datasize,
2139 + XT_ALIGN(datasize)))
2140 return -EFAULT;
2141
2142 return 0;
2143 @@ -1643,7 +1644,8 @@ static int compat_match_to_user(struct ebt_entry_match *m, void __user **dstptr,
2144 if (match->compat_to_user(cm->data, m->data))
2145 return -EFAULT;
2146 } else {
2147 - if (xt_data_to_user(cm->data, m->data, match->usersize, msize))
2148 + if (xt_data_to_user(cm->data, m->data, match->usersize, msize,
2149 + COMPAT_XT_ALIGN(msize)))
2150 return -EFAULT;
2151 }
2152
2153 @@ -1672,7 +1674,8 @@ static int compat_target_to_user(struct ebt_entry_target *t,
2154 if (target->compat_to_user(cm->data, t->data))
2155 return -EFAULT;
2156 } else {
2157 - if (xt_data_to_user(cm->data, t->data, target->usersize, tsize))
2158 + if (xt_data_to_user(cm->data, t->data, target->usersize, tsize,
2159 + COMPAT_XT_ALIGN(tsize)))
2160 return -EFAULT;
2161 }
2162
2163 diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
2164 index 14857afc9937..32488c09cfb9 100644
2165 --- a/net/netfilter/x_tables.c
2166 +++ b/net/netfilter/x_tables.c
2167 @@ -283,28 +283,30 @@ static int xt_obj_to_user(u16 __user *psize, u16 size,
2168 &U->u.user.revision, K->u.kernel.TYPE->revision)
2169
2170 int xt_data_to_user(void __user *dst, const void *src,
2171 - int usersize, int size)
2172 + int usersize, int size, int aligned_size)
2173 {
2174 usersize = usersize ? : size;
2175 if (copy_to_user(dst, src, usersize))
2176 return -EFAULT;
2177 - if (usersize != size && clear_user(dst + usersize, size - usersize))
2178 + if (usersize != aligned_size &&
2179 + clear_user(dst + usersize, aligned_size - usersize))
2180 return -EFAULT;
2181
2182 return 0;
2183 }
2184 EXPORT_SYMBOL_GPL(xt_data_to_user);
2185
2186 -#define XT_DATA_TO_USER(U, K, TYPE, C_SIZE) \
2187 +#define XT_DATA_TO_USER(U, K, TYPE) \
2188 xt_data_to_user(U->data, K->data, \
2189 K->u.kernel.TYPE->usersize, \
2190 - C_SIZE ? : K->u.kernel.TYPE->TYPE##size)
2191 + K->u.kernel.TYPE->TYPE##size, \
2192 + XT_ALIGN(K->u.kernel.TYPE->TYPE##size))
2193
2194 int xt_match_to_user(const struct xt_entry_match *m,
2195 struct xt_entry_match __user *u)
2196 {
2197 return XT_OBJ_TO_USER(u, m, match, 0) ||
2198 - XT_DATA_TO_USER(u, m, match, 0);
2199 + XT_DATA_TO_USER(u, m, match);
2200 }
2201 EXPORT_SYMBOL_GPL(xt_match_to_user);
2202
2203 @@ -312,7 +314,7 @@ int xt_target_to_user(const struct xt_entry_target *t,
2204 struct xt_entry_target __user *u)
2205 {
2206 return XT_OBJ_TO_USER(u, t, target, 0) ||
2207 - XT_DATA_TO_USER(u, t, target, 0);
2208 + XT_DATA_TO_USER(u, t, target);
2209 }
2210 EXPORT_SYMBOL_GPL(xt_target_to_user);
2211
2212 @@ -611,6 +613,12 @@ void xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr,
2213 }
2214 EXPORT_SYMBOL_GPL(xt_compat_match_from_user);
2215
2216 +#define COMPAT_XT_DATA_TO_USER(U, K, TYPE, C_SIZE) \
2217 + xt_data_to_user(U->data, K->data, \
2218 + K->u.kernel.TYPE->usersize, \
2219 + C_SIZE, \
2220 + COMPAT_XT_ALIGN(C_SIZE))
2221 +
2222 int xt_compat_match_to_user(const struct xt_entry_match *m,
2223 void __user **dstptr, unsigned int *size)
2224 {
2225 @@ -626,7 +634,7 @@ int xt_compat_match_to_user(const struct xt_entry_match *m,
2226 if (match->compat_to_user((void __user *)cm->data, m->data))
2227 return -EFAULT;
2228 } else {
2229 - if (XT_DATA_TO_USER(cm, m, match, msize - sizeof(*cm)))
2230 + if (COMPAT_XT_DATA_TO_USER(cm, m, match, msize - sizeof(*cm)))
2231 return -EFAULT;
2232 }
2233
2234 @@ -981,7 +989,7 @@ int xt_compat_target_to_user(const struct xt_entry_target *t,
2235 if (target->compat_to_user((void __user *)ct->data, t->data))
2236 return -EFAULT;
2237 } else {
2238 - if (XT_DATA_TO_USER(ct, t, target, tsize - sizeof(*ct)))
2239 + if (COMPAT_XT_DATA_TO_USER(ct, t, target, tsize - sizeof(*ct)))
2240 return -EFAULT;
2241 }
2242
2243 diff --git a/net/rxrpc/key.c b/net/rxrpc/key.c
2244 index 0a4e28477ad9..54369225766e 100644
2245 --- a/net/rxrpc/key.c
2246 +++ b/net/rxrpc/key.c
2247 @@ -217,7 +217,7 @@ static int rxrpc_krb5_decode_principal(struct krb5_principal *princ,
2248 unsigned int *_toklen)
2249 {
2250 const __be32 *xdr = *_xdr;
2251 - unsigned int toklen = *_toklen, n_parts, loop, tmp;
2252 + unsigned int toklen = *_toklen, n_parts, loop, tmp, paddedlen;
2253
2254 /* there must be at least one name, and at least #names+1 length
2255 * words */
2256 @@ -247,16 +247,16 @@ static int rxrpc_krb5_decode_principal(struct krb5_principal *princ,
2257 toklen -= 4;
2258 if (tmp <= 0 || tmp > AFSTOKEN_STRING_MAX)
2259 return -EINVAL;
2260 - if (tmp > toklen)
2261 + paddedlen = (tmp + 3) & ~3;
2262 + if (paddedlen > toklen)
2263 return -EINVAL;
2264 princ->name_parts[loop] = kmalloc(tmp + 1, GFP_KERNEL);
2265 if (!princ->name_parts[loop])
2266 return -ENOMEM;
2267 memcpy(princ->name_parts[loop], xdr, tmp);
2268 princ->name_parts[loop][tmp] = 0;
2269 - tmp = (tmp + 3) & ~3;
2270 - toklen -= tmp;
2271 - xdr += tmp >> 2;
2272 + toklen -= paddedlen;
2273 + xdr += paddedlen >> 2;
2274 }
2275
2276 if (toklen < 4)
2277 @@ -265,16 +265,16 @@ static int rxrpc_krb5_decode_principal(struct krb5_principal *princ,
2278 toklen -= 4;
2279 if (tmp <= 0 || tmp > AFSTOKEN_K5_REALM_MAX)
2280 return -EINVAL;
2281 - if (tmp > toklen)
2282 + paddedlen = (tmp + 3) & ~3;
2283 + if (paddedlen > toklen)
2284 return -EINVAL;
2285 princ->realm = kmalloc(tmp + 1, GFP_KERNEL);
2286 if (!princ->realm)
2287 return -ENOMEM;
2288 memcpy(princ->realm, xdr, tmp);
2289 princ->realm[tmp] = 0;
2290 - tmp = (tmp + 3) & ~3;
2291 - toklen -= tmp;
2292 - xdr += tmp >> 2;
2293 + toklen -= paddedlen;
2294 + xdr += paddedlen >> 2;
2295
2296 _debug("%s/...@%s", princ->name_parts[0], princ->realm);
2297
2298 @@ -293,7 +293,7 @@ static int rxrpc_krb5_decode_tagged_data(struct krb5_tagged_data *td,
2299 unsigned int *_toklen)
2300 {
2301 const __be32 *xdr = *_xdr;
2302 - unsigned int toklen = *_toklen, len;
2303 + unsigned int toklen = *_toklen, len, paddedlen;
2304
2305 /* there must be at least one tag and one length word */
2306 if (toklen <= 8)
2307 @@ -307,15 +307,17 @@ static int rxrpc_krb5_decode_tagged_data(struct krb5_tagged_data *td,
2308 toklen -= 8;
2309 if (len > max_data_size)
2310 return -EINVAL;
2311 + paddedlen = (len + 3) & ~3;
2312 + if (paddedlen > toklen)
2313 + return -EINVAL;
2314 td->data_len = len;
2315
2316 if (len > 0) {
2317 td->data = kmemdup(xdr, len, GFP_KERNEL);
2318 if (!td->data)
2319 return -ENOMEM;
2320 - len = (len + 3) & ~3;
2321 - toklen -= len;
2322 - xdr += len >> 2;
2323 + toklen -= paddedlen;
2324 + xdr += paddedlen >> 2;
2325 }
2326
2327 _debug("tag %x len %x", td->tag, td->data_len);
2328 @@ -387,7 +389,7 @@ static int rxrpc_krb5_decode_ticket(u8 **_ticket, u16 *_tktlen,
2329 const __be32 **_xdr, unsigned int *_toklen)
2330 {
2331 const __be32 *xdr = *_xdr;
2332 - unsigned int toklen = *_toklen, len;
2333 + unsigned int toklen = *_toklen, len, paddedlen;
2334
2335 /* there must be at least one length word */
2336 if (toklen <= 4)
2337 @@ -399,6 +401,9 @@ static int rxrpc_krb5_decode_ticket(u8 **_ticket, u16 *_tktlen,
2338 toklen -= 4;
2339 if (len > AFSTOKEN_K5_TIX_MAX)
2340 return -EINVAL;
2341 + paddedlen = (len + 3) & ~3;
2342 + if (paddedlen > toklen)
2343 + return -EINVAL;
2344 *_tktlen = len;
2345
2346 _debug("ticket len %u", len);
2347 @@ -407,9 +412,8 @@ static int rxrpc_krb5_decode_ticket(u8 **_ticket, u16 *_tktlen,
2348 *_ticket = kmemdup(xdr, len, GFP_KERNEL);
2349 if (!*_ticket)
2350 return -ENOMEM;
2351 - len = (len + 3) & ~3;
2352 - toklen -= len;
2353 - xdr += len >> 2;
2354 + toklen -= paddedlen;
2355 + xdr += paddedlen >> 2;
2356 }
2357
2358 *_xdr = xdr;
2359 @@ -552,7 +556,7 @@ static int rxrpc_preparse_xdr(struct key_preparsed_payload *prep)
2360 {
2361 const __be32 *xdr = prep->data, *token;
2362 const char *cp;
2363 - unsigned int len, tmp, loop, ntoken, toklen, sec_ix;
2364 + unsigned int len, paddedlen, loop, ntoken, toklen, sec_ix;
2365 size_t datalen = prep->datalen;
2366 int ret;
2367
2368 @@ -578,22 +582,21 @@ static int rxrpc_preparse_xdr(struct key_preparsed_payload *prep)
2369 if (len < 1 || len > AFSTOKEN_CELL_MAX)
2370 goto not_xdr;
2371 datalen -= 4;
2372 - tmp = (len + 3) & ~3;
2373 - if (tmp > datalen)
2374 + paddedlen = (len + 3) & ~3;
2375 + if (paddedlen > datalen)
2376 goto not_xdr;
2377
2378 cp = (const char *) xdr;
2379 for (loop = 0; loop < len; loop++)
2380 if (!isprint(cp[loop]))
2381 goto not_xdr;
2382 - if (len < tmp)
2383 - for (; loop < tmp; loop++)
2384 - if (cp[loop])
2385 - goto not_xdr;
2386 + for (; loop < paddedlen; loop++)
2387 + if (cp[loop])
2388 + goto not_xdr;
2389 _debug("cellname: [%u/%u] '%*.*s'",
2390 - len, tmp, len, len, (const char *) xdr);
2391 - datalen -= tmp;
2392 - xdr += tmp >> 2;
2393 + len, paddedlen, len, len, (const char *) xdr);
2394 + datalen -= paddedlen;
2395 + xdr += paddedlen >> 2;
2396
2397 /* get the token count */
2398 if (datalen < 12)
2399 @@ -614,10 +617,11 @@ static int rxrpc_preparse_xdr(struct key_preparsed_payload *prep)
2400 sec_ix = ntohl(*xdr);
2401 datalen -= 4;
2402 _debug("token: [%x/%zx] %x", toklen, datalen, sec_ix);
2403 - if (toklen < 20 || toklen > datalen)
2404 + paddedlen = (toklen + 3) & ~3;
2405 + if (toklen < 20 || toklen > datalen || paddedlen > datalen)
2406 goto not_xdr;
2407 - datalen -= (toklen + 3) & ~3;
2408 - xdr += (toklen + 3) >> 2;
2409 + datalen -= paddedlen;
2410 + xdr += paddedlen >> 2;
2411
2412 } while (--loop > 0);
2413
2414 diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
2415 index 5088d4b8db22..009e6c98754e 100644
2416 --- a/sound/core/pcm_lib.c
2417 +++ b/sound/core/pcm_lib.c
2418 @@ -2492,7 +2492,7 @@ static int pcm_chmap_ctl_get(struct snd_kcontrol *kcontrol,
2419 struct snd_pcm_substream *substream;
2420 const struct snd_pcm_chmap_elem *map;
2421
2422 - if (snd_BUG_ON(!info->chmap))
2423 + if (!info->chmap)
2424 return -EINVAL;
2425 substream = snd_pcm_chmap_substream(info, idx);
2426 if (!substream)
2427 @@ -2524,7 +2524,7 @@ static int pcm_chmap_ctl_tlv(struct snd_kcontrol *kcontrol, int op_flag,
2428 unsigned int __user *dst;
2429 int c, count = 0;
2430
2431 - if (snd_BUG_ON(!info->chmap))
2432 + if (!info->chmap)
2433 return -EINVAL;
2434 if (size < 8)
2435 return -ENOMEM;
2436 diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c
2437 index 00060c4a9deb..9741757436be 100644
2438 --- a/sound/firewire/amdtp-stream.c
2439 +++ b/sound/firewire/amdtp-stream.c
2440 @@ -606,7 +606,9 @@ static void out_stream_callback(struct fw_iso_context *context, u32 tstamp,
2441 cycle = increment_cycle_count(cycle, 1);
2442 if (handle_out_packet(s, cycle, i) < 0) {
2443 s->packet_index = -1;
2444 - amdtp_stream_pcm_abort(s);
2445 + if (in_interrupt())
2446 + amdtp_stream_pcm_abort(s);
2447 + WRITE_ONCE(s->pcm_buffer_pointer, SNDRV_PCM_POS_XRUN);
2448 return;
2449 }
2450 }
2451 @@ -658,7 +660,9 @@ static void in_stream_callback(struct fw_iso_context *context, u32 tstamp,
2452 /* Queueing error or detecting invalid payload. */
2453 if (i < packets) {
2454 s->packet_index = -1;
2455 - amdtp_stream_pcm_abort(s);
2456 + if (in_interrupt())
2457 + amdtp_stream_pcm_abort(s);
2458 + WRITE_ONCE(s->pcm_buffer_pointer, SNDRV_PCM_POS_XRUN);
2459 return;
2460 }
2461
2462 diff --git a/sound/firewire/amdtp-stream.h b/sound/firewire/amdtp-stream.h
2463 index c1bc7fad056e..f7c054bc9d92 100644
2464 --- a/sound/firewire/amdtp-stream.h
2465 +++ b/sound/firewire/amdtp-stream.h
2466 @@ -124,7 +124,7 @@ struct amdtp_stream {
2467 /* For a PCM substream processing. */
2468 struct snd_pcm_substream *pcm;
2469 struct tasklet_struct period_tasklet;
2470 - unsigned int pcm_buffer_pointer;
2471 + snd_pcm_uframes_t pcm_buffer_pointer;
2472 unsigned int pcm_period_pointer;
2473
2474 /* To wait for first packet. */
2475 diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
2476 index 23d685636a67..69097cc96660 100644
2477 --- a/sound/pci/hda/hda_intel.c
2478 +++ b/sound/pci/hda/hda_intel.c
2479 @@ -369,10 +369,12 @@ enum {
2480 #define IS_KBL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d71)
2481 #define IS_KBL_H(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa2f0)
2482 #define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98)
2483 +#define IS_BXT_T(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x1a98)
2484 #define IS_GLK(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x3198)
2485 -#define IS_SKL_PLUS(pci) (IS_SKL(pci) || IS_SKL_LP(pci) || IS_BXT(pci)) || \
2486 - IS_KBL(pci) || IS_KBL_LP(pci) || IS_KBL_H(pci) || \
2487 - IS_GLK(pci)
2488 +#define IS_CFL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa348)
2489 +#define IS_SKL_PLUS(pci) (IS_SKL(pci) || IS_SKL_LP(pci) || IS_BXT(pci) || \
2490 + IS_BXT_T(pci) || IS_KBL(pci) || IS_KBL_LP(pci) || \
2491 + IS_KBL_H(pci) || IS_GLK(pci) || IS_CFL(pci))
2492
2493 static char *driver_short_names[] = {
2494 [AZX_DRIVER_ICH] = "HDA Intel",
2495 @@ -2251,6 +2253,9 @@ static const struct pci_device_id azx_ids[] = {
2496 /* Kabylake-H */
2497 { PCI_DEVICE(0x8086, 0xa2f0),
2498 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE },
2499 + /* Coffelake */
2500 + { PCI_DEVICE(0x8086, 0xa348),
2501 + .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE},
2502 /* Broxton-P(Apollolake) */
2503 { PCI_DEVICE(0x8086, 0x5a98),
2504 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BROXTON },
2505 diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
2506 index 28fb62c32678..e0f9e6a20556 100644
2507 --- a/tools/perf/util/probe-event.c
2508 +++ b/tools/perf/util/probe-event.c
2509 @@ -615,7 +615,7 @@ static int post_process_probe_trace_point(struct probe_trace_point *tp,
2510 struct map *map, unsigned long offs)
2511 {
2512 struct symbol *sym;
2513 - u64 addr = tp->address + tp->offset - offs;
2514 + u64 addr = tp->address - offs;
2515
2516 sym = map__find_symbol(map, addr);
2517 if (!sym)