Magellan Linux

Annotation of /trunk/kernel-magellan/patches-4.2/0104-4.2.5-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2710 - (hide annotations) (download)
Mon Nov 2 12:49:35 2015 UTC (9 years ago) by niro
File size: 62340 byte(s)
-linux-4.2.5
1 niro 2710 diff --git a/Makefile b/Makefile
2     index a952801a6cd5..96076dcad18e 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 2
8     -SUBLEVEL = 4
9     +SUBLEVEL = 5
10     EXTRAVERSION =
11     NAME = Hurr durr I'ma sheep
12    
13     diff --git a/arch/arm/mach-ux500/Makefile b/arch/arm/mach-ux500/Makefile
14     index 4418a5078833..c8643ac5db71 100644
15     --- a/arch/arm/mach-ux500/Makefile
16     +++ b/arch/arm/mach-ux500/Makefile
17     @@ -7,7 +7,7 @@ obj-$(CONFIG_CACHE_L2X0) += cache-l2x0.o
18     obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o
19     obj-$(CONFIG_MACH_MOP500) += board-mop500-regulators.o \
20     board-mop500-audio.o
21     -obj-$(CONFIG_SMP) += platsmp.o headsmp.o
22     +obj-$(CONFIG_SMP) += platsmp.o
23     obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
24     obj-$(CONFIG_PM_GENERIC_DOMAINS) += pm_domains.o
25    
26     diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c
27     index 16913800bbf9..ba708ce08616 100644
28     --- a/arch/arm/mach-ux500/cpu-db8500.c
29     +++ b/arch/arm/mach-ux500/cpu-db8500.c
30     @@ -154,7 +154,6 @@ static const char * stericsson_dt_platform_compat[] = {
31     };
32    
33     DT_MACHINE_START(U8500_DT, "ST-Ericsson Ux5x0 platform (Device Tree Support)")
34     - .smp = smp_ops(ux500_smp_ops),
35     .map_io = u8500_map_io,
36     .init_irq = ux500_init_irq,
37     /* we re-use nomadik timer here */
38     diff --git a/arch/arm/mach-ux500/headsmp.S b/arch/arm/mach-ux500/headsmp.S
39     deleted file mode 100644
40     index 9cdea049485d..000000000000
41     --- a/arch/arm/mach-ux500/headsmp.S
42     +++ /dev/null
43     @@ -1,37 +0,0 @@
44     -/*
45     - * Copyright (c) 2009 ST-Ericsson
46     - * This file is based ARM Realview platform
47     - * Copyright (c) 2003 ARM Limited
48     - * All Rights Reserved
49     - *
50     - * This program is free software; you can redistribute it and/or modify
51     - * it under the terms of the GNU General Public License version 2 as
52     - * published by the Free Software Foundation.
53     - */
54     -#include <linux/linkage.h>
55     -#include <linux/init.h>
56     -
57     -/*
58     - * U8500 specific entry point for secondary CPUs.
59     - */
60     -ENTRY(u8500_secondary_startup)
61     - mrc p15, 0, r0, c0, c0, 5
62     - and r0, r0, #15
63     - adr r4, 1f
64     - ldmia r4, {r5, r6}
65     - sub r4, r4, r5
66     - add r6, r6, r4
67     -pen: ldr r7, [r6]
68     - cmp r7, r0
69     - bne pen
70     -
71     - /*
72     - * we've been released from the holding pen: secondary_stack
73     - * should now contain the SVC stack for this core
74     - */
75     - b secondary_startup
76     -ENDPROC(u8500_secondary_startup)
77     -
78     - .align 2
79     -1: .long .
80     - .long pen_release
81     diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c
82     index 62b1de922bd8..70766b963758 100644
83     --- a/arch/arm/mach-ux500/platsmp.c
84     +++ b/arch/arm/mach-ux500/platsmp.c
85     @@ -28,135 +28,81 @@
86     #include "db8500-regs.h"
87     #include "id.h"
88    
89     -static void __iomem *scu_base;
90     -static void __iomem *backupram;
91     -
92     -/* This is called from headsmp.S to wakeup the secondary core */
93     -extern void u8500_secondary_startup(void);
94     -
95     -/*
96     - * Write pen_release in a way that is guaranteed to be visible to all
97     - * observers, irrespective of whether they're taking part in coherency
98     - * or not. This is necessary for the hotplug code to work reliably.
99     - */
100     -static void write_pen_release(int val)
101     -{
102     - pen_release = val;
103     - smp_wmb();
104     - sync_cache_w(&pen_release);
105     -}
106     -
107     -static DEFINE_SPINLOCK(boot_lock);
108     -
109     -static void ux500_secondary_init(unsigned int cpu)
110     -{
111     - /*
112     - * let the primary processor know we're out of the
113     - * pen, then head off into the C entry point
114     - */
115     - write_pen_release(-1);
116     -
117     - /*
118     - * Synchronise with the boot thread.
119     - */
120     - spin_lock(&boot_lock);
121     - spin_unlock(&boot_lock);
122     -}
123     +/* Magic triggers in backup RAM */
124     +#define UX500_CPU1_JUMPADDR_OFFSET 0x1FF4
125     +#define UX500_CPU1_WAKEMAGIC_OFFSET 0x1FF0
126    
127     -static int ux500_boot_secondary(unsigned int cpu, struct task_struct *idle)
128     +static void wakeup_secondary(void)
129     {
130     - unsigned long timeout;
131     -
132     - /*
133     - * set synchronisation state between this boot processor
134     - * and the secondary one
135     - */
136     - spin_lock(&boot_lock);
137     -
138     - /*
139     - * The secondary processor is waiting to be released from
140     - * the holding pen - release it, then wait for it to flag
141     - * that it has been released by resetting pen_release.
142     - */
143     - write_pen_release(cpu_logical_map(cpu));
144     -
145     - arch_send_wakeup_ipi_mask(cpumask_of(cpu));
146     + struct device_node *np;
147     + static void __iomem *backupram;
148    
149     - timeout = jiffies + (1 * HZ);
150     - while (time_before(jiffies, timeout)) {
151     - if (pen_release == -1)
152     - break;
153     + np = of_find_compatible_node(NULL, NULL, "ste,dbx500-backupram");
154     + if (!np) {
155     + pr_err("No backupram base address\n");
156     + return;
157     + }
158     + backupram = of_iomap(np, 0);
159     + of_node_put(np);
160     + if (!backupram) {
161     + pr_err("No backupram remap\n");
162     + return;
163     }
164    
165     /*
166     - * now the secondary core is starting up let it run its
167     - * calibrations, then wait for it to finish
168     - */
169     - spin_unlock(&boot_lock);
170     -
171     - return pen_release != -1 ? -ENOSYS : 0;
172     -}
173     -
174     -static void __init wakeup_secondary(void)
175     -{
176     - /*
177     * write the address of secondary startup into the backup ram register
178     * at offset 0x1FF4, then write the magic number 0xA1FEED01 to the
179     * backup ram register at offset 0x1FF0, which is what boot rom code
180     - * is waiting for. This would wake up the secondary core from WFE
181     + * is waiting for. This will wake up the secondary core from WFE.
182     */
183     -#define UX500_CPU1_JUMPADDR_OFFSET 0x1FF4
184     - __raw_writel(virt_to_phys(u8500_secondary_startup),
185     - backupram + UX500_CPU1_JUMPADDR_OFFSET);
186     -
187     -#define UX500_CPU1_WAKEMAGIC_OFFSET 0x1FF0
188     - __raw_writel(0xA1FEED01,
189     - backupram + UX500_CPU1_WAKEMAGIC_OFFSET);
190     + writel(virt_to_phys(secondary_startup),
191     + backupram + UX500_CPU1_JUMPADDR_OFFSET);
192     + writel(0xA1FEED01,
193     + backupram + UX500_CPU1_WAKEMAGIC_OFFSET);
194    
195     /* make sure write buffer is drained */
196     mb();
197     + iounmap(backupram);
198     }
199    
200     -/*
201     - * Initialise the CPU possible map early - this describes the CPUs
202     - * which may be present or become present in the system.
203     - */
204     -static void __init ux500_smp_init_cpus(void)
205     +static void __init ux500_smp_prepare_cpus(unsigned int max_cpus)
206     {
207     - unsigned int i, ncores;
208     struct device_node *np;
209     + static void __iomem *scu_base;
210     + unsigned int ncores;
211     + int i;
212    
213     np = of_find_compatible_node(NULL, NULL, "arm,cortex-a9-scu");
214     + if (!np) {
215     + pr_err("No SCU base address\n");
216     + return;
217     + }
218     scu_base = of_iomap(np, 0);
219     of_node_put(np);
220     - if (!scu_base)
221     + if (!scu_base) {
222     + pr_err("No SCU remap\n");
223     return;
224     - backupram = ioremap(U8500_BACKUPRAM0_BASE, SZ_8K);
225     - ncores = scu_get_core_count(scu_base);
226     -
227     - /* sanity check */
228     - if (ncores > nr_cpu_ids) {
229     - pr_warn("SMP: %u cores greater than maximum (%u), clipping\n",
230     - ncores, nr_cpu_ids);
231     - ncores = nr_cpu_ids;
232     }
233    
234     + scu_enable(scu_base);
235     + ncores = scu_get_core_count(scu_base);
236     for (i = 0; i < ncores; i++)
237     set_cpu_possible(i, true);
238     + iounmap(scu_base);
239     }
240    
241     -static void __init ux500_smp_prepare_cpus(unsigned int max_cpus)
242     +static int ux500_boot_secondary(unsigned int cpu, struct task_struct *idle)
243     {
244     - scu_enable(scu_base);
245     wakeup_secondary();
246     + arch_send_wakeup_ipi_mask(cpumask_of(cpu));
247     + return 0;
248     }
249    
250     struct smp_operations ux500_smp_ops __initdata = {
251     - .smp_init_cpus = ux500_smp_init_cpus,
252     .smp_prepare_cpus = ux500_smp_prepare_cpus,
253     - .smp_secondary_init = ux500_secondary_init,
254     .smp_boot_secondary = ux500_boot_secondary,
255     #ifdef CONFIG_HOTPLUG_CPU
256     .cpu_die = ux500_cpu_die,
257     #endif
258     };
259     +CPU_METHOD_OF_DECLARE(ux500_smp, "ste,dbx500-smp", &ux500_smp_ops);
260     diff --git a/arch/arm/mach-ux500/setup.h b/arch/arm/mach-ux500/setup.h
261     index 1fb6ad2789f1..65876eac0761 100644
262     --- a/arch/arm/mach-ux500/setup.h
263     +++ b/arch/arm/mach-ux500/setup.h
264     @@ -26,7 +26,6 @@ extern struct device *ux500_soc_device_init(const char *soc_id);
265    
266     extern void ux500_timer_init(void);
267    
268     -extern struct smp_operations ux500_smp_ops;
269     extern void ux500_cpu_die(unsigned int cpu);
270    
271     #endif /* __ASM_ARCH_SETUP_H */
272     diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
273     index 81151663ef38..3258174e6152 100644
274     --- a/arch/arm64/Makefile
275     +++ b/arch/arm64/Makefile
276     @@ -31,7 +31,7 @@ endif
277     CHECKFLAGS += -D__aarch64__
278    
279     ifeq ($(CONFIG_ARM64_ERRATUM_843419), y)
280     -CFLAGS_MODULE += -mcmodel=large
281     +KBUILD_CFLAGS_MODULE += -mcmodel=large
282     endif
283    
284     # Default value
285     diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
286     index 56283f8a675c..cf7319422768 100644
287     --- a/arch/arm64/include/asm/pgtable.h
288     +++ b/arch/arm64/include/asm/pgtable.h
289     @@ -80,7 +80,7 @@ extern void __pgd_error(const char *file, int line, unsigned long val);
290     #define PAGE_S2 __pgprot(PROT_DEFAULT | PTE_S2_MEMATTR(MT_S2_NORMAL) | PTE_S2_RDONLY)
291     #define PAGE_S2_DEVICE __pgprot(PROT_DEFAULT | PTE_S2_MEMATTR(MT_S2_DEVICE_nGnRE) | PTE_S2_RDONLY | PTE_UXN)
292    
293     -#define PAGE_NONE __pgprot(((_PAGE_DEFAULT) & ~PTE_TYPE_MASK) | PTE_PROT_NONE | PTE_PXN | PTE_UXN)
294     +#define PAGE_NONE __pgprot(((_PAGE_DEFAULT) & ~PTE_VALID) | PTE_PROT_NONE | PTE_PXN | PTE_UXN)
295     #define PAGE_SHARED __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_UXN | PTE_WRITE)
296     #define PAGE_SHARED_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_WRITE)
297     #define PAGE_COPY __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_UXN)
298     @@ -460,7 +460,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long addr)
299     static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
300     {
301     const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY |
302     - PTE_PROT_NONE | PTE_WRITE | PTE_TYPE_MASK;
303     + PTE_PROT_NONE | PTE_VALID | PTE_WRITE;
304     pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
305     return pte;
306     }
307     diff --git a/arch/sparc/crypto/aes_glue.c b/arch/sparc/crypto/aes_glue.c
308     index 2e48eb8813ff..c90930de76ba 100644
309     --- a/arch/sparc/crypto/aes_glue.c
310     +++ b/arch/sparc/crypto/aes_glue.c
311     @@ -433,6 +433,7 @@ static struct crypto_alg algs[] = { {
312     .blkcipher = {
313     .min_keysize = AES_MIN_KEY_SIZE,
314     .max_keysize = AES_MAX_KEY_SIZE,
315     + .ivsize = AES_BLOCK_SIZE,
316     .setkey = aes_set_key,
317     .encrypt = cbc_encrypt,
318     .decrypt = cbc_decrypt,
319     @@ -452,6 +453,7 @@ static struct crypto_alg algs[] = { {
320     .blkcipher = {
321     .min_keysize = AES_MIN_KEY_SIZE,
322     .max_keysize = AES_MAX_KEY_SIZE,
323     + .ivsize = AES_BLOCK_SIZE,
324     .setkey = aes_set_key,
325     .encrypt = ctr_crypt,
326     .decrypt = ctr_crypt,
327     diff --git a/arch/sparc/crypto/camellia_glue.c b/arch/sparc/crypto/camellia_glue.c
328     index 6bf2479a12fb..561a84d93cf6 100644
329     --- a/arch/sparc/crypto/camellia_glue.c
330     +++ b/arch/sparc/crypto/camellia_glue.c
331     @@ -274,6 +274,7 @@ static struct crypto_alg algs[] = { {
332     .blkcipher = {
333     .min_keysize = CAMELLIA_MIN_KEY_SIZE,
334     .max_keysize = CAMELLIA_MAX_KEY_SIZE,
335     + .ivsize = CAMELLIA_BLOCK_SIZE,
336     .setkey = camellia_set_key,
337     .encrypt = cbc_encrypt,
338     .decrypt = cbc_decrypt,
339     diff --git a/arch/sparc/crypto/des_glue.c b/arch/sparc/crypto/des_glue.c
340     index dd6a34fa6e19..61af794aa2d3 100644
341     --- a/arch/sparc/crypto/des_glue.c
342     +++ b/arch/sparc/crypto/des_glue.c
343     @@ -429,6 +429,7 @@ static struct crypto_alg algs[] = { {
344     .blkcipher = {
345     .min_keysize = DES_KEY_SIZE,
346     .max_keysize = DES_KEY_SIZE,
347     + .ivsize = DES_BLOCK_SIZE,
348     .setkey = des_set_key,
349     .encrypt = cbc_encrypt,
350     .decrypt = cbc_decrypt,
351     @@ -485,6 +486,7 @@ static struct crypto_alg algs[] = { {
352     .blkcipher = {
353     .min_keysize = DES3_EDE_KEY_SIZE,
354     .max_keysize = DES3_EDE_KEY_SIZE,
355     + .ivsize = DES3_EDE_BLOCK_SIZE,
356     .setkey = des3_ede_set_key,
357     .encrypt = cbc3_encrypt,
358     .decrypt = cbc3_decrypt,
359     diff --git a/arch/x86/crypto/camellia_aesni_avx_glue.c b/arch/x86/crypto/camellia_aesni_avx_glue.c
360     index 80a0e4389c9a..bacaa13acac5 100644
361     --- a/arch/x86/crypto/camellia_aesni_avx_glue.c
362     +++ b/arch/x86/crypto/camellia_aesni_avx_glue.c
363     @@ -554,6 +554,11 @@ static int __init camellia_aesni_init(void)
364     {
365     const char *feature_name;
366    
367     + if (!cpu_has_avx || !cpu_has_aes || !cpu_has_osxsave) {
368     + pr_info("AVX or AES-NI instructions are not detected.\n");
369     + return -ENODEV;
370     + }
371     +
372     if (!cpu_has_xfeatures(XSTATE_SSE | XSTATE_YMM, &feature_name)) {
373     pr_info("CPU feature '%s' is not supported.\n", feature_name);
374     return -ENODEV;
375     diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
376     index e7a4fde5d631..2392541a96e6 100644
377     --- a/arch/x86/kvm/emulate.c
378     +++ b/arch/x86/kvm/emulate.c
379     @@ -2418,7 +2418,7 @@ static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt, u64 smbase)
380     u64 val, cr0, cr4;
381     u32 base3;
382     u16 selector;
383     - int i;
384     + int i, r;
385    
386     for (i = 0; i < 16; i++)
387     *reg_write(ctxt, i) = GET_SMSTATE(u64, smbase, 0x7ff8 - i * 8);
388     @@ -2460,13 +2460,17 @@ static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt, u64 smbase)
389     dt.address = GET_SMSTATE(u64, smbase, 0x7e68);
390     ctxt->ops->set_gdt(ctxt, &dt);
391    
392     + r = rsm_enter_protected_mode(ctxt, cr0, cr4);
393     + if (r != X86EMUL_CONTINUE)
394     + return r;
395     +
396     for (i = 0; i < 6; i++) {
397     - int r = rsm_load_seg_64(ctxt, smbase, i);
398     + r = rsm_load_seg_64(ctxt, smbase, i);
399     if (r != X86EMUL_CONTINUE)
400     return r;
401     }
402    
403     - return rsm_enter_protected_mode(ctxt, cr0, cr4);
404     + return X86EMUL_CONTINUE;
405     }
406    
407     static int em_rsm(struct x86_emulate_ctxt *ctxt)
408     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
409     index 32c6e6ac5964..373328b71599 100644
410     --- a/arch/x86/kvm/x86.c
411     +++ b/arch/x86/kvm/x86.c
412     @@ -6706,6 +6706,12 @@ static inline int vcpu_block(struct kvm *kvm, struct kvm_vcpu *vcpu)
413     return 1;
414     }
415    
416     +static inline bool kvm_vcpu_running(struct kvm_vcpu *vcpu)
417     +{
418     + return (vcpu->arch.mp_state == KVM_MP_STATE_RUNNABLE &&
419     + !vcpu->arch.apf.halted);
420     +}
421     +
422     static int vcpu_run(struct kvm_vcpu *vcpu)
423     {
424     int r;
425     @@ -6714,8 +6720,7 @@ static int vcpu_run(struct kvm_vcpu *vcpu)
426     vcpu->srcu_idx = srcu_read_lock(&kvm->srcu);
427    
428     for (;;) {
429     - if (vcpu->arch.mp_state == KVM_MP_STATE_RUNNABLE &&
430     - !vcpu->arch.apf.halted)
431     + if (kvm_vcpu_running(vcpu))
432     r = vcpu_enter_guest(vcpu);
433     else
434     r = vcpu_block(kvm, vcpu);
435     @@ -8011,19 +8016,36 @@ void kvm_arch_flush_shadow_memslot(struct kvm *kvm,
436     kvm_mmu_invalidate_zap_all_pages(kvm);
437     }
438    
439     +static inline bool kvm_vcpu_has_events(struct kvm_vcpu *vcpu)
440     +{
441     + if (!list_empty_careful(&vcpu->async_pf.done))
442     + return true;
443     +
444     + if (kvm_apic_has_events(vcpu))
445     + return true;
446     +
447     + if (vcpu->arch.pv.pv_unhalted)
448     + return true;
449     +
450     + if (atomic_read(&vcpu->arch.nmi_queued))
451     + return true;
452     +
453     + if (test_bit(KVM_REQ_SMI, &vcpu->requests))
454     + return true;
455     +
456     + if (kvm_arch_interrupt_allowed(vcpu) &&
457     + kvm_cpu_has_interrupt(vcpu))
458     + return true;
459     +
460     + return false;
461     +}
462     +
463     int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
464     {
465     if (is_guest_mode(vcpu) && kvm_x86_ops->check_nested_events)
466     kvm_x86_ops->check_nested_events(vcpu, false);
467    
468     - return (vcpu->arch.mp_state == KVM_MP_STATE_RUNNABLE &&
469     - !vcpu->arch.apf.halted)
470     - || !list_empty_careful(&vcpu->async_pf.done)
471     - || kvm_apic_has_events(vcpu)
472     - || vcpu->arch.pv.pv_unhalted
473     - || atomic_read(&vcpu->arch.nmi_queued) ||
474     - (kvm_arch_interrupt_allowed(vcpu) &&
475     - kvm_cpu_has_interrupt(vcpu));
476     + return kvm_vcpu_running(vcpu) || kvm_vcpu_has_events(vcpu);
477     }
478    
479     int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
480     diff --git a/crypto/ahash.c b/crypto/ahash.c
481     index 8acb886032ae..9c1dc8d6106a 100644
482     --- a/crypto/ahash.c
483     +++ b/crypto/ahash.c
484     @@ -544,7 +544,8 @@ static int ahash_prepare_alg(struct ahash_alg *alg)
485     struct crypto_alg *base = &alg->halg.base;
486    
487     if (alg->halg.digestsize > PAGE_SIZE / 8 ||
488     - alg->halg.statesize > PAGE_SIZE / 8)
489     + alg->halg.statesize > PAGE_SIZE / 8 ||
490     + alg->halg.statesize == 0)
491     return -EINVAL;
492    
493     base->cra_type = &crypto_ahash_type;
494     diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
495     index bc67a93aa4f4..324bf35ec4dd 100644
496     --- a/drivers/block/rbd.c
497     +++ b/drivers/block/rbd.c
498     @@ -5201,7 +5201,6 @@ static int rbd_dev_probe_parent(struct rbd_device *rbd_dev)
499     out_err:
500     if (parent) {
501     rbd_dev_unparent(rbd_dev);
502     - kfree(rbd_dev->header_name);
503     rbd_dev_destroy(parent);
504     } else {
505     rbd_put_client(rbdc);
506     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
507     index b16b9256883e..4c4035fdeb6f 100644
508     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
509     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
510     @@ -76,8 +76,6 @@ static void amdgpu_flip_work_func(struct work_struct *__work)
511     /* We borrow the event spin lock for protecting flip_status */
512     spin_lock_irqsave(&crtc->dev->event_lock, flags);
513    
514     - /* set the proper interrupt */
515     - amdgpu_irq_get(adev, &adev->pageflip_irq, work->crtc_id);
516     /* do the flip (mmio) */
517     adev->mode_info.funcs->page_flip(adev, work->crtc_id, work->base);
518     /* set the flip status */
519     diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
520     index 82e8d0730517..a1a35a5df8e7 100644
521     --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
522     +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
523     @@ -6185,6 +6185,11 @@ static int ci_dpm_late_init(void *handle)
524     if (!amdgpu_dpm)
525     return 0;
526    
527     + /* init the sysfs and debugfs files late */
528     + ret = amdgpu_pm_sysfs_init(adev);
529     + if (ret)
530     + return ret;
531     +
532     ret = ci_set_temperature_range(adev);
533     if (ret)
534     return ret;
535     @@ -6232,9 +6237,6 @@ static int ci_dpm_sw_init(void *handle)
536     adev->pm.dpm.current_ps = adev->pm.dpm.requested_ps = adev->pm.dpm.boot_ps;
537     if (amdgpu_dpm == 1)
538     amdgpu_pm_print_power_states(adev);
539     - ret = amdgpu_pm_sysfs_init(adev);
540     - if (ret)
541     - goto dpm_failed;
542     mutex_unlock(&adev->pm.mutex);
543     DRM_INFO("amdgpu: dpm initialized\n");
544    
545     diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c
546     index 341c56681841..519fa515c4d8 100644
547     --- a/drivers/gpu/drm/amd/amdgpu/cik.c
548     +++ b/drivers/gpu/drm/amd/amdgpu/cik.c
549     @@ -1565,6 +1565,9 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev)
550     int ret, i;
551     u16 tmp16;
552    
553     + if (pci_is_root_bus(adev->pdev->bus))
554     + return;
555     +
556     if (amdgpu_pcie_gen2 == 0)
557     return;
558    
559     diff --git a/drivers/gpu/drm/amd/amdgpu/cz_dpm.c b/drivers/gpu/drm/amd/amdgpu/cz_dpm.c
560     index ace870afc7d4..fd29c18fc14e 100644
561     --- a/drivers/gpu/drm/amd/amdgpu/cz_dpm.c
562     +++ b/drivers/gpu/drm/amd/amdgpu/cz_dpm.c
563     @@ -596,6 +596,12 @@ static int cz_dpm_late_init(void *handle)
564     struct amdgpu_device *adev = (struct amdgpu_device *)handle;
565    
566     if (amdgpu_dpm) {
567     + int ret;
568     + /* init the sysfs and debugfs files late */
569     + ret = amdgpu_pm_sysfs_init(adev);
570     + if (ret)
571     + return ret;
572     +
573     /* powerdown unused blocks for now */
574     cz_dpm_powergate_uvd(adev, true);
575     cz_dpm_powergate_vce(adev, true);
576     @@ -632,10 +638,6 @@ static int cz_dpm_sw_init(void *handle)
577     if (amdgpu_dpm == 1)
578     amdgpu_pm_print_power_states(adev);
579    
580     - ret = amdgpu_pm_sysfs_init(adev);
581     - if (ret)
582     - goto dpm_init_failed;
583     -
584     mutex_unlock(&adev->pm.mutex);
585     DRM_INFO("amdgpu: dpm initialized\n");
586    
587     diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
588     index e774a437dd65..ef36467c7e34 100644
589     --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
590     +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
591     @@ -233,6 +233,24 @@ static u32 dce_v10_0_vblank_get_counter(struct amdgpu_device *adev, int crtc)
592     return RREG32(mmCRTC_STATUS_FRAME_COUNT + crtc_offsets[crtc]);
593     }
594    
595     +static void dce_v10_0_pageflip_interrupt_init(struct amdgpu_device *adev)
596     +{
597     + unsigned i;
598     +
599     + /* Enable pflip interrupts */
600     + for (i = 0; i < adev->mode_info.num_crtc; i++)
601     + amdgpu_irq_get(adev, &adev->pageflip_irq, i);
602     +}
603     +
604     +static void dce_v10_0_pageflip_interrupt_fini(struct amdgpu_device *adev)
605     +{
606     + unsigned i;
607     +
608     + /* Disable pflip interrupts */
609     + for (i = 0; i < adev->mode_info.num_crtc; i++)
610     + amdgpu_irq_put(adev, &adev->pageflip_irq, i);
611     +}
612     +
613     /**
614     * dce_v10_0_page_flip - pageflip callback.
615     *
616     @@ -2641,9 +2659,10 @@ static void dce_v10_0_crtc_dpms(struct drm_crtc *crtc, int mode)
617     dce_v10_0_vga_enable(crtc, true);
618     amdgpu_atombios_crtc_blank(crtc, ATOM_DISABLE);
619     dce_v10_0_vga_enable(crtc, false);
620     - /* Make sure VBLANK interrupt is still enabled */
621     + /* Make sure VBLANK and PFLIP interrupts are still enabled */
622     type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id);
623     amdgpu_irq_update(adev, &adev->crtc_irq, type);
624     + amdgpu_irq_update(adev, &adev->pageflip_irq, type);
625     drm_vblank_post_modeset(dev, amdgpu_crtc->crtc_id);
626     dce_v10_0_crtc_load_lut(crtc);
627     break;
628     @@ -3002,6 +3021,8 @@ static int dce_v10_0_hw_init(void *handle)
629     dce_v10_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false);
630     }
631    
632     + dce_v10_0_pageflip_interrupt_init(adev);
633     +
634     return 0;
635     }
636    
637     @@ -3016,6 +3037,8 @@ static int dce_v10_0_hw_fini(void *handle)
638     dce_v10_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false);
639     }
640    
641     + dce_v10_0_pageflip_interrupt_fini(adev);
642     +
643     return 0;
644     }
645    
646     @@ -3027,6 +3050,8 @@ static int dce_v10_0_suspend(void *handle)
647    
648     dce_v10_0_hpd_fini(adev);
649    
650     + dce_v10_0_pageflip_interrupt_fini(adev);
651     +
652     return 0;
653     }
654    
655     @@ -3052,6 +3077,8 @@ static int dce_v10_0_resume(void *handle)
656     /* initialize hpd */
657     dce_v10_0_hpd_init(adev);
658    
659     + dce_v10_0_pageflip_interrupt_init(adev);
660     +
661     return 0;
662     }
663    
664     @@ -3346,7 +3373,6 @@ static int dce_v10_0_pageflip_irq(struct amdgpu_device *adev,
665     spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
666    
667     drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_id);
668     - amdgpu_irq_put(adev, &adev->pageflip_irq, crtc_id);
669     queue_work(amdgpu_crtc->pflip_queue, &works->unpin_work);
670    
671     return 0;
672     diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
673     index c4a21a7afd68..329bca0f1331 100644
674     --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
675     +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
676     @@ -233,6 +233,24 @@ static u32 dce_v11_0_vblank_get_counter(struct amdgpu_device *adev, int crtc)
677     return RREG32(mmCRTC_STATUS_FRAME_COUNT + crtc_offsets[crtc]);
678     }
679    
680     +static void dce_v11_0_pageflip_interrupt_init(struct amdgpu_device *adev)
681     +{
682     + unsigned i;
683     +
684     + /* Enable pflip interrupts */
685     + for (i = 0; i < adev->mode_info.num_crtc; i++)
686     + amdgpu_irq_get(adev, &adev->pageflip_irq, i);
687     +}
688     +
689     +static void dce_v11_0_pageflip_interrupt_fini(struct amdgpu_device *adev)
690     +{
691     + unsigned i;
692     +
693     + /* Disable pflip interrupts */
694     + for (i = 0; i < adev->mode_info.num_crtc; i++)
695     + amdgpu_irq_put(adev, &adev->pageflip_irq, i);
696     +}
697     +
698     /**
699     * dce_v11_0_page_flip - pageflip callback.
700     *
701     @@ -2640,9 +2658,10 @@ static void dce_v11_0_crtc_dpms(struct drm_crtc *crtc, int mode)
702     dce_v11_0_vga_enable(crtc, true);
703     amdgpu_atombios_crtc_blank(crtc, ATOM_DISABLE);
704     dce_v11_0_vga_enable(crtc, false);
705     - /* Make sure VBLANK interrupt is still enabled */
706     + /* Make sure VBLANK and PFLIP interrupts are still enabled */
707     type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id);
708     amdgpu_irq_update(adev, &adev->crtc_irq, type);
709     + amdgpu_irq_update(adev, &adev->pageflip_irq, type);
710     drm_vblank_post_modeset(dev, amdgpu_crtc->crtc_id);
711     dce_v11_0_crtc_load_lut(crtc);
712     break;
713     @@ -2888,7 +2907,7 @@ static int dce_v11_0_early_init(void *handle)
714    
715     switch (adev->asic_type) {
716     case CHIP_CARRIZO:
717     - adev->mode_info.num_crtc = 4;
718     + adev->mode_info.num_crtc = 3;
719     adev->mode_info.num_hpd = 6;
720     adev->mode_info.num_dig = 9;
721     break;
722     @@ -3000,6 +3019,8 @@ static int dce_v11_0_hw_init(void *handle)
723     dce_v11_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false);
724     }
725    
726     + dce_v11_0_pageflip_interrupt_init(adev);
727     +
728     return 0;
729     }
730    
731     @@ -3014,6 +3035,8 @@ static int dce_v11_0_hw_fini(void *handle)
732     dce_v11_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false);
733     }
734    
735     + dce_v11_0_pageflip_interrupt_fini(adev);
736     +
737     return 0;
738     }
739    
740     @@ -3025,6 +3048,8 @@ static int dce_v11_0_suspend(void *handle)
741    
742     dce_v11_0_hpd_fini(adev);
743    
744     + dce_v11_0_pageflip_interrupt_fini(adev);
745     +
746     return 0;
747     }
748    
749     @@ -3051,6 +3076,8 @@ static int dce_v11_0_resume(void *handle)
750     /* initialize hpd */
751     dce_v11_0_hpd_init(adev);
752    
753     + dce_v11_0_pageflip_interrupt_init(adev);
754     +
755     return 0;
756     }
757    
758     @@ -3345,7 +3372,6 @@ static int dce_v11_0_pageflip_irq(struct amdgpu_device *adev,
759     spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
760    
761     drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_id);
762     - amdgpu_irq_put(adev, &adev->pageflip_irq, crtc_id);
763     queue_work(amdgpu_crtc->pflip_queue, &works->unpin_work);
764    
765     return 0;
766     diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
767     index cc050a329c49..937879ed86bc 100644
768     --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
769     +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
770     @@ -204,6 +204,24 @@ static u32 dce_v8_0_vblank_get_counter(struct amdgpu_device *adev, int crtc)
771     return RREG32(mmCRTC_STATUS_FRAME_COUNT + crtc_offsets[crtc]);
772     }
773    
774     +static void dce_v8_0_pageflip_interrupt_init(struct amdgpu_device *adev)
775     +{
776     + unsigned i;
777     +
778     + /* Enable pflip interrupts */
779     + for (i = 0; i < adev->mode_info.num_crtc; i++)
780     + amdgpu_irq_get(adev, &adev->pageflip_irq, i);
781     +}
782     +
783     +static void dce_v8_0_pageflip_interrupt_fini(struct amdgpu_device *adev)
784     +{
785     + unsigned i;
786     +
787     + /* Disable pflip interrupts */
788     + for (i = 0; i < adev->mode_info.num_crtc; i++)
789     + amdgpu_irq_put(adev, &adev->pageflip_irq, i);
790     +}
791     +
792     /**
793     * dce_v8_0_page_flip - pageflip callback.
794     *
795     @@ -2575,9 +2593,10 @@ static void dce_v8_0_crtc_dpms(struct drm_crtc *crtc, int mode)
796     dce_v8_0_vga_enable(crtc, true);
797     amdgpu_atombios_crtc_blank(crtc, ATOM_DISABLE);
798     dce_v8_0_vga_enable(crtc, false);
799     - /* Make sure VBLANK interrupt is still enabled */
800     + /* Make sure VBLANK and PFLIP interrupts are still enabled */
801     type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id);
802     amdgpu_irq_update(adev, &adev->crtc_irq, type);
803     + amdgpu_irq_update(adev, &adev->pageflip_irq, type);
804     drm_vblank_post_modeset(dev, amdgpu_crtc->crtc_id);
805     dce_v8_0_crtc_load_lut(crtc);
806     break;
807     @@ -2933,6 +2952,8 @@ static int dce_v8_0_hw_init(void *handle)
808     dce_v8_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false);
809     }
810    
811     + dce_v8_0_pageflip_interrupt_init(adev);
812     +
813     return 0;
814     }
815    
816     @@ -2947,6 +2968,8 @@ static int dce_v8_0_hw_fini(void *handle)
817     dce_v8_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false);
818     }
819    
820     + dce_v8_0_pageflip_interrupt_fini(adev);
821     +
822     return 0;
823     }
824    
825     @@ -2958,6 +2981,8 @@ static int dce_v8_0_suspend(void *handle)
826    
827     dce_v8_0_hpd_fini(adev);
828    
829     + dce_v8_0_pageflip_interrupt_fini(adev);
830     +
831     return 0;
832     }
833    
834     @@ -2981,6 +3006,8 @@ static int dce_v8_0_resume(void *handle)
835     /* initialize hpd */
836     dce_v8_0_hpd_init(adev);
837    
838     + dce_v8_0_pageflip_interrupt_init(adev);
839     +
840     return 0;
841     }
842    
843     @@ -3376,7 +3403,6 @@ static int dce_v8_0_pageflip_irq(struct amdgpu_device *adev,
844     spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
845    
846     drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_id);
847     - amdgpu_irq_put(adev, &adev->pageflip_irq, crtc_id);
848     queue_work(amdgpu_crtc->pflip_queue, &works->unpin_work);
849    
850     return 0;
851     diff --git a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
852     index 94ec04a9c4d5..9745ed3a9aef 100644
853     --- a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
854     +++ b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
855     @@ -2995,6 +2995,12 @@ static int kv_dpm_late_init(void *handle)
856     {
857     /* powerdown unused blocks for now */
858     struct amdgpu_device *adev = (struct amdgpu_device *)handle;
859     + int ret;
860     +
861     + /* init the sysfs and debugfs files late */
862     + ret = amdgpu_pm_sysfs_init(adev);
863     + if (ret)
864     + return ret;
865    
866     kv_dpm_powergate_acp(adev, true);
867     kv_dpm_powergate_samu(adev, true);
868     @@ -3038,9 +3044,6 @@ static int kv_dpm_sw_init(void *handle)
869     adev->pm.dpm.current_ps = adev->pm.dpm.requested_ps = adev->pm.dpm.boot_ps;
870     if (amdgpu_dpm == 1)
871     amdgpu_pm_print_power_states(adev);
872     - ret = amdgpu_pm_sysfs_init(adev);
873     - if (ret)
874     - goto dpm_failed;
875     mutex_unlock(&adev->pm.mutex);
876     DRM_INFO("amdgpu: dpm initialized\n");
877    
878     diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c
879     index 4f58a1e18de6..9ffa56cebdbc 100644
880     --- a/drivers/gpu/drm/amd/amdgpu/vi.c
881     +++ b/drivers/gpu/drm/amd/amdgpu/vi.c
882     @@ -968,6 +968,9 @@ static void vi_pcie_gen3_enable(struct amdgpu_device *adev)
883     u32 mask;
884     int ret;
885    
886     + if (pci_is_root_bus(adev->pdev->bus))
887     + return;
888     +
889     if (amdgpu_pcie_gen2 == 0)
890     return;
891    
892     diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
893     index 969e7898a7ed..27a2426c3daa 100644
894     --- a/drivers/gpu/drm/drm_dp_mst_topology.c
895     +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
896     @@ -2789,12 +2789,13 @@ static int drm_dp_mst_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs
897     if (msgs[num - 1].flags & I2C_M_RD)
898     reading = true;
899    
900     - if (!reading) {
901     + if (!reading || (num - 1 > DP_REMOTE_I2C_READ_MAX_TRANSACTIONS)) {
902     DRM_DEBUG_KMS("Unsupported I2C transaction for MST device\n");
903     ret = -EIO;
904     goto out;
905     }
906    
907     + memset(&msg, 0, sizeof(msg));
908     msg.req_type = DP_REMOTE_I2C_READ;
909     msg.u.i2c_read.num_transactions = num - 1;
910     msg.u.i2c_read.port_number = port->port_num;
911     diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c
912     index 0f6cd33b531f..684bd4a13843 100644
913     --- a/drivers/gpu/drm/drm_sysfs.c
914     +++ b/drivers/gpu/drm/drm_sysfs.c
915     @@ -235,18 +235,12 @@ static ssize_t dpms_show(struct device *device,
916     char *buf)
917     {
918     struct drm_connector *connector = to_drm_connector(device);
919     - struct drm_device *dev = connector->dev;
920     - uint64_t dpms_status;
921     - int ret;
922     + int dpms;
923    
924     - ret = drm_object_property_get_value(&connector->base,
925     - dev->mode_config.dpms_property,
926     - &dpms_status);
927     - if (ret)
928     - return 0;
929     + dpms = READ_ONCE(connector->dpms);
930    
931     return snprintf(buf, PAGE_SIZE, "%s\n",
932     - drm_get_dpms_name((int)dpms_status));
933     + drm_get_dpms_name(dpms));
934     }
935    
936     static ssize_t enabled_show(struct device *device,
937     diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
938     index 6751553abe4a..567791b27d6d 100644
939     --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
940     +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
941     @@ -178,8 +178,30 @@ nouveau_fbcon_sync(struct fb_info *info)
942     return 0;
943     }
944    
945     +static int
946     +nouveau_fbcon_open(struct fb_info *info, int user)
947     +{
948     + struct nouveau_fbdev *fbcon = info->par;
949     + struct nouveau_drm *drm = nouveau_drm(fbcon->dev);
950     + int ret = pm_runtime_get_sync(drm->dev->dev);
951     + if (ret < 0 && ret != -EACCES)
952     + return ret;
953     + return 0;
954     +}
955     +
956     +static int
957     +nouveau_fbcon_release(struct fb_info *info, int user)
958     +{
959     + struct nouveau_fbdev *fbcon = info->par;
960     + struct nouveau_drm *drm = nouveau_drm(fbcon->dev);
961     + pm_runtime_put(drm->dev->dev);
962     + return 0;
963     +}
964     +
965     static struct fb_ops nouveau_fbcon_ops = {
966     .owner = THIS_MODULE,
967     + .fb_open = nouveau_fbcon_open,
968     + .fb_release = nouveau_fbcon_release,
969     .fb_check_var = drm_fb_helper_check_var,
970     .fb_set_par = drm_fb_helper_set_par,
971     .fb_fillrect = nouveau_fbcon_fillrect,
972     @@ -195,6 +217,8 @@ static struct fb_ops nouveau_fbcon_ops = {
973    
974     static struct fb_ops nouveau_fbcon_sw_ops = {
975     .owner = THIS_MODULE,
976     + .fb_open = nouveau_fbcon_open,
977     + .fb_release = nouveau_fbcon_release,
978     .fb_check_var = drm_fb_helper_check_var,
979     .fb_set_par = drm_fb_helper_set_par,
980     .fb_fillrect = cfb_fillrect,
981     diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c
982     index 6b6e57e8c2d6..847a902e7385 100644
983     --- a/drivers/gpu/drm/qxl/qxl_fb.c
984     +++ b/drivers/gpu/drm/qxl/qxl_fb.c
985     @@ -144,14 +144,17 @@ static void qxl_dirty_update(struct qxl_fbdev *qfbdev,
986    
987     spin_lock_irqsave(&qfbdev->dirty.lock, flags);
988    
989     - if (qfbdev->dirty.y1 < y)
990     - y = qfbdev->dirty.y1;
991     - if (qfbdev->dirty.y2 > y2)
992     - y2 = qfbdev->dirty.y2;
993     - if (qfbdev->dirty.x1 < x)
994     - x = qfbdev->dirty.x1;
995     - if (qfbdev->dirty.x2 > x2)
996     - x2 = qfbdev->dirty.x2;
997     + if ((qfbdev->dirty.y2 - qfbdev->dirty.y1) &&
998     + (qfbdev->dirty.x2 - qfbdev->dirty.x1)) {
999     + if (qfbdev->dirty.y1 < y)
1000     + y = qfbdev->dirty.y1;
1001     + if (qfbdev->dirty.y2 > y2)
1002     + y2 = qfbdev->dirty.y2;
1003     + if (qfbdev->dirty.x1 < x)
1004     + x = qfbdev->dirty.x1;
1005     + if (qfbdev->dirty.x2 > x2)
1006     + x2 = qfbdev->dirty.x2;
1007     + }
1008    
1009     qfbdev->dirty.x1 = x;
1010     qfbdev->dirty.x2 = x2;
1011     diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
1012     index d2e9e9efc159..6743174acdbc 100644
1013     --- a/drivers/gpu/drm/radeon/radeon_display.c
1014     +++ b/drivers/gpu/drm/radeon/radeon_display.c
1015     @@ -1633,18 +1633,8 @@ int radeon_modeset_init(struct radeon_device *rdev)
1016     radeon_fbdev_init(rdev);
1017     drm_kms_helper_poll_init(rdev->ddev);
1018    
1019     - if (rdev->pm.dpm_enabled) {
1020     - /* do dpm late init */
1021     - ret = radeon_pm_late_init(rdev);
1022     - if (ret) {
1023     - rdev->pm.dpm_enabled = false;
1024     - DRM_ERROR("radeon_pm_late_init failed, disabling dpm\n");
1025     - }
1026     - /* set the dpm state for PX since there won't be
1027     - * a modeset to call this.
1028     - */
1029     - radeon_pm_compute_clocks(rdev);
1030     - }
1031     + /* do pm late init */
1032     + ret = radeon_pm_late_init(rdev);
1033    
1034     return 0;
1035     }
1036     diff --git a/drivers/gpu/drm/radeon/radeon_dp_mst.c b/drivers/gpu/drm/radeon/radeon_dp_mst.c
1037     index 257b10be5cda..42986130cc63 100644
1038     --- a/drivers/gpu/drm/radeon/radeon_dp_mst.c
1039     +++ b/drivers/gpu/drm/radeon/radeon_dp_mst.c
1040     @@ -283,6 +283,7 @@ static struct drm_connector *radeon_dp_add_mst_connector(struct drm_dp_mst_topol
1041     radeon_connector->mst_encoder = radeon_dp_create_fake_mst_encoder(master);
1042    
1043     drm_object_attach_property(&connector->base, dev->mode_config.path_property, 0);
1044     + drm_object_attach_property(&connector->base, dev->mode_config.tile_property, 0);
1045     drm_mode_connector_set_path_property(connector, pathprop);
1046     drm_reinit_primary_mode_group(dev);
1047    
1048     diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
1049     index c1ba83a8dd8c..948c33105801 100644
1050     --- a/drivers/gpu/drm/radeon/radeon_pm.c
1051     +++ b/drivers/gpu/drm/radeon/radeon_pm.c
1052     @@ -1331,14 +1331,6 @@ static int radeon_pm_init_old(struct radeon_device *rdev)
1053     INIT_DELAYED_WORK(&rdev->pm.dynpm_idle_work, radeon_dynpm_idle_work_handler);
1054    
1055     if (rdev->pm.num_power_states > 1) {
1056     - /* where's the best place to put these? */
1057     - ret = device_create_file(rdev->dev, &dev_attr_power_profile);
1058     - if (ret)
1059     - DRM_ERROR("failed to create device file for power profile\n");
1060     - ret = device_create_file(rdev->dev, &dev_attr_power_method);
1061     - if (ret)
1062     - DRM_ERROR("failed to create device file for power method\n");
1063     -
1064     if (radeon_debugfs_pm_init(rdev)) {
1065     DRM_ERROR("Failed to register debugfs file for PM!\n");
1066     }
1067     @@ -1396,20 +1388,6 @@ static int radeon_pm_init_dpm(struct radeon_device *rdev)
1068     goto dpm_failed;
1069     rdev->pm.dpm_enabled = true;
1070    
1071     - ret = device_create_file(rdev->dev, &dev_attr_power_dpm_state);
1072     - if (ret)
1073     - DRM_ERROR("failed to create device file for dpm state\n");
1074     - ret = device_create_file(rdev->dev, &dev_attr_power_dpm_force_performance_level);
1075     - if (ret)
1076     - DRM_ERROR("failed to create device file for dpm state\n");
1077     - /* XXX: these are noops for dpm but are here for backwards compat */
1078     - ret = device_create_file(rdev->dev, &dev_attr_power_profile);
1079     - if (ret)
1080     - DRM_ERROR("failed to create device file for power profile\n");
1081     - ret = device_create_file(rdev->dev, &dev_attr_power_method);
1082     - if (ret)
1083     - DRM_ERROR("failed to create device file for power method\n");
1084     -
1085     if (radeon_debugfs_pm_init(rdev)) {
1086     DRM_ERROR("Failed to register debugfs file for dpm!\n");
1087     }
1088     @@ -1550,9 +1528,44 @@ int radeon_pm_late_init(struct radeon_device *rdev)
1089     int ret = 0;
1090    
1091     if (rdev->pm.pm_method == PM_METHOD_DPM) {
1092     - mutex_lock(&rdev->pm.mutex);
1093     - ret = radeon_dpm_late_enable(rdev);
1094     - mutex_unlock(&rdev->pm.mutex);
1095     + if (rdev->pm.dpm_enabled) {
1096     + ret = device_create_file(rdev->dev, &dev_attr_power_dpm_state);
1097     + if (ret)
1098     + DRM_ERROR("failed to create device file for dpm state\n");
1099     + ret = device_create_file(rdev->dev, &dev_attr_power_dpm_force_performance_level);
1100     + if (ret)
1101     + DRM_ERROR("failed to create device file for dpm state\n");
1102     + /* XXX: these are noops for dpm but are here for backwards compat */
1103     + ret = device_create_file(rdev->dev, &dev_attr_power_profile);
1104     + if (ret)
1105     + DRM_ERROR("failed to create device file for power profile\n");
1106     + ret = device_create_file(rdev->dev, &dev_attr_power_method);
1107     + if (ret)
1108     + DRM_ERROR("failed to create device file for power method\n");
1109     +
1110     + mutex_lock(&rdev->pm.mutex);
1111     + ret = radeon_dpm_late_enable(rdev);
1112     + mutex_unlock(&rdev->pm.mutex);
1113     + if (ret) {
1114     + rdev->pm.dpm_enabled = false;
1115     + DRM_ERROR("radeon_pm_late_init failed, disabling dpm\n");
1116     + } else {
1117     + /* set the dpm state for PX since there won't be
1118     + * a modeset to call this.
1119     + */
1120     + radeon_pm_compute_clocks(rdev);
1121     + }
1122     + }
1123     + } else {
1124     + if (rdev->pm.num_power_states > 1) {
1125     + /* where's the best place to put these? */
1126     + ret = device_create_file(rdev->dev, &dev_attr_power_profile);
1127     + if (ret)
1128     + DRM_ERROR("failed to create device file for power profile\n");
1129     + ret = device_create_file(rdev->dev, &dev_attr_power_method);
1130     + if (ret)
1131     + DRM_ERROR("failed to create device file for power method\n");
1132     + }
1133     }
1134     return ret;
1135     }
1136     diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
1137     index 3dd2de31a2f8..472b88285c75 100644
1138     --- a/drivers/i2c/busses/i2c-designware-platdrv.c
1139     +++ b/drivers/i2c/busses/i2c-designware-platdrv.c
1140     @@ -24,6 +24,7 @@
1141     #include <linux/kernel.h>
1142     #include <linux/module.h>
1143     #include <linux/delay.h>
1144     +#include <linux/dmi.h>
1145     #include <linux/i2c.h>
1146     #include <linux/clk.h>
1147     #include <linux/clk-provider.h>
1148     @@ -51,6 +52,22 @@ static u32 i2c_dw_get_clk_rate_khz(struct dw_i2c_dev *dev)
1149     }
1150    
1151     #ifdef CONFIG_ACPI
1152     +/*
1153     + * The HCNT/LCNT information coming from ACPI should be the most accurate
1154     + * for given platform. However, some systems get it wrong. On such systems
1155     + * we get better results by calculating those based on the input clock.
1156     + */
1157     +static const struct dmi_system_id dw_i2c_no_acpi_params[] = {
1158     + {
1159     + .ident = "Dell Inspiron 7348",
1160     + .matches = {
1161     + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
1162     + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 7348"),
1163     + },
1164     + },
1165     + { }
1166     +};
1167     +
1168     static void dw_i2c_acpi_params(struct platform_device *pdev, char method[],
1169     u16 *hcnt, u16 *lcnt, u32 *sda_hold)
1170     {
1171     @@ -58,6 +75,9 @@ static void dw_i2c_acpi_params(struct platform_device *pdev, char method[],
1172     acpi_handle handle = ACPI_HANDLE(&pdev->dev);
1173     union acpi_object *obj;
1174    
1175     + if (dmi_check_system(dw_i2c_no_acpi_params))
1176     + return;
1177     +
1178     if (ACPI_FAILURE(acpi_evaluate_object(handle, method, NULL, &buf)))
1179     return;
1180    
1181     @@ -253,12 +273,6 @@ static int dw_i2c_probe(struct platform_device *pdev)
1182     adap->dev.parent = &pdev->dev;
1183     adap->dev.of_node = pdev->dev.of_node;
1184    
1185     - r = i2c_add_numbered_adapter(adap);
1186     - if (r) {
1187     - dev_err(&pdev->dev, "failure adding adapter\n");
1188     - return r;
1189     - }
1190     -
1191     if (dev->pm_runtime_disabled) {
1192     pm_runtime_forbid(&pdev->dev);
1193     } else {
1194     @@ -268,6 +282,13 @@ static int dw_i2c_probe(struct platform_device *pdev)
1195     pm_runtime_enable(&pdev->dev);
1196     }
1197    
1198     + r = i2c_add_numbered_adapter(adap);
1199     + if (r) {
1200     + dev_err(&pdev->dev, "failure adding adapter\n");
1201     + pm_runtime_disable(&pdev->dev);
1202     + return r;
1203     + }
1204     +
1205     return 0;
1206     }
1207    
1208     diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
1209     index d8361dada584..d8b5a8fee1e6 100644
1210     --- a/drivers/i2c/busses/i2c-rcar.c
1211     +++ b/drivers/i2c/busses/i2c-rcar.c
1212     @@ -690,15 +690,16 @@ static int rcar_i2c_probe(struct platform_device *pdev)
1213     return ret;
1214     }
1215    
1216     + pm_runtime_enable(dev);
1217     + platform_set_drvdata(pdev, priv);
1218     +
1219     ret = i2c_add_numbered_adapter(adap);
1220     if (ret < 0) {
1221     dev_err(dev, "reg adap failed: %d\n", ret);
1222     + pm_runtime_disable(dev);
1223     return ret;
1224     }
1225    
1226     - pm_runtime_enable(dev);
1227     - platform_set_drvdata(pdev, priv);
1228     -
1229     dev_info(dev, "probed\n");
1230    
1231     return 0;
1232     diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c
1233     index 50bfd8cef5f2..5df819610d52 100644
1234     --- a/drivers/i2c/busses/i2c-s3c2410.c
1235     +++ b/drivers/i2c/busses/i2c-s3c2410.c
1236     @@ -1243,17 +1243,19 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev)
1237     i2c->adap.nr = i2c->pdata->bus_num;
1238     i2c->adap.dev.of_node = pdev->dev.of_node;
1239    
1240     + platform_set_drvdata(pdev, i2c);
1241     +
1242     + pm_runtime_enable(&pdev->dev);
1243     +
1244     ret = i2c_add_numbered_adapter(&i2c->adap);
1245     if (ret < 0) {
1246     dev_err(&pdev->dev, "failed to add bus to i2c core\n");
1247     + pm_runtime_disable(&pdev->dev);
1248     s3c24xx_i2c_deregister_cpufreq(i2c);
1249     clk_unprepare(i2c->clk);
1250     return ret;
1251     }
1252    
1253     - platform_set_drvdata(pdev, i2c);
1254     -
1255     - pm_runtime_enable(&pdev->dev);
1256     pm_runtime_enable(&i2c->adap.dev);
1257    
1258     dev_info(&pdev->dev, "%s: S3C I2C adapter\n", dev_name(&i2c->adap.dev));
1259     diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
1260     index 75aef240c2d1..493c38e08bd2 100644
1261     --- a/drivers/md/dm-thin.c
1262     +++ b/drivers/md/dm-thin.c
1263     @@ -3255,7 +3255,7 @@ static int pool_ctr(struct dm_target *ti, unsigned argc, char **argv)
1264     metadata_low_callback,
1265     pool);
1266     if (r)
1267     - goto out_free_pt;
1268     + goto out_flags_changed;
1269    
1270     pt->callbacks.congested_fn = pool_is_congested;
1271     dm_table_add_target_callbacks(ti->table, &pt->callbacks);
1272     diff --git a/drivers/mfd/max77843.c b/drivers/mfd/max77843.c
1273     index a354ac677ec7..1074a0d68680 100644
1274     --- a/drivers/mfd/max77843.c
1275     +++ b/drivers/mfd/max77843.c
1276     @@ -79,7 +79,7 @@ static int max77843_chg_init(struct max77843 *max77843)
1277     if (!max77843->i2c_chg) {
1278     dev_err(&max77843->i2c->dev,
1279     "Cannot allocate I2C device for Charger\n");
1280     - return PTR_ERR(max77843->i2c_chg);
1281     + return -ENODEV;
1282     }
1283     i2c_set_clientdata(max77843->i2c_chg, max77843);
1284    
1285     diff --git a/drivers/net/ethernet/ibm/emac/core.h b/drivers/net/ethernet/ibm/emac/core.h
1286     index 28df37420da9..ac02c675c59c 100644
1287     --- a/drivers/net/ethernet/ibm/emac/core.h
1288     +++ b/drivers/net/ethernet/ibm/emac/core.h
1289     @@ -460,8 +460,8 @@ struct emac_ethtool_regs_subhdr {
1290     u32 index;
1291     };
1292    
1293     -#define EMAC_ETHTOOL_REGS_VER 0
1294     -#define EMAC4_ETHTOOL_REGS_VER 1
1295     -#define EMAC4SYNC_ETHTOOL_REGS_VER 2
1296     +#define EMAC_ETHTOOL_REGS_VER 3
1297     +#define EMAC4_ETHTOOL_REGS_VER 4
1298     +#define EMAC4SYNC_ETHTOOL_REGS_VER 5
1299    
1300     #endif /* __IBM_NEWEMAC_CORE_H */
1301     diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c
1302     index 3837ae344f63..2ed75060da50 100644
1303     --- a/drivers/net/ppp/pppoe.c
1304     +++ b/drivers/net/ppp/pppoe.c
1305     @@ -313,7 +313,6 @@ static void pppoe_flush_dev(struct net_device *dev)
1306     if (po->pppoe_dev == dev &&
1307     sk->sk_state & (PPPOX_CONNECTED | PPPOX_BOUND | PPPOX_ZOMBIE)) {
1308     pppox_unbind_sock(sk);
1309     - sk->sk_state = PPPOX_ZOMBIE;
1310     sk->sk_state_change(sk);
1311     po->pppoe_dev = NULL;
1312     dev_put(dev);
1313     diff --git a/drivers/pinctrl/freescale/pinctrl-imx25.c b/drivers/pinctrl/freescale/pinctrl-imx25.c
1314     index faf635654312..293ed4381cc0 100644
1315     --- a/drivers/pinctrl/freescale/pinctrl-imx25.c
1316     +++ b/drivers/pinctrl/freescale/pinctrl-imx25.c
1317     @@ -26,7 +26,8 @@
1318     #include "pinctrl-imx.h"
1319    
1320     enum imx25_pads {
1321     - MX25_PAD_RESERVE0 = 1,
1322     + MX25_PAD_RESERVE0 = 0,
1323     + MX25_PAD_RESERVE1 = 1,
1324     MX25_PAD_A10 = 2,
1325     MX25_PAD_A13 = 3,
1326     MX25_PAD_A14 = 4,
1327     @@ -169,6 +170,7 @@ enum imx25_pads {
1328     /* Pad names for the pinmux subsystem */
1329     static const struct pinctrl_pin_desc imx25_pinctrl_pads[] = {
1330     IMX_PINCTRL_PIN(MX25_PAD_RESERVE0),
1331     + IMX_PINCTRL_PIN(MX25_PAD_RESERVE1),
1332     IMX_PINCTRL_PIN(MX25_PAD_A10),
1333     IMX_PINCTRL_PIN(MX25_PAD_A13),
1334     IMX_PINCTRL_PIN(MX25_PAD_A14),
1335     diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c
1336     index 802fabb30e15..34cbe3505dac 100644
1337     --- a/fs/btrfs/backref.c
1338     +++ b/fs/btrfs/backref.c
1339     @@ -1809,7 +1809,6 @@ static int iterate_inode_extrefs(u64 inum, struct btrfs_root *fs_root,
1340     int found = 0;
1341     struct extent_buffer *eb;
1342     struct btrfs_inode_extref *extref;
1343     - struct extent_buffer *leaf;
1344     u32 item_size;
1345     u32 cur_offset;
1346     unsigned long ptr;
1347     @@ -1837,9 +1836,8 @@ static int iterate_inode_extrefs(u64 inum, struct btrfs_root *fs_root,
1348     btrfs_set_lock_blocking_rw(eb, BTRFS_READ_LOCK);
1349     btrfs_release_path(path);
1350    
1351     - leaf = path->nodes[0];
1352     - item_size = btrfs_item_size_nr(leaf, slot);
1353     - ptr = btrfs_item_ptr_offset(leaf, slot);
1354     + item_size = btrfs_item_size_nr(eb, slot);
1355     + ptr = btrfs_item_ptr_offset(eb, slot);
1356     cur_offset = 0;
1357    
1358     while (cur_offset < item_size) {
1359     @@ -1853,7 +1851,7 @@ static int iterate_inode_extrefs(u64 inum, struct btrfs_root *fs_root,
1360     if (ret)
1361     break;
1362    
1363     - cur_offset += btrfs_inode_extref_name_len(leaf, extref);
1364     + cur_offset += btrfs_inode_extref_name_len(eb, extref);
1365     cur_offset += sizeof(*extref);
1366     }
1367     btrfs_tree_read_unlock_blocking(eb);
1368     diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
1369     index 0770c91586ca..f490b6155091 100644
1370     --- a/fs/btrfs/ioctl.c
1371     +++ b/fs/btrfs/ioctl.c
1372     @@ -4647,6 +4647,11 @@ locked:
1373     bctl->flags |= BTRFS_BALANCE_TYPE_MASK;
1374     }
1375    
1376     + if (bctl->flags & ~(BTRFS_BALANCE_ARGS_MASK | BTRFS_BALANCE_TYPE_MASK)) {
1377     + ret = -EINVAL;
1378     + goto out_bargs;
1379     + }
1380     +
1381     do_balance:
1382     /*
1383     * Ownership of bctl and mutually_exclusive_operation_running
1384     diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h
1385     index 95842a909e7f..2ac5f8cd701a 100644
1386     --- a/fs/btrfs/volumes.h
1387     +++ b/fs/btrfs/volumes.h
1388     @@ -376,6 +376,14 @@ struct map_lookup {
1389     #define BTRFS_BALANCE_ARGS_VRANGE (1ULL << 4)
1390     #define BTRFS_BALANCE_ARGS_LIMIT (1ULL << 5)
1391    
1392     +#define BTRFS_BALANCE_ARGS_MASK \
1393     + (BTRFS_BALANCE_ARGS_PROFILES | \
1394     + BTRFS_BALANCE_ARGS_USAGE | \
1395     + BTRFS_BALANCE_ARGS_DEVID | \
1396     + BTRFS_BALANCE_ARGS_DRANGE | \
1397     + BTRFS_BALANCE_ARGS_VRANGE | \
1398     + BTRFS_BALANCE_ARGS_LIMIT)
1399     +
1400     /*
1401     * Profile changing flags. When SOFT is set we won't relocate chunk if
1402     * it already has the target profile (even though it may be
1403     diff --git a/fs/nfsd/blocklayout.c b/fs/nfsd/blocklayout.c
1404     index cdefaa331a07..c29d9421bd5e 100644
1405     --- a/fs/nfsd/blocklayout.c
1406     +++ b/fs/nfsd/blocklayout.c
1407     @@ -56,14 +56,6 @@ nfsd4_block_proc_layoutget(struct inode *inode, const struct svc_fh *fhp,
1408     u32 device_generation = 0;
1409     int error;
1410    
1411     - /*
1412     - * We do not attempt to support I/O smaller than the fs block size,
1413     - * or not aligned to it.
1414     - */
1415     - if (args->lg_minlength < block_size) {
1416     - dprintk("pnfsd: I/O too small\n");
1417     - goto out_layoutunavailable;
1418     - }
1419     if (seg->offset & (block_size - 1)) {
1420     dprintk("pnfsd: I/O misaligned\n");
1421     goto out_layoutunavailable;
1422     diff --git a/include/drm/drm_dp_mst_helper.h b/include/drm/drm_dp_mst_helper.h
1423     index 86d0b25ed054..a89f505c856b 100644
1424     --- a/include/drm/drm_dp_mst_helper.h
1425     +++ b/include/drm/drm_dp_mst_helper.h
1426     @@ -253,6 +253,7 @@ struct drm_dp_remote_dpcd_write {
1427     u8 *bytes;
1428     };
1429    
1430     +#define DP_REMOTE_I2C_READ_MAX_TRANSACTIONS 4
1431     struct drm_dp_remote_i2c_read {
1432     u8 num_transactions;
1433     u8 port_number;
1434     @@ -262,7 +263,7 @@ struct drm_dp_remote_i2c_read {
1435     u8 *bytes;
1436     u8 no_stop_bit;
1437     u8 i2c_transaction_delay;
1438     - } transactions[4];
1439     + } transactions[DP_REMOTE_I2C_READ_MAX_TRANSACTIONS];
1440     u8 read_i2c_device_id;
1441     u8 num_bytes_read;
1442     };
1443     diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
1444     index 9b88536487e6..275158803824 100644
1445     --- a/include/linux/skbuff.h
1446     +++ b/include/linux/skbuff.h
1447     @@ -2601,6 +2601,9 @@ static inline void skb_postpull_rcsum(struct sk_buff *skb,
1448     {
1449     if (skb->ip_summed == CHECKSUM_COMPLETE)
1450     skb->csum = csum_sub(skb->csum, csum_partial(start, len, 0));
1451     + else if (skb->ip_summed == CHECKSUM_PARTIAL &&
1452     + skb_checksum_start_offset(skb) < 0)
1453     + skb->ip_summed = CHECKSUM_NONE;
1454     }
1455    
1456     unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len);
1457     diff --git a/include/net/af_unix.h b/include/net/af_unix.h
1458     index 4a167b30a12f..cb1b9bbda332 100644
1459     --- a/include/net/af_unix.h
1460     +++ b/include/net/af_unix.h
1461     @@ -63,7 +63,11 @@ struct unix_sock {
1462     #define UNIX_GC_MAYBE_CYCLE 1
1463     struct socket_wq peer_wq;
1464     };
1465     -#define unix_sk(__sk) ((struct unix_sock *)__sk)
1466     +
1467     +static inline struct unix_sock *unix_sk(struct sock *sk)
1468     +{
1469     + return (struct unix_sock *)sk;
1470     +}
1471    
1472     #define peer_wait peer_wq.wait
1473    
1474     diff --git a/include/net/sock.h b/include/net/sock.h
1475     index f21f0708ec59..4ca4c3fe446f 100644
1476     --- a/include/net/sock.h
1477     +++ b/include/net/sock.h
1478     @@ -826,6 +826,14 @@ static inline __must_check int sk_add_backlog(struct sock *sk, struct sk_buff *s
1479     if (sk_rcvqueues_full(sk, limit))
1480     return -ENOBUFS;
1481    
1482     + /*
1483     + * If the skb was allocated from pfmemalloc reserves, only
1484     + * allow SOCK_MEMALLOC sockets to use it as this socket is
1485     + * helping free memory
1486     + */
1487     + if (skb_pfmemalloc(skb) && !sock_flag(sk, SOCK_MEMALLOC))
1488     + return -ENOMEM;
1489     +
1490     __sk_add_backlog(sk, skb);
1491     sk->sk_backlog.len += skb->truesize;
1492     return 0;
1493     diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
1494     index a20d4110e871..3688f1e07ebd 100644
1495     --- a/kernel/time/timekeeping.c
1496     +++ b/kernel/time/timekeeping.c
1497     @@ -1244,7 +1244,7 @@ void __init timekeeping_init(void)
1498     set_normalized_timespec64(&tmp, -boot.tv_sec, -boot.tv_nsec);
1499     tk_set_wall_to_mono(tk, tmp);
1500    
1501     - timekeeping_update(tk, TK_MIRROR);
1502     + timekeeping_update(tk, TK_MIRROR | TK_CLOCK_WAS_SET);
1503    
1504     write_seqcount_end(&tk_core.seq);
1505     raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1506     diff --git a/kernel/workqueue.c b/kernel/workqueue.c
1507     index a413acb59a07..1de0f5fabb98 100644
1508     --- a/kernel/workqueue.c
1509     +++ b/kernel/workqueue.c
1510     @@ -1458,13 +1458,13 @@ static void __queue_delayed_work(int cpu, struct workqueue_struct *wq,
1511     timer_stats_timer_set_start_info(&dwork->timer);
1512    
1513     dwork->wq = wq;
1514     + /* timer isn't guaranteed to run in this cpu, record earlier */
1515     + if (cpu == WORK_CPU_UNBOUND)
1516     + cpu = raw_smp_processor_id();
1517     dwork->cpu = cpu;
1518     timer->expires = jiffies + delay;
1519    
1520     - if (unlikely(cpu != WORK_CPU_UNBOUND))
1521     - add_timer_on(timer, cpu);
1522     - else
1523     - add_timer(timer);
1524     + add_timer_on(timer, cpu);
1525     }
1526    
1527     /**
1528     diff --git a/mm/memcontrol.c b/mm/memcontrol.c
1529     index 237d4686482d..03a6f7506cf3 100644
1530     --- a/mm/memcontrol.c
1531     +++ b/mm/memcontrol.c
1532     @@ -3687,6 +3687,7 @@ static int __mem_cgroup_usage_register_event(struct mem_cgroup *memcg,
1533     ret = page_counter_memparse(args, "-1", &threshold);
1534     if (ret)
1535     return ret;
1536     + threshold <<= PAGE_SHIFT;
1537    
1538     mutex_lock(&memcg->thresholds_lock);
1539    
1540     diff --git a/net/core/ethtool.c b/net/core/ethtool.c
1541     index b495ab1797fa..29edf74846fc 100644
1542     --- a/net/core/ethtool.c
1543     +++ b/net/core/ethtool.c
1544     @@ -1284,7 +1284,7 @@ static int ethtool_get_strings(struct net_device *dev, void __user *useraddr)
1545    
1546     gstrings.len = ret;
1547    
1548     - data = kmalloc(gstrings.len * ETH_GSTRING_LEN, GFP_USER);
1549     + data = kcalloc(gstrings.len, ETH_GSTRING_LEN, GFP_USER);
1550     if (!data)
1551     return -ENOMEM;
1552    
1553     diff --git a/net/core/filter.c b/net/core/filter.c
1554     index be3098fb65e4..8dcdd86b68dd 100644
1555     --- a/net/core/filter.c
1556     +++ b/net/core/filter.c
1557     @@ -1412,6 +1412,7 @@ static u64 bpf_clone_redirect(u64 r1, u64 ifindex, u64 flags, u64 r4, u64 r5)
1558     return dev_forward_skb(dev, skb2);
1559    
1560     skb2->dev = dev;
1561     + skb_sender_cpu_clear(skb2);
1562     return dev_queue_xmit(skb2);
1563     }
1564    
1565     @@ -1701,9 +1702,13 @@ int sk_get_filter(struct sock *sk, struct sock_filter __user *ubuf,
1566     goto out;
1567    
1568     /* We're copying the filter that has been originally attached,
1569     - * so no conversion/decode needed anymore.
1570     + * so no conversion/decode needed anymore. eBPF programs that
1571     + * have no original program cannot be dumped through this.
1572     */
1573     + ret = -EACCES;
1574     fprog = filter->prog->orig_prog;
1575     + if (!fprog)
1576     + goto out;
1577    
1578     ret = fprog->len;
1579     if (!len)
1580     diff --git a/net/core/skbuff.c b/net/core/skbuff.c
1581     index 7b84330e5d30..7bfa18746681 100644
1582     --- a/net/core/skbuff.c
1583     +++ b/net/core/skbuff.c
1584     @@ -2958,11 +2958,12 @@ EXPORT_SYMBOL_GPL(skb_append_pagefrags);
1585     */
1586     unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len)
1587     {
1588     + unsigned char *data = skb->data;
1589     +
1590     BUG_ON(len > skb->len);
1591     - skb->len -= len;
1592     - BUG_ON(skb->len < skb->data_len);
1593     - skb_postpull_rcsum(skb, skb->data, len);
1594     - return skb->data += len;
1595     + __skb_pull(skb, len);
1596     + skb_postpull_rcsum(skb, data, len);
1597     + return skb->data;
1598     }
1599     EXPORT_SYMBOL_GPL(skb_pull_rcsum);
1600    
1601     diff --git a/net/dsa/slave.c b/net/dsa/slave.c
1602     index 35c47ddd04f0..25dbb91e1bc0 100644
1603     --- a/net/dsa/slave.c
1604     +++ b/net/dsa/slave.c
1605     @@ -348,12 +348,17 @@ static int dsa_slave_stp_update(struct net_device *dev, u8 state)
1606     static int dsa_slave_port_attr_set(struct net_device *dev,
1607     struct switchdev_attr *attr)
1608     {
1609     - int ret = 0;
1610     + struct dsa_slave_priv *p = netdev_priv(dev);
1611     + struct dsa_switch *ds = p->parent;
1612     + int ret;
1613    
1614     switch (attr->id) {
1615     case SWITCHDEV_ATTR_PORT_STP_STATE:
1616     - if (attr->trans == SWITCHDEV_TRANS_COMMIT)
1617     - ret = dsa_slave_stp_update(dev, attr->u.stp_state);
1618     + if (attr->trans == SWITCHDEV_TRANS_PREPARE)
1619     + ret = ds->drv->port_stp_update ? 0 : -EOPNOTSUPP;
1620     + else
1621     + ret = ds->drv->port_stp_update(ds, p->port,
1622     + attr->u.stp_state);
1623     break;
1624     default:
1625     ret = -EOPNOTSUPP;
1626     diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
1627     index 134957159c27..61b45a17fc73 100644
1628     --- a/net/ipv4/inet_connection_sock.c
1629     +++ b/net/ipv4/inet_connection_sock.c
1630     @@ -577,21 +577,22 @@ EXPORT_SYMBOL(inet_rtx_syn_ack);
1631     static bool reqsk_queue_unlink(struct request_sock_queue *queue,
1632     struct request_sock *req)
1633     {
1634     - struct listen_sock *lopt = queue->listen_opt;
1635     struct request_sock **prev;
1636     + struct listen_sock *lopt;
1637     bool found = false;
1638    
1639     spin_lock(&queue->syn_wait_lock);
1640     -
1641     - for (prev = &lopt->syn_table[req->rsk_hash]; *prev != NULL;
1642     - prev = &(*prev)->dl_next) {
1643     - if (*prev == req) {
1644     - *prev = req->dl_next;
1645     - found = true;
1646     - break;
1647     + lopt = queue->listen_opt;
1648     + if (lopt) {
1649     + for (prev = &lopt->syn_table[req->rsk_hash]; *prev != NULL;
1650     + prev = &(*prev)->dl_next) {
1651     + if (*prev == req) {
1652     + *prev = req->dl_next;
1653     + found = true;
1654     + break;
1655     + }
1656     }
1657     }
1658     -
1659     spin_unlock(&queue->syn_wait_lock);
1660     if (timer_pending(&req->rsk_timer) && del_timer_sync(&req->rsk_timer))
1661     reqsk_put(req);
1662     @@ -685,20 +686,20 @@ void reqsk_queue_hash_req(struct request_sock_queue *queue,
1663     req->num_timeout = 0;
1664     req->sk = NULL;
1665    
1666     + setup_timer(&req->rsk_timer, reqsk_timer_handler, (unsigned long)req);
1667     + mod_timer_pinned(&req->rsk_timer, jiffies + timeout);
1668     + req->rsk_hash = hash;
1669     +
1670     /* before letting lookups find us, make sure all req fields
1671     * are committed to memory and refcnt initialized.
1672     */
1673     smp_wmb();
1674     atomic_set(&req->rsk_refcnt, 2);
1675     - setup_timer(&req->rsk_timer, reqsk_timer_handler, (unsigned long)req);
1676     - req->rsk_hash = hash;
1677    
1678     spin_lock(&queue->syn_wait_lock);
1679     req->dl_next = lopt->syn_table[hash];
1680     lopt->syn_table[hash] = req;
1681     spin_unlock(&queue->syn_wait_lock);
1682     -
1683     - mod_timer_pinned(&req->rsk_timer, jiffies + timeout);
1684     }
1685     EXPORT_SYMBOL(reqsk_queue_hash_req);
1686    
1687     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
1688     index 00b64d402a57..dd6ebba5846c 100644
1689     --- a/net/ipv6/route.c
1690     +++ b/net/ipv6/route.c
1691     @@ -139,6 +139,9 @@ static void rt6_uncached_list_flush_dev(struct net *net, struct net_device *dev)
1692     struct net_device *loopback_dev = net->loopback_dev;
1693     int cpu;
1694    
1695     + if (dev == loopback_dev)
1696     + return;
1697     +
1698     for_each_possible_cpu(cpu) {
1699     struct uncached_list *ul = per_cpu_ptr(&rt6_uncached_list, cpu);
1700     struct rt6_info *rt;
1701     @@ -148,14 +151,12 @@ static void rt6_uncached_list_flush_dev(struct net *net, struct net_device *dev)
1702     struct inet6_dev *rt_idev = rt->rt6i_idev;
1703     struct net_device *rt_dev = rt->dst.dev;
1704    
1705     - if (rt_idev && (rt_idev->dev == dev || !dev) &&
1706     - rt_idev->dev != loopback_dev) {
1707     + if (rt_idev->dev == dev) {
1708     rt->rt6i_idev = in6_dev_get(loopback_dev);
1709     in6_dev_put(rt_idev);
1710     }
1711    
1712     - if (rt_dev && (rt_dev == dev || !dev) &&
1713     - rt_dev != loopback_dev) {
1714     + if (rt_dev == dev) {
1715     rt->dst.dev = loopback_dev;
1716     dev_hold(rt->dst.dev);
1717     dev_put(rt_dev);
1718     @@ -2577,7 +2578,8 @@ void rt6_ifdown(struct net *net, struct net_device *dev)
1719    
1720     fib6_clean_all(net, fib6_ifdown, &adn);
1721     icmp6_clean_all(fib6_ifdown, &adn);
1722     - rt6_uncached_list_flush_dev(net, dev);
1723     + if (dev)
1724     + rt6_uncached_list_flush_dev(net, dev);
1725     }
1726    
1727     struct rt6_mtu_change_arg {
1728     diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c
1729     index f6b090df3930..afca2eb4dfa7 100644
1730     --- a/net/l2tp/l2tp_core.c
1731     +++ b/net/l2tp/l2tp_core.c
1732     @@ -1319,7 +1319,7 @@ static void l2tp_tunnel_del_work(struct work_struct *work)
1733     tunnel = container_of(work, struct l2tp_tunnel, del_work);
1734     sk = l2tp_tunnel_sock_lookup(tunnel);
1735     if (!sk)
1736     - return;
1737     + goto out;
1738    
1739     sock = sk->sk_socket;
1740    
1741     @@ -1341,6 +1341,8 @@ static void l2tp_tunnel_del_work(struct work_struct *work)
1742     }
1743    
1744     l2tp_tunnel_sock_put(sk);
1745     +out:
1746     + l2tp_tunnel_dec_refcount(tunnel);
1747     }
1748    
1749     /* Create a socket for the tunnel, if one isn't set up by
1750     @@ -1636,8 +1638,13 @@ EXPORT_SYMBOL_GPL(l2tp_tunnel_create);
1751     */
1752     int l2tp_tunnel_delete(struct l2tp_tunnel *tunnel)
1753     {
1754     + l2tp_tunnel_inc_refcount(tunnel);
1755     l2tp_tunnel_closeall(tunnel);
1756     - return (false == queue_work(l2tp_wq, &tunnel->del_work));
1757     + if (false == queue_work(l2tp_wq, &tunnel->del_work)) {
1758     + l2tp_tunnel_dec_refcount(tunnel);
1759     + return 1;
1760     + }
1761     + return 0;
1762     }
1763     EXPORT_SYMBOL_GPL(l2tp_tunnel_delete);
1764    
1765     diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
1766     index 0857f7243797..a133d16eb053 100644
1767     --- a/net/netlink/af_netlink.c
1768     +++ b/net/netlink/af_netlink.c
1769     @@ -2750,6 +2750,7 @@ static int netlink_dump(struct sock *sk)
1770     struct sk_buff *skb = NULL;
1771     struct nlmsghdr *nlh;
1772     int len, err = -ENOBUFS;
1773     + int alloc_min_size;
1774     int alloc_size;
1775    
1776     mutex_lock(nlk->cb_mutex);
1777     @@ -2758,9 +2759,6 @@ static int netlink_dump(struct sock *sk)
1778     goto errout_skb;
1779     }
1780    
1781     - cb = &nlk->cb;
1782     - alloc_size = max_t(int, cb->min_dump_alloc, NLMSG_GOODSIZE);
1783     -
1784     if (!netlink_rx_is_mmaped(sk) &&
1785     atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf)
1786     goto errout_skb;
1787     @@ -2770,23 +2768,35 @@ static int netlink_dump(struct sock *sk)
1788     * to reduce number of system calls on dump operations, if user
1789     * ever provided a big enough buffer.
1790     */
1791     - if (alloc_size < nlk->max_recvmsg_len) {
1792     - skb = netlink_alloc_skb(sk,
1793     - nlk->max_recvmsg_len,
1794     - nlk->portid,
1795     + cb = &nlk->cb;
1796     + alloc_min_size = max_t(int, cb->min_dump_alloc, NLMSG_GOODSIZE);
1797     +
1798     + if (alloc_min_size < nlk->max_recvmsg_len) {
1799     + alloc_size = nlk->max_recvmsg_len;
1800     + skb = netlink_alloc_skb(sk, alloc_size, nlk->portid,
1801     GFP_KERNEL |
1802     __GFP_NOWARN |
1803     __GFP_NORETRY);
1804     - /* available room should be exact amount to avoid MSG_TRUNC */
1805     - if (skb)
1806     - skb_reserve(skb, skb_tailroom(skb) -
1807     - nlk->max_recvmsg_len);
1808     }
1809     - if (!skb)
1810     + if (!skb) {
1811     + alloc_size = alloc_min_size;
1812     skb = netlink_alloc_skb(sk, alloc_size, nlk->portid,
1813     GFP_KERNEL);
1814     + }
1815     if (!skb)
1816     goto errout_skb;
1817     +
1818     + /* Trim skb to allocated size. User is expected to provide buffer as
1819     + * large as max(min_dump_alloc, 16KiB (mac_recvmsg_len capped at
1820     + * netlink_recvmsg())). dump will pack as many smaller messages as
1821     + * could fit within the allocated skb. skb is typically allocated
1822     + * with larger space than required (could be as much as near 2x the
1823     + * requested size with align to next power of 2 approach). Allowing
1824     + * dump to use the excess space makes it difficult for a user to have a
1825     + * reasonable static buffer based on the expected largest dump of a
1826     + * single netdev. The outcome is MSG_TRUNC error.
1827     + */
1828     + skb_reserve(skb, skb_tailroom(skb) - alloc_size);
1829     netlink_skb_set_owner_r(skb, sk);
1830    
1831     len = cb->dump(skb, cb);
1832     diff --git a/net/openvswitch/flow_table.c b/net/openvswitch/flow_table.c
1833     index b5c3bba87fc8..af08e6fc9860 100644
1834     --- a/net/openvswitch/flow_table.c
1835     +++ b/net/openvswitch/flow_table.c
1836     @@ -92,7 +92,8 @@ struct sw_flow *ovs_flow_alloc(void)
1837    
1838     /* Initialize the default stat node. */
1839     stats = kmem_cache_alloc_node(flow_stats_cache,
1840     - GFP_KERNEL | __GFP_ZERO, 0);
1841     + GFP_KERNEL | __GFP_ZERO,
1842     + node_online(0) ? 0 : NUMA_NO_NODE);
1843     if (!stats)
1844     goto err;
1845    
1846     diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c
1847     index 268545050ddb..b1768198ad59 100644
1848     --- a/net/sched/act_mirred.c
1849     +++ b/net/sched/act_mirred.c
1850     @@ -168,6 +168,7 @@ static int tcf_mirred(struct sk_buff *skb, const struct tc_action *a,
1851    
1852     skb2->skb_iif = skb->dev->ifindex;
1853     skb2->dev = dev;
1854     + skb_sender_cpu_clear(skb2);
1855     err = dev_queue_xmit(skb2);
1856    
1857     out:
1858     diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
1859     index 2e1348bde325..96d886a866e9 100644
1860     --- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
1861     +++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
1862     @@ -146,7 +146,8 @@ int rdma_read_chunk_lcl(struct svcxprt_rdma *xprt,
1863     ctxt->read_hdr = head;
1864     pages_needed =
1865     min_t(int, pages_needed, rdma_read_max_sge(xprt, pages_needed));
1866     - read = min_t(int, pages_needed << PAGE_SHIFT, rs_length);
1867     + read = min_t(int, (pages_needed << PAGE_SHIFT) - *page_offset,
1868     + rs_length);
1869    
1870     for (pno = 0; pno < pages_needed; pno++) {
1871     int len = min_t(int, rs_length, PAGE_SIZE - pg_off);
1872     @@ -245,7 +246,8 @@ int rdma_read_chunk_frmr(struct svcxprt_rdma *xprt,
1873     ctxt->direction = DMA_FROM_DEVICE;
1874     ctxt->frmr = frmr;
1875     pages_needed = min_t(int, pages_needed, xprt->sc_frmr_pg_list_len);
1876     - read = min_t(int, pages_needed << PAGE_SHIFT, rs_length);
1877     + read = min_t(int, (pages_needed << PAGE_SHIFT) - *page_offset,
1878     + rs_length);
1879    
1880     frmr->kva = page_address(rqstp->rq_arg.pages[pg_no]);
1881     frmr->direction = DMA_FROM_DEVICE;
1882     diff --git a/net/tipc/msg.h b/net/tipc/msg.h
1883     index 19c45fb66238..49f9a9648aa9 100644
1884     --- a/net/tipc/msg.h
1885     +++ b/net/tipc/msg.h
1886     @@ -357,7 +357,7 @@ static inline u32 msg_importance(struct tipc_msg *m)
1887     if (likely((usr <= TIPC_CRITICAL_IMPORTANCE) && !msg_errcode(m)))
1888     return usr;
1889     if ((usr == MSG_FRAGMENTER) || (usr == MSG_BUNDLER))
1890     - return msg_bits(m, 5, 13, 0x7);
1891     + return msg_bits(m, 9, 0, 0x7);
1892     return TIPC_SYSTEM_IMPORTANCE;
1893     }
1894    
1895     @@ -366,7 +366,7 @@ static inline void msg_set_importance(struct tipc_msg *m, u32 i)
1896     int usr = msg_user(m);
1897    
1898     if (likely((usr == MSG_FRAGMENTER) || (usr == MSG_BUNDLER)))
1899     - msg_set_bits(m, 5, 13, 0x7, i);
1900     + msg_set_bits(m, 9, 0, 0x7, i);
1901     else if (i < TIPC_SYSTEM_IMPORTANCE)
1902     msg_set_user(m, i);
1903     else
1904     diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
1905     index 03ee4d359f6a..94f658235fb4 100644
1906     --- a/net/unix/af_unix.c
1907     +++ b/net/unix/af_unix.c
1908     @@ -2064,6 +2064,11 @@ static int unix_stream_read_generic(struct unix_stream_read_state *state)
1909     goto out;
1910     }
1911    
1912     + if (flags & MSG_PEEK)
1913     + skip = sk_peek_offset(sk, flags);
1914     + else
1915     + skip = 0;
1916     +
1917     do {
1918     int chunk;
1919     struct sk_buff *skb, *last;
1920     @@ -2112,7 +2117,6 @@ unlock:
1921     break;
1922     }
1923    
1924     - skip = sk_peek_offset(sk, flags);
1925     while (skip >= unix_skb_len(skb)) {
1926     skip -= unix_skb_len(skb);
1927     last = skb;
1928     @@ -2181,6 +2185,17 @@ unlock:
1929    
1930     sk_peek_offset_fwd(sk, chunk);
1931    
1932     + if (UNIXCB(skb).fp)
1933     + break;
1934     +
1935     + skip = 0;
1936     + last = skb;
1937     + last_len = skb->len;
1938     + unix_state_lock(sk);
1939     + skb = skb_peek_next(skb, &sk->sk_receive_queue);
1940     + if (skb)
1941     + goto again;
1942     + unix_state_unlock(sk);
1943     break;
1944     }
1945     } while (size);