Annotation of /trunk/kernel-alx/patches-4.19/0166-4.19.67-all-fixes.patch
Parent Directory | Revision Log
Revision 3463 -
(hide annotations)
(download)
Tue Oct 29 10:31:24 2019 UTC (4 years, 7 months ago) by niro
File size: 91288 byte(s)
Tue Oct 29 10:31:24 2019 UTC (4 years, 7 months ago) by niro
File size: 91288 byte(s)
-linux-4.19.67
1 | niro | 3463 | diff --git a/Makefile b/Makefile |
2 | index 065e5b34dc02..b6aa6e8d4411 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,7 +1,7 @@ | ||
6 | # SPDX-License-Identifier: GPL-2.0 | ||
7 | VERSION = 4 | ||
8 | PATCHLEVEL = 19 | ||
9 | -SUBLEVEL = 66 | ||
10 | +SUBLEVEL = 67 | ||
11 | EXTRAVERSION = | ||
12 | NAME = "People's Front" | ||
13 | |||
14 | diff --git a/arch/arm/boot/dts/bcm47094-linksys-panamera.dts b/arch/arm/boot/dts/bcm47094-linksys-panamera.dts | ||
15 | index 36efe410dcd7..9e33c41f5411 100644 | ||
16 | --- a/arch/arm/boot/dts/bcm47094-linksys-panamera.dts | ||
17 | +++ b/arch/arm/boot/dts/bcm47094-linksys-panamera.dts | ||
18 | @@ -125,6 +125,9 @@ | ||
19 | }; | ||
20 | |||
21 | mdio-bus-mux { | ||
22 | + #address-cells = <1>; | ||
23 | + #size-cells = <0>; | ||
24 | + | ||
25 | /* BIT(9) = 1 => external mdio */ | ||
26 | mdio_ext: mdio@200 { | ||
27 | reg = <0x200>; | ||
28 | diff --git a/arch/arm/mach-davinci/sleep.S b/arch/arm/mach-davinci/sleep.S | ||
29 | index cd350dee4df3..efcd400b2abb 100644 | ||
30 | --- a/arch/arm/mach-davinci/sleep.S | ||
31 | +++ b/arch/arm/mach-davinci/sleep.S | ||
32 | @@ -37,6 +37,7 @@ | ||
33 | #define DEEPSLEEP_SLEEPENABLE_BIT BIT(31) | ||
34 | |||
35 | .text | ||
36 | + .arch armv5te | ||
37 | /* | ||
38 | * Move DaVinci into deep sleep state | ||
39 | * | ||
40 | diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c | ||
41 | index 578174a33d22..51cd66dc1bb0 100644 | ||
42 | --- a/arch/powerpc/kvm/powerpc.c | ||
43 | +++ b/arch/powerpc/kvm/powerpc.c | ||
44 | @@ -61,6 +61,11 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *v) | ||
45 | return !!(v->arch.pending_exceptions) || kvm_request_pending(v); | ||
46 | } | ||
47 | |||
48 | +bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu) | ||
49 | +{ | ||
50 | + return kvm_arch_vcpu_runnable(vcpu); | ||
51 | +} | ||
52 | + | ||
53 | bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu) | ||
54 | { | ||
55 | return false; | ||
56 | diff --git a/arch/s390/include/asm/page.h b/arch/s390/include/asm/page.h | ||
57 | index 41e3908b397f..0d753291c43c 100644 | ||
58 | --- a/arch/s390/include/asm/page.h | ||
59 | +++ b/arch/s390/include/asm/page.h | ||
60 | @@ -176,6 +176,8 @@ static inline int devmem_is_allowed(unsigned long pfn) | ||
61 | #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \ | ||
62 | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) | ||
63 | |||
64 | +#define ARCH_ZONE_DMA_BITS 31 | ||
65 | + | ||
66 | #include <asm-generic/memory_model.h> | ||
67 | #include <asm-generic/getorder.h> | ||
68 | |||
69 | diff --git a/arch/x86/boot/string.c b/arch/x86/boot/string.c | ||
70 | index c4428a176973..2622c0742c92 100644 | ||
71 | --- a/arch/x86/boot/string.c | ||
72 | +++ b/arch/x86/boot/string.c | ||
73 | @@ -34,6 +34,14 @@ int memcmp(const void *s1, const void *s2, size_t len) | ||
74 | return diff; | ||
75 | } | ||
76 | |||
77 | +/* | ||
78 | + * Clang may lower `memcmp == 0` to `bcmp == 0`. | ||
79 | + */ | ||
80 | +int bcmp(const void *s1, const void *s2, size_t len) | ||
81 | +{ | ||
82 | + return memcmp(s1, s2, len); | ||
83 | +} | ||
84 | + | ||
85 | int strcmp(const char *str1, const char *str2) | ||
86 | { | ||
87 | const unsigned char *s1 = (const unsigned char *)str1; | ||
88 | diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h | ||
89 | index 2877e1fbadd8..3245b95ad2d9 100644 | ||
90 | --- a/arch/x86/include/asm/kvm_host.h | ||
91 | +++ b/arch/x86/include/asm/kvm_host.h | ||
92 | @@ -1113,6 +1113,7 @@ struct kvm_x86_ops { | ||
93 | int (*update_pi_irte)(struct kvm *kvm, unsigned int host_irq, | ||
94 | uint32_t guest_irq, bool set); | ||
95 | void (*apicv_post_state_restore)(struct kvm_vcpu *vcpu); | ||
96 | + bool (*dy_apicv_has_pending_interrupt)(struct kvm_vcpu *vcpu); | ||
97 | |||
98 | int (*set_hv_timer)(struct kvm_vcpu *vcpu, u64 guest_deadline_tsc); | ||
99 | void (*cancel_hv_timer)(struct kvm_vcpu *vcpu); | ||
100 | diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c | ||
101 | index ea454d3f7763..0f33f00aa4df 100644 | ||
102 | --- a/arch/x86/kvm/svm.c | ||
103 | +++ b/arch/x86/kvm/svm.c | ||
104 | @@ -5146,6 +5146,11 @@ static void svm_deliver_avic_intr(struct kvm_vcpu *vcpu, int vec) | ||
105 | kvm_vcpu_wake_up(vcpu); | ||
106 | } | ||
107 | |||
108 | +static bool svm_dy_apicv_has_pending_interrupt(struct kvm_vcpu *vcpu) | ||
109 | +{ | ||
110 | + return false; | ||
111 | +} | ||
112 | + | ||
113 | static void svm_ir_list_del(struct vcpu_svm *svm, struct amd_iommu_pi_data *pi) | ||
114 | { | ||
115 | unsigned long flags; | ||
116 | @@ -7203,6 +7208,7 @@ static struct kvm_x86_ops svm_x86_ops __ro_after_init = { | ||
117 | |||
118 | .pmu_ops = &amd_pmu_ops, | ||
119 | .deliver_posted_interrupt = svm_deliver_avic_intr, | ||
120 | + .dy_apicv_has_pending_interrupt = svm_dy_apicv_has_pending_interrupt, | ||
121 | .update_pi_irte = svm_update_pi_irte, | ||
122 | .setup_mce = svm_setup_mce, | ||
123 | |||
124 | diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c | ||
125 | index 4cf16378dffe..2e310ea62d60 100644 | ||
126 | --- a/arch/x86/kvm/vmx.c | ||
127 | +++ b/arch/x86/kvm/vmx.c | ||
128 | @@ -10411,6 +10411,11 @@ static u8 vmx_has_apicv_interrupt(struct kvm_vcpu *vcpu) | ||
129 | return ((rvi & 0xf0) > (vppr & 0xf0)); | ||
130 | } | ||
131 | |||
132 | +static bool vmx_dy_apicv_has_pending_interrupt(struct kvm_vcpu *vcpu) | ||
133 | +{ | ||
134 | + return pi_test_on(vcpu_to_pi_desc(vcpu)); | ||
135 | +} | ||
136 | + | ||
137 | static void vmx_load_eoi_exitmap(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap) | ||
138 | { | ||
139 | if (!kvm_vcpu_apicv_active(vcpu)) | ||
140 | @@ -14387,6 +14392,7 @@ static struct kvm_x86_ops vmx_x86_ops __ro_after_init = { | ||
141 | .guest_apic_has_interrupt = vmx_guest_apic_has_interrupt, | ||
142 | .sync_pir_to_irr = vmx_sync_pir_to_irr, | ||
143 | .deliver_posted_interrupt = vmx_deliver_posted_interrupt, | ||
144 | + .dy_apicv_has_pending_interrupt = vmx_dy_apicv_has_pending_interrupt, | ||
145 | |||
146 | .set_tss_addr = vmx_set_tss_addr, | ||
147 | .set_identity_map_addr = vmx_set_identity_map_addr, | ||
148 | diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c | ||
149 | index cea6568667c4..e10a7a42449b 100644 | ||
150 | --- a/arch/x86/kvm/x86.c | ||
151 | +++ b/arch/x86/kvm/x86.c | ||
152 | @@ -9336,6 +9336,22 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu) | ||
153 | return kvm_vcpu_running(vcpu) || kvm_vcpu_has_events(vcpu); | ||
154 | } | ||
155 | |||
156 | +bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu) | ||
157 | +{ | ||
158 | + if (READ_ONCE(vcpu->arch.pv.pv_unhalted)) | ||
159 | + return true; | ||
160 | + | ||
161 | + if (kvm_test_request(KVM_REQ_NMI, vcpu) || | ||
162 | + kvm_test_request(KVM_REQ_SMI, vcpu) || | ||
163 | + kvm_test_request(KVM_REQ_EVENT, vcpu)) | ||
164 | + return true; | ||
165 | + | ||
166 | + if (vcpu->arch.apicv_active && kvm_x86_ops->dy_apicv_has_pending_interrupt(vcpu)) | ||
167 | + return true; | ||
168 | + | ||
169 | + return false; | ||
170 | +} | ||
171 | + | ||
172 | bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu) | ||
173 | { | ||
174 | return vcpu->arch.preempted_in_kernel; | ||
175 | diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c | ||
176 | index 9d9765e4d1ef..1bcb7242ad79 100644 | ||
177 | --- a/arch/x86/mm/fault.c | ||
178 | +++ b/arch/x86/mm/fault.c | ||
179 | @@ -261,13 +261,14 @@ static inline pmd_t *vmalloc_sync_one(pgd_t *pgd, unsigned long address) | ||
180 | |||
181 | pmd = pmd_offset(pud, address); | ||
182 | pmd_k = pmd_offset(pud_k, address); | ||
183 | - if (!pmd_present(*pmd_k)) | ||
184 | - return NULL; | ||
185 | |||
186 | - if (!pmd_present(*pmd)) | ||
187 | + if (pmd_present(*pmd) != pmd_present(*pmd_k)) | ||
188 | set_pmd(pmd, *pmd_k); | ||
189 | + | ||
190 | + if (!pmd_present(*pmd_k)) | ||
191 | + return NULL; | ||
192 | else | ||
193 | - BUG_ON(pmd_page(*pmd) != pmd_page(*pmd_k)); | ||
194 | + BUG_ON(pmd_pfn(*pmd) != pmd_pfn(*pmd_k)); | ||
195 | |||
196 | return pmd_k; | ||
197 | } | ||
198 | @@ -287,17 +288,13 @@ void vmalloc_sync_all(void) | ||
199 | spin_lock(&pgd_lock); | ||
200 | list_for_each_entry(page, &pgd_list, lru) { | ||
201 | spinlock_t *pgt_lock; | ||
202 | - pmd_t *ret; | ||
203 | |||
204 | /* the pgt_lock only for Xen */ | ||
205 | pgt_lock = &pgd_page_get_mm(page)->page_table_lock; | ||
206 | |||
207 | spin_lock(pgt_lock); | ||
208 | - ret = vmalloc_sync_one(page_address(page), address); | ||
209 | + vmalloc_sync_one(page_address(page), address); | ||
210 | spin_unlock(pgt_lock); | ||
211 | - | ||
212 | - if (!ret) | ||
213 | - break; | ||
214 | } | ||
215 | spin_unlock(&pgd_lock); | ||
216 | } | ||
217 | diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile | ||
218 | index 3cf302b26332..8901a1f89cf5 100644 | ||
219 | --- a/arch/x86/purgatory/Makefile | ||
220 | +++ b/arch/x86/purgatory/Makefile | ||
221 | @@ -6,6 +6,9 @@ purgatory-y := purgatory.o stack.o setup-x86_$(BITS).o sha256.o entry64.o string | ||
222 | targets += $(purgatory-y) | ||
223 | PURGATORY_OBJS = $(addprefix $(obj)/,$(purgatory-y)) | ||
224 | |||
225 | +$(obj)/string.o: $(srctree)/arch/x86/boot/compressed/string.c FORCE | ||
226 | + $(call if_changed_rule,cc_o_c) | ||
227 | + | ||
228 | $(obj)/sha256.o: $(srctree)/lib/sha256.c FORCE | ||
229 | $(call if_changed_rule,cc_o_c) | ||
230 | |||
231 | @@ -17,11 +20,34 @@ KCOV_INSTRUMENT := n | ||
232 | |||
233 | # Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That | ||
234 | # in turn leaves some undefined symbols like __fentry__ in purgatory and not | ||
235 | -# sure how to relocate those. Like kexec-tools, use custom flags. | ||
236 | - | ||
237 | -KBUILD_CFLAGS := -fno-strict-aliasing -Wall -Wstrict-prototypes -fno-zero-initialized-in-bss -fno-builtin -ffreestanding -c -Os -mcmodel=large | ||
238 | -KBUILD_CFLAGS += -m$(BITS) | ||
239 | -KBUILD_CFLAGS += $(call cc-option,-fno-PIE) | ||
240 | +# sure how to relocate those. | ||
241 | +ifdef CONFIG_FUNCTION_TRACER | ||
242 | +CFLAGS_REMOVE_sha256.o += $(CC_FLAGS_FTRACE) | ||
243 | +CFLAGS_REMOVE_purgatory.o += $(CC_FLAGS_FTRACE) | ||
244 | +CFLAGS_REMOVE_string.o += $(CC_FLAGS_FTRACE) | ||
245 | +CFLAGS_REMOVE_kexec-purgatory.o += $(CC_FLAGS_FTRACE) | ||
246 | +endif | ||
247 | + | ||
248 | +ifdef CONFIG_STACKPROTECTOR | ||
249 | +CFLAGS_REMOVE_sha256.o += -fstack-protector | ||
250 | +CFLAGS_REMOVE_purgatory.o += -fstack-protector | ||
251 | +CFLAGS_REMOVE_string.o += -fstack-protector | ||
252 | +CFLAGS_REMOVE_kexec-purgatory.o += -fstack-protector | ||
253 | +endif | ||
254 | + | ||
255 | +ifdef CONFIG_STACKPROTECTOR_STRONG | ||
256 | +CFLAGS_REMOVE_sha256.o += -fstack-protector-strong | ||
257 | +CFLAGS_REMOVE_purgatory.o += -fstack-protector-strong | ||
258 | +CFLAGS_REMOVE_string.o += -fstack-protector-strong | ||
259 | +CFLAGS_REMOVE_kexec-purgatory.o += -fstack-protector-strong | ||
260 | +endif | ||
261 | + | ||
262 | +ifdef CONFIG_RETPOLINE | ||
263 | +CFLAGS_REMOVE_sha256.o += $(RETPOLINE_CFLAGS) | ||
264 | +CFLAGS_REMOVE_purgatory.o += $(RETPOLINE_CFLAGS) | ||
265 | +CFLAGS_REMOVE_string.o += $(RETPOLINE_CFLAGS) | ||
266 | +CFLAGS_REMOVE_kexec-purgatory.o += $(RETPOLINE_CFLAGS) | ||
267 | +endif | ||
268 | |||
269 | $(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE | ||
270 | $(call if_changed,ld) | ||
271 | diff --git a/arch/x86/purgatory/purgatory.c b/arch/x86/purgatory/purgatory.c | ||
272 | index 025c34ac0d84..7971f7a8af59 100644 | ||
273 | --- a/arch/x86/purgatory/purgatory.c | ||
274 | +++ b/arch/x86/purgatory/purgatory.c | ||
275 | @@ -70,3 +70,9 @@ void purgatory(void) | ||
276 | } | ||
277 | copy_backup_region(); | ||
278 | } | ||
279 | + | ||
280 | +/* | ||
281 | + * Defined in order to reuse memcpy() and memset() from | ||
282 | + * arch/x86/boot/compressed/string.c | ||
283 | + */ | ||
284 | +void warn(const char *msg) {} | ||
285 | diff --git a/arch/x86/purgatory/string.c b/arch/x86/purgatory/string.c | ||
286 | deleted file mode 100644 | ||
287 | index 795ca4f2cb3c..000000000000 | ||
288 | --- a/arch/x86/purgatory/string.c | ||
289 | +++ /dev/null | ||
290 | @@ -1,25 +0,0 @@ | ||
291 | -/* | ||
292 | - * Simple string functions. | ||
293 | - * | ||
294 | - * Copyright (C) 2014 Red Hat Inc. | ||
295 | - * | ||
296 | - * Author: | ||
297 | - * Vivek Goyal <vgoyal@redhat.com> | ||
298 | - * | ||
299 | - * This source code is licensed under the GNU General Public License, | ||
300 | - * Version 2. See the file COPYING for more details. | ||
301 | - */ | ||
302 | - | ||
303 | -#include <linux/types.h> | ||
304 | - | ||
305 | -#include "../boot/string.c" | ||
306 | - | ||
307 | -void *memcpy(void *dst, const void *src, size_t len) | ||
308 | -{ | ||
309 | - return __builtin_memcpy(dst, src, len); | ||
310 | -} | ||
311 | - | ||
312 | -void *memset(void *dst, int c, size_t len) | ||
313 | -{ | ||
314 | - return __builtin_memset(dst, c, len); | ||
315 | -} | ||
316 | diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c | ||
317 | index 43c2615434b4..e11b5da6f828 100644 | ||
318 | --- a/drivers/acpi/arm64/iort.c | ||
319 | +++ b/drivers/acpi/arm64/iort.c | ||
320 | @@ -616,8 +616,8 @@ static int iort_dev_find_its_id(struct device *dev, u32 req_id, | ||
321 | |||
322 | /* Move to ITS specific data */ | ||
323 | its = (struct acpi_iort_its_group *)node->node_data; | ||
324 | - if (idx > its->its_count) { | ||
325 | - dev_err(dev, "requested ITS ID index [%d] is greater than available [%d]\n", | ||
326 | + if (idx >= its->its_count) { | ||
327 | + dev_err(dev, "requested ITS ID index [%d] overruns ITS entries [%d]\n", | ||
328 | idx, its->its_count); | ||
329 | return -ENXIO; | ||
330 | } | ||
331 | diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c | ||
332 | index cb919b964066..3cdadf75c82d 100644 | ||
333 | --- a/drivers/block/drbd/drbd_receiver.c | ||
334 | +++ b/drivers/block/drbd/drbd_receiver.c | ||
335 | @@ -5240,7 +5240,7 @@ static int drbd_do_auth(struct drbd_connection *connection) | ||
336 | unsigned int key_len; | ||
337 | char secret[SHARED_SECRET_MAX]; /* 64 byte */ | ||
338 | unsigned int resp_size; | ||
339 | - SHASH_DESC_ON_STACK(desc, connection->cram_hmac_tfm); | ||
340 | + struct shash_desc *desc; | ||
341 | struct packet_info pi; | ||
342 | struct net_conf *nc; | ||
343 | int err, rv; | ||
344 | @@ -5253,6 +5253,13 @@ static int drbd_do_auth(struct drbd_connection *connection) | ||
345 | memcpy(secret, nc->shared_secret, key_len); | ||
346 | rcu_read_unlock(); | ||
347 | |||
348 | + desc = kmalloc(sizeof(struct shash_desc) + | ||
349 | + crypto_shash_descsize(connection->cram_hmac_tfm), | ||
350 | + GFP_KERNEL); | ||
351 | + if (!desc) { | ||
352 | + rv = -1; | ||
353 | + goto fail; | ||
354 | + } | ||
355 | desc->tfm = connection->cram_hmac_tfm; | ||
356 | desc->flags = 0; | ||
357 | |||
358 | @@ -5395,7 +5402,10 @@ static int drbd_do_auth(struct drbd_connection *connection) | ||
359 | kfree(peers_ch); | ||
360 | kfree(response); | ||
361 | kfree(right_response); | ||
362 | - shash_desc_zero(desc); | ||
363 | + if (desc) { | ||
364 | + shash_desc_zero(desc); | ||
365 | + kfree(desc); | ||
366 | + } | ||
367 | |||
368 | return rv; | ||
369 | } | ||
370 | diff --git a/drivers/block/loop.c b/drivers/block/loop.c | ||
371 | index f1e63eb7cbca..cef8e00c9d9d 100644 | ||
372 | --- a/drivers/block/loop.c | ||
373 | +++ b/drivers/block/loop.c | ||
374 | @@ -886,7 +886,7 @@ static void loop_unprepare_queue(struct loop_device *lo) | ||
375 | |||
376 | static int loop_kthread_worker_fn(void *worker_ptr) | ||
377 | { | ||
378 | - current->flags |= PF_LESS_THROTTLE; | ||
379 | + current->flags |= PF_LESS_THROTTLE | PF_MEMALLOC_NOIO; | ||
380 | return kthread_worker_fn(worker_ptr); | ||
381 | } | ||
382 | |||
383 | diff --git a/drivers/cpufreq/pasemi-cpufreq.c b/drivers/cpufreq/pasemi-cpufreq.c | ||
384 | index c7710c149de8..a0620c9ec064 100644 | ||
385 | --- a/drivers/cpufreq/pasemi-cpufreq.c | ||
386 | +++ b/drivers/cpufreq/pasemi-cpufreq.c | ||
387 | @@ -145,10 +145,18 @@ static int pas_cpufreq_cpu_init(struct cpufreq_policy *policy) | ||
388 | int err = -ENODEV; | ||
389 | |||
390 | cpu = of_get_cpu_node(policy->cpu, NULL); | ||
391 | + if (!cpu) | ||
392 | + goto out; | ||
393 | |||
394 | + max_freqp = of_get_property(cpu, "clock-frequency", NULL); | ||
395 | of_node_put(cpu); | ||
396 | - if (!cpu) | ||
397 | + if (!max_freqp) { | ||
398 | + err = -EINVAL; | ||
399 | goto out; | ||
400 | + } | ||
401 | + | ||
402 | + /* we need the freq in kHz */ | ||
403 | + max_freq = *max_freqp / 1000; | ||
404 | |||
405 | dn = of_find_compatible_node(NULL, NULL, "1682m-sdc"); | ||
406 | if (!dn) | ||
407 | @@ -185,16 +193,6 @@ static int pas_cpufreq_cpu_init(struct cpufreq_policy *policy) | ||
408 | } | ||
409 | |||
410 | pr_debug("init cpufreq on CPU %d\n", policy->cpu); | ||
411 | - | ||
412 | - max_freqp = of_get_property(cpu, "clock-frequency", NULL); | ||
413 | - if (!max_freqp) { | ||
414 | - err = -EINVAL; | ||
415 | - goto out_unmap_sdcpwr; | ||
416 | - } | ||
417 | - | ||
418 | - /* we need the freq in kHz */ | ||
419 | - max_freq = *max_freqp / 1000; | ||
420 | - | ||
421 | pr_debug("max clock-frequency is at %u kHz\n", max_freq); | ||
422 | pr_debug("initializing frequency table\n"); | ||
423 | |||
424 | @@ -212,9 +210,6 @@ static int pas_cpufreq_cpu_init(struct cpufreq_policy *policy) | ||
425 | |||
426 | return cpufreq_generic_init(policy, pas_freqs, get_gizmo_latency()); | ||
427 | |||
428 | -out_unmap_sdcpwr: | ||
429 | - iounmap(sdcpwr_mapbase); | ||
430 | - | ||
431 | out_unmap_sdcasr: | ||
432 | iounmap(sdcasr_mapbase); | ||
433 | out: | ||
434 | diff --git a/drivers/crypto/ccp/ccp-crypto-aes-galois.c b/drivers/crypto/ccp/ccp-crypto-aes-galois.c | ||
435 | index ca1f0d780b61..e5dcb29b687f 100644 | ||
436 | --- a/drivers/crypto/ccp/ccp-crypto-aes-galois.c | ||
437 | +++ b/drivers/crypto/ccp/ccp-crypto-aes-galois.c | ||
438 | @@ -61,6 +61,19 @@ static int ccp_aes_gcm_setkey(struct crypto_aead *tfm, const u8 *key, | ||
439 | static int ccp_aes_gcm_setauthsize(struct crypto_aead *tfm, | ||
440 | unsigned int authsize) | ||
441 | { | ||
442 | + switch (authsize) { | ||
443 | + case 16: | ||
444 | + case 15: | ||
445 | + case 14: | ||
446 | + case 13: | ||
447 | + case 12: | ||
448 | + case 8: | ||
449 | + case 4: | ||
450 | + break; | ||
451 | + default: | ||
452 | + return -EINVAL; | ||
453 | + } | ||
454 | + | ||
455 | return 0; | ||
456 | } | ||
457 | |||
458 | @@ -107,6 +120,7 @@ static int ccp_aes_gcm_crypt(struct aead_request *req, bool encrypt) | ||
459 | memset(&rctx->cmd, 0, sizeof(rctx->cmd)); | ||
460 | INIT_LIST_HEAD(&rctx->cmd.entry); | ||
461 | rctx->cmd.engine = CCP_ENGINE_AES; | ||
462 | + rctx->cmd.u.aes.authsize = crypto_aead_authsize(tfm); | ||
463 | rctx->cmd.u.aes.type = ctx->u.aes.type; | ||
464 | rctx->cmd.u.aes.mode = ctx->u.aes.mode; | ||
465 | rctx->cmd.u.aes.action = encrypt; | ||
466 | diff --git a/drivers/crypto/ccp/ccp-ops.c b/drivers/crypto/ccp/ccp-ops.c | ||
467 | index e212badd39fa..1e2e42106dee 100644 | ||
468 | --- a/drivers/crypto/ccp/ccp-ops.c | ||
469 | +++ b/drivers/crypto/ccp/ccp-ops.c | ||
470 | @@ -625,6 +625,7 @@ static int ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q, | ||
471 | |||
472 | unsigned long long *final; | ||
473 | unsigned int dm_offset; | ||
474 | + unsigned int authsize; | ||
475 | unsigned int jobid; | ||
476 | unsigned int ilen; | ||
477 | bool in_place = true; /* Default value */ | ||
478 | @@ -646,6 +647,21 @@ static int ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q, | ||
479 | if (!aes->key) /* Gotta have a key SGL */ | ||
480 | return -EINVAL; | ||
481 | |||
482 | + /* Zero defaults to 16 bytes, the maximum size */ | ||
483 | + authsize = aes->authsize ? aes->authsize : AES_BLOCK_SIZE; | ||
484 | + switch (authsize) { | ||
485 | + case 16: | ||
486 | + case 15: | ||
487 | + case 14: | ||
488 | + case 13: | ||
489 | + case 12: | ||
490 | + case 8: | ||
491 | + case 4: | ||
492 | + break; | ||
493 | + default: | ||
494 | + return -EINVAL; | ||
495 | + } | ||
496 | + | ||
497 | /* First, decompose the source buffer into AAD & PT, | ||
498 | * and the destination buffer into AAD, CT & tag, or | ||
499 | * the input into CT & tag. | ||
500 | @@ -660,7 +676,7 @@ static int ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q, | ||
501 | p_tag = scatterwalk_ffwd(sg_tag, p_outp, ilen); | ||
502 | } else { | ||
503 | /* Input length for decryption includes tag */ | ||
504 | - ilen = aes->src_len - AES_BLOCK_SIZE; | ||
505 | + ilen = aes->src_len - authsize; | ||
506 | p_tag = scatterwalk_ffwd(sg_tag, p_inp, ilen); | ||
507 | } | ||
508 | |||
509 | @@ -769,8 +785,7 @@ static int ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q, | ||
510 | while (src.sg_wa.bytes_left) { | ||
511 | ccp_prepare_data(&src, &dst, &op, AES_BLOCK_SIZE, true); | ||
512 | if (!src.sg_wa.bytes_left) { | ||
513 | - unsigned int nbytes = aes->src_len | ||
514 | - % AES_BLOCK_SIZE; | ||
515 | + unsigned int nbytes = ilen % AES_BLOCK_SIZE; | ||
516 | |||
517 | if (nbytes) { | ||
518 | op.eom = 1; | ||
519 | @@ -842,19 +857,19 @@ static int ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q, | ||
520 | |||
521 | if (aes->action == CCP_AES_ACTION_ENCRYPT) { | ||
522 | /* Put the ciphered tag after the ciphertext. */ | ||
523 | - ccp_get_dm_area(&final_wa, 0, p_tag, 0, AES_BLOCK_SIZE); | ||
524 | + ccp_get_dm_area(&final_wa, 0, p_tag, 0, authsize); | ||
525 | } else { | ||
526 | /* Does this ciphered tag match the input? */ | ||
527 | - ret = ccp_init_dm_workarea(&tag, cmd_q, AES_BLOCK_SIZE, | ||
528 | + ret = ccp_init_dm_workarea(&tag, cmd_q, authsize, | ||
529 | DMA_BIDIRECTIONAL); | ||
530 | if (ret) | ||
531 | goto e_tag; | ||
532 | - ret = ccp_set_dm_area(&tag, 0, p_tag, 0, AES_BLOCK_SIZE); | ||
533 | + ret = ccp_set_dm_area(&tag, 0, p_tag, 0, authsize); | ||
534 | if (ret) | ||
535 | goto e_tag; | ||
536 | |||
537 | ret = crypto_memneq(tag.address, final_wa.address, | ||
538 | - AES_BLOCK_SIZE) ? -EBADMSG : 0; | ||
539 | + authsize) ? -EBADMSG : 0; | ||
540 | ccp_dm_free(&tag); | ||
541 | } | ||
542 | |||
543 | @@ -862,11 +877,11 @@ e_tag: | ||
544 | ccp_dm_free(&final_wa); | ||
545 | |||
546 | e_dst: | ||
547 | - if (aes->src_len && !in_place) | ||
548 | + if (ilen > 0 && !in_place) | ||
549 | ccp_free_data(&dst, cmd_q); | ||
550 | |||
551 | e_src: | ||
552 | - if (aes->src_len) | ||
553 | + if (ilen > 0) | ||
554 | ccp_free_data(&src, cmd_q); | ||
555 | |||
556 | e_aad: | ||
557 | diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig | ||
558 | index 6e83880046d7..ed212c8b4108 100644 | ||
559 | --- a/drivers/firmware/Kconfig | ||
560 | +++ b/drivers/firmware/Kconfig | ||
561 | @@ -198,7 +198,7 @@ config DMI_SCAN_MACHINE_NON_EFI_FALLBACK | ||
562 | |||
563 | config ISCSI_IBFT_FIND | ||
564 | bool "iSCSI Boot Firmware Table Attributes" | ||
565 | - depends on X86 && ACPI | ||
566 | + depends on X86 && ISCSI_IBFT | ||
567 | default n | ||
568 | help | ||
569 | This option enables the kernel to find the region of memory | ||
570 | @@ -209,7 +209,8 @@ config ISCSI_IBFT_FIND | ||
571 | config ISCSI_IBFT | ||
572 | tristate "iSCSI Boot Firmware Table Attributes module" | ||
573 | select ISCSI_BOOT_SYSFS | ||
574 | - depends on ISCSI_IBFT_FIND && SCSI && SCSI_LOWLEVEL | ||
575 | + select ISCSI_IBFT_FIND if X86 | ||
576 | + depends on ACPI && SCSI && SCSI_LOWLEVEL | ||
577 | default n | ||
578 | help | ||
579 | This option enables support for detection and exposing of iSCSI | ||
580 | diff --git a/drivers/firmware/iscsi_ibft.c b/drivers/firmware/iscsi_ibft.c | ||
581 | index c51462f5aa1e..966aef334c42 100644 | ||
582 | --- a/drivers/firmware/iscsi_ibft.c | ||
583 | +++ b/drivers/firmware/iscsi_ibft.c | ||
584 | @@ -93,6 +93,10 @@ MODULE_DESCRIPTION("sysfs interface to BIOS iBFT information"); | ||
585 | MODULE_LICENSE("GPL"); | ||
586 | MODULE_VERSION(IBFT_ISCSI_VERSION); | ||
587 | |||
588 | +#ifndef CONFIG_ISCSI_IBFT_FIND | ||
589 | +struct acpi_table_ibft *ibft_addr; | ||
590 | +#endif | ||
591 | + | ||
592 | struct ibft_hdr { | ||
593 | u8 id; | ||
594 | u8 version; | ||
595 | diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c | ||
596 | index e3f5e5d6f0c1..f4b89d1ea6f6 100644 | ||
597 | --- a/drivers/gpu/drm/amd/display/dc/core/dc.c | ||
598 | +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c | ||
599 | @@ -462,8 +462,10 @@ void dc_link_set_test_pattern(struct dc_link *link, | ||
600 | |||
601 | static void destruct(struct dc *dc) | ||
602 | { | ||
603 | - dc_release_state(dc->current_state); | ||
604 | - dc->current_state = NULL; | ||
605 | + if (dc->current_state) { | ||
606 | + dc_release_state(dc->current_state); | ||
607 | + dc->current_state = NULL; | ||
608 | + } | ||
609 | |||
610 | destroy_links(dc); | ||
611 | |||
612 | diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c | ||
613 | index e0a96abb3c46..f0d68aa7c8fc 100644 | ||
614 | --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c | ||
615 | +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c | ||
616 | @@ -222,7 +222,7 @@ bool resource_construct( | ||
617 | * PORT_CONNECTIVITY == 1 (as instructed by HW team). | ||
618 | */ | ||
619 | update_num_audio(&straps, &num_audio, &pool->audio_support); | ||
620 | - for (i = 0; i < pool->pipe_count && i < num_audio; i++) { | ||
621 | + for (i = 0; i < caps->num_audio; i++) { | ||
622 | struct audio *aud = create_funcs->create_audio(ctx, i); | ||
623 | |||
624 | if (aud == NULL) { | ||
625 | @@ -1713,6 +1713,12 @@ static struct audio *find_first_free_audio( | ||
626 | return pool->audios[i]; | ||
627 | } | ||
628 | } | ||
629 | + | ||
630 | + /* use engine id to find free audio */ | ||
631 | + if ((id < pool->audio_count) && (res_ctx->is_audio_acquired[id] == false)) { | ||
632 | + return pool->audios[id]; | ||
633 | + } | ||
634 | + | ||
635 | /*not found the matching one, first come first serve*/ | ||
636 | for (i = 0; i < pool->audio_count; i++) { | ||
637 | if (res_ctx->is_audio_acquired[i] == false) { | ||
638 | @@ -1866,6 +1872,7 @@ static int get_norm_pix_clk(const struct dc_crtc_timing *timing) | ||
639 | pix_clk /= 2; | ||
640 | if (timing->pixel_encoding != PIXEL_ENCODING_YCBCR422) { | ||
641 | switch (timing->display_color_depth) { | ||
642 | + case COLOR_DEPTH_666: | ||
643 | case COLOR_DEPTH_888: | ||
644 | normalized_pix_clk = pix_clk; | ||
645 | break; | ||
646 | @@ -1949,7 +1956,7 @@ enum dc_status resource_map_pool_resources( | ||
647 | /* TODO: Add check if ASIC support and EDID audio */ | ||
648 | if (!stream->sink->converter_disable_audio && | ||
649 | dc_is_audio_capable_signal(pipe_ctx->stream->signal) && | ||
650 | - stream->audio_info.mode_count) { | ||
651 | + stream->audio_info.mode_count && stream->audio_info.flags.all) { | ||
652 | pipe_ctx->stream_res.audio = find_first_free_audio( | ||
653 | &context->res_ctx, pool, pipe_ctx->stream_res.stream_enc->id); | ||
654 | |||
655 | diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c b/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c | ||
656 | index 070ab56a8aca..da8b198538e5 100644 | ||
657 | --- a/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c | ||
658 | +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c | ||
659 | @@ -242,6 +242,10 @@ static void dmcu_set_backlight_level( | ||
660 | s2 |= (level << ATOM_S2_CURRENT_BL_LEVEL_SHIFT); | ||
661 | |||
662 | REG_WRITE(BIOS_SCRATCH_2, s2); | ||
663 | + | ||
664 | + /* waitDMCUReadyForCmd */ | ||
665 | + REG_WAIT(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, | ||
666 | + 0, 1, 80000); | ||
667 | } | ||
668 | |||
669 | static void dce_abm_init(struct abm *abm) | ||
670 | diff --git a/drivers/gpu/drm/amd/display/dc/inc/core_types.h b/drivers/gpu/drm/amd/display/dc/inc/core_types.h | ||
671 | index c0b9ca13393b..f4469fa5afb5 100644 | ||
672 | --- a/drivers/gpu/drm/amd/display/dc/inc/core_types.h | ||
673 | +++ b/drivers/gpu/drm/amd/display/dc/inc/core_types.h | ||
674 | @@ -159,7 +159,7 @@ struct resource_pool { | ||
675 | struct clock_source *clock_sources[MAX_CLOCK_SOURCES]; | ||
676 | unsigned int clk_src_count; | ||
677 | |||
678 | - struct audio *audios[MAX_PIPES]; | ||
679 | + struct audio *audios[MAX_AUDIOS]; | ||
680 | unsigned int audio_count; | ||
681 | struct audio_support audio_support; | ||
682 | |||
683 | diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/hw_shared.h b/drivers/gpu/drm/amd/display/dc/inc/hw/hw_shared.h | ||
684 | index cf7433ebf91a..71901743a938 100644 | ||
685 | --- a/drivers/gpu/drm/amd/display/dc/inc/hw/hw_shared.h | ||
686 | +++ b/drivers/gpu/drm/amd/display/dc/inc/hw/hw_shared.h | ||
687 | @@ -34,6 +34,7 @@ | ||
688 | * Data types shared between different Virtual HW blocks | ||
689 | ******************************************************************************/ | ||
690 | |||
691 | +#define MAX_AUDIOS 7 | ||
692 | #define MAX_PIPES 6 | ||
693 | |||
694 | struct gamma_curve { | ||
695 | diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c | ||
696 | index 781af1d42d76..b64a6ffc0aed 100644 | ||
697 | --- a/drivers/gpu/drm/drm_framebuffer.c | ||
698 | +++ b/drivers/gpu/drm/drm_framebuffer.c | ||
699 | @@ -793,7 +793,7 @@ static int atomic_remove_fb(struct drm_framebuffer *fb) | ||
700 | struct drm_device *dev = fb->dev; | ||
701 | struct drm_atomic_state *state; | ||
702 | struct drm_plane *plane; | ||
703 | - struct drm_connector *conn; | ||
704 | + struct drm_connector *conn __maybe_unused; | ||
705 | struct drm_connector_state *conn_state; | ||
706 | int i, ret; | ||
707 | unsigned plane_mask; | ||
708 | diff --git a/drivers/gpu/drm/i915/vlv_dsi_pll.c b/drivers/gpu/drm/i915/vlv_dsi_pll.c | ||
709 | index a132a8037ecc..77df7903e071 100644 | ||
710 | --- a/drivers/gpu/drm/i915/vlv_dsi_pll.c | ||
711 | +++ b/drivers/gpu/drm/i915/vlv_dsi_pll.c | ||
712 | @@ -413,8 +413,8 @@ static void glk_dsi_program_esc_clock(struct drm_device *dev, | ||
713 | else | ||
714 | txesc2_div = 10; | ||
715 | |||
716 | - I915_WRITE(MIPIO_TXESC_CLK_DIV1, txesc1_div & GLK_TX_ESC_CLK_DIV1_MASK); | ||
717 | - I915_WRITE(MIPIO_TXESC_CLK_DIV2, txesc2_div & GLK_TX_ESC_CLK_DIV2_MASK); | ||
718 | + I915_WRITE(MIPIO_TXESC_CLK_DIV1, (1 << (txesc1_div - 1)) & GLK_TX_ESC_CLK_DIV1_MASK); | ||
719 | + I915_WRITE(MIPIO_TXESC_CLK_DIV2, (1 << (txesc2_div - 1)) & GLK_TX_ESC_CLK_DIV2_MASK); | ||
720 | } | ||
721 | |||
722 | /* Program BXT Mipi clocks and dividers */ | ||
723 | diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c | ||
724 | index 9671a4bad643..31f1023214d3 100644 | ||
725 | --- a/drivers/hid/hid-sony.c | ||
726 | +++ b/drivers/hid/hid-sony.c | ||
727 | @@ -587,10 +587,14 @@ static void sony_set_leds(struct sony_sc *sc); | ||
728 | static inline void sony_schedule_work(struct sony_sc *sc, | ||
729 | enum sony_worker which) | ||
730 | { | ||
731 | + unsigned long flags; | ||
732 | + | ||
733 | switch (which) { | ||
734 | case SONY_WORKER_STATE: | ||
735 | - if (!sc->defer_initialization) | ||
736 | + spin_lock_irqsave(&sc->lock, flags); | ||
737 | + if (!sc->defer_initialization && sc->state_worker_initialized) | ||
738 | schedule_work(&sc->state_worker); | ||
739 | + spin_unlock_irqrestore(&sc->lock, flags); | ||
740 | break; | ||
741 | case SONY_WORKER_HOTPLUG: | ||
742 | if (sc->hotplug_worker_initialized) | ||
743 | @@ -2553,13 +2557,18 @@ static inline void sony_init_output_report(struct sony_sc *sc, | ||
744 | |||
745 | static inline void sony_cancel_work_sync(struct sony_sc *sc) | ||
746 | { | ||
747 | + unsigned long flags; | ||
748 | + | ||
749 | if (sc->hotplug_worker_initialized) | ||
750 | cancel_work_sync(&sc->hotplug_worker); | ||
751 | - if (sc->state_worker_initialized) | ||
752 | + if (sc->state_worker_initialized) { | ||
753 | + spin_lock_irqsave(&sc->lock, flags); | ||
754 | + sc->state_worker_initialized = 0; | ||
755 | + spin_unlock_irqrestore(&sc->lock, flags); | ||
756 | cancel_work_sync(&sc->state_worker); | ||
757 | + } | ||
758 | } | ||
759 | |||
760 | - | ||
761 | static int sony_input_configured(struct hid_device *hdev, | ||
762 | struct hid_input *hidinput) | ||
763 | { | ||
764 | diff --git a/drivers/hwmon/nct6775.c b/drivers/hwmon/nct6775.c | ||
765 | index 78603b78cf41..eba692cddbde 100644 | ||
766 | --- a/drivers/hwmon/nct6775.c | ||
767 | +++ b/drivers/hwmon/nct6775.c | ||
768 | @@ -818,7 +818,7 @@ static const u16 NCT6106_REG_TARGET[] = { 0x111, 0x121, 0x131 }; | ||
769 | static const u16 NCT6106_REG_WEIGHT_TEMP_SEL[] = { 0x168, 0x178, 0x188 }; | ||
770 | static const u16 NCT6106_REG_WEIGHT_TEMP_STEP[] = { 0x169, 0x179, 0x189 }; | ||
771 | static const u16 NCT6106_REG_WEIGHT_TEMP_STEP_TOL[] = { 0x16a, 0x17a, 0x18a }; | ||
772 | -static const u16 NCT6106_REG_WEIGHT_DUTY_STEP[] = { 0x16b, 0x17b, 0x17c }; | ||
773 | +static const u16 NCT6106_REG_WEIGHT_DUTY_STEP[] = { 0x16b, 0x17b, 0x18b }; | ||
774 | static const u16 NCT6106_REG_WEIGHT_TEMP_BASE[] = { 0x16c, 0x17c, 0x18c }; | ||
775 | static const u16 NCT6106_REG_WEIGHT_DUTY_BASE[] = { 0x16d, 0x17d, 0x18d }; | ||
776 | |||
777 | @@ -3673,6 +3673,7 @@ static int nct6775_probe(struct platform_device *pdev) | ||
778 | data->REG_FAN_TIME[0] = NCT6106_REG_FAN_STOP_TIME; | ||
779 | data->REG_FAN_TIME[1] = NCT6106_REG_FAN_STEP_UP_TIME; | ||
780 | data->REG_FAN_TIME[2] = NCT6106_REG_FAN_STEP_DOWN_TIME; | ||
781 | + data->REG_TOLERANCE_H = NCT6106_REG_TOLERANCE_H; | ||
782 | data->REG_PWM[0] = NCT6106_REG_PWM; | ||
783 | data->REG_PWM[1] = NCT6106_REG_FAN_START_OUTPUT; | ||
784 | data->REG_PWM[2] = NCT6106_REG_FAN_STOP_OUTPUT; | ||
785 | diff --git a/drivers/hwmon/nct7802.c b/drivers/hwmon/nct7802.c | ||
786 | index 2876c18ed841..38ffbdb0a85f 100644 | ||
787 | --- a/drivers/hwmon/nct7802.c | ||
788 | +++ b/drivers/hwmon/nct7802.c | ||
789 | @@ -768,7 +768,7 @@ static struct attribute *nct7802_in_attrs[] = { | ||
790 | &sensor_dev_attr_in3_alarm.dev_attr.attr, | ||
791 | &sensor_dev_attr_in3_beep.dev_attr.attr, | ||
792 | |||
793 | - &sensor_dev_attr_in4_input.dev_attr.attr, /* 17 */ | ||
794 | + &sensor_dev_attr_in4_input.dev_attr.attr, /* 16 */ | ||
795 | &sensor_dev_attr_in4_min.dev_attr.attr, | ||
796 | &sensor_dev_attr_in4_max.dev_attr.attr, | ||
797 | &sensor_dev_attr_in4_alarm.dev_attr.attr, | ||
798 | @@ -794,9 +794,9 @@ static umode_t nct7802_in_is_visible(struct kobject *kobj, | ||
799 | |||
800 | if (index >= 6 && index < 11 && (reg & 0x03) != 0x03) /* VSEN1 */ | ||
801 | return 0; | ||
802 | - if (index >= 11 && index < 17 && (reg & 0x0c) != 0x0c) /* VSEN2 */ | ||
803 | + if (index >= 11 && index < 16 && (reg & 0x0c) != 0x0c) /* VSEN2 */ | ||
804 | return 0; | ||
805 | - if (index >= 17 && (reg & 0x30) != 0x30) /* VSEN3 */ | ||
806 | + if (index >= 16 && (reg & 0x30) != 0x30) /* VSEN3 */ | ||
807 | return 0; | ||
808 | |||
809 | return attr->mode; | ||
810 | diff --git a/drivers/iio/accel/cros_ec_accel_legacy.c b/drivers/iio/accel/cros_ec_accel_legacy.c | ||
811 | index 063e89eff791..c776a3509a71 100644 | ||
812 | --- a/drivers/iio/accel/cros_ec_accel_legacy.c | ||
813 | +++ b/drivers/iio/accel/cros_ec_accel_legacy.c | ||
814 | @@ -328,7 +328,6 @@ static const struct iio_chan_spec_ext_info cros_ec_accel_legacy_ext_info[] = { | ||
815 | .modified = 1, \ | ||
816 | .info_mask_separate = \ | ||
817 | BIT(IIO_CHAN_INFO_RAW) | \ | ||
818 | - BIT(IIO_CHAN_INFO_SCALE) | \ | ||
819 | BIT(IIO_CHAN_INFO_CALIBBIAS), \ | ||
820 | .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SCALE), \ | ||
821 | .ext_info = cros_ec_accel_legacy_ext_info, \ | ||
822 | diff --git a/drivers/iio/adc/max9611.c b/drivers/iio/adc/max9611.c | ||
823 | index 0538ff8c4ac1..ce9af43fa2de 100644 | ||
824 | --- a/drivers/iio/adc/max9611.c | ||
825 | +++ b/drivers/iio/adc/max9611.c | ||
826 | @@ -86,7 +86,7 @@ | ||
827 | #define MAX9611_TEMP_MAX_POS 0x7f80 | ||
828 | #define MAX9611_TEMP_MAX_NEG 0xff80 | ||
829 | #define MAX9611_TEMP_MIN_NEG 0xd980 | ||
830 | -#define MAX9611_TEMP_MASK GENMASK(7, 15) | ||
831 | +#define MAX9611_TEMP_MASK GENMASK(15, 7) | ||
832 | #define MAX9611_TEMP_SHIFT 0x07 | ||
833 | #define MAX9611_TEMP_RAW(_r) ((_r) >> MAX9611_TEMP_SHIFT) | ||
834 | #define MAX9611_TEMP_SCALE_NUM 1000000 | ||
835 | diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c | ||
836 | index 530142b5a115..eb9b9de47fd1 100644 | ||
837 | --- a/drivers/input/mouse/elantech.c | ||
838 | +++ b/drivers/input/mouse/elantech.c | ||
839 | @@ -1810,6 +1810,30 @@ static int elantech_create_smbus(struct psmouse *psmouse, | ||
840 | leave_breadcrumbs); | ||
841 | } | ||
842 | |||
843 | +static bool elantech_use_host_notify(struct psmouse *psmouse, | ||
844 | + struct elantech_device_info *info) | ||
845 | +{ | ||
846 | + if (ETP_NEW_IC_SMBUS_HOST_NOTIFY(info->fw_version)) | ||
847 | + return true; | ||
848 | + | ||
849 | + switch (info->bus) { | ||
850 | + case ETP_BUS_PS2_ONLY: | ||
851 | + /* expected case */ | ||
852 | + break; | ||
853 | + case ETP_BUS_SMB_HST_NTFY_ONLY: | ||
854 | + case ETP_BUS_PS2_SMB_HST_NTFY: | ||
855 | + /* SMbus implementation is stable since 2018 */ | ||
856 | + if (dmi_get_bios_year() >= 2018) | ||
857 | + return true; | ||
858 | + default: | ||
859 | + psmouse_dbg(psmouse, | ||
860 | + "Ignoring SMBus bus provider %d\n", info->bus); | ||
861 | + break; | ||
862 | + } | ||
863 | + | ||
864 | + return false; | ||
865 | +} | ||
866 | + | ||
867 | /** | ||
868 | * elantech_setup_smbus - called once the PS/2 devices are enumerated | ||
869 | * and decides to instantiate a SMBus InterTouch device. | ||
870 | @@ -1829,7 +1853,7 @@ static int elantech_setup_smbus(struct psmouse *psmouse, | ||
871 | * i2c_blacklist_pnp_ids. | ||
872 | * Old ICs are up to the user to decide. | ||
873 | */ | ||
874 | - if (!ETP_NEW_IC_SMBUS_HOST_NOTIFY(info->fw_version) || | ||
875 | + if (!elantech_use_host_notify(psmouse, info) || | ||
876 | psmouse_matches_pnp_id(psmouse, i2c_blacklist_pnp_ids)) | ||
877 | return -ENXIO; | ||
878 | } | ||
879 | @@ -1849,34 +1873,6 @@ static int elantech_setup_smbus(struct psmouse *psmouse, | ||
880 | return 0; | ||
881 | } | ||
882 | |||
883 | -static bool elantech_use_host_notify(struct psmouse *psmouse, | ||
884 | - struct elantech_device_info *info) | ||
885 | -{ | ||
886 | - if (ETP_NEW_IC_SMBUS_HOST_NOTIFY(info->fw_version)) | ||
887 | - return true; | ||
888 | - | ||
889 | - switch (info->bus) { | ||
890 | - case ETP_BUS_PS2_ONLY: | ||
891 | - /* expected case */ | ||
892 | - break; | ||
893 | - case ETP_BUS_SMB_ALERT_ONLY: | ||
894 | - /* fall-through */ | ||
895 | - case ETP_BUS_PS2_SMB_ALERT: | ||
896 | - psmouse_dbg(psmouse, "Ignoring SMBus provider through alert protocol.\n"); | ||
897 | - break; | ||
898 | - case ETP_BUS_SMB_HST_NTFY_ONLY: | ||
899 | - /* fall-through */ | ||
900 | - case ETP_BUS_PS2_SMB_HST_NTFY: | ||
901 | - return true; | ||
902 | - default: | ||
903 | - psmouse_dbg(psmouse, | ||
904 | - "Ignoring SMBus bus provider %d.\n", | ||
905 | - info->bus); | ||
906 | - } | ||
907 | - | ||
908 | - return false; | ||
909 | -} | ||
910 | - | ||
911 | int elantech_init_smbus(struct psmouse *psmouse) | ||
912 | { | ||
913 | struct elantech_device_info info; | ||
914 | diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c | ||
915 | index af7d48431b85..06cebde2422e 100644 | ||
916 | --- a/drivers/input/mouse/synaptics.c | ||
917 | +++ b/drivers/input/mouse/synaptics.c | ||
918 | @@ -185,6 +185,7 @@ static const char * const smbus_pnp_ids[] = { | ||
919 | "LEN2055", /* E580 */ | ||
920 | "SYN3052", /* HP EliteBook 840 G4 */ | ||
921 | "SYN3221", /* HP 15-ay000 */ | ||
922 | + "SYN323d", /* HP Spectre X360 13-w013dx */ | ||
923 | NULL | ||
924 | }; | ||
925 | |||
926 | diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c | ||
927 | index d61570d64ee7..48304e26f988 100644 | ||
928 | --- a/drivers/input/touchscreen/usbtouchscreen.c | ||
929 | +++ b/drivers/input/touchscreen/usbtouchscreen.c | ||
930 | @@ -1672,6 +1672,8 @@ static int usbtouch_probe(struct usb_interface *intf, | ||
931 | if (!usbtouch || !input_dev) | ||
932 | goto out_free; | ||
933 | |||
934 | + mutex_init(&usbtouch->pm_mutex); | ||
935 | + | ||
936 | type = &usbtouch_dev_info[id->driver_info]; | ||
937 | usbtouch->type = type; | ||
938 | if (!type->process_pkt) | ||
939 | diff --git a/drivers/mmc/host/cavium.c b/drivers/mmc/host/cavium.c | ||
940 | index ed5cefb83768..89deb451e0ac 100644 | ||
941 | --- a/drivers/mmc/host/cavium.c | ||
942 | +++ b/drivers/mmc/host/cavium.c | ||
943 | @@ -374,6 +374,7 @@ static int finish_dma_single(struct cvm_mmc_host *host, struct mmc_data *data) | ||
944 | { | ||
945 | data->bytes_xfered = data->blocks * data->blksz; | ||
946 | data->error = 0; | ||
947 | + dma_unmap_sg(host->dev, data->sg, data->sg_len, get_dma_dir(data)); | ||
948 | return 1; | ||
949 | } | ||
950 | |||
951 | @@ -1046,7 +1047,8 @@ int cvm_mmc_of_slot_probe(struct device *dev, struct cvm_mmc_host *host) | ||
952 | mmc->max_segs = 1; | ||
953 | |||
954 | /* DMA size field can address up to 8 MB */ | ||
955 | - mmc->max_seg_size = 8 * 1024 * 1024; | ||
956 | + mmc->max_seg_size = min_t(unsigned int, 8 * 1024 * 1024, | ||
957 | + dma_get_max_seg_size(host->dev)); | ||
958 | mmc->max_req_size = mmc->max_seg_size; | ||
959 | /* External DMA is in 512 byte blocks */ | ||
960 | mmc->max_blk_size = 512; | ||
961 | diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c | ||
962 | index 602c19e23f05..786d852a70d5 100644 | ||
963 | --- a/drivers/net/can/rcar/rcar_canfd.c | ||
964 | +++ b/drivers/net/can/rcar/rcar_canfd.c | ||
965 | @@ -1512,10 +1512,11 @@ static int rcar_canfd_rx_poll(struct napi_struct *napi, int quota) | ||
966 | |||
967 | /* All packets processed */ | ||
968 | if (num_pkts < quota) { | ||
969 | - napi_complete_done(napi, num_pkts); | ||
970 | - /* Enable Rx FIFO interrupts */ | ||
971 | - rcar_canfd_set_bit(priv->base, RCANFD_RFCC(ridx), | ||
972 | - RCANFD_RFCC_RFIE); | ||
973 | + if (napi_complete_done(napi, num_pkts)) { | ||
974 | + /* Enable Rx FIFO interrupts */ | ||
975 | + rcar_canfd_set_bit(priv->base, RCANFD_RFCC(ridx), | ||
976 | + RCANFD_RFCC_RFIE); | ||
977 | + } | ||
978 | } | ||
979 | return num_pkts; | ||
980 | } | ||
981 | diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c | ||
982 | index 611f9d31be5d..740ef47eab01 100644 | ||
983 | --- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c | ||
984 | +++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c | ||
985 | @@ -576,16 +576,16 @@ static int peak_usb_ndo_stop(struct net_device *netdev) | ||
986 | dev->state &= ~PCAN_USB_STATE_STARTED; | ||
987 | netif_stop_queue(netdev); | ||
988 | |||
989 | + close_candev(netdev); | ||
990 | + | ||
991 | + dev->can.state = CAN_STATE_STOPPED; | ||
992 | + | ||
993 | /* unlink all pending urbs and free used memory */ | ||
994 | peak_usb_unlink_all_urbs(dev); | ||
995 | |||
996 | if (dev->adapter->dev_stop) | ||
997 | dev->adapter->dev_stop(dev); | ||
998 | |||
999 | - close_candev(netdev); | ||
1000 | - | ||
1001 | - dev->can.state = CAN_STATE_STOPPED; | ||
1002 | - | ||
1003 | /* can set bus off now */ | ||
1004 | if (dev->adapter->dev_set_bus) { | ||
1005 | int err = dev->adapter->dev_set_bus(dev, 0); | ||
1006 | diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c | ||
1007 | index dd161c5eea8e..41988358f63c 100644 | ||
1008 | --- a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c | ||
1009 | +++ b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c | ||
1010 | @@ -849,7 +849,7 @@ static int pcan_usb_fd_init(struct peak_usb_device *dev) | ||
1011 | goto err_out; | ||
1012 | |||
1013 | /* allocate command buffer once for all for the interface */ | ||
1014 | - pdev->cmd_buffer_addr = kmalloc(PCAN_UFD_CMD_BUFFER_SIZE, | ||
1015 | + pdev->cmd_buffer_addr = kzalloc(PCAN_UFD_CMD_BUFFER_SIZE, | ||
1016 | GFP_KERNEL); | ||
1017 | if (!pdev->cmd_buffer_addr) | ||
1018 | goto err_out_1; | ||
1019 | diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c | ||
1020 | index d516def846ab..b304198f0b3a 100644 | ||
1021 | --- a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c | ||
1022 | +++ b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c | ||
1023 | @@ -502,7 +502,7 @@ static int pcan_usb_pro_drv_loaded(struct peak_usb_device *dev, int loaded) | ||
1024 | u8 *buffer; | ||
1025 | int err; | ||
1026 | |||
1027 | - buffer = kmalloc(PCAN_USBPRO_FCT_DRVLD_REQ_LEN, GFP_KERNEL); | ||
1028 | + buffer = kzalloc(PCAN_USBPRO_FCT_DRVLD_REQ_LEN, GFP_KERNEL); | ||
1029 | if (!buffer) | ||
1030 | return -ENOMEM; | ||
1031 | |||
1032 | diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c | ||
1033 | index f2aba5b160c2..d45c435a599d 100644 | ||
1034 | --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c | ||
1035 | +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c | ||
1036 | @@ -67,7 +67,8 @@ static struct ch_tc_pedit_fields pedits[] = { | ||
1037 | static struct ch_tc_flower_entry *allocate_flower_entry(void) | ||
1038 | { | ||
1039 | struct ch_tc_flower_entry *new = kzalloc(sizeof(*new), GFP_KERNEL); | ||
1040 | - spin_lock_init(&new->lock); | ||
1041 | + if (new) | ||
1042 | + spin_lock_init(&new->lock); | ||
1043 | return new; | ||
1044 | } | ||
1045 | |||
1046 | diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c | ||
1047 | index 8b7d70e3a379..3fe7605a2cca 100644 | ||
1048 | --- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c | ||
1049 | +++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c | ||
1050 | @@ -724,7 +724,7 @@ static int iwl_mvm_sar_get_ewrd_table(struct iwl_mvm *mvm) | ||
1051 | |||
1052 | for (i = 0; i < n_profiles; i++) { | ||
1053 | /* the tables start at element 3 */ | ||
1054 | - static int pos = 3; | ||
1055 | + int pos = 3; | ||
1056 | |||
1057 | /* The EWRD profiles officially go from 2 to 4, but we | ||
1058 | * save them in sar_profiles[1-3] (because we don't | ||
1059 | @@ -836,6 +836,22 @@ int iwl_mvm_sar_select_profile(struct iwl_mvm *mvm, int prof_a, int prof_b) | ||
1060 | return iwl_mvm_send_cmd_pdu(mvm, REDUCE_TX_POWER_CMD, 0, len, &cmd); | ||
1061 | } | ||
1062 | |||
1063 | +static bool iwl_mvm_sar_geo_support(struct iwl_mvm *mvm) | ||
1064 | +{ | ||
1065 | + /* | ||
1066 | + * The GEO_TX_POWER_LIMIT command is not supported on earlier | ||
1067 | + * firmware versions. Unfortunately, we don't have a TLV API | ||
1068 | + * flag to rely on, so rely on the major version which is in | ||
1069 | + * the first byte of ucode_ver. This was implemented | ||
1070 | + * initially on version 38 and then backported to 36, 29 and | ||
1071 | + * 17. | ||
1072 | + */ | ||
1073 | + return IWL_UCODE_SERIAL(mvm->fw->ucode_ver) >= 38 || | ||
1074 | + IWL_UCODE_SERIAL(mvm->fw->ucode_ver) == 36 || | ||
1075 | + IWL_UCODE_SERIAL(mvm->fw->ucode_ver) == 29 || | ||
1076 | + IWL_UCODE_SERIAL(mvm->fw->ucode_ver) == 17; | ||
1077 | +} | ||
1078 | + | ||
1079 | int iwl_mvm_get_sar_geo_profile(struct iwl_mvm *mvm) | ||
1080 | { | ||
1081 | struct iwl_geo_tx_power_profiles_resp *resp; | ||
1082 | @@ -851,6 +867,9 @@ int iwl_mvm_get_sar_geo_profile(struct iwl_mvm *mvm) | ||
1083 | .data = { &geo_cmd }, | ||
1084 | }; | ||
1085 | |||
1086 | + if (!iwl_mvm_sar_geo_support(mvm)) | ||
1087 | + return -EOPNOTSUPP; | ||
1088 | + | ||
1089 | ret = iwl_mvm_send_cmd(mvm, &cmd); | ||
1090 | if (ret) { | ||
1091 | IWL_ERR(mvm, "Failed to get geographic profile info %d\n", ret); | ||
1092 | @@ -876,13 +895,7 @@ static int iwl_mvm_sar_geo_init(struct iwl_mvm *mvm) | ||
1093 | int ret, i, j; | ||
1094 | u16 cmd_wide_id = WIDE_ID(PHY_OPS_GROUP, GEO_TX_POWER_LIMIT); | ||
1095 | |||
1096 | - /* | ||
1097 | - * This command is not supported on earlier firmware versions. | ||
1098 | - * Unfortunately, we don't have a TLV API flag to rely on, so | ||
1099 | - * rely on the major version which is in the first byte of | ||
1100 | - * ucode_ver. | ||
1101 | - */ | ||
1102 | - if (IWL_UCODE_SERIAL(mvm->fw->ucode_ver) < 41) | ||
1103 | + if (!iwl_mvm_sar_geo_support(mvm)) | ||
1104 | return 0; | ||
1105 | |||
1106 | ret = iwl_mvm_sar_get_wgds_table(mvm); | ||
1107 | diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/tx.c b/drivers/net/wireless/intel/iwlwifi/pcie/tx.c | ||
1108 | index 93f0d387688a..42fdb7970cfd 100644 | ||
1109 | --- a/drivers/net/wireless/intel/iwlwifi/pcie/tx.c | ||
1110 | +++ b/drivers/net/wireless/intel/iwlwifi/pcie/tx.c | ||
1111 | @@ -403,6 +403,8 @@ static void iwl_pcie_tfd_unmap(struct iwl_trans *trans, | ||
1112 | DMA_TO_DEVICE); | ||
1113 | } | ||
1114 | |||
1115 | + meta->tbs = 0; | ||
1116 | + | ||
1117 | if (trans->cfg->use_tfh) { | ||
1118 | struct iwl_tfh_tfd *tfd_fh = (void *)tfd; | ||
1119 | |||
1120 | diff --git a/drivers/net/wireless/marvell/mwifiex/main.h b/drivers/net/wireless/marvell/mwifiex/main.h | ||
1121 | index b025ba164412..e39bb5c42c9a 100644 | ||
1122 | --- a/drivers/net/wireless/marvell/mwifiex/main.h | ||
1123 | +++ b/drivers/net/wireless/marvell/mwifiex/main.h | ||
1124 | @@ -124,6 +124,7 @@ enum { | ||
1125 | |||
1126 | #define MWIFIEX_MAX_TOTAL_SCAN_TIME (MWIFIEX_TIMER_10S - MWIFIEX_TIMER_1S) | ||
1127 | |||
1128 | +#define WPA_GTK_OUI_OFFSET 2 | ||
1129 | #define RSN_GTK_OUI_OFFSET 2 | ||
1130 | |||
1131 | #define MWIFIEX_OUI_NOT_PRESENT 0 | ||
1132 | diff --git a/drivers/net/wireless/marvell/mwifiex/scan.c b/drivers/net/wireless/marvell/mwifiex/scan.c | ||
1133 | index 6dd771ce68a3..ed27147efcb3 100644 | ||
1134 | --- a/drivers/net/wireless/marvell/mwifiex/scan.c | ||
1135 | +++ b/drivers/net/wireless/marvell/mwifiex/scan.c | ||
1136 | @@ -181,7 +181,8 @@ mwifiex_is_wpa_oui_present(struct mwifiex_bssdescriptor *bss_desc, u32 cipher) | ||
1137 | u8 ret = MWIFIEX_OUI_NOT_PRESENT; | ||
1138 | |||
1139 | if (has_vendor_hdr(bss_desc->bcn_wpa_ie, WLAN_EID_VENDOR_SPECIFIC)) { | ||
1140 | - iebody = (struct ie_body *) bss_desc->bcn_wpa_ie->data; | ||
1141 | + iebody = (struct ie_body *)((u8 *)bss_desc->bcn_wpa_ie->data + | ||
1142 | + WPA_GTK_OUI_OFFSET); | ||
1143 | oui = &mwifiex_wpa_oui[cipher][0]; | ||
1144 | ret = mwifiex_search_oui_in_ie(iebody, oui); | ||
1145 | if (ret) | ||
1146 | diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c | ||
1147 | index 260248fbb8fe..a11e210d173e 100644 | ||
1148 | --- a/drivers/nvme/host/multipath.c | ||
1149 | +++ b/drivers/nvme/host/multipath.c | ||
1150 | @@ -20,11 +20,6 @@ module_param(multipath, bool, 0444); | ||
1151 | MODULE_PARM_DESC(multipath, | ||
1152 | "turn on native support for multiple controllers per subsystem"); | ||
1153 | |||
1154 | -inline bool nvme_ctrl_use_ana(struct nvme_ctrl *ctrl) | ||
1155 | -{ | ||
1156 | - return multipath && ctrl->subsys && (ctrl->subsys->cmic & (1 << 3)); | ||
1157 | -} | ||
1158 | - | ||
1159 | /* | ||
1160 | * If multipathing is enabled we need to always use the subsystem instance | ||
1161 | * number for numbering our devices to avoid conflicts between subsystems that | ||
1162 | @@ -516,7 +511,8 @@ int nvme_mpath_init(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id) | ||
1163 | { | ||
1164 | int error; | ||
1165 | |||
1166 | - if (!nvme_ctrl_use_ana(ctrl)) | ||
1167 | + /* check if multipath is enabled and we have the capability */ | ||
1168 | + if (!multipath || !ctrl->subsys || !(ctrl->subsys->cmic & (1 << 3))) | ||
1169 | return 0; | ||
1170 | |||
1171 | ctrl->anacap = id->anacap; | ||
1172 | diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h | ||
1173 | index e82cdaec81c9..d5e29b57eb34 100644 | ||
1174 | --- a/drivers/nvme/host/nvme.h | ||
1175 | +++ b/drivers/nvme/host/nvme.h | ||
1176 | @@ -464,7 +464,11 @@ extern const struct attribute_group nvme_ns_id_attr_group; | ||
1177 | extern const struct block_device_operations nvme_ns_head_ops; | ||
1178 | |||
1179 | #ifdef CONFIG_NVME_MULTIPATH | ||
1180 | -bool nvme_ctrl_use_ana(struct nvme_ctrl *ctrl); | ||
1181 | +static inline bool nvme_ctrl_use_ana(struct nvme_ctrl *ctrl) | ||
1182 | +{ | ||
1183 | + return ctrl->ana_log_buf != NULL; | ||
1184 | +} | ||
1185 | + | ||
1186 | void nvme_set_disk_name(char *disk_name, struct nvme_ns *ns, | ||
1187 | struct nvme_ctrl *ctrl, int *flags); | ||
1188 | void nvme_failover_req(struct request *req); | ||
1189 | diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c | ||
1190 | index 4ac4a73037f5..4b7cc8d425b1 100644 | ||
1191 | --- a/drivers/s390/cio/qdio_main.c | ||
1192 | +++ b/drivers/s390/cio/qdio_main.c | ||
1193 | @@ -1569,13 +1569,13 @@ static int handle_outbound(struct qdio_q *q, unsigned int callflags, | ||
1194 | rc = qdio_kick_outbound_q(q, phys_aob); | ||
1195 | } else if (need_siga_sync(q)) { | ||
1196 | rc = qdio_siga_sync_q(q); | ||
1197 | + } else if (count < QDIO_MAX_BUFFERS_PER_Q && | ||
1198 | + get_buf_state(q, prev_buf(bufnr), &state, 0) > 0 && | ||
1199 | + state == SLSB_CU_OUTPUT_PRIMED) { | ||
1200 | + /* The previous buffer is not processed yet, tack on. */ | ||
1201 | + qperf_inc(q, fast_requeue); | ||
1202 | } else { | ||
1203 | - /* try to fast requeue buffers */ | ||
1204 | - get_buf_state(q, prev_buf(bufnr), &state, 0); | ||
1205 | - if (state != SLSB_CU_OUTPUT_PRIMED) | ||
1206 | - rc = qdio_kick_outbound_q(q, 0); | ||
1207 | - else | ||
1208 | - qperf_inc(q, fast_requeue); | ||
1209 | + rc = qdio_kick_outbound_q(q, 0); | ||
1210 | } | ||
1211 | |||
1212 | /* in case of SIGA errors we must process the error immediately */ | ||
1213 | diff --git a/drivers/s390/cio/vfio_ccw_cp.c b/drivers/s390/cio/vfio_ccw_cp.c | ||
1214 | index 70a006ba4d05..4fe06ff7b2c8 100644 | ||
1215 | --- a/drivers/s390/cio/vfio_ccw_cp.c | ||
1216 | +++ b/drivers/s390/cio/vfio_ccw_cp.c | ||
1217 | @@ -89,8 +89,10 @@ static int pfn_array_alloc_pin(struct pfn_array *pa, struct device *mdev, | ||
1218 | sizeof(*pa->pa_iova_pfn) + | ||
1219 | sizeof(*pa->pa_pfn), | ||
1220 | GFP_KERNEL); | ||
1221 | - if (unlikely(!pa->pa_iova_pfn)) | ||
1222 | + if (unlikely(!pa->pa_iova_pfn)) { | ||
1223 | + pa->pa_nr = 0; | ||
1224 | return -ENOMEM; | ||
1225 | + } | ||
1226 | pa->pa_pfn = pa->pa_iova_pfn + pa->pa_nr; | ||
1227 | |||
1228 | pa->pa_iova_pfn[0] = pa->pa_iova >> PAGE_SHIFT; | ||
1229 | diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c | ||
1230 | index d1154baa9436..9c21938ed67e 100644 | ||
1231 | --- a/drivers/scsi/device_handler/scsi_dh_alua.c | ||
1232 | +++ b/drivers/scsi/device_handler/scsi_dh_alua.c | ||
1233 | @@ -54,6 +54,7 @@ | ||
1234 | #define ALUA_FAILOVER_TIMEOUT 60 | ||
1235 | #define ALUA_FAILOVER_RETRIES 5 | ||
1236 | #define ALUA_RTPG_DELAY_MSECS 5 | ||
1237 | +#define ALUA_RTPG_RETRY_DELAY 2 | ||
1238 | |||
1239 | /* device handler flags */ | ||
1240 | #define ALUA_OPTIMIZE_STPG 0x01 | ||
1241 | @@ -696,7 +697,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_port_group *pg) | ||
1242 | case SCSI_ACCESS_STATE_TRANSITIONING: | ||
1243 | if (time_before(jiffies, pg->expiry)) { | ||
1244 | /* State transition, retry */ | ||
1245 | - pg->interval = 2; | ||
1246 | + pg->interval = ALUA_RTPG_RETRY_DELAY; | ||
1247 | err = SCSI_DH_RETRY; | ||
1248 | } else { | ||
1249 | struct alua_dh_data *h; | ||
1250 | @@ -821,6 +822,8 @@ static void alua_rtpg_work(struct work_struct *work) | ||
1251 | spin_lock_irqsave(&pg->lock, flags); | ||
1252 | pg->flags &= ~ALUA_PG_RUNNING; | ||
1253 | pg->flags |= ALUA_PG_RUN_RTPG; | ||
1254 | + if (!pg->interval) | ||
1255 | + pg->interval = ALUA_RTPG_RETRY_DELAY; | ||
1256 | spin_unlock_irqrestore(&pg->lock, flags); | ||
1257 | queue_delayed_work(kaluad_wq, &pg->rtpg_work, | ||
1258 | pg->interval * HZ); | ||
1259 | @@ -832,6 +835,8 @@ static void alua_rtpg_work(struct work_struct *work) | ||
1260 | spin_lock_irqsave(&pg->lock, flags); | ||
1261 | if (err == SCSI_DH_RETRY || pg->flags & ALUA_PG_RUN_RTPG) { | ||
1262 | pg->flags &= ~ALUA_PG_RUNNING; | ||
1263 | + if (!pg->interval && !(pg->flags & ALUA_PG_RUN_RTPG)) | ||
1264 | + pg->interval = ALUA_RTPG_RETRY_DELAY; | ||
1265 | pg->flags |= ALUA_PG_RUN_RTPG; | ||
1266 | spin_unlock_irqrestore(&pg->lock, flags); | ||
1267 | queue_delayed_work(kaluad_wq, &pg->rtpg_work, | ||
1268 | diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c | ||
1269 | index b64ca977825d..71d53bb239e2 100644 | ||
1270 | --- a/drivers/scsi/ibmvscsi/ibmvfc.c | ||
1271 | +++ b/drivers/scsi/ibmvscsi/ibmvfc.c | ||
1272 | @@ -4874,8 +4874,8 @@ static int ibmvfc_remove(struct vio_dev *vdev) | ||
1273 | |||
1274 | spin_lock_irqsave(vhost->host->host_lock, flags); | ||
1275 | ibmvfc_purge_requests(vhost, DID_ERROR); | ||
1276 | - ibmvfc_free_event_pool(vhost); | ||
1277 | spin_unlock_irqrestore(vhost->host->host_lock, flags); | ||
1278 | + ibmvfc_free_event_pool(vhost); | ||
1279 | |||
1280 | ibmvfc_free_mem(vhost); | ||
1281 | spin_lock(&ibmvfc_driver_lock); | ||
1282 | diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c | ||
1283 | index e0c87228438d..806ceabcabc3 100644 | ||
1284 | --- a/drivers/scsi/megaraid/megaraid_sas_base.c | ||
1285 | +++ b/drivers/scsi/megaraid/megaraid_sas_base.c | ||
1286 | @@ -3025,6 +3025,7 @@ megasas_fw_crash_buffer_show(struct device *cdev, | ||
1287 | u32 size; | ||
1288 | unsigned long buff_addr; | ||
1289 | unsigned long dmachunk = CRASH_DMA_BUF_SIZE; | ||
1290 | + unsigned long chunk_left_bytes; | ||
1291 | unsigned long src_addr; | ||
1292 | unsigned long flags; | ||
1293 | u32 buff_offset; | ||
1294 | @@ -3050,6 +3051,8 @@ megasas_fw_crash_buffer_show(struct device *cdev, | ||
1295 | } | ||
1296 | |||
1297 | size = (instance->fw_crash_buffer_size * dmachunk) - buff_offset; | ||
1298 | + chunk_left_bytes = dmachunk - (buff_offset % dmachunk); | ||
1299 | + size = (size > chunk_left_bytes) ? chunk_left_bytes : size; | ||
1300 | size = (size >= PAGE_SIZE) ? (PAGE_SIZE - 1) : size; | ||
1301 | |||
1302 | src_addr = (unsigned long)instance->crash_buf[buff_offset / dmachunk] + | ||
1303 | diff --git a/drivers/staging/android/ion/ion_page_pool.c b/drivers/staging/android/ion/ion_page_pool.c | ||
1304 | index 9bc56eb48d2a..890d264ac687 100644 | ||
1305 | --- a/drivers/staging/android/ion/ion_page_pool.c | ||
1306 | +++ b/drivers/staging/android/ion/ion_page_pool.c | ||
1307 | @@ -8,11 +8,14 @@ | ||
1308 | #include <linux/list.h> | ||
1309 | #include <linux/slab.h> | ||
1310 | #include <linux/swap.h> | ||
1311 | +#include <linux/sched/signal.h> | ||
1312 | |||
1313 | #include "ion.h" | ||
1314 | |||
1315 | static inline struct page *ion_page_pool_alloc_pages(struct ion_page_pool *pool) | ||
1316 | { | ||
1317 | + if (fatal_signal_pending(current)) | ||
1318 | + return NULL; | ||
1319 | return alloc_pages(pool->gfp_mask, pool->order); | ||
1320 | } | ||
1321 | |||
1322 | diff --git a/drivers/staging/gasket/apex_driver.c b/drivers/staging/gasket/apex_driver.c | ||
1323 | index c747e9ca4518..0cef1d6d2e2b 100644 | ||
1324 | --- a/drivers/staging/gasket/apex_driver.c | ||
1325 | +++ b/drivers/staging/gasket/apex_driver.c | ||
1326 | @@ -538,7 +538,7 @@ static ssize_t sysfs_show(struct device *device, struct device_attribute *attr, | ||
1327 | break; | ||
1328 | case ATTR_KERNEL_HIB_SIMPLE_PAGE_TABLE_SIZE: | ||
1329 | ret = scnprintf(buf, PAGE_SIZE, "%u\n", | ||
1330 | - gasket_page_table_num_entries( | ||
1331 | + gasket_page_table_num_simple_entries( | ||
1332 | gasket_dev->page_table[0])); | ||
1333 | break; | ||
1334 | case ATTR_KERNEL_HIB_NUM_ACTIVE_PAGES: | ||
1335 | diff --git a/drivers/tty/tty_ldsem.c b/drivers/tty/tty_ldsem.c | ||
1336 | index b989ca26fc78..2f0372976459 100644 | ||
1337 | --- a/drivers/tty/tty_ldsem.c | ||
1338 | +++ b/drivers/tty/tty_ldsem.c | ||
1339 | @@ -116,8 +116,7 @@ static void __ldsem_wake_readers(struct ld_semaphore *sem) | ||
1340 | |||
1341 | list_for_each_entry_safe(waiter, next, &sem->read_wait, list) { | ||
1342 | tsk = waiter->task; | ||
1343 | - smp_mb(); | ||
1344 | - waiter->task = NULL; | ||
1345 | + smp_store_release(&waiter->task, NULL); | ||
1346 | wake_up_process(tsk); | ||
1347 | put_task_struct(tsk); | ||
1348 | } | ||
1349 | @@ -217,7 +216,7 @@ down_read_failed(struct ld_semaphore *sem, long count, long timeout) | ||
1350 | for (;;) { | ||
1351 | set_current_state(TASK_UNINTERRUPTIBLE); | ||
1352 | |||
1353 | - if (!waiter.task) | ||
1354 | + if (!smp_load_acquire(&waiter.task)) | ||
1355 | break; | ||
1356 | if (!timeout) | ||
1357 | break; | ||
1358 | diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c | ||
1359 | index ffccd40ea67d..29c6414f48f1 100644 | ||
1360 | --- a/drivers/usb/core/devio.c | ||
1361 | +++ b/drivers/usb/core/devio.c | ||
1362 | @@ -1792,8 +1792,6 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb | ||
1363 | return 0; | ||
1364 | |||
1365 | error: | ||
1366 | - if (as && as->usbm) | ||
1367 | - dec_usb_memory_use_count(as->usbm, &as->usbm->urb_use_count); | ||
1368 | kfree(isopkt); | ||
1369 | kfree(dr); | ||
1370 | if (as) | ||
1371 | diff --git a/drivers/usb/host/xhci-rcar.c b/drivers/usb/host/xhci-rcar.c | ||
1372 | index 671bce18782c..8616c52849c6 100644 | ||
1373 | --- a/drivers/usb/host/xhci-rcar.c | ||
1374 | +++ b/drivers/usb/host/xhci-rcar.c | ||
1375 | @@ -238,10 +238,15 @@ int xhci_rcar_init_quirk(struct usb_hcd *hcd) | ||
1376 | * pointers. So, this driver clears the AC64 bit of xhci->hcc_params | ||
1377 | * to call dma_set_coherent_mask(dev, DMA_BIT_MASK(32)) in | ||
1378 | * xhci_gen_setup(). | ||
1379 | + * | ||
1380 | + * And, since the firmware/internal CPU control the USBSTS.STS_HALT | ||
1381 | + * and the process speed is down when the roothub port enters U3, | ||
1382 | + * long delay for the handshake of STS_HALT is neeed in xhci_suspend(). | ||
1383 | */ | ||
1384 | if (xhci_rcar_is_gen2(hcd->self.controller) || | ||
1385 | - xhci_rcar_is_gen3(hcd->self.controller)) | ||
1386 | - xhci->quirks |= XHCI_NO_64BIT_SUPPORT; | ||
1387 | + xhci_rcar_is_gen3(hcd->self.controller)) { | ||
1388 | + xhci->quirks |= XHCI_NO_64BIT_SUPPORT | XHCI_SLOW_SUSPEND; | ||
1389 | + } | ||
1390 | |||
1391 | if (!xhci_rcar_wait_for_pll_active(hcd)) | ||
1392 | return -ETIMEDOUT; | ||
1393 | diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c | ||
1394 | index c2991b8a65ce..55db0fc87927 100644 | ||
1395 | --- a/drivers/usb/misc/iowarrior.c | ||
1396 | +++ b/drivers/usb/misc/iowarrior.c | ||
1397 | @@ -866,19 +866,20 @@ static void iowarrior_disconnect(struct usb_interface *interface) | ||
1398 | dev = usb_get_intfdata(interface); | ||
1399 | mutex_lock(&iowarrior_open_disc_lock); | ||
1400 | usb_set_intfdata(interface, NULL); | ||
1401 | + /* prevent device read, write and ioctl */ | ||
1402 | + dev->present = 0; | ||
1403 | |||
1404 | minor = dev->minor; | ||
1405 | + mutex_unlock(&iowarrior_open_disc_lock); | ||
1406 | + /* give back our minor - this will call close() locks need to be dropped at this point*/ | ||
1407 | |||
1408 | - /* give back our minor */ | ||
1409 | usb_deregister_dev(interface, &iowarrior_class); | ||
1410 | |||
1411 | mutex_lock(&dev->mutex); | ||
1412 | |||
1413 | /* prevent device read, write and ioctl */ | ||
1414 | - dev->present = 0; | ||
1415 | |||
1416 | mutex_unlock(&dev->mutex); | ||
1417 | - mutex_unlock(&iowarrior_open_disc_lock); | ||
1418 | |||
1419 | if (dev->opened) { | ||
1420 | /* There is a process that holds a filedescriptor to the device , | ||
1421 | diff --git a/drivers/usb/misc/yurex.c b/drivers/usb/misc/yurex.c | ||
1422 | index 7b306aa22d25..6715a128e6c8 100644 | ||
1423 | --- a/drivers/usb/misc/yurex.c | ||
1424 | +++ b/drivers/usb/misc/yurex.c | ||
1425 | @@ -92,7 +92,6 @@ static void yurex_delete(struct kref *kref) | ||
1426 | |||
1427 | dev_dbg(&dev->interface->dev, "%s\n", __func__); | ||
1428 | |||
1429 | - usb_put_dev(dev->udev); | ||
1430 | if (dev->cntl_urb) { | ||
1431 | usb_kill_urb(dev->cntl_urb); | ||
1432 | kfree(dev->cntl_req); | ||
1433 | @@ -108,6 +107,7 @@ static void yurex_delete(struct kref *kref) | ||
1434 | dev->int_buffer, dev->urb->transfer_dma); | ||
1435 | usb_free_urb(dev->urb); | ||
1436 | } | ||
1437 | + usb_put_dev(dev->udev); | ||
1438 | kfree(dev); | ||
1439 | } | ||
1440 | |||
1441 | diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c | ||
1442 | index 3457c1fdebd1..5f29ce8d6c3f 100644 | ||
1443 | --- a/drivers/usb/typec/tcpm.c | ||
1444 | +++ b/drivers/usb/typec/tcpm.c | ||
1445 | @@ -378,7 +378,8 @@ static enum tcpm_state tcpm_default_state(struct tcpm_port *port) | ||
1446 | return SNK_UNATTACHED; | ||
1447 | else if (port->try_role == TYPEC_SOURCE) | ||
1448 | return SRC_UNATTACHED; | ||
1449 | - else if (port->tcpc->config->default_role == TYPEC_SINK) | ||
1450 | + else if (port->tcpc->config && | ||
1451 | + port->tcpc->config->default_role == TYPEC_SINK) | ||
1452 | return SNK_UNATTACHED; | ||
1453 | /* Fall through to return SRC_UNATTACHED */ | ||
1454 | } else if (port->port_type == TYPEC_PORT_SNK) { | ||
1455 | @@ -585,7 +586,20 @@ static void tcpm_debugfs_init(struct tcpm_port *port) | ||
1456 | |||
1457 | static void tcpm_debugfs_exit(struct tcpm_port *port) | ||
1458 | { | ||
1459 | + int i; | ||
1460 | + | ||
1461 | + mutex_lock(&port->logbuffer_lock); | ||
1462 | + for (i = 0; i < LOG_BUFFER_ENTRIES; i++) { | ||
1463 | + kfree(port->logbuffer[i]); | ||
1464 | + port->logbuffer[i] = NULL; | ||
1465 | + } | ||
1466 | + mutex_unlock(&port->logbuffer_lock); | ||
1467 | + | ||
1468 | debugfs_remove(port->dentry); | ||
1469 | + if (list_empty(&rootdir->d_subdirs)) { | ||
1470 | + debugfs_remove(rootdir); | ||
1471 | + rootdir = NULL; | ||
1472 | + } | ||
1473 | } | ||
1474 | |||
1475 | #else | ||
1476 | @@ -1094,7 +1108,8 @@ static int tcpm_pd_svdm(struct tcpm_port *port, const __le32 *payload, int cnt, | ||
1477 | break; | ||
1478 | case CMD_ATTENTION: | ||
1479 | /* Attention command does not have response */ | ||
1480 | - typec_altmode_attention(adev, p[1]); | ||
1481 | + if (adev) | ||
1482 | + typec_altmode_attention(adev, p[1]); | ||
1483 | return 0; | ||
1484 | default: | ||
1485 | break; | ||
1486 | @@ -1146,20 +1161,26 @@ static int tcpm_pd_svdm(struct tcpm_port *port, const __le32 *payload, int cnt, | ||
1487 | } | ||
1488 | break; | ||
1489 | case CMD_ENTER_MODE: | ||
1490 | - typec_altmode_update_active(pdev, true); | ||
1491 | - | ||
1492 | - if (typec_altmode_vdm(adev, p[0], &p[1], cnt)) { | ||
1493 | - response[0] = VDO(adev->svid, 1, CMD_EXIT_MODE); | ||
1494 | - response[0] |= VDO_OPOS(adev->mode); | ||
1495 | - return 1; | ||
1496 | + if (adev && pdev) { | ||
1497 | + typec_altmode_update_active(pdev, true); | ||
1498 | + | ||
1499 | + if (typec_altmode_vdm(adev, p[0], &p[1], cnt)) { | ||
1500 | + response[0] = VDO(adev->svid, 1, | ||
1501 | + CMD_EXIT_MODE); | ||
1502 | + response[0] |= VDO_OPOS(adev->mode); | ||
1503 | + return 1; | ||
1504 | + } | ||
1505 | } | ||
1506 | return 0; | ||
1507 | case CMD_EXIT_MODE: | ||
1508 | - typec_altmode_update_active(pdev, false); | ||
1509 | + if (adev && pdev) { | ||
1510 | + typec_altmode_update_active(pdev, false); | ||
1511 | |||
1512 | - /* Back to USB Operation */ | ||
1513 | - WARN_ON(typec_altmode_notify(adev, TYPEC_STATE_USB, | ||
1514 | - NULL)); | ||
1515 | + /* Back to USB Operation */ | ||
1516 | + WARN_ON(typec_altmode_notify(adev, | ||
1517 | + TYPEC_STATE_USB, | ||
1518 | + NULL)); | ||
1519 | + } | ||
1520 | break; | ||
1521 | default: | ||
1522 | break; | ||
1523 | @@ -1169,8 +1190,10 @@ static int tcpm_pd_svdm(struct tcpm_port *port, const __le32 *payload, int cnt, | ||
1524 | switch (cmd) { | ||
1525 | case CMD_ENTER_MODE: | ||
1526 | /* Back to USB Operation */ | ||
1527 | - WARN_ON(typec_altmode_notify(adev, TYPEC_STATE_USB, | ||
1528 | - NULL)); | ||
1529 | + if (adev) | ||
1530 | + WARN_ON(typec_altmode_notify(adev, | ||
1531 | + TYPEC_STATE_USB, | ||
1532 | + NULL)); | ||
1533 | break; | ||
1534 | default: | ||
1535 | break; | ||
1536 | @@ -1181,7 +1204,8 @@ static int tcpm_pd_svdm(struct tcpm_port *port, const __le32 *payload, int cnt, | ||
1537 | } | ||
1538 | |||
1539 | /* Informing the alternate mode drivers about everything */ | ||
1540 | - typec_altmode_vdm(adev, p[0], &p[1], cnt); | ||
1541 | + if (adev) | ||
1542 | + typec_altmode_vdm(adev, p[0], &p[1], cnt); | ||
1543 | |||
1544 | return rlen; | ||
1545 | } | ||
1546 | @@ -4083,7 +4107,7 @@ static int tcpm_try_role(const struct typec_capability *cap, int role) | ||
1547 | mutex_lock(&port->lock); | ||
1548 | if (tcpc->try_role) | ||
1549 | ret = tcpc->try_role(tcpc, role); | ||
1550 | - if (!ret && !tcpc->config->try_role_hw) | ||
1551 | + if (!ret && (!tcpc->config || !tcpc->config->try_role_hw)) | ||
1552 | port->try_role = role; | ||
1553 | port->try_src_count = 0; | ||
1554 | port->try_snk_count = 0; | ||
1555 | @@ -4730,7 +4754,7 @@ static int tcpm_copy_caps(struct tcpm_port *port, | ||
1556 | port->typec_caps.prefer_role = tcfg->default_role; | ||
1557 | port->typec_caps.type = tcfg->type; | ||
1558 | port->typec_caps.data = tcfg->data; | ||
1559 | - port->self_powered = port->tcpc->config->self_powered; | ||
1560 | + port->self_powered = tcfg->self_powered; | ||
1561 | |||
1562 | return 0; | ||
1563 | } | ||
1564 | diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c | ||
1565 | index c181f1621e1a..2bc47eb6215e 100644 | ||
1566 | --- a/fs/cifs/smb2pdu.c | ||
1567 | +++ b/fs/cifs/smb2pdu.c | ||
1568 | @@ -168,7 +168,7 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon) | ||
1569 | if (tcon == NULL) | ||
1570 | return 0; | ||
1571 | |||
1572 | - if (smb2_command == SMB2_TREE_CONNECT) | ||
1573 | + if (smb2_command == SMB2_TREE_CONNECT || smb2_command == SMB2_IOCTL) | ||
1574 | return 0; | ||
1575 | |||
1576 | if (tcon->tidStatus == CifsExiting) { | ||
1577 | @@ -1006,7 +1006,12 @@ SMB2_sess_alloc_buffer(struct SMB2_sess_data *sess_data) | ||
1578 | else | ||
1579 | req->SecurityMode = 0; | ||
1580 | |||
1581 | +#ifdef CONFIG_CIFS_DFS_UPCALL | ||
1582 | + req->Capabilities = cpu_to_le32(SMB2_GLOBAL_CAP_DFS); | ||
1583 | +#else | ||
1584 | req->Capabilities = 0; | ||
1585 | +#endif /* DFS_UPCALL */ | ||
1586 | + | ||
1587 | req->Channel = 0; /* MBZ */ | ||
1588 | |||
1589 | sess_data->iov[0].iov_base = (char *)req; | ||
1590 | diff --git a/fs/dax.c b/fs/dax.c | ||
1591 | index 75a289c31c7e..f0d932fa39c2 100644 | ||
1592 | --- a/fs/dax.c | ||
1593 | +++ b/fs/dax.c | ||
1594 | @@ -659,7 +659,7 @@ struct page *dax_layout_busy_page(struct address_space *mapping) | ||
1595 | * guaranteed to either see new references or prevent new | ||
1596 | * references from being established. | ||
1597 | */ | ||
1598 | - unmap_mapping_range(mapping, 0, 0, 1); | ||
1599 | + unmap_mapping_range(mapping, 0, 0, 0); | ||
1600 | |||
1601 | while (index < end && pagevec_lookup_entries(&pvec, mapping, index, | ||
1602 | min(end - index, (pgoff_t)PAGEVEC_SIZE), | ||
1603 | diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c | ||
1604 | index 7f8bb0868c0f..d14d71d8d7ee 100644 | ||
1605 | --- a/fs/gfs2/bmap.c | ||
1606 | +++ b/fs/gfs2/bmap.c | ||
1607 | @@ -392,6 +392,19 @@ static int fillup_metapath(struct gfs2_inode *ip, struct metapath *mp, int h) | ||
1608 | return mp->mp_aheight - x - 1; | ||
1609 | } | ||
1610 | |||
1611 | +static sector_t metapath_to_block(struct gfs2_sbd *sdp, struct metapath *mp) | ||
1612 | +{ | ||
1613 | + sector_t factor = 1, block = 0; | ||
1614 | + int hgt; | ||
1615 | + | ||
1616 | + for (hgt = mp->mp_fheight - 1; hgt >= 0; hgt--) { | ||
1617 | + if (hgt < mp->mp_aheight) | ||
1618 | + block += mp->mp_list[hgt] * factor; | ||
1619 | + factor *= sdp->sd_inptrs; | ||
1620 | + } | ||
1621 | + return block; | ||
1622 | +} | ||
1623 | + | ||
1624 | static void release_metapath(struct metapath *mp) | ||
1625 | { | ||
1626 | int i; | ||
1627 | @@ -432,60 +445,84 @@ static inline unsigned int gfs2_extent_length(struct buffer_head *bh, __be64 *pt | ||
1628 | return ptr - first; | ||
1629 | } | ||
1630 | |||
1631 | -typedef const __be64 *(*gfs2_metadata_walker)( | ||
1632 | - struct metapath *mp, | ||
1633 | - const __be64 *start, const __be64 *end, | ||
1634 | - u64 factor, void *data); | ||
1635 | +enum walker_status { WALK_STOP, WALK_FOLLOW, WALK_CONTINUE }; | ||
1636 | |||
1637 | -#define WALK_STOP ((__be64 *)0) | ||
1638 | -#define WALK_NEXT ((__be64 *)1) | ||
1639 | +/* | ||
1640 | + * gfs2_metadata_walker - walk an indirect block | ||
1641 | + * @mp: Metapath to indirect block | ||
1642 | + * @ptrs: Number of pointers to look at | ||
1643 | + * | ||
1644 | + * When returning WALK_FOLLOW, the walker must update @mp to point at the right | ||
1645 | + * indirect block to follow. | ||
1646 | + */ | ||
1647 | +typedef enum walker_status (*gfs2_metadata_walker)(struct metapath *mp, | ||
1648 | + unsigned int ptrs); | ||
1649 | + | ||
1650 | +/* | ||
1651 | + * gfs2_walk_metadata - walk a tree of indirect blocks | ||
1652 | + * @inode: The inode | ||
1653 | + * @mp: Starting point of walk | ||
1654 | + * @max_len: Maximum number of blocks to walk | ||
1655 | + * @walker: Called during the walk | ||
1656 | + * | ||
1657 | + * Returns 1 if the walk was stopped by @walker, 0 if we went past @max_len or | ||
1658 | + * past the end of metadata, and a negative error code otherwise. | ||
1659 | + */ | ||
1660 | |||
1661 | -static int gfs2_walk_metadata(struct inode *inode, sector_t lblock, | ||
1662 | - u64 len, struct metapath *mp, gfs2_metadata_walker walker, | ||
1663 | - void *data) | ||
1664 | +static int gfs2_walk_metadata(struct inode *inode, struct metapath *mp, | ||
1665 | + u64 max_len, gfs2_metadata_walker walker) | ||
1666 | { | ||
1667 | - struct metapath clone; | ||
1668 | struct gfs2_inode *ip = GFS2_I(inode); | ||
1669 | struct gfs2_sbd *sdp = GFS2_SB(inode); | ||
1670 | - const __be64 *start, *end, *ptr; | ||
1671 | u64 factor = 1; | ||
1672 | unsigned int hgt; | ||
1673 | - int ret = 0; | ||
1674 | + int ret; | ||
1675 | |||
1676 | - for (hgt = ip->i_height - 1; hgt >= mp->mp_aheight; hgt--) | ||
1677 | + /* | ||
1678 | + * The walk starts in the lowest allocated indirect block, which may be | ||
1679 | + * before the position indicated by @mp. Adjust @max_len accordingly | ||
1680 | + * to avoid a short walk. | ||
1681 | + */ | ||
1682 | + for (hgt = mp->mp_fheight - 1; hgt >= mp->mp_aheight; hgt--) { | ||
1683 | + max_len += mp->mp_list[hgt] * factor; | ||
1684 | + mp->mp_list[hgt] = 0; | ||
1685 | factor *= sdp->sd_inptrs; | ||
1686 | + } | ||
1687 | |||
1688 | for (;;) { | ||
1689 | - u64 step; | ||
1690 | + u16 start = mp->mp_list[hgt]; | ||
1691 | + enum walker_status status; | ||
1692 | + unsigned int ptrs; | ||
1693 | + u64 len; | ||
1694 | |||
1695 | /* Walk indirect block. */ | ||
1696 | - start = metapointer(hgt, mp); | ||
1697 | - end = metaend(hgt, mp); | ||
1698 | - | ||
1699 | - step = (end - start) * factor; | ||
1700 | - if (step > len) | ||
1701 | - end = start + DIV_ROUND_UP_ULL(len, factor); | ||
1702 | - | ||
1703 | - ptr = walker(mp, start, end, factor, data); | ||
1704 | - if (ptr == WALK_STOP) | ||
1705 | + ptrs = (hgt >= 1 ? sdp->sd_inptrs : sdp->sd_diptrs) - start; | ||
1706 | + len = ptrs * factor; | ||
1707 | + if (len > max_len) | ||
1708 | + ptrs = DIV_ROUND_UP_ULL(max_len, factor); | ||
1709 | + status = walker(mp, ptrs); | ||
1710 | + switch (status) { | ||
1711 | + case WALK_STOP: | ||
1712 | + return 1; | ||
1713 | + case WALK_FOLLOW: | ||
1714 | + BUG_ON(mp->mp_aheight == mp->mp_fheight); | ||
1715 | + ptrs = mp->mp_list[hgt] - start; | ||
1716 | + len = ptrs * factor; | ||
1717 | break; | ||
1718 | - if (step >= len) | ||
1719 | + case WALK_CONTINUE: | ||
1720 | break; | ||
1721 | - len -= step; | ||
1722 | - if (ptr != WALK_NEXT) { | ||
1723 | - BUG_ON(!*ptr); | ||
1724 | - mp->mp_list[hgt] += ptr - start; | ||
1725 | - goto fill_up_metapath; | ||
1726 | } | ||
1727 | + if (len >= max_len) | ||
1728 | + break; | ||
1729 | + max_len -= len; | ||
1730 | + if (status == WALK_FOLLOW) | ||
1731 | + goto fill_up_metapath; | ||
1732 | |||
1733 | lower_metapath: | ||
1734 | /* Decrease height of metapath. */ | ||
1735 | - if (mp != &clone) { | ||
1736 | - clone_metapath(&clone, mp); | ||
1737 | - mp = &clone; | ||
1738 | - } | ||
1739 | brelse(mp->mp_bh[hgt]); | ||
1740 | mp->mp_bh[hgt] = NULL; | ||
1741 | + mp->mp_list[hgt] = 0; | ||
1742 | if (!hgt) | ||
1743 | break; | ||
1744 | hgt--; | ||
1745 | @@ -493,10 +530,7 @@ lower_metapath: | ||
1746 | |||
1747 | /* Advance in metadata tree. */ | ||
1748 | (mp->mp_list[hgt])++; | ||
1749 | - start = metapointer(hgt, mp); | ||
1750 | - end = metaend(hgt, mp); | ||
1751 | - if (start >= end) { | ||
1752 | - mp->mp_list[hgt] = 0; | ||
1753 | + if (mp->mp_list[hgt] >= sdp->sd_inptrs) { | ||
1754 | if (!hgt) | ||
1755 | break; | ||
1756 | goto lower_metapath; | ||
1757 | @@ -504,44 +538,36 @@ lower_metapath: | ||
1758 | |||
1759 | fill_up_metapath: | ||
1760 | /* Increase height of metapath. */ | ||
1761 | - if (mp != &clone) { | ||
1762 | - clone_metapath(&clone, mp); | ||
1763 | - mp = &clone; | ||
1764 | - } | ||
1765 | ret = fillup_metapath(ip, mp, ip->i_height - 1); | ||
1766 | if (ret < 0) | ||
1767 | - break; | ||
1768 | + return ret; | ||
1769 | hgt += ret; | ||
1770 | for (; ret; ret--) | ||
1771 | do_div(factor, sdp->sd_inptrs); | ||
1772 | mp->mp_aheight = hgt + 1; | ||
1773 | } | ||
1774 | - if (mp == &clone) | ||
1775 | - release_metapath(mp); | ||
1776 | - return ret; | ||
1777 | + return 0; | ||
1778 | } | ||
1779 | |||
1780 | -struct gfs2_hole_walker_args { | ||
1781 | - u64 blocks; | ||
1782 | -}; | ||
1783 | - | ||
1784 | -static const __be64 *gfs2_hole_walker(struct metapath *mp, | ||
1785 | - const __be64 *start, const __be64 *end, | ||
1786 | - u64 factor, void *data) | ||
1787 | +static enum walker_status gfs2_hole_walker(struct metapath *mp, | ||
1788 | + unsigned int ptrs) | ||
1789 | { | ||
1790 | - struct gfs2_hole_walker_args *args = data; | ||
1791 | - const __be64 *ptr; | ||
1792 | + const __be64 *start, *ptr, *end; | ||
1793 | + unsigned int hgt; | ||
1794 | + | ||
1795 | + hgt = mp->mp_aheight - 1; | ||
1796 | + start = metapointer(hgt, mp); | ||
1797 | + end = start + ptrs; | ||
1798 | |||
1799 | for (ptr = start; ptr < end; ptr++) { | ||
1800 | if (*ptr) { | ||
1801 | - args->blocks += (ptr - start) * factor; | ||
1802 | + mp->mp_list[hgt] += ptr - start; | ||
1803 | if (mp->mp_aheight == mp->mp_fheight) | ||
1804 | return WALK_STOP; | ||
1805 | - return ptr; /* increase height */ | ||
1806 | + return WALK_FOLLOW; | ||
1807 | } | ||
1808 | } | ||
1809 | - args->blocks += (end - start) * factor; | ||
1810 | - return WALK_NEXT; | ||
1811 | + return WALK_CONTINUE; | ||
1812 | } | ||
1813 | |||
1814 | /** | ||
1815 | @@ -559,12 +585,24 @@ static const __be64 *gfs2_hole_walker(struct metapath *mp, | ||
1816 | static int gfs2_hole_size(struct inode *inode, sector_t lblock, u64 len, | ||
1817 | struct metapath *mp, struct iomap *iomap) | ||
1818 | { | ||
1819 | - struct gfs2_hole_walker_args args = { }; | ||
1820 | - int ret = 0; | ||
1821 | + struct metapath clone; | ||
1822 | + u64 hole_size; | ||
1823 | + int ret; | ||
1824 | |||
1825 | - ret = gfs2_walk_metadata(inode, lblock, len, mp, gfs2_hole_walker, &args); | ||
1826 | - if (!ret) | ||
1827 | - iomap->length = args.blocks << inode->i_blkbits; | ||
1828 | + clone_metapath(&clone, mp); | ||
1829 | + ret = gfs2_walk_metadata(inode, &clone, len, gfs2_hole_walker); | ||
1830 | + if (ret < 0) | ||
1831 | + goto out; | ||
1832 | + | ||
1833 | + if (ret == 1) | ||
1834 | + hole_size = metapath_to_block(GFS2_SB(inode), &clone) - lblock; | ||
1835 | + else | ||
1836 | + hole_size = len; | ||
1837 | + iomap->length = hole_size << inode->i_blkbits; | ||
1838 | + ret = 0; | ||
1839 | + | ||
1840 | +out: | ||
1841 | + release_metapath(&clone); | ||
1842 | return ret; | ||
1843 | } | ||
1844 | |||
1845 | diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c | ||
1846 | index 904e08bbb289..31ae3bd5d9d2 100644 | ||
1847 | --- a/fs/nfs/nfs4proc.c | ||
1848 | +++ b/fs/nfs/nfs4proc.c | ||
1849 | @@ -3133,7 +3133,7 @@ static int _nfs4_do_setattr(struct inode *inode, | ||
1850 | |||
1851 | if (nfs4_copy_delegation_stateid(inode, FMODE_WRITE, &arg->stateid, &delegation_cred)) { | ||
1852 | /* Use that stateid */ | ||
1853 | - } else if (ctx != NULL) { | ||
1854 | + } else if (ctx != NULL && ctx->state) { | ||
1855 | struct nfs_lock_context *l_ctx; | ||
1856 | if (!nfs4_valid_open_stateid(ctx->state)) | ||
1857 | return -EBADF; | ||
1858 | diff --git a/include/linux/ccp.h b/include/linux/ccp.h | ||
1859 | index 7e9c991c95e0..43ed9e77cf81 100644 | ||
1860 | --- a/include/linux/ccp.h | ||
1861 | +++ b/include/linux/ccp.h | ||
1862 | @@ -173,6 +173,8 @@ struct ccp_aes_engine { | ||
1863 | enum ccp_aes_mode mode; | ||
1864 | enum ccp_aes_action action; | ||
1865 | |||
1866 | + u32 authsize; | ||
1867 | + | ||
1868 | struct scatterlist *key; | ||
1869 | u32 key_len; /* In bytes */ | ||
1870 | |||
1871 | diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h | ||
1872 | index 30efb3663892..d42a36e4e6c2 100644 | ||
1873 | --- a/include/linux/kvm_host.h | ||
1874 | +++ b/include/linux/kvm_host.h | ||
1875 | @@ -818,6 +818,7 @@ void kvm_arch_check_processor_compat(void *rtn); | ||
1876 | int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); | ||
1877 | bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu); | ||
1878 | int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu); | ||
1879 | +bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu); | ||
1880 | |||
1881 | #ifndef __KVM_HAVE_ARCH_VM_ALLOC | ||
1882 | /* | ||
1883 | diff --git a/include/sound/compress_driver.h b/include/sound/compress_driver.h | ||
1884 | index e87f2d5b3cc6..127c2713b543 100644 | ||
1885 | --- a/include/sound/compress_driver.h | ||
1886 | +++ b/include/sound/compress_driver.h | ||
1887 | @@ -171,10 +171,7 @@ static inline void snd_compr_drain_notify(struct snd_compr_stream *stream) | ||
1888 | if (snd_BUG_ON(!stream)) | ||
1889 | return; | ||
1890 | |||
1891 | - if (stream->direction == SND_COMPRESS_PLAYBACK) | ||
1892 | - stream->runtime->state = SNDRV_PCM_STATE_SETUP; | ||
1893 | - else | ||
1894 | - stream->runtime->state = SNDRV_PCM_STATE_PREPARED; | ||
1895 | + stream->runtime->state = SNDRV_PCM_STATE_SETUP; | ||
1896 | |||
1897 | wake_up(&stream->runtime->sleep); | ||
1898 | } | ||
1899 | diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h | ||
1900 | index 7acc16f34942..fa43dd5a7b3d 100644 | ||
1901 | --- a/include/uapi/linux/nl80211.h | ||
1902 | +++ b/include/uapi/linux/nl80211.h | ||
1903 | @@ -2732,7 +2732,7 @@ enum nl80211_attrs { | ||
1904 | #define NL80211_HT_CAPABILITY_LEN 26 | ||
1905 | #define NL80211_VHT_CAPABILITY_LEN 12 | ||
1906 | #define NL80211_HE_MIN_CAPABILITY_LEN 16 | ||
1907 | -#define NL80211_HE_MAX_CAPABILITY_LEN 51 | ||
1908 | +#define NL80211_HE_MAX_CAPABILITY_LEN 54 | ||
1909 | #define NL80211_MAX_NR_CIPHER_SUITES 5 | ||
1910 | #define NL80211_MAX_NR_AKM_SUITES 2 | ||
1911 | |||
1912 | diff --git a/kernel/events/core.c b/kernel/events/core.c | ||
1913 | index e8979c72514b..7ca44b8523c8 100644 | ||
1914 | --- a/kernel/events/core.c | ||
1915 | +++ b/kernel/events/core.c | ||
1916 | @@ -10957,7 +10957,7 @@ perf_event_create_kernel_counter(struct perf_event_attr *attr, int cpu, | ||
1917 | goto err_unlock; | ||
1918 | } | ||
1919 | |||
1920 | - perf_install_in_context(ctx, event, cpu); | ||
1921 | + perf_install_in_context(ctx, event, event->cpu); | ||
1922 | perf_unpin_context(ctx); | ||
1923 | mutex_unlock(&ctx->mutex); | ||
1924 | |||
1925 | diff --git a/lib/test_firmware.c b/lib/test_firmware.c | ||
1926 | index fd48a15a0710..a74b1aae7461 100644 | ||
1927 | --- a/lib/test_firmware.c | ||
1928 | +++ b/lib/test_firmware.c | ||
1929 | @@ -894,8 +894,11 @@ static int __init test_firmware_init(void) | ||
1930 | return -ENOMEM; | ||
1931 | |||
1932 | rc = __test_firmware_config_init(); | ||
1933 | - if (rc) | ||
1934 | + if (rc) { | ||
1935 | + kfree(test_fw_config); | ||
1936 | + pr_err("could not init firmware test config: %d\n", rc); | ||
1937 | return rc; | ||
1938 | + } | ||
1939 | |||
1940 | rc = misc_register(&test_fw_misc_device); | ||
1941 | if (rc) { | ||
1942 | diff --git a/mm/vmalloc.c b/mm/vmalloc.c | ||
1943 | index a46ec261a44e..d8e877365f9f 100644 | ||
1944 | --- a/mm/vmalloc.c | ||
1945 | +++ b/mm/vmalloc.c | ||
1946 | @@ -1751,6 +1751,12 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align, | ||
1947 | if (!addr) | ||
1948 | return NULL; | ||
1949 | |||
1950 | + /* | ||
1951 | + * First make sure the mappings are removed from all page-tables | ||
1952 | + * before they are freed. | ||
1953 | + */ | ||
1954 | + vmalloc_sync_all(); | ||
1955 | + | ||
1956 | /* | ||
1957 | * In this function, newly allocated vm_struct has VM_UNINITIALIZED | ||
1958 | * flag. It means that vm_struct is not fully initialized. | ||
1959 | @@ -2296,6 +2302,9 @@ EXPORT_SYMBOL(remap_vmalloc_range); | ||
1960 | /* | ||
1961 | * Implement a stub for vmalloc_sync_all() if the architecture chose not to | ||
1962 | * have one. | ||
1963 | + * | ||
1964 | + * The purpose of this function is to make sure the vmalloc area | ||
1965 | + * mappings are identical in all page-tables in the system. | ||
1966 | */ | ||
1967 | void __weak vmalloc_sync_all(void) | ||
1968 | { | ||
1969 | diff --git a/net/ipv4/netfilter/ipt_rpfilter.c b/net/ipv4/netfilter/ipt_rpfilter.c | ||
1970 | index 12843c9ef142..74b19a5c572e 100644 | ||
1971 | --- a/net/ipv4/netfilter/ipt_rpfilter.c | ||
1972 | +++ b/net/ipv4/netfilter/ipt_rpfilter.c | ||
1973 | @@ -96,6 +96,7 @@ static bool rpfilter_mt(const struct sk_buff *skb, struct xt_action_param *par) | ||
1974 | flow.flowi4_mark = info->flags & XT_RPFILTER_VALID_MARK ? skb->mark : 0; | ||
1975 | flow.flowi4_tos = RT_TOS(iph->tos); | ||
1976 | flow.flowi4_scope = RT_SCOPE_UNIVERSE; | ||
1977 | + flow.flowi4_oif = l3mdev_master_ifindex_rcu(xt_in(par)); | ||
1978 | |||
1979 | return rpfilter_lookup_reverse(xt_net(par), &flow, xt_in(par), info->flags) ^ invert; | ||
1980 | } | ||
1981 | diff --git a/net/ipv6/netfilter/ip6t_rpfilter.c b/net/ipv6/netfilter/ip6t_rpfilter.c | ||
1982 | index c3c6b09acdc4..0f3407f2851e 100644 | ||
1983 | --- a/net/ipv6/netfilter/ip6t_rpfilter.c | ||
1984 | +++ b/net/ipv6/netfilter/ip6t_rpfilter.c | ||
1985 | @@ -58,7 +58,9 @@ static bool rpfilter_lookup_reverse6(struct net *net, const struct sk_buff *skb, | ||
1986 | if (rpfilter_addr_linklocal(&iph->saddr)) { | ||
1987 | lookup_flags |= RT6_LOOKUP_F_IFACE; | ||
1988 | fl6.flowi6_oif = dev->ifindex; | ||
1989 | - } else if ((flags & XT_RPFILTER_LOOSE) == 0) | ||
1990 | + /* Set flowi6_oif for vrf devices to lookup route in l3mdev domain. */ | ||
1991 | + } else if (netif_is_l3_master(dev) || netif_is_l3_slave(dev) || | ||
1992 | + (flags & XT_RPFILTER_LOOSE) == 0) | ||
1993 | fl6.flowi6_oif = dev->ifindex; | ||
1994 | |||
1995 | rt = (void *)ip6_route_lookup(net, &fl6, skb, lookup_flags); | ||
1996 | @@ -73,7 +75,9 @@ static bool rpfilter_lookup_reverse6(struct net *net, const struct sk_buff *skb, | ||
1997 | goto out; | ||
1998 | } | ||
1999 | |||
2000 | - if (rt->rt6i_idev->dev == dev || (flags & XT_RPFILTER_LOOSE)) | ||
2001 | + if (rt->rt6i_idev->dev == dev || | ||
2002 | + l3mdev_master_ifindex_rcu(rt->rt6i_idev->dev) == dev->ifindex || | ||
2003 | + (flags & XT_RPFILTER_LOOSE)) | ||
2004 | ret = true; | ||
2005 | out: | ||
2006 | ip6_rt_put(rt); | ||
2007 | diff --git a/net/mac80211/driver-ops.c b/net/mac80211/driver-ops.c | ||
2008 | index bb886e7db47f..f783d1377d9a 100644 | ||
2009 | --- a/net/mac80211/driver-ops.c | ||
2010 | +++ b/net/mac80211/driver-ops.c | ||
2011 | @@ -169,11 +169,16 @@ int drv_conf_tx(struct ieee80211_local *local, | ||
2012 | if (!check_sdata_in_driver(sdata)) | ||
2013 | return -EIO; | ||
2014 | |||
2015 | - if (WARN_ONCE(params->cw_min == 0 || | ||
2016 | - params->cw_min > params->cw_max, | ||
2017 | - "%s: invalid CW_min/CW_max: %d/%d\n", | ||
2018 | - sdata->name, params->cw_min, params->cw_max)) | ||
2019 | + if (params->cw_min == 0 || params->cw_min > params->cw_max) { | ||
2020 | + /* | ||
2021 | + * If we can't configure hardware anyway, don't warn. We may | ||
2022 | + * never have initialized the CW parameters. | ||
2023 | + */ | ||
2024 | + WARN_ONCE(local->ops->conf_tx, | ||
2025 | + "%s: invalid CW_min/CW_max: %d/%d\n", | ||
2026 | + sdata->name, params->cw_min, params->cw_max); | ||
2027 | return -EINVAL; | ||
2028 | + } | ||
2029 | |||
2030 | trace_drv_conf_tx(local, sdata, ac, params); | ||
2031 | if (local->ops->conf_tx) | ||
2032 | diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c | ||
2033 | index 1aaa73fa308e..b5c06242a92e 100644 | ||
2034 | --- a/net/mac80211/mlme.c | ||
2035 | +++ b/net/mac80211/mlme.c | ||
2036 | @@ -1967,6 +1967,16 @@ ieee80211_sta_wmm_params(struct ieee80211_local *local, | ||
2037 | ieee80211_regulatory_limit_wmm_params(sdata, ¶ms[ac], ac); | ||
2038 | } | ||
2039 | |||
2040 | + /* WMM specification requires all 4 ACIs. */ | ||
2041 | + for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) { | ||
2042 | + if (params[ac].cw_min == 0) { | ||
2043 | + sdata_info(sdata, | ||
2044 | + "AP has invalid WMM params (missing AC %d), using defaults\n", | ||
2045 | + ac); | ||
2046 | + return false; | ||
2047 | + } | ||
2048 | + } | ||
2049 | + | ||
2050 | for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) { | ||
2051 | mlme_dbg(sdata, | ||
2052 | "WMM AC=%d acm=%d aifs=%d cWmin=%d cWmax=%d txop=%d uapsd=%d, downgraded=%d\n", | ||
2053 | diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c | ||
2054 | index 842f3f86fb2e..7011ab27c437 100644 | ||
2055 | --- a/net/netfilter/nf_conntrack_proto_tcp.c | ||
2056 | +++ b/net/netfilter/nf_conntrack_proto_tcp.c | ||
2057 | @@ -480,6 +480,7 @@ static bool tcp_in_window(const struct nf_conn *ct, | ||
2058 | struct ip_ct_tcp_state *receiver = &state->seen[!dir]; | ||
2059 | const struct nf_conntrack_tuple *tuple = &ct->tuplehash[dir].tuple; | ||
2060 | __u32 seq, ack, sack, end, win, swin; | ||
2061 | + u16 win_raw; | ||
2062 | s32 receiver_offset; | ||
2063 | bool res, in_recv_win; | ||
2064 | |||
2065 | @@ -488,7 +489,8 @@ static bool tcp_in_window(const struct nf_conn *ct, | ||
2066 | */ | ||
2067 | seq = ntohl(tcph->seq); | ||
2068 | ack = sack = ntohl(tcph->ack_seq); | ||
2069 | - win = ntohs(tcph->window); | ||
2070 | + win_raw = ntohs(tcph->window); | ||
2071 | + win = win_raw; | ||
2072 | end = segment_seq_plus_len(seq, skb->len, dataoff, tcph); | ||
2073 | |||
2074 | if (receiver->flags & IP_CT_TCP_FLAG_SACK_PERM) | ||
2075 | @@ -663,14 +665,14 @@ static bool tcp_in_window(const struct nf_conn *ct, | ||
2076 | && state->last_seq == seq | ||
2077 | && state->last_ack == ack | ||
2078 | && state->last_end == end | ||
2079 | - && state->last_win == win) | ||
2080 | + && state->last_win == win_raw) | ||
2081 | state->retrans++; | ||
2082 | else { | ||
2083 | state->last_dir = dir; | ||
2084 | state->last_seq = seq; | ||
2085 | state->last_ack = ack; | ||
2086 | state->last_end = end; | ||
2087 | - state->last_win = win; | ||
2088 | + state->last_win = win_raw; | ||
2089 | state->retrans = 0; | ||
2090 | } | ||
2091 | } | ||
2092 | diff --git a/net/netfilter/nfnetlink.c b/net/netfilter/nfnetlink.c | ||
2093 | index 916913454624..7f2c1915763f 100644 | ||
2094 | --- a/net/netfilter/nfnetlink.c | ||
2095 | +++ b/net/netfilter/nfnetlink.c | ||
2096 | @@ -575,7 +575,7 @@ static int nfnetlink_bind(struct net *net, int group) | ||
2097 | ss = nfnetlink_get_subsys(type << 8); | ||
2098 | rcu_read_unlock(); | ||
2099 | if (!ss) | ||
2100 | - request_module("nfnetlink-subsys-%d", type); | ||
2101 | + request_module_nowait("nfnetlink-subsys-%d", type); | ||
2102 | return 0; | ||
2103 | } | ||
2104 | #endif | ||
2105 | diff --git a/net/netfilter/nft_hash.c b/net/netfilter/nft_hash.c | ||
2106 | index c2d237144f74..b8f23f75aea6 100644 | ||
2107 | --- a/net/netfilter/nft_hash.c | ||
2108 | +++ b/net/netfilter/nft_hash.c | ||
2109 | @@ -196,7 +196,7 @@ static int nft_symhash_init(const struct nft_ctx *ctx, | ||
2110 | priv->dreg = nft_parse_register(tb[NFTA_HASH_DREG]); | ||
2111 | |||
2112 | priv->modulus = ntohl(nla_get_be32(tb[NFTA_HASH_MODULUS])); | ||
2113 | - if (priv->modulus <= 1) | ||
2114 | + if (priv->modulus < 1) | ||
2115 | return -ERANGE; | ||
2116 | |||
2117 | if (priv->offset + priv->modulus - 1 < priv->offset) | ||
2118 | diff --git a/scripts/sphinx-pre-install b/scripts/sphinx-pre-install | ||
2119 | index 067459760a7b..3524dbc31316 100755 | ||
2120 | --- a/scripts/sphinx-pre-install | ||
2121 | +++ b/scripts/sphinx-pre-install | ||
2122 | @@ -301,7 +301,7 @@ sub give_redhat_hints() | ||
2123 | # | ||
2124 | # Checks valid for RHEL/CentOS version 7.x. | ||
2125 | # | ||
2126 | - if (! $system_release =~ /Fedora/) { | ||
2127 | + if (!($system_release =~ /Fedora/)) { | ||
2128 | $map{"virtualenv"} = "python-virtualenv"; | ||
2129 | } | ||
2130 | |||
2131 | diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c | ||
2132 | index 8b78ddffa509..516ec3587325 100644 | ||
2133 | --- a/sound/core/compress_offload.c | ||
2134 | +++ b/sound/core/compress_offload.c | ||
2135 | @@ -575,10 +575,7 @@ snd_compr_set_params(struct snd_compr_stream *stream, unsigned long arg) | ||
2136 | stream->metadata_set = false; | ||
2137 | stream->next_track = false; | ||
2138 | |||
2139 | - if (stream->direction == SND_COMPRESS_PLAYBACK) | ||
2140 | - stream->runtime->state = SNDRV_PCM_STATE_SETUP; | ||
2141 | - else | ||
2142 | - stream->runtime->state = SNDRV_PCM_STATE_PREPARED; | ||
2143 | + stream->runtime->state = SNDRV_PCM_STATE_SETUP; | ||
2144 | } else { | ||
2145 | return -EPERM; | ||
2146 | } | ||
2147 | @@ -694,8 +691,17 @@ static int snd_compr_start(struct snd_compr_stream *stream) | ||
2148 | { | ||
2149 | int retval; | ||
2150 | |||
2151 | - if (stream->runtime->state != SNDRV_PCM_STATE_PREPARED) | ||
2152 | + switch (stream->runtime->state) { | ||
2153 | + case SNDRV_PCM_STATE_SETUP: | ||
2154 | + if (stream->direction != SND_COMPRESS_CAPTURE) | ||
2155 | + return -EPERM; | ||
2156 | + break; | ||
2157 | + case SNDRV_PCM_STATE_PREPARED: | ||
2158 | + break; | ||
2159 | + default: | ||
2160 | return -EPERM; | ||
2161 | + } | ||
2162 | + | ||
2163 | retval = stream->ops->trigger(stream, SNDRV_PCM_TRIGGER_START); | ||
2164 | if (!retval) | ||
2165 | stream->runtime->state = SNDRV_PCM_STATE_RUNNING; | ||
2166 | @@ -706,9 +712,15 @@ static int snd_compr_stop(struct snd_compr_stream *stream) | ||
2167 | { | ||
2168 | int retval; | ||
2169 | |||
2170 | - if (stream->runtime->state == SNDRV_PCM_STATE_PREPARED || | ||
2171 | - stream->runtime->state == SNDRV_PCM_STATE_SETUP) | ||
2172 | + switch (stream->runtime->state) { | ||
2173 | + case SNDRV_PCM_STATE_OPEN: | ||
2174 | + case SNDRV_PCM_STATE_SETUP: | ||
2175 | + case SNDRV_PCM_STATE_PREPARED: | ||
2176 | return -EPERM; | ||
2177 | + default: | ||
2178 | + break; | ||
2179 | + } | ||
2180 | + | ||
2181 | retval = stream->ops->trigger(stream, SNDRV_PCM_TRIGGER_STOP); | ||
2182 | if (!retval) { | ||
2183 | snd_compr_drain_notify(stream); | ||
2184 | @@ -796,9 +808,17 @@ static int snd_compr_drain(struct snd_compr_stream *stream) | ||
2185 | { | ||
2186 | int retval; | ||
2187 | |||
2188 | - if (stream->runtime->state == SNDRV_PCM_STATE_PREPARED || | ||
2189 | - stream->runtime->state == SNDRV_PCM_STATE_SETUP) | ||
2190 | + switch (stream->runtime->state) { | ||
2191 | + case SNDRV_PCM_STATE_OPEN: | ||
2192 | + case SNDRV_PCM_STATE_SETUP: | ||
2193 | + case SNDRV_PCM_STATE_PREPARED: | ||
2194 | + case SNDRV_PCM_STATE_PAUSED: | ||
2195 | return -EPERM; | ||
2196 | + case SNDRV_PCM_STATE_XRUN: | ||
2197 | + return -EPIPE; | ||
2198 | + default: | ||
2199 | + break; | ||
2200 | + } | ||
2201 | |||
2202 | retval = stream->ops->trigger(stream, SND_COMPR_TRIGGER_DRAIN); | ||
2203 | if (retval) { | ||
2204 | @@ -818,6 +838,10 @@ static int snd_compr_next_track(struct snd_compr_stream *stream) | ||
2205 | if (stream->runtime->state != SNDRV_PCM_STATE_RUNNING) | ||
2206 | return -EPERM; | ||
2207 | |||
2208 | + /* next track doesn't have any meaning for capture streams */ | ||
2209 | + if (stream->direction == SND_COMPRESS_CAPTURE) | ||
2210 | + return -EPERM; | ||
2211 | + | ||
2212 | /* you can signal next track if this is intended to be a gapless stream | ||
2213 | * and current track metadata is set | ||
2214 | */ | ||
2215 | @@ -835,9 +859,23 @@ static int snd_compr_next_track(struct snd_compr_stream *stream) | ||
2216 | static int snd_compr_partial_drain(struct snd_compr_stream *stream) | ||
2217 | { | ||
2218 | int retval; | ||
2219 | - if (stream->runtime->state == SNDRV_PCM_STATE_PREPARED || | ||
2220 | - stream->runtime->state == SNDRV_PCM_STATE_SETUP) | ||
2221 | + | ||
2222 | + switch (stream->runtime->state) { | ||
2223 | + case SNDRV_PCM_STATE_OPEN: | ||
2224 | + case SNDRV_PCM_STATE_SETUP: | ||
2225 | + case SNDRV_PCM_STATE_PREPARED: | ||
2226 | + case SNDRV_PCM_STATE_PAUSED: | ||
2227 | + return -EPERM; | ||
2228 | + case SNDRV_PCM_STATE_XRUN: | ||
2229 | + return -EPIPE; | ||
2230 | + default: | ||
2231 | + break; | ||
2232 | + } | ||
2233 | + | ||
2234 | + /* partial drain doesn't have any meaning for capture streams */ | ||
2235 | + if (stream->direction == SND_COMPRESS_CAPTURE) | ||
2236 | return -EPERM; | ||
2237 | + | ||
2238 | /* stream can be drained only when next track has been signalled */ | ||
2239 | if (stream->next_track == false) | ||
2240 | return -EPERM; | ||
2241 | diff --git a/sound/firewire/packets-buffer.c b/sound/firewire/packets-buffer.c | ||
2242 | index 1ebf00c83409..715cd99f28de 100644 | ||
2243 | --- a/sound/firewire/packets-buffer.c | ||
2244 | +++ b/sound/firewire/packets-buffer.c | ||
2245 | @@ -37,7 +37,7 @@ int iso_packets_buffer_init(struct iso_packets_buffer *b, struct fw_unit *unit, | ||
2246 | packets_per_page = PAGE_SIZE / packet_size; | ||
2247 | if (WARN_ON(!packets_per_page)) { | ||
2248 | err = -EINVAL; | ||
2249 | - goto error; | ||
2250 | + goto err_packets; | ||
2251 | } | ||
2252 | pages = DIV_ROUND_UP(count, packets_per_page); | ||
2253 | |||
2254 | diff --git a/sound/pci/hda/hda_controller.c b/sound/pci/hda/hda_controller.c | ||
2255 | index a12e594d4e3b..a41c1bec7c88 100644 | ||
2256 | --- a/sound/pci/hda/hda_controller.c | ||
2257 | +++ b/sound/pci/hda/hda_controller.c | ||
2258 | @@ -609,11 +609,9 @@ static int azx_pcm_open(struct snd_pcm_substream *substream) | ||
2259 | } | ||
2260 | runtime->private_data = azx_dev; | ||
2261 | |||
2262 | - if (chip->gts_present) | ||
2263 | - azx_pcm_hw.info = azx_pcm_hw.info | | ||
2264 | - SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME; | ||
2265 | - | ||
2266 | runtime->hw = azx_pcm_hw; | ||
2267 | + if (chip->gts_present) | ||
2268 | + runtime->hw.info |= SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME; | ||
2269 | runtime->hw.channels_min = hinfo->channels_min; | ||
2270 | runtime->hw.channels_max = hinfo->channels_max; | ||
2271 | runtime->hw.formats = hinfo->formats; | ||
2272 | @@ -626,6 +624,13 @@ static int azx_pcm_open(struct snd_pcm_substream *substream) | ||
2273 | 20, | ||
2274 | 178000000); | ||
2275 | |||
2276 | + /* by some reason, the playback stream stalls on PulseAudio with | ||
2277 | + * tsched=1 when a capture stream triggers. Until we figure out the | ||
2278 | + * real cause, disable tsched mode by telling the PCM info flag. | ||
2279 | + */ | ||
2280 | + if (chip->driver_caps & AZX_DCAPS_AMD_WORKAROUND) | ||
2281 | + runtime->hw.info |= SNDRV_PCM_INFO_BATCH; | ||
2282 | + | ||
2283 | if (chip->align_buffer_size) | ||
2284 | /* constrain buffer sizes to be multiple of 128 | ||
2285 | bytes. This is more efficient in terms of memory | ||
2286 | diff --git a/sound/pci/hda/hda_controller.h b/sound/pci/hda/hda_controller.h | ||
2287 | index 53c3cd28bc99..8a9dd4767b1e 100644 | ||
2288 | --- a/sound/pci/hda/hda_controller.h | ||
2289 | +++ b/sound/pci/hda/hda_controller.h | ||
2290 | @@ -40,7 +40,7 @@ | ||
2291 | /* 14 unused */ | ||
2292 | #define AZX_DCAPS_CTX_WORKAROUND (1 << 15) /* X-Fi workaround */ | ||
2293 | #define AZX_DCAPS_POSFIX_LPIB (1 << 16) /* Use LPIB as default */ | ||
2294 | -/* 17 unused */ | ||
2295 | +#define AZX_DCAPS_AMD_WORKAROUND (1 << 17) /* AMD-specific workaround */ | ||
2296 | #define AZX_DCAPS_NO_64BIT (1 << 18) /* No 64bit address */ | ||
2297 | #define AZX_DCAPS_SYNC_WRITE (1 << 19) /* sync each cmd write */ | ||
2298 | #define AZX_DCAPS_OLD_SSYNC (1 << 20) /* Old SSYNC reg for ICH */ | ||
2299 | diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c | ||
2300 | index 308ce76149cc..81cea34aff1c 100644 | ||
2301 | --- a/sound/pci/hda/hda_intel.c | ||
2302 | +++ b/sound/pci/hda/hda_intel.c | ||
2303 | @@ -78,6 +78,7 @@ enum { | ||
2304 | POS_FIX_VIACOMBO, | ||
2305 | POS_FIX_COMBO, | ||
2306 | POS_FIX_SKL, | ||
2307 | + POS_FIX_FIFO, | ||
2308 | }; | ||
2309 | |||
2310 | /* Defines for ATI HD Audio support in SB450 south bridge */ | ||
2311 | @@ -149,7 +150,7 @@ module_param_array(model, charp, NULL, 0444); | ||
2312 | MODULE_PARM_DESC(model, "Use the given board model."); | ||
2313 | module_param_array(position_fix, int, NULL, 0444); | ||
2314 | MODULE_PARM_DESC(position_fix, "DMA pointer read method." | ||
2315 | - "(-1 = system default, 0 = auto, 1 = LPIB, 2 = POSBUF, 3 = VIACOMBO, 4 = COMBO, 5 = SKL+)."); | ||
2316 | + "(-1 = system default, 0 = auto, 1 = LPIB, 2 = POSBUF, 3 = VIACOMBO, 4 = COMBO, 5 = SKL+, 6 = FIFO)."); | ||
2317 | module_param_array(bdl_pos_adj, int, NULL, 0644); | ||
2318 | MODULE_PARM_DESC(bdl_pos_adj, "BDL position adjustment offset."); | ||
2319 | module_param_array(probe_mask, int, NULL, 0444); | ||
2320 | @@ -350,6 +351,11 @@ enum { | ||
2321 | #define AZX_DCAPS_PRESET_ATI_HDMI_NS \ | ||
2322 | (AZX_DCAPS_PRESET_ATI_HDMI | AZX_DCAPS_SNOOP_OFF) | ||
2323 | |||
2324 | +/* quirks for AMD SB */ | ||
2325 | +#define AZX_DCAPS_PRESET_AMD_SB \ | ||
2326 | + (AZX_DCAPS_NO_TCSEL | AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_AMD_WORKAROUND |\ | ||
2327 | + AZX_DCAPS_SNOOP_TYPE(ATI) | AZX_DCAPS_PM_RUNTIME) | ||
2328 | + | ||
2329 | /* quirks for Nvidia */ | ||
2330 | #define AZX_DCAPS_PRESET_NVIDIA \ | ||
2331 | (AZX_DCAPS_NO_MSI | AZX_DCAPS_CORBRP_SELF_CLEAR |\ | ||
2332 | @@ -920,6 +926,49 @@ static unsigned int azx_via_get_position(struct azx *chip, | ||
2333 | return bound_pos + mod_dma_pos; | ||
2334 | } | ||
2335 | |||
2336 | +#define AMD_FIFO_SIZE 32 | ||
2337 | + | ||
2338 | +/* get the current DMA position with FIFO size correction */ | ||
2339 | +static unsigned int azx_get_pos_fifo(struct azx *chip, struct azx_dev *azx_dev) | ||
2340 | +{ | ||
2341 | + struct snd_pcm_substream *substream = azx_dev->core.substream; | ||
2342 | + struct snd_pcm_runtime *runtime = substream->runtime; | ||
2343 | + unsigned int pos, delay; | ||
2344 | + | ||
2345 | + pos = snd_hdac_stream_get_pos_lpib(azx_stream(azx_dev)); | ||
2346 | + if (!runtime) | ||
2347 | + return pos; | ||
2348 | + | ||
2349 | + runtime->delay = AMD_FIFO_SIZE; | ||
2350 | + delay = frames_to_bytes(runtime, AMD_FIFO_SIZE); | ||
2351 | + if (azx_dev->insufficient) { | ||
2352 | + if (pos < delay) { | ||
2353 | + delay = pos; | ||
2354 | + runtime->delay = bytes_to_frames(runtime, pos); | ||
2355 | + } else { | ||
2356 | + azx_dev->insufficient = 0; | ||
2357 | + } | ||
2358 | + } | ||
2359 | + | ||
2360 | + /* correct the DMA position for capture stream */ | ||
2361 | + if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { | ||
2362 | + if (pos < delay) | ||
2363 | + pos += azx_dev->core.bufsize; | ||
2364 | + pos -= delay; | ||
2365 | + } | ||
2366 | + | ||
2367 | + return pos; | ||
2368 | +} | ||
2369 | + | ||
2370 | +static int azx_get_delay_from_fifo(struct azx *chip, struct azx_dev *azx_dev, | ||
2371 | + unsigned int pos) | ||
2372 | +{ | ||
2373 | + struct snd_pcm_substream *substream = azx_dev->core.substream; | ||
2374 | + | ||
2375 | + /* just read back the calculated value in the above */ | ||
2376 | + return substream->runtime->delay; | ||
2377 | +} | ||
2378 | + | ||
2379 | static unsigned int azx_skl_get_dpib_pos(struct azx *chip, | ||
2380 | struct azx_dev *azx_dev) | ||
2381 | { | ||
2382 | @@ -1528,6 +1577,7 @@ static int check_position_fix(struct azx *chip, int fix) | ||
2383 | case POS_FIX_VIACOMBO: | ||
2384 | case POS_FIX_COMBO: | ||
2385 | case POS_FIX_SKL: | ||
2386 | + case POS_FIX_FIFO: | ||
2387 | return fix; | ||
2388 | } | ||
2389 | |||
2390 | @@ -1544,6 +1594,10 @@ static int check_position_fix(struct azx *chip, int fix) | ||
2391 | dev_dbg(chip->card->dev, "Using VIACOMBO position fix\n"); | ||
2392 | return POS_FIX_VIACOMBO; | ||
2393 | } | ||
2394 | + if (chip->driver_caps & AZX_DCAPS_AMD_WORKAROUND) { | ||
2395 | + dev_dbg(chip->card->dev, "Using FIFO position fix\n"); | ||
2396 | + return POS_FIX_FIFO; | ||
2397 | + } | ||
2398 | if (chip->driver_caps & AZX_DCAPS_POSFIX_LPIB) { | ||
2399 | dev_dbg(chip->card->dev, "Using LPIB position fix\n"); | ||
2400 | return POS_FIX_LPIB; | ||
2401 | @@ -1564,6 +1618,7 @@ static void assign_position_fix(struct azx *chip, int fix) | ||
2402 | [POS_FIX_VIACOMBO] = azx_via_get_position, | ||
2403 | [POS_FIX_COMBO] = azx_get_pos_lpib, | ||
2404 | [POS_FIX_SKL] = azx_get_pos_skl, | ||
2405 | + [POS_FIX_FIFO] = azx_get_pos_fifo, | ||
2406 | }; | ||
2407 | |||
2408 | chip->get_position[0] = chip->get_position[1] = callbacks[fix]; | ||
2409 | @@ -1578,6 +1633,9 @@ static void assign_position_fix(struct azx *chip, int fix) | ||
2410 | azx_get_delay_from_lpib; | ||
2411 | } | ||
2412 | |||
2413 | + if (fix == POS_FIX_FIFO) | ||
2414 | + chip->get_delay[0] = chip->get_delay[1] = | ||
2415 | + azx_get_delay_from_fifo; | ||
2416 | } | ||
2417 | |||
2418 | /* | ||
2419 | @@ -2594,6 +2652,9 @@ static const struct pci_device_id azx_ids[] = { | ||
2420 | /* AMD Hudson */ | ||
2421 | { PCI_DEVICE(0x1022, 0x780d), | ||
2422 | .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB }, | ||
2423 | + /* AMD, X370 & co */ | ||
2424 | + { PCI_DEVICE(0x1022, 0x1457), | ||
2425 | + .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_AMD_SB }, | ||
2426 | /* AMD Stoney */ | ||
2427 | { PCI_DEVICE(0x1022, 0x157a), | ||
2428 | .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB | | ||
2429 | diff --git a/sound/sound_core.c b/sound/sound_core.c | ||
2430 | index 40ad000c2e3c..dd64c4b19f23 100644 | ||
2431 | --- a/sound/sound_core.c | ||
2432 | +++ b/sound/sound_core.c | ||
2433 | @@ -280,7 +280,8 @@ retry: | ||
2434 | goto retry; | ||
2435 | } | ||
2436 | spin_unlock(&sound_loader_lock); | ||
2437 | - return -EBUSY; | ||
2438 | + r = -EBUSY; | ||
2439 | + goto fail; | ||
2440 | } | ||
2441 | } | ||
2442 | |||
2443 | diff --git a/sound/usb/hiface/pcm.c b/sound/usb/hiface/pcm.c | ||
2444 | index e1fbb9cc9ea7..a197fc3b9ab0 100644 | ||
2445 | --- a/sound/usb/hiface/pcm.c | ||
2446 | +++ b/sound/usb/hiface/pcm.c | ||
2447 | @@ -604,14 +604,13 @@ int hiface_pcm_init(struct hiface_chip *chip, u8 extra_freq) | ||
2448 | ret = hiface_pcm_init_urb(&rt->out_urbs[i], chip, OUT_EP, | ||
2449 | hiface_pcm_out_urb_handler); | ||
2450 | if (ret < 0) | ||
2451 | - return ret; | ||
2452 | + goto error; | ||
2453 | } | ||
2454 | |||
2455 | ret = snd_pcm_new(chip->card, "USB-SPDIF Audio", 0, 1, 0, &pcm); | ||
2456 | if (ret < 0) { | ||
2457 | - kfree(rt); | ||
2458 | dev_err(&chip->dev->dev, "Cannot create pcm instance\n"); | ||
2459 | - return ret; | ||
2460 | + goto error; | ||
2461 | } | ||
2462 | |||
2463 | pcm->private_data = rt; | ||
2464 | @@ -624,4 +623,10 @@ int hiface_pcm_init(struct hiface_chip *chip, u8 extra_freq) | ||
2465 | |||
2466 | chip->pcm = rt; | ||
2467 | return 0; | ||
2468 | + | ||
2469 | +error: | ||
2470 | + for (i = 0; i < PCM_N_URBS; i++) | ||
2471 | + kfree(rt->out_urbs[i].buffer); | ||
2472 | + kfree(rt); | ||
2473 | + return ret; | ||
2474 | } | ||
2475 | diff --git a/sound/usb/stream.c b/sound/usb/stream.c | ||
2476 | index d9e3de495c16..bc582202bd10 100644 | ||
2477 | --- a/sound/usb/stream.c | ||
2478 | +++ b/sound/usb/stream.c | ||
2479 | @@ -1053,6 +1053,7 @@ found_clock: | ||
2480 | |||
2481 | pd = kzalloc(sizeof(*pd), GFP_KERNEL); | ||
2482 | if (!pd) { | ||
2483 | + kfree(fp->chmap); | ||
2484 | kfree(fp->rate_table); | ||
2485 | kfree(fp); | ||
2486 | return NULL; | ||
2487 | diff --git a/tools/perf/arch/s390/util/machine.c b/tools/perf/arch/s390/util/machine.c | ||
2488 | index a19690a17291..c8c86a0c9b79 100644 | ||
2489 | --- a/tools/perf/arch/s390/util/machine.c | ||
2490 | +++ b/tools/perf/arch/s390/util/machine.c | ||
2491 | @@ -6,8 +6,9 @@ | ||
2492 | #include "machine.h" | ||
2493 | #include "api/fs/fs.h" | ||
2494 | #include "debug.h" | ||
2495 | +#include "symbol.h" | ||
2496 | |||
2497 | -int arch__fix_module_text_start(u64 *start, const char *name) | ||
2498 | +int arch__fix_module_text_start(u64 *start, u64 *size, const char *name) | ||
2499 | { | ||
2500 | u64 m_start = *start; | ||
2501 | char path[PATH_MAX]; | ||
2502 | @@ -17,7 +18,35 @@ int arch__fix_module_text_start(u64 *start, const char *name) | ||
2503 | if (sysfs__read_ull(path, (unsigned long long *)start) < 0) { | ||
2504 | pr_debug2("Using module %s start:%#lx\n", path, m_start); | ||
2505 | *start = m_start; | ||
2506 | + } else { | ||
2507 | + /* Successful read of the modules segment text start address. | ||
2508 | + * Calculate difference between module start address | ||
2509 | + * in memory and module text segment start address. | ||
2510 | + * For example module load address is 0x3ff8011b000 | ||
2511 | + * (from /proc/modules) and module text segment start | ||
2512 | + * address is 0x3ff8011b870 (from file above). | ||
2513 | + * | ||
2514 | + * Adjust the module size and subtract the GOT table | ||
2515 | + * size located at the beginning of the module. | ||
2516 | + */ | ||
2517 | + *size -= (*start - m_start); | ||
2518 | } | ||
2519 | |||
2520 | return 0; | ||
2521 | } | ||
2522 | + | ||
2523 | +/* On s390 kernel text segment start is located at very low memory addresses, | ||
2524 | + * for example 0x10000. Modules are located at very high memory addresses, | ||
2525 | + * for example 0x3ff xxxx xxxx. The gap between end of kernel text segment | ||
2526 | + * and beginning of first module's text segment is very big. | ||
2527 | + * Therefore do not fill this gap and do not assign it to the kernel dso map. | ||
2528 | + */ | ||
2529 | +void arch__symbols__fixup_end(struct symbol *p, struct symbol *c) | ||
2530 | +{ | ||
2531 | + if (strchr(p->name, '[') == NULL && strchr(c->name, '[')) | ||
2532 | + /* Last kernel symbol mapped to end of page */ | ||
2533 | + p->end = roundup(p->end, page_size); | ||
2534 | + else | ||
2535 | + p->end = c->start; | ||
2536 | + pr_debug4("%s sym:%s end:%#lx\n", __func__, p->name, p->end); | ||
2537 | +} | ||
2538 | diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c | ||
2539 | index 99de91698de1..0bdb34fee9d8 100644 | ||
2540 | --- a/tools/perf/builtin-probe.c | ||
2541 | +++ b/tools/perf/builtin-probe.c | ||
2542 | @@ -711,6 +711,16 @@ __cmd_probe(int argc, const char **argv) | ||
2543 | |||
2544 | ret = perf_add_probe_events(params.events, params.nevents); | ||
2545 | if (ret < 0) { | ||
2546 | + | ||
2547 | + /* | ||
2548 | + * When perf_add_probe_events() fails it calls | ||
2549 | + * cleanup_perf_probe_events(pevs, npevs), i.e. | ||
2550 | + * cleanup_perf_probe_events(params.events, params.nevents), which | ||
2551 | + * will call clear_perf_probe_event(), so set nevents to zero | ||
2552 | + * to avoid cleanup_params() to call clear_perf_probe_event() again | ||
2553 | + * on the same pevs. | ||
2554 | + */ | ||
2555 | + params.nevents = 0; | ||
2556 | pr_err_with_code(" Error: Failed to add events.", ret); | ||
2557 | return ret; | ||
2558 | } | ||
2559 | diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c | ||
2560 | index 7f2e3b1c746c..a94bd6850a0b 100644 | ||
2561 | --- a/tools/perf/util/header.c | ||
2562 | +++ b/tools/perf/util/header.c | ||
2563 | @@ -3472,7 +3472,7 @@ int perf_event__process_feature(struct perf_tool *tool, | ||
2564 | return 0; | ||
2565 | |||
2566 | ff.buf = (void *)fe->data; | ||
2567 | - ff.size = event->header.size - sizeof(event->header); | ||
2568 | + ff.size = event->header.size - sizeof(*fe); | ||
2569 | ff.ph = &session->header; | ||
2570 | |||
2571 | if (feat_ops[feat].process(&ff, NULL)) | ||
2572 | diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c | ||
2573 | index 076718a7b3ea..003b70daf0bf 100644 | ||
2574 | --- a/tools/perf/util/machine.c | ||
2575 | +++ b/tools/perf/util/machine.c | ||
2576 | @@ -1295,6 +1295,7 @@ static int machine__set_modules_path(struct machine *machine) | ||
2577 | return map_groups__set_modules_path_dir(&machine->kmaps, modules_path, 0); | ||
2578 | } | ||
2579 | int __weak arch__fix_module_text_start(u64 *start __maybe_unused, | ||
2580 | + u64 *size __maybe_unused, | ||
2581 | const char *name __maybe_unused) | ||
2582 | { | ||
2583 | return 0; | ||
2584 | @@ -1306,7 +1307,7 @@ static int machine__create_module(void *arg, const char *name, u64 start, | ||
2585 | struct machine *machine = arg; | ||
2586 | struct map *map; | ||
2587 | |||
2588 | - if (arch__fix_module_text_start(&start, name) < 0) | ||
2589 | + if (arch__fix_module_text_start(&start, &size, name) < 0) | ||
2590 | return -1; | ||
2591 | |||
2592 | map = machine__findnew_module_map(machine, start, name); | ||
2593 | diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h | ||
2594 | index ebde3ea70225..6f3767808bd9 100644 | ||
2595 | --- a/tools/perf/util/machine.h | ||
2596 | +++ b/tools/perf/util/machine.h | ||
2597 | @@ -219,7 +219,7 @@ struct symbol *machine__find_kernel_symbol_by_name(struct machine *machine, | ||
2598 | |||
2599 | struct map *machine__findnew_module_map(struct machine *machine, u64 start, | ||
2600 | const char *filename); | ||
2601 | -int arch__fix_module_text_start(u64 *start, const char *name); | ||
2602 | +int arch__fix_module_text_start(u64 *start, u64 *size, const char *name); | ||
2603 | |||
2604 | int machine__load_kallsyms(struct machine *machine, const char *filename); | ||
2605 | |||
2606 | diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c | ||
2607 | index 0715f972a275..91404bacc3df 100644 | ||
2608 | --- a/tools/perf/util/symbol.c | ||
2609 | +++ b/tools/perf/util/symbol.c | ||
2610 | @@ -86,6 +86,11 @@ static int prefix_underscores_count(const char *str) | ||
2611 | return tail - str; | ||
2612 | } | ||
2613 | |||
2614 | +void __weak arch__symbols__fixup_end(struct symbol *p, struct symbol *c) | ||
2615 | +{ | ||
2616 | + p->end = c->start; | ||
2617 | +} | ||
2618 | + | ||
2619 | const char * __weak arch__normalize_symbol_name(const char *name) | ||
2620 | { | ||
2621 | return name; | ||
2622 | @@ -212,7 +217,7 @@ void symbols__fixup_end(struct rb_root *symbols) | ||
2623 | curr = rb_entry(nd, struct symbol, rb_node); | ||
2624 | |||
2625 | if (prev->end == prev->start && prev->end != curr->start) | ||
2626 | - prev->end = curr->start; | ||
2627 | + arch__symbols__fixup_end(prev, curr); | ||
2628 | } | ||
2629 | |||
2630 | /* Last entry */ | ||
2631 | diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h | ||
2632 | index f25fae4b5743..76ef2facd934 100644 | ||
2633 | --- a/tools/perf/util/symbol.h | ||
2634 | +++ b/tools/perf/util/symbol.h | ||
2635 | @@ -349,6 +349,7 @@ const char *arch__normalize_symbol_name(const char *name); | ||
2636 | #define SYMBOL_A 0 | ||
2637 | #define SYMBOL_B 1 | ||
2638 | |||
2639 | +void arch__symbols__fixup_end(struct symbol *p, struct symbol *c); | ||
2640 | int arch__compare_symbol_names(const char *namea, const char *nameb); | ||
2641 | int arch__compare_symbol_names_n(const char *namea, const char *nameb, | ||
2642 | unsigned int n); | ||
2643 | diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c | ||
2644 | index 56007a7e0b4d..2c146d0c217b 100644 | ||
2645 | --- a/tools/perf/util/thread.c | ||
2646 | +++ b/tools/perf/util/thread.c | ||
2647 | @@ -192,14 +192,24 @@ struct comm *thread__comm(const struct thread *thread) | ||
2648 | |||
2649 | struct comm *thread__exec_comm(const struct thread *thread) | ||
2650 | { | ||
2651 | - struct comm *comm, *last = NULL; | ||
2652 | + struct comm *comm, *last = NULL, *second_last = NULL; | ||
2653 | |||
2654 | list_for_each_entry(comm, &thread->comm_list, list) { | ||
2655 | if (comm->exec) | ||
2656 | return comm; | ||
2657 | + second_last = last; | ||
2658 | last = comm; | ||
2659 | } | ||
2660 | |||
2661 | + /* | ||
2662 | + * 'last' with no start time might be the parent's comm of a synthesized | ||
2663 | + * thread (created by processing a synthesized fork event). For a main | ||
2664 | + * thread, that is very probably wrong. Prefer a later comm to avoid | ||
2665 | + * that case. | ||
2666 | + */ | ||
2667 | + if (second_last && !last->start && thread->pid_ == thread->tid) | ||
2668 | + return second_last; | ||
2669 | + | ||
2670 | return last; | ||
2671 | } | ||
2672 | |||
2673 | diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c | ||
2674 | index 2b36a51afb57..4a584a575221 100644 | ||
2675 | --- a/virt/kvm/kvm_main.c | ||
2676 | +++ b/virt/kvm/kvm_main.c | ||
2677 | @@ -2317,6 +2317,29 @@ static bool kvm_vcpu_eligible_for_directed_yield(struct kvm_vcpu *vcpu) | ||
2678 | #endif | ||
2679 | } | ||
2680 | |||
2681 | +/* | ||
2682 | + * Unlike kvm_arch_vcpu_runnable, this function is called outside | ||
2683 | + * a vcpu_load/vcpu_put pair. However, for most architectures | ||
2684 | + * kvm_arch_vcpu_runnable does not require vcpu_load. | ||
2685 | + */ | ||
2686 | +bool __weak kvm_arch_dy_runnable(struct kvm_vcpu *vcpu) | ||
2687 | +{ | ||
2688 | + return kvm_arch_vcpu_runnable(vcpu); | ||
2689 | +} | ||
2690 | + | ||
2691 | +static bool vcpu_dy_runnable(struct kvm_vcpu *vcpu) | ||
2692 | +{ | ||
2693 | + if (kvm_arch_dy_runnable(vcpu)) | ||
2694 | + return true; | ||
2695 | + | ||
2696 | +#ifdef CONFIG_KVM_ASYNC_PF | ||
2697 | + if (!list_empty_careful(&vcpu->async_pf.done)) | ||
2698 | + return true; | ||
2699 | +#endif | ||
2700 | + | ||
2701 | + return false; | ||
2702 | +} | ||
2703 | + | ||
2704 | void kvm_vcpu_on_spin(struct kvm_vcpu *me, bool yield_to_kernel_mode) | ||
2705 | { | ||
2706 | struct kvm *kvm = me->kvm; | ||
2707 | @@ -2346,7 +2369,7 @@ void kvm_vcpu_on_spin(struct kvm_vcpu *me, bool yield_to_kernel_mode) | ||
2708 | continue; | ||
2709 | if (vcpu == me) | ||
2710 | continue; | ||
2711 | - if (swait_active(&vcpu->wq) && !kvm_arch_vcpu_runnable(vcpu)) | ||
2712 | + if (swait_active(&vcpu->wq) && !vcpu_dy_runnable(vcpu)) | ||
2713 | continue; | ||
2714 | if (yield_to_kernel_mode && !kvm_arch_vcpu_in_kernel(vcpu)) | ||
2715 | continue; |