Magellan Linux

Contents of /trunk/kernel-magellan/patches-3.18/0102-3.18.3-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2543 - (show annotations) (download)
Fri Feb 20 13:15:30 2015 UTC (9 years, 2 months ago) by niro
File size: 156472 byte(s)
-linux-3.18.3
1 diff --git a/Documentation/devicetree/bindings/i2c/i2c-designware.txt b/Documentation/devicetree/bindings/i2c/i2c-designware.txt
2 index 5199b0c8cf7a..fee26dc3e858 100644
3 --- a/Documentation/devicetree/bindings/i2c/i2c-designware.txt
4 +++ b/Documentation/devicetree/bindings/i2c/i2c-designware.txt
5 @@ -14,10 +14,10 @@ Optional properties :
6 - i2c-sda-hold-time-ns : should contain the SDA hold time in nanoseconds.
7 This option is only supported in hardware blocks version 1.11a or newer.
8
9 - - i2c-scl-falling-time : should contain the SCL falling time in nanoseconds.
10 + - i2c-scl-falling-time-ns : should contain the SCL falling time in nanoseconds.
11 This value which is by default 300ns is used to compute the tLOW period.
12
13 - - i2c-sda-falling-time : should contain the SDA falling time in nanoseconds.
14 + - i2c-sda-falling-time-ns : should contain the SDA falling time in nanoseconds.
15 This value which is by default 300ns is used to compute the tHIGH period.
16
17 Example :
18 diff --git a/Documentation/ramoops.txt b/Documentation/ramoops.txt
19 index 69b3cac4749d..5d8675615e59 100644
20 --- a/Documentation/ramoops.txt
21 +++ b/Documentation/ramoops.txt
22 @@ -14,11 +14,19 @@ survive after a restart.
23
24 1. Ramoops concepts
25
26 -Ramoops uses a predefined memory area to store the dump. The start and size of
27 -the memory area are set using two variables:
28 +Ramoops uses a predefined memory area to store the dump. The start and size
29 +and type of the memory area are set using three variables:
30 * "mem_address" for the start
31 * "mem_size" for the size. The memory size will be rounded down to a
32 power of two.
33 + * "mem_type" to specifiy if the memory type (default is pgprot_writecombine).
34 +
35 +Typically the default value of mem_type=0 should be used as that sets the pstore
36 +mapping to pgprot_writecombine. Setting mem_type=1 attempts to use
37 +pgprot_noncached, which only works on some platforms. This is because pstore
38 +depends on atomic operations. At least on ARM, pgprot_noncached causes the
39 +memory to be mapped strongly ordered, and atomic operations on strongly ordered
40 +memory are implementation defined, and won't work on many ARMs such as omaps.
41
42 The memory area is divided into "record_size" chunks (also rounded down to
43 power of two) and each oops/panic writes a "record_size" chunk of
44 @@ -55,6 +63,7 @@ Setting the ramoops parameters can be done in 2 different manners:
45 static struct ramoops_platform_data ramoops_data = {
46 .mem_size = <...>,
47 .mem_address = <...>,
48 + .mem_type = <...>,
49 .record_size = <...>,
50 .dump_oops = <...>,
51 .ecc = <...>,
52 diff --git a/Makefile b/Makefile
53 index 8f73b417dc1a..91cfe8d5ee06 100644
54 --- a/Makefile
55 +++ b/Makefile
56 @@ -1,6 +1,6 @@
57 VERSION = 3
58 PATCHLEVEL = 18
59 -SUBLEVEL = 2
60 +SUBLEVEL = 3
61 EXTRAVERSION =
62 NAME = Diseased Newt
63
64 diff --git a/arch/arm/boot/dts/am437x-sk-evm.dts b/arch/arm/boot/dts/am437x-sk-evm.dts
65 index 87aa4f3b8b3d..53bbfc90b26a 100644
66 --- a/arch/arm/boot/dts/am437x-sk-evm.dts
67 +++ b/arch/arm/boot/dts/am437x-sk-evm.dts
68 @@ -100,7 +100,7 @@
69 };
70
71 lcd0: display {
72 - compatible = "osddisplays,osd057T0559-34ts", "panel-dpi";
73 + compatible = "newhaven,nhd-4.3-480272ef-atxl", "panel-dpi";
74 label = "lcd";
75
76 pinctrl-names = "default";
77 @@ -112,11 +112,11 @@
78 clock-frequency = <9000000>;
79 hactive = <480>;
80 vactive = <272>;
81 - hfront-porch = <8>;
82 - hback-porch = <43>;
83 - hsync-len = <4>;
84 - vback-porch = <12>;
85 - vfront-porch = <4>;
86 + hfront-porch = <2>;
87 + hback-porch = <2>;
88 + hsync-len = <41>;
89 + vfront-porch = <2>;
90 + vback-porch = <2>;
91 vsync-len = <10>;
92 hsync-active = <0>;
93 vsync-active = <0>;
94 @@ -320,8 +320,7 @@
95
96 lcd_pins: lcd_pins {
97 pinctrl-single,pins = <
98 - /* GPIO 5_8 to select LCD / HDMI */
99 - 0x238 (PIN_OUTPUT_PULLUP | MUX_MODE7)
100 + 0x1c (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpcm_ad7.gpio1_7 */
101 >;
102 };
103 };
104 diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi
105 index 9cc98436a982..666e796847d8 100644
106 --- a/arch/arm/boot/dts/dra7.dtsi
107 +++ b/arch/arm/boot/dts/dra7.dtsi
108 @@ -653,7 +653,7 @@
109 };
110
111 wdt2: wdt@4ae14000 {
112 - compatible = "ti,omap4-wdt";
113 + compatible = "ti,omap3-wdt";
114 reg = <0x4ae14000 0x80>;
115 interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
116 ti,hwmods = "wd_timer2";
117 diff --git a/arch/arm/boot/dts/s3c6410-mini6410.dts b/arch/arm/boot/dts/s3c6410-mini6410.dts
118 index 57e00f9bce99..a25debb50401 100644
119 --- a/arch/arm/boot/dts/s3c6410-mini6410.dts
120 +++ b/arch/arm/boot/dts/s3c6410-mini6410.dts
121 @@ -198,10 +198,6 @@
122 status = "okay";
123 };
124
125 -&pwm {
126 - status = "okay";
127 -};
128 -
129 &pinctrl0 {
130 gpio_leds: gpio-leds {
131 samsung,pins = "gpk-4", "gpk-5", "gpk-6", "gpk-7";
132 diff --git a/arch/arm/boot/dts/s3c64xx.dtsi b/arch/arm/boot/dts/s3c64xx.dtsi
133 index ff5bdaac987a..0ccb414cd268 100644
134 --- a/arch/arm/boot/dts/s3c64xx.dtsi
135 +++ b/arch/arm/boot/dts/s3c64xx.dtsi
136 @@ -172,7 +172,6 @@
137 clocks = <&clocks PCLK_PWM>;
138 samsung,pwm-outputs = <0>, <1>;
139 #pwm-cells = <3>;
140 - status = "disabled";
141 };
142
143 pinctrl0: pinctrl@7f008000 {
144 diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
145 index 9d7a32f93fcf..37560f19d346 100644
146 --- a/arch/arm/configs/multi_v7_defconfig
147 +++ b/arch/arm/configs/multi_v7_defconfig
148 @@ -320,6 +320,7 @@ CONFIG_USB=y
149 CONFIG_USB_XHCI_HCD=y
150 CONFIG_USB_XHCI_MVEBU=y
151 CONFIG_USB_EHCI_HCD=y
152 +CONFIG_USB_EHCI_EXYNOS=y
153 CONFIG_USB_EHCI_TEGRA=y
154 CONFIG_USB_EHCI_HCD_PLATFORM=y
155 CONFIG_USB_ISP1760_HCD=y
156 @@ -445,4 +446,4 @@ CONFIG_DEBUG_FS=y
157 CONFIG_MAGIC_SYSRQ=y
158 CONFIG_LOCKUP_DETECTOR=y
159 CONFIG_CRYPTO_DEV_TEGRA_AES=y
160 -CONFIG_GENERIC_CPUFREQ_CPU0=y
161 +CONFIG_CPUFREQ_DT=y
162 diff --git a/arch/arm/configs/shmobile_defconfig b/arch/arm/configs/shmobile_defconfig
163 index d7346ad51043..bfe79d5b8213 100644
164 --- a/arch/arm/configs/shmobile_defconfig
165 +++ b/arch/arm/configs/shmobile_defconfig
166 @@ -176,5 +176,5 @@ CONFIG_CPU_FREQ_GOV_USERSPACE=y
167 CONFIG_CPU_FREQ_GOV_ONDEMAND=y
168 CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
169 CONFIG_CPU_THERMAL=y
170 -CONFIG_GENERIC_CPUFREQ_CPU0=y
171 +CONFIG_CPUFREQ_DT=y
172 CONFIG_REGULATOR_DA9210=y
173 diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
174 index c03106378b49..306e1ac2c8e3 100644
175 --- a/arch/arm/kernel/setup.c
176 +++ b/arch/arm/kernel/setup.c
177 @@ -1043,6 +1043,15 @@ static int c_show(struct seq_file *m, void *v)
178 seq_printf(m, "model name\t: %s rev %d (%s)\n",
179 cpu_name, cpuid & 15, elf_platform);
180
181 +#if defined(CONFIG_SMP)
182 + seq_printf(m, "BogoMIPS\t: %lu.%02lu\n",
183 + per_cpu(cpu_data, i).loops_per_jiffy / (500000UL/HZ),
184 + (per_cpu(cpu_data, i).loops_per_jiffy / (5000UL/HZ)) % 100);
185 +#else
186 + seq_printf(m, "BogoMIPS\t: %lu.%02lu\n",
187 + loops_per_jiffy / (500000/HZ),
188 + (loops_per_jiffy / (5000/HZ)) % 100);
189 +#endif
190 /* dump out the processor features */
191 seq_puts(m, "Features\t: ");
192
193 diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
194 index 13396d3d600e..a8e32aaf0383 100644
195 --- a/arch/arm/kernel/smp.c
196 +++ b/arch/arm/kernel/smp.c
197 @@ -387,8 +387,17 @@ asmlinkage void secondary_start_kernel(void)
198
199 void __init smp_cpus_done(unsigned int max_cpus)
200 {
201 - printk(KERN_INFO "SMP: Total of %d processors activated.\n",
202 - num_online_cpus());
203 + int cpu;
204 + unsigned long bogosum = 0;
205 +
206 + for_each_online_cpu(cpu)
207 + bogosum += per_cpu(cpu_data, cpu).loops_per_jiffy;
208 +
209 + printk(KERN_INFO "SMP: Total of %d processors activated "
210 + "(%lu.%02lu BogoMIPS).\n",
211 + num_online_cpus(),
212 + bogosum / (500000/HZ),
213 + (bogosum / (5000/HZ)) % 100);
214
215 hyp_mode_check();
216 }
217 diff --git a/arch/arm/mach-omap2/pm44xx.c b/arch/arm/mach-omap2/pm44xx.c
218 index 503097c72b82..e7f823b960c2 100644
219 --- a/arch/arm/mach-omap2/pm44xx.c
220 +++ b/arch/arm/mach-omap2/pm44xx.c
221 @@ -160,26 +160,6 @@ static inline int omap4_init_static_deps(void)
222 struct clockdomain *ducati_clkdm, *l3_2_clkdm;
223 int ret = 0;
224
225 - if (omap_rev() == OMAP4430_REV_ES1_0) {
226 - WARN(1, "Power Management not supported on OMAP4430 ES1.0\n");
227 - return -ENODEV;
228 - }
229 -
230 - pr_err("Power Management for TI OMAP4.\n");
231 - /*
232 - * OMAP4 chip PM currently works only with certain (newer)
233 - * versions of bootloaders. This is due to missing code in the
234 - * kernel to properly reset and initialize some devices.
235 - * http://www.spinics.net/lists/arm-kernel/msg218641.html
236 - */
237 - pr_warn("OMAP4 PM: u-boot >= v2012.07 is required for full PM support\n");
238 -
239 - ret = pwrdm_for_each(pwrdms_setup, NULL);
240 - if (ret) {
241 - pr_err("Failed to setup powerdomains\n");
242 - return ret;
243 - }
244 -
245 /*
246 * The dynamic dependency between MPUSS -> MEMIF and
247 * MPUSS -> L4_PER/L3_* and DUCATI -> L3_* doesn't work as
248 @@ -272,6 +252,15 @@ int __init omap4_pm_init(void)
249
250 pr_info("Power Management for TI OMAP4+ devices.\n");
251
252 + /*
253 + * OMAP4 chip PM currently works only with certain (newer)
254 + * versions of bootloaders. This is due to missing code in the
255 + * kernel to properly reset and initialize some devices.
256 + * http://www.spinics.net/lists/arm-kernel/msg218641.html
257 + */
258 + if (cpu_is_omap44xx())
259 + pr_warn("OMAP4 PM: u-boot >= v2012.07 is required for full PM support\n");
260 +
261 ret = pwrdm_for_each(pwrdms_setup, NULL);
262 if (ret) {
263 pr_err("Failed to setup powerdomains.\n");
264 diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c
265 index 95c49ebc660d..1d85a7c5a850 100644
266 --- a/arch/arm64/kernel/efi.c
267 +++ b/arch/arm64/kernel/efi.c
268 @@ -327,6 +327,7 @@ void __init efi_idmap_init(void)
269
270 /* boot time idmap_pg_dir is incomplete, so fill in missing parts */
271 efi_setup_idmap();
272 + early_memunmap(memmap.map, memmap.map_end - memmap.map);
273 }
274
275 static int __init remap_region(efi_memory_desc_t *md, void **new)
276 @@ -381,7 +382,6 @@ static int __init arm64_enter_virtual_mode(void)
277 }
278
279 mapsize = memmap.map_end - memmap.map;
280 - early_memunmap(memmap.map, mapsize);
281
282 if (efi_runtime_disabled()) {
283 pr_info("EFI runtime services will be disabled.\n");
284 diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
285 index f9620154bfb0..64c4f0800ee3 100644
286 --- a/arch/arm64/kernel/setup.c
287 +++ b/arch/arm64/kernel/setup.c
288 @@ -394,6 +394,7 @@ void __init setup_arch(char **cmdline_p)
289 request_standard_resources();
290
291 efi_idmap_init();
292 + early_ioremap_reset();
293
294 unflatten_device_tree();
295
296 diff --git a/arch/arm64/kernel/sleep.S b/arch/arm64/kernel/sleep.S
297 index a564b440416a..ede186cdd452 100644
298 --- a/arch/arm64/kernel/sleep.S
299 +++ b/arch/arm64/kernel/sleep.S
300 @@ -147,14 +147,12 @@ cpu_resume_after_mmu:
301 ret
302 ENDPROC(cpu_resume_after_mmu)
303
304 - .data
305 ENTRY(cpu_resume)
306 bl el2_setup // if in EL2 drop to EL1 cleanly
307 #ifdef CONFIG_SMP
308 mrs x1, mpidr_el1
309 - adr x4, mpidr_hash_ptr
310 - ldr x5, [x4]
311 - add x8, x4, x5 // x8 = struct mpidr_hash phys address
312 + adrp x8, mpidr_hash
313 + add x8, x8, #:lo12:mpidr_hash // x8 = struct mpidr_hash phys address
314 /* retrieve mpidr_hash members to compute the hash */
315 ldr x2, [x8, #MPIDR_HASH_MASK]
316 ldp w3, w4, [x8, #MPIDR_HASH_SHIFTS]
317 @@ -164,14 +162,15 @@ ENTRY(cpu_resume)
318 #else
319 mov x7, xzr
320 #endif
321 - adr x0, sleep_save_sp
322 + adrp x0, sleep_save_sp
323 + add x0, x0, #:lo12:sleep_save_sp
324 ldr x0, [x0, #SLEEP_SAVE_SP_PHYS]
325 ldr x0, [x0, x7, lsl #3]
326 /* load sp from context */
327 ldr x2, [x0, #CPU_CTX_SP]
328 - adr x1, sleep_idmap_phys
329 + adrp x1, sleep_idmap_phys
330 /* load physical address of identity map page table in x1 */
331 - ldr x1, [x1]
332 + ldr x1, [x1, #:lo12:sleep_idmap_phys]
333 mov sp, x2
334 /*
335 * cpu_do_resume expects x0 to contain context physical address
336 @@ -180,26 +179,3 @@ ENTRY(cpu_resume)
337 bl cpu_do_resume // PC relative jump, MMU off
338 b cpu_resume_mmu // Resume MMU, never returns
339 ENDPROC(cpu_resume)
340 -
341 - .align 3
342 -mpidr_hash_ptr:
343 - /*
344 - * offset of mpidr_hash symbol from current location
345 - * used to obtain run-time mpidr_hash address with MMU off
346 - */
347 - .quad mpidr_hash - .
348 -/*
349 - * physical address of identity mapped page tables
350 - */
351 - .type sleep_idmap_phys, #object
352 -ENTRY(sleep_idmap_phys)
353 - .quad 0
354 -/*
355 - * struct sleep_save_sp {
356 - * phys_addr_t *save_ptr_stash;
357 - * phys_addr_t save_ptr_stash_phys;
358 - * };
359 - */
360 - .type sleep_save_sp, #object
361 -ENTRY(sleep_save_sp)
362 - .space SLEEP_SAVE_SP_SZ // struct sleep_save_sp
363 diff --git a/arch/arm64/kernel/suspend.c b/arch/arm64/kernel/suspend.c
364 index 13ad4dbb1615..2d6b6065fe7f 100644
365 --- a/arch/arm64/kernel/suspend.c
366 +++ b/arch/arm64/kernel/suspend.c
367 @@ -5,6 +5,7 @@
368 #include <asm/debug-monitors.h>
369 #include <asm/pgtable.h>
370 #include <asm/memory.h>
371 +#include <asm/mmu_context.h>
372 #include <asm/smp_plat.h>
373 #include <asm/suspend.h>
374 #include <asm/tlbflush.h>
375 @@ -98,7 +99,18 @@ int __cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
376 */
377 ret = __cpu_suspend_enter(arg, fn);
378 if (ret == 0) {
379 - cpu_switch_mm(mm->pgd, mm);
380 + /*
381 + * We are resuming from reset with TTBR0_EL1 set to the
382 + * idmap to enable the MMU; restore the active_mm mappings in
383 + * TTBR0_EL1 unless the active_mm == &init_mm, in which case
384 + * the thread entered __cpu_suspend with TTBR0_EL1 set to
385 + * reserved TTBR0 page tables and should be restored as such.
386 + */
387 + if (mm == &init_mm)
388 + cpu_set_reserved_ttbr0();
389 + else
390 + cpu_switch_mm(mm->pgd, mm);
391 +
392 flush_tlb_all();
393
394 /*
395 @@ -126,8 +138,8 @@ int __cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
396 return ret;
397 }
398
399 -extern struct sleep_save_sp sleep_save_sp;
400 -extern phys_addr_t sleep_idmap_phys;
401 +struct sleep_save_sp sleep_save_sp;
402 +phys_addr_t sleep_idmap_phys;
403
404 static int __init cpu_suspend_init(void)
405 {
406 diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
407 index c998279bd85b..a68ee15964b3 100644
408 --- a/arch/powerpc/include/asm/reg.h
409 +++ b/arch/powerpc/include/asm/reg.h
410 @@ -118,8 +118,10 @@
411 #define __MSR (MSR_ME | MSR_RI | MSR_IR | MSR_DR | MSR_ISF |MSR_HV)
412 #ifdef __BIG_ENDIAN__
413 #define MSR_ __MSR
414 +#define MSR_IDLE (MSR_ME | MSR_SF | MSR_HV)
415 #else
416 #define MSR_ (__MSR | MSR_LE)
417 +#define MSR_IDLE (MSR_ME | MSR_SF | MSR_HV | MSR_LE)
418 #endif
419 #define MSR_KERNEL (MSR_ | MSR_64BIT)
420 #define MSR_USER32 (MSR_ | MSR_PR | MSR_EE)
421 diff --git a/arch/powerpc/include/asm/syscall.h b/arch/powerpc/include/asm/syscall.h
422 index 6240698fee9a..ff21b7a2f0cc 100644
423 --- a/arch/powerpc/include/asm/syscall.h
424 +++ b/arch/powerpc/include/asm/syscall.h
425 @@ -90,6 +90,10 @@ static inline void syscall_set_arguments(struct task_struct *task,
426
427 static inline int syscall_get_arch(void)
428 {
429 - return is_32bit_task() ? AUDIT_ARCH_PPC : AUDIT_ARCH_PPC64;
430 + int arch = is_32bit_task() ? AUDIT_ARCH_PPC : AUDIT_ARCH_PPC64;
431 +#ifdef __LITTLE_ENDIAN__
432 + arch |= __AUDIT_ARCH_LE;
433 +#endif
434 + return arch;
435 }
436 #endif /* _ASM_SYSCALL_H */
437 diff --git a/arch/powerpc/kernel/idle_power7.S b/arch/powerpc/kernel/idle_power7.S
438 index c0754bbf8118..283c603716a0 100644
439 --- a/arch/powerpc/kernel/idle_power7.S
440 +++ b/arch/powerpc/kernel/idle_power7.S
441 @@ -101,7 +101,23 @@ _GLOBAL(power7_powersave_common)
442 std r9,_MSR(r1)
443 std r1,PACAR1(r13)
444
445 -_GLOBAL(power7_enter_nap_mode)
446 + /*
447 + * Go to real mode to do the nap, as required by the architecture.
448 + * Also, we need to be in real mode before setting hwthread_state,
449 + * because as soon as we do that, another thread can switch
450 + * the MMU context to the guest.
451 + */
452 + LOAD_REG_IMMEDIATE(r5, MSR_IDLE)
453 + li r6, MSR_RI
454 + andc r6, r9, r6
455 + LOAD_REG_ADDR(r7, power7_enter_nap_mode)
456 + mtmsrd r6, 1 /* clear RI before setting SRR0/1 */
457 + mtspr SPRN_SRR0, r7
458 + mtspr SPRN_SRR1, r5
459 + rfid
460 +
461 + .globl power7_enter_nap_mode
462 +power7_enter_nap_mode:
463 #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
464 /* Tell KVM we're napping */
465 li r4,KVM_HWTHREAD_IN_NAP
466 diff --git a/arch/powerpc/kernel/mce_power.c b/arch/powerpc/kernel/mce_power.c
467 index aa9aff3d6ad3..b6f123ab90ed 100644
468 --- a/arch/powerpc/kernel/mce_power.c
469 +++ b/arch/powerpc/kernel/mce_power.c
470 @@ -79,7 +79,7 @@ static long mce_handle_derror(uint64_t dsisr, uint64_t slb_error_bits)
471 }
472 if (dsisr & P7_DSISR_MC_TLB_MULTIHIT_MFTLB) {
473 if (cur_cpu_spec && cur_cpu_spec->flush_tlb)
474 - cur_cpu_spec->flush_tlb(TLBIEL_INVAL_PAGE);
475 + cur_cpu_spec->flush_tlb(TLBIEL_INVAL_SET);
476 /* reset error bits */
477 dsisr &= ~P7_DSISR_MC_TLB_MULTIHIT_MFTLB;
478 }
479 @@ -110,7 +110,7 @@ static long mce_handle_common_ierror(uint64_t srr1)
480 break;
481 case P7_SRR1_MC_IFETCH_TLB_MULTIHIT:
482 if (cur_cpu_spec && cur_cpu_spec->flush_tlb) {
483 - cur_cpu_spec->flush_tlb(TLBIEL_INVAL_PAGE);
484 + cur_cpu_spec->flush_tlb(TLBIEL_INVAL_SET);
485 handled = 1;
486 }
487 break;
488 diff --git a/arch/powerpc/kernel/udbg_16550.c b/arch/powerpc/kernel/udbg_16550.c
489 index 6e7c4923b5ea..411116c38da4 100644
490 --- a/arch/powerpc/kernel/udbg_16550.c
491 +++ b/arch/powerpc/kernel/udbg_16550.c
492 @@ -69,8 +69,12 @@ static void udbg_uart_putc(char c)
493
494 static int udbg_uart_getc_poll(void)
495 {
496 - if (!udbg_uart_in || !(udbg_uart_in(UART_LSR) & LSR_DR))
497 + if (!udbg_uart_in)
498 + return -1;
499 +
500 + if (!(udbg_uart_in(UART_LSR) & LSR_DR))
501 return udbg_uart_in(UART_RBR);
502 +
503 return -1;
504 }
505
506 diff --git a/arch/powerpc/perf/hv-24x7.c b/arch/powerpc/perf/hv-24x7.c
507 index dba34088da28..d073e0679a0c 100644
508 --- a/arch/powerpc/perf/hv-24x7.c
509 +++ b/arch/powerpc/perf/hv-24x7.c
510 @@ -217,11 +217,14 @@ static bool is_physical_domain(int domain)
511 domain == HV_24X7_PERF_DOMAIN_PHYSICAL_CORE;
512 }
513
514 +DEFINE_PER_CPU(char, hv_24x7_reqb[4096]) __aligned(4096);
515 +DEFINE_PER_CPU(char, hv_24x7_resb[4096]) __aligned(4096);
516 +
517 static unsigned long single_24x7_request(u8 domain, u32 offset, u16 ix,
518 u16 lpar, u64 *res,
519 bool success_expected)
520 {
521 - unsigned long ret = -ENOMEM;
522 + unsigned long ret;
523
524 /*
525 * request_buffer and result_buffer are not required to be 4k aligned,
526 @@ -243,13 +246,11 @@ static unsigned long single_24x7_request(u8 domain, u32 offset, u16 ix,
527 BUILD_BUG_ON(sizeof(*request_buffer) > 4096);
528 BUILD_BUG_ON(sizeof(*result_buffer) > 4096);
529
530 - request_buffer = kmem_cache_zalloc(hv_page_cache, GFP_USER);
531 - if (!request_buffer)
532 - goto out;
533 + request_buffer = (void *)get_cpu_var(hv_24x7_reqb);
534 + result_buffer = (void *)get_cpu_var(hv_24x7_resb);
535
536 - result_buffer = kmem_cache_zalloc(hv_page_cache, GFP_USER);
537 - if (!result_buffer)
538 - goto out_free_request_buffer;
539 + memset(request_buffer, 0, 4096);
540 + memset(result_buffer, 0, 4096);
541
542 *request_buffer = (struct reqb) {
543 .buf = {
544 @@ -278,15 +279,11 @@ static unsigned long single_24x7_request(u8 domain, u32 offset, u16 ix,
545 domain, offset, ix, lpar, ret, ret,
546 result_buffer->buf.detailed_rc,
547 result_buffer->buf.failing_request_ix);
548 - goto out_free_result_buffer;
549 + goto out;
550 }
551
552 *res = be64_to_cpu(result_buffer->result);
553
554 -out_free_result_buffer:
555 - kfree(result_buffer);
556 -out_free_request_buffer:
557 - kfree(request_buffer);
558 out:
559 return ret;
560 }
561 diff --git a/arch/s390/kvm/gaccess.c b/arch/s390/kvm/gaccess.c
562 index 0f961a1c64b3..6dc0ad9c7050 100644
563 --- a/arch/s390/kvm/gaccess.c
564 +++ b/arch/s390/kvm/gaccess.c
565 @@ -229,10 +229,12 @@ static void ipte_lock_simple(struct kvm_vcpu *vcpu)
566 goto out;
567 ic = &vcpu->kvm->arch.sca->ipte_control;
568 do {
569 - old = ACCESS_ONCE(*ic);
570 + old = *ic;
571 + barrier();
572 while (old.k) {
573 cond_resched();
574 - old = ACCESS_ONCE(*ic);
575 + old = *ic;
576 + barrier();
577 }
578 new = old;
579 new.k = 1;
580 @@ -251,7 +253,9 @@ static void ipte_unlock_simple(struct kvm_vcpu *vcpu)
581 goto out;
582 ic = &vcpu->kvm->arch.sca->ipte_control;
583 do {
584 - new = old = ACCESS_ONCE(*ic);
585 + old = *ic;
586 + barrier();
587 + new = old;
588 new.k = 0;
589 } while (cmpxchg(&ic->val, old.val, new.val) != old.val);
590 wake_up(&vcpu->kvm->arch.ipte_wq);
591 @@ -265,10 +269,12 @@ static void ipte_lock_siif(struct kvm_vcpu *vcpu)
592
593 ic = &vcpu->kvm->arch.sca->ipte_control;
594 do {
595 - old = ACCESS_ONCE(*ic);
596 + old = *ic;
597 + barrier();
598 while (old.kg) {
599 cond_resched();
600 - old = ACCESS_ONCE(*ic);
601 + old = *ic;
602 + barrier();
603 }
604 new = old;
605 new.k = 1;
606 @@ -282,7 +288,9 @@ static void ipte_unlock_siif(struct kvm_vcpu *vcpu)
607
608 ic = &vcpu->kvm->arch.sca->ipte_control;
609 do {
610 - new = old = ACCESS_ONCE(*ic);
611 + old = *ic;
612 + barrier();
613 + new = old;
614 new.kh--;
615 if (!new.kh)
616 new.k = 0;
617 diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
618 index a39838457f01..4fc3fed636dc 100644
619 --- a/arch/s390/kvm/interrupt.c
620 +++ b/arch/s390/kvm/interrupt.c
621 @@ -270,7 +270,7 @@ static int __must_check __deliver_prog_irq(struct kvm_vcpu *vcpu,
622 break;
623 case PGM_MONITOR:
624 rc = put_guest_lc(vcpu, pgm_info->mon_class_nr,
625 - (u64 *)__LC_MON_CLASS_NR);
626 + (u16 *)__LC_MON_CLASS_NR);
627 rc |= put_guest_lc(vcpu, pgm_info->mon_code,
628 (u64 *)__LC_MON_CODE);
629 break;
630 diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c
631 index 72bb2dd8b9cd..9c565b6b4ccb 100644
632 --- a/arch/s390/kvm/priv.c
633 +++ b/arch/s390/kvm/priv.c
634 @@ -791,7 +791,7 @@ int kvm_s390_handle_lctl(struct kvm_vcpu *vcpu)
635 break;
636 reg = (reg + 1) % 16;
637 } while (1);
638 -
639 + kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
640 return 0;
641 }
642
643 @@ -863,7 +863,7 @@ static int handle_lctlg(struct kvm_vcpu *vcpu)
644 break;
645 reg = (reg + 1) % 16;
646 } while (1);
647 -
648 + kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
649 return 0;
650 }
651
652 diff --git a/arch/x86/crypto/Makefile b/arch/x86/crypto/Makefile
653 index fd0f848938cc..5a4a089e8b1f 100644
654 --- a/arch/x86/crypto/Makefile
655 +++ b/arch/x86/crypto/Makefile
656 @@ -26,7 +26,6 @@ obj-$(CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL) += ghash-clmulni-intel.o
657
658 obj-$(CONFIG_CRYPTO_CRC32C_INTEL) += crc32c-intel.o
659 obj-$(CONFIG_CRYPTO_SHA1_SSSE3) += sha1-ssse3.o
660 -obj-$(CONFIG_CRYPTO_SHA1_MB) += sha-mb/
661 obj-$(CONFIG_CRYPTO_CRC32_PCLMUL) += crc32-pclmul.o
662 obj-$(CONFIG_CRYPTO_SHA256_SSSE3) += sha256-ssse3.o
663 obj-$(CONFIG_CRYPTO_SHA512_SSSE3) += sha512-ssse3.o
664 @@ -46,6 +45,7 @@ endif
665 ifeq ($(avx2_supported),yes)
666 obj-$(CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64) += camellia-aesni-avx2.o
667 obj-$(CONFIG_CRYPTO_SERPENT_AVX2_X86_64) += serpent-avx2.o
668 + obj-$(CONFIG_CRYPTO_SHA1_MB) += sha-mb/
669 endif
670
671 aes-i586-y := aes-i586-asm_32.o aes_glue.o
672 diff --git a/arch/x86/crypto/aes_ctrby8_avx-x86_64.S b/arch/x86/crypto/aes_ctrby8_avx-x86_64.S
673 index 2df2a0298f5a..a916c4a61165 100644
674 --- a/arch/x86/crypto/aes_ctrby8_avx-x86_64.S
675 +++ b/arch/x86/crypto/aes_ctrby8_avx-x86_64.S
676 @@ -208,7 +208,7 @@ ddq_add_8:
677
678 .if (klen == KEY_128)
679 .if (load_keys)
680 - vmovdqa 3*16(p_keys), xkeyA
681 + vmovdqa 3*16(p_keys), xkey4
682 .endif
683 .else
684 vmovdqa 3*16(p_keys), xkeyA
685 @@ -224,7 +224,7 @@ ddq_add_8:
686 add $(16*by), p_in
687
688 .if (klen == KEY_128)
689 - vmovdqa 4*16(p_keys), xkey4
690 + vmovdqa 4*16(p_keys), xkeyB
691 .else
692 .if (load_keys)
693 vmovdqa 4*16(p_keys), xkey4
694 @@ -234,7 +234,12 @@ ddq_add_8:
695 .set i, 0
696 .rept by
697 club XDATA, i
698 - vaesenc xkeyA, var_xdata, var_xdata /* key 3 */
699 + /* key 3 */
700 + .if (klen == KEY_128)
701 + vaesenc xkey4, var_xdata, var_xdata
702 + .else
703 + vaesenc xkeyA, var_xdata, var_xdata
704 + .endif
705 .set i, (i +1)
706 .endr
707
708 @@ -243,13 +248,18 @@ ddq_add_8:
709 .set i, 0
710 .rept by
711 club XDATA, i
712 - vaesenc xkey4, var_xdata, var_xdata /* key 4 */
713 + /* key 4 */
714 + .if (klen == KEY_128)
715 + vaesenc xkeyB, var_xdata, var_xdata
716 + .else
717 + vaesenc xkey4, var_xdata, var_xdata
718 + .endif
719 .set i, (i +1)
720 .endr
721
722 .if (klen == KEY_128)
723 .if (load_keys)
724 - vmovdqa 6*16(p_keys), xkeyB
725 + vmovdqa 6*16(p_keys), xkey8
726 .endif
727 .else
728 vmovdqa 6*16(p_keys), xkeyB
729 @@ -267,12 +277,17 @@ ddq_add_8:
730 .set i, 0
731 .rept by
732 club XDATA, i
733 - vaesenc xkeyB, var_xdata, var_xdata /* key 6 */
734 + /* key 6 */
735 + .if (klen == KEY_128)
736 + vaesenc xkey8, var_xdata, var_xdata
737 + .else
738 + vaesenc xkeyB, var_xdata, var_xdata
739 + .endif
740 .set i, (i +1)
741 .endr
742
743 .if (klen == KEY_128)
744 - vmovdqa 8*16(p_keys), xkey8
745 + vmovdqa 8*16(p_keys), xkeyB
746 .else
747 .if (load_keys)
748 vmovdqa 8*16(p_keys), xkey8
749 @@ -288,7 +303,7 @@ ddq_add_8:
750
751 .if (klen == KEY_128)
752 .if (load_keys)
753 - vmovdqa 9*16(p_keys), xkeyA
754 + vmovdqa 9*16(p_keys), xkey12
755 .endif
756 .else
757 vmovdqa 9*16(p_keys), xkeyA
758 @@ -297,7 +312,12 @@ ddq_add_8:
759 .set i, 0
760 .rept by
761 club XDATA, i
762 - vaesenc xkey8, var_xdata, var_xdata /* key 8 */
763 + /* key 8 */
764 + .if (klen == KEY_128)
765 + vaesenc xkeyB, var_xdata, var_xdata
766 + .else
767 + vaesenc xkey8, var_xdata, var_xdata
768 + .endif
769 .set i, (i +1)
770 .endr
771
772 @@ -306,7 +326,12 @@ ddq_add_8:
773 .set i, 0
774 .rept by
775 club XDATA, i
776 - vaesenc xkeyA, var_xdata, var_xdata /* key 9 */
777 + /* key 9 */
778 + .if (klen == KEY_128)
779 + vaesenc xkey12, var_xdata, var_xdata
780 + .else
781 + vaesenc xkeyA, var_xdata, var_xdata
782 + .endif
783 .set i, (i +1)
784 .endr
785
786 @@ -412,7 +437,6 @@ ddq_add_8:
787 /* main body of aes ctr load */
788
789 .macro do_aes_ctrmain key_len
790 -
791 cmp $16, num_bytes
792 jb .Ldo_return2\key_len
793
794 diff --git a/arch/x86/include/asm/vsyscall.h b/arch/x86/include/asm/vsyscall.h
795 index 2a46ca720afc..2874be9aef0a 100644
796 --- a/arch/x86/include/asm/vsyscall.h
797 +++ b/arch/x86/include/asm/vsyscall.h
798 @@ -34,7 +34,7 @@ static inline unsigned int __getcpu(void)
799 native_read_tscp(&p);
800 } else {
801 /* Load per CPU data from GDT */
802 - asm("lsl %1,%0" : "=r" (p) : "r" (__PER_CPU_SEG));
803 + asm volatile ("lsl %1,%0" : "=r" (p) : "r" (__PER_CPU_SEG));
804 }
805
806 return p;
807 diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
808 index 9762dbd9f3f7..e98f68cfea02 100644
809 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c
810 +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
811 @@ -276,6 +276,17 @@ static struct intel_uncore_box *uncore_alloc_box(struct intel_uncore_type *type,
812 return box;
813 }
814
815 +/*
816 + * Using uncore_pmu_event_init pmu event_init callback
817 + * as a detection point for uncore events.
818 + */
819 +static int uncore_pmu_event_init(struct perf_event *event);
820 +
821 +static bool is_uncore_event(struct perf_event *event)
822 +{
823 + return event->pmu->event_init == uncore_pmu_event_init;
824 +}
825 +
826 static int
827 uncore_collect_events(struct intel_uncore_box *box, struct perf_event *leader, bool dogrp)
828 {
829 @@ -290,13 +301,18 @@ uncore_collect_events(struct intel_uncore_box *box, struct perf_event *leader, b
830 return -EINVAL;
831
832 n = box->n_events;
833 - box->event_list[n] = leader;
834 - n++;
835 +
836 + if (is_uncore_event(leader)) {
837 + box->event_list[n] = leader;
838 + n++;
839 + }
840 +
841 if (!dogrp)
842 return n;
843
844 list_for_each_entry(event, &leader->sibling_list, group_entry) {
845 - if (event->state <= PERF_EVENT_STATE_OFF)
846 + if (!is_uncore_event(event) ||
847 + event->state <= PERF_EVENT_STATE_OFF)
848 continue;
849
850 if (n >= max_count)
851 diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.h b/arch/x86/kernel/cpu/perf_event_intel_uncore.h
852 index 18eb78bbdd10..863d9b02563e 100644
853 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.h
854 +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.h
855 @@ -17,7 +17,7 @@
856 #define UNCORE_PCI_DEV_TYPE(data) ((data >> 8) & 0xff)
857 #define UNCORE_PCI_DEV_IDX(data) (data & 0xff)
858 #define UNCORE_EXTRA_PCI_DEV 0xff
859 -#define UNCORE_EXTRA_PCI_DEV_MAX 2
860 +#define UNCORE_EXTRA_PCI_DEV_MAX 3
861
862 /* support up to 8 sockets */
863 #define UNCORE_SOCKET_MAX 8
864 diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c b/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c
865 index f9ed429d6e4f..ab474faa262b 100644
866 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c
867 +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c
868 @@ -887,6 +887,7 @@ void snbep_uncore_cpu_init(void)
869 enum {
870 SNBEP_PCI_QPI_PORT0_FILTER,
871 SNBEP_PCI_QPI_PORT1_FILTER,
872 + HSWEP_PCI_PCU_3,
873 };
874
875 static int snbep_qpi_hw_config(struct intel_uncore_box *box, struct perf_event *event)
876 @@ -2022,6 +2023,17 @@ void hswep_uncore_cpu_init(void)
877 {
878 if (hswep_uncore_cbox.num_boxes > boot_cpu_data.x86_max_cores)
879 hswep_uncore_cbox.num_boxes = boot_cpu_data.x86_max_cores;
880 +
881 + /* Detect 6-8 core systems with only two SBOXes */
882 + if (uncore_extra_pci_dev[0][HSWEP_PCI_PCU_3]) {
883 + u32 capid4;
884 +
885 + pci_read_config_dword(uncore_extra_pci_dev[0][HSWEP_PCI_PCU_3],
886 + 0x94, &capid4);
887 + if (((capid4 >> 6) & 0x3) == 0)
888 + hswep_uncore_sbox.num_boxes = 2;
889 + }
890 +
891 uncore_msr_uncores = hswep_msr_uncores;
892 }
893
894 @@ -2279,6 +2291,11 @@ static DEFINE_PCI_DEVICE_TABLE(hswep_uncore_pci_ids) = {
895 .driver_data = UNCORE_PCI_DEV_DATA(UNCORE_EXTRA_PCI_DEV,
896 SNBEP_PCI_QPI_PORT1_FILTER),
897 },
898 + { /* PCU.3 (for Capability registers) */
899 + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x2fc0),
900 + .driver_data = UNCORE_PCI_DEV_DATA(UNCORE_EXTRA_PCI_DEV,
901 + HSWEP_PCI_PCU_3),
902 + },
903 { /* end: all zeroes */ }
904 };
905
906 diff --git a/arch/x86/kernel/xsave.c b/arch/x86/kernel/xsave.c
907 index 4c540c4719d8..0de1fae2bdf0 100644
908 --- a/arch/x86/kernel/xsave.c
909 +++ b/arch/x86/kernel/xsave.c
910 @@ -738,3 +738,4 @@ void *get_xsave_addr(struct xsave_struct *xsave, int xstate)
911
912 return (void *)xsave + xstate_comp_offsets[feature];
913 }
914 +EXPORT_SYMBOL_GPL(get_xsave_addr);
915 diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
916 index 976e3a57f9ea..88f92014ba6b 100644
917 --- a/arch/x86/kvm/cpuid.c
918 +++ b/arch/x86/kvm/cpuid.c
919 @@ -319,6 +319,10 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
920 F(BMI2) | F(ERMS) | f_invpcid | F(RTM) | f_mpx | F(RDSEED) |
921 F(ADX) | F(SMAP);
922
923 + /* cpuid 0xD.1.eax */
924 + const u32 kvm_supported_word10_x86_features =
925 + F(XSAVEOPT) | F(XSAVEC) | F(XGETBV1);
926 +
927 /* all calls to cpuid_count() should be made on the same cpu */
928 get_cpu();
929
930 @@ -455,13 +459,18 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
931 entry->eax &= supported;
932 entry->edx &= supported >> 32;
933 entry->flags |= KVM_CPUID_FLAG_SIGNIFCANT_INDEX;
934 + if (!supported)
935 + break;
936 +
937 for (idx = 1, i = 1; idx < 64; ++idx) {
938 u64 mask = ((u64)1 << idx);
939 if (*nent >= maxnent)
940 goto out;
941
942 do_cpuid_1_ent(&entry[i], function, idx);
943 - if (entry[i].eax == 0 || !(supported & mask))
944 + if (idx == 1)
945 + entry[i].eax &= kvm_supported_word10_x86_features;
946 + else if (entry[i].eax == 0 || !(supported & mask))
947 continue;
948 entry[i].flags |=
949 KVM_CPUID_FLAG_SIGNIFCANT_INDEX;
950 diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
951 index 9f8a2faf5040..22e7ed9e6d8e 100644
952 --- a/arch/x86/kvm/emulate.c
953 +++ b/arch/x86/kvm/emulate.c
954 @@ -2128,7 +2128,7 @@ static int em_ret_far(struct x86_emulate_ctxt *ctxt)
955 /* Outer-privilege level return is not implemented */
956 if (ctxt->mode >= X86EMUL_MODE_PROT16 && (cs & 3) > cpl)
957 return X86EMUL_UNHANDLEABLE;
958 - rc = __load_segment_descriptor(ctxt, (u16)cs, VCPU_SREG_CS, 0, false,
959 + rc = __load_segment_descriptor(ctxt, (u16)cs, VCPU_SREG_CS, cpl, false,
960 &new_desc);
961 if (rc != X86EMUL_CONTINUE)
962 return rc;
963 diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
964 index 978f402006ee..9c12e63c653f 100644
965 --- a/arch/x86/kvm/mmu.c
966 +++ b/arch/x86/kvm/mmu.c
967 @@ -4449,7 +4449,7 @@ void kvm_mmu_invalidate_mmio_sptes(struct kvm *kvm)
968 * zap all shadow pages.
969 */
970 if (unlikely(kvm_current_mmio_generation(kvm) == 0)) {
971 - printk_ratelimited(KERN_INFO "kvm: zapping shadow pages for mmio generation wraparound\n");
972 + printk_ratelimited(KERN_DEBUG "kvm: zapping shadow pages for mmio generation wraparound\n");
973 kvm_mmu_invalidate_zap_all_pages(kvm);
974 }
975 }
976 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
977 index 0033df32a745..506488cfa385 100644
978 --- a/arch/x86/kvm/x86.c
979 +++ b/arch/x86/kvm/x86.c
980 @@ -3128,15 +3128,89 @@ static int kvm_vcpu_ioctl_x86_set_debugregs(struct kvm_vcpu *vcpu,
981 return 0;
982 }
983
984 +#define XSTATE_COMPACTION_ENABLED (1ULL << 63)
985 +
986 +static void fill_xsave(u8 *dest, struct kvm_vcpu *vcpu)
987 +{
988 + struct xsave_struct *xsave = &vcpu->arch.guest_fpu.state->xsave;
989 + u64 xstate_bv = xsave->xsave_hdr.xstate_bv;
990 + u64 valid;
991 +
992 + /*
993 + * Copy legacy XSAVE area, to avoid complications with CPUID
994 + * leaves 0 and 1 in the loop below.
995 + */
996 + memcpy(dest, xsave, XSAVE_HDR_OFFSET);
997 +
998 + /* Set XSTATE_BV */
999 + *(u64 *)(dest + XSAVE_HDR_OFFSET) = xstate_bv;
1000 +
1001 + /*
1002 + * Copy each region from the possibly compacted offset to the
1003 + * non-compacted offset.
1004 + */
1005 + valid = xstate_bv & ~XSTATE_FPSSE;
1006 + while (valid) {
1007 + u64 feature = valid & -valid;
1008 + int index = fls64(feature) - 1;
1009 + void *src = get_xsave_addr(xsave, feature);
1010 +
1011 + if (src) {
1012 + u32 size, offset, ecx, edx;
1013 + cpuid_count(XSTATE_CPUID, index,
1014 + &size, &offset, &ecx, &edx);
1015 + memcpy(dest + offset, src, size);
1016 + }
1017 +
1018 + valid -= feature;
1019 + }
1020 +}
1021 +
1022 +static void load_xsave(struct kvm_vcpu *vcpu, u8 *src)
1023 +{
1024 + struct xsave_struct *xsave = &vcpu->arch.guest_fpu.state->xsave;
1025 + u64 xstate_bv = *(u64 *)(src + XSAVE_HDR_OFFSET);
1026 + u64 valid;
1027 +
1028 + /*
1029 + * Copy legacy XSAVE area, to avoid complications with CPUID
1030 + * leaves 0 and 1 in the loop below.
1031 + */
1032 + memcpy(xsave, src, XSAVE_HDR_OFFSET);
1033 +
1034 + /* Set XSTATE_BV and possibly XCOMP_BV. */
1035 + xsave->xsave_hdr.xstate_bv = xstate_bv;
1036 + if (cpu_has_xsaves)
1037 + xsave->xsave_hdr.xcomp_bv = host_xcr0 | XSTATE_COMPACTION_ENABLED;
1038 +
1039 + /*
1040 + * Copy each region from the non-compacted offset to the
1041 + * possibly compacted offset.
1042 + */
1043 + valid = xstate_bv & ~XSTATE_FPSSE;
1044 + while (valid) {
1045 + u64 feature = valid & -valid;
1046 + int index = fls64(feature) - 1;
1047 + void *dest = get_xsave_addr(xsave, feature);
1048 +
1049 + if (dest) {
1050 + u32 size, offset, ecx, edx;
1051 + cpuid_count(XSTATE_CPUID, index,
1052 + &size, &offset, &ecx, &edx);
1053 + memcpy(dest, src + offset, size);
1054 + } else
1055 + WARN_ON_ONCE(1);
1056 +
1057 + valid -= feature;
1058 + }
1059 +}
1060 +
1061 static void kvm_vcpu_ioctl_x86_get_xsave(struct kvm_vcpu *vcpu,
1062 struct kvm_xsave *guest_xsave)
1063 {
1064 if (cpu_has_xsave) {
1065 - memcpy(guest_xsave->region,
1066 - &vcpu->arch.guest_fpu.state->xsave,
1067 - vcpu->arch.guest_xstate_size);
1068 - *(u64 *)&guest_xsave->region[XSAVE_HDR_OFFSET / sizeof(u32)] &=
1069 - vcpu->arch.guest_supported_xcr0 | XSTATE_FPSSE;
1070 + memset(guest_xsave, 0, sizeof(struct kvm_xsave));
1071 + fill_xsave((u8 *) guest_xsave->region, vcpu);
1072 } else {
1073 memcpy(guest_xsave->region,
1074 &vcpu->arch.guest_fpu.state->fxsave,
1075 @@ -3160,8 +3234,7 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu,
1076 */
1077 if (xstate_bv & ~kvm_supported_xcr0())
1078 return -EINVAL;
1079 - memcpy(&vcpu->arch.guest_fpu.state->xsave,
1080 - guest_xsave->region, vcpu->arch.guest_xstate_size);
1081 + load_xsave(vcpu, (u8 *)guest_xsave->region);
1082 } else {
1083 if (xstate_bv & ~XSTATE_FPSSE)
1084 return -EINVAL;
1085 @@ -6873,6 +6946,9 @@ int fx_init(struct kvm_vcpu *vcpu)
1086 return err;
1087
1088 fpu_finit(&vcpu->arch.guest_fpu);
1089 + if (cpu_has_xsaves)
1090 + vcpu->arch.guest_fpu.state->xsave.xsave_hdr.xcomp_bv =
1091 + host_xcr0 | XSTATE_COMPACTION_ENABLED;
1092
1093 /*
1094 * Ensure guest xcr0 is valid for loading
1095 diff --git a/arch/x86/vdso/vma.c b/arch/x86/vdso/vma.c
1096 index 970463b566cf..208c2206df46 100644
1097 --- a/arch/x86/vdso/vma.c
1098 +++ b/arch/x86/vdso/vma.c
1099 @@ -54,12 +54,17 @@ subsys_initcall(init_vdso);
1100
1101 struct linux_binprm;
1102
1103 -/* Put the vdso above the (randomized) stack with another randomized offset.
1104 - This way there is no hole in the middle of address space.
1105 - To save memory make sure it is still in the same PTE as the stack top.
1106 - This doesn't give that many random bits.
1107 -
1108 - Only used for the 64-bit and x32 vdsos. */
1109 +/*
1110 + * Put the vdso above the (randomized) stack with another randomized
1111 + * offset. This way there is no hole in the middle of address space.
1112 + * To save memory make sure it is still in the same PTE as the stack
1113 + * top. This doesn't give that many random bits.
1114 + *
1115 + * Note that this algorithm is imperfect: the distribution of the vdso
1116 + * start address within a PMD is biased toward the end.
1117 + *
1118 + * Only used for the 64-bit and x32 vdsos.
1119 + */
1120 static unsigned long vdso_addr(unsigned long start, unsigned len)
1121 {
1122 #ifdef CONFIG_X86_32
1123 @@ -67,22 +72,30 @@ static unsigned long vdso_addr(unsigned long start, unsigned len)
1124 #else
1125 unsigned long addr, end;
1126 unsigned offset;
1127 - end = (start + PMD_SIZE - 1) & PMD_MASK;
1128 +
1129 + /*
1130 + * Round up the start address. It can start out unaligned as a result
1131 + * of stack start randomization.
1132 + */
1133 + start = PAGE_ALIGN(start);
1134 +
1135 + /* Round the lowest possible end address up to a PMD boundary. */
1136 + end = (start + len + PMD_SIZE - 1) & PMD_MASK;
1137 if (end >= TASK_SIZE_MAX)
1138 end = TASK_SIZE_MAX;
1139 end -= len;
1140 - /* This loses some more bits than a modulo, but is cheaper */
1141 - offset = get_random_int() & (PTRS_PER_PTE - 1);
1142 - addr = start + (offset << PAGE_SHIFT);
1143 - if (addr >= end)
1144 - addr = end;
1145 +
1146 + if (end > start) {
1147 + offset = get_random_int() % (((end - start) >> PAGE_SHIFT) + 1);
1148 + addr = start + (offset << PAGE_SHIFT);
1149 + } else {
1150 + addr = start;
1151 + }
1152
1153 /*
1154 - * page-align it here so that get_unmapped_area doesn't
1155 - * align it wrongfully again to the next page. addr can come in 4K
1156 - * unaligned here as a result of stack start randomization.
1157 + * Forcibly align the final address in case we have a hardware
1158 + * issue that requires alignment for performance reasons.
1159 */
1160 - addr = PAGE_ALIGN(addr);
1161 addr = align_vdso_addr(addr);
1162
1163 return addr;
1164 diff --git a/arch/xtensa/include/asm/highmem.h b/arch/xtensa/include/asm/highmem.h
1165 index 2c7901edffaf..01cef6b40829 100644
1166 --- a/arch/xtensa/include/asm/highmem.h
1167 +++ b/arch/xtensa/include/asm/highmem.h
1168 @@ -25,7 +25,7 @@
1169 #define PKMAP_NR(virt) (((virt) - PKMAP_BASE) >> PAGE_SHIFT)
1170 #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT))
1171
1172 -#define kmap_prot PAGE_KERNEL
1173 +#define kmap_prot PAGE_KERNEL_EXEC
1174
1175 #if DCACHE_WAY_SIZE > PAGE_SIZE
1176 #define get_pkmap_color get_pkmap_color
1177 diff --git a/block/blk-core.c b/block/blk-core.c
1178 index 0421b53e6431..93f9152fc271 100644
1179 --- a/block/blk-core.c
1180 +++ b/block/blk-core.c
1181 @@ -525,6 +525,9 @@ void blk_cleanup_queue(struct request_queue *q)
1182 del_timer_sync(&q->backing_dev_info.laptop_mode_wb_timer);
1183 blk_sync_queue(q);
1184
1185 + if (q->mq_ops)
1186 + blk_mq_free_queue(q);
1187 +
1188 spin_lock_irq(lock);
1189 if (q->queue_lock != &q->__queue_lock)
1190 q->queue_lock = &q->__queue_lock;
1191 diff --git a/block/blk-mq-cpumap.c b/block/blk-mq-cpumap.c
1192 index 1065d7c65fa1..72e5ed691e37 100644
1193 --- a/block/blk-mq-cpumap.c
1194 +++ b/block/blk-mq-cpumap.c
1195 @@ -90,7 +90,7 @@ unsigned int *blk_mq_make_queue_map(struct blk_mq_tag_set *set)
1196 unsigned int *map;
1197
1198 /* If cpus are offline, map them to first hctx */
1199 - map = kzalloc_node(sizeof(*map) * num_possible_cpus(), GFP_KERNEL,
1200 + map = kzalloc_node(sizeof(*map) * nr_cpu_ids, GFP_KERNEL,
1201 set->numa_node);
1202 if (!map)
1203 return NULL;
1204 diff --git a/block/blk-mq-sysfs.c b/block/blk-mq-sysfs.c
1205 index 371d8800b48a..1630a20d5dcf 100644
1206 --- a/block/blk-mq-sysfs.c
1207 +++ b/block/blk-mq-sysfs.c
1208 @@ -390,16 +390,15 @@ static void blk_mq_sysfs_init(struct request_queue *q)
1209 {
1210 struct blk_mq_hw_ctx *hctx;
1211 struct blk_mq_ctx *ctx;
1212 - int i, j;
1213 + int i;
1214
1215 kobject_init(&q->mq_kobj, &blk_mq_ktype);
1216
1217 - queue_for_each_hw_ctx(q, hctx, i) {
1218 + queue_for_each_hw_ctx(q, hctx, i)
1219 kobject_init(&hctx->kobj, &blk_mq_hw_ktype);
1220
1221 - hctx_for_each_ctx(hctx, ctx, j)
1222 - kobject_init(&ctx->kobj, &blk_mq_ctx_ktype);
1223 - }
1224 + queue_for_each_ctx(q, ctx, i)
1225 + kobject_init(&ctx->kobj, &blk_mq_ctx_ktype);
1226 }
1227
1228 /* see blk_register_queue() */
1229 diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c
1230 index 8317175a3009..ff18dab6b585 100644
1231 --- a/block/blk-mq-tag.c
1232 +++ b/block/blk-mq-tag.c
1233 @@ -137,6 +137,7 @@ static inline bool hctx_may_queue(struct blk_mq_hw_ctx *hctx,
1234 static int __bt_get_word(struct blk_align_bitmap *bm, unsigned int last_tag)
1235 {
1236 int tag, org_last_tag, end;
1237 + bool wrap = last_tag != 0;
1238
1239 org_last_tag = last_tag;
1240 end = bm->depth;
1241 @@ -148,15 +149,16 @@ restart:
1242 * We started with an offset, start from 0 to
1243 * exhaust the map.
1244 */
1245 - if (org_last_tag && last_tag) {
1246 - end = last_tag;
1247 + if (wrap) {
1248 + wrap = false;
1249 + end = org_last_tag;
1250 last_tag = 0;
1251 goto restart;
1252 }
1253 return -1;
1254 }
1255 last_tag = tag + 1;
1256 - } while (test_and_set_bit_lock(tag, &bm->word));
1257 + } while (test_and_set_bit(tag, &bm->word));
1258
1259 return tag;
1260 }
1261 @@ -340,11 +342,10 @@ static void bt_clear_tag(struct blk_mq_bitmap_tags *bt, unsigned int tag)
1262 struct bt_wait_state *bs;
1263 int wait_cnt;
1264
1265 - /*
1266 - * The unlock memory barrier need to order access to req in free
1267 - * path and clearing tag bit
1268 - */
1269 - clear_bit_unlock(TAG_TO_BIT(bt, tag), &bt->map[index].word);
1270 + clear_bit(TAG_TO_BIT(bt, tag), &bt->map[index].word);
1271 +
1272 + /* Ensure that the wait list checks occur after clear_bit(). */
1273 + smp_mb();
1274
1275 bs = bt_wake_ptr(bt);
1276 if (!bs)
1277 diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
1278 index 1fac43408911..935ea2aa0730 100644
1279 --- a/block/blk-sysfs.c
1280 +++ b/block/blk-sysfs.c
1281 @@ -492,17 +492,15 @@ static void blk_free_queue_rcu(struct rcu_head *rcu_head)
1282 * Currently, its primary task it to free all the &struct request
1283 * structures that were allocated to the queue and the queue itself.
1284 *
1285 - * Caveat:
1286 - * Hopefully the low level driver will have finished any
1287 - * outstanding requests first...
1288 + * Note:
1289 + * The low level driver must have finished any outstanding requests first
1290 + * via blk_cleanup_queue().
1291 **/
1292 static void blk_release_queue(struct kobject *kobj)
1293 {
1294 struct request_queue *q =
1295 container_of(kobj, struct request_queue, kobj);
1296
1297 - blk_sync_queue(q);
1298 -
1299 blkcg_exit_queue(q);
1300
1301 if (q->elevator) {
1302 @@ -517,9 +515,7 @@ static void blk_release_queue(struct kobject *kobj)
1303 if (q->queue_tags)
1304 __blk_queue_free_tags(q);
1305
1306 - if (q->mq_ops)
1307 - blk_mq_free_queue(q);
1308 - else
1309 + if (!q->mq_ops)
1310 blk_free_flush_queue(q->fq);
1311
1312 blk_trace_shutdown(q);
1313 diff --git a/block/genhd.c b/block/genhd.c
1314 index bd3060684ab2..0a536dc05f3b 100644
1315 --- a/block/genhd.c
1316 +++ b/block/genhd.c
1317 @@ -1070,9 +1070,16 @@ int disk_expand_part_tbl(struct gendisk *disk, int partno)
1318 struct disk_part_tbl *old_ptbl = disk->part_tbl;
1319 struct disk_part_tbl *new_ptbl;
1320 int len = old_ptbl ? old_ptbl->len : 0;
1321 - int target = partno + 1;
1322 + int i, target;
1323 size_t size;
1324 - int i;
1325 +
1326 + /*
1327 + * check for int overflow, since we can get here from blkpg_ioctl()
1328 + * with a user passed 'partno'.
1329 + */
1330 + target = partno + 1;
1331 + if (target < 0)
1332 + return -EINVAL;
1333
1334 /* disk_max_parts() is zero during initialization, ignore if so */
1335 if (disk_max_parts(disk) && target > disk_max_parts(disk))
1336 diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c
1337 index 7db193160766..93b71420a046 100644
1338 --- a/drivers/acpi/device_pm.c
1339 +++ b/drivers/acpi/device_pm.c
1340 @@ -257,7 +257,7 @@ int acpi_bus_init_power(struct acpi_device *device)
1341
1342 device->power.state = ACPI_STATE_UNKNOWN;
1343 if (!acpi_device_is_present(device))
1344 - return 0;
1345 + return -ENXIO;
1346
1347 result = acpi_device_get_power(device, &state);
1348 if (result)
1349 diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
1350 index 0476e90b2091..c9ea3dfb4974 100644
1351 --- a/drivers/acpi/scan.c
1352 +++ b/drivers/acpi/scan.c
1353 @@ -909,7 +909,7 @@ static void acpi_free_power_resources_lists(struct acpi_device *device)
1354 if (device->wakeup.flags.valid)
1355 acpi_power_resources_list_free(&device->wakeup.resources);
1356
1357 - if (!device->flags.power_manageable)
1358 + if (!device->power.flags.power_resources)
1359 return;
1360
1361 for (i = ACPI_STATE_D0; i <= ACPI_STATE_D3_HOT; i++) {
1362 @@ -1631,10 +1631,8 @@ static void acpi_bus_get_power_flags(struct acpi_device *device)
1363 device->power.flags.power_resources)
1364 device->power.states[ACPI_STATE_D3_COLD].flags.os_accessible = 1;
1365
1366 - if (acpi_bus_init_power(device)) {
1367 - acpi_free_power_resources_lists(device);
1368 + if (acpi_bus_init_power(device))
1369 device->flags.power_manageable = 0;
1370 - }
1371 }
1372
1373 static void acpi_bus_get_flags(struct acpi_device *device)
1374 @@ -2202,13 +2200,18 @@ static void acpi_bus_attach(struct acpi_device *device)
1375 /* Skip devices that are not present. */
1376 if (!acpi_device_is_present(device)) {
1377 device->flags.visited = false;
1378 + device->flags.power_manageable = 0;
1379 return;
1380 }
1381 if (device->handler)
1382 goto ok;
1383
1384 if (!device->flags.initialized) {
1385 - acpi_bus_update_power(device, NULL);
1386 + device->flags.power_manageable =
1387 + device->power.states[ACPI_STATE_D0].flags.valid;
1388 + if (acpi_bus_init_power(device))
1389 + device->flags.power_manageable = 0;
1390 +
1391 device->flags.initialized = true;
1392 }
1393 device->flags.visited = false;
1394 diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
1395 index 9d75ead2a1f9..41322591fb43 100644
1396 --- a/drivers/acpi/video.c
1397 +++ b/drivers/acpi/video.c
1398 @@ -155,6 +155,7 @@ struct acpi_video_bus {
1399 u8 dos_setting;
1400 struct acpi_video_enumerated_device *attached_array;
1401 u8 attached_count;
1402 + u8 child_count;
1403 struct acpi_video_bus_cap cap;
1404 struct acpi_video_bus_flags flags;
1405 struct list_head video_device_list;
1406 @@ -504,6 +505,23 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
1407 DMI_MATCH(DMI_PRODUCT_NAME, "HP ENVY 15 Notebook PC"),
1408 },
1409 },
1410 +
1411 + {
1412 + .callback = video_disable_native_backlight,
1413 + .ident = "SAMSUNG 870Z5E/880Z5E/680Z5E",
1414 + .matches = {
1415 + DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1416 + DMI_MATCH(DMI_PRODUCT_NAME, "870Z5E/880Z5E/680Z5E"),
1417 + },
1418 + },
1419 + {
1420 + .callback = video_disable_native_backlight,
1421 + .ident = "SAMSUNG 370R4E/370R4V/370R5E/3570RE/370R5V",
1422 + .matches = {
1423 + DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1424 + DMI_MATCH(DMI_PRODUCT_NAME, "370R4E/370R4V/370R5E/3570RE/370R5V"),
1425 + },
1426 + },
1427 {}
1428 };
1429
1430 @@ -1159,8 +1177,12 @@ static bool acpi_video_device_in_dod(struct acpi_video_device *device)
1431 struct acpi_video_bus *video = device->video;
1432 int i;
1433
1434 - /* If we have a broken _DOD, no need to test */
1435 - if (!video->attached_count)
1436 + /*
1437 + * If we have a broken _DOD or we have more than 8 output devices
1438 + * under the graphics controller node that we can't proper deal with
1439 + * in the operation region code currently, no need to test.
1440 + */
1441 + if (!video->attached_count || video->child_count > 8)
1442 return true;
1443
1444 for (i = 0; i < video->attached_count; i++) {
1445 @@ -1413,6 +1435,7 @@ acpi_video_bus_get_devices(struct acpi_video_bus *video,
1446 dev_err(&dev->dev, "Can't attach device\n");
1447 break;
1448 }
1449 + video->child_count++;
1450 }
1451 return status;
1452 }
1453 diff --git a/drivers/base/bus.c b/drivers/base/bus.c
1454 index 83e910a57563..876bae5ade33 100644
1455 --- a/drivers/base/bus.c
1456 +++ b/drivers/base/bus.c
1457 @@ -254,13 +254,15 @@ static ssize_t store_drivers_probe(struct bus_type *bus,
1458 const char *buf, size_t count)
1459 {
1460 struct device *dev;
1461 + int err = -EINVAL;
1462
1463 dev = bus_find_device_by_name(bus, NULL, buf);
1464 if (!dev)
1465 return -ENODEV;
1466 - if (bus_rescan_devices_helper(dev, NULL) != 0)
1467 - return -EINVAL;
1468 - return count;
1469 + if (bus_rescan_devices_helper(dev, NULL) == 0)
1470 + err = count;
1471 + put_device(dev);
1472 + return err;
1473 }
1474
1475 static struct device *next_device(struct klist_iter *i)
1476 diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c
1477 index 5a01c53dddeb..3b797cd5a407 100644
1478 --- a/drivers/block/drbd/drbd_req.c
1479 +++ b/drivers/block/drbd/drbd_req.c
1480 @@ -1545,6 +1545,7 @@ int drbd_merge_bvec(struct request_queue *q, struct bvec_merge_data *bvm, struct
1481 struct request_queue * const b =
1482 device->ldev->backing_bdev->bd_disk->queue;
1483 if (b->merge_bvec_fn) {
1484 + bvm->bi_bdev = device->ldev->backing_bdev;
1485 backing_limit = b->merge_bvec_fn(b, bvm, bvec);
1486 limit = min(limit, backing_limit);
1487 }
1488 @@ -1628,7 +1629,7 @@ void request_timer_fn(unsigned long data)
1489 time_after(now, req_peer->pre_send_jif + ent) &&
1490 !time_in_range(now, connection->last_reconnect_jif, connection->last_reconnect_jif + ent)) {
1491 drbd_warn(device, "Remote failed to finish a request within ko-count * timeout\n");
1492 - _drbd_set_state(_NS(device, conn, C_TIMEOUT), CS_VERBOSE | CS_HARD, NULL);
1493 + _conn_request_state(connection, NS(conn, C_TIMEOUT), CS_VERBOSE | CS_HARD);
1494 }
1495 if (dt && oldest_submit_jif != now &&
1496 time_after(now, oldest_submit_jif + dt) &&
1497 diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
1498 index d85ced27ebd5..086240cd29c3 100644
1499 --- a/drivers/bluetooth/ath3k.c
1500 +++ b/drivers/bluetooth/ath3k.c
1501 @@ -105,6 +105,7 @@ static const struct usb_device_id ath3k_table[] = {
1502 { USB_DEVICE(0x13d3, 0x3375) },
1503 { USB_DEVICE(0x13d3, 0x3393) },
1504 { USB_DEVICE(0x13d3, 0x3402) },
1505 + { USB_DEVICE(0x13d3, 0x3408) },
1506 { USB_DEVICE(0x13d3, 0x3432) },
1507
1508 /* Atheros AR5BBU12 with sflash firmware */
1509 @@ -156,6 +157,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
1510 { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
1511 { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
1512 { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 },
1513 + { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },
1514 { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },
1515
1516 /* Atheros AR5BBU22 with sflash firmware */
1517 diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
1518 index edfc17bfcd44..091c813df8e9 100644
1519 --- a/drivers/bluetooth/btusb.c
1520 +++ b/drivers/bluetooth/btusb.c
1521 @@ -182,6 +182,7 @@ static const struct usb_device_id blacklist_table[] = {
1522 { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
1523 { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
1524 { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 },
1525 + { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },
1526 { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },
1527
1528 /* Atheros AR5BBU12 with sflash firmware */
1529 diff --git a/drivers/char/i8k.c b/drivers/char/i8k.c
1530 index 34174d01462e..471f985e38d2 100644
1531 --- a/drivers/char/i8k.c
1532 +++ b/drivers/char/i8k.c
1533 @@ -711,6 +711,14 @@ static struct dmi_system_id i8k_dmi_table[] __initdata = {
1534 .driver_data = (void *)&i8k_config_data[DELL_LATITUDE_D520],
1535 },
1536 {
1537 + .ident = "Dell Latitude E6440",
1538 + .matches = {
1539 + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
1540 + DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6440"),
1541 + },
1542 + .driver_data = (void *)&i8k_config_data[DELL_LATITUDE_E6540],
1543 + },
1544 + {
1545 .ident = "Dell Latitude E6540",
1546 .matches = {
1547 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
1548 diff --git a/drivers/gpu/drm/nouveau/core/core/event.c b/drivers/gpu/drm/nouveau/core/core/event.c
1549 index ff2b434b3db4..760947e380c9 100644
1550 --- a/drivers/gpu/drm/nouveau/core/core/event.c
1551 +++ b/drivers/gpu/drm/nouveau/core/core/event.c
1552 @@ -26,7 +26,7 @@
1553 void
1554 nvkm_event_put(struct nvkm_event *event, u32 types, int index)
1555 {
1556 - BUG_ON(!spin_is_locked(&event->refs_lock));
1557 + assert_spin_locked(&event->refs_lock);
1558 while (types) {
1559 int type = __ffs(types); types &= ~(1 << type);
1560 if (--event->refs[index * event->types_nr + type] == 0) {
1561 @@ -39,7 +39,7 @@ nvkm_event_put(struct nvkm_event *event, u32 types, int index)
1562 void
1563 nvkm_event_get(struct nvkm_event *event, u32 types, int index)
1564 {
1565 - BUG_ON(!spin_is_locked(&event->refs_lock));
1566 + assert_spin_locked(&event->refs_lock);
1567 while (types) {
1568 int type = __ffs(types); types &= ~(1 << type);
1569 if (++event->refs[index * event->types_nr + type] == 1) {
1570 diff --git a/drivers/gpu/drm/nouveau/core/core/notify.c b/drivers/gpu/drm/nouveau/core/core/notify.c
1571 index d1bcde55e9d7..839a32577680 100644
1572 --- a/drivers/gpu/drm/nouveau/core/core/notify.c
1573 +++ b/drivers/gpu/drm/nouveau/core/core/notify.c
1574 @@ -98,7 +98,7 @@ nvkm_notify_send(struct nvkm_notify *notify, void *data, u32 size)
1575 struct nvkm_event *event = notify->event;
1576 unsigned long flags;
1577
1578 - BUG_ON(!spin_is_locked(&event->list_lock));
1579 + assert_spin_locked(&event->list_lock);
1580 BUG_ON(size != notify->size);
1581
1582 spin_lock_irqsave(&event->refs_lock, flags);
1583 diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
1584 index 753a6def61e7..3d1cfcb96b6b 100644
1585 --- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
1586 +++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
1587 @@ -28,6 +28,7 @@
1588 #include "nouveau_ttm.h"
1589 #include "nouveau_gem.h"
1590
1591 +#include "drm_legacy.h"
1592 static int
1593 nouveau_vram_manager_init(struct ttm_mem_type_manager *man, unsigned long psize)
1594 {
1595 @@ -281,7 +282,7 @@ nouveau_ttm_mmap(struct file *filp, struct vm_area_struct *vma)
1596 struct nouveau_drm *drm = nouveau_drm(file_priv->minor->dev);
1597
1598 if (unlikely(vma->vm_pgoff < DRM_FILE_PAGE_OFFSET))
1599 - return -EINVAL;
1600 + return drm_legacy_mmap(filp, vma);
1601
1602 return ttm_bo_mmap(filp, vma, &drm->ttm.bdev);
1603 }
1604 diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
1605 index 3402033fa52a..dfaccfca0688 100644
1606 --- a/drivers/hid/hid-core.c
1607 +++ b/drivers/hid/hid-core.c
1608 @@ -1809,6 +1809,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
1609 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_ERGO_525V) },
1610 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_I405X) },
1611 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X) },
1612 + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2) },
1613 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X) },
1614 { HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD) },
1615 { HID_USB_DEVICE(USB_VENDOR_ID_LCPOWER, USB_DEVICE_ID_LCPOWER_LC1000 ) },
1616 diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
1617 index 7c863738e419..0e28190480d7 100644
1618 --- a/drivers/hid/hid-ids.h
1619 +++ b/drivers/hid/hid-ids.h
1620 @@ -300,6 +300,7 @@
1621 #define USB_DEVICE_ID_ELAN_TOUCHSCREEN 0x0089
1622 #define USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B 0x009b
1623 #define USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103 0x0103
1624 +#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c 0x010c
1625 #define USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F 0x016f
1626
1627 #define USB_VENDOR_ID_ELECOM 0x056e
1628 @@ -525,6 +526,7 @@
1629 #define USB_DEVICE_ID_KYE_GPEN_560 0x5003
1630 #define USB_DEVICE_ID_KYE_EASYPEN_I405X 0x5010
1631 #define USB_DEVICE_ID_KYE_MOUSEPEN_I608X 0x5011
1632 +#define USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2 0x501a
1633 #define USB_DEVICE_ID_KYE_EASYPEN_M610X 0x5013
1634
1635 #define USB_VENDOR_ID_LABTEC 0x1020
1636 diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
1637 index 725f22ca47fc..8df8ceb47659 100644
1638 --- a/drivers/hid/hid-input.c
1639 +++ b/drivers/hid/hid-input.c
1640 @@ -312,6 +312,9 @@ static const struct hid_device_id hid_battery_quirks[] = {
1641 USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI),
1642 HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE },
1643 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE,
1644 + USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO),
1645 + HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE },
1646 + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE,
1647 USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI),
1648 HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE },
1649 {}
1650 diff --git a/drivers/hid/hid-kye.c b/drivers/hid/hid-kye.c
1651 index b92bf01a1ae8..158fcf577fae 100644
1652 --- a/drivers/hid/hid-kye.c
1653 +++ b/drivers/hid/hid-kye.c
1654 @@ -323,6 +323,7 @@ static __u8 *kye_report_fixup(struct hid_device *hdev, __u8 *rdesc,
1655 }
1656 break;
1657 case USB_DEVICE_ID_KYE_MOUSEPEN_I608X:
1658 + case USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2:
1659 if (*rsize == MOUSEPEN_I608X_RDESC_ORIG_SIZE) {
1660 rdesc = mousepen_i608x_rdesc_fixed;
1661 *rsize = sizeof(mousepen_i608x_rdesc_fixed);
1662 @@ -415,6 +416,7 @@ static int kye_probe(struct hid_device *hdev, const struct hid_device_id *id)
1663 switch (id->product) {
1664 case USB_DEVICE_ID_KYE_EASYPEN_I405X:
1665 case USB_DEVICE_ID_KYE_MOUSEPEN_I608X:
1666 + case USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2:
1667 case USB_DEVICE_ID_KYE_EASYPEN_M610X:
1668 ret = kye_tablet_enable(hdev);
1669 if (ret) {
1670 @@ -446,6 +448,8 @@ static const struct hid_device_id kye_devices[] = {
1671 { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
1672 USB_DEVICE_ID_KYE_MOUSEPEN_I608X) },
1673 { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
1674 + USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2) },
1675 + { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
1676 USB_DEVICE_ID_KYE_EASYPEN_M610X) },
1677 { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
1678 USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) },
1679 diff --git a/drivers/hid/hid-roccat-pyra.c b/drivers/hid/hid-roccat-pyra.c
1680 index 1a07e07d99a0..47d7e74231e5 100644
1681 --- a/drivers/hid/hid-roccat-pyra.c
1682 +++ b/drivers/hid/hid-roccat-pyra.c
1683 @@ -35,6 +35,8 @@ static struct class *pyra_class;
1684 static void profile_activated(struct pyra_device *pyra,
1685 unsigned int new_profile)
1686 {
1687 + if (new_profile >= ARRAY_SIZE(pyra->profile_settings))
1688 + return;
1689 pyra->actual_profile = new_profile;
1690 pyra->actual_cpi = pyra->profile_settings[pyra->actual_profile].y_cpi;
1691 }
1692 @@ -257,9 +259,11 @@ static ssize_t pyra_sysfs_write_settings(struct file *fp,
1693 if (off != 0 || count != PYRA_SIZE_SETTINGS)
1694 return -EINVAL;
1695
1696 - mutex_lock(&pyra->pyra_lock);
1697 -
1698 settings = (struct pyra_settings const *)buf;
1699 + if (settings->startup_profile >= ARRAY_SIZE(pyra->profile_settings))
1700 + return -EINVAL;
1701 +
1702 + mutex_lock(&pyra->pyra_lock);
1703
1704 retval = pyra_set_settings(usb_dev, settings);
1705 if (retval) {
1706 diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c
1707 index 747d54421e73..80e33e0abc52 100644
1708 --- a/drivers/hid/i2c-hid/i2c-hid.c
1709 +++ b/drivers/hid/i2c-hid/i2c-hid.c
1710 @@ -137,6 +137,7 @@ struct i2c_hid {
1711 * descriptor. */
1712 unsigned int bufsize; /* i2c buffer size */
1713 char *inbuf; /* Input buffer */
1714 + char *rawbuf; /* Raw Input buffer */
1715 char *cmdbuf; /* Command buffer */
1716 char *argsbuf; /* Command arguments buffer */
1717
1718 @@ -369,7 +370,7 @@ static int i2c_hid_hwreset(struct i2c_client *client)
1719 static void i2c_hid_get_input(struct i2c_hid *ihid)
1720 {
1721 int ret, ret_size;
1722 - int size = le16_to_cpu(ihid->hdesc.wMaxInputLength);
1723 + int size = ihid->bufsize;
1724
1725 ret = i2c_master_recv(ihid->client, ihid->inbuf, size);
1726 if (ret != size) {
1727 @@ -504,9 +505,11 @@ static void i2c_hid_find_max_report(struct hid_device *hid, unsigned int type,
1728 static void i2c_hid_free_buffers(struct i2c_hid *ihid)
1729 {
1730 kfree(ihid->inbuf);
1731 + kfree(ihid->rawbuf);
1732 kfree(ihid->argsbuf);
1733 kfree(ihid->cmdbuf);
1734 ihid->inbuf = NULL;
1735 + ihid->rawbuf = NULL;
1736 ihid->cmdbuf = NULL;
1737 ihid->argsbuf = NULL;
1738 ihid->bufsize = 0;
1739 @@ -522,10 +525,11 @@ static int i2c_hid_alloc_buffers(struct i2c_hid *ihid, size_t report_size)
1740 report_size; /* report */
1741
1742 ihid->inbuf = kzalloc(report_size, GFP_KERNEL);
1743 + ihid->rawbuf = kzalloc(report_size, GFP_KERNEL);
1744 ihid->argsbuf = kzalloc(args_len, GFP_KERNEL);
1745 ihid->cmdbuf = kzalloc(sizeof(union command) + args_len, GFP_KERNEL);
1746
1747 - if (!ihid->inbuf || !ihid->argsbuf || !ihid->cmdbuf) {
1748 + if (!ihid->inbuf || !ihid->rawbuf || !ihid->argsbuf || !ihid->cmdbuf) {
1749 i2c_hid_free_buffers(ihid);
1750 return -ENOMEM;
1751 }
1752 @@ -552,12 +556,12 @@ static int i2c_hid_get_raw_report(struct hid_device *hid,
1753
1754 ret = i2c_hid_get_report(client,
1755 report_type == HID_FEATURE_REPORT ? 0x03 : 0x01,
1756 - report_number, ihid->inbuf, ask_count);
1757 + report_number, ihid->rawbuf, ask_count);
1758
1759 if (ret < 0)
1760 return ret;
1761
1762 - ret_count = ihid->inbuf[0] | (ihid->inbuf[1] << 8);
1763 + ret_count = ihid->rawbuf[0] | (ihid->rawbuf[1] << 8);
1764
1765 if (ret_count <= 2)
1766 return 0;
1767 @@ -566,7 +570,7 @@ static int i2c_hid_get_raw_report(struct hid_device *hid,
1768
1769 /* The query buffer contains the size, dropping it in the reply */
1770 count = min(count, ret_count - 2);
1771 - memcpy(buf, ihid->inbuf + 2, count);
1772 + memcpy(buf, ihid->rawbuf + 2, count);
1773
1774 return count;
1775 }
1776 @@ -702,12 +706,7 @@ static int i2c_hid_start(struct hid_device *hid)
1777
1778 static void i2c_hid_stop(struct hid_device *hid)
1779 {
1780 - struct i2c_client *client = hid->driver_data;
1781 - struct i2c_hid *ihid = i2c_get_clientdata(client);
1782 -
1783 hid->claimed = 0;
1784 -
1785 - i2c_hid_free_buffers(ihid);
1786 }
1787
1788 static int i2c_hid_open(struct hid_device *hid)
1789 diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
1790 index 552671ee7c5d..4477eb7457de 100644
1791 --- a/drivers/hid/usbhid/hid-quirks.c
1792 +++ b/drivers/hid/usbhid/hid-quirks.c
1793 @@ -73,6 +73,7 @@ static const struct hid_blacklist {
1794 { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN, HID_QUIRK_ALWAYS_POLL },
1795 { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B, HID_QUIRK_ALWAYS_POLL },
1796 { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103, HID_QUIRK_ALWAYS_POLL },
1797 + { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c, HID_QUIRK_ALWAYS_POLL },
1798 { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F, HID_QUIRK_ALWAYS_POLL },
1799 { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
1800 { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
1801 @@ -122,6 +123,7 @@ static const struct hid_blacklist {
1802 { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS, HID_QUIRK_MULTI_INPUT },
1803 { USB_VENDOR_ID_SIGMA_MICRO, USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD, HID_QUIRK_NO_INIT_REPORTS },
1804 { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X, HID_QUIRK_MULTI_INPUT },
1805 + { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2, HID_QUIRK_MULTI_INPUT },
1806 { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X, HID_QUIRK_MULTI_INPUT },
1807 { USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_DUOSENSE, HID_QUIRK_NO_INIT_REPORTS },
1808 { USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD, HID_QUIRK_NO_INIT_REPORTS },
1809 diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
1810 index 8593047bb726..b6bcd251c4a8 100644
1811 --- a/drivers/hid/wacom_sys.c
1812 +++ b/drivers/hid/wacom_sys.c
1813 @@ -70,22 +70,15 @@ static int wacom_raw_event(struct hid_device *hdev, struct hid_report *report,
1814 static int wacom_open(struct input_dev *dev)
1815 {
1816 struct wacom *wacom = input_get_drvdata(dev);
1817 - int retval;
1818 -
1819 - mutex_lock(&wacom->lock);
1820 - retval = hid_hw_open(wacom->hdev);
1821 - mutex_unlock(&wacom->lock);
1822
1823 - return retval;
1824 + return hid_hw_open(wacom->hdev);
1825 }
1826
1827 static void wacom_close(struct input_dev *dev)
1828 {
1829 struct wacom *wacom = input_get_drvdata(dev);
1830
1831 - mutex_lock(&wacom->lock);
1832 hid_hw_close(wacom->hdev);
1833 - mutex_unlock(&wacom->lock);
1834 }
1835
1836 /*
1837 diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
1838 index 586b2405b0d4..7cf998cdd011 100644
1839 --- a/drivers/hid/wacom_wac.c
1840 +++ b/drivers/hid/wacom_wac.c
1841 @@ -3026,6 +3026,7 @@ const struct hid_device_id wacom_ids[] = {
1842 { USB_DEVICE_WACOM(0x4004) },
1843 { USB_DEVICE_WACOM(0x5000) },
1844 { USB_DEVICE_WACOM(0x5002) },
1845 + { USB_DEVICE_LENOVO(0x6004) },
1846
1847 { USB_DEVICE_WACOM(HID_ANY_ID) },
1848 { }
1849 diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
1850 index a2d1a9612c86..d36ce6835fb7 100644
1851 --- a/drivers/hv/channel_mgmt.c
1852 +++ b/drivers/hv/channel_mgmt.c
1853 @@ -216,9 +216,16 @@ static void vmbus_process_rescind_offer(struct work_struct *work)
1854 unsigned long flags;
1855 struct vmbus_channel *primary_channel;
1856 struct vmbus_channel_relid_released msg;
1857 + struct device *dev;
1858 +
1859 + if (channel->device_obj) {
1860 + dev = get_device(&channel->device_obj->device);
1861 + if (dev) {
1862 + vmbus_device_unregister(channel->device_obj);
1863 + put_device(dev);
1864 + }
1865 + }
1866
1867 - if (channel->device_obj)
1868 - vmbus_device_unregister(channel->device_obj);
1869 memset(&msg, 0, sizeof(struct vmbus_channel_relid_released));
1870 msg.child_relid = channel->offermsg.child_relid;
1871 msg.header.msgtype = CHANNELMSG_RELID_RELEASED;
1872 diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
1873 index d125a019383f..54ff03791940 100644
1874 --- a/drivers/input/mouse/alps.c
1875 +++ b/drivers/input/mouse/alps.c
1876 @@ -919,18 +919,21 @@ static void alps_get_finger_coordinate_v7(struct input_mt_pos *mt,
1877
1878 static int alps_get_mt_count(struct input_mt_pos *mt)
1879 {
1880 - int i;
1881 + int i, fingers = 0;
1882
1883 - for (i = 0; i < MAX_TOUCHES && mt[i].x != 0 && mt[i].y != 0; i++)
1884 - /* empty */;
1885 + for (i = 0; i < MAX_TOUCHES; i++) {
1886 + if (mt[i].x != 0 || mt[i].y != 0)
1887 + fingers++;
1888 + }
1889
1890 - return i;
1891 + return fingers;
1892 }
1893
1894 static int alps_decode_packet_v7(struct alps_fields *f,
1895 unsigned char *p,
1896 struct psmouse *psmouse)
1897 {
1898 + struct alps_data *priv = psmouse->private;
1899 unsigned char pkt_id;
1900
1901 pkt_id = alps_get_packet_id_v7(p);
1902 @@ -938,19 +941,52 @@ static int alps_decode_packet_v7(struct alps_fields *f,
1903 return 0;
1904 if (pkt_id == V7_PACKET_ID_UNKNOWN)
1905 return -1;
1906 + /*
1907 + * NEW packets are send to indicate a discontinuity in the finger
1908 + * coordinate reporting. Specifically a finger may have moved from
1909 + * slot 0 to 1 or vice versa. INPUT_MT_TRACK takes care of this for
1910 + * us.
1911 + *
1912 + * NEW packets have 3 problems:
1913 + * 1) They do not contain middle / right button info (on non clickpads)
1914 + * this can be worked around by preserving the old button state
1915 + * 2) They do not contain an accurate fingercount, and they are
1916 + * typically send when the number of fingers changes. We cannot use
1917 + * the old finger count as that may mismatch with the amount of
1918 + * touch coordinates we've available in the NEW packet
1919 + * 3) Their x data for the second touch is inaccurate leading to
1920 + * a possible jump of the x coordinate by 16 units when the first
1921 + * non NEW packet comes in
1922 + * Since problems 2 & 3 cannot be worked around, just ignore them.
1923 + */
1924 + if (pkt_id == V7_PACKET_ID_NEW)
1925 + return 1;
1926
1927 alps_get_finger_coordinate_v7(f->mt, p, pkt_id);
1928
1929 - if (pkt_id == V7_PACKET_ID_TWO || pkt_id == V7_PACKET_ID_MULTI) {
1930 - f->left = (p[0] & 0x80) >> 7;
1931 + if (pkt_id == V7_PACKET_ID_TWO)
1932 + f->fingers = alps_get_mt_count(f->mt);
1933 + else /* pkt_id == V7_PACKET_ID_MULTI */
1934 + f->fingers = 3 + (p[5] & 0x03);
1935 +
1936 + f->left = (p[0] & 0x80) >> 7;
1937 + if (priv->flags & ALPS_BUTTONPAD) {
1938 + if (p[0] & 0x20)
1939 + f->fingers++;
1940 + if (p[0] & 0x10)
1941 + f->fingers++;
1942 + } else {
1943 f->right = (p[0] & 0x20) >> 5;
1944 f->middle = (p[0] & 0x10) >> 4;
1945 }
1946
1947 - if (pkt_id == V7_PACKET_ID_TWO)
1948 - f->fingers = alps_get_mt_count(f->mt);
1949 - else if (pkt_id == V7_PACKET_ID_MULTI)
1950 - f->fingers = 3 + (p[5] & 0x03);
1951 + /* Sometimes a single touch is reported in mt[1] rather then mt[0] */
1952 + if (f->fingers == 1 && f->mt[0].x == 0 && f->mt[0].y == 0) {
1953 + f->mt[0].x = f->mt[1].x;
1954 + f->mt[0].y = f->mt[1].y;
1955 + f->mt[1].x = 0;
1956 + f->mt[1].y = 0;
1957 + }
1958
1959 return 0;
1960 }
1961 diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
1962 index a27d6cb1a793..b2b9c9264131 100644
1963 --- a/drivers/iommu/intel-iommu.c
1964 +++ b/drivers/iommu/intel-iommu.c
1965 @@ -1983,7 +1983,7 @@ static int __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn,
1966 {
1967 struct dma_pte *first_pte = NULL, *pte = NULL;
1968 phys_addr_t uninitialized_var(pteval);
1969 - unsigned long sg_res;
1970 + unsigned long sg_res = 0;
1971 unsigned int largepage_lvl = 0;
1972 unsigned long lvl_pages = 0;
1973
1974 @@ -1994,10 +1994,8 @@ static int __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn,
1975
1976 prot &= DMA_PTE_READ | DMA_PTE_WRITE | DMA_PTE_SNP;
1977
1978 - if (sg)
1979 - sg_res = 0;
1980 - else {
1981 - sg_res = nr_pages + 1;
1982 + if (!sg) {
1983 + sg_res = nr_pages;
1984 pteval = ((phys_addr_t)phys_pfn << VTD_PAGE_SHIFT) | prot;
1985 }
1986
1987 @@ -4267,6 +4265,10 @@ static int intel_iommu_attach_device(struct iommu_domain *domain,
1988 domain_remove_one_dev_info(old_domain, dev);
1989 else
1990 domain_remove_dev_info(old_domain);
1991 +
1992 + if (!domain_type_is_vm_or_si(old_domain) &&
1993 + list_empty(&old_domain->devices))
1994 + domain_exit(old_domain);
1995 }
1996 }
1997
1998 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
1999 index 9c66e5997fc8..c1b0d52bfcb0 100644
2000 --- a/drivers/md/raid5.c
2001 +++ b/drivers/md/raid5.c
2002 @@ -2917,8 +2917,11 @@ static int fetch_block(struct stripe_head *sh, struct stripe_head_state *s,
2003 (sh->raid_conf->level <= 5 && s->failed && fdev[0]->towrite &&
2004 (!test_bit(R5_Insync, &dev->flags) || test_bit(STRIPE_PREREAD_ACTIVE, &sh->state)) &&
2005 !test_bit(R5_OVERWRITE, &fdev[0]->flags)) ||
2006 - (sh->raid_conf->level == 6 && s->failed && s->to_write &&
2007 - s->to_write - s->non_overwrite < sh->raid_conf->raid_disks - 2 &&
2008 + ((sh->raid_conf->level == 6 ||
2009 + sh->sector >= sh->raid_conf->mddev->recovery_cp)
2010 + && s->failed && s->to_write &&
2011 + (s->to_write - s->non_overwrite <
2012 + sh->raid_conf->raid_disks - sh->raid_conf->max_degraded) &&
2013 (!test_bit(R5_Insync, &dev->flags) || test_bit(STRIPE_PREREAD_ACTIVE, &sh->state))))) {
2014 /* we would like to get this block, possibly by computing it,
2015 * otherwise read it if the backing disk is insync
2016 diff --git a/drivers/misc/genwqe/card_utils.c b/drivers/misc/genwqe/card_utils.c
2017 index 7cb3b7e41739..1ca94e6fa8fb 100644
2018 --- a/drivers/misc/genwqe/card_utils.c
2019 +++ b/drivers/misc/genwqe/card_utils.c
2020 @@ -590,6 +590,8 @@ int genwqe_user_vmap(struct genwqe_dev *cd, struct dma_mapping *m, void *uaddr,
2021 m->nr_pages,
2022 1, /* write by caller */
2023 m->page_list); /* ptrs to pages */
2024 + if (rc < 0)
2025 + goto fail_get_user_pages;
2026
2027 /* assumption: get_user_pages can be killed by signals. */
2028 if (rc < m->nr_pages) {
2029 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
2030 index ada1a3ea3a87..7625bd791fca 100644
2031 --- a/drivers/mmc/host/sdhci.c
2032 +++ b/drivers/mmc/host/sdhci.c
2033 @@ -1319,6 +1319,8 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
2034
2035 sdhci_runtime_pm_get(host);
2036
2037 + present = mmc_gpio_get_cd(host->mmc);
2038 +
2039 spin_lock_irqsave(&host->lock, flags);
2040
2041 WARN_ON(host->mrq != NULL);
2042 @@ -1347,7 +1349,6 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
2043 * zero: cd-gpio is used, and card is removed
2044 * one: cd-gpio is used, and card is present
2045 */
2046 - present = mmc_gpio_get_cd(host->mmc);
2047 if (present < 0) {
2048 /* If polling, assume that the card is always present. */
2049 if (host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION)
2050 @@ -2072,15 +2073,18 @@ static void sdhci_card_event(struct mmc_host *mmc)
2051 {
2052 struct sdhci_host *host = mmc_priv(mmc);
2053 unsigned long flags;
2054 + int present;
2055
2056 /* First check if client has provided their own card event */
2057 if (host->ops->card_event)
2058 host->ops->card_event(host);
2059
2060 + present = sdhci_do_get_cd(host);
2061 +
2062 spin_lock_irqsave(&host->lock, flags);
2063
2064 /* Check host->mrq first in case we are runtime suspended */
2065 - if (host->mrq && !sdhci_do_get_cd(host)) {
2066 + if (host->mrq && !present) {
2067 pr_err("%s: Card removed during transfer!\n",
2068 mmc_hostname(host->mmc));
2069 pr_err("%s: Resetting controller.\n",
2070 diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c
2071 index ed827cf894e4..dd8f66ccd2d6 100644
2072 --- a/drivers/mtd/devices/m25p80.c
2073 +++ b/drivers/mtd/devices/m25p80.c
2074 @@ -300,11 +300,11 @@ static const struct spi_device_id m25p_ids[] = {
2075 {"m45pe10"}, {"m45pe80"}, {"m45pe16"},
2076 {"m25pe20"}, {"m25pe80"}, {"m25pe16"},
2077 {"m25px16"}, {"m25px32"}, {"m25px32-s0"}, {"m25px32-s1"},
2078 - {"m25px64"},
2079 + {"m25px64"}, {"m25px80"},
2080 {"w25x10"}, {"w25x20"}, {"w25x40"}, {"w25x80"},
2081 {"w25x16"}, {"w25x32"}, {"w25q32"}, {"w25q32dw"},
2082 - {"w25x64"}, {"w25q64"}, {"w25q128"}, {"w25q80"},
2083 - {"w25q80bl"}, {"w25q128"}, {"w25q256"}, {"cat25c11"},
2084 + {"w25x64"}, {"w25q64"}, {"w25q80"}, {"w25q80bl"},
2085 + {"w25q128"}, {"w25q256"}, {"cat25c11"},
2086 {"cat25c03"}, {"cat25c09"}, {"cat25c17"}, {"cat25128"},
2087 { },
2088 };
2089 diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
2090 index 3b357e920a0c..10d07dd20f7c 100644
2091 --- a/drivers/mtd/nand/omap2.c
2092 +++ b/drivers/mtd/nand/omap2.c
2093 @@ -1741,13 +1741,6 @@ static int omap_nand_probe(struct platform_device *pdev)
2094 goto return_error;
2095 }
2096
2097 - /* check for small page devices */
2098 - if ((mtd->oobsize < 64) && (pdata->ecc_opt != OMAP_ECC_HAM1_CODE_HW)) {
2099 - dev_err(&info->pdev->dev, "small page devices are not supported\n");
2100 - err = -EINVAL;
2101 - goto return_error;
2102 - }
2103 -
2104 /* re-populate low-level callbacks based on xfer modes */
2105 switch (pdata->xfer_type) {
2106 case NAND_OMAP_PREFETCH_POLLED:
2107 diff --git a/drivers/mtd/tests/torturetest.c b/drivers/mtd/tests/torturetest.c
2108 index eeab96973cf0..b55bc52a1340 100644
2109 --- a/drivers/mtd/tests/torturetest.c
2110 +++ b/drivers/mtd/tests/torturetest.c
2111 @@ -264,7 +264,9 @@ static int __init tort_init(void)
2112 int i;
2113 void *patt;
2114
2115 - mtdtest_erase_good_eraseblocks(mtd, bad_ebs, eb, ebcnt);
2116 + err = mtdtest_erase_good_eraseblocks(mtd, bad_ebs, eb, ebcnt);
2117 + if (err)
2118 + goto out;
2119
2120 /* Check if the eraseblocks contain only 0xFF bytes */
2121 if (check) {
2122 diff --git a/drivers/mtd/ubi/upd.c b/drivers/mtd/ubi/upd.c
2123 index ec2c2dc1c1ca..2a1b6e037e1a 100644
2124 --- a/drivers/mtd/ubi/upd.c
2125 +++ b/drivers/mtd/ubi/upd.c
2126 @@ -133,6 +133,10 @@ int ubi_start_update(struct ubi_device *ubi, struct ubi_volume *vol,
2127 ubi_assert(!vol->updating && !vol->changing_leb);
2128 vol->updating = 1;
2129
2130 + vol->upd_buf = vmalloc(ubi->leb_size);
2131 + if (!vol->upd_buf)
2132 + return -ENOMEM;
2133 +
2134 err = set_update_marker(ubi, vol);
2135 if (err)
2136 return err;
2137 @@ -152,14 +156,12 @@ int ubi_start_update(struct ubi_device *ubi, struct ubi_volume *vol,
2138 err = clear_update_marker(ubi, vol, 0);
2139 if (err)
2140 return err;
2141 +
2142 + vfree(vol->upd_buf);
2143 vol->updating = 0;
2144 return 0;
2145 }
2146
2147 - vol->upd_buf = vmalloc(ubi->leb_size);
2148 - if (!vol->upd_buf)
2149 - return -ENOMEM;
2150 -
2151 vol->upd_ebs = div_u64(bytes + vol->usable_leb_size - 1,
2152 vol->usable_leb_size);
2153 vol->upd_bytes = bytes;
2154 diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c
2155 index 6654f191868e..b9686c1472d2 100644
2156 --- a/drivers/mtd/ubi/wl.c
2157 +++ b/drivers/mtd/ubi/wl.c
2158 @@ -1212,7 +1212,6 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk,
2159
2160 err = do_sync_erase(ubi, e1, vol_id, lnum, 0);
2161 if (err) {
2162 - kmem_cache_free(ubi_wl_entry_slab, e1);
2163 if (e2)
2164 kmem_cache_free(ubi_wl_entry_slab, e2);
2165 goto out_ro;
2166 @@ -1226,10 +1225,8 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk,
2167 dbg_wl("PEB %d (LEB %d:%d) was put meanwhile, erase",
2168 e2->pnum, vol_id, lnum);
2169 err = do_sync_erase(ubi, e2, vol_id, lnum, 0);
2170 - if (err) {
2171 - kmem_cache_free(ubi_wl_entry_slab, e2);
2172 + if (err)
2173 goto out_ro;
2174 - }
2175 }
2176
2177 dbg_wl("done");
2178 @@ -1265,10 +1262,9 @@ out_not_moved:
2179
2180 ubi_free_vid_hdr(ubi, vid_hdr);
2181 err = do_sync_erase(ubi, e2, vol_id, lnum, torture);
2182 - if (err) {
2183 - kmem_cache_free(ubi_wl_entry_slab, e2);
2184 + if (err)
2185 goto out_ro;
2186 - }
2187 +
2188 mutex_unlock(&ubi->move_mutex);
2189 return 0;
2190
2191 diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
2192 index 644e6ab8a489..dc807e10f802 100644
2193 --- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c
2194 +++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
2195 @@ -735,7 +735,7 @@ static int peak_usb_create_dev(struct peak_usb_adapter *peak_usb_adapter,
2196 dev->cmd_buf = kmalloc(PCAN_USB_MAX_CMD_LEN, GFP_KERNEL);
2197 if (!dev->cmd_buf) {
2198 err = -ENOMEM;
2199 - goto lbl_set_intf_data;
2200 + goto lbl_free_candev;
2201 }
2202
2203 dev->udev = usb_dev;
2204 @@ -775,7 +775,7 @@ static int peak_usb_create_dev(struct peak_usb_adapter *peak_usb_adapter,
2205 err = register_candev(netdev);
2206 if (err) {
2207 dev_err(&intf->dev, "couldn't register CAN device: %d\n", err);
2208 - goto lbl_free_cmd_buf;
2209 + goto lbl_restore_intf_data;
2210 }
2211
2212 if (dev->prev_siblings)
2213 @@ -788,14 +788,14 @@ static int peak_usb_create_dev(struct peak_usb_adapter *peak_usb_adapter,
2214 if (dev->adapter->dev_init) {
2215 err = dev->adapter->dev_init(dev);
2216 if (err)
2217 - goto lbl_free_cmd_buf;
2218 + goto lbl_unregister_candev;
2219 }
2220
2221 /* set bus off */
2222 if (dev->adapter->dev_set_bus) {
2223 err = dev->adapter->dev_set_bus(dev, 0);
2224 if (err)
2225 - goto lbl_free_cmd_buf;
2226 + goto lbl_unregister_candev;
2227 }
2228
2229 /* get device number early */
2230 @@ -807,11 +807,14 @@ static int peak_usb_create_dev(struct peak_usb_adapter *peak_usb_adapter,
2231
2232 return 0;
2233
2234 -lbl_free_cmd_buf:
2235 - kfree(dev->cmd_buf);
2236 +lbl_unregister_candev:
2237 + unregister_candev(netdev);
2238
2239 -lbl_set_intf_data:
2240 +lbl_restore_intf_data:
2241 usb_set_intfdata(intf, dev->prev_siblings);
2242 + kfree(dev->cmd_buf);
2243 +
2244 +lbl_free_candev:
2245 free_candev(netdev);
2246
2247 return err;
2248 diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
2249 index 263dd921edc4..f7f796a2c50b 100644
2250 --- a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
2251 +++ b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
2252 @@ -333,8 +333,6 @@ static int pcan_usb_pro_send_req(struct peak_usb_device *dev, int req_id,
2253 if (!(dev->state & PCAN_USB_STATE_CONNECTED))
2254 return 0;
2255
2256 - memset(req_addr, '\0', req_size);
2257 -
2258 req_type = USB_TYPE_VENDOR | USB_RECIP_OTHER;
2259
2260 switch (req_id) {
2261 @@ -345,6 +343,7 @@ static int pcan_usb_pro_send_req(struct peak_usb_device *dev, int req_id,
2262 default:
2263 p = usb_rcvctrlpipe(dev->udev, 0);
2264 req_type |= USB_DIR_IN;
2265 + memset(req_addr, '\0', req_size);
2266 break;
2267 }
2268
2269 diff --git a/drivers/net/wireless/ath/ath5k/qcu.c b/drivers/net/wireless/ath/ath5k/qcu.c
2270 index 0583c69d26db..ddaad712c59a 100644
2271 --- a/drivers/net/wireless/ath/ath5k/qcu.c
2272 +++ b/drivers/net/wireless/ath/ath5k/qcu.c
2273 @@ -225,13 +225,7 @@ ath5k_hw_setup_tx_queue(struct ath5k_hw *ah, enum ath5k_tx_queue queue_type,
2274 } else {
2275 switch (queue_type) {
2276 case AR5K_TX_QUEUE_DATA:
2277 - for (queue = AR5K_TX_QUEUE_ID_DATA_MIN;
2278 - ah->ah_txq[queue].tqi_type !=
2279 - AR5K_TX_QUEUE_INACTIVE; queue++) {
2280 -
2281 - if (queue > AR5K_TX_QUEUE_ID_DATA_MAX)
2282 - return -EINVAL;
2283 - }
2284 + queue = queue_info->tqi_subtype;
2285 break;
2286 case AR5K_TX_QUEUE_UAPSD:
2287 queue = AR5K_TX_QUEUE_ID_UAPSD;
2288 diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
2289 index 975074fc11bc..e8e8dd28bade 100644
2290 --- a/drivers/net/wireless/ath/ath9k/hw.h
2291 +++ b/drivers/net/wireless/ath/ath9k/hw.h
2292 @@ -217,8 +217,8 @@
2293 #define AH_WOW_BEACON_MISS BIT(3)
2294
2295 enum ath_hw_txq_subtype {
2296 - ATH_TXQ_AC_BE = 0,
2297 - ATH_TXQ_AC_BK = 1,
2298 + ATH_TXQ_AC_BK = 0,
2299 + ATH_TXQ_AC_BE = 1,
2300 ATH_TXQ_AC_VI = 2,
2301 ATH_TXQ_AC_VO = 3,
2302 };
2303 diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c
2304 index 275205ab5f15..3e58bfa0c1fd 100644
2305 --- a/drivers/net/wireless/ath/ath9k/mac.c
2306 +++ b/drivers/net/wireless/ath/ath9k/mac.c
2307 @@ -311,14 +311,7 @@ int ath9k_hw_setuptxqueue(struct ath_hw *ah, enum ath9k_tx_queue type,
2308 q = ATH9K_NUM_TX_QUEUES - 3;
2309 break;
2310 case ATH9K_TX_QUEUE_DATA:
2311 - for (q = 0; q < ATH9K_NUM_TX_QUEUES; q++)
2312 - if (ah->txq[q].tqi_type ==
2313 - ATH9K_TX_QUEUE_INACTIVE)
2314 - break;
2315 - if (q == ATH9K_NUM_TX_QUEUES) {
2316 - ath_err(common, "No available TX queue\n");
2317 - return -1;
2318 - }
2319 + q = qinfo->tqi_subtype;
2320 break;
2321 default:
2322 ath_err(common, "Invalid TX queue type: %u\n", type);
2323 diff --git a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c
2324 index 8079a9ddcba9..0c9671f2f01a 100644
2325 --- a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c
2326 +++ b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c
2327 @@ -1081,8 +1081,17 @@ brcmf_msgbuf_rx_skb(struct brcmf_msgbuf *msgbuf, struct sk_buff *skb,
2328 {
2329 struct brcmf_if *ifp;
2330
2331 + /* The ifidx is the idx to map to matching netdev/ifp. When receiving
2332 + * events this is easy because it contains the bssidx which maps
2333 + * 1-on-1 to the netdev/ifp. But for data frames the ifidx is rcvd.
2334 + * bssidx 1 is used for p2p0 and no data can be received or
2335 + * transmitted on it. Therefor bssidx is ifidx + 1 if ifidx > 0
2336 + */
2337 + if (ifidx)
2338 + (ifidx)++;
2339 ifp = msgbuf->drvr->iflist[ifidx];
2340 if (!ifp || !ifp->ndev) {
2341 + brcmf_err("Received pkt for invalid ifidx %d\n", ifidx);
2342 brcmu_pkt_buf_free_skb(skb);
2343 return;
2344 }
2345 diff --git a/drivers/net/wireless/iwlwifi/dvm/commands.h b/drivers/net/wireless/iwlwifi/dvm/commands.h
2346 index 751ae1d10b7f..7a34e4d158d1 100644
2347 --- a/drivers/net/wireless/iwlwifi/dvm/commands.h
2348 +++ b/drivers/net/wireless/iwlwifi/dvm/commands.h
2349 @@ -966,21 +966,21 @@ struct iwl_rem_sta_cmd {
2350
2351
2352 /* WiFi queues mask */
2353 -#define IWL_SCD_BK_MSK cpu_to_le32(BIT(0))
2354 -#define IWL_SCD_BE_MSK cpu_to_le32(BIT(1))
2355 -#define IWL_SCD_VI_MSK cpu_to_le32(BIT(2))
2356 -#define IWL_SCD_VO_MSK cpu_to_le32(BIT(3))
2357 -#define IWL_SCD_MGMT_MSK cpu_to_le32(BIT(3))
2358 +#define IWL_SCD_BK_MSK BIT(0)
2359 +#define IWL_SCD_BE_MSK BIT(1)
2360 +#define IWL_SCD_VI_MSK BIT(2)
2361 +#define IWL_SCD_VO_MSK BIT(3)
2362 +#define IWL_SCD_MGMT_MSK BIT(3)
2363
2364 /* PAN queues mask */
2365 -#define IWL_PAN_SCD_BK_MSK cpu_to_le32(BIT(4))
2366 -#define IWL_PAN_SCD_BE_MSK cpu_to_le32(BIT(5))
2367 -#define IWL_PAN_SCD_VI_MSK cpu_to_le32(BIT(6))
2368 -#define IWL_PAN_SCD_VO_MSK cpu_to_le32(BIT(7))
2369 -#define IWL_PAN_SCD_MGMT_MSK cpu_to_le32(BIT(7))
2370 -#define IWL_PAN_SCD_MULTICAST_MSK cpu_to_le32(BIT(8))
2371 +#define IWL_PAN_SCD_BK_MSK BIT(4)
2372 +#define IWL_PAN_SCD_BE_MSK BIT(5)
2373 +#define IWL_PAN_SCD_VI_MSK BIT(6)
2374 +#define IWL_PAN_SCD_VO_MSK BIT(7)
2375 +#define IWL_PAN_SCD_MGMT_MSK BIT(7)
2376 +#define IWL_PAN_SCD_MULTICAST_MSK BIT(8)
2377
2378 -#define IWL_AGG_TX_QUEUE_MSK cpu_to_le32(0xffc00)
2379 +#define IWL_AGG_TX_QUEUE_MSK 0xffc00
2380
2381 #define IWL_DROP_ALL BIT(1)
2382
2383 @@ -1005,12 +1005,17 @@ struct iwl_rem_sta_cmd {
2384 * 1: Dump multiple MSDU according to PS, INVALID STA, TTL, TID disable.
2385 * 2: Dump all FIFO
2386 */
2387 -struct iwl_txfifo_flush_cmd {
2388 +struct iwl_txfifo_flush_cmd_v3 {
2389 __le32 queue_control;
2390 __le16 flush_control;
2391 __le16 reserved;
2392 } __packed;
2393
2394 +struct iwl_txfifo_flush_cmd_v2 {
2395 + __le16 queue_control;
2396 + __le16 flush_control;
2397 +} __packed;
2398 +
2399 /*
2400 * REPLY_WEP_KEY = 0x20
2401 */
2402 diff --git a/drivers/net/wireless/iwlwifi/dvm/lib.c b/drivers/net/wireless/iwlwifi/dvm/lib.c
2403 index 2191621d69c1..cfe1293692fc 100644
2404 --- a/drivers/net/wireless/iwlwifi/dvm/lib.c
2405 +++ b/drivers/net/wireless/iwlwifi/dvm/lib.c
2406 @@ -137,37 +137,38 @@ int iwlagn_manage_ibss_station(struct iwl_priv *priv,
2407 */
2408 int iwlagn_txfifo_flush(struct iwl_priv *priv, u32 scd_q_msk)
2409 {
2410 - struct iwl_txfifo_flush_cmd flush_cmd;
2411 - struct iwl_host_cmd cmd = {
2412 - .id = REPLY_TXFIFO_FLUSH,
2413 - .len = { sizeof(struct iwl_txfifo_flush_cmd), },
2414 - .data = { &flush_cmd, },
2415 + struct iwl_txfifo_flush_cmd_v3 flush_cmd_v3 = {
2416 + .flush_control = cpu_to_le16(IWL_DROP_ALL),
2417 + };
2418 + struct iwl_txfifo_flush_cmd_v2 flush_cmd_v2 = {
2419 + .flush_control = cpu_to_le16(IWL_DROP_ALL),
2420 };
2421
2422 - memset(&flush_cmd, 0, sizeof(flush_cmd));
2423 + u32 queue_control = IWL_SCD_VO_MSK | IWL_SCD_VI_MSK |
2424 + IWL_SCD_BE_MSK | IWL_SCD_BK_MSK | IWL_SCD_MGMT_MSK;
2425
2426 - flush_cmd.queue_control = IWL_SCD_VO_MSK | IWL_SCD_VI_MSK |
2427 - IWL_SCD_BE_MSK | IWL_SCD_BK_MSK |
2428 - IWL_SCD_MGMT_MSK;
2429 if ((priv->valid_contexts != BIT(IWL_RXON_CTX_BSS)))
2430 - flush_cmd.queue_control |= IWL_PAN_SCD_VO_MSK |
2431 - IWL_PAN_SCD_VI_MSK |
2432 - IWL_PAN_SCD_BE_MSK |
2433 - IWL_PAN_SCD_BK_MSK |
2434 - IWL_PAN_SCD_MGMT_MSK |
2435 - IWL_PAN_SCD_MULTICAST_MSK;
2436 + queue_control |= IWL_PAN_SCD_VO_MSK | IWL_PAN_SCD_VI_MSK |
2437 + IWL_PAN_SCD_BE_MSK | IWL_PAN_SCD_BK_MSK |
2438 + IWL_PAN_SCD_MGMT_MSK |
2439 + IWL_PAN_SCD_MULTICAST_MSK;
2440
2441 if (priv->nvm_data->sku_cap_11n_enable)
2442 - flush_cmd.queue_control |= IWL_AGG_TX_QUEUE_MSK;
2443 + queue_control |= IWL_AGG_TX_QUEUE_MSK;
2444
2445 if (scd_q_msk)
2446 - flush_cmd.queue_control = cpu_to_le32(scd_q_msk);
2447 -
2448 - IWL_DEBUG_INFO(priv, "queue control: 0x%x\n",
2449 - flush_cmd.queue_control);
2450 - flush_cmd.flush_control = cpu_to_le16(IWL_DROP_ALL);
2451 -
2452 - return iwl_dvm_send_cmd(priv, &cmd);
2453 + queue_control = scd_q_msk;
2454 +
2455 + IWL_DEBUG_INFO(priv, "queue control: 0x%x\n", queue_control);
2456 + flush_cmd_v3.queue_control = cpu_to_le32(queue_control);
2457 + flush_cmd_v2.queue_control = cpu_to_le16((u16)queue_control);
2458 +
2459 + if (IWL_UCODE_API(priv->fw->ucode_ver) > 2)
2460 + return iwl_dvm_send_cmd_pdu(priv, REPLY_TXFIFO_FLUSH, 0,
2461 + sizeof(flush_cmd_v3),
2462 + &flush_cmd_v3);
2463 + return iwl_dvm_send_cmd_pdu(priv, REPLY_TXFIFO_FLUSH, 0,
2464 + sizeof(flush_cmd_v2), &flush_cmd_v2);
2465 }
2466
2467 void iwlagn_dev_txfifo_flush(struct iwl_priv *priv)
2468 diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api.h b/drivers/net/wireless/iwlwifi/mvm/fw-api.h
2469 index c62575d86bcd..5bd902c976e7 100644
2470 --- a/drivers/net/wireless/iwlwifi/mvm/fw-api.h
2471 +++ b/drivers/net/wireless/iwlwifi/mvm/fw-api.h
2472 @@ -1589,7 +1589,7 @@ enum iwl_sf_scenario {
2473 #define SF_NUM_TIMEOUT_TYPES 2 /* Aging timer and Idle timer */
2474
2475 /* smart FIFO default values */
2476 -#define SF_W_MARK_SISO 4096
2477 +#define SF_W_MARK_SISO 6144
2478 #define SF_W_MARK_MIMO2 8192
2479 #define SF_W_MARK_MIMO3 6144
2480 #define SF_W_MARK_LEGACY 4096
2481 diff --git a/drivers/net/wireless/iwlwifi/pcie/drv.c b/drivers/net/wireless/iwlwifi/pcie/drv.c
2482 index 6ced8549eb3a..05cba8c05d3f 100644
2483 --- a/drivers/net/wireless/iwlwifi/pcie/drv.c
2484 +++ b/drivers/net/wireless/iwlwifi/pcie/drv.c
2485 @@ -367,7 +367,11 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
2486
2487 /* 3165 Series */
2488 {IWL_PCI_DEVICE(0x3165, 0x4010, iwl3165_2ac_cfg)},
2489 + {IWL_PCI_DEVICE(0x3165, 0x4012, iwl3165_2ac_cfg)},
2490 + {IWL_PCI_DEVICE(0x3165, 0x4110, iwl3165_2ac_cfg)},
2491 {IWL_PCI_DEVICE(0x3165, 0x4210, iwl3165_2ac_cfg)},
2492 + {IWL_PCI_DEVICE(0x3165, 0x4410, iwl3165_2ac_cfg)},
2493 + {IWL_PCI_DEVICE(0x3165, 0x4510, iwl3165_2ac_cfg)},
2494
2495 /* 7265 Series */
2496 {IWL_PCI_DEVICE(0x095A, 0x5010, iwl7265_2ac_cfg)},
2497 diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
2498 index c8ca98c2b480..3010ffc9029d 100644
2499 --- a/drivers/pci/probe.c
2500 +++ b/drivers/pci/probe.c
2501 @@ -216,14 +216,17 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
2502 res->flags |= IORESOURCE_SIZEALIGN;
2503 if (res->flags & IORESOURCE_IO) {
2504 l &= PCI_BASE_ADDRESS_IO_MASK;
2505 + sz &= PCI_BASE_ADDRESS_IO_MASK;
2506 mask = PCI_BASE_ADDRESS_IO_MASK & (u32) IO_SPACE_LIMIT;
2507 } else {
2508 l &= PCI_BASE_ADDRESS_MEM_MASK;
2509 + sz &= PCI_BASE_ADDRESS_MEM_MASK;
2510 mask = (u32)PCI_BASE_ADDRESS_MEM_MASK;
2511 }
2512 } else {
2513 res->flags |= (l & IORESOURCE_ROM_ENABLE);
2514 l &= PCI_ROM_ADDRESS_MASK;
2515 + sz &= PCI_ROM_ADDRESS_MASK;
2516 mask = (u32)PCI_ROM_ADDRESS_MASK;
2517 }
2518
2519 diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
2520 index adab82d5279f..697be114e21a 100644
2521 --- a/drivers/regulator/s2mps11.c
2522 +++ b/drivers/regulator/s2mps11.c
2523 @@ -479,7 +479,7 @@ static struct regulator_ops s2mps14_reg_ops = {
2524 .enable_mask = S2MPS14_ENABLE_MASK \
2525 }
2526
2527 -#define regulator_desc_s2mps14_buck(num, min, step) { \
2528 +#define regulator_desc_s2mps14_buck(num, min, step, min_sel) { \
2529 .name = "BUCK"#num, \
2530 .id = S2MPS14_BUCK##num, \
2531 .ops = &s2mps14_reg_ops, \
2532 @@ -488,7 +488,7 @@ static struct regulator_ops s2mps14_reg_ops = {
2533 .min_uV = min, \
2534 .uV_step = step, \
2535 .n_voltages = S2MPS14_BUCK_N_VOLTAGES, \
2536 - .linear_min_sel = S2MPS14_BUCK1235_START_SEL, \
2537 + .linear_min_sel = min_sel, \
2538 .ramp_delay = S2MPS14_BUCK_RAMP_DELAY, \
2539 .vsel_reg = S2MPS14_REG_B1CTRL2 + (num - 1) * 2, \
2540 .vsel_mask = S2MPS14_BUCK_VSEL_MASK, \
2541 @@ -522,11 +522,16 @@ static const struct regulator_desc s2mps14_regulators[] = {
2542 regulator_desc_s2mps14_ldo(23, MIN_800_MV, STEP_25_MV),
2543 regulator_desc_s2mps14_ldo(24, MIN_1800_MV, STEP_25_MV),
2544 regulator_desc_s2mps14_ldo(25, MIN_1800_MV, STEP_25_MV),
2545 - regulator_desc_s2mps14_buck(1, MIN_600_MV, STEP_6_25_MV),
2546 - regulator_desc_s2mps14_buck(2, MIN_600_MV, STEP_6_25_MV),
2547 - regulator_desc_s2mps14_buck(3, MIN_600_MV, STEP_6_25_MV),
2548 - regulator_desc_s2mps14_buck(4, MIN_1400_MV, STEP_12_5_MV),
2549 - regulator_desc_s2mps14_buck(5, MIN_600_MV, STEP_6_25_MV),
2550 + regulator_desc_s2mps14_buck(1, MIN_600_MV, STEP_6_25_MV,
2551 + S2MPS14_BUCK1235_START_SEL),
2552 + regulator_desc_s2mps14_buck(2, MIN_600_MV, STEP_6_25_MV,
2553 + S2MPS14_BUCK1235_START_SEL),
2554 + regulator_desc_s2mps14_buck(3, MIN_600_MV, STEP_6_25_MV,
2555 + S2MPS14_BUCK1235_START_SEL),
2556 + regulator_desc_s2mps14_buck(4, MIN_1400_MV, STEP_12_5_MV,
2557 + S2MPS14_BUCK4_START_SEL),
2558 + regulator_desc_s2mps14_buck(5, MIN_600_MV, STEP_6_25_MV,
2559 + S2MPS14_BUCK1235_START_SEL),
2560 };
2561
2562 static int s2mps14_pmic_enable_ext_control(struct s2mps11_info *s2mps11,
2563 diff --git a/drivers/rtc/rtc-isl12057.c b/drivers/rtc/rtc-isl12057.c
2564 index 455b601d731d..8c3f60737df8 100644
2565 --- a/drivers/rtc/rtc-isl12057.c
2566 +++ b/drivers/rtc/rtc-isl12057.c
2567 @@ -88,7 +88,7 @@ static void isl12057_rtc_regs_to_tm(struct rtc_time *tm, u8 *regs)
2568 tm->tm_min = bcd2bin(regs[ISL12057_REG_RTC_MN]);
2569
2570 if (regs[ISL12057_REG_RTC_HR] & ISL12057_REG_RTC_HR_MIL) { /* AM/PM */
2571 - tm->tm_hour = bcd2bin(regs[ISL12057_REG_RTC_HR] & 0x0f);
2572 + tm->tm_hour = bcd2bin(regs[ISL12057_REG_RTC_HR] & 0x1f);
2573 if (regs[ISL12057_REG_RTC_HR] & ISL12057_REG_RTC_HR_PM)
2574 tm->tm_hour += 12;
2575 } else { /* 24 hour mode */
2576 @@ -97,7 +97,7 @@ static void isl12057_rtc_regs_to_tm(struct rtc_time *tm, u8 *regs)
2577
2578 tm->tm_mday = bcd2bin(regs[ISL12057_REG_RTC_DT]);
2579 tm->tm_wday = bcd2bin(regs[ISL12057_REG_RTC_DW]) - 1; /* starts at 1 */
2580 - tm->tm_mon = bcd2bin(regs[ISL12057_REG_RTC_MO]) - 1; /* starts at 1 */
2581 + tm->tm_mon = bcd2bin(regs[ISL12057_REG_RTC_MO] & 0x1f) - 1; /* ditto */
2582 tm->tm_year = bcd2bin(regs[ISL12057_REG_RTC_YR]) + 100;
2583 }
2584
2585 diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
2586 index 21142e6574a9..828cb9983cc2 100644
2587 --- a/drivers/rtc/rtc-omap.c
2588 +++ b/drivers/rtc/rtc-omap.c
2589 @@ -416,6 +416,8 @@ static int __init omap_rtc_probe(struct platform_device *pdev)
2590 rtc_writel(KICK1_VALUE, OMAP_RTC_KICK1_REG);
2591 }
2592
2593 + device_init_wakeup(&pdev->dev, true);
2594 +
2595 rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
2596 &omap_rtc_ops, THIS_MODULE);
2597 if (IS_ERR(rtc)) {
2598 @@ -431,8 +433,10 @@ static int __init omap_rtc_probe(struct platform_device *pdev)
2599 rtc_write(0, OMAP_RTC_INTERRUPTS_REG);
2600
2601 /* enable RTC functional clock */
2602 - if (id_entry->driver_data & OMAP_RTC_HAS_32KCLK_EN)
2603 - rtc_writel(OMAP_RTC_OSC_32KCLK_EN, OMAP_RTC_OSC_REG);
2604 + if (id_entry->driver_data & OMAP_RTC_HAS_32KCLK_EN) {
2605 + reg = rtc_read(OMAP_RTC_OSC_REG);
2606 + rtc_writel(reg | OMAP_RTC_OSC_32KCLK_EN, OMAP_RTC_OSC_REG);
2607 + }
2608
2609 /* clear old status */
2610 reg = rtc_read(OMAP_RTC_STATUS_REG);
2611 @@ -482,8 +486,6 @@ static int __init omap_rtc_probe(struct platform_device *pdev)
2612 * is write-only, and always reads as zero...)
2613 */
2614
2615 - device_init_wakeup(&pdev->dev, true);
2616 -
2617 if (new_ctrl & (u8) OMAP_RTC_CTRL_SPLIT)
2618 pr_info("%s: split power mode\n", pdev->name);
2619
2620 @@ -493,6 +495,7 @@ static int __init omap_rtc_probe(struct platform_device *pdev)
2621 return 0;
2622
2623 fail0:
2624 + device_init_wakeup(&pdev->dev, false);
2625 if (id_entry->driver_data & OMAP_RTC_HAS_KICKER)
2626 rtc_writel(0, OMAP_RTC_KICK0_REG);
2627 pm_runtime_put_sync(&pdev->dev);
2628 diff --git a/drivers/rtc/rtc-sirfsoc.c b/drivers/rtc/rtc-sirfsoc.c
2629 index 76e38007ba90..24ba97d3286e 100644
2630 --- a/drivers/rtc/rtc-sirfsoc.c
2631 +++ b/drivers/rtc/rtc-sirfsoc.c
2632 @@ -286,14 +286,6 @@ static int sirfsoc_rtc_probe(struct platform_device *pdev)
2633 rtc_div = ((32768 / RTC_HZ) / 2) - 1;
2634 sirfsoc_rtc_iobrg_writel(rtc_div, rtcdrv->rtc_base + RTC_DIV);
2635
2636 - rtcdrv->rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
2637 - &sirfsoc_rtc_ops, THIS_MODULE);
2638 - if (IS_ERR(rtcdrv->rtc)) {
2639 - err = PTR_ERR(rtcdrv->rtc);
2640 - dev_err(&pdev->dev, "can't register RTC device\n");
2641 - return err;
2642 - }
2643 -
2644 /* 0x3 -> RTC_CLK */
2645 sirfsoc_rtc_iobrg_writel(SIRFSOC_RTC_CLK,
2646 rtcdrv->rtc_base + RTC_CLOCK_SWITCH);
2647 @@ -308,6 +300,14 @@ static int sirfsoc_rtc_probe(struct platform_device *pdev)
2648 rtcdrv->overflow_rtc =
2649 sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_SW_VALUE);
2650
2651 + rtcdrv->rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
2652 + &sirfsoc_rtc_ops, THIS_MODULE);
2653 + if (IS_ERR(rtcdrv->rtc)) {
2654 + err = PTR_ERR(rtcdrv->rtc);
2655 + dev_err(&pdev->dev, "can't register RTC device\n");
2656 + return err;
2657 + }
2658 +
2659 rtcdrv->irq = platform_get_irq(pdev, 0);
2660 err = devm_request_irq(
2661 &pdev->dev,
2662 diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c
2663 index 3f365402fcc0..14052936b1c5 100644
2664 --- a/drivers/spi/spi-sh-msiof.c
2665 +++ b/drivers/spi/spi-sh-msiof.c
2666 @@ -480,6 +480,8 @@ static int sh_msiof_spi_setup(struct spi_device *spi)
2667 struct device_node *np = spi->master->dev.of_node;
2668 struct sh_msiof_spi_priv *p = spi_master_get_devdata(spi->master);
2669
2670 + pm_runtime_get_sync(&p->pdev->dev);
2671 +
2672 if (!np) {
2673 /*
2674 * Use spi->controller_data for CS (same strategy as spi_gpio),
2675 @@ -498,6 +500,9 @@ static int sh_msiof_spi_setup(struct spi_device *spi)
2676 if (spi->cs_gpio >= 0)
2677 gpio_set_value(spi->cs_gpio, !(spi->mode & SPI_CS_HIGH));
2678
2679 +
2680 + pm_runtime_put_sync(&p->pdev->dev);
2681 +
2682 return 0;
2683 }
2684
2685 diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
2686 index 2e900a98c3e3..47ca0f3b8c85 100644
2687 --- a/drivers/tty/n_tty.c
2688 +++ b/drivers/tty/n_tty.c
2689 @@ -321,7 +321,8 @@ static void n_tty_check_unthrottle(struct tty_struct *tty)
2690
2691 static inline void put_tty_queue(unsigned char c, struct n_tty_data *ldata)
2692 {
2693 - *read_buf_addr(ldata, ldata->read_head++) = c;
2694 + *read_buf_addr(ldata, ldata->read_head) = c;
2695 + ldata->read_head++;
2696 }
2697
2698 /**
2699 diff --git a/drivers/tty/serial/men_z135_uart.c b/drivers/tty/serial/men_z135_uart.c
2700 index 30e9e60bc5cd..517cd073dc08 100644
2701 --- a/drivers/tty/serial/men_z135_uart.c
2702 +++ b/drivers/tty/serial/men_z135_uart.c
2703 @@ -809,6 +809,7 @@ static void men_z135_remove(struct mcb_device *mdev)
2704
2705 static const struct mcb_device_id men_z135_ids[] = {
2706 { .device = 0x87 },
2707 + { }
2708 };
2709 MODULE_DEVICE_TABLE(mcb, men_z135_ids);
2710
2711 diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
2712 index c78f43a481ce..587d63bcbd0e 100644
2713 --- a/drivers/tty/serial/samsung.c
2714 +++ b/drivers/tty/serial/samsung.c
2715 @@ -559,11 +559,15 @@ static void s3c24xx_serial_pm(struct uart_port *port, unsigned int level,
2716 unsigned int old)
2717 {
2718 struct s3c24xx_uart_port *ourport = to_ourport(port);
2719 + int timeout = 10000;
2720
2721 ourport->pm_level = level;
2722
2723 switch (level) {
2724 case 3:
2725 + while (--timeout && !s3c24xx_serial_txempty_nofifo(port))
2726 + udelay(100);
2727 +
2728 if (!IS_ERR(ourport->baudclk))
2729 clk_disable_unprepare(ourport->baudclk);
2730
2731 diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
2732 index 077d58ac3dcb..64d9c3daa856 100644
2733 --- a/drivers/usb/class/cdc-acm.c
2734 +++ b/drivers/usb/class/cdc-acm.c
2735 @@ -1197,10 +1197,11 @@ next_desc:
2736 } else {
2737 control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
2738 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0));
2739 - if (!control_interface || !data_interface) {
2740 - dev_dbg(&intf->dev, "no interfaces\n");
2741 - return -ENODEV;
2742 - }
2743 + }
2744 +
2745 + if (!control_interface || !data_interface) {
2746 + dev_dbg(&intf->dev, "no interfaces\n");
2747 + return -ENODEV;
2748 }
2749
2750 if (data_interface_num != call_interface_num)
2751 @@ -1475,6 +1476,7 @@ alloc_fail8:
2752 &dev_attr_wCountryCodes);
2753 device_remove_file(&acm->control->dev,
2754 &dev_attr_iCountryCodeRelDate);
2755 + kfree(acm->country_codes);
2756 }
2757 device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
2758 alloc_fail7:
2759 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
2760 index 96fafed92b76..0ffb4ed0a945 100644
2761 --- a/drivers/usb/core/quirks.c
2762 +++ b/drivers/usb/core/quirks.c
2763 @@ -103,6 +103,9 @@ static const struct usb_device_id usb_quirk_list[] = {
2764 { USB_DEVICE(0x04f3, 0x009b), .driver_info =
2765 USB_QUIRK_DEVICE_QUALIFIER },
2766
2767 + { USB_DEVICE(0x04f3, 0x010c), .driver_info =
2768 + USB_QUIRK_DEVICE_QUALIFIER },
2769 +
2770 { USB_DEVICE(0x04f3, 0x016f), .driver_info =
2771 USB_QUIRK_DEVICE_QUALIFIER },
2772
2773 diff --git a/drivers/usb/gadget/udc/at91_udc.c b/drivers/usb/gadget/udc/at91_udc.c
2774 index 9968f5331fe4..0716c1994e28 100644
2775 --- a/drivers/usb/gadget/udc/at91_udc.c
2776 +++ b/drivers/usb/gadget/udc/at91_udc.c
2777 @@ -870,12 +870,10 @@ static void clk_on(struct at91_udc *udc)
2778 return;
2779 udc->clocked = 1;
2780
2781 - if (IS_ENABLED(CONFIG_COMMON_CLK)) {
2782 - clk_set_rate(udc->uclk, 48000000);
2783 - clk_prepare_enable(udc->uclk);
2784 - }
2785 - clk_prepare_enable(udc->iclk);
2786 - clk_prepare_enable(udc->fclk);
2787 + if (IS_ENABLED(CONFIG_COMMON_CLK))
2788 + clk_enable(udc->uclk);
2789 + clk_enable(udc->iclk);
2790 + clk_enable(udc->fclk);
2791 }
2792
2793 static void clk_off(struct at91_udc *udc)
2794 @@ -884,10 +882,10 @@ static void clk_off(struct at91_udc *udc)
2795 return;
2796 udc->clocked = 0;
2797 udc->gadget.speed = USB_SPEED_UNKNOWN;
2798 - clk_disable_unprepare(udc->fclk);
2799 - clk_disable_unprepare(udc->iclk);
2800 + clk_disable(udc->fclk);
2801 + clk_disable(udc->iclk);
2802 if (IS_ENABLED(CONFIG_COMMON_CLK))
2803 - clk_disable_unprepare(udc->uclk);
2804 + clk_disable(udc->uclk);
2805 }
2806
2807 /*
2808 @@ -1780,14 +1778,24 @@ static int at91udc_probe(struct platform_device *pdev)
2809 }
2810
2811 /* don't do anything until we have both gadget driver and VBUS */
2812 + if (IS_ENABLED(CONFIG_COMMON_CLK)) {
2813 + clk_set_rate(udc->uclk, 48000000);
2814 + retval = clk_prepare(udc->uclk);
2815 + if (retval)
2816 + goto fail1;
2817 + }
2818 + retval = clk_prepare(udc->fclk);
2819 + if (retval)
2820 + goto fail1a;
2821 +
2822 retval = clk_prepare_enable(udc->iclk);
2823 if (retval)
2824 - goto fail1;
2825 + goto fail1b;
2826 at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
2827 at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff);
2828 /* Clear all pending interrupts - UDP may be used by bootloader. */
2829 at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff);
2830 - clk_disable_unprepare(udc->iclk);
2831 + clk_disable(udc->iclk);
2832
2833 /* request UDC and maybe VBUS irqs */
2834 udc->udp_irq = platform_get_irq(pdev, 0);
2835 @@ -1795,7 +1803,7 @@ static int at91udc_probe(struct platform_device *pdev)
2836 0, driver_name, udc);
2837 if (retval < 0) {
2838 DBG("request irq %d failed\n", udc->udp_irq);
2839 - goto fail1;
2840 + goto fail1c;
2841 }
2842 if (gpio_is_valid(udc->board.vbus_pin)) {
2843 retval = gpio_request(udc->board.vbus_pin, "udc_vbus");
2844 @@ -1848,6 +1856,13 @@ fail3:
2845 gpio_free(udc->board.vbus_pin);
2846 fail2:
2847 free_irq(udc->udp_irq, udc);
2848 +fail1c:
2849 + clk_unprepare(udc->iclk);
2850 +fail1b:
2851 + clk_unprepare(udc->fclk);
2852 +fail1a:
2853 + if (IS_ENABLED(CONFIG_COMMON_CLK))
2854 + clk_unprepare(udc->uclk);
2855 fail1:
2856 if (IS_ENABLED(CONFIG_COMMON_CLK) && !IS_ERR(udc->uclk))
2857 clk_put(udc->uclk);
2858 @@ -1896,6 +1911,11 @@ static int __exit at91udc_remove(struct platform_device *pdev)
2859 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2860 release_mem_region(res->start, resource_size(res));
2861
2862 + if (IS_ENABLED(CONFIG_COMMON_CLK))
2863 + clk_unprepare(udc->uclk);
2864 + clk_unprepare(udc->fclk);
2865 + clk_unprepare(udc->iclk);
2866 +
2867 clk_put(udc->iclk);
2868 clk_put(udc->fclk);
2869 if (IS_ENABLED(CONFIG_COMMON_CLK))
2870 diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c
2871 index 2d17c10a0428..294d43c387b2 100644
2872 --- a/drivers/usb/renesas_usbhs/mod_gadget.c
2873 +++ b/drivers/usb/renesas_usbhs/mod_gadget.c
2874 @@ -602,6 +602,9 @@ static int usbhsg_ep_disable(struct usb_ep *ep)
2875 struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
2876 struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
2877
2878 + if (!pipe)
2879 + return -EINVAL;
2880 +
2881 usbhsg_pipe_disable(uep);
2882 usbhs_pipe_free(pipe);
2883
2884 diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
2885 index b2aa003bf411..cb3e14780a7e 100644
2886 --- a/drivers/usb/serial/qcserial.c
2887 +++ b/drivers/usb/serial/qcserial.c
2888 @@ -27,12 +27,15 @@ enum qcserial_layouts {
2889 QCSERIAL_G2K = 0, /* Gobi 2000 */
2890 QCSERIAL_G1K = 1, /* Gobi 1000 */
2891 QCSERIAL_SWI = 2, /* Sierra Wireless */
2892 + QCSERIAL_HWI = 3, /* Huawei */
2893 };
2894
2895 #define DEVICE_G1K(v, p) \
2896 USB_DEVICE(v, p), .driver_info = QCSERIAL_G1K
2897 #define DEVICE_SWI(v, p) \
2898 USB_DEVICE(v, p), .driver_info = QCSERIAL_SWI
2899 +#define DEVICE_HWI(v, p) \
2900 + USB_DEVICE(v, p), .driver_info = QCSERIAL_HWI
2901
2902 static const struct usb_device_id id_table[] = {
2903 /* Gobi 1000 devices */
2904 @@ -157,6 +160,9 @@ static const struct usb_device_id id_table[] = {
2905 {DEVICE_SWI(0x413c, 0x81a8)}, /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card */
2906 {DEVICE_SWI(0x413c, 0x81a9)}, /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card */
2907
2908 + /* Huawei devices */
2909 + {DEVICE_HWI(0x03f0, 0x581d)}, /* HP lt4112 LTE/HSPA+ Gobi 4G Modem (Huawei me906e) */
2910 +
2911 { } /* Terminating entry */
2912 };
2913 MODULE_DEVICE_TABLE(usb, id_table);
2914 @@ -287,6 +293,33 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
2915 break;
2916 }
2917 break;
2918 + case QCSERIAL_HWI:
2919 + /*
2920 + * Huawei layout:
2921 + * 0: AT-capable modem port
2922 + * 1: DM/DIAG
2923 + * 2: AT-capable modem port
2924 + * 3: CCID-compatible PCSC interface
2925 + * 4: QMI/net
2926 + * 5: NMEA
2927 + */
2928 + switch (ifnum) {
2929 + case 0:
2930 + case 2:
2931 + dev_dbg(dev, "Modem port found\n");
2932 + break;
2933 + case 1:
2934 + dev_dbg(dev, "DM/DIAG interface found\n");
2935 + break;
2936 + case 5:
2937 + dev_dbg(dev, "NMEA GPS interface found\n");
2938 + break;
2939 + default:
2940 + /* don't claim any unsupported interface */
2941 + altsetting = -1;
2942 + break;
2943 + }
2944 + break;
2945 default:
2946 dev_err(dev, "unsupported device layout type: %lu\n",
2947 id->driver_info);
2948 diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
2949 index ebd8f218a788..9df5d6ec7eec 100644
2950 --- a/drivers/xen/swiotlb-xen.c
2951 +++ b/drivers/xen/swiotlb-xen.c
2952 @@ -96,8 +96,6 @@ static inline phys_addr_t xen_bus_to_phys(dma_addr_t baddr)
2953 dma_addr_t dma = (dma_addr_t)pfn << PAGE_SHIFT;
2954 phys_addr_t paddr = dma;
2955
2956 - BUG_ON(paddr != dma); /* truncation has occurred, should never happen */
2957 -
2958 paddr |= baddr & ~PAGE_MASK;
2959
2960 return paddr;
2961 @@ -447,11 +445,11 @@ static void xen_unmap_single(struct device *hwdev, dma_addr_t dev_addr,
2962
2963 BUG_ON(dir == DMA_NONE);
2964
2965 - xen_dma_unmap_page(hwdev, paddr, size, dir, attrs);
2966 + xen_dma_unmap_page(hwdev, dev_addr, size, dir, attrs);
2967
2968 /* NOTE: We use dev_addr here, not paddr! */
2969 if (is_xen_swiotlb_buffer(dev_addr)) {
2970 - swiotlb_tbl_unmap_single(hwdev, paddr, size, dir);
2971 + swiotlb_tbl_unmap_single(hwdev, dev_addr, size, dir);
2972 return;
2973 }
2974
2975 @@ -495,14 +493,14 @@ xen_swiotlb_sync_single(struct device *hwdev, dma_addr_t dev_addr,
2976 BUG_ON(dir == DMA_NONE);
2977
2978 if (target == SYNC_FOR_CPU)
2979 - xen_dma_sync_single_for_cpu(hwdev, paddr, size, dir);
2980 + xen_dma_sync_single_for_cpu(hwdev, dev_addr, size, dir);
2981
2982 /* NOTE: We use dev_addr here, not paddr! */
2983 if (is_xen_swiotlb_buffer(dev_addr))
2984 swiotlb_tbl_sync_single(hwdev, paddr, size, dir, target);
2985
2986 if (target == SYNC_FOR_DEVICE)
2987 - xen_dma_sync_single_for_cpu(hwdev, paddr, size, dir);
2988 + xen_dma_sync_single_for_device(hwdev, dev_addr, size, dir);
2989
2990 if (dir != DMA_FROM_DEVICE)
2991 return;
2992 diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c
2993 index 054577bddaf2..de4e70fb3cbb 100644
2994 --- a/fs/btrfs/delayed-inode.c
2995 +++ b/fs/btrfs/delayed-inode.c
2996 @@ -1857,6 +1857,14 @@ int btrfs_delayed_delete_inode_ref(struct inode *inode)
2997 {
2998 struct btrfs_delayed_node *delayed_node;
2999
3000 + /*
3001 + * we don't do delayed inode updates during log recovery because it
3002 + * leads to enospc problems. This means we also can't do
3003 + * delayed inode refs
3004 + */
3005 + if (BTRFS_I(inode)->root->fs_info->log_root_recovering)
3006 + return -EAGAIN;
3007 +
3008 delayed_node = btrfs_get_or_create_delayed_node(inode);
3009 if (IS_ERR(delayed_node))
3010 return PTR_ERR(delayed_node);
3011 diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
3012 index 18c06bbaf136..481529b879fe 100644
3013 --- a/fs/ceph/addr.c
3014 +++ b/fs/ceph/addr.c
3015 @@ -673,7 +673,7 @@ static int ceph_writepages_start(struct address_space *mapping,
3016 int rc = 0;
3017 unsigned wsize = 1 << inode->i_blkbits;
3018 struct ceph_osd_request *req = NULL;
3019 - int do_sync;
3020 + int do_sync = 0;
3021 u64 truncate_size, snap_size;
3022 u32 truncate_seq;
3023
3024 diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
3025 index ef9bef118342..2d609a5fbfea 100644
3026 --- a/fs/fs-writeback.c
3027 +++ b/fs/fs-writeback.c
3028 @@ -479,12 +479,28 @@ __writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
3029 * write_inode()
3030 */
3031 spin_lock(&inode->i_lock);
3032 - /* Clear I_DIRTY_PAGES if we've written out all dirty pages */
3033 - if (!mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
3034 - inode->i_state &= ~I_DIRTY_PAGES;
3035 +
3036 dirty = inode->i_state & I_DIRTY;
3037 - inode->i_state &= ~(I_DIRTY_SYNC | I_DIRTY_DATASYNC);
3038 + inode->i_state &= ~I_DIRTY;
3039 +
3040 + /*
3041 + * Paired with smp_mb() in __mark_inode_dirty(). This allows
3042 + * __mark_inode_dirty() to test i_state without grabbing i_lock -
3043 + * either they see the I_DIRTY bits cleared or we see the dirtied
3044 + * inode.
3045 + *
3046 + * I_DIRTY_PAGES is always cleared together above even if @mapping
3047 + * still has dirty pages. The flag is reinstated after smp_mb() if
3048 + * necessary. This guarantees that either __mark_inode_dirty()
3049 + * sees clear I_DIRTY_PAGES or we see PAGECACHE_TAG_DIRTY.
3050 + */
3051 + smp_mb();
3052 +
3053 + if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
3054 + inode->i_state |= I_DIRTY_PAGES;
3055 +
3056 spin_unlock(&inode->i_lock);
3057 +
3058 /* Don't write the inode if only I_DIRTY_PAGES was set */
3059 if (dirty & (I_DIRTY_SYNC | I_DIRTY_DATASYNC)) {
3060 int err = write_inode(inode, wbc);
3061 @@ -1148,12 +1164,11 @@ void __mark_inode_dirty(struct inode *inode, int flags)
3062 }
3063
3064 /*
3065 - * make sure that changes are seen by all cpus before we test i_state
3066 - * -- mikulas
3067 + * Paired with smp_mb() in __writeback_single_inode() for the
3068 + * following lockless i_state test. See there for details.
3069 */
3070 smp_mb();
3071
3072 - /* avoid the locking if we can */
3073 if ((inode->i_state & flags) == flags)
3074 return;
3075
3076 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
3077 index e9c3afe4b5d3..d66e3ad1de48 100644
3078 --- a/fs/nfsd/nfs4state.c
3079 +++ b/fs/nfsd/nfs4state.c
3080 @@ -1711,15 +1711,14 @@ static int copy_cred(struct svc_cred *target, struct svc_cred *source)
3081 return 0;
3082 }
3083
3084 -static long long
3085 +static int
3086 compare_blob(const struct xdr_netobj *o1, const struct xdr_netobj *o2)
3087 {
3088 - long long res;
3089 -
3090 - res = o1->len - o2->len;
3091 - if (res)
3092 - return res;
3093 - return (long long)memcmp(o1->data, o2->data, o1->len);
3094 + if (o1->len < o2->len)
3095 + return -1;
3096 + if (o1->len > o2->len)
3097 + return 1;
3098 + return memcmp(o1->data, o2->data, o1->len);
3099 }
3100
3101 static int same_name(const char *n1, const char *n2)
3102 @@ -1907,7 +1906,7 @@ add_clp_to_name_tree(struct nfs4_client *new_clp, struct rb_root *root)
3103 static struct nfs4_client *
3104 find_clp_in_name_tree(struct xdr_netobj *name, struct rb_root *root)
3105 {
3106 - long long cmp;
3107 + int cmp;
3108 struct rb_node *node = root->rb_node;
3109 struct nfs4_client *clp;
3110
3111 @@ -3891,11 +3890,11 @@ nfs4_set_delegation(struct nfs4_client *clp, struct svc_fh *fh,
3112 status = nfs4_setlease(dp);
3113 goto out;
3114 }
3115 - atomic_inc(&fp->fi_delegees);
3116 if (fp->fi_had_conflict) {
3117 status = -EAGAIN;
3118 goto out_unlock;
3119 }
3120 + atomic_inc(&fp->fi_delegees);
3121 hash_delegation_locked(dp, fp);
3122 status = 0;
3123 out_unlock:
3124 diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
3125 index eeea7a90eb87..2a77603d7cfd 100644
3126 --- a/fs/nfsd/nfs4xdr.c
3127 +++ b/fs/nfsd/nfs4xdr.c
3128 @@ -1795,9 +1795,12 @@ static __be32 nfsd4_encode_components_esc(struct xdr_stream *xdr, char sep,
3129 }
3130 else
3131 end++;
3132 + if (found_esc)
3133 + end = next;
3134 +
3135 str = end;
3136 }
3137 - pathlen = htonl(xdr->buf->len - pathlen_offset);
3138 + pathlen = htonl(count);
3139 write_bytes_to_xdr_buf(xdr->buf, pathlen_offset, &pathlen, 4);
3140 return 0;
3141 }
3142 diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
3143 index e1fa69b341b9..8b5969538f39 100644
3144 --- a/fs/nilfs2/inode.c
3145 +++ b/fs/nilfs2/inode.c
3146 @@ -49,6 +49,8 @@ struct nilfs_iget_args {
3147 int for_gc;
3148 };
3149
3150 +static int nilfs_iget_test(struct inode *inode, void *opaque);
3151 +
3152 void nilfs_inode_add_blocks(struct inode *inode, int n)
3153 {
3154 struct nilfs_root *root = NILFS_I(inode)->i_root;
3155 @@ -348,6 +350,17 @@ const struct address_space_operations nilfs_aops = {
3156 .is_partially_uptodate = block_is_partially_uptodate,
3157 };
3158
3159 +static int nilfs_insert_inode_locked(struct inode *inode,
3160 + struct nilfs_root *root,
3161 + unsigned long ino)
3162 +{
3163 + struct nilfs_iget_args args = {
3164 + .ino = ino, .root = root, .cno = 0, .for_gc = 0
3165 + };
3166 +
3167 + return insert_inode_locked4(inode, ino, nilfs_iget_test, &args);
3168 +}
3169 +
3170 struct inode *nilfs_new_inode(struct inode *dir, umode_t mode)
3171 {
3172 struct super_block *sb = dir->i_sb;
3173 @@ -383,7 +396,7 @@ struct inode *nilfs_new_inode(struct inode *dir, umode_t mode)
3174 if (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)) {
3175 err = nilfs_bmap_read(ii->i_bmap, NULL);
3176 if (err < 0)
3177 - goto failed_bmap;
3178 + goto failed_after_creation;
3179
3180 set_bit(NILFS_I_BMAP, &ii->i_state);
3181 /* No lock is needed; iget() ensures it. */
3182 @@ -399,21 +412,24 @@ struct inode *nilfs_new_inode(struct inode *dir, umode_t mode)
3183 spin_lock(&nilfs->ns_next_gen_lock);
3184 inode->i_generation = nilfs->ns_next_generation++;
3185 spin_unlock(&nilfs->ns_next_gen_lock);
3186 - insert_inode_hash(inode);
3187 + if (nilfs_insert_inode_locked(inode, root, ino) < 0) {
3188 + err = -EIO;
3189 + goto failed_after_creation;
3190 + }
3191
3192 err = nilfs_init_acl(inode, dir);
3193 if (unlikely(err))
3194 - goto failed_acl; /* never occur. When supporting
3195 + goto failed_after_creation; /* never occur. When supporting
3196 nilfs_init_acl(), proper cancellation of
3197 above jobs should be considered */
3198
3199 return inode;
3200
3201 - failed_acl:
3202 - failed_bmap:
3203 + failed_after_creation:
3204 clear_nlink(inode);
3205 + unlock_new_inode(inode);
3206 iput(inode); /* raw_inode will be deleted through
3207 - generic_delete_inode() */
3208 + nilfs_evict_inode() */
3209 goto failed;
3210
3211 failed_ifile_create_inode:
3212 @@ -461,8 +477,8 @@ int nilfs_read_inode_common(struct inode *inode,
3213 inode->i_atime.tv_nsec = le32_to_cpu(raw_inode->i_mtime_nsec);
3214 inode->i_ctime.tv_nsec = le32_to_cpu(raw_inode->i_ctime_nsec);
3215 inode->i_mtime.tv_nsec = le32_to_cpu(raw_inode->i_mtime_nsec);
3216 - if (inode->i_nlink == 0 && inode->i_mode == 0)
3217 - return -EINVAL; /* this inode is deleted */
3218 + if (inode->i_nlink == 0)
3219 + return -ESTALE; /* this inode is deleted */
3220
3221 inode->i_blocks = le64_to_cpu(raw_inode->i_blocks);
3222 ii->i_flags = le32_to_cpu(raw_inode->i_flags);
3223 diff --git a/fs/nilfs2/namei.c b/fs/nilfs2/namei.c
3224 index 9de78f08989e..0f84b257932c 100644
3225 --- a/fs/nilfs2/namei.c
3226 +++ b/fs/nilfs2/namei.c
3227 @@ -51,9 +51,11 @@ static inline int nilfs_add_nondir(struct dentry *dentry, struct inode *inode)
3228 int err = nilfs_add_link(dentry, inode);
3229 if (!err) {
3230 d_instantiate(dentry, inode);
3231 + unlock_new_inode(inode);
3232 return 0;
3233 }
3234 inode_dec_link_count(inode);
3235 + unlock_new_inode(inode);
3236 iput(inode);
3237 return err;
3238 }
3239 @@ -182,6 +184,7 @@ out:
3240 out_fail:
3241 drop_nlink(inode);
3242 nilfs_mark_inode_dirty(inode);
3243 + unlock_new_inode(inode);
3244 iput(inode);
3245 goto out;
3246 }
3247 @@ -201,11 +204,15 @@ static int nilfs_link(struct dentry *old_dentry, struct inode *dir,
3248 inode_inc_link_count(inode);
3249 ihold(inode);
3250
3251 - err = nilfs_add_nondir(dentry, inode);
3252 - if (!err)
3253 + err = nilfs_add_link(dentry, inode);
3254 + if (!err) {
3255 + d_instantiate(dentry, inode);
3256 err = nilfs_transaction_commit(dir->i_sb);
3257 - else
3258 + } else {
3259 + inode_dec_link_count(inode);
3260 + iput(inode);
3261 nilfs_transaction_abort(dir->i_sb);
3262 + }
3263
3264 return err;
3265 }
3266 @@ -243,6 +250,7 @@ static int nilfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
3267
3268 nilfs_mark_inode_dirty(inode);
3269 d_instantiate(dentry, inode);
3270 + unlock_new_inode(inode);
3271 out:
3272 if (!err)
3273 err = nilfs_transaction_commit(dir->i_sb);
3274 @@ -255,6 +263,7 @@ out_fail:
3275 drop_nlink(inode);
3276 drop_nlink(inode);
3277 nilfs_mark_inode_dirty(inode);
3278 + unlock_new_inode(inode);
3279 iput(inode);
3280 out_dir:
3281 drop_nlink(dir);
3282 diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
3283 index 1ef547e49373..c71174a0b1b5 100644
3284 --- a/fs/ocfs2/aops.c
3285 +++ b/fs/ocfs2/aops.c
3286 @@ -894,7 +894,7 @@ void ocfs2_unlock_and_free_pages(struct page **pages, int num_pages)
3287 }
3288 }
3289
3290 -static void ocfs2_free_write_ctxt(struct ocfs2_write_ctxt *wc)
3291 +static void ocfs2_unlock_pages(struct ocfs2_write_ctxt *wc)
3292 {
3293 int i;
3294
3295 @@ -915,7 +915,11 @@ static void ocfs2_free_write_ctxt(struct ocfs2_write_ctxt *wc)
3296 page_cache_release(wc->w_target_page);
3297 }
3298 ocfs2_unlock_and_free_pages(wc->w_pages, wc->w_num_pages);
3299 +}
3300
3301 +static void ocfs2_free_write_ctxt(struct ocfs2_write_ctxt *wc)
3302 +{
3303 + ocfs2_unlock_pages(wc);
3304 brelse(wc->w_di_bh);
3305 kfree(wc);
3306 }
3307 @@ -2042,11 +2046,19 @@ out_write_size:
3308 ocfs2_update_inode_fsync_trans(handle, inode, 1);
3309 ocfs2_journal_dirty(handle, wc->w_di_bh);
3310
3311 + /* unlock pages before dealloc since it needs acquiring j_trans_barrier
3312 + * lock, or it will cause a deadlock since journal commit threads holds
3313 + * this lock and will ask for the page lock when flushing the data.
3314 + * put it here to preserve the unlock order.
3315 + */
3316 + ocfs2_unlock_pages(wc);
3317 +
3318 ocfs2_commit_trans(osb, handle);
3319
3320 ocfs2_run_deallocs(osb, &wc->w_dealloc);
3321
3322 - ocfs2_free_write_ctxt(wc);
3323 + brelse(wc->w_di_bh);
3324 + kfree(wc);
3325
3326 return copied;
3327 }
3328 diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
3329 index b931e04e3388..914c121ec890 100644
3330 --- a/fs/ocfs2/namei.c
3331 +++ b/fs/ocfs2/namei.c
3332 @@ -94,6 +94,14 @@ static int ocfs2_create_symlink_data(struct ocfs2_super *osb,
3333 struct inode *inode,
3334 const char *symname);
3335
3336 +static int ocfs2_double_lock(struct ocfs2_super *osb,
3337 + struct buffer_head **bh1,
3338 + struct inode *inode1,
3339 + struct buffer_head **bh2,
3340 + struct inode *inode2,
3341 + int rename);
3342 +
3343 +static void ocfs2_double_unlock(struct inode *inode1, struct inode *inode2);
3344 /* An orphan dir name is an 8 byte value, printed as a hex string */
3345 #define OCFS2_ORPHAN_NAMELEN ((int)(2 * sizeof(u64)))
3346
3347 @@ -678,8 +686,10 @@ static int ocfs2_link(struct dentry *old_dentry,
3348 {
3349 handle_t *handle;
3350 struct inode *inode = old_dentry->d_inode;
3351 + struct inode *old_dir = old_dentry->d_parent->d_inode;
3352 int err;
3353 struct buffer_head *fe_bh = NULL;
3354 + struct buffer_head *old_dir_bh = NULL;
3355 struct buffer_head *parent_fe_bh = NULL;
3356 struct ocfs2_dinode *fe = NULL;
3357 struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
3358 @@ -696,19 +706,33 @@ static int ocfs2_link(struct dentry *old_dentry,
3359
3360 dquot_initialize(dir);
3361
3362 - err = ocfs2_inode_lock_nested(dir, &parent_fe_bh, 1, OI_LS_PARENT);
3363 + err = ocfs2_double_lock(osb, &old_dir_bh, old_dir,
3364 + &parent_fe_bh, dir, 0);
3365 if (err < 0) {
3366 if (err != -ENOENT)
3367 mlog_errno(err);
3368 return err;
3369 }
3370
3371 + /* make sure both dirs have bhs
3372 + * get an extra ref on old_dir_bh if old==new */
3373 + if (!parent_fe_bh) {
3374 + if (old_dir_bh) {
3375 + parent_fe_bh = old_dir_bh;
3376 + get_bh(parent_fe_bh);
3377 + } else {
3378 + mlog(ML_ERROR, "%s: no old_dir_bh!\n", osb->uuid_str);
3379 + err = -EIO;
3380 + goto out;
3381 + }
3382 + }
3383 +
3384 if (!dir->i_nlink) {
3385 err = -ENOENT;
3386 goto out;
3387 }
3388
3389 - err = ocfs2_lookup_ino_from_name(dir, old_dentry->d_name.name,
3390 + err = ocfs2_lookup_ino_from_name(old_dir, old_dentry->d_name.name,
3391 old_dentry->d_name.len, &old_de_ino);
3392 if (err) {
3393 err = -ENOENT;
3394 @@ -801,10 +825,11 @@ out_unlock_inode:
3395 ocfs2_inode_unlock(inode, 1);
3396
3397 out:
3398 - ocfs2_inode_unlock(dir, 1);
3399 + ocfs2_double_unlock(old_dir, dir);
3400
3401 brelse(fe_bh);
3402 brelse(parent_fe_bh);
3403 + brelse(old_dir_bh);
3404
3405 ocfs2_free_dir_lookup_result(&lookup);
3406
3407 @@ -1072,14 +1097,15 @@ static int ocfs2_check_if_ancestor(struct ocfs2_super *osb,
3408 }
3409
3410 /*
3411 - * The only place this should be used is rename!
3412 + * The only place this should be used is rename and link!
3413 * if they have the same id, then the 1st one is the only one locked.
3414 */
3415 static int ocfs2_double_lock(struct ocfs2_super *osb,
3416 struct buffer_head **bh1,
3417 struct inode *inode1,
3418 struct buffer_head **bh2,
3419 - struct inode *inode2)
3420 + struct inode *inode2,
3421 + int rename)
3422 {
3423 int status;
3424 int inode1_is_ancestor, inode2_is_ancestor;
3425 @@ -1127,7 +1153,7 @@ static int ocfs2_double_lock(struct ocfs2_super *osb,
3426 }
3427 /* lock id2 */
3428 status = ocfs2_inode_lock_nested(inode2, bh2, 1,
3429 - OI_LS_RENAME1);
3430 + rename == 1 ? OI_LS_RENAME1 : OI_LS_PARENT);
3431 if (status < 0) {
3432 if (status != -ENOENT)
3433 mlog_errno(status);
3434 @@ -1136,7 +1162,8 @@ static int ocfs2_double_lock(struct ocfs2_super *osb,
3435 }
3436
3437 /* lock id1 */
3438 - status = ocfs2_inode_lock_nested(inode1, bh1, 1, OI_LS_RENAME2);
3439 + status = ocfs2_inode_lock_nested(inode1, bh1, 1,
3440 + rename == 1 ? OI_LS_RENAME2 : OI_LS_PARENT);
3441 if (status < 0) {
3442 /*
3443 * An error return must mean that no cluster locks
3444 @@ -1252,7 +1279,7 @@ static int ocfs2_rename(struct inode *old_dir,
3445
3446 /* if old and new are the same, this'll just do one lock. */
3447 status = ocfs2_double_lock(osb, &old_dir_bh, old_dir,
3448 - &new_dir_bh, new_dir);
3449 + &new_dir_bh, new_dir, 1);
3450 if (status < 0) {
3451 mlog_errno(status);
3452 goto bail;
3453 diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
3454 index 3b5744306ed8..5fa34243b1ae 100644
3455 --- a/fs/pstore/ram.c
3456 +++ b/fs/pstore/ram.c
3457 @@ -61,6 +61,11 @@ module_param(mem_size, ulong, 0400);
3458 MODULE_PARM_DESC(mem_size,
3459 "size of reserved RAM used to store oops/panic logs");
3460
3461 +static unsigned int mem_type;
3462 +module_param(mem_type, uint, 0600);
3463 +MODULE_PARM_DESC(mem_type,
3464 + "set to 1 to try to use unbuffered memory (default 0)");
3465 +
3466 static int dump_oops = 1;
3467 module_param(dump_oops, int, 0600);
3468 MODULE_PARM_DESC(dump_oops,
3469 @@ -79,6 +84,7 @@ struct ramoops_context {
3470 struct persistent_ram_zone *fprz;
3471 phys_addr_t phys_addr;
3472 unsigned long size;
3473 + unsigned int memtype;
3474 size_t record_size;
3475 size_t console_size;
3476 size_t ftrace_size;
3477 @@ -358,7 +364,8 @@ static int ramoops_init_przs(struct device *dev, struct ramoops_context *cxt,
3478 size_t sz = cxt->record_size;
3479
3480 cxt->przs[i] = persistent_ram_new(*paddr, sz, 0,
3481 - &cxt->ecc_info);
3482 + &cxt->ecc_info,
3483 + cxt->memtype);
3484 if (IS_ERR(cxt->przs[i])) {
3485 err = PTR_ERR(cxt->przs[i]);
3486 dev_err(dev, "failed to request mem region (0x%zx@0x%llx): %d\n",
3487 @@ -388,7 +395,7 @@ static int ramoops_init_prz(struct device *dev, struct ramoops_context *cxt,
3488 return -ENOMEM;
3489 }
3490
3491 - *prz = persistent_ram_new(*paddr, sz, sig, &cxt->ecc_info);
3492 + *prz = persistent_ram_new(*paddr, sz, sig, &cxt->ecc_info, cxt->memtype);
3493 if (IS_ERR(*prz)) {
3494 int err = PTR_ERR(*prz);
3495
3496 @@ -435,6 +442,7 @@ static int ramoops_probe(struct platform_device *pdev)
3497
3498 cxt->size = pdata->mem_size;
3499 cxt->phys_addr = pdata->mem_address;
3500 + cxt->memtype = pdata->mem_type;
3501 cxt->record_size = pdata->record_size;
3502 cxt->console_size = pdata->console_size;
3503 cxt->ftrace_size = pdata->ftrace_size;
3504 @@ -564,6 +572,7 @@ static void ramoops_register_dummy(void)
3505
3506 dummy_data->mem_size = mem_size;
3507 dummy_data->mem_address = mem_address;
3508 + dummy_data->mem_type = 0;
3509 dummy_data->record_size = record_size;
3510 dummy_data->console_size = ramoops_console_size;
3511 dummy_data->ftrace_size = ramoops_ftrace_size;
3512 diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
3513 index 9d7b9a83699e..76c3f80efdfa 100644
3514 --- a/fs/pstore/ram_core.c
3515 +++ b/fs/pstore/ram_core.c
3516 @@ -380,7 +380,8 @@ void persistent_ram_zap(struct persistent_ram_zone *prz)
3517 persistent_ram_update_header_ecc(prz);
3518 }
3519
3520 -static void *persistent_ram_vmap(phys_addr_t start, size_t size)
3521 +static void *persistent_ram_vmap(phys_addr_t start, size_t size,
3522 + unsigned int memtype)
3523 {
3524 struct page **pages;
3525 phys_addr_t page_start;
3526 @@ -392,7 +393,10 @@ static void *persistent_ram_vmap(phys_addr_t start, size_t size)
3527 page_start = start - offset_in_page(start);
3528 page_count = DIV_ROUND_UP(size + offset_in_page(start), PAGE_SIZE);
3529
3530 - prot = pgprot_noncached(PAGE_KERNEL);
3531 + if (memtype)
3532 + prot = pgprot_noncached(PAGE_KERNEL);
3533 + else
3534 + prot = pgprot_writecombine(PAGE_KERNEL);
3535
3536 pages = kmalloc_array(page_count, sizeof(struct page *), GFP_KERNEL);
3537 if (!pages) {
3538 @@ -411,8 +415,11 @@ static void *persistent_ram_vmap(phys_addr_t start, size_t size)
3539 return vaddr;
3540 }
3541
3542 -static void *persistent_ram_iomap(phys_addr_t start, size_t size)
3543 +static void *persistent_ram_iomap(phys_addr_t start, size_t size,
3544 + unsigned int memtype)
3545 {
3546 + void *va;
3547 +
3548 if (!request_mem_region(start, size, "persistent_ram")) {
3549 pr_err("request mem region (0x%llx@0x%llx) failed\n",
3550 (unsigned long long)size, (unsigned long long)start);
3551 @@ -422,19 +429,24 @@ static void *persistent_ram_iomap(phys_addr_t start, size_t size)
3552 buffer_start_add = buffer_start_add_locked;
3553 buffer_size_add = buffer_size_add_locked;
3554
3555 - return ioremap(start, size);
3556 + if (memtype)
3557 + va = ioremap(start, size);
3558 + else
3559 + va = ioremap_wc(start, size);
3560 +
3561 + return va;
3562 }
3563
3564 static int persistent_ram_buffer_map(phys_addr_t start, phys_addr_t size,
3565 - struct persistent_ram_zone *prz)
3566 + struct persistent_ram_zone *prz, int memtype)
3567 {
3568 prz->paddr = start;
3569 prz->size = size;
3570
3571 if (pfn_valid(start >> PAGE_SHIFT))
3572 - prz->vaddr = persistent_ram_vmap(start, size);
3573 + prz->vaddr = persistent_ram_vmap(start, size, memtype);
3574 else
3575 - prz->vaddr = persistent_ram_iomap(start, size);
3576 + prz->vaddr = persistent_ram_iomap(start, size, memtype);
3577
3578 if (!prz->vaddr) {
3579 pr_err("%s: Failed to map 0x%llx pages at 0x%llx\n", __func__,
3580 @@ -500,7 +512,8 @@ void persistent_ram_free(struct persistent_ram_zone *prz)
3581 }
3582
3583 struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size,
3584 - u32 sig, struct persistent_ram_ecc_info *ecc_info)
3585 + u32 sig, struct persistent_ram_ecc_info *ecc_info,
3586 + unsigned int memtype)
3587 {
3588 struct persistent_ram_zone *prz;
3589 int ret = -ENOMEM;
3590 @@ -511,7 +524,7 @@ struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size,
3591 goto err;
3592 }
3593
3594 - ret = persistent_ram_buffer_map(start, size, prz);
3595 + ret = persistent_ram_buffer_map(start, size, prz, memtype);
3596 if (ret)
3597 goto err;
3598
3599 diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
3600 index f1376c92cf74..b27ef3541490 100644
3601 --- a/fs/reiserfs/super.c
3602 +++ b/fs/reiserfs/super.c
3603 @@ -2161,6 +2161,9 @@ error_unlocked:
3604 reiserfs_write_unlock(s);
3605 }
3606
3607 + if (sbi->commit_wq)
3608 + destroy_workqueue(sbi->commit_wq);
3609 +
3610 cancel_delayed_work_sync(&REISERFS_SB(s)->old_work);
3611
3612 reiserfs_free_bitmap_cache(s);
3613 diff --git a/include/linux/mm.h b/include/linux/mm.h
3614 index b46461116cd2..5ab2da9811c1 100644
3615 --- a/include/linux/mm.h
3616 +++ b/include/linux/mm.h
3617 @@ -1936,7 +1936,7 @@ extern int expand_downwards(struct vm_area_struct *vma,
3618 #if VM_GROWSUP
3619 extern int expand_upwards(struct vm_area_struct *vma, unsigned long address);
3620 #else
3621 - #define expand_upwards(vma, address) do { } while (0)
3622 + #define expand_upwards(vma, address) (0)
3623 #endif
3624
3625 /* Look up the first VMA which satisfies addr < vm_end, NULL if none. */
3626 diff --git a/include/linux/pstore_ram.h b/include/linux/pstore_ram.h
3627 index 9974975d40db..4af3fdc85b01 100644
3628 --- a/include/linux/pstore_ram.h
3629 +++ b/include/linux/pstore_ram.h
3630 @@ -53,7 +53,8 @@ struct persistent_ram_zone {
3631 };
3632
3633 struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size,
3634 - u32 sig, struct persistent_ram_ecc_info *ecc_info);
3635 + u32 sig, struct persistent_ram_ecc_info *ecc_info,
3636 + unsigned int memtype);
3637 void persistent_ram_free(struct persistent_ram_zone *prz);
3638 void persistent_ram_zap(struct persistent_ram_zone *prz);
3639
3640 @@ -76,6 +77,7 @@ ssize_t persistent_ram_ecc_string(struct persistent_ram_zone *prz,
3641 struct ramoops_platform_data {
3642 unsigned long mem_size;
3643 unsigned long mem_address;
3644 + unsigned int mem_type;
3645 unsigned long record_size;
3646 unsigned long console_size;
3647 unsigned long ftrace_size;
3648 diff --git a/include/linux/writeback.h b/include/linux/writeback.h
3649 index a219be961c0a..00048339c23e 100644
3650 --- a/include/linux/writeback.h
3651 +++ b/include/linux/writeback.h
3652 @@ -177,7 +177,6 @@ int write_cache_pages(struct address_space *mapping,
3653 struct writeback_control *wbc, writepage_t writepage,
3654 void *data);
3655 int do_writepages(struct address_space *mapping, struct writeback_control *wbc);
3656 -void set_page_dirty_balance(struct page *page);
3657 void writeback_set_ratelimit(void);
3658 void tag_pages_for_writeback(struct address_space *mapping,
3659 pgoff_t start, pgoff_t end);
3660 diff --git a/include/net/mac80211.h b/include/net/mac80211.h
3661 index 0ad1f47d2dc7..a9de1da73c01 100644
3662 --- a/include/net/mac80211.h
3663 +++ b/include/net/mac80211.h
3664 @@ -1227,8 +1227,7 @@ struct ieee80211_vif *wdev_to_ieee80211_vif(struct wireless_dev *wdev);
3665 *
3666 * @IEEE80211_KEY_FLAG_GENERATE_IV: This flag should be set by the
3667 * driver to indicate that it requires IV generation for this
3668 - * particular key. Setting this flag does not necessarily mean that SKBs
3669 - * will have sufficient tailroom for ICV or MIC.
3670 + * particular key.
3671 * @IEEE80211_KEY_FLAG_GENERATE_MMIC: This flag should be set by
3672 * the driver for a TKIP key if it requires Michael MIC
3673 * generation in software.
3674 @@ -1240,9 +1239,7 @@ struct ieee80211_vif *wdev_to_ieee80211_vif(struct wireless_dev *wdev);
3675 * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver
3676 * if space should be prepared for the IV, but the IV
3677 * itself should not be generated. Do not set together with
3678 - * @IEEE80211_KEY_FLAG_GENERATE_IV on the same key. Setting this flag does
3679 - * not necessarily mean that SKBs will have sufficient tailroom for ICV or
3680 - * MIC.
3681 + * @IEEE80211_KEY_FLAG_GENERATE_IV on the same key.
3682 * @IEEE80211_KEY_FLAG_RX_MGMT: This key will be used to decrypt received
3683 * management frames. The flag can help drivers that have a hardware
3684 * crypto implementation that doesn't deal with management frames
3685 diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
3686 index 0a68d5ae584e..a7d67bc14906 100644
3687 --- a/include/trace/events/sched.h
3688 +++ b/include/trace/events/sched.h
3689 @@ -100,7 +100,7 @@ static inline long __trace_sched_switch_state(struct task_struct *p)
3690 /*
3691 * For all intents and purposes a preempted task is a running task.
3692 */
3693 - if (task_preempt_count(p) & PREEMPT_ACTIVE)
3694 + if (preempt_count() & PREEMPT_ACTIVE)
3695 state = TASK_RUNNING | TASK_STATE_MAX;
3696 #endif
3697
3698 diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h
3699 index d4dbef14d4df..584bb0113e25 100644
3700 --- a/include/uapi/linux/audit.h
3701 +++ b/include/uapi/linux/audit.h
3702 @@ -365,7 +365,9 @@ enum {
3703 #define AUDIT_ARCH_PARISC (EM_PARISC)
3704 #define AUDIT_ARCH_PARISC64 (EM_PARISC|__AUDIT_ARCH_64BIT)
3705 #define AUDIT_ARCH_PPC (EM_PPC)
3706 +/* do not define AUDIT_ARCH_PPCLE since it is not supported by audit */
3707 #define AUDIT_ARCH_PPC64 (EM_PPC64|__AUDIT_ARCH_64BIT)
3708 +#define AUDIT_ARCH_PPC64LE (EM_PPC64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
3709 #define AUDIT_ARCH_S390 (EM_S390)
3710 #define AUDIT_ARCH_S390X (EM_S390|__AUDIT_ARCH_64BIT)
3711 #define AUDIT_ARCH_SH (EM_SH)
3712 diff --git a/include/uapi/linux/hyperv.h b/include/uapi/linux/hyperv.h
3713 index 0a8e6badb29b..bb1cb73c927a 100644
3714 --- a/include/uapi/linux/hyperv.h
3715 +++ b/include/uapi/linux/hyperv.h
3716 @@ -134,6 +134,7 @@ struct hv_start_fcopy {
3717
3718 struct hv_do_fcopy {
3719 struct hv_fcopy_hdr hdr;
3720 + __u32 pad;
3721 __u64 offset;
3722 __u32 size;
3723 __u8 data[DATA_FRAGMENT];
3724 diff --git a/kernel/events/core.c b/kernel/events/core.c
3725 index 1cd5eef1fcdd..2ab023803945 100644
3726 --- a/kernel/events/core.c
3727 +++ b/kernel/events/core.c
3728 @@ -7435,11 +7435,11 @@ SYSCALL_DEFINE5(perf_event_open,
3729
3730 if (move_group) {
3731 synchronize_rcu();
3732 - perf_install_in_context(ctx, group_leader, event->cpu);
3733 + perf_install_in_context(ctx, group_leader, group_leader->cpu);
3734 get_ctx(ctx);
3735 list_for_each_entry(sibling, &group_leader->sibling_list,
3736 group_entry) {
3737 - perf_install_in_context(ctx, sibling, event->cpu);
3738 + perf_install_in_context(ctx, sibling, sibling->cpu);
3739 get_ctx(ctx);
3740 }
3741 }
3742 diff --git a/kernel/exit.c b/kernel/exit.c
3743 index 5d30019ff953..2116aace6c85 100644
3744 --- a/kernel/exit.c
3745 +++ b/kernel/exit.c
3746 @@ -1302,9 +1302,15 @@ static int wait_task_continued(struct wait_opts *wo, struct task_struct *p)
3747 static int wait_consider_task(struct wait_opts *wo, int ptrace,
3748 struct task_struct *p)
3749 {
3750 + /*
3751 + * We can race with wait_task_zombie() from another thread.
3752 + * Ensure that EXIT_ZOMBIE -> EXIT_DEAD/EXIT_TRACE transition
3753 + * can't confuse the checks below.
3754 + */
3755 + int exit_state = ACCESS_ONCE(p->exit_state);
3756 int ret;
3757
3758 - if (unlikely(p->exit_state == EXIT_DEAD))
3759 + if (unlikely(exit_state == EXIT_DEAD))
3760 return 0;
3761
3762 ret = eligible_child(wo, p);
3763 @@ -1325,7 +1331,7 @@ static int wait_consider_task(struct wait_opts *wo, int ptrace,
3764 return 0;
3765 }
3766
3767 - if (unlikely(p->exit_state == EXIT_TRACE)) {
3768 + if (unlikely(exit_state == EXIT_TRACE)) {
3769 /*
3770 * ptrace == 0 means we are the natural parent. In this case
3771 * we should clear notask_error, debugger will notify us.
3772 @@ -1352,7 +1358,7 @@ static int wait_consider_task(struct wait_opts *wo, int ptrace,
3773 }
3774
3775 /* slay zombie? */
3776 - if (p->exit_state == EXIT_ZOMBIE) {
3777 + if (exit_state == EXIT_ZOMBIE) {
3778 /* we don't reap group leaders with subthreads */
3779 if (!delay_group_leader(p)) {
3780 /*
3781 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
3782 index 89e7283015a6..efdca2f08222 100644
3783 --- a/kernel/sched/core.c
3784 +++ b/kernel/sched/core.c
3785 @@ -1623,8 +1623,10 @@ void wake_up_if_idle(int cpu)
3786 struct rq *rq = cpu_rq(cpu);
3787 unsigned long flags;
3788
3789 - if (!is_idle_task(rq->curr))
3790 - return;
3791 + rcu_read_lock();
3792 +
3793 + if (!is_idle_task(rcu_dereference(rq->curr)))
3794 + goto out;
3795
3796 if (set_nr_if_polling(rq->idle)) {
3797 trace_sched_wake_idle_without_ipi(cpu);
3798 @@ -1635,6 +1637,9 @@ void wake_up_if_idle(int cpu)
3799 /* Else cpu is not in idle, do nothing here */
3800 raw_spin_unlock_irqrestore(&rq->lock, flags);
3801 }
3802 +
3803 +out:
3804 + rcu_read_unlock();
3805 }
3806
3807 bool cpus_share_cache(int this_cpu, int that_cpu)
3808 diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
3809 index 28fa9d9e9201..40a97c3d8aba 100644
3810 --- a/kernel/sched/deadline.c
3811 +++ b/kernel/sched/deadline.c
3812 @@ -575,24 +575,7 @@ void init_dl_task_timer(struct sched_dl_entity *dl_se)
3813 static
3814 int dl_runtime_exceeded(struct rq *rq, struct sched_dl_entity *dl_se)
3815 {
3816 - int dmiss = dl_time_before(dl_se->deadline, rq_clock(rq));
3817 - int rorun = dl_se->runtime <= 0;
3818 -
3819 - if (!rorun && !dmiss)
3820 - return 0;
3821 -
3822 - /*
3823 - * If we are beyond our current deadline and we are still
3824 - * executing, then we have already used some of the runtime of
3825 - * the next instance. Thus, if we do not account that, we are
3826 - * stealing bandwidth from the system at each deadline miss!
3827 - */
3828 - if (dmiss) {
3829 - dl_se->runtime = rorun ? dl_se->runtime : 0;
3830 - dl_se->runtime -= rq_clock(rq) - dl_se->deadline;
3831 - }
3832 -
3833 - return 1;
3834 + return (dl_se->runtime <= 0);
3835 }
3836
3837 extern bool sched_rt_bandwidth_account(struct rt_rq *rt_rq);
3838 @@ -831,10 +814,10 @@ enqueue_dl_entity(struct sched_dl_entity *dl_se,
3839 * parameters of the task might need updating. Otherwise,
3840 * we want a replenishment of its runtime.
3841 */
3842 - if (!dl_se->dl_new && flags & ENQUEUE_REPLENISH)
3843 - replenish_dl_entity(dl_se, pi_se);
3844 - else
3845 + if (dl_se->dl_new || flags & ENQUEUE_WAKEUP)
3846 update_dl_entity(dl_se, pi_se);
3847 + else if (flags & ENQUEUE_REPLENISH)
3848 + replenish_dl_entity(dl_se, pi_se);
3849
3850 __enqueue_dl_entity(dl_se);
3851 }
3852 diff --git a/mm/memory.c b/mm/memory.c
3853 index d5f2ae9c4a23..7f86cf6252bd 100644
3854 --- a/mm/memory.c
3855 +++ b/mm/memory.c
3856 @@ -2150,17 +2150,24 @@ reuse:
3857 if (!dirty_page)
3858 return ret;
3859
3860 - /*
3861 - * Yes, Virginia, this is actually required to prevent a race
3862 - * with clear_page_dirty_for_io() from clearing the page dirty
3863 - * bit after it clear all dirty ptes, but before a racing
3864 - * do_wp_page installs a dirty pte.
3865 - *
3866 - * do_shared_fault is protected similarly.
3867 - */
3868 if (!page_mkwrite) {
3869 - wait_on_page_locked(dirty_page);
3870 - set_page_dirty_balance(dirty_page);
3871 + struct address_space *mapping;
3872 + int dirtied;
3873 +
3874 + lock_page(dirty_page);
3875 + dirtied = set_page_dirty(dirty_page);
3876 + VM_BUG_ON_PAGE(PageAnon(dirty_page), dirty_page);
3877 + mapping = dirty_page->mapping;
3878 + unlock_page(dirty_page);
3879 +
3880 + if (dirtied && mapping) {
3881 + /*
3882 + * Some device drivers do not set page.mapping
3883 + * but still dirty their pages
3884 + */
3885 + balance_dirty_pages_ratelimited(mapping);
3886 + }
3887 +
3888 /* file_update_time outside page_lock */
3889 if (vma->vm_file)
3890 file_update_time(vma->vm_file);
3891 @@ -2606,7 +2613,7 @@ static inline int check_stack_guard_page(struct vm_area_struct *vma, unsigned lo
3892 if (prev && prev->vm_end == address)
3893 return prev->vm_flags & VM_GROWSDOWN ? 0 : -ENOMEM;
3894
3895 - expand_downwards(vma, address - PAGE_SIZE);
3896 + return expand_downwards(vma, address - PAGE_SIZE);
3897 }
3898 if ((vma->vm_flags & VM_GROWSUP) && address + PAGE_SIZE == vma->vm_end) {
3899 struct vm_area_struct *next = vma->vm_next;
3900 @@ -2615,7 +2622,7 @@ static inline int check_stack_guard_page(struct vm_area_struct *vma, unsigned lo
3901 if (next && next->vm_start == address + PAGE_SIZE)
3902 return next->vm_flags & VM_GROWSUP ? 0 : -ENOMEM;
3903
3904 - expand_upwards(vma, address + PAGE_SIZE);
3905 + return expand_upwards(vma, address + PAGE_SIZE);
3906 }
3907 return 0;
3908 }
3909 diff --git a/mm/mmap.c b/mm/mmap.c
3910 index ae919891a087..1620adbbd77f 100644
3911 --- a/mm/mmap.c
3912 +++ b/mm/mmap.c
3913 @@ -2099,14 +2099,17 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
3914 {
3915 struct mm_struct *mm = vma->vm_mm;
3916 struct rlimit *rlim = current->signal->rlim;
3917 - unsigned long new_start;
3918 + unsigned long new_start, actual_size;
3919
3920 /* address space limit tests */
3921 if (!may_expand_vm(mm, grow))
3922 return -ENOMEM;
3923
3924 /* Stack limit test */
3925 - if (size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur))
3926 + actual_size = size;
3927 + if (size && (vma->vm_flags & (VM_GROWSUP | VM_GROWSDOWN)))
3928 + actual_size -= PAGE_SIZE;
3929 + if (actual_size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur))
3930 return -ENOMEM;
3931
3932 /* mlock limit tests */
3933 diff --git a/mm/page-writeback.c b/mm/page-writeback.c
3934 index 19ceae87522d..437174a2aaa3 100644
3935 --- a/mm/page-writeback.c
3936 +++ b/mm/page-writeback.c
3937 @@ -1541,16 +1541,6 @@ pause:
3938 bdi_start_background_writeback(bdi);
3939 }
3940
3941 -void set_page_dirty_balance(struct page *page)
3942 -{
3943 - if (set_page_dirty(page)) {
3944 - struct address_space *mapping = page_mapping(page);
3945 -
3946 - if (mapping)
3947 - balance_dirty_pages_ratelimited(mapping);
3948 - }
3949 -}
3950 -
3951 static DEFINE_PER_CPU(int, bdp_ratelimits);
3952
3953 /*
3954 @@ -2123,32 +2113,25 @@ EXPORT_SYMBOL(account_page_dirtied);
3955 * page dirty in that case, but not all the buffers. This is a "bottom-up"
3956 * dirtying, whereas __set_page_dirty_buffers() is a "top-down" dirtying.
3957 *
3958 - * Most callers have locked the page, which pins the address_space in memory.
3959 - * But zap_pte_range() does not lock the page, however in that case the
3960 - * mapping is pinned by the vma's ->vm_file reference.
3961 - *
3962 - * We take care to handle the case where the page was truncated from the
3963 - * mapping by re-checking page_mapping() inside tree_lock.
3964 + * The caller must ensure this doesn't race with truncation. Most will simply
3965 + * hold the page lock, but e.g. zap_pte_range() calls with the page mapped and
3966 + * the pte lock held, which also locks out truncation.
3967 */
3968 int __set_page_dirty_nobuffers(struct page *page)
3969 {
3970 if (!TestSetPageDirty(page)) {
3971 struct address_space *mapping = page_mapping(page);
3972 - struct address_space *mapping2;
3973 unsigned long flags;
3974
3975 if (!mapping)
3976 return 1;
3977
3978 spin_lock_irqsave(&mapping->tree_lock, flags);
3979 - mapping2 = page_mapping(page);
3980 - if (mapping2) { /* Race with truncate? */
3981 - BUG_ON(mapping2 != mapping);
3982 - WARN_ON_ONCE(!PagePrivate(page) && !PageUptodate(page));
3983 - account_page_dirtied(page, mapping);
3984 - radix_tree_tag_set(&mapping->page_tree,
3985 - page_index(page), PAGECACHE_TAG_DIRTY);
3986 - }
3987 + BUG_ON(page_mapping(page) != mapping);
3988 + WARN_ON_ONCE(!PagePrivate(page) && !PageUptodate(page));
3989 + account_page_dirtied(page, mapping);
3990 + radix_tree_tag_set(&mapping->page_tree, page_index(page),
3991 + PAGECACHE_TAG_DIRTY);
3992 spin_unlock_irqrestore(&mapping->tree_lock, flags);
3993 if (mapping->host) {
3994 /* !PageAnon && !swapper_space */
3995 @@ -2305,12 +2288,10 @@ int clear_page_dirty_for_io(struct page *page)
3996 /*
3997 * We carefully synchronise fault handlers against
3998 * installing a dirty pte and marking the page dirty
3999 - * at this point. We do this by having them hold the
4000 - * page lock at some point after installing their
4001 - * pte, but before marking the page dirty.
4002 - * Pages are always locked coming in here, so we get
4003 - * the desired exclusion. See mm/memory.c:do_wp_page()
4004 - * for more comments.
4005 + * at this point. We do this by having them hold the
4006 + * page lock while dirtying the page, and pages are
4007 + * always locked coming in here, so we get the desired
4008 + * exclusion.
4009 */
4010 if (TestClearPageDirty(page)) {
4011 dec_zone_page_state(page, NR_FILE_DIRTY);
4012 diff --git a/mm/vmscan.c b/mm/vmscan.c
4013 index dcb47074ae03..e3b0a54a44aa 100644
4014 --- a/mm/vmscan.c
4015 +++ b/mm/vmscan.c
4016 @@ -2904,18 +2904,20 @@ static bool prepare_kswapd_sleep(pg_data_t *pgdat, int order, long remaining,
4017 return false;
4018
4019 /*
4020 - * There is a potential race between when kswapd checks its watermarks
4021 - * and a process gets throttled. There is also a potential race if
4022 - * processes get throttled, kswapd wakes, a large process exits therby
4023 - * balancing the zones that causes kswapd to miss a wakeup. If kswapd
4024 - * is going to sleep, no process should be sleeping on pfmemalloc_wait
4025 - * so wake them now if necessary. If necessary, processes will wake
4026 - * kswapd and get throttled again
4027 + * The throttled processes are normally woken up in balance_pgdat() as
4028 + * soon as pfmemalloc_watermark_ok() is true. But there is a potential
4029 + * race between when kswapd checks the watermarks and a process gets
4030 + * throttled. There is also a potential race if processes get
4031 + * throttled, kswapd wakes, a large process exits thereby balancing the
4032 + * zones, which causes kswapd to exit balance_pgdat() before reaching
4033 + * the wake up checks. If kswapd is going to sleep, no process should
4034 + * be sleeping on pfmemalloc_wait, so wake them now if necessary. If
4035 + * the wake up is premature, processes will wake kswapd and get
4036 + * throttled again. The difference from wake ups in balance_pgdat() is
4037 + * that here we are under prepare_to_wait().
4038 */
4039 - if (waitqueue_active(&pgdat->pfmemalloc_wait)) {
4040 - wake_up(&pgdat->pfmemalloc_wait);
4041 - return false;
4042 - }
4043 + if (waitqueue_active(&pgdat->pfmemalloc_wait))
4044 + wake_up_all(&pgdat->pfmemalloc_wait);
4045
4046 return pgdat_balanced(pgdat, order, classzone_idx);
4047 }
4048 diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c
4049 index c2e0d14433df..cfbb39e6fdfd 100644
4050 --- a/net/bluetooth/6lowpan.c
4051 +++ b/net/bluetooth/6lowpan.c
4052 @@ -591,17 +591,13 @@ static netdev_tx_t bt_xmit(struct sk_buff *skb, struct net_device *netdev)
4053 int err = 0;
4054 bdaddr_t addr;
4055 u8 addr_type;
4056 - struct sk_buff *tmpskb;
4057
4058 /* We must take a copy of the skb before we modify/replace the ipv6
4059 * header as the header could be used elsewhere
4060 */
4061 - tmpskb = skb_unshare(skb, GFP_ATOMIC);
4062 - if (!tmpskb) {
4063 - kfree_skb(skb);
4064 + skb = skb_unshare(skb, GFP_ATOMIC);
4065 + if (!skb)
4066 return NET_XMIT_DROP;
4067 - }
4068 - skb = tmpskb;
4069
4070 /* Return values from setup_header()
4071 * <0 - error, packet is dropped
4072 diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
4073 index b9517bd17190..b45eb243a5ee 100644
4074 --- a/net/bluetooth/hci_conn.c
4075 +++ b/net/bluetooth/hci_conn.c
4076 @@ -415,7 +415,7 @@ static void le_conn_timeout(struct work_struct *work)
4077 * happen with broken hardware or if low duty cycle was used
4078 * (which doesn't have a timeout of its own).
4079 */
4080 - if (test_bit(HCI_ADVERTISING, &hdev->dev_flags)) {
4081 + if (conn->role == HCI_ROLE_SLAVE) {
4082 u8 enable = 0x00;
4083 hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable),
4084 &enable);
4085 @@ -517,7 +517,7 @@ int hci_conn_del(struct hci_conn *conn)
4086 /* Unacked frames */
4087 hdev->acl_cnt += conn->sent;
4088 } else if (conn->type == LE_LINK) {
4089 - cancel_delayed_work_sync(&conn->le_conn_timeout);
4090 + cancel_delayed_work(&conn->le_conn_timeout);
4091
4092 if (hdev->le_pkts)
4093 hdev->le_cnt += conn->sent;
4094 diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
4095 index 8b0a2a6de419..e5124a9ea6f6 100644
4096 --- a/net/bluetooth/hci_event.c
4097 +++ b/net/bluetooth/hci_event.c
4098 @@ -205,6 +205,8 @@ static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
4099 hdev->le_scan_type = LE_SCAN_PASSIVE;
4100
4101 hdev->ssp_debug_mode = 0;
4102 +
4103 + hci_bdaddr_list_clear(&hdev->le_white_list);
4104 }
4105
4106 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
4107 @@ -237,7 +239,8 @@ static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
4108 if (rp->status)
4109 return;
4110
4111 - if (test_bit(HCI_SETUP, &hdev->dev_flags))
4112 + if (test_bit(HCI_SETUP, &hdev->dev_flags) ||
4113 + test_bit(HCI_CONFIG, &hdev->dev_flags))
4114 memcpy(hdev->dev_name, rp->name, HCI_MAX_NAME_LENGTH);
4115 }
4116
4117 @@ -492,7 +495,8 @@ static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
4118 if (rp->status)
4119 return;
4120
4121 - if (test_bit(HCI_SETUP, &hdev->dev_flags)) {
4122 + if (test_bit(HCI_SETUP, &hdev->dev_flags) ||
4123 + test_bit(HCI_CONFIG, &hdev->dev_flags)) {
4124 hdev->hci_ver = rp->hci_ver;
4125 hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
4126 hdev->lmp_ver = rp->lmp_ver;
4127 @@ -511,7 +515,8 @@ static void hci_cc_read_local_commands(struct hci_dev *hdev,
4128 if (rp->status)
4129 return;
4130
4131 - if (test_bit(HCI_SETUP, &hdev->dev_flags))
4132 + if (test_bit(HCI_SETUP, &hdev->dev_flags) ||
4133 + test_bit(HCI_CONFIG, &hdev->dev_flags))
4134 memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
4135 }
4136
4137 @@ -2139,7 +2144,12 @@ static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
4138 return;
4139 }
4140
4141 - if (!test_bit(HCI_CONNECTABLE, &hdev->dev_flags) &&
4142 + /* Require HCI_CONNECTABLE or a whitelist entry to accept the
4143 + * connection. These features are only touched through mgmt so
4144 + * only do the checks if HCI_MGMT is set.
4145 + */
4146 + if (test_bit(HCI_MGMT, &hdev->dev_flags) &&
4147 + !test_bit(HCI_CONNECTABLE, &hdev->dev_flags) &&
4148 !hci_bdaddr_list_lookup(&hdev->whitelist, &ev->bdaddr,
4149 BDADDR_BREDR)) {
4150 hci_reject_conn(hdev, &ev->bdaddr);
4151 diff --git a/net/mac80211/key.c b/net/mac80211/key.c
4152 index d66c6443164c..94368404744b 100644
4153 --- a/net/mac80211/key.c
4154 +++ b/net/mac80211/key.c
4155 @@ -131,7 +131,9 @@ static int ieee80211_key_enable_hw_accel(struct ieee80211_key *key)
4156 if (!ret) {
4157 key->flags |= KEY_FLAG_UPLOADED_TO_HARDWARE;
4158
4159 - if (!(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC))
4160 + if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) ||
4161 + (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) ||
4162 + (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)))
4163 sdata->crypto_tx_tailroom_needed_cnt--;
4164
4165 WARN_ON((key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE) &&
4166 @@ -179,7 +181,9 @@ static void ieee80211_key_disable_hw_accel(struct ieee80211_key *key)
4167 sta = key->sta;
4168 sdata = key->sdata;
4169
4170 - if (!(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC))
4171 + if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) ||
4172 + (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) ||
4173 + (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)))
4174 increment_tailroom_need_count(sdata);
4175
4176 ret = drv_set_key(key->local, DISABLE_KEY, sdata,
4177 @@ -875,7 +879,9 @@ void ieee80211_remove_key(struct ieee80211_key_conf *keyconf)
4178 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) {
4179 key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
4180
4181 - if (!(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC))
4182 + if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) ||
4183 + (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) ||
4184 + (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)))
4185 increment_tailroom_need_count(key->sdata);
4186 }
4187
4188 diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c
4189 index 290af97bf6f9..2a81e77c4477 100644
4190 --- a/net/sunrpc/xdr.c
4191 +++ b/net/sunrpc/xdr.c
4192 @@ -606,7 +606,7 @@ void xdr_truncate_encode(struct xdr_stream *xdr, size_t len)
4193 struct kvec *head = buf->head;
4194 struct kvec *tail = buf->tail;
4195 int fraglen;
4196 - int new, old;
4197 + int new;
4198
4199 if (len > buf->len) {
4200 WARN_ON_ONCE(1);
4201 @@ -628,8 +628,8 @@ void xdr_truncate_encode(struct xdr_stream *xdr, size_t len)
4202 buf->len -= fraglen;
4203
4204 new = buf->page_base + buf->page_len;
4205 - old = new + fraglen;
4206 - xdr->page_ptr -= (old >> PAGE_SHIFT) - (new >> PAGE_SHIFT);
4207 +
4208 + xdr->page_ptr = buf->pages + (new >> PAGE_SHIFT);
4209
4210 if (buf->page_len && buf->len == len) {
4211 xdr->p = page_address(*xdr->page_ptr);
4212 diff --git a/scripts/kernel-doc b/scripts/kernel-doc
4213 index 70bea942b413..9922e66883a5 100755
4214 --- a/scripts/kernel-doc
4215 +++ b/scripts/kernel-doc
4216 @@ -1753,7 +1753,7 @@ sub dump_struct($$) {
4217 # strip kmemcheck_bitfield_{begin,end}.*;
4218 $members =~ s/kmemcheck_bitfield_.*?;//gos;
4219 # strip attributes
4220 - $members =~ s/__aligned\s*\(.+\)//gos;
4221 + $members =~ s/__aligned\s*\([^;]*\)//gos;
4222
4223 create_parameterlist($members, ';', $file);
4224 check_sections($file, $declaration_name, "struct", $sectcheck, $struct_actual, $nested);
4225 diff --git a/sound/firewire/fireworks/fireworks_transaction.c b/sound/firewire/fireworks/fireworks_transaction.c
4226 index 255dabc6fc33..2a85e4209f0b 100644
4227 --- a/sound/firewire/fireworks/fireworks_transaction.c
4228 +++ b/sound/firewire/fireworks/fireworks_transaction.c
4229 @@ -124,7 +124,7 @@ copy_resp_to_buf(struct snd_efw *efw, void *data, size_t length, int *rcode)
4230 spin_lock_irq(&efw->lock);
4231
4232 t = (struct snd_efw_transaction *)data;
4233 - length = min_t(size_t, t->length * sizeof(t->length), length);
4234 + length = min_t(size_t, be32_to_cpu(t->length) * sizeof(u32), length);
4235
4236 if (efw->push_ptr < efw->pull_ptr)
4237 capacity = (unsigned int)(efw->pull_ptr - efw->push_ptr);
4238 diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
4239 index 15e0089492f7..e708368d208f 100644
4240 --- a/sound/pci/hda/hda_codec.c
4241 +++ b/sound/pci/hda/hda_codec.c
4242 @@ -338,8 +338,10 @@ int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
4243 unsigned int parm;
4244
4245 parm = snd_hda_param_read(codec, nid, AC_PAR_NODE_COUNT);
4246 - if (parm == -1)
4247 + if (parm == -1) {
4248 + *start_id = 0;
4249 return 0;
4250 + }
4251 *start_id = (parm >> 16) & 0x7fff;
4252 return (int)(parm & 0x7fff);
4253 }
4254 diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
4255 index 9dc9cf8c90e9..edb6e6124a23 100644
4256 --- a/sound/pci/hda/patch_hdmi.c
4257 +++ b/sound/pci/hda/patch_hdmi.c
4258 @@ -3351,6 +3351,7 @@ static const struct hda_codec_preset snd_hda_preset_hdmi[] = {
4259 { .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch },
4260 { .id = 0x10de0070, .name = "GPU 70 HDMI/DP", .patch = patch_nvhdmi },
4261 { .id = 0x10de0071, .name = "GPU 71 HDMI/DP", .patch = patch_nvhdmi },
4262 +{ .id = 0x10de0072, .name = "GPU 72 HDMI/DP", .patch = patch_nvhdmi },
4263 { .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi_2ch },
4264 { .id = 0x11069f80, .name = "VX900 HDMI/DP", .patch = patch_via_hdmi },
4265 { .id = 0x11069f81, .name = "VX900 HDMI/DP", .patch = patch_via_hdmi },
4266 @@ -3410,6 +3411,7 @@ MODULE_ALIAS("snd-hda-codec-id:10de0060");
4267 MODULE_ALIAS("snd-hda-codec-id:10de0067");
4268 MODULE_ALIAS("snd-hda-codec-id:10de0070");
4269 MODULE_ALIAS("snd-hda-codec-id:10de0071");
4270 +MODULE_ALIAS("snd-hda-codec-id:10de0072");
4271 MODULE_ALIAS("snd-hda-codec-id:10de8001");
4272 MODULE_ALIAS("snd-hda-codec-id:11069f80");
4273 MODULE_ALIAS("snd-hda-codec-id:11069f81");
4274 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
4275 index c5ad83e4e0c7..c879c3709eae 100644
4276 --- a/sound/pci/hda/patch_realtek.c
4277 +++ b/sound/pci/hda/patch_realtek.c
4278 @@ -319,10 +319,12 @@ static void alc_fill_eapd_coef(struct hda_codec *codec)
4279 break;
4280 case 0x10ec0233:
4281 case 0x10ec0255:
4282 + case 0x10ec0256:
4283 case 0x10ec0282:
4284 case 0x10ec0283:
4285 case 0x10ec0286:
4286 case 0x10ec0288:
4287 + case 0x10ec0298:
4288 alc_update_coef_idx(codec, 0x10, 1<<9, 0);
4289 break;
4290 case 0x10ec0285:
4291 @@ -2657,7 +2659,9 @@ enum {
4292 ALC269_TYPE_ALC284,
4293 ALC269_TYPE_ALC285,
4294 ALC269_TYPE_ALC286,
4295 + ALC269_TYPE_ALC298,
4296 ALC269_TYPE_ALC255,
4297 + ALC269_TYPE_ALC256,
4298 };
4299
4300 /*
4301 @@ -2684,7 +2688,9 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
4302 case ALC269_TYPE_ALC282:
4303 case ALC269_TYPE_ALC283:
4304 case ALC269_TYPE_ALC286:
4305 + case ALC269_TYPE_ALC298:
4306 case ALC269_TYPE_ALC255:
4307 + case ALC269_TYPE_ALC256:
4308 ssids = alc269_ssids;
4309 break;
4310 default:
4311 @@ -4790,6 +4796,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4312 SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS_HSJACK),
4313 SND_PCI_QUIRK(0x1028, 0x064a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
4314 SND_PCI_QUIRK(0x1028, 0x064b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
4315 + SND_PCI_QUIRK(0x1028, 0x06c7, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
4316 SND_PCI_QUIRK(0x1028, 0x06d9, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
4317 SND_PCI_QUIRK(0x1028, 0x06da, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
4318 SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
4319 @@ -5377,9 +5384,15 @@ static int patch_alc269(struct hda_codec *codec)
4320 spec->codec_variant = ALC269_TYPE_ALC286;
4321 spec->shutup = alc286_shutup;
4322 break;
4323 + case 0x10ec0298:
4324 + spec->codec_variant = ALC269_TYPE_ALC298;
4325 + break;
4326 case 0x10ec0255:
4327 spec->codec_variant = ALC269_TYPE_ALC255;
4328 break;
4329 + case 0x10ec0256:
4330 + spec->codec_variant = ALC269_TYPE_ALC256;
4331 + break;
4332 }
4333
4334 if (snd_hda_codec_read(codec, 0x51, 0, AC_VERB_PARAMETERS, 0) == 0x10ec5505) {
4335 @@ -6315,6 +6328,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = {
4336 { .id = 0x10ec0233, .name = "ALC233", .patch = patch_alc269 },
4337 { .id = 0x10ec0235, .name = "ALC233", .patch = patch_alc269 },
4338 { .id = 0x10ec0255, .name = "ALC255", .patch = patch_alc269 },
4339 + { .id = 0x10ec0256, .name = "ALC256", .patch = patch_alc269 },
4340 { .id = 0x10ec0260, .name = "ALC260", .patch = patch_alc260 },
4341 { .id = 0x10ec0262, .name = "ALC262", .patch = patch_alc262 },
4342 { .id = 0x10ec0267, .name = "ALC267", .patch = patch_alc268 },
4343 @@ -6334,6 +6348,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = {
4344 { .id = 0x10ec0290, .name = "ALC290", .patch = patch_alc269 },
4345 { .id = 0x10ec0292, .name = "ALC292", .patch = patch_alc269 },
4346 { .id = 0x10ec0293, .name = "ALC293", .patch = patch_alc269 },
4347 + { .id = 0x10ec0298, .name = "ALC298", .patch = patch_alc269 },
4348 { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660",
4349 .patch = patch_alc861 },
4350 { .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd },
4351 diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
4352 index 4f6413e01c13..605d14003d25 100644
4353 --- a/sound/pci/hda/patch_sigmatel.c
4354 +++ b/sound/pci/hda/patch_sigmatel.c
4355 @@ -568,9 +568,9 @@ static void stac_store_hints(struct hda_codec *codec)
4356 spec->gpio_mask;
4357 }
4358 if (get_int_hint(codec, "gpio_dir", &spec->gpio_dir))
4359 - spec->gpio_mask &= spec->gpio_mask;
4360 - if (get_int_hint(codec, "gpio_data", &spec->gpio_data))
4361 spec->gpio_dir &= spec->gpio_mask;
4362 + if (get_int_hint(codec, "gpio_data", &spec->gpio_data))
4363 + spec->gpio_data &= spec->gpio_mask;
4364 if (get_int_hint(codec, "eapd_mask", &spec->eapd_mask))
4365 spec->eapd_mask &= spec->gpio_mask;
4366 if (get_int_hint(codec, "gpio_mute", &spec->gpio_mute))
4367 diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c
4368 index 1229554f1464..d492d6ea656e 100644
4369 --- a/sound/soc/codecs/max98090.c
4370 +++ b/sound/soc/codecs/max98090.c
4371 @@ -1395,8 +1395,8 @@ static const struct snd_soc_dapm_route max98090_dapm_routes[] = {
4372 {"STENL Mux", "Sidetone Left", "DMICL"},
4373 {"STENR Mux", "Sidetone Right", "ADCR"},
4374 {"STENR Mux", "Sidetone Right", "DMICR"},
4375 - {"DACL", "NULL", "STENL Mux"},
4376 - {"DACR", "NULL", "STENL Mux"},
4377 + {"DACL", NULL, "STENL Mux"},
4378 + {"DACR", NULL, "STENL Mux"},
4379
4380 {"AIFINL", NULL, "SHDN"},
4381 {"AIFINR", NULL, "SHDN"},
4382 diff --git a/sound/soc/codecs/pcm512x-i2c.c b/sound/soc/codecs/pcm512x-i2c.c
4383 index 4d62230bd378..d0547fa275fc 100644
4384 --- a/sound/soc/codecs/pcm512x-i2c.c
4385 +++ b/sound/soc/codecs/pcm512x-i2c.c
4386 @@ -24,8 +24,13 @@ static int pcm512x_i2c_probe(struct i2c_client *i2c,
4387 const struct i2c_device_id *id)
4388 {
4389 struct regmap *regmap;
4390 + struct regmap_config config = pcm512x_regmap;
4391
4392 - regmap = devm_regmap_init_i2c(i2c, &pcm512x_regmap);
4393 + /* msb needs to be set to enable auto-increment of addresses */
4394 + config.read_flag_mask = 0x80;
4395 + config.write_flag_mask = 0x80;
4396 +
4397 + regmap = devm_regmap_init_i2c(i2c, &config);
4398 if (IS_ERR(regmap))
4399 return PTR_ERR(regmap);
4400
4401 diff --git a/sound/soc/codecs/sigmadsp.c b/sound/soc/codecs/sigmadsp.c
4402 index f2de7e049bc6..81a38dd9af1f 100644
4403 --- a/sound/soc/codecs/sigmadsp.c
4404 +++ b/sound/soc/codecs/sigmadsp.c
4405 @@ -159,6 +159,13 @@ int _process_sigma_firmware(struct device *dev,
4406 goto done;
4407 }
4408
4409 + if (ssfw_head->version != 1) {
4410 + dev_err(dev,
4411 + "Failed to load firmware: Invalid version %d. Supported firmware versions: 1\n",
4412 + ssfw_head->version);
4413 + goto done;
4414 + }
4415 +
4416 crc = crc32(0, fw->data + sizeof(*ssfw_head),
4417 fw->size - sizeof(*ssfw_head));
4418 pr_debug("%s: crc=%x\n", __func__, crc);
4419 diff --git a/sound/soc/codecs/tlv320aic31xx.c b/sound/soc/codecs/tlv320aic31xx.c
4420 index 145fe5b253d4..93de5dd0a7b9 100644
4421 --- a/sound/soc/codecs/tlv320aic31xx.c
4422 +++ b/sound/soc/codecs/tlv320aic31xx.c
4423 @@ -911,12 +911,13 @@ static int aic31xx_set_dai_sysclk(struct snd_soc_dai *codec_dai,
4424 }
4425 aic31xx->p_div = i;
4426
4427 - for (i = 0; aic31xx_divs[i].mclk_p != freq/aic31xx->p_div; i++) {
4428 - if (i == ARRAY_SIZE(aic31xx_divs)) {
4429 - dev_err(aic31xx->dev, "%s: Unsupported frequency %d\n",
4430 - __func__, freq);
4431 - return -EINVAL;
4432 - }
4433 + for (i = 0; i < ARRAY_SIZE(aic31xx_divs) &&
4434 + aic31xx_divs[i].mclk_p != freq/aic31xx->p_div; i++)
4435 + ;
4436 + if (i == ARRAY_SIZE(aic31xx_divs)) {
4437 + dev_err(aic31xx->dev, "%s: Unsupported frequency %d\n",
4438 + __func__, freq);
4439 + return -EINVAL;
4440 }
4441
4442 /* set clock on MCLK, BCLK, or GPIO1 as PLL input */
4443 diff --git a/sound/soc/dwc/designware_i2s.c b/sound/soc/dwc/designware_i2s.c
4444 index e961388e6e9c..10e1b8ca42ed 100644
4445 --- a/sound/soc/dwc/designware_i2s.c
4446 +++ b/sound/soc/dwc/designware_i2s.c
4447 @@ -263,6 +263,19 @@ static void dw_i2s_shutdown(struct snd_pcm_substream *substream,
4448 snd_soc_dai_set_dma_data(dai, substream, NULL);
4449 }
4450
4451 +static int dw_i2s_prepare(struct snd_pcm_substream *substream,
4452 + struct snd_soc_dai *dai)
4453 +{
4454 + struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
4455 +
4456 + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
4457 + i2s_write_reg(dev->i2s_base, TXFFR, 1);
4458 + else
4459 + i2s_write_reg(dev->i2s_base, RXFFR, 1);
4460 +
4461 + return 0;
4462 +}
4463 +
4464 static int dw_i2s_trigger(struct snd_pcm_substream *substream,
4465 int cmd, struct snd_soc_dai *dai)
4466 {
4467 @@ -294,6 +307,7 @@ static struct snd_soc_dai_ops dw_i2s_dai_ops = {
4468 .startup = dw_i2s_startup,
4469 .shutdown = dw_i2s_shutdown,
4470 .hw_params = dw_i2s_hw_params,
4471 + .prepare = dw_i2s_prepare,
4472 .trigger = dw_i2s_trigger,
4473 };
4474
4475 diff --git a/sound/soc/fsl/eukrea-tlv320.c b/sound/soc/fsl/eukrea-tlv320.c
4476 index eb093d5b85c4..54790461f39e 100644
4477 --- a/sound/soc/fsl/eukrea-tlv320.c
4478 +++ b/sound/soc/fsl/eukrea-tlv320.c
4479 @@ -105,7 +105,7 @@ static int eukrea_tlv320_probe(struct platform_device *pdev)
4480 int ret;
4481 int int_port = 0, ext_port;
4482 struct device_node *np = pdev->dev.of_node;
4483 - struct device_node *ssi_np, *codec_np;
4484 + struct device_node *ssi_np = NULL, *codec_np = NULL;
4485
4486 eukrea_tlv320.dev = &pdev->dev;
4487 if (np) {
4488 diff --git a/sound/usb/caiaq/audio.c b/sound/usb/caiaq/audio.c
4489 index 272844746135..327f8642ca80 100644
4490 --- a/sound/usb/caiaq/audio.c
4491 +++ b/sound/usb/caiaq/audio.c
4492 @@ -816,7 +816,7 @@ int snd_usb_caiaq_audio_init(struct snd_usb_caiaqdev *cdev)
4493 return -EINVAL;
4494 }
4495
4496 - if (cdev->n_streams < 2) {
4497 + if (cdev->n_streams < 1) {
4498 dev_err(dev, "bogus number of streams: %d\n", cdev->n_streams);
4499 return -EINVAL;
4500 }
4501 diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c
4502 index d1d72ff50347..621bc9ebb55e 100644
4503 --- a/sound/usb/mixer_maps.c
4504 +++ b/sound/usb/mixer_maps.c
4505 @@ -328,8 +328,11 @@ static struct usbmix_name_map gamecom780_map[] = {
4506 {}
4507 };
4508
4509 -static const struct usbmix_name_map kef_x300a_map[] = {
4510 - { 10, NULL }, /* firmware locks up (?) when we try to access this FU */
4511 +/* some (all?) SCMS USB3318 devices are affected by a firmware lock up
4512 + * when anything attempts to access FU 10 (control)
4513 + */
4514 +static const struct usbmix_name_map scms_usb3318_map[] = {
4515 + { 10, NULL },
4516 { 0 }
4517 };
4518
4519 @@ -425,8 +428,14 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = {
4520 .map = ebox44_map,
4521 },
4522 {
4523 + /* KEF X300A */
4524 .id = USB_ID(0x27ac, 0x1000),
4525 - .map = kef_x300a_map,
4526 + .map = scms_usb3318_map,
4527 + },
4528 + {
4529 + /* Arcam rPAC */
4530 + .id = USB_ID(0x25c4, 0x0003),
4531 + .map = scms_usb3318_map,
4532 },
4533 { 0 } /* terminator */
4534 };
4535 diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h
4536 index 5699e7e2a790..50a7b115698c 100644
4537 --- a/tools/perf/util/event.h
4538 +++ b/tools/perf/util/event.h
4539 @@ -214,6 +214,7 @@ struct events_stats {
4540 u32 nr_invalid_chains;
4541 u32 nr_unknown_id;
4542 u32 nr_unprocessable_samples;
4543 + u32 nr_unordered_events;
4544 };
4545
4546 struct attr_event {
4547 diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
4548 index 6702ac28754b..80dbba095f30 100644
4549 --- a/tools/perf/util/session.c
4550 +++ b/tools/perf/util/session.c
4551 @@ -521,15 +521,11 @@ int perf_session_queue_event(struct perf_session *s, union perf_event *event,
4552 return -ETIME;
4553
4554 if (timestamp < oe->last_flush) {
4555 - WARN_ONCE(1, "Timestamp below last timeslice flush\n");
4556 -
4557 - pr_oe_time(timestamp, "out of order event");
4558 + pr_oe_time(timestamp, "out of order event\n");
4559 pr_oe_time(oe->last_flush, "last flush, last_flush_type %d\n",
4560 oe->last_flush_type);
4561
4562 - /* We could get out of order messages after forced flush. */
4563 - if (oe->last_flush_type != OE_FLUSH__HALF)
4564 - return -EINVAL;
4565 + s->stats.nr_unordered_events++;
4566 }
4567
4568 new = ordered_events__new(oe, timestamp, event);
4569 @@ -1057,6 +1053,9 @@ static void perf_session__warn_about_errors(const struct perf_session *session,
4570 "Do you have a KVM guest running and not using 'perf kvm'?\n",
4571 session->stats.nr_unprocessable_samples);
4572 }
4573 +
4574 + if (session->stats.nr_unordered_events != 0)
4575 + ui__warning("%u out of order events recorded.\n", session->stats.nr_unordered_events);
4576 }
4577
4578 volatile int session_done;
4579 diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl
4580 index bf1398180785..dcb1e9ac949c 100755
4581 --- a/tools/testing/ktest/ktest.pl
4582 +++ b/tools/testing/ktest/ktest.pl
4583 @@ -3571,7 +3571,9 @@ sub test_this_config {
4584 undef %configs;
4585 assign_configs \%configs, $output_config;
4586
4587 - return $config if (!defined($configs{$config}));
4588 + if (!defined($configs{$config}) || $configs{$config} =~ /^#/) {
4589 + return $config;
4590 + }
4591
4592 doprint "disabling config $config did not change .config\n";
4593