Magellan Linux

Contents of /trunk/kernel-magellan/patches-4.0/0103-4.0.4-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2566 - (show annotations) (download)
Tue Nov 25 22:54:32 2014 UTC (9 years, 5 months ago) by niro
File size: 91074 byte(s)
-linux-4.0.4
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/Makefile b/Makefile
15 index dc9f43a019d6..3d16bcc87585 100644
16 --- a/Makefile
17 +++ b/Makefile
18 @@ -1,6 +1,6 @@
19 VERSION = 4
20 PATCHLEVEL = 0
21 -SUBLEVEL = 3
22 +SUBLEVEL = 4
23 EXTRAVERSION =
24 NAME = Hurr durr I'ma sheep
25
26 diff --git a/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts b/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts
27 index 0c76d9f05fd0..f4838ebd918b 100644
28 --- a/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts
29 +++ b/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts
30 @@ -105,6 +105,10 @@
31 };
32
33 internal-regs {
34 + rtc@10300 {
35 + /* No crystal connected to the internal RTC */
36 + status = "disabled";
37 + };
38 serial@12000 {
39 status = "okay";
40 };
41 diff --git a/arch/arm/boot/dts/imx23-olinuxino.dts b/arch/arm/boot/dts/imx23-olinuxino.dts
42 index 7e6eef2488e8..82045398bf1f 100644
43 --- a/arch/arm/boot/dts/imx23-olinuxino.dts
44 +++ b/arch/arm/boot/dts/imx23-olinuxino.dts
45 @@ -12,6 +12,7 @@
46 */
47
48 /dts-v1/;
49 +#include <dt-bindings/gpio/gpio.h>
50 #include "imx23.dtsi"
51
52 / {
53 @@ -93,6 +94,7 @@
54
55 ahb@80080000 {
56 usb0: usb@80080000 {
57 + dr_mode = "host";
58 vbus-supply = <&reg_usb0_vbus>;
59 status = "okay";
60 };
61 @@ -122,7 +124,7 @@
62
63 user {
64 label = "green";
65 - gpios = <&gpio2 1 1>;
66 + gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
67 };
68 };
69 };
70 diff --git a/arch/arm/boot/dts/imx25.dtsi b/arch/arm/boot/dts/imx25.dtsi
71 index e4d3aecc4ed2..677f81d9dcd5 100644
72 --- a/arch/arm/boot/dts/imx25.dtsi
73 +++ b/arch/arm/boot/dts/imx25.dtsi
74 @@ -428,6 +428,7 @@
75
76 pwm4: pwm@53fc8000 {
77 compatible = "fsl,imx25-pwm", "fsl,imx27-pwm";
78 + #pwm-cells = <2>;
79 reg = <0x53fc8000 0x4000>;
80 clocks = <&clks 108>, <&clks 52>;
81 clock-names = "ipg", "per";
82 diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi
83 index 47f68ac868d4..5ed245a3f9ac 100644
84 --- a/arch/arm/boot/dts/imx28.dtsi
85 +++ b/arch/arm/boot/dts/imx28.dtsi
86 @@ -900,7 +900,7 @@
87 80 81 68 69
88 70 71 72 73
89 74 75 76 77>;
90 - interrupt-names = "auart4-rx", "aurat4-tx", "spdif-tx", "empty",
91 + interrupt-names = "auart4-rx", "auart4-tx", "spdif-tx", "empty",
92 "saif0", "saif1", "i2c0", "i2c1",
93 "auart0-rx", "auart0-tx", "auart1-rx", "auart1-tx",
94 "auart2-rx", "auart2-tx", "auart3-rx", "auart3-tx";
95 diff --git a/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi b/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi
96 index 19cc269a08d4..1ce6133b67f5 100644
97 --- a/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi
98 +++ b/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi
99 @@ -31,6 +31,7 @@
100 regulator-min-microvolt = <5000000>;
101 regulator-max-microvolt = <5000000>;
102 gpio = <&gpio4 15 0>;
103 + enable-active-high;
104 };
105
106 reg_usb_h1_vbus: regulator@1 {
107 @@ -40,6 +41,7 @@
108 regulator-min-microvolt = <5000000>;
109 regulator-max-microvolt = <5000000>;
110 gpio = <&gpio1 0 0>;
111 + enable-active-high;
112 };
113 };
114
115 diff --git a/arch/arm/boot/dts/omap3-n900.dts b/arch/arm/boot/dts/omap3-n900.dts
116 index db80f9d376fa..9c8bdf2c93a1 100644
117 --- a/arch/arm/boot/dts/omap3-n900.dts
118 +++ b/arch/arm/boot/dts/omap3-n900.dts
119 @@ -484,6 +484,8 @@
120 DRVDD-supply = <&vmmc2>;
121 IOVDD-supply = <&vio>;
122 DVDD-supply = <&vio>;
123 +
124 + ai3x-micbias-vg = <1>;
125 };
126
127 tlv320aic3x_aux: tlv320aic3x@19 {
128 @@ -495,6 +497,8 @@
129 DRVDD-supply = <&vmmc2>;
130 IOVDD-supply = <&vio>;
131 DVDD-supply = <&vio>;
132 +
133 + ai3x-micbias-vg = <2>;
134 };
135
136 tsl2563: tsl2563@29 {
137 diff --git a/arch/arm/boot/dts/ste-dbx5x0.dtsi b/arch/arm/boot/dts/ste-dbx5x0.dtsi
138 index bfd3f1c734b8..2201cd5da3bb 100644
139 --- a/arch/arm/boot/dts/ste-dbx5x0.dtsi
140 +++ b/arch/arm/boot/dts/ste-dbx5x0.dtsi
141 @@ -1017,23 +1017,6 @@
142 status = "disabled";
143 };
144
145 - vmmci: regulator-gpio {
146 - compatible = "regulator-gpio";
147 -
148 - regulator-min-microvolt = <1800000>;
149 - regulator-max-microvolt = <2900000>;
150 - regulator-name = "mmci-reg";
151 - regulator-type = "voltage";
152 -
153 - startup-delay-us = <100>;
154 - enable-active-high;
155 -
156 - states = <1800000 0x1
157 - 2900000 0x0>;
158 -
159 - status = "disabled";
160 - };
161 -
162 mcde@a0350000 {
163 compatible = "stericsson,mcde";
164 reg = <0xa0350000 0x1000>, /* MCDE */
165 diff --git a/arch/arm/boot/dts/ste-href.dtsi b/arch/arm/boot/dts/ste-href.dtsi
166 index bf8f0eddc2c0..744c1e3a744d 100644
167 --- a/arch/arm/boot/dts/ste-href.dtsi
168 +++ b/arch/arm/boot/dts/ste-href.dtsi
169 @@ -111,6 +111,21 @@
170 pinctrl-1 = <&i2c3_sleep_mode>;
171 };
172
173 + vmmci: regulator-gpio {
174 + compatible = "regulator-gpio";
175 +
176 + regulator-min-microvolt = <1800000>;
177 + regulator-max-microvolt = <2900000>;
178 + regulator-name = "mmci-reg";
179 + regulator-type = "voltage";
180 +
181 + startup-delay-us = <100>;
182 + enable-active-high;
183 +
184 + states = <1800000 0x1
185 + 2900000 0x0>;
186 + };
187 +
188 // External Micro SD slot
189 sdi0_per1@80126000 {
190 arm,primecell-periphid = <0x10480180>;
191 diff --git a/arch/arm/boot/dts/ste-snowball.dts b/arch/arm/boot/dts/ste-snowball.dts
192 index 206826a855c0..1bc84ebdccaa 100644
193 --- a/arch/arm/boot/dts/ste-snowball.dts
194 +++ b/arch/arm/boot/dts/ste-snowball.dts
195 @@ -146,8 +146,21 @@
196 };
197
198 vmmci: regulator-gpio {
199 + compatible = "regulator-gpio";
200 +
201 gpios = <&gpio7 4 0x4>;
202 enable-gpio = <&gpio6 25 0x4>;
203 +
204 + regulator-min-microvolt = <1800000>;
205 + regulator-max-microvolt = <2900000>;
206 + regulator-name = "mmci-reg";
207 + regulator-type = "voltage";
208 +
209 + startup-delay-us = <100>;
210 + enable-active-high;
211 +
212 + states = <1800000 0x1
213 + 2900000 0x0>;
214 };
215
216 // External Micro SD slot
217 diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
218 index 902397dd1000..1c1cdfa566ac 100644
219 --- a/arch/arm/kernel/Makefile
220 +++ b/arch/arm/kernel/Makefile
221 @@ -86,7 +86,7 @@ obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
222
223 obj-$(CONFIG_ARM_VIRT_EXT) += hyp-stub.o
224 ifeq ($(CONFIG_ARM_PSCI),y)
225 -obj-y += psci.o
226 +obj-y += psci.o psci-call.o
227 obj-$(CONFIG_SMP) += psci_smp.o
228 endif
229
230 diff --git a/arch/arm/kernel/psci-call.S b/arch/arm/kernel/psci-call.S
231 new file mode 100644
232 index 000000000000..a78e9e1e206d
233 --- /dev/null
234 +++ b/arch/arm/kernel/psci-call.S
235 @@ -0,0 +1,31 @@
236 +/*
237 + * This program is free software; you can redistribute it and/or modify
238 + * it under the terms of the GNU General Public License version 2 as
239 + * published by the Free Software Foundation.
240 + *
241 + * This program is distributed in the hope that it will be useful,
242 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
243 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
244 + * GNU General Public License for more details.
245 + *
246 + * Copyright (C) 2015 ARM Limited
247 + *
248 + * Author: Mark Rutland <mark.rutland@arm.com>
249 + */
250 +
251 +#include <linux/linkage.h>
252 +
253 +#include <asm/opcodes-sec.h>
254 +#include <asm/opcodes-virt.h>
255 +
256 +/* int __invoke_psci_fn_hvc(u32 function_id, u32 arg0, u32 arg1, u32 arg2) */
257 +ENTRY(__invoke_psci_fn_hvc)
258 + __HVC(0)
259 + bx lr
260 +ENDPROC(__invoke_psci_fn_hvc)
261 +
262 +/* int __invoke_psci_fn_smc(u32 function_id, u32 arg0, u32 arg1, u32 arg2) */
263 +ENTRY(__invoke_psci_fn_smc)
264 + __SMC(0)
265 + bx lr
266 +ENDPROC(__invoke_psci_fn_smc)
267 diff --git a/arch/arm/kernel/psci.c b/arch/arm/kernel/psci.c
268 index f73891b6b730..f90fdf4ce7c7 100644
269 --- a/arch/arm/kernel/psci.c
270 +++ b/arch/arm/kernel/psci.c
271 @@ -23,8 +23,6 @@
272
273 #include <asm/compiler.h>
274 #include <asm/errno.h>
275 -#include <asm/opcodes-sec.h>
276 -#include <asm/opcodes-virt.h>
277 #include <asm/psci.h>
278 #include <asm/system_misc.h>
279
280 @@ -33,6 +31,9 @@ struct psci_operations psci_ops;
281 static int (*invoke_psci_fn)(u32, u32, u32, u32);
282 typedef int (*psci_initcall_t)(const struct device_node *);
283
284 +asmlinkage int __invoke_psci_fn_hvc(u32, u32, u32, u32);
285 +asmlinkage int __invoke_psci_fn_smc(u32, u32, u32, u32);
286 +
287 enum psci_function {
288 PSCI_FN_CPU_SUSPEND,
289 PSCI_FN_CPU_ON,
290 @@ -71,40 +72,6 @@ static u32 psci_power_state_pack(struct psci_power_state state)
291 & PSCI_0_2_POWER_STATE_AFFL_MASK);
292 }
293
294 -/*
295 - * The following two functions are invoked via the invoke_psci_fn pointer
296 - * and will not be inlined, allowing us to piggyback on the AAPCS.
297 - */
298 -static noinline int __invoke_psci_fn_hvc(u32 function_id, u32 arg0, u32 arg1,
299 - u32 arg2)
300 -{
301 - asm volatile(
302 - __asmeq("%0", "r0")
303 - __asmeq("%1", "r1")
304 - __asmeq("%2", "r2")
305 - __asmeq("%3", "r3")
306 - __HVC(0)
307 - : "+r" (function_id)
308 - : "r" (arg0), "r" (arg1), "r" (arg2));
309 -
310 - return function_id;
311 -}
312 -
313 -static noinline int __invoke_psci_fn_smc(u32 function_id, u32 arg0, u32 arg1,
314 - u32 arg2)
315 -{
316 - asm volatile(
317 - __asmeq("%0", "r0")
318 - __asmeq("%1", "r1")
319 - __asmeq("%2", "r2")
320 - __asmeq("%3", "r3")
321 - __SMC(0)
322 - : "+r" (function_id)
323 - : "r" (arg0), "r" (arg1), "r" (arg2));
324 -
325 - return function_id;
326 -}
327 -
328 static int psci_get_version(void)
329 {
330 int err;
331 diff --git a/arch/arm/mach-omap2/prm-regbits-34xx.h b/arch/arm/mach-omap2/prm-regbits-34xx.h
332 index cbefbd7cfdb5..661d753df584 100644
333 --- a/arch/arm/mach-omap2/prm-regbits-34xx.h
334 +++ b/arch/arm/mach-omap2/prm-regbits-34xx.h
335 @@ -112,6 +112,7 @@
336 #define OMAP3430_VC_CMD_ONLP_SHIFT 16
337 #define OMAP3430_VC_CMD_RET_SHIFT 8
338 #define OMAP3430_VC_CMD_OFF_SHIFT 0
339 +#define OMAP3430_SREN_MASK (1 << 4)
340 #define OMAP3430_HSEN_MASK (1 << 3)
341 #define OMAP3430_MCODE_MASK (0x7 << 0)
342 #define OMAP3430_VALID_MASK (1 << 24)
343 diff --git a/arch/arm/mach-omap2/prm-regbits-44xx.h b/arch/arm/mach-omap2/prm-regbits-44xx.h
344 index b1c7a33e00e7..e794828dee55 100644
345 --- a/arch/arm/mach-omap2/prm-regbits-44xx.h
346 +++ b/arch/arm/mach-omap2/prm-regbits-44xx.h
347 @@ -35,6 +35,7 @@
348 #define OMAP4430_GLOBAL_WARM_SW_RST_SHIFT 1
349 #define OMAP4430_GLOBAL_WUEN_MASK (1 << 16)
350 #define OMAP4430_HSMCODE_MASK (0x7 << 0)
351 +#define OMAP4430_SRMODEEN_MASK (1 << 4)
352 #define OMAP4430_HSMODEEN_MASK (1 << 3)
353 #define OMAP4430_HSSCLL_SHIFT 24
354 #define OMAP4430_ICEPICK_RST_SHIFT 9
355 diff --git a/arch/arm/mach-omap2/vc.c b/arch/arm/mach-omap2/vc.c
356 index be9ef834fa81..076fd20d7e5a 100644
357 --- a/arch/arm/mach-omap2/vc.c
358 +++ b/arch/arm/mach-omap2/vc.c
359 @@ -316,7 +316,8 @@ static void __init omap3_vc_init_pmic_signaling(struct voltagedomain *voltdm)
360 * idle. And we can also scale voltages to zero for off-idle.
361 * Note that no actual voltage scaling during off-idle will
362 * happen unless the board specific twl4030 PMIC scripts are
363 - * loaded.
364 + * loaded. See also omap_vc_i2c_init for comments regarding
365 + * erratum i531.
366 */
367 val = voltdm->read(OMAP3_PRM_VOLTCTRL_OFFSET);
368 if (!(val & OMAP3430_PRM_VOLTCTRL_SEL_OFF)) {
369 @@ -704,9 +705,16 @@ static void __init omap_vc_i2c_init(struct voltagedomain *voltdm)
370 return;
371 }
372
373 + /*
374 + * Note that for omap3 OMAP3430_SREN_MASK clears SREN to work around
375 + * erratum i531 "Extra Power Consumed When Repeated Start Operation
376 + * Mode Is Enabled on I2C Interface Dedicated for Smart Reflex (I2C4)".
377 + * Otherwise I2C4 eventually leads into about 23mW extra power being
378 + * consumed even during off idle using VMODE.
379 + */
380 i2c_high_speed = voltdm->pmic->i2c_high_speed;
381 if (i2c_high_speed)
382 - voltdm->rmw(vc->common->i2c_cfg_hsen_mask,
383 + voltdm->rmw(vc->common->i2c_cfg_clear_mask,
384 vc->common->i2c_cfg_hsen_mask,
385 vc->common->i2c_cfg_reg);
386
387 diff --git a/arch/arm/mach-omap2/vc.h b/arch/arm/mach-omap2/vc.h
388 index cdbdd78e755e..89b83b7ff3ec 100644
389 --- a/arch/arm/mach-omap2/vc.h
390 +++ b/arch/arm/mach-omap2/vc.h
391 @@ -34,6 +34,7 @@ struct voltagedomain;
392 * @cmd_ret_shift: RET field shift in PRM_VC_CMD_VAL_* register
393 * @cmd_off_shift: OFF field shift in PRM_VC_CMD_VAL_* register
394 * @i2c_cfg_reg: I2C configuration register offset
395 + * @i2c_cfg_clear_mask: high-speed mode bit clear mask in I2C config register
396 * @i2c_cfg_hsen_mask: high-speed mode bit field mask in I2C config register
397 * @i2c_mcode_mask: MCODE field mask for I2C config register
398 *
399 @@ -52,6 +53,7 @@ struct omap_vc_common {
400 u8 cmd_ret_shift;
401 u8 cmd_off_shift;
402 u8 i2c_cfg_reg;
403 + u8 i2c_cfg_clear_mask;
404 u8 i2c_cfg_hsen_mask;
405 u8 i2c_mcode_mask;
406 };
407 diff --git a/arch/arm/mach-omap2/vc3xxx_data.c b/arch/arm/mach-omap2/vc3xxx_data.c
408 index 75bc4aa22b3a..71d74c9172c1 100644
409 --- a/arch/arm/mach-omap2/vc3xxx_data.c
410 +++ b/arch/arm/mach-omap2/vc3xxx_data.c
411 @@ -40,6 +40,7 @@ static struct omap_vc_common omap3_vc_common = {
412 .cmd_onlp_shift = OMAP3430_VC_CMD_ONLP_SHIFT,
413 .cmd_ret_shift = OMAP3430_VC_CMD_RET_SHIFT,
414 .cmd_off_shift = OMAP3430_VC_CMD_OFF_SHIFT,
415 + .i2c_cfg_clear_mask = OMAP3430_SREN_MASK | OMAP3430_HSEN_MASK,
416 .i2c_cfg_hsen_mask = OMAP3430_HSEN_MASK,
417 .i2c_cfg_reg = OMAP3_PRM_VC_I2C_CFG_OFFSET,
418 .i2c_mcode_mask = OMAP3430_MCODE_MASK,
419 diff --git a/arch/arm/mach-omap2/vc44xx_data.c b/arch/arm/mach-omap2/vc44xx_data.c
420 index 085e5d6a04fd..2abd5fa8a697 100644
421 --- a/arch/arm/mach-omap2/vc44xx_data.c
422 +++ b/arch/arm/mach-omap2/vc44xx_data.c
423 @@ -42,6 +42,7 @@ static const struct omap_vc_common omap4_vc_common = {
424 .cmd_ret_shift = OMAP4430_RET_SHIFT,
425 .cmd_off_shift = OMAP4430_OFF_SHIFT,
426 .i2c_cfg_reg = OMAP4_PRM_VC_CFG_I2C_MODE_OFFSET,
427 + .i2c_cfg_clear_mask = OMAP4430_SRMODEEN_MASK | OMAP4430_HSMODEEN_MASK,
428 .i2c_cfg_hsen_mask = OMAP4430_HSMODEEN_MASK,
429 .i2c_mcode_mask = OMAP4430_HSMCODE_MASK,
430 };
431 diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c
432 index e1268f905026..f412b53ed268 100644
433 --- a/arch/arm/net/bpf_jit_32.c
434 +++ b/arch/arm/net/bpf_jit_32.c
435 @@ -449,10 +449,21 @@ static inline void emit_udiv(u8 rd, u8 rm, u8 rn, struct jit_ctx *ctx)
436 return;
437 }
438 #endif
439 - if (rm != ARM_R0)
440 - emit(ARM_MOV_R(ARM_R0, rm), ctx);
441 +
442 + /*
443 + * For BPF_ALU | BPF_DIV | BPF_K instructions, rm is ARM_R4
444 + * (r_A) and rn is ARM_R0 (r_scratch) so load rn first into
445 + * ARM_R1 to avoid accidentally overwriting ARM_R0 with rm
446 + * before using it as a source for ARM_R1.
447 + *
448 + * For BPF_ALU | BPF_DIV | BPF_X rm is ARM_R4 (r_A) and rn is
449 + * ARM_R5 (r_X) so there is no particular register overlap
450 + * issues.
451 + */
452 if (rn != ARM_R1)
453 emit(ARM_MOV_R(ARM_R1, rn), ctx);
454 + if (rm != ARM_R0)
455 + emit(ARM_MOV_R(ARM_R0, rm), ctx);
456
457 ctx->seen |= SEEN_CALL;
458 emit_mov_i(ARM_R3, (u32)jit_udiv, ctx);
459 diff --git a/arch/x86/include/asm/spinlock.h b/arch/x86/include/asm/spinlock.h
460 index cf87de3fc390..64b611782ef0 100644
461 --- a/arch/x86/include/asm/spinlock.h
462 +++ b/arch/x86/include/asm/spinlock.h
463 @@ -169,7 +169,7 @@ static inline int arch_spin_is_contended(arch_spinlock_t *lock)
464 struct __raw_tickets tmp = READ_ONCE(lock->tickets);
465
466 tmp.head &= ~TICKET_SLOWPATH_FLAG;
467 - return (tmp.tail - tmp.head) > TICKET_LOCK_INC;
468 + return (__ticket_t)(tmp.tail - tmp.head) > TICKET_LOCK_INC;
469 }
470 #define arch_spin_is_contended arch_spin_is_contended
471
472 diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
473 index e4695985f9de..d93963340c3c 100644
474 --- a/arch/x86/pci/acpi.c
475 +++ b/arch/x86/pci/acpi.c
476 @@ -325,6 +325,26 @@ static void release_pci_root_info(struct pci_host_bridge *bridge)
477 kfree(info);
478 }
479
480 +/*
481 + * An IO port or MMIO resource assigned to a PCI host bridge may be
482 + * consumed by the host bridge itself or available to its child
483 + * bus/devices. The ACPI specification defines a bit (Producer/Consumer)
484 + * to tell whether the resource is consumed by the host bridge itself,
485 + * but firmware hasn't used that bit consistently, so we can't rely on it.
486 + *
487 + * On x86 and IA64 platforms, all IO port and MMIO resources are assumed
488 + * to be available to child bus/devices except one special case:
489 + * IO port [0xCF8-0xCFF] is consumed by the host bridge itself
490 + * to access PCI configuration space.
491 + *
492 + * So explicitly filter out PCI CFG IO ports[0xCF8-0xCFF].
493 + */
494 +static bool resource_is_pcicfg_ioport(struct resource *res)
495 +{
496 + return (res->flags & IORESOURCE_IO) &&
497 + res->start == 0xCF8 && res->end == 0xCFF;
498 +}
499 +
500 static void probe_pci_root_info(struct pci_root_info *info,
501 struct acpi_device *device,
502 int busnum, int domain,
503 @@ -346,8 +366,8 @@ static void probe_pci_root_info(struct pci_root_info *info,
504 "no IO and memory resources present in _CRS\n");
505 else
506 resource_list_for_each_entry_safe(entry, tmp, list) {
507 - if ((entry->res->flags & IORESOURCE_WINDOW) == 0 ||
508 - (entry->res->flags & IORESOURCE_DISABLED))
509 + if ((entry->res->flags & IORESOURCE_DISABLED) ||
510 + resource_is_pcicfg_ioport(entry->res))
511 resource_list_destroy_entry(entry);
512 else
513 entry->res->name = info->name;
514 diff --git a/block/blk-core.c b/block/blk-core.c
515 index 794c3e7f01cf..66406474f0c4 100644
516 --- a/block/blk-core.c
517 +++ b/block/blk-core.c
518 @@ -552,6 +552,8 @@ void blk_cleanup_queue(struct request_queue *q)
519 q->queue_lock = &q->__queue_lock;
520 spin_unlock_irq(lock);
521
522 + bdi_destroy(&q->backing_dev_info);
523 +
524 /* @q is and will stay empty, shutdown and put */
525 blk_put_queue(q);
526 }
527 diff --git a/block/blk-mq.c b/block/blk-mq.c
528 index 33c428530193..5c39703e644f 100644
529 --- a/block/blk-mq.c
530 +++ b/block/blk-mq.c
531 @@ -675,8 +675,11 @@ static void blk_mq_rq_timer(unsigned long priv)
532 data.next = blk_rq_timeout(round_jiffies_up(data.next));
533 mod_timer(&q->timeout, data.next);
534 } else {
535 - queue_for_each_hw_ctx(q, hctx, i)
536 - blk_mq_tag_idle(hctx);
537 + queue_for_each_hw_ctx(q, hctx, i) {
538 + /* the hctx may be unmapped, so check it here */
539 + if (blk_mq_hw_queue_mapped(hctx))
540 + blk_mq_tag_idle(hctx);
541 + }
542 }
543 }
544
545 @@ -1570,22 +1573,6 @@ static int blk_mq_hctx_cpu_offline(struct blk_mq_hw_ctx *hctx, int cpu)
546 return NOTIFY_OK;
547 }
548
549 -static int blk_mq_hctx_cpu_online(struct blk_mq_hw_ctx *hctx, int cpu)
550 -{
551 - struct request_queue *q = hctx->queue;
552 - struct blk_mq_tag_set *set = q->tag_set;
553 -
554 - if (set->tags[hctx->queue_num])
555 - return NOTIFY_OK;
556 -
557 - set->tags[hctx->queue_num] = blk_mq_init_rq_map(set, hctx->queue_num);
558 - if (!set->tags[hctx->queue_num])
559 - return NOTIFY_STOP;
560 -
561 - hctx->tags = set->tags[hctx->queue_num];
562 - return NOTIFY_OK;
563 -}
564 -
565 static int blk_mq_hctx_notify(void *data, unsigned long action,
566 unsigned int cpu)
567 {
568 @@ -1593,8 +1580,11 @@ static int blk_mq_hctx_notify(void *data, unsigned long action,
569
570 if (action == CPU_DEAD || action == CPU_DEAD_FROZEN)
571 return blk_mq_hctx_cpu_offline(hctx, cpu);
572 - else if (action == CPU_ONLINE || action == CPU_ONLINE_FROZEN)
573 - return blk_mq_hctx_cpu_online(hctx, cpu);
574 +
575 + /*
576 + * In case of CPU online, tags may be reallocated
577 + * in blk_mq_map_swqueue() after mapping is updated.
578 + */
579
580 return NOTIFY_OK;
581 }
582 @@ -1776,6 +1766,7 @@ static void blk_mq_map_swqueue(struct request_queue *q)
583 unsigned int i;
584 struct blk_mq_hw_ctx *hctx;
585 struct blk_mq_ctx *ctx;
586 + struct blk_mq_tag_set *set = q->tag_set;
587
588 queue_for_each_hw_ctx(q, hctx, i) {
589 cpumask_clear(hctx->cpumask);
590 @@ -1802,16 +1793,20 @@ static void blk_mq_map_swqueue(struct request_queue *q)
591 * disable it and free the request entries.
592 */
593 if (!hctx->nr_ctx) {
594 - struct blk_mq_tag_set *set = q->tag_set;
595 -
596 if (set->tags[i]) {
597 blk_mq_free_rq_map(set, set->tags[i], i);
598 set->tags[i] = NULL;
599 - hctx->tags = NULL;
600 }
601 + hctx->tags = NULL;
602 continue;
603 }
604
605 + /* unmapped hw queue can be remapped after CPU topo changed */
606 + if (!set->tags[i])
607 + set->tags[i] = blk_mq_init_rq_map(set, i);
608 + hctx->tags = set->tags[i];
609 + WARN_ON(!hctx->tags);
610 +
611 /*
612 * Initialize batch roundrobin counts
613 */
614 @@ -2075,9 +2070,16 @@ static int blk_mq_queue_reinit_notify(struct notifier_block *nb,
615 */
616 list_for_each_entry(q, &all_q_list, all_q_node)
617 blk_mq_freeze_queue_start(q);
618 - list_for_each_entry(q, &all_q_list, all_q_node)
619 + list_for_each_entry(q, &all_q_list, all_q_node) {
620 blk_mq_freeze_queue_wait(q);
621
622 + /*
623 + * timeout handler can't touch hw queue during the
624 + * reinitialization
625 + */
626 + del_timer_sync(&q->timeout);
627 + }
628 +
629 list_for_each_entry(q, &all_q_list, all_q_node)
630 blk_mq_queue_reinit(q);
631
632 diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
633 index faaf36ade7eb..2b8fd302f677 100644
634 --- a/block/blk-sysfs.c
635 +++ b/block/blk-sysfs.c
636 @@ -522,8 +522,6 @@ static void blk_release_queue(struct kobject *kobj)
637
638 blk_trace_shutdown(q);
639
640 - bdi_destroy(&q->backing_dev_info);
641 -
642 ida_simple_remove(&blk_queue_ida, q->id);
643 call_rcu(&q->rcu_head, blk_free_queue_rcu);
644 }
645 diff --git a/drivers/acpi/acpi_pnp.c b/drivers/acpi/acpi_pnp.c
646 index b193f8425999..ff6d8adc9cda 100644
647 --- a/drivers/acpi/acpi_pnp.c
648 +++ b/drivers/acpi/acpi_pnp.c
649 @@ -304,6 +304,8 @@ static const struct acpi_device_id acpi_pnp_device_ids[] = {
650 {"PNPb006"},
651 /* cs423x-pnpbios */
652 {"CSC0100"},
653 + {"CSC0103"},
654 + {"CSC0110"},
655 {"CSC0000"},
656 {"GIM0100"}, /* Guillemot Turtlebeach something appears to be cs4232 compatible */
657 /* es18xx-pnpbios */
658 diff --git a/drivers/acpi/acpica/acmacros.h b/drivers/acpi/acpica/acmacros.h
659 index cf607fe69dbd..c240bdf824f2 100644
660 --- a/drivers/acpi/acpica/acmacros.h
661 +++ b/drivers/acpi/acpica/acmacros.h
662 @@ -63,23 +63,12 @@
663 #define ACPI_SET64(ptr, val) (*ACPI_CAST64 (ptr) = (u64) (val))
664
665 /*
666 - * printf() format helpers. These macros are workarounds for the difficulties
667 + * printf() format helper. This macros is a workaround for the difficulties
668 * with emitting 64-bit integers and 64-bit pointers with the same code
669 * for both 32-bit and 64-bit hosts.
670 */
671 #define ACPI_FORMAT_UINT64(i) ACPI_HIDWORD(i), ACPI_LODWORD(i)
672
673 -#if ACPI_MACHINE_WIDTH == 64
674 -#define ACPI_FORMAT_NATIVE_UINT(i) ACPI_FORMAT_UINT64(i)
675 -#define ACPI_FORMAT_TO_UINT(i) ACPI_FORMAT_UINT64(i)
676 -#define ACPI_PRINTF_UINT "0x%8.8X%8.8X"
677 -
678 -#else
679 -#define ACPI_FORMAT_NATIVE_UINT(i) 0, (u32) (i)
680 -#define ACPI_FORMAT_TO_UINT(i) (u32) (i)
681 -#define ACPI_PRINTF_UINT "0x%8.8X"
682 -#endif
683 -
684 /*
685 * Macros for moving data around to/from buffers that are possibly unaligned.
686 * If the hardware supports the transfer of unaligned data, just do the store.
687 diff --git a/drivers/acpi/acpica/dsopcode.c b/drivers/acpi/acpica/dsopcode.c
688 index 77244182ff02..ea0cc4e08f80 100644
689 --- a/drivers/acpi/acpica/dsopcode.c
690 +++ b/drivers/acpi/acpica/dsopcode.c
691 @@ -446,7 +446,7 @@ acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state,
692
693 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n",
694 obj_desc,
695 - ACPI_FORMAT_NATIVE_UINT(obj_desc->region.address),
696 + ACPI_FORMAT_UINT64(obj_desc->region.address),
697 obj_desc->region.length));
698
699 /* Now the address and length are valid for this opregion */
700 @@ -539,13 +539,12 @@ acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state,
701 return_ACPI_STATUS(AE_NOT_EXIST);
702 }
703
704 - obj_desc->region.address =
705 - (acpi_physical_address) ACPI_TO_INTEGER(table);
706 + obj_desc->region.address = ACPI_PTR_TO_PHYSADDR(table);
707 obj_desc->region.length = table->length;
708
709 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n",
710 obj_desc,
711 - ACPI_FORMAT_NATIVE_UINT(obj_desc->region.address),
712 + ACPI_FORMAT_UINT64(obj_desc->region.address),
713 obj_desc->region.length));
714
715 /* Now the address and length are valid for this opregion */
716 diff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c
717 index 9abace3401f9..2ba28a63fb68 100644
718 --- a/drivers/acpi/acpica/evregion.c
719 +++ b/drivers/acpi/acpica/evregion.c
720 @@ -272,7 +272,7 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
721 ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
722 "Handler %p (@%p) Address %8.8X%8.8X [%s]\n",
723 &region_obj->region.handler->address_space, handler,
724 - ACPI_FORMAT_NATIVE_UINT(address),
725 + ACPI_FORMAT_UINT64(address),
726 acpi_ut_get_region_name(region_obj->region.
727 space_id)));
728
729 diff --git a/drivers/acpi/acpica/exdump.c b/drivers/acpi/acpica/exdump.c
730 index 7c213b6b6472..1da52bef632e 100644
731 --- a/drivers/acpi/acpica/exdump.c
732 +++ b/drivers/acpi/acpica/exdump.c
733 @@ -767,8 +767,8 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)
734 acpi_os_printf("\n");
735 } else {
736 acpi_os_printf(" base %8.8X%8.8X Length %X\n",
737 - ACPI_FORMAT_NATIVE_UINT(obj_desc->region.
738 - address),
739 + ACPI_FORMAT_UINT64(obj_desc->region.
740 + address),
741 obj_desc->region.length);
742 }
743 break;
744 diff --git a/drivers/acpi/acpica/exfldio.c b/drivers/acpi/acpica/exfldio.c
745 index 49479927e7f7..725a3746a2df 100644
746 --- a/drivers/acpi/acpica/exfldio.c
747 +++ b/drivers/acpi/acpica/exfldio.c
748 @@ -263,17 +263,15 @@ acpi_ex_access_region(union acpi_operand_object *obj_desc,
749 }
750
751 ACPI_DEBUG_PRINT_RAW((ACPI_DB_BFIELD,
752 - " Region [%s:%X], Width %X, ByteBase %X, Offset %X at %p\n",
753 + " Region [%s:%X], Width %X, ByteBase %X, Offset %X at %8.8X%8.8X\n",
754 acpi_ut_get_region_name(rgn_desc->region.
755 space_id),
756 rgn_desc->region.space_id,
757 obj_desc->common_field.access_byte_width,
758 obj_desc->common_field.base_byte_offset,
759 - field_datum_byte_offset, ACPI_CAST_PTR(void,
760 - (rgn_desc->
761 - region.
762 - address +
763 - region_offset))));
764 + field_datum_byte_offset,
765 + ACPI_FORMAT_UINT64(rgn_desc->region.address +
766 + region_offset)));
767
768 /* Invoke the appropriate address_space/op_region handler */
769
770 diff --git a/drivers/acpi/acpica/exregion.c b/drivers/acpi/acpica/exregion.c
771 index 0fe188e238ef..b4bbf3150bc1 100644
772 --- a/drivers/acpi/acpica/exregion.c
773 +++ b/drivers/acpi/acpica/exregion.c
774 @@ -181,7 +181,7 @@ acpi_ex_system_memory_space_handler(u32 function,
775 if (!mem_info->mapped_logical_address) {
776 ACPI_ERROR((AE_INFO,
777 "Could not map memory at 0x%8.8X%8.8X, size %u",
778 - ACPI_FORMAT_NATIVE_UINT(address),
779 + ACPI_FORMAT_UINT64(address),
780 (u32) map_length));
781 mem_info->mapped_length = 0;
782 return_ACPI_STATUS(AE_NO_MEMORY);
783 @@ -202,8 +202,7 @@ acpi_ex_system_memory_space_handler(u32 function,
784
785 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
786 "System-Memory (width %u) R/W %u Address=%8.8X%8.8X\n",
787 - bit_width, function,
788 - ACPI_FORMAT_NATIVE_UINT(address)));
789 + bit_width, function, ACPI_FORMAT_UINT64(address)));
790
791 /*
792 * Perform the memory read or write
793 @@ -318,8 +317,7 @@ acpi_ex_system_io_space_handler(u32 function,
794
795 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
796 "System-IO (width %u) R/W %u Address=%8.8X%8.8X\n",
797 - bit_width, function,
798 - ACPI_FORMAT_NATIVE_UINT(address)));
799 + bit_width, function, ACPI_FORMAT_UINT64(address)));
800
801 /* Decode the function parameter */
802
803 diff --git a/drivers/acpi/acpica/hwvalid.c b/drivers/acpi/acpica/hwvalid.c
804 index 2bd33fe56cb3..29033d71417b 100644
805 --- a/drivers/acpi/acpica/hwvalid.c
806 +++ b/drivers/acpi/acpica/hwvalid.c
807 @@ -142,17 +142,17 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width)
808 byte_width = ACPI_DIV_8(bit_width);
809 last_address = address + byte_width - 1;
810
811 - ACPI_DEBUG_PRINT((ACPI_DB_IO, "Address %p LastAddress %p Length %X",
812 - ACPI_CAST_PTR(void, address), ACPI_CAST_PTR(void,
813 - last_address),
814 - byte_width));
815 + ACPI_DEBUG_PRINT((ACPI_DB_IO,
816 + "Address %8.8X%8.8X LastAddress %8.8X%8.8X Length %X",
817 + ACPI_FORMAT_UINT64(address),
818 + ACPI_FORMAT_UINT64(last_address), byte_width));
819
820 /* Maximum 16-bit address in I/O space */
821
822 if (last_address > ACPI_UINT16_MAX) {
823 ACPI_ERROR((AE_INFO,
824 - "Illegal I/O port address/length above 64K: %p/0x%X",
825 - ACPI_CAST_PTR(void, address), byte_width));
826 + "Illegal I/O port address/length above 64K: %8.8X%8.8X/0x%X",
827 + ACPI_FORMAT_UINT64(address), byte_width));
828 return_ACPI_STATUS(AE_LIMIT);
829 }
830
831 @@ -181,8 +181,8 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width)
832
833 if (acpi_gbl_osi_data >= port_info->osi_dependency) {
834 ACPI_DEBUG_PRINT((ACPI_DB_IO,
835 - "Denied AML access to port 0x%p/%X (%s 0x%.4X-0x%.4X)",
836 - ACPI_CAST_PTR(void, address),
837 + "Denied AML access to port 0x%8.8X%8.8X/%X (%s 0x%.4X-0x%.4X)",
838 + ACPI_FORMAT_UINT64(address),
839 byte_width, port_info->name,
840 port_info->start,
841 port_info->end));
842 diff --git a/drivers/acpi/acpica/nsdump.c b/drivers/acpi/acpica/nsdump.c
843 index 80f097eb7381..d259393505fa 100644
844 --- a/drivers/acpi/acpica/nsdump.c
845 +++ b/drivers/acpi/acpica/nsdump.c
846 @@ -271,12 +271,11 @@ acpi_ns_dump_one_object(acpi_handle obj_handle,
847 switch (type) {
848 case ACPI_TYPE_PROCESSOR:
849
850 - acpi_os_printf("ID %02X Len %02X Addr %p\n",
851 + acpi_os_printf("ID %02X Len %02X Addr %8.8X%8.8X\n",
852 obj_desc->processor.proc_id,
853 obj_desc->processor.length,
854 - ACPI_CAST_PTR(void,
855 - obj_desc->processor.
856 - address));
857 + ACPI_FORMAT_UINT64(obj_desc->processor.
858 + address));
859 break;
860
861 case ACPI_TYPE_DEVICE:
862 @@ -347,8 +346,9 @@ acpi_ns_dump_one_object(acpi_handle obj_handle,
863 space_id));
864 if (obj_desc->region.flags & AOPOBJ_DATA_VALID) {
865 acpi_os_printf(" Addr %8.8X%8.8X Len %.4X\n",
866 - ACPI_FORMAT_NATIVE_UINT
867 - (obj_desc->region.address),
868 + ACPI_FORMAT_UINT64(obj_desc->
869 + region.
870 + address),
871 obj_desc->region.length);
872 } else {
873 acpi_os_printf
874 diff --git a/drivers/acpi/acpica/tbdata.c b/drivers/acpi/acpica/tbdata.c
875 index 6a144957aadd..fd5998b2b46b 100644
876 --- a/drivers/acpi/acpica/tbdata.c
877 +++ b/drivers/acpi/acpica/tbdata.c
878 @@ -113,9 +113,9 @@ acpi_tb_acquire_table(struct acpi_table_desc *table_desc,
879 case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
880 case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
881
882 - table =
883 - ACPI_CAST_PTR(struct acpi_table_header,
884 - table_desc->address);
885 + table = ACPI_CAST_PTR(struct acpi_table_header,
886 + ACPI_PHYSADDR_TO_PTR(table_desc->
887 + address));
888 break;
889
890 default:
891 @@ -214,7 +214,8 @@ acpi_tb_acquire_temp_table(struct acpi_table_desc *table_desc,
892 case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
893 case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
894
895 - table_header = ACPI_CAST_PTR(struct acpi_table_header, address);
896 + table_header = ACPI_CAST_PTR(struct acpi_table_header,
897 + ACPI_PHYSADDR_TO_PTR(address));
898 if (!table_header) {
899 return (AE_NO_MEMORY);
900 }
901 @@ -398,14 +399,14 @@ acpi_tb_verify_temp_table(struct acpi_table_desc * table_desc, char *signature)
902 table_desc->length);
903 if (ACPI_FAILURE(status)) {
904 ACPI_EXCEPTION((AE_INFO, AE_NO_MEMORY,
905 - "%4.4s " ACPI_PRINTF_UINT
906 + "%4.4s 0x%8.8X%8.8X"
907 " Attempted table install failed",
908 acpi_ut_valid_acpi_name(table_desc->
909 signature.
910 ascii) ?
911 table_desc->signature.ascii : "????",
912 - ACPI_FORMAT_TO_UINT(table_desc->
913 - address)));
914 + ACPI_FORMAT_UINT64(table_desc->
915 + address)));
916 goto invalidate_and_exit;
917 }
918 }
919 diff --git a/drivers/acpi/acpica/tbinstal.c b/drivers/acpi/acpica/tbinstal.c
920 index 7fbc2b9dcbbb..7e69bc73bd16 100644
921 --- a/drivers/acpi/acpica/tbinstal.c
922 +++ b/drivers/acpi/acpica/tbinstal.c
923 @@ -187,8 +187,9 @@ acpi_tb_install_fixed_table(acpi_physical_address address,
924 status = acpi_tb_acquire_temp_table(&new_table_desc, address,
925 ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL);
926 if (ACPI_FAILURE(status)) {
927 - ACPI_ERROR((AE_INFO, "Could not acquire table length at %p",
928 - ACPI_CAST_PTR(void, address)));
929 + ACPI_ERROR((AE_INFO,
930 + "Could not acquire table length at %8.8X%8.8X",
931 + ACPI_FORMAT_UINT64(address)));
932 return_ACPI_STATUS(status);
933 }
934
935 @@ -246,8 +247,9 @@ acpi_tb_install_standard_table(acpi_physical_address address,
936
937 status = acpi_tb_acquire_temp_table(&new_table_desc, address, flags);
938 if (ACPI_FAILURE(status)) {
939 - ACPI_ERROR((AE_INFO, "Could not acquire table length at %p",
940 - ACPI_CAST_PTR(void, address)));
941 + ACPI_ERROR((AE_INFO,
942 + "Could not acquire table length at %8.8X%8.8X",
943 + ACPI_FORMAT_UINT64(address)));
944 return_ACPI_STATUS(status);
945 }
946
947 @@ -258,9 +260,10 @@ acpi_tb_install_standard_table(acpi_physical_address address,
948 if (!reload &&
949 acpi_gbl_disable_ssdt_table_install &&
950 ACPI_COMPARE_NAME(&new_table_desc.signature, ACPI_SIG_SSDT)) {
951 - ACPI_INFO((AE_INFO, "Ignoring installation of %4.4s at %p",
952 - new_table_desc.signature.ascii, ACPI_CAST_PTR(void,
953 - address)));
954 + ACPI_INFO((AE_INFO,
955 + "Ignoring installation of %4.4s at %8.8X%8.8X",
956 + new_table_desc.signature.ascii,
957 + ACPI_FORMAT_UINT64(address)));
958 goto release_and_exit;
959 }
960
961 @@ -428,11 +431,11 @@ finish_override:
962 return;
963 }
964
965 - ACPI_INFO((AE_INFO, "%4.4s " ACPI_PRINTF_UINT
966 - " %s table override, new table: " ACPI_PRINTF_UINT,
967 + ACPI_INFO((AE_INFO, "%4.4s 0x%8.8X%8.8X"
968 + " %s table override, new table: 0x%8.8X%8.8X",
969 old_table_desc->signature.ascii,
970 - ACPI_FORMAT_TO_UINT(old_table_desc->address),
971 - override_type, ACPI_FORMAT_TO_UINT(new_table_desc.address)));
972 + ACPI_FORMAT_UINT64(old_table_desc->address),
973 + override_type, ACPI_FORMAT_UINT64(new_table_desc.address)));
974
975 /* We can now uninstall the original table */
976
977 @@ -516,7 +519,7 @@ void acpi_tb_uninstall_table(struct acpi_table_desc *table_desc)
978
979 if ((table_desc->flags & ACPI_TABLE_ORIGIN_MASK) ==
980 ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL) {
981 - ACPI_FREE(ACPI_CAST_PTR(void, table_desc->address));
982 + ACPI_FREE(ACPI_PHYSADDR_TO_PTR(table_desc->address));
983 }
984
985 table_desc->address = ACPI_PTR_TO_PHYSADDR(NULL);
986 diff --git a/drivers/acpi/acpica/tbprint.c b/drivers/acpi/acpica/tbprint.c
987 index ef16c06e5091..77ba5c71c6e7 100644
988 --- a/drivers/acpi/acpica/tbprint.c
989 +++ b/drivers/acpi/acpica/tbprint.c
990 @@ -127,18 +127,12 @@ acpi_tb_print_table_header(acpi_physical_address address,
991 {
992 struct acpi_table_header local_header;
993
994 - /*
995 - * The reason that we use ACPI_PRINTF_UINT and ACPI_FORMAT_TO_UINT is to
996 - * support both 32-bit and 64-bit hosts/addresses in a consistent manner.
997 - * The %p specifier does not emit uniform output on all hosts. On some,
998 - * leading zeros are not supported.
999 - */
1000 if (ACPI_COMPARE_NAME(header->signature, ACPI_SIG_FACS)) {
1001
1002 /* FACS only has signature and length fields */
1003
1004 - ACPI_INFO((AE_INFO, "%-4.4s " ACPI_PRINTF_UINT " %06X",
1005 - header->signature, ACPI_FORMAT_TO_UINT(address),
1006 + ACPI_INFO((AE_INFO, "%-4.4s 0x%8.8X%8.8X %06X",
1007 + header->signature, ACPI_FORMAT_UINT64(address),
1008 header->length));
1009 } else if (ACPI_VALIDATE_RSDP_SIG(header->signature)) {
1010
1011 @@ -149,9 +143,8 @@ acpi_tb_print_table_header(acpi_physical_address address,
1012 header)->oem_id, ACPI_OEM_ID_SIZE);
1013 acpi_tb_fix_string(local_header.oem_id, ACPI_OEM_ID_SIZE);
1014
1015 - ACPI_INFO((AE_INFO,
1016 - "RSDP " ACPI_PRINTF_UINT " %06X (v%.2d %-6.6s)",
1017 - ACPI_FORMAT_TO_UINT(address),
1018 + ACPI_INFO((AE_INFO, "RSDP 0x%8.8X%8.8X %06X (v%.2d %-6.6s)",
1019 + ACPI_FORMAT_UINT64(address),
1020 (ACPI_CAST_PTR(struct acpi_table_rsdp, header)->
1021 revision >
1022 0) ? ACPI_CAST_PTR(struct acpi_table_rsdp,
1023 @@ -165,9 +158,9 @@ acpi_tb_print_table_header(acpi_physical_address address,
1024 acpi_tb_cleanup_table_header(&local_header, header);
1025
1026 ACPI_INFO((AE_INFO,
1027 - "%-4.4s " ACPI_PRINTF_UINT
1028 + "%-4.4s 0x%8.8X%8.8X"
1029 " %06X (v%.2d %-6.6s %-8.8s %08X %-4.4s %08X)",
1030 - local_header.signature, ACPI_FORMAT_TO_UINT(address),
1031 + local_header.signature, ACPI_FORMAT_UINT64(address),
1032 local_header.length, local_header.revision,
1033 local_header.oem_id, local_header.oem_table_id,
1034 local_header.oem_revision,
1035 diff --git a/drivers/acpi/acpica/tbxfroot.c b/drivers/acpi/acpica/tbxfroot.c
1036 index eac52cf14f1a..fa76a3603aa1 100644
1037 --- a/drivers/acpi/acpica/tbxfroot.c
1038 +++ b/drivers/acpi/acpica/tbxfroot.c
1039 @@ -142,7 +142,7 @@ acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp * rsdp)
1040 *
1041 ******************************************************************************/
1042
1043 -acpi_status __init acpi_find_root_pointer(acpi_size *table_address)
1044 +acpi_status __init acpi_find_root_pointer(acpi_physical_address * table_address)
1045 {
1046 u8 *table_ptr;
1047 u8 *mem_rover;
1048 @@ -200,7 +200,8 @@ acpi_status __init acpi_find_root_pointer(acpi_size *table_address)
1049 physical_address +=
1050 (u32) ACPI_PTR_DIFF(mem_rover, table_ptr);
1051
1052 - *table_address = physical_address;
1053 + *table_address =
1054 + (acpi_physical_address) physical_address;
1055 return_ACPI_STATUS(AE_OK);
1056 }
1057 }
1058 @@ -233,7 +234,7 @@ acpi_status __init acpi_find_root_pointer(acpi_size *table_address)
1059 (ACPI_HI_RSDP_WINDOW_BASE +
1060 ACPI_PTR_DIFF(mem_rover, table_ptr));
1061
1062 - *table_address = physical_address;
1063 + *table_address = (acpi_physical_address) physical_address;
1064 return_ACPI_STATUS(AE_OK);
1065 }
1066
1067 diff --git a/drivers/acpi/acpica/utaddress.c b/drivers/acpi/acpica/utaddress.c
1068 index 1279f50da757..911ea8e7fe87 100644
1069 --- a/drivers/acpi/acpica/utaddress.c
1070 +++ b/drivers/acpi/acpica/utaddress.c
1071 @@ -107,10 +107,10 @@ acpi_ut_add_address_range(acpi_adr_space_type space_id,
1072 acpi_gbl_address_range_list[space_id] = range_info;
1073
1074 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
1075 - "\nAdded [%4.4s] address range: 0x%p-0x%p\n",
1076 + "\nAdded [%4.4s] address range: 0x%8.8X%8.8X-0x%8.8X%8.8X\n",
1077 acpi_ut_get_node_name(range_info->region_node),
1078 - ACPI_CAST_PTR(void, address),
1079 - ACPI_CAST_PTR(void, range_info->end_address)));
1080 + ACPI_FORMAT_UINT64(address),
1081 + ACPI_FORMAT_UINT64(range_info->end_address)));
1082
1083 (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
1084 return_ACPI_STATUS(AE_OK);
1085 @@ -160,15 +160,13 @@ acpi_ut_remove_address_range(acpi_adr_space_type space_id,
1086 }
1087
1088 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
1089 - "\nRemoved [%4.4s] address range: 0x%p-0x%p\n",
1090 + "\nRemoved [%4.4s] address range: 0x%8.8X%8.8X-0x%8.8X%8.8X\n",
1091 acpi_ut_get_node_name(range_info->
1092 region_node),
1093 - ACPI_CAST_PTR(void,
1094 - range_info->
1095 - start_address),
1096 - ACPI_CAST_PTR(void,
1097 - range_info->
1098 - end_address)));
1099 + ACPI_FORMAT_UINT64(range_info->
1100 + start_address),
1101 + ACPI_FORMAT_UINT64(range_info->
1102 + end_address)));
1103
1104 ACPI_FREE(range_info);
1105 return_VOID;
1106 @@ -245,16 +243,14 @@ acpi_ut_check_address_range(acpi_adr_space_type space_id,
1107 region_node);
1108
1109 ACPI_WARNING((AE_INFO,
1110 - "%s range 0x%p-0x%p conflicts with OpRegion 0x%p-0x%p (%s)",
1111 + "%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)",
1112 acpi_ut_get_region_name(space_id),
1113 - ACPI_CAST_PTR(void, address),
1114 - ACPI_CAST_PTR(void, end_address),
1115 - ACPI_CAST_PTR(void,
1116 - range_info->
1117 - start_address),
1118 - ACPI_CAST_PTR(void,
1119 - range_info->
1120 - end_address),
1121 + ACPI_FORMAT_UINT64(address),
1122 + ACPI_FORMAT_UINT64(end_address),
1123 + ACPI_FORMAT_UINT64(range_info->
1124 + start_address),
1125 + ACPI_FORMAT_UINT64(range_info->
1126 + end_address),
1127 pathname));
1128 ACPI_FREE(pathname);
1129 }
1130 diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c
1131 index 5589a6e2a023..8244f013f210 100644
1132 --- a/drivers/acpi/resource.c
1133 +++ b/drivers/acpi/resource.c
1134 @@ -573,7 +573,7 @@ EXPORT_SYMBOL_GPL(acpi_dev_get_resources);
1135 * @ares: Input ACPI resource object.
1136 * @types: Valid resource types of IORESOURCE_XXX
1137 *
1138 - * This is a hepler function to support acpi_dev_get_resources(), which filters
1139 + * This is a helper function to support acpi_dev_get_resources(), which filters
1140 * ACPI resource objects according to resource types.
1141 */
1142 int acpi_dev_filter_resource_type(struct acpi_resource *ares,
1143 diff --git a/drivers/acpi/sbshc.c b/drivers/acpi/sbshc.c
1144 index 26e5b5060523..bf034f8b7c1a 100644
1145 --- a/drivers/acpi/sbshc.c
1146 +++ b/drivers/acpi/sbshc.c
1147 @@ -14,6 +14,7 @@
1148 #include <linux/delay.h>
1149 #include <linux/module.h>
1150 #include <linux/interrupt.h>
1151 +#include <linux/dmi.h>
1152 #include "sbshc.h"
1153
1154 #define PREFIX "ACPI: "
1155 @@ -87,6 +88,8 @@ enum acpi_smb_offset {
1156 ACPI_SMB_ALARM_DATA = 0x26, /* 2 bytes alarm data */
1157 };
1158
1159 +static bool macbook;
1160 +
1161 static inline int smb_hc_read(struct acpi_smb_hc *hc, u8 address, u8 *data)
1162 {
1163 return ec_read(hc->offset + address, data);
1164 @@ -132,6 +135,8 @@ static int acpi_smbus_transaction(struct acpi_smb_hc *hc, u8 protocol,
1165 }
1166
1167 mutex_lock(&hc->lock);
1168 + if (macbook)
1169 + udelay(5);
1170 if (smb_hc_read(hc, ACPI_SMB_PROTOCOL, &temp))
1171 goto end;
1172 if (temp) {
1173 @@ -257,12 +262,29 @@ extern int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit,
1174 acpi_handle handle, acpi_ec_query_func func,
1175 void *data);
1176
1177 +static int macbook_dmi_match(const struct dmi_system_id *d)
1178 +{
1179 + pr_debug("Detected MacBook, enabling workaround\n");
1180 + macbook = true;
1181 + return 0;
1182 +}
1183 +
1184 +static struct dmi_system_id acpi_smbus_dmi_table[] = {
1185 + { macbook_dmi_match, "Apple MacBook", {
1186 + DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
1187 + DMI_MATCH(DMI_PRODUCT_NAME, "MacBook") },
1188 + },
1189 + { },
1190 +};
1191 +
1192 static int acpi_smbus_hc_add(struct acpi_device *device)
1193 {
1194 int status;
1195 unsigned long long val;
1196 struct acpi_smb_hc *hc;
1197
1198 + dmi_check_system(acpi_smbus_dmi_table);
1199 +
1200 if (!device)
1201 return -EINVAL;
1202
1203 diff --git a/drivers/block/loop.c b/drivers/block/loop.c
1204 index d1f168b73634..773e964f14d9 100644
1205 --- a/drivers/block/loop.c
1206 +++ b/drivers/block/loop.c
1207 @@ -1672,8 +1672,8 @@ out:
1208
1209 static void loop_remove(struct loop_device *lo)
1210 {
1211 - del_gendisk(lo->lo_disk);
1212 blk_cleanup_queue(lo->lo_queue);
1213 + del_gendisk(lo->lo_disk);
1214 blk_mq_free_tag_set(&lo->tag_set);
1215 put_disk(lo->lo_disk);
1216 kfree(lo);
1217 diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c
1218 index 7722ed53bd65..af3bc7a8033b 100644
1219 --- a/drivers/gpio/gpiolib-sysfs.c
1220 +++ b/drivers/gpio/gpiolib-sysfs.c
1221 @@ -551,6 +551,7 @@ static struct class gpio_class = {
1222 */
1223 int gpiod_export(struct gpio_desc *desc, bool direction_may_change)
1224 {
1225 + struct gpio_chip *chip;
1226 unsigned long flags;
1227 int status;
1228 const char *ioname = NULL;
1229 @@ -568,8 +569,16 @@ int gpiod_export(struct gpio_desc *desc, bool direction_may_change)
1230 return -EINVAL;
1231 }
1232
1233 + chip = desc->chip;
1234 +
1235 mutex_lock(&sysfs_lock);
1236
1237 + /* check if chip is being removed */
1238 + if (!chip || !chip->exported) {
1239 + status = -ENODEV;
1240 + goto fail_unlock;
1241 + }
1242 +
1243 spin_lock_irqsave(&gpio_lock, flags);
1244 if (!test_bit(FLAG_REQUESTED, &desc->flags) ||
1245 test_bit(FLAG_EXPORT, &desc->flags)) {
1246 @@ -783,12 +792,15 @@ void gpiochip_unexport(struct gpio_chip *chip)
1247 {
1248 int status;
1249 struct device *dev;
1250 + struct gpio_desc *desc;
1251 + unsigned int i;
1252
1253 mutex_lock(&sysfs_lock);
1254 dev = class_find_device(&gpio_class, NULL, chip, match_export);
1255 if (dev) {
1256 put_device(dev);
1257 device_unregister(dev);
1258 + /* prevent further gpiod exports */
1259 chip->exported = false;
1260 status = 0;
1261 } else
1262 @@ -797,6 +809,13 @@ void gpiochip_unexport(struct gpio_chip *chip)
1263
1264 if (status)
1265 chip_dbg(chip, "%s: status %d\n", __func__, status);
1266 +
1267 + /* unregister gpiod class devices owned by sysfs */
1268 + for (i = 0; i < chip->ngpio; i++) {
1269 + desc = &chip->desc[i];
1270 + if (test_and_clear_bit(FLAG_SYSFS, &desc->flags))
1271 + gpiod_free(desc);
1272 + }
1273 }
1274
1275 static int __init gpiolib_sysfs_init(void)
1276 diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
1277 index d8135adb2238..39762a7d2ec7 100644
1278 --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
1279 +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
1280 @@ -429,9 +429,10 @@ static int unregister_process_nocpsch(struct device_queue_manager *dqm,
1281
1282 BUG_ON(!dqm || !qpd);
1283
1284 - BUG_ON(!list_empty(&qpd->queues_list));
1285 + pr_debug("In func %s\n", __func__);
1286
1287 - pr_debug("kfd: In func %s\n", __func__);
1288 + pr_debug("qpd->queues_list is %s\n",
1289 + list_empty(&qpd->queues_list) ? "empty" : "not empty");
1290
1291 retval = 0;
1292 mutex_lock(&dqm->lock);
1293 @@ -878,6 +879,8 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q,
1294 return -ENOMEM;
1295 }
1296
1297 + init_sdma_vm(dqm, q, qpd);
1298 +
1299 retval = mqd->init_mqd(mqd, &q->mqd, &q->mqd_mem_obj,
1300 &q->gart_mqd_addr, &q->properties);
1301 if (retval != 0)
1302 diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
1303 index 10574a0c3a55..5769db4f51f3 100644
1304 --- a/drivers/gpu/drm/drm_irq.c
1305 +++ b/drivers/gpu/drm/drm_irq.c
1306 @@ -131,12 +131,11 @@ static void drm_update_vblank_count(struct drm_device *dev, int crtc)
1307
1308 /* Reinitialize corresponding vblank timestamp if high-precision query
1309 * available. Skip this step if query unsupported or failed. Will
1310 - * reinitialize delayed at next vblank interrupt in that case.
1311 + * reinitialize delayed at next vblank interrupt in that case and
1312 + * assign 0 for now, to mark the vblanktimestamp as invalid.
1313 */
1314 - if (rc) {
1315 - tslot = atomic_read(&vblank->count) + diff;
1316 - vblanktimestamp(dev, crtc, tslot) = t_vblank;
1317 - }
1318 + tslot = atomic_read(&vblank->count) + diff;
1319 + vblanktimestamp(dev, crtc, tslot) = rc ? t_vblank : (struct timeval) {0, 0};
1320
1321 smp_mb__before_atomic();
1322 atomic_add(diff, &vblank->count);
1323 diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
1324 index a74aaf9242b9..88b36a9173c9 100644
1325 --- a/drivers/gpu/drm/i915/intel_dp.c
1326 +++ b/drivers/gpu/drm/i915/intel_dp.c
1327 @@ -1176,7 +1176,7 @@ intel_dp_compute_config(struct intel_encoder *encoder,
1328
1329 pipe_config->has_dp_encoder = true;
1330 pipe_config->has_drrs = false;
1331 - pipe_config->has_audio = intel_dp->has_audio;
1332 + pipe_config->has_audio = intel_dp->has_audio && port != PORT_A;
1333
1334 if (is_edp(intel_dp) && intel_connector->panel.fixed_mode) {
1335 intel_fixed_panel_mode(intel_connector->panel.fixed_mode,
1336 @@ -2026,8 +2026,8 @@ static void intel_dp_get_config(struct intel_encoder *encoder,
1337 int dotclock;
1338
1339 tmp = I915_READ(intel_dp->output_reg);
1340 - if (tmp & DP_AUDIO_OUTPUT_ENABLE)
1341 - pipe_config->has_audio = true;
1342 +
1343 + pipe_config->has_audio = tmp & DP_AUDIO_OUTPUT_ENABLE && port != PORT_A;
1344
1345 if ((port == PORT_A) || !HAS_PCH_CPT(dev)) {
1346 if (tmp & DP_SYNC_HS_HIGH)
1347 diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
1348 index 071b96d6e146..fbc2a83795fa 100644
1349 --- a/drivers/gpu/drm/i915/intel_lvds.c
1350 +++ b/drivers/gpu/drm/i915/intel_lvds.c
1351 @@ -812,12 +812,28 @@ static int intel_dual_link_lvds_callback(const struct dmi_system_id *id)
1352 static const struct dmi_system_id intel_dual_link_lvds[] = {
1353 {
1354 .callback = intel_dual_link_lvds_callback,
1355 - .ident = "Apple MacBook Pro (Core i5/i7 Series)",
1356 + .ident = "Apple MacBook Pro 15\" (2010)",
1357 + .matches = {
1358 + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
1359 + DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro6,2"),
1360 + },
1361 + },
1362 + {
1363 + .callback = intel_dual_link_lvds_callback,
1364 + .ident = "Apple MacBook Pro 15\" (2011)",
1365 .matches = {
1366 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
1367 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro8,2"),
1368 },
1369 },
1370 + {
1371 + .callback = intel_dual_link_lvds_callback,
1372 + .ident = "Apple MacBook Pro 15\" (2012)",
1373 + .matches = {
1374 + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
1375 + DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro9,1"),
1376 + },
1377 + },
1378 { } /* terminating entry */
1379 };
1380
1381 @@ -847,6 +863,11 @@ static bool compute_is_dual_link_lvds(struct intel_lvds_encoder *lvds_encoder)
1382 if (i915.lvds_channel_mode > 0)
1383 return i915.lvds_channel_mode == 2;
1384
1385 + /* single channel LVDS is limited to 112 MHz */
1386 + if (lvds_encoder->attached_connector->base.panel.fixed_mode->clock
1387 + > 112999)
1388 + return true;
1389 +
1390 if (dmi_check_system(intel_dual_link_lvds))
1391 return true;
1392
1393 @@ -1104,6 +1125,8 @@ void intel_lvds_init(struct drm_device *dev)
1394 out:
1395 mutex_unlock(&dev->mode_config.mutex);
1396
1397 + intel_panel_init(&intel_connector->panel, fixed_mode, downclock_mode);
1398 +
1399 lvds_encoder->is_dual_link = compute_is_dual_link_lvds(lvds_encoder);
1400 DRM_DEBUG_KMS("detected %s-link lvds configuration\n",
1401 lvds_encoder->is_dual_link ? "dual" : "single");
1402 @@ -1118,7 +1141,6 @@ out:
1403 }
1404 drm_connector_register(connector);
1405
1406 - intel_panel_init(&intel_connector->panel, fixed_mode, downclock_mode);
1407 intel_panel_setup_backlight(connector, INVALID_PIPE);
1408
1409 return;
1410 diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
1411 index c0ecd128b14b..7348f222684d 100644
1412 --- a/drivers/gpu/drm/radeon/radeon_asic.c
1413 +++ b/drivers/gpu/drm/radeon/radeon_asic.c
1414 @@ -1180,7 +1180,7 @@ static struct radeon_asic rs780_asic = {
1415 static struct radeon_asic_ring rv770_uvd_ring = {
1416 .ib_execute = &uvd_v1_0_ib_execute,
1417 .emit_fence = &uvd_v2_2_fence_emit,
1418 - .emit_semaphore = &uvd_v1_0_semaphore_emit,
1419 + .emit_semaphore = &uvd_v2_2_semaphore_emit,
1420 .cs_parse = &radeon_uvd_cs_parse,
1421 .ring_test = &uvd_v1_0_ring_test,
1422 .ib_test = &uvd_v1_0_ib_test,
1423 diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h
1424 index 72bdd3bf0d8e..c2fd3a5e6c55 100644
1425 --- a/drivers/gpu/drm/radeon/radeon_asic.h
1426 +++ b/drivers/gpu/drm/radeon/radeon_asic.h
1427 @@ -919,6 +919,10 @@ void uvd_v1_0_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
1428 int uvd_v2_2_resume(struct radeon_device *rdev);
1429 void uvd_v2_2_fence_emit(struct radeon_device *rdev,
1430 struct radeon_fence *fence);
1431 +bool uvd_v2_2_semaphore_emit(struct radeon_device *rdev,
1432 + struct radeon_ring *ring,
1433 + struct radeon_semaphore *semaphore,
1434 + bool emit_wait);
1435
1436 /* uvd v3.1 */
1437 bool uvd_v3_1_semaphore_emit(struct radeon_device *rdev,
1438 diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c
1439 index b7d33a13db9f..b7c6bb69f3c7 100644
1440 --- a/drivers/gpu/drm/radeon/radeon_audio.c
1441 +++ b/drivers/gpu/drm/radeon/radeon_audio.c
1442 @@ -464,6 +464,10 @@ void radeon_audio_detect(struct drm_connector *connector,
1443 return;
1444
1445 rdev = connector->encoder->dev->dev_private;
1446 +
1447 + if (!radeon_audio_chipset_supported(rdev))
1448 + return;
1449 +
1450 radeon_encoder = to_radeon_encoder(connector->encoder);
1451 dig = radeon_encoder->enc_priv;
1452
1453 diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
1454 index b292aca0f342..edafd3c2b170 100644
1455 --- a/drivers/gpu/drm/radeon/radeon_ttm.c
1456 +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
1457 @@ -591,8 +591,7 @@ static void radeon_ttm_tt_unpin_userptr(struct ttm_tt *ttm)
1458 {
1459 struct radeon_device *rdev = radeon_get_rdev(ttm->bdev);
1460 struct radeon_ttm_tt *gtt = (void *)ttm;
1461 - struct scatterlist *sg;
1462 - int i;
1463 + struct sg_page_iter sg_iter;
1464
1465 int write = !(gtt->userflags & RADEON_GEM_USERPTR_READONLY);
1466 enum dma_data_direction direction = write ?
1467 @@ -605,9 +604,8 @@ static void radeon_ttm_tt_unpin_userptr(struct ttm_tt *ttm)
1468 /* free the sg table and pages again */
1469 dma_unmap_sg(rdev->dev, ttm->sg->sgl, ttm->sg->nents, direction);
1470
1471 - for_each_sg(ttm->sg->sgl, sg, ttm->sg->nents, i) {
1472 - struct page *page = sg_page(sg);
1473 -
1474 + for_each_sg_page(ttm->sg->sgl, &sg_iter, ttm->sg->nents, 0) {
1475 + struct page *page = sg_page_iter_page(&sg_iter);
1476 if (!(gtt->userflags & RADEON_GEM_USERPTR_READONLY))
1477 set_page_dirty(page);
1478
1479 diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c
1480 index c10b2aec6450..cd630287cf0a 100644
1481 --- a/drivers/gpu/drm/radeon/radeon_uvd.c
1482 +++ b/drivers/gpu/drm/radeon/radeon_uvd.c
1483 @@ -396,6 +396,29 @@ static int radeon_uvd_cs_msg_decode(uint32_t *msg, unsigned buf_sizes[])
1484 return 0;
1485 }
1486
1487 +static int radeon_uvd_validate_codec(struct radeon_cs_parser *p,
1488 + unsigned stream_type)
1489 +{
1490 + switch (stream_type) {
1491 + case 0: /* H264 */
1492 + case 1: /* VC1 */
1493 + /* always supported */
1494 + return 0;
1495 +
1496 + case 3: /* MPEG2 */
1497 + case 4: /* MPEG4 */
1498 + /* only since UVD 3 */
1499 + if (p->rdev->family >= CHIP_PALM)
1500 + return 0;
1501 +
1502 + /* fall through */
1503 + default:
1504 + DRM_ERROR("UVD codec not supported by hardware %d!\n",
1505 + stream_type);
1506 + return -EINVAL;
1507 + }
1508 +}
1509 +
1510 static int radeon_uvd_cs_msg(struct radeon_cs_parser *p, struct radeon_bo *bo,
1511 unsigned offset, unsigned buf_sizes[])
1512 {
1513 @@ -436,50 +459,70 @@ static int radeon_uvd_cs_msg(struct radeon_cs_parser *p, struct radeon_bo *bo,
1514 return -EINVAL;
1515 }
1516
1517 - if (msg_type == 1) {
1518 - /* it's a decode msg, calc buffer sizes */
1519 - r = radeon_uvd_cs_msg_decode(msg, buf_sizes);
1520 - /* calc image size (width * height) */
1521 - img_size = msg[6] * msg[7];
1522 + switch (msg_type) {
1523 + case 0:
1524 + /* it's a create msg, calc image size (width * height) */
1525 + img_size = msg[7] * msg[8];
1526 +
1527 + r = radeon_uvd_validate_codec(p, msg[4]);
1528 + radeon_bo_kunmap(bo);
1529 + if (r)
1530 + return r;
1531 +
1532 + /* try to alloc a new handle */
1533 + for (i = 0; i < RADEON_MAX_UVD_HANDLES; ++i) {
1534 + if (atomic_read(&p->rdev->uvd.handles[i]) == handle) {
1535 + DRM_ERROR("Handle 0x%x already in use!\n", handle);
1536 + return -EINVAL;
1537 + }
1538 +
1539 + if (!atomic_cmpxchg(&p->rdev->uvd.handles[i], 0, handle)) {
1540 + p->rdev->uvd.filp[i] = p->filp;
1541 + p->rdev->uvd.img_size[i] = img_size;
1542 + return 0;
1543 + }
1544 + }
1545 +
1546 + DRM_ERROR("No more free UVD handles!\n");
1547 + return -EINVAL;
1548 +
1549 + case 1:
1550 + /* it's a decode msg, validate codec and calc buffer sizes */
1551 + r = radeon_uvd_validate_codec(p, msg[4]);
1552 + if (!r)
1553 + r = radeon_uvd_cs_msg_decode(msg, buf_sizes);
1554 radeon_bo_kunmap(bo);
1555 if (r)
1556 return r;
1557
1558 - } else if (msg_type == 2) {
1559 + /* validate the handle */
1560 + for (i = 0; i < RADEON_MAX_UVD_HANDLES; ++i) {
1561 + if (atomic_read(&p->rdev->uvd.handles[i]) == handle) {
1562 + if (p->rdev->uvd.filp[i] != p->filp) {
1563 + DRM_ERROR("UVD handle collision detected!\n");
1564 + return -EINVAL;
1565 + }
1566 + return 0;
1567 + }
1568 + }
1569 +
1570 + DRM_ERROR("Invalid UVD handle 0x%x!\n", handle);
1571 + return -ENOENT;
1572 +
1573 + case 2:
1574 /* it's a destroy msg, free the handle */
1575 for (i = 0; i < RADEON_MAX_UVD_HANDLES; ++i)
1576 atomic_cmpxchg(&p->rdev->uvd.handles[i], handle, 0);
1577 radeon_bo_kunmap(bo);
1578 return 0;
1579 - } else {
1580 - /* it's a create msg, calc image size (width * height) */
1581 - img_size = msg[7] * msg[8];
1582 - radeon_bo_kunmap(bo);
1583
1584 - if (msg_type != 0) {
1585 - DRM_ERROR("Illegal UVD message type (%d)!\n", msg_type);
1586 - return -EINVAL;
1587 - }
1588 -
1589 - /* it's a create msg, no special handling needed */
1590 - }
1591 -
1592 - /* create or decode, validate the handle */
1593 - for (i = 0; i < RADEON_MAX_UVD_HANDLES; ++i) {
1594 - if (atomic_read(&p->rdev->uvd.handles[i]) == handle)
1595 - return 0;
1596 - }
1597 + default:
1598
1599 - /* handle not found try to alloc a new one */
1600 - for (i = 0; i < RADEON_MAX_UVD_HANDLES; ++i) {
1601 - if (!atomic_cmpxchg(&p->rdev->uvd.handles[i], 0, handle)) {
1602 - p->rdev->uvd.filp[i] = p->filp;
1603 - p->rdev->uvd.img_size[i] = img_size;
1604 - return 0;
1605 - }
1606 + DRM_ERROR("Illegal UVD message type (%d)!\n", msg_type);
1607 + return -EINVAL;
1608 }
1609
1610 - DRM_ERROR("No more free UVD handles!\n");
1611 + BUG();
1612 return -EINVAL;
1613 }
1614
1615 diff --git a/drivers/gpu/drm/radeon/radeon_vce.c b/drivers/gpu/drm/radeon/radeon_vce.c
1616 index 976fe432f4e2..7ed561225007 100644
1617 --- a/drivers/gpu/drm/radeon/radeon_vce.c
1618 +++ b/drivers/gpu/drm/radeon/radeon_vce.c
1619 @@ -493,18 +493,27 @@ int radeon_vce_cs_reloc(struct radeon_cs_parser *p, int lo, int hi,
1620 *
1621 * @p: parser context
1622 * @handle: handle to validate
1623 + * @allocated: allocated a new handle?
1624 *
1625 * Validates the handle and return the found session index or -EINVAL
1626 * we we don't have another free session index.
1627 */
1628 -int radeon_vce_validate_handle(struct radeon_cs_parser *p, uint32_t handle)
1629 +static int radeon_vce_validate_handle(struct radeon_cs_parser *p,
1630 + uint32_t handle, bool *allocated)
1631 {
1632 unsigned i;
1633
1634 + *allocated = false;
1635 +
1636 /* validate the handle */
1637 for (i = 0; i < RADEON_MAX_VCE_HANDLES; ++i) {
1638 - if (atomic_read(&p->rdev->vce.handles[i]) == handle)
1639 + if (atomic_read(&p->rdev->vce.handles[i]) == handle) {
1640 + if (p->rdev->vce.filp[i] != p->filp) {
1641 + DRM_ERROR("VCE handle collision detected!\n");
1642 + return -EINVAL;
1643 + }
1644 return i;
1645 + }
1646 }
1647
1648 /* handle not found try to alloc a new one */
1649 @@ -512,6 +521,7 @@ int radeon_vce_validate_handle(struct radeon_cs_parser *p, uint32_t handle)
1650 if (!atomic_cmpxchg(&p->rdev->vce.handles[i], 0, handle)) {
1651 p->rdev->vce.filp[i] = p->filp;
1652 p->rdev->vce.img_size[i] = 0;
1653 + *allocated = true;
1654 return i;
1655 }
1656 }
1657 @@ -529,10 +539,10 @@ int radeon_vce_validate_handle(struct radeon_cs_parser *p, uint32_t handle)
1658 int radeon_vce_cs_parse(struct radeon_cs_parser *p)
1659 {
1660 int session_idx = -1;
1661 - bool destroyed = false;
1662 + bool destroyed = false, created = false, allocated = false;
1663 uint32_t tmp, handle = 0;
1664 uint32_t *size = &tmp;
1665 - int i, r;
1666 + int i, r = 0;
1667
1668 while (p->idx < p->chunk_ib->length_dw) {
1669 uint32_t len = radeon_get_ib_value(p, p->idx);
1670 @@ -540,18 +550,21 @@ int radeon_vce_cs_parse(struct radeon_cs_parser *p)
1671
1672 if ((len < 8) || (len & 3)) {
1673 DRM_ERROR("invalid VCE command length (%d)!\n", len);
1674 - return -EINVAL;
1675 + r = -EINVAL;
1676 + goto out;
1677 }
1678
1679 if (destroyed) {
1680 DRM_ERROR("No other command allowed after destroy!\n");
1681 - return -EINVAL;
1682 + r = -EINVAL;
1683 + goto out;
1684 }
1685
1686 switch (cmd) {
1687 case 0x00000001: // session
1688 handle = radeon_get_ib_value(p, p->idx + 2);
1689 - session_idx = radeon_vce_validate_handle(p, handle);
1690 + session_idx = radeon_vce_validate_handle(p, handle,
1691 + &allocated);
1692 if (session_idx < 0)
1693 return session_idx;
1694 size = &p->rdev->vce.img_size[session_idx];
1695 @@ -561,6 +574,13 @@ int radeon_vce_cs_parse(struct radeon_cs_parser *p)
1696 break;
1697
1698 case 0x01000001: // create
1699 + created = true;
1700 + if (!allocated) {
1701 + DRM_ERROR("Handle already in use!\n");
1702 + r = -EINVAL;
1703 + goto out;
1704 + }
1705 +
1706 *size = radeon_get_ib_value(p, p->idx + 8) *
1707 radeon_get_ib_value(p, p->idx + 10) *
1708 8 * 3 / 2;
1709 @@ -577,12 +597,12 @@ int radeon_vce_cs_parse(struct radeon_cs_parser *p)
1710 r = radeon_vce_cs_reloc(p, p->idx + 10, p->idx + 9,
1711 *size);
1712 if (r)
1713 - return r;
1714 + goto out;
1715
1716 r = radeon_vce_cs_reloc(p, p->idx + 12, p->idx + 11,
1717 *size / 3);
1718 if (r)
1719 - return r;
1720 + goto out;
1721 break;
1722
1723 case 0x02000001: // destroy
1724 @@ -593,7 +613,7 @@ int radeon_vce_cs_parse(struct radeon_cs_parser *p)
1725 r = radeon_vce_cs_reloc(p, p->idx + 3, p->idx + 2,
1726 *size * 2);
1727 if (r)
1728 - return r;
1729 + goto out;
1730 break;
1731
1732 case 0x05000004: // video bitstream buffer
1733 @@ -601,36 +621,47 @@ int radeon_vce_cs_parse(struct radeon_cs_parser *p)
1734 r = radeon_vce_cs_reloc(p, p->idx + 3, p->idx + 2,
1735 tmp);
1736 if (r)
1737 - return r;
1738 + goto out;
1739 break;
1740
1741 case 0x05000005: // feedback buffer
1742 r = radeon_vce_cs_reloc(p, p->idx + 3, p->idx + 2,
1743 4096);
1744 if (r)
1745 - return r;
1746 + goto out;
1747 break;
1748
1749 default:
1750 DRM_ERROR("invalid VCE command (0x%x)!\n", cmd);
1751 - return -EINVAL;
1752 + r = -EINVAL;
1753 + goto out;
1754 }
1755
1756 if (session_idx == -1) {
1757 DRM_ERROR("no session command at start of IB\n");
1758 - return -EINVAL;
1759 + r = -EINVAL;
1760 + goto out;
1761 }
1762
1763 p->idx += len / 4;
1764 }
1765
1766 - if (destroyed) {
1767 - /* IB contains a destroy msg, free the handle */
1768 + if (allocated && !created) {
1769 + DRM_ERROR("New session without create command!\n");
1770 + r = -ENOENT;
1771 + }
1772 +
1773 +out:
1774 + if ((!r && destroyed) || (r && allocated)) {
1775 + /*
1776 + * IB contains a destroy msg or we have allocated an
1777 + * handle and got an error, anyway free the handle
1778 + */
1779 for (i = 0; i < RADEON_MAX_VCE_HANDLES; ++i)
1780 atomic_cmpxchg(&p->rdev->vce.handles[i], handle, 0);
1781 }
1782
1783 - return 0;
1784 + return r;
1785 }
1786
1787 /**
1788 diff --git a/drivers/gpu/drm/radeon/rv770d.h b/drivers/gpu/drm/radeon/rv770d.h
1789 index 3cf1e2921545..9ef2064b1c9c 100644
1790 --- a/drivers/gpu/drm/radeon/rv770d.h
1791 +++ b/drivers/gpu/drm/radeon/rv770d.h
1792 @@ -989,6 +989,9 @@
1793 ((n) & 0x3FFF) << 16)
1794
1795 /* UVD */
1796 +#define UVD_SEMA_ADDR_LOW 0xef00
1797 +#define UVD_SEMA_ADDR_HIGH 0xef04
1798 +#define UVD_SEMA_CMD 0xef08
1799 #define UVD_GPCOM_VCPU_CMD 0xef0c
1800 #define UVD_GPCOM_VCPU_DATA0 0xef10
1801 #define UVD_GPCOM_VCPU_DATA1 0xef14
1802 diff --git a/drivers/gpu/drm/radeon/uvd_v1_0.c b/drivers/gpu/drm/radeon/uvd_v1_0.c
1803 index e72b3cb59358..c6b1cbca47fc 100644
1804 --- a/drivers/gpu/drm/radeon/uvd_v1_0.c
1805 +++ b/drivers/gpu/drm/radeon/uvd_v1_0.c
1806 @@ -466,18 +466,8 @@ bool uvd_v1_0_semaphore_emit(struct radeon_device *rdev,
1807 struct radeon_semaphore *semaphore,
1808 bool emit_wait)
1809 {
1810 - uint64_t addr = semaphore->gpu_addr;
1811 -
1812 - radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_LOW, 0));
1813 - radeon_ring_write(ring, (addr >> 3) & 0x000FFFFF);
1814 -
1815 - radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_HIGH, 0));
1816 - radeon_ring_write(ring, (addr >> 23) & 0x000FFFFF);
1817 -
1818 - radeon_ring_write(ring, PACKET0(UVD_SEMA_CMD, 0));
1819 - radeon_ring_write(ring, emit_wait ? 1 : 0);
1820 -
1821 - return true;
1822 + /* disable semaphores for UVD V1 hardware */
1823 + return false;
1824 }
1825
1826 /**
1827 diff --git a/drivers/gpu/drm/radeon/uvd_v2_2.c b/drivers/gpu/drm/radeon/uvd_v2_2.c
1828 index 89193519f8a1..7ed778cec7c6 100644
1829 --- a/drivers/gpu/drm/radeon/uvd_v2_2.c
1830 +++ b/drivers/gpu/drm/radeon/uvd_v2_2.c
1831 @@ -60,6 +60,35 @@ void uvd_v2_2_fence_emit(struct radeon_device *rdev,
1832 }
1833
1834 /**
1835 + * uvd_v2_2_semaphore_emit - emit semaphore command
1836 + *
1837 + * @rdev: radeon_device pointer
1838 + * @ring: radeon_ring pointer
1839 + * @semaphore: semaphore to emit commands for
1840 + * @emit_wait: true if we should emit a wait command
1841 + *
1842 + * Emit a semaphore command (either wait or signal) to the UVD ring.
1843 + */
1844 +bool uvd_v2_2_semaphore_emit(struct radeon_device *rdev,
1845 + struct radeon_ring *ring,
1846 + struct radeon_semaphore *semaphore,
1847 + bool emit_wait)
1848 +{
1849 + uint64_t addr = semaphore->gpu_addr;
1850 +
1851 + radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_LOW, 0));
1852 + radeon_ring_write(ring, (addr >> 3) & 0x000FFFFF);
1853 +
1854 + radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_HIGH, 0));
1855 + radeon_ring_write(ring, (addr >> 23) & 0x000FFFFF);
1856 +
1857 + radeon_ring_write(ring, PACKET0(UVD_SEMA_CMD, 0));
1858 + radeon_ring_write(ring, emit_wait ? 1 : 0);
1859 +
1860 + return true;
1861 +}
1862 +
1863 +/**
1864 * uvd_v2_2_resume - memory controller programming
1865 *
1866 * @rdev: radeon_device pointer
1867 diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
1868 index d570030d899c..06441a43c3aa 100644
1869 --- a/drivers/infiniband/core/cma.c
1870 +++ b/drivers/infiniband/core/cma.c
1871 @@ -859,19 +859,27 @@ static void cma_save_ib_info(struct rdma_cm_id *id, struct rdma_cm_id *listen_id
1872 memcpy(&ib->sib_addr, &path->dgid, 16);
1873 }
1874
1875 +static __be16 ss_get_port(const struct sockaddr_storage *ss)
1876 +{
1877 + if (ss->ss_family == AF_INET)
1878 + return ((struct sockaddr_in *)ss)->sin_port;
1879 + else if (ss->ss_family == AF_INET6)
1880 + return ((struct sockaddr_in6 *)ss)->sin6_port;
1881 + BUG();
1882 +}
1883 +
1884 static void cma_save_ip4_info(struct rdma_cm_id *id, struct rdma_cm_id *listen_id,
1885 struct cma_hdr *hdr)
1886 {
1887 - struct sockaddr_in *listen4, *ip4;
1888 + struct sockaddr_in *ip4;
1889
1890 - listen4 = (struct sockaddr_in *) &listen_id->route.addr.src_addr;
1891 ip4 = (struct sockaddr_in *) &id->route.addr.src_addr;
1892 - ip4->sin_family = listen4->sin_family;
1893 + ip4->sin_family = AF_INET;
1894 ip4->sin_addr.s_addr = hdr->dst_addr.ip4.addr;
1895 - ip4->sin_port = listen4->sin_port;
1896 + ip4->sin_port = ss_get_port(&listen_id->route.addr.src_addr);
1897
1898 ip4 = (struct sockaddr_in *) &id->route.addr.dst_addr;
1899 - ip4->sin_family = listen4->sin_family;
1900 + ip4->sin_family = AF_INET;
1901 ip4->sin_addr.s_addr = hdr->src_addr.ip4.addr;
1902 ip4->sin_port = hdr->port;
1903 }
1904 @@ -879,16 +887,15 @@ static void cma_save_ip4_info(struct rdma_cm_id *id, struct rdma_cm_id *listen_i
1905 static void cma_save_ip6_info(struct rdma_cm_id *id, struct rdma_cm_id *listen_id,
1906 struct cma_hdr *hdr)
1907 {
1908 - struct sockaddr_in6 *listen6, *ip6;
1909 + struct sockaddr_in6 *ip6;
1910
1911 - listen6 = (struct sockaddr_in6 *) &listen_id->route.addr.src_addr;
1912 ip6 = (struct sockaddr_in6 *) &id->route.addr.src_addr;
1913 - ip6->sin6_family = listen6->sin6_family;
1914 + ip6->sin6_family = AF_INET6;
1915 ip6->sin6_addr = hdr->dst_addr.ip6;
1916 - ip6->sin6_port = listen6->sin6_port;
1917 + ip6->sin6_port = ss_get_port(&listen_id->route.addr.src_addr);
1918
1919 ip6 = (struct sockaddr_in6 *) &id->route.addr.dst_addr;
1920 - ip6->sin6_family = listen6->sin6_family;
1921 + ip6->sin6_family = AF_INET6;
1922 ip6->sin6_addr = hdr->src_addr.ip6;
1923 ip6->sin6_port = hdr->port;
1924 }
1925 diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
1926 index 414739295d04..713a96237a80 100644
1927 --- a/drivers/md/dm-crypt.c
1928 +++ b/drivers/md/dm-crypt.c
1929 @@ -925,10 +925,11 @@ static int crypt_convert(struct crypt_config *cc,
1930
1931 switch (r) {
1932 /* async */
1933 - case -EINPROGRESS:
1934 case -EBUSY:
1935 wait_for_completion(&ctx->restart);
1936 reinit_completion(&ctx->restart);
1937 + /* fall through*/
1938 + case -EINPROGRESS:
1939 ctx->req = NULL;
1940 ctx->cc_sector++;
1941 continue;
1942 @@ -1345,8 +1346,10 @@ static void kcryptd_async_done(struct crypto_async_request *async_req,
1943 struct dm_crypt_io *io = container_of(ctx, struct dm_crypt_io, ctx);
1944 struct crypt_config *cc = io->cc;
1945
1946 - if (error == -EINPROGRESS)
1947 + if (error == -EINPROGRESS) {
1948 + complete(&ctx->restart);
1949 return;
1950 + }
1951
1952 if (!error && cc->iv_gen_ops && cc->iv_gen_ops->post)
1953 error = cc->iv_gen_ops->post(cc, iv_of_dmreq(cc, dmreq), dmreq);
1954 @@ -1357,15 +1360,12 @@ static void kcryptd_async_done(struct crypto_async_request *async_req,
1955 crypt_free_req(cc, req_of_dmreq(cc, dmreq), io->base_bio);
1956
1957 if (!atomic_dec_and_test(&ctx->cc_pending))
1958 - goto done;
1959 + return;
1960
1961 if (bio_data_dir(io->base_bio) == READ)
1962 kcryptd_crypt_read_done(io);
1963 else
1964 kcryptd_crypt_write_io_submit(io, 1);
1965 -done:
1966 - if (!completion_done(&ctx->restart))
1967 - complete(&ctx->restart);
1968 }
1969
1970 static void kcryptd_crypt(struct work_struct *work)
1971 diff --git a/drivers/md/md.c b/drivers/md/md.c
1972 index e6178787ce3d..e47d1dd046da 100644
1973 --- a/drivers/md/md.c
1974 +++ b/drivers/md/md.c
1975 @@ -4754,12 +4754,12 @@ static void md_free(struct kobject *ko)
1976 if (mddev->sysfs_state)
1977 sysfs_put(mddev->sysfs_state);
1978
1979 + if (mddev->queue)
1980 + blk_cleanup_queue(mddev->queue);
1981 if (mddev->gendisk) {
1982 del_gendisk(mddev->gendisk);
1983 put_disk(mddev->gendisk);
1984 }
1985 - if (mddev->queue)
1986 - blk_cleanup_queue(mddev->queue);
1987
1988 kfree(mddev);
1989 }
1990 diff --git a/drivers/media/platform/marvell-ccic/mcam-core.c b/drivers/media/platform/marvell-ccic/mcam-core.c
1991 index dd5b1415f974..f902eb4ee569 100644
1992 --- a/drivers/media/platform/marvell-ccic/mcam-core.c
1993 +++ b/drivers/media/platform/marvell-ccic/mcam-core.c
1994 @@ -116,8 +116,8 @@ static struct mcam_format_struct {
1995 .planar = false,
1996 },
1997 {
1998 - .desc = "UYVY 4:2:2",
1999 - .pixelformat = V4L2_PIX_FMT_UYVY,
2000 + .desc = "YVYU 4:2:2",
2001 + .pixelformat = V4L2_PIX_FMT_YVYU,
2002 .mbus_code = MEDIA_BUS_FMT_YUYV8_2X8,
2003 .bpp = 2,
2004 .planar = false,
2005 @@ -748,7 +748,7 @@ static void mcam_ctlr_image(struct mcam_camera *cam)
2006
2007 switch (fmt->pixelformat) {
2008 case V4L2_PIX_FMT_YUYV:
2009 - case V4L2_PIX_FMT_UYVY:
2010 + case V4L2_PIX_FMT_YVYU:
2011 widthy = fmt->width * 2;
2012 widthuv = 0;
2013 break;
2014 @@ -784,15 +784,15 @@ static void mcam_ctlr_image(struct mcam_camera *cam)
2015 case V4L2_PIX_FMT_YUV420:
2016 case V4L2_PIX_FMT_YVU420:
2017 mcam_reg_write_mask(cam, REG_CTRL0,
2018 - C0_DF_YUV | C0_YUV_420PL | C0_YUVE_YVYU, C0_DF_MASK);
2019 + C0_DF_YUV | C0_YUV_420PL | C0_YUVE_VYUY, C0_DF_MASK);
2020 break;
2021 case V4L2_PIX_FMT_YUYV:
2022 mcam_reg_write_mask(cam, REG_CTRL0,
2023 - C0_DF_YUV | C0_YUV_PACKED | C0_YUVE_UYVY, C0_DF_MASK);
2024 + C0_DF_YUV | C0_YUV_PACKED | C0_YUVE_NOSWAP, C0_DF_MASK);
2025 break;
2026 - case V4L2_PIX_FMT_UYVY:
2027 + case V4L2_PIX_FMT_YVYU:
2028 mcam_reg_write_mask(cam, REG_CTRL0,
2029 - C0_DF_YUV | C0_YUV_PACKED | C0_YUVE_YUYV, C0_DF_MASK);
2030 + C0_DF_YUV | C0_YUV_PACKED | C0_YUVE_SWAP24, C0_DF_MASK);
2031 break;
2032 case V4L2_PIX_FMT_JPEG:
2033 mcam_reg_write_mask(cam, REG_CTRL0,
2034 diff --git a/drivers/media/platform/marvell-ccic/mcam-core.h b/drivers/media/platform/marvell-ccic/mcam-core.h
2035 index aa0c6eac254a..7ffdf4dbaf8c 100644
2036 --- a/drivers/media/platform/marvell-ccic/mcam-core.h
2037 +++ b/drivers/media/platform/marvell-ccic/mcam-core.h
2038 @@ -330,10 +330,10 @@ int mccic_resume(struct mcam_camera *cam);
2039 #define C0_YUVE_YVYU 0x00010000 /* Y1CrY0Cb */
2040 #define C0_YUVE_VYUY 0x00020000 /* CrY1CbY0 */
2041 #define C0_YUVE_UYVY 0x00030000 /* CbY1CrY0 */
2042 -#define C0_YUVE_XYUV 0x00000000 /* 420: .YUV */
2043 -#define C0_YUVE_XYVU 0x00010000 /* 420: .YVU */
2044 -#define C0_YUVE_XUVY 0x00020000 /* 420: .UVY */
2045 -#define C0_YUVE_XVUY 0x00030000 /* 420: .VUY */
2046 +#define C0_YUVE_NOSWAP 0x00000000 /* no bytes swapping */
2047 +#define C0_YUVE_SWAP13 0x00010000 /* swap byte 1 and 3 */
2048 +#define C0_YUVE_SWAP24 0x00020000 /* swap byte 2 and 4 */
2049 +#define C0_YUVE_SWAP1324 0x00030000 /* swap bytes 1&3 and 2&4 */
2050 /* Bayer bits 18,19 if needed */
2051 #define C0_EOF_VSYNC 0x00400000 /* Generate EOF by VSYNC */
2052 #define C0_VEDGE_CTRL 0x00800000 /* Detect falling edge of VSYNC */
2053 diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
2054 index c69afb5e264e..ed2e71a74a58 100644
2055 --- a/drivers/mmc/card/block.c
2056 +++ b/drivers/mmc/card/block.c
2057 @@ -1029,6 +1029,18 @@ static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type)
2058 md->reset_done &= ~type;
2059 }
2060
2061 +int mmc_access_rpmb(struct mmc_queue *mq)
2062 +{
2063 + struct mmc_blk_data *md = mq->data;
2064 + /*
2065 + * If this is a RPMB partition access, return ture
2066 + */
2067 + if (md && md->part_type == EXT_CSD_PART_CONFIG_ACC_RPMB)
2068 + return true;
2069 +
2070 + return false;
2071 +}
2072 +
2073 static int mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req)
2074 {
2075 struct mmc_blk_data *md = mq->data;
2076 diff --git a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c
2077 index 236d194c2883..8efa3684aef8 100644
2078 --- a/drivers/mmc/card/queue.c
2079 +++ b/drivers/mmc/card/queue.c
2080 @@ -38,7 +38,7 @@ static int mmc_prep_request(struct request_queue *q, struct request *req)
2081 return BLKPREP_KILL;
2082 }
2083
2084 - if (mq && mmc_card_removed(mq->card))
2085 + if (mq && (mmc_card_removed(mq->card) || mmc_access_rpmb(mq)))
2086 return BLKPREP_KILL;
2087
2088 req->cmd_flags |= REQ_DONTPREP;
2089 diff --git a/drivers/mmc/card/queue.h b/drivers/mmc/card/queue.h
2090 index 5752d50049a3..99e6521e6169 100644
2091 --- a/drivers/mmc/card/queue.h
2092 +++ b/drivers/mmc/card/queue.h
2093 @@ -73,4 +73,6 @@ extern void mmc_queue_bounce_post(struct mmc_queue_req *);
2094 extern int mmc_packed_init(struct mmc_queue *, struct mmc_card *);
2095 extern void mmc_packed_clean(struct mmc_queue *);
2096
2097 +extern int mmc_access_rpmb(struct mmc_queue *);
2098 +
2099 #endif
2100 diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
2101 index 23f10f72e5f3..57a8d00672d3 100644
2102 --- a/drivers/mmc/core/core.c
2103 +++ b/drivers/mmc/core/core.c
2104 @@ -2648,6 +2648,7 @@ int mmc_pm_notify(struct notifier_block *notify_block,
2105 switch (mode) {
2106 case PM_HIBERNATION_PREPARE:
2107 case PM_SUSPEND_PREPARE:
2108 + case PM_RESTORE_PREPARE:
2109 spin_lock_irqsave(&host->lock, flags);
2110 host->rescan_disable = 1;
2111 spin_unlock_irqrestore(&host->lock, flags);
2112 diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c
2113 index 7d9d6a321521..5165ae75d540 100644
2114 --- a/drivers/mmc/host/sh_mmcif.c
2115 +++ b/drivers/mmc/host/sh_mmcif.c
2116 @@ -1402,7 +1402,7 @@ static int sh_mmcif_probe(struct platform_device *pdev)
2117 host = mmc_priv(mmc);
2118 host->mmc = mmc;
2119 host->addr = reg;
2120 - host->timeout = msecs_to_jiffies(1000);
2121 + host->timeout = msecs_to_jiffies(10000);
2122 host->ccs_enable = !pd || !pd->ccs_unsupported;
2123 host->clk_ctrl2_enable = pd && pd->clk_ctrl2_present;
2124
2125 diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
2126 index 89dca77ca038..18ee2089df4a 100644
2127 --- a/drivers/pinctrl/core.c
2128 +++ b/drivers/pinctrl/core.c
2129 @@ -1110,7 +1110,7 @@ void devm_pinctrl_put(struct pinctrl *p)
2130 EXPORT_SYMBOL_GPL(devm_pinctrl_put);
2131
2132 int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
2133 - bool dup, bool locked)
2134 + bool dup)
2135 {
2136 int i, ret;
2137 struct pinctrl_maps *maps_node;
2138 @@ -1178,11 +1178,9 @@ int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
2139 maps_node->maps = maps;
2140 }
2141
2142 - if (!locked)
2143 - mutex_lock(&pinctrl_maps_mutex);
2144 + mutex_lock(&pinctrl_maps_mutex);
2145 list_add_tail(&maps_node->node, &pinctrl_maps);
2146 - if (!locked)
2147 - mutex_unlock(&pinctrl_maps_mutex);
2148 + mutex_unlock(&pinctrl_maps_mutex);
2149
2150 return 0;
2151 }
2152 @@ -1197,7 +1195,7 @@ int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
2153 int pinctrl_register_mappings(struct pinctrl_map const *maps,
2154 unsigned num_maps)
2155 {
2156 - return pinctrl_register_map(maps, num_maps, true, false);
2157 + return pinctrl_register_map(maps, num_maps, true);
2158 }
2159
2160 void pinctrl_unregister_map(struct pinctrl_map const *map)
2161 diff --git a/drivers/pinctrl/core.h b/drivers/pinctrl/core.h
2162 index 75476b3d87da..b24ea846c867 100644
2163 --- a/drivers/pinctrl/core.h
2164 +++ b/drivers/pinctrl/core.h
2165 @@ -183,7 +183,7 @@ static inline struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev,
2166 }
2167
2168 int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
2169 - bool dup, bool locked);
2170 + bool dup);
2171 void pinctrl_unregister_map(struct pinctrl_map const *map);
2172
2173 extern int pinctrl_force_sleep(struct pinctrl_dev *pctldev);
2174 diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c
2175 index eda13de2e7c0..0bbf7d71b281 100644
2176 --- a/drivers/pinctrl/devicetree.c
2177 +++ b/drivers/pinctrl/devicetree.c
2178 @@ -92,7 +92,7 @@ static int dt_remember_or_free_map(struct pinctrl *p, const char *statename,
2179 dt_map->num_maps = num_maps;
2180 list_add_tail(&dt_map->node, &p->dt_maps);
2181
2182 - return pinctrl_register_map(map, num_maps, false, true);
2183 + return pinctrl_register_map(map, num_maps, false);
2184 }
2185
2186 struct pinctrl_dev *of_pinctrl_get(struct device_node *np)
2187 diff --git a/drivers/rtc/rtc-armada38x.c b/drivers/rtc/rtc-armada38x.c
2188 index 43e04af39e09..cb70ced7e0db 100644
2189 --- a/drivers/rtc/rtc-armada38x.c
2190 +++ b/drivers/rtc/rtc-armada38x.c
2191 @@ -40,6 +40,13 @@ struct armada38x_rtc {
2192 void __iomem *regs;
2193 void __iomem *regs_soc;
2194 spinlock_t lock;
2195 + /*
2196 + * While setting the time, the RTC TIME register should not be
2197 + * accessed. Setting the RTC time involves sleeping during
2198 + * 100ms, so a mutex instead of a spinlock is used to protect
2199 + * it
2200 + */
2201 + struct mutex mutex_time;
2202 int irq;
2203 };
2204
2205 @@ -59,8 +66,7 @@ static int armada38x_rtc_read_time(struct device *dev, struct rtc_time *tm)
2206 struct armada38x_rtc *rtc = dev_get_drvdata(dev);
2207 unsigned long time, time_check, flags;
2208
2209 - spin_lock_irqsave(&rtc->lock, flags);
2210 -
2211 + mutex_lock(&rtc->mutex_time);
2212 time = readl(rtc->regs + RTC_TIME);
2213 /*
2214 * WA for failing time set attempts. As stated in HW ERRATA if
2215 @@ -71,7 +77,7 @@ static int armada38x_rtc_read_time(struct device *dev, struct rtc_time *tm)
2216 if ((time_check - time) > 1)
2217 time_check = readl(rtc->regs + RTC_TIME);
2218
2219 - spin_unlock_irqrestore(&rtc->lock, flags);
2220 + mutex_unlock(&rtc->mutex_time);
2221
2222 rtc_time_to_tm(time_check, tm);
2223
2224 @@ -94,19 +100,12 @@ static int armada38x_rtc_set_time(struct device *dev, struct rtc_time *tm)
2225 * then wait for 100ms before writing to the time register to be
2226 * sure that the data will be taken into account.
2227 */
2228 - spin_lock_irqsave(&rtc->lock, flags);
2229 -
2230 + mutex_lock(&rtc->mutex_time);
2231 rtc_delayed_write(0, rtc, RTC_STATUS);
2232 -
2233 - spin_unlock_irqrestore(&rtc->lock, flags);
2234 -
2235 msleep(100);
2236 -
2237 - spin_lock_irqsave(&rtc->lock, flags);
2238 -
2239 rtc_delayed_write(time, rtc, RTC_TIME);
2240 + mutex_unlock(&rtc->mutex_time);
2241
2242 - spin_unlock_irqrestore(&rtc->lock, flags);
2243 out:
2244 return ret;
2245 }
2246 @@ -230,6 +229,7 @@ static __init int armada38x_rtc_probe(struct platform_device *pdev)
2247 return -ENOMEM;
2248
2249 spin_lock_init(&rtc->lock);
2250 + mutex_init(&rtc->mutex_time);
2251
2252 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "rtc");
2253 rtc->regs = devm_ioremap_resource(&pdev->dev, res);
2254 diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
2255 index f1e57425e39f..5bab1c684bb1 100644
2256 --- a/drivers/tty/hvc/hvc_xen.c
2257 +++ b/drivers/tty/hvc/hvc_xen.c
2258 @@ -299,11 +299,27 @@ static int xen_initial_domain_console_init(void)
2259 return 0;
2260 }
2261
2262 +static void xen_console_update_evtchn(struct xencons_info *info)
2263 +{
2264 + if (xen_hvm_domain()) {
2265 + uint64_t v;
2266 + int err;
2267 +
2268 + err = hvm_get_parameter(HVM_PARAM_CONSOLE_EVTCHN, &v);
2269 + if (!err && v)
2270 + info->evtchn = v;
2271 + } else
2272 + info->evtchn = xen_start_info->console.domU.evtchn;
2273 +}
2274 +
2275 void xen_console_resume(void)
2276 {
2277 struct xencons_info *info = vtermno_to_xencons(HVC_COOKIE);
2278 - if (info != NULL && info->irq)
2279 + if (info != NULL && info->irq) {
2280 + if (!xen_initial_domain())
2281 + xen_console_update_evtchn(info);
2282 rebind_evtchn_irq(info->evtchn, info->irq);
2283 + }
2284 }
2285
2286 static void xencons_disconnect_backend(struct xencons_info *info)
2287 diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
2288 index 4cde85501444..837d1778970b 100644
2289 --- a/drivers/vfio/vfio.c
2290 +++ b/drivers/vfio/vfio.c
2291 @@ -711,6 +711,8 @@ void *vfio_del_group_dev(struct device *dev)
2292 void *device_data = device->device_data;
2293 struct vfio_unbound_dev *unbound;
2294 unsigned int i = 0;
2295 + long ret;
2296 + bool interrupted = false;
2297
2298 /*
2299 * The group exists so long as we have a device reference. Get
2300 @@ -756,9 +758,22 @@ void *vfio_del_group_dev(struct device *dev)
2301
2302 vfio_device_put(device);
2303
2304 - } while (wait_event_interruptible_timeout(vfio.release_q,
2305 - !vfio_dev_present(group, dev),
2306 - HZ * 10) <= 0);
2307 + if (interrupted) {
2308 + ret = wait_event_timeout(vfio.release_q,
2309 + !vfio_dev_present(group, dev), HZ * 10);
2310 + } else {
2311 + ret = wait_event_interruptible_timeout(vfio.release_q,
2312 + !vfio_dev_present(group, dev), HZ * 10);
2313 + if (ret == -ERESTARTSYS) {
2314 + interrupted = true;
2315 + dev_warn(dev,
2316 + "Device is currently in use, task"
2317 + " \"%s\" (%d) "
2318 + "blocked until device is released",
2319 + current->comm, task_pid_nr(current));
2320 + }
2321 + }
2322 + } while (ret <= 0);
2323
2324 vfio_group_put(group);
2325
2326 diff --git a/drivers/xen/events/events_2l.c b/drivers/xen/events/events_2l.c
2327 index 5db43fc100a4..7dd46312c180 100644
2328 --- a/drivers/xen/events/events_2l.c
2329 +++ b/drivers/xen/events/events_2l.c
2330 @@ -345,6 +345,15 @@ irqreturn_t xen_debug_interrupt(int irq, void *dev_id)
2331 return IRQ_HANDLED;
2332 }
2333
2334 +static void evtchn_2l_resume(void)
2335 +{
2336 + int i;
2337 +
2338 + for_each_online_cpu(i)
2339 + memset(per_cpu(cpu_evtchn_mask, i), 0, sizeof(xen_ulong_t) *
2340 + EVTCHN_2L_NR_CHANNELS/BITS_PER_EVTCHN_WORD);
2341 +}
2342 +
2343 static const struct evtchn_ops evtchn_ops_2l = {
2344 .max_channels = evtchn_2l_max_channels,
2345 .nr_channels = evtchn_2l_max_channels,
2346 @@ -356,6 +365,7 @@ static const struct evtchn_ops evtchn_ops_2l = {
2347 .mask = evtchn_2l_mask,
2348 .unmask = evtchn_2l_unmask,
2349 .handle_events = evtchn_2l_handle_events,
2350 + .resume = evtchn_2l_resume,
2351 };
2352
2353 void __init xen_evtchn_2l_init(void)
2354 diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
2355 index 70fba973a107..2b8553bd8715 100644
2356 --- a/drivers/xen/events/events_base.c
2357 +++ b/drivers/xen/events/events_base.c
2358 @@ -529,8 +529,8 @@ static unsigned int __startup_pirq(unsigned int irq)
2359 if (rc)
2360 goto err;
2361
2362 - bind_evtchn_to_cpu(evtchn, 0);
2363 info->evtchn = evtchn;
2364 + bind_evtchn_to_cpu(evtchn, 0);
2365
2366 rc = xen_evtchn_port_setup(info);
2367 if (rc)
2368 @@ -1279,8 +1279,9 @@ void rebind_evtchn_irq(int evtchn, int irq)
2369
2370 mutex_unlock(&irq_mapping_update_lock);
2371
2372 - /* new event channels are always bound to cpu 0 */
2373 - irq_set_affinity(irq, cpumask_of(0));
2374 + bind_evtchn_to_cpu(evtchn, info->cpu);
2375 + /* This will be deferred until interrupt is processed */
2376 + irq_set_affinity(irq, cpumask_of(info->cpu));
2377
2378 /* Unmask the event channel. */
2379 enable_irq(irq);
2380 diff --git a/drivers/xen/xen-pciback/conf_space.c b/drivers/xen/xen-pciback/conf_space.c
2381 index 75fe3d466515..9c234209d8b5 100644
2382 --- a/drivers/xen/xen-pciback/conf_space.c
2383 +++ b/drivers/xen/xen-pciback/conf_space.c
2384 @@ -16,8 +16,8 @@
2385 #include "conf_space.h"
2386 #include "conf_space_quirks.h"
2387
2388 -bool permissive;
2389 -module_param(permissive, bool, 0644);
2390 +bool xen_pcibk_permissive;
2391 +module_param_named(permissive, xen_pcibk_permissive, bool, 0644);
2392
2393 /* This is where xen_pcibk_read_config_byte, xen_pcibk_read_config_word,
2394 * xen_pcibk_write_config_word, and xen_pcibk_write_config_byte are created. */
2395 @@ -262,7 +262,7 @@ int xen_pcibk_config_write(struct pci_dev *dev, int offset, int size, u32 value)
2396 * This means that some fields may still be read-only because
2397 * they have entries in the config_field list that intercept
2398 * the write and do nothing. */
2399 - if (dev_data->permissive || permissive) {
2400 + if (dev_data->permissive || xen_pcibk_permissive) {
2401 switch (size) {
2402 case 1:
2403 err = pci_write_config_byte(dev, offset,
2404 diff --git a/drivers/xen/xen-pciback/conf_space.h b/drivers/xen/xen-pciback/conf_space.h
2405 index 2e1d73d1d5d0..62461a8ba1d6 100644
2406 --- a/drivers/xen/xen-pciback/conf_space.h
2407 +++ b/drivers/xen/xen-pciback/conf_space.h
2408 @@ -64,7 +64,7 @@ struct config_field_entry {
2409 void *data;
2410 };
2411
2412 -extern bool permissive;
2413 +extern bool xen_pcibk_permissive;
2414
2415 #define OFFSET(cfg_entry) ((cfg_entry)->base_offset+(cfg_entry)->field->offset)
2416
2417 diff --git a/drivers/xen/xen-pciback/conf_space_header.c b/drivers/xen/xen-pciback/conf_space_header.c
2418 index 2d7369391472..f8baf463dd35 100644
2419 --- a/drivers/xen/xen-pciback/conf_space_header.c
2420 +++ b/drivers/xen/xen-pciback/conf_space_header.c
2421 @@ -105,7 +105,7 @@ static int command_write(struct pci_dev *dev, int offset, u16 value, void *data)
2422
2423 cmd->val = value;
2424
2425 - if (!permissive && (!dev_data || !dev_data->permissive))
2426 + if (!xen_pcibk_permissive && (!dev_data || !dev_data->permissive))
2427 return 0;
2428
2429 /* Only allow the guest to control certain bits. */
2430 diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
2431 index 564b31584860..5390a674b5e3 100644
2432 --- a/drivers/xen/xenbus/xenbus_probe.c
2433 +++ b/drivers/xen/xenbus/xenbus_probe.c
2434 @@ -57,6 +57,7 @@
2435 #include <xen/xen.h>
2436 #include <xen/xenbus.h>
2437 #include <xen/events.h>
2438 +#include <xen/xen-ops.h>
2439 #include <xen/page.h>
2440
2441 #include <xen/hvm.h>
2442 @@ -735,6 +736,30 @@ static int __init xenstored_local_init(void)
2443 return err;
2444 }
2445
2446 +static int xenbus_resume_cb(struct notifier_block *nb,
2447 + unsigned long action, void *data)
2448 +{
2449 + int err = 0;
2450 +
2451 + if (xen_hvm_domain()) {
2452 + uint64_t v;
2453 +
2454 + err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v);
2455 + if (!err && v)
2456 + xen_store_evtchn = v;
2457 + else
2458 + pr_warn("Cannot update xenstore event channel: %d\n",
2459 + err);
2460 + } else
2461 + xen_store_evtchn = xen_start_info->store_evtchn;
2462 +
2463 + return err;
2464 +}
2465 +
2466 +static struct notifier_block xenbus_resume_nb = {
2467 + .notifier_call = xenbus_resume_cb,
2468 +};
2469 +
2470 static int __init xenbus_init(void)
2471 {
2472 int err = 0;
2473 @@ -793,6 +818,10 @@ static int __init xenbus_init(void)
2474 goto out_error;
2475 }
2476
2477 + if ((xen_store_domain_type != XS_LOCAL) &&
2478 + (xen_store_domain_type != XS_UNKNOWN))
2479 + xen_resume_notifier_register(&xenbus_resume_nb);
2480 +
2481 #ifdef CONFIG_XEN_COMPAT_XENFS
2482 /*
2483 * Create xenfs mountpoint in /proc for compatibility with
2484 diff --git a/fs/coredump.c b/fs/coredump.c
2485 index f319926ddf8c..bbbe139ab280 100644
2486 --- a/fs/coredump.c
2487 +++ b/fs/coredump.c
2488 @@ -657,7 +657,7 @@ void do_coredump(const siginfo_t *siginfo)
2489 */
2490 if (!uid_eq(inode->i_uid, current_fsuid()))
2491 goto close_fail;
2492 - if (!cprm.file->f_op->write)
2493 + if (!(cprm.file->f_mode & FMODE_CAN_WRITE))
2494 goto close_fail;
2495 if (do_truncate(cprm.file->f_path.dentry, 0, 0, cprm.file))
2496 goto close_fail;
2497 diff --git a/fs/namei.c b/fs/namei.c
2498 index caa38a24e1f7..50a8583e8156 100644
2499 --- a/fs/namei.c
2500 +++ b/fs/namei.c
2501 @@ -3228,7 +3228,7 @@ static struct file *path_openat(int dfd, struct filename *pathname,
2502
2503 if (unlikely(file->f_flags & __O_TMPFILE)) {
2504 error = do_tmpfile(dfd, pathname, nd, flags, op, file, &opened);
2505 - goto out;
2506 + goto out2;
2507 }
2508
2509 error = path_init(dfd, pathname->name, flags, nd);
2510 @@ -3258,6 +3258,7 @@ static struct file *path_openat(int dfd, struct filename *pathname,
2511 }
2512 out:
2513 path_cleanup(nd);
2514 +out2:
2515 if (!(opened & FILE_OPENED)) {
2516 BUG_ON(!error);
2517 put_filp(file);
2518 diff --git a/fs/namespace.c b/fs/namespace.c
2519 index 4622ee32a5e2..38ed1e1bed41 100644
2520 --- a/fs/namespace.c
2521 +++ b/fs/namespace.c
2522 @@ -3178,6 +3178,12 @@ bool fs_fully_visible(struct file_system_type *type)
2523 if (mnt->mnt.mnt_sb->s_type != type)
2524 continue;
2525
2526 + /* This mount is not fully visible if it's root directory
2527 + * is not the root directory of the filesystem.
2528 + */
2529 + if (mnt->mnt.mnt_root != mnt->mnt.mnt_sb->s_root)
2530 + continue;
2531 +
2532 /* This mount is not fully visible if there are any child mounts
2533 * that cover anything except for empty directories.
2534 */
2535 diff --git a/fs/nilfs2/btree.c b/fs/nilfs2/btree.c
2536 index ecdbae19a766..090d8ce25bd1 100644
2537 --- a/fs/nilfs2/btree.c
2538 +++ b/fs/nilfs2/btree.c
2539 @@ -388,7 +388,7 @@ static int nilfs_btree_root_broken(const struct nilfs_btree_node *node,
2540 nchildren = nilfs_btree_node_get_nchildren(node);
2541
2542 if (unlikely(level < NILFS_BTREE_LEVEL_NODE_MIN ||
2543 - level > NILFS_BTREE_LEVEL_MAX ||
2544 + level >= NILFS_BTREE_LEVEL_MAX ||
2545 nchildren < 0 ||
2546 nchildren > NILFS_BTREE_ROOT_NCHILDREN_MAX)) {
2547 pr_crit("NILFS: bad btree root (inode number=%lu): level = %d, flags = 0x%x, nchildren = %d\n",
2548 diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
2549 index a6944b25fd5b..fdf4b41d0609 100644
2550 --- a/fs/ocfs2/dlm/dlmmaster.c
2551 +++ b/fs/ocfs2/dlm/dlmmaster.c
2552 @@ -757,6 +757,19 @@ lookup:
2553 if (tmpres) {
2554 spin_unlock(&dlm->spinlock);
2555 spin_lock(&tmpres->spinlock);
2556 +
2557 + /*
2558 + * Right after dlm spinlock was released, dlm_thread could have
2559 + * purged the lockres. Check if lockres got unhashed. If so
2560 + * start over.
2561 + */
2562 + if (hlist_unhashed(&tmpres->hash_node)) {
2563 + spin_unlock(&tmpres->spinlock);
2564 + dlm_lockres_put(tmpres);
2565 + tmpres = NULL;
2566 + goto lookup;
2567 + }
2568 +
2569 /* Wait on the thread that is mastering the resource */
2570 if (tmpres->owner == DLM_LOCK_RES_OWNER_UNKNOWN) {
2571 __dlm_wait_on_lockres(tmpres);
2572 diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
2573 index d56f5d722138..65aa4fa0ae4e 100644
2574 --- a/include/acpi/acpixf.h
2575 +++ b/include/acpi/acpixf.h
2576 @@ -431,13 +431,13 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_load_tables(void))
2577 ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_reallocate_root_table(void))
2578
2579 ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init
2580 - acpi_find_root_pointer(acpi_size * rsdp_address))
2581 -
2582 + acpi_find_root_pointer(acpi_physical_address *
2583 + rsdp_address))
2584 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
2585 - acpi_get_table_header(acpi_string signature,
2586 - u32 instance,
2587 - struct acpi_table_header
2588 - *out_table_header))
2589 + acpi_get_table_header(acpi_string signature,
2590 + u32 instance,
2591 + struct acpi_table_header
2592 + *out_table_header))
2593 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
2594 acpi_get_table(acpi_string signature, u32 instance,
2595 struct acpi_table_header
2596 diff --git a/include/linux/nilfs2_fs.h b/include/linux/nilfs2_fs.h
2597 index ff3fea3194c6..9abb763e4b86 100644
2598 --- a/include/linux/nilfs2_fs.h
2599 +++ b/include/linux/nilfs2_fs.h
2600 @@ -460,7 +460,7 @@ struct nilfs_btree_node {
2601 /* level */
2602 #define NILFS_BTREE_LEVEL_DATA 0
2603 #define NILFS_BTREE_LEVEL_NODE_MIN (NILFS_BTREE_LEVEL_DATA + 1)
2604 -#define NILFS_BTREE_LEVEL_MAX 14
2605 +#define NILFS_BTREE_LEVEL_MAX 14 /* Max level (exclusive) */
2606
2607 /**
2608 * struct nilfs_palloc_group_desc - block group descriptor
2609 diff --git a/mm/memory-failure.c b/mm/memory-failure.c
2610 index d487f8dc6d39..72a5224c8084 100644
2611 --- a/mm/memory-failure.c
2612 +++ b/mm/memory-failure.c
2613 @@ -1141,10 +1141,10 @@ int memory_failure(unsigned long pfn, int trapno, int flags)
2614 * The check (unnecessarily) ignores LRU pages being isolated and
2615 * walked by the page reclaim code, however that's not a big loss.
2616 */
2617 - if (!PageHuge(p) && !PageTransTail(p)) {
2618 - if (!PageLRU(p))
2619 - shake_page(p, 0);
2620 - if (!PageLRU(p)) {
2621 + if (!PageHuge(p)) {
2622 + if (!PageLRU(hpage))
2623 + shake_page(hpage, 0);
2624 + if (!PageLRU(hpage)) {
2625 /*
2626 * shake_page could have turned it free.
2627 */
2628 @@ -1721,12 +1721,12 @@ int soft_offline_page(struct page *page, int flags)
2629 } else if (ret == 0) { /* for free pages */
2630 if (PageHuge(page)) {
2631 set_page_hwpoison_huge_page(hpage);
2632 - dequeue_hwpoisoned_huge_page(hpage);
2633 - atomic_long_add(1 << compound_order(hpage),
2634 + if (!dequeue_hwpoisoned_huge_page(hpage))
2635 + atomic_long_add(1 << compound_order(hpage),
2636 &num_poisoned_pages);
2637 } else {
2638 - SetPageHWPoison(page);
2639 - atomic_long_inc(&num_poisoned_pages);
2640 + if (!TestSetPageHWPoison(page))
2641 + atomic_long_inc(&num_poisoned_pages);
2642 }
2643 }
2644 unset_migratetype_isolate(page, MIGRATE_MOVABLE);
2645 diff --git a/mm/page-writeback.c b/mm/page-writeback.c
2646 index 644bcb665773..ad05f2f7bb65 100644
2647 --- a/mm/page-writeback.c
2648 +++ b/mm/page-writeback.c
2649 @@ -580,7 +580,7 @@ static long long pos_ratio_polynom(unsigned long setpoint,
2650 long x;
2651
2652 x = div64_s64(((s64)setpoint - (s64)dirty) << RATELIMIT_CALC_SHIFT,
2653 - limit - setpoint + 1);
2654 + (limit - setpoint) | 1);
2655 pos_ratio = x;
2656 pos_ratio = pos_ratio * x >> RATELIMIT_CALC_SHIFT;
2657 pos_ratio = pos_ratio * x >> RATELIMIT_CALC_SHIFT;
2658 @@ -807,7 +807,7 @@ static unsigned long bdi_position_ratio(struct backing_dev_info *bdi,
2659 * scale global setpoint to bdi's:
2660 * bdi_setpoint = setpoint * bdi_thresh / thresh
2661 */
2662 - x = div_u64((u64)bdi_thresh << 16, thresh + 1);
2663 + x = div_u64((u64)bdi_thresh << 16, thresh | 1);
2664 bdi_setpoint = setpoint * (u64)x >> 16;
2665 /*
2666 * Use span=(8*write_bw) in single bdi case as indicated by
2667 @@ -822,7 +822,7 @@ static unsigned long bdi_position_ratio(struct backing_dev_info *bdi,
2668
2669 if (bdi_dirty < x_intercept - span / 4) {
2670 pos_ratio = div64_u64(pos_ratio * (x_intercept - bdi_dirty),
2671 - x_intercept - bdi_setpoint + 1);
2672 + (x_intercept - bdi_setpoint) | 1);
2673 } else
2674 pos_ratio /= 4;
2675
2676 diff --git a/sound/oss/sequencer.c b/sound/oss/sequencer.c
2677 index c0eea1dfe90f..f19da4b47c1d 100644
2678 --- a/sound/oss/sequencer.c
2679 +++ b/sound/oss/sequencer.c
2680 @@ -681,13 +681,8 @@ static int seq_timing_event(unsigned char *event_rec)
2681 break;
2682
2683 case TMR_ECHO:
2684 - if (seq_mode == SEQ_2)
2685 - seq_copy_to_input(event_rec, 8);
2686 - else
2687 - {
2688 - parm = (parm << 8 | SEQ_ECHO);
2689 - seq_copy_to_input((unsigned char *) &parm, 4);
2690 - }
2691 + parm = (parm << 8 | SEQ_ECHO);
2692 + seq_copy_to_input((unsigned char *) &parm, 4);
2693 break;
2694
2695 default:;
2696 @@ -1324,7 +1319,6 @@ int sequencer_ioctl(int dev, struct file *file, unsigned int cmd, void __user *a
2697 int mode = translate_mode(file);
2698 struct synth_info inf;
2699 struct seq_event_rec event_rec;
2700 - unsigned long flags;
2701 int __user *p = arg;
2702
2703 orig_dev = dev = dev >> 4;
2704 @@ -1479,9 +1473,7 @@ int sequencer_ioctl(int dev, struct file *file, unsigned int cmd, void __user *a
2705 case SNDCTL_SEQ_OUTOFBAND:
2706 if (copy_from_user(&event_rec, arg, sizeof(event_rec)))
2707 return -EFAULT;
2708 - spin_lock_irqsave(&lock,flags);
2709 play_event(event_rec.arr);
2710 - spin_unlock_irqrestore(&lock,flags);
2711 return 0;
2712
2713 case SNDCTL_MIDI_INFO: