Magellan Linux

Contents of /trunk/kernel-alx/patches-4.19/0126-4.19.27-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3405 - (show annotations) (download)
Fri Aug 2 11:47:38 2019 UTC (4 years, 9 months ago) by niro
File size: 89447 byte(s)
-linux-4.19.27
1 diff --git a/Makefile b/Makefile
2 index b71076cecba9c..70ed9a53558a5 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 = 26
10 +SUBLEVEL = 27
11 EXTRAVERSION =
12 NAME = "People's Front"
13
14 diff --git a/arch/arc/include/asm/bitops.h b/arch/arc/include/asm/bitops.h
15 index 8da87feec59aa..99e6d8948f4ac 100644
16 --- a/arch/arc/include/asm/bitops.h
17 +++ b/arch/arc/include/asm/bitops.h
18 @@ -340,7 +340,7 @@ static inline __attribute__ ((const)) int __fls(unsigned long x)
19 /*
20 * __ffs: Similar to ffs, but zero based (0-31)
21 */
22 -static inline __attribute__ ((const)) int __ffs(unsigned long word)
23 +static inline __attribute__ ((const)) unsigned long __ffs(unsigned long word)
24 {
25 if (!word)
26 return word;
27 @@ -400,9 +400,9 @@ static inline __attribute__ ((const)) int ffs(unsigned long x)
28 /*
29 * __ffs: Similar to ffs, but zero based (0-31)
30 */
31 -static inline __attribute__ ((const)) int __ffs(unsigned long x)
32 +static inline __attribute__ ((const)) unsigned long __ffs(unsigned long x)
33 {
34 - int n;
35 + unsigned long n;
36
37 asm volatile(
38 " ffs.f %0, %1 \n" /* 0:31; 31(Z) if src 0 */
39 diff --git a/arch/arc/kernel/troubleshoot.c b/arch/arc/kernel/troubleshoot.c
40 index e8d9fb4523462..5c6663321e873 100644
41 --- a/arch/arc/kernel/troubleshoot.c
42 +++ b/arch/arc/kernel/troubleshoot.c
43 @@ -18,6 +18,8 @@
44 #include <asm/arcregs.h>
45 #include <asm/irqflags.h>
46
47 +#define ARC_PATH_MAX 256
48 +
49 /*
50 * Common routine to print scratch regs (r0-r12) or callee regs (r13-r25)
51 * -Prints 3 regs per line and a CR.
52 @@ -58,11 +60,12 @@ static void show_callee_regs(struct callee_regs *cregs)
53 print_reg_file(&(cregs->r13), 13);
54 }
55
56 -static void print_task_path_n_nm(struct task_struct *tsk, char *buf)
57 +static void print_task_path_n_nm(struct task_struct *tsk)
58 {
59 char *path_nm = NULL;
60 struct mm_struct *mm;
61 struct file *exe_file;
62 + char buf[ARC_PATH_MAX];
63
64 mm = get_task_mm(tsk);
65 if (!mm)
66 @@ -72,7 +75,7 @@ static void print_task_path_n_nm(struct task_struct *tsk, char *buf)
67 mmput(mm);
68
69 if (exe_file) {
70 - path_nm = file_path(exe_file, buf, 255);
71 + path_nm = file_path(exe_file, buf, ARC_PATH_MAX-1);
72 fput(exe_file);
73 }
74
75 @@ -80,10 +83,9 @@ done:
76 pr_info("Path: %s\n", !IS_ERR(path_nm) ? path_nm : "?");
77 }
78
79 -static void show_faulting_vma(unsigned long address, char *buf)
80 +static void show_faulting_vma(unsigned long address)
81 {
82 struct vm_area_struct *vma;
83 - char *nm = buf;
84 struct mm_struct *active_mm = current->active_mm;
85
86 /* can't use print_vma_addr() yet as it doesn't check for
87 @@ -96,8 +98,11 @@ static void show_faulting_vma(unsigned long address, char *buf)
88 * if the container VMA is not found
89 */
90 if (vma && (vma->vm_start <= address)) {
91 + char buf[ARC_PATH_MAX];
92 + char *nm = "?";
93 +
94 if (vma->vm_file) {
95 - nm = file_path(vma->vm_file, buf, PAGE_SIZE - 1);
96 + nm = file_path(vma->vm_file, buf, ARC_PATH_MAX-1);
97 if (IS_ERR(nm))
98 nm = "?";
99 }
100 @@ -173,13 +178,8 @@ void show_regs(struct pt_regs *regs)
101 {
102 struct task_struct *tsk = current;
103 struct callee_regs *cregs;
104 - char *buf;
105
106 - buf = (char *)__get_free_page(GFP_KERNEL);
107 - if (!buf)
108 - return;
109 -
110 - print_task_path_n_nm(tsk, buf);
111 + print_task_path_n_nm(tsk);
112 show_regs_print_info(KERN_INFO);
113
114 show_ecr_verbose(regs);
115 @@ -189,7 +189,7 @@ void show_regs(struct pt_regs *regs)
116 (void *)regs->blink, (void *)regs->ret);
117
118 if (user_mode(regs))
119 - show_faulting_vma(regs->ret, buf); /* faulting code, not data */
120 + show_faulting_vma(regs->ret); /* faulting code, not data */
121
122 pr_info("[STAT32]: 0x%08lx", regs->status32);
123
124 @@ -221,8 +221,6 @@ void show_regs(struct pt_regs *regs)
125 cregs = (struct callee_regs *)current->thread.callee_reg;
126 if (cregs)
127 show_callee_regs(cregs);
128 -
129 - free_page((unsigned long)buf);
130 }
131
132 void show_kernel_fault_diag(const char *str, struct pt_regs *regs,
133 diff --git a/arch/mips/bcm63xx/dev-enet.c b/arch/mips/bcm63xx/dev-enet.c
134 index 07b4c65a88a43..8e73d65f34806 100644
135 --- a/arch/mips/bcm63xx/dev-enet.c
136 +++ b/arch/mips/bcm63xx/dev-enet.c
137 @@ -70,6 +70,8 @@ static struct platform_device bcm63xx_enet_shared_device = {
138
139 static int shared_device_registered;
140
141 +static u64 enet_dmamask = DMA_BIT_MASK(32);
142 +
143 static struct resource enet0_res[] = {
144 {
145 .start = -1, /* filled at runtime */
146 @@ -99,6 +101,8 @@ static struct platform_device bcm63xx_enet0_device = {
147 .resource = enet0_res,
148 .dev = {
149 .platform_data = &enet0_pd,
150 + .dma_mask = &enet_dmamask,
151 + .coherent_dma_mask = DMA_BIT_MASK(32),
152 },
153 };
154
155 @@ -131,6 +135,8 @@ static struct platform_device bcm63xx_enet1_device = {
156 .resource = enet1_res,
157 .dev = {
158 .platform_data = &enet1_pd,
159 + .dma_mask = &enet_dmamask,
160 + .coherent_dma_mask = DMA_BIT_MASK(32),
161 },
162 };
163
164 @@ -157,6 +163,8 @@ static struct platform_device bcm63xx_enetsw_device = {
165 .resource = enetsw_res,
166 .dev = {
167 .platform_data = &enetsw_pd,
168 + .dma_mask = &enet_dmamask,
169 + .coherent_dma_mask = DMA_BIT_MASK(32),
170 },
171 };
172
173 diff --git a/arch/mips/kernel/cmpxchg.c b/arch/mips/kernel/cmpxchg.c
174 index 0b9535bc2c53d..6b2a4a902a981 100644
175 --- a/arch/mips/kernel/cmpxchg.c
176 +++ b/arch/mips/kernel/cmpxchg.c
177 @@ -54,10 +54,9 @@ unsigned long __xchg_small(volatile void *ptr, unsigned long val, unsigned int s
178 unsigned long __cmpxchg_small(volatile void *ptr, unsigned long old,
179 unsigned long new, unsigned int size)
180 {
181 - u32 mask, old32, new32, load32;
182 + u32 mask, old32, new32, load32, load;
183 volatile u32 *ptr32;
184 unsigned int shift;
185 - u8 load;
186
187 /* Check that ptr is naturally aligned */
188 WARN_ON((unsigned long)ptr & (size - 1));
189 diff --git a/arch/mips/net/ebpf_jit.c b/arch/mips/net/ebpf_jit.c
190 index 252c00985c973..9bda82ed75eb7 100644
191 --- a/arch/mips/net/ebpf_jit.c
192 +++ b/arch/mips/net/ebpf_jit.c
193 @@ -1818,7 +1818,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
194
195 /* Update the icache */
196 flush_icache_range((unsigned long)ctx.target,
197 - (unsigned long)(ctx.target + ctx.idx * sizeof(u32)));
198 + (unsigned long)&ctx.target[ctx.idx]);
199
200 if (bpf_jit_enable > 1)
201 /* Dump JIT code */
202 diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h
203 index aae77eb8491c0..4111edb3188e2 100644
204 --- a/arch/x86/include/asm/uaccess.h
205 +++ b/arch/x86/include/asm/uaccess.h
206 @@ -293,8 +293,7 @@ do { \
207 __put_user_asm(x, ptr, retval, "l", "k", "ir", errret); \
208 break; \
209 case 8: \
210 - __put_user_asm_u64((__typeof__(*ptr))(x), ptr, retval, \
211 - errret); \
212 + __put_user_asm_u64(x, ptr, retval, errret); \
213 break; \
214 default: \
215 __put_user_bad(); \
216 @@ -440,8 +439,10 @@ do { \
217 #define __put_user_nocheck(x, ptr, size) \
218 ({ \
219 int __pu_err; \
220 + __typeof__(*(ptr)) __pu_val; \
221 + __pu_val = x; \
222 __uaccess_begin(); \
223 - __put_user_size((x), (ptr), (size), __pu_err, -EFAULT); \
224 + __put_user_size(__pu_val, (ptr), (size), __pu_err, -EFAULT);\
225 __uaccess_end(); \
226 __builtin_expect(__pu_err, 0); \
227 })
228 diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c
229 index 7654febd51027..652e7ffa9b9de 100644
230 --- a/arch/x86/kernel/apic/vector.c
231 +++ b/arch/x86/kernel/apic/vector.c
232 @@ -313,14 +313,13 @@ assign_managed_vector(struct irq_data *irqd, const struct cpumask *dest)
233 struct apic_chip_data *apicd = apic_chip_data(irqd);
234 int vector, cpu;
235
236 - cpumask_and(vector_searchmask, vector_searchmask, affmsk);
237 - cpu = cpumask_first(vector_searchmask);
238 - if (cpu >= nr_cpu_ids)
239 - return -EINVAL;
240 + cpumask_and(vector_searchmask, dest, affmsk);
241 +
242 /* set_affinity might call here for nothing */
243 if (apicd->vector && cpumask_test_cpu(apicd->cpu, vector_searchmask))
244 return 0;
245 - vector = irq_matrix_alloc_managed(vector_matrix, cpu);
246 + vector = irq_matrix_alloc_managed(vector_matrix, vector_searchmask,
247 + &cpu);
248 trace_vector_alloc_managed(irqd->irq, vector, vector);
249 if (vector < 0)
250 return vector;
251 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
252 index ee8f8d70b98a2..b475419620121 100644
253 --- a/arch/x86/kvm/svm.c
254 +++ b/arch/x86/kvm/svm.c
255 @@ -3399,6 +3399,14 @@ static int nested_svm_vmexit(struct vcpu_svm *svm)
256 kvm_mmu_reset_context(&svm->vcpu);
257 kvm_mmu_load(&svm->vcpu);
258
259 + /*
260 + * Drop what we picked up for L2 via svm_complete_interrupts() so it
261 + * doesn't end up in L1.
262 + */
263 + svm->vcpu.arch.nmi_injected = false;
264 + kvm_clear_exception_queue(&svm->vcpu);
265 + kvm_clear_interrupt_queue(&svm->vcpu);
266 +
267 return 0;
268 }
269
270 @@ -4485,25 +4493,14 @@ static int avic_incomplete_ipi_interception(struct vcpu_svm *svm)
271 kvm_lapic_reg_write(apic, APIC_ICR, icrl);
272 break;
273 case AVIC_IPI_FAILURE_TARGET_NOT_RUNNING: {
274 - int i;
275 - struct kvm_vcpu *vcpu;
276 - struct kvm *kvm = svm->vcpu.kvm;
277 struct kvm_lapic *apic = svm->vcpu.arch.apic;
278
279 /*
280 - * At this point, we expect that the AVIC HW has already
281 - * set the appropriate IRR bits on the valid target
282 - * vcpus. So, we just need to kick the appropriate vcpu.
283 + * Update ICR high and low, then emulate sending IPI,
284 + * which is handled when writing APIC_ICR.
285 */
286 - kvm_for_each_vcpu(i, vcpu, kvm) {
287 - bool m = kvm_apic_match_dest(vcpu, apic,
288 - icrl & KVM_APIC_SHORT_MASK,
289 - GET_APIC_DEST_FIELD(icrh),
290 - icrl & KVM_APIC_DEST_MASK);
291 -
292 - if (m && !avic_vcpu_is_running(vcpu))
293 - kvm_vcpu_wake_up(vcpu);
294 - }
295 + kvm_lapic_reg_write(apic, APIC_ICR2, icrh);
296 + kvm_lapic_reg_write(apic, APIC_ICR, icrl);
297 break;
298 }
299 case AVIC_IPI_FAILURE_INVALID_TARGET:
300 diff --git a/arch/x86/mm/mem_encrypt_identity.c b/arch/x86/mm/mem_encrypt_identity.c
301 index 7ae36868aed25..c9faf34cbb62e 100644
302 --- a/arch/x86/mm/mem_encrypt_identity.c
303 +++ b/arch/x86/mm/mem_encrypt_identity.c
304 @@ -157,8 +157,8 @@ static void __init sme_populate_pgd(struct sme_populate_pgd_data *ppd)
305 pmd = pmd_offset(pud, ppd->vaddr);
306 if (pmd_none(*pmd)) {
307 pte = ppd->pgtable_area;
308 - memset(pte, 0, sizeof(pte) * PTRS_PER_PTE);
309 - ppd->pgtable_area += sizeof(pte) * PTRS_PER_PTE;
310 + memset(pte, 0, sizeof(*pte) * PTRS_PER_PTE);
311 + ppd->pgtable_area += sizeof(*pte) * PTRS_PER_PTE;
312 set_pmd(pmd, __pmd(PMD_FLAGS | __pa(pte)));
313 }
314
315 diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c
316 index decffb3826ece..a738af893532f 100644
317 --- a/drivers/clk/clk-versaclock5.c
318 +++ b/drivers/clk/clk-versaclock5.c
319 @@ -262,8 +262,10 @@ static int vc5_mux_set_parent(struct clk_hw *hw, u8 index)
320
321 if (vc5->clk_mux_ins == VC5_MUX_IN_XIN)
322 src = VC5_PRIM_SRC_SHDN_EN_XTAL;
323 - if (vc5->clk_mux_ins == VC5_MUX_IN_CLKIN)
324 + else if (vc5->clk_mux_ins == VC5_MUX_IN_CLKIN)
325 src = VC5_PRIM_SRC_SHDN_EN_CLKIN;
326 + else /* Invalid; should have been caught by vc5_probe() */
327 + return -EINVAL;
328 }
329
330 return regmap_update_bits(vc5->regmap, VC5_PRIM_SRC_SHDN, mask, src);
331 diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
332 index d31055ae6ec6f..5413ffaf02e23 100644
333 --- a/drivers/clk/clk.c
334 +++ b/drivers/clk/clk.c
335 @@ -2687,7 +2687,7 @@ static void clk_dump_one(struct seq_file *s, struct clk_core *c, int level)
336 seq_printf(s, "\"protect_count\": %d,", c->protect_count);
337 seq_printf(s, "\"rate\": %lu,", clk_core_get_rate(c));
338 seq_printf(s, "\"accuracy\": %lu,", clk_core_get_accuracy(c));
339 - seq_printf(s, "\"phase\": %d", clk_core_get_phase(c));
340 + seq_printf(s, "\"phase\": %d,", clk_core_get_phase(c));
341 seq_printf(s, "\"duty_cycle\": %u",
342 clk_core_get_scaled_duty_cycle(c, 100000));
343 }
344 diff --git a/drivers/clk/tegra/clk-tegra124-dfll-fcpu.c b/drivers/clk/tegra/clk-tegra124-dfll-fcpu.c
345 index 269d3595758be..edc31bb56674a 100644
346 --- a/drivers/clk/tegra/clk-tegra124-dfll-fcpu.c
347 +++ b/drivers/clk/tegra/clk-tegra124-dfll-fcpu.c
348 @@ -133,9 +133,11 @@ static int tegra124_dfll_fcpu_remove(struct platform_device *pdev)
349 struct tegra_dfll_soc_data *soc;
350
351 soc = tegra_dfll_unregister(pdev);
352 - if (IS_ERR(soc))
353 + if (IS_ERR(soc)) {
354 dev_err(&pdev->dev, "failed to unregister DFLL: %ld\n",
355 PTR_ERR(soc));
356 + return PTR_ERR(soc);
357 + }
358
359 tegra_cvb_remove_opp_table(soc->dev, soc->cvb, soc->max_freq);
360
361 diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c
362 index 16b1a9cf6cf08..743d3c983082d 100644
363 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c
364 +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c
365 @@ -32,6 +32,7 @@
366 #include "vega10_pptable.h"
367
368 #define NUM_DSPCLK_LEVELS 8
369 +#define VEGA10_ENGINECLOCK_HARDMAX 198000
370
371 static void set_hw_cap(struct pp_hwmgr *hwmgr, bool enable,
372 enum phm_platform_caps cap)
373 @@ -258,7 +259,26 @@ static int init_over_drive_limits(
374 struct pp_hwmgr *hwmgr,
375 const ATOM_Vega10_POWERPLAYTABLE *powerplay_table)
376 {
377 - hwmgr->platform_descriptor.overdriveLimit.engineClock =
378 + const ATOM_Vega10_GFXCLK_Dependency_Table *gfxclk_dep_table =
379 + (const ATOM_Vega10_GFXCLK_Dependency_Table *)
380 + (((unsigned long) powerplay_table) +
381 + le16_to_cpu(powerplay_table->usGfxclkDependencyTableOffset));
382 + bool is_acg_enabled = false;
383 + ATOM_Vega10_GFXCLK_Dependency_Record_V2 *patom_record_v2;
384 +
385 + if (gfxclk_dep_table->ucRevId == 1) {
386 + patom_record_v2 =
387 + (ATOM_Vega10_GFXCLK_Dependency_Record_V2 *)gfxclk_dep_table->entries;
388 + is_acg_enabled =
389 + (bool)patom_record_v2[gfxclk_dep_table->ucNumEntries-1].ucACGEnable;
390 + }
391 +
392 + if (powerplay_table->ulMaxODEngineClock > VEGA10_ENGINECLOCK_HARDMAX &&
393 + !is_acg_enabled)
394 + hwmgr->platform_descriptor.overdriveLimit.engineClock =
395 + VEGA10_ENGINECLOCK_HARDMAX;
396 + else
397 + hwmgr->platform_descriptor.overdriveLimit.engineClock =
398 le32_to_cpu(powerplay_table->ulMaxODEngineClock);
399 hwmgr->platform_descriptor.overdriveLimit.memoryClock =
400 le32_to_cpu(powerplay_table->ulMaxODMemoryClock);
401 diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
402 index 23397c08be11c..1d74aed7e471f 100644
403 --- a/drivers/gpu/drm/drm_atomic_helper.c
404 +++ b/drivers/gpu/drm/drm_atomic_helper.c
405 @@ -1564,6 +1564,15 @@ int drm_atomic_helper_async_check(struct drm_device *dev,
406 old_plane_state->crtc != new_plane_state->crtc)
407 return -EINVAL;
408
409 + /*
410 + * FIXME: Since prepare_fb and cleanup_fb are always called on
411 + * the new_plane_state for async updates we need to block framebuffer
412 + * changes. This prevents use of a fb that's been cleaned up and
413 + * double cleanups from occuring.
414 + */
415 + if (old_plane_state->fb != new_plane_state->fb)
416 + return -EINVAL;
417 +
418 funcs = plane->helper_private;
419 if (!funcs->atomic_async_update)
420 return -EINVAL;
421 diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
422 index bbb8126ec5c57..9acb9dfaf57e6 100644
423 --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
424 +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
425 @@ -896,7 +896,7 @@ static u32 a6xx_gmu_get_arc_level(struct device *dev, unsigned long freq)
426 np = dev_pm_opp_get_of_node(opp);
427
428 if (np) {
429 - of_property_read_u32(np, "qcom,level", &val);
430 + of_property_read_u32(np, "opp-level", &val);
431 of_node_put(np);
432 }
433
434 diff --git a/drivers/gpu/drm/msm/msm_rd.c b/drivers/gpu/drm/msm/msm_rd.c
435 index f7a0edea4705b..d4cc5ceb22d01 100644
436 --- a/drivers/gpu/drm/msm/msm_rd.c
437 +++ b/drivers/gpu/drm/msm/msm_rd.c
438 @@ -115,7 +115,9 @@ static void rd_write(struct msm_rd_state *rd, const void *buf, int sz)
439 char *fptr = &fifo->buf[fifo->head];
440 int n;
441
442 - wait_event(rd->fifo_event, circ_space(&rd->fifo) > 0);
443 + wait_event(rd->fifo_event, circ_space(&rd->fifo) > 0 || !rd->open);
444 + if (!rd->open)
445 + return;
446
447 /* Note that smp_load_acquire() is not strictly required
448 * as CIRC_SPACE_TO_END() does not access the tail more
449 @@ -213,7 +215,10 @@ out:
450 static int rd_release(struct inode *inode, struct file *file)
451 {
452 struct msm_rd_state *rd = inode->i_private;
453 +
454 rd->open = false;
455 + wake_up_all(&rd->fifo_event);
456 +
457 return 0;
458 }
459
460 diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
461 index 061d2e0d9011e..416da53767018 100644
462 --- a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
463 +++ b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
464 @@ -92,6 +92,8 @@ static void sun4i_hdmi_disable(struct drm_encoder *encoder)
465 val = readl(hdmi->base + SUN4I_HDMI_VID_CTRL_REG);
466 val &= ~SUN4I_HDMI_VID_CTRL_ENABLE;
467 writel(val, hdmi->base + SUN4I_HDMI_VID_CTRL_REG);
468 +
469 + clk_disable_unprepare(hdmi->tmds_clk);
470 }
471
472 static void sun4i_hdmi_enable(struct drm_encoder *encoder)
473 @@ -102,6 +104,8 @@ static void sun4i_hdmi_enable(struct drm_encoder *encoder)
474
475 DRM_DEBUG_DRIVER("Enabling the HDMI Output\n");
476
477 + clk_prepare_enable(hdmi->tmds_clk);
478 +
479 sun4i_hdmi_setup_avi_infoframes(hdmi, mode);
480 val |= SUN4I_HDMI_PKT_CTRL_TYPE(0, SUN4I_HDMI_PKT_AVI);
481 val |= SUN4I_HDMI_PKT_CTRL_TYPE(1, SUN4I_HDMI_PKT_END);
482 diff --git a/drivers/irqchip/irq-gic-v3-mbi.c b/drivers/irqchip/irq-gic-v3-mbi.c
483 index ad70e7c416e30..fbfa7ff6deb16 100644
484 --- a/drivers/irqchip/irq-gic-v3-mbi.c
485 +++ b/drivers/irqchip/irq-gic-v3-mbi.c
486 @@ -24,7 +24,7 @@ struct mbi_range {
487 unsigned long *bm;
488 };
489
490 -static struct mutex mbi_lock;
491 +static DEFINE_MUTEX(mbi_lock);
492 static phys_addr_t mbi_phys_base;
493 static struct mbi_range *mbi_ranges;
494 static unsigned int mbi_range_nr;
495 diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
496 index 50a5c340307b8..d4f9bfbaf0232 100644
497 --- a/drivers/mmc/core/core.c
498 +++ b/drivers/mmc/core/core.c
499 @@ -95,7 +95,7 @@ static void mmc_should_fail_request(struct mmc_host *host,
500 if (!data)
501 return;
502
503 - if (cmd->error || data->error ||
504 + if ((cmd && cmd->error) || data->error ||
505 !should_fail(&host->fail_mmc_request, data->blksz * data->blocks))
506 return;
507
508 diff --git a/drivers/mmc/host/cqhci.c b/drivers/mmc/host/cqhci.c
509 index 159270e947cf6..a8af682a91821 100644
510 --- a/drivers/mmc/host/cqhci.c
511 +++ b/drivers/mmc/host/cqhci.c
512 @@ -201,7 +201,7 @@ static int cqhci_host_alloc_tdl(struct cqhci_host *cq_host)
513 cq_host->desc_size = cq_host->slot_sz * cq_host->num_slots;
514
515 cq_host->data_size = cq_host->trans_desc_len * cq_host->mmc->max_segs *
516 - (cq_host->num_slots - 1);
517 + cq_host->mmc->cqe_qdepth;
518
519 pr_debug("%s: cqhci: desc_size: %zu data_sz: %zu slot-sz: %d\n",
520 mmc_hostname(cq_host->mmc), cq_host->desc_size, cq_host->data_size,
521 @@ -217,12 +217,21 @@ static int cqhci_host_alloc_tdl(struct cqhci_host *cq_host)
522 cq_host->desc_size,
523 &cq_host->desc_dma_base,
524 GFP_KERNEL);
525 + if (!cq_host->desc_base)
526 + return -ENOMEM;
527 +
528 cq_host->trans_desc_base = dmam_alloc_coherent(mmc_dev(cq_host->mmc),
529 cq_host->data_size,
530 &cq_host->trans_desc_dma_base,
531 GFP_KERNEL);
532 - if (!cq_host->desc_base || !cq_host->trans_desc_base)
533 + if (!cq_host->trans_desc_base) {
534 + dmam_free_coherent(mmc_dev(cq_host->mmc), cq_host->desc_size,
535 + cq_host->desc_base,
536 + cq_host->desc_dma_base);
537 + cq_host->desc_base = NULL;
538 + cq_host->desc_dma_base = 0;
539 return -ENOMEM;
540 + }
541
542 pr_debug("%s: cqhci: desc-base: 0x%p trans-base: 0x%p\n desc_dma 0x%llx trans_dma: 0x%llx\n",
543 mmc_hostname(cq_host->mmc), cq_host->desc_base, cq_host->trans_desc_base,
544 diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c
545 index 476e53d301283..67f6bd24a9d0c 100644
546 --- a/drivers/mmc/host/mmc_spi.c
547 +++ b/drivers/mmc/host/mmc_spi.c
548 @@ -1447,6 +1447,7 @@ static int mmc_spi_probe(struct spi_device *spi)
549 mmc->caps &= ~MMC_CAP_NEEDS_POLL;
550 mmc_gpiod_request_cd_irq(mmc);
551 }
552 + mmc_detect_change(mmc, 0);
553
554 if (host->pdata && host->pdata->flags & MMC_SPI_USE_RO_GPIO) {
555 has_ro = true;
556 diff --git a/drivers/mmc/host/renesas_sdhi_sys_dmac.c b/drivers/mmc/host/renesas_sdhi_sys_dmac.c
557 index 5389c48218820..c3d63edb545e3 100644
558 --- a/drivers/mmc/host/renesas_sdhi_sys_dmac.c
559 +++ b/drivers/mmc/host/renesas_sdhi_sys_dmac.c
560 @@ -68,6 +68,7 @@ static const struct renesas_sdhi_of_data of_rcar_gen2_compatible = {
561 .scc_offset = 0x0300,
562 .taps = rcar_gen2_scc_taps,
563 .taps_num = ARRAY_SIZE(rcar_gen2_scc_taps),
564 + .max_blk_count = 0xffffffff,
565 };
566
567 /* Definitions for sampling clocks */
568 diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
569 index f44e49014a440..753973dc16556 100644
570 --- a/drivers/mmc/host/sdhci-esdhc-imx.c
571 +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
572 @@ -1097,11 +1097,12 @@ static void sdhci_esdhc_imx_hwinit(struct sdhci_host *host)
573 writel(readl(host->ioaddr + SDHCI_HOST_CONTROL)
574 | ESDHC_BURST_LEN_EN_INCR,
575 host->ioaddr + SDHCI_HOST_CONTROL);
576 +
577 /*
578 - * erratum ESDHC_FLAG_ERR004536 fix for MX6Q TO1.2 and MX6DL
579 - * TO1.1, it's harmless for MX6SL
580 - */
581 - writel(readl(host->ioaddr + 0x6c) | BIT(7),
582 + * erratum ESDHC_FLAG_ERR004536 fix for MX6Q TO1.2 and MX6DL
583 + * TO1.1, it's harmless for MX6SL
584 + */
585 + writel(readl(host->ioaddr + 0x6c) & ~BIT(7),
586 host->ioaddr + 0x6c);
587
588 /* disable DLL_CTRL delay line settings */
589 diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h
590 index 5d141f79e175b..7c40a7e1fea1c 100644
591 --- a/drivers/mmc/host/tmio_mmc.h
592 +++ b/drivers/mmc/host/tmio_mmc.h
593 @@ -279,6 +279,11 @@ static inline void sd_ctrl_write32_as_16_and_16(struct tmio_mmc_host *host,
594 iowrite16(val >> 16, host->ctl + ((addr + 2) << host->bus_shift));
595 }
596
597 +static inline void sd_ctrl_write32(struct tmio_mmc_host *host, int addr, u32 val)
598 +{
599 + iowrite32(val, host->ctl + (addr << host->bus_shift));
600 +}
601 +
602 static inline void sd_ctrl_write32_rep(struct tmio_mmc_host *host, int addr,
603 const u32 *buf, int count)
604 {
605 diff --git a/drivers/mmc/host/tmio_mmc_core.c b/drivers/mmc/host/tmio_mmc_core.c
606 index 261b4d62d2b10..7d13ca9ea5347 100644
607 --- a/drivers/mmc/host/tmio_mmc_core.c
608 +++ b/drivers/mmc/host/tmio_mmc_core.c
609 @@ -46,6 +46,7 @@
610 #include <linux/regulator/consumer.h>
611 #include <linux/mmc/sdio.h>
612 #include <linux/scatterlist.h>
613 +#include <linux/sizes.h>
614 #include <linux/spinlock.h>
615 #include <linux/swiotlb.h>
616 #include <linux/workqueue.h>
617 @@ -703,7 +704,7 @@ static bool __tmio_mmc_sdcard_irq(struct tmio_mmc_host *host, int ireg,
618 return false;
619 }
620
621 -static void __tmio_mmc_sdio_irq(struct tmio_mmc_host *host)
622 +static bool __tmio_mmc_sdio_irq(struct tmio_mmc_host *host)
623 {
624 struct mmc_host *mmc = host->mmc;
625 struct tmio_mmc_data *pdata = host->pdata;
626 @@ -711,7 +712,7 @@ static void __tmio_mmc_sdio_irq(struct tmio_mmc_host *host)
627 unsigned int sdio_status;
628
629 if (!(pdata->flags & TMIO_MMC_SDIO_IRQ))
630 - return;
631 + return false;
632
633 status = sd_ctrl_read16(host, CTL_SDIO_STATUS);
634 ireg = status & TMIO_SDIO_MASK_ALL & ~host->sdio_irq_mask;
635 @@ -724,6 +725,8 @@ static void __tmio_mmc_sdio_irq(struct tmio_mmc_host *host)
636
637 if (mmc->caps & MMC_CAP_SDIO_IRQ && ireg & TMIO_SDIO_STAT_IOIRQ)
638 mmc_signal_sdio_irq(mmc);
639 +
640 + return ireg;
641 }
642
643 irqreturn_t tmio_mmc_irq(int irq, void *devid)
644 @@ -742,9 +745,10 @@ irqreturn_t tmio_mmc_irq(int irq, void *devid)
645 if (__tmio_mmc_sdcard_irq(host, ireg, status))
646 return IRQ_HANDLED;
647
648 - __tmio_mmc_sdio_irq(host);
649 + if (__tmio_mmc_sdio_irq(host))
650 + return IRQ_HANDLED;
651
652 - return IRQ_HANDLED;
653 + return IRQ_NONE;
654 }
655 EXPORT_SYMBOL_GPL(tmio_mmc_irq);
656
657 @@ -774,7 +778,10 @@ static int tmio_mmc_start_data(struct tmio_mmc_host *host,
658
659 /* Set transfer length / blocksize */
660 sd_ctrl_write16(host, CTL_SD_XFER_LEN, data->blksz);
661 - sd_ctrl_write16(host, CTL_XFER_BLK_COUNT, data->blocks);
662 + if (host->mmc->max_blk_count >= SZ_64K)
663 + sd_ctrl_write32(host, CTL_XFER_BLK_COUNT, data->blocks);
664 + else
665 + sd_ctrl_write16(host, CTL_XFER_BLK_COUNT, data->blocks);
666
667 tmio_mmc_start_dma(host, data);
668
669 diff --git a/drivers/net/ethernet/altera/altera_tse_main.c b/drivers/net/ethernet/altera/altera_tse_main.c
670 index baca8f704a459..c3c1195021a2b 100644
671 --- a/drivers/net/ethernet/altera/altera_tse_main.c
672 +++ b/drivers/net/ethernet/altera/altera_tse_main.c
673 @@ -714,8 +714,10 @@ static struct phy_device *connect_local_phy(struct net_device *dev)
674
675 phydev = phy_connect(dev, phy_id_fmt, &altera_tse_adjust_link,
676 priv->phy_iface);
677 - if (IS_ERR(phydev))
678 + if (IS_ERR(phydev)) {
679 netdev_err(dev, "Could not attach to PHY\n");
680 + phydev = NULL;
681 + }
682
683 } else {
684 int ret;
685 diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
686 index 91f48c0780734..f70cb4d3c6846 100644
687 --- a/drivers/net/ethernet/ibm/ibmveth.c
688 +++ b/drivers/net/ethernet/ibm/ibmveth.c
689 @@ -1314,7 +1314,6 @@ static int ibmveth_poll(struct napi_struct *napi, int budget)
690 unsigned long lpar_rc;
691 u16 mss = 0;
692
693 -restart_poll:
694 while (frames_processed < budget) {
695 if (!ibmveth_rxq_pending_buffer(adapter))
696 break;
697 @@ -1402,7 +1401,6 @@ restart_poll:
698 napi_reschedule(napi)) {
699 lpar_rc = h_vio_signal(adapter->vdev->unit_address,
700 VIO_IRQ_DISABLE);
701 - goto restart_poll;
702 }
703 }
704
705 diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
706 index a32ded5b4f416..42d284669b03a 100644
707 --- a/drivers/net/hyperv/hyperv_net.h
708 +++ b/drivers/net/hyperv/hyperv_net.h
709 @@ -144,6 +144,8 @@ struct hv_netvsc_packet {
710 u32 total_data_buflen;
711 };
712
713 +#define NETVSC_HASH_KEYLEN 40
714 +
715 struct netvsc_device_info {
716 unsigned char mac_adr[ETH_ALEN];
717 u32 num_chn;
718 @@ -151,6 +153,8 @@ struct netvsc_device_info {
719 u32 recv_sections;
720 u32 send_section_size;
721 u32 recv_section_size;
722 +
723 + u8 rss_key[NETVSC_HASH_KEYLEN];
724 };
725
726 enum rndis_device_state {
727 @@ -160,8 +164,6 @@ enum rndis_device_state {
728 RNDIS_DEV_DATAINITIALIZED,
729 };
730
731 -#define NETVSC_HASH_KEYLEN 40
732 -
733 struct rndis_device {
734 struct net_device *ndev;
735
736 @@ -210,7 +212,9 @@ int netvsc_recv_callback(struct net_device *net,
737 void netvsc_channel_cb(void *context);
738 int netvsc_poll(struct napi_struct *napi, int budget);
739
740 -int rndis_set_subchannel(struct net_device *ndev, struct netvsc_device *nvdev);
741 +int rndis_set_subchannel(struct net_device *ndev,
742 + struct netvsc_device *nvdev,
743 + struct netvsc_device_info *dev_info);
744 int rndis_filter_open(struct netvsc_device *nvdev);
745 int rndis_filter_close(struct netvsc_device *nvdev);
746 struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
747 diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
748 index fe01e141c8f87..1a942feab9548 100644
749 --- a/drivers/net/hyperv/netvsc.c
750 +++ b/drivers/net/hyperv/netvsc.c
751 @@ -84,7 +84,7 @@ static void netvsc_subchan_work(struct work_struct *w)
752
753 rdev = nvdev->extension;
754 if (rdev) {
755 - ret = rndis_set_subchannel(rdev->ndev, nvdev);
756 + ret = rndis_set_subchannel(rdev->ndev, nvdev, NULL);
757 if (ret == 0) {
758 netif_device_attach(rdev->ndev);
759 } else {
760 diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
761 index 1c37a821895b7..c9e2a986ccb72 100644
762 --- a/drivers/net/hyperv/netvsc_drv.c
763 +++ b/drivers/net/hyperv/netvsc_drv.c
764 @@ -856,6 +856,39 @@ static void netvsc_get_channels(struct net_device *net,
765 }
766 }
767
768 +/* Alloc struct netvsc_device_info, and initialize it from either existing
769 + * struct netvsc_device, or from default values.
770 + */
771 +static struct netvsc_device_info *netvsc_devinfo_get
772 + (struct netvsc_device *nvdev)
773 +{
774 + struct netvsc_device_info *dev_info;
775 +
776 + dev_info = kzalloc(sizeof(*dev_info), GFP_ATOMIC);
777 +
778 + if (!dev_info)
779 + return NULL;
780 +
781 + if (nvdev) {
782 + dev_info->num_chn = nvdev->num_chn;
783 + dev_info->send_sections = nvdev->send_section_cnt;
784 + dev_info->send_section_size = nvdev->send_section_size;
785 + dev_info->recv_sections = nvdev->recv_section_cnt;
786 + dev_info->recv_section_size = nvdev->recv_section_size;
787 +
788 + memcpy(dev_info->rss_key, nvdev->extension->rss_key,
789 + NETVSC_HASH_KEYLEN);
790 + } else {
791 + dev_info->num_chn = VRSS_CHANNEL_DEFAULT;
792 + dev_info->send_sections = NETVSC_DEFAULT_TX;
793 + dev_info->send_section_size = NETVSC_SEND_SECTION_SIZE;
794 + dev_info->recv_sections = NETVSC_DEFAULT_RX;
795 + dev_info->recv_section_size = NETVSC_RECV_SECTION_SIZE;
796 + }
797 +
798 + return dev_info;
799 +}
800 +
801 static int netvsc_detach(struct net_device *ndev,
802 struct netvsc_device *nvdev)
803 {
804 @@ -907,7 +940,7 @@ static int netvsc_attach(struct net_device *ndev,
805 return PTR_ERR(nvdev);
806
807 if (nvdev->num_chn > 1) {
808 - ret = rndis_set_subchannel(ndev, nvdev);
809 + ret = rndis_set_subchannel(ndev, nvdev, dev_info);
810
811 /* if unavailable, just proceed with one queue */
812 if (ret) {
813 @@ -941,7 +974,7 @@ static int netvsc_set_channels(struct net_device *net,
814 struct net_device_context *net_device_ctx = netdev_priv(net);
815 struct netvsc_device *nvdev = rtnl_dereference(net_device_ctx->nvdev);
816 unsigned int orig, count = channels->combined_count;
817 - struct netvsc_device_info device_info;
818 + struct netvsc_device_info *device_info;
819 int ret;
820
821 /* We do not support separate count for rx, tx, or other */
822 @@ -960,24 +993,26 @@ static int netvsc_set_channels(struct net_device *net,
823
824 orig = nvdev->num_chn;
825
826 - memset(&device_info, 0, sizeof(device_info));
827 - device_info.num_chn = count;
828 - device_info.send_sections = nvdev->send_section_cnt;
829 - device_info.send_section_size = nvdev->send_section_size;
830 - device_info.recv_sections = nvdev->recv_section_cnt;
831 - device_info.recv_section_size = nvdev->recv_section_size;
832 + device_info = netvsc_devinfo_get(nvdev);
833 +
834 + if (!device_info)
835 + return -ENOMEM;
836 +
837 + device_info->num_chn = count;
838
839 ret = netvsc_detach(net, nvdev);
840 if (ret)
841 - return ret;
842 + goto out;
843
844 - ret = netvsc_attach(net, &device_info);
845 + ret = netvsc_attach(net, device_info);
846 if (ret) {
847 - device_info.num_chn = orig;
848 - if (netvsc_attach(net, &device_info))
849 + device_info->num_chn = orig;
850 + if (netvsc_attach(net, device_info))
851 netdev_err(net, "restoring channel setting failed\n");
852 }
853
854 +out:
855 + kfree(device_info);
856 return ret;
857 }
858
859 @@ -1044,48 +1079,45 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
860 struct net_device *vf_netdev = rtnl_dereference(ndevctx->vf_netdev);
861 struct netvsc_device *nvdev = rtnl_dereference(ndevctx->nvdev);
862 int orig_mtu = ndev->mtu;
863 - struct netvsc_device_info device_info;
864 + struct netvsc_device_info *device_info;
865 int ret = 0;
866
867 if (!nvdev || nvdev->destroy)
868 return -ENODEV;
869
870 + device_info = netvsc_devinfo_get(nvdev);
871 +
872 + if (!device_info)
873 + return -ENOMEM;
874 +
875 /* Change MTU of underlying VF netdev first. */
876 if (vf_netdev) {
877 ret = dev_set_mtu(vf_netdev, mtu);
878 if (ret)
879 - return ret;
880 + goto out;
881 }
882
883 - memset(&device_info, 0, sizeof(device_info));
884 - device_info.num_chn = nvdev->num_chn;
885 - device_info.send_sections = nvdev->send_section_cnt;
886 - device_info.send_section_size = nvdev->send_section_size;
887 - device_info.recv_sections = nvdev->recv_section_cnt;
888 - device_info.recv_section_size = nvdev->recv_section_size;
889 -
890 ret = netvsc_detach(ndev, nvdev);
891 if (ret)
892 goto rollback_vf;
893
894 ndev->mtu = mtu;
895
896 - ret = netvsc_attach(ndev, &device_info);
897 - if (ret)
898 - goto rollback;
899 -
900 - return 0;
901 + ret = netvsc_attach(ndev, device_info);
902 + if (!ret)
903 + goto out;
904
905 -rollback:
906 /* Attempt rollback to original MTU */
907 ndev->mtu = orig_mtu;
908
909 - if (netvsc_attach(ndev, &device_info))
910 + if (netvsc_attach(ndev, device_info))
911 netdev_err(ndev, "restoring mtu failed\n");
912 rollback_vf:
913 if (vf_netdev)
914 dev_set_mtu(vf_netdev, orig_mtu);
915
916 +out:
917 + kfree(device_info);
918 return ret;
919 }
920
921 @@ -1690,7 +1722,7 @@ static int netvsc_set_ringparam(struct net_device *ndev,
922 {
923 struct net_device_context *ndevctx = netdev_priv(ndev);
924 struct netvsc_device *nvdev = rtnl_dereference(ndevctx->nvdev);
925 - struct netvsc_device_info device_info;
926 + struct netvsc_device_info *device_info;
927 struct ethtool_ringparam orig;
928 u32 new_tx, new_rx;
929 int ret = 0;
930 @@ -1710,26 +1742,29 @@ static int netvsc_set_ringparam(struct net_device *ndev,
931 new_rx == orig.rx_pending)
932 return 0; /* no change */
933
934 - memset(&device_info, 0, sizeof(device_info));
935 - device_info.num_chn = nvdev->num_chn;
936 - device_info.send_sections = new_tx;
937 - device_info.send_section_size = nvdev->send_section_size;
938 - device_info.recv_sections = new_rx;
939 - device_info.recv_section_size = nvdev->recv_section_size;
940 + device_info = netvsc_devinfo_get(nvdev);
941 +
942 + if (!device_info)
943 + return -ENOMEM;
944 +
945 + device_info->send_sections = new_tx;
946 + device_info->recv_sections = new_rx;
947
948 ret = netvsc_detach(ndev, nvdev);
949 if (ret)
950 - return ret;
951 + goto out;
952
953 - ret = netvsc_attach(ndev, &device_info);
954 + ret = netvsc_attach(ndev, device_info);
955 if (ret) {
956 - device_info.send_sections = orig.tx_pending;
957 - device_info.recv_sections = orig.rx_pending;
958 + device_info->send_sections = orig.tx_pending;
959 + device_info->recv_sections = orig.rx_pending;
960
961 - if (netvsc_attach(ndev, &device_info))
962 + if (netvsc_attach(ndev, device_info))
963 netdev_err(ndev, "restoring ringparam failed");
964 }
965
966 +out:
967 + kfree(device_info);
968 return ret;
969 }
970
971 @@ -2158,7 +2193,7 @@ static int netvsc_probe(struct hv_device *dev,
972 {
973 struct net_device *net = NULL;
974 struct net_device_context *net_device_ctx;
975 - struct netvsc_device_info device_info;
976 + struct netvsc_device_info *device_info = NULL;
977 struct netvsc_device *nvdev;
978 int ret = -ENOMEM;
979
980 @@ -2205,21 +2240,21 @@ static int netvsc_probe(struct hv_device *dev,
981 netif_set_real_num_rx_queues(net, 1);
982
983 /* Notify the netvsc driver of the new device */
984 - memset(&device_info, 0, sizeof(device_info));
985 - device_info.num_chn = VRSS_CHANNEL_DEFAULT;
986 - device_info.send_sections = NETVSC_DEFAULT_TX;
987 - device_info.send_section_size = NETVSC_SEND_SECTION_SIZE;
988 - device_info.recv_sections = NETVSC_DEFAULT_RX;
989 - device_info.recv_section_size = NETVSC_RECV_SECTION_SIZE;
990 -
991 - nvdev = rndis_filter_device_add(dev, &device_info);
992 + device_info = netvsc_devinfo_get(NULL);
993 +
994 + if (!device_info) {
995 + ret = -ENOMEM;
996 + goto devinfo_failed;
997 + }
998 +
999 + nvdev = rndis_filter_device_add(dev, device_info);
1000 if (IS_ERR(nvdev)) {
1001 ret = PTR_ERR(nvdev);
1002 netdev_err(net, "unable to add netvsc device (ret %d)\n", ret);
1003 goto rndis_failed;
1004 }
1005
1006 - memcpy(net->dev_addr, device_info.mac_adr, ETH_ALEN);
1007 + memcpy(net->dev_addr, device_info->mac_adr, ETH_ALEN);
1008
1009 /* We must get rtnl lock before scheduling nvdev->subchan_work,
1010 * otherwise netvsc_subchan_work() can get rtnl lock first and wait
1011 @@ -2257,12 +2292,16 @@ static int netvsc_probe(struct hv_device *dev,
1012
1013 list_add(&net_device_ctx->list, &netvsc_dev_list);
1014 rtnl_unlock();
1015 +
1016 + kfree(device_info);
1017 return 0;
1018
1019 register_failed:
1020 rtnl_unlock();
1021 rndis_filter_device_remove(dev, nvdev);
1022 rndis_failed:
1023 + kfree(device_info);
1024 +devinfo_failed:
1025 free_percpu(net_device_ctx->vf_stats);
1026 no_stats:
1027 hv_set_drvdata(dev, NULL);
1028 diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
1029 index 2a5209f23f296..53c6039bffb67 100644
1030 --- a/drivers/net/hyperv/rndis_filter.c
1031 +++ b/drivers/net/hyperv/rndis_filter.c
1032 @@ -715,8 +715,8 @@ cleanup:
1033 return ret;
1034 }
1035
1036 -int rndis_filter_set_rss_param(struct rndis_device *rdev,
1037 - const u8 *rss_key)
1038 +static int rndis_set_rss_param_msg(struct rndis_device *rdev,
1039 + const u8 *rss_key, u16 flag)
1040 {
1041 struct net_device *ndev = rdev->ndev;
1042 struct rndis_request *request;
1043 @@ -745,7 +745,7 @@ int rndis_filter_set_rss_param(struct rndis_device *rdev,
1044 rssp->hdr.type = NDIS_OBJECT_TYPE_RSS_PARAMETERS;
1045 rssp->hdr.rev = NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_2;
1046 rssp->hdr.size = sizeof(struct ndis_recv_scale_param);
1047 - rssp->flag = 0;
1048 + rssp->flag = flag;
1049 rssp->hashinfo = NDIS_HASH_FUNC_TOEPLITZ | NDIS_HASH_IPV4 |
1050 NDIS_HASH_TCP_IPV4 | NDIS_HASH_IPV6 |
1051 NDIS_HASH_TCP_IPV6;
1052 @@ -770,9 +770,12 @@ int rndis_filter_set_rss_param(struct rndis_device *rdev,
1053
1054 wait_for_completion(&request->wait_event);
1055 set_complete = &request->response_msg.msg.set_complete;
1056 - if (set_complete->status == RNDIS_STATUS_SUCCESS)
1057 - memcpy(rdev->rss_key, rss_key, NETVSC_HASH_KEYLEN);
1058 - else {
1059 + if (set_complete->status == RNDIS_STATUS_SUCCESS) {
1060 + if (!(flag & NDIS_RSS_PARAM_FLAG_DISABLE_RSS) &&
1061 + !(flag & NDIS_RSS_PARAM_FLAG_HASH_KEY_UNCHANGED))
1062 + memcpy(rdev->rss_key, rss_key, NETVSC_HASH_KEYLEN);
1063 +
1064 + } else {
1065 netdev_err(ndev, "Fail to set RSS parameters:0x%x\n",
1066 set_complete->status);
1067 ret = -EINVAL;
1068 @@ -783,6 +786,16 @@ cleanup:
1069 return ret;
1070 }
1071
1072 +int rndis_filter_set_rss_param(struct rndis_device *rdev,
1073 + const u8 *rss_key)
1074 +{
1075 + /* Disable RSS before change */
1076 + rndis_set_rss_param_msg(rdev, rss_key,
1077 + NDIS_RSS_PARAM_FLAG_DISABLE_RSS);
1078 +
1079 + return rndis_set_rss_param_msg(rdev, rss_key, 0);
1080 +}
1081 +
1082 static int rndis_filter_query_device_link_status(struct rndis_device *dev,
1083 struct netvsc_device *net_device)
1084 {
1085 @@ -1062,7 +1075,9 @@ static void netvsc_sc_open(struct vmbus_channel *new_sc)
1086 * This breaks overlap of processing the host message for the
1087 * new primary channel with the initialization of sub-channels.
1088 */
1089 -int rndis_set_subchannel(struct net_device *ndev, struct netvsc_device *nvdev)
1090 +int rndis_set_subchannel(struct net_device *ndev,
1091 + struct netvsc_device *nvdev,
1092 + struct netvsc_device_info *dev_info)
1093 {
1094 struct nvsp_message *init_packet = &nvdev->channel_init_pkt;
1095 struct net_device_context *ndev_ctx = netdev_priv(ndev);
1096 @@ -1103,7 +1118,10 @@ int rndis_set_subchannel(struct net_device *ndev, struct netvsc_device *nvdev)
1097 atomic_read(&nvdev->open_chn) == nvdev->num_chn);
1098
1099 /* ignore failues from setting rss parameters, still have channels */
1100 - rndis_filter_set_rss_param(rdev, netvsc_hash_key);
1101 + if (dev_info)
1102 + rndis_filter_set_rss_param(rdev, dev_info->rss_key);
1103 + else
1104 + rndis_filter_set_rss_param(rdev, netvsc_hash_key);
1105
1106 netif_set_real_num_tx_queues(ndev, nvdev->num_chn);
1107 netif_set_real_num_rx_queues(ndev, nvdev->num_chn);
1108 diff --git a/drivers/net/usb/asix_devices.c b/drivers/net/usb/asix_devices.c
1109 index b654f05b2ccd0..3d93993e74da0 100644
1110 --- a/drivers/net/usb/asix_devices.c
1111 +++ b/drivers/net/usb/asix_devices.c
1112 @@ -739,8 +739,13 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
1113 asix_read_cmd(dev, AX_CMD_STATMNGSTS_REG, 0, 0, 1, &chipcode, 0);
1114 chipcode &= AX_CHIPCODE_MASK;
1115
1116 - (chipcode == AX_AX88772_CHIPCODE) ? ax88772_hw_reset(dev, 0) :
1117 - ax88772a_hw_reset(dev, 0);
1118 + ret = (chipcode == AX_AX88772_CHIPCODE) ? ax88772_hw_reset(dev, 0) :
1119 + ax88772a_hw_reset(dev, 0);
1120 +
1121 + if (ret < 0) {
1122 + netdev_dbg(dev->net, "Failed to reset AX88772: %d\n", ret);
1123 + return ret;
1124 + }
1125
1126 /* Read PHYID register *AFTER* the PHY was reset properly */
1127 phyid = asix_get_phyid(dev);
1128 diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
1129 index 815509dbed846..da8f5ad30c719 100644
1130 --- a/drivers/nvme/host/multipath.c
1131 +++ b/drivers/nvme/host/multipath.c
1132 @@ -531,8 +531,7 @@ int nvme_mpath_init(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)
1133 timer_setup(&ctrl->anatt_timer, nvme_anatt_timeout, 0);
1134 ctrl->ana_log_size = sizeof(struct nvme_ana_rsp_hdr) +
1135 ctrl->nanagrpid * sizeof(struct nvme_ana_group_desc);
1136 - if (!(ctrl->anacap & (1 << 6)))
1137 - ctrl->ana_log_size += ctrl->max_namespaces * sizeof(__le32);
1138 + ctrl->ana_log_size += ctrl->max_namespaces * sizeof(__le32);
1139
1140 if (ctrl->ana_log_size > ctrl->max_hw_sectors << SECTOR_SHIFT) {
1141 dev_err(ctrl->device,
1142 diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
1143 index b6a28de682e85..0939a4e178fb9 100644
1144 --- a/drivers/nvme/host/rdma.c
1145 +++ b/drivers/nvme/host/rdma.c
1146 @@ -1672,18 +1672,28 @@ static enum blk_eh_timer_return
1147 nvme_rdma_timeout(struct request *rq, bool reserved)
1148 {
1149 struct nvme_rdma_request *req = blk_mq_rq_to_pdu(rq);
1150 + struct nvme_rdma_queue *queue = req->queue;
1151 + struct nvme_rdma_ctrl *ctrl = queue->ctrl;
1152
1153 - dev_warn(req->queue->ctrl->ctrl.device,
1154 - "I/O %d QID %d timeout, reset controller\n",
1155 - rq->tag, nvme_rdma_queue_idx(req->queue));
1156 + dev_warn(ctrl->ctrl.device, "I/O %d QID %d timeout\n",
1157 + rq->tag, nvme_rdma_queue_idx(queue));
1158
1159 - /* queue error recovery */
1160 - nvme_rdma_error_recovery(req->queue->ctrl);
1161 + if (ctrl->ctrl.state != NVME_CTRL_LIVE) {
1162 + /*
1163 + * Teardown immediately if controller times out while starting
1164 + * or we are already started error recovery. all outstanding
1165 + * requests are completed on shutdown, so we return BLK_EH_DONE.
1166 + */
1167 + flush_work(&ctrl->err_work);
1168 + nvme_rdma_teardown_io_queues(ctrl, false);
1169 + nvme_rdma_teardown_admin_queue(ctrl, false);
1170 + return BLK_EH_DONE;
1171 + }
1172
1173 - /* fail with DNR on cmd timeout */
1174 - nvme_req(rq)->status = NVME_SC_ABORT_REQ | NVME_SC_DNR;
1175 + dev_warn(ctrl->ctrl.device, "starting error recovery\n");
1176 + nvme_rdma_error_recovery(ctrl);
1177
1178 - return BLK_EH_DONE;
1179 + return BLK_EH_RESET_TIMER;
1180 }
1181
1182 static blk_status_t nvme_rdma_queue_rq(struct blk_mq_hw_ctx *hctx,
1183 diff --git a/drivers/phy/qualcomm/phy-ath79-usb.c b/drivers/phy/qualcomm/phy-ath79-usb.c
1184 index 6fd6e07ab345f..09a77e556eceb 100644
1185 --- a/drivers/phy/qualcomm/phy-ath79-usb.c
1186 +++ b/drivers/phy/qualcomm/phy-ath79-usb.c
1187 @@ -31,7 +31,7 @@ static int ath79_usb_phy_power_on(struct phy *phy)
1188
1189 err = reset_control_deassert(priv->reset);
1190 if (err && priv->no_suspend_override)
1191 - reset_control_assert(priv->no_suspend_override);
1192 + reset_control_deassert(priv->no_suspend_override);
1193
1194 return err;
1195 }
1196 @@ -69,7 +69,7 @@ static int ath79_usb_phy_probe(struct platform_device *pdev)
1197 if (!priv)
1198 return -ENOMEM;
1199
1200 - priv->reset = devm_reset_control_get(&pdev->dev, "usb-phy");
1201 + priv->reset = devm_reset_control_get(&pdev->dev, "phy");
1202 if (IS_ERR(priv->reset))
1203 return PTR_ERR(priv->reset);
1204
1205 diff --git a/drivers/scsi/csiostor/csio_attr.c b/drivers/scsi/csiostor/csio_attr.c
1206 index 8a004036e3d72..9bd2bd8dc2be2 100644
1207 --- a/drivers/scsi/csiostor/csio_attr.c
1208 +++ b/drivers/scsi/csiostor/csio_attr.c
1209 @@ -594,12 +594,12 @@ csio_vport_create(struct fc_vport *fc_vport, bool disable)
1210 }
1211
1212 fc_vport_set_state(fc_vport, FC_VPORT_INITIALIZING);
1213 + ln->fc_vport = fc_vport;
1214
1215 if (csio_fcoe_alloc_vnp(hw, ln))
1216 goto error;
1217
1218 *(struct csio_lnode **)fc_vport->dd_data = ln;
1219 - ln->fc_vport = fc_vport;
1220 if (!fc_vport->node_name)
1221 fc_vport->node_name = wwn_to_u64(csio_ln_wwnn(ln));
1222 if (!fc_vport->port_name)
1223 diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c
1224 index fadc99cb60df9..a1551ab336165 100644
1225 --- a/drivers/scsi/libsas/sas_expander.c
1226 +++ b/drivers/scsi/libsas/sas_expander.c
1227 @@ -829,6 +829,7 @@ static struct domain_device *sas_ex_discover_end_dev(
1228 rphy = sas_end_device_alloc(phy->port);
1229 if (!rphy)
1230 goto out_free;
1231 + rphy->identify.phy_identifier = phy_id;
1232
1233 child->rphy = rphy;
1234 get_device(&rphy->dev);
1235 @@ -856,6 +857,7 @@ static struct domain_device *sas_ex_discover_end_dev(
1236
1237 child->rphy = rphy;
1238 get_device(&rphy->dev);
1239 + rphy->identify.phy_identifier = phy_id;
1240 sas_fill_in_rphy(child, rphy);
1241
1242 list_add_tail(&child->disco_list_node, &parent->port->disco_list);
1243 diff --git a/drivers/scsi/lpfc/lpfc_nvme.c b/drivers/scsi/lpfc/lpfc_nvme.c
1244 index 918ae18ef8a82..ca62117a2d131 100644
1245 --- a/drivers/scsi/lpfc/lpfc_nvme.c
1246 +++ b/drivers/scsi/lpfc/lpfc_nvme.c
1247 @@ -297,7 +297,8 @@ lpfc_nvme_localport_delete(struct nvme_fc_local_port *localport)
1248 lport);
1249
1250 /* release any threads waiting for the unreg to complete */
1251 - complete(&lport->lport_unreg_done);
1252 + if (lport->vport->localport)
1253 + complete(lport->lport_unreg_cmp);
1254 }
1255
1256 /* lpfc_nvme_remoteport_delete
1257 @@ -2556,7 +2557,8 @@ lpfc_nvme_create_localport(struct lpfc_vport *vport)
1258 */
1259 void
1260 lpfc_nvme_lport_unreg_wait(struct lpfc_vport *vport,
1261 - struct lpfc_nvme_lport *lport)
1262 + struct lpfc_nvme_lport *lport,
1263 + struct completion *lport_unreg_cmp)
1264 {
1265 #if (IS_ENABLED(CONFIG_NVME_FC))
1266 u32 wait_tmo;
1267 @@ -2568,8 +2570,7 @@ lpfc_nvme_lport_unreg_wait(struct lpfc_vport *vport,
1268 */
1269 wait_tmo = msecs_to_jiffies(LPFC_NVME_WAIT_TMO * 1000);
1270 while (true) {
1271 - ret = wait_for_completion_timeout(&lport->lport_unreg_done,
1272 - wait_tmo);
1273 + ret = wait_for_completion_timeout(lport_unreg_cmp, wait_tmo);
1274 if (unlikely(!ret)) {
1275 lpfc_printf_vlog(vport, KERN_ERR, LOG_NVME_IOERR,
1276 "6176 Lport %p Localport %p wait "
1277 @@ -2603,12 +2604,12 @@ lpfc_nvme_destroy_localport(struct lpfc_vport *vport)
1278 struct lpfc_nvme_lport *lport;
1279 struct lpfc_nvme_ctrl_stat *cstat;
1280 int ret;
1281 + DECLARE_COMPLETION_ONSTACK(lport_unreg_cmp);
1282
1283 if (vport->nvmei_support == 0)
1284 return;
1285
1286 localport = vport->localport;
1287 - vport->localport = NULL;
1288 lport = (struct lpfc_nvme_lport *)localport->private;
1289 cstat = lport->cstat;
1290
1291 @@ -2619,13 +2620,14 @@ lpfc_nvme_destroy_localport(struct lpfc_vport *vport)
1292 /* lport's rport list is clear. Unregister
1293 * lport and release resources.
1294 */
1295 - init_completion(&lport->lport_unreg_done);
1296 + lport->lport_unreg_cmp = &lport_unreg_cmp;
1297 ret = nvme_fc_unregister_localport(localport);
1298
1299 /* Wait for completion. This either blocks
1300 * indefinitely or succeeds
1301 */
1302 - lpfc_nvme_lport_unreg_wait(vport, lport);
1303 + lpfc_nvme_lport_unreg_wait(vport, lport, &lport_unreg_cmp);
1304 + vport->localport = NULL;
1305 kfree(cstat);
1306
1307 /* Regardless of the unregister upcall response, clear
1308 diff --git a/drivers/scsi/lpfc/lpfc_nvme.h b/drivers/scsi/lpfc/lpfc_nvme.h
1309 index cfd4719be25c3..b234d02989942 100644
1310 --- a/drivers/scsi/lpfc/lpfc_nvme.h
1311 +++ b/drivers/scsi/lpfc/lpfc_nvme.h
1312 @@ -50,7 +50,7 @@ struct lpfc_nvme_ctrl_stat {
1313 /* Declare nvme-based local and remote port definitions. */
1314 struct lpfc_nvme_lport {
1315 struct lpfc_vport *vport;
1316 - struct completion lport_unreg_done;
1317 + struct completion *lport_unreg_cmp;
1318 /* Add stats counters here */
1319 struct lpfc_nvme_ctrl_stat *cstat;
1320 atomic_t fc4NvmeLsRequests;
1321 diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c
1322 index b766afe10d3d7..e2575c8ec93e8 100644
1323 --- a/drivers/scsi/lpfc/lpfc_nvmet.c
1324 +++ b/drivers/scsi/lpfc/lpfc_nvmet.c
1325 @@ -1003,7 +1003,8 @@ lpfc_nvmet_targetport_delete(struct nvmet_fc_target_port *targetport)
1326 struct lpfc_nvmet_tgtport *tport = targetport->private;
1327
1328 /* release any threads waiting for the unreg to complete */
1329 - complete(&tport->tport_unreg_done);
1330 + if (tport->phba->targetport)
1331 + complete(tport->tport_unreg_cmp);
1332 }
1333
1334 static void
1335 @@ -1700,6 +1701,7 @@ lpfc_nvmet_destroy_targetport(struct lpfc_hba *phba)
1336 struct lpfc_nvmet_tgtport *tgtp;
1337 struct lpfc_queue *wq;
1338 uint32_t qidx;
1339 + DECLARE_COMPLETION_ONSTACK(tport_unreg_cmp);
1340
1341 if (phba->nvmet_support == 0)
1342 return;
1343 @@ -1709,9 +1711,9 @@ lpfc_nvmet_destroy_targetport(struct lpfc_hba *phba)
1344 wq = phba->sli4_hba.nvme_wq[qidx];
1345 lpfc_nvmet_wqfull_flush(phba, wq, NULL);
1346 }
1347 - init_completion(&tgtp->tport_unreg_done);
1348 + tgtp->tport_unreg_cmp = &tport_unreg_cmp;
1349 nvmet_fc_unregister_targetport(phba->targetport);
1350 - wait_for_completion_timeout(&tgtp->tport_unreg_done, 5);
1351 + wait_for_completion_timeout(&tport_unreg_cmp, 5);
1352 lpfc_nvmet_cleanup_io_context(phba);
1353 }
1354 phba->targetport = NULL;
1355 diff --git a/drivers/scsi/lpfc/lpfc_nvmet.h b/drivers/scsi/lpfc/lpfc_nvmet.h
1356 index 1aaff63f1f419..0ec1082ce7ef6 100644
1357 --- a/drivers/scsi/lpfc/lpfc_nvmet.h
1358 +++ b/drivers/scsi/lpfc/lpfc_nvmet.h
1359 @@ -34,7 +34,7 @@
1360 /* Used for NVME Target */
1361 struct lpfc_nvmet_tgtport {
1362 struct lpfc_hba *phba;
1363 - struct completion tport_unreg_done;
1364 + struct completion *tport_unreg_cmp;
1365
1366 /* Stats counters - lpfc_nvmet_unsol_ls_buffer */
1367 atomic_t rcv_ls_req_in;
1368 diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
1369 index 99073325b0c00..45c7f829e3872 100644
1370 --- a/drivers/staging/android/ion/ion.c
1371 +++ b/drivers/staging/android/ion/ion.c
1372 @@ -237,10 +237,10 @@ static void ion_dma_buf_detatch(struct dma_buf *dmabuf,
1373 struct ion_dma_buf_attachment *a = attachment->priv;
1374 struct ion_buffer *buffer = dmabuf->priv;
1375
1376 - free_duped_table(a->table);
1377 mutex_lock(&buffer->lock);
1378 list_del(&a->list);
1379 mutex_unlock(&buffer->lock);
1380 + free_duped_table(a->table);
1381
1382 kfree(a);
1383 }
1384 diff --git a/drivers/staging/rtl8723bs/include/ieee80211.h b/drivers/staging/rtl8723bs/include/ieee80211.h
1385 index bcc8dfa8e6728..9efb4dcb9d3a8 100644
1386 --- a/drivers/staging/rtl8723bs/include/ieee80211.h
1387 +++ b/drivers/staging/rtl8723bs/include/ieee80211.h
1388 @@ -850,18 +850,18 @@ enum ieee80211_state {
1389 #define IP_FMT "%pI4"
1390 #define IP_ARG(x) (x)
1391
1392 -extern __inline int is_multicast_mac_addr(const u8 *addr)
1393 +static inline int is_multicast_mac_addr(const u8 *addr)
1394 {
1395 return ((addr[0] != 0xff) && (0x01 & addr[0]));
1396 }
1397
1398 -extern __inline int is_broadcast_mac_addr(const u8 *addr)
1399 +static inline int is_broadcast_mac_addr(const u8 *addr)
1400 {
1401 return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && \
1402 (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
1403 }
1404
1405 -extern __inline int is_zero_mac_addr(const u8 *addr)
1406 +static inline int is_zero_mac_addr(const u8 *addr)
1407 {
1408 return ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && \
1409 (addr[3] == 0x00) && (addr[4] == 0x00) && (addr[5] == 0x00));
1410 diff --git a/drivers/thermal/int340x_thermal/processor_thermal_device.c b/drivers/thermal/int340x_thermal/processor_thermal_device.c
1411 index 284cf2c5a8fd9..8e1cf4d789be1 100644
1412 --- a/drivers/thermal/int340x_thermal/processor_thermal_device.c
1413 +++ b/drivers/thermal/int340x_thermal/processor_thermal_device.c
1414 @@ -84,7 +84,12 @@ static ssize_t power_limit_##index##_##suffix##_show(struct device *dev, \
1415 struct pci_dev *pci_dev; \
1416 struct platform_device *pdev; \
1417 struct proc_thermal_device *proc_dev; \
1418 -\
1419 + \
1420 + if (proc_thermal_emum_mode == PROC_THERMAL_NONE) { \
1421 + dev_warn(dev, "Attempted to get power limit before device was initialized!\n"); \
1422 + return 0; \
1423 + } \
1424 + \
1425 if (proc_thermal_emum_mode == PROC_THERMAL_PLATFORM_DEV) { \
1426 pdev = to_platform_device(dev); \
1427 proc_dev = platform_get_drvdata(pdev); \
1428 @@ -298,11 +303,6 @@ static int proc_thermal_add(struct device *dev,
1429 *priv = proc_priv;
1430
1431 ret = proc_thermal_read_ppcc(proc_priv);
1432 - if (!ret) {
1433 - ret = sysfs_create_group(&dev->kobj,
1434 - &power_limit_attribute_group);
1435 -
1436 - }
1437 if (ret)
1438 return ret;
1439
1440 @@ -316,8 +316,7 @@ static int proc_thermal_add(struct device *dev,
1441
1442 proc_priv->int340x_zone = int340x_thermal_zone_add(adev, ops);
1443 if (IS_ERR(proc_priv->int340x_zone)) {
1444 - ret = PTR_ERR(proc_priv->int340x_zone);
1445 - goto remove_group;
1446 + return PTR_ERR(proc_priv->int340x_zone);
1447 } else
1448 ret = 0;
1449
1450 @@ -331,9 +330,6 @@ static int proc_thermal_add(struct device *dev,
1451
1452 remove_zone:
1453 int340x_thermal_zone_remove(proc_priv->int340x_zone);
1454 -remove_group:
1455 - sysfs_remove_group(&proc_priv->dev->kobj,
1456 - &power_limit_attribute_group);
1457
1458 return ret;
1459 }
1460 @@ -364,7 +360,10 @@ static int int3401_add(struct platform_device *pdev)
1461 platform_set_drvdata(pdev, proc_priv);
1462 proc_thermal_emum_mode = PROC_THERMAL_PLATFORM_DEV;
1463
1464 - return 0;
1465 + dev_info(&pdev->dev, "Creating sysfs group for PROC_THERMAL_PLATFORM_DEV\n");
1466 +
1467 + return sysfs_create_group(&pdev->dev.kobj,
1468 + &power_limit_attribute_group);
1469 }
1470
1471 static int int3401_remove(struct platform_device *pdev)
1472 @@ -423,7 +422,7 @@ static int proc_thermal_pci_probe(struct pci_dev *pdev,
1473 proc_priv->soc_dts = intel_soc_dts_iosf_init(
1474 INTEL_SOC_DTS_INTERRUPT_MSI, 2, 0);
1475
1476 - if (proc_priv->soc_dts && pdev->irq) {
1477 + if (!IS_ERR(proc_priv->soc_dts) && pdev->irq) {
1478 ret = pci_enable_msi(pdev);
1479 if (!ret) {
1480 ret = request_threaded_irq(pdev->irq, NULL,
1481 @@ -441,7 +440,10 @@ static int proc_thermal_pci_probe(struct pci_dev *pdev,
1482 dev_err(&pdev->dev, "No auxiliary DTSs enabled\n");
1483 }
1484
1485 - return 0;
1486 + dev_info(&pdev->dev, "Creating sysfs group for PROC_THERMAL_PCI\n");
1487 +
1488 + return sysfs_create_group(&pdev->dev.kobj,
1489 + &power_limit_attribute_group);
1490 }
1491
1492 static void proc_thermal_pci_remove(struct pci_dev *pdev)
1493 diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c
1494 index 7d030c2e42ffd..50b6746a8b5d7 100644
1495 --- a/drivers/tty/serial/fsl_lpuart.c
1496 +++ b/drivers/tty/serial/fsl_lpuart.c
1497 @@ -1695,7 +1695,7 @@ lpuart32_set_termios(struct uart_port *port, struct ktermios *termios,
1498 }
1499
1500 /* ask the core to calculate the divisor */
1501 - baud = uart_get_baud_rate(port, termios, old, 50, port->uartclk / 16);
1502 + baud = uart_get_baud_rate(port, termios, old, 50, port->uartclk / 4);
1503
1504 spin_lock_irqsave(&sport->port.lock, flags);
1505
1506 diff --git a/drivers/tty/serial/qcom_geni_serial.c b/drivers/tty/serial/qcom_geni_serial.c
1507 index 1515074e18fb6..35d1f6fa0e3c3 100644
1508 --- a/drivers/tty/serial/qcom_geni_serial.c
1509 +++ b/drivers/tty/serial/qcom_geni_serial.c
1510 @@ -221,7 +221,7 @@ static unsigned int qcom_geni_serial_get_mctrl(struct uart_port *uport)
1511 unsigned int mctrl = TIOCM_DSR | TIOCM_CAR;
1512 u32 geni_ios;
1513
1514 - if (uart_console(uport) || !uart_cts_enabled(uport)) {
1515 + if (uart_console(uport)) {
1516 mctrl |= TIOCM_CTS;
1517 } else {
1518 geni_ios = readl_relaxed(uport->membase + SE_GENI_IOS);
1519 @@ -237,7 +237,7 @@ static void qcom_geni_serial_set_mctrl(struct uart_port *uport,
1520 {
1521 u32 uart_manual_rfr = 0;
1522
1523 - if (uart_console(uport) || !uart_cts_enabled(uport))
1524 + if (uart_console(uport))
1525 return;
1526
1527 if (!(mctrl & TIOCM_RTS))
1528 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
1529 index 0db90f6f4aa81..700fb626ad03b 100644
1530 --- a/drivers/usb/dwc3/gadget.c
1531 +++ b/drivers/usb/dwc3/gadget.c
1532 @@ -1864,6 +1864,7 @@ static int __dwc3_gadget_start(struct dwc3 *dwc)
1533
1534 /* begin to receive SETUP packets */
1535 dwc->ep0state = EP0_SETUP_PHASE;
1536 + dwc->link_state = DWC3_LINK_STATE_SS_DIS;
1537 dwc3_ep0_out_start(dwc);
1538
1539 dwc3_gadget_enable_irq(dwc);
1540 @@ -3274,6 +3275,8 @@ int dwc3_gadget_suspend(struct dwc3 *dwc)
1541 dwc3_disconnect_gadget(dwc);
1542 __dwc3_gadget_stop(dwc);
1543
1544 + synchronize_irq(dwc->irq_gadget);
1545 +
1546 return 0;
1547 }
1548
1549 diff --git a/drivers/usb/gadget/function/f_sourcesink.c b/drivers/usb/gadget/function/f_sourcesink.c
1550 index 9cdef108fb1b3..ed68a4860b7d8 100644
1551 --- a/drivers/usb/gadget/function/f_sourcesink.c
1552 +++ b/drivers/usb/gadget/function/f_sourcesink.c
1553 @@ -838,7 +838,7 @@ static struct usb_function *source_sink_alloc_func(
1554
1555 ss = kzalloc(sizeof(*ss), GFP_KERNEL);
1556 if (!ss)
1557 - return NULL;
1558 + return ERR_PTR(-ENOMEM);
1559
1560 ss_opts = container_of(fi, struct f_ss_opts, func_inst);
1561
1562 diff --git a/fs/direct-io.c b/fs/direct-io.c
1563 index 1991460360930..1abb7634b2d58 100644
1564 --- a/fs/direct-io.c
1565 +++ b/fs/direct-io.c
1566 @@ -679,6 +679,7 @@ static int get_more_blocks(struct dio *dio, struct dio_submit *sdio,
1567 unsigned long fs_count; /* Number of filesystem-sized blocks */
1568 int create;
1569 unsigned int i_blkbits = sdio->blkbits + sdio->blkfactor;
1570 + loff_t i_size;
1571
1572 /*
1573 * If there was a memory error and we've overwritten all the
1574 @@ -708,8 +709,8 @@ static int get_more_blocks(struct dio *dio, struct dio_submit *sdio,
1575 */
1576 create = dio->op == REQ_OP_WRITE;
1577 if (dio->flags & DIO_SKIP_HOLES) {
1578 - if (fs_startblk <= ((i_size_read(dio->inode) - 1) >>
1579 - i_blkbits))
1580 + i_size = i_size_read(dio->inode);
1581 + if (i_size && fs_startblk <= (i_size - 1) >> i_blkbits)
1582 create = 0;
1583 }
1584
1585 diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
1586 index 471d863958bc2..82ce6d4f7e314 100644
1587 --- a/fs/fs-writeback.c
1588 +++ b/fs/fs-writeback.c
1589 @@ -331,11 +331,22 @@ struct inode_switch_wbs_context {
1590 struct work_struct work;
1591 };
1592
1593 +static void bdi_down_write_wb_switch_rwsem(struct backing_dev_info *bdi)
1594 +{
1595 + down_write(&bdi->wb_switch_rwsem);
1596 +}
1597 +
1598 +static void bdi_up_write_wb_switch_rwsem(struct backing_dev_info *bdi)
1599 +{
1600 + up_write(&bdi->wb_switch_rwsem);
1601 +}
1602 +
1603 static void inode_switch_wbs_work_fn(struct work_struct *work)
1604 {
1605 struct inode_switch_wbs_context *isw =
1606 container_of(work, struct inode_switch_wbs_context, work);
1607 struct inode *inode = isw->inode;
1608 + struct backing_dev_info *bdi = inode_to_bdi(inode);
1609 struct address_space *mapping = inode->i_mapping;
1610 struct bdi_writeback *old_wb = inode->i_wb;
1611 struct bdi_writeback *new_wb = isw->new_wb;
1612 @@ -343,6 +354,12 @@ static void inode_switch_wbs_work_fn(struct work_struct *work)
1613 bool switched = false;
1614 void **slot;
1615
1616 + /*
1617 + * If @inode switches cgwb membership while sync_inodes_sb() is
1618 + * being issued, sync_inodes_sb() might miss it. Synchronize.
1619 + */
1620 + down_read(&bdi->wb_switch_rwsem);
1621 +
1622 /*
1623 * By the time control reaches here, RCU grace period has passed
1624 * since I_WB_SWITCH assertion and all wb stat update transactions
1625 @@ -435,6 +452,8 @@ skip_switch:
1626 spin_unlock(&new_wb->list_lock);
1627 spin_unlock(&old_wb->list_lock);
1628
1629 + up_read(&bdi->wb_switch_rwsem);
1630 +
1631 if (switched) {
1632 wb_wakeup(new_wb);
1633 wb_put(old_wb);
1634 @@ -475,9 +494,18 @@ static void inode_switch_wbs(struct inode *inode, int new_wb_id)
1635 if (inode->i_state & I_WB_SWITCH)
1636 return;
1637
1638 + /*
1639 + * Avoid starting new switches while sync_inodes_sb() is in
1640 + * progress. Otherwise, if the down_write protected issue path
1641 + * blocks heavily, we might end up starting a large number of
1642 + * switches which will block on the rwsem.
1643 + */
1644 + if (!down_read_trylock(&bdi->wb_switch_rwsem))
1645 + return;
1646 +
1647 isw = kzalloc(sizeof(*isw), GFP_ATOMIC);
1648 if (!isw)
1649 - return;
1650 + goto out_unlock;
1651
1652 /* find and pin the new wb */
1653 rcu_read_lock();
1654 @@ -511,12 +539,14 @@ static void inode_switch_wbs(struct inode *inode, int new_wb_id)
1655 * Let's continue after I_WB_SWITCH is guaranteed to be visible.
1656 */
1657 call_rcu(&isw->rcu_head, inode_switch_wbs_rcu_fn);
1658 - return;
1659 + goto out_unlock;
1660
1661 out_free:
1662 if (isw->new_wb)
1663 wb_put(isw->new_wb);
1664 kfree(isw);
1665 +out_unlock:
1666 + up_read(&bdi->wb_switch_rwsem);
1667 }
1668
1669 /**
1670 @@ -894,6 +924,9 @@ fs_initcall(cgroup_writeback_init);
1671
1672 #else /* CONFIG_CGROUP_WRITEBACK */
1673
1674 +static void bdi_down_write_wb_switch_rwsem(struct backing_dev_info *bdi) { }
1675 +static void bdi_up_write_wb_switch_rwsem(struct backing_dev_info *bdi) { }
1676 +
1677 static struct bdi_writeback *
1678 locked_inode_to_wb_and_lock_list(struct inode *inode)
1679 __releases(&inode->i_lock)
1680 @@ -2420,8 +2453,11 @@ void sync_inodes_sb(struct super_block *sb)
1681 return;
1682 WARN_ON(!rwsem_is_locked(&sb->s_umount));
1683
1684 + /* protect against inode wb switch, see inode_switch_wbs_work_fn() */
1685 + bdi_down_write_wb_switch_rwsem(bdi);
1686 bdi_split_work_to_wbs(bdi, &work, false);
1687 wb_wait_for_completion(bdi, &done);
1688 + bdi_up_write_wb_switch_rwsem(bdi);
1689
1690 wait_sb_inodes(sb);
1691 }
1692 diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
1693 index 32920a10100e2..a7fa037b876b7 100644
1694 --- a/fs/hugetlbfs/inode.c
1695 +++ b/fs/hugetlbfs/inode.c
1696 @@ -859,6 +859,18 @@ static int hugetlbfs_migrate_page(struct address_space *mapping,
1697 rc = migrate_huge_page_move_mapping(mapping, newpage, page);
1698 if (rc != MIGRATEPAGE_SUCCESS)
1699 return rc;
1700 +
1701 + /*
1702 + * page_private is subpool pointer in hugetlb pages. Transfer to
1703 + * new page. PagePrivate is not associated with page_private for
1704 + * hugetlb pages and can not be set here as only page_huge_active
1705 + * pages can be migrated.
1706 + */
1707 + if (page_private(page)) {
1708 + set_page_private(newpage, page_private(page));
1709 + set_page_private(page, 0);
1710 + }
1711 +
1712 if (mode != MIGRATE_SYNC_NO_COPY)
1713 migrate_page_copy(newpage, page);
1714 else
1715 diff --git a/include/linux/backing-dev-defs.h b/include/linux/backing-dev-defs.h
1716 index c311571355981..07e02d6df5ad9 100644
1717 --- a/include/linux/backing-dev-defs.h
1718 +++ b/include/linux/backing-dev-defs.h
1719 @@ -190,6 +190,7 @@ struct backing_dev_info {
1720 struct radix_tree_root cgwb_tree; /* radix tree of active cgroup wbs */
1721 struct rb_root cgwb_congested_tree; /* their congested states */
1722 struct mutex cgwb_release_mutex; /* protect shutdown of wb structs */
1723 + struct rw_semaphore wb_switch_rwsem; /* no cgwb switch while syncing */
1724 #else
1725 struct bdi_writeback_congested *wb_congested;
1726 #endif
1727 diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h
1728 index 6756fea18b69f..e44746de95cdf 100644
1729 --- a/include/linux/if_arp.h
1730 +++ b/include/linux/if_arp.h
1731 @@ -54,6 +54,7 @@ static inline bool dev_is_mac_header_xmit(const struct net_device *dev)
1732 case ARPHRD_IPGRE:
1733 case ARPHRD_VOID:
1734 case ARPHRD_NONE:
1735 + case ARPHRD_RAWIP:
1736 return false;
1737 default:
1738 return true;
1739 diff --git a/include/linux/irq.h b/include/linux/irq.h
1740 index 201de12a99571..c9bffda04a450 100644
1741 --- a/include/linux/irq.h
1742 +++ b/include/linux/irq.h
1743 @@ -1151,7 +1151,8 @@ void irq_matrix_offline(struct irq_matrix *m);
1744 void irq_matrix_assign_system(struct irq_matrix *m, unsigned int bit, bool replace);
1745 int irq_matrix_reserve_managed(struct irq_matrix *m, const struct cpumask *msk);
1746 void irq_matrix_remove_managed(struct irq_matrix *m, const struct cpumask *msk);
1747 -int irq_matrix_alloc_managed(struct irq_matrix *m, unsigned int cpu);
1748 +int irq_matrix_alloc_managed(struct irq_matrix *m, const struct cpumask *msk,
1749 + unsigned int *mapped_cpu);
1750 void irq_matrix_reserve(struct irq_matrix *m);
1751 void irq_matrix_remove_reserved(struct irq_matrix *m);
1752 int irq_matrix_alloc(struct irq_matrix *m, const struct cpumask *msk,
1753 diff --git a/kernel/exit.c b/kernel/exit.c
1754 index 55b4fa6d01ebd..d607e23fd0c3e 100644
1755 --- a/kernel/exit.c
1756 +++ b/kernel/exit.c
1757 @@ -307,7 +307,7 @@ void rcuwait_wake_up(struct rcuwait *w)
1758 * MB (A) MB (B)
1759 * [L] cond [L] tsk
1760 */
1761 - smp_rmb(); /* (B) */
1762 + smp_mb(); /* (B) */
1763
1764 /*
1765 * Avoid using task_rcu_dereference() magic as long as we are careful,
1766 diff --git a/kernel/futex.c b/kernel/futex.c
1767 index d7c465fd687c6..c5fca746edc46 100644
1768 --- a/kernel/futex.c
1769 +++ b/kernel/futex.c
1770 @@ -1444,11 +1444,7 @@ static void mark_wake_futex(struct wake_q_head *wake_q, struct futex_q *q)
1771 if (WARN(q->pi_state || q->rt_waiter, "refusing to wake PI futex\n"))
1772 return;
1773
1774 - /*
1775 - * Queue the task for later wakeup for after we've released
1776 - * the hb->lock. wake_q_add() grabs reference to p.
1777 - */
1778 - wake_q_add(wake_q, p);
1779 + get_task_struct(p);
1780 __unqueue_futex(q);
1781 /*
1782 * The waiting task can free the futex_q as soon as q->lock_ptr = NULL
1783 @@ -1458,6 +1454,13 @@ static void mark_wake_futex(struct wake_q_head *wake_q, struct futex_q *q)
1784 * plist_del in __unqueue_futex().
1785 */
1786 smp_store_release(&q->lock_ptr, NULL);
1787 +
1788 + /*
1789 + * Queue the task for later wakeup for after we've released
1790 + * the hb->lock. wake_q_add() grabs reference to p.
1791 + */
1792 + wake_q_add(wake_q, p);
1793 + put_task_struct(p);
1794 }
1795
1796 /*
1797 diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
1798 index 9dbdccab3b6a3..5c0ba5ca59308 100644
1799 --- a/kernel/irq/manage.c
1800 +++ b/kernel/irq/manage.c
1801 @@ -393,6 +393,9 @@ int irq_setup_affinity(struct irq_desc *desc)
1802 }
1803
1804 cpumask_and(&mask, cpu_online_mask, set);
1805 + if (cpumask_empty(&mask))
1806 + cpumask_copy(&mask, cpu_online_mask);
1807 +
1808 if (node != NUMA_NO_NODE) {
1809 const struct cpumask *nodemask = cpumask_of_node(node);
1810
1811 diff --git a/kernel/irq/matrix.c b/kernel/irq/matrix.c
1812 index 5092494bf2614..92337703ca9fd 100644
1813 --- a/kernel/irq/matrix.c
1814 +++ b/kernel/irq/matrix.c
1815 @@ -14,6 +14,7 @@ struct cpumap {
1816 unsigned int available;
1817 unsigned int allocated;
1818 unsigned int managed;
1819 + unsigned int managed_allocated;
1820 bool initialized;
1821 bool online;
1822 unsigned long alloc_map[IRQ_MATRIX_SIZE];
1823 @@ -124,6 +125,48 @@ static unsigned int matrix_alloc_area(struct irq_matrix *m, struct cpumap *cm,
1824 return area;
1825 }
1826
1827 +/* Find the best CPU which has the lowest vector allocation count */
1828 +static unsigned int matrix_find_best_cpu(struct irq_matrix *m,
1829 + const struct cpumask *msk)
1830 +{
1831 + unsigned int cpu, best_cpu, maxavl = 0;
1832 + struct cpumap *cm;
1833 +
1834 + best_cpu = UINT_MAX;
1835 +
1836 + for_each_cpu(cpu, msk) {
1837 + cm = per_cpu_ptr(m->maps, cpu);
1838 +
1839 + if (!cm->online || cm->available <= maxavl)
1840 + continue;
1841 +
1842 + best_cpu = cpu;
1843 + maxavl = cm->available;
1844 + }
1845 + return best_cpu;
1846 +}
1847 +
1848 +/* Find the best CPU which has the lowest number of managed IRQs allocated */
1849 +static unsigned int matrix_find_best_cpu_managed(struct irq_matrix *m,
1850 + const struct cpumask *msk)
1851 +{
1852 + unsigned int cpu, best_cpu, allocated = UINT_MAX;
1853 + struct cpumap *cm;
1854 +
1855 + best_cpu = UINT_MAX;
1856 +
1857 + for_each_cpu(cpu, msk) {
1858 + cm = per_cpu_ptr(m->maps, cpu);
1859 +
1860 + if (!cm->online || cm->managed_allocated > allocated)
1861 + continue;
1862 +
1863 + best_cpu = cpu;
1864 + allocated = cm->managed_allocated;
1865 + }
1866 + return best_cpu;
1867 +}
1868 +
1869 /**
1870 * irq_matrix_assign_system - Assign system wide entry in the matrix
1871 * @m: Matrix pointer
1872 @@ -239,11 +282,21 @@ void irq_matrix_remove_managed(struct irq_matrix *m, const struct cpumask *msk)
1873 * @m: Matrix pointer
1874 * @cpu: On which CPU the interrupt should be allocated
1875 */
1876 -int irq_matrix_alloc_managed(struct irq_matrix *m, unsigned int cpu)
1877 +int irq_matrix_alloc_managed(struct irq_matrix *m, const struct cpumask *msk,
1878 + unsigned int *mapped_cpu)
1879 {
1880 - struct cpumap *cm = per_cpu_ptr(m->maps, cpu);
1881 - unsigned int bit, end = m->alloc_end;
1882 + unsigned int bit, cpu, end = m->alloc_end;
1883 + struct cpumap *cm;
1884
1885 + if (cpumask_empty(msk))
1886 + return -EINVAL;
1887 +
1888 + cpu = matrix_find_best_cpu_managed(m, msk);
1889 + if (cpu == UINT_MAX)
1890 + return -ENOSPC;
1891 +
1892 + cm = per_cpu_ptr(m->maps, cpu);
1893 + end = m->alloc_end;
1894 /* Get managed bit which are not allocated */
1895 bitmap_andnot(m->scratch_map, cm->managed_map, cm->alloc_map, end);
1896 bit = find_first_bit(m->scratch_map, end);
1897 @@ -251,7 +304,9 @@ int irq_matrix_alloc_managed(struct irq_matrix *m, unsigned int cpu)
1898 return -ENOSPC;
1899 set_bit(bit, cm->alloc_map);
1900 cm->allocated++;
1901 + cm->managed_allocated++;
1902 m->total_allocated++;
1903 + *mapped_cpu = cpu;
1904 trace_irq_matrix_alloc_managed(bit, cpu, m, cm);
1905 return bit;
1906 }
1907 @@ -322,37 +377,27 @@ void irq_matrix_remove_reserved(struct irq_matrix *m)
1908 int irq_matrix_alloc(struct irq_matrix *m, const struct cpumask *msk,
1909 bool reserved, unsigned int *mapped_cpu)
1910 {
1911 - unsigned int cpu, best_cpu, maxavl = 0;
1912 + unsigned int cpu, bit;
1913 struct cpumap *cm;
1914 - unsigned int bit;
1915
1916 - best_cpu = UINT_MAX;
1917 - for_each_cpu(cpu, msk) {
1918 - cm = per_cpu_ptr(m->maps, cpu);
1919 -
1920 - if (!cm->online || cm->available <= maxavl)
1921 - continue;
1922 + cpu = matrix_find_best_cpu(m, msk);
1923 + if (cpu == UINT_MAX)
1924 + return -ENOSPC;
1925
1926 - best_cpu = cpu;
1927 - maxavl = cm->available;
1928 - }
1929 + cm = per_cpu_ptr(m->maps, cpu);
1930 + bit = matrix_alloc_area(m, cm, 1, false);
1931 + if (bit >= m->alloc_end)
1932 + return -ENOSPC;
1933 + cm->allocated++;
1934 + cm->available--;
1935 + m->total_allocated++;
1936 + m->global_available--;
1937 + if (reserved)
1938 + m->global_reserved--;
1939 + *mapped_cpu = cpu;
1940 + trace_irq_matrix_alloc(bit, cpu, m, cm);
1941 + return bit;
1942
1943 - if (maxavl) {
1944 - cm = per_cpu_ptr(m->maps, best_cpu);
1945 - bit = matrix_alloc_area(m, cm, 1, false);
1946 - if (bit < m->alloc_end) {
1947 - cm->allocated++;
1948 - cm->available--;
1949 - m->total_allocated++;
1950 - m->global_available--;
1951 - if (reserved)
1952 - m->global_reserved--;
1953 - *mapped_cpu = best_cpu;
1954 - trace_irq_matrix_alloc(bit, best_cpu, m, cm);
1955 - return bit;
1956 - }
1957 - }
1958 - return -ENOSPC;
1959 }
1960
1961 /**
1962 @@ -373,6 +418,8 @@ void irq_matrix_free(struct irq_matrix *m, unsigned int cpu,
1963
1964 clear_bit(bit, cm->alloc_map);
1965 cm->allocated--;
1966 + if(managed)
1967 + cm->managed_allocated--;
1968
1969 if (cm->online)
1970 m->total_allocated--;
1971 @@ -442,13 +489,14 @@ void irq_matrix_debug_show(struct seq_file *sf, struct irq_matrix *m, int ind)
1972 seq_printf(sf, "Total allocated: %6u\n", m->total_allocated);
1973 seq_printf(sf, "System: %u: %*pbl\n", nsys, m->matrix_bits,
1974 m->system_map);
1975 - seq_printf(sf, "%*s| CPU | avl | man | act | vectors\n", ind, " ");
1976 + seq_printf(sf, "%*s| CPU | avl | man | mac | act | vectors\n", ind, " ");
1977 cpus_read_lock();
1978 for_each_online_cpu(cpu) {
1979 struct cpumap *cm = per_cpu_ptr(m->maps, cpu);
1980
1981 - seq_printf(sf, "%*s %4d %4u %4u %4u %*pbl\n", ind, " ",
1982 - cpu, cm->available, cm->managed, cm->allocated,
1983 + seq_printf(sf, "%*s %4d %4u %4u %4u %4u %*pbl\n", ind, " ",
1984 + cpu, cm->available, cm->managed,
1985 + cm->managed_allocated, cm->allocated,
1986 m->matrix_bits, cm->alloc_map);
1987 }
1988 cpus_read_unlock();
1989 diff --git a/kernel/locking/rwsem-xadd.c b/kernel/locking/rwsem-xadd.c
1990 index 3064c50e181e1..ef909357b84e1 100644
1991 --- a/kernel/locking/rwsem-xadd.c
1992 +++ b/kernel/locking/rwsem-xadd.c
1993 @@ -198,15 +198,22 @@ static void __rwsem_mark_wake(struct rw_semaphore *sem,
1994 woken++;
1995 tsk = waiter->task;
1996
1997 - wake_q_add(wake_q, tsk);
1998 + get_task_struct(tsk);
1999 list_del(&waiter->list);
2000 /*
2001 - * Ensure that the last operation is setting the reader
2002 + * Ensure calling get_task_struct() before setting the reader
2003 * waiter to nil such that rwsem_down_read_failed() cannot
2004 * race with do_exit() by always holding a reference count
2005 * to the task to wakeup.
2006 */
2007 smp_store_release(&waiter->task, NULL);
2008 + /*
2009 + * Ensure issuing the wakeup (either by us or someone else)
2010 + * after setting the reader waiter to nil.
2011 + */
2012 + wake_q_add(wake_q, tsk);
2013 + /* wake_q_add() already take the task ref */
2014 + put_task_struct(tsk);
2015 }
2016
2017 adjustment = woken * RWSEM_ACTIVE_READ_BIAS - adjustment;
2018 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
2019 index 13ddfa46d741f..152a0b0c91bb6 100644
2020 --- a/kernel/sched/core.c
2021 +++ b/kernel/sched/core.c
2022 @@ -405,10 +405,11 @@ void wake_q_add(struct wake_q_head *head, struct task_struct *task)
2023 * its already queued (either by us or someone else) and will get the
2024 * wakeup due to that.
2025 *
2026 - * This cmpxchg() executes a full barrier, which pairs with the full
2027 - * barrier executed by the wakeup in wake_up_q().
2028 + * In order to ensure that a pending wakeup will observe our pending
2029 + * state, even in the failed case, an explicit smp_mb() must be used.
2030 */
2031 - if (cmpxchg(&node->next, NULL, WAKE_Q_TAIL))
2032 + smp_mb__before_atomic();
2033 + if (cmpxchg_relaxed(&node->next, NULL, WAKE_Q_TAIL))
2034 return;
2035
2036 get_task_struct(task);
2037 diff --git a/mm/backing-dev.c b/mm/backing-dev.c
2038 index 8a8bb8796c6c4..72e6d0c55cfad 100644
2039 --- a/mm/backing-dev.c
2040 +++ b/mm/backing-dev.c
2041 @@ -689,6 +689,7 @@ static int cgwb_bdi_init(struct backing_dev_info *bdi)
2042 INIT_RADIX_TREE(&bdi->cgwb_tree, GFP_ATOMIC);
2043 bdi->cgwb_congested_tree = RB_ROOT;
2044 mutex_init(&bdi->cgwb_release_mutex);
2045 + init_rwsem(&bdi->wb_switch_rwsem);
2046
2047 ret = wb_init(&bdi->wb, bdi, 1, GFP_KERNEL);
2048 if (!ret) {
2049 diff --git a/mm/hugetlb.c b/mm/hugetlb.c
2050 index 10e83672bfbec..9e5f66cbf711c 100644
2051 --- a/mm/hugetlb.c
2052 +++ b/mm/hugetlb.c
2053 @@ -3624,7 +3624,6 @@ retry_avoidcopy:
2054 copy_user_huge_page(new_page, old_page, address, vma,
2055 pages_per_huge_page(h));
2056 __SetPageUptodate(new_page);
2057 - set_page_huge_active(new_page);
2058
2059 mmun_start = haddr;
2060 mmun_end = mmun_start + huge_page_size(h);
2061 @@ -3646,6 +3645,7 @@ retry_avoidcopy:
2062 make_huge_pte(vma, new_page, 1));
2063 page_remove_rmap(old_page, true);
2064 hugepage_add_new_anon_rmap(new_page, vma, haddr);
2065 + set_page_huge_active(new_page);
2066 /* Make the old page be freed below */
2067 new_page = old_page;
2068 }
2069 @@ -3730,6 +3730,7 @@ static vm_fault_t hugetlb_no_page(struct mm_struct *mm,
2070 pte_t new_pte;
2071 spinlock_t *ptl;
2072 unsigned long haddr = address & huge_page_mask(h);
2073 + bool new_page = false;
2074
2075 /*
2076 * Currently, we are forced to kill the process in the event the
2077 @@ -3791,7 +3792,7 @@ retry:
2078 }
2079 clear_huge_page(page, address, pages_per_huge_page(h));
2080 __SetPageUptodate(page);
2081 - set_page_huge_active(page);
2082 + new_page = true;
2083
2084 if (vma->vm_flags & VM_MAYSHARE) {
2085 int err = huge_add_to_page_cache(page, mapping, idx);
2086 @@ -3862,6 +3863,15 @@ retry:
2087 }
2088
2089 spin_unlock(ptl);
2090 +
2091 + /*
2092 + * Only make newly allocated pages active. Existing pages found
2093 + * in the pagecache could be !page_huge_active() if they have been
2094 + * isolated for migration.
2095 + */
2096 + if (new_page)
2097 + set_page_huge_active(page);
2098 +
2099 unlock_page(page);
2100 out:
2101 return ret;
2102 @@ -4096,7 +4106,6 @@ int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm,
2103 * the set_pte_at() write.
2104 */
2105 __SetPageUptodate(page);
2106 - set_page_huge_active(page);
2107
2108 mapping = dst_vma->vm_file->f_mapping;
2109 idx = vma_hugecache_offset(h, dst_vma, dst_addr);
2110 @@ -4164,6 +4173,7 @@ int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm,
2111 update_mmu_cache(dst_vma, dst_addr, dst_pte);
2112
2113 spin_unlock(ptl);
2114 + set_page_huge_active(page);
2115 if (vm_shared)
2116 unlock_page(page);
2117 ret = 0;
2118 diff --git a/mm/migrate.c b/mm/migrate.c
2119 index ab260260a6262..14779c4f9a60a 100644
2120 --- a/mm/migrate.c
2121 +++ b/mm/migrate.c
2122 @@ -1303,6 +1303,16 @@ static int unmap_and_move_huge_page(new_page_t get_new_page,
2123 lock_page(hpage);
2124 }
2125
2126 + /*
2127 + * Check for pages which are in the process of being freed. Without
2128 + * page_mapping() set, hugetlbfs specific move page routine will not
2129 + * be called and we could leak usage counts for subpools.
2130 + */
2131 + if (page_private(hpage) && !page_mapping(hpage)) {
2132 + rc = -EBUSY;
2133 + goto out_unlock;
2134 + }
2135 +
2136 if (PageAnon(hpage))
2137 anon_vma = page_get_anon_vma(hpage);
2138
2139 @@ -1333,6 +1343,7 @@ put_anon:
2140 put_new_page = NULL;
2141 }
2142
2143 +out_unlock:
2144 unlock_page(hpage);
2145 out:
2146 if (rc != -EAGAIN)
2147 diff --git a/mm/mmap.c b/mm/mmap.c
2148 index f7cd9cb966c0f..43507f7e66b41 100644
2149 --- a/mm/mmap.c
2150 +++ b/mm/mmap.c
2151 @@ -2391,12 +2391,11 @@ int expand_downwards(struct vm_area_struct *vma,
2152 {
2153 struct mm_struct *mm = vma->vm_mm;
2154 struct vm_area_struct *prev;
2155 - int error;
2156 + int error = 0;
2157
2158 address &= PAGE_MASK;
2159 - error = security_mmap_addr(address);
2160 - if (error)
2161 - return error;
2162 + if (address < mmap_min_addr)
2163 + return -EPERM;
2164
2165 /* Enforce stack_guard_gap */
2166 prev = vma->vm_prev;
2167 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
2168 index c2abe9db1ea24..40c5102234679 100644
2169 --- a/net/mac80211/cfg.c
2170 +++ b/net/mac80211/cfg.c
2171 @@ -1478,6 +1478,10 @@ static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev,
2172 if (params->sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER))
2173 sta->sta.tdls = true;
2174
2175 + if (sta->sta.tdls && sdata->vif.type == NL80211_IFTYPE_STATION &&
2176 + !sdata->u.mgd.associated)
2177 + return -EINVAL;
2178 +
2179 err = sta_apply_parameters(local, sta, params);
2180 if (err) {
2181 sta_info_free(local, sta);
2182 diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
2183 index 828348b2a504d..e946ee4f335bd 100644
2184 --- a/net/mac80211/rx.c
2185 +++ b/net/mac80211/rx.c
2186 @@ -221,7 +221,7 @@ static void ieee80211_handle_mu_mimo_mon(struct ieee80211_sub_if_data *sdata,
2187 struct ieee80211_hdr_3addr hdr;
2188 u8 category;
2189 u8 action_code;
2190 - } __packed action;
2191 + } __packed __aligned(2) action;
2192
2193 if (!sdata)
2194 return;
2195 @@ -2678,7 +2678,9 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
2196 skb_set_queue_mapping(skb, q);
2197
2198 if (!--mesh_hdr->ttl) {
2199 - IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_ttl);
2200 + if (!is_multicast_ether_addr(hdr->addr1))
2201 + IEEE80211_IFSTA_MESH_CTR_INC(ifmsh,
2202 + dropped_frames_ttl);
2203 goto out;
2204 }
2205
2206 diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
2207 index c7ccd7b71b151..743cde66aaf62 100644
2208 --- a/net/mac80211/tx.c
2209 +++ b/net/mac80211/tx.c
2210 @@ -3614,10 +3614,10 @@ void __ieee80211_subif_start_xmit(struct sk_buff *skb,
2211 /* We need a bit of data queued to build aggregates properly, so
2212 * instruct the TCP stack to allow more than a single ms of data
2213 * to be queued in the stack. The value is a bit-shift of 1
2214 - * second, so 8 is ~4ms of queued data. Only affects local TCP
2215 + * second, so 7 is ~8ms of queued data. Only affects local TCP
2216 * sockets.
2217 */
2218 - sk_pacing_shift_update(skb->sk, 8);
2219 + sk_pacing_shift_update(skb->sk, 7);
2220
2221 fast_tx = rcu_dereference(sta->fast_tx);
2222
2223 diff --git a/net/wireless/reg.c b/net/wireless/reg.c
2224 index 24cfa2776f50b..8002ace7c9f65 100644
2225 --- a/net/wireless/reg.c
2226 +++ b/net/wireless/reg.c
2227 @@ -1249,7 +1249,7 @@ static bool is_valid_rd(const struct ieee80211_regdomain *rd)
2228 * definitions (the "2.4 GHz band", the "5 GHz band" and the "60GHz band"),
2229 * however it is safe for now to assume that a frequency rule should not be
2230 * part of a frequency's band if the start freq or end freq are off by more
2231 - * than 2 GHz for the 2.4 and 5 GHz bands, and by more than 10 GHz for the
2232 + * than 2 GHz for the 2.4 and 5 GHz bands, and by more than 20 GHz for the
2233 * 60 GHz band.
2234 * This resolution can be lowered and should be considered as we add
2235 * regulatory rule support for other "bands".
2236 @@ -1264,7 +1264,7 @@ static bool freq_in_rule_band(const struct ieee80211_freq_range *freq_range,
2237 * with the Channel starting frequency above 45 GHz.
2238 */
2239 u32 limit = freq_khz > 45 * ONE_GHZ_IN_KHZ ?
2240 - 10 * ONE_GHZ_IN_KHZ : 2 * ONE_GHZ_IN_KHZ;
2241 + 20 * ONE_GHZ_IN_KHZ : 2 * ONE_GHZ_IN_KHZ;
2242 if (abs(freq_khz - freq_range->start_freq_khz) <= limit)
2243 return true;
2244 if (abs(freq_khz - freq_range->end_freq_khz) <= limit)
2245 diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c
2246 index 26b5e245b0747..8b78ddffa509a 100644
2247 --- a/sound/core/compress_offload.c
2248 +++ b/sound/core/compress_offload.c
2249 @@ -529,7 +529,8 @@ static int snd_compress_check_input(struct snd_compr_params *params)
2250 {
2251 /* first let's check the buffer parameter's */
2252 if (params->buffer.fragment_size == 0 ||
2253 - params->buffer.fragments > INT_MAX / params->buffer.fragment_size)
2254 + params->buffer.fragments > INT_MAX / params->buffer.fragment_size ||
2255 + params->buffer.fragments == 0)
2256 return -EINVAL;
2257
2258 /* now codec parameters */
2259 diff --git a/sound/soc/codecs/rt274.c b/sound/soc/codecs/rt274.c
2260 index d88e673410835..18a931c25ca58 100644
2261 --- a/sound/soc/codecs/rt274.c
2262 +++ b/sound/soc/codecs/rt274.c
2263 @@ -1126,8 +1126,11 @@ static int rt274_i2c_probe(struct i2c_client *i2c,
2264 return ret;
2265 }
2266
2267 - regmap_read(rt274->regmap,
2268 + ret = regmap_read(rt274->regmap,
2269 RT274_GET_PARAM(AC_NODE_ROOT, AC_PAR_VENDOR_ID), &val);
2270 + if (ret)
2271 + return ret;
2272 +
2273 if (val != RT274_VENDOR_ID) {
2274 dev_err(&i2c->dev,
2275 "Device with ID register %#x is not rt274\n", val);
2276 diff --git a/sound/soc/codecs/rt5682.h b/sound/soc/codecs/rt5682.h
2277 index 8068140ebe3f1..cdd659f4df93d 100644
2278 --- a/sound/soc/codecs/rt5682.h
2279 +++ b/sound/soc/codecs/rt5682.h
2280 @@ -849,18 +849,18 @@
2281 #define RT5682_SCLK_SRC_PLL2 (0x2 << 13)
2282 #define RT5682_SCLK_SRC_SDW (0x3 << 13)
2283 #define RT5682_SCLK_SRC_RCCLK (0x4 << 13)
2284 -#define RT5682_PLL1_SRC_MASK (0x3 << 10)
2285 -#define RT5682_PLL1_SRC_SFT 10
2286 -#define RT5682_PLL1_SRC_MCLK (0x0 << 10)
2287 -#define RT5682_PLL1_SRC_BCLK1 (0x1 << 10)
2288 -#define RT5682_PLL1_SRC_SDW (0x2 << 10)
2289 -#define RT5682_PLL1_SRC_RC (0x3 << 10)
2290 -#define RT5682_PLL2_SRC_MASK (0x3 << 8)
2291 -#define RT5682_PLL2_SRC_SFT 8
2292 -#define RT5682_PLL2_SRC_MCLK (0x0 << 8)
2293 -#define RT5682_PLL2_SRC_BCLK1 (0x1 << 8)
2294 -#define RT5682_PLL2_SRC_SDW (0x2 << 8)
2295 -#define RT5682_PLL2_SRC_RC (0x3 << 8)
2296 +#define RT5682_PLL2_SRC_MASK (0x3 << 10)
2297 +#define RT5682_PLL2_SRC_SFT 10
2298 +#define RT5682_PLL2_SRC_MCLK (0x0 << 10)
2299 +#define RT5682_PLL2_SRC_BCLK1 (0x1 << 10)
2300 +#define RT5682_PLL2_SRC_SDW (0x2 << 10)
2301 +#define RT5682_PLL2_SRC_RC (0x3 << 10)
2302 +#define RT5682_PLL1_SRC_MASK (0x3 << 8)
2303 +#define RT5682_PLL1_SRC_SFT 8
2304 +#define RT5682_PLL1_SRC_MCLK (0x0 << 8)
2305 +#define RT5682_PLL1_SRC_BCLK1 (0x1 << 8)
2306 +#define RT5682_PLL1_SRC_SDW (0x2 << 8)
2307 +#define RT5682_PLL1_SRC_RC (0x3 << 8)
2308
2309
2310
2311 diff --git a/sound/soc/fsl/imx-audmux.c b/sound/soc/fsl/imx-audmux.c
2312 index 392d5eef356d3..99e07b01a2ce9 100644
2313 --- a/sound/soc/fsl/imx-audmux.c
2314 +++ b/sound/soc/fsl/imx-audmux.c
2315 @@ -86,49 +86,49 @@ static ssize_t audmux_read_file(struct file *file, char __user *user_buf,
2316 if (!buf)
2317 return -ENOMEM;
2318
2319 - ret = snprintf(buf, PAGE_SIZE, "PDCR: %08x\nPTCR: %08x\n",
2320 + ret = scnprintf(buf, PAGE_SIZE, "PDCR: %08x\nPTCR: %08x\n",
2321 pdcr, ptcr);
2322
2323 if (ptcr & IMX_AUDMUX_V2_PTCR_TFSDIR)
2324 - ret += snprintf(buf + ret, PAGE_SIZE - ret,
2325 + ret += scnprintf(buf + ret, PAGE_SIZE - ret,
2326 "TxFS output from %s, ",
2327 audmux_port_string((ptcr >> 27) & 0x7));
2328 else
2329 - ret += snprintf(buf + ret, PAGE_SIZE - ret,
2330 + ret += scnprintf(buf + ret, PAGE_SIZE - ret,
2331 "TxFS input, ");
2332
2333 if (ptcr & IMX_AUDMUX_V2_PTCR_TCLKDIR)
2334 - ret += snprintf(buf + ret, PAGE_SIZE - ret,
2335 + ret += scnprintf(buf + ret, PAGE_SIZE - ret,
2336 "TxClk output from %s",
2337 audmux_port_string((ptcr >> 22) & 0x7));
2338 else
2339 - ret += snprintf(buf + ret, PAGE_SIZE - ret,
2340 + ret += scnprintf(buf + ret, PAGE_SIZE - ret,
2341 "TxClk input");
2342
2343 - ret += snprintf(buf + ret, PAGE_SIZE - ret, "\n");
2344 + ret += scnprintf(buf + ret, PAGE_SIZE - ret, "\n");
2345
2346 if (ptcr & IMX_AUDMUX_V2_PTCR_SYN) {
2347 - ret += snprintf(buf + ret, PAGE_SIZE - ret,
2348 + ret += scnprintf(buf + ret, PAGE_SIZE - ret,
2349 "Port is symmetric");
2350 } else {
2351 if (ptcr & IMX_AUDMUX_V2_PTCR_RFSDIR)
2352 - ret += snprintf(buf + ret, PAGE_SIZE - ret,
2353 + ret += scnprintf(buf + ret, PAGE_SIZE - ret,
2354 "RxFS output from %s, ",
2355 audmux_port_string((ptcr >> 17) & 0x7));
2356 else
2357 - ret += snprintf(buf + ret, PAGE_SIZE - ret,
2358 + ret += scnprintf(buf + ret, PAGE_SIZE - ret,
2359 "RxFS input, ");
2360
2361 if (ptcr & IMX_AUDMUX_V2_PTCR_RCLKDIR)
2362 - ret += snprintf(buf + ret, PAGE_SIZE - ret,
2363 + ret += scnprintf(buf + ret, PAGE_SIZE - ret,
2364 "RxClk output from %s",
2365 audmux_port_string((ptcr >> 12) & 0x7));
2366 else
2367 - ret += snprintf(buf + ret, PAGE_SIZE - ret,
2368 + ret += scnprintf(buf + ret, PAGE_SIZE - ret,
2369 "RxClk input");
2370 }
2371
2372 - ret += snprintf(buf + ret, PAGE_SIZE - ret,
2373 + ret += scnprintf(buf + ret, PAGE_SIZE - ret,
2374 "\nData received from %s\n",
2375 audmux_port_string((pdcr >> 13) & 0x7));
2376
2377 diff --git a/sound/soc/intel/boards/broadwell.c b/sound/soc/intel/boards/broadwell.c
2378 index 7b0ee67b4fc8b..78ec97b53f50e 100644
2379 --- a/sound/soc/intel/boards/broadwell.c
2380 +++ b/sound/soc/intel/boards/broadwell.c
2381 @@ -192,7 +192,7 @@ static struct snd_soc_dai_link broadwell_rt286_dais[] = {
2382 .stream_name = "Loopback",
2383 .cpu_dai_name = "Loopback Pin",
2384 .platform_name = "haswell-pcm-audio",
2385 - .dynamic = 0,
2386 + .dynamic = 1,
2387 .codec_name = "snd-soc-dummy",
2388 .codec_dai_name = "snd-soc-dummy-dai",
2389 .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
2390 diff --git a/sound/soc/intel/boards/haswell.c b/sound/soc/intel/boards/haswell.c
2391 index eab1f439dd3f1..a4022983a7ce0 100644
2392 --- a/sound/soc/intel/boards/haswell.c
2393 +++ b/sound/soc/intel/boards/haswell.c
2394 @@ -146,7 +146,7 @@ static struct snd_soc_dai_link haswell_rt5640_dais[] = {
2395 .stream_name = "Loopback",
2396 .cpu_dai_name = "Loopback Pin",
2397 .platform_name = "haswell-pcm-audio",
2398 - .dynamic = 0,
2399 + .dynamic = 1,
2400 .codec_name = "snd-soc-dummy",
2401 .codec_dai_name = "snd-soc-dummy-dai",
2402 .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
2403 diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
2404 index 461d951917c05..6537069452226 100644
2405 --- a/sound/soc/soc-dapm.c
2406 +++ b/sound/soc/soc-dapm.c
2407 @@ -2028,19 +2028,19 @@ static ssize_t dapm_widget_power_read_file(struct file *file,
2408 out = is_connected_output_ep(w, NULL, NULL);
2409 }
2410
2411 - ret = snprintf(buf, PAGE_SIZE, "%s: %s%s in %d out %d",
2412 + ret = scnprintf(buf, PAGE_SIZE, "%s: %s%s in %d out %d",
2413 w->name, w->power ? "On" : "Off",
2414 w->force ? " (forced)" : "", in, out);
2415
2416 if (w->reg >= 0)
2417 - ret += snprintf(buf + ret, PAGE_SIZE - ret,
2418 + ret += scnprintf(buf + ret, PAGE_SIZE - ret,
2419 " - R%d(0x%x) mask 0x%x",
2420 w->reg, w->reg, w->mask << w->shift);
2421
2422 - ret += snprintf(buf + ret, PAGE_SIZE - ret, "\n");
2423 + ret += scnprintf(buf + ret, PAGE_SIZE - ret, "\n");
2424
2425 if (w->sname)
2426 - ret += snprintf(buf + ret, PAGE_SIZE - ret, " stream %s %s\n",
2427 + ret += scnprintf(buf + ret, PAGE_SIZE - ret, " stream %s %s\n",
2428 w->sname,
2429 w->active ? "active" : "inactive");
2430
2431 @@ -2053,7 +2053,7 @@ static ssize_t dapm_widget_power_read_file(struct file *file,
2432 if (!p->connect)
2433 continue;
2434
2435 - ret += snprintf(buf + ret, PAGE_SIZE - ret,
2436 + ret += scnprintf(buf + ret, PAGE_SIZE - ret,
2437 " %s \"%s\" \"%s\"\n",
2438 (rdir == SND_SOC_DAPM_DIR_IN) ? "in" : "out",
2439 p->name ? p->name : "static",
2440 diff --git a/tools/testing/selftests/gpio/gpio-mockup-chardev.c b/tools/testing/selftests/gpio/gpio-mockup-chardev.c
2441 index f8d468f54e986..aaa1e9f083c37 100644
2442 --- a/tools/testing/selftests/gpio/gpio-mockup-chardev.c
2443 +++ b/tools/testing/selftests/gpio/gpio-mockup-chardev.c
2444 @@ -37,7 +37,7 @@ static int get_debugfs(char **path)
2445 struct libmnt_table *tb;
2446 struct libmnt_iter *itr = NULL;
2447 struct libmnt_fs *fs;
2448 - int found = 0;
2449 + int found = 0, ret;
2450
2451 cxt = mnt_new_context();
2452 if (!cxt)
2453 @@ -58,8 +58,11 @@ static int get_debugfs(char **path)
2454 break;
2455 }
2456 }
2457 - if (found)
2458 - asprintf(path, "%s/gpio", mnt_fs_get_target(fs));
2459 + if (found) {
2460 + ret = asprintf(path, "%s/gpio", mnt_fs_get_target(fs));
2461 + if (ret < 0)
2462 + err(EXIT_FAILURE, "failed to format string");
2463 + }
2464
2465 mnt_free_iter(itr);
2466 mnt_free_context(cxt);
2467 diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c
2468 index 6fd8c089cafcd..fb5d2d1e0c048 100644
2469 --- a/tools/testing/selftests/kvm/lib/kvm_util.c
2470 +++ b/tools/testing/selftests/kvm/lib/kvm_util.c
2471 @@ -590,7 +590,7 @@ void vm_userspace_mem_region_add(struct kvm_vm *vm,
2472 * already exist.
2473 */
2474 region = (struct userspace_mem_region *) userspace_mem_region_find(
2475 - vm, guest_paddr, guest_paddr + npages * vm->page_size);
2476 + vm, guest_paddr, (guest_paddr + npages * vm->page_size) - 1);
2477 if (region != NULL)
2478 TEST_ASSERT(false, "overlapping userspace_mem_region already "
2479 "exists\n"
2480 @@ -606,15 +606,10 @@ void vm_userspace_mem_region_add(struct kvm_vm *vm,
2481 region = region->next) {
2482 if (region->region.slot == slot)
2483 break;
2484 - if ((guest_paddr <= (region->region.guest_phys_addr
2485 - + region->region.memory_size))
2486 - && ((guest_paddr + npages * vm->page_size)
2487 - >= region->region.guest_phys_addr))
2488 - break;
2489 }
2490 if (region != NULL)
2491 TEST_ASSERT(false, "A mem region with the requested slot "
2492 - "or overlapping physical memory range already exists.\n"
2493 + "already exists.\n"
2494 " requested slot: %u paddr: 0x%lx npages: 0x%lx\n"
2495 " existing slot: %u paddr: 0x%lx size: 0x%lx",
2496 slot, guest_paddr, npages,
2497 diff --git a/tools/testing/selftests/rtc/rtctest.c b/tools/testing/selftests/rtc/rtctest.c
2498 index e20b017e70731..b2065536d4075 100644
2499 --- a/tools/testing/selftests/rtc/rtctest.c
2500 +++ b/tools/testing/selftests/rtc/rtctest.c
2501 @@ -145,15 +145,12 @@ TEST_F(rtc, alarm_alm_set) {
2502
2503 rc = select(self->fd + 1, &readfds, NULL, NULL, &tv);
2504 ASSERT_NE(-1, rc);
2505 - EXPECT_NE(0, rc);
2506 + ASSERT_NE(0, rc);
2507
2508 /* Disable alarm interrupts */
2509 rc = ioctl(self->fd, RTC_AIE_OFF, 0);
2510 ASSERT_NE(-1, rc);
2511
2512 - if (rc == 0)
2513 - return;
2514 -
2515 rc = read(self->fd, &data, sizeof(unsigned long));
2516 ASSERT_NE(-1, rc);
2517 TH_LOG("data: %lx", data);
2518 @@ -202,7 +199,109 @@ TEST_F(rtc, alarm_wkalm_set) {
2519
2520 rc = select(self->fd + 1, &readfds, NULL, NULL, &tv);
2521 ASSERT_NE(-1, rc);
2522 - EXPECT_NE(0, rc);
2523 + ASSERT_NE(0, rc);
2524 +
2525 + rc = read(self->fd, &data, sizeof(unsigned long));
2526 + ASSERT_NE(-1, rc);
2527 +
2528 + rc = ioctl(self->fd, RTC_RD_TIME, &tm);
2529 + ASSERT_NE(-1, rc);
2530 +
2531 + new = timegm((struct tm *)&tm);
2532 + ASSERT_EQ(new, secs);
2533 +}
2534 +
2535 +TEST_F(rtc, alarm_alm_set_minute) {
2536 + struct timeval tv = { .tv_sec = 62 };
2537 + unsigned long data;
2538 + struct rtc_time tm;
2539 + fd_set readfds;
2540 + time_t secs, new;
2541 + int rc;
2542 +
2543 + rc = ioctl(self->fd, RTC_RD_TIME, &tm);
2544 + ASSERT_NE(-1, rc);
2545 +
2546 + secs = timegm((struct tm *)&tm) + 60 - tm.tm_sec;
2547 + gmtime_r(&secs, (struct tm *)&tm);
2548 +
2549 + rc = ioctl(self->fd, RTC_ALM_SET, &tm);
2550 + if (rc == -1) {
2551 + ASSERT_EQ(EINVAL, errno);
2552 + TH_LOG("skip alarms are not supported.");
2553 + return;
2554 + }
2555 +
2556 + rc = ioctl(self->fd, RTC_ALM_READ, &tm);
2557 + ASSERT_NE(-1, rc);
2558 +
2559 + TH_LOG("Alarm time now set to %02d:%02d:%02d.",
2560 + tm.tm_hour, tm.tm_min, tm.tm_sec);
2561 +
2562 + /* Enable alarm interrupts */
2563 + rc = ioctl(self->fd, RTC_AIE_ON, 0);
2564 + ASSERT_NE(-1, rc);
2565 +
2566 + FD_ZERO(&readfds);
2567 + FD_SET(self->fd, &readfds);
2568 +
2569 + rc = select(self->fd + 1, &readfds, NULL, NULL, &tv);
2570 + ASSERT_NE(-1, rc);
2571 + ASSERT_NE(0, rc);
2572 +
2573 + /* Disable alarm interrupts */
2574 + rc = ioctl(self->fd, RTC_AIE_OFF, 0);
2575 + ASSERT_NE(-1, rc);
2576 +
2577 + rc = read(self->fd, &data, sizeof(unsigned long));
2578 + ASSERT_NE(-1, rc);
2579 + TH_LOG("data: %lx", data);
2580 +
2581 + rc = ioctl(self->fd, RTC_RD_TIME, &tm);
2582 + ASSERT_NE(-1, rc);
2583 +
2584 + new = timegm((struct tm *)&tm);
2585 + ASSERT_EQ(new, secs);
2586 +}
2587 +
2588 +TEST_F(rtc, alarm_wkalm_set_minute) {
2589 + struct timeval tv = { .tv_sec = 62 };
2590 + struct rtc_wkalrm alarm = { 0 };
2591 + struct rtc_time tm;
2592 + unsigned long data;
2593 + fd_set readfds;
2594 + time_t secs, new;
2595 + int rc;
2596 +
2597 + rc = ioctl(self->fd, RTC_RD_TIME, &alarm.time);
2598 + ASSERT_NE(-1, rc);
2599 +
2600 + secs = timegm((struct tm *)&alarm.time) + 60 - alarm.time.tm_sec;
2601 + gmtime_r(&secs, (struct tm *)&alarm.time);
2602 +
2603 + alarm.enabled = 1;
2604 +
2605 + rc = ioctl(self->fd, RTC_WKALM_SET, &alarm);
2606 + if (rc == -1) {
2607 + ASSERT_EQ(EINVAL, errno);
2608 + TH_LOG("skip alarms are not supported.");
2609 + return;
2610 + }
2611 +
2612 + rc = ioctl(self->fd, RTC_WKALM_RD, &alarm);
2613 + ASSERT_NE(-1, rc);
2614 +
2615 + TH_LOG("Alarm time now set to %02d/%02d/%02d %02d:%02d:%02d.",
2616 + alarm.time.tm_mday, alarm.time.tm_mon + 1,
2617 + alarm.time.tm_year + 1900, alarm.time.tm_hour,
2618 + alarm.time.tm_min, alarm.time.tm_sec);
2619 +
2620 + FD_ZERO(&readfds);
2621 + FD_SET(self->fd, &readfds);
2622 +
2623 + rc = select(self->fd + 1, &readfds, NULL, NULL, &tv);
2624 + ASSERT_NE(-1, rc);
2625 + ASSERT_NE(0, rc);
2626
2627 rc = read(self->fd, &data, sizeof(unsigned long));
2628 ASSERT_NE(-1, rc);
2629 diff --git a/tools/testing/selftests/seccomp/Makefile b/tools/testing/selftests/seccomp/Makefile
2630 index fce7f4ce06925..1760b3e397306 100644
2631 --- a/tools/testing/selftests/seccomp/Makefile
2632 +++ b/tools/testing/selftests/seccomp/Makefile
2633 @@ -9,7 +9,7 @@ BINARIES := seccomp_bpf seccomp_benchmark
2634 CFLAGS += -Wl,-no-as-needed -Wall
2635
2636 seccomp_bpf: seccomp_bpf.c ../kselftest_harness.h
2637 - $(CC) $(CFLAGS) $(LDFLAGS) -lpthread $< -o $@
2638 + $(CC) $(CFLAGS) $(LDFLAGS) $< -lpthread -o $@
2639
2640 TEST_PROGS += $(BINARIES)
2641 EXTRA_CLEAN := $(BINARIES)
2642 diff --git a/tools/testing/selftests/vm/gup_benchmark.c b/tools/testing/selftests/vm/gup_benchmark.c
2643 index 36df55132036f..9601bc24454d9 100644
2644 --- a/tools/testing/selftests/vm/gup_benchmark.c
2645 +++ b/tools/testing/selftests/vm/gup_benchmark.c
2646 @@ -22,6 +22,7 @@ struct gup_benchmark {
2647 __u64 size;
2648 __u32 nr_pages_per_call;
2649 __u32 flags;
2650 + __u64 expansion[10]; /* For future use */
2651 };
2652
2653 int main(int argc, char **argv)