Magellan Linux

Contents of /trunk/kernel-alx/patches-3.18/0114-3.18.15-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2615 - (show annotations) (download)
Mon Jul 13 08:28:58 2015 UTC (8 years, 9 months ago) by niro
File size: 210489 byte(s)
-linux-3.18.15
1 diff --git a/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt b/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt
2 index a4873e5e3e36..e30e184f50c7 100644
3 --- a/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt
4 +++ b/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt
5 @@ -38,7 +38,7 @@ dma_apbx: dma-apbx@80024000 {
6 80 81 68 69
7 70 71 72 73
8 74 75 76 77>;
9 - interrupt-names = "auart4-rx", "aurat4-tx", "spdif-tx", "empty",
10 + interrupt-names = "auart4-rx", "auart4-tx", "spdif-tx", "empty",
11 "saif0", "saif1", "i2c0", "i2c1",
12 "auart0-rx", "auart0-tx", "auart1-rx", "auart1-tx",
13 "auart2-rx", "auart2-tx", "auart3-rx", "auart3-tx";
14 diff --git a/Documentation/virtual/kvm/mmu.txt b/Documentation/virtual/kvm/mmu.txt
15 index 53838d9c6295..c59bd9bc41ef 100644
16 --- a/Documentation/virtual/kvm/mmu.txt
17 +++ b/Documentation/virtual/kvm/mmu.txt
18 @@ -169,6 +169,10 @@ Shadow pages contain the following information:
19 Contains the value of cr4.smep && !cr0.wp for which the page is valid
20 (pages for which this is true are different from other pages; see the
21 treatment of cr0.wp=0 below).
22 + role.smap_andnot_wp:
23 + Contains the value of cr4.smap && !cr0.wp for which the page is valid
24 + (pages for which this is true are different from other pages; see the
25 + treatment of cr0.wp=0 below).
26 gfn:
27 Either the guest page table containing the translations shadowed by this
28 page, or the base page frame for linear translations. See role.direct.
29 @@ -344,10 +348,16 @@ on fault type:
30
31 (user write faults generate a #PF)
32
33 -In the first case there is an additional complication if CR4.SMEP is
34 -enabled: since we've turned the page into a kernel page, the kernel may now
35 -execute it. We handle this by also setting spte.nx. If we get a user
36 -fetch or read fault, we'll change spte.u=1 and spte.nx=gpte.nx back.
37 +In the first case there are two additional complications:
38 +- if CR4.SMEP is enabled: since we've turned the page into a kernel page,
39 + the kernel may now execute it. We handle this by also setting spte.nx.
40 + If we get a user fetch or read fault, we'll change spte.u=1 and
41 + spte.nx=gpte.nx back.
42 +- if CR4.SMAP is disabled: since the page has been changed to a kernel
43 + page, it can not be reused when CR4.SMAP is enabled. We set
44 + CR4.SMAP && !CR0.WP into shadow page's role to avoid this case. Note,
45 + here we do not care the case that CR4.SMAP is enabled since KVM will
46 + directly inject #PF to guest due to failed permission check.
47
48 To prevent an spte that was converted into a kernel page with cr0.wp=0
49 from being written by the kernel after cr0.wp has changed to 1, we make
50 diff --git a/Makefile b/Makefile
51 index 43377eb8a4e5..cda98de8cd31 100644
52 --- a/Makefile
53 +++ b/Makefile
54 @@ -1,6 +1,6 @@
55 VERSION = 3
56 PATCHLEVEL = 18
57 -SUBLEVEL = 14
58 +SUBLEVEL = 15
59 EXTRAVERSION =
60 NAME = Diseased Newt
61
62 diff --git a/arch/arc/include/asm/atomic.h b/arch/arc/include/asm/atomic.h
63 index 067551b6920a..9917a45fc430 100644
64 --- a/arch/arc/include/asm/atomic.h
65 +++ b/arch/arc/include/asm/atomic.h
66 @@ -99,7 +99,7 @@ static inline void atomic_##op(int i, atomic_t *v) \
67 atomic_ops_unlock(flags); \
68 }
69
70 -#define ATOMIC_OP_RETURN(op, c_op) \
71 +#define ATOMIC_OP_RETURN(op, c_op, asm_op) \
72 static inline int atomic_##op##_return(int i, atomic_t *v) \
73 { \
74 unsigned long flags; \
75 diff --git a/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts b/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts
76 index 4e5a59ee1501..db06fa397f79 100644
77 --- a/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts
78 +++ b/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts
79 @@ -71,6 +71,10 @@
80 };
81
82 internal-regs {
83 + rtc@10300 {
84 + /* No crystal connected to the internal RTC */
85 + status = "disabled";
86 + };
87 serial@12000 {
88 status = "okay";
89 };
90 diff --git a/arch/arm/boot/dts/imx23-olinuxino.dts b/arch/arm/boot/dts/imx23-olinuxino.dts
91 index 7e6eef2488e8..82045398bf1f 100644
92 --- a/arch/arm/boot/dts/imx23-olinuxino.dts
93 +++ b/arch/arm/boot/dts/imx23-olinuxino.dts
94 @@ -12,6 +12,7 @@
95 */
96
97 /dts-v1/;
98 +#include <dt-bindings/gpio/gpio.h>
99 #include "imx23.dtsi"
100
101 / {
102 @@ -93,6 +94,7 @@
103
104 ahb@80080000 {
105 usb0: usb@80080000 {
106 + dr_mode = "host";
107 vbus-supply = <&reg_usb0_vbus>;
108 status = "okay";
109 };
110 @@ -122,7 +124,7 @@
111
112 user {
113 label = "green";
114 - gpios = <&gpio2 1 1>;
115 + gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
116 };
117 };
118 };
119 diff --git a/arch/arm/boot/dts/imx25.dtsi b/arch/arm/boot/dts/imx25.dtsi
120 index e4d3aecc4ed2..677f81d9dcd5 100644
121 --- a/arch/arm/boot/dts/imx25.dtsi
122 +++ b/arch/arm/boot/dts/imx25.dtsi
123 @@ -428,6 +428,7 @@
124
125 pwm4: pwm@53fc8000 {
126 compatible = "fsl,imx25-pwm", "fsl,imx27-pwm";
127 + #pwm-cells = <2>;
128 reg = <0x53fc8000 0x4000>;
129 clocks = <&clks 108>, <&clks 52>;
130 clock-names = "ipg", "per";
131 diff --git a/arch/arm/boot/dts/imx27.dtsi b/arch/arm/boot/dts/imx27.dtsi
132 index 107d713e1cbe..12ac5f7e0a2e 100644
133 --- a/arch/arm/boot/dts/imx27.dtsi
134 +++ b/arch/arm/boot/dts/imx27.dtsi
135 @@ -531,7 +531,7 @@
136
137 fec: ethernet@1002b000 {
138 compatible = "fsl,imx27-fec";
139 - reg = <0x1002b000 0x4000>;
140 + reg = <0x1002b000 0x1000>;
141 interrupts = <50>;
142 clocks = <&clks IMX27_CLK_FEC_IPG_GATE>,
143 <&clks IMX27_CLK_FEC_AHB_GATE>;
144 diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi
145 index 47f68ac868d4..5ed245a3f9ac 100644
146 --- a/arch/arm/boot/dts/imx28.dtsi
147 +++ b/arch/arm/boot/dts/imx28.dtsi
148 @@ -900,7 +900,7 @@
149 80 81 68 69
150 70 71 72 73
151 74 75 76 77>;
152 - interrupt-names = "auart4-rx", "aurat4-tx", "spdif-tx", "empty",
153 + interrupt-names = "auart4-rx", "auart4-tx", "spdif-tx", "empty",
154 "saif0", "saif1", "i2c0", "i2c1",
155 "auart0-rx", "auart0-tx", "auart1-rx", "auart1-tx",
156 "auart2-rx", "auart2-tx", "auart3-rx", "auart3-tx";
157 diff --git a/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi b/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi
158 index 0e50bb0a6b94..413569752422 100644
159 --- a/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi
160 +++ b/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi
161 @@ -31,6 +31,7 @@
162 regulator-min-microvolt = <5000000>;
163 regulator-max-microvolt = <5000000>;
164 gpio = <&gpio4 15 0>;
165 + enable-active-high;
166 };
167
168 reg_usb_h1_vbus: regulator@1 {
169 @@ -40,6 +41,7 @@
170 regulator-min-microvolt = <5000000>;
171 regulator-max-microvolt = <5000000>;
172 gpio = <&gpio1 0 0>;
173 + enable-active-high;
174 };
175 };
176
177 diff --git a/arch/arm/boot/dts/omap3-n900.dts b/arch/arm/boot/dts/omap3-n900.dts
178 index bc82a12d4c2c..ae630a928acd 100644
179 --- a/arch/arm/boot/dts/omap3-n900.dts
180 +++ b/arch/arm/boot/dts/omap3-n900.dts
181 @@ -445,6 +445,8 @@
182 DRVDD-supply = <&vmmc2>;
183 IOVDD-supply = <&vio>;
184 DVDD-supply = <&vio>;
185 +
186 + ai3x-micbias-vg = <1>;
187 };
188
189 tlv320aic3x_aux: tlv320aic3x@19 {
190 @@ -456,6 +458,8 @@
191 DRVDD-supply = <&vmmc2>;
192 IOVDD-supply = <&vio>;
193 DVDD-supply = <&vio>;
194 +
195 + ai3x-micbias-vg = <2>;
196 };
197
198 tsl2563: tsl2563@29 {
199 diff --git a/arch/arm/boot/dts/ste-dbx5x0.dtsi b/arch/arm/boot/dts/ste-dbx5x0.dtsi
200 index 9d2323020d34..563640f59a41 100644
201 --- a/arch/arm/boot/dts/ste-dbx5x0.dtsi
202 +++ b/arch/arm/boot/dts/ste-dbx5x0.dtsi
203 @@ -995,23 +995,6 @@
204 status = "disabled";
205 };
206
207 - vmmci: regulator-gpio {
208 - compatible = "regulator-gpio";
209 -
210 - regulator-min-microvolt = <1800000>;
211 - regulator-max-microvolt = <2900000>;
212 - regulator-name = "mmci-reg";
213 - regulator-type = "voltage";
214 -
215 - startup-delay-us = <100>;
216 - enable-active-high;
217 -
218 - states = <1800000 0x1
219 - 2900000 0x0>;
220 -
221 - status = "disabled";
222 - };
223 -
224 mcde@a0350000 {
225 compatible = "stericsson,mcde";
226 reg = <0xa0350000 0x1000>, /* MCDE */
227 diff --git a/arch/arm/boot/dts/ste-href.dtsi b/arch/arm/boot/dts/ste-href.dtsi
228 index bf8f0eddc2c0..744c1e3a744d 100644
229 --- a/arch/arm/boot/dts/ste-href.dtsi
230 +++ b/arch/arm/boot/dts/ste-href.dtsi
231 @@ -111,6 +111,21 @@
232 pinctrl-1 = <&i2c3_sleep_mode>;
233 };
234
235 + vmmci: regulator-gpio {
236 + compatible = "regulator-gpio";
237 +
238 + regulator-min-microvolt = <1800000>;
239 + regulator-max-microvolt = <2900000>;
240 + regulator-name = "mmci-reg";
241 + regulator-type = "voltage";
242 +
243 + startup-delay-us = <100>;
244 + enable-active-high;
245 +
246 + states = <1800000 0x1
247 + 2900000 0x0>;
248 + };
249 +
250 // External Micro SD slot
251 sdi0_per1@80126000 {
252 arm,primecell-periphid = <0x10480180>;
253 diff --git a/arch/arm/boot/dts/ste-snowball.dts b/arch/arm/boot/dts/ste-snowball.dts
254 index 3e97a669f15e..17c4422def0e 100644
255 --- a/arch/arm/boot/dts/ste-snowball.dts
256 +++ b/arch/arm/boot/dts/ste-snowball.dts
257 @@ -146,8 +146,21 @@
258 };
259
260 vmmci: regulator-gpio {
261 + compatible = "regulator-gpio";
262 +
263 gpios = <&gpio7 4 0x4>;
264 enable-gpio = <&gpio6 25 0x4>;
265 +
266 + regulator-min-microvolt = <1800000>;
267 + regulator-max-microvolt = <2900000>;
268 + regulator-name = "mmci-reg";
269 + regulator-type = "voltage";
270 +
271 + startup-delay-us = <100>;
272 + enable-active-high;
273 +
274 + states = <1800000 0x1
275 + 2900000 0x0>;
276 };
277
278 // External Micro SD slot
279 diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
280 index 38ddd9f83d0e..03120e656aea 100644
281 --- a/arch/arm/kernel/Makefile
282 +++ b/arch/arm/kernel/Makefile
283 @@ -97,7 +97,7 @@ obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
284
285 obj-$(CONFIG_ARM_VIRT_EXT) += hyp-stub.o
286 ifeq ($(CONFIG_ARM_PSCI),y)
287 -obj-y += psci.o
288 +obj-y += psci.o psci-call.o
289 obj-$(CONFIG_SMP) += psci_smp.o
290 endif
291
292 diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
293 index 6bb09d4abdea..eb6f1927b2c7 100644
294 --- a/arch/arm/kernel/entry-common.S
295 +++ b/arch/arm/kernel/entry-common.S
296 @@ -33,7 +33,9 @@ ret_fast_syscall:
297 UNWIND(.fnstart )
298 UNWIND(.cantunwind )
299 disable_irq @ disable interrupts
300 - ldr r1, [tsk, #TI_FLAGS]
301 + ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
302 + tst r1, #_TIF_SYSCALL_WORK
303 + bne __sys_trace_return
304 tst r1, #_TIF_WORK_MASK
305 bne fast_work_pending
306 asm_trace_hardirqs_on
307 diff --git a/arch/arm/kernel/psci-call.S b/arch/arm/kernel/psci-call.S
308 new file mode 100644
309 index 000000000000..a78e9e1e206d
310 --- /dev/null
311 +++ b/arch/arm/kernel/psci-call.S
312 @@ -0,0 +1,31 @@
313 +/*
314 + * This program is free software; you can redistribute it and/or modify
315 + * it under the terms of the GNU General Public License version 2 as
316 + * published by the Free Software Foundation.
317 + *
318 + * This program is distributed in the hope that it will be useful,
319 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
320 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
321 + * GNU General Public License for more details.
322 + *
323 + * Copyright (C) 2015 ARM Limited
324 + *
325 + * Author: Mark Rutland <mark.rutland@arm.com>
326 + */
327 +
328 +#include <linux/linkage.h>
329 +
330 +#include <asm/opcodes-sec.h>
331 +#include <asm/opcodes-virt.h>
332 +
333 +/* int __invoke_psci_fn_hvc(u32 function_id, u32 arg0, u32 arg1, u32 arg2) */
334 +ENTRY(__invoke_psci_fn_hvc)
335 + __HVC(0)
336 + bx lr
337 +ENDPROC(__invoke_psci_fn_hvc)
338 +
339 +/* int __invoke_psci_fn_smc(u32 function_id, u32 arg0, u32 arg1, u32 arg2) */
340 +ENTRY(__invoke_psci_fn_smc)
341 + __SMC(0)
342 + bx lr
343 +ENDPROC(__invoke_psci_fn_smc)
344 diff --git a/arch/arm/kernel/psci.c b/arch/arm/kernel/psci.c
345 index f73891b6b730..f90fdf4ce7c7 100644
346 --- a/arch/arm/kernel/psci.c
347 +++ b/arch/arm/kernel/psci.c
348 @@ -23,8 +23,6 @@
349
350 #include <asm/compiler.h>
351 #include <asm/errno.h>
352 -#include <asm/opcodes-sec.h>
353 -#include <asm/opcodes-virt.h>
354 #include <asm/psci.h>
355 #include <asm/system_misc.h>
356
357 @@ -33,6 +31,9 @@ struct psci_operations psci_ops;
358 static int (*invoke_psci_fn)(u32, u32, u32, u32);
359 typedef int (*psci_initcall_t)(const struct device_node *);
360
361 +asmlinkage int __invoke_psci_fn_hvc(u32, u32, u32, u32);
362 +asmlinkage int __invoke_psci_fn_smc(u32, u32, u32, u32);
363 +
364 enum psci_function {
365 PSCI_FN_CPU_SUSPEND,
366 PSCI_FN_CPU_ON,
367 @@ -71,40 +72,6 @@ static u32 psci_power_state_pack(struct psci_power_state state)
368 & PSCI_0_2_POWER_STATE_AFFL_MASK);
369 }
370
371 -/*
372 - * The following two functions are invoked via the invoke_psci_fn pointer
373 - * and will not be inlined, allowing us to piggyback on the AAPCS.
374 - */
375 -static noinline int __invoke_psci_fn_hvc(u32 function_id, u32 arg0, u32 arg1,
376 - u32 arg2)
377 -{
378 - asm volatile(
379 - __asmeq("%0", "r0")
380 - __asmeq("%1", "r1")
381 - __asmeq("%2", "r2")
382 - __asmeq("%3", "r3")
383 - __HVC(0)
384 - : "+r" (function_id)
385 - : "r" (arg0), "r" (arg1), "r" (arg2));
386 -
387 - return function_id;
388 -}
389 -
390 -static noinline int __invoke_psci_fn_smc(u32 function_id, u32 arg0, u32 arg1,
391 - u32 arg2)
392 -{
393 - asm volatile(
394 - __asmeq("%0", "r0")
395 - __asmeq("%1", "r1")
396 - __asmeq("%2", "r2")
397 - __asmeq("%3", "r3")
398 - __SMC(0)
399 - : "+r" (function_id)
400 - : "r" (arg0), "r" (arg1), "r" (arg2));
401 -
402 - return function_id;
403 -}
404 -
405 static int psci_get_version(void)
406 {
407 int err;
408 diff --git a/arch/arm/mach-mvebu/coherency.c b/arch/arm/mach-mvebu/coherency.c
409 index 2ffccd4eb084..01efe130912e 100644
410 --- a/arch/arm/mach-mvebu/coherency.c
411 +++ b/arch/arm/mach-mvebu/coherency.c
412 @@ -448,8 +448,9 @@ static int __init coherency_late_init(void)
413 armada_375_coherency_init_wa();
414 }
415
416 - bus_register_notifier(&platform_bus_type,
417 - &mvebu_hwcc_nb);
418 + if (coherency_available())
419 + bus_register_notifier(&platform_bus_type,
420 + &mvebu_hwcc_nb);
421
422 return 0;
423 }
424 diff --git a/arch/arm/mach-omap2/prm-regbits-34xx.h b/arch/arm/mach-omap2/prm-regbits-34xx.h
425 index cbefbd7cfdb5..661d753df584 100644
426 --- a/arch/arm/mach-omap2/prm-regbits-34xx.h
427 +++ b/arch/arm/mach-omap2/prm-regbits-34xx.h
428 @@ -112,6 +112,7 @@
429 #define OMAP3430_VC_CMD_ONLP_SHIFT 16
430 #define OMAP3430_VC_CMD_RET_SHIFT 8
431 #define OMAP3430_VC_CMD_OFF_SHIFT 0
432 +#define OMAP3430_SREN_MASK (1 << 4)
433 #define OMAP3430_HSEN_MASK (1 << 3)
434 #define OMAP3430_MCODE_MASK (0x7 << 0)
435 #define OMAP3430_VALID_MASK (1 << 24)
436 diff --git a/arch/arm/mach-omap2/prm-regbits-44xx.h b/arch/arm/mach-omap2/prm-regbits-44xx.h
437 index b1c7a33e00e7..e794828dee55 100644
438 --- a/arch/arm/mach-omap2/prm-regbits-44xx.h
439 +++ b/arch/arm/mach-omap2/prm-regbits-44xx.h
440 @@ -35,6 +35,7 @@
441 #define OMAP4430_GLOBAL_WARM_SW_RST_SHIFT 1
442 #define OMAP4430_GLOBAL_WUEN_MASK (1 << 16)
443 #define OMAP4430_HSMCODE_MASK (0x7 << 0)
444 +#define OMAP4430_SRMODEEN_MASK (1 << 4)
445 #define OMAP4430_HSMODEEN_MASK (1 << 3)
446 #define OMAP4430_HSSCLL_SHIFT 24
447 #define OMAP4430_ICEPICK_RST_SHIFT 9
448 diff --git a/arch/arm/mach-omap2/sleep34xx.S b/arch/arm/mach-omap2/sleep34xx.S
449 index d1dedc8195ed..eafd120b53f1 100644
450 --- a/arch/arm/mach-omap2/sleep34xx.S
451 +++ b/arch/arm/mach-omap2/sleep34xx.S
452 @@ -203,23 +203,8 @@ save_context_wfi:
453 */
454 ldr r1, kernel_flush
455 blx r1
456 - /*
457 - * The kernel doesn't interwork: v7_flush_dcache_all in particluar will
458 - * always return in Thumb state when CONFIG_THUMB2_KERNEL is enabled.
459 - * This sequence switches back to ARM. Note that .align may insert a
460 - * nop: bx pc needs to be word-aligned in order to work.
461 - */
462 - THUMB( .thumb )
463 - THUMB( .align )
464 - THUMB( bx pc )
465 - THUMB( nop )
466 - .arm
467 -
468 b omap3_do_wfi
469 -
470 -/*
471 - * Local variables
472 - */
473 +ENDPROC(omap34xx_cpu_suspend)
474 omap3_do_wfi_sram_addr:
475 .word omap3_do_wfi_sram
476 kernel_flush:
477 @@ -364,10 +349,7 @@ exit_nonoff_modes:
478 * ===================================
479 */
480 ldmfd sp!, {r4 - r11, pc} @ restore regs and return
481 -
482 -/*
483 - * Local variables
484 - */
485 +ENDPROC(omap3_do_wfi)
486 sdrc_power:
487 .word SDRC_POWER_V
488 cm_idlest1_core:
489 diff --git a/arch/arm/mach-omap2/vc.c b/arch/arm/mach-omap2/vc.c
490 index be9ef834fa81..076fd20d7e5a 100644
491 --- a/arch/arm/mach-omap2/vc.c
492 +++ b/arch/arm/mach-omap2/vc.c
493 @@ -316,7 +316,8 @@ static void __init omap3_vc_init_pmic_signaling(struct voltagedomain *voltdm)
494 * idle. And we can also scale voltages to zero for off-idle.
495 * Note that no actual voltage scaling during off-idle will
496 * happen unless the board specific twl4030 PMIC scripts are
497 - * loaded.
498 + * loaded. See also omap_vc_i2c_init for comments regarding
499 + * erratum i531.
500 */
501 val = voltdm->read(OMAP3_PRM_VOLTCTRL_OFFSET);
502 if (!(val & OMAP3430_PRM_VOLTCTRL_SEL_OFF)) {
503 @@ -704,9 +705,16 @@ static void __init omap_vc_i2c_init(struct voltagedomain *voltdm)
504 return;
505 }
506
507 + /*
508 + * Note that for omap3 OMAP3430_SREN_MASK clears SREN to work around
509 + * erratum i531 "Extra Power Consumed When Repeated Start Operation
510 + * Mode Is Enabled on I2C Interface Dedicated for Smart Reflex (I2C4)".
511 + * Otherwise I2C4 eventually leads into about 23mW extra power being
512 + * consumed even during off idle using VMODE.
513 + */
514 i2c_high_speed = voltdm->pmic->i2c_high_speed;
515 if (i2c_high_speed)
516 - voltdm->rmw(vc->common->i2c_cfg_hsen_mask,
517 + voltdm->rmw(vc->common->i2c_cfg_clear_mask,
518 vc->common->i2c_cfg_hsen_mask,
519 vc->common->i2c_cfg_reg);
520
521 diff --git a/arch/arm/mach-omap2/vc.h b/arch/arm/mach-omap2/vc.h
522 index cdbdd78e755e..89b83b7ff3ec 100644
523 --- a/arch/arm/mach-omap2/vc.h
524 +++ b/arch/arm/mach-omap2/vc.h
525 @@ -34,6 +34,7 @@ struct voltagedomain;
526 * @cmd_ret_shift: RET field shift in PRM_VC_CMD_VAL_* register
527 * @cmd_off_shift: OFF field shift in PRM_VC_CMD_VAL_* register
528 * @i2c_cfg_reg: I2C configuration register offset
529 + * @i2c_cfg_clear_mask: high-speed mode bit clear mask in I2C config register
530 * @i2c_cfg_hsen_mask: high-speed mode bit field mask in I2C config register
531 * @i2c_mcode_mask: MCODE field mask for I2C config register
532 *
533 @@ -52,6 +53,7 @@ struct omap_vc_common {
534 u8 cmd_ret_shift;
535 u8 cmd_off_shift;
536 u8 i2c_cfg_reg;
537 + u8 i2c_cfg_clear_mask;
538 u8 i2c_cfg_hsen_mask;
539 u8 i2c_mcode_mask;
540 };
541 diff --git a/arch/arm/mach-omap2/vc3xxx_data.c b/arch/arm/mach-omap2/vc3xxx_data.c
542 index 75bc4aa22b3a..71d74c9172c1 100644
543 --- a/arch/arm/mach-omap2/vc3xxx_data.c
544 +++ b/arch/arm/mach-omap2/vc3xxx_data.c
545 @@ -40,6 +40,7 @@ static struct omap_vc_common omap3_vc_common = {
546 .cmd_onlp_shift = OMAP3430_VC_CMD_ONLP_SHIFT,
547 .cmd_ret_shift = OMAP3430_VC_CMD_RET_SHIFT,
548 .cmd_off_shift = OMAP3430_VC_CMD_OFF_SHIFT,
549 + .i2c_cfg_clear_mask = OMAP3430_SREN_MASK | OMAP3430_HSEN_MASK,
550 .i2c_cfg_hsen_mask = OMAP3430_HSEN_MASK,
551 .i2c_cfg_reg = OMAP3_PRM_VC_I2C_CFG_OFFSET,
552 .i2c_mcode_mask = OMAP3430_MCODE_MASK,
553 diff --git a/arch/arm/mach-omap2/vc44xx_data.c b/arch/arm/mach-omap2/vc44xx_data.c
554 index 085e5d6a04fd..2abd5fa8a697 100644
555 --- a/arch/arm/mach-omap2/vc44xx_data.c
556 +++ b/arch/arm/mach-omap2/vc44xx_data.c
557 @@ -42,6 +42,7 @@ static const struct omap_vc_common omap4_vc_common = {
558 .cmd_ret_shift = OMAP4430_RET_SHIFT,
559 .cmd_off_shift = OMAP4430_OFF_SHIFT,
560 .i2c_cfg_reg = OMAP4_PRM_VC_CFG_I2C_MODE_OFFSET,
561 + .i2c_cfg_clear_mask = OMAP4430_SRMODEEN_MASK | OMAP4430_HSMODEEN_MASK,
562 .i2c_cfg_hsen_mask = OMAP4430_HSMODEEN_MASK,
563 .i2c_mcode_mask = OMAP4430_HSMCODE_MASK,
564 };
565 diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
566 index 9f98cec7fe1e..fb9d305c874b 100644
567 --- a/arch/arm/mm/mmu.c
568 +++ b/arch/arm/mm/mmu.c
569 @@ -1118,22 +1118,22 @@ void __init sanity_check_meminfo(void)
570 }
571
572 /*
573 - * Find the first non-section-aligned page, and point
574 + * Find the first non-pmd-aligned page, and point
575 * memblock_limit at it. This relies on rounding the
576 - * limit down to be section-aligned, which happens at
577 - * the end of this function.
578 + * limit down to be pmd-aligned, which happens at the
579 + * end of this function.
580 *
581 * With this algorithm, the start or end of almost any
582 - * bank can be non-section-aligned. The only exception
583 - * is that the start of the bank 0 must be section-
584 + * bank can be non-pmd-aligned. The only exception is
585 + * that the start of the bank 0 must be section-
586 * aligned, since otherwise memory would need to be
587 * allocated when mapping the start of bank 0, which
588 * occurs before any free memory is mapped.
589 */
590 if (!memblock_limit) {
591 - if (!IS_ALIGNED(block_start, SECTION_SIZE))
592 + if (!IS_ALIGNED(block_start, PMD_SIZE))
593 memblock_limit = block_start;
594 - else if (!IS_ALIGNED(block_end, SECTION_SIZE))
595 + else if (!IS_ALIGNED(block_end, PMD_SIZE))
596 memblock_limit = arm_lowmem_limit;
597 }
598
599 @@ -1143,12 +1143,12 @@ void __init sanity_check_meminfo(void)
600 high_memory = __va(arm_lowmem_limit - 1) + 1;
601
602 /*
603 - * Round the memblock limit down to a section size. This
604 + * Round the memblock limit down to a pmd size. This
605 * helps to ensure that we will allocate memory from the
606 - * last full section, which should be mapped.
607 + * last full pmd, which should be mapped.
608 */
609 if (memblock_limit)
610 - memblock_limit = round_down(memblock_limit, SECTION_SIZE);
611 + memblock_limit = round_down(memblock_limit, PMD_SIZE);
612 if (!memblock_limit)
613 memblock_limit = arm_lowmem_limit;
614
615 diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c
616 index e1268f905026..f412b53ed268 100644
617 --- a/arch/arm/net/bpf_jit_32.c
618 +++ b/arch/arm/net/bpf_jit_32.c
619 @@ -449,10 +449,21 @@ static inline void emit_udiv(u8 rd, u8 rm, u8 rn, struct jit_ctx *ctx)
620 return;
621 }
622 #endif
623 - if (rm != ARM_R0)
624 - emit(ARM_MOV_R(ARM_R0, rm), ctx);
625 +
626 + /*
627 + * For BPF_ALU | BPF_DIV | BPF_K instructions, rm is ARM_R4
628 + * (r_A) and rn is ARM_R0 (r_scratch) so load rn first into
629 + * ARM_R1 to avoid accidentally overwriting ARM_R0 with rm
630 + * before using it as a source for ARM_R1.
631 + *
632 + * For BPF_ALU | BPF_DIV | BPF_X rm is ARM_R4 (r_A) and rn is
633 + * ARM_R5 (r_X) so there is no particular register overlap
634 + * issues.
635 + */
636 if (rn != ARM_R1)
637 emit(ARM_MOV_R(ARM_R1, rn), ctx);
638 + if (rm != ARM_R0)
639 + emit(ARM_MOV_R(ARM_R0, rm), ctx);
640
641 ctx->seen |= SEEN_CALL;
642 emit_mov_i(ARM_R3, (u32)jit_udiv, ctx);
643 diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c
644 index edba042b2325..dc6a4842683a 100644
645 --- a/arch/arm64/net/bpf_jit_comp.c
646 +++ b/arch/arm64/net/bpf_jit_comp.c
647 @@ -487,7 +487,7 @@ emit_cond_jmp:
648 return -EINVAL;
649 }
650
651 - imm64 = (u64)insn1.imm << 32 | imm;
652 + imm64 = (u64)insn1.imm << 32 | (u32)imm;
653 emit_a64_mov_i64(dst, imm64, ctx);
654
655 return 1;
656 diff --git a/arch/parisc/include/asm/elf.h b/arch/parisc/include/asm/elf.h
657 index 3391d061eccc..78c9fd32c554 100644
658 --- a/arch/parisc/include/asm/elf.h
659 +++ b/arch/parisc/include/asm/elf.h
660 @@ -348,6 +348,10 @@ struct pt_regs; /* forward declaration... */
661
662 #define ELF_HWCAP 0
663
664 +#define STACK_RND_MASK (is_32bit_task() ? \
665 + 0x7ff >> (PAGE_SHIFT - 12) : \
666 + 0x3ffff >> (PAGE_SHIFT - 12))
667 +
668 struct mm_struct;
669 extern unsigned long arch_randomize_brk(struct mm_struct *);
670 #define arch_randomize_brk arch_randomize_brk
671 diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c
672 index e1ffea2f9a0b..5aba01ac457f 100644
673 --- a/arch/parisc/kernel/sys_parisc.c
674 +++ b/arch/parisc/kernel/sys_parisc.c
675 @@ -77,6 +77,9 @@ static unsigned long mmap_upper_limit(void)
676 if (stack_base > STACK_SIZE_MAX)
677 stack_base = STACK_SIZE_MAX;
678
679 + /* Add space for stack randomization. */
680 + stack_base += (STACK_RND_MASK << PAGE_SHIFT);
681 +
682 return PAGE_ALIGN(STACK_TOP - stack_base);
683 }
684
685 diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
686 index f096e72262f4..1db685104ffc 100644
687 --- a/arch/powerpc/kernel/vmlinux.lds.S
688 +++ b/arch/powerpc/kernel/vmlinux.lds.S
689 @@ -213,6 +213,7 @@ SECTIONS
690 *(.opd)
691 }
692
693 + . = ALIGN(256);
694 .got : AT(ADDR(.got) - LOAD_OFFSET) {
695 __toc_start = .;
696 #ifndef CONFIG_RELOCATABLE
697 diff --git a/arch/s390/crypto/ghash_s390.c b/arch/s390/crypto/ghash_s390.c
698 index 7940dc90e80b..b258110da952 100644
699 --- a/arch/s390/crypto/ghash_s390.c
700 +++ b/arch/s390/crypto/ghash_s390.c
701 @@ -16,11 +16,12 @@
702 #define GHASH_DIGEST_SIZE 16
703
704 struct ghash_ctx {
705 - u8 icv[16];
706 - u8 key[16];
707 + u8 key[GHASH_BLOCK_SIZE];
708 };
709
710 struct ghash_desc_ctx {
711 + u8 icv[GHASH_BLOCK_SIZE];
712 + u8 key[GHASH_BLOCK_SIZE];
713 u8 buffer[GHASH_BLOCK_SIZE];
714 u32 bytes;
715 };
716 @@ -28,8 +29,10 @@ struct ghash_desc_ctx {
717 static int ghash_init(struct shash_desc *desc)
718 {
719 struct ghash_desc_ctx *dctx = shash_desc_ctx(desc);
720 + struct ghash_ctx *ctx = crypto_shash_ctx(desc->tfm);
721
722 memset(dctx, 0, sizeof(*dctx));
723 + memcpy(dctx->key, ctx->key, GHASH_BLOCK_SIZE);
724
725 return 0;
726 }
727 @@ -45,7 +48,6 @@ static int ghash_setkey(struct crypto_shash *tfm,
728 }
729
730 memcpy(ctx->key, key, GHASH_BLOCK_SIZE);
731 - memset(ctx->icv, 0, GHASH_BLOCK_SIZE);
732
733 return 0;
734 }
735 @@ -54,7 +56,6 @@ static int ghash_update(struct shash_desc *desc,
736 const u8 *src, unsigned int srclen)
737 {
738 struct ghash_desc_ctx *dctx = shash_desc_ctx(desc);
739 - struct ghash_ctx *ctx = crypto_shash_ctx(desc->tfm);
740 unsigned int n;
741 u8 *buf = dctx->buffer;
742 int ret;
743 @@ -70,7 +71,7 @@ static int ghash_update(struct shash_desc *desc,
744 src += n;
745
746 if (!dctx->bytes) {
747 - ret = crypt_s390_kimd(KIMD_GHASH, ctx, buf,
748 + ret = crypt_s390_kimd(KIMD_GHASH, dctx, buf,
749 GHASH_BLOCK_SIZE);
750 if (ret != GHASH_BLOCK_SIZE)
751 return -EIO;
752 @@ -79,7 +80,7 @@ static int ghash_update(struct shash_desc *desc,
753
754 n = srclen & ~(GHASH_BLOCK_SIZE - 1);
755 if (n) {
756 - ret = crypt_s390_kimd(KIMD_GHASH, ctx, src, n);
757 + ret = crypt_s390_kimd(KIMD_GHASH, dctx, src, n);
758 if (ret != n)
759 return -EIO;
760 src += n;
761 @@ -94,7 +95,7 @@ static int ghash_update(struct shash_desc *desc,
762 return 0;
763 }
764
765 -static int ghash_flush(struct ghash_ctx *ctx, struct ghash_desc_ctx *dctx)
766 +static int ghash_flush(struct ghash_desc_ctx *dctx)
767 {
768 u8 *buf = dctx->buffer;
769 int ret;
770 @@ -104,24 +105,24 @@ static int ghash_flush(struct ghash_ctx *ctx, struct ghash_desc_ctx *dctx)
771
772 memset(pos, 0, dctx->bytes);
773
774 - ret = crypt_s390_kimd(KIMD_GHASH, ctx, buf, GHASH_BLOCK_SIZE);
775 + ret = crypt_s390_kimd(KIMD_GHASH, dctx, buf, GHASH_BLOCK_SIZE);
776 if (ret != GHASH_BLOCK_SIZE)
777 return -EIO;
778 +
779 + dctx->bytes = 0;
780 }
781
782 - dctx->bytes = 0;
783 return 0;
784 }
785
786 static int ghash_final(struct shash_desc *desc, u8 *dst)
787 {
788 struct ghash_desc_ctx *dctx = shash_desc_ctx(desc);
789 - struct ghash_ctx *ctx = crypto_shash_ctx(desc->tfm);
790 int ret;
791
792 - ret = ghash_flush(ctx, dctx);
793 + ret = ghash_flush(dctx);
794 if (!ret)
795 - memcpy(dst, ctx->icv, GHASH_BLOCK_SIZE);
796 + memcpy(dst, dctx->icv, GHASH_BLOCK_SIZE);
797 return ret;
798 }
799
800 diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
801 index 57c882761dea..b0373b44b320 100644
802 --- a/arch/s390/include/asm/pgtable.h
803 +++ b/arch/s390/include/asm/pgtable.h
804 @@ -582,7 +582,7 @@ static inline int pmd_large(pmd_t pmd)
805 return (pmd_val(pmd) & _SEGMENT_ENTRY_LARGE) != 0;
806 }
807
808 -static inline int pmd_pfn(pmd_t pmd)
809 +static inline unsigned long pmd_pfn(pmd_t pmd)
810 {
811 unsigned long origin_mask;
812
813 diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
814 index 6ed0c30d6a0c..6c0709ff2f38 100644
815 --- a/arch/x86/include/asm/kvm_host.h
816 +++ b/arch/x86/include/asm/kvm_host.h
817 @@ -201,6 +201,7 @@ union kvm_mmu_page_role {
818 unsigned nxe:1;
819 unsigned cr0_wp:1;
820 unsigned smep_andnot_wp:1;
821 + unsigned smap_andnot_wp:1;
822 };
823 };
824
825 @@ -392,6 +393,7 @@ struct kvm_vcpu_arch {
826 struct kvm_mmu_memory_cache mmu_page_header_cache;
827
828 struct fpu guest_fpu;
829 + bool eager_fpu;
830 u64 xcr0;
831 u64 guest_supported_xcr0;
832 u32 guest_xstate_size;
833 @@ -707,6 +709,7 @@ struct kvm_x86_ops {
834 void (*cache_reg)(struct kvm_vcpu *vcpu, enum kvm_reg reg);
835 unsigned long (*get_rflags)(struct kvm_vcpu *vcpu);
836 void (*set_rflags)(struct kvm_vcpu *vcpu, unsigned long rflags);
837 + void (*fpu_activate)(struct kvm_vcpu *vcpu);
838 void (*fpu_deactivate)(struct kvm_vcpu *vcpu);
839
840 void (*tlb_flush)(struct kvm_vcpu *vcpu);
841 diff --git a/arch/x86/include/asm/mce.h b/arch/x86/include/asm/mce.h
842 index 958b90f761e5..40b35a55ce8b 100644
843 --- a/arch/x86/include/asm/mce.h
844 +++ b/arch/x86/include/asm/mce.h
845 @@ -34,6 +34,10 @@
846 #define MCI_STATUS_S (1ULL<<56) /* Signaled machine check */
847 #define MCI_STATUS_AR (1ULL<<55) /* Action required */
848
849 +/* AMD-specific bits */
850 +#define MCI_STATUS_DEFERRED (1ULL<<44) /* declare an uncorrected error */
851 +#define MCI_STATUS_POISON (1ULL<<43) /* access poisonous data */
852 +
853 /*
854 * Note that the full MCACOD field of IA32_MCi_STATUS MSR is
855 * bits 15:0. But bit 12 is the 'F' bit, defined for corrected
856 diff --git a/arch/x86/kernel/cpu/mcheck/mce-internal.h b/arch/x86/kernel/cpu/mcheck/mce-internal.h
857 index 09edd0b65fef..10b46906767f 100644
858 --- a/arch/x86/kernel/cpu/mcheck/mce-internal.h
859 +++ b/arch/x86/kernel/cpu/mcheck/mce-internal.h
860 @@ -3,6 +3,8 @@
861
862 enum severity_level {
863 MCE_NO_SEVERITY,
864 + MCE_DEFERRED_SEVERITY,
865 + MCE_UCNA_SEVERITY = MCE_DEFERRED_SEVERITY,
866 MCE_KEEP_SEVERITY,
867 MCE_SOME_SEVERITY,
868 MCE_AO_SEVERITY,
869 @@ -21,7 +23,7 @@ struct mce_bank {
870 char attrname[ATTR_LEN]; /* attribute name */
871 };
872
873 -int mce_severity(struct mce *a, int tolerant, char **msg);
874 +int mce_severity(struct mce *a, int tolerant, char **msg, bool is_excp);
875 struct dentry *mce_get_debugfs_dir(void);
876
877 extern struct mce_bank *mce_banks;
878 diff --git a/arch/x86/kernel/cpu/mcheck/mce-severity.c b/arch/x86/kernel/cpu/mcheck/mce-severity.c
879 index c370e1c4468b..8bb433043a7f 100644
880 --- a/arch/x86/kernel/cpu/mcheck/mce-severity.c
881 +++ b/arch/x86/kernel/cpu/mcheck/mce-severity.c
882 @@ -31,6 +31,7 @@
883
884 enum context { IN_KERNEL = 1, IN_USER = 2 };
885 enum ser { SER_REQUIRED = 1, NO_SER = 2 };
886 +enum exception { EXCP_CONTEXT = 1, NO_EXCP = 2 };
887
888 static struct severity {
889 u64 mask;
890 @@ -40,6 +41,7 @@ static struct severity {
891 unsigned char mcgres;
892 unsigned char ser;
893 unsigned char context;
894 + unsigned char excp;
895 unsigned char covered;
896 char *msg;
897 } severities[] = {
898 @@ -48,6 +50,8 @@ static struct severity {
899 #define USER .context = IN_USER
900 #define SER .ser = SER_REQUIRED
901 #define NOSER .ser = NO_SER
902 +#define EXCP .excp = EXCP_CONTEXT
903 +#define NOEXCP .excp = NO_EXCP
904 #define BITCLR(x) .mask = x, .result = 0
905 #define BITSET(x) .mask = x, .result = x
906 #define MCGMASK(x, y) .mcgmask = x, .mcgres = y
907 @@ -62,7 +66,7 @@ static struct severity {
908 ),
909 MCESEV(
910 NO, "Not enabled",
911 - BITCLR(MCI_STATUS_EN)
912 + EXCP, BITCLR(MCI_STATUS_EN)
913 ),
914 MCESEV(
915 PANIC, "Processor context corrupt",
916 @@ -71,16 +75,20 @@ static struct severity {
917 /* When MCIP is not set something is very confused */
918 MCESEV(
919 PANIC, "MCIP not set in MCA handler",
920 - MCGMASK(MCG_STATUS_MCIP, 0)
921 + EXCP, MCGMASK(MCG_STATUS_MCIP, 0)
922 ),
923 /* Neither return not error IP -- no chance to recover -> PANIC */
924 MCESEV(
925 PANIC, "Neither restart nor error IP",
926 - MCGMASK(MCG_STATUS_RIPV|MCG_STATUS_EIPV, 0)
927 + EXCP, MCGMASK(MCG_STATUS_RIPV|MCG_STATUS_EIPV, 0)
928 ),
929 MCESEV(
930 PANIC, "In kernel and no restart IP",
931 - KERNEL, MCGMASK(MCG_STATUS_RIPV, 0)
932 + EXCP, KERNEL, MCGMASK(MCG_STATUS_RIPV, 0)
933 + ),
934 + MCESEV(
935 + DEFERRED, "Deferred error",
936 + NOSER, MASK(MCI_STATUS_UC|MCI_STATUS_DEFERRED|MCI_STATUS_POISON, MCI_STATUS_DEFERRED)
937 ),
938 MCESEV(
939 KEEP, "Corrected error",
940 @@ -89,7 +97,7 @@ static struct severity {
941
942 /* ignore OVER for UCNA */
943 MCESEV(
944 - KEEP, "Uncorrected no action required",
945 + UCNA, "Uncorrected no action required",
946 SER, MASK(MCI_UC_SAR, MCI_STATUS_UC)
947 ),
948 MCESEV(
949 @@ -178,8 +186,9 @@ static int error_context(struct mce *m)
950 return ((m->cs & 3) == 3) ? IN_USER : IN_KERNEL;
951 }
952
953 -int mce_severity(struct mce *m, int tolerant, char **msg)
954 +int mce_severity(struct mce *m, int tolerant, char **msg, bool is_excp)
955 {
956 + enum exception excp = (is_excp ? EXCP_CONTEXT : NO_EXCP);
957 enum context ctx = error_context(m);
958 struct severity *s;
959
960 @@ -194,6 +203,8 @@ int mce_severity(struct mce *m, int tolerant, char **msg)
961 continue;
962 if (s->context && ctx != s->context)
963 continue;
964 + if (s->excp && excp != s->excp)
965 + continue;
966 if (msg)
967 *msg = s->msg;
968 s->covered = 1;
969 diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
970 index 61a9668cebfd..b5c2276317e2 100644
971 --- a/arch/x86/kernel/cpu/mcheck/mce.c
972 +++ b/arch/x86/kernel/cpu/mcheck/mce.c
973 @@ -660,6 +660,7 @@ static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp,
974 struct pt_regs *regs)
975 {
976 int i, ret = 0;
977 + char *tmp;
978
979 for (i = 0; i < mca_cfg.banks; i++) {
980 m->status = mce_rdmsrl(MSR_IA32_MCx_STATUS(i));
981 @@ -668,8 +669,11 @@ static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp,
982 if (quirk_no_way_out)
983 quirk_no_way_out(i, m, regs);
984 }
985 - if (mce_severity(m, mca_cfg.tolerant, msg) >= MCE_PANIC_SEVERITY)
986 +
987 + if (mce_severity(m, mca_cfg.tolerant, &tmp, true) >= MCE_PANIC_SEVERITY) {
988 + *msg = tmp;
989 ret = 1;
990 + }
991 }
992 return ret;
993 }
994 @@ -754,7 +758,7 @@ static void mce_reign(void)
995 for_each_possible_cpu(cpu) {
996 int severity = mce_severity(&per_cpu(mces_seen, cpu),
997 mca_cfg.tolerant,
998 - &nmsg);
999 + &nmsg, true);
1000 if (severity > global_worst) {
1001 msg = nmsg;
1002 global_worst = severity;
1003 @@ -1095,13 +1099,14 @@ void do_machine_check(struct pt_regs *regs, long error_code)
1004 */
1005 add_taint(TAINT_MACHINE_CHECK, LOCKDEP_NOW_UNRELIABLE);
1006
1007 - severity = mce_severity(&m, cfg->tolerant, NULL);
1008 + severity = mce_severity(&m, cfg->tolerant, NULL, true);
1009
1010 /*
1011 - * When machine check was for corrected handler don't touch,
1012 - * unless we're panicing.
1013 + * When machine check was for corrected/deferred handler don't
1014 + * touch, unless we're panicing.
1015 */
1016 - if (severity == MCE_KEEP_SEVERITY && !no_way_out)
1017 + if ((severity == MCE_KEEP_SEVERITY ||
1018 + severity == MCE_UCNA_SEVERITY) && !no_way_out)
1019 continue;
1020 __set_bit(i, toclear);
1021 if (severity == MCE_NO_SEVERITY) {
1022 diff --git a/arch/x86/kernel/cpu/perf_event_intel_rapl.c b/arch/x86/kernel/cpu/perf_event_intel_rapl.c
1023 index 8c256749882c..611d821eac1a 100644
1024 --- a/arch/x86/kernel/cpu/perf_event_intel_rapl.c
1025 +++ b/arch/x86/kernel/cpu/perf_event_intel_rapl.c
1026 @@ -664,6 +664,7 @@ static int __init rapl_pmu_init(void)
1027 break;
1028 case 60: /* Haswell */
1029 case 69: /* Haswell-Celeron */
1030 + case 61: /* Broadwell */
1031 rapl_cntr_mask = RAPL_IDX_HSW;
1032 rapl_pmu_events_group.attrs = rapl_events_hsw_attr;
1033 break;
1034 diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c
1035 index a9a4229f6161..ae0fdc86b7b6 100644
1036 --- a/arch/x86/kernel/i387.c
1037 +++ b/arch/x86/kernel/i387.c
1038 @@ -155,6 +155,21 @@ static void init_thread_xstate(void)
1039 xstate_size = sizeof(struct i387_fxsave_struct);
1040 else
1041 xstate_size = sizeof(struct i387_fsave_struct);
1042 +
1043 + /*
1044 + * Quirk: we don't yet handle the XSAVES* instructions
1045 + * correctly, as we don't correctly convert between
1046 + * standard and compacted format when interfacing
1047 + * with user-space - so disable it for now.
1048 + *
1049 + * The difference is small: with recent CPUs the
1050 + * compacted format is only marginally smaller than
1051 + * the standard FPU state format.
1052 + *
1053 + * ( This is easy to backport while we are fixing
1054 + * XSAVES* support. )
1055 + */
1056 + setup_clear_cpu_cap(X86_FEATURE_XSAVES);
1057 }
1058
1059 /*
1060 diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
1061 index 88f92014ba6b..81c6d541d98a 100644
1062 --- a/arch/x86/kvm/cpuid.c
1063 +++ b/arch/x86/kvm/cpuid.c
1064 @@ -16,6 +16,8 @@
1065 #include <linux/module.h>
1066 #include <linux/vmalloc.h>
1067 #include <linux/uaccess.h>
1068 +#include <asm/i387.h> /* For use_eager_fpu. Ugh! */
1069 +#include <asm/fpu-internal.h> /* For use_eager_fpu. Ugh! */
1070 #include <asm/user.h>
1071 #include <asm/xsave.h>
1072 #include "cpuid.h"
1073 @@ -88,6 +90,8 @@ int kvm_update_cpuid(struct kvm_vcpu *vcpu)
1074 xstate_required_size(vcpu->arch.xcr0);
1075 }
1076
1077 + vcpu->arch.eager_fpu = guest_cpuid_has_mpx(vcpu);
1078 +
1079 /*
1080 * The existing code assumes virtual address is 48-bit in the canonical
1081 * address checks; exit if it is ever changed.
1082 diff --git a/arch/x86/kvm/cpuid.h b/arch/x86/kvm/cpuid.h
1083 index 4452eedfaedd..9bec2b8cdced 100644
1084 --- a/arch/x86/kvm/cpuid.h
1085 +++ b/arch/x86/kvm/cpuid.h
1086 @@ -111,4 +111,12 @@ static inline bool guest_cpuid_has_rtm(struct kvm_vcpu *vcpu)
1087 best = kvm_find_cpuid_entry(vcpu, 7, 0);
1088 return best && (best->ebx & bit(X86_FEATURE_RTM));
1089 }
1090 +
1091 +static inline bool guest_cpuid_has_mpx(struct kvm_vcpu *vcpu)
1092 +{
1093 + struct kvm_cpuid_entry2 *best;
1094 +
1095 + best = kvm_find_cpuid_entry(vcpu, 7, 0);
1096 + return best && (best->ebx & bit(X86_FEATURE_MPX));
1097 +}
1098 #endif
1099 diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
1100 index 9c12e63c653f..8bd81f5a7e07 100644
1101 --- a/arch/x86/kvm/mmu.c
1102 +++ b/arch/x86/kvm/mmu.c
1103 @@ -3625,8 +3625,8 @@ static void reset_rsvds_bits_mask_ept(struct kvm_vcpu *vcpu,
1104 }
1105 }
1106
1107 -void update_permission_bitmask(struct kvm_vcpu *vcpu,
1108 - struct kvm_mmu *mmu, bool ept)
1109 +static void update_permission_bitmask(struct kvm_vcpu *vcpu,
1110 + struct kvm_mmu *mmu, bool ept)
1111 {
1112 unsigned bit, byte, pfec;
1113 u8 map;
1114 @@ -3807,6 +3807,7 @@ static void init_kvm_tdp_mmu(struct kvm_vcpu *vcpu)
1115 void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context)
1116 {
1117 bool smep = kvm_read_cr4_bits(vcpu, X86_CR4_SMEP);
1118 + bool smap = kvm_read_cr4_bits(vcpu, X86_CR4_SMAP);
1119 ASSERT(vcpu);
1120 ASSERT(!VALID_PAGE(vcpu->arch.mmu.root_hpa));
1121
1122 @@ -3824,6 +3825,8 @@ void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context)
1123 vcpu->arch.mmu.base_role.cr0_wp = is_write_protection(vcpu);
1124 vcpu->arch.mmu.base_role.smep_andnot_wp
1125 = smep && !is_write_protection(vcpu);
1126 + context->base_role.smap_andnot_wp
1127 + = smap && !is_write_protection(vcpu);
1128 }
1129 EXPORT_SYMBOL_GPL(kvm_init_shadow_mmu);
1130
1131 @@ -4095,12 +4098,18 @@ void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,
1132 const u8 *new, int bytes)
1133 {
1134 gfn_t gfn = gpa >> PAGE_SHIFT;
1135 - union kvm_mmu_page_role mask = { .word = 0 };
1136 struct kvm_mmu_page *sp;
1137 LIST_HEAD(invalid_list);
1138 u64 entry, gentry, *spte;
1139 int npte;
1140 bool remote_flush, local_flush, zap_page;
1141 + union kvm_mmu_page_role mask = (union kvm_mmu_page_role) {
1142 + .cr0_wp = 1,
1143 + .cr4_pae = 1,
1144 + .nxe = 1,
1145 + .smep_andnot_wp = 1,
1146 + .smap_andnot_wp = 1,
1147 + };
1148
1149 /*
1150 * If we don't have indirect shadow pages, it means no page is
1151 @@ -4126,7 +4135,6 @@ void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,
1152 ++vcpu->kvm->stat.mmu_pte_write;
1153 kvm_mmu_audit(vcpu, AUDIT_PRE_PTE_WRITE);
1154
1155 - mask.cr0_wp = mask.cr4_pae = mask.nxe = 1;
1156 for_each_gfn_indirect_valid_sp(vcpu->kvm, sp, gfn) {
1157 if (detect_write_misaligned(sp, gpa, bytes) ||
1158 detect_write_flooding(sp)) {
1159 diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h
1160 index bde8ee725754..a6b876443302 100644
1161 --- a/arch/x86/kvm/mmu.h
1162 +++ b/arch/x86/kvm/mmu.h
1163 @@ -84,8 +84,6 @@ int handle_mmio_page_fault_common(struct kvm_vcpu *vcpu, u64 addr, bool direct);
1164 void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context);
1165 void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context,
1166 bool execonly);
1167 -void update_permission_bitmask(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
1168 - bool ept);
1169
1170 static inline unsigned int kvm_mmu_available_pages(struct kvm *kvm)
1171 {
1172 @@ -179,6 +177,8 @@ static inline bool permission_fault(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
1173 int index = (pfec >> 1) +
1174 (smap >> (X86_EFLAGS_AC_BIT - PFERR_RSVD_BIT + 1));
1175
1176 + WARN_ON(pfec & PFERR_RSVD_MASK);
1177 +
1178 return (mmu->permissions[index] >> pte_access) & 1;
1179 }
1180
1181 diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
1182 index fd49c867b25a..6e6d115fe9b5 100644
1183 --- a/arch/x86/kvm/paging_tmpl.h
1184 +++ b/arch/x86/kvm/paging_tmpl.h
1185 @@ -718,6 +718,13 @@ static int FNAME(page_fault)(struct kvm_vcpu *vcpu, gva_t addr, u32 error_code,
1186 mmu_is_nested(vcpu));
1187 if (likely(r != RET_MMIO_PF_INVALID))
1188 return r;
1189 +
1190 + /*
1191 + * page fault with PFEC.RSVD = 1 is caused by shadow
1192 + * page fault, should not be used to walk guest page
1193 + * table.
1194 + */
1195 + error_code &= ~PFERR_RSVD_MASK;
1196 };
1197
1198 r = mmu_topup_memory_caches(vcpu);
1199 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
1200 index 7527cefc5a43..f7eaee1cbc54 100644
1201 --- a/arch/x86/kvm/svm.c
1202 +++ b/arch/x86/kvm/svm.c
1203 @@ -4370,6 +4370,7 @@ static struct kvm_x86_ops svm_x86_ops = {
1204 .cache_reg = svm_cache_reg,
1205 .get_rflags = svm_get_rflags,
1206 .set_rflags = svm_set_rflags,
1207 + .fpu_activate = svm_fpu_activate,
1208 .fpu_deactivate = svm_fpu_deactivate,
1209
1210 .tlb_flush = svm_flush_tlb,
1211 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
1212 index 47843b04d60f..54bda28e6a12 100644
1213 --- a/arch/x86/kvm/vmx.c
1214 +++ b/arch/x86/kvm/vmx.c
1215 @@ -9120,6 +9120,7 @@ static struct kvm_x86_ops vmx_x86_ops = {
1216 .cache_reg = vmx_cache_reg,
1217 .get_rflags = vmx_get_rflags,
1218 .set_rflags = vmx_set_rflags,
1219 + .fpu_activate = vmx_fpu_activate,
1220 .fpu_deactivate = vmx_fpu_deactivate,
1221
1222 .tlb_flush = vmx_flush_tlb,
1223 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
1224 index 5369ec6a8094..0bb431c3f74e 100644
1225 --- a/arch/x86/kvm/x86.c
1226 +++ b/arch/x86/kvm/x86.c
1227 @@ -678,8 +678,9 @@ EXPORT_SYMBOL_GPL(kvm_set_xcr);
1228 int kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
1229 {
1230 unsigned long old_cr4 = kvm_read_cr4(vcpu);
1231 - unsigned long pdptr_bits = X86_CR4_PGE | X86_CR4_PSE |
1232 - X86_CR4_PAE | X86_CR4_SMEP;
1233 + unsigned long pdptr_bits = X86_CR4_PGE | X86_CR4_PSE | X86_CR4_PAE |
1234 + X86_CR4_SMEP | X86_CR4_SMAP;
1235 +
1236 if (cr4 & CR4_RESERVED_BITS)
1237 return 1;
1238
1239 @@ -720,9 +721,6 @@ int kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
1240 (!(cr4 & X86_CR4_PCIDE) && (old_cr4 & X86_CR4_PCIDE)))
1241 kvm_mmu_reset_context(vcpu);
1242
1243 - if ((cr4 ^ old_cr4) & X86_CR4_SMAP)
1244 - update_permission_bitmask(vcpu, vcpu->arch.walk_mmu, false);
1245 -
1246 if ((cr4 ^ old_cr4) & X86_CR4_OSXSAVE)
1247 kvm_update_cpuid(vcpu);
1248
1249 @@ -6139,6 +6137,8 @@ void kvm_vcpu_reload_apic_access_page(struct kvm_vcpu *vcpu)
1250 return;
1251
1252 page = gfn_to_page(vcpu->kvm, APIC_DEFAULT_PHYS_BASE >> PAGE_SHIFT);
1253 + if (is_error_page(page))
1254 + return;
1255 kvm_x86_ops->set_apic_access_page_addr(vcpu, page_to_phys(page));
1256
1257 /*
1258 @@ -6993,7 +6993,9 @@ void kvm_put_guest_fpu(struct kvm_vcpu *vcpu)
1259 fpu_save_init(&vcpu->arch.guest_fpu);
1260 __kernel_fpu_end();
1261 ++vcpu->stat.fpu_reload;
1262 - kvm_make_request(KVM_REQ_DEACTIVATE_FPU, vcpu);
1263 + if (!vcpu->arch.eager_fpu)
1264 + kvm_make_request(KVM_REQ_DEACTIVATE_FPU, vcpu);
1265 +
1266 trace_kvm_fpu(0);
1267 }
1268
1269 @@ -7009,11 +7011,21 @@ void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu)
1270 struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
1271 unsigned int id)
1272 {
1273 + struct kvm_vcpu *vcpu;
1274 +
1275 if (check_tsc_unstable() && atomic_read(&kvm->online_vcpus) != 0)
1276 printk_once(KERN_WARNING
1277 "kvm: SMP vm created on host with unstable TSC; "
1278 "guest TSC will not be reliable\n");
1279 - return kvm_x86_ops->vcpu_create(kvm, id);
1280 +
1281 + vcpu = kvm_x86_ops->vcpu_create(kvm, id);
1282 +
1283 + /*
1284 + * Activate fpu unconditionally in case the guest needs eager FPU. It will be
1285 + * deactivated soon if it doesn't.
1286 + */
1287 + kvm_x86_ops->fpu_activate(vcpu);
1288 + return vcpu;
1289 }
1290
1291 int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
1292 diff --git a/drivers/acpi/acpi_pnp.c b/drivers/acpi/acpi_pnp.c
1293 index b193f8425999..ff6d8adc9cda 100644
1294 --- a/drivers/acpi/acpi_pnp.c
1295 +++ b/drivers/acpi/acpi_pnp.c
1296 @@ -304,6 +304,8 @@ static const struct acpi_device_id acpi_pnp_device_ids[] = {
1297 {"PNPb006"},
1298 /* cs423x-pnpbios */
1299 {"CSC0100"},
1300 + {"CSC0103"},
1301 + {"CSC0110"},
1302 {"CSC0000"},
1303 {"GIM0100"}, /* Guillemot Turtlebeach something appears to be cs4232 compatible */
1304 /* es18xx-pnpbios */
1305 diff --git a/drivers/acpi/acpica/acmacros.h b/drivers/acpi/acpica/acmacros.h
1306 index 4bceb11c7380..624cbb3b5683 100644
1307 --- a/drivers/acpi/acpica/acmacros.h
1308 +++ b/drivers/acpi/acpica/acmacros.h
1309 @@ -63,23 +63,12 @@
1310 #define ACPI_SET64(ptr, val) (*ACPI_CAST64 (ptr) = (u64) (val))
1311
1312 /*
1313 - * printf() format helpers. These macros are workarounds for the difficulties
1314 + * printf() format helper. This macros is a workaround for the difficulties
1315 * with emitting 64-bit integers and 64-bit pointers with the same code
1316 * for both 32-bit and 64-bit hosts.
1317 */
1318 #define ACPI_FORMAT_UINT64(i) ACPI_HIDWORD(i), ACPI_LODWORD(i)
1319
1320 -#if ACPI_MACHINE_WIDTH == 64
1321 -#define ACPI_FORMAT_NATIVE_UINT(i) ACPI_FORMAT_UINT64(i)
1322 -#define ACPI_FORMAT_TO_UINT(i) ACPI_FORMAT_UINT64(i)
1323 -#define ACPI_PRINTF_UINT "0x%8.8X%8.8X"
1324 -
1325 -#else
1326 -#define ACPI_FORMAT_NATIVE_UINT(i) 0, (u32) (i)
1327 -#define ACPI_FORMAT_TO_UINT(i) (u32) (i)
1328 -#define ACPI_PRINTF_UINT "0x%8.8X"
1329 -#endif
1330 -
1331 /*
1332 * Macros for moving data around to/from buffers that are possibly unaligned.
1333 * If the hardware supports the transfer of unaligned data, just do the store.
1334 diff --git a/drivers/acpi/acpica/dsopcode.c b/drivers/acpi/acpica/dsopcode.c
1335 index 6c0759c0db47..5e7c7c301c5c 100644
1336 --- a/drivers/acpi/acpica/dsopcode.c
1337 +++ b/drivers/acpi/acpica/dsopcode.c
1338 @@ -446,7 +446,7 @@ acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state,
1339
1340 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n",
1341 obj_desc,
1342 - ACPI_FORMAT_NATIVE_UINT(obj_desc->region.address),
1343 + ACPI_FORMAT_UINT64(obj_desc->region.address),
1344 obj_desc->region.length));
1345
1346 /* Now the address and length are valid for this opregion */
1347 @@ -539,13 +539,12 @@ acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state,
1348 return_ACPI_STATUS(AE_NOT_EXIST);
1349 }
1350
1351 - obj_desc->region.address =
1352 - (acpi_physical_address) ACPI_TO_INTEGER(table);
1353 + obj_desc->region.address = ACPI_PTR_TO_PHYSADDR(table);
1354 obj_desc->region.length = table->length;
1355
1356 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n",
1357 obj_desc,
1358 - ACPI_FORMAT_NATIVE_UINT(obj_desc->region.address),
1359 + ACPI_FORMAT_UINT64(obj_desc->region.address),
1360 obj_desc->region.length));
1361
1362 /* Now the address and length are valid for this opregion */
1363 diff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c
1364 index 8eb8575e8c16..9ce53980201c 100644
1365 --- a/drivers/acpi/acpica/evregion.c
1366 +++ b/drivers/acpi/acpica/evregion.c
1367 @@ -272,7 +272,7 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
1368 ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
1369 "Handler %p (@%p) Address %8.8X%8.8X [%s]\n",
1370 &region_obj->region.handler->address_space, handler,
1371 - ACPI_FORMAT_NATIVE_UINT(address),
1372 + ACPI_FORMAT_UINT64(address),
1373 acpi_ut_get_region_name(region_obj->region.
1374 space_id)));
1375
1376 diff --git a/drivers/acpi/acpica/exdump.c b/drivers/acpi/acpica/exdump.c
1377 index 0f23c3f2678e..16b4909a8b90 100644
1378 --- a/drivers/acpi/acpica/exdump.c
1379 +++ b/drivers/acpi/acpica/exdump.c
1380 @@ -767,8 +767,8 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)
1381 acpi_os_printf("\n");
1382 } else {
1383 acpi_os_printf(" base %8.8X%8.8X Length %X\n",
1384 - ACPI_FORMAT_NATIVE_UINT(obj_desc->region.
1385 - address),
1386 + ACPI_FORMAT_UINT64(obj_desc->region.
1387 + address),
1388 obj_desc->region.length);
1389 }
1390 break;
1391 diff --git a/drivers/acpi/acpica/exfldio.c b/drivers/acpi/acpica/exfldio.c
1392 index 1d1b27a96c5b..58ea85e42bfc 100644
1393 --- a/drivers/acpi/acpica/exfldio.c
1394 +++ b/drivers/acpi/acpica/exfldio.c
1395 @@ -263,17 +263,15 @@ acpi_ex_access_region(union acpi_operand_object *obj_desc,
1396 }
1397
1398 ACPI_DEBUG_PRINT_RAW((ACPI_DB_BFIELD,
1399 - " Region [%s:%X], Width %X, ByteBase %X, Offset %X at %p\n",
1400 + " Region [%s:%X], Width %X, ByteBase %X, Offset %X at %8.8X%8.8X\n",
1401 acpi_ut_get_region_name(rgn_desc->region.
1402 space_id),
1403 rgn_desc->region.space_id,
1404 obj_desc->common_field.access_byte_width,
1405 obj_desc->common_field.base_byte_offset,
1406 - field_datum_byte_offset, ACPI_CAST_PTR(void,
1407 - (rgn_desc->
1408 - region.
1409 - address +
1410 - region_offset))));
1411 + field_datum_byte_offset,
1412 + ACPI_FORMAT_UINT64(rgn_desc->region.address +
1413 + region_offset)));
1414
1415 /* Invoke the appropriate address_space/op_region handler */
1416
1417 diff --git a/drivers/acpi/acpica/exregion.c b/drivers/acpi/acpica/exregion.c
1418 index cd5288a257a9..be51d3ed4d0f 100644
1419 --- a/drivers/acpi/acpica/exregion.c
1420 +++ b/drivers/acpi/acpica/exregion.c
1421 @@ -181,7 +181,7 @@ acpi_ex_system_memory_space_handler(u32 function,
1422 if (!mem_info->mapped_logical_address) {
1423 ACPI_ERROR((AE_INFO,
1424 "Could not map memory at 0x%8.8X%8.8X, size %u",
1425 - ACPI_FORMAT_NATIVE_UINT(address),
1426 + ACPI_FORMAT_UINT64(address),
1427 (u32) map_length));
1428 mem_info->mapped_length = 0;
1429 return_ACPI_STATUS(AE_NO_MEMORY);
1430 @@ -202,8 +202,7 @@ acpi_ex_system_memory_space_handler(u32 function,
1431
1432 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
1433 "System-Memory (width %u) R/W %u Address=%8.8X%8.8X\n",
1434 - bit_width, function,
1435 - ACPI_FORMAT_NATIVE_UINT(address)));
1436 + bit_width, function, ACPI_FORMAT_UINT64(address)));
1437
1438 /*
1439 * Perform the memory read or write
1440 @@ -318,8 +317,7 @@ acpi_ex_system_io_space_handler(u32 function,
1441
1442 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
1443 "System-IO (width %u) R/W %u Address=%8.8X%8.8X\n",
1444 - bit_width, function,
1445 - ACPI_FORMAT_NATIVE_UINT(address)));
1446 + bit_width, function, ACPI_FORMAT_UINT64(address)));
1447
1448 /* Decode the function parameter */
1449
1450 diff --git a/drivers/acpi/acpica/hwvalid.c b/drivers/acpi/acpica/hwvalid.c
1451 index 6b919127cd9d..dabf754ea4a4 100644
1452 --- a/drivers/acpi/acpica/hwvalid.c
1453 +++ b/drivers/acpi/acpica/hwvalid.c
1454 @@ -142,17 +142,17 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width)
1455 byte_width = ACPI_DIV_8(bit_width);
1456 last_address = address + byte_width - 1;
1457
1458 - ACPI_DEBUG_PRINT((ACPI_DB_IO, "Address %p LastAddress %p Length %X",
1459 - ACPI_CAST_PTR(void, address), ACPI_CAST_PTR(void,
1460 - last_address),
1461 - byte_width));
1462 + ACPI_DEBUG_PRINT((ACPI_DB_IO,
1463 + "Address %8.8X%8.8X LastAddress %8.8X%8.8X Length %X",
1464 + ACPI_FORMAT_UINT64(address),
1465 + ACPI_FORMAT_UINT64(last_address), byte_width));
1466
1467 /* Maximum 16-bit address in I/O space */
1468
1469 if (last_address > ACPI_UINT16_MAX) {
1470 ACPI_ERROR((AE_INFO,
1471 - "Illegal I/O port address/length above 64K: %p/0x%X",
1472 - ACPI_CAST_PTR(void, address), byte_width));
1473 + "Illegal I/O port address/length above 64K: %8.8X%8.8X/0x%X",
1474 + ACPI_FORMAT_UINT64(address), byte_width));
1475 return_ACPI_STATUS(AE_LIMIT);
1476 }
1477
1478 @@ -181,8 +181,8 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width)
1479
1480 if (acpi_gbl_osi_data >= port_info->osi_dependency) {
1481 ACPI_DEBUG_PRINT((ACPI_DB_IO,
1482 - "Denied AML access to port 0x%p/%X (%s 0x%.4X-0x%.4X)",
1483 - ACPI_CAST_PTR(void, address),
1484 + "Denied AML access to port 0x%8.8X%8.8X/%X (%s 0x%.4X-0x%.4X)",
1485 + ACPI_FORMAT_UINT64(address),
1486 byte_width, port_info->name,
1487 port_info->start,
1488 port_info->end));
1489 diff --git a/drivers/acpi/acpica/nsdump.c b/drivers/acpi/acpica/nsdump.c
1490 index 3d88ef4a3e0d..809ed52de9c8 100644
1491 --- a/drivers/acpi/acpica/nsdump.c
1492 +++ b/drivers/acpi/acpica/nsdump.c
1493 @@ -271,12 +271,11 @@ acpi_ns_dump_one_object(acpi_handle obj_handle,
1494 switch (type) {
1495 case ACPI_TYPE_PROCESSOR:
1496
1497 - acpi_os_printf("ID %02X Len %02X Addr %p\n",
1498 + acpi_os_printf("ID %02X Len %02X Addr %8.8X%8.8X\n",
1499 obj_desc->processor.proc_id,
1500 obj_desc->processor.length,
1501 - ACPI_CAST_PTR(void,
1502 - obj_desc->processor.
1503 - address));
1504 + ACPI_FORMAT_UINT64(obj_desc->processor.
1505 + address));
1506 break;
1507
1508 case ACPI_TYPE_DEVICE:
1509 @@ -347,8 +346,9 @@ acpi_ns_dump_one_object(acpi_handle obj_handle,
1510 space_id));
1511 if (obj_desc->region.flags & AOPOBJ_DATA_VALID) {
1512 acpi_os_printf(" Addr %8.8X%8.8X Len %.4X\n",
1513 - ACPI_FORMAT_NATIVE_UINT
1514 - (obj_desc->region.address),
1515 + ACPI_FORMAT_UINT64(obj_desc->
1516 + region.
1517 + address),
1518 obj_desc->region.length);
1519 } else {
1520 acpi_os_printf
1521 diff --git a/drivers/acpi/acpica/tbdata.c b/drivers/acpi/acpica/tbdata.c
1522 index f499c10ceb4a..a078053ff473 100644
1523 --- a/drivers/acpi/acpica/tbdata.c
1524 +++ b/drivers/acpi/acpica/tbdata.c
1525 @@ -113,9 +113,9 @@ acpi_tb_acquire_table(struct acpi_table_desc *table_desc,
1526 case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
1527 case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
1528
1529 - table =
1530 - ACPI_CAST_PTR(struct acpi_table_header,
1531 - table_desc->address);
1532 + table = ACPI_CAST_PTR(struct acpi_table_header,
1533 + ACPI_PHYSADDR_TO_PTR(table_desc->
1534 + address));
1535 break;
1536
1537 default:
1538 @@ -214,7 +214,8 @@ acpi_tb_acquire_temp_table(struct acpi_table_desc *table_desc,
1539 case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
1540 case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
1541
1542 - table_header = ACPI_CAST_PTR(struct acpi_table_header, address);
1543 + table_header = ACPI_CAST_PTR(struct acpi_table_header,
1544 + ACPI_PHYSADDR_TO_PTR(address));
1545 if (!table_header) {
1546 return (AE_NO_MEMORY);
1547 }
1548 @@ -398,14 +399,14 @@ acpi_tb_verify_temp_table(struct acpi_table_desc * table_desc, char *signature)
1549 table_desc->length);
1550 if (ACPI_FAILURE(status)) {
1551 ACPI_EXCEPTION((AE_INFO, AE_NO_MEMORY,
1552 - "%4.4s " ACPI_PRINTF_UINT
1553 + "%4.4s 0x%8.8X%8.8X"
1554 " Attempted table install failed",
1555 acpi_ut_valid_acpi_name(table_desc->
1556 signature.
1557 ascii) ?
1558 table_desc->signature.ascii : "????",
1559 - ACPI_FORMAT_TO_UINT(table_desc->
1560 - address)));
1561 + ACPI_FORMAT_UINT64(table_desc->
1562 + address)));
1563 goto invalidate_and_exit;
1564 }
1565 }
1566 diff --git a/drivers/acpi/acpica/tbinstal.c b/drivers/acpi/acpica/tbinstal.c
1567 index c0b39f304ea3..8e1a43ae2f9b 100644
1568 --- a/drivers/acpi/acpica/tbinstal.c
1569 +++ b/drivers/acpi/acpica/tbinstal.c
1570 @@ -187,8 +187,9 @@ acpi_tb_install_fixed_table(acpi_physical_address address,
1571 status = acpi_tb_acquire_temp_table(&new_table_desc, address,
1572 ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL);
1573 if (ACPI_FAILURE(status)) {
1574 - ACPI_ERROR((AE_INFO, "Could not acquire table length at %p",
1575 - ACPI_CAST_PTR(void, address)));
1576 + ACPI_ERROR((AE_INFO,
1577 + "Could not acquire table length at %8.8X%8.8X",
1578 + ACPI_FORMAT_UINT64(address)));
1579 return_ACPI_STATUS(status);
1580 }
1581
1582 @@ -246,8 +247,9 @@ acpi_tb_install_standard_table(acpi_physical_address address,
1583
1584 status = acpi_tb_acquire_temp_table(&new_table_desc, address, flags);
1585 if (ACPI_FAILURE(status)) {
1586 - ACPI_ERROR((AE_INFO, "Could not acquire table length at %p",
1587 - ACPI_CAST_PTR(void, address)));
1588 + ACPI_ERROR((AE_INFO,
1589 + "Could not acquire table length at %8.8X%8.8X",
1590 + ACPI_FORMAT_UINT64(address)));
1591 return_ACPI_STATUS(status);
1592 }
1593
1594 @@ -258,9 +260,10 @@ acpi_tb_install_standard_table(acpi_physical_address address,
1595 if (!reload &&
1596 acpi_gbl_disable_ssdt_table_install &&
1597 ACPI_COMPARE_NAME(&new_table_desc.signature, ACPI_SIG_SSDT)) {
1598 - ACPI_INFO((AE_INFO, "Ignoring installation of %4.4s at %p",
1599 - new_table_desc.signature.ascii, ACPI_CAST_PTR(void,
1600 - address)));
1601 + ACPI_INFO((AE_INFO,
1602 + "Ignoring installation of %4.4s at %8.8X%8.8X",
1603 + new_table_desc.signature.ascii,
1604 + ACPI_FORMAT_UINT64(address)));
1605 goto release_and_exit;
1606 }
1607
1608 @@ -428,11 +431,11 @@ finish_override:
1609 return;
1610 }
1611
1612 - ACPI_INFO((AE_INFO, "%4.4s " ACPI_PRINTF_UINT
1613 - " %s table override, new table: " ACPI_PRINTF_UINT,
1614 + ACPI_INFO((AE_INFO, "%4.4s 0x%8.8X%8.8X"
1615 + " %s table override, new table: 0x%8.8X%8.8X",
1616 old_table_desc->signature.ascii,
1617 - ACPI_FORMAT_TO_UINT(old_table_desc->address),
1618 - override_type, ACPI_FORMAT_TO_UINT(new_table_desc.address)));
1619 + ACPI_FORMAT_UINT64(old_table_desc->address),
1620 + override_type, ACPI_FORMAT_UINT64(new_table_desc.address)));
1621
1622 /* We can now uninstall the original table */
1623
1624 @@ -516,7 +519,7 @@ void acpi_tb_uninstall_table(struct acpi_table_desc *table_desc)
1625
1626 if ((table_desc->flags & ACPI_TABLE_ORIGIN_MASK) ==
1627 ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL) {
1628 - ACPI_FREE(ACPI_CAST_PTR(void, table_desc->address));
1629 + ACPI_FREE(ACPI_PHYSADDR_TO_PTR(table_desc->address));
1630 }
1631
1632 table_desc->address = ACPI_PTR_TO_PHYSADDR(NULL);
1633 diff --git a/drivers/acpi/acpica/tbprint.c b/drivers/acpi/acpica/tbprint.c
1634 index df3bb20ea325..a23bdaec6040 100644
1635 --- a/drivers/acpi/acpica/tbprint.c
1636 +++ b/drivers/acpi/acpica/tbprint.c
1637 @@ -127,18 +127,12 @@ acpi_tb_print_table_header(acpi_physical_address address,
1638 {
1639 struct acpi_table_header local_header;
1640
1641 - /*
1642 - * The reason that we use ACPI_PRINTF_UINT and ACPI_FORMAT_TO_UINT is to
1643 - * support both 32-bit and 64-bit hosts/addresses in a consistent manner.
1644 - * The %p specifier does not emit uniform output on all hosts. On some,
1645 - * leading zeros are not supported.
1646 - */
1647 if (ACPI_COMPARE_NAME(header->signature, ACPI_SIG_FACS)) {
1648
1649 /* FACS only has signature and length fields */
1650
1651 - ACPI_INFO((AE_INFO, "%-4.4s " ACPI_PRINTF_UINT " %06X",
1652 - header->signature, ACPI_FORMAT_TO_UINT(address),
1653 + ACPI_INFO((AE_INFO, "%-4.4s 0x%8.8X%8.8X %06X",
1654 + header->signature, ACPI_FORMAT_UINT64(address),
1655 header->length));
1656 } else if (ACPI_VALIDATE_RSDP_SIG(header->signature)) {
1657
1658 @@ -149,9 +143,8 @@ acpi_tb_print_table_header(acpi_physical_address address,
1659 header)->oem_id, ACPI_OEM_ID_SIZE);
1660 acpi_tb_fix_string(local_header.oem_id, ACPI_OEM_ID_SIZE);
1661
1662 - ACPI_INFO((AE_INFO,
1663 - "RSDP " ACPI_PRINTF_UINT " %06X (v%.2d %-6.6s)",
1664 - ACPI_FORMAT_TO_UINT(address),
1665 + ACPI_INFO((AE_INFO, "RSDP 0x%8.8X%8.8X %06X (v%.2d %-6.6s)",
1666 + ACPI_FORMAT_UINT64(address),
1667 (ACPI_CAST_PTR(struct acpi_table_rsdp, header)->
1668 revision >
1669 0) ? ACPI_CAST_PTR(struct acpi_table_rsdp,
1670 @@ -165,9 +158,9 @@ acpi_tb_print_table_header(acpi_physical_address address,
1671 acpi_tb_cleanup_table_header(&local_header, header);
1672
1673 ACPI_INFO((AE_INFO,
1674 - "%-4.4s " ACPI_PRINTF_UINT
1675 + "%-4.4s 0x%8.8X%8.8X"
1676 " %06X (v%.2d %-6.6s %-8.8s %08X %-4.4s %08X)",
1677 - local_header.signature, ACPI_FORMAT_TO_UINT(address),
1678 + local_header.signature, ACPI_FORMAT_UINT64(address),
1679 local_header.length, local_header.revision,
1680 local_header.oem_id, local_header.oem_table_id,
1681 local_header.oem_revision,
1682 diff --git a/drivers/acpi/acpica/tbxfroot.c b/drivers/acpi/acpica/tbxfroot.c
1683 index 43a54af2b548..89772b3fe55a 100644
1684 --- a/drivers/acpi/acpica/tbxfroot.c
1685 +++ b/drivers/acpi/acpica/tbxfroot.c
1686 @@ -142,7 +142,7 @@ acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp * rsdp)
1687 *
1688 ******************************************************************************/
1689
1690 -acpi_status __init acpi_find_root_pointer(acpi_size *table_address)
1691 +acpi_status __init acpi_find_root_pointer(acpi_physical_address * table_address)
1692 {
1693 u8 *table_ptr;
1694 u8 *mem_rover;
1695 @@ -200,7 +200,8 @@ acpi_status __init acpi_find_root_pointer(acpi_size *table_address)
1696 physical_address +=
1697 (u32) ACPI_PTR_DIFF(mem_rover, table_ptr);
1698
1699 - *table_address = physical_address;
1700 + *table_address =
1701 + (acpi_physical_address) physical_address;
1702 return_ACPI_STATUS(AE_OK);
1703 }
1704 }
1705 @@ -233,7 +234,7 @@ acpi_status __init acpi_find_root_pointer(acpi_size *table_address)
1706 (ACPI_HI_RSDP_WINDOW_BASE +
1707 ACPI_PTR_DIFF(mem_rover, table_ptr));
1708
1709 - *table_address = physical_address;
1710 + *table_address = (acpi_physical_address) physical_address;
1711 return_ACPI_STATUS(AE_OK);
1712 }
1713
1714 diff --git a/drivers/acpi/acpica/utaddress.c b/drivers/acpi/acpica/utaddress.c
1715 index a1acec9d2ef3..65985036c5c3 100644
1716 --- a/drivers/acpi/acpica/utaddress.c
1717 +++ b/drivers/acpi/acpica/utaddress.c
1718 @@ -107,10 +107,10 @@ acpi_ut_add_address_range(acpi_adr_space_type space_id,
1719 acpi_gbl_address_range_list[space_id] = range_info;
1720
1721 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
1722 - "\nAdded [%4.4s] address range: 0x%p-0x%p\n",
1723 + "\nAdded [%4.4s] address range: 0x%8.8X%8.8X-0x%8.8X%8.8X\n",
1724 acpi_ut_get_node_name(range_info->region_node),
1725 - ACPI_CAST_PTR(void, address),
1726 - ACPI_CAST_PTR(void, range_info->end_address)));
1727 + ACPI_FORMAT_UINT64(address),
1728 + ACPI_FORMAT_UINT64(range_info->end_address)));
1729
1730 (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
1731 return_ACPI_STATUS(AE_OK);
1732 @@ -160,15 +160,13 @@ acpi_ut_remove_address_range(acpi_adr_space_type space_id,
1733 }
1734
1735 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
1736 - "\nRemoved [%4.4s] address range: 0x%p-0x%p\n",
1737 + "\nRemoved [%4.4s] address range: 0x%8.8X%8.8X-0x%8.8X%8.8X\n",
1738 acpi_ut_get_node_name(range_info->
1739 region_node),
1740 - ACPI_CAST_PTR(void,
1741 - range_info->
1742 - start_address),
1743 - ACPI_CAST_PTR(void,
1744 - range_info->
1745 - end_address)));
1746 + ACPI_FORMAT_UINT64(range_info->
1747 + start_address),
1748 + ACPI_FORMAT_UINT64(range_info->
1749 + end_address)));
1750
1751 ACPI_FREE(range_info);
1752 return_VOID;
1753 @@ -245,16 +243,14 @@ acpi_ut_check_address_range(acpi_adr_space_type space_id,
1754 region_node);
1755
1756 ACPI_WARNING((AE_INFO,
1757 - "%s range 0x%p-0x%p conflicts with OpRegion 0x%p-0x%p (%s)",
1758 + "%s range 0x%8.8X%8.8X-0x%8.8X%8.8X conflicts with OpRegion 0x%8.8X%8.8X-0x%8.8X%8.8X (%s)",
1759 acpi_ut_get_region_name(space_id),
1760 - ACPI_CAST_PTR(void, address),
1761 - ACPI_CAST_PTR(void, end_address),
1762 - ACPI_CAST_PTR(void,
1763 - range_info->
1764 - start_address),
1765 - ACPI_CAST_PTR(void,
1766 - range_info->
1767 - end_address),
1768 + ACPI_FORMAT_UINT64(address),
1769 + ACPI_FORMAT_UINT64(end_address),
1770 + ACPI_FORMAT_UINT64(range_info->
1771 + start_address),
1772 + ACPI_FORMAT_UINT64(range_info->
1773 + end_address),
1774 pathname));
1775 ACPI_FREE(pathname);
1776 }
1777 diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
1778 index 9964f70be98d..838359818228 100644
1779 --- a/drivers/acpi/osl.c
1780 +++ b/drivers/acpi/osl.c
1781 @@ -182,7 +182,7 @@ static void __init acpi_request_region (struct acpi_generic_address *gas,
1782 request_mem_region(addr, length, desc);
1783 }
1784
1785 -static int __init acpi_reserve_resources(void)
1786 +static void __init acpi_reserve_resources(void)
1787 {
1788 acpi_request_region(&acpi_gbl_FADT.xpm1a_event_block, acpi_gbl_FADT.pm1_event_length,
1789 "ACPI PM1a_EVT_BLK");
1790 @@ -211,10 +211,7 @@ static int __init acpi_reserve_resources(void)
1791 if (!(acpi_gbl_FADT.gpe1_block_length & 0x1))
1792 acpi_request_region(&acpi_gbl_FADT.xgpe1_block,
1793 acpi_gbl_FADT.gpe1_block_length, "ACPI GPE1_BLK");
1794 -
1795 - return 0;
1796 }
1797 -device_initcall(acpi_reserve_resources);
1798
1799 void acpi_os_printf(const char *fmt, ...)
1800 {
1801 @@ -1839,6 +1836,7 @@ acpi_status __init acpi_os_initialize(void)
1802
1803 acpi_status __init acpi_os_initialize1(void)
1804 {
1805 + acpi_reserve_resources();
1806 kacpid_wq = alloc_workqueue("kacpid", 0, 1);
1807 kacpi_notify_wq = alloc_workqueue("kacpi_notify", 0, 1);
1808 kacpi_hotplug_wq = alloc_ordered_workqueue("kacpi_hotplug", 0);
1809 diff --git a/drivers/acpi/sbshc.c b/drivers/acpi/sbshc.c
1810 index 26e5b5060523..bf034f8b7c1a 100644
1811 --- a/drivers/acpi/sbshc.c
1812 +++ b/drivers/acpi/sbshc.c
1813 @@ -14,6 +14,7 @@
1814 #include <linux/delay.h>
1815 #include <linux/module.h>
1816 #include <linux/interrupt.h>
1817 +#include <linux/dmi.h>
1818 #include "sbshc.h"
1819
1820 #define PREFIX "ACPI: "
1821 @@ -87,6 +88,8 @@ enum acpi_smb_offset {
1822 ACPI_SMB_ALARM_DATA = 0x26, /* 2 bytes alarm data */
1823 };
1824
1825 +static bool macbook;
1826 +
1827 static inline int smb_hc_read(struct acpi_smb_hc *hc, u8 address, u8 *data)
1828 {
1829 return ec_read(hc->offset + address, data);
1830 @@ -132,6 +135,8 @@ static int acpi_smbus_transaction(struct acpi_smb_hc *hc, u8 protocol,
1831 }
1832
1833 mutex_lock(&hc->lock);
1834 + if (macbook)
1835 + udelay(5);
1836 if (smb_hc_read(hc, ACPI_SMB_PROTOCOL, &temp))
1837 goto end;
1838 if (temp) {
1839 @@ -257,12 +262,29 @@ extern int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit,
1840 acpi_handle handle, acpi_ec_query_func func,
1841 void *data);
1842
1843 +static int macbook_dmi_match(const struct dmi_system_id *d)
1844 +{
1845 + pr_debug("Detected MacBook, enabling workaround\n");
1846 + macbook = true;
1847 + return 0;
1848 +}
1849 +
1850 +static struct dmi_system_id acpi_smbus_dmi_table[] = {
1851 + { macbook_dmi_match, "Apple MacBook", {
1852 + DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
1853 + DMI_MATCH(DMI_PRODUCT_NAME, "MacBook") },
1854 + },
1855 + { },
1856 +};
1857 +
1858 static int acpi_smbus_hc_add(struct acpi_device *device)
1859 {
1860 int status;
1861 unsigned long long val;
1862 struct acpi_smb_hc *hc;
1863
1864 + dmi_check_system(acpi_smbus_dmi_table);
1865 +
1866 if (!device)
1867 return -EINVAL;
1868
1869 diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
1870 index 49f1e6890587..73187771836c 100644
1871 --- a/drivers/ata/ahci.c
1872 +++ b/drivers/ata/ahci.c
1873 @@ -66,6 +66,7 @@ enum board_ids {
1874 board_ahci_yes_fbs,
1875
1876 /* board IDs for specific chipsets in alphabetical order */
1877 + board_ahci_avn,
1878 board_ahci_mcp65,
1879 board_ahci_mcp77,
1880 board_ahci_mcp89,
1881 @@ -84,6 +85,8 @@ enum board_ids {
1882 static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
1883 static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
1884 unsigned long deadline);
1885 +static int ahci_avn_hardreset(struct ata_link *link, unsigned int *class,
1886 + unsigned long deadline);
1887 static void ahci_mcp89_apple_enable(struct pci_dev *pdev);
1888 static bool is_mcp89_apple(struct pci_dev *pdev);
1889 static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class,
1890 @@ -107,6 +110,11 @@ static struct ata_port_operations ahci_p5wdh_ops = {
1891 .hardreset = ahci_p5wdh_hardreset,
1892 };
1893
1894 +static struct ata_port_operations ahci_avn_ops = {
1895 + .inherits = &ahci_ops,
1896 + .hardreset = ahci_avn_hardreset,
1897 +};
1898 +
1899 static const struct ata_port_info ahci_port_info[] = {
1900 /* by features */
1901 [board_ahci] = {
1902 @@ -151,6 +159,12 @@ static const struct ata_port_info ahci_port_info[] = {
1903 .port_ops = &ahci_ops,
1904 },
1905 /* by chipsets */
1906 + [board_ahci_avn] = {
1907 + .flags = AHCI_FLAG_COMMON,
1908 + .pio_mask = ATA_PIO4,
1909 + .udma_mask = ATA_UDMA6,
1910 + .port_ops = &ahci_avn_ops,
1911 + },
1912 [board_ahci_mcp65] = {
1913 AHCI_HFLAGS (AHCI_HFLAG_NO_FPDMA_AA | AHCI_HFLAG_NO_PMP |
1914 AHCI_HFLAG_YES_NCQ),
1915 @@ -290,14 +304,14 @@ static const struct pci_device_id ahci_pci_tbl[] = {
1916 { PCI_VDEVICE(INTEL, 0x1f27), board_ahci }, /* Avoton RAID */
1917 { PCI_VDEVICE(INTEL, 0x1f2e), board_ahci }, /* Avoton RAID */
1918 { PCI_VDEVICE(INTEL, 0x1f2f), board_ahci }, /* Avoton RAID */
1919 - { PCI_VDEVICE(INTEL, 0x1f32), board_ahci }, /* Avoton AHCI */
1920 - { PCI_VDEVICE(INTEL, 0x1f33), board_ahci }, /* Avoton AHCI */
1921 - { PCI_VDEVICE(INTEL, 0x1f34), board_ahci }, /* Avoton RAID */
1922 - { PCI_VDEVICE(INTEL, 0x1f35), board_ahci }, /* Avoton RAID */
1923 - { PCI_VDEVICE(INTEL, 0x1f36), board_ahci }, /* Avoton RAID */
1924 - { PCI_VDEVICE(INTEL, 0x1f37), board_ahci }, /* Avoton RAID */
1925 - { PCI_VDEVICE(INTEL, 0x1f3e), board_ahci }, /* Avoton RAID */
1926 - { PCI_VDEVICE(INTEL, 0x1f3f), board_ahci }, /* Avoton RAID */
1927 + { PCI_VDEVICE(INTEL, 0x1f32), board_ahci_avn }, /* Avoton AHCI */
1928 + { PCI_VDEVICE(INTEL, 0x1f33), board_ahci_avn }, /* Avoton AHCI */
1929 + { PCI_VDEVICE(INTEL, 0x1f34), board_ahci_avn }, /* Avoton RAID */
1930 + { PCI_VDEVICE(INTEL, 0x1f35), board_ahci_avn }, /* Avoton RAID */
1931 + { PCI_VDEVICE(INTEL, 0x1f36), board_ahci_avn }, /* Avoton RAID */
1932 + { PCI_VDEVICE(INTEL, 0x1f37), board_ahci_avn }, /* Avoton RAID */
1933 + { PCI_VDEVICE(INTEL, 0x1f3e), board_ahci_avn }, /* Avoton RAID */
1934 + { PCI_VDEVICE(INTEL, 0x1f3f), board_ahci_avn }, /* Avoton RAID */
1935 { PCI_VDEVICE(INTEL, 0x2823), board_ahci }, /* Wellsburg RAID */
1936 { PCI_VDEVICE(INTEL, 0x2827), board_ahci }, /* Wellsburg RAID */
1937 { PCI_VDEVICE(INTEL, 0x8d02), board_ahci }, /* Wellsburg AHCI */
1938 @@ -671,6 +685,79 @@ static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class,
1939 return rc;
1940 }
1941
1942 +/*
1943 + * ahci_avn_hardreset - attempt more aggressive recovery of Avoton ports.
1944 + *
1945 + * It has been observed with some SSDs that the timing of events in the
1946 + * link synchronization phase can leave the port in a state that can not
1947 + * be recovered by a SATA-hard-reset alone. The failing signature is
1948 + * SStatus.DET stuck at 1 ("Device presence detected but Phy
1949 + * communication not established"). It was found that unloading and
1950 + * reloading the driver when this problem occurs allows the drive
1951 + * connection to be recovered (DET advanced to 0x3). The critical
1952 + * component of reloading the driver is that the port state machines are
1953 + * reset by bouncing "port enable" in the AHCI PCS configuration
1954 + * register. So, reproduce that effect by bouncing a port whenever we
1955 + * see DET==1 after a reset.
1956 + */
1957 +static int ahci_avn_hardreset(struct ata_link *link, unsigned int *class,
1958 + unsigned long deadline)
1959 +{
1960 + const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
1961 + struct ata_port *ap = link->ap;
1962 + struct ahci_port_priv *pp = ap->private_data;
1963 + struct ahci_host_priv *hpriv = ap->host->private_data;
1964 + u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
1965 + unsigned long tmo = deadline - jiffies;
1966 + struct ata_taskfile tf;
1967 + bool online;
1968 + int rc, i;
1969 +
1970 + DPRINTK("ENTER\n");
1971 +
1972 + ahci_stop_engine(ap);
1973 +
1974 + for (i = 0; i < 2; i++) {
1975 + u16 val;
1976 + u32 sstatus;
1977 + int port = ap->port_no;
1978 + struct ata_host *host = ap->host;
1979 + struct pci_dev *pdev = to_pci_dev(host->dev);
1980 +
1981 + /* clear D2H reception area to properly wait for D2H FIS */
1982 + ata_tf_init(link->device, &tf);
1983 + tf.command = ATA_BUSY;
1984 + ata_tf_to_fis(&tf, 0, 0, d2h_fis);
1985 +
1986 + rc = sata_link_hardreset(link, timing, deadline, &online,
1987 + ahci_check_ready);
1988 +
1989 + if (sata_scr_read(link, SCR_STATUS, &sstatus) != 0 ||
1990 + (sstatus & 0xf) != 1)
1991 + break;
1992 +
1993 + ata_link_printk(link, KERN_INFO, "avn bounce port%d\n",
1994 + port);
1995 +
1996 + pci_read_config_word(pdev, 0x92, &val);
1997 + val &= ~(1 << port);
1998 + pci_write_config_word(pdev, 0x92, val);
1999 + ata_msleep(ap, 1000);
2000 + val |= 1 << port;
2001 + pci_write_config_word(pdev, 0x92, val);
2002 + deadline += tmo;
2003 + }
2004 +
2005 + hpriv->start_engine(ap);
2006 +
2007 + if (online)
2008 + *class = ahci_dev_classify(ap);
2009 +
2010 + DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class);
2011 + return rc;
2012 +}
2013 +
2014 +
2015 #ifdef CONFIG_PM
2016 static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
2017 {
2018 diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
2019 index 97683e45ab04..de88999521b7 100644
2020 --- a/drivers/ata/libahci.c
2021 +++ b/drivers/ata/libahci.c
2022 @@ -1707,8 +1707,7 @@ static void ahci_handle_port_interrupt(struct ata_port *ap,
2023 if (unlikely(resetting))
2024 status &= ~PORT_IRQ_BAD_PMP;
2025
2026 - /* if LPM is enabled, PHYRDY doesn't mean anything */
2027 - if (ap->link.lpm_policy > ATA_LPM_MAX_POWER) {
2028 + if (sata_lpm_ignore_phy_events(&ap->link)) {
2029 status &= ~PORT_IRQ_PHYRDY;
2030 ahci_scr_write(&ap->link, SCR_ERROR, SERR_PHYRDY_CHG);
2031 }
2032 diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
2033 index 485f7eab0d4b..64af3bf2b4c7 100644
2034 --- a/drivers/ata/libata-core.c
2035 +++ b/drivers/ata/libata-core.c
2036 @@ -6747,6 +6747,38 @@ u32 ata_wait_register(struct ata_port *ap, void __iomem *reg, u32 mask, u32 val,
2037 return tmp;
2038 }
2039
2040 +/**
2041 + * sata_lpm_ignore_phy_events - test if PHY event should be ignored
2042 + * @link: Link receiving the event
2043 + *
2044 + * Test whether the received PHY event has to be ignored or not.
2045 + *
2046 + * LOCKING:
2047 + * None:
2048 + *
2049 + * RETURNS:
2050 + * True if the event has to be ignored.
2051 + */
2052 +bool sata_lpm_ignore_phy_events(struct ata_link *link)
2053 +{
2054 + unsigned long lpm_timeout = link->last_lpm_change +
2055 + msecs_to_jiffies(ATA_TMOUT_SPURIOUS_PHY);
2056 +
2057 + /* if LPM is enabled, PHYRDY doesn't mean anything */
2058 + if (link->lpm_policy > ATA_LPM_MAX_POWER)
2059 + return true;
2060 +
2061 + /* ignore the first PHY event after the LPM policy changed
2062 + * as it is might be spurious
2063 + */
2064 + if ((link->flags & ATA_LFLAG_CHANGED) &&
2065 + time_before(jiffies, lpm_timeout))
2066 + return true;
2067 +
2068 + return false;
2069 +}
2070 +EXPORT_SYMBOL_GPL(sata_lpm_ignore_phy_events);
2071 +
2072 /*
2073 * Dummy port_ops
2074 */
2075 diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
2076 index dad83df555c4..4ec95b76f6a1 100644
2077 --- a/drivers/ata/libata-eh.c
2078 +++ b/drivers/ata/libata-eh.c
2079 @@ -3490,6 +3490,9 @@ static int ata_eh_set_lpm(struct ata_link *link, enum ata_lpm_policy policy,
2080 }
2081 }
2082
2083 + link->last_lpm_change = jiffies;
2084 + link->flags |= ATA_LFLAG_CHANGED;
2085 +
2086 return 0;
2087
2088 fail:
2089 diff --git a/drivers/edac/mce_amd.h b/drivers/edac/mce_amd.h
2090 index 51b7e3a36e37..c2359a1ea6b3 100644
2091 --- a/drivers/edac/mce_amd.h
2092 +++ b/drivers/edac/mce_amd.h
2093 @@ -32,9 +32,6 @@
2094 #define R4(x) (((x) >> 4) & 0xf)
2095 #define R4_MSG(x) ((R4(x) < 9) ? rrrr_msgs[R4(x)] : "Wrong R4!")
2096
2097 -#define MCI_STATUS_DEFERRED BIT_64(44)
2098 -#define MCI_STATUS_POISON BIT_64(43)
2099 -
2100 extern const char * const pp_msgs[];
2101
2102 enum tt_ids {
2103 diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
2104 index 17afc51f3054..35286fe52823 100644
2105 --- a/drivers/firmware/dmi_scan.c
2106 +++ b/drivers/firmware/dmi_scan.c
2107 @@ -489,6 +489,10 @@ static int __init dmi_present(const u8 *buf)
2108 buf += 16;
2109
2110 if (memcmp(buf, "_DMI_", 5) == 0 && dmi_checksum(buf, 15)) {
2111 + if (smbios_ver)
2112 + dmi_ver = smbios_ver;
2113 + else
2114 + dmi_ver = (buf[14] & 0xF0) << 4 | (buf[14] & 0x0F);
2115 dmi_num = (buf[13] << 8) | buf[12];
2116 dmi_len = (buf[7] << 8) | buf[6];
2117 dmi_base = (buf[11] << 24) | (buf[10] << 16) |
2118 @@ -496,12 +500,9 @@ static int __init dmi_present(const u8 *buf)
2119
2120 if (dmi_walk_early(dmi_decode) == 0) {
2121 if (smbios_ver) {
2122 - dmi_ver = smbios_ver;
2123 pr_info("SMBIOS %d.%d present.\n",
2124 dmi_ver >> 8, dmi_ver & 0xFF);
2125 } else {
2126 - dmi_ver = (buf[14] & 0xF0) << 4 |
2127 - (buf[14] & 0x0F);
2128 pr_info("Legacy DMI %d.%d present.\n",
2129 dmi_ver >> 8, dmi_ver & 0xFF);
2130 }
2131 diff --git a/drivers/gpio/gpio-kempld.c b/drivers/gpio/gpio-kempld.c
2132 index fd150adeebf9..86a60079d316 100644
2133 --- a/drivers/gpio/gpio-kempld.c
2134 +++ b/drivers/gpio/gpio-kempld.c
2135 @@ -117,7 +117,7 @@ static int kempld_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
2136 = container_of(chip, struct kempld_gpio_data, chip);
2137 struct kempld_device_data *pld = gpio->pld;
2138
2139 - return kempld_gpio_get_bit(pld, KEMPLD_GPIO_DIR_NUM(offset), offset);
2140 + return !kempld_gpio_get_bit(pld, KEMPLD_GPIO_DIR_NUM(offset), offset);
2141 }
2142
2143 static int kempld_gpio_pincount(struct kempld_device_data *pld)
2144 diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c
2145 index aed7dd6e9dca..d9fa798560b2 100644
2146 --- a/drivers/gpio/gpiolib-sysfs.c
2147 +++ b/drivers/gpio/gpiolib-sysfs.c
2148 @@ -519,6 +519,7 @@ static struct class gpio_class = {
2149 */
2150 int gpiod_export(struct gpio_desc *desc, bool direction_may_change)
2151 {
2152 + struct gpio_chip *chip;
2153 unsigned long flags;
2154 int status;
2155 const char *ioname = NULL;
2156 @@ -536,8 +537,16 @@ int gpiod_export(struct gpio_desc *desc, bool direction_may_change)
2157 return -EINVAL;
2158 }
2159
2160 + chip = desc->chip;
2161 +
2162 mutex_lock(&sysfs_lock);
2163
2164 + /* check if chip is being removed */
2165 + if (!chip || !chip->exported) {
2166 + status = -ENODEV;
2167 + goto fail_unlock;
2168 + }
2169 +
2170 spin_lock_irqsave(&gpio_lock, flags);
2171 if (!test_bit(FLAG_REQUESTED, &desc->flags) ||
2172 test_bit(FLAG_EXPORT, &desc->flags)) {
2173 @@ -766,12 +775,15 @@ void gpiochip_unexport(struct gpio_chip *chip)
2174 {
2175 int status;
2176 struct device *dev;
2177 + struct gpio_desc *desc;
2178 + unsigned int i;
2179
2180 mutex_lock(&sysfs_lock);
2181 dev = class_find_device(&gpio_class, NULL, chip, match_export);
2182 if (dev) {
2183 put_device(dev);
2184 device_unregister(dev);
2185 + /* prevent further gpiod exports */
2186 chip->exported = false;
2187 status = 0;
2188 } else
2189 @@ -780,6 +792,13 @@ void gpiochip_unexport(struct gpio_chip *chip)
2190
2191 if (status)
2192 chip_dbg(chip, "%s: status %d\n", __func__, status);
2193 +
2194 + /* unregister gpiod class devices owned by sysfs */
2195 + for (i = 0; i < chip->ngpio; i++) {
2196 + desc = &chip->desc[i];
2197 + if (test_and_clear_bit(FLAG_SYSFS, &desc->flags))
2198 + gpiod_free(desc);
2199 + }
2200 }
2201
2202 static int __init gpiolib_sysfs_init(void)
2203 diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
2204 index c4edea907f8f..7d64d22486e9 100644
2205 --- a/drivers/gpu/drm/drm_irq.c
2206 +++ b/drivers/gpu/drm/drm_irq.c
2207 @@ -131,12 +131,11 @@ static void drm_update_vblank_count(struct drm_device *dev, int crtc)
2208
2209 /* Reinitialize corresponding vblank timestamp if high-precision query
2210 * available. Skip this step if query unsupported or failed. Will
2211 - * reinitialize delayed at next vblank interrupt in that case.
2212 + * reinitialize delayed at next vblank interrupt in that case and
2213 + * assign 0 for now, to mark the vblanktimestamp as invalid.
2214 */
2215 - if (rc) {
2216 - tslot = atomic_read(&vblank->count) + diff;
2217 - vblanktimestamp(dev, crtc, tslot) = t_vblank;
2218 - }
2219 + tslot = atomic_read(&vblank->count) + diff;
2220 + vblanktimestamp(dev, crtc, tslot) = rc ? t_vblank : (struct timeval) {0, 0};
2221
2222 smp_mb__before_atomic();
2223 atomic_add(diff, &vblank->count);
2224 diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
2225 index 740d9ebbebde..a29db0a1da42 100644
2226 --- a/drivers/gpu/drm/i915/intel_dp.c
2227 +++ b/drivers/gpu/drm/i915/intel_dp.c
2228 @@ -1037,7 +1037,7 @@ intel_dp_compute_config(struct intel_encoder *encoder,
2229
2230 pipe_config->has_dp_encoder = true;
2231 pipe_config->has_drrs = false;
2232 - pipe_config->has_audio = intel_dp->has_audio;
2233 + pipe_config->has_audio = intel_dp->has_audio && port != PORT_A;
2234
2235 if (is_edp(intel_dp) && intel_connector->panel.fixed_mode) {
2236 intel_fixed_panel_mode(intel_connector->panel.fixed_mode,
2237 @@ -1879,8 +1879,8 @@ static void intel_dp_get_config(struct intel_encoder *encoder,
2238 int dotclock;
2239
2240 tmp = I915_READ(intel_dp->output_reg);
2241 - if (tmp & DP_AUDIO_OUTPUT_ENABLE)
2242 - pipe_config->has_audio = true;
2243 +
2244 + pipe_config->has_audio = tmp & DP_AUDIO_OUTPUT_ENABLE && port != PORT_A;
2245
2246 if ((port == PORT_A) || !HAS_PCH_CPT(dev)) {
2247 if (tmp & DP_SYNC_HS_HIGH)
2248 diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
2249 index c0bbf2172446..b7e80bf190f8 100644
2250 --- a/drivers/gpu/drm/i915/intel_lvds.c
2251 +++ b/drivers/gpu/drm/i915/intel_lvds.c
2252 @@ -809,12 +809,28 @@ static int intel_dual_link_lvds_callback(const struct dmi_system_id *id)
2253 static const struct dmi_system_id intel_dual_link_lvds[] = {
2254 {
2255 .callback = intel_dual_link_lvds_callback,
2256 - .ident = "Apple MacBook Pro (Core i5/i7 Series)",
2257 + .ident = "Apple MacBook Pro 15\" (2010)",
2258 + .matches = {
2259 + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
2260 + DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro6,2"),
2261 + },
2262 + },
2263 + {
2264 + .callback = intel_dual_link_lvds_callback,
2265 + .ident = "Apple MacBook Pro 15\" (2011)",
2266 .matches = {
2267 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
2268 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro8,2"),
2269 },
2270 },
2271 + {
2272 + .callback = intel_dual_link_lvds_callback,
2273 + .ident = "Apple MacBook Pro 15\" (2012)",
2274 + .matches = {
2275 + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
2276 + DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro9,1"),
2277 + },
2278 + },
2279 { } /* terminating entry */
2280 };
2281
2282 diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
2283 index 5d73e5f3845d..4f9ec36698f7 100644
2284 --- a/drivers/gpu/drm/radeon/atombios_crtc.c
2285 +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
2286 @@ -1789,7 +1789,9 @@ static int radeon_get_shared_nondp_ppll(struct drm_crtc *crtc)
2287 if ((crtc->mode.clock == test_crtc->mode.clock) &&
2288 (adjusted_clock == test_adjusted_clock) &&
2289 (radeon_crtc->ss_enabled == test_radeon_crtc->ss_enabled) &&
2290 - (test_radeon_crtc->pll_id != ATOM_PPLL_INVALID))
2291 + (test_radeon_crtc->pll_id != ATOM_PPLL_INVALID) &&
2292 + (drm_detect_monitor_audio(radeon_connector_edid(test_radeon_crtc->connector)) ==
2293 + drm_detect_monitor_audio(radeon_connector_edid(radeon_crtc->connector))))
2294 return test_radeon_crtc->pll_id;
2295 }
2296 }
2297 diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
2298 index 5bf825dfaa09..ceab25d54233 100644
2299 --- a/drivers/gpu/drm/radeon/atombios_dp.c
2300 +++ b/drivers/gpu/drm/radeon/atombios_dp.c
2301 @@ -405,19 +405,21 @@ bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector)
2302 {
2303 struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv;
2304 u8 msg[DP_DPCD_SIZE];
2305 - int ret;
2306 + int ret, i;
2307
2308 - ret = drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_DPCD_REV, msg,
2309 - DP_DPCD_SIZE);
2310 - if (ret > 0) {
2311 - memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE);
2312 + for (i = 0; i < 7; i++) {
2313 + ret = drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_DPCD_REV, msg,
2314 + DP_DPCD_SIZE);
2315 + if (ret == DP_DPCD_SIZE) {
2316 + memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE);
2317
2318 - DRM_DEBUG_KMS("DPCD: %*ph\n", (int)sizeof(dig_connector->dpcd),
2319 - dig_connector->dpcd);
2320 + DRM_DEBUG_KMS("DPCD: %*ph\n", (int)sizeof(dig_connector->dpcd),
2321 + dig_connector->dpcd);
2322
2323 - radeon_dp_probe_oui(radeon_connector);
2324 + radeon_dp_probe_oui(radeon_connector);
2325
2326 - return true;
2327 + return true;
2328 + }
2329 }
2330 dig_connector->dpcd[0] = 0;
2331 return false;
2332 diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
2333 index 0c6fbc0198a5..63e8bff5d47a 100644
2334 --- a/drivers/gpu/drm/radeon/cik.c
2335 +++ b/drivers/gpu/drm/radeon/cik.c
2336 @@ -5764,7 +5764,7 @@ static int cik_pcie_gart_enable(struct radeon_device *rdev)
2337 /* restore context1-15 */
2338 /* set vm size, must be a multiple of 4 */
2339 WREG32(VM_CONTEXT1_PAGE_TABLE_START_ADDR, 0);
2340 - WREG32(VM_CONTEXT1_PAGE_TABLE_END_ADDR, rdev->vm_manager.max_pfn);
2341 + WREG32(VM_CONTEXT1_PAGE_TABLE_END_ADDR, rdev->vm_manager.max_pfn - 1);
2342 for (i = 1; i < 16; i++) {
2343 if (i < 8)
2344 WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2),
2345 diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
2346 index 8a83c917cf53..a019ba246e39 100644
2347 --- a/drivers/gpu/drm/radeon/ni.c
2348 +++ b/drivers/gpu/drm/radeon/ni.c
2349 @@ -1269,7 +1269,8 @@ static int cayman_pcie_gart_enable(struct radeon_device *rdev)
2350 */
2351 for (i = 1; i < 8; i++) {
2352 WREG32(VM_CONTEXT0_PAGE_TABLE_START_ADDR + (i << 2), 0);
2353 - WREG32(VM_CONTEXT0_PAGE_TABLE_END_ADDR + (i << 2), rdev->vm_manager.max_pfn);
2354 + WREG32(VM_CONTEXT0_PAGE_TABLE_END_ADDR + (i << 2),
2355 + rdev->vm_manager.max_pfn - 1);
2356 WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2),
2357 rdev->vm_manager.saved_table_addr[i]);
2358 }
2359 diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
2360 index ed0e10eee2dc..c34ceb8d3d27 100644
2361 --- a/drivers/gpu/drm/radeon/radeon_asic.c
2362 +++ b/drivers/gpu/drm/radeon/radeon_asic.c
2363 @@ -1190,7 +1190,7 @@ static struct radeon_asic rs780_asic = {
2364 static struct radeon_asic_ring rv770_uvd_ring = {
2365 .ib_execute = &uvd_v1_0_ib_execute,
2366 .emit_fence = &uvd_v2_2_fence_emit,
2367 - .emit_semaphore = &uvd_v1_0_semaphore_emit,
2368 + .emit_semaphore = &uvd_v2_2_semaphore_emit,
2369 .cs_parse = &radeon_uvd_cs_parse,
2370 .ring_test = &uvd_v1_0_ring_test,
2371 .ib_test = &uvd_v1_0_ib_test,
2372 diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h
2373 index 0c1da2bf1fb4..6dd68f663181 100644
2374 --- a/drivers/gpu/drm/radeon/radeon_asic.h
2375 +++ b/drivers/gpu/drm/radeon/radeon_asic.h
2376 @@ -908,6 +908,10 @@ void uvd_v1_0_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
2377 int uvd_v2_2_resume(struct radeon_device *rdev);
2378 void uvd_v2_2_fence_emit(struct radeon_device *rdev,
2379 struct radeon_fence *fence);
2380 +bool uvd_v2_2_semaphore_emit(struct radeon_device *rdev,
2381 + struct radeon_ring *ring,
2382 + struct radeon_semaphore *semaphore,
2383 + bool emit_wait);
2384
2385 /* uvd v3.1 */
2386 bool uvd_v3_1_semaphore_emit(struct radeon_device *rdev,
2387 diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
2388 index 9ab8e2694602..13f69472e716 100644
2389 --- a/drivers/gpu/drm/radeon/radeon_ttm.c
2390 +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
2391 @@ -568,8 +568,7 @@ static void radeon_ttm_tt_unpin_userptr(struct ttm_tt *ttm)
2392 {
2393 struct radeon_device *rdev = radeon_get_rdev(ttm->bdev);
2394 struct radeon_ttm_tt *gtt = (void *)ttm;
2395 - struct scatterlist *sg;
2396 - int i;
2397 + struct sg_page_iter sg_iter;
2398
2399 int write = !(gtt->userflags & RADEON_GEM_USERPTR_READONLY);
2400 enum dma_data_direction direction = write ?
2401 @@ -582,9 +581,8 @@ static void radeon_ttm_tt_unpin_userptr(struct ttm_tt *ttm)
2402 /* free the sg table and pages again */
2403 dma_unmap_sg(rdev->dev, ttm->sg->sgl, ttm->sg->nents, direction);
2404
2405 - for_each_sg(ttm->sg->sgl, sg, ttm->sg->nents, i) {
2406 - struct page *page = sg_page(sg);
2407 -
2408 + for_each_sg_page(ttm->sg->sgl, &sg_iter, ttm->sg->nents, 0) {
2409 + struct page *page = sg_page_iter_page(&sg_iter);
2410 if (!(gtt->userflags & RADEON_GEM_USERPTR_READONLY))
2411 set_page_dirty(page);
2412
2413 diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c
2414 index 11b662469253..db6536f722f2 100644
2415 --- a/drivers/gpu/drm/radeon/radeon_uvd.c
2416 +++ b/drivers/gpu/drm/radeon/radeon_uvd.c
2417 @@ -396,6 +396,29 @@ static int radeon_uvd_cs_msg_decode(uint32_t *msg, unsigned buf_sizes[])
2418 return 0;
2419 }
2420
2421 +static int radeon_uvd_validate_codec(struct radeon_cs_parser *p,
2422 + unsigned stream_type)
2423 +{
2424 + switch (stream_type) {
2425 + case 0: /* H264 */
2426 + case 1: /* VC1 */
2427 + /* always supported */
2428 + return 0;
2429 +
2430 + case 3: /* MPEG2 */
2431 + case 4: /* MPEG4 */
2432 + /* only since UVD 3 */
2433 + if (p->rdev->family >= CHIP_PALM)
2434 + return 0;
2435 +
2436 + /* fall through */
2437 + default:
2438 + DRM_ERROR("UVD codec not supported by hardware %d!\n",
2439 + stream_type);
2440 + return -EINVAL;
2441 + }
2442 +}
2443 +
2444 static int radeon_uvd_cs_msg(struct radeon_cs_parser *p, struct radeon_bo *bo,
2445 unsigned offset, unsigned buf_sizes[])
2446 {
2447 @@ -436,50 +459,70 @@ static int radeon_uvd_cs_msg(struct radeon_cs_parser *p, struct radeon_bo *bo,
2448 return -EINVAL;
2449 }
2450
2451 - if (msg_type == 1) {
2452 - /* it's a decode msg, calc buffer sizes */
2453 - r = radeon_uvd_cs_msg_decode(msg, buf_sizes);
2454 - /* calc image size (width * height) */
2455 - img_size = msg[6] * msg[7];
2456 + switch (msg_type) {
2457 + case 0:
2458 + /* it's a create msg, calc image size (width * height) */
2459 + img_size = msg[7] * msg[8];
2460 +
2461 + r = radeon_uvd_validate_codec(p, msg[4]);
2462 + radeon_bo_kunmap(bo);
2463 + if (r)
2464 + return r;
2465 +
2466 + /* try to alloc a new handle */
2467 + for (i = 0; i < RADEON_MAX_UVD_HANDLES; ++i) {
2468 + if (atomic_read(&p->rdev->uvd.handles[i]) == handle) {
2469 + DRM_ERROR("Handle 0x%x already in use!\n", handle);
2470 + return -EINVAL;
2471 + }
2472 +
2473 + if (!atomic_cmpxchg(&p->rdev->uvd.handles[i], 0, handle)) {
2474 + p->rdev->uvd.filp[i] = p->filp;
2475 + p->rdev->uvd.img_size[i] = img_size;
2476 + return 0;
2477 + }
2478 + }
2479 +
2480 + DRM_ERROR("No more free UVD handles!\n");
2481 + return -EINVAL;
2482 +
2483 + case 1:
2484 + /* it's a decode msg, validate codec and calc buffer sizes */
2485 + r = radeon_uvd_validate_codec(p, msg[4]);
2486 + if (!r)
2487 + r = radeon_uvd_cs_msg_decode(msg, buf_sizes);
2488 radeon_bo_kunmap(bo);
2489 if (r)
2490 return r;
2491
2492 - } else if (msg_type == 2) {
2493 + /* validate the handle */
2494 + for (i = 0; i < RADEON_MAX_UVD_HANDLES; ++i) {
2495 + if (atomic_read(&p->rdev->uvd.handles[i]) == handle) {
2496 + if (p->rdev->uvd.filp[i] != p->filp) {
2497 + DRM_ERROR("UVD handle collision detected!\n");
2498 + return -EINVAL;
2499 + }
2500 + return 0;
2501 + }
2502 + }
2503 +
2504 + DRM_ERROR("Invalid UVD handle 0x%x!\n", handle);
2505 + return -ENOENT;
2506 +
2507 + case 2:
2508 /* it's a destroy msg, free the handle */
2509 for (i = 0; i < RADEON_MAX_UVD_HANDLES; ++i)
2510 atomic_cmpxchg(&p->rdev->uvd.handles[i], handle, 0);
2511 radeon_bo_kunmap(bo);
2512 return 0;
2513 - } else {
2514 - /* it's a create msg, calc image size (width * height) */
2515 - img_size = msg[7] * msg[8];
2516 - radeon_bo_kunmap(bo);
2517
2518 - if (msg_type != 0) {
2519 - DRM_ERROR("Illegal UVD message type (%d)!\n", msg_type);
2520 - return -EINVAL;
2521 - }
2522 -
2523 - /* it's a create msg, no special handling needed */
2524 - }
2525 -
2526 - /* create or decode, validate the handle */
2527 - for (i = 0; i < RADEON_MAX_UVD_HANDLES; ++i) {
2528 - if (atomic_read(&p->rdev->uvd.handles[i]) == handle)
2529 - return 0;
2530 - }
2531 + default:
2532
2533 - /* handle not found try to alloc a new one */
2534 - for (i = 0; i < RADEON_MAX_UVD_HANDLES; ++i) {
2535 - if (!atomic_cmpxchg(&p->rdev->uvd.handles[i], 0, handle)) {
2536 - p->rdev->uvd.filp[i] = p->filp;
2537 - p->rdev->uvd.img_size[i] = img_size;
2538 - return 0;
2539 - }
2540 + DRM_ERROR("Illegal UVD message type (%d)!\n", msg_type);
2541 + return -EINVAL;
2542 }
2543
2544 - DRM_ERROR("No more free UVD handles!\n");
2545 + BUG();
2546 return -EINVAL;
2547 }
2548
2549 diff --git a/drivers/gpu/drm/radeon/radeon_vce.c b/drivers/gpu/drm/radeon/radeon_vce.c
2550 index 9e85757d5599..1c0022a49486 100644
2551 --- a/drivers/gpu/drm/radeon/radeon_vce.c
2552 +++ b/drivers/gpu/drm/radeon/radeon_vce.c
2553 @@ -493,18 +493,27 @@ int radeon_vce_cs_reloc(struct radeon_cs_parser *p, int lo, int hi,
2554 *
2555 * @p: parser context
2556 * @handle: handle to validate
2557 + * @allocated: allocated a new handle?
2558 *
2559 * Validates the handle and return the found session index or -EINVAL
2560 * we we don't have another free session index.
2561 */
2562 -int radeon_vce_validate_handle(struct radeon_cs_parser *p, uint32_t handle)
2563 +static int radeon_vce_validate_handle(struct radeon_cs_parser *p,
2564 + uint32_t handle, bool *allocated)
2565 {
2566 unsigned i;
2567
2568 + *allocated = false;
2569 +
2570 /* validate the handle */
2571 for (i = 0; i < RADEON_MAX_VCE_HANDLES; ++i) {
2572 - if (atomic_read(&p->rdev->vce.handles[i]) == handle)
2573 + if (atomic_read(&p->rdev->vce.handles[i]) == handle) {
2574 + if (p->rdev->vce.filp[i] != p->filp) {
2575 + DRM_ERROR("VCE handle collision detected!\n");
2576 + return -EINVAL;
2577 + }
2578 return i;
2579 + }
2580 }
2581
2582 /* handle not found try to alloc a new one */
2583 @@ -512,6 +521,7 @@ int radeon_vce_validate_handle(struct radeon_cs_parser *p, uint32_t handle)
2584 if (!atomic_cmpxchg(&p->rdev->vce.handles[i], 0, handle)) {
2585 p->rdev->vce.filp[i] = p->filp;
2586 p->rdev->vce.img_size[i] = 0;
2587 + *allocated = true;
2588 return i;
2589 }
2590 }
2591 @@ -529,10 +539,10 @@ int radeon_vce_validate_handle(struct radeon_cs_parser *p, uint32_t handle)
2592 int radeon_vce_cs_parse(struct radeon_cs_parser *p)
2593 {
2594 int session_idx = -1;
2595 - bool destroyed = false;
2596 + bool destroyed = false, created = false, allocated = false;
2597 uint32_t tmp, handle = 0;
2598 uint32_t *size = &tmp;
2599 - int i, r;
2600 + int i, r = 0;
2601
2602 while (p->idx < p->chunks[p->chunk_ib_idx].length_dw) {
2603 uint32_t len = radeon_get_ib_value(p, p->idx);
2604 @@ -540,18 +550,21 @@ int radeon_vce_cs_parse(struct radeon_cs_parser *p)
2605
2606 if ((len < 8) || (len & 3)) {
2607 DRM_ERROR("invalid VCE command length (%d)!\n", len);
2608 - return -EINVAL;
2609 + r = -EINVAL;
2610 + goto out;
2611 }
2612
2613 if (destroyed) {
2614 DRM_ERROR("No other command allowed after destroy!\n");
2615 - return -EINVAL;
2616 + r = -EINVAL;
2617 + goto out;
2618 }
2619
2620 switch (cmd) {
2621 case 0x00000001: // session
2622 handle = radeon_get_ib_value(p, p->idx + 2);
2623 - session_idx = radeon_vce_validate_handle(p, handle);
2624 + session_idx = radeon_vce_validate_handle(p, handle,
2625 + &allocated);
2626 if (session_idx < 0)
2627 return session_idx;
2628 size = &p->rdev->vce.img_size[session_idx];
2629 @@ -561,6 +574,13 @@ int radeon_vce_cs_parse(struct radeon_cs_parser *p)
2630 break;
2631
2632 case 0x01000001: // create
2633 + created = true;
2634 + if (!allocated) {
2635 + DRM_ERROR("Handle already in use!\n");
2636 + r = -EINVAL;
2637 + goto out;
2638 + }
2639 +
2640 *size = radeon_get_ib_value(p, p->idx + 8) *
2641 radeon_get_ib_value(p, p->idx + 10) *
2642 8 * 3 / 2;
2643 @@ -577,12 +597,12 @@ int radeon_vce_cs_parse(struct radeon_cs_parser *p)
2644 r = radeon_vce_cs_reloc(p, p->idx + 10, p->idx + 9,
2645 *size);
2646 if (r)
2647 - return r;
2648 + goto out;
2649
2650 r = radeon_vce_cs_reloc(p, p->idx + 12, p->idx + 11,
2651 *size / 3);
2652 if (r)
2653 - return r;
2654 + goto out;
2655 break;
2656
2657 case 0x02000001: // destroy
2658 @@ -593,7 +613,7 @@ int radeon_vce_cs_parse(struct radeon_cs_parser *p)
2659 r = radeon_vce_cs_reloc(p, p->idx + 3, p->idx + 2,
2660 *size * 2);
2661 if (r)
2662 - return r;
2663 + goto out;
2664 break;
2665
2666 case 0x05000004: // video bitstream buffer
2667 @@ -601,36 +621,47 @@ int radeon_vce_cs_parse(struct radeon_cs_parser *p)
2668 r = radeon_vce_cs_reloc(p, p->idx + 3, p->idx + 2,
2669 tmp);
2670 if (r)
2671 - return r;
2672 + goto out;
2673 break;
2674
2675 case 0x05000005: // feedback buffer
2676 r = radeon_vce_cs_reloc(p, p->idx + 3, p->idx + 2,
2677 4096);
2678 if (r)
2679 - return r;
2680 + goto out;
2681 break;
2682
2683 default:
2684 DRM_ERROR("invalid VCE command (0x%x)!\n", cmd);
2685 - return -EINVAL;
2686 + r = -EINVAL;
2687 + goto out;
2688 }
2689
2690 if (session_idx == -1) {
2691 DRM_ERROR("no session command at start of IB\n");
2692 - return -EINVAL;
2693 + r = -EINVAL;
2694 + goto out;
2695 }
2696
2697 p->idx += len / 4;
2698 }
2699
2700 - if (destroyed) {
2701 - /* IB contains a destroy msg, free the handle */
2702 + if (allocated && !created) {
2703 + DRM_ERROR("New session without create command!\n");
2704 + r = -ENOENT;
2705 + }
2706 +
2707 +out:
2708 + if ((!r && destroyed) || (r && allocated)) {
2709 + /*
2710 + * IB contains a destroy msg or we have allocated an
2711 + * handle and got an error, anyway free the handle
2712 + */
2713 for (i = 0; i < RADEON_MAX_VCE_HANDLES; ++i)
2714 atomic_cmpxchg(&p->rdev->vce.handles[i], handle, 0);
2715 }
2716
2717 - return 0;
2718 + return r;
2719 }
2720
2721 /**
2722 diff --git a/drivers/gpu/drm/radeon/rv770d.h b/drivers/gpu/drm/radeon/rv770d.h
2723 index 3cf1e2921545..9ef2064b1c9c 100644
2724 --- a/drivers/gpu/drm/radeon/rv770d.h
2725 +++ b/drivers/gpu/drm/radeon/rv770d.h
2726 @@ -989,6 +989,9 @@
2727 ((n) & 0x3FFF) << 16)
2728
2729 /* UVD */
2730 +#define UVD_SEMA_ADDR_LOW 0xef00
2731 +#define UVD_SEMA_ADDR_HIGH 0xef04
2732 +#define UVD_SEMA_CMD 0xef08
2733 #define UVD_GPCOM_VCPU_CMD 0xef0c
2734 #define UVD_GPCOM_VCPU_DATA0 0xef10
2735 #define UVD_GPCOM_VCPU_DATA1 0xef14
2736 diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
2737 index 1c3d90c17cb3..3ad2e07fb48e 100644
2738 --- a/drivers/gpu/drm/radeon/si.c
2739 +++ b/drivers/gpu/drm/radeon/si.c
2740 @@ -4285,7 +4285,7 @@ static int si_pcie_gart_enable(struct radeon_device *rdev)
2741 /* empty context1-15 */
2742 /* set vm size, must be a multiple of 4 */
2743 WREG32(VM_CONTEXT1_PAGE_TABLE_START_ADDR, 0);
2744 - WREG32(VM_CONTEXT1_PAGE_TABLE_END_ADDR, rdev->vm_manager.max_pfn);
2745 + WREG32(VM_CONTEXT1_PAGE_TABLE_END_ADDR, rdev->vm_manager.max_pfn - 1);
2746 /* Assign the pt base to something valid for now; the pts used for
2747 * the VMs are determined by the application and setup and assigned
2748 * on the fly in the vm part of radeon_gart.c
2749 diff --git a/drivers/gpu/drm/radeon/uvd_v1_0.c b/drivers/gpu/drm/radeon/uvd_v1_0.c
2750 index e72b3cb59358..c6b1cbca47fc 100644
2751 --- a/drivers/gpu/drm/radeon/uvd_v1_0.c
2752 +++ b/drivers/gpu/drm/radeon/uvd_v1_0.c
2753 @@ -466,18 +466,8 @@ bool uvd_v1_0_semaphore_emit(struct radeon_device *rdev,
2754 struct radeon_semaphore *semaphore,
2755 bool emit_wait)
2756 {
2757 - uint64_t addr = semaphore->gpu_addr;
2758 -
2759 - radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_LOW, 0));
2760 - radeon_ring_write(ring, (addr >> 3) & 0x000FFFFF);
2761 -
2762 - radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_HIGH, 0));
2763 - radeon_ring_write(ring, (addr >> 23) & 0x000FFFFF);
2764 -
2765 - radeon_ring_write(ring, PACKET0(UVD_SEMA_CMD, 0));
2766 - radeon_ring_write(ring, emit_wait ? 1 : 0);
2767 -
2768 - return true;
2769 + /* disable semaphores for UVD V1 hardware */
2770 + return false;
2771 }
2772
2773 /**
2774 diff --git a/drivers/gpu/drm/radeon/uvd_v2_2.c b/drivers/gpu/drm/radeon/uvd_v2_2.c
2775 index 89193519f8a1..7ed778cec7c6 100644
2776 --- a/drivers/gpu/drm/radeon/uvd_v2_2.c
2777 +++ b/drivers/gpu/drm/radeon/uvd_v2_2.c
2778 @@ -60,6 +60,35 @@ void uvd_v2_2_fence_emit(struct radeon_device *rdev,
2779 }
2780
2781 /**
2782 + * uvd_v2_2_semaphore_emit - emit semaphore command
2783 + *
2784 + * @rdev: radeon_device pointer
2785 + * @ring: radeon_ring pointer
2786 + * @semaphore: semaphore to emit commands for
2787 + * @emit_wait: true if we should emit a wait command
2788 + *
2789 + * Emit a semaphore command (either wait or signal) to the UVD ring.
2790 + */
2791 +bool uvd_v2_2_semaphore_emit(struct radeon_device *rdev,
2792 + struct radeon_ring *ring,
2793 + struct radeon_semaphore *semaphore,
2794 + bool emit_wait)
2795 +{
2796 + uint64_t addr = semaphore->gpu_addr;
2797 +
2798 + radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_LOW, 0));
2799 + radeon_ring_write(ring, (addr >> 3) & 0x000FFFFF);
2800 +
2801 + radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_HIGH, 0));
2802 + radeon_ring_write(ring, (addr >> 23) & 0x000FFFFF);
2803 +
2804 + radeon_ring_write(ring, PACKET0(UVD_SEMA_CMD, 0));
2805 + radeon_ring_write(ring, emit_wait ? 1 : 0);
2806 +
2807 + return true;
2808 +}
2809 +
2810 +/**
2811 * uvd_v2_2_resume - memory controller programming
2812 *
2813 * @rdev: radeon_device pointer
2814 diff --git a/drivers/hwmon/nct6683.c b/drivers/hwmon/nct6683.c
2815 index 7710f4694ba1..718953bb657f 100644
2816 --- a/drivers/hwmon/nct6683.c
2817 +++ b/drivers/hwmon/nct6683.c
2818 @@ -439,6 +439,7 @@ nct6683_create_attr_group(struct device *dev, struct sensor_template_group *tg,
2819 (*t)->dev_attr.attr.name, tg->base + i);
2820 if ((*t)->s2) {
2821 a2 = &su->u.a2;
2822 + sysfs_attr_init(&a2->dev_attr.attr);
2823 a2->dev_attr.attr.name = su->name;
2824 a2->nr = (*t)->u.s.nr + i;
2825 a2->index = (*t)->u.s.index;
2826 @@ -449,6 +450,7 @@ nct6683_create_attr_group(struct device *dev, struct sensor_template_group *tg,
2827 *attrs = &a2->dev_attr.attr;
2828 } else {
2829 a = &su->u.a1;
2830 + sysfs_attr_init(&a->dev_attr.attr);
2831 a->dev_attr.attr.name = su->name;
2832 a->index = (*t)->u.index + i;
2833 a->dev_attr.attr.mode =
2834 diff --git a/drivers/hwmon/nct6775.c b/drivers/hwmon/nct6775.c
2835 index 504cbddbdd90..6461964f49a8 100644
2836 --- a/drivers/hwmon/nct6775.c
2837 +++ b/drivers/hwmon/nct6775.c
2838 @@ -985,6 +985,7 @@ nct6775_create_attr_group(struct device *dev, struct sensor_template_group *tg,
2839 (*t)->dev_attr.attr.name, tg->base + i);
2840 if ((*t)->s2) {
2841 a2 = &su->u.a2;
2842 + sysfs_attr_init(&a2->dev_attr.attr);
2843 a2->dev_attr.attr.name = su->name;
2844 a2->nr = (*t)->u.s.nr + i;
2845 a2->index = (*t)->u.s.index;
2846 @@ -995,6 +996,7 @@ nct6775_create_attr_group(struct device *dev, struct sensor_template_group *tg,
2847 *attrs = &a2->dev_attr.attr;
2848 } else {
2849 a = &su->u.a1;
2850 + sysfs_attr_init(&a->dev_attr.attr);
2851 a->dev_attr.attr.name = su->name;
2852 a->index = (*t)->u.index + i;
2853 a->dev_attr.attr.mode =
2854 diff --git a/drivers/hwmon/ntc_thermistor.c b/drivers/hwmon/ntc_thermistor.c
2855 index 4ff89b2482e4..31597c504879 100644
2856 --- a/drivers/hwmon/ntc_thermistor.c
2857 +++ b/drivers/hwmon/ntc_thermistor.c
2858 @@ -239,8 +239,10 @@ static struct ntc_thermistor_platform_data *
2859 ntc_thermistor_parse_dt(struct platform_device *pdev)
2860 {
2861 struct iio_channel *chan;
2862 + enum iio_chan_type type;
2863 struct device_node *np = pdev->dev.of_node;
2864 struct ntc_thermistor_platform_data *pdata;
2865 + int ret;
2866
2867 if (!np)
2868 return NULL;
2869 @@ -253,6 +255,13 @@ ntc_thermistor_parse_dt(struct platform_device *pdev)
2870 if (IS_ERR(chan))
2871 return ERR_CAST(chan);
2872
2873 + ret = iio_get_channel_type(chan, &type);
2874 + if (ret < 0)
2875 + return ERR_PTR(ret);
2876 +
2877 + if (type != IIO_VOLTAGE)
2878 + return ERR_PTR(-EINVAL);
2879 +
2880 if (of_property_read_u32(np, "pullup-uv", &pdata->pullup_uv))
2881 return ERR_PTR(-ENODEV);
2882 if (of_property_read_u32(np, "pullup-ohm", &pdata->pullup_ohm))
2883 diff --git a/drivers/iio/adc/xilinx-xadc-core.c b/drivers/iio/adc/xilinx-xadc-core.c
2884 index a221f7329b79..ce93bd8e3f68 100644
2885 --- a/drivers/iio/adc/xilinx-xadc-core.c
2886 +++ b/drivers/iio/adc/xilinx-xadc-core.c
2887 @@ -856,6 +856,7 @@ static int xadc_read_raw(struct iio_dev *indio_dev,
2888 switch (chan->address) {
2889 case XADC_REG_VCCINT:
2890 case XADC_REG_VCCAUX:
2891 + case XADC_REG_VREFP:
2892 case XADC_REG_VCCBRAM:
2893 case XADC_REG_VCCPINT:
2894 case XADC_REG_VCCPAUX:
2895 @@ -996,7 +997,7 @@ static const struct iio_event_spec xadc_voltage_events[] = {
2896 .num_event_specs = (_alarm) ? ARRAY_SIZE(xadc_voltage_events) : 0, \
2897 .scan_index = (_scan_index), \
2898 .scan_type = { \
2899 - .sign = 'u', \
2900 + .sign = ((_addr) == XADC_REG_VREFN) ? 's' : 'u', \
2901 .realbits = 12, \
2902 .storagebits = 16, \
2903 .shift = 4, \
2904 @@ -1008,7 +1009,7 @@ static const struct iio_event_spec xadc_voltage_events[] = {
2905 static const struct iio_chan_spec xadc_channels[] = {
2906 XADC_CHAN_TEMP(0, 8, XADC_REG_TEMP),
2907 XADC_CHAN_VOLTAGE(0, 9, XADC_REG_VCCINT, "vccint", true),
2908 - XADC_CHAN_VOLTAGE(1, 10, XADC_REG_VCCINT, "vccaux", true),
2909 + XADC_CHAN_VOLTAGE(1, 10, XADC_REG_VCCAUX, "vccaux", true),
2910 XADC_CHAN_VOLTAGE(2, 14, XADC_REG_VCCBRAM, "vccbram", true),
2911 XADC_CHAN_VOLTAGE(3, 5, XADC_REG_VCCPINT, "vccpint", true),
2912 XADC_CHAN_VOLTAGE(4, 6, XADC_REG_VCCPAUX, "vccpaux", true),
2913 diff --git a/drivers/iio/adc/xilinx-xadc.h b/drivers/iio/adc/xilinx-xadc.h
2914 index c7487e8d7f80..54adc5087210 100644
2915 --- a/drivers/iio/adc/xilinx-xadc.h
2916 +++ b/drivers/iio/adc/xilinx-xadc.h
2917 @@ -145,9 +145,9 @@ static inline int xadc_write_adc_reg(struct xadc *xadc, unsigned int reg,
2918 #define XADC_REG_MAX_VCCPINT 0x28
2919 #define XADC_REG_MAX_VCCPAUX 0x29
2920 #define XADC_REG_MAX_VCCO_DDR 0x2a
2921 -#define XADC_REG_MIN_VCCPINT 0x2b
2922 -#define XADC_REG_MIN_VCCPAUX 0x2c
2923 -#define XADC_REG_MIN_VCCO_DDR 0x2d
2924 +#define XADC_REG_MIN_VCCPINT 0x2c
2925 +#define XADC_REG_MIN_VCCPAUX 0x2d
2926 +#define XADC_REG_MIN_VCCO_DDR 0x2e
2927
2928 #define XADC_REG_CONF0 0x40
2929 #define XADC_REG_CONF1 0x41
2930 diff --git a/drivers/iio/light/hid-sensor-prox.c b/drivers/iio/light/hid-sensor-prox.c
2931 index f5a514698fd8..d403c988463c 100644
2932 --- a/drivers/iio/light/hid-sensor-prox.c
2933 +++ b/drivers/iio/light/hid-sensor-prox.c
2934 @@ -43,8 +43,6 @@ struct prox_state {
2935 static const struct iio_chan_spec prox_channels[] = {
2936 {
2937 .type = IIO_PROXIMITY,
2938 - .modified = 1,
2939 - .channel2 = IIO_NO_MOD,
2940 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
2941 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
2942 BIT(IIO_CHAN_INFO_SCALE) |
2943 diff --git a/drivers/iio/pressure/hid-sensor-press.c b/drivers/iio/pressure/hid-sensor-press.c
2944 index 764928682df2..127db532f35c 100644
2945 --- a/drivers/iio/pressure/hid-sensor-press.c
2946 +++ b/drivers/iio/pressure/hid-sensor-press.c
2947 @@ -47,8 +47,6 @@ struct press_state {
2948 static const struct iio_chan_spec press_channels[] = {
2949 {
2950 .type = IIO_PRESSURE,
2951 - .modified = 1,
2952 - .channel2 = IIO_NO_MOD,
2953 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
2954 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
2955 BIT(IIO_CHAN_INFO_SCALE) |
2956 diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
2957 index d570030d899c..06441a43c3aa 100644
2958 --- a/drivers/infiniband/core/cma.c
2959 +++ b/drivers/infiniband/core/cma.c
2960 @@ -859,19 +859,27 @@ static void cma_save_ib_info(struct rdma_cm_id *id, struct rdma_cm_id *listen_id
2961 memcpy(&ib->sib_addr, &path->dgid, 16);
2962 }
2963
2964 +static __be16 ss_get_port(const struct sockaddr_storage *ss)
2965 +{
2966 + if (ss->ss_family == AF_INET)
2967 + return ((struct sockaddr_in *)ss)->sin_port;
2968 + else if (ss->ss_family == AF_INET6)
2969 + return ((struct sockaddr_in6 *)ss)->sin6_port;
2970 + BUG();
2971 +}
2972 +
2973 static void cma_save_ip4_info(struct rdma_cm_id *id, struct rdma_cm_id *listen_id,
2974 struct cma_hdr *hdr)
2975 {
2976 - struct sockaddr_in *listen4, *ip4;
2977 + struct sockaddr_in *ip4;
2978
2979 - listen4 = (struct sockaddr_in *) &listen_id->route.addr.src_addr;
2980 ip4 = (struct sockaddr_in *) &id->route.addr.src_addr;
2981 - ip4->sin_family = listen4->sin_family;
2982 + ip4->sin_family = AF_INET;
2983 ip4->sin_addr.s_addr = hdr->dst_addr.ip4.addr;
2984 - ip4->sin_port = listen4->sin_port;
2985 + ip4->sin_port = ss_get_port(&listen_id->route.addr.src_addr);
2986
2987 ip4 = (struct sockaddr_in *) &id->route.addr.dst_addr;
2988 - ip4->sin_family = listen4->sin_family;
2989 + ip4->sin_family = AF_INET;
2990 ip4->sin_addr.s_addr = hdr->src_addr.ip4.addr;
2991 ip4->sin_port = hdr->port;
2992 }
2993 @@ -879,16 +887,15 @@ static void cma_save_ip4_info(struct rdma_cm_id *id, struct rdma_cm_id *listen_i
2994 static void cma_save_ip6_info(struct rdma_cm_id *id, struct rdma_cm_id *listen_id,
2995 struct cma_hdr *hdr)
2996 {
2997 - struct sockaddr_in6 *listen6, *ip6;
2998 + struct sockaddr_in6 *ip6;
2999
3000 - listen6 = (struct sockaddr_in6 *) &listen_id->route.addr.src_addr;
3001 ip6 = (struct sockaddr_in6 *) &id->route.addr.src_addr;
3002 - ip6->sin6_family = listen6->sin6_family;
3003 + ip6->sin6_family = AF_INET6;
3004 ip6->sin6_addr = hdr->dst_addr.ip6;
3005 - ip6->sin6_port = listen6->sin6_port;
3006 + ip6->sin6_port = ss_get_port(&listen_id->route.addr.src_addr);
3007
3008 ip6 = (struct sockaddr_in6 *) &id->route.addr.dst_addr;
3009 - ip6->sin6_family = listen6->sin6_family;
3010 + ip6->sin6_family = AF_INET6;
3011 ip6->sin6_addr = hdr->src_addr.ip6;
3012 ip6->sin6_port = hdr->port;
3013 }
3014 diff --git a/drivers/infiniband/core/iwpm_msg.c b/drivers/infiniband/core/iwpm_msg.c
3015 index b85ddbc979e0..e5558b2660f2 100644
3016 --- a/drivers/infiniband/core/iwpm_msg.c
3017 +++ b/drivers/infiniband/core/iwpm_msg.c
3018 @@ -33,7 +33,7 @@
3019
3020 #include "iwpm_util.h"
3021
3022 -static const char iwpm_ulib_name[] = "iWarpPortMapperUser";
3023 +static const char iwpm_ulib_name[IWPM_ULIBNAME_SIZE] = "iWarpPortMapperUser";
3024 static int iwpm_ulib_version = 3;
3025 static int iwpm_user_pid = IWPM_PID_UNDEFINED;
3026 static atomic_t echo_nlmsg_seq;
3027 diff --git a/drivers/lguest/core.c b/drivers/lguest/core.c
3028 index 6590558d1d31..ed70f1e72b24 100644
3029 --- a/drivers/lguest/core.c
3030 +++ b/drivers/lguest/core.c
3031 @@ -173,7 +173,7 @@ static void unmap_switcher(void)
3032 bool lguest_address_ok(const struct lguest *lg,
3033 unsigned long addr, unsigned long len)
3034 {
3035 - return (addr+len) / PAGE_SIZE < lg->pfn_limit && (addr+len >= addr);
3036 + return addr+len <= lg->pfn_limit * PAGE_SIZE && (addr+len >= addr);
3037 }
3038
3039 /*
3040 diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
3041 index a9f2266049af..08981be7baa1 100644
3042 --- a/drivers/md/dm-crypt.c
3043 +++ b/drivers/md/dm-crypt.c
3044 @@ -920,10 +920,11 @@ static int crypt_convert(struct crypt_config *cc,
3045
3046 switch (r) {
3047 /* async */
3048 - case -EINPROGRESS:
3049 case -EBUSY:
3050 wait_for_completion(&ctx->restart);
3051 reinit_completion(&ctx->restart);
3052 + /* fall through*/
3053 + case -EINPROGRESS:
3054 ctx->req = NULL;
3055 ctx->cc_sector++;
3056 continue;
3057 @@ -1314,8 +1315,10 @@ static void kcryptd_async_done(struct crypto_async_request *async_req,
3058 struct dm_crypt_io *io = container_of(ctx, struct dm_crypt_io, ctx);
3059 struct crypt_config *cc = io->cc;
3060
3061 - if (error == -EINPROGRESS)
3062 + if (error == -EINPROGRESS) {
3063 + complete(&ctx->restart);
3064 return;
3065 + }
3066
3067 if (!error && cc->iv_gen_ops && cc->iv_gen_ops->post)
3068 error = cc->iv_gen_ops->post(cc, iv_of_dmreq(cc, dmreq), dmreq);
3069 @@ -1326,15 +1329,12 @@ static void kcryptd_async_done(struct crypto_async_request *async_req,
3070 crypt_free_req(cc, req_of_dmreq(cc, dmreq), io->base_bio);
3071
3072 if (!atomic_dec_and_test(&ctx->cc_pending))
3073 - goto done;
3074 + return;
3075
3076 if (bio_data_dir(io->base_bio) == READ)
3077 kcryptd_crypt_read_done(io);
3078 else
3079 kcryptd_crypt_write_io_submit(io, 1);
3080 -done:
3081 - if (!completion_done(&ctx->restart))
3082 - complete(&ctx->restart);
3083 }
3084
3085 static void kcryptd_crypt(struct work_struct *work)
3086 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
3087 index 8577cc7db47e..e421016bab77 100644
3088 --- a/drivers/md/raid5.c
3089 +++ b/drivers/md/raid5.c
3090 @@ -1936,7 +1936,8 @@ static int resize_stripes(struct r5conf *conf, int newsize)
3091
3092 conf->slab_cache = sc;
3093 conf->active_name = 1-conf->active_name;
3094 - conf->pool_size = newsize;
3095 + if (!err)
3096 + conf->pool_size = newsize;
3097 return err;
3098 }
3099
3100 diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
3101 index a11451f4f408..a19a18f0058a 100644
3102 --- a/drivers/mmc/card/block.c
3103 +++ b/drivers/mmc/card/block.c
3104 @@ -1025,6 +1025,18 @@ static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type)
3105 md->reset_done &= ~type;
3106 }
3107
3108 +int mmc_access_rpmb(struct mmc_queue *mq)
3109 +{
3110 + struct mmc_blk_data *md = mq->data;
3111 + /*
3112 + * If this is a RPMB partition access, return ture
3113 + */
3114 + if (md && md->part_type == EXT_CSD_PART_CONFIG_ACC_RPMB)
3115 + return true;
3116 +
3117 + return false;
3118 +}
3119 +
3120 static int mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req)
3121 {
3122 struct mmc_blk_data *md = mq->data;
3123 diff --git a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c
3124 index cfa6110632c3..7a41a221d248 100644
3125 --- a/drivers/mmc/card/queue.c
3126 +++ b/drivers/mmc/card/queue.c
3127 @@ -38,7 +38,7 @@ static int mmc_prep_request(struct request_queue *q, struct request *req)
3128 return BLKPREP_KILL;
3129 }
3130
3131 - if (mq && mmc_card_removed(mq->card))
3132 + if (mq && (mmc_card_removed(mq->card) || mmc_access_rpmb(mq)))
3133 return BLKPREP_KILL;
3134
3135 req->cmd_flags |= REQ_DONTPREP;
3136 diff --git a/drivers/mmc/card/queue.h b/drivers/mmc/card/queue.h
3137 index 5752d50049a3..99e6521e6169 100644
3138 --- a/drivers/mmc/card/queue.h
3139 +++ b/drivers/mmc/card/queue.h
3140 @@ -73,4 +73,6 @@ extern void mmc_queue_bounce_post(struct mmc_queue_req *);
3141 extern int mmc_packed_init(struct mmc_queue *, struct mmc_card *);
3142 extern void mmc_packed_clean(struct mmc_queue *);
3143
3144 +extern int mmc_access_rpmb(struct mmc_queue *);
3145 +
3146 #endif
3147 diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
3148 index f26a5f1d926d..297b4f912c2d 100644
3149 --- a/drivers/mmc/core/core.c
3150 +++ b/drivers/mmc/core/core.c
3151 @@ -2615,6 +2615,7 @@ int mmc_pm_notify(struct notifier_block *notify_block,
3152 switch (mode) {
3153 case PM_HIBERNATION_PREPARE:
3154 case PM_SUSPEND_PREPARE:
3155 + case PM_RESTORE_PREPARE:
3156 spin_lock_irqsave(&host->lock, flags);
3157 host->rescan_disable = 1;
3158 spin_unlock_irqrestore(&host->lock, flags);
3159 diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
3160 index 77250d4b1979..6423083c5238 100644
3161 --- a/drivers/mmc/host/atmel-mci.c
3162 +++ b/drivers/mmc/host/atmel-mci.c
3163 @@ -1295,7 +1295,7 @@ static void atmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
3164
3165 if (ios->clock) {
3166 unsigned int clock_min = ~0U;
3167 - u32 clkdiv;
3168 + int clkdiv;
3169
3170 clk_prepare(host->mck);
3171 unprepare_clk = true;
3172 @@ -1324,7 +1324,12 @@ static void atmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
3173 /* Calculate clock divider */
3174 if (host->caps.has_odd_clk_div) {
3175 clkdiv = DIV_ROUND_UP(host->bus_hz, clock_min) - 2;
3176 - if (clkdiv > 511) {
3177 + if (clkdiv < 0) {
3178 + dev_warn(&mmc->class_dev,
3179 + "clock %u too fast; using %lu\n",
3180 + clock_min, host->bus_hz / 2);
3181 + clkdiv = 0;
3182 + } else if (clkdiv > 511) {
3183 dev_warn(&mmc->class_dev,
3184 "clock %u too slow; using %lu\n",
3185 clock_min, host->bus_hz / (511 + 2));
3186 diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c
3187 index 7d9d6a321521..5165ae75d540 100644
3188 --- a/drivers/mmc/host/sh_mmcif.c
3189 +++ b/drivers/mmc/host/sh_mmcif.c
3190 @@ -1402,7 +1402,7 @@ static int sh_mmcif_probe(struct platform_device *pdev)
3191 host = mmc_priv(mmc);
3192 host->mmc = mmc;
3193 host->addr = reg;
3194 - host->timeout = msecs_to_jiffies(1000);
3195 + host->timeout = msecs_to_jiffies(10000);
3196 host->ccs_enable = !pd || !pd->ccs_unsupported;
3197 host->clk_ctrl2_enable = pd && pd->clk_ctrl2_present;
3198
3199 diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
3200 index dd2f3f8baa9d..c943baa4e9f1 100644
3201 --- a/drivers/net/wireless/iwlwifi/pcie/trans.c
3202 +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
3203 @@ -5,8 +5,8 @@
3204 *
3205 * GPL LICENSE SUMMARY
3206 *
3207 - * Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved.
3208 - * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
3209 + * Copyright(c) 2007 - 2015 Intel Corporation. All rights reserved.
3210 + * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
3211 *
3212 * This program is free software; you can redistribute it and/or modify
3213 * it under the terms of version 2 of the GNU General Public License as
3214 @@ -31,8 +31,8 @@
3215 *
3216 * BSD LICENSE
3217 *
3218 - * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved.
3219 - * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
3220 + * Copyright(c) 2005 - 2015 Intel Corporation. All rights reserved.
3221 + * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
3222 * All rights reserved.
3223 *
3224 * Redistribution and use in source and binary forms, with or without
3225 @@ -98,7 +98,7 @@ static void iwl_pcie_free_fw_monitor(struct iwl_trans *trans)
3226 static void iwl_pcie_alloc_fw_monitor(struct iwl_trans *trans)
3227 {
3228 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
3229 - struct page *page;
3230 + struct page *page = NULL;
3231 dma_addr_t phys;
3232 u32 size;
3233 u8 power;
3234 @@ -125,6 +125,7 @@ static void iwl_pcie_alloc_fw_monitor(struct iwl_trans *trans)
3235 DMA_FROM_DEVICE);
3236 if (dma_mapping_error(trans->dev, phys)) {
3237 __free_pages(page, order);
3238 + page = NULL;
3239 continue;
3240 }
3241 IWL_INFO(trans,
3242 diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
3243 index 8444313eabe2..8694dddcce9a 100644
3244 --- a/drivers/net/wireless/rt2x00/rt2800usb.c
3245 +++ b/drivers/net/wireless/rt2x00/rt2800usb.c
3246 @@ -1040,6 +1040,7 @@ static struct usb_device_id rt2800usb_device_table[] = {
3247 { USB_DEVICE(0x07d1, 0x3c17) },
3248 { USB_DEVICE(0x2001, 0x3317) },
3249 { USB_DEVICE(0x2001, 0x3c1b) },
3250 + { USB_DEVICE(0x2001, 0x3c25) },
3251 /* Draytek */
3252 { USB_DEVICE(0x07fa, 0x7712) },
3253 /* DVICO */
3254 diff --git a/drivers/net/wireless/rtlwifi/usb.c b/drivers/net/wireless/rtlwifi/usb.c
3255 index 46ee956d0235..27cd6cabf6c5 100644
3256 --- a/drivers/net/wireless/rtlwifi/usb.c
3257 +++ b/drivers/net/wireless/rtlwifi/usb.c
3258 @@ -126,7 +126,7 @@ static int _usbctrl_vendorreq_sync_read(struct usb_device *udev, u8 request,
3259
3260 do {
3261 status = usb_control_msg(udev, pipe, request, reqtype, value,
3262 - index, pdata, len, 0); /*max. timeout*/
3263 + index, pdata, len, 1000);
3264 if (status < 0) {
3265 /* firmware download is checksumed, don't retry */
3266 if ((value >= FW_8192C_START_ADDRESS &&
3267 diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
3268 index 89dca77ca038..18ee2089df4a 100644
3269 --- a/drivers/pinctrl/core.c
3270 +++ b/drivers/pinctrl/core.c
3271 @@ -1110,7 +1110,7 @@ void devm_pinctrl_put(struct pinctrl *p)
3272 EXPORT_SYMBOL_GPL(devm_pinctrl_put);
3273
3274 int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
3275 - bool dup, bool locked)
3276 + bool dup)
3277 {
3278 int i, ret;
3279 struct pinctrl_maps *maps_node;
3280 @@ -1178,11 +1178,9 @@ int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
3281 maps_node->maps = maps;
3282 }
3283
3284 - if (!locked)
3285 - mutex_lock(&pinctrl_maps_mutex);
3286 + mutex_lock(&pinctrl_maps_mutex);
3287 list_add_tail(&maps_node->node, &pinctrl_maps);
3288 - if (!locked)
3289 - mutex_unlock(&pinctrl_maps_mutex);
3290 + mutex_unlock(&pinctrl_maps_mutex);
3291
3292 return 0;
3293 }
3294 @@ -1197,7 +1195,7 @@ int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
3295 int pinctrl_register_mappings(struct pinctrl_map const *maps,
3296 unsigned num_maps)
3297 {
3298 - return pinctrl_register_map(maps, num_maps, true, false);
3299 + return pinctrl_register_map(maps, num_maps, true);
3300 }
3301
3302 void pinctrl_unregister_map(struct pinctrl_map const *map)
3303 diff --git a/drivers/pinctrl/core.h b/drivers/pinctrl/core.h
3304 index 75476b3d87da..b24ea846c867 100644
3305 --- a/drivers/pinctrl/core.h
3306 +++ b/drivers/pinctrl/core.h
3307 @@ -183,7 +183,7 @@ static inline struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev,
3308 }
3309
3310 int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
3311 - bool dup, bool locked);
3312 + bool dup);
3313 void pinctrl_unregister_map(struct pinctrl_map const *map);
3314
3315 extern int pinctrl_force_sleep(struct pinctrl_dev *pctldev);
3316 diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c
3317 index eda13de2e7c0..0bbf7d71b281 100644
3318 --- a/drivers/pinctrl/devicetree.c
3319 +++ b/drivers/pinctrl/devicetree.c
3320 @@ -92,7 +92,7 @@ static int dt_remember_or_free_map(struct pinctrl *p, const char *statename,
3321 dt_map->num_maps = num_maps;
3322 list_add_tail(&dt_map->node, &p->dt_maps);
3323
3324 - return pinctrl_register_map(map, num_maps, false, true);
3325 + return pinctrl_register_map(map, num_maps, false);
3326 }
3327
3328 struct pinctrl_dev *of_pinctrl_get(struct device_node *np)
3329 diff --git a/drivers/power/reset/at91-reset.c b/drivers/power/reset/at91-reset.c
3330 index 3cb36693343a..80d490da9a45 100644
3331 --- a/drivers/power/reset/at91-reset.c
3332 +++ b/drivers/power/reset/at91-reset.c
3333 @@ -205,9 +205,9 @@ static int at91_reset_platform_probe(struct platform_device *pdev)
3334 res = platform_get_resource(pdev, IORESOURCE_MEM, idx + 1 );
3335 at91_ramc_base[idx] = devm_ioremap(&pdev->dev, res->start,
3336 resource_size(res));
3337 - if (IS_ERR(at91_ramc_base[idx])) {
3338 + if (!at91_ramc_base[idx]) {
3339 dev_err(&pdev->dev, "Could not map ram controller address\n");
3340 - return PTR_ERR(at91_ramc_base[idx]);
3341 + return -ENOMEM;
3342 }
3343 }
3344
3345 diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
3346 index 7a4d88c91069..ce382e858452 100644
3347 --- a/drivers/scsi/sd.c
3348 +++ b/drivers/scsi/sd.c
3349 @@ -1634,6 +1634,7 @@ static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
3350 {
3351 u64 start_lba = blk_rq_pos(scmd->request);
3352 u64 end_lba = blk_rq_pos(scmd->request) + (scsi_bufflen(scmd) / 512);
3353 + u64 factor = scmd->device->sector_size / 512;
3354 u64 bad_lba;
3355 int info_valid;
3356 /*
3357 @@ -1655,16 +1656,9 @@ static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
3358 if (scsi_bufflen(scmd) <= scmd->device->sector_size)
3359 return 0;
3360
3361 - if (scmd->device->sector_size < 512) {
3362 - /* only legitimate sector_size here is 256 */
3363 - start_lba <<= 1;
3364 - end_lba <<= 1;
3365 - } else {
3366 - /* be careful ... don't want any overflows */
3367 - unsigned int factor = scmd->device->sector_size / 512;
3368 - do_div(start_lba, factor);
3369 - do_div(end_lba, factor);
3370 - }
3371 + /* be careful ... don't want any overflows */
3372 + do_div(start_lba, factor);
3373 + do_div(end_lba, factor);
3374
3375 /* The bad lba was reported incorrectly, we have no idea where
3376 * the error is.
3377 @@ -2231,8 +2225,7 @@ got_data:
3378 if (sector_size != 512 &&
3379 sector_size != 1024 &&
3380 sector_size != 2048 &&
3381 - sector_size != 4096 &&
3382 - sector_size != 256) {
3383 + sector_size != 4096) {
3384 sd_printk(KERN_NOTICE, sdkp, "Unsupported sector size %d.\n",
3385 sector_size);
3386 /*
3387 @@ -2287,8 +2280,6 @@ got_data:
3388 sdkp->capacity <<= 2;
3389 else if (sector_size == 1024)
3390 sdkp->capacity <<= 1;
3391 - else if (sector_size == 256)
3392 - sdkp->capacity >>= 1;
3393
3394 blk_queue_physical_block_size(sdp->request_queue,
3395 sdkp->physical_block_size);
3396 diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
3397 index 4534d9debcdc..e511e3406cfa 100644
3398 --- a/drivers/scsi/storvsc_drv.c
3399 +++ b/drivers/scsi/storvsc_drv.c
3400 @@ -1623,8 +1623,7 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
3401 break;
3402 default:
3403 vm_srb->data_in = UNKNOWN_TYPE;
3404 - vm_srb->win8_extension.srb_flags |= (SRB_FLAGS_DATA_IN |
3405 - SRB_FLAGS_DATA_OUT);
3406 + vm_srb->win8_extension.srb_flags |= SRB_FLAGS_NO_DATA_TRANSFER;
3407 break;
3408 }
3409
3410 diff --git a/drivers/staging/gdm724x/gdm_mux.c b/drivers/staging/gdm724x/gdm_mux.c
3411 index b5b063a738f8..fe410445a1af 100644
3412 --- a/drivers/staging/gdm724x/gdm_mux.c
3413 +++ b/drivers/staging/gdm724x/gdm_mux.c
3414 @@ -158,7 +158,7 @@ static int up_to_host(struct mux_rx *r)
3415 unsigned int start_flag;
3416 unsigned int payload_size;
3417 unsigned short packet_type;
3418 - int dummy_cnt;
3419 + int total_len;
3420 u32 packet_size_sum = r->offset;
3421 int index;
3422 int ret = TO_HOST_INVALID_PACKET;
3423 @@ -176,10 +176,10 @@ static int up_to_host(struct mux_rx *r)
3424 break;
3425 }
3426
3427 - dummy_cnt = ALIGN(MUX_HEADER_SIZE + payload_size, 4);
3428 + total_len = ALIGN(MUX_HEADER_SIZE + payload_size, 4);
3429
3430 if (len - packet_size_sum <
3431 - MUX_HEADER_SIZE + payload_size + dummy_cnt) {
3432 + total_len) {
3433 pr_err("invalid payload : %d %d %04x\n",
3434 payload_size, len, packet_type);
3435 break;
3436 @@ -202,7 +202,7 @@ static int up_to_host(struct mux_rx *r)
3437 break;
3438 }
3439
3440 - packet_size_sum += MUX_HEADER_SIZE + payload_size + dummy_cnt;
3441 + packet_size_sum += total_len;
3442 if (len - packet_size_sum <= MUX_HEADER_SIZE + 2) {
3443 ret = r->callback(NULL,
3444 0,
3445 @@ -361,7 +361,6 @@ static int gdm_mux_send(void *priv_dev, void *data, int len, int tty_index,
3446 struct mux_pkt_header *mux_header;
3447 struct mux_tx *t = NULL;
3448 static u32 seq_num = 1;
3449 - int dummy_cnt;
3450 int total_len;
3451 int ret;
3452 unsigned long flags;
3453 @@ -374,9 +373,7 @@ static int gdm_mux_send(void *priv_dev, void *data, int len, int tty_index,
3454
3455 spin_lock_irqsave(&mux_dev->write_lock, flags);
3456
3457 - dummy_cnt = ALIGN(MUX_HEADER_SIZE + len, 4);
3458 -
3459 - total_len = len + MUX_HEADER_SIZE + dummy_cnt;
3460 + total_len = ALIGN(MUX_HEADER_SIZE + len, 4);
3461
3462 t = alloc_mux_tx(total_len);
3463 if (!t) {
3464 @@ -392,7 +389,8 @@ static int gdm_mux_send(void *priv_dev, void *data, int len, int tty_index,
3465 mux_header->packet_type = __cpu_to_le16(packet_type[tty_index]);
3466
3467 memcpy(t->buf+MUX_HEADER_SIZE, data, len);
3468 - memset(t->buf+MUX_HEADER_SIZE+len, 0, dummy_cnt);
3469 + memset(t->buf+MUX_HEADER_SIZE+len, 0, total_len - MUX_HEADER_SIZE -
3470 + len);
3471
3472 t->len = total_len;
3473 t->callback = cb;
3474 diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c
3475 index ea5140ab2b41..b3500fd31394 100644
3476 --- a/drivers/staging/vt6656/rxtx.c
3477 +++ b/drivers/staging/vt6656/rxtx.c
3478 @@ -800,10 +800,18 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb)
3479 vnt_schedule_command(priv, WLAN_CMD_SETPOWER);
3480 }
3481
3482 - if (current_rate > RATE_11M)
3483 - pkt_type = priv->packet_type;
3484 - else
3485 + if (current_rate > RATE_11M) {
3486 + if (info->band == IEEE80211_BAND_5GHZ) {
3487 + pkt_type = PK_TYPE_11A;
3488 + } else {
3489 + if (tx_rate->flags & IEEE80211_TX_RC_USE_CTS_PROTECT)
3490 + pkt_type = PK_TYPE_11GB;
3491 + else
3492 + pkt_type = PK_TYPE_11GA;
3493 + }
3494 + } else {
3495 pkt_type = PK_TYPE_11B;
3496 + }
3497
3498 spin_lock_irqsave(&priv->lock, flags);
3499
3500 diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
3501 index 9a54381e23c6..3ee77db03cb7 100644
3502 --- a/drivers/target/target_core_pscsi.c
3503 +++ b/drivers/target/target_core_pscsi.c
3504 @@ -520,6 +520,7 @@ static int pscsi_configure_device(struct se_device *dev)
3505 " pdv_host_id: %d\n", pdv->pdv_host_id);
3506 return -EINVAL;
3507 }
3508 + pdv->pdv_lld_host = sh;
3509 }
3510 } else {
3511 if (phv->phv_mode == PHV_VIRTUAL_HOST_ID) {
3512 @@ -602,6 +603,8 @@ static void pscsi_free_device(struct se_device *dev)
3513 if ((phv->phv_mode == PHV_LLD_SCSI_HOST_NO) &&
3514 (phv->phv_lld_host != NULL))
3515 scsi_host_put(phv->phv_lld_host);
3516 + else if (pdv->pdv_lld_host)
3517 + scsi_host_put(pdv->pdv_lld_host);
3518
3519 if ((sd->type == TYPE_DISK) || (sd->type == TYPE_ROM))
3520 scsi_device_put(sd);
3521 diff --git a/drivers/target/target_core_pscsi.h b/drivers/target/target_core_pscsi.h
3522 index 1bd757dff8ee..820d3052b775 100644
3523 --- a/drivers/target/target_core_pscsi.h
3524 +++ b/drivers/target/target_core_pscsi.h
3525 @@ -45,6 +45,7 @@ struct pscsi_dev_virt {
3526 int pdv_lun_id;
3527 struct block_device *pdv_bd;
3528 struct scsi_device *pdv_sd;
3529 + struct Scsi_Host *pdv_lld_host;
3530 } ____cacheline_aligned;
3531
3532 typedef enum phv_modes {
3533 diff --git a/drivers/thermal/armada_thermal.c b/drivers/thermal/armada_thermal.c
3534 index 9d1420acb391..e6f1acc71996 100644
3535 --- a/drivers/thermal/armada_thermal.c
3536 +++ b/drivers/thermal/armada_thermal.c
3537 @@ -240,9 +240,9 @@ static const struct armada_thermal_data armada380_data = {
3538 .is_valid_shift = 10,
3539 .temp_shift = 0,
3540 .temp_mask = 0x3ff,
3541 - .coef_b = 1169498786UL,
3542 - .coef_m = 2000000UL,
3543 - .coef_div = 4289,
3544 + .coef_b = 2931108200UL,
3545 + .coef_m = 5000000UL,
3546 + .coef_div = 10502,
3547 .inverted = true,
3548 };
3549
3550 diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
3551 index f1e57425e39f..7a3d146a5f0e 100644
3552 --- a/drivers/tty/hvc/hvc_xen.c
3553 +++ b/drivers/tty/hvc/hvc_xen.c
3554 @@ -289,7 +289,7 @@ static int xen_initial_domain_console_init(void)
3555 return -ENOMEM;
3556 }
3557
3558 - info->irq = bind_virq_to_irq(VIRQ_CONSOLE, 0);
3559 + info->irq = bind_virq_to_irq(VIRQ_CONSOLE, 0, false);
3560 info->vtermno = HVC_COOKIE;
3561
3562 spin_lock(&xencons_lock);
3563 @@ -299,11 +299,27 @@ static int xen_initial_domain_console_init(void)
3564 return 0;
3565 }
3566
3567 +static void xen_console_update_evtchn(struct xencons_info *info)
3568 +{
3569 + if (xen_hvm_domain()) {
3570 + uint64_t v;
3571 + int err;
3572 +
3573 + err = hvm_get_parameter(HVM_PARAM_CONSOLE_EVTCHN, &v);
3574 + if (!err && v)
3575 + info->evtchn = v;
3576 + } else
3577 + info->evtchn = xen_start_info->console.domU.evtchn;
3578 +}
3579 +
3580 void xen_console_resume(void)
3581 {
3582 struct xencons_info *info = vtermno_to_xencons(HVC_COOKIE);
3583 - if (info != NULL && info->irq)
3584 + if (info != NULL && info->irq) {
3585 + if (!xen_initial_domain())
3586 + xen_console_update_evtchn(info);
3587 rebind_evtchn_irq(info->evtchn, info->irq);
3588 + }
3589 }
3590
3591 static void xencons_disconnect_backend(struct xencons_info *info)
3592 diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
3593 index c4343764cc5b..bce16e405d59 100644
3594 --- a/drivers/tty/n_gsm.c
3595 +++ b/drivers/tty/n_gsm.c
3596 @@ -3170,7 +3170,7 @@ static int gsmtty_break_ctl(struct tty_struct *tty, int state)
3597 return gsmtty_modem_update(dlci, encode);
3598 }
3599
3600 -static void gsmtty_remove(struct tty_driver *driver, struct tty_struct *tty)
3601 +static void gsmtty_cleanup(struct tty_struct *tty)
3602 {
3603 struct gsm_dlci *dlci = tty->driver_data;
3604 struct gsm_mux *gsm = dlci->gsm;
3605 @@ -3178,7 +3178,6 @@ static void gsmtty_remove(struct tty_driver *driver, struct tty_struct *tty)
3606 dlci_put(dlci);
3607 dlci_put(gsm->dlci[0]);
3608 mux_put(gsm);
3609 - driver->ttys[tty->index] = NULL;
3610 }
3611
3612 /* Virtual ttys for the demux */
3613 @@ -3199,7 +3198,7 @@ static const struct tty_operations gsmtty_ops = {
3614 .tiocmget = gsmtty_tiocmget,
3615 .tiocmset = gsmtty_tiocmset,
3616 .break_ctl = gsmtty_break_ctl,
3617 - .remove = gsmtty_remove,
3618 + .cleanup = gsmtty_cleanup,
3619 };
3620
3621
3622 diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
3623 index 28d3dd3637b3..a7e1a96e69a5 100644
3624 --- a/drivers/usb/gadget/configfs.c
3625 +++ b/drivers/usb/gadget/configfs.c
3626 @@ -1295,6 +1295,7 @@ static void purge_configs_funcs(struct gadget_info *gi)
3627 }
3628 }
3629 c->next_interface_id = 0;
3630 + memset(c->interface, 0, sizeof(c->interface));
3631 c->superspeed = 0;
3632 c->highspeed = 0;
3633 c->fullspeed = 0;
3634 diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
3635 index 3307e161c100..9848a67ddbbe 100644
3636 --- a/drivers/usb/host/xhci-ring.c
3637 +++ b/drivers/usb/host/xhci-ring.c
3638 @@ -2037,8 +2037,13 @@ static int process_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td,
3639 break;
3640 case COMP_DEV_ERR:
3641 case COMP_STALL:
3642 + frame->status = -EPROTO;
3643 + skip_td = true;
3644 + break;
3645 case COMP_TX_ERR:
3646 frame->status = -EPROTO;
3647 + if (event_trb != td->last_trb)
3648 + return 0;
3649 skip_td = true;
3650 break;
3651 case COMP_STOP:
3652 @@ -2651,7 +2656,7 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd)
3653 xhci_halt(xhci);
3654 hw_died:
3655 spin_unlock(&xhci->lock);
3656 - return -ESHUTDOWN;
3657 + return IRQ_HANDLED;
3658 }
3659
3660 /*
3661 diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
3662 index 94251141adae..54f386f80970 100644
3663 --- a/drivers/usb/host/xhci.h
3664 +++ b/drivers/usb/host/xhci.h
3665 @@ -1267,7 +1267,7 @@ union xhci_trb {
3666 * since the command ring is 64-byte aligned.
3667 * It must also be greater than 16.
3668 */
3669 -#define TRBS_PER_SEGMENT 64
3670 +#define TRBS_PER_SEGMENT 256
3671 /* Allow two commands + a link TRB, along with any reserved command TRBs */
3672 #define MAX_RSVD_CMD_TRBS (TRBS_PER_SEGMENT - 3)
3673 #define TRB_SEGMENT_SIZE (TRBS_PER_SEGMENT*16)
3674 diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
3675 index 84ce2d74894c..9031750e7404 100644
3676 --- a/drivers/usb/serial/cp210x.c
3677 +++ b/drivers/usb/serial/cp210x.c
3678 @@ -127,6 +127,7 @@ static const struct usb_device_id id_table[] = {
3679 { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */
3680 { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */
3681 { USB_DEVICE(0x10C4, 0x8977) }, /* CEL MeshWorks DevKit Device */
3682 + { USB_DEVICE(0x10C4, 0x8998) }, /* KCF Technologies PRN */
3683 { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
3684 { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
3685 { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
3686 diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
3687 index 0f872e6b2c87..534c308c6b33 100644
3688 --- a/drivers/usb/serial/pl2303.c
3689 +++ b/drivers/usb/serial/pl2303.c
3690 @@ -61,7 +61,6 @@ static const struct usb_device_id id_table[] = {
3691 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
3692 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
3693 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
3694 - { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
3695 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1),
3696 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
3697 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65),
3698 diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
3699 index 71fd9da1d6e7..e3b7af8adfb7 100644
3700 --- a/drivers/usb/serial/pl2303.h
3701 +++ b/drivers/usb/serial/pl2303.h
3702 @@ -62,10 +62,6 @@
3703 #define ALCATEL_VENDOR_ID 0x11f7
3704 #define ALCATEL_PRODUCT_ID 0x02df
3705
3706 -/* Samsung I330 phone cradle */
3707 -#define SAMSUNG_VENDOR_ID 0x04e8
3708 -#define SAMSUNG_PRODUCT_ID 0x8001
3709 -
3710 #define SIEMENS_VENDOR_ID 0x11f5
3711 #define SIEMENS_PRODUCT_ID_SX1 0x0001
3712 #define SIEMENS_PRODUCT_ID_X65 0x0003
3713 diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
3714 index bf2bd40e5f2a..60afb39eb73c 100644
3715 --- a/drivers/usb/serial/visor.c
3716 +++ b/drivers/usb/serial/visor.c
3717 @@ -95,7 +95,7 @@ static const struct usb_device_id id_table[] = {
3718 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
3719 { USB_DEVICE(ACER_VENDOR_ID, ACER_S10_ID),
3720 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
3721 - { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SCH_I330_ID),
3722 + { USB_DEVICE_INTERFACE_CLASS(SAMSUNG_VENDOR_ID, SAMSUNG_SCH_I330_ID, 0xff),
3723 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
3724 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SPH_I500_ID),
3725 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
3726 diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
3727 index 8adb53044079..300ef9b817ed 100644
3728 --- a/drivers/usb/storage/unusual_devs.h
3729 +++ b/drivers/usb/storage/unusual_devs.h
3730 @@ -766,6 +766,13 @@ UNUSUAL_DEV( 0x059f, 0x0643, 0x0000, 0x0000,
3731 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3732 US_FL_GO_SLOW ),
3733
3734 +/* Reported by Christian Schaller <cschalle@redhat.com> */
3735 +UNUSUAL_DEV( 0x059f, 0x0651, 0x0000, 0x0000,
3736 + "LaCie",
3737 + "External HDD",
3738 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3739 + US_FL_NO_WP_DETECT ),
3740 +
3741 /* Submitted by Joel Bourquard <numlock@freesurf.ch>
3742 * Some versions of this device need the SubClass and Protocol overrides
3743 * while others don't.
3744 diff --git a/drivers/xen/events/events_2l.c b/drivers/xen/events/events_2l.c
3745 index 5db43fc100a4..7dd46312c180 100644
3746 --- a/drivers/xen/events/events_2l.c
3747 +++ b/drivers/xen/events/events_2l.c
3748 @@ -345,6 +345,15 @@ irqreturn_t xen_debug_interrupt(int irq, void *dev_id)
3749 return IRQ_HANDLED;
3750 }
3751
3752 +static void evtchn_2l_resume(void)
3753 +{
3754 + int i;
3755 +
3756 + for_each_online_cpu(i)
3757 + memset(per_cpu(cpu_evtchn_mask, i), 0, sizeof(xen_ulong_t) *
3758 + EVTCHN_2L_NR_CHANNELS/BITS_PER_EVTCHN_WORD);
3759 +}
3760 +
3761 static const struct evtchn_ops evtchn_ops_2l = {
3762 .max_channels = evtchn_2l_max_channels,
3763 .nr_channels = evtchn_2l_max_channels,
3764 @@ -356,6 +365,7 @@ static const struct evtchn_ops evtchn_ops_2l = {
3765 .mask = evtchn_2l_mask,
3766 .unmask = evtchn_2l_unmask,
3767 .handle_events = evtchn_2l_handle_events,
3768 + .resume = evtchn_2l_resume,
3769 };
3770
3771 void __init xen_evtchn_2l_init(void)
3772 diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
3773 index 70fba973a107..38387950490e 100644
3774 --- a/drivers/xen/events/events_base.c
3775 +++ b/drivers/xen/events/events_base.c
3776 @@ -529,8 +529,8 @@ static unsigned int __startup_pirq(unsigned int irq)
3777 if (rc)
3778 goto err;
3779
3780 - bind_evtchn_to_cpu(evtchn, 0);
3781 info->evtchn = evtchn;
3782 + bind_evtchn_to_cpu(evtchn, 0);
3783
3784 rc = xen_evtchn_port_setup(info);
3785 if (rc)
3786 @@ -957,7 +957,7 @@ unsigned xen_evtchn_nr_channels(void)
3787 }
3788 EXPORT_SYMBOL_GPL(xen_evtchn_nr_channels);
3789
3790 -int bind_virq_to_irq(unsigned int virq, unsigned int cpu)
3791 +int bind_virq_to_irq(unsigned int virq, unsigned int cpu, bool percpu)
3792 {
3793 struct evtchn_bind_virq bind_virq;
3794 int evtchn, irq, ret;
3795 @@ -971,8 +971,12 @@ int bind_virq_to_irq(unsigned int virq, unsigned int cpu)
3796 if (irq < 0)
3797 goto out;
3798
3799 - irq_set_chip_and_handler_name(irq, &xen_percpu_chip,
3800 - handle_percpu_irq, "virq");
3801 + if (percpu)
3802 + irq_set_chip_and_handler_name(irq, &xen_percpu_chip,
3803 + handle_percpu_irq, "virq");
3804 + else
3805 + irq_set_chip_and_handler_name(irq, &xen_dynamic_chip,
3806 + handle_edge_irq, "virq");
3807
3808 bind_virq.virq = virq;
3809 bind_virq.vcpu = cpu;
3810 @@ -1062,7 +1066,7 @@ int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu,
3811 {
3812 int irq, retval;
3813
3814 - irq = bind_virq_to_irq(virq, cpu);
3815 + irq = bind_virq_to_irq(virq, cpu, irqflags & IRQF_PERCPU);
3816 if (irq < 0)
3817 return irq;
3818 retval = request_irq(irq, handler, irqflags, devname, dev_id);
3819 @@ -1279,8 +1283,9 @@ void rebind_evtchn_irq(int evtchn, int irq)
3820
3821 mutex_unlock(&irq_mapping_update_lock);
3822
3823 - /* new event channels are always bound to cpu 0 */
3824 - irq_set_affinity(irq, cpumask_of(0));
3825 + bind_evtchn_to_cpu(evtchn, info->cpu);
3826 + /* This will be deferred until interrupt is processed */
3827 + irq_set_affinity(irq, cpumask_of(info->cpu));
3828
3829 /* Unmask the event channel. */
3830 enable_irq(irq);
3831 diff --git a/drivers/xen/xen-pciback/conf_space.c b/drivers/xen/xen-pciback/conf_space.c
3832 index 75fe3d466515..9c234209d8b5 100644
3833 --- a/drivers/xen/xen-pciback/conf_space.c
3834 +++ b/drivers/xen/xen-pciback/conf_space.c
3835 @@ -16,8 +16,8 @@
3836 #include "conf_space.h"
3837 #include "conf_space_quirks.h"
3838
3839 -bool permissive;
3840 -module_param(permissive, bool, 0644);
3841 +bool xen_pcibk_permissive;
3842 +module_param_named(permissive, xen_pcibk_permissive, bool, 0644);
3843
3844 /* This is where xen_pcibk_read_config_byte, xen_pcibk_read_config_word,
3845 * xen_pcibk_write_config_word, and xen_pcibk_write_config_byte are created. */
3846 @@ -262,7 +262,7 @@ int xen_pcibk_config_write(struct pci_dev *dev, int offset, int size, u32 value)
3847 * This means that some fields may still be read-only because
3848 * they have entries in the config_field list that intercept
3849 * the write and do nothing. */
3850 - if (dev_data->permissive || permissive) {
3851 + if (dev_data->permissive || xen_pcibk_permissive) {
3852 switch (size) {
3853 case 1:
3854 err = pci_write_config_byte(dev, offset,
3855 diff --git a/drivers/xen/xen-pciback/conf_space.h b/drivers/xen/xen-pciback/conf_space.h
3856 index 2e1d73d1d5d0..62461a8ba1d6 100644
3857 --- a/drivers/xen/xen-pciback/conf_space.h
3858 +++ b/drivers/xen/xen-pciback/conf_space.h
3859 @@ -64,7 +64,7 @@ struct config_field_entry {
3860 void *data;
3861 };
3862
3863 -extern bool permissive;
3864 +extern bool xen_pcibk_permissive;
3865
3866 #define OFFSET(cfg_entry) ((cfg_entry)->base_offset+(cfg_entry)->field->offset)
3867
3868 diff --git a/drivers/xen/xen-pciback/conf_space_header.c b/drivers/xen/xen-pciback/conf_space_header.c
3869 index 2d7369391472..f8baf463dd35 100644
3870 --- a/drivers/xen/xen-pciback/conf_space_header.c
3871 +++ b/drivers/xen/xen-pciback/conf_space_header.c
3872 @@ -105,7 +105,7 @@ static int command_write(struct pci_dev *dev, int offset, u16 value, void *data)
3873
3874 cmd->val = value;
3875
3876 - if (!permissive && (!dev_data || !dev_data->permissive))
3877 + if (!xen_pcibk_permissive && (!dev_data || !dev_data->permissive))
3878 return 0;
3879
3880 /* Only allow the guest to control certain bits. */
3881 diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
3882 index 564b31584860..5390a674b5e3 100644
3883 --- a/drivers/xen/xenbus/xenbus_probe.c
3884 +++ b/drivers/xen/xenbus/xenbus_probe.c
3885 @@ -57,6 +57,7 @@
3886 #include <xen/xen.h>
3887 #include <xen/xenbus.h>
3888 #include <xen/events.h>
3889 +#include <xen/xen-ops.h>
3890 #include <xen/page.h>
3891
3892 #include <xen/hvm.h>
3893 @@ -735,6 +736,30 @@ static int __init xenstored_local_init(void)
3894 return err;
3895 }
3896
3897 +static int xenbus_resume_cb(struct notifier_block *nb,
3898 + unsigned long action, void *data)
3899 +{
3900 + int err = 0;
3901 +
3902 + if (xen_hvm_domain()) {
3903 + uint64_t v;
3904 +
3905 + err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v);
3906 + if (!err && v)
3907 + xen_store_evtchn = v;
3908 + else
3909 + pr_warn("Cannot update xenstore event channel: %d\n",
3910 + err);
3911 + } else
3912 + xen_store_evtchn = xen_start_info->store_evtchn;
3913 +
3914 + return err;
3915 +}
3916 +
3917 +static struct notifier_block xenbus_resume_nb = {
3918 + .notifier_call = xenbus_resume_cb,
3919 +};
3920 +
3921 static int __init xenbus_init(void)
3922 {
3923 int err = 0;
3924 @@ -793,6 +818,10 @@ static int __init xenbus_init(void)
3925 goto out_error;
3926 }
3927
3928 + if ((xen_store_domain_type != XS_LOCAL) &&
3929 + (xen_store_domain_type != XS_UNKNOWN))
3930 + xen_resume_notifier_register(&xenbus_resume_nb);
3931 +
3932 #ifdef CONFIG_XEN_COMPAT_XENFS
3933 /*
3934 * Create xenfs mountpoint in /proc for compatibility with
3935 diff --git a/fs/coredump.c b/fs/coredump.c
3936 index b5c86ffd5033..4c5866b948e7 100644
3937 --- a/fs/coredump.c
3938 +++ b/fs/coredump.c
3939 @@ -657,7 +657,7 @@ void do_coredump(const siginfo_t *siginfo)
3940 */
3941 if (!uid_eq(inode->i_uid, current_fsuid()))
3942 goto close_fail;
3943 - if (!cprm.file->f_op->write)
3944 + if (!(cprm.file->f_mode & FMODE_CAN_WRITE))
3945 goto close_fail;
3946 if (do_truncate(cprm.file->f_path.dentry, 0, 0, cprm.file))
3947 goto close_fail;
3948 diff --git a/fs/dcache.c b/fs/dcache.c
3949 index 03dca3cad918..e0750b8f51aa 100644
3950 --- a/fs/dcache.c
3951 +++ b/fs/dcache.c
3952 @@ -1094,13 +1094,13 @@ ascend:
3953 /* might go back up the wrong parent if we have had a rename. */
3954 if (need_seqretry(&rename_lock, seq))
3955 goto rename_retry;
3956 - next = child->d_child.next;
3957 - while (unlikely(child->d_flags & DCACHE_DENTRY_KILLED)) {
3958 + /* go into the first sibling still alive */
3959 + do {
3960 + next = child->d_child.next;
3961 if (next == &this_parent->d_subdirs)
3962 goto ascend;
3963 child = list_entry(next, struct dentry, d_child);
3964 - next = next->next;
3965 - }
3966 + } while (unlikely(child->d_flags & DCACHE_DENTRY_KILLED));
3967 rcu_read_unlock();
3968 goto resume;
3969 }
3970 diff --git a/fs/exec.c b/fs/exec.c
3971 index 2e83209016ec..b7a5f46181b0 100644
3972 --- a/fs/exec.c
3973 +++ b/fs/exec.c
3974 @@ -658,6 +658,9 @@ int setup_arg_pages(struct linux_binprm *bprm,
3975 if (stack_base > STACK_SIZE_MAX)
3976 stack_base = STACK_SIZE_MAX;
3977
3978 + /* Add space for stack randomization. */
3979 + stack_base += (STACK_RND_MASK << PAGE_SHIFT);
3980 +
3981 /* Make sure we didn't let the argument array grow too large. */
3982 if (vma->vm_end - vma->vm_start > stack_base)
3983 return -ENOMEM;
3984 diff --git a/fs/ext4/ext4_jbd2.c b/fs/ext4/ext4_jbd2.c
3985 index 3445035c7e01..d41843181818 100644
3986 --- a/fs/ext4/ext4_jbd2.c
3987 +++ b/fs/ext4/ext4_jbd2.c
3988 @@ -87,6 +87,12 @@ int __ext4_journal_stop(const char *where, unsigned int line, handle_t *handle)
3989 ext4_put_nojournal(handle);
3990 return 0;
3991 }
3992 +
3993 + if (!handle->h_transaction) {
3994 + err = jbd2_journal_stop(handle);
3995 + return handle->h_err ? handle->h_err : err;
3996 + }
3997 +
3998 sb = handle->h_transaction->t_journal->j_private;
3999 err = handle->h_err;
4000 rc = jbd2_journal_stop(handle);
4001 diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
4002 index 6cfacbb0f928..b5fcb1ac0dd7 100644
4003 --- a/fs/ext4/extents.c
4004 +++ b/fs/ext4/extents.c
4005 @@ -377,7 +377,7 @@ static int ext4_valid_extent(struct inode *inode, struct ext4_extent *ext)
4006 ext4_lblk_t lblock = le32_to_cpu(ext->ee_block);
4007 ext4_lblk_t last = lblock + len - 1;
4008
4009 - if (lblock > last)
4010 + if (len == 0 || lblock > last)
4011 return 0;
4012 return ext4_data_block_valid(EXT4_SB(inode->i_sb), block, len);
4013 }
4014 diff --git a/fs/fhandle.c b/fs/fhandle.c
4015 index 999ff5c3cab0..d59712dfa3e7 100644
4016 --- a/fs/fhandle.c
4017 +++ b/fs/fhandle.c
4018 @@ -195,8 +195,9 @@ static int handle_to_path(int mountdirfd, struct file_handle __user *ufh,
4019 goto out_err;
4020 }
4021 /* copy the full handle */
4022 - if (copy_from_user(handle, ufh,
4023 - sizeof(struct file_handle) +
4024 + *handle = f_handle;
4025 + if (copy_from_user(&handle->f_handle,
4026 + &ufh->f_handle,
4027 f_handle.handle_bytes)) {
4028 retval = -EFAULT;
4029 goto out_handle;
4030 diff --git a/fs/fs_pin.c b/fs/fs_pin.c
4031 index 9368236ca100..569bbd10e374 100644
4032 --- a/fs/fs_pin.c
4033 +++ b/fs/fs_pin.c
4034 @@ -20,8 +20,8 @@ void pin_put(struct fs_pin *p)
4035 void pin_remove(struct fs_pin *pin)
4036 {
4037 spin_lock(&pin_lock);
4038 - hlist_del(&pin->m_list);
4039 - hlist_del(&pin->s_list);
4040 + hlist_del_init(&pin->m_list);
4041 + hlist_del_init(&pin->s_list);
4042 spin_unlock(&pin_lock);
4043 }
4044
4045 diff --git a/fs/jbd2/recovery.c b/fs/jbd2/recovery.c
4046 index bcbef08a4d8f..a5f72a36c6c8 100644
4047 --- a/fs/jbd2/recovery.c
4048 +++ b/fs/jbd2/recovery.c
4049 @@ -839,15 +839,23 @@ static int scan_revoke_records(journal_t *journal, struct buffer_head *bh,
4050 {
4051 jbd2_journal_revoke_header_t *header;
4052 int offset, max;
4053 + int csum_size = 0;
4054 + __u32 rcount;
4055 int record_len = 4;
4056
4057 header = (jbd2_journal_revoke_header_t *) bh->b_data;
4058 offset = sizeof(jbd2_journal_revoke_header_t);
4059 - max = be32_to_cpu(header->r_count);
4060 + rcount = be32_to_cpu(header->r_count);
4061
4062 if (!jbd2_revoke_block_csum_verify(journal, header))
4063 return -EINVAL;
4064
4065 + if (jbd2_journal_has_csum_v2or3(journal))
4066 + csum_size = sizeof(struct jbd2_journal_revoke_tail);
4067 + if (rcount > journal->j_blocksize - csum_size)
4068 + return -EINVAL;
4069 + max = rcount;
4070 +
4071 if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT))
4072 record_len = 8;
4073
4074 diff --git a/fs/jbd2/revoke.c b/fs/jbd2/revoke.c
4075 index c6cbaef2bda1..14214da80eb8 100644
4076 --- a/fs/jbd2/revoke.c
4077 +++ b/fs/jbd2/revoke.c
4078 @@ -577,7 +577,7 @@ static void write_one_revoke_record(journal_t *journal,
4079 {
4080 int csum_size = 0;
4081 struct buffer_head *descriptor;
4082 - int offset;
4083 + int sz, offset;
4084 journal_header_t *header;
4085
4086 /* If we are already aborting, this all becomes a noop. We
4087 @@ -594,9 +594,14 @@ static void write_one_revoke_record(journal_t *journal,
4088 if (jbd2_journal_has_csum_v2or3(journal))
4089 csum_size = sizeof(struct jbd2_journal_revoke_tail);
4090
4091 + if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT))
4092 + sz = 8;
4093 + else
4094 + sz = 4;
4095 +
4096 /* Make sure we have a descriptor with space left for the record */
4097 if (descriptor) {
4098 - if (offset >= journal->j_blocksize - csum_size) {
4099 + if (offset + sz > journal->j_blocksize - csum_size) {
4100 flush_descriptor(journal, descriptor, offset, write_op);
4101 descriptor = NULL;
4102 }
4103 @@ -619,16 +624,13 @@ static void write_one_revoke_record(journal_t *journal,
4104 *descriptorp = descriptor;
4105 }
4106
4107 - if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT)) {
4108 + if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT))
4109 * ((__be64 *)(&descriptor->b_data[offset])) =
4110 cpu_to_be64(record->blocknr);
4111 - offset += 8;
4112 -
4113 - } else {
4114 + else
4115 * ((__be32 *)(&descriptor->b_data[offset])) =
4116 cpu_to_be32(record->blocknr);
4117 - offset += 4;
4118 - }
4119 + offset += sz;
4120
4121 *offsetp = offset;
4122 }
4123 diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c
4124 index 5f09370c90a8..ff2f2e6ad311 100644
4125 --- a/fs/jbd2/transaction.c
4126 +++ b/fs/jbd2/transaction.c
4127 @@ -551,7 +551,6 @@ int jbd2_journal_extend(handle_t *handle, int nblocks)
4128 int result;
4129 int wanted;
4130
4131 - WARN_ON(!transaction);
4132 if (is_handle_aborted(handle))
4133 return -EROFS;
4134 journal = transaction->t_journal;
4135 @@ -627,7 +626,6 @@ int jbd2__journal_restart(handle_t *handle, int nblocks, gfp_t gfp_mask)
4136 tid_t tid;
4137 int need_to_start, ret;
4138
4139 - WARN_ON(!transaction);
4140 /* If we've had an abort of any type, don't even think about
4141 * actually doing the restart! */
4142 if (is_handle_aborted(handle))
4143 @@ -785,7 +783,6 @@ do_get_write_access(handle_t *handle, struct journal_head *jh,
4144 int need_copy = 0;
4145 unsigned long start_lock, time_lock;
4146
4147 - WARN_ON(!transaction);
4148 if (is_handle_aborted(handle))
4149 return -EROFS;
4150 journal = transaction->t_journal;
4151 @@ -1051,7 +1048,6 @@ int jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh)
4152 int err;
4153
4154 jbd_debug(5, "journal_head %p\n", jh);
4155 - WARN_ON(!transaction);
4156 err = -EROFS;
4157 if (is_handle_aborted(handle))
4158 goto out;
4159 @@ -1266,7 +1262,6 @@ int jbd2_journal_dirty_metadata(handle_t *handle, struct buffer_head *bh)
4160 struct journal_head *jh;
4161 int ret = 0;
4162
4163 - WARN_ON(!transaction);
4164 if (is_handle_aborted(handle))
4165 return -EROFS;
4166 journal = transaction->t_journal;
4167 @@ -1397,7 +1392,6 @@ int jbd2_journal_forget (handle_t *handle, struct buffer_head *bh)
4168 int err = 0;
4169 int was_modified = 0;
4170
4171 - WARN_ON(!transaction);
4172 if (is_handle_aborted(handle))
4173 return -EROFS;
4174 journal = transaction->t_journal;
4175 @@ -1530,8 +1524,22 @@ int jbd2_journal_stop(handle_t *handle)
4176 tid_t tid;
4177 pid_t pid;
4178
4179 - if (!transaction)
4180 - goto free_and_exit;
4181 + if (!transaction) {
4182 + /*
4183 + * Handle is already detached from the transaction so
4184 + * there is nothing to do other than decrease a refcount,
4185 + * or free the handle if refcount drops to zero
4186 + */
4187 + if (--handle->h_ref > 0) {
4188 + jbd_debug(4, "h_ref %d -> %d\n", handle->h_ref + 1,
4189 + handle->h_ref);
4190 + return err;
4191 + } else {
4192 + if (handle->h_rsv_handle)
4193 + jbd2_free_handle(handle->h_rsv_handle);
4194 + goto free_and_exit;
4195 + }
4196 + }
4197 journal = transaction->t_journal;
4198
4199 J_ASSERT(journal_current_handle() == handle);
4200 @@ -2373,7 +2381,6 @@ int jbd2_journal_file_inode(handle_t *handle, struct jbd2_inode *jinode)
4201 transaction_t *transaction = handle->h_transaction;
4202 journal_t *journal;
4203
4204 - WARN_ON(!transaction);
4205 if (is_handle_aborted(handle))
4206 return -EROFS;
4207 journal = transaction->t_journal;
4208 diff --git a/fs/namei.c b/fs/namei.c
4209 index 890d3580bf0e..d20f061cddd3 100644
4210 --- a/fs/namei.c
4211 +++ b/fs/namei.c
4212 @@ -3197,7 +3197,7 @@ static struct file *path_openat(int dfd, struct filename *pathname,
4213
4214 if (unlikely(file->f_flags & __O_TMPFILE)) {
4215 error = do_tmpfile(dfd, pathname, nd, flags, op, file, &opened);
4216 - goto out;
4217 + goto out2;
4218 }
4219
4220 error = path_init(dfd, pathname->name, flags | LOOKUP_PARENT, nd, &base);
4221 @@ -3235,6 +3235,7 @@ out:
4222 path_put(&nd->root);
4223 if (base)
4224 fput(base);
4225 +out2:
4226 if (!(opened & FILE_OPENED)) {
4227 BUG_ON(!error);
4228 put_filp(file);
4229 diff --git a/fs/namespace.c b/fs/namespace.c
4230 index 07ba424181a5..8b60287a488b 100644
4231 --- a/fs/namespace.c
4232 +++ b/fs/namespace.c
4233 @@ -1675,8 +1675,11 @@ struct vfsmount *collect_mounts(struct path *path)
4234 {
4235 struct mount *tree;
4236 namespace_lock();
4237 - tree = copy_tree(real_mount(path->mnt), path->dentry,
4238 - CL_COPY_ALL | CL_PRIVATE);
4239 + if (!check_mnt(real_mount(path->mnt)))
4240 + tree = ERR_PTR(-EINVAL);
4241 + else
4242 + tree = copy_tree(real_mount(path->mnt), path->dentry,
4243 + CL_COPY_ALL | CL_PRIVATE);
4244 namespace_unlock();
4245 if (IS_ERR(tree))
4246 return ERR_CAST(tree);
4247 @@ -3137,6 +3140,12 @@ bool fs_fully_visible(struct file_system_type *type)
4248 if (mnt->mnt.mnt_sb->s_type != type)
4249 continue;
4250
4251 + /* This mount is not fully visible if it's root directory
4252 + * is not the root directory of the filesystem.
4253 + */
4254 + if (mnt->mnt.mnt_root != mnt->mnt.mnt_sb->s_root)
4255 + continue;
4256 +
4257 /* This mount is not fully visible if there are any child mounts
4258 * that cover anything except for empty directories.
4259 */
4260 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
4261 index 4460d45ae138..58f98ad93828 100644
4262 --- a/fs/nfsd/nfs4state.c
4263 +++ b/fs/nfsd/nfs4state.c
4264 @@ -4385,10 +4385,17 @@ static __be32 check_stateid_generation(stateid_t *in, stateid_t *ref, bool has_s
4265 return nfserr_old_stateid;
4266 }
4267
4268 +static __be32 nfsd4_check_openowner_confirmed(struct nfs4_ol_stateid *ols)
4269 +{
4270 + if (ols->st_stateowner->so_is_open_owner &&
4271 + !(openowner(ols->st_stateowner)->oo_flags & NFS4_OO_CONFIRMED))
4272 + return nfserr_bad_stateid;
4273 + return nfs_ok;
4274 +}
4275 +
4276 static __be32 nfsd4_validate_stateid(struct nfs4_client *cl, stateid_t *stateid)
4277 {
4278 struct nfs4_stid *s;
4279 - struct nfs4_ol_stateid *ols;
4280 __be32 status = nfserr_bad_stateid;
4281
4282 if (ZERO_STATEID(stateid) || ONE_STATEID(stateid))
4283 @@ -4418,13 +4425,7 @@ static __be32 nfsd4_validate_stateid(struct nfs4_client *cl, stateid_t *stateid)
4284 break;
4285 case NFS4_OPEN_STID:
4286 case NFS4_LOCK_STID:
4287 - ols = openlockstateid(s);
4288 - if (ols->st_stateowner->so_is_open_owner
4289 - && !(openowner(ols->st_stateowner)->oo_flags
4290 - & NFS4_OO_CONFIRMED))
4291 - status = nfserr_bad_stateid;
4292 - else
4293 - status = nfs_ok;
4294 + status = nfsd4_check_openowner_confirmed(openlockstateid(s));
4295 break;
4296 default:
4297 printk("unknown stateid type %x\n", s->sc_type);
4298 @@ -4516,8 +4517,8 @@ nfs4_preprocess_stateid_op(struct net *net, struct nfsd4_compound_state *cstate,
4299 status = nfs4_check_fh(current_fh, stp);
4300 if (status)
4301 goto out;
4302 - if (stp->st_stateowner->so_is_open_owner
4303 - && !(openowner(stp->st_stateowner)->oo_flags & NFS4_OO_CONFIRMED))
4304 + status = nfsd4_check_openowner_confirmed(stp);
4305 + if (status)
4306 goto out;
4307 status = nfs4_check_openmode(stp, flags);
4308 if (status)
4309 diff --git a/fs/nilfs2/btree.c b/fs/nilfs2/btree.c
4310 index ecdbae19a766..090d8ce25bd1 100644
4311 --- a/fs/nilfs2/btree.c
4312 +++ b/fs/nilfs2/btree.c
4313 @@ -388,7 +388,7 @@ static int nilfs_btree_root_broken(const struct nilfs_btree_node *node,
4314 nchildren = nilfs_btree_node_get_nchildren(node);
4315
4316 if (unlikely(level < NILFS_BTREE_LEVEL_NODE_MIN ||
4317 - level > NILFS_BTREE_LEVEL_MAX ||
4318 + level >= NILFS_BTREE_LEVEL_MAX ||
4319 nchildren < 0 ||
4320 nchildren > NILFS_BTREE_ROOT_NCHILDREN_MAX)) {
4321 pr_crit("NILFS: bad btree root (inode number=%lu): level = %d, flags = 0x%x, nchildren = %d\n",
4322 diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
4323 index 215e41abf101..9ec1eea7c3a3 100644
4324 --- a/fs/ocfs2/dlm/dlmmaster.c
4325 +++ b/fs/ocfs2/dlm/dlmmaster.c
4326 @@ -765,6 +765,19 @@ lookup:
4327 if (tmpres) {
4328 spin_unlock(&dlm->spinlock);
4329 spin_lock(&tmpres->spinlock);
4330 +
4331 + /*
4332 + * Right after dlm spinlock was released, dlm_thread could have
4333 + * purged the lockres. Check if lockres got unhashed. If so
4334 + * start over.
4335 + */
4336 + if (hlist_unhashed(&tmpres->hash_node)) {
4337 + spin_unlock(&tmpres->spinlock);
4338 + dlm_lockres_put(tmpres);
4339 + tmpres = NULL;
4340 + goto lookup;
4341 + }
4342 +
4343 /* Wait on the thread that is mastering the resource */
4344 if (tmpres->owner == DLM_LOCK_RES_OWNER_UNKNOWN) {
4345 __dlm_wait_on_lockres(tmpres);
4346 diff --git a/fs/omfs/inode.c b/fs/omfs/inode.c
4347 index 138321b0c6c2..454111a3308e 100644
4348 --- a/fs/omfs/inode.c
4349 +++ b/fs/omfs/inode.c
4350 @@ -306,7 +306,8 @@ static const struct super_operations omfs_sops = {
4351 */
4352 static int omfs_get_imap(struct super_block *sb)
4353 {
4354 - unsigned int bitmap_size, count, array_size;
4355 + unsigned int bitmap_size, array_size;
4356 + int count;
4357 struct omfs_sb_info *sbi = OMFS_SB(sb);
4358 struct buffer_head *bh;
4359 unsigned long **ptr;
4360 @@ -359,7 +360,7 @@ nomem:
4361 }
4362
4363 enum {
4364 - Opt_uid, Opt_gid, Opt_umask, Opt_dmask, Opt_fmask
4365 + Opt_uid, Opt_gid, Opt_umask, Opt_dmask, Opt_fmask, Opt_err
4366 };
4367
4368 static const match_table_t tokens = {
4369 @@ -368,6 +369,7 @@ static const match_table_t tokens = {
4370 {Opt_umask, "umask=%o"},
4371 {Opt_dmask, "dmask=%o"},
4372 {Opt_fmask, "fmask=%o"},
4373 + {Opt_err, NULL},
4374 };
4375
4376 static int parse_options(char *options, struct omfs_sb_info *sbi)
4377 diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c
4378 index b1f73dbbf3d8..b7cd0a0541af 100644
4379 --- a/fs/xfs/libxfs/xfs_attr_leaf.c
4380 +++ b/fs/xfs/libxfs/xfs_attr_leaf.c
4381 @@ -500,8 +500,8 @@ xfs_attr_shortform_add(xfs_da_args_t *args, int forkoff)
4382 * After the last attribute is removed revert to original inode format,
4383 * making all literal area available to the data fork once more.
4384 */
4385 -STATIC void
4386 -xfs_attr_fork_reset(
4387 +void
4388 +xfs_attr_fork_remove(
4389 struct xfs_inode *ip,
4390 struct xfs_trans *tp)
4391 {
4392 @@ -567,7 +567,7 @@ xfs_attr_shortform_remove(xfs_da_args_t *args)
4393 (mp->m_flags & XFS_MOUNT_ATTR2) &&
4394 (dp->i_d.di_format != XFS_DINODE_FMT_BTREE) &&
4395 !(args->op_flags & XFS_DA_OP_ADDNAME)) {
4396 - xfs_attr_fork_reset(dp, args->trans);
4397 + xfs_attr_fork_remove(dp, args->trans);
4398 } else {
4399 xfs_idata_realloc(dp, -size, XFS_ATTR_FORK);
4400 dp->i_d.di_forkoff = xfs_attr_shortform_bytesfit(dp, totsize);
4401 @@ -830,7 +830,7 @@ xfs_attr3_leaf_to_shortform(
4402 if (forkoff == -1) {
4403 ASSERT(dp->i_mount->m_flags & XFS_MOUNT_ATTR2);
4404 ASSERT(dp->i_d.di_format != XFS_DINODE_FMT_BTREE);
4405 - xfs_attr_fork_reset(dp, args->trans);
4406 + xfs_attr_fork_remove(dp, args->trans);
4407 goto out;
4408 }
4409
4410 diff --git a/fs/xfs/libxfs/xfs_attr_leaf.h b/fs/xfs/libxfs/xfs_attr_leaf.h
4411 index e2929da7c3ba..4f3a60aa93d4 100644
4412 --- a/fs/xfs/libxfs/xfs_attr_leaf.h
4413 +++ b/fs/xfs/libxfs/xfs_attr_leaf.h
4414 @@ -53,7 +53,7 @@ int xfs_attr_shortform_remove(struct xfs_da_args *args);
4415 int xfs_attr_shortform_list(struct xfs_attr_list_context *context);
4416 int xfs_attr_shortform_allfit(struct xfs_buf *bp, struct xfs_inode *dp);
4417 int xfs_attr_shortform_bytesfit(xfs_inode_t *dp, int bytes);
4418 -
4419 +void xfs_attr_fork_remove(struct xfs_inode *ip, struct xfs_trans *tp);
4420
4421 /*
4422 * Internal routines when attribute fork size == XFS_LBSIZE(mp).
4423 diff --git a/fs/xfs/xfs_attr_inactive.c b/fs/xfs/xfs_attr_inactive.c
4424 index aa2a8b1838a2..0687b67741b7 100644
4425 --- a/fs/xfs/xfs_attr_inactive.c
4426 +++ b/fs/xfs/xfs_attr_inactive.c
4427 @@ -382,23 +382,31 @@ xfs_attr3_root_inactive(
4428 return error;
4429 }
4430
4431 +/*
4432 + * xfs_attr_inactive kills all traces of an attribute fork on an inode. It
4433 + * removes both the on-disk and in-memory inode fork. Note that this also has to
4434 + * handle the condition of inodes without attributes but with an attribute fork
4435 + * configured, so we can't use xfs_inode_hasattr() here.
4436 + *
4437 + * The in-memory attribute fork is removed even on error.
4438 + */
4439 int
4440 -xfs_attr_inactive(xfs_inode_t *dp)
4441 +xfs_attr_inactive(
4442 + struct xfs_inode *dp)
4443 {
4444 - xfs_trans_t *trans;
4445 - xfs_mount_t *mp;
4446 - int error;
4447 + struct xfs_trans *trans;
4448 + struct xfs_mount *mp;
4449 + int cancel_flags = 0;
4450 + int lock_mode = XFS_ILOCK_SHARED;
4451 + int error = 0;
4452
4453 mp = dp->i_mount;
4454 ASSERT(! XFS_NOT_DQATTACHED(mp, dp));
4455
4456 - xfs_ilock(dp, XFS_ILOCK_SHARED);
4457 - if (!xfs_inode_hasattr(dp) ||
4458 - dp->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) {
4459 - xfs_iunlock(dp, XFS_ILOCK_SHARED);
4460 - return 0;
4461 - }
4462 - xfs_iunlock(dp, XFS_ILOCK_SHARED);
4463 + xfs_ilock(dp, lock_mode);
4464 + if (!XFS_IFORK_Q(dp))
4465 + goto out_destroy_fork;
4466 + xfs_iunlock(dp, lock_mode);
4467
4468 /*
4469 * Start our first transaction of the day.
4470 @@ -410,13 +418,18 @@ xfs_attr_inactive(xfs_inode_t *dp)
4471 * the inode in every transaction to let it float upward through
4472 * the log.
4473 */
4474 + lock_mode = 0;
4475 trans = xfs_trans_alloc(mp, XFS_TRANS_ATTRINVAL);
4476 error = xfs_trans_reserve(trans, &M_RES(mp)->tr_attrinval, 0, 0);
4477 - if (error) {
4478 - xfs_trans_cancel(trans, 0);
4479 - return error;
4480 - }
4481 - xfs_ilock(dp, XFS_ILOCK_EXCL);
4482 + if (error)
4483 + goto out_cancel;
4484 +
4485 + lock_mode = XFS_ILOCK_EXCL;
4486 + cancel_flags = XFS_TRANS_RELEASE_LOG_RES | XFS_TRANS_ABORT;
4487 + xfs_ilock(dp, lock_mode);
4488 +
4489 + if (!XFS_IFORK_Q(dp))
4490 + goto out_cancel;
4491
4492 /*
4493 * No need to make quota reservations here. We expect to release some
4494 @@ -424,29 +437,31 @@ xfs_attr_inactive(xfs_inode_t *dp)
4495 */
4496 xfs_trans_ijoin(trans, dp, 0);
4497
4498 - /*
4499 - * Decide on what work routines to call based on the inode size.
4500 - */
4501 - if (!xfs_inode_hasattr(dp) ||
4502 - dp->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) {
4503 - error = 0;
4504 - goto out;
4505 + /* invalidate and truncate the attribute fork extents */
4506 + if (dp->i_d.di_aformat != XFS_DINODE_FMT_LOCAL) {
4507 + error = xfs_attr3_root_inactive(&trans, dp);
4508 + if (error)
4509 + goto out_cancel;
4510 +
4511 + error = xfs_itruncate_extents(&trans, dp, XFS_ATTR_FORK, 0);
4512 + if (error)
4513 + goto out_cancel;
4514 }
4515 - error = xfs_attr3_root_inactive(&trans, dp);
4516 - if (error)
4517 - goto out;
4518
4519 - error = xfs_itruncate_extents(&trans, dp, XFS_ATTR_FORK, 0);
4520 - if (error)
4521 - goto out;
4522 + /* Reset the attribute fork - this also destroys the in-core fork */
4523 + xfs_attr_fork_remove(dp, trans);
4524
4525 error = xfs_trans_commit(trans, XFS_TRANS_RELEASE_LOG_RES);
4526 - xfs_iunlock(dp, XFS_ILOCK_EXCL);
4527 -
4528 + xfs_iunlock(dp, lock_mode);
4529 return error;
4530
4531 -out:
4532 - xfs_trans_cancel(trans, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_ABORT);
4533 - xfs_iunlock(dp, XFS_ILOCK_EXCL);
4534 +out_cancel:
4535 + xfs_trans_cancel(trans, cancel_flags);
4536 +out_destroy_fork:
4537 + /* kill the in-core attr fork before we drop the inode lock */
4538 + if (dp->i_afp)
4539 + xfs_idestroy_fork(dp, XFS_ATTR_FORK);
4540 + if (lock_mode)
4541 + xfs_iunlock(dp, lock_mode);
4542 return error;
4543 }
4544 diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
4545 index b28f0d680cb5..ba8b158a618a 100644
4546 --- a/fs/xfs/xfs_file.c
4547 +++ b/fs/xfs/xfs_file.c
4548 @@ -127,7 +127,7 @@ xfs_iozero(
4549 status = 0;
4550 } while (count);
4551
4552 - return (-status);
4553 + return status;
4554 }
4555
4556 /*
4557 diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
4558 index 3cc309a19ea8..32e95c76cbd0 100644
4559 --- a/fs/xfs/xfs_inode.c
4560 +++ b/fs/xfs/xfs_inode.c
4561 @@ -1894,21 +1894,17 @@ xfs_inactive(
4562 /*
4563 * If there are attributes associated with the file then blow them away
4564 * now. The code calls a routine that recursively deconstructs the
4565 - * attribute fork. We need to just commit the current transaction
4566 - * because we can't use it for xfs_attr_inactive().
4567 + * attribute fork. If also blows away the in-core attribute fork.
4568 */
4569 - if (ip->i_d.di_anextents > 0) {
4570 - ASSERT(ip->i_d.di_forkoff != 0);
4571 -
4572 + if (XFS_IFORK_Q(ip)) {
4573 error = xfs_attr_inactive(ip);
4574 if (error)
4575 return;
4576 }
4577
4578 - if (ip->i_afp)
4579 - xfs_idestroy_fork(ip, XFS_ATTR_FORK);
4580 -
4581 + ASSERT(!ip->i_afp);
4582 ASSERT(ip->i_d.di_anextents == 0);
4583 + ASSERT(ip->i_d.di_forkoff == 0);
4584
4585 /*
4586 * Free the inode.
4587 diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
4588 index ab2acf629a64..0747006ba2b0 100644
4589 --- a/include/acpi/acpixf.h
4590 +++ b/include/acpi/acpixf.h
4591 @@ -431,13 +431,13 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_load_tables(void))
4592 ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_reallocate_root_table(void))
4593
4594 ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init
4595 - acpi_find_root_pointer(acpi_size * rsdp_address))
4596 -
4597 + acpi_find_root_pointer(acpi_physical_address *
4598 + rsdp_address))
4599 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
4600 - acpi_get_table_header(acpi_string signature,
4601 - u32 instance,
4602 - struct acpi_table_header
4603 - *out_table_header))
4604 + acpi_get_table_header(acpi_string signature,
4605 + u32 instance,
4606 + struct acpi_table_header
4607 + *out_table_header))
4608 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
4609 acpi_get_table(acpi_string signature, u32 instance,
4610 struct acpi_table_header
4611 diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
4612 index 2dd405c9be78..45c39a37f924 100644
4613 --- a/include/drm/drm_pciids.h
4614 +++ b/include/drm/drm_pciids.h
4615 @@ -186,6 +186,7 @@
4616 {0x1002, 0x6658, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_BONAIRE|RADEON_NEW_MEMMAP}, \
4617 {0x1002, 0x665c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_BONAIRE|RADEON_NEW_MEMMAP}, \
4618 {0x1002, 0x665d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_BONAIRE|RADEON_NEW_MEMMAP}, \
4619 + {0x1002, 0x665f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_BONAIRE|RADEON_NEW_MEMMAP}, \
4620 {0x1002, 0x6660, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_HAINAN|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
4621 {0x1002, 0x6663, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_HAINAN|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
4622 {0x1002, 0x6664, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_HAINAN|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
4623 diff --git a/include/linux/ktime.h b/include/linux/ktime.h
4624 index c9d645ad98ff..039bbe5f59df 100644
4625 --- a/include/linux/ktime.h
4626 +++ b/include/linux/ktime.h
4627 @@ -166,9 +166,34 @@ static inline bool ktime_before(const ktime_t cmp1, const ktime_t cmp2)
4628 }
4629
4630 #if BITS_PER_LONG < 64
4631 -extern u64 ktime_divns(const ktime_t kt, s64 div);
4632 +extern s64 __ktime_divns(const ktime_t kt, s64 div);
4633 +static inline s64 ktime_divns(const ktime_t kt, s64 div)
4634 +{
4635 + /*
4636 + * Negative divisors could cause an inf loop,
4637 + * so bug out here.
4638 + */
4639 + BUG_ON(div < 0);
4640 + if (__builtin_constant_p(div) && !(div >> 32)) {
4641 + s64 ns = kt.tv64;
4642 + u64 tmp = ns < 0 ? -ns : ns;
4643 +
4644 + do_div(tmp, div);
4645 + return ns < 0 ? -tmp : tmp;
4646 + } else {
4647 + return __ktime_divns(kt, div);
4648 + }
4649 +}
4650 #else /* BITS_PER_LONG < 64 */
4651 -# define ktime_divns(kt, div) (u64)((kt).tv64 / (div))
4652 +static inline s64 ktime_divns(const ktime_t kt, s64 div)
4653 +{
4654 + /*
4655 + * 32-bit implementation cannot handle negative divisors,
4656 + * so catch them on 64bit as well.
4657 + */
4658 + WARN_ON(div < 0);
4659 + return kt.tv64 / div;
4660 +}
4661 #endif
4662
4663 static inline s64 ktime_to_us(const ktime_t kt)
4664 diff --git a/include/linux/libata.h b/include/linux/libata.h
4665 index fe0bf8dc83bb..b3a816f4c0c4 100644
4666 --- a/include/linux/libata.h
4667 +++ b/include/linux/libata.h
4668 @@ -204,6 +204,7 @@ enum {
4669 ATA_LFLAG_SW_ACTIVITY = (1 << 7), /* keep activity stats */
4670 ATA_LFLAG_NO_LPM = (1 << 8), /* disable LPM on this link */
4671 ATA_LFLAG_RST_ONCE = (1 << 9), /* limit recovery to one reset */
4672 + ATA_LFLAG_CHANGED = (1 << 10), /* LPM state changed on this link */
4673
4674 /* struct ata_port flags */
4675 ATA_FLAG_SLAVE_POSS = (1 << 0), /* host supports slave dev */
4676 @@ -308,6 +309,12 @@ enum {
4677 */
4678 ATA_TMOUT_PMP_SRST_WAIT = 5000,
4679
4680 + /* When the LPM policy is set to ATA_LPM_MAX_POWER, there might
4681 + * be a spurious PHY event, so ignore the first PHY event that
4682 + * occurs within 10s after the policy change.
4683 + */
4684 + ATA_TMOUT_SPURIOUS_PHY = 10000,
4685 +
4686 /* ATA bus states */
4687 BUS_UNKNOWN = 0,
4688 BUS_DMA = 1,
4689 @@ -786,6 +793,8 @@ struct ata_link {
4690 struct ata_eh_context eh_context;
4691
4692 struct ata_device device[ATA_MAX_DEVICES];
4693 +
4694 + unsigned long last_lpm_change; /* when last LPM change happened */
4695 };
4696 #define ATA_LINK_CLEAR_BEGIN offsetof(struct ata_link, active_tag)
4697 #define ATA_LINK_CLEAR_END offsetof(struct ata_link, device[0])
4698 @@ -1199,6 +1208,7 @@ extern struct ata_device *ata_dev_pair(struct ata_device *adev);
4699 extern int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev);
4700 extern void ata_scsi_port_error_handler(struct Scsi_Host *host, struct ata_port *ap);
4701 extern void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port *ap, struct list_head *eh_q);
4702 +extern bool sata_lpm_ignore_phy_events(struct ata_link *link);
4703
4704 extern int ata_cable_40wire(struct ata_port *ap);
4705 extern int ata_cable_80wire(struct ata_port *ap);
4706 diff --git a/include/linux/nilfs2_fs.h b/include/linux/nilfs2_fs.h
4707 index ff3fea3194c6..9abb763e4b86 100644
4708 --- a/include/linux/nilfs2_fs.h
4709 +++ b/include/linux/nilfs2_fs.h
4710 @@ -460,7 +460,7 @@ struct nilfs_btree_node {
4711 /* level */
4712 #define NILFS_BTREE_LEVEL_DATA 0
4713 #define NILFS_BTREE_LEVEL_NODE_MIN (NILFS_BTREE_LEVEL_DATA + 1)
4714 -#define NILFS_BTREE_LEVEL_MAX 14
4715 +#define NILFS_BTREE_LEVEL_MAX 14 /* Max level (exclusive) */
4716
4717 /**
4718 * struct nilfs_palloc_group_desc - block group descriptor
4719 diff --git a/include/linux/sched/rt.h b/include/linux/sched/rt.h
4720 index 6341f5be6e24..a30b172df6e1 100644
4721 --- a/include/linux/sched/rt.h
4722 +++ b/include/linux/sched/rt.h
4723 @@ -18,7 +18,7 @@ static inline int rt_task(struct task_struct *p)
4724 #ifdef CONFIG_RT_MUTEXES
4725 extern int rt_mutex_getprio(struct task_struct *p);
4726 extern void rt_mutex_setprio(struct task_struct *p, int prio);
4727 -extern int rt_mutex_check_prio(struct task_struct *task, int newprio);
4728 +extern int rt_mutex_get_effective_prio(struct task_struct *task, int newprio);
4729 extern struct task_struct *rt_mutex_get_top_task(struct task_struct *task);
4730 extern void rt_mutex_adjust_pi(struct task_struct *p);
4731 static inline bool tsk_is_pi_blocked(struct task_struct *tsk)
4732 @@ -31,9 +31,10 @@ static inline int rt_mutex_getprio(struct task_struct *p)
4733 return p->normal_prio;
4734 }
4735
4736 -static inline int rt_mutex_check_prio(struct task_struct *task, int newprio)
4737 +static inline int rt_mutex_get_effective_prio(struct task_struct *task,
4738 + int newprio)
4739 {
4740 - return 0;
4741 + return newprio;
4742 }
4743
4744 static inline struct task_struct *rt_mutex_get_top_task(struct task_struct *task)
4745 diff --git a/include/net/dst.h b/include/net/dst.h
4746 index a8ae4e760778..0fb99a26e973 100644
4747 --- a/include/net/dst.h
4748 +++ b/include/net/dst.h
4749 @@ -481,6 +481,7 @@ void dst_init(void);
4750 enum {
4751 XFRM_LOOKUP_ICMP = 1 << 0,
4752 XFRM_LOOKUP_QUEUE = 1 << 1,
4753 + XFRM_LOOKUP_KEEP_DST_REF = 1 << 2,
4754 };
4755
4756 struct flowi;
4757 diff --git a/include/xen/events.h b/include/xen/events.h
4758 index 5321cd9636e6..7d95fdf9cf3e 100644
4759 --- a/include/xen/events.h
4760 +++ b/include/xen/events.h
4761 @@ -17,7 +17,7 @@ int bind_evtchn_to_irqhandler(unsigned int evtchn,
4762 irq_handler_t handler,
4763 unsigned long irqflags, const char *devname,
4764 void *dev_id);
4765 -int bind_virq_to_irq(unsigned int virq, unsigned int cpu);
4766 +int bind_virq_to_irq(unsigned int virq, unsigned int cpu, bool percpu);
4767 int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu,
4768 irq_handler_t handler,
4769 unsigned long irqflags, const char *devname,
4770 diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c
4771 index 41d53e515914..1929ee2291f2 100644
4772 --- a/kernel/locking/rtmutex.c
4773 +++ b/kernel/locking/rtmutex.c
4774 @@ -265,15 +265,17 @@ struct task_struct *rt_mutex_get_top_task(struct task_struct *task)
4775 }
4776
4777 /*
4778 - * Called by sched_setscheduler() to check whether the priority change
4779 - * is overruled by a possible priority boosting.
4780 + * Called by sched_setscheduler() to get the priority which will be
4781 + * effective after the change.
4782 */
4783 -int rt_mutex_check_prio(struct task_struct *task, int newprio)
4784 +int rt_mutex_get_effective_prio(struct task_struct *task, int newprio)
4785 {
4786 if (!task_has_pi_waiters(task))
4787 - return 0;
4788 + return newprio;
4789
4790 - return task_top_pi_waiter(task)->task->prio <= newprio;
4791 + if (task_top_pi_waiter(task)->task->prio <= newprio)
4792 + return task_top_pi_waiter(task)->task->prio;
4793 + return newprio;
4794 }
4795
4796 /*
4797 diff --git a/kernel/module.c b/kernel/module.c
4798 index 88cec1ddb1e3..c353707bbbd5 100644
4799 --- a/kernel/module.c
4800 +++ b/kernel/module.c
4801 @@ -3307,6 +3307,9 @@ static int load_module(struct load_info *info, const char __user *uargs,
4802 module_bug_cleanup(mod);
4803 mutex_unlock(&module_mutex);
4804
4805 + blocking_notifier_call_chain(&module_notify_list,
4806 + MODULE_STATE_GOING, mod);
4807 +
4808 /* we can't deallocate the module until we clear memory protection */
4809 unset_module_init_ro_nx(mod);
4810 unset_module_core_ro_nx(mod);
4811 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
4812 index b794bde3f5e1..6810e572eda5 100644
4813 --- a/kernel/sched/core.c
4814 +++ b/kernel/sched/core.c
4815 @@ -3327,15 +3327,18 @@ static void __setscheduler_params(struct task_struct *p,
4816
4817 /* Actually do priority change: must hold pi & rq lock. */
4818 static void __setscheduler(struct rq *rq, struct task_struct *p,
4819 - const struct sched_attr *attr)
4820 + const struct sched_attr *attr, bool keep_boost)
4821 {
4822 __setscheduler_params(p, attr);
4823
4824 /*
4825 - * If we get here, there was no pi waiters boosting the
4826 - * task. It is safe to use the normal prio.
4827 + * Keep a potential priority boosting if called from
4828 + * sched_setscheduler().
4829 */
4830 - p->prio = normal_prio(p);
4831 + if (keep_boost)
4832 + p->prio = rt_mutex_get_effective_prio(p, normal_prio(p));
4833 + else
4834 + p->prio = normal_prio(p);
4835
4836 if (dl_prio(p->prio))
4837 p->sched_class = &dl_sched_class;
4838 @@ -3421,7 +3424,7 @@ static int __sched_setscheduler(struct task_struct *p,
4839 int newprio = dl_policy(attr->sched_policy) ? MAX_DL_PRIO - 1 :
4840 MAX_RT_PRIO - 1 - attr->sched_priority;
4841 int retval, oldprio, oldpolicy = -1, queued, running;
4842 - int policy = attr->sched_policy;
4843 + int new_effective_prio, policy = attr->sched_policy;
4844 unsigned long flags;
4845 const struct sched_class *prev_class;
4846 struct rq *rq;
4847 @@ -3603,15 +3606,14 @@ change:
4848 oldprio = p->prio;
4849
4850 /*
4851 - * Special case for priority boosted tasks.
4852 - *
4853 - * If the new priority is lower or equal (user space view)
4854 - * than the current (boosted) priority, we just store the new
4855 + * Take priority boosted tasks into account. If the new
4856 + * effective priority is unchanged, we just store the new
4857 * normal parameters and do not touch the scheduler class and
4858 * the runqueue. This will be done when the task deboost
4859 * itself.
4860 */
4861 - if (rt_mutex_check_prio(p, newprio)) {
4862 + new_effective_prio = rt_mutex_get_effective_prio(p, newprio);
4863 + if (new_effective_prio == oldprio) {
4864 __setscheduler_params(p, attr);
4865 task_rq_unlock(rq, p, &flags);
4866 return 0;
4867 @@ -3625,7 +3627,7 @@ change:
4868 put_prev_task(rq, p);
4869
4870 prev_class = p->sched_class;
4871 - __setscheduler(rq, p, attr);
4872 + __setscheduler(rq, p, attr, true);
4873
4874 if (running)
4875 p->sched_class->set_curr_task(rq);
4876 @@ -7237,7 +7239,7 @@ static void normalize_task(struct rq *rq, struct task_struct *p)
4877 queued = task_on_rq_queued(p);
4878 if (queued)
4879 dequeue_task(rq, p, 0);
4880 - __setscheduler(rq, p, &attr);
4881 + __setscheduler(rq, p, &attr, false);
4882 if (queued) {
4883 enqueue_task(rq, p, 0);
4884 resched_curr(rq);
4885 diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
4886 index d8c724cda37b..210b84882935 100644
4887 --- a/kernel/time/hrtimer.c
4888 +++ b/kernel/time/hrtimer.c
4889 @@ -266,23 +266,25 @@ lock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags)
4890 /*
4891 * Divide a ktime value by a nanosecond value
4892 */
4893 -u64 ktime_divns(const ktime_t kt, s64 div)
4894 +s64 __ktime_divns(const ktime_t kt, s64 div)
4895 {
4896 - u64 dclc;
4897 int sft = 0;
4898 + s64 dclc;
4899 + u64 tmp;
4900
4901 dclc = ktime_to_ns(kt);
4902 + tmp = dclc < 0 ? -dclc : dclc;
4903 +
4904 /* Make sure the divisor is less than 2^32: */
4905 while (div >> 32) {
4906 sft++;
4907 div >>= 1;
4908 }
4909 - dclc >>= sft;
4910 - do_div(dclc, (unsigned long) div);
4911 -
4912 - return dclc;
4913 + tmp >>= sft;
4914 + do_div(tmp, (unsigned long) div);
4915 + return dclc < 0 ? -tmp : tmp;
4916 }
4917 -EXPORT_SYMBOL_GPL(ktime_divns);
4918 +EXPORT_SYMBOL_GPL(__ktime_divns);
4919 #endif /* BITS_PER_LONG >= 64 */
4920
4921 /*
4922 diff --git a/lib/strnlen_user.c b/lib/strnlen_user.c
4923 index a28df5206d95..11649615c505 100644
4924 --- a/lib/strnlen_user.c
4925 +++ b/lib/strnlen_user.c
4926 @@ -57,7 +57,8 @@ static inline long do_strnlen_user(const char __user *src, unsigned long count,
4927 return res + find_zero(data) + 1 - align;
4928 }
4929 res += sizeof(unsigned long);
4930 - if (unlikely(max < sizeof(unsigned long)))
4931 + /* We already handled 'unsigned long' bytes. Did we do it all ? */
4932 + if (unlikely(max <= sizeof(unsigned long)))
4933 break;
4934 max -= sizeof(unsigned long);
4935 if (unlikely(__get_user(c,(unsigned long __user *)(src+res))))
4936 diff --git a/mm/memory-failure.c b/mm/memory-failure.c
4937 index 3415e7ad3973..22f047fbaa33 100644
4938 --- a/mm/memory-failure.c
4939 +++ b/mm/memory-failure.c
4940 @@ -1153,10 +1153,10 @@ int memory_failure(unsigned long pfn, int trapno, int flags)
4941 * The check (unnecessarily) ignores LRU pages being isolated and
4942 * walked by the page reclaim code, however that's not a big loss.
4943 */
4944 - if (!PageHuge(p) && !PageTransTail(p)) {
4945 - if (!PageLRU(p))
4946 - shake_page(p, 0);
4947 - if (!PageLRU(p)) {
4948 + if (!PageHuge(p)) {
4949 + if (!PageLRU(hpage))
4950 + shake_page(hpage, 0);
4951 + if (!PageLRU(hpage)) {
4952 /*
4953 * shake_page could have turned it free.
4954 */
4955 @@ -1733,12 +1733,12 @@ int soft_offline_page(struct page *page, int flags)
4956 } else if (ret == 0) { /* for free pages */
4957 if (PageHuge(page)) {
4958 set_page_hwpoison_huge_page(hpage);
4959 - dequeue_hwpoisoned_huge_page(hpage);
4960 - atomic_long_add(1 << compound_order(hpage),
4961 + if (!dequeue_hwpoisoned_huge_page(hpage))
4962 + atomic_long_add(1 << compound_order(hpage),
4963 &num_poisoned_pages);
4964 } else {
4965 - SetPageHWPoison(page);
4966 - atomic_long_inc(&num_poisoned_pages);
4967 + if (!TestSetPageHWPoison(page))
4968 + atomic_long_inc(&num_poisoned_pages);
4969 }
4970 }
4971 unset_migratetype_isolate(page, MIGRATE_MOVABLE);
4972 diff --git a/mm/mempolicy.c b/mm/mempolicy.c
4973 index e58725aff7e9..39198cb78c6f 100644
4974 --- a/mm/mempolicy.c
4975 +++ b/mm/mempolicy.c
4976 @@ -2548,7 +2548,7 @@ static void __init check_numabalancing_enable(void)
4977 if (numabalancing_override)
4978 set_numabalancing_state(numabalancing_override == 1);
4979
4980 - if (nr_node_ids > 1 && !numabalancing_override) {
4981 + if (num_online_nodes() > 1 && !numabalancing_override) {
4982 pr_info("%s automatic NUMA balancing. "
4983 "Configure with numa_balancing= or the "
4984 "kernel.numa_balancing sysctl",
4985 diff --git a/mm/page-writeback.c b/mm/page-writeback.c
4986 index c8abd208432d..b9aaa16dcf85 100644
4987 --- a/mm/page-writeback.c
4988 +++ b/mm/page-writeback.c
4989 @@ -580,7 +580,7 @@ static long long pos_ratio_polynom(unsigned long setpoint,
4990 long x;
4991
4992 x = div64_s64(((s64)setpoint - (s64)dirty) << RATELIMIT_CALC_SHIFT,
4993 - limit - setpoint + 1);
4994 + (limit - setpoint) | 1);
4995 pos_ratio = x;
4996 pos_ratio = pos_ratio * x >> RATELIMIT_CALC_SHIFT;
4997 pos_ratio = pos_ratio * x >> RATELIMIT_CALC_SHIFT;
4998 @@ -807,7 +807,7 @@ static unsigned long bdi_position_ratio(struct backing_dev_info *bdi,
4999 * scale global setpoint to bdi's:
5000 * bdi_setpoint = setpoint * bdi_thresh / thresh
5001 */
5002 - x = div_u64((u64)bdi_thresh << 16, thresh + 1);
5003 + x = div_u64((u64)bdi_thresh << 16, thresh | 1);
5004 bdi_setpoint = setpoint * (u64)x >> 16;
5005 /*
5006 * Use span=(8*write_bw) in single bdi case as indicated by
5007 @@ -822,7 +822,7 @@ static unsigned long bdi_position_ratio(struct backing_dev_info *bdi,
5008
5009 if (bdi_dirty < x_intercept - span / 4) {
5010 pos_ratio = div64_u64(pos_ratio * (x_intercept - bdi_dirty),
5011 - x_intercept - bdi_setpoint + 1);
5012 + (x_intercept - bdi_setpoint) | 1);
5013 } else
5014 pos_ratio /= 4;
5015
5016 diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
5017 index b0cf1f287aed..e242f96550bd 100644
5018 --- a/net/ceph/osd_client.c
5019 +++ b/net/ceph/osd_client.c
5020 @@ -1263,8 +1263,6 @@ static void __unregister_linger_request(struct ceph_osd_client *osdc,
5021 if (list_empty(&req->r_osd_item))
5022 req->r_osd = NULL;
5023 }
5024 -
5025 - list_del_init(&req->r_req_lru_item); /* can be on notarget */
5026 ceph_osdc_put_request(req);
5027 }
5028
5029 @@ -1974,20 +1972,29 @@ static void kick_requests(struct ceph_osd_client *osdc, bool force_resend,
5030 err = __map_request(osdc, req,
5031 force_resend || force_resend_writes);
5032 dout("__map_request returned %d\n", err);
5033 - if (err == 0)
5034 - continue; /* no change and no osd was specified */
5035 if (err < 0)
5036 continue; /* hrm! */
5037 - if (req->r_osd == NULL) {
5038 - dout("tid %llu maps to no valid osd\n", req->r_tid);
5039 - needmap++; /* request a newer map */
5040 - continue;
5041 - }
5042 + if (req->r_osd == NULL || err > 0) {
5043 + if (req->r_osd == NULL) {
5044 + dout("lingering %p tid %llu maps to no osd\n",
5045 + req, req->r_tid);
5046 + /*
5047 + * A homeless lingering request makes
5048 + * no sense, as it's job is to keep
5049 + * a particular OSD connection open.
5050 + * Request a newer map and kick the
5051 + * request, knowing that it won't be
5052 + * resent until we actually get a map
5053 + * that can tell us where to send it.
5054 + */
5055 + needmap++;
5056 + }
5057
5058 - dout("kicking lingering %p tid %llu osd%d\n", req, req->r_tid,
5059 - req->r_osd ? req->r_osd->o_osd : -1);
5060 - __register_request(osdc, req);
5061 - __unregister_linger_request(osdc, req);
5062 + dout("kicking lingering %p tid %llu osd%d\n", req,
5063 + req->r_tid, req->r_osd ? req->r_osd->o_osd : -1);
5064 + __register_request(osdc, req);
5065 + __unregister_linger_request(osdc, req);
5066 + }
5067 }
5068 reset_changed_osds(osdc);
5069 mutex_unlock(&osdc->request_mutex);
5070 diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
5071 index 91c1aca65ae9..aed656d18b23 100644
5072 --- a/net/mac80211/ieee80211_i.h
5073 +++ b/net/mac80211/ieee80211_i.h
5074 @@ -204,6 +204,8 @@ enum ieee80211_packet_rx_flags {
5075 * @IEEE80211_RX_CMNTR: received on cooked monitor already
5076 * @IEEE80211_RX_BEACON_REPORTED: This frame was already reported
5077 * to cfg80211_report_obss_beacon().
5078 + * @IEEE80211_RX_REORDER_TIMER: this frame is released by the
5079 + * reorder buffer timeout timer, not the normal RX path
5080 *
5081 * These flags are used across handling multiple interfaces
5082 * for a single frame.
5083 @@ -211,6 +213,7 @@ enum ieee80211_packet_rx_flags {
5084 enum ieee80211_rx_flags {
5085 IEEE80211_RX_CMNTR = BIT(0),
5086 IEEE80211_RX_BEACON_REPORTED = BIT(1),
5087 + IEEE80211_RX_REORDER_TIMER = BIT(2),
5088 };
5089
5090 struct ieee80211_rx_data {
5091 diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
5092 index 631d59f540d1..a578c5717112 100644
5093 --- a/net/mac80211/rx.c
5094 +++ b/net/mac80211/rx.c
5095 @@ -2000,7 +2000,8 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
5096 /* deliver to local stack */
5097 skb->protocol = eth_type_trans(skb, dev);
5098 memset(skb->cb, 0, sizeof(skb->cb));
5099 - if (rx->local->napi)
5100 + if (!(rx->flags & IEEE80211_RX_REORDER_TIMER) &&
5101 + rx->local->napi)
5102 napi_gro_receive(rx->local->napi, skb);
5103 else
5104 netif_receive_skb(skb);
5105 @@ -3070,7 +3071,7 @@ void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid)
5106 /* This is OK -- must be QoS data frame */
5107 .security_idx = tid,
5108 .seqno_idx = tid,
5109 - .flags = 0,
5110 + .flags = IEEE80211_RX_REORDER_TIMER,
5111 };
5112 struct tid_ampdu_rx *tid_agg_rx;
5113
5114 diff --git a/net/mac80211/wep.c b/net/mac80211/wep.c
5115 index 9181fb6d6437..837b7b1bb310 100644
5116 --- a/net/mac80211/wep.c
5117 +++ b/net/mac80211/wep.c
5118 @@ -98,8 +98,7 @@ static u8 *ieee80211_wep_add_iv(struct ieee80211_local *local,
5119
5120 hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED);
5121
5122 - if (WARN_ON(skb_tailroom(skb) < IEEE80211_WEP_ICV_LEN ||
5123 - skb_headroom(skb) < IEEE80211_WEP_IV_LEN))
5124 + if (WARN_ON(skb_headroom(skb) < IEEE80211_WEP_IV_LEN))
5125 return NULL;
5126
5127 hdrlen = ieee80211_hdrlen(hdr->frame_control);
5128 @@ -169,6 +168,9 @@ int ieee80211_wep_encrypt(struct ieee80211_local *local,
5129 size_t len;
5130 u8 rc4key[3 + WLAN_KEY_LEN_WEP104];
5131
5132 + if (WARN_ON(skb_tailroom(skb) < IEEE80211_WEP_ICV_LEN))
5133 + return -1;
5134 +
5135 iv = ieee80211_wep_add_iv(local, skb, keylen, keyidx);
5136 if (!iv)
5137 return -1;
5138 diff --git a/net/sunrpc/auth_gss/gss_rpc_xdr.c b/net/sunrpc/auth_gss/gss_rpc_xdr.c
5139 index 1ec19f6f0c2b..eeeba5adee6d 100644
5140 --- a/net/sunrpc/auth_gss/gss_rpc_xdr.c
5141 +++ b/net/sunrpc/auth_gss/gss_rpc_xdr.c
5142 @@ -793,20 +793,26 @@ int gssx_dec_accept_sec_context(struct rpc_rqst *rqstp,
5143 {
5144 u32 value_follows;
5145 int err;
5146 + struct page *scratch;
5147 +
5148 + scratch = alloc_page(GFP_KERNEL);
5149 + if (!scratch)
5150 + return -ENOMEM;
5151 + xdr_set_scratch_buffer(xdr, page_address(scratch), PAGE_SIZE);
5152
5153 /* res->status */
5154 err = gssx_dec_status(xdr, &res->status);
5155 if (err)
5156 - return err;
5157 + goto out_free;
5158
5159 /* res->context_handle */
5160 err = gssx_dec_bool(xdr, &value_follows);
5161 if (err)
5162 - return err;
5163 + goto out_free;
5164 if (value_follows) {
5165 err = gssx_dec_ctx(xdr, res->context_handle);
5166 if (err)
5167 - return err;
5168 + goto out_free;
5169 } else {
5170 res->context_handle = NULL;
5171 }
5172 @@ -814,11 +820,11 @@ int gssx_dec_accept_sec_context(struct rpc_rqst *rqstp,
5173 /* res->output_token */
5174 err = gssx_dec_bool(xdr, &value_follows);
5175 if (err)
5176 - return err;
5177 + goto out_free;
5178 if (value_follows) {
5179 err = gssx_dec_buffer(xdr, res->output_token);
5180 if (err)
5181 - return err;
5182 + goto out_free;
5183 } else {
5184 res->output_token = NULL;
5185 }
5186 @@ -826,14 +832,17 @@ int gssx_dec_accept_sec_context(struct rpc_rqst *rqstp,
5187 /* res->delegated_cred_handle */
5188 err = gssx_dec_bool(xdr, &value_follows);
5189 if (err)
5190 - return err;
5191 + goto out_free;
5192 if (value_follows) {
5193 /* we do not support upcall servers sending this data. */
5194 - return -EINVAL;
5195 + err = -EINVAL;
5196 + goto out_free;
5197 }
5198
5199 /* res->options */
5200 err = gssx_dec_option_array(xdr, &res->options);
5201
5202 +out_free:
5203 + __free_page(scratch);
5204 return err;
5205 }
5206 diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
5207 index 88bf289abdc9..f62fd2c5d836 100644
5208 --- a/net/xfrm/xfrm_policy.c
5209 +++ b/net/xfrm/xfrm_policy.c
5210 @@ -2264,11 +2264,9 @@ struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig,
5211 * have the xfrm_state's. We need to wait for KM to
5212 * negotiate new SA's or bail out with error.*/
5213 if (net->xfrm.sysctl_larval_drop) {
5214 - dst_release(dst);
5215 - xfrm_pols_put(pols, drop_pols);
5216 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTNOSTATES);
5217 -
5218 - return ERR_PTR(-EREMOTE);
5219 + err = -EREMOTE;
5220 + goto error;
5221 }
5222
5223 err = -EAGAIN;
5224 @@ -2319,7 +2317,8 @@ nopol:
5225 error:
5226 dst_release(dst);
5227 dropdst:
5228 - dst_release(dst_orig);
5229 + if (!(flags & XFRM_LOOKUP_KEEP_DST_REF))
5230 + dst_release(dst_orig);
5231 xfrm_pols_put(pols, drop_pols);
5232 return ERR_PTR(err);
5233 }
5234 @@ -2333,7 +2332,8 @@ struct dst_entry *xfrm_lookup_route(struct net *net, struct dst_entry *dst_orig,
5235 struct sock *sk, int flags)
5236 {
5237 struct dst_entry *dst = xfrm_lookup(net, dst_orig, fl, sk,
5238 - flags | XFRM_LOOKUP_QUEUE);
5239 + flags | XFRM_LOOKUP_QUEUE |
5240 + XFRM_LOOKUP_KEEP_DST_REF);
5241
5242 if (IS_ERR(dst) && PTR_ERR(dst) == -EREMOTE)
5243 return make_blackhole(net, dst_orig->ops->family, dst_orig);
5244 diff --git a/sound/oss/sequencer.c b/sound/oss/sequencer.c
5245 index c0eea1dfe90f..f19da4b47c1d 100644
5246 --- a/sound/oss/sequencer.c
5247 +++ b/sound/oss/sequencer.c
5248 @@ -681,13 +681,8 @@ static int seq_timing_event(unsigned char *event_rec)
5249 break;
5250
5251 case TMR_ECHO:
5252 - if (seq_mode == SEQ_2)
5253 - seq_copy_to_input(event_rec, 8);
5254 - else
5255 - {
5256 - parm = (parm << 8 | SEQ_ECHO);
5257 - seq_copy_to_input((unsigned char *) &parm, 4);
5258 - }
5259 + parm = (parm << 8 | SEQ_ECHO);
5260 + seq_copy_to_input((unsigned char *) &parm, 4);
5261 break;
5262
5263 default:;
5264 @@ -1324,7 +1319,6 @@ int sequencer_ioctl(int dev, struct file *file, unsigned int cmd, void __user *a
5265 int mode = translate_mode(file);
5266 struct synth_info inf;
5267 struct seq_event_rec event_rec;
5268 - unsigned long flags;
5269 int __user *p = arg;
5270
5271 orig_dev = dev = dev >> 4;
5272 @@ -1479,9 +1473,7 @@ int sequencer_ioctl(int dev, struct file *file, unsigned int cmd, void __user *a
5273 case SNDCTL_SEQ_OUTOFBAND:
5274 if (copy_from_user(&event_rec, arg, sizeof(event_rec)))
5275 return -EFAULT;
5276 - spin_lock_irqsave(&lock,flags);
5277 play_event(event_rec.arr);
5278 - spin_unlock_irqrestore(&lock,flags);
5279 return 0;
5280
5281 case SNDCTL_MIDI_INFO:
5282 diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
5283 index 8413797ba38d..ddfc8a891db4 100644
5284 --- a/sound/pci/hda/hda_intel.c
5285 +++ b/sound/pci/hda/hda_intel.c
5286 @@ -272,43 +272,52 @@ enum {
5287 AZX_NUM_DRIVERS, /* keep this as last entry */
5288 };
5289
5290 +#define azx_get_snoop_type(chip) \
5291 + (((chip)->driver_caps & AZX_DCAPS_SNOOP_MASK) >> 10)
5292 +#define AZX_DCAPS_SNOOP_TYPE(type) ((AZX_SNOOP_TYPE_ ## type) << 10)
5293 +
5294 /* quirks for Intel PCH */
5295 #define AZX_DCAPS_INTEL_PCH_NOPM \
5296 - (AZX_DCAPS_SCH_SNOOP | AZX_DCAPS_BUFSIZE | \
5297 - AZX_DCAPS_COUNT_LPIB_DELAY | AZX_DCAPS_REVERSE_ASSIGN)
5298 + (AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY |\
5299 + AZX_DCAPS_REVERSE_ASSIGN | AZX_DCAPS_SNOOP_TYPE(SCH))
5300
5301 #define AZX_DCAPS_INTEL_PCH \
5302 (AZX_DCAPS_INTEL_PCH_NOPM | AZX_DCAPS_PM_RUNTIME)
5303
5304 #define AZX_DCAPS_INTEL_HASWELL \
5305 - (AZX_DCAPS_SCH_SNOOP | AZX_DCAPS_ALIGN_BUFSIZE | \
5306 - AZX_DCAPS_COUNT_LPIB_DELAY | AZX_DCAPS_PM_RUNTIME | \
5307 - AZX_DCAPS_I915_POWERWELL)
5308 + (AZX_DCAPS_ALIGN_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY |\
5309 + AZX_DCAPS_PM_RUNTIME | AZX_DCAPS_I915_POWERWELL |\
5310 + AZX_DCAPS_SNOOP_TYPE(SCH))
5311
5312 /* Broadwell HDMI can't use position buffer reliably, force to use LPIB */
5313 #define AZX_DCAPS_INTEL_BROADWELL \
5314 - (AZX_DCAPS_SCH_SNOOP | AZX_DCAPS_ALIGN_BUFSIZE | \
5315 - AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_PM_RUNTIME | \
5316 - AZX_DCAPS_I915_POWERWELL)
5317 + (AZX_DCAPS_ALIGN_BUFSIZE | AZX_DCAPS_POSFIX_LPIB |\
5318 + AZX_DCAPS_PM_RUNTIME | AZX_DCAPS_I915_POWERWELL |\
5319 + AZX_DCAPS_SNOOP_TYPE(SCH))
5320
5321 /* quirks for ATI SB / AMD Hudson */
5322 #define AZX_DCAPS_PRESET_ATI_SB \
5323 - (AZX_DCAPS_ATI_SNOOP | AZX_DCAPS_NO_TCSEL | \
5324 - AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
5325 + (AZX_DCAPS_NO_TCSEL | AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB |\
5326 + AZX_DCAPS_SNOOP_TYPE(ATI))
5327
5328 /* quirks for ATI/AMD HDMI */
5329 #define AZX_DCAPS_PRESET_ATI_HDMI \
5330 (AZX_DCAPS_NO_TCSEL | AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB|\
5331 AZX_DCAPS_NO_MSI64)
5332
5333 +/* quirks for ATI HDMI with snoop off */
5334 +#define AZX_DCAPS_PRESET_ATI_HDMI_NS \
5335 + (AZX_DCAPS_PRESET_ATI_HDMI | AZX_DCAPS_SNOOP_OFF)
5336 +
5337 /* quirks for Nvidia */
5338 #define AZX_DCAPS_PRESET_NVIDIA \
5339 - (AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI |\
5340 - AZX_DCAPS_ALIGN_BUFSIZE | AZX_DCAPS_NO_64BIT |\
5341 - AZX_DCAPS_CORBRP_SELF_CLEAR)
5342 + (AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI | AZX_DCAPS_ALIGN_BUFSIZE |\
5343 + AZX_DCAPS_NO_64BIT | AZX_DCAPS_CORBRP_SELF_CLEAR |\
5344 + AZX_DCAPS_SNOOP_TYPE(NVIDIA))
5345
5346 #define AZX_DCAPS_PRESET_CTHDA \
5347 - (AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_4K_BDLE_BOUNDARY)
5348 + (AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB |\
5349 + AZX_DCAPS_4K_BDLE_BOUNDARY | AZX_DCAPS_SNOOP_OFF)
5350
5351 /*
5352 * VGA-switcher support
5353 @@ -437,6 +446,8 @@ static void update_pci_byte(struct pci_dev *pci, unsigned int reg,
5354
5355 static void azx_init_pci(struct azx *chip)
5356 {
5357 + int snoop_type = azx_get_snoop_type(chip);
5358 +
5359 /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44)
5360 * TCSEL == Traffic Class Select Register, which sets PCI express QOS
5361 * Ensuring these bits are 0 clears playback static on some HD Audio
5362 @@ -451,7 +462,7 @@ static void azx_init_pci(struct azx *chip)
5363 /* For ATI SB450/600/700/800/900 and AMD Hudson azalia HD audio,
5364 * we need to enable snoop.
5365 */
5366 - if (chip->driver_caps & AZX_DCAPS_ATI_SNOOP) {
5367 + if (snoop_type == AZX_SNOOP_TYPE_ATI) {
5368 dev_dbg(chip->card->dev, "Setting ATI snoop: %d\n",
5369 azx_snoop(chip));
5370 update_pci_byte(chip->pci,
5371 @@ -460,7 +471,7 @@ static void azx_init_pci(struct azx *chip)
5372 }
5373
5374 /* For NVIDIA HDA, enable snoop */
5375 - if (chip->driver_caps & AZX_DCAPS_NVIDIA_SNOOP) {
5376 + if (snoop_type == AZX_SNOOP_TYPE_NVIDIA) {
5377 dev_dbg(chip->card->dev, "Setting Nvidia snoop: %d\n",
5378 azx_snoop(chip));
5379 update_pci_byte(chip->pci,
5380 @@ -475,7 +486,7 @@ static void azx_init_pci(struct azx *chip)
5381 }
5382
5383 /* Enable SCH/PCH snoop if needed */
5384 - if (chip->driver_caps & AZX_DCAPS_SCH_SNOOP) {
5385 + if (snoop_type == AZX_SNOOP_TYPE_SCH) {
5386 unsigned short snoop;
5387 pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop);
5388 if ((!azx_snoop(chip) && !(snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)) ||
5389 @@ -1363,8 +1374,8 @@ static void azx_check_snoop_available(struct azx *chip)
5390 {
5391 bool snoop = chip->snoop;
5392
5393 - switch (chip->driver_type) {
5394 - case AZX_DRIVER_VIA:
5395 + if (azx_get_snoop_type(chip) == AZX_SNOOP_TYPE_NONE &&
5396 + chip->driver_type == AZX_DRIVER_VIA) {
5397 /* force to non-snoop mode for a new VIA controller
5398 * when BIOS is set
5399 */
5400 @@ -1374,17 +1385,11 @@ static void azx_check_snoop_available(struct azx *chip)
5401 if (!(val & 0x80) && chip->pci->revision == 0x30)
5402 snoop = false;
5403 }
5404 - break;
5405 - case AZX_DRIVER_ATIHDMI_NS:
5406 - /* new ATI HDMI requires non-snoop */
5407 - snoop = false;
5408 - break;
5409 - case AZX_DRIVER_CTHDA:
5410 - case AZX_DRIVER_CMEDIA:
5411 - snoop = false;
5412 - break;
5413 }
5414
5415 + if (chip->driver_caps & AZX_DCAPS_SNOOP_OFF)
5416 + snoop = false;
5417 +
5418 if (snoop != chip->snoop) {
5419 dev_info(chip->card->dev, "Force to %s mode\n",
5420 snoop ? "snoop" : "non-snoop");
5421 @@ -2131,13 +2136,15 @@ static const struct pci_device_id azx_ids[] = {
5422 { PCI_DEVICE(0x1002, 0xaa98),
5423 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
5424 { PCI_DEVICE(0x1002, 0x9902),
5425 - .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
5426 + .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
5427 { PCI_DEVICE(0x1002, 0xaaa0),
5428 - .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
5429 + .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
5430 { PCI_DEVICE(0x1002, 0xaaa8),
5431 - .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
5432 + .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
5433 { PCI_DEVICE(0x1002, 0xaab0),
5434 - .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
5435 + .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
5436 + { PCI_DEVICE(0x1002, 0xaac8),
5437 + .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
5438 /* VIA VT8251/VT8237A */
5439 { PCI_DEVICE(0x1106, 0x3288),
5440 .driver_data = AZX_DRIVER_VIA | AZX_DCAPS_POSFIX_VIA },
5441 @@ -2184,7 +2191,7 @@ static const struct pci_device_id azx_ids[] = {
5442 /* CM8888 */
5443 { PCI_DEVICE(0x13f6, 0x5011),
5444 .driver_data = AZX_DRIVER_CMEDIA |
5445 - AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB },
5446 + AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_SNOOP_OFF },
5447 /* Vortex86MX */
5448 { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC },
5449 /* VMware HDAudio */
5450 diff --git a/sound/pci/hda/hda_priv.h b/sound/pci/hda/hda_priv.h
5451 index 5016014e57f2..a09703a2b2c1 100644
5452 --- a/sound/pci/hda/hda_priv.h
5453 +++ b/sound/pci/hda/hda_priv.h
5454 @@ -152,9 +152,8 @@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };
5455 /* bits 0-7 are used for indicating driver type */
5456 #define AZX_DCAPS_NO_TCSEL (1 << 8) /* No Intel TCSEL bit */
5457 #define AZX_DCAPS_NO_MSI (1 << 9) /* No MSI support */
5458 -#define AZX_DCAPS_ATI_SNOOP (1 << 10) /* ATI snoop enable */
5459 -#define AZX_DCAPS_NVIDIA_SNOOP (1 << 11) /* Nvidia snoop enable */
5460 -#define AZX_DCAPS_SCH_SNOOP (1 << 12) /* SCH/PCH snoop enable */
5461 +#define AZX_DCAPS_SNOOP_MASK (3 << 10) /* snoop type mask */
5462 +#define AZX_DCAPS_SNOOP_OFF (1 << 12) /* snoop default off */
5463 #define AZX_DCAPS_RIRB_DELAY (1 << 13) /* Long delay in read loop */
5464 #define AZX_DCAPS_RIRB_PRE_DELAY (1 << 14) /* Put a delay before read */
5465 #define AZX_DCAPS_CTX_WORKAROUND (1 << 15) /* X-Fi workaround */
5466 @@ -173,6 +172,13 @@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };
5467 #define AZX_DCAPS_CORBRP_SELF_CLEAR (1 << 28) /* CORBRP clears itself after reset */
5468 #define AZX_DCAPS_NO_MSI64 (1 << 29) /* Stick to 32-bit MSIs */
5469
5470 +enum {
5471 + AZX_SNOOP_TYPE_NONE ,
5472 + AZX_SNOOP_TYPE_SCH,
5473 + AZX_SNOOP_TYPE_ATI,
5474 + AZX_SNOOP_TYPE_NVIDIA,
5475 +};
5476 +
5477 /* HD Audio class code */
5478 #define PCI_CLASS_MULTIMEDIA_HD_AUDIO 0x0403
5479
5480 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
5481 index e3ad4a4d8d14..fca6d06f4bec 100644
5482 --- a/sound/pci/hda/patch_realtek.c
5483 +++ b/sound/pci/hda/patch_realtek.c
5484 @@ -880,6 +880,8 @@ static struct alc_codec_rename_pci_table rename_pci_tbl[] = {
5485 { 0x10ec0668, 0x1028, 0, "ALC3661" },
5486 { 0x10ec0275, 0x1028, 0, "ALC3260" },
5487 { 0x10ec0899, 0x1028, 0, "ALC3861" },
5488 + { 0x10ec0298, 0x1028, 0, "ALC3266" },
5489 + { 0x10ec0256, 0x1028, 0, "ALC3246" },
5490 { 0x10ec0670, 0x1025, 0, "ALC669X" },
5491 { 0x10ec0676, 0x1025, 0, "ALC679X" },
5492 { 0x10ec0282, 0x1043, 0, "ALC3229" },
5493 @@ -3476,6 +3478,14 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
5494 WRITE_COEF(0x32, 0x42a3),
5495 {}
5496 };
5497 + static struct coef_fw coef0288[] = {
5498 + UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
5499 + UPDATE_COEF(0x50, 0x2000, 0x2000),
5500 + UPDATE_COEF(0x56, 0x0006, 0x0006),
5501 + UPDATE_COEF(0x66, 0x0008, 0),
5502 + UPDATE_COEF(0x67, 0x2000, 0),
5503 + {}
5504 + };
5505 static struct coef_fw coef0292[] = {
5506 WRITE_COEF(0x76, 0x000e),
5507 WRITE_COEF(0x6c, 0x2400),
5508 @@ -3500,12 +3510,18 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
5509
5510 switch (codec->vendor_id) {
5511 case 0x10ec0255:
5512 + case 0x10ec0256:
5513 alc_process_coef_fw(codec, coef0255);
5514 break;
5515 case 0x10ec0233:
5516 case 0x10ec0283:
5517 alc_process_coef_fw(codec, coef0233);
5518 break;
5519 + case 0x10ec0286:
5520 + case 0x10ec0288:
5521 + case 0x10ec0298:
5522 + alc_process_coef_fw(codec, coef0288);
5523 + break;
5524 case 0x10ec0292:
5525 alc_process_coef_fw(codec, coef0292);
5526 break;
5527 @@ -3535,6 +3551,14 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
5528 WRITE_COEF(0x26, 0x008c),
5529 {}
5530 };
5531 + static struct coef_fw coef0288[] = {
5532 + UPDATE_COEF(0x50, 0x2000, 0),
5533 + UPDATE_COEF(0x56, 0x0006, 0),
5534 + UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
5535 + UPDATE_COEF(0x66, 0x0008, 0x0008),
5536 + UPDATE_COEF(0x67, 0x2000, 0x2000),
5537 + {}
5538 + };
5539 static struct coef_fw coef0292[] = {
5540 WRITE_COEF(0x19, 0xa208),
5541 WRITE_COEF(0x2e, 0xacf0),
5542 @@ -3555,6 +3579,7 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
5543
5544 switch (codec->vendor_id) {
5545 case 0x10ec0255:
5546 + case 0x10ec0256:
5547 alc_write_coef_idx(codec, 0x45, 0xc489);
5548 snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
5549 alc_process_coef_fw(codec, coef0255);
5550 @@ -3567,6 +3592,14 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
5551 alc_process_coef_fw(codec, coef0233);
5552 snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
5553 break;
5554 + case 0x10ec0286:
5555 + case 0x10ec0288:
5556 + case 0x10ec0298:
5557 + alc_update_coef_idx(codec, 0x4f, 0x000c, 0);
5558 + snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
5559 + alc_process_coef_fw(codec, coef0288);
5560 + snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
5561 + break;
5562 case 0x10ec0292:
5563 snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
5564 alc_process_coef_fw(codec, coef0292);
5565 @@ -3578,6 +3611,10 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
5566 alc_process_coef_fw(codec, coef0293);
5567 snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
5568 break;
5569 + case 0x10ec0662:
5570 + snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
5571 + snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
5572 + break;
5573 case 0x10ec0668:
5574 alc_write_coef_idx(codec, 0x11, 0x0001);
5575 snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
5576 @@ -3602,6 +3639,14 @@ static void alc_headset_mode_default(struct hda_codec *codec)
5577 WRITE_COEF(0x32, 0x4ea3),
5578 {}
5579 };
5580 + static struct coef_fw coef0288[] = {
5581 + UPDATE_COEF(0x4f, 0xfcc0, 0xc400), /* Set to TRS type */
5582 + UPDATE_COEF(0x50, 0x2000, 0x2000),
5583 + UPDATE_COEF(0x56, 0x0006, 0x0006),
5584 + UPDATE_COEF(0x66, 0x0008, 0),
5585 + UPDATE_COEF(0x67, 0x2000, 0),
5586 + {}
5587 + };
5588 static struct coef_fw coef0292[] = {
5589 WRITE_COEF(0x76, 0x000e),
5590 WRITE_COEF(0x6c, 0x2400),
5591 @@ -3624,12 +3669,18 @@ static void alc_headset_mode_default(struct hda_codec *codec)
5592
5593 switch (codec->vendor_id) {
5594 case 0x10ec0255:
5595 + case 0x10ec0256:
5596 alc_process_coef_fw(codec, coef0255);
5597 break;
5598 case 0x10ec0233:
5599 case 0x10ec0283:
5600 alc_process_coef_fw(codec, coef0233);
5601 break;
5602 + case 0x10ec0286:
5603 + case 0x10ec0288:
5604 + case 0x10ec0298:
5605 + alc_process_coef_fw(codec, coef0288);
5606 + break;
5607 case 0x10ec0292:
5608 alc_process_coef_fw(codec, coef0292);
5609 break;
5610 @@ -3658,6 +3709,13 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
5611 WRITE_COEF(0x32, 0x4ea3),
5612 {}
5613 };
5614 + static struct coef_fw coef0288[] = {
5615 + UPDATE_COEF(0x50, 0x2000, 0x2000),
5616 + UPDATE_COEF(0x56, 0x0006, 0x0006),
5617 + UPDATE_COEF(0x66, 0x0008, 0),
5618 + UPDATE_COEF(0x67, 0x2000, 0),
5619 + {}
5620 + };
5621 static struct coef_fw coef0292[] = {
5622 WRITE_COEF(0x6b, 0xd429),
5623 WRITE_COEF(0x76, 0x0008),
5624 @@ -3678,12 +3736,22 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
5625
5626 switch (codec->vendor_id) {
5627 case 0x10ec0255:
5628 + case 0x10ec0256:
5629 alc_process_coef_fw(codec, coef0255);
5630 break;
5631 case 0x10ec0233:
5632 case 0x10ec0283:
5633 alc_process_coef_fw(codec, coef0233);
5634 break;
5635 + case 0x10ec0298:
5636 + alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0020);/* Headset output enable */
5637 + /* ALC298 jack type setting is the same with ALC286/ALC288 */
5638 + case 0x10ec0286:
5639 + case 0x10ec0288:
5640 + alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xd400);
5641 + msleep(300);
5642 + alc_process_coef_fw(codec, coef0288);
5643 + break;
5644 case 0x10ec0292:
5645 alc_process_coef_fw(codec, coef0292);
5646 break;
5647 @@ -3712,6 +3780,13 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
5648 WRITE_COEF(0x32, 0x4ea3),
5649 {}
5650 };
5651 + static struct coef_fw coef0288[] = {
5652 + UPDATE_COEF(0x50, 0x2000, 0x2000),
5653 + UPDATE_COEF(0x56, 0x0006, 0x0006),
5654 + UPDATE_COEF(0x66, 0x0008, 0),
5655 + UPDATE_COEF(0x67, 0x2000, 0),
5656 + {}
5657 + };
5658 static struct coef_fw coef0292[] = {
5659 WRITE_COEF(0x6b, 0xe429),
5660 WRITE_COEF(0x76, 0x0008),
5661 @@ -3732,12 +3807,22 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
5662
5663 switch (codec->vendor_id) {
5664 case 0x10ec0255:
5665 + case 0x10ec0256:
5666 alc_process_coef_fw(codec, coef0255);
5667 break;
5668 case 0x10ec0233:
5669 case 0x10ec0283:
5670 alc_process_coef_fw(codec, coef0233);
5671 break;
5672 + case 0x10ec0298:
5673 + alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0010);/* Headset output enable */
5674 + /* ALC298 jack type setting is the same with ALC286/ALC288 */
5675 + case 0x10ec0286:
5676 + case 0x10ec0288:
5677 + alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xe400);
5678 + msleep(300);
5679 + alc_process_coef_fw(codec, coef0288);
5680 + break;
5681 case 0x10ec0292:
5682 alc_process_coef_fw(codec, coef0292);
5683 break;
5684 @@ -3762,6 +3847,10 @@ static void alc_determine_headset_type(struct hda_codec *codec)
5685 conteol) */
5686 {}
5687 };
5688 + static struct coef_fw coef0288[] = {
5689 + UPDATE_COEF(0x4f, 0xfcc0, 0xd400), /* Check Type */
5690 + {}
5691 + };
5692 static struct coef_fw coef0293[] = {
5693 UPDATE_COEF(0x4a, 0x000f, 0x0008), /* Combo Jack auto detect */
5694 WRITE_COEF(0x45, 0xD429), /* Set to ctia type */
5695 @@ -3777,6 +3866,7 @@ static void alc_determine_headset_type(struct hda_codec *codec)
5696
5697 switch (codec->vendor_id) {
5698 case 0x10ec0255:
5699 + case 0x10ec0256:
5700 alc_process_coef_fw(codec, coef0255);
5701 msleep(300);
5702 val = alc_read_coef_idx(codec, 0x46);
5703 @@ -3789,6 +3879,16 @@ static void alc_determine_headset_type(struct hda_codec *codec)
5704 val = alc_read_coef_idx(codec, 0x46);
5705 is_ctia = (val & 0x0070) == 0x0070;
5706 break;
5707 + case 0x10ec0298:
5708 + alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0020); /* Headset output enable */
5709 + /* ALC298 check jack type is the same with ALC286/ALC288 */
5710 + case 0x10ec0286:
5711 + case 0x10ec0288:
5712 + alc_process_coef_fw(codec, coef0288);
5713 + msleep(350);
5714 + val = alc_read_coef_idx(codec, 0x50);
5715 + is_ctia = (val & 0x0070) == 0x0070;
5716 + break;
5717 case 0x10ec0292:
5718 alc_write_coef_idx(codec, 0x6b, 0xd429);
5719 msleep(300);
5720 @@ -3863,7 +3963,7 @@ static void alc_update_headset_mode(struct hda_codec *codec)
5721 if (new_headset_mode != ALC_HEADSET_MODE_MIC) {
5722 snd_hda_set_pin_ctl_cache(codec, hp_pin,
5723 AC_PINCTL_OUT_EN | AC_PINCTL_HP_EN);
5724 - if (spec->headphone_mic_pin)
5725 + if (spec->headphone_mic_pin && spec->headphone_mic_pin != hp_pin)
5726 snd_hda_set_pin_ctl_cache(codec, spec->headphone_mic_pin,
5727 PIN_VREFHIZ);
5728 }
5729 @@ -4038,6 +4138,23 @@ static void alc_fixup_dell_xps13(struct hda_codec *codec,
5730 }
5731 }
5732
5733 +static void alc_fixup_headset_mode_alc662(struct hda_codec *codec,
5734 + const struct hda_fixup *fix, int action)
5735 +{
5736 + struct alc_spec *spec = codec->spec;
5737 +
5738 + if (action == HDA_FIXUP_ACT_PRE_PROBE) {
5739 + spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
5740 + spec->gen.hp_mic = 1; /* Mic-in is same pin as headphone */
5741 +
5742 + /* Disable boost for mic-in permanently. (This code is only called
5743 + from quirks that guarantee that the headphone is at NID 0x1b.) */
5744 + snd_hda_codec_write(codec, 0x1b, 0, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000);
5745 + snd_hda_override_wcaps(codec, 0x1b, get_wcaps(codec, 0x1b) & ~AC_WCAP_IN_AMP);
5746 + } else
5747 + alc_fixup_headset_mode(codec, fix, action);
5748 +}
5749 +
5750 static void alc_fixup_headset_mode_alc668(struct hda_codec *codec,
5751 const struct hda_fixup *fix, int action)
5752 {
5753 @@ -4886,6 +5003,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5754 SND_PCI_QUIRK(0x104d, 0x9099, "Sony VAIO S13", ALC275_FIXUP_SONY_DISABLE_AAMIX),
5755 SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK),
5756 SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
5757 + SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
5758 SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
5759 SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
5760 SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_BXBT2807_MIC),
5761 @@ -4915,6 +5033,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5762 SND_PCI_QUIRK(0x17aa, 0x5026, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
5763 SND_PCI_QUIRK(0x17aa, 0x5034, "Thinkpad T450", ALC292_FIXUP_TPT440_DOCK),
5764 SND_PCI_QUIRK(0x17aa, 0x5036, "Thinkpad T450s", ALC292_FIXUP_TPT440_DOCK),
5765 + SND_PCI_QUIRK(0x17aa, 0x503c, "Thinkpad L450", ALC292_FIXUP_TPT440_DOCK),
5766 SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
5767 SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),
5768 SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
5769 @@ -5003,6 +5122,16 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
5770 {0x1b, 0x411111f0}, \
5771 {0x1e, 0x411111f0}
5772
5773 +#define ALC256_STANDARD_PINS \
5774 + {0x12, 0x90a60140}, \
5775 + {0x14, 0x90170110}, \
5776 + {0x19, 0x411111f0}, \
5777 + {0x1a, 0x411111f0}, \
5778 + {0x1b, 0x411111f0}, \
5779 + {0x1d, 0x40700001}, \
5780 + {0x1e, 0x411111f0}, \
5781 + {0x21, 0x02211020}
5782 +
5783 #define ALC282_STANDARD_PINS \
5784 {0x14, 0x90170110}, \
5785 {0x18, 0x411111f0}, \
5786 @@ -5095,6 +5224,19 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
5787 {0x17, 0x40000000},
5788 {0x1d, 0x40700001},
5789 {0x21, 0x02211050}),
5790 + SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell Inspiron 5548", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
5791 + ALC255_STANDARD_PINS,
5792 + {0x12, 0x90a60180},
5793 + {0x14, 0x90170130},
5794 + {0x17, 0x40000000},
5795 + {0x1d, 0x40700001},
5796 + {0x21, 0x02211040}),
5797 + SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
5798 + ALC256_STANDARD_PINS,
5799 + {0x13, 0x40000000}),
5800 + SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
5801 + ALC256_STANDARD_PINS,
5802 + {0x13, 0x411111f0}),
5803 SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4,
5804 {0x12, 0x90a60130},
5805 {0x13, 0x40000000},
5806 @@ -5828,7 +5970,9 @@ enum {
5807 ALC662_FIXUP_NO_JACK_DETECT,
5808 ALC662_FIXUP_ZOTAC_Z68,
5809 ALC662_FIXUP_INV_DMIC,
5810 + ALC662_FIXUP_DELL_MIC_NO_PRESENCE,
5811 ALC668_FIXUP_DELL_MIC_NO_PRESENCE,
5812 + ALC662_FIXUP_HEADSET_MODE,
5813 ALC668_FIXUP_HEADSET_MODE,
5814 ALC662_FIXUP_BASS_MODE4_CHMAP,
5815 ALC662_FIXUP_BASS_16,
5816 @@ -6021,6 +6165,20 @@ static const struct hda_fixup alc662_fixups[] = {
5817 .chained = true,
5818 .chain_id = ALC668_FIXUP_DELL_MIC_NO_PRESENCE
5819 },
5820 + [ALC662_FIXUP_DELL_MIC_NO_PRESENCE] = {
5821 + .type = HDA_FIXUP_PINS,
5822 + .v.pins = (const struct hda_pintbl[]) {
5823 + { 0x19, 0x03a1113c }, /* use as headset mic, without its own jack detect */
5824 + /* headphone mic by setting pin control of 0x1b (headphone out) to in + vref_50 */
5825 + { }
5826 + },
5827 + .chained = true,
5828 + .chain_id = ALC662_FIXUP_HEADSET_MODE
5829 + },
5830 + [ALC662_FIXUP_HEADSET_MODE] = {
5831 + .type = HDA_FIXUP_FUNC,
5832 + .v.func = alc_fixup_headset_mode_alc662,
5833 + },
5834 [ALC668_FIXUP_DELL_MIC_NO_PRESENCE] = {
5835 .type = HDA_FIXUP_PINS,
5836 .v.pins = (const struct hda_pintbl[]) {
5837 @@ -6172,6 +6330,18 @@ static const struct hda_model_fixup alc662_fixup_models[] = {
5838 };
5839
5840 static const struct snd_hda_pin_quirk alc662_pin_fixup_tbl[] = {
5841 + SND_HDA_PIN_QUIRK(0x10ec0662, 0x1028, "Dell", ALC662_FIXUP_DELL_MIC_NO_PRESENCE,
5842 + {0x12, 0x4004c000},
5843 + {0x14, 0x01014010},
5844 + {0x15, 0x411111f0},
5845 + {0x16, 0x411111f0},
5846 + {0x18, 0x01a19020},
5847 + {0x19, 0x411111f0},
5848 + {0x1a, 0x0181302f},
5849 + {0x1b, 0x0221401f},
5850 + {0x1c, 0x411111f0},
5851 + {0x1d, 0x4054c601},
5852 + {0x1e, 0x411111f0}),
5853 SND_HDA_PIN_QUIRK(0x10ec0668, 0x1028, "Dell", ALC668_FIXUP_AUTO_MUTE,
5854 {0x12, 0x99a30130},
5855 {0x14, 0x90170110},
5856 diff --git a/sound/pci/hda/thinkpad_helper.c b/sound/pci/hda/thinkpad_helper.c
5857 index 2341fc334163..6ba0b5517c40 100644
5858 --- a/sound/pci/hda/thinkpad_helper.c
5859 +++ b/sound/pci/hda/thinkpad_helper.c
5860 @@ -72,7 +72,6 @@ static void hda_fixup_thinkpad_acpi(struct hda_codec *codec,
5861 if (led_set_func(TPACPI_LED_MUTE, false) >= 0) {
5862 old_vmaster_hook = spec->vmaster_mute.hook;
5863 spec->vmaster_mute.hook = update_tpacpi_mute_led;
5864 - spec->vmaster_mute_enum = 1;
5865 removefunc = false;
5866 }
5867 if (led_set_func(TPACPI_LED_MICMUTE, false) >= 0) {
5868 diff --git a/sound/soc/codecs/mc13783.c b/sound/soc/codecs/mc13783.c
5869 index 71f775aad7c7..2f98417b16b7 100644
5870 --- a/sound/soc/codecs/mc13783.c
5871 +++ b/sound/soc/codecs/mc13783.c
5872 @@ -623,14 +623,14 @@ static int mc13783_probe(struct snd_soc_codec *codec)
5873 AUDIO_SSI_SEL, 0);
5874 else
5875 mc13xxx_reg_rmw(priv->mc13xxx, MC13783_AUDIO_CODEC,
5876 - 0, AUDIO_SSI_SEL);
5877 + AUDIO_SSI_SEL, AUDIO_SSI_SEL);
5878
5879 if (priv->dac_ssi_port == MC13783_SSI1_PORT)
5880 mc13xxx_reg_rmw(priv->mc13xxx, MC13783_AUDIO_DAC,
5881 AUDIO_SSI_SEL, 0);
5882 else
5883 mc13xxx_reg_rmw(priv->mc13xxx, MC13783_AUDIO_DAC,
5884 - 0, AUDIO_SSI_SEL);
5885 + AUDIO_SSI_SEL, AUDIO_SSI_SEL);
5886
5887 return 0;
5888 }
5889 diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
5890 index ab9931c280b2..34a18a910113 100644
5891 --- a/sound/soc/codecs/wm8960.c
5892 +++ b/sound/soc/codecs/wm8960.c
5893 @@ -392,7 +392,7 @@ static const struct snd_soc_dapm_route audio_paths[] = {
5894 { "Right Input Mixer", "Boost Switch", "Right Boost Mixer", },
5895 { "Right Input Mixer", NULL, "RINPUT1", }, /* Really Boost Switch */
5896 { "Right Input Mixer", NULL, "RINPUT2" },
5897 - { "Right Input Mixer", NULL, "LINPUT3" },
5898 + { "Right Input Mixer", NULL, "RINPUT3" },
5899
5900 { "Left ADC", NULL, "Left Input Mixer" },
5901 { "Right ADC", NULL, "Right Input Mixer" },
5902 diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
5903 index 1fcb9f3f3097..e5f14c878636 100644
5904 --- a/sound/soc/codecs/wm8994.c
5905 +++ b/sound/soc/codecs/wm8994.c
5906 @@ -2753,7 +2753,7 @@ static struct {
5907 };
5908
5909 static int fs_ratios[] = {
5910 - 64, 128, 192, 256, 348, 512, 768, 1024, 1408, 1536
5911 + 64, 128, 192, 256, 384, 512, 768, 1024, 1408, 1536
5912 };
5913
5914 static int bclk_divs[] = {
5915 diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
5916 index c61cb9cedbcd..943e6a9a6319 100644
5917 --- a/sound/soc/soc-dapm.c
5918 +++ b/sound/soc/soc-dapm.c
5919 @@ -3076,11 +3076,16 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
5920 }
5921
5922 prefix = soc_dapm_prefix(dapm);
5923 - if (prefix)
5924 + if (prefix) {
5925 w->name = kasprintf(GFP_KERNEL, "%s %s", prefix, widget->name);
5926 - else
5927 + if (widget->sname)
5928 + w->sname = kasprintf(GFP_KERNEL, "%s %s", prefix,
5929 + widget->sname);
5930 + } else {
5931 w->name = kasprintf(GFP_KERNEL, "%s", widget->name);
5932 -
5933 + if (widget->sname)
5934 + w->sname = kasprintf(GFP_KERNEL, "%s", widget->sname);
5935 + }
5936 if (w->name == NULL) {
5937 kfree(w);
5938 return NULL;
5939 diff --git a/sound/usb/clock.c b/sound/usb/clock.c
5940 index 03fed6611d9e..2ed260b10f6d 100644
5941 --- a/sound/usb/clock.c
5942 +++ b/sound/usb/clock.c
5943 @@ -303,6 +303,11 @@ static int set_sample_rate_v1(struct snd_usb_audio *chip, int iface,
5944 return err;
5945 }
5946
5947 + /* Don't check the sample rate for devices which we know don't
5948 + * support reading */
5949 + if (snd_usb_get_sample_rate_quirk(chip))
5950 + return 0;
5951 +
5952 if ((err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), UAC_GET_CUR,
5953 USB_TYPE_CLASS | USB_RECIP_ENDPOINT | USB_DIR_IN,
5954 UAC_EP_CS_ATTR_SAMPLE_RATE << 8, ep,
5955 diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
5956 index c62a1659106d..0d8aba5fe1a8 100644
5957 --- a/sound/usb/pcm.c
5958 +++ b/sound/usb/pcm.c
5959 @@ -482,6 +482,11 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt)
5960 /* set interface */
5961 if (subs->interface != fmt->iface ||
5962 subs->altset_idx != fmt->altset_idx) {
5963 +
5964 + err = snd_usb_select_mode_quirk(subs, fmt);
5965 + if (err < 0)
5966 + return -EIO;
5967 +
5968 err = usb_set_interface(dev, fmt->iface, fmt->altsetting);
5969 if (err < 0) {
5970 dev_err(&dev->dev,
5971 diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
5972 index 5293b5ac8b9d..fde5b6e3c8e5 100644
5973 --- a/sound/usb/quirks-table.h
5974 +++ b/sound/usb/quirks-table.h
5975 @@ -3145,6 +3145,46 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
5976
5977 {
5978 /*
5979 + * ZOOM R16/24 in audio interface mode.
5980 + * Mixer descriptors are garbage, further quirks will be needed
5981 + * to make any of it functional, thus disabled for now.
5982 + * Playback stream appears to start and run fine but no sound
5983 + * is produced, so also disabled for now.
5984 + */
5985 + USB_DEVICE(0x1686, 0x00dd),
5986 + .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
5987 + .ifnum = QUIRK_ANY_INTERFACE,
5988 + .type = QUIRK_COMPOSITE,
5989 + .data = (const struct snd_usb_audio_quirk[]) {
5990 + {
5991 + /* Mixer */
5992 + .ifnum = 0,
5993 + .type = QUIRK_IGNORE_INTERFACE,
5994 + },
5995 + {
5996 + /* Playback */
5997 + .ifnum = 1,
5998 + .type = QUIRK_IGNORE_INTERFACE,
5999 + },
6000 + {
6001 + /* Capture */
6002 + .ifnum = 2,
6003 + .type = QUIRK_AUDIO_STANDARD_INTERFACE,
6004 + },
6005 + {
6006 + /* Midi */
6007 + .ifnum = 3,
6008 + .type = QUIRK_MIDI_STANDARD_INTERFACE
6009 + },
6010 + {
6011 + .ifnum = -1
6012 + },
6013 + }
6014 + }
6015 +},
6016 +
6017 +{
6018 + /*
6019 * Some USB MIDI devices don't have an audio control interface,
6020 * so we have to grab MIDI streaming interfaces here.
6021 */
6022 diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
6023 index 60dfe0d28771..05ad944dc5c8 100644
6024 --- a/sound/usb/quirks.c
6025 +++ b/sound/usb/quirks.c
6026 @@ -1102,6 +1102,65 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
6027 }
6028 }
6029
6030 +bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
6031 +{
6032 + /* devices which do not support reading the sample rate. */
6033 + switch (chip->usb_id) {
6034 + case USB_ID(0x045E, 0x075D): /* MS Lifecam Cinema */
6035 + case USB_ID(0x045E, 0x076D): /* MS Lifecam HD-5000 */
6036 + case USB_ID(0x045E, 0x0772): /* MS Lifecam Studio */
6037 + case USB_ID(0x045E, 0x0779): /* MS Lifecam HD-3000 */
6038 + case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */
6039 + return true;
6040 + }
6041 + return false;
6042 +}
6043 +
6044 +/* Marantz/Denon USB DACs need a vendor cmd to switch
6045 + * between PCM and native DSD mode
6046 + */
6047 +static bool is_marantz_denon_dac(unsigned int id)
6048 +{
6049 + switch (id) {
6050 + case USB_ID(0x154e, 0x1003): /* Denon DA-300USB */
6051 + case USB_ID(0x154e, 0x3005): /* Marantz HD-DAC1 */
6052 + case USB_ID(0x154e, 0x3006): /* Marantz SA-14S1 */
6053 + return true;
6054 + }
6055 + return false;
6056 +}
6057 +
6058 +int snd_usb_select_mode_quirk(struct snd_usb_substream *subs,
6059 + struct audioformat *fmt)
6060 +{
6061 + struct usb_device *dev = subs->dev;
6062 + int err;
6063 +
6064 + if (is_marantz_denon_dac(subs->stream->chip->usb_id)) {
6065 + /* First switch to alt set 0, otherwise the mode switch cmd
6066 + * will not be accepted by the DAC
6067 + */
6068 + err = usb_set_interface(dev, fmt->iface, 0);
6069 + if (err < 0)
6070 + return err;
6071 +
6072 + mdelay(20); /* Delay needed after setting the interface */
6073 +
6074 + switch (fmt->altsetting) {
6075 + case 2: /* DSD mode requested */
6076 + case 1: /* PCM mode requested */
6077 + err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0,
6078 + USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE,
6079 + fmt->altsetting - 1, 1, NULL, 0);
6080 + if (err < 0)
6081 + return err;
6082 + break;
6083 + }
6084 + mdelay(20);
6085 + }
6086 + return 0;
6087 +}
6088 +
6089 void snd_usb_endpoint_start_quirk(struct snd_usb_endpoint *ep)
6090 {
6091 /*
6092 @@ -1150,16 +1209,18 @@ void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
6093 /* Marantz/Denon devices with USB DAC functionality need a delay
6094 * after each class compliant request
6095 */
6096 - if ((le16_to_cpu(dev->descriptor.idVendor) == 0x154e) &&
6097 - (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS) {
6098 + if (is_marantz_denon_dac(USB_ID(le16_to_cpu(dev->descriptor.idVendor),
6099 + le16_to_cpu(dev->descriptor.idProduct)))
6100 + && (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
6101 + mdelay(20);
6102
6103 - switch (le16_to_cpu(dev->descriptor.idProduct)) {
6104 - case 0x3005: /* Marantz HD-DAC1 */
6105 - case 0x3006: /* Marantz SA-14S1 */
6106 - mdelay(20);
6107 - break;
6108 - }
6109 - }
6110 + /* Zoom R16/24 needs a tiny delay here, otherwise requests like
6111 + * get/set frequency return as failed despite actually succeeding.
6112 + */
6113 + if ((le16_to_cpu(dev->descriptor.idVendor) == 0x1686) &&
6114 + (le16_to_cpu(dev->descriptor.idProduct) == 0x00dd) &&
6115 + (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
6116 + mdelay(1);
6117 }
6118
6119 /*
6120 @@ -1190,8 +1251,9 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
6121
6122 /* XMOS based USB DACs */
6123 switch (chip->usb_id) {
6124 - /* iFi Audio micro/nano iDSD */
6125 - case USB_ID(0x20b1, 0x3008):
6126 + case USB_ID(0x20b1, 0x3008): /* iFi Audio micro/nano iDSD */
6127 + case USB_ID(0x20b1, 0x2008): /* Matrix Audio X-Sabre */
6128 + case USB_ID(0x20b1, 0x300a): /* Matrix Audio Mini-i Pro */
6129 if (fp->altsetting == 2)
6130 return SNDRV_PCM_FMTBIT_DSD_U32_BE;
6131 break;
6132 @@ -1204,5 +1266,11 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
6133 break;
6134 }
6135
6136 + /* Denon/Marantz devices with USB DAC functionality */
6137 + if (is_marantz_denon_dac(chip->usb_id)) {
6138 + if (fp->altsetting == 2)
6139 + return SNDRV_PCM_FMTBIT_DSD_U32_BE;
6140 + }
6141 +
6142 return 0;
6143 }
6144 diff --git a/sound/usb/quirks.h b/sound/usb/quirks.h
6145 index 665e972a1b40..2cd71ed1201f 100644
6146 --- a/sound/usb/quirks.h
6147 +++ b/sound/usb/quirks.h
6148 @@ -21,6 +21,8 @@ int snd_usb_apply_boot_quirk(struct usb_device *dev,
6149 void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
6150 struct audioformat *fmt);
6151
6152 +bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip);
6153 +
6154 int snd_usb_is_big_endian_format(struct snd_usb_audio *chip,
6155 struct audioformat *fp);
6156
6157 @@ -31,6 +33,9 @@ void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
6158 __u8 request, __u8 requesttype, __u16 value,
6159 __u16 index, void *data, __u16 size);
6160
6161 +int snd_usb_select_mode_quirk(struct snd_usb_substream *subs,
6162 + struct audioformat *fmt);
6163 +
6164 u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
6165 struct audioformat *fp,
6166 unsigned int sample_bytes);
6167 diff --git a/tools/vm/Makefile b/tools/vm/Makefile
6168 index 3d907dacf2ac..c604f3ec628a 100644
6169 --- a/tools/vm/Makefile
6170 +++ b/tools/vm/Makefile
6171 @@ -3,7 +3,7 @@
6172 TARGETS=page-types slabinfo
6173
6174 LIB_DIR = ../lib/api
6175 -LIBS = $(LIB_DIR)/libapikfs.a
6176 +LIBS = $(LIB_DIR)/libapi.a
6177
6178 CC = $(CROSS_COMPILE)gcc
6179 CFLAGS = -Wall -Wextra -I../lib/