Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.19/0152-4.19.53-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3431 - (hide annotations) (download)
Fri Aug 2 11:47:59 2019 UTC (4 years, 10 months ago) by niro
File size: 106293 byte(s)
-linux-4.19.53
1 niro 3431 diff --git a/Makefile b/Makefile
2     index c82ee02ad9be..bedcb121dc3d 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 4
8     PATCHLEVEL = 19
9     -SUBLEVEL = 52
10     +SUBLEVEL = 53
11     EXTRAVERSION =
12     NAME = "People's Front"
13    
14     diff --git a/arch/arm/kvm/hyp/Makefile b/arch/arm/kvm/hyp/Makefile
15     index d2b5ec9c4b92..ba88b1eca93c 100644
16     --- a/arch/arm/kvm/hyp/Makefile
17     +++ b/arch/arm/kvm/hyp/Makefile
18     @@ -11,6 +11,7 @@ CFLAGS_ARMV7VE :=$(call cc-option, -march=armv7ve)
19    
20     obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/vgic-v3-sr.o
21     obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/timer-sr.o
22     +obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/aarch32.o
23    
24     obj-$(CONFIG_KVM_ARM_HOST) += tlb.o
25     obj-$(CONFIG_KVM_ARM_HOST) += cp15-sr.o
26     diff --git a/arch/arm64/kvm/hyp/Makefile b/arch/arm64/kvm/hyp/Makefile
27     index 2fabc2dc1966..feef06fc7c5a 100644
28     --- a/arch/arm64/kvm/hyp/Makefile
29     +++ b/arch/arm64/kvm/hyp/Makefile
30     @@ -10,6 +10,7 @@ KVM=../../../../virt/kvm
31    
32     obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/vgic-v3-sr.o
33     obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/timer-sr.o
34     +obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/aarch32.o
35    
36     obj-$(CONFIG_KVM_ARM_HOST) += vgic-v2-cpuif-proxy.o
37     obj-$(CONFIG_KVM_ARM_HOST) += sysreg-sr.o
38     diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
39     index 8080c9f489c3..0fa558176fb1 100644
40     --- a/arch/arm64/mm/mmu.c
41     +++ b/arch/arm64/mm/mmu.c
42     @@ -921,13 +921,18 @@ void *__init fixmap_remap_fdt(phys_addr_t dt_phys)
43    
44     int __init arch_ioremap_pud_supported(void)
45     {
46     - /* only 4k granule supports level 1 block mappings */
47     - return IS_ENABLED(CONFIG_ARM64_4K_PAGES);
48     + /*
49     + * Only 4k granule supports level 1 block mappings.
50     + * SW table walks can't handle removal of intermediate entries.
51     + */
52     + return IS_ENABLED(CONFIG_ARM64_4K_PAGES) &&
53     + !IS_ENABLED(CONFIG_ARM64_PTDUMP_DEBUGFS);
54     }
55    
56     int __init arch_ioremap_pmd_supported(void)
57     {
58     - return 1;
59     + /* See arch_ioremap_pud_supported() */
60     + return !IS_ENABLED(CONFIG_ARM64_PTDUMP_DEBUGFS);
61     }
62    
63     int pud_set_huge(pud_t *pudp, phys_addr_t phys, pgprot_t prot)
64     diff --git a/arch/s390/include/asm/uaccess.h b/arch/s390/include/asm/uaccess.h
65     index ad6b91013a05..5332f628c1ed 100644
66     --- a/arch/s390/include/asm/uaccess.h
67     +++ b/arch/s390/include/asm/uaccess.h
68     @@ -56,8 +56,10 @@ raw_copy_from_user(void *to, const void __user *from, unsigned long n);
69     unsigned long __must_check
70     raw_copy_to_user(void __user *to, const void *from, unsigned long n);
71    
72     +#ifndef CONFIG_KASAN
73     #define INLINE_COPY_FROM_USER
74     #define INLINE_COPY_TO_USER
75     +#endif
76    
77     #ifdef CONFIG_HAVE_MARCH_Z10_FEATURES
78    
79     diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
80     index f538e3fac7ad..fc7de27960e7 100644
81     --- a/arch/s390/kvm/kvm-s390.c
82     +++ b/arch/s390/kvm/kvm-s390.c
83     @@ -4156,21 +4156,28 @@ void kvm_arch_commit_memory_region(struct kvm *kvm,
84     const struct kvm_memory_slot *new,
85     enum kvm_mr_change change)
86     {
87     - int rc;
88     -
89     - /* If the basics of the memslot do not change, we do not want
90     - * to update the gmap. Every update causes several unnecessary
91     - * segment translation exceptions. This is usually handled just
92     - * fine by the normal fault handler + gmap, but it will also
93     - * cause faults on the prefix page of running guest CPUs.
94     - */
95     - if (old->userspace_addr == mem->userspace_addr &&
96     - old->base_gfn * PAGE_SIZE == mem->guest_phys_addr &&
97     - old->npages * PAGE_SIZE == mem->memory_size)
98     - return;
99     + int rc = 0;
100    
101     - rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr,
102     - mem->guest_phys_addr, mem->memory_size);
103     + switch (change) {
104     + case KVM_MR_DELETE:
105     + rc = gmap_unmap_segment(kvm->arch.gmap, old->base_gfn * PAGE_SIZE,
106     + old->npages * PAGE_SIZE);
107     + break;
108     + case KVM_MR_MOVE:
109     + rc = gmap_unmap_segment(kvm->arch.gmap, old->base_gfn * PAGE_SIZE,
110     + old->npages * PAGE_SIZE);
111     + if (rc)
112     + break;
113     + /* FALLTHROUGH */
114     + case KVM_MR_CREATE:
115     + rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr,
116     + mem->guest_phys_addr, mem->memory_size);
117     + break;
118     + case KVM_MR_FLAGS_ONLY:
119     + break;
120     + default:
121     + WARN(1, "Unknown KVM MR CHANGE: %d\n", change);
122     + }
123     if (rc)
124     pr_warn("failed to commit memory region\n");
125     return;
126     diff --git a/arch/x86/kernel/cpu/intel_rdt_monitor.c b/arch/x86/kernel/cpu/intel_rdt_monitor.c
127     index b0f3aed76b75..3d4ec80a6bb9 100644
128     --- a/arch/x86/kernel/cpu/intel_rdt_monitor.c
129     +++ b/arch/x86/kernel/cpu/intel_rdt_monitor.c
130     @@ -371,6 +371,9 @@ static void update_mba_bw(struct rdtgroup *rgrp, struct rdt_domain *dom_mbm)
131     struct list_head *head;
132     struct rdtgroup *entry;
133    
134     + if (!is_mbm_local_enabled())
135     + return;
136     +
137     r_mba = &rdt_resources_all[RDT_RESOURCE_MBA];
138     closid = rgrp->closid;
139     rmid = rgrp->mon.rmid;
140     diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
141     index b43ddefd77f4..b7027e667604 100644
142     --- a/arch/x86/kernel/cpu/microcode/core.c
143     +++ b/arch/x86/kernel/cpu/microcode/core.c
144     @@ -873,7 +873,7 @@ int __init microcode_init(void)
145     goto out_ucode_group;
146    
147     register_syscore_ops(&mc_syscore_ops);
148     - cpuhp_setup_state_nocalls(CPUHP_AP_ONLINE_DYN, "x86/microcode:online",
149     + cpuhp_setup_state_nocalls(CPUHP_AP_MICROCODE_LOADER, "x86/microcode:online",
150     mc_cpu_online, mc_cpu_down_prep);
151    
152     pr_info("Microcode Update Driver: v%s.", DRIVER_VERSION);
153     diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c
154     index 58ead7db71a3..952aebd0a8a3 100644
155     --- a/arch/x86/kvm/pmu.c
156     +++ b/arch/x86/kvm/pmu.c
157     @@ -282,20 +282,16 @@ int kvm_pmu_rdpmc(struct kvm_vcpu *vcpu, unsigned idx, u64 *data)
158     {
159     bool fast_mode = idx & (1u << 31);
160     struct kvm_pmc *pmc;
161     - u64 ctr_val;
162     + u64 mask = fast_mode ? ~0u : ~0ull;
163    
164     if (is_vmware_backdoor_pmc(idx))
165     return kvm_pmu_rdpmc_vmware(vcpu, idx, data);
166    
167     - pmc = kvm_x86_ops->pmu_ops->msr_idx_to_pmc(vcpu, idx);
168     + pmc = kvm_x86_ops->pmu_ops->msr_idx_to_pmc(vcpu, idx, &mask);
169     if (!pmc)
170     return 1;
171    
172     - ctr_val = pmc_read_counter(pmc);
173     - if (fast_mode)
174     - ctr_val = (u32)ctr_val;
175     -
176     - *data = ctr_val;
177     + *data = pmc_read_counter(pmc) & mask;
178     return 0;
179     }
180    
181     diff --git a/arch/x86/kvm/pmu.h b/arch/x86/kvm/pmu.h
182     index ba8898e1a854..22dff661145a 100644
183     --- a/arch/x86/kvm/pmu.h
184     +++ b/arch/x86/kvm/pmu.h
185     @@ -25,7 +25,8 @@ struct kvm_pmu_ops {
186     unsigned (*find_fixed_event)(int idx);
187     bool (*pmc_is_enabled)(struct kvm_pmc *pmc);
188     struct kvm_pmc *(*pmc_idx_to_pmc)(struct kvm_pmu *pmu, int pmc_idx);
189     - struct kvm_pmc *(*msr_idx_to_pmc)(struct kvm_vcpu *vcpu, unsigned idx);
190     + struct kvm_pmc *(*msr_idx_to_pmc)(struct kvm_vcpu *vcpu, unsigned idx,
191     + u64 *mask);
192     int (*is_valid_msr_idx)(struct kvm_vcpu *vcpu, unsigned idx);
193     bool (*is_valid_msr)(struct kvm_vcpu *vcpu, u32 msr);
194     int (*get_msr)(struct kvm_vcpu *vcpu, u32 msr, u64 *data);
195     diff --git a/arch/x86/kvm/pmu_amd.c b/arch/x86/kvm/pmu_amd.c
196     index 1495a735b38e..41dff881e0f0 100644
197     --- a/arch/x86/kvm/pmu_amd.c
198     +++ b/arch/x86/kvm/pmu_amd.c
199     @@ -186,7 +186,7 @@ static int amd_is_valid_msr_idx(struct kvm_vcpu *vcpu, unsigned idx)
200     }
201    
202     /* idx is the ECX register of RDPMC instruction */
203     -static struct kvm_pmc *amd_msr_idx_to_pmc(struct kvm_vcpu *vcpu, unsigned idx)
204     +static struct kvm_pmc *amd_msr_idx_to_pmc(struct kvm_vcpu *vcpu, unsigned idx, u64 *mask)
205     {
206     struct kvm_pmu *pmu = vcpu_to_pmu(vcpu);
207     struct kvm_pmc *counters;
208     diff --git a/arch/x86/kvm/pmu_intel.c b/arch/x86/kvm/pmu_intel.c
209     index 5ab4a364348e..c3f103e2b08e 100644
210     --- a/arch/x86/kvm/pmu_intel.c
211     +++ b/arch/x86/kvm/pmu_intel.c
212     @@ -126,7 +126,7 @@ static int intel_is_valid_msr_idx(struct kvm_vcpu *vcpu, unsigned idx)
213     }
214    
215     static struct kvm_pmc *intel_msr_idx_to_pmc(struct kvm_vcpu *vcpu,
216     - unsigned idx)
217     + unsigned idx, u64 *mask)
218     {
219     struct kvm_pmu *pmu = vcpu_to_pmu(vcpu);
220     bool fixed = idx & (1u << 30);
221     @@ -138,6 +138,7 @@ static struct kvm_pmc *intel_msr_idx_to_pmc(struct kvm_vcpu *vcpu,
222     if (fixed && idx >= pmu->nr_arch_fixed_counters)
223     return NULL;
224     counters = fixed ? pmu->fixed_counters : pmu->gp_counters;
225     + *mask &= pmu->counter_bitmask[fixed ? KVM_PMC_FIXED : KVM_PMC_GP];
226    
227     return &counters[idx];
228     }
229     @@ -183,9 +184,13 @@ static int intel_pmu_get_msr(struct kvm_vcpu *vcpu, u32 msr, u64 *data)
230     *data = pmu->global_ovf_ctrl;
231     return 0;
232     default:
233     - if ((pmc = get_gp_pmc(pmu, msr, MSR_IA32_PERFCTR0)) ||
234     - (pmc = get_fixed_pmc(pmu, msr))) {
235     - *data = pmc_read_counter(pmc);
236     + if ((pmc = get_gp_pmc(pmu, msr, MSR_IA32_PERFCTR0))) {
237     + u64 val = pmc_read_counter(pmc);
238     + *data = val & pmu->counter_bitmask[KVM_PMC_GP];
239     + return 0;
240     + } else if ((pmc = get_fixed_pmc(pmu, msr))) {
241     + u64 val = pmc_read_counter(pmc);
242     + *data = val & pmu->counter_bitmask[KVM_PMC_FIXED];
243     return 0;
244     } else if ((pmc = get_gp_pmc(pmu, msr, MSR_P6_EVNTSEL0))) {
245     *data = pmc->eventsel;
246     @@ -235,11 +240,14 @@ static int intel_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
247     }
248     break;
249     default:
250     - if ((pmc = get_gp_pmc(pmu, msr, MSR_IA32_PERFCTR0)) ||
251     - (pmc = get_fixed_pmc(pmu, msr))) {
252     - if (!msr_info->host_initiated)
253     - data = (s64)(s32)data;
254     - pmc->counter += data - pmc_read_counter(pmc);
255     + if ((pmc = get_gp_pmc(pmu, msr, MSR_IA32_PERFCTR0))) {
256     + if (msr_info->host_initiated)
257     + pmc->counter = data;
258     + else
259     + pmc->counter = (s32)data;
260     + return 0;
261     + } else if ((pmc = get_fixed_pmc(pmu, msr))) {
262     + pmc->counter = data;
263     return 0;
264     } else if ((pmc = get_gp_pmc(pmu, msr, MSR_P6_EVNTSEL0))) {
265     if (data == pmc->eventsel)
266     diff --git a/arch/x86/mm/kasan_init_64.c b/arch/x86/mm/kasan_init_64.c
267     index e3e77527f8df..4bfd14d5da8e 100644
268     --- a/arch/x86/mm/kasan_init_64.c
269     +++ b/arch/x86/mm/kasan_init_64.c
270     @@ -198,7 +198,7 @@ static inline p4d_t *early_p4d_offset(pgd_t *pgd, unsigned long addr)
271     if (!pgtable_l5_enabled())
272     return (p4d_t *)pgd;
273    
274     - p4d = __pa_nodebug(pgd_val(*pgd)) & PTE_PFN_MASK;
275     + p4d = pgd_val(*pgd) & PTE_PFN_MASK;
276     p4d += __START_KERNEL_map - phys_base;
277     return (p4d_t *)p4d + p4d_index(addr);
278     }
279     diff --git a/arch/x86/mm/kaslr.c b/arch/x86/mm/kaslr.c
280     index 0988971069c9..bfe769209eae 100644
281     --- a/arch/x86/mm/kaslr.c
282     +++ b/arch/x86/mm/kaslr.c
283     @@ -51,7 +51,7 @@ static __initdata struct kaslr_memory_region {
284     } kaslr_regions[] = {
285     { &page_offset_base, 0 },
286     { &vmalloc_base, 0 },
287     - { &vmemmap_base, 1 },
288     + { &vmemmap_base, 0 },
289     };
290    
291     /* Get size in bytes used by the memory region */
292     @@ -77,6 +77,7 @@ void __init kernel_randomize_memory(void)
293     unsigned long rand, memory_tb;
294     struct rnd_state rand_state;
295     unsigned long remain_entropy;
296     + unsigned long vmemmap_size;
297    
298     vaddr_start = pgtable_l5_enabled() ? __PAGE_OFFSET_BASE_L5 : __PAGE_OFFSET_BASE_L4;
299     vaddr = vaddr_start;
300     @@ -108,6 +109,14 @@ void __init kernel_randomize_memory(void)
301     if (memory_tb < kaslr_regions[0].size_tb)
302     kaslr_regions[0].size_tb = memory_tb;
303    
304     + /*
305     + * Calculate the vmemmap region size in TBs, aligned to a TB
306     + * boundary.
307     + */
308     + vmemmap_size = (kaslr_regions[0].size_tb << (TB_SHIFT - PAGE_SHIFT)) *
309     + sizeof(struct page);
310     + kaslr_regions[2].size_tb = DIV_ROUND_UP(vmemmap_size, 1UL << TB_SHIFT);
311     +
312     /* Calculate entropy available between regions */
313     remain_entropy = vaddr_end - vaddr_start;
314     for (i = 0; i < ARRAY_SIZE(kaslr_regions); i++)
315     diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
316     index adf28788cab5..133fed8e4a8b 100644
317     --- a/drivers/ata/libata-core.c
318     +++ b/drivers/ata/libata-core.c
319     @@ -4476,9 +4476,12 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
320     { "ST3320[68]13AS", "SD1[5-9]", ATA_HORKAGE_NONCQ |
321     ATA_HORKAGE_FIRMWARE_WARN },
322    
323     - /* drives which fail FPDMA_AA activation (some may freeze afterwards) */
324     - { "ST1000LM024 HN-M101MBB", "2AR10001", ATA_HORKAGE_BROKEN_FPDMA_AA },
325     - { "ST1000LM024 HN-M101MBB", "2BA30001", ATA_HORKAGE_BROKEN_FPDMA_AA },
326     + /* drives which fail FPDMA_AA activation (some may freeze afterwards)
327     + the ST disks also have LPM issues */
328     + { "ST1000LM024 HN-M101MBB", "2AR10001", ATA_HORKAGE_BROKEN_FPDMA_AA |
329     + ATA_HORKAGE_NOLPM, },
330     + { "ST1000LM024 HN-M101MBB", "2BA30001", ATA_HORKAGE_BROKEN_FPDMA_AA |
331     + ATA_HORKAGE_NOLPM, },
332     { "VB0250EAVER", "HPG7", ATA_HORKAGE_BROKEN_FPDMA_AA },
333    
334     /* Blacklist entries taken from Silicon Image 3124/3132
335     diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
336     index 7c581f4c2b94..5965f6383ada 100644
337     --- a/drivers/gpu/drm/drm_edid.c
338     +++ b/drivers/gpu/drm/drm_edid.c
339     @@ -1580,6 +1580,50 @@ static void connector_bad_edid(struct drm_connector *connector,
340     }
341     }
342    
343     +/* Get override or firmware EDID */
344     +static struct edid *drm_get_override_edid(struct drm_connector *connector)
345     +{
346     + struct edid *override = NULL;
347     +
348     + if (connector->override_edid)
349     + override = drm_edid_duplicate(connector->edid_blob_ptr->data);
350     +
351     + if (!override)
352     + override = drm_load_edid_firmware(connector);
353     +
354     + return IS_ERR(override) ? NULL : override;
355     +}
356     +
357     +/**
358     + * drm_add_override_edid_modes - add modes from override/firmware EDID
359     + * @connector: connector we're probing
360     + *
361     + * Add modes from the override/firmware EDID, if available. Only to be used from
362     + * drm_helper_probe_single_connector_modes() as a fallback for when DDC probe
363     + * failed during drm_get_edid() and caused the override/firmware EDID to be
364     + * skipped.
365     + *
366     + * Return: The number of modes added or 0 if we couldn't find any.
367     + */
368     +int drm_add_override_edid_modes(struct drm_connector *connector)
369     +{
370     + struct edid *override;
371     + int num_modes = 0;
372     +
373     + override = drm_get_override_edid(connector);
374     + if (override) {
375     + drm_connector_update_edid_property(connector, override);
376     + num_modes = drm_add_edid_modes(connector, override);
377     + kfree(override);
378     +
379     + DRM_DEBUG_KMS("[CONNECTOR:%d:%s] adding %d modes via fallback override/firmware EDID\n",
380     + connector->base.id, connector->name, num_modes);
381     + }
382     +
383     + return num_modes;
384     +}
385     +EXPORT_SYMBOL(drm_add_override_edid_modes);
386     +
387     /**
388     * drm_do_get_edid - get EDID data using a custom EDID block read function
389     * @connector: connector we're probing
390     @@ -1607,15 +1651,10 @@ struct edid *drm_do_get_edid(struct drm_connector *connector,
391     {
392     int i, j = 0, valid_extensions = 0;
393     u8 *edid, *new;
394     - struct edid *override = NULL;
395     -
396     - if (connector->override_edid)
397     - override = drm_edid_duplicate(connector->edid_blob_ptr->data);
398     -
399     - if (!override)
400     - override = drm_load_edid_firmware(connector);
401     + struct edid *override;
402    
403     - if (!IS_ERR_OR_NULL(override))
404     + override = drm_get_override_edid(connector);
405     + if (override)
406     return override;
407    
408     if ((edid = kmalloc(EDID_LENGTH, GFP_KERNEL)) == NULL)
409     diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c
410     index a1bb157bfdfa..d18b7e27ef64 100644
411     --- a/drivers/gpu/drm/drm_probe_helper.c
412     +++ b/drivers/gpu/drm/drm_probe_helper.c
413     @@ -479,6 +479,13 @@ retry:
414    
415     count = (*connector_funcs->get_modes)(connector);
416    
417     + /*
418     + * Fallback for when DDC probe failed in drm_get_edid() and thus skipped
419     + * override/firmware EDID.
420     + */
421     + if (count == 0 && connector->status == connector_status_connected)
422     + count = drm_add_override_edid_modes(connector);
423     +
424     if (count == 0 && connector->status == connector_status_connected)
425     count = drm_add_modes_noedid(connector, 1024, 768);
426     count += drm_helper_probe_add_cmdline_mode(connector);
427     diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
428     index 812fe7b06f87..1817a5c0c80f 100644
429     --- a/drivers/gpu/drm/i915/intel_sdvo.c
430     +++ b/drivers/gpu/drm/i915/intel_sdvo.c
431     @@ -925,6 +925,13 @@ static bool intel_sdvo_set_colorimetry(struct intel_sdvo *intel_sdvo,
432     return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_COLORIMETRY, &mode, 1);
433     }
434    
435     +static bool intel_sdvo_set_audio_state(struct intel_sdvo *intel_sdvo,
436     + u8 audio_state)
437     +{
438     + return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_AUDIO_STAT,
439     + &audio_state, 1);
440     +}
441     +
442     #if 0
443     static void intel_sdvo_dump_hdmi_buf(struct intel_sdvo *intel_sdvo)
444     {
445     @@ -1371,11 +1378,6 @@ static void intel_sdvo_pre_enable(struct intel_encoder *intel_encoder,
446     else
447     sdvox |= SDVO_PIPE_SEL(crtc->pipe);
448    
449     - if (crtc_state->has_audio) {
450     - WARN_ON_ONCE(INTEL_GEN(dev_priv) < 4);
451     - sdvox |= SDVO_AUDIO_ENABLE;
452     - }
453     -
454     if (INTEL_GEN(dev_priv) >= 4) {
455     /* done in crtc_mode_set as the dpll_md reg must be written early */
456     } else if (IS_I945G(dev_priv) || IS_I945GM(dev_priv) ||
457     @@ -1515,8 +1517,13 @@ static void intel_sdvo_get_config(struct intel_encoder *encoder,
458     if (sdvox & HDMI_COLOR_RANGE_16_235)
459     pipe_config->limited_color_range = true;
460    
461     - if (sdvox & SDVO_AUDIO_ENABLE)
462     - pipe_config->has_audio = true;
463     + if (intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_AUDIO_STAT,
464     + &val, 1)) {
465     + u8 mask = SDVO_AUDIO_ELD_VALID | SDVO_AUDIO_PRESENCE_DETECT;
466     +
467     + if ((val & mask) == mask)
468     + pipe_config->has_audio = true;
469     + }
470    
471     if (intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_ENCODE,
472     &val, 1)) {
473     @@ -1529,6 +1536,32 @@ static void intel_sdvo_get_config(struct intel_encoder *encoder,
474     pipe_config->pixel_multiplier, encoder_pixel_multiplier);
475     }
476    
477     +static void intel_sdvo_disable_audio(struct intel_sdvo *intel_sdvo)
478     +{
479     + intel_sdvo_set_audio_state(intel_sdvo, 0);
480     +}
481     +
482     +static void intel_sdvo_enable_audio(struct intel_sdvo *intel_sdvo,
483     + const struct intel_crtc_state *crtc_state,
484     + const struct drm_connector_state *conn_state)
485     +{
486     + const struct drm_display_mode *adjusted_mode =
487     + &crtc_state->base.adjusted_mode;
488     + struct drm_connector *connector = conn_state->connector;
489     + u8 *eld = connector->eld;
490     +
491     + eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2;
492     +
493     + intel_sdvo_set_audio_state(intel_sdvo, 0);
494     +
495     + intel_sdvo_write_infoframe(intel_sdvo, SDVO_HBUF_INDEX_ELD,
496     + SDVO_HBUF_TX_DISABLED,
497     + eld, drm_eld_size(eld));
498     +
499     + intel_sdvo_set_audio_state(intel_sdvo, SDVO_AUDIO_ELD_VALID |
500     + SDVO_AUDIO_PRESENCE_DETECT);
501     +}
502     +
503     static void intel_disable_sdvo(struct intel_encoder *encoder,
504     const struct intel_crtc_state *old_crtc_state,
505     const struct drm_connector_state *conn_state)
506     @@ -1538,6 +1571,9 @@ static void intel_disable_sdvo(struct intel_encoder *encoder,
507     struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->base.crtc);
508     u32 temp;
509    
510     + if (old_crtc_state->has_audio)
511     + intel_sdvo_disable_audio(intel_sdvo);
512     +
513     intel_sdvo_set_active_outputs(intel_sdvo, 0);
514     if (0)
515     intel_sdvo_set_encoder_power_state(intel_sdvo,
516     @@ -1623,6 +1659,9 @@ static void intel_enable_sdvo(struct intel_encoder *encoder,
517     intel_sdvo_set_encoder_power_state(intel_sdvo,
518     DRM_MODE_DPMS_ON);
519     intel_sdvo_set_active_outputs(intel_sdvo, intel_sdvo->attached_output);
520     +
521     + if (pipe_config->has_audio)
522     + intel_sdvo_enable_audio(intel_sdvo, pipe_config, conn_state);
523     }
524    
525     static enum drm_mode_status
526     @@ -2514,7 +2553,6 @@ static bool
527     intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
528     {
529     struct drm_encoder *encoder = &intel_sdvo->base.base;
530     - struct drm_i915_private *dev_priv = to_i915(encoder->dev);
531     struct drm_connector *connector;
532     struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
533     struct intel_connector *intel_connector;
534     @@ -2551,9 +2589,7 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
535     encoder->encoder_type = DRM_MODE_ENCODER_TMDS;
536     connector->connector_type = DRM_MODE_CONNECTOR_DVID;
537    
538     - /* gen3 doesn't do the hdmi bits in the SDVO register */
539     - if (INTEL_GEN(dev_priv) >= 4 &&
540     - intel_sdvo_is_hdmi_connector(intel_sdvo, device)) {
541     + if (intel_sdvo_is_hdmi_connector(intel_sdvo, device)) {
542     connector->connector_type = DRM_MODE_CONNECTOR_HDMIA;
543     intel_sdvo->is_hdmi = true;
544     }
545     diff --git a/drivers/gpu/drm/i915/intel_sdvo_regs.h b/drivers/gpu/drm/i915/intel_sdvo_regs.h
546     index db0ed499268a..e9ba3b047f93 100644
547     --- a/drivers/gpu/drm/i915/intel_sdvo_regs.h
548     +++ b/drivers/gpu/drm/i915/intel_sdvo_regs.h
549     @@ -707,6 +707,9 @@ struct intel_sdvo_enhancements_arg {
550     #define SDVO_CMD_GET_AUDIO_ENCRYPT_PREFER 0x90
551     #define SDVO_CMD_SET_AUDIO_STAT 0x91
552     #define SDVO_CMD_GET_AUDIO_STAT 0x92
553     + #define SDVO_AUDIO_ELD_VALID (1 << 0)
554     + #define SDVO_AUDIO_PRESENCE_DETECT (1 << 1)
555     + #define SDVO_AUDIO_CP_READY (1 << 2)
556     #define SDVO_CMD_SET_HBUF_INDEX 0x93
557     #define SDVO_HBUF_INDEX_ELD 0
558     #define SDVO_HBUF_INDEX_AVI_IF 1
559     diff --git a/drivers/gpu/drm/nouveau/Kconfig b/drivers/gpu/drm/nouveau/Kconfig
560     index 4b75ad40dd80..00d9d77f583a 100644
561     --- a/drivers/gpu/drm/nouveau/Kconfig
562     +++ b/drivers/gpu/drm/nouveau/Kconfig
563     @@ -16,10 +16,21 @@ config DRM_NOUVEAU
564     select INPUT if ACPI && X86
565     select THERMAL if ACPI && X86
566     select ACPI_VIDEO if ACPI && X86
567     - select DRM_VM
568     help
569     Choose this option for open-source NVIDIA support.
570    
571     +config NOUVEAU_LEGACY_CTX_SUPPORT
572     + bool "Nouveau legacy context support"
573     + depends on DRM_NOUVEAU
574     + select DRM_VM
575     + default y
576     + help
577     + There was a version of the nouveau DDX that relied on legacy
578     + ctx ioctls not erroring out. But that was back in time a long
579     + ways, so offer a way to disable it now. For uapi compat with
580     + old nouveau ddx this should be on by default, but modern distros
581     + should consider turning it off.
582     +
583     config NOUVEAU_PLATFORM_DRIVER
584     bool "Nouveau (NVIDIA) SoC GPUs"
585     depends on DRM_NOUVEAU && ARCH_TEGRA
586     diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
587     index 74d2283f2c28..2b7a54cc3c9e 100644
588     --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
589     +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
590     @@ -1015,8 +1015,11 @@ nouveau_driver_fops = {
591     static struct drm_driver
592     driver_stub = {
593     .driver_features =
594     - DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_RENDER |
595     - DRIVER_KMS_LEGACY_CONTEXT,
596     + DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_RENDER
597     +#if defined(CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT)
598     + | DRIVER_KMS_LEGACY_CONTEXT
599     +#endif
600     + ,
601    
602     .load = nouveau_drm_load,
603     .unload = nouveau_drm_unload,
604     diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
605     index 8edb9f2a4269..e4b977cc8452 100644
606     --- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
607     +++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
608     @@ -169,7 +169,11 @@ nouveau_ttm_mmap(struct file *filp, struct vm_area_struct *vma)
609     struct nouveau_drm *drm = nouveau_drm(file_priv->minor->dev);
610    
611     if (unlikely(vma->vm_pgoff < DRM_FILE_PAGE_OFFSET))
612     +#if defined(CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT)
613     return drm_legacy_mmap(filp, vma);
614     +#else
615     + return -EINVAL;
616     +#endif
617    
618     return ttm_bo_mmap(filp, vma, &drm->ttm.bdev);
619     }
620     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
621     index c3e2022bda5d..3834aa71c9c4 100644
622     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
623     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
624     @@ -2493,7 +2493,8 @@ static int vmw_cmd_dx_set_shader(struct vmw_private *dev_priv,
625    
626     cmd = container_of(header, typeof(*cmd), header);
627    
628     - if (cmd->body.type >= SVGA3D_SHADERTYPE_DX10_MAX) {
629     + if (cmd->body.type >= SVGA3D_SHADERTYPE_DX10_MAX ||
630     + cmd->body.type < SVGA3D_SHADERTYPE_MIN) {
631     DRM_ERROR("Illegal shader type %u.\n",
632     (unsigned) cmd->body.type);
633     return -EINVAL;
634     @@ -2732,6 +2733,10 @@ static int vmw_cmd_dx_view_define(struct vmw_private *dev_priv,
635     if (view_type == vmw_view_max)
636     return -EINVAL;
637     cmd = container_of(header, typeof(*cmd), header);
638     + if (unlikely(cmd->sid == SVGA3D_INVALID_ID)) {
639     + DRM_ERROR("Invalid surface id.\n");
640     + return -EINVAL;
641     + }
642     ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface,
643     user_surface_converter,
644     &cmd->sid, &srf_node);
645     diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
646     index 2faf5421fdd0..184e49036e1d 100644
647     --- a/drivers/hid/hid-multitouch.c
648     +++ b/drivers/hid/hid-multitouch.c
649     @@ -641,6 +641,13 @@ static void mt_store_field(struct hid_device *hdev,
650     if (*target != DEFAULT_TRUE &&
651     *target != DEFAULT_FALSE &&
652     *target != DEFAULT_ZERO) {
653     + if (usage->contactid == DEFAULT_ZERO ||
654     + usage->x == DEFAULT_ZERO ||
655     + usage->y == DEFAULT_ZERO) {
656     + hid_dbg(hdev,
657     + "ignoring duplicate usage on incomplete");
658     + return;
659     + }
660     usage = mt_allocate_usage(hdev, application);
661     if (!usage)
662     return;
663     diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
664     index 5dd3a8245f0f..d7c3f4ac2c04 100644
665     --- a/drivers/hid/wacom_wac.c
666     +++ b/drivers/hid/wacom_wac.c
667     @@ -1234,13 +1234,13 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom)
668     /* Add back in missing bits of ID for non-USI pens */
669     wacom->id[0] |= (wacom->serial[0] >> 32) & 0xFFFFF;
670     }
671     - wacom->tool[0] = wacom_intuos_get_tool_type(wacom_intuos_id_mangle(wacom->id[0]));
672    
673     for (i = 0; i < pen_frames; i++) {
674     unsigned char *frame = &data[i*pen_frame_len + 1];
675     bool valid = frame[0] & 0x80;
676     bool prox = frame[0] & 0x40;
677     bool range = frame[0] & 0x20;
678     + bool invert = frame[0] & 0x10;
679    
680     if (!valid)
681     continue;
682     @@ -1249,9 +1249,24 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom)
683     wacom->shared->stylus_in_proximity = false;
684     wacom_exit_report(wacom);
685     input_sync(pen_input);
686     +
687     + wacom->tool[0] = 0;
688     + wacom->id[0] = 0;
689     + wacom->serial[0] = 0;
690     return;
691     }
692     +
693     if (range) {
694     + if (!wacom->tool[0]) { /* first in range */
695     + /* Going into range select tool */
696     + if (invert)
697     + wacom->tool[0] = BTN_TOOL_RUBBER;
698     + else if (wacom->id[0])
699     + wacom->tool[0] = wacom_intuos_get_tool_type(wacom->id[0]);
700     + else
701     + wacom->tool[0] = BTN_TOOL_PEN;
702     + }
703     +
704     input_report_abs(pen_input, ABS_X, get_unaligned_le16(&frame[1]));
705     input_report_abs(pen_input, ABS_Y, get_unaligned_le16(&frame[3]));
706    
707     @@ -1273,23 +1288,26 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom)
708     get_unaligned_le16(&frame[11]));
709     }
710     }
711     - input_report_abs(pen_input, ABS_PRESSURE, get_unaligned_le16(&frame[5]));
712     - if (wacom->features.type == INTUOSP2_BT) {
713     - input_report_abs(pen_input, ABS_DISTANCE,
714     - range ? frame[13] : wacom->features.distance_max);
715     - } else {
716     - input_report_abs(pen_input, ABS_DISTANCE,
717     - range ? frame[7] : wacom->features.distance_max);
718     - }
719    
720     - input_report_key(pen_input, BTN_TOUCH, frame[0] & 0x01);
721     - input_report_key(pen_input, BTN_STYLUS, frame[0] & 0x02);
722     - input_report_key(pen_input, BTN_STYLUS2, frame[0] & 0x04);
723     + if (wacom->tool[0]) {
724     + input_report_abs(pen_input, ABS_PRESSURE, get_unaligned_le16(&frame[5]));
725     + if (wacom->features.type == INTUOSP2_BT) {
726     + input_report_abs(pen_input, ABS_DISTANCE,
727     + range ? frame[13] : wacom->features.distance_max);
728     + } else {
729     + input_report_abs(pen_input, ABS_DISTANCE,
730     + range ? frame[7] : wacom->features.distance_max);
731     + }
732    
733     - input_report_key(pen_input, wacom->tool[0], prox);
734     - input_event(pen_input, EV_MSC, MSC_SERIAL, wacom->serial[0]);
735     - input_report_abs(pen_input, ABS_MISC,
736     - wacom_intuos_id_mangle(wacom->id[0])); /* report tool id */
737     + input_report_key(pen_input, BTN_TOUCH, frame[0] & 0x09);
738     + input_report_key(pen_input, BTN_STYLUS, frame[0] & 0x02);
739     + input_report_key(pen_input, BTN_STYLUS2, frame[0] & 0x04);
740     +
741     + input_report_key(pen_input, wacom->tool[0], prox);
742     + input_event(pen_input, EV_MSC, MSC_SERIAL, wacom->serial[0]);
743     + input_report_abs(pen_input, ABS_MISC,
744     + wacom_intuos_id_mangle(wacom->id[0])); /* report tool id */
745     + }
746    
747     wacom->shared->stylus_in_proximity = prox;
748    
749     @@ -1351,11 +1369,17 @@ static void wacom_intuos_pro2_bt_touch(struct wacom_wac *wacom)
750     if (wacom->num_contacts_left <= 0) {
751     wacom->num_contacts_left = 0;
752     wacom->shared->touch_down = wacom_wac_finger_count_touches(wacom);
753     + input_sync(touch_input);
754     }
755     }
756    
757     - input_report_switch(touch_input, SW_MUTE_DEVICE, !(data[281] >> 7));
758     - input_sync(touch_input);
759     + if (wacom->num_contacts_left == 0) {
760     + // Be careful that we don't accidentally call input_sync with
761     + // only a partial set of fingers of processed
762     + input_report_switch(touch_input, SW_MUTE_DEVICE, !(data[281] >> 7));
763     + input_sync(touch_input);
764     + }
765     +
766     }
767    
768     static void wacom_intuos_pro2_bt_pad(struct wacom_wac *wacom)
769     @@ -1363,7 +1387,7 @@ static void wacom_intuos_pro2_bt_pad(struct wacom_wac *wacom)
770     struct input_dev *pad_input = wacom->pad_input;
771     unsigned char *data = wacom->data;
772    
773     - int buttons = (data[282] << 1) | ((data[281] >> 6) & 0x01);
774     + int buttons = data[282] | ((data[281] & 0x40) << 2);
775     int ring = data[285] & 0x7F;
776     bool ringstatus = data[285] & 0x80;
777     bool prox = buttons || ringstatus;
778     @@ -3832,7 +3856,7 @@ static void wacom_24hd_update_leds(struct wacom *wacom, int mask, int group)
779     static bool wacom_is_led_toggled(struct wacom *wacom, int button_count,
780     int mask, int group)
781     {
782     - int button_per_group;
783     + int group_button;
784    
785     /*
786     * 21UX2 has LED group 1 to the left and LED group 0
787     @@ -3842,9 +3866,12 @@ static bool wacom_is_led_toggled(struct wacom *wacom, int button_count,
788     if (wacom->wacom_wac.features.type == WACOM_21UX2)
789     group = 1 - group;
790    
791     - button_per_group = button_count/wacom->led.count;
792     + group_button = group * (button_count/wacom->led.count);
793     +
794     + if (wacom->wacom_wac.features.type == INTUOSP2_BT)
795     + group_button = 8;
796    
797     - return mask & (1 << (group * button_per_group));
798     + return mask & (1 << group_button);
799     }
800    
801     static void wacom_update_led(struct wacom *wacom, int button_count, int mask,
802     diff --git a/drivers/i2c/busses/i2c-acorn.c b/drivers/i2c/busses/i2c-acorn.c
803     index f4a5ae69bf6a..fa3763e4b3ee 100644
804     --- a/drivers/i2c/busses/i2c-acorn.c
805     +++ b/drivers/i2c/busses/i2c-acorn.c
806     @@ -81,6 +81,7 @@ static struct i2c_algo_bit_data ioc_data = {
807    
808     static struct i2c_adapter ioc_ops = {
809     .nr = 0,
810     + .name = "ioc",
811     .algo_data = &ioc_data,
812     };
813    
814     diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
815     index ce119cb279c3..0c3b8f1c7225 100644
816     --- a/drivers/iommu/arm-smmu.c
817     +++ b/drivers/iommu/arm-smmu.c
818     @@ -56,6 +56,15 @@
819     #include "io-pgtable.h"
820     #include "arm-smmu-regs.h"
821    
822     +/*
823     + * Apparently, some Qualcomm arm64 platforms which appear to expose their SMMU
824     + * global register space are still, in fact, using a hypervisor to mediate it
825     + * by trapping and emulating register accesses. Sadly, some deployed versions
826     + * of said trapping code have bugs wherein they go horribly wrong for stores
827     + * using r31 (i.e. XZR/WZR) as the source register.
828     + */
829     +#define QCOM_DUMMY_VAL -1
830     +
831     #define ARM_MMU500_ACTLR_CPRE (1 << 1)
832    
833     #define ARM_MMU500_ACR_CACHE_LOCK (1 << 26)
834     @@ -398,7 +407,7 @@ static void __arm_smmu_tlb_sync(struct arm_smmu_device *smmu,
835     {
836     unsigned int spin_cnt, delay;
837    
838     - writel_relaxed(0, sync);
839     + writel_relaxed(QCOM_DUMMY_VAL, sync);
840     for (delay = 1; delay < TLB_LOOP_TIMEOUT; delay *= 2) {
841     for (spin_cnt = TLB_SPIN_COUNT; spin_cnt > 0; spin_cnt--) {
842     if (!(readl_relaxed(status) & sTLBGSTATUS_GSACTIVE))
843     @@ -1637,8 +1646,8 @@ static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
844     }
845    
846     /* Invalidate the TLB, just in case */
847     - writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLH);
848     - writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLNSNH);
849     + writel_relaxed(QCOM_DUMMY_VAL, gr0_base + ARM_SMMU_GR0_TLBIALLH);
850     + writel_relaxed(QCOM_DUMMY_VAL, gr0_base + ARM_SMMU_GR0_TLBIALLNSNH);
851    
852     reg = readl_relaxed(ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
853    
854     diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c
855     index 8f07fa6e1739..268f1b685084 100644
856     --- a/drivers/md/bcache/bset.c
857     +++ b/drivers/md/bcache/bset.c
858     @@ -887,12 +887,22 @@ unsigned int bch_btree_insert_key(struct btree_keys *b, struct bkey *k,
859     struct bset *i = bset_tree_last(b)->data;
860     struct bkey *m, *prev = NULL;
861     struct btree_iter iter;
862     + struct bkey preceding_key_on_stack = ZERO_KEY;
863     + struct bkey *preceding_key_p = &preceding_key_on_stack;
864    
865     BUG_ON(b->ops->is_extents && !KEY_SIZE(k));
866    
867     - m = bch_btree_iter_init(b, &iter, b->ops->is_extents
868     - ? PRECEDING_KEY(&START_KEY(k))
869     - : PRECEDING_KEY(k));
870     + /*
871     + * If k has preceding key, preceding_key_p will be set to address
872     + * of k's preceding key; otherwise preceding_key_p will be set
873     + * to NULL inside preceding_key().
874     + */
875     + if (b->ops->is_extents)
876     + preceding_key(&START_KEY(k), &preceding_key_p);
877     + else
878     + preceding_key(k, &preceding_key_p);
879     +
880     + m = bch_btree_iter_init(b, &iter, preceding_key_p);
881    
882     if (b->ops->insert_fixup(b, k, &iter, replace_key))
883     return status;
884     diff --git a/drivers/md/bcache/bset.h b/drivers/md/bcache/bset.h
885     index bac76aabca6d..c71365e7c1fa 100644
886     --- a/drivers/md/bcache/bset.h
887     +++ b/drivers/md/bcache/bset.h
888     @@ -434,20 +434,26 @@ static inline bool bch_cut_back(const struct bkey *where, struct bkey *k)
889     return __bch_cut_back(where, k);
890     }
891    
892     -#define PRECEDING_KEY(_k) \
893     -({ \
894     - struct bkey *_ret = NULL; \
895     - \
896     - if (KEY_INODE(_k) || KEY_OFFSET(_k)) { \
897     - _ret = &KEY(KEY_INODE(_k), KEY_OFFSET(_k), 0); \
898     - \
899     - if (!_ret->low) \
900     - _ret->high--; \
901     - _ret->low--; \
902     - } \
903     - \
904     - _ret; \
905     -})
906     +/*
907     + * Pointer '*preceding_key_p' points to a memory object to store preceding
908     + * key of k. If the preceding key does not exist, set '*preceding_key_p' to
909     + * NULL. So the caller of preceding_key() needs to take care of memory
910     + * which '*preceding_key_p' pointed to before calling preceding_key().
911     + * Currently the only caller of preceding_key() is bch_btree_insert_key(),
912     + * and it points to an on-stack variable, so the memory release is handled
913     + * by stackframe itself.
914     + */
915     +static inline void preceding_key(struct bkey *k, struct bkey **preceding_key_p)
916     +{
917     + if (KEY_INODE(k) || KEY_OFFSET(k)) {
918     + (**preceding_key_p) = KEY(KEY_INODE(k), KEY_OFFSET(k), 0);
919     + if (!(*preceding_key_p)->low)
920     + (*preceding_key_p)->high--;
921     + (*preceding_key_p)->low--;
922     + } else {
923     + (*preceding_key_p) = NULL;
924     + }
925     +}
926    
927     static inline bool bch_ptr_invalid(struct btree_keys *b, const struct bkey *k)
928     {
929     diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
930     index d9481640b3e1..541454b4f479 100644
931     --- a/drivers/md/bcache/sysfs.c
932     +++ b/drivers/md/bcache/sysfs.c
933     @@ -393,8 +393,13 @@ STORE(bch_cached_dev)
934     if (attr == &sysfs_writeback_running)
935     bch_writeback_queue(dc);
936    
937     + /*
938     + * Only set BCACHE_DEV_WB_RUNNING when cached device attached to
939     + * a cache set, otherwise it doesn't make sense.
940     + */
941     if (attr == &sysfs_writeback_percent)
942     - if (!test_and_set_bit(BCACHE_DEV_WB_RUNNING, &dc->disk.flags))
943     + if ((dc->disk.c != NULL) &&
944     + (!test_and_set_bit(BCACHE_DEV_WB_RUNNING, &dc->disk.flags)))
945     schedule_delayed_work(&dc->writeback_rate_update,
946     dc->writeback_rate_update_seconds * HZ);
947    
948     diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c
949     index 6193270e7b3d..eb4d90b7d99e 100644
950     --- a/drivers/misc/kgdbts.c
951     +++ b/drivers/misc/kgdbts.c
952     @@ -1139,7 +1139,7 @@ static void kgdbts_put_char(u8 chr)
953     static int param_set_kgdbts_var(const char *kmessage,
954     const struct kernel_param *kp)
955     {
956     - int len = strlen(kmessage);
957     + size_t len = strlen(kmessage);
958    
959     if (len >= MAX_CONFIG_LEN) {
960     printk(KERN_ERR "kgdbts: config string too long\n");
961     @@ -1159,7 +1159,7 @@ static int param_set_kgdbts_var(const char *kmessage,
962    
963     strcpy(config, kmessage);
964     /* Chop out \n char as a result of echo */
965     - if (config[len - 1] == '\n')
966     + if (len && config[len - 1] == '\n')
967     config[len - 1] = '\0';
968    
969     /* Go and configure with the new params. */
970     diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c
971     index 3d8a70d3ea9b..3d71f1716390 100644
972     --- a/drivers/net/usb/ipheth.c
973     +++ b/drivers/net/usb/ipheth.c
974     @@ -437,17 +437,18 @@ static int ipheth_tx(struct sk_buff *skb, struct net_device *net)
975     dev);
976     dev->tx_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
977    
978     + netif_stop_queue(net);
979     retval = usb_submit_urb(dev->tx_urb, GFP_ATOMIC);
980     if (retval) {
981     dev_err(&dev->intf->dev, "%s: usb_submit_urb: %d\n",
982     __func__, retval);
983     dev->net->stats.tx_errors++;
984     dev_kfree_skb_any(skb);
985     + netif_wake_queue(net);
986     } else {
987     dev->net->stats.tx_packets++;
988     dev->net->stats.tx_bytes += skb->len;
989     dev_consume_skb_any(skb);
990     - netif_stop_queue(net);
991     }
992    
993     return NETDEV_TX_OK;
994     diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
995     index 9148015ed803..a3132a9eb91c 100644
996     --- a/drivers/nvdimm/bus.c
997     +++ b/drivers/nvdimm/bus.c
998     @@ -612,7 +612,7 @@ static struct attribute *nd_device_attributes[] = {
999     NULL,
1000     };
1001    
1002     -/**
1003     +/*
1004     * nd_device_attribute_group - generic attributes for all devices on an nd bus
1005     */
1006     struct attribute_group nd_device_attribute_group = {
1007     @@ -641,7 +641,7 @@ static umode_t nd_numa_attr_visible(struct kobject *kobj, struct attribute *a,
1008     return a->mode;
1009     }
1010    
1011     -/**
1012     +/*
1013     * nd_numa_attribute_group - NUMA attributes for all devices on an nd bus
1014     */
1015     struct attribute_group nd_numa_attribute_group = {
1016     diff --git a/drivers/nvdimm/label.c b/drivers/nvdimm/label.c
1017     index 452ad379ed70..9f1b7e3153f9 100644
1018     --- a/drivers/nvdimm/label.c
1019     +++ b/drivers/nvdimm/label.c
1020     @@ -25,6 +25,8 @@ static guid_t nvdimm_btt2_guid;
1021     static guid_t nvdimm_pfn_guid;
1022     static guid_t nvdimm_dax_guid;
1023    
1024     +static const char NSINDEX_SIGNATURE[] = "NAMESPACE_INDEX\0";
1025     +
1026     static u32 best_seq(u32 a, u32 b)
1027     {
1028     a &= NSINDEX_SEQ_MASK;
1029     diff --git a/drivers/nvdimm/label.h b/drivers/nvdimm/label.h
1030     index 18bbe183b3a9..52f9fcada00a 100644
1031     --- a/drivers/nvdimm/label.h
1032     +++ b/drivers/nvdimm/label.h
1033     @@ -38,8 +38,6 @@ enum {
1034     ND_NSINDEX_INIT = 0x1,
1035     };
1036    
1037     -static const char NSINDEX_SIGNATURE[] = "NAMESPACE_INDEX\0";
1038     -
1039     /**
1040     * struct nd_namespace_index - label set superblock
1041     * @sig: NAMESPACE_INDEX\0
1042     diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
1043     index abfb46378cc1..a867a139bb35 100644
1044     --- a/drivers/nvme/host/core.c
1045     +++ b/drivers/nvme/host/core.c
1046     @@ -1277,9 +1277,14 @@ static struct nvme_ns *nvme_get_ns_from_disk(struct gendisk *disk,
1047     {
1048     #ifdef CONFIG_NVME_MULTIPATH
1049     if (disk->fops == &nvme_ns_head_ops) {
1050     + struct nvme_ns *ns;
1051     +
1052     *head = disk->private_data;
1053     *srcu_idx = srcu_read_lock(&(*head)->srcu);
1054     - return nvme_find_path(*head);
1055     + ns = nvme_find_path(*head);
1056     + if (!ns)
1057     + srcu_read_unlock(&(*head)->srcu, *srcu_idx);
1058     + return ns;
1059     }
1060     #endif
1061     *head = NULL;
1062     @@ -1293,42 +1298,56 @@ static void nvme_put_ns_from_disk(struct nvme_ns_head *head, int idx)
1063     srcu_read_unlock(&head->srcu, idx);
1064     }
1065    
1066     -static int nvme_ns_ioctl(struct nvme_ns *ns, unsigned cmd, unsigned long arg)
1067     +static int nvme_ioctl(struct block_device *bdev, fmode_t mode,
1068     + unsigned int cmd, unsigned long arg)
1069     {
1070     + struct nvme_ns_head *head = NULL;
1071     + void __user *argp = (void __user *)arg;
1072     + struct nvme_ns *ns;
1073     + int srcu_idx, ret;
1074     +
1075     + ns = nvme_get_ns_from_disk(bdev->bd_disk, &head, &srcu_idx);
1076     + if (unlikely(!ns))
1077     + return -EWOULDBLOCK;
1078     +
1079     + /*
1080     + * Handle ioctls that apply to the controller instead of the namespace
1081     + * seperately and drop the ns SRCU reference early. This avoids a
1082     + * deadlock when deleting namespaces using the passthrough interface.
1083     + */
1084     + if (cmd == NVME_IOCTL_ADMIN_CMD || is_sed_ioctl(cmd)) {
1085     + struct nvme_ctrl *ctrl = ns->ctrl;
1086     +
1087     + nvme_get_ctrl(ns->ctrl);
1088     + nvme_put_ns_from_disk(head, srcu_idx);
1089     +
1090     + if (cmd == NVME_IOCTL_ADMIN_CMD)
1091     + ret = nvme_user_cmd(ctrl, NULL, argp);
1092     + else
1093     + ret = sed_ioctl(ctrl->opal_dev, cmd, argp);
1094     +
1095     + nvme_put_ctrl(ctrl);
1096     + return ret;
1097     + }
1098     +
1099     switch (cmd) {
1100     case NVME_IOCTL_ID:
1101     force_successful_syscall_return();
1102     - return ns->head->ns_id;
1103     - case NVME_IOCTL_ADMIN_CMD:
1104     - return nvme_user_cmd(ns->ctrl, NULL, (void __user *)arg);
1105     + ret = ns->head->ns_id;
1106     + break;
1107     case NVME_IOCTL_IO_CMD:
1108     - return nvme_user_cmd(ns->ctrl, ns, (void __user *)arg);
1109     + ret = nvme_user_cmd(ns->ctrl, ns, argp);
1110     + break;
1111     case NVME_IOCTL_SUBMIT_IO:
1112     - return nvme_submit_io(ns, (void __user *)arg);
1113     + ret = nvme_submit_io(ns, argp);
1114     + break;
1115     default:
1116     -#ifdef CONFIG_NVM
1117     if (ns->ndev)
1118     - return nvme_nvm_ioctl(ns, cmd, arg);
1119     -#endif
1120     - if (is_sed_ioctl(cmd))
1121     - return sed_ioctl(ns->ctrl->opal_dev, cmd,
1122     - (void __user *) arg);
1123     - return -ENOTTY;
1124     + ret = nvme_nvm_ioctl(ns, cmd, arg);
1125     + else
1126     + ret = -ENOTTY;
1127     }
1128     -}
1129     -
1130     -static int nvme_ioctl(struct block_device *bdev, fmode_t mode,
1131     - unsigned int cmd, unsigned long arg)
1132     -{
1133     - struct nvme_ns_head *head = NULL;
1134     - struct nvme_ns *ns;
1135     - int srcu_idx, ret;
1136    
1137     - ns = nvme_get_ns_from_disk(bdev->bd_disk, &head, &srcu_idx);
1138     - if (unlikely(!ns))
1139     - ret = -EWOULDBLOCK;
1140     - else
1141     - ret = nvme_ns_ioctl(ns, cmd, arg);
1142     nvme_put_ns_from_disk(head, srcu_idx);
1143     return ret;
1144     }
1145     @@ -3506,6 +3525,7 @@ EXPORT_SYMBOL_GPL(nvme_start_ctrl);
1146    
1147     void nvme_uninit_ctrl(struct nvme_ctrl *ctrl)
1148     {
1149     + dev_pm_qos_hide_latency_tolerance(ctrl->device);
1150     cdev_device_del(&ctrl->cdev, ctrl->device);
1151     }
1152     EXPORT_SYMBOL_GPL(nvme_uninit_ctrl);
1153     diff --git a/drivers/platform/x86/pmc_atom.c b/drivers/platform/x86/pmc_atom.c
1154     index c7039f52ad51..b1d804376237 100644
1155     --- a/drivers/platform/x86/pmc_atom.c
1156     +++ b/drivers/platform/x86/pmc_atom.c
1157     @@ -398,12 +398,45 @@ static int pmc_dbgfs_register(struct pmc_dev *pmc)
1158     */
1159     static const struct dmi_system_id critclk_systems[] = {
1160     {
1161     + /* pmc_plt_clk0 is used for an external HSIC USB HUB */
1162     .ident = "MPL CEC1x",
1163     .matches = {
1164     DMI_MATCH(DMI_SYS_VENDOR, "MPL AG"),
1165     DMI_MATCH(DMI_PRODUCT_NAME, "CEC10 Family"),
1166     },
1167     },
1168     + {
1169     + /* pmc_plt_clk0 - 3 are used for the 4 ethernet controllers */
1170     + .ident = "Lex 3I380D",
1171     + .matches = {
1172     + DMI_MATCH(DMI_SYS_VENDOR, "Lex BayTrail"),
1173     + DMI_MATCH(DMI_PRODUCT_NAME, "3I380D"),
1174     + },
1175     + },
1176     + {
1177     + /* pmc_plt_clk* - are used for ethernet controllers */
1178     + .ident = "Beckhoff CB3163",
1179     + .matches = {
1180     + DMI_MATCH(DMI_SYS_VENDOR, "Beckhoff Automation"),
1181     + DMI_MATCH(DMI_BOARD_NAME, "CB3163"),
1182     + },
1183     + },
1184     + {
1185     + /* pmc_plt_clk* - are used for ethernet controllers */
1186     + .ident = "Beckhoff CB6263",
1187     + .matches = {
1188     + DMI_MATCH(DMI_SYS_VENDOR, "Beckhoff Automation"),
1189     + DMI_MATCH(DMI_BOARD_NAME, "CB6263"),
1190     + },
1191     + },
1192     + {
1193     + /* pmc_plt_clk* - are used for ethernet controllers */
1194     + .ident = "Beckhoff CB6363",
1195     + .matches = {
1196     + DMI_MATCH(DMI_SYS_VENDOR, "Beckhoff Automation"),
1197     + DMI_MATCH(DMI_BOARD_NAME, "CB6363"),
1198     + },
1199     + },
1200     { /*sentinel*/ }
1201     };
1202    
1203     diff --git a/drivers/ras/cec.c b/drivers/ras/cec.c
1204     index 2d9ec378a8bc..f85d6b7a1984 100644
1205     --- a/drivers/ras/cec.c
1206     +++ b/drivers/ras/cec.c
1207     @@ -2,6 +2,7 @@
1208     #include <linux/mm.h>
1209     #include <linux/gfp.h>
1210     #include <linux/kernel.h>
1211     +#include <linux/workqueue.h>
1212    
1213     #include <asm/mce.h>
1214    
1215     @@ -123,16 +124,12 @@ static u64 dfs_pfn;
1216     /* Amount of errors after which we offline */
1217     static unsigned int count_threshold = COUNT_MASK;
1218    
1219     -/*
1220     - * The timer "decays" element count each timer_interval which is 24hrs by
1221     - * default.
1222     - */
1223     -
1224     -#define CEC_TIMER_DEFAULT_INTERVAL 24 * 60 * 60 /* 24 hrs */
1225     -#define CEC_TIMER_MIN_INTERVAL 1 * 60 * 60 /* 1h */
1226     -#define CEC_TIMER_MAX_INTERVAL 30 * 24 * 60 * 60 /* one month */
1227     -static struct timer_list cec_timer;
1228     -static u64 timer_interval = CEC_TIMER_DEFAULT_INTERVAL;
1229     +/* Each element "decays" each decay_interval which is 24hrs by default. */
1230     +#define CEC_DECAY_DEFAULT_INTERVAL 24 * 60 * 60 /* 24 hrs */
1231     +#define CEC_DECAY_MIN_INTERVAL 1 * 60 * 60 /* 1h */
1232     +#define CEC_DECAY_MAX_INTERVAL 30 * 24 * 60 * 60 /* one month */
1233     +static struct delayed_work cec_work;
1234     +static u64 decay_interval = CEC_DECAY_DEFAULT_INTERVAL;
1235    
1236     /*
1237     * Decrement decay value. We're using DECAY_BITS bits to denote decay of an
1238     @@ -160,20 +157,21 @@ static void do_spring_cleaning(struct ce_array *ca)
1239     /*
1240     * @interval in seconds
1241     */
1242     -static void cec_mod_timer(struct timer_list *t, unsigned long interval)
1243     +static void cec_mod_work(unsigned long interval)
1244     {
1245     unsigned long iv;
1246    
1247     - iv = interval * HZ + jiffies;
1248     -
1249     - mod_timer(t, round_jiffies(iv));
1250     + iv = interval * HZ;
1251     + mod_delayed_work(system_wq, &cec_work, round_jiffies(iv));
1252     }
1253    
1254     -static void cec_timer_fn(struct timer_list *unused)
1255     +static void cec_work_fn(struct work_struct *work)
1256     {
1257     + mutex_lock(&ce_mutex);
1258     do_spring_cleaning(&ce_arr);
1259     + mutex_unlock(&ce_mutex);
1260    
1261     - cec_mod_timer(&cec_timer, timer_interval);
1262     + cec_mod_work(decay_interval);
1263     }
1264    
1265     /*
1266     @@ -183,32 +181,38 @@ static void cec_timer_fn(struct timer_list *unused)
1267     */
1268     static int __find_elem(struct ce_array *ca, u64 pfn, unsigned int *to)
1269     {
1270     + int min = 0, max = ca->n - 1;
1271     u64 this_pfn;
1272     - int min = 0, max = ca->n;
1273    
1274     - while (min < max) {
1275     - int tmp = (max + min) >> 1;
1276     + while (min <= max) {
1277     + int i = (min + max) >> 1;
1278    
1279     - this_pfn = PFN(ca->array[tmp]);
1280     + this_pfn = PFN(ca->array[i]);
1281    
1282     if (this_pfn < pfn)
1283     - min = tmp + 1;
1284     + min = i + 1;
1285     else if (this_pfn > pfn)
1286     - max = tmp;
1287     - else {
1288     - min = tmp;
1289     - break;
1290     + max = i - 1;
1291     + else if (this_pfn == pfn) {
1292     + if (to)
1293     + *to = i;
1294     +
1295     + return i;
1296     }
1297     }
1298    
1299     + /*
1300     + * When the loop terminates without finding @pfn, min has the index of
1301     + * the element slot where the new @pfn should be inserted. The loop
1302     + * terminates when min > max, which means the min index points to the
1303     + * bigger element while the max index to the smaller element, in-between
1304     + * which the new @pfn belongs to.
1305     + *
1306     + * For more details, see exercise 1, Section 6.2.1 in TAOCP, vol. 3.
1307     + */
1308     if (to)
1309     *to = min;
1310    
1311     - this_pfn = PFN(ca->array[min]);
1312     -
1313     - if (this_pfn == pfn)
1314     - return min;
1315     -
1316     return -ENOKEY;
1317     }
1318    
1319     @@ -374,15 +378,15 @@ static int decay_interval_set(void *data, u64 val)
1320     {
1321     *(u64 *)data = val;
1322    
1323     - if (val < CEC_TIMER_MIN_INTERVAL)
1324     + if (val < CEC_DECAY_MIN_INTERVAL)
1325     return -EINVAL;
1326    
1327     - if (val > CEC_TIMER_MAX_INTERVAL)
1328     + if (val > CEC_DECAY_MAX_INTERVAL)
1329     return -EINVAL;
1330    
1331     - timer_interval = val;
1332     + decay_interval = val;
1333    
1334     - cec_mod_timer(&cec_timer, timer_interval);
1335     + cec_mod_work(decay_interval);
1336     return 0;
1337     }
1338     DEFINE_DEBUGFS_ATTRIBUTE(decay_interval_ops, u64_get, decay_interval_set, "%lld\n");
1339     @@ -426,7 +430,7 @@ static int array_dump(struct seq_file *m, void *v)
1340    
1341     seq_printf(m, "Flags: 0x%x\n", ca->flags);
1342    
1343     - seq_printf(m, "Timer interval: %lld seconds\n", timer_interval);
1344     + seq_printf(m, "Decay interval: %lld seconds\n", decay_interval);
1345     seq_printf(m, "Decays: %lld\n", ca->decays_done);
1346    
1347     seq_printf(m, "Action threshold: %d\n", count_threshold);
1348     @@ -472,7 +476,7 @@ static int __init create_debugfs_nodes(void)
1349     }
1350    
1351     decay = debugfs_create_file("decay_interval", S_IRUSR | S_IWUSR, d,
1352     - &timer_interval, &decay_interval_ops);
1353     + &decay_interval, &decay_interval_ops);
1354     if (!decay) {
1355     pr_warn("Error creating decay_interval debugfs node!\n");
1356     goto err;
1357     @@ -508,8 +512,8 @@ void __init cec_init(void)
1358     if (create_debugfs_nodes())
1359     return;
1360    
1361     - timer_setup(&cec_timer, cec_timer_fn, 0);
1362     - cec_mod_timer(&cec_timer, CEC_TIMER_DEFAULT_INTERVAL);
1363     + INIT_DELAYED_WORK(&cec_work, cec_work_fn);
1364     + schedule_delayed_work(&cec_work, CEC_DECAY_DEFAULT_INTERVAL);
1365    
1366     pr_info("Correctable Errors collector initialized.\n");
1367     }
1368     diff --git a/drivers/rtc/rtc-pcf8523.c b/drivers/rtc/rtc-pcf8523.c
1369     index 453615f8ac9a..3fcd2cbafc84 100644
1370     --- a/drivers/rtc/rtc-pcf8523.c
1371     +++ b/drivers/rtc/rtc-pcf8523.c
1372     @@ -85,6 +85,18 @@ static int pcf8523_write(struct i2c_client *client, u8 reg, u8 value)
1373     return 0;
1374     }
1375    
1376     +static int pcf8523_voltage_low(struct i2c_client *client)
1377     +{
1378     + u8 value;
1379     + int err;
1380     +
1381     + err = pcf8523_read(client, REG_CONTROL3, &value);
1382     + if (err < 0)
1383     + return err;
1384     +
1385     + return !!(value & REG_CONTROL3_BLF);
1386     +}
1387     +
1388     static int pcf8523_select_capacitance(struct i2c_client *client, bool high)
1389     {
1390     u8 value;
1391     @@ -167,6 +179,14 @@ static int pcf8523_rtc_read_time(struct device *dev, struct rtc_time *tm)
1392     struct i2c_msg msgs[2];
1393     int err;
1394    
1395     + err = pcf8523_voltage_low(client);
1396     + if (err < 0) {
1397     + return err;
1398     + } else if (err > 0) {
1399     + dev_err(dev, "low voltage detected, time is unreliable\n");
1400     + return -EINVAL;
1401     + }
1402     +
1403     msgs[0].addr = client->addr;
1404     msgs[0].flags = 0;
1405     msgs[0].len = 1;
1406     @@ -251,17 +271,13 @@ static int pcf8523_rtc_ioctl(struct device *dev, unsigned int cmd,
1407     unsigned long arg)
1408     {
1409     struct i2c_client *client = to_i2c_client(dev);
1410     - u8 value;
1411     - int ret = 0, err;
1412     + int ret;
1413    
1414     switch (cmd) {
1415     case RTC_VL_READ:
1416     - err = pcf8523_read(client, REG_CONTROL3, &value);
1417     - if (err < 0)
1418     - return err;
1419     -
1420     - if (value & REG_CONTROL3_BLF)
1421     - ret = 1;
1422     + ret = pcf8523_voltage_low(client);
1423     + if (ret < 0)
1424     + return ret;
1425    
1426     if (copy_to_user((void __user *)arg, &ret, sizeof(int)))
1427     return -EFAULT;
1428     diff --git a/drivers/scsi/bnx2fc/bnx2fc_hwi.c b/drivers/scsi/bnx2fc/bnx2fc_hwi.c
1429     index e8ae4d671d23..097305949a95 100644
1430     --- a/drivers/scsi/bnx2fc/bnx2fc_hwi.c
1431     +++ b/drivers/scsi/bnx2fc/bnx2fc_hwi.c
1432     @@ -830,7 +830,7 @@ ret_err_rqe:
1433     ((u64)err_entry->data.err_warn_bitmap_hi << 32) |
1434     (u64)err_entry->data.err_warn_bitmap_lo;
1435     for (i = 0; i < BNX2FC_NUM_ERR_BITS; i++) {
1436     - if (err_warn_bit_map & (u64) (1 << i)) {
1437     + if (err_warn_bit_map & ((u64)1 << i)) {
1438     err_warn = i;
1439     break;
1440     }
1441     diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
1442     index cb19b12e7211..55cd96e2469c 100644
1443     --- a/drivers/scsi/lpfc/lpfc_attr.c
1444     +++ b/drivers/scsi/lpfc/lpfc_attr.c
1445     @@ -341,7 +341,7 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,
1446     phba->sli4_hba.scsi_xri_max,
1447     lpfc_sli4_get_els_iocb_cnt(phba));
1448     if (strlcat(buf, tmp, PAGE_SIZE) >= PAGE_SIZE)
1449     - goto buffer_done;
1450     + goto rcu_unlock_buf_done;
1451    
1452     /* Port state is only one of two values for now. */
1453     if (localport->port_id)
1454     @@ -357,7 +357,7 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,
1455     wwn_to_u64(vport->fc_nodename.u.wwn),
1456     localport->port_id, statep);
1457     if (strlcat(buf, tmp, PAGE_SIZE) >= PAGE_SIZE)
1458     - goto buffer_done;
1459     + goto rcu_unlock_buf_done;
1460    
1461     list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) {
1462     nrport = NULL;
1463     @@ -384,39 +384,39 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,
1464    
1465     /* Tab in to show lport ownership. */
1466     if (strlcat(buf, "NVME RPORT ", PAGE_SIZE) >= PAGE_SIZE)
1467     - goto buffer_done;
1468     + goto rcu_unlock_buf_done;
1469     if (phba->brd_no >= 10) {
1470     if (strlcat(buf, " ", PAGE_SIZE) >= PAGE_SIZE)
1471     - goto buffer_done;
1472     + goto rcu_unlock_buf_done;
1473     }
1474    
1475     scnprintf(tmp, sizeof(tmp), "WWPN x%llx ",
1476     nrport->port_name);
1477     if (strlcat(buf, tmp, PAGE_SIZE) >= PAGE_SIZE)
1478     - goto buffer_done;
1479     + goto rcu_unlock_buf_done;
1480    
1481     scnprintf(tmp, sizeof(tmp), "WWNN x%llx ",
1482     nrport->node_name);
1483     if (strlcat(buf, tmp, PAGE_SIZE) >= PAGE_SIZE)
1484     - goto buffer_done;
1485     + goto rcu_unlock_buf_done;
1486    
1487     scnprintf(tmp, sizeof(tmp), "DID x%06x ",
1488     nrport->port_id);
1489     if (strlcat(buf, tmp, PAGE_SIZE) >= PAGE_SIZE)
1490     - goto buffer_done;
1491     + goto rcu_unlock_buf_done;
1492    
1493     /* An NVME rport can have multiple roles. */
1494     if (nrport->port_role & FC_PORT_ROLE_NVME_INITIATOR) {
1495     if (strlcat(buf, "INITIATOR ", PAGE_SIZE) >= PAGE_SIZE)
1496     - goto buffer_done;
1497     + goto rcu_unlock_buf_done;
1498     }
1499     if (nrport->port_role & FC_PORT_ROLE_NVME_TARGET) {
1500     if (strlcat(buf, "TARGET ", PAGE_SIZE) >= PAGE_SIZE)
1501     - goto buffer_done;
1502     + goto rcu_unlock_buf_done;
1503     }
1504     if (nrport->port_role & FC_PORT_ROLE_NVME_DISCOVERY) {
1505     if (strlcat(buf, "DISCSRVC ", PAGE_SIZE) >= PAGE_SIZE)
1506     - goto buffer_done;
1507     + goto rcu_unlock_buf_done;
1508     }
1509     if (nrport->port_role & ~(FC_PORT_ROLE_NVME_INITIATOR |
1510     FC_PORT_ROLE_NVME_TARGET |
1511     @@ -424,12 +424,12 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,
1512     scnprintf(tmp, sizeof(tmp), "UNKNOWN ROLE x%x",
1513     nrport->port_role);
1514     if (strlcat(buf, tmp, PAGE_SIZE) >= PAGE_SIZE)
1515     - goto buffer_done;
1516     + goto rcu_unlock_buf_done;
1517     }
1518    
1519     scnprintf(tmp, sizeof(tmp), "%s\n", statep);
1520     if (strlcat(buf, tmp, PAGE_SIZE) >= PAGE_SIZE)
1521     - goto buffer_done;
1522     + goto rcu_unlock_buf_done;
1523     }
1524     rcu_read_unlock();
1525    
1526     @@ -491,7 +491,13 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,
1527     atomic_read(&lport->cmpl_fcp_err));
1528     strlcat(buf, tmp, PAGE_SIZE);
1529    
1530     -buffer_done:
1531     + /* RCU is already unlocked. */
1532     + goto buffer_done;
1533     +
1534     + rcu_unlock_buf_done:
1535     + rcu_read_unlock();
1536     +
1537     + buffer_done:
1538     len = strnlen(buf, PAGE_SIZE);
1539    
1540     if (unlikely(len >= (PAGE_SIZE - 1))) {
1541     diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
1542     index 0d214e6b8e9a..f3c6801c0b31 100644
1543     --- a/drivers/scsi/lpfc/lpfc_els.c
1544     +++ b/drivers/scsi/lpfc/lpfc_els.c
1545     @@ -7094,7 +7094,10 @@ int
1546     lpfc_send_rrq(struct lpfc_hba *phba, struct lpfc_node_rrq *rrq)
1547     {
1548     struct lpfc_nodelist *ndlp = lpfc_findnode_did(rrq->vport,
1549     - rrq->nlp_DID);
1550     + rrq->nlp_DID);
1551     + if (!ndlp)
1552     + return 1;
1553     +
1554     if (lpfc_test_rrq_active(phba, ndlp, rrq->xritag))
1555     return lpfc_issue_els_rrq(rrq->vport, ndlp,
1556     rrq->nlp_DID, rrq);
1557     diff --git a/drivers/scsi/qedi/qedi_dbg.c b/drivers/scsi/qedi/qedi_dbg.c
1558     index 8fd28b056f73..3383314a3882 100644
1559     --- a/drivers/scsi/qedi/qedi_dbg.c
1560     +++ b/drivers/scsi/qedi/qedi_dbg.c
1561     @@ -16,10 +16,6 @@ qedi_dbg_err(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
1562     {
1563     va_list va;
1564     struct va_format vaf;
1565     - char nfunc[32];
1566     -
1567     - memset(nfunc, 0, sizeof(nfunc));
1568     - memcpy(nfunc, func, sizeof(nfunc) - 1);
1569    
1570     va_start(va, fmt);
1571    
1572     @@ -28,9 +24,9 @@ qedi_dbg_err(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
1573    
1574     if (likely(qedi) && likely(qedi->pdev))
1575     pr_err("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
1576     - nfunc, line, qedi->host_no, &vaf);
1577     + func, line, qedi->host_no, &vaf);
1578     else
1579     - pr_err("[0000:00:00.0]:[%s:%d]: %pV", nfunc, line, &vaf);
1580     + pr_err("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
1581    
1582     va_end(va);
1583     }
1584     @@ -41,10 +37,6 @@ qedi_dbg_warn(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
1585     {
1586     va_list va;
1587     struct va_format vaf;
1588     - char nfunc[32];
1589     -
1590     - memset(nfunc, 0, sizeof(nfunc));
1591     - memcpy(nfunc, func, sizeof(nfunc) - 1);
1592    
1593     va_start(va, fmt);
1594    
1595     @@ -56,9 +48,9 @@ qedi_dbg_warn(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
1596    
1597     if (likely(qedi) && likely(qedi->pdev))
1598     pr_warn("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
1599     - nfunc, line, qedi->host_no, &vaf);
1600     + func, line, qedi->host_no, &vaf);
1601     else
1602     - pr_warn("[0000:00:00.0]:[%s:%d]: %pV", nfunc, line, &vaf);
1603     + pr_warn("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
1604    
1605     ret:
1606     va_end(va);
1607     @@ -70,10 +62,6 @@ qedi_dbg_notice(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
1608     {
1609     va_list va;
1610     struct va_format vaf;
1611     - char nfunc[32];
1612     -
1613     - memset(nfunc, 0, sizeof(nfunc));
1614     - memcpy(nfunc, func, sizeof(nfunc) - 1);
1615    
1616     va_start(va, fmt);
1617    
1618     @@ -85,10 +73,10 @@ qedi_dbg_notice(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
1619    
1620     if (likely(qedi) && likely(qedi->pdev))
1621     pr_notice("[%s]:[%s:%d]:%d: %pV",
1622     - dev_name(&qedi->pdev->dev), nfunc, line,
1623     + dev_name(&qedi->pdev->dev), func, line,
1624     qedi->host_no, &vaf);
1625     else
1626     - pr_notice("[0000:00:00.0]:[%s:%d]: %pV", nfunc, line, &vaf);
1627     + pr_notice("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
1628    
1629     ret:
1630     va_end(va);
1631     @@ -100,10 +88,6 @@ qedi_dbg_info(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
1632     {
1633     va_list va;
1634     struct va_format vaf;
1635     - char nfunc[32];
1636     -
1637     - memset(nfunc, 0, sizeof(nfunc));
1638     - memcpy(nfunc, func, sizeof(nfunc) - 1);
1639    
1640     va_start(va, fmt);
1641    
1642     @@ -115,9 +99,9 @@ qedi_dbg_info(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
1643    
1644     if (likely(qedi) && likely(qedi->pdev))
1645     pr_info("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
1646     - nfunc, line, qedi->host_no, &vaf);
1647     + func, line, qedi->host_no, &vaf);
1648     else
1649     - pr_info("[0000:00:00.0]:[%s:%d]: %pV", nfunc, line, &vaf);
1650     + pr_info("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
1651    
1652     ret:
1653     va_end(va);
1654     diff --git a/drivers/scsi/qedi/qedi_iscsi.c b/drivers/scsi/qedi/qedi_iscsi.c
1655     index 4130b9117055..1b7049dce169 100644
1656     --- a/drivers/scsi/qedi/qedi_iscsi.c
1657     +++ b/drivers/scsi/qedi/qedi_iscsi.c
1658     @@ -810,8 +810,6 @@ qedi_ep_connect(struct Scsi_Host *shost, struct sockaddr *dst_addr,
1659     struct qedi_endpoint *qedi_ep;
1660     struct sockaddr_in *addr;
1661     struct sockaddr_in6 *addr6;
1662     - struct qed_dev *cdev = NULL;
1663     - struct qedi_uio_dev *udev = NULL;
1664     struct iscsi_path path_req;
1665     u32 msg_type = ISCSI_KEVENT_IF_DOWN;
1666     u32 iscsi_cid = QEDI_CID_RESERVED;
1667     @@ -831,8 +829,6 @@ qedi_ep_connect(struct Scsi_Host *shost, struct sockaddr *dst_addr,
1668     }
1669    
1670     qedi = iscsi_host_priv(shost);
1671     - cdev = qedi->cdev;
1672     - udev = qedi->udev;
1673    
1674     if (test_bit(QEDI_IN_OFFLINE, &qedi->flags) ||
1675     test_bit(QEDI_IN_RECOVERY, &qedi->flags)) {
1676     diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
1677     index 6082b008969b..6b6413073584 100644
1678     --- a/drivers/usb/core/quirks.c
1679     +++ b/drivers/usb/core/quirks.c
1680     @@ -215,6 +215,9 @@ static const struct usb_device_id usb_quirk_list[] = {
1681     /* Cherry Stream G230 2.0 (G85-231) and 3.0 (G85-232) */
1682     { USB_DEVICE(0x046a, 0x0023), .driver_info = USB_QUIRK_RESET_RESUME },
1683    
1684     + /* Logitech HD Webcam C270 */
1685     + { USB_DEVICE(0x046d, 0x0825), .driver_info = USB_QUIRK_RESET_RESUME },
1686     +
1687     /* Logitech HD Pro Webcams C920, C920-C, C925e and C930e */
1688     { USB_DEVICE(0x046d, 0x082d), .driver_info = USB_QUIRK_DELAY_INIT },
1689     { USB_DEVICE(0x046d, 0x0841), .driver_info = USB_QUIRK_DELAY_INIT },
1690     diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
1691     index 260010abf9d8..aad7edc29bdd 100644
1692     --- a/drivers/usb/dwc2/hcd.c
1693     +++ b/drivers/usb/dwc2/hcd.c
1694     @@ -2673,8 +2673,10 @@ static void dwc2_free_dma_aligned_buffer(struct urb *urb)
1695     return;
1696    
1697     /* Restore urb->transfer_buffer from the end of the allocated area */
1698     - memcpy(&stored_xfer_buffer, urb->transfer_buffer +
1699     - urb->transfer_buffer_length, sizeof(urb->transfer_buffer));
1700     + memcpy(&stored_xfer_buffer,
1701     + PTR_ALIGN(urb->transfer_buffer + urb->transfer_buffer_length,
1702     + dma_get_cache_alignment()),
1703     + sizeof(urb->transfer_buffer));
1704    
1705     if (usb_urb_dir_in(urb)) {
1706     if (usb_pipeisoc(urb->pipe))
1707     @@ -2706,6 +2708,7 @@ static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)
1708     * DMA
1709     */
1710     kmalloc_size = urb->transfer_buffer_length +
1711     + (dma_get_cache_alignment() - 1) +
1712     sizeof(urb->transfer_buffer);
1713    
1714     kmalloc_ptr = kmalloc(kmalloc_size, mem_flags);
1715     @@ -2716,7 +2719,8 @@ static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)
1716     * Position value of original urb->transfer_buffer pointer to the end
1717     * of allocation for later referencing
1718     */
1719     - memcpy(kmalloc_ptr + urb->transfer_buffer_length,
1720     + memcpy(PTR_ALIGN(kmalloc_ptr + urb->transfer_buffer_length,
1721     + dma_get_cache_alignment()),
1722     &urb->transfer_buffer, sizeof(urb->transfer_buffer));
1723    
1724     if (usb_urb_dir_out(urb))
1725     @@ -2801,7 +2805,7 @@ static int dwc2_assign_and_init_hc(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)
1726     chan->dev_addr = dwc2_hcd_get_dev_addr(&urb->pipe_info);
1727     chan->ep_num = dwc2_hcd_get_ep_num(&urb->pipe_info);
1728     chan->speed = qh->dev_speed;
1729     - chan->max_packet = dwc2_max_packet(qh->maxp);
1730     + chan->max_packet = qh->maxp;
1731    
1732     chan->xfer_started = 0;
1733     chan->halt_status = DWC2_HC_XFER_NO_HALT_STATUS;
1734     @@ -2879,7 +2883,7 @@ static int dwc2_assign_and_init_hc(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)
1735     * This value may be modified when the transfer is started
1736     * to reflect the actual transfer length
1737     */
1738     - chan->multi_count = dwc2_hb_mult(qh->maxp);
1739     + chan->multi_count = qh->maxp_mult;
1740    
1741     if (hsotg->params.dma_desc_enable) {
1742     chan->desc_list_addr = qh->desc_list_dma;
1743     @@ -3991,19 +3995,21 @@ static struct dwc2_hcd_urb *dwc2_hcd_urb_alloc(struct dwc2_hsotg *hsotg,
1744    
1745     static void dwc2_hcd_urb_set_pipeinfo(struct dwc2_hsotg *hsotg,
1746     struct dwc2_hcd_urb *urb, u8 dev_addr,
1747     - u8 ep_num, u8 ep_type, u8 ep_dir, u16 mps)
1748     + u8 ep_num, u8 ep_type, u8 ep_dir,
1749     + u16 maxp, u16 maxp_mult)
1750     {
1751     if (dbg_perio() ||
1752     ep_type == USB_ENDPOINT_XFER_BULK ||
1753     ep_type == USB_ENDPOINT_XFER_CONTROL)
1754     dev_vdbg(hsotg->dev,
1755     - "addr=%d, ep_num=%d, ep_dir=%1x, ep_type=%1x, mps=%d\n",
1756     - dev_addr, ep_num, ep_dir, ep_type, mps);
1757     + "addr=%d, ep_num=%d, ep_dir=%1x, ep_type=%1x, maxp=%d (%d mult)\n",
1758     + dev_addr, ep_num, ep_dir, ep_type, maxp, maxp_mult);
1759     urb->pipe_info.dev_addr = dev_addr;
1760     urb->pipe_info.ep_num = ep_num;
1761     urb->pipe_info.pipe_type = ep_type;
1762     urb->pipe_info.pipe_dir = ep_dir;
1763     - urb->pipe_info.mps = mps;
1764     + urb->pipe_info.maxp = maxp;
1765     + urb->pipe_info.maxp_mult = maxp_mult;
1766     }
1767    
1768     /*
1769     @@ -4094,8 +4100,9 @@ void dwc2_hcd_dump_state(struct dwc2_hsotg *hsotg)
1770     dwc2_hcd_is_pipe_in(&urb->pipe_info) ?
1771     "IN" : "OUT");
1772     dev_dbg(hsotg->dev,
1773     - " Max packet size: %d\n",
1774     - dwc2_hcd_get_mps(&urb->pipe_info));
1775     + " Max packet size: %d (%d mult)\n",
1776     + dwc2_hcd_get_maxp(&urb->pipe_info),
1777     + dwc2_hcd_get_maxp_mult(&urb->pipe_info));
1778     dev_dbg(hsotg->dev,
1779     " transfer_buffer: %p\n",
1780     urb->buf);
1781     @@ -4653,8 +4660,10 @@ static void dwc2_dump_urb_info(struct usb_hcd *hcd, struct urb *urb,
1782     }
1783    
1784     dev_vdbg(hsotg->dev, " Speed: %s\n", speed);
1785     - dev_vdbg(hsotg->dev, " Max packet size: %d\n",
1786     - usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe)));
1787     + dev_vdbg(hsotg->dev, " Max packet size: %d (%d mult)\n",
1788     + usb_endpoint_maxp(&urb->ep->desc),
1789     + usb_endpoint_maxp_mult(&urb->ep->desc));
1790     +
1791     dev_vdbg(hsotg->dev, " Data buffer length: %d\n",
1792     urb->transfer_buffer_length);
1793     dev_vdbg(hsotg->dev, " Transfer buffer: %p, Transfer DMA: %08lx\n",
1794     @@ -4737,8 +4746,8 @@ static int _dwc2_hcd_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
1795     dwc2_hcd_urb_set_pipeinfo(hsotg, dwc2_urb, usb_pipedevice(urb->pipe),
1796     usb_pipeendpoint(urb->pipe), ep_type,
1797     usb_pipein(urb->pipe),
1798     - usb_maxpacket(urb->dev, urb->pipe,
1799     - !(usb_pipein(urb->pipe))));
1800     + usb_endpoint_maxp(&ep->desc),
1801     + usb_endpoint_maxp_mult(&ep->desc));
1802    
1803     buf = urb->transfer_buffer;
1804    
1805     diff --git a/drivers/usb/dwc2/hcd.h b/drivers/usb/dwc2/hcd.h
1806     index c089ffa1f0a8..ce6445a06588 100644
1807     --- a/drivers/usb/dwc2/hcd.h
1808     +++ b/drivers/usb/dwc2/hcd.h
1809     @@ -171,7 +171,8 @@ struct dwc2_hcd_pipe_info {
1810     u8 ep_num;
1811     u8 pipe_type;
1812     u8 pipe_dir;
1813     - u16 mps;
1814     + u16 maxp;
1815     + u16 maxp_mult;
1816     };
1817    
1818     struct dwc2_hcd_iso_packet_desc {
1819     @@ -264,6 +265,7 @@ struct dwc2_hs_transfer_time {
1820     * - USB_ENDPOINT_XFER_ISOC
1821     * @ep_is_in: Endpoint direction
1822     * @maxp: Value from wMaxPacketSize field of Endpoint Descriptor
1823     + * @maxp_mult: Multiplier for maxp
1824     * @dev_speed: Device speed. One of the following values:
1825     * - USB_SPEED_LOW
1826     * - USB_SPEED_FULL
1827     @@ -340,6 +342,7 @@ struct dwc2_qh {
1828     u8 ep_type;
1829     u8 ep_is_in;
1830     u16 maxp;
1831     + u16 maxp_mult;
1832     u8 dev_speed;
1833     u8 data_toggle;
1834     u8 ping_state;
1835     @@ -503,9 +506,14 @@ static inline u8 dwc2_hcd_get_pipe_type(struct dwc2_hcd_pipe_info *pipe)
1836     return pipe->pipe_type;
1837     }
1838    
1839     -static inline u16 dwc2_hcd_get_mps(struct dwc2_hcd_pipe_info *pipe)
1840     +static inline u16 dwc2_hcd_get_maxp(struct dwc2_hcd_pipe_info *pipe)
1841     +{
1842     + return pipe->maxp;
1843     +}
1844     +
1845     +static inline u16 dwc2_hcd_get_maxp_mult(struct dwc2_hcd_pipe_info *pipe)
1846     {
1847     - return pipe->mps;
1848     + return pipe->maxp_mult;
1849     }
1850    
1851     static inline u8 dwc2_hcd_get_dev_addr(struct dwc2_hcd_pipe_info *pipe)
1852     @@ -620,12 +628,6 @@ static inline bool dbg_urb(struct urb *urb)
1853     static inline bool dbg_perio(void) { return false; }
1854     #endif
1855    
1856     -/* High bandwidth multiplier as encoded in highspeed endpoint descriptors */
1857     -#define dwc2_hb_mult(wmaxpacketsize) (1 + (((wmaxpacketsize) >> 11) & 0x03))
1858     -
1859     -/* Packet size for any kind of endpoint descriptor */
1860     -#define dwc2_max_packet(wmaxpacketsize) ((wmaxpacketsize) & 0x07ff)
1861     -
1862     /*
1863     * Returns true if frame1 index is greater than frame2 index. The comparison
1864     * is done modulo FRLISTEN_64_SIZE. This accounts for the rollover of the
1865     diff --git a/drivers/usb/dwc2/hcd_intr.c b/drivers/usb/dwc2/hcd_intr.c
1866     index 88b5dcf3aefc..a052d39b4375 100644
1867     --- a/drivers/usb/dwc2/hcd_intr.c
1868     +++ b/drivers/usb/dwc2/hcd_intr.c
1869     @@ -1617,8 +1617,9 @@ static void dwc2_hc_ahberr_intr(struct dwc2_hsotg *hsotg,
1870    
1871     dev_err(hsotg->dev, " Speed: %s\n", speed);
1872    
1873     - dev_err(hsotg->dev, " Max packet size: %d\n",
1874     - dwc2_hcd_get_mps(&urb->pipe_info));
1875     + dev_err(hsotg->dev, " Max packet size: %d (mult %d)\n",
1876     + dwc2_hcd_get_maxp(&urb->pipe_info),
1877     + dwc2_hcd_get_maxp_mult(&urb->pipe_info));
1878     dev_err(hsotg->dev, " Data buffer length: %d\n", urb->length);
1879     dev_err(hsotg->dev, " Transfer buffer: %p, Transfer DMA: %08lx\n",
1880     urb->buf, (unsigned long)urb->dma);
1881     diff --git a/drivers/usb/dwc2/hcd_queue.c b/drivers/usb/dwc2/hcd_queue.c
1882     index ea3aa640c15c..68bbac64b753 100644
1883     --- a/drivers/usb/dwc2/hcd_queue.c
1884     +++ b/drivers/usb/dwc2/hcd_queue.c
1885     @@ -708,7 +708,7 @@ static void dwc2_hs_pmap_unschedule(struct dwc2_hsotg *hsotg,
1886     static int dwc2_uframe_schedule_split(struct dwc2_hsotg *hsotg,
1887     struct dwc2_qh *qh)
1888     {
1889     - int bytecount = dwc2_hb_mult(qh->maxp) * dwc2_max_packet(qh->maxp);
1890     + int bytecount = qh->maxp_mult * qh->maxp;
1891     int ls_search_slice;
1892     int err = 0;
1893     int host_interval_in_sched;
1894     @@ -1332,7 +1332,7 @@ static int dwc2_check_max_xfer_size(struct dwc2_hsotg *hsotg,
1895     u32 max_channel_xfer_size;
1896     int status = 0;
1897    
1898     - max_xfer_size = dwc2_max_packet(qh->maxp) * dwc2_hb_mult(qh->maxp);
1899     + max_xfer_size = qh->maxp * qh->maxp_mult;
1900     max_channel_xfer_size = hsotg->params.max_transfer_size;
1901    
1902     if (max_xfer_size > max_channel_xfer_size) {
1903     @@ -1517,8 +1517,9 @@ static void dwc2_qh_init(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh,
1904     u32 prtspd = (hprt & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
1905     bool do_split = (prtspd == HPRT0_SPD_HIGH_SPEED &&
1906     dev_speed != USB_SPEED_HIGH);
1907     - int maxp = dwc2_hcd_get_mps(&urb->pipe_info);
1908     - int bytecount = dwc2_hb_mult(maxp) * dwc2_max_packet(maxp);
1909     + int maxp = dwc2_hcd_get_maxp(&urb->pipe_info);
1910     + int maxp_mult = dwc2_hcd_get_maxp_mult(&urb->pipe_info);
1911     + int bytecount = maxp_mult * maxp;
1912     char *speed, *type;
1913    
1914     /* Initialize QH */
1915     @@ -1531,6 +1532,7 @@ static void dwc2_qh_init(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh,
1916    
1917     qh->data_toggle = DWC2_HC_PID_DATA0;
1918     qh->maxp = maxp;
1919     + qh->maxp_mult = maxp_mult;
1920     INIT_LIST_HEAD(&qh->qtd_list);
1921     INIT_LIST_HEAD(&qh->qh_list_entry);
1922    
1923     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
1924     index d8c474b386a8..ea891195bbdf 100644
1925     --- a/drivers/usb/serial/option.c
1926     +++ b/drivers/usb/serial/option.c
1927     @@ -1171,6 +1171,10 @@ static const struct usb_device_id option_ids[] = {
1928     { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1213, 0xff) },
1929     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1214),
1930     .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
1931     + { USB_DEVICE(TELIT_VENDOR_ID, 0x1260),
1932     + .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
1933     + { USB_DEVICE(TELIT_VENDOR_ID, 0x1261),
1934     + .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
1935     { USB_DEVICE(TELIT_VENDOR_ID, 0x1900), /* Telit LN940 (QMI) */
1936     .driver_info = NCTRL(0) | RSVD(1) },
1937     { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1901, 0xff), /* Telit LN940 (MBIM) */
1938     @@ -1772,6 +1776,8 @@ static const struct usb_device_id option_ids[] = {
1939     { USB_DEVICE(ALINK_VENDOR_ID, SIMCOM_PRODUCT_SIM7100E),
1940     .driver_info = RSVD(5) | RSVD(6) },
1941     { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9003, 0xff) }, /* Simcom SIM7500/SIM7600 MBIM mode */
1942     + { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9011, 0xff), /* Simcom SIM7500/SIM7600 RNDIS mode */
1943     + .driver_info = RSVD(7) },
1944     { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200),
1945     .driver_info = NCTRL(0) | NCTRL(1) | RSVD(4) },
1946     { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D),
1947     diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
1948     index 5a6df6e9ad57..5d7b21ea6238 100644
1949     --- a/drivers/usb/serial/pl2303.c
1950     +++ b/drivers/usb/serial/pl2303.c
1951     @@ -106,6 +106,7 @@ static const struct usb_device_id id_table[] = {
1952     { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) },
1953     { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) },
1954     { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) },
1955     + { USB_DEVICE(AT_VENDOR_ID, AT_VTKIT3_PRODUCT_ID) },
1956     { } /* Terminating entry */
1957     };
1958    
1959     diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
1960     index 559941ca884d..b0175f17d1a2 100644
1961     --- a/drivers/usb/serial/pl2303.h
1962     +++ b/drivers/usb/serial/pl2303.h
1963     @@ -155,3 +155,6 @@
1964     #define SMART_VENDOR_ID 0x0b8c
1965     #define SMART_PRODUCT_ID 0x2303
1966    
1967     +/* Allied Telesis VT-Kit3 */
1968     +#define AT_VENDOR_ID 0x0caa
1969     +#define AT_VTKIT3_PRODUCT_ID 0x3001
1970     diff --git a/drivers/usb/storage/unusual_realtek.h b/drivers/usb/storage/unusual_realtek.h
1971     index 6b2140f966ef..7e14c2d7cf73 100644
1972     --- a/drivers/usb/storage/unusual_realtek.h
1973     +++ b/drivers/usb/storage/unusual_realtek.h
1974     @@ -17,6 +17,11 @@ UNUSUAL_DEV(0x0bda, 0x0138, 0x0000, 0x9999,
1975     "USB Card Reader",
1976     USB_SC_DEVICE, USB_PR_DEVICE, init_realtek_cr, 0),
1977    
1978     +UNUSUAL_DEV(0x0bda, 0x0153, 0x0000, 0x9999,
1979     + "Realtek",
1980     + "USB Card Reader",
1981     + USB_SC_DEVICE, USB_PR_DEVICE, init_realtek_cr, 0),
1982     +
1983     UNUSUAL_DEV(0x0bda, 0x0158, 0x0000, 0x9999,
1984     "Realtek",
1985     "USB Card Reader",
1986     diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
1987     index 409a637f7a92..88e30f7cf9e1 100644
1988     --- a/fs/f2fs/xattr.c
1989     +++ b/fs/f2fs/xattr.c
1990     @@ -205,12 +205,17 @@ static inline const struct xattr_handler *f2fs_xattr_handler(int index)
1991     return handler;
1992     }
1993    
1994     -static struct f2fs_xattr_entry *__find_xattr(void *base_addr, int index,
1995     - size_t len, const char *name)
1996     +static struct f2fs_xattr_entry *__find_xattr(void *base_addr,
1997     + void *last_base_addr, int index,
1998     + size_t len, const char *name)
1999     {
2000     struct f2fs_xattr_entry *entry;
2001    
2002     list_for_each_xattr(entry, base_addr) {
2003     + if ((void *)(entry) + sizeof(__u32) > last_base_addr ||
2004     + (void *)XATTR_NEXT_ENTRY(entry) > last_base_addr)
2005     + return NULL;
2006     +
2007     if (entry->e_name_index != index)
2008     continue;
2009     if (entry->e_name_len != len)
2010     @@ -300,20 +305,22 @@ static int lookup_all_xattrs(struct inode *inode, struct page *ipage,
2011     const char *name, struct f2fs_xattr_entry **xe,
2012     void **base_addr, int *base_size)
2013     {
2014     - void *cur_addr, *txattr_addr, *last_addr = NULL;
2015     + void *cur_addr, *txattr_addr, *last_txattr_addr;
2016     + void *last_addr = NULL;
2017     nid_t xnid = F2FS_I(inode)->i_xattr_nid;
2018     - unsigned int size = xnid ? VALID_XATTR_BLOCK_SIZE : 0;
2019     unsigned int inline_size = inline_xattr_size(inode);
2020     int err = 0;
2021    
2022     - if (!size && !inline_size)
2023     + if (!xnid && !inline_size)
2024     return -ENODATA;
2025    
2026     - *base_size = inline_size + size + XATTR_PADDING_SIZE;
2027     + *base_size = XATTR_SIZE(xnid, inode) + XATTR_PADDING_SIZE;
2028     txattr_addr = f2fs_kzalloc(F2FS_I_SB(inode), *base_size, GFP_NOFS);
2029     if (!txattr_addr)
2030     return -ENOMEM;
2031    
2032     + last_txattr_addr = (void *)txattr_addr + XATTR_SIZE(xnid, inode);
2033     +
2034     /* read from inline xattr */
2035     if (inline_size) {
2036     err = read_inline_xattr(inode, ipage, txattr_addr);
2037     @@ -340,7 +347,11 @@ static int lookup_all_xattrs(struct inode *inode, struct page *ipage,
2038     else
2039     cur_addr = txattr_addr;
2040    
2041     - *xe = __find_xattr(cur_addr, index, len, name);
2042     + *xe = __find_xattr(cur_addr, last_txattr_addr, index, len, name);
2043     + if (!*xe) {
2044     + err = -EFAULT;
2045     + goto out;
2046     + }
2047     check:
2048     if (IS_XATTR_LAST_ENTRY(*xe)) {
2049     err = -ENODATA;
2050     @@ -584,7 +595,8 @@ static int __f2fs_setxattr(struct inode *inode, int index,
2051     struct page *ipage, int flags)
2052     {
2053     struct f2fs_xattr_entry *here, *last;
2054     - void *base_addr;
2055     + void *base_addr, *last_base_addr;
2056     + nid_t xnid = F2FS_I(inode)->i_xattr_nid;
2057     int found, newsize;
2058     size_t len;
2059     __u32 new_hsize;
2060     @@ -608,8 +620,14 @@ static int __f2fs_setxattr(struct inode *inode, int index,
2061     if (error)
2062     return error;
2063    
2064     + last_base_addr = (void *)base_addr + XATTR_SIZE(xnid, inode);
2065     +
2066     /* find entry with wanted name. */
2067     - here = __find_xattr(base_addr, index, len, name);
2068     + here = __find_xattr(base_addr, last_base_addr, index, len, name);
2069     + if (!here) {
2070     + error = -EFAULT;
2071     + goto exit;
2072     + }
2073    
2074     found = IS_XATTR_LAST_ENTRY(here) ? 0 : 1;
2075    
2076     diff --git a/fs/f2fs/xattr.h b/fs/f2fs/xattr.h
2077     index dbcd1d16e669..2a4ecaf338ea 100644
2078     --- a/fs/f2fs/xattr.h
2079     +++ b/fs/f2fs/xattr.h
2080     @@ -74,6 +74,8 @@ struct f2fs_xattr_entry {
2081     entry = XATTR_NEXT_ENTRY(entry))
2082     #define VALID_XATTR_BLOCK_SIZE (PAGE_SIZE - sizeof(struct node_footer))
2083     #define XATTR_PADDING_SIZE (sizeof(__u32))
2084     +#define XATTR_SIZE(x,i) (((x) ? VALID_XATTR_BLOCK_SIZE : 0) + \
2085     + (inline_xattr_size(i)))
2086     #define MIN_OFFSET(i) XATTR_ALIGN(inline_xattr_size(i) + \
2087     VALID_XATTR_BLOCK_SIZE)
2088    
2089     diff --git a/fs/ocfs2/dcache.c b/fs/ocfs2/dcache.c
2090     index 290373024d9d..e8ace3b54e9c 100644
2091     --- a/fs/ocfs2/dcache.c
2092     +++ b/fs/ocfs2/dcache.c
2093     @@ -310,6 +310,18 @@ int ocfs2_dentry_attach_lock(struct dentry *dentry,
2094    
2095     out_attach:
2096     spin_lock(&dentry_attach_lock);
2097     + if (unlikely(dentry->d_fsdata && !alias)) {
2098     + /* d_fsdata is set by a racing thread which is doing
2099     + * the same thing as this thread is doing. Leave the racing
2100     + * thread going ahead and we return here.
2101     + */
2102     + spin_unlock(&dentry_attach_lock);
2103     + iput(dl->dl_inode);
2104     + ocfs2_lock_res_free(&dl->dl_lockres);
2105     + kfree(dl);
2106     + return 0;
2107     + }
2108     +
2109     dentry->d_fsdata = dl;
2110     dl->dl_count++;
2111     spin_unlock(&dentry_attach_lock);
2112     diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
2113     index e3c404833115..53be104aab5c 100644
2114     --- a/include/drm/drm_edid.h
2115     +++ b/include/drm/drm_edid.h
2116     @@ -466,6 +466,7 @@ struct edid *drm_get_edid_switcheroo(struct drm_connector *connector,
2117     struct i2c_adapter *adapter);
2118     struct edid *drm_edid_duplicate(const struct edid *edid);
2119     int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid);
2120     +int drm_add_override_edid_modes(struct drm_connector *connector);
2121    
2122     u8 drm_match_cea_mode(const struct drm_display_mode *to_match);
2123     enum hdmi_picture_aspect drm_get_cea_aspect_ratio(const u8 video_code);
2124     diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
2125     index ca51b2c15bcc..8937d48a5389 100644
2126     --- a/include/linux/cgroup.h
2127     +++ b/include/linux/cgroup.h
2128     @@ -485,7 +485,7 @@ static inline struct cgroup_subsys_state *task_css(struct task_struct *task,
2129     *
2130     * Find the css for the (@task, @subsys_id) combination, increment a
2131     * reference on and return it. This function is guaranteed to return a
2132     - * valid css.
2133     + * valid css. The returned css may already have been offlined.
2134     */
2135     static inline struct cgroup_subsys_state *
2136     task_get_css(struct task_struct *task, int subsys_id)
2137     @@ -495,7 +495,13 @@ task_get_css(struct task_struct *task, int subsys_id)
2138     rcu_read_lock();
2139     while (true) {
2140     css = task_css(task, subsys_id);
2141     - if (likely(css_tryget_online(css)))
2142     + /*
2143     + * Can't use css_tryget_online() here. A task which has
2144     + * PF_EXITING set may stay associated with an offline css.
2145     + * If such task calls this function, css_tryget_online()
2146     + * will keep failing.
2147     + */
2148     + if (likely(css_tryget(css)))
2149     break;
2150     cpu_relax();
2151     }
2152     diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
2153     index caf40ad0bbc6..d64d8c2bbdab 100644
2154     --- a/include/linux/cpuhotplug.h
2155     +++ b/include/linux/cpuhotplug.h
2156     @@ -101,6 +101,7 @@ enum cpuhp_state {
2157     CPUHP_AP_IRQ_BCM2836_STARTING,
2158     CPUHP_AP_IRQ_MIPS_GIC_STARTING,
2159     CPUHP_AP_ARM_MVEBU_COHERENCY,
2160     + CPUHP_AP_MICROCODE_LOADER,
2161     CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING,
2162     CPUHP_AP_PERF_X86_STARTING,
2163     CPUHP_AP_PERF_X86_AMD_IBS_STARTING,
2164     diff --git a/kernel/Makefile b/kernel/Makefile
2165     index 7a63d567fdb5..df5e3ca30acd 100644
2166     --- a/kernel/Makefile
2167     +++ b/kernel/Makefile
2168     @@ -30,6 +30,7 @@ KCOV_INSTRUMENT_extable.o := n
2169     # Don't self-instrument.
2170     KCOV_INSTRUMENT_kcov.o := n
2171     KASAN_SANITIZE_kcov.o := n
2172     +CFLAGS_kcov.o := $(call cc-option, -fno-conserve-stack -fno-stack-protector)
2173    
2174     # cond_syscall is currently not LTO compatible
2175     CFLAGS_sys_ni.o = $(DISABLE_LTO)
2176     diff --git a/kernel/cred.c b/kernel/cred.c
2177     index ecf03657e71c..efd04b2ec84c 100644
2178     --- a/kernel/cred.c
2179     +++ b/kernel/cred.c
2180     @@ -448,6 +448,15 @@ int commit_creds(struct cred *new)
2181     if (task->mm)
2182     set_dumpable(task->mm, suid_dumpable);
2183     task->pdeath_signal = 0;
2184     + /*
2185     + * If a task drops privileges and becomes nondumpable,
2186     + * the dumpability change must become visible before
2187     + * the credential change; otherwise, a __ptrace_may_access()
2188     + * racing with this change may be able to attach to a task it
2189     + * shouldn't be able to attach to (as if the task had dropped
2190     + * privileges without becoming nondumpable).
2191     + * Pairs with a read barrier in __ptrace_may_access().
2192     + */
2193     smp_wmb();
2194     }
2195    
2196     diff --git a/kernel/ptrace.c b/kernel/ptrace.c
2197     index fc0d667f5792..5d0838c2349e 100644
2198     --- a/kernel/ptrace.c
2199     +++ b/kernel/ptrace.c
2200     @@ -323,6 +323,16 @@ static int __ptrace_may_access(struct task_struct *task, unsigned int mode)
2201     return -EPERM;
2202     ok:
2203     rcu_read_unlock();
2204     + /*
2205     + * If a task drops privileges and becomes nondumpable (through a syscall
2206     + * like setresuid()) while we are trying to access it, we must ensure
2207     + * that the dumpability is read after the credentials; otherwise,
2208     + * we may be able to attach to a task that we shouldn't be able to
2209     + * attach to (as if the task had dropped privileges without becoming
2210     + * nondumpable).
2211     + * Pairs with a write barrier in commit_creds().
2212     + */
2213     + smp_rmb();
2214     mm = task->mm;
2215     if (mm &&
2216     ((get_dumpable(mm) != SUID_DUMP_USER) &&
2217     @@ -704,6 +714,10 @@ static int ptrace_peek_siginfo(struct task_struct *child,
2218     if (arg.nr < 0)
2219     return -EINVAL;
2220    
2221     + /* Ensure arg.off fits in an unsigned long */
2222     + if (arg.off > ULONG_MAX)
2223     + return 0;
2224     +
2225     if (arg.flags & PTRACE_PEEKSIGINFO_SHARED)
2226     pending = &child->signal->shared_pending;
2227     else
2228     @@ -711,18 +725,20 @@ static int ptrace_peek_siginfo(struct task_struct *child,
2229    
2230     for (i = 0; i < arg.nr; ) {
2231     siginfo_t info;
2232     - s32 off = arg.off + i;
2233     + unsigned long off = arg.off + i;
2234     + bool found = false;
2235    
2236     spin_lock_irq(&child->sighand->siglock);
2237     list_for_each_entry(q, &pending->list, list) {
2238     if (!off--) {
2239     + found = true;
2240     copy_siginfo(&info, &q->info);
2241     break;
2242     }
2243     }
2244     spin_unlock_irq(&child->sighand->siglock);
2245    
2246     - if (off >= 0) /* beyond the end of the list */
2247     + if (!found) /* beyond the end of the list */
2248     break;
2249    
2250     #ifdef CONFIG_COMPAT
2251     diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
2252     index 9a6bfcd22dc6..443edcddac8a 100644
2253     --- a/kernel/time/timekeeping.c
2254     +++ b/kernel/time/timekeeping.c
2255     @@ -812,17 +812,18 @@ ktime_t ktime_get_coarse_with_offset(enum tk_offsets offs)
2256     struct timekeeper *tk = &tk_core.timekeeper;
2257     unsigned int seq;
2258     ktime_t base, *offset = offsets[offs];
2259     + u64 nsecs;
2260    
2261     WARN_ON(timekeeping_suspended);
2262    
2263     do {
2264     seq = read_seqcount_begin(&tk_core.seq);
2265     base = ktime_add(tk->tkr_mono.base, *offset);
2266     + nsecs = tk->tkr_mono.xtime_nsec >> tk->tkr_mono.shift;
2267    
2268     } while (read_seqcount_retry(&tk_core.seq, seq));
2269    
2270     - return base;
2271     -
2272     + return base + nsecs;
2273     }
2274     EXPORT_SYMBOL_GPL(ktime_get_coarse_with_offset);
2275    
2276     diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
2277     index 11853e90b649..3f34cfb66a85 100644
2278     --- a/kernel/trace/trace_events_hist.c
2279     +++ b/kernel/trace/trace_events_hist.c
2280     @@ -1632,6 +1632,9 @@ static u64 hist_field_var_ref(struct hist_field *hist_field,
2281     struct hist_elt_data *elt_data;
2282     u64 var_val = 0;
2283    
2284     + if (WARN_ON_ONCE(!elt))
2285     + return var_val;
2286     +
2287     elt_data = elt->private_data;
2288     var_val = elt_data->var_ref_vals[hist_field->var_ref_idx];
2289    
2290     diff --git a/mm/list_lru.c b/mm/list_lru.c
2291     index f0a15d32b959..758653dd1443 100644
2292     --- a/mm/list_lru.c
2293     +++ b/mm/list_lru.c
2294     @@ -353,7 +353,7 @@ static int __memcg_init_list_lru_node(struct list_lru_memcg *memcg_lrus,
2295     }
2296     return 0;
2297     fail:
2298     - __memcg_destroy_list_lru_node(memcg_lrus, begin, i - 1);
2299     + __memcg_destroy_list_lru_node(memcg_lrus, begin, i);
2300     return -ENOMEM;
2301     }
2302    
2303     diff --git a/mm/vmscan.c b/mm/vmscan.c
2304     index ee545d1e9894..dec88fcf8876 100644
2305     --- a/mm/vmscan.c
2306     +++ b/mm/vmscan.c
2307     @@ -1510,7 +1510,7 @@ unsigned long reclaim_clean_pages_from_list(struct zone *zone,
2308    
2309     list_for_each_entry_safe(page, next, page_list, lru) {
2310     if (page_is_file_cache(page) && !PageDirty(page) &&
2311     - !__PageMovable(page)) {
2312     + !__PageMovable(page) && !PageUnevictable(page)) {
2313     ClearPageActive(page);
2314     list_move(&page->lru, &clean_pages);
2315     }
2316     diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
2317     index b55cb96d1fed..f59e13c1d84a 100644
2318     --- a/sound/core/seq/seq_clientmgr.c
2319     +++ b/sound/core/seq/seq_clientmgr.c
2320     @@ -1900,20 +1900,14 @@ static int snd_seq_ioctl_get_subscription(struct snd_seq_client *client,
2321     int result;
2322     struct snd_seq_client *sender = NULL;
2323     struct snd_seq_client_port *sport = NULL;
2324     - struct snd_seq_subscribers *p;
2325    
2326     result = -EINVAL;
2327     if ((sender = snd_seq_client_use_ptr(subs->sender.client)) == NULL)
2328     goto __end;
2329     if ((sport = snd_seq_port_use_ptr(sender, subs->sender.port)) == NULL)
2330     goto __end;
2331     - p = snd_seq_port_get_subscription(&sport->c_src, &subs->dest);
2332     - if (p) {
2333     - result = 0;
2334     - *subs = p->info;
2335     - } else
2336     - result = -ENOENT;
2337     -
2338     + result = snd_seq_port_get_subscription(&sport->c_src, &subs->dest,
2339     + subs);
2340     __end:
2341     if (sport)
2342     snd_seq_port_unlock(sport);
2343     diff --git a/sound/core/seq/seq_ports.c b/sound/core/seq/seq_ports.c
2344     index da31aa8e216e..16289aefb443 100644
2345     --- a/sound/core/seq/seq_ports.c
2346     +++ b/sound/core/seq/seq_ports.c
2347     @@ -635,20 +635,23 @@ int snd_seq_port_disconnect(struct snd_seq_client *connector,
2348    
2349    
2350     /* get matched subscriber */
2351     -struct snd_seq_subscribers *snd_seq_port_get_subscription(struct snd_seq_port_subs_info *src_grp,
2352     - struct snd_seq_addr *dest_addr)
2353     +int snd_seq_port_get_subscription(struct snd_seq_port_subs_info *src_grp,
2354     + struct snd_seq_addr *dest_addr,
2355     + struct snd_seq_port_subscribe *subs)
2356     {
2357     - struct snd_seq_subscribers *s, *found = NULL;
2358     + struct snd_seq_subscribers *s;
2359     + int err = -ENOENT;
2360    
2361     down_read(&src_grp->list_mutex);
2362     list_for_each_entry(s, &src_grp->list_head, src_list) {
2363     if (addr_match(dest_addr, &s->info.dest)) {
2364     - found = s;
2365     + *subs = s->info;
2366     + err = 0;
2367     break;
2368     }
2369     }
2370     up_read(&src_grp->list_mutex);
2371     - return found;
2372     + return err;
2373     }
2374    
2375     /*
2376     diff --git a/sound/core/seq/seq_ports.h b/sound/core/seq/seq_ports.h
2377     index 26bd71f36c41..06003b36652e 100644
2378     --- a/sound/core/seq/seq_ports.h
2379     +++ b/sound/core/seq/seq_ports.h
2380     @@ -135,7 +135,8 @@ int snd_seq_port_subscribe(struct snd_seq_client_port *port,
2381     struct snd_seq_port_subscribe *info);
2382    
2383     /* get matched subscriber */
2384     -struct snd_seq_subscribers *snd_seq_port_get_subscription(struct snd_seq_port_subs_info *src_grp,
2385     - struct snd_seq_addr *dest_addr);
2386     +int snd_seq_port_get_subscription(struct snd_seq_port_subs_info *src_grp,
2387     + struct snd_seq_addr *dest_addr,
2388     + struct snd_seq_port_subscribe *subs);
2389    
2390     #endif
2391     diff --git a/sound/firewire/motu/motu-stream.c b/sound/firewire/motu/motu-stream.c
2392     index 73e7a5e527fc..483a8771d502 100644
2393     --- a/sound/firewire/motu/motu-stream.c
2394     +++ b/sound/firewire/motu/motu-stream.c
2395     @@ -345,7 +345,7 @@ static void destroy_stream(struct snd_motu *motu,
2396     }
2397    
2398     amdtp_stream_destroy(stream);
2399     - fw_iso_resources_free(resources);
2400     + fw_iso_resources_destroy(resources);
2401     }
2402    
2403     int snd_motu_stream_init_duplex(struct snd_motu *motu)
2404     diff --git a/sound/firewire/oxfw/oxfw.c b/sound/firewire/oxfw/oxfw.c
2405     index 5f82a375725a..4ecaf69569dc 100644
2406     --- a/sound/firewire/oxfw/oxfw.c
2407     +++ b/sound/firewire/oxfw/oxfw.c
2408     @@ -170,9 +170,6 @@ static int detect_quirks(struct snd_oxfw *oxfw)
2409     oxfw->midi_input_ports = 0;
2410     oxfw->midi_output_ports = 0;
2411    
2412     - /* Output stream exists but no data channels are useful. */
2413     - oxfw->has_output = false;
2414     -
2415     return snd_oxfw_scs1x_add(oxfw);
2416     }
2417    
2418     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
2419     index 5e6cb625db83..e154506a66cb 100644
2420     --- a/sound/pci/hda/patch_realtek.c
2421     +++ b/sound/pci/hda/patch_realtek.c
2422     @@ -4082,18 +4082,19 @@ static struct coef_fw alc225_pre_hsmode[] = {
2423     static void alc_headset_mode_unplugged(struct hda_codec *codec)
2424     {
2425     static struct coef_fw coef0255[] = {
2426     + WRITE_COEF(0x1b, 0x0c0b), /* LDO and MISC control */
2427     WRITE_COEF(0x45, 0xd089), /* UAJ function set to menual mode */
2428     UPDATE_COEFEX(0x57, 0x05, 1<<14, 0), /* Direct Drive HP Amp control(Set to verb control)*/
2429     WRITE_COEF(0x06, 0x6104), /* Set MIC2 Vref gate with HP */
2430     WRITE_COEFEX(0x57, 0x03, 0x8aa6), /* Direct Drive HP Amp control */
2431     {}
2432     };
2433     - static struct coef_fw coef0255_1[] = {
2434     - WRITE_COEF(0x1b, 0x0c0b), /* LDO and MISC control */
2435     - {}
2436     - };
2437     static struct coef_fw coef0256[] = {
2438     WRITE_COEF(0x1b, 0x0c4b), /* LDO and MISC control */
2439     + WRITE_COEF(0x45, 0xd089), /* UAJ function set to menual mode */
2440     + WRITE_COEF(0x06, 0x6104), /* Set MIC2 Vref gate with HP */
2441     + WRITE_COEFEX(0x57, 0x03, 0x09a3), /* Direct Drive HP Amp control */
2442     + UPDATE_COEFEX(0x57, 0x05, 1<<14, 0), /* Direct Drive HP Amp control(Set to verb control)*/
2443     {}
2444     };
2445     static struct coef_fw coef0233[] = {
2446     @@ -4156,13 +4157,11 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
2447    
2448     switch (codec->core.vendor_id) {
2449     case 0x10ec0255:
2450     - alc_process_coef_fw(codec, coef0255_1);
2451     alc_process_coef_fw(codec, coef0255);
2452     break;
2453     case 0x10ec0236:
2454     case 0x10ec0256:
2455     alc_process_coef_fw(codec, coef0256);
2456     - alc_process_coef_fw(codec, coef0255);
2457     break;
2458     case 0x10ec0234:
2459     case 0x10ec0274:
2460     @@ -4215,6 +4214,12 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
2461     WRITE_COEF(0x06, 0x6100), /* Set MIC2 Vref gate to normal */
2462     {}
2463     };
2464     + static struct coef_fw coef0256[] = {
2465     + UPDATE_COEFEX(0x57, 0x05, 1<<14, 1<<14), /* Direct Drive HP Amp control(Set to verb control)*/
2466     + WRITE_COEFEX(0x57, 0x03, 0x09a3),
2467     + WRITE_COEF(0x06, 0x6100), /* Set MIC2 Vref gate to normal */
2468     + {}
2469     + };
2470     static struct coef_fw coef0233[] = {
2471     UPDATE_COEF(0x35, 0, 1<<14),
2472     WRITE_COEF(0x06, 0x2100),
2473     @@ -4262,14 +4267,19 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
2474     };
2475    
2476     switch (codec->core.vendor_id) {
2477     - case 0x10ec0236:
2478     case 0x10ec0255:
2479     - case 0x10ec0256:
2480     alc_write_coef_idx(codec, 0x45, 0xc489);
2481     snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
2482     alc_process_coef_fw(codec, coef0255);
2483     snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
2484     break;
2485     + case 0x10ec0236:
2486     + case 0x10ec0256:
2487     + alc_write_coef_idx(codec, 0x45, 0xc489);
2488     + snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
2489     + alc_process_coef_fw(codec, coef0256);
2490     + snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
2491     + break;
2492     case 0x10ec0234:
2493     case 0x10ec0274:
2494     case 0x10ec0294:
2495     @@ -4351,6 +4361,14 @@ static void alc_headset_mode_default(struct hda_codec *codec)
2496     WRITE_COEF(0x49, 0x0049),
2497     {}
2498     };
2499     + static struct coef_fw coef0256[] = {
2500     + WRITE_COEF(0x45, 0xc489),
2501     + WRITE_COEFEX(0x57, 0x03, 0x0da3),
2502     + WRITE_COEF(0x49, 0x0049),
2503     + UPDATE_COEFEX(0x57, 0x05, 1<<14, 0), /* Direct Drive HP Amp control(Set to verb control)*/
2504     + WRITE_COEF(0x06, 0x6100),
2505     + {}
2506     + };
2507     static struct coef_fw coef0233[] = {
2508     WRITE_COEF(0x06, 0x2100),
2509     WRITE_COEF(0x32, 0x4ea3),
2510     @@ -4401,11 +4419,16 @@ static void alc_headset_mode_default(struct hda_codec *codec)
2511     alc_process_coef_fw(codec, alc225_pre_hsmode);
2512     alc_process_coef_fw(codec, coef0225);
2513     break;
2514     - case 0x10ec0236:
2515     case 0x10ec0255:
2516     - case 0x10ec0256:
2517     alc_process_coef_fw(codec, coef0255);
2518     break;
2519     + case 0x10ec0236:
2520     + case 0x10ec0256:
2521     + alc_write_coef_idx(codec, 0x1b, 0x0e4b);
2522     + alc_write_coef_idx(codec, 0x45, 0xc089);
2523     + msleep(50);
2524     + alc_process_coef_fw(codec, coef0256);
2525     + break;
2526     case 0x10ec0234:
2527     case 0x10ec0274:
2528     case 0x10ec0294:
2529     @@ -4449,8 +4472,7 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
2530     };
2531     static struct coef_fw coef0256[] = {
2532     WRITE_COEF(0x45, 0xd489), /* Set to CTIA type */
2533     - WRITE_COEF(0x1b, 0x0c6b),
2534     - WRITE_COEFEX(0x57, 0x03, 0x8ea6),
2535     + WRITE_COEF(0x1b, 0x0e6b),
2536     {}
2537     };
2538     static struct coef_fw coef0233[] = {
2539     @@ -4568,8 +4590,7 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
2540     };
2541     static struct coef_fw coef0256[] = {
2542     WRITE_COEF(0x45, 0xe489), /* Set to OMTP Type */
2543     - WRITE_COEF(0x1b, 0x0c6b),
2544     - WRITE_COEFEX(0x57, 0x03, 0x8ea6),
2545     + WRITE_COEF(0x1b, 0x0e6b),
2546     {}
2547     };
2548     static struct coef_fw coef0233[] = {
2549     @@ -4701,13 +4722,37 @@ static void alc_determine_headset_type(struct hda_codec *codec)
2550     };
2551    
2552     switch (codec->core.vendor_id) {
2553     - case 0x10ec0236:
2554     case 0x10ec0255:
2555     + alc_process_coef_fw(codec, coef0255);
2556     + msleep(300);
2557     + val = alc_read_coef_idx(codec, 0x46);
2558     + is_ctia = (val & 0x0070) == 0x0070;
2559     + break;
2560     + case 0x10ec0236:
2561     case 0x10ec0256:
2562     + alc_write_coef_idx(codec, 0x1b, 0x0e4b);
2563     + alc_write_coef_idx(codec, 0x06, 0x6104);
2564     + alc_write_coefex_idx(codec, 0x57, 0x3, 0x09a3);
2565     +
2566     + snd_hda_codec_write(codec, 0x21, 0,
2567     + AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
2568     + msleep(80);
2569     + snd_hda_codec_write(codec, 0x21, 0,
2570     + AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
2571     +
2572     alc_process_coef_fw(codec, coef0255);
2573     msleep(300);
2574     val = alc_read_coef_idx(codec, 0x46);
2575     is_ctia = (val & 0x0070) == 0x0070;
2576     +
2577     + alc_write_coefex_idx(codec, 0x57, 0x3, 0x0da3);
2578     + alc_update_coefex_idx(codec, 0x57, 0x5, 1<<14, 0);
2579     +
2580     + snd_hda_codec_write(codec, 0x21, 0,
2581     + AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
2582     + msleep(80);
2583     + snd_hda_codec_write(codec, 0x21, 0,
2584     + AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
2585     break;
2586     case 0x10ec0234:
2587     case 0x10ec0274:
2588     @@ -6084,15 +6129,13 @@ static const struct hda_fixup alc269_fixups[] = {
2589     .chain_id = ALC269_FIXUP_THINKPAD_ACPI,
2590     },
2591     [ALC255_FIXUP_ACER_MIC_NO_PRESENCE] = {
2592     - .type = HDA_FIXUP_VERBS,
2593     - .v.verbs = (const struct hda_verb[]) {
2594     - /* Enable the Mic */
2595     - { 0x20, AC_VERB_SET_COEF_INDEX, 0x45 },
2596     - { 0x20, AC_VERB_SET_PROC_COEF, 0x5089 },
2597     - {}
2598     + .type = HDA_FIXUP_PINS,
2599     + .v.pins = (const struct hda_pintbl[]) {
2600     + { 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
2601     + { }
2602     },
2603     .chained = true,
2604     - .chain_id = ALC269_FIXUP_LIFEBOOK_EXTMIC
2605     + .chain_id = ALC255_FIXUP_HEADSET_MODE
2606     },
2607     [ALC255_FIXUP_ASUS_MIC_NO_PRESENCE] = {
2608     .type = HDA_FIXUP_PINS,
2609     @@ -7123,10 +7166,6 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
2610     {0x18, 0x02a11030},
2611     {0x19, 0x0181303F},
2612     {0x21, 0x0221102f}),
2613     - SND_HDA_PIN_QUIRK(0x10ec0255, 0x1025, "Acer", ALC255_FIXUP_ACER_MIC_NO_PRESENCE,
2614     - {0x12, 0x90a60140},
2615     - {0x14, 0x90170120},
2616     - {0x21, 0x02211030}),
2617     SND_HDA_PIN_QUIRK(0x10ec0255, 0x1025, "Acer", ALC255_FIXUP_ACER_MIC_NO_PRESENCE,
2618     {0x12, 0x90a601c0},
2619     {0x14, 0x90171120},
2620     diff --git a/sound/soc/codecs/cs42xx8.c b/sound/soc/codecs/cs42xx8.c
2621     index ebb9e0cf8364..28a4ac36c4f8 100644
2622     --- a/sound/soc/codecs/cs42xx8.c
2623     +++ b/sound/soc/codecs/cs42xx8.c
2624     @@ -558,6 +558,7 @@ static int cs42xx8_runtime_resume(struct device *dev)
2625     msleep(5);
2626    
2627     regcache_cache_only(cs42xx8->regmap, false);
2628     + regcache_mark_dirty(cs42xx8->regmap);
2629    
2630     ret = regcache_sync(cs42xx8->regmap);
2631     if (ret) {
2632     diff --git a/sound/soc/fsl/fsl_asrc.c b/sound/soc/fsl/fsl_asrc.c
2633     index 528e8b108422..09e03b884a82 100644
2634     --- a/sound/soc/fsl/fsl_asrc.c
2635     +++ b/sound/soc/fsl/fsl_asrc.c
2636     @@ -282,8 +282,8 @@ static int fsl_asrc_config_pair(struct fsl_asrc_pair *pair)
2637     return -EINVAL;
2638     }
2639    
2640     - if ((outrate > 8000 && outrate < 30000) &&
2641     - (outrate/inrate > 24 || inrate/outrate > 8)) {
2642     + if ((outrate >= 8000 && outrate <= 30000) &&
2643     + (outrate > 24 * inrate || inrate > 8 * outrate)) {
2644     pair_err("exceed supported ratio range [1/24, 8] for \
2645     inrate/outrate: %d/%d\n", inrate, outrate);
2646     return -EINVAL;
2647     diff --git a/tools/kvm/kvm_stat/kvm_stat b/tools/kvm/kvm_stat/kvm_stat
2648     index 195ba486640f..ba7ee74ee533 100755
2649     --- a/tools/kvm/kvm_stat/kvm_stat
2650     +++ b/tools/kvm/kvm_stat/kvm_stat
2651     @@ -575,8 +575,12 @@ class TracepointProvider(Provider):
2652     def update_fields(self, fields_filter):
2653     """Refresh fields, applying fields_filter"""
2654     self.fields = [field for field in self._get_available_fields()
2655     - if self.is_field_wanted(fields_filter, field) or
2656     - ARCH.tracepoint_is_child(field)]
2657     + if self.is_field_wanted(fields_filter, field)]
2658     + # add parents for child fields - otherwise we won't see any output!
2659     + for field in self._fields:
2660     + parent = ARCH.tracepoint_is_child(field)
2661     + if (parent and parent not in self._fields):
2662     + self.fields.append(parent)
2663    
2664     @staticmethod
2665     def _get_online_cpus():
2666     @@ -735,8 +739,12 @@ class DebugfsProvider(Provider):
2667     def update_fields(self, fields_filter):
2668     """Refresh fields, applying fields_filter"""
2669     self._fields = [field for field in self._get_available_fields()
2670     - if self.is_field_wanted(fields_filter, field) or
2671     - ARCH.debugfs_is_child(field)]
2672     + if self.is_field_wanted(fields_filter, field)]
2673     + # add parents for child fields - otherwise we won't see any output!
2674     + for field in self._fields:
2675     + parent = ARCH.debugfs_is_child(field)
2676     + if (parent and parent not in self._fields):
2677     + self.fields.append(parent)
2678    
2679     @property
2680     def fields(self):
2681     diff --git a/tools/kvm/kvm_stat/kvm_stat.txt b/tools/kvm/kvm_stat/kvm_stat.txt
2682     index 0811d860fe75..c057ba52364e 100644
2683     --- a/tools/kvm/kvm_stat/kvm_stat.txt
2684     +++ b/tools/kvm/kvm_stat/kvm_stat.txt
2685     @@ -34,6 +34,8 @@ INTERACTIVE COMMANDS
2686     *c*:: clear filter
2687    
2688     *f*:: filter by regular expression
2689     + :: *Note*: Child events pull in their parents, and parents' stats summarize
2690     + all child events, not just the filtered ones
2691    
2692     *g*:: filter by guest name/PID
2693    
2694     diff --git a/tools/testing/selftests/net/fib_rule_tests.sh b/tools/testing/selftests/net/fib_rule_tests.sh
2695     index d84193bdc307..dbd90ca73e44 100755
2696     --- a/tools/testing/selftests/net/fib_rule_tests.sh
2697     +++ b/tools/testing/selftests/net/fib_rule_tests.sh
2698     @@ -55,7 +55,7 @@ setup()
2699    
2700     $IP link add dummy0 type dummy
2701     $IP link set dev dummy0 up
2702     - $IP address add 198.51.100.1/24 dev dummy0
2703     + $IP address add 192.51.100.1/24 dev dummy0
2704     $IP -6 address add 2001:db8:1::1/64 dev dummy0
2705    
2706     set +e
2707     diff --git a/tools/testing/selftests/timers/adjtick.c b/tools/testing/selftests/timers/adjtick.c
2708     index 0caca3a06bd2..54d8d87f36b3 100644
2709     --- a/tools/testing/selftests/timers/adjtick.c
2710     +++ b/tools/testing/selftests/timers/adjtick.c
2711     @@ -136,6 +136,7 @@ int check_tick_adj(long tickval)
2712    
2713     eppm = get_ppm_drift();
2714     printf("%lld usec, %lld ppm", systick + (systick * eppm / MILLION), eppm);
2715     + fflush(stdout);
2716    
2717     tx1.modes = 0;
2718     adjtimex(&tx1);
2719     diff --git a/tools/testing/selftests/timers/leapcrash.c b/tools/testing/selftests/timers/leapcrash.c
2720     index 830c462f605d..dc80728ed191 100644
2721     --- a/tools/testing/selftests/timers/leapcrash.c
2722     +++ b/tools/testing/selftests/timers/leapcrash.c
2723     @@ -101,6 +101,7 @@ int main(void)
2724     }
2725     clear_time_state();
2726     printf(".");
2727     + fflush(stdout);
2728     }
2729     printf("[OK]\n");
2730     return ksft_exit_pass();
2731     diff --git a/tools/testing/selftests/timers/mqueue-lat.c b/tools/testing/selftests/timers/mqueue-lat.c
2732     index 1867db5d6f5e..7916cf5cc6ff 100644
2733     --- a/tools/testing/selftests/timers/mqueue-lat.c
2734     +++ b/tools/testing/selftests/timers/mqueue-lat.c
2735     @@ -102,6 +102,7 @@ int main(int argc, char **argv)
2736     int ret;
2737    
2738     printf("Mqueue latency : ");
2739     + fflush(stdout);
2740    
2741     ret = mqueue_lat_test();
2742     if (ret < 0) {
2743     diff --git a/tools/testing/selftests/timers/nanosleep.c b/tools/testing/selftests/timers/nanosleep.c
2744     index 8adb0bb51d4d..71b5441c2fd9 100644
2745     --- a/tools/testing/selftests/timers/nanosleep.c
2746     +++ b/tools/testing/selftests/timers/nanosleep.c
2747     @@ -142,6 +142,7 @@ int main(int argc, char **argv)
2748     continue;
2749    
2750     printf("Nanosleep %-31s ", clockstring(clockid));
2751     + fflush(stdout);
2752    
2753     length = 10;
2754     while (length <= (NSEC_PER_SEC * 10)) {
2755     diff --git a/tools/testing/selftests/timers/nsleep-lat.c b/tools/testing/selftests/timers/nsleep-lat.c
2756     index c3c3dc10db17..eb3e79ed7b4a 100644
2757     --- a/tools/testing/selftests/timers/nsleep-lat.c
2758     +++ b/tools/testing/selftests/timers/nsleep-lat.c
2759     @@ -155,6 +155,7 @@ int main(int argc, char **argv)
2760     continue;
2761    
2762     printf("nsleep latency %-26s ", clockstring(clockid));
2763     + fflush(stdout);
2764    
2765     length = 10;
2766     while (length <= (NSEC_PER_SEC * 10)) {
2767     diff --git a/tools/testing/selftests/timers/raw_skew.c b/tools/testing/selftests/timers/raw_skew.c
2768     index dcf73c5dab6e..b41d8dd0c40c 100644
2769     --- a/tools/testing/selftests/timers/raw_skew.c
2770     +++ b/tools/testing/selftests/timers/raw_skew.c
2771     @@ -112,6 +112,7 @@ int main(int argv, char **argc)
2772     printf("WARNING: ADJ_OFFSET in progress, this will cause inaccurate results\n");
2773    
2774     printf("Estimating clock drift: ");
2775     + fflush(stdout);
2776     sleep(120);
2777    
2778     get_monotonic_and_raw(&mon, &raw);
2779     diff --git a/tools/testing/selftests/timers/set-tai.c b/tools/testing/selftests/timers/set-tai.c
2780     index 70fed27d8fd3..8c4179ee2ca2 100644
2781     --- a/tools/testing/selftests/timers/set-tai.c
2782     +++ b/tools/testing/selftests/timers/set-tai.c
2783     @@ -55,6 +55,7 @@ int main(int argc, char **argv)
2784     printf("tai offset started at %i\n", ret);
2785    
2786     printf("Checking tai offsets can be properly set: ");
2787     + fflush(stdout);
2788     for (i = 1; i <= 60; i++) {
2789     ret = set_tai(i);
2790     ret = get_tai();
2791     diff --git a/tools/testing/selftests/timers/set-tz.c b/tools/testing/selftests/timers/set-tz.c
2792     index 877fd5532fee..62bd33eb16f0 100644
2793     --- a/tools/testing/selftests/timers/set-tz.c
2794     +++ b/tools/testing/selftests/timers/set-tz.c
2795     @@ -65,6 +65,7 @@ int main(int argc, char **argv)
2796     printf("tz_minuteswest started at %i, dst at %i\n", min, dst);
2797    
2798     printf("Checking tz_minuteswest can be properly set: ");
2799     + fflush(stdout);
2800     for (i = -15*60; i < 15*60; i += 30) {
2801     ret = set_tz(i, dst);
2802     ret = get_tz_min();
2803     @@ -76,6 +77,7 @@ int main(int argc, char **argv)
2804     printf("[OK]\n");
2805    
2806     printf("Checking invalid tz_minuteswest values are caught: ");
2807     + fflush(stdout);
2808    
2809     if (!set_tz(-15*60-1, dst)) {
2810     printf("[FAILED] %i didn't return failure!\n", -15*60-1);
2811     diff --git a/tools/testing/selftests/timers/threadtest.c b/tools/testing/selftests/timers/threadtest.c
2812     index 759c9c06f1a0..cf3e48919874 100644
2813     --- a/tools/testing/selftests/timers/threadtest.c
2814     +++ b/tools/testing/selftests/timers/threadtest.c
2815     @@ -163,6 +163,7 @@ int main(int argc, char **argv)
2816     strftime(buf, 255, "%a, %d %b %Y %T %z", localtime(&start));
2817     printf("%s\n", buf);
2818     printf("Testing consistency with %i threads for %ld seconds: ", thread_count, runtime);
2819     + fflush(stdout);
2820    
2821     /* spawn */
2822     for (i = 0; i < thread_count; i++)
2823     diff --git a/tools/testing/selftests/timers/valid-adjtimex.c b/tools/testing/selftests/timers/valid-adjtimex.c
2824     index d9d3ab93b31a..5397de708d3c 100644
2825     --- a/tools/testing/selftests/timers/valid-adjtimex.c
2826     +++ b/tools/testing/selftests/timers/valid-adjtimex.c
2827     @@ -123,6 +123,7 @@ int validate_freq(void)
2828     /* Set the leap second insert flag */
2829    
2830     printf("Testing ADJ_FREQ... ");
2831     + fflush(stdout);
2832     for (i = 0; i < NUM_FREQ_VALID; i++) {
2833     tx.modes = ADJ_FREQUENCY;
2834     tx.freq = valid_freq[i];
2835     @@ -250,6 +251,7 @@ int set_bad_offset(long sec, long usec, int use_nano)
2836     int validate_set_offset(void)
2837     {
2838     printf("Testing ADJ_SETOFFSET... ");
2839     + fflush(stdout);
2840    
2841     /* Test valid values */
2842     if (set_offset(NSEC_PER_SEC - 1, 1))
2843     diff --git a/virt/kvm/arm/aarch32.c b/virt/kvm/arm/aarch32.c
2844     index 5abbe9b3c652..6880236974b8 100644
2845     --- a/virt/kvm/arm/aarch32.c
2846     +++ b/virt/kvm/arm/aarch32.c
2847     @@ -25,127 +25,6 @@
2848     #include <asm/kvm_emulate.h>
2849     #include <asm/kvm_hyp.h>
2850    
2851     -/*
2852     - * stolen from arch/arm/kernel/opcodes.c
2853     - *
2854     - * condition code lookup table
2855     - * index into the table is test code: EQ, NE, ... LT, GT, AL, NV
2856     - *
2857     - * bit position in short is condition code: NZCV
2858     - */
2859     -static const unsigned short cc_map[16] = {
2860     - 0xF0F0, /* EQ == Z set */
2861     - 0x0F0F, /* NE */
2862     - 0xCCCC, /* CS == C set */
2863     - 0x3333, /* CC */
2864     - 0xFF00, /* MI == N set */
2865     - 0x00FF, /* PL */
2866     - 0xAAAA, /* VS == V set */
2867     - 0x5555, /* VC */
2868     - 0x0C0C, /* HI == C set && Z clear */
2869     - 0xF3F3, /* LS == C clear || Z set */
2870     - 0xAA55, /* GE == (N==V) */
2871     - 0x55AA, /* LT == (N!=V) */
2872     - 0x0A05, /* GT == (!Z && (N==V)) */
2873     - 0xF5FA, /* LE == (Z || (N!=V)) */
2874     - 0xFFFF, /* AL always */
2875     - 0 /* NV */
2876     -};
2877     -
2878     -/*
2879     - * Check if a trapped instruction should have been executed or not.
2880     - */
2881     -bool __hyp_text kvm_condition_valid32(const struct kvm_vcpu *vcpu)
2882     -{
2883     - unsigned long cpsr;
2884     - u32 cpsr_cond;
2885     - int cond;
2886     -
2887     - /* Top two bits non-zero? Unconditional. */
2888     - if (kvm_vcpu_get_hsr(vcpu) >> 30)
2889     - return true;
2890     -
2891     - /* Is condition field valid? */
2892     - cond = kvm_vcpu_get_condition(vcpu);
2893     - if (cond == 0xE)
2894     - return true;
2895     -
2896     - cpsr = *vcpu_cpsr(vcpu);
2897     -
2898     - if (cond < 0) {
2899     - /* This can happen in Thumb mode: examine IT state. */
2900     - unsigned long it;
2901     -
2902     - it = ((cpsr >> 8) & 0xFC) | ((cpsr >> 25) & 0x3);
2903     -
2904     - /* it == 0 => unconditional. */
2905     - if (it == 0)
2906     - return true;
2907     -
2908     - /* The cond for this insn works out as the top 4 bits. */
2909     - cond = (it >> 4);
2910     - }
2911     -
2912     - cpsr_cond = cpsr >> 28;
2913     -
2914     - if (!((cc_map[cond] >> cpsr_cond) & 1))
2915     - return false;
2916     -
2917     - return true;
2918     -}
2919     -
2920     -/**
2921     - * adjust_itstate - adjust ITSTATE when emulating instructions in IT-block
2922     - * @vcpu: The VCPU pointer
2923     - *
2924     - * When exceptions occur while instructions are executed in Thumb IF-THEN
2925     - * blocks, the ITSTATE field of the CPSR is not advanced (updated), so we have
2926     - * to do this little bit of work manually. The fields map like this:
2927     - *
2928     - * IT[7:0] -> CPSR[26:25],CPSR[15:10]
2929     - */
2930     -static void __hyp_text kvm_adjust_itstate(struct kvm_vcpu *vcpu)
2931     -{
2932     - unsigned long itbits, cond;
2933     - unsigned long cpsr = *vcpu_cpsr(vcpu);
2934     - bool is_arm = !(cpsr & PSR_AA32_T_BIT);
2935     -
2936     - if (is_arm || !(cpsr & PSR_AA32_IT_MASK))
2937     - return;
2938     -
2939     - cond = (cpsr & 0xe000) >> 13;
2940     - itbits = (cpsr & 0x1c00) >> (10 - 2);
2941     - itbits |= (cpsr & (0x3 << 25)) >> 25;
2942     -
2943     - /* Perform ITAdvance (see page A2-52 in ARM DDI 0406C) */
2944     - if ((itbits & 0x7) == 0)
2945     - itbits = cond = 0;
2946     - else
2947     - itbits = (itbits << 1) & 0x1f;
2948     -
2949     - cpsr &= ~PSR_AA32_IT_MASK;
2950     - cpsr |= cond << 13;
2951     - cpsr |= (itbits & 0x1c) << (10 - 2);
2952     - cpsr |= (itbits & 0x3) << 25;
2953     - *vcpu_cpsr(vcpu) = cpsr;
2954     -}
2955     -
2956     -/**
2957     - * kvm_skip_instr - skip a trapped instruction and proceed to the next
2958     - * @vcpu: The vcpu pointer
2959     - */
2960     -void __hyp_text kvm_skip_instr32(struct kvm_vcpu *vcpu, bool is_wide_instr)
2961     -{
2962     - bool is_thumb;
2963     -
2964     - is_thumb = !!(*vcpu_cpsr(vcpu) & PSR_AA32_T_BIT);
2965     - if (is_thumb && !is_wide_instr)
2966     - *vcpu_pc(vcpu) += 2;
2967     - else
2968     - *vcpu_pc(vcpu) += 4;
2969     - kvm_adjust_itstate(vcpu);
2970     -}
2971     -
2972     /*
2973     * Table taken from ARMv8 ARM DDI0487B-B, table G1-10.
2974     */
2975     diff --git a/virt/kvm/arm/hyp/aarch32.c b/virt/kvm/arm/hyp/aarch32.c
2976     new file mode 100644
2977     index 000000000000..d31f267961e7
2978     --- /dev/null
2979     +++ b/virt/kvm/arm/hyp/aarch32.c
2980     @@ -0,0 +1,136 @@
2981     +// SPDX-License-Identifier: GPL-2.0
2982     +/*
2983     + * Hyp portion of the (not much of an) Emulation layer for 32bit guests.
2984     + *
2985     + * Copyright (C) 2012,2013 - ARM Ltd
2986     + * Author: Marc Zyngier <marc.zyngier@arm.com>
2987     + *
2988     + * based on arch/arm/kvm/emulate.c
2989     + * Copyright (C) 2012 - Virtual Open Systems and Columbia University
2990     + * Author: Christoffer Dall <c.dall@virtualopensystems.com>
2991     + */
2992     +
2993     +#include <linux/kvm_host.h>
2994     +#include <asm/kvm_emulate.h>
2995     +#include <asm/kvm_hyp.h>
2996     +
2997     +/*
2998     + * stolen from arch/arm/kernel/opcodes.c
2999     + *
3000     + * condition code lookup table
3001     + * index into the table is test code: EQ, NE, ... LT, GT, AL, NV
3002     + *
3003     + * bit position in short is condition code: NZCV
3004     + */
3005     +static const unsigned short cc_map[16] = {
3006     + 0xF0F0, /* EQ == Z set */
3007     + 0x0F0F, /* NE */
3008     + 0xCCCC, /* CS == C set */
3009     + 0x3333, /* CC */
3010     + 0xFF00, /* MI == N set */
3011     + 0x00FF, /* PL */
3012     + 0xAAAA, /* VS == V set */
3013     + 0x5555, /* VC */
3014     + 0x0C0C, /* HI == C set && Z clear */
3015     + 0xF3F3, /* LS == C clear || Z set */
3016     + 0xAA55, /* GE == (N==V) */
3017     + 0x55AA, /* LT == (N!=V) */
3018     + 0x0A05, /* GT == (!Z && (N==V)) */
3019     + 0xF5FA, /* LE == (Z || (N!=V)) */
3020     + 0xFFFF, /* AL always */
3021     + 0 /* NV */
3022     +};
3023     +
3024     +/*
3025     + * Check if a trapped instruction should have been executed or not.
3026     + */
3027     +bool __hyp_text kvm_condition_valid32(const struct kvm_vcpu *vcpu)
3028     +{
3029     + unsigned long cpsr;
3030     + u32 cpsr_cond;
3031     + int cond;
3032     +
3033     + /* Top two bits non-zero? Unconditional. */
3034     + if (kvm_vcpu_get_hsr(vcpu) >> 30)
3035     + return true;
3036     +
3037     + /* Is condition field valid? */
3038     + cond = kvm_vcpu_get_condition(vcpu);
3039     + if (cond == 0xE)
3040     + return true;
3041     +
3042     + cpsr = *vcpu_cpsr(vcpu);
3043     +
3044     + if (cond < 0) {
3045     + /* This can happen in Thumb mode: examine IT state. */
3046     + unsigned long it;
3047     +
3048     + it = ((cpsr >> 8) & 0xFC) | ((cpsr >> 25) & 0x3);
3049     +
3050     + /* it == 0 => unconditional. */
3051     + if (it == 0)
3052     + return true;
3053     +
3054     + /* The cond for this insn works out as the top 4 bits. */
3055     + cond = (it >> 4);
3056     + }
3057     +
3058     + cpsr_cond = cpsr >> 28;
3059     +
3060     + if (!((cc_map[cond] >> cpsr_cond) & 1))
3061     + return false;
3062     +
3063     + return true;
3064     +}
3065     +
3066     +/**
3067     + * adjust_itstate - adjust ITSTATE when emulating instructions in IT-block
3068     + * @vcpu: The VCPU pointer
3069     + *
3070     + * When exceptions occur while instructions are executed in Thumb IF-THEN
3071     + * blocks, the ITSTATE field of the CPSR is not advanced (updated), so we have
3072     + * to do this little bit of work manually. The fields map like this:
3073     + *
3074     + * IT[7:0] -> CPSR[26:25],CPSR[15:10]
3075     + */
3076     +static void __hyp_text kvm_adjust_itstate(struct kvm_vcpu *vcpu)
3077     +{
3078     + unsigned long itbits, cond;
3079     + unsigned long cpsr = *vcpu_cpsr(vcpu);
3080     + bool is_arm = !(cpsr & PSR_AA32_T_BIT);
3081     +
3082     + if (is_arm || !(cpsr & PSR_AA32_IT_MASK))
3083     + return;
3084     +
3085     + cond = (cpsr & 0xe000) >> 13;
3086     + itbits = (cpsr & 0x1c00) >> (10 - 2);
3087     + itbits |= (cpsr & (0x3 << 25)) >> 25;
3088     +
3089     + /* Perform ITAdvance (see page A2-52 in ARM DDI 0406C) */
3090     + if ((itbits & 0x7) == 0)
3091     + itbits = cond = 0;
3092     + else
3093     + itbits = (itbits << 1) & 0x1f;
3094     +
3095     + cpsr &= ~PSR_AA32_IT_MASK;
3096     + cpsr |= cond << 13;
3097     + cpsr |= (itbits & 0x1c) << (10 - 2);
3098     + cpsr |= (itbits & 0x3) << 25;
3099     + *vcpu_cpsr(vcpu) = cpsr;
3100     +}
3101     +
3102     +/**
3103     + * kvm_skip_instr - skip a trapped instruction and proceed to the next
3104     + * @vcpu: The vcpu pointer
3105     + */
3106     +void __hyp_text kvm_skip_instr32(struct kvm_vcpu *vcpu, bool is_wide_instr)
3107     +{
3108     + bool is_thumb;
3109     +
3110     + is_thumb = !!(*vcpu_cpsr(vcpu) & PSR_AA32_T_BIT);
3111     + if (is_thumb && !is_wide_instr)
3112     + *vcpu_pc(vcpu) += 2;
3113     + else
3114     + *vcpu_pc(vcpu) += 4;
3115     + kvm_adjust_itstate(vcpu);
3116     +}