Magellan Linux

Contents of /trunk/kernel-magellan/patches-4.11/0104-4.11.5-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2944 - (show annotations) (download)
Mon Jun 19 08:32:05 2017 UTC (6 years, 10 months ago) by niro
File size: 173614 byte(s)
-linux-4.11.5
1 diff --git a/Makefile b/Makefile
2 index 741814dca844..5b3a81d3262e 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 11
8 -SUBLEVEL = 4
9 +SUBLEVEL = 5
10 EXTRAVERSION =
11 NAME = Fearless Coyote
12
13 diff --git a/arch/arm/boot/dts/keystone-k2l-netcp.dtsi b/arch/arm/boot/dts/keystone-k2l-netcp.dtsi
14 index b6f26824e83a..66f615a74118 100644
15 --- a/arch/arm/boot/dts/keystone-k2l-netcp.dtsi
16 +++ b/arch/arm/boot/dts/keystone-k2l-netcp.dtsi
17 @@ -137,8 +137,8 @@ netcp: netcp@26000000 {
18 /* NetCP address range */
19 ranges = <0 0x26000000 0x1000000>;
20
21 - clocks = <&clkpa>, <&clkcpgmac>, <&chipclk12>, <&clkosr>;
22 - clock-names = "pa_clk", "ethss_clk", "cpts", "osr_clk";
23 + clocks = <&clkpa>, <&clkcpgmac>, <&chipclk12>;
24 + clock-names = "pa_clk", "ethss_clk", "cpts";
25 dma-coherent;
26
27 ti,navigator-dmas = <&dma_gbe 0>,
28 diff --git a/arch/arm/boot/dts/keystone-k2l.dtsi b/arch/arm/boot/dts/keystone-k2l.dtsi
29 index b58e7ebc0919..148650406cf7 100644
30 --- a/arch/arm/boot/dts/keystone-k2l.dtsi
31 +++ b/arch/arm/boot/dts/keystone-k2l.dtsi
32 @@ -232,6 +232,14 @@
33 };
34 };
35
36 + osr: sram@70000000 {
37 + compatible = "mmio-sram";
38 + reg = <0x70000000 0x10000>;
39 + #address-cells = <1>;
40 + #size-cells = <1>;
41 + clocks = <&clkosr>;
42 + };
43 +
44 dspgpio0: keystone_dsp_gpio@02620240 {
45 compatible = "ti,keystone-dsp-gpio";
46 gpio-controller;
47 diff --git a/arch/arm/kvm/init.S b/arch/arm/kvm/init.S
48 index bf89c919efc1..bd0ee7fc304c 100644
49 --- a/arch/arm/kvm/init.S
50 +++ b/arch/arm/kvm/init.S
51 @@ -95,7 +95,6 @@ __do_hyp_init:
52 @ - Write permission implies XN: disabled
53 @ - Instruction cache: enabled
54 @ - Data/Unified cache: enabled
55 - @ - Memory alignment checks: enabled
56 @ - MMU: enabled (this code must be run from an identity mapping)
57 mrc p15, 4, r0, c1, c0, 0 @ HSCR
58 ldr r2, =HSCTLR_MASK
59 @@ -103,8 +102,8 @@ __do_hyp_init:
60 mrc p15, 0, r1, c1, c0, 0 @ SCTLR
61 ldr r2, =(HSCTLR_EE | HSCTLR_FI | HSCTLR_I | HSCTLR_C)
62 and r1, r1, r2
63 - ARM( ldr r2, =(HSCTLR_M | HSCTLR_A) )
64 - THUMB( ldr r2, =(HSCTLR_M | HSCTLR_A | HSCTLR_TE) )
65 + ARM( ldr r2, =(HSCTLR_M) )
66 + THUMB( ldr r2, =(HSCTLR_M | HSCTLR_TE) )
67 orr r1, r1, r2
68 orr r0, r0, r1
69 mcr p15, 4, r0, c1, c0, 0 @ HSCR
70 diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
71 index 3837b096e1a6..b97bc12812ab 100644
72 --- a/arch/arm/kvm/mmu.c
73 +++ b/arch/arm/kvm/mmu.c
74 @@ -879,6 +879,9 @@ static pmd_t *stage2_get_pmd(struct kvm *kvm, struct kvm_mmu_memory_cache *cache
75 pmd_t *pmd;
76
77 pud = stage2_get_pud(kvm, cache, addr);
78 + if (!pud)
79 + return NULL;
80 +
81 if (stage2_pud_none(*pud)) {
82 if (!cache)
83 return NULL;
84 diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
85 index ac24b6e798b1..2d3e155b185f 100644
86 --- a/arch/arm64/include/asm/sysreg.h
87 +++ b/arch/arm64/include/asm/sysreg.h
88 @@ -138,6 +138,10 @@
89 #define SCTLR_ELx_A (1 << 1)
90 #define SCTLR_ELx_M 1
91
92 +#define SCTLR_EL2_RES1 ((1 << 4) | (1 << 5) | (1 << 11) | (1 << 16) | \
93 + (1 << 16) | (1 << 18) | (1 << 22) | (1 << 23) | \
94 + (1 << 28) | (1 << 29))
95 +
96 #define SCTLR_ELx_FLAGS (SCTLR_ELx_M | SCTLR_ELx_A | SCTLR_ELx_C | \
97 SCTLR_ELx_SA | SCTLR_ELx_I)
98
99 diff --git a/arch/arm64/kvm/hyp-init.S b/arch/arm64/kvm/hyp-init.S
100 index 6b29d3d9e1f2..4bbff904169d 100644
101 --- a/arch/arm64/kvm/hyp-init.S
102 +++ b/arch/arm64/kvm/hyp-init.S
103 @@ -102,10 +102,13 @@ __do_hyp_init:
104 tlbi alle2
105 dsb sy
106
107 - mrs x4, sctlr_el2
108 - and x4, x4, #SCTLR_ELx_EE // preserve endianness of EL2
109 - ldr x5, =SCTLR_ELx_FLAGS
110 - orr x4, x4, x5
111 + /*
112 + * Preserve all the RES1 bits while setting the default flags,
113 + * as well as the EE bit on BE. Drop the A flag since the compiler
114 + * is allowed to generate unaligned accesses.
115 + */
116 + ldr x4, =(SCTLR_EL2_RES1 | (SCTLR_ELx_FLAGS & ~SCTLR_ELx_A))
117 +CPU_BE( orr x4, x4, #SCTLR_ELx_EE)
118 msr sctlr_el2, x4
119 isb
120
121 diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
122 index b68e10fc453d..0f88015f3bfa 100644
123 --- a/arch/mips/kernel/process.c
124 +++ b/arch/mips/kernel/process.c
125 @@ -120,7 +120,6 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
126 struct thread_info *ti = task_thread_info(p);
127 struct pt_regs *childregs, *regs = current_pt_regs();
128 unsigned long childksp;
129 - p->set_child_tid = p->clear_child_tid = NULL;
130
131 childksp = (unsigned long)task_stack_page(p) + THREAD_SIZE - 32;
132
133 diff --git a/arch/openrisc/kernel/process.c b/arch/openrisc/kernel/process.c
134 index f8da545854f9..106859ae27ff 100644
135 --- a/arch/openrisc/kernel/process.c
136 +++ b/arch/openrisc/kernel/process.c
137 @@ -167,8 +167,6 @@ copy_thread(unsigned long clone_flags, unsigned long usp,
138
139 top_of_kernel_stack = sp;
140
141 - p->set_child_tid = p->clear_child_tid = NULL;
142 -
143 /* Locate userspace context on stack... */
144 sp -= STACK_FRAME_OVERHEAD; /* redzone */
145 sp -= sizeof(struct pt_regs);
146 diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h
147 index 8b3b46b7b0f2..329771559cbb 100644
148 --- a/arch/powerpc/include/asm/topology.h
149 +++ b/arch/powerpc/include/asm/topology.h
150 @@ -44,8 +44,22 @@ extern void __init dump_numa_cpu_topology(void);
151 extern int sysfs_add_device_to_node(struct device *dev, int nid);
152 extern void sysfs_remove_device_from_node(struct device *dev, int nid);
153
154 +static inline int early_cpu_to_node(int cpu)
155 +{
156 + int nid;
157 +
158 + nid = numa_cpu_lookup_table[cpu];
159 +
160 + /*
161 + * Fall back to node 0 if nid is unset (it should be, except bugs).
162 + * This allows callers to safely do NODE_DATA(early_cpu_to_node(cpu)).
163 + */
164 + return (nid < 0) ? 0 : nid;
165 +}
166 #else
167
168 +static inline int early_cpu_to_node(int cpu) { return 0; }
169 +
170 static inline void dump_numa_cpu_topology(void) {}
171
172 static inline int sysfs_add_device_to_node(struct device *dev, int nid)
173 diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
174 index baae104b16c7..2ad725ef4368 100644
175 --- a/arch/powerpc/kernel/process.c
176 +++ b/arch/powerpc/kernel/process.c
177 @@ -1666,6 +1666,7 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
178 #ifdef CONFIG_VSX
179 current->thread.used_vsr = 0;
180 #endif
181 + current->thread.load_fp = 0;
182 memset(&current->thread.fp_state, 0, sizeof(current->thread.fp_state));
183 current->thread.fp_save_area = NULL;
184 #ifdef CONFIG_ALTIVEC
185 @@ -1674,6 +1675,7 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
186 current->thread.vr_save_area = NULL;
187 current->thread.vrsave = 0;
188 current->thread.used_vr = 0;
189 + current->thread.load_vec = 0;
190 #endif /* CONFIG_ALTIVEC */
191 #ifdef CONFIG_SPE
192 memset(current->thread.evr, 0, sizeof(current->thread.evr));
193 @@ -1685,6 +1687,7 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
194 current->thread.tm_tfhar = 0;
195 current->thread.tm_texasr = 0;
196 current->thread.tm_tfiar = 0;
197 + current->thread.load_tm = 0;
198 #endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
199 }
200 EXPORT_SYMBOL(start_thread);
201 diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
202 index f997154dfc41..7183c43d4e81 100644
203 --- a/arch/powerpc/kernel/setup_64.c
204 +++ b/arch/powerpc/kernel/setup_64.c
205 @@ -650,7 +650,7 @@ void __init emergency_stack_init(void)
206
207 static void * __init pcpu_fc_alloc(unsigned int cpu, size_t size, size_t align)
208 {
209 - return __alloc_bootmem_node(NODE_DATA(cpu_to_node(cpu)), size, align,
210 + return __alloc_bootmem_node(NODE_DATA(early_cpu_to_node(cpu)), size, align,
211 __pa(MAX_DMA_ADDRESS));
212 }
213
214 @@ -661,7 +661,7 @@ static void __init pcpu_fc_free(void *ptr, size_t size)
215
216 static int pcpu_cpu_distance(unsigned int from, unsigned int to)
217 {
218 - if (cpu_to_node(from) == cpu_to_node(to))
219 + if (early_cpu_to_node(from) == early_cpu_to_node(to))
220 return LOCAL_DISTANCE;
221 else
222 return REMOTE_DISTANCE;
223 diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
224 index e104c71ea44a..1fb162ba9d1c 100644
225 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
226 +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
227 @@ -124,6 +124,7 @@ static struct property *dlpar_clone_drconf_property(struct device_node *dn)
228 for (i = 0; i < num_lmbs; i++) {
229 lmbs[i].base_addr = be64_to_cpu(lmbs[i].base_addr);
230 lmbs[i].drc_index = be32_to_cpu(lmbs[i].drc_index);
231 + lmbs[i].aa_index = be32_to_cpu(lmbs[i].aa_index);
232 lmbs[i].flags = be32_to_cpu(lmbs[i].flags);
233 }
234
235 @@ -147,6 +148,7 @@ static void dlpar_update_drconf_property(struct device_node *dn,
236 for (i = 0; i < num_lmbs; i++) {
237 lmbs[i].base_addr = cpu_to_be64(lmbs[i].base_addr);
238 lmbs[i].drc_index = cpu_to_be32(lmbs[i].drc_index);
239 + lmbs[i].aa_index = cpu_to_be32(lmbs[i].aa_index);
240 lmbs[i].flags = cpu_to_be32(lmbs[i].flags);
241 }
242
243 diff --git a/arch/powerpc/sysdev/simple_gpio.c b/arch/powerpc/sysdev/simple_gpio.c
244 index ef470b470b04..6afddae2fb47 100644
245 --- a/arch/powerpc/sysdev/simple_gpio.c
246 +++ b/arch/powerpc/sysdev/simple_gpio.c
247 @@ -75,7 +75,8 @@ static int u8_gpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)
248
249 static void u8_gpio_save_regs(struct of_mm_gpio_chip *mm_gc)
250 {
251 - struct u8_gpio_chip *u8_gc = gpiochip_get_data(&mm_gc->gc);
252 + struct u8_gpio_chip *u8_gc =
253 + container_of(mm_gc, struct u8_gpio_chip, mm_gc);
254
255 u8_gc->data = in_8(mm_gc->regs);
256 }
257 diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
258 index 3db2543733a5..1384d4c9764b 100644
259 --- a/arch/sparc/Kconfig
260 +++ b/arch/sparc/Kconfig
261 @@ -192,9 +192,9 @@ config NR_CPUS
262 int "Maximum number of CPUs"
263 depends on SMP
264 range 2 32 if SPARC32
265 - range 2 1024 if SPARC64
266 + range 2 4096 if SPARC64
267 default 32 if SPARC32
268 - default 64 if SPARC64
269 + default 4096 if SPARC64
270
271 source kernel/Kconfig.hz
272
273 diff --git a/arch/sparc/include/asm/mmu_64.h b/arch/sparc/include/asm/mmu_64.h
274 index f7de0dbc38af..83b36a5371ff 100644
275 --- a/arch/sparc/include/asm/mmu_64.h
276 +++ b/arch/sparc/include/asm/mmu_64.h
277 @@ -52,7 +52,7 @@
278 #define CTX_NR_MASK TAG_CONTEXT_BITS
279 #define CTX_HW_MASK (CTX_NR_MASK | CTX_PGSZ_MASK)
280
281 -#define CTX_FIRST_VERSION ((_AC(1,UL) << CTX_VERSION_SHIFT) + _AC(1,UL))
282 +#define CTX_FIRST_VERSION BIT(CTX_VERSION_SHIFT)
283 #define CTX_VALID(__ctx) \
284 (!(((__ctx.sparc64_ctx_val) ^ tlb_context_cache) & CTX_VERSION_MASK))
285 #define CTX_HWBITS(__ctx) ((__ctx.sparc64_ctx_val) & CTX_HW_MASK)
286 diff --git a/arch/sparc/include/asm/mmu_context_64.h b/arch/sparc/include/asm/mmu_context_64.h
287 index 22fede6eba11..2cddcda4f85f 100644
288 --- a/arch/sparc/include/asm/mmu_context_64.h
289 +++ b/arch/sparc/include/asm/mmu_context_64.h
290 @@ -19,13 +19,8 @@ extern spinlock_t ctx_alloc_lock;
291 extern unsigned long tlb_context_cache;
292 extern unsigned long mmu_context_bmap[];
293
294 +DECLARE_PER_CPU(struct mm_struct *, per_cpu_secondary_mm);
295 void get_new_mmu_context(struct mm_struct *mm);
296 -#ifdef CONFIG_SMP
297 -void smp_new_mmu_context_version(void);
298 -#else
299 -#define smp_new_mmu_context_version() do { } while (0)
300 -#endif
301 -
302 int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
303 void destroy_context(struct mm_struct *mm);
304
305 @@ -76,8 +71,9 @@ void __flush_tlb_mm(unsigned long, unsigned long);
306 static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, struct task_struct *tsk)
307 {
308 unsigned long ctx_valid, flags;
309 - int cpu;
310 + int cpu = smp_processor_id();
311
312 + per_cpu(per_cpu_secondary_mm, cpu) = mm;
313 if (unlikely(mm == &init_mm))
314 return;
315
316 @@ -123,7 +119,6 @@ static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, str
317 * for the first time, we must flush that context out of the
318 * local TLB.
319 */
320 - cpu = smp_processor_id();
321 if (!ctx_valid || !cpumask_test_cpu(cpu, mm_cpumask(mm))) {
322 cpumask_set_cpu(cpu, mm_cpumask(mm));
323 __flush_tlb_mm(CTX_HWBITS(mm->context),
324 @@ -133,26 +128,7 @@ static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, str
325 }
326
327 #define deactivate_mm(tsk,mm) do { } while (0)
328 -
329 -/* Activate a new MM instance for the current task. */
330 -static inline void activate_mm(struct mm_struct *active_mm, struct mm_struct *mm)
331 -{
332 - unsigned long flags;
333 - int cpu;
334 -
335 - spin_lock_irqsave(&mm->context.lock, flags);
336 - if (!CTX_VALID(mm->context))
337 - get_new_mmu_context(mm);
338 - cpu = smp_processor_id();
339 - if (!cpumask_test_cpu(cpu, mm_cpumask(mm)))
340 - cpumask_set_cpu(cpu, mm_cpumask(mm));
341 -
342 - load_secondary_context(mm);
343 - __flush_tlb_mm(CTX_HWBITS(mm->context), SECONDARY_CONTEXT);
344 - tsb_context_switch(mm);
345 - spin_unlock_irqrestore(&mm->context.lock, flags);
346 -}
347 -
348 +#define activate_mm(active_mm, mm) switch_mm(active_mm, mm, NULL)
349 #endif /* !(__ASSEMBLY__) */
350
351 #endif /* !(__SPARC64_MMU_CONTEXT_H) */
352 diff --git a/arch/sparc/include/asm/pil.h b/arch/sparc/include/asm/pil.h
353 index 266937030546..522b43db2ed3 100644
354 --- a/arch/sparc/include/asm/pil.h
355 +++ b/arch/sparc/include/asm/pil.h
356 @@ -20,7 +20,6 @@
357 #define PIL_SMP_CALL_FUNC 1
358 #define PIL_SMP_RECEIVE_SIGNAL 2
359 #define PIL_SMP_CAPTURE 3
360 -#define PIL_SMP_CTX_NEW_VERSION 4
361 #define PIL_DEVICE_IRQ 5
362 #define PIL_SMP_CALL_FUNC_SNGL 6
363 #define PIL_DEFERRED_PCR_WORK 7
364 diff --git a/arch/sparc/include/asm/vio.h b/arch/sparc/include/asm/vio.h
365 index 8174f6cdbbbb..9dca7a892978 100644
366 --- a/arch/sparc/include/asm/vio.h
367 +++ b/arch/sparc/include/asm/vio.h
368 @@ -327,6 +327,7 @@ struct vio_dev {
369 int compat_len;
370
371 u64 dev_no;
372 + u64 id;
373
374 unsigned long channel_id;
375
376 diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
377 index 4d0248aa0928..99dd133a029f 100644
378 --- a/arch/sparc/kernel/irq_64.c
379 +++ b/arch/sparc/kernel/irq_64.c
380 @@ -1034,17 +1034,26 @@ static void __init init_cpu_send_mondo_info(struct trap_per_cpu *tb)
381 {
382 #ifdef CONFIG_SMP
383 unsigned long page;
384 + void *mondo, *p;
385
386 - BUILD_BUG_ON((NR_CPUS * sizeof(u16)) > (PAGE_SIZE - 64));
387 + BUILD_BUG_ON((NR_CPUS * sizeof(u16)) > PAGE_SIZE);
388 +
389 + /* Make sure mondo block is 64byte aligned */
390 + p = kzalloc(127, GFP_KERNEL);
391 + if (!p) {
392 + prom_printf("SUN4V: Error, cannot allocate mondo block.\n");
393 + prom_halt();
394 + }
395 + mondo = (void *)(((unsigned long)p + 63) & ~0x3f);
396 + tb->cpu_mondo_block_pa = __pa(mondo);
397
398 page = get_zeroed_page(GFP_KERNEL);
399 if (!page) {
400 - prom_printf("SUN4V: Error, cannot allocate cpu mondo page.\n");
401 + prom_printf("SUN4V: Error, cannot allocate cpu list page.\n");
402 prom_halt();
403 }
404
405 - tb->cpu_mondo_block_pa = __pa(page);
406 - tb->cpu_list_pa = __pa(page + 64);
407 + tb->cpu_list_pa = __pa(page);
408 #endif
409 }
410
411 diff --git a/arch/sparc/kernel/kernel.h b/arch/sparc/kernel/kernel.h
412 index c9804551262c..6ae1e77be0bf 100644
413 --- a/arch/sparc/kernel/kernel.h
414 +++ b/arch/sparc/kernel/kernel.h
415 @@ -37,7 +37,6 @@ void handle_stdfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr
416 /* smp_64.c */
417 void __irq_entry smp_call_function_client(int irq, struct pt_regs *regs);
418 void __irq_entry smp_call_function_single_client(int irq, struct pt_regs *regs);
419 -void __irq_entry smp_new_mmu_context_version_client(int irq, struct pt_regs *regs);
420 void __irq_entry smp_penguin_jailcell(int irq, struct pt_regs *regs);
421 void __irq_entry smp_receive_signal_client(int irq, struct pt_regs *regs);
422
423 diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c
424 index b3bc0ac757cc..fdf31040a7dc 100644
425 --- a/arch/sparc/kernel/smp_64.c
426 +++ b/arch/sparc/kernel/smp_64.c
427 @@ -964,37 +964,6 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
428 preempt_enable();
429 }
430
431 -void __irq_entry smp_new_mmu_context_version_client(int irq, struct pt_regs *regs)
432 -{
433 - struct mm_struct *mm;
434 - unsigned long flags;
435 -
436 - clear_softint(1 << irq);
437 -
438 - /* See if we need to allocate a new TLB context because
439 - * the version of the one we are using is now out of date.
440 - */
441 - mm = current->active_mm;
442 - if (unlikely(!mm || (mm == &init_mm)))
443 - return;
444 -
445 - spin_lock_irqsave(&mm->context.lock, flags);
446 -
447 - if (unlikely(!CTX_VALID(mm->context)))
448 - get_new_mmu_context(mm);
449 -
450 - spin_unlock_irqrestore(&mm->context.lock, flags);
451 -
452 - load_secondary_context(mm);
453 - __flush_tlb_mm(CTX_HWBITS(mm->context),
454 - SECONDARY_CONTEXT);
455 -}
456 -
457 -void smp_new_mmu_context_version(void)
458 -{
459 - smp_cross_call(&xcall_new_mmu_context_version, 0, 0, 0);
460 -}
461 -
462 #ifdef CONFIG_KGDB
463 void kgdb_roundup_cpus(unsigned long flags)
464 {
465 diff --git a/arch/sparc/kernel/tsb.S b/arch/sparc/kernel/tsb.S
466 index 10689cfd0ad4..07c0df924960 100644
467 --- a/arch/sparc/kernel/tsb.S
468 +++ b/arch/sparc/kernel/tsb.S
469 @@ -455,13 +455,16 @@ __tsb_context_switch:
470 .type copy_tsb,#function
471 copy_tsb: /* %o0=old_tsb_base, %o1=old_tsb_size
472 * %o2=new_tsb_base, %o3=new_tsb_size
473 + * %o4=page_size_shift
474 */
475 sethi %uhi(TSB_PASS_BITS), %g7
476 srlx %o3, 4, %o3
477 - add %o0, %o1, %g1 /* end of old tsb */
478 + add %o0, %o1, %o1 /* end of old tsb */
479 sllx %g7, 32, %g7
480 sub %o3, 1, %o3 /* %o3 == new tsb hash mask */
481
482 + mov %o4, %g1 /* page_size_shift */
483 +
484 661: prefetcha [%o0] ASI_N, #one_read
485 .section .tsb_phys_patch, "ax"
486 .word 661b
487 @@ -486,9 +489,9 @@ copy_tsb: /* %o0=old_tsb_base, %o1=old_tsb_size
488 /* This can definitely be computed faster... */
489 srlx %o0, 4, %o5 /* Build index */
490 and %o5, 511, %o5 /* Mask index */
491 - sllx %o5, PAGE_SHIFT, %o5 /* Put into vaddr position */
492 + sllx %o5, %g1, %o5 /* Put into vaddr position */
493 or %o4, %o5, %o4 /* Full VADDR. */
494 - srlx %o4, PAGE_SHIFT, %o4 /* Shift down to create index */
495 + srlx %o4, %g1, %o4 /* Shift down to create index */
496 and %o4, %o3, %o4 /* Mask with new_tsb_nents-1 */
497 sllx %o4, 4, %o4 /* Shift back up into tsb ent offset */
498 TSB_STORE(%o2 + %o4, %g2) /* Store TAG */
499 @@ -496,7 +499,7 @@ copy_tsb: /* %o0=old_tsb_base, %o1=old_tsb_size
500 TSB_STORE(%o2 + %o4, %g3) /* Store TTE */
501
502 80: add %o0, 16, %o0
503 - cmp %o0, %g1
504 + cmp %o0, %o1
505 bne,pt %xcc, 90b
506 nop
507
508 diff --git a/arch/sparc/kernel/ttable_64.S b/arch/sparc/kernel/ttable_64.S
509 index 7bd8f6556352..efe93ab4a9c0 100644
510 --- a/arch/sparc/kernel/ttable_64.S
511 +++ b/arch/sparc/kernel/ttable_64.S
512 @@ -50,7 +50,7 @@ tl0_resv03e: BTRAP(0x3e) BTRAP(0x3f) BTRAP(0x40)
513 tl0_irq1: TRAP_IRQ(smp_call_function_client, 1)
514 tl0_irq2: TRAP_IRQ(smp_receive_signal_client, 2)
515 tl0_irq3: TRAP_IRQ(smp_penguin_jailcell, 3)
516 -tl0_irq4: TRAP_IRQ(smp_new_mmu_context_version_client, 4)
517 +tl0_irq4: BTRAP(0x44)
518 #else
519 tl0_irq1: BTRAP(0x41)
520 tl0_irq2: BTRAP(0x42)
521 diff --git a/arch/sparc/kernel/vio.c b/arch/sparc/kernel/vio.c
522 index f6bb857254fc..075d38980dee 100644
523 --- a/arch/sparc/kernel/vio.c
524 +++ b/arch/sparc/kernel/vio.c
525 @@ -302,13 +302,16 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
526 if (!id) {
527 dev_set_name(&vdev->dev, "%s", bus_id_name);
528 vdev->dev_no = ~(u64)0;
529 + vdev->id = ~(u64)0;
530 } else if (!cfg_handle) {
531 dev_set_name(&vdev->dev, "%s-%llu", bus_id_name, *id);
532 vdev->dev_no = *id;
533 + vdev->id = ~(u64)0;
534 } else {
535 dev_set_name(&vdev->dev, "%s-%llu-%llu", bus_id_name,
536 *cfg_handle, *id);
537 vdev->dev_no = *cfg_handle;
538 + vdev->id = *id;
539 }
540
541 vdev->dev.parent = parent;
542 @@ -351,27 +354,84 @@ static void vio_add(struct mdesc_handle *hp, u64 node)
543 (void) vio_create_one(hp, node, &root_vdev->dev);
544 }
545
546 +struct vio_md_node_query {
547 + const char *type;
548 + u64 dev_no;
549 + u64 id;
550 +};
551 +
552 static int vio_md_node_match(struct device *dev, void *arg)
553 {
554 + struct vio_md_node_query *query = (struct vio_md_node_query *) arg;
555 struct vio_dev *vdev = to_vio_dev(dev);
556
557 - if (vdev->mp == (u64) arg)
558 - return 1;
559 + if (vdev->dev_no != query->dev_no)
560 + return 0;
561 + if (vdev->id != query->id)
562 + return 0;
563 + if (strcmp(vdev->type, query->type))
564 + return 0;
565
566 - return 0;
567 + return 1;
568 }
569
570 static void vio_remove(struct mdesc_handle *hp, u64 node)
571 {
572 + const char *type;
573 + const u64 *id, *cfg_handle;
574 + u64 a;
575 + struct vio_md_node_query query;
576 struct device *dev;
577
578 - dev = device_find_child(&root_vdev->dev, (void *) node,
579 + type = mdesc_get_property(hp, node, "device-type", NULL);
580 + if (!type) {
581 + type = mdesc_get_property(hp, node, "name", NULL);
582 + if (!type)
583 + type = mdesc_node_name(hp, node);
584 + }
585 +
586 + query.type = type;
587 +
588 + id = mdesc_get_property(hp, node, "id", NULL);
589 + cfg_handle = NULL;
590 + mdesc_for_each_arc(a, hp, node, MDESC_ARC_TYPE_BACK) {
591 + u64 target;
592 +
593 + target = mdesc_arc_target(hp, a);
594 + cfg_handle = mdesc_get_property(hp, target,
595 + "cfg-handle", NULL);
596 + if (cfg_handle)
597 + break;
598 + }
599 +
600 + if (!id) {
601 + query.dev_no = ~(u64)0;
602 + query.id = ~(u64)0;
603 + } else if (!cfg_handle) {
604 + query.dev_no = *id;
605 + query.id = ~(u64)0;
606 + } else {
607 + query.dev_no = *cfg_handle;
608 + query.id = *id;
609 + }
610 +
611 + dev = device_find_child(&root_vdev->dev, &query,
612 vio_md_node_match);
613 if (dev) {
614 printk(KERN_INFO "VIO: Removing device %s\n", dev_name(dev));
615
616 device_unregister(dev);
617 put_device(dev);
618 + } else {
619 + if (!id)
620 + printk(KERN_ERR "VIO: Removed unknown %s node.\n",
621 + type);
622 + else if (!cfg_handle)
623 + printk(KERN_ERR "VIO: Removed unknown %s node %llu.\n",
624 + type, *id);
625 + else
626 + printk(KERN_ERR "VIO: Removed unknown %s node %llu-%llu.\n",
627 + type, *cfg_handle, *id);
628 }
629 }
630
631 diff --git a/arch/sparc/lib/Makefile b/arch/sparc/lib/Makefile
632 index 69912d2f8b54..07c03e72d812 100644
633 --- a/arch/sparc/lib/Makefile
634 +++ b/arch/sparc/lib/Makefile
635 @@ -15,6 +15,7 @@ lib-$(CONFIG_SPARC32) += copy_user.o locks.o
636 lib-$(CONFIG_SPARC64) += atomic_64.o
637 lib-$(CONFIG_SPARC32) += lshrdi3.o ashldi3.o
638 lib-$(CONFIG_SPARC32) += muldi3.o bitext.o cmpdi2.o
639 +lib-$(CONFIG_SPARC64) += multi3.o
640
641 lib-$(CONFIG_SPARC64) += copy_page.o clear_page.o bzero.o
642 lib-$(CONFIG_SPARC64) += csum_copy.o csum_copy_from_user.o csum_copy_to_user.o
643 diff --git a/arch/sparc/lib/multi3.S b/arch/sparc/lib/multi3.S
644 new file mode 100644
645 index 000000000000..d6b6c97fe3c7
646 --- /dev/null
647 +++ b/arch/sparc/lib/multi3.S
648 @@ -0,0 +1,35 @@
649 +#include <linux/linkage.h>
650 +#include <asm/export.h>
651 +
652 + .text
653 + .align 4
654 +ENTRY(__multi3) /* %o0 = u, %o1 = v */
655 + mov %o1, %g1
656 + srl %o3, 0, %g4
657 + mulx %g4, %g1, %o1
658 + srlx %g1, 0x20, %g3
659 + mulx %g3, %g4, %g5
660 + sllx %g5, 0x20, %o5
661 + srl %g1, 0, %g4
662 + sub %o1, %o5, %o5
663 + srlx %o5, 0x20, %o5
664 + addcc %g5, %o5, %g5
665 + srlx %o3, 0x20, %o5
666 + mulx %g4, %o5, %g4
667 + mulx %g3, %o5, %o5
668 + sethi %hi(0x80000000), %g3
669 + addcc %g5, %g4, %g5
670 + srlx %g5, 0x20, %g5
671 + add %g3, %g3, %g3
672 + movcc %xcc, %g0, %g3
673 + addcc %o5, %g5, %o5
674 + sllx %g4, 0x20, %g4
675 + add %o1, %g4, %o1
676 + add %o5, %g3, %g2
677 + mulx %g1, %o2, %g1
678 + add %g1, %g2, %g1
679 + mulx %o0, %o3, %o0
680 + retl
681 + add %g1, %o0, %o0
682 +ENDPROC(__multi3)
683 +EXPORT_SYMBOL(__multi3)
684 diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
685 index 0cda653ae007..3c40ebd50f92 100644
686 --- a/arch/sparc/mm/init_64.c
687 +++ b/arch/sparc/mm/init_64.c
688 @@ -358,7 +358,8 @@ static int __init setup_hugepagesz(char *string)
689 }
690
691 if ((hv_pgsz_mask & cpu_pgsz_mask) == 0U) {
692 - pr_warn("hugepagesz=%llu not supported by MMU.\n",
693 + hugetlb_bad_size();
694 + pr_err("hugepagesz=%llu not supported by MMU.\n",
695 hugepage_size);
696 goto out;
697 }
698 @@ -706,10 +707,58 @@ EXPORT_SYMBOL(__flush_dcache_range);
699
700 /* get_new_mmu_context() uses "cache + 1". */
701 DEFINE_SPINLOCK(ctx_alloc_lock);
702 -unsigned long tlb_context_cache = CTX_FIRST_VERSION - 1;
703 +unsigned long tlb_context_cache = CTX_FIRST_VERSION;
704 #define MAX_CTX_NR (1UL << CTX_NR_BITS)
705 #define CTX_BMAP_SLOTS BITS_TO_LONGS(MAX_CTX_NR)
706 DECLARE_BITMAP(mmu_context_bmap, MAX_CTX_NR);
707 +DEFINE_PER_CPU(struct mm_struct *, per_cpu_secondary_mm) = {0};
708 +
709 +static void mmu_context_wrap(void)
710 +{
711 + unsigned long old_ver = tlb_context_cache & CTX_VERSION_MASK;
712 + unsigned long new_ver, new_ctx, old_ctx;
713 + struct mm_struct *mm;
714 + int cpu;
715 +
716 + bitmap_zero(mmu_context_bmap, 1 << CTX_NR_BITS);
717 +
718 + /* Reserve kernel context */
719 + set_bit(0, mmu_context_bmap);
720 +
721 + new_ver = (tlb_context_cache & CTX_VERSION_MASK) + CTX_FIRST_VERSION;
722 + if (unlikely(new_ver == 0))
723 + new_ver = CTX_FIRST_VERSION;
724 + tlb_context_cache = new_ver;
725 +
726 + /*
727 + * Make sure that any new mm that are added into per_cpu_secondary_mm,
728 + * are going to go through get_new_mmu_context() path.
729 + */
730 + mb();
731 +
732 + /*
733 + * Updated versions to current on those CPUs that had valid secondary
734 + * contexts
735 + */
736 + for_each_online_cpu(cpu) {
737 + /*
738 + * If a new mm is stored after we took this mm from the array,
739 + * it will go into get_new_mmu_context() path, because we
740 + * already bumped the version in tlb_context_cache.
741 + */
742 + mm = per_cpu(per_cpu_secondary_mm, cpu);
743 +
744 + if (unlikely(!mm || mm == &init_mm))
745 + continue;
746 +
747 + old_ctx = mm->context.sparc64_ctx_val;
748 + if (likely((old_ctx & CTX_VERSION_MASK) == old_ver)) {
749 + new_ctx = (old_ctx & ~CTX_VERSION_MASK) | new_ver;
750 + set_bit(new_ctx & CTX_NR_MASK, mmu_context_bmap);
751 + mm->context.sparc64_ctx_val = new_ctx;
752 + }
753 + }
754 +}
755
756 /* Caller does TLB context flushing on local CPU if necessary.
757 * The caller also ensures that CTX_VALID(mm->context) is false.
758 @@ -725,48 +774,30 @@ void get_new_mmu_context(struct mm_struct *mm)
759 {
760 unsigned long ctx, new_ctx;
761 unsigned long orig_pgsz_bits;
762 - int new_version;
763
764 spin_lock(&ctx_alloc_lock);
765 +retry:
766 + /* wrap might have happened, test again if our context became valid */
767 + if (unlikely(CTX_VALID(mm->context)))
768 + goto out;
769 orig_pgsz_bits = (mm->context.sparc64_ctx_val & CTX_PGSZ_MASK);
770 ctx = (tlb_context_cache + 1) & CTX_NR_MASK;
771 new_ctx = find_next_zero_bit(mmu_context_bmap, 1 << CTX_NR_BITS, ctx);
772 - new_version = 0;
773 if (new_ctx >= (1 << CTX_NR_BITS)) {
774 new_ctx = find_next_zero_bit(mmu_context_bmap, ctx, 1);
775 if (new_ctx >= ctx) {
776 - int i;
777 - new_ctx = (tlb_context_cache & CTX_VERSION_MASK) +
778 - CTX_FIRST_VERSION;
779 - if (new_ctx == 1)
780 - new_ctx = CTX_FIRST_VERSION;
781 -
782 - /* Don't call memset, for 16 entries that's just
783 - * plain silly...
784 - */
785 - mmu_context_bmap[0] = 3;
786 - mmu_context_bmap[1] = 0;
787 - mmu_context_bmap[2] = 0;
788 - mmu_context_bmap[3] = 0;
789 - for (i = 4; i < CTX_BMAP_SLOTS; i += 4) {
790 - mmu_context_bmap[i + 0] = 0;
791 - mmu_context_bmap[i + 1] = 0;
792 - mmu_context_bmap[i + 2] = 0;
793 - mmu_context_bmap[i + 3] = 0;
794 - }
795 - new_version = 1;
796 - goto out;
797 + mmu_context_wrap();
798 + goto retry;
799 }
800 }
801 + if (mm->context.sparc64_ctx_val)
802 + cpumask_clear(mm_cpumask(mm));
803 mmu_context_bmap[new_ctx>>6] |= (1UL << (new_ctx & 63));
804 new_ctx |= (tlb_context_cache & CTX_VERSION_MASK);
805 -out:
806 tlb_context_cache = new_ctx;
807 mm->context.sparc64_ctx_val = new_ctx | orig_pgsz_bits;
808 +out:
809 spin_unlock(&ctx_alloc_lock);
810 -
811 - if (unlikely(new_version))
812 - smp_new_mmu_context_version();
813 }
814
815 static int numa_enabled = 1;
816 diff --git a/arch/sparc/mm/tsb.c b/arch/sparc/mm/tsb.c
817 index bedf08b22a47..0d4b998c7d7b 100644
818 --- a/arch/sparc/mm/tsb.c
819 +++ b/arch/sparc/mm/tsb.c
820 @@ -496,7 +496,8 @@ void tsb_grow(struct mm_struct *mm, unsigned long tsb_index, unsigned long rss)
821 extern void copy_tsb(unsigned long old_tsb_base,
822 unsigned long old_tsb_size,
823 unsigned long new_tsb_base,
824 - unsigned long new_tsb_size);
825 + unsigned long new_tsb_size,
826 + unsigned long page_size_shift);
827 unsigned long old_tsb_base = (unsigned long) old_tsb;
828 unsigned long new_tsb_base = (unsigned long) new_tsb;
829
830 @@ -504,7 +505,9 @@ void tsb_grow(struct mm_struct *mm, unsigned long tsb_index, unsigned long rss)
831 old_tsb_base = __pa(old_tsb_base);
832 new_tsb_base = __pa(new_tsb_base);
833 }
834 - copy_tsb(old_tsb_base, old_size, new_tsb_base, new_size);
835 + copy_tsb(old_tsb_base, old_size, new_tsb_base, new_size,
836 + tsb_index == MM_TSB_BASE ?
837 + PAGE_SHIFT : REAL_HPAGE_SHIFT);
838 }
839
840 mm->context.tsb_block[tsb_index].tsb = new_tsb;
841 diff --git a/arch/sparc/mm/ultra.S b/arch/sparc/mm/ultra.S
842 index 5d2fd6cd3189..fcf4d27a38fb 100644
843 --- a/arch/sparc/mm/ultra.S
844 +++ b/arch/sparc/mm/ultra.S
845 @@ -971,11 +971,6 @@ xcall_capture:
846 wr %g0, (1 << PIL_SMP_CAPTURE), %set_softint
847 retry
848
849 - .globl xcall_new_mmu_context_version
850 -xcall_new_mmu_context_version:
851 - wr %g0, (1 << PIL_SMP_CTX_NEW_VERSION), %set_softint
852 - retry
853 -
854 #ifdef CONFIG_KGDB
855 .globl xcall_kgdb_capture
856 xcall_kgdb_capture:
857 diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
858 index 8325d8a09ab0..91eb813e8917 100644
859 --- a/arch/x86/kernel/cpu/microcode/intel.c
860 +++ b/arch/x86/kernel/cpu/microcode/intel.c
861 @@ -619,6 +619,9 @@ int __init save_microcode_in_initrd_intel(void)
862
863 show_saved_mc();
864
865 + /* initrd is going away, clear patch ptr. */
866 + intel_ucode_patch = NULL;
867 +
868 return 0;
869 }
870
871 diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
872 index 14f65a5f938e..2a7835932b71 100644
873 --- a/arch/x86/kernel/kvm.c
874 +++ b/arch/x86/kernel/kvm.c
875 @@ -161,8 +161,8 @@ void kvm_async_pf_task_wait(u32 token)
876 */
877 rcu_irq_exit();
878 native_safe_halt();
879 - rcu_irq_enter();
880 local_irq_disable();
881 + rcu_irq_enter();
882 }
883 }
884 if (!n.halted)
885 diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
886 index efde6cc50875..3665f755baa3 100644
887 --- a/arch/x86/kvm/cpuid.c
888 +++ b/arch/x86/kvm/cpuid.c
889 @@ -780,18 +780,20 @@ int kvm_dev_ioctl_get_cpuid(struct kvm_cpuid2 *cpuid,
890 static int move_to_next_stateful_cpuid_entry(struct kvm_vcpu *vcpu, int i)
891 {
892 struct kvm_cpuid_entry2 *e = &vcpu->arch.cpuid_entries[i];
893 - int j, nent = vcpu->arch.cpuid_nent;
894 + struct kvm_cpuid_entry2 *ej;
895 + int j = i;
896 + int nent = vcpu->arch.cpuid_nent;
897
898 e->flags &= ~KVM_CPUID_FLAG_STATE_READ_NEXT;
899 /* when no next entry is found, the current entry[i] is reselected */
900 - for (j = i + 1; ; j = (j + 1) % nent) {
901 - struct kvm_cpuid_entry2 *ej = &vcpu->arch.cpuid_entries[j];
902 - if (ej->function == e->function) {
903 - ej->flags |= KVM_CPUID_FLAG_STATE_READ_NEXT;
904 - return j;
905 - }
906 - }
907 - return 0; /* silence gcc, even though control never reaches here */
908 + do {
909 + j = (j + 1) % nent;
910 + ej = &vcpu->arch.cpuid_entries[j];
911 + } while (ej->function != e->function);
912 +
913 + ej->flags |= KVM_CPUID_FLAG_STATE_READ_NEXT;
914 +
915 + return j;
916 }
917
918 /* find an entry with matching function, matching index (if needed), and that
919 diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
920 index ac7810513d0e..732c0270a489 100644
921 --- a/arch/x86/kvm/mmu.c
922 +++ b/arch/x86/kvm/mmu.c
923 @@ -3683,12 +3683,15 @@ static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu, gva_t gva, gfn_t gfn)
924 return kvm_setup_async_pf(vcpu, gva, kvm_vcpu_gfn_to_hva(vcpu, gfn), &arch);
925 }
926
927 -static bool can_do_async_pf(struct kvm_vcpu *vcpu)
928 +bool kvm_can_do_async_pf(struct kvm_vcpu *vcpu)
929 {
930 if (unlikely(!lapic_in_kernel(vcpu) ||
931 kvm_event_needs_reinjection(vcpu)))
932 return false;
933
934 + if (is_guest_mode(vcpu))
935 + return false;
936 +
937 return kvm_x86_ops->interrupt_allowed(vcpu);
938 }
939
940 @@ -3704,7 +3707,7 @@ static bool try_async_pf(struct kvm_vcpu *vcpu, bool prefault, gfn_t gfn,
941 if (!async)
942 return false; /* *pfn has correct page already */
943
944 - if (!prefault && can_do_async_pf(vcpu)) {
945 + if (!prefault && kvm_can_do_async_pf(vcpu)) {
946 trace_kvm_try_async_get_page(gva, gfn);
947 if (kvm_find_async_pf_gfn(vcpu, gfn)) {
948 trace_kvm_async_pf_doublefault(gva, gfn);
949 diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h
950 index ddc56e91f2e4..c92834c55c59 100644
951 --- a/arch/x86/kvm/mmu.h
952 +++ b/arch/x86/kvm/mmu.h
953 @@ -75,6 +75,7 @@ enum {
954 int handle_mmio_page_fault(struct kvm_vcpu *vcpu, u64 addr, bool direct);
955 void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu);
956 void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, bool execonly);
957 +bool kvm_can_do_async_pf(struct kvm_vcpu *vcpu);
958
959 static inline unsigned int kvm_mmu_available_pages(struct kvm *kvm)
960 {
961 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
962 index a4a2bae7c274..6557c790c8c1 100644
963 --- a/arch/x86/kvm/x86.c
964 +++ b/arch/x86/kvm/x86.c
965 @@ -8623,8 +8623,7 @@ bool kvm_arch_can_inject_async_page_present(struct kvm_vcpu *vcpu)
966 if (!(vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED))
967 return true;
968 else
969 - return !kvm_event_needs_reinjection(vcpu) &&
970 - kvm_x86_ops->interrupt_allowed(vcpu);
971 + return kvm_can_do_async_pf(vcpu);
972 }
973
974 void kvm_arch_start_assignment(struct kvm *kvm)
975 diff --git a/arch/x86/platform/efi/efi-bgrt.c b/arch/x86/platform/efi/efi-bgrt.c
976 index 04ca8764f0c0..8bf27323f7a3 100644
977 --- a/arch/x86/platform/efi/efi-bgrt.c
978 +++ b/arch/x86/platform/efi/efi-bgrt.c
979 @@ -36,6 +36,9 @@ void __init efi_bgrt_init(struct acpi_table_header *table)
980 if (acpi_disabled)
981 return;
982
983 + if (!efi_enabled(EFI_BOOT))
984 + return;
985 +
986 if (table->length < sizeof(bgrt_tab)) {
987 pr_notice("Ignoring BGRT: invalid length %u (expected %zu)\n",
988 table->length, sizeof(bgrt_tab));
989 diff --git a/arch/x86/platform/efi/quirks.c b/arch/x86/platform/efi/quirks.c
990 index cdfe8c628959..393a0c0288d1 100644
991 --- a/arch/x86/platform/efi/quirks.c
992 +++ b/arch/x86/platform/efi/quirks.c
993 @@ -358,6 +358,9 @@ void __init efi_free_boot_services(void)
994 free_bootmem_late(start, size);
995 }
996
997 + if (!num_entries)
998 + return;
999 +
1000 new_size = efi.memmap.desc_size * num_entries;
1001 new_phys = efi_memmap_alloc(num_entries);
1002 if (!new_phys) {
1003 diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
1004 index bbe7ee00bd3d..a981cc916a13 100644
1005 --- a/block/blk-cgroup.c
1006 +++ b/block/blk-cgroup.c
1007 @@ -74,7 +74,7 @@ static void blkg_free(struct blkcg_gq *blkg)
1008 blkcg_policy[i]->pd_free_fn(blkg->pd[i]);
1009
1010 if (blkg->blkcg != &blkcg_root)
1011 - blk_exit_rl(&blkg->rl);
1012 + blk_exit_rl(blkg->q, &blkg->rl);
1013
1014 blkg_rwstat_exit(&blkg->stat_ios);
1015 blkg_rwstat_exit(&blkg->stat_bytes);
1016 diff --git a/block/blk-core.c b/block/blk-core.c
1017 index d772c221cc17..1fb277501017 100644
1018 --- a/block/blk-core.c
1019 +++ b/block/blk-core.c
1020 @@ -643,13 +643,19 @@ int blk_init_rl(struct request_list *rl, struct request_queue *q,
1021 if (!rl->rq_pool)
1022 return -ENOMEM;
1023
1024 + if (rl != &q->root_rl)
1025 + WARN_ON_ONCE(!blk_get_queue(q));
1026 +
1027 return 0;
1028 }
1029
1030 -void blk_exit_rl(struct request_list *rl)
1031 +void blk_exit_rl(struct request_queue *q, struct request_list *rl)
1032 {
1033 - if (rl->rq_pool)
1034 + if (rl->rq_pool) {
1035 mempool_destroy(rl->rq_pool);
1036 + if (rl != &q->root_rl)
1037 + blk_put_queue(q);
1038 + }
1039 }
1040
1041 struct request_queue *blk_alloc_queue(gfp_t gfp_mask)
1042 diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
1043 index 37f0b3ad635e..6a13d0924a66 100644
1044 --- a/block/blk-sysfs.c
1045 +++ b/block/blk-sysfs.c
1046 @@ -819,7 +819,7 @@ static void blk_release_queue(struct kobject *kobj)
1047 elevator_exit(q, q->elevator);
1048 }
1049
1050 - blk_exit_rl(&q->root_rl);
1051 + blk_exit_rl(q, &q->root_rl);
1052
1053 if (q->queue_tags)
1054 __blk_queue_free_tags(q);
1055 diff --git a/block/blk.h b/block/blk.h
1056 index d1ea4bd9b9a3..8701d0a74eb1 100644
1057 --- a/block/blk.h
1058 +++ b/block/blk.h
1059 @@ -59,7 +59,7 @@ void blk_free_flush_queue(struct blk_flush_queue *q);
1060
1061 int blk_init_rl(struct request_list *rl, struct request_queue *q,
1062 gfp_t gfp_mask);
1063 -void blk_exit_rl(struct request_list *rl);
1064 +void blk_exit_rl(struct request_queue *q, struct request_list *rl);
1065 void init_request_from_bio(struct request *req, struct bio *bio);
1066 void blk_rq_bio_prep(struct request_queue *q, struct request *rq,
1067 struct bio *bio);
1068 diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
1069 index 440b95ee593c..2762505664a6 100644
1070 --- a/block/cfq-iosched.c
1071 +++ b/block/cfq-iosched.c
1072 @@ -38,9 +38,13 @@ static const u64 cfq_target_latency = (u64)NSEC_PER_SEC * 3/10; /* 300 ms */
1073 static const int cfq_hist_divisor = 4;
1074
1075 /*
1076 - * offset from end of service tree
1077 + * offset from end of queue service tree for idle class
1078 */
1079 #define CFQ_IDLE_DELAY (NSEC_PER_SEC / 5)
1080 +/* offset from end of group service tree under time slice mode */
1081 +#define CFQ_SLICE_MODE_GROUP_DELAY (NSEC_PER_SEC / 5)
1082 +/* offset from end of group service under IOPS mode */
1083 +#define CFQ_IOPS_MODE_GROUP_DELAY (HZ / 5)
1084
1085 /*
1086 * below this threshold, we consider thinktime immediate
1087 @@ -1362,6 +1366,14 @@ cfq_group_service_tree_add(struct cfq_rb_root *st, struct cfq_group *cfqg)
1088 cfqg->vfraction = max_t(unsigned, vfr, 1);
1089 }
1090
1091 +static inline u64 cfq_get_cfqg_vdisktime_delay(struct cfq_data *cfqd)
1092 +{
1093 + if (!iops_mode(cfqd))
1094 + return CFQ_SLICE_MODE_GROUP_DELAY;
1095 + else
1096 + return CFQ_IOPS_MODE_GROUP_DELAY;
1097 +}
1098 +
1099 static void
1100 cfq_group_notify_queue_add(struct cfq_data *cfqd, struct cfq_group *cfqg)
1101 {
1102 @@ -1381,7 +1393,8 @@ cfq_group_notify_queue_add(struct cfq_data *cfqd, struct cfq_group *cfqg)
1103 n = rb_last(&st->rb);
1104 if (n) {
1105 __cfqg = rb_entry_cfqg(n);
1106 - cfqg->vdisktime = __cfqg->vdisktime + CFQ_IDLE_DELAY;
1107 + cfqg->vdisktime = __cfqg->vdisktime +
1108 + cfq_get_cfqg_vdisktime_delay(cfqd);
1109 } else
1110 cfqg->vdisktime = st->min_vdisktime;
1111 cfq_group_service_tree_add(st, cfqg);
1112 diff --git a/crypto/asymmetric_keys/public_key.c b/crypto/asymmetric_keys/public_key.c
1113 index d3a989e718f5..3cd6e12cfc46 100644
1114 --- a/crypto/asymmetric_keys/public_key.c
1115 +++ b/crypto/asymmetric_keys/public_key.c
1116 @@ -141,7 +141,7 @@ int public_key_verify_signature(const struct public_key *pkey,
1117 * signature and returns that to us.
1118 */
1119 ret = crypto_akcipher_verify(req);
1120 - if (ret == -EINPROGRESS) {
1121 + if ((ret == -EINPROGRESS) || (ret == -EBUSY)) {
1122 wait_for_completion(&compl.completion);
1123 ret = compl.err;
1124 }
1125 diff --git a/crypto/drbg.c b/crypto/drbg.c
1126 index 8a4d98b4adba..5efc2b22a831 100644
1127 --- a/crypto/drbg.c
1128 +++ b/crypto/drbg.c
1129 @@ -1768,9 +1768,8 @@ static int drbg_kcapi_sym_ctr(struct drbg_state *drbg,
1130 break;
1131 case -EINPROGRESS:
1132 case -EBUSY:
1133 - ret = wait_for_completion_interruptible(
1134 - &drbg->ctr_completion);
1135 - if (!ret && !drbg->ctr_async_err) {
1136 + wait_for_completion(&drbg->ctr_completion);
1137 + if (!drbg->ctr_async_err) {
1138 reinit_completion(&drbg->ctr_completion);
1139 break;
1140 }
1141 diff --git a/crypto/gcm.c b/crypto/gcm.c
1142 index b7ad808be3d4..3841b5eafa7e 100644
1143 --- a/crypto/gcm.c
1144 +++ b/crypto/gcm.c
1145 @@ -152,10 +152,8 @@ static int crypto_gcm_setkey(struct crypto_aead *aead, const u8 *key,
1146
1147 err = crypto_skcipher_encrypt(&data->req);
1148 if (err == -EINPROGRESS || err == -EBUSY) {
1149 - err = wait_for_completion_interruptible(
1150 - &data->result.completion);
1151 - if (!err)
1152 - err = data->result.err;
1153 + wait_for_completion(&data->result.completion);
1154 + err = data->result.err;
1155 }
1156
1157 if (err)
1158 diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
1159 index 2fc52407306c..c69954023c2e 100644
1160 --- a/drivers/ata/ahci.c
1161 +++ b/drivers/ata/ahci.c
1162 @@ -1364,6 +1364,40 @@ static inline void ahci_gtf_filter_workaround(struct ata_host *host)
1163 {}
1164 #endif
1165
1166 +/*
1167 + * On the Acer Aspire Switch Alpha 12, sometimes all SATA ports are detected
1168 + * as DUMMY, or detected but eventually get a "link down" and never get up
1169 + * again. When this happens, CAP.NP may hold a value of 0x00 or 0x01, and the
1170 + * port_map may hold a value of 0x00.
1171 + *
1172 + * Overriding CAP.NP to 0x02 and the port_map to 0x7 will reveal all 3 ports
1173 + * and can significantly reduce the occurrence of the problem.
1174 + *
1175 + * https://bugzilla.kernel.org/show_bug.cgi?id=189471
1176 + */
1177 +static void acer_sa5_271_workaround(struct ahci_host_priv *hpriv,
1178 + struct pci_dev *pdev)
1179 +{
1180 + static const struct dmi_system_id sysids[] = {
1181 + {
1182 + .ident = "Acer Switch Alpha 12",
1183 + .matches = {
1184 + DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
1185 + DMI_MATCH(DMI_PRODUCT_NAME, "Switch SA5-271")
1186 + },
1187 + },
1188 + { }
1189 + };
1190 +
1191 + if (dmi_check_system(sysids)) {
1192 + dev_info(&pdev->dev, "enabling Acer Switch Alpha 12 workaround\n");
1193 + if ((hpriv->saved_cap & 0xC734FF00) == 0xC734FF00) {
1194 + hpriv->port_map = 0x7;
1195 + hpriv->cap = 0xC734FF02;
1196 + }
1197 + }
1198 +}
1199 +
1200 #ifdef CONFIG_ARM64
1201 /*
1202 * Due to ERRATA#22536, ThunderX needs to handle HOST_IRQ_STAT differently.
1203 @@ -1636,6 +1670,10 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1204 "online status unreliable, applying workaround\n");
1205 }
1206
1207 +
1208 + /* Acer SA5-271 workaround modifies private_data */
1209 + acer_sa5_271_workaround(hpriv, pdev);
1210 +
1211 /* CAP.NP sometimes indicate the index of the last enabled
1212 * port, at other times, that of the last possible port, so
1213 * determining the maximum port number requires looking at
1214 diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
1215 index 00ce26d0c047..6eed4a72d328 100644
1216 --- a/drivers/ata/sata_mv.c
1217 +++ b/drivers/ata/sata_mv.c
1218 @@ -4067,7 +4067,6 @@ static int mv_platform_probe(struct platform_device *pdev)
1219 struct ata_host *host;
1220 struct mv_host_priv *hpriv;
1221 struct resource *res;
1222 - void __iomem *mmio;
1223 int n_ports = 0, irq = 0;
1224 int rc;
1225 int port;
1226 @@ -4086,9 +4085,8 @@ static int mv_platform_probe(struct platform_device *pdev)
1227 * Get the register base first
1228 */
1229 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1230 - mmio = devm_ioremap_resource(&pdev->dev, res);
1231 - if (IS_ERR(mmio))
1232 - return PTR_ERR(mmio);
1233 + if (res == NULL)
1234 + return -EINVAL;
1235
1236 /* allocate host */
1237 if (pdev->dev.of_node) {
1238 @@ -4132,7 +4130,12 @@ static int mv_platform_probe(struct platform_device *pdev)
1239 hpriv->board_idx = chip_soc;
1240
1241 host->iomap = NULL;
1242 - hpriv->base = mmio - SATAHC0_REG_BASE;
1243 + hpriv->base = devm_ioremap(&pdev->dev, res->start,
1244 + resource_size(res));
1245 + if (!hpriv->base)
1246 + return -ENOMEM;
1247 +
1248 + hpriv->base -= SATAHC0_REG_BASE;
1249
1250 hpriv->clk = clk_get(&pdev->dev, NULL);
1251 if (IS_ERR(hpriv->clk))
1252 diff --git a/drivers/char/mem.c b/drivers/char/mem.c
1253 index 6e0cbe092220..593a8818aca9 100644
1254 --- a/drivers/char/mem.c
1255 +++ b/drivers/char/mem.c
1256 @@ -343,7 +343,7 @@ static int mmap_mem(struct file *file, struct vm_area_struct *vma)
1257 phys_addr_t offset = (phys_addr_t)vma->vm_pgoff << PAGE_SHIFT;
1258
1259 /* It's illegal to wrap around the end of the physical address space. */
1260 - if (offset + (phys_addr_t)size < offset)
1261 + if (offset + (phys_addr_t)size - 1 < offset)
1262 return -EINVAL;
1263
1264 if (!valid_mmap_phys_addr_range(vma->vm_pgoff, size))
1265 diff --git a/drivers/char/random.c b/drivers/char/random.c
1266 index 0ab024918907..2291e6224ed3 100644
1267 --- a/drivers/char/random.c
1268 +++ b/drivers/char/random.c
1269 @@ -1,6 +1,9 @@
1270 /*
1271 * random.c -- A strong random number generator
1272 *
1273 + * Copyright (C) 2017 Jason A. Donenfeld <Jason@zx2c4.com>. All
1274 + * Rights Reserved.
1275 + *
1276 * Copyright Matt Mackall <mpm@selenic.com>, 2003, 2004, 2005
1277 *
1278 * Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999. All
1279 @@ -762,6 +765,8 @@ static DECLARE_WAIT_QUEUE_HEAD(crng_init_wait);
1280 static struct crng_state **crng_node_pool __read_mostly;
1281 #endif
1282
1283 +static void invalidate_batched_entropy(void);
1284 +
1285 static void crng_initialize(struct crng_state *crng)
1286 {
1287 int i;
1288 @@ -799,6 +804,7 @@ static int crng_fast_load(const char *cp, size_t len)
1289 cp++; crng_init_cnt++; len--;
1290 }
1291 if (crng_init_cnt >= CRNG_INIT_CNT_THRESH) {
1292 + invalidate_batched_entropy();
1293 crng_init = 1;
1294 wake_up_interruptible(&crng_init_wait);
1295 pr_notice("random: fast init done\n");
1296 @@ -836,6 +842,7 @@ static void crng_reseed(struct crng_state *crng, struct entropy_store *r)
1297 memzero_explicit(&buf, sizeof(buf));
1298 crng->init_time = jiffies;
1299 if (crng == &primary_crng && crng_init < 2) {
1300 + invalidate_batched_entropy();
1301 crng_init = 2;
1302 process_random_ready_list();
1303 wake_up_interruptible(&crng_init_wait);
1304 @@ -2019,6 +2026,7 @@ struct batched_entropy {
1305 };
1306 unsigned int position;
1307 };
1308 +static rwlock_t batched_entropy_reset_lock = __RW_LOCK_UNLOCKED(batched_entropy_reset_lock);
1309
1310 /*
1311 * Get a random word for internal kernel use only. The quality of the random
1312 @@ -2029,6 +2037,8 @@ static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_u64);
1313 u64 get_random_u64(void)
1314 {
1315 u64 ret;
1316 + bool use_lock = crng_init < 2;
1317 + unsigned long flags;
1318 struct batched_entropy *batch;
1319
1320 #if BITS_PER_LONG == 64
1321 @@ -2041,11 +2051,15 @@ u64 get_random_u64(void)
1322 #endif
1323
1324 batch = &get_cpu_var(batched_entropy_u64);
1325 + if (use_lock)
1326 + read_lock_irqsave(&batched_entropy_reset_lock, flags);
1327 if (batch->position % ARRAY_SIZE(batch->entropy_u64) == 0) {
1328 extract_crng((u8 *)batch->entropy_u64);
1329 batch->position = 0;
1330 }
1331 ret = batch->entropy_u64[batch->position++];
1332 + if (use_lock)
1333 + read_unlock_irqrestore(&batched_entropy_reset_lock, flags);
1334 put_cpu_var(batched_entropy_u64);
1335 return ret;
1336 }
1337 @@ -2055,22 +2069,45 @@ static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_u32);
1338 u32 get_random_u32(void)
1339 {
1340 u32 ret;
1341 + bool use_lock = crng_init < 2;
1342 + unsigned long flags;
1343 struct batched_entropy *batch;
1344
1345 if (arch_get_random_int(&ret))
1346 return ret;
1347
1348 batch = &get_cpu_var(batched_entropy_u32);
1349 + if (use_lock)
1350 + read_lock_irqsave(&batched_entropy_reset_lock, flags);
1351 if (batch->position % ARRAY_SIZE(batch->entropy_u32) == 0) {
1352 extract_crng((u8 *)batch->entropy_u32);
1353 batch->position = 0;
1354 }
1355 ret = batch->entropy_u32[batch->position++];
1356 + if (use_lock)
1357 + read_unlock_irqrestore(&batched_entropy_reset_lock, flags);
1358 put_cpu_var(batched_entropy_u32);
1359 return ret;
1360 }
1361 EXPORT_SYMBOL(get_random_u32);
1362
1363 +/* It's important to invalidate all potential batched entropy that might
1364 + * be stored before the crng is initialized, which we can do lazily by
1365 + * simply resetting the counter to zero so that it's re-extracted on the
1366 + * next usage. */
1367 +static void invalidate_batched_entropy(void)
1368 +{
1369 + int cpu;
1370 + unsigned long flags;
1371 +
1372 + write_lock_irqsave(&batched_entropy_reset_lock, flags);
1373 + for_each_possible_cpu (cpu) {
1374 + per_cpu_ptr(&batched_entropy_u32, cpu)->position = 0;
1375 + per_cpu_ptr(&batched_entropy_u64, cpu)->position = 0;
1376 + }
1377 + write_unlock_irqrestore(&batched_entropy_reset_lock, flags);
1378 +}
1379 +
1380 /**
1381 * randomize_page - Generate a random, page aligned address
1382 * @start: The smallest acceptable address the caller will take.
1383 diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
1384 index 0e3f6496524d..26b643d57847 100644
1385 --- a/drivers/cpufreq/cpufreq.c
1386 +++ b/drivers/cpufreq/cpufreq.c
1387 @@ -2468,6 +2468,7 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
1388 if (!(cpufreq_driver->flags & CPUFREQ_STICKY) &&
1389 list_empty(&cpufreq_policy_list)) {
1390 /* if all ->init() calls failed, unregister */
1391 + ret = -ENODEV;
1392 pr_debug("%s: No CPU initialized for driver %s\n", __func__,
1393 driver_data->name);
1394 goto err_if_unreg;
1395 diff --git a/drivers/dma/ep93xx_dma.c b/drivers/dma/ep93xx_dma.c
1396 index d37e8dda8079..ec240592f5c8 100644
1397 --- a/drivers/dma/ep93xx_dma.c
1398 +++ b/drivers/dma/ep93xx_dma.c
1399 @@ -201,6 +201,7 @@ struct ep93xx_dma_engine {
1400 struct dma_device dma_dev;
1401 bool m2m;
1402 int (*hw_setup)(struct ep93xx_dma_chan *);
1403 + void (*hw_synchronize)(struct ep93xx_dma_chan *);
1404 void (*hw_shutdown)(struct ep93xx_dma_chan *);
1405 void (*hw_submit)(struct ep93xx_dma_chan *);
1406 int (*hw_interrupt)(struct ep93xx_dma_chan *);
1407 @@ -323,6 +324,8 @@ static int m2p_hw_setup(struct ep93xx_dma_chan *edmac)
1408 | M2P_CONTROL_ENABLE;
1409 m2p_set_control(edmac, control);
1410
1411 + edmac->buffer = 0;
1412 +
1413 return 0;
1414 }
1415
1416 @@ -331,21 +334,27 @@ static inline u32 m2p_channel_state(struct ep93xx_dma_chan *edmac)
1417 return (readl(edmac->regs + M2P_STATUS) >> 4) & 0x3;
1418 }
1419
1420 -static void m2p_hw_shutdown(struct ep93xx_dma_chan *edmac)
1421 +static void m2p_hw_synchronize(struct ep93xx_dma_chan *edmac)
1422 {
1423 + unsigned long flags;
1424 u32 control;
1425
1426 + spin_lock_irqsave(&edmac->lock, flags);
1427 control = readl(edmac->regs + M2P_CONTROL);
1428 control &= ~(M2P_CONTROL_STALLINT | M2P_CONTROL_NFBINT);
1429 m2p_set_control(edmac, control);
1430 + spin_unlock_irqrestore(&edmac->lock, flags);
1431
1432 while (m2p_channel_state(edmac) >= M2P_STATE_ON)
1433 - cpu_relax();
1434 + schedule();
1435 +}
1436
1437 +static void m2p_hw_shutdown(struct ep93xx_dma_chan *edmac)
1438 +{
1439 m2p_set_control(edmac, 0);
1440
1441 - while (m2p_channel_state(edmac) == M2P_STATE_STALL)
1442 - cpu_relax();
1443 + while (m2p_channel_state(edmac) != M2P_STATE_IDLE)
1444 + dev_warn(chan2dev(edmac), "M2P: Not yet IDLE\n");
1445 }
1446
1447 static void m2p_fill_desc(struct ep93xx_dma_chan *edmac)
1448 @@ -1161,6 +1170,26 @@ ep93xx_dma_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t dma_addr,
1449 }
1450
1451 /**
1452 + * ep93xx_dma_synchronize - Synchronizes the termination of transfers to the
1453 + * current context.
1454 + * @chan: channel
1455 + *
1456 + * Synchronizes the DMA channel termination to the current context. When this
1457 + * function returns it is guaranteed that all transfers for previously issued
1458 + * descriptors have stopped and and it is safe to free the memory associated
1459 + * with them. Furthermore it is guaranteed that all complete callback functions
1460 + * for a previously submitted descriptor have finished running and it is safe to
1461 + * free resources accessed from within the complete callbacks.
1462 + */
1463 +static void ep93xx_dma_synchronize(struct dma_chan *chan)
1464 +{
1465 + struct ep93xx_dma_chan *edmac = to_ep93xx_dma_chan(chan);
1466 +
1467 + if (edmac->edma->hw_synchronize)
1468 + edmac->edma->hw_synchronize(edmac);
1469 +}
1470 +
1471 +/**
1472 * ep93xx_dma_terminate_all - terminate all transactions
1473 * @chan: channel
1474 *
1475 @@ -1323,6 +1352,7 @@ static int __init ep93xx_dma_probe(struct platform_device *pdev)
1476 dma_dev->device_prep_slave_sg = ep93xx_dma_prep_slave_sg;
1477 dma_dev->device_prep_dma_cyclic = ep93xx_dma_prep_dma_cyclic;
1478 dma_dev->device_config = ep93xx_dma_slave_config;
1479 + dma_dev->device_synchronize = ep93xx_dma_synchronize;
1480 dma_dev->device_terminate_all = ep93xx_dma_terminate_all;
1481 dma_dev->device_issue_pending = ep93xx_dma_issue_pending;
1482 dma_dev->device_tx_status = ep93xx_dma_tx_status;
1483 @@ -1340,6 +1370,7 @@ static int __init ep93xx_dma_probe(struct platform_device *pdev)
1484 } else {
1485 dma_cap_set(DMA_PRIVATE, dma_dev->cap_mask);
1486
1487 + edma->hw_synchronize = m2p_hw_synchronize;
1488 edma->hw_setup = m2p_hw_setup;
1489 edma->hw_shutdown = m2p_hw_shutdown;
1490 edma->hw_submit = m2p_hw_submit;
1491 diff --git a/drivers/dma/mv_xor_v2.c b/drivers/dma/mv_xor_v2.c
1492 index a28a01fcba67..f3e211f8f6c5 100644
1493 --- a/drivers/dma/mv_xor_v2.c
1494 +++ b/drivers/dma/mv_xor_v2.c
1495 @@ -161,6 +161,7 @@ struct mv_xor_v2_device {
1496 struct mv_xor_v2_sw_desc *sw_desq;
1497 int desc_size;
1498 unsigned int npendings;
1499 + unsigned int hw_queue_idx;
1500 };
1501
1502 /**
1503 @@ -214,18 +215,6 @@ static void mv_xor_v2_set_data_buffers(struct mv_xor_v2_device *xor_dev,
1504 }
1505
1506 /*
1507 - * Return the next available index in the DESQ.
1508 - */
1509 -static int mv_xor_v2_get_desq_write_ptr(struct mv_xor_v2_device *xor_dev)
1510 -{
1511 - /* read the index for the next available descriptor in the DESQ */
1512 - u32 reg = readl(xor_dev->dma_base + MV_XOR_V2_DMA_DESQ_ALLOC_OFF);
1513 -
1514 - return ((reg >> MV_XOR_V2_DMA_DESQ_ALLOC_WRPTR_SHIFT)
1515 - & MV_XOR_V2_DMA_DESQ_ALLOC_WRPTR_MASK);
1516 -}
1517 -
1518 -/*
1519 * notify the engine of new descriptors, and update the available index.
1520 */
1521 static void mv_xor_v2_add_desc_to_desq(struct mv_xor_v2_device *xor_dev,
1522 @@ -257,22 +246,6 @@ static int mv_xor_v2_set_desc_size(struct mv_xor_v2_device *xor_dev)
1523 return MV_XOR_V2_EXT_DESC_SIZE;
1524 }
1525
1526 -/*
1527 - * Set the IMSG threshold
1528 - */
1529 -static inline
1530 -void mv_xor_v2_set_imsg_thrd(struct mv_xor_v2_device *xor_dev, int thrd_val)
1531 -{
1532 - u32 reg;
1533 -
1534 - reg = readl(xor_dev->dma_base + MV_XOR_V2_DMA_IMSG_THRD_OFF);
1535 -
1536 - reg &= (~MV_XOR_V2_DMA_IMSG_THRD_MASK << MV_XOR_V2_DMA_IMSG_THRD_SHIFT);
1537 - reg |= (thrd_val << MV_XOR_V2_DMA_IMSG_THRD_SHIFT);
1538 -
1539 - writel(reg, xor_dev->dma_base + MV_XOR_V2_DMA_IMSG_THRD_OFF);
1540 -}
1541 -
1542 static irqreturn_t mv_xor_v2_interrupt_handler(int irq, void *data)
1543 {
1544 struct mv_xor_v2_device *xor_dev = data;
1545 @@ -288,12 +261,6 @@ static irqreturn_t mv_xor_v2_interrupt_handler(int irq, void *data)
1546 if (!ndescs)
1547 return IRQ_NONE;
1548
1549 - /*
1550 - * Update IMSG threshold, to disable new IMSG interrupts until
1551 - * end of the tasklet
1552 - */
1553 - mv_xor_v2_set_imsg_thrd(xor_dev, MV_XOR_V2_DESC_NUM);
1554 -
1555 /* schedule a tasklet to handle descriptors callbacks */
1556 tasklet_schedule(&xor_dev->irq_tasklet);
1557
1558 @@ -306,7 +273,6 @@ static irqreturn_t mv_xor_v2_interrupt_handler(int irq, void *data)
1559 static dma_cookie_t
1560 mv_xor_v2_tx_submit(struct dma_async_tx_descriptor *tx)
1561 {
1562 - int desq_ptr;
1563 void *dest_hw_desc;
1564 dma_cookie_t cookie;
1565 struct mv_xor_v2_sw_desc *sw_desc =
1566 @@ -322,15 +288,15 @@ mv_xor_v2_tx_submit(struct dma_async_tx_descriptor *tx)
1567 spin_lock_bh(&xor_dev->lock);
1568 cookie = dma_cookie_assign(tx);
1569
1570 - /* get the next available slot in the DESQ */
1571 - desq_ptr = mv_xor_v2_get_desq_write_ptr(xor_dev);
1572 -
1573 /* copy the HW descriptor from the SW descriptor to the DESQ */
1574 - dest_hw_desc = xor_dev->hw_desq_virt + desq_ptr;
1575 + dest_hw_desc = xor_dev->hw_desq_virt + xor_dev->hw_queue_idx;
1576
1577 memcpy(dest_hw_desc, &sw_desc->hw_desc, xor_dev->desc_size);
1578
1579 xor_dev->npendings++;
1580 + xor_dev->hw_queue_idx++;
1581 + if (xor_dev->hw_queue_idx >= MV_XOR_V2_DESC_NUM)
1582 + xor_dev->hw_queue_idx = 0;
1583
1584 spin_unlock_bh(&xor_dev->lock);
1585
1586 @@ -344,6 +310,7 @@ static struct mv_xor_v2_sw_desc *
1587 mv_xor_v2_prep_sw_desc(struct mv_xor_v2_device *xor_dev)
1588 {
1589 struct mv_xor_v2_sw_desc *sw_desc;
1590 + bool found = false;
1591
1592 /* Lock the channel */
1593 spin_lock_bh(&xor_dev->lock);
1594 @@ -355,19 +322,23 @@ mv_xor_v2_prep_sw_desc(struct mv_xor_v2_device *xor_dev)
1595 return NULL;
1596 }
1597
1598 - /* get a free SW descriptor from the SW DESQ */
1599 - sw_desc = list_first_entry(&xor_dev->free_sw_desc,
1600 - struct mv_xor_v2_sw_desc, free_list);
1601 + list_for_each_entry(sw_desc, &xor_dev->free_sw_desc, free_list) {
1602 + if (async_tx_test_ack(&sw_desc->async_tx)) {
1603 + found = true;
1604 + break;
1605 + }
1606 + }
1607 +
1608 + if (!found) {
1609 + spin_unlock_bh(&xor_dev->lock);
1610 + return NULL;
1611 + }
1612 +
1613 list_del(&sw_desc->free_list);
1614
1615 /* Release the channel */
1616 spin_unlock_bh(&xor_dev->lock);
1617
1618 - /* set the async tx descriptor */
1619 - dma_async_tx_descriptor_init(&sw_desc->async_tx, &xor_dev->dmachan);
1620 - sw_desc->async_tx.tx_submit = mv_xor_v2_tx_submit;
1621 - async_tx_ack(&sw_desc->async_tx);
1622 -
1623 return sw_desc;
1624 }
1625
1626 @@ -389,6 +360,8 @@ mv_xor_v2_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest,
1627 __func__, len, &src, &dest, flags);
1628
1629 sw_desc = mv_xor_v2_prep_sw_desc(xor_dev);
1630 + if (!sw_desc)
1631 + return NULL;
1632
1633 sw_desc->async_tx.flags = flags;
1634
1635 @@ -443,6 +416,8 @@ mv_xor_v2_prep_dma_xor(struct dma_chan *chan, dma_addr_t dest, dma_addr_t *src,
1636 __func__, src_cnt, len, &dest, flags);
1637
1638 sw_desc = mv_xor_v2_prep_sw_desc(xor_dev);
1639 + if (!sw_desc)
1640 + return NULL;
1641
1642 sw_desc->async_tx.flags = flags;
1643
1644 @@ -491,6 +466,8 @@ mv_xor_v2_prep_dma_interrupt(struct dma_chan *chan, unsigned long flags)
1645 container_of(chan, struct mv_xor_v2_device, dmachan);
1646
1647 sw_desc = mv_xor_v2_prep_sw_desc(xor_dev);
1648 + if (!sw_desc)
1649 + return NULL;
1650
1651 /* set the HW descriptor */
1652 hw_descriptor = &sw_desc->hw_desc;
1653 @@ -554,7 +531,6 @@ static void mv_xor_v2_tasklet(unsigned long data)
1654 {
1655 struct mv_xor_v2_device *xor_dev = (struct mv_xor_v2_device *) data;
1656 int pending_ptr, num_of_pending, i;
1657 - struct mv_xor_v2_descriptor *next_pending_hw_desc = NULL;
1658 struct mv_xor_v2_sw_desc *next_pending_sw_desc = NULL;
1659
1660 dev_dbg(xor_dev->dmadev.dev, "%s %d\n", __func__, __LINE__);
1661 @@ -562,17 +538,10 @@ static void mv_xor_v2_tasklet(unsigned long data)
1662 /* get the pending descriptors parameters */
1663 num_of_pending = mv_xor_v2_get_pending_params(xor_dev, &pending_ptr);
1664
1665 - /* next HW descriptor */
1666 - next_pending_hw_desc = xor_dev->hw_desq_virt + pending_ptr;
1667 -
1668 /* loop over free descriptors */
1669 for (i = 0; i < num_of_pending; i++) {
1670 -
1671 - if (pending_ptr > MV_XOR_V2_DESC_NUM)
1672 - pending_ptr = 0;
1673 -
1674 - if (next_pending_sw_desc != NULL)
1675 - next_pending_hw_desc++;
1676 + struct mv_xor_v2_descriptor *next_pending_hw_desc =
1677 + xor_dev->hw_desq_virt + pending_ptr;
1678
1679 /* get the SW descriptor related to the HW descriptor */
1680 next_pending_sw_desc =
1681 @@ -608,15 +577,14 @@ static void mv_xor_v2_tasklet(unsigned long data)
1682
1683 /* increment the next descriptor */
1684 pending_ptr++;
1685 + if (pending_ptr >= MV_XOR_V2_DESC_NUM)
1686 + pending_ptr = 0;
1687 }
1688
1689 if (num_of_pending != 0) {
1690 /* free the descriptores */
1691 mv_xor_v2_free_desc_from_desq(xor_dev, num_of_pending);
1692 }
1693 -
1694 - /* Update IMSG threshold, to enable new IMSG interrupts */
1695 - mv_xor_v2_set_imsg_thrd(xor_dev, 0);
1696 }
1697
1698 /*
1699 @@ -648,9 +616,6 @@ static int mv_xor_v2_descq_init(struct mv_xor_v2_device *xor_dev)
1700 writel((xor_dev->hw_desq & 0xFFFF00000000) >> 32,
1701 xor_dev->dma_base + MV_XOR_V2_DMA_DESQ_BAHR_OFF);
1702
1703 - /* enable the DMA engine */
1704 - writel(0, xor_dev->dma_base + MV_XOR_V2_DMA_DESQ_STOP_OFF);
1705 -
1706 /*
1707 * This is a temporary solution, until we activate the
1708 * SMMU. Set the attributes for reading & writing data buffers
1709 @@ -694,6 +659,9 @@ static int mv_xor_v2_descq_init(struct mv_xor_v2_device *xor_dev)
1710 reg |= MV_XOR_V2_GLOB_PAUSE_AXI_TIME_DIS_VAL;
1711 writel(reg, xor_dev->glob_base + MV_XOR_V2_GLOB_PAUSE);
1712
1713 + /* enable the DMA engine */
1714 + writel(0, xor_dev->dma_base + MV_XOR_V2_DMA_DESQ_STOP_OFF);
1715 +
1716 return 0;
1717 }
1718
1719 @@ -725,6 +693,10 @@ static int mv_xor_v2_probe(struct platform_device *pdev)
1720
1721 platform_set_drvdata(pdev, xor_dev);
1722
1723 + ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(40));
1724 + if (ret)
1725 + return ret;
1726 +
1727 xor_dev->clk = devm_clk_get(&pdev->dev, NULL);
1728 if (IS_ERR(xor_dev->clk) && PTR_ERR(xor_dev->clk) == -EPROBE_DEFER)
1729 return -EPROBE_DEFER;
1730 @@ -785,8 +757,15 @@ static int mv_xor_v2_probe(struct platform_device *pdev)
1731
1732 /* add all SW descriptors to the free list */
1733 for (i = 0; i < MV_XOR_V2_DESC_NUM; i++) {
1734 - xor_dev->sw_desq[i].idx = i;
1735 - list_add(&xor_dev->sw_desq[i].free_list,
1736 + struct mv_xor_v2_sw_desc *sw_desc =
1737 + xor_dev->sw_desq + i;
1738 + sw_desc->idx = i;
1739 + dma_async_tx_descriptor_init(&sw_desc->async_tx,
1740 + &xor_dev->dmachan);
1741 + sw_desc->async_tx.tx_submit = mv_xor_v2_tx_submit;
1742 + async_tx_ack(&sw_desc->async_tx);
1743 +
1744 + list_add(&sw_desc->free_list,
1745 &xor_dev->free_sw_desc);
1746 }
1747
1748 diff --git a/drivers/dma/sh/usb-dmac.c b/drivers/dma/sh/usb-dmac.c
1749 index 72c649713ace..31a145154e9f 100644
1750 --- a/drivers/dma/sh/usb-dmac.c
1751 +++ b/drivers/dma/sh/usb-dmac.c
1752 @@ -117,7 +117,7 @@ struct usb_dmac {
1753 #define USB_DMASWR 0x0008
1754 #define USB_DMASWR_SWR (1 << 0)
1755 #define USB_DMAOR 0x0060
1756 -#define USB_DMAOR_AE (1 << 2)
1757 +#define USB_DMAOR_AE (1 << 1)
1758 #define USB_DMAOR_DME (1 << 0)
1759
1760 #define USB_DMASAR 0x0000
1761 diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
1762 index f97ecb49972e..167f029f5fad 100644
1763 --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
1764 +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
1765 @@ -906,6 +906,12 @@ static bool ci_dpm_vblank_too_short(struct amdgpu_device *adev)
1766 u32 vblank_time = amdgpu_dpm_get_vblank_time(adev);
1767 u32 switch_limit = adev->mc.vram_type == AMDGPU_VRAM_TYPE_GDDR5 ? 450 : 300;
1768
1769 + /* disable mclk switching if the refresh is >120Hz, even if the
1770 + * blanking period would allow it
1771 + */
1772 + if (amdgpu_dpm_get_vrefresh(adev) > 120)
1773 + return true;
1774 +
1775 if (vblank_time < switch_limit)
1776 return true;
1777 else
1778 diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
1779 index b5c6bb46a425..37b8ad3e30d8 100644
1780 --- a/drivers/gpu/drm/drm_drv.c
1781 +++ b/drivers/gpu/drm/drm_drv.c
1782 @@ -358,7 +358,12 @@ EXPORT_SYMBOL(drm_put_dev);
1783 void drm_unplug_dev(struct drm_device *dev)
1784 {
1785 /* for a USB device */
1786 - drm_dev_unregister(dev);
1787 + if (drm_core_check_feature(dev, DRIVER_MODESET))
1788 + drm_modeset_unregister_all(dev);
1789 +
1790 + drm_minor_unregister(dev, DRM_MINOR_PRIMARY);
1791 + drm_minor_unregister(dev, DRM_MINOR_RENDER);
1792 + drm_minor_unregister(dev, DRM_MINOR_CONTROL);
1793
1794 mutex_lock(&drm_global_mutex);
1795
1796 diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
1797 index 5c089b3c2a7e..66dbb3c4c6d8 100644
1798 --- a/drivers/gpu/drm/i915/i915_drv.c
1799 +++ b/drivers/gpu/drm/i915/i915_drv.c
1800 @@ -565,9 +565,7 @@ static int i915_load_modeset_init(struct drm_device *dev)
1801 if (i915_inject_load_failure())
1802 return -ENODEV;
1803
1804 - ret = intel_bios_init(dev_priv);
1805 - if (ret)
1806 - DRM_INFO("failed to find VBIOS tables\n");
1807 + intel_bios_init(dev_priv);
1808
1809 /* If we have > 1 VGA cards, then we need to arbitrate access
1810 * to the common VGA resources.
1811 diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
1812 index 46fcd8b7080a..959e22dc94ba 100644
1813 --- a/drivers/gpu/drm/i915/i915_drv.h
1814 +++ b/drivers/gpu/drm/i915/i915_drv.h
1815 @@ -3629,7 +3629,7 @@ static inline bool intel_gmbus_is_forced_bit(struct i2c_adapter *adapter)
1816 extern void intel_i2c_reset(struct drm_i915_private *dev_priv);
1817
1818 /* intel_bios.c */
1819 -int intel_bios_init(struct drm_i915_private *dev_priv);
1820 +void intel_bios_init(struct drm_i915_private *dev_priv);
1821 bool intel_bios_is_valid_vbt(const void *buf, size_t size);
1822 bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv);
1823 bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin);
1824 diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
1825 index e144f033f4b5..639d45c1dd2e 100644
1826 --- a/drivers/gpu/drm/i915/intel_bios.c
1827 +++ b/drivers/gpu/drm/i915/intel_bios.c
1828 @@ -1341,6 +1341,7 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
1829 return;
1830 }
1831
1832 +/* Common defaults which may be overridden by VBT. */
1833 static void
1834 init_vbt_defaults(struct drm_i915_private *dev_priv)
1835 {
1836 @@ -1377,6 +1378,18 @@ init_vbt_defaults(struct drm_i915_private *dev_priv)
1837 &dev_priv->vbt.ddi_port_info[port];
1838
1839 info->hdmi_level_shift = HDMI_LEVEL_SHIFT_UNKNOWN;
1840 + }
1841 +}
1842 +
1843 +/* Defaults to initialize only if there is no VBT. */
1844 +static void
1845 +init_vbt_missing_defaults(struct drm_i915_private *dev_priv)
1846 +{
1847 + enum port port;
1848 +
1849 + for (port = PORT_A; port < I915_MAX_PORTS; port++) {
1850 + struct ddi_vbt_port_info *info =
1851 + &dev_priv->vbt.ddi_port_info[port];
1852
1853 info->supports_dvi = (port != PORT_A && port != PORT_E);
1854 info->supports_hdmi = info->supports_dvi;
1855 @@ -1462,36 +1475,35 @@ static const struct vbt_header *find_vbt(void __iomem *bios, size_t size)
1856 * intel_bios_init - find VBT and initialize settings from the BIOS
1857 * @dev_priv: i915 device instance
1858 *
1859 - * Loads the Video BIOS and checks that the VBT exists. Sets scratch registers
1860 - * to appropriate values.
1861 - *
1862 - * Returns 0 on success, nonzero on failure.
1863 + * Parse and initialize settings from the Video BIOS Tables (VBT). If the VBT
1864 + * was not found in ACPI OpRegion, try to find it in PCI ROM first. Also
1865 + * initialize some defaults if the VBT is not present at all.
1866 */
1867 -int
1868 -intel_bios_init(struct drm_i915_private *dev_priv)
1869 +void intel_bios_init(struct drm_i915_private *dev_priv)
1870 {
1871 struct pci_dev *pdev = dev_priv->drm.pdev;
1872 const struct vbt_header *vbt = dev_priv->opregion.vbt;
1873 const struct bdb_header *bdb;
1874 u8 __iomem *bios = NULL;
1875
1876 - if (HAS_PCH_NOP(dev_priv))
1877 - return -ENODEV;
1878 + if (HAS_PCH_NOP(dev_priv)) {
1879 + DRM_DEBUG_KMS("Skipping VBT init due to disabled display.\n");
1880 + return;
1881 + }
1882
1883 init_vbt_defaults(dev_priv);
1884
1885 + /* If the OpRegion does not have VBT, look in PCI ROM. */
1886 if (!vbt) {
1887 size_t size;
1888
1889 bios = pci_map_rom(pdev, &size);
1890 if (!bios)
1891 - return -1;
1892 + goto out;
1893
1894 vbt = find_vbt(bios, size);
1895 - if (!vbt) {
1896 - pci_unmap_rom(pdev, bios);
1897 - return -1;
1898 - }
1899 + if (!vbt)
1900 + goto out;
1901
1902 DRM_DEBUG_KMS("Found valid VBT in PCI ROM\n");
1903 }
1904 @@ -1516,10 +1528,14 @@ intel_bios_init(struct drm_i915_private *dev_priv)
1905 parse_mipi_sequence(dev_priv, bdb);
1906 parse_ddi_ports(dev_priv, bdb);
1907
1908 +out:
1909 + if (!vbt) {
1910 + DRM_INFO("Failed to find VBIOS tables (VBT)\n");
1911 + init_vbt_missing_defaults(dev_priv);
1912 + }
1913 +
1914 if (bios)
1915 pci_unmap_rom(pdev, bios);
1916 -
1917 - return 0;
1918 }
1919
1920 /**
1921 diff --git a/drivers/gpu/drm/i915/intel_lpe_audio.c b/drivers/gpu/drm/i915/intel_lpe_audio.c
1922 index 7a5b41b1c024..999cb31ba63d 100644
1923 --- a/drivers/gpu/drm/i915/intel_lpe_audio.c
1924 +++ b/drivers/gpu/drm/i915/intel_lpe_audio.c
1925 @@ -63,6 +63,7 @@
1926 #include <linux/acpi.h>
1927 #include <linux/device.h>
1928 #include <linux/pci.h>
1929 +#include <linux/pm_runtime.h>
1930
1931 #include "i915_drv.h"
1932 #include <linux/delay.h>
1933 @@ -121,6 +122,10 @@ lpe_audio_platdev_create(struct drm_i915_private *dev_priv)
1934
1935 kfree(rsc);
1936
1937 + pm_runtime_forbid(&platdev->dev);
1938 + pm_runtime_set_active(&platdev->dev);
1939 + pm_runtime_enable(&platdev->dev);
1940 +
1941 return platdev;
1942
1943 err:
1944 diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
1945 index 0ffb8affef35..4a81d67b0d69 100644
1946 --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
1947 +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
1948 @@ -220,9 +220,10 @@ mdp5_plane_duplicate_state(struct drm_plane *plane)
1949
1950 mdp5_state = kmemdup(to_mdp5_plane_state(plane->state),
1951 sizeof(*mdp5_state), GFP_KERNEL);
1952 + if (!mdp5_state)
1953 + return NULL;
1954
1955 - if (mdp5_state && mdp5_state->base.fb)
1956 - drm_framebuffer_reference(mdp5_state->base.fb);
1957 + __drm_atomic_helper_plane_duplicate_state(plane, &mdp5_state->base);
1958
1959 return &mdp5_state->base;
1960 }
1961 diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
1962 index 70226eaa5cac..eba4c3e8e156 100644
1963 --- a/drivers/gpu/drm/msm/msm_drv.c
1964 +++ b/drivers/gpu/drm/msm/msm_drv.c
1965 @@ -828,6 +828,7 @@ static struct drm_driver msm_driver = {
1966 .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
1967 .gem_prime_export = drm_gem_prime_export,
1968 .gem_prime_import = drm_gem_prime_import,
1969 + .gem_prime_res_obj = msm_gem_prime_res_obj,
1970 .gem_prime_pin = msm_gem_prime_pin,
1971 .gem_prime_unpin = msm_gem_prime_unpin,
1972 .gem_prime_get_sg_table = msm_gem_prime_get_sg_table,
1973 diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
1974 index c3b14876edaa..0e56a8bb7b59 100644
1975 --- a/drivers/gpu/drm/msm/msm_drv.h
1976 +++ b/drivers/gpu/drm/msm/msm_drv.h
1977 @@ -223,6 +223,7 @@ struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj);
1978 void *msm_gem_prime_vmap(struct drm_gem_object *obj);
1979 void msm_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
1980 int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
1981 +struct reservation_object *msm_gem_prime_res_obj(struct drm_gem_object *obj);
1982 struct drm_gem_object *msm_gem_prime_import_sg_table(struct drm_device *dev,
1983 struct dma_buf_attachment *attach, struct sg_table *sg);
1984 int msm_gem_prime_pin(struct drm_gem_object *obj);
1985 diff --git a/drivers/gpu/drm/msm/msm_gem_prime.c b/drivers/gpu/drm/msm/msm_gem_prime.c
1986 index 60bb290700ce..13403c6da6c7 100644
1987 --- a/drivers/gpu/drm/msm/msm_gem_prime.c
1988 +++ b/drivers/gpu/drm/msm/msm_gem_prime.c
1989 @@ -70,3 +70,10 @@ void msm_gem_prime_unpin(struct drm_gem_object *obj)
1990 if (!obj->import_attach)
1991 msm_gem_put_pages(obj);
1992 }
1993 +
1994 +struct reservation_object *msm_gem_prime_res_obj(struct drm_gem_object *obj)
1995 +{
1996 + struct msm_gem_object *msm_obj = to_msm_bo(obj);
1997 +
1998 + return msm_obj->resv;
1999 +}
2000 diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h
2001 index 6a567fe347b3..820a4805916f 100644
2002 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h
2003 +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h
2004 @@ -4,6 +4,7 @@
2005
2006 struct nvkm_alarm {
2007 struct list_head head;
2008 + struct list_head exec;
2009 u64 timestamp;
2010 void (*func)(struct nvkm_alarm *);
2011 };
2012 diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c
2013 index f2a86eae0a0d..2437f7d41ca2 100644
2014 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c
2015 +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c
2016 @@ -50,7 +50,8 @@ nvkm_timer_alarm_trigger(struct nvkm_timer *tmr)
2017 /* Move to completed list. We'll drop the lock before
2018 * executing the callback so it can reschedule itself.
2019 */
2020 - list_move_tail(&alarm->head, &exec);
2021 + list_del_init(&alarm->head);
2022 + list_add(&alarm->exec, &exec);
2023 }
2024
2025 /* Shut down interrupt if no more pending alarms. */
2026 @@ -59,8 +60,8 @@ nvkm_timer_alarm_trigger(struct nvkm_timer *tmr)
2027 spin_unlock_irqrestore(&tmr->lock, flags);
2028
2029 /* Execute completed callbacks. */
2030 - list_for_each_entry_safe(alarm, atemp, &exec, head) {
2031 - list_del_init(&alarm->head);
2032 + list_for_each_entry_safe(alarm, atemp, &exec, exec) {
2033 + list_del(&alarm->exec);
2034 alarm->func(alarm);
2035 }
2036 }
2037 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
2038 index b6a0806b06bf..a1c68e6a689e 100644
2039 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
2040 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
2041 @@ -368,6 +368,8 @@ static void *vmw_local_fifo_reserve(struct vmw_private *dev_priv,
2042 return fifo_state->static_buffer;
2043 else {
2044 fifo_state->dynamic_buffer = vmalloc(bytes);
2045 + if (!fifo_state->dynamic_buffer)
2046 + goto out_err;
2047 return fifo_state->dynamic_buffer;
2048 }
2049 }
2050 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
2051 index 05fa092c942b..56b803384ea2 100644
2052 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
2053 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
2054 @@ -1275,11 +1275,14 @@ int vmw_gb_surface_define_ioctl(struct drm_device *dev, void *data,
2055 struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile;
2056 int ret;
2057 uint32_t size;
2058 - uint32_t backup_handle;
2059 + uint32_t backup_handle = 0;
2060
2061 if (req->multisample_count != 0)
2062 return -EINVAL;
2063
2064 + if (req->mip_levels > DRM_VMW_MAX_MIP_LEVELS)
2065 + return -EINVAL;
2066 +
2067 if (unlikely(vmw_user_surface_size == 0))
2068 vmw_user_surface_size = ttm_round_pot(sizeof(*user_srf)) +
2069 128;
2070 @@ -1315,12 +1318,16 @@ int vmw_gb_surface_define_ioctl(struct drm_device *dev, void *data,
2071 ret = vmw_user_dmabuf_lookup(tfile, req->buffer_handle,
2072 &res->backup,
2073 &user_srf->backup_base);
2074 - if (ret == 0 && res->backup->base.num_pages * PAGE_SIZE <
2075 - res->backup_size) {
2076 - DRM_ERROR("Surface backup buffer is too small.\n");
2077 - vmw_dmabuf_unreference(&res->backup);
2078 - ret = -EINVAL;
2079 - goto out_unlock;
2080 + if (ret == 0) {
2081 + if (res->backup->base.num_pages * PAGE_SIZE <
2082 + res->backup_size) {
2083 + DRM_ERROR("Surface backup buffer is too small.\n");
2084 + vmw_dmabuf_unreference(&res->backup);
2085 + ret = -EINVAL;
2086 + goto out_unlock;
2087 + } else {
2088 + backup_handle = req->buffer_handle;
2089 + }
2090 }
2091 } else if (req->drm_surface_flags & drm_vmw_surface_flag_create_buffer)
2092 ret = vmw_user_dmabuf_alloc(dev_priv, tfile,
2093 diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
2094 index 3ac4c03ba77b..c13a4fd86b3c 100644
2095 --- a/drivers/hwmon/coretemp.c
2096 +++ b/drivers/hwmon/coretemp.c
2097 @@ -605,6 +605,13 @@ static int coretemp_cpu_online(unsigned int cpu)
2098 struct platform_data *pdata;
2099
2100 /*
2101 + * Don't execute this on resume as the offline callback did
2102 + * not get executed on suspend.
2103 + */
2104 + if (cpuhp_tasks_frozen)
2105 + return 0;
2106 +
2107 + /*
2108 * CPUID.06H.EAX[0] indicates whether the CPU has thermal
2109 * sensors. We check this bit only, all the early CPUs
2110 * without thermal sensors will be filtered out.
2111 @@ -654,6 +661,13 @@ static int coretemp_cpu_offline(unsigned int cpu)
2112 struct temp_data *tdata;
2113 int indx, target;
2114
2115 + /*
2116 + * Don't execute this on suspend as the device remove locks
2117 + * up the machine.
2118 + */
2119 + if (cpuhp_tasks_frozen)
2120 + return 0;
2121 +
2122 /* If the physical CPU device does not exist, just return */
2123 if (!pdev)
2124 return 0;
2125 diff --git a/drivers/iio/adc/bcm_iproc_adc.c b/drivers/iio/adc/bcm_iproc_adc.c
2126 index 21d38c8af21e..7f4f9c4150e3 100644
2127 --- a/drivers/iio/adc/bcm_iproc_adc.c
2128 +++ b/drivers/iio/adc/bcm_iproc_adc.c
2129 @@ -143,7 +143,7 @@ static void iproc_adc_reg_dump(struct iio_dev *indio_dev)
2130 iproc_adc_dbg_reg(dev, adc_priv, IPROC_SOFT_BYPASS_DATA);
2131 }
2132
2133 -static irqreturn_t iproc_adc_interrupt_handler(int irq, void *data)
2134 +static irqreturn_t iproc_adc_interrupt_thread(int irq, void *data)
2135 {
2136 u32 channel_intr_status;
2137 u32 intr_status;
2138 @@ -167,7 +167,7 @@ static irqreturn_t iproc_adc_interrupt_handler(int irq, void *data)
2139 return IRQ_NONE;
2140 }
2141
2142 -static irqreturn_t iproc_adc_interrupt_thread(int irq, void *data)
2143 +static irqreturn_t iproc_adc_interrupt_handler(int irq, void *data)
2144 {
2145 irqreturn_t retval = IRQ_NONE;
2146 struct iproc_adc_priv *adc_priv;
2147 @@ -181,7 +181,7 @@ static irqreturn_t iproc_adc_interrupt_thread(int irq, void *data)
2148 adc_priv = iio_priv(indio_dev);
2149
2150 regmap_read(adc_priv->regmap, IPROC_INTERRUPT_STATUS, &intr_status);
2151 - dev_dbg(&indio_dev->dev, "iproc_adc_interrupt_thread(),INTRPT_STS:%x\n",
2152 + dev_dbg(&indio_dev->dev, "iproc_adc_interrupt_handler(),INTRPT_STS:%x\n",
2153 intr_status);
2154
2155 intr_channels = (intr_status & IPROC_ADC_INTR_MASK) >> IPROC_ADC_INTR;
2156 @@ -566,8 +566,8 @@ static int iproc_adc_probe(struct platform_device *pdev)
2157 }
2158
2159 ret = devm_request_threaded_irq(&pdev->dev, adc_priv->irqno,
2160 - iproc_adc_interrupt_thread,
2161 iproc_adc_interrupt_handler,
2162 + iproc_adc_interrupt_thread,
2163 IRQF_SHARED, "iproc-adc", indio_dev);
2164 if (ret) {
2165 dev_err(&pdev->dev, "request_irq error %d\n", ret);
2166 diff --git a/drivers/iio/industrialio-trigger.c b/drivers/iio/industrialio-trigger.c
2167 index 978e1592c2a3..4061fed93f1f 100644
2168 --- a/drivers/iio/industrialio-trigger.c
2169 +++ b/drivers/iio/industrialio-trigger.c
2170 @@ -451,7 +451,8 @@ static ssize_t iio_trigger_write_current(struct device *dev,
2171 return len;
2172
2173 out_trigger_put:
2174 - iio_trigger_put(trig);
2175 + if (trig)
2176 + iio_trigger_put(trig);
2177 return ret;
2178 }
2179
2180 diff --git a/drivers/iio/light/ltr501.c b/drivers/iio/light/ltr501.c
2181 index b30e0c1c6cc4..67838edd8b37 100644
2182 --- a/drivers/iio/light/ltr501.c
2183 +++ b/drivers/iio/light/ltr501.c
2184 @@ -74,9 +74,9 @@ static const int int_time_mapping[] = {100000, 50000, 200000, 400000};
2185 static const struct reg_field reg_field_it =
2186 REG_FIELD(LTR501_ALS_MEAS_RATE, 3, 4);
2187 static const struct reg_field reg_field_als_intr =
2188 - REG_FIELD(LTR501_INTR, 0, 0);
2189 -static const struct reg_field reg_field_ps_intr =
2190 REG_FIELD(LTR501_INTR, 1, 1);
2191 +static const struct reg_field reg_field_ps_intr =
2192 + REG_FIELD(LTR501_INTR, 0, 0);
2193 static const struct reg_field reg_field_als_rate =
2194 REG_FIELD(LTR501_ALS_MEAS_RATE, 0, 2);
2195 static const struct reg_field reg_field_ps_rate =
2196 diff --git a/drivers/iio/proximity/as3935.c b/drivers/iio/proximity/as3935.c
2197 index 020459513384..268210ea4990 100644
2198 --- a/drivers/iio/proximity/as3935.c
2199 +++ b/drivers/iio/proximity/as3935.c
2200 @@ -40,9 +40,9 @@
2201 #define AS3935_AFE_PWR_BIT BIT(0)
2202
2203 #define AS3935_INT 0x03
2204 -#define AS3935_INT_MASK 0x07
2205 +#define AS3935_INT_MASK 0x0f
2206 #define AS3935_EVENT_INT BIT(3)
2207 -#define AS3935_NOISE_INT BIT(1)
2208 +#define AS3935_NOISE_INT BIT(0)
2209
2210 #define AS3935_DATA 0x07
2211 #define AS3935_DATA_MASK 0x3F
2212 @@ -215,7 +215,7 @@ static irqreturn_t as3935_trigger_handler(int irq, void *private)
2213
2214 st->buffer[0] = val & AS3935_DATA_MASK;
2215 iio_push_to_buffers_with_timestamp(indio_dev, &st->buffer,
2216 - pf->timestamp);
2217 + iio_get_time_ns(indio_dev));
2218 err_read:
2219 iio_trigger_notify_done(indio_dev->trig);
2220
2221 @@ -244,7 +244,7 @@ static void as3935_event_work(struct work_struct *work)
2222
2223 switch (val) {
2224 case AS3935_EVENT_INT:
2225 - iio_trigger_poll(st->trig);
2226 + iio_trigger_poll_chained(st->trig);
2227 break;
2228 case AS3935_NOISE_INT:
2229 dev_warn(&st->spi->dev, "noise level is too high\n");
2230 diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
2231 index e73d968023f7..f1fa1f172107 100644
2232 --- a/drivers/input/mouse/elantech.c
2233 +++ b/drivers/input/mouse/elantech.c
2234 @@ -1118,8 +1118,10 @@ static int elantech_get_resolution_v4(struct psmouse *psmouse,
2235 * Asus UX32VD 0x361f02 00, 15, 0e clickpad
2236 * Avatar AVIU-145A2 0x361f00 ? clickpad
2237 * Fujitsu LIFEBOOK E544 0x470f00 d0, 12, 09 2 hw buttons
2238 + * Fujitsu LIFEBOOK E546 0x470f00 50, 12, 09 2 hw buttons
2239 * Fujitsu LIFEBOOK E547 0x470f00 50, 12, 09 2 hw buttons
2240 * Fujitsu LIFEBOOK E554 0x570f01 40, 14, 0c 2 hw buttons
2241 + * Fujitsu LIFEBOOK E557 0x570f01 40, 14, 0c 2 hw buttons
2242 * Fujitsu T725 0x470f01 05, 12, 09 2 hw buttons
2243 * Fujitsu H730 0x570f00 c0, 14, 0c 3 hw buttons (**)
2244 * Gigabyte U2442 0x450f01 58, 17, 0c 2 hw buttons
2245 @@ -1525,6 +1527,13 @@ static const struct dmi_system_id elantech_dmi_force_crc_enabled[] = {
2246 },
2247 },
2248 {
2249 + /* Fujitsu LIFEBOOK E546 does not work with crc_enabled == 0 */
2250 + .matches = {
2251 + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
2252 + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E546"),
2253 + },
2254 + },
2255 + {
2256 /* Fujitsu LIFEBOOK E547 does not work with crc_enabled == 0 */
2257 .matches = {
2258 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
2259 @@ -1546,6 +1555,13 @@ static const struct dmi_system_id elantech_dmi_force_crc_enabled[] = {
2260 },
2261 },
2262 {
2263 + /* Fujitsu LIFEBOOK E557 does not work with crc_enabled == 0 */
2264 + .matches = {
2265 + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
2266 + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E557"),
2267 + },
2268 + },
2269 + {
2270 /* Fujitsu LIFEBOOK U745 does not work with crc_enabled == 0 */
2271 .matches = {
2272 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
2273 diff --git a/drivers/media/rc/rc-ir-raw.c b/drivers/media/rc/rc-ir-raw.c
2274 index 7fa84b64a2ae..0bdc161c76cd 100644
2275 --- a/drivers/media/rc/rc-ir-raw.c
2276 +++ b/drivers/media/rc/rc-ir-raw.c
2277 @@ -211,7 +211,7 @@ EXPORT_SYMBOL_GPL(ir_raw_event_set_idle);
2278 */
2279 void ir_raw_event_handle(struct rc_dev *dev)
2280 {
2281 - if (!dev->raw)
2282 + if (!dev->raw || !dev->raw->thread)
2283 return;
2284
2285 wake_up_process(dev->raw->thread);
2286 @@ -490,6 +490,7 @@ int ir_raw_event_register(struct rc_dev *dev)
2287 {
2288 int rc;
2289 struct ir_raw_handler *handler;
2290 + struct task_struct *thread;
2291
2292 if (!dev)
2293 return -EINVAL;
2294 @@ -507,13 +508,15 @@ int ir_raw_event_register(struct rc_dev *dev)
2295 * because the event is coming from userspace
2296 */
2297 if (dev->driver_type != RC_DRIVER_IR_RAW_TX) {
2298 - dev->raw->thread = kthread_run(ir_raw_event_thread, dev->raw,
2299 - "rc%u", dev->minor);
2300 + thread = kthread_run(ir_raw_event_thread, dev->raw, "rc%u",
2301 + dev->minor);
2302
2303 - if (IS_ERR(dev->raw->thread)) {
2304 - rc = PTR_ERR(dev->raw->thread);
2305 + if (IS_ERR(thread)) {
2306 + rc = PTR_ERR(thread);
2307 goto out;
2308 }
2309 +
2310 + dev->raw->thread = thread;
2311 }
2312
2313 mutex_lock(&ir_raw_handler_lock);
2314 diff --git a/drivers/misc/cxl/file.c b/drivers/misc/cxl/file.c
2315 index e7139c76f961..072064220707 100644
2316 --- a/drivers/misc/cxl/file.c
2317 +++ b/drivers/misc/cxl/file.c
2318 @@ -158,11 +158,8 @@ static long afu_ioctl_start_work(struct cxl_context *ctx,
2319
2320 /* Do this outside the status_mutex to avoid a circular dependency with
2321 * the locking in cxl_mmap_fault() */
2322 - if (copy_from_user(&work, uwork,
2323 - sizeof(struct cxl_ioctl_start_work))) {
2324 - rc = -EFAULT;
2325 - goto out;
2326 - }
2327 + if (copy_from_user(&work, uwork, sizeof(work)))
2328 + return -EFAULT;
2329
2330 mutex_lock(&ctx->status_mutex);
2331 if (ctx->status != OPENED) {
2332 diff --git a/drivers/misc/cxl/native.c b/drivers/misc/cxl/native.c
2333 index 7ae710585267..47b777234c54 100644
2334 --- a/drivers/misc/cxl/native.c
2335 +++ b/drivers/misc/cxl/native.c
2336 @@ -1075,13 +1075,16 @@ int cxl_native_register_psl_err_irq(struct cxl *adapter)
2337
2338 void cxl_native_release_psl_err_irq(struct cxl *adapter)
2339 {
2340 - if (adapter->native->err_virq != irq_find_mapping(NULL, adapter->native->err_hwirq))
2341 + if (adapter->native->err_virq == 0 ||
2342 + adapter->native->err_virq !=
2343 + irq_find_mapping(NULL, adapter->native->err_hwirq))
2344 return;
2345
2346 cxl_p1_write(adapter, CXL_PSL_ErrIVTE, 0x0000000000000000);
2347 cxl_unmap_irq(adapter->native->err_virq, adapter);
2348 cxl_ops->release_one_irq(adapter, adapter->native->err_hwirq);
2349 kfree(adapter->irq_name);
2350 + adapter->native->err_virq = 0;
2351 }
2352
2353 int cxl_native_register_serr_irq(struct cxl_afu *afu)
2354 @@ -1111,13 +1114,15 @@ int cxl_native_register_serr_irq(struct cxl_afu *afu)
2355
2356 void cxl_native_release_serr_irq(struct cxl_afu *afu)
2357 {
2358 - if (afu->serr_virq != irq_find_mapping(NULL, afu->serr_hwirq))
2359 + if (afu->serr_virq == 0 ||
2360 + afu->serr_virq != irq_find_mapping(NULL, afu->serr_hwirq))
2361 return;
2362
2363 cxl_p1n_write(afu, CXL_PSL_SERR_An, 0x0000000000000000);
2364 cxl_unmap_irq(afu->serr_virq, afu);
2365 cxl_ops->release_one_irq(afu->adapter, afu->serr_hwirq);
2366 kfree(afu->err_irq_name);
2367 + afu->serr_virq = 0;
2368 }
2369
2370 int cxl_native_register_psl_irq(struct cxl_afu *afu)
2371 @@ -1140,12 +1145,15 @@ int cxl_native_register_psl_irq(struct cxl_afu *afu)
2372
2373 void cxl_native_release_psl_irq(struct cxl_afu *afu)
2374 {
2375 - if (afu->native->psl_virq != irq_find_mapping(NULL, afu->native->psl_hwirq))
2376 + if (afu->native->psl_virq == 0 ||
2377 + afu->native->psl_virq !=
2378 + irq_find_mapping(NULL, afu->native->psl_hwirq))
2379 return;
2380
2381 cxl_unmap_irq(afu->native->psl_virq, afu);
2382 cxl_ops->release_one_irq(afu->adapter, afu->native->psl_hwirq);
2383 kfree(afu->psl_irq_name);
2384 + afu->native->psl_virq = 0;
2385 }
2386
2387 static void recover_psl_err(struct cxl_afu *afu, u64 errstat)
2388 diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
2389 index df5f78ae3d25..8b96c074799c 100644
2390 --- a/drivers/misc/mei/bus.c
2391 +++ b/drivers/misc/mei/bus.c
2392 @@ -763,8 +763,10 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
2393 {
2394 struct mei_cl_device *cldev = to_mei_cl_device(dev);
2395 const uuid_le *uuid = mei_me_cl_uuid(cldev->me_cl);
2396 + u8 version = mei_me_cl_ver(cldev->me_cl);
2397
2398 - return scnprintf(buf, PAGE_SIZE, "mei:%s:%pUl:", cldev->name, uuid);
2399 + return scnprintf(buf, PAGE_SIZE, "mei:%s:%pUl:%02X:",
2400 + cldev->name, uuid, version);
2401 }
2402 static DEVICE_ATTR_RO(modalias);
2403
2404 diff --git a/drivers/mtd/nand/tango_nand.c b/drivers/mtd/nand/tango_nand.c
2405 index 4a5e948c62df..25b7b930e02a 100644
2406 --- a/drivers/mtd/nand/tango_nand.c
2407 +++ b/drivers/mtd/nand/tango_nand.c
2408 @@ -55,10 +55,10 @@
2409 * byte 1 for other packets in the page (PKT_N, for N > 0)
2410 * ERR_COUNT_PKT_N is the max error count over all but the first packet.
2411 */
2412 -#define DECODE_OK_PKT_0(v) ((v) & BIT(7))
2413 -#define DECODE_OK_PKT_N(v) ((v) & BIT(15))
2414 #define ERR_COUNT_PKT_0(v) (((v) >> 0) & 0x3f)
2415 #define ERR_COUNT_PKT_N(v) (((v) >> 8) & 0x3f)
2416 +#define DECODE_FAIL_PKT_0(v) (((v) & BIT(7)) == 0)
2417 +#define DECODE_FAIL_PKT_N(v) (((v) & BIT(15)) == 0)
2418
2419 /* Offsets relative to pbus_base */
2420 #define PBUS_CS_CTRL 0x83c
2421 @@ -193,6 +193,8 @@ static int check_erased_page(struct nand_chip *chip, u8 *buf)
2422 chip->ecc.strength);
2423 if (res < 0)
2424 mtd->ecc_stats.failed++;
2425 + else
2426 + mtd->ecc_stats.corrected += res;
2427
2428 bitflips = max(res, bitflips);
2429 buf += pkt_size;
2430 @@ -202,9 +204,11 @@ static int check_erased_page(struct nand_chip *chip, u8 *buf)
2431 return bitflips;
2432 }
2433
2434 -static int decode_error_report(struct tango_nfc *nfc)
2435 +static int decode_error_report(struct nand_chip *chip)
2436 {
2437 u32 status, res;
2438 + struct mtd_info *mtd = nand_to_mtd(chip);
2439 + struct tango_nfc *nfc = to_tango_nfc(chip->controller);
2440
2441 status = readl_relaxed(nfc->reg_base + NFC_XFER_STATUS);
2442 if (status & PAGE_IS_EMPTY)
2443 @@ -212,10 +216,14 @@ static int decode_error_report(struct tango_nfc *nfc)
2444
2445 res = readl_relaxed(nfc->mem_base + ERROR_REPORT);
2446
2447 - if (DECODE_OK_PKT_0(res) && DECODE_OK_PKT_N(res))
2448 - return max(ERR_COUNT_PKT_0(res), ERR_COUNT_PKT_N(res));
2449 + if (DECODE_FAIL_PKT_0(res) || DECODE_FAIL_PKT_N(res))
2450 + return -EBADMSG;
2451 +
2452 + /* ERR_COUNT_PKT_N is max, not sum, but that's all we have */
2453 + mtd->ecc_stats.corrected +=
2454 + ERR_COUNT_PKT_0(res) + ERR_COUNT_PKT_N(res);
2455
2456 - return -EBADMSG;
2457 + return max(ERR_COUNT_PKT_0(res), ERR_COUNT_PKT_N(res));
2458 }
2459
2460 static void tango_dma_callback(void *arg)
2461 @@ -280,7 +288,7 @@ static int tango_read_page(struct mtd_info *mtd, struct nand_chip *chip,
2462 if (err)
2463 return err;
2464
2465 - res = decode_error_report(nfc);
2466 + res = decode_error_report(chip);
2467 if (res < 0) {
2468 chip->ecc.read_oob_raw(mtd, chip, page);
2469 res = check_erased_page(chip, buf);
2470 @@ -661,6 +669,7 @@ static const struct of_device_id tango_nand_ids[] = {
2471 { .compatible = "sigma,smp8758-nand" },
2472 { /* sentinel */ }
2473 };
2474 +MODULE_DEVICE_TABLE(of, tango_nand_ids);
2475
2476 static struct platform_driver tango_nand_driver = {
2477 .probe = tango_nand_probe,
2478 diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
2479 index a68d4889f5db..a96916a63fa3 100644
2480 --- a/drivers/net/ethernet/broadcom/bcmsysport.c
2481 +++ b/drivers/net/ethernet/broadcom/bcmsysport.c
2482 @@ -1968,9 +1968,12 @@ static int bcm_sysport_probe(struct platform_device *pdev)
2483 priv->num_rx_desc_words = params->num_rx_desc_words;
2484
2485 priv->irq0 = platform_get_irq(pdev, 0);
2486 - if (!priv->is_lite)
2487 + if (!priv->is_lite) {
2488 priv->irq1 = platform_get_irq(pdev, 1);
2489 - priv->wol_irq = platform_get_irq(pdev, 2);
2490 + priv->wol_irq = platform_get_irq(pdev, 2);
2491 + } else {
2492 + priv->wol_irq = platform_get_irq(pdev, 1);
2493 + }
2494 if (priv->irq0 <= 0 || (priv->irq1 <= 0 && !priv->is_lite)) {
2495 dev_err(&pdev->dev, "invalid interrupts\n");
2496 ret = -EINVAL;
2497 diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
2498 index 9e8c06130c09..c2f9a1f93c70 100644
2499 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
2500 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
2501 @@ -1926,7 +1926,7 @@ u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb,
2502 }
2503
2504 /* select a non-FCoE queue */
2505 - return fallback(dev, skb) % BNX2X_NUM_ETH_QUEUES(bp);
2506 + return fallback(dev, skb) % (BNX2X_NUM_ETH_QUEUES(bp) * bp->max_cos);
2507 }
2508
2509 void bnx2x_set_num_queues(struct bnx2x *bp)
2510 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
2511 index afb0967d2ce6..012194bc92d3 100644
2512 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
2513 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
2514 @@ -2217,10 +2217,14 @@ static int cxgb_up(struct adapter *adap)
2515 if (err)
2516 goto irq_err;
2517 }
2518 +
2519 + mutex_lock(&uld_mutex);
2520 enable_rx(adap);
2521 t4_sge_start(adap);
2522 t4_intr_enable(adap);
2523 adap->flags |= FULL_INIT_DONE;
2524 + mutex_unlock(&uld_mutex);
2525 +
2526 notify_ulds(adap, CXGB4_STATE_UP);
2527 #if IS_ENABLED(CONFIG_IPV6)
2528 update_clip(adap);
2529 diff --git a/drivers/net/ethernet/ethoc.c b/drivers/net/ethernet/ethoc.c
2530 index 23d82748f52b..4f33660134b8 100644
2531 --- a/drivers/net/ethernet/ethoc.c
2532 +++ b/drivers/net/ethernet/ethoc.c
2533 @@ -739,6 +739,8 @@ static int ethoc_open(struct net_device *dev)
2534 if (ret)
2535 return ret;
2536
2537 + napi_enable(&priv->napi);
2538 +
2539 ethoc_init_ring(priv, dev->mem_start);
2540 ethoc_reset(priv);
2541
2542 @@ -754,7 +756,6 @@ static int ethoc_open(struct net_device *dev)
2543 priv->old_duplex = -1;
2544
2545 phy_start(dev->phydev);
2546 - napi_enable(&priv->napi);
2547
2548 if (netif_msg_ifup(priv)) {
2549 dev_info(&dev->dev, "I/O: %08lx Memory: %08lx-%08lx\n",
2550 diff --git a/drivers/net/ethernet/qualcomm/emac/emac-mac.c b/drivers/net/ethernet/qualcomm/emac/emac-mac.c
2551 index cc065ffbe4b5..bcd4708b3745 100644
2552 --- a/drivers/net/ethernet/qualcomm/emac/emac-mac.c
2553 +++ b/drivers/net/ethernet/qualcomm/emac/emac-mac.c
2554 @@ -931,7 +931,7 @@ int emac_mac_up(struct emac_adapter *adpt)
2555 emac_mac_config(adpt);
2556 emac_mac_rx_descs_refill(adpt, &adpt->rx_q);
2557
2558 - adpt->phydev->irq = PHY_IGNORE_INTERRUPT;
2559 + adpt->phydev->irq = PHY_POLL;
2560 ret = phy_connect_direct(netdev, adpt->phydev, emac_adjust_link,
2561 PHY_INTERFACE_MODE_SGMII);
2562 if (ret) {
2563 diff --git a/drivers/net/ethernet/qualcomm/emac/emac-phy.c b/drivers/net/ethernet/qualcomm/emac/emac-phy.c
2564 index 441c19366489..18461fcb9815 100644
2565 --- a/drivers/net/ethernet/qualcomm/emac/emac-phy.c
2566 +++ b/drivers/net/ethernet/qualcomm/emac/emac-phy.c
2567 @@ -13,15 +13,11 @@
2568 /* Qualcomm Technologies, Inc. EMAC PHY Controller driver.
2569 */
2570
2571 -#include <linux/module.h>
2572 -#include <linux/of.h>
2573 -#include <linux/of_net.h>
2574 #include <linux/of_mdio.h>
2575 #include <linux/phy.h>
2576 #include <linux/iopoll.h>
2577 #include <linux/acpi.h>
2578 #include "emac.h"
2579 -#include "emac-mac.h"
2580
2581 /* EMAC base register offsets */
2582 #define EMAC_MDIO_CTRL 0x001414
2583 @@ -52,62 +48,10 @@
2584
2585 #define MDIO_WAIT_TIMES 1000
2586
2587 -#define EMAC_LINK_SPEED_DEFAULT (\
2588 - EMAC_LINK_SPEED_10_HALF |\
2589 - EMAC_LINK_SPEED_10_FULL |\
2590 - EMAC_LINK_SPEED_100_HALF |\
2591 - EMAC_LINK_SPEED_100_FULL |\
2592 - EMAC_LINK_SPEED_1GB_FULL)
2593 -
2594 -/**
2595 - * emac_phy_mdio_autopoll_disable() - disable mdio autopoll
2596 - * @adpt: the emac adapter
2597 - *
2598 - * The autopoll feature takes over the MDIO bus. In order for
2599 - * the PHY driver to be able to talk to the PHY over the MDIO
2600 - * bus, we need to temporarily disable the autopoll feature.
2601 - */
2602 -static int emac_phy_mdio_autopoll_disable(struct emac_adapter *adpt)
2603 -{
2604 - u32 val;
2605 -
2606 - /* disable autopoll */
2607 - emac_reg_update32(adpt->base + EMAC_MDIO_CTRL, MDIO_AP_EN, 0);
2608 -
2609 - /* wait for any mdio polling to complete */
2610 - if (!readl_poll_timeout(adpt->base + EMAC_MDIO_CTRL, val,
2611 - !(val & MDIO_BUSY), 100, MDIO_WAIT_TIMES * 100))
2612 - return 0;
2613 -
2614 - /* failed to disable; ensure it is enabled before returning */
2615 - emac_reg_update32(adpt->base + EMAC_MDIO_CTRL, 0, MDIO_AP_EN);
2616 -
2617 - return -EBUSY;
2618 -}
2619 -
2620 -/**
2621 - * emac_phy_mdio_autopoll_disable() - disable mdio autopoll
2622 - * @adpt: the emac adapter
2623 - *
2624 - * The EMAC has the ability to poll the external PHY on the MDIO
2625 - * bus for link state changes. This eliminates the need for the
2626 - * driver to poll the phy. If if the link state does change,
2627 - * the EMAC issues an interrupt on behalf of the PHY.
2628 - */
2629 -static void emac_phy_mdio_autopoll_enable(struct emac_adapter *adpt)
2630 -{
2631 - emac_reg_update32(adpt->base + EMAC_MDIO_CTRL, 0, MDIO_AP_EN);
2632 -}
2633 -
2634 static int emac_mdio_read(struct mii_bus *bus, int addr, int regnum)
2635 {
2636 struct emac_adapter *adpt = bus->priv;
2637 u32 reg;
2638 - int ret;
2639 -
2640 - ret = emac_phy_mdio_autopoll_disable(adpt);
2641 - if (ret)
2642 - return ret;
2643
2644 emac_reg_update32(adpt->base + EMAC_PHY_STS, PHY_ADDR_BMSK,
2645 (addr << PHY_ADDR_SHFT));
2646 @@ -122,24 +66,15 @@ static int emac_mdio_read(struct mii_bus *bus, int addr, int regnum)
2647 if (readl_poll_timeout(adpt->base + EMAC_MDIO_CTRL, reg,
2648 !(reg & (MDIO_START | MDIO_BUSY)),
2649 100, MDIO_WAIT_TIMES * 100))
2650 - ret = -EIO;
2651 - else
2652 - ret = (reg >> MDIO_DATA_SHFT) & MDIO_DATA_BMSK;
2653 + return -EIO;
2654
2655 - emac_phy_mdio_autopoll_enable(adpt);
2656 -
2657 - return ret;
2658 + return (reg >> MDIO_DATA_SHFT) & MDIO_DATA_BMSK;
2659 }
2660
2661 static int emac_mdio_write(struct mii_bus *bus, int addr, int regnum, u16 val)
2662 {
2663 struct emac_adapter *adpt = bus->priv;
2664 u32 reg;
2665 - int ret;
2666 -
2667 - ret = emac_phy_mdio_autopoll_disable(adpt);
2668 - if (ret)
2669 - return ret;
2670
2671 emac_reg_update32(adpt->base + EMAC_PHY_STS, PHY_ADDR_BMSK,
2672 (addr << PHY_ADDR_SHFT));
2673 @@ -155,11 +90,9 @@ static int emac_mdio_write(struct mii_bus *bus, int addr, int regnum, u16 val)
2674 if (readl_poll_timeout(adpt->base + EMAC_MDIO_CTRL, reg,
2675 !(reg & (MDIO_START | MDIO_BUSY)), 100,
2676 MDIO_WAIT_TIMES * 100))
2677 - ret = -EIO;
2678 + return -EIO;
2679
2680 - emac_phy_mdio_autopoll_enable(adpt);
2681 -
2682 - return ret;
2683 + return 0;
2684 }
2685
2686 /* Configure the MDIO bus and connect the external PHY */
2687 diff --git a/drivers/net/ethernet/qualcomm/emac/emac.c b/drivers/net/ethernet/qualcomm/emac/emac.c
2688 index 28a8cdc36485..98a326faea29 100644
2689 --- a/drivers/net/ethernet/qualcomm/emac/emac.c
2690 +++ b/drivers/net/ethernet/qualcomm/emac/emac.c
2691 @@ -50,19 +50,7 @@
2692 #define DMAR_DLY_CNT_DEF 15
2693 #define DMAW_DLY_CNT_DEF 4
2694
2695 -#define IMR_NORMAL_MASK (\
2696 - ISR_ERROR |\
2697 - ISR_GPHY_LINK |\
2698 - ISR_TX_PKT |\
2699 - GPHY_WAKEUP_INT)
2700 -
2701 -#define IMR_EXTENDED_MASK (\
2702 - SW_MAN_INT |\
2703 - ISR_OVER |\
2704 - ISR_ERROR |\
2705 - ISR_GPHY_LINK |\
2706 - ISR_TX_PKT |\
2707 - GPHY_WAKEUP_INT)
2708 +#define IMR_NORMAL_MASK (ISR_ERROR | ISR_OVER | ISR_TX_PKT)
2709
2710 #define ISR_TX_PKT (\
2711 TX_PKT_INT |\
2712 @@ -70,10 +58,6 @@
2713 TX_PKT_INT2 |\
2714 TX_PKT_INT3)
2715
2716 -#define ISR_GPHY_LINK (\
2717 - GPHY_LINK_UP_INT |\
2718 - GPHY_LINK_DOWN_INT)
2719 -
2720 #define ISR_OVER (\
2721 RFD0_UR_INT |\
2722 RFD1_UR_INT |\
2723 @@ -187,10 +171,6 @@ irqreturn_t emac_isr(int _irq, void *data)
2724 if (status & ISR_OVER)
2725 net_warn_ratelimited("warning: TX/RX overflow\n");
2726
2727 - /* link event */
2728 - if (status & ISR_GPHY_LINK)
2729 - phy_mac_interrupt(adpt->phydev, !!(status & GPHY_LINK_UP_INT));
2730 -
2731 exit:
2732 /* enable the interrupt */
2733 writel(irq->mask, adpt->base + EMAC_INT_MASK);
2734 diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
2735 index 3cd7989c007d..784782da3a85 100644
2736 --- a/drivers/net/ethernet/renesas/ravb_main.c
2737 +++ b/drivers/net/ethernet/renesas/ravb_main.c
2738 @@ -230,18 +230,6 @@ static void ravb_ring_free(struct net_device *ndev, int q)
2739 int ring_size;
2740 int i;
2741
2742 - /* Free RX skb ringbuffer */
2743 - if (priv->rx_skb[q]) {
2744 - for (i = 0; i < priv->num_rx_ring[q]; i++)
2745 - dev_kfree_skb(priv->rx_skb[q][i]);
2746 - }
2747 - kfree(priv->rx_skb[q]);
2748 - priv->rx_skb[q] = NULL;
2749 -
2750 - /* Free aligned TX buffers */
2751 - kfree(priv->tx_align[q]);
2752 - priv->tx_align[q] = NULL;
2753 -
2754 if (priv->rx_ring[q]) {
2755 for (i = 0; i < priv->num_rx_ring[q]; i++) {
2756 struct ravb_ex_rx_desc *desc = &priv->rx_ring[q][i];
2757 @@ -270,6 +258,18 @@ static void ravb_ring_free(struct net_device *ndev, int q)
2758 priv->tx_ring[q] = NULL;
2759 }
2760
2761 + /* Free RX skb ringbuffer */
2762 + if (priv->rx_skb[q]) {
2763 + for (i = 0; i < priv->num_rx_ring[q]; i++)
2764 + dev_kfree_skb(priv->rx_skb[q][i]);
2765 + }
2766 + kfree(priv->rx_skb[q]);
2767 + priv->rx_skb[q] = NULL;
2768 +
2769 + /* Free aligned TX buffers */
2770 + kfree(priv->tx_align[q]);
2771 + priv->tx_align[q] = NULL;
2772 +
2773 /* Free TX skb ringbuffer.
2774 * SKBs are freed by ravb_tx_free() call above.
2775 */
2776 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
2777 index 4498a3861aa3..67e86ace5d92 100644
2778 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
2779 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
2780 @@ -1950,7 +1950,7 @@ static void stmmac_tso_allocator(struct stmmac_priv *priv, unsigned int des,
2781
2782 priv->hw->desc->prepare_tso_tx_desc(desc, 0, buff_size,
2783 0, 1,
2784 - (last_segment) && (buff_size < TSO_MAX_BUFF_SIZE),
2785 + (last_segment) && (tmp_len <= TSO_MAX_BUFF_SIZE),
2786 0, 0);
2787
2788 tmp_len -= TSO_MAX_BUFF_SIZE;
2789 diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
2790 index 959fd12d2e67..6ebb0f559a42 100644
2791 --- a/drivers/net/geneve.c
2792 +++ b/drivers/net/geneve.c
2793 @@ -1133,7 +1133,7 @@ static int geneve_configure(struct net *net, struct net_device *dev,
2794
2795 /* make enough headroom for basic scenario */
2796 encap_len = GENEVE_BASE_HLEN + ETH_HLEN;
2797 - if (ip_tunnel_info_af(info) == AF_INET) {
2798 + if (!metadata && ip_tunnel_info_af(info) == AF_INET) {
2799 encap_len += sizeof(struct iphdr);
2800 dev->max_mtu -= sizeof(struct iphdr);
2801 } else {
2802 diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
2803 index bdb6ae16d4a8..70dbd5a48b6b 100644
2804 --- a/drivers/net/vxlan.c
2805 +++ b/drivers/net/vxlan.c
2806 @@ -59,6 +59,8 @@ static const u8 all_zeros_mac[ETH_ALEN + 2];
2807
2808 static int vxlan_sock_add(struct vxlan_dev *vxlan);
2809
2810 +static void vxlan_vs_del_dev(struct vxlan_dev *vxlan);
2811 +
2812 /* per-network namespace private data for this module */
2813 struct vxlan_net {
2814 struct list_head vxlan_list;
2815 @@ -740,6 +742,22 @@ static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f)
2816 call_rcu(&f->rcu, vxlan_fdb_free);
2817 }
2818
2819 +static void vxlan_dst_free(struct rcu_head *head)
2820 +{
2821 + struct vxlan_rdst *rd = container_of(head, struct vxlan_rdst, rcu);
2822 +
2823 + dst_cache_destroy(&rd->dst_cache);
2824 + kfree(rd);
2825 +}
2826 +
2827 +static void vxlan_fdb_dst_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f,
2828 + struct vxlan_rdst *rd)
2829 +{
2830 + list_del_rcu(&rd->list);
2831 + vxlan_fdb_notify(vxlan, f, rd, RTM_DELNEIGH);
2832 + call_rcu(&rd->rcu, vxlan_dst_free);
2833 +}
2834 +
2835 static int vxlan_fdb_parse(struct nlattr *tb[], struct vxlan_dev *vxlan,
2836 union vxlan_addr *ip, __be16 *port, __be32 *src_vni,
2837 __be32 *vni, u32 *ifindex)
2838 @@ -864,9 +882,7 @@ static int __vxlan_fdb_delete(struct vxlan_dev *vxlan,
2839 * otherwise destroy the fdb entry
2840 */
2841 if (rd && !list_is_singular(&f->remotes)) {
2842 - list_del_rcu(&rd->list);
2843 - vxlan_fdb_notify(vxlan, f, rd, RTM_DELNEIGH);
2844 - kfree_rcu(rd, rcu);
2845 + vxlan_fdb_dst_destroy(vxlan, f, rd);
2846 goto out;
2847 }
2848
2849 @@ -1067,6 +1083,8 @@ static void vxlan_sock_release(struct vxlan_dev *vxlan)
2850 rcu_assign_pointer(vxlan->vn4_sock, NULL);
2851 synchronize_net();
2852
2853 + vxlan_vs_del_dev(vxlan);
2854 +
2855 if (__vxlan_sock_release_prep(sock4)) {
2856 udp_tunnel_sock_release(sock4->sock);
2857 kfree(sock4);
2858 @@ -2338,6 +2356,15 @@ static void vxlan_cleanup(unsigned long arg)
2859 mod_timer(&vxlan->age_timer, next_timer);
2860 }
2861
2862 +static void vxlan_vs_del_dev(struct vxlan_dev *vxlan)
2863 +{
2864 + struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id);
2865 +
2866 + spin_lock(&vn->sock_lock);
2867 + hlist_del_init_rcu(&vxlan->hlist);
2868 + spin_unlock(&vn->sock_lock);
2869 +}
2870 +
2871 static void vxlan_vs_add_dev(struct vxlan_sock *vs, struct vxlan_dev *vxlan)
2872 {
2873 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id);
2874 @@ -3275,15 +3302,9 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[],
2875 static void vxlan_dellink(struct net_device *dev, struct list_head *head)
2876 {
2877 struct vxlan_dev *vxlan = netdev_priv(dev);
2878 - struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id);
2879
2880 vxlan_flush(vxlan, true);
2881
2882 - spin_lock(&vn->sock_lock);
2883 - if (!hlist_unhashed(&vxlan->hlist))
2884 - hlist_del_rcu(&vxlan->hlist);
2885 - spin_unlock(&vn->sock_lock);
2886 -
2887 gro_cells_destroy(&vxlan->gro_cells);
2888 list_del(&vxlan->next);
2889 unregister_netdevice_queue(dev, head);
2890 diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c
2891 index 9ff790174906..1d09097dec88 100644
2892 --- a/drivers/pinctrl/intel/pinctrl-cherryview.c
2893 +++ b/drivers/pinctrl/intel/pinctrl-cherryview.c
2894 @@ -1542,7 +1542,8 @@ static const struct dmi_system_id chv_no_valid_mask[] = {
2895 DMI_MATCH(DMI_PRODUCT_NAME, "Edgar"),
2896 DMI_MATCH(DMI_BIOS_DATE, "05/21/2016"),
2897 },
2898 - }
2899 + },
2900 + {}
2901 };
2902
2903 static int chv_gpio_probe(struct chv_pinctrl *pctrl, int irq)
2904 diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c
2905 index 84c9098cc089..aea10682e0fc 100644
2906 --- a/drivers/scsi/qla2xxx/qla_bsg.c
2907 +++ b/drivers/scsi/qla2xxx/qla_bsg.c
2908 @@ -730,6 +730,8 @@ qla2x00_process_loopback(struct bsg_job *bsg_job)
2909 return -EIO;
2910 }
2911
2912 + memset(&elreq, 0, sizeof(elreq));
2913 +
2914 elreq.req_sg_cnt = dma_map_sg(&ha->pdev->dev,
2915 bsg_job->request_payload.sg_list, bsg_job->request_payload.sg_cnt,
2916 DMA_TO_DEVICE);
2917 @@ -795,10 +797,9 @@ qla2x00_process_loopback(struct bsg_job *bsg_job)
2918
2919 if (atomic_read(&vha->loop_state) == LOOP_READY &&
2920 (ha->current_topology == ISP_CFG_F ||
2921 - ((IS_QLA81XX(ha) || IS_QLA8031(ha) || IS_QLA8044(ha)) &&
2922 - le32_to_cpu(*(uint32_t *)req_data) == ELS_OPCODE_BYTE
2923 - && req_data_len == MAX_ELS_FRAME_PAYLOAD)) &&
2924 - elreq.options == EXTERNAL_LOOPBACK) {
2925 + (le32_to_cpu(*(uint32_t *)req_data) == ELS_OPCODE_BYTE &&
2926 + req_data_len == MAX_ELS_FRAME_PAYLOAD)) &&
2927 + elreq.options == EXTERNAL_LOOPBACK) {
2928 type = "FC_BSG_HST_VENDOR_ECHO_DIAG";
2929 ql_dbg(ql_dbg_user, vha, 0x701e,
2930 "BSG request type: %s.\n", type);
2931 diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
2932 index 51b4179469d1..88748a6ab73f 100644
2933 --- a/drivers/scsi/qla2xxx/qla_dbg.c
2934 +++ b/drivers/scsi/qla2xxx/qla_dbg.c
2935 @@ -1131,7 +1131,7 @@ qla24xx_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
2936
2937 /* Mailbox registers. */
2938 mbx_reg = &reg->mailbox0;
2939 - for (cnt = 0; cnt < sizeof(fw->mailbox_reg) / 2; cnt++, dmp_reg++)
2940 + for (cnt = 0; cnt < sizeof(fw->mailbox_reg) / 2; cnt++, mbx_reg++)
2941 fw->mailbox_reg[cnt] = htons(RD_REG_WORD(mbx_reg));
2942
2943 /* Transfer sequence registers. */
2944 @@ -2090,7 +2090,7 @@ qla83xx_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
2945
2946 /* Mailbox registers. */
2947 mbx_reg = &reg->mailbox0;
2948 - for (cnt = 0; cnt < sizeof(fw->mailbox_reg) / 2; cnt++, dmp_reg++)
2949 + for (cnt = 0; cnt < sizeof(fw->mailbox_reg) / 2; cnt++, mbx_reg++)
2950 fw->mailbox_reg[cnt] = htons(RD_REG_WORD(mbx_reg));
2951
2952 /* Transfer sequence registers. */
2953 diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
2954 index ae119018dfaa..eddbc1218a39 100644
2955 --- a/drivers/scsi/qla2xxx/qla_def.h
2956 +++ b/drivers/scsi/qla2xxx/qla_def.h
2957 @@ -3425,6 +3425,7 @@ struct qla_hw_data {
2958 uint8_t max_req_queues;
2959 uint8_t max_rsp_queues;
2960 uint8_t max_qpairs;
2961 + uint8_t num_qpairs;
2962 struct qla_qpair *base_qpair;
2963 struct qla_npiv_entry *npiv_info;
2964 uint16_t nvram_npiv_size;
2965 diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
2966 index f9d2fe7b1ade..98a2ca4fe03c 100644
2967 --- a/drivers/scsi/qla2xxx/qla_init.c
2968 +++ b/drivers/scsi/qla2xxx/qla_init.c
2969 @@ -7543,12 +7543,13 @@ struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos, int v
2970 /* Assign available que pair id */
2971 mutex_lock(&ha->mq_lock);
2972 qpair_id = find_first_zero_bit(ha->qpair_qid_map, ha->max_qpairs);
2973 - if (qpair_id >= ha->max_qpairs) {
2974 + if (ha->num_qpairs >= ha->max_qpairs) {
2975 mutex_unlock(&ha->mq_lock);
2976 ql_log(ql_log_warn, vha, 0x0183,
2977 "No resources to create additional q pair.\n");
2978 goto fail_qid_map;
2979 }
2980 + ha->num_qpairs++;
2981 set_bit(qpair_id, ha->qpair_qid_map);
2982 ha->queue_pair_map[qpair_id] = qpair;
2983 qpair->id = qpair_id;
2984 @@ -7635,6 +7636,7 @@ struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos, int v
2985 fail_msix:
2986 ha->queue_pair_map[qpair_id] = NULL;
2987 clear_bit(qpair_id, ha->qpair_qid_map);
2988 + ha->num_qpairs--;
2989 mutex_unlock(&ha->mq_lock);
2990 fail_qid_map:
2991 kfree(qpair);
2992 @@ -7660,6 +7662,7 @@ int qla2xxx_delete_qpair(struct scsi_qla_host *vha, struct qla_qpair *qpair)
2993 mutex_lock(&ha->mq_lock);
2994 ha->queue_pair_map[qpair->id] = NULL;
2995 clear_bit(qpair->id, ha->qpair_qid_map);
2996 + ha->num_qpairs--;
2997 list_del(&qpair->qp_list_elem);
2998 if (list_empty(&vha->qp_list))
2999 vha->flags.qpairs_available = 0;
3000 diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
3001 index 3203367a4f42..189f72d5aa4f 100644
3002 --- a/drivers/scsi/qla2xxx/qla_isr.c
3003 +++ b/drivers/scsi/qla2xxx/qla_isr.c
3004 @@ -3282,7 +3282,7 @@ qla24xx_enable_msix(struct qla_hw_data *ha, struct rsp_que *rsp)
3005 }
3006
3007 /* Enable MSI-X vector for response queue update for queue 0 */
3008 - if (IS_QLA83XX(ha) || IS_QLA27XX(ha)) {
3009 + if (IS_QLA25XX(ha) || IS_QLA83XX(ha) || IS_QLA27XX(ha)) {
3010 if (ha->msixbase && ha->mqiobase &&
3011 (ha->max_rsp_queues > 1 || ha->max_req_queues > 1 ||
3012 ql2xmqsupport))
3013 diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
3014 index a113ab3592a7..cba1fc5e8be9 100644
3015 --- a/drivers/scsi/qla2xxx/qla_mbx.c
3016 +++ b/drivers/scsi/qla2xxx/qla_mbx.c
3017 @@ -3676,15 +3676,6 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
3018 qlt_update_host_map(vha, id);
3019 }
3020
3021 - fc_host_port_name(vha->host) =
3022 - wwn_to_u64(vha->port_name);
3023 -
3024 - if (qla_ini_mode_enabled(vha))
3025 - ql_dbg(ql_dbg_mbx, vha, 0x1018,
3026 - "FA-WWN portname %016llx (%x)\n",
3027 - fc_host_port_name(vha->host),
3028 - rptid_entry->vp_status);
3029 -
3030 set_bit(REGISTER_FC4_NEEDED, &vha->dpc_flags);
3031 set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags);
3032 } else {
3033 @@ -4821,9 +4812,9 @@ qla2x00_echo_test(scsi_qla_host_t *vha, struct msg_echo_lb *mreq,
3034
3035 memset(mcp->mb, 0 , sizeof(mcp->mb));
3036 mcp->mb[0] = MBC_DIAGNOSTIC_ECHO;
3037 - mcp->mb[1] = mreq->options | BIT_6; /* BIT_6 specifies 64bit address */
3038 + /* BIT_6 specifies 64bit address */
3039 + mcp->mb[1] = mreq->options | BIT_15 | BIT_6;
3040 if (IS_CNA_CAPABLE(ha)) {
3041 - mcp->mb[1] |= BIT_15;
3042 mcp->mb[2] = vha->fcoe_fcf_idx;
3043 }
3044 mcp->mb[16] = LSW(mreq->rcv_dma);
3045 diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
3046 index 83d61d2142e9..190f609317af 100644
3047 --- a/drivers/scsi/qla2xxx/qla_os.c
3048 +++ b/drivers/scsi/qla2xxx/qla_os.c
3049 @@ -2626,10 +2626,10 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
3050
3051 if (mem_only) {
3052 if (pci_enable_device_mem(pdev))
3053 - goto probe_out;
3054 + return ret;
3055 } else {
3056 if (pci_enable_device(pdev))
3057 - goto probe_out;
3058 + return ret;
3059 }
3060
3061 /* This may fail but that's ok */
3062 @@ -2639,7 +2639,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
3063 if (!ha) {
3064 ql_log_pci(ql_log_fatal, pdev, 0x0009,
3065 "Unable to allocate memory for ha.\n");
3066 - goto probe_out;
3067 + goto disable_device;
3068 }
3069 ql_dbg_pci(ql_dbg_init, pdev, 0x000a,
3070 "Memory allocated for ha=%p.\n", ha);
3071 @@ -3258,7 +3258,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
3072 kfree(ha);
3073 ha = NULL;
3074
3075 -probe_out:
3076 +disable_device:
3077 pci_disable_device(pdev);
3078 return ret;
3079 }
3080 diff --git a/drivers/scsi/qla2xxx/qla_tmpl.c b/drivers/scsi/qla2xxx/qla_tmpl.c
3081 index 8a58ef3adab4..c197972a3e2d 100644
3082 --- a/drivers/scsi/qla2xxx/qla_tmpl.c
3083 +++ b/drivers/scsi/qla2xxx/qla_tmpl.c
3084 @@ -371,7 +371,7 @@ qla27xx_fwdt_entry_t262(struct scsi_qla_host *vha,
3085 goto done;
3086 }
3087
3088 - if (end <= start || start == 0 || end == 0) {
3089 + if (end < start || start == 0 || end == 0) {
3090 ql_dbg(ql_dbg_misc, vha, 0xd023,
3091 "%s: unusable range (start=%x end=%x)\n", __func__,
3092 ent->t262.end_addr, ent->t262.start_addr);
3093 diff --git a/drivers/staging/lustre/lustre/lov/lov_pack.c b/drivers/staging/lustre/lustre/lov/lov_pack.c
3094 index 2e1bd47337fd..e6727cefde05 100644
3095 --- a/drivers/staging/lustre/lustre/lov/lov_pack.c
3096 +++ b/drivers/staging/lustre/lustre/lov/lov_pack.c
3097 @@ -293,18 +293,10 @@ int lov_getstripe(struct lov_object *obj, struct lov_stripe_md *lsm,
3098 size_t lmmk_size;
3099 size_t lum_size;
3100 int rc;
3101 - mm_segment_t seg;
3102
3103 if (!lsm)
3104 return -ENODATA;
3105
3106 - /*
3107 - * "Switch to kernel segment" to allow copying from kernel space by
3108 - * copy_{to,from}_user().
3109 - */
3110 - seg = get_fs();
3111 - set_fs(KERNEL_DS);
3112 -
3113 if (lsm->lsm_magic != LOV_MAGIC_V1 && lsm->lsm_magic != LOV_MAGIC_V3) {
3114 CERROR("bad LSM MAGIC: 0x%08X != 0x%08X nor 0x%08X\n",
3115 lsm->lsm_magic, LOV_MAGIC_V1, LOV_MAGIC_V3);
3116 @@ -406,6 +398,5 @@ int lov_getstripe(struct lov_object *obj, struct lov_stripe_md *lsm,
3117 out_free:
3118 kvfree(lmmk);
3119 out:
3120 - set_fs(seg);
3121 return rc;
3122 }
3123 diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
3124 index a0cd56ee5fe9..ff26626d94ef 100644
3125 --- a/drivers/target/target_core_transport.c
3126 +++ b/drivers/target/target_core_transport.c
3127 @@ -1160,15 +1160,28 @@ target_cmd_size_check(struct se_cmd *cmd, unsigned int size)
3128 if (cmd->unknown_data_length) {
3129 cmd->data_length = size;
3130 } else if (size != cmd->data_length) {
3131 - pr_warn("TARGET_CORE[%s]: Expected Transfer Length:"
3132 + pr_warn_ratelimited("TARGET_CORE[%s]: Expected Transfer Length:"
3133 " %u does not match SCSI CDB Length: %u for SAM Opcode:"
3134 " 0x%02x\n", cmd->se_tfo->get_fabric_name(),
3135 cmd->data_length, size, cmd->t_task_cdb[0]);
3136
3137 - if (cmd->data_direction == DMA_TO_DEVICE &&
3138 - cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) {
3139 - pr_err("Rejecting underflow/overflow WRITE data\n");
3140 - return TCM_INVALID_CDB_FIELD;
3141 + if (cmd->data_direction == DMA_TO_DEVICE) {
3142 + if (cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) {
3143 + pr_err_ratelimited("Rejecting underflow/overflow"
3144 + " for WRITE data CDB\n");
3145 + return TCM_INVALID_CDB_FIELD;
3146 + }
3147 + /*
3148 + * Some fabric drivers like iscsi-target still expect to
3149 + * always reject overflow writes. Reject this case until
3150 + * full fabric driver level support for overflow writes
3151 + * is introduced tree-wide.
3152 + */
3153 + if (size > cmd->data_length) {
3154 + pr_err_ratelimited("Rejecting overflow for"
3155 + " WRITE control CDB\n");
3156 + return TCM_INVALID_CDB_FIELD;
3157 + }
3158 }
3159 /*
3160 * Reject READ_* or WRITE_* with overflow/underflow for
3161 diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
3162 index 4c26d15ad7d9..579706d36f5c 100644
3163 --- a/drivers/tty/serial/8250/8250_port.c
3164 +++ b/drivers/tty/serial/8250/8250_port.c
3165 @@ -47,6 +47,7 @@
3166 /*
3167 * These are definitions for the Exar XR17V35X and XR17(C|D)15X
3168 */
3169 +#define UART_EXAR_INT0 0x80
3170 #define UART_EXAR_SLEEP 0x8b /* Sleep mode */
3171 #define UART_EXAR_DVID 0x8d /* Device identification */
3172
3173 @@ -1869,17 +1870,13 @@ static int serial8250_default_handle_irq(struct uart_port *port)
3174 static int exar_handle_irq(struct uart_port *port)
3175 {
3176 unsigned int iir = serial_port_in(port, UART_IIR);
3177 - int ret;
3178 + int ret = 0;
3179
3180 - ret = serial8250_handle_irq(port, iir);
3181 + if (((port->type == PORT_XR17V35X) || (port->type == PORT_XR17D15X)) &&
3182 + serial_port_in(port, UART_EXAR_INT0) != 0)
3183 + ret = 1;
3184
3185 - if ((port->type == PORT_XR17V35X) ||
3186 - (port->type == PORT_XR17D15X)) {
3187 - serial_port_in(port, 0x80);
3188 - serial_port_in(port, 0x81);
3189 - serial_port_in(port, 0x82);
3190 - serial_port_in(port, 0x83);
3191 - }
3192 + ret |= serial8250_handle_irq(port, iir);
3193
3194 return ret;
3195 }
3196 @@ -2177,6 +2174,8 @@ int serial8250_do_startup(struct uart_port *port)
3197 serial_port_in(port, UART_RX);
3198 serial_port_in(port, UART_IIR);
3199 serial_port_in(port, UART_MSR);
3200 + if ((port->type == PORT_XR17V35X) || (port->type == PORT_XR17D15X))
3201 + serial_port_in(port, UART_EXAR_INT0);
3202
3203 /*
3204 * At this point, there's no way the LSR could still be 0xff;
3205 @@ -2335,6 +2334,8 @@ int serial8250_do_startup(struct uart_port *port)
3206 serial_port_in(port, UART_RX);
3207 serial_port_in(port, UART_IIR);
3208 serial_port_in(port, UART_MSR);
3209 + if ((port->type == PORT_XR17V35X) || (port->type == PORT_XR17D15X))
3210 + serial_port_in(port, UART_EXAR_INT0);
3211 up->lsr_saved_flags = 0;
3212 up->msr_saved_flags = 0;
3213
3214 diff --git a/drivers/tty/serial/ifx6x60.c b/drivers/tty/serial/ifx6x60.c
3215 index 157883653256..f190a84a0246 100644
3216 --- a/drivers/tty/serial/ifx6x60.c
3217 +++ b/drivers/tty/serial/ifx6x60.c
3218 @@ -1382,9 +1382,9 @@ static struct spi_driver ifx_spi_driver = {
3219 static void __exit ifx_spi_exit(void)
3220 {
3221 /* unregister */
3222 + spi_unregister_driver(&ifx_spi_driver);
3223 tty_unregister_driver(tty_drv);
3224 put_tty_driver(tty_drv);
3225 - spi_unregister_driver(&ifx_spi_driver);
3226 unregister_reboot_notifier(&ifx_modem_reboot_notifier_block);
3227 }
3228
3229 diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
3230 index 3fe56894974a..7f9139445f2a 100644
3231 --- a/drivers/tty/serial/serial_core.c
3232 +++ b/drivers/tty/serial/serial_core.c
3233 @@ -2083,7 +2083,7 @@ int uart_suspend_port(struct uart_driver *drv, struct uart_port *uport)
3234 mutex_lock(&port->mutex);
3235
3236 tty_dev = device_find_child(uport->dev, &match, serial_match_port);
3237 - if (device_may_wakeup(tty_dev)) {
3238 + if (tty_dev && device_may_wakeup(tty_dev)) {
3239 if (!enable_irq_wake(uport->irq))
3240 uport->irq_wake = 1;
3241 put_device(tty_dev);
3242 diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
3243 index 9a47cc4f16a2..1df57461ece4 100644
3244 --- a/drivers/tty/serial/sh-sci.c
3245 +++ b/drivers/tty/serial/sh-sci.c
3246 @@ -1985,11 +1985,13 @@ static int sci_startup(struct uart_port *port)
3247
3248 dev_dbg(port->dev, "%s(%d)\n", __func__, port->line);
3249
3250 + sci_request_dma(port);
3251 +
3252 ret = sci_request_irq(s);
3253 - if (unlikely(ret < 0))
3254 + if (unlikely(ret < 0)) {
3255 + sci_free_dma(port);
3256 return ret;
3257 -
3258 - sci_request_dma(port);
3259 + }
3260
3261 return 0;
3262 }
3263 @@ -2021,8 +2023,8 @@ static void sci_shutdown(struct uart_port *port)
3264 }
3265 #endif
3266
3267 - sci_free_dma(port);
3268 sci_free_irq(s);
3269 + sci_free_dma(port);
3270 }
3271
3272 static int sci_sck_calc(struct sci_port *s, unsigned int bps,
3273 diff --git a/drivers/usb/chipidea/debug.c b/drivers/usb/chipidea/debug.c
3274 index 6d23eede4d8c..1c31e8a08810 100644
3275 --- a/drivers/usb/chipidea/debug.c
3276 +++ b/drivers/usb/chipidea/debug.c
3277 @@ -294,7 +294,8 @@ static int ci_role_show(struct seq_file *s, void *data)
3278 {
3279 struct ci_hdrc *ci = s->private;
3280
3281 - seq_printf(s, "%s\n", ci_role(ci)->name);
3282 + if (ci->role != CI_ROLE_END)
3283 + seq_printf(s, "%s\n", ci_role(ci)->name);
3284
3285 return 0;
3286 }
3287 diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
3288 index f88e9157fad0..60a786c87c06 100644
3289 --- a/drivers/usb/chipidea/udc.c
3290 +++ b/drivers/usb/chipidea/udc.c
3291 @@ -1984,6 +1984,7 @@ static void udc_id_switch_for_host(struct ci_hdrc *ci)
3292 int ci_hdrc_gadget_init(struct ci_hdrc *ci)
3293 {
3294 struct ci_role_driver *rdrv;
3295 + int ret;
3296
3297 if (!hw_read(ci, CAP_DCCPARAMS, DCCPARAMS_DC))
3298 return -ENXIO;
3299 @@ -1996,7 +1997,10 @@ int ci_hdrc_gadget_init(struct ci_hdrc *ci)
3300 rdrv->stop = udc_id_switch_for_host;
3301 rdrv->irq = udc_irq;
3302 rdrv->name = "gadget";
3303 - ci->roles[CI_ROLE_GADGET] = rdrv;
3304
3305 - return udc_start(ci);
3306 + ret = udc_start(ci);
3307 + if (!ret)
3308 + ci->roles[CI_ROLE_GADGET] = rdrv;
3309 +
3310 + return ret;
3311 }
3312 diff --git a/drivers/usb/chipidea/usbmisc_imx.c b/drivers/usb/chipidea/usbmisc_imx.c
3313 index e77a4ed4f021..9f4a0185dd60 100644
3314 --- a/drivers/usb/chipidea/usbmisc_imx.c
3315 +++ b/drivers/usb/chipidea/usbmisc_imx.c
3316 @@ -108,6 +108,8 @@ struct imx_usbmisc {
3317 const struct usbmisc_ops *ops;
3318 };
3319
3320 +static inline bool is_imx53_usbmisc(struct imx_usbmisc_data *data);
3321 +
3322 static int usbmisc_imx25_init(struct imx_usbmisc_data *data)
3323 {
3324 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
3325 @@ -242,10 +244,15 @@ static int usbmisc_imx53_init(struct imx_usbmisc_data *data)
3326 val = readl(reg) | MX53_USB_UHx_CTRL_WAKE_UP_EN
3327 | MX53_USB_UHx_CTRL_ULPI_INT_EN;
3328 writel(val, reg);
3329 - /* Disable internal 60Mhz clock */
3330 - reg = usbmisc->base + MX53_USB_CLKONOFF_CTRL_OFFSET;
3331 - val = readl(reg) | MX53_USB_CLKONOFF_CTRL_H2_INT60CKOFF;
3332 - writel(val, reg);
3333 + if (is_imx53_usbmisc(data)) {
3334 + /* Disable internal 60Mhz clock */
3335 + reg = usbmisc->base +
3336 + MX53_USB_CLKONOFF_CTRL_OFFSET;
3337 + val = readl(reg) |
3338 + MX53_USB_CLKONOFF_CTRL_H2_INT60CKOFF;
3339 + writel(val, reg);
3340 + }
3341 +
3342 }
3343 if (data->disable_oc) {
3344 reg = usbmisc->base + MX53_USB_UH2_CTRL_OFFSET;
3345 @@ -267,10 +274,15 @@ static int usbmisc_imx53_init(struct imx_usbmisc_data *data)
3346 val = readl(reg) | MX53_USB_UHx_CTRL_WAKE_UP_EN
3347 | MX53_USB_UHx_CTRL_ULPI_INT_EN;
3348 writel(val, reg);
3349 - /* Disable internal 60Mhz clock */
3350 - reg = usbmisc->base + MX53_USB_CLKONOFF_CTRL_OFFSET;
3351 - val = readl(reg) | MX53_USB_CLKONOFF_CTRL_H3_INT60CKOFF;
3352 - writel(val, reg);
3353 +
3354 + if (is_imx53_usbmisc(data)) {
3355 + /* Disable internal 60Mhz clock */
3356 + reg = usbmisc->base +
3357 + MX53_USB_CLKONOFF_CTRL_OFFSET;
3358 + val = readl(reg) |
3359 + MX53_USB_CLKONOFF_CTRL_H3_INT60CKOFF;
3360 + writel(val, reg);
3361 + }
3362 }
3363 if (data->disable_oc) {
3364 reg = usbmisc->base + MX53_USB_UH3_CTRL_OFFSET;
3365 @@ -456,6 +468,10 @@ static const struct usbmisc_ops imx27_usbmisc_ops = {
3366 .init = usbmisc_imx27_init,
3367 };
3368
3369 +static const struct usbmisc_ops imx51_usbmisc_ops = {
3370 + .init = usbmisc_imx53_init,
3371 +};
3372 +
3373 static const struct usbmisc_ops imx53_usbmisc_ops = {
3374 .init = usbmisc_imx53_init,
3375 };
3376 @@ -479,6 +495,13 @@ static const struct usbmisc_ops imx7d_usbmisc_ops = {
3377 .set_wakeup = usbmisc_imx7d_set_wakeup,
3378 };
3379
3380 +static inline bool is_imx53_usbmisc(struct imx_usbmisc_data *data)
3381 +{
3382 + struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
3383 +
3384 + return usbmisc->ops == &imx53_usbmisc_ops;
3385 +}
3386 +
3387 int imx_usbmisc_init(struct imx_usbmisc_data *data)
3388 {
3389 struct imx_usbmisc *usbmisc;
3390 @@ -536,7 +559,7 @@ static const struct of_device_id usbmisc_imx_dt_ids[] = {
3391 },
3392 {
3393 .compatible = "fsl,imx51-usbmisc",
3394 - .data = &imx53_usbmisc_ops,
3395 + .data = &imx51_usbmisc_ops,
3396 },
3397 {
3398 .compatible = "fsl,imx53-usbmisc",
3399 diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c
3400 index 4c8aacc232c0..74d57d6994da 100644
3401 --- a/drivers/usb/gadget/function/f_mass_storage.c
3402 +++ b/drivers/usb/gadget/function/f_mass_storage.c
3403 @@ -396,7 +396,11 @@ static int fsg_set_halt(struct fsg_dev *fsg, struct usb_ep *ep)
3404 /* Caller must hold fsg->lock */
3405 static void wakeup_thread(struct fsg_common *common)
3406 {
3407 - smp_wmb(); /* ensure the write of bh->state is complete */
3408 + /*
3409 + * Ensure the reading of thread_wakeup_needed
3410 + * and the writing of bh->state are completed
3411 + */
3412 + smp_mb();
3413 /* Tell the main thread that something has happened */
3414 common->thread_wakeup_needed = 1;
3415 if (common->thread_task)
3416 @@ -627,7 +631,12 @@ static int sleep_thread(struct fsg_common *common, bool can_freeze)
3417 }
3418 __set_current_state(TASK_RUNNING);
3419 common->thread_wakeup_needed = 0;
3420 - smp_rmb(); /* ensure the latest bh->state is visible */
3421 +
3422 + /*
3423 + * Ensure the writing of thread_wakeup_needed
3424 + * and the reading of bh->state are completed
3425 + */
3426 + smp_mb();
3427 return rc;
3428 }
3429
3430 diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
3431 index 9c7ee26ef388..bc6a9be2ccc5 100644
3432 --- a/drivers/usb/musb/musb_dsps.c
3433 +++ b/drivers/usb/musb/musb_dsps.c
3434 @@ -245,6 +245,11 @@ static int dsps_check_status(struct musb *musb, void *unused)
3435 dsps_mod_timer_optional(glue);
3436 break;
3437 case OTG_STATE_A_WAIT_BCON:
3438 + /* keep VBUS on for host-only mode */
3439 + if (musb->port_mode == MUSB_PORT_MODE_HOST) {
3440 + dsps_mod_timer_optional(glue);
3441 + break;
3442 + }
3443 musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
3444 skip_session = 1;
3445 /* fall */
3446 diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c
3447 index 7a92a5e1d40c..feca75b07fdd 100644
3448 --- a/drivers/xen/privcmd.c
3449 +++ b/drivers/xen/privcmd.c
3450 @@ -362,8 +362,8 @@ static int mmap_batch_fn(void *data, int nr, void *state)
3451 st->global_error = 1;
3452 }
3453 }
3454 - st->va += PAGE_SIZE * nr;
3455 - st->index += nr;
3456 + st->va += XEN_PAGE_SIZE * nr;
3457 + st->index += nr / XEN_PFN_PER_PAGE;
3458
3459 return 0;
3460 }
3461 diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
3462 index c4115901d906..7a945a1f076b 100644
3463 --- a/fs/btrfs/ctree.h
3464 +++ b/fs/btrfs/ctree.h
3465 @@ -2547,7 +2547,7 @@ u64 btrfs_csum_bytes_to_leaves(struct btrfs_fs_info *fs_info, u64 csum_bytes);
3466 static inline u64 btrfs_calc_trans_metadata_size(struct btrfs_fs_info *fs_info,
3467 unsigned num_items)
3468 {
3469 - return fs_info->nodesize * BTRFS_MAX_LEVEL * 2 * num_items;
3470 + return (u64)fs_info->nodesize * BTRFS_MAX_LEVEL * 2 * num_items;
3471 }
3472
3473 /*
3474 @@ -2557,7 +2557,7 @@ static inline u64 btrfs_calc_trans_metadata_size(struct btrfs_fs_info *fs_info,
3475 static inline u64 btrfs_calc_trunc_metadata_size(struct btrfs_fs_info *fs_info,
3476 unsigned num_items)
3477 {
3478 - return fs_info->nodesize * BTRFS_MAX_LEVEL * num_items;
3479 + return (u64)fs_info->nodesize * BTRFS_MAX_LEVEL * num_items;
3480 }
3481
3482 int btrfs_should_throttle_delayed_refs(struct btrfs_trans_handle *trans,
3483 diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
3484 index be5477676cc8..ed3fefc9e5e7 100644
3485 --- a/fs/btrfs/extent-tree.c
3486 +++ b/fs/btrfs/extent-tree.c
3487 @@ -3983,6 +3983,7 @@ static int update_space_info(struct btrfs_fs_info *info, u64 flags,
3488 info->space_info_kobj, "%s",
3489 alloc_name(found->flags));
3490 if (ret) {
3491 + percpu_counter_destroy(&found->total_bytes_pinned);
3492 kfree(found);
3493 return ret;
3494 }
3495 @@ -4834,7 +4835,7 @@ static int may_commit_transaction(struct btrfs_fs_info *fs_info,
3496 spin_unlock(&delayed_rsv->lock);
3497
3498 commit:
3499 - trans = btrfs_join_transaction(fs_info->fs_root);
3500 + trans = btrfs_join_transaction(fs_info->extent_root);
3501 if (IS_ERR(trans))
3502 return -ENOSPC;
3503
3504 @@ -4852,7 +4853,7 @@ static int flush_space(struct btrfs_fs_info *fs_info,
3505 struct btrfs_space_info *space_info, u64 num_bytes,
3506 u64 orig_bytes, int state)
3507 {
3508 - struct btrfs_root *root = fs_info->fs_root;
3509 + struct btrfs_root *root = fs_info->extent_root;
3510 struct btrfs_trans_handle *trans;
3511 int nr;
3512 int ret = 0;
3513 @@ -5052,7 +5053,7 @@ static void priority_reclaim_metadata_space(struct btrfs_fs_info *fs_info,
3514 int flush_state = FLUSH_DELAYED_ITEMS_NR;
3515
3516 spin_lock(&space_info->lock);
3517 - to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info->fs_root,
3518 + to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info->extent_root,
3519 space_info);
3520 if (!to_reclaim) {
3521 spin_unlock(&space_info->lock);
3522 diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
3523 index 5e71f1ea3391..65fc76a47094 100644
3524 --- a/fs/btrfs/inode.c
3525 +++ b/fs/btrfs/inode.c
3526 @@ -7359,8 +7359,8 @@ bool btrfs_page_exists_in_range(struct inode *inode, loff_t start, loff_t end)
3527 int found = false;
3528 void **pagep = NULL;
3529 struct page *page = NULL;
3530 - int start_idx;
3531 - int end_idx;
3532 + unsigned long start_idx;
3533 + unsigned long end_idx;
3534
3535 start_idx = start >> PAGE_SHIFT;
3536
3537 diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
3538 index 2a97dff87b96..3e36508610b7 100644
3539 --- a/fs/ext4/extents.c
3540 +++ b/fs/ext4/extents.c
3541 @@ -3413,13 +3413,13 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,
3542 struct ext4_sb_info *sbi;
3543 struct ext4_extent_header *eh;
3544 struct ext4_map_blocks split_map;
3545 - struct ext4_extent zero_ex;
3546 + struct ext4_extent zero_ex1, zero_ex2;
3547 struct ext4_extent *ex, *abut_ex;
3548 ext4_lblk_t ee_block, eof_block;
3549 unsigned int ee_len, depth, map_len = map->m_len;
3550 int allocated = 0, max_zeroout = 0;
3551 int err = 0;
3552 - int split_flag = 0;
3553 + int split_flag = EXT4_EXT_DATA_VALID2;
3554
3555 ext_debug("ext4_ext_convert_to_initialized: inode %lu, logical"
3556 "block %llu, max_blocks %u\n", inode->i_ino,
3557 @@ -3436,7 +3436,8 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,
3558 ex = path[depth].p_ext;
3559 ee_block = le32_to_cpu(ex->ee_block);
3560 ee_len = ext4_ext_get_actual_len(ex);
3561 - zero_ex.ee_len = 0;
3562 + zero_ex1.ee_len = 0;
3563 + zero_ex2.ee_len = 0;
3564
3565 trace_ext4_ext_convert_to_initialized_enter(inode, map, ex);
3566
3567 @@ -3576,62 +3577,52 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,
3568 if (ext4_encrypted_inode(inode))
3569 max_zeroout = 0;
3570
3571 - /* If extent is less than s_max_zeroout_kb, zeroout directly */
3572 - if (max_zeroout && (ee_len <= max_zeroout)) {
3573 - err = ext4_ext_zeroout(inode, ex);
3574 - if (err)
3575 - goto out;
3576 - zero_ex.ee_block = ex->ee_block;
3577 - zero_ex.ee_len = cpu_to_le16(ext4_ext_get_actual_len(ex));
3578 - ext4_ext_store_pblock(&zero_ex, ext4_ext_pblock(ex));
3579 -
3580 - err = ext4_ext_get_access(handle, inode, path + depth);
3581 - if (err)
3582 - goto out;
3583 - ext4_ext_mark_initialized(ex);
3584 - ext4_ext_try_to_merge(handle, inode, path, ex);
3585 - err = ext4_ext_dirty(handle, inode, path + path->p_depth);
3586 - goto out;
3587 - }
3588 -
3589 /*
3590 - * four cases:
3591 + * five cases:
3592 * 1. split the extent into three extents.
3593 - * 2. split the extent into two extents, zeroout the first half.
3594 - * 3. split the extent into two extents, zeroout the second half.
3595 + * 2. split the extent into two extents, zeroout the head of the first
3596 + * extent.
3597 + * 3. split the extent into two extents, zeroout the tail of the second
3598 + * extent.
3599 * 4. split the extent into two extents with out zeroout.
3600 + * 5. no splitting needed, just possibly zeroout the head and / or the
3601 + * tail of the extent.
3602 */
3603 split_map.m_lblk = map->m_lblk;
3604 split_map.m_len = map->m_len;
3605
3606 - if (max_zeroout && (allocated > map->m_len)) {
3607 + if (max_zeroout && (allocated > split_map.m_len)) {
3608 if (allocated <= max_zeroout) {
3609 - /* case 3 */
3610 - zero_ex.ee_block =
3611 - cpu_to_le32(map->m_lblk);
3612 - zero_ex.ee_len = cpu_to_le16(allocated);
3613 - ext4_ext_store_pblock(&zero_ex,
3614 - ext4_ext_pblock(ex) + map->m_lblk - ee_block);
3615 - err = ext4_ext_zeroout(inode, &zero_ex);
3616 + /* case 3 or 5 */
3617 + zero_ex1.ee_block =
3618 + cpu_to_le32(split_map.m_lblk +
3619 + split_map.m_len);
3620 + zero_ex1.ee_len =
3621 + cpu_to_le16(allocated - split_map.m_len);
3622 + ext4_ext_store_pblock(&zero_ex1,
3623 + ext4_ext_pblock(ex) + split_map.m_lblk +
3624 + split_map.m_len - ee_block);
3625 + err = ext4_ext_zeroout(inode, &zero_ex1);
3626 if (err)
3627 goto out;
3628 - split_map.m_lblk = map->m_lblk;
3629 split_map.m_len = allocated;
3630 - } else if (map->m_lblk - ee_block + map->m_len < max_zeroout) {
3631 - /* case 2 */
3632 - if (map->m_lblk != ee_block) {
3633 - zero_ex.ee_block = ex->ee_block;
3634 - zero_ex.ee_len = cpu_to_le16(map->m_lblk -
3635 + }
3636 + if (split_map.m_lblk - ee_block + split_map.m_len <
3637 + max_zeroout) {
3638 + /* case 2 or 5 */
3639 + if (split_map.m_lblk != ee_block) {
3640 + zero_ex2.ee_block = ex->ee_block;
3641 + zero_ex2.ee_len = cpu_to_le16(split_map.m_lblk -
3642 ee_block);
3643 - ext4_ext_store_pblock(&zero_ex,
3644 + ext4_ext_store_pblock(&zero_ex2,
3645 ext4_ext_pblock(ex));
3646 - err = ext4_ext_zeroout(inode, &zero_ex);
3647 + err = ext4_ext_zeroout(inode, &zero_ex2);
3648 if (err)
3649 goto out;
3650 }
3651
3652 + split_map.m_len += split_map.m_lblk - ee_block;
3653 split_map.m_lblk = ee_block;
3654 - split_map.m_len = map->m_lblk - ee_block + map->m_len;
3655 allocated = map->m_len;
3656 }
3657 }
3658 @@ -3642,8 +3633,11 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,
3659 err = 0;
3660 out:
3661 /* If we have gotten a failure, don't zero out status tree */
3662 - if (!err)
3663 - err = ext4_zeroout_es(inode, &zero_ex);
3664 + if (!err) {
3665 + err = ext4_zeroout_es(inode, &zero_ex1);
3666 + if (!err)
3667 + err = ext4_zeroout_es(inode, &zero_ex2);
3668 + }
3669 return err ? err : allocated;
3670 }
3671
3672 @@ -4883,6 +4877,8 @@ static long ext4_zero_range(struct file *file, loff_t offset,
3673
3674 /* Zero out partial block at the edges of the range */
3675 ret = ext4_zero_partial_blocks(handle, inode, offset, len);
3676 + if (ret >= 0)
3677 + ext4_update_inode_fsync_trans(handle, inode, 1);
3678
3679 if (file->f_flags & O_SYNC)
3680 ext4_handle_sync(handle);
3681 @@ -5569,6 +5565,7 @@ int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len)
3682 ext4_handle_sync(handle);
3683 inode->i_mtime = inode->i_ctime = current_time(inode);
3684 ext4_mark_inode_dirty(handle, inode);
3685 + ext4_update_inode_fsync_trans(handle, inode, 1);
3686
3687 out_stop:
3688 ext4_journal_stop(handle);
3689 @@ -5742,6 +5739,8 @@ int ext4_insert_range(struct inode *inode, loff_t offset, loff_t len)
3690 up_write(&EXT4_I(inode)->i_data_sem);
3691 if (IS_SYNC(inode))
3692 ext4_handle_sync(handle);
3693 + if (ret >= 0)
3694 + ext4_update_inode_fsync_trans(handle, inode, 1);
3695
3696 out_stop:
3697 ext4_journal_stop(handle);
3698 diff --git a/fs/ext4/file.c b/fs/ext4/file.c
3699 index 831fd6beebf0..bbea2dccd584 100644
3700 --- a/fs/ext4/file.c
3701 +++ b/fs/ext4/file.c
3702 @@ -484,47 +484,27 @@ static int ext4_find_unwritten_pgoff(struct inode *inode,
3703 num = min_t(pgoff_t, end - index, PAGEVEC_SIZE);
3704 nr_pages = pagevec_lookup(&pvec, inode->i_mapping, index,
3705 (pgoff_t)num);
3706 - if (nr_pages == 0) {
3707 - if (whence == SEEK_DATA)
3708 - break;
3709 -
3710 - BUG_ON(whence != SEEK_HOLE);
3711 - /*
3712 - * If this is the first time to go into the loop and
3713 - * offset is not beyond the end offset, it will be a
3714 - * hole at this offset
3715 - */
3716 - if (lastoff == startoff || lastoff < endoff)
3717 - found = 1;
3718 - break;
3719 - }
3720 -
3721 - /*
3722 - * If this is the first time to go into the loop and
3723 - * offset is smaller than the first page offset, it will be a
3724 - * hole at this offset.
3725 - */
3726 - if (lastoff == startoff && whence == SEEK_HOLE &&
3727 - lastoff < page_offset(pvec.pages[0])) {
3728 - found = 1;
3729 + if (nr_pages == 0)
3730 break;
3731 - }
3732
3733 for (i = 0; i < nr_pages; i++) {
3734 struct page *page = pvec.pages[i];
3735 struct buffer_head *bh, *head;
3736
3737 /*
3738 - * If the current offset is not beyond the end of given
3739 - * range, it will be a hole.
3740 + * If current offset is smaller than the page offset,
3741 + * there is a hole at this offset.
3742 */
3743 - if (lastoff < endoff && whence == SEEK_HOLE &&
3744 - page->index > end) {
3745 + if (whence == SEEK_HOLE && lastoff < endoff &&
3746 + lastoff < page_offset(pvec.pages[i])) {
3747 found = 1;
3748 *offset = lastoff;
3749 goto out;
3750 }
3751
3752 + if (page->index > end)
3753 + goto out;
3754 +
3755 lock_page(page);
3756
3757 if (unlikely(page->mapping != inode->i_mapping)) {
3758 @@ -564,20 +544,18 @@ static int ext4_find_unwritten_pgoff(struct inode *inode,
3759 unlock_page(page);
3760 }
3761
3762 - /*
3763 - * The no. of pages is less than our desired, that would be a
3764 - * hole in there.
3765 - */
3766 - if (nr_pages < num && whence == SEEK_HOLE) {
3767 - found = 1;
3768 - *offset = lastoff;
3769 + /* The no. of pages is less than our desired, we are done. */
3770 + if (nr_pages < num)
3771 break;
3772 - }
3773
3774 index = pvec.pages[i - 1]->index + 1;
3775 pagevec_release(&pvec);
3776 } while (index <= end);
3777
3778 + if (whence == SEEK_HOLE && lastoff < endoff) {
3779 + found = 1;
3780 + *offset = lastoff;
3781 + }
3782 out:
3783 pagevec_release(&pvec);
3784 return found;
3785 diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
3786 index 88203ae5b154..7090752ec2cb 100644
3787 --- a/fs/ext4/inode.c
3788 +++ b/fs/ext4/inode.c
3789 @@ -4165,6 +4165,8 @@ int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length)
3790
3791 inode->i_mtime = inode->i_ctime = current_time(inode);
3792 ext4_mark_inode_dirty(handle, inode);
3793 + if (ret >= 0)
3794 + ext4_update_inode_fsync_trans(handle, inode, 1);
3795 out_stop:
3796 ext4_journal_stop(handle);
3797 out_dio:
3798 @@ -5621,8 +5623,9 @@ static int ext4_expand_extra_isize(struct inode *inode,
3799 /* No extended attributes present */
3800 if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) ||
3801 header->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC)) {
3802 - memset((void *)raw_inode + EXT4_GOOD_OLD_INODE_SIZE, 0,
3803 - new_extra_isize);
3804 + memset((void *)raw_inode + EXT4_GOOD_OLD_INODE_SIZE +
3805 + EXT4_I(inode)->i_extra_isize, 0,
3806 + new_extra_isize - EXT4_I(inode)->i_extra_isize);
3807 EXT4_I(inode)->i_extra_isize = new_extra_isize;
3808 return 0;
3809 }
3810 diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
3811 index f865b96374df..d2955daf17a4 100644
3812 --- a/fs/gfs2/log.c
3813 +++ b/fs/gfs2/log.c
3814 @@ -659,7 +659,7 @@ static void log_write_header(struct gfs2_sbd *sdp, u32 flags)
3815 struct gfs2_log_header *lh;
3816 unsigned int tail;
3817 u32 hash;
3818 - int op_flags = REQ_PREFLUSH | REQ_FUA | REQ_META;
3819 + int op_flags = REQ_PREFLUSH | REQ_FUA | REQ_META | REQ_SYNC;
3820 struct page *page = mempool_alloc(gfs2_page_pool, GFP_NOIO);
3821 enum gfs2_freeze_state state = atomic_read(&sdp->sd_freeze_state);
3822 lh = page_address(page);
3823 diff --git a/fs/iomap.c b/fs/iomap.c
3824 index 1c25ae30500e..258fb4100b1d 100644
3825 --- a/fs/iomap.c
3826 +++ b/fs/iomap.c
3827 @@ -909,6 +909,9 @@ iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
3828 break;
3829 }
3830 pos += ret;
3831 +
3832 + if (iov_iter_rw(iter) == READ && pos >= dio->i_size)
3833 + break;
3834 } while ((count = iov_iter_count(iter)) > 0);
3835 blk_finish_plug(&plug);
3836
3837 diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
3838 index c453a1998e00..dadb3bf305b2 100644
3839 --- a/fs/nfsd/nfs4proc.c
3840 +++ b/fs/nfsd/nfs4proc.c
3841 @@ -1769,6 +1769,12 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
3842 opdesc->op_get_currentstateid(cstate, &op->u);
3843 op->status = opdesc->op_func(rqstp, cstate, &op->u);
3844
3845 + /* Only from SEQUENCE */
3846 + if (cstate->status == nfserr_replay_cache) {
3847 + dprintk("%s NFS4.1 replay from cache\n", __func__);
3848 + status = op->status;
3849 + goto out;
3850 + }
3851 if (!op->status) {
3852 if (opdesc->op_set_currentstateid)
3853 opdesc->op_set_currentstateid(cstate, &op->u);
3854 @@ -1779,14 +1785,7 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
3855 if (need_wrongsec_check(rqstp))
3856 op->status = check_nfsd_access(current_fh->fh_export, rqstp);
3857 }
3858 -
3859 encode_op:
3860 - /* Only from SEQUENCE */
3861 - if (cstate->status == nfserr_replay_cache) {
3862 - dprintk("%s NFS4.1 replay from cache\n", __func__);
3863 - status = op->status;
3864 - goto out;
3865 - }
3866 if (op->status == nfserr_replay_me) {
3867 op->replay = &cstate->replay_owner->so_replay;
3868 nfsd4_encode_replay(&resp->xdr, op);
3869 diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
3870 index 906ea6c93260..5b14c16d1b77 100644
3871 --- a/fs/overlayfs/copy_up.c
3872 +++ b/fs/overlayfs/copy_up.c
3873 @@ -269,12 +269,13 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
3874 temp = ovl_do_tmpfile(upperdir, stat->mode);
3875 else
3876 temp = ovl_lookup_temp(workdir, dentry);
3877 - err = PTR_ERR(temp);
3878 - if (IS_ERR(temp))
3879 - goto out1;
3880 -
3881 err = 0;
3882 - if (!tmpfile)
3883 + if (IS_ERR(temp)) {
3884 + err = PTR_ERR(temp);
3885 + temp = NULL;
3886 + }
3887 +
3888 + if (!err && !tmpfile)
3889 err = ovl_create_real(wdir, temp, &cattr, NULL, true);
3890
3891 if (new_creds) {
3892 diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c
3893 index aa40c242f1db..64a4d3c82125 100644
3894 --- a/fs/reiserfs/journal.c
3895 +++ b/fs/reiserfs/journal.c
3896 @@ -1112,7 +1112,7 @@ static int flush_commit_list(struct super_block *s,
3897 depth = reiserfs_write_unlock_nested(s);
3898 if (reiserfs_barrier_flush(s))
3899 __sync_dirty_buffer(jl->j_commit_bh,
3900 - REQ_PREFLUSH | REQ_FUA);
3901 + REQ_SYNC | REQ_PREFLUSH | REQ_FUA);
3902 else
3903 sync_dirty_buffer(jl->j_commit_bh);
3904 reiserfs_write_lock_nested(s, depth);
3905 @@ -1271,7 +1271,7 @@ static int _update_journal_header_block(struct super_block *sb,
3906
3907 if (reiserfs_barrier_flush(sb))
3908 __sync_dirty_buffer(journal->j_header_bh,
3909 - REQ_PREFLUSH | REQ_FUA);
3910 + REQ_SYNC | REQ_PREFLUSH | REQ_FUA);
3911 else
3912 sync_dirty_buffer(journal->j_header_bh);
3913
3914 diff --git a/fs/stat.c b/fs/stat.c
3915 index a257b872a53d..ea6235a31ec8 100644
3916 --- a/fs/stat.c
3917 +++ b/fs/stat.c
3918 @@ -586,6 +586,7 @@ void __inode_add_bytes(struct inode *inode, loff_t bytes)
3919 inode->i_bytes -= 512;
3920 }
3921 }
3922 +EXPORT_SYMBOL(__inode_add_bytes);
3923
3924 void inode_add_bytes(struct inode *inode, loff_t bytes)
3925 {
3926 diff --git a/fs/ufs/balloc.c b/fs/ufs/balloc.c
3927 index a0376a2c1c29..d642cc0a8271 100644
3928 --- a/fs/ufs/balloc.c
3929 +++ b/fs/ufs/balloc.c
3930 @@ -82,7 +82,8 @@ void ufs_free_fragments(struct inode *inode, u64 fragment, unsigned count)
3931 ufs_error (sb, "ufs_free_fragments",
3932 "bit already cleared for fragment %u", i);
3933 }
3934 -
3935 +
3936 + inode_sub_bytes(inode, count << uspi->s_fshift);
3937 fs32_add(sb, &ucg->cg_cs.cs_nffree, count);
3938 uspi->cs_total.cs_nffree += count;
3939 fs32_add(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, count);
3940 @@ -184,6 +185,7 @@ void ufs_free_blocks(struct inode *inode, u64 fragment, unsigned count)
3941 ufs_error(sb, "ufs_free_blocks", "freeing free fragment");
3942 }
3943 ubh_setblock(UCPI_UBH(ucpi), ucpi->c_freeoff, blkno);
3944 + inode_sub_bytes(inode, uspi->s_fpb << uspi->s_fshift);
3945 if ((UFS_SB(sb)->s_flags & UFS_CG_MASK) == UFS_CG_44BSD)
3946 ufs_clusteracct (sb, ucpi, blkno, 1);
3947
3948 @@ -494,6 +496,20 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
3949 return 0;
3950 }
3951
3952 +static bool try_add_frags(struct inode *inode, unsigned frags)
3953 +{
3954 + unsigned size = frags * i_blocksize(inode);
3955 + spin_lock(&inode->i_lock);
3956 + __inode_add_bytes(inode, size);
3957 + if (unlikely((u32)inode->i_blocks != inode->i_blocks)) {
3958 + __inode_sub_bytes(inode, size);
3959 + spin_unlock(&inode->i_lock);
3960 + return false;
3961 + }
3962 + spin_unlock(&inode->i_lock);
3963 + return true;
3964 +}
3965 +
3966 static u64 ufs_add_fragments(struct inode *inode, u64 fragment,
3967 unsigned oldcount, unsigned newcount)
3968 {
3969 @@ -530,6 +546,9 @@ static u64 ufs_add_fragments(struct inode *inode, u64 fragment,
3970 for (i = oldcount; i < newcount; i++)
3971 if (ubh_isclr (UCPI_UBH(ucpi), ucpi->c_freeoff, fragno + i))
3972 return 0;
3973 +
3974 + if (!try_add_frags(inode, count))
3975 + return 0;
3976 /*
3977 * Block can be extended
3978 */
3979 @@ -647,6 +666,7 @@ static u64 ufs_alloc_fragments(struct inode *inode, unsigned cgno,
3980 ubh_setbit (UCPI_UBH(ucpi), ucpi->c_freeoff, goal + i);
3981 i = uspi->s_fpb - count;
3982
3983 + inode_sub_bytes(inode, i << uspi->s_fshift);
3984 fs32_add(sb, &ucg->cg_cs.cs_nffree, i);
3985 uspi->cs_total.cs_nffree += i;
3986 fs32_add(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, i);
3987 @@ -657,6 +677,8 @@ static u64 ufs_alloc_fragments(struct inode *inode, unsigned cgno,
3988 result = ufs_bitmap_search (sb, ucpi, goal, allocsize);
3989 if (result == INVBLOCK)
3990 return 0;
3991 + if (!try_add_frags(inode, count))
3992 + return 0;
3993 for (i = 0; i < count; i++)
3994 ubh_clrbit (UCPI_UBH(ucpi), ucpi->c_freeoff, result + i);
3995
3996 @@ -716,6 +738,8 @@ static u64 ufs_alloccg_block(struct inode *inode,
3997 return INVBLOCK;
3998 ucpi->c_rotor = result;
3999 gotit:
4000 + if (!try_add_frags(inode, uspi->s_fpb))
4001 + return 0;
4002 blkno = ufs_fragstoblks(result);
4003 ubh_clrblock (UCPI_UBH(ucpi), ucpi->c_freeoff, blkno);
4004 if ((UFS_SB(sb)->s_flags & UFS_CG_MASK) == UFS_CG_44BSD)
4005 diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c
4006 index 7e41aee7b69a..34f11cf0900a 100644
4007 --- a/fs/ufs/inode.c
4008 +++ b/fs/ufs/inode.c
4009 @@ -235,7 +235,8 @@ ufs_extend_tail(struct inode *inode, u64 writes_to,
4010
4011 p = ufs_get_direct_data_ptr(uspi, ufsi, block);
4012 tmp = ufs_new_fragments(inode, p, lastfrag, ufs_data_ptr_to_cpu(sb, p),
4013 - new_size, err, locked_page);
4014 + new_size - (lastfrag & uspi->s_fpbmask), err,
4015 + locked_page);
4016 return tmp != 0;
4017 }
4018
4019 @@ -284,7 +285,7 @@ ufs_inode_getfrag(struct inode *inode, unsigned index,
4020 goal += uspi->s_fpb;
4021 }
4022 tmp = ufs_new_fragments(inode, p, ufs_blknum(new_fragment),
4023 - goal, uspi->s_fpb, err, locked_page);
4024 + goal, nfrags, err, locked_page);
4025
4026 if (!tmp) {
4027 *err = -ENOSPC;
4028 @@ -402,7 +403,9 @@ static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buff
4029
4030 if (!create) {
4031 phys64 = ufs_frag_map(inode, offsets, depth);
4032 - goto out;
4033 + if (phys64)
4034 + map_bh(bh_result, sb, phys64 + frag);
4035 + return 0;
4036 }
4037
4038 /* This code entered only while writing ....? */
4039 @@ -841,7 +844,9 @@ void ufs_evict_inode(struct inode * inode)
4040 truncate_inode_pages_final(&inode->i_data);
4041 if (want_delete) {
4042 inode->i_size = 0;
4043 - if (inode->i_blocks)
4044 + if (inode->i_blocks &&
4045 + (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
4046 + S_ISLNK(inode->i_mode)))
4047 ufs_truncate_blocks(inode);
4048 }
4049
4050 @@ -1100,7 +1105,7 @@ static int ufs_alloc_lastblock(struct inode *inode, loff_t size)
4051 return err;
4052 }
4053
4054 -static void __ufs_truncate_blocks(struct inode *inode)
4055 +static void ufs_truncate_blocks(struct inode *inode)
4056 {
4057 struct ufs_inode_info *ufsi = UFS_I(inode);
4058 struct super_block *sb = inode->i_sb;
4059 @@ -1183,7 +1188,7 @@ static int ufs_truncate(struct inode *inode, loff_t size)
4060
4061 truncate_setsize(inode, size);
4062
4063 - __ufs_truncate_blocks(inode);
4064 + ufs_truncate_blocks(inode);
4065 inode->i_mtime = inode->i_ctime = current_time(inode);
4066 mark_inode_dirty(inode);
4067 out:
4068 @@ -1191,16 +1196,6 @@ static int ufs_truncate(struct inode *inode, loff_t size)
4069 return err;
4070 }
4071
4072 -static void ufs_truncate_blocks(struct inode *inode)
4073 -{
4074 - if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
4075 - S_ISLNK(inode->i_mode)))
4076 - return;
4077 - if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
4078 - return;
4079 - __ufs_truncate_blocks(inode);
4080 -}
4081 -
4082 int ufs_setattr(struct dentry *dentry, struct iattr *attr)
4083 {
4084 struct inode *inode = d_inode(dentry);
4085 diff --git a/fs/ufs/super.c b/fs/ufs/super.c
4086 index 29ecaf739449..878cc6264f1a 100644
4087 --- a/fs/ufs/super.c
4088 +++ b/fs/ufs/super.c
4089 @@ -746,6 +746,23 @@ static void ufs_put_super(struct super_block *sb)
4090 return;
4091 }
4092
4093 +static u64 ufs_max_bytes(struct super_block *sb)
4094 +{
4095 + struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi;
4096 + int bits = uspi->s_apbshift;
4097 + u64 res;
4098 +
4099 + if (bits > 21)
4100 + res = ~0ULL;
4101 + else
4102 + res = UFS_NDADDR + (1LL << bits) + (1LL << (2*bits)) +
4103 + (1LL << (3*bits));
4104 +
4105 + if (res >= (MAX_LFS_FILESIZE >> uspi->s_bshift))
4106 + return MAX_LFS_FILESIZE;
4107 + return res << uspi->s_bshift;
4108 +}
4109 +
4110 static int ufs_fill_super(struct super_block *sb, void *data, int silent)
4111 {
4112 struct ufs_sb_info * sbi;
4113 @@ -1211,6 +1228,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
4114 "fast symlink size (%u)\n", uspi->s_maxsymlinklen);
4115 uspi->s_maxsymlinklen = maxsymlen;
4116 }
4117 + sb->s_maxbytes = ufs_max_bytes(sb);
4118 sb->s_max_links = UFS_LINK_MAX;
4119
4120 inode = ufs_iget(sb, UFS_ROOTINO);
4121 diff --git a/fs/ufs/util.h b/fs/ufs/util.h
4122 index b7fbf53dbc81..398019fb1448 100644
4123 --- a/fs/ufs/util.h
4124 +++ b/fs/ufs/util.h
4125 @@ -473,15 +473,19 @@ static inline unsigned _ubh_find_last_zero_bit_(
4126 static inline int _ubh_isblockset_(struct ufs_sb_private_info * uspi,
4127 struct ufs_buffer_head * ubh, unsigned begin, unsigned block)
4128 {
4129 + u8 mask;
4130 switch (uspi->s_fpb) {
4131 case 8:
4132 return (*ubh_get_addr (ubh, begin + block) == 0xff);
4133 case 4:
4134 - return (*ubh_get_addr (ubh, begin + (block >> 1)) == (0x0f << ((block & 0x01) << 2)));
4135 + mask = 0x0f << ((block & 0x01) << 2);
4136 + return (*ubh_get_addr (ubh, begin + (block >> 1)) & mask) == mask;
4137 case 2:
4138 - return (*ubh_get_addr (ubh, begin + (block >> 2)) == (0x03 << ((block & 0x03) << 1)));
4139 + mask = 0x03 << ((block & 0x03) << 1);
4140 + return (*ubh_get_addr (ubh, begin + (block >> 2)) & mask) == mask;
4141 case 1:
4142 - return (*ubh_get_addr (ubh, begin + (block >> 3)) == (0x01 << (block & 0x07)));
4143 + mask = 0x01 << (block & 0x07);
4144 + return (*ubh_get_addr (ubh, begin + (block >> 3)) & mask) == mask;
4145 }
4146 return 0;
4147 }
4148 diff --git a/include/drm/i915_pciids.h b/include/drm/i915_pciids.h
4149 index a1dd21d6b723..466c71592a6f 100644
4150 --- a/include/drm/i915_pciids.h
4151 +++ b/include/drm/i915_pciids.h
4152 @@ -265,7 +265,8 @@
4153 INTEL_VGA_DEVICE(0x1923, info), /* ULT GT3 */ \
4154 INTEL_VGA_DEVICE(0x1926, info), /* ULT GT3 */ \
4155 INTEL_VGA_DEVICE(0x1927, info), /* ULT GT3 */ \
4156 - INTEL_VGA_DEVICE(0x192B, info) /* Halo GT3 */ \
4157 + INTEL_VGA_DEVICE(0x192B, info), /* Halo GT3 */ \
4158 + INTEL_VGA_DEVICE(0x192D, info) /* SRV GT3 */
4159
4160 #define INTEL_SKL_GT4_IDS(info) \
4161 INTEL_VGA_DEVICE(0x1932, info), /* DT GT4 */ \
4162 diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h
4163 index 6a3f850cabab..14db95e9b529 100644
4164 --- a/include/linux/cgroup-defs.h
4165 +++ b/include/linux/cgroup-defs.h
4166 @@ -47,6 +47,7 @@ enum {
4167 CSS_ONLINE = (1 << 1), /* between ->css_online() and ->css_offline() */
4168 CSS_RELEASED = (1 << 2), /* refcnt reached zero, released */
4169 CSS_VISIBLE = (1 << 3), /* css is visible to userland */
4170 + CSS_DYING = (1 << 4), /* css is dying */
4171 };
4172
4173 /* bits in struct cgroup flags field */
4174 diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
4175 index af9c86e958bd..b48579d9b806 100644
4176 --- a/include/linux/cgroup.h
4177 +++ b/include/linux/cgroup.h
4178 @@ -344,6 +344,26 @@ static inline bool css_tryget_online(struct cgroup_subsys_state *css)
4179 }
4180
4181 /**
4182 + * css_is_dying - test whether the specified css is dying
4183 + * @css: target css
4184 + *
4185 + * Test whether @css is in the process of offlining or already offline. In
4186 + * most cases, ->css_online() and ->css_offline() callbacks should be
4187 + * enough; however, the actual offline operations are RCU delayed and this
4188 + * test returns %true also when @css is scheduled to be offlined.
4189 + *
4190 + * This is useful, for example, when the use case requires synchronous
4191 + * behavior with respect to cgroup removal. cgroup removal schedules css
4192 + * offlining but the css can seem alive while the operation is being
4193 + * delayed. If the delay affects user visible semantics, this test can be
4194 + * used to resolve the situation.
4195 + */
4196 +static inline bool css_is_dying(struct cgroup_subsys_state *css)
4197 +{
4198 + return !(css->flags & CSS_NO_REF) && percpu_ref_is_dying(&css->refcnt);
4199 +}
4200 +
4201 +/**
4202 * css_put - put a css reference
4203 * @css: target css
4204 *
4205 diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
4206 index 422bc2e4cb6a..ef3eb8bbfee4 100644
4207 --- a/include/linux/ptrace.h
4208 +++ b/include/linux/ptrace.h
4209 @@ -54,7 +54,8 @@ extern int ptrace_request(struct task_struct *child, long request,
4210 unsigned long addr, unsigned long data);
4211 extern void ptrace_notify(int exit_code);
4212 extern void __ptrace_link(struct task_struct *child,
4213 - struct task_struct *new_parent);
4214 + struct task_struct *new_parent,
4215 + const struct cred *ptracer_cred);
4216 extern void __ptrace_unlink(struct task_struct *child);
4217 extern void exit_ptrace(struct task_struct *tracer, struct list_head *dead);
4218 #define PTRACE_MODE_READ 0x01
4219 @@ -206,7 +207,7 @@ static inline void ptrace_init_task(struct task_struct *child, bool ptrace)
4220
4221 if (unlikely(ptrace) && current->ptrace) {
4222 child->ptrace = current->ptrace;
4223 - __ptrace_link(child, current->parent);
4224 + __ptrace_link(child, current->parent, current->ptracer_cred);
4225
4226 if (child->ptrace & PT_SEIZED)
4227 task_set_jobctl_pending(child, JOBCTL_TRAP_STOP);
4228 @@ -215,6 +216,8 @@ static inline void ptrace_init_task(struct task_struct *child, bool ptrace)
4229
4230 set_tsk_thread_flag(child, TIF_SIGPENDING);
4231 }
4232 + else
4233 + child->ptracer_cred = NULL;
4234 }
4235
4236 /**
4237 diff --git a/include/linux/srcu.h b/include/linux/srcu.h
4238 index a598cf3ac70c..8a95e5d0fdf9 100644
4239 --- a/include/linux/srcu.h
4240 +++ b/include/linux/srcu.h
4241 @@ -232,9 +232,7 @@ static inline int srcu_read_lock(struct srcu_struct *sp) __acquires(sp)
4242 {
4243 int retval;
4244
4245 - preempt_disable();
4246 retval = __srcu_read_lock(sp);
4247 - preempt_enable();
4248 rcu_lock_acquire(&(sp)->dep_map);
4249 return retval;
4250 }
4251 diff --git a/include/net/ipv6.h b/include/net/ipv6.h
4252 index dbf0abba33b8..3e505bbff8ca 100644
4253 --- a/include/net/ipv6.h
4254 +++ b/include/net/ipv6.h
4255 @@ -1007,6 +1007,7 @@ int inet6_hash_connect(struct inet_timewait_death_row *death_row,
4256 */
4257 extern const struct proto_ops inet6_stream_ops;
4258 extern const struct proto_ops inet6_dgram_ops;
4259 +extern const struct proto_ops inet6_sockraw_ops;
4260
4261 struct group_source_req;
4262 struct group_filter;
4263 diff --git a/kernel/audit.c b/kernel/audit.c
4264 index a871bf80fde1..dd2c339c8eb9 100644
4265 --- a/kernel/audit.c
4266 +++ b/kernel/audit.c
4267 @@ -110,18 +110,19 @@ struct audit_net {
4268 * @pid: auditd PID
4269 * @portid: netlink portid
4270 * @net: the associated network namespace
4271 - * @lock: spinlock to protect write access
4272 + * @rcu: RCU head
4273 *
4274 * Description:
4275 * This struct is RCU protected; you must either hold the RCU lock for reading
4276 - * or the included spinlock for writing.
4277 + * or the associated spinlock for writing.
4278 */
4279 static struct auditd_connection {
4280 int pid;
4281 u32 portid;
4282 struct net *net;
4283 - spinlock_t lock;
4284 -} auditd_conn;
4285 + struct rcu_head rcu;
4286 +} *auditd_conn = NULL;
4287 +static DEFINE_SPINLOCK(auditd_conn_lock);
4288
4289 /* If audit_rate_limit is non-zero, limit the rate of sending audit records
4290 * to that number per second. This prevents DoS attacks, but results in
4291 @@ -223,15 +224,39 @@ struct audit_reply {
4292 int auditd_test_task(const struct task_struct *task)
4293 {
4294 int rc;
4295 + struct auditd_connection *ac;
4296
4297 rcu_read_lock();
4298 - rc = (auditd_conn.pid && task->tgid == auditd_conn.pid ? 1 : 0);
4299 + ac = rcu_dereference(auditd_conn);
4300 + rc = (ac && ac->pid == task->tgid ? 1 : 0);
4301 rcu_read_unlock();
4302
4303 return rc;
4304 }
4305
4306 /**
4307 + * auditd_pid_vnr - Return the auditd PID relative to the namespace
4308 + *
4309 + * Description:
4310 + * Returns the PID in relation to the namespace, 0 on failure.
4311 + */
4312 +static pid_t auditd_pid_vnr(void)
4313 +{
4314 + pid_t pid;
4315 + const struct auditd_connection *ac;
4316 +
4317 + rcu_read_lock();
4318 + ac = rcu_dereference(auditd_conn);
4319 + if (!ac)
4320 + pid = 0;
4321 + else
4322 + pid = ac->pid;
4323 + rcu_read_unlock();
4324 +
4325 + return pid;
4326 +}
4327 +
4328 +/**
4329 * audit_get_sk - Return the audit socket for the given network namespace
4330 * @net: the destination network namespace
4331 *
4332 @@ -427,6 +452,23 @@ static int audit_set_failure(u32 state)
4333 }
4334
4335 /**
4336 + * auditd_conn_free - RCU helper to release an auditd connection struct
4337 + * @rcu: RCU head
4338 + *
4339 + * Description:
4340 + * Drop any references inside the auditd connection tracking struct and free
4341 + * the memory.
4342 + */
4343 +static void auditd_conn_free(struct rcu_head *rcu)
4344 +{
4345 + struct auditd_connection *ac;
4346 +
4347 + ac = container_of(rcu, struct auditd_connection, rcu);
4348 + put_net(ac->net);
4349 + kfree(ac);
4350 +}
4351 +
4352 +/**
4353 * auditd_set - Set/Reset the auditd connection state
4354 * @pid: auditd PID
4355 * @portid: auditd netlink portid
4356 @@ -434,22 +476,33 @@ static int audit_set_failure(u32 state)
4357 *
4358 * Description:
4359 * This function will obtain and drop network namespace references as
4360 - * necessary.
4361 + * necessary. Returns zero on success, negative values on failure.
4362 */
4363 -static void auditd_set(int pid, u32 portid, struct net *net)
4364 +static int auditd_set(int pid, u32 portid, struct net *net)
4365 {
4366 unsigned long flags;
4367 + struct auditd_connection *ac_old, *ac_new;
4368
4369 - spin_lock_irqsave(&auditd_conn.lock, flags);
4370 - auditd_conn.pid = pid;
4371 - auditd_conn.portid = portid;
4372 - if (auditd_conn.net)
4373 - put_net(auditd_conn.net);
4374 - if (net)
4375 - auditd_conn.net = get_net(net);
4376 - else
4377 - auditd_conn.net = NULL;
4378 - spin_unlock_irqrestore(&auditd_conn.lock, flags);
4379 + if (!pid || !net)
4380 + return -EINVAL;
4381 +
4382 + ac_new = kzalloc(sizeof(*ac_new), GFP_KERNEL);
4383 + if (!ac_new)
4384 + return -ENOMEM;
4385 + ac_new->pid = pid;
4386 + ac_new->portid = portid;
4387 + ac_new->net = get_net(net);
4388 +
4389 + spin_lock_irqsave(&auditd_conn_lock, flags);
4390 + ac_old = rcu_dereference_protected(auditd_conn,
4391 + lockdep_is_held(&auditd_conn_lock));
4392 + rcu_assign_pointer(auditd_conn, ac_new);
4393 + spin_unlock_irqrestore(&auditd_conn_lock, flags);
4394 +
4395 + if (ac_old)
4396 + call_rcu(&ac_old->rcu, auditd_conn_free);
4397 +
4398 + return 0;
4399 }
4400
4401 /**
4402 @@ -544,13 +597,19 @@ static void kauditd_retry_skb(struct sk_buff *skb)
4403 */
4404 static void auditd_reset(void)
4405 {
4406 + unsigned long flags;
4407 struct sk_buff *skb;
4408 + struct auditd_connection *ac_old;
4409
4410 /* if it isn't already broken, break the connection */
4411 - rcu_read_lock();
4412 - if (auditd_conn.pid)
4413 - auditd_set(0, 0, NULL);
4414 - rcu_read_unlock();
4415 + spin_lock_irqsave(&auditd_conn_lock, flags);
4416 + ac_old = rcu_dereference_protected(auditd_conn,
4417 + lockdep_is_held(&auditd_conn_lock));
4418 + rcu_assign_pointer(auditd_conn, NULL);
4419 + spin_unlock_irqrestore(&auditd_conn_lock, flags);
4420 +
4421 + if (ac_old)
4422 + call_rcu(&ac_old->rcu, auditd_conn_free);
4423
4424 /* flush all of the main and retry queues to the hold queue */
4425 while ((skb = skb_dequeue(&audit_retry_queue)))
4426 @@ -576,6 +635,7 @@ static int auditd_send_unicast_skb(struct sk_buff *skb)
4427 u32 portid;
4428 struct net *net;
4429 struct sock *sk;
4430 + struct auditd_connection *ac;
4431
4432 /* NOTE: we can't call netlink_unicast while in the RCU section so
4433 * take a reference to the network namespace and grab local
4434 @@ -585,15 +645,15 @@ static int auditd_send_unicast_skb(struct sk_buff *skb)
4435 * section netlink_unicast() should safely return an error */
4436
4437 rcu_read_lock();
4438 - if (!auditd_conn.pid) {
4439 + ac = rcu_dereference(auditd_conn);
4440 + if (!ac) {
4441 rcu_read_unlock();
4442 rc = -ECONNREFUSED;
4443 goto err;
4444 }
4445 - net = auditd_conn.net;
4446 - get_net(net);
4447 + net = get_net(ac->net);
4448 sk = audit_get_sk(net);
4449 - portid = auditd_conn.portid;
4450 + portid = ac->portid;
4451 rcu_read_unlock();
4452
4453 rc = netlink_unicast(sk, skb, portid, 0);
4454 @@ -728,6 +788,7 @@ static int kauditd_thread(void *dummy)
4455 u32 portid = 0;
4456 struct net *net = NULL;
4457 struct sock *sk = NULL;
4458 + struct auditd_connection *ac;
4459
4460 #define UNICAST_RETRIES 5
4461
4462 @@ -735,14 +796,14 @@ static int kauditd_thread(void *dummy)
4463 while (!kthread_should_stop()) {
4464 /* NOTE: see the lock comments in auditd_send_unicast_skb() */
4465 rcu_read_lock();
4466 - if (!auditd_conn.pid) {
4467 + ac = rcu_dereference(auditd_conn);
4468 + if (!ac) {
4469 rcu_read_unlock();
4470 goto main_queue;
4471 }
4472 - net = auditd_conn.net;
4473 - get_net(net);
4474 + net = get_net(ac->net);
4475 sk = audit_get_sk(net);
4476 - portid = auditd_conn.portid;
4477 + portid = ac->portid;
4478 rcu_read_unlock();
4479
4480 /* attempt to flush the hold queue */
4481 @@ -1102,9 +1163,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
4482 memset(&s, 0, sizeof(s));
4483 s.enabled = audit_enabled;
4484 s.failure = audit_failure;
4485 - rcu_read_lock();
4486 - s.pid = auditd_conn.pid;
4487 - rcu_read_unlock();
4488 + s.pid = auditd_pid_vnr();
4489 s.rate_limit = audit_rate_limit;
4490 s.backlog_limit = audit_backlog_limit;
4491 s.lost = atomic_read(&audit_lost);
4492 @@ -1143,38 +1202,44 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
4493 /* test the auditd connection */
4494 audit_replace(requesting_pid);
4495
4496 - rcu_read_lock();
4497 - auditd_pid = auditd_conn.pid;
4498 + auditd_pid = auditd_pid_vnr();
4499 /* only the current auditd can unregister itself */
4500 if ((!new_pid) && (requesting_pid != auditd_pid)) {
4501 - rcu_read_unlock();
4502 audit_log_config_change("audit_pid", new_pid,
4503 auditd_pid, 0);
4504 return -EACCES;
4505 }
4506 /* replacing a healthy auditd is not allowed */
4507 if (auditd_pid && new_pid) {
4508 - rcu_read_unlock();
4509 audit_log_config_change("audit_pid", new_pid,
4510 auditd_pid, 0);
4511 return -EEXIST;
4512 }
4513 - rcu_read_unlock();
4514 -
4515 - if (audit_enabled != AUDIT_OFF)
4516 - audit_log_config_change("audit_pid", new_pid,
4517 - auditd_pid, 1);
4518
4519 if (new_pid) {
4520 /* register a new auditd connection */
4521 - auditd_set(new_pid,
4522 - NETLINK_CB(skb).portid,
4523 - sock_net(NETLINK_CB(skb).sk));
4524 + err = auditd_set(new_pid,
4525 + NETLINK_CB(skb).portid,
4526 + sock_net(NETLINK_CB(skb).sk));
4527 + if (audit_enabled != AUDIT_OFF)
4528 + audit_log_config_change("audit_pid",
4529 + new_pid,
4530 + auditd_pid,
4531 + err ? 0 : 1);
4532 + if (err)
4533 + return err;
4534 +
4535 /* try to process any backlog */
4536 wake_up_interruptible(&kauditd_wait);
4537 - } else
4538 + } else {
4539 + if (audit_enabled != AUDIT_OFF)
4540 + audit_log_config_change("audit_pid",
4541 + new_pid,
4542 + auditd_pid, 1);
4543 +
4544 /* unregister the auditd connection */
4545 auditd_reset();
4546 + }
4547 }
4548 if (s.mask & AUDIT_STATUS_RATE_LIMIT) {
4549 err = audit_set_rate_limit(s.rate_limit);
4550 @@ -1447,10 +1512,11 @@ static void __net_exit audit_net_exit(struct net *net)
4551 {
4552 struct audit_net *aunet = net_generic(net, audit_net_id);
4553
4554 - rcu_read_lock();
4555 - if (net == auditd_conn.net)
4556 - auditd_reset();
4557 - rcu_read_unlock();
4558 + /* NOTE: you would think that we would want to check the auditd
4559 + * connection and potentially reset it here if it lives in this
4560 + * namespace, but since the auditd connection tracking struct holds a
4561 + * reference to this namespace (see auditd_set()) we are only ever
4562 + * going to get here after that connection has been released */
4563
4564 netlink_kernel_release(aunet->sk);
4565 }
4566 @@ -1470,9 +1536,6 @@ static int __init audit_init(void)
4567 if (audit_initialized == AUDIT_DISABLED)
4568 return 0;
4569
4570 - memset(&auditd_conn, 0, sizeof(auditd_conn));
4571 - spin_lock_init(&auditd_conn.lock);
4572 -
4573 skb_queue_head_init(&audit_queue);
4574 skb_queue_head_init(&audit_retry_queue);
4575 skb_queue_head_init(&audit_hold_queue);
4576 diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
4577 index b507f1889a72..e21c9321101f 100644
4578 --- a/kernel/cgroup/cgroup.c
4579 +++ b/kernel/cgroup/cgroup.c
4580 @@ -436,7 +436,7 @@ struct cgroup_subsys_state *cgroup_get_e_css(struct cgroup *cgrp,
4581 return css;
4582 }
4583
4584 -static void cgroup_get(struct cgroup *cgrp)
4585 +static void __maybe_unused cgroup_get(struct cgroup *cgrp)
4586 {
4587 css_get(&cgrp->self);
4588 }
4589 @@ -4265,6 +4265,11 @@ static void kill_css(struct cgroup_subsys_state *css)
4590 {
4591 lockdep_assert_held(&cgroup_mutex);
4592
4593 + if (css->flags & CSS_DYING)
4594 + return;
4595 +
4596 + css->flags |= CSS_DYING;
4597 +
4598 /*
4599 * This must happen before css is disassociated with its cgroup.
4600 * See seq_css() for details.
4601 diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
4602 index 0f41292be0fb..943481230cf8 100644
4603 --- a/kernel/cgroup/cpuset.c
4604 +++ b/kernel/cgroup/cpuset.c
4605 @@ -176,9 +176,9 @@ typedef enum {
4606 } cpuset_flagbits_t;
4607
4608 /* convenient tests for these bits */
4609 -static inline bool is_cpuset_online(const struct cpuset *cs)
4610 +static inline bool is_cpuset_online(struct cpuset *cs)
4611 {
4612 - return test_bit(CS_ONLINE, &cs->flags);
4613 + return test_bit(CS_ONLINE, &cs->flags) && !css_is_dying(&cs->css);
4614 }
4615
4616 static inline int is_cpu_exclusive(const struct cpuset *cs)
4617 diff --git a/kernel/cpu.c b/kernel/cpu.c
4618 index 37b223e4fc05..e27838ab275d 100644
4619 --- a/kernel/cpu.c
4620 +++ b/kernel/cpu.c
4621 @@ -1656,13 +1656,13 @@ static ssize_t write_cpuhp_target(struct device *dev,
4622 ret = !sp->name || sp->cant_stop ? -EINVAL : 0;
4623 mutex_unlock(&cpuhp_state_mutex);
4624 if (ret)
4625 - return ret;
4626 + goto out;
4627
4628 if (st->state < target)
4629 ret = do_cpu_up(dev->id, target);
4630 else
4631 ret = do_cpu_down(dev->id, target);
4632 -
4633 +out:
4634 unlock_device_hotplug();
4635 return ret ? ret : count;
4636 }
4637 diff --git a/kernel/events/core.c b/kernel/events/core.c
4638 index ff01cba86f43..95c7fa675009 100644
4639 --- a/kernel/events/core.c
4640 +++ b/kernel/events/core.c
4641 @@ -7184,6 +7184,21 @@ int perf_event_account_interrupt(struct perf_event *event)
4642 return __perf_event_account_interrupt(event, 1);
4643 }
4644
4645 +static bool sample_is_allowed(struct perf_event *event, struct pt_regs *regs)
4646 +{
4647 + /*
4648 + * Due to interrupt latency (AKA "skid"), we may enter the
4649 + * kernel before taking an overflow, even if the PMU is only
4650 + * counting user events.
4651 + * To avoid leaking information to userspace, we must always
4652 + * reject kernel samples when exclude_kernel is set.
4653 + */
4654 + if (event->attr.exclude_kernel && !user_mode(regs))
4655 + return false;
4656 +
4657 + return true;
4658 +}
4659 +
4660 /*
4661 * Generic event overflow handling, sampling.
4662 */
4663 @@ -7205,6 +7220,12 @@ static int __perf_event_overflow(struct perf_event *event,
4664 ret = __perf_event_account_interrupt(event, throttle);
4665
4666 /*
4667 + * For security, drop the skid kernel samples if necessary.
4668 + */
4669 + if (!sample_is_allowed(event, regs))
4670 + return ret;
4671 +
4672 + /*
4673 * XXX event_limit might not quite work as expected on inherited
4674 * events
4675 */
4676 diff --git a/kernel/fork.c b/kernel/fork.c
4677 index 4cc564ece2cf..4f7151d1716b 100644
4678 --- a/kernel/fork.c
4679 +++ b/kernel/fork.c
4680 @@ -1552,6 +1552,18 @@ static __latent_entropy struct task_struct *copy_process(
4681 if (!p)
4682 goto fork_out;
4683
4684 + /*
4685 + * This _must_ happen before we call free_task(), i.e. before we jump
4686 + * to any of the bad_fork_* labels. This is to avoid freeing
4687 + * p->set_child_tid which is (ab)used as a kthread's data pointer for
4688 + * kernel threads (PF_KTHREAD).
4689 + */
4690 + p->set_child_tid = (clone_flags & CLONE_CHILD_SETTID) ? child_tidptr : NULL;
4691 + /*
4692 + * Clear TID on mm_release()?
4693 + */
4694 + p->clear_child_tid = (clone_flags & CLONE_CHILD_CLEARTID) ? child_tidptr : NULL;
4695 +
4696 ftrace_graph_init_task(p);
4697
4698 rt_mutex_init_task(p);
4699 @@ -1715,11 +1727,6 @@ static __latent_entropy struct task_struct *copy_process(
4700 }
4701 }
4702
4703 - p->set_child_tid = (clone_flags & CLONE_CHILD_SETTID) ? child_tidptr : NULL;
4704 - /*
4705 - * Clear TID on mm_release()?
4706 - */
4707 - p->clear_child_tid = (clone_flags & CLONE_CHILD_CLEARTID) ? child_tidptr : NULL;
4708 #ifdef CONFIG_BLOCK
4709 p->plug = NULL;
4710 #endif
4711 diff --git a/kernel/ptrace.c b/kernel/ptrace.c
4712 index 266ddcc1d8bb..60f356d91060 100644
4713 --- a/kernel/ptrace.c
4714 +++ b/kernel/ptrace.c
4715 @@ -60,19 +60,25 @@ int ptrace_access_vm(struct task_struct *tsk, unsigned long addr,
4716 }
4717
4718
4719 +void __ptrace_link(struct task_struct *child, struct task_struct *new_parent,
4720 + const struct cred *ptracer_cred)
4721 +{
4722 + BUG_ON(!list_empty(&child->ptrace_entry));
4723 + list_add(&child->ptrace_entry, &new_parent->ptraced);
4724 + child->parent = new_parent;
4725 + child->ptracer_cred = get_cred(ptracer_cred);
4726 +}
4727 +
4728 /*
4729 * ptrace a task: make the debugger its new parent and
4730 * move it to the ptrace list.
4731 *
4732 * Must be called with the tasklist lock write-held.
4733 */
4734 -void __ptrace_link(struct task_struct *child, struct task_struct *new_parent)
4735 +static void ptrace_link(struct task_struct *child, struct task_struct *new_parent)
4736 {
4737 - BUG_ON(!list_empty(&child->ptrace_entry));
4738 - list_add(&child->ptrace_entry, &new_parent->ptraced);
4739 - child->parent = new_parent;
4740 rcu_read_lock();
4741 - child->ptracer_cred = get_cred(__task_cred(new_parent));
4742 + __ptrace_link(child, new_parent, __task_cred(new_parent));
4743 rcu_read_unlock();
4744 }
4745
4746 @@ -386,7 +392,7 @@ static int ptrace_attach(struct task_struct *task, long request,
4747 flags |= PT_SEIZED;
4748 task->ptrace = flags;
4749
4750 - __ptrace_link(task, current);
4751 + ptrace_link(task, current);
4752
4753 /* SEIZE doesn't trap tracee on attach */
4754 if (!seize)
4755 @@ -459,7 +465,7 @@ static int ptrace_traceme(void)
4756 */
4757 if (!ret && !(current->real_parent->flags & PF_EXITING)) {
4758 current->ptrace = PT_PTRACED;
4759 - __ptrace_link(current, current->real_parent);
4760 + ptrace_link(current, current->real_parent);
4761 }
4762 }
4763 write_unlock_irq(&tasklist_lock);
4764 diff --git a/kernel/rcu/srcu.c b/kernel/rcu/srcu.c
4765 index ef3bcfb15b39..6e48a6b6a564 100644
4766 --- a/kernel/rcu/srcu.c
4767 +++ b/kernel/rcu/srcu.c
4768 @@ -257,7 +257,7 @@ EXPORT_SYMBOL_GPL(cleanup_srcu_struct);
4769
4770 /*
4771 * Counts the new reader in the appropriate per-CPU element of the
4772 - * srcu_struct. Must be called from process context.
4773 + * srcu_struct.
4774 * Returns an index that must be passed to the matching srcu_read_unlock().
4775 */
4776 int __srcu_read_lock(struct srcu_struct *sp)
4777 @@ -265,7 +265,7 @@ int __srcu_read_lock(struct srcu_struct *sp)
4778 int idx;
4779
4780 idx = READ_ONCE(sp->completed) & 0x1;
4781 - __this_cpu_inc(sp->per_cpu_ref->lock_count[idx]);
4782 + this_cpu_inc(sp->per_cpu_ref->lock_count[idx]);
4783 smp_mb(); /* B */ /* Avoid leaking the critical section. */
4784 return idx;
4785 }
4786 @@ -275,7 +275,6 @@ EXPORT_SYMBOL_GPL(__srcu_read_lock);
4787 * Removes the count for the old reader from the appropriate per-CPU
4788 * element of the srcu_struct. Note that this may well be a different
4789 * CPU than that which was incremented by the corresponding srcu_read_lock().
4790 - * Must be called from process context.
4791 */
4792 void __srcu_read_unlock(struct srcu_struct *sp, int idx)
4793 {
4794 diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
4795 index dd3e91d68dc7..8827ee31cbf5 100644
4796 --- a/kernel/trace/ftrace.c
4797 +++ b/kernel/trace/ftrace.c
4798 @@ -4859,7 +4859,7 @@ ftrace_graph_release(struct inode *inode, struct file *file)
4799 }
4800
4801 out:
4802 - kfree(fgd->new_hash);
4803 + free_ftrace_hash(fgd->new_hash);
4804 kfree(fgd);
4805
4806 return ret;
4807 diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
4808 index 0488c6735c46..8a05a98a8666 100644
4809 --- a/net/bridge/br_netlink.c
4810 +++ b/net/bridge/br_netlink.c
4811 @@ -591,7 +591,7 @@ static int br_afspec(struct net_bridge *br,
4812 err = 0;
4813 switch (nla_type(attr)) {
4814 case IFLA_BRIDGE_VLAN_TUNNEL_INFO:
4815 - if (!(p->flags & BR_VLAN_TUNNEL))
4816 + if (!p || !(p->flags & BR_VLAN_TUNNEL))
4817 return -EINVAL;
4818 err = br_parse_vlan_tunnel_info(attr, &tinfo_curr);
4819 if (err)
4820 diff --git a/net/bridge/br_stp_if.c b/net/bridge/br_stp_if.c
4821 index 0db8102995a5..6f12a5271219 100644
4822 --- a/net/bridge/br_stp_if.c
4823 +++ b/net/bridge/br_stp_if.c
4824 @@ -179,7 +179,8 @@ static void br_stp_start(struct net_bridge *br)
4825 br_debug(br, "using kernel STP\n");
4826
4827 /* To start timers on any ports left in blocking */
4828 - mod_timer(&br->hello_timer, jiffies + br->hello_time);
4829 + if (br->dev->flags & IFF_UP)
4830 + mod_timer(&br->hello_timer, jiffies + br->hello_time);
4831 br_port_state_selection(br);
4832 }
4833
4834 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
4835 index f1d04592ace0..ac5059aad313 100644
4836 --- a/net/core/skbuff.c
4837 +++ b/net/core/skbuff.c
4838 @@ -3755,8 +3755,11 @@ struct sk_buff *sock_dequeue_err_skb(struct sock *sk)
4839
4840 spin_lock_irqsave(&q->lock, flags);
4841 skb = __skb_dequeue(q);
4842 - if (skb && (skb_next = skb_peek(q)))
4843 + if (skb && (skb_next = skb_peek(q))) {
4844 icmp_next = is_icmp_err_skb(skb_next);
4845 + if (icmp_next)
4846 + sk->sk_err = SKB_EXT_ERR(skb_next)->ee.ee_origin;
4847 + }
4848 spin_unlock_irqrestore(&q->lock, flags);
4849
4850 if (is_icmp_err_skb(skb) && !icmp_next)
4851 diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
4852 index 737be6470c7f..ffaa4fb33d0a 100644
4853 --- a/net/dsa/dsa2.c
4854 +++ b/net/dsa/dsa2.c
4855 @@ -440,8 +440,10 @@ static void dsa_dst_unapply(struct dsa_switch_tree *dst)
4856 dsa_ds_unapply(dst, ds);
4857 }
4858
4859 - if (dst->cpu_switch)
4860 + if (dst->cpu_switch) {
4861 dsa_cpu_port_ethtool_restore(dst->cpu_switch);
4862 + dst->cpu_switch = NULL;
4863 + }
4864
4865 pr_info("DSA: tree %d unapplied\n", dst->tree);
4866 dst->applied = false;
4867 diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
4868 index 13a9a3297eae..b9c1bc5e54db 100644
4869 --- a/net/ipv4/af_inet.c
4870 +++ b/net/ipv4/af_inet.c
4871 @@ -1043,7 +1043,7 @@ static struct inet_protosw inetsw_array[] =
4872 .type = SOCK_DGRAM,
4873 .protocol = IPPROTO_ICMP,
4874 .prot = &ping_prot,
4875 - .ops = &inet_dgram_ops,
4876 + .ops = &inet_sockraw_ops,
4877 .flags = INET_PROTOSW_REUSE,
4878 },
4879
4880 diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c
4881 index 6e3c512054a6..324c9bcc5456 100644
4882 --- a/net/ipv4/tcp_cong.c
4883 +++ b/net/ipv4/tcp_cong.c
4884 @@ -180,6 +180,7 @@ void tcp_init_congestion_control(struct sock *sk)
4885 {
4886 const struct inet_connection_sock *icsk = inet_csk(sk);
4887
4888 + tcp_sk(sk)->prior_ssthresh = 0;
4889 if (icsk->icsk_ca_ops->init)
4890 icsk->icsk_ca_ops->init(sk);
4891 if (tcp_ca_needs_ecn(sk))
4892 diff --git a/net/ipv6/calipso.c b/net/ipv6/calipso.c
4893 index 37ac9de713c6..8d772fea1dde 100644
4894 --- a/net/ipv6/calipso.c
4895 +++ b/net/ipv6/calipso.c
4896 @@ -1319,7 +1319,7 @@ static int calipso_skbuff_setattr(struct sk_buff *skb,
4897 struct ipv6hdr *ip6_hdr;
4898 struct ipv6_opt_hdr *hop;
4899 unsigned char buf[CALIPSO_MAX_BUFFER];
4900 - int len_delta, new_end, pad;
4901 + int len_delta, new_end, pad, payload;
4902 unsigned int start, end;
4903
4904 ip6_hdr = ipv6_hdr(skb);
4905 @@ -1346,6 +1346,8 @@ static int calipso_skbuff_setattr(struct sk_buff *skb,
4906 if (ret_val < 0)
4907 return ret_val;
4908
4909 + ip6_hdr = ipv6_hdr(skb); /* Reset as skb_cow() may have moved it */
4910 +
4911 if (len_delta) {
4912 if (len_delta > 0)
4913 skb_push(skb, len_delta);
4914 @@ -1355,6 +1357,8 @@ static int calipso_skbuff_setattr(struct sk_buff *skb,
4915 sizeof(*ip6_hdr) + start);
4916 skb_reset_network_header(skb);
4917 ip6_hdr = ipv6_hdr(skb);
4918 + payload = ntohs(ip6_hdr->payload_len);
4919 + ip6_hdr->payload_len = htons(payload + len_delta);
4920 }
4921
4922 hop = (struct ipv6_opt_hdr *)(ip6_hdr + 1);
4923 diff --git a/net/ipv6/ip6_offload.c b/net/ipv6/ip6_offload.c
4924 index 280268f1dd7b..cdb3728faca7 100644
4925 --- a/net/ipv6/ip6_offload.c
4926 +++ b/net/ipv6/ip6_offload.c
4927 @@ -116,8 +116,10 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb,
4928
4929 if (udpfrag) {
4930 int err = ip6_find_1stfragopt(skb, &prevhdr);
4931 - if (err < 0)
4932 + if (err < 0) {
4933 + kfree_skb_list(segs);
4934 return ERR_PTR(err);
4935 + }
4936 fptr = (struct frag_hdr *)((u8 *)ipv6h + err);
4937 fptr->frag_off = htons(offset);
4938 if (skb->next)
4939 diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
4940 index 15ff33934f79..e2d7867f3112 100644
4941 --- a/net/ipv6/ip6_tunnel.c
4942 +++ b/net/ipv6/ip6_tunnel.c
4943 @@ -1095,6 +1095,9 @@ int ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev, __u8 dsfield,
4944
4945 if (!dst) {
4946 route_lookup:
4947 + /* add dsfield to flowlabel for route lookup */
4948 + fl6->flowlabel = ip6_make_flowinfo(dsfield, fl6->flowlabel);
4949 +
4950 dst = ip6_route_output(net, NULL, fl6);
4951
4952 if (dst->error)
4953 diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c
4954 index 9b522fa90e6d..ac826dd338ff 100644
4955 --- a/net/ipv6/ping.c
4956 +++ b/net/ipv6/ping.c
4957 @@ -192,7 +192,7 @@ static struct inet_protosw pingv6_protosw = {
4958 .type = SOCK_DGRAM,
4959 .protocol = IPPROTO_ICMPV6,
4960 .prot = &pingv6_prot,
4961 - .ops = &inet6_dgram_ops,
4962 + .ops = &inet6_sockraw_ops,
4963 .flags = INET_PROTOSW_REUSE,
4964 };
4965
4966 diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
4967 index 1f992d9e261d..60be012fe708 100644
4968 --- a/net/ipv6/raw.c
4969 +++ b/net/ipv6/raw.c
4970 @@ -1338,7 +1338,7 @@ void raw6_proc_exit(void)
4971 #endif /* CONFIG_PROC_FS */
4972
4973 /* Same as inet6_dgram_ops, sans udp_poll. */
4974 -static const struct proto_ops inet6_sockraw_ops = {
4975 +const struct proto_ops inet6_sockraw_ops = {
4976 .family = PF_INET6,
4977 .owner = THIS_MODULE,
4978 .release = inet6_release,
4979 diff --git a/net/ipv6/xfrm6_mode_ro.c b/net/ipv6/xfrm6_mode_ro.c
4980 index 0e015906f9ca..07d36573f50b 100644
4981 --- a/net/ipv6/xfrm6_mode_ro.c
4982 +++ b/net/ipv6/xfrm6_mode_ro.c
4983 @@ -47,6 +47,8 @@ static int xfrm6_ro_output(struct xfrm_state *x, struct sk_buff *skb)
4984 iph = ipv6_hdr(skb);
4985
4986 hdr_len = x->type->hdr_offset(x, skb, &prevhdr);
4987 + if (hdr_len < 0)
4988 + return hdr_len;
4989 skb_set_mac_header(skb, (prevhdr - x->props.header_len) - skb->data);
4990 skb_set_network_header(skb, -x->props.header_len);
4991 skb->transport_header = skb->network_header + hdr_len;
4992 diff --git a/net/ipv6/xfrm6_mode_transport.c b/net/ipv6/xfrm6_mode_transport.c
4993 index 4439ee44c8b0..5e304102287c 100644
4994 --- a/net/ipv6/xfrm6_mode_transport.c
4995 +++ b/net/ipv6/xfrm6_mode_transport.c
4996 @@ -28,6 +28,8 @@ static int xfrm6_transport_output(struct xfrm_state *x, struct sk_buff *skb)
4997 iph = ipv6_hdr(skb);
4998
4999 hdr_len = x->type->hdr_offset(x, skb, &prevhdr);
5000 + if (hdr_len < 0)
5001 + return hdr_len;
5002 skb_set_mac_header(skb, (prevhdr - x->props.header_len) - skb->data);
5003 skb_set_network_header(skb, -x->props.header_len);
5004 skb->transport_header = skb->network_header + hdr_len;
5005 diff --git a/net/netfilter/nft_set_rbtree.c b/net/netfilter/nft_set_rbtree.c
5006 index 78dfbf9588b3..99aff9618fb8 100644
5007 --- a/net/netfilter/nft_set_rbtree.c
5008 +++ b/net/netfilter/nft_set_rbtree.c
5009 @@ -117,17 +117,17 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set,
5010 else if (d > 0)
5011 p = &parent->rb_right;
5012 else {
5013 - if (nft_set_elem_active(&rbe->ext, genmask)) {
5014 - if (nft_rbtree_interval_end(rbe) &&
5015 - !nft_rbtree_interval_end(new))
5016 - p = &parent->rb_left;
5017 - else if (!nft_rbtree_interval_end(rbe) &&
5018 - nft_rbtree_interval_end(new))
5019 - p = &parent->rb_right;
5020 - else {
5021 - *ext = &rbe->ext;
5022 - return -EEXIST;
5023 - }
5024 + if (nft_rbtree_interval_end(rbe) &&
5025 + !nft_rbtree_interval_end(new)) {
5026 + p = &parent->rb_left;
5027 + } else if (!nft_rbtree_interval_end(rbe) &&
5028 + nft_rbtree_interval_end(new)) {
5029 + p = &parent->rb_right;
5030 + } else if (nft_set_elem_active(&rbe->ext, genmask)) {
5031 + *ext = &rbe->ext;
5032 + return -EEXIST;
5033 + } else {
5034 + p = &parent->rb_left;
5035 }
5036 }
5037 }
5038 diff --git a/security/keys/encrypted-keys/encrypted.c b/security/keys/encrypted-keys/encrypted.c
5039 index 0010955d7876..1845d47474a0 100644
5040 --- a/security/keys/encrypted-keys/encrypted.c
5041 +++ b/security/keys/encrypted-keys/encrypted.c
5042 @@ -480,12 +480,9 @@ static int derived_key_encrypt(struct encrypted_key_payload *epayload,
5043 struct skcipher_request *req;
5044 unsigned int encrypted_datalen;
5045 u8 iv[AES_BLOCK_SIZE];
5046 - unsigned int padlen;
5047 - char pad[16];
5048 int ret;
5049
5050 encrypted_datalen = roundup(epayload->decrypted_datalen, blksize);
5051 - padlen = encrypted_datalen - epayload->decrypted_datalen;
5052
5053 req = init_skcipher_req(derived_key, derived_keylen);
5054 ret = PTR_ERR(req);
5055 @@ -493,11 +490,10 @@ static int derived_key_encrypt(struct encrypted_key_payload *epayload,
5056 goto out;
5057 dump_decrypted_data(epayload);
5058
5059 - memset(pad, 0, sizeof pad);
5060 sg_init_table(sg_in, 2);
5061 sg_set_buf(&sg_in[0], epayload->decrypted_data,
5062 epayload->decrypted_datalen);
5063 - sg_set_buf(&sg_in[1], pad, padlen);
5064 + sg_set_page(&sg_in[1], ZERO_PAGE(0), AES_BLOCK_SIZE, 0);
5065
5066 sg_init_table(sg_out, 1);
5067 sg_set_buf(sg_out, epayload->encrypted_data, encrypted_datalen);
5068 @@ -584,9 +580,14 @@ static int derived_key_decrypt(struct encrypted_key_payload *epayload,
5069 struct skcipher_request *req;
5070 unsigned int encrypted_datalen;
5071 u8 iv[AES_BLOCK_SIZE];
5072 - char pad[16];
5073 + u8 *pad;
5074 int ret;
5075
5076 + /* Throwaway buffer to hold the unused zero padding at the end */
5077 + pad = kmalloc(AES_BLOCK_SIZE, GFP_KERNEL);
5078 + if (!pad)
5079 + return -ENOMEM;
5080 +
5081 encrypted_datalen = roundup(epayload->decrypted_datalen, blksize);
5082 req = init_skcipher_req(derived_key, derived_keylen);
5083 ret = PTR_ERR(req);
5084 @@ -594,13 +595,12 @@ static int derived_key_decrypt(struct encrypted_key_payload *epayload,
5085 goto out;
5086 dump_encrypted_data(epayload, encrypted_datalen);
5087
5088 - memset(pad, 0, sizeof pad);
5089 sg_init_table(sg_in, 1);
5090 sg_init_table(sg_out, 2);
5091 sg_set_buf(sg_in, epayload->encrypted_data, encrypted_datalen);
5092 sg_set_buf(&sg_out[0], epayload->decrypted_data,
5093 epayload->decrypted_datalen);
5094 - sg_set_buf(&sg_out[1], pad, sizeof pad);
5095 + sg_set_buf(&sg_out[1], pad, AES_BLOCK_SIZE);
5096
5097 memcpy(iv, epayload->iv, sizeof(iv));
5098 skcipher_request_set_crypt(req, sg_in, sg_out, encrypted_datalen, iv);
5099 @@ -612,6 +612,7 @@ static int derived_key_decrypt(struct encrypted_key_payload *epayload,
5100 goto out;
5101 dump_decrypted_data(epayload);
5102 out:
5103 + kfree(pad);
5104 return ret;
5105 }
5106
5107 diff --git a/security/keys/key.c b/security/keys/key.c
5108 index 346fbf201c22..2f4ce35ae2aa 100644
5109 --- a/security/keys/key.c
5110 +++ b/security/keys/key.c
5111 @@ -962,12 +962,11 @@ int key_update(key_ref_t key_ref, const void *payload, size_t plen)
5112 /* the key must be writable */
5113 ret = key_permission(key_ref, KEY_NEED_WRITE);
5114 if (ret < 0)
5115 - goto error;
5116 + return ret;
5117
5118 /* attempt to update it if supported */
5119 - ret = -EOPNOTSUPP;
5120 if (!key->type->update)
5121 - goto error;
5122 + return -EOPNOTSUPP;
5123
5124 memset(&prep, 0, sizeof(prep));
5125 prep.data = payload;
5126 diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
5127 index 4ad3212adebe..3663a98b473d 100644
5128 --- a/security/keys/keyctl.c
5129 +++ b/security/keys/keyctl.c
5130 @@ -99,7 +99,7 @@ SYSCALL_DEFINE5(add_key, const char __user *, _type,
5131 /* pull the payload in if one was supplied */
5132 payload = NULL;
5133
5134 - if (_payload) {
5135 + if (plen) {
5136 ret = -ENOMEM;
5137 payload = kmalloc(plen, GFP_KERNEL | __GFP_NOWARN);
5138 if (!payload) {
5139 @@ -329,7 +329,7 @@ long keyctl_update_key(key_serial_t id,
5140
5141 /* pull the payload in if one was supplied */
5142 payload = NULL;
5143 - if (_payload) {
5144 + if (plen) {
5145 ret = -ENOMEM;
5146 payload = kmalloc(plen, GFP_KERNEL);
5147 if (!payload)
5148 diff --git a/sound/core/timer.c b/sound/core/timer.c
5149 index 6d4fbc439246..171c01ad9375 100644
5150 --- a/sound/core/timer.c
5151 +++ b/sound/core/timer.c
5152 @@ -1623,6 +1623,7 @@ static int snd_timer_user_tselect(struct file *file,
5153 if (err < 0)
5154 goto __err;
5155
5156 + tu->qhead = tu->qtail = tu->qused = 0;
5157 kfree(tu->queue);
5158 tu->queue = NULL;
5159 kfree(tu->tqueue);
5160 @@ -1964,6 +1965,7 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
5161
5162 tu = file->private_data;
5163 unit = tu->tread ? sizeof(struct snd_timer_tread) : sizeof(struct snd_timer_read);
5164 + mutex_lock(&tu->ioctl_lock);
5165 spin_lock_irq(&tu->qlock);
5166 while ((long)count - result >= unit) {
5167 while (!tu->qused) {
5168 @@ -1979,7 +1981,9 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
5169 add_wait_queue(&tu->qchange_sleep, &wait);
5170
5171 spin_unlock_irq(&tu->qlock);
5172 + mutex_unlock(&tu->ioctl_lock);
5173 schedule();
5174 + mutex_lock(&tu->ioctl_lock);
5175 spin_lock_irq(&tu->qlock);
5176
5177 remove_wait_queue(&tu->qchange_sleep, &wait);
5178 @@ -1999,7 +2003,6 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
5179 tu->qused--;
5180 spin_unlock_irq(&tu->qlock);
5181
5182 - mutex_lock(&tu->ioctl_lock);
5183 if (tu->tread) {
5184 if (copy_to_user(buffer, &tu->tqueue[qhead],
5185 sizeof(struct snd_timer_tread)))
5186 @@ -2009,7 +2012,6 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
5187 sizeof(struct snd_timer_read)))
5188 err = -EFAULT;
5189 }
5190 - mutex_unlock(&tu->ioctl_lock);
5191
5192 spin_lock_irq(&tu->qlock);
5193 if (err < 0)
5194 @@ -2019,6 +2021,7 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
5195 }
5196 _error:
5197 spin_unlock_irq(&tu->qlock);
5198 + mutex_unlock(&tu->ioctl_lock);
5199 return result > 0 ? result : err;
5200 }
5201
5202 diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
5203 index 2722bb0c5573..98d60f471c5d 100644
5204 --- a/sound/soc/soc-core.c
5205 +++ b/sound/soc/soc-core.c
5206 @@ -2286,6 +2286,9 @@ static int soc_cleanup_card_resources(struct snd_soc_card *card)
5207 list_for_each_entry(rtd, &card->rtd_list, list)
5208 flush_delayed_work(&rtd->delayed_work);
5209
5210 + /* free the ALSA card at first; this syncs with pending operations */
5211 + snd_card_free(card->snd_card);
5212 +
5213 /* remove and free each DAI */
5214 soc_remove_dai_links(card);
5215 soc_remove_pcm_runtimes(card);
5216 @@ -2300,9 +2303,7 @@ static int soc_cleanup_card_resources(struct snd_soc_card *card)
5217 if (card->remove)
5218 card->remove(card);
5219
5220 - snd_card_free(card->snd_card);
5221 return 0;
5222 -
5223 }
5224
5225 /* removes a socdev */
5226 diff --git a/sound/x86/intel_hdmi_audio.c b/sound/x86/intel_hdmi_audio.c
5227 index c505b019e09c..bfac6f21ae5e 100644
5228 --- a/sound/x86/intel_hdmi_audio.c
5229 +++ b/sound/x86/intel_hdmi_audio.c
5230 @@ -1809,10 +1809,6 @@ static int hdmi_lpe_audio_probe(struct platform_device *pdev)
5231 pdata->notify_pending = false;
5232 spin_unlock_irq(&pdata->lpe_audio_slock);
5233
5234 - /* runtime PM isn't enabled as default, since it won't save much on
5235 - * BYT/CHT devices; user who want the runtime PM should adjust the
5236 - * power/ontrol and power/autosuspend_delay_ms sysfs entries instead
5237 - */
5238 pm_runtime_use_autosuspend(&pdev->dev);
5239 pm_runtime_mark_last_busy(&pdev->dev);
5240 pm_runtime_set_active(&pdev->dev);