Magellan Linux

Contents of /trunk/kernel-alx-legacy/patches-4.9/0425-4.9.326-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3727 - (show annotations) (download)
Mon Oct 24 14:08:37 2022 UTC (18 months ago) by niro
File size: 99998 byte(s)
-linux-4.9.326
1 diff --git a/Makefile b/Makefile
2 index 6042ded263475..e12236237dfad 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 325
9 +SUBLEVEL = 326
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 diff --git a/arch/arm/lib/xor-neon.c b/arch/arm/lib/xor-neon.c
14 index c691b901092f5..b4feebc385bca 100644
15 --- a/arch/arm/lib/xor-neon.c
16 +++ b/arch/arm/lib/xor-neon.c
17 @@ -29,8 +29,9 @@ MODULE_LICENSE("GPL");
18 * While older versions of GCC do not generate incorrect code, they fail to
19 * recognize the parallel nature of these functions, and emit plain ARM code,
20 * which is known to be slower than the optimized ARM code in asm-arm/xor.h.
21 + *
22 + * #warning This code requires at least version 4.6 of GCC
23 */
24 -#warning This code requires at least version 4.6 of GCC
25 #endif
26
27 #pragma GCC diagnostic ignored "-Wunused-variable"
28 diff --git a/arch/ia64/include/asm/processor.h b/arch/ia64/include/asm/processor.h
29 index ce53c50d0ba44..9f0f9ecbd74d6 100644
30 --- a/arch/ia64/include/asm/processor.h
31 +++ b/arch/ia64/include/asm/processor.h
32 @@ -554,7 +554,7 @@ ia64_get_irr(unsigned int vector)
33 {
34 unsigned int reg = vector / 64;
35 unsigned int bit = vector % 64;
36 - u64 irr;
37 + unsigned long irr;
38
39 switch (reg) {
40 case 0: irr = ia64_getreg(_IA64_REG_CR_IRR0); break;
41 diff --git a/arch/mips/cavium-octeon/octeon-platform.c b/arch/mips/cavium-octeon/octeon-platform.c
42 index 2ecc8d1b05395..f295be8763906 100644
43 --- a/arch/mips/cavium-octeon/octeon-platform.c
44 +++ b/arch/mips/cavium-octeon/octeon-platform.c
45 @@ -130,11 +130,12 @@ static void octeon2_usb_clocks_start(struct device *dev)
46 "refclk-frequency", &clock_rate);
47 if (i) {
48 dev_err(dev, "No UCTL \"refclk-frequency\"\n");
49 + of_node_put(uctl_node);
50 goto exit;
51 }
52 i = of_property_read_string(uctl_node,
53 "refclk-type", &clock_type);
54 -
55 + of_node_put(uctl_node);
56 if (!i && strcmp("crystal", clock_type) == 0)
57 is_crystal_clock = true;
58 }
59 diff --git a/arch/mips/kernel/proc.c b/arch/mips/kernel/proc.c
60 index 4c01ee5b88c99..85efddd81af16 100644
61 --- a/arch/mips/kernel/proc.c
62 +++ b/arch/mips/kernel/proc.c
63 @@ -162,7 +162,7 @@ static void *c_start(struct seq_file *m, loff_t *pos)
64 {
65 unsigned long i = *pos;
66
67 - return i < NR_CPUS ? (void *) (i + 1) : NULL;
68 + return i < nr_cpu_ids ? (void *) (i + 1) : NULL;
69 }
70
71 static void *c_next(struct seq_file *m, void *v, loff_t *pos)
72 diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c
73 index f625fd20b21e6..65fed205383e5 100644
74 --- a/arch/mips/mm/tlbex.c
75 +++ b/arch/mips/mm/tlbex.c
76 @@ -637,7 +637,7 @@ static __maybe_unused void build_convert_pte_to_entrylo(u32 **p,
77 return;
78 }
79
80 - if (cpu_has_rixi && !!_PAGE_NO_EXEC) {
81 + if (cpu_has_rixi && _PAGE_NO_EXEC != 0) {
82 if (fill_includes_sw_bits) {
83 UASM_i_ROTR(p, reg, reg, ilog2(_PAGE_GLOBAL));
84 } else {
85 @@ -2518,7 +2518,7 @@ static void check_pabits(void)
86 unsigned long entry;
87 unsigned pabits, fillbits;
88
89 - if (!cpu_has_rixi || !_PAGE_NO_EXEC) {
90 + if (!cpu_has_rixi || _PAGE_NO_EXEC == 0) {
91 /*
92 * We'll only be making use of the fact that we can rotate bits
93 * into the fill if the CPU supports RIXI, so don't bother
94 diff --git a/arch/nios2/include/asm/entry.h b/arch/nios2/include/asm/entry.h
95 index cf37f55efbc22..bafb7b2ca59fc 100644
96 --- a/arch/nios2/include/asm/entry.h
97 +++ b/arch/nios2/include/asm/entry.h
98 @@ -50,7 +50,8 @@
99 stw r13, PT_R13(sp)
100 stw r14, PT_R14(sp)
101 stw r15, PT_R15(sp)
102 - stw r2, PT_ORIG_R2(sp)
103 + movi r24, -1
104 + stw r24, PT_ORIG_R2(sp)
105 stw r7, PT_ORIG_R7(sp)
106
107 stw ra, PT_RA(sp)
108 diff --git a/arch/nios2/include/asm/ptrace.h b/arch/nios2/include/asm/ptrace.h
109 index 6424621448728..9da34c3022a27 100644
110 --- a/arch/nios2/include/asm/ptrace.h
111 +++ b/arch/nios2/include/asm/ptrace.h
112 @@ -74,6 +74,8 @@ extern void show_regs(struct pt_regs *);
113 ((struct pt_regs *)((unsigned long)current_thread_info() + THREAD_SIZE)\
114 - 1)
115
116 +#define force_successful_syscall_return() (current_pt_regs()->orig_r2 = -1)
117 +
118 int do_syscall_trace_enter(void);
119 void do_syscall_trace_exit(void);
120 #endif /* __ASSEMBLY__ */
121 diff --git a/arch/nios2/kernel/entry.S b/arch/nios2/kernel/entry.S
122 index 1e515ccd698e3..af556588248e7 100644
123 --- a/arch/nios2/kernel/entry.S
124 +++ b/arch/nios2/kernel/entry.S
125 @@ -185,6 +185,7 @@ ENTRY(handle_system_call)
126 ldw r5, PT_R5(sp)
127
128 local_restart:
129 + stw r2, PT_ORIG_R2(sp)
130 /* Check that the requested system call is within limits */
131 movui r1, __NR_syscalls
132 bgeu r2, r1, ret_invsyscall
133 @@ -192,7 +193,6 @@ local_restart:
134 movhi r11, %hiadj(sys_call_table)
135 add r1, r1, r11
136 ldw r1, %lo(sys_call_table)(r1)
137 - beq r1, r0, ret_invsyscall
138
139 /* Check if we are being traced */
140 GET_THREAD_INFO r11
141 @@ -213,6 +213,9 @@ local_restart:
142 translate_rc_and_ret:
143 movi r1, 0
144 bge r2, zero, 3f
145 + ldw r1, PT_ORIG_R2(sp)
146 + addi r1, r1, 1
147 + beq r1, zero, 3f
148 sub r2, zero, r2
149 movi r1, 1
150 3:
151 @@ -255,9 +258,9 @@ traced_system_call:
152 ldw r6, PT_R6(sp)
153 ldw r7, PT_R7(sp)
154
155 - /* Fetch the syscall function, we don't need to check the boundaries
156 - * since this is already done.
157 - */
158 + /* Fetch the syscall function. */
159 + movui r1, __NR_syscalls
160 + bgeu r2, r1, traced_invsyscall
161 slli r1, r2, 2
162 movhi r11,%hiadj(sys_call_table)
163 add r1, r1, r11
164 @@ -276,6 +279,9 @@ traced_system_call:
165 translate_rc_and_ret2:
166 movi r1, 0
167 bge r2, zero, 4f
168 + ldw r1, PT_ORIG_R2(sp)
169 + addi r1, r1, 1
170 + beq r1, zero, 4f
171 sub r2, zero, r2
172 movi r1, 1
173 4:
174 @@ -287,6 +293,11 @@ end_translate_rc_and_ret2:
175 RESTORE_SWITCH_STACK
176 br ret_from_exception
177
178 + /* If the syscall number was invalid return ENOSYS */
179 +traced_invsyscall:
180 + movi r2, -ENOSYS
181 + br translate_rc_and_ret2
182 +
183 Luser_return:
184 GET_THREAD_INFO r11 /* get thread_info pointer */
185 ldw r10, TI_FLAGS(r11) /* get thread_info->flags */
186 @@ -336,9 +347,6 @@ external_interrupt:
187 /* skip if no interrupt is pending */
188 beq r12, r0, ret_from_interrupt
189
190 - movi r24, -1
191 - stw r24, PT_ORIG_R2(sp)
192 -
193 /*
194 * Process an external hardware interrupt.
195 */
196 diff --git a/arch/nios2/kernel/signal.c b/arch/nios2/kernel/signal.c
197 index 20662b0f6c9e3..c1be8e1941385 100644
198 --- a/arch/nios2/kernel/signal.c
199 +++ b/arch/nios2/kernel/signal.c
200 @@ -240,7 +240,7 @@ static int do_signal(struct pt_regs *regs)
201 /*
202 * If we were from a system call, check for system call restarting...
203 */
204 - if (regs->orig_r2 >= 0) {
205 + if (regs->orig_r2 >= 0 && regs->r1) {
206 continue_addr = regs->ea;
207 restart_addr = continue_addr - 4;
208 retval = regs->r2;
209 @@ -261,6 +261,7 @@ static int do_signal(struct pt_regs *regs)
210 regs->ea = restart_addr;
211 break;
212 }
213 + regs->orig_r2 = -1;
214 }
215
216 if (get_signal(&ksig)) {
217 diff --git a/arch/nios2/kernel/syscall_table.c b/arch/nios2/kernel/syscall_table.c
218 index 06e6ac1835b2e..cd10b6eed1283 100644
219 --- a/arch/nios2/kernel/syscall_table.c
220 +++ b/arch/nios2/kernel/syscall_table.c
221 @@ -25,5 +25,6 @@
222 #define __SYSCALL(nr, call) [nr] = (call),
223
224 void *sys_call_table[__NR_syscalls] = {
225 + [0 ... __NR_syscalls-1] = sys_ni_syscall,
226 #include <asm/unistd.h>
227 };
228 diff --git a/arch/nios2/kernel/time.c b/arch/nios2/kernel/time.c
229 index 746bf5caaffc7..3ff56008566e1 100644
230 --- a/arch/nios2/kernel/time.c
231 +++ b/arch/nios2/kernel/time.c
232 @@ -107,7 +107,10 @@ static struct nios2_clocksource nios2_cs = {
233
234 cycles_t get_cycles(void)
235 {
236 - return nios2_timer_read(&nios2_cs.cs);
237 + /* Only read timer if it has been initialized */
238 + if (nios2_cs.timer.base)
239 + return nios2_timer_read(&nios2_cs.cs);
240 + return 0;
241 }
242 EXPORT_SYMBOL(get_cycles);
243
244 diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c
245 index 2e68ca1fe0dbc..e46bda49529c7 100644
246 --- a/arch/parisc/kernel/drivers.c
247 +++ b/arch/parisc/kernel/drivers.c
248 @@ -504,7 +504,6 @@ alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path)
249 dev->id.hversion_rev = iodc_data[1] & 0x0f;
250 dev->id.sversion = ((iodc_data[4] & 0x0f) << 16) |
251 (iodc_data[5] << 8) | iodc_data[6];
252 - dev->hpa.name = parisc_pathname(dev);
253 dev->hpa.start = hpa;
254 /* This is awkward. The STI spec says that gfx devices may occupy
255 * 32MB or 64MB. Unfortunately, we don't know how to tell whether
256 @@ -518,10 +517,10 @@ alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path)
257 dev->hpa.end = hpa + 0xfff;
258 }
259 dev->hpa.flags = IORESOURCE_MEM;
260 - name = parisc_hardware_description(&dev->id);
261 - if (name) {
262 - strlcpy(dev->name, name, sizeof(dev->name));
263 - }
264 + dev->hpa.name = dev->name;
265 + name = parisc_hardware_description(&dev->id) ? : "unknown";
266 + snprintf(dev->name, sizeof(dev->name), "%s [%s]",
267 + name, parisc_pathname(dev));
268
269 /* Silently fail things like mouse ports which are subsumed within
270 * the keyboard controller
271 diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
272 index 11b4ecec04eeb..1413d72689d25 100644
273 --- a/arch/powerpc/kernel/prom.c
274 +++ b/arch/powerpc/kernel/prom.c
275 @@ -682,6 +682,13 @@ void __init early_init_devtree(void *params)
276 of_scan_flat_dt(early_init_dt_scan_root, NULL);
277 of_scan_flat_dt(early_init_dt_scan_memory_ppc, NULL);
278
279 + /*
280 + * As generic code authors expect to be able to use static keys
281 + * in early_param() handlers, we initialize the static keys just
282 + * before parsing early params (it's fine to call jump_label_init()
283 + * more than once).
284 + */
285 + jump_label_init();
286 parse_early_param();
287
288 /* make sure we've parsed cmdline for mem= before this */
289 diff --git a/arch/powerpc/platforms/powernv/rng.c b/arch/powerpc/platforms/powernv/rng.c
290 index dc13ed3f6c2b2..61c0eaafb27a3 100644
291 --- a/arch/powerpc/platforms/powernv/rng.c
292 +++ b/arch/powerpc/platforms/powernv/rng.c
293 @@ -67,6 +67,8 @@ int powernv_get_random_real_mode(unsigned long *v)
294 struct powernv_rng *rng;
295
296 rng = raw_cpu_read(powernv_rng);
297 + if (!rng)
298 + return 0;
299
300 *v = rng_whiten(rng, in_rm64(rng->regs_real));
301
302 diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
303 index d3a597456b6e5..b381813b21d66 100644
304 --- a/arch/powerpc/sysdev/fsl_pci.c
305 +++ b/arch/powerpc/sysdev/fsl_pci.c
306 @@ -524,6 +524,7 @@ int fsl_add_bridge(struct platform_device *pdev, int is_primary)
307 struct resource rsrc;
308 const int *bus_range;
309 u8 hdr_type, progif;
310 + u32 class_code;
311 struct device_node *dev;
312 struct ccsr_pci __iomem *pci;
313 u16 temp;
314 @@ -597,6 +598,13 @@ int fsl_add_bridge(struct platform_device *pdev, int is_primary)
315 PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS;
316 if (fsl_pcie_check_link(hose))
317 hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;
318 + /* Fix Class Code to PCI_CLASS_BRIDGE_PCI_NORMAL for pre-3.0 controller */
319 + if (in_be32(&pci->block_rev1) < PCIE_IP_REV_3_0) {
320 + early_read_config_dword(hose, 0, 0, PCIE_FSL_CSR_CLASSCODE, &class_code);
321 + class_code &= 0xff;
322 + class_code |= PCI_CLASS_BRIDGE_PCI_NORMAL << 8;
323 + early_write_config_dword(hose, 0, 0, PCIE_FSL_CSR_CLASSCODE, class_code);
324 + }
325 } else {
326 /*
327 * Set PBFR(PCI Bus Function Register)[10] = 1 to
328 diff --git a/arch/powerpc/sysdev/fsl_pci.h b/arch/powerpc/sysdev/fsl_pci.h
329 index 151588530b065..caa05c4aa4272 100644
330 --- a/arch/powerpc/sysdev/fsl_pci.h
331 +++ b/arch/powerpc/sysdev/fsl_pci.h
332 @@ -23,6 +23,7 @@ struct platform_device;
333
334 #define PCIE_LTSSM 0x0404 /* PCIE Link Training and Status */
335 #define PCIE_LTSSM_L0 0x16 /* L0 state */
336 +#define PCIE_FSL_CSR_CLASSCODE 0x474 /* FSL GPEX CSR */
337 #define PCIE_IP_REV_2_2 0x02080202 /* PCIE IP block version Rev2.2 */
338 #define PCIE_IP_REV_3_0 0x02080300 /* PCIE IP block version Rev3.0 */
339 #define PIWAR_EN 0x80000000 /* Enable */
340 diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
341 index 3edafdffa687c..2a5a18ca88379 100644
342 --- a/arch/x86/kvm/emulate.c
343 +++ b/arch/x86/kvm/emulate.c
344 @@ -1713,16 +1713,6 @@ static int __load_segment_descriptor(struct x86_emulate_ctxt *ctxt,
345 case VCPU_SREG_TR:
346 if (seg_desc.s || (seg_desc.type != 1 && seg_desc.type != 9))
347 goto exception;
348 - if (!seg_desc.p) {
349 - err_vec = NP_VECTOR;
350 - goto exception;
351 - }
352 - old_desc = seg_desc;
353 - seg_desc.type |= 2; /* busy */
354 - ret = ctxt->ops->cmpxchg_emulated(ctxt, desc_addr, &old_desc, &seg_desc,
355 - sizeof(seg_desc), &ctxt->exception);
356 - if (ret != X86EMUL_CONTINUE)
357 - return ret;
358 break;
359 case VCPU_SREG_LDTR:
360 if (seg_desc.s || seg_desc.type != 2)
361 @@ -1763,6 +1753,15 @@ static int __load_segment_descriptor(struct x86_emulate_ctxt *ctxt,
362 ((u64)base3 << 32)))
363 return emulate_gp(ctxt, 0);
364 }
365 +
366 + if (seg == VCPU_SREG_TR) {
367 + old_desc = seg_desc;
368 + seg_desc.type |= 2; /* busy */
369 + ret = ctxt->ops->cmpxchg_emulated(ctxt, desc_addr, &old_desc, &seg_desc,
370 + sizeof(seg_desc), &ctxt->exception);
371 + if (ret != X86EMUL_CONTINUE)
372 + return ret;
373 + }
374 load:
375 ctxt->ops->set_segment(ctxt, selector, &seg_desc, base3, seg);
376 if (desc)
377 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
378 index 03fdeab057d29..c8e18144ecf2f 100644
379 --- a/arch/x86/kvm/svm.c
380 +++ b/arch/x86/kvm/svm.c
381 @@ -4492,8 +4492,6 @@ static void svm_set_irq(struct kvm_vcpu *vcpu)
382 {
383 struct vcpu_svm *svm = to_svm(vcpu);
384
385 - BUG_ON(!(gif_set(svm)));
386 -
387 trace_kvm_inj_virq(vcpu->arch.interrupt.nr);
388 ++vcpu->stat.irq_injections;
389
390 diff --git a/arch/x86/platform/olpc/olpc-xo1-sci.c b/arch/x86/platform/olpc/olpc-xo1-sci.c
391 index 7fa8b3b53bc0a..193860d7f2c40 100644
392 --- a/arch/x86/platform/olpc/olpc-xo1-sci.c
393 +++ b/arch/x86/platform/olpc/olpc-xo1-sci.c
394 @@ -85,7 +85,7 @@ static void send_ebook_state(void)
395 return;
396 }
397
398 - if (!!test_bit(SW_TABLET_MODE, ebook_switch_idev->sw) == state)
399 + if (test_bit(SW_TABLET_MODE, ebook_switch_idev->sw) == !!state)
400 return; /* Nothing new to report. */
401
402 input_report_switch(ebook_switch_idev, SW_TABLET_MODE, state);
403 diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
404 index 2837b2f982135..10ce6533874f2 100644
405 --- a/drivers/acpi/video_detect.c
406 +++ b/drivers/acpi/video_detect.c
407 @@ -150,7 +150,6 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
408 .callback = video_detect_force_native,
409 .ident = "Clevo NL5xRU",
410 .matches = {
411 - DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
412 DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"),
413 },
414 },
415 @@ -158,59 +157,75 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
416 .callback = video_detect_force_native,
417 .ident = "Clevo NL5xRU",
418 .matches = {
419 - DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"),
420 - DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"),
421 + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
422 + DMI_MATCH(DMI_BOARD_NAME, "AURA1501"),
423 },
424 },
425 {
426 .callback = video_detect_force_native,
427 .ident = "Clevo NL5xRU",
428 .matches = {
429 - DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
430 - DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"),
431 + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
432 + DMI_MATCH(DMI_BOARD_NAME, "EDUBOOK1502"),
433 },
434 },
435 {
436 .callback = video_detect_force_native,
437 - .ident = "Clevo NL5xRU",
438 + .ident = "Clevo NL5xNU",
439 .matches = {
440 - DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
441 - DMI_MATCH(DMI_BOARD_NAME, "AURA1501"),
442 + DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"),
443 },
444 },
445 + /*
446 + * The TongFang PF5PU1G, PF4NU1F, PF5NU1G, and PF5LUXG/TUXEDO BA15 Gen10,
447 + * Pulse 14/15 Gen1, and Pulse 15 Gen2 have the same problem as the Clevo
448 + * NL5xRU and NL5xNU/TUXEDO Aura 15 Gen1 and Gen2. See the description
449 + * above.
450 + */
451 {
452 .callback = video_detect_force_native,
453 - .ident = "Clevo NL5xRU",
454 + .ident = "TongFang PF5PU1G",
455 .matches = {
456 - DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
457 - DMI_MATCH(DMI_BOARD_NAME, "EDUBOOK1502"),
458 + DMI_MATCH(DMI_BOARD_NAME, "PF5PU1G"),
459 },
460 },
461 {
462 .callback = video_detect_force_native,
463 - .ident = "Clevo NL5xNU",
464 + .ident = "TongFang PF4NU1F",
465 + .matches = {
466 + DMI_MATCH(DMI_BOARD_NAME, "PF4NU1F"),
467 + },
468 + },
469 + {
470 + .callback = video_detect_force_native,
471 + .ident = "TongFang PF4NU1F",
472 .matches = {
473 DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
474 - DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"),
475 + DMI_MATCH(DMI_BOARD_NAME, "PULSE1401"),
476 },
477 },
478 {
479 .callback = video_detect_force_native,
480 - .ident = "Clevo NL5xNU",
481 + .ident = "TongFang PF5NU1G",
482 .matches = {
483 - DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"),
484 - DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"),
485 + DMI_MATCH(DMI_BOARD_NAME, "PF5NU1G"),
486 },
487 },
488 {
489 .callback = video_detect_force_native,
490 - .ident = "Clevo NL5xNU",
491 + .ident = "TongFang PF5NU1G",
492 .matches = {
493 - DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
494 - DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"),
495 + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
496 + DMI_MATCH(DMI_BOARD_NAME, "PULSE1501"),
497 + },
498 + },
499 + {
500 + .callback = video_detect_force_native,
501 + .ident = "TongFang PF5LUXG",
502 + .matches = {
503 + DMI_MATCH(DMI_BOARD_NAME, "PF5LUXG"),
504 },
505 },
506 -
507 /*
508 * These models have a working acpi_video backlight control, and using
509 * native backlight causes a regression where backlight does not work
510 diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
511 index 07f96a0321498..d1422aec99139 100644
512 --- a/drivers/ata/libata-eh.c
513 +++ b/drivers/ata/libata-eh.c
514 @@ -2439,6 +2439,7 @@ const char *ata_get_cmd_descript(u8 command)
515 { ATA_CMD_WRITE_QUEUED_FUA_EXT, "WRITE DMA QUEUED FUA EXT" },
516 { ATA_CMD_FPDMA_READ, "READ FPDMA QUEUED" },
517 { ATA_CMD_FPDMA_WRITE, "WRITE FPDMA QUEUED" },
518 + { ATA_CMD_NCQ_NON_DATA, "NCQ NON-DATA" },
519 { ATA_CMD_FPDMA_SEND, "SEND FPDMA QUEUED" },
520 { ATA_CMD_FPDMA_RECV, "RECEIVE FPDMA QUEUED" },
521 { ATA_CMD_PIO_READ, "READ SECTOR(S)" },
522 diff --git a/drivers/atm/idt77252.c b/drivers/atm/idt77252.c
523 index 89adb49e435ef..bcc42134aa9b8 100644
524 --- a/drivers/atm/idt77252.c
525 +++ b/drivers/atm/idt77252.c
526 @@ -3777,6 +3777,7 @@ static void __exit idt77252_exit(void)
527 card = idt77252_chain;
528 dev = card->atmdev;
529 idt77252_chain = card->next;
530 + del_timer_sync(&card->tst_timer);
531
532 if (dev->phy->stop)
533 dev->phy->stop(dev);
534 diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c
535 index 8bff14ae16b0e..f0368d9a0154d 100644
536 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c
537 +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c
538 @@ -33,7 +33,7 @@ nvbios_addr(struct nvkm_bios *bios, u32 *addr, u8 size)
539 {
540 u32 p = *addr;
541
542 - if (*addr > bios->image0_size && bios->imaged_addr) {
543 + if (*addr >= bios->image0_size && bios->imaged_addr) {
544 *addr -= bios->image0_size;
545 *addr += bios->imaged_addr;
546 }
547 diff --git a/drivers/irqchip/irq-tegra.c b/drivers/irqchip/irq-tegra.c
548 index 3973a14bb15ba..02ffefd5011ad 100644
549 --- a/drivers/irqchip/irq-tegra.c
550 +++ b/drivers/irqchip/irq-tegra.c
551 @@ -157,10 +157,10 @@ static int tegra_ictlr_suspend(void)
552 lic->cop_iep[i] = readl_relaxed(ictlr + ICTLR_COP_IEP_CLASS);
553
554 /* Disable COP interrupts */
555 - writel_relaxed(~0ul, ictlr + ICTLR_COP_IER_CLR);
556 + writel_relaxed(GENMASK(31, 0), ictlr + ICTLR_COP_IER_CLR);
557
558 /* Disable CPU interrupts */
559 - writel_relaxed(~0ul, ictlr + ICTLR_CPU_IER_CLR);
560 + writel_relaxed(GENMASK(31, 0), ictlr + ICTLR_CPU_IER_CLR);
561
562 /* Enable the wakeup sources of ictlr */
563 writel_relaxed(lic->ictlr_wake_mask[i], ictlr + ICTLR_CPU_IER_SET);
564 @@ -181,12 +181,12 @@ static void tegra_ictlr_resume(void)
565
566 writel_relaxed(lic->cpu_iep[i],
567 ictlr + ICTLR_CPU_IEP_CLASS);
568 - writel_relaxed(~0ul, ictlr + ICTLR_CPU_IER_CLR);
569 + writel_relaxed(GENMASK(31, 0), ictlr + ICTLR_CPU_IER_CLR);
570 writel_relaxed(lic->cpu_ier[i],
571 ictlr + ICTLR_CPU_IER_SET);
572 writel_relaxed(lic->cop_iep[i],
573 ictlr + ICTLR_COP_IEP_CLASS);
574 - writel_relaxed(~0ul, ictlr + ICTLR_COP_IER_CLR);
575 + writel_relaxed(GENMASK(31, 0), ictlr + ICTLR_COP_IER_CLR);
576 writel_relaxed(lic->cop_ier[i],
577 ictlr + ICTLR_COP_IER_SET);
578 }
579 @@ -321,7 +321,7 @@ static int __init tegra_ictlr_init(struct device_node *node,
580 lic->base[i] = base;
581
582 /* Disable all interrupts */
583 - writel_relaxed(~0UL, base + ICTLR_CPU_IER_CLR);
584 + writel_relaxed(GENMASK(31, 0), base + ICTLR_CPU_IER_CLR);
585 /* All interrupts target IRQ */
586 writel_relaxed(0, base + ICTLR_CPU_IEP_CLASS);
587
588 diff --git a/drivers/macintosh/adb.c b/drivers/macintosh/adb.c
589 index 226179b975a04..1f5db323e5a5d 100644
590 --- a/drivers/macintosh/adb.c
591 +++ b/drivers/macintosh/adb.c
592 @@ -650,7 +650,7 @@ do_adb_query(struct adb_request *req)
593
594 switch(req->data[1]) {
595 case ADB_QUERY_GETDEVINFO:
596 - if (req->nbytes < 3)
597 + if (req->nbytes < 3 || req->data[2] >= 16)
598 break;
599 mutex_lock(&adb_handler_mutex);
600 req->reply[0] = adb_handler[req->data[2]].original_address;
601 diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
602 index 3f389b267e048..fe721cd9da74a 100644
603 --- a/drivers/md/dm-raid.c
604 +++ b/drivers/md/dm-raid.c
605 @@ -3173,7 +3173,7 @@ static void raid_status(struct dm_target *ti, status_type_t type,
606 {
607 struct raid_set *rs = ti->private;
608 struct mddev *mddev = &rs->md;
609 - struct r5conf *conf = mddev->private;
610 + struct r5conf *conf = rs_is_raid456(rs) ? mddev->private : NULL;
611 int i, max_nr_stripes = conf ? conf->max_nr_stripes : 0;
612 bool array_in_sync;
613 unsigned int raid_param_cnt = 1; /* at least 1 for chunksize */
614 diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
615 index 717787d09e0f8..02e974a588e18 100644
616 --- a/drivers/md/raid10.c
617 +++ b/drivers/md/raid10.c
618 @@ -1785,9 +1785,12 @@ static int raid10_remove_disk(struct mddev *mddev, struct md_rdev *rdev)
619 int err = 0;
620 int number = rdev->raid_disk;
621 struct md_rdev **rdevp;
622 - struct raid10_info *p = conf->mirrors + number;
623 + struct raid10_info *p;
624
625 print_conf(conf);
626 + if (unlikely(number >= mddev->raid_disks))
627 + return 0;
628 + p = conf->mirrors + number;
629 if (rdev == p->rdev)
630 rdevp = &p->rdev;
631 else if (rdev == p->replacement)
632 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
633 index b396e78b1b6d3..bea171a5e663b 100644
634 --- a/drivers/md/raid5.c
635 +++ b/drivers/md/raid5.c
636 @@ -2513,10 +2513,10 @@ static void raid5_end_write_request(struct bio *bi)
637 if (!test_and_clear_bit(R5_DOUBLE_LOCKED, &sh->dev[i].flags))
638 clear_bit(R5_LOCKED, &sh->dev[i].flags);
639 set_bit(STRIPE_HANDLE, &sh->state);
640 - raid5_release_stripe(sh);
641
642 if (sh->batch_head && sh != sh->batch_head)
643 raid5_release_stripe(sh->batch_head);
644 + raid5_release_stripe(sh);
645 }
646
647 static void raid5_build_block(struct stripe_head *sh, int i, int previous)
648 diff --git a/drivers/misc/cxl/irq.c b/drivers/misc/cxl/irq.c
649 index dec60f58a7677..99e2bd65825fc 100644
650 --- a/drivers/misc/cxl/irq.c
651 +++ b/drivers/misc/cxl/irq.c
652 @@ -302,6 +302,7 @@ int afu_allocate_irqs(struct cxl_context *ctx, u32 count)
653
654 out:
655 cxl_ops->release_irq_ranges(&ctx->irqs, ctx->afu->adapter);
656 + bitmap_free(ctx->irq_bitmap);
657 afu_irq_name_free(ctx);
658 return -ENOMEM;
659 }
660 diff --git a/drivers/net/can/usb/ems_usb.c b/drivers/net/can/usb/ems_usb.c
661 index 4d01b6cbf0ebf..21e559943e341 100644
662 --- a/drivers/net/can/usb/ems_usb.c
663 +++ b/drivers/net/can/usb/ems_usb.c
664 @@ -206,7 +206,7 @@ struct __packed ems_cpc_msg {
665 __le32 ts_sec; /* timestamp in seconds */
666 __le32 ts_nsec; /* timestamp in nano seconds */
667
668 - union {
669 + union __packed {
670 u8 generic[64];
671 struct cpc_can_msg can_msg;
672 struct cpc_can_params can_params;
673 diff --git a/drivers/net/ethernet/freescale/fec_ptp.c b/drivers/net/ethernet/freescale/fec_ptp.c
674 index 031d4b3a544c0..520ee85849621 100644
675 --- a/drivers/net/ethernet/freescale/fec_ptp.c
676 +++ b/drivers/net/ethernet/freescale/fec_ptp.c
677 @@ -155,11 +155,7 @@ static int fec_ptp_enable_pps(struct fec_enet_private *fep, uint enable)
678 * NSEC_PER_SEC - ts.tv_nsec. Add the remaining nanoseconds
679 * to current timer would be next second.
680 */
681 - tempval = readl(fep->hwp + FEC_ATIME_CTRL);
682 - tempval |= FEC_T_CTRL_CAPTURE;
683 - writel(tempval, fep->hwp + FEC_ATIME_CTRL);
684 -
685 - tempval = readl(fep->hwp + FEC_ATIME);
686 + tempval = fep->cc.read(&fep->cc);
687 /* Convert the ptp local counter to 1588 timestamp */
688 ns = timecounter_cyc2time(&fep->tc, tempval);
689 ts = ns_to_timespec64(ns);
690 diff --git a/drivers/net/sungem_phy.c b/drivers/net/sungem_phy.c
691 index 92578d72e4ee5..c5efdde21c2e0 100644
692 --- a/drivers/net/sungem_phy.c
693 +++ b/drivers/net/sungem_phy.c
694 @@ -453,6 +453,7 @@ static int bcm5421_init(struct mii_phy* phy)
695 int can_low_power = 1;
696 if (np == NULL || of_get_property(np, "no-autolowpower", NULL))
697 can_low_power = 0;
698 + of_node_put(np);
699 if (can_low_power) {
700 /* Enable automatic low-power */
701 sungem_phy_write(phy, 0x1c, 0x9002);
702 diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c
703 index 460a0294ea97e..48938d00ff7e8 100644
704 --- a/drivers/net/usb/ax88179_178a.c
705 +++ b/drivers/net/usb/ax88179_178a.c
706 @@ -1703,7 +1703,7 @@ static const struct driver_info ax88179_info = {
707 .link_reset = ax88179_link_reset,
708 .reset = ax88179_reset,
709 .stop = ax88179_stop,
710 - .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP,
711 + .flags = FLAG_ETHER | FLAG_FRAMING_AX,
712 .rx_fixup = ax88179_rx_fixup,
713 .tx_fixup = ax88179_tx_fixup,
714 };
715 @@ -1716,7 +1716,7 @@ static const struct driver_info ax88178a_info = {
716 .link_reset = ax88179_link_reset,
717 .reset = ax88179_reset,
718 .stop = ax88179_stop,
719 - .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP,
720 + .flags = FLAG_ETHER | FLAG_FRAMING_AX,
721 .rx_fixup = ax88179_rx_fixup,
722 .tx_fixup = ax88179_tx_fixup,
723 };
724 @@ -1729,7 +1729,7 @@ static const struct driver_info cypress_GX3_info = {
725 .link_reset = ax88179_link_reset,
726 .reset = ax88179_reset,
727 .stop = ax88179_stop,
728 - .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP,
729 + .flags = FLAG_ETHER | FLAG_FRAMING_AX,
730 .rx_fixup = ax88179_rx_fixup,
731 .tx_fixup = ax88179_tx_fixup,
732 };
733 @@ -1742,7 +1742,7 @@ static const struct driver_info dlink_dub1312_info = {
734 .link_reset = ax88179_link_reset,
735 .reset = ax88179_reset,
736 .stop = ax88179_stop,
737 - .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP,
738 + .flags = FLAG_ETHER | FLAG_FRAMING_AX,
739 .rx_fixup = ax88179_rx_fixup,
740 .tx_fixup = ax88179_tx_fixup,
741 };
742 @@ -1755,7 +1755,7 @@ static const struct driver_info sitecom_info = {
743 .link_reset = ax88179_link_reset,
744 .reset = ax88179_reset,
745 .stop = ax88179_stop,
746 - .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP,
747 + .flags = FLAG_ETHER | FLAG_FRAMING_AX,
748 .rx_fixup = ax88179_rx_fixup,
749 .tx_fixup = ax88179_tx_fixup,
750 };
751 @@ -1768,7 +1768,7 @@ static const struct driver_info samsung_info = {
752 .link_reset = ax88179_link_reset,
753 .reset = ax88179_reset,
754 .stop = ax88179_stop,
755 - .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP,
756 + .flags = FLAG_ETHER | FLAG_FRAMING_AX,
757 .rx_fixup = ax88179_rx_fixup,
758 .tx_fixup = ax88179_tx_fixup,
759 };
760 @@ -1781,7 +1781,7 @@ static const struct driver_info lenovo_info = {
761 .link_reset = ax88179_link_reset,
762 .reset = ax88179_reset,
763 .stop = ax88179_stop,
764 - .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP,
765 + .flags = FLAG_ETHER | FLAG_FRAMING_AX,
766 .rx_fixup = ax88179_rx_fixup,
767 .tx_fixup = ax88179_tx_fixup,
768 };
769 diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
770 index d8253c6ac2b08..f1cb512c55ac7 100644
771 --- a/drivers/net/usb/usbnet.c
772 +++ b/drivers/net/usb/usbnet.c
773 @@ -847,13 +847,11 @@ int usbnet_stop (struct net_device *net)
774
775 mpn = !test_and_clear_bit(EVENT_NO_RUNTIME_PM, &dev->flags);
776
777 - /* deferred work (task, timer, softirq) must also stop.
778 - * can't flush_scheduled_work() until we drop rtnl (later),
779 - * else workers could deadlock; so make workers a NOP.
780 - */
781 + /* deferred work (timer, softirq, task) must also stop */
782 dev->flags = 0;
783 del_timer_sync (&dev->delay);
784 tasklet_kill (&dev->bh);
785 + cancel_work_sync(&dev->kevent);
786 if (!pm)
787 usb_autopm_put_interface(dev->intf);
788
789 @@ -1577,8 +1575,6 @@ void usbnet_disconnect (struct usb_interface *intf)
790 net = dev->net;
791 unregister_netdev (net);
792
793 - cancel_work_sync(&dev->kevent);
794 -
795 usb_scuttle_anchored_urbs(&dev->deferred);
796
797 if (dev->driver_info->unbind)
798 diff --git a/drivers/net/wireless/mediatek/mt7601u/usb.c b/drivers/net/wireless/mediatek/mt7601u/usb.c
799 index 416c6045ff312..ae83a5c361279 100644
800 --- a/drivers/net/wireless/mediatek/mt7601u/usb.c
801 +++ b/drivers/net/wireless/mediatek/mt7601u/usb.c
802 @@ -34,6 +34,7 @@ static struct usb_device_id mt7601u_device_table[] = {
803 { USB_DEVICE(0x2717, 0x4106) },
804 { USB_DEVICE(0x2955, 0x0001) },
805 { USB_DEVICE(0x2955, 0x1001) },
806 + { USB_DEVICE(0x2955, 0x1003) },
807 { USB_DEVICE(0x2a5f, 0x1000) },
808 { USB_DEVICE(0x7392, 0x7710) },
809 { 0, }
810 diff --git a/drivers/pinctrl/nomadik/pinctrl-nomadik.c b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
811 index 6e237c46e1bd9..969ee6b7b16b7 100644
812 --- a/drivers/pinctrl/nomadik/pinctrl-nomadik.c
813 +++ b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
814 @@ -1455,8 +1455,10 @@ static int nmk_pinctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
815
816 has_config = nmk_pinctrl_dt_get_config(np, &configs);
817 np_config = of_parse_phandle(np, "ste,config", 0);
818 - if (np_config)
819 + if (np_config) {
820 has_config |= nmk_pinctrl_dt_get_config(np_config, &configs);
821 + of_node_put(np_config);
822 + }
823 if (has_config) {
824 const char *gpio_name;
825 const char *pin;
826 diff --git a/drivers/pinctrl/qcom/pinctrl-msm8916.c b/drivers/pinctrl/qcom/pinctrl-msm8916.c
827 index 20ebf244e80de..359f5b43bebc2 100644
828 --- a/drivers/pinctrl/qcom/pinctrl-msm8916.c
829 +++ b/drivers/pinctrl/qcom/pinctrl-msm8916.c
830 @@ -852,8 +852,8 @@ static const struct msm_pingroup msm8916_groups[] = {
831 PINGROUP(28, pwr_modem_enabled_a, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, atest_combodac),
832 PINGROUP(29, cci_i2c, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, atest_combodac),
833 PINGROUP(30, cci_i2c, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
834 - PINGROUP(31, cci_timer0, NA, NA, NA, NA, NA, NA, NA, NA),
835 - PINGROUP(32, cci_timer1, NA, NA, NA, NA, NA, NA, NA, NA),
836 + PINGROUP(31, cci_timer0, flash_strobe, NA, NA, NA, NA, NA, NA, NA),
837 + PINGROUP(32, cci_timer1, flash_strobe, NA, NA, NA, NA, NA, NA, NA),
838 PINGROUP(33, cci_async, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
839 PINGROUP(34, pwr_nav_enabled_a, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
840 PINGROUP(35, pwr_crypto_enabled_a, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
841 diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c
842 index fd622021748f8..237b70463b467 100644
843 --- a/drivers/s390/scsi/zfcp_fc.c
844 +++ b/drivers/s390/scsi/zfcp_fc.c
845 @@ -144,27 +144,33 @@ void zfcp_fc_enqueue_event(struct zfcp_adapter *adapter,
846
847 static int zfcp_fc_wka_port_get(struct zfcp_fc_wka_port *wka_port)
848 {
849 + int ret = -EIO;
850 +
851 if (mutex_lock_interruptible(&wka_port->mutex))
852 return -ERESTARTSYS;
853
854 if (wka_port->status == ZFCP_FC_WKA_PORT_OFFLINE ||
855 wka_port->status == ZFCP_FC_WKA_PORT_CLOSING) {
856 wka_port->status = ZFCP_FC_WKA_PORT_OPENING;
857 - if (zfcp_fsf_open_wka_port(wka_port))
858 + if (zfcp_fsf_open_wka_port(wka_port)) {
859 + /* could not even send request, nothing to wait for */
860 wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE;
861 + goto out;
862 + }
863 }
864
865 - mutex_unlock(&wka_port->mutex);
866 -
867 - wait_event(wka_port->completion_wq,
868 + wait_event(wka_port->opened,
869 wka_port->status == ZFCP_FC_WKA_PORT_ONLINE ||
870 wka_port->status == ZFCP_FC_WKA_PORT_OFFLINE);
871
872 if (wka_port->status == ZFCP_FC_WKA_PORT_ONLINE) {
873 atomic_inc(&wka_port->refcount);
874 - return 0;
875 + ret = 0;
876 + goto out;
877 }
878 - return -EIO;
879 +out:
880 + mutex_unlock(&wka_port->mutex);
881 + return ret;
882 }
883
884 static void zfcp_fc_wka_port_offline(struct work_struct *work)
885 @@ -180,9 +186,12 @@ static void zfcp_fc_wka_port_offline(struct work_struct *work)
886
887 wka_port->status = ZFCP_FC_WKA_PORT_CLOSING;
888 if (zfcp_fsf_close_wka_port(wka_port)) {
889 + /* could not even send request, nothing to wait for */
890 wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE;
891 - wake_up(&wka_port->completion_wq);
892 + goto out;
893 }
894 + wait_event(wka_port->closed,
895 + wka_port->status == ZFCP_FC_WKA_PORT_OFFLINE);
896 out:
897 mutex_unlock(&wka_port->mutex);
898 }
899 @@ -192,13 +201,15 @@ static void zfcp_fc_wka_port_put(struct zfcp_fc_wka_port *wka_port)
900 if (atomic_dec_return(&wka_port->refcount) != 0)
901 return;
902 /* wait 10 milliseconds, other reqs might pop in */
903 - schedule_delayed_work(&wka_port->work, HZ / 100);
904 + queue_delayed_work(wka_port->adapter->work_queue, &wka_port->work,
905 + msecs_to_jiffies(10));
906 }
907
908 static void zfcp_fc_wka_port_init(struct zfcp_fc_wka_port *wka_port, u32 d_id,
909 struct zfcp_adapter *adapter)
910 {
911 - init_waitqueue_head(&wka_port->completion_wq);
912 + init_waitqueue_head(&wka_port->opened);
913 + init_waitqueue_head(&wka_port->closed);
914
915 wka_port->adapter = adapter;
916 wka_port->d_id = d_id;
917 diff --git a/drivers/s390/scsi/zfcp_fc.h b/drivers/s390/scsi/zfcp_fc.h
918 index a2275825186fe..2da269cd3101b 100644
919 --- a/drivers/s390/scsi/zfcp_fc.h
920 +++ b/drivers/s390/scsi/zfcp_fc.h
921 @@ -169,7 +169,8 @@ enum zfcp_fc_wka_status {
922 /**
923 * struct zfcp_fc_wka_port - representation of well-known-address (WKA) FC port
924 * @adapter: Pointer to adapter structure this WKA port belongs to
925 - * @completion_wq: Wait for completion of open/close command
926 + * @opened: Wait for completion of open command
927 + * @closed: Wait for completion of close command
928 * @status: Current status of WKA port
929 * @refcount: Reference count to keep port open as long as it is in use
930 * @d_id: FC destination id or well-known-address
931 @@ -179,7 +180,8 @@ enum zfcp_fc_wka_status {
932 */
933 struct zfcp_fc_wka_port {
934 struct zfcp_adapter *adapter;
935 - wait_queue_head_t completion_wq;
936 + wait_queue_head_t opened;
937 + wait_queue_head_t closed;
938 enum zfcp_fc_wka_status status;
939 atomic_t refcount;
940 u32 d_id;
941 diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
942 index 0d2bcb33697f3..7de76562678b8 100644
943 --- a/drivers/s390/scsi/zfcp_fsf.c
944 +++ b/drivers/s390/scsi/zfcp_fsf.c
945 @@ -1582,7 +1582,7 @@ static void zfcp_fsf_open_wka_port_handler(struct zfcp_fsf_req *req)
946 wka_port->status = ZFCP_FC_WKA_PORT_ONLINE;
947 }
948 out:
949 - wake_up(&wka_port->completion_wq);
950 + wake_up(&wka_port->opened);
951 }
952
953 /**
954 @@ -1640,7 +1640,7 @@ static void zfcp_fsf_close_wka_port_handler(struct zfcp_fsf_req *req)
955 }
956
957 wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE;
958 - wake_up(&wka_port->completion_wq);
959 + wake_up(&wka_port->closed);
960 }
961
962 /**
963 diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
964 index 417927b279b67..1178656d90cb0 100644
965 --- a/drivers/scsi/sg.c
966 +++ b/drivers/scsi/sg.c
967 @@ -196,7 +196,7 @@ static void sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size);
968 static void sg_unlink_reserve(Sg_fd * sfp, Sg_request * srp);
969 static Sg_fd *sg_add_sfp(Sg_device * sdp);
970 static void sg_remove_sfp(struct kref *);
971 -static Sg_request *sg_get_rq_mark(Sg_fd * sfp, int pack_id);
972 +static Sg_request *sg_get_rq_mark(Sg_fd * sfp, int pack_id, bool *busy);
973 static Sg_request *sg_add_request(Sg_fd * sfp);
974 static int sg_remove_request(Sg_fd * sfp, Sg_request * srp);
975 static Sg_device *sg_get_dev(int dev);
976 @@ -418,6 +418,7 @@ sg_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos)
977 Sg_fd *sfp;
978 Sg_request *srp;
979 int req_pack_id = -1;
980 + bool busy;
981 sg_io_hdr_t *hp;
982 struct sg_header *old_hdr = NULL;
983 int retval = 0;
984 @@ -465,25 +466,19 @@ sg_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos)
985 } else
986 req_pack_id = old_hdr->pack_id;
987 }
988 - srp = sg_get_rq_mark(sfp, req_pack_id);
989 + srp = sg_get_rq_mark(sfp, req_pack_id, &busy);
990 if (!srp) { /* now wait on packet to arrive */
991 - if (atomic_read(&sdp->detaching)) {
992 - retval = -ENODEV;
993 - goto free_old_hdr;
994 - }
995 if (filp->f_flags & O_NONBLOCK) {
996 retval = -EAGAIN;
997 goto free_old_hdr;
998 }
999 retval = wait_event_interruptible(sfp->read_wait,
1000 - (atomic_read(&sdp->detaching) ||
1001 - (srp = sg_get_rq_mark(sfp, req_pack_id))));
1002 - if (atomic_read(&sdp->detaching)) {
1003 - retval = -ENODEV;
1004 - goto free_old_hdr;
1005 - }
1006 - if (retval) {
1007 - /* -ERESTARTSYS as signal hit process */
1008 + ((srp = sg_get_rq_mark(sfp, req_pack_id, &busy)) ||
1009 + (!busy && atomic_read(&sdp->detaching))));
1010 + if (!srp) {
1011 + /* signal or detaching */
1012 + if (!retval)
1013 + retval = -ENODEV;
1014 goto free_old_hdr;
1015 }
1016 }
1017 @@ -936,9 +931,7 @@ sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg)
1018 if (result < 0)
1019 return result;
1020 result = wait_event_interruptible(sfp->read_wait,
1021 - (srp_done(sfp, srp) || atomic_read(&sdp->detaching)));
1022 - if (atomic_read(&sdp->detaching))
1023 - return -ENODEV;
1024 + srp_done(sfp, srp));
1025 write_lock_irq(&sfp->rq_list_lock);
1026 if (srp->done) {
1027 srp->done = 2;
1028 @@ -2095,19 +2088,28 @@ sg_unlink_reserve(Sg_fd * sfp, Sg_request * srp)
1029 }
1030
1031 static Sg_request *
1032 -sg_get_rq_mark(Sg_fd * sfp, int pack_id)
1033 +sg_get_rq_mark(Sg_fd * sfp, int pack_id, bool *busy)
1034 {
1035 Sg_request *resp;
1036 unsigned long iflags;
1037
1038 + *busy = false;
1039 write_lock_irqsave(&sfp->rq_list_lock, iflags);
1040 list_for_each_entry(resp, &sfp->rq_list, entry) {
1041 - /* look for requests that are ready + not SG_IO owned */
1042 - if ((1 == resp->done) && (!resp->sg_io_owned) &&
1043 + /* look for requests that are not SG_IO owned */
1044 + if ((!resp->sg_io_owned) &&
1045 ((-1 == pack_id) || (resp->header.pack_id == pack_id))) {
1046 - resp->done = 2; /* guard against other readers */
1047 - write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1048 - return resp;
1049 + switch (resp->done) {
1050 + case 0: /* request active */
1051 + *busy = true;
1052 + break;
1053 + case 1: /* request done; response ready to return */
1054 + resp->done = 2; /* guard against other readers */
1055 + write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1056 + return resp;
1057 + case 2: /* response already being returned */
1058 + break;
1059 + }
1060 }
1061 }
1062 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1063 @@ -2161,6 +2163,15 @@ sg_remove_request(Sg_fd * sfp, Sg_request * srp)
1064 res = 1;
1065 }
1066 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1067 +
1068 + /*
1069 + * If the device is detaching, wakeup any readers in case we just
1070 + * removed the last response, which would leave nothing for them to
1071 + * return other than -ENODEV.
1072 + */
1073 + if (unlikely(atomic_read(&sfp->parentdp->detaching)))
1074 + wake_up_interruptible_all(&sfp->read_wait);
1075 +
1076 return res;
1077 }
1078
1079 diff --git a/drivers/scsi/ufs/ufshcd-pltfrm.c b/drivers/scsi/ufs/ufshcd-pltfrm.c
1080 index e9b0cc4cbb4d2..d4ab22b42d69b 100644
1081 --- a/drivers/scsi/ufs/ufshcd-pltfrm.c
1082 +++ b/drivers/scsi/ufs/ufshcd-pltfrm.c
1083 @@ -126,9 +126,20 @@ out:
1084 return ret;
1085 }
1086
1087 +static bool phandle_exists(const struct device_node *np,
1088 + const char *phandle_name, int index)
1089 +{
1090 + struct device_node *parse_np = of_parse_phandle(np, phandle_name, index);
1091 +
1092 + if (parse_np)
1093 + of_node_put(parse_np);
1094 +
1095 + return parse_np != NULL;
1096 +}
1097 +
1098 #define MAX_PROP_SIZE 32
1099 static int ufshcd_populate_vreg(struct device *dev, const char *name,
1100 - struct ufs_vreg **out_vreg)
1101 + struct ufs_vreg **out_vreg)
1102 {
1103 int ret = 0;
1104 char prop_name[MAX_PROP_SIZE];
1105 @@ -141,7 +152,7 @@ static int ufshcd_populate_vreg(struct device *dev, const char *name,
1106 }
1107
1108 snprintf(prop_name, MAX_PROP_SIZE, "%s-supply", name);
1109 - if (!of_parse_phandle(np, prop_name, 0)) {
1110 + if (!phandle_exists(np, prop_name, 0)) {
1111 dev_info(dev, "%s: Unable to find %s regulator, assuming enabled\n",
1112 __func__, prop_name);
1113 goto out;
1114 diff --git a/drivers/staging/android/ion/ion-ioctl.c b/drivers/staging/android/ion/ion-ioctl.c
1115 index a27865b94416b..e020a23d05f2f 100644
1116 --- a/drivers/staging/android/ion/ion-ioctl.c
1117 +++ b/drivers/staging/android/ion/ion-ioctl.c
1118 @@ -64,14 +64,10 @@ static struct ion_handle *pass_to_user(struct ion_handle *handle)
1119 }
1120
1121 /* Must hold the client lock */
1122 -static int user_ion_handle_put_nolock(struct ion_handle *handle)
1123 +static void user_ion_handle_put_nolock(struct ion_handle *handle)
1124 {
1125 - int ret;
1126 -
1127 if (--handle->user_ref_count == 0)
1128 - ret = ion_handle_put_nolock(handle);
1129 -
1130 - return ret;
1131 + ion_handle_put_nolock(handle);
1132 }
1133
1134 static void user_ion_free_nolock(struct ion_client *client,
1135 diff --git a/drivers/tty/serial/ucc_uart.c b/drivers/tty/serial/ucc_uart.c
1136 index 481eb2989a1e1..ed1658b61e541 100644
1137 --- a/drivers/tty/serial/ucc_uart.c
1138 +++ b/drivers/tty/serial/ucc_uart.c
1139 @@ -1143,6 +1143,8 @@ static unsigned int soc_info(unsigned int *rev_h, unsigned int *rev_l)
1140 /* No compatible property, so try the name. */
1141 soc_string = np->name;
1142
1143 + of_node_put(np);
1144 +
1145 /* Extract the SOC number from the "PowerPC," string */
1146 if ((sscanf(soc_string, "PowerPC,%u", &soc) != 1) || !soc)
1147 return 0;
1148 diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
1149 index a4b2313607995..345edd7f4f922 100644
1150 --- a/drivers/usb/core/hcd.c
1151 +++ b/drivers/usb/core/hcd.c
1152 @@ -1803,7 +1803,6 @@ static void usb_giveback_urb_bh(unsigned long param)
1153
1154 spin_lock_irq(&bh->lock);
1155 bh->running = true;
1156 - restart:
1157 list_replace_init(&bh->head, &local_list);
1158 spin_unlock_irq(&bh->lock);
1159
1160 @@ -1817,10 +1816,17 @@ static void usb_giveback_urb_bh(unsigned long param)
1161 bh->completing_ep = NULL;
1162 }
1163
1164 - /* check if there are new URBs to giveback */
1165 + /*
1166 + * giveback new URBs next time to prevent this function
1167 + * from not exiting for a long time.
1168 + */
1169 spin_lock_irq(&bh->lock);
1170 - if (!list_empty(&bh->head))
1171 - goto restart;
1172 + if (!list_empty(&bh->head)) {
1173 + if (bh->high_prio)
1174 + tasklet_hi_schedule(&bh->bh);
1175 + else
1176 + tasklet_schedule(&bh->bh);
1177 + }
1178 bh->running = false;
1179 spin_unlock_irq(&bh->lock);
1180 }
1181 @@ -1845,7 +1851,7 @@ static void usb_giveback_urb_bh(unsigned long param)
1182 void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status)
1183 {
1184 struct giveback_urb_bh *bh;
1185 - bool running, high_prio_bh;
1186 + bool running;
1187
1188 /* pass status to tasklet via unlinked */
1189 if (likely(!urb->unlinked))
1190 @@ -1856,13 +1862,10 @@ void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status)
1191 return;
1192 }
1193
1194 - if (usb_pipeisoc(urb->pipe) || usb_pipeint(urb->pipe)) {
1195 + if (usb_pipeisoc(urb->pipe) || usb_pipeint(urb->pipe))
1196 bh = &hcd->high_prio_bh;
1197 - high_prio_bh = true;
1198 - } else {
1199 + else
1200 bh = &hcd->low_prio_bh;
1201 - high_prio_bh = false;
1202 - }
1203
1204 spin_lock(&bh->lock);
1205 list_add_tail(&urb->urb_list, &bh->head);
1206 @@ -1871,7 +1874,7 @@ void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status)
1207
1208 if (running)
1209 ;
1210 - else if (high_prio_bh)
1211 + else if (bh->high_prio)
1212 tasklet_hi_schedule(&bh->bh);
1213 else
1214 tasklet_schedule(&bh->bh);
1215 @@ -2880,6 +2883,7 @@ int usb_add_hcd(struct usb_hcd *hcd,
1216
1217 /* initialize tasklets */
1218 init_giveback_urb_bh(&hcd->high_prio_bh);
1219 + hcd->high_prio_bh.high_prio = true;
1220 init_giveback_urb_bh(&hcd->low_prio_bh);
1221
1222 /* enable irqs just before we start the controller,
1223 diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c
1224 index 2b30b5a1b577e..8d53b3ac31c6b 100644
1225 --- a/drivers/usb/gadget/legacy/inode.c
1226 +++ b/drivers/usb/gadget/legacy/inode.c
1227 @@ -365,6 +365,7 @@ ep_io (struct ep_data *epdata, void *buf, unsigned len)
1228 spin_unlock_irq (&epdata->dev->lock);
1229
1230 DBG (epdata->dev, "endpoint gone\n");
1231 + wait_for_completion(&done);
1232 epdata->status = -ENODEV;
1233 }
1234 }
1235 diff --git a/drivers/usb/host/ohci-ppc-of.c b/drivers/usb/host/ohci-ppc-of.c
1236 index 4f87a5c61b085..d22a70363fbfd 100644
1237 --- a/drivers/usb/host/ohci-ppc-of.c
1238 +++ b/drivers/usb/host/ohci-ppc-of.c
1239 @@ -168,6 +168,7 @@ static int ohci_hcd_ppc_of_probe(struct platform_device *op)
1240 release_mem_region(res.start, 0x4);
1241 } else
1242 pr_debug("%s: cannot get ehci offset from fdt\n", __FILE__);
1243 + of_node_put(np);
1244 }
1245
1246 irq_dispose_mapping(irq);
1247 diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
1248 index 881fc3a55edce..5798965f42b50 100644
1249 --- a/drivers/vfio/vfio.c
1250 +++ b/drivers/vfio/vfio.c
1251 @@ -1793,6 +1793,7 @@ struct vfio_info_cap_header *vfio_info_cap_add(struct vfio_info_cap *caps,
1252 buf = krealloc(caps->buf, caps->size + size, GFP_KERNEL);
1253 if (!buf) {
1254 kfree(caps->buf);
1255 + caps->buf = NULL;
1256 caps->size = 0;
1257 return ERR_PTR(-ENOMEM);
1258 }
1259 diff --git a/drivers/video/fbdev/i740fb.c b/drivers/video/fbdev/i740fb.c
1260 index 7bc5f6056c77d..4147a95341793 100644
1261 --- a/drivers/video/fbdev/i740fb.c
1262 +++ b/drivers/video/fbdev/i740fb.c
1263 @@ -399,7 +399,7 @@ static int i740fb_decode_var(const struct fb_var_screeninfo *var,
1264 u32 xres, right, hslen, left, xtotal;
1265 u32 yres, lower, vslen, upper, ytotal;
1266 u32 vxres, xoffset, vyres, yoffset;
1267 - u32 bpp, base, dacspeed24, mem;
1268 + u32 bpp, base, dacspeed24, mem, freq;
1269 u8 r7;
1270 int i;
1271
1272 @@ -641,7 +641,12 @@ static int i740fb_decode_var(const struct fb_var_screeninfo *var,
1273 par->atc[VGA_ATC_OVERSCAN] = 0;
1274
1275 /* Calculate VCLK that most closely matches the requested dot clock */
1276 - i740_calc_vclk((((u32)1e9) / var->pixclock) * (u32)(1e3), par);
1277 + freq = (((u32)1e9) / var->pixclock) * (u32)(1e3);
1278 + if (freq < I740_RFREQ_FIX) {
1279 + fb_dbg(info, "invalid pixclock\n");
1280 + freq = I740_RFREQ_FIX;
1281 + }
1282 + i740_calc_vclk(freq, par);
1283
1284 /* Since we program the clocks ourselves, always use VCLK2. */
1285 par->misc |= 0x0C;
1286 diff --git a/drivers/xen/xenbus/xenbus_dev_frontend.c b/drivers/xen/xenbus/xenbus_dev_frontend.c
1287 index 07f6ba6ccaa72..f9fc618e77f32 100644
1288 --- a/drivers/xen/xenbus/xenbus_dev_frontend.c
1289 +++ b/drivers/xen/xenbus/xenbus_dev_frontend.c
1290 @@ -122,7 +122,7 @@ static ssize_t xenbus_file_read(struct file *filp,
1291 {
1292 struct xenbus_file_priv *u = filp->private_data;
1293 struct read_buffer *rb;
1294 - unsigned i;
1295 + ssize_t i;
1296 int ret;
1297
1298 mutex_lock(&u->reply_mutex);
1299 @@ -142,7 +142,7 @@ again:
1300 rb = list_entry(u->read_buffers.next, struct read_buffer, list);
1301 i = 0;
1302 while (i < len) {
1303 - unsigned sz = min((unsigned)len - i, rb->len - rb->cons);
1304 + size_t sz = min_t(size_t, len - i, rb->len - rb->cons);
1305
1306 ret = copy_to_user(ubuf + i, &rb->msg[rb->cons], sz);
1307
1308 diff --git a/fs/attr.c b/fs/attr.c
1309 index c902b3d535080..509cccc37742b 100644
1310 --- a/fs/attr.c
1311 +++ b/fs/attr.c
1312 @@ -111,6 +111,8 @@ EXPORT_SYMBOL(setattr_prepare);
1313 */
1314 int inode_newsize_ok(const struct inode *inode, loff_t offset)
1315 {
1316 + if (offset < 0)
1317 + return -EINVAL;
1318 if (inode->i_size < offset) {
1319 unsigned long limit;
1320
1321 diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
1322 index 46ecb7405af1f..b83e96f51a5f0 100644
1323 --- a/fs/btrfs/disk-io.c
1324 +++ b/fs/btrfs/disk-io.c
1325 @@ -2774,6 +2774,20 @@ int open_ctree(struct super_block *sb,
1326 err = -EINVAL;
1327 goto fail_alloc;
1328 }
1329 + /*
1330 + * We have unsupported RO compat features, although RO mounted, we
1331 + * should not cause any metadata write, including log replay.
1332 + * Or we could screw up whatever the new feature requires.
1333 + */
1334 + if (unlikely(features && btrfs_super_log_root(disk_super) &&
1335 + !btrfs_test_opt(fs_info, NOLOGREPLAY))) {
1336 + btrfs_err(fs_info,
1337 +"cannot replay dirty log with unsupported compat_ro features (0x%llx), try rescue=nologreplay",
1338 + features);
1339 + err = -EINVAL;
1340 + goto fail_alloc;
1341 + }
1342 +
1343
1344 max_active = fs_info->thread_pool_size;
1345
1346 diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
1347 index 312c050d0dbde..9ddf48ae80225 100644
1348 --- a/fs/btrfs/tree-log.c
1349 +++ b/fs/btrfs/tree-log.c
1350 @@ -1074,7 +1074,9 @@ again:
1351 extref = btrfs_lookup_inode_extref(NULL, root, path, name, namelen,
1352 inode_objectid, parent_objectid, 0,
1353 0);
1354 - if (!IS_ERR_OR_NULL(extref)) {
1355 + if (IS_ERR(extref)) {
1356 + return PTR_ERR(extref);
1357 + } else if (extref) {
1358 u32 item_size;
1359 u32 cur_offset = 0;
1360 unsigned long base;
1361 diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
1362 index 3ca319e6c9791..3a7087a8f6239 100644
1363 --- a/fs/ext4/inline.c
1364 +++ b/fs/ext4/inline.c
1365 @@ -40,6 +40,9 @@ static int get_max_inline_xattr_value_size(struct inode *inode,
1366 struct ext4_inode *raw_inode;
1367 int free, min_offs;
1368
1369 + if (!EXT4_INODE_HAS_XATTR_SPACE(inode))
1370 + return 0;
1371 +
1372 min_offs = EXT4_SB(inode->i_sb)->s_inode_size -
1373 EXT4_GOOD_OLD_INODE_SIZE -
1374 EXT4_I(inode)->i_extra_isize -
1375 diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
1376 index 754b33828853d..b32fc7e45ba13 100644
1377 --- a/fs/ext4/inode.c
1378 +++ b/fs/ext4/inode.c
1379 @@ -1659,7 +1659,14 @@ static void mpage_release_unused_pages(struct mpage_da_data *mpd,
1380 ext4_lblk_t start, last;
1381 start = index << (PAGE_SHIFT - inode->i_blkbits);
1382 last = end << (PAGE_SHIFT - inode->i_blkbits);
1383 +
1384 + /*
1385 + * avoid racing with extent status tree scans made by
1386 + * ext4_insert_delayed_block()
1387 + */
1388 + down_write(&EXT4_I(inode)->i_data_sem);
1389 ext4_es_remove_extent(inode, start, last - start + 1);
1390 + up_write(&EXT4_I(inode)->i_data_sem);
1391 }
1392
1393 pagevec_init(&pvec, 0);
1394 diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
1395 index edf78728ed322..1281181215aa6 100644
1396 --- a/fs/ext4/namei.c
1397 +++ b/fs/ext4/namei.c
1398 @@ -51,6 +51,7 @@ static struct buffer_head *ext4_append(handle_t *handle,
1399 struct inode *inode,
1400 ext4_lblk_t *block)
1401 {
1402 + struct ext4_map_blocks map;
1403 struct buffer_head *bh;
1404 int err;
1405
1406 @@ -60,6 +61,21 @@ static struct buffer_head *ext4_append(handle_t *handle,
1407 return ERR_PTR(-ENOSPC);
1408
1409 *block = inode->i_size >> inode->i_sb->s_blocksize_bits;
1410 + map.m_lblk = *block;
1411 + map.m_len = 1;
1412 +
1413 + /*
1414 + * We're appending new directory block. Make sure the block is not
1415 + * allocated yet, otherwise we will end up corrupting the
1416 + * directory.
1417 + */
1418 + err = ext4_map_blocks(NULL, inode, &map, 0);
1419 + if (err < 0)
1420 + return ERR_PTR(err);
1421 + if (err) {
1422 + EXT4_ERROR_INODE(inode, "Logical block already allocated");
1423 + return ERR_PTR(-EFSCORRUPTED);
1424 + }
1425
1426 bh = ext4_bread(handle, inode, *block, EXT4_GET_BLOCKS_CREATE);
1427 if (IS_ERR(bh))
1428 @@ -2777,11 +2793,8 @@ bool ext4_empty_dir(struct inode *inode)
1429 de = (struct ext4_dir_entry_2 *) (bh->b_data +
1430 (offset & (sb->s_blocksize - 1)));
1431 if (ext4_check_dir_entry(inode, NULL, de, bh,
1432 - bh->b_data, bh->b_size, offset)) {
1433 - offset = (offset | (sb->s_blocksize - 1)) + 1;
1434 - continue;
1435 - }
1436 - if (le32_to_cpu(de->inode)) {
1437 + bh->b_data, bh->b_size, offset) ||
1438 + le32_to_cpu(de->inode)) {
1439 brelse(bh);
1440 return false;
1441 }
1442 diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
1443 index c367129dcdc16..e4f02572f69df 100644
1444 --- a/fs/ext4/resize.c
1445 +++ b/fs/ext4/resize.c
1446 @@ -1446,6 +1446,7 @@ static void ext4_update_super(struct super_block *sb,
1447 * Update the fs overhead information
1448 */
1449 ext4_calculate_overhead(sb);
1450 + es->s_overhead_clusters = cpu_to_le32(sbi->s_overhead);
1451
1452 if (test_opt(sb, DEBUG))
1453 printk(KERN_DEBUG "EXT4-fs: added group %u:"
1454 @@ -1940,6 +1941,16 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count)
1455 }
1456 brelse(bh);
1457
1458 + /*
1459 + * For bigalloc, trim the requested size to the nearest cluster
1460 + * boundary to avoid creating an unusable filesystem. We do this
1461 + * silently, instead of returning an error, to avoid breaking
1462 + * callers that blindly resize the filesystem to the full size of
1463 + * the underlying block device.
1464 + */
1465 + if (ext4_has_feature_bigalloc(sb))
1466 + n_blocks_count &= ~((1 << EXT4_CLUSTER_BITS(sb)) - 1);
1467 +
1468 retry:
1469 o_blocks_count = ext4_blocks_count(es);
1470
1471 diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
1472 index ec9beaa69abb5..6b14ecb382df9 100644
1473 --- a/fs/ext4/xattr.c
1474 +++ b/fs/ext4/xattr.c
1475 @@ -1053,8 +1053,9 @@ int ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
1476 struct ext4_inode *raw_inode;
1477 int error;
1478
1479 - if (EXT4_I(inode)->i_extra_isize == 0)
1480 + if (!EXT4_INODE_HAS_XATTR_SPACE(inode))
1481 return 0;
1482 +
1483 raw_inode = ext4_raw_inode(&is->iloc);
1484 header = IHDR(inode, raw_inode);
1485 is->s.base = is->s.first = IFIRST(header);
1486 @@ -1107,8 +1108,9 @@ static int ext4_xattr_ibody_set(handle_t *handle, struct inode *inode,
1487 struct ext4_xattr_search *s = &is->s;
1488 int error;
1489
1490 - if (EXT4_I(inode)->i_extra_isize == 0)
1491 + if (!EXT4_INODE_HAS_XATTR_SPACE(inode))
1492 return -ENOSPC;
1493 +
1494 error = ext4_xattr_set_entry(i, s, inode);
1495 if (error)
1496 return error;
1497 diff --git a/fs/ext4/xattr.h b/fs/ext4/xattr.h
1498 index 099c8b670ef56..bbe569142985d 100644
1499 --- a/fs/ext4/xattr.h
1500 +++ b/fs/ext4/xattr.h
1501 @@ -76,6 +76,19 @@ struct ext4_xattr_entry {
1502
1503 #define EXT4_ZERO_XATTR_VALUE ((void *)-1)
1504
1505 +/*
1506 + * If we want to add an xattr to the inode, we should make sure that
1507 + * i_extra_isize is not 0 and that the inode size is not less than
1508 + * EXT4_GOOD_OLD_INODE_SIZE + extra_isize + pad.
1509 + * EXT4_GOOD_OLD_INODE_SIZE extra_isize header entry pad data
1510 + * |--------------------------|------------|------|---------|---|-------|
1511 + */
1512 +#define EXT4_INODE_HAS_XATTR_SPACE(inode) \
1513 + ((EXT4_I(inode)->i_extra_isize != 0) && \
1514 + (EXT4_GOOD_OLD_INODE_SIZE + EXT4_I(inode)->i_extra_isize + \
1515 + sizeof(struct ext4_xattr_ibody_header) + EXT4_XATTR_PAD <= \
1516 + EXT4_INODE_SIZE((inode)->i_sb)))
1517 +
1518 struct ext4_xattr_info {
1519 int name_index;
1520 const char *name;
1521 diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
1522 index 77b8f0f264078..205ee5d3f4d5c 100644
1523 --- a/fs/fuse/inode.c
1524 +++ b/fs/fuse/inode.c
1525 @@ -173,6 +173,12 @@ void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr,
1526 inode->i_uid = make_kuid(&init_user_ns, attr->uid);
1527 inode->i_gid = make_kgid(&init_user_ns, attr->gid);
1528 inode->i_blocks = attr->blocks;
1529 +
1530 + /* Sanitize nsecs */
1531 + attr->atimensec = min_t(u32, attr->atimensec, NSEC_PER_SEC - 1);
1532 + attr->mtimensec = min_t(u32, attr->mtimensec, NSEC_PER_SEC - 1);
1533 + attr->ctimensec = min_t(u32, attr->ctimensec, NSEC_PER_SEC - 1);
1534 +
1535 inode->i_atime.tv_sec = attr->atime;
1536 inode->i_atime.tv_nsec = attr->atimensec;
1537 /* mtime from server may be stale due to local buffered write */
1538 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
1539 index 2ea772f596e3c..5baf6ed7732d8 100644
1540 --- a/fs/nfs/nfs4proc.c
1541 +++ b/fs/nfs/nfs4proc.c
1542 @@ -8229,6 +8229,9 @@ static int nfs41_reclaim_complete_handle_errors(struct rpc_task *task, struct nf
1543 rpc_delay(task, NFS4_POLL_RETRY_MAX);
1544 /* fall through */
1545 case -NFS4ERR_RETRY_UNCACHED_REP:
1546 + case -EACCES:
1547 + dprintk("%s: failed to reclaim complete error %d for server %s, retrying\n",
1548 + __func__, task->tk_status, clp->cl_hostname);
1549 return -EAGAIN;
1550 case -NFS4ERR_BADSESSION:
1551 case -NFS4ERR_DEADSESSION:
1552 diff --git a/fs/ntfs/attrib.c b/fs/ntfs/attrib.c
1553 index 44a39a099b54e..62b49197e5f67 100644
1554 --- a/fs/ntfs/attrib.c
1555 +++ b/fs/ntfs/attrib.c
1556 @@ -606,8 +606,12 @@ static int ntfs_attr_find(const ATTR_TYPE type, const ntfschar *name,
1557 a = (ATTR_RECORD*)((u8*)ctx->attr +
1558 le32_to_cpu(ctx->attr->length));
1559 for (;; a = (ATTR_RECORD*)((u8*)a + le32_to_cpu(a->length))) {
1560 - if ((u8*)a < (u8*)ctx->mrec || (u8*)a > (u8*)ctx->mrec +
1561 - le32_to_cpu(ctx->mrec->bytes_allocated))
1562 + u8 *mrec_end = (u8 *)ctx->mrec +
1563 + le32_to_cpu(ctx->mrec->bytes_allocated);
1564 + u8 *name_end = (u8 *)a + le16_to_cpu(a->name_offset) +
1565 + a->name_length * sizeof(ntfschar);
1566 + if ((u8*)a < (u8*)ctx->mrec || (u8*)a > mrec_end ||
1567 + name_end > mrec_end)
1568 break;
1569 ctx->attr = a;
1570 if (unlikely(le32_to_cpu(a->type) > le32_to_cpu(type) ||
1571 diff --git a/fs/proc/base.c b/fs/proc/base.c
1572 index 886e408f47697..2dd4a2b7222c5 100644
1573 --- a/fs/proc/base.c
1574 +++ b/fs/proc/base.c
1575 @@ -1676,7 +1676,8 @@ const struct inode_operations proc_pid_link_inode_operations = {
1576
1577 /* building an inode */
1578
1579 -struct inode *proc_pid_make_inode(struct super_block * sb, struct task_struct *task)
1580 +struct inode *proc_pid_make_inode(struct super_block * sb,
1581 + struct task_struct *task, umode_t mode)
1582 {
1583 struct inode * inode;
1584 struct proc_inode *ei;
1585 @@ -1690,6 +1691,7 @@ struct inode *proc_pid_make_inode(struct super_block * sb, struct task_struct *t
1586
1587 /* Common stuff */
1588 ei = PROC_I(inode);
1589 + inode->i_mode = mode;
1590 inode->i_ino = get_next_ino();
1591 inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
1592 inode->i_op = &proc_def_inode_operations;
1593 @@ -2041,7 +2043,9 @@ proc_map_files_instantiate(struct inode *dir, struct dentry *dentry,
1594 struct proc_inode *ei;
1595 struct inode *inode;
1596
1597 - inode = proc_pid_make_inode(dir->i_sb, task);
1598 + inode = proc_pid_make_inode(dir->i_sb, task, S_IFLNK |
1599 + ((mode & FMODE_READ ) ? S_IRUSR : 0) |
1600 + ((mode & FMODE_WRITE) ? S_IWUSR : 0));
1601 if (!inode)
1602 return -ENOENT;
1603
1604 @@ -2050,12 +2054,6 @@ proc_map_files_instantiate(struct inode *dir, struct dentry *dentry,
1605
1606 inode->i_op = &proc_map_files_link_inode_operations;
1607 inode->i_size = 64;
1608 - inode->i_mode = S_IFLNK;
1609 -
1610 - if (mode & FMODE_READ)
1611 - inode->i_mode |= S_IRUSR;
1612 - if (mode & FMODE_WRITE)
1613 - inode->i_mode |= S_IWUSR;
1614
1615 d_set_d_op(dentry, &tid_map_files_dentry_operations);
1616 d_add(dentry, inode);
1617 @@ -2409,12 +2407,11 @@ static int proc_pident_instantiate(struct inode *dir,
1618 struct inode *inode;
1619 struct proc_inode *ei;
1620
1621 - inode = proc_pid_make_inode(dir->i_sb, task);
1622 + inode = proc_pid_make_inode(dir->i_sb, task, p->mode);
1623 if (!inode)
1624 goto out;
1625
1626 ei = PROC_I(inode);
1627 - inode->i_mode = p->mode;
1628 if (S_ISDIR(inode->i_mode))
1629 set_nlink(inode, 2); /* Use getattr to fix if necessary */
1630 if (p->iop)
1631 @@ -3109,11 +3106,10 @@ static int proc_pid_instantiate(struct inode *dir,
1632 {
1633 struct inode *inode;
1634
1635 - inode = proc_pid_make_inode(dir->i_sb, task);
1636 + inode = proc_pid_make_inode(dir->i_sb, task, S_IFDIR | S_IRUGO | S_IXUGO);
1637 if (!inode)
1638 goto out;
1639
1640 - inode->i_mode = S_IFDIR|S_IRUGO|S_IXUGO;
1641 inode->i_op = &proc_tgid_base_inode_operations;
1642 inode->i_fop = &proc_tgid_base_operations;
1643 inode->i_flags|=S_IMMUTABLE;
1644 @@ -3404,11 +3400,10 @@ static int proc_task_instantiate(struct inode *dir,
1645 struct dentry *dentry, struct task_struct *task, const void *ptr)
1646 {
1647 struct inode *inode;
1648 - inode = proc_pid_make_inode(dir->i_sb, task);
1649 + inode = proc_pid_make_inode(dir->i_sb, task, S_IFDIR | S_IRUGO | S_IXUGO);
1650
1651 if (!inode)
1652 goto out;
1653 - inode->i_mode = S_IFDIR|S_IRUGO|S_IXUGO;
1654 inode->i_op = &proc_tid_base_inode_operations;
1655 inode->i_fop = &proc_tid_base_operations;
1656 inode->i_flags|=S_IMMUTABLE;
1657 diff --git a/fs/proc/fd.c b/fs/proc/fd.c
1658 index d21dafef31029..4274f83bf1004 100644
1659 --- a/fs/proc/fd.c
1660 +++ b/fs/proc/fd.c
1661 @@ -183,14 +183,13 @@ proc_fd_instantiate(struct inode *dir, struct dentry *dentry,
1662 struct proc_inode *ei;
1663 struct inode *inode;
1664
1665 - inode = proc_pid_make_inode(dir->i_sb, task);
1666 + inode = proc_pid_make_inode(dir->i_sb, task, S_IFLNK);
1667 if (!inode)
1668 goto out;
1669
1670 ei = PROC_I(inode);
1671 ei->fd = fd;
1672
1673 - inode->i_mode = S_IFLNK;
1674 inode->i_op = &proc_pid_link_inode_operations;
1675 inode->i_size = 64;
1676
1677 @@ -322,14 +321,13 @@ proc_fdinfo_instantiate(struct inode *dir, struct dentry *dentry,
1678 struct proc_inode *ei;
1679 struct inode *inode;
1680
1681 - inode = proc_pid_make_inode(dir->i_sb, task);
1682 + inode = proc_pid_make_inode(dir->i_sb, task, S_IFREG | S_IRUSR);
1683 if (!inode)
1684 goto out;
1685
1686 ei = PROC_I(inode);
1687 ei->fd = fd;
1688
1689 - inode->i_mode = S_IFREG | S_IRUSR;
1690 inode->i_fop = &proc_fdinfo_file_operations;
1691
1692 d_set_d_op(dentry, &tid_fd_dentry_operations);
1693 diff --git a/fs/proc/internal.h b/fs/proc/internal.h
1694 index c0bdeceaaeb61..5bc057be6fa38 100644
1695 --- a/fs/proc/internal.h
1696 +++ b/fs/proc/internal.h
1697 @@ -163,7 +163,7 @@ extern int proc_pid_statm(struct seq_file *, struct pid_namespace *,
1698 extern const struct dentry_operations pid_dentry_operations;
1699 extern int pid_getattr(struct vfsmount *, struct dentry *, struct kstat *);
1700 extern int proc_setattr(struct dentry *, struct iattr *);
1701 -extern struct inode *proc_pid_make_inode(struct super_block *, struct task_struct *);
1702 +extern struct inode *proc_pid_make_inode(struct super_block *, struct task_struct *, umode_t);
1703 extern int pid_revalidate(struct dentry *, unsigned int);
1704 extern int pid_delete_dentry(const struct dentry *);
1705 extern int proc_pid_readdir(struct file *, struct dir_context *);
1706 diff --git a/fs/proc/namespaces.c b/fs/proc/namespaces.c
1707 index 51b8b0a8ad91b..766f0c637ad1b 100644
1708 --- a/fs/proc/namespaces.c
1709 +++ b/fs/proc/namespaces.c
1710 @@ -92,12 +92,11 @@ static int proc_ns_instantiate(struct inode *dir,
1711 struct inode *inode;
1712 struct proc_inode *ei;
1713
1714 - inode = proc_pid_make_inode(dir->i_sb, task);
1715 + inode = proc_pid_make_inode(dir->i_sb, task, S_IFLNK | S_IRWXUGO);
1716 if (!inode)
1717 goto out;
1718
1719 ei = PROC_I(inode);
1720 - inode->i_mode = S_IFLNK|S_IRWXUGO;
1721 inode->i_op = &proc_ns_link_inode_operations;
1722 ei->ns_ops = ns_ops;
1723
1724 diff --git a/include/linux/bpf.h b/include/linux/bpf.h
1725 index fe520d40597ff..7a1e6d3d0fd9d 100644
1726 --- a/include/linux/bpf.h
1727 +++ b/include/linux/bpf.h
1728 @@ -246,6 +246,8 @@ struct bpf_prog *bpf_prog_get_type(u32 ufd, enum bpf_prog_type type);
1729 struct bpf_prog *bpf_prog_add(struct bpf_prog *prog, int i);
1730 struct bpf_prog *bpf_prog_inc(struct bpf_prog *prog);
1731 void bpf_prog_put(struct bpf_prog *prog);
1732 +int __bpf_prog_charge(struct user_struct *user, u32 pages);
1733 +void __bpf_prog_uncharge(struct user_struct *user, u32 pages);
1734
1735 struct bpf_map *bpf_map_get_with_uref(u32 ufd);
1736 struct bpf_map *__bpf_map_get(struct fd f);
1737 @@ -328,6 +330,15 @@ static inline struct bpf_prog *bpf_prog_inc(struct bpf_prog *prog)
1738 return ERR_PTR(-EOPNOTSUPP);
1739 }
1740
1741 +static inline int __bpf_prog_charge(struct user_struct *user, u32 pages)
1742 +{
1743 + return 0;
1744 +}
1745 +
1746 +static inline void __bpf_prog_uncharge(struct user_struct *user, u32 pages)
1747 +{
1748 +}
1749 +
1750 static inline bool unprivileged_ebpf_enabled(void)
1751 {
1752 return false;
1753 diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h
1754 index 4431ea2c88022..13a63ab47ef55 100644
1755 --- a/include/linux/buffer_head.h
1756 +++ b/include/linux/buffer_head.h
1757 @@ -113,7 +113,6 @@ static __always_inline int test_clear_buffer_##name(struct buffer_head *bh) \
1758 * of the form "mark_buffer_foo()". These are higher-level functions which
1759 * do something in addition to setting a b_state bit.
1760 */
1761 -BUFFER_FNS(Uptodate, uptodate)
1762 BUFFER_FNS(Dirty, dirty)
1763 TAS_BUFFER_FNS(Dirty, dirty)
1764 BUFFER_FNS(Lock, locked)
1765 @@ -131,6 +130,30 @@ BUFFER_FNS(Meta, meta)
1766 BUFFER_FNS(Prio, prio)
1767 BUFFER_FNS(Defer_Completion, defer_completion)
1768
1769 +static __always_inline void set_buffer_uptodate(struct buffer_head *bh)
1770 +{
1771 + /*
1772 + * make it consistent with folio_mark_uptodate
1773 + * pairs with smp_load_acquire in buffer_uptodate
1774 + */
1775 + smp_mb__before_atomic();
1776 + set_bit(BH_Uptodate, &bh->b_state);
1777 +}
1778 +
1779 +static __always_inline void clear_buffer_uptodate(struct buffer_head *bh)
1780 +{
1781 + clear_bit(BH_Uptodate, &bh->b_state);
1782 +}
1783 +
1784 +static __always_inline int buffer_uptodate(const struct buffer_head *bh)
1785 +{
1786 + /*
1787 + * make it consistent with folio_test_uptodate
1788 + * pairs with smp_mb__before_atomic in set_buffer_uptodate
1789 + */
1790 + return (smp_load_acquire(&bh->b_state) & (1UL << BH_Uptodate)) != 0;
1791 +}
1792 +
1793 #define bh_offset(bh) ((unsigned long)(bh)->b_data & ~PAGE_MASK)
1794
1795 /* If we *know* page->private refers to buffer_heads */
1796 diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
1797 index bba5604f3a03e..8ad5e5b6f9df0 100644
1798 --- a/include/linux/pci_ids.h
1799 +++ b/include/linux/pci_ids.h
1800 @@ -55,6 +55,8 @@
1801 #define PCI_CLASS_BRIDGE_EISA 0x0602
1802 #define PCI_CLASS_BRIDGE_MC 0x0603
1803 #define PCI_CLASS_BRIDGE_PCI 0x0604
1804 +#define PCI_CLASS_BRIDGE_PCI_NORMAL 0x060400
1805 +#define PCI_CLASS_BRIDGE_PCI_SUBTRACTIVE 0x060401
1806 #define PCI_CLASS_BRIDGE_PCMCIA 0x0605
1807 #define PCI_CLASS_BRIDGE_NUBUS 0x0606
1808 #define PCI_CLASS_BRIDGE_CARDBUS 0x0607
1809 diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h
1810 index 4920341268763..684fef8e3e599 100644
1811 --- a/include/linux/usb/hcd.h
1812 +++ b/include/linux/usb/hcd.h
1813 @@ -65,6 +65,7 @@
1814
1815 struct giveback_urb_bh {
1816 bool running;
1817 + bool high_prio;
1818 spinlock_t lock;
1819 struct list_head head;
1820 struct tasklet_struct bh;
1821 diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
1822 index 9c50d458ee83b..d9e9f86e61072 100644
1823 --- a/include/net/bluetooth/l2cap.h
1824 +++ b/include/net/bluetooth/l2cap.h
1825 @@ -798,6 +798,7 @@ enum {
1826 };
1827
1828 void l2cap_chan_hold(struct l2cap_chan *c);
1829 +struct l2cap_chan *l2cap_chan_hold_unless_zero(struct l2cap_chan *c);
1830 void l2cap_chan_put(struct l2cap_chan *c);
1831
1832 static inline void l2cap_chan_lock(struct l2cap_chan *chan)
1833 diff --git a/include/sound/core.h b/include/sound/core.h
1834 index 31079ea5e4846..d5d0e5e53920c 100644
1835 --- a/include/sound/core.h
1836 +++ b/include/sound/core.h
1837 @@ -457,4 +457,12 @@ snd_pci_quirk_lookup_id(u16 vendor, u16 device,
1838 }
1839 #endif
1840
1841 +/* async signal helpers */
1842 +struct snd_fasync;
1843 +
1844 +int snd_fasync_helper(int fd, struct file *file, int on,
1845 + struct snd_fasync **fasyncp);
1846 +void snd_kill_fasync(struct snd_fasync *fasync, int signal, int poll);
1847 +void snd_fasync_free(struct snd_fasync *fasync);
1848 +
1849 #endif /* __SOUND_CORE_H */
1850 diff --git a/include/trace/events/spmi.h b/include/trace/events/spmi.h
1851 index 62f005ef4c7e5..7c24b99cf43b3 100644
1852 --- a/include/trace/events/spmi.h
1853 +++ b/include/trace/events/spmi.h
1854 @@ -20,15 +20,15 @@ TRACE_EVENT(spmi_write_begin,
1855 __field ( u8, sid )
1856 __field ( u16, addr )
1857 __field ( u8, len )
1858 - __dynamic_array ( u8, buf, len + 1 )
1859 + __dynamic_array ( u8, buf, len )
1860 ),
1861
1862 TP_fast_assign(
1863 __entry->opcode = opcode;
1864 __entry->sid = sid;
1865 __entry->addr = addr;
1866 - __entry->len = len + 1;
1867 - memcpy(__get_dynamic_array(buf), buf, len + 1);
1868 + __entry->len = len;
1869 + memcpy(__get_dynamic_array(buf), buf, len);
1870 ),
1871
1872 TP_printk("opc=%d sid=%02d addr=0x%04x len=%d buf=0x[%*phD]",
1873 @@ -91,7 +91,7 @@ TRACE_EVENT(spmi_read_end,
1874 __field ( u16, addr )
1875 __field ( int, ret )
1876 __field ( u8, len )
1877 - __dynamic_array ( u8, buf, len + 1 )
1878 + __dynamic_array ( u8, buf, len )
1879 ),
1880
1881 TP_fast_assign(
1882 @@ -99,8 +99,8 @@ TRACE_EVENT(spmi_read_end,
1883 __entry->sid = sid;
1884 __entry->addr = addr;
1885 __entry->ret = ret;
1886 - __entry->len = len + 1;
1887 - memcpy(__get_dynamic_array(buf), buf, len + 1);
1888 + __entry->len = len;
1889 + memcpy(__get_dynamic_array(buf), buf, len);
1890 ),
1891
1892 TP_printk("opc=%d sid=%02d addr=0x%04x ret=%d len=%02d buf=0x[%*phD]",
1893 diff --git a/include/uapi/linux/swab.h b/include/uapi/linux/swab.h
1894 index 1f42d110987a4..51502eabdb051 100644
1895 --- a/include/uapi/linux/swab.h
1896 +++ b/include/uapi/linux/swab.h
1897 @@ -134,9 +134,9 @@ static inline __attribute_const__ __u32 __fswahb32(__u32 val)
1898
1899 static __always_inline unsigned long __swab(const unsigned long y)
1900 {
1901 -#if BITS_PER_LONG == 64
1902 +#if __BITS_PER_LONG == 64
1903 return __swab64(y);
1904 -#else /* BITS_PER_LONG == 32 */
1905 +#else /* __BITS_PER_LONG == 32 */
1906 return __swab32(y);
1907 #endif
1908 }
1909 diff --git a/init/main.c b/init/main.c
1910 index 30226a836c8b5..6537f51a0bace 100644
1911 --- a/init/main.c
1912 +++ b/init/main.c
1913 @@ -487,21 +487,15 @@ asmlinkage __visible void __init start_kernel(void)
1914 smp_setup_processor_id();
1915 debug_objects_early_init();
1916
1917 - /*
1918 - * Set up the the initial canary ASAP:
1919 - */
1920 - add_latent_entropy();
1921 - boot_init_stack_canary();
1922 -
1923 cgroup_init_early();
1924
1925 local_irq_disable();
1926 early_boot_irqs_disabled = true;
1927
1928 -/*
1929 - * Interrupts are still disabled. Do necessary setups, then
1930 - * enable them
1931 - */
1932 + /*
1933 + * Interrupts are still disabled. Do necessary setups, then
1934 + * enable them.
1935 + */
1936 boot_cpu_init();
1937 page_address_init();
1938 pr_notice("%s", linux_banner);
1939 diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
1940 index 9976703f2dbfa..5aeadf79e05e4 100644
1941 --- a/kernel/bpf/core.c
1942 +++ b/kernel/bpf/core.c
1943 @@ -107,19 +107,29 @@ struct bpf_prog *bpf_prog_realloc(struct bpf_prog *fp_old, unsigned int size,
1944 gfp_t gfp_flags = GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO |
1945 gfp_extra_flags;
1946 struct bpf_prog *fp;
1947 + u32 pages, delta;
1948 + int ret;
1949
1950 BUG_ON(fp_old == NULL);
1951
1952 size = round_up(size, PAGE_SIZE);
1953 - if (size <= fp_old->pages * PAGE_SIZE)
1954 + pages = size / PAGE_SIZE;
1955 + if (pages <= fp_old->pages)
1956 return fp_old;
1957
1958 + delta = pages - fp_old->pages;
1959 + ret = __bpf_prog_charge(fp_old->aux->user, delta);
1960 + if (ret)
1961 + return NULL;
1962 +
1963 fp = __vmalloc(size, gfp_flags, PAGE_KERNEL);
1964 - if (fp != NULL) {
1965 + if (fp == NULL) {
1966 + __bpf_prog_uncharge(fp_old->aux->user, delta);
1967 + } else {
1968 kmemcheck_annotate_bitfield(fp, meta);
1969
1970 memcpy(fp, fp_old, fp_old->pages * PAGE_SIZE);
1971 - fp->pages = size / PAGE_SIZE;
1972 + fp->pages = pages;
1973 fp->aux->prog = fp;
1974
1975 /* We keep fp->aux from fp_old around in the new
1976 diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
1977 index e30ad1be68412..e0d4e210b1a1a 100644
1978 --- a/kernel/bpf/syscall.c
1979 +++ b/kernel/bpf/syscall.c
1980 @@ -581,19 +581,39 @@ static void free_used_maps(struct bpf_prog_aux *aux)
1981 kfree(aux->used_maps);
1982 }
1983
1984 +int __bpf_prog_charge(struct user_struct *user, u32 pages)
1985 +{
1986 + unsigned long memlock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT;
1987 + unsigned long user_bufs;
1988 +
1989 + if (user) {
1990 + user_bufs = atomic_long_add_return(pages, &user->locked_vm);
1991 + if (user_bufs > memlock_limit) {
1992 + atomic_long_sub(pages, &user->locked_vm);
1993 + return -EPERM;
1994 + }
1995 + }
1996 +
1997 + return 0;
1998 +}
1999 +
2000 +void __bpf_prog_uncharge(struct user_struct *user, u32 pages)
2001 +{
2002 + if (user)
2003 + atomic_long_sub(pages, &user->locked_vm);
2004 +}
2005 +
2006 static int bpf_prog_charge_memlock(struct bpf_prog *prog)
2007 {
2008 struct user_struct *user = get_current_user();
2009 - unsigned long memlock_limit;
2010 -
2011 - memlock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT;
2012 + int ret;
2013
2014 - atomic_long_add(prog->pages, &user->locked_vm);
2015 - if (atomic_long_read(&user->locked_vm) > memlock_limit) {
2016 - atomic_long_sub(prog->pages, &user->locked_vm);
2017 + ret = __bpf_prog_charge(user, prog->pages);
2018 + if (ret) {
2019 free_uid(user);
2020 - return -EPERM;
2021 + return ret;
2022 }
2023 +
2024 prog->aux->user = user;
2025 return 0;
2026 }
2027 @@ -602,7 +622,7 @@ static void bpf_prog_uncharge_memlock(struct bpf_prog *prog)
2028 {
2029 struct user_struct *user = prog->aux->user;
2030
2031 - atomic_long_sub(prog->pages, &user->locked_vm);
2032 + __bpf_prog_uncharge(user, prog->pages);
2033 free_uid(user);
2034 }
2035
2036 diff --git a/net/9p/client.c b/net/9p/client.c
2037 index f1517ca8aba3b..237ba7e21771d 100644
2038 --- a/net/9p/client.c
2039 +++ b/net/9p/client.c
2040 @@ -891,7 +891,7 @@ static struct p9_fid *p9_fid_create(struct p9_client *clnt)
2041 unsigned long flags;
2042
2043 p9_debug(P9_DEBUG_FID, "clnt %p\n", clnt);
2044 - fid = kmalloc(sizeof(struct p9_fid), GFP_KERNEL);
2045 + fid = kzalloc(sizeof(struct p9_fid), GFP_KERNEL);
2046 if (!fid)
2047 return ERR_PTR(-ENOMEM);
2048
2049 @@ -902,11 +902,9 @@ static struct p9_fid *p9_fid_create(struct p9_client *clnt)
2050 }
2051 fid->fid = ret;
2052
2053 - memset(&fid->qid, 0, sizeof(struct p9_qid));
2054 fid->mode = -1;
2055 fid->uid = current_fsuid();
2056 fid->clnt = clnt;
2057 - fid->rdir = NULL;
2058 spin_lock_irqsave(&clnt->lock, flags);
2059 list_add(&fid->flist, &clnt->fidlist);
2060 spin_unlock_irqrestore(&clnt->lock, flags);
2061 diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
2062 index 204b6ebd2a24e..78cf9508b7c1d 100644
2063 --- a/net/bluetooth/l2cap_core.c
2064 +++ b/net/bluetooth/l2cap_core.c
2065 @@ -113,7 +113,8 @@ static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn,
2066 }
2067
2068 /* Find channel with given SCID.
2069 - * Returns locked channel. */
2070 + * Returns a reference locked channel.
2071 + */
2072 static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn,
2073 u16 cid)
2074 {
2075 @@ -121,15 +122,19 @@ static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn,
2076
2077 mutex_lock(&conn->chan_lock);
2078 c = __l2cap_get_chan_by_scid(conn, cid);
2079 - if (c)
2080 - l2cap_chan_lock(c);
2081 + if (c) {
2082 + /* Only lock if chan reference is not 0 */
2083 + c = l2cap_chan_hold_unless_zero(c);
2084 + if (c)
2085 + l2cap_chan_lock(c);
2086 + }
2087 mutex_unlock(&conn->chan_lock);
2088
2089 return c;
2090 }
2091
2092 /* Find channel with given DCID.
2093 - * Returns locked channel.
2094 + * Returns a reference locked channel.
2095 */
2096 static struct l2cap_chan *l2cap_get_chan_by_dcid(struct l2cap_conn *conn,
2097 u16 cid)
2098 @@ -138,8 +143,12 @@ static struct l2cap_chan *l2cap_get_chan_by_dcid(struct l2cap_conn *conn,
2099
2100 mutex_lock(&conn->chan_lock);
2101 c = __l2cap_get_chan_by_dcid(conn, cid);
2102 - if (c)
2103 - l2cap_chan_lock(c);
2104 + if (c) {
2105 + /* Only lock if chan reference is not 0 */
2106 + c = l2cap_chan_hold_unless_zero(c);
2107 + if (c)
2108 + l2cap_chan_lock(c);
2109 + }
2110 mutex_unlock(&conn->chan_lock);
2111
2112 return c;
2113 @@ -164,8 +173,12 @@ static struct l2cap_chan *l2cap_get_chan_by_ident(struct l2cap_conn *conn,
2114
2115 mutex_lock(&conn->chan_lock);
2116 c = __l2cap_get_chan_by_ident(conn, ident);
2117 - if (c)
2118 - l2cap_chan_lock(c);
2119 + if (c) {
2120 + /* Only lock if chan reference is not 0 */
2121 + c = l2cap_chan_hold_unless_zero(c);
2122 + if (c)
2123 + l2cap_chan_lock(c);
2124 + }
2125 mutex_unlock(&conn->chan_lock);
2126
2127 return c;
2128 @@ -491,6 +504,16 @@ void l2cap_chan_hold(struct l2cap_chan *c)
2129 kref_get(&c->kref);
2130 }
2131
2132 +struct l2cap_chan *l2cap_chan_hold_unless_zero(struct l2cap_chan *c)
2133 +{
2134 + BT_DBG("chan %p orig refcnt %u", c, kref_read(&c->kref));
2135 +
2136 + if (!kref_get_unless_zero(&c->kref))
2137 + return NULL;
2138 +
2139 + return c;
2140 +}
2141 +
2142 void l2cap_chan_put(struct l2cap_chan *c)
2143 {
2144 BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->kref.refcount));
2145 @@ -1781,11 +1804,11 @@ static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,
2146 bdaddr_t *dst,
2147 u8 link_type)
2148 {
2149 - struct l2cap_chan *c, *c1 = NULL;
2150 + struct l2cap_chan *c, *tmp, *c1 = NULL;
2151
2152 read_lock(&chan_list_lock);
2153
2154 - list_for_each_entry(c, &chan_list, global_l) {
2155 + list_for_each_entry_safe(c, tmp, &chan_list, global_l) {
2156 if (state && c->state != state)
2157 continue;
2158
2159 @@ -1803,9 +1826,11 @@ static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,
2160 src_match = !bacmp(&c->src, src);
2161 dst_match = !bacmp(&c->dst, dst);
2162 if (src_match && dst_match) {
2163 - l2cap_chan_hold(c);
2164 - read_unlock(&chan_list_lock);
2165 - return c;
2166 + c = l2cap_chan_hold_unless_zero(c);
2167 + if (c) {
2168 + read_unlock(&chan_list_lock);
2169 + return c;
2170 + }
2171 }
2172
2173 /* Closest match */
2174 @@ -1818,7 +1843,7 @@ static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,
2175 }
2176
2177 if (c1)
2178 - l2cap_chan_hold(c1);
2179 + c1 = l2cap_chan_hold_unless_zero(c1);
2180
2181 read_unlock(&chan_list_lock);
2182
2183 @@ -4194,6 +4219,7 @@ static inline int l2cap_config_req(struct l2cap_conn *conn,
2184
2185 unlock:
2186 l2cap_chan_unlock(chan);
2187 + l2cap_chan_put(chan);
2188 return err;
2189 }
2190
2191 @@ -4306,6 +4332,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn,
2192
2193 done:
2194 l2cap_chan_unlock(chan);
2195 + l2cap_chan_put(chan);
2196 return err;
2197 }
2198
2199 @@ -5034,6 +5061,7 @@ send_move_response:
2200 l2cap_send_move_chan_rsp(chan, result);
2201
2202 l2cap_chan_unlock(chan);
2203 + l2cap_chan_put(chan);
2204
2205 return 0;
2206 }
2207 @@ -5126,6 +5154,7 @@ static void l2cap_move_continue(struct l2cap_conn *conn, u16 icid, u16 result)
2208 }
2209
2210 l2cap_chan_unlock(chan);
2211 + l2cap_chan_put(chan);
2212 }
2213
2214 static void l2cap_move_fail(struct l2cap_conn *conn, u8 ident, u16 icid,
2215 @@ -5155,6 +5184,7 @@ static void l2cap_move_fail(struct l2cap_conn *conn, u8 ident, u16 icid,
2216 l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
2217
2218 l2cap_chan_unlock(chan);
2219 + l2cap_chan_put(chan);
2220 }
2221
2222 static int l2cap_move_channel_rsp(struct l2cap_conn *conn,
2223 @@ -5218,6 +5248,7 @@ static int l2cap_move_channel_confirm(struct l2cap_conn *conn,
2224 l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
2225
2226 l2cap_chan_unlock(chan);
2227 + l2cap_chan_put(chan);
2228
2229 return 0;
2230 }
2231 @@ -5253,6 +5284,7 @@ static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn *conn,
2232 }
2233
2234 l2cap_chan_unlock(chan);
2235 + l2cap_chan_put(chan);
2236
2237 return 0;
2238 }
2239 @@ -5625,12 +5657,11 @@ static inline int l2cap_le_credits(struct l2cap_conn *conn,
2240 if (credits > max_credits) {
2241 BT_ERR("LE credits overflow");
2242 l2cap_send_disconn_req(chan, ECONNRESET);
2243 - l2cap_chan_unlock(chan);
2244
2245 /* Return 0 so that we don't trigger an unnecessary
2246 * command reject packet.
2247 */
2248 - return 0;
2249 + goto unlock;
2250 }
2251
2252 chan->tx_credits += credits;
2253 @@ -5643,7 +5674,9 @@ static inline int l2cap_le_credits(struct l2cap_conn *conn,
2254 if (chan->tx_credits)
2255 chan->ops->resume(chan);
2256
2257 +unlock:
2258 l2cap_chan_unlock(chan);
2259 + l2cap_chan_put(chan);
2260
2261 return 0;
2262 }
2263 @@ -6941,6 +6974,7 @@ drop:
2264
2265 done:
2266 l2cap_chan_unlock(chan);
2267 + l2cap_chan_put(chan);
2268 }
2269
2270 static void l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm,
2271 @@ -7345,7 +7379,7 @@ static struct l2cap_chan *l2cap_global_fixed_chan(struct l2cap_chan *c,
2272 if (src_type != c->src_type)
2273 continue;
2274
2275 - l2cap_chan_hold(c);
2276 + c = l2cap_chan_hold_unless_zero(c);
2277 read_unlock(&chan_list_lock);
2278 return c;
2279 }
2280 diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
2281 index 5b6d935a028c2..49061c3fc2183 100644
2282 --- a/net/ipv4/tcp_output.c
2283 +++ b/net/ipv4/tcp_output.c
2284 @@ -2986,11 +2986,12 @@ begin_fwd:
2285 */
2286 void sk_forced_mem_schedule(struct sock *sk, int size)
2287 {
2288 - int amt;
2289 + int delta, amt;
2290
2291 - if (size <= sk->sk_forward_alloc)
2292 + delta = size - sk->sk_forward_alloc;
2293 + if (delta <= 0)
2294 return;
2295 - amt = sk_mem_pages(size);
2296 + amt = sk_mem_pages(delta);
2297 sk->sk_forward_alloc += amt * SK_MEM_QUANTUM;
2298 sk_memory_allocated_add(sk, amt);
2299
2300 diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c
2301 index e209ae19fe781..298ac357a132e 100644
2302 --- a/net/ipv6/ping.c
2303 +++ b/net/ipv6/ping.c
2304 @@ -26,6 +26,11 @@
2305 #include <net/transp_v6.h>
2306 #include <net/ping.h>
2307
2308 +static void ping_v6_destroy(struct sock *sk)
2309 +{
2310 + inet6_destroy_sock(sk);
2311 +}
2312 +
2313 /* Compatibility glue so we can support IPv6 when it's compiled as a module */
2314 static int dummy_ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len,
2315 int *addr_len)
2316 @@ -179,6 +184,7 @@ struct proto pingv6_prot = {
2317 .owner = THIS_MODULE,
2318 .init = ping_init_sock,
2319 .close = ping_close,
2320 + .destroy = ping_v6_destroy,
2321 .connect = ip6_datagram_connect_v6_only,
2322 .disconnect = __udp_disconnect,
2323 .setsockopt = ipv6_setsockopt,
2324 diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
2325 index 0aad9b8466aa8..4a4dae9929367 100644
2326 --- a/net/netfilter/nf_tables_api.c
2327 +++ b/net/netfilter/nf_tables_api.c
2328 @@ -119,6 +119,7 @@ static struct nft_trans *nft_trans_alloc(struct nft_ctx *ctx, int msg_type,
2329 if (trans == NULL)
2330 return NULL;
2331
2332 + INIT_LIST_HEAD(&trans->list);
2333 trans->msg_type = msg_type;
2334 trans->ctx = *ctx;
2335
2336 @@ -2514,7 +2515,7 @@ cont:
2337 list_for_each_entry(i, &ctx->table->sets, list) {
2338 int tmp;
2339
2340 - if (!nft_is_active_next(ctx->net, set))
2341 + if (!nft_is_active_next(ctx->net, i))
2342 continue;
2343 if (!sscanf(i->name, name, &tmp))
2344 continue;
2345 diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c
2346 index 66814a9d030cc..80715b495d7c0 100644
2347 --- a/net/netfilter/nfnetlink_queue.c
2348 +++ b/net/netfilter/nfnetlink_queue.c
2349 @@ -807,11 +807,16 @@ nfqnl_enqueue_packet(struct nf_queue_entry *entry, unsigned int queuenum)
2350 }
2351
2352 static int
2353 -nfqnl_mangle(void *data, int data_len, struct nf_queue_entry *e, int diff)
2354 +nfqnl_mangle(void *data, unsigned int data_len, struct nf_queue_entry *e, int diff)
2355 {
2356 struct sk_buff *nskb;
2357
2358 if (diff < 0) {
2359 + unsigned int min_len = skb_transport_offset(e->skb);
2360 +
2361 + if (data_len < min_len)
2362 + return -EINVAL;
2363 +
2364 if (pskb_trim(e->skb, data_len))
2365 return -ENOMEM;
2366 } else if (diff > 0) {
2367 diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c
2368 index 606a11f681d28..1c927112ff09d 100644
2369 --- a/net/rds/ib_recv.c
2370 +++ b/net/rds/ib_recv.c
2371 @@ -356,6 +356,7 @@ static int acquire_refill(struct rds_connection *conn)
2372 static void release_refill(struct rds_connection *conn)
2373 {
2374 clear_bit(RDS_RECV_REFILL, &conn->c_flags);
2375 + smp_mb__after_atomic();
2376
2377 /* We don't use wait_on_bit()/wake_up_bit() because our waking is in a
2378 * hot path and finding waiters is very rare. We don't want to walk
2379 diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c
2380 index f20373588a99e..ce732ce9f9c98 100644
2381 --- a/net/sched/cls_route.c
2382 +++ b/net/sched/cls_route.c
2383 @@ -427,6 +427,9 @@ static int route4_set_parms(struct net *net, struct tcf_proto *tp,
2384 goto errout;
2385 }
2386
2387 + if (!nhandle)
2388 + return -EINVAL;
2389 +
2390 h1 = to_hash(nhandle);
2391 b = rtnl_dereference(head->table[h1]);
2392 if (!b) {
2393 @@ -486,6 +489,9 @@ static int route4_change(struct net *net, struct sk_buff *in_skb,
2394 int err;
2395 bool new = true;
2396
2397 + if (!handle)
2398 + return -EINVAL;
2399 +
2400 if (opt == NULL)
2401 return handle ? -EINVAL : 0;
2402
2403 @@ -534,7 +540,7 @@ static int route4_change(struct net *net, struct sk_buff *in_skb,
2404 rcu_assign_pointer(f->next, f1);
2405 rcu_assign_pointer(*fp, f);
2406
2407 - if (fold && fold->handle && f->handle != fold->handle) {
2408 + if (fold) {
2409 th = to_hash(fold->handle);
2410 h = from_hash(fold->handle >> 16);
2411 b = rtnl_dereference(head->table[th]);
2412 diff --git a/net/sunrpc/backchannel_rqst.c b/net/sunrpc/backchannel_rqst.c
2413 index ac701c28f44f3..a441dd119533f 100644
2414 --- a/net/sunrpc/backchannel_rqst.c
2415 +++ b/net/sunrpc/backchannel_rqst.c
2416 @@ -69,6 +69,17 @@ static void xprt_free_allocation(struct rpc_rqst *req)
2417 kfree(req);
2418 }
2419
2420 +static void xprt_bc_reinit_xdr_buf(struct xdr_buf *buf)
2421 +{
2422 + buf->head[0].iov_len = PAGE_SIZE;
2423 + buf->tail[0].iov_len = 0;
2424 + buf->pages = NULL;
2425 + buf->page_len = 0;
2426 + buf->flags = 0;
2427 + buf->len = 0;
2428 + buf->buflen = PAGE_SIZE;
2429 +}
2430 +
2431 static int xprt_alloc_xdr_buf(struct xdr_buf *buf, gfp_t gfp_flags)
2432 {
2433 struct page *page;
2434 @@ -291,6 +302,9 @@ void xprt_free_bc_rqst(struct rpc_rqst *req)
2435 */
2436 spin_lock_bh(&xprt->bc_pa_lock);
2437 if (xprt_need_to_requeue(xprt)) {
2438 + xprt_bc_reinit_xdr_buf(&req->rq_snd_buf);
2439 + xprt_bc_reinit_xdr_buf(&req->rq_rcv_buf);
2440 + req->rq_rcv_buf.len = PAGE_SIZE;
2441 list_add_tail(&req->rq_bc_pa_list, &xprt->bc_pa_list);
2442 xprt->bc_alloc_count++;
2443 req = NULL;
2444 diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
2445 index 46ff984da6f44..08f8dc436448e 100644
2446 --- a/net/vmw_vsock/af_vsock.c
2447 +++ b/net/vmw_vsock/af_vsock.c
2448 @@ -1205,7 +1205,14 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
2449 * timeout fires.
2450 */
2451 sock_hold(sk);
2452 - schedule_delayed_work(&vsk->connect_work, timeout);
2453 +
2454 + /* If the timeout function is already scheduled,
2455 + * reschedule it, then ungrab the socket refcount to
2456 + * keep it balanced.
2457 + */
2458 + if (mod_delayed_work(system_wq, &vsk->connect_work,
2459 + timeout))
2460 + sock_put(sk);
2461
2462 /* Skip ahead to preserve error code set above. */
2463 goto out_wait;
2464 diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
2465 index eb503eccbacc8..ac2381eec27fa 100644
2466 --- a/security/selinux/hooks.c
2467 +++ b/security/selinux/hooks.c
2468 @@ -231,12 +231,13 @@ static int inode_alloc_security(struct inode *inode)
2469 if (!isec)
2470 return -ENOMEM;
2471
2472 - mutex_init(&isec->lock);
2473 + spin_lock_init(&isec->lock);
2474 INIT_LIST_HEAD(&isec->list);
2475 isec->inode = inode;
2476 isec->sid = SECINITSID_UNLABELED;
2477 isec->sclass = SECCLASS_FILE;
2478 isec->task_sid = sid;
2479 + isec->initialized = LABEL_INVALID;
2480 inode->i_security = isec;
2481
2482 return 0;
2483 @@ -247,7 +248,7 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
2484 /*
2485 * Try reloading inode security labels that have been marked as invalid. The
2486 * @may_sleep parameter indicates when sleeping and thus reloading labels is
2487 - * allowed; when set to false, returns ERR_PTR(-ECHILD) when the label is
2488 + * allowed; when set to false, returns -ECHILD when the label is
2489 * invalid. The @opt_dentry parameter should be set to a dentry of the inode;
2490 * when no dentry is available, set it to NULL instead.
2491 */
2492 @@ -1386,7 +1387,8 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
2493 {
2494 struct superblock_security_struct *sbsec = NULL;
2495 struct inode_security_struct *isec = inode->i_security;
2496 - u32 sid;
2497 + u32 task_sid, sid = 0;
2498 + u16 sclass;
2499 struct dentry *dentry;
2500 #define INITCONTEXTLEN 255
2501 char *context = NULL;
2502 @@ -1394,12 +1396,15 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
2503 int rc = 0;
2504
2505 if (isec->initialized == LABEL_INITIALIZED)
2506 - goto out;
2507 + return 0;
2508
2509 - mutex_lock(&isec->lock);
2510 + spin_lock(&isec->lock);
2511 if (isec->initialized == LABEL_INITIALIZED)
2512 goto out_unlock;
2513
2514 + if (isec->sclass == SECCLASS_FILE)
2515 + isec->sclass = inode_mode_to_security_class(inode->i_mode);
2516 +
2517 sbsec = inode->i_sb->s_security;
2518 if (!(sbsec->flags & SE_SBINITIALIZED)) {
2519 /* Defer initialization until selinux_complete_init,
2520 @@ -1412,12 +1417,18 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
2521 goto out_unlock;
2522 }
2523
2524 + sclass = isec->sclass;
2525 + task_sid = isec->task_sid;
2526 + sid = isec->sid;
2527 + isec->initialized = LABEL_PENDING;
2528 + spin_unlock(&isec->lock);
2529 +
2530 switch (sbsec->behavior) {
2531 case SECURITY_FS_USE_NATIVE:
2532 break;
2533 case SECURITY_FS_USE_XATTR:
2534 if (!(inode->i_opflags & IOP_XATTR)) {
2535 - isec->sid = sbsec->def_sid;
2536 + sid = sbsec->def_sid;
2537 break;
2538 }
2539 /* Need a dentry, since the xattr API requires one.
2540 @@ -1439,7 +1450,7 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
2541 * inode_doinit with a dentry, before these inodes could
2542 * be used again by userspace.
2543 */
2544 - goto out_unlock;
2545 + goto out_invalid;
2546 }
2547
2548 len = INITCONTEXTLEN;
2549 @@ -1447,7 +1458,7 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
2550 if (!context) {
2551 rc = -ENOMEM;
2552 dput(dentry);
2553 - goto out_unlock;
2554 + goto out;
2555 }
2556 context[len] = '\0';
2557 rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len);
2558 @@ -1458,14 +1469,14 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
2559 rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0);
2560 if (rc < 0) {
2561 dput(dentry);
2562 - goto out_unlock;
2563 + goto out;
2564 }
2565 len = rc;
2566 context = kmalloc(len+1, GFP_NOFS);
2567 if (!context) {
2568 rc = -ENOMEM;
2569 dput(dentry);
2570 - goto out_unlock;
2571 + goto out;
2572 }
2573 context[len] = '\0';
2574 rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len);
2575 @@ -1477,7 +1488,7 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
2576 "%d for dev=%s ino=%ld\n", __func__,
2577 -rc, inode->i_sb->s_id, inode->i_ino);
2578 kfree(context);
2579 - goto out_unlock;
2580 + goto out;
2581 }
2582 /* Map ENODATA to the default file SID */
2583 sid = sbsec->def_sid;
2584 @@ -1507,29 +1518,25 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
2585 }
2586 }
2587 kfree(context);
2588 - isec->sid = sid;
2589 break;
2590 case SECURITY_FS_USE_TASK:
2591 - isec->sid = isec->task_sid;
2592 + sid = task_sid;
2593 break;
2594 case SECURITY_FS_USE_TRANS:
2595 /* Default to the fs SID. */
2596 - isec->sid = sbsec->sid;
2597 + sid = sbsec->sid;
2598
2599 /* Try to obtain a transition SID. */
2600 - isec->sclass = inode_mode_to_security_class(inode->i_mode);
2601 - rc = security_transition_sid(isec->task_sid, sbsec->sid,
2602 - isec->sclass, NULL, &sid);
2603 + rc = security_transition_sid(task_sid, sid, sclass, NULL, &sid);
2604 if (rc)
2605 - goto out_unlock;
2606 - isec->sid = sid;
2607 + goto out;
2608 break;
2609 case SECURITY_FS_USE_MNTPOINT:
2610 - isec->sid = sbsec->mntpoint_sid;
2611 + sid = sbsec->mntpoint_sid;
2612 break;
2613 default:
2614 /* Default to the fs superblock SID. */
2615 - isec->sid = sbsec->sid;
2616 + sid = sbsec->sid;
2617
2618 if ((sbsec->flags & SE_SBGENFS) && !S_ISLNK(inode->i_mode)) {
2619 /* We must have a dentry to determine the label on
2620 @@ -1552,26 +1559,39 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
2621 * could be used again by userspace.
2622 */
2623 if (!dentry)
2624 - goto out_unlock;
2625 - isec->sclass = inode_mode_to_security_class(inode->i_mode);
2626 - rc = selinux_genfs_get_sid(dentry, isec->sclass,
2627 + goto out_invalid;
2628 + rc = selinux_genfs_get_sid(dentry, sclass,
2629 sbsec->flags, &sid);
2630 dput(dentry);
2631 if (rc)
2632 - goto out_unlock;
2633 - isec->sid = sid;
2634 + goto out;
2635 }
2636 break;
2637 }
2638
2639 - isec->initialized = LABEL_INITIALIZED;
2640 +out:
2641 + spin_lock(&isec->lock);
2642 + if (isec->initialized == LABEL_PENDING) {
2643 + if (rc) {
2644 + isec->initialized = LABEL_INVALID;
2645 + goto out_unlock;
2646 + }
2647 + isec->initialized = LABEL_INITIALIZED;
2648 + isec->sid = sid;
2649 + }
2650
2651 out_unlock:
2652 - mutex_unlock(&isec->lock);
2653 -out:
2654 - if (isec->sclass == SECCLASS_FILE)
2655 - isec->sclass = inode_mode_to_security_class(inode->i_mode);
2656 + spin_unlock(&isec->lock);
2657 return rc;
2658 +
2659 +out_invalid:
2660 + spin_lock(&isec->lock);
2661 + if (isec->initialized == LABEL_PENDING) {
2662 + isec->initialized = LABEL_INVALID;
2663 + isec->sid = sid;
2664 + }
2665 + spin_unlock(&isec->lock);
2666 + return 0;
2667 }
2668
2669 /* Convert a Linux signal to an access vector. */
2670 @@ -3200,9 +3220,11 @@ static void selinux_inode_post_setxattr(struct dentry *dentry, const char *name,
2671 }
2672
2673 isec = backing_inode_security(dentry);
2674 + spin_lock(&isec->lock);
2675 isec->sclass = inode_mode_to_security_class(inode->i_mode);
2676 isec->sid = newsid;
2677 isec->initialized = LABEL_INITIALIZED;
2678 + spin_unlock(&isec->lock);
2679
2680 return;
2681 }
2682 @@ -3299,9 +3321,11 @@ static int selinux_inode_setsecurity(struct inode *inode, const char *name,
2683 if (rc)
2684 return rc;
2685
2686 + spin_lock(&isec->lock);
2687 isec->sclass = inode_mode_to_security_class(inode->i_mode);
2688 isec->sid = newsid;
2689 isec->initialized = LABEL_INITIALIZED;
2690 + spin_unlock(&isec->lock);
2691 return 0;
2692 }
2693
2694 @@ -3957,8 +3981,11 @@ static void selinux_task_to_inode(struct task_struct *p,
2695 struct inode_security_struct *isec = inode->i_security;
2696 u32 sid = task_sid(p);
2697
2698 + spin_lock(&isec->lock);
2699 + isec->sclass = inode_mode_to_security_class(inode->i_mode);
2700 isec->sid = sid;
2701 isec->initialized = LABEL_INITIALIZED;
2702 + spin_unlock(&isec->lock);
2703 }
2704
2705 /* Returns error only if unable to parse addresses */
2706 @@ -4277,24 +4304,24 @@ static int selinux_socket_post_create(struct socket *sock, int family,
2707 const struct task_security_struct *tsec = current_security();
2708 struct inode_security_struct *isec = inode_security_novalidate(SOCK_INODE(sock));
2709 struct sk_security_struct *sksec;
2710 + u16 sclass = socket_type_to_security_class(family, type, protocol);
2711 + u32 sid = SECINITSID_KERNEL;
2712 int err = 0;
2713
2714 - isec->sclass = socket_type_to_security_class(family, type, protocol);
2715 -
2716 - if (kern)
2717 - isec->sid = SECINITSID_KERNEL;
2718 - else {
2719 - err = socket_sockcreate_sid(tsec, isec->sclass, &(isec->sid));
2720 + if (!kern) {
2721 + err = socket_sockcreate_sid(tsec, sclass, &sid);
2722 if (err)
2723 return err;
2724 }
2725
2726 + isec->sclass = sclass;
2727 + isec->sid = sid;
2728 isec->initialized = LABEL_INITIALIZED;
2729
2730 if (sock->sk) {
2731 sksec = sock->sk->sk_security;
2732 - sksec->sid = isec->sid;
2733 - sksec->sclass = isec->sclass;
2734 + sksec->sclass = sclass;
2735 + sksec->sid = sid;
2736 err = selinux_netlbl_socket_post_create(sock->sk, family);
2737 }
2738
2739 @@ -4478,16 +4505,22 @@ static int selinux_socket_accept(struct socket *sock, struct socket *newsock)
2740 int err;
2741 struct inode_security_struct *isec;
2742 struct inode_security_struct *newisec;
2743 + u16 sclass;
2744 + u32 sid;
2745
2746 err = sock_has_perm(current, sock->sk, SOCKET__ACCEPT);
2747 if (err)
2748 return err;
2749
2750 - newisec = inode_security_novalidate(SOCK_INODE(newsock));
2751 -
2752 isec = inode_security_novalidate(SOCK_INODE(sock));
2753 - newisec->sclass = isec->sclass;
2754 - newisec->sid = isec->sid;
2755 + spin_lock(&isec->lock);
2756 + sclass = isec->sclass;
2757 + sid = isec->sid;
2758 + spin_unlock(&isec->lock);
2759 +
2760 + newisec = inode_security_novalidate(SOCK_INODE(newsock));
2761 + newisec->sclass = sclass;
2762 + newisec->sid = sid;
2763 newisec->initialized = LABEL_INITIALIZED;
2764
2765 return 0;
2766 @@ -6010,9 +6043,9 @@ static void selinux_inode_invalidate_secctx(struct inode *inode)
2767 {
2768 struct inode_security_struct *isec = inode->i_security;
2769
2770 - mutex_lock(&isec->lock);
2771 + spin_lock(&isec->lock);
2772 isec->initialized = LABEL_INVALID;
2773 - mutex_unlock(&isec->lock);
2774 + spin_unlock(&isec->lock);
2775 }
2776
2777 /*
2778 diff --git a/security/selinux/include/objsec.h b/security/selinux/include/objsec.h
2779 index c21e135460a5e..e8dab0f02c727 100644
2780 --- a/security/selinux/include/objsec.h
2781 +++ b/security/selinux/include/objsec.h
2782 @@ -39,7 +39,8 @@ struct task_security_struct {
2783
2784 enum label_initialized {
2785 LABEL_INVALID, /* invalid or not initialized */
2786 - LABEL_INITIALIZED /* initialized */
2787 + LABEL_INITIALIZED, /* initialized */
2788 + LABEL_PENDING
2789 };
2790
2791 struct inode_security_struct {
2792 @@ -52,7 +53,7 @@ struct inode_security_struct {
2793 u32 sid; /* SID of this object */
2794 u16 sclass; /* security class of this object */
2795 unsigned char initialized; /* initialization flag */
2796 - struct mutex lock;
2797 + spinlock_t lock;
2798 };
2799
2800 struct file_security_struct {
2801 diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
2802 index ef1226c1c3add..a033306d14eed 100644
2803 --- a/security/selinux/selinuxfs.c
2804 +++ b/security/selinux/selinuxfs.c
2805 @@ -1301,7 +1301,7 @@ static int sel_make_bools(void)
2806 goto out;
2807
2808 isec->sid = sid;
2809 - isec->initialized = 1;
2810 + isec->initialized = LABEL_INITIALIZED;
2811 inode->i_fop = &sel_bool_ops;
2812 inode->i_ino = i|SEL_BOOL_INO_OFFSET;
2813 d_add(dentry, inode);
2814 @@ -1835,7 +1835,7 @@ static int sel_fill_super(struct super_block *sb, void *data, int silent)
2815 isec = (struct inode_security_struct *)inode->i_security;
2816 isec->sid = SECINITSID_DEVNULL;
2817 isec->sclass = SECCLASS_CHR_FILE;
2818 - isec->initialized = 1;
2819 + isec->initialized = LABEL_INITIALIZED;
2820
2821 init_special_inode(inode, S_IFCHR | S_IRUGO | S_IWUGO, MKDEV(MEM_MAJOR, 3));
2822 d_add(dentry, inode);
2823 diff --git a/sound/core/info.c b/sound/core/info.c
2824 index 8a6fa8fd0aabd..b6ec13ccf60c4 100644
2825 --- a/sound/core/info.c
2826 +++ b/sound/core/info.c
2827 @@ -127,9 +127,9 @@ static loff_t snd_info_entry_llseek(struct file *file, loff_t offset, int orig)
2828 entry = data->entry;
2829 mutex_lock(&entry->access);
2830 if (entry->c.ops->llseek) {
2831 - offset = entry->c.ops->llseek(entry,
2832 - data->file_private_data,
2833 - file, offset, orig);
2834 + ret = entry->c.ops->llseek(entry,
2835 + data->file_private_data,
2836 + file, offset, orig);
2837 goto out;
2838 }
2839
2840 diff --git a/sound/core/misc.c b/sound/core/misc.c
2841 index f2e8226c88fbb..efe26b8ca57fe 100644
2842 --- a/sound/core/misc.c
2843 +++ b/sound/core/misc.c
2844 @@ -25,6 +25,7 @@
2845 #include <linux/time.h>
2846 #include <linux/slab.h>
2847 #include <linux/ioport.h>
2848 +#include <linux/fs.h>
2849 #include <sound/core.h>
2850
2851 #ifdef CONFIG_SND_DEBUG
2852 @@ -153,3 +154,96 @@ snd_pci_quirk_lookup(struct pci_dev *pci, const struct snd_pci_quirk *list)
2853 }
2854 EXPORT_SYMBOL(snd_pci_quirk_lookup);
2855 #endif
2856 +
2857 +/*
2858 + * Deferred async signal helpers
2859 + *
2860 + * Below are a few helper functions to wrap the async signal handling
2861 + * in the deferred work. The main purpose is to avoid the messy deadlock
2862 + * around tasklist_lock and co at the kill_fasync() invocation.
2863 + * fasync_helper() and kill_fasync() are replaced with snd_fasync_helper()
2864 + * and snd_kill_fasync(), respectively. In addition, snd_fasync_free() has
2865 + * to be called at releasing the relevant file object.
2866 + */
2867 +struct snd_fasync {
2868 + struct fasync_struct *fasync;
2869 + int signal;
2870 + int poll;
2871 + int on;
2872 + struct list_head list;
2873 +};
2874 +
2875 +static DEFINE_SPINLOCK(snd_fasync_lock);
2876 +static LIST_HEAD(snd_fasync_list);
2877 +
2878 +static void snd_fasync_work_fn(struct work_struct *work)
2879 +{
2880 + struct snd_fasync *fasync;
2881 +
2882 + spin_lock_irq(&snd_fasync_lock);
2883 + while (!list_empty(&snd_fasync_list)) {
2884 + fasync = list_first_entry(&snd_fasync_list, struct snd_fasync, list);
2885 + list_del_init(&fasync->list);
2886 + spin_unlock_irq(&snd_fasync_lock);
2887 + if (fasync->on)
2888 + kill_fasync(&fasync->fasync, fasync->signal, fasync->poll);
2889 + spin_lock_irq(&snd_fasync_lock);
2890 + }
2891 + spin_unlock_irq(&snd_fasync_lock);
2892 +}
2893 +
2894 +static DECLARE_WORK(snd_fasync_work, snd_fasync_work_fn);
2895 +
2896 +int snd_fasync_helper(int fd, struct file *file, int on,
2897 + struct snd_fasync **fasyncp)
2898 +{
2899 + struct snd_fasync *fasync = NULL;
2900 +
2901 + if (on) {
2902 + fasync = kzalloc(sizeof(*fasync), GFP_KERNEL);
2903 + if (!fasync)
2904 + return -ENOMEM;
2905 + INIT_LIST_HEAD(&fasync->list);
2906 + }
2907 +
2908 + spin_lock_irq(&snd_fasync_lock);
2909 + if (*fasyncp) {
2910 + kfree(fasync);
2911 + fasync = *fasyncp;
2912 + } else {
2913 + if (!fasync) {
2914 + spin_unlock_irq(&snd_fasync_lock);
2915 + return 0;
2916 + }
2917 + *fasyncp = fasync;
2918 + }
2919 + fasync->on = on;
2920 + spin_unlock_irq(&snd_fasync_lock);
2921 + return fasync_helper(fd, file, on, &fasync->fasync);
2922 +}
2923 +EXPORT_SYMBOL_GPL(snd_fasync_helper);
2924 +
2925 +void snd_kill_fasync(struct snd_fasync *fasync, int signal, int poll)
2926 +{
2927 + unsigned long flags;
2928 +
2929 + if (!fasync || !fasync->on)
2930 + return;
2931 + spin_lock_irqsave(&snd_fasync_lock, flags);
2932 + fasync->signal = signal;
2933 + fasync->poll = poll;
2934 + list_move(&fasync->list, &snd_fasync_list);
2935 + schedule_work(&snd_fasync_work);
2936 + spin_unlock_irqrestore(&snd_fasync_lock, flags);
2937 +}
2938 +EXPORT_SYMBOL_GPL(snd_kill_fasync);
2939 +
2940 +void snd_fasync_free(struct snd_fasync *fasync)
2941 +{
2942 + if (!fasync)
2943 + return;
2944 + fasync->on = 0;
2945 + flush_work(&snd_fasync_work);
2946 + kfree(fasync);
2947 +}
2948 +EXPORT_SYMBOL_GPL(snd_fasync_free);
2949 diff --git a/sound/core/timer.c b/sound/core/timer.c
2950 index 596ba572d6c49..1f5f05e76e59b 100644
2951 --- a/sound/core/timer.c
2952 +++ b/sound/core/timer.c
2953 @@ -74,7 +74,7 @@ struct snd_timer_user {
2954 unsigned int filter;
2955 struct timespec tstamp; /* trigger tstamp */
2956 wait_queue_head_t qchange_sleep;
2957 - struct fasync_struct *fasync;
2958 + struct snd_fasync *fasync;
2959 struct mutex ioctl_lock;
2960 };
2961
2962 @@ -1293,7 +1293,7 @@ static void snd_timer_user_interrupt(struct snd_timer_instance *timeri,
2963 }
2964 __wake:
2965 spin_unlock(&tu->qlock);
2966 - kill_fasync(&tu->fasync, SIGIO, POLL_IN);
2967 + snd_kill_fasync(tu->fasync, SIGIO, POLL_IN);
2968 wake_up(&tu->qchange_sleep);
2969 }
2970
2971 @@ -1330,7 +1330,7 @@ static void snd_timer_user_ccallback(struct snd_timer_instance *timeri,
2972 spin_lock_irqsave(&tu->qlock, flags);
2973 snd_timer_user_append_to_tqueue(tu, &r1);
2974 spin_unlock_irqrestore(&tu->qlock, flags);
2975 - kill_fasync(&tu->fasync, SIGIO, POLL_IN);
2976 + snd_kill_fasync(tu->fasync, SIGIO, POLL_IN);
2977 wake_up(&tu->qchange_sleep);
2978 }
2979
2980 @@ -1397,7 +1397,7 @@ static void snd_timer_user_tinterrupt(struct snd_timer_instance *timeri,
2981 spin_unlock(&tu->qlock);
2982 if (append == 0)
2983 return;
2984 - kill_fasync(&tu->fasync, SIGIO, POLL_IN);
2985 + snd_kill_fasync(tu->fasync, SIGIO, POLL_IN);
2986 wake_up(&tu->qchange_sleep);
2987 }
2988
2989 @@ -1439,6 +1439,7 @@ static int snd_timer_user_release(struct inode *inode, struct file *file)
2990 if (tu->timeri)
2991 snd_timer_close(tu->timeri);
2992 mutex_unlock(&tu->ioctl_lock);
2993 + snd_fasync_free(tu->fasync);
2994 kfree(tu->queue);
2995 kfree(tu->tqueue);
2996 kfree(tu);
2997 @@ -2026,7 +2027,7 @@ static int snd_timer_user_fasync(int fd, struct file * file, int on)
2998 struct snd_timer_user *tu;
2999
3000 tu = file->private_data;
3001 - return fasync_helper(fd, file, on, &tu->fasync);
3002 + return snd_fasync_helper(fd, file, on, &tu->fasync);
3003 }
3004
3005 static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
3006 diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
3007 index d6e079f4ec09d..351cb1fbb48de 100644
3008 --- a/sound/pci/hda/patch_cirrus.c
3009 +++ b/sound/pci/hda/patch_cirrus.c
3010 @@ -409,6 +409,7 @@ static const struct snd_pci_quirk cs420x_fixup_tbl[] = {
3011
3012 /* codec SSID */
3013 SND_PCI_QUIRK(0x106b, 0x0600, "iMac 14,1", CS420X_IMAC27_122),
3014 + SND_PCI_QUIRK(0x106b, 0x0900, "iMac 12,1", CS420X_IMAC27_122),
3015 SND_PCI_QUIRK(0x106b, 0x1c00, "MacBookPro 8,1", CS420X_MBP81),
3016 SND_PCI_QUIRK(0x106b, 0x2000, "iMac 12,2", CS420X_IMAC27_122),
3017 SND_PCI_QUIRK(0x106b, 0x2800, "MacBookPro 10,1", CS420X_MBP101),
3018 diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
3019 index 5a3dd06ff105d..49e3002555050 100644
3020 --- a/sound/pci/hda/patch_conexant.c
3021 +++ b/sound/pci/hda/patch_conexant.c
3022 @@ -238,6 +238,7 @@ enum {
3023 CXT_PINCFG_LEMOTE_A1205,
3024 CXT_PINCFG_COMPAQ_CQ60,
3025 CXT_FIXUP_STEREO_DMIC,
3026 + CXT_PINCFG_LENOVO_NOTEBOOK,
3027 CXT_FIXUP_INC_MIC_BOOST,
3028 CXT_FIXUP_HEADPHONE_MIC_PIN,
3029 CXT_FIXUP_HEADPHONE_MIC,
3030 @@ -698,6 +699,14 @@ static const struct hda_fixup cxt_fixups[] = {
3031 .type = HDA_FIXUP_FUNC,
3032 .v.func = cxt_fixup_stereo_dmic,
3033 },
3034 + [CXT_PINCFG_LENOVO_NOTEBOOK] = {
3035 + .type = HDA_FIXUP_PINS,
3036 + .v.pins = (const struct hda_pintbl[]) {
3037 + { 0x1a, 0x05d71030 },
3038 + { }
3039 + },
3040 + .chain_id = CXT_FIXUP_STEREO_DMIC,
3041 + },
3042 [CXT_FIXUP_INC_MIC_BOOST] = {
3043 .type = HDA_FIXUP_FUNC,
3044 .v.func = cxt5066_increase_mic_boost,
3045 @@ -860,7 +869,7 @@ static const struct snd_pci_quirk cxt5066_fixups[] = {
3046 SND_PCI_QUIRK(0x17aa, 0x3905, "Lenovo G50-30", CXT_FIXUP_STEREO_DMIC),
3047 SND_PCI_QUIRK(0x17aa, 0x390b, "Lenovo G50-80", CXT_FIXUP_STEREO_DMIC),
3048 SND_PCI_QUIRK(0x17aa, 0x3975, "Lenovo U300s", CXT_FIXUP_STEREO_DMIC),
3049 - SND_PCI_QUIRK(0x17aa, 0x3977, "Lenovo IdeaPad U310", CXT_FIXUP_STEREO_DMIC),
3050 + SND_PCI_QUIRK(0x17aa, 0x3977, "Lenovo IdeaPad U310", CXT_PINCFG_LENOVO_NOTEBOOK),
3051 SND_PCI_QUIRK(0x17aa, 0x3978, "Lenovo G50-70", CXT_FIXUP_STEREO_DMIC),
3052 SND_PCI_QUIRK(0x17aa, 0x397b, "Lenovo S205", CXT_FIXUP_STEREO_DMIC),
3053 SND_PCI_QUIRK_VENDOR(0x17aa, "Thinkpad", CXT_FIXUP_THINKPAD_ACPI),
3054 diff --git a/sound/usb/bcd2000/bcd2000.c b/sound/usb/bcd2000/bcd2000.c
3055 index d060dddcc52d5..379bdf26e9850 100644
3056 --- a/sound/usb/bcd2000/bcd2000.c
3057 +++ b/sound/usb/bcd2000/bcd2000.c
3058 @@ -350,7 +350,8 @@ static int bcd2000_init_midi(struct bcd2000 *bcd2k)
3059 static void bcd2000_free_usb_related_resources(struct bcd2000 *bcd2k,
3060 struct usb_interface *interface)
3061 {
3062 - /* usb_kill_urb not necessary, urb is aborted automatically */
3063 + usb_kill_urb(bcd2k->midi_out_urb);
3064 + usb_kill_urb(bcd2k->midi_in_urb);
3065
3066 usb_free_urb(bcd2k->midi_out_urb);
3067 usb_free_urb(bcd2k->midi_in_urb);