Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3608 - (hide annotations) (download)
Fri Aug 14 07:34:29 2020 UTC (3 years, 8 months ago) by niro
File size: 75816 byte(s)
-added kerenl-alx-legacy pkg
1 niro 3608 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);