Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2710 - (show annotations) (download)
Mon Nov 2 12:49:35 2015 UTC (8 years, 6 months ago) by niro
File size: 62340 byte(s)
-linux-4.2.5
1 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);