Magellan Linux

Annotation of /trunk/kernel-alx-legacy/patches-4.9/0134-4.9.35-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3608 - (hide annotations) (download)
Fri Aug 14 07:34:29 2020 UTC (3 years, 8 months ago) by niro
File size: 63041 byte(s)
-added kerenl-alx-legacy pkg
1 niro 3608 diff --git a/Makefile b/Makefile
2     index a40b373eba3a..0a8d47465f97 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 9
8     -SUBLEVEL = 34
9     +SUBLEVEL = 35
10     EXTRAVERSION =
11     NAME = Roaring Lionus
12    
13     @@ -651,6 +651,12 @@ KBUILD_CFLAGS += $(call cc-ifversion, -lt, 0409, \
14     # Tell gcc to never replace conditional load with a non-conditional one
15     KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
16    
17     +# check for 'asm goto'
18     +ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
19     + KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
20     + KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO
21     +endif
22     +
23     include scripts/Makefile.gcc-plugins
24    
25     ifdef CONFIG_READABLE_ASM
26     @@ -796,12 +802,6 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types)
27     # use the deterministic mode of AR if available
28     KBUILD_ARFLAGS := $(call ar-option,D)
29    
30     -# check for 'asm goto'
31     -ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
32     - KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
33     - KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO
34     -endif
35     -
36     include scripts/Makefile.kasan
37     include scripts/Makefile.extrawarn
38     include scripts/Makefile.ubsan
39     diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c
40     index a2c2478e7d78..4bcfe01b5aad 100644
41     --- a/arch/arm64/kernel/vdso.c
42     +++ b/arch/arm64/kernel/vdso.c
43     @@ -217,10 +217,11 @@ void update_vsyscall(struct timekeeper *tk)
44     /* tkr_mono.cycle_last == tkr_raw.cycle_last */
45     vdso_data->cs_cycle_last = tk->tkr_mono.cycle_last;
46     vdso_data->raw_time_sec = tk->raw_time.tv_sec;
47     - vdso_data->raw_time_nsec = tk->raw_time.tv_nsec;
48     + vdso_data->raw_time_nsec = (tk->raw_time.tv_nsec <<
49     + tk->tkr_raw.shift) +
50     + tk->tkr_raw.xtime_nsec;
51     vdso_data->xtime_clock_sec = tk->xtime_sec;
52     vdso_data->xtime_clock_nsec = tk->tkr_mono.xtime_nsec;
53     - /* tkr_raw.xtime_nsec == 0 */
54     vdso_data->cs_mono_mult = tk->tkr_mono.mult;
55     vdso_data->cs_raw_mult = tk->tkr_raw.mult;
56     /* tkr_mono.shift == tkr_raw.shift */
57     diff --git a/arch/arm64/kernel/vdso/gettimeofday.S b/arch/arm64/kernel/vdso/gettimeofday.S
58     index e00b4671bd7c..76320e920965 100644
59     --- a/arch/arm64/kernel/vdso/gettimeofday.S
60     +++ b/arch/arm64/kernel/vdso/gettimeofday.S
61     @@ -256,7 +256,6 @@ monotonic_raw:
62     seqcnt_check fail=monotonic_raw
63    
64     /* All computations are done with left-shifted nsecs. */
65     - lsl x14, x14, x12
66     get_nsec_per_sec res=x9
67     lsl x9, x9, x12
68    
69     diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
70     index 1ba82ea90230..2e2fc1e37715 100644
71     --- a/arch/powerpc/kernel/exceptions-64s.S
72     +++ b/arch/powerpc/kernel/exceptions-64s.S
73     @@ -1411,10 +1411,8 @@ USE_TEXT_SECTION()
74     .align 7
75     do_hash_page:
76     #ifdef CONFIG_PPC_STD_MMU_64
77     - andis. r0,r4,0xa410 /* weird error? */
78     + andis. r0,r4,0xa450 /* weird error? */
79     bne- handle_page_fault /* if not, try to insert a HPTE */
80     - andis. r0,r4,DSISR_DABRMATCH@h
81     - bne- handle_dabr_fault
82     CURRENT_THREAD_INFO(r11, r1)
83     lwz r0,TI_PREEMPT(r11) /* If we're in an "NMI" */
84     andis. r0,r0,NMI_MASK@h /* (i.e. an irq when soft-disabled) */
85     @@ -1438,11 +1436,16 @@ do_hash_page:
86    
87     /* Error */
88     blt- 13f
89     +
90     + /* Reload DSISR into r4 for the DABR check below */
91     + ld r4,_DSISR(r1)
92     #endif /* CONFIG_PPC_STD_MMU_64 */
93    
94     /* Here we have a page fault that hash_page can't handle. */
95     handle_page_fault:
96     -11: ld r4,_DAR(r1)
97     +11: andis. r0,r4,DSISR_DABRMATCH@h
98     + bne- handle_dabr_fault
99     + ld r4,_DAR(r1)
100     ld r5,_DSISR(r1)
101     addi r3,r1,STACK_FRAME_OVERHEAD
102     bl do_page_fault
103     diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
104     index e785cc9e1ecd..fe97cbe04576 100644
105     --- a/arch/powerpc/kernel/kprobes.c
106     +++ b/arch/powerpc/kernel/kprobes.c
107     @@ -511,6 +511,15 @@ int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
108     regs->gpr[2] = (unsigned long)(((func_descr_t *)jp->entry)->toc);
109     #endif
110    
111     + /*
112     + * jprobes use jprobe_return() which skips the normal return
113     + * path of the function, and this messes up the accounting of the
114     + * function graph tracer.
115     + *
116     + * Pause function graph tracing while performing the jprobe function.
117     + */
118     + pause_graph_tracing();
119     +
120     return 1;
121     }
122    
123     @@ -533,6 +542,8 @@ int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
124     * saved regs...
125     */
126     memcpy(regs, &kcb->jprobe_saved_regs, sizeof(struct pt_regs));
127     + /* It's OK to start function graph tracing again */
128     + unpause_graph_tracing();
129     preempt_enable_no_resched();
130     return 1;
131     }
132     diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
133     index 094deb60c6fe..5c0298422300 100644
134     --- a/arch/powerpc/kvm/book3s_hv.c
135     +++ b/arch/powerpc/kvm/book3s_hv.c
136     @@ -2807,12 +2807,34 @@ static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu)
137     {
138     int r;
139     int srcu_idx;
140     + unsigned long ebb_regs[3] = {}; /* shut up GCC */
141    
142     if (!vcpu->arch.sane) {
143     run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
144     return -EINVAL;
145     }
146    
147     + /*
148     + * Don't allow entry with a suspended transaction, because
149     + * the guest entry/exit code will lose it.
150     + * If the guest has TM enabled, save away their TM-related SPRs
151     + * (they will get restored by the TM unavailable interrupt).
152     + */
153     +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
154     + if (cpu_has_feature(CPU_FTR_TM) && current->thread.regs &&
155     + (current->thread.regs->msr & MSR_TM)) {
156     + if (MSR_TM_ACTIVE(current->thread.regs->msr)) {
157     + run->exit_reason = KVM_EXIT_FAIL_ENTRY;
158     + run->fail_entry.hardware_entry_failure_reason = 0;
159     + return -EINVAL;
160     + }
161     + current->thread.tm_tfhar = mfspr(SPRN_TFHAR);
162     + current->thread.tm_tfiar = mfspr(SPRN_TFIAR);
163     + current->thread.tm_texasr = mfspr(SPRN_TEXASR);
164     + current->thread.regs->msr &= ~MSR_TM;
165     + }
166     +#endif
167     +
168     kvmppc_core_prepare_to_enter(vcpu);
169    
170     /* No need to go into the guest when all we'll do is come back out */
171     @@ -2834,6 +2856,13 @@ static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu)
172    
173     flush_all_to_thread(current);
174    
175     + /* Save userspace EBB register values */
176     + if (cpu_has_feature(CPU_FTR_ARCH_207S)) {
177     + ebb_regs[0] = mfspr(SPRN_EBBHR);
178     + ebb_regs[1] = mfspr(SPRN_EBBRR);
179     + ebb_regs[2] = mfspr(SPRN_BESCR);
180     + }
181     +
182     vcpu->arch.wqp = &vcpu->arch.vcore->wq;
183     vcpu->arch.pgdir = current->mm->pgd;
184     vcpu->arch.state = KVMPPC_VCPU_BUSY_IN_HOST;
185     @@ -2856,6 +2885,13 @@ static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu)
186     r = kvmppc_xics_rm_complete(vcpu, 0);
187     } while (is_kvmppc_resume_guest(r));
188    
189     + /* Restore userspace EBB register values */
190     + if (cpu_has_feature(CPU_FTR_ARCH_207S)) {
191     + mtspr(SPRN_EBBHR, ebb_regs[0]);
192     + mtspr(SPRN_EBBRR, ebb_regs[1]);
193     + mtspr(SPRN_BESCR, ebb_regs[2]);
194     + }
195     +
196     out:
197     vcpu->arch.state = KVMPPC_VCPU_NOTREADY;
198     atomic_dec(&vcpu->kvm->arch.vcpus_running);
199     diff --git a/arch/powerpc/perf/perf_regs.c b/arch/powerpc/perf/perf_regs.c
200     index d24a8a3668fa..28ae8bd6228e 100644
201     --- a/arch/powerpc/perf/perf_regs.c
202     +++ b/arch/powerpc/perf/perf_regs.c
203     @@ -100,5 +100,6 @@ void perf_get_regs_user(struct perf_regs *regs_user,
204     struct pt_regs *regs_user_copy)
205     {
206     regs_user->regs = task_pt_regs(current);
207     - regs_user->abi = perf_reg_abi(current);
208     + regs_user->abi = (regs_user->regs) ? perf_reg_abi(current) :
209     + PERF_SAMPLE_REGS_ABI_NONE;
210     }
211     diff --git a/arch/s390/kvm/gaccess.c b/arch/s390/kvm/gaccess.c
212     index 4aa8a7e2a1da..f5d79840f4e0 100644
213     --- a/arch/s390/kvm/gaccess.c
214     +++ b/arch/s390/kvm/gaccess.c
215     @@ -972,11 +972,12 @@ static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
216     ptr = asce.origin * 4096;
217     if (asce.r) {
218     *fake = 1;
219     + ptr = 0;
220     asce.dt = ASCE_TYPE_REGION1;
221     }
222     switch (asce.dt) {
223     case ASCE_TYPE_REGION1:
224     - if (vaddr.rfx01 > asce.tl && !asce.r)
225     + if (vaddr.rfx01 > asce.tl && !*fake)
226     return PGM_REGION_FIRST_TRANS;
227     break;
228     case ASCE_TYPE_REGION2:
229     @@ -1004,8 +1005,7 @@ static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
230     union region1_table_entry rfte;
231    
232     if (*fake) {
233     - /* offset in 16EB guest memory block */
234     - ptr = ptr + ((unsigned long) vaddr.rsx << 53UL);
235     + ptr += (unsigned long) vaddr.rfx << 53;
236     rfte.val = ptr;
237     goto shadow_r2t;
238     }
239     @@ -1031,8 +1031,7 @@ static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
240     union region2_table_entry rste;
241    
242     if (*fake) {
243     - /* offset in 8PB guest memory block */
244     - ptr = ptr + ((unsigned long) vaddr.rtx << 42UL);
245     + ptr += (unsigned long) vaddr.rsx << 42;
246     rste.val = ptr;
247     goto shadow_r3t;
248     }
249     @@ -1059,8 +1058,7 @@ static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
250     union region3_table_entry rtte;
251    
252     if (*fake) {
253     - /* offset in 4TB guest memory block */
254     - ptr = ptr + ((unsigned long) vaddr.sx << 31UL);
255     + ptr += (unsigned long) vaddr.rtx << 31;
256     rtte.val = ptr;
257     goto shadow_sgt;
258     }
259     @@ -1096,8 +1094,7 @@ static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
260     union segment_table_entry ste;
261    
262     if (*fake) {
263     - /* offset in 2G guest memory block */
264     - ptr = ptr + ((unsigned long) vaddr.sx << 20UL);
265     + ptr += (unsigned long) vaddr.sx << 20;
266     ste.val = ptr;
267     goto shadow_pgt;
268     }
269     diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
270     index cb8522290e6a..3bdb917716b1 100644
271     --- a/arch/x86/events/intel/core.c
272     +++ b/arch/x86/events/intel/core.c
273     @@ -431,11 +431,11 @@ static __initconst const u64 skl_hw_cache_event_ids
274     [ C(DTLB) ] = {
275     [ C(OP_READ) ] = {
276     [ C(RESULT_ACCESS) ] = 0x81d0, /* MEM_INST_RETIRED.ALL_LOADS */
277     - [ C(RESULT_MISS) ] = 0x608, /* DTLB_LOAD_MISSES.WALK_COMPLETED */
278     + [ C(RESULT_MISS) ] = 0xe08, /* DTLB_LOAD_MISSES.WALK_COMPLETED */
279     },
280     [ C(OP_WRITE) ] = {
281     [ C(RESULT_ACCESS) ] = 0x82d0, /* MEM_INST_RETIRED.ALL_STORES */
282     - [ C(RESULT_MISS) ] = 0x649, /* DTLB_STORE_MISSES.WALK_COMPLETED */
283     + [ C(RESULT_MISS) ] = 0xe49, /* DTLB_STORE_MISSES.WALK_COMPLETED */
284     },
285     [ C(OP_PREFETCH) ] = {
286     [ C(RESULT_ACCESS) ] = 0x0,
287     diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
288     index 4a80ee752597..c42202d63567 100644
289     --- a/drivers/block/xen-blkback/blkback.c
290     +++ b/drivers/block/xen-blkback/blkback.c
291     @@ -1436,34 +1436,35 @@ static int dispatch_rw_block_io(struct xen_blkif_ring *ring,
292     static void make_response(struct xen_blkif_ring *ring, u64 id,
293     unsigned short op, int st)
294     {
295     - struct blkif_response resp;
296     + struct blkif_response *resp;
297     unsigned long flags;
298     union blkif_back_rings *blk_rings;
299     int notify;
300    
301     - resp.id = id;
302     - resp.operation = op;
303     - resp.status = st;
304     -
305     spin_lock_irqsave(&ring->blk_ring_lock, flags);
306     blk_rings = &ring->blk_rings;
307     /* Place on the response ring for the relevant domain. */
308     switch (ring->blkif->blk_protocol) {
309     case BLKIF_PROTOCOL_NATIVE:
310     - memcpy(RING_GET_RESPONSE(&blk_rings->native, blk_rings->native.rsp_prod_pvt),
311     - &resp, sizeof(resp));
312     + resp = RING_GET_RESPONSE(&blk_rings->native,
313     + blk_rings->native.rsp_prod_pvt);
314     break;
315     case BLKIF_PROTOCOL_X86_32:
316     - memcpy(RING_GET_RESPONSE(&blk_rings->x86_32, blk_rings->x86_32.rsp_prod_pvt),
317     - &resp, sizeof(resp));
318     + resp = RING_GET_RESPONSE(&blk_rings->x86_32,
319     + blk_rings->x86_32.rsp_prod_pvt);
320     break;
321     case BLKIF_PROTOCOL_X86_64:
322     - memcpy(RING_GET_RESPONSE(&blk_rings->x86_64, blk_rings->x86_64.rsp_prod_pvt),
323     - &resp, sizeof(resp));
324     + resp = RING_GET_RESPONSE(&blk_rings->x86_64,
325     + blk_rings->x86_64.rsp_prod_pvt);
326     break;
327     default:
328     BUG();
329     }
330     +
331     + resp->id = id;
332     + resp->operation = op;
333     + resp->status = st;
334     +
335     blk_rings->common.rsp_prod_pvt++;
336     RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&blk_rings->common, notify);
337     spin_unlock_irqrestore(&ring->blk_ring_lock, flags);
338     diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h
339     index dea61f6ab8cb..ecb35fe8ca8d 100644
340     --- a/drivers/block/xen-blkback/common.h
341     +++ b/drivers/block/xen-blkback/common.h
342     @@ -75,9 +75,8 @@ extern unsigned int xenblk_max_queues;
343     struct blkif_common_request {
344     char dummy;
345     };
346     -struct blkif_common_response {
347     - char dummy;
348     -};
349     +
350     +/* i386 protocol version */
351    
352     struct blkif_x86_32_request_rw {
353     uint8_t nr_segments; /* number of segments */
354     @@ -129,14 +128,6 @@ struct blkif_x86_32_request {
355     } u;
356     } __attribute__((__packed__));
357    
358     -/* i386 protocol version */
359     -#pragma pack(push, 4)
360     -struct blkif_x86_32_response {
361     - uint64_t id; /* copied from request */
362     - uint8_t operation; /* copied from request */
363     - int16_t status; /* BLKIF_RSP_??? */
364     -};
365     -#pragma pack(pop)
366     /* x86_64 protocol version */
367    
368     struct blkif_x86_64_request_rw {
369     @@ -193,18 +184,12 @@ struct blkif_x86_64_request {
370     } u;
371     } __attribute__((__packed__));
372    
373     -struct blkif_x86_64_response {
374     - uint64_t __attribute__((__aligned__(8))) id;
375     - uint8_t operation; /* copied from request */
376     - int16_t status; /* BLKIF_RSP_??? */
377     -};
378     -
379     DEFINE_RING_TYPES(blkif_common, struct blkif_common_request,
380     - struct blkif_common_response);
381     + struct blkif_response);
382     DEFINE_RING_TYPES(blkif_x86_32, struct blkif_x86_32_request,
383     - struct blkif_x86_32_response);
384     + struct blkif_response __packed);
385     DEFINE_RING_TYPES(blkif_x86_64, struct blkif_x86_64_request,
386     - struct blkif_x86_64_response);
387     + struct blkif_response);
388    
389     union blkif_back_rings {
390     struct blkif_back_ring native;
391     @@ -281,6 +266,7 @@ struct xen_blkif_ring {
392    
393     wait_queue_head_t wq;
394     atomic_t inflight;
395     + bool active;
396     /* One thread per blkif ring. */
397     struct task_struct *xenblkd;
398     unsigned int waiting_reqs;
399     diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
400     index 3cc6d1d86f1e..9b69fe410c08 100644
401     --- a/drivers/block/xen-blkback/xenbus.c
402     +++ b/drivers/block/xen-blkback/xenbus.c
403     @@ -159,7 +159,7 @@ static int xen_blkif_alloc_rings(struct xen_blkif *blkif)
404     init_waitqueue_head(&ring->shutdown_wq);
405     ring->blkif = blkif;
406     ring->st_print = jiffies;
407     - xen_blkif_get(blkif);
408     + ring->active = true;
409     }
410    
411     return 0;
412     @@ -249,6 +249,9 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
413     struct xen_blkif_ring *ring = &blkif->rings[r];
414     unsigned int i = 0;
415    
416     + if (!ring->active)
417     + continue;
418     +
419     if (ring->xenblkd) {
420     kthread_stop(ring->xenblkd);
421     wake_up(&ring->shutdown_wq);
422     @@ -296,7 +299,7 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
423     BUG_ON(ring->free_pages_num != 0);
424     BUG_ON(ring->persistent_gnt_c != 0);
425     WARN_ON(i != (XEN_BLKIF_REQS_PER_PAGE * blkif->nr_ring_pages));
426     - xen_blkif_put(blkif);
427     + ring->active = false;
428     }
429     blkif->nr_ring_pages = 0;
430     /*
431     diff --git a/drivers/clk/sunxi-ng/ccu-sun6i-a31.c b/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
432     index 8ca07fe8d3f3..0cca3601d99e 100644
433     --- a/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
434     +++ b/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
435     @@ -556,7 +556,7 @@ static SUNXI_CCU_M_WITH_MUX_GATE(lcd0_ch1_clk, "lcd0-ch1", lcd_ch1_parents,
436     0x12c, 0, 4, 24, 3, BIT(31),
437     CLK_SET_RATE_PARENT);
438     static SUNXI_CCU_M_WITH_MUX_GATE(lcd1_ch1_clk, "lcd1-ch1", lcd_ch1_parents,
439     - 0x12c, 0, 4, 24, 3, BIT(31),
440     + 0x130, 0, 4, 24, 3, BIT(31),
441     CLK_SET_RATE_PARENT);
442    
443     static const char * const csi_sclk_parents[] = { "pll-video0", "pll-video1",
444     diff --git a/drivers/dma/bcm2835-dma.c b/drivers/dma/bcm2835-dma.c
445     index e18dc596cf24..6204cc32d09c 100644
446     --- a/drivers/dma/bcm2835-dma.c
447     +++ b/drivers/dma/bcm2835-dma.c
448     @@ -251,8 +251,11 @@ static void bcm2835_dma_create_cb_set_length(
449     */
450    
451     /* have we filled in period_length yet? */
452     - if (*total_len + control_block->length < period_len)
453     + if (*total_len + control_block->length < period_len) {
454     + /* update number of bytes in this period so far */
455     + *total_len += control_block->length;
456     return;
457     + }
458    
459     /* calculate the length that remains to reach period_length */
460     control_block->length = period_len - *total_len;
461     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
462     index 8e6bf548d689..f8fdbd1378a7 100644
463     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
464     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
465     @@ -693,6 +693,10 @@ int amdgpu_atombios_get_clock_info(struct amdgpu_device *adev)
466     DRM_INFO("Changing default dispclk from %dMhz to 600Mhz\n",
467     adev->clock.default_dispclk / 100);
468     adev->clock.default_dispclk = 60000;
469     + } else if (adev->clock.default_dispclk <= 60000) {
470     + DRM_INFO("Changing default dispclk from %dMhz to 625Mhz\n",
471     + adev->clock.default_dispclk / 100);
472     + adev->clock.default_dispclk = 62500;
473     }
474     adev->clock.dp_extclk =
475     le16_to_cpu(firmware_info->info_21.usUniphyDPModeExtClkFreq);
476     diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c b/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c
477     index f7d236f95e74..57fbde14e978 100644
478     --- a/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c
479     +++ b/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c
480     @@ -164,7 +164,7 @@ void amdgpu_atombios_crtc_powergate(struct drm_crtc *crtc, int state)
481     struct drm_device *dev = crtc->dev;
482     struct amdgpu_device *adev = dev->dev_private;
483     int index = GetIndexIntoMasterTable(COMMAND, EnableDispPowerGating);
484     - ENABLE_DISP_POWER_GATING_PARAMETERS_V2_1 args;
485     + ENABLE_DISP_POWER_GATING_PS_ALLOCATION args;
486    
487     memset(&args, 0, sizeof(args));
488    
489     @@ -177,7 +177,7 @@ void amdgpu_atombios_crtc_powergate(struct drm_crtc *crtc, int state)
490     void amdgpu_atombios_crtc_powergate_init(struct amdgpu_device *adev)
491     {
492     int index = GetIndexIntoMasterTable(COMMAND, EnableDispPowerGating);
493     - ENABLE_DISP_POWER_GATING_PARAMETERS_V2_1 args;
494     + ENABLE_DISP_POWER_GATING_PS_ALLOCATION args;
495    
496     memset(&args, 0, sizeof(args));
497    
498     diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
499     index 432480ff9d22..3178ba0c537c 100644
500     --- a/drivers/gpu/drm/radeon/radeon_combios.c
501     +++ b/drivers/gpu/drm/radeon/radeon_combios.c
502     @@ -3393,6 +3393,13 @@ void radeon_combios_asic_init(struct drm_device *dev)
503     rdev->pdev->subsystem_vendor == 0x103c &&
504     rdev->pdev->subsystem_device == 0x280a)
505     return;
506     + /* quirk for rs4xx Toshiba Sattellite L20-183 latop to make it resume
507     + * - it hangs on resume inside the dynclk 1 table.
508     + */
509     + if (rdev->family == CHIP_RS400 &&
510     + rdev->pdev->subsystem_vendor == 0x1179 &&
511     + rdev->pdev->subsystem_device == 0xff31)
512     + return;
513    
514     /* DYN CLK 1 */
515     table = combios_get_table_offset(dev, COMBIOS_DYN_CLK_1_TABLE);
516     diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
517     index 621af069a3d2..3b21ca5a6c81 100644
518     --- a/drivers/gpu/drm/radeon/radeon_device.c
519     +++ b/drivers/gpu/drm/radeon/radeon_device.c
520     @@ -136,6 +136,10 @@ static struct radeon_px_quirk radeon_px_quirk_list[] = {
521     * https://bugzilla.kernel.org/show_bug.cgi?id=51381
522     */
523     { PCI_VENDOR_ID_ATI, 0x6840, 0x1043, 0x2122, RADEON_PX_QUIRK_DISABLE_PX },
524     + /* Asus K53TK laptop with AMD A6-3420M APU and Radeon 7670m GPU
525     + * https://bugs.freedesktop.org/show_bug.cgi?id=101491
526     + */
527     + { PCI_VENDOR_ID_ATI, 0x6741, 0x1043, 0x2122, RADEON_PX_QUIRK_DISABLE_PX },
528     /* macbook pro 8.2 */
529     { PCI_VENDOR_ID_ATI, 0x6741, PCI_VENDOR_ID_APPLE, 0x00e2, RADEON_PX_QUIRK_LONG_WAKEUP },
530     { 0, 0, 0, 0, 0 },
531     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
532     index da9307701abe..cfca43f635a6 100644
533     --- a/drivers/hid/hid-ids.h
534     +++ b/drivers/hid/hid-ids.h
535     @@ -311,6 +311,9 @@
536     #define USB_VENDOR_ID_DELCOM 0x0fc5
537     #define USB_DEVICE_ID_DELCOM_VISUAL_IND 0xb080
538    
539     +#define USB_VENDOR_ID_DELL 0x413c
540     +#define USB_DEVICE_ID_DELL_PIXART_USB_OPTICAL_MOUSE 0x301a
541     +
542     #define USB_VENDOR_ID_DELORME 0x1163
543     #define USB_DEVICE_ID_DELORME_EARTHMATE 0x0100
544     #define USB_DEVICE_ID_DELORME_EM_LT20 0x0200
545     diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
546     index 97dbb2562ace..2b1620797959 100644
547     --- a/drivers/hid/usbhid/hid-quirks.c
548     +++ b/drivers/hid/usbhid/hid-quirks.c
549     @@ -81,6 +81,7 @@ static const struct hid_blacklist {
550     { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB, HID_QUIRK_NO_INIT_REPORTS },
551     { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_STRAFE, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
552     { USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_CREATIVE_SB_OMNI_SURROUND_51, HID_QUIRK_NOGET },
553     + { USB_VENDOR_ID_DELL, USB_DEVICE_ID_DELL_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
554     { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
555     { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
556     { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3, HID_QUIRK_MULTI_INPUT },
557     diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
558     index e7b96f1ac2c5..5be14ad29d46 100644
559     --- a/drivers/input/serio/i8042-x86ia64io.h
560     +++ b/drivers/input/serio/i8042-x86ia64io.h
561     @@ -788,6 +788,13 @@ static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = {
562     DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U574"),
563     },
564     },
565     + {
566     + /* Fujitsu UH554 laptop */
567     + .matches = {
568     + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
569     + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK UH544"),
570     + },
571     + },
572     { }
573     };
574    
575     diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
576     index d0fc165d7d66..21dde5249085 100644
577     --- a/drivers/mtd/spi-nor/spi-nor.c
578     +++ b/drivers/mtd/spi-nor/spi-nor.c
579     @@ -1255,6 +1255,13 @@ static int spansion_quad_enable(struct spi_nor *nor)
580     return -EINVAL;
581     }
582    
583     + ret = spi_nor_wait_till_ready(nor);
584     + if (ret) {
585     + dev_err(nor->dev,
586     + "timeout while writing configuration register\n");
587     + return ret;
588     + }
589     +
590     /* read back and check it */
591     ret = read_cr(nor);
592     if (!(ret > 0 && (ret & CR_QUAD_EN_SPAN))) {
593     diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
594     index f9c2feb4a4e7..0c2a32a305bc 100644
595     --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
596     +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
597     @@ -2201,9 +2201,10 @@ static int cxgb_up(struct adapter *adap)
598     {
599     int err;
600    
601     + mutex_lock(&uld_mutex);
602     err = setup_sge_queues(adap);
603     if (err)
604     - goto out;
605     + goto rel_lock;
606     err = setup_rss(adap);
607     if (err)
608     goto freeq;
609     @@ -2227,7 +2228,6 @@ static int cxgb_up(struct adapter *adap)
610     goto irq_err;
611     }
612    
613     - mutex_lock(&uld_mutex);
614     enable_rx(adap);
615     t4_sge_start(adap);
616     t4_intr_enable(adap);
617     @@ -2240,13 +2240,15 @@ static int cxgb_up(struct adapter *adap)
618     #endif
619     /* Initialize hash mac addr list*/
620     INIT_LIST_HEAD(&adap->mac_hlist);
621     - out:
622     return err;
623     +
624     irq_err:
625     dev_err(adap->pdev_dev, "request_irq failed, err %d\n", err);
626     freeq:
627     t4_free_sge_resources(adap);
628     - goto out;
629     + rel_lock:
630     + mutex_unlock(&uld_mutex);
631     + return err;
632     }
633    
634     static void cxgb_down(struct adapter *adapter)
635     diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
636     index d6a541bde331..2f70f80de27f 100644
637     --- a/drivers/net/phy/marvell.c
638     +++ b/drivers/net/phy/marvell.c
639     @@ -1114,8 +1114,6 @@ static int marvell_read_status_page(struct phy_device *phydev, int page)
640     if (adv < 0)
641     return adv;
642    
643     - lpa &= adv;
644     -
645     if (status & MII_M1011_PHY_STATUS_FULLDUPLEX)
646     phydev->duplex = DUPLEX_FULL;
647     else
648     diff --git a/drivers/net/phy/mdio-bcm-iproc.c b/drivers/net/phy/mdio-bcm-iproc.c
649     index c0b4e65267af..46fe1ae919a3 100644
650     --- a/drivers/net/phy/mdio-bcm-iproc.c
651     +++ b/drivers/net/phy/mdio-bcm-iproc.c
652     @@ -81,8 +81,6 @@ static int iproc_mdio_read(struct mii_bus *bus, int phy_id, int reg)
653     if (rc)
654     return rc;
655    
656     - iproc_mdio_config_clk(priv->base);
657     -
658     /* Prepare the read operation */
659     cmd = (MII_DATA_TA_VAL << MII_DATA_TA_SHIFT) |
660     (reg << MII_DATA_RA_SHIFT) |
661     @@ -112,8 +110,6 @@ static int iproc_mdio_write(struct mii_bus *bus, int phy_id,
662     if (rc)
663     return rc;
664    
665     - iproc_mdio_config_clk(priv->base);
666     -
667     /* Prepare the write operation */
668     cmd = (MII_DATA_TA_VAL << MII_DATA_TA_SHIFT) |
669     (reg << MII_DATA_RA_SHIFT) |
670     @@ -163,6 +159,8 @@ static int iproc_mdio_probe(struct platform_device *pdev)
671     bus->read = iproc_mdio_read;
672     bus->write = iproc_mdio_write;
673    
674     + iproc_mdio_config_clk(priv->base);
675     +
676     rc = of_mdiobus_register(bus, pdev->dev.of_node);
677     if (rc) {
678     dev_err(&pdev->dev, "MDIO bus registration failed\n");
679     diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
680     index c7c1e9906500..d231042f19d6 100644
681     --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
682     +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
683     @@ -442,7 +442,7 @@ struct brcmf_fw {
684     const char *nvram_name;
685     u16 domain_nr;
686     u16 bus_nr;
687     - void (*done)(struct device *dev, const struct firmware *fw,
688     + void (*done)(struct device *dev, int err, const struct firmware *fw,
689     void *nvram_image, u32 nvram_len);
690     };
691    
692     @@ -477,52 +477,51 @@ static void brcmf_fw_request_nvram_done(const struct firmware *fw, void *ctx)
693     if (!nvram && !(fwctx->flags & BRCMF_FW_REQ_NV_OPTIONAL))
694     goto fail;
695    
696     - fwctx->done(fwctx->dev, fwctx->code, nvram, nvram_length);
697     + fwctx->done(fwctx->dev, 0, fwctx->code, nvram, nvram_length);
698     kfree(fwctx);
699     return;
700    
701     fail:
702     brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev));
703     release_firmware(fwctx->code);
704     - device_release_driver(fwctx->dev);
705     + fwctx->done(fwctx->dev, -ENOENT, NULL, NULL, 0);
706     kfree(fwctx);
707     }
708    
709     static void brcmf_fw_request_code_done(const struct firmware *fw, void *ctx)
710     {
711     struct brcmf_fw *fwctx = ctx;
712     - int ret;
713     + int ret = 0;
714    
715     brcmf_dbg(TRACE, "enter: dev=%s\n", dev_name(fwctx->dev));
716     - if (!fw)
717     + if (!fw) {
718     + ret = -ENOENT;
719     goto fail;
720     -
721     - /* only requested code so done here */
722     - if (!(fwctx->flags & BRCMF_FW_REQUEST_NVRAM)) {
723     - fwctx->done(fwctx->dev, fw, NULL, 0);
724     - kfree(fwctx);
725     - return;
726     }
727     + /* only requested code so done here */
728     + if (!(fwctx->flags & BRCMF_FW_REQUEST_NVRAM))
729     + goto done;
730     +
731     fwctx->code = fw;
732     ret = request_firmware_nowait(THIS_MODULE, true, fwctx->nvram_name,
733     fwctx->dev, GFP_KERNEL, fwctx,
734     brcmf_fw_request_nvram_done);
735    
736     - if (!ret)
737     - return;
738     -
739     - brcmf_fw_request_nvram_done(NULL, fwctx);
740     + /* pass NULL to nvram callback for bcm47xx fallback */
741     + if (ret)
742     + brcmf_fw_request_nvram_done(NULL, fwctx);
743     return;
744    
745     fail:
746     brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev));
747     - device_release_driver(fwctx->dev);
748     +done:
749     + fwctx->done(fwctx->dev, ret, fw, NULL, 0);
750     kfree(fwctx);
751     }
752    
753     int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags,
754     const char *code, const char *nvram,
755     - void (*fw_cb)(struct device *dev,
756     + void (*fw_cb)(struct device *dev, int err,
757     const struct firmware *fw,
758     void *nvram_image, u32 nvram_len),
759     u16 domain_nr, u16 bus_nr)
760     @@ -555,7 +554,7 @@ int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags,
761    
762     int brcmf_fw_get_firmwares(struct device *dev, u16 flags,
763     const char *code, const char *nvram,
764     - void (*fw_cb)(struct device *dev,
765     + void (*fw_cb)(struct device *dev, int err,
766     const struct firmware *fw,
767     void *nvram_image, u32 nvram_len))
768     {
769     diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
770     index d3c9f0d52ae3..8fa4b7e1ab3d 100644
771     --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
772     +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
773     @@ -73,13 +73,13 @@ void brcmf_fw_nvram_free(void *nvram);
774     */
775     int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags,
776     const char *code, const char *nvram,
777     - void (*fw_cb)(struct device *dev,
778     + void (*fw_cb)(struct device *dev, int err,
779     const struct firmware *fw,
780     void *nvram_image, u32 nvram_len),
781     u16 domain_nr, u16 bus_nr);
782     int brcmf_fw_get_firmwares(struct device *dev, u16 flags,
783     const char *code, const char *nvram,
784     - void (*fw_cb)(struct device *dev,
785     + void (*fw_cb)(struct device *dev, int err,
786     const struct firmware *fw,
787     void *nvram_image, u32 nvram_len));
788    
789     diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
790     index 3deba90c7eb5..d3d79219fbb0 100644
791     --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
792     +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
793     @@ -1618,16 +1618,23 @@ static const struct brcmf_buscore_ops brcmf_pcie_buscore_ops = {
794     .write32 = brcmf_pcie_buscore_write32,
795     };
796    
797     -static void brcmf_pcie_setup(struct device *dev, const struct firmware *fw,
798     +static void brcmf_pcie_setup(struct device *dev, int ret,
799     + const struct firmware *fw,
800     void *nvram, u32 nvram_len)
801     {
802     - struct brcmf_bus *bus = dev_get_drvdata(dev);
803     - struct brcmf_pciedev *pcie_bus_dev = bus->bus_priv.pcie;
804     - struct brcmf_pciedev_info *devinfo = pcie_bus_dev->devinfo;
805     + struct brcmf_bus *bus;
806     + struct brcmf_pciedev *pcie_bus_dev;
807     + struct brcmf_pciedev_info *devinfo;
808     struct brcmf_commonring **flowrings;
809     - int ret;
810     u32 i;
811    
812     + /* check firmware loading result */
813     + if (ret)
814     + goto fail;
815     +
816     + bus = dev_get_drvdata(dev);
817     + pcie_bus_dev = bus->bus_priv.pcie;
818     + devinfo = pcie_bus_dev->devinfo;
819     brcmf_pcie_attach(devinfo);
820    
821     /* Some of the firmwares have the size of the memory of the device
822     diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
823     index 2458e6e05276..8744b9beda33 100644
824     --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
825     +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
826     @@ -3975,21 +3975,26 @@ static const struct brcmf_bus_ops brcmf_sdio_bus_ops = {
827     .get_memdump = brcmf_sdio_bus_get_memdump,
828     };
829    
830     -static void brcmf_sdio_firmware_callback(struct device *dev,
831     +static void brcmf_sdio_firmware_callback(struct device *dev, int err,
832     const struct firmware *code,
833     void *nvram, u32 nvram_len)
834     {
835     - struct brcmf_bus *bus_if = dev_get_drvdata(dev);
836     - struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
837     - struct brcmf_sdio *bus = sdiodev->bus;
838     - int err = 0;
839     + struct brcmf_bus *bus_if;
840     + struct brcmf_sdio_dev *sdiodev;
841     + struct brcmf_sdio *bus;
842     u8 saveclk;
843    
844     - brcmf_dbg(TRACE, "Enter: dev=%s\n", dev_name(dev));
845     + brcmf_dbg(TRACE, "Enter: dev=%s, err=%d\n", dev_name(dev), err);
846     + bus_if = dev_get_drvdata(dev);
847     + sdiodev = bus_if->bus_priv.sdio;
848     + if (err)
849     + goto fail;
850    
851     if (!bus_if->drvr)
852     return;
853    
854     + bus = sdiodev->bus;
855     +
856     /* try to download image and nvram to the dongle */
857     bus->alp_only = true;
858     err = brcmf_sdio_download_firmware(bus, code, nvram, nvram_len);
859     @@ -4076,6 +4081,7 @@ static void brcmf_sdio_firmware_callback(struct device *dev,
860     fail:
861     brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), err);
862     device_release_driver(dev);
863     + device_release_driver(&sdiodev->func[2]->dev);
864     }
865    
866     struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
867     diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
868     index 2f978a39b58a..053f3b59f21e 100644
869     --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
870     +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
871     @@ -1158,17 +1158,18 @@ static int brcmf_usb_bus_setup(struct brcmf_usbdev_info *devinfo)
872     return ret;
873     }
874    
875     -static void brcmf_usb_probe_phase2(struct device *dev,
876     +static void brcmf_usb_probe_phase2(struct device *dev, int ret,
877     const struct firmware *fw,
878     void *nvram, u32 nvlen)
879     {
880     struct brcmf_bus *bus = dev_get_drvdata(dev);
881     - struct brcmf_usbdev_info *devinfo;
882     - int ret;
883     + struct brcmf_usbdev_info *devinfo = bus->bus_priv.usb->devinfo;
884     +
885     + if (ret)
886     + goto error;
887    
888     brcmf_dbg(USB, "Start fw downloading\n");
889    
890     - devinfo = bus->bus_priv.usb->devinfo;
891     ret = check_file(fw->data);
892     if (ret < 0) {
893     brcmf_err("invalid firmware\n");
894     diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
895     index b7273be9303d..c8d9075339cf 100644
896     --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
897     +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
898     @@ -1422,21 +1422,6 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
899     cancel_work_sync(&rt2x00dev->intf_work);
900     cancel_delayed_work_sync(&rt2x00dev->autowakeup_work);
901     cancel_work_sync(&rt2x00dev->sleep_work);
902     -#if IS_ENABLED(CONFIG_RT2X00_LIB_USB)
903     - if (rt2x00_is_usb(rt2x00dev)) {
904     - usb_kill_anchored_urbs(rt2x00dev->anchor);
905     - hrtimer_cancel(&rt2x00dev->txstatus_timer);
906     - cancel_work_sync(&rt2x00dev->rxdone_work);
907     - cancel_work_sync(&rt2x00dev->txdone_work);
908     - }
909     -#endif
910     - if (rt2x00dev->workqueue)
911     - destroy_workqueue(rt2x00dev->workqueue);
912     -
913     - /*
914     - * Free the tx status fifo.
915     - */
916     - kfifo_free(&rt2x00dev->txstatus_fifo);
917    
918     /*
919     * Kill the tx status tasklet.
920     @@ -1452,6 +1437,14 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
921     */
922     rt2x00lib_uninitialize(rt2x00dev);
923    
924     + if (rt2x00dev->workqueue)
925     + destroy_workqueue(rt2x00dev->workqueue);
926     +
927     + /*
928     + * Free the tx status fifo.
929     + */
930     + kfifo_free(&rt2x00dev->txstatus_fifo);
931     +
932     /*
933     * Free extra components
934     */
935     diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
936     index 662705e31136..631df690adbe 100644
937     --- a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
938     +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
939     @@ -740,6 +740,11 @@ void rt2x00usb_uninitialize(struct rt2x00_dev *rt2x00dev)
940     {
941     struct data_queue *queue;
942    
943     + usb_kill_anchored_urbs(rt2x00dev->anchor);
944     + hrtimer_cancel(&rt2x00dev->txstatus_timer);
945     + cancel_work_sync(&rt2x00dev->rxdone_work);
946     + cancel_work_sync(&rt2x00dev->txdone_work);
947     +
948     queue_for_each(rt2x00dev, queue)
949     rt2x00usb_free_entries(queue);
950     }
951     diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
952     index 6a43fd3d0576..502f5547a1f2 100644
953     --- a/drivers/of/fdt.c
954     +++ b/drivers/of/fdt.c
955     @@ -741,9 +741,12 @@ int __init of_scan_flat_dt(int (*it)(unsigned long node,
956     const char *pathp;
957     int offset, rc = 0, depth = -1;
958    
959     - for (offset = fdt_next_node(blob, -1, &depth);
960     - offset >= 0 && depth >= 0 && !rc;
961     - offset = fdt_next_node(blob, offset, &depth)) {
962     + if (!blob)
963     + return 0;
964     +
965     + for (offset = fdt_next_node(blob, -1, &depth);
966     + offset >= 0 && depth >= 0 && !rc;
967     + offset = fdt_next_node(blob, offset, &depth)) {
968    
969     pathp = fdt_get_name(blob, offset, NULL);
970     if (*pathp == '/')
971     diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
972     index 838783c3fed0..24d4492d0168 100644
973     --- a/drivers/spi/spi.c
974     +++ b/drivers/spi/spi.c
975     @@ -1004,7 +1004,7 @@ static int spi_transfer_one_message(struct spi_master *master,
976     ret = 0;
977     ms = 8LL * 1000LL * xfer->len;
978     do_div(ms, xfer->speed_hz);
979     - ms += ms + 100; /* some tolerance */
980     + ms += ms + 200; /* some tolerance */
981    
982     if (ms > UINT_MAX)
983     ms = UINT_MAX;
984     diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
985     index 01ea228358ea..155fe0e0623f 100644
986     --- a/drivers/target/iscsi/iscsi_target.c
987     +++ b/drivers/target/iscsi/iscsi_target.c
988     @@ -1287,6 +1287,18 @@ iscsit_get_immediate_data(struct iscsi_cmd *cmd, struct iscsi_scsi_req *hdr,
989     */
990     if (dump_payload)
991     goto after_immediate_data;
992     + /*
993     + * Check for underflow case where both EDTL and immediate data payload
994     + * exceeds what is presented by CDB's TRANSFER LENGTH, and what has
995     + * already been set in target_cmd_size_check() as se_cmd->data_length.
996     + *
997     + * For this special case, fail the command and dump the immediate data
998     + * payload.
999     + */
1000     + if (cmd->first_burst_len > cmd->se_cmd.data_length) {
1001     + cmd->sense_reason = TCM_INVALID_CDB_FIELD;
1002     + goto after_immediate_data;
1003     + }
1004    
1005     immed_ret = iscsit_handle_immediate_data(cmd, hdr,
1006     cmd->first_burst_len);
1007     @@ -4431,8 +4443,11 @@ static void iscsit_logout_post_handler_closesession(
1008     * always sleep waiting for RX/TX thread shutdown to complete
1009     * within iscsit_close_connection().
1010     */
1011     - if (!conn->conn_transport->rdma_shutdown)
1012     + if (!conn->conn_transport->rdma_shutdown) {
1013     sleep = cmpxchg(&conn->tx_thread_active, true, false);
1014     + if (!sleep)
1015     + return;
1016     + }
1017    
1018     atomic_set(&conn->conn_logout_remove, 0);
1019     complete(&conn->conn_logout_comp);
1020     @@ -4448,8 +4463,11 @@ static void iscsit_logout_post_handler_samecid(
1021     {
1022     int sleep = 1;
1023    
1024     - if (!conn->conn_transport->rdma_shutdown)
1025     + if (!conn->conn_transport->rdma_shutdown) {
1026     sleep = cmpxchg(&conn->tx_thread_active, true, false);
1027     + if (!sleep)
1028     + return;
1029     + }
1030    
1031     atomic_set(&conn->conn_logout_remove, 0);
1032     complete(&conn->conn_logout_comp);
1033     diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h
1034     index e2c970a9d61c..be52838cc1a8 100644
1035     --- a/drivers/target/target_core_internal.h
1036     +++ b/drivers/target/target_core_internal.h
1037     @@ -131,7 +131,7 @@ int init_se_kmem_caches(void);
1038     void release_se_kmem_caches(void);
1039     u32 scsi_get_new_index(scsi_index_t);
1040     void transport_subsystem_check_init(void);
1041     -void transport_cmd_finish_abort(struct se_cmd *, int);
1042     +int transport_cmd_finish_abort(struct se_cmd *, int);
1043     unsigned char *transport_dump_cmd_direction(struct se_cmd *);
1044     void transport_dump_dev_state(struct se_device *, char *, int *);
1045     void transport_dump_dev_info(struct se_device *, struct se_lun *,
1046     diff --git a/drivers/target/target_core_tmr.c b/drivers/target/target_core_tmr.c
1047     index 4f229e711e1c..27dd1e12f246 100644
1048     --- a/drivers/target/target_core_tmr.c
1049     +++ b/drivers/target/target_core_tmr.c
1050     @@ -75,7 +75,7 @@ void core_tmr_release_req(struct se_tmr_req *tmr)
1051     kfree(tmr);
1052     }
1053    
1054     -static void core_tmr_handle_tas_abort(struct se_cmd *cmd, int tas)
1055     +static int core_tmr_handle_tas_abort(struct se_cmd *cmd, int tas)
1056     {
1057     unsigned long flags;
1058     bool remove = true, send_tas;
1059     @@ -91,7 +91,7 @@ static void core_tmr_handle_tas_abort(struct se_cmd *cmd, int tas)
1060     transport_send_task_abort(cmd);
1061     }
1062    
1063     - transport_cmd_finish_abort(cmd, remove);
1064     + return transport_cmd_finish_abort(cmd, remove);
1065     }
1066    
1067     static int target_check_cdb_and_preempt(struct list_head *list,
1068     @@ -185,8 +185,8 @@ void core_tmr_abort_task(
1069     cancel_work_sync(&se_cmd->work);
1070     transport_wait_for_tasks(se_cmd);
1071    
1072     - transport_cmd_finish_abort(se_cmd, true);
1073     - target_put_sess_cmd(se_cmd);
1074     + if (!transport_cmd_finish_abort(se_cmd, true))
1075     + target_put_sess_cmd(se_cmd);
1076    
1077     printk("ABORT_TASK: Sending TMR_FUNCTION_COMPLETE for"
1078     " ref_tag: %llu\n", ref_tag);
1079     @@ -286,8 +286,8 @@ static void core_tmr_drain_tmr_list(
1080     cancel_work_sync(&cmd->work);
1081     transport_wait_for_tasks(cmd);
1082    
1083     - transport_cmd_finish_abort(cmd, 1);
1084     - target_put_sess_cmd(cmd);
1085     + if (!transport_cmd_finish_abort(cmd, 1))
1086     + target_put_sess_cmd(cmd);
1087     }
1088     }
1089    
1090     @@ -385,8 +385,8 @@ static void core_tmr_drain_state_list(
1091     cancel_work_sync(&cmd->work);
1092     transport_wait_for_tasks(cmd);
1093    
1094     - core_tmr_handle_tas_abort(cmd, tas);
1095     - target_put_sess_cmd(cmd);
1096     + if (!core_tmr_handle_tas_abort(cmd, tas))
1097     + target_put_sess_cmd(cmd);
1098     }
1099     }
1100    
1101     diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
1102     index 077344cc819f..1f9bfa4195ea 100644
1103     --- a/drivers/target/target_core_transport.c
1104     +++ b/drivers/target/target_core_transport.c
1105     @@ -673,9 +673,10 @@ static void transport_lun_remove_cmd(struct se_cmd *cmd)
1106     percpu_ref_put(&lun->lun_ref);
1107     }
1108    
1109     -void transport_cmd_finish_abort(struct se_cmd *cmd, int remove)
1110     +int transport_cmd_finish_abort(struct se_cmd *cmd, int remove)
1111     {
1112     bool ack_kref = (cmd->se_cmd_flags & SCF_ACK_KREF);
1113     + int ret = 0;
1114    
1115     if (cmd->se_cmd_flags & SCF_SE_LUN_CMD)
1116     transport_lun_remove_cmd(cmd);
1117     @@ -687,9 +688,11 @@ void transport_cmd_finish_abort(struct se_cmd *cmd, int remove)
1118     cmd->se_tfo->aborted_task(cmd);
1119    
1120     if (transport_cmd_check_stop_to_fabric(cmd))
1121     - return;
1122     + return 1;
1123     if (remove && ack_kref)
1124     - transport_put_cmd(cmd);
1125     + ret = transport_put_cmd(cmd);
1126     +
1127     + return ret;
1128     }
1129    
1130     static void target_complete_failure_work(struct work_struct *work)
1131     diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
1132     index 89081b834615..04ffd7640c33 100644
1133     --- a/drivers/usb/gadget/function/f_fs.c
1134     +++ b/drivers/usb/gadget/function/f_fs.c
1135     @@ -1858,12 +1858,12 @@ static int ffs_func_eps_enable(struct ffs_function *func)
1136     ep->ep->driver_data = ep;
1137     ep->ep->desc = ds;
1138    
1139     - comp_desc = (struct usb_ss_ep_comp_descriptor *)(ds +
1140     - USB_DT_ENDPOINT_SIZE);
1141     - ep->ep->maxburst = comp_desc->bMaxBurst + 1;
1142     -
1143     - if (needs_comp_desc)
1144     + if (needs_comp_desc) {
1145     + comp_desc = (struct usb_ss_ep_comp_descriptor *)(ds +
1146     + USB_DT_ENDPOINT_SIZE);
1147     + ep->ep->maxburst = comp_desc->bMaxBurst + 1;
1148     ep->ep->comp_desc = comp_desc;
1149     + }
1150    
1151     ret = usb_ep_enable(ep->ep);
1152     if (likely(!ret)) {
1153     diff --git a/fs/autofs4/dev-ioctl.c b/fs/autofs4/dev-ioctl.c
1154     index fc09eb77ddf3..ffc69dd28928 100644
1155     --- a/fs/autofs4/dev-ioctl.c
1156     +++ b/fs/autofs4/dev-ioctl.c
1157     @@ -345,7 +345,7 @@ static int autofs_dev_ioctl_fail(struct file *fp,
1158     int status;
1159    
1160     token = (autofs_wqt_t) param->fail.token;
1161     - status = param->fail.status ? param->fail.status : -ENOENT;
1162     + status = param->fail.status < 0 ? param->fail.status : -ENOENT;
1163     return autofs4_wait_release(sbi, token, status);
1164     }
1165    
1166     diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
1167     index 87b87e091e8e..efd72e1fae74 100644
1168     --- a/fs/cifs/smb1ops.c
1169     +++ b/fs/cifs/smb1ops.c
1170     @@ -849,8 +849,13 @@ cifs_query_dir_first(const unsigned int xid, struct cifs_tcon *tcon,
1171     struct cifs_fid *fid, __u16 search_flags,
1172     struct cifs_search_info *srch_inf)
1173     {
1174     - return CIFSFindFirst(xid, tcon, path, cifs_sb,
1175     - &fid->netfid, search_flags, srch_inf, true);
1176     + int rc;
1177     +
1178     + rc = CIFSFindFirst(xid, tcon, path, cifs_sb,
1179     + &fid->netfid, search_flags, srch_inf, true);
1180     + if (rc)
1181     + cifs_dbg(FYI, "find first failed=%d\n", rc);
1182     + return rc;
1183     }
1184    
1185     static int
1186     diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
1187     index 36334fe3266c..b6968241c26f 100644
1188     --- a/fs/cifs/smb2ops.c
1189     +++ b/fs/cifs/smb2ops.c
1190     @@ -964,7 +964,7 @@ smb2_query_dir_first(const unsigned int xid, struct cifs_tcon *tcon,
1191     rc = SMB2_open(xid, &oparms, utf16_path, &oplock, NULL, NULL);
1192     kfree(utf16_path);
1193     if (rc) {
1194     - cifs_dbg(VFS, "open dir failed\n");
1195     + cifs_dbg(FYI, "open dir failed rc=%d\n", rc);
1196     return rc;
1197     }
1198    
1199     @@ -974,7 +974,7 @@ smb2_query_dir_first(const unsigned int xid, struct cifs_tcon *tcon,
1200     rc = SMB2_query_directory(xid, tcon, fid->persistent_fid,
1201     fid->volatile_fid, 0, srch_inf);
1202     if (rc) {
1203     - cifs_dbg(VFS, "query directory failed\n");
1204     + cifs_dbg(FYI, "query directory failed rc=%d\n", rc);
1205     SMB2_close(xid, tcon, fid->persistent_fid, fid->volatile_fid);
1206     }
1207     return rc;
1208     diff --git a/fs/exec.c b/fs/exec.c
1209     index 67e86571685a..91441402d706 100644
1210     --- a/fs/exec.c
1211     +++ b/fs/exec.c
1212     @@ -215,8 +215,26 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
1213    
1214     if (write) {
1215     unsigned long size = bprm->vma->vm_end - bprm->vma->vm_start;
1216     + unsigned long ptr_size;
1217     struct rlimit *rlim;
1218    
1219     + /*
1220     + * Since the stack will hold pointers to the strings, we
1221     + * must account for them as well.
1222     + *
1223     + * The size calculation is the entire vma while each arg page is
1224     + * built, so each time we get here it's calculating how far it
1225     + * is currently (rather than each call being just the newly
1226     + * added size from the arg page). As a result, we need to
1227     + * always add the entire size of the pointers, so that on the
1228     + * last call to get_arg_page() we'll actually have the entire
1229     + * correct size.
1230     + */
1231     + ptr_size = (bprm->argc + bprm->envc) * sizeof(void *);
1232     + if (ptr_size > ULONG_MAX - size)
1233     + goto fail;
1234     + size += ptr_size;
1235     +
1236     acct_arg_size(bprm, size / PAGE_SIZE);
1237    
1238     /*
1239     @@ -234,13 +252,15 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
1240     * to work from.
1241     */
1242     rlim = current->signal->rlim;
1243     - if (size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur) / 4) {
1244     - put_page(page);
1245     - return NULL;
1246     - }
1247     + if (size > READ_ONCE(rlim[RLIMIT_STACK].rlim_cur) / 4)
1248     + goto fail;
1249     }
1250    
1251     return page;
1252     +
1253     +fail:
1254     + put_page(page);
1255     + return NULL;
1256     }
1257    
1258     static void put_arg_page(struct page *page)
1259     diff --git a/include/linux/timekeeper_internal.h b/include/linux/timekeeper_internal.h
1260     index e88005459035..2c225d46a428 100644
1261     --- a/include/linux/timekeeper_internal.h
1262     +++ b/include/linux/timekeeper_internal.h
1263     @@ -29,7 +29,6 @@
1264     */
1265     struct tk_read_base {
1266     struct clocksource *clock;
1267     - cycle_t (*read)(struct clocksource *cs);
1268     cycle_t mask;
1269     cycle_t cycle_last;
1270     u32 mult;
1271     @@ -58,7 +57,7 @@ struct tk_read_base {
1272     * interval.
1273     * @xtime_remainder: Shifted nano seconds left over when rounding
1274     * @cycle_interval
1275     - * @raw_interval: Raw nano seconds accumulated per NTP interval.
1276     + * @raw_interval: Shifted raw nano seconds accumulated per NTP interval.
1277     * @ntp_error: Difference between accumulated time and NTP time in ntp
1278     * shifted nano seconds.
1279     * @ntp_error_shift: Shift conversion between clock shifted nano seconds and
1280     @@ -100,7 +99,7 @@ struct timekeeper {
1281     cycle_t cycle_interval;
1282     u64 xtime_interval;
1283     s64 xtime_remainder;
1284     - u32 raw_interval;
1285     + u64 raw_interval;
1286     /* The ntp_tick_length() value currently being used.
1287     * This cached copy ensures we consistently apply the tick
1288     * length for an entire tick, as ntp_tick_length may change
1289     diff --git a/kernel/signal.c b/kernel/signal.c
1290     index 0b1415720a15..deb04d5983ed 100644
1291     --- a/kernel/signal.c
1292     +++ b/kernel/signal.c
1293     @@ -503,7 +503,8 @@ int unhandled_signal(struct task_struct *tsk, int sig)
1294     return !tsk->ptrace;
1295     }
1296    
1297     -static void collect_signal(int sig, struct sigpending *list, siginfo_t *info)
1298     +static void collect_signal(int sig, struct sigpending *list, siginfo_t *info,
1299     + bool *resched_timer)
1300     {
1301     struct sigqueue *q, *first = NULL;
1302    
1303     @@ -525,6 +526,12 @@ static void collect_signal(int sig, struct sigpending *list, siginfo_t *info)
1304     still_pending:
1305     list_del_init(&first->list);
1306     copy_siginfo(info, &first->info);
1307     +
1308     + *resched_timer =
1309     + (first->flags & SIGQUEUE_PREALLOC) &&
1310     + (info->si_code == SI_TIMER) &&
1311     + (info->si_sys_private);
1312     +
1313     __sigqueue_free(first);
1314     } else {
1315     /*
1316     @@ -541,12 +548,12 @@ static void collect_signal(int sig, struct sigpending *list, siginfo_t *info)
1317     }
1318    
1319     static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
1320     - siginfo_t *info)
1321     + siginfo_t *info, bool *resched_timer)
1322     {
1323     int sig = next_signal(pending, mask);
1324    
1325     if (sig)
1326     - collect_signal(sig, pending, info);
1327     + collect_signal(sig, pending, info, resched_timer);
1328     return sig;
1329     }
1330    
1331     @@ -558,15 +565,16 @@ static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
1332     */
1333     int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
1334     {
1335     + bool resched_timer = false;
1336     int signr;
1337    
1338     /* We only dequeue private signals from ourselves, we don't let
1339     * signalfd steal them
1340     */
1341     - signr = __dequeue_signal(&tsk->pending, mask, info);
1342     + signr = __dequeue_signal(&tsk->pending, mask, info, &resched_timer);
1343     if (!signr) {
1344     signr = __dequeue_signal(&tsk->signal->shared_pending,
1345     - mask, info);
1346     + mask, info, &resched_timer);
1347     /*
1348     * itimer signal ?
1349     *
1350     @@ -611,7 +619,7 @@ int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
1351     */
1352     current->jobctl |= JOBCTL_STOP_DEQUEUED;
1353     }
1354     - if ((info->si_code & __SI_MASK) == __SI_TIMER && info->si_sys_private) {
1355     + if (resched_timer) {
1356     /*
1357     * Release the siglock to ensure proper locking order
1358     * of timer locks outside of siglocks. Note, we leave
1359     diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
1360     index 46e312e9be38..d831827d7ab0 100644
1361     --- a/kernel/time/timekeeping.c
1362     +++ b/kernel/time/timekeeping.c
1363     @@ -116,6 +116,26 @@ static inline void tk_update_sleep_time(struct timekeeper *tk, ktime_t delta)
1364     tk->offs_boot = ktime_add(tk->offs_boot, delta);
1365     }
1366    
1367     +/*
1368     + * tk_clock_read - atomic clocksource read() helper
1369     + *
1370     + * This helper is necessary to use in the read paths because, while the
1371     + * seqlock ensures we don't return a bad value while structures are updated,
1372     + * it doesn't protect from potential crashes. There is the possibility that
1373     + * the tkr's clocksource may change between the read reference, and the
1374     + * clock reference passed to the read function. This can cause crashes if
1375     + * the wrong clocksource is passed to the wrong read function.
1376     + * This isn't necessary to use when holding the timekeeper_lock or doing
1377     + * a read of the fast-timekeeper tkrs (which is protected by its own locking
1378     + * and update logic).
1379     + */
1380     +static inline u64 tk_clock_read(struct tk_read_base *tkr)
1381     +{
1382     + struct clocksource *clock = READ_ONCE(tkr->clock);
1383     +
1384     + return clock->read(clock);
1385     +}
1386     +
1387     #ifdef CONFIG_DEBUG_TIMEKEEPING
1388     #define WARNING_FREQ (HZ*300) /* 5 minute rate-limiting */
1389    
1390     @@ -173,7 +193,7 @@ static inline cycle_t timekeeping_get_delta(struct tk_read_base *tkr)
1391     */
1392     do {
1393     seq = read_seqcount_begin(&tk_core.seq);
1394     - now = tkr->read(tkr->clock);
1395     + now = tk_clock_read(tkr);
1396     last = tkr->cycle_last;
1397     mask = tkr->mask;
1398     max = tkr->clock->max_cycles;
1399     @@ -207,7 +227,7 @@ static inline cycle_t timekeeping_get_delta(struct tk_read_base *tkr)
1400     cycle_t cycle_now, delta;
1401    
1402     /* read clocksource */
1403     - cycle_now = tkr->read(tkr->clock);
1404     + cycle_now = tk_clock_read(tkr);
1405    
1406     /* calculate the delta since the last update_wall_time */
1407     delta = clocksource_delta(cycle_now, tkr->cycle_last, tkr->mask);
1408     @@ -236,12 +256,10 @@ static void tk_setup_internals(struct timekeeper *tk, struct clocksource *clock)
1409     ++tk->cs_was_changed_seq;
1410     old_clock = tk->tkr_mono.clock;
1411     tk->tkr_mono.clock = clock;
1412     - tk->tkr_mono.read = clock->read;
1413     tk->tkr_mono.mask = clock->mask;
1414     - tk->tkr_mono.cycle_last = tk->tkr_mono.read(clock);
1415     + tk->tkr_mono.cycle_last = tk_clock_read(&tk->tkr_mono);
1416    
1417     tk->tkr_raw.clock = clock;
1418     - tk->tkr_raw.read = clock->read;
1419     tk->tkr_raw.mask = clock->mask;
1420     tk->tkr_raw.cycle_last = tk->tkr_mono.cycle_last;
1421    
1422     @@ -260,8 +278,7 @@ static void tk_setup_internals(struct timekeeper *tk, struct clocksource *clock)
1423     /* Go back from cycles -> shifted ns */
1424     tk->xtime_interval = (u64) interval * clock->mult;
1425     tk->xtime_remainder = ntpinterval - tk->xtime_interval;
1426     - tk->raw_interval =
1427     - ((u64) interval * clock->mult) >> clock->shift;
1428     + tk->raw_interval = interval * clock->mult;
1429    
1430     /* if changing clocks, convert xtime_nsec shift units */
1431     if (old_clock) {
1432     @@ -405,7 +422,7 @@ static __always_inline u64 __ktime_get_fast_ns(struct tk_fast *tkf)
1433    
1434     now += timekeeping_delta_to_ns(tkr,
1435     clocksource_delta(
1436     - tkr->read(tkr->clock),
1437     + tk_clock_read(tkr),
1438     tkr->cycle_last,
1439     tkr->mask));
1440     } while (read_seqcount_retry(&tkf->seq, seq));
1441     @@ -433,6 +450,10 @@ static cycle_t dummy_clock_read(struct clocksource *cs)
1442     return cycles_at_suspend;
1443     }
1444    
1445     +static struct clocksource dummy_clock = {
1446     + .read = dummy_clock_read,
1447     +};
1448     +
1449     /**
1450     * halt_fast_timekeeper - Prevent fast timekeeper from accessing clocksource.
1451     * @tk: Timekeeper to snapshot.
1452     @@ -449,13 +470,13 @@ static void halt_fast_timekeeper(struct timekeeper *tk)
1453     struct tk_read_base *tkr = &tk->tkr_mono;
1454    
1455     memcpy(&tkr_dummy, tkr, sizeof(tkr_dummy));
1456     - cycles_at_suspend = tkr->read(tkr->clock);
1457     - tkr_dummy.read = dummy_clock_read;
1458     + cycles_at_suspend = tk_clock_read(tkr);
1459     + tkr_dummy.clock = &dummy_clock;
1460     update_fast_timekeeper(&tkr_dummy, &tk_fast_mono);
1461    
1462     tkr = &tk->tkr_raw;
1463     memcpy(&tkr_dummy, tkr, sizeof(tkr_dummy));
1464     - tkr_dummy.read = dummy_clock_read;
1465     + tkr_dummy.clock = &dummy_clock;
1466     update_fast_timekeeper(&tkr_dummy, &tk_fast_raw);
1467     }
1468    
1469     @@ -621,11 +642,10 @@ static void timekeeping_update(struct timekeeper *tk, unsigned int action)
1470     */
1471     static void timekeeping_forward_now(struct timekeeper *tk)
1472     {
1473     - struct clocksource *clock = tk->tkr_mono.clock;
1474     cycle_t cycle_now, delta;
1475     s64 nsec;
1476    
1477     - cycle_now = tk->tkr_mono.read(clock);
1478     + cycle_now = tk_clock_read(&tk->tkr_mono);
1479     delta = clocksource_delta(cycle_now, tk->tkr_mono.cycle_last, tk->tkr_mono.mask);
1480     tk->tkr_mono.cycle_last = cycle_now;
1481     tk->tkr_raw.cycle_last = cycle_now;
1482     @@ -901,8 +921,7 @@ void ktime_get_snapshot(struct system_time_snapshot *systime_snapshot)
1483    
1484     do {
1485     seq = read_seqcount_begin(&tk_core.seq);
1486     -
1487     - now = tk->tkr_mono.read(tk->tkr_mono.clock);
1488     + now = tk_clock_read(&tk->tkr_mono);
1489     systime_snapshot->cs_was_changed_seq = tk->cs_was_changed_seq;
1490     systime_snapshot->clock_was_set_seq = tk->clock_was_set_seq;
1491     base_real = ktime_add(tk->tkr_mono.base,
1492     @@ -1081,7 +1100,7 @@ int get_device_system_crosststamp(int (*get_time_fn)
1493     * Check whether the system counter value provided by the
1494     * device driver is on the current timekeeping interval.
1495     */
1496     - now = tk->tkr_mono.read(tk->tkr_mono.clock);
1497     + now = tk_clock_read(&tk->tkr_mono);
1498     interval_start = tk->tkr_mono.cycle_last;
1499     if (!cycle_between(interval_start, cycles, now)) {
1500     clock_was_set_seq = tk->clock_was_set_seq;
1501     @@ -1639,7 +1658,7 @@ void timekeeping_resume(void)
1502     * The less preferred source will only be tried if there is no better
1503     * usable source. The rtc part is handled separately in rtc core code.
1504     */
1505     - cycle_now = tk->tkr_mono.read(clock);
1506     + cycle_now = tk_clock_read(&tk->tkr_mono);
1507     if ((clock->flags & CLOCK_SOURCE_SUSPEND_NONSTOP) &&
1508     cycle_now > tk->tkr_mono.cycle_last) {
1509     u64 num, max = ULLONG_MAX;
1510     @@ -2003,7 +2022,7 @@ static cycle_t logarithmic_accumulation(struct timekeeper *tk, cycle_t offset,
1511     unsigned int *clock_set)
1512     {
1513     cycle_t interval = tk->cycle_interval << shift;
1514     - u64 raw_nsecs;
1515     + u64 snsec_per_sec;
1516    
1517     /* If the offset is smaller than a shifted interval, do nothing */
1518     if (offset < interval)
1519     @@ -2018,14 +2037,15 @@ static cycle_t logarithmic_accumulation(struct timekeeper *tk, cycle_t offset,
1520     *clock_set |= accumulate_nsecs_to_secs(tk);
1521    
1522     /* Accumulate raw time */
1523     - raw_nsecs = (u64)tk->raw_interval << shift;
1524     - raw_nsecs += tk->raw_time.tv_nsec;
1525     - if (raw_nsecs >= NSEC_PER_SEC) {
1526     - u64 raw_secs = raw_nsecs;
1527     - raw_nsecs = do_div(raw_secs, NSEC_PER_SEC);
1528     - tk->raw_time.tv_sec += raw_secs;
1529     + tk->tkr_raw.xtime_nsec += (u64)tk->raw_time.tv_nsec << tk->tkr_raw.shift;
1530     + tk->tkr_raw.xtime_nsec += tk->raw_interval << shift;
1531     + snsec_per_sec = (u64)NSEC_PER_SEC << tk->tkr_raw.shift;
1532     + while (tk->tkr_raw.xtime_nsec >= snsec_per_sec) {
1533     + tk->tkr_raw.xtime_nsec -= snsec_per_sec;
1534     + tk->raw_time.tv_sec++;
1535     }
1536     - tk->raw_time.tv_nsec = raw_nsecs;
1537     + tk->raw_time.tv_nsec = tk->tkr_raw.xtime_nsec >> tk->tkr_raw.shift;
1538     + tk->tkr_raw.xtime_nsec -= (u64)tk->raw_time.tv_nsec << tk->tkr_raw.shift;
1539    
1540     /* Accumulate error between NTP and clock interval */
1541     tk->ntp_error += tk->ntp_tick << shift;
1542     @@ -2057,7 +2077,7 @@ void update_wall_time(void)
1543     #ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
1544     offset = real_tk->cycle_interval;
1545     #else
1546     - offset = clocksource_delta(tk->tkr_mono.read(tk->tkr_mono.clock),
1547     + offset = clocksource_delta(tk_clock_read(&tk->tkr_mono),
1548     tk->tkr_mono.cycle_last, tk->tkr_mono.mask);
1549     #endif
1550    
1551     diff --git a/lib/cmdline.c b/lib/cmdline.c
1552     index 8f13cf73c2ec..79069d7938ea 100644
1553     --- a/lib/cmdline.c
1554     +++ b/lib/cmdline.c
1555     @@ -22,14 +22,14 @@
1556     * the values[M, M+1, ..., N] into the ints array in get_options.
1557     */
1558    
1559     -static int get_range(char **str, int *pint)
1560     +static int get_range(char **str, int *pint, int n)
1561     {
1562     int x, inc_counter, upper_range;
1563    
1564     (*str)++;
1565     upper_range = simple_strtol((*str), NULL, 0);
1566     inc_counter = upper_range - *pint;
1567     - for (x = *pint; x < upper_range; x++)
1568     + for (x = *pint; n && x < upper_range; x++, n--)
1569     *pint++ = x;
1570     return inc_counter;
1571     }
1572     @@ -96,7 +96,7 @@ char *get_options(const char *str, int nints, int *ints)
1573     break;
1574     if (res == 3) {
1575     int range_nums;
1576     - range_nums = get_range((char **)&str, ints + i);
1577     + range_nums = get_range((char **)&str, ints + i, nints - i);
1578     if (range_nums < 0)
1579     break;
1580     /*
1581     diff --git a/net/rxrpc/key.c b/net/rxrpc/key.c
1582     index 18c737a61d80..7fc340726d03 100644
1583     --- a/net/rxrpc/key.c
1584     +++ b/net/rxrpc/key.c
1585     @@ -217,7 +217,7 @@ static int rxrpc_krb5_decode_principal(struct krb5_principal *princ,
1586     unsigned int *_toklen)
1587     {
1588     const __be32 *xdr = *_xdr;
1589     - unsigned int toklen = *_toklen, n_parts, loop, tmp;
1590     + unsigned int toklen = *_toklen, n_parts, loop, tmp, paddedlen;
1591    
1592     /* there must be at least one name, and at least #names+1 length
1593     * words */
1594     @@ -247,16 +247,16 @@ static int rxrpc_krb5_decode_principal(struct krb5_principal *princ,
1595     toklen -= 4;
1596     if (tmp <= 0 || tmp > AFSTOKEN_STRING_MAX)
1597     return -EINVAL;
1598     - if (tmp > toklen)
1599     + paddedlen = (tmp + 3) & ~3;
1600     + if (paddedlen > toklen)
1601     return -EINVAL;
1602     princ->name_parts[loop] = kmalloc(tmp + 1, GFP_KERNEL);
1603     if (!princ->name_parts[loop])
1604     return -ENOMEM;
1605     memcpy(princ->name_parts[loop], xdr, tmp);
1606     princ->name_parts[loop][tmp] = 0;
1607     - tmp = (tmp + 3) & ~3;
1608     - toklen -= tmp;
1609     - xdr += tmp >> 2;
1610     + toklen -= paddedlen;
1611     + xdr += paddedlen >> 2;
1612     }
1613    
1614     if (toklen < 4)
1615     @@ -265,16 +265,16 @@ static int rxrpc_krb5_decode_principal(struct krb5_principal *princ,
1616     toklen -= 4;
1617     if (tmp <= 0 || tmp > AFSTOKEN_K5_REALM_MAX)
1618     return -EINVAL;
1619     - if (tmp > toklen)
1620     + paddedlen = (tmp + 3) & ~3;
1621     + if (paddedlen > toklen)
1622     return -EINVAL;
1623     princ->realm = kmalloc(tmp + 1, GFP_KERNEL);
1624     if (!princ->realm)
1625     return -ENOMEM;
1626     memcpy(princ->realm, xdr, tmp);
1627     princ->realm[tmp] = 0;
1628     - tmp = (tmp + 3) & ~3;
1629     - toklen -= tmp;
1630     - xdr += tmp >> 2;
1631     + toklen -= paddedlen;
1632     + xdr += paddedlen >> 2;
1633    
1634     _debug("%s/...@%s", princ->name_parts[0], princ->realm);
1635    
1636     @@ -293,7 +293,7 @@ static int rxrpc_krb5_decode_tagged_data(struct krb5_tagged_data *td,
1637     unsigned int *_toklen)
1638     {
1639     const __be32 *xdr = *_xdr;
1640     - unsigned int toklen = *_toklen, len;
1641     + unsigned int toklen = *_toklen, len, paddedlen;
1642    
1643     /* there must be at least one tag and one length word */
1644     if (toklen <= 8)
1645     @@ -307,15 +307,17 @@ static int rxrpc_krb5_decode_tagged_data(struct krb5_tagged_data *td,
1646     toklen -= 8;
1647     if (len > max_data_size)
1648     return -EINVAL;
1649     + paddedlen = (len + 3) & ~3;
1650     + if (paddedlen > toklen)
1651     + return -EINVAL;
1652     td->data_len = len;
1653    
1654     if (len > 0) {
1655     td->data = kmemdup(xdr, len, GFP_KERNEL);
1656     if (!td->data)
1657     return -ENOMEM;
1658     - len = (len + 3) & ~3;
1659     - toklen -= len;
1660     - xdr += len >> 2;
1661     + toklen -= paddedlen;
1662     + xdr += paddedlen >> 2;
1663     }
1664    
1665     _debug("tag %x len %x", td->tag, td->data_len);
1666     @@ -387,7 +389,7 @@ static int rxrpc_krb5_decode_ticket(u8 **_ticket, u16 *_tktlen,
1667     const __be32 **_xdr, unsigned int *_toklen)
1668     {
1669     const __be32 *xdr = *_xdr;
1670     - unsigned int toklen = *_toklen, len;
1671     + unsigned int toklen = *_toklen, len, paddedlen;
1672    
1673     /* there must be at least one length word */
1674     if (toklen <= 4)
1675     @@ -399,6 +401,9 @@ static int rxrpc_krb5_decode_ticket(u8 **_ticket, u16 *_tktlen,
1676     toklen -= 4;
1677     if (len > AFSTOKEN_K5_TIX_MAX)
1678     return -EINVAL;
1679     + paddedlen = (len + 3) & ~3;
1680     + if (paddedlen > toklen)
1681     + return -EINVAL;
1682     *_tktlen = len;
1683    
1684     _debug("ticket len %u", len);
1685     @@ -407,9 +412,8 @@ static int rxrpc_krb5_decode_ticket(u8 **_ticket, u16 *_tktlen,
1686     *_ticket = kmemdup(xdr, len, GFP_KERNEL);
1687     if (!*_ticket)
1688     return -ENOMEM;
1689     - len = (len + 3) & ~3;
1690     - toklen -= len;
1691     - xdr += len >> 2;
1692     + toklen -= paddedlen;
1693     + xdr += paddedlen >> 2;
1694     }
1695    
1696     *_xdr = xdr;
1697     @@ -552,7 +556,7 @@ static int rxrpc_preparse_xdr(struct key_preparsed_payload *prep)
1698     {
1699     const __be32 *xdr = prep->data, *token;
1700     const char *cp;
1701     - unsigned int len, tmp, loop, ntoken, toklen, sec_ix;
1702     + unsigned int len, paddedlen, loop, ntoken, toklen, sec_ix;
1703     size_t datalen = prep->datalen;
1704     int ret;
1705    
1706     @@ -578,22 +582,21 @@ static int rxrpc_preparse_xdr(struct key_preparsed_payload *prep)
1707     if (len < 1 || len > AFSTOKEN_CELL_MAX)
1708     goto not_xdr;
1709     datalen -= 4;
1710     - tmp = (len + 3) & ~3;
1711     - if (tmp > datalen)
1712     + paddedlen = (len + 3) & ~3;
1713     + if (paddedlen > datalen)
1714     goto not_xdr;
1715    
1716     cp = (const char *) xdr;
1717     for (loop = 0; loop < len; loop++)
1718     if (!isprint(cp[loop]))
1719     goto not_xdr;
1720     - if (len < tmp)
1721     - for (; loop < tmp; loop++)
1722     - if (cp[loop])
1723     - goto not_xdr;
1724     + for (; loop < paddedlen; loop++)
1725     + if (cp[loop])
1726     + goto not_xdr;
1727     _debug("cellname: [%u/%u] '%*.*s'",
1728     - len, tmp, len, len, (const char *) xdr);
1729     - datalen -= tmp;
1730     - xdr += tmp >> 2;
1731     + len, paddedlen, len, len, (const char *) xdr);
1732     + datalen -= paddedlen;
1733     + xdr += paddedlen >> 2;
1734    
1735     /* get the token count */
1736     if (datalen < 12)
1737     @@ -614,10 +617,11 @@ static int rxrpc_preparse_xdr(struct key_preparsed_payload *prep)
1738     sec_ix = ntohl(*xdr);
1739     datalen -= 4;
1740     _debug("token: [%x/%zx] %x", toklen, datalen, sec_ix);
1741     - if (toklen < 20 || toklen > datalen)
1742     + paddedlen = (toklen + 3) & ~3;
1743     + if (toklen < 20 || toklen > datalen || paddedlen > datalen)
1744     goto not_xdr;
1745     - datalen -= (toklen + 3) & ~3;
1746     - xdr += (toklen + 3) >> 2;
1747     + datalen -= paddedlen;
1748     + xdr += paddedlen >> 2;
1749    
1750     } while (--loop > 0);
1751    
1752     diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
1753     index bb1261591a1f..7f0598b32f13 100644
1754     --- a/sound/core/pcm_lib.c
1755     +++ b/sound/core/pcm_lib.c
1756     @@ -2491,7 +2491,7 @@ static int pcm_chmap_ctl_get(struct snd_kcontrol *kcontrol,
1757     struct snd_pcm_substream *substream;
1758     const struct snd_pcm_chmap_elem *map;
1759    
1760     - if (snd_BUG_ON(!info->chmap))
1761     + if (!info->chmap)
1762     return -EINVAL;
1763     substream = snd_pcm_chmap_substream(info, idx);
1764     if (!substream)
1765     @@ -2523,7 +2523,7 @@ static int pcm_chmap_ctl_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1766     unsigned int __user *dst;
1767     int c, count = 0;
1768    
1769     - if (snd_BUG_ON(!info->chmap))
1770     + if (!info->chmap)
1771     return -EINVAL;
1772     if (size < 8)
1773     return -ENOMEM;
1774     diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c
1775     index 00060c4a9deb..9741757436be 100644
1776     --- a/sound/firewire/amdtp-stream.c
1777     +++ b/sound/firewire/amdtp-stream.c
1778     @@ -606,7 +606,9 @@ static void out_stream_callback(struct fw_iso_context *context, u32 tstamp,
1779     cycle = increment_cycle_count(cycle, 1);
1780     if (handle_out_packet(s, cycle, i) < 0) {
1781     s->packet_index = -1;
1782     - amdtp_stream_pcm_abort(s);
1783     + if (in_interrupt())
1784     + amdtp_stream_pcm_abort(s);
1785     + WRITE_ONCE(s->pcm_buffer_pointer, SNDRV_PCM_POS_XRUN);
1786     return;
1787     }
1788     }
1789     @@ -658,7 +660,9 @@ static void in_stream_callback(struct fw_iso_context *context, u32 tstamp,
1790     /* Queueing error or detecting invalid payload. */
1791     if (i < packets) {
1792     s->packet_index = -1;
1793     - amdtp_stream_pcm_abort(s);
1794     + if (in_interrupt())
1795     + amdtp_stream_pcm_abort(s);
1796     + WRITE_ONCE(s->pcm_buffer_pointer, SNDRV_PCM_POS_XRUN);
1797     return;
1798     }
1799    
1800     diff --git a/sound/firewire/amdtp-stream.h b/sound/firewire/amdtp-stream.h
1801     index c1bc7fad056e..f7c054bc9d92 100644
1802     --- a/sound/firewire/amdtp-stream.h
1803     +++ b/sound/firewire/amdtp-stream.h
1804     @@ -124,7 +124,7 @@ struct amdtp_stream {
1805     /* For a PCM substream processing. */
1806     struct snd_pcm_substream *pcm;
1807     struct tasklet_struct period_tasklet;
1808     - unsigned int pcm_buffer_pointer;
1809     + snd_pcm_uframes_t pcm_buffer_pointer;
1810     unsigned int pcm_period_pointer;
1811    
1812     /* To wait for first packet. */