Magellan Linux

Contents of /trunk/kernel-magellan/patches-4.13/0112-4.13.13-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3023 - (show annotations) (download)
Thu Nov 16 11:09:13 2017 UTC (6 years, 5 months ago) by niro
File size: 49155 byte(s)
-linux-4.13.13
1 diff --git a/Makefile b/Makefile
2 index a7c847f495b0..1608a9b71381 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 13
8 -SUBLEVEL = 12
9 +SUBLEVEL = 13
10 EXTRAVERSION =
11 NAME = Fearless Coyote
12
13 diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
14 index 948c648fea00..0fcd82f01388 100644
15 --- a/arch/arm/kernel/traps.c
16 +++ b/arch/arm/kernel/traps.c
17 @@ -154,30 +154,26 @@ static void dump_mem(const char *lvl, const char *str, unsigned long bottom,
18 set_fs(fs);
19 }
20
21 -static void dump_instr(const char *lvl, struct pt_regs *regs)
22 +static void __dump_instr(const char *lvl, struct pt_regs *regs)
23 {
24 unsigned long addr = instruction_pointer(regs);
25 const int thumb = thumb_mode(regs);
26 const int width = thumb ? 4 : 8;
27 - mm_segment_t fs;
28 char str[sizeof("00000000 ") * 5 + 2 + 1], *p = str;
29 int i;
30
31 /*
32 - * We need to switch to kernel mode so that we can use __get_user
33 - * to safely read from kernel space. Note that we now dump the
34 - * code first, just in case the backtrace kills us.
35 + * Note that we now dump the code first, just in case the backtrace
36 + * kills us.
37 */
38 - fs = get_fs();
39 - set_fs(KERNEL_DS);
40
41 for (i = -4; i < 1 + !!thumb; i++) {
42 unsigned int val, bad;
43
44 if (thumb)
45 - bad = __get_user(val, &((u16 *)addr)[i]);
46 + bad = get_user(val, &((u16 *)addr)[i]);
47 else
48 - bad = __get_user(val, &((u32 *)addr)[i]);
49 + bad = get_user(val, &((u32 *)addr)[i]);
50
51 if (!bad)
52 p += sprintf(p, i == 0 ? "(%0*x) " : "%0*x ",
53 @@ -188,8 +184,20 @@ static void dump_instr(const char *lvl, struct pt_regs *regs)
54 }
55 }
56 printk("%sCode: %s\n", lvl, str);
57 +}
58
59 - set_fs(fs);
60 +static void dump_instr(const char *lvl, struct pt_regs *regs)
61 +{
62 + mm_segment_t fs;
63 +
64 + if (!user_mode(regs)) {
65 + fs = get_fs();
66 + set_fs(KERNEL_DS);
67 + __dump_instr(lvl, regs);
68 + set_fs(fs);
69 + } else {
70 + __dump_instr(lvl, regs);
71 + }
72 }
73
74 #ifdef CONFIG_ARM_UNWIND
75 diff --git a/arch/mips/ar7/platform.c b/arch/mips/ar7/platform.c
76 index df7acea3747a..4674f1efbe7a 100644
77 --- a/arch/mips/ar7/platform.c
78 +++ b/arch/mips/ar7/platform.c
79 @@ -575,6 +575,7 @@ static int __init ar7_register_uarts(void)
80 uart_port.type = PORT_AR7;
81 uart_port.uartclk = clk_get_rate(bus_clk) / 2;
82 uart_port.iotype = UPIO_MEM32;
83 + uart_port.flags = UPF_FIXED_TYPE;
84 uart_port.regshift = 2;
85
86 uart_port.line = 0;
87 @@ -653,6 +654,10 @@ static int __init ar7_register_devices(void)
88 u32 val;
89 int res;
90
91 + res = ar7_gpio_init();
92 + if (res)
93 + pr_warn("unable to register gpios: %d\n", res);
94 +
95 res = ar7_register_uarts();
96 if (res)
97 pr_err("unable to setup uart(s): %d\n", res);
98 diff --git a/arch/mips/ar7/prom.c b/arch/mips/ar7/prom.c
99 index 4fd83336131a..dd53987a690f 100644
100 --- a/arch/mips/ar7/prom.c
101 +++ b/arch/mips/ar7/prom.c
102 @@ -246,8 +246,6 @@ void __init prom_init(void)
103 ar7_init_cmdline(fw_arg0, (char **)fw_arg1);
104 ar7_init_env((struct env_var *)fw_arg2);
105 console_config();
106 -
107 - ar7_gpio_init();
108 }
109
110 #define PORT(offset) (KSEG1ADDR(AR7_REGS_UART0 + (offset * 4)))
111 diff --git a/arch/mips/include/asm/mips-cm.h b/arch/mips/include/asm/mips-cm.h
112 index cfdbab015769..163317fd3d7e 100644
113 --- a/arch/mips/include/asm/mips-cm.h
114 +++ b/arch/mips/include/asm/mips-cm.h
115 @@ -240,8 +240,8 @@ BUILD_CM_Cx_R_(tcid_8_priority, 0x80)
116 #define CM_GCR_BASE_GCRBASE_MSK (_ULCAST_(0x1ffff) << 15)
117 #define CM_GCR_BASE_CMDEFTGT_SHF 0
118 #define CM_GCR_BASE_CMDEFTGT_MSK (_ULCAST_(0x3) << 0)
119 -#define CM_GCR_BASE_CMDEFTGT_DISABLED 0
120 -#define CM_GCR_BASE_CMDEFTGT_MEM 1
121 +#define CM_GCR_BASE_CMDEFTGT_MEM 0
122 +#define CM_GCR_BASE_CMDEFTGT_RESERVED 1
123 #define CM_GCR_BASE_CMDEFTGT_IOCU0 2
124 #define CM_GCR_BASE_CMDEFTGT_IOCU1 3
125
126 diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c
127 index 1b070a76fcdd..5e0d87f4958f 100644
128 --- a/arch/mips/kernel/smp-bmips.c
129 +++ b/arch/mips/kernel/smp-bmips.c
130 @@ -589,11 +589,11 @@ void __init bmips_cpu_setup(void)
131
132 /* Flush and enable RAC */
133 cfg = __raw_readl(cbr + BMIPS_RAC_CONFIG);
134 - __raw_writel(cfg | 0x100, BMIPS_RAC_CONFIG);
135 + __raw_writel(cfg | 0x100, cbr + BMIPS_RAC_CONFIG);
136 __raw_readl(cbr + BMIPS_RAC_CONFIG);
137
138 cfg = __raw_readl(cbr + BMIPS_RAC_CONFIG);
139 - __raw_writel(cfg | 0xf, BMIPS_RAC_CONFIG);
140 + __raw_writel(cfg | 0xf, cbr + BMIPS_RAC_CONFIG);
141 __raw_readl(cbr + BMIPS_RAC_CONFIG);
142
143 cfg = __raw_readl(cbr + BMIPS_RAC_ADDRESS_RANGE);
144 diff --git a/arch/powerpc/kvm/book3s_64_mmu_hv.c b/arch/powerpc/kvm/book3s_64_mmu_hv.c
145 index b42812e014c0..1fcc30ff9569 100644
146 --- a/arch/powerpc/kvm/book3s_64_mmu_hv.c
147 +++ b/arch/powerpc/kvm/book3s_64_mmu_hv.c
148 @@ -645,6 +645,16 @@ int kvmppc_book3s_hv_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu,
149 hnow_v = hpte_new_to_old_v(hnow_v, hnow_r);
150 hnow_r = hpte_new_to_old_r(hnow_r);
151 }
152 +
153 + /*
154 + * If the HPT is being resized, don't update the HPTE,
155 + * instead let the guest retry after the resize operation is complete.
156 + * The synchronization for hpte_setup_done test vs. set is provided
157 + * by the HPTE lock.
158 + */
159 + if (!kvm->arch.hpte_setup_done)
160 + goto out_unlock;
161 +
162 if ((hnow_v & ~HPTE_V_HVLOCK) != hpte[0] || hnow_r != hpte[1] ||
163 rev->guest_rpte != hpte[2])
164 /* HPTE has been changed under us; let the guest retry */
165 diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
166 index 9ecd9aea0b54..c059541743f0 100644
167 --- a/arch/powerpc/kvm/book3s_hv.c
168 +++ b/arch/powerpc/kvm/book3s_hv.c
169 @@ -2688,11 +2688,14 @@ static noinline void kvmppc_run_core(struct kvmppc_vcore *vc)
170 * Hard-disable interrupts, and check resched flag and signals.
171 * If we need to reschedule or deliver a signal, clean up
172 * and return without going into the guest(s).
173 + * If the hpte_setup_done flag has been cleared, don't go into the
174 + * guest because that means a HPT resize operation is in progress.
175 */
176 local_irq_disable();
177 hard_irq_disable();
178 if (lazy_irq_pending() || need_resched() ||
179 - recheck_signals(&core_info)) {
180 + recheck_signals(&core_info) ||
181 + (!kvm_is_radix(vc->kvm) && !vc->kvm->arch.hpte_setup_done)) {
182 local_irq_enable();
183 vc->vcore_state = VCORE_INACTIVE;
184 /* Unlock all except the primary vcore */
185 @@ -3061,7 +3064,7 @@ static void kvmppc_vcore_blocked(struct kvmppc_vcore *vc)
186
187 static int kvmppc_run_vcpu(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)
188 {
189 - int n_ceded, i;
190 + int n_ceded, i, r;
191 struct kvmppc_vcore *vc;
192 struct kvm_vcpu *v;
193
194 @@ -3115,6 +3118,20 @@ static int kvmppc_run_vcpu(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)
195
196 while (vcpu->arch.state == KVMPPC_VCPU_RUNNABLE &&
197 !signal_pending(current)) {
198 + /* See if the HPT and VRMA are ready to go */
199 + if (!kvm_is_radix(vcpu->kvm) &&
200 + !vcpu->kvm->arch.hpte_setup_done) {
201 + spin_unlock(&vc->lock);
202 + r = kvmppc_hv_setup_htab_rma(vcpu);
203 + spin_lock(&vc->lock);
204 + if (r) {
205 + kvm_run->exit_reason = KVM_EXIT_FAIL_ENTRY;
206 + kvm_run->fail_entry.hardware_entry_failure_reason = 0;
207 + vcpu->arch.ret = r;
208 + break;
209 + }
210 + }
211 +
212 if (vc->vcore_state == VCORE_PREEMPT && vc->runner == NULL)
213 kvmppc_vcore_end_preempt(vc);
214
215 @@ -3232,13 +3249,6 @@ static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu)
216 /* Order vcpus_running vs. hpte_setup_done, see kvmppc_alloc_reset_hpt */
217 smp_mb();
218
219 - /* On the first time here, set up HTAB and VRMA */
220 - if (!kvm_is_radix(vcpu->kvm) && !vcpu->kvm->arch.hpte_setup_done) {
221 - r = kvmppc_hv_setup_htab_rma(vcpu);
222 - if (r)
223 - goto out;
224 - }
225 -
226 flush_all_to_thread(current);
227
228 /* Save userspace EBB and other register values */
229 @@ -3286,7 +3296,6 @@ static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu)
230 }
231 mtspr(SPRN_VRSAVE, user_vrsave);
232
233 - out:
234 vcpu->arch.state = KVMPPC_VCPU_NOTREADY;
235 atomic_dec(&vcpu->kvm->arch.vcpus_running);
236 return r;
237 diff --git a/arch/x86/crypto/sha1-mb/sha1_mb_mgr_flush_avx2.S b/arch/x86/crypto/sha1-mb/sha1_mb_mgr_flush_avx2.S
238 index 93b945597ecf..7cfba738f104 100644
239 --- a/arch/x86/crypto/sha1-mb/sha1_mb_mgr_flush_avx2.S
240 +++ b/arch/x86/crypto/sha1-mb/sha1_mb_mgr_flush_avx2.S
241 @@ -157,8 +157,8 @@ LABEL skip_ %I
242 .endr
243
244 # Find min length
245 - vmovdqa _lens+0*16(state), %xmm0
246 - vmovdqa _lens+1*16(state), %xmm1
247 + vmovdqu _lens+0*16(state), %xmm0
248 + vmovdqu _lens+1*16(state), %xmm1
249
250 vpminud %xmm1, %xmm0, %xmm2 # xmm2 has {D,C,B,A}
251 vpalignr $8, %xmm2, %xmm3, %xmm3 # xmm3 has {x,x,D,C}
252 @@ -178,8 +178,8 @@ LABEL skip_ %I
253 vpsubd %xmm2, %xmm0, %xmm0
254 vpsubd %xmm2, %xmm1, %xmm1
255
256 - vmovdqa %xmm0, _lens+0*16(state)
257 - vmovdqa %xmm1, _lens+1*16(state)
258 + vmovdqu %xmm0, _lens+0*16(state)
259 + vmovdqu %xmm1, _lens+1*16(state)
260
261 # "state" and "args" are the same address, arg1
262 # len is arg2
263 @@ -235,8 +235,8 @@ ENTRY(sha1_mb_mgr_get_comp_job_avx2)
264 jc .return_null
265
266 # Find min length
267 - vmovdqa _lens(state), %xmm0
268 - vmovdqa _lens+1*16(state), %xmm1
269 + vmovdqu _lens(state), %xmm0
270 + vmovdqu _lens+1*16(state), %xmm1
271
272 vpminud %xmm1, %xmm0, %xmm2 # xmm2 has {D,C,B,A}
273 vpalignr $8, %xmm2, %xmm3, %xmm3 # xmm3 has {x,x,D,C}
274 diff --git a/arch/x86/crypto/sha256-mb/sha256_mb_mgr_flush_avx2.S b/arch/x86/crypto/sha256-mb/sha256_mb_mgr_flush_avx2.S
275 index 8fe6338bcc84..16c4ccb1f154 100644
276 --- a/arch/x86/crypto/sha256-mb/sha256_mb_mgr_flush_avx2.S
277 +++ b/arch/x86/crypto/sha256-mb/sha256_mb_mgr_flush_avx2.S
278 @@ -155,8 +155,8 @@ LABEL skip_ %I
279 .endr
280
281 # Find min length
282 - vmovdqa _lens+0*16(state), %xmm0
283 - vmovdqa _lens+1*16(state), %xmm1
284 + vmovdqu _lens+0*16(state), %xmm0
285 + vmovdqu _lens+1*16(state), %xmm1
286
287 vpminud %xmm1, %xmm0, %xmm2 # xmm2 has {D,C,B,A}
288 vpalignr $8, %xmm2, %xmm3, %xmm3 # xmm3 has {x,x,D,C}
289 @@ -176,8 +176,8 @@ LABEL skip_ %I
290 vpsubd %xmm2, %xmm0, %xmm0
291 vpsubd %xmm2, %xmm1, %xmm1
292
293 - vmovdqa %xmm0, _lens+0*16(state)
294 - vmovdqa %xmm1, _lens+1*16(state)
295 + vmovdqu %xmm0, _lens+0*16(state)
296 + vmovdqu %xmm1, _lens+1*16(state)
297
298 # "state" and "args" are the same address, arg1
299 # len is arg2
300 @@ -234,8 +234,8 @@ ENTRY(sha256_mb_mgr_get_comp_job_avx2)
301 jc .return_null
302
303 # Find min length
304 - vmovdqa _lens(state), %xmm0
305 - vmovdqa _lens+1*16(state), %xmm1
306 + vmovdqu _lens(state), %xmm0
307 + vmovdqu _lens+1*16(state), %xmm1
308
309 vpminud %xmm1, %xmm0, %xmm2 # xmm2 has {D,C,B,A}
310 vpalignr $8, %xmm2, %xmm3, %xmm3 # xmm3 has {x,x,D,C}
311 diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile
312 index 836877e2da22..cdf82492b770 100644
313 --- a/arch/x86/kernel/cpu/Makefile
314 +++ b/arch/x86/kernel/cpu/Makefile
315 @@ -21,7 +21,7 @@ obj-y += common.o
316 obj-y += rdrand.o
317 obj-y += match.o
318 obj-y += bugs.o
319 -obj-y += aperfmperf.o
320 +obj-$(CONFIG_CPU_FREQ) += aperfmperf.o
321
322 obj-$(CONFIG_PROC_FS) += proc.o
323 obj-$(CONFIG_X86_FEATURE_NAMES) += capflags.o powerflags.o
324 diff --git a/arch/x86/kernel/cpu/aperfmperf.c b/arch/x86/kernel/cpu/aperfmperf.c
325 index 957813e0180d..0ee83321a313 100644
326 --- a/arch/x86/kernel/cpu/aperfmperf.c
327 +++ b/arch/x86/kernel/cpu/aperfmperf.c
328 @@ -42,6 +42,10 @@ static void aperfmperf_snapshot_khz(void *dummy)
329 s64 time_delta = ktime_ms_delta(now, s->time);
330 unsigned long flags;
331
332 + /* Don't bother re-computing within the cache threshold time. */
333 + if (time_delta < APERFMPERF_CACHE_THRESHOLD_MS)
334 + return;
335 +
336 local_irq_save(flags);
337 rdmsrl(MSR_IA32_APERF, aperf);
338 rdmsrl(MSR_IA32_MPERF, mperf);
339 @@ -70,7 +74,6 @@ static void aperfmperf_snapshot_khz(void *dummy)
340
341 unsigned int arch_freq_get_on_cpu(int cpu)
342 {
343 - s64 time_delta;
344 unsigned int khz;
345
346 if (!cpu_khz)
347 @@ -79,12 +82,6 @@ unsigned int arch_freq_get_on_cpu(int cpu)
348 if (!static_cpu_has(X86_FEATURE_APERFMPERF))
349 return 0;
350
351 - /* Don't bother re-computing within the cache threshold time. */
352 - time_delta = ktime_ms_delta(ktime_get(), per_cpu(samples.time, cpu));
353 - khz = per_cpu(samples.khz, cpu);
354 - if (khz && time_delta < APERFMPERF_CACHE_THRESHOLD_MS)
355 - return khz;
356 -
357 smp_call_function_single(cpu, aperfmperf_snapshot_khz, NULL, 1);
358 khz = per_cpu(samples.khz, cpu);
359 if (khz)
360 diff --git a/arch/x86/kernel/cpu/proc.c b/arch/x86/kernel/cpu/proc.c
361 index 510e69596278..6df621ae62a7 100644
362 --- a/arch/x86/kernel/cpu/proc.c
363 +++ b/arch/x86/kernel/cpu/proc.c
364 @@ -77,10 +77,8 @@ static int show_cpuinfo(struct seq_file *m, void *v)
365 seq_printf(m, "microcode\t: 0x%x\n", c->microcode);
366
367 if (cpu_has(c, X86_FEATURE_TSC)) {
368 - unsigned int freq = arch_freq_get_on_cpu(cpu);
369 + unsigned int freq = cpufreq_quick_get(cpu);
370
371 - if (!freq)
372 - freq = cpufreq_quick_get(cpu);
373 if (!freq)
374 freq = cpu_khz;
375 seq_printf(m, "cpu MHz\t\t: %u.%03u\n",
376 diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
377 index 54b9e89d4d6b..893fd8c849e2 100644
378 --- a/arch/x86/kernel/smpboot.c
379 +++ b/arch/x86/kernel/smpboot.c
380 @@ -193,6 +193,12 @@ static void smp_callin(void)
381 */
382 smp_store_cpu_info(cpuid);
383
384 + /*
385 + * The topology information must be up to date before
386 + * calibrate_delay() and notify_cpu_starting().
387 + */
388 + set_cpu_sibling_map(raw_smp_processor_id());
389 +
390 /*
391 * Get our bogomips.
392 * Update loops_per_jiffy in cpu_data. Previous call to
393 @@ -203,11 +209,6 @@ static void smp_callin(void)
394 cpu_data(cpuid).loops_per_jiffy = loops_per_jiffy;
395 pr_debug("Stack at about %p\n", &cpuid);
396
397 - /*
398 - * This must be done before setting cpu_online_mask
399 - * or calling notify_cpu_starting.
400 - */
401 - set_cpu_sibling_map(raw_smp_processor_id());
402 wmb();
403
404 notify_cpu_starting(cpuid);
405 diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
406 index bf54309b85da..b2157d4a5338 100644
407 --- a/arch/x86/kernel/traps.c
408 +++ b/arch/x86/kernel/traps.c
409 @@ -221,9 +221,6 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str,
410 if (fixup_exception(regs, trapnr))
411 return 0;
412
413 - if (fixup_bug(regs, trapnr))
414 - return 0;
415 -
416 tsk->thread.error_code = error_code;
417 tsk->thread.trap_nr = trapnr;
418 die(str, regs, error_code);
419 @@ -304,6 +301,13 @@ static void do_error_trap(struct pt_regs *regs, long error_code, char *str,
420
421 RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU");
422
423 + /*
424 + * WARN*()s end up here; fix them up before we call the
425 + * notifier chain.
426 + */
427 + if (!user_mode(regs) && fixup_bug(regs, trapnr))
428 + return;
429 +
430 if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) !=
431 NOTIFY_STOP) {
432 cond_local_irq_enable(regs);
433 diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
434 index 796d96bb0821..ad2b925a808e 100644
435 --- a/arch/x86/kernel/tsc.c
436 +++ b/arch/x86/kernel/tsc.c
437 @@ -1346,12 +1346,10 @@ void __init tsc_init(void)
438 unsigned long calibrate_delay_is_known(void)
439 {
440 int sibling, cpu = smp_processor_id();
441 - struct cpumask *mask = topology_core_cpumask(cpu);
442 + int constant_tsc = cpu_has(&cpu_data(cpu), X86_FEATURE_CONSTANT_TSC);
443 + const struct cpumask *mask = topology_core_cpumask(cpu);
444
445 - if (!tsc_disabled && !cpu_has(&cpu_data(cpu), X86_FEATURE_CONSTANT_TSC))
446 - return 0;
447 -
448 - if (!mask)
449 + if (tsc_disabled || !constant_tsc || !mask)
450 return 0;
451
452 sibling = cpumask_any_but(mask, cpu);
453 diff --git a/arch/x86/oprofile/op_model_ppro.c b/arch/x86/oprofile/op_model_ppro.c
454 index 350f7096baac..7913b6921959 100644
455 --- a/arch/x86/oprofile/op_model_ppro.c
456 +++ b/arch/x86/oprofile/op_model_ppro.c
457 @@ -212,8 +212,8 @@ static void arch_perfmon_setup_counters(void)
458 eax.full = cpuid_eax(0xa);
459
460 /* Workaround for BIOS bugs in 6/15. Taken from perfmon2 */
461 - if (eax.split.version_id == 0 && __this_cpu_read(cpu_info.x86) == 6 &&
462 - __this_cpu_read(cpu_info.x86_model) == 15) {
463 + if (eax.split.version_id == 0 && boot_cpu_data.x86 == 6 &&
464 + boot_cpu_data.x86_model == 15) {
465 eax.split.version_id = 2;
466 eax.split.num_counters = 2;
467 eax.split.bit_width = 40;
468 diff --git a/crypto/ccm.c b/crypto/ccm.c
469 index 1ce37ae0ce56..0a083342ec8c 100644
470 --- a/crypto/ccm.c
471 +++ b/crypto/ccm.c
472 @@ -363,7 +363,7 @@ static int crypto_ccm_decrypt(struct aead_request *req)
473 unsigned int cryptlen = req->cryptlen;
474 u8 *authtag = pctx->auth_tag;
475 u8 *odata = pctx->odata;
476 - u8 *iv = req->iv;
477 + u8 *iv = pctx->idata;
478 int err;
479
480 cryptlen -= authsize;
481 @@ -379,6 +379,8 @@ static int crypto_ccm_decrypt(struct aead_request *req)
482 if (req->src != req->dst)
483 dst = pctx->dst;
484
485 + memcpy(iv, req->iv, 16);
486 +
487 skcipher_request_set_tfm(skreq, ctx->ctr);
488 skcipher_request_set_callback(skreq, pctx->flags,
489 crypto_ccm_decrypt_done, req);
490 diff --git a/drivers/acpi/acpica/evgpeblk.c b/drivers/acpi/acpica/evgpeblk.c
491 index 9c941947a063..3a3cb8624f41 100644
492 --- a/drivers/acpi/acpica/evgpeblk.c
493 +++ b/drivers/acpi/acpica/evgpeblk.c
494 @@ -440,9 +440,11 @@ acpi_ev_initialize_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
495 void *ignored)
496 {
497 acpi_status status;
498 + acpi_event_status event_status;
499 struct acpi_gpe_event_info *gpe_event_info;
500 u32 gpe_enabled_count;
501 u32 gpe_index;
502 + u32 gpe_number;
503 u32 i;
504 u32 j;
505
506 @@ -470,30 +472,40 @@ acpi_ev_initialize_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
507
508 gpe_index = (i * ACPI_GPE_REGISTER_WIDTH) + j;
509 gpe_event_info = &gpe_block->event_info[gpe_index];
510 + gpe_number = gpe_block->block_base_number + gpe_index;
511
512 /*
513 * Ignore GPEs that have no corresponding _Lxx/_Exx method
514 - * and GPEs that are used to wake the system
515 + * and GPEs that are used for wakeup
516 */
517 - if ((ACPI_GPE_DISPATCH_TYPE(gpe_event_info->flags) ==
518 - ACPI_GPE_DISPATCH_NONE)
519 - || (ACPI_GPE_DISPATCH_TYPE(gpe_event_info->flags) ==
520 - ACPI_GPE_DISPATCH_HANDLER)
521 - || (ACPI_GPE_DISPATCH_TYPE(gpe_event_info->flags) ==
522 - ACPI_GPE_DISPATCH_RAW_HANDLER)
523 + if ((ACPI_GPE_DISPATCH_TYPE(gpe_event_info->flags) !=
524 + ACPI_GPE_DISPATCH_METHOD)
525 || (gpe_event_info->flags & ACPI_GPE_CAN_WAKE)) {
526 continue;
527 }
528
529 + event_status = 0;
530 + (void)acpi_hw_get_gpe_status(gpe_event_info,
531 + &event_status);
532 +
533 status = acpi_ev_add_gpe_reference(gpe_event_info);
534 if (ACPI_FAILURE(status)) {
535 ACPI_EXCEPTION((AE_INFO, status,
536 "Could not enable GPE 0x%02X",
537 - gpe_index +
538 - gpe_block->block_base_number));
539 + gpe_number));
540 continue;
541 }
542
543 + gpe_event_info->flags |= ACPI_GPE_AUTO_ENABLED;
544 +
545 + if (event_status & ACPI_EVENT_FLAG_STATUS_SET) {
546 + ACPI_INFO(("GPE 0x%02X active on init",
547 + gpe_number));
548 + (void)acpi_ev_gpe_dispatch(gpe_block->node,
549 + gpe_event_info,
550 + gpe_number);
551 + }
552 +
553 gpe_enabled_count++;
554 }
555 }
556 diff --git a/drivers/acpi/acpica/evxfgpe.c b/drivers/acpi/acpica/evxfgpe.c
557 index 57718a3e029a..67c7c4ce276c 100644
558 --- a/drivers/acpi/acpica/evxfgpe.c
559 +++ b/drivers/acpi/acpica/evxfgpe.c
560 @@ -435,6 +435,14 @@ acpi_setup_gpe_for_wake(acpi_handle wake_device,
561 */
562 gpe_event_info->flags =
563 (ACPI_GPE_DISPATCH_NOTIFY | ACPI_GPE_LEVEL_TRIGGERED);
564 + } else if (gpe_event_info->flags & ACPI_GPE_AUTO_ENABLED) {
565 + /*
566 + * A reference to this GPE has been added during the GPE block
567 + * initialization, so drop it now to prevent the GPE from being
568 + * permanently enabled and clear its ACPI_GPE_AUTO_ENABLED flag.
569 + */
570 + (void)acpi_ev_remove_gpe_reference(gpe_event_info);
571 + gpe_event_info->flags &= ~ACPI_GPE_AUTO_ENABLED;
572 }
573
574 /*
575 diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
576 index 70fd5502c284..b7bdf9d0f5c0 100644
577 --- a/drivers/acpi/scan.c
578 +++ b/drivers/acpi/scan.c
579 @@ -2058,6 +2058,9 @@ int __init acpi_scan_init(void)
580 acpi_get_spcr_uart_addr();
581 }
582
583 + acpi_gpe_apply_masked_gpes();
584 + acpi_update_all_gpes();
585 +
586 mutex_lock(&acpi_scan_lock);
587 /*
588 * Enumerate devices in the ACPI namespace.
589 @@ -2082,9 +2085,6 @@ int __init acpi_scan_init(void)
590 }
591 }
592
593 - acpi_gpe_apply_masked_gpes();
594 - acpi_update_all_gpes();
595 -
596 acpi_scan_initialized = true;
597
598 out:
599 diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
600 index fa8243c5c062..59b78e42a58b 100644
601 --- a/drivers/acpi/sleep.c
602 +++ b/drivers/acpi/sleep.c
603 @@ -160,6 +160,14 @@ static int __init init_nvs_nosave(const struct dmi_system_id *d)
604 return 0;
605 }
606
607 +static bool acpi_sleep_no_lps0;
608 +
609 +static int __init init_no_lps0(const struct dmi_system_id *d)
610 +{
611 + acpi_sleep_no_lps0 = true;
612 + return 0;
613 +}
614 +
615 static struct dmi_system_id acpisleep_dmi_table[] __initdata = {
616 {
617 .callback = init_old_suspend_ordering,
618 @@ -343,6 +351,19 @@ static struct dmi_system_id acpisleep_dmi_table[] __initdata = {
619 DMI_MATCH(DMI_PRODUCT_NAME, "80E3"),
620 },
621 },
622 + /*
623 + * https://bugzilla.kernel.org/show_bug.cgi?id=196907
624 + * Some Dell XPS13 9360 cannot do suspend-to-idle using the Low Power
625 + * S0 Idle firmware interface.
626 + */
627 + {
628 + .callback = init_no_lps0,
629 + .ident = "Dell XPS13 9360",
630 + .matches = {
631 + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
632 + DMI_MATCH(DMI_PRODUCT_NAME, "XPS 13 9360"),
633 + },
634 + },
635 {},
636 };
637
638 @@ -485,6 +506,7 @@ static void acpi_pm_end(void)
639 }
640 #else /* !CONFIG_ACPI_SLEEP */
641 #define acpi_target_sleep_state ACPI_STATE_S0
642 +#define acpi_sleep_no_lps0 (false)
643 static inline void acpi_sleep_dmi_check(void) {}
644 #endif /* CONFIG_ACPI_SLEEP */
645
646 @@ -702,6 +724,12 @@ static int lps0_device_attach(struct acpi_device *adev,
647 if (lps0_device_handle)
648 return 0;
649
650 + if (acpi_sleep_no_lps0) {
651 + acpi_handle_info(adev->handle,
652 + "Low Power S0 Idle interface disabled\n");
653 + return 0;
654 + }
655 +
656 if (!(acpi_gbl_FADT.flags & ACPI_FADT_LOW_POWER_S0))
657 return 0;
658
659 diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
660 index b008b6a98098..cf54a1cf8c55 100644
661 --- a/drivers/block/rbd.c
662 +++ b/drivers/block/rbd.c
663 @@ -2692,7 +2692,7 @@ static int rbd_img_obj_parent_read_full(struct rbd_obj_request *obj_request)
664 * from the parent.
665 */
666 page_count = (u32)calc_pages_for(0, length);
667 - pages = ceph_alloc_page_vector(page_count, GFP_KERNEL);
668 + pages = ceph_alloc_page_vector(page_count, GFP_NOIO);
669 if (IS_ERR(pages)) {
670 result = PTR_ERR(pages);
671 pages = NULL;
672 @@ -2827,7 +2827,7 @@ static int rbd_img_obj_exists_submit(struct rbd_obj_request *obj_request)
673 */
674 size = sizeof (__le64) + sizeof (__le32) + sizeof (__le32);
675 page_count = (u32)calc_pages_for(0, size);
676 - pages = ceph_alloc_page_vector(page_count, GFP_KERNEL);
677 + pages = ceph_alloc_page_vector(page_count, GFP_NOIO);
678 if (IS_ERR(pages)) {
679 ret = PTR_ERR(pages);
680 goto fail_stat_request;
681 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
682 index 4436d53ae16c..f160a66b7098 100644
683 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
684 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
685 @@ -722,7 +722,7 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
686 * allocation taken by fbdev
687 */
688 if (!(dev_priv->capabilities & SVGA_CAP_3D))
689 - mem_size *= 2;
690 + mem_size *= 3;
691
692 dev_priv->max_mob_pages = mem_size * 1024 / PAGE_SIZE;
693 dev_priv->prim_bb_mem =
694 diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
695 index a6b762271a40..47a9696e7874 100644
696 --- a/drivers/input/mouse/elan_i2c_core.c
697 +++ b/drivers/input/mouse/elan_i2c_core.c
698 @@ -1253,6 +1253,7 @@ static const struct acpi_device_id elan_acpi_id[] = {
699 { "ELAN0605", 0 },
700 { "ELAN0609", 0 },
701 { "ELAN060B", 0 },
702 + { "ELAN060C", 0 },
703 { "ELAN0611", 0 },
704 { "ELAN1000", 0 },
705 { }
706 diff --git a/drivers/net/can/c_can/c_can_pci.c b/drivers/net/can/c_can/c_can_pci.c
707 index cf7c18947189..d065c0e2d18e 100644
708 --- a/drivers/net/can/c_can/c_can_pci.c
709 +++ b/drivers/net/can/c_can/c_can_pci.c
710 @@ -178,7 +178,6 @@ static int c_can_pci_probe(struct pci_dev *pdev,
711 break;
712 case BOSCH_D_CAN:
713 priv->regs = reg_map_d_can;
714 - priv->can.ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES;
715 break;
716 default:
717 ret = -EINVAL;
718 diff --git a/drivers/net/can/c_can/c_can_platform.c b/drivers/net/can/c_can/c_can_platform.c
719 index e36d10520e24..717530eac70c 100644
720 --- a/drivers/net/can/c_can/c_can_platform.c
721 +++ b/drivers/net/can/c_can/c_can_platform.c
722 @@ -320,7 +320,6 @@ static int c_can_plat_probe(struct platform_device *pdev)
723 break;
724 case BOSCH_D_CAN:
725 priv->regs = reg_map_d_can;
726 - priv->can.ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES;
727 priv->read_reg = c_can_plat_read_reg_aligned_to_16bit;
728 priv->write_reg = c_can_plat_write_reg_aligned_to_16bit;
729 priv->read_reg32 = d_can_plat_read_reg32;
730 diff --git a/drivers/net/can/ifi_canfd/ifi_canfd.c b/drivers/net/can/ifi_canfd/ifi_canfd.c
731 index 4d1fe8d95042..2772d05ff11c 100644
732 --- a/drivers/net/can/ifi_canfd/ifi_canfd.c
733 +++ b/drivers/net/can/ifi_canfd/ifi_canfd.c
734 @@ -670,9 +670,9 @@ static void ifi_canfd_set_bittiming(struct net_device *ndev)
735 priv->base + IFI_CANFD_FTIME);
736
737 /* Configure transmitter delay */
738 - tdc = (dbt->brp * (dbt->phase_seg1 + 1)) & IFI_CANFD_TDELAY_MASK;
739 - writel(IFI_CANFD_TDELAY_EN | IFI_CANFD_TDELAY_ABS | tdc,
740 - priv->base + IFI_CANFD_TDELAY);
741 + tdc = dbt->brp * (dbt->prop_seg + dbt->phase_seg1);
742 + tdc &= IFI_CANFD_TDELAY_MASK;
743 + writel(IFI_CANFD_TDELAY_EN | tdc, priv->base + IFI_CANFD_TDELAY);
744 }
745
746 static void ifi_canfd_set_filter(struct net_device *ndev, const u32 id,
747 diff --git a/drivers/net/can/peak_canfd/peak_pciefd_main.c b/drivers/net/can/peak_canfd/peak_pciefd_main.c
748 index 51c2d182a33a..b4efd711f824 100644
749 --- a/drivers/net/can/peak_canfd/peak_pciefd_main.c
750 +++ b/drivers/net/can/peak_canfd/peak_pciefd_main.c
751 @@ -29,14 +29,19 @@
752 #include "peak_canfd_user.h"
753
754 MODULE_AUTHOR("Stephane Grosjean <s.grosjean@peak-system.com>");
755 -MODULE_DESCRIPTION("Socket-CAN driver for PEAK PCAN PCIe FD family cards");
756 -MODULE_SUPPORTED_DEVICE("PEAK PCAN PCIe FD CAN cards");
757 +MODULE_DESCRIPTION("Socket-CAN driver for PEAK PCAN PCIe/M.2 FD family cards");
758 +MODULE_SUPPORTED_DEVICE("PEAK PCAN PCIe/M.2 FD CAN cards");
759 MODULE_LICENSE("GPL v2");
760
761 #define PCIEFD_DRV_NAME "peak_pciefd"
762
763 #define PEAK_PCI_VENDOR_ID 0x001c /* The PCI device and vendor IDs */
764 #define PEAK_PCIEFD_ID 0x0013 /* for PCIe slot cards */
765 +#define PCAN_CPCIEFD_ID 0x0014 /* for Compact-PCI Serial slot cards */
766 +#define PCAN_PCIE104FD_ID 0x0017 /* for PCIe-104 Express slot cards */
767 +#define PCAN_MINIPCIEFD_ID 0x0018 /* for mini-PCIe slot cards */
768 +#define PCAN_PCIEFD_OEM_ID 0x0019 /* for PCIe slot OEM cards */
769 +#define PCAN_M2_ID 0x001a /* for M2 slot cards */
770
771 /* PEAK PCIe board access description */
772 #define PCIEFD_BAR0_SIZE (64 * 1024)
773 @@ -203,6 +208,11 @@ struct pciefd_board {
774 /* supported device ids. */
775 static const struct pci_device_id peak_pciefd_tbl[] = {
776 {PEAK_PCI_VENDOR_ID, PEAK_PCIEFD_ID, PCI_ANY_ID, PCI_ANY_ID,},
777 + {PEAK_PCI_VENDOR_ID, PCAN_CPCIEFD_ID, PCI_ANY_ID, PCI_ANY_ID,},
778 + {PEAK_PCI_VENDOR_ID, PCAN_PCIE104FD_ID, PCI_ANY_ID, PCI_ANY_ID,},
779 + {PEAK_PCI_VENDOR_ID, PCAN_MINIPCIEFD_ID, PCI_ANY_ID, PCI_ANY_ID,},
780 + {PEAK_PCI_VENDOR_ID, PCAN_PCIEFD_OEM_ID, PCI_ANY_ID, PCI_ANY_ID,},
781 + {PEAK_PCI_VENDOR_ID, PCAN_M2_ID, PCI_ANY_ID, PCI_ANY_ID,},
782 {0,}
783 };
784
785 diff --git a/drivers/net/can/sun4i_can.c b/drivers/net/can/sun4i_can.c
786 index b0c80859f746..1ac2090a1721 100644
787 --- a/drivers/net/can/sun4i_can.c
788 +++ b/drivers/net/can/sun4i_can.c
789 @@ -539,6 +539,13 @@ static int sun4i_can_err(struct net_device *dev, u8 isrc, u8 status)
790 }
791 stats->rx_over_errors++;
792 stats->rx_errors++;
793 +
794 + /* reset the CAN IP by entering reset mode
795 + * ignoring timeout error
796 + */
797 + set_reset_mode(dev);
798 + set_normal_mode(dev);
799 +
800 /* clear bit */
801 sun4i_can_write_cmdreg(priv, SUN4I_CMD_CLEAR_OR_FLAG);
802 }
803 @@ -653,8 +660,9 @@ static irqreturn_t sun4i_can_interrupt(int irq, void *dev_id)
804 netif_wake_queue(dev);
805 can_led_event(dev, CAN_LED_EVENT_TX);
806 }
807 - if (isrc & SUN4I_INT_RBUF_VLD) {
808 - /* receive interrupt */
809 + if ((isrc & SUN4I_INT_RBUF_VLD) &&
810 + !(isrc & SUN4I_INT_DATA_OR)) {
811 + /* receive interrupt - don't read if overrun occurred */
812 while (status & SUN4I_STA_RBUF_RDY) {
813 /* RX buffer is not empty */
814 sun4i_can_rx(dev);
815 diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h
816 index 2fcbaec8b368..71eddf645566 100644
817 --- a/include/acpi/actypes.h
818 +++ b/include/acpi/actypes.h
819 @@ -775,7 +775,7 @@ typedef u32 acpi_event_status;
820 * | | | | +-- Type of dispatch:to method, handler, notify, or none
821 * | | | +----- Interrupt type: edge or level triggered
822 * | | +------- Is a Wake GPE
823 - * | +--------- Is GPE masked by the software GPE masking mechanism
824 + * | +--------- Has been enabled automatically at init time
825 * +------------ <Reserved>
826 */
827 #define ACPI_GPE_DISPATCH_NONE (u8) 0x00
828 @@ -791,6 +791,7 @@ typedef u32 acpi_event_status;
829 #define ACPI_GPE_XRUPT_TYPE_MASK (u8) 0x08
830
831 #define ACPI_GPE_CAN_WAKE (u8) 0x10
832 +#define ACPI_GPE_AUTO_ENABLED (u8) 0x20
833
834 /*
835 * Flags for GPE and Lock interfaces
836 diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h
837 index 48407569585d..a7c2cee39570 100644
838 --- a/include/net/netfilter/nf_conntrack.h
839 +++ b/include/net/netfilter/nf_conntrack.h
840 @@ -17,7 +17,6 @@
841 #include <linux/bitops.h>
842 #include <linux/compiler.h>
843 #include <linux/atomic.h>
844 -#include <linux/rhashtable.h>
845
846 #include <linux/netfilter/nf_conntrack_tcp.h>
847 #include <linux/netfilter/nf_conntrack_dccp.h>
848 @@ -83,7 +82,7 @@ struct nf_conn {
849 possible_net_t ct_net;
850
851 #if IS_ENABLED(CONFIG_NF_NAT)
852 - struct rhlist_head nat_bysource;
853 + struct hlist_node nat_bysource;
854 #endif
855 /* all members below initialized via memset */
856 u8 __nfct_init_offset[0];
857 diff --git a/include/net/netfilter/nf_nat.h b/include/net/netfilter/nf_nat.h
858 index 05c82a1a4267..b71701302e61 100644
859 --- a/include/net/netfilter/nf_nat.h
860 +++ b/include/net/netfilter/nf_nat.h
861 @@ -1,6 +1,5 @@
862 #ifndef _NF_NAT_H
863 #define _NF_NAT_H
864 -#include <linux/rhashtable.h>
865 #include <linux/netfilter_ipv4.h>
866 #include <linux/netfilter/nf_nat.h>
867 #include <net/netfilter/nf_conntrack_tuple.h>
868 diff --git a/include/sound/seq_kernel.h b/include/sound/seq_kernel.h
869 index feb58d455560..4b9ee3009aa0 100644
870 --- a/include/sound/seq_kernel.h
871 +++ b/include/sound/seq_kernel.h
872 @@ -49,7 +49,8 @@ typedef union snd_seq_timestamp snd_seq_timestamp_t;
873 #define SNDRV_SEQ_DEFAULT_CLIENT_EVENTS 200
874
875 /* max delivery path length */
876 -#define SNDRV_SEQ_MAX_HOPS 10
877 +/* NOTE: this shouldn't be greater than MAX_LOCKDEP_SUBCLASSES */
878 +#define SNDRV_SEQ_MAX_HOPS 8
879
880 /* max size of event size */
881 #define SNDRV_SEQ_MAX_EVENT_LEN 0x3fffffff
882 diff --git a/include/sound/timer.h b/include/sound/timer.h
883 index c4d76ff056c6..7ae226ab6990 100644
884 --- a/include/sound/timer.h
885 +++ b/include/sound/timer.h
886 @@ -90,6 +90,8 @@ struct snd_timer {
887 struct list_head ack_list_head;
888 struct list_head sack_list_head; /* slow ack list head */
889 struct tasklet_struct task_queue;
890 + int max_instances; /* upper limit of timer instances */
891 + int num_instances; /* current number of timer instances */
892 };
893
894 struct snd_timer_instance {
895 diff --git a/kernel/workqueue_internal.h b/kernel/workqueue_internal.h
896 index 8635417c587b..29fa81f0f51a 100644
897 --- a/kernel/workqueue_internal.h
898 +++ b/kernel/workqueue_internal.h
899 @@ -9,6 +9,7 @@
900
901 #include <linux/workqueue.h>
902 #include <linux/kthread.h>
903 +#include <linux/preempt.h>
904
905 struct worker_pool;
906
907 @@ -59,7 +60,7 @@ struct worker {
908 */
909 static inline struct worker *current_wq_worker(void)
910 {
911 - if (current->flags & PF_WQ_WORKER)
912 + if (in_task() && (current->flags & PF_WQ_WORKER))
913 return kthread_data(current);
914 return NULL;
915 }
916 diff --git a/lib/asn1_decoder.c b/lib/asn1_decoder.c
917 index fef5d2e114be..1ef0cec38d78 100644
918 --- a/lib/asn1_decoder.c
919 +++ b/lib/asn1_decoder.c
920 @@ -228,7 +228,7 @@ int asn1_ber_decoder(const struct asn1_decoder *decoder,
921 hdr = 2;
922
923 /* Extract a tag from the data */
924 - if (unlikely(dp >= datalen - 1))
925 + if (unlikely(datalen - dp < 2))
926 goto data_overrun_error;
927 tag = data[dp++];
928 if (unlikely((tag & 0x1f) == ASN1_LONG_TAG))
929 @@ -274,7 +274,7 @@ int asn1_ber_decoder(const struct asn1_decoder *decoder,
930 int n = len - 0x80;
931 if (unlikely(n > 2))
932 goto length_too_long;
933 - if (unlikely(dp >= datalen - n))
934 + if (unlikely(n > datalen - dp))
935 goto data_overrun_error;
936 hdr += n;
937 for (len = 0; n > 0; n--) {
938 diff --git a/net/netfilter/nf_nat_core.c b/net/netfilter/nf_nat_core.c
939 index b1d3740ae36a..2fb80a4bfb34 100644
940 --- a/net/netfilter/nf_nat_core.c
941 +++ b/net/netfilter/nf_nat_core.c
942 @@ -30,19 +30,17 @@
943 #include <net/netfilter/nf_conntrack_zones.h>
944 #include <linux/netfilter/nf_nat.h>
945
946 +static DEFINE_SPINLOCK(nf_nat_lock);
947 +
948 static DEFINE_MUTEX(nf_nat_proto_mutex);
949 static const struct nf_nat_l3proto __rcu *nf_nat_l3protos[NFPROTO_NUMPROTO]
950 __read_mostly;
951 static const struct nf_nat_l4proto __rcu **nf_nat_l4protos[NFPROTO_NUMPROTO]
952 __read_mostly;
953
954 -struct nf_nat_conn_key {
955 - const struct net *net;
956 - const struct nf_conntrack_tuple *tuple;
957 - const struct nf_conntrack_zone *zone;
958 -};
959 -
960 -static struct rhltable nf_nat_bysource_table;
961 +static struct hlist_head *nf_nat_bysource __read_mostly;
962 +static unsigned int nf_nat_htable_size __read_mostly;
963 +static unsigned int nf_nat_hash_rnd __read_mostly;
964
965 inline const struct nf_nat_l3proto *
966 __nf_nat_l3proto_find(u8 family)
967 @@ -118,17 +116,19 @@ int nf_xfrm_me_harder(struct net *net, struct sk_buff *skb, unsigned int family)
968 EXPORT_SYMBOL(nf_xfrm_me_harder);
969 #endif /* CONFIG_XFRM */
970
971 -static u32 nf_nat_bysource_hash(const void *data, u32 len, u32 seed)
972 +/* We keep an extra hash for each conntrack, for fast searching. */
973 +static unsigned int
974 +hash_by_src(const struct net *n, const struct nf_conntrack_tuple *tuple)
975 {
976 - const struct nf_conntrack_tuple *t;
977 - const struct nf_conn *ct = data;
978 + unsigned int hash;
979 +
980 + get_random_once(&nf_nat_hash_rnd, sizeof(nf_nat_hash_rnd));
981
982 - t = &ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple;
983 /* Original src, to ensure we map it consistently if poss. */
984 + hash = jhash2((u32 *)&tuple->src, sizeof(tuple->src) / sizeof(u32),
985 + tuple->dst.protonum ^ nf_nat_hash_rnd ^ net_hash_mix(n));
986
987 - seed ^= net_hash_mix(nf_ct_net(ct));
988 - return jhash2((const u32 *)&t->src, sizeof(t->src) / sizeof(u32),
989 - t->dst.protonum ^ seed);
990 + return reciprocal_scale(hash, nf_nat_htable_size);
991 }
992
993 /* Is this tuple already taken? (not by us) */
994 @@ -184,28 +184,6 @@ same_src(const struct nf_conn *ct,
995 t->src.u.all == tuple->src.u.all);
996 }
997
998 -static int nf_nat_bysource_cmp(struct rhashtable_compare_arg *arg,
999 - const void *obj)
1000 -{
1001 - const struct nf_nat_conn_key *key = arg->key;
1002 - const struct nf_conn *ct = obj;
1003 -
1004 - if (!same_src(ct, key->tuple) ||
1005 - !net_eq(nf_ct_net(ct), key->net) ||
1006 - !nf_ct_zone_equal(ct, key->zone, IP_CT_DIR_ORIGINAL))
1007 - return 1;
1008 -
1009 - return 0;
1010 -}
1011 -
1012 -static struct rhashtable_params nf_nat_bysource_params = {
1013 - .head_offset = offsetof(struct nf_conn, nat_bysource),
1014 - .obj_hashfn = nf_nat_bysource_hash,
1015 - .obj_cmpfn = nf_nat_bysource_cmp,
1016 - .nelem_hint = 256,
1017 - .min_size = 1024,
1018 -};
1019 -
1020 /* Only called for SRC manip */
1021 static int
1022 find_appropriate_src(struct net *net,
1023 @@ -216,26 +194,22 @@ find_appropriate_src(struct net *net,
1024 struct nf_conntrack_tuple *result,
1025 const struct nf_nat_range *range)
1026 {
1027 + unsigned int h = hash_by_src(net, tuple);
1028 const struct nf_conn *ct;
1029 - struct nf_nat_conn_key key = {
1030 - .net = net,
1031 - .tuple = tuple,
1032 - .zone = zone
1033 - };
1034 - struct rhlist_head *hl, *h;
1035 -
1036 - hl = rhltable_lookup(&nf_nat_bysource_table, &key,
1037 - nf_nat_bysource_params);
1038
1039 - rhl_for_each_entry_rcu(ct, h, hl, nat_bysource) {
1040 - nf_ct_invert_tuplepr(result,
1041 - &ct->tuplehash[IP_CT_DIR_REPLY].tuple);
1042 - result->dst = tuple->dst;
1043 -
1044 - if (in_range(l3proto, l4proto, result, range))
1045 - return 1;
1046 + hlist_for_each_entry_rcu(ct, &nf_nat_bysource[h], nat_bysource) {
1047 + if (same_src(ct, tuple) &&
1048 + net_eq(net, nf_ct_net(ct)) &&
1049 + nf_ct_zone_equal(ct, zone, IP_CT_DIR_ORIGINAL)) {
1050 + /* Copy source part from reply tuple. */
1051 + nf_ct_invert_tuplepr(result,
1052 + &ct->tuplehash[IP_CT_DIR_REPLY].tuple);
1053 + result->dst = tuple->dst;
1054 +
1055 + if (in_range(l3proto, l4proto, result, range))
1056 + return 1;
1057 + }
1058 }
1059 -
1060 return 0;
1061 }
1062
1063 @@ -408,6 +382,7 @@ nf_nat_setup_info(struct nf_conn *ct,
1064 const struct nf_nat_range *range,
1065 enum nf_nat_manip_type maniptype)
1066 {
1067 + struct net *net = nf_ct_net(ct);
1068 struct nf_conntrack_tuple curr_tuple, new_tuple;
1069
1070 /* Can't setup nat info for confirmed ct. */
1071 @@ -447,19 +422,14 @@ nf_nat_setup_info(struct nf_conn *ct,
1072 }
1073
1074 if (maniptype == NF_NAT_MANIP_SRC) {
1075 - struct nf_nat_conn_key key = {
1076 - .net = nf_ct_net(ct),
1077 - .tuple = &ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple,
1078 - .zone = nf_ct_zone(ct),
1079 - };
1080 - int err;
1081 -
1082 - err = rhltable_insert_key(&nf_nat_bysource_table,
1083 - &key,
1084 - &ct->nat_bysource,
1085 - nf_nat_bysource_params);
1086 - if (err)
1087 - return NF_DROP;
1088 + unsigned int srchash;
1089 +
1090 + srchash = hash_by_src(net,
1091 + &ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple);
1092 + spin_lock_bh(&nf_nat_lock);
1093 + hlist_add_head_rcu(&ct->nat_bysource,
1094 + &nf_nat_bysource[srchash]);
1095 + spin_unlock_bh(&nf_nat_lock);
1096 }
1097
1098 /* It's done. */
1099 @@ -568,8 +538,9 @@ static int nf_nat_proto_clean(struct nf_conn *ct, void *data)
1100 * will delete entry from already-freed table.
1101 */
1102 clear_bit(IPS_SRC_NAT_DONE_BIT, &ct->status);
1103 - rhltable_remove(&nf_nat_bysource_table, &ct->nat_bysource,
1104 - nf_nat_bysource_params);
1105 + spin_lock_bh(&nf_nat_lock);
1106 + hlist_del_rcu(&ct->nat_bysource);
1107 + spin_unlock_bh(&nf_nat_lock);
1108
1109 /* don't delete conntrack. Although that would make things a lot
1110 * simpler, we'd end up flushing all conntracks on nat rmmod.
1111 @@ -697,9 +668,11 @@ EXPORT_SYMBOL_GPL(nf_nat_l3proto_unregister);
1112 /* No one using conntrack by the time this called. */
1113 static void nf_nat_cleanup_conntrack(struct nf_conn *ct)
1114 {
1115 - if (ct->status & IPS_SRC_NAT_DONE)
1116 - rhltable_remove(&nf_nat_bysource_table, &ct->nat_bysource,
1117 - nf_nat_bysource_params);
1118 + if (ct->status & IPS_SRC_NAT_DONE) {
1119 + spin_lock_bh(&nf_nat_lock);
1120 + hlist_del_rcu(&ct->nat_bysource);
1121 + spin_unlock_bh(&nf_nat_lock);
1122 + }
1123 }
1124
1125 static struct nf_ct_ext_type nat_extend __read_mostly = {
1126 @@ -823,13 +796,16 @@ static int __init nf_nat_init(void)
1127 {
1128 int ret;
1129
1130 - ret = rhltable_init(&nf_nat_bysource_table, &nf_nat_bysource_params);
1131 - if (ret)
1132 - return ret;
1133 + /* Leave them the same for the moment. */
1134 + nf_nat_htable_size = nf_conntrack_htable_size;
1135 +
1136 + nf_nat_bysource = nf_ct_alloc_hashtable(&nf_nat_htable_size, 0);
1137 + if (!nf_nat_bysource)
1138 + return -ENOMEM;
1139
1140 ret = nf_ct_extend_register(&nat_extend);
1141 if (ret < 0) {
1142 - rhltable_destroy(&nf_nat_bysource_table);
1143 + nf_ct_free_hashtable(nf_nat_bysource, nf_nat_htable_size);
1144 printk(KERN_ERR "nf_nat_core: Unable to register extension\n");
1145 return ret;
1146 }
1147 @@ -863,8 +839,8 @@ static void __exit nf_nat_cleanup(void)
1148
1149 for (i = 0; i < NFPROTO_NUMPROTO; i++)
1150 kfree(nf_nat_l4protos[i]);
1151 -
1152 - rhltable_destroy(&nf_nat_bysource_table);
1153 + synchronize_net();
1154 + nf_ct_free_hashtable(nf_nat_bysource, nf_nat_htable_size);
1155 }
1156
1157 MODULE_LICENSE("GPL");
1158 diff --git a/net/netfilter/nft_set_hash.c b/net/netfilter/nft_set_hash.c
1159 index 0fa01d772c5e..9c0d5a7ce5f9 100644
1160 --- a/net/netfilter/nft_set_hash.c
1161 +++ b/net/netfilter/nft_set_hash.c
1162 @@ -643,7 +643,6 @@ nft_hash_select_ops(const struct nft_ctx *ctx, const struct nft_set_desc *desc,
1163 {
1164 if (desc->size) {
1165 switch (desc->klen) {
1166 - case 2:
1167 case 4:
1168 return &nft_hash_fast_ops;
1169 default:
1170 diff --git a/sound/core/hrtimer.c b/sound/core/hrtimer.c
1171 index 1ac0c423903e..6e47b823bcaa 100644
1172 --- a/sound/core/hrtimer.c
1173 +++ b/sound/core/hrtimer.c
1174 @@ -159,6 +159,7 @@ static int __init snd_hrtimer_init(void)
1175 timer->hw = hrtimer_hw;
1176 timer->hw.resolution = resolution;
1177 timer->hw.ticks = NANO_SEC / resolution;
1178 + timer->max_instances = 100; /* lower the limit */
1179
1180 err = snd_timer_global_register(timer);
1181 if (err < 0) {
1182 diff --git a/sound/core/seq/oss/seq_oss_midi.c b/sound/core/seq/oss/seq_oss_midi.c
1183 index aaff9ee32695..b30b2139e3f0 100644
1184 --- a/sound/core/seq/oss/seq_oss_midi.c
1185 +++ b/sound/core/seq/oss/seq_oss_midi.c
1186 @@ -612,9 +612,7 @@ send_midi_event(struct seq_oss_devinfo *dp, struct snd_seq_event *ev, struct seq
1187 if (!dp->timer->running)
1188 len = snd_seq_oss_timer_start(dp->timer);
1189 if (ev->type == SNDRV_SEQ_EVENT_SYSEX) {
1190 - if ((ev->flags & SNDRV_SEQ_EVENT_LENGTH_MASK) == SNDRV_SEQ_EVENT_LENGTH_VARIABLE)
1191 - snd_seq_oss_readq_puts(dp->readq, mdev->seq_device,
1192 - ev->data.ext.ptr, ev->data.ext.len);
1193 + snd_seq_oss_readq_sysex(dp->readq, mdev->seq_device, ev);
1194 } else {
1195 len = snd_midi_event_decode(mdev->coder, msg, sizeof(msg), ev);
1196 if (len > 0)
1197 diff --git a/sound/core/seq/oss/seq_oss_readq.c b/sound/core/seq/oss/seq_oss_readq.c
1198 index 046cb586fb2f..06b21226b4e7 100644
1199 --- a/sound/core/seq/oss/seq_oss_readq.c
1200 +++ b/sound/core/seq/oss/seq_oss_readq.c
1201 @@ -117,6 +117,35 @@ snd_seq_oss_readq_puts(struct seq_oss_readq *q, int dev, unsigned char *data, in
1202 return 0;
1203 }
1204
1205 +/*
1206 + * put MIDI sysex bytes; the event buffer may be chained, thus it has
1207 + * to be expanded via snd_seq_dump_var_event().
1208 + */
1209 +struct readq_sysex_ctx {
1210 + struct seq_oss_readq *readq;
1211 + int dev;
1212 +};
1213 +
1214 +static int readq_dump_sysex(void *ptr, void *buf, int count)
1215 +{
1216 + struct readq_sysex_ctx *ctx = ptr;
1217 +
1218 + return snd_seq_oss_readq_puts(ctx->readq, ctx->dev, buf, count);
1219 +}
1220 +
1221 +int snd_seq_oss_readq_sysex(struct seq_oss_readq *q, int dev,
1222 + struct snd_seq_event *ev)
1223 +{
1224 + struct readq_sysex_ctx ctx = {
1225 + .readq = q,
1226 + .dev = dev
1227 + };
1228 +
1229 + if ((ev->flags & SNDRV_SEQ_EVENT_LENGTH_MASK) != SNDRV_SEQ_EVENT_LENGTH_VARIABLE)
1230 + return 0;
1231 + return snd_seq_dump_var_event(ev, readq_dump_sysex, &ctx);
1232 +}
1233 +
1234 /*
1235 * copy an event to input queue:
1236 * return zero if enqueued
1237 diff --git a/sound/core/seq/oss/seq_oss_readq.h b/sound/core/seq/oss/seq_oss_readq.h
1238 index f1463f1f449e..8d033ca2d23f 100644
1239 --- a/sound/core/seq/oss/seq_oss_readq.h
1240 +++ b/sound/core/seq/oss/seq_oss_readq.h
1241 @@ -44,6 +44,8 @@ void snd_seq_oss_readq_delete(struct seq_oss_readq *q);
1242 void snd_seq_oss_readq_clear(struct seq_oss_readq *readq);
1243 unsigned int snd_seq_oss_readq_poll(struct seq_oss_readq *readq, struct file *file, poll_table *wait);
1244 int snd_seq_oss_readq_puts(struct seq_oss_readq *readq, int dev, unsigned char *data, int len);
1245 +int snd_seq_oss_readq_sysex(struct seq_oss_readq *q, int dev,
1246 + struct snd_seq_event *ev);
1247 int snd_seq_oss_readq_put_event(struct seq_oss_readq *readq, union evrec *ev);
1248 int snd_seq_oss_readq_put_timestamp(struct seq_oss_readq *readq, unsigned long curt, int seq_mode);
1249 int snd_seq_oss_readq_pick(struct seq_oss_readq *q, union evrec *rec);
1250 diff --git a/sound/core/timer.c b/sound/core/timer.c
1251 index a9b9a277e00c..c8e4d0da13b4 100644
1252 --- a/sound/core/timer.c
1253 +++ b/sound/core/timer.c
1254 @@ -180,7 +180,7 @@ static void snd_timer_request(struct snd_timer_id *tid)
1255 *
1256 * call this with register_mutex down.
1257 */
1258 -static void snd_timer_check_slave(struct snd_timer_instance *slave)
1259 +static int snd_timer_check_slave(struct snd_timer_instance *slave)
1260 {
1261 struct snd_timer *timer;
1262 struct snd_timer_instance *master;
1263 @@ -190,16 +190,21 @@ static void snd_timer_check_slave(struct snd_timer_instance *slave)
1264 list_for_each_entry(master, &timer->open_list_head, open_list) {
1265 if (slave->slave_class == master->slave_class &&
1266 slave->slave_id == master->slave_id) {
1267 + if (master->timer->num_instances >=
1268 + master->timer->max_instances)
1269 + return -EBUSY;
1270 list_move_tail(&slave->open_list,
1271 &master->slave_list_head);
1272 + master->timer->num_instances++;
1273 spin_lock_irq(&slave_active_lock);
1274 slave->master = master;
1275 slave->timer = master->timer;
1276 spin_unlock_irq(&slave_active_lock);
1277 - return;
1278 + return 0;
1279 }
1280 }
1281 }
1282 + return 0;
1283 }
1284
1285 /*
1286 @@ -208,7 +213,7 @@ static void snd_timer_check_slave(struct snd_timer_instance *slave)
1287 *
1288 * call this with register_mutex down.
1289 */
1290 -static void snd_timer_check_master(struct snd_timer_instance *master)
1291 +static int snd_timer_check_master(struct snd_timer_instance *master)
1292 {
1293 struct snd_timer_instance *slave, *tmp;
1294
1295 @@ -216,7 +221,11 @@ static void snd_timer_check_master(struct snd_timer_instance *master)
1296 list_for_each_entry_safe(slave, tmp, &snd_timer_slave_list, open_list) {
1297 if (slave->slave_class == master->slave_class &&
1298 slave->slave_id == master->slave_id) {
1299 + if (master->timer->num_instances >=
1300 + master->timer->max_instances)
1301 + return -EBUSY;
1302 list_move_tail(&slave->open_list, &master->slave_list_head);
1303 + master->timer->num_instances++;
1304 spin_lock_irq(&slave_active_lock);
1305 spin_lock(&master->timer->lock);
1306 slave->master = master;
1307 @@ -228,8 +237,11 @@ static void snd_timer_check_master(struct snd_timer_instance *master)
1308 spin_unlock_irq(&slave_active_lock);
1309 }
1310 }
1311 + return 0;
1312 }
1313
1314 +static int snd_timer_close_locked(struct snd_timer_instance *timeri);
1315 +
1316 /*
1317 * open a timer instance
1318 * when opening a master, the slave id must be here given.
1319 @@ -240,6 +252,7 @@ int snd_timer_open(struct snd_timer_instance **ti,
1320 {
1321 struct snd_timer *timer;
1322 struct snd_timer_instance *timeri = NULL;
1323 + int err;
1324
1325 if (tid->dev_class == SNDRV_TIMER_CLASS_SLAVE) {
1326 /* open a slave instance */
1327 @@ -259,10 +272,14 @@ int snd_timer_open(struct snd_timer_instance **ti,
1328 timeri->slave_id = tid->device;
1329 timeri->flags |= SNDRV_TIMER_IFLG_SLAVE;
1330 list_add_tail(&timeri->open_list, &snd_timer_slave_list);
1331 - snd_timer_check_slave(timeri);
1332 + err = snd_timer_check_slave(timeri);
1333 + if (err < 0) {
1334 + snd_timer_close_locked(timeri);
1335 + timeri = NULL;
1336 + }
1337 mutex_unlock(&register_mutex);
1338 *ti = timeri;
1339 - return 0;
1340 + return err;
1341 }
1342
1343 /* open a master instance */
1344 @@ -288,6 +305,10 @@ int snd_timer_open(struct snd_timer_instance **ti,
1345 return -EBUSY;
1346 }
1347 }
1348 + if (timer->num_instances >= timer->max_instances) {
1349 + mutex_unlock(&register_mutex);
1350 + return -EBUSY;
1351 + }
1352 timeri = snd_timer_instance_new(owner, timer);
1353 if (!timeri) {
1354 mutex_unlock(&register_mutex);
1355 @@ -314,25 +335,27 @@ int snd_timer_open(struct snd_timer_instance **ti,
1356 }
1357
1358 list_add_tail(&timeri->open_list, &timer->open_list_head);
1359 - snd_timer_check_master(timeri);
1360 + timer->num_instances++;
1361 + err = snd_timer_check_master(timeri);
1362 + if (err < 0) {
1363 + snd_timer_close_locked(timeri);
1364 + timeri = NULL;
1365 + }
1366 mutex_unlock(&register_mutex);
1367 *ti = timeri;
1368 - return 0;
1369 + return err;
1370 }
1371 EXPORT_SYMBOL(snd_timer_open);
1372
1373 /*
1374 * close a timer instance
1375 + * call this with register_mutex down.
1376 */
1377 -int snd_timer_close(struct snd_timer_instance *timeri)
1378 +static int snd_timer_close_locked(struct snd_timer_instance *timeri)
1379 {
1380 struct snd_timer *timer = NULL;
1381 struct snd_timer_instance *slave, *tmp;
1382
1383 - if (snd_BUG_ON(!timeri))
1384 - return -ENXIO;
1385 -
1386 - mutex_lock(&register_mutex);
1387 list_del(&timeri->open_list);
1388
1389 /* force to stop the timer */
1390 @@ -340,6 +363,7 @@ int snd_timer_close(struct snd_timer_instance *timeri)
1391
1392 timer = timeri->timer;
1393 if (timer) {
1394 + timer->num_instances--;
1395 /* wait, until the active callback is finished */
1396 spin_lock_irq(&timer->lock);
1397 while (timeri->flags & SNDRV_TIMER_IFLG_CALLBACK) {
1398 @@ -355,6 +379,7 @@ int snd_timer_close(struct snd_timer_instance *timeri)
1399 list_for_each_entry_safe(slave, tmp, &timeri->slave_list_head,
1400 open_list) {
1401 list_move_tail(&slave->open_list, &snd_timer_slave_list);
1402 + timer->num_instances--;
1403 slave->master = NULL;
1404 slave->timer = NULL;
1405 list_del_init(&slave->ack_list);
1406 @@ -382,9 +407,24 @@ int snd_timer_close(struct snd_timer_instance *timeri)
1407 module_put(timer->module);
1408 }
1409
1410 - mutex_unlock(&register_mutex);
1411 return 0;
1412 }
1413 +
1414 +/*
1415 + * close a timer instance
1416 + */
1417 +int snd_timer_close(struct snd_timer_instance *timeri)
1418 +{
1419 + int err;
1420 +
1421 + if (snd_BUG_ON(!timeri))
1422 + return -ENXIO;
1423 +
1424 + mutex_lock(&register_mutex);
1425 + err = snd_timer_close_locked(timeri);
1426 + mutex_unlock(&register_mutex);
1427 + return err;
1428 +}
1429 EXPORT_SYMBOL(snd_timer_close);
1430
1431 unsigned long snd_timer_resolution(struct snd_timer_instance *timeri)
1432 @@ -855,6 +895,7 @@ int snd_timer_new(struct snd_card *card, char *id, struct snd_timer_id *tid,
1433 spin_lock_init(&timer->lock);
1434 tasklet_init(&timer->task_queue, snd_timer_tasklet,
1435 (unsigned long)timer);
1436 + timer->max_instances = 1000; /* default limit per timer */
1437 if (card != NULL) {
1438 timer->module = card->module;
1439 err = snd_device_new(card, SNDRV_DEV_TIMER, timer, &ops);
1440 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
1441 index fe4d06398fc3..c5f0e8d42d22 100644
1442 --- a/sound/pci/hda/patch_realtek.c
1443 +++ b/sound/pci/hda/patch_realtek.c
1444 @@ -6527,6 +6527,11 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
1445 {0x14, 0x90170110},
1446 {0x1b, 0x90a70130},
1447 {0x21, 0x03211020}),
1448 + SND_HDA_PIN_QUIRK(0x10ec0274, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
1449 + {0x12, 0xb7a60130},
1450 + {0x13, 0xb8a61140},
1451 + {0x16, 0x90170110},
1452 + {0x21, 0x04211020}),
1453 SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4,
1454 {0x12, 0x90a60130},
1455 {0x14, 0x90170110},
1456 diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
1457 index 0e54fe490458..f910c4fd932b 100644
1458 --- a/sound/usb/quirks.c
1459 +++ b/sound/usb/quirks.c
1460 @@ -1373,6 +1373,7 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
1461 case 0x199:
1462 return SNDRV_PCM_FMTBIT_DSD_U32_LE;
1463 case 0x19b:
1464 + case 0x203:
1465 return SNDRV_PCM_FMTBIT_DSD_U32_BE;
1466 default:
1467 break;