Magellan Linux

Contents of /trunk/kernel-alx/patches-5.4/0166-5.4.67-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3635 - (show annotations) (download)
Mon Oct 24 12:34:12 2022 UTC (19 months ago) by niro
File size: 72976 byte(s)
-sync kernel patches
1 diff --git a/Makefile b/Makefile
2 index a3686247e10e9..d2e46ca4c955b 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 5
8 PATCHLEVEL = 4
9 -SUBLEVEL = 66
10 +SUBLEVEL = 67
11 EXTRAVERSION =
12 NAME = Kleptomaniac Octopus
13
14 diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c
15 index 51462c59ab5da..d2e738c455566 100644
16 --- a/arch/arm64/kernel/cpu_errata.c
17 +++ b/arch/arm64/kernel/cpu_errata.c
18 @@ -917,8 +917,12 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
19 .desc = "ARM erratum 1418040",
20 .capability = ARM64_WORKAROUND_1418040,
21 ERRATA_MIDR_RANGE_LIST(erratum_1418040_list),
22 - .type = (ARM64_CPUCAP_SCOPE_LOCAL_CPU |
23 - ARM64_CPUCAP_PERMITTED_FOR_LATE_CPU),
24 + /*
25 + * We need to allow affected CPUs to come in late, but
26 + * also need the non-affected CPUs to be able to come
27 + * in at any point in time. Wonderful.
28 + */
29 + .type = ARM64_CPUCAP_WEAK_LOCAL_CPU_FEATURE,
30 },
31 #endif
32 #ifdef CONFIG_ARM64_ERRATUM_1165522
33 diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c
34 index cdc79de0c794a..945e5f690edec 100644
35 --- a/arch/arm64/net/bpf_jit_comp.c
36 +++ b/arch/arm64/net/bpf_jit_comp.c
37 @@ -141,14 +141,17 @@ static inline void emit_addr_mov_i64(const int reg, const u64 val,
38 }
39 }
40
41 -static inline int bpf2a64_offset(int bpf_to, int bpf_from,
42 +static inline int bpf2a64_offset(int bpf_insn, int off,
43 const struct jit_ctx *ctx)
44 {
45 - int to = ctx->offset[bpf_to];
46 - /* -1 to account for the Branch instruction */
47 - int from = ctx->offset[bpf_from] - 1;
48 -
49 - return to - from;
50 + /* BPF JMP offset is relative to the next instruction */
51 + bpf_insn++;
52 + /*
53 + * Whereas arm64 branch instructions encode the offset
54 + * from the branch itself, so we must subtract 1 from the
55 + * instruction offset.
56 + */
57 + return ctx->offset[bpf_insn + off] - (ctx->offset[bpf_insn] - 1);
58 }
59
60 static void jit_fill_hole(void *area, unsigned int size)
61 @@ -532,7 +535,7 @@ emit_bswap_uxt:
62
63 /* JUMP off */
64 case BPF_JMP | BPF_JA:
65 - jmp_offset = bpf2a64_offset(i + off, i, ctx);
66 + jmp_offset = bpf2a64_offset(i, off, ctx);
67 check_imm26(jmp_offset);
68 emit(A64_B(jmp_offset), ctx);
69 break;
70 @@ -559,7 +562,7 @@ emit_bswap_uxt:
71 case BPF_JMP32 | BPF_JSLE | BPF_X:
72 emit(A64_CMP(is64, dst, src), ctx);
73 emit_cond_jmp:
74 - jmp_offset = bpf2a64_offset(i + off, i, ctx);
75 + jmp_offset = bpf2a64_offset(i, off, ctx);
76 check_imm19(jmp_offset);
77 switch (BPF_OP(code)) {
78 case BPF_JEQ:
79 @@ -780,10 +783,21 @@ static int build_body(struct jit_ctx *ctx, bool extra_pass)
80 const struct bpf_prog *prog = ctx->prog;
81 int i;
82
83 + /*
84 + * - offset[0] offset of the end of prologue,
85 + * start of the 1st instruction.
86 + * - offset[1] - offset of the end of 1st instruction,
87 + * start of the 2nd instruction
88 + * [....]
89 + * - offset[3] - offset of the end of 3rd instruction,
90 + * start of 4th instruction
91 + */
92 for (i = 0; i < prog->len; i++) {
93 const struct bpf_insn *insn = &prog->insnsi[i];
94 int ret;
95
96 + if (ctx->image == NULL)
97 + ctx->offset[i] = ctx->idx;
98 ret = build_insn(insn, ctx, extra_pass);
99 if (ret > 0) {
100 i++;
101 @@ -791,11 +805,16 @@ static int build_body(struct jit_ctx *ctx, bool extra_pass)
102 ctx->offset[i] = ctx->idx;
103 continue;
104 }
105 - if (ctx->image == NULL)
106 - ctx->offset[i] = ctx->idx;
107 if (ret)
108 return ret;
109 }
110 + /*
111 + * offset is allocated with prog->len + 1 so fill in
112 + * the last element with the offset after the last
113 + * instruction (end of program)
114 + */
115 + if (ctx->image == NULL)
116 + ctx->offset[i] = ctx->idx;
117
118 return 0;
119 }
120 @@ -871,7 +890,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
121 memset(&ctx, 0, sizeof(ctx));
122 ctx.prog = prog;
123
124 - ctx.offset = kcalloc(prog->len, sizeof(int), GFP_KERNEL);
125 + ctx.offset = kcalloc(prog->len + 1, sizeof(int), GFP_KERNEL);
126 if (ctx.offset == NULL) {
127 prog = orig_prog;
128 goto out_off;
129 @@ -951,7 +970,7 @@ skip_init_ctx:
130 prog->jited_len = image_size;
131
132 if (!prog->is_func || extra_pass) {
133 - bpf_prog_fill_jited_linfo(prog, ctx.offset);
134 + bpf_prog_fill_jited_linfo(prog, ctx.offset + 1);
135 out_off:
136 kfree(ctx.offset);
137 kfree(jit_data);
138 diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
139 index e5c2d47608feb..6ecdc690f7336 100644
140 --- a/arch/mips/Kconfig
141 +++ b/arch/mips/Kconfig
142 @@ -862,6 +862,7 @@ config SNI_RM
143 select I8253
144 select I8259
145 select ISA
146 + select MIPS_L1_CACHE_SHIFT_6
147 select SWAP_IO_SPACE if CPU_BIG_ENDIAN
148 select SYS_HAS_CPU_R4X00
149 select SYS_HAS_CPU_R5000
150 diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c
151 index 1109924560d8c..b22a3565e1330 100644
152 --- a/arch/mips/kvm/mips.c
153 +++ b/arch/mips/kvm/mips.c
154 @@ -131,6 +131,8 @@ int kvm_arch_check_processor_compat(void)
155 int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
156 {
157 switch (type) {
158 + case KVM_VM_MIPS_AUTO:
159 + break;
160 #ifdef CONFIG_KVM_MIPS_VZ
161 case KVM_VM_MIPS_VZ:
162 #else
163 diff --git a/arch/mips/sni/a20r.c b/arch/mips/sni/a20r.c
164 index f9407e1704762..c6af7047eb0d2 100644
165 --- a/arch/mips/sni/a20r.c
166 +++ b/arch/mips/sni/a20r.c
167 @@ -143,7 +143,10 @@ static struct platform_device sc26xx_pdev = {
168 },
169 };
170
171 -static u32 a20r_ack_hwint(void)
172 +/*
173 + * Trigger chipset to update CPU's CAUSE IP field
174 + */
175 +static u32 a20r_update_cause_ip(void)
176 {
177 u32 status = read_c0_status();
178
179 @@ -205,12 +208,14 @@ static void a20r_hwint(void)
180 int irq;
181
182 clear_c0_status(IE_IRQ0);
183 - status = a20r_ack_hwint();
184 + status = a20r_update_cause_ip();
185 cause = read_c0_cause();
186
187 irq = ffs(((cause & status) >> 8) & 0xf8);
188 if (likely(irq > 0))
189 do_IRQ(SNI_A20R_IRQ_BASE + irq - 1);
190 +
191 + a20r_update_cause_ip();
192 set_c0_status(IE_IRQ0);
193 }
194
195 diff --git a/arch/openrisc/mm/cache.c b/arch/openrisc/mm/cache.c
196 index 08f56af387ac4..534a52ec5e667 100644
197 --- a/arch/openrisc/mm/cache.c
198 +++ b/arch/openrisc/mm/cache.c
199 @@ -16,7 +16,7 @@
200 #include <asm/cacheflush.h>
201 #include <asm/tlbflush.h>
202
203 -static void cache_loop(struct page *page, const unsigned int reg)
204 +static __always_inline void cache_loop(struct page *page, const unsigned int reg)
205 {
206 unsigned long paddr = page_to_pfn(page) << PAGE_SHIFT;
207 unsigned long line = paddr & ~(L1_CACHE_BYTES - 1);
208 diff --git a/arch/powerpc/include/asm/book3s/64/mmu.h b/arch/powerpc/include/asm/book3s/64/mmu.h
209 index bb3deb76c951b..2f4ddc802fe9d 100644
210 --- a/arch/powerpc/include/asm/book3s/64/mmu.h
211 +++ b/arch/powerpc/include/asm/book3s/64/mmu.h
212 @@ -225,14 +225,14 @@ static inline void early_init_mmu_secondary(void)
213
214 extern void hash__setup_initial_memory_limit(phys_addr_t first_memblock_base,
215 phys_addr_t first_memblock_size);
216 -extern void radix__setup_initial_memory_limit(phys_addr_t first_memblock_base,
217 - phys_addr_t first_memblock_size);
218 static inline void setup_initial_memory_limit(phys_addr_t first_memblock_base,
219 phys_addr_t first_memblock_size)
220 {
221 - if (early_radix_enabled())
222 - return radix__setup_initial_memory_limit(first_memblock_base,
223 - first_memblock_size);
224 + /*
225 + * Hash has more strict restrictions. At this point we don't
226 + * know which translations we will pick. Hence go with hash
227 + * restrictions.
228 + */
229 return hash__setup_initial_memory_limit(first_memblock_base,
230 first_memblock_size);
231 }
232 diff --git a/arch/powerpc/kernel/dma-iommu.c b/arch/powerpc/kernel/dma-iommu.c
233 index e486d1d78de28..f4cb2c546adbb 100644
234 --- a/arch/powerpc/kernel/dma-iommu.c
235 +++ b/arch/powerpc/kernel/dma-iommu.c
236 @@ -160,7 +160,8 @@ u64 dma_iommu_get_required_mask(struct device *dev)
237 return bypass_mask;
238 }
239
240 - mask = 1ULL < (fls_long(tbl->it_offset + tbl->it_size) - 1);
241 + mask = 1ULL << (fls_long(tbl->it_offset + tbl->it_size) +
242 + tbl->it_page_shift - 1);
243 mask += mask - 1;
244
245 return mask;
246 diff --git a/arch/powerpc/mm/book3s64/radix_pgtable.c b/arch/powerpc/mm/book3s64/radix_pgtable.c
247 index 6ee17d09649c3..770542ccdb468 100644
248 --- a/arch/powerpc/mm/book3s64/radix_pgtable.c
249 +++ b/arch/powerpc/mm/book3s64/radix_pgtable.c
250 @@ -643,21 +643,6 @@ void radix__mmu_cleanup_all(void)
251 }
252 }
253
254 -void radix__setup_initial_memory_limit(phys_addr_t first_memblock_base,
255 - phys_addr_t first_memblock_size)
256 -{
257 - /*
258 - * We don't currently support the first MEMBLOCK not mapping 0
259 - * physical on those processors
260 - */
261 - BUG_ON(first_memblock_base != 0);
262 -
263 - /*
264 - * Radix mode is not limited by RMA / VRMA addressing.
265 - */
266 - ppc64_rma_size = ULONG_MAX;
267 -}
268 -
269 #ifdef CONFIG_MEMORY_HOTPLUG
270 static void free_pte_table(pte_t *pte_start, pmd_t *pmd)
271 {
272 diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c
273 index 4e08246acd79a..210f1c28b8e41 100644
274 --- a/arch/powerpc/mm/init_64.c
275 +++ b/arch/powerpc/mm/init_64.c
276 @@ -415,9 +415,16 @@ void __init mmu_early_init_devtree(void)
277 if (!(mfmsr() & MSR_HV))
278 early_check_vec5();
279
280 - if (early_radix_enabled())
281 + if (early_radix_enabled()) {
282 radix__early_init_devtree();
283 - else
284 + /*
285 + * We have finalized the translation we are going to use by now.
286 + * Radix mode is not limited by RMA / VRMA addressing.
287 + * Hence don't limit memblock allocations.
288 + */
289 + ppc64_rma_size = ULONG_MAX;
290 + memblock_set_current_limit(MEMBLOCK_ALLOC_ANYWHERE);
291 + } else
292 hash__early_init_devtree();
293 }
294 #endif /* CONFIG_PPC_BOOK3S_64 */
295 diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
296 index b1eb6a0411183..d49e334071d45 100644
297 --- a/arch/riscv/mm/init.c
298 +++ b/arch/riscv/mm/init.c
299 @@ -167,12 +167,11 @@ void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot)
300
301 ptep = &fixmap_pte[pte_index(addr)];
302
303 - if (pgprot_val(prot)) {
304 + if (pgprot_val(prot))
305 set_pte(ptep, pfn_pte(phys >> PAGE_SHIFT, prot));
306 - } else {
307 + else
308 pte_clear(&init_mm, addr, ptep);
309 - local_flush_tlb_page(addr);
310 - }
311 + local_flush_tlb_page(addr);
312 }
313
314 static pte_t *__init get_pte_virt(phys_addr_t pa)
315 diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
316 index 98aac5b4bdb7e..292b5bc6e3a30 100644
317 --- a/arch/x86/boot/compressed/Makefile
318 +++ b/arch/x86/boot/compressed/Makefile
319 @@ -38,6 +38,8 @@ KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
320 KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
321 KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
322 KBUILD_CFLAGS += -Wno-pointer-sign
323 +# Disable relocation relaxation in case the link is not PIE.
324 +KBUILD_CFLAGS += $(call as-option,-Wa$(comma)-mrelax-relocations=no)
325
326 KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
327 GCOV_PROFILE := n
328 diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
329 index 88497bff1135f..ba32adaeefdd0 100644
330 --- a/block/bfq-iosched.c
331 +++ b/block/bfq-iosched.c
332 @@ -5890,18 +5890,6 @@ static void bfq_finish_requeue_request(struct request *rq)
333 struct bfq_queue *bfqq = RQ_BFQQ(rq);
334 struct bfq_data *bfqd;
335
336 - /*
337 - * Requeue and finish hooks are invoked in blk-mq without
338 - * checking whether the involved request is actually still
339 - * referenced in the scheduler. To handle this fact, the
340 - * following two checks make this function exit in case of
341 - * spurious invocations, for which there is nothing to do.
342 - *
343 - * First, check whether rq has nothing to do with an elevator.
344 - */
345 - if (unlikely(!(rq->rq_flags & RQF_ELVPRIV)))
346 - return;
347 -
348 /*
349 * rq either is not associated with any icq, or is an already
350 * requeued request that has not (yet) been re-inserted into
351 diff --git a/block/blk-mq-sched.h b/block/blk-mq-sched.h
352 index 126021fc3a11f..e81ca1bf6e10b 100644
353 --- a/block/blk-mq-sched.h
354 +++ b/block/blk-mq-sched.h
355 @@ -66,7 +66,7 @@ static inline void blk_mq_sched_requeue_request(struct request *rq)
356 struct request_queue *q = rq->q;
357 struct elevator_queue *e = q->elevator;
358
359 - if (e && e->type->ops.requeue_request)
360 + if ((rq->rq_flags & RQF_ELVPRIV) && e && e->type->ops.requeue_request)
361 e->type->ops.requeue_request(rq);
362 }
363
364 diff --git a/drivers/base/firmware_loader/firmware.h b/drivers/base/firmware_loader/firmware.h
365 index 7ecd590e67fe1..9bef6c35f344a 100644
366 --- a/drivers/base/firmware_loader/firmware.h
367 +++ b/drivers/base/firmware_loader/firmware.h
368 @@ -139,10 +139,12 @@ int assign_fw(struct firmware *fw, struct device *device,
369 void fw_free_paged_buf(struct fw_priv *fw_priv);
370 int fw_grow_paged_buf(struct fw_priv *fw_priv, int pages_needed);
371 int fw_map_paged_buf(struct fw_priv *fw_priv);
372 +bool fw_is_paged_buf(struct fw_priv *fw_priv);
373 #else
374 static inline void fw_free_paged_buf(struct fw_priv *fw_priv) {}
375 static inline int fw_grow_paged_buf(struct fw_priv *fw_priv, int pages_needed) { return -ENXIO; }
376 static inline int fw_map_paged_buf(struct fw_priv *fw_priv) { return -ENXIO; }
377 +static inline bool fw_is_paged_buf(struct fw_priv *fw_priv) { return false; }
378 #endif
379
380 #endif /* __FIRMWARE_LOADER_H */
381 diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c
382 index bf44c79beae92..95d21b4af9045 100644
383 --- a/drivers/base/firmware_loader/main.c
384 +++ b/drivers/base/firmware_loader/main.c
385 @@ -252,9 +252,11 @@ static void __free_fw_priv(struct kref *ref)
386 list_del(&fw_priv->list);
387 spin_unlock(&fwc->lock);
388
389 - fw_free_paged_buf(fw_priv); /* free leftover pages */
390 - if (!fw_priv->allocated_size)
391 + if (fw_is_paged_buf(fw_priv))
392 + fw_free_paged_buf(fw_priv);
393 + else if (!fw_priv->allocated_size)
394 vfree(fw_priv->data);
395 +
396 kfree_const(fw_priv->fw_name);
397 kfree(fw_priv);
398 }
399 @@ -268,6 +270,11 @@ static void free_fw_priv(struct fw_priv *fw_priv)
400 }
401
402 #ifdef CONFIG_FW_LOADER_PAGED_BUF
403 +bool fw_is_paged_buf(struct fw_priv *fw_priv)
404 +{
405 + return fw_priv->is_paged_buf;
406 +}
407 +
408 void fw_free_paged_buf(struct fw_priv *fw_priv)
409 {
410 int i;
411 @@ -275,6 +282,8 @@ void fw_free_paged_buf(struct fw_priv *fw_priv)
412 if (!fw_priv->pages)
413 return;
414
415 + vunmap(fw_priv->data);
416 +
417 for (i = 0; i < fw_priv->nr_pages; i++)
418 __free_page(fw_priv->pages[i]);
419 kvfree(fw_priv->pages);
420 @@ -328,10 +337,6 @@ int fw_map_paged_buf(struct fw_priv *fw_priv)
421 if (!fw_priv->data)
422 return -ENOMEM;
423
424 - /* page table is no longer needed after mapping, let's free */
425 - kvfree(fw_priv->pages);
426 - fw_priv->pages = NULL;
427 -
428 return 0;
429 }
430 #endif
431 diff --git a/drivers/clk/davinci/pll.c b/drivers/clk/davinci/pll.c
432 index 1ac11b6a47a37..2ec48d030fda7 100644
433 --- a/drivers/clk/davinci/pll.c
434 +++ b/drivers/clk/davinci/pll.c
435 @@ -491,7 +491,7 @@ struct clk *davinci_pll_clk_register(struct device *dev,
436 parent_name = postdiv_name;
437 }
438
439 - pllen = kzalloc(sizeof(*pllout), GFP_KERNEL);
440 + pllen = kzalloc(sizeof(*pllen), GFP_KERNEL);
441 if (!pllen) {
442 ret = -ENOMEM;
443 goto err_unregister_postdiv;
444 diff --git a/drivers/clk/rockchip/clk-rk3228.c b/drivers/clk/rockchip/clk-rk3228.c
445 index d7243c09cc843..47d6482dda9df 100644
446 --- a/drivers/clk/rockchip/clk-rk3228.c
447 +++ b/drivers/clk/rockchip/clk-rk3228.c
448 @@ -137,7 +137,7 @@ PNAME(mux_usb480m_p) = { "usb480m_phy", "xin24m" };
449 PNAME(mux_hdmiphy_p) = { "hdmiphy_phy", "xin24m" };
450 PNAME(mux_aclk_cpu_src_p) = { "cpll_aclk_cpu", "gpll_aclk_cpu", "hdmiphy_aclk_cpu" };
451
452 -PNAME(mux_pll_src_4plls_p) = { "cpll", "gpll", "hdmiphy" "usb480m" };
453 +PNAME(mux_pll_src_4plls_p) = { "cpll", "gpll", "hdmiphy", "usb480m" };
454 PNAME(mux_pll_src_3plls_p) = { "cpll", "gpll", "hdmiphy" };
455 PNAME(mux_pll_src_2plls_p) = { "cpll", "gpll" };
456 PNAME(mux_sclk_hdmi_cec_p) = { "cpll", "gpll", "xin24m" };
457 diff --git a/drivers/dax/super.c b/drivers/dax/super.c
458 index 26a654dbc69a2..b936852881871 100644
459 --- a/drivers/dax/super.c
460 +++ b/drivers/dax/super.c
461 @@ -318,11 +318,15 @@ EXPORT_SYMBOL_GPL(dax_direct_access);
462 bool dax_supported(struct dax_device *dax_dev, struct block_device *bdev,
463 int blocksize, sector_t start, sector_t len)
464 {
465 + if (!dax_dev)
466 + return false;
467 +
468 if (!dax_alive(dax_dev))
469 return false;
470
471 return dax_dev->ops->dax_supported(dax_dev, bdev, blocksize, start, len);
472 }
473 +EXPORT_SYMBOL_GPL(dax_supported);
474
475 size_t dax_copy_from_iter(struct dax_device *dax_dev, pgoff_t pgoff, void *addr,
476 size_t bytes, struct iov_iter *i)
477 diff --git a/drivers/gpu/drm/i915/i915_sw_fence.c b/drivers/gpu/drm/i915/i915_sw_fence.c
478 index 6a88db291252b..b3fd6ff665dae 100644
479 --- a/drivers/gpu/drm/i915/i915_sw_fence.c
480 +++ b/drivers/gpu/drm/i915/i915_sw_fence.c
481 @@ -158,9 +158,13 @@ static void __i915_sw_fence_wake_up_all(struct i915_sw_fence *fence,
482
483 do {
484 list_for_each_entry_safe(pos, next, &x->head, entry) {
485 - pos->func(pos,
486 - TASK_NORMAL, fence->error,
487 - &extra);
488 + int wake_flags;
489 +
490 + wake_flags = fence->error;
491 + if (pos->func == autoremove_wake_function)
492 + wake_flags = 0;
493 +
494 + pos->func(pos, TASK_NORMAL, wake_flags, &extra);
495 }
496
497 if (list_empty(&extra))
498 diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
499 index 352b81a7a6702..f98bb2e263723 100644
500 --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
501 +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
502 @@ -594,8 +594,13 @@ err_pm:
503 pm_runtime_disable(dev);
504 err_node:
505 of_node_put(private->mutex_node);
506 - for (i = 0; i < DDP_COMPONENT_ID_MAX; i++)
507 + for (i = 0; i < DDP_COMPONENT_ID_MAX; i++) {
508 of_node_put(private->comp_node[i]);
509 + if (private->ddp_comp[i]) {
510 + put_device(private->ddp_comp[i]->larb_dev);
511 + private->ddp_comp[i] = NULL;
512 + }
513 + }
514 return ret;
515 }
516
517 diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c
518 index ce91b61364eb6..6b22fd63c3f55 100644
519 --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
520 +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
521 @@ -1482,25 +1482,30 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
522 dev_err(dev,
523 "Failed to get system configuration registers: %d\n",
524 ret);
525 - return ret;
526 + goto put_device;
527 }
528 hdmi->sys_regmap = regmap;
529
530 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
531 hdmi->regs = devm_ioremap_resource(dev, mem);
532 - if (IS_ERR(hdmi->regs))
533 - return PTR_ERR(hdmi->regs);
534 + if (IS_ERR(hdmi->regs)) {
535 + ret = PTR_ERR(hdmi->regs);
536 + goto put_device;
537 + }
538
539 remote = of_graph_get_remote_node(np, 1, 0);
540 - if (!remote)
541 - return -EINVAL;
542 + if (!remote) {
543 + ret = -EINVAL;
544 + goto put_device;
545 + }
546
547 if (!of_device_is_compatible(remote, "hdmi-connector")) {
548 hdmi->next_bridge = of_drm_find_bridge(remote);
549 if (!hdmi->next_bridge) {
550 dev_err(dev, "Waiting for external bridge\n");
551 of_node_put(remote);
552 - return -EPROBE_DEFER;
553 + ret = -EPROBE_DEFER;
554 + goto put_device;
555 }
556 }
557
558 @@ -1509,7 +1514,8 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
559 dev_err(dev, "Failed to find ddc-i2c-bus node in %pOF\n",
560 remote);
561 of_node_put(remote);
562 - return -EINVAL;
563 + ret = -EINVAL;
564 + goto put_device;
565 }
566 of_node_put(remote);
567
568 @@ -1517,10 +1523,14 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
569 of_node_put(i2c_np);
570 if (!hdmi->ddc_adpt) {
571 dev_err(dev, "Failed to get ddc i2c adapter by node\n");
572 - return -EINVAL;
573 + ret = -EINVAL;
574 + goto put_device;
575 }
576
577 return 0;
578 +put_device:
579 + put_device(hdmi->cec_dev);
580 + return ret;
581 }
582
583 /*
584 diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
585 index 501c43c5851dc..452307c79e4b9 100644
586 --- a/drivers/hv/channel_mgmt.c
587 +++ b/drivers/hv/channel_mgmt.c
588 @@ -769,7 +769,7 @@ static void vmbus_wait_for_unload(void)
589 void *page_addr;
590 struct hv_message *msg;
591 struct vmbus_channel_message_header *hdr;
592 - u32 message_type;
593 + u32 message_type, i;
594
595 /*
596 * CHANNELMSG_UNLOAD_RESPONSE is always delivered to the CPU which was
597 @@ -779,8 +779,11 @@ static void vmbus_wait_for_unload(void)
598 * functional and vmbus_unload_response() will complete
599 * vmbus_connection.unload_event. If not, the last thing we can do is
600 * read message pages for all CPUs directly.
601 + *
602 + * Wait no more than 10 seconds so that the panic path can't get
603 + * hung forever in case the response message isn't seen.
604 */
605 - while (1) {
606 + for (i = 0; i < 1000; i++) {
607 if (completion_done(&vmbus_connection.unload_event))
608 break;
609
610 diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
611 index 24c38e44ed3bc..2d2568dac2a66 100644
612 --- a/drivers/hv/vmbus_drv.c
613 +++ b/drivers/hv/vmbus_drv.c
614 @@ -2231,7 +2231,10 @@ static int vmbus_bus_suspend(struct device *dev)
615 if (atomic_read(&vmbus_connection.nr_chan_close_on_suspend) > 0)
616 wait_for_completion(&vmbus_connection.ready_for_suspend_event);
617
618 - WARN_ON(atomic_read(&vmbus_connection.nr_chan_fixup_on_resume) != 0);
619 + if (atomic_read(&vmbus_connection.nr_chan_fixup_on_resume) != 0) {
620 + pr_err("Can not suspend due to a previous failed resuming\n");
621 + return -EBUSY;
622 + }
623
624 mutex_lock(&vmbus_connection.channel_mutex);
625
626 @@ -2305,7 +2308,9 @@ static int vmbus_bus_resume(struct device *dev)
627
628 vmbus_request_offers();
629
630 - wait_for_completion(&vmbus_connection.ready_for_resume_event);
631 + if (wait_for_completion_timeout(
632 + &vmbus_connection.ready_for_resume_event, 10 * HZ) == 0)
633 + pr_err("Some vmbus device is missing after suspending?\n");
634
635 /* Reset the event for the next suspend. */
636 reinit_completion(&vmbus_connection.ready_for_suspend_event);
637 diff --git a/drivers/i2c/algos/i2c-algo-pca.c b/drivers/i2c/algos/i2c-algo-pca.c
638 index 8ea850eed18f7..1d3691a049b16 100644
639 --- a/drivers/i2c/algos/i2c-algo-pca.c
640 +++ b/drivers/i2c/algos/i2c-algo-pca.c
641 @@ -41,8 +41,22 @@ static void pca_reset(struct i2c_algo_pca_data *adap)
642 pca_outw(adap, I2C_PCA_INDPTR, I2C_PCA_IPRESET);
643 pca_outw(adap, I2C_PCA_IND, 0xA5);
644 pca_outw(adap, I2C_PCA_IND, 0x5A);
645 +
646 + /*
647 + * After a reset we need to re-apply any configuration
648 + * (calculated in pca_init) to get the bus in a working state.
649 + */
650 + pca_outw(adap, I2C_PCA_INDPTR, I2C_PCA_IMODE);
651 + pca_outw(adap, I2C_PCA_IND, adap->bus_settings.mode);
652 + pca_outw(adap, I2C_PCA_INDPTR, I2C_PCA_ISCLL);
653 + pca_outw(adap, I2C_PCA_IND, adap->bus_settings.tlow);
654 + pca_outw(adap, I2C_PCA_INDPTR, I2C_PCA_ISCLH);
655 + pca_outw(adap, I2C_PCA_IND, adap->bus_settings.thi);
656 +
657 + pca_set_con(adap, I2C_PCA_CON_ENSIO);
658 } else {
659 adap->reset_chip(adap->data);
660 + pca_set_con(adap, I2C_PCA_CON_ENSIO | adap->bus_settings.clock_freq);
661 }
662 }
663
664 @@ -423,13 +437,14 @@ static int pca_init(struct i2c_adapter *adap)
665 " Use the nominal frequency.\n", adap->name);
666 }
667
668 - pca_reset(pca_data);
669 -
670 clock = pca_clock(pca_data);
671 printk(KERN_INFO "%s: Clock frequency is %dkHz\n",
672 adap->name, freqs[clock]);
673
674 - pca_set_con(pca_data, I2C_PCA_CON_ENSIO | clock);
675 + /* Store settings as these will be needed when the PCA chip is reset */
676 + pca_data->bus_settings.clock_freq = clock;
677 +
678 + pca_reset(pca_data);
679 } else {
680 int clock;
681 int mode;
682 @@ -496,19 +511,15 @@ static int pca_init(struct i2c_adapter *adap)
683 thi = tlow * min_thi / min_tlow;
684 }
685
686 + /* Store settings as these will be needed when the PCA chip is reset */
687 + pca_data->bus_settings.mode = mode;
688 + pca_data->bus_settings.tlow = tlow;
689 + pca_data->bus_settings.thi = thi;
690 +
691 pca_reset(pca_data);
692
693 printk(KERN_INFO
694 "%s: Clock frequency is %dHz\n", adap->name, clock * 100);
695 -
696 - pca_outw(pca_data, I2C_PCA_INDPTR, I2C_PCA_IMODE);
697 - pca_outw(pca_data, I2C_PCA_IND, mode);
698 - pca_outw(pca_data, I2C_PCA_INDPTR, I2C_PCA_ISCLL);
699 - pca_outw(pca_data, I2C_PCA_IND, tlow);
700 - pca_outw(pca_data, I2C_PCA_INDPTR, I2C_PCA_ISCLH);
701 - pca_outw(pca_data, I2C_PCA_IND, thi);
702 -
703 - pca_set_con(pca_data, I2C_PCA_CON_ENSIO);
704 }
705 udelay(500); /* 500 us for oscillator to stabilise */
706
707 diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
708 index 3ff6fbd79b127..9a80c3c7e8af2 100644
709 --- a/drivers/i2c/busses/i2c-i801.c
710 +++ b/drivers/i2c/busses/i2c-i801.c
711 @@ -1688,6 +1688,16 @@ static inline int i801_acpi_probe(struct i801_priv *priv) { return 0; }
712 static inline void i801_acpi_remove(struct i801_priv *priv) { }
713 #endif
714
715 +static unsigned char i801_setup_hstcfg(struct i801_priv *priv)
716 +{
717 + unsigned char hstcfg = priv->original_hstcfg;
718 +
719 + hstcfg &= ~SMBHSTCFG_I2C_EN; /* SMBus timing */
720 + hstcfg |= SMBHSTCFG_HST_EN;
721 + pci_write_config_byte(priv->pci_dev, SMBHSTCFG, hstcfg);
722 + return hstcfg;
723 +}
724 +
725 static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
726 {
727 unsigned char temp;
728 @@ -1804,14 +1814,10 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
729 return err;
730 }
731
732 - pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &temp);
733 - priv->original_hstcfg = temp;
734 - temp &= ~SMBHSTCFG_I2C_EN; /* SMBus timing */
735 - if (!(temp & SMBHSTCFG_HST_EN)) {
736 + pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &priv->original_hstcfg);
737 + temp = i801_setup_hstcfg(priv);
738 + if (!(priv->original_hstcfg & SMBHSTCFG_HST_EN))
739 dev_info(&dev->dev, "Enabling SMBus device\n");
740 - temp |= SMBHSTCFG_HST_EN;
741 - }
742 - pci_write_config_byte(priv->pci_dev, SMBHSTCFG, temp);
743
744 if (temp & SMBHSTCFG_SMB_SMI_EN) {
745 dev_dbg(&dev->dev, "SMBus using interrupt SMI#\n");
746 @@ -1937,6 +1943,7 @@ static int i801_resume(struct device *dev)
747 {
748 struct i801_priv *priv = dev_get_drvdata(dev);
749
750 + i801_setup_hstcfg(priv);
751 i801_enable_host_notify(&priv->adapter);
752
753 return 0;
754 diff --git a/drivers/i2c/busses/i2c-mxs.c b/drivers/i2c/busses/i2c-mxs.c
755 index 89224913f578b..081a1169ecea3 100644
756 --- a/drivers/i2c/busses/i2c-mxs.c
757 +++ b/drivers/i2c/busses/i2c-mxs.c
758 @@ -25,6 +25,7 @@
759 #include <linux/of_device.h>
760 #include <linux/dma-mapping.h>
761 #include <linux/dmaengine.h>
762 +#include <linux/dma/mxs-dma.h>
763
764 #define DRIVER_NAME "mxs-i2c"
765
766 @@ -200,7 +201,8 @@ static int mxs_i2c_dma_setup_xfer(struct i2c_adapter *adap,
767 dma_map_sg(i2c->dev, &i2c->sg_io[0], 1, DMA_TO_DEVICE);
768 desc = dmaengine_prep_slave_sg(i2c->dmach, &i2c->sg_io[0], 1,
769 DMA_MEM_TO_DEV,
770 - DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
771 + DMA_PREP_INTERRUPT |
772 + MXS_DMA_CTRL_WAIT4END);
773 if (!desc) {
774 dev_err(i2c->dev,
775 "Failed to get DMA data write descriptor.\n");
776 @@ -228,7 +230,8 @@ static int mxs_i2c_dma_setup_xfer(struct i2c_adapter *adap,
777 dma_map_sg(i2c->dev, &i2c->sg_io[1], 1, DMA_FROM_DEVICE);
778 desc = dmaengine_prep_slave_sg(i2c->dmach, &i2c->sg_io[1], 1,
779 DMA_DEV_TO_MEM,
780 - DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
781 + DMA_PREP_INTERRUPT |
782 + MXS_DMA_CTRL_WAIT4END);
783 if (!desc) {
784 dev_err(i2c->dev,
785 "Failed to get DMA data write descriptor.\n");
786 @@ -260,7 +263,8 @@ static int mxs_i2c_dma_setup_xfer(struct i2c_adapter *adap,
787 dma_map_sg(i2c->dev, i2c->sg_io, 2, DMA_TO_DEVICE);
788 desc = dmaengine_prep_slave_sg(i2c->dmach, i2c->sg_io, 2,
789 DMA_MEM_TO_DEV,
790 - DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
791 + DMA_PREP_INTERRUPT |
792 + MXS_DMA_CTRL_WAIT4END);
793 if (!desc) {
794 dev_err(i2c->dev,
795 "Failed to get DMA data write descriptor.\n");
796 diff --git a/drivers/infiniband/hw/bnxt_re/qplib_sp.c b/drivers/infiniband/hw/bnxt_re/qplib_sp.c
797 index 40296b97d21e6..079aaaaffec7a 100644
798 --- a/drivers/infiniband/hw/bnxt_re/qplib_sp.c
799 +++ b/drivers/infiniband/hw/bnxt_re/qplib_sp.c
800 @@ -152,7 +152,7 @@ int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
801 attr->max_inline_data = le32_to_cpu(sb->max_inline_data);
802 attr->l2_db_size = (sb->l2_db_space_size + 1) *
803 (0x01 << RCFW_DBR_BASE_PAGE_SHIFT);
804 - attr->max_sgid = le32_to_cpu(sb->max_gid);
805 + attr->max_sgid = BNXT_QPLIB_NUM_GIDS_SUPPORTED;
806
807 bnxt_qplib_query_version(rcfw, attr->fw_ver);
808
809 diff --git a/drivers/infiniband/hw/bnxt_re/qplib_sp.h b/drivers/infiniband/hw/bnxt_re/qplib_sp.h
810 index 13d9432d5ce22..194f5ef45ca63 100644
811 --- a/drivers/infiniband/hw/bnxt_re/qplib_sp.h
812 +++ b/drivers/infiniband/hw/bnxt_re/qplib_sp.h
813 @@ -47,6 +47,7 @@
814 struct bnxt_qplib_dev_attr {
815 #define FW_VER_ARR_LEN 4
816 u8 fw_ver[FW_VER_ARR_LEN];
817 +#define BNXT_QPLIB_NUM_GIDS_SUPPORTED 256
818 u16 max_sgid;
819 u16 max_mrw;
820 u32 max_qp;
821 diff --git a/drivers/input/mouse/trackpoint.c b/drivers/input/mouse/trackpoint.c
822 index 3eefee2ee2a12..854d5e7587241 100644
823 --- a/drivers/input/mouse/trackpoint.c
824 +++ b/drivers/input/mouse/trackpoint.c
825 @@ -17,10 +17,12 @@
826 #include "trackpoint.h"
827
828 static const char * const trackpoint_variants[] = {
829 - [TP_VARIANT_IBM] = "IBM",
830 - [TP_VARIANT_ALPS] = "ALPS",
831 - [TP_VARIANT_ELAN] = "Elan",
832 - [TP_VARIANT_NXP] = "NXP",
833 + [TP_VARIANT_IBM] = "IBM",
834 + [TP_VARIANT_ALPS] = "ALPS",
835 + [TP_VARIANT_ELAN] = "Elan",
836 + [TP_VARIANT_NXP] = "NXP",
837 + [TP_VARIANT_JYT_SYNAPTICS] = "JYT_Synaptics",
838 + [TP_VARIANT_SYNAPTICS] = "Synaptics",
839 };
840
841 /*
842 diff --git a/drivers/input/mouse/trackpoint.h b/drivers/input/mouse/trackpoint.h
843 index 5cb93ed260856..eb5412904fe07 100644
844 --- a/drivers/input/mouse/trackpoint.h
845 +++ b/drivers/input/mouse/trackpoint.h
846 @@ -24,10 +24,12 @@
847 * 0x01 was the original IBM trackpoint, others implement very limited
848 * subset of trackpoint features.
849 */
850 -#define TP_VARIANT_IBM 0x01
851 -#define TP_VARIANT_ALPS 0x02
852 -#define TP_VARIANT_ELAN 0x03
853 -#define TP_VARIANT_NXP 0x04
854 +#define TP_VARIANT_IBM 0x01
855 +#define TP_VARIANT_ALPS 0x02
856 +#define TP_VARIANT_ELAN 0x03
857 +#define TP_VARIANT_NXP 0x04
858 +#define TP_VARIANT_JYT_SYNAPTICS 0x05
859 +#define TP_VARIANT_SYNAPTICS 0x06
860
861 /*
862 * Commands
863 diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
864 index 858a263021988..42771b9b10a00 100644
865 --- a/drivers/input/serio/i8042-x86ia64io.h
866 +++ b/drivers/input/serio/i8042-x86ia64io.h
867 @@ -548,6 +548,14 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
868 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5738"),
869 },
870 },
871 + {
872 + /* Entroware Proteus */
873 + .matches = {
874 + DMI_MATCH(DMI_SYS_VENDOR, "Entroware"),
875 + DMI_MATCH(DMI_PRODUCT_NAME, "Proteus"),
876 + DMI_MATCH(DMI_PRODUCT_VERSION, "EL07R4"),
877 + },
878 + },
879 { }
880 };
881
882 @@ -676,6 +684,14 @@ static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = {
883 DMI_MATCH(DMI_PRODUCT_NAME, "33474HU"),
884 },
885 },
886 + {
887 + /* Entroware Proteus */
888 + .matches = {
889 + DMI_MATCH(DMI_SYS_VENDOR, "Entroware"),
890 + DMI_MATCH(DMI_PRODUCT_NAME, "Proteus"),
891 + DMI_MATCH(DMI_PRODUCT_VERSION, "EL07R4"),
892 + },
893 + },
894 { }
895 };
896
897 diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
898 index cdafc652d9d1a..fa91d856a43ee 100644
899 --- a/drivers/iommu/amd_iommu.c
900 +++ b/drivers/iommu/amd_iommu.c
901 @@ -4431,12 +4431,14 @@ int amd_iommu_deactivate_guest_mode(void *data)
902 struct amd_ir_data *ir_data = (struct amd_ir_data *)data;
903 struct irte_ga *entry = (struct irte_ga *) ir_data->entry;
904 struct irq_cfg *cfg = ir_data->cfg;
905 - u64 valid = entry->lo.fields_remap.valid;
906 + u64 valid;
907
908 if (!AMD_IOMMU_GUEST_IR_VAPIC(amd_iommu_guest_ir) ||
909 !entry || !entry->lo.fields_vapic.guest_mode)
910 return 0;
911
912 + valid = entry->lo.fields_remap.valid;
913 +
914 entry->lo.val = 0;
915 entry->hi.val = 0;
916
917 diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
918 index 52e049554f5cd..edc3660759131 100644
919 --- a/drivers/md/dm-table.c
920 +++ b/drivers/md/dm-table.c
921 @@ -882,10 +882,14 @@ EXPORT_SYMBOL_GPL(dm_table_set_type);
922 int device_supports_dax(struct dm_target *ti, struct dm_dev *dev,
923 sector_t start, sector_t len, void *data)
924 {
925 - int blocksize = *(int *) data;
926 + int blocksize = *(int *) data, id;
927 + bool rc;
928
929 - return generic_fsdax_supported(dev->dax_dev, dev->bdev, blocksize,
930 - start, len);
931 + id = dax_read_lock();
932 + rc = dax_supported(dev->dax_dev, dev->bdev, blocksize, start, len);
933 + dax_read_unlock(id);
934 +
935 + return rc;
936 }
937
938 /* Check devices support synchronous DAX */
939 diff --git a/drivers/md/dm.c b/drivers/md/dm.c
940 index 67da442cbab12..63d59e2ed1582 100644
941 --- a/drivers/md/dm.c
942 +++ b/drivers/md/dm.c
943 @@ -1112,15 +1112,16 @@ static bool dm_dax_supported(struct dax_device *dax_dev, struct block_device *bd
944 {
945 struct mapped_device *md = dax_get_private(dax_dev);
946 struct dm_table *map;
947 + bool ret = false;
948 int srcu_idx;
949 - bool ret;
950
951 map = dm_get_live_table(md, &srcu_idx);
952 if (!map)
953 - return false;
954 + goto out;
955
956 ret = dm_table_supports_dax(map, device_supports_dax, &blocksize);
957
958 +out:
959 dm_put_live_table(md, srcu_idx);
960
961 return ret;
962 diff --git a/drivers/net/ethernet/intel/e1000e/hw.h b/drivers/net/ethernet/intel/e1000e/hw.h
963 index eff75bd8a8f0b..11fdc27faa82b 100644
964 --- a/drivers/net/ethernet/intel/e1000e/hw.h
965 +++ b/drivers/net/ethernet/intel/e1000e/hw.h
966 @@ -86,6 +86,12 @@ struct e1000_hw;
967 #define E1000_DEV_ID_PCH_ICP_I219_V8 0x15E0
968 #define E1000_DEV_ID_PCH_ICP_I219_LM9 0x15E1
969 #define E1000_DEV_ID_PCH_ICP_I219_V9 0x15E2
970 +#define E1000_DEV_ID_PCH_CMP_I219_LM10 0x0D4E
971 +#define E1000_DEV_ID_PCH_CMP_I219_V10 0x0D4F
972 +#define E1000_DEV_ID_PCH_CMP_I219_LM11 0x0D4C
973 +#define E1000_DEV_ID_PCH_CMP_I219_V11 0x0D4D
974 +#define E1000_DEV_ID_PCH_CMP_I219_LM12 0x0D53
975 +#define E1000_DEV_ID_PCH_CMP_I219_V12 0x0D55
976
977 #define E1000_REVISION_4 4
978
979 diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
980 index 1ec33c6144742..4cb05a31e66df 100644
981 --- a/drivers/net/ethernet/intel/e1000e/netdev.c
982 +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
983 @@ -7568,6 +7568,12 @@ static const struct pci_device_id e1000_pci_tbl[] = {
984 { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_ICP_I219_V8), board_pch_cnp },
985 { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_ICP_I219_LM9), board_pch_cnp },
986 { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_ICP_I219_V9), board_pch_cnp },
987 + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_CMP_I219_LM10), board_pch_cnp },
988 + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_CMP_I219_V10), board_pch_cnp },
989 + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_CMP_I219_LM11), board_pch_cnp },
990 + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_CMP_I219_V11), board_pch_cnp },
991 + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_CMP_I219_LM12), board_pch_spt },
992 + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_CMP_I219_V12), board_pch_spt },
993
994 { 0, 0, 0, 0, 0, 0, 0 } /* terminate list */
995 };
996 diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
997 index 42eb7a7ecd96b..362b7ca6f3b2a 100644
998 --- a/drivers/net/hyperv/netvsc_drv.c
999 +++ b/drivers/net/hyperv/netvsc_drv.c
1000 @@ -366,7 +366,7 @@ static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb,
1001 }
1002 rcu_read_unlock();
1003
1004 - while (unlikely(txq >= ndev->real_num_tx_queues))
1005 + while (txq >= ndev->real_num_tx_queues)
1006 txq -= ndev->real_num_tx_queues;
1007
1008 return txq;
1009 diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
1010 index dce4d6782ceb1..dae050d1f814d 100644
1011 --- a/drivers/nvme/host/fc.c
1012 +++ b/drivers/nvme/host/fc.c
1013 @@ -1820,6 +1820,7 @@ nvme_fc_term_aen_ops(struct nvme_fc_ctrl *ctrl)
1014 struct nvme_fc_fcp_op *aen_op;
1015 int i;
1016
1017 + cancel_work_sync(&ctrl->ctrl.async_event_work);
1018 aen_op = ctrl->aen_ops;
1019 for (i = 0; i < NVME_NR_AEN_COMMANDS; i++, aen_op++) {
1020 if (!aen_op->fcp_req.private)
1021 diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
1022 index f0847f2bb117b..f9444272f861e 100644
1023 --- a/drivers/nvme/host/rdma.c
1024 +++ b/drivers/nvme/host/rdma.c
1025 @@ -769,6 +769,7 @@ static void nvme_rdma_destroy_admin_queue(struct nvme_rdma_ctrl *ctrl,
1026 blk_mq_free_tag_set(ctrl->ctrl.admin_tagset);
1027 }
1028 if (ctrl->async_event_sqe.data) {
1029 + cancel_work_sync(&ctrl->ctrl.async_event_work);
1030 nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe,
1031 sizeof(struct nvme_command), DMA_TO_DEVICE);
1032 ctrl->async_event_sqe.data = NULL;
1033 diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c
1034 index 9b81763b44d99..c782005ee99f9 100644
1035 --- a/drivers/nvme/host/tcp.c
1036 +++ b/drivers/nvme/host/tcp.c
1037 @@ -1507,6 +1507,7 @@ static struct blk_mq_tag_set *nvme_tcp_alloc_tagset(struct nvme_ctrl *nctrl,
1038 static void nvme_tcp_free_admin_queue(struct nvme_ctrl *ctrl)
1039 {
1040 if (to_tcp_ctrl(ctrl)->async_req.pdu) {
1041 + cancel_work_sync(&ctrl->async_event_work);
1042 nvme_tcp_free_async_req(to_tcp_ctrl(ctrl));
1043 to_tcp_ctrl(ctrl)->async_req.pdu = NULL;
1044 }
1045 diff --git a/drivers/rapidio/Kconfig b/drivers/rapidio/Kconfig
1046 index 677d1aff61b7f..788e7830771be 100644
1047 --- a/drivers/rapidio/Kconfig
1048 +++ b/drivers/rapidio/Kconfig
1049 @@ -37,7 +37,7 @@ config RAPIDIO_ENABLE_RX_TX_PORTS
1050 config RAPIDIO_DMA_ENGINE
1051 bool "DMA Engine support for RapidIO"
1052 depends on RAPIDIO
1053 - select DMADEVICES
1054 + depends on DMADEVICES
1055 select DMA_ENGINE
1056 help
1057 Say Y here if you want to use DMA Engine frameork for RapidIO data
1058 diff --git a/drivers/regulator/pwm-regulator.c b/drivers/regulator/pwm-regulator.c
1059 index e74e11101fc15..0a9d61a91f436 100644
1060 --- a/drivers/regulator/pwm-regulator.c
1061 +++ b/drivers/regulator/pwm-regulator.c
1062 @@ -279,7 +279,7 @@ static int pwm_regulator_init_table(struct platform_device *pdev,
1063 return ret;
1064 }
1065
1066 - drvdata->state = -EINVAL;
1067 + drvdata->state = -ENOTRECOVERABLE;
1068 drvdata->duty_cycle_table = duty_cycle_table;
1069 drvdata->desc.ops = &pwm_regulator_voltage_table_ops;
1070 drvdata->desc.n_voltages = length / sizeof(*duty_cycle_table);
1071 diff --git a/drivers/s390/crypto/zcrypt_ccamisc.c b/drivers/s390/crypto/zcrypt_ccamisc.c
1072 index 110fe9d0cb910..03999b06affd4 100644
1073 --- a/drivers/s390/crypto/zcrypt_ccamisc.c
1074 +++ b/drivers/s390/crypto/zcrypt_ccamisc.c
1075 @@ -1684,9 +1684,9 @@ int cca_findcard2(u32 **apqns, u32 *nr_apqns, u16 cardnr, u16 domain,
1076 *nr_apqns = 0;
1077
1078 /* fetch status of all crypto cards */
1079 - device_status = kmalloc_array(MAX_ZDEV_ENTRIES_EXT,
1080 - sizeof(struct zcrypt_device_status_ext),
1081 - GFP_KERNEL);
1082 + device_status = kvmalloc_array(MAX_ZDEV_ENTRIES_EXT,
1083 + sizeof(struct zcrypt_device_status_ext),
1084 + GFP_KERNEL);
1085 if (!device_status)
1086 return -ENOMEM;
1087 zcrypt_device_status_mask_ext(device_status);
1088 @@ -1754,7 +1754,7 @@ int cca_findcard2(u32 **apqns, u32 *nr_apqns, u16 cardnr, u16 domain,
1089 verify = 0;
1090 }
1091
1092 - kfree(device_status);
1093 + kvfree(device_status);
1094 return rc;
1095 }
1096 EXPORT_SYMBOL(cca_findcard2);
1097 diff --git a/drivers/scsi/libfc/fc_disc.c b/drivers/scsi/libfc/fc_disc.c
1098 index e00dc4693fcbd..589ddf003886e 100644
1099 --- a/drivers/scsi/libfc/fc_disc.c
1100 +++ b/drivers/scsi/libfc/fc_disc.c
1101 @@ -634,8 +634,6 @@ free_fp:
1102 fc_frame_free(fp);
1103 out:
1104 kref_put(&rdata->kref, fc_rport_destroy);
1105 - if (!IS_ERR(fp))
1106 - fc_frame_free(fp);
1107 }
1108
1109 /**
1110 diff --git a/drivers/scsi/libsas/sas_discover.c b/drivers/scsi/libsas/sas_discover.c
1111 index d7302c2052f91..10975f3f7ff65 100644
1112 --- a/drivers/scsi/libsas/sas_discover.c
1113 +++ b/drivers/scsi/libsas/sas_discover.c
1114 @@ -182,10 +182,11 @@ int sas_notify_lldd_dev_found(struct domain_device *dev)
1115 pr_warn("driver on host %s cannot handle device %llx, error:%d\n",
1116 dev_name(sas_ha->dev),
1117 SAS_ADDR(dev->sas_addr), res);
1118 + return res;
1119 }
1120 set_bit(SAS_DEV_FOUND, &dev->state);
1121 kref_get(&dev->kref);
1122 - return res;
1123 + return 0;
1124 }
1125
1126
1127 diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
1128 index 94d8f28341009..4e994a693e3f5 100644
1129 --- a/drivers/scsi/lpfc/lpfc_els.c
1130 +++ b/drivers/scsi/lpfc/lpfc_els.c
1131 @@ -4442,7 +4442,9 @@ lpfc_cmpl_els_rsp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
1132 out:
1133 if (ndlp && NLP_CHK_NODE_ACT(ndlp) && shost) {
1134 spin_lock_irq(shost->host_lock);
1135 - ndlp->nlp_flag &= ~(NLP_ACC_REGLOGIN | NLP_RM_DFLT_RPI);
1136 + if (mbox)
1137 + ndlp->nlp_flag &= ~NLP_ACC_REGLOGIN;
1138 + ndlp->nlp_flag &= ~NLP_RM_DFLT_RPI;
1139 spin_unlock_irq(shost->host_lock);
1140
1141 /* If the node is not being used by another discovery thread,
1142 diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c
1143 index 7e48154e11c36..027bf5b2981b9 100644
1144 --- a/drivers/scsi/pm8001/pm8001_sas.c
1145 +++ b/drivers/scsi/pm8001/pm8001_sas.c
1146 @@ -816,7 +816,7 @@ pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha,
1147
1148 res = pm8001_tag_alloc(pm8001_ha, &ccb_tag);
1149 if (res)
1150 - return res;
1151 + goto ex_err;
1152 ccb = &pm8001_ha->ccb_info[ccb_tag];
1153 ccb->device = pm8001_dev;
1154 ccb->ccb_tag = ccb_tag;
1155 diff --git a/drivers/spi/spi-loopback-test.c b/drivers/spi/spi-loopback-test.c
1156 index 6f18d49527673..51633b2b64371 100644
1157 --- a/drivers/spi/spi-loopback-test.c
1158 +++ b/drivers/spi/spi-loopback-test.c
1159 @@ -90,7 +90,7 @@ static struct spi_test spi_tests[] = {
1160 {
1161 .description = "tx/rx-transfer - crossing PAGE_SIZE",
1162 .fill_option = FILL_COUNT_8,
1163 - .iterate_len = { ITERATE_MAX_LEN },
1164 + .iterate_len = { ITERATE_LEN },
1165 .iterate_tx_align = ITERATE_ALIGN,
1166 .iterate_rx_align = ITERATE_ALIGN,
1167 .transfer_count = 1,
1168 diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
1169 index 6a81b2a33cb4b..982753ac1bf6c 100644
1170 --- a/drivers/spi/spi.c
1171 +++ b/drivers/spi/spi.c
1172 @@ -1241,8 +1241,6 @@ out:
1173 if (msg->status && ctlr->handle_err)
1174 ctlr->handle_err(ctlr, msg);
1175
1176 - spi_res_release(ctlr, msg);
1177 -
1178 spi_finalize_current_message(ctlr);
1179
1180 return ret;
1181 @@ -1525,6 +1523,13 @@ void spi_finalize_current_message(struct spi_controller *ctlr)
1182
1183 spi_unmap_msg(ctlr, mesg);
1184
1185 + /* In the prepare_messages callback the spi bus has the opportunity to
1186 + * split a transfer to smaller chunks.
1187 + * Release splited transfers here since spi_map_msg is done on the
1188 + * splited transfers.
1189 + */
1190 + spi_res_release(ctlr, mesg);
1191 +
1192 if (ctlr->cur_msg_prepared && ctlr->unprepare_message) {
1193 ret = ctlr->unprepare_message(ctlr, mesg);
1194 if (ret) {
1195 diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
1196 index 7cad66eb39fff..8814ff38aa67b 100644
1197 --- a/drivers/tty/serial/8250/8250_pci.c
1198 +++ b/drivers/tty/serial/8250/8250_pci.c
1199 @@ -5568,6 +5568,17 @@ static const struct pci_device_id serial_pci_tbl[] = {
1200 PCI_ANY_ID, PCI_ANY_ID,
1201 0, 0, pbn_wch384_4 },
1202
1203 + /*
1204 + * Realtek RealManage
1205 + */
1206 + { PCI_VENDOR_ID_REALTEK, 0x816a,
1207 + PCI_ANY_ID, PCI_ANY_ID,
1208 + 0, 0, pbn_b0_1_115200 },
1209 +
1210 + { PCI_VENDOR_ID_REALTEK, 0x816b,
1211 + PCI_ANY_ID, PCI_ANY_ID,
1212 + 0, 0, pbn_b0_1_115200 },
1213 +
1214 /* Fintek PCI serial cards */
1215 { PCI_DEVICE(0x1c29, 0x1104), .driver_data = pbn_fintek_4 },
1216 { PCI_DEVICE(0x1c29, 0x1108), .driver_data = pbn_fintek_8 },
1217 diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c
1218 index 084c48c5848fc..67cbd42421bee 100644
1219 --- a/drivers/usb/class/usblp.c
1220 +++ b/drivers/usb/class/usblp.c
1221 @@ -827,6 +827,11 @@ static ssize_t usblp_read(struct file *file, char __user *buffer, size_t len, lo
1222 if (rv < 0)
1223 return rv;
1224
1225 + if (!usblp->present) {
1226 + count = -ENODEV;
1227 + goto done;
1228 + }
1229 +
1230 if ((avail = usblp->rstatus) < 0) {
1231 printk(KERN_ERR "usblp%d: error %d reading from printer\n",
1232 usblp->minor, (int)avail);
1233 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
1234 index 2f068e525a374..4ee8105310989 100644
1235 --- a/drivers/usb/core/quirks.c
1236 +++ b/drivers/usb/core/quirks.c
1237 @@ -397,6 +397,10 @@ static const struct usb_device_id usb_quirk_list[] = {
1238 /* Generic RTL8153 based ethernet adapters */
1239 { USB_DEVICE(0x0bda, 0x8153), .driver_info = USB_QUIRK_NO_LPM },
1240
1241 + /* SONiX USB DEVICE Touchpad */
1242 + { USB_DEVICE(0x0c45, 0x7056), .driver_info =
1243 + USB_QUIRK_IGNORE_REMOTE_WAKEUP },
1244 +
1245 /* Action Semiconductor flash disk */
1246 { USB_DEVICE(0x10d6, 0x2200), .driver_info =
1247 USB_QUIRK_STRING_FETCH_255 },
1248 diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
1249 index cf2b7ae93b7e9..0e5c56e065591 100644
1250 --- a/drivers/usb/host/ehci-hcd.c
1251 +++ b/drivers/usb/host/ehci-hcd.c
1252 @@ -22,6 +22,7 @@
1253 #include <linux/interrupt.h>
1254 #include <linux/usb.h>
1255 #include <linux/usb/hcd.h>
1256 +#include <linux/usb/otg.h>
1257 #include <linux/moduleparam.h>
1258 #include <linux/dma-mapping.h>
1259 #include <linux/debugfs.h>
1260 diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
1261 index ce0eaf7d7c12a..087402aec5cbe 100644
1262 --- a/drivers/usb/host/ehci-hub.c
1263 +++ b/drivers/usb/host/ehci-hub.c
1264 @@ -14,7 +14,6 @@
1265 */
1266
1267 /*-------------------------------------------------------------------------*/
1268 -#include <linux/usb/otg.h>
1269
1270 #define PORT_WAKE_BITS (PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E)
1271
1272 diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
1273 index 5fcad96e06564..1ec1baa7604ed 100644
1274 --- a/drivers/usb/storage/uas.c
1275 +++ b/drivers/usb/storage/uas.c
1276 @@ -662,8 +662,7 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,
1277 if (devinfo->resetting) {
1278 cmnd->result = DID_ERROR << 16;
1279 cmnd->scsi_done(cmnd);
1280 - spin_unlock_irqrestore(&devinfo->lock, flags);
1281 - return 0;
1282 + goto zombie;
1283 }
1284
1285 /* Find a free uas-tag */
1286 @@ -699,6 +698,16 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,
1287 cmdinfo->state &= ~(SUBMIT_DATA_IN_URB | SUBMIT_DATA_OUT_URB);
1288
1289 err = uas_submit_urbs(cmnd, devinfo);
1290 + /*
1291 + * in case of fatal errors the SCSI layer is peculiar
1292 + * a command that has finished is a success for the purpose
1293 + * of queueing, no matter how fatal the error
1294 + */
1295 + if (err == -ENODEV) {
1296 + cmnd->result = DID_ERROR << 16;
1297 + cmnd->scsi_done(cmnd);
1298 + goto zombie;
1299 + }
1300 if (err) {
1301 /* If we did nothing, give up now */
1302 if (cmdinfo->state & SUBMIT_STATUS_URB) {
1303 @@ -709,6 +718,7 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,
1304 }
1305
1306 devinfo->cmnd[idx] = cmnd;
1307 +zombie:
1308 spin_unlock_irqrestore(&devinfo->lock, flags);
1309 return 0;
1310 }
1311 diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
1312 index ba288b964dc84..4d56408ac623d 100644
1313 --- a/drivers/usb/typec/ucsi/ucsi.c
1314 +++ b/drivers/usb/typec/ucsi/ucsi.c
1315 @@ -246,14 +246,18 @@ void ucsi_altmode_update_active(struct ucsi_connector *con)
1316 con->partner_altmode[i] == altmode);
1317 }
1318
1319 -static u8 ucsi_altmode_next_mode(struct typec_altmode **alt, u16 svid)
1320 +static int ucsi_altmode_next_mode(struct typec_altmode **alt, u16 svid)
1321 {
1322 u8 mode = 1;
1323 int i;
1324
1325 - for (i = 0; alt[i]; i++)
1326 + for (i = 0; alt[i]; i++) {
1327 + if (i > MODE_DISCOVERY_MAX)
1328 + return -ERANGE;
1329 +
1330 if (alt[i]->svid == svid)
1331 mode++;
1332 + }
1333
1334 return mode;
1335 }
1336 @@ -288,8 +292,11 @@ static int ucsi_register_altmode(struct ucsi_connector *con,
1337 goto err;
1338 }
1339
1340 - desc->mode = ucsi_altmode_next_mode(con->port_altmode,
1341 - desc->svid);
1342 + ret = ucsi_altmode_next_mode(con->port_altmode, desc->svid);
1343 + if (ret < 0)
1344 + return ret;
1345 +
1346 + desc->mode = ret;
1347
1348 switch (desc->svid) {
1349 case USB_TYPEC_DP_SID:
1350 @@ -315,8 +322,11 @@ static int ucsi_register_altmode(struct ucsi_connector *con,
1351 goto err;
1352 }
1353
1354 - desc->mode = ucsi_altmode_next_mode(con->partner_altmode,
1355 - desc->svid);
1356 + ret = ucsi_altmode_next_mode(con->partner_altmode, desc->svid);
1357 + if (ret < 0)
1358 + return ret;
1359 +
1360 + desc->mode = ret;
1361
1362 alt = typec_partner_register_altmode(con->partner, desc);
1363 if (IS_ERR(alt)) {
1364 diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
1365 index 8685d28dfdaaf..dc7f5c4f0607e 100644
1366 --- a/drivers/video/fbdev/core/fbcon.c
1367 +++ b/drivers/video/fbdev/core/fbcon.c
1368 @@ -2012,7 +2012,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width,
1369 struct fb_var_screeninfo var = info->var;
1370 int x_diff, y_diff, virt_w, virt_h, virt_fw, virt_fh;
1371
1372 - if (ops->p && ops->p->userfont && FNTSIZE(vc->vc_font.data)) {
1373 + if (p->userfont && FNTSIZE(vc->vc_font.data)) {
1374 int size;
1375 int pitch = PITCH(vc->vc_font.width);
1376
1377 diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
1378 index eb2e3db3916f0..17df90b5f57a2 100644
1379 --- a/fs/cifs/inode.c
1380 +++ b/fs/cifs/inode.c
1381 @@ -898,6 +898,8 @@ cifs_get_inode_info(struct inode **inode, const char *full_path,
1382 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MODE_FROM_SID) {
1383 rc = cifs_acl_to_fattr(cifs_sb, &fattr, *inode, true,
1384 full_path, fid);
1385 + if (rc == -EREMOTE)
1386 + rc = 0;
1387 if (rc) {
1388 cifs_dbg(FYI, "%s: Get mode from SID failed. rc=%d\n",
1389 __func__, rc);
1390 @@ -906,6 +908,8 @@ cifs_get_inode_info(struct inode **inode, const char *full_path,
1391 } else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL) {
1392 rc = cifs_acl_to_fattr(cifs_sb, &fattr, *inode, false,
1393 full_path, fid);
1394 + if (rc == -EREMOTE)
1395 + rc = 0;
1396 if (rc) {
1397 cifs_dbg(FYI, "%s: Getting ACL failed with error: %d\n",
1398 __func__, rc);
1399 diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
1400 index ec9a1f9ce2dd6..68be334afc286 100644
1401 --- a/fs/f2fs/data.c
1402 +++ b/fs/f2fs/data.c
1403 @@ -2753,6 +2753,9 @@ static int check_direct_IO(struct inode *inode, struct iov_iter *iter,
1404 unsigned long align = offset | iov_iter_alignment(iter);
1405 struct block_device *bdev = inode->i_sb->s_bdev;
1406
1407 + if (iov_iter_rw(iter) == READ && offset >= i_size_read(inode))
1408 + return 1;
1409 +
1410 if (align & blocksize_mask) {
1411 if (bdev)
1412 blkbits = blksize_bits(bdev_logical_block_size(bdev));
1413 diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
1414 index daeac4268c1ab..8a67b933ccd42 100644
1415 --- a/fs/f2fs/node.c
1416 +++ b/fs/f2fs/node.c
1417 @@ -2315,6 +2315,9 @@ static int __f2fs_build_free_nids(struct f2fs_sb_info *sbi,
1418 if (unlikely(nid >= nm_i->max_nid))
1419 nid = 0;
1420
1421 + if (unlikely(nid % NAT_ENTRY_PER_BLOCK))
1422 + nid = NAT_BLOCK_OFFSET(nid) * NAT_ENTRY_PER_BLOCK;
1423 +
1424 /* Enough entries */
1425 if (nm_i->nid_cnt[FREE_NID] >= NAT_ENTRY_PER_BLOCK)
1426 return 0;
1427 diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c
1428 index 83cf64da474cb..d5b9274662db1 100644
1429 --- a/fs/gfs2/glops.c
1430 +++ b/fs/gfs2/glops.c
1431 @@ -87,6 +87,8 @@ static void gfs2_ail_empty_gl(struct gfs2_glock *gl)
1432 memset(&tr, 0, sizeof(tr));
1433 INIT_LIST_HEAD(&tr.tr_buf);
1434 INIT_LIST_HEAD(&tr.tr_databuf);
1435 + INIT_LIST_HEAD(&tr.tr_ail1_list);
1436 + INIT_LIST_HEAD(&tr.tr_ail2_list);
1437 tr.tr_revokes = atomic_read(&gl->gl_ail_count);
1438
1439 if (!tr.tr_revokes) {
1440 diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
1441 index a4b6a49462a41..00a90fc725977 100644
1442 --- a/fs/gfs2/log.c
1443 +++ b/fs/gfs2/log.c
1444 @@ -810,8 +810,6 @@ void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl, u32 flags)
1445 tr = sdp->sd_log_tr;
1446 if (tr) {
1447 sdp->sd_log_tr = NULL;
1448 - INIT_LIST_HEAD(&tr->tr_ail1_list);
1449 - INIT_LIST_HEAD(&tr->tr_ail2_list);
1450 tr->tr_first = sdp->sd_log_flush_head;
1451 if (unlikely (state == SFS_FROZEN))
1452 gfs2_assert_withdraw(sdp, !tr->tr_num_buf_new && !tr->tr_num_databuf_new);
1453 diff --git a/fs/gfs2/trans.c b/fs/gfs2/trans.c
1454 index 9d4227330de47..2a12d30ae0de4 100644
1455 --- a/fs/gfs2/trans.c
1456 +++ b/fs/gfs2/trans.c
1457 @@ -53,6 +53,8 @@ int gfs2_trans_begin(struct gfs2_sbd *sdp, unsigned int blocks,
1458 sizeof(u64));
1459 INIT_LIST_HEAD(&tr->tr_databuf);
1460 INIT_LIST_HEAD(&tr->tr_buf);
1461 + INIT_LIST_HEAD(&tr->tr_ail1_list);
1462 + INIT_LIST_HEAD(&tr->tr_ail2_list);
1463
1464 sb_start_intwrite(sdp->sd_vfs);
1465
1466 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
1467 index d0cb827b72cfa..00435556db0ce 100644
1468 --- a/fs/nfs/nfs4proc.c
1469 +++ b/fs/nfs/nfs4proc.c
1470 @@ -3257,8 +3257,10 @@ static int _nfs4_do_setattr(struct inode *inode,
1471
1472 /* Servers should only apply open mode checks for file size changes */
1473 truncate = (arg->iap->ia_valid & ATTR_SIZE) ? true : false;
1474 - if (!truncate)
1475 + if (!truncate) {
1476 + nfs4_inode_make_writeable(inode);
1477 goto zero_stateid;
1478 + }
1479
1480 if (nfs4_copy_delegation_stateid(inode, FMODE_WRITE, &arg->stateid, &delegation_cred)) {
1481 /* Use that stateid */
1482 @@ -7232,7 +7234,12 @@ int nfs4_lock_delegation_recall(struct file_lock *fl, struct nfs4_state *state,
1483 err = nfs4_set_lock_state(state, fl);
1484 if (err != 0)
1485 return err;
1486 - err = _nfs4_do_setlk(state, F_SETLK, fl, NFS_LOCK_NEW);
1487 + do {
1488 + err = _nfs4_do_setlk(state, F_SETLK, fl, NFS_LOCK_NEW);
1489 + if (err != -NFS4ERR_DELAY)
1490 + break;
1491 + ssleep(1);
1492 + } while (err == -NFS4ERR_DELAY);
1493 return nfs4_handle_delegation_recall_error(server, state, stateid, fl, err);
1494 }
1495
1496 diff --git a/include/linux/dax.h b/include/linux/dax.h
1497 index 9bd8528bd305f..72a7f03a59f4c 100644
1498 --- a/include/linux/dax.h
1499 +++ b/include/linux/dax.h
1500 @@ -56,6 +56,8 @@ static inline void set_dax_synchronous(struct dax_device *dax_dev)
1501 {
1502 __set_dax_synchronous(dax_dev);
1503 }
1504 +bool dax_supported(struct dax_device *dax_dev, struct block_device *bdev,
1505 + int blocksize, sector_t start, sector_t len);
1506 /*
1507 * Check if given mapping is supported by the file / underlying device.
1508 */
1509 @@ -102,6 +104,12 @@ static inline bool dax_synchronous(struct dax_device *dax_dev)
1510 static inline void set_dax_synchronous(struct dax_device *dax_dev)
1511 {
1512 }
1513 +static inline bool dax_supported(struct dax_device *dax_dev,
1514 + struct block_device *bdev, int blocksize, sector_t start,
1515 + sector_t len)
1516 +{
1517 + return false;
1518 +}
1519 static inline bool daxdev_mapping_supported(struct vm_area_struct *vma,
1520 struct dax_device *dax_dev)
1521 {
1522 @@ -197,14 +205,23 @@ static inline void dax_unlock_page(struct page *page, dax_entry_t cookie)
1523 }
1524 #endif
1525
1526 +#if IS_ENABLED(CONFIG_DAX)
1527 int dax_read_lock(void);
1528 void dax_read_unlock(int id);
1529 +#else
1530 +static inline int dax_read_lock(void)
1531 +{
1532 + return 0;
1533 +}
1534 +
1535 +static inline void dax_read_unlock(int id)
1536 +{
1537 +}
1538 +#endif /* CONFIG_DAX */
1539 bool dax_alive(struct dax_device *dax_dev);
1540 void *dax_get_private(struct dax_device *dax_dev);
1541 long dax_direct_access(struct dax_device *dax_dev, pgoff_t pgoff, long nr_pages,
1542 void **kaddr, pfn_t *pfn);
1543 -bool dax_supported(struct dax_device *dax_dev, struct block_device *bdev,
1544 - int blocksize, sector_t start, sector_t len);
1545 size_t dax_copy_from_iter(struct dax_device *dax_dev, pgoff_t pgoff, void *addr,
1546 size_t bytes, struct iov_iter *i);
1547 size_t dax_copy_to_iter(struct dax_device *dax_dev, pgoff_t pgoff, void *addr,
1548 diff --git a/include/linux/i2c-algo-pca.h b/include/linux/i2c-algo-pca.h
1549 index d03071732db4a..7c522fdd9ea73 100644
1550 --- a/include/linux/i2c-algo-pca.h
1551 +++ b/include/linux/i2c-algo-pca.h
1552 @@ -53,6 +53,20 @@
1553 #define I2C_PCA_CON_SI 0x08 /* Serial Interrupt */
1554 #define I2C_PCA_CON_CR 0x07 /* Clock Rate (MASK) */
1555
1556 +/**
1557 + * struct pca_i2c_bus_settings - The configured PCA i2c bus settings
1558 + * @mode: Configured i2c bus mode
1559 + * @tlow: Configured SCL LOW period
1560 + * @thi: Configured SCL HIGH period
1561 + * @clock_freq: The configured clock frequency
1562 + */
1563 +struct pca_i2c_bus_settings {
1564 + int mode;
1565 + int tlow;
1566 + int thi;
1567 + int clock_freq;
1568 +};
1569 +
1570 struct i2c_algo_pca_data {
1571 void *data; /* private low level data */
1572 void (*write_byte) (void *data, int reg, int val);
1573 @@ -64,6 +78,7 @@ struct i2c_algo_pca_data {
1574 * For PCA9665, use the frequency you want here. */
1575 unsigned int i2c_clock;
1576 unsigned int chip;
1577 + struct pca_i2c_bus_settings bus_settings;
1578 };
1579
1580 int i2c_pca_add_bus(struct i2c_adapter *);
1581 diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
1582 index e735bc4075dc7..1b6b8e05868dd 100644
1583 --- a/include/uapi/linux/kvm.h
1584 +++ b/include/uapi/linux/kvm.h
1585 @@ -768,9 +768,10 @@ struct kvm_ppc_resize_hpt {
1586 #define KVM_VM_PPC_HV 1
1587 #define KVM_VM_PPC_PR 2
1588
1589 -/* on MIPS, 0 forces trap & emulate, 1 forces VZ ASE */
1590 -#define KVM_VM_MIPS_TE 0
1591 +/* on MIPS, 0 indicates auto, 1 forces VZ ASE, 2 forces trap & emulate */
1592 +#define KVM_VM_MIPS_AUTO 0
1593 #define KVM_VM_MIPS_VZ 1
1594 +#define KVM_VM_MIPS_TE 2
1595
1596 #define KVM_S390_SIE_PAGE_OFFSET 1
1597
1598 diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
1599 index 3128d95847125..3eb0b311b4a12 100644
1600 --- a/mm/memory_hotplug.c
1601 +++ b/mm/memory_hotplug.c
1602 @@ -1566,6 +1566,20 @@ static int __ref __offline_pages(unsigned long start_pfn,
1603 /* check again */
1604 ret = walk_system_ram_range(start_pfn, end_pfn - start_pfn,
1605 NULL, check_pages_isolated_cb);
1606 + /*
1607 + * per-cpu pages are drained in start_isolate_page_range, but if
1608 + * there are still pages that are not free, make sure that we
1609 + * drain again, because when we isolated range we might
1610 + * have raced with another thread that was adding pages to pcp
1611 + * list.
1612 + *
1613 + * Forward progress should be still guaranteed because
1614 + * pages on the pcp list can only belong to MOVABLE_ZONE
1615 + * because has_unmovable_pages explicitly checks for
1616 + * PageBuddy on freed pages on other zones.
1617 + */
1618 + if (ret)
1619 + drain_all_pages(zone);
1620 } while (ret);
1621
1622 /* Ok, all of our target is isolated.
1623 diff --git a/mm/page_isolation.c b/mm/page_isolation.c
1624 index 89c19c0feadb9..da0f6e1ae01e2 100644
1625 --- a/mm/page_isolation.c
1626 +++ b/mm/page_isolation.c
1627 @@ -187,6 +187,14 @@ __first_valid_page(unsigned long pfn, unsigned long nr_pages)
1628 * pageblocks we may have modified and return -EBUSY to caller. This
1629 * prevents two threads from simultaneously working on overlapping ranges.
1630 *
1631 + * Please note that there is no strong synchronization with the page allocator
1632 + * either. Pages might be freed while their page blocks are marked ISOLATED.
1633 + * In some cases pages might still end up on pcp lists and that would allow
1634 + * for their allocation even when they are in fact isolated already. Depending
1635 + * on how strong of a guarantee the caller needs drain_all_pages might be needed
1636 + * (e.g. __offline_pages will need to call it after check for isolated range for
1637 + * a next retry).
1638 + *
1639 * Return: the number of isolated pageblocks on success and -EBUSY if any part
1640 * of range cannot be isolated.
1641 */
1642 diff --git a/mm/percpu.c b/mm/percpu.c
1643 index 7e06a1e587209..806bc16f88eb8 100644
1644 --- a/mm/percpu.c
1645 +++ b/mm/percpu.c
1646 @@ -1328,7 +1328,7 @@ static struct pcpu_chunk * __init pcpu_alloc_first_chunk(unsigned long tmp_addr,
1647
1648 /* allocate chunk */
1649 alloc_size = sizeof(struct pcpu_chunk) +
1650 - BITS_TO_LONGS(region_size >> PAGE_SHIFT);
1651 + BITS_TO_LONGS(region_size >> PAGE_SHIFT) * sizeof(unsigned long);
1652 chunk = memblock_alloc(alloc_size, SMP_CACHE_BYTES);
1653 if (!chunk)
1654 panic("%s: Failed to allocate %zu bytes\n", __func__,
1655 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
1656 index f80b6999ca1cb..08d9915d50c0f 100644
1657 --- a/net/core/skbuff.c
1658 +++ b/net/core/skbuff.c
1659 @@ -5882,9 +5882,13 @@ static int pskb_carve_inside_nonlinear(struct sk_buff *skb, const u32 off,
1660 if (skb_has_frag_list(skb))
1661 skb_clone_fraglist(skb);
1662
1663 - if (k == 0) {
1664 - /* split line is in frag list */
1665 - pskb_carve_frag_list(skb, shinfo, off - pos, gfp_mask);
1666 + /* split line is in frag list */
1667 + if (k == 0 && pskb_carve_frag_list(skb, shinfo, off - pos, gfp_mask)) {
1668 + /* skb_frag_unref() is not needed here as shinfo->nr_frags = 0. */
1669 + if (skb_has_frag_list(skb))
1670 + kfree_skb_list(skb_shinfo(skb)->frag_list);
1671 + kfree(data);
1672 + return -ENOMEM;
1673 }
1674 skb_release_data(skb);
1675
1676 diff --git a/net/dsa/tag_edsa.c b/net/dsa/tag_edsa.c
1677 index e8eaa804ccb9e..d6200ff982007 100644
1678 --- a/net/dsa/tag_edsa.c
1679 +++ b/net/dsa/tag_edsa.c
1680 @@ -13,6 +13,16 @@
1681 #define DSA_HLEN 4
1682 #define EDSA_HLEN 8
1683
1684 +#define FRAME_TYPE_TO_CPU 0x00
1685 +#define FRAME_TYPE_FORWARD 0x03
1686 +
1687 +#define TO_CPU_CODE_MGMT_TRAP 0x00
1688 +#define TO_CPU_CODE_FRAME2REG 0x01
1689 +#define TO_CPU_CODE_IGMP_MLD_TRAP 0x02
1690 +#define TO_CPU_CODE_POLICY_TRAP 0x03
1691 +#define TO_CPU_CODE_ARP_MIRROR 0x04
1692 +#define TO_CPU_CODE_POLICY_MIRROR 0x05
1693 +
1694 static struct sk_buff *edsa_xmit(struct sk_buff *skb, struct net_device *dev)
1695 {
1696 struct dsa_port *dp = dsa_slave_to_port(dev);
1697 @@ -77,6 +87,8 @@ static struct sk_buff *edsa_rcv(struct sk_buff *skb, struct net_device *dev,
1698 struct packet_type *pt)
1699 {
1700 u8 *edsa_header;
1701 + int frame_type;
1702 + int code;
1703 int source_device;
1704 int source_port;
1705
1706 @@ -91,8 +103,29 @@ static struct sk_buff *edsa_rcv(struct sk_buff *skb, struct net_device *dev,
1707 /*
1708 * Check that frame type is either TO_CPU or FORWARD.
1709 */
1710 - if ((edsa_header[0] & 0xc0) != 0x00 && (edsa_header[0] & 0xc0) != 0xc0)
1711 + frame_type = edsa_header[0] >> 6;
1712 +
1713 + switch (frame_type) {
1714 + case FRAME_TYPE_TO_CPU:
1715 + code = (edsa_header[1] & 0x6) | ((edsa_header[2] >> 4) & 1);
1716 +
1717 + /*
1718 + * Mark the frame to never egress on any port of the same switch
1719 + * unless it's a trapped IGMP/MLD packet, in which case the
1720 + * bridge might want to forward it.
1721 + */
1722 + if (code != TO_CPU_CODE_IGMP_MLD_TRAP)
1723 + skb->offload_fwd_mark = 1;
1724 +
1725 + break;
1726 +
1727 + case FRAME_TYPE_FORWARD:
1728 + skb->offload_fwd_mark = 1;
1729 + break;
1730 +
1731 + default:
1732 return NULL;
1733 + }
1734
1735 /*
1736 * Determine source device and port.
1737 @@ -156,8 +189,6 @@ static struct sk_buff *edsa_rcv(struct sk_buff *skb, struct net_device *dev,
1738 2 * ETH_ALEN);
1739 }
1740
1741 - skb->offload_fwd_mark = 1;
1742 -
1743 return skb;
1744 }
1745
1746 diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
1747 index 4a020b6888608..1db9f62e466d9 100644
1748 --- a/net/sunrpc/rpcb_clnt.c
1749 +++ b/net/sunrpc/rpcb_clnt.c
1750 @@ -988,8 +988,8 @@ static int rpcb_dec_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr,
1751 p = xdr_inline_decode(xdr, len);
1752 if (unlikely(p == NULL))
1753 goto out_fail;
1754 - dprintk("RPC: %5u RPCB_%s reply: %s\n", req->rq_task->tk_pid,
1755 - req->rq_task->tk_msg.rpc_proc->p_name, (char *)p);
1756 + dprintk("RPC: %5u RPCB_%s reply: %*pE\n", req->rq_task->tk_pid,
1757 + req->rq_task->tk_msg.rpc_proc->p_name, len, (char *)p);
1758
1759 if (rpc_uaddr2sockaddr(req->rq_xprt->xprt_net, (char *)p, len,
1760 sap, sizeof(address)) == 0)
1761 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
1762 index d614090dae49d..54346ae47d112 100644
1763 --- a/sound/pci/hda/patch_realtek.c
1764 +++ b/sound/pci/hda/patch_realtek.c
1765 @@ -2466,7 +2466,6 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
1766 SND_PCI_QUIRK(0x1462, 0x1276, "MSI-GL73", ALC1220_FIXUP_CLEVO_P950),
1767 SND_PCI_QUIRK(0x1462, 0x1293, "MSI-GP65", ALC1220_FIXUP_CLEVO_P950),
1768 SND_PCI_QUIRK(0x1462, 0x7350, "MSI-7350", ALC889_FIXUP_CD),
1769 - SND_PCI_QUIRK(0x1462, 0x9c37, "MSI X570-A PRO", ALC1220_FIXUP_CLEVO_P950),
1770 SND_PCI_QUIRK(0x1462, 0xda57, "MSI Z270-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
1771 SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3),
1772 SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX),
1773 @@ -5975,6 +5974,40 @@ static void alc_fixup_disable_mic_vref(struct hda_codec *codec,
1774 snd_hda_codec_set_pin_target(codec, 0x19, PIN_VREFHIZ);
1775 }
1776
1777 +
1778 +static void alc294_gx502_toggle_output(struct hda_codec *codec,
1779 + struct hda_jack_callback *cb)
1780 +{
1781 + /* The Windows driver sets the codec up in a very different way where
1782 + * it appears to leave 0x10 = 0x8a20 set. For Linux we need to toggle it
1783 + */
1784 + if (snd_hda_jack_detect_state(codec, 0x21) == HDA_JACK_PRESENT)
1785 + alc_write_coef_idx(codec, 0x10, 0x8a20);
1786 + else
1787 + alc_write_coef_idx(codec, 0x10, 0x0a20);
1788 +}
1789 +
1790 +static void alc294_fixup_gx502_hp(struct hda_codec *codec,
1791 + const struct hda_fixup *fix, int action)
1792 +{
1793 + /* Pin 0x21: headphones/headset mic */
1794 + if (!is_jack_detectable(codec, 0x21))
1795 + return;
1796 +
1797 + switch (action) {
1798 + case HDA_FIXUP_ACT_PRE_PROBE:
1799 + snd_hda_jack_detect_enable_callback(codec, 0x21,
1800 + alc294_gx502_toggle_output);
1801 + break;
1802 + case HDA_FIXUP_ACT_INIT:
1803 + /* Make sure to start in a correct state, i.e. if
1804 + * headphones have been plugged in before powering up the system
1805 + */
1806 + alc294_gx502_toggle_output(codec, NULL);
1807 + break;
1808 + }
1809 +}
1810 +
1811 static void alc285_fixup_hp_gpio_amp_init(struct hda_codec *codec,
1812 const struct hda_fixup *fix, int action)
1813 {
1814 @@ -6155,6 +6188,9 @@ enum {
1815 ALC285_FIXUP_THINKPAD_HEADSET_JACK,
1816 ALC294_FIXUP_ASUS_HPE,
1817 ALC294_FIXUP_ASUS_COEF_1B,
1818 + ALC294_FIXUP_ASUS_GX502_HP,
1819 + ALC294_FIXUP_ASUS_GX502_PINS,
1820 + ALC294_FIXUP_ASUS_GX502_VERBS,
1821 ALC285_FIXUP_HP_GPIO_LED,
1822 ALC285_FIXUP_HP_MUTE_LED,
1823 ALC236_FIXUP_HP_MUTE_LED,
1824 @@ -6173,6 +6209,7 @@ enum {
1825 ALC269_FIXUP_LEMOTE_A1802,
1826 ALC269_FIXUP_LEMOTE_A190X,
1827 ALC256_FIXUP_INTEL_NUC8_RUGGED,
1828 + ALC255_FIXUP_XIAOMI_HEADSET_MIC,
1829 };
1830
1831 static const struct hda_fixup alc269_fixups[] = {
1832 @@ -7320,6 +7357,33 @@ static const struct hda_fixup alc269_fixups[] = {
1833 .chained = true,
1834 .chain_id = ALC294_FIXUP_ASUS_HEADSET_MIC
1835 },
1836 + [ALC294_FIXUP_ASUS_GX502_PINS] = {
1837 + .type = HDA_FIXUP_PINS,
1838 + .v.pins = (const struct hda_pintbl[]) {
1839 + { 0x19, 0x03a11050 }, /* front HP mic */
1840 + { 0x1a, 0x01a11830 }, /* rear external mic */
1841 + { 0x21, 0x03211020 }, /* front HP out */
1842 + { }
1843 + },
1844 + .chained = true,
1845 + .chain_id = ALC294_FIXUP_ASUS_GX502_VERBS
1846 + },
1847 + [ALC294_FIXUP_ASUS_GX502_VERBS] = {
1848 + .type = HDA_FIXUP_VERBS,
1849 + .v.verbs = (const struct hda_verb[]) {
1850 + /* set 0x15 to HP-OUT ctrl */
1851 + { 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc0 },
1852 + /* unmute the 0x15 amp */
1853 + { 0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000 },
1854 + { }
1855 + },
1856 + .chained = true,
1857 + .chain_id = ALC294_FIXUP_ASUS_GX502_HP
1858 + },
1859 + [ALC294_FIXUP_ASUS_GX502_HP] = {
1860 + .type = HDA_FIXUP_FUNC,
1861 + .v.func = alc294_fixup_gx502_hp,
1862 + },
1863 [ALC294_FIXUP_ASUS_COEF_1B] = {
1864 .type = HDA_FIXUP_VERBS,
1865 .v.verbs = (const struct hda_verb[]) {
1866 @@ -7509,6 +7573,16 @@ static const struct hda_fixup alc269_fixups[] = {
1867 .chained = true,
1868 .chain_id = ALC269_FIXUP_HEADSET_MODE
1869 },
1870 + [ALC255_FIXUP_XIAOMI_HEADSET_MIC] = {
1871 + .type = HDA_FIXUP_VERBS,
1872 + .v.verbs = (const struct hda_verb[]) {
1873 + { 0x20, AC_VERB_SET_COEF_INDEX, 0x45 },
1874 + { 0x20, AC_VERB_SET_PROC_COEF, 0x5089 },
1875 + { }
1876 + },
1877 + .chained = true,
1878 + .chain_id = ALC289_FIXUP_ASUS_GA401
1879 + },
1880 };
1881
1882 static const struct snd_pci_quirk alc269_fixup_tbl[] = {
1883 @@ -7693,6 +7767,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
1884 SND_PCI_QUIRK(0x1043, 0x1ccd, "ASUS X555UB", ALC256_FIXUP_ASUS_MIC),
1885 SND_PCI_QUIRK(0x1043, 0x1e11, "ASUS Zephyrus G15", ALC289_FIXUP_ASUS_GA502),
1886 SND_PCI_QUIRK(0x1043, 0x1f11, "ASUS Zephyrus G14", ALC289_FIXUP_ASUS_GA401),
1887 + SND_PCI_QUIRK(0x1043, 0x1881, "ASUS Zephyrus S/M", ALC294_FIXUP_ASUS_GX502_PINS),
1888 SND_PCI_QUIRK(0x1043, 0x3030, "ASUS ZN270IE", ALC256_FIXUP_ASUS_AIO_GPIO2),
1889 SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC),
1890 SND_PCI_QUIRK(0x1043, 0x834a, "ASUS S101", ALC269_FIXUP_STEREO_DMIC),
1891 @@ -7805,6 +7880,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
1892 SND_PCI_QUIRK(0x1b35, 0x1236, "CZC TMI", ALC269_FIXUP_CZC_TMI),
1893 SND_PCI_QUIRK(0x1b35, 0x1237, "CZC L101", ALC269_FIXUP_CZC_L101),
1894 SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */
1895 + SND_PCI_QUIRK(0x1d72, 0x1602, "RedmiBook", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
1896 SND_PCI_QUIRK(0x1d72, 0x1901, "RedmiBook 14", ALC256_FIXUP_ASUS_HEADSET_MIC),
1897 SND_PCI_QUIRK(0x10ec, 0x118c, "Medion EE4254 MD62100", ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE),
1898 SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802),
1899 @@ -7982,6 +8058,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
1900 {.id = ALC298_FIXUP_HUAWEI_MBX_STEREO, .name = "huawei-mbx-stereo"},
1901 {.id = ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE, .name = "alc256-medion-headset"},
1902 {.id = ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, .name = "alc298-samsung-headphone"},
1903 + {.id = ALC255_FIXUP_XIAOMI_HEADSET_MIC, .name = "alc255-xiaomi-headset"},
1904 {}
1905 };
1906 #define ALC225_STANDARD_PINS \
1907 diff --git a/sound/soc/meson/axg-toddr.c b/sound/soc/meson/axg-toddr.c
1908 index ecf41c7549a65..32b9fd59353a4 100644
1909 --- a/sound/soc/meson/axg-toddr.c
1910 +++ b/sound/soc/meson/axg-toddr.c
1911 @@ -18,6 +18,7 @@
1912 #define CTRL0_TODDR_SEL_RESAMPLE BIT(30)
1913 #define CTRL0_TODDR_EXT_SIGNED BIT(29)
1914 #define CTRL0_TODDR_PP_MODE BIT(28)
1915 +#define CTRL0_TODDR_SYNC_CH BIT(27)
1916 #define CTRL0_TODDR_TYPE_MASK GENMASK(15, 13)
1917 #define CTRL0_TODDR_TYPE(x) ((x) << 13)
1918 #define CTRL0_TODDR_MSB_POS_MASK GENMASK(12, 8)
1919 @@ -184,10 +185,31 @@ static const struct axg_fifo_match_data axg_toddr_match_data = {
1920 .dai_drv = &axg_toddr_dai_drv
1921 };
1922
1923 +static int g12a_toddr_dai_startup(struct snd_pcm_substream *substream,
1924 + struct snd_soc_dai *dai)
1925 +{
1926 + struct axg_fifo *fifo = snd_soc_dai_get_drvdata(dai);
1927 + int ret;
1928 +
1929 + ret = axg_toddr_dai_startup(substream, dai);
1930 + if (ret)
1931 + return ret;
1932 +
1933 + /*
1934 + * Make sure the first channel ends up in the at beginning of the output
1935 + * As weird as it looks, without this the first channel may be misplaced
1936 + * in memory, with a random shift of 2 channels.
1937 + */
1938 + regmap_update_bits(fifo->map, FIFO_CTRL0, CTRL0_TODDR_SYNC_CH,
1939 + CTRL0_TODDR_SYNC_CH);
1940 +
1941 + return 0;
1942 +}
1943 +
1944 static const struct snd_soc_dai_ops g12a_toddr_ops = {
1945 .prepare = g12a_toddr_dai_prepare,
1946 .hw_params = axg_toddr_dai_hw_params,
1947 - .startup = axg_toddr_dai_startup,
1948 + .startup = g12a_toddr_dai_startup,
1949 .shutdown = axg_toddr_dai_shutdown,
1950 };
1951
1952 diff --git a/sound/soc/qcom/apq8016_sbc.c b/sound/soc/qcom/apq8016_sbc.c
1953 index ac75838bbfabe..15a88020dfab2 100644
1954 --- a/sound/soc/qcom/apq8016_sbc.c
1955 +++ b/sound/soc/qcom/apq8016_sbc.c
1956 @@ -235,6 +235,7 @@ static int apq8016_sbc_platform_probe(struct platform_device *pdev)
1957 return -ENOMEM;
1958
1959 card->dev = dev;
1960 + card->owner = THIS_MODULE;
1961 card->dapm_widgets = apq8016_sbc_dapm_widgets;
1962 card->num_dapm_widgets = ARRAY_SIZE(apq8016_sbc_dapm_widgets);
1963 data = apq8016_sbc_parse_of(card);
1964 diff --git a/sound/soc/qcom/apq8096.c b/sound/soc/qcom/apq8096.c
1965 index 94363fd6846ab..c10c5f2ec29b7 100644
1966 --- a/sound/soc/qcom/apq8096.c
1967 +++ b/sound/soc/qcom/apq8096.c
1968 @@ -114,6 +114,7 @@ static int apq8096_platform_probe(struct platform_device *pdev)
1969 return -ENOMEM;
1970
1971 card->dev = dev;
1972 + card->owner = THIS_MODULE;
1973 dev_set_drvdata(dev, card);
1974 ret = qcom_snd_parse_of(card);
1975 if (ret) {
1976 diff --git a/sound/soc/qcom/common.c b/sound/soc/qcom/common.c
1977 index 8ada4ecba8472..10322690c0eaa 100644
1978 --- a/sound/soc/qcom/common.c
1979 +++ b/sound/soc/qcom/common.c
1980 @@ -45,8 +45,10 @@ int qcom_snd_parse_of(struct snd_soc_card *card)
1981
1982 for_each_child_of_node(dev->of_node, np) {
1983 dlc = devm_kzalloc(dev, 2 * sizeof(*dlc), GFP_KERNEL);
1984 - if (!dlc)
1985 - return -ENOMEM;
1986 + if (!dlc) {
1987 + ret = -ENOMEM;
1988 + goto err;
1989 + }
1990
1991 link->cpus = &dlc[0];
1992 link->platforms = &dlc[1];
1993 diff --git a/sound/soc/qcom/sdm845.c b/sound/soc/qcom/sdm845.c
1994 index 28f3cef696e61..7e6c41e63d8e1 100644
1995 --- a/sound/soc/qcom/sdm845.c
1996 +++ b/sound/soc/qcom/sdm845.c
1997 @@ -410,6 +410,7 @@ static int sdm845_snd_platform_probe(struct platform_device *pdev)
1998 card->dapm_widgets = sdm845_snd_widgets;
1999 card->num_dapm_widgets = ARRAY_SIZE(sdm845_snd_widgets);
2000 card->dev = dev;
2001 + card->owner = THIS_MODULE;
2002 dev_set_drvdata(dev, card);
2003 ret = qcom_snd_parse_of(card);
2004 if (ret) {
2005 diff --git a/sound/soc/qcom/storm.c b/sound/soc/qcom/storm.c
2006 index e6666e597265a..236759179100a 100644
2007 --- a/sound/soc/qcom/storm.c
2008 +++ b/sound/soc/qcom/storm.c
2009 @@ -96,6 +96,7 @@ static int storm_platform_probe(struct platform_device *pdev)
2010 return -ENOMEM;
2011
2012 card->dev = &pdev->dev;
2013 + card->owner = THIS_MODULE;
2014
2015 ret = snd_soc_of_parse_card_name(card, "qcom,model");
2016 if (ret) {
2017 diff --git a/tools/perf/tests/bp_signal.c b/tools/perf/tests/bp_signal.c
2018 index 166f411568a50..b5cdedd13cbc7 100644
2019 --- a/tools/perf/tests/bp_signal.c
2020 +++ b/tools/perf/tests/bp_signal.c
2021 @@ -45,10 +45,13 @@ volatile long the_var;
2022 #if defined (__x86_64__)
2023 extern void __test_function(volatile long *ptr);
2024 asm (
2025 + ".pushsection .text;"
2026 ".globl __test_function\n"
2027 + ".type __test_function, @function;"
2028 "__test_function:\n"
2029 "incq (%rdi)\n"
2030 - "ret\n");
2031 + "ret\n"
2032 + ".popsection\n");
2033 #else
2034 static void __test_function(volatile long *ptr)
2035 {
2036 diff --git a/tools/perf/tests/pmu.c b/tools/perf/tests/pmu.c
2037 index 74379ff1f7fa0..46cd1db85bd06 100644
2038 --- a/tools/perf/tests/pmu.c
2039 +++ b/tools/perf/tests/pmu.c
2040 @@ -173,6 +173,7 @@ int test__pmu(struct test *test __maybe_unused, int subtest __maybe_unused)
2041 ret = 0;
2042 } while (0);
2043
2044 + perf_pmu__del_formats(&formats);
2045 test_format_dir_put(format);
2046 return ret;
2047 }
2048 diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
2049 index de79c735e4411..505b890ac85cc 100644
2050 --- a/tools/perf/util/evlist.c
2051 +++ b/tools/perf/util/evlist.c
2052 @@ -976,6 +976,10 @@ int perf_evlist__create_maps(struct evlist *evlist, struct target *target)
2053
2054 perf_evlist__set_maps(&evlist->core, cpus, threads);
2055
2056 + /* as evlist now has references, put count here */
2057 + perf_cpu_map__put(cpus);
2058 + perf_thread_map__put(threads);
2059 +
2060 return 0;
2061
2062 out_delete_threads:
2063 @@ -1230,11 +1234,12 @@ static int perf_evlist__create_syswide_maps(struct evlist *evlist)
2064 goto out_put;
2065
2066 perf_evlist__set_maps(&evlist->core, cpus, threads);
2067 -out:
2068 - return err;
2069 +
2070 + perf_thread_map__put(threads);
2071 out_put:
2072 perf_cpu_map__put(cpus);
2073 - goto out;
2074 +out:
2075 + return err;
2076 }
2077
2078 int evlist__open(struct evlist *evlist)
2079 diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
2080 index 422ad1888e74f..759a99f723fc3 100644
2081 --- a/tools/perf/util/parse-events.c
2082 +++ b/tools/perf/util/parse-events.c
2083 @@ -370,7 +370,7 @@ static int add_event_tool(struct list_head *list, int *idx,
2084 return -ENOMEM;
2085 evsel->tool_event = tool_event;
2086 if (tool_event == PERF_TOOL_DURATION_TIME)
2087 - evsel->unit = strdup("ns");
2088 + evsel->unit = "ns";
2089 return 0;
2090 }
2091
2092 diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
2093 index 5608da82ad239..628a6d5a5b384 100644
2094 --- a/tools/perf/util/pmu.c
2095 +++ b/tools/perf/util/pmu.c
2096 @@ -1294,6 +1294,17 @@ void perf_pmu__set_format(unsigned long *bits, long from, long to)
2097 set_bit(b, bits);
2098 }
2099
2100 +void perf_pmu__del_formats(struct list_head *formats)
2101 +{
2102 + struct perf_pmu_format *fmt, *tmp;
2103 +
2104 + list_for_each_entry_safe(fmt, tmp, formats, list) {
2105 + list_del(&fmt->list);
2106 + free(fmt->name);
2107 + free(fmt);
2108 + }
2109 +}
2110 +
2111 static int sub_non_neg(int a, int b)
2112 {
2113 if (b > a)
2114 diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h
2115 index f36ade6df76d1..9570d9b26250f 100644
2116 --- a/tools/perf/util/pmu.h
2117 +++ b/tools/perf/util/pmu.h
2118 @@ -81,6 +81,7 @@ int perf_pmu__new_format(struct list_head *list, char *name,
2119 int config, unsigned long *bits);
2120 void perf_pmu__set_format(unsigned long *bits, long from, long to);
2121 int perf_pmu__format_parse(char *dir, struct list_head *head);
2122 +void perf_pmu__del_formats(struct list_head *formats);
2123
2124 struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu);
2125
2126 diff --git a/tools/testing/selftests/vm/map_hugetlb.c b/tools/testing/selftests/vm/map_hugetlb.c
2127 index 6af951900aa39..312889edb84ab 100644
2128 --- a/tools/testing/selftests/vm/map_hugetlb.c
2129 +++ b/tools/testing/selftests/vm/map_hugetlb.c
2130 @@ -83,7 +83,7 @@ int main(int argc, char **argv)
2131 }
2132
2133 if (shift)
2134 - printf("%u kB hugepages\n", 1 << shift);
2135 + printf("%u kB hugepages\n", 1 << (shift - 10));
2136 else
2137 printf("Default size hugepages\n");
2138 printf("Mapping %lu Mbytes\n", (unsigned long)length >> 20);