Magellan Linux

Contents of /trunk/kernel-magellan/patches-4.15/0104-4.15.5-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3088 - (show annotations) (download)
Wed Mar 21 14:52:30 2018 UTC (6 years, 1 month ago) by niro
File size: 222027 byte(s)
-linux-4.15.5
1 diff --git a/Documentation/devicetree/bindings/dma/snps-dma.txt b/Documentation/devicetree/bindings/dma/snps-dma.txt
2 index a122723907ac..99acc712f83a 100644
3 --- a/Documentation/devicetree/bindings/dma/snps-dma.txt
4 +++ b/Documentation/devicetree/bindings/dma/snps-dma.txt
5 @@ -64,6 +64,6 @@ Example:
6 reg = <0xe0000000 0x1000>;
7 interrupts = <0 35 0x4>;
8 dmas = <&dmahost 12 0 1>,
9 - <&dmahost 13 0 1 0>;
10 + <&dmahost 13 1 0>;
11 dma-names = "rx", "rx";
12 };
13 diff --git a/Documentation/filesystems/ext4.txt b/Documentation/filesystems/ext4.txt
14 index 75236c0c2ac2..d081ce0482cc 100644
15 --- a/Documentation/filesystems/ext4.txt
16 +++ b/Documentation/filesystems/ext4.txt
17 @@ -233,7 +233,7 @@ data_err=ignore(*) Just print an error message if an error occurs
18 data_err=abort Abort the journal if an error occurs in a file
19 data buffer in ordered mode.
20
21 -grpid Give objects the same group ID as their creator.
22 +grpid New objects have the group ID of their parent.
23 bsdgroups
24
25 nogrpid (*) New objects have the group ID of their creator.
26 diff --git a/Makefile b/Makefile
27 index 8495e1ca052e..28c537fbe328 100644
28 --- a/Makefile
29 +++ b/Makefile
30 @@ -1,7 +1,7 @@
31 # SPDX-License-Identifier: GPL-2.0
32 VERSION = 4
33 PATCHLEVEL = 15
34 -SUBLEVEL = 4
35 +SUBLEVEL = 5
36 EXTRAVERSION =
37 NAME = Fearless Coyote
38
39 diff --git a/arch/arm/boot/dts/arm-realview-eb-mp.dtsi b/arch/arm/boot/dts/arm-realview-eb-mp.dtsi
40 index 7b8d90b7aeea..29b636fce23f 100644
41 --- a/arch/arm/boot/dts/arm-realview-eb-mp.dtsi
42 +++ b/arch/arm/boot/dts/arm-realview-eb-mp.dtsi
43 @@ -150,11 +150,6 @@
44 interrupts = <0 8 IRQ_TYPE_LEVEL_HIGH>;
45 };
46
47 -&charlcd {
48 - interrupt-parent = <&intc>;
49 - interrupts = <0 IRQ_TYPE_LEVEL_HIGH>;
50 -};
51 -
52 &serial0 {
53 interrupt-parent = <&intc>;
54 interrupts = <0 4 IRQ_TYPE_LEVEL_HIGH>;
55 diff --git a/arch/arm/boot/dts/exynos5410.dtsi b/arch/arm/boot/dts/exynos5410.dtsi
56 index 06713ec86f0d..d2174727df9a 100644
57 --- a/arch/arm/boot/dts/exynos5410.dtsi
58 +++ b/arch/arm/boot/dts/exynos5410.dtsi
59 @@ -333,7 +333,6 @@
60 &rtc {
61 clocks = <&clock CLK_RTC>;
62 clock-names = "rtc";
63 - interrupt-parent = <&pmu_system_controller>;
64 status = "disabled";
65 };
66
67 diff --git a/arch/arm/boot/dts/lpc3250-ea3250.dts b/arch/arm/boot/dts/lpc3250-ea3250.dts
68 index c43adb7b4d7c..58ea0a4e7afa 100644
69 --- a/arch/arm/boot/dts/lpc3250-ea3250.dts
70 +++ b/arch/arm/boot/dts/lpc3250-ea3250.dts
71 @@ -156,8 +156,8 @@
72 uda1380: uda1380@18 {
73 compatible = "nxp,uda1380";
74 reg = <0x18>;
75 - power-gpio = <&gpio 0x59 0>;
76 - reset-gpio = <&gpio 0x51 0>;
77 + power-gpio = <&gpio 3 10 0>;
78 + reset-gpio = <&gpio 3 2 0>;
79 dac-clk = "wspll";
80 };
81
82 diff --git a/arch/arm/boot/dts/lpc3250-phy3250.dts b/arch/arm/boot/dts/lpc3250-phy3250.dts
83 index c72eb9845603..1e1c2f517a82 100644
84 --- a/arch/arm/boot/dts/lpc3250-phy3250.dts
85 +++ b/arch/arm/boot/dts/lpc3250-phy3250.dts
86 @@ -81,8 +81,8 @@
87 uda1380: uda1380@18 {
88 compatible = "nxp,uda1380";
89 reg = <0x18>;
90 - power-gpio = <&gpio 0x59 0>;
91 - reset-gpio = <&gpio 0x51 0>;
92 + power-gpio = <&gpio 3 10 0>;
93 + reset-gpio = <&gpio 3 2 0>;
94 dac-clk = "wspll";
95 };
96
97 diff --git a/arch/arm/boot/dts/mt2701.dtsi b/arch/arm/boot/dts/mt2701.dtsi
98 index 965ddfbc9953..05557fce0f1d 100644
99 --- a/arch/arm/boot/dts/mt2701.dtsi
100 +++ b/arch/arm/boot/dts/mt2701.dtsi
101 @@ -604,6 +604,7 @@
102 compatible = "mediatek,mt2701-hifsys", "syscon";
103 reg = <0 0x1a000000 0 0x1000>;
104 #clock-cells = <1>;
105 + #reset-cells = <1>;
106 };
107
108 usb0: usb@1a1c0000 {
109 @@ -688,6 +689,7 @@
110 compatible = "mediatek,mt2701-ethsys", "syscon";
111 reg = <0 0x1b000000 0 0x1000>;
112 #clock-cells = <1>;
113 + #reset-cells = <1>;
114 };
115
116 eth: ethernet@1b100000 {
117 diff --git a/arch/arm/boot/dts/mt7623.dtsi b/arch/arm/boot/dts/mt7623.dtsi
118 index 0640fb75bf59..3a442a16ea06 100644
119 --- a/arch/arm/boot/dts/mt7623.dtsi
120 +++ b/arch/arm/boot/dts/mt7623.dtsi
121 @@ -758,6 +758,7 @@
122 "syscon";
123 reg = <0 0x1b000000 0 0x1000>;
124 #clock-cells = <1>;
125 + #reset-cells = <1>;
126 };
127
128 eth: ethernet@1b100000 {
129 diff --git a/arch/arm/boot/dts/mt7623n-bananapi-bpi-r2.dts b/arch/arm/boot/dts/mt7623n-bananapi-bpi-r2.dts
130 index 688a86378cee..7bf5aa2237c9 100644
131 --- a/arch/arm/boot/dts/mt7623n-bananapi-bpi-r2.dts
132 +++ b/arch/arm/boot/dts/mt7623n-bananapi-bpi-r2.dts
133 @@ -204,7 +204,7 @@
134 bus-width = <4>;
135 max-frequency = <50000000>;
136 cap-sd-highspeed;
137 - cd-gpios = <&pio 261 0>;
138 + cd-gpios = <&pio 261 GPIO_ACTIVE_LOW>;
139 vmmc-supply = <&mt6323_vmch_reg>;
140 vqmmc-supply = <&mt6323_vio18_reg>;
141 };
142 diff --git a/arch/arm/boot/dts/s5pv210.dtsi b/arch/arm/boot/dts/s5pv210.dtsi
143 index 726c5d0dbd5b..b290a5abb901 100644
144 --- a/arch/arm/boot/dts/s5pv210.dtsi
145 +++ b/arch/arm/boot/dts/s5pv210.dtsi
146 @@ -463,6 +463,7 @@
147 compatible = "samsung,exynos4210-ohci";
148 reg = <0xec300000 0x100>;
149 interrupts = <23>;
150 + interrupt-parent = <&vic1>;
151 clocks = <&clocks CLK_USB_HOST>;
152 clock-names = "usbhost";
153 #address-cells = <1>;
154 diff --git a/arch/arm/boot/dts/spear1310-evb.dts b/arch/arm/boot/dts/spear1310-evb.dts
155 index 84101e4eebbf..0f5f379323a8 100644
156 --- a/arch/arm/boot/dts/spear1310-evb.dts
157 +++ b/arch/arm/boot/dts/spear1310-evb.dts
158 @@ -349,7 +349,7 @@
159 spi0: spi@e0100000 {
160 status = "okay";
161 num-cs = <3>;
162 - cs-gpios = <&gpio1 7 0>, <&spics 0>, <&spics 1>;
163 + cs-gpios = <&gpio1 7 0>, <&spics 0 0>, <&spics 1 0>;
164
165 stmpe610@0 {
166 compatible = "st,stmpe610";
167 diff --git a/arch/arm/boot/dts/spear1340.dtsi b/arch/arm/boot/dts/spear1340.dtsi
168 index 5f347054527d..d4dbc4098653 100644
169 --- a/arch/arm/boot/dts/spear1340.dtsi
170 +++ b/arch/arm/boot/dts/spear1340.dtsi
171 @@ -142,8 +142,8 @@
172 reg = <0xb4100000 0x1000>;
173 interrupts = <0 105 0x4>;
174 status = "disabled";
175 - dmas = <&dwdma0 0x600 0 0 1>, /* 0xC << 11 */
176 - <&dwdma0 0x680 0 1 0>; /* 0xD << 7 */
177 + dmas = <&dwdma0 12 0 1>,
178 + <&dwdma0 13 1 0>;
179 dma-names = "tx", "rx";
180 };
181
182 diff --git a/arch/arm/boot/dts/spear13xx.dtsi b/arch/arm/boot/dts/spear13xx.dtsi
183 index 17ea0abcdbd7..086b4b333249 100644
184 --- a/arch/arm/boot/dts/spear13xx.dtsi
185 +++ b/arch/arm/boot/dts/spear13xx.dtsi
186 @@ -100,7 +100,7 @@
187 reg = <0xb2800000 0x1000>;
188 interrupts = <0 29 0x4>;
189 status = "disabled";
190 - dmas = <&dwdma0 0 0 0 0>;
191 + dmas = <&dwdma0 0 0 0>;
192 dma-names = "data";
193 };
194
195 @@ -290,8 +290,8 @@
196 #size-cells = <0>;
197 interrupts = <0 31 0x4>;
198 status = "disabled";
199 - dmas = <&dwdma0 0x2000 0 0 0>, /* 0x4 << 11 */
200 - <&dwdma0 0x0280 0 0 0>; /* 0x5 << 7 */
201 + dmas = <&dwdma0 4 0 0>,
202 + <&dwdma0 5 0 0>;
203 dma-names = "tx", "rx";
204 };
205
206 diff --git a/arch/arm/boot/dts/spear600.dtsi b/arch/arm/boot/dts/spear600.dtsi
207 index 6b32d20acc9f..00166eb9be86 100644
208 --- a/arch/arm/boot/dts/spear600.dtsi
209 +++ b/arch/arm/boot/dts/spear600.dtsi
210 @@ -194,6 +194,7 @@
211 rtc: rtc@fc900000 {
212 compatible = "st,spear600-rtc";
213 reg = <0xfc900000 0x1000>;
214 + interrupt-parent = <&vic0>;
215 interrupts = <10>;
216 status = "disabled";
217 };
218 diff --git a/arch/arm/boot/dts/ste-nomadik-stn8815.dtsi b/arch/arm/boot/dts/ste-nomadik-stn8815.dtsi
219 index 68aab50a73ab..733678b75b88 100644
220 --- a/arch/arm/boot/dts/ste-nomadik-stn8815.dtsi
221 +++ b/arch/arm/boot/dts/ste-nomadik-stn8815.dtsi
222 @@ -750,6 +750,7 @@
223 reg = <0x10120000 0x1000>;
224 interrupt-names = "combined";
225 interrupts = <14>;
226 + interrupt-parent = <&vica>;
227 clocks = <&clcdclk>, <&hclkclcd>;
228 clock-names = "clcdclk", "apb_pclk";
229 status = "disabled";
230 diff --git a/arch/arm/boot/dts/stih407.dtsi b/arch/arm/boot/dts/stih407.dtsi
231 index fa149837df14..11fdecd9312e 100644
232 --- a/arch/arm/boot/dts/stih407.dtsi
233 +++ b/arch/arm/boot/dts/stih407.dtsi
234 @@ -8,6 +8,7 @@
235 */
236 #include "stih407-clock.dtsi"
237 #include "stih407-family.dtsi"
238 +#include <dt-bindings/gpio/gpio.h>
239 / {
240 soc {
241 sti-display-subsystem {
242 @@ -122,7 +123,7 @@
243 <&clk_s_d2_quadfs 0>,
244 <&clk_s_d2_quadfs 1>;
245
246 - hdmi,hpd-gpio = <&pio5 3>;
247 + hdmi,hpd-gpio = <&pio5 3 GPIO_ACTIVE_LOW>;
248 reset-names = "hdmi";
249 resets = <&softreset STIH407_HDMI_TX_PHY_SOFTRESET>;
250 ddc = <&hdmiddc>;
251 diff --git a/arch/arm/boot/dts/stih410.dtsi b/arch/arm/boot/dts/stih410.dtsi
252 index cffa50db5d72..68b5ff91d6a7 100644
253 --- a/arch/arm/boot/dts/stih410.dtsi
254 +++ b/arch/arm/boot/dts/stih410.dtsi
255 @@ -9,6 +9,7 @@
256 #include "stih410-clock.dtsi"
257 #include "stih407-family.dtsi"
258 #include "stih410-pinctrl.dtsi"
259 +#include <dt-bindings/gpio/gpio.h>
260 / {
261 aliases {
262 bdisp0 = &bdisp0;
263 @@ -213,7 +214,7 @@
264 <&clk_s_d2_quadfs 0>,
265 <&clk_s_d2_quadfs 1>;
266
267 - hdmi,hpd-gpio = <&pio5 3>;
268 + hdmi,hpd-gpio = <&pio5 3 GPIO_ACTIVE_LOW>;
269 reset-names = "hdmi";
270 resets = <&softreset STIH407_HDMI_TX_PHY_SOFTRESET>;
271 ddc = <&hdmiddc>;
272 diff --git a/arch/arm/mach-pxa/tosa-bt.c b/arch/arm/mach-pxa/tosa-bt.c
273 index 107f37210fb9..83606087edc7 100644
274 --- a/arch/arm/mach-pxa/tosa-bt.c
275 +++ b/arch/arm/mach-pxa/tosa-bt.c
276 @@ -132,3 +132,7 @@ static struct platform_driver tosa_bt_driver = {
277 },
278 };
279 module_platform_driver(tosa_bt_driver);
280 +
281 +MODULE_LICENSE("GPL");
282 +MODULE_AUTHOR("Dmitry Baryshkov");
283 +MODULE_DESCRIPTION("Bluetooth built-in chip control");
284 diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi
285 index 6b2127a6ced1..b84c0ca4f84a 100644
286 --- a/arch/arm64/boot/dts/qcom/msm8916.dtsi
287 +++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi
288 @@ -906,6 +906,7 @@
289 "dsi_phy_regulator";
290
291 #clock-cells = <1>;
292 + #phy-cells = <0>;
293
294 clocks = <&gcc GCC_MDSS_AHB_CLK>;
295 clock-names = "iface_clk";
296 @@ -1435,8 +1436,8 @@
297 #address-cells = <1>;
298 #size-cells = <0>;
299
300 - qcom,ipc-1 = <&apcs 0 13>;
301 - qcom,ipc-6 = <&apcs 0 19>;
302 + qcom,ipc-1 = <&apcs 8 13>;
303 + qcom,ipc-3 = <&apcs 8 19>;
304
305 apps_smsm: apps@0 {
306 reg = <0>;
307 diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c
308 index 07823595b7f0..52f15cd896e1 100644
309 --- a/arch/arm64/kernel/cpu_errata.c
310 +++ b/arch/arm64/kernel/cpu_errata.c
311 @@ -406,6 +406,15 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
312 .capability = ARM64_HARDEN_BP_POST_GUEST_EXIT,
313 MIDR_ALL_VERSIONS(MIDR_QCOM_FALKOR_V1),
314 },
315 + {
316 + .capability = ARM64_HARDEN_BRANCH_PREDICTOR,
317 + MIDR_ALL_VERSIONS(MIDR_QCOM_FALKOR),
318 + .enable = qcom_enable_link_stack_sanitization,
319 + },
320 + {
321 + .capability = ARM64_HARDEN_BP_POST_GUEST_EXIT,
322 + MIDR_ALL_VERSIONS(MIDR_QCOM_FALKOR),
323 + },
324 {
325 .capability = ARM64_HARDEN_BRANCH_PREDICTOR,
326 MIDR_ALL_VERSIONS(MIDR_BRCM_VULCAN),
327 diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
328 index 0b5ab4d8b57d..30b5495b82b5 100644
329 --- a/arch/arm64/kvm/hyp/switch.c
330 +++ b/arch/arm64/kvm/hyp/switch.c
331 @@ -400,8 +400,10 @@ int __hyp_text __kvm_vcpu_run(struct kvm_vcpu *vcpu)
332 u32 midr = read_cpuid_id();
333
334 /* Apply BTAC predictors mitigation to all Falkor chips */
335 - if ((midr & MIDR_CPU_MODEL_MASK) == MIDR_QCOM_FALKOR_V1)
336 + if (((midr & MIDR_CPU_MODEL_MASK) == MIDR_QCOM_FALKOR) ||
337 + ((midr & MIDR_CPU_MODEL_MASK) == MIDR_QCOM_FALKOR_V1)) {
338 __qcom_hyp_sanitize_btac_predictors();
339 + }
340 }
341
342 fp_enabled = __fpsimd_enabled();
343 diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S
344 index 08572f95bd8a..248f2e7b24ab 100644
345 --- a/arch/arm64/mm/proc.S
346 +++ b/arch/arm64/mm/proc.S
347 @@ -189,7 +189,8 @@ ENDPROC(idmap_cpu_replace_ttbr1)
348 dc cvac, cur_\()\type\()p // Ensure any existing dirty
349 dmb sy // lines are written back before
350 ldr \type, [cur_\()\type\()p] // loading the entry
351 - tbz \type, #0, next_\()\type // Skip invalid entries
352 + tbz \type, #0, skip_\()\type // Skip invalid and
353 + tbnz \type, #11, skip_\()\type // non-global entries
354 .endm
355
356 .macro __idmap_kpti_put_pgtable_ent_ng, type
357 @@ -249,8 +250,9 @@ ENTRY(idmap_kpti_install_ng_mappings)
358 add end_pgdp, cur_pgdp, #(PTRS_PER_PGD * 8)
359 do_pgd: __idmap_kpti_get_pgtable_ent pgd
360 tbnz pgd, #1, walk_puds
361 - __idmap_kpti_put_pgtable_ent_ng pgd
362 next_pgd:
363 + __idmap_kpti_put_pgtable_ent_ng pgd
364 +skip_pgd:
365 add cur_pgdp, cur_pgdp, #8
366 cmp cur_pgdp, end_pgdp
367 b.ne do_pgd
368 @@ -278,8 +280,9 @@ walk_puds:
369 add end_pudp, cur_pudp, #(PTRS_PER_PUD * 8)
370 do_pud: __idmap_kpti_get_pgtable_ent pud
371 tbnz pud, #1, walk_pmds
372 - __idmap_kpti_put_pgtable_ent_ng pud
373 next_pud:
374 + __idmap_kpti_put_pgtable_ent_ng pud
375 +skip_pud:
376 add cur_pudp, cur_pudp, 8
377 cmp cur_pudp, end_pudp
378 b.ne do_pud
379 @@ -298,8 +301,9 @@ walk_pmds:
380 add end_pmdp, cur_pmdp, #(PTRS_PER_PMD * 8)
381 do_pmd: __idmap_kpti_get_pgtable_ent pmd
382 tbnz pmd, #1, walk_ptes
383 - __idmap_kpti_put_pgtable_ent_ng pmd
384 next_pmd:
385 + __idmap_kpti_put_pgtable_ent_ng pmd
386 +skip_pmd:
387 add cur_pmdp, cur_pmdp, #8
388 cmp cur_pmdp, end_pmdp
389 b.ne do_pmd
390 @@ -317,7 +321,7 @@ walk_ptes:
391 add end_ptep, cur_ptep, #(PTRS_PER_PTE * 8)
392 do_pte: __idmap_kpti_get_pgtable_ent pte
393 __idmap_kpti_put_pgtable_ent_ng pte
394 -next_pte:
395 +skip_pte:
396 add cur_ptep, cur_ptep, #8
397 cmp cur_ptep, end_ptep
398 b.ne do_pte
399 diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
400 index 8e0b3702f1c0..efaa3b130f4d 100644
401 --- a/arch/mips/Kconfig
402 +++ b/arch/mips/Kconfig
403 @@ -119,12 +119,12 @@ config MIPS_GENERIC
404 select SYS_SUPPORTS_MULTITHREADING
405 select SYS_SUPPORTS_RELOCATABLE
406 select SYS_SUPPORTS_SMARTMIPS
407 - select USB_EHCI_BIG_ENDIAN_DESC if BIG_ENDIAN
408 - select USB_EHCI_BIG_ENDIAN_MMIO if BIG_ENDIAN
409 - select USB_OHCI_BIG_ENDIAN_DESC if BIG_ENDIAN
410 - select USB_OHCI_BIG_ENDIAN_MMIO if BIG_ENDIAN
411 - select USB_UHCI_BIG_ENDIAN_DESC if BIG_ENDIAN
412 - select USB_UHCI_BIG_ENDIAN_MMIO if BIG_ENDIAN
413 + select USB_EHCI_BIG_ENDIAN_DESC if CPU_BIG_ENDIAN
414 + select USB_EHCI_BIG_ENDIAN_MMIO if CPU_BIG_ENDIAN
415 + select USB_OHCI_BIG_ENDIAN_DESC if CPU_BIG_ENDIAN
416 + select USB_OHCI_BIG_ENDIAN_MMIO if CPU_BIG_ENDIAN
417 + select USB_UHCI_BIG_ENDIAN_DESC if CPU_BIG_ENDIAN
418 + select USB_UHCI_BIG_ENDIAN_MMIO if CPU_BIG_ENDIAN
419 select USE_OF
420 help
421 Select this to build a kernel which aims to support multiple boards,
422 diff --git a/arch/mips/kernel/cps-vec.S b/arch/mips/kernel/cps-vec.S
423 index e68e6e04063a..1025f937ab0e 100644
424 --- a/arch/mips/kernel/cps-vec.S
425 +++ b/arch/mips/kernel/cps-vec.S
426 @@ -388,15 +388,16 @@ LEAF(mips_cps_boot_vpes)
427
428 #elif defined(CONFIG_MIPS_MT)
429
430 - .set push
431 - .set MIPS_ISA_LEVEL_RAW
432 - .set mt
433 -
434 /* If the core doesn't support MT then return */
435 has_mt t0, 5f
436
437 /* Enter VPE configuration state */
438 + .set push
439 + .set MIPS_ISA_LEVEL_RAW
440 + .set mt
441 dvpe
442 + .set pop
443 +
444 PTR_LA t1, 1f
445 jr.hb t1
446 nop
447 @@ -422,6 +423,10 @@ LEAF(mips_cps_boot_vpes)
448 mtc0 t0, CP0_VPECONTROL
449 ehb
450
451 + .set push
452 + .set MIPS_ISA_LEVEL_RAW
453 + .set mt
454 +
455 /* Skip the VPE if its TC is not halted */
456 mftc0 t0, CP0_TCHALT
457 beqz t0, 2f
458 @@ -495,6 +500,8 @@ LEAF(mips_cps_boot_vpes)
459 ehb
460 evpe
461
462 + .set pop
463 +
464 /* Check whether this VPE is meant to be running */
465 li t0, 1
466 sll t0, t0, a1
467 @@ -509,7 +516,7 @@ LEAF(mips_cps_boot_vpes)
468 1: jr.hb t0
469 nop
470
471 -2: .set pop
472 +2:
473
474 #endif /* CONFIG_MIPS_MT_SMP */
475
476 diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
477 index 702c678de116..e4a1581ce822 100644
478 --- a/arch/mips/kernel/setup.c
479 +++ b/arch/mips/kernel/setup.c
480 @@ -375,6 +375,7 @@ static void __init bootmem_init(void)
481 unsigned long reserved_end;
482 unsigned long mapstart = ~0UL;
483 unsigned long bootmap_size;
484 + phys_addr_t ramstart = (phys_addr_t)ULLONG_MAX;
485 bool bootmap_valid = false;
486 int i;
487
488 @@ -395,7 +396,8 @@ static void __init bootmem_init(void)
489 max_low_pfn = 0;
490
491 /*
492 - * Find the highest page frame number we have available.
493 + * Find the highest page frame number we have available
494 + * and the lowest used RAM address
495 */
496 for (i = 0; i < boot_mem_map.nr_map; i++) {
497 unsigned long start, end;
498 @@ -407,6 +409,8 @@ static void __init bootmem_init(void)
499 end = PFN_DOWN(boot_mem_map.map[i].addr
500 + boot_mem_map.map[i].size);
501
502 + ramstart = min(ramstart, boot_mem_map.map[i].addr);
503 +
504 #ifndef CONFIG_HIGHMEM
505 /*
506 * Skip highmem here so we get an accurate max_low_pfn if low
507 @@ -436,6 +440,13 @@ static void __init bootmem_init(void)
508 mapstart = max(reserved_end, start);
509 }
510
511 + /*
512 + * Reserve any memory between the start of RAM and PHYS_OFFSET
513 + */
514 + if (ramstart > PHYS_OFFSET)
515 + add_memory_region(PHYS_OFFSET, ramstart - PHYS_OFFSET,
516 + BOOT_MEM_RESERVED);
517 +
518 if (min_low_pfn >= max_low_pfn)
519 panic("Incorrect memory mapping !!!");
520 if (min_low_pfn > ARCH_PFN_OFFSET) {
521 @@ -664,9 +675,6 @@ static int __init early_parse_mem(char *p)
522
523 add_memory_region(start, size, BOOT_MEM_RAM);
524
525 - if (start && start > PHYS_OFFSET)
526 - add_memory_region(PHYS_OFFSET, start - PHYS_OFFSET,
527 - BOOT_MEM_RESERVED);
528 return 0;
529 }
530 early_param("mem", early_parse_mem);
531 diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h
532 index 88187c285c70..1c02e6900f78 100644
533 --- a/arch/powerpc/include/asm/topology.h
534 +++ b/arch/powerpc/include/asm/topology.h
535 @@ -44,6 +44,11 @@ extern int sysfs_add_device_to_node(struct device *dev, int nid);
536 extern void sysfs_remove_device_from_node(struct device *dev, int nid);
537 extern int numa_update_cpu_topology(bool cpus_locked);
538
539 +static inline void update_numa_cpu_lookup_table(unsigned int cpu, int node)
540 +{
541 + numa_cpu_lookup_table[cpu] = node;
542 +}
543 +
544 static inline int early_cpu_to_node(int cpu)
545 {
546 int nid;
547 diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
548 index 72be0c32e902..2010e4c827b7 100644
549 --- a/arch/powerpc/kernel/process.c
550 +++ b/arch/powerpc/kernel/process.c
551 @@ -1509,14 +1509,15 @@ static int assign_thread_tidr(void)
552 {
553 int index;
554 int err;
555 + unsigned long flags;
556
557 again:
558 if (!ida_pre_get(&vas_thread_ida, GFP_KERNEL))
559 return -ENOMEM;
560
561 - spin_lock(&vas_thread_id_lock);
562 + spin_lock_irqsave(&vas_thread_id_lock, flags);
563 err = ida_get_new_above(&vas_thread_ida, 1, &index);
564 - spin_unlock(&vas_thread_id_lock);
565 + spin_unlock_irqrestore(&vas_thread_id_lock, flags);
566
567 if (err == -EAGAIN)
568 goto again;
569 @@ -1524,9 +1525,9 @@ static int assign_thread_tidr(void)
570 return err;
571
572 if (index > MAX_THREAD_CONTEXT) {
573 - spin_lock(&vas_thread_id_lock);
574 + spin_lock_irqsave(&vas_thread_id_lock, flags);
575 ida_remove(&vas_thread_ida, index);
576 - spin_unlock(&vas_thread_id_lock);
577 + spin_unlock_irqrestore(&vas_thread_id_lock, flags);
578 return -ENOMEM;
579 }
580
581 @@ -1535,9 +1536,11 @@ static int assign_thread_tidr(void)
582
583 static void free_thread_tidr(int id)
584 {
585 - spin_lock(&vas_thread_id_lock);
586 + unsigned long flags;
587 +
588 + spin_lock_irqsave(&vas_thread_id_lock, flags);
589 ida_remove(&vas_thread_ida, id);
590 - spin_unlock(&vas_thread_id_lock);
591 + spin_unlock_irqrestore(&vas_thread_id_lock, flags);
592 }
593
594 /*
595 diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
596 index adb6364f4091..09be66fcea68 100644
597 --- a/arch/powerpc/mm/numa.c
598 +++ b/arch/powerpc/mm/numa.c
599 @@ -142,11 +142,6 @@ static void reset_numa_cpu_lookup_table(void)
600 numa_cpu_lookup_table[cpu] = -1;
601 }
602
603 -static void update_numa_cpu_lookup_table(unsigned int cpu, int node)
604 -{
605 - numa_cpu_lookup_table[cpu] = node;
606 -}
607 -
608 static void map_cpu_to_node(int cpu, int node)
609 {
610 update_numa_cpu_lookup_table(cpu, node);
611 diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c
612 index cfbbee941a76..17ae5c15a9e0 100644
613 --- a/arch/powerpc/mm/pgtable-radix.c
614 +++ b/arch/powerpc/mm/pgtable-radix.c
615 @@ -17,6 +17,7 @@
616 #include <linux/of_fdt.h>
617 #include <linux/mm.h>
618 #include <linux/string_helpers.h>
619 +#include <linux/stop_machine.h>
620
621 #include <asm/pgtable.h>
622 #include <asm/pgalloc.h>
623 @@ -671,6 +672,30 @@ static void free_pmd_table(pmd_t *pmd_start, pud_t *pud)
624 pud_clear(pud);
625 }
626
627 +struct change_mapping_params {
628 + pte_t *pte;
629 + unsigned long start;
630 + unsigned long end;
631 + unsigned long aligned_start;
632 + unsigned long aligned_end;
633 +};
634 +
635 +static int stop_machine_change_mapping(void *data)
636 +{
637 + struct change_mapping_params *params =
638 + (struct change_mapping_params *)data;
639 +
640 + if (!data)
641 + return -1;
642 +
643 + spin_unlock(&init_mm.page_table_lock);
644 + pte_clear(&init_mm, params->aligned_start, params->pte);
645 + create_physical_mapping(params->aligned_start, params->start);
646 + create_physical_mapping(params->end, params->aligned_end);
647 + spin_lock(&init_mm.page_table_lock);
648 + return 0;
649 +}
650 +
651 static void remove_pte_table(pte_t *pte_start, unsigned long addr,
652 unsigned long end)
653 {
654 @@ -699,6 +724,52 @@ static void remove_pte_table(pte_t *pte_start, unsigned long addr,
655 }
656 }
657
658 +/*
659 + * clear the pte and potentially split the mapping helper
660 + */
661 +static void split_kernel_mapping(unsigned long addr, unsigned long end,
662 + unsigned long size, pte_t *pte)
663 +{
664 + unsigned long mask = ~(size - 1);
665 + unsigned long aligned_start = addr & mask;
666 + unsigned long aligned_end = addr + size;
667 + struct change_mapping_params params;
668 + bool split_region = false;
669 +
670 + if ((end - addr) < size) {
671 + /*
672 + * We're going to clear the PTE, but not flushed
673 + * the mapping, time to remap and flush. The
674 + * effects if visible outside the processor or
675 + * if we are running in code close to the
676 + * mapping we cleared, we are in trouble.
677 + */
678 + if (overlaps_kernel_text(aligned_start, addr) ||
679 + overlaps_kernel_text(end, aligned_end)) {
680 + /*
681 + * Hack, just return, don't pte_clear
682 + */
683 + WARN_ONCE(1, "Linear mapping %lx->%lx overlaps kernel "
684 + "text, not splitting\n", addr, end);
685 + return;
686 + }
687 + split_region = true;
688 + }
689 +
690 + if (split_region) {
691 + params.pte = pte;
692 + params.start = addr;
693 + params.end = end;
694 + params.aligned_start = addr & ~(size - 1);
695 + params.aligned_end = min_t(unsigned long, aligned_end,
696 + (unsigned long)__va(memblock_end_of_DRAM()));
697 + stop_machine(stop_machine_change_mapping, &params, NULL);
698 + return;
699 + }
700 +
701 + pte_clear(&init_mm, addr, pte);
702 +}
703 +
704 static void remove_pmd_table(pmd_t *pmd_start, unsigned long addr,
705 unsigned long end)
706 {
707 @@ -714,13 +785,7 @@ static void remove_pmd_table(pmd_t *pmd_start, unsigned long addr,
708 continue;
709
710 if (pmd_huge(*pmd)) {
711 - if (!IS_ALIGNED(addr, PMD_SIZE) ||
712 - !IS_ALIGNED(next, PMD_SIZE)) {
713 - WARN_ONCE(1, "%s: unaligned range\n", __func__);
714 - continue;
715 - }
716 -
717 - pte_clear(&init_mm, addr, (pte_t *)pmd);
718 + split_kernel_mapping(addr, end, PMD_SIZE, (pte_t *)pmd);
719 continue;
720 }
721
722 @@ -745,13 +810,7 @@ static void remove_pud_table(pud_t *pud_start, unsigned long addr,
723 continue;
724
725 if (pud_huge(*pud)) {
726 - if (!IS_ALIGNED(addr, PUD_SIZE) ||
727 - !IS_ALIGNED(next, PUD_SIZE)) {
728 - WARN_ONCE(1, "%s: unaligned range\n", __func__);
729 - continue;
730 - }
731 -
732 - pte_clear(&init_mm, addr, (pte_t *)pud);
733 + split_kernel_mapping(addr, end, PUD_SIZE, (pte_t *)pud);
734 continue;
735 }
736
737 @@ -777,13 +836,7 @@ static void remove_pagetable(unsigned long start, unsigned long end)
738 continue;
739
740 if (pgd_huge(*pgd)) {
741 - if (!IS_ALIGNED(addr, PGDIR_SIZE) ||
742 - !IS_ALIGNED(next, PGDIR_SIZE)) {
743 - WARN_ONCE(1, "%s: unaligned range\n", __func__);
744 - continue;
745 - }
746 -
747 - pte_clear(&init_mm, addr, (pte_t *)pgd);
748 + split_kernel_mapping(addr, end, PGDIR_SIZE, (pte_t *)pgd);
749 continue;
750 }
751
752 diff --git a/arch/powerpc/mm/pgtable_64.c b/arch/powerpc/mm/pgtable_64.c
753 index 813ea22c3e00..eec1367c2f32 100644
754 --- a/arch/powerpc/mm/pgtable_64.c
755 +++ b/arch/powerpc/mm/pgtable_64.c
756 @@ -483,6 +483,8 @@ void mmu_partition_table_set_entry(unsigned int lpid, unsigned long dw0,
757 if (old & PATB_HR) {
758 asm volatile(PPC_TLBIE_5(%0,%1,2,0,1) : :
759 "r" (TLBIEL_INVAL_SET_LPID), "r" (lpid));
760 + asm volatile(PPC_TLBIE_5(%0,%1,2,1,1) : :
761 + "r" (TLBIEL_INVAL_SET_LPID), "r" (lpid));
762 trace_tlbie(lpid, 0, TLBIEL_INVAL_SET_LPID, lpid, 2, 0, 1);
763 } else {
764 asm volatile(PPC_TLBIE_5(%0,%1,2,0,0) : :
765 diff --git a/arch/powerpc/mm/tlb-radix.c b/arch/powerpc/mm/tlb-radix.c
766 index 884f4b705b57..913a2b81b177 100644
767 --- a/arch/powerpc/mm/tlb-radix.c
768 +++ b/arch/powerpc/mm/tlb-radix.c
769 @@ -600,14 +600,12 @@ void radix__flush_tlb_all(void)
770 */
771 asm volatile(PPC_TLBIE_5(%0, %4, %3, %2, %1)
772 : : "r"(rb), "i"(r), "i"(1), "i"(ric), "r"(rs) : "memory");
773 - trace_tlbie(0, 0, rb, rs, ric, prs, r);
774 /*
775 * now flush host entires by passing PRS = 0 and LPID == 0
776 */
777 asm volatile(PPC_TLBIE_5(%0, %4, %3, %2, %1)
778 : : "r"(rb), "i"(r), "i"(prs), "i"(ric), "r"(0) : "memory");
779 asm volatile("eieio; tlbsync; ptesync": : :"memory");
780 - trace_tlbie(0, 0, rb, 0, ric, prs, r);
781 }
782
783 void radix__flush_tlb_pte_p9_dd1(unsigned long old_pte, struct mm_struct *mm,
784 diff --git a/arch/powerpc/platforms/powernv/vas-window.c b/arch/powerpc/platforms/powernv/vas-window.c
785 index 2b3eb01ab110..b7c53a51c31b 100644
786 --- a/arch/powerpc/platforms/powernv/vas-window.c
787 +++ b/arch/powerpc/platforms/powernv/vas-window.c
788 @@ -1063,16 +1063,16 @@ struct vas_window *vas_tx_win_open(int vasid, enum vas_cop_type cop,
789 rc = PTR_ERR(txwin->paste_kaddr);
790 goto free_window;
791 }
792 + } else {
793 + /*
794 + * A user mapping must ensure that context switch issues
795 + * CP_ABORT for this thread.
796 + */
797 + rc = set_thread_uses_vas();
798 + if (rc)
799 + goto free_window;
800 }
801
802 - /*
803 - * Now that we have a send window, ensure context switch issues
804 - * CP_ABORT for this thread.
805 - */
806 - rc = -EINVAL;
807 - if (set_thread_uses_vas() < 0)
808 - goto free_window;
809 -
810 set_vinst_win(vinst, txwin);
811
812 return txwin;
813 diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c
814 index a7d14aa7bb7c..09083ad82f7a 100644
815 --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c
816 +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c
817 @@ -36,6 +36,7 @@
818 #include <asm/xics.h>
819 #include <asm/xive.h>
820 #include <asm/plpar_wrappers.h>
821 +#include <asm/topology.h>
822
823 #include "pseries.h"
824 #include "offline_states.h"
825 @@ -331,6 +332,7 @@ static void pseries_remove_processor(struct device_node *np)
826 BUG_ON(cpu_online(cpu));
827 set_cpu_present(cpu, false);
828 set_hard_smp_processor_id(cpu, -1);
829 + update_numa_cpu_lookup_table(cpu, -1);
830 break;
831 }
832 if (cpu >= nr_cpu_ids)
833 diff --git a/arch/powerpc/sysdev/xive/spapr.c b/arch/powerpc/sysdev/xive/spapr.c
834 index d9c4c9366049..091f1d0d0af1 100644
835 --- a/arch/powerpc/sysdev/xive/spapr.c
836 +++ b/arch/powerpc/sysdev/xive/spapr.c
837 @@ -356,7 +356,8 @@ static int xive_spapr_configure_queue(u32 target, struct xive_q *q, u8 prio,
838
839 rc = plpar_int_get_queue_info(0, target, prio, &esn_page, &esn_size);
840 if (rc) {
841 - pr_err("Error %lld getting queue info prio %d\n", rc, prio);
842 + pr_err("Error %lld getting queue info CPU %d prio %d\n", rc,
843 + target, prio);
844 rc = -EIO;
845 goto fail;
846 }
847 @@ -370,7 +371,8 @@ static int xive_spapr_configure_queue(u32 target, struct xive_q *q, u8 prio,
848 /* Configure and enable the queue in HW */
849 rc = plpar_int_set_queue_config(flags, target, prio, qpage_phys, order);
850 if (rc) {
851 - pr_err("Error %lld setting queue for prio %d\n", rc, prio);
852 + pr_err("Error %lld setting queue for CPU %d prio %d\n", rc,
853 + target, prio);
854 rc = -EIO;
855 } else {
856 q->qpage = qpage;
857 @@ -389,8 +391,8 @@ static int xive_spapr_setup_queue(unsigned int cpu, struct xive_cpu *xc,
858 if (IS_ERR(qpage))
859 return PTR_ERR(qpage);
860
861 - return xive_spapr_configure_queue(cpu, q, prio, qpage,
862 - xive_queue_shift);
863 + return xive_spapr_configure_queue(get_hard_smp_processor_id(cpu),
864 + q, prio, qpage, xive_queue_shift);
865 }
866
867 static void xive_spapr_cleanup_queue(unsigned int cpu, struct xive_cpu *xc,
868 @@ -399,10 +401,12 @@ static void xive_spapr_cleanup_queue(unsigned int cpu, struct xive_cpu *xc,
869 struct xive_q *q = &xc->queue[prio];
870 unsigned int alloc_order;
871 long rc;
872 + int hw_cpu = get_hard_smp_processor_id(cpu);
873
874 - rc = plpar_int_set_queue_config(0, cpu, prio, 0, 0);
875 + rc = plpar_int_set_queue_config(0, hw_cpu, prio, 0, 0);
876 if (rc)
877 - pr_err("Error %ld setting queue for prio %d\n", rc, prio);
878 + pr_err("Error %ld setting queue for CPU %d prio %d\n", rc,
879 + hw_cpu, prio);
880
881 alloc_order = xive_alloc_order(xive_queue_shift);
882 free_pages((unsigned long)q->qpage, alloc_order);
883 diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
884 index 59eea9c65d3e..79b7a3438d54 100644
885 --- a/arch/s390/kernel/compat_linux.c
886 +++ b/arch/s390/kernel/compat_linux.c
887 @@ -110,7 +110,7 @@ COMPAT_SYSCALL_DEFINE2(s390_setregid16, u16, rgid, u16, egid)
888
889 COMPAT_SYSCALL_DEFINE1(s390_setgid16, u16, gid)
890 {
891 - return sys_setgid((gid_t)gid);
892 + return sys_setgid(low2highgid(gid));
893 }
894
895 COMPAT_SYSCALL_DEFINE2(s390_setreuid16, u16, ruid, u16, euid)
896 @@ -120,7 +120,7 @@ COMPAT_SYSCALL_DEFINE2(s390_setreuid16, u16, ruid, u16, euid)
897
898 COMPAT_SYSCALL_DEFINE1(s390_setuid16, u16, uid)
899 {
900 - return sys_setuid((uid_t)uid);
901 + return sys_setuid(low2highuid(uid));
902 }
903
904 COMPAT_SYSCALL_DEFINE3(s390_setresuid16, u16, ruid, u16, euid, u16, suid)
905 @@ -173,12 +173,12 @@ COMPAT_SYSCALL_DEFINE3(s390_getresgid16, u16 __user *, rgidp,
906
907 COMPAT_SYSCALL_DEFINE1(s390_setfsuid16, u16, uid)
908 {
909 - return sys_setfsuid((uid_t)uid);
910 + return sys_setfsuid(low2highuid(uid));
911 }
912
913 COMPAT_SYSCALL_DEFINE1(s390_setfsgid16, u16, gid)
914 {
915 - return sys_setfsgid((gid_t)gid);
916 + return sys_setfsgid(low2highgid(gid));
917 }
918
919 static int groups16_to_user(u16 __user *grouplist, struct group_info *group_info)
920 diff --git a/arch/x86/entry/calling.h b/arch/x86/entry/calling.h
921 index 3f48f695d5e6..dce7092ab24a 100644
922 --- a/arch/x86/entry/calling.h
923 +++ b/arch/x86/entry/calling.h
924 @@ -97,80 +97,69 @@ For 32-bit we have the following conventions - kernel is built with
925
926 #define SIZEOF_PTREGS 21*8
927
928 - .macro ALLOC_PT_GPREGS_ON_STACK
929 - addq $-(15*8), %rsp
930 - .endm
931 +.macro PUSH_AND_CLEAR_REGS rdx=%rdx rax=%rax
932 + /*
933 + * Push registers and sanitize registers of values that a
934 + * speculation attack might otherwise want to exploit. The
935 + * lower registers are likely clobbered well before they
936 + * could be put to use in a speculative execution gadget.
937 + * Interleave XOR with PUSH for better uop scheduling:
938 + */
939 + pushq %rdi /* pt_regs->di */
940 + pushq %rsi /* pt_regs->si */
941 + pushq \rdx /* pt_regs->dx */
942 + pushq %rcx /* pt_regs->cx */
943 + pushq \rax /* pt_regs->ax */
944 + pushq %r8 /* pt_regs->r8 */
945 + xorq %r8, %r8 /* nospec r8 */
946 + pushq %r9 /* pt_regs->r9 */
947 + xorq %r9, %r9 /* nospec r9 */
948 + pushq %r10 /* pt_regs->r10 */
949 + xorq %r10, %r10 /* nospec r10 */
950 + pushq %r11 /* pt_regs->r11 */
951 + xorq %r11, %r11 /* nospec r11*/
952 + pushq %rbx /* pt_regs->rbx */
953 + xorl %ebx, %ebx /* nospec rbx*/
954 + pushq %rbp /* pt_regs->rbp */
955 + xorl %ebp, %ebp /* nospec rbp*/
956 + pushq %r12 /* pt_regs->r12 */
957 + xorq %r12, %r12 /* nospec r12*/
958 + pushq %r13 /* pt_regs->r13 */
959 + xorq %r13, %r13 /* nospec r13*/
960 + pushq %r14 /* pt_regs->r14 */
961 + xorq %r14, %r14 /* nospec r14*/
962 + pushq %r15 /* pt_regs->r15 */
963 + xorq %r15, %r15 /* nospec r15*/
964 + UNWIND_HINT_REGS
965 +.endm
966
967 - .macro SAVE_C_REGS_HELPER offset=0 rax=1 rcx=1 r8910=1 r11=1
968 - .if \r11
969 - movq %r11, 6*8+\offset(%rsp)
970 - .endif
971 - .if \r8910
972 - movq %r10, 7*8+\offset(%rsp)
973 - movq %r9, 8*8+\offset(%rsp)
974 - movq %r8, 9*8+\offset(%rsp)
975 - .endif
976 - .if \rax
977 - movq %rax, 10*8+\offset(%rsp)
978 - .endif
979 - .if \rcx
980 - movq %rcx, 11*8+\offset(%rsp)
981 - .endif
982 - movq %rdx, 12*8+\offset(%rsp)
983 - movq %rsi, 13*8+\offset(%rsp)
984 - movq %rdi, 14*8+\offset(%rsp)
985 - UNWIND_HINT_REGS offset=\offset extra=0
986 - .endm
987 - .macro SAVE_C_REGS offset=0
988 - SAVE_C_REGS_HELPER \offset, 1, 1, 1, 1
989 - .endm
990 - .macro SAVE_C_REGS_EXCEPT_RAX_RCX offset=0
991 - SAVE_C_REGS_HELPER \offset, 0, 0, 1, 1
992 - .endm
993 - .macro SAVE_C_REGS_EXCEPT_R891011
994 - SAVE_C_REGS_HELPER 0, 1, 1, 0, 0
995 - .endm
996 - .macro SAVE_C_REGS_EXCEPT_RCX_R891011
997 - SAVE_C_REGS_HELPER 0, 1, 0, 0, 0
998 - .endm
999 - .macro SAVE_C_REGS_EXCEPT_RAX_RCX_R11
1000 - SAVE_C_REGS_HELPER 0, 0, 0, 1, 0
1001 - .endm
1002 -
1003 - .macro SAVE_EXTRA_REGS offset=0
1004 - movq %r15, 0*8+\offset(%rsp)
1005 - movq %r14, 1*8+\offset(%rsp)
1006 - movq %r13, 2*8+\offset(%rsp)
1007 - movq %r12, 3*8+\offset(%rsp)
1008 - movq %rbp, 4*8+\offset(%rsp)
1009 - movq %rbx, 5*8+\offset(%rsp)
1010 - UNWIND_HINT_REGS offset=\offset
1011 - .endm
1012 -
1013 - .macro POP_EXTRA_REGS
1014 +.macro POP_REGS pop_rdi=1 skip_r11rcx=0
1015 popq %r15
1016 popq %r14
1017 popq %r13
1018 popq %r12
1019 popq %rbp
1020 popq %rbx
1021 - .endm
1022 -
1023 - .macro POP_C_REGS
1024 + .if \skip_r11rcx
1025 + popq %rsi
1026 + .else
1027 popq %r11
1028 + .endif
1029 popq %r10
1030 popq %r9
1031 popq %r8
1032 popq %rax
1033 + .if \skip_r11rcx
1034 + popq %rsi
1035 + .else
1036 popq %rcx
1037 + .endif
1038 popq %rdx
1039 popq %rsi
1040 + .if \pop_rdi
1041 popq %rdi
1042 - .endm
1043 -
1044 - .macro icebp
1045 - .byte 0xf1
1046 - .endm
1047 + .endif
1048 +.endm
1049
1050 /*
1051 * This is a sneaky trick to help the unwinder find pt_regs on the stack. The
1052 @@ -178,7 +167,7 @@ For 32-bit we have the following conventions - kernel is built with
1053 * is just setting the LSB, which makes it an invalid stack address and is also
1054 * a signal to the unwinder that it's a pt_regs pointer in disguise.
1055 *
1056 - * NOTE: This macro must be used *after* SAVE_EXTRA_REGS because it corrupts
1057 + * NOTE: This macro must be used *after* PUSH_AND_CLEAR_REGS because it corrupts
1058 * the original rbp.
1059 */
1060 .macro ENCODE_FRAME_POINTER ptregs_offset=0
1061 diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
1062 index c752abe89d80..4fd9044e72e7 100644
1063 --- a/arch/x86/entry/entry_64.S
1064 +++ b/arch/x86/entry/entry_64.S
1065 @@ -213,7 +213,7 @@ ENTRY(entry_SYSCALL_64)
1066
1067 swapgs
1068 /*
1069 - * This path is not taken when PAGE_TABLE_ISOLATION is disabled so it
1070 + * This path is only taken when PAGE_TABLE_ISOLATION is disabled so it
1071 * is not required to switch CR3.
1072 */
1073 movq %rsp, PER_CPU_VAR(rsp_scratch)
1074 @@ -227,22 +227,8 @@ ENTRY(entry_SYSCALL_64)
1075 pushq %rcx /* pt_regs->ip */
1076 GLOBAL(entry_SYSCALL_64_after_hwframe)
1077 pushq %rax /* pt_regs->orig_ax */
1078 - pushq %rdi /* pt_regs->di */
1079 - pushq %rsi /* pt_regs->si */
1080 - pushq %rdx /* pt_regs->dx */
1081 - pushq %rcx /* pt_regs->cx */
1082 - pushq $-ENOSYS /* pt_regs->ax */
1083 - pushq %r8 /* pt_regs->r8 */
1084 - pushq %r9 /* pt_regs->r9 */
1085 - pushq %r10 /* pt_regs->r10 */
1086 - pushq %r11 /* pt_regs->r11 */
1087 - pushq %rbx /* pt_regs->rbx */
1088 - pushq %rbp /* pt_regs->rbp */
1089 - pushq %r12 /* pt_regs->r12 */
1090 - pushq %r13 /* pt_regs->r13 */
1091 - pushq %r14 /* pt_regs->r14 */
1092 - pushq %r15 /* pt_regs->r15 */
1093 - UNWIND_HINT_REGS
1094 +
1095 + PUSH_AND_CLEAR_REGS rax=$-ENOSYS
1096
1097 TRACE_IRQS_OFF
1098
1099 @@ -321,15 +307,7 @@ GLOBAL(entry_SYSCALL_64_after_hwframe)
1100 syscall_return_via_sysret:
1101 /* rcx and r11 are already restored (see code above) */
1102 UNWIND_HINT_EMPTY
1103 - POP_EXTRA_REGS
1104 - popq %rsi /* skip r11 */
1105 - popq %r10
1106 - popq %r9
1107 - popq %r8
1108 - popq %rax
1109 - popq %rsi /* skip rcx */
1110 - popq %rdx
1111 - popq %rsi
1112 + POP_REGS pop_rdi=0 skip_r11rcx=1
1113
1114 /*
1115 * Now all regs are restored except RSP and RDI.
1116 @@ -559,9 +537,7 @@ END(irq_entries_start)
1117 call switch_to_thread_stack
1118 1:
1119
1120 - ALLOC_PT_GPREGS_ON_STACK
1121 - SAVE_C_REGS
1122 - SAVE_EXTRA_REGS
1123 + PUSH_AND_CLEAR_REGS
1124 ENCODE_FRAME_POINTER
1125
1126 testb $3, CS(%rsp)
1127 @@ -622,15 +598,7 @@ GLOBAL(swapgs_restore_regs_and_return_to_usermode)
1128 ud2
1129 1:
1130 #endif
1131 - POP_EXTRA_REGS
1132 - popq %r11
1133 - popq %r10
1134 - popq %r9
1135 - popq %r8
1136 - popq %rax
1137 - popq %rcx
1138 - popq %rdx
1139 - popq %rsi
1140 + POP_REGS pop_rdi=0
1141
1142 /*
1143 * The stack is now user RDI, orig_ax, RIP, CS, EFLAGS, RSP, SS.
1144 @@ -688,8 +656,7 @@ GLOBAL(restore_regs_and_return_to_kernel)
1145 ud2
1146 1:
1147 #endif
1148 - POP_EXTRA_REGS
1149 - POP_C_REGS
1150 + POP_REGS
1151 addq $8, %rsp /* skip regs->orig_ax */
1152 INTERRUPT_RETURN
1153
1154 @@ -904,7 +871,9 @@ ENTRY(\sym)
1155 pushq $-1 /* ORIG_RAX: no syscall to restart */
1156 .endif
1157
1158 - ALLOC_PT_GPREGS_ON_STACK
1159 + /* Save all registers in pt_regs */
1160 + PUSH_AND_CLEAR_REGS
1161 + ENCODE_FRAME_POINTER
1162
1163 .if \paranoid < 2
1164 testb $3, CS(%rsp) /* If coming from userspace, switch stacks */
1165 @@ -1117,9 +1086,7 @@ ENTRY(xen_failsafe_callback)
1166 addq $0x30, %rsp
1167 UNWIND_HINT_IRET_REGS
1168 pushq $-1 /* orig_ax = -1 => not a system call */
1169 - ALLOC_PT_GPREGS_ON_STACK
1170 - SAVE_C_REGS
1171 - SAVE_EXTRA_REGS
1172 + PUSH_AND_CLEAR_REGS
1173 ENCODE_FRAME_POINTER
1174 jmp error_exit
1175 END(xen_failsafe_callback)
1176 @@ -1156,16 +1123,13 @@ idtentry machine_check do_mce has_error_code=0 paranoid=1
1177 #endif
1178
1179 /*
1180 - * Save all registers in pt_regs, and switch gs if needed.
1181 + * Switch gs if needed.
1182 * Use slow, but surefire "are we in kernel?" check.
1183 * Return: ebx=0: need swapgs on exit, ebx=1: otherwise
1184 */
1185 ENTRY(paranoid_entry)
1186 UNWIND_HINT_FUNC
1187 cld
1188 - SAVE_C_REGS 8
1189 - SAVE_EXTRA_REGS 8
1190 - ENCODE_FRAME_POINTER 8
1191 movl $1, %ebx
1192 movl $MSR_GS_BASE, %ecx
1193 rdmsr
1194 @@ -1204,21 +1168,18 @@ ENTRY(paranoid_exit)
1195 jmp .Lparanoid_exit_restore
1196 .Lparanoid_exit_no_swapgs:
1197 TRACE_IRQS_IRETQ_DEBUG
1198 + RESTORE_CR3 scratch_reg=%rbx save_reg=%r14
1199 .Lparanoid_exit_restore:
1200 jmp restore_regs_and_return_to_kernel
1201 END(paranoid_exit)
1202
1203 /*
1204 - * Save all registers in pt_regs, and switch gs if needed.
1205 + * Switch gs if needed.
1206 * Return: EBX=0: came from user mode; EBX=1: otherwise
1207 */
1208 ENTRY(error_entry)
1209 - UNWIND_HINT_FUNC
1210 + UNWIND_HINT_REGS offset=8
1211 cld
1212 - SAVE_C_REGS 8
1213 - SAVE_EXTRA_REGS 8
1214 - ENCODE_FRAME_POINTER 8
1215 - xorl %ebx, %ebx
1216 testb $3, CS+8(%rsp)
1217 jz .Lerror_kernelspace
1218
1219 @@ -1399,22 +1360,7 @@ ENTRY(nmi)
1220 pushq 1*8(%rdx) /* pt_regs->rip */
1221 UNWIND_HINT_IRET_REGS
1222 pushq $-1 /* pt_regs->orig_ax */
1223 - pushq %rdi /* pt_regs->di */
1224 - pushq %rsi /* pt_regs->si */
1225 - pushq (%rdx) /* pt_regs->dx */
1226 - pushq %rcx /* pt_regs->cx */
1227 - pushq %rax /* pt_regs->ax */
1228 - pushq %r8 /* pt_regs->r8 */
1229 - pushq %r9 /* pt_regs->r9 */
1230 - pushq %r10 /* pt_regs->r10 */
1231 - pushq %r11 /* pt_regs->r11 */
1232 - pushq %rbx /* pt_regs->rbx */
1233 - pushq %rbp /* pt_regs->rbp */
1234 - pushq %r12 /* pt_regs->r12 */
1235 - pushq %r13 /* pt_regs->r13 */
1236 - pushq %r14 /* pt_regs->r14 */
1237 - pushq %r15 /* pt_regs->r15 */
1238 - UNWIND_HINT_REGS
1239 + PUSH_AND_CLEAR_REGS rdx=(%rdx)
1240 ENCODE_FRAME_POINTER
1241
1242 /*
1243 @@ -1624,7 +1570,8 @@ end_repeat_nmi:
1244 * frame to point back to repeat_nmi.
1245 */
1246 pushq $-1 /* ORIG_RAX: no syscall to restart */
1247 - ALLOC_PT_GPREGS_ON_STACK
1248 + PUSH_AND_CLEAR_REGS
1249 + ENCODE_FRAME_POINTER
1250
1251 /*
1252 * Use paranoid_entry to handle SWAPGS, but no need to use paranoid_exit
1253 @@ -1648,8 +1595,7 @@ end_repeat_nmi:
1254 nmi_swapgs:
1255 SWAPGS_UNSAFE_STACK
1256 nmi_restore:
1257 - POP_EXTRA_REGS
1258 - POP_C_REGS
1259 + POP_REGS
1260
1261 /*
1262 * Skip orig_ax and the "outermost" frame to point RSP at the "iret"
1263 diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S
1264 index 98d5358e4041..fd65e016e413 100644
1265 --- a/arch/x86/entry/entry_64_compat.S
1266 +++ b/arch/x86/entry/entry_64_compat.S
1267 @@ -85,15 +85,25 @@ ENTRY(entry_SYSENTER_compat)
1268 pushq %rcx /* pt_regs->cx */
1269 pushq $-ENOSYS /* pt_regs->ax */
1270 pushq $0 /* pt_regs->r8 = 0 */
1271 + xorq %r8, %r8 /* nospec r8 */
1272 pushq $0 /* pt_regs->r9 = 0 */
1273 + xorq %r9, %r9 /* nospec r9 */
1274 pushq $0 /* pt_regs->r10 = 0 */
1275 + xorq %r10, %r10 /* nospec r10 */
1276 pushq $0 /* pt_regs->r11 = 0 */
1277 + xorq %r11, %r11 /* nospec r11 */
1278 pushq %rbx /* pt_regs->rbx */
1279 + xorl %ebx, %ebx /* nospec rbx */
1280 pushq %rbp /* pt_regs->rbp (will be overwritten) */
1281 + xorl %ebp, %ebp /* nospec rbp */
1282 pushq $0 /* pt_regs->r12 = 0 */
1283 + xorq %r12, %r12 /* nospec r12 */
1284 pushq $0 /* pt_regs->r13 = 0 */
1285 + xorq %r13, %r13 /* nospec r13 */
1286 pushq $0 /* pt_regs->r14 = 0 */
1287 + xorq %r14, %r14 /* nospec r14 */
1288 pushq $0 /* pt_regs->r15 = 0 */
1289 + xorq %r15, %r15 /* nospec r15 */
1290 cld
1291
1292 /*
1293 @@ -214,15 +224,25 @@ GLOBAL(entry_SYSCALL_compat_after_hwframe)
1294 pushq %rbp /* pt_regs->cx (stashed in bp) */
1295 pushq $-ENOSYS /* pt_regs->ax */
1296 pushq $0 /* pt_regs->r8 = 0 */
1297 + xorq %r8, %r8 /* nospec r8 */
1298 pushq $0 /* pt_regs->r9 = 0 */
1299 + xorq %r9, %r9 /* nospec r9 */
1300 pushq $0 /* pt_regs->r10 = 0 */
1301 + xorq %r10, %r10 /* nospec r10 */
1302 pushq $0 /* pt_regs->r11 = 0 */
1303 + xorq %r11, %r11 /* nospec r11 */
1304 pushq %rbx /* pt_regs->rbx */
1305 + xorl %ebx, %ebx /* nospec rbx */
1306 pushq %rbp /* pt_regs->rbp (will be overwritten) */
1307 + xorl %ebp, %ebp /* nospec rbp */
1308 pushq $0 /* pt_regs->r12 = 0 */
1309 + xorq %r12, %r12 /* nospec r12 */
1310 pushq $0 /* pt_regs->r13 = 0 */
1311 + xorq %r13, %r13 /* nospec r13 */
1312 pushq $0 /* pt_regs->r14 = 0 */
1313 + xorq %r14, %r14 /* nospec r14 */
1314 pushq $0 /* pt_regs->r15 = 0 */
1315 + xorq %r15, %r15 /* nospec r15 */
1316
1317 /*
1318 * User mode is traced as though IRQs are on, and SYSENTER
1319 @@ -338,15 +358,25 @@ ENTRY(entry_INT80_compat)
1320 pushq %rcx /* pt_regs->cx */
1321 pushq $-ENOSYS /* pt_regs->ax */
1322 pushq $0 /* pt_regs->r8 = 0 */
1323 + xorq %r8, %r8 /* nospec r8 */
1324 pushq $0 /* pt_regs->r9 = 0 */
1325 + xorq %r9, %r9 /* nospec r9 */
1326 pushq $0 /* pt_regs->r10 = 0 */
1327 + xorq %r10, %r10 /* nospec r10 */
1328 pushq $0 /* pt_regs->r11 = 0 */
1329 + xorq %r11, %r11 /* nospec r11 */
1330 pushq %rbx /* pt_regs->rbx */
1331 + xorl %ebx, %ebx /* nospec rbx */
1332 pushq %rbp /* pt_regs->rbp */
1333 + xorl %ebp, %ebp /* nospec rbp */
1334 pushq %r12 /* pt_regs->r12 */
1335 + xorq %r12, %r12 /* nospec r12 */
1336 pushq %r13 /* pt_regs->r13 */
1337 + xorq %r13, %r13 /* nospec r13 */
1338 pushq %r14 /* pt_regs->r14 */
1339 + xorq %r14, %r14 /* nospec r14 */
1340 pushq %r15 /* pt_regs->r15 */
1341 + xorq %r15, %r15 /* nospec r15 */
1342 cld
1343
1344 /*
1345 diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
1346 index 731153a4681e..56457cb73448 100644
1347 --- a/arch/x86/events/intel/core.c
1348 +++ b/arch/x86/events/intel/core.c
1349 @@ -3559,7 +3559,7 @@ static int intel_snb_pebs_broken(int cpu)
1350 break;
1351
1352 case INTEL_FAM6_SANDYBRIDGE_X:
1353 - switch (cpu_data(cpu).x86_mask) {
1354 + switch (cpu_data(cpu).x86_stepping) {
1355 case 6: rev = 0x618; break;
1356 case 7: rev = 0x70c; break;
1357 }
1358 diff --git a/arch/x86/events/intel/lbr.c b/arch/x86/events/intel/lbr.c
1359 index ae64d0b69729..cf372b90557e 100644
1360 --- a/arch/x86/events/intel/lbr.c
1361 +++ b/arch/x86/events/intel/lbr.c
1362 @@ -1186,7 +1186,7 @@ void __init intel_pmu_lbr_init_atom(void)
1363 * on PMU interrupt
1364 */
1365 if (boot_cpu_data.x86_model == 28
1366 - && boot_cpu_data.x86_mask < 10) {
1367 + && boot_cpu_data.x86_stepping < 10) {
1368 pr_cont("LBR disabled due to erratum");
1369 return;
1370 }
1371 diff --git a/arch/x86/events/intel/p6.c b/arch/x86/events/intel/p6.c
1372 index a5604c352930..408879b0c0d4 100644
1373 --- a/arch/x86/events/intel/p6.c
1374 +++ b/arch/x86/events/intel/p6.c
1375 @@ -234,7 +234,7 @@ static __initconst const struct x86_pmu p6_pmu = {
1376
1377 static __init void p6_pmu_rdpmc_quirk(void)
1378 {
1379 - if (boot_cpu_data.x86_mask < 9) {
1380 + if (boot_cpu_data.x86_stepping < 9) {
1381 /*
1382 * PPro erratum 26; fixed in stepping 9 and above.
1383 */
1384 diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h
1385 index 8d0ec9df1cbe..f077401869ee 100644
1386 --- a/arch/x86/include/asm/acpi.h
1387 +++ b/arch/x86/include/asm/acpi.h
1388 @@ -94,7 +94,7 @@ static inline unsigned int acpi_processor_cstate_check(unsigned int max_cstate)
1389 if (boot_cpu_data.x86 == 0x0F &&
1390 boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
1391 boot_cpu_data.x86_model <= 0x05 &&
1392 - boot_cpu_data.x86_mask < 0x0A)
1393 + boot_cpu_data.x86_stepping < 0x0A)
1394 return 1;
1395 else if (boot_cpu_has(X86_BUG_AMD_APIC_C1E))
1396 return 1;
1397 diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h
1398 index 30d406146016..e1259f043ae9 100644
1399 --- a/arch/x86/include/asm/barrier.h
1400 +++ b/arch/x86/include/asm/barrier.h
1401 @@ -40,7 +40,7 @@ static inline unsigned long array_index_mask_nospec(unsigned long index,
1402
1403 asm ("cmp %1,%2; sbb %0,%0;"
1404 :"=r" (mask)
1405 - :"r"(size),"r" (index)
1406 + :"g"(size),"r" (index)
1407 :"cc");
1408 return mask;
1409 }
1410 diff --git a/arch/x86/include/asm/bug.h b/arch/x86/include/asm/bug.h
1411 index 34d99af43994..6804d6642767 100644
1412 --- a/arch/x86/include/asm/bug.h
1413 +++ b/arch/x86/include/asm/bug.h
1414 @@ -5,23 +5,20 @@
1415 #include <linux/stringify.h>
1416
1417 /*
1418 - * Since some emulators terminate on UD2, we cannot use it for WARN.
1419 - * Since various instruction decoders disagree on the length of UD1,
1420 - * we cannot use it either. So use UD0 for WARN.
1421 + * Despite that some emulators terminate on UD2, we use it for WARN().
1422 *
1423 - * (binutils knows about "ud1" but {en,de}codes it as 2 bytes, whereas
1424 - * our kernel decoder thinks it takes a ModRM byte, which seems consistent
1425 - * with various things like the Intel SDM instruction encoding rules)
1426 + * Since various instruction decoders/specs disagree on the encoding of
1427 + * UD0/UD1.
1428 */
1429
1430 -#define ASM_UD0 ".byte 0x0f, 0xff"
1431 +#define ASM_UD0 ".byte 0x0f, 0xff" /* + ModRM (for Intel) */
1432 #define ASM_UD1 ".byte 0x0f, 0xb9" /* + ModRM */
1433 #define ASM_UD2 ".byte 0x0f, 0x0b"
1434
1435 #define INSN_UD0 0xff0f
1436 #define INSN_UD2 0x0b0f
1437
1438 -#define LEN_UD0 2
1439 +#define LEN_UD2 2
1440
1441 #ifdef CONFIG_GENERIC_BUG
1442
1443 @@ -77,7 +74,11 @@ do { \
1444 unreachable(); \
1445 } while (0)
1446
1447 -#define __WARN_FLAGS(flags) _BUG_FLAGS(ASM_UD0, BUGFLAG_WARNING|(flags))
1448 +#define __WARN_FLAGS(flags) \
1449 +do { \
1450 + _BUG_FLAGS(ASM_UD2, BUGFLAG_WARNING|(flags)); \
1451 + annotate_reachable(); \
1452 +} while (0)
1453
1454 #include <asm-generic/bug.h>
1455
1456 diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
1457 index 4d57894635f2..76b058533e47 100644
1458 --- a/arch/x86/include/asm/nospec-branch.h
1459 +++ b/arch/x86/include/asm/nospec-branch.h
1460 @@ -6,6 +6,7 @@
1461 #include <asm/alternative.h>
1462 #include <asm/alternative-asm.h>
1463 #include <asm/cpufeatures.h>
1464 +#include <asm/msr-index.h>
1465
1466 #ifdef __ASSEMBLY__
1467
1468 @@ -164,10 +165,15 @@ static inline void vmexit_fill_RSB(void)
1469
1470 static inline void indirect_branch_prediction_barrier(void)
1471 {
1472 - alternative_input("",
1473 - "call __ibp_barrier",
1474 - X86_FEATURE_USE_IBPB,
1475 - ASM_NO_INPUT_CLOBBER("eax", "ecx", "edx", "memory"));
1476 + asm volatile(ALTERNATIVE("",
1477 + "movl %[msr], %%ecx\n\t"
1478 + "movl %[val], %%eax\n\t"
1479 + "movl $0, %%edx\n\t"
1480 + "wrmsr",
1481 + X86_FEATURE_USE_IBPB)
1482 + : : [msr] "i" (MSR_IA32_PRED_CMD),
1483 + [val] "i" (PRED_CMD_IBPB)
1484 + : "eax", "ecx", "edx", "memory");
1485 }
1486
1487 #endif /* __ASSEMBLY__ */
1488 diff --git a/arch/x86/include/asm/page_64.h b/arch/x86/include/asm/page_64.h
1489 index 4baa6bceb232..d652a3808065 100644
1490 --- a/arch/x86/include/asm/page_64.h
1491 +++ b/arch/x86/include/asm/page_64.h
1492 @@ -52,10 +52,6 @@ static inline void clear_page(void *page)
1493
1494 void copy_page(void *to, void *from);
1495
1496 -#ifdef CONFIG_X86_MCE
1497 -#define arch_unmap_kpfn arch_unmap_kpfn
1498 -#endif
1499 -
1500 #endif /* !__ASSEMBLY__ */
1501
1502 #ifdef CONFIG_X86_VSYSCALL_EMULATION
1503 diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
1504 index 892df375b615..554841fab717 100644
1505 --- a/arch/x86/include/asm/paravirt.h
1506 +++ b/arch/x86/include/asm/paravirt.h
1507 @@ -297,9 +297,9 @@ static inline void __flush_tlb_global(void)
1508 {
1509 PVOP_VCALL0(pv_mmu_ops.flush_tlb_kernel);
1510 }
1511 -static inline void __flush_tlb_single(unsigned long addr)
1512 +static inline void __flush_tlb_one_user(unsigned long addr)
1513 {
1514 - PVOP_VCALL1(pv_mmu_ops.flush_tlb_single, addr);
1515 + PVOP_VCALL1(pv_mmu_ops.flush_tlb_one_user, addr);
1516 }
1517
1518 static inline void flush_tlb_others(const struct cpumask *cpumask,
1519 diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
1520 index 6ec54d01972d..f624f1f10316 100644
1521 --- a/arch/x86/include/asm/paravirt_types.h
1522 +++ b/arch/x86/include/asm/paravirt_types.h
1523 @@ -217,7 +217,7 @@ struct pv_mmu_ops {
1524 /* TLB operations */
1525 void (*flush_tlb_user)(void);
1526 void (*flush_tlb_kernel)(void);
1527 - void (*flush_tlb_single)(unsigned long addr);
1528 + void (*flush_tlb_one_user)(unsigned long addr);
1529 void (*flush_tlb_others)(const struct cpumask *cpus,
1530 const struct flush_tlb_info *info);
1531
1532 diff --git a/arch/x86/include/asm/pgtable_32.h b/arch/x86/include/asm/pgtable_32.h
1533 index e67c0620aec2..e55466760ff8 100644
1534 --- a/arch/x86/include/asm/pgtable_32.h
1535 +++ b/arch/x86/include/asm/pgtable_32.h
1536 @@ -61,7 +61,7 @@ void paging_init(void);
1537 #define kpte_clear_flush(ptep, vaddr) \
1538 do { \
1539 pte_clear(&init_mm, (vaddr), (ptep)); \
1540 - __flush_tlb_one((vaddr)); \
1541 + __flush_tlb_one_kernel((vaddr)); \
1542 } while (0)
1543
1544 #endif /* !__ASSEMBLY__ */
1545 diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
1546 index 513f9604c192..44c2c4ec6d60 100644
1547 --- a/arch/x86/include/asm/processor.h
1548 +++ b/arch/x86/include/asm/processor.h
1549 @@ -91,7 +91,7 @@ struct cpuinfo_x86 {
1550 __u8 x86; /* CPU family */
1551 __u8 x86_vendor; /* CPU vendor */
1552 __u8 x86_model;
1553 - __u8 x86_mask;
1554 + __u8 x86_stepping;
1555 #ifdef CONFIG_X86_64
1556 /* Number of 4K pages in DTLB/ITLB combined(in pages): */
1557 int x86_tlbsize;
1558 @@ -109,7 +109,7 @@ struct cpuinfo_x86 {
1559 char x86_vendor_id[16];
1560 char x86_model_id[64];
1561 /* in KB - valid for CPUS which support this call: */
1562 - int x86_cache_size;
1563 + unsigned int x86_cache_size;
1564 int x86_cache_alignment; /* In bytes */
1565 /* Cache QoS architectural values: */
1566 int x86_cache_max_rmid; /* max index */
1567 @@ -969,7 +969,4 @@ bool xen_set_default_idle(void);
1568
1569 void stop_this_cpu(void *dummy);
1570 void df_debug(struct pt_regs *regs, long error_code);
1571 -
1572 -void __ibp_barrier(void);
1573 -
1574 #endif /* _ASM_X86_PROCESSOR_H */
1575 diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
1576 index 2b8f18ca5874..84137c22fdfa 100644
1577 --- a/arch/x86/include/asm/tlbflush.h
1578 +++ b/arch/x86/include/asm/tlbflush.h
1579 @@ -140,7 +140,7 @@ static inline unsigned long build_cr3_noflush(pgd_t *pgd, u16 asid)
1580 #else
1581 #define __flush_tlb() __native_flush_tlb()
1582 #define __flush_tlb_global() __native_flush_tlb_global()
1583 -#define __flush_tlb_single(addr) __native_flush_tlb_single(addr)
1584 +#define __flush_tlb_one_user(addr) __native_flush_tlb_one_user(addr)
1585 #endif
1586
1587 static inline bool tlb_defer_switch_to_init_mm(void)
1588 @@ -400,7 +400,7 @@ static inline void __native_flush_tlb_global(void)
1589 /*
1590 * flush one page in the user mapping
1591 */
1592 -static inline void __native_flush_tlb_single(unsigned long addr)
1593 +static inline void __native_flush_tlb_one_user(unsigned long addr)
1594 {
1595 u32 loaded_mm_asid = this_cpu_read(cpu_tlbstate.loaded_mm_asid);
1596
1597 @@ -437,18 +437,31 @@ static inline void __flush_tlb_all(void)
1598 /*
1599 * flush one page in the kernel mapping
1600 */
1601 -static inline void __flush_tlb_one(unsigned long addr)
1602 +static inline void __flush_tlb_one_kernel(unsigned long addr)
1603 {
1604 count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ONE);
1605 - __flush_tlb_single(addr);
1606 +
1607 + /*
1608 + * If PTI is off, then __flush_tlb_one_user() is just INVLPG or its
1609 + * paravirt equivalent. Even with PCID, this is sufficient: we only
1610 + * use PCID if we also use global PTEs for the kernel mapping, and
1611 + * INVLPG flushes global translations across all address spaces.
1612 + *
1613 + * If PTI is on, then the kernel is mapped with non-global PTEs, and
1614 + * __flush_tlb_one_user() will flush the given address for the current
1615 + * kernel address space and for its usermode counterpart, but it does
1616 + * not flush it for other address spaces.
1617 + */
1618 + __flush_tlb_one_user(addr);
1619
1620 if (!static_cpu_has(X86_FEATURE_PTI))
1621 return;
1622
1623 /*
1624 - * __flush_tlb_single() will have cleared the TLB entry for this ASID,
1625 - * but since kernel space is replicated across all, we must also
1626 - * invalidate all others.
1627 + * See above. We need to propagate the flush to all other address
1628 + * spaces. In principle, we only need to propagate it to kernelmode
1629 + * address spaces, but the extra bookkeeping we would need is not
1630 + * worth it.
1631 */
1632 invalidate_other_asid();
1633 }
1634 diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c
1635 index 6db28f17ff28..c88e0b127810 100644
1636 --- a/arch/x86/kernel/amd_nb.c
1637 +++ b/arch/x86/kernel/amd_nb.c
1638 @@ -235,7 +235,7 @@ int amd_cache_northbridges(void)
1639 if (boot_cpu_data.x86 == 0x10 &&
1640 boot_cpu_data.x86_model >= 0x8 &&
1641 (boot_cpu_data.x86_model > 0x9 ||
1642 - boot_cpu_data.x86_mask >= 0x1))
1643 + boot_cpu_data.x86_stepping >= 0x1))
1644 amd_northbridges.flags |= AMD_NB_L3_INDEX_DISABLE;
1645
1646 if (boot_cpu_data.x86 == 0x15)
1647 diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
1648 index 25ddf02598d2..b203af0855b5 100644
1649 --- a/arch/x86/kernel/apic/apic.c
1650 +++ b/arch/x86/kernel/apic/apic.c
1651 @@ -546,7 +546,7 @@ static DEFINE_PER_CPU(struct clock_event_device, lapic_events);
1652
1653 static u32 hsx_deadline_rev(void)
1654 {
1655 - switch (boot_cpu_data.x86_mask) {
1656 + switch (boot_cpu_data.x86_stepping) {
1657 case 0x02: return 0x3a; /* EP */
1658 case 0x04: return 0x0f; /* EX */
1659 }
1660 @@ -556,7 +556,7 @@ static u32 hsx_deadline_rev(void)
1661
1662 static u32 bdx_deadline_rev(void)
1663 {
1664 - switch (boot_cpu_data.x86_mask) {
1665 + switch (boot_cpu_data.x86_stepping) {
1666 case 0x02: return 0x00000011;
1667 case 0x03: return 0x0700000e;
1668 case 0x04: return 0x0f00000c;
1669 @@ -568,7 +568,7 @@ static u32 bdx_deadline_rev(void)
1670
1671 static u32 skx_deadline_rev(void)
1672 {
1673 - switch (boot_cpu_data.x86_mask) {
1674 + switch (boot_cpu_data.x86_stepping) {
1675 case 0x03: return 0x01000136;
1676 case 0x04: return 0x02000014;
1677 }
1678 diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c
1679 index e4b0d92b3ae0..2a7fd56e67b3 100644
1680 --- a/arch/x86/kernel/apm_32.c
1681 +++ b/arch/x86/kernel/apm_32.c
1682 @@ -2389,6 +2389,7 @@ static int __init apm_init(void)
1683 if (HZ != 100)
1684 idle_period = (idle_period * HZ) / 100;
1685 if (idle_threshold < 100) {
1686 + cpuidle_poll_state_init(&apm_idle_driver);
1687 if (!cpuidle_register_driver(&apm_idle_driver))
1688 if (cpuidle_register_device(&apm_cpuidle_device))
1689 cpuidle_unregister_driver(&apm_idle_driver);
1690 diff --git a/arch/x86/kernel/asm-offsets_32.c b/arch/x86/kernel/asm-offsets_32.c
1691 index fa1261eefa16..f91ba53e06c8 100644
1692 --- a/arch/x86/kernel/asm-offsets_32.c
1693 +++ b/arch/x86/kernel/asm-offsets_32.c
1694 @@ -18,7 +18,7 @@ void foo(void)
1695 OFFSET(CPUINFO_x86, cpuinfo_x86, x86);
1696 OFFSET(CPUINFO_x86_vendor, cpuinfo_x86, x86_vendor);
1697 OFFSET(CPUINFO_x86_model, cpuinfo_x86, x86_model);
1698 - OFFSET(CPUINFO_x86_mask, cpuinfo_x86, x86_mask);
1699 + OFFSET(CPUINFO_x86_stepping, cpuinfo_x86, x86_stepping);
1700 OFFSET(CPUINFO_cpuid_level, cpuinfo_x86, cpuid_level);
1701 OFFSET(CPUINFO_x86_capability, cpuinfo_x86, x86_capability);
1702 OFFSET(CPUINFO_x86_vendor_id, cpuinfo_x86, x86_vendor_id);
1703 diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
1704 index ea831c858195..e7d5a7883632 100644
1705 --- a/arch/x86/kernel/cpu/amd.c
1706 +++ b/arch/x86/kernel/cpu/amd.c
1707 @@ -119,7 +119,7 @@ static void init_amd_k6(struct cpuinfo_x86 *c)
1708 return;
1709 }
1710
1711 - if (c->x86_model == 6 && c->x86_mask == 1) {
1712 + if (c->x86_model == 6 && c->x86_stepping == 1) {
1713 const int K6_BUG_LOOP = 1000000;
1714 int n;
1715 void (*f_vide)(void);
1716 @@ -149,7 +149,7 @@ static void init_amd_k6(struct cpuinfo_x86 *c)
1717
1718 /* K6 with old style WHCR */
1719 if (c->x86_model < 8 ||
1720 - (c->x86_model == 8 && c->x86_mask < 8)) {
1721 + (c->x86_model == 8 && c->x86_stepping < 8)) {
1722 /* We can only write allocate on the low 508Mb */
1723 if (mbytes > 508)
1724 mbytes = 508;
1725 @@ -168,7 +168,7 @@ static void init_amd_k6(struct cpuinfo_x86 *c)
1726 return;
1727 }
1728
1729 - if ((c->x86_model == 8 && c->x86_mask > 7) ||
1730 + if ((c->x86_model == 8 && c->x86_stepping > 7) ||
1731 c->x86_model == 9 || c->x86_model == 13) {
1732 /* The more serious chips .. */
1733
1734 @@ -221,7 +221,7 @@ static void init_amd_k7(struct cpuinfo_x86 *c)
1735 * are more robust with CLK_CTL set to 200xxxxx instead of 600xxxxx
1736 * As per AMD technical note 27212 0.2
1737 */
1738 - if ((c->x86_model == 8 && c->x86_mask >= 1) || (c->x86_model > 8)) {
1739 + if ((c->x86_model == 8 && c->x86_stepping >= 1) || (c->x86_model > 8)) {
1740 rdmsr(MSR_K7_CLK_CTL, l, h);
1741 if ((l & 0xfff00000) != 0x20000000) {
1742 pr_info("CPU: CLK_CTL MSR was %x. Reprogramming to %x\n",
1743 @@ -241,12 +241,12 @@ static void init_amd_k7(struct cpuinfo_x86 *c)
1744 * but they are not certified as MP capable.
1745 */
1746 /* Athlon 660/661 is valid. */
1747 - if ((c->x86_model == 6) && ((c->x86_mask == 0) ||
1748 - (c->x86_mask == 1)))
1749 + if ((c->x86_model == 6) && ((c->x86_stepping == 0) ||
1750 + (c->x86_stepping == 1)))
1751 return;
1752
1753 /* Duron 670 is valid */
1754 - if ((c->x86_model == 7) && (c->x86_mask == 0))
1755 + if ((c->x86_model == 7) && (c->x86_stepping == 0))
1756 return;
1757
1758 /*
1759 @@ -256,8 +256,8 @@ static void init_amd_k7(struct cpuinfo_x86 *c)
1760 * See http://www.heise.de/newsticker/data/jow-18.10.01-000 for
1761 * more.
1762 */
1763 - if (((c->x86_model == 6) && (c->x86_mask >= 2)) ||
1764 - ((c->x86_model == 7) && (c->x86_mask >= 1)) ||
1765 + if (((c->x86_model == 6) && (c->x86_stepping >= 2)) ||
1766 + ((c->x86_model == 7) && (c->x86_stepping >= 1)) ||
1767 (c->x86_model > 7))
1768 if (cpu_has(c, X86_FEATURE_MP))
1769 return;
1770 @@ -583,7 +583,7 @@ static void early_init_amd(struct cpuinfo_x86 *c)
1771 /* Set MTRR capability flag if appropriate */
1772 if (c->x86 == 5)
1773 if (c->x86_model == 13 || c->x86_model == 9 ||
1774 - (c->x86_model == 8 && c->x86_mask >= 8))
1775 + (c->x86_model == 8 && c->x86_stepping >= 8))
1776 set_cpu_cap(c, X86_FEATURE_K6_MTRR);
1777 #endif
1778 #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_PCI)
1779 @@ -769,7 +769,7 @@ static void init_amd_zn(struct cpuinfo_x86 *c)
1780 * Fix erratum 1076: CPB feature bit not being set in CPUID. It affects
1781 * all up to and including B1.
1782 */
1783 - if (c->x86_model <= 1 && c->x86_mask <= 1)
1784 + if (c->x86_model <= 1 && c->x86_stepping <= 1)
1785 set_cpu_cap(c, X86_FEATURE_CPB);
1786 }
1787
1788 @@ -880,11 +880,11 @@ static unsigned int amd_size_cache(struct cpuinfo_x86 *c, unsigned int size)
1789 /* AMD errata T13 (order #21922) */
1790 if ((c->x86 == 6)) {
1791 /* Duron Rev A0 */
1792 - if (c->x86_model == 3 && c->x86_mask == 0)
1793 + if (c->x86_model == 3 && c->x86_stepping == 0)
1794 size = 64;
1795 /* Tbird rev A1/A2 */
1796 if (c->x86_model == 4 &&
1797 - (c->x86_mask == 0 || c->x86_mask == 1))
1798 + (c->x86_stepping == 0 || c->x86_stepping == 1))
1799 size = 256;
1800 }
1801 return size;
1802 @@ -1021,7 +1021,7 @@ static bool cpu_has_amd_erratum(struct cpuinfo_x86 *cpu, const int *erratum)
1803 }
1804
1805 /* OSVW unavailable or ID unknown, match family-model-stepping range */
1806 - ms = (cpu->x86_model << 4) | cpu->x86_mask;
1807 + ms = (cpu->x86_model << 4) | cpu->x86_stepping;
1808 while ((range = *erratum++))
1809 if ((cpu->x86 == AMD_MODEL_RANGE_FAMILY(range)) &&
1810 (ms >= AMD_MODEL_RANGE_START(range)) &&
1811 diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
1812 index 71949bf2de5a..d71c8b54b696 100644
1813 --- a/arch/x86/kernel/cpu/bugs.c
1814 +++ b/arch/x86/kernel/cpu/bugs.c
1815 @@ -162,8 +162,7 @@ static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void)
1816 if (cmdline_find_option_bool(boot_command_line, "nospectre_v2"))
1817 return SPECTRE_V2_CMD_NONE;
1818 else {
1819 - ret = cmdline_find_option(boot_command_line, "spectre_v2", arg,
1820 - sizeof(arg));
1821 + ret = cmdline_find_option(boot_command_line, "spectre_v2", arg, sizeof(arg));
1822 if (ret < 0)
1823 return SPECTRE_V2_CMD_AUTO;
1824
1825 @@ -175,8 +174,7 @@ static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void)
1826 }
1827
1828 if (i >= ARRAY_SIZE(mitigation_options)) {
1829 - pr_err("unknown option (%s). Switching to AUTO select\n",
1830 - mitigation_options[i].option);
1831 + pr_err("unknown option (%s). Switching to AUTO select\n", arg);
1832 return SPECTRE_V2_CMD_AUTO;
1833 }
1834 }
1835 @@ -185,8 +183,7 @@ static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void)
1836 cmd == SPECTRE_V2_CMD_RETPOLINE_AMD ||
1837 cmd == SPECTRE_V2_CMD_RETPOLINE_GENERIC) &&
1838 !IS_ENABLED(CONFIG_RETPOLINE)) {
1839 - pr_err("%s selected but not compiled in. Switching to AUTO select\n",
1840 - mitigation_options[i].option);
1841 + pr_err("%s selected but not compiled in. Switching to AUTO select\n", mitigation_options[i].option);
1842 return SPECTRE_V2_CMD_AUTO;
1843 }
1844
1845 @@ -256,14 +253,14 @@ static void __init spectre_v2_select_mitigation(void)
1846 goto retpoline_auto;
1847 break;
1848 }
1849 - pr_err("kernel not compiled with retpoline; no mitigation available!");
1850 + pr_err("Spectre mitigation: kernel not compiled with retpoline; no mitigation available!");
1851 return;
1852
1853 retpoline_auto:
1854 if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) {
1855 retpoline_amd:
1856 if (!boot_cpu_has(X86_FEATURE_LFENCE_RDTSC)) {
1857 - pr_err("LFENCE not serializing. Switching to generic retpoline\n");
1858 + pr_err("Spectre mitigation: LFENCE not serializing, switching to generic retpoline\n");
1859 goto retpoline_generic;
1860 }
1861 mode = retp_compiler() ? SPECTRE_V2_RETPOLINE_AMD :
1862 @@ -281,7 +278,7 @@ static void __init spectre_v2_select_mitigation(void)
1863 pr_info("%s\n", spectre_v2_strings[mode]);
1864
1865 /*
1866 - * If neither SMEP or KPTI are available, there is a risk of
1867 + * If neither SMEP nor PTI are available, there is a risk of
1868 * hitting userspace addresses in the RSB after a context switch
1869 * from a shallow call stack to a deeper one. To prevent this fill
1870 * the entire RSB, even when using IBRS.
1871 @@ -295,21 +292,20 @@ static void __init spectre_v2_select_mitigation(void)
1872 if ((!boot_cpu_has(X86_FEATURE_PTI) &&
1873 !boot_cpu_has(X86_FEATURE_SMEP)) || is_skylake_era()) {
1874 setup_force_cpu_cap(X86_FEATURE_RSB_CTXSW);
1875 - pr_info("Filling RSB on context switch\n");
1876 + pr_info("Spectre v2 mitigation: Filling RSB on context switch\n");
1877 }
1878
1879 /* Initialize Indirect Branch Prediction Barrier if supported */
1880 if (boot_cpu_has(X86_FEATURE_IBPB)) {
1881 setup_force_cpu_cap(X86_FEATURE_USE_IBPB);
1882 - pr_info("Enabling Indirect Branch Prediction Barrier\n");
1883 + pr_info("Spectre v2 mitigation: Enabling Indirect Branch Prediction Barrier\n");
1884 }
1885 }
1886
1887 #undef pr_fmt
1888
1889 #ifdef CONFIG_SYSFS
1890 -ssize_t cpu_show_meltdown(struct device *dev,
1891 - struct device_attribute *attr, char *buf)
1892 +ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, char *buf)
1893 {
1894 if (!boot_cpu_has_bug(X86_BUG_CPU_MELTDOWN))
1895 return sprintf(buf, "Not affected\n");
1896 @@ -318,16 +314,14 @@ ssize_t cpu_show_meltdown(struct device *dev,
1897 return sprintf(buf, "Vulnerable\n");
1898 }
1899
1900 -ssize_t cpu_show_spectre_v1(struct device *dev,
1901 - struct device_attribute *attr, char *buf)
1902 +ssize_t cpu_show_spectre_v1(struct device *dev, struct device_attribute *attr, char *buf)
1903 {
1904 if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V1))
1905 return sprintf(buf, "Not affected\n");
1906 return sprintf(buf, "Mitigation: __user pointer sanitization\n");
1907 }
1908
1909 -ssize_t cpu_show_spectre_v2(struct device *dev,
1910 - struct device_attribute *attr, char *buf)
1911 +ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, char *buf)
1912 {
1913 if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V2))
1914 return sprintf(buf, "Not affected\n");
1915 @@ -337,9 +331,3 @@ ssize_t cpu_show_spectre_v2(struct device *dev,
1916 spectre_v2_module_string());
1917 }
1918 #endif
1919 -
1920 -void __ibp_barrier(void)
1921 -{
1922 - __wrmsr(MSR_IA32_PRED_CMD, PRED_CMD_IBPB, 0);
1923 -}
1924 -EXPORT_SYMBOL_GPL(__ibp_barrier);
1925 diff --git a/arch/x86/kernel/cpu/centaur.c b/arch/x86/kernel/cpu/centaur.c
1926 index 68bc6d9b3132..595be776727d 100644
1927 --- a/arch/x86/kernel/cpu/centaur.c
1928 +++ b/arch/x86/kernel/cpu/centaur.c
1929 @@ -136,7 +136,7 @@ static void init_centaur(struct cpuinfo_x86 *c)
1930 clear_cpu_cap(c, X86_FEATURE_TSC);
1931 break;
1932 case 8:
1933 - switch (c->x86_mask) {
1934 + switch (c->x86_stepping) {
1935 default:
1936 name = "2";
1937 break;
1938 @@ -211,7 +211,7 @@ centaur_size_cache(struct cpuinfo_x86 *c, unsigned int size)
1939 * - Note, it seems this may only be in engineering samples.
1940 */
1941 if ((c->x86 == 6) && (c->x86_model == 9) &&
1942 - (c->x86_mask == 1) && (size == 65))
1943 + (c->x86_stepping == 1) && (size == 65))
1944 size -= 1;
1945 return size;
1946 }
1947 diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
1948 index d63f4b5706e4..824aee0117bb 100644
1949 --- a/arch/x86/kernel/cpu/common.c
1950 +++ b/arch/x86/kernel/cpu/common.c
1951 @@ -731,7 +731,7 @@ void cpu_detect(struct cpuinfo_x86 *c)
1952 cpuid(0x00000001, &tfms, &misc, &junk, &cap0);
1953 c->x86 = x86_family(tfms);
1954 c->x86_model = x86_model(tfms);
1955 - c->x86_mask = x86_stepping(tfms);
1956 + c->x86_stepping = x86_stepping(tfms);
1957
1958 if (cap0 & (1<<19)) {
1959 c->x86_clflush_size = ((misc >> 8) & 0xff) * 8;
1960 @@ -1184,9 +1184,9 @@ static void identify_cpu(struct cpuinfo_x86 *c)
1961 int i;
1962
1963 c->loops_per_jiffy = loops_per_jiffy;
1964 - c->x86_cache_size = -1;
1965 + c->x86_cache_size = 0;
1966 c->x86_vendor = X86_VENDOR_UNKNOWN;
1967 - c->x86_model = c->x86_mask = 0; /* So far unknown... */
1968 + c->x86_model = c->x86_stepping = 0; /* So far unknown... */
1969 c->x86_vendor_id[0] = '\0'; /* Unset */
1970 c->x86_model_id[0] = '\0'; /* Unset */
1971 c->x86_max_cores = 1;
1972 @@ -1378,8 +1378,8 @@ void print_cpu_info(struct cpuinfo_x86 *c)
1973
1974 pr_cont(" (family: 0x%x, model: 0x%x", c->x86, c->x86_model);
1975
1976 - if (c->x86_mask || c->cpuid_level >= 0)
1977 - pr_cont(", stepping: 0x%x)\n", c->x86_mask);
1978 + if (c->x86_stepping || c->cpuid_level >= 0)
1979 + pr_cont(", stepping: 0x%x)\n", c->x86_stepping);
1980 else
1981 pr_cont(")\n");
1982 }
1983 diff --git a/arch/x86/kernel/cpu/cyrix.c b/arch/x86/kernel/cpu/cyrix.c
1984 index 6b4bb335641f..8949b7ae6d92 100644
1985 --- a/arch/x86/kernel/cpu/cyrix.c
1986 +++ b/arch/x86/kernel/cpu/cyrix.c
1987 @@ -215,7 +215,7 @@ static void init_cyrix(struct cpuinfo_x86 *c)
1988
1989 /* common case step number/rev -- exceptions handled below */
1990 c->x86_model = (dir1 >> 4) + 1;
1991 - c->x86_mask = dir1 & 0xf;
1992 + c->x86_stepping = dir1 & 0xf;
1993
1994 /* Now cook; the original recipe is by Channing Corn, from Cyrix.
1995 * We do the same thing for each generation: we work out
1996 diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
1997 index 319bf989fad1..d19e903214b4 100644
1998 --- a/arch/x86/kernel/cpu/intel.c
1999 +++ b/arch/x86/kernel/cpu/intel.c
2000 @@ -116,14 +116,13 @@ struct sku_microcode {
2001 u32 microcode;
2002 };
2003 static const struct sku_microcode spectre_bad_microcodes[] = {
2004 - { INTEL_FAM6_KABYLAKE_DESKTOP, 0x0B, 0x84 },
2005 - { INTEL_FAM6_KABYLAKE_DESKTOP, 0x0A, 0x84 },
2006 - { INTEL_FAM6_KABYLAKE_DESKTOP, 0x09, 0x84 },
2007 - { INTEL_FAM6_KABYLAKE_MOBILE, 0x0A, 0x84 },
2008 - { INTEL_FAM6_KABYLAKE_MOBILE, 0x09, 0x84 },
2009 + { INTEL_FAM6_KABYLAKE_DESKTOP, 0x0B, 0x80 },
2010 + { INTEL_FAM6_KABYLAKE_DESKTOP, 0x0A, 0x80 },
2011 + { INTEL_FAM6_KABYLAKE_DESKTOP, 0x09, 0x80 },
2012 + { INTEL_FAM6_KABYLAKE_MOBILE, 0x0A, 0x80 },
2013 + { INTEL_FAM6_KABYLAKE_MOBILE, 0x09, 0x80 },
2014 { INTEL_FAM6_SKYLAKE_X, 0x03, 0x0100013e },
2015 { INTEL_FAM6_SKYLAKE_X, 0x04, 0x0200003c },
2016 - { INTEL_FAM6_SKYLAKE_MOBILE, 0x03, 0xc2 },
2017 { INTEL_FAM6_SKYLAKE_DESKTOP, 0x03, 0xc2 },
2018 { INTEL_FAM6_BROADWELL_CORE, 0x04, 0x28 },
2019 { INTEL_FAM6_BROADWELL_GT3E, 0x01, 0x1b },
2020 @@ -136,8 +135,6 @@ static const struct sku_microcode spectre_bad_microcodes[] = {
2021 { INTEL_FAM6_HASWELL_X, 0x02, 0x3b },
2022 { INTEL_FAM6_HASWELL_X, 0x04, 0x10 },
2023 { INTEL_FAM6_IVYBRIDGE_X, 0x04, 0x42a },
2024 - /* Updated in the 20180108 release; blacklist until we know otherwise */
2025 - { INTEL_FAM6_ATOM_GEMINI_LAKE, 0x01, 0x22 },
2026 /* Observed in the wild */
2027 { INTEL_FAM6_SANDYBRIDGE_X, 0x06, 0x61b },
2028 { INTEL_FAM6_SANDYBRIDGE_X, 0x07, 0x712 },
2029 @@ -149,7 +146,7 @@ static bool bad_spectre_microcode(struct cpuinfo_x86 *c)
2030
2031 for (i = 0; i < ARRAY_SIZE(spectre_bad_microcodes); i++) {
2032 if (c->x86_model == spectre_bad_microcodes[i].model &&
2033 - c->x86_mask == spectre_bad_microcodes[i].stepping)
2034 + c->x86_stepping == spectre_bad_microcodes[i].stepping)
2035 return (c->microcode <= spectre_bad_microcodes[i].microcode);
2036 }
2037 return false;
2038 @@ -196,7 +193,7 @@ static void early_init_intel(struct cpuinfo_x86 *c)
2039 * need the microcode to have already been loaded... so if it is
2040 * not, recommend a BIOS update and disable large pages.
2041 */
2042 - if (c->x86 == 6 && c->x86_model == 0x1c && c->x86_mask <= 2 &&
2043 + if (c->x86 == 6 && c->x86_model == 0x1c && c->x86_stepping <= 2 &&
2044 c->microcode < 0x20e) {
2045 pr_warn("Atom PSE erratum detected, BIOS microcode update recommended\n");
2046 clear_cpu_cap(c, X86_FEATURE_PSE);
2047 @@ -212,7 +209,7 @@ static void early_init_intel(struct cpuinfo_x86 *c)
2048
2049 /* CPUID workaround for 0F33/0F34 CPU */
2050 if (c->x86 == 0xF && c->x86_model == 0x3
2051 - && (c->x86_mask == 0x3 || c->x86_mask == 0x4))
2052 + && (c->x86_stepping == 0x3 || c->x86_stepping == 0x4))
2053 c->x86_phys_bits = 36;
2054
2055 /*
2056 @@ -310,7 +307,7 @@ int ppro_with_ram_bug(void)
2057 if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
2058 boot_cpu_data.x86 == 6 &&
2059 boot_cpu_data.x86_model == 1 &&
2060 - boot_cpu_data.x86_mask < 8) {
2061 + boot_cpu_data.x86_stepping < 8) {
2062 pr_info("Pentium Pro with Errata#50 detected. Taking evasive action.\n");
2063 return 1;
2064 }
2065 @@ -327,7 +324,7 @@ static void intel_smp_check(struct cpuinfo_x86 *c)
2066 * Mask B, Pentium, but not Pentium MMX
2067 */
2068 if (c->x86 == 5 &&
2069 - c->x86_mask >= 1 && c->x86_mask <= 4 &&
2070 + c->x86_stepping >= 1 && c->x86_stepping <= 4 &&
2071 c->x86_model <= 3) {
2072 /*
2073 * Remember we have B step Pentia with bugs
2074 @@ -370,7 +367,7 @@ static void intel_workarounds(struct cpuinfo_x86 *c)
2075 * SEP CPUID bug: Pentium Pro reports SEP but doesn't have it until
2076 * model 3 mask 3
2077 */
2078 - if ((c->x86<<8 | c->x86_model<<4 | c->x86_mask) < 0x633)
2079 + if ((c->x86<<8 | c->x86_model<<4 | c->x86_stepping) < 0x633)
2080 clear_cpu_cap(c, X86_FEATURE_SEP);
2081
2082 /*
2083 @@ -388,7 +385,7 @@ static void intel_workarounds(struct cpuinfo_x86 *c)
2084 * P4 Xeon erratum 037 workaround.
2085 * Hardware prefetcher may cause stale data to be loaded into the cache.
2086 */
2087 - if ((c->x86 == 15) && (c->x86_model == 1) && (c->x86_mask == 1)) {
2088 + if ((c->x86 == 15) && (c->x86_model == 1) && (c->x86_stepping == 1)) {
2089 if (msr_set_bit(MSR_IA32_MISC_ENABLE,
2090 MSR_IA32_MISC_ENABLE_PREFETCH_DISABLE_BIT) > 0) {
2091 pr_info("CPU: C0 stepping P4 Xeon detected.\n");
2092 @@ -403,7 +400,7 @@ static void intel_workarounds(struct cpuinfo_x86 *c)
2093 * Specification Update").
2094 */
2095 if (boot_cpu_has(X86_FEATURE_APIC) && (c->x86<<8 | c->x86_model<<4) == 0x520 &&
2096 - (c->x86_mask < 0x6 || c->x86_mask == 0xb))
2097 + (c->x86_stepping < 0x6 || c->x86_stepping == 0xb))
2098 set_cpu_bug(c, X86_BUG_11AP);
2099
2100
2101 @@ -650,7 +647,7 @@ static void init_intel(struct cpuinfo_x86 *c)
2102 case 6:
2103 if (l2 == 128)
2104 p = "Celeron (Mendocino)";
2105 - else if (c->x86_mask == 0 || c->x86_mask == 5)
2106 + else if (c->x86_stepping == 0 || c->x86_stepping == 5)
2107 p = "Celeron-A";
2108 break;
2109
2110 diff --git a/arch/x86/kernel/cpu/intel_rdt.c b/arch/x86/kernel/cpu/intel_rdt.c
2111 index 99442370de40..18dd8f22e353 100644
2112 --- a/arch/x86/kernel/cpu/intel_rdt.c
2113 +++ b/arch/x86/kernel/cpu/intel_rdt.c
2114 @@ -771,7 +771,7 @@ static __init void rdt_quirks(void)
2115 cache_alloc_hsw_probe();
2116 break;
2117 case INTEL_FAM6_SKYLAKE_X:
2118 - if (boot_cpu_data.x86_mask <= 4)
2119 + if (boot_cpu_data.x86_stepping <= 4)
2120 set_rdt_options("!cmt,!mbmtotal,!mbmlocal,!l3cat");
2121 }
2122 }
2123 diff --git a/arch/x86/kernel/cpu/mcheck/mce-internal.h b/arch/x86/kernel/cpu/mcheck/mce-internal.h
2124 index aa0d5df9dc60..e956eb267061 100644
2125 --- a/arch/x86/kernel/cpu/mcheck/mce-internal.h
2126 +++ b/arch/x86/kernel/cpu/mcheck/mce-internal.h
2127 @@ -115,4 +115,19 @@ static inline void mce_unregister_injector_chain(struct notifier_block *nb) { }
2128
2129 extern struct mca_config mca_cfg;
2130
2131 +#ifndef CONFIG_X86_64
2132 +/*
2133 + * On 32-bit systems it would be difficult to safely unmap a poison page
2134 + * from the kernel 1:1 map because there are no non-canonical addresses that
2135 + * we can use to refer to the address without risking a speculative access.
2136 + * However, this isn't much of an issue because:
2137 + * 1) Few unmappable pages are in the 1:1 map. Most are in HIGHMEM which
2138 + * are only mapped into the kernel as needed
2139 + * 2) Few people would run a 32-bit kernel on a machine that supports
2140 + * recoverable errors because they have too much memory to boot 32-bit.
2141 + */
2142 +static inline void mce_unmap_kpfn(unsigned long pfn) {}
2143 +#define mce_unmap_kpfn mce_unmap_kpfn
2144 +#endif
2145 +
2146 #endif /* __X86_MCE_INTERNAL_H__ */
2147 diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
2148 index 868e412b4f0c..2fe482f6ecd8 100644
2149 --- a/arch/x86/kernel/cpu/mcheck/mce.c
2150 +++ b/arch/x86/kernel/cpu/mcheck/mce.c
2151 @@ -106,6 +106,10 @@ static struct irq_work mce_irq_work;
2152
2153 static void (*quirk_no_way_out)(int bank, struct mce *m, struct pt_regs *regs);
2154
2155 +#ifndef mce_unmap_kpfn
2156 +static void mce_unmap_kpfn(unsigned long pfn);
2157 +#endif
2158 +
2159 /*
2160 * CPU/chipset specific EDAC code can register a notifier call here to print
2161 * MCE errors in a human-readable form.
2162 @@ -582,7 +586,8 @@ static int srao_decode_notifier(struct notifier_block *nb, unsigned long val,
2163
2164 if (mce_usable_address(mce) && (mce->severity == MCE_AO_SEVERITY)) {
2165 pfn = mce->addr >> PAGE_SHIFT;
2166 - memory_failure(pfn, MCE_VECTOR, 0);
2167 + if (memory_failure(pfn, MCE_VECTOR, 0))
2168 + mce_unmap_kpfn(pfn);
2169 }
2170
2171 return NOTIFY_OK;
2172 @@ -1049,12 +1054,13 @@ static int do_memory_failure(struct mce *m)
2173 ret = memory_failure(m->addr >> PAGE_SHIFT, MCE_VECTOR, flags);
2174 if (ret)
2175 pr_err("Memory error not recovered");
2176 + else
2177 + mce_unmap_kpfn(m->addr >> PAGE_SHIFT);
2178 return ret;
2179 }
2180
2181 -#if defined(arch_unmap_kpfn) && defined(CONFIG_MEMORY_FAILURE)
2182 -
2183 -void arch_unmap_kpfn(unsigned long pfn)
2184 +#ifndef mce_unmap_kpfn
2185 +static void mce_unmap_kpfn(unsigned long pfn)
2186 {
2187 unsigned long decoy_addr;
2188
2189 @@ -1065,7 +1071,7 @@ void arch_unmap_kpfn(unsigned long pfn)
2190 * We would like to just call:
2191 * set_memory_np((unsigned long)pfn_to_kaddr(pfn), 1);
2192 * but doing that would radically increase the odds of a
2193 - * speculative access to the posion page because we'd have
2194 + * speculative access to the poison page because we'd have
2195 * the virtual address of the kernel 1:1 mapping sitting
2196 * around in registers.
2197 * Instead we get tricky. We create a non-canonical address
2198 @@ -1090,7 +1096,6 @@ void arch_unmap_kpfn(unsigned long pfn)
2199
2200 if (set_memory_np(decoy_addr, 1))
2201 pr_warn("Could not invalidate pfn=0x%lx from 1:1 map\n", pfn);
2202 -
2203 }
2204 #endif
2205
2206 diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
2207 index f7c55b0e753a..a15db2b4e0d6 100644
2208 --- a/arch/x86/kernel/cpu/microcode/intel.c
2209 +++ b/arch/x86/kernel/cpu/microcode/intel.c
2210 @@ -921,7 +921,7 @@ static bool is_blacklisted(unsigned int cpu)
2211 */
2212 if (c->x86 == 6 &&
2213 c->x86_model == INTEL_FAM6_BROADWELL_X &&
2214 - c->x86_mask == 0x01 &&
2215 + c->x86_stepping == 0x01 &&
2216 llc_size_per_core > 2621440 &&
2217 c->microcode < 0x0b000021) {
2218 pr_err_once("Erratum BDF90: late loading with revision < 0x0b000021 (0x%x) disabled.\n", c->microcode);
2219 @@ -944,7 +944,7 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device,
2220 return UCODE_NFOUND;
2221
2222 sprintf(name, "intel-ucode/%02x-%02x-%02x",
2223 - c->x86, c->x86_model, c->x86_mask);
2224 + c->x86, c->x86_model, c->x86_stepping);
2225
2226 if (request_firmware_direct(&firmware, name, device)) {
2227 pr_debug("data file %s load failed\n", name);
2228 @@ -982,7 +982,7 @@ static struct microcode_ops microcode_intel_ops = {
2229
2230 static int __init calc_llc_size_per_core(struct cpuinfo_x86 *c)
2231 {
2232 - u64 llc_size = c->x86_cache_size * 1024;
2233 + u64 llc_size = c->x86_cache_size * 1024ULL;
2234
2235 do_div(llc_size, c->x86_max_cores);
2236
2237 diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c
2238 index fdc55215d44d..e12ee86906c6 100644
2239 --- a/arch/x86/kernel/cpu/mtrr/generic.c
2240 +++ b/arch/x86/kernel/cpu/mtrr/generic.c
2241 @@ -859,7 +859,7 @@ int generic_validate_add_page(unsigned long base, unsigned long size,
2242 */
2243 if (is_cpu(INTEL) && boot_cpu_data.x86 == 6 &&
2244 boot_cpu_data.x86_model == 1 &&
2245 - boot_cpu_data.x86_mask <= 7) {
2246 + boot_cpu_data.x86_stepping <= 7) {
2247 if (base & ((1 << (22 - PAGE_SHIFT)) - 1)) {
2248 pr_warn("mtrr: base(0x%lx000) is not 4 MiB aligned\n", base);
2249 return -EINVAL;
2250 diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c
2251 index 40d5a8a75212..7468de429087 100644
2252 --- a/arch/x86/kernel/cpu/mtrr/main.c
2253 +++ b/arch/x86/kernel/cpu/mtrr/main.c
2254 @@ -711,8 +711,8 @@ void __init mtrr_bp_init(void)
2255 if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
2256 boot_cpu_data.x86 == 0xF &&
2257 boot_cpu_data.x86_model == 0x3 &&
2258 - (boot_cpu_data.x86_mask == 0x3 ||
2259 - boot_cpu_data.x86_mask == 0x4))
2260 + (boot_cpu_data.x86_stepping == 0x3 ||
2261 + boot_cpu_data.x86_stepping == 0x4))
2262 phys_addr = 36;
2263
2264 size_or_mask = SIZE_OR_MASK_BITS(phys_addr);
2265 diff --git a/arch/x86/kernel/cpu/proc.c b/arch/x86/kernel/cpu/proc.c
2266 index e7ecedafa1c8..2c8522a39ed5 100644
2267 --- a/arch/x86/kernel/cpu/proc.c
2268 +++ b/arch/x86/kernel/cpu/proc.c
2269 @@ -72,8 +72,8 @@ static int show_cpuinfo(struct seq_file *m, void *v)
2270 c->x86_model,
2271 c->x86_model_id[0] ? c->x86_model_id : "unknown");
2272
2273 - if (c->x86_mask || c->cpuid_level >= 0)
2274 - seq_printf(m, "stepping\t: %d\n", c->x86_mask);
2275 + if (c->x86_stepping || c->cpuid_level >= 0)
2276 + seq_printf(m, "stepping\t: %d\n", c->x86_stepping);
2277 else
2278 seq_puts(m, "stepping\t: unknown\n");
2279 if (c->microcode)
2280 @@ -91,8 +91,8 @@ static int show_cpuinfo(struct seq_file *m, void *v)
2281 }
2282
2283 /* Cache size */
2284 - if (c->x86_cache_size >= 0)
2285 - seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size);
2286 + if (c->x86_cache_size)
2287 + seq_printf(m, "cache size\t: %u KB\n", c->x86_cache_size);
2288
2289 show_cpuinfo_core(m, c, cpu);
2290 show_cpuinfo_misc(m, c);
2291 diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
2292 index 1e82f787c160..c87560e1e3ef 100644
2293 --- a/arch/x86/kernel/early-quirks.c
2294 +++ b/arch/x86/kernel/early-quirks.c
2295 @@ -527,6 +527,7 @@ static const struct pci_device_id intel_early_ids[] __initconst = {
2296 INTEL_SKL_IDS(&gen9_early_ops),
2297 INTEL_BXT_IDS(&gen9_early_ops),
2298 INTEL_KBL_IDS(&gen9_early_ops),
2299 + INTEL_CFL_IDS(&gen9_early_ops),
2300 INTEL_GLK_IDS(&gen9_early_ops),
2301 INTEL_CNL_IDS(&gen9_early_ops),
2302 };
2303 diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
2304 index c29020907886..b59e4fb40fd9 100644
2305 --- a/arch/x86/kernel/head_32.S
2306 +++ b/arch/x86/kernel/head_32.S
2307 @@ -37,7 +37,7 @@
2308 #define X86 new_cpu_data+CPUINFO_x86
2309 #define X86_VENDOR new_cpu_data+CPUINFO_x86_vendor
2310 #define X86_MODEL new_cpu_data+CPUINFO_x86_model
2311 -#define X86_MASK new_cpu_data+CPUINFO_x86_mask
2312 +#define X86_STEPPING new_cpu_data+CPUINFO_x86_stepping
2313 #define X86_HARD_MATH new_cpu_data+CPUINFO_hard_math
2314 #define X86_CPUID new_cpu_data+CPUINFO_cpuid_level
2315 #define X86_CAPABILITY new_cpu_data+CPUINFO_x86_capability
2316 @@ -332,7 +332,7 @@ ENTRY(startup_32_smp)
2317 shrb $4,%al
2318 movb %al,X86_MODEL
2319 andb $0x0f,%cl # mask mask revision
2320 - movb %cl,X86_MASK
2321 + movb %cl,X86_STEPPING
2322 movl %edx,X86_CAPABILITY
2323
2324 .Lis486:
2325 diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c
2326 index 3a4b12809ab5..bc6bc6689e68 100644
2327 --- a/arch/x86/kernel/mpparse.c
2328 +++ b/arch/x86/kernel/mpparse.c
2329 @@ -407,7 +407,7 @@ static inline void __init construct_default_ISA_mptable(int mpc_default_type)
2330 processor.apicver = mpc_default_type > 4 ? 0x10 : 0x01;
2331 processor.cpuflag = CPU_ENABLED;
2332 processor.cpufeature = (boot_cpu_data.x86 << 8) |
2333 - (boot_cpu_data.x86_model << 4) | boot_cpu_data.x86_mask;
2334 + (boot_cpu_data.x86_model << 4) | boot_cpu_data.x86_stepping;
2335 processor.featureflag = boot_cpu_data.x86_capability[CPUID_1_EDX];
2336 processor.reserved[0] = 0;
2337 processor.reserved[1] = 0;
2338 diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
2339 index 041096bdef86..99dc79e76bdc 100644
2340 --- a/arch/x86/kernel/paravirt.c
2341 +++ b/arch/x86/kernel/paravirt.c
2342 @@ -200,9 +200,9 @@ static void native_flush_tlb_global(void)
2343 __native_flush_tlb_global();
2344 }
2345
2346 -static void native_flush_tlb_single(unsigned long addr)
2347 +static void native_flush_tlb_one_user(unsigned long addr)
2348 {
2349 - __native_flush_tlb_single(addr);
2350 + __native_flush_tlb_one_user(addr);
2351 }
2352
2353 struct static_key paravirt_steal_enabled;
2354 @@ -401,7 +401,7 @@ struct pv_mmu_ops pv_mmu_ops __ro_after_init = {
2355
2356 .flush_tlb_user = native_flush_tlb,
2357 .flush_tlb_kernel = native_flush_tlb_global,
2358 - .flush_tlb_single = native_flush_tlb_single,
2359 + .flush_tlb_one_user = native_flush_tlb_one_user,
2360 .flush_tlb_others = native_flush_tlb_others,
2361
2362 .pgd_alloc = __paravirt_pgd_alloc,
2363 diff --git a/arch/x86/kernel/relocate_kernel_64.S b/arch/x86/kernel/relocate_kernel_64.S
2364 index 307d3bac5f04..11eda21eb697 100644
2365 --- a/arch/x86/kernel/relocate_kernel_64.S
2366 +++ b/arch/x86/kernel/relocate_kernel_64.S
2367 @@ -68,6 +68,9 @@ relocate_kernel:
2368 movq %cr4, %rax
2369 movq %rax, CR4(%r11)
2370
2371 + /* Save CR4. Required to enable the right paging mode later. */
2372 + movq %rax, %r13
2373 +
2374 /* zero out flags, and disable interrupts */
2375 pushq $0
2376 popfq
2377 @@ -126,8 +129,13 @@ identity_mapped:
2378 /*
2379 * Set cr4 to a known state:
2380 * - physical address extension enabled
2381 + * - 5-level paging, if it was enabled before
2382 */
2383 movl $X86_CR4_PAE, %eax
2384 + testq $X86_CR4_LA57, %r13
2385 + jz 1f
2386 + orl $X86_CR4_LA57, %eax
2387 +1:
2388 movq %rax, %cr4
2389
2390 jmp 1f
2391 diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
2392 index ed556d50d7ed..844279c3ff4a 100644
2393 --- a/arch/x86/kernel/smpboot.c
2394 +++ b/arch/x86/kernel/smpboot.c
2395 @@ -1431,7 +1431,6 @@ static void remove_siblinginfo(int cpu)
2396 cpumask_clear(cpu_llc_shared_mask(cpu));
2397 cpumask_clear(topology_sibling_cpumask(cpu));
2398 cpumask_clear(topology_core_cpumask(cpu));
2399 - c->phys_proc_id = 0;
2400 c->cpu_core_id = 0;
2401 cpumask_clear_cpu(cpu, cpu_sibling_setup_mask);
2402 recompute_smt_state();
2403 diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
2404 index 446c9ef8cfc3..3d9b2308e7fa 100644
2405 --- a/arch/x86/kernel/traps.c
2406 +++ b/arch/x86/kernel/traps.c
2407 @@ -181,7 +181,7 @@ int fixup_bug(struct pt_regs *regs, int trapnr)
2408 break;
2409
2410 case BUG_TRAP_TYPE_WARN:
2411 - regs->ip += LEN_UD0;
2412 + regs->ip += LEN_UD2;
2413 return 1;
2414 }
2415
2416 diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
2417 index 2b8eb4da4d08..cc83bdcb65d1 100644
2418 --- a/arch/x86/kvm/mmu.c
2419 +++ b/arch/x86/kvm/mmu.c
2420 @@ -5058,7 +5058,7 @@ void kvm_mmu_uninit_vm(struct kvm *kvm)
2421 typedef bool (*slot_level_handler) (struct kvm *kvm, struct kvm_rmap_head *rmap_head);
2422
2423 /* The caller should hold mmu-lock before calling this function. */
2424 -static bool
2425 +static __always_inline bool
2426 slot_handle_level_range(struct kvm *kvm, struct kvm_memory_slot *memslot,
2427 slot_level_handler fn, int start_level, int end_level,
2428 gfn_t start_gfn, gfn_t end_gfn, bool lock_flush_tlb)
2429 @@ -5088,7 +5088,7 @@ slot_handle_level_range(struct kvm *kvm, struct kvm_memory_slot *memslot,
2430 return flush;
2431 }
2432
2433 -static bool
2434 +static __always_inline bool
2435 slot_handle_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
2436 slot_level_handler fn, int start_level, int end_level,
2437 bool lock_flush_tlb)
2438 @@ -5099,7 +5099,7 @@ slot_handle_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
2439 lock_flush_tlb);
2440 }
2441
2442 -static bool
2443 +static __always_inline bool
2444 slot_handle_all_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
2445 slot_level_handler fn, bool lock_flush_tlb)
2446 {
2447 @@ -5107,7 +5107,7 @@ slot_handle_all_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
2448 PT_MAX_HUGEPAGE_LEVEL, lock_flush_tlb);
2449 }
2450
2451 -static bool
2452 +static __always_inline bool
2453 slot_handle_large_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
2454 slot_level_handler fn, bool lock_flush_tlb)
2455 {
2456 @@ -5115,7 +5115,7 @@ slot_handle_large_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
2457 PT_MAX_HUGEPAGE_LEVEL, lock_flush_tlb);
2458 }
2459
2460 -static bool
2461 +static __always_inline bool
2462 slot_handle_leaf(struct kvm *kvm, struct kvm_memory_slot *memslot,
2463 slot_level_handler fn, bool lock_flush_tlb)
2464 {
2465 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
2466 index 6f623848260f..561d8937fac5 100644
2467 --- a/arch/x86/kvm/vmx.c
2468 +++ b/arch/x86/kvm/vmx.c
2469 @@ -10131,7 +10131,8 @@ static void nested_get_vmcs12_pages(struct kvm_vcpu *vcpu,
2470 if (cpu_has_vmx_msr_bitmap() &&
2471 nested_cpu_has(vmcs12, CPU_BASED_USE_MSR_BITMAPS) &&
2472 nested_vmx_merge_msr_bitmap(vcpu, vmcs12))
2473 - ;
2474 + vmcs_set_bits(CPU_BASED_VM_EXEC_CONTROL,
2475 + CPU_BASED_USE_MSR_BITMAPS);
2476 else
2477 vmcs_clear_bits(CPU_BASED_VM_EXEC_CONTROL,
2478 CPU_BASED_USE_MSR_BITMAPS);
2479 @@ -10220,8 +10221,8 @@ static inline bool nested_vmx_merge_msr_bitmap(struct kvm_vcpu *vcpu,
2480 * updated to reflect this when L1 (or its L2s) actually write to
2481 * the MSR.
2482 */
2483 - bool pred_cmd = msr_write_intercepted_l01(vcpu, MSR_IA32_PRED_CMD);
2484 - bool spec_ctrl = msr_write_intercepted_l01(vcpu, MSR_IA32_SPEC_CTRL);
2485 + bool pred_cmd = !msr_write_intercepted_l01(vcpu, MSR_IA32_PRED_CMD);
2486 + bool spec_ctrl = !msr_write_intercepted_l01(vcpu, MSR_IA32_SPEC_CTRL);
2487
2488 if (!nested_cpu_has_virt_x2apic_mode(vmcs12) &&
2489 !pred_cmd && !spec_ctrl)
2490 diff --git a/arch/x86/lib/cpu.c b/arch/x86/lib/cpu.c
2491 index d6f848d1211d..2dd1fe13a37b 100644
2492 --- a/arch/x86/lib/cpu.c
2493 +++ b/arch/x86/lib/cpu.c
2494 @@ -18,7 +18,7 @@ unsigned int x86_model(unsigned int sig)
2495 {
2496 unsigned int fam, model;
2497
2498 - fam = x86_family(sig);
2499 + fam = x86_family(sig);
2500
2501 model = (sig >> 4) & 0xf;
2502
2503 diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
2504 index 4a837289f2ad..60ae1fe3609f 100644
2505 --- a/arch/x86/mm/init_64.c
2506 +++ b/arch/x86/mm/init_64.c
2507 @@ -256,7 +256,7 @@ static void __set_pte_vaddr(pud_t *pud, unsigned long vaddr, pte_t new_pte)
2508 * It's enough to flush this one mapping.
2509 * (PGE mappings get flushed as well)
2510 */
2511 - __flush_tlb_one(vaddr);
2512 + __flush_tlb_one_kernel(vaddr);
2513 }
2514
2515 void set_pte_vaddr_p4d(p4d_t *p4d_page, unsigned long vaddr, pte_t new_pte)
2516 diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
2517 index c45b6ec5357b..e2db83bebc3b 100644
2518 --- a/arch/x86/mm/ioremap.c
2519 +++ b/arch/x86/mm/ioremap.c
2520 @@ -820,5 +820,5 @@ void __init __early_set_fixmap(enum fixed_addresses idx,
2521 set_pte(pte, pfn_pte(phys >> PAGE_SHIFT, flags));
2522 else
2523 pte_clear(&init_mm, addr, pte);
2524 - __flush_tlb_one(addr);
2525 + __flush_tlb_one_kernel(addr);
2526 }
2527 diff --git a/arch/x86/mm/kmmio.c b/arch/x86/mm/kmmio.c
2528 index 58477ec3d66d..7c8686709636 100644
2529 --- a/arch/x86/mm/kmmio.c
2530 +++ b/arch/x86/mm/kmmio.c
2531 @@ -168,7 +168,7 @@ static int clear_page_presence(struct kmmio_fault_page *f, bool clear)
2532 return -1;
2533 }
2534
2535 - __flush_tlb_one(f->addr);
2536 + __flush_tlb_one_kernel(f->addr);
2537 return 0;
2538 }
2539
2540 diff --git a/arch/x86/mm/pgtable_32.c b/arch/x86/mm/pgtable_32.c
2541 index c3c5274410a9..9bb7f0ab9fe6 100644
2542 --- a/arch/x86/mm/pgtable_32.c
2543 +++ b/arch/x86/mm/pgtable_32.c
2544 @@ -63,7 +63,7 @@ void set_pte_vaddr(unsigned long vaddr, pte_t pteval)
2545 * It's enough to flush this one mapping.
2546 * (PGE mappings get flushed as well)
2547 */
2548 - __flush_tlb_one(vaddr);
2549 + __flush_tlb_one_kernel(vaddr);
2550 }
2551
2552 unsigned long __FIXADDR_TOP = 0xfffff000;
2553 diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
2554 index 012d02624848..0c936435ea93 100644
2555 --- a/arch/x86/mm/tlb.c
2556 +++ b/arch/x86/mm/tlb.c
2557 @@ -492,7 +492,7 @@ static void flush_tlb_func_common(const struct flush_tlb_info *f,
2558 * flush that changes context.tlb_gen from 2 to 3. If they get
2559 * processed on this CPU in reverse order, we'll see
2560 * local_tlb_gen == 1, mm_tlb_gen == 3, and end != TLB_FLUSH_ALL.
2561 - * If we were to use __flush_tlb_single() and set local_tlb_gen to
2562 + * If we were to use __flush_tlb_one_user() and set local_tlb_gen to
2563 * 3, we'd be break the invariant: we'd update local_tlb_gen above
2564 * 1 without the full flush that's needed for tlb_gen 2.
2565 *
2566 @@ -513,7 +513,7 @@ static void flush_tlb_func_common(const struct flush_tlb_info *f,
2567
2568 addr = f->start;
2569 while (addr < f->end) {
2570 - __flush_tlb_single(addr);
2571 + __flush_tlb_one_user(addr);
2572 addr += PAGE_SIZE;
2573 }
2574 if (local)
2575 @@ -660,7 +660,7 @@ static void do_kernel_range_flush(void *info)
2576
2577 /* flush range by one by one 'invlpg' */
2578 for (addr = f->start; addr < f->end; addr += PAGE_SIZE)
2579 - __flush_tlb_one(addr);
2580 + __flush_tlb_one_kernel(addr);
2581 }
2582
2583 void flush_tlb_kernel_range(unsigned long start, unsigned long end)
2584 diff --git a/arch/x86/platform/uv/tlb_uv.c b/arch/x86/platform/uv/tlb_uv.c
2585 index 8538a6723171..7d5d53f36a7a 100644
2586 --- a/arch/x86/platform/uv/tlb_uv.c
2587 +++ b/arch/x86/platform/uv/tlb_uv.c
2588 @@ -299,7 +299,7 @@ static void bau_process_message(struct msg_desc *mdp, struct bau_control *bcp,
2589 local_flush_tlb();
2590 stat->d_alltlb++;
2591 } else {
2592 - __flush_tlb_single(msg->address);
2593 + __flush_tlb_one_user(msg->address);
2594 stat->d_onetlb++;
2595 }
2596 stat->d_requestee++;
2597 diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c
2598 index d85076223a69..aae88fec9941 100644
2599 --- a/arch/x86/xen/mmu_pv.c
2600 +++ b/arch/x86/xen/mmu_pv.c
2601 @@ -1300,12 +1300,12 @@ static void xen_flush_tlb(void)
2602 preempt_enable();
2603 }
2604
2605 -static void xen_flush_tlb_single(unsigned long addr)
2606 +static void xen_flush_tlb_one_user(unsigned long addr)
2607 {
2608 struct mmuext_op *op;
2609 struct multicall_space mcs;
2610
2611 - trace_xen_mmu_flush_tlb_single(addr);
2612 + trace_xen_mmu_flush_tlb_one_user(addr);
2613
2614 preempt_disable();
2615
2616 @@ -2370,7 +2370,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = {
2617
2618 .flush_tlb_user = xen_flush_tlb,
2619 .flush_tlb_kernel = xen_flush_tlb,
2620 - .flush_tlb_single = xen_flush_tlb_single,
2621 + .flush_tlb_one_user = xen_flush_tlb_one_user,
2622 .flush_tlb_others = xen_flush_tlb_others,
2623
2624 .pgd_alloc = xen_pgd_alloc,
2625 diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
2626 index 13b4f19b9131..159a897151d6 100644
2627 --- a/arch/x86/xen/p2m.c
2628 +++ b/arch/x86/xen/p2m.c
2629 @@ -694,6 +694,9 @@ int set_foreign_p2m_mapping(struct gnttab_map_grant_ref *map_ops,
2630 int i, ret = 0;
2631 pte_t *pte;
2632
2633 + if (xen_feature(XENFEAT_auto_translated_physmap))
2634 + return 0;
2635 +
2636 if (kmap_ops) {
2637 ret = HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref,
2638 kmap_ops, count);
2639 @@ -736,6 +739,9 @@ int clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops,
2640 {
2641 int i, ret = 0;
2642
2643 + if (xen_feature(XENFEAT_auto_translated_physmap))
2644 + return 0;
2645 +
2646 for (i = 0; i < count; i++) {
2647 unsigned long mfn = __pfn_to_mfn(page_to_pfn(pages[i]));
2648 unsigned long pfn = page_to_pfn(pages[i]);
2649 diff --git a/arch/x86/xen/xen-head.S b/arch/x86/xen/xen-head.S
2650 index 497cc55a0c16..96f26e026783 100644
2651 --- a/arch/x86/xen/xen-head.S
2652 +++ b/arch/x86/xen/xen-head.S
2653 @@ -9,7 +9,9 @@
2654
2655 #include <asm/boot.h>
2656 #include <asm/asm.h>
2657 +#include <asm/msr.h>
2658 #include <asm/page_types.h>
2659 +#include <asm/percpu.h>
2660 #include <asm/unwind_hints.h>
2661
2662 #include <xen/interface/elfnote.h>
2663 @@ -35,6 +37,20 @@ ENTRY(startup_xen)
2664 mov %_ASM_SI, xen_start_info
2665 mov $init_thread_union+THREAD_SIZE, %_ASM_SP
2666
2667 +#ifdef CONFIG_X86_64
2668 + /* Set up %gs.
2669 + *
2670 + * The base of %gs always points to the bottom of the irqstack
2671 + * union. If the stack protector canary is enabled, it is
2672 + * located at %gs:40. Note that, on SMP, the boot cpu uses
2673 + * init data section till per cpu areas are set up.
2674 + */
2675 + movl $MSR_GS_BASE,%ecx
2676 + movq $INIT_PER_CPU_VAR(irq_stack_union),%rax
2677 + cdq
2678 + wrmsr
2679 +#endif
2680 +
2681 jmp xen_start_kernel
2682 END(startup_xen)
2683 __FINIT
2684 diff --git a/block/blk-wbt.c b/block/blk-wbt.c
2685 index ae8de9780085..f92fc84b5e2c 100644
2686 --- a/block/blk-wbt.c
2687 +++ b/block/blk-wbt.c
2688 @@ -697,7 +697,15 @@ u64 wbt_default_latency_nsec(struct request_queue *q)
2689
2690 static int wbt_data_dir(const struct request *rq)
2691 {
2692 - return rq_data_dir(rq);
2693 + const int op = req_op(rq);
2694 +
2695 + if (op == REQ_OP_READ)
2696 + return READ;
2697 + else if (op == REQ_OP_WRITE || op == REQ_OP_FLUSH)
2698 + return WRITE;
2699 +
2700 + /* don't account */
2701 + return -1;
2702 }
2703
2704 int wbt_init(struct request_queue *q)
2705 diff --git a/drivers/base/core.c b/drivers/base/core.c
2706 index 110230d86527..6835736daf2d 100644
2707 --- a/drivers/base/core.c
2708 +++ b/drivers/base/core.c
2709 @@ -313,6 +313,9 @@ static void __device_link_del(struct device_link *link)
2710 dev_info(link->consumer, "Dropping the link to %s\n",
2711 dev_name(link->supplier));
2712
2713 + if (link->flags & DL_FLAG_PM_RUNTIME)
2714 + pm_runtime_drop_link(link->consumer);
2715 +
2716 list_del(&link->s_node);
2717 list_del(&link->c_node);
2718 device_link_free(link);
2719 diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
2720 index cc93522a6d41..1bbf14338bdb 100644
2721 --- a/drivers/block/rbd.c
2722 +++ b/drivers/block/rbd.c
2723 @@ -124,11 +124,13 @@ static int atomic_dec_return_safe(atomic_t *v)
2724 #define RBD_FEATURE_STRIPINGV2 (1ULL<<1)
2725 #define RBD_FEATURE_EXCLUSIVE_LOCK (1ULL<<2)
2726 #define RBD_FEATURE_DATA_POOL (1ULL<<7)
2727 +#define RBD_FEATURE_OPERATIONS (1ULL<<8)
2728
2729 #define RBD_FEATURES_ALL (RBD_FEATURE_LAYERING | \
2730 RBD_FEATURE_STRIPINGV2 | \
2731 RBD_FEATURE_EXCLUSIVE_LOCK | \
2732 - RBD_FEATURE_DATA_POOL)
2733 + RBD_FEATURE_DATA_POOL | \
2734 + RBD_FEATURE_OPERATIONS)
2735
2736 /* Features supported by this (client software) implementation. */
2737
2738 diff --git a/drivers/char/hw_random/via-rng.c b/drivers/char/hw_random/via-rng.c
2739 index d1f5bb534e0e..6e9df558325b 100644
2740 --- a/drivers/char/hw_random/via-rng.c
2741 +++ b/drivers/char/hw_random/via-rng.c
2742 @@ -162,7 +162,7 @@ static int via_rng_init(struct hwrng *rng)
2743 /* Enable secondary noise source on CPUs where it is present. */
2744
2745 /* Nehemiah stepping 8 and higher */
2746 - if ((c->x86_model == 9) && (c->x86_mask > 7))
2747 + if ((c->x86_model == 9) && (c->x86_stepping > 7))
2748 lo |= VIA_NOISESRC2;
2749
2750 /* Esther */
2751 diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c
2752 index 3a2ca0f79daf..d0c34df0529c 100644
2753 --- a/drivers/cpufreq/acpi-cpufreq.c
2754 +++ b/drivers/cpufreq/acpi-cpufreq.c
2755 @@ -629,7 +629,7 @@ static int acpi_cpufreq_blacklist(struct cpuinfo_x86 *c)
2756 if (c->x86_vendor == X86_VENDOR_INTEL) {
2757 if ((c->x86 == 15) &&
2758 (c->x86_model == 6) &&
2759 - (c->x86_mask == 8)) {
2760 + (c->x86_stepping == 8)) {
2761 pr_info("Intel(R) Xeon(R) 7100 Errata AL30, processors may lock up on frequency changes: disabling acpi-cpufreq\n");
2762 return -ENODEV;
2763 }
2764 diff --git a/drivers/cpufreq/longhaul.c b/drivers/cpufreq/longhaul.c
2765 index c46a12df40dd..d5e27bc7585a 100644
2766 --- a/drivers/cpufreq/longhaul.c
2767 +++ b/drivers/cpufreq/longhaul.c
2768 @@ -775,7 +775,7 @@ static int longhaul_cpu_init(struct cpufreq_policy *policy)
2769 break;
2770
2771 case 7:
2772 - switch (c->x86_mask) {
2773 + switch (c->x86_stepping) {
2774 case 0:
2775 longhaul_version = TYPE_LONGHAUL_V1;
2776 cpu_model = CPU_SAMUEL2;
2777 @@ -787,7 +787,7 @@ static int longhaul_cpu_init(struct cpufreq_policy *policy)
2778 break;
2779 case 1 ... 15:
2780 longhaul_version = TYPE_LONGHAUL_V2;
2781 - if (c->x86_mask < 8) {
2782 + if (c->x86_stepping < 8) {
2783 cpu_model = CPU_SAMUEL2;
2784 cpuname = "C3 'Samuel 2' [C5B]";
2785 } else {
2786 @@ -814,7 +814,7 @@ static int longhaul_cpu_init(struct cpufreq_policy *policy)
2787 numscales = 32;
2788 memcpy(mults, nehemiah_mults, sizeof(nehemiah_mults));
2789 memcpy(eblcr, nehemiah_eblcr, sizeof(nehemiah_eblcr));
2790 - switch (c->x86_mask) {
2791 + switch (c->x86_stepping) {
2792 case 0 ... 1:
2793 cpu_model = CPU_NEHEMIAH;
2794 cpuname = "C3 'Nehemiah A' [C5XLOE]";
2795 diff --git a/drivers/cpufreq/p4-clockmod.c b/drivers/cpufreq/p4-clockmod.c
2796 index fd77812313f3..a25741b1281b 100644
2797 --- a/drivers/cpufreq/p4-clockmod.c
2798 +++ b/drivers/cpufreq/p4-clockmod.c
2799 @@ -168,7 +168,7 @@ static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy)
2800 #endif
2801
2802 /* Errata workaround */
2803 - cpuid = (c->x86 << 8) | (c->x86_model << 4) | c->x86_mask;
2804 + cpuid = (c->x86 << 8) | (c->x86_model << 4) | c->x86_stepping;
2805 switch (cpuid) {
2806 case 0x0f07:
2807 case 0x0f0a:
2808 diff --git a/drivers/cpufreq/powernow-k7.c b/drivers/cpufreq/powernow-k7.c
2809 index 80ac313e6c59..302e9ce793a0 100644
2810 --- a/drivers/cpufreq/powernow-k7.c
2811 +++ b/drivers/cpufreq/powernow-k7.c
2812 @@ -131,7 +131,7 @@ static int check_powernow(void)
2813 return 0;
2814 }
2815
2816 - if ((c->x86_model == 6) && (c->x86_mask == 0)) {
2817 + if ((c->x86_model == 6) && (c->x86_stepping == 0)) {
2818 pr_info("K7 660[A0] core detected, enabling errata workarounds\n");
2819 have_a0 = 1;
2820 }
2821 diff --git a/drivers/cpufreq/powernv-cpufreq.c b/drivers/cpufreq/powernv-cpufreq.c
2822 index b6d7c4c98d0a..da7fdb4b661a 100644
2823 --- a/drivers/cpufreq/powernv-cpufreq.c
2824 +++ b/drivers/cpufreq/powernv-cpufreq.c
2825 @@ -288,9 +288,9 @@ static int init_powernv_pstates(void)
2826
2827 if (id == pstate_max)
2828 powernv_pstate_info.max = i;
2829 - else if (id == pstate_nominal)
2830 + if (id == pstate_nominal)
2831 powernv_pstate_info.nominal = i;
2832 - else if (id == pstate_min)
2833 + if (id == pstate_min)
2834 powernv_pstate_info.min = i;
2835
2836 if (powernv_pstate_info.wof_enabled && id == pstate_turbo) {
2837 diff --git a/drivers/cpufreq/speedstep-centrino.c b/drivers/cpufreq/speedstep-centrino.c
2838 index 41bc5397f4bb..4fa5adf16c70 100644
2839 --- a/drivers/cpufreq/speedstep-centrino.c
2840 +++ b/drivers/cpufreq/speedstep-centrino.c
2841 @@ -37,7 +37,7 @@ struct cpu_id
2842 {
2843 __u8 x86; /* CPU family */
2844 __u8 x86_model; /* model */
2845 - __u8 x86_mask; /* stepping */
2846 + __u8 x86_stepping; /* stepping */
2847 };
2848
2849 enum {
2850 @@ -277,7 +277,7 @@ static int centrino_verify_cpu_id(const struct cpuinfo_x86 *c,
2851 {
2852 if ((c->x86 == x->x86) &&
2853 (c->x86_model == x->x86_model) &&
2854 - (c->x86_mask == x->x86_mask))
2855 + (c->x86_stepping == x->x86_stepping))
2856 return 1;
2857 return 0;
2858 }
2859 diff --git a/drivers/cpufreq/speedstep-lib.c b/drivers/cpufreq/speedstep-lib.c
2860 index 8085ec9000d1..e3a9962ee410 100644
2861 --- a/drivers/cpufreq/speedstep-lib.c
2862 +++ b/drivers/cpufreq/speedstep-lib.c
2863 @@ -272,9 +272,9 @@ unsigned int speedstep_detect_processor(void)
2864 ebx = cpuid_ebx(0x00000001);
2865 ebx &= 0x000000FF;
2866
2867 - pr_debug("ebx value is %x, x86_mask is %x\n", ebx, c->x86_mask);
2868 + pr_debug("ebx value is %x, x86_stepping is %x\n", ebx, c->x86_stepping);
2869
2870 - switch (c->x86_mask) {
2871 + switch (c->x86_stepping) {
2872 case 4:
2873 /*
2874 * B-stepping [M-P4-M]
2875 @@ -361,7 +361,7 @@ unsigned int speedstep_detect_processor(void)
2876 msr_lo, msr_hi);
2877 if ((msr_hi & (1<<18)) &&
2878 (relaxed_check ? 1 : (msr_hi & (3<<24)))) {
2879 - if (c->x86_mask == 0x01) {
2880 + if (c->x86_stepping == 0x01) {
2881 pr_debug("early PIII version\n");
2882 return SPEEDSTEP_CPU_PIII_C_EARLY;
2883 } else
2884 diff --git a/drivers/crypto/padlock-aes.c b/drivers/crypto/padlock-aes.c
2885 index 4b6642a25df5..1c6cbda56afe 100644
2886 --- a/drivers/crypto/padlock-aes.c
2887 +++ b/drivers/crypto/padlock-aes.c
2888 @@ -512,7 +512,7 @@ static int __init padlock_init(void)
2889
2890 printk(KERN_NOTICE PFX "Using VIA PadLock ACE for AES algorithm.\n");
2891
2892 - if (c->x86 == 6 && c->x86_model == 15 && c->x86_mask == 2) {
2893 + if (c->x86 == 6 && c->x86_model == 15 && c->x86_stepping == 2) {
2894 ecb_fetch_blocks = MAX_ECB_FETCH_BLOCKS;
2895 cbc_fetch_blocks = MAX_CBC_FETCH_BLOCKS;
2896 printk(KERN_NOTICE PFX "VIA Nano stepping 2 detected: enabling workaround.\n");
2897 diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-prng.c b/drivers/crypto/sunxi-ss/sun4i-ss-prng.c
2898 index 0d01d1624252..63d636424161 100644
2899 --- a/drivers/crypto/sunxi-ss/sun4i-ss-prng.c
2900 +++ b/drivers/crypto/sunxi-ss/sun4i-ss-prng.c
2901 @@ -28,7 +28,7 @@ int sun4i_ss_prng_generate(struct crypto_rng *tfm, const u8 *src,
2902 algt = container_of(alg, struct sun4i_ss_alg_template, alg.rng);
2903 ss = algt->ss;
2904
2905 - spin_lock(&ss->slock);
2906 + spin_lock_bh(&ss->slock);
2907
2908 writel(mode, ss->base + SS_CTL);
2909
2910 @@ -51,6 +51,6 @@ int sun4i_ss_prng_generate(struct crypto_rng *tfm, const u8 *src,
2911 }
2912
2913 writel(0, ss->base + SS_CTL);
2914 - spin_unlock(&ss->slock);
2915 - return dlen;
2916 + spin_unlock_bh(&ss->slock);
2917 + return 0;
2918 }
2919 diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
2920 index 78fb496ecb4e..99c4021fc33b 100644
2921 --- a/drivers/devfreq/devfreq.c
2922 +++ b/drivers/devfreq/devfreq.c
2923 @@ -737,7 +737,7 @@ struct devfreq *devm_devfreq_add_device(struct device *dev,
2924 devfreq = devfreq_add_device(dev, profile, governor_name, data);
2925 if (IS_ERR(devfreq)) {
2926 devres_free(ptr);
2927 - return ERR_PTR(-ENOMEM);
2928 + return devfreq;
2929 }
2930
2931 *ptr = devfreq;
2932 diff --git a/drivers/dma-buf/reservation.c b/drivers/dma-buf/reservation.c
2933 index b44d9d7db347..012fa3d1f407 100644
2934 --- a/drivers/dma-buf/reservation.c
2935 +++ b/drivers/dma-buf/reservation.c
2936 @@ -455,13 +455,15 @@ long reservation_object_wait_timeout_rcu(struct reservation_object *obj,
2937 unsigned long timeout)
2938 {
2939 struct dma_fence *fence;
2940 - unsigned seq, shared_count, i = 0;
2941 + unsigned seq, shared_count;
2942 long ret = timeout ? timeout : 1;
2943 + int i;
2944
2945 retry:
2946 shared_count = 0;
2947 seq = read_seqcount_begin(&obj->seq);
2948 rcu_read_lock();
2949 + i = -1;
2950
2951 fence = rcu_dereference(obj->fence_excl);
2952 if (fence && !test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) {
2953 @@ -477,14 +479,14 @@ long reservation_object_wait_timeout_rcu(struct reservation_object *obj,
2954 fence = NULL;
2955 }
2956
2957 - if (!fence && wait_all) {
2958 + if (wait_all) {
2959 struct reservation_object_list *fobj =
2960 rcu_dereference(obj->fence);
2961
2962 if (fobj)
2963 shared_count = fobj->shared_count;
2964
2965 - for (i = 0; i < shared_count; ++i) {
2966 + for (i = 0; !fence && i < shared_count; ++i) {
2967 struct dma_fence *lfence = rcu_dereference(fobj->shared[i]);
2968
2969 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT,
2970 diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c
2971 index 8b16ec595fa7..329cb96f886f 100644
2972 --- a/drivers/edac/amd64_edac.c
2973 +++ b/drivers/edac/amd64_edac.c
2974 @@ -3147,7 +3147,7 @@ static struct amd64_family_type *per_family_init(struct amd64_pvt *pvt)
2975 struct amd64_family_type *fam_type = NULL;
2976
2977 pvt->ext_model = boot_cpu_data.x86_model >> 4;
2978 - pvt->stepping = boot_cpu_data.x86_mask;
2979 + pvt->stepping = boot_cpu_data.x86_stepping;
2980 pvt->model = boot_cpu_data.x86_model;
2981 pvt->fam = boot_cpu_data.x86;
2982
2983 diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/rv_smumgr.h b/drivers/gpu/drm/amd/powerplay/smumgr/rv_smumgr.h
2984 index 58888400f1b8..caebdbebdcd8 100644
2985 --- a/drivers/gpu/drm/amd/powerplay/smumgr/rv_smumgr.h
2986 +++ b/drivers/gpu/drm/amd/powerplay/smumgr/rv_smumgr.h
2987 @@ -40,7 +40,7 @@ struct smu_table_entry {
2988 uint32_t table_addr_high;
2989 uint32_t table_addr_low;
2990 uint8_t *table;
2991 - uint32_t handle;
2992 + unsigned long handle;
2993 };
2994
2995 struct smu_table_array {
2996 diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
2997 index 9555a3542022..831b73392d82 100644
2998 --- a/drivers/gpu/drm/ast/ast_mode.c
2999 +++ b/drivers/gpu/drm/ast/ast_mode.c
3000 @@ -644,6 +644,7 @@ static void ast_crtc_commit(struct drm_crtc *crtc)
3001 {
3002 struct ast_private *ast = crtc->dev->dev_private;
3003 ast_set_index_reg_mask(ast, AST_IO_SEQ_PORT, 0x1, 0xdf, 0);
3004 + ast_crtc_load_lut(crtc);
3005 }
3006
3007
3008 diff --git a/drivers/gpu/drm/drm_auth.c b/drivers/gpu/drm/drm_auth.c
3009 index aad468d170a7..d9c0f7573905 100644
3010 --- a/drivers/gpu/drm/drm_auth.c
3011 +++ b/drivers/gpu/drm/drm_auth.c
3012 @@ -230,6 +230,12 @@ int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
3013 if (!dev->master)
3014 goto out_unlock;
3015
3016 + if (file_priv->master->lessor != NULL) {
3017 + DRM_DEBUG_LEASE("Attempt to drop lessee %d as master\n", file_priv->master->lessee_id);
3018 + ret = -EINVAL;
3019 + goto out_unlock;
3020 + }
3021 +
3022 ret = 0;
3023 drm_drop_master(dev, file_priv);
3024 out_unlock:
3025 diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
3026 index 4756b3c9bf2c..9a9214ae0fb5 100644
3027 --- a/drivers/gpu/drm/qxl/qxl_display.c
3028 +++ b/drivers/gpu/drm/qxl/qxl_display.c
3029 @@ -289,6 +289,7 @@ static void qxl_crtc_destroy(struct drm_crtc *crtc)
3030 {
3031 struct qxl_crtc *qxl_crtc = to_qxl_crtc(crtc);
3032
3033 + qxl_bo_unref(&qxl_crtc->cursor_bo);
3034 drm_crtc_cleanup(crtc);
3035 kfree(qxl_crtc);
3036 }
3037 @@ -495,6 +496,53 @@ static int qxl_primary_atomic_check(struct drm_plane *plane,
3038 return 0;
3039 }
3040
3041 +static int qxl_primary_apply_cursor(struct drm_plane *plane)
3042 +{
3043 + struct drm_device *dev = plane->dev;
3044 + struct qxl_device *qdev = dev->dev_private;
3045 + struct drm_framebuffer *fb = plane->state->fb;
3046 + struct qxl_crtc *qcrtc = to_qxl_crtc(plane->state->crtc);
3047 + struct qxl_cursor_cmd *cmd;
3048 + struct qxl_release *release;
3049 + int ret = 0;
3050 +
3051 + if (!qcrtc->cursor_bo)
3052 + return 0;
3053 +
3054 + ret = qxl_alloc_release_reserved(qdev, sizeof(*cmd),
3055 + QXL_RELEASE_CURSOR_CMD,
3056 + &release, NULL);
3057 + if (ret)
3058 + return ret;
3059 +
3060 + ret = qxl_release_list_add(release, qcrtc->cursor_bo);
3061 + if (ret)
3062 + goto out_free_release;
3063 +
3064 + ret = qxl_release_reserve_list(release, false);
3065 + if (ret)
3066 + goto out_free_release;
3067 +
3068 + cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release);
3069 + cmd->type = QXL_CURSOR_SET;
3070 + cmd->u.set.position.x = plane->state->crtc_x + fb->hot_x;
3071 + cmd->u.set.position.y = plane->state->crtc_y + fb->hot_y;
3072 +
3073 + cmd->u.set.shape = qxl_bo_physical_address(qdev, qcrtc->cursor_bo, 0);
3074 +
3075 + cmd->u.set.visible = 1;
3076 + qxl_release_unmap(qdev, release, &cmd->release_info);
3077 +
3078 + qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false);
3079 + qxl_release_fence_buffer_objects(release);
3080 +
3081 + return ret;
3082 +
3083 +out_free_release:
3084 + qxl_release_free(qdev, release);
3085 + return ret;
3086 +}
3087 +
3088 static void qxl_primary_atomic_update(struct drm_plane *plane,
3089 struct drm_plane_state *old_state)
3090 {
3091 @@ -510,6 +558,7 @@ static void qxl_primary_atomic_update(struct drm_plane *plane,
3092 .x2 = qfb->base.width,
3093 .y2 = qfb->base.height
3094 };
3095 + int ret;
3096 bool same_shadow = false;
3097
3098 if (old_state->fb) {
3099 @@ -531,6 +580,11 @@ static void qxl_primary_atomic_update(struct drm_plane *plane,
3100 if (!same_shadow)
3101 qxl_io_destroy_primary(qdev);
3102 bo_old->is_primary = false;
3103 +
3104 + ret = qxl_primary_apply_cursor(plane);
3105 + if (ret)
3106 + DRM_ERROR(
3107 + "could not set cursor after creating primary");
3108 }
3109
3110 if (!bo->is_primary) {
3111 @@ -571,11 +625,12 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane,
3112 struct drm_device *dev = plane->dev;
3113 struct qxl_device *qdev = dev->dev_private;
3114 struct drm_framebuffer *fb = plane->state->fb;
3115 + struct qxl_crtc *qcrtc = to_qxl_crtc(plane->state->crtc);
3116 struct qxl_release *release;
3117 struct qxl_cursor_cmd *cmd;
3118 struct qxl_cursor *cursor;
3119 struct drm_gem_object *obj;
3120 - struct qxl_bo *cursor_bo, *user_bo = NULL;
3121 + struct qxl_bo *cursor_bo = NULL, *user_bo = NULL;
3122 int ret;
3123 void *user_ptr;
3124 int size = 64*64*4;
3125 @@ -628,6 +683,10 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane,
3126 cmd->u.set.shape = qxl_bo_physical_address(qdev,
3127 cursor_bo, 0);
3128 cmd->type = QXL_CURSOR_SET;
3129 +
3130 + qxl_bo_unref(&qcrtc->cursor_bo);
3131 + qcrtc->cursor_bo = cursor_bo;
3132 + cursor_bo = NULL;
3133 } else {
3134
3135 ret = qxl_release_reserve_list(release, true);
3136 @@ -645,6 +704,8 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane,
3137 qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false);
3138 qxl_release_fence_buffer_objects(release);
3139
3140 + qxl_bo_unref(&cursor_bo);
3141 +
3142 return;
3143
3144 out_backoff:
3145 diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
3146 index 08752c0ffb35..00a1a66b052a 100644
3147 --- a/drivers/gpu/drm/qxl/qxl_drv.h
3148 +++ b/drivers/gpu/drm/qxl/qxl_drv.h
3149 @@ -111,6 +111,8 @@ struct qxl_bo_list {
3150 struct qxl_crtc {
3151 struct drm_crtc base;
3152 int index;
3153 +
3154 + struct qxl_bo *cursor_bo;
3155 };
3156
3157 struct qxl_output {
3158 diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c
3159 index d34d1cf33895..95f4db70dd22 100644
3160 --- a/drivers/gpu/drm/radeon/radeon_uvd.c
3161 +++ b/drivers/gpu/drm/radeon/radeon_uvd.c
3162 @@ -995,7 +995,7 @@ int radeon_uvd_calc_upll_dividers(struct radeon_device *rdev,
3163 /* calc dclk divider with current vco freq */
3164 dclk_div = radeon_uvd_calc_upll_post_div(vco_freq, dclk,
3165 pd_min, pd_even);
3166 - if (vclk_div > pd_max)
3167 + if (dclk_div > pd_max)
3168 break; /* vco is too big, it has to stop */
3169
3170 /* calc score with current vco freq */
3171 diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c
3172 index ee3e74266a13..97a0a639dad9 100644
3173 --- a/drivers/gpu/drm/radeon/si_dpm.c
3174 +++ b/drivers/gpu/drm/radeon/si_dpm.c
3175 @@ -2984,6 +2984,11 @@ static void si_apply_state_adjust_rules(struct radeon_device *rdev,
3176 (rdev->pdev->device == 0x6667)) {
3177 max_sclk = 75000;
3178 }
3179 + if ((rdev->pdev->revision == 0xC3) ||
3180 + (rdev->pdev->device == 0x6665)) {
3181 + max_sclk = 60000;
3182 + max_mclk = 80000;
3183 + }
3184 } else if (rdev->family == CHIP_OLAND) {
3185 if ((rdev->pdev->revision == 0xC7) ||
3186 (rdev->pdev->revision == 0x80) ||
3187 diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
3188 index c088703777e2..68eed684dff5 100644
3189 --- a/drivers/gpu/drm/ttm/ttm_bo.c
3190 +++ b/drivers/gpu/drm/ttm/ttm_bo.c
3191 @@ -175,7 +175,8 @@ void ttm_bo_add_to_lru(struct ttm_buffer_object *bo)
3192 list_add_tail(&bo->lru, &man->lru[bo->priority]);
3193 kref_get(&bo->list_kref);
3194
3195 - if (bo->ttm && !(bo->ttm->page_flags & TTM_PAGE_FLAG_SG)) {
3196 + if (bo->ttm && !(bo->ttm->page_flags &
3197 + (TTM_PAGE_FLAG_SG | TTM_PAGE_FLAG_SWAPPED))) {
3198 list_add_tail(&bo->swap,
3199 &bo->glob->swap_lru[bo->priority]);
3200 kref_get(&bo->list_kref);
3201 diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c
3202 index c8ebb757e36b..b17d0d38f290 100644
3203 --- a/drivers/gpu/drm/ttm/ttm_bo_vm.c
3204 +++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c
3205 @@ -299,7 +299,7 @@ static void ttm_bo_vm_close(struct vm_area_struct *vma)
3206
3207 static int ttm_bo_vm_access_kmap(struct ttm_buffer_object *bo,
3208 unsigned long offset,
3209 - void *buf, int len, int write)
3210 + uint8_t *buf, int len, int write)
3211 {
3212 unsigned long page = offset >> PAGE_SHIFT;
3213 unsigned long bytes_left = len;
3214 @@ -328,6 +328,7 @@ static int ttm_bo_vm_access_kmap(struct ttm_buffer_object *bo,
3215 ttm_bo_kunmap(&map);
3216
3217 page++;
3218 + buf += bytes;
3219 bytes_left -= bytes;
3220 offset = 0;
3221 } while (bytes_left);
3222 diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
3223 index c13a4fd86b3c..a42744c7665b 100644
3224 --- a/drivers/hwmon/coretemp.c
3225 +++ b/drivers/hwmon/coretemp.c
3226 @@ -268,13 +268,13 @@ static int adjust_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev)
3227 for (i = 0; i < ARRAY_SIZE(tjmax_model_table); i++) {
3228 const struct tjmax_model *tm = &tjmax_model_table[i];
3229 if (c->x86_model == tm->model &&
3230 - (tm->mask == ANY || c->x86_mask == tm->mask))
3231 + (tm->mask == ANY || c->x86_stepping == tm->mask))
3232 return tm->tjmax;
3233 }
3234
3235 /* Early chips have no MSR for TjMax */
3236
3237 - if (c->x86_model == 0xf && c->x86_mask < 4)
3238 + if (c->x86_model == 0xf && c->x86_stepping < 4)
3239 usemsr_ee = 0;
3240
3241 if (c->x86_model > 0xe && usemsr_ee) {
3242 @@ -425,7 +425,7 @@ static int chk_ucode_version(unsigned int cpu)
3243 * Readings might stop update when processor visited too deep sleep,
3244 * fixed for stepping D0 (6EC).
3245 */
3246 - if (c->x86_model == 0xe && c->x86_mask < 0xc && c->microcode < 0x39) {
3247 + if (c->x86_model == 0xe && c->x86_stepping < 0xc && c->microcode < 0x39) {
3248 pr_err("Errata AE18 not fixed, update BIOS or microcode of the CPU!\n");
3249 return -ENODEV;
3250 }
3251 diff --git a/drivers/hwmon/hwmon-vid.c b/drivers/hwmon/hwmon-vid.c
3252 index ef91b8a67549..84e91286fc4f 100644
3253 --- a/drivers/hwmon/hwmon-vid.c
3254 +++ b/drivers/hwmon/hwmon-vid.c
3255 @@ -293,7 +293,7 @@ u8 vid_which_vrm(void)
3256 if (c->x86 < 6) /* Any CPU with family lower than 6 */
3257 return 0; /* doesn't have VID */
3258
3259 - vrm_ret = find_vrm(c->x86, c->x86_model, c->x86_mask, c->x86_vendor);
3260 + vrm_ret = find_vrm(c->x86, c->x86_model, c->x86_stepping, c->x86_vendor);
3261 if (vrm_ret == 134)
3262 vrm_ret = get_via_model_d_vrm();
3263 if (vrm_ret == 0)
3264 diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
3265 index 0721e175664a..b960015cb073 100644
3266 --- a/drivers/hwmon/k10temp.c
3267 +++ b/drivers/hwmon/k10temp.c
3268 @@ -226,7 +226,7 @@ static bool has_erratum_319(struct pci_dev *pdev)
3269 * and AM3 formats, but that's the best we can do.
3270 */
3271 return boot_cpu_data.x86_model < 4 ||
3272 - (boot_cpu_data.x86_model == 4 && boot_cpu_data.x86_mask <= 2);
3273 + (boot_cpu_data.x86_model == 4 && boot_cpu_data.x86_stepping <= 2);
3274 }
3275
3276 static int k10temp_probe(struct pci_dev *pdev,
3277 diff --git a/drivers/hwmon/k8temp.c b/drivers/hwmon/k8temp.c
3278 index 5a632bcf869b..e59f9113fb93 100644
3279 --- a/drivers/hwmon/k8temp.c
3280 +++ b/drivers/hwmon/k8temp.c
3281 @@ -187,7 +187,7 @@ static int k8temp_probe(struct pci_dev *pdev,
3282 return -ENOMEM;
3283
3284 model = boot_cpu_data.x86_model;
3285 - stepping = boot_cpu_data.x86_mask;
3286 + stepping = boot_cpu_data.x86_stepping;
3287
3288 /* feature available since SH-C0, exclude older revisions */
3289 if ((model == 4 && stepping == 0) ||
3290 diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
3291 index 465520627e4b..d7d042a20ab4 100644
3292 --- a/drivers/infiniband/core/device.c
3293 +++ b/drivers/infiniband/core/device.c
3294 @@ -462,7 +462,6 @@ int ib_register_device(struct ib_device *device,
3295 struct ib_udata uhw = {.outlen = 0, .inlen = 0};
3296 struct device *parent = device->dev.parent;
3297
3298 - WARN_ON_ONCE(!parent);
3299 WARN_ON_ONCE(device->dma_device);
3300 if (device->dev.dma_ops) {
3301 /*
3302 @@ -471,16 +470,25 @@ int ib_register_device(struct ib_device *device,
3303 * into device->dev.
3304 */
3305 device->dma_device = &device->dev;
3306 - if (!device->dev.dma_mask)
3307 - device->dev.dma_mask = parent->dma_mask;
3308 - if (!device->dev.coherent_dma_mask)
3309 - device->dev.coherent_dma_mask =
3310 - parent->coherent_dma_mask;
3311 + if (!device->dev.dma_mask) {
3312 + if (parent)
3313 + device->dev.dma_mask = parent->dma_mask;
3314 + else
3315 + WARN_ON_ONCE(true);
3316 + }
3317 + if (!device->dev.coherent_dma_mask) {
3318 + if (parent)
3319 + device->dev.coherent_dma_mask =
3320 + parent->coherent_dma_mask;
3321 + else
3322 + WARN_ON_ONCE(true);
3323 + }
3324 } else {
3325 /*
3326 * The caller did not provide custom DMA operations. Use the
3327 * DMA mapping operations of the parent device.
3328 */
3329 + WARN_ON_ONCE(!parent);
3330 device->dma_device = parent;
3331 }
3332
3333 diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c
3334 index e30d86fa1855..8ae1308eecc7 100644
3335 --- a/drivers/infiniband/core/sysfs.c
3336 +++ b/drivers/infiniband/core/sysfs.c
3337 @@ -1276,7 +1276,6 @@ int ib_device_register_sysfs(struct ib_device *device,
3338 int ret;
3339 int i;
3340
3341 - WARN_ON_ONCE(!device->dev.parent);
3342 ret = dev_set_name(class_dev, "%s", device->name);
3343 if (ret)
3344 return ret;
3345 diff --git a/drivers/infiniband/core/user_mad.c b/drivers/infiniband/core/user_mad.c
3346 index 4b64dd02e090..3205800f9579 100644
3347 --- a/drivers/infiniband/core/user_mad.c
3348 +++ b/drivers/infiniband/core/user_mad.c
3349 @@ -500,7 +500,7 @@ static ssize_t ib_umad_write(struct file *filp, const char __user *buf,
3350 }
3351
3352 memset(&ah_attr, 0, sizeof ah_attr);
3353 - ah_attr.type = rdma_ah_find_type(file->port->ib_dev,
3354 + ah_attr.type = rdma_ah_find_type(agent->device,
3355 file->port->port_num);
3356 rdma_ah_set_dlid(&ah_attr, be16_to_cpu(packet->mad.hdr.lid));
3357 rdma_ah_set_sl(&ah_attr, packet->mad.hdr.sl);
3358 diff --git a/drivers/infiniband/core/uverbs_std_types.c b/drivers/infiniband/core/uverbs_std_types.c
3359 index c3ee5d9b336d..cca70d36ee15 100644
3360 --- a/drivers/infiniband/core/uverbs_std_types.c
3361 +++ b/drivers/infiniband/core/uverbs_std_types.c
3362 @@ -315,7 +315,7 @@ static int uverbs_create_cq_handler(struct ib_device *ib_dev,
3363 cq->uobject = &obj->uobject;
3364 cq->comp_handler = ib_uverbs_comp_handler;
3365 cq->event_handler = ib_uverbs_cq_event_handler;
3366 - cq->cq_context = &ev_file->ev_queue;
3367 + cq->cq_context = ev_file ? &ev_file->ev_queue : NULL;
3368 obj->uobject.object = cq;
3369 obj->uobject.user_handle = user_handle;
3370 atomic_set(&cq->usecnt, 0);
3371 diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
3372 index 8c8a16791a3f..5caf37ba7fff 100644
3373 --- a/drivers/infiniband/hw/mlx4/main.c
3374 +++ b/drivers/infiniband/hw/mlx4/main.c
3375 @@ -2995,9 +2995,8 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
3376 kfree(ibdev->ib_uc_qpns_bitmap);
3377
3378 err_steer_qp_release:
3379 - if (ibdev->steering_support == MLX4_STEERING_MODE_DEVICE_MANAGED)
3380 - mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
3381 - ibdev->steer_qpn_count);
3382 + mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
3383 + ibdev->steer_qpn_count);
3384 err_counter:
3385 for (i = 0; i < ibdev->num_ports; ++i)
3386 mlx4_ib_delete_counters_table(ibdev, &ibdev->counters_table[i]);
3387 @@ -3102,11 +3101,9 @@ static void mlx4_ib_remove(struct mlx4_dev *dev, void *ibdev_ptr)
3388 ibdev->iboe.nb.notifier_call = NULL;
3389 }
3390
3391 - if (ibdev->steering_support == MLX4_STEERING_MODE_DEVICE_MANAGED) {
3392 - mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
3393 - ibdev->steer_qpn_count);
3394 - kfree(ibdev->ib_uc_qpns_bitmap);
3395 - }
3396 + mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
3397 + ibdev->steer_qpn_count);
3398 + kfree(ibdev->ib_uc_qpns_bitmap);
3399
3400 iounmap(ibdev->uar_map);
3401 for (p = 0; p < ibdev->num_ports; ++p)
3402 diff --git a/drivers/infiniband/hw/qib/qib_rc.c b/drivers/infiniband/hw/qib/qib_rc.c
3403 index 8f5754fb8579..e4a9ba1dd9ba 100644
3404 --- a/drivers/infiniband/hw/qib/qib_rc.c
3405 +++ b/drivers/infiniband/hw/qib/qib_rc.c
3406 @@ -434,13 +434,13 @@ int qib_make_rc_req(struct rvt_qp *qp, unsigned long *flags)
3407 qp->s_state = OP(COMPARE_SWAP);
3408 put_ib_ateth_swap(wqe->atomic_wr.swap,
3409 &ohdr->u.atomic_eth);
3410 - put_ib_ateth_swap(wqe->atomic_wr.compare_add,
3411 - &ohdr->u.atomic_eth);
3412 + put_ib_ateth_compare(wqe->atomic_wr.compare_add,
3413 + &ohdr->u.atomic_eth);
3414 } else {
3415 qp->s_state = OP(FETCH_ADD);
3416 put_ib_ateth_swap(wqe->atomic_wr.compare_add,
3417 &ohdr->u.atomic_eth);
3418 - put_ib_ateth_swap(0, &ohdr->u.atomic_eth);
3419 + put_ib_ateth_compare(0, &ohdr->u.atomic_eth);
3420 }
3421 put_ib_ateth_vaddr(wqe->atomic_wr.remote_addr,
3422 &ohdr->u.atomic_eth);
3423 diff --git a/drivers/infiniband/sw/rxe/rxe_loc.h b/drivers/infiniband/sw/rxe/rxe_loc.h
3424 index d7472a442a2c..96c3a6c5c4b5 100644
3425 --- a/drivers/infiniband/sw/rxe/rxe_loc.h
3426 +++ b/drivers/infiniband/sw/rxe/rxe_loc.h
3427 @@ -237,7 +237,6 @@ int rxe_srq_from_attr(struct rxe_dev *rxe, struct rxe_srq *srq,
3428
3429 void rxe_release(struct kref *kref);
3430
3431 -void rxe_drain_req_pkts(struct rxe_qp *qp, bool notify);
3432 int rxe_completer(void *arg);
3433 int rxe_requester(void *arg);
3434 int rxe_responder(void *arg);
3435 diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
3436 index 4469592b839d..137d6c0c49d4 100644
3437 --- a/drivers/infiniband/sw/rxe/rxe_qp.c
3438 +++ b/drivers/infiniband/sw/rxe/rxe_qp.c
3439 @@ -824,9 +824,9 @@ void rxe_qp_destroy(struct rxe_qp *qp)
3440 }
3441
3442 /* called when the last reference to the qp is dropped */
3443 -void rxe_qp_cleanup(struct rxe_pool_entry *arg)
3444 +static void rxe_qp_do_cleanup(struct work_struct *work)
3445 {
3446 - struct rxe_qp *qp = container_of(arg, typeof(*qp), pelem);
3447 + struct rxe_qp *qp = container_of(work, typeof(*qp), cleanup_work.work);
3448
3449 rxe_drop_all_mcast_groups(qp);
3450
3451 @@ -859,3 +859,11 @@ void rxe_qp_cleanup(struct rxe_pool_entry *arg)
3452 kernel_sock_shutdown(qp->sk, SHUT_RDWR);
3453 sock_release(qp->sk);
3454 }
3455 +
3456 +/* called when the last reference to the qp is dropped */
3457 +void rxe_qp_cleanup(struct rxe_pool_entry *arg)
3458 +{
3459 + struct rxe_qp *qp = container_of(arg, typeof(*qp), pelem);
3460 +
3461 + execute_in_process_context(rxe_qp_do_cleanup, &qp->cleanup_work);
3462 +}
3463 diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rxe/rxe_req.c
3464 index 26a7f923045b..7bdaf71b8221 100644
3465 --- a/drivers/infiniband/sw/rxe/rxe_req.c
3466 +++ b/drivers/infiniband/sw/rxe/rxe_req.c
3467 @@ -594,15 +594,8 @@ int rxe_requester(void *arg)
3468 rxe_add_ref(qp);
3469
3470 next_wqe:
3471 - if (unlikely(!qp->valid)) {
3472 - rxe_drain_req_pkts(qp, true);
3473 + if (unlikely(!qp->valid || qp->req.state == QP_STATE_ERROR))
3474 goto exit;
3475 - }
3476 -
3477 - if (unlikely(qp->req.state == QP_STATE_ERROR)) {
3478 - rxe_drain_req_pkts(qp, true);
3479 - goto exit;
3480 - }
3481
3482 if (unlikely(qp->req.state == QP_STATE_RESET)) {
3483 qp->req.wqe_index = consumer_index(qp->sq.queue);
3484 diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c
3485 index 4240866a5331..01f926fd9029 100644
3486 --- a/drivers/infiniband/sw/rxe/rxe_resp.c
3487 +++ b/drivers/infiniband/sw/rxe/rxe_resp.c
3488 @@ -1210,7 +1210,7 @@ static enum resp_states do_class_d1e_error(struct rxe_qp *qp)
3489 }
3490 }
3491
3492 -void rxe_drain_req_pkts(struct rxe_qp *qp, bool notify)
3493 +static void rxe_drain_req_pkts(struct rxe_qp *qp, bool notify)
3494 {
3495 struct sk_buff *skb;
3496
3497 diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c
3498 index d03002b9d84d..7210a784abb4 100644
3499 --- a/drivers/infiniband/sw/rxe/rxe_verbs.c
3500 +++ b/drivers/infiniband/sw/rxe/rxe_verbs.c
3501 @@ -814,6 +814,8 @@ static int rxe_post_send_kernel(struct rxe_qp *qp, struct ib_send_wr *wr,
3502 (queue_count(qp->sq.queue) > 1);
3503
3504 rxe_run_task(&qp->req.task, must_sched);
3505 + if (unlikely(qp->req.state == QP_STATE_ERROR))
3506 + rxe_run_task(&qp->comp.task, 1);
3507
3508 return err;
3509 }
3510 diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.h b/drivers/infiniband/sw/rxe/rxe_verbs.h
3511 index 0c2dbe45c729..1019f5e7dbdd 100644
3512 --- a/drivers/infiniband/sw/rxe/rxe_verbs.h
3513 +++ b/drivers/infiniband/sw/rxe/rxe_verbs.h
3514 @@ -35,6 +35,7 @@
3515 #define RXE_VERBS_H
3516
3517 #include <linux/interrupt.h>
3518 +#include <linux/workqueue.h>
3519 #include <rdma/rdma_user_rxe.h>
3520 #include "rxe_pool.h"
3521 #include "rxe_task.h"
3522 @@ -281,6 +282,8 @@ struct rxe_qp {
3523 struct timer_list rnr_nak_timer;
3524
3525 spinlock_t state_lock; /* guard requester and completer */
3526 +
3527 + struct execute_work cleanup_work;
3528 };
3529
3530 enum rxe_mem_state {
3531 diff --git a/drivers/md/dm.c b/drivers/md/dm.c
3532 index de17b7193299..1c42b00d3be2 100644
3533 --- a/drivers/md/dm.c
3534 +++ b/drivers/md/dm.c
3535 @@ -817,7 +817,8 @@ static void dec_pending(struct dm_io *io, blk_status_t error)
3536 queue_io(md, bio);
3537 } else {
3538 /* done with normal IO or empty flush */
3539 - bio->bi_status = io_error;
3540 + if (io_error)
3541 + bio->bi_status = io_error;
3542 bio_endio(bio);
3543 }
3544 }
3545 diff --git a/drivers/media/tuners/r820t.c b/drivers/media/tuners/r820t.c
3546 index ba80376a3b86..d097eb04a0e9 100644
3547 --- a/drivers/media/tuners/r820t.c
3548 +++ b/drivers/media/tuners/r820t.c
3549 @@ -396,9 +396,11 @@ static int r820t_write(struct r820t_priv *priv, u8 reg, const u8 *val,
3550 return 0;
3551 }
3552
3553 -static int r820t_write_reg(struct r820t_priv *priv, u8 reg, u8 val)
3554 +static inline int r820t_write_reg(struct r820t_priv *priv, u8 reg, u8 val)
3555 {
3556 - return r820t_write(priv, reg, &val, 1);
3557 + u8 tmp = val; /* work around GCC PR81715 with asan-stack=1 */
3558 +
3559 + return r820t_write(priv, reg, &tmp, 1);
3560 }
3561
3562 static int r820t_read_cache_reg(struct r820t_priv *priv, int reg)
3563 @@ -411,17 +413,18 @@ static int r820t_read_cache_reg(struct r820t_priv *priv, int reg)
3564 return -EINVAL;
3565 }
3566
3567 -static int r820t_write_reg_mask(struct r820t_priv *priv, u8 reg, u8 val,
3568 +static inline int r820t_write_reg_mask(struct r820t_priv *priv, u8 reg, u8 val,
3569 u8 bit_mask)
3570 {
3571 + u8 tmp = val;
3572 int rc = r820t_read_cache_reg(priv, reg);
3573
3574 if (rc < 0)
3575 return rc;
3576
3577 - val = (rc & ~bit_mask) | (val & bit_mask);
3578 + tmp = (rc & ~bit_mask) | (tmp & bit_mask);
3579
3580 - return r820t_write(priv, reg, &val, 1);
3581 + return r820t_write(priv, reg, &tmp, 1);
3582 }
3583
3584 static int r820t_read(struct r820t_priv *priv, u8 reg, u8 *val, int len)
3585 diff --git a/drivers/mmc/host/bcm2835.c b/drivers/mmc/host/bcm2835.c
3586 index 229dc18f0581..768972af8b85 100644
3587 --- a/drivers/mmc/host/bcm2835.c
3588 +++ b/drivers/mmc/host/bcm2835.c
3589 @@ -1265,7 +1265,8 @@ static int bcm2835_add_host(struct bcm2835_host *host)
3590 char pio_limit_string[20];
3591 int ret;
3592
3593 - mmc->f_max = host->max_clk;
3594 + if (!mmc->f_max || mmc->f_max > host->max_clk)
3595 + mmc->f_max = host->max_clk;
3596 mmc->f_min = host->max_clk / SDCDIV_MAX_CDIV;
3597
3598 mmc->max_busy_timeout = ~0 / (mmc->f_max / 1000);
3599 diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
3600 index e0862d3f65b3..730fbe01726d 100644
3601 --- a/drivers/mmc/host/meson-gx-mmc.c
3602 +++ b/drivers/mmc/host/meson-gx-mmc.c
3603 @@ -716,22 +716,6 @@ static int meson_mmc_clk_phase_tuning(struct mmc_host *mmc, u32 opcode,
3604 static int meson_mmc_execute_tuning(struct mmc_host *mmc, u32 opcode)
3605 {
3606 struct meson_host *host = mmc_priv(mmc);
3607 - int ret;
3608 -
3609 - /*
3610 - * If this is the initial tuning, try to get a sane Rx starting
3611 - * phase before doing the actual tuning.
3612 - */
3613 - if (!mmc->doing_retune) {
3614 - ret = meson_mmc_clk_phase_tuning(mmc, opcode, host->rx_clk);
3615 -
3616 - if (ret)
3617 - return ret;
3618 - }
3619 -
3620 - ret = meson_mmc_clk_phase_tuning(mmc, opcode, host->tx_clk);
3621 - if (ret)
3622 - return ret;
3623
3624 return meson_mmc_clk_phase_tuning(mmc, opcode, host->rx_clk);
3625 }
3626 @@ -762,9 +746,8 @@ static void meson_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
3627 if (!IS_ERR(mmc->supply.vmmc))
3628 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, ios->vdd);
3629
3630 - /* Reset phases */
3631 + /* Reset rx phase */
3632 clk_set_phase(host->rx_clk, 0);
3633 - clk_set_phase(host->tx_clk, 270);
3634
3635 break;
3636
3637 diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c
3638 index 1f424374bbbb..4ffa6b173a21 100644
3639 --- a/drivers/mmc/host/sdhci-of-esdhc.c
3640 +++ b/drivers/mmc/host/sdhci-of-esdhc.c
3641 @@ -589,10 +589,18 @@ static void esdhc_pltfm_set_bus_width(struct sdhci_host *host, int width)
3642
3643 static void esdhc_reset(struct sdhci_host *host, u8 mask)
3644 {
3645 + u32 val;
3646 +
3647 sdhci_reset(host, mask);
3648
3649 sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
3650 sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
3651 +
3652 + if (mask & SDHCI_RESET_ALL) {
3653 + val = sdhci_readl(host, ESDHC_TBCTL);
3654 + val &= ~ESDHC_TB_EN;
3655 + sdhci_writel(host, val, ESDHC_TBCTL);
3656 + }
3657 }
3658
3659 /* The SCFG, Supplemental Configuration Unit, provides SoC specific
3660 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
3661 index e9290a3439d5..d24306b2b839 100644
3662 --- a/drivers/mmc/host/sdhci.c
3663 +++ b/drivers/mmc/host/sdhci.c
3664 @@ -21,6 +21,7 @@
3665 #include <linux/dma-mapping.h>
3666 #include <linux/slab.h>
3667 #include <linux/scatterlist.h>
3668 +#include <linux/sizes.h>
3669 #include <linux/swiotlb.h>
3670 #include <linux/regulator/consumer.h>
3671 #include <linux/pm_runtime.h>
3672 @@ -502,8 +503,35 @@ static int sdhci_pre_dma_transfer(struct sdhci_host *host,
3673 if (data->host_cookie == COOKIE_PRE_MAPPED)
3674 return data->sg_count;
3675
3676 - sg_count = dma_map_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
3677 - mmc_get_dma_dir(data));
3678 + /* Bounce write requests to the bounce buffer */
3679 + if (host->bounce_buffer) {
3680 + unsigned int length = data->blksz * data->blocks;
3681 +
3682 + if (length > host->bounce_buffer_size) {
3683 + pr_err("%s: asked for transfer of %u bytes exceeds bounce buffer %u bytes\n",
3684 + mmc_hostname(host->mmc), length,
3685 + host->bounce_buffer_size);
3686 + return -EIO;
3687 + }
3688 + if (mmc_get_dma_dir(data) == DMA_TO_DEVICE) {
3689 + /* Copy the data to the bounce buffer */
3690 + sg_copy_to_buffer(data->sg, data->sg_len,
3691 + host->bounce_buffer,
3692 + length);
3693 + }
3694 + /* Switch ownership to the DMA */
3695 + dma_sync_single_for_device(host->mmc->parent,
3696 + host->bounce_addr,
3697 + host->bounce_buffer_size,
3698 + mmc_get_dma_dir(data));
3699 + /* Just a dummy value */
3700 + sg_count = 1;
3701 + } else {
3702 + /* Just access the data directly from memory */
3703 + sg_count = dma_map_sg(mmc_dev(host->mmc),
3704 + data->sg, data->sg_len,
3705 + mmc_get_dma_dir(data));
3706 + }
3707
3708 if (sg_count == 0)
3709 return -ENOSPC;
3710 @@ -673,6 +701,14 @@ static void sdhci_adma_table_post(struct sdhci_host *host,
3711 }
3712 }
3713
3714 +static u32 sdhci_sdma_address(struct sdhci_host *host)
3715 +{
3716 + if (host->bounce_buffer)
3717 + return host->bounce_addr;
3718 + else
3719 + return sg_dma_address(host->data->sg);
3720 +}
3721 +
3722 static u8 sdhci_calc_timeout(struct sdhci_host *host, struct mmc_command *cmd)
3723 {
3724 u8 count;
3725 @@ -858,8 +894,8 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd)
3726 SDHCI_ADMA_ADDRESS_HI);
3727 } else {
3728 WARN_ON(sg_cnt != 1);
3729 - sdhci_writel(host, sg_dma_address(data->sg),
3730 - SDHCI_DMA_ADDRESS);
3731 + sdhci_writel(host, sdhci_sdma_address(host),
3732 + SDHCI_DMA_ADDRESS);
3733 }
3734 }
3735
3736 @@ -2248,7 +2284,12 @@ static void sdhci_pre_req(struct mmc_host *mmc, struct mmc_request *mrq)
3737
3738 mrq->data->host_cookie = COOKIE_UNMAPPED;
3739
3740 - if (host->flags & SDHCI_REQ_USE_DMA)
3741 + /*
3742 + * No pre-mapping in the pre hook if we're using the bounce buffer,
3743 + * for that we would need two bounce buffers since one buffer is
3744 + * in flight when this is getting called.
3745 + */
3746 + if (host->flags & SDHCI_REQ_USE_DMA && !host->bounce_buffer)
3747 sdhci_pre_dma_transfer(host, mrq->data, COOKIE_PRE_MAPPED);
3748 }
3749
3750 @@ -2352,8 +2393,45 @@ static bool sdhci_request_done(struct sdhci_host *host)
3751 struct mmc_data *data = mrq->data;
3752
3753 if (data && data->host_cookie == COOKIE_MAPPED) {
3754 - dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
3755 - mmc_get_dma_dir(data));
3756 + if (host->bounce_buffer) {
3757 + /*
3758 + * On reads, copy the bounced data into the
3759 + * sglist
3760 + */
3761 + if (mmc_get_dma_dir(data) == DMA_FROM_DEVICE) {
3762 + unsigned int length = data->bytes_xfered;
3763 +
3764 + if (length > host->bounce_buffer_size) {
3765 + pr_err("%s: bounce buffer is %u bytes but DMA claims to have transferred %u bytes\n",
3766 + mmc_hostname(host->mmc),
3767 + host->bounce_buffer_size,
3768 + data->bytes_xfered);
3769 + /* Cap it down and continue */
3770 + length = host->bounce_buffer_size;
3771 + }
3772 + dma_sync_single_for_cpu(
3773 + host->mmc->parent,
3774 + host->bounce_addr,
3775 + host->bounce_buffer_size,
3776 + DMA_FROM_DEVICE);
3777 + sg_copy_from_buffer(data->sg,
3778 + data->sg_len,
3779 + host->bounce_buffer,
3780 + length);
3781 + } else {
3782 + /* No copying, just switch ownership */
3783 + dma_sync_single_for_cpu(
3784 + host->mmc->parent,
3785 + host->bounce_addr,
3786 + host->bounce_buffer_size,
3787 + mmc_get_dma_dir(data));
3788 + }
3789 + } else {
3790 + /* Unmap the raw data */
3791 + dma_unmap_sg(mmc_dev(host->mmc), data->sg,
3792 + data->sg_len,
3793 + mmc_get_dma_dir(data));
3794 + }
3795 data->host_cookie = COOKIE_UNMAPPED;
3796 }
3797 }
3798 @@ -2636,7 +2714,8 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask)
3799 */
3800 if (intmask & SDHCI_INT_DMA_END) {
3801 u32 dmastart, dmanow;
3802 - dmastart = sg_dma_address(host->data->sg);
3803 +
3804 + dmastart = sdhci_sdma_address(host);
3805 dmanow = dmastart + host->data->bytes_xfered;
3806 /*
3807 * Force update to the next DMA block boundary.
3808 @@ -3217,6 +3296,68 @@ void __sdhci_read_caps(struct sdhci_host *host, u16 *ver, u32 *caps, u32 *caps1)
3809 }
3810 EXPORT_SYMBOL_GPL(__sdhci_read_caps);
3811
3812 +static int sdhci_allocate_bounce_buffer(struct sdhci_host *host)
3813 +{
3814 + struct mmc_host *mmc = host->mmc;
3815 + unsigned int max_blocks;
3816 + unsigned int bounce_size;
3817 + int ret;
3818 +
3819 + /*
3820 + * Cap the bounce buffer at 64KB. Using a bigger bounce buffer
3821 + * has diminishing returns, this is probably because SD/MMC
3822 + * cards are usually optimized to handle this size of requests.
3823 + */
3824 + bounce_size = SZ_64K;
3825 + /*
3826 + * Adjust downwards to maximum request size if this is less
3827 + * than our segment size, else hammer down the maximum
3828 + * request size to the maximum buffer size.
3829 + */
3830 + if (mmc->max_req_size < bounce_size)
3831 + bounce_size = mmc->max_req_size;
3832 + max_blocks = bounce_size / 512;
3833 +
3834 + /*
3835 + * When we just support one segment, we can get significant
3836 + * speedups by the help of a bounce buffer to group scattered
3837 + * reads/writes together.
3838 + */
3839 + host->bounce_buffer = devm_kmalloc(mmc->parent,
3840 + bounce_size,
3841 + GFP_KERNEL);
3842 + if (!host->bounce_buffer) {
3843 + pr_err("%s: failed to allocate %u bytes for bounce buffer, falling back to single segments\n",
3844 + mmc_hostname(mmc),
3845 + bounce_size);
3846 + /*
3847 + * Exiting with zero here makes sure we proceed with
3848 + * mmc->max_segs == 1.
3849 + */
3850 + return 0;
3851 + }
3852 +
3853 + host->bounce_addr = dma_map_single(mmc->parent,
3854 + host->bounce_buffer,
3855 + bounce_size,
3856 + DMA_BIDIRECTIONAL);
3857 + ret = dma_mapping_error(mmc->parent, host->bounce_addr);
3858 + if (ret)
3859 + /* Again fall back to max_segs == 1 */
3860 + return 0;
3861 + host->bounce_buffer_size = bounce_size;
3862 +
3863 + /* Lie about this since we're bouncing */
3864 + mmc->max_segs = max_blocks;
3865 + mmc->max_seg_size = bounce_size;
3866 + mmc->max_req_size = bounce_size;
3867 +
3868 + pr_info("%s bounce up to %u segments into one, max segment size %u bytes\n",
3869 + mmc_hostname(mmc), max_blocks, bounce_size);
3870 +
3871 + return 0;
3872 +}
3873 +
3874 int sdhci_setup_host(struct sdhci_host *host)
3875 {
3876 struct mmc_host *mmc;
3877 @@ -3713,6 +3854,13 @@ int sdhci_setup_host(struct sdhci_host *host)
3878 */
3879 mmc->max_blk_count = (host->quirks & SDHCI_QUIRK_NO_MULTIBLOCK) ? 1 : 65535;
3880
3881 + if (mmc->max_segs == 1) {
3882 + /* This may alter mmc->*_blk_* parameters */
3883 + ret = sdhci_allocate_bounce_buffer(host);
3884 + if (ret)
3885 + return ret;
3886 + }
3887 +
3888 return 0;
3889
3890 unreg:
3891 diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
3892 index 54bc444c317f..1d7d61e25dbf 100644
3893 --- a/drivers/mmc/host/sdhci.h
3894 +++ b/drivers/mmc/host/sdhci.h
3895 @@ -440,6 +440,9 @@ struct sdhci_host {
3896
3897 int irq; /* Device IRQ */
3898 void __iomem *ioaddr; /* Mapped address */
3899 + char *bounce_buffer; /* For packing SDMA reads/writes */
3900 + dma_addr_t bounce_addr;
3901 + unsigned int bounce_buffer_size;
3902
3903 const struct sdhci_ops *ops; /* Low level hw interface */
3904
3905 diff --git a/drivers/mtd/nand/vf610_nfc.c b/drivers/mtd/nand/vf610_nfc.c
3906 index 8037d4b48a05..e2583a539b41 100644
3907 --- a/drivers/mtd/nand/vf610_nfc.c
3908 +++ b/drivers/mtd/nand/vf610_nfc.c
3909 @@ -752,10 +752,8 @@ static int vf610_nfc_probe(struct platform_device *pdev)
3910 if (mtd->oobsize > 64)
3911 mtd->oobsize = 64;
3912
3913 - /*
3914 - * mtd->ecclayout is not specified here because we're using the
3915 - * default large page ECC layout defined in NAND core.
3916 - */
3917 + /* Use default large page ECC layout defined in NAND core */
3918 + mtd_set_ooblayout(mtd, &nand_ooblayout_lp_ops);
3919 if (chip->ecc.strength == 32) {
3920 nfc->ecc_mode = ECC_60_BYTE;
3921 chip->ecc.bytes = 60;
3922 diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
3923 index 634b2f41cc9e..908acd4624e8 100644
3924 --- a/drivers/net/ethernet/marvell/mvpp2.c
3925 +++ b/drivers/net/ethernet/marvell/mvpp2.c
3926 @@ -7127,6 +7127,7 @@ static void mvpp2_set_rx_mode(struct net_device *dev)
3927 int id = port->id;
3928 bool allmulti = dev->flags & IFF_ALLMULTI;
3929
3930 +retry:
3931 mvpp2_prs_mac_promisc_set(priv, id, dev->flags & IFF_PROMISC);
3932 mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_ALL, allmulti);
3933 mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_IP6, allmulti);
3934 @@ -7134,9 +7135,13 @@ static void mvpp2_set_rx_mode(struct net_device *dev)
3935 /* Remove all port->id's mcast enries */
3936 mvpp2_prs_mcast_del_all(priv, id);
3937
3938 - if (allmulti && !netdev_mc_empty(dev)) {
3939 - netdev_for_each_mc_addr(ha, dev)
3940 - mvpp2_prs_mac_da_accept(priv, id, ha->addr, true);
3941 + if (!allmulti) {
3942 + netdev_for_each_mc_addr(ha, dev) {
3943 + if (mvpp2_prs_mac_da_accept(priv, id, ha->addr, true)) {
3944 + allmulti = true;
3945 + goto retry;
3946 + }
3947 + }
3948 }
3949 }
3950
3951 diff --git a/drivers/net/ethernet/mellanox/mlx4/qp.c b/drivers/net/ethernet/mellanox/mlx4/qp.c
3952 index 769598f7b6c8..3aaf4bad6c5a 100644
3953 --- a/drivers/net/ethernet/mellanox/mlx4/qp.c
3954 +++ b/drivers/net/ethernet/mellanox/mlx4/qp.c
3955 @@ -287,6 +287,9 @@ void mlx4_qp_release_range(struct mlx4_dev *dev, int base_qpn, int cnt)
3956 u64 in_param = 0;
3957 int err;
3958
3959 + if (!cnt)
3960 + return;
3961 +
3962 if (mlx4_is_mfunc(dev)) {
3963 set_param_l(&in_param, base_qpn);
3964 set_param_h(&in_param, cnt);
3965 diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c
3966 index cd314946452c..9511f5fe62f4 100644
3967 --- a/drivers/net/wireless/marvell/mwifiex/pcie.c
3968 +++ b/drivers/net/wireless/marvell/mwifiex/pcie.c
3969 @@ -2781,7 +2781,10 @@ static void mwifiex_pcie_card_reset_work(struct mwifiex_adapter *adapter)
3970 {
3971 struct pcie_service_card *card = adapter->card;
3972
3973 - pci_reset_function(card->dev);
3974 + /* We can't afford to wait here; remove() might be waiting on us. If we
3975 + * can't grab the device lock, maybe we'll get another chance later.
3976 + */
3977 + pci_try_reset_function(card->dev);
3978 }
3979
3980 static void mwifiex_pcie_work(struct work_struct *work)
3981 diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
3982 index 43e18c4c1e68..999ddd947b2a 100644
3983 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
3984 +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
3985 @@ -1123,7 +1123,7 @@ static u8 _rtl8821ae_dbi_read(struct rtl_priv *rtlpriv, u16 addr)
3986 }
3987 if (0 == tmp) {
3988 read_addr = REG_DBI_RDATA + addr % 4;
3989 - ret = rtl_read_word(rtlpriv, read_addr);
3990 + ret = rtl_read_byte(rtlpriv, read_addr);
3991 }
3992 return ret;
3993 }
3994 @@ -1165,7 +1165,8 @@ static void _rtl8821ae_enable_aspm_back_door(struct ieee80211_hw *hw)
3995 }
3996
3997 tmp = _rtl8821ae_dbi_read(rtlpriv, 0x70f);
3998 - _rtl8821ae_dbi_write(rtlpriv, 0x70f, tmp | BIT(7));
3999 + _rtl8821ae_dbi_write(rtlpriv, 0x70f, tmp | BIT(7) |
4000 + ASPM_L1_LATENCY << 3);
4001
4002 tmp = _rtl8821ae_dbi_read(rtlpriv, 0x719);
4003 _rtl8821ae_dbi_write(rtlpriv, 0x719, tmp | BIT(3) | BIT(4));
4004 diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h
4005 index 92d4859ec906..2a37125b2ef5 100644
4006 --- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
4007 +++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
4008 @@ -99,6 +99,7 @@
4009 #define RTL_USB_MAX_RX_COUNT 100
4010 #define QBSS_LOAD_SIZE 5
4011 #define MAX_WMMELE_LENGTH 64
4012 +#define ASPM_L1_LATENCY 7
4013
4014 #define TOTAL_CAM_ENTRY 32
4015
4016 diff --git a/drivers/pci/dwc/pci-keystone.c b/drivers/pci/dwc/pci-keystone.c
4017 index 5bee3af47588..39405598b22d 100644
4018 --- a/drivers/pci/dwc/pci-keystone.c
4019 +++ b/drivers/pci/dwc/pci-keystone.c
4020 @@ -178,7 +178,7 @@ static int ks_pcie_get_irq_controller_info(struct keystone_pcie *ks_pcie,
4021 }
4022
4023 /* interrupt controller is in a child node */
4024 - *np_temp = of_find_node_by_name(np_pcie, controller);
4025 + *np_temp = of_get_child_by_name(np_pcie, controller);
4026 if (!(*np_temp)) {
4027 dev_err(dev, "Node for %s is absent\n", controller);
4028 return -EINVAL;
4029 @@ -187,6 +187,7 @@ static int ks_pcie_get_irq_controller_info(struct keystone_pcie *ks_pcie,
4030 temp = of_irq_count(*np_temp);
4031 if (!temp) {
4032 dev_err(dev, "No IRQ entries in %s\n", controller);
4033 + of_node_put(*np_temp);
4034 return -EINVAL;
4035 }
4036
4037 @@ -204,6 +205,8 @@ static int ks_pcie_get_irq_controller_info(struct keystone_pcie *ks_pcie,
4038 break;
4039 }
4040
4041 + of_node_put(*np_temp);
4042 +
4043 if (temp) {
4044 *num_irqs = temp;
4045 return 0;
4046 diff --git a/drivers/pci/host/pcie-iproc-platform.c b/drivers/pci/host/pcie-iproc-platform.c
4047 index a5073a921a04..32228d41f746 100644
4048 --- a/drivers/pci/host/pcie-iproc-platform.c
4049 +++ b/drivers/pci/host/pcie-iproc-platform.c
4050 @@ -92,6 +92,13 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev)
4051 pcie->need_ob_cfg = true;
4052 }
4053
4054 + /*
4055 + * DT nodes are not used by all platforms that use the iProc PCIe
4056 + * core driver. For platforms that require explict inbound mapping
4057 + * configuration, "dma-ranges" would have been present in DT
4058 + */
4059 + pcie->need_ib_cfg = of_property_read_bool(np, "dma-ranges");
4060 +
4061 /* PHY use is optional */
4062 pcie->phy = devm_phy_get(dev, "pcie-phy");
4063 if (IS_ERR(pcie->phy)) {
4064 diff --git a/drivers/pci/host/pcie-iproc.c b/drivers/pci/host/pcie-iproc.c
4065 index 935909bbe5c4..75836067f538 100644
4066 --- a/drivers/pci/host/pcie-iproc.c
4067 +++ b/drivers/pci/host/pcie-iproc.c
4068 @@ -1378,9 +1378,11 @@ int iproc_pcie_setup(struct iproc_pcie *pcie, struct list_head *res)
4069 }
4070 }
4071
4072 - ret = iproc_pcie_map_dma_ranges(pcie);
4073 - if (ret && ret != -ENOENT)
4074 - goto err_power_off_phy;
4075 + if (pcie->need_ib_cfg) {
4076 + ret = iproc_pcie_map_dma_ranges(pcie);
4077 + if (ret && ret != -ENOENT)
4078 + goto err_power_off_phy;
4079 + }
4080
4081 #ifdef CONFIG_ARM
4082 pcie->sysdata.private_data = pcie;
4083 diff --git a/drivers/pci/host/pcie-iproc.h b/drivers/pci/host/pcie-iproc.h
4084 index a6b55cec9a66..4ac6282f2bfd 100644
4085 --- a/drivers/pci/host/pcie-iproc.h
4086 +++ b/drivers/pci/host/pcie-iproc.h
4087 @@ -74,6 +74,7 @@ struct iproc_msi;
4088 * @ob: outbound mapping related parameters
4089 * @ob_map: outbound mapping related parameters specific to the controller
4090 *
4091 + * @need_ib_cfg: indicates SW needs to configure the inbound mapping window
4092 * @ib: inbound mapping related parameters
4093 * @ib_map: outbound mapping region related parameters
4094 *
4095 @@ -101,6 +102,7 @@ struct iproc_pcie {
4096 struct iproc_pcie_ob ob;
4097 const struct iproc_pcie_ob_map *ob_map;
4098
4099 + bool need_ib_cfg;
4100 struct iproc_pcie_ib ib;
4101 const struct iproc_pcie_ib_map *ib_map;
4102
4103 diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c
4104 index 7bab0606f1a9..a89d8b990228 100644
4105 --- a/drivers/pci/hotplug/pciehp_hpc.c
4106 +++ b/drivers/pci/hotplug/pciehp_hpc.c
4107 @@ -848,6 +848,13 @@ struct controller *pcie_init(struct pcie_device *dev)
4108 if (pdev->hotplug_user_indicators)
4109 slot_cap &= ~(PCI_EXP_SLTCAP_AIP | PCI_EXP_SLTCAP_PIP);
4110
4111 + /*
4112 + * We assume no Thunderbolt controllers support Command Complete events,
4113 + * but some controllers falsely claim they do.
4114 + */
4115 + if (pdev->is_thunderbolt)
4116 + slot_cap |= PCI_EXP_SLTCAP_NCCS;
4117 +
4118 ctrl->slot_cap = slot_cap;
4119 mutex_init(&ctrl->ctrl_lock);
4120 init_waitqueue_head(&ctrl->queue);
4121 diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
4122 index 10684b17d0bd..d22750ea7444 100644
4123 --- a/drivers/pci/quirks.c
4124 +++ b/drivers/pci/quirks.c
4125 @@ -1636,8 +1636,8 @@ static void quirk_pcie_mch(struct pci_dev *pdev)
4126 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7520_MCH, quirk_pcie_mch);
4127 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7320_MCH, quirk_pcie_mch);
4128 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH, quirk_pcie_mch);
4129 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0x1610, quirk_pcie_mch);
4130
4131 +DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_HUAWEI, 0x1610, PCI_CLASS_BRIDGE_PCI, 8, quirk_pcie_mch);
4132
4133 /*
4134 * It's possible for the MSI to get corrupted if shpc and acpi
4135 diff --git a/drivers/platform/x86/apple-gmux.c b/drivers/platform/x86/apple-gmux.c
4136 index 623d322447a2..7c4eb86c851e 100644
4137 --- a/drivers/platform/x86/apple-gmux.c
4138 +++ b/drivers/platform/x86/apple-gmux.c
4139 @@ -24,7 +24,6 @@
4140 #include <linux/delay.h>
4141 #include <linux/pci.h>
4142 #include <linux/vga_switcheroo.h>
4143 -#include <linux/vgaarb.h>
4144 #include <acpi/video.h>
4145 #include <asm/io.h>
4146
4147 @@ -54,7 +53,6 @@ struct apple_gmux_data {
4148 bool indexed;
4149 struct mutex index_lock;
4150
4151 - struct pci_dev *pdev;
4152 struct backlight_device *bdev;
4153
4154 /* switcheroo data */
4155 @@ -599,23 +597,6 @@ static int gmux_resume(struct device *dev)
4156 return 0;
4157 }
4158
4159 -static struct pci_dev *gmux_get_io_pdev(void)
4160 -{
4161 - struct pci_dev *pdev = NULL;
4162 -
4163 - while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev))) {
4164 - u16 cmd;
4165 -
4166 - pci_read_config_word(pdev, PCI_COMMAND, &cmd);
4167 - if (!(cmd & PCI_COMMAND_IO))
4168 - continue;
4169 -
4170 - return pdev;
4171 - }
4172 -
4173 - return NULL;
4174 -}
4175 -
4176 static int is_thunderbolt(struct device *dev, void *data)
4177 {
4178 return to_pci_dev(dev)->is_thunderbolt;
4179 @@ -631,7 +612,6 @@ static int gmux_probe(struct pnp_dev *pnp, const struct pnp_device_id *id)
4180 int ret = -ENXIO;
4181 acpi_status status;
4182 unsigned long long gpe;
4183 - struct pci_dev *pdev = NULL;
4184
4185 if (apple_gmux_data)
4186 return -EBUSY;
4187 @@ -682,7 +662,7 @@ static int gmux_probe(struct pnp_dev *pnp, const struct pnp_device_id *id)
4188 ver_minor = (version >> 16) & 0xff;
4189 ver_release = (version >> 8) & 0xff;
4190 } else {
4191 - pr_info("gmux device not present or IO disabled\n");
4192 + pr_info("gmux device not present\n");
4193 ret = -ENODEV;
4194 goto err_release;
4195 }
4196 @@ -690,23 +670,6 @@ static int gmux_probe(struct pnp_dev *pnp, const struct pnp_device_id *id)
4197 pr_info("Found gmux version %d.%d.%d [%s]\n", ver_major, ver_minor,
4198 ver_release, (gmux_data->indexed ? "indexed" : "classic"));
4199
4200 - /*
4201 - * Apple systems with gmux are EFI based and normally don't use
4202 - * VGA. In addition changing IO+MEM ownership between IGP and dGPU
4203 - * disables IO/MEM used for backlight control on some systems.
4204 - * Lock IO+MEM to GPU with active IO to prevent switch.
4205 - */
4206 - pdev = gmux_get_io_pdev();
4207 - if (pdev && vga_tryget(pdev,
4208 - VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM)) {
4209 - pr_err("IO+MEM vgaarb-locking for PCI:%s failed\n",
4210 - pci_name(pdev));
4211 - ret = -EBUSY;
4212 - goto err_release;
4213 - } else if (pdev)
4214 - pr_info("locked IO for PCI:%s\n", pci_name(pdev));
4215 - gmux_data->pdev = pdev;
4216 -
4217 memset(&props, 0, sizeof(props));
4218 props.type = BACKLIGHT_PLATFORM;
4219 props.max_brightness = gmux_read32(gmux_data, GMUX_PORT_MAX_BRIGHTNESS);
4220 @@ -822,10 +785,6 @@ static int gmux_probe(struct pnp_dev *pnp, const struct pnp_device_id *id)
4221 err_notify:
4222 backlight_device_unregister(bdev);
4223 err_release:
4224 - if (gmux_data->pdev)
4225 - vga_put(gmux_data->pdev,
4226 - VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM);
4227 - pci_dev_put(pdev);
4228 release_region(gmux_data->iostart, gmux_data->iolen);
4229 err_free:
4230 kfree(gmux_data);
4231 @@ -845,11 +804,6 @@ static void gmux_remove(struct pnp_dev *pnp)
4232 &gmux_notify_handler);
4233 }
4234
4235 - if (gmux_data->pdev) {
4236 - vga_put(gmux_data->pdev,
4237 - VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM);
4238 - pci_dev_put(gmux_data->pdev);
4239 - }
4240 backlight_device_unregister(gmux_data->bdev);
4241
4242 release_region(gmux_data->iostart, gmux_data->iolen);
4243 diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
4244 index daa68acbc900..c0c8945603cb 100644
4245 --- a/drivers/platform/x86/wmi.c
4246 +++ b/drivers/platform/x86/wmi.c
4247 @@ -933,7 +933,7 @@ static int wmi_dev_probe(struct device *dev)
4248 goto probe_failure;
4249 }
4250
4251 - buf = kmalloc(strlen(wdriver->driver.name) + 4, GFP_KERNEL);
4252 + buf = kmalloc(strlen(wdriver->driver.name) + 5, GFP_KERNEL);
4253 if (!buf) {
4254 ret = -ENOMEM;
4255 goto probe_string_failure;
4256 diff --git a/drivers/rtc/rtc-opal.c b/drivers/rtc/rtc-opal.c
4257 index e2a946c0e667..304e891e35fc 100644
4258 --- a/drivers/rtc/rtc-opal.c
4259 +++ b/drivers/rtc/rtc-opal.c
4260 @@ -58,6 +58,7 @@ static void tm_to_opal(struct rtc_time *tm, u32 *y_m_d, u64 *h_m_s_ms)
4261 static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm)
4262 {
4263 long rc = OPAL_BUSY;
4264 + int retries = 10;
4265 u32 y_m_d;
4266 u64 h_m_s_ms;
4267 __be32 __y_m_d;
4268 @@ -67,8 +68,11 @@ static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm)
4269 rc = opal_rtc_read(&__y_m_d, &__h_m_s_ms);
4270 if (rc == OPAL_BUSY_EVENT)
4271 opal_poll_events(NULL);
4272 - else
4273 + else if (retries-- && (rc == OPAL_HARDWARE
4274 + || rc == OPAL_INTERNAL_ERROR))
4275 msleep(10);
4276 + else if (rc != OPAL_BUSY && rc != OPAL_BUSY_EVENT)
4277 + break;
4278 }
4279
4280 if (rc != OPAL_SUCCESS)
4281 @@ -84,6 +88,7 @@ static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm)
4282 static int opal_set_rtc_time(struct device *dev, struct rtc_time *tm)
4283 {
4284 long rc = OPAL_BUSY;
4285 + int retries = 10;
4286 u32 y_m_d = 0;
4287 u64 h_m_s_ms = 0;
4288
4289 @@ -92,8 +97,11 @@ static int opal_set_rtc_time(struct device *dev, struct rtc_time *tm)
4290 rc = opal_rtc_write(y_m_d, h_m_s_ms);
4291 if (rc == OPAL_BUSY_EVENT)
4292 opal_poll_events(NULL);
4293 - else
4294 + else if (retries-- && (rc == OPAL_HARDWARE
4295 + || rc == OPAL_INTERNAL_ERROR))
4296 msleep(10);
4297 + else if (rc != OPAL_BUSY && rc != OPAL_BUSY_EVENT)
4298 + break;
4299 }
4300
4301 return rc == OPAL_SUCCESS ? 0 : -EIO;
4302 diff --git a/drivers/scsi/smartpqi/Makefile b/drivers/scsi/smartpqi/Makefile
4303 index 0f42a225a664..e6b779930230 100644
4304 --- a/drivers/scsi/smartpqi/Makefile
4305 +++ b/drivers/scsi/smartpqi/Makefile
4306 @@ -1,3 +1,3 @@
4307 ccflags-y += -I.
4308 -obj-m += smartpqi.o
4309 +obj-$(CONFIG_SCSI_SMARTPQI) += smartpqi.o
4310 smartpqi-objs := smartpqi_init.o smartpqi_sis.o smartpqi_sas_transport.o
4311 diff --git a/drivers/target/iscsi/iscsi_target_auth.c b/drivers/target/iscsi/iscsi_target_auth.c
4312 index f9bc8ec6fb6b..9518ffd8b8ba 100644
4313 --- a/drivers/target/iscsi/iscsi_target_auth.c
4314 +++ b/drivers/target/iscsi/iscsi_target_auth.c
4315 @@ -421,7 +421,8 @@ static int chap_server_compute_md5(
4316 auth_ret = 0;
4317 out:
4318 kzfree(desc);
4319 - crypto_free_shash(tfm);
4320 + if (tfm)
4321 + crypto_free_shash(tfm);
4322 kfree(challenge);
4323 kfree(challenge_binhex);
4324 return auth_ret;
4325 diff --git a/drivers/target/iscsi/iscsi_target_nego.c b/drivers/target/iscsi/iscsi_target_nego.c
4326 index b686e2ce9c0e..8a5e8d17a942 100644
4327 --- a/drivers/target/iscsi/iscsi_target_nego.c
4328 +++ b/drivers/target/iscsi/iscsi_target_nego.c
4329 @@ -432,6 +432,9 @@ static void iscsi_target_sk_data_ready(struct sock *sk)
4330 if (test_and_set_bit(LOGIN_FLAGS_READ_ACTIVE, &conn->login_flags)) {
4331 write_unlock_bh(&sk->sk_callback_lock);
4332 pr_debug("Got LOGIN_FLAGS_READ_ACTIVE=1, conn: %p >>>>\n", conn);
4333 + if (iscsi_target_sk_data_ready == conn->orig_data_ready)
4334 + return;
4335 + conn->orig_data_ready(sk);
4336 return;
4337 }
4338
4339 diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig
4340 index f699abab1787..65812a2f60b4 100644
4341 --- a/drivers/usb/Kconfig
4342 +++ b/drivers/usb/Kconfig
4343 @@ -19,6 +19,14 @@ config USB_EHCI_BIG_ENDIAN_MMIO
4344 config USB_EHCI_BIG_ENDIAN_DESC
4345 bool
4346
4347 +config USB_UHCI_BIG_ENDIAN_MMIO
4348 + bool
4349 + default y if SPARC_LEON
4350 +
4351 +config USB_UHCI_BIG_ENDIAN_DESC
4352 + bool
4353 + default y if SPARC_LEON
4354 +
4355 menuconfig USB_SUPPORT
4356 bool "USB support"
4357 depends on HAS_IOMEM
4358 diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
4359 index b80a94e632af..2763a640359f 100644
4360 --- a/drivers/usb/host/Kconfig
4361 +++ b/drivers/usb/host/Kconfig
4362 @@ -625,14 +625,6 @@ config USB_UHCI_ASPEED
4363 bool
4364 default y if ARCH_ASPEED
4365
4366 -config USB_UHCI_BIG_ENDIAN_MMIO
4367 - bool
4368 - default y if SPARC_LEON
4369 -
4370 -config USB_UHCI_BIG_ENDIAN_DESC
4371 - bool
4372 - default y if SPARC_LEON
4373 -
4374 config USB_FHCI_HCD
4375 tristate "Freescale QE USB Host Controller support"
4376 depends on OF_GPIO && QE_GPIO && QUICC_ENGINE
4377 diff --git a/drivers/video/console/dummycon.c b/drivers/video/console/dummycon.c
4378 index 9269d5685239..b90ef96e43d6 100644
4379 --- a/drivers/video/console/dummycon.c
4380 +++ b/drivers/video/console/dummycon.c
4381 @@ -67,7 +67,6 @@ const struct consw dummy_con = {
4382 .con_switch = DUMMY,
4383 .con_blank = DUMMY,
4384 .con_font_set = DUMMY,
4385 - .con_font_get = DUMMY,
4386 .con_font_default = DUMMY,
4387 .con_font_copy = DUMMY,
4388 };
4389 diff --git a/drivers/video/fbdev/atmel_lcdfb.c b/drivers/video/fbdev/atmel_lcdfb.c
4390 index e06358da4b99..3dee267d7c75 100644
4391 --- a/drivers/video/fbdev/atmel_lcdfb.c
4392 +++ b/drivers/video/fbdev/atmel_lcdfb.c
4393 @@ -1119,7 +1119,7 @@ static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo)
4394 goto put_display_node;
4395 }
4396
4397 - timings_np = of_find_node_by_name(display_np, "display-timings");
4398 + timings_np = of_get_child_by_name(display_np, "display-timings");
4399 if (!timings_np) {
4400 dev_err(dev, "failed to find display-timings node\n");
4401 ret = -ENODEV;
4402 @@ -1140,6 +1140,12 @@ static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo)
4403 fb_add_videomode(&fb_vm, &info->modelist);
4404 }
4405
4406 + /*
4407 + * FIXME: Make sure we are not referencing any fields in display_np
4408 + * and timings_np and drop our references to them before returning to
4409 + * avoid leaking the nodes on probe deferral and driver unbind.
4410 + */
4411 +
4412 return 0;
4413
4414 put_timings_node:
4415 diff --git a/drivers/video/fbdev/geode/video_gx.c b/drivers/video/fbdev/geode/video_gx.c
4416 index 6082f653c68a..67773e8bbb95 100644
4417 --- a/drivers/video/fbdev/geode/video_gx.c
4418 +++ b/drivers/video/fbdev/geode/video_gx.c
4419 @@ -127,7 +127,7 @@ void gx_set_dclk_frequency(struct fb_info *info)
4420 int timeout = 1000;
4421
4422 /* Rev. 1 Geode GXs use a 14 MHz reference clock instead of 48 MHz. */
4423 - if (cpu_data(0).x86_mask == 1) {
4424 + if (cpu_data(0).x86_stepping == 1) {
4425 pll_table = gx_pll_table_14MHz;
4426 pll_table_len = ARRAY_SIZE(gx_pll_table_14MHz);
4427 } else {
4428 diff --git a/drivers/xen/xenbus/xenbus.h b/drivers/xen/xenbus/xenbus.h
4429 index 149c5e7efc89..092981171df1 100644
4430 --- a/drivers/xen/xenbus/xenbus.h
4431 +++ b/drivers/xen/xenbus/xenbus.h
4432 @@ -76,6 +76,7 @@ struct xb_req_data {
4433 struct list_head list;
4434 wait_queue_head_t wq;
4435 struct xsd_sockmsg msg;
4436 + uint32_t caller_req_id;
4437 enum xsd_sockmsg_type type;
4438 char *body;
4439 const struct kvec *vec;
4440 diff --git a/drivers/xen/xenbus/xenbus_comms.c b/drivers/xen/xenbus/xenbus_comms.c
4441 index 5b081a01779d..d239fc3c5e3d 100644
4442 --- a/drivers/xen/xenbus/xenbus_comms.c
4443 +++ b/drivers/xen/xenbus/xenbus_comms.c
4444 @@ -309,6 +309,7 @@ static int process_msg(void)
4445 goto out;
4446
4447 if (req->state == xb_req_state_wait_reply) {
4448 + req->msg.req_id = req->caller_req_id;
4449 req->msg.type = state.msg.type;
4450 req->msg.len = state.msg.len;
4451 req->body = state.body;
4452 diff --git a/drivers/xen/xenbus/xenbus_xs.c b/drivers/xen/xenbus/xenbus_xs.c
4453 index 3e59590c7254..3f3b29398ab8 100644
4454 --- a/drivers/xen/xenbus/xenbus_xs.c
4455 +++ b/drivers/xen/xenbus/xenbus_xs.c
4456 @@ -227,6 +227,8 @@ static void xs_send(struct xb_req_data *req, struct xsd_sockmsg *msg)
4457 req->state = xb_req_state_queued;
4458 init_waitqueue_head(&req->wq);
4459
4460 + /* Save the caller req_id and restore it later in the reply */
4461 + req->caller_req_id = req->msg.req_id;
4462 req->msg.req_id = xs_request_enter(req);
4463
4464 mutex_lock(&xb_write_mutex);
4465 @@ -310,6 +312,7 @@ static void *xs_talkv(struct xenbus_transaction t,
4466 req->num_vecs = num_vecs;
4467 req->cb = xs_wake_up;
4468
4469 + msg.req_id = 0;
4470 msg.tx_id = t.id;
4471 msg.type = type;
4472 msg.len = 0;
4473 diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
4474 index 0f57602092cf..c04183cc2117 100644
4475 --- a/fs/btrfs/inode.c
4476 +++ b/fs/btrfs/inode.c
4477 @@ -1330,8 +1330,11 @@ static noinline int run_delalloc_nocow(struct inode *inode,
4478 leaf = path->nodes[0];
4479 if (path->slots[0] >= btrfs_header_nritems(leaf)) {
4480 ret = btrfs_next_leaf(root, path);
4481 - if (ret < 0)
4482 + if (ret < 0) {
4483 + if (cow_start != (u64)-1)
4484 + cur_offset = cow_start;
4485 goto error;
4486 + }
4487 if (ret > 0)
4488 break;
4489 leaf = path->nodes[0];
4490 @@ -3366,6 +3369,11 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans,
4491 ret = btrfs_orphan_reserve_metadata(trans, inode);
4492 ASSERT(!ret);
4493 if (ret) {
4494 + /*
4495 + * dec doesn't need spin_lock as ->orphan_block_rsv
4496 + * would be released only if ->orphan_inodes is
4497 + * zero.
4498 + */
4499 atomic_dec(&root->orphan_inodes);
4500 clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED,
4501 &inode->runtime_flags);
4502 @@ -3380,12 +3388,17 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans,
4503 if (insert >= 1) {
4504 ret = btrfs_insert_orphan_item(trans, root, btrfs_ino(inode));
4505 if (ret) {
4506 - atomic_dec(&root->orphan_inodes);
4507 if (reserve) {
4508 clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED,
4509 &inode->runtime_flags);
4510 btrfs_orphan_release_metadata(inode);
4511 }
4512 + /*
4513 + * btrfs_orphan_commit_root may race with us and set
4514 + * ->orphan_block_rsv to zero, in order to avoid that,
4515 + * decrease ->orphan_inodes after everything is done.
4516 + */
4517 + atomic_dec(&root->orphan_inodes);
4518 if (ret != -EEXIST) {
4519 clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
4520 &inode->runtime_flags);
4521 @@ -3417,28 +3430,26 @@ static int btrfs_orphan_del(struct btrfs_trans_handle *trans,
4522 {
4523 struct btrfs_root *root = inode->root;
4524 int delete_item = 0;
4525 - int release_rsv = 0;
4526 int ret = 0;
4527
4528 - spin_lock(&root->orphan_lock);
4529 if (test_and_clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
4530 &inode->runtime_flags))
4531 delete_item = 1;
4532
4533 + if (delete_item && trans)
4534 + ret = btrfs_del_orphan_item(trans, root, btrfs_ino(inode));
4535 +
4536 if (test_and_clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED,
4537 &inode->runtime_flags))
4538 - release_rsv = 1;
4539 - spin_unlock(&root->orphan_lock);
4540 + btrfs_orphan_release_metadata(inode);
4541
4542 - if (delete_item) {
4543 + /*
4544 + * btrfs_orphan_commit_root may race with us and set ->orphan_block_rsv
4545 + * to zero, in order to avoid that, decrease ->orphan_inodes after
4546 + * everything is done.
4547 + */
4548 + if (delete_item)
4549 atomic_dec(&root->orphan_inodes);
4550 - if (trans)
4551 - ret = btrfs_del_orphan_item(trans, root,
4552 - btrfs_ino(inode));
4553 - }
4554 -
4555 - if (release_rsv)
4556 - btrfs_orphan_release_metadata(inode);
4557
4558 return ret;
4559 }
4560 @@ -5263,7 +5274,7 @@ void btrfs_evict_inode(struct inode *inode)
4561 trace_btrfs_inode_evict(inode);
4562
4563 if (!root) {
4564 - kmem_cache_free(btrfs_inode_cachep, BTRFS_I(inode));
4565 + clear_inode(inode);
4566 return;
4567 }
4568
4569 diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
4570 index 7bf9b31561db..b5e1afb30f36 100644
4571 --- a/fs/btrfs/tree-log.c
4572 +++ b/fs/btrfs/tree-log.c
4573 @@ -28,6 +28,7 @@
4574 #include "hash.h"
4575 #include "compression.h"
4576 #include "qgroup.h"
4577 +#include "inode-map.h"
4578
4579 /* magic values for the inode_only field in btrfs_log_inode:
4580 *
4581 @@ -2494,6 +2495,9 @@ static noinline int walk_down_log_tree(struct btrfs_trans_handle *trans,
4582 clean_tree_block(fs_info, next);
4583 btrfs_wait_tree_block_writeback(next);
4584 btrfs_tree_unlock(next);
4585 + } else {
4586 + if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
4587 + clear_extent_buffer_dirty(next);
4588 }
4589
4590 WARN_ON(root_owner !=
4591 @@ -2574,6 +2578,9 @@ static noinline int walk_up_log_tree(struct btrfs_trans_handle *trans,
4592 clean_tree_block(fs_info, next);
4593 btrfs_wait_tree_block_writeback(next);
4594 btrfs_tree_unlock(next);
4595 + } else {
4596 + if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
4597 + clear_extent_buffer_dirty(next);
4598 }
4599
4600 WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID);
4601 @@ -2652,6 +2659,9 @@ static int walk_log_tree(struct btrfs_trans_handle *trans,
4602 clean_tree_block(fs_info, next);
4603 btrfs_wait_tree_block_writeback(next);
4604 btrfs_tree_unlock(next);
4605 + } else {
4606 + if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
4607 + clear_extent_buffer_dirty(next);
4608 }
4609
4610 WARN_ON(log->root_key.objectid !=
4611 @@ -3040,13 +3050,14 @@ static void free_log_tree(struct btrfs_trans_handle *trans,
4612
4613 while (1) {
4614 ret = find_first_extent_bit(&log->dirty_log_pages,
4615 - 0, &start, &end, EXTENT_DIRTY | EXTENT_NEW,
4616 + 0, &start, &end,
4617 + EXTENT_DIRTY | EXTENT_NEW | EXTENT_NEED_WAIT,
4618 NULL);
4619 if (ret)
4620 break;
4621
4622 clear_extent_bits(&log->dirty_log_pages, start, end,
4623 - EXTENT_DIRTY | EXTENT_NEW);
4624 + EXTENT_DIRTY | EXTENT_NEW | EXTENT_NEED_WAIT);
4625 }
4626
4627 /*
4628 @@ -5705,6 +5716,23 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree)
4629 path);
4630 }
4631
4632 + if (!ret && wc.stage == LOG_WALK_REPLAY_ALL) {
4633 + struct btrfs_root *root = wc.replay_dest;
4634 +
4635 + btrfs_release_path(path);
4636 +
4637 + /*
4638 + * We have just replayed everything, and the highest
4639 + * objectid of fs roots probably has changed in case
4640 + * some inode_item's got replayed.
4641 + *
4642 + * root->objectid_mutex is not acquired as log replay
4643 + * could only happen during mount.
4644 + */
4645 + ret = btrfs_find_highest_objectid(root,
4646 + &root->highest_objectid);
4647 + }
4648 +
4649 key.offset = found_key.offset - 1;
4650 wc.replay_dest->log_root = NULL;
4651 free_extent_buffer(log->node);
4652 diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
4653 index 534a9130f625..4c2f8b57bdc7 100644
4654 --- a/fs/ext4/inode.c
4655 +++ b/fs/ext4/inode.c
4656 @@ -3767,10 +3767,18 @@ static ssize_t ext4_direct_IO_write(struct kiocb *iocb, struct iov_iter *iter)
4657 /* Credits for sb + inode write */
4658 handle = ext4_journal_start(inode, EXT4_HT_INODE, 2);
4659 if (IS_ERR(handle)) {
4660 - /* This is really bad luck. We've written the data
4661 - * but cannot extend i_size. Bail out and pretend
4662 - * the write failed... */
4663 - ret = PTR_ERR(handle);
4664 + /*
4665 + * We wrote the data but cannot extend
4666 + * i_size. Bail out. In async io case, we do
4667 + * not return error here because we have
4668 + * already submmitted the corresponding
4669 + * bio. Returning error here makes the caller
4670 + * think that this IO is done and failed
4671 + * resulting in race with bio's completion
4672 + * handler.
4673 + */
4674 + if (!ret)
4675 + ret = PTR_ERR(handle);
4676 if (inode->i_nlink)
4677 ext4_orphan_del(NULL, inode);
4678
4679 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
4680 index 7c46693a14d7..71594382e195 100644
4681 --- a/fs/ext4/super.c
4682 +++ b/fs/ext4/super.c
4683 @@ -742,6 +742,7 @@ __acquires(bitlock)
4684 }
4685
4686 ext4_unlock_group(sb, grp);
4687 + ext4_commit_super(sb, 1);
4688 ext4_handle_error(sb);
4689 /*
4690 * We only get here in the ERRORS_RO case; relocking the group
4691 diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
4692 index d5f0d96169c5..8c50d6878aa5 100644
4693 --- a/fs/gfs2/bmap.c
4694 +++ b/fs/gfs2/bmap.c
4695 @@ -736,7 +736,7 @@ int gfs2_iomap_begin(struct inode *inode, loff_t pos, loff_t length,
4696 __be64 *ptr;
4697 sector_t lblock;
4698 sector_t lend;
4699 - int ret;
4700 + int ret = 0;
4701 int eob;
4702 unsigned int len;
4703 struct buffer_head *bh;
4704 @@ -748,12 +748,14 @@ int gfs2_iomap_begin(struct inode *inode, loff_t pos, loff_t length,
4705 goto out;
4706 }
4707
4708 - if ((flags & IOMAP_REPORT) && gfs2_is_stuffed(ip)) {
4709 - gfs2_stuffed_iomap(inode, iomap);
4710 - if (pos >= iomap->length)
4711 - return -ENOENT;
4712 - ret = 0;
4713 - goto out;
4714 + if (gfs2_is_stuffed(ip)) {
4715 + if (flags & IOMAP_REPORT) {
4716 + gfs2_stuffed_iomap(inode, iomap);
4717 + if (pos >= iomap->length)
4718 + ret = -ENOENT;
4719 + goto out;
4720 + }
4721 + BUG_ON(!(flags & IOMAP_WRITE));
4722 }
4723
4724 lblock = pos >> inode->i_blkbits;
4725 @@ -764,7 +766,7 @@ int gfs2_iomap_begin(struct inode *inode, loff_t pos, loff_t length,
4726 iomap->type = IOMAP_HOLE;
4727 iomap->length = (u64)(lend - lblock) << inode->i_blkbits;
4728 iomap->flags = IOMAP_F_MERGED;
4729 - bmap_lock(ip, 0);
4730 + bmap_lock(ip, flags & IOMAP_WRITE);
4731
4732 /*
4733 * Directory data blocks have a struct gfs2_meta_header header, so the
4734 @@ -807,27 +809,28 @@ int gfs2_iomap_begin(struct inode *inode, loff_t pos, loff_t length,
4735 iomap->flags |= IOMAP_F_BOUNDARY;
4736 iomap->length = (u64)len << inode->i_blkbits;
4737
4738 - ret = 0;
4739 -
4740 out_release:
4741 release_metapath(&mp);
4742 - bmap_unlock(ip, 0);
4743 + bmap_unlock(ip, flags & IOMAP_WRITE);
4744 out:
4745 trace_gfs2_iomap_end(ip, iomap, ret);
4746 return ret;
4747
4748 do_alloc:
4749 - if (!(flags & IOMAP_WRITE)) {
4750 - if (pos >= i_size_read(inode)) {
4751 + if (flags & IOMAP_WRITE) {
4752 + ret = gfs2_iomap_alloc(inode, iomap, flags, &mp);
4753 + } else if (flags & IOMAP_REPORT) {
4754 + loff_t size = i_size_read(inode);
4755 + if (pos >= size)
4756 ret = -ENOENT;
4757 - goto out_release;
4758 - }
4759 - ret = 0;
4760 - iomap->length = hole_size(inode, lblock, &mp);
4761 - goto out_release;
4762 + else if (height <= ip->i_height)
4763 + iomap->length = hole_size(inode, lblock, &mp);
4764 + else
4765 + iomap->length = size - pos;
4766 + } else {
4767 + if (height <= ip->i_height)
4768 + iomap->length = hole_size(inode, lblock, &mp);
4769 }
4770 -
4771 - ret = gfs2_iomap_alloc(inode, iomap, flags, &mp);
4772 goto out_release;
4773 }
4774
4775 diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c
4776 index 8b08044b3120..c0681814c379 100644
4777 --- a/fs/jbd2/transaction.c
4778 +++ b/fs/jbd2/transaction.c
4779 @@ -495,8 +495,10 @@ void jbd2_journal_free_reserved(handle_t *handle)
4780 EXPORT_SYMBOL(jbd2_journal_free_reserved);
4781
4782 /**
4783 - * int jbd2_journal_start_reserved(handle_t *handle) - start reserved handle
4784 + * int jbd2_journal_start_reserved() - start reserved handle
4785 * @handle: handle to start
4786 + * @type: for handle statistics
4787 + * @line_no: for handle statistics
4788 *
4789 * Start handle that has been previously reserved with jbd2_journal_reserve().
4790 * This attaches @handle to the running transaction (or creates one if there's
4791 @@ -626,6 +628,7 @@ int jbd2_journal_extend(handle_t *handle, int nblocks)
4792 * int jbd2_journal_restart() - restart a handle .
4793 * @handle: handle to restart
4794 * @nblocks: nr credits requested
4795 + * @gfp_mask: memory allocation flags (for start_this_handle)
4796 *
4797 * Restart a handle for a multi-transaction filesystem
4798 * operation.
4799 diff --git a/fs/mbcache.c b/fs/mbcache.c
4800 index b8b8b9ced9f8..46b23bb432fe 100644
4801 --- a/fs/mbcache.c
4802 +++ b/fs/mbcache.c
4803 @@ -94,6 +94,7 @@ int mb_cache_entry_create(struct mb_cache *cache, gfp_t mask, u32 key,
4804 entry->e_key = key;
4805 entry->e_value = value;
4806 entry->e_reusable = reusable;
4807 + entry->e_referenced = 0;
4808 head = mb_cache_entry_head(cache, key);
4809 hlist_bl_lock(head);
4810 hlist_bl_for_each_entry(dup, dup_node, head, e_hash_list) {
4811 diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
4812 index 4689940a953c..5193218f5889 100644
4813 --- a/fs/ocfs2/dlmglue.c
4814 +++ b/fs/ocfs2/dlmglue.c
4815 @@ -2486,6 +2486,15 @@ int ocfs2_inode_lock_with_page(struct inode *inode,
4816 ret = ocfs2_inode_lock_full(inode, ret_bh, ex, OCFS2_LOCK_NONBLOCK);
4817 if (ret == -EAGAIN) {
4818 unlock_page(page);
4819 + /*
4820 + * If we can't get inode lock immediately, we should not return
4821 + * directly here, since this will lead to a softlockup problem.
4822 + * The method is to get a blocking lock and immediately unlock
4823 + * before returning, this can avoid CPU resource waste due to
4824 + * lots of retries, and benefits fairness in getting lock.
4825 + */
4826 + if (ocfs2_inode_lock(inode, ret_bh, ex) == 0)
4827 + ocfs2_inode_unlock(inode, ex);
4828 ret = AOP_TRUNCATED_PAGE;
4829 }
4830
4831 diff --git a/fs/seq_file.c b/fs/seq_file.c
4832 index 4be761c1a03d..eea09f6d8830 100644
4833 --- a/fs/seq_file.c
4834 +++ b/fs/seq_file.c
4835 @@ -181,8 +181,11 @@ ssize_t seq_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
4836 * if request is to read from zero offset, reset iterator to first
4837 * record as it might have been already advanced by previous requests
4838 */
4839 - if (*ppos == 0)
4840 + if (*ppos == 0) {
4841 m->index = 0;
4842 + m->version = 0;
4843 + m->count = 0;
4844 + }
4845
4846 /* Don't assume *ppos is where we left it */
4847 if (unlikely(*ppos != m->read_pos)) {
4848 diff --git a/include/drm/i915_pciids.h b/include/drm/i915_pciids.h
4849 index 972a25633525..c65e4489006d 100644
4850 --- a/include/drm/i915_pciids.h
4851 +++ b/include/drm/i915_pciids.h
4852 @@ -392,6 +392,12 @@
4853 INTEL_VGA_DEVICE(0x3EA8, info), /* ULT GT3 */ \
4854 INTEL_VGA_DEVICE(0x3EA5, info) /* ULT GT3 */
4855
4856 +#define INTEL_CFL_IDS(info) \
4857 + INTEL_CFL_S_GT1_IDS(info), \
4858 + INTEL_CFL_S_GT2_IDS(info), \
4859 + INTEL_CFL_H_GT2_IDS(info), \
4860 + INTEL_CFL_U_GT3_IDS(info)
4861 +
4862 /* CNL U 2+2 */
4863 #define INTEL_CNL_U_GT2_IDS(info) \
4864 INTEL_VGA_DEVICE(0x5A52, info), \
4865 diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
4866 index 631354acfa72..73bc63e0a1c4 100644
4867 --- a/include/linux/compiler-gcc.h
4868 +++ b/include/linux/compiler-gcc.h
4869 @@ -167,8 +167,6 @@
4870
4871 #if GCC_VERSION >= 40100
4872 # define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
4873 -
4874 -#define __nostackprotector __attribute__((__optimize__("no-stack-protector")))
4875 #endif
4876
4877 #if GCC_VERSION >= 40300
4878 @@ -196,6 +194,11 @@
4879 #endif /* __CHECKER__ */
4880 #endif /* GCC_VERSION >= 40300 */
4881
4882 +#if GCC_VERSION >= 40400
4883 +#define __optimize(level) __attribute__((__optimize__(level)))
4884 +#define __nostackprotector __optimize("no-stack-protector")
4885 +#endif /* GCC_VERSION >= 40400 */
4886 +
4887 #if GCC_VERSION >= 40500
4888
4889 #ifndef __CHECKER__
4890 diff --git a/include/linux/compiler.h b/include/linux/compiler.h
4891 index 52e611ab9a6c..5ff818e9a836 100644
4892 --- a/include/linux/compiler.h
4893 +++ b/include/linux/compiler.h
4894 @@ -271,6 +271,10 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
4895
4896 #endif /* __ASSEMBLY__ */
4897
4898 +#ifndef __optimize
4899 +# define __optimize(level)
4900 +#endif
4901 +
4902 /* Compile time object size, -1 for unknown */
4903 #ifndef __compiletime_object_size
4904 # define __compiletime_object_size(obj) -1
4905 diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h
4906 index 8f7788d23b57..a6989e02d0a0 100644
4907 --- a/include/linux/cpuidle.h
4908 +++ b/include/linux/cpuidle.h
4909 @@ -225,7 +225,7 @@ static inline void cpuidle_coupled_parallel_barrier(struct cpuidle_device *dev,
4910 }
4911 #endif
4912
4913 -#ifdef CONFIG_ARCH_HAS_CPU_RELAX
4914 +#if defined(CONFIG_CPU_IDLE) && defined(CONFIG_ARCH_HAS_CPU_RELAX)
4915 void cpuidle_poll_state_init(struct cpuidle_driver *drv);
4916 #else
4917 static inline void cpuidle_poll_state_init(struct cpuidle_driver *drv) {}
4918 diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
4919 index 296d1e0ea87b..b708e5169d1d 100644
4920 --- a/include/linux/jbd2.h
4921 +++ b/include/linux/jbd2.h
4922 @@ -418,26 +418,41 @@ static inline void jbd_unlock_bh_journal_head(struct buffer_head *bh)
4923 #define JI_WAIT_DATA (1 << __JI_WAIT_DATA)
4924
4925 /**
4926 - * struct jbd_inode is the structure linking inodes in ordered mode
4927 - * present in a transaction so that we can sync them during commit.
4928 + * struct jbd_inode - The jbd_inode type is the structure linking inodes in
4929 + * ordered mode present in a transaction so that we can sync them during commit.
4930 */
4931 struct jbd2_inode {
4932 - /* Which transaction does this inode belong to? Either the running
4933 - * transaction or the committing one. [j_list_lock] */
4934 + /**
4935 + * @i_transaction:
4936 + *
4937 + * Which transaction does this inode belong to? Either the running
4938 + * transaction or the committing one. [j_list_lock]
4939 + */
4940 transaction_t *i_transaction;
4941
4942 - /* Pointer to the running transaction modifying inode's data in case
4943 - * there is already a committing transaction touching it. [j_list_lock] */
4944 + /**
4945 + * @i_next_transaction:
4946 + *
4947 + * Pointer to the running transaction modifying inode's data in case
4948 + * there is already a committing transaction touching it. [j_list_lock]
4949 + */
4950 transaction_t *i_next_transaction;
4951
4952 - /* List of inodes in the i_transaction [j_list_lock] */
4953 + /**
4954 + * @i_list: List of inodes in the i_transaction [j_list_lock]
4955 + */
4956 struct list_head i_list;
4957
4958 - /* VFS inode this inode belongs to [constant during the lifetime
4959 - * of the structure] */
4960 + /**
4961 + * @i_vfs_inode:
4962 + *
4963 + * VFS inode this inode belongs to [constant for lifetime of structure]
4964 + */
4965 struct inode *i_vfs_inode;
4966
4967 - /* Flags of inode [j_list_lock] */
4968 + /**
4969 + * @i_flags: Flags of inode [j_list_lock]
4970 + */
4971 unsigned long i_flags;
4972 };
4973
4974 @@ -447,12 +462,20 @@ struct jbd2_revoke_table_s;
4975 * struct handle_s - The handle_s type is the concrete type associated with
4976 * handle_t.
4977 * @h_transaction: Which compound transaction is this update a part of?
4978 + * @h_journal: Which journal handle belongs to - used iff h_reserved set.
4979 + * @h_rsv_handle: Handle reserved for finishing the logical operation.
4980 * @h_buffer_credits: Number of remaining buffers we are allowed to dirty.
4981 - * @h_ref: Reference count on this handle
4982 - * @h_err: Field for caller's use to track errors through large fs operations
4983 - * @h_sync: flag for sync-on-close
4984 - * @h_jdata: flag to force data journaling
4985 - * @h_aborted: flag indicating fatal error on handle
4986 + * @h_ref: Reference count on this handle.
4987 + * @h_err: Field for caller's use to track errors through large fs operations.
4988 + * @h_sync: Flag for sync-on-close.
4989 + * @h_jdata: Flag to force data journaling.
4990 + * @h_reserved: Flag for handle for reserved credits.
4991 + * @h_aborted: Flag indicating fatal error on handle.
4992 + * @h_type: For handle statistics.
4993 + * @h_line_no: For handle statistics.
4994 + * @h_start_jiffies: Handle Start time.
4995 + * @h_requested_credits: Holds @h_buffer_credits after handle is started.
4996 + * @saved_alloc_context: Saved context while transaction is open.
4997 **/
4998
4999 /* Docbook can't yet cope with the bit fields, but will leave the documentation
5000 @@ -462,32 +485,23 @@ struct jbd2_revoke_table_s;
5001 struct jbd2_journal_handle
5002 {
5003 union {
5004 - /* Which compound transaction is this update a part of? */
5005 transaction_t *h_transaction;
5006 /* Which journal handle belongs to - used iff h_reserved set */
5007 journal_t *h_journal;
5008 };
5009
5010 - /* Handle reserved for finishing the logical operation */
5011 handle_t *h_rsv_handle;
5012 -
5013 - /* Number of remaining buffers we are allowed to dirty: */
5014 int h_buffer_credits;
5015 -
5016 - /* Reference count on this handle */
5017 int h_ref;
5018 -
5019 - /* Field for caller's use to track errors through large fs */
5020 - /* operations */
5021 int h_err;
5022
5023 /* Flags [no locking] */
5024 - unsigned int h_sync: 1; /* sync-on-close */
5025 - unsigned int h_jdata: 1; /* force data journaling */
5026 - unsigned int h_reserved: 1; /* handle with reserved credits */
5027 - unsigned int h_aborted: 1; /* fatal error on handle */
5028 - unsigned int h_type: 8; /* for handle statistics */
5029 - unsigned int h_line_no: 16; /* for handle statistics */
5030 + unsigned int h_sync: 1;
5031 + unsigned int h_jdata: 1;
5032 + unsigned int h_reserved: 1;
5033 + unsigned int h_aborted: 1;
5034 + unsigned int h_type: 8;
5035 + unsigned int h_line_no: 16;
5036
5037 unsigned long h_start_jiffies;
5038 unsigned int h_requested_credits;
5039 @@ -729,228 +743,253 @@ jbd2_time_diff(unsigned long start, unsigned long end)
5040 /**
5041 * struct journal_s - The journal_s type is the concrete type associated with
5042 * journal_t.
5043 - * @j_flags: General journaling state flags
5044 - * @j_errno: Is there an outstanding uncleared error on the journal (from a
5045 - * prior abort)?
5046 - * @j_sb_buffer: First part of superblock buffer
5047 - * @j_superblock: Second part of superblock buffer
5048 - * @j_format_version: Version of the superblock format
5049 - * @j_state_lock: Protect the various scalars in the journal
5050 - * @j_barrier_count: Number of processes waiting to create a barrier lock
5051 - * @j_barrier: The barrier lock itself
5052 - * @j_running_transaction: The current running transaction..
5053 - * @j_committing_transaction: the transaction we are pushing to disk
5054 - * @j_checkpoint_transactions: a linked circular list of all transactions
5055 - * waiting for checkpointing
5056 - * @j_wait_transaction_locked: Wait queue for waiting for a locked transaction
5057 - * to start committing, or for a barrier lock to be released
5058 - * @j_wait_done_commit: Wait queue for waiting for commit to complete
5059 - * @j_wait_commit: Wait queue to trigger commit
5060 - * @j_wait_updates: Wait queue to wait for updates to complete
5061 - * @j_wait_reserved: Wait queue to wait for reserved buffer credits to drop
5062 - * @j_checkpoint_mutex: Mutex for locking against concurrent checkpoints
5063 - * @j_head: Journal head - identifies the first unused block in the journal
5064 - * @j_tail: Journal tail - identifies the oldest still-used block in the
5065 - * journal.
5066 - * @j_free: Journal free - how many free blocks are there in the journal?
5067 - * @j_first: The block number of the first usable block
5068 - * @j_last: The block number one beyond the last usable block
5069 - * @j_dev: Device where we store the journal
5070 - * @j_blocksize: blocksize for the location where we store the journal.
5071 - * @j_blk_offset: starting block offset for into the device where we store the
5072 - * journal
5073 - * @j_fs_dev: Device which holds the client fs. For internal journal this will
5074 - * be equal to j_dev
5075 - * @j_reserved_credits: Number of buffers reserved from the running transaction
5076 - * @j_maxlen: Total maximum capacity of the journal region on disk.
5077 - * @j_list_lock: Protects the buffer lists and internal buffer state.
5078 - * @j_inode: Optional inode where we store the journal. If present, all journal
5079 - * block numbers are mapped into this inode via bmap().
5080 - * @j_tail_sequence: Sequence number of the oldest transaction in the log
5081 - * @j_transaction_sequence: Sequence number of the next transaction to grant
5082 - * @j_commit_sequence: Sequence number of the most recently committed
5083 - * transaction
5084 - * @j_commit_request: Sequence number of the most recent transaction wanting
5085 - * commit
5086 - * @j_uuid: Uuid of client object.
5087 - * @j_task: Pointer to the current commit thread for this journal
5088 - * @j_max_transaction_buffers: Maximum number of metadata buffers to allow in a
5089 - * single compound commit transaction
5090 - * @j_commit_interval: What is the maximum transaction lifetime before we begin
5091 - * a commit?
5092 - * @j_commit_timer: The timer used to wakeup the commit thread
5093 - * @j_revoke_lock: Protect the revoke table
5094 - * @j_revoke: The revoke table - maintains the list of revoked blocks in the
5095 - * current transaction.
5096 - * @j_revoke_table: alternate revoke tables for j_revoke
5097 - * @j_wbuf: array of buffer_heads for jbd2_journal_commit_transaction
5098 - * @j_wbufsize: maximum number of buffer_heads allowed in j_wbuf, the
5099 - * number that will fit in j_blocksize
5100 - * @j_last_sync_writer: most recent pid which did a synchronous write
5101 - * @j_history_lock: Protect the transactions statistics history
5102 - * @j_proc_entry: procfs entry for the jbd statistics directory
5103 - * @j_stats: Overall statistics
5104 - * @j_private: An opaque pointer to fs-private information.
5105 - * @j_trans_commit_map: Lockdep entity to track transaction commit dependencies
5106 */
5107 -
5108 struct journal_s
5109 {
5110 - /* General journaling state flags [j_state_lock] */
5111 + /**
5112 + * @j_flags: General journaling state flags [j_state_lock]
5113 + */
5114 unsigned long j_flags;
5115
5116 - /*
5117 + /**
5118 + * @j_errno:
5119 + *
5120 * Is there an outstanding uncleared error on the journal (from a prior
5121 * abort)? [j_state_lock]
5122 */
5123 int j_errno;
5124
5125 - /* The superblock buffer */
5126 + /**
5127 + * @j_sb_buffer: The first part of the superblock buffer.
5128 + */
5129 struct buffer_head *j_sb_buffer;
5130 +
5131 + /**
5132 + * @j_superblock: The second part of the superblock buffer.
5133 + */
5134 journal_superblock_t *j_superblock;
5135
5136 - /* Version of the superblock format */
5137 + /**
5138 + * @j_format_version: Version of the superblock format.
5139 + */
5140 int j_format_version;
5141
5142 - /*
5143 - * Protect the various scalars in the journal
5144 + /**
5145 + * @j_state_lock: Protect the various scalars in the journal.
5146 */
5147 rwlock_t j_state_lock;
5148
5149 - /*
5150 + /**
5151 + * @j_barrier_count:
5152 + *
5153 * Number of processes waiting to create a barrier lock [j_state_lock]
5154 */
5155 int j_barrier_count;
5156
5157 - /* The barrier lock itself */
5158 + /**
5159 + * @j_barrier: The barrier lock itself.
5160 + */
5161 struct mutex j_barrier;
5162
5163 - /*
5164 + /**
5165 + * @j_running_transaction:
5166 + *
5167 * Transactions: The current running transaction...
5168 * [j_state_lock] [caller holding open handle]
5169 */
5170 transaction_t *j_running_transaction;
5171
5172 - /*
5173 + /**
5174 + * @j_committing_transaction:
5175 + *
5176 * the transaction we are pushing to disk
5177 * [j_state_lock] [caller holding open handle]
5178 */
5179 transaction_t *j_committing_transaction;
5180
5181 - /*
5182 + /**
5183 + * @j_checkpoint_transactions:
5184 + *
5185 * ... and a linked circular list of all transactions waiting for
5186 * checkpointing. [j_list_lock]
5187 */
5188 transaction_t *j_checkpoint_transactions;
5189
5190 - /*
5191 + /**
5192 + * @j_wait_transaction_locked:
5193 + *
5194 * Wait queue for waiting for a locked transaction to start committing,
5195 - * or for a barrier lock to be released
5196 + * or for a barrier lock to be released.
5197 */
5198 wait_queue_head_t j_wait_transaction_locked;
5199
5200 - /* Wait queue for waiting for commit to complete */
5201 + /**
5202 + * @j_wait_done_commit: Wait queue for waiting for commit to complete.
5203 + */
5204 wait_queue_head_t j_wait_done_commit;
5205
5206 - /* Wait queue to trigger commit */
5207 + /**
5208 + * @j_wait_commit: Wait queue to trigger commit.
5209 + */
5210 wait_queue_head_t j_wait_commit;
5211
5212 - /* Wait queue to wait for updates to complete */
5213 + /**
5214 + * @j_wait_updates: Wait queue to wait for updates to complete.
5215 + */
5216 wait_queue_head_t j_wait_updates;
5217
5218 - /* Wait queue to wait for reserved buffer credits to drop */
5219 + /**
5220 + * @j_wait_reserved:
5221 + *
5222 + * Wait queue to wait for reserved buffer credits to drop.
5223 + */
5224 wait_queue_head_t j_wait_reserved;
5225
5226 - /* Semaphore for locking against concurrent checkpoints */
5227 + /**
5228 + * @j_checkpoint_mutex:
5229 + *
5230 + * Semaphore for locking against concurrent checkpoints.
5231 + */
5232 struct mutex j_checkpoint_mutex;
5233
5234 - /*
5235 + /**
5236 + * @j_chkpt_bhs:
5237 + *
5238 * List of buffer heads used by the checkpoint routine. This
5239 * was moved from jbd2_log_do_checkpoint() to reduce stack
5240 * usage. Access to this array is controlled by the
5241 - * j_checkpoint_mutex. [j_checkpoint_mutex]
5242 + * @j_checkpoint_mutex. [j_checkpoint_mutex]
5243 */
5244 struct buffer_head *j_chkpt_bhs[JBD2_NR_BATCH];
5245 -
5246 - /*
5247 +
5248 + /**
5249 + * @j_head:
5250 + *
5251 * Journal head: identifies the first unused block in the journal.
5252 * [j_state_lock]
5253 */
5254 unsigned long j_head;
5255
5256 - /*
5257 + /**
5258 + * @j_tail:
5259 + *
5260 * Journal tail: identifies the oldest still-used block in the journal.
5261 * [j_state_lock]
5262 */
5263 unsigned long j_tail;
5264
5265 - /*
5266 + /**
5267 + * @j_free:
5268 + *
5269 * Journal free: how many free blocks are there in the journal?
5270 * [j_state_lock]
5271 */
5272 unsigned long j_free;
5273
5274 - /*
5275 - * Journal start and end: the block numbers of the first usable block
5276 - * and one beyond the last usable block in the journal. [j_state_lock]
5277 + /**
5278 + * @j_first:
5279 + *
5280 + * The block number of the first usable block in the journal
5281 + * [j_state_lock].
5282 */
5283 unsigned long j_first;
5284 +
5285 + /**
5286 + * @j_last:
5287 + *
5288 + * The block number one beyond the last usable block in the journal
5289 + * [j_state_lock].
5290 + */
5291 unsigned long j_last;
5292
5293 - /*
5294 - * Device, blocksize and starting block offset for the location where we
5295 - * store the journal.
5296 + /**
5297 + * @j_dev: Device where we store the journal.
5298 */
5299 struct block_device *j_dev;
5300 +
5301 + /**
5302 + * @j_blocksize: Block size for the location where we store the journal.
5303 + */
5304 int j_blocksize;
5305 +
5306 + /**
5307 + * @j_blk_offset:
5308 + *
5309 + * Starting block offset into the device where we store the journal.
5310 + */
5311 unsigned long long j_blk_offset;
5312 +
5313 + /**
5314 + * @j_devname: Journal device name.
5315 + */
5316 char j_devname[BDEVNAME_SIZE+24];
5317
5318 - /*
5319 + /**
5320 + * @j_fs_dev:
5321 + *
5322 * Device which holds the client fs. For internal journal this will be
5323 * equal to j_dev.
5324 */
5325 struct block_device *j_fs_dev;
5326
5327 - /* Total maximum capacity of the journal region on disk. */
5328 + /**
5329 + * @j_maxlen: Total maximum capacity of the journal region on disk.
5330 + */
5331 unsigned int j_maxlen;
5332
5333 - /* Number of buffers reserved from the running transaction */
5334 + /**
5335 + * @j_reserved_credits:
5336 + *
5337 + * Number of buffers reserved from the running transaction.
5338 + */
5339 atomic_t j_reserved_credits;
5340
5341 - /*
5342 - * Protects the buffer lists and internal buffer state.
5343 + /**
5344 + * @j_list_lock: Protects the buffer lists and internal buffer state.
5345 */
5346 spinlock_t j_list_lock;
5347
5348 - /* Optional inode where we store the journal. If present, all */
5349 - /* journal block numbers are mapped into this inode via */
5350 - /* bmap(). */
5351 + /**
5352 + * @j_inode:
5353 + *
5354 + * Optional inode where we store the journal. If present, all
5355 + * journal block numbers are mapped into this inode via bmap().
5356 + */
5357 struct inode *j_inode;
5358
5359 - /*
5360 + /**
5361 + * @j_tail_sequence:
5362 + *
5363 * Sequence number of the oldest transaction in the log [j_state_lock]
5364 */
5365 tid_t j_tail_sequence;
5366
5367 - /*
5368 + /**
5369 + * @j_transaction_sequence:
5370 + *
5371 * Sequence number of the next transaction to grant [j_state_lock]
5372 */
5373 tid_t j_transaction_sequence;
5374
5375 - /*
5376 + /**
5377 + * @j_commit_sequence:
5378 + *
5379 * Sequence number of the most recently committed transaction
5380 * [j_state_lock].
5381 */
5382 tid_t j_commit_sequence;
5383
5384 - /*
5385 + /**
5386 + * @j_commit_request:
5387 + *
5388 * Sequence number of the most recent transaction wanting commit
5389 * [j_state_lock]
5390 */
5391 tid_t j_commit_request;
5392
5393 - /*
5394 + /**
5395 + * @j_uuid:
5396 + *
5397 * Journal uuid: identifies the object (filesystem, LVM volume etc)
5398 * backed by this journal. This will eventually be replaced by an array
5399 * of uuids, allowing us to index multiple devices within a single
5400 @@ -958,85 +997,151 @@ struct journal_s
5401 */
5402 __u8 j_uuid[16];
5403
5404 - /* Pointer to the current commit thread for this journal */
5405 + /**
5406 + * @j_task: Pointer to the current commit thread for this journal.
5407 + */
5408 struct task_struct *j_task;
5409
5410 - /*
5411 + /**
5412 + * @j_max_transaction_buffers:
5413 + *
5414 * Maximum number of metadata buffers to allow in a single compound
5415 - * commit transaction
5416 + * commit transaction.
5417 */
5418 int j_max_transaction_buffers;
5419
5420 - /*
5421 + /**
5422 + * @j_commit_interval:
5423 + *
5424 * What is the maximum transaction lifetime before we begin a commit?
5425 */
5426 unsigned long j_commit_interval;
5427
5428 - /* The timer used to wakeup the commit thread: */
5429 + /**
5430 + * @j_commit_timer: The timer used to wakeup the commit thread.
5431 + */
5432 struct timer_list j_commit_timer;
5433
5434 - /*
5435 - * The revoke table: maintains the list of revoked blocks in the
5436 - * current transaction. [j_revoke_lock]
5437 + /**
5438 + * @j_revoke_lock: Protect the revoke table.
5439 */
5440 spinlock_t j_revoke_lock;
5441 +
5442 + /**
5443 + * @j_revoke:
5444 + *
5445 + * The revoke table - maintains the list of revoked blocks in the
5446 + * current transaction.
5447 + */
5448 struct jbd2_revoke_table_s *j_revoke;
5449 +
5450 + /**
5451 + * @j_revoke_table: Alternate revoke tables for j_revoke.
5452 + */
5453 struct jbd2_revoke_table_s *j_revoke_table[2];
5454
5455 - /*
5456 - * array of bhs for jbd2_journal_commit_transaction
5457 + /**
5458 + * @j_wbuf: Array of bhs for jbd2_journal_commit_transaction.
5459 */
5460 struct buffer_head **j_wbuf;
5461 +
5462 + /**
5463 + * @j_wbufsize:
5464 + *
5465 + * Size of @j_wbuf array.
5466 + */
5467 int j_wbufsize;
5468
5469 - /*
5470 - * this is the pid of hte last person to run a synchronous operation
5471 - * through the journal
5472 + /**
5473 + * @j_last_sync_writer:
5474 + *
5475 + * The pid of the last person to run a synchronous operation
5476 + * through the journal.
5477 */
5478 pid_t j_last_sync_writer;
5479
5480 - /*
5481 - * the average amount of time in nanoseconds it takes to commit a
5482 + /**
5483 + * @j_average_commit_time:
5484 + *
5485 + * The average amount of time in nanoseconds it takes to commit a
5486 * transaction to disk. [j_state_lock]
5487 */
5488 u64 j_average_commit_time;
5489
5490 - /*
5491 - * minimum and maximum times that we should wait for
5492 - * additional filesystem operations to get batched into a
5493 - * synchronous handle in microseconds
5494 + /**
5495 + * @j_min_batch_time:
5496 + *
5497 + * Minimum time that we should wait for additional filesystem operations
5498 + * to get batched into a synchronous handle in microseconds.
5499 */
5500 u32 j_min_batch_time;
5501 +
5502 + /**
5503 + * @j_max_batch_time:
5504 + *
5505 + * Maximum time that we should wait for additional filesystem operations
5506 + * to get batched into a synchronous handle in microseconds.
5507 + */
5508 u32 j_max_batch_time;
5509
5510 - /* This function is called when a transaction is closed */
5511 + /**
5512 + * @j_commit_callback:
5513 + *
5514 + * This function is called when a transaction is closed.
5515 + */
5516 void (*j_commit_callback)(journal_t *,
5517 transaction_t *);
5518
5519 /*
5520 * Journal statistics
5521 */
5522 +
5523 + /**
5524 + * @j_history_lock: Protect the transactions statistics history.
5525 + */
5526 spinlock_t j_history_lock;
5527 +
5528 + /**
5529 + * @j_proc_entry: procfs entry for the jbd statistics directory.
5530 + */
5531 struct proc_dir_entry *j_proc_entry;
5532 +
5533 + /**
5534 + * @j_stats: Overall statistics.
5535 + */
5536 struct transaction_stats_s j_stats;
5537
5538 - /* Failed journal commit ID */
5539 + /**
5540 + * @j_failed_commit: Failed journal commit ID.
5541 + */
5542 unsigned int j_failed_commit;
5543
5544 - /*
5545 + /**
5546 + * @j_private:
5547 + *
5548 * An opaque pointer to fs-private information. ext3 puts its
5549 - * superblock pointer here
5550 + * superblock pointer here.
5551 */
5552 void *j_private;
5553
5554 - /* Reference to checksum algorithm driver via cryptoapi */
5555 + /**
5556 + * @j_chksum_driver:
5557 + *
5558 + * Reference to checksum algorithm driver via cryptoapi.
5559 + */
5560 struct crypto_shash *j_chksum_driver;
5561
5562 - /* Precomputed journal UUID checksum for seeding other checksums */
5563 + /**
5564 + * @j_csum_seed:
5565 + *
5566 + * Precomputed journal UUID checksum for seeding other checksums.
5567 + */
5568 __u32 j_csum_seed;
5569
5570 #ifdef CONFIG_DEBUG_LOCK_ALLOC
5571 - /*
5572 + /**
5573 + * @j_trans_commit_map:
5574 + *
5575 * Lockdep entity to track transaction commit dependencies. Handles
5576 * hold this "lock" for read, when we wait for commit, we acquire the
5577 * "lock" for writing. This matches the properties of jbd2 journalling
5578 diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
5579 index a0610427e168..b82c4ae92411 100644
5580 --- a/include/linux/mlx5/driver.h
5581 +++ b/include/linux/mlx5/driver.h
5582 @@ -1238,7 +1238,7 @@ mlx5_get_vector_affinity(struct mlx5_core_dev *dev, int vector)
5583 int eqn;
5584 int err;
5585
5586 - err = mlx5_vector2eqn(dev, vector, &eqn, &irq);
5587 + err = mlx5_vector2eqn(dev, MLX5_EQ_VEC_COMP_BASE + vector, &eqn, &irq);
5588 if (err)
5589 return NULL;
5590
5591 diff --git a/include/linux/mm_inline.h b/include/linux/mm_inline.h
5592 index c30b32e3c862..10191c28fc04 100644
5593 --- a/include/linux/mm_inline.h
5594 +++ b/include/linux/mm_inline.h
5595 @@ -127,10 +127,4 @@ static __always_inline enum lru_list page_lru(struct page *page)
5596
5597 #define lru_to_page(head) (list_entry((head)->prev, struct page, lru))
5598
5599 -#ifdef arch_unmap_kpfn
5600 -extern void arch_unmap_kpfn(unsigned long pfn);
5601 -#else
5602 -static __always_inline void arch_unmap_kpfn(unsigned long pfn) { }
5603 -#endif
5604 -
5605 #endif
5606 diff --git a/include/linux/nospec.h b/include/linux/nospec.h
5607 index b99bced39ac2..fbc98e2c8228 100644
5608 --- a/include/linux/nospec.h
5609 +++ b/include/linux/nospec.h
5610 @@ -19,20 +19,6 @@
5611 static inline unsigned long array_index_mask_nospec(unsigned long index,
5612 unsigned long size)
5613 {
5614 - /*
5615 - * Warn developers about inappropriate array_index_nospec() usage.
5616 - *
5617 - * Even if the CPU speculates past the WARN_ONCE branch, the
5618 - * sign bit of @index is taken into account when generating the
5619 - * mask.
5620 - *
5621 - * This warning is compiled out when the compiler can infer that
5622 - * @index and @size are less than LONG_MAX.
5623 - */
5624 - if (WARN_ONCE(index > LONG_MAX || size > LONG_MAX,
5625 - "array_index_nospec() limited to range of [0, LONG_MAX]\n"))
5626 - return 0;
5627 -
5628 /*
5629 * Always calculate and emit the mask even if the compiler
5630 * thinks the mask is not needed. The compiler does not take
5631 @@ -43,6 +29,26 @@ static inline unsigned long array_index_mask_nospec(unsigned long index,
5632 }
5633 #endif
5634
5635 +/*
5636 + * Warn developers about inappropriate array_index_nospec() usage.
5637 + *
5638 + * Even if the CPU speculates past the WARN_ONCE branch, the
5639 + * sign bit of @index is taken into account when generating the
5640 + * mask.
5641 + *
5642 + * This warning is compiled out when the compiler can infer that
5643 + * @index and @size are less than LONG_MAX.
5644 + */
5645 +#define array_index_mask_nospec_check(index, size) \
5646 +({ \
5647 + if (WARN_ONCE(index > LONG_MAX || size > LONG_MAX, \
5648 + "array_index_nospec() limited to range of [0, LONG_MAX]\n")) \
5649 + _mask = 0; \
5650 + else \
5651 + _mask = array_index_mask_nospec(index, size); \
5652 + _mask; \
5653 +})
5654 +
5655 /*
5656 * array_index_nospec - sanitize an array index after a bounds check
5657 *
5658 @@ -61,7 +67,7 @@ static inline unsigned long array_index_mask_nospec(unsigned long index,
5659 ({ \
5660 typeof(index) _i = (index); \
5661 typeof(size) _s = (size); \
5662 - unsigned long _mask = array_index_mask_nospec(_i, _s); \
5663 + unsigned long _mask = array_index_mask_nospec_check(_i, _s); \
5664 \
5665 BUILD_BUG_ON(sizeof(_i) > sizeof(long)); \
5666 BUILD_BUG_ON(sizeof(_s) > sizeof(long)); \
5667 diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
5668 index fd84cda5ed7c..0d6a110dae7c 100644
5669 --- a/include/rdma/ib_verbs.h
5670 +++ b/include/rdma/ib_verbs.h
5671 @@ -983,9 +983,9 @@ struct ib_wc {
5672 u32 invalidate_rkey;
5673 } ex;
5674 u32 src_qp;
5675 + u32 slid;
5676 int wc_flags;
5677 u16 pkey_index;
5678 - u32 slid;
5679 u8 sl;
5680 u8 dlid_path_bits;
5681 u8 port_num; /* valid only for DR SMPs on switches */
5682 diff --git a/include/trace/events/xen.h b/include/trace/events/xen.h
5683 index b8adf05c534e..7dd8f34c37df 100644
5684 --- a/include/trace/events/xen.h
5685 +++ b/include/trace/events/xen.h
5686 @@ -368,7 +368,7 @@ TRACE_EVENT(xen_mmu_flush_tlb,
5687 TP_printk("%s", "")
5688 );
5689
5690 -TRACE_EVENT(xen_mmu_flush_tlb_single,
5691 +TRACE_EVENT(xen_mmu_flush_tlb_one_user,
5692 TP_PROTO(unsigned long addr),
5693 TP_ARGS(addr),
5694 TP_STRUCT__entry(
5695 diff --git a/kernel/memremap.c b/kernel/memremap.c
5696 index 403ab9cdb949..4712ce646e04 100644
5697 --- a/kernel/memremap.c
5698 +++ b/kernel/memremap.c
5699 @@ -301,7 +301,8 @@ static void devm_memremap_pages_release(struct device *dev, void *data)
5700
5701 /* pages are dead and unused, undo the arch mapping */
5702 align_start = res->start & ~(SECTION_SIZE - 1);
5703 - align_size = ALIGN(resource_size(res), SECTION_SIZE);
5704 + align_size = ALIGN(res->start + resource_size(res), SECTION_SIZE)
5705 + - align_start;
5706
5707 mem_hotplug_begin();
5708 arch_remove_memory(align_start, align_size);
5709 diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
5710 index 61e7f0678d33..a764aec3c9a1 100644
5711 --- a/kernel/trace/trace_events_filter.c
5712 +++ b/kernel/trace/trace_events_filter.c
5713 @@ -400,7 +400,6 @@ enum regex_type filter_parse_regex(char *buff, int len, char **search, int *not)
5714 for (i = 0; i < len; i++) {
5715 if (buff[i] == '*') {
5716 if (!i) {
5717 - *search = buff + 1;
5718 type = MATCH_END_ONLY;
5719 } else if (i == len - 1) {
5720 if (type == MATCH_END_ONLY)
5721 @@ -410,14 +409,14 @@ enum regex_type filter_parse_regex(char *buff, int len, char **search, int *not)
5722 buff[i] = 0;
5723 break;
5724 } else { /* pattern continues, use full glob */
5725 - type = MATCH_GLOB;
5726 - break;
5727 + return MATCH_GLOB;
5728 }
5729 } else if (strchr("[?\\", buff[i])) {
5730 - type = MATCH_GLOB;
5731 - break;
5732 + return MATCH_GLOB;
5733 }
5734 }
5735 + if (buff[0] == '*')
5736 + *search = buff + 1;
5737
5738 return type;
5739 }
5740 diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
5741 index 40592e7b3568..268029ae1be6 100644
5742 --- a/kernel/trace/trace_uprobe.c
5743 +++ b/kernel/trace/trace_uprobe.c
5744 @@ -608,7 +608,7 @@ static int probes_seq_show(struct seq_file *m, void *v)
5745
5746 /* Don't print "0x (null)" when offset is 0 */
5747 if (tu->offset) {
5748 - seq_printf(m, "0x%p", (void *)tu->offset);
5749 + seq_printf(m, "0x%px", (void *)tu->offset);
5750 } else {
5751 switch (sizeof(void *)) {
5752 case 4:
5753 diff --git a/lib/swiotlb.c b/lib/swiotlb.c
5754 index cea19aaf303c..0d7f46fb993a 100644
5755 --- a/lib/swiotlb.c
5756 +++ b/lib/swiotlb.c
5757 @@ -586,7 +586,7 @@ phys_addr_t swiotlb_tbl_map_single(struct device *hwdev,
5758
5759 not_found:
5760 spin_unlock_irqrestore(&io_tlb_lock, flags);
5761 - if (printk_ratelimit())
5762 + if (!(attrs & DMA_ATTR_NO_WARN) && printk_ratelimit())
5763 dev_warn(hwdev, "swiotlb buffer is full (sz: %zd bytes)\n", size);
5764 return SWIOTLB_MAP_ERROR;
5765 found:
5766 @@ -713,6 +713,7 @@ void *
5767 swiotlb_alloc_coherent(struct device *hwdev, size_t size,
5768 dma_addr_t *dma_handle, gfp_t flags)
5769 {
5770 + bool warn = !(flags & __GFP_NOWARN);
5771 dma_addr_t dev_addr;
5772 void *ret;
5773 int order = get_order(size);
5774 @@ -738,8 +739,8 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size,
5775 * GFP_DMA memory; fall back on map_single(), which
5776 * will grab memory from the lowest available address range.
5777 */
5778 - phys_addr_t paddr = map_single(hwdev, 0, size,
5779 - DMA_FROM_DEVICE, 0);
5780 + phys_addr_t paddr = map_single(hwdev, 0, size, DMA_FROM_DEVICE,
5781 + warn ? 0 : DMA_ATTR_NO_WARN);
5782 if (paddr == SWIOTLB_MAP_ERROR)
5783 goto err_warn;
5784
5785 @@ -769,9 +770,11 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size,
5786 return ret;
5787
5788 err_warn:
5789 - pr_warn("swiotlb: coherent allocation failed for device %s size=%zu\n",
5790 - dev_name(hwdev), size);
5791 - dump_stack();
5792 + if (warn && printk_ratelimit()) {
5793 + pr_warn("swiotlb: coherent allocation failed for device %s size=%zu\n",
5794 + dev_name(hwdev), size);
5795 + dump_stack();
5796 + }
5797
5798 return NULL;
5799 }
5800 diff --git a/mm/memory-failure.c b/mm/memory-failure.c
5801 index 4acdf393a801..c85fa0038848 100644
5802 --- a/mm/memory-failure.c
5803 +++ b/mm/memory-failure.c
5804 @@ -1146,8 +1146,6 @@ int memory_failure(unsigned long pfn, int trapno, int flags)
5805 return 0;
5806 }
5807
5808 - arch_unmap_kpfn(pfn);
5809 -
5810 orig_head = hpage = compound_head(p);
5811 num_poisoned_pages_inc();
5812
5813 diff --git a/mm/memory.c b/mm/memory.c
5814 index 793004608332..93e51ad41ba3 100644
5815 --- a/mm/memory.c
5816 +++ b/mm/memory.c
5817 @@ -81,7 +81,7 @@
5818
5819 #include "internal.h"
5820
5821 -#ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS
5822 +#if defined(LAST_CPUPID_NOT_IN_PAGE_FLAGS) && !defined(CONFIG_COMPILE_TEST)
5823 #warning Unfortunate NUMA and NUMA Balancing config, growing page-frame for last_cpupid.
5824 #endif
5825
5826 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
5827 index 76c9688b6a0a..d23818c5465a 100644
5828 --- a/mm/page_alloc.c
5829 +++ b/mm/page_alloc.c
5830 @@ -1177,9 +1177,10 @@ static void free_one_page(struct zone *zone,
5831 }
5832
5833 static void __meminit __init_single_page(struct page *page, unsigned long pfn,
5834 - unsigned long zone, int nid)
5835 + unsigned long zone, int nid, bool zero)
5836 {
5837 - mm_zero_struct_page(page);
5838 + if (zero)
5839 + mm_zero_struct_page(page);
5840 set_page_links(page, zone, nid, pfn);
5841 init_page_count(page);
5842 page_mapcount_reset(page);
5843 @@ -1194,9 +1195,9 @@ static void __meminit __init_single_page(struct page *page, unsigned long pfn,
5844 }
5845
5846 static void __meminit __init_single_pfn(unsigned long pfn, unsigned long zone,
5847 - int nid)
5848 + int nid, bool zero)
5849 {
5850 - return __init_single_page(pfn_to_page(pfn), pfn, zone, nid);
5851 + return __init_single_page(pfn_to_page(pfn), pfn, zone, nid, zero);
5852 }
5853
5854 #ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
5855 @@ -1217,7 +1218,7 @@ static void __meminit init_reserved_page(unsigned long pfn)
5856 if (pfn >= zone->zone_start_pfn && pfn < zone_end_pfn(zone))
5857 break;
5858 }
5859 - __init_single_pfn(pfn, zid, nid);
5860 + __init_single_pfn(pfn, zid, nid, true);
5861 }
5862 #else
5863 static inline void init_reserved_page(unsigned long pfn)
5864 @@ -1514,7 +1515,7 @@ static unsigned long __init deferred_init_range(int nid, int zid,
5865 page++;
5866 else
5867 page = pfn_to_page(pfn);
5868 - __init_single_page(page, pfn, zid, nid);
5869 + __init_single_page(page, pfn, zid, nid, true);
5870 cond_resched();
5871 }
5872 }
5873 @@ -5393,15 +5394,20 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
5874 * can be created for invalid pages (for alignment)
5875 * check here not to call set_pageblock_migratetype() against
5876 * pfn out of zone.
5877 + *
5878 + * Please note that MEMMAP_HOTPLUG path doesn't clear memmap
5879 + * because this is done early in sparse_add_one_section
5880 */
5881 if (!(pfn & (pageblock_nr_pages - 1))) {
5882 struct page *page = pfn_to_page(pfn);
5883
5884 - __init_single_page(page, pfn, zone, nid);
5885 + __init_single_page(page, pfn, zone, nid,
5886 + context != MEMMAP_HOTPLUG);
5887 set_pageblock_migratetype(page, MIGRATE_MOVABLE);
5888 cond_resched();
5889 } else {
5890 - __init_single_pfn(pfn, zone, nid);
5891 + __init_single_pfn(pfn, zone, nid,
5892 + context != MEMMAP_HOTPLUG);
5893 }
5894 }
5895 }
5896 diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c
5897 index f3a4efcf1456..3aa5a93ad107 100644
5898 --- a/net/9p/trans_virtio.c
5899 +++ b/net/9p/trans_virtio.c
5900 @@ -160,7 +160,8 @@ static void req_done(struct virtqueue *vq)
5901 spin_unlock_irqrestore(&chan->lock, flags);
5902 /* Wakeup if anyone waiting for VirtIO ring space. */
5903 wake_up(chan->vc_wq);
5904 - p9_client_cb(chan->client, req, REQ_STATUS_RCVD);
5905 + if (len)
5906 + p9_client_cb(chan->client, req, REQ_STATUS_RCVD);
5907 }
5908 }
5909
5910 diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
5911 index 8ca9915befc8..aae3565c3a92 100644
5912 --- a/net/mpls/af_mpls.c
5913 +++ b/net/mpls/af_mpls.c
5914 @@ -8,6 +8,7 @@
5915 #include <linux/ipv6.h>
5916 #include <linux/mpls.h>
5917 #include <linux/netconf.h>
5918 +#include <linux/nospec.h>
5919 #include <linux/vmalloc.h>
5920 #include <linux/percpu.h>
5921 #include <net/ip.h>
5922 @@ -935,24 +936,27 @@ static int mpls_nh_build_multi(struct mpls_route_config *cfg,
5923 return err;
5924 }
5925
5926 -static bool mpls_label_ok(struct net *net, unsigned int index,
5927 +static bool mpls_label_ok(struct net *net, unsigned int *index,
5928 struct netlink_ext_ack *extack)
5929 {
5930 + bool is_ok = true;
5931 +
5932 /* Reserved labels may not be set */
5933 - if (index < MPLS_LABEL_FIRST_UNRESERVED) {
5934 + if (*index < MPLS_LABEL_FIRST_UNRESERVED) {
5935 NL_SET_ERR_MSG(extack,
5936 "Invalid label - must be MPLS_LABEL_FIRST_UNRESERVED or higher");
5937 - return false;
5938 + is_ok = false;
5939 }
5940
5941 /* The full 20 bit range may not be supported. */
5942 - if (index >= net->mpls.platform_labels) {
5943 + if (is_ok && *index >= net->mpls.platform_labels) {
5944 NL_SET_ERR_MSG(extack,
5945 "Label >= configured maximum in platform_labels");
5946 - return false;
5947 + is_ok = false;
5948 }
5949
5950 - return true;
5951 + *index = array_index_nospec(*index, net->mpls.platform_labels);
5952 + return is_ok;
5953 }
5954
5955 static int mpls_route_add(struct mpls_route_config *cfg,
5956 @@ -975,7 +979,7 @@ static int mpls_route_add(struct mpls_route_config *cfg,
5957 index = find_free_label(net);
5958 }
5959
5960 - if (!mpls_label_ok(net, index, extack))
5961 + if (!mpls_label_ok(net, &index, extack))
5962 goto errout;
5963
5964 /* Append makes no sense with mpls */
5965 @@ -1052,7 +1056,7 @@ static int mpls_route_del(struct mpls_route_config *cfg,
5966
5967 index = cfg->rc_label;
5968
5969 - if (!mpls_label_ok(net, index, extack))
5970 + if (!mpls_label_ok(net, &index, extack))
5971 goto errout;
5972
5973 mpls_route_update(net, index, NULL, &cfg->rc_nlinfo);
5974 @@ -1810,7 +1814,7 @@ static int rtm_to_route_config(struct sk_buff *skb,
5975 goto errout;
5976
5977 if (!mpls_label_ok(cfg->rc_nlinfo.nl_net,
5978 - cfg->rc_label, extack))
5979 + &cfg->rc_label, extack))
5980 goto errout;
5981 break;
5982 }
5983 @@ -2137,7 +2141,7 @@ static int mpls_getroute(struct sk_buff *in_skb, struct nlmsghdr *in_nlh,
5984 goto errout;
5985 }
5986
5987 - if (!mpls_label_ok(net, in_label, extack)) {
5988 + if (!mpls_label_ok(net, &in_label, extack)) {
5989 err = -EINVAL;
5990 goto errout;
5991 }
5992 diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
5993 index a3f2ab283aeb..852b838d37b3 100644
5994 --- a/net/sunrpc/xprtrdma/rpc_rdma.c
5995 +++ b/net/sunrpc/xprtrdma/rpc_rdma.c
5996 @@ -143,7 +143,7 @@ static bool rpcrdma_args_inline(struct rpcrdma_xprt *r_xprt,
5997 if (xdr->page_len) {
5998 remaining = xdr->page_len;
5999 offset = offset_in_page(xdr->page_base);
6000 - count = 0;
6001 + count = RPCRDMA_MIN_SEND_SGES;
6002 while (remaining) {
6003 remaining -= min_t(unsigned int,
6004 PAGE_SIZE - offset, remaining);
6005 diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c
6006 index 8607c029c0dd..8cd7ee4fa0cd 100644
6007 --- a/net/sunrpc/xprtrdma/verbs.c
6008 +++ b/net/sunrpc/xprtrdma/verbs.c
6009 @@ -509,7 +509,7 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
6010 pr_warn("rpcrdma: HCA provides only %d send SGEs\n", max_sge);
6011 return -ENOMEM;
6012 }
6013 - ia->ri_max_send_sges = max_sge - RPCRDMA_MIN_SEND_SGES;
6014 + ia->ri_max_send_sges = max_sge;
6015
6016 if (ia->ri_device->attrs.max_qp_wr <= RPCRDMA_BACKWARD_WRS) {
6017 dprintk("RPC: %s: insufficient wqe's available\n",
6018 @@ -1476,6 +1476,9 @@ __rpcrdma_dma_map_regbuf(struct rpcrdma_ia *ia, struct rpcrdma_regbuf *rb)
6019 static void
6020 rpcrdma_dma_unmap_regbuf(struct rpcrdma_regbuf *rb)
6021 {
6022 + if (!rb)
6023 + return;
6024 +
6025 if (!rpcrdma_regbuf_is_mapped(rb))
6026 return;
6027
6028 @@ -1491,9 +1494,6 @@ rpcrdma_dma_unmap_regbuf(struct rpcrdma_regbuf *rb)
6029 void
6030 rpcrdma_free_regbuf(struct rpcrdma_regbuf *rb)
6031 {
6032 - if (!rb)
6033 - return;
6034 -
6035 rpcrdma_dma_unmap_regbuf(rb);
6036 kfree(rb);
6037 }
6038 diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
6039 index d01913404581..a42cbbf2c8d9 100644
6040 --- a/sound/core/seq/seq_clientmgr.c
6041 +++ b/sound/core/seq/seq_clientmgr.c
6042 @@ -1003,7 +1003,7 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
6043 {
6044 struct snd_seq_client *client = file->private_data;
6045 int written = 0, len;
6046 - int err = -EINVAL;
6047 + int err;
6048 struct snd_seq_event event;
6049
6050 if (!(snd_seq_file_flags(file) & SNDRV_SEQ_LFLG_OUTPUT))
6051 @@ -1018,11 +1018,15 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
6052
6053 /* allocate the pool now if the pool is not allocated yet */
6054 if (client->pool->size > 0 && !snd_seq_write_pool_allocated(client)) {
6055 - if (snd_seq_pool_init(client->pool) < 0)
6056 + mutex_lock(&client->ioctl_mutex);
6057 + err = snd_seq_pool_init(client->pool);
6058 + mutex_unlock(&client->ioctl_mutex);
6059 + if (err < 0)
6060 return -ENOMEM;
6061 }
6062
6063 /* only process whole events */
6064 + err = -EINVAL;
6065 while (count >= sizeof(struct snd_seq_event)) {
6066 /* Read in the event header from the user */
6067 len = sizeof(event);
6068 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
6069 index 1750e00c5bb4..4ff1f0ca52fc 100644
6070 --- a/sound/pci/hda/patch_realtek.c
6071 +++ b/sound/pci/hda/patch_realtek.c
6072 @@ -3378,6 +3378,19 @@ static void alc269_fixup_pincfg_no_hp_to_lineout(struct hda_codec *codec,
6073 spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
6074 }
6075
6076 +static void alc269_fixup_pincfg_U7x7_headset_mic(struct hda_codec *codec,
6077 + const struct hda_fixup *fix,
6078 + int action)
6079 +{
6080 + unsigned int cfg_headphone = snd_hda_codec_get_pincfg(codec, 0x21);
6081 + unsigned int cfg_headset_mic = snd_hda_codec_get_pincfg(codec, 0x19);
6082 +
6083 + if (cfg_headphone && cfg_headset_mic == 0x411111f0)
6084 + snd_hda_codec_set_pincfg(codec, 0x19,
6085 + (cfg_headphone & ~AC_DEFCFG_DEVICE) |
6086 + (AC_JACK_MIC_IN << AC_DEFCFG_DEVICE_SHIFT));
6087 +}
6088 +
6089 static void alc269_fixup_hweq(struct hda_codec *codec,
6090 const struct hda_fixup *fix, int action)
6091 {
6092 @@ -4850,6 +4863,28 @@ static void alc_fixup_tpt440_dock(struct hda_codec *codec,
6093 }
6094 }
6095
6096 +static void alc_fixup_tpt470_dock(struct hda_codec *codec,
6097 + const struct hda_fixup *fix, int action)
6098 +{
6099 + static const struct hda_pintbl pincfgs[] = {
6100 + { 0x17, 0x21211010 }, /* dock headphone */
6101 + { 0x19, 0x21a11010 }, /* dock mic */
6102 + { }
6103 + };
6104 + struct alc_spec *spec = codec->spec;
6105 +
6106 + if (action == HDA_FIXUP_ACT_PRE_PROBE) {
6107 + spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
6108 + /* Enable DOCK device */
6109 + snd_hda_codec_write(codec, 0x17, 0,
6110 + AC_VERB_SET_CONFIG_DEFAULT_BYTES_3, 0);
6111 + /* Enable DOCK device */
6112 + snd_hda_codec_write(codec, 0x19, 0,
6113 + AC_VERB_SET_CONFIG_DEFAULT_BYTES_3, 0);
6114 + snd_hda_apply_pincfgs(codec, pincfgs);
6115 + }
6116 +}
6117 +
6118 static void alc_shutup_dell_xps13(struct hda_codec *codec)
6119 {
6120 struct alc_spec *spec = codec->spec;
6121 @@ -5229,6 +5264,7 @@ enum {
6122 ALC269_FIXUP_LIFEBOOK_EXTMIC,
6123 ALC269_FIXUP_LIFEBOOK_HP_PIN,
6124 ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT,
6125 + ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC,
6126 ALC269_FIXUP_AMIC,
6127 ALC269_FIXUP_DMIC,
6128 ALC269VB_FIXUP_AMIC,
6129 @@ -5324,6 +5360,7 @@ enum {
6130 ALC700_FIXUP_INTEL_REFERENCE,
6131 ALC274_FIXUP_DELL_BIND_DACS,
6132 ALC274_FIXUP_DELL_AIO_LINEOUT_VERB,
6133 + ALC298_FIXUP_TPT470_DOCK,
6134 };
6135
6136 static const struct hda_fixup alc269_fixups[] = {
6137 @@ -5434,6 +5471,10 @@ static const struct hda_fixup alc269_fixups[] = {
6138 .type = HDA_FIXUP_FUNC,
6139 .v.func = alc269_fixup_pincfg_no_hp_to_lineout,
6140 },
6141 + [ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC] = {
6142 + .type = HDA_FIXUP_FUNC,
6143 + .v.func = alc269_fixup_pincfg_U7x7_headset_mic,
6144 + },
6145 [ALC269_FIXUP_AMIC] = {
6146 .type = HDA_FIXUP_PINS,
6147 .v.pins = (const struct hda_pintbl[]) {
6148 @@ -6149,6 +6190,12 @@ static const struct hda_fixup alc269_fixups[] = {
6149 .chained = true,
6150 .chain_id = ALC274_FIXUP_DELL_BIND_DACS
6151 },
6152 + [ALC298_FIXUP_TPT470_DOCK] = {
6153 + .type = HDA_FIXUP_FUNC,
6154 + .v.func = alc_fixup_tpt470_dock,
6155 + .chained = true,
6156 + .chain_id = ALC293_FIXUP_LENOVO_SPK_NOISE
6157 + },
6158 };
6159
6160 static const struct snd_pci_quirk alc269_fixup_tbl[] = {
6161 @@ -6199,6 +6246,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
6162 SND_PCI_QUIRK(0x1028, 0x075d, "Dell AIO", ALC298_FIXUP_SPK_VOLUME),
6163 SND_PCI_QUIRK(0x1028, 0x0798, "Dell Inspiron 17 7000 Gaming", ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER),
6164 SND_PCI_QUIRK(0x1028, 0x082a, "Dell XPS 13 9360", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE),
6165 + SND_PCI_QUIRK(0x1028, 0x084b, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB),
6166 + SND_PCI_QUIRK(0x1028, 0x084e, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB),
6167 SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
6168 SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
6169 SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
6170 @@ -6300,6 +6349,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
6171 SND_PCI_QUIRK(0x10cf, 0x159f, "Lifebook E780", ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT),
6172 SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
6173 SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
6174 + SND_PCI_QUIRK(0x10cf, 0x1629, "Lifebook U7x7", ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC),
6175 SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
6176 SND_PCI_QUIRK(0x10ec, 0x10f2, "Intel Reference board", ALC700_FIXUP_INTEL_REFERENCE),
6177 SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
6178 @@ -6328,8 +6378,16 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
6179 SND_PCI_QUIRK(0x17aa, 0x2218, "Thinkpad X1 Carbon 2nd", ALC292_FIXUP_TPT440_DOCK),
6180 SND_PCI_QUIRK(0x17aa, 0x2223, "ThinkPad T550", ALC292_FIXUP_TPT440_DOCK),
6181 SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK),
6182 + SND_PCI_QUIRK(0x17aa, 0x222d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
6183 + SND_PCI_QUIRK(0x17aa, 0x222e, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
6184 SND_PCI_QUIRK(0x17aa, 0x2231, "Thinkpad T560", ALC292_FIXUP_TPT460),
6185 SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC292_FIXUP_TPT460),
6186 + SND_PCI_QUIRK(0x17aa, 0x2245, "Thinkpad T470", ALC298_FIXUP_TPT470_DOCK),
6187 + SND_PCI_QUIRK(0x17aa, 0x2246, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
6188 + SND_PCI_QUIRK(0x17aa, 0x2247, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
6189 + SND_PCI_QUIRK(0x17aa, 0x224b, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
6190 + SND_PCI_QUIRK(0x17aa, 0x224c, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
6191 + SND_PCI_QUIRK(0x17aa, 0x224d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
6192 SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
6193 SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
6194 SND_PCI_QUIRK(0x17aa, 0x310c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
6195 @@ -6350,7 +6408,12 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
6196 SND_PCI_QUIRK(0x17aa, 0x5050, "Thinkpad T560p", ALC292_FIXUP_TPT460),
6197 SND_PCI_QUIRK(0x17aa, 0x5051, "Thinkpad L460", ALC292_FIXUP_TPT460),
6198 SND_PCI_QUIRK(0x17aa, 0x5053, "Thinkpad T460", ALC292_FIXUP_TPT460),
6199 + SND_PCI_QUIRK(0x17aa, 0x505d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
6200 + SND_PCI_QUIRK(0x17aa, 0x505f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
6201 + SND_PCI_QUIRK(0x17aa, 0x5062, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
6202 SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
6203 + SND_PCI_QUIRK(0x17aa, 0x511e, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
6204 + SND_PCI_QUIRK(0x17aa, 0x511f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
6205 SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),
6206 SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
6207 SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */
6208 @@ -6612,6 +6675,11 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
6209 {0x12, 0xb7a60130},
6210 {0x14, 0x90170110},
6211 {0x21, 0x02211020}),
6212 + SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
6213 + {0x12, 0x90a60130},
6214 + {0x14, 0x90170110},
6215 + {0x14, 0x01011020},
6216 + {0x21, 0x0221101f}),
6217 SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
6218 ALC256_STANDARD_PINS),
6219 SND_HDA_PIN_QUIRK(0x10ec0256, 0x1043, "ASUS", ALC256_FIXUP_ASUS_MIC,
6220 @@ -6681,6 +6749,10 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
6221 {0x12, 0x90a60120},
6222 {0x14, 0x90170110},
6223 {0x21, 0x0321101f}),
6224 + SND_HDA_PIN_QUIRK(0x10ec0289, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
6225 + {0x12, 0xb7a60130},
6226 + {0x14, 0x90170110},
6227 + {0x21, 0x04211020}),
6228 SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
6229 ALC290_STANDARD_PINS,
6230 {0x15, 0x04211040},
6231 diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
6232 index 2b4ceda36291..20b28a5a1456 100644
6233 --- a/sound/usb/mixer.c
6234 +++ b/sound/usb/mixer.c
6235 @@ -347,17 +347,20 @@ static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request,
6236 int validx, int *value_ret)
6237 {
6238 struct snd_usb_audio *chip = cval->head.mixer->chip;
6239 - unsigned char buf[4 + 3 * sizeof(__u32)]; /* enough space for one range */
6240 + /* enough space for one range */
6241 + unsigned char buf[sizeof(__u16) + 3 * sizeof(__u32)];
6242 unsigned char *val;
6243 - int idx = 0, ret, size;
6244 + int idx = 0, ret, val_size, size;
6245 __u8 bRequest;
6246
6247 + val_size = uac2_ctl_value_size(cval->val_type);
6248 +
6249 if (request == UAC_GET_CUR) {
6250 bRequest = UAC2_CS_CUR;
6251 - size = uac2_ctl_value_size(cval->val_type);
6252 + size = val_size;
6253 } else {
6254 bRequest = UAC2_CS_RANGE;
6255 - size = sizeof(buf);
6256 + size = sizeof(__u16) + 3 * val_size;
6257 }
6258
6259 memset(buf, 0, sizeof(buf));
6260 @@ -390,16 +393,17 @@ static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request,
6261 val = buf + sizeof(__u16);
6262 break;
6263 case UAC_GET_MAX:
6264 - val = buf + sizeof(__u16) * 2;
6265 + val = buf + sizeof(__u16) + val_size;
6266 break;
6267 case UAC_GET_RES:
6268 - val = buf + sizeof(__u16) * 3;
6269 + val = buf + sizeof(__u16) + val_size * 2;
6270 break;
6271 default:
6272 return -EINVAL;
6273 }
6274
6275 - *value_ret = convert_signed_value(cval, snd_usb_combine_bytes(val, sizeof(__u16)));
6276 + *value_ret = convert_signed_value(cval,
6277 + snd_usb_combine_bytes(val, val_size));
6278
6279 return 0;
6280 }
6281 diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
6282 index b9c9a19f9588..3cbfae6604f9 100644
6283 --- a/sound/usb/pcm.c
6284 +++ b/sound/usb/pcm.c
6285 @@ -352,6 +352,15 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
6286 ep = 0x86;
6287 iface = usb_ifnum_to_if(dev, 2);
6288
6289 + if (!iface || iface->num_altsetting == 0)
6290 + return -EINVAL;
6291 +
6292 + alts = &iface->altsetting[1];
6293 + goto add_sync_ep;
6294 + case USB_ID(0x1397, 0x0002):
6295 + ep = 0x81;
6296 + iface = usb_ifnum_to_if(dev, 1);
6297 +
6298 if (!iface || iface->num_altsetting == 0)
6299 return -EINVAL;
6300
6301 diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
6302 index a66ef5777887..ea8f3de92fa4 100644
6303 --- a/sound/usb/quirks.c
6304 +++ b/sound/usb/quirks.c
6305 @@ -1363,8 +1363,11 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
6306 return SNDRV_PCM_FMTBIT_DSD_U32_BE;
6307 break;
6308
6309 - /* Amanero Combo384 USB interface with native DSD support */
6310 - case USB_ID(0x16d0, 0x071a):
6311 + /* Amanero Combo384 USB based DACs with native DSD support */
6312 + case USB_ID(0x16d0, 0x071a): /* Amanero - Combo384 */
6313 + case USB_ID(0x2ab6, 0x0004): /* T+A DAC8DSD-V2.0, MP1000E-V2.0, MP2000R-V2.0, MP2500R-V2.0, MP3100HV-V2.0 */
6314 + case USB_ID(0x2ab6, 0x0005): /* T+A USB HD Audio 1 */
6315 + case USB_ID(0x2ab6, 0x0006): /* T+A USB HD Audio 2 */
6316 if (fp->altsetting == 2) {
6317 switch (le16_to_cpu(chip->dev->descriptor.bcdDevice)) {
6318 case 0x199:
6319 diff --git a/tools/objtool/check.c b/tools/objtool/check.c
6320 index 2e458eb45586..c7fb5c2392ee 100644
6321 --- a/tools/objtool/check.c
6322 +++ b/tools/objtool/check.c
6323 @@ -1935,13 +1935,19 @@ static bool ignore_unreachable_insn(struct instruction *insn)
6324 if (is_kasan_insn(insn) || is_ubsan_insn(insn))
6325 return true;
6326
6327 - if (insn->type == INSN_JUMP_UNCONDITIONAL && insn->jump_dest) {
6328 - insn = insn->jump_dest;
6329 - continue;
6330 + if (insn->type == INSN_JUMP_UNCONDITIONAL) {
6331 + if (insn->jump_dest &&
6332 + insn->jump_dest->func == insn->func) {
6333 + insn = insn->jump_dest;
6334 + continue;
6335 + }
6336 +
6337 + break;
6338 }
6339
6340 if (insn->offset + insn->len >= insn->func->offset + insn->func->len)
6341 break;
6342 +
6343 insn = list_next_entry(insn, list);
6344 }
6345
6346 diff --git a/tools/testing/selftests/seccomp/seccomp_bpf.c b/tools/testing/selftests/seccomp/seccomp_bpf.c
6347 index 24dbf634e2dd..0b457e8e0f0c 100644
6348 --- a/tools/testing/selftests/seccomp/seccomp_bpf.c
6349 +++ b/tools/testing/selftests/seccomp/seccomp_bpf.c
6350 @@ -1717,7 +1717,7 @@ void tracer_ptrace(struct __test_metadata *_metadata, pid_t tracee,
6351
6352 if (nr == __NR_getpid)
6353 change_syscall(_metadata, tracee, __NR_getppid);
6354 - if (nr == __NR_open)
6355 + if (nr == __NR_openat)
6356 change_syscall(_metadata, tracee, -1);
6357 }
6358
6359 @@ -1792,7 +1792,7 @@ TEST_F(TRACE_syscall, ptrace_syscall_dropped)
6360 true);
6361
6362 /* Tracer should skip the open syscall, resulting in EPERM. */
6363 - EXPECT_SYSCALL_RETURN(EPERM, syscall(__NR_open));
6364 + EXPECT_SYSCALL_RETURN(EPERM, syscall(__NR_openat));
6365 }
6366
6367 TEST_F(TRACE_syscall, syscall_allowed)
6368 diff --git a/tools/testing/selftests/vm/compaction_test.c b/tools/testing/selftests/vm/compaction_test.c
6369 index a65b016d4c13..1097f04e4d80 100644
6370 --- a/tools/testing/selftests/vm/compaction_test.c
6371 +++ b/tools/testing/selftests/vm/compaction_test.c
6372 @@ -137,6 +137,8 @@ int check_compaction(unsigned long mem_free, unsigned int hugepage_size)
6373 printf("No of huge pages allocated = %d\n",
6374 (atoi(nr_hugepages)));
6375
6376 + lseek(fd, 0, SEEK_SET);
6377 +
6378 if (write(fd, initial_nr_hugepages, strlen(initial_nr_hugepages))
6379 != strlen(initial_nr_hugepages)) {
6380 perror("Failed to write value to /proc/sys/vm/nr_hugepages\n");
6381 diff --git a/tools/testing/selftests/x86/Makefile b/tools/testing/selftests/x86/Makefile
6382 index 5d4f10ac2af2..aa6e2d7f6a1f 100644
6383 --- a/tools/testing/selftests/x86/Makefile
6384 +++ b/tools/testing/selftests/x86/Makefile
6385 @@ -5,16 +5,26 @@ include ../lib.mk
6386
6387 .PHONY: all all_32 all_64 warn_32bit_failure clean
6388
6389 -TARGETS_C_BOTHBITS := single_step_syscall sysret_ss_attrs syscall_nt ptrace_syscall test_mremap_vdso \
6390 - check_initial_reg_state sigreturn ldt_gdt iopl mpx-mini-test ioperm \
6391 +UNAME_M := $(shell uname -m)
6392 +CAN_BUILD_I386 := $(shell ./check_cc.sh $(CC) trivial_32bit_program.c -m32)
6393 +CAN_BUILD_X86_64 := $(shell ./check_cc.sh $(CC) trivial_64bit_program.c)
6394 +
6395 +TARGETS_C_BOTHBITS := single_step_syscall sysret_ss_attrs syscall_nt test_mremap_vdso \
6396 + check_initial_reg_state sigreturn iopl mpx-mini-test ioperm \
6397 protection_keys test_vdso test_vsyscall
6398 TARGETS_C_32BIT_ONLY := entry_from_vm86 syscall_arg_fault test_syscall_vdso unwind_vdso \
6399 test_FCMOV test_FCOMI test_FISTTP \
6400 vdso_restorer
6401 -TARGETS_C_64BIT_ONLY := fsgsbase sysret_rip 5lvl
6402 +TARGETS_C_64BIT_ONLY := fsgsbase sysret_rip
6403 +# Some selftests require 32bit support enabled also on 64bit systems
6404 +TARGETS_C_32BIT_NEEDED := ldt_gdt ptrace_syscall
6405
6406 -TARGETS_C_32BIT_ALL := $(TARGETS_C_BOTHBITS) $(TARGETS_C_32BIT_ONLY)
6407 +TARGETS_C_32BIT_ALL := $(TARGETS_C_BOTHBITS) $(TARGETS_C_32BIT_ONLY) $(TARGETS_C_32BIT_NEEDED)
6408 TARGETS_C_64BIT_ALL := $(TARGETS_C_BOTHBITS) $(TARGETS_C_64BIT_ONLY)
6409 +ifeq ($(CAN_BUILD_I386)$(CAN_BUILD_X86_64),11)
6410 +TARGETS_C_64BIT_ALL += $(TARGETS_C_32BIT_NEEDED)
6411 +endif
6412 +
6413 BINARIES_32 := $(TARGETS_C_32BIT_ALL:%=%_32)
6414 BINARIES_64 := $(TARGETS_C_64BIT_ALL:%=%_64)
6415
6416 @@ -23,18 +33,16 @@ BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))
6417
6418 CFLAGS := -O2 -g -std=gnu99 -pthread -Wall -no-pie
6419
6420 -UNAME_M := $(shell uname -m)
6421 -CAN_BUILD_I386 := $(shell ./check_cc.sh $(CC) trivial_32bit_program.c -m32)
6422 -CAN_BUILD_X86_64 := $(shell ./check_cc.sh $(CC) trivial_64bit_program.c)
6423 -
6424 ifeq ($(CAN_BUILD_I386),1)
6425 all: all_32
6426 TEST_PROGS += $(BINARIES_32)
6427 +EXTRA_CFLAGS += -DCAN_BUILD_32
6428 endif
6429
6430 ifeq ($(CAN_BUILD_X86_64),1)
6431 all: all_64
6432 TEST_PROGS += $(BINARIES_64)
6433 +EXTRA_CFLAGS += -DCAN_BUILD_64
6434 endif
6435
6436 all_32: $(BINARIES_32)
6437 diff --git a/tools/testing/selftests/x86/mpx-mini-test.c b/tools/testing/selftests/x86/mpx-mini-test.c
6438 index ec0f6b45ce8b..9c0325e1ea68 100644
6439 --- a/tools/testing/selftests/x86/mpx-mini-test.c
6440 +++ b/tools/testing/selftests/x86/mpx-mini-test.c
6441 @@ -315,11 +315,39 @@ static inline void *__si_bounds_upper(siginfo_t *si)
6442 return si->si_upper;
6443 }
6444 #else
6445 +
6446 +/*
6447 + * This deals with old version of _sigfault in some distros:
6448 + *
6449 +
6450 +old _sigfault:
6451 + struct {
6452 + void *si_addr;
6453 + } _sigfault;
6454 +
6455 +new _sigfault:
6456 + struct {
6457 + void __user *_addr;
6458 + int _trapno;
6459 + short _addr_lsb;
6460 + union {
6461 + struct {
6462 + void __user *_lower;
6463 + void __user *_upper;
6464 + } _addr_bnd;
6465 + __u32 _pkey;
6466 + };
6467 + } _sigfault;
6468 + *
6469 + */
6470 +
6471 static inline void **__si_bounds_hack(siginfo_t *si)
6472 {
6473 void *sigfault = &si->_sifields._sigfault;
6474 void *end_sigfault = sigfault + sizeof(si->_sifields._sigfault);
6475 - void **__si_lower = end_sigfault;
6476 + int *trapno = (int*)end_sigfault;
6477 + /* skip _trapno and _addr_lsb */
6478 + void **__si_lower = (void**)(trapno + 2);
6479
6480 return __si_lower;
6481 }
6482 @@ -331,7 +359,7 @@ static inline void *__si_bounds_lower(siginfo_t *si)
6483
6484 static inline void *__si_bounds_upper(siginfo_t *si)
6485 {
6486 - return (*__si_bounds_hack(si)) + sizeof(void *);
6487 + return *(__si_bounds_hack(si) + 1);
6488 }
6489 #endif
6490
6491 diff --git a/tools/testing/selftests/x86/protection_keys.c b/tools/testing/selftests/x86/protection_keys.c
6492 index bc1b0735bb50..f15aa5a76fe3 100644
6493 --- a/tools/testing/selftests/x86/protection_keys.c
6494 +++ b/tools/testing/selftests/x86/protection_keys.c
6495 @@ -393,34 +393,6 @@ pid_t fork_lazy_child(void)
6496 return forkret;
6497 }
6498
6499 -void davecmp(void *_a, void *_b, int len)
6500 -{
6501 - int i;
6502 - unsigned long *a = _a;
6503 - unsigned long *b = _b;
6504 -
6505 - for (i = 0; i < len / sizeof(*a); i++) {
6506 - if (a[i] == b[i])
6507 - continue;
6508 -
6509 - dprintf3("[%3d]: a: %016lx b: %016lx\n", i, a[i], b[i]);
6510 - }
6511 -}
6512 -
6513 -void dumpit(char *f)
6514 -{
6515 - int fd = open(f, O_RDONLY);
6516 - char buf[100];
6517 - int nr_read;
6518 -
6519 - dprintf2("maps fd: %d\n", fd);
6520 - do {
6521 - nr_read = read(fd, &buf[0], sizeof(buf));
6522 - write(1, buf, nr_read);
6523 - } while (nr_read > 0);
6524 - close(fd);
6525 -}
6526 -
6527 #define PKEY_DISABLE_ACCESS 0x1
6528 #define PKEY_DISABLE_WRITE 0x2
6529
6530 diff --git a/tools/testing/selftests/x86/single_step_syscall.c b/tools/testing/selftests/x86/single_step_syscall.c
6531 index a48da95c18fd..ddfdd635de16 100644
6532 --- a/tools/testing/selftests/x86/single_step_syscall.c
6533 +++ b/tools/testing/selftests/x86/single_step_syscall.c
6534 @@ -119,7 +119,9 @@ static void check_result(void)
6535
6536 int main()
6537 {
6538 +#ifdef CAN_BUILD_32
6539 int tmp;
6540 +#endif
6541
6542 sethandler(SIGTRAP, sigtrap, 0);
6543
6544 @@ -139,12 +141,13 @@ int main()
6545 : : "c" (post_nop) : "r11");
6546 check_result();
6547 #endif
6548 -
6549 +#ifdef CAN_BUILD_32
6550 printf("[RUN]\tSet TF and check int80\n");
6551 set_eflags(get_eflags() | X86_EFLAGS_TF);
6552 asm volatile ("int $0x80" : "=a" (tmp) : "a" (SYS_getpid)
6553 : INT80_CLOBBERS);
6554 check_result();
6555 +#endif
6556
6557 /*
6558 * This test is particularly interesting if fast syscalls use
6559 diff --git a/tools/testing/selftests/x86/test_mremap_vdso.c b/tools/testing/selftests/x86/test_mremap_vdso.c
6560 index bf0d687c7db7..64f11c8d9b76 100644
6561 --- a/tools/testing/selftests/x86/test_mremap_vdso.c
6562 +++ b/tools/testing/selftests/x86/test_mremap_vdso.c
6563 @@ -90,8 +90,12 @@ int main(int argc, char **argv, char **envp)
6564 vdso_size += PAGE_SIZE;
6565 }
6566
6567 +#ifdef __i386__
6568 /* Glibc is likely to explode now - exit with raw syscall */
6569 asm volatile ("int $0x80" : : "a" (__NR_exit), "b" (!!ret));
6570 +#else /* __x86_64__ */
6571 + syscall(SYS_exit, ret);
6572 +#endif
6573 } else {
6574 int status;
6575
6576 diff --git a/tools/testing/selftests/x86/test_vdso.c b/tools/testing/selftests/x86/test_vdso.c
6577 index 29973cde06d3..235259011704 100644
6578 --- a/tools/testing/selftests/x86/test_vdso.c
6579 +++ b/tools/testing/selftests/x86/test_vdso.c
6580 @@ -26,20 +26,59 @@
6581 # endif
6582 #endif
6583
6584 +/* max length of lines in /proc/self/maps - anything longer is skipped here */
6585 +#define MAPS_LINE_LEN 128
6586 +
6587 int nerrs = 0;
6588
6589 +typedef long (*getcpu_t)(unsigned *, unsigned *, void *);
6590 +
6591 +getcpu_t vgetcpu;
6592 +getcpu_t vdso_getcpu;
6593 +
6594 +static void *vsyscall_getcpu(void)
6595 +{
6596 #ifdef __x86_64__
6597 -# define VSYS(x) (x)
6598 + FILE *maps;
6599 + char line[MAPS_LINE_LEN];
6600 + bool found = false;
6601 +
6602 + maps = fopen("/proc/self/maps", "r");
6603 + if (!maps) /* might still be present, but ignore it here, as we test vDSO not vsyscall */
6604 + return NULL;
6605 +
6606 + while (fgets(line, MAPS_LINE_LEN, maps)) {
6607 + char r, x;
6608 + void *start, *end;
6609 + char name[MAPS_LINE_LEN];
6610 +
6611 + /* sscanf() is safe here as strlen(name) >= strlen(line) */
6612 + if (sscanf(line, "%p-%p %c-%cp %*x %*x:%*x %*u %s",
6613 + &start, &end, &r, &x, name) != 5)
6614 + continue;
6615 +
6616 + if (strcmp(name, "[vsyscall]"))
6617 + continue;
6618 +
6619 + /* assume entries are OK, as we test vDSO here not vsyscall */
6620 + found = true;
6621 + break;
6622 + }
6623 +
6624 + fclose(maps);
6625 +
6626 + if (!found) {
6627 + printf("Warning: failed to find vsyscall getcpu\n");
6628 + return NULL;
6629 + }
6630 + return (void *) (0xffffffffff600800);
6631 #else
6632 -# define VSYS(x) 0
6633 + return NULL;
6634 #endif
6635 +}
6636
6637 -typedef long (*getcpu_t)(unsigned *, unsigned *, void *);
6638 -
6639 -const getcpu_t vgetcpu = (getcpu_t)VSYS(0xffffffffff600800);
6640 -getcpu_t vdso_getcpu;
6641
6642 -void fill_function_pointers()
6643 +static void fill_function_pointers()
6644 {
6645 void *vdso = dlopen("linux-vdso.so.1",
6646 RTLD_LAZY | RTLD_LOCAL | RTLD_NOLOAD);
6647 @@ -54,6 +93,8 @@ void fill_function_pointers()
6648 vdso_getcpu = (getcpu_t)dlsym(vdso, "__vdso_getcpu");
6649 if (!vdso_getcpu)
6650 printf("Warning: failed to find getcpu in vDSO\n");
6651 +
6652 + vgetcpu = (getcpu_t) vsyscall_getcpu();
6653 }
6654
6655 static long sys_getcpu(unsigned * cpu, unsigned * node,
6656 diff --git a/tools/testing/selftests/x86/test_vsyscall.c b/tools/testing/selftests/x86/test_vsyscall.c
6657 index 7a744fa7b786..be81621446f0 100644
6658 --- a/tools/testing/selftests/x86/test_vsyscall.c
6659 +++ b/tools/testing/selftests/x86/test_vsyscall.c
6660 @@ -33,6 +33,9 @@
6661 # endif
6662 #endif
6663
6664 +/* max length of lines in /proc/self/maps - anything longer is skipped here */
6665 +#define MAPS_LINE_LEN 128
6666 +
6667 static void sethandler(int sig, void (*handler)(int, siginfo_t *, void *),
6668 int flags)
6669 {
6670 @@ -98,7 +101,7 @@ static int init_vsys(void)
6671 #ifdef __x86_64__
6672 int nerrs = 0;
6673 FILE *maps;
6674 - char line[128];
6675 + char line[MAPS_LINE_LEN];
6676 bool found = false;
6677
6678 maps = fopen("/proc/self/maps", "r");
6679 @@ -108,10 +111,12 @@ static int init_vsys(void)
6680 return 0;
6681 }
6682
6683 - while (fgets(line, sizeof(line), maps)) {
6684 + while (fgets(line, MAPS_LINE_LEN, maps)) {
6685 char r, x;
6686 void *start, *end;
6687 - char name[128];
6688 + char name[MAPS_LINE_LEN];
6689 +
6690 + /* sscanf() is safe here as strlen(name) >= strlen(line) */
6691 if (sscanf(line, "%p-%p %c-%cp %*x %*x:%*x %*u %s",
6692 &start, &end, &r, &x, name) != 5)
6693 continue;