Magellan Linux

Contents of /trunk/kernel-alx/patches-4.19/0169-4.19.70-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3466 - (show annotations) (download)
Tue Oct 29 10:31:27 2019 UTC (4 years, 6 months ago) by niro
File size: 100216 byte(s)
-linux-4.19.70
1 diff --git a/Makefile b/Makefile
2 index 677341239449..ecf8806cb71f 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 = 69
10 +SUBLEVEL = 70
11 EXTRAVERSION =
12 NAME = "People's Front"
13
14 diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
15 index bce06083685d..94babc3d0ec2 100644
16 --- a/arch/arm64/kernel/cpufeature.c
17 +++ b/arch/arm64/kernel/cpufeature.c
18 @@ -165,9 +165,17 @@ static const struct arm64_ftr_bits ftr_id_aa64pfr0[] = {
19 };
20
21 static const struct arm64_ftr_bits ftr_id_aa64mmfr0[] = {
22 - S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_TGRAN4_SHIFT, 4, ID_AA64MMFR0_TGRAN4_NI),
23 - S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_TGRAN64_SHIFT, 4, ID_AA64MMFR0_TGRAN64_NI),
24 - ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_TGRAN16_SHIFT, 4, ID_AA64MMFR0_TGRAN16_NI),
25 + /*
26 + * We already refuse to boot CPUs that don't support our configured
27 + * page size, so we can only detect mismatches for a page size other
28 + * than the one we're currently using. Unfortunately, SoCs like this
29 + * exist in the wild so, even though we don't like it, we'll have to go
30 + * along with it and treat them as non-strict.
31 + */
32 + S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_TGRAN4_SHIFT, 4, ID_AA64MMFR0_TGRAN4_NI),
33 + S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_TGRAN64_SHIFT, 4, ID_AA64MMFR0_TGRAN64_NI),
34 + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_TGRAN16_SHIFT, 4, ID_AA64MMFR0_TGRAN16_NI),
35 +
36 ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_BIGENDEL0_SHIFT, 4, 0),
37 /* Linux shouldn't care about secure memory */
38 ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_SNSMEM_SHIFT, 4, 0),
39 diff --git a/arch/powerpc/kvm/book3s_64_vio.c b/arch/powerpc/kvm/book3s_64_vio.c
40 index 9a3f2646ecc7..07a8004c3c23 100644
41 --- a/arch/powerpc/kvm/book3s_64_vio.c
42 +++ b/arch/powerpc/kvm/book3s_64_vio.c
43 @@ -602,8 +602,10 @@ long kvmppc_h_put_tce_indirect(struct kvm_vcpu *vcpu,
44
45 if (kvmppc_gpa_to_ua(vcpu->kvm,
46 tce & ~(TCE_PCI_READ | TCE_PCI_WRITE),
47 - &ua, NULL))
48 - return H_PARAMETER;
49 + &ua, NULL)) {
50 + ret = H_PARAMETER;
51 + goto unlock_exit;
52 + }
53
54 list_for_each_entry_lockless(stit, &stt->iommu_tables, next) {
55 ret = kvmppc_tce_iommu_map(vcpu->kvm, stt,
56 diff --git a/arch/powerpc/kvm/book3s_64_vio_hv.c b/arch/powerpc/kvm/book3s_64_vio_hv.c
57 index 6821ead4b4eb..eb8b11515a7f 100644
58 --- a/arch/powerpc/kvm/book3s_64_vio_hv.c
59 +++ b/arch/powerpc/kvm/book3s_64_vio_hv.c
60 @@ -528,8 +528,10 @@ long kvmppc_rm_h_put_tce_indirect(struct kvm_vcpu *vcpu,
61 ua = 0;
62 if (kvmppc_gpa_to_ua(vcpu->kvm,
63 tce & ~(TCE_PCI_READ | TCE_PCI_WRITE),
64 - &ua, NULL))
65 - return H_PARAMETER;
66 + &ua, NULL)) {
67 + ret = H_PARAMETER;
68 + goto unlock_exit;
69 + }
70
71 list_for_each_entry_lockless(stit, &stt->iommu_tables, next) {
72 ret = kvmppc_rm_tce_iommu_map(vcpu->kvm, stt,
73 diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
74 index b316bd61a6ac..90be3a1506d3 100644
75 --- a/arch/x86/kernel/apic/apic.c
76 +++ b/arch/x86/kernel/apic/apic.c
77 @@ -1140,6 +1140,10 @@ void clear_local_APIC(void)
78 apic_write(APIC_LVT0, v | APIC_LVT_MASKED);
79 v = apic_read(APIC_LVT1);
80 apic_write(APIC_LVT1, v | APIC_LVT_MASKED);
81 + if (!x2apic_enabled()) {
82 + v = apic_read(APIC_LDR) & ~APIC_LDR_MASK;
83 + apic_write(APIC_LDR, v);
84 + }
85 if (maxlvt >= 4) {
86 v = apic_read(APIC_LVTPC);
87 apic_write(APIC_LVTPC, v | APIC_LVT_MASKED);
88 diff --git a/arch/x86/kernel/apic/bigsmp_32.c b/arch/x86/kernel/apic/bigsmp_32.c
89 index afee386ff711..caedd8d60d36 100644
90 --- a/arch/x86/kernel/apic/bigsmp_32.c
91 +++ b/arch/x86/kernel/apic/bigsmp_32.c
92 @@ -38,32 +38,12 @@ static int bigsmp_early_logical_apicid(int cpu)
93 return early_per_cpu(x86_cpu_to_apicid, cpu);
94 }
95
96 -static inline unsigned long calculate_ldr(int cpu)
97 -{
98 - unsigned long val, id;
99 -
100 - val = apic_read(APIC_LDR) & ~APIC_LDR_MASK;
101 - id = per_cpu(x86_bios_cpu_apicid, cpu);
102 - val |= SET_APIC_LOGICAL_ID(id);
103 -
104 - return val;
105 -}
106 -
107 /*
108 - * Set up the logical destination ID.
109 - *
110 - * Intel recommends to set DFR, LDR and TPR before enabling
111 - * an APIC. See e.g. "AP-388 82489DX User's Manual" (Intel
112 - * document number 292116). So here it goes...
113 + * bigsmp enables physical destination mode
114 + * and doesn't use LDR and DFR
115 */
116 static void bigsmp_init_apic_ldr(void)
117 {
118 - unsigned long val;
119 - int cpu = smp_processor_id();
120 -
121 - apic_write(APIC_DFR, APIC_DFR_FLAT);
122 - val = calculate_ldr(cpu);
123 - apic_write(APIC_LDR, val);
124 }
125
126 static void bigsmp_setup_apic_routing(void)
127 diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
128 index aeba77881d85..516ec7586a5f 100644
129 --- a/arch/x86/kernel/ptrace.c
130 +++ b/arch/x86/kernel/ptrace.c
131 @@ -652,11 +652,10 @@ static unsigned long ptrace_get_debugreg(struct task_struct *tsk, int n)
132 {
133 struct thread_struct *thread = &tsk->thread;
134 unsigned long val = 0;
135 - int index = n;
136
137 if (n < HBP_NUM) {
138 + int index = array_index_nospec(n, HBP_NUM);
139 struct perf_event *bp = thread->ptrace_bps[index];
140 - index = array_index_nospec(index, HBP_NUM);
141
142 if (bp)
143 val = bp->hw.info.address;
144 diff --git a/arch/x86/kernel/uprobes.c b/arch/x86/kernel/uprobes.c
145 index deb576b23b7c..9119859ba787 100644
146 --- a/arch/x86/kernel/uprobes.c
147 +++ b/arch/x86/kernel/uprobes.c
148 @@ -521,9 +521,12 @@ struct uprobe_xol_ops {
149 void (*abort)(struct arch_uprobe *, struct pt_regs *);
150 };
151
152 -static inline int sizeof_long(void)
153 +static inline int sizeof_long(struct pt_regs *regs)
154 {
155 - return in_ia32_syscall() ? 4 : 8;
156 + /*
157 + * Check registers for mode as in_xxx_syscall() does not apply here.
158 + */
159 + return user_64bit_mode(regs) ? 8 : 4;
160 }
161
162 static int default_pre_xol_op(struct arch_uprobe *auprobe, struct pt_regs *regs)
163 @@ -534,9 +537,9 @@ static int default_pre_xol_op(struct arch_uprobe *auprobe, struct pt_regs *regs)
164
165 static int emulate_push_stack(struct pt_regs *regs, unsigned long val)
166 {
167 - unsigned long new_sp = regs->sp - sizeof_long();
168 + unsigned long new_sp = regs->sp - sizeof_long(regs);
169
170 - if (copy_to_user((void __user *)new_sp, &val, sizeof_long()))
171 + if (copy_to_user((void __user *)new_sp, &val, sizeof_long(regs)))
172 return -EFAULT;
173
174 regs->sp = new_sp;
175 @@ -569,7 +572,7 @@ static int default_post_xol_op(struct arch_uprobe *auprobe, struct pt_regs *regs
176 long correction = utask->vaddr - utask->xol_vaddr;
177 regs->ip += correction;
178 } else if (auprobe->defparam.fixups & UPROBE_FIX_CALL) {
179 - regs->sp += sizeof_long(); /* Pop incorrect return address */
180 + regs->sp += sizeof_long(regs); /* Pop incorrect return address */
181 if (emulate_push_stack(regs, utask->vaddr + auprobe->defparam.ilen))
182 return -ERESTART;
183 }
184 @@ -688,7 +691,7 @@ static int branch_post_xol_op(struct arch_uprobe *auprobe, struct pt_regs *regs)
185 * "call" insn was executed out-of-line. Just restore ->sp and restart.
186 * We could also restore ->ip and try to call branch_emulate_op() again.
187 */
188 - regs->sp += sizeof_long();
189 + regs->sp += sizeof_long(regs);
190 return -ERESTART;
191 }
192
193 @@ -1068,7 +1071,7 @@ bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs)
194 unsigned long
195 arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs *regs)
196 {
197 - int rasize = sizeof_long(), nleft;
198 + int rasize = sizeof_long(regs), nleft;
199 unsigned long orig_ret_vaddr = 0; /* clear high bits for 32-bit apps */
200
201 if (copy_from_user(&orig_ret_vaddr, (void __user *)regs->sp, rasize))
202 diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
203 index 031bd7f91f98..5f5bc5976804 100644
204 --- a/arch/x86/kvm/lapic.c
205 +++ b/arch/x86/kvm/lapic.c
206 @@ -209,6 +209,9 @@ static void recalculate_apic_map(struct kvm *kvm)
207 if (!apic_x2apic_mode(apic) && !new->phys_map[xapic_id])
208 new->phys_map[xapic_id] = apic;
209
210 + if (!kvm_apic_sw_enabled(apic))
211 + continue;
212 +
213 ldr = kvm_lapic_get_reg(apic, APIC_LDR);
214
215 if (apic_x2apic_mode(apic)) {
216 @@ -252,6 +255,8 @@ static inline void apic_set_spiv(struct kvm_lapic *apic, u32 val)
217 recalculate_apic_map(apic->vcpu->kvm);
218 } else
219 static_key_slow_inc(&apic_sw_disabled.key);
220 +
221 + recalculate_apic_map(apic->vcpu->kvm);
222 }
223 }
224
225 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
226 index e10a7a42449b..c27ce6059090 100644
227 --- a/arch/x86/kvm/x86.c
228 +++ b/arch/x86/kvm/x86.c
229 @@ -6308,12 +6308,13 @@ restart:
230 unsigned long rflags = kvm_x86_ops->get_rflags(vcpu);
231 toggle_interruptibility(vcpu, ctxt->interruptibility);
232 vcpu->arch.emulate_regs_need_sync_to_vcpu = false;
233 - kvm_rip_write(vcpu, ctxt->eip);
234 - if (r == EMULATE_DONE && ctxt->tf)
235 - kvm_vcpu_do_singlestep(vcpu, &r);
236 if (!ctxt->have_exception ||
237 - exception_type(ctxt->exception.vector) == EXCPT_TRAP)
238 + exception_type(ctxt->exception.vector) == EXCPT_TRAP) {
239 + kvm_rip_write(vcpu, ctxt->eip);
240 + if (r == EMULATE_DONE && ctxt->tf)
241 + kvm_vcpu_do_singlestep(vcpu, &r);
242 __kvm_set_rflags(vcpu, ctxt->eflags);
243 + }
244
245 /*
246 * For STI, interrupts are shadowed; so KVM_REQ_EVENT will
247 diff --git a/drivers/auxdisplay/panel.c b/drivers/auxdisplay/panel.c
248 index 3b25a643058c..0b8e2a7d6e93 100644
249 --- a/drivers/auxdisplay/panel.c
250 +++ b/drivers/auxdisplay/panel.c
251 @@ -1618,6 +1618,8 @@ static void panel_attach(struct parport *port)
252 return;
253
254 err_lcd_unreg:
255 + if (scan_timer.function)
256 + del_timer_sync(&scan_timer);
257 if (lcd.enabled)
258 charlcd_unregister(lcd.charlcd);
259 err_unreg_device:
260 diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
261 index a4bc74e72c39..55869b362fdf 100644
262 --- a/drivers/block/xen-blkback/xenbus.c
263 +++ b/drivers/block/xen-blkback/xenbus.c
264 @@ -974,6 +974,7 @@ static int read_per_ring_refs(struct xen_blkif_ring *ring, const char *dir)
265 }
266 blkif->nr_ring_pages = nr_grefs;
267
268 + err = -ENOMEM;
269 for (i = 0; i < nr_grefs * XEN_BLKIF_REQS_PER_PAGE; i++) {
270 req = kzalloc(sizeof(*req), GFP_KERNEL);
271 if (!req)
272 @@ -996,7 +997,7 @@ static int read_per_ring_refs(struct xen_blkif_ring *ring, const char *dir)
273 err = xen_blkif_map(ring, ring_ref, nr_grefs, evtchn);
274 if (err) {
275 xenbus_dev_fatal(dev, err, "mapping ring-ref port %u", evtchn);
276 - return err;
277 + goto fail;
278 }
279
280 return 0;
281 @@ -1016,8 +1017,7 @@ fail:
282 }
283 kfree(req);
284 }
285 - return -ENOMEM;
286 -
287 + return err;
288 }
289
290 static int connect_ring(struct backend_info *be)
291 diff --git a/drivers/bus/hisi_lpc.c b/drivers/bus/hisi_lpc.c
292 index d5f85455fa62..e31c02dc7770 100644
293 --- a/drivers/bus/hisi_lpc.c
294 +++ b/drivers/bus/hisi_lpc.c
295 @@ -456,6 +456,17 @@ struct hisi_lpc_acpi_cell {
296 size_t pdata_size;
297 };
298
299 +static void hisi_lpc_acpi_remove(struct device *hostdev)
300 +{
301 + struct acpi_device *adev = ACPI_COMPANION(hostdev);
302 + struct acpi_device *child;
303 +
304 + device_for_each_child(hostdev, NULL, hisi_lpc_acpi_remove_subdev);
305 +
306 + list_for_each_entry(child, &adev->children, node)
307 + acpi_device_clear_enumerated(child);
308 +}
309 +
310 /*
311 * hisi_lpc_acpi_probe - probe children for ACPI FW
312 * @hostdev: LPC host device pointer
313 @@ -556,8 +567,7 @@ static int hisi_lpc_acpi_probe(struct device *hostdev)
314 return 0;
315
316 fail:
317 - device_for_each_child(hostdev, NULL,
318 - hisi_lpc_acpi_remove_subdev);
319 + hisi_lpc_acpi_remove(hostdev);
320 return ret;
321 }
322
323 @@ -570,6 +580,10 @@ static int hisi_lpc_acpi_probe(struct device *dev)
324 {
325 return -ENODEV;
326 }
327 +
328 +static void hisi_lpc_acpi_remove(struct device *hostdev)
329 +{
330 +}
331 #endif // CONFIG_ACPI
332
333 /*
334 @@ -607,24 +621,27 @@ static int hisi_lpc_probe(struct platform_device *pdev)
335 range->fwnode = dev->fwnode;
336 range->flags = LOGIC_PIO_INDIRECT;
337 range->size = PIO_INDIRECT_SIZE;
338 + range->hostdata = lpcdev;
339 + range->ops = &hisi_lpc_ops;
340 + lpcdev->io_host = range;
341
342 ret = logic_pio_register_range(range);
343 if (ret) {
344 dev_err(dev, "register IO range failed (%d)!\n", ret);
345 return ret;
346 }
347 - lpcdev->io_host = range;
348
349 /* register the LPC host PIO resources */
350 if (acpi_device)
351 ret = hisi_lpc_acpi_probe(dev);
352 else
353 ret = of_platform_populate(dev->of_node, NULL, NULL, dev);
354 - if (ret)
355 + if (ret) {
356 + logic_pio_unregister_range(range);
357 return ret;
358 + }
359
360 - lpcdev->io_host->hostdata = lpcdev;
361 - lpcdev->io_host->ops = &hisi_lpc_ops;
362 + dev_set_drvdata(dev, lpcdev);
363
364 io_end = lpcdev->io_host->io_start + lpcdev->io_host->size;
365 dev_info(dev, "registered range [%pa - %pa]\n",
366 @@ -633,6 +650,23 @@ static int hisi_lpc_probe(struct platform_device *pdev)
367 return ret;
368 }
369
370 +static int hisi_lpc_remove(struct platform_device *pdev)
371 +{
372 + struct device *dev = &pdev->dev;
373 + struct acpi_device *acpi_device = ACPI_COMPANION(dev);
374 + struct hisi_lpc_dev *lpcdev = dev_get_drvdata(dev);
375 + struct logic_pio_hwaddr *range = lpcdev->io_host;
376 +
377 + if (acpi_device)
378 + hisi_lpc_acpi_remove(dev);
379 + else
380 + of_platform_depopulate(dev);
381 +
382 + logic_pio_unregister_range(range);
383 +
384 + return 0;
385 +}
386 +
387 static const struct of_device_id hisi_lpc_of_match[] = {
388 { .compatible = "hisilicon,hip06-lpc", },
389 { .compatible = "hisilicon,hip07-lpc", },
390 @@ -646,5 +680,6 @@ static struct platform_driver hisi_lpc_driver = {
391 .acpi_match_table = ACPI_PTR(hisi_lpc_acpi_match),
392 },
393 .probe = hisi_lpc_probe,
394 + .remove = hisi_lpc_remove,
395 };
396 builtin_platform_driver(hisi_lpc_driver);
397 diff --git a/drivers/crypto/ccp/ccp-dev.c b/drivers/crypto/ccp/ccp-dev.c
398 index 9b6d8972a565..b8c94a01cfc9 100644
399 --- a/drivers/crypto/ccp/ccp-dev.c
400 +++ b/drivers/crypto/ccp/ccp-dev.c
401 @@ -543,6 +543,10 @@ int ccp_dev_suspend(struct sp_device *sp, pm_message_t state)
402 unsigned long flags;
403 unsigned int i;
404
405 + /* If there's no device there's nothing to do */
406 + if (!ccp)
407 + return 0;
408 +
409 spin_lock_irqsave(&ccp->cmd_lock, flags);
410
411 ccp->suspending = 1;
412 @@ -567,6 +571,10 @@ int ccp_dev_resume(struct sp_device *sp)
413 unsigned long flags;
414 unsigned int i;
415
416 + /* If there's no device there's nothing to do */
417 + if (!ccp)
418 + return 0;
419 +
420 spin_lock_irqsave(&ccp->cmd_lock, flags);
421
422 ccp->suspending = 0;
423 diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c
424 index f4edfc56f34e..3d55405c49ca 100644
425 --- a/drivers/dma/ste_dma40.c
426 +++ b/drivers/dma/ste_dma40.c
427 @@ -142,7 +142,7 @@ enum d40_events {
428 * when the DMA hw is powered off.
429 * TODO: Add save/restore of D40_DREG_GCC on dma40 v3 or later, if that works.
430 */
431 -static u32 d40_backup_regs[] = {
432 +static __maybe_unused u32 d40_backup_regs[] = {
433 D40_DREG_LCPA,
434 D40_DREG_LCLA,
435 D40_DREG_PRMSE,
436 @@ -211,7 +211,7 @@ static u32 d40_backup_regs_v4b[] = {
437
438 #define BACKUP_REGS_SZ_V4B ARRAY_SIZE(d40_backup_regs_v4b)
439
440 -static u32 d40_backup_regs_chan[] = {
441 +static __maybe_unused u32 d40_backup_regs_chan[] = {
442 D40_CHAN_REG_SSCFG,
443 D40_CHAN_REG_SSELT,
444 D40_CHAN_REG_SSPTR,
445 diff --git a/drivers/dma/stm32-mdma.c b/drivers/dma/stm32-mdma.c
446 index 06dd1725375e..8c3c3e5b812a 100644
447 --- a/drivers/dma/stm32-mdma.c
448 +++ b/drivers/dma/stm32-mdma.c
449 @@ -1376,7 +1376,7 @@ static irqreturn_t stm32_mdma_irq_handler(int irq, void *devid)
450
451 chan = &dmadev->chan[id];
452 if (!chan) {
453 - dev_err(chan2dev(chan), "MDMA channel not initialized\n");
454 + dev_dbg(mdma2dev(dmadev), "MDMA channel not initialized\n");
455 goto exit;
456 }
457
458 diff --git a/drivers/dma/ti/omap-dma.c b/drivers/dma/ti/omap-dma.c
459 index a4a931ddf6f6..aeb9c29e5255 100644
460 --- a/drivers/dma/ti/omap-dma.c
461 +++ b/drivers/dma/ti/omap-dma.c
462 @@ -1237,7 +1237,7 @@ static struct dma_async_tx_descriptor *omap_dma_prep_dma_interleaved(
463 if (src_icg) {
464 d->ccr |= CCR_SRC_AMODE_DBLIDX;
465 d->ei = 1;
466 - d->fi = src_icg;
467 + d->fi = src_icg + 1;
468 } else if (xt->src_inc) {
469 d->ccr |= CCR_SRC_AMODE_POSTINC;
470 d->fi = 0;
471 @@ -1252,7 +1252,7 @@ static struct dma_async_tx_descriptor *omap_dma_prep_dma_interleaved(
472 if (dst_icg) {
473 d->ccr |= CCR_DST_AMODE_DBLIDX;
474 sg->ei = 1;
475 - sg->fi = dst_icg;
476 + sg->fi = dst_icg + 1;
477 } else if (xt->dst_inc) {
478 d->ccr |= CCR_DST_AMODE_POSTINC;
479 sg->fi = 0;
480 diff --git a/drivers/fsi/fsi-scom.c b/drivers/fsi/fsi-scom.c
481 index df94021dd9d1..fdc0e458dbaa 100644
482 --- a/drivers/fsi/fsi-scom.c
483 +++ b/drivers/fsi/fsi-scom.c
484 @@ -47,8 +47,7 @@
485 #define SCOM_STATUS_PIB_RESP_MASK 0x00007000
486 #define SCOM_STATUS_PIB_RESP_SHIFT 12
487
488 -#define SCOM_STATUS_ANY_ERR (SCOM_STATUS_ERR_SUMMARY | \
489 - SCOM_STATUS_PROTECTION | \
490 +#define SCOM_STATUS_ANY_ERR (SCOM_STATUS_PROTECTION | \
491 SCOM_STATUS_PARITY | \
492 SCOM_STATUS_PIB_ABORT | \
493 SCOM_STATUS_PIB_RESP_MASK)
494 @@ -260,11 +259,6 @@ static int handle_fsi2pib_status(struct scom_device *scom, uint32_t status)
495 /* Return -EBUSY on PIB abort to force a retry */
496 if (status & SCOM_STATUS_PIB_ABORT)
497 return -EBUSY;
498 - if (status & SCOM_STATUS_ERR_SUMMARY) {
499 - fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, &dummy,
500 - sizeof(uint32_t));
501 - return -EIO;
502 - }
503 return 0;
504 }
505
506 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
507 index 92b11de19581..354c8b6106dc 100644
508 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
509 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
510 @@ -575,6 +575,7 @@ static const struct amdgpu_px_quirk amdgpu_px_quirk_list[] = {
511 { 0x1002, 0x6900, 0x1002, 0x0124, AMDGPU_PX_QUIRK_FORCE_ATPX },
512 { 0x1002, 0x6900, 0x1028, 0x0812, AMDGPU_PX_QUIRK_FORCE_ATPX },
513 { 0x1002, 0x6900, 0x1028, 0x0813, AMDGPU_PX_QUIRK_FORCE_ATPX },
514 + { 0x1002, 0x699f, 0x1028, 0x0814, AMDGPU_PX_QUIRK_FORCE_ATPX },
515 { 0x1002, 0x6900, 0x1025, 0x125A, AMDGPU_PX_QUIRK_FORCE_ATPX },
516 { 0x1002, 0x6900, 0x17AA, 0x3806, AMDGPU_PX_QUIRK_FORCE_ATPX },
517 { 0, 0, 0, 0, 0 },
518 diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
519 index 373700c05a00..224fa1ef87ff 100644
520 --- a/drivers/gpu/drm/ast/ast_main.c
521 +++ b/drivers/gpu/drm/ast/ast_main.c
522 @@ -131,8 +131,8 @@ static int ast_detect_chip(struct drm_device *dev, bool *need_post)
523
524
525 /* Enable extended register access */
526 - ast_enable_mmio(dev);
527 ast_open_key(ast);
528 + ast_enable_mmio(dev);
529
530 /* Find out whether P2A works or whether to use device-tree */
531 ast_detect_config_mode(dev, &scu_rev);
532 @@ -576,6 +576,9 @@ void ast_driver_unload(struct drm_device *dev)
533 {
534 struct ast_private *ast = dev->dev_private;
535
536 + /* enable standard VGA decode */
537 + ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xa1, 0x04);
538 +
539 ast_release_firmware(dev);
540 kfree(ast->dp501_fw_addr);
541 ast_mode_fini(dev);
542 diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
543 index 8bb355d5d43d..9d92d2d2fcfc 100644
544 --- a/drivers/gpu/drm/ast/ast_mode.c
545 +++ b/drivers/gpu/drm/ast/ast_mode.c
546 @@ -600,7 +600,7 @@ static int ast_crtc_mode_set(struct drm_crtc *crtc,
547 return -EINVAL;
548 ast_open_key(ast);
549
550 - ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xa1, 0xff, 0x04);
551 + ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xa1, 0x06);
552
553 ast_set_std_reg(crtc, adjusted_mode, &vbios_mode);
554 ast_set_crtc_reg(crtc, adjusted_mode, &vbios_mode);
555 diff --git a/drivers/gpu/drm/ast/ast_post.c b/drivers/gpu/drm/ast/ast_post.c
556 index f7d421359d56..c1d1ac51d1c2 100644
557 --- a/drivers/gpu/drm/ast/ast_post.c
558 +++ b/drivers/gpu/drm/ast/ast_post.c
559 @@ -46,7 +46,7 @@ void ast_enable_mmio(struct drm_device *dev)
560 {
561 struct ast_private *ast = dev->dev_private;
562
563 - ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xa1, 0xff, 0x04);
564 + ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xa1, 0x06);
565 }
566
567
568 diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti-tfp410.c
569 index c3e32138c6bb..9dc109df0808 100644
570 --- a/drivers/gpu/drm/bridge/ti-tfp410.c
571 +++ b/drivers/gpu/drm/bridge/ti-tfp410.c
572 @@ -64,7 +64,12 @@ static int tfp410_get_modes(struct drm_connector *connector)
573
574 drm_connector_update_edid_property(connector, edid);
575
576 - return drm_add_edid_modes(connector, edid);
577 + ret = drm_add_edid_modes(connector, edid);
578 +
579 + kfree(edid);
580 +
581 + return ret;
582 +
583 fallback:
584 /* No EDID, fallback on the XGA standard modes */
585 ret = drm_add_modes_noedid(connector, 1920, 1200);
586 diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
587 index f8cfd16be534..a4b4ab7b9f8e 100644
588 --- a/drivers/gpu/drm/i915/i915_drv.c
589 +++ b/drivers/gpu/drm/i915/i915_drv.c
590 @@ -1120,6 +1120,12 @@ static int i915_driver_init_hw(struct drm_i915_private *dev_priv)
591
592 pci_set_master(pdev);
593
594 + /*
595 + * We don't have a max segment size, so set it to the max so sg's
596 + * debugging layer doesn't complain
597 + */
598 + dma_set_max_seg_size(&pdev->dev, UINT_MAX);
599 +
600 /* overlay on gen2 is broken and can't address above 1G */
601 if (IS_GEN2(dev_priv)) {
602 ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(30));
603 diff --git a/drivers/gpu/drm/i915/i915_vgpu.c b/drivers/gpu/drm/i915/i915_vgpu.c
604 index 869cf4a3b6de..a6cb3e034dd5 100644
605 --- a/drivers/gpu/drm/i915/i915_vgpu.c
606 +++ b/drivers/gpu/drm/i915/i915_vgpu.c
607 @@ -100,6 +100,9 @@ static struct _balloon_info_ bl_info;
608 static void vgt_deballoon_space(struct i915_ggtt *ggtt,
609 struct drm_mm_node *node)
610 {
611 + if (!drm_mm_node_allocated(node))
612 + return;
613 +
614 DRM_DEBUG_DRIVER("deballoon space: range [0x%llx - 0x%llx] %llu KiB.\n",
615 node->start,
616 node->start + node->size,
617 diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c
618 index 0ef0c6448d53..01fa98299bae 100644
619 --- a/drivers/gpu/drm/i915/intel_device_info.c
620 +++ b/drivers/gpu/drm/i915/intel_device_info.c
621 @@ -474,7 +474,7 @@ static void broadwell_sseu_info_init(struct drm_i915_private *dev_priv)
622 u8 eu_disabled_mask;
623 u32 n_disabled;
624
625 - if (!(sseu->subslice_mask[ss] & BIT(ss)))
626 + if (!(sseu->subslice_mask[s] & BIT(ss)))
627 /* skip disabled subslice */
628 continue;
629
630 diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
631 index 0fb300d41a09..e1868776da25 100644
632 --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
633 +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
634 @@ -184,6 +184,12 @@ static void tilcdc_fini(struct drm_device *dev)
635 {
636 struct tilcdc_drm_private *priv = dev->dev_private;
637
638 +#ifdef CONFIG_CPU_FREQ
639 + if (priv->freq_transition.notifier_call)
640 + cpufreq_unregister_notifier(&priv->freq_transition,
641 + CPUFREQ_TRANSITION_NOTIFIER);
642 +#endif
643 +
644 if (priv->crtc)
645 tilcdc_crtc_shutdown(priv->crtc);
646
647 @@ -198,12 +204,6 @@ static void tilcdc_fini(struct drm_device *dev)
648 drm_mode_config_cleanup(dev);
649 tilcdc_remove_external_device(dev);
650
651 -#ifdef CONFIG_CPU_FREQ
652 - if (priv->freq_transition.notifier_call)
653 - cpufreq_unregister_notifier(&priv->freq_transition,
654 - CPUFREQ_TRANSITION_NOTIFIER);
655 -#endif
656 -
657 if (priv->clk)
658 clk_put(priv->clk);
659
660 @@ -274,17 +274,6 @@ static int tilcdc_init(struct drm_driver *ddrv, struct device *dev)
661 goto init_failed;
662 }
663
664 -#ifdef CONFIG_CPU_FREQ
665 - priv->freq_transition.notifier_call = cpufreq_transition;
666 - ret = cpufreq_register_notifier(&priv->freq_transition,
667 - CPUFREQ_TRANSITION_NOTIFIER);
668 - if (ret) {
669 - dev_err(dev, "failed to register cpufreq notifier\n");
670 - priv->freq_transition.notifier_call = NULL;
671 - goto init_failed;
672 - }
673 -#endif
674 -
675 if (of_property_read_u32(node, "max-bandwidth", &priv->max_bandwidth))
676 priv->max_bandwidth = TILCDC_DEFAULT_MAX_BANDWIDTH;
677
678 @@ -361,6 +350,17 @@ static int tilcdc_init(struct drm_driver *ddrv, struct device *dev)
679 }
680 modeset_init(ddev);
681
682 +#ifdef CONFIG_CPU_FREQ
683 + priv->freq_transition.notifier_call = cpufreq_transition;
684 + ret = cpufreq_register_notifier(&priv->freq_transition,
685 + CPUFREQ_TRANSITION_NOTIFIER);
686 + if (ret) {
687 + dev_err(dev, "failed to register cpufreq notifier\n");
688 + priv->freq_transition.notifier_call = NULL;
689 + goto init_failed;
690 + }
691 +#endif
692 +
693 if (priv->is_componentized) {
694 ret = component_bind_all(dev, ddev);
695 if (ret < 0)
696 diff --git a/drivers/hwtracing/intel_th/pci.c b/drivers/hwtracing/intel_th/pci.c
697 index e759ac0d48be..968319f4e5f1 100644
698 --- a/drivers/hwtracing/intel_th/pci.c
699 +++ b/drivers/hwtracing/intel_th/pci.c
700 @@ -140,6 +140,11 @@ static const struct pci_device_id intel_th_pci_id_table[] = {
701 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa1a6),
702 .driver_data = (kernel_ulong_t)0,
703 },
704 + {
705 + /* Lewisburg PCH */
706 + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa226),
707 + .driver_data = (kernel_ulong_t)0,
708 + },
709 {
710 /* Gemini Lake */
711 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x318e),
712 @@ -175,6 +180,11 @@ static const struct pci_device_id intel_th_pci_id_table[] = {
713 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x45c5),
714 .driver_data = (kernel_ulong_t)&intel_th_2x,
715 },
716 + {
717 + /* Tiger Lake PCH */
718 + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa0a6),
719 + .driver_data = (kernel_ulong_t)&intel_th_2x,
720 + },
721 { 0 },
722 };
723
724 diff --git a/drivers/hwtracing/stm/core.c b/drivers/hwtracing/stm/core.c
725 index 9ec9197edffa..eeba421dc823 100644
726 --- a/drivers/hwtracing/stm/core.c
727 +++ b/drivers/hwtracing/stm/core.c
728 @@ -1098,7 +1098,6 @@ int stm_source_register_device(struct device *parent,
729
730 err:
731 put_device(&src->dev);
732 - kfree(src);
733
734 return err;
735 }
736 diff --git a/drivers/i2c/busses/i2c-emev2.c b/drivers/i2c/busses/i2c-emev2.c
737 index 35b302d983e0..959d4912ec0d 100644
738 --- a/drivers/i2c/busses/i2c-emev2.c
739 +++ b/drivers/i2c/busses/i2c-emev2.c
740 @@ -69,6 +69,7 @@ struct em_i2c_device {
741 struct completion msg_done;
742 struct clk *sclk;
743 struct i2c_client *slave;
744 + int irq;
745 };
746
747 static inline void em_clear_set_bit(struct em_i2c_device *priv, u8 clear, u8 set, u8 reg)
748 @@ -339,6 +340,12 @@ static int em_i2c_unreg_slave(struct i2c_client *slave)
749
750 writeb(0, priv->base + I2C_OFS_SVA0);
751
752 + /*
753 + * Wait for interrupt to finish. New slave irqs cannot happen because we
754 + * cleared the slave address and, thus, only extension codes will be
755 + * detected which do not use the slave ptr.
756 + */
757 + synchronize_irq(priv->irq);
758 priv->slave = NULL;
759
760 return 0;
761 @@ -355,7 +362,7 @@ static int em_i2c_probe(struct platform_device *pdev)
762 {
763 struct em_i2c_device *priv;
764 struct resource *r;
765 - int irq, ret;
766 + int ret;
767
768 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
769 if (!priv)
770 @@ -390,8 +397,8 @@ static int em_i2c_probe(struct platform_device *pdev)
771
772 em_i2c_reset(&priv->adap);
773
774 - irq = platform_get_irq(pdev, 0);
775 - ret = devm_request_irq(&pdev->dev, irq, em_i2c_irq_handler, 0,
776 + priv->irq = platform_get_irq(pdev, 0);
777 + ret = devm_request_irq(&pdev->dev, priv->irq, em_i2c_irq_handler, 0,
778 "em_i2c", priv);
779 if (ret)
780 goto err_clk;
781 @@ -401,7 +408,8 @@ static int em_i2c_probe(struct platform_device *pdev)
782 if (ret)
783 goto err_clk;
784
785 - dev_info(&pdev->dev, "Added i2c controller %d, irq %d\n", priv->adap.nr, irq);
786 + dev_info(&pdev->dev, "Added i2c controller %d, irq %d\n", priv->adap.nr,
787 + priv->irq);
788
789 return 0;
790
791 diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
792 index 90946a8b9a75..9ff3371ec385 100644
793 --- a/drivers/i2c/busses/i2c-piix4.c
794 +++ b/drivers/i2c/busses/i2c-piix4.c
795 @@ -98,7 +98,7 @@
796 #define SB800_PIIX4_PORT_IDX_MASK 0x06
797 #define SB800_PIIX4_PORT_IDX_SHIFT 1
798
799 -/* On kerncz, SmBus0Sel is at bit 20:19 of PMx00 DecodeEn */
800 +/* On kerncz and Hudson2, SmBus0Sel is at bit 20:19 of PMx00 DecodeEn */
801 #define SB800_PIIX4_PORT_IDX_KERNCZ 0x02
802 #define SB800_PIIX4_PORT_IDX_MASK_KERNCZ 0x18
803 #define SB800_PIIX4_PORT_IDX_SHIFT_KERNCZ 3
804 @@ -362,18 +362,16 @@ static int piix4_setup_sb800(struct pci_dev *PIIX4_dev,
805
806 /* Find which register is used for port selection */
807 if (PIIX4_dev->vendor == PCI_VENDOR_ID_AMD) {
808 - switch (PIIX4_dev->device) {
809 - case PCI_DEVICE_ID_AMD_KERNCZ_SMBUS:
810 + if (PIIX4_dev->device == PCI_DEVICE_ID_AMD_KERNCZ_SMBUS ||
811 + (PIIX4_dev->device == PCI_DEVICE_ID_AMD_HUDSON2_SMBUS &&
812 + PIIX4_dev->revision >= 0x1F)) {
813 piix4_port_sel_sb800 = SB800_PIIX4_PORT_IDX_KERNCZ;
814 piix4_port_mask_sb800 = SB800_PIIX4_PORT_IDX_MASK_KERNCZ;
815 piix4_port_shift_sb800 = SB800_PIIX4_PORT_IDX_SHIFT_KERNCZ;
816 - break;
817 - case PCI_DEVICE_ID_AMD_HUDSON2_SMBUS:
818 - default:
819 + } else {
820 piix4_port_sel_sb800 = SB800_PIIX4_PORT_IDX_ALT;
821 piix4_port_mask_sb800 = SB800_PIIX4_PORT_IDX_MASK;
822 piix4_port_shift_sb800 = SB800_PIIX4_PORT_IDX_SHIFT;
823 - break;
824 }
825 } else {
826 if (!request_muxed_region(SB800_PIIX4_SMB_IDX, 2,
827 diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
828 index 254e6219e538..2c29f901d309 100644
829 --- a/drivers/i2c/busses/i2c-rcar.c
830 +++ b/drivers/i2c/busses/i2c-rcar.c
831 @@ -139,6 +139,7 @@ struct rcar_i2c_priv {
832 enum dma_data_direction dma_direction;
833
834 struct reset_control *rstc;
835 + int irq;
836 };
837
838 #define rcar_i2c_priv_to_dev(p) ((p)->adap.dev.parent)
839 @@ -859,9 +860,11 @@ static int rcar_unreg_slave(struct i2c_client *slave)
840
841 WARN_ON(!priv->slave);
842
843 + /* disable irqs and ensure none is running before clearing ptr */
844 rcar_i2c_write(priv, ICSIER, 0);
845 rcar_i2c_write(priv, ICSCR, 0);
846
847 + synchronize_irq(priv->irq);
848 priv->slave = NULL;
849
850 pm_runtime_put(rcar_i2c_priv_to_dev(priv));
851 @@ -916,7 +919,7 @@ static int rcar_i2c_probe(struct platform_device *pdev)
852 struct i2c_adapter *adap;
853 struct device *dev = &pdev->dev;
854 struct i2c_timings i2c_t;
855 - int irq, ret;
856 + int ret;
857
858 priv = devm_kzalloc(dev, sizeof(struct rcar_i2c_priv), GFP_KERNEL);
859 if (!priv)
860 @@ -979,10 +982,10 @@ static int rcar_i2c_probe(struct platform_device *pdev)
861 pm_runtime_put(dev);
862
863
864 - irq = platform_get_irq(pdev, 0);
865 - ret = devm_request_irq(dev, irq, rcar_i2c_irq, 0, dev_name(dev), priv);
866 + priv->irq = platform_get_irq(pdev, 0);
867 + ret = devm_request_irq(dev, priv->irq, rcar_i2c_irq, 0, dev_name(dev), priv);
868 if (ret < 0) {
869 - dev_err(dev, "cannot get irq %d\n", irq);
870 + dev_err(dev, "cannot get irq %d\n", priv->irq);
871 goto out_pm_disable;
872 }
873
874 diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
875 index 511ff9a1d6d9..f9dbb064f957 100644
876 --- a/drivers/iommu/dma-iommu.c
877 +++ b/drivers/iommu/dma-iommu.c
878 @@ -675,7 +675,7 @@ static int __finalise_sg(struct device *dev, struct scatterlist *sg, int nents,
879 * - and wouldn't make the resulting output segment too long
880 */
881 if (cur_len && !s_iova_off && (dma_addr & seg_mask) &&
882 - (cur_len + s_length <= max_len)) {
883 + (max_len - cur_len >= s_length)) {
884 /* ...then concatenate it with the previous one */
885 cur_len += s_length;
886 } else {
887 diff --git a/drivers/media/platform/omap/omap_vout_vrfb.c b/drivers/media/platform/omap/omap_vout_vrfb.c
888 index 29e3f5da59c1..11ec048929e8 100644
889 --- a/drivers/media/platform/omap/omap_vout_vrfb.c
890 +++ b/drivers/media/platform/omap/omap_vout_vrfb.c
891 @@ -253,8 +253,7 @@ int omap_vout_prepare_vrfb(struct omap_vout_device *vout,
892 */
893
894 pixsize = vout->bpp * vout->vrfb_bpp;
895 - dst_icg = ((MAX_PIXELS_PER_LINE * pixsize) -
896 - (vout->pix.width * vout->bpp)) + 1;
897 + dst_icg = MAX_PIXELS_PER_LINE * pixsize - vout->pix.width * vout->bpp;
898
899 xt->src_start = vout->buf_phy_addr[vb->i];
900 xt->dst_start = vout->vrfb_context[vb->i].paddr[0];
901 diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h
902 index 225373e4a9ef..cdd7af16d5ee 100644
903 --- a/drivers/misc/mei/hw-me-regs.h
904 +++ b/drivers/misc/mei/hw-me-regs.h
905 @@ -141,6 +141,8 @@
906
907 #define MEI_DEV_ID_ICP_LP 0x34E0 /* Ice Lake Point LP */
908
909 +#define MEI_DEV_ID_TGP_LP 0xA0E0 /* Tiger Lake Point LP */
910 +
911 #define MEI_DEV_ID_MCC 0x4B70 /* Mule Creek Canyon (EHL) */
912 #define MEI_DEV_ID_MCC_4 0x4B75 /* Mule Creek Canyon 4 (EHL) */
913
914 diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c
915 index a66ebceea408..e41f9e0a3fdf 100644
916 --- a/drivers/misc/mei/pci-me.c
917 +++ b/drivers/misc/mei/pci-me.c
918 @@ -107,6 +107,8 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
919
920 {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_LP, MEI_ME_PCH12_CFG)},
921
922 + {MEI_PCI_DEVICE(MEI_DEV_ID_TGP_LP, MEI_ME_PCH12_CFG)},
923 +
924 {MEI_PCI_DEVICE(MEI_DEV_ID_MCC, MEI_ME_PCH12_CFG)},
925 {MEI_PCI_DEVICE(MEI_DEV_ID_MCC_4, MEI_ME_PCH8_CFG)},
926
927 diff --git a/drivers/misc/vmw_vmci/vmci_doorbell.c b/drivers/misc/vmw_vmci/vmci_doorbell.c
928 index b3fa738ae005..f005206d9033 100644
929 --- a/drivers/misc/vmw_vmci/vmci_doorbell.c
930 +++ b/drivers/misc/vmw_vmci/vmci_doorbell.c
931 @@ -318,7 +318,8 @@ int vmci_dbell_host_context_notify(u32 src_cid, struct vmci_handle handle)
932
933 entry = container_of(resource, struct dbell_entry, resource);
934 if (entry->run_delayed) {
935 - schedule_work(&entry->work);
936 + if (!schedule_work(&entry->work))
937 + vmci_resource_put(resource);
938 } else {
939 entry->notify_cb(entry->client_data);
940 vmci_resource_put(resource);
941 @@ -366,7 +367,8 @@ static void dbell_fire_entries(u32 notify_idx)
942 atomic_read(&dbell->active) == 1) {
943 if (dbell->run_delayed) {
944 vmci_resource_get(&dbell->resource);
945 - schedule_work(&dbell->work);
946 + if (!schedule_work(&dbell->work))
947 + vmci_resource_put(&dbell->resource);
948 } else {
949 dbell->notify_cb(dbell->client_data);
950 }
951 diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
952 index cfb8ee24eaba..04738359ec02 100644
953 --- a/drivers/mmc/core/sd.c
954 +++ b/drivers/mmc/core/sd.c
955 @@ -1277,6 +1277,12 @@ int mmc_attach_sd(struct mmc_host *host)
956 goto err;
957 }
958
959 + /*
960 + * Some SD cards claims an out of spec VDD voltage range. Let's treat
961 + * these bits as being in-valid and especially also bit7.
962 + */
963 + ocr &= ~0x7FFF;
964 +
965 rocr = mmc_select_voltage(host, ocr);
966
967 /*
968 diff --git a/drivers/mmc/host/sdhci-of-at91.c b/drivers/mmc/host/sdhci-of-at91.c
969 index 682c573e20a7..e284102c16e9 100644
970 --- a/drivers/mmc/host/sdhci-of-at91.c
971 +++ b/drivers/mmc/host/sdhci-of-at91.c
972 @@ -365,6 +365,9 @@ static int sdhci_at91_probe(struct platform_device *pdev)
973 pm_runtime_set_autosuspend_delay(&pdev->dev, 50);
974 pm_runtime_use_autosuspend(&pdev->dev);
975
976 + /* HS200 is broken at this moment */
977 + host->quirks2 = SDHCI_QUIRK2_BROKEN_HS200;
978 +
979 ret = sdhci_add_host(host);
980 if (ret)
981 goto pm_runtime_disable;
982 diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/init.c b/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
983 index 0a3e046d78db..da2ba51dec35 100644
984 --- a/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
985 +++ b/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
986 @@ -369,7 +369,7 @@ static void mt76x0_stop_hardware(struct mt76x0_dev *dev)
987 mt76x0_chip_onoff(dev, false, false);
988 }
989
990 -int mt76x0_init_hardware(struct mt76x0_dev *dev)
991 +int mt76x0_init_hardware(struct mt76x0_dev *dev, bool reset)
992 {
993 static const u16 beacon_offsets[16] = {
994 /* 512 byte per beacon */
995 @@ -382,7 +382,7 @@ int mt76x0_init_hardware(struct mt76x0_dev *dev)
996
997 dev->beacon_offsets = beacon_offsets;
998
999 - mt76x0_chip_onoff(dev, true, true);
1000 + mt76x0_chip_onoff(dev, true, reset);
1001
1002 ret = mt76x0_wait_asic_ready(dev);
1003 if (ret)
1004 diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h b/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h
1005 index fc9857f61771..f9dfe5097b09 100644
1006 --- a/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h
1007 +++ b/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h
1008 @@ -279,7 +279,7 @@ void mt76x0_addr_wr(struct mt76x0_dev *dev, const u32 offset, const u8 *addr);
1009
1010 /* Init */
1011 struct mt76x0_dev *mt76x0_alloc_device(struct device *dev);
1012 -int mt76x0_init_hardware(struct mt76x0_dev *dev);
1013 +int mt76x0_init_hardware(struct mt76x0_dev *dev, bool reset);
1014 int mt76x0_register_device(struct mt76x0_dev *dev);
1015 void mt76x0_cleanup(struct mt76x0_dev *dev);
1016 void mt76x0_chip_onoff(struct mt76x0_dev *dev, bool enable, bool reset);
1017 diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c b/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
1018 index 54ae1f113be2..5aacb1f6a841 100644
1019 --- a/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
1020 +++ b/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
1021 @@ -300,7 +300,7 @@ static int mt76x0_probe(struct usb_interface *usb_intf,
1022 if (!(mt76_rr(dev, MT_EFUSE_CTRL) & MT_EFUSE_CTRL_SEL))
1023 dev_warn(dev->mt76.dev, "Warning: eFUSE not present\n");
1024
1025 - ret = mt76x0_init_hardware(dev);
1026 + ret = mt76x0_init_hardware(dev, true);
1027 if (ret)
1028 goto err;
1029
1030 @@ -354,7 +354,7 @@ static int mt76x0_resume(struct usb_interface *usb_intf)
1031 struct mt76x0_dev *dev = usb_get_intfdata(usb_intf);
1032 int ret;
1033
1034 - ret = mt76x0_init_hardware(dev);
1035 + ret = mt76x0_init_hardware(dev, false);
1036 if (ret)
1037 return ret;
1038
1039 diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
1040 index e26d1191c5ad..ae0b01059fc6 100644
1041 --- a/drivers/nvme/host/core.c
1042 +++ b/drivers/nvme/host/core.c
1043 @@ -1183,6 +1183,9 @@ static u32 nvme_passthru_start(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
1044 */
1045 if (effects & (NVME_CMD_EFFECTS_LBCC | NVME_CMD_EFFECTS_CSE_MASK)) {
1046 mutex_lock(&ctrl->scan_lock);
1047 + mutex_lock(&ctrl->subsys->lock);
1048 + nvme_mpath_start_freeze(ctrl->subsys);
1049 + nvme_mpath_wait_freeze(ctrl->subsys);
1050 nvme_start_freeze(ctrl);
1051 nvme_wait_freeze(ctrl);
1052 }
1053 @@ -1213,6 +1216,8 @@ static void nvme_passthru_end(struct nvme_ctrl *ctrl, u32 effects)
1054 nvme_update_formats(ctrl);
1055 if (effects & (NVME_CMD_EFFECTS_LBCC | NVME_CMD_EFFECTS_CSE_MASK)) {
1056 nvme_unfreeze(ctrl);
1057 + nvme_mpath_unfreeze(ctrl->subsys);
1058 + mutex_unlock(&ctrl->subsys->lock);
1059 mutex_unlock(&ctrl->scan_lock);
1060 }
1061 if (effects & NVME_CMD_EFFECTS_CCC)
1062 @@ -1557,6 +1562,7 @@ static void __nvme_revalidate_disk(struct gendisk *disk, struct nvme_id_ns *id)
1063 if (ns->head->disk) {
1064 nvme_update_disk_info(ns->head->disk, ns, id);
1065 blk_queue_stack_limits(ns->head->disk->queue, ns->queue);
1066 + revalidate_disk(ns->head->disk);
1067 }
1068 #endif
1069 }
1070 diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
1071 index a11e210d173e..05d6371c7f38 100644
1072 --- a/drivers/nvme/host/multipath.c
1073 +++ b/drivers/nvme/host/multipath.c
1074 @@ -20,6 +20,36 @@ module_param(multipath, bool, 0444);
1075 MODULE_PARM_DESC(multipath,
1076 "turn on native support for multiple controllers per subsystem");
1077
1078 +void nvme_mpath_unfreeze(struct nvme_subsystem *subsys)
1079 +{
1080 + struct nvme_ns_head *h;
1081 +
1082 + lockdep_assert_held(&subsys->lock);
1083 + list_for_each_entry(h, &subsys->nsheads, entry)
1084 + if (h->disk)
1085 + blk_mq_unfreeze_queue(h->disk->queue);
1086 +}
1087 +
1088 +void nvme_mpath_wait_freeze(struct nvme_subsystem *subsys)
1089 +{
1090 + struct nvme_ns_head *h;
1091 +
1092 + lockdep_assert_held(&subsys->lock);
1093 + list_for_each_entry(h, &subsys->nsheads, entry)
1094 + if (h->disk)
1095 + blk_mq_freeze_queue_wait(h->disk->queue);
1096 +}
1097 +
1098 +void nvme_mpath_start_freeze(struct nvme_subsystem *subsys)
1099 +{
1100 + struct nvme_ns_head *h;
1101 +
1102 + lockdep_assert_held(&subsys->lock);
1103 + list_for_each_entry(h, &subsys->nsheads, entry)
1104 + if (h->disk)
1105 + blk_freeze_queue_start(h->disk->queue);
1106 +}
1107 +
1108 /*
1109 * If multipathing is enabled we need to always use the subsystem instance
1110 * number for numbering our devices to avoid conflicts between subsystems that
1111 diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
1112 index d5e29b57eb34..2653e1f4196d 100644
1113 --- a/drivers/nvme/host/nvme.h
1114 +++ b/drivers/nvme/host/nvme.h
1115 @@ -469,6 +469,9 @@ static inline bool nvme_ctrl_use_ana(struct nvme_ctrl *ctrl)
1116 return ctrl->ana_log_buf != NULL;
1117 }
1118
1119 +void nvme_mpath_unfreeze(struct nvme_subsystem *subsys);
1120 +void nvme_mpath_wait_freeze(struct nvme_subsystem *subsys);
1121 +void nvme_mpath_start_freeze(struct nvme_subsystem *subsys);
1122 void nvme_set_disk_name(char *disk_name, struct nvme_ns *ns,
1123 struct nvme_ctrl *ctrl, int *flags);
1124 void nvme_failover_req(struct request *req);
1125 @@ -553,6 +556,15 @@ static inline void nvme_mpath_uninit(struct nvme_ctrl *ctrl)
1126 static inline void nvme_mpath_stop(struct nvme_ctrl *ctrl)
1127 {
1128 }
1129 +static inline void nvme_mpath_unfreeze(struct nvme_subsystem *subsys)
1130 +{
1131 +}
1132 +static inline void nvme_mpath_wait_freeze(struct nvme_subsystem *subsys)
1133 +{
1134 +}
1135 +static inline void nvme_mpath_start_freeze(struct nvme_subsystem *subsys)
1136 +{
1137 +}
1138 #endif /* CONFIG_NVME_MULTIPATH */
1139
1140 #ifdef CONFIG_NVM
1141 diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
1142 index 0a5d064f82ca..a64a8bca0d5b 100644
1143 --- a/drivers/nvme/host/pci.c
1144 +++ b/drivers/nvme/host/pci.c
1145 @@ -2468,7 +2468,7 @@ static void nvme_async_probe(void *data, async_cookie_t cookie)
1146 {
1147 struct nvme_dev *dev = data;
1148
1149 - nvme_reset_ctrl_sync(&dev->ctrl);
1150 + flush_work(&dev->ctrl.reset_work);
1151 flush_work(&dev->ctrl.scan_work);
1152 nvme_put_ctrl(&dev->ctrl);
1153 }
1154 @@ -2535,6 +2535,7 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1155
1156 dev_info(dev->ctrl.device, "pci function %s\n", dev_name(&pdev->dev));
1157
1158 + nvme_reset_ctrl(&dev->ctrl);
1159 nvme_get_ctrl(&dev->ctrl);
1160 async_schedule(nvme_async_probe, dev);
1161
1162 diff --git a/drivers/nvme/target/loop.c b/drivers/nvme/target/loop.c
1163 index 9908082b32c4..137a27fa369c 100644
1164 --- a/drivers/nvme/target/loop.c
1165 +++ b/drivers/nvme/target/loop.c
1166 @@ -678,6 +678,14 @@ static void nvme_loop_remove_port(struct nvmet_port *port)
1167 mutex_lock(&nvme_loop_ports_mutex);
1168 list_del_init(&port->entry);
1169 mutex_unlock(&nvme_loop_ports_mutex);
1170 +
1171 + /*
1172 + * Ensure any ctrls that are in the process of being
1173 + * deleted are in fact deleted before we return
1174 + * and free the port. This is to prevent active
1175 + * ctrls from using a port after it's freed.
1176 + */
1177 + flush_workqueue(nvme_delete_wq);
1178 }
1179
1180 static const struct nvmet_fabrics_ops nvme_loop_ops = {
1181 diff --git a/drivers/scsi/ufs/unipro.h b/drivers/scsi/ufs/unipro.h
1182 index 23129d7b2678..c77e36526447 100644
1183 --- a/drivers/scsi/ufs/unipro.h
1184 +++ b/drivers/scsi/ufs/unipro.h
1185 @@ -52,7 +52,7 @@
1186 #define RX_HS_UNTERMINATED_ENABLE 0x00A6
1187 #define RX_ENTER_HIBERN8 0x00A7
1188 #define RX_BYPASS_8B10B_ENABLE 0x00A8
1189 -#define RX_TERMINATION_FORCE_ENABLE 0x0089
1190 +#define RX_TERMINATION_FORCE_ENABLE 0x00A9
1191 #define RX_MIN_ACTIVATETIME_CAPABILITY 0x008F
1192 #define RX_HIBERN8TIME_CAPABILITY 0x0092
1193 #define RX_REFCLKFREQ 0x00EB
1194 diff --git a/drivers/soundwire/cadence_master.c b/drivers/soundwire/cadence_master.c
1195 index cb6a331f448a..70f78eda037e 100644
1196 --- a/drivers/soundwire/cadence_master.c
1197 +++ b/drivers/soundwire/cadence_master.c
1198 @@ -81,8 +81,8 @@
1199
1200 #define CDNS_MCP_INTSET 0x4C
1201
1202 -#define CDNS_SDW_SLAVE_STAT 0x50
1203 -#define CDNS_MCP_SLAVE_STAT_MASK BIT(1, 0)
1204 +#define CDNS_MCP_SLAVE_STAT 0x50
1205 +#define CDNS_MCP_SLAVE_STAT_MASK GENMASK(1, 0)
1206
1207 #define CDNS_MCP_SLAVE_INTSTAT0 0x54
1208 #define CDNS_MCP_SLAVE_INTSTAT1 0x58
1209 @@ -96,8 +96,8 @@
1210 #define CDNS_MCP_SLAVE_INTMASK0 0x5C
1211 #define CDNS_MCP_SLAVE_INTMASK1 0x60
1212
1213 -#define CDNS_MCP_SLAVE_INTMASK0_MASK GENMASK(30, 0)
1214 -#define CDNS_MCP_SLAVE_INTMASK1_MASK GENMASK(16, 0)
1215 +#define CDNS_MCP_SLAVE_INTMASK0_MASK GENMASK(31, 0)
1216 +#define CDNS_MCP_SLAVE_INTMASK1_MASK GENMASK(15, 0)
1217
1218 #define CDNS_MCP_PORT_INTSTAT 0x64
1219 #define CDNS_MCP_PDI_STAT 0x6C
1220 diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
1221 index cc7c856126df..169ccfacfc75 100644
1222 --- a/drivers/usb/chipidea/udc.c
1223 +++ b/drivers/usb/chipidea/udc.c
1224 @@ -708,12 +708,6 @@ static int _gadget_stop_activity(struct usb_gadget *gadget)
1225 struct ci_hdrc *ci = container_of(gadget, struct ci_hdrc, gadget);
1226 unsigned long flags;
1227
1228 - spin_lock_irqsave(&ci->lock, flags);
1229 - ci->gadget.speed = USB_SPEED_UNKNOWN;
1230 - ci->remote_wakeup = 0;
1231 - ci->suspended = 0;
1232 - spin_unlock_irqrestore(&ci->lock, flags);
1233 -
1234 /* flush all endpoints */
1235 gadget_for_each_ep(ep, gadget) {
1236 usb_ep_fifo_flush(ep);
1237 @@ -731,6 +725,12 @@ static int _gadget_stop_activity(struct usb_gadget *gadget)
1238 ci->status = NULL;
1239 }
1240
1241 + spin_lock_irqsave(&ci->lock, flags);
1242 + ci->gadget.speed = USB_SPEED_UNKNOWN;
1243 + ci->remote_wakeup = 0;
1244 + ci->suspended = 0;
1245 + spin_unlock_irqrestore(&ci->lock, flags);
1246 +
1247 return 0;
1248 }
1249
1250 @@ -1302,6 +1302,10 @@ static int ep_disable(struct usb_ep *ep)
1251 return -EBUSY;
1252
1253 spin_lock_irqsave(hwep->lock, flags);
1254 + if (hwep->ci->gadget.speed == USB_SPEED_UNKNOWN) {
1255 + spin_unlock_irqrestore(hwep->lock, flags);
1256 + return 0;
1257 + }
1258
1259 /* only internal SW should disable ctrl endpts */
1260
1261 @@ -1391,6 +1395,10 @@ static int ep_queue(struct usb_ep *ep, struct usb_request *req,
1262 return -EINVAL;
1263
1264 spin_lock_irqsave(hwep->lock, flags);
1265 + if (hwep->ci->gadget.speed == USB_SPEED_UNKNOWN) {
1266 + spin_unlock_irqrestore(hwep->lock, flags);
1267 + return 0;
1268 + }
1269 retval = _ep_queue(ep, req, gfp_flags);
1270 spin_unlock_irqrestore(hwep->lock, flags);
1271 return retval;
1272 @@ -1414,8 +1422,8 @@ static int ep_dequeue(struct usb_ep *ep, struct usb_request *req)
1273 return -EINVAL;
1274
1275 spin_lock_irqsave(hwep->lock, flags);
1276 -
1277 - hw_ep_flush(hwep->ci, hwep->num, hwep->dir);
1278 + if (hwep->ci->gadget.speed != USB_SPEED_UNKNOWN)
1279 + hw_ep_flush(hwep->ci, hwep->num, hwep->dir);
1280
1281 list_for_each_entry_safe(node, tmpnode, &hwreq->tds, td) {
1282 dma_pool_free(hwep->td_pool, node->ptr, node->dma);
1283 @@ -1486,6 +1494,10 @@ static void ep_fifo_flush(struct usb_ep *ep)
1284 }
1285
1286 spin_lock_irqsave(hwep->lock, flags);
1287 + if (hwep->ci->gadget.speed == USB_SPEED_UNKNOWN) {
1288 + spin_unlock_irqrestore(hwep->lock, flags);
1289 + return;
1290 + }
1291
1292 hw_ep_flush(hwep->ci, hwep->num, hwep->dir);
1293
1294 @@ -1558,6 +1570,10 @@ static int ci_udc_wakeup(struct usb_gadget *_gadget)
1295 int ret = 0;
1296
1297 spin_lock_irqsave(&ci->lock, flags);
1298 + if (ci->gadget.speed == USB_SPEED_UNKNOWN) {
1299 + spin_unlock_irqrestore(&ci->lock, flags);
1300 + return 0;
1301 + }
1302 if (!ci->remote_wakeup) {
1303 ret = -EOPNOTSUPP;
1304 goto out;
1305 diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
1306 index bec581fb7c63..b8a1fdefb515 100644
1307 --- a/drivers/usb/class/cdc-wdm.c
1308 +++ b/drivers/usb/class/cdc-wdm.c
1309 @@ -587,10 +587,20 @@ static int wdm_flush(struct file *file, fl_owner_t id)
1310 {
1311 struct wdm_device *desc = file->private_data;
1312
1313 - wait_event(desc->wait, !test_bit(WDM_IN_USE, &desc->flags));
1314 + wait_event(desc->wait,
1315 + /*
1316 + * needs both flags. We cannot do with one
1317 + * because resetting it would cause a race
1318 + * with write() yet we need to signal
1319 + * a disconnect
1320 + */
1321 + !test_bit(WDM_IN_USE, &desc->flags) ||
1322 + test_bit(WDM_DISCONNECTING, &desc->flags));
1323
1324 /* cannot dereference desc->intf if WDM_DISCONNECTING */
1325 - if (desc->werr < 0 && !test_bit(WDM_DISCONNECTING, &desc->flags))
1326 + if (test_bit(WDM_DISCONNECTING, &desc->flags))
1327 + return -ENODEV;
1328 + if (desc->werr < 0)
1329 dev_err(&desc->intf->dev, "Error in flush path: %d\n",
1330 desc->werr);
1331
1332 @@ -974,8 +984,6 @@ static void wdm_disconnect(struct usb_interface *intf)
1333 spin_lock_irqsave(&desc->iuspin, flags);
1334 set_bit(WDM_DISCONNECTING, &desc->flags);
1335 set_bit(WDM_READ, &desc->flags);
1336 - /* to terminate pending flushes */
1337 - clear_bit(WDM_IN_USE, &desc->flags);
1338 spin_unlock_irqrestore(&desc->iuspin, flags);
1339 wake_up_all(&desc->wait);
1340 mutex_lock(&desc->rlock);
1341 diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c
1342 index 03432467b05f..7537681355f6 100644
1343 --- a/drivers/usb/core/hcd-pci.c
1344 +++ b/drivers/usb/core/hcd-pci.c
1345 @@ -216,17 +216,18 @@ int usb_hcd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
1346 /* EHCI, OHCI */
1347 hcd->rsrc_start = pci_resource_start(dev, 0);
1348 hcd->rsrc_len = pci_resource_len(dev, 0);
1349 - if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len,
1350 - driver->description)) {
1351 + if (!devm_request_mem_region(&dev->dev, hcd->rsrc_start,
1352 + hcd->rsrc_len, driver->description)) {
1353 dev_dbg(&dev->dev, "controller already in use\n");
1354 retval = -EBUSY;
1355 goto put_hcd;
1356 }
1357 - hcd->regs = ioremap_nocache(hcd->rsrc_start, hcd->rsrc_len);
1358 + hcd->regs = devm_ioremap_nocache(&dev->dev, hcd->rsrc_start,
1359 + hcd->rsrc_len);
1360 if (hcd->regs == NULL) {
1361 dev_dbg(&dev->dev, "error mapping memory\n");
1362 retval = -EFAULT;
1363 - goto release_mem_region;
1364 + goto put_hcd;
1365 }
1366
1367 } else {
1368 @@ -240,8 +241,8 @@ int usb_hcd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
1369
1370 hcd->rsrc_start = pci_resource_start(dev, region);
1371 hcd->rsrc_len = pci_resource_len(dev, region);
1372 - if (request_region(hcd->rsrc_start, hcd->rsrc_len,
1373 - driver->description))
1374 + if (devm_request_region(&dev->dev, hcd->rsrc_start,
1375 + hcd->rsrc_len, driver->description))
1376 break;
1377 }
1378 if (region == PCI_ROM_RESOURCE) {
1379 @@ -275,20 +276,13 @@ int usb_hcd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
1380 }
1381
1382 if (retval != 0)
1383 - goto unmap_registers;
1384 + goto put_hcd;
1385 device_wakeup_enable(hcd->self.controller);
1386
1387 if (pci_dev_run_wake(dev))
1388 pm_runtime_put_noidle(&dev->dev);
1389 return retval;
1390
1391 -unmap_registers:
1392 - if (driver->flags & HCD_MEMORY) {
1393 - iounmap(hcd->regs);
1394 -release_mem_region:
1395 - release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
1396 - } else
1397 - release_region(hcd->rsrc_start, hcd->rsrc_len);
1398 put_hcd:
1399 usb_put_hcd(hcd);
1400 disable_pci:
1401 @@ -347,14 +341,6 @@ void usb_hcd_pci_remove(struct pci_dev *dev)
1402 dev_set_drvdata(&dev->dev, NULL);
1403 up_read(&companions_rwsem);
1404 }
1405 -
1406 - if (hcd->driver->flags & HCD_MEMORY) {
1407 - iounmap(hcd->regs);
1408 - release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
1409 - } else {
1410 - release_region(hcd->rsrc_start, hcd->rsrc_len);
1411 - }
1412 -
1413 usb_put_hcd(hcd);
1414 pci_disable_device(dev);
1415 }
1416 diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
1417 index b8a15840b4ff..dfcabadeed01 100644
1418 --- a/drivers/usb/gadget/composite.c
1419 +++ b/drivers/usb/gadget/composite.c
1420 @@ -1976,6 +1976,7 @@ void composite_disconnect(struct usb_gadget *gadget)
1421 * disconnect callbacks?
1422 */
1423 spin_lock_irqsave(&cdev->lock, flags);
1424 + cdev->suspended = 0;
1425 if (cdev->config)
1426 reset_config(cdev);
1427 if (cdev->driver->disconnect)
1428 diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c
1429 index 1074cb82ec17..0b7b4d09785b 100644
1430 --- a/drivers/usb/gadget/function/f_mass_storage.c
1431 +++ b/drivers/usb/gadget/function/f_mass_storage.c
1432 @@ -261,7 +261,7 @@ struct fsg_common;
1433 struct fsg_common {
1434 struct usb_gadget *gadget;
1435 struct usb_composite_dev *cdev;
1436 - struct fsg_dev *fsg, *new_fsg;
1437 + struct fsg_dev *fsg;
1438 wait_queue_head_t io_wait;
1439 wait_queue_head_t fsg_wait;
1440
1441 @@ -290,6 +290,7 @@ struct fsg_common {
1442 unsigned int bulk_out_maxpacket;
1443 enum fsg_state state; /* For exception handling */
1444 unsigned int exception_req_tag;
1445 + void *exception_arg;
1446
1447 enum data_direction data_dir;
1448 u32 data_size;
1449 @@ -391,7 +392,8 @@ static int fsg_set_halt(struct fsg_dev *fsg, struct usb_ep *ep)
1450
1451 /* These routines may be called in process context or in_irq */
1452
1453 -static void raise_exception(struct fsg_common *common, enum fsg_state new_state)
1454 +static void __raise_exception(struct fsg_common *common, enum fsg_state new_state,
1455 + void *arg)
1456 {
1457 unsigned long flags;
1458
1459 @@ -404,6 +406,7 @@ static void raise_exception(struct fsg_common *common, enum fsg_state new_state)
1460 if (common->state <= new_state) {
1461 common->exception_req_tag = common->ep0_req_tag;
1462 common->state = new_state;
1463 + common->exception_arg = arg;
1464 if (common->thread_task)
1465 send_sig_info(SIGUSR1, SEND_SIG_FORCED,
1466 common->thread_task);
1467 @@ -411,6 +414,10 @@ static void raise_exception(struct fsg_common *common, enum fsg_state new_state)
1468 spin_unlock_irqrestore(&common->lock, flags);
1469 }
1470
1471 +static void raise_exception(struct fsg_common *common, enum fsg_state new_state)
1472 +{
1473 + __raise_exception(common, new_state, NULL);
1474 +}
1475
1476 /*-------------------------------------------------------------------------*/
1477
1478 @@ -2285,16 +2292,16 @@ reset:
1479 static int fsg_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
1480 {
1481 struct fsg_dev *fsg = fsg_from_func(f);
1482 - fsg->common->new_fsg = fsg;
1483 - raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
1484 +
1485 + __raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE, fsg);
1486 return USB_GADGET_DELAYED_STATUS;
1487 }
1488
1489 static void fsg_disable(struct usb_function *f)
1490 {
1491 struct fsg_dev *fsg = fsg_from_func(f);
1492 - fsg->common->new_fsg = NULL;
1493 - raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
1494 +
1495 + __raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE, NULL);
1496 }
1497
1498
1499 @@ -2307,6 +2314,7 @@ static void handle_exception(struct fsg_common *common)
1500 enum fsg_state old_state;
1501 struct fsg_lun *curlun;
1502 unsigned int exception_req_tag;
1503 + struct fsg_dev *new_fsg;
1504
1505 /*
1506 * Clear the existing signals. Anything but SIGUSR1 is converted
1507 @@ -2360,6 +2368,7 @@ static void handle_exception(struct fsg_common *common)
1508 common->next_buffhd_to_fill = &common->buffhds[0];
1509 common->next_buffhd_to_drain = &common->buffhds[0];
1510 exception_req_tag = common->exception_req_tag;
1511 + new_fsg = common->exception_arg;
1512 old_state = common->state;
1513 common->state = FSG_STATE_NORMAL;
1514
1515 @@ -2413,8 +2422,8 @@ static void handle_exception(struct fsg_common *common)
1516 break;
1517
1518 case FSG_STATE_CONFIG_CHANGE:
1519 - do_set_interface(common, common->new_fsg);
1520 - if (common->new_fsg)
1521 + do_set_interface(common, new_fsg);
1522 + if (new_fsg)
1523 usb_composite_setup_continue(common->cdev);
1524 break;
1525
1526 @@ -2989,8 +2998,7 @@ static void fsg_unbind(struct usb_configuration *c, struct usb_function *f)
1527
1528 DBG(fsg, "unbind\n");
1529 if (fsg->common->fsg == fsg) {
1530 - fsg->common->new_fsg = NULL;
1531 - raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
1532 + __raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE, NULL);
1533 /* FIXME: make interruptible or killable somehow? */
1534 wait_event(common->fsg_wait, common->fsg != fsg);
1535 }
1536 diff --git a/drivers/usb/host/fotg210-hcd.c b/drivers/usb/host/fotg210-hcd.c
1537 index e64eb47770c8..2d5a72c15069 100644
1538 --- a/drivers/usb/host/fotg210-hcd.c
1539 +++ b/drivers/usb/host/fotg210-hcd.c
1540 @@ -1627,6 +1627,10 @@ static int fotg210_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
1541 /* see what we found out */
1542 temp = check_reset_complete(fotg210, wIndex, status_reg,
1543 fotg210_readl(fotg210, status_reg));
1544 +
1545 + /* restart schedule */
1546 + fotg210->command |= CMD_RUN;
1547 + fotg210_writel(fotg210, fotg210->command, &fotg210->regs->command);
1548 }
1549
1550 if (!(temp & (PORT_RESUME|PORT_RESET))) {
1551 diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
1552 index 210181fd98d2..af11887f5f9e 100644
1553 --- a/drivers/usb/host/ohci-hcd.c
1554 +++ b/drivers/usb/host/ohci-hcd.c
1555 @@ -418,8 +418,7 @@ static void ohci_usb_reset (struct ohci_hcd *ohci)
1556 * other cases where the next software may expect clean state from the
1557 * "firmware". this is bus-neutral, unlike shutdown() methods.
1558 */
1559 -static void
1560 -ohci_shutdown (struct usb_hcd *hcd)
1561 +static void _ohci_shutdown(struct usb_hcd *hcd)
1562 {
1563 struct ohci_hcd *ohci;
1564
1565 @@ -435,6 +434,16 @@ ohci_shutdown (struct usb_hcd *hcd)
1566 ohci->rh_state = OHCI_RH_HALTED;
1567 }
1568
1569 +static void ohci_shutdown(struct usb_hcd *hcd)
1570 +{
1571 + struct ohci_hcd *ohci = hcd_to_ohci(hcd);
1572 + unsigned long flags;
1573 +
1574 + spin_lock_irqsave(&ohci->lock, flags);
1575 + _ohci_shutdown(hcd);
1576 + spin_unlock_irqrestore(&ohci->lock, flags);
1577 +}
1578 +
1579 /*-------------------------------------------------------------------------*
1580 * HC functions
1581 *-------------------------------------------------------------------------*/
1582 @@ -752,7 +761,7 @@ static void io_watchdog_func(struct timer_list *t)
1583 died:
1584 usb_hc_died(ohci_to_hcd(ohci));
1585 ohci_dump(ohci);
1586 - ohci_shutdown(ohci_to_hcd(ohci));
1587 + _ohci_shutdown(ohci_to_hcd(ohci));
1588 goto done;
1589 } else {
1590 /* No write back because the done queue was empty */
1591 diff --git a/drivers/usb/host/xhci-rcar.c b/drivers/usb/host/xhci-rcar.c
1592 index 8616c52849c6..2b0ccd150209 100644
1593 --- a/drivers/usb/host/xhci-rcar.c
1594 +++ b/drivers/usb/host/xhci-rcar.c
1595 @@ -104,7 +104,7 @@ static int xhci_rcar_is_gen2(struct device *dev)
1596 return of_device_is_compatible(node, "renesas,xhci-r8a7790") ||
1597 of_device_is_compatible(node, "renesas,xhci-r8a7791") ||
1598 of_device_is_compatible(node, "renesas,xhci-r8a7793") ||
1599 - of_device_is_compatible(node, "renensas,rcar-gen2-xhci");
1600 + of_device_is_compatible(node, "renesas,rcar-gen2-xhci");
1601 }
1602
1603 static int xhci_rcar_is_gen3(struct device *dev)
1604 diff --git a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c
1605 index cc794e25a0b6..1d9ce9cbc831 100644
1606 --- a/drivers/usb/storage/realtek_cr.c
1607 +++ b/drivers/usb/storage/realtek_cr.c
1608 @@ -38,7 +38,7 @@ MODULE_LICENSE("GPL");
1609
1610 static int auto_delink_en = 1;
1611 module_param(auto_delink_en, int, S_IRUGO | S_IWUSR);
1612 -MODULE_PARM_DESC(auto_delink_en, "enable auto delink");
1613 +MODULE_PARM_DESC(auto_delink_en, "auto delink mode (0=firmware, 1=software [default])");
1614
1615 #ifdef CONFIG_REALTEK_AUTOPM
1616 static int ss_en = 1;
1617 @@ -996,12 +996,15 @@ static int init_realtek_cr(struct us_data *us)
1618 goto INIT_FAIL;
1619 }
1620
1621 - if (CHECK_FW_VER(chip, 0x5888) || CHECK_FW_VER(chip, 0x5889) ||
1622 - CHECK_FW_VER(chip, 0x5901))
1623 - SET_AUTO_DELINK(chip);
1624 - if (STATUS_LEN(chip) == 16) {
1625 - if (SUPPORT_AUTO_DELINK(chip))
1626 + if (CHECK_PID(chip, 0x0138) || CHECK_PID(chip, 0x0158) ||
1627 + CHECK_PID(chip, 0x0159)) {
1628 + if (CHECK_FW_VER(chip, 0x5888) || CHECK_FW_VER(chip, 0x5889) ||
1629 + CHECK_FW_VER(chip, 0x5901))
1630 SET_AUTO_DELINK(chip);
1631 + if (STATUS_LEN(chip) == 16) {
1632 + if (SUPPORT_AUTO_DELINK(chip))
1633 + SET_AUTO_DELINK(chip);
1634 + }
1635 }
1636 #ifdef CONFIG_REALTEK_AUTOPM
1637 if (ss_en)
1638 diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
1639 index ea0d27a94afe..1cd9b6305b06 100644
1640 --- a/drivers/usb/storage/unusual_devs.h
1641 +++ b/drivers/usb/storage/unusual_devs.h
1642 @@ -2100,7 +2100,7 @@ UNUSUAL_DEV( 0x14cd, 0x6600, 0x0201, 0x0201,
1643 US_FL_IGNORE_RESIDUE ),
1644
1645 /* Reported by Michael Büsch <m@bues.ch> */
1646 -UNUSUAL_DEV( 0x152d, 0x0567, 0x0114, 0x0116,
1647 +UNUSUAL_DEV( 0x152d, 0x0567, 0x0114, 0x0117,
1648 "JMicron",
1649 "USB to ATA/ATAPI Bridge",
1650 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1651 diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
1652 index 5f29ce8d6c3f..fb20aa974ae1 100644
1653 --- a/drivers/usb/typec/tcpm.c
1654 +++ b/drivers/usb/typec/tcpm.c
1655 @@ -1445,7 +1445,7 @@ static enum pdo_err tcpm_caps_err(struct tcpm_port *port, const u32 *pdo,
1656 else if ((pdo_min_voltage(pdo[i]) ==
1657 pdo_min_voltage(pdo[i - 1])) &&
1658 (pdo_max_voltage(pdo[i]) ==
1659 - pdo_min_voltage(pdo[i - 1])))
1660 + pdo_max_voltage(pdo[i - 1])))
1661 return PDO_ERR_DUPE_PDO;
1662 break;
1663 /*
1664 diff --git a/drivers/watchdog/bcm2835_wdt.c b/drivers/watchdog/bcm2835_wdt.c
1665 index ed05514cc2dc..e6c27b71b136 100644
1666 --- a/drivers/watchdog/bcm2835_wdt.c
1667 +++ b/drivers/watchdog/bcm2835_wdt.c
1668 @@ -249,6 +249,7 @@ module_param(nowayout, bool, 0);
1669 MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
1670 __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
1671
1672 +MODULE_ALIAS("platform:bcm2835-wdt");
1673 MODULE_AUTHOR("Lubomir Rintel <lkundrak@v3.sk>");
1674 MODULE_DESCRIPTION("Driver for Broadcom BCM2835 watchdog timer");
1675 MODULE_LICENSE("GPL");
1676 diff --git a/fs/afs/cmservice.c b/fs/afs/cmservice.c
1677 index 9e51d6fe7e8f..40c6860d4c63 100644
1678 --- a/fs/afs/cmservice.c
1679 +++ b/fs/afs/cmservice.c
1680 @@ -423,18 +423,14 @@ static void SRXAFSCB_ProbeUuid(struct work_struct *work)
1681 struct afs_call *call = container_of(work, struct afs_call, work);
1682 struct afs_uuid *r = call->request;
1683
1684 - struct {
1685 - __be32 match;
1686 - } reply;
1687 -
1688 _enter("");
1689
1690 if (memcmp(r, &call->net->uuid, sizeof(call->net->uuid)) == 0)
1691 - reply.match = htonl(0);
1692 + afs_send_empty_reply(call);
1693 else
1694 - reply.match = htonl(1);
1695 + rxrpc_kernel_abort_call(call->net->socket, call->rxcall,
1696 + 1, 1, "K-1");
1697
1698 - afs_send_simple_reply(call, &reply, sizeof(reply));
1699 afs_put_call(call);
1700 _leave("");
1701 }
1702 diff --git a/fs/afs/dir.c b/fs/afs/dir.c
1703 index 855bf2b79fed..54e7f6f1405e 100644
1704 --- a/fs/afs/dir.c
1705 +++ b/fs/afs/dir.c
1706 @@ -937,7 +937,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
1707 dir_version = (long)dir->status.data_version;
1708 de_version = (long)dentry->d_fsdata;
1709 if (de_version == dir_version)
1710 - goto out_valid;
1711 + goto out_valid_noupdate;
1712
1713 dir_version = (long)dir->invalid_before;
1714 if (de_version - dir_version >= 0)
1715 @@ -1001,6 +1001,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
1716
1717 out_valid:
1718 dentry->d_fsdata = (void *)dir_version;
1719 +out_valid_noupdate:
1720 dput(parent);
1721 key_put(key);
1722 _leave(" = 1 [valid]");
1723 diff --git a/fs/afs/file.c b/fs/afs/file.c
1724 index 7d4f26198573..843d3b970b84 100644
1725 --- a/fs/afs/file.c
1726 +++ b/fs/afs/file.c
1727 @@ -193,11 +193,13 @@ void afs_put_read(struct afs_read *req)
1728 int i;
1729
1730 if (refcount_dec_and_test(&req->usage)) {
1731 - for (i = 0; i < req->nr_pages; i++)
1732 - if (req->pages[i])
1733 - put_page(req->pages[i]);
1734 - if (req->pages != req->array)
1735 - kfree(req->pages);
1736 + if (req->pages) {
1737 + for (i = 0; i < req->nr_pages; i++)
1738 + if (req->pages[i])
1739 + put_page(req->pages[i]);
1740 + if (req->pages != req->array)
1741 + kfree(req->pages);
1742 + }
1743 kfree(req);
1744 }
1745 }
1746 diff --git a/fs/afs/vlclient.c b/fs/afs/vlclient.c
1747 index c3b740813fc7..c7dd47eaff29 100644
1748 --- a/fs/afs/vlclient.c
1749 +++ b/fs/afs/vlclient.c
1750 @@ -60,23 +60,24 @@ static int afs_deliver_vl_get_entry_by_name_u(struct afs_call *call)
1751 struct afs_uuid__xdr *xdr;
1752 struct afs_uuid *uuid;
1753 int j;
1754 + int n = entry->nr_servers;
1755
1756 tmp = ntohl(uvldb->serverFlags[i]);
1757 if (tmp & AFS_VLSF_DONTUSE ||
1758 (new_only && !(tmp & AFS_VLSF_NEWREPSITE)))
1759 continue;
1760 if (tmp & AFS_VLSF_RWVOL) {
1761 - entry->fs_mask[i] |= AFS_VOL_VTM_RW;
1762 + entry->fs_mask[n] |= AFS_VOL_VTM_RW;
1763 if (vlflags & AFS_VLF_BACKEXISTS)
1764 - entry->fs_mask[i] |= AFS_VOL_VTM_BAK;
1765 + entry->fs_mask[n] |= AFS_VOL_VTM_BAK;
1766 }
1767 if (tmp & AFS_VLSF_ROVOL)
1768 - entry->fs_mask[i] |= AFS_VOL_VTM_RO;
1769 - if (!entry->fs_mask[i])
1770 + entry->fs_mask[n] |= AFS_VOL_VTM_RO;
1771 + if (!entry->fs_mask[n])
1772 continue;
1773
1774 xdr = &uvldb->serverNumber[i];
1775 - uuid = (struct afs_uuid *)&entry->fs_server[i];
1776 + uuid = (struct afs_uuid *)&entry->fs_server[n];
1777 uuid->time_low = xdr->time_low;
1778 uuid->time_mid = htons(ntohl(xdr->time_mid));
1779 uuid->time_hi_and_version = htons(ntohl(xdr->time_hi_and_version));
1780 diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
1781 index 33824a0a57bf..f516ace8f45d 100644
1782 --- a/fs/nfs/direct.c
1783 +++ b/fs/nfs/direct.c
1784 @@ -400,15 +400,21 @@ static void nfs_direct_read_completion(struct nfs_pgio_header *hdr)
1785 unsigned long bytes = 0;
1786 struct nfs_direct_req *dreq = hdr->dreq;
1787
1788 - if (test_bit(NFS_IOHDR_REDO, &hdr->flags))
1789 - goto out_put;
1790 -
1791 spin_lock(&dreq->lock);
1792 - if (test_bit(NFS_IOHDR_ERROR, &hdr->flags) && (hdr->good_bytes == 0))
1793 + if (test_bit(NFS_IOHDR_ERROR, &hdr->flags))
1794 dreq->error = hdr->error;
1795 - else
1796 +
1797 + if (test_bit(NFS_IOHDR_REDO, &hdr->flags)) {
1798 + spin_unlock(&dreq->lock);
1799 + goto out_put;
1800 + }
1801 +
1802 + if (hdr->good_bytes != 0)
1803 nfs_direct_good_bytes(dreq, hdr);
1804
1805 + if (test_bit(NFS_IOHDR_EOF, &hdr->flags))
1806 + dreq->error = 0;
1807 +
1808 spin_unlock(&dreq->lock);
1809
1810 while (!list_empty(&hdr->pages)) {
1811 @@ -428,7 +434,7 @@ out_put:
1812 hdr->release(hdr);
1813 }
1814
1815 -static void nfs_read_sync_pgio_error(struct list_head *head)
1816 +static void nfs_read_sync_pgio_error(struct list_head *head, int error)
1817 {
1818 struct nfs_page *req;
1819
1820 @@ -664,8 +670,7 @@ static void nfs_direct_write_reschedule(struct nfs_direct_req *dreq)
1821
1822 list_for_each_entry_safe(req, tmp, &reqs, wb_list) {
1823 if (!nfs_pageio_add_request(&desc, req)) {
1824 - nfs_list_remove_request(req);
1825 - nfs_list_add_request(req, &failed);
1826 + nfs_list_move_request(req, &failed);
1827 spin_lock(&cinfo.inode->i_lock);
1828 dreq->flags = 0;
1829 if (desc.pg_error < 0)
1830 @@ -775,16 +780,19 @@ static void nfs_direct_write_completion(struct nfs_pgio_header *hdr)
1831 bool request_commit = false;
1832 struct nfs_page *req = nfs_list_entry(hdr->pages.next);
1833
1834 - if (test_bit(NFS_IOHDR_REDO, &hdr->flags))
1835 - goto out_put;
1836 -
1837 nfs_init_cinfo_from_dreq(&cinfo, dreq);
1838
1839 spin_lock(&dreq->lock);
1840
1841 if (test_bit(NFS_IOHDR_ERROR, &hdr->flags))
1842 dreq->error = hdr->error;
1843 - if (dreq->error == 0) {
1844 +
1845 + if (test_bit(NFS_IOHDR_REDO, &hdr->flags)) {
1846 + spin_unlock(&dreq->lock);
1847 + goto out_put;
1848 + }
1849 +
1850 + if (hdr->good_bytes != 0) {
1851 nfs_direct_good_bytes(dreq, hdr);
1852 if (nfs_write_need_commit(hdr)) {
1853 if (dreq->flags == NFS_ODIRECT_RESCHED_WRITES)
1854 @@ -821,7 +829,7 @@ out_put:
1855 hdr->release(hdr);
1856 }
1857
1858 -static void nfs_write_sync_pgio_error(struct list_head *head)
1859 +static void nfs_write_sync_pgio_error(struct list_head *head, int error)
1860 {
1861 struct nfs_page *req;
1862
1863 diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c
1864 index 0ec6bce3dd69..d23ea74b5d20 100644
1865 --- a/fs/nfs/pagelist.c
1866 +++ b/fs/nfs/pagelist.c
1867 @@ -769,8 +769,7 @@ int nfs_generic_pgio(struct nfs_pageio_descriptor *desc,
1868 pageused = 0;
1869 while (!list_empty(head)) {
1870 req = nfs_list_entry(head->next);
1871 - nfs_list_remove_request(req);
1872 - nfs_list_add_request(req, &hdr->pages);
1873 + nfs_list_move_request(req, &hdr->pages);
1874
1875 if (!last_page || last_page != req->wb_page) {
1876 pageused++;
1877 @@ -962,8 +961,7 @@ static int nfs_pageio_do_add_request(struct nfs_pageio_descriptor *desc,
1878 }
1879 if (!nfs_can_coalesce_requests(prev, req, desc))
1880 return 0;
1881 - nfs_list_remove_request(req);
1882 - nfs_list_add_request(req, &mirror->pg_list);
1883 + nfs_list_move_request(req, &mirror->pg_list);
1884 mirror->pg_count += req->wb_bytes;
1885 return 1;
1886 }
1887 @@ -995,9 +993,8 @@ nfs_pageio_cleanup_request(struct nfs_pageio_descriptor *desc,
1888 {
1889 LIST_HEAD(head);
1890
1891 - nfs_list_remove_request(req);
1892 - nfs_list_add_request(req, &head);
1893 - desc->pg_completion_ops->error_cleanup(&head);
1894 + nfs_list_move_request(req, &head);
1895 + desc->pg_completion_ops->error_cleanup(&head, desc->pg_error);
1896 }
1897
1898 /**
1899 @@ -1133,7 +1130,8 @@ static void nfs_pageio_error_cleanup(struct nfs_pageio_descriptor *desc)
1900
1901 for (midx = 0; midx < desc->pg_mirror_count; midx++) {
1902 mirror = &desc->pg_mirrors[midx];
1903 - desc->pg_completion_ops->error_cleanup(&mirror->pg_list);
1904 + desc->pg_completion_ops->error_cleanup(&mirror->pg_list,
1905 + desc->pg_error);
1906 }
1907 }
1908
1909 @@ -1235,21 +1233,23 @@ static void nfs_pageio_complete_mirror(struct nfs_pageio_descriptor *desc,
1910 int nfs_pageio_resend(struct nfs_pageio_descriptor *desc,
1911 struct nfs_pgio_header *hdr)
1912 {
1913 - LIST_HEAD(failed);
1914 + LIST_HEAD(pages);
1915
1916 desc->pg_io_completion = hdr->io_completion;
1917 desc->pg_dreq = hdr->dreq;
1918 - while (!list_empty(&hdr->pages)) {
1919 - struct nfs_page *req = nfs_list_entry(hdr->pages.next);
1920 + list_splice_init(&hdr->pages, &pages);
1921 + while (!list_empty(&pages)) {
1922 + struct nfs_page *req = nfs_list_entry(pages.next);
1923
1924 - nfs_list_remove_request(req);
1925 if (!nfs_pageio_add_request(desc, req))
1926 - nfs_list_add_request(req, &failed);
1927 + break;
1928 }
1929 nfs_pageio_complete(desc);
1930 - if (!list_empty(&failed)) {
1931 - list_move(&failed, &hdr->pages);
1932 - return desc->pg_error < 0 ? desc->pg_error : -EIO;
1933 + if (!list_empty(&pages)) {
1934 + int err = desc->pg_error < 0 ? desc->pg_error : -EIO;
1935 + hdr->completion_ops->error_cleanup(&pages, err);
1936 + nfs_set_pgio_error(hdr, err, hdr->io_start);
1937 + return err;
1938 }
1939 return 0;
1940 }
1941 diff --git a/fs/nfs/read.c b/fs/nfs/read.c
1942 index 48d7277c60a9..09d5c282f50e 100644
1943 --- a/fs/nfs/read.c
1944 +++ b/fs/nfs/read.c
1945 @@ -205,7 +205,7 @@ static void nfs_initiate_read(struct nfs_pgio_header *hdr,
1946 }
1947
1948 static void
1949 -nfs_async_read_error(struct list_head *head)
1950 +nfs_async_read_error(struct list_head *head, int error)
1951 {
1952 struct nfs_page *req;
1953
1954 diff --git a/fs/nfs/write.c b/fs/nfs/write.c
1955 index 51d0b7913c04..5ab997912d8d 100644
1956 --- a/fs/nfs/write.c
1957 +++ b/fs/nfs/write.c
1958 @@ -1394,20 +1394,27 @@ static void nfs_redirty_request(struct nfs_page *req)
1959 nfs_release_request(req);
1960 }
1961
1962 -static void nfs_async_write_error(struct list_head *head)
1963 +static void nfs_async_write_error(struct list_head *head, int error)
1964 {
1965 struct nfs_page *req;
1966
1967 while (!list_empty(head)) {
1968 req = nfs_list_entry(head->next);
1969 nfs_list_remove_request(req);
1970 + if (nfs_error_is_fatal(error)) {
1971 + nfs_context_set_write_error(req->wb_context, error);
1972 + if (nfs_error_is_fatal_on_server(error)) {
1973 + nfs_write_error_remove_page(req);
1974 + continue;
1975 + }
1976 + }
1977 nfs_redirty_request(req);
1978 }
1979 }
1980
1981 static void nfs_async_write_reschedule_io(struct nfs_pgio_header *hdr)
1982 {
1983 - nfs_async_write_error(&hdr->pages);
1984 + nfs_async_write_error(&hdr->pages, 0);
1985 filemap_fdatawrite_range(hdr->inode->i_mapping, hdr->args.offset,
1986 hdr->args.offset + hdr->args.count - 1);
1987 }
1988 diff --git a/include/linux/logic_pio.h b/include/linux/logic_pio.h
1989 index cbd9d8495690..88e1e6304a71 100644
1990 --- a/include/linux/logic_pio.h
1991 +++ b/include/linux/logic_pio.h
1992 @@ -117,6 +117,7 @@ struct logic_pio_hwaddr *find_io_range_by_fwnode(struct fwnode_handle *fwnode);
1993 unsigned long logic_pio_trans_hwaddr(struct fwnode_handle *fwnode,
1994 resource_size_t hw_addr, resource_size_t size);
1995 int logic_pio_register_range(struct logic_pio_hwaddr *newrange);
1996 +void logic_pio_unregister_range(struct logic_pio_hwaddr *range);
1997 resource_size_t logic_pio_to_hwaddr(unsigned long pio);
1998 unsigned long logic_pio_trans_cpuaddr(resource_size_t hw_addr);
1999
2000 diff --git a/include/linux/nfs_page.h b/include/linux/nfs_page.h
2001 index e27572d30d97..ad69430fd0eb 100644
2002 --- a/include/linux/nfs_page.h
2003 +++ b/include/linux/nfs_page.h
2004 @@ -164,6 +164,16 @@ nfs_list_add_request(struct nfs_page *req, struct list_head *head)
2005 list_add_tail(&req->wb_list, head);
2006 }
2007
2008 +/**
2009 + * nfs_list_move_request - Move a request to a new list
2010 + * @req: request
2011 + * @head: head of list into which to insert the request.
2012 + */
2013 +static inline void
2014 +nfs_list_move_request(struct nfs_page *req, struct list_head *head)
2015 +{
2016 + list_move_tail(&req->wb_list, head);
2017 +}
2018
2019 /**
2020 * nfs_list_remove_request - Remove a request from its wb_list
2021 diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
2022 index bd1c889a9ed9..cab24a127feb 100644
2023 --- a/include/linux/nfs_xdr.h
2024 +++ b/include/linux/nfs_xdr.h
2025 @@ -1539,7 +1539,7 @@ struct nfs_commit_data {
2026 };
2027
2028 struct nfs_pgio_completion_ops {
2029 - void (*error_cleanup)(struct list_head *head);
2030 + void (*error_cleanup)(struct list_head *head, int);
2031 void (*init_hdr)(struct nfs_pgio_header *hdr);
2032 void (*completion)(struct nfs_pgio_header *hdr);
2033 void (*reschedule_io)(struct nfs_pgio_header *hdr);
2034 diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
2035 index d9dd709b3c12..7e215dac9693 100644
2036 --- a/kernel/trace/ftrace.c
2037 +++ b/kernel/trace/ftrace.c
2038 @@ -3112,6 +3112,14 @@ t_probe_next(struct seq_file *m, loff_t *pos)
2039 hnd = &iter->probe_entry->hlist;
2040
2041 hash = iter->probe->ops.func_hash->filter_hash;
2042 +
2043 + /*
2044 + * A probe being registered may temporarily have an empty hash
2045 + * and it's at the end of the func_probes list.
2046 + */
2047 + if (!hash || hash == EMPTY_HASH)
2048 + return NULL;
2049 +
2050 size = 1 << hash->size_bits;
2051
2052 retry:
2053 @@ -4307,12 +4315,21 @@ register_ftrace_function_probe(char *glob, struct trace_array *tr,
2054
2055 mutex_unlock(&ftrace_lock);
2056
2057 + /*
2058 + * Note, there's a small window here that the func_hash->filter_hash
2059 + * may be NULL or empty. Need to be carefule when reading the loop.
2060 + */
2061 mutex_lock(&probe->ops.func_hash->regex_lock);
2062
2063 orig_hash = &probe->ops.func_hash->filter_hash;
2064 old_hash = *orig_hash;
2065 hash = alloc_and_copy_ftrace_hash(FTRACE_HASH_DEFAULT_BITS, old_hash);
2066
2067 + if (!hash) {
2068 + ret = -ENOMEM;
2069 + goto out;
2070 + }
2071 +
2072 ret = ftrace_match_records(hash, glob, strlen(glob));
2073
2074 /* Nothing found? */
2075 diff --git a/lib/logic_pio.c b/lib/logic_pio.c
2076 index feea48fd1a0d..905027574e5d 100644
2077 --- a/lib/logic_pio.c
2078 +++ b/lib/logic_pio.c
2079 @@ -35,7 +35,7 @@ int logic_pio_register_range(struct logic_pio_hwaddr *new_range)
2080 struct logic_pio_hwaddr *range;
2081 resource_size_t start;
2082 resource_size_t end;
2083 - resource_size_t mmio_sz = 0;
2084 + resource_size_t mmio_end = 0;
2085 resource_size_t iio_sz = MMIO_UPPER_LIMIT;
2086 int ret = 0;
2087
2088 @@ -46,7 +46,7 @@ int logic_pio_register_range(struct logic_pio_hwaddr *new_range)
2089 end = new_range->hw_start + new_range->size;
2090
2091 mutex_lock(&io_range_mutex);
2092 - list_for_each_entry_rcu(range, &io_range_list, list) {
2093 + list_for_each_entry(range, &io_range_list, list) {
2094 if (range->fwnode == new_range->fwnode) {
2095 /* range already there */
2096 goto end_register;
2097 @@ -56,7 +56,7 @@ int logic_pio_register_range(struct logic_pio_hwaddr *new_range)
2098 /* for MMIO ranges we need to check for overlap */
2099 if (start >= range->hw_start + range->size ||
2100 end < range->hw_start) {
2101 - mmio_sz += range->size;
2102 + mmio_end = range->io_start + range->size;
2103 } else {
2104 ret = -EFAULT;
2105 goto end_register;
2106 @@ -69,16 +69,16 @@ int logic_pio_register_range(struct logic_pio_hwaddr *new_range)
2107
2108 /* range not registered yet, check for available space */
2109 if (new_range->flags == LOGIC_PIO_CPU_MMIO) {
2110 - if (mmio_sz + new_range->size - 1 > MMIO_UPPER_LIMIT) {
2111 + if (mmio_end + new_range->size - 1 > MMIO_UPPER_LIMIT) {
2112 /* if it's too big check if 64K space can be reserved */
2113 - if (mmio_sz + SZ_64K - 1 > MMIO_UPPER_LIMIT) {
2114 + if (mmio_end + SZ_64K - 1 > MMIO_UPPER_LIMIT) {
2115 ret = -E2BIG;
2116 goto end_register;
2117 }
2118 new_range->size = SZ_64K;
2119 pr_warn("Requested IO range too big, new size set to 64K\n");
2120 }
2121 - new_range->io_start = mmio_sz;
2122 + new_range->io_start = mmio_end;
2123 } else if (new_range->flags == LOGIC_PIO_INDIRECT) {
2124 if (iio_sz + new_range->size - 1 > IO_SPACE_LIMIT) {
2125 ret = -E2BIG;
2126 @@ -98,6 +98,20 @@ end_register:
2127 return ret;
2128 }
2129
2130 +/**
2131 + * logic_pio_unregister_range - unregister a logical PIO range for a host
2132 + * @range: pointer to the IO range which has been already registered.
2133 + *
2134 + * Unregister a previously-registered IO range node.
2135 + */
2136 +void logic_pio_unregister_range(struct logic_pio_hwaddr *range)
2137 +{
2138 + mutex_lock(&io_range_mutex);
2139 + list_del_rcu(&range->list);
2140 + mutex_unlock(&io_range_mutex);
2141 + synchronize_rcu();
2142 +}
2143 +
2144 /**
2145 * find_io_range_by_fwnode - find logical PIO range for given FW node
2146 * @fwnode: FW node handle associated with logical PIO range
2147 @@ -108,26 +122,38 @@ end_register:
2148 */
2149 struct logic_pio_hwaddr *find_io_range_by_fwnode(struct fwnode_handle *fwnode)
2150 {
2151 - struct logic_pio_hwaddr *range;
2152 + struct logic_pio_hwaddr *range, *found_range = NULL;
2153
2154 + rcu_read_lock();
2155 list_for_each_entry_rcu(range, &io_range_list, list) {
2156 - if (range->fwnode == fwnode)
2157 - return range;
2158 + if (range->fwnode == fwnode) {
2159 + found_range = range;
2160 + break;
2161 + }
2162 }
2163 - return NULL;
2164 + rcu_read_unlock();
2165 +
2166 + return found_range;
2167 }
2168
2169 /* Return a registered range given an input PIO token */
2170 static struct logic_pio_hwaddr *find_io_range(unsigned long pio)
2171 {
2172 - struct logic_pio_hwaddr *range;
2173 + struct logic_pio_hwaddr *range, *found_range = NULL;
2174
2175 + rcu_read_lock();
2176 list_for_each_entry_rcu(range, &io_range_list, list) {
2177 - if (in_range(pio, range->io_start, range->size))
2178 - return range;
2179 + if (in_range(pio, range->io_start, range->size)) {
2180 + found_range = range;
2181 + break;
2182 + }
2183 }
2184 - pr_err("PIO entry token %lx invalid\n", pio);
2185 - return NULL;
2186 + rcu_read_unlock();
2187 +
2188 + if (!found_range)
2189 + pr_err("PIO entry token 0x%lx invalid\n", pio);
2190 +
2191 + return found_range;
2192 }
2193
2194 /**
2195 @@ -180,14 +206,23 @@ unsigned long logic_pio_trans_cpuaddr(resource_size_t addr)
2196 {
2197 struct logic_pio_hwaddr *range;
2198
2199 + rcu_read_lock();
2200 list_for_each_entry_rcu(range, &io_range_list, list) {
2201 if (range->flags != LOGIC_PIO_CPU_MMIO)
2202 continue;
2203 - if (in_range(addr, range->hw_start, range->size))
2204 - return addr - range->hw_start + range->io_start;
2205 + if (in_range(addr, range->hw_start, range->size)) {
2206 + unsigned long cpuaddr;
2207 +
2208 + cpuaddr = addr - range->hw_start + range->io_start;
2209 +
2210 + rcu_read_unlock();
2211 + return cpuaddr;
2212 + }
2213 }
2214 - pr_err("addr %llx not registered in io_range_list\n",
2215 - (unsigned long long) addr);
2216 + rcu_read_unlock();
2217 +
2218 + pr_err("addr %pa not registered in io_range_list\n", &addr);
2219 +
2220 return ~0UL;
2221 }
2222
2223 diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
2224 index c2c4f739da8f..4b9063d12b93 100644
2225 --- a/mm/zsmalloc.c
2226 +++ b/mm/zsmalloc.c
2227 @@ -2432,7 +2432,9 @@ struct zs_pool *zs_create_pool(const char *name)
2228 if (!pool->name)
2229 goto err;
2230
2231 +#ifdef CONFIG_COMPACTION
2232 init_waitqueue_head(&pool->migration_wait);
2233 +#endif
2234
2235 if (create_cache(pool))
2236 goto err;
2237 diff --git a/net/core/stream.c b/net/core/stream.c
2238 index 7d329fb1f553..7f5eaa95a675 100644
2239 --- a/net/core/stream.c
2240 +++ b/net/core/stream.c
2241 @@ -120,7 +120,6 @@ int sk_stream_wait_memory(struct sock *sk, long *timeo_p)
2242 int err = 0;
2243 long vm_wait = 0;
2244 long current_timeo = *timeo_p;
2245 - bool noblock = (*timeo_p ? false : true);
2246 DEFINE_WAIT_FUNC(wait, woken_wake_function);
2247
2248 if (sk_stream_memory_free(sk))
2249 @@ -133,11 +132,8 @@ int sk_stream_wait_memory(struct sock *sk, long *timeo_p)
2250
2251 if (sk->sk_err || (sk->sk_shutdown & SEND_SHUTDOWN))
2252 goto do_error;
2253 - if (!*timeo_p) {
2254 - if (noblock)
2255 - set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
2256 - goto do_nonblock;
2257 - }
2258 + if (!*timeo_p)
2259 + goto do_eagain;
2260 if (signal_pending(current))
2261 goto do_interrupted;
2262 sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk);
2263 @@ -169,7 +165,13 @@ out:
2264 do_error:
2265 err = -EPIPE;
2266 goto out;
2267 -do_nonblock:
2268 +do_eagain:
2269 + /* Make sure that whenever EAGAIN is returned, EPOLLOUT event can
2270 + * be generated later.
2271 + * When TCP receives ACK packets that make room, tcp_check_space()
2272 + * only calls tcp_new_space() if SOCK_NOSPACE is set.
2273 + */
2274 + set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
2275 err = -EAGAIN;
2276 goto out;
2277 do_interrupted:
2278 diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
2279 index ad75c468ecfb..0167e23d1c8f 100644
2280 --- a/net/ipv4/icmp.c
2281 +++ b/net/ipv4/icmp.c
2282 @@ -587,7 +587,13 @@ void __icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info,
2283
2284 if (!rt)
2285 goto out;
2286 - net = dev_net(rt->dst.dev);
2287 +
2288 + if (rt->dst.dev)
2289 + net = dev_net(rt->dst.dev);
2290 + else if (skb_in->dev)
2291 + net = dev_net(skb_in->dev);
2292 + else
2293 + goto out;
2294
2295 /*
2296 * Find the original header. It is expected to be valid, of course.
2297 diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
2298 index c57efd5c5b38..49e2f6dac646 100644
2299 --- a/net/ipv6/addrconf.c
2300 +++ b/net/ipv6/addrconf.c
2301 @@ -995,7 +995,8 @@ ipv6_add_addr(struct inet6_dev *idev, struct ifa6_config *cfg,
2302 int err = 0;
2303
2304 if (addr_type == IPV6_ADDR_ANY ||
2305 - addr_type & IPV6_ADDR_MULTICAST ||
2306 + (addr_type & IPV6_ADDR_MULTICAST &&
2307 + !(cfg->ifa_flags & IFA_F_MCAUTOJOIN)) ||
2308 (!(idev->dev->flags & IFF_LOOPBACK) &&
2309 addr_type & IPV6_ADDR_LOOPBACK))
2310 return ERR_PTR(-EADDRNOTAVAIL);
2311 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
2312 index 81220077d62f..c88586380134 100644
2313 --- a/net/ipv6/route.c
2314 +++ b/net/ipv6/route.c
2315 @@ -3109,7 +3109,7 @@ static struct fib6_info *ip6_route_info_create(struct fib6_config *cfg,
2316 rt->fib6_metric = cfg->fc_metric;
2317 rt->fib6_nh.nh_weight = 1;
2318
2319 - rt->fib6_type = cfg->fc_type;
2320 + rt->fib6_type = cfg->fc_type ? : RTN_UNICAST;
2321
2322 /* We cannot add true routes via loopback here,
2323 they would result in kernel looping; promote them to reject routes
2324 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
2325 index 40c510223467..a48e83b19cfa 100644
2326 --- a/net/mac80211/cfg.c
2327 +++ b/net/mac80211/cfg.c
2328 @@ -1471,6 +1471,11 @@ static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev,
2329 if (is_multicast_ether_addr(mac))
2330 return -EINVAL;
2331
2332 + if (params->sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER) &&
2333 + sdata->vif.type == NL80211_IFTYPE_STATION &&
2334 + !sdata->u.mgd.associated)
2335 + return -EINVAL;
2336 +
2337 sta = sta_info_alloc(sdata, mac, GFP_KERNEL);
2338 if (!sta)
2339 return -ENOMEM;
2340 @@ -1478,10 +1483,6 @@ static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev,
2341 if (params->sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER))
2342 sta->sta.tdls = true;
2343
2344 - if (sta->sta.tdls && sdata->vif.type == NL80211_IFTYPE_STATION &&
2345 - !sdata->u.mgd.associated)
2346 - return -EINVAL;
2347 -
2348 err = sta_apply_parameters(local, sta, params);
2349 if (err) {
2350 sta_info_free(local, sta);
2351 diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
2352 index 7523d995ea8a..b12f23c996f4 100644
2353 --- a/net/mac80211/rx.c
2354 +++ b/net/mac80211/rx.c
2355 @@ -2372,11 +2372,13 @@ static void ieee80211_deliver_skb_to_local_stack(struct sk_buff *skb,
2356 skb->protocol == cpu_to_be16(ETH_P_PREAUTH)) &&
2357 sdata->control_port_over_nl80211)) {
2358 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2359 - bool noencrypt = status->flag & RX_FLAG_DECRYPTED;
2360 + bool noencrypt = !(status->flag & RX_FLAG_DECRYPTED);
2361
2362 cfg80211_rx_control_port(dev, skb, noencrypt);
2363 dev_kfree_skb(skb);
2364 } else {
2365 + memset(skb->cb, 0, sizeof(skb->cb));
2366 +
2367 /* deliver to local stack */
2368 if (rx->napi)
2369 napi_gro_receive(rx->napi, skb);
2370 @@ -2470,8 +2472,6 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
2371
2372 if (skb) {
2373 skb->protocol = eth_type_trans(skb, dev);
2374 - memset(skb->cb, 0, sizeof(skb->cb));
2375 -
2376 ieee80211_deliver_skb_to_local_stack(skb, rx);
2377 }
2378
2379 diff --git a/net/smc/smc_tx.c b/net/smc/smc_tx.c
2380 index d8366ed51757..28361aef9982 100644
2381 --- a/net/smc/smc_tx.c
2382 +++ b/net/smc/smc_tx.c
2383 @@ -75,13 +75,11 @@ static int smc_tx_wait(struct smc_sock *smc, int flags)
2384 DEFINE_WAIT_FUNC(wait, woken_wake_function);
2385 struct smc_connection *conn = &smc->conn;
2386 struct sock *sk = &smc->sk;
2387 - bool noblock;
2388 long timeo;
2389 int rc = 0;
2390
2391 /* similar to sk_stream_wait_memory */
2392 timeo = sock_sndtimeo(sk, flags & MSG_DONTWAIT);
2393 - noblock = timeo ? false : true;
2394 add_wait_queue(sk_sleep(sk), &wait);
2395 while (1) {
2396 sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
2397 @@ -96,8 +94,8 @@ static int smc_tx_wait(struct smc_sock *smc, int flags)
2398 break;
2399 }
2400 if (!timeo) {
2401 - if (noblock)
2402 - set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
2403 + /* ensure EPOLLOUT is subsequently generated */
2404 + set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
2405 rc = -EAGAIN;
2406 break;
2407 }
2408 diff --git a/net/tls/tls_main.c b/net/tls/tls_main.c
2409 index 4c0ac79f82d4..3288bdff9889 100644
2410 --- a/net/tls/tls_main.c
2411 +++ b/net/tls/tls_main.c
2412 @@ -301,6 +301,8 @@ static void tls_sk_proto_close(struct sock *sk, long timeout)
2413 #else
2414 {
2415 #endif
2416 + if (sk->sk_write_space == tls_write_space)
2417 + sk->sk_write_space = ctx->sk_write_space;
2418 tls_ctx_free(ctx);
2419 ctx = NULL;
2420 }
2421 diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
2422 index 6848a8196711..bbb2da70e870 100644
2423 --- a/net/tls/tls_sw.c
2424 +++ b/net/tls/tls_sw.c
2425 @@ -354,7 +354,7 @@ int tls_sw_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
2426 {
2427 struct tls_context *tls_ctx = tls_get_ctx(sk);
2428 struct tls_sw_context_tx *ctx = tls_sw_ctx_tx(tls_ctx);
2429 - int ret = 0;
2430 + int ret;
2431 int required_size;
2432 long timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT);
2433 bool eor = !(msg->msg_flags & MSG_MORE);
2434 @@ -370,7 +370,8 @@ int tls_sw_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
2435
2436 lock_sock(sk);
2437
2438 - if (tls_complete_pending_work(sk, tls_ctx, msg->msg_flags, &timeo))
2439 + ret = tls_complete_pending_work(sk, tls_ctx, msg->msg_flags, &timeo);
2440 + if (ret)
2441 goto send_end;
2442
2443 if (unlikely(msg->msg_controllen)) {
2444 @@ -505,7 +506,7 @@ int tls_sw_sendpage(struct sock *sk, struct page *page,
2445 {
2446 struct tls_context *tls_ctx = tls_get_ctx(sk);
2447 struct tls_sw_context_tx *ctx = tls_sw_ctx_tx(tls_ctx);
2448 - int ret = 0;
2449 + int ret;
2450 long timeo = sock_sndtimeo(sk, flags & MSG_DONTWAIT);
2451 bool eor;
2452 size_t orig_size = size;
2453 @@ -525,7 +526,8 @@ int tls_sw_sendpage(struct sock *sk, struct page *page,
2454
2455 sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk);
2456
2457 - if (tls_complete_pending_work(sk, tls_ctx, flags, &timeo))
2458 + ret = tls_complete_pending_work(sk, tls_ctx, flags, &timeo);
2459 + if (ret)
2460 goto sendpage_end;
2461
2462 /* Call the sk_stream functions to manage the sndbuf mem. */
2463 diff --git a/net/wireless/reg.c b/net/wireless/reg.c
2464 index 8a47297ff206..d8ebf4f0ef6e 100644
2465 --- a/net/wireless/reg.c
2466 +++ b/net/wireless/reg.c
2467 @@ -2777,7 +2777,7 @@ static void reg_process_pending_hints(void)
2468
2469 /* When last_request->processed becomes true this will be rescheduled */
2470 if (lr && !lr->processed) {
2471 - reg_process_hint(lr);
2472 + pr_debug("Pending regulatory request, waiting for it to be processed...\n");
2473 return;
2474 }
2475
2476 diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
2477 index bbf91a5a938b..bd3d68e0489d 100644
2478 --- a/sound/core/seq/seq_clientmgr.c
2479 +++ b/sound/core/seq/seq_clientmgr.c
2480 @@ -1818,8 +1818,7 @@ static int snd_seq_ioctl_get_client_pool(struct snd_seq_client *client,
2481 if (cptr->type == USER_CLIENT) {
2482 info->input_pool = cptr->data.user.fifo_pool_size;
2483 info->input_free = info->input_pool;
2484 - if (cptr->data.user.fifo)
2485 - info->input_free = snd_seq_unused_cells(cptr->data.user.fifo->pool);
2486 + info->input_free = snd_seq_fifo_unused_cells(cptr->data.user.fifo);
2487 } else {
2488 info->input_pool = 0;
2489 info->input_free = 0;
2490 diff --git a/sound/core/seq/seq_fifo.c b/sound/core/seq/seq_fifo.c
2491 index 72c0302a55d2..6a24732704fc 100644
2492 --- a/sound/core/seq/seq_fifo.c
2493 +++ b/sound/core/seq/seq_fifo.c
2494 @@ -280,3 +280,20 @@ int snd_seq_fifo_resize(struct snd_seq_fifo *f, int poolsize)
2495
2496 return 0;
2497 }
2498 +
2499 +/* get the number of unused cells safely */
2500 +int snd_seq_fifo_unused_cells(struct snd_seq_fifo *f)
2501 +{
2502 + unsigned long flags;
2503 + int cells;
2504 +
2505 + if (!f)
2506 + return 0;
2507 +
2508 + snd_use_lock_use(&f->use_lock);
2509 + spin_lock_irqsave(&f->lock, flags);
2510 + cells = snd_seq_unused_cells(f->pool);
2511 + spin_unlock_irqrestore(&f->lock, flags);
2512 + snd_use_lock_free(&f->use_lock);
2513 + return cells;
2514 +}
2515 diff --git a/sound/core/seq/seq_fifo.h b/sound/core/seq/seq_fifo.h
2516 index 062c446e7867..5d38a0d7f0cd 100644
2517 --- a/sound/core/seq/seq_fifo.h
2518 +++ b/sound/core/seq/seq_fifo.h
2519 @@ -68,5 +68,7 @@ int snd_seq_fifo_poll_wait(struct snd_seq_fifo *f, struct file *file, poll_table
2520 /* resize pool in fifo */
2521 int snd_seq_fifo_resize(struct snd_seq_fifo *f, int poolsize);
2522
2523 +/* get the number of unused cells safely */
2524 +int snd_seq_fifo_unused_cells(struct snd_seq_fifo *f);
2525
2526 #endif
2527 diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
2528 index 6f17b256fcd0..ae8fde4c1a12 100644
2529 --- a/sound/pci/hda/patch_conexant.c
2530 +++ b/sound/pci/hda/patch_conexant.c
2531 @@ -624,18 +624,20 @@ static void cxt_fixup_hp_gate_mic_jack(struct hda_codec *codec,
2532
2533 /* update LED status via GPIO */
2534 static void cxt_update_gpio_led(struct hda_codec *codec, unsigned int mask,
2535 - bool enabled)
2536 + bool led_on)
2537 {
2538 struct conexant_spec *spec = codec->spec;
2539 unsigned int oldval = spec->gpio_led;
2540
2541 if (spec->mute_led_polarity)
2542 - enabled = !enabled;
2543 + led_on = !led_on;
2544
2545 - if (enabled)
2546 - spec->gpio_led &= ~mask;
2547 - else
2548 + if (led_on)
2549 spec->gpio_led |= mask;
2550 + else
2551 + spec->gpio_led &= ~mask;
2552 + codec_dbg(codec, "mask:%d enabled:%d gpio_led:%d\n",
2553 + mask, led_on, spec->gpio_led);
2554 if (spec->gpio_led != oldval)
2555 snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA,
2556 spec->gpio_led);
2557 @@ -646,8 +648,8 @@ static void cxt_fixup_gpio_mute_hook(void *private_data, int enabled)
2558 {
2559 struct hda_codec *codec = private_data;
2560 struct conexant_spec *spec = codec->spec;
2561 -
2562 - cxt_update_gpio_led(codec, spec->gpio_mute_led_mask, enabled);
2563 + /* muted -> LED on */
2564 + cxt_update_gpio_led(codec, spec->gpio_mute_led_mask, !enabled);
2565 }
2566
2567 /* turn on/off mic-mute LED via GPIO per capture hook */
2568 @@ -669,7 +671,6 @@ static void cxt_fixup_mute_led_gpio(struct hda_codec *codec,
2569 { 0x01, AC_VERB_SET_GPIO_DIRECTION, 0x03 },
2570 {}
2571 };
2572 - codec_info(codec, "action: %d gpio_led: %d\n", action, spec->gpio_led);
2573
2574 if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2575 spec->gen.vmaster_mute.hook = cxt_fixup_gpio_mute_hook;
2576 diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
2577 index dafc3b7f8d72..62aa320c2070 100644
2578 --- a/sound/soc/soc-core.c
2579 +++ b/sound/soc/soc-core.c
2580 @@ -1513,11 +1513,8 @@ static int soc_probe_link_dais(struct snd_soc_card *card,
2581 }
2582 }
2583
2584 - if (dai_link->dai_fmt) {
2585 - ret = snd_soc_runtime_set_dai_fmt(rtd, dai_link->dai_fmt);
2586 - if (ret)
2587 - return ret;
2588 - }
2589 + if (dai_link->dai_fmt)
2590 + snd_soc_runtime_set_dai_fmt(rtd, dai_link->dai_fmt);
2591
2592 ret = soc_post_component_init(rtd, dai_link->name);
2593 if (ret)
2594 diff --git a/sound/usb/line6/pcm.c b/sound/usb/line6/pcm.c
2595 index 78c2d6cab3b5..531564269444 100644
2596 --- a/sound/usb/line6/pcm.c
2597 +++ b/sound/usb/line6/pcm.c
2598 @@ -554,6 +554,15 @@ int line6_init_pcm(struct usb_line6 *line6,
2599 line6pcm->volume_monitor = 255;
2600 line6pcm->line6 = line6;
2601
2602 + spin_lock_init(&line6pcm->out.lock);
2603 + spin_lock_init(&line6pcm->in.lock);
2604 + line6pcm->impulse_period = LINE6_IMPULSE_DEFAULT_PERIOD;
2605 +
2606 + line6->line6pcm = line6pcm;
2607 +
2608 + pcm->private_data = line6pcm;
2609 + pcm->private_free = line6_cleanup_pcm;
2610 +
2611 line6pcm->max_packet_size_in =
2612 usb_maxpacket(line6->usbdev,
2613 usb_rcvisocpipe(line6->usbdev, ep_read), 0);
2614 @@ -566,15 +575,6 @@ int line6_init_pcm(struct usb_line6 *line6,
2615 return -EINVAL;
2616 }
2617
2618 - spin_lock_init(&line6pcm->out.lock);
2619 - spin_lock_init(&line6pcm->in.lock);
2620 - line6pcm->impulse_period = LINE6_IMPULSE_DEFAULT_PERIOD;
2621 -
2622 - line6->line6pcm = line6pcm;
2623 -
2624 - pcm->private_data = line6pcm;
2625 - pcm->private_free = line6_cleanup_pcm;
2626 -
2627 err = line6_create_audio_out_urbs(line6pcm);
2628 if (err < 0)
2629 return err;
2630 diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
2631 index 4b3e1c48ca2f..b0c5d4ef6137 100644
2632 --- a/sound/usb/mixer.c
2633 +++ b/sound/usb/mixer.c
2634 @@ -754,7 +754,6 @@ static int uac_mixer_unit_get_channels(struct mixer_build *state,
2635 struct uac_mixer_unit_descriptor *desc)
2636 {
2637 int mu_channels;
2638 - void *c;
2639
2640 if (desc->bLength < sizeof(*desc))
2641 return -EINVAL;
2642 @@ -777,13 +776,6 @@ static int uac_mixer_unit_get_channels(struct mixer_build *state,
2643 break;
2644 }
2645
2646 - if (!mu_channels)
2647 - return 0;
2648 -
2649 - c = uac_mixer_unit_bmControls(desc, state->mixer->protocol);
2650 - if (c - (void *)desc + (mu_channels - 1) / 8 >= desc->bLength)
2651 - return 0; /* no bmControls -> skip */
2652 -
2653 return mu_channels;
2654 }
2655
2656 @@ -2028,6 +2020,31 @@ static int parse_audio_feature_unit(struct mixer_build *state, int unitid,
2657 * Mixer Unit
2658 */
2659
2660 +/* check whether the given in/out overflows bmMixerControls matrix */
2661 +static bool mixer_bitmap_overflow(struct uac_mixer_unit_descriptor *desc,
2662 + int protocol, int num_ins, int num_outs)
2663 +{
2664 + u8 *hdr = (u8 *)desc;
2665 + u8 *c = uac_mixer_unit_bmControls(desc, protocol);
2666 + size_t rest; /* remaining bytes after bmMixerControls */
2667 +
2668 + switch (protocol) {
2669 + case UAC_VERSION_1:
2670 + default:
2671 + rest = 1; /* iMixer */
2672 + break;
2673 + case UAC_VERSION_2:
2674 + rest = 2; /* bmControls + iMixer */
2675 + break;
2676 + case UAC_VERSION_3:
2677 + rest = 6; /* bmControls + wMixerDescrStr */
2678 + break;
2679 + }
2680 +
2681 + /* overflow? */
2682 + return c + (num_ins * num_outs + 7) / 8 + rest > hdr + hdr[0];
2683 +}
2684 +
2685 /*
2686 * build a mixer unit control
2687 *
2688 @@ -2156,6 +2173,9 @@ static int parse_audio_mixer_unit(struct mixer_build *state, int unitid,
2689 if (err < 0)
2690 return err;
2691 num_ins += iterm.channels;
2692 + if (mixer_bitmap_overflow(desc, state->mixer->protocol,
2693 + num_ins, num_outs))
2694 + break;
2695 for (; ich < num_ins; ich++) {
2696 int och, ich_has_controls = 0;
2697
2698 diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
2699 index 5b342fe30c75..10c6971cf477 100644
2700 --- a/sound/usb/mixer_quirks.c
2701 +++ b/sound/usb/mixer_quirks.c
2702 @@ -1167,17 +1167,17 @@ void snd_emuusb_set_samplerate(struct snd_usb_audio *chip,
2703 {
2704 struct usb_mixer_interface *mixer;
2705 struct usb_mixer_elem_info *cval;
2706 - int unitid = 12; /* SamleRate ExtensionUnit ID */
2707 + int unitid = 12; /* SampleRate ExtensionUnit ID */
2708
2709 list_for_each_entry(mixer, &chip->mixer_list, list) {
2710 - cval = mixer_elem_list_to_info(mixer->id_elems[unitid]);
2711 - if (cval) {
2712 + if (mixer->id_elems[unitid]) {
2713 + cval = mixer_elem_list_to_info(mixer->id_elems[unitid]);
2714 snd_usb_mixer_set_ctl_value(cval, UAC_SET_CUR,
2715 cval->control << 8,
2716 samplerate_id);
2717 snd_usb_mixer_notify_id(mixer, unitid);
2718 + break;
2719 }
2720 - break;
2721 }
2722 }
2723
2724 diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
2725 index db114f3977e0..35c57a4204a8 100644
2726 --- a/sound/usb/pcm.c
2727 +++ b/sound/usb/pcm.c
2728 @@ -350,6 +350,7 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
2729 ep = 0x81;
2730 ifnum = 2;
2731 goto add_sync_ep_from_ifnum;
2732 + case USB_ID(0x1397, 0x0001): /* Behringer UFX1604 */
2733 case USB_ID(0x1397, 0x0002): /* Behringer UFX1204 */
2734 ep = 0x81;
2735 ifnum = 1;
2736 diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
2737 index d7e06fe0270e..0ce50c319cfd 100644
2738 --- a/tools/hv/hv_kvp_daemon.c
2739 +++ b/tools/hv/hv_kvp_daemon.c
2740 @@ -1386,6 +1386,8 @@ int main(int argc, char *argv[])
2741 daemonize = 0;
2742 break;
2743 case 'h':
2744 + print_usage(argv);
2745 + exit(0);
2746 default:
2747 print_usage(argv);
2748 exit(EXIT_FAILURE);
2749 diff --git a/tools/hv/hv_vss_daemon.c b/tools/hv/hv_vss_daemon.c
2750 index b13300172762..c2bb8a360177 100644
2751 --- a/tools/hv/hv_vss_daemon.c
2752 +++ b/tools/hv/hv_vss_daemon.c
2753 @@ -229,6 +229,8 @@ int main(int argc, char *argv[])
2754 daemonize = 0;
2755 break;
2756 case 'h':
2757 + print_usage(argv);
2758 + exit(0);
2759 default:
2760 print_usage(argv);
2761 exit(EXIT_FAILURE);
2762 diff --git a/tools/hv/lsvmbus b/tools/hv/lsvmbus
2763 index 55e7374bade0..099f2c44dbed 100644
2764 --- a/tools/hv/lsvmbus
2765 +++ b/tools/hv/lsvmbus
2766 @@ -4,10 +4,10 @@
2767 import os
2768 from optparse import OptionParser
2769
2770 +help_msg = "print verbose messages. Try -vv, -vvv for more verbose messages"
2771 parser = OptionParser()
2772 -parser.add_option("-v", "--verbose", dest="verbose",
2773 - help="print verbose messages. Try -vv, -vvv for \
2774 - more verbose messages", action="count")
2775 +parser.add_option(
2776 + "-v", "--verbose", dest="verbose", help=help_msg, action="count")
2777
2778 (options, args) = parser.parse_args()
2779
2780 @@ -21,27 +21,28 @@ if not os.path.isdir(vmbus_sys_path):
2781 exit(-1)
2782
2783 vmbus_dev_dict = {
2784 - '{0e0b6031-5213-4934-818b-38d90ced39db}' : '[Operating system shutdown]',
2785 - '{9527e630-d0ae-497b-adce-e80ab0175caf}' : '[Time Synchronization]',
2786 - '{57164f39-9115-4e78-ab55-382f3bd5422d}' : '[Heartbeat]',
2787 - '{a9a0f4e7-5a45-4d96-b827-8a841e8c03e6}' : '[Data Exchange]',
2788 - '{35fa2e29-ea23-4236-96ae-3a6ebacba440}' : '[Backup (volume checkpoint)]',
2789 - '{34d14be3-dee4-41c8-9ae7-6b174977c192}' : '[Guest services]',
2790 - '{525074dc-8985-46e2-8057-a307dc18a502}' : '[Dynamic Memory]',
2791 - '{cfa8b69e-5b4a-4cc0-b98b-8ba1a1f3f95a}' : 'Synthetic mouse',
2792 - '{f912ad6d-2b17-48ea-bd65-f927a61c7684}' : 'Synthetic keyboard',
2793 - '{da0a7802-e377-4aac-8e77-0558eb1073f8}' : 'Synthetic framebuffer adapter',
2794 - '{f8615163-df3e-46c5-913f-f2d2f965ed0e}' : 'Synthetic network adapter',
2795 - '{32412632-86cb-44a2-9b5c-50d1417354f5}' : 'Synthetic IDE Controller',
2796 - '{ba6163d9-04a1-4d29-b605-72e2ffb1dc7f}' : 'Synthetic SCSI Controller',
2797 - '{2f9bcc4a-0069-4af3-b76b-6fd0be528cda}' : 'Synthetic fiber channel adapter',
2798 - '{8c2eaf3d-32a7-4b09-ab99-bd1f1c86b501}' : 'Synthetic RDMA adapter',
2799 - '{44c4f61d-4444-4400-9d52-802e27ede19f}' : 'PCI Express pass-through',
2800 - '{276aacf4-ac15-426c-98dd-7521ad3f01fe}' : '[Reserved system device]',
2801 - '{f8e65716-3cb3-4a06-9a60-1889c5cccab5}' : '[Reserved system device]',
2802 - '{3375baf4-9e15-4b30-b765-67acb10d607b}' : '[Reserved system device]',
2803 + '{0e0b6031-5213-4934-818b-38d90ced39db}': '[Operating system shutdown]',
2804 + '{9527e630-d0ae-497b-adce-e80ab0175caf}': '[Time Synchronization]',
2805 + '{57164f39-9115-4e78-ab55-382f3bd5422d}': '[Heartbeat]',
2806 + '{a9a0f4e7-5a45-4d96-b827-8a841e8c03e6}': '[Data Exchange]',
2807 + '{35fa2e29-ea23-4236-96ae-3a6ebacba440}': '[Backup (volume checkpoint)]',
2808 + '{34d14be3-dee4-41c8-9ae7-6b174977c192}': '[Guest services]',
2809 + '{525074dc-8985-46e2-8057-a307dc18a502}': '[Dynamic Memory]',
2810 + '{cfa8b69e-5b4a-4cc0-b98b-8ba1a1f3f95a}': 'Synthetic mouse',
2811 + '{f912ad6d-2b17-48ea-bd65-f927a61c7684}': 'Synthetic keyboard',
2812 + '{da0a7802-e377-4aac-8e77-0558eb1073f8}': 'Synthetic framebuffer adapter',
2813 + '{f8615163-df3e-46c5-913f-f2d2f965ed0e}': 'Synthetic network adapter',
2814 + '{32412632-86cb-44a2-9b5c-50d1417354f5}': 'Synthetic IDE Controller',
2815 + '{ba6163d9-04a1-4d29-b605-72e2ffb1dc7f}': 'Synthetic SCSI Controller',
2816 + '{2f9bcc4a-0069-4af3-b76b-6fd0be528cda}': 'Synthetic fiber channel adapter',
2817 + '{8c2eaf3d-32a7-4b09-ab99-bd1f1c86b501}': 'Synthetic RDMA adapter',
2818 + '{44c4f61d-4444-4400-9d52-802e27ede19f}': 'PCI Express pass-through',
2819 + '{276aacf4-ac15-426c-98dd-7521ad3f01fe}': '[Reserved system device]',
2820 + '{f8e65716-3cb3-4a06-9a60-1889c5cccab5}': '[Reserved system device]',
2821 + '{3375baf4-9e15-4b30-b765-67acb10d607b}': '[Reserved system device]',
2822 }
2823
2824 +
2825 def get_vmbus_dev_attr(dev_name, attr):
2826 try:
2827 f = open('%s/%s/%s' % (vmbus_sys_path, dev_name, attr), 'r')
2828 @@ -52,6 +53,7 @@ def get_vmbus_dev_attr(dev_name, attr):
2829
2830 return lines
2831
2832 +
2833 class VMBus_Dev:
2834 pass
2835
2836 @@ -66,12 +68,13 @@ for f in os.listdir(vmbus_sys_path):
2837
2838 chn_vp_mapping = get_vmbus_dev_attr(f, 'channel_vp_mapping')
2839 chn_vp_mapping = [c.strip() for c in chn_vp_mapping]
2840 - chn_vp_mapping = sorted(chn_vp_mapping,
2841 - key = lambda c : int(c.split(':')[0]))
2842 + chn_vp_mapping = sorted(
2843 + chn_vp_mapping, key=lambda c: int(c.split(':')[0]))
2844
2845 - chn_vp_mapping = ['\tRel_ID=%s, target_cpu=%s' %
2846 - (c.split(':')[0], c.split(':')[1])
2847 - for c in chn_vp_mapping]
2848 + chn_vp_mapping = [
2849 + '\tRel_ID=%s, target_cpu=%s' %
2850 + (c.split(':')[0], c.split(':')[1]) for c in chn_vp_mapping
2851 + ]
2852 d = VMBus_Dev()
2853 d.sysfs_path = '%s/%s' % (vmbus_sys_path, f)
2854 d.vmbus_id = vmbus_id
2855 @@ -85,7 +88,7 @@ for f in os.listdir(vmbus_sys_path):
2856 vmbus_dev_list.append(d)
2857
2858
2859 -vmbus_dev_list = sorted(vmbus_dev_list, key = lambda d : int(d.vmbus_id))
2860 +vmbus_dev_list = sorted(vmbus_dev_list, key=lambda d: int(d.vmbus_id))
2861
2862 format0 = '%2s: %s'
2863 format1 = '%2s: Class_ID = %s - %s\n%s'
2864 @@ -95,9 +98,15 @@ for d in vmbus_dev_list:
2865 if verbose == 0:
2866 print(('VMBUS ID ' + format0) % (d.vmbus_id, d.dev_desc))
2867 elif verbose == 1:
2868 - print (('VMBUS ID ' + format1) % \
2869 - (d.vmbus_id, d.class_id, d.dev_desc, d.chn_vp_mapping))
2870 + print(
2871 + ('VMBUS ID ' + format1) %
2872 + (d.vmbus_id, d.class_id, d.dev_desc, d.chn_vp_mapping)
2873 + )
2874 else:
2875 - print (('VMBUS ID ' + format2) % \
2876 - (d.vmbus_id, d.class_id, d.dev_desc, \
2877 - d.device_id, d.sysfs_path, d.chn_vp_mapping))
2878 + print(
2879 + ('VMBUS ID ' + format2) %
2880 + (
2881 + d.vmbus_id, d.class_id, d.dev_desc,
2882 + d.device_id, d.sysfs_path, d.chn_vp_mapping
2883 + )
2884 + )
2885 diff --git a/virt/kvm/arm/vgic/vgic-mmio.c b/virt/kvm/arm/vgic/vgic-mmio.c
2886 index ceeda7e04a4d..762f81900529 100644
2887 --- a/virt/kvm/arm/vgic/vgic-mmio.c
2888 +++ b/virt/kvm/arm/vgic/vgic-mmio.c
2889 @@ -203,6 +203,12 @@ static void vgic_hw_irq_spending(struct kvm_vcpu *vcpu, struct vgic_irq *irq,
2890 vgic_irq_set_phys_active(irq, true);
2891 }
2892
2893 +static bool is_vgic_v2_sgi(struct kvm_vcpu *vcpu, struct vgic_irq *irq)
2894 +{
2895 + return (vgic_irq_is_sgi(irq->intid) &&
2896 + vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V2);
2897 +}
2898 +
2899 void vgic_mmio_write_spending(struct kvm_vcpu *vcpu,
2900 gpa_t addr, unsigned int len,
2901 unsigned long val)
2902 @@ -215,6 +221,12 @@ void vgic_mmio_write_spending(struct kvm_vcpu *vcpu,
2903 for_each_set_bit(i, &val, len * 8) {
2904 struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
2905
2906 + /* GICD_ISPENDR0 SGI bits are WI */
2907 + if (is_vgic_v2_sgi(vcpu, irq)) {
2908 + vgic_put_irq(vcpu->kvm, irq);
2909 + continue;
2910 + }
2911 +
2912 spin_lock_irqsave(&irq->irq_lock, flags);
2913 if (irq->hw)
2914 vgic_hw_irq_spending(vcpu, irq, is_uaccess);
2915 @@ -262,6 +274,12 @@ void vgic_mmio_write_cpending(struct kvm_vcpu *vcpu,
2916 for_each_set_bit(i, &val, len * 8) {
2917 struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
2918
2919 + /* GICD_ICPENDR0 SGI bits are WI */
2920 + if (is_vgic_v2_sgi(vcpu, irq)) {
2921 + vgic_put_irq(vcpu->kvm, irq);
2922 + continue;
2923 + }
2924 +
2925 spin_lock_irqsave(&irq->irq_lock, flags);
2926
2927 if (irq->hw)
2928 diff --git a/virt/kvm/arm/vgic/vgic-v2.c b/virt/kvm/arm/vgic/vgic-v2.c
2929 index 57281c1594d0..91b14dfacd1d 100644
2930 --- a/virt/kvm/arm/vgic/vgic-v2.c
2931 +++ b/virt/kvm/arm/vgic/vgic-v2.c
2932 @@ -195,7 +195,10 @@ void vgic_v2_populate_lr(struct kvm_vcpu *vcpu, struct vgic_irq *irq, int lr)
2933 if (vgic_irq_is_sgi(irq->intid)) {
2934 u32 src = ffs(irq->source);
2935
2936 - BUG_ON(!src);
2937 + if (WARN_RATELIMIT(!src, "No SGI source for INTID %d\n",
2938 + irq->intid))
2939 + return;
2940 +
2941 val |= (src - 1) << GICH_LR_PHYSID_CPUID_SHIFT;
2942 irq->source &= ~(1 << (src - 1));
2943 if (irq->source) {
2944 diff --git a/virt/kvm/arm/vgic/vgic-v3.c b/virt/kvm/arm/vgic/vgic-v3.c
2945 index 5c55995a1a16..8b958ed05306 100644
2946 --- a/virt/kvm/arm/vgic/vgic-v3.c
2947 +++ b/virt/kvm/arm/vgic/vgic-v3.c
2948 @@ -179,7 +179,10 @@ void vgic_v3_populate_lr(struct kvm_vcpu *vcpu, struct vgic_irq *irq, int lr)
2949 model == KVM_DEV_TYPE_ARM_VGIC_V2) {
2950 u32 src = ffs(irq->source);
2951
2952 - BUG_ON(!src);
2953 + if (WARN_RATELIMIT(!src, "No SGI source for INTID %d\n",
2954 + irq->intid))
2955 + return;
2956 +
2957 val |= (src - 1) << GICH_LR_PHYSID_CPUID_SHIFT;
2958 irq->source &= ~(1 << (src - 1));
2959 if (irq->source) {
2960 diff --git a/virt/kvm/arm/vgic/vgic.c b/virt/kvm/arm/vgic/vgic.c
2961 index 250cd72c95a5..4040a33cdc90 100644
2962 --- a/virt/kvm/arm/vgic/vgic.c
2963 +++ b/virt/kvm/arm/vgic/vgic.c
2964 @@ -244,6 +244,13 @@ static int vgic_irq_cmp(void *priv, struct list_head *a, struct list_head *b)
2965 bool penda, pendb;
2966 int ret;
2967
2968 + /*
2969 + * list_sort may call this function with the same element when
2970 + * the list is fairly long.
2971 + */
2972 + if (unlikely(irqa == irqb))
2973 + return 0;
2974 +
2975 spin_lock(&irqa->irq_lock);
2976 spin_lock_nested(&irqb->irq_lock, SINGLE_DEPTH_NESTING);
2977