Magellan Linux

Contents of /trunk/kernel-alx/patches-4.9/0190-4.9.91-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3167 - (show annotations) (download)
Wed Aug 8 14:17:23 2018 UTC (5 years, 8 months ago) by niro
File size: 75816 byte(s)
-linux-4.9.91
1 diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio
2 index fee35c00cc4e..0406076e4405 100644
3 --- a/Documentation/ABI/testing/sysfs-bus-iio
4 +++ b/Documentation/ABI/testing/sysfs-bus-iio
5 @@ -32,7 +32,7 @@ Description:
6 Description of the physical chip / device for device X.
7 Typically a part number.
8
9 -What: /sys/bus/iio/devices/iio:deviceX/timestamp_clock
10 +What: /sys/bus/iio/devices/iio:deviceX/current_timestamp_clock
11 KernelVersion: 4.5
12 Contact: linux-iio@vger.kernel.org
13 Description:
14 diff --git a/Makefile b/Makefile
15 index df3b20af0fdb..db3d37e18723 100644
16 --- a/Makefile
17 +++ b/Makefile
18 @@ -1,6 +1,6 @@
19 VERSION = 4
20 PATCHLEVEL = 9
21 -SUBLEVEL = 90
22 +SUBLEVEL = 91
23 EXTRAVERSION =
24 NAME = Roaring Lionus
25
26 @@ -790,6 +790,15 @@ KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign)
27 # disable invalid "can't wrap" optimizations for signed / pointers
28 KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
29
30 +# clang sets -fmerge-all-constants by default as optimization, but this
31 +# is non-conforming behavior for C and in fact breaks the kernel, so we
32 +# need to disable it here generally.
33 +KBUILD_CFLAGS += $(call cc-option,-fno-merge-all-constants)
34 +
35 +# for gcc -fno-merge-all-constants disables everything, but it is fine
36 +# to have actual conforming behavior enabled.
37 +KBUILD_CFLAGS += $(call cc-option,-fmerge-constants)
38 +
39 # Make sure -fstack-check isn't enabled (like gentoo apparently did)
40 KBUILD_CFLAGS += $(call cc-option,-fno-stack-check,)
41
42 diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
43 index d5cc6d73c2c4..638f7f2bd79c 100644
44 --- a/arch/arm64/mm/mmu.c
45 +++ b/arch/arm64/mm/mmu.c
46 @@ -772,3 +772,13 @@ int pmd_clear_huge(pmd_t *pmd)
47 pmd_clear(pmd);
48 return 1;
49 }
50 +
51 +int pud_free_pmd_page(pud_t *pud)
52 +{
53 + return pud_none(*pud);
54 +}
55 +
56 +int pmd_free_pte_page(pmd_t *pmd)
57 +{
58 + return pmd_none(*pmd);
59 +}
60 diff --git a/arch/mips/ralink/reset.c b/arch/mips/ralink/reset.c
61 index 64543d66e76b..e9531fea23a2 100644
62 --- a/arch/mips/ralink/reset.c
63 +++ b/arch/mips/ralink/reset.c
64 @@ -96,16 +96,9 @@ static void ralink_restart(char *command)
65 unreachable();
66 }
67
68 -static void ralink_halt(void)
69 -{
70 - local_irq_disable();
71 - unreachable();
72 -}
73 -
74 static int __init mips_reboot_setup(void)
75 {
76 _machine_restart = ralink_restart;
77 - _machine_halt = ralink_halt;
78
79 return 0;
80 }
81 diff --git a/arch/x86/Makefile b/arch/x86/Makefile
82 index b60996184fa4..f408babdf746 100644
83 --- a/arch/x86/Makefile
84 +++ b/arch/x86/Makefile
85 @@ -172,6 +172,15 @@ KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr)
86
87 LDFLAGS := -m elf_$(UTS_MACHINE)
88
89 +#
90 +# The 64-bit kernel must be aligned to 2MB. Pass -z max-page-size=0x200000 to
91 +# the linker to force 2MB page size regardless of the default page size used
92 +# by the linker.
93 +#
94 +ifdef CONFIG_X86_64
95 +LDFLAGS += $(call ld-option, -z max-page-size=0x200000)
96 +endif
97 +
98 # Speed up the build
99 KBUILD_CFLAGS += -pipe
100 # Workaround for a gcc prelease that unfortunately was shipped in a suse release
101 diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
102 index c945acd8fa33..d86e68d3c794 100644
103 --- a/arch/x86/boot/compressed/misc.c
104 +++ b/arch/x86/boot/compressed/misc.c
105 @@ -299,6 +299,10 @@ static void parse_elf(void *output)
106
107 switch (phdr->p_type) {
108 case PT_LOAD:
109 +#ifdef CONFIG_X86_64
110 + if ((phdr->p_align % 0x200000) != 0)
111 + error("Alignment of LOAD segment isn't multiple of 2MB");
112 +#endif
113 #ifdef CONFIG_RELOCATABLE
114 dest = output;
115 dest += (phdr->p_paddr - LOAD_PHYSICAL_ADDR);
116 diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
117 index 58610fe93f5d..d58d8dcb8245 100644
118 --- a/arch/x86/entry/entry_64.S
119 +++ b/arch/x86/entry/entry_64.S
120 @@ -943,7 +943,7 @@ apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \
121 #endif /* CONFIG_HYPERV */
122
123 idtentry debug do_debug has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK
124 -idtentry int3 do_int3 has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK
125 +idtentry int3 do_int3 has_error_code=0
126 idtentry stack_segment do_stack_segment has_error_code=1
127
128 #ifdef CONFIG_XEN
129 diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
130 index 0bd0c1cc3228..6f353a874178 100644
131 --- a/arch/x86/events/intel/core.c
132 +++ b/arch/x86/events/intel/core.c
133 @@ -3025,7 +3025,7 @@ static unsigned bdw_limit_period(struct perf_event *event, unsigned left)
134 X86_CONFIG(.event=0xc0, .umask=0x01)) {
135 if (left < 128)
136 left = 128;
137 - left &= ~0x3fu;
138 + left &= ~0x3fULL;
139 }
140 return left;
141 }
142 diff --git a/arch/x86/events/intel/uncore_snbep.c b/arch/x86/events/intel/uncore_snbep.c
143 index afe8024e9e95..6bc36944a8c1 100644
144 --- a/arch/x86/events/intel/uncore_snbep.c
145 +++ b/arch/x86/events/intel/uncore_snbep.c
146 @@ -3522,24 +3522,27 @@ static struct intel_uncore_type *skx_msr_uncores[] = {
147 NULL,
148 };
149
150 +/*
151 + * To determine the number of CHAs, it should read bits 27:0 in the CAPID6
152 + * register which located at Device 30, Function 3, Offset 0x9C. PCI ID 0x2083.
153 + */
154 +#define SKX_CAPID6 0x9c
155 +#define SKX_CHA_BIT_MASK GENMASK(27, 0)
156 +
157 static int skx_count_chabox(void)
158 {
159 - struct pci_dev *chabox_dev = NULL;
160 - int bus, count = 0;
161 + struct pci_dev *dev = NULL;
162 + u32 val = 0;
163
164 - while (1) {
165 - chabox_dev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x208d, chabox_dev);
166 - if (!chabox_dev)
167 - break;
168 - if (count == 0)
169 - bus = chabox_dev->bus->number;
170 - if (bus != chabox_dev->bus->number)
171 - break;
172 - count++;
173 - }
174 + dev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x2083, dev);
175 + if (!dev)
176 + goto out;
177
178 - pci_dev_put(chabox_dev);
179 - return count;
180 + pci_read_config_dword(dev, SKX_CAPID6, &val);
181 + val &= SKX_CHA_BIT_MASK;
182 +out:
183 + pci_dev_put(dev);
184 + return hweight32(val);
185 }
186
187 void skx_uncore_cpu_init(void)
188 @@ -3566,7 +3569,7 @@ static struct intel_uncore_type skx_uncore_imc = {
189 };
190
191 static struct attribute *skx_upi_uncore_formats_attr[] = {
192 - &format_attr_event_ext.attr,
193 + &format_attr_event.attr,
194 &format_attr_umask_ext.attr,
195 &format_attr_edge.attr,
196 &format_attr_inv.attr,
197 diff --git a/arch/x86/include/asm/vmx.h b/arch/x86/include/asm/vmx.h
198 index 6899cf187ba2..9cbfbef6a115 100644
199 --- a/arch/x86/include/asm/vmx.h
200 +++ b/arch/x86/include/asm/vmx.h
201 @@ -309,6 +309,7 @@ enum vmcs_field {
202 #define INTR_TYPE_NMI_INTR (2 << 8) /* NMI */
203 #define INTR_TYPE_HARD_EXCEPTION (3 << 8) /* processor exception */
204 #define INTR_TYPE_SOFT_INTR (4 << 8) /* software interrupt */
205 +#define INTR_TYPE_PRIV_SW_EXCEPTION (5 << 8) /* ICE breakpoint - undocumented */
206 #define INTR_TYPE_SOFT_EXCEPTION (6 << 8) /* software exception */
207
208 /* GUEST_INTERRUPTIBILITY_INFO flags. */
209 diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
210 index 322f433fbc76..f2142932ff0b 100644
211 --- a/arch/x86/kernel/traps.c
212 +++ b/arch/x86/kernel/traps.c
213 @@ -526,7 +526,6 @@ do_general_protection(struct pt_regs *regs, long error_code)
214 }
215 NOKPROBE_SYMBOL(do_general_protection);
216
217 -/* May run on IST stack. */
218 dotraplinkage void notrace do_int3(struct pt_regs *regs, long error_code)
219 {
220 #ifdef CONFIG_DYNAMIC_FTRACE
221 @@ -541,7 +540,15 @@ dotraplinkage void notrace do_int3(struct pt_regs *regs, long error_code)
222 if (poke_int3_handler(regs))
223 return;
224
225 + /*
226 + * Use ist_enter despite the fact that we don't use an IST stack.
227 + * We can be called from a kprobe in non-CONTEXT_KERNEL kernel
228 + * mode or even during context tracking state changes.
229 + *
230 + * This means that we can't schedule. That's okay.
231 + */
232 ist_enter(regs);
233 +
234 RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU");
235 #ifdef CONFIG_KGDB_LOW_LEVEL_TRAP
236 if (kgdb_ll_trap(DIE_INT3, "int3", regs, error_code, X86_TRAP_BP,
237 @@ -558,17 +565,11 @@ dotraplinkage void notrace do_int3(struct pt_regs *regs, long error_code)
238 SIGTRAP) == NOTIFY_STOP)
239 goto exit;
240
241 - /*
242 - * Let others (NMI) know that the debug stack is in use
243 - * as we may switch to the interrupt stack.
244 - */
245 - debug_stack_usage_inc();
246 preempt_disable();
247 cond_local_irq_enable(regs);
248 do_trap(X86_TRAP_BP, SIGTRAP, "int3", regs, error_code, NULL);
249 cond_local_irq_disable(regs);
250 preempt_enable_no_resched();
251 - debug_stack_usage_dec();
252 exit:
253 ist_exit(regs);
254 }
255 @@ -989,19 +990,16 @@ void __init trap_init(void)
256 cpu_init();
257
258 /*
259 - * X86_TRAP_DB and X86_TRAP_BP have been set
260 - * in early_trap_init(). However, ITS works only after
261 - * cpu_init() loads TSS. See comments in early_trap_init().
262 + * X86_TRAP_DB was installed in early_trap_init(). However,
263 + * IST works only after cpu_init() loads TSS. See comments
264 + * in early_trap_init().
265 */
266 set_intr_gate_ist(X86_TRAP_DB, &debug, DEBUG_STACK);
267 - /* int3 can be called from all */
268 - set_system_intr_gate_ist(X86_TRAP_BP, &int3, DEBUG_STACK);
269
270 x86_init.irqs.trap_init();
271
272 #ifdef CONFIG_X86_64
273 memcpy(&debug_idt_table, &idt_table, IDT_ENTRIES * 16);
274 set_nmi_gate(X86_TRAP_DB, &debug);
275 - set_nmi_gate(X86_TRAP_BP, &int3);
276 #endif
277 }
278 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
279 index 0f3bb4632310..7ed422e2641b 100644
280 --- a/arch/x86/kvm/vmx.c
281 +++ b/arch/x86/kvm/vmx.c
282 @@ -1053,6 +1053,13 @@ static inline bool is_machine_check(u32 intr_info)
283 (INTR_TYPE_HARD_EXCEPTION | MC_VECTOR | INTR_INFO_VALID_MASK);
284 }
285
286 +/* Undocumented: icebp/int1 */
287 +static inline bool is_icebp(u32 intr_info)
288 +{
289 + return (intr_info & (INTR_INFO_INTR_TYPE_MASK | INTR_INFO_VALID_MASK))
290 + == (INTR_TYPE_PRIV_SW_EXCEPTION | INTR_INFO_VALID_MASK);
291 +}
292 +
293 static inline bool cpu_has_vmx_msr_bitmap(void)
294 {
295 return vmcs_config.cpu_based_exec_ctrl & CPU_BASED_USE_MSR_BITMAPS;
296 @@ -5733,7 +5740,7 @@ static int handle_exception(struct kvm_vcpu *vcpu)
297 (KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_USE_HW_BP))) {
298 vcpu->arch.dr6 &= ~15;
299 vcpu->arch.dr6 |= dr6 | DR6_RTM;
300 - if (!(dr6 & ~DR6_RESERVED)) /* icebp */
301 + if (is_icebp(intr_info))
302 skip_emulated_instruction(vcpu);
303
304 kvm_queue_exception(vcpu, DB_VECTOR);
305 diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
306 index 209b9465e97a..b97ef29c940f 100644
307 --- a/arch/x86/mm/pgtable.c
308 +++ b/arch/x86/mm/pgtable.c
309 @@ -643,4 +643,52 @@ int pmd_clear_huge(pmd_t *pmd)
310
311 return 0;
312 }
313 +
314 +/**
315 + * pud_free_pmd_page - Clear pud entry and free pmd page.
316 + * @pud: Pointer to a PUD.
317 + *
318 + * Context: The pud range has been unmaped and TLB purged.
319 + * Return: 1 if clearing the entry succeeded. 0 otherwise.
320 + */
321 +int pud_free_pmd_page(pud_t *pud)
322 +{
323 + pmd_t *pmd;
324 + int i;
325 +
326 + if (pud_none(*pud))
327 + return 1;
328 +
329 + pmd = (pmd_t *)pud_page_vaddr(*pud);
330 +
331 + for (i = 0; i < PTRS_PER_PMD; i++)
332 + if (!pmd_free_pte_page(&pmd[i]))
333 + return 0;
334 +
335 + pud_clear(pud);
336 + free_page((unsigned long)pmd);
337 +
338 + return 1;
339 +}
340 +
341 +/**
342 + * pmd_free_pte_page - Clear pmd entry and free pte page.
343 + * @pmd: Pointer to a PMD.
344 + *
345 + * Context: The pmd range has been unmaped and TLB purged.
346 + * Return: 1 if clearing the entry succeeded. 0 otherwise.
347 + */
348 +int pmd_free_pte_page(pmd_t *pmd)
349 +{
350 + pte_t *pte;
351 +
352 + if (pmd_none(*pmd))
353 + return 1;
354 +
355 + pte = (pte_t *)pmd_page_vaddr(*pmd);
356 + pmd_clear(pmd);
357 + free_page((unsigned long)pte);
358 +
359 + return 1;
360 +}
361 #endif /* CONFIG_HAVE_ARCH_HUGE_VMAP */
362 diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
363 index 1f7ed2ed6ff7..cd9764520851 100644
364 --- a/arch/x86/net/bpf_jit_comp.c
365 +++ b/arch/x86/net/bpf_jit_comp.c
366 @@ -1135,7 +1135,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
367 * may converge on the last pass. In such case do one more
368 * pass to emit the final image
369 */
370 - for (pass = 0; pass < 10 || image; pass++) {
371 + for (pass = 0; pass < 20 || image; pass++) {
372 proglen = do_jit(prog, addrs, image, oldproglen, &ctx);
373 if (proglen <= 0) {
374 image = NULL;
375 @@ -1162,6 +1162,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
376 }
377 }
378 oldproglen = proglen;
379 + cond_resched();
380 }
381
382 if (bpf_jit_enable > 1)
383 diff --git a/drivers/acpi/acpi_watchdog.c b/drivers/acpi/acpi_watchdog.c
384 index 13caebd679f5..ce8fc680785b 100644
385 --- a/drivers/acpi/acpi_watchdog.c
386 +++ b/drivers/acpi/acpi_watchdog.c
387 @@ -74,10 +74,10 @@ void __init acpi_watchdog_init(void)
388 res.start = gas->address;
389 if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
390 res.flags = IORESOURCE_MEM;
391 - res.end = res.start + ALIGN(gas->access_width, 4);
392 + res.end = res.start + ALIGN(gas->access_width, 4) - 1;
393 } else if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
394 res.flags = IORESOURCE_IO;
395 - res.end = res.start + gas->access_width;
396 + res.end = res.start + gas->access_width - 1;
397 } else {
398 pr_warn("Unsupported address space: %u\n",
399 gas->space_id);
400 diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c
401 index ce3a7a16f03f..17b518cb787c 100644
402 --- a/drivers/acpi/numa.c
403 +++ b/drivers/acpi/numa.c
404 @@ -103,25 +103,27 @@ int acpi_map_pxm_to_node(int pxm)
405 */
406 int acpi_map_pxm_to_online_node(int pxm)
407 {
408 - int node, n, dist, min_dist;
409 + int node, min_node;
410
411 node = acpi_map_pxm_to_node(pxm);
412
413 if (node == NUMA_NO_NODE)
414 node = 0;
415
416 + min_node = node;
417 if (!node_online(node)) {
418 - min_dist = INT_MAX;
419 + int min_dist = INT_MAX, dist, n;
420 +
421 for_each_online_node(n) {
422 dist = node_distance(node, n);
423 if (dist < min_dist) {
424 min_dist = dist;
425 - node = n;
426 + min_node = n;
427 }
428 }
429 }
430
431 - return node;
432 + return min_node;
433 }
434 EXPORT_SYMBOL(acpi_map_pxm_to_online_node);
435
436 diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
437 index 9b46ef4c851e..4d4b5f607b81 100644
438 --- a/drivers/ata/ahci.c
439 +++ b/drivers/ata/ahci.c
440 @@ -539,7 +539,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
441 .driver_data = board_ahci_yes_fbs },
442 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9230),
443 .driver_data = board_ahci_yes_fbs },
444 - { PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0642),
445 + { PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0642), /* highpoint rocketraid 642L */
446 + .driver_data = board_ahci_yes_fbs },
447 + { PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0645), /* highpoint rocketraid 644L */
448 .driver_data = board_ahci_yes_fbs },
449
450 /* Promise */
451 diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
452 index aee39524375c..e08c09fa5da0 100644
453 --- a/drivers/ata/libata-core.c
454 +++ b/drivers/ata/libata-core.c
455 @@ -4403,6 +4403,25 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
456 { "PIONEER DVD-RW DVR-212D", NULL, ATA_HORKAGE_NOSETXFER },
457 { "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER },
458
459 + /* Crucial BX100 SSD 500GB has broken LPM support */
460 + { "CT500BX100SSD1", NULL, ATA_HORKAGE_NOLPM },
461 +
462 + /* 512GB MX100 with MU01 firmware has both queued TRIM and LPM issues */
463 + { "Crucial_CT512MX100*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
464 + ATA_HORKAGE_ZERO_AFTER_TRIM |
465 + ATA_HORKAGE_NOLPM, },
466 + /* 512GB MX100 with newer firmware has only LPM issues */
467 + { "Crucial_CT512MX100*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM |
468 + ATA_HORKAGE_NOLPM, },
469 +
470 + /* 480GB+ M500 SSDs have both queued TRIM and LPM issues */
471 + { "Crucial_CT480M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
472 + ATA_HORKAGE_ZERO_AFTER_TRIM |
473 + ATA_HORKAGE_NOLPM, },
474 + { "Crucial_CT960M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
475 + ATA_HORKAGE_ZERO_AFTER_TRIM |
476 + ATA_HORKAGE_NOLPM, },
477 +
478 /* devices that don't properly handle queued TRIM commands */
479 { "Micron_M500_*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
480 ATA_HORKAGE_ZERO_AFTER_TRIM, },
481 @@ -4414,7 +4433,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
482 ATA_HORKAGE_ZERO_AFTER_TRIM, },
483 { "Crucial_CT*MX100*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
484 ATA_HORKAGE_ZERO_AFTER_TRIM, },
485 - { "Samsung SSD 8*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
486 + { "Samsung SSD 840*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
487 + ATA_HORKAGE_ZERO_AFTER_TRIM, },
488 + { "Samsung SSD 850*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
489 ATA_HORKAGE_ZERO_AFTER_TRIM, },
490 { "FCCT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
491 ATA_HORKAGE_ZERO_AFTER_TRIM, },
492 @@ -5265,8 +5286,7 @@ void ata_qc_issue(struct ata_queued_cmd *qc)
493 * We guarantee to LLDs that they will have at least one
494 * non-zero sg if the command is a data command.
495 */
496 - if (WARN_ON_ONCE(ata_is_data(prot) &&
497 - (!qc->sg || !qc->n_elem || !qc->nbytes)))
498 + if (ata_is_data(prot) && (!qc->sg || !qc->n_elem || !qc->nbytes))
499 goto sys_err;
500
501 if (ata_is_dma(prot) || (ata_is_pio(prot) &&
502 diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
503 index e3e10e8f6f6a..9babbc845750 100644
504 --- a/drivers/ata/libata-scsi.c
505 +++ b/drivers/ata/libata-scsi.c
506 @@ -3226,6 +3226,12 @@ static unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc)
507 goto invalid_fld;
508 }
509
510 + /* We may not issue NCQ commands to devices not supporting NCQ */
511 + if (ata_is_ncq(tf->protocol) && !ata_ncq_enabled(dev)) {
512 + fp = 1;
513 + goto invalid_fld;
514 + }
515 +
516 /* sanity check for pio multi commands */
517 if ((cdb[1] & 0xe0) && !is_multi_taskfile(tf)) {
518 fp = 1;
519 @@ -4177,7 +4183,9 @@ static inline int __ata_scsi_queuecmd(struct scsi_cmnd *scmd,
520 if (likely((scsi_op != ATA_16) || !atapi_passthru16)) {
521 /* relay SCSI command to ATAPI device */
522 int len = COMMAND_SIZE(scsi_op);
523 - if (unlikely(len > scmd->cmd_len || len > dev->cdb_len))
524 + if (unlikely(len > scmd->cmd_len ||
525 + len > dev->cdb_len ||
526 + scmd->cmd_len > ATAPI_CDB_LEN))
527 goto bad_cdb_len;
528
529 xlat_func = atapi_xlat;
530 diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
531 index 3257647d4f74..f8ba5c714df5 100644
532 --- a/drivers/bluetooth/btusb.c
533 +++ b/drivers/bluetooth/btusb.c
534 @@ -217,7 +217,6 @@ static const struct usb_device_id blacklist_table[] = {
535 { USB_DEVICE(0x0930, 0x0227), .driver_info = BTUSB_ATH3012 },
536 { USB_DEVICE(0x0b05, 0x17d0), .driver_info = BTUSB_ATH3012 },
537 { USB_DEVICE(0x0cf3, 0x0036), .driver_info = BTUSB_ATH3012 },
538 - { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
539 { USB_DEVICE(0x0cf3, 0x3008), .driver_info = BTUSB_ATH3012 },
540 { USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 },
541 { USB_DEVICE(0x0cf3, 0x311e), .driver_info = BTUSB_ATH3012 },
542 @@ -250,6 +249,7 @@ static const struct usb_device_id blacklist_table[] = {
543 { USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 },
544
545 /* QCA ROME chipset */
546 + { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_QCA_ROME },
547 { USB_DEVICE(0x0cf3, 0xe007), .driver_info = BTUSB_QCA_ROME },
548 { USB_DEVICE(0x0cf3, 0xe009), .driver_info = BTUSB_QCA_ROME },
549 { USB_DEVICE(0x0cf3, 0xe300), .driver_info = BTUSB_QCA_ROME },
550 diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
551 index 2acaa77ad482..abdc149941e2 100644
552 --- a/drivers/clk/bcm/clk-bcm2835.c
553 +++ b/drivers/clk/bcm/clk-bcm2835.c
554 @@ -401,17 +401,17 @@ struct bcm2835_pll_ana_bits {
555 static const struct bcm2835_pll_ana_bits bcm2835_ana_default = {
556 .mask0 = 0,
557 .set0 = 0,
558 - .mask1 = (u32)~(A2W_PLL_KI_MASK | A2W_PLL_KP_MASK),
559 + .mask1 = A2W_PLL_KI_MASK | A2W_PLL_KP_MASK,
560 .set1 = (2 << A2W_PLL_KI_SHIFT) | (8 << A2W_PLL_KP_SHIFT),
561 - .mask3 = (u32)~A2W_PLL_KA_MASK,
562 + .mask3 = A2W_PLL_KA_MASK,
563 .set3 = (2 << A2W_PLL_KA_SHIFT),
564 .fb_prediv_mask = BIT(14),
565 };
566
567 static const struct bcm2835_pll_ana_bits bcm2835_ana_pllh = {
568 - .mask0 = (u32)~(A2W_PLLH_KA_MASK | A2W_PLLH_KI_LOW_MASK),
569 + .mask0 = A2W_PLLH_KA_MASK | A2W_PLLH_KI_LOW_MASK,
570 .set0 = (2 << A2W_PLLH_KA_SHIFT) | (2 << A2W_PLLH_KI_LOW_SHIFT),
571 - .mask1 = (u32)~(A2W_PLLH_KI_HIGH_MASK | A2W_PLLH_KP_MASK),
572 + .mask1 = A2W_PLLH_KI_HIGH_MASK | A2W_PLLH_KP_MASK,
573 .set1 = (6 << A2W_PLLH_KP_SHIFT),
574 .mask3 = 0,
575 .set3 = 0,
576 @@ -566,8 +566,10 @@ static int bcm2835_pll_on(struct clk_hw *hw)
577 ~A2W_PLL_CTRL_PWRDN);
578
579 /* Take the PLL out of reset. */
580 + spin_lock(&cprman->regs_lock);
581 cprman_write(cprman, data->cm_ctrl_reg,
582 cprman_read(cprman, data->cm_ctrl_reg) & ~CM_PLL_ANARST);
583 + spin_unlock(&cprman->regs_lock);
584
585 /* Wait for the PLL to lock. */
586 timeout = ktime_add_ns(ktime_get(), LOCK_TIMEOUT_NS);
587 @@ -644,9 +646,11 @@ static int bcm2835_pll_set_rate(struct clk_hw *hw,
588 }
589
590 /* Unmask the reference clock from the oscillator. */
591 + spin_lock(&cprman->regs_lock);
592 cprman_write(cprman, A2W_XOSC_CTRL,
593 cprman_read(cprman, A2W_XOSC_CTRL) |
594 data->reference_enable_mask);
595 + spin_unlock(&cprman->regs_lock);
596
597 if (do_ana_setup_first)
598 bcm2835_pll_write_ana(cprman, data->ana_reg_base, ana);
599 diff --git a/drivers/clk/sunxi-ng/ccu-sun6i-a31.c b/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
600 index 9fe0939c1273..6ea5401e6881 100644
601 --- a/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
602 +++ b/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
603 @@ -750,7 +750,7 @@ static struct ccu_mp out_a_clk = {
604 .features = CCU_FEATURE_FIXED_PREDIV,
605 .hw.init = CLK_HW_INIT_PARENTS("out-a",
606 clk_out_parents,
607 - &ccu_div_ops,
608 + &ccu_mp_ops,
609 0),
610 },
611 };
612 @@ -771,7 +771,7 @@ static struct ccu_mp out_b_clk = {
613 .features = CCU_FEATURE_FIXED_PREDIV,
614 .hw.init = CLK_HW_INIT_PARENTS("out-b",
615 clk_out_parents,
616 - &ccu_div_ops,
617 + &ccu_mp_ops,
618 0),
619 },
620 };
621 @@ -792,7 +792,7 @@ static struct ccu_mp out_c_clk = {
622 .features = CCU_FEATURE_FIXED_PREDIV,
623 .hw.init = CLK_HW_INIT_PARENTS("out-c",
624 clk_out_parents,
625 - &ccu_div_ops,
626 + &ccu_mp_ops,
627 0),
628 },
629 };
630 diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
631 index af0d7fd5706b..f416f5c2e8e9 100644
632 --- a/drivers/gpu/drm/radeon/radeon_connectors.c
633 +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
634 @@ -90,25 +90,18 @@ void radeon_connector_hotplug(struct drm_connector *connector)
635 /* don't do anything if sink is not display port, i.e.,
636 * passive dp->(dvi|hdmi) adaptor
637 */
638 - if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
639 - int saved_dpms = connector->dpms;
640 - /* Only turn off the display if it's physically disconnected */
641 - if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
642 - drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
643 - } else if (radeon_dp_needs_link_train(radeon_connector)) {
644 - /* Don't try to start link training before we
645 - * have the dpcd */
646 - if (!radeon_dp_getdpcd(radeon_connector))
647 - return;
648 -
649 - /* set it to OFF so that drm_helper_connector_dpms()
650 - * won't return immediately since the current state
651 - * is ON at this point.
652 - */
653 - connector->dpms = DRM_MODE_DPMS_OFF;
654 - drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
655 - }
656 - connector->dpms = saved_dpms;
657 + if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT &&
658 + radeon_hpd_sense(rdev, radeon_connector->hpd.hpd) &&
659 + radeon_dp_needs_link_train(radeon_connector)) {
660 + /* Don't start link training before we have the DPCD */
661 + if (!radeon_dp_getdpcd(radeon_connector))
662 + return;
663 +
664 + /* Turn the connector off and back on immediately, which
665 + * will trigger link training
666 + */
667 + drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
668 + drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
669 }
670 }
671 }
672 diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c
673 index 611b6b9bb3cb..67ea2ce03a23 100644
674 --- a/drivers/gpu/drm/udl/udl_fb.c
675 +++ b/drivers/gpu/drm/udl/udl_fb.c
676 @@ -158,10 +158,15 @@ static int udl_fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
677 {
678 unsigned long start = vma->vm_start;
679 unsigned long size = vma->vm_end - vma->vm_start;
680 - unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
681 + unsigned long offset;
682 unsigned long page, pos;
683
684 - if (offset + size > info->fix.smem_len)
685 + if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT))
686 + return -EINVAL;
687 +
688 + offset = vma->vm_pgoff << PAGE_SHIFT;
689 +
690 + if (offset > info->fix.smem_len || size > info->fix.smem_len - offset)
691 return -EINVAL;
692
693 pos = (unsigned long)info->fix.smem_start + offset;
694 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
695 index bf28ccc150df..87086af42114 100644
696 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
697 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
698 @@ -27,7 +27,6 @@
699
700 #include "vmwgfx_kms.h"
701
702 -
703 /* Might need a hrtimer here? */
704 #define VMWGFX_PRESENT_RATE ((HZ / 60 > 0) ? HZ / 60 : 1)
705
706 @@ -1933,9 +1932,12 @@ void vmw_kms_helper_buffer_finish(struct vmw_private *dev_priv,
707 * Helper to be used if an error forces the caller to undo the actions of
708 * vmw_kms_helper_resource_prepare.
709 */
710 -void vmw_kms_helper_resource_revert(struct vmw_resource *res)
711 +void vmw_kms_helper_resource_revert(struct vmw_validation_ctx *ctx)
712 {
713 - vmw_kms_helper_buffer_revert(res->backup);
714 + struct vmw_resource *res = ctx->res;
715 +
716 + vmw_kms_helper_buffer_revert(ctx->buf);
717 + vmw_dmabuf_unreference(&ctx->buf);
718 vmw_resource_unreserve(res, false, NULL, 0);
719 mutex_unlock(&res->dev_priv->cmdbuf_mutex);
720 }
721 @@ -1952,10 +1954,14 @@ void vmw_kms_helper_resource_revert(struct vmw_resource *res)
722 * interrupted by a signal.
723 */
724 int vmw_kms_helper_resource_prepare(struct vmw_resource *res,
725 - bool interruptible)
726 + bool interruptible,
727 + struct vmw_validation_ctx *ctx)
728 {
729 int ret = 0;
730
731 + ctx->buf = NULL;
732 + ctx->res = res;
733 +
734 if (interruptible)
735 ret = mutex_lock_interruptible(&res->dev_priv->cmdbuf_mutex);
736 else
737 @@ -1974,6 +1980,8 @@ int vmw_kms_helper_resource_prepare(struct vmw_resource *res,
738 res->dev_priv->has_mob);
739 if (ret)
740 goto out_unreserve;
741 +
742 + ctx->buf = vmw_dmabuf_reference(res->backup);
743 }
744 ret = vmw_resource_validate(res);
745 if (ret)
746 @@ -1981,7 +1989,7 @@ int vmw_kms_helper_resource_prepare(struct vmw_resource *res,
747 return 0;
748
749 out_revert:
750 - vmw_kms_helper_buffer_revert(res->backup);
751 + vmw_kms_helper_buffer_revert(ctx->buf);
752 out_unreserve:
753 vmw_resource_unreserve(res, false, NULL, 0);
754 out_unlock:
755 @@ -1997,11 +2005,13 @@ int vmw_kms_helper_resource_prepare(struct vmw_resource *res,
756 * @out_fence: Optional pointer to a fence pointer. If non-NULL, a
757 * ref-counted fence pointer is returned here.
758 */
759 -void vmw_kms_helper_resource_finish(struct vmw_resource *res,
760 - struct vmw_fence_obj **out_fence)
761 +void vmw_kms_helper_resource_finish(struct vmw_validation_ctx *ctx,
762 + struct vmw_fence_obj **out_fence)
763 {
764 - if (res->backup || out_fence)
765 - vmw_kms_helper_buffer_finish(res->dev_priv, NULL, res->backup,
766 + struct vmw_resource *res = ctx->res;
767 +
768 + if (ctx->buf || out_fence)
769 + vmw_kms_helper_buffer_finish(res->dev_priv, NULL, ctx->buf,
770 out_fence, NULL);
771
772 vmw_resource_unreserve(res, false, NULL, 0);
773 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
774 index ff4803c107bc..2dd05395e98b 100644
775 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
776 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
777 @@ -183,6 +183,11 @@ struct vmw_display_unit {
778 int set_gui_y;
779 };
780
781 +struct vmw_validation_ctx {
782 + struct vmw_resource *res;
783 + struct vmw_dma_buffer *buf;
784 +};
785 +
786 #define vmw_crtc_to_du(x) \
787 container_of(x, struct vmw_display_unit, crtc)
788 #define vmw_connector_to_du(x) \
789 @@ -233,9 +238,10 @@ void vmw_kms_helper_buffer_finish(struct vmw_private *dev_priv,
790 struct drm_vmw_fence_rep __user *
791 user_fence_rep);
792 int vmw_kms_helper_resource_prepare(struct vmw_resource *res,
793 - bool interruptible);
794 -void vmw_kms_helper_resource_revert(struct vmw_resource *res);
795 -void vmw_kms_helper_resource_finish(struct vmw_resource *res,
796 + bool interruptible,
797 + struct vmw_validation_ctx *ctx);
798 +void vmw_kms_helper_resource_revert(struct vmw_validation_ctx *ctx);
799 +void vmw_kms_helper_resource_finish(struct vmw_validation_ctx *ctx,
800 struct vmw_fence_obj **out_fence);
801 int vmw_kms_readback(struct vmw_private *dev_priv,
802 struct drm_file *file_priv,
803 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
804 index f42359084adc..a6ca2185f5b0 100644
805 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
806 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
807 @@ -753,12 +753,13 @@ int vmw_kms_sou_do_surface_dirty(struct vmw_private *dev_priv,
808 struct vmw_framebuffer_surface *vfbs =
809 container_of(framebuffer, typeof(*vfbs), base);
810 struct vmw_kms_sou_surface_dirty sdirty;
811 + struct vmw_validation_ctx ctx;
812 int ret;
813
814 if (!srf)
815 srf = &vfbs->surface->res;
816
817 - ret = vmw_kms_helper_resource_prepare(srf, true);
818 + ret = vmw_kms_helper_resource_prepare(srf, true, &ctx);
819 if (ret)
820 return ret;
821
822 @@ -777,7 +778,7 @@ int vmw_kms_sou_do_surface_dirty(struct vmw_private *dev_priv,
823 ret = vmw_kms_helper_dirty(dev_priv, framebuffer, clips, vclips,
824 dest_x, dest_y, num_clips, inc,
825 &sdirty.base);
826 - vmw_kms_helper_resource_finish(srf, out_fence);
827 + vmw_kms_helper_resource_finish(&ctx, out_fence);
828
829 return ret;
830 }
831 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
832 index 94ad8d2acf9a..8b914504b857 100644
833 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
834 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
835 @@ -977,12 +977,13 @@ int vmw_kms_stdu_surface_dirty(struct vmw_private *dev_priv,
836 struct vmw_framebuffer_surface *vfbs =
837 container_of(framebuffer, typeof(*vfbs), base);
838 struct vmw_stdu_dirty sdirty;
839 + struct vmw_validation_ctx ctx;
840 int ret;
841
842 if (!srf)
843 srf = &vfbs->surface->res;
844
845 - ret = vmw_kms_helper_resource_prepare(srf, true);
846 + ret = vmw_kms_helper_resource_prepare(srf, true, &ctx);
847 if (ret)
848 return ret;
849
850 @@ -1005,7 +1006,7 @@ int vmw_kms_stdu_surface_dirty(struct vmw_private *dev_priv,
851 dest_x, dest_y, num_clips, inc,
852 &sdirty.base);
853 out_finish:
854 - vmw_kms_helper_resource_finish(srf, out_fence);
855 + vmw_kms_helper_resource_finish(&ctx, out_fence);
856
857 return ret;
858 }
859 diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel_core.c
860 index fe94415a0bc7..32cd64c2ee06 100644
861 --- a/drivers/iio/accel/st_accel_core.c
862 +++ b/drivers/iio/accel/st_accel_core.c
863 @@ -858,7 +858,7 @@ int st_accel_common_probe(struct iio_dev *indio_dev)
864 if (!pdata)
865 pdata = (struct st_sensors_platform_data *)&default_accel_pdata;
866
867 - err = st_sensors_init_sensor(indio_dev, adata->dev->platform_data);
868 + err = st_sensors_init_sensor(indio_dev, pdata);
869 if (err < 0)
870 goto st_accel_power_off;
871
872 diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c
873 index bec60299b6ec..3458418d88bc 100644
874 --- a/drivers/iio/pressure/st_pressure_core.c
875 +++ b/drivers/iio/pressure/st_pressure_core.c
876 @@ -678,7 +678,7 @@ int st_press_common_probe(struct iio_dev *indio_dev)
877 if (!pdata && press_data->sensor_settings->drdy_irq.addr)
878 pdata = (struct st_sensors_platform_data *)&default_press_pdata;
879
880 - err = st_sensors_init_sensor(indio_dev, press_data->dev->platform_data);
881 + err = st_sensors_init_sensor(indio_dev, pdata);
882 if (err < 0)
883 goto st_press_power_off;
884
885 diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
886 index f81f4175f49a..d382dbd44635 100644
887 --- a/drivers/mmc/host/dw_mmc.c
888 +++ b/drivers/mmc/host/dw_mmc.c
889 @@ -490,6 +490,7 @@ static int dw_mci_idmac_init(struct dw_mci *host)
890 (sizeof(struct idmac_desc_64addr) *
891 (i + 1))) >> 32;
892 /* Initialize reserved and buffer size fields to "0" */
893 + p->des0 = 0;
894 p->des1 = 0;
895 p->des2 = 0;
896 p->des3 = 0;
897 @@ -512,6 +513,7 @@ static int dw_mci_idmac_init(struct dw_mci *host)
898 i++, p++) {
899 p->des3 = cpu_to_le32(host->sg_dma +
900 (sizeof(struct idmac_desc) * (i + 1)));
901 + p->des0 = 0;
902 p->des1 = 0;
903 }
904
905 @@ -2878,8 +2880,8 @@ static bool dw_mci_reset(struct dw_mci *host)
906 }
907
908 if (host->use_dma == TRANS_MODE_IDMAC)
909 - /* It is also recommended that we reset and reprogram idmac */
910 - dw_mci_idmac_reset(host);
911 + /* It is also required that we reinit idmac */
912 + dw_mci_idmac_init(host);
913
914 ret = true;
915
916 diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
917 index 2a47a3f0e730..b4092eab53ac 100644
918 --- a/drivers/mtd/mtdchar.c
919 +++ b/drivers/mtd/mtdchar.c
920 @@ -487,7 +487,7 @@ static int shrink_ecclayout(struct mtd_info *mtd,
921 for (i = 0; i < MTD_MAX_ECCPOS_ENTRIES;) {
922 u32 eccpos;
923
924 - ret = mtd_ooblayout_ecc(mtd, section, &oobregion);
925 + ret = mtd_ooblayout_ecc(mtd, section++, &oobregion);
926 if (ret < 0) {
927 if (ret != -ERANGE)
928 return ret;
929 @@ -534,7 +534,7 @@ static int get_oobinfo(struct mtd_info *mtd, struct nand_oobinfo *to)
930 for (i = 0; i < ARRAY_SIZE(to->eccpos);) {
931 u32 eccpos;
932
933 - ret = mtd_ooblayout_ecc(mtd, section, &oobregion);
934 + ret = mtd_ooblayout_ecc(mtd, section++, &oobregion);
935 if (ret < 0) {
936 if (ret != -ERANGE)
937 return ret;
938 diff --git a/drivers/mtd/nand/fsl_ifc_nand.c b/drivers/mtd/nand/fsl_ifc_nand.c
939 index f8f12ccc6471..2f6b55229d5b 100644
940 --- a/drivers/mtd/nand/fsl_ifc_nand.c
941 +++ b/drivers/mtd/nand/fsl_ifc_nand.c
942 @@ -201,14 +201,9 @@ static int is_blank(struct mtd_info *mtd, unsigned int bufnum)
943
944 /* returns nonzero if entire page is blank */
945 static int check_read_ecc(struct mtd_info *mtd, struct fsl_ifc_ctrl *ctrl,
946 - u32 *eccstat, unsigned int bufnum)
947 + u32 eccstat, unsigned int bufnum)
948 {
949 - u32 reg = eccstat[bufnum / 4];
950 - int errors;
951 -
952 - errors = (reg >> ((3 - bufnum % 4) * 8)) & 15;
953 -
954 - return errors;
955 + return (eccstat >> ((3 - bufnum % 4) * 8)) & 15;
956 }
957
958 /*
959 @@ -221,7 +216,7 @@ static void fsl_ifc_run_command(struct mtd_info *mtd)
960 struct fsl_ifc_ctrl *ctrl = priv->ctrl;
961 struct fsl_ifc_nand_ctrl *nctrl = ifc_nand_ctrl;
962 struct fsl_ifc_runtime __iomem *ifc = ctrl->rregs;
963 - u32 eccstat[4];
964 + u32 eccstat;
965 int i;
966
967 /* set the chip select for NAND Transaction */
968 @@ -256,19 +251,17 @@ static void fsl_ifc_run_command(struct mtd_info *mtd)
969 if (nctrl->eccread) {
970 int errors;
971 int bufnum = nctrl->page & priv->bufnum_mask;
972 - int sector = bufnum * chip->ecc.steps;
973 - int sector_end = sector + chip->ecc.steps - 1;
974 + int sector_start = bufnum * chip->ecc.steps;
975 + int sector_end = sector_start + chip->ecc.steps - 1;
976 __be32 *eccstat_regs;
977
978 - if (ctrl->version >= FSL_IFC_VERSION_2_0_0)
979 - eccstat_regs = ifc->ifc_nand.v2_nand_eccstat;
980 - else
981 - eccstat_regs = ifc->ifc_nand.v1_nand_eccstat;
982 + eccstat_regs = ifc->ifc_nand.nand_eccstat;
983 + eccstat = ifc_in32(&eccstat_regs[sector_start / 4]);
984
985 - for (i = sector / 4; i <= sector_end / 4; i++)
986 - eccstat[i] = ifc_in32(&eccstat_regs[i]);
987 + for (i = sector_start; i <= sector_end; i++) {
988 + if (i != sector_start && !(i % 4))
989 + eccstat = ifc_in32(&eccstat_regs[i / 4]);
990
991 - for (i = sector; i <= sector_end; i++) {
992 errors = check_read_ecc(mtd, ctrl, eccstat, i);
993
994 if (errors == 15) {
995 @@ -656,6 +649,7 @@ static int fsl_ifc_wait(struct mtd_info *mtd, struct nand_chip *chip)
996 struct fsl_ifc_ctrl *ctrl = priv->ctrl;
997 struct fsl_ifc_runtime __iomem *ifc = ctrl->rregs;
998 u32 nand_fsr;
999 + int status;
1000
1001 /* Use READ_STATUS command, but wait for the device to be ready */
1002 ifc_out32((IFC_FIR_OP_CW0 << IFC_NAND_FIR0_OP0_SHIFT) |
1003 @@ -670,12 +664,12 @@ static int fsl_ifc_wait(struct mtd_info *mtd, struct nand_chip *chip)
1004 fsl_ifc_run_command(mtd);
1005
1006 nand_fsr = ifc_in32(&ifc->ifc_nand.nand_fsr);
1007 -
1008 + status = nand_fsr >> 24;
1009 /*
1010 * The chip always seems to report that it is
1011 * write-protected, even when it is not.
1012 */
1013 - return nand_fsr | NAND_STATUS_WP;
1014 + return status | NAND_STATUS_WP;
1015 }
1016
1017 static int fsl_ifc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
1018 diff --git a/drivers/net/can/cc770/cc770.c b/drivers/net/can/cc770/cc770.c
1019 index 1e37313054f3..6da69af103e6 100644
1020 --- a/drivers/net/can/cc770/cc770.c
1021 +++ b/drivers/net/can/cc770/cc770.c
1022 @@ -390,37 +390,23 @@ static int cc770_get_berr_counter(const struct net_device *dev,
1023 return 0;
1024 }
1025
1026 -static netdev_tx_t cc770_start_xmit(struct sk_buff *skb, struct net_device *dev)
1027 +static void cc770_tx(struct net_device *dev, int mo)
1028 {
1029 struct cc770_priv *priv = netdev_priv(dev);
1030 - struct net_device_stats *stats = &dev->stats;
1031 - struct can_frame *cf = (struct can_frame *)skb->data;
1032 - unsigned int mo = obj2msgobj(CC770_OBJ_TX);
1033 + struct can_frame *cf = (struct can_frame *)priv->tx_skb->data;
1034 u8 dlc, rtr;
1035 u32 id;
1036 int i;
1037
1038 - if (can_dropped_invalid_skb(dev, skb))
1039 - return NETDEV_TX_OK;
1040 -
1041 - if ((cc770_read_reg(priv,
1042 - msgobj[mo].ctrl1) & TXRQST_UNC) == TXRQST_SET) {
1043 - netdev_err(dev, "TX register is still occupied!\n");
1044 - return NETDEV_TX_BUSY;
1045 - }
1046 -
1047 - netif_stop_queue(dev);
1048 -
1049 dlc = cf->can_dlc;
1050 id = cf->can_id;
1051 - if (cf->can_id & CAN_RTR_FLAG)
1052 - rtr = 0;
1053 - else
1054 - rtr = MSGCFG_DIR;
1055 + rtr = cf->can_id & CAN_RTR_FLAG ? 0 : MSGCFG_DIR;
1056 +
1057 + cc770_write_reg(priv, msgobj[mo].ctrl0,
1058 + MSGVAL_RES | TXIE_RES | RXIE_RES | INTPND_RES);
1059 cc770_write_reg(priv, msgobj[mo].ctrl1,
1060 RMTPND_RES | TXRQST_RES | CPUUPD_SET | NEWDAT_RES);
1061 - cc770_write_reg(priv, msgobj[mo].ctrl0,
1062 - MSGVAL_SET | TXIE_SET | RXIE_RES | INTPND_RES);
1063 +
1064 if (id & CAN_EFF_FLAG) {
1065 id &= CAN_EFF_MASK;
1066 cc770_write_reg(priv, msgobj[mo].config,
1067 @@ -439,22 +425,30 @@ static netdev_tx_t cc770_start_xmit(struct sk_buff *skb, struct net_device *dev)
1068 for (i = 0; i < dlc; i++)
1069 cc770_write_reg(priv, msgobj[mo].data[i], cf->data[i]);
1070
1071 - /* Store echo skb before starting the transfer */
1072 - can_put_echo_skb(skb, dev, 0);
1073 -
1074 cc770_write_reg(priv, msgobj[mo].ctrl1,
1075 - RMTPND_RES | TXRQST_SET | CPUUPD_RES | NEWDAT_UNC);
1076 + RMTPND_UNC | TXRQST_SET | CPUUPD_RES | NEWDAT_UNC);
1077 + cc770_write_reg(priv, msgobj[mo].ctrl0,
1078 + MSGVAL_SET | TXIE_SET | RXIE_SET | INTPND_UNC);
1079 +}
1080
1081 - stats->tx_bytes += dlc;
1082 +static netdev_tx_t cc770_start_xmit(struct sk_buff *skb, struct net_device *dev)
1083 +{
1084 + struct cc770_priv *priv = netdev_priv(dev);
1085 + unsigned int mo = obj2msgobj(CC770_OBJ_TX);
1086
1087 + if (can_dropped_invalid_skb(dev, skb))
1088 + return NETDEV_TX_OK;
1089
1090 - /*
1091 - * HM: We had some cases of repeated IRQs so make sure the
1092 - * INT is acknowledged I know it's already further up, but
1093 - * doing again fixed the issue
1094 - */
1095 - cc770_write_reg(priv, msgobj[mo].ctrl0,
1096 - MSGVAL_UNC | TXIE_UNC | RXIE_UNC | INTPND_RES);
1097 + netif_stop_queue(dev);
1098 +
1099 + if ((cc770_read_reg(priv,
1100 + msgobj[mo].ctrl1) & TXRQST_UNC) == TXRQST_SET) {
1101 + netdev_err(dev, "TX register is still occupied!\n");
1102 + return NETDEV_TX_BUSY;
1103 + }
1104 +
1105 + priv->tx_skb = skb;
1106 + cc770_tx(dev, mo);
1107
1108 return NETDEV_TX_OK;
1109 }
1110 @@ -680,19 +674,46 @@ static void cc770_tx_interrupt(struct net_device *dev, unsigned int o)
1111 struct cc770_priv *priv = netdev_priv(dev);
1112 struct net_device_stats *stats = &dev->stats;
1113 unsigned int mo = obj2msgobj(o);
1114 + struct can_frame *cf;
1115 + u8 ctrl1;
1116 +
1117 + ctrl1 = cc770_read_reg(priv, msgobj[mo].ctrl1);
1118
1119 - /* Nothing more to send, switch off interrupts */
1120 cc770_write_reg(priv, msgobj[mo].ctrl0,
1121 MSGVAL_RES | TXIE_RES | RXIE_RES | INTPND_RES);
1122 - /*
1123 - * We had some cases of repeated IRQ so make sure the
1124 - * INT is acknowledged
1125 + cc770_write_reg(priv, msgobj[mo].ctrl1,
1126 + RMTPND_RES | TXRQST_RES | MSGLST_RES | NEWDAT_RES);
1127 +
1128 + if (unlikely(!priv->tx_skb)) {
1129 + netdev_err(dev, "missing tx skb in tx interrupt\n");
1130 + return;
1131 + }
1132 +
1133 + if (unlikely(ctrl1 & MSGLST_SET)) {
1134 + stats->rx_over_errors++;
1135 + stats->rx_errors++;
1136 + }
1137 +
1138 + /* When the CC770 is sending an RTR message and it receives a regular
1139 + * message that matches the id of the RTR message, it will overwrite the
1140 + * outgoing message in the TX register. When this happens we must
1141 + * process the received message and try to transmit the outgoing skb
1142 + * again.
1143 */
1144 - cc770_write_reg(priv, msgobj[mo].ctrl0,
1145 - MSGVAL_UNC | TXIE_UNC | RXIE_UNC | INTPND_RES);
1146 + if (unlikely(ctrl1 & NEWDAT_SET)) {
1147 + cc770_rx(dev, mo, ctrl1);
1148 + cc770_tx(dev, mo);
1149 + return;
1150 + }
1151
1152 + cf = (struct can_frame *)priv->tx_skb->data;
1153 + stats->tx_bytes += cf->can_dlc;
1154 stats->tx_packets++;
1155 +
1156 + can_put_echo_skb(priv->tx_skb, dev, 0);
1157 can_get_echo_skb(dev, 0);
1158 + priv->tx_skb = NULL;
1159 +
1160 netif_wake_queue(dev);
1161 }
1162
1163 @@ -804,6 +825,7 @@ struct net_device *alloc_cc770dev(int sizeof_priv)
1164 priv->can.do_set_bittiming = cc770_set_bittiming;
1165 priv->can.do_set_mode = cc770_set_mode;
1166 priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES;
1167 + priv->tx_skb = NULL;
1168
1169 memcpy(priv->obj_flags, cc770_obj_flags, sizeof(cc770_obj_flags));
1170
1171 diff --git a/drivers/net/can/cc770/cc770.h b/drivers/net/can/cc770/cc770.h
1172 index a1739db98d91..95752e1d1283 100644
1173 --- a/drivers/net/can/cc770/cc770.h
1174 +++ b/drivers/net/can/cc770/cc770.h
1175 @@ -193,6 +193,8 @@ struct cc770_priv {
1176 u8 cpu_interface; /* CPU interface register */
1177 u8 clkout; /* Clock out register */
1178 u8 bus_config; /* Bus conffiguration register */
1179 +
1180 + struct sk_buff *tx_skb;
1181 };
1182
1183 struct net_device *alloc_cc770dev(int sizeof_priv);
1184 diff --git a/drivers/net/can/ifi_canfd/ifi_canfd.c b/drivers/net/can/ifi_canfd/ifi_canfd.c
1185 index c06ef438f23f..6c676403f823 100644
1186 --- a/drivers/net/can/ifi_canfd/ifi_canfd.c
1187 +++ b/drivers/net/can/ifi_canfd/ifi_canfd.c
1188 @@ -30,6 +30,7 @@
1189 #define IFI_CANFD_STCMD_ERROR_ACTIVE BIT(2)
1190 #define IFI_CANFD_STCMD_ERROR_PASSIVE BIT(3)
1191 #define IFI_CANFD_STCMD_BUSOFF BIT(4)
1192 +#define IFI_CANFD_STCMD_ERROR_WARNING BIT(5)
1193 #define IFI_CANFD_STCMD_BUSMONITOR BIT(16)
1194 #define IFI_CANFD_STCMD_LOOPBACK BIT(18)
1195 #define IFI_CANFD_STCMD_DISABLE_CANFD BIT(24)
1196 @@ -52,7 +53,10 @@
1197 #define IFI_CANFD_TXSTCMD_OVERFLOW BIT(13)
1198
1199 #define IFI_CANFD_INTERRUPT 0xc
1200 +#define IFI_CANFD_INTERRUPT_ERROR_BUSOFF BIT(0)
1201 #define IFI_CANFD_INTERRUPT_ERROR_WARNING BIT(1)
1202 +#define IFI_CANFD_INTERRUPT_ERROR_STATE_CHG BIT(2)
1203 +#define IFI_CANFD_INTERRUPT_ERROR_REC_TEC_INC BIT(3)
1204 #define IFI_CANFD_INTERRUPT_ERROR_COUNTER BIT(10)
1205 #define IFI_CANFD_INTERRUPT_TXFIFO_EMPTY BIT(16)
1206 #define IFI_CANFD_INTERRUPT_TXFIFO_REMOVE BIT(22)
1207 @@ -61,6 +65,10 @@
1208 #define IFI_CANFD_INTERRUPT_SET_IRQ ((u32)BIT(31))
1209
1210 #define IFI_CANFD_IRQMASK 0x10
1211 +#define IFI_CANFD_IRQMASK_ERROR_BUSOFF BIT(0)
1212 +#define IFI_CANFD_IRQMASK_ERROR_WARNING BIT(1)
1213 +#define IFI_CANFD_IRQMASK_ERROR_STATE_CHG BIT(2)
1214 +#define IFI_CANFD_IRQMASK_ERROR_REC_TEC_INC BIT(3)
1215 #define IFI_CANFD_IRQMASK_SET_ERR BIT(7)
1216 #define IFI_CANFD_IRQMASK_SET_TS BIT(15)
1217 #define IFI_CANFD_IRQMASK_TXFIFO_EMPTY BIT(16)
1218 @@ -136,6 +144,8 @@
1219 #define IFI_CANFD_SYSCLOCK 0x50
1220
1221 #define IFI_CANFD_VER 0x54
1222 +#define IFI_CANFD_VER_REV_MASK 0xff
1223 +#define IFI_CANFD_VER_REV_MIN_SUPPORTED 0x15
1224
1225 #define IFI_CANFD_IP_ID 0x58
1226 #define IFI_CANFD_IP_ID_VALUE 0xD073CAFD
1227 @@ -220,7 +230,10 @@ static void ifi_canfd_irq_enable(struct net_device *ndev, bool enable)
1228
1229 if (enable) {
1230 enirq = IFI_CANFD_IRQMASK_TXFIFO_EMPTY |
1231 - IFI_CANFD_IRQMASK_RXFIFO_NEMPTY;
1232 + IFI_CANFD_IRQMASK_RXFIFO_NEMPTY |
1233 + IFI_CANFD_IRQMASK_ERROR_STATE_CHG |
1234 + IFI_CANFD_IRQMASK_ERROR_WARNING |
1235 + IFI_CANFD_IRQMASK_ERROR_BUSOFF;
1236 if (priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)
1237 enirq |= IFI_CANFD_INTERRUPT_ERROR_COUNTER;
1238 }
1239 @@ -361,12 +374,13 @@ static int ifi_canfd_handle_lost_msg(struct net_device *ndev)
1240 return 1;
1241 }
1242
1243 -static int ifi_canfd_handle_lec_err(struct net_device *ndev, const u32 errctr)
1244 +static int ifi_canfd_handle_lec_err(struct net_device *ndev)
1245 {
1246 struct ifi_canfd_priv *priv = netdev_priv(ndev);
1247 struct net_device_stats *stats = &ndev->stats;
1248 struct can_frame *cf;
1249 struct sk_buff *skb;
1250 + u32 errctr = readl(priv->base + IFI_CANFD_ERROR_CTR);
1251 const u32 errmask = IFI_CANFD_ERROR_CTR_OVERLOAD_FIRST |
1252 IFI_CANFD_ERROR_CTR_ACK_ERROR_FIRST |
1253 IFI_CANFD_ERROR_CTR_BIT0_ERROR_FIRST |
1254 @@ -449,6 +463,11 @@ static int ifi_canfd_handle_state_change(struct net_device *ndev,
1255
1256 switch (new_state) {
1257 case CAN_STATE_ERROR_ACTIVE:
1258 + /* error active state */
1259 + priv->can.can_stats.error_warning++;
1260 + priv->can.state = CAN_STATE_ERROR_ACTIVE;
1261 + break;
1262 + case CAN_STATE_ERROR_WARNING:
1263 /* error warning state */
1264 priv->can.can_stats.error_warning++;
1265 priv->can.state = CAN_STATE_ERROR_WARNING;
1266 @@ -477,7 +496,7 @@ static int ifi_canfd_handle_state_change(struct net_device *ndev,
1267 ifi_canfd_get_berr_counter(ndev, &bec);
1268
1269 switch (new_state) {
1270 - case CAN_STATE_ERROR_ACTIVE:
1271 + case CAN_STATE_ERROR_WARNING:
1272 /* error warning state */
1273 cf->can_id |= CAN_ERR_CRTL;
1274 cf->data[1] = (bec.txerr > bec.rxerr) ?
1275 @@ -510,22 +529,21 @@ static int ifi_canfd_handle_state_change(struct net_device *ndev,
1276 return 1;
1277 }
1278
1279 -static int ifi_canfd_handle_state_errors(struct net_device *ndev, u32 stcmd)
1280 +static int ifi_canfd_handle_state_errors(struct net_device *ndev)
1281 {
1282 struct ifi_canfd_priv *priv = netdev_priv(ndev);
1283 + u32 stcmd = readl(priv->base + IFI_CANFD_STCMD);
1284 int work_done = 0;
1285 - u32 isr;
1286
1287 - /*
1288 - * The ErrWarn condition is a little special, since the bit is
1289 - * located in the INTERRUPT register instead of STCMD register.
1290 - */
1291 - isr = readl(priv->base + IFI_CANFD_INTERRUPT);
1292 - if ((isr & IFI_CANFD_INTERRUPT_ERROR_WARNING) &&
1293 + if ((stcmd & IFI_CANFD_STCMD_ERROR_ACTIVE) &&
1294 + (priv->can.state != CAN_STATE_ERROR_ACTIVE)) {
1295 + netdev_dbg(ndev, "Error, entered active state\n");
1296 + work_done += ifi_canfd_handle_state_change(ndev,
1297 + CAN_STATE_ERROR_ACTIVE);
1298 + }
1299 +
1300 + if ((stcmd & IFI_CANFD_STCMD_ERROR_WARNING) &&
1301 (priv->can.state != CAN_STATE_ERROR_WARNING)) {
1302 - /* Clear the interrupt */
1303 - writel(IFI_CANFD_INTERRUPT_ERROR_WARNING,
1304 - priv->base + IFI_CANFD_INTERRUPT);
1305 netdev_dbg(ndev, "Error, entered warning state\n");
1306 work_done += ifi_canfd_handle_state_change(ndev,
1307 CAN_STATE_ERROR_WARNING);
1308 @@ -552,18 +570,11 @@ static int ifi_canfd_poll(struct napi_struct *napi, int quota)
1309 {
1310 struct net_device *ndev = napi->dev;
1311 struct ifi_canfd_priv *priv = netdev_priv(ndev);
1312 - const u32 stcmd_state_mask = IFI_CANFD_STCMD_ERROR_PASSIVE |
1313 - IFI_CANFD_STCMD_BUSOFF;
1314 - int work_done = 0;
1315 -
1316 - u32 stcmd = readl(priv->base + IFI_CANFD_STCMD);
1317 u32 rxstcmd = readl(priv->base + IFI_CANFD_RXSTCMD);
1318 - u32 errctr = readl(priv->base + IFI_CANFD_ERROR_CTR);
1319 + int work_done = 0;
1320
1321 /* Handle bus state changes */
1322 - if ((stcmd & stcmd_state_mask) ||
1323 - ((stcmd & IFI_CANFD_STCMD_ERROR_ACTIVE) == 0))
1324 - work_done += ifi_canfd_handle_state_errors(ndev, stcmd);
1325 + work_done += ifi_canfd_handle_state_errors(ndev);
1326
1327 /* Handle lost messages on RX */
1328 if (rxstcmd & IFI_CANFD_RXSTCMD_OVERFLOW)
1329 @@ -571,7 +582,7 @@ static int ifi_canfd_poll(struct napi_struct *napi, int quota)
1330
1331 /* Handle lec errors on the bus */
1332 if (priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)
1333 - work_done += ifi_canfd_handle_lec_err(ndev, errctr);
1334 + work_done += ifi_canfd_handle_lec_err(ndev);
1335
1336 /* Handle normal messages on RX */
1337 if (!(rxstcmd & IFI_CANFD_RXSTCMD_EMPTY))
1338 @@ -592,12 +603,13 @@ static irqreturn_t ifi_canfd_isr(int irq, void *dev_id)
1339 struct net_device_stats *stats = &ndev->stats;
1340 const u32 rx_irq_mask = IFI_CANFD_INTERRUPT_RXFIFO_NEMPTY |
1341 IFI_CANFD_INTERRUPT_RXFIFO_NEMPTY_PER |
1342 + IFI_CANFD_INTERRUPT_ERROR_COUNTER |
1343 + IFI_CANFD_INTERRUPT_ERROR_STATE_CHG |
1344 IFI_CANFD_INTERRUPT_ERROR_WARNING |
1345 - IFI_CANFD_INTERRUPT_ERROR_COUNTER;
1346 + IFI_CANFD_INTERRUPT_ERROR_BUSOFF;
1347 const u32 tx_irq_mask = IFI_CANFD_INTERRUPT_TXFIFO_EMPTY |
1348 IFI_CANFD_INTERRUPT_TXFIFO_REMOVE;
1349 - const u32 clr_irq_mask = ~((u32)(IFI_CANFD_INTERRUPT_SET_IRQ |
1350 - IFI_CANFD_INTERRUPT_ERROR_WARNING));
1351 + const u32 clr_irq_mask = ~((u32)IFI_CANFD_INTERRUPT_SET_IRQ);
1352 u32 isr;
1353
1354 isr = readl(priv->base + IFI_CANFD_INTERRUPT);
1355 @@ -933,7 +945,7 @@ static int ifi_canfd_plat_probe(struct platform_device *pdev)
1356 struct resource *res;
1357 void __iomem *addr;
1358 int irq, ret;
1359 - u32 id;
1360 + u32 id, rev;
1361
1362 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1363 addr = devm_ioremap_resource(dev, res);
1364 @@ -947,6 +959,13 @@ static int ifi_canfd_plat_probe(struct platform_device *pdev)
1365 return -EINVAL;
1366 }
1367
1368 + rev = readl(addr + IFI_CANFD_VER) & IFI_CANFD_VER_REV_MASK;
1369 + if (rev < IFI_CANFD_VER_REV_MIN_SUPPORTED) {
1370 + dev_err(dev, "This block is too old (rev %i), minimum supported is rev %i\n",
1371 + rev, IFI_CANFD_VER_REV_MIN_SUPPORTED);
1372 + return -EINVAL;
1373 + }
1374 +
1375 ndev = alloc_candev(sizeof(*priv), 1);
1376 if (!ndev)
1377 return -ENOMEM;
1378 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
1379 index 85d949e03f79..f78d91b69287 100644
1380 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
1381 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
1382 @@ -462,25 +462,23 @@ static int brcmf_p2p_set_firmware(struct brcmf_if *ifp, u8 *p2p_mac)
1383 * @dev_addr: optional device address.
1384 *
1385 * P2P needs mac addresses for P2P device and interface. If no device
1386 - * address it specified, these are derived from the primary net device, ie.
1387 - * the permanent ethernet address of the device.
1388 + * address it specified, these are derived from a random ethernet
1389 + * address.
1390 */
1391 static void brcmf_p2p_generate_bss_mac(struct brcmf_p2p_info *p2p, u8 *dev_addr)
1392 {
1393 - struct brcmf_if *pri_ifp = p2p->bss_idx[P2PAPI_BSSCFG_PRIMARY].vif->ifp;
1394 - bool local_admin = false;
1395 + bool random_addr = false;
1396
1397 - if (!dev_addr || is_zero_ether_addr(dev_addr)) {
1398 - dev_addr = pri_ifp->mac_addr;
1399 - local_admin = true;
1400 - }
1401 + if (!dev_addr || is_zero_ether_addr(dev_addr))
1402 + random_addr = true;
1403
1404 - /* Generate the P2P Device Address. This consists of the device's
1405 - * primary MAC address with the locally administered bit set.
1406 + /* Generate the P2P Device Address obtaining a random ethernet
1407 + * address with the locally administered bit set.
1408 */
1409 - memcpy(p2p->dev_addr, dev_addr, ETH_ALEN);
1410 - if (local_admin)
1411 - p2p->dev_addr[0] |= 0x02;
1412 + if (random_addr)
1413 + eth_random_addr(p2p->dev_addr);
1414 + else
1415 + memcpy(p2p->dev_addr, dev_addr, ETH_ALEN);
1416
1417 /* Generate the P2P Interface Address. If the discovery and connection
1418 * BSSCFGs need to simultaneously co-exist, then this address must be
1419 diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c
1420 index aba60c3145c5..618e509e75d6 100644
1421 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c
1422 +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c
1423 @@ -1125,7 +1125,8 @@ static void _rtl8723be_enable_aspm_back_door(struct ieee80211_hw *hw)
1424
1425 /* Configuration Space offset 0x70f BIT7 is used to control L0S */
1426 tmp8 = _rtl8723be_dbi_read(rtlpriv, 0x70f);
1427 - _rtl8723be_dbi_write(rtlpriv, 0x70f, tmp8 | BIT(7));
1428 + _rtl8723be_dbi_write(rtlpriv, 0x70f, tmp8 | BIT(7) |
1429 + ASPM_L1_LATENCY << 3);
1430
1431 /* Configuration Space offset 0x719 Bit3 is for L1
1432 * BIT4 is for clock request
1433 diff --git a/drivers/nvdimm/blk.c b/drivers/nvdimm/blk.c
1434 index 9faaa9694d87..77db9795510f 100644
1435 --- a/drivers/nvdimm/blk.c
1436 +++ b/drivers/nvdimm/blk.c
1437 @@ -286,8 +286,6 @@ static int nsblk_attach_disk(struct nd_namespace_blk *nsblk)
1438 disk->queue = q;
1439 disk->flags = GENHD_FL_EXT_DEVT;
1440 nvdimm_namespace_disk_name(&nsblk->common, disk->disk_name);
1441 - set_capacity(disk, 0);
1442 - device_add_disk(dev, disk);
1443
1444 if (devm_add_action_or_reset(dev, nd_blk_release_disk, disk))
1445 return -ENOMEM;
1446 @@ -300,6 +298,7 @@ static int nsblk_attach_disk(struct nd_namespace_blk *nsblk)
1447 }
1448
1449 set_capacity(disk, available_disk_size >> SECTOR_SHIFT);
1450 + device_add_disk(dev, disk);
1451 revalidate_disk(disk);
1452 return 0;
1453 }
1454 diff --git a/drivers/nvdimm/btt.c b/drivers/nvdimm/btt.c
1455 index 7121453ec047..0c46ada027cf 100644
1456 --- a/drivers/nvdimm/btt.c
1457 +++ b/drivers/nvdimm/btt.c
1458 @@ -1392,8 +1392,6 @@ static int btt_blk_init(struct btt *btt)
1459 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, btt->btt_queue);
1460 btt->btt_queue->queuedata = btt;
1461
1462 - set_capacity(btt->btt_disk, 0);
1463 - device_add_disk(&btt->nd_btt->dev, btt->btt_disk);
1464 if (btt_meta_size(btt)) {
1465 int rc = nd_integrity_init(btt->btt_disk, btt_meta_size(btt));
1466
1467 @@ -1405,6 +1403,7 @@ static int btt_blk_init(struct btt *btt)
1468 }
1469 }
1470 set_capacity(btt->btt_disk, btt->nlba * btt->sector_size >> 9);
1471 + device_add_disk(&btt->nd_btt->dev, btt->btt_disk);
1472 btt->nd_btt->size = btt->nlba * (u64)btt->sector_size;
1473 revalidate_disk(btt->btt_disk);
1474
1475 diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
1476 index 4c9fb8b323e8..fb177dc576d6 100644
1477 --- a/drivers/pci/quirks.c
1478 +++ b/drivers/pci/quirks.c
1479 @@ -3877,6 +3877,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9230,
1480 quirk_dma_func1_alias);
1481 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TTI, 0x0642,
1482 quirk_dma_func1_alias);
1483 +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TTI, 0x0645,
1484 + quirk_dma_func1_alias);
1485 /* https://bugs.gentoo.org/show_bug.cgi?id=497630 */
1486 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_JMICRON,
1487 PCI_DEVICE_ID_JMICRON_JMB388_ESD,
1488 diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec.c b/drivers/staging/lustre/lustre/ptlrpc/sec.c
1489 index a7416cd9ac71..7b0587d8b176 100644
1490 --- a/drivers/staging/lustre/lustre/ptlrpc/sec.c
1491 +++ b/drivers/staging/lustre/lustre/ptlrpc/sec.c
1492 @@ -838,7 +838,7 @@ void sptlrpc_request_out_callback(struct ptlrpc_request *req)
1493 if (req->rq_pool || !req->rq_reqbuf)
1494 return;
1495
1496 - kfree(req->rq_reqbuf);
1497 + kvfree(req->rq_reqbuf);
1498 req->rq_reqbuf = NULL;
1499 req->rq_reqbuf_len = 0;
1500 }
1501 diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
1502 index ce2c3c6349d4..68c7bb0b7991 100644
1503 --- a/drivers/tty/vt/vt.c
1504 +++ b/drivers/tty/vt/vt.c
1505 @@ -1727,7 +1727,7 @@ static void reset_terminal(struct vc_data *vc, int do_clear)
1506 default_attr(vc);
1507 update_attr(vc);
1508
1509 - vc->vc_tab_stop[0] = 0x01010100;
1510 + vc->vc_tab_stop[0] =
1511 vc->vc_tab_stop[1] =
1512 vc->vc_tab_stop[2] =
1513 vc->vc_tab_stop[3] =
1514 @@ -1771,7 +1771,7 @@ static void do_con_trol(struct tty_struct *tty, struct vc_data *vc, int c)
1515 vc->vc_pos -= (vc->vc_x << 1);
1516 while (vc->vc_x < vc->vc_cols - 1) {
1517 vc->vc_x++;
1518 - if (vc->vc_tab_stop[vc->vc_x >> 5] & (1 << (vc->vc_x & 31)))
1519 + if (vc->vc_tab_stop[7 & (vc->vc_x >> 5)] & (1 << (vc->vc_x & 31)))
1520 break;
1521 }
1522 vc->vc_pos += (vc->vc_x << 1);
1523 @@ -1831,7 +1831,7 @@ static void do_con_trol(struct tty_struct *tty, struct vc_data *vc, int c)
1524 lf(vc);
1525 return;
1526 case 'H':
1527 - vc->vc_tab_stop[vc->vc_x >> 5] |= (1 << (vc->vc_x & 31));
1528 + vc->vc_tab_stop[7 & (vc->vc_x >> 5)] |= (1 << (vc->vc_x & 31));
1529 return;
1530 case 'Z':
1531 respond_ID(tty);
1532 @@ -2024,7 +2024,7 @@ static void do_con_trol(struct tty_struct *tty, struct vc_data *vc, int c)
1533 return;
1534 case 'g':
1535 if (!vc->vc_par[0])
1536 - vc->vc_tab_stop[vc->vc_x >> 5] &= ~(1 << (vc->vc_x & 31));
1537 + vc->vc_tab_stop[7 & (vc->vc_x >> 5)] &= ~(1 << (vc->vc_x & 31));
1538 else if (vc->vc_par[0] == 3) {
1539 vc->vc_tab_stop[0] =
1540 vc->vc_tab_stop[1] =
1541 diff --git a/drivers/watchdog/wdat_wdt.c b/drivers/watchdog/wdat_wdt.c
1542 index 6d1fbda0f461..0da9943d405f 100644
1543 --- a/drivers/watchdog/wdat_wdt.c
1544 +++ b/drivers/watchdog/wdat_wdt.c
1545 @@ -392,7 +392,7 @@ static int wdat_wdt_probe(struct platform_device *pdev)
1546
1547 memset(&r, 0, sizeof(r));
1548 r.start = gas->address;
1549 - r.end = r.start + gas->access_width;
1550 + r.end = r.start + gas->access_width - 1;
1551 if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
1552 r.flags = IORESOURCE_MEM;
1553 } else if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
1554 diff --git a/fs/ncpfs/ncplib_kernel.c b/fs/ncpfs/ncplib_kernel.c
1555 index 88dbbc9fcf4d..f571570a2e72 100644
1556 --- a/fs/ncpfs/ncplib_kernel.c
1557 +++ b/fs/ncpfs/ncplib_kernel.c
1558 @@ -980,6 +980,10 @@ ncp_read_kernel(struct ncp_server *server, const char *file_id,
1559 goto out;
1560 }
1561 *bytes_read = ncp_reply_be16(server, 0);
1562 + if (*bytes_read > to_read) {
1563 + result = -EINVAL;
1564 + goto out;
1565 + }
1566 source = ncp_reply_data(server, 2 + (offset & 1));
1567
1568 memcpy(target, source, *bytes_read);
1569 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
1570 index f463c4e0b2ea..12d780718b48 100644
1571 --- a/fs/nfsd/nfs4state.c
1572 +++ b/fs/nfsd/nfs4state.c
1573 @@ -263,6 +263,35 @@ free_blocked_lock(struct nfsd4_blocked_lock *nbl)
1574 kfree(nbl);
1575 }
1576
1577 +static void
1578 +remove_blocked_locks(struct nfs4_lockowner *lo)
1579 +{
1580 + struct nfs4_client *clp = lo->lo_owner.so_client;
1581 + struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
1582 + struct nfsd4_blocked_lock *nbl;
1583 + LIST_HEAD(reaplist);
1584 +
1585 + /* Dequeue all blocked locks */
1586 + spin_lock(&nn->blocked_locks_lock);
1587 + while (!list_empty(&lo->lo_blocked)) {
1588 + nbl = list_first_entry(&lo->lo_blocked,
1589 + struct nfsd4_blocked_lock,
1590 + nbl_list);
1591 + list_del_init(&nbl->nbl_list);
1592 + list_move(&nbl->nbl_lru, &reaplist);
1593 + }
1594 + spin_unlock(&nn->blocked_locks_lock);
1595 +
1596 + /* Now free them */
1597 + while (!list_empty(&reaplist)) {
1598 + nbl = list_first_entry(&reaplist, struct nfsd4_blocked_lock,
1599 + nbl_lru);
1600 + list_del_init(&nbl->nbl_lru);
1601 + posix_unblock_lock(&nbl->nbl_lock);
1602 + free_blocked_lock(nbl);
1603 + }
1604 +}
1605 +
1606 static int
1607 nfsd4_cb_notify_lock_done(struct nfsd4_callback *cb, struct rpc_task *task)
1608 {
1609 @@ -1854,6 +1883,7 @@ static __be32 mark_client_expired_locked(struct nfs4_client *clp)
1610 static void
1611 __destroy_client(struct nfs4_client *clp)
1612 {
1613 + int i;
1614 struct nfs4_openowner *oo;
1615 struct nfs4_delegation *dp;
1616 struct list_head reaplist;
1617 @@ -1883,6 +1913,16 @@ __destroy_client(struct nfs4_client *clp)
1618 nfs4_get_stateowner(&oo->oo_owner);
1619 release_openowner(oo);
1620 }
1621 + for (i = 0; i < OWNER_HASH_SIZE; i++) {
1622 + struct nfs4_stateowner *so, *tmp;
1623 +
1624 + list_for_each_entry_safe(so, tmp, &clp->cl_ownerstr_hashtbl[i],
1625 + so_strhash) {
1626 + /* Should be no openowners at this point */
1627 + WARN_ON_ONCE(so->so_is_open_owner);
1628 + remove_blocked_locks(lockowner(so));
1629 + }
1630 + }
1631 nfsd4_return_all_client_layouts(clp);
1632 nfsd4_shutdown_callback(clp);
1633 if (clp->cl_cb_conn.cb_xprt)
1634 @@ -6266,6 +6306,7 @@ nfsd4_release_lockowner(struct svc_rqst *rqstp,
1635 }
1636 spin_unlock(&clp->cl_lock);
1637 free_ol_stateid_reaplist(&reaplist);
1638 + remove_blocked_locks(lo);
1639 nfs4_put_stateowner(&lo->lo_owner);
1640
1641 return status;
1642 @@ -7051,6 +7092,8 @@ nfs4_state_destroy_net(struct net *net)
1643 }
1644 }
1645
1646 + WARN_ON(!list_empty(&nn->blocked_locks_lru));
1647 +
1648 for (i = 0; i < CLIENT_HASH_SIZE; i++) {
1649 while (!list_empty(&nn->unconf_id_hashtbl[i])) {
1650 clp = list_entry(nn->unconf_id_hashtbl[i].next, struct nfs4_client, cl_idhash);
1651 @@ -7117,7 +7160,6 @@ nfs4_state_shutdown_net(struct net *net)
1652 struct nfs4_delegation *dp = NULL;
1653 struct list_head *pos, *next, reaplist;
1654 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
1655 - struct nfsd4_blocked_lock *nbl;
1656
1657 cancel_delayed_work_sync(&nn->laundromat_work);
1658 locks_end_grace(&nn->nfsd4_manager);
1659 @@ -7138,24 +7180,6 @@ nfs4_state_shutdown_net(struct net *net)
1660 nfs4_put_stid(&dp->dl_stid);
1661 }
1662
1663 - BUG_ON(!list_empty(&reaplist));
1664 - spin_lock(&nn->blocked_locks_lock);
1665 - while (!list_empty(&nn->blocked_locks_lru)) {
1666 - nbl = list_first_entry(&nn->blocked_locks_lru,
1667 - struct nfsd4_blocked_lock, nbl_lru);
1668 - list_move(&nbl->nbl_lru, &reaplist);
1669 - list_del_init(&nbl->nbl_list);
1670 - }
1671 - spin_unlock(&nn->blocked_locks_lock);
1672 -
1673 - while (!list_empty(&reaplist)) {
1674 - nbl = list_first_entry(&reaplist,
1675 - struct nfsd4_blocked_lock, nbl_lru);
1676 - list_del_init(&nbl->nbl_lru);
1677 - posix_unblock_lock(&nbl->nbl_lock);
1678 - free_blocked_lock(nbl);
1679 - }
1680 -
1681 nfsd4_client_tracking_exit(net);
1682 nfs4_state_destroy_net(net);
1683 }
1684 diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
1685 index c4f8fd2fd384..f6ea0f3c03f8 100644
1686 --- a/include/asm-generic/pgtable.h
1687 +++ b/include/asm-generic/pgtable.h
1688 @@ -764,6 +764,8 @@ int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot);
1689 int pmd_set_huge(pmd_t *pmd, phys_addr_t addr, pgprot_t prot);
1690 int pud_clear_huge(pud_t *pud);
1691 int pmd_clear_huge(pmd_t *pmd);
1692 +int pud_free_pmd_page(pud_t *pud);
1693 +int pmd_free_pte_page(pmd_t *pmd);
1694 #else /* !CONFIG_HAVE_ARCH_HUGE_VMAP */
1695 static inline int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot)
1696 {
1697 @@ -781,6 +783,14 @@ static inline int pmd_clear_huge(pmd_t *pmd)
1698 {
1699 return 0;
1700 }
1701 +static inline int pud_free_pmd_page(pud_t *pud)
1702 +{
1703 + return 0;
1704 +}
1705 +static inline int pmd_free_pte_page(pmd_t *pmd)
1706 +{
1707 + return 0;
1708 +}
1709 #endif /* CONFIG_HAVE_ARCH_HUGE_VMAP */
1710
1711 #ifndef __HAVE_ARCH_FLUSH_PMD_TLB_RANGE
1712 diff --git a/include/linux/fsl_ifc.h b/include/linux/fsl_ifc.h
1713 index c332f0a45607..3fdfede2f0f3 100644
1714 --- a/include/linux/fsl_ifc.h
1715 +++ b/include/linux/fsl_ifc.h
1716 @@ -734,11 +734,7 @@ struct fsl_ifc_nand {
1717 u32 res19[0x10];
1718 __be32 nand_fsr;
1719 u32 res20;
1720 - /* The V1 nand_eccstat is actually 4 words that overlaps the
1721 - * V2 nand_eccstat.
1722 - */
1723 - __be32 v1_nand_eccstat[2];
1724 - __be32 v2_nand_eccstat[6];
1725 + __be32 nand_eccstat[8];
1726 u32 res21[0x1c];
1727 __be32 nanndcr;
1728 u32 res22[0x2];
1729 diff --git a/include/uapi/linux/usb/audio.h b/include/uapi/linux/usb/audio.h
1730 index d2314be4f0c0..19f9dc2c06f6 100644
1731 --- a/include/uapi/linux/usb/audio.h
1732 +++ b/include/uapi/linux/usb/audio.h
1733 @@ -369,7 +369,7 @@ static inline __u8 uac_processing_unit_bControlSize(struct uac_processing_unit_d
1734 {
1735 return (protocol == UAC_VERSION_1) ?
1736 desc->baSourceID[desc->bNrInPins + 4] :
1737 - desc->baSourceID[desc->bNrInPins + 6];
1738 + 2; /* in UAC2, this value is constant */
1739 }
1740
1741 static inline __u8 *uac_processing_unit_bmControls(struct uac_processing_unit_descriptor *desc,
1742 @@ -377,7 +377,7 @@ static inline __u8 *uac_processing_unit_bmControls(struct uac_processing_unit_de
1743 {
1744 return (protocol == UAC_VERSION_1) ?
1745 &desc->baSourceID[desc->bNrInPins + 5] :
1746 - &desc->baSourceID[desc->bNrInPins + 7];
1747 + &desc->baSourceID[desc->bNrInPins + 6];
1748 }
1749
1750 static inline __u8 uac_processing_unit_iProcessing(struct uac_processing_unit_descriptor *desc,
1751 diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
1752 index 91a2d3752007..f8b4e3e16cef 100644
1753 --- a/kernel/bpf/syscall.c
1754 +++ b/kernel/bpf/syscall.c
1755 @@ -801,7 +801,7 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz
1756 union bpf_attr attr = {};
1757 int err;
1758
1759 - if (!capable(CAP_SYS_ADMIN) && sysctl_unprivileged_bpf_disabled)
1760 + if (sysctl_unprivileged_bpf_disabled && !capable(CAP_SYS_ADMIN))
1761 return -EPERM;
1762
1763 if (!access_ok(VERIFY_READ, uattr, 1))
1764 diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
1765 index 5ff45cae4ac4..ea3ed03fed7e 100644
1766 --- a/kernel/trace/trace_kprobe.c
1767 +++ b/kernel/trace/trace_kprobe.c
1768 @@ -607,7 +607,7 @@ static int create_trace_kprobe(int argc, char **argv)
1769 bool is_return = false, is_delete = false;
1770 char *symbol = NULL, *event = NULL, *group = NULL;
1771 char *arg;
1772 - unsigned long offset = 0;
1773 + long offset = 0;
1774 void *addr = NULL;
1775 char buf[MAX_EVENT_NAME_LEN];
1776
1777 @@ -675,7 +675,7 @@ static int create_trace_kprobe(int argc, char **argv)
1778 symbol = argv[1];
1779 /* TODO: support .init module functions */
1780 ret = traceprobe_split_symbol_offset(symbol, &offset);
1781 - if (ret) {
1782 + if (ret || offset < 0 || offset > UINT_MAX) {
1783 pr_info("Failed to parse either an address or a symbol.\n");
1784 return ret;
1785 }
1786 diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
1787 index 8c0553d9afd3..5ea191b917e9 100644
1788 --- a/kernel/trace/trace_probe.c
1789 +++ b/kernel/trace/trace_probe.c
1790 @@ -319,7 +319,7 @@ static fetch_func_t get_fetch_size_function(const struct fetch_type *type,
1791 }
1792
1793 /* Split symbol and offset. */
1794 -int traceprobe_split_symbol_offset(char *symbol, unsigned long *offset)
1795 +int traceprobe_split_symbol_offset(char *symbol, long *offset)
1796 {
1797 char *tmp;
1798 int ret;
1799 @@ -327,13 +327,11 @@ int traceprobe_split_symbol_offset(char *symbol, unsigned long *offset)
1800 if (!offset)
1801 return -EINVAL;
1802
1803 - tmp = strchr(symbol, '+');
1804 + tmp = strpbrk(symbol, "+-");
1805 if (tmp) {
1806 - /* skip sign because kstrtoul doesn't accept '+' */
1807 - ret = kstrtoul(tmp + 1, 0, offset);
1808 + ret = kstrtol(tmp, 0, offset);
1809 if (ret)
1810 return ret;
1811 -
1812 *tmp = '\0';
1813 } else
1814 *offset = 0;
1815 diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
1816 index 0c0ae54d44c6..2b84c0de92c7 100644
1817 --- a/kernel/trace/trace_probe.h
1818 +++ b/kernel/trace/trace_probe.h
1819 @@ -354,7 +354,7 @@ extern int traceprobe_conflict_field_name(const char *name,
1820 extern void traceprobe_update_arg(struct probe_arg *arg);
1821 extern void traceprobe_free_probe_arg(struct probe_arg *arg);
1822
1823 -extern int traceprobe_split_symbol_offset(char *symbol, unsigned long *offset);
1824 +extern int traceprobe_split_symbol_offset(char *symbol, long *offset);
1825
1826 extern ssize_t traceprobe_probes_write(struct file *file,
1827 const char __user *buffer, size_t count, loff_t *ppos,
1828 diff --git a/lib/ioremap.c b/lib/ioremap.c
1829 index 86c8911b0e3a..5323b59ca393 100644
1830 --- a/lib/ioremap.c
1831 +++ b/lib/ioremap.c
1832 @@ -83,7 +83,8 @@ static inline int ioremap_pmd_range(pud_t *pud, unsigned long addr,
1833
1834 if (ioremap_pmd_enabled() &&
1835 ((next - addr) == PMD_SIZE) &&
1836 - IS_ALIGNED(phys_addr + addr, PMD_SIZE)) {
1837 + IS_ALIGNED(phys_addr + addr, PMD_SIZE) &&
1838 + pmd_free_pte_page(pmd)) {
1839 if (pmd_set_huge(pmd, phys_addr + addr, prot))
1840 continue;
1841 }
1842 @@ -109,7 +110,8 @@ static inline int ioremap_pud_range(pgd_t *pgd, unsigned long addr,
1843
1844 if (ioremap_pud_enabled() &&
1845 ((next - addr) == PUD_SIZE) &&
1846 - IS_ALIGNED(phys_addr + addr, PUD_SIZE)) {
1847 + IS_ALIGNED(phys_addr + addr, PUD_SIZE) &&
1848 + pud_free_pmd_page(pud)) {
1849 if (pud_set_huge(pud, phys_addr + addr, prot))
1850 continue;
1851 }
1852 diff --git a/mm/huge_memory.c b/mm/huge_memory.c
1853 index c234c078693c..e2982ea26090 100644
1854 --- a/mm/huge_memory.c
1855 +++ b/mm/huge_memory.c
1856 @@ -2279,11 +2279,13 @@ static unsigned long deferred_split_scan(struct shrinker *shrink,
1857
1858 list_for_each_safe(pos, next, &list) {
1859 page = list_entry((void *)pos, struct page, mapping);
1860 - lock_page(page);
1861 + if (!trylock_page(page))
1862 + goto next;
1863 /* split_huge_page() removes page from list on success */
1864 if (!split_huge_page(page))
1865 split++;
1866 unlock_page(page);
1867 +next:
1868 put_page(page);
1869 }
1870
1871 diff --git a/mm/khugepaged.c b/mm/khugepaged.c
1872 index 5d7c006373d3..898eb26f5dc8 100644
1873 --- a/mm/khugepaged.c
1874 +++ b/mm/khugepaged.c
1875 @@ -528,7 +528,12 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma,
1876 goto out;
1877 }
1878
1879 - VM_BUG_ON_PAGE(PageCompound(page), page);
1880 + /* TODO: teach khugepaged to collapse THP mapped with pte */
1881 + if (PageCompound(page)) {
1882 + result = SCAN_PAGE_COMPOUND;
1883 + goto out;
1884 + }
1885 +
1886 VM_BUG_ON_PAGE(!PageAnon(page), page);
1887 VM_BUG_ON_PAGE(!PageSwapBacked(page), page);
1888
1889 diff --git a/mm/shmem.c b/mm/shmem.c
1890 index 2123bfc39ef2..42ca5df2c0e3 100644
1891 --- a/mm/shmem.c
1892 +++ b/mm/shmem.c
1893 @@ -466,36 +466,45 @@ static unsigned long shmem_unused_huge_shrink(struct shmem_sb_info *sbinfo,
1894 info = list_entry(pos, struct shmem_inode_info, shrinklist);
1895 inode = &info->vfs_inode;
1896
1897 - if (nr_to_split && split >= nr_to_split) {
1898 - iput(inode);
1899 - continue;
1900 - }
1901 + if (nr_to_split && split >= nr_to_split)
1902 + goto leave;
1903
1904 - page = find_lock_page(inode->i_mapping,
1905 + page = find_get_page(inode->i_mapping,
1906 (inode->i_size & HPAGE_PMD_MASK) >> PAGE_SHIFT);
1907 if (!page)
1908 goto drop;
1909
1910 + /* No huge page at the end of the file: nothing to split */
1911 if (!PageTransHuge(page)) {
1912 - unlock_page(page);
1913 put_page(page);
1914 goto drop;
1915 }
1916
1917 + /*
1918 + * Leave the inode on the list if we failed to lock
1919 + * the page at this time.
1920 + *
1921 + * Waiting for the lock may lead to deadlock in the
1922 + * reclaim path.
1923 + */
1924 + if (!trylock_page(page)) {
1925 + put_page(page);
1926 + goto leave;
1927 + }
1928 +
1929 ret = split_huge_page(page);
1930 unlock_page(page);
1931 put_page(page);
1932
1933 - if (ret) {
1934 - /* split failed: leave it on the list */
1935 - iput(inode);
1936 - continue;
1937 - }
1938 + /* If split failed leave the inode on the list */
1939 + if (ret)
1940 + goto leave;
1941
1942 split++;
1943 drop:
1944 list_del_init(&info->shrinklist);
1945 removed++;
1946 +leave:
1947 iput(inode);
1948 }
1949
1950 diff --git a/sound/drivers/aloop.c b/sound/drivers/aloop.c
1951 index cbd20cb8ca11..dc91002d1e0d 100644
1952 --- a/sound/drivers/aloop.c
1953 +++ b/sound/drivers/aloop.c
1954 @@ -192,6 +192,11 @@ static inline void loopback_timer_stop(struct loopback_pcm *dpcm)
1955 dpcm->timer.expires = 0;
1956 }
1957
1958 +static inline void loopback_timer_stop_sync(struct loopback_pcm *dpcm)
1959 +{
1960 + del_timer_sync(&dpcm->timer);
1961 +}
1962 +
1963 #define CABLE_VALID_PLAYBACK (1 << SNDRV_PCM_STREAM_PLAYBACK)
1964 #define CABLE_VALID_CAPTURE (1 << SNDRV_PCM_STREAM_CAPTURE)
1965 #define CABLE_VALID_BOTH (CABLE_VALID_PLAYBACK|CABLE_VALID_CAPTURE)
1966 @@ -326,6 +331,8 @@ static int loopback_prepare(struct snd_pcm_substream *substream)
1967 struct loopback_cable *cable = dpcm->cable;
1968 int bps, salign;
1969
1970 + loopback_timer_stop_sync(dpcm);
1971 +
1972 salign = (snd_pcm_format_width(runtime->format) *
1973 runtime->channels) / 8;
1974 bps = salign * runtime->rate;
1975 @@ -659,7 +666,9 @@ static void free_cable(struct snd_pcm_substream *substream)
1976 return;
1977 if (cable->streams[!substream->stream]) {
1978 /* other stream is still alive */
1979 + spin_lock_irq(&cable->lock);
1980 cable->streams[substream->stream] = NULL;
1981 + spin_unlock_irq(&cable->lock);
1982 } else {
1983 /* free the cable */
1984 loopback->cables[substream->number][dev] = NULL;
1985 @@ -699,7 +708,6 @@ static int loopback_open(struct snd_pcm_substream *substream)
1986 loopback->cables[substream->number][dev] = cable;
1987 }
1988 dpcm->cable = cable;
1989 - cable->streams[substream->stream] = dpcm;
1990
1991 snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
1992
1993 @@ -731,6 +739,11 @@ static int loopback_open(struct snd_pcm_substream *substream)
1994 runtime->hw = loopback_pcm_hardware;
1995 else
1996 runtime->hw = cable->hw;
1997 +
1998 + spin_lock_irq(&cable->lock);
1999 + cable->streams[substream->stream] = dpcm;
2000 + spin_unlock_irq(&cable->lock);
2001 +
2002 unlock:
2003 if (err < 0) {
2004 free_cable(substream);
2005 @@ -745,7 +758,7 @@ static int loopback_close(struct snd_pcm_substream *substream)
2006 struct loopback *loopback = substream->private_data;
2007 struct loopback_pcm *dpcm = substream->runtime->private_data;
2008
2009 - loopback_timer_stop(dpcm);
2010 + loopback_timer_stop_sync(dpcm);
2011 mutex_lock(&loopback->cable_lock);
2012 free_cable(substream);
2013 mutex_unlock(&loopback->cable_lock);
2014 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
2015 index dae0021f39c3..e2230bed7409 100644
2016 --- a/sound/pci/hda/patch_realtek.c
2017 +++ b/sound/pci/hda/patch_realtek.c
2018 @@ -3261,8 +3261,12 @@ static void alc269_fixup_mic_mute_hook(void *private_data, int enabled)
2019 pinval = snd_hda_codec_get_pin_target(codec, spec->mute_led_nid);
2020 pinval &= ~AC_PINCTL_VREFEN;
2021 pinval |= enabled ? AC_PINCTL_VREF_HIZ : AC_PINCTL_VREF_80;
2022 - if (spec->mute_led_nid)
2023 + if (spec->mute_led_nid) {
2024 + /* temporarily power up/down for setting VREF */
2025 + snd_hda_power_up_pm(codec);
2026 snd_hda_set_pin_ctl_cache(codec, spec->mute_led_nid, pinval);
2027 + snd_hda_power_down_pm(codec);
2028 + }
2029 }
2030
2031 /* Make sure the led works even in runtime suspend */
2032 diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
2033 index 5b60ec669e73..68861e81f06c 100644
2034 --- a/tools/perf/builtin-stat.c
2035 +++ b/tools/perf/builtin-stat.c
2036 @@ -876,7 +876,7 @@ static void print_metric_csv(void *ctx,
2037 char buf[64], *vals, *ends;
2038
2039 if (unit == NULL || fmt == NULL) {
2040 - fprintf(out, "%s%s%s%s", csv_sep, csv_sep, csv_sep, csv_sep);
2041 + fprintf(out, "%s%s", csv_sep, csv_sep);
2042 return;
2043 }
2044 snprintf(buf, sizeof(buf), fmt, val);
2045 diff --git a/tools/testing/selftests/x86/Makefile b/tools/testing/selftests/x86/Makefile
2046 index 6eb50152baf0..e5b459a09cff 100644
2047 --- a/tools/testing/selftests/x86/Makefile
2048 +++ b/tools/testing/selftests/x86/Makefile
2049 @@ -17,7 +17,7 @@ TARGETS_C_64BIT_ALL := $(TARGETS_C_BOTHBITS) $(TARGETS_C_64BIT_ONLY)
2050 BINARIES_32 := $(TARGETS_C_32BIT_ALL:%=%_32)
2051 BINARIES_64 := $(TARGETS_C_64BIT_ALL:%=%_64)
2052
2053 -CFLAGS := -O2 -g -std=gnu99 -pthread -Wall
2054 +CFLAGS := -O2 -g -std=gnu99 -pthread -Wall -no-pie
2055
2056 UNAME_M := $(shell uname -m)
2057 CAN_BUILD_I386 := $(shell ./check_cc.sh $(CC) trivial_32bit_program.c -m32)
2058 diff --git a/tools/testing/selftests/x86/mpx-mini-test.c b/tools/testing/selftests/x86/mpx-mini-test.c
2059 index 79e1d13d1cda..58384189370c 100644
2060 --- a/tools/testing/selftests/x86/mpx-mini-test.c
2061 +++ b/tools/testing/selftests/x86/mpx-mini-test.c
2062 @@ -419,8 +419,7 @@ void handler(int signum, siginfo_t *si, void *vucontext)
2063 br_count++;
2064 dprintf1("#BR 0x%jx (total seen: %d)\n", status, br_count);
2065
2066 -#define __SI_FAULT (3 << 16)
2067 -#define SEGV_BNDERR (__SI_FAULT|3) /* failed address bound checks */
2068 +#define SEGV_BNDERR 3 /* failed address bound checks */
2069
2070 dprintf2("Saw a #BR! status 0x%jx at %016lx br_reason: %jx\n",
2071 status, ip, br_reason);
2072 diff --git a/tools/testing/selftests/x86/protection_keys.c b/tools/testing/selftests/x86/protection_keys.c
2073 index 2842a5fa22b3..85a78eba0a93 100644
2074 --- a/tools/testing/selftests/x86/protection_keys.c
2075 +++ b/tools/testing/selftests/x86/protection_keys.c
2076 @@ -188,17 +188,29 @@ void lots_o_noops_around_write(int *write_to_me)
2077 #define u64 uint64_t
2078
2079 #ifdef __i386__
2080 -#define SYS_mprotect_key 380
2081 -#define SYS_pkey_alloc 381
2082 -#define SYS_pkey_free 382
2083 +
2084 +#ifndef SYS_mprotect_key
2085 +# define SYS_mprotect_key 380
2086 +#endif
2087 +#ifndef SYS_pkey_alloc
2088 +# define SYS_pkey_alloc 381
2089 +# define SYS_pkey_free 382
2090 +#endif
2091 #define REG_IP_IDX REG_EIP
2092 -#define si_pkey_offset 0x18
2093 +#define si_pkey_offset 0x14
2094 +
2095 #else
2096 -#define SYS_mprotect_key 329
2097 -#define SYS_pkey_alloc 330
2098 -#define SYS_pkey_free 331
2099 +
2100 +#ifndef SYS_mprotect_key
2101 +# define SYS_mprotect_key 329
2102 +#endif
2103 +#ifndef SYS_pkey_alloc
2104 +# define SYS_pkey_alloc 330
2105 +# define SYS_pkey_free 331
2106 +#endif
2107 #define REG_IP_IDX REG_RIP
2108 #define si_pkey_offset 0x20
2109 +
2110 #endif
2111
2112 void dump_mem(void *dumpme, int len_bytes)
2113 @@ -212,19 +224,18 @@ void dump_mem(void *dumpme, int len_bytes)
2114 }
2115 }
2116
2117 -#define __SI_FAULT (3 << 16)
2118 -#define SEGV_BNDERR (__SI_FAULT|3) /* failed address bound checks */
2119 -#define SEGV_PKUERR (__SI_FAULT|4)
2120 +#define SEGV_BNDERR 3 /* failed address bound checks */
2121 +#define SEGV_PKUERR 4
2122
2123 static char *si_code_str(int si_code)
2124 {
2125 - if (si_code & SEGV_MAPERR)
2126 + if (si_code == SEGV_MAPERR)
2127 return "SEGV_MAPERR";
2128 - if (si_code & SEGV_ACCERR)
2129 + if (si_code == SEGV_ACCERR)
2130 return "SEGV_ACCERR";
2131 - if (si_code & SEGV_BNDERR)
2132 + if (si_code == SEGV_BNDERR)
2133 return "SEGV_BNDERR";
2134 - if (si_code & SEGV_PKUERR)
2135 + if (si_code == SEGV_PKUERR)
2136 return "SEGV_PKUERR";
2137 return "UNKNOWN";
2138 }
2139 @@ -238,7 +249,7 @@ void signal_handler(int signum, siginfo_t *si, void *vucontext)
2140 unsigned long ip;
2141 char *fpregs;
2142 u32 *pkru_ptr;
2143 - u64 si_pkey;
2144 + u64 siginfo_pkey;
2145 u32 *si_pkey_ptr;
2146 int pkru_offset;
2147 fpregset_t fpregset;
2148 @@ -280,9 +291,9 @@ void signal_handler(int signum, siginfo_t *si, void *vucontext)
2149 si_pkey_ptr = (u32 *)(((u8 *)si) + si_pkey_offset);
2150 dprintf1("si_pkey_ptr: %p\n", si_pkey_ptr);
2151 dump_mem(si_pkey_ptr - 8, 24);
2152 - si_pkey = *si_pkey_ptr;
2153 - pkey_assert(si_pkey < NR_PKEYS);
2154 - last_si_pkey = si_pkey;
2155 + siginfo_pkey = *si_pkey_ptr;
2156 + pkey_assert(siginfo_pkey < NR_PKEYS);
2157 + last_si_pkey = siginfo_pkey;
2158
2159 if ((si->si_code == SEGV_MAPERR) ||
2160 (si->si_code == SEGV_ACCERR) ||
2161 @@ -294,7 +305,7 @@ void signal_handler(int signum, siginfo_t *si, void *vucontext)
2162 dprintf1("signal pkru from xsave: %08x\n", *pkru_ptr);
2163 /* need __rdpkru() version so we do not do shadow_pkru checking */
2164 dprintf1("signal pkru from pkru: %08x\n", __rdpkru());
2165 - dprintf1("si_pkey from siginfo: %jx\n", si_pkey);
2166 + dprintf1("pkey from siginfo: %jx\n", siginfo_pkey);
2167 *(u64 *)pkru_ptr = 0x00000000;
2168 dprintf1("WARNING: set PRKU=0 to allow faulting instruction to continue\n");
2169 pkru_faults++;
2170 diff --git a/tools/testing/selftests/x86/ptrace_syscall.c b/tools/testing/selftests/x86/ptrace_syscall.c
2171 index eaea92439708..1e3da137a8bb 100644
2172 --- a/tools/testing/selftests/x86/ptrace_syscall.c
2173 +++ b/tools/testing/selftests/x86/ptrace_syscall.c
2174 @@ -182,8 +182,10 @@ static void test_ptrace_syscall_restart(void)
2175 if (ptrace(PTRACE_TRACEME, 0, 0, 0) != 0)
2176 err(1, "PTRACE_TRACEME");
2177
2178 + pid_t pid = getpid(), tid = syscall(SYS_gettid);
2179 +
2180 printf("\tChild will make one syscall\n");
2181 - raise(SIGSTOP);
2182 + syscall(SYS_tgkill, pid, tid, SIGSTOP);
2183
2184 syscall(SYS_gettid, 10, 11, 12, 13, 14, 15);
2185 _exit(0);
2186 @@ -300,9 +302,11 @@ static void test_restart_under_ptrace(void)
2187 if (ptrace(PTRACE_TRACEME, 0, 0, 0) != 0)
2188 err(1, "PTRACE_TRACEME");
2189
2190 + pid_t pid = getpid(), tid = syscall(SYS_gettid);
2191 +
2192 printf("\tChild will take a nap until signaled\n");
2193 setsigign(SIGUSR1, SA_RESTART);
2194 - raise(SIGSTOP);
2195 + syscall(SYS_tgkill, pid, tid, SIGSTOP);
2196
2197 syscall(SYS_pause, 0, 0, 0, 0, 0, 0);
2198 _exit(0);