Magellan Linux

Annotation of /trunk/kernel-alx/patches-5.4/0120-5.4.21-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3501 - (hide annotations) (download)
Mon May 11 14:36:22 2020 UTC (4 years ago) by niro
File size: 85938 byte(s)
-linux-5.4.21
1 niro 3501 diff --git a/Makefile b/Makefile
2     index 21e58bd54715..adfc88f00f07 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 5
8     PATCHLEVEL = 4
9     -SUBLEVEL = 20
10     +SUBLEVEL = 21
11     EXTRAVERSION =
12     NAME = Kleptomaniac Octopus
13    
14     diff --git a/arch/arm/mach-npcm/Kconfig b/arch/arm/mach-npcm/Kconfig
15     index 880bc2a5cada..7f7002dc2b21 100644
16     --- a/arch/arm/mach-npcm/Kconfig
17     +++ b/arch/arm/mach-npcm/Kconfig
18     @@ -11,7 +11,7 @@ config ARCH_NPCM7XX
19     depends on ARCH_MULTI_V7
20     select PINCTRL_NPCM7XX
21     select NPCM7XX_TIMER
22     - select ARCH_REQUIRE_GPIOLIB
23     + select GPIOLIB
24     select CACHE_L2X0
25     select ARM_GIC
26     select HAVE_ARM_TWD if SMP
27     diff --git a/arch/arm64/boot/dts/arm/fvp-base-revc.dts b/arch/arm64/boot/dts/arm/fvp-base-revc.dts
28     index 62ab0d54ff71..335fff762451 100644
29     --- a/arch/arm64/boot/dts/arm/fvp-base-revc.dts
30     +++ b/arch/arm64/boot/dts/arm/fvp-base-revc.dts
31     @@ -161,10 +161,10 @@
32     bus-range = <0x0 0x1>;
33     reg = <0x0 0x40000000 0x0 0x10000000>;
34     ranges = <0x2000000 0x0 0x50000000 0x0 0x50000000 0x0 0x10000000>;
35     - interrupt-map = <0 0 0 1 &gic GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>,
36     - <0 0 0 2 &gic GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>,
37     - <0 0 0 3 &gic GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>,
38     - <0 0 0 4 &gic GIC_SPI 171 IRQ_TYPE_LEVEL_HIGH>;
39     + interrupt-map = <0 0 0 1 &gic 0 0 GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>,
40     + <0 0 0 2 &gic 0 0 GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>,
41     + <0 0 0 3 &gic 0 0 GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>,
42     + <0 0 0 4 &gic 0 0 GIC_SPI 171 IRQ_TYPE_LEVEL_HIGH>;
43     interrupt-map-mask = <0x0 0x0 0x0 0x7>;
44     msi-map = <0x0 &its 0x0 0x10000>;
45     iommu-map = <0x0 &smmu 0x0 0x10000>;
46     diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
47     index d54586d5b031..fab013c5ee8c 100644
48     --- a/arch/arm64/kernel/process.c
49     +++ b/arch/arm64/kernel/process.c
50     @@ -466,6 +466,13 @@ static void ssbs_thread_switch(struct task_struct *next)
51     if (unlikely(next->flags & PF_KTHREAD))
52     return;
53    
54     + /*
55     + * If all CPUs implement the SSBS extension, then we just need to
56     + * context-switch the PSTATE field.
57     + */
58     + if (cpu_have_feature(cpu_feature(SSBS)))
59     + return;
60     +
61     /* If the mitigation is enabled, then we leave SSBS clear. */
62     if ((arm64_get_ssbd_state() == ARM64_SSBD_FORCE_ENABLE) ||
63     test_tsk_thread_flag(next, TIF_SSBD))
64     diff --git a/arch/s390/boot/uv.c b/arch/s390/boot/uv.c
65     index ed007f4a6444..3f501159ee9f 100644
66     --- a/arch/s390/boot/uv.c
67     +++ b/arch/s390/boot/uv.c
68     @@ -15,7 +15,8 @@ void uv_query_info(void)
69     if (!test_facility(158))
70     return;
71    
72     - if (uv_call(0, (uint64_t)&uvcb))
73     + /* rc==0x100 means that there is additional data we do not process */
74     + if (uv_call(0, (uint64_t)&uvcb) && uvcb.header.rc != 0x100)
75     return;
76    
77     if (test_bit_inv(BIT_UVC_CMD_SET_SHARED_ACCESS, (unsigned long *)uvcb.inst_calls_list) &&
78     diff --git a/arch/s390/include/asm/timex.h b/arch/s390/include/asm/timex.h
79     index 2dc9eb4e1acc..b6a4ce9dafaf 100644
80     --- a/arch/s390/include/asm/timex.h
81     +++ b/arch/s390/include/asm/timex.h
82     @@ -155,7 +155,7 @@ static inline void get_tod_clock_ext(char *clk)
83    
84     static inline unsigned long long get_tod_clock(void)
85     {
86     - unsigned char clk[STORE_CLOCK_EXT_SIZE];
87     + char clk[STORE_CLOCK_EXT_SIZE];
88    
89     get_tod_clock_ext(clk);
90     return *((unsigned long long *)&clk[1]);
91     diff --git a/arch/x86/events/amd/core.c b/arch/x86/events/amd/core.c
92     index 64c3e70b0556..beffafd7dcc3 100644
93     --- a/arch/x86/events/amd/core.c
94     +++ b/arch/x86/events/amd/core.c
95     @@ -246,6 +246,7 @@ static const u64 amd_f17h_perfmon_event_map[PERF_COUNT_HW_MAX] =
96     [PERF_COUNT_HW_CPU_CYCLES] = 0x0076,
97     [PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0,
98     [PERF_COUNT_HW_CACHE_REFERENCES] = 0xff60,
99     + [PERF_COUNT_HW_CACHE_MISSES] = 0x0964,
100     [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = 0x00c2,
101     [PERF_COUNT_HW_BRANCH_MISSES] = 0x00c3,
102     [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = 0x0287,
103     diff --git a/arch/x86/events/intel/ds.c b/arch/x86/events/intel/ds.c
104     index ce83950036c5..e5ad97a82342 100644
105     --- a/arch/x86/events/intel/ds.c
106     +++ b/arch/x86/events/intel/ds.c
107     @@ -1713,6 +1713,8 @@ intel_pmu_save_and_restart_reload(struct perf_event *event, int count)
108     old = ((s64)(prev_raw_count << shift) >> shift);
109     local64_add(new - old + count * period, &event->count);
110    
111     + local64_set(&hwc->period_left, -new);
112     +
113     perf_event_update_userpage(event);
114    
115     return 0;
116     diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
117     index c1d7b866a03f..4e3f137ffa8c 100644
118     --- a/arch/x86/kvm/paging_tmpl.h
119     +++ b/arch/x86/kvm/paging_tmpl.h
120     @@ -33,7 +33,7 @@
121     #define PT_GUEST_ACCESSED_SHIFT PT_ACCESSED_SHIFT
122     #define PT_HAVE_ACCESSED_DIRTY(mmu) true
123     #ifdef CONFIG_X86_64
124     - #define PT_MAX_FULL_LEVELS 4
125     + #define PT_MAX_FULL_LEVELS PT64_ROOT_MAX_LEVEL
126     #define CMPXCHG cmpxchg
127     #else
128     #define CMPXCHG cmpxchg64
129     diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
130     index dc7c166c4335..84b57b461ad6 100644
131     --- a/arch/x86/kvm/vmx/vmx.c
132     +++ b/arch/x86/kvm/vmx/vmx.c
133     @@ -2975,6 +2975,9 @@ void vmx_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0)
134    
135     static int get_ept_level(struct kvm_vcpu *vcpu)
136     {
137     + /* Nested EPT currently only supports 4-level walks. */
138     + if (is_guest_mode(vcpu) && nested_cpu_has_ept(get_vmcs12(vcpu)))
139     + return 4;
140     if (cpu_has_vmx_ept_5levels() && (cpuid_maxphyaddr(vcpu) > 48))
141     return 5;
142     return 4;
143     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
144     index edde5ee8c6f5..95180d67d570 100644
145     --- a/arch/x86/kvm/x86.c
146     +++ b/arch/x86/kvm/x86.c
147     @@ -445,6 +445,14 @@ void kvm_deliver_exception_payload(struct kvm_vcpu *vcpu)
148     * for #DB exceptions under VMX.
149     */
150     vcpu->arch.dr6 ^= payload & DR6_RTM;
151     +
152     + /*
153     + * The #DB payload is defined as compatible with the 'pending
154     + * debug exceptions' field under VMX, not DR6. While bit 12 is
155     + * defined in the 'pending debug exceptions' field (enabled
156     + * breakpoint), it is reserved and must be zero in DR6.
157     + */
158     + vcpu->arch.dr6 &= ~BIT(12);
159     break;
160     case PF_VECTOR:
161     vcpu->arch.cr2 = payload;
162     diff --git a/drivers/acpi/acpica/achware.h b/drivers/acpi/acpica/achware.h
163     index bcf8f7501db7..a74c1a0e892d 100644
164     --- a/drivers/acpi/acpica/achware.h
165     +++ b/drivers/acpi/acpica/achware.h
166     @@ -101,6 +101,8 @@ acpi_status acpi_hw_enable_all_runtime_gpes(void);
167    
168     acpi_status acpi_hw_enable_all_wakeup_gpes(void);
169    
170     +u8 acpi_hw_check_all_gpes(void);
171     +
172     acpi_status
173     acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
174     struct acpi_gpe_block_info *gpe_block,
175     diff --git a/drivers/acpi/acpica/evxfgpe.c b/drivers/acpi/acpica/evxfgpe.c
176     index 04a40d563dd6..84b0b410310e 100644
177     --- a/drivers/acpi/acpica/evxfgpe.c
178     +++ b/drivers/acpi/acpica/evxfgpe.c
179     @@ -795,6 +795,38 @@ acpi_status acpi_enable_all_wakeup_gpes(void)
180    
181     ACPI_EXPORT_SYMBOL(acpi_enable_all_wakeup_gpes)
182    
183     +/******************************************************************************
184     + *
185     + * FUNCTION: acpi_any_gpe_status_set
186     + *
187     + * PARAMETERS: None
188     + *
189     + * RETURN: Whether or not the status bit is set for any GPE
190     + *
191     + * DESCRIPTION: Check the status bits of all enabled GPEs and return TRUE if any
192     + * of them is set or FALSE otherwise.
193     + *
194     + ******************************************************************************/
195     +u32 acpi_any_gpe_status_set(void)
196     +{
197     + acpi_status status;
198     + u8 ret;
199     +
200     + ACPI_FUNCTION_TRACE(acpi_any_gpe_status_set);
201     +
202     + status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
203     + if (ACPI_FAILURE(status)) {
204     + return (FALSE);
205     + }
206     +
207     + ret = acpi_hw_check_all_gpes();
208     + (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
209     +
210     + return (ret);
211     +}
212     +
213     +ACPI_EXPORT_SYMBOL(acpi_any_gpe_status_set)
214     +
215     /*******************************************************************************
216     *
217     * FUNCTION: acpi_install_gpe_block
218     diff --git a/drivers/acpi/acpica/hwgpe.c b/drivers/acpi/acpica/hwgpe.c
219     index 565bd3f29f31..b1d7d5f92495 100644
220     --- a/drivers/acpi/acpica/hwgpe.c
221     +++ b/drivers/acpi/acpica/hwgpe.c
222     @@ -444,6 +444,53 @@ acpi_hw_enable_wakeup_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
223     return (AE_OK);
224     }
225    
226     +/******************************************************************************
227     + *
228     + * FUNCTION: acpi_hw_get_gpe_block_status
229     + *
230     + * PARAMETERS: gpe_xrupt_info - GPE Interrupt info
231     + * gpe_block - Gpe Block info
232     + *
233     + * RETURN: Success
234     + *
235     + * DESCRIPTION: Produce a combined GPE status bits mask for the given block.
236     + *
237     + ******************************************************************************/
238     +
239     +static acpi_status
240     +acpi_hw_get_gpe_block_status(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
241     + struct acpi_gpe_block_info *gpe_block,
242     + void *ret_ptr)
243     +{
244     + struct acpi_gpe_register_info *gpe_register_info;
245     + u64 in_enable, in_status;
246     + acpi_status status;
247     + u8 *ret = ret_ptr;
248     + u32 i;
249     +
250     + /* Examine each GPE Register within the block */
251     +
252     + for (i = 0; i < gpe_block->register_count; i++) {
253     + gpe_register_info = &gpe_block->register_info[i];
254     +
255     + status = acpi_hw_read(&in_enable,
256     + &gpe_register_info->enable_address);
257     + if (ACPI_FAILURE(status)) {
258     + continue;
259     + }
260     +
261     + status = acpi_hw_read(&in_status,
262     + &gpe_register_info->status_address);
263     + if (ACPI_FAILURE(status)) {
264     + continue;
265     + }
266     +
267     + *ret |= in_enable & in_status;
268     + }
269     +
270     + return (AE_OK);
271     +}
272     +
273     /******************************************************************************
274     *
275     * FUNCTION: acpi_hw_disable_all_gpes
276     @@ -510,4 +557,28 @@ acpi_status acpi_hw_enable_all_wakeup_gpes(void)
277     return_ACPI_STATUS(status);
278     }
279    
280     +/******************************************************************************
281     + *
282     + * FUNCTION: acpi_hw_check_all_gpes
283     + *
284     + * PARAMETERS: None
285     + *
286     + * RETURN: Combined status of all GPEs
287     + *
288     + * DESCRIPTION: Check all enabled GPEs in all GPE blocks and return TRUE if the
289     + * status bit is set for at least one of them of FALSE otherwise.
290     + *
291     + ******************************************************************************/
292     +
293     +u8 acpi_hw_check_all_gpes(void)
294     +{
295     + u8 ret = 0;
296     +
297     + ACPI_FUNCTION_TRACE(acpi_hw_check_all_gpes);
298     +
299     + (void)acpi_ev_walk_gpe_list(acpi_hw_get_gpe_block_status, &ret);
300     +
301     + return (ret != 0);
302     +}
303     +
304     #endif /* !ACPI_REDUCED_HARDWARE */
305     diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
306     index bd75caff8322..ca5cdb621c2a 100644
307     --- a/drivers/acpi/ec.c
308     +++ b/drivers/acpi/ec.c
309     @@ -179,6 +179,7 @@ EXPORT_SYMBOL(first_ec);
310    
311     static struct acpi_ec *boot_ec;
312     static bool boot_ec_is_ecdt = false;
313     +static struct workqueue_struct *ec_wq;
314     static struct workqueue_struct *ec_query_wq;
315    
316     static int EC_FLAGS_QUERY_HANDSHAKE; /* Needs QR_EC issued when SCI_EVT set */
317     @@ -461,7 +462,7 @@ static void acpi_ec_submit_query(struct acpi_ec *ec)
318     ec_dbg_evt("Command(%s) submitted/blocked",
319     acpi_ec_cmd_string(ACPI_EC_COMMAND_QUERY));
320     ec->nr_pending_queries++;
321     - schedule_work(&ec->work);
322     + queue_work(ec_wq, &ec->work);
323     }
324     }
325    
326     @@ -527,7 +528,7 @@ static void acpi_ec_enable_event(struct acpi_ec *ec)
327     #ifdef CONFIG_PM_SLEEP
328     static void __acpi_ec_flush_work(void)
329     {
330     - flush_scheduled_work(); /* flush ec->work */
331     + drain_workqueue(ec_wq); /* flush ec->work */
332     flush_workqueue(ec_query_wq); /* flush queries */
333     }
334    
335     @@ -548,8 +549,8 @@ static void acpi_ec_disable_event(struct acpi_ec *ec)
336    
337     void acpi_ec_flush_work(void)
338     {
339     - /* Without ec_query_wq there is nothing to flush. */
340     - if (!ec_query_wq)
341     + /* Without ec_wq there is nothing to flush. */
342     + if (!ec_wq)
343     return;
344    
345     __acpi_ec_flush_work();
346     @@ -2032,25 +2033,33 @@ static struct acpi_driver acpi_ec_driver = {
347     .drv.pm = &acpi_ec_pm,
348     };
349    
350     -static inline int acpi_ec_query_init(void)
351     +static void acpi_ec_destroy_workqueues(void)
352     {
353     - if (!ec_query_wq) {
354     - ec_query_wq = alloc_workqueue("kec_query", 0,
355     - ec_max_queries);
356     - if (!ec_query_wq)
357     - return -ENODEV;
358     + if (ec_wq) {
359     + destroy_workqueue(ec_wq);
360     + ec_wq = NULL;
361     }
362     - return 0;
363     -}
364     -
365     -static inline void acpi_ec_query_exit(void)
366     -{
367     if (ec_query_wq) {
368     destroy_workqueue(ec_query_wq);
369     ec_query_wq = NULL;
370     }
371     }
372    
373     +static int acpi_ec_init_workqueues(void)
374     +{
375     + if (!ec_wq)
376     + ec_wq = alloc_ordered_workqueue("kec", 0);
377     +
378     + if (!ec_query_wq)
379     + ec_query_wq = alloc_workqueue("kec_query", 0, ec_max_queries);
380     +
381     + if (!ec_wq || !ec_query_wq) {
382     + acpi_ec_destroy_workqueues();
383     + return -ENODEV;
384     + }
385     + return 0;
386     +}
387     +
388     static const struct dmi_system_id acpi_ec_no_wakeup[] = {
389     {
390     .ident = "Thinkpad X1 Carbon 6th",
391     @@ -2081,8 +2090,7 @@ int __init acpi_ec_init(void)
392     int result;
393     int ecdt_fail, dsdt_fail;
394    
395     - /* register workqueue for _Qxx evaluations */
396     - result = acpi_ec_query_init();
397     + result = acpi_ec_init_workqueues();
398     if (result)
399     return result;
400    
401     @@ -2113,6 +2121,6 @@ static void __exit acpi_ec_exit(void)
402     {
403    
404     acpi_bus_unregister_driver(&acpi_ec_driver);
405     - acpi_ec_query_exit();
406     + acpi_ec_destroy_workqueues();
407     }
408     #endif /* 0 */
409     diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
410     index 2af937a8b1c5..62348ec2a807 100644
411     --- a/drivers/acpi/sleep.c
412     +++ b/drivers/acpi/sleep.c
413     @@ -977,21 +977,34 @@ static int acpi_s2idle_prepare_late(void)
414     return 0;
415     }
416    
417     -static void acpi_s2idle_wake(void)
418     +static bool acpi_s2idle_wake(void)
419     {
420     - /*
421     - * If IRQD_WAKEUP_ARMED is set for the SCI at this point, the SCI has
422     - * not triggered while suspended, so bail out.
423     - */
424     - if (!acpi_sci_irq_valid() ||
425     - irqd_is_wakeup_armed(irq_get_irq_data(acpi_sci_irq)))
426     - return;
427     + if (!acpi_sci_irq_valid())
428     + return pm_wakeup_pending();
429     +
430     + while (pm_wakeup_pending()) {
431     + /*
432     + * If IRQD_WAKEUP_ARMED is set for the SCI at this point, the
433     + * SCI has not triggered while suspended, so bail out (the
434     + * wakeup is pending anyway and the SCI is not the source of
435     + * it).
436     + */
437     + if (irqd_is_wakeup_armed(irq_get_irq_data(acpi_sci_irq)))
438     + return true;
439     +
440     + /*
441     + * If there are no EC events to process and at least one of the
442     + * other enabled GPEs is active, the wakeup is regarded as a
443     + * genuine one.
444     + *
445     + * Note that the checks below must be carried out in this order
446     + * to avoid returning prematurely due to a change of the EC GPE
447     + * status bit from unset to set between the checks with the
448     + * status bits of all the other GPEs unset.
449     + */
450     + if (acpi_any_gpe_status_set() && !acpi_ec_dispatch_gpe())
451     + return true;
452    
453     - /*
454     - * If there are EC events to process, the wakeup may be a spurious one
455     - * coming from the EC.
456     - */
457     - if (acpi_ec_dispatch_gpe()) {
458     /*
459     * Cancel the wakeup and process all pending events in case
460     * there are any wakeup ones in there.
461     @@ -1009,8 +1022,19 @@ static void acpi_s2idle_wake(void)
462     acpi_ec_flush_work();
463     acpi_os_wait_events_complete(); /* synchronize Notify handling */
464    
465     + /*
466     + * The SCI is in the "suspended" state now and it cannot produce
467     + * new wakeup events till the rearming below, so if any of them
468     + * are pending here, they must be resulting from the processing
469     + * of EC events above or coming from somewhere else.
470     + */
471     + if (pm_wakeup_pending())
472     + return true;
473     +
474     rearm_wake_irq(acpi_sci_irq);
475     }
476     +
477     + return false;
478     }
479    
480     static void acpi_s2idle_restore_early(void)
481     diff --git a/drivers/bus/moxtet.c b/drivers/bus/moxtet.c
482     index 36cf13eee6b8..68413bf9cf87 100644
483     --- a/drivers/bus/moxtet.c
484     +++ b/drivers/bus/moxtet.c
485     @@ -466,7 +466,7 @@ static ssize_t input_read(struct file *file, char __user *buf, size_t len,
486     {
487     struct moxtet *moxtet = file->private_data;
488     u8 bin[TURRIS_MOX_MAX_MODULES];
489     - u8 hex[sizeof(buf) * 2 + 1];
490     + u8 hex[sizeof(bin) * 2 + 1];
491     int ret, n;
492    
493     ret = moxtet_spi_read(moxtet, bin);
494     diff --git a/drivers/char/ipmi/ipmb_dev_int.c b/drivers/char/ipmi/ipmb_dev_int.c
495     index 285e0b8f9a97..09e3e25562a8 100644
496     --- a/drivers/char/ipmi/ipmb_dev_int.c
497     +++ b/drivers/char/ipmi/ipmb_dev_int.c
498     @@ -265,7 +265,7 @@ static int ipmb_slave_cb(struct i2c_client *client,
499     break;
500    
501     case I2C_SLAVE_WRITE_RECEIVED:
502     - if (ipmb_dev->msg_idx >= sizeof(struct ipmb_msg))
503     + if (ipmb_dev->msg_idx >= sizeof(struct ipmb_msg) - 1)
504     break;
505    
506     buf[++ipmb_dev->msg_idx] = *val;
507     diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c
508     index e6fd079783bd..e73ca303f1a7 100644
509     --- a/drivers/edac/edac_mc.c
510     +++ b/drivers/edac/edac_mc.c
511     @@ -503,16 +503,10 @@ void edac_mc_free(struct mem_ctl_info *mci)
512     {
513     edac_dbg(1, "\n");
514    
515     - /* If we're not yet registered with sysfs free only what was allocated
516     - * in edac_mc_alloc().
517     - */
518     - if (!device_is_registered(&mci->dev)) {
519     - _edac_mc_free(mci);
520     - return;
521     - }
522     + if (device_is_registered(&mci->dev))
523     + edac_unregister_sysfs(mci);
524    
525     - /* the mci instance is freed here, when the sysfs object is dropped */
526     - edac_unregister_sysfs(mci);
527     + _edac_mc_free(mci);
528     }
529     EXPORT_SYMBOL_GPL(edac_mc_free);
530    
531     diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
532     index 32d016f1ecd1..0287884ae28c 100644
533     --- a/drivers/edac/edac_mc_sysfs.c
534     +++ b/drivers/edac/edac_mc_sysfs.c
535     @@ -276,10 +276,7 @@ static const struct attribute_group *csrow_attr_groups[] = {
536    
537     static void csrow_attr_release(struct device *dev)
538     {
539     - struct csrow_info *csrow = container_of(dev, struct csrow_info, dev);
540     -
541     - edac_dbg(1, "device %s released\n", dev_name(dev));
542     - kfree(csrow);
543     + /* release device with _edac_mc_free() */
544     }
545    
546     static const struct device_type csrow_attr_type = {
547     @@ -447,8 +444,7 @@ error:
548     csrow = mci->csrows[i];
549     if (!nr_pages_per_csrow(csrow))
550     continue;
551     -
552     - device_del(&mci->csrows[i]->dev);
553     + device_unregister(&mci->csrows[i]->dev);
554     }
555    
556     return err;
557     @@ -620,10 +616,7 @@ static const struct attribute_group *dimm_attr_groups[] = {
558    
559     static void dimm_attr_release(struct device *dev)
560     {
561     - struct dimm_info *dimm = container_of(dev, struct dimm_info, dev);
562     -
563     - edac_dbg(1, "device %s released\n", dev_name(dev));
564     - kfree(dimm);
565     + /* release device with _edac_mc_free() */
566     }
567    
568     static const struct device_type dimm_attr_type = {
569     @@ -906,10 +899,7 @@ static const struct attribute_group *mci_attr_groups[] = {
570    
571     static void mci_attr_release(struct device *dev)
572     {
573     - struct mem_ctl_info *mci = container_of(dev, struct mem_ctl_info, dev);
574     -
575     - edac_dbg(1, "device %s released\n", dev_name(dev));
576     - kfree(mci);
577     + /* release device with _edac_mc_free() */
578     }
579    
580     static const struct device_type mci_attr_type = {
581     diff --git a/drivers/gpio/gpio-xilinx.c b/drivers/gpio/gpio-xilinx.c
582     index a9748b5198e6..67f9f82e0db0 100644
583     --- a/drivers/gpio/gpio-xilinx.c
584     +++ b/drivers/gpio/gpio-xilinx.c
585     @@ -147,9 +147,10 @@ static void xgpio_set_multiple(struct gpio_chip *gc, unsigned long *mask,
586     for (i = 0; i < gc->ngpio; i++) {
587     if (*mask == 0)
588     break;
589     + /* Once finished with an index write it out to the register */
590     if (index != xgpio_index(chip, i)) {
591     xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET +
592     - xgpio_regoffset(chip, i),
593     + index * XGPIO_CHANNEL_OFFSET,
594     chip->gpio_state[index]);
595     spin_unlock_irqrestore(&chip->gpio_lock[index], flags);
596     index = xgpio_index(chip, i);
597     @@ -165,7 +166,7 @@ static void xgpio_set_multiple(struct gpio_chip *gc, unsigned long *mask,
598     }
599    
600     xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET +
601     - xgpio_regoffset(chip, i), chip->gpio_state[index]);
602     + index * XGPIO_CHANNEL_OFFSET, chip->gpio_state[index]);
603    
604     spin_unlock_irqrestore(&chip->gpio_lock[index], flags);
605     }
606     diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c
607     index 7ee5b7f53aeb..3ece59185d37 100644
608     --- a/drivers/gpio/gpiolib-of.c
609     +++ b/drivers/gpio/gpiolib-of.c
610     @@ -146,10 +146,6 @@ static void of_gpio_flags_quirks(struct device_node *np,
611     if (of_property_read_bool(np, "cd-inverted"))
612     *flags ^= OF_GPIO_ACTIVE_LOW;
613     }
614     - if (!strcmp(propname, "wp-gpios")) {
615     - if (of_property_read_bool(np, "wp-inverted"))
616     - *flags ^= OF_GPIO_ACTIVE_LOW;
617     - }
618     }
619     /*
620     * Some GPIO fixed regulator quirks.
621     diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
622     index 2476306e7030..22506e4614b3 100644
623     --- a/drivers/gpio/gpiolib.c
624     +++ b/drivers/gpio/gpiolib.c
625     @@ -3220,6 +3220,17 @@ int gpiod_is_active_low(const struct gpio_desc *desc)
626     }
627     EXPORT_SYMBOL_GPL(gpiod_is_active_low);
628    
629     +/**
630     + * gpiod_toggle_active_low - toggle whether a GPIO is active-low or not
631     + * @desc: the gpio descriptor to change
632     + */
633     +void gpiod_toggle_active_low(struct gpio_desc *desc)
634     +{
635     + VALIDATE_DESC_VOID(desc);
636     + change_bit(FLAG_ACTIVE_LOW, &desc->flags);
637     +}
638     +EXPORT_SYMBOL_GPL(gpiod_toggle_active_low);
639     +
640     /* I/O calls are only valid after configuration completed; the relevant
641     * "is this a valid GPIO" error checks should already have been done.
642     *
643     diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
644     index 5906c80c4b2c..f57dd195dfb8 100644
645     --- a/drivers/gpu/drm/panfrost/panfrost_drv.c
646     +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
647     @@ -166,6 +166,7 @@ panfrost_lookup_bos(struct drm_device *dev,
648     break;
649     }
650    
651     + atomic_inc(&bo->gpu_usecount);
652     job->mappings[i] = mapping;
653     }
654    
655     diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h
656     index ca1bc9019600..b3517ff9630c 100644
657     --- a/drivers/gpu/drm/panfrost/panfrost_gem.h
658     +++ b/drivers/gpu/drm/panfrost/panfrost_gem.h
659     @@ -30,6 +30,12 @@ struct panfrost_gem_object {
660     struct mutex lock;
661     } mappings;
662    
663     + /*
664     + * Count the number of jobs referencing this BO so we don't let the
665     + * shrinker reclaim this object prematurely.
666     + */
667     + atomic_t gpu_usecount;
668     +
669     bool noexec :1;
670     bool is_heap :1;
671     };
672     diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c
673     index f5dd7b29bc95..288e46c40673 100644
674     --- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c
675     +++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c
676     @@ -41,6 +41,9 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj)
677     struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj);
678     struct panfrost_gem_object *bo = to_panfrost_bo(obj);
679    
680     + if (atomic_read(&bo->gpu_usecount))
681     + return false;
682     +
683     if (!mutex_trylock(&shmem->pages_lock))
684     return false;
685    
686     diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c
687     index bbb0c5e3ca6f..9f770d454684 100644
688     --- a/drivers/gpu/drm/panfrost/panfrost_job.c
689     +++ b/drivers/gpu/drm/panfrost/panfrost_job.c
690     @@ -270,8 +270,13 @@ static void panfrost_job_cleanup(struct kref *ref)
691     dma_fence_put(job->render_done_fence);
692    
693     if (job->mappings) {
694     - for (i = 0; i < job->bo_count; i++)
695     + for (i = 0; i < job->bo_count; i++) {
696     + if (!job->mappings[i])
697     + break;
698     +
699     + atomic_dec(&job->mappings[i]->obj->gpu_usecount);
700     panfrost_gem_mapping_put(job->mappings[i]);
701     + }
702     kvfree(job->mappings);
703     }
704    
705     diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
706     index a5757b11b730..5b54eff12cc0 100644
707     --- a/drivers/gpu/drm/sun4i/sun4i_drv.c
708     +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
709     @@ -85,7 +85,6 @@ static int sun4i_drv_bind(struct device *dev)
710     }
711    
712     drm_mode_config_init(drm);
713     - drm->mode_config.allow_fb_modifiers = true;
714    
715     ret = component_bind_all(drm->dev, drm);
716     if (ret) {
717     diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
718     index 5bd60ded3d81..909eba43664a 100644
719     --- a/drivers/gpu/drm/vgem/vgem_drv.c
720     +++ b/drivers/gpu/drm/vgem/vgem_drv.c
721     @@ -196,9 +196,10 @@ static struct drm_gem_object *vgem_gem_create(struct drm_device *dev,
722     return ERR_CAST(obj);
723    
724     ret = drm_gem_handle_create(file, &obj->base, handle);
725     - drm_gem_object_put_unlocked(&obj->base);
726     - if (ret)
727     + if (ret) {
728     + drm_gem_object_put_unlocked(&obj->base);
729     return ERR_PTR(ret);
730     + }
731    
732     return &obj->base;
733     }
734     @@ -221,7 +222,9 @@ static int vgem_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
735     args->size = gem_object->size;
736     args->pitch = pitch;
737    
738     - DRM_DEBUG("Created object of size %lld\n", size);
739     + drm_gem_object_put_unlocked(gem_object);
740     +
741     + DRM_DEBUG("Created object of size %llu\n", args->size);
742    
743     return 0;
744     }
745     diff --git a/drivers/hwmon/pmbus/ltc2978.c b/drivers/hwmon/pmbus/ltc2978.c
746     index f01f4887fb2e..a91ed01abb68 100644
747     --- a/drivers/hwmon/pmbus/ltc2978.c
748     +++ b/drivers/hwmon/pmbus/ltc2978.c
749     @@ -82,8 +82,8 @@ enum chips { ltc2974, ltc2975, ltc2977, ltc2978, ltc2980, ltc3880, ltc3882,
750    
751     #define LTC_POLL_TIMEOUT 100 /* in milli-seconds */
752    
753     -#define LTC_NOT_BUSY BIT(5)
754     -#define LTC_NOT_PENDING BIT(4)
755     +#define LTC_NOT_BUSY BIT(6)
756     +#define LTC_NOT_PENDING BIT(5)
757    
758     /*
759     * LTC2978 clears peak data whenever the CLEAR_FAULTS command is executed, which
760     diff --git a/drivers/infiniband/core/security.c b/drivers/infiniband/core/security.c
761     index 6eb6d2717ca5..2b4d80393bd0 100644
762     --- a/drivers/infiniband/core/security.c
763     +++ b/drivers/infiniband/core/security.c
764     @@ -339,22 +339,16 @@ static struct ib_ports_pkeys *get_new_pps(const struct ib_qp *qp,
765     if (!new_pps)
766     return NULL;
767    
768     - if (qp_attr_mask & (IB_QP_PKEY_INDEX | IB_QP_PORT)) {
769     - if (!qp_pps) {
770     - new_pps->main.port_num = qp_attr->port_num;
771     - new_pps->main.pkey_index = qp_attr->pkey_index;
772     - } else {
773     - new_pps->main.port_num = (qp_attr_mask & IB_QP_PORT) ?
774     - qp_attr->port_num :
775     - qp_pps->main.port_num;
776     -
777     - new_pps->main.pkey_index =
778     - (qp_attr_mask & IB_QP_PKEY_INDEX) ?
779     - qp_attr->pkey_index :
780     - qp_pps->main.pkey_index;
781     - }
782     + if (qp_attr_mask & IB_QP_PORT)
783     + new_pps->main.port_num =
784     + (qp_pps) ? qp_pps->main.port_num : qp_attr->port_num;
785     + if (qp_attr_mask & IB_QP_PKEY_INDEX)
786     + new_pps->main.pkey_index = (qp_pps) ? qp_pps->main.pkey_index :
787     + qp_attr->pkey_index;
788     + if ((qp_attr_mask & IB_QP_PKEY_INDEX) && (qp_attr_mask & IB_QP_PORT))
789     new_pps->main.state = IB_PORT_PKEY_VALID;
790     - } else if (qp_pps) {
791     +
792     + if (!(qp_attr_mask & (IB_QP_PKEY_INDEX || IB_QP_PORT)) && qp_pps) {
793     new_pps->main.port_num = qp_pps->main.port_num;
794     new_pps->main.pkey_index = qp_pps->main.pkey_index;
795     if (qp_pps->main.state != IB_PORT_PKEY_NOT_VALID)
796     diff --git a/drivers/infiniband/core/user_mad.c b/drivers/infiniband/core/user_mad.c
797     index d1407fa378e8..1235ffb2389b 100644
798     --- a/drivers/infiniband/core/user_mad.c
799     +++ b/drivers/infiniband/core/user_mad.c
800     @@ -1312,6 +1312,9 @@ static void ib_umad_kill_port(struct ib_umad_port *port)
801     struct ib_umad_file *file;
802     int id;
803    
804     + cdev_device_del(&port->sm_cdev, &port->sm_dev);
805     + cdev_device_del(&port->cdev, &port->dev);
806     +
807     mutex_lock(&port->file_mutex);
808    
809     /* Mark ib_dev NULL and block ioctl or other file ops to progress
810     @@ -1331,8 +1334,6 @@ static void ib_umad_kill_port(struct ib_umad_port *port)
811    
812     mutex_unlock(&port->file_mutex);
813    
814     - cdev_device_del(&port->sm_cdev, &port->sm_dev);
815     - cdev_device_del(&port->cdev, &port->dev);
816     ida_free(&umad_ida, port->dev_num);
817    
818     /* balances device_initialize() */
819     diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
820     index 14a80fd9f464..300353c1e5f1 100644
821     --- a/drivers/infiniband/core/uverbs_cmd.c
822     +++ b/drivers/infiniband/core/uverbs_cmd.c
823     @@ -2718,12 +2718,6 @@ static int kern_spec_to_ib_spec_action(struct uverbs_attr_bundle *attrs,
824     return 0;
825     }
826    
827     -static size_t kern_spec_filter_sz(const struct ib_uverbs_flow_spec_hdr *spec)
828     -{
829     - /* Returns user space filter size, includes padding */
830     - return (spec->size - sizeof(struct ib_uverbs_flow_spec_hdr)) / 2;
831     -}
832     -
833     static ssize_t spec_filter_size(const void *kern_spec_filter, u16 kern_filter_size,
834     u16 ib_real_filter_sz)
835     {
836     @@ -2867,11 +2861,16 @@ int ib_uverbs_kern_spec_to_ib_spec_filter(enum ib_flow_spec_type type,
837     static int kern_spec_to_ib_spec_filter(struct ib_uverbs_flow_spec *kern_spec,
838     union ib_flow_spec *ib_spec)
839     {
840     - ssize_t kern_filter_sz;
841     + size_t kern_filter_sz;
842     void *kern_spec_mask;
843     void *kern_spec_val;
844    
845     - kern_filter_sz = kern_spec_filter_sz(&kern_spec->hdr);
846     + if (check_sub_overflow((size_t)kern_spec->hdr.size,
847     + sizeof(struct ib_uverbs_flow_spec_hdr),
848     + &kern_filter_sz))
849     + return -EINVAL;
850     +
851     + kern_filter_sz /= 2;
852    
853     kern_spec_val = (void *)kern_spec +
854     sizeof(struct ib_uverbs_flow_spec_hdr);
855     diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
856     index 347dc242fb88..d82e0589cfd2 100644
857     --- a/drivers/infiniband/hw/cxgb4/cm.c
858     +++ b/drivers/infiniband/hw/cxgb4/cm.c
859     @@ -3036,6 +3036,10 @@ static int terminate(struct c4iw_dev *dev, struct sk_buff *skb)
860     C4IW_QP_ATTR_NEXT_STATE, &attrs, 1);
861     }
862    
863     + /* As per draft-hilland-iwarp-verbs-v1.0, sec 6.2.3,
864     + * when entering the TERM state the RNIC MUST initiate a CLOSE.
865     + */
866     + c4iw_ep_disconnect(ep, 1, GFP_KERNEL);
867     c4iw_put_ep(&ep->com);
868     } else
869     pr_warn("TERM received tid %u no ep/qp\n", tid);
870     diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c
871     index bbcac539777a..89ac2f9ae6dd 100644
872     --- a/drivers/infiniband/hw/cxgb4/qp.c
873     +++ b/drivers/infiniband/hw/cxgb4/qp.c
874     @@ -1948,10 +1948,10 @@ int c4iw_modify_qp(struct c4iw_dev *rhp, struct c4iw_qp *qhp,
875     qhp->attr.layer_etype = attrs->layer_etype;
876     qhp->attr.ecode = attrs->ecode;
877     ep = qhp->ep;
878     - c4iw_get_ep(&ep->com);
879     - disconnect = 1;
880     if (!internal) {
881     + c4iw_get_ep(&ep->com);
882     terminate = 1;
883     + disconnect = 1;
884     } else {
885     terminate = qhp->attr.send_term;
886     ret = rdma_fini(rhp, qhp, ep);
887     diff --git a/drivers/infiniband/hw/hfi1/affinity.c b/drivers/infiniband/hw/hfi1/affinity.c
888     index c142b23bb401..1aeea5d65c01 100644
889     --- a/drivers/infiniband/hw/hfi1/affinity.c
890     +++ b/drivers/infiniband/hw/hfi1/affinity.c
891     @@ -479,6 +479,8 @@ static int _dev_comp_vect_mappings_create(struct hfi1_devdata *dd,
892     rvt_get_ibdev_name(&(dd)->verbs_dev.rdi), i, cpu);
893     }
894    
895     + free_cpumask_var(available_cpus);
896     + free_cpumask_var(non_intr_cpus);
897     return 0;
898    
899     fail:
900     diff --git a/drivers/infiniband/hw/hfi1/file_ops.c b/drivers/infiniband/hw/hfi1/file_ops.c
901     index f9a7e9d29c8b..89e1dfd07a1b 100644
902     --- a/drivers/infiniband/hw/hfi1/file_ops.c
903     +++ b/drivers/infiniband/hw/hfi1/file_ops.c
904     @@ -200,23 +200,24 @@ static int hfi1_file_open(struct inode *inode, struct file *fp)
905    
906     fd = kzalloc(sizeof(*fd), GFP_KERNEL);
907    
908     - if (fd) {
909     - fd->rec_cpu_num = -1; /* no cpu affinity by default */
910     - fd->mm = current->mm;
911     - mmgrab(fd->mm);
912     - fd->dd = dd;
913     - kobject_get(&fd->dd->kobj);
914     - fp->private_data = fd;
915     - } else {
916     - fp->private_data = NULL;
917     -
918     - if (atomic_dec_and_test(&dd->user_refcount))
919     - complete(&dd->user_comp);
920     -
921     - return -ENOMEM;
922     - }
923     -
924     + if (!fd || init_srcu_struct(&fd->pq_srcu))
925     + goto nomem;
926     + spin_lock_init(&fd->pq_rcu_lock);
927     + spin_lock_init(&fd->tid_lock);
928     + spin_lock_init(&fd->invalid_lock);
929     + fd->rec_cpu_num = -1; /* no cpu affinity by default */
930     + fd->mm = current->mm;
931     + mmgrab(fd->mm);
932     + fd->dd = dd;
933     + kobject_get(&fd->dd->kobj);
934     + fp->private_data = fd;
935     return 0;
936     +nomem:
937     + kfree(fd);
938     + fp->private_data = NULL;
939     + if (atomic_dec_and_test(&dd->user_refcount))
940     + complete(&dd->user_comp);
941     + return -ENOMEM;
942     }
943    
944     static long hfi1_file_ioctl(struct file *fp, unsigned int cmd,
945     @@ -301,21 +302,30 @@ static long hfi1_file_ioctl(struct file *fp, unsigned int cmd,
946     static ssize_t hfi1_write_iter(struct kiocb *kiocb, struct iov_iter *from)
947     {
948     struct hfi1_filedata *fd = kiocb->ki_filp->private_data;
949     - struct hfi1_user_sdma_pkt_q *pq = fd->pq;
950     + struct hfi1_user_sdma_pkt_q *pq;
951     struct hfi1_user_sdma_comp_q *cq = fd->cq;
952     int done = 0, reqs = 0;
953     unsigned long dim = from->nr_segs;
954     + int idx;
955    
956     - if (!cq || !pq)
957     + idx = srcu_read_lock(&fd->pq_srcu);
958     + pq = srcu_dereference(fd->pq, &fd->pq_srcu);
959     + if (!cq || !pq) {
960     + srcu_read_unlock(&fd->pq_srcu, idx);
961     return -EIO;
962     + }
963    
964     - if (!iter_is_iovec(from) || !dim)
965     + if (!iter_is_iovec(from) || !dim) {
966     + srcu_read_unlock(&fd->pq_srcu, idx);
967     return -EINVAL;
968     + }
969    
970     trace_hfi1_sdma_request(fd->dd, fd->uctxt->ctxt, fd->subctxt, dim);
971    
972     - if (atomic_read(&pq->n_reqs) == pq->n_max_reqs)
973     + if (atomic_read(&pq->n_reqs) == pq->n_max_reqs) {
974     + srcu_read_unlock(&fd->pq_srcu, idx);
975     return -ENOSPC;
976     + }
977    
978     while (dim) {
979     int ret;
980     @@ -333,6 +343,7 @@ static ssize_t hfi1_write_iter(struct kiocb *kiocb, struct iov_iter *from)
981     reqs++;
982     }
983    
984     + srcu_read_unlock(&fd->pq_srcu, idx);
985     return reqs;
986     }
987    
988     @@ -707,6 +718,7 @@ done:
989     if (atomic_dec_and_test(&dd->user_refcount))
990     complete(&dd->user_comp);
991    
992     + cleanup_srcu_struct(&fdata->pq_srcu);
993     kfree(fdata);
994     return 0;
995     }
996     diff --git a/drivers/infiniband/hw/hfi1/hfi.h b/drivers/infiniband/hw/hfi1/hfi.h
997     index fa45350a9a1d..1af94650bd84 100644
998     --- a/drivers/infiniband/hw/hfi1/hfi.h
999     +++ b/drivers/infiniband/hw/hfi1/hfi.h
1000     @@ -1436,10 +1436,13 @@ struct mmu_rb_handler;
1001    
1002     /* Private data for file operations */
1003     struct hfi1_filedata {
1004     + struct srcu_struct pq_srcu;
1005     struct hfi1_devdata *dd;
1006     struct hfi1_ctxtdata *uctxt;
1007     struct hfi1_user_sdma_comp_q *cq;
1008     - struct hfi1_user_sdma_pkt_q *pq;
1009     + /* update side lock for SRCU */
1010     + spinlock_t pq_rcu_lock;
1011     + struct hfi1_user_sdma_pkt_q __rcu *pq;
1012     u16 subctxt;
1013     /* for cpu affinity; -1 if none */
1014     int rec_cpu_num;
1015     diff --git a/drivers/infiniband/hw/hfi1/user_exp_rcv.c b/drivers/infiniband/hw/hfi1/user_exp_rcv.c
1016     index 3592a9ec155e..4d732353379d 100644
1017     --- a/drivers/infiniband/hw/hfi1/user_exp_rcv.c
1018     +++ b/drivers/infiniband/hw/hfi1/user_exp_rcv.c
1019     @@ -90,9 +90,6 @@ int hfi1_user_exp_rcv_init(struct hfi1_filedata *fd,
1020     struct hfi1_devdata *dd = uctxt->dd;
1021     int ret = 0;
1022    
1023     - spin_lock_init(&fd->tid_lock);
1024     - spin_lock_init(&fd->invalid_lock);
1025     -
1026     fd->entry_to_rb = kcalloc(uctxt->expected_count,
1027     sizeof(struct rb_node *),
1028     GFP_KERNEL);
1029     @@ -165,10 +162,12 @@ void hfi1_user_exp_rcv_free(struct hfi1_filedata *fd)
1030     if (fd->handler) {
1031     hfi1_mmu_rb_unregister(fd->handler);
1032     } else {
1033     + mutex_lock(&uctxt->exp_mutex);
1034     if (!EXP_TID_SET_EMPTY(uctxt->tid_full_list))
1035     unlock_exp_tids(uctxt, &uctxt->tid_full_list, fd);
1036     if (!EXP_TID_SET_EMPTY(uctxt->tid_used_list))
1037     unlock_exp_tids(uctxt, &uctxt->tid_used_list, fd);
1038     + mutex_unlock(&uctxt->exp_mutex);
1039     }
1040    
1041     kfree(fd->invalid_tids);
1042     diff --git a/drivers/infiniband/hw/hfi1/user_sdma.c b/drivers/infiniband/hw/hfi1/user_sdma.c
1043     index fd754a16475a..c2f0d9ba93de 100644
1044     --- a/drivers/infiniband/hw/hfi1/user_sdma.c
1045     +++ b/drivers/infiniband/hw/hfi1/user_sdma.c
1046     @@ -179,7 +179,6 @@ int hfi1_user_sdma_alloc_queues(struct hfi1_ctxtdata *uctxt,
1047     pq = kzalloc(sizeof(*pq), GFP_KERNEL);
1048     if (!pq)
1049     return -ENOMEM;
1050     -
1051     pq->dd = dd;
1052     pq->ctxt = uctxt->ctxt;
1053     pq->subctxt = fd->subctxt;
1054     @@ -236,7 +235,7 @@ int hfi1_user_sdma_alloc_queues(struct hfi1_ctxtdata *uctxt,
1055     goto pq_mmu_fail;
1056     }
1057    
1058     - fd->pq = pq;
1059     + rcu_assign_pointer(fd->pq, pq);
1060     fd->cq = cq;
1061    
1062     return 0;
1063     @@ -264,8 +263,14 @@ int hfi1_user_sdma_free_queues(struct hfi1_filedata *fd,
1064    
1065     trace_hfi1_sdma_user_free_queues(uctxt->dd, uctxt->ctxt, fd->subctxt);
1066    
1067     - pq = fd->pq;
1068     + spin_lock(&fd->pq_rcu_lock);
1069     + pq = srcu_dereference_check(fd->pq, &fd->pq_srcu,
1070     + lockdep_is_held(&fd->pq_rcu_lock));
1071     if (pq) {
1072     + rcu_assign_pointer(fd->pq, NULL);
1073     + spin_unlock(&fd->pq_rcu_lock);
1074     + synchronize_srcu(&fd->pq_srcu);
1075     + /* at this point there can be no more new requests */
1076     if (pq->handler)
1077     hfi1_mmu_rb_unregister(pq->handler);
1078     iowait_sdma_drain(&pq->busy);
1079     @@ -277,7 +282,8 @@ int hfi1_user_sdma_free_queues(struct hfi1_filedata *fd,
1080     kfree(pq->req_in_use);
1081     kmem_cache_destroy(pq->txreq_cache);
1082     kfree(pq);
1083     - fd->pq = NULL;
1084     + } else {
1085     + spin_unlock(&fd->pq_rcu_lock);
1086     }
1087     if (fd->cq) {
1088     vfree(fd->cq->comps);
1089     @@ -321,7 +327,8 @@ int hfi1_user_sdma_process_request(struct hfi1_filedata *fd,
1090     {
1091     int ret = 0, i;
1092     struct hfi1_ctxtdata *uctxt = fd->uctxt;
1093     - struct hfi1_user_sdma_pkt_q *pq = fd->pq;
1094     + struct hfi1_user_sdma_pkt_q *pq =
1095     + srcu_dereference(fd->pq, &fd->pq_srcu);
1096     struct hfi1_user_sdma_comp_q *cq = fd->cq;
1097     struct hfi1_devdata *dd = pq->dd;
1098     unsigned long idx = 0;
1099     diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
1100     index 5fd071c05944..0865373bd12d 100644
1101     --- a/drivers/infiniband/hw/mlx5/qp.c
1102     +++ b/drivers/infiniband/hw/mlx5/qp.c
1103     @@ -3391,9 +3391,6 @@ static int __mlx5_ib_qp_set_counter(struct ib_qp *qp,
1104     struct mlx5_ib_qp_base *base;
1105     u32 set_id;
1106    
1107     - if (!MLX5_CAP_GEN(dev->mdev, rts2rts_qp_counters_set_id))
1108     - return 0;
1109     -
1110     if (counter)
1111     set_id = counter->id;
1112     else
1113     @@ -6503,6 +6500,7 @@ void mlx5_ib_drain_rq(struct ib_qp *qp)
1114     */
1115     int mlx5_ib_qp_set_counter(struct ib_qp *qp, struct rdma_counter *counter)
1116     {
1117     + struct mlx5_ib_dev *dev = to_mdev(qp->device);
1118     struct mlx5_ib_qp *mqp = to_mqp(qp);
1119     int err = 0;
1120    
1121     @@ -6512,6 +6510,11 @@ int mlx5_ib_qp_set_counter(struct ib_qp *qp, struct rdma_counter *counter)
1122     goto out;
1123     }
1124    
1125     + if (!MLX5_CAP_GEN(dev->mdev, rts2rts_qp_counters_set_id)) {
1126     + err = -EOPNOTSUPP;
1127     + goto out;
1128     + }
1129     +
1130     if (mqp->state == IB_QPS_RTS) {
1131     err = __mlx5_ib_qp_set_counter(qp, counter);
1132     if (!err)
1133     diff --git a/drivers/infiniband/sw/rdmavt/qp.c b/drivers/infiniband/sw/rdmavt/qp.c
1134     index 0b0a241c57ff..799254a049ba 100644
1135     --- a/drivers/infiniband/sw/rdmavt/qp.c
1136     +++ b/drivers/infiniband/sw/rdmavt/qp.c
1137     @@ -61,6 +61,8 @@
1138     #define RVT_RWQ_COUNT_THRESHOLD 16
1139    
1140     static void rvt_rc_timeout(struct timer_list *t);
1141     +static void rvt_reset_qp(struct rvt_dev_info *rdi, struct rvt_qp *qp,
1142     + enum ib_qp_type type);
1143    
1144     /*
1145     * Convert the AETH RNR timeout code into the number of microseconds.
1146     @@ -452,40 +454,41 @@ no_qp_table:
1147     }
1148    
1149     /**
1150     - * free_all_qps - check for QPs still in use
1151     + * rvt_free_qp_cb - callback function to reset a qp
1152     + * @qp: the qp to reset
1153     + * @v: a 64-bit value
1154     + *
1155     + * This function resets the qp and removes it from the
1156     + * qp hash table.
1157     + */
1158     +static void rvt_free_qp_cb(struct rvt_qp *qp, u64 v)
1159     +{
1160     + unsigned int *qp_inuse = (unsigned int *)v;
1161     + struct rvt_dev_info *rdi = ib_to_rvt(qp->ibqp.device);
1162     +
1163     + /* Reset the qp and remove it from the qp hash list */
1164     + rvt_reset_qp(rdi, qp, qp->ibqp.qp_type);
1165     +
1166     + /* Increment the qp_inuse count */
1167     + (*qp_inuse)++;
1168     +}
1169     +
1170     +/**
1171     + * rvt_free_all_qps - check for QPs still in use
1172     * @rdi: rvt device info structure
1173     *
1174     * There should not be any QPs still in use.
1175     * Free memory for table.
1176     + * Return the number of QPs still in use.
1177     */
1178     static unsigned rvt_free_all_qps(struct rvt_dev_info *rdi)
1179     {
1180     - unsigned long flags;
1181     - struct rvt_qp *qp;
1182     - unsigned n, qp_inuse = 0;
1183     - spinlock_t *ql; /* work around too long line below */
1184     -
1185     - if (rdi->driver_f.free_all_qps)
1186     - qp_inuse = rdi->driver_f.free_all_qps(rdi);
1187     + unsigned int qp_inuse = 0;
1188    
1189     qp_inuse += rvt_mcast_tree_empty(rdi);
1190    
1191     - if (!rdi->qp_dev)
1192     - return qp_inuse;
1193     + rvt_qp_iter(rdi, (u64)&qp_inuse, rvt_free_qp_cb);
1194    
1195     - ql = &rdi->qp_dev->qpt_lock;
1196     - spin_lock_irqsave(ql, flags);
1197     - for (n = 0; n < rdi->qp_dev->qp_table_size; n++) {
1198     - qp = rcu_dereference_protected(rdi->qp_dev->qp_table[n],
1199     - lockdep_is_held(ql));
1200     - RCU_INIT_POINTER(rdi->qp_dev->qp_table[n], NULL);
1201     -
1202     - for (; qp; qp = rcu_dereference_protected(qp->next,
1203     - lockdep_is_held(ql)))
1204     - qp_inuse++;
1205     - }
1206     - spin_unlock_irqrestore(ql, flags);
1207     - synchronize_rcu();
1208     return qp_inuse;
1209     }
1210    
1211     @@ -902,14 +905,14 @@ static void rvt_init_qp(struct rvt_dev_info *rdi, struct rvt_qp *qp,
1212     }
1213    
1214     /**
1215     - * rvt_reset_qp - initialize the QP state to the reset state
1216     + * _rvt_reset_qp - initialize the QP state to the reset state
1217     * @qp: the QP to reset
1218     * @type: the QP type
1219     *
1220     * r_lock, s_hlock, and s_lock are required to be held by the caller
1221     */
1222     -static void rvt_reset_qp(struct rvt_dev_info *rdi, struct rvt_qp *qp,
1223     - enum ib_qp_type type)
1224     +static void _rvt_reset_qp(struct rvt_dev_info *rdi, struct rvt_qp *qp,
1225     + enum ib_qp_type type)
1226     __must_hold(&qp->s_lock)
1227     __must_hold(&qp->s_hlock)
1228     __must_hold(&qp->r_lock)
1229     @@ -955,6 +958,27 @@ static void rvt_reset_qp(struct rvt_dev_info *rdi, struct rvt_qp *qp,
1230     lockdep_assert_held(&qp->s_lock);
1231     }
1232    
1233     +/**
1234     + * rvt_reset_qp - initialize the QP state to the reset state
1235     + * @rdi: the device info
1236     + * @qp: the QP to reset
1237     + * @type: the QP type
1238     + *
1239     + * This is the wrapper function to acquire the r_lock, s_hlock, and s_lock
1240     + * before calling _rvt_reset_qp().
1241     + */
1242     +static void rvt_reset_qp(struct rvt_dev_info *rdi, struct rvt_qp *qp,
1243     + enum ib_qp_type type)
1244     +{
1245     + spin_lock_irq(&qp->r_lock);
1246     + spin_lock(&qp->s_hlock);
1247     + spin_lock(&qp->s_lock);
1248     + _rvt_reset_qp(rdi, qp, type);
1249     + spin_unlock(&qp->s_lock);
1250     + spin_unlock(&qp->s_hlock);
1251     + spin_unlock_irq(&qp->r_lock);
1252     +}
1253     +
1254     /** rvt_free_qpn - Free a qpn from the bit map
1255     * @qpt: QP table
1256     * @qpn: queue pair number to free
1257     @@ -1546,7 +1570,7 @@ int rvt_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
1258     switch (new_state) {
1259     case IB_QPS_RESET:
1260     if (qp->state != IB_QPS_RESET)
1261     - rvt_reset_qp(rdi, qp, ibqp->qp_type);
1262     + _rvt_reset_qp(rdi, qp, ibqp->qp_type);
1263     break;
1264    
1265     case IB_QPS_RTR:
1266     @@ -1695,13 +1719,7 @@ int rvt_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata)
1267     struct rvt_qp *qp = ibqp_to_rvtqp(ibqp);
1268     struct rvt_dev_info *rdi = ib_to_rvt(ibqp->device);
1269    
1270     - spin_lock_irq(&qp->r_lock);
1271     - spin_lock(&qp->s_hlock);
1272     - spin_lock(&qp->s_lock);
1273     rvt_reset_qp(rdi, qp, ibqp->qp_type);
1274     - spin_unlock(&qp->s_lock);
1275     - spin_unlock(&qp->s_hlock);
1276     - spin_unlock_irq(&qp->r_lock);
1277    
1278     wait_event(qp->wait, !atomic_read(&qp->refcount));
1279     /* qpn is now available for use again */
1280     diff --git a/drivers/infiniband/sw/rxe/rxe_comp.c b/drivers/infiniband/sw/rxe/rxe_comp.c
1281     index 116cafc9afcf..4bc88708b355 100644
1282     --- a/drivers/infiniband/sw/rxe/rxe_comp.c
1283     +++ b/drivers/infiniband/sw/rxe/rxe_comp.c
1284     @@ -329,7 +329,7 @@ static inline enum comp_state check_ack(struct rxe_qp *qp,
1285     qp->comp.psn = pkt->psn;
1286     if (qp->req.wait_psn) {
1287     qp->req.wait_psn = 0;
1288     - rxe_run_task(&qp->req.task, 1);
1289     + rxe_run_task(&qp->req.task, 0);
1290     }
1291     }
1292     return COMPST_ERROR_RETRY;
1293     @@ -463,7 +463,7 @@ static void do_complete(struct rxe_qp *qp, struct rxe_send_wqe *wqe)
1294     */
1295     if (qp->req.wait_fence) {
1296     qp->req.wait_fence = 0;
1297     - rxe_run_task(&qp->req.task, 1);
1298     + rxe_run_task(&qp->req.task, 0);
1299     }
1300     }
1301    
1302     @@ -479,7 +479,7 @@ static inline enum comp_state complete_ack(struct rxe_qp *qp,
1303     if (qp->req.need_rd_atomic) {
1304     qp->comp.timeout_retry = 0;
1305     qp->req.need_rd_atomic = 0;
1306     - rxe_run_task(&qp->req.task, 1);
1307     + rxe_run_task(&qp->req.task, 0);
1308     }
1309     }
1310    
1311     @@ -725,7 +725,7 @@ int rxe_completer(void *arg)
1312     RXE_CNT_COMP_RETRY);
1313     qp->req.need_retry = 1;
1314     qp->comp.started_retry = 1;
1315     - rxe_run_task(&qp->req.task, 1);
1316     + rxe_run_task(&qp->req.task, 0);
1317     }
1318    
1319     if (pkt) {
1320     diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
1321     index 1ae6f8bba9ae..2c666fb34625 100644
1322     --- a/drivers/input/mouse/synaptics.c
1323     +++ b/drivers/input/mouse/synaptics.c
1324     @@ -146,7 +146,6 @@ static const char * const topbuttonpad_pnp_ids[] = {
1325     "LEN0042", /* Yoga */
1326     "LEN0045",
1327     "LEN0047",
1328     - "LEN0049",
1329     "LEN2000", /* S540 */
1330     "LEN2001", /* Edge E431 */
1331     "LEN2002", /* Edge E531 */
1332     @@ -166,9 +165,11 @@ static const char * const smbus_pnp_ids[] = {
1333     /* all of the topbuttonpad_pnp_ids are valid, we just add some extras */
1334     "LEN0048", /* X1 Carbon 3 */
1335     "LEN0046", /* X250 */
1336     + "LEN0049", /* Yoga 11e */
1337     "LEN004a", /* W541 */
1338     "LEN005b", /* P50 */
1339     "LEN005e", /* T560 */
1340     + "LEN006c", /* T470s */
1341     "LEN0071", /* T480 */
1342     "LEN0072", /* X1 Carbon Gen 5 (2017) - Elan/ALPS trackpoint */
1343     "LEN0073", /* X1 Carbon G5 (Elantech) */
1344     @@ -179,6 +180,7 @@ static const char * const smbus_pnp_ids[] = {
1345     "LEN0097", /* X280 -> ALPS trackpoint */
1346     "LEN009b", /* T580 */
1347     "LEN200f", /* T450s */
1348     + "LEN2044", /* L470 */
1349     "LEN2054", /* E480 */
1350     "LEN2055", /* E580 */
1351     "SYN3052", /* HP EliteBook 840 G4 */
1352     diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
1353     index 105b7a7c0251..b3484def0a8b 100644
1354     --- a/drivers/mmc/core/host.c
1355     +++ b/drivers/mmc/core/host.c
1356     @@ -176,7 +176,6 @@ int mmc_of_parse(struct mmc_host *host)
1357     u32 bus_width, drv_type, cd_debounce_delay_ms;
1358     int ret;
1359     bool cd_cap_invert, cd_gpio_invert = false;
1360     - bool ro_cap_invert, ro_gpio_invert = false;
1361    
1362     if (!dev || !dev_fwnode(dev))
1363     return 0;
1364     @@ -255,9 +254,11 @@ int mmc_of_parse(struct mmc_host *host)
1365     }
1366    
1367     /* Parse Write Protection */
1368     - ro_cap_invert = device_property_read_bool(dev, "wp-inverted");
1369    
1370     - ret = mmc_gpiod_request_ro(host, "wp", 0, 0, &ro_gpio_invert);
1371     + if (device_property_read_bool(dev, "wp-inverted"))
1372     + host->caps2 |= MMC_CAP2_RO_ACTIVE_HIGH;
1373     +
1374     + ret = mmc_gpiod_request_ro(host, "wp", 0, 0, NULL);
1375     if (!ret)
1376     dev_info(host->parent, "Got WP GPIO\n");
1377     else if (ret != -ENOENT && ret != -ENOSYS)
1378     @@ -266,10 +267,6 @@ int mmc_of_parse(struct mmc_host *host)
1379     if (device_property_read_bool(dev, "disable-wp"))
1380     host->caps2 |= MMC_CAP2_NO_WRITE_PROTECT;
1381    
1382     - /* See the comment on CD inversion above */
1383     - if (ro_cap_invert ^ ro_gpio_invert)
1384     - host->caps2 |= MMC_CAP2_RO_ACTIVE_HIGH;
1385     -
1386     if (device_property_read_bool(dev, "cap-sd-highspeed"))
1387     host->caps |= MMC_CAP_SD_HIGHSPEED;
1388     if (device_property_read_bool(dev, "cap-mmc-highspeed"))
1389     diff --git a/drivers/mmc/core/slot-gpio.c b/drivers/mmc/core/slot-gpio.c
1390     index da2596c5fa28..582ec3d720f6 100644
1391     --- a/drivers/mmc/core/slot-gpio.c
1392     +++ b/drivers/mmc/core/slot-gpio.c
1393     @@ -241,6 +241,9 @@ int mmc_gpiod_request_ro(struct mmc_host *host, const char *con_id,
1394     return ret;
1395     }
1396    
1397     + if (host->caps2 & MMC_CAP2_RO_ACTIVE_HIGH)
1398     + gpiod_toggle_active_low(desc);
1399     +
1400     if (gpio_invert)
1401     *gpio_invert = !gpiod_is_active_low(desc);
1402    
1403     diff --git a/drivers/mmc/host/pxamci.c b/drivers/mmc/host/pxamci.c
1404     index 024acc1b0a2e..b2bbcb09a49e 100644
1405     --- a/drivers/mmc/host/pxamci.c
1406     +++ b/drivers/mmc/host/pxamci.c
1407     @@ -740,16 +740,16 @@ static int pxamci_probe(struct platform_device *pdev)
1408     goto out;
1409     }
1410    
1411     + if (!host->pdata->gpio_card_ro_invert)
1412     + mmc->caps2 |= MMC_CAP2_RO_ACTIVE_HIGH;
1413     +
1414     ret = mmc_gpiod_request_ro(mmc, "wp", 0, 0, NULL);
1415     if (ret && ret != -ENOENT) {
1416     dev_err(dev, "Failed requesting gpio_ro\n");
1417     goto out;
1418     }
1419     - if (!ret) {
1420     + if (!ret)
1421     host->use_ro_gpio = true;
1422     - mmc->caps2 |= host->pdata->gpio_card_ro_invert ?
1423     - 0 : MMC_CAP2_RO_ACTIVE_HIGH;
1424     - }
1425    
1426     if (host->pdata->init)
1427     host->pdata->init(dev, pxamci_detect_irq, mmc);
1428     diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
1429     index 1c988d6a2433..dccb4df46512 100644
1430     --- a/drivers/mmc/host/sdhci-esdhc-imx.c
1431     +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
1432     @@ -1381,13 +1381,14 @@ static int sdhci_esdhc_imx_probe_nondt(struct platform_device *pdev,
1433     host->mmc->parent->platform_data);
1434     /* write_protect */
1435     if (boarddata->wp_type == ESDHC_WP_GPIO) {
1436     + host->mmc->caps2 |= MMC_CAP2_RO_ACTIVE_HIGH;
1437     +
1438     err = mmc_gpiod_request_ro(host->mmc, "wp", 0, 0, NULL);
1439     if (err) {
1440     dev_err(mmc_dev(host->mmc),
1441     "failed to request write-protect gpio!\n");
1442     return err;
1443     }
1444     - host->mmc->caps2 |= MMC_CAP2_RO_ACTIVE_HIGH;
1445     }
1446    
1447     /* card_detect */
1448     diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
1449     index a6b7b242d516..e703827d27e9 100644
1450     --- a/drivers/nvme/host/core.c
1451     +++ b/drivers/nvme/host/core.c
1452     @@ -3853,7 +3853,7 @@ static void nvme_get_fw_slot_info(struct nvme_ctrl *ctrl)
1453     if (!log)
1454     return;
1455    
1456     - if (nvme_get_log(ctrl, NVME_NSID_ALL, 0, NVME_LOG_FW_SLOT, log,
1457     + if (nvme_get_log(ctrl, NVME_NSID_ALL, NVME_LOG_FW_SLOT, 0, log,
1458     sizeof(*log), 0))
1459     dev_warn(ctrl->device, "Get FW SLOT INFO log error\n");
1460     kfree(log);
1461     diff --git a/drivers/s390/crypto/pkey_api.c b/drivers/s390/crypto/pkey_api.c
1462     index e17fac20127e..5c9898e934d9 100644
1463     --- a/drivers/s390/crypto/pkey_api.c
1464     +++ b/drivers/s390/crypto/pkey_api.c
1465     @@ -794,7 +794,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
1466     return -EFAULT;
1467     rc = cca_sec2protkey(ksp.cardnr, ksp.domain,
1468     ksp.seckey.seckey, ksp.protkey.protkey,
1469     - NULL, &ksp.protkey.type);
1470     + &ksp.protkey.len, &ksp.protkey.type);
1471     DEBUG_DBG("%s cca_sec2protkey()=%d\n", __func__, rc);
1472     if (rc)
1473     break;
1474     diff --git a/drivers/spmi/spmi-pmic-arb.c b/drivers/spmi/spmi-pmic-arb.c
1475     index 97acc2ba2912..de844b412110 100644
1476     --- a/drivers/spmi/spmi-pmic-arb.c
1477     +++ b/drivers/spmi/spmi-pmic-arb.c
1478     @@ -731,6 +731,7 @@ static int qpnpint_irq_domain_translate(struct irq_domain *d,
1479     return 0;
1480     }
1481    
1482     +static struct lock_class_key qpnpint_irq_lock_class, qpnpint_irq_request_class;
1483    
1484     static void qpnpint_irq_domain_map(struct spmi_pmic_arb *pmic_arb,
1485     struct irq_domain *domain, unsigned int virq,
1486     @@ -746,6 +747,9 @@ static void qpnpint_irq_domain_map(struct spmi_pmic_arb *pmic_arb,
1487     else
1488     handler = handle_level_irq;
1489    
1490     +
1491     + irq_set_lockdep_class(virq, &qpnpint_irq_lock_class,
1492     + &qpnpint_irq_request_class);
1493     irq_domain_set_info(domain, virq, hwirq, &pmic_arb_irqchip, pmic_arb,
1494     handler, NULL, NULL);
1495     }
1496     diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
1497     index 7becc5e96f92..b0ccca5d08b5 100644
1498     --- a/fs/btrfs/disk-io.c
1499     +++ b/fs/btrfs/disk-io.c
1500     @@ -3167,6 +3167,7 @@ retry_root_backup:
1501     /* do not make disk changes in broken FS or nologreplay is given */
1502     if (btrfs_super_log_root(disk_super) != 0 &&
1503     !btrfs_test_opt(fs_info, NOLOGREPLAY)) {
1504     + btrfs_info(fs_info, "start tree-log replay");
1505     ret = btrfs_replay_log(fs_info, fs_devices);
1506     if (ret) {
1507     err = ret;
1508     diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c
1509     index 9d30acca55e1..043eec682ccd 100644
1510     --- a/fs/btrfs/extent_map.c
1511     +++ b/fs/btrfs/extent_map.c
1512     @@ -233,6 +233,17 @@ static void try_merge_map(struct extent_map_tree *tree, struct extent_map *em)
1513     struct extent_map *merge = NULL;
1514     struct rb_node *rb;
1515    
1516     + /*
1517     + * We can't modify an extent map that is in the tree and that is being
1518     + * used by another task, as it can cause that other task to see it in
1519     + * inconsistent state during the merging. We always have 1 reference for
1520     + * the tree and 1 for this task (which is unpinning the extent map or
1521     + * clearing the logging flag), so anything > 2 means it's being used by
1522     + * other tasks too.
1523     + */
1524     + if (refcount_read(&em->refs) > 2)
1525     + return;
1526     +
1527     if (em->start != 0) {
1528     rb = rb_prev(&em->rb_node);
1529     if (rb)
1530     diff --git a/fs/btrfs/ref-verify.c b/fs/btrfs/ref-verify.c
1531     index b57f3618e58e..454a1015d026 100644
1532     --- a/fs/btrfs/ref-verify.c
1533     +++ b/fs/btrfs/ref-verify.c
1534     @@ -744,6 +744,7 @@ int btrfs_ref_tree_mod(struct btrfs_fs_info *fs_info,
1535     */
1536     be = add_block_entry(fs_info, bytenr, num_bytes, ref_root);
1537     if (IS_ERR(be)) {
1538     + kfree(ref);
1539     kfree(ra);
1540     ret = PTR_ERR(be);
1541     goto out;
1542     @@ -757,6 +758,8 @@ int btrfs_ref_tree_mod(struct btrfs_fs_info *fs_info,
1543     "re-allocated a block that still has references to it!");
1544     dump_block_entry(fs_info, be);
1545     dump_ref_action(fs_info, ra);
1546     + kfree(ref);
1547     + kfree(ra);
1548     goto out_unlock;
1549     }
1550    
1551     @@ -819,6 +822,7 @@ int btrfs_ref_tree_mod(struct btrfs_fs_info *fs_info,
1552     "dropping a ref for a existing root that doesn't have a ref on the block");
1553     dump_block_entry(fs_info, be);
1554     dump_ref_action(fs_info, ra);
1555     + kfree(ref);
1556     kfree(ra);
1557     goto out_unlock;
1558     }
1559     @@ -834,6 +838,7 @@ int btrfs_ref_tree_mod(struct btrfs_fs_info *fs_info,
1560     "attempting to add another ref for an existing ref on a tree block");
1561     dump_block_entry(fs_info, be);
1562     dump_ref_action(fs_info, ra);
1563     + kfree(ref);
1564     kfree(ra);
1565     goto out_unlock;
1566     }
1567     diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
1568     index abcd93a3ca1d..aea24202cd35 100644
1569     --- a/fs/btrfs/super.c
1570     +++ b/fs/btrfs/super.c
1571     @@ -1804,6 +1804,8 @@ static int btrfs_remount(struct super_block *sb, int *flags, char *data)
1572     }
1573    
1574     if (btrfs_super_log_root(fs_info->super_copy) != 0) {
1575     + btrfs_warn(fs_info,
1576     + "mount required to replay tree-log, cannot remount read-write");
1577     ret = -EINVAL;
1578     goto restore;
1579     }
1580     diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
1581     index 07d8ace61f77..637624ab6e46 100644
1582     --- a/fs/cifs/cifsfs.c
1583     +++ b/fs/cifs/cifsfs.c
1584     @@ -414,7 +414,7 @@ cifs_show_security(struct seq_file *s, struct cifs_ses *ses)
1585     seq_puts(s, "ntlm");
1586     break;
1587     case Kerberos:
1588     - seq_printf(s, "krb5,cruid=%u", from_kuid_munged(&init_user_ns,ses->cred_uid));
1589     + seq_puts(s, "krb5");
1590     break;
1591     case RawNTLMSSP:
1592     seq_puts(s, "ntlmssp");
1593     @@ -427,6 +427,10 @@ cifs_show_security(struct seq_file *s, struct cifs_ses *ses)
1594    
1595     if (ses->sign)
1596     seq_puts(s, "i");
1597     +
1598     + if (ses->sectype == Kerberos)
1599     + seq_printf(s, ",cruid=%u",
1600     + from_kuid_munged(&init_user_ns, ses->cred_uid));
1601     }
1602    
1603     static void
1604     diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
1605     index 662256fa2a18..b75d208d4b2b 100644
1606     --- a/fs/cifs/smb2ops.c
1607     +++ b/fs/cifs/smb2ops.c
1608     @@ -1087,7 +1087,8 @@ smb2_set_ea(const unsigned int xid, struct cifs_tcon *tcon,
1609     void *data[1];
1610     struct smb2_file_full_ea_info *ea = NULL;
1611     struct kvec close_iov[1];
1612     - int rc;
1613     + struct smb2_query_info_rsp *rsp;
1614     + int rc, used_len = 0;
1615    
1616     if (smb3_encryption_required(tcon))
1617     flags |= CIFS_TRANSFORM_REQ;
1618     @@ -1110,6 +1111,38 @@ smb2_set_ea(const unsigned int xid, struct cifs_tcon *tcon,
1619     cifs_sb);
1620     if (rc == -ENODATA)
1621     goto sea_exit;
1622     + } else {
1623     + /* If we are adding a attribute we should first check
1624     + * if there will be enough space available to store
1625     + * the new EA. If not we should not add it since we
1626     + * would not be able to even read the EAs back.
1627     + */
1628     + rc = smb2_query_info_compound(xid, tcon, utf16_path,
1629     + FILE_READ_EA,
1630     + FILE_FULL_EA_INFORMATION,
1631     + SMB2_O_INFO_FILE,
1632     + CIFSMaxBufSize -
1633     + MAX_SMB2_CREATE_RESPONSE_SIZE -
1634     + MAX_SMB2_CLOSE_RESPONSE_SIZE,
1635     + &rsp_iov[1], &resp_buftype[1], cifs_sb);
1636     + if (rc == 0) {
1637     + rsp = (struct smb2_query_info_rsp *)rsp_iov[1].iov_base;
1638     + used_len = le32_to_cpu(rsp->OutputBufferLength);
1639     + }
1640     + free_rsp_buf(resp_buftype[1], rsp_iov[1].iov_base);
1641     + resp_buftype[1] = CIFS_NO_BUFFER;
1642     + memset(&rsp_iov[1], 0, sizeof(rsp_iov[1]));
1643     + rc = 0;
1644     +
1645     + /* Use a fudge factor of 256 bytes in case we collide
1646     + * with a different set_EAs command.
1647     + */
1648     + if(CIFSMaxBufSize - MAX_SMB2_CREATE_RESPONSE_SIZE -
1649     + MAX_SMB2_CLOSE_RESPONSE_SIZE - 256 <
1650     + used_len + ea_name_len + ea_value_len + 1) {
1651     + rc = -ENOSPC;
1652     + goto sea_exit;
1653     + }
1654     }
1655     }
1656    
1657     diff --git a/fs/ext4/block_validity.c b/fs/ext4/block_validity.c
1658     index d4d4fdfac1a6..ff8e1205127e 100644
1659     --- a/fs/ext4/block_validity.c
1660     +++ b/fs/ext4/block_validity.c
1661     @@ -203,6 +203,7 @@ static int ext4_protect_reserved_inode(struct super_block *sb,
1662     return PTR_ERR(inode);
1663     num = (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
1664     while (i < num) {
1665     + cond_resched();
1666     map.m_lblk = i;
1667     map.m_len = num - i;
1668     n = ext4_map_blocks(NULL, inode, &map, 0);
1669     diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c
1670     index 5ef8d7ae231b..2743c6f8a457 100644
1671     --- a/fs/ext4/dir.c
1672     +++ b/fs/ext4/dir.c
1673     @@ -130,12 +130,14 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
1674     if (err != ERR_BAD_DX_DIR) {
1675     return err;
1676     }
1677     - /*
1678     - * We don't set the inode dirty flag since it's not
1679     - * critical that it get flushed back to the disk.
1680     - */
1681     - ext4_clear_inode_flag(file_inode(file),
1682     - EXT4_INODE_INDEX);
1683     + /* Can we just clear INDEX flag to ignore htree information? */
1684     + if (!ext4_has_metadata_csum(sb)) {
1685     + /*
1686     + * We don't set the inode dirty flag since it's not
1687     + * critical that it gets flushed back to the disk.
1688     + */
1689     + ext4_clear_inode_flag(inode, EXT4_INODE_INDEX);
1690     + }
1691     }
1692    
1693     if (ext4_has_inline_data(inode)) {
1694     diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
1695     index 03db3e71676c..e2f65b565c1f 100644
1696     --- a/fs/ext4/ext4.h
1697     +++ b/fs/ext4/ext4.h
1698     @@ -2476,8 +2476,11 @@ void ext4_insert_dentry(struct inode *inode,
1699     struct ext4_filename *fname);
1700     static inline void ext4_update_dx_flag(struct inode *inode)
1701     {
1702     - if (!ext4_has_feature_dir_index(inode->i_sb))
1703     + if (!ext4_has_feature_dir_index(inode->i_sb)) {
1704     + /* ext4_iget() should have caught this... */
1705     + WARN_ON_ONCE(ext4_has_feature_metadata_csum(inode->i_sb));
1706     ext4_clear_inode_flag(inode, EXT4_INODE_INDEX);
1707     + }
1708     }
1709     static const unsigned char ext4_filetype_table[] = {
1710     DT_UNKNOWN, DT_REG, DT_DIR, DT_CHR, DT_BLK, DT_FIFO, DT_SOCK, DT_LNK
1711     diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
1712     index 8bba6cd5e870..76a38ef5f226 100644
1713     --- a/fs/ext4/inode.c
1714     +++ b/fs/ext4/inode.c
1715     @@ -4972,6 +4972,18 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
1716     ret = -EFSCORRUPTED;
1717     goto bad_inode;
1718     }
1719     + /*
1720     + * If dir_index is not enabled but there's dir with INDEX flag set,
1721     + * we'd normally treat htree data as empty space. But with metadata
1722     + * checksumming that corrupts checksums so forbid that.
1723     + */
1724     + if (!ext4_has_feature_dir_index(sb) && ext4_has_metadata_csum(sb) &&
1725     + ext4_test_inode_flag(inode, EXT4_INODE_INDEX)) {
1726     + ext4_error_inode(inode, function, line, 0,
1727     + "iget: Dir with htree data on filesystem without dir_index feature.");
1728     + ret = -EFSCORRUPTED;
1729     + goto bad_inode;
1730     + }
1731     ei->i_disksize = inode->i_size;
1732     #ifdef CONFIG_QUOTA
1733     ei->i_reserved_quota = 0;
1734     diff --git a/fs/ext4/mmp.c b/fs/ext4/mmp.c
1735     index 2305b4374fd3..9d00e0dd2ba9 100644
1736     --- a/fs/ext4/mmp.c
1737     +++ b/fs/ext4/mmp.c
1738     @@ -120,10 +120,10 @@ void __dump_mmp_msg(struct super_block *sb, struct mmp_struct *mmp,
1739     {
1740     __ext4_warning(sb, function, line, "%s", msg);
1741     __ext4_warning(sb, function, line,
1742     - "MMP failure info: last update time: %llu, last update "
1743     - "node: %s, last update device: %s",
1744     - (long long unsigned int) le64_to_cpu(mmp->mmp_time),
1745     - mmp->mmp_nodename, mmp->mmp_bdevname);
1746     + "MMP failure info: last update time: %llu, last update node: %.*s, last update device: %.*s",
1747     + (unsigned long long)le64_to_cpu(mmp->mmp_time),
1748     + (int)sizeof(mmp->mmp_nodename), mmp->mmp_nodename,
1749     + (int)sizeof(mmp->mmp_bdevname), mmp->mmp_bdevname);
1750     }
1751    
1752     /*
1753     @@ -154,6 +154,7 @@ static int kmmpd(void *data)
1754     mmp_check_interval = max(EXT4_MMP_CHECK_MULT * mmp_update_interval,
1755     EXT4_MMP_MIN_CHECK_INTERVAL);
1756     mmp->mmp_check_interval = cpu_to_le16(mmp_check_interval);
1757     + BUILD_BUG_ON(sizeof(mmp->mmp_bdevname) < BDEVNAME_SIZE);
1758     bdevname(bh->b_bdev, mmp->mmp_bdevname);
1759    
1760     memcpy(mmp->mmp_nodename, init_utsname()->nodename,
1761     @@ -375,7 +376,8 @@ skip:
1762     /*
1763     * Start a kernel thread to update the MMP block periodically.
1764     */
1765     - EXT4_SB(sb)->s_mmp_tsk = kthread_run(kmmpd, mmpd_data, "kmmpd-%s",
1766     + EXT4_SB(sb)->s_mmp_tsk = kthread_run(kmmpd, mmpd_data, "kmmpd-%.*s",
1767     + (int)sizeof(mmp->mmp_bdevname),
1768     bdevname(bh->b_bdev,
1769     mmp->mmp_bdevname));
1770     if (IS_ERR(EXT4_SB(sb)->s_mmp_tsk)) {
1771     diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
1772     index f56402e9c11c..94d84910dc1e 100644
1773     --- a/fs/ext4/namei.c
1774     +++ b/fs/ext4/namei.c
1775     @@ -2205,6 +2205,13 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
1776     retval = ext4_dx_add_entry(handle, &fname, dir, inode);
1777     if (!retval || (retval != ERR_BAD_DX_DIR))
1778     goto out;
1779     + /* Can we just ignore htree data? */
1780     + if (ext4_has_metadata_csum(sb)) {
1781     + EXT4_ERROR_INODE(dir,
1782     + "Directory has corrupted htree index.");
1783     + retval = -EFSCORRUPTED;
1784     + goto out;
1785     + }
1786     ext4_clear_inode_flag(dir, EXT4_INODE_INDEX);
1787     dx_fallback++;
1788     ext4_mark_inode_dirty(handle, dir);
1789     diff --git a/fs/ext4/super.c b/fs/ext4/super.c
1790     index 66162b430edc..914230e63054 100644
1791     --- a/fs/ext4/super.c
1792     +++ b/fs/ext4/super.c
1793     @@ -2961,17 +2961,11 @@ static int ext4_feature_set_ok(struct super_block *sb, int readonly)
1794     return 0;
1795     }
1796    
1797     -#ifndef CONFIG_QUOTA
1798     - if (ext4_has_feature_quota(sb) && !readonly) {
1799     +#if !defined(CONFIG_QUOTA) || !defined(CONFIG_QFMT_V2)
1800     + if (!readonly && (ext4_has_feature_quota(sb) ||
1801     + ext4_has_feature_project(sb))) {
1802     ext4_msg(sb, KERN_ERR,
1803     - "Filesystem with quota feature cannot be mounted RDWR "
1804     - "without CONFIG_QUOTA");
1805     - return 0;
1806     - }
1807     - if (ext4_has_feature_project(sb) && !readonly) {
1808     - ext4_msg(sb, KERN_ERR,
1809     - "Filesystem with project quota feature cannot be mounted RDWR "
1810     - "without CONFIG_QUOTA");
1811     + "The kernel was not built with CONFIG_QUOTA and CONFIG_QFMT_V2");
1812     return 0;
1813     }
1814     #endif /* CONFIG_QUOTA */
1815     @@ -3765,6 +3759,15 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
1816     */
1817     sbi->s_li_wait_mult = EXT4_DEF_LI_WAIT_MULT;
1818    
1819     + blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
1820     + if (blocksize < EXT4_MIN_BLOCK_SIZE ||
1821     + blocksize > EXT4_MAX_BLOCK_SIZE) {
1822     + ext4_msg(sb, KERN_ERR,
1823     + "Unsupported filesystem blocksize %d (%d log_block_size)",
1824     + blocksize, le32_to_cpu(es->s_log_block_size));
1825     + goto failed_mount;
1826     + }
1827     +
1828     if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV) {
1829     sbi->s_inode_size = EXT4_GOOD_OLD_INODE_SIZE;
1830     sbi->s_first_ino = EXT4_GOOD_OLD_FIRST_INO;
1831     @@ -3782,6 +3785,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
1832     ext4_msg(sb, KERN_ERR,
1833     "unsupported inode size: %d",
1834     sbi->s_inode_size);
1835     + ext4_msg(sb, KERN_ERR, "blocksize: %d", blocksize);
1836     goto failed_mount;
1837     }
1838     /*
1839     @@ -3985,14 +3989,6 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
1840     if (!ext4_feature_set_ok(sb, (sb_rdonly(sb))))
1841     goto failed_mount;
1842    
1843     - blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
1844     - if (blocksize < EXT4_MIN_BLOCK_SIZE ||
1845     - blocksize > EXT4_MAX_BLOCK_SIZE) {
1846     - ext4_msg(sb, KERN_ERR,
1847     - "Unsupported filesystem blocksize %d (%d log_block_size)",
1848     - blocksize, le32_to_cpu(es->s_log_block_size));
1849     - goto failed_mount;
1850     - }
1851     if (le32_to_cpu(es->s_log_block_size) >
1852     (EXT4_MAX_BLOCK_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) {
1853     ext4_msg(sb, KERN_ERR,
1854     @@ -5544,9 +5540,15 @@ static int ext4_statfs_project(struct super_block *sb,
1855     return PTR_ERR(dquot);
1856     spin_lock(&dquot->dq_dqb_lock);
1857    
1858     - limit = (dquot->dq_dqb.dqb_bsoftlimit ?
1859     - dquot->dq_dqb.dqb_bsoftlimit :
1860     - dquot->dq_dqb.dqb_bhardlimit) >> sb->s_blocksize_bits;
1861     + limit = 0;
1862     + if (dquot->dq_dqb.dqb_bsoftlimit &&
1863     + (!limit || dquot->dq_dqb.dqb_bsoftlimit < limit))
1864     + limit = dquot->dq_dqb.dqb_bsoftlimit;
1865     + if (dquot->dq_dqb.dqb_bhardlimit &&
1866     + (!limit || dquot->dq_dqb.dqb_bhardlimit < limit))
1867     + limit = dquot->dq_dqb.dqb_bhardlimit;
1868     + limit >>= sb->s_blocksize_bits;
1869     +
1870     if (limit && buf->f_blocks > limit) {
1871     curblock = (dquot->dq_dqb.dqb_curspace +
1872     dquot->dq_dqb.dqb_rsvspace) >> sb->s_blocksize_bits;
1873     @@ -5556,9 +5558,14 @@ static int ext4_statfs_project(struct super_block *sb,
1874     (buf->f_blocks - curblock) : 0;
1875     }
1876    
1877     - limit = dquot->dq_dqb.dqb_isoftlimit ?
1878     - dquot->dq_dqb.dqb_isoftlimit :
1879     - dquot->dq_dqb.dqb_ihardlimit;
1880     + limit = 0;
1881     + if (dquot->dq_dqb.dqb_isoftlimit &&
1882     + (!limit || dquot->dq_dqb.dqb_isoftlimit < limit))
1883     + limit = dquot->dq_dqb.dqb_isoftlimit;
1884     + if (dquot->dq_dqb.dqb_ihardlimit &&
1885     + (!limit || dquot->dq_dqb.dqb_ihardlimit < limit))
1886     + limit = dquot->dq_dqb.dqb_ihardlimit;
1887     +
1888     if (limit && buf->f_files > limit) {
1889     buf->f_files = limit;
1890     buf->f_ffree =
1891     diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
1892     index c43591cd70f1..2a42904bcd62 100644
1893     --- a/fs/jbd2/commit.c
1894     +++ b/fs/jbd2/commit.c
1895     @@ -974,29 +974,33 @@ restart_loop:
1896     * it. */
1897    
1898     /*
1899     - * A buffer which has been freed while still being journaled by
1900     - * a previous transaction.
1901     - */
1902     - if (buffer_freed(bh)) {
1903     + * A buffer which has been freed while still being journaled
1904     + * by a previous transaction, refile the buffer to BJ_Forget of
1905     + * the running transaction. If the just committed transaction
1906     + * contains "add to orphan" operation, we can completely
1907     + * invalidate the buffer now. We are rather through in that
1908     + * since the buffer may be still accessible when blocksize <
1909     + * pagesize and it is attached to the last partial page.
1910     + */
1911     + if (buffer_freed(bh) && !jh->b_next_transaction) {
1912     + struct address_space *mapping;
1913     +
1914     + clear_buffer_freed(bh);
1915     + clear_buffer_jbddirty(bh);
1916     +
1917     /*
1918     - * If the running transaction is the one containing
1919     - * "add to orphan" operation (b_next_transaction !=
1920     - * NULL), we have to wait for that transaction to
1921     - * commit before we can really get rid of the buffer.
1922     - * So just clear b_modified to not confuse transaction
1923     - * credit accounting and refile the buffer to
1924     - * BJ_Forget of the running transaction. If the just
1925     - * committed transaction contains "add to orphan"
1926     - * operation, we can completely invalidate the buffer
1927     - * now. We are rather through in that since the
1928     - * buffer may be still accessible when blocksize <
1929     - * pagesize and it is attached to the last partial
1930     - * page.
1931     + * Block device buffers need to stay mapped all the
1932     + * time, so it is enough to clear buffer_jbddirty and
1933     + * buffer_freed bits. For the file mapping buffers (i.e.
1934     + * journalled data) we need to unmap buffer and clear
1935     + * more bits. We also need to be careful about the check
1936     + * because the data page mapping can get cleared under
1937     + * out hands, which alse need not to clear more bits
1938     + * because the page and buffers will be freed and can
1939     + * never be reused once we are done with them.
1940     */
1941     - jh->b_modified = 0;
1942     - if (!jh->b_next_transaction) {
1943     - clear_buffer_freed(bh);
1944     - clear_buffer_jbddirty(bh);
1945     + mapping = READ_ONCE(bh->b_page->mapping);
1946     + if (mapping && !sb_is_blkdev_sb(mapping->host->i_sb)) {
1947     clear_buffer_mapped(bh);
1948     clear_buffer_new(bh);
1949     clear_buffer_req(bh);
1950     diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c
1951     index bee8498d7792..3930c68a9c20 100644
1952     --- a/fs/jbd2/transaction.c
1953     +++ b/fs/jbd2/transaction.c
1954     @@ -2296,14 +2296,16 @@ static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh,
1955     return -EBUSY;
1956     }
1957     /*
1958     - * OK, buffer won't be reachable after truncate. We just set
1959     - * j_next_transaction to the running transaction (if there is
1960     - * one) and mark buffer as freed so that commit code knows it
1961     - * should clear dirty bits when it is done with the buffer.
1962     + * OK, buffer won't be reachable after truncate. We just clear
1963     + * b_modified to not confuse transaction credit accounting, and
1964     + * set j_next_transaction to the running transaction (if there
1965     + * is one) and mark buffer as freed so that commit code knows
1966     + * it should clear dirty bits when it is done with the buffer.
1967     */
1968     set_buffer_freed(bh);
1969     if (journal->j_running_transaction && buffer_jbddirty(bh))
1970     jh->b_next_transaction = journal->j_running_transaction;
1971     + jh->b_modified = 0;
1972     jbd2_journal_put_journal_head(jh);
1973     spin_unlock(&journal->j_list_lock);
1974     jbd_unlock_bh_state(bh);
1975     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
1976     index 423960d480f1..f808fb34b110 100644
1977     --- a/fs/nfs/nfs4proc.c
1978     +++ b/fs/nfs/nfs4proc.c
1979     @@ -5293,7 +5293,7 @@ static void nfs4_proc_write_setup(struct nfs_pgio_header *hdr,
1980     hdr->timestamp = jiffies;
1981    
1982     msg->rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_WRITE];
1983     - nfs4_init_sequence(&hdr->args.seq_args, &hdr->res.seq_res, 1, 0);
1984     + nfs4_init_sequence(&hdr->args.seq_args, &hdr->res.seq_res, 0, 0);
1985     nfs4_state_protect_write(server->nfs_client, clnt, msg, hdr);
1986     }
1987    
1988     diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
1989     index e5e041413581..d1fdf26ccb33 100644
1990     --- a/include/acpi/acpixf.h
1991     +++ b/include/acpi/acpixf.h
1992     @@ -748,6 +748,7 @@ ACPI_HW_DEPENDENT_RETURN_UINT32(u32 acpi_dispatch_gpe(acpi_handle gpe_device, u3
1993     ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_disable_all_gpes(void))
1994     ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_all_runtime_gpes(void))
1995     ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_all_wakeup_gpes(void))
1996     +ACPI_HW_DEPENDENT_RETURN_UINT32(u32 acpi_any_gpe_status_set(void))
1997    
1998     ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
1999     acpi_get_gpe_device(u32 gpe_index,
2000     diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h
2001     index b70af921c614..803bb63dd5ff 100644
2002     --- a/include/linux/gpio/consumer.h
2003     +++ b/include/linux/gpio/consumer.h
2004     @@ -158,6 +158,7 @@ int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
2005    
2006     int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce);
2007     int gpiod_set_transitory(struct gpio_desc *desc, bool transitory);
2008     +void gpiod_toggle_active_low(struct gpio_desc *desc);
2009    
2010     int gpiod_is_active_low(const struct gpio_desc *desc);
2011     int gpiod_cansleep(const struct gpio_desc *desc);
2012     @@ -479,6 +480,12 @@ static inline int gpiod_set_transitory(struct gpio_desc *desc, bool transitory)
2013     return -ENOSYS;
2014     }
2015    
2016     +static inline void gpiod_toggle_active_low(struct gpio_desc *desc)
2017     +{
2018     + /* GPIO can never have been requested */
2019     + WARN_ON(desc);
2020     +}
2021     +
2022     static inline int gpiod_is_active_low(const struct gpio_desc *desc)
2023     {
2024     /* GPIO can never have been requested */
2025     diff --git a/include/linux/suspend.h b/include/linux/suspend.h
2026     index 6fc8843f1c9e..cd97d2c8840c 100644
2027     --- a/include/linux/suspend.h
2028     +++ b/include/linux/suspend.h
2029     @@ -191,7 +191,7 @@ struct platform_s2idle_ops {
2030     int (*begin)(void);
2031     int (*prepare)(void);
2032     int (*prepare_late)(void);
2033     - void (*wake)(void);
2034     + bool (*wake)(void);
2035     void (*restore_early)(void);
2036     void (*restore)(void);
2037     void (*end)(void);
2038     diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
2039     index f3b7239f1892..27f149f5d4a9 100644
2040     --- a/kernel/power/suspend.c
2041     +++ b/kernel/power/suspend.c
2042     @@ -131,11 +131,12 @@ static void s2idle_loop(void)
2043     * to avoid them upfront.
2044     */
2045     for (;;) {
2046     - if (s2idle_ops && s2idle_ops->wake)
2047     - s2idle_ops->wake();
2048     -
2049     - if (pm_wakeup_pending())
2050     + if (s2idle_ops && s2idle_ops->wake) {
2051     + if (s2idle_ops->wake())
2052     + break;
2053     + } else if (pm_wakeup_pending()) {
2054     break;
2055     + }
2056    
2057     pm_wakeup_clear(false);
2058    
2059     diff --git a/kernel/sched/core.c b/kernel/sched/core.c
2060     index 00743684a549..dfaefb175ba0 100644
2061     --- a/kernel/sched/core.c
2062     +++ b/kernel/sched/core.c
2063     @@ -7250,7 +7250,7 @@ capacity_from_percent(char *buf)
2064     &req.percent);
2065     if (req.ret)
2066     return req;
2067     - if (req.percent > UCLAMP_PERCENT_SCALE) {
2068     + if ((u64)req.percent > UCLAMP_PERCENT_SCALE) {
2069     req.ret = -ERANGE;
2070     return req;
2071     }
2072     diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
2073     index 54dd8849d1cc..1e3b9d34aaa4 100644
2074     --- a/net/mac80211/mlme.c
2075     +++ b/net/mac80211/mlme.c
2076     @@ -8,7 +8,7 @@
2077     * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
2078     * Copyright 2013-2014 Intel Mobile Communications GmbH
2079     * Copyright (C) 2015 - 2017 Intel Deutschland GmbH
2080     - * Copyright (C) 2018 - 2019 Intel Corporation
2081     + * Copyright (C) 2018 - 2020 Intel Corporation
2082     */
2083    
2084     #include <linux/delay.h>
2085     @@ -1311,7 +1311,7 @@ ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
2086     if (!res) {
2087     ch_switch.timestamp = timestamp;
2088     ch_switch.device_timestamp = device_timestamp;
2089     - ch_switch.block_tx = beacon ? csa_ie.mode : 0;
2090     + ch_switch.block_tx = csa_ie.mode;
2091     ch_switch.chandef = csa_ie.chandef;
2092     ch_switch.count = csa_ie.count;
2093     ch_switch.delay = csa_ie.max_switch_time;
2094     @@ -1404,7 +1404,7 @@ ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
2095    
2096     sdata->vif.csa_active = true;
2097     sdata->csa_chandef = csa_ie.chandef;
2098     - sdata->csa_block_tx = ch_switch.block_tx;
2099     + sdata->csa_block_tx = csa_ie.mode;
2100     ifmgd->csa_ignored_same_chan = false;
2101    
2102     if (sdata->csa_block_tx)
2103     @@ -1438,7 +1438,7 @@ ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
2104     * reset when the disconnection worker runs.
2105     */
2106     sdata->vif.csa_active = true;
2107     - sdata->csa_block_tx = ch_switch.block_tx;
2108     + sdata->csa_block_tx = csa_ie.mode;
2109    
2110     ieee80211_queue_work(&local->hw, &ifmgd->csa_connection_drop_work);
2111     mutex_unlock(&local->chanctx_mtx);
2112     diff --git a/net/sunrpc/xprtrdma/frwr_ops.c b/net/sunrpc/xprtrdma/frwr_ops.c
2113     index 9901a811f598..0ad45a8fe3fb 100644
2114     --- a/net/sunrpc/xprtrdma/frwr_ops.c
2115     +++ b/net/sunrpc/xprtrdma/frwr_ops.c
2116     @@ -326,8 +326,8 @@ struct rpcrdma_mr_seg *frwr_map(struct rpcrdma_xprt *r_xprt,
2117     {
2118     struct rpcrdma_ia *ia = &r_xprt->rx_ia;
2119     struct ib_reg_wr *reg_wr;
2120     + int i, n, dma_nents;
2121     struct ib_mr *ibmr;
2122     - int i, n;
2123     u8 key;
2124    
2125     if (nsegs > ia->ri_max_frwr_depth)
2126     @@ -351,15 +351,16 @@ struct rpcrdma_mr_seg *frwr_map(struct rpcrdma_xprt *r_xprt,
2127     break;
2128     }
2129     mr->mr_dir = rpcrdma_data_dir(writing);
2130     + mr->mr_nents = i;
2131    
2132     - mr->mr_nents =
2133     - ib_dma_map_sg(ia->ri_id->device, mr->mr_sg, i, mr->mr_dir);
2134     - if (!mr->mr_nents)
2135     + dma_nents = ib_dma_map_sg(ia->ri_id->device, mr->mr_sg, mr->mr_nents,
2136     + mr->mr_dir);
2137     + if (!dma_nents)
2138     goto out_dmamap_err;
2139    
2140     ibmr = mr->frwr.fr_mr;
2141     - n = ib_map_mr_sg(ibmr, mr->mr_sg, mr->mr_nents, NULL, PAGE_SIZE);
2142     - if (unlikely(n != mr->mr_nents))
2143     + n = ib_map_mr_sg(ibmr, mr->mr_sg, dma_nents, NULL, PAGE_SIZE);
2144     + if (n != dma_nents)
2145     goto out_mapmr_err;
2146    
2147     ibmr->iova &= 0x00000000ffffffff;
2148     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
2149     index 68832f52c1ad..a66d4be3516e 100644
2150     --- a/sound/pci/hda/patch_realtek.c
2151     +++ b/sound/pci/hda/patch_realtek.c
2152     @@ -2447,6 +2447,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
2153     SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC882_FIXUP_EAPD),
2154     SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3/Z87X-UD3H", ALC889_FIXUP_FRONT_HP_NO_PRESENCE),
2155     SND_PCI_QUIRK(0x1458, 0xa0b8, "Gigabyte AZ370-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
2156     + SND_PCI_QUIRK(0x1462, 0x1276, "MSI-GL73", ALC1220_FIXUP_CLEVO_P950),
2157     SND_PCI_QUIRK(0x1462, 0x7350, "MSI-7350", ALC889_FIXUP_CD),
2158     SND_PCI_QUIRK(0x1462, 0xda57, "MSI Z270-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
2159     SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3),
2160     @@ -5701,8 +5702,11 @@ static void alc_fixup_headset_jack(struct hda_codec *codec,
2161     break;
2162     case HDA_FIXUP_ACT_INIT:
2163     switch (codec->core.vendor_id) {
2164     + case 0x10ec0215:
2165     case 0x10ec0225:
2166     + case 0x10ec0285:
2167     case 0x10ec0295:
2168     + case 0x10ec0289:
2169     case 0x10ec0299:
2170     alc_write_coef_idx(codec, 0x48, 0xd011);
2171     alc_update_coef_idx(codec, 0x49, 0x007f, 0x0045);
2172     diff --git a/sound/usb/clock.c b/sound/usb/clock.c
2173     index 6b8c14f9b5d4..a48313dfa967 100644
2174     --- a/sound/usb/clock.c
2175     +++ b/sound/usb/clock.c
2176     @@ -151,8 +151,34 @@ static int uac_clock_selector_set_val(struct snd_usb_audio *chip, int selector_i
2177     return ret;
2178     }
2179    
2180     +/*
2181     + * Assume the clock is valid if clock source supports only one single sample
2182     + * rate, the terminal is connected directly to it (there is no clock selector)
2183     + * and clock type is internal. This is to deal with some Denon DJ controllers
2184     + * that always reports that clock is invalid.
2185     + */
2186     +static bool uac_clock_source_is_valid_quirk(struct snd_usb_audio *chip,
2187     + struct audioformat *fmt,
2188     + int source_id)
2189     +{
2190     + if (fmt->protocol == UAC_VERSION_2) {
2191     + struct uac_clock_source_descriptor *cs_desc =
2192     + snd_usb_find_clock_source(chip->ctrl_intf, source_id);
2193     +
2194     + if (!cs_desc)
2195     + return false;
2196     +
2197     + return (fmt->nr_rates == 1 &&
2198     + (fmt->clock & 0xff) == cs_desc->bClockID &&
2199     + (cs_desc->bmAttributes & 0x3) !=
2200     + UAC_CLOCK_SOURCE_TYPE_EXT);
2201     + }
2202     +
2203     + return false;
2204     +}
2205     +
2206     static bool uac_clock_source_is_valid(struct snd_usb_audio *chip,
2207     - int protocol,
2208     + struct audioformat *fmt,
2209     int source_id)
2210     {
2211     int err;
2212     @@ -160,26 +186,26 @@ static bool uac_clock_source_is_valid(struct snd_usb_audio *chip,
2213     struct usb_device *dev = chip->dev;
2214     u32 bmControls;
2215    
2216     - if (protocol == UAC_VERSION_3) {
2217     + if (fmt->protocol == UAC_VERSION_3) {
2218     struct uac3_clock_source_descriptor *cs_desc =
2219     snd_usb_find_clock_source_v3(chip->ctrl_intf, source_id);
2220    
2221     if (!cs_desc)
2222     - return 0;
2223     + return false;
2224     bmControls = le32_to_cpu(cs_desc->bmControls);
2225     } else { /* UAC_VERSION_1/2 */
2226     struct uac_clock_source_descriptor *cs_desc =
2227     snd_usb_find_clock_source(chip->ctrl_intf, source_id);
2228    
2229     if (!cs_desc)
2230     - return 0;
2231     + return false;
2232     bmControls = cs_desc->bmControls;
2233     }
2234    
2235     /* If a clock source can't tell us whether it's valid, we assume it is */
2236     if (!uac_v2v3_control_is_readable(bmControls,
2237     UAC2_CS_CONTROL_CLOCK_VALID))
2238     - return 1;
2239     + return true;
2240    
2241     err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), UAC2_CS_CUR,
2242     USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN,
2243     @@ -191,13 +217,17 @@ static bool uac_clock_source_is_valid(struct snd_usb_audio *chip,
2244     dev_warn(&dev->dev,
2245     "%s(): cannot get clock validity for id %d\n",
2246     __func__, source_id);
2247     - return 0;
2248     + return false;
2249     }
2250    
2251     - return !!data;
2252     + if (data)
2253     + return true;
2254     + else
2255     + return uac_clock_source_is_valid_quirk(chip, fmt, source_id);
2256     }
2257    
2258     -static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
2259     +static int __uac_clock_find_source(struct snd_usb_audio *chip,
2260     + struct audioformat *fmt, int entity_id,
2261     unsigned long *visited, bool validate)
2262     {
2263     struct uac_clock_source_descriptor *source;
2264     @@ -217,7 +247,7 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
2265     source = snd_usb_find_clock_source(chip->ctrl_intf, entity_id);
2266     if (source) {
2267     entity_id = source->bClockID;
2268     - if (validate && !uac_clock_source_is_valid(chip, UAC_VERSION_2,
2269     + if (validate && !uac_clock_source_is_valid(chip, fmt,
2270     entity_id)) {
2271     usb_audio_err(chip,
2272     "clock source %d is not valid, cannot use\n",
2273     @@ -248,8 +278,9 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
2274     }
2275    
2276     cur = ret;
2277     - ret = __uac_clock_find_source(chip, selector->baCSourceID[ret - 1],
2278     - visited, validate);
2279     + ret = __uac_clock_find_source(chip, fmt,
2280     + selector->baCSourceID[ret - 1],
2281     + visited, validate);
2282     if (!validate || ret > 0 || !chip->autoclock)
2283     return ret;
2284    
2285     @@ -260,8 +291,9 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
2286     if (i == cur)
2287     continue;
2288    
2289     - ret = __uac_clock_find_source(chip, selector->baCSourceID[i - 1],
2290     - visited, true);
2291     + ret = __uac_clock_find_source(chip, fmt,
2292     + selector->baCSourceID[i - 1],
2293     + visited, true);
2294     if (ret < 0)
2295     continue;
2296    
2297     @@ -281,14 +313,16 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
2298     /* FIXME: multipliers only act as pass-thru element for now */
2299     multiplier = snd_usb_find_clock_multiplier(chip->ctrl_intf, entity_id);
2300     if (multiplier)
2301     - return __uac_clock_find_source(chip, multiplier->bCSourceID,
2302     - visited, validate);
2303     + return __uac_clock_find_source(chip, fmt,
2304     + multiplier->bCSourceID,
2305     + visited, validate);
2306    
2307     return -EINVAL;
2308     }
2309    
2310     -static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
2311     - unsigned long *visited, bool validate)
2312     +static int __uac3_clock_find_source(struct snd_usb_audio *chip,
2313     + struct audioformat *fmt, int entity_id,
2314     + unsigned long *visited, bool validate)
2315     {
2316     struct uac3_clock_source_descriptor *source;
2317     struct uac3_clock_selector_descriptor *selector;
2318     @@ -307,7 +341,7 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
2319     source = snd_usb_find_clock_source_v3(chip->ctrl_intf, entity_id);
2320     if (source) {
2321     entity_id = source->bClockID;
2322     - if (validate && !uac_clock_source_is_valid(chip, UAC_VERSION_3,
2323     + if (validate && !uac_clock_source_is_valid(chip, fmt,
2324     entity_id)) {
2325     usb_audio_err(chip,
2326     "clock source %d is not valid, cannot use\n",
2327     @@ -338,7 +372,8 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
2328     }
2329    
2330     cur = ret;
2331     - ret = __uac3_clock_find_source(chip, selector->baCSourceID[ret - 1],
2332     + ret = __uac3_clock_find_source(chip, fmt,
2333     + selector->baCSourceID[ret - 1],
2334     visited, validate);
2335     if (!validate || ret > 0 || !chip->autoclock)
2336     return ret;
2337     @@ -350,8 +385,9 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
2338     if (i == cur)
2339     continue;
2340    
2341     - ret = __uac3_clock_find_source(chip, selector->baCSourceID[i - 1],
2342     - visited, true);
2343     + ret = __uac3_clock_find_source(chip, fmt,
2344     + selector->baCSourceID[i - 1],
2345     + visited, true);
2346     if (ret < 0)
2347     continue;
2348    
2349     @@ -372,7 +408,8 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
2350     multiplier = snd_usb_find_clock_multiplier_v3(chip->ctrl_intf,
2351     entity_id);
2352     if (multiplier)
2353     - return __uac3_clock_find_source(chip, multiplier->bCSourceID,
2354     + return __uac3_clock_find_source(chip, fmt,
2355     + multiplier->bCSourceID,
2356     visited, validate);
2357    
2358     return -EINVAL;
2359     @@ -389,18 +426,18 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
2360     *
2361     * Returns the clock source UnitID (>=0) on success, or an error.
2362     */
2363     -int snd_usb_clock_find_source(struct snd_usb_audio *chip, int protocol,
2364     - int entity_id, bool validate)
2365     +int snd_usb_clock_find_source(struct snd_usb_audio *chip,
2366     + struct audioformat *fmt, bool validate)
2367     {
2368     DECLARE_BITMAP(visited, 256);
2369     memset(visited, 0, sizeof(visited));
2370    
2371     - switch (protocol) {
2372     + switch (fmt->protocol) {
2373     case UAC_VERSION_2:
2374     - return __uac_clock_find_source(chip, entity_id, visited,
2375     + return __uac_clock_find_source(chip, fmt, fmt->clock, visited,
2376     validate);
2377     case UAC_VERSION_3:
2378     - return __uac3_clock_find_source(chip, entity_id, visited,
2379     + return __uac3_clock_find_source(chip, fmt, fmt->clock, visited,
2380     validate);
2381     default:
2382     return -EINVAL;
2383     @@ -501,8 +538,7 @@ static int set_sample_rate_v2v3(struct snd_usb_audio *chip, int iface,
2384     * automatic clock selection if the current clock is not
2385     * valid.
2386     */
2387     - clock = snd_usb_clock_find_source(chip, fmt->protocol,
2388     - fmt->clock, true);
2389     + clock = snd_usb_clock_find_source(chip, fmt, true);
2390     if (clock < 0) {
2391     /* We did not find a valid clock, but that might be
2392     * because the current sample rate does not match an
2393     @@ -510,8 +546,7 @@ static int set_sample_rate_v2v3(struct snd_usb_audio *chip, int iface,
2394     * and we will do another validation after setting the
2395     * rate.
2396     */
2397     - clock = snd_usb_clock_find_source(chip, fmt->protocol,
2398     - fmt->clock, false);
2399     + clock = snd_usb_clock_find_source(chip, fmt, false);
2400     if (clock < 0)
2401     return clock;
2402     }
2403     @@ -577,7 +612,7 @@ static int set_sample_rate_v2v3(struct snd_usb_audio *chip, int iface,
2404    
2405     validation:
2406     /* validate clock after rate change */
2407     - if (!uac_clock_source_is_valid(chip, fmt->protocol, clock))
2408     + if (!uac_clock_source_is_valid(chip, fmt, clock))
2409     return -ENXIO;
2410     return 0;
2411     }
2412     diff --git a/sound/usb/clock.h b/sound/usb/clock.h
2413     index 076e31b79ee0..68df0fbe09d0 100644
2414     --- a/sound/usb/clock.h
2415     +++ b/sound/usb/clock.h
2416     @@ -6,7 +6,7 @@ int snd_usb_init_sample_rate(struct snd_usb_audio *chip, int iface,
2417     struct usb_host_interface *alts,
2418     struct audioformat *fmt, int rate);
2419    
2420     -int snd_usb_clock_find_source(struct snd_usb_audio *chip, int protocol,
2421     - int entity_id, bool validate);
2422     +int snd_usb_clock_find_source(struct snd_usb_audio *chip,
2423     + struct audioformat *fmt, bool validate);
2424    
2425     #endif /* __USBAUDIO_CLOCK_H */
2426     diff --git a/sound/usb/format.c b/sound/usb/format.c
2427     index d79db71305f6..25668ba5e68e 100644
2428     --- a/sound/usb/format.c
2429     +++ b/sound/usb/format.c
2430     @@ -322,8 +322,7 @@ static int parse_audio_format_rates_v2v3(struct snd_usb_audio *chip,
2431     struct usb_device *dev = chip->dev;
2432     unsigned char tmp[2], *data;
2433     int nr_triplets, data_size, ret = 0, ret_l6;
2434     - int clock = snd_usb_clock_find_source(chip, fp->protocol,
2435     - fp->clock, false);
2436     + int clock = snd_usb_clock_find_source(chip, fp, false);
2437    
2438     if (clock < 0) {
2439     dev_err(&dev->dev,
2440     diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
2441     index 6cd4ff09c5ee..d2a050bb8341 100644
2442     --- a/sound/usb/mixer.c
2443     +++ b/sound/usb/mixer.c
2444     @@ -897,6 +897,15 @@ static int parse_term_proc_unit(struct mixer_build *state,
2445     return 0;
2446     }
2447    
2448     +static int parse_term_effect_unit(struct mixer_build *state,
2449     + struct usb_audio_term *term,
2450     + void *p1, int id)
2451     +{
2452     + term->type = UAC3_EFFECT_UNIT << 16; /* virtual type */
2453     + term->id = id;
2454     + return 0;
2455     +}
2456     +
2457     static int parse_term_uac2_clock_source(struct mixer_build *state,
2458     struct usb_audio_term *term,
2459     void *p1, int id)
2460     @@ -981,8 +990,7 @@ static int __check_input_term(struct mixer_build *state, int id,
2461     UAC3_PROCESSING_UNIT);
2462     case PTYPE(UAC_VERSION_2, UAC2_EFFECT_UNIT):
2463     case PTYPE(UAC_VERSION_3, UAC3_EFFECT_UNIT):
2464     - return parse_term_proc_unit(state, term, p1, id,
2465     - UAC3_EFFECT_UNIT);
2466     + return parse_term_effect_unit(state, term, p1, id);
2467     case PTYPE(UAC_VERSION_1, UAC1_EXTENSION_UNIT):
2468     case PTYPE(UAC_VERSION_2, UAC2_EXTENSION_UNIT_V2):
2469     case PTYPE(UAC_VERSION_3, UAC3_EXTENSION_UNIT):
2470     diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
2471     index 82184036437b..1ed25b1d2a6a 100644
2472     --- a/sound/usb/quirks.c
2473     +++ b/sound/usb/quirks.c
2474     @@ -1402,6 +1402,7 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
2475     case USB_ID(0x1395, 0x740a): /* Sennheiser DECT */
2476     case USB_ID(0x1901, 0x0191): /* GE B850V3 CP2114 audio interface */
2477     case USB_ID(0x21B4, 0x0081): /* AudioQuest DragonFly */
2478     + case USB_ID(0x2912, 0x30c8): /* Audioengine D1 */
2479     return true;
2480     }
2481    
2482     diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c
2483     index 2c41d47f6f83..90d23cc3c8d4 100644
2484     --- a/tools/perf/util/stat-shadow.c
2485     +++ b/tools/perf/util/stat-shadow.c
2486     @@ -18,7 +18,6 @@
2487     * AGGR_NONE: Use matching CPU
2488     * AGGR_THREAD: Not supported?
2489     */
2490     -static bool have_frontend_stalled;
2491    
2492     struct runtime_stat rt_stat;
2493     struct stats walltime_nsecs_stats;
2494     @@ -144,7 +143,6 @@ void runtime_stat__exit(struct runtime_stat *st)
2495    
2496     void perf_stat__init_shadow_stats(void)
2497     {
2498     - have_frontend_stalled = pmu_have_event("cpu", "stalled-cycles-frontend");
2499     runtime_stat__init(&rt_stat);
2500     }
2501    
2502     @@ -853,10 +851,6 @@ void perf_stat__print_shadow_stats(struct perf_stat_config *config,
2503     print_metric(config, ctxp, NULL, "%7.2f ",
2504     "stalled cycles per insn",
2505     ratio);
2506     - } else if (have_frontend_stalled) {
2507     - out->new_line(config, ctxp);
2508     - print_metric(config, ctxp, NULL, "%7.2f ",
2509     - "stalled cycles per insn", 0);
2510     }
2511     } else if (perf_evsel__match(evsel, HARDWARE, HW_BRANCH_MISSES)) {
2512     if (runtime_stat_n(st, STAT_BRANCHES, ctx, cpu) != 0)